From db7b1f5903a1542daaa397853591440a3798a198 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Mon, 14 May 2018 11:18:41 +0200 Subject: [PATCH 001/128] phy test fix --- openair1/PHY/defs.h | 7 +-- openair1/SCHED/fapi_l1.c | 18 +++++- openair1/SCHED/phy_procedures_lte_eNb.c | 3 +- openair1/SCHED/ru_procedures.c | 29 +++++++++ openair2/ENB_APP/enb_paramdef.h | 39 ------------ openair2/LAYER2/MAC/eNB_scheduler.c | 1 + openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 18 +++--- .../CONF/enb.band7.tm1.100PRB.usrpx310.conf | 2 +- targets/RT/USER/lte-enb.c | 21 ++++--- targets/RT/USER/lte-ru.c | 60 +++++++++---------- targets/RT/USER/lte-softmodem.c | 2 +- targets/RT/USER/lte-softmodem.h | 2 +- 12 files changed, 102 insertions(+), 100 deletions(-) diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 1d2b622e7e..bcbcca9ab3 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -425,11 +425,11 @@ typedef struct RU_proc_t_s { pthread_cond_t cond_synch; /// condition variable for asynch RX/TX thread pthread_cond_t cond_asynch_rxtx; - /// condition varible for RU RX FEP thread + /// condition variable for RU RX FEP thread pthread_cond_t cond_fep; - /// condition varible for RU TX FEP thread + /// condition variable for RU TX FEP thread pthread_cond_t cond_feptx; - /// condition varible for emulated RF + /// condition variable for emulated RF pthread_cond_t cond_emulateRF; /// condition variable for eNB signal pthread_cond_t cond_eNBs; @@ -702,7 +702,6 @@ typedef enum { REMOTE_IF4p5 =3, REMOTE_IF1pp =4, MAX_RU_IF_TYPES =5 - //EMULATE_RF =6 } RU_if_south_t; typedef struct RU_t_s{ diff --git a/openair1/SCHED/fapi_l1.c b/openair1/SCHED/fapi_l1.c index df01fad136..5062d92d67 100644 --- a/openair1/SCHED/fapi_l1.c +++ b/openair1/SCHED/fapi_l1.c @@ -167,6 +167,16 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr #endif harq_pid = dlsch0->harq_ids[subframe]; +LOG_I(PHY,"handle_nfapi_dlsch_pdu subframe = %d harq_ids = [%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]\n", subframe,dlsch0->harq_ids[0], + dlsch0->harq_ids[1], + dlsch0->harq_ids[2], + dlsch0->harq_ids[3], + dlsch0->harq_ids[4], + dlsch0->harq_ids[5], + dlsch0->harq_ids[6], + dlsch0->harq_ids[7], + dlsch0->harq_ids[8], + dlsch0->harq_ids[9]);/////////////*********added AssertFatal((harq_pid>=0) && (harq_pid<8),"harq_pid %d not in 0...7 frame:%d subframe:%d subframe(TX):%d rnti:%x UE_id:%d dlsch0[harq_ids:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]\n", harq_pid, frame,subframe, @@ -624,7 +634,6 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) AssertFatal(RC.eNB[Mod_id][CC_id]!=NULL,"RC.eNB[%d][%d] is null\n",Mod_id,CC_id); - eNB = RC.eNB[Mod_id][CC_id]; fp = &eNB->frame_parms; proc = &eNB->proc.proc_rxtx[0]; @@ -672,6 +681,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) LOG_D(PHY,"NFAPI: Clearing dci allocations for potential UL subframe %d\n",ul_subframe); harq_pid = subframe2harq_pid(fp,ul_frame,ul_subframe); +LOG_I(PHY,"schedule_response %d.%d UL %d.%d harq_pid = %d\n", frame, subframe, ul_frame, ul_subframe, harq_pid);/////////////*********added // clear DCI allocation maps for new subframe @@ -685,9 +695,10 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) } for (i=0;idl_config_request_body.dl_config_pdu_list[i]; - //LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type); + LOG_I(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type);/////////////*********LOG_D with mark out switch (dl_config_pdu->pdu_type) { case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE: +//LOG_I(PHY,"NFAPI: dl_pdu %d : type %d executing handle_nfapi_dci_dl_pdu()\n",i,dl_config_pdu->pdu_type);/////////////*********added handle_nfapi_dci_dl_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu); eNB->pdcch_vars[NFAPI_SFNSF2SF(DL_req->sfn_sf)&1].num_dci++; //LOG_E(PHY,"Incremented num_dci:%d but already set??? dl_config:num_dci:%d\n", eNB->pdcch_vars[subframe&1].num_dci, number_dci); @@ -735,8 +746,9 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) (dlsch_pdu_rel8->transport_blocks>0), "dlsch_pdu_rel8->transport_blocks = %d not in [1,2]\n", dlsch_pdu_rel8->transport_blocks); - if (1)//sdu != NULL) + if (sdu != NULL) { +LOG_I(PHY,"NFAPI: executing handle_nfapi_dlsch_pdu()\n");/////////////*********added handle_nfapi_dlsch_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu, dlsch_pdu_rel8->transport_blocks-1, sdu); } else diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index ecdf8e5756..eabffd6533 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -359,7 +359,6 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, &eNB->dlsch_turbo_encoding_wakeup_stats1, &eNB->dlsch_interleaving_stats); stop_meas(&eNB->dlsch_encoding_stats); - //////////////////////////////////////////////////******************************************* if(eNB->dlsch_encoding_stats.diff_now>500*3000 && opp_enabled == 1) { print_meas_now(&eNB->dlsch_encoding_stats,"total coding",stderr); @@ -471,6 +470,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, if (ul_subframe < 10) { // This means that there is a potential UL subframe that will be scheduled here for (i=0; iulsch[i]) { ulsch_harq = eNB->ulsch[i]->harq_processes[harq_pid]; @@ -536,6 +536,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,1); // Now scan UE specific DLSCH LTE_eNB_DLSCH_t *dlsch0,*dlsch1; +LOG_I(PHY,"phy_procedures_eNB_TX before dlsch0 %d.%d UL %d.%d harq_pid == %d \n", frame, subframe, ul_frame, ul_subframe, harq_pid);////////////********added for (UE_id=0; UE_iddlsch[(uint8_t)UE_id][0]; diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c index 257fef6e31..519bb1b7f7 100644 --- a/openair1/SCHED/ru_procedures.c +++ b/openair1/SCHED/ru_procedures.c @@ -153,6 +153,7 @@ static void *feptx_thread(void *param) { while (!oai_exit) { if (wait_on_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"feptx thread")<0) break; + if (oai_exit) break; //stop_meas(&ru->ofdm_mod_wakeup_stats); feptx0(ru,1); if (release_thread(&proc->mutex_feptx,&proc->instance_cnt_feptx,"feptx thread")<0) break; @@ -461,6 +462,7 @@ static void *fep_thread(void *param) { while (!oai_exit) { if (wait_on_condition(&proc->mutex_fep,&proc->cond_fep,&proc->instance_cnt_fep,"fep thread")<0) break; + if (oai_exit) break; //stop_meas(&ru->ofdm_demod_wakeup_stats); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX1, 1 ); fep0(ru,0); @@ -510,6 +512,33 @@ void init_fep_thread(RU_t *ru,pthread_attr_t *attr_fep) { } + +extern void kill_fep_thread(RU_t *ru) +{ + RU_proc_t *proc = &ru->proc; + pthread_mutex_lock( &proc->mutex_fep ); + proc->instance_cnt_fep = 0; + pthread_cond_signal(&proc->cond_fep); + pthread_mutex_unlock( &proc->mutex_fep ); + LOG_D(PHY, "Joining pthread_fep\n"); + pthread_join(proc->pthread_fep, NULL); + pthread_mutex_destroy( &proc->mutex_fep ); + pthread_cond_destroy( &proc->cond_fep ); +} + +extern void kill_feptx_thread(RU_t *ru) +{ + RU_proc_t *proc = &ru->proc; + pthread_mutex_lock( &proc->mutex_feptx ); + proc->instance_cnt_feptx = 0; + pthread_cond_signal(&proc->cond_feptx); + pthread_mutex_unlock( &proc->mutex_feptx ); + LOG_D(PHY, "Joining pthread_feptx\n"); + pthread_join(proc->pthread_feptx, NULL); + pthread_mutex_destroy( &proc->mutex_feptx ); + pthread_cond_destroy( &proc->cond_feptx ); +} + void ru_fep_full_2thread(RU_t *ru) { RU_proc_t *proc = &ru->proc; diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h index fe2b5a8515..a8379c259f 100755 --- a/openair2/ENB_APP/enb_paramdef.h +++ b/openair2/ENB_APP/enb_paramdef.h @@ -687,43 +687,4 @@ typedef enum { #define CONFIG_STRING_MACRLC_CONFIG "macrlc_config" -/* MACRLC configuration parameters names */ -#define CONFIG_STRING_MACRLC_CC "num_cc" -#define CONFIG_STRING_MACRLC_TRANSPORT_N_PREFERENCE "tr_n_preference" -#define CONFIG_STRING_MACRLC_LOCAL_N_IF_NAME "local_n_if_name" -#define CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS "local_n_address" -#define CONFIG_STRING_MACRLC_REMOTE_N_ADDRESS "remote_n_address" -#define CONFIG_STRING_MACRLC_LOCAL_N_PORTC "local_n_portc" -#define CONFIG_STRING_MACRLC_REMOTE_N_PORTC "remote_n_portc" -#define CONFIG_STRING_MACRLC_LOCAL_N_PORTD "local_n_portd" -#define CONFIG_STRING_MACRLC_REMOTE_N_PORTD "remote_n_portd" -#define CONFIG_STRING_MACRLC_TRANSPORT_S_PREFERENCE "tr_s_preference" -#define CONFIG_STRING_MACRLC_LOCAL_S_IF_NAME "local_s_if_name" -#define CONFIG_STRING_MACRLC_LOCAL_S_ADDRESS "local_s_address" -#define CONFIG_STRING_MACRLC_REMOTE_S_ADDRESS "remote_s_address" -#define CONFIG_STRING_MACRLC_LOCAL_S_PORTC "local_s_portc" -#define CONFIG_STRING_MACRLC_REMOTE_S_PORTC "remote_s_portc" -#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd" -#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd" -#define CONFIG_STRING_MACRLC_PHY_TEST_MODE "phy_test_mode" - -#define MACRLC_CC_IDX 0 -#define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1 -#define MACRLC_LOCAL_N_IF_NAME_IDX 2 -#define MACRLC_LOCAL_N_ADDRESS_IDX 3 -#define MACRLC_REMOTE_N_ADDRESS_IDX 4 -#define MACRLC_LOCAL_N_PORTC_IDX 5 -#define MACRLC_REMOTE_N_PORTC_IDX 6 -#define MACRLC_LOCAL_N_PORTD_IDX 7 -#define MACRLC_REMOTE_N_PORTD_IDX 8 -#define MACRLC_TRANSPORT_S_PREFERENCE_IDX 9 -#define MACRLC_LOCAL_S_IF_NAME_IDX 10 -#define MACRLC_LOCAL_S_ADDRESS_IDX 11 -#define MACRLC_REMOTE_S_ADDRESS_IDX 12 -#define MACRLC_LOCAL_S_PORTC_IDX 13 -#define MACRLC_REMOTE_S_PORTC_IDX 14 -#define MACRLC_LOCAL_S_PORTD_IDX 15 -#define MACRLC_REMOTE_S_PORTD_IDX 16 -#define MACRLC_PHY_TEST_IDX 17 -/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/ diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index 874b63c6c8..05a094c0ae 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -666,6 +666,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, } else{ schedule_ulsch_phy_test(module_idP,frameP,subframeP); +LOG_I(MAC,"frameP = %d .subframeP = %d\n", frameP, subframeP);/////////////*********added schedule_ue_spec_phy_test(module_idP,frameP,subframeP,mbsfn_status); } diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index e625859324..308811ae4c 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -67,13 +67,13 @@ schedule_ue_spec_phy_test( uint16_t TBS; uint16_t nb_rb; - unsigned char harq_pid = subframeP%5; + unsigned char harq_pid = (frameP*10+subframeP)%8; uint16_t rnti = 0x1235; uint32_t rb_alloc = 0x1FFFFFFF; int32_t tpc = 1; int32_t mcs = 28; int32_t cqi = 15; - int32_t ndi = subframeP/5; + int32_t ndi = 1;//(frameP*10+subframeP)/8; int32_t dai = 0; eNB_MAC_INST *eNB = RC.mac[module_idP]; @@ -92,10 +92,9 @@ schedule_ue_spec_phy_test( continue; nb_rb = conv_nprb(0,rb_alloc,N_RB_DL); - //printf("////////////////////////////////////*************************nb_rb = %d\n",nb_rb); TBS = get_TBS_DL(mcs,nb_rb); - LOG_D(PHY,"schedule_ue_spec_phy_test: subframe %d/%d: nb_rb=%d, TBS=%d, mcs=%d (rb_alloc=%x, N_RB_DL=%d)\n",frameP,subframeP,nb_rb,TBS,mcs,rb_alloc,N_RB_DL); + LOG_I(MAC,"schedule_ue_spec_phy_test: subframe %d/%d: nb_rb=%d, TBS=%d, mcs=%d harq_pid=%d (rb_alloc=%x, N_RB_DL=%d) pdu_number = %d \n", frameP, subframeP, nb_rb, TBS, mcs, harq_pid, rb_alloc, N_RB_DL, dl_req->number_pdu);////////////********change into LOG_I dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); @@ -125,7 +124,7 @@ schedule_ue_spec_phy_test( LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, dai %d, mcs %d\n", module_idP,CC_id,harq_pid,dai,mcs); } else { - LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", + LOG_I(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", module_idP,CC_id,harq_pid,mcs); } @@ -136,6 +135,9 @@ schedule_ue_spec_phy_test( //ue_sched_ctl->round[CC_id][harq_pid] = 0; dl_req->number_dci++; dl_req->number_pdu++; +LOG_I(MAC,"phy-test DL number of dci = %d pdu = %d \n", dl_req->number_dci, dl_req->number_pdu);////////////********added + eNB->DL_req[CC_id].sfn_sf = frameP<<4 | subframeP; + //eNB->DL_req[CC_id].header.message_id = NFAPI_DL_CONFIG_REQUEST; // Toggle NDI for next time /* @@ -149,7 +151,7 @@ schedule_ue_spec_phy_test( AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated is NULL\n"); AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->pdsch_ConfigDedicated!=NULL,"physicalConfigDedicated->pdsch_ConfigDedicated is NULL\n"); */ - +LOG_I(MAC,"pdu_index = %d \n", eNB->pdu_index[CC_id]);////////////********added fill_nfapi_dlsch_config(eNB, @@ -196,7 +198,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s int UE_id = 0; uint8_t aggregation = 2; rnti_t rnti = 0x1235; - uint8_t mcs = 0; + uint8_t mcs = 20; uint8_t harq_pid = 0; uint32_t cqi_req = 0,cshift,ndi,tpc = 1; int32_t normalized_rx_power; @@ -235,7 +237,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s UE_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id]; harq_pid = subframe2harqpid(&cc[CC_id],sched_frame,sched_subframe); - LOG_D(MAC,"Scheduling for frame %d, subframe %d => harq_pid %d\n",sched_frame,sched_subframe,harq_pid); + LOG_I(MAC,"Scheduling for frame %d, subframe %d => harq_pid %d\n",sched_frame,sched_subframe,harq_pid); RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP] = UE_template->TBS_UL[harq_pid]; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf index 6c7c319a11..92b2059e70 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -17,7 +17,7 @@ eNBs = mobile_country_code = "208"; - mobile_network_code = "93"; + mobile_network_code = "92"; tr_s_preference = "local_mac" diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index 7dcfd432de..784148f6cb 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -217,14 +217,14 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam wakeup_prach_eNB_br(eNB,NULL,proc->frame_rx,proc->subframe_rx); #endif } - +LOG_I(PHY,"eNB_uespec_RX proc RX %d.%d TX %d.%d \n", proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx);/////////////*********added // UE-specific RX processing for subframe n if (nfapi_mode == 0 || nfapi_mode == 1) { phy_procedures_eNB_uespec_RX(eNB, proc, no_relay ); } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 1 ); - if(get_nprocs() >= 8){ + if(!eNB->single_thread_flag && get_nprocs() >= 8){ if(wait_on_condition(&proc[1].mutex_rxtx,&proc[1].cond_rxtx,&proc[1].pipe_ready,"wakeup_tx")<0) { LOG_E(PHY,"Frame %d, subframe %d: TX1 not ready\n",proc[1].frame_rx,proc[1].subframe_rx); return(-1); @@ -238,6 +238,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam eNB->UL_INFO.subframe = proc->subframe_rx; eNB->UL_INFO.module_id = eNB->Mod_id; eNB->UL_INFO.CC_id = eNB->CC_id; +LOG_I(PHY,"UL_INFO %d.%d \n", eNB->UL_INFO.frame, eNB->UL_INFO.subframe);/////////////*********added eNB->if_inst->UL_indication(&eNB->UL_INFO); @@ -245,7 +246,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 0 ); if(oai_exit) return(-1); - if(get_nprocs() <= 4){ + if(eNB->single_thread_flag || get_nprocs() <= 4){ phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1); } @@ -327,6 +328,7 @@ static void* tx_thread(void* param) { VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_ENB,proc->frame_tx); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_ENB,proc->frame_rx); +LOG_I(PHY,"tx thread proc RX %d.%d TX %d.%d \n", proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx);/////////////*********added phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1); if (release_thread(&proc->mutex_rxtx,&proc->instance_cnt_rxtx,thread_name)<0) break; @@ -408,7 +410,7 @@ static void* eNB_thread_rxtx( void* param ) { } pthread_mutex_unlock( &proc->mutex_rxtx ); if(get_nprocs() >= 8) wakeup_tx(eNB,eNB->proc.ru_proc); - else + else if(get_nprocs() > 4) { phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1); wakeup_txfh(proc,eNB->proc.ru_proc); @@ -565,7 +567,7 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) { eNB_proc_t *proc=&eNB->proc; RU_proc_t *ru_proc=&ru->proc; - eNB_rxtx_proc_t *proc_rxtx0=&proc->proc_rxtx[0];//*proc_rxtx=&proc->proc_rxtx[proc->frame_rx&1]; + eNB_rxtx_proc_t *proc_rxtx0=&proc->proc_rxtx[0]; //eNB_rxtx_proc_t *proc_rxtx1=&proc->proc_rxtx[1]; @@ -956,21 +958,18 @@ void init_eNB_proc(int inst) { // attr_td = &proc->attr_td; // attr_te = &proc->attr_te; #endif - //////////////////////////////////////need to modified////////////////***** + if(get_nprocs() > 2 && codingw) { init_te_thread(eNB); init_td_thread(eNB); } - //////////////////////////////////////need to modified////////////////***** - pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, proc ); - pthread_create( &proc_rxtx[1].pthread_rxtx, attr1, tx_thread, proc); LOG_I(PHY,"eNB->single_thread_flag:%d\n", eNB->single_thread_flag); if (eNB->single_thread_flag==0) { - pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, &proc_rxtx[0] ); - pthread_create( &proc_rxtx[1].pthread_rxtx, attr1, eNB_thread_rxtx, &proc_rxtx[1] ); + pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, proc ); + pthread_create( &proc_rxtx[1].pthread_rxtx, attr1, tx_thread, proc); } pthread_create( &proc->pthread_prach, attr_prach, eNB_thread_prach, eNB ); #ifdef Rel14 diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 1cbe73c309..ffccb9774f 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -945,7 +945,6 @@ void wakeup_slaves(RU_proc_t *proc) { wait.tv_nsec=5000000L; for (i=0;inum_slaves;i++) { - //printf("////////////////////calling for slave thrads\n");////////////////////////******** RU_proc_t *slave_proc = proc->slave_proc[i]; // wake up slave FH thread // lock the FH mutex and make sure the thread is ready @@ -1197,9 +1196,14 @@ void wakeup_eNBs(RU_t *ru) { { LOG_D(PHY,"ru->wakeup_rxtx:%p\n", ru->wakeup_rxtx); eNB_list[i]->proc.ru_proc = &ru->proc; - if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0) + if(eNB_list[i]->single_thread_flag){ + char string[20]; + sprintf(string,"Incoming RU %d",ru->idx); + ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string,ru); + } + else if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0) { - LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx); + LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx); } } } @@ -1623,7 +1627,8 @@ static void* ru_thread( void* param ) { ru->do_prach, is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx), proc->frame_rx,proc->subframe_rx); -*/ +*/ + if (oai_exit) break; if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)==1)) { wakeup_prach_ru(ru); } @@ -1666,10 +1671,12 @@ static void* ru_thread( void* param ) { printf( "Exiting ru_thread \n"); - if (ru->stop_rf != NULL) { - if (ru->stop_rf(ru) != 0) - LOG_E(HW,"Could not stop the RF device\n"); - else LOG_I(PHY,"RU %d rf device stopped\n",ru->idx); + if (!emulate_rf){ + if (ru->stop_rf != NULL) { + if (ru->stop_rf(ru) != 0) + LOG_E(HW,"Could not stop the RF device\n"); + else LOG_I(PHY,"RU %d rf device stopped\n",ru->idx); + } } ru_thread_status = 0; @@ -1778,6 +1785,8 @@ extern void feptx_ofdm_2thread(RU_t *ru); extern void feptx_prec(RU_t *ru); extern void init_fep_thread(RU_t *ru,pthread_attr_t *attr); extern void init_feptx_thread(RU_t *ru,pthread_attr_t *attr); +extern void kill_fep_thread(RU_t *ru); +extern void kill_feptx_thread(RU_t *ru); void init_RU_proc(RU_t *ru) { @@ -1901,6 +1910,17 @@ void kill_RU_proc(int inst) RU_t *ru = RC.ru[inst]; RU_proc_t *proc = &ru->proc; + if (get_nprocs() > 2 && fepw) { + if (ru->feprx) { + LOG_D(PHY, "killing FEP thread\n"); + kill_fep_thread(ru); + } + if (ru->feptx_ofdm){ + LOG_D(PHY, "killing FEP TX thread\n"); + kill_feptx_thread(ru); + } + } + pthread_mutex_lock(&proc->mutex_FH); proc->instance_cnt_FH = 0; pthread_cond_signal(&proc->cond_FH); @@ -1962,28 +1982,6 @@ void kill_RU_proc(int inst) pthread_join(proc->pthread_asynch_rxtx, NULL); } } - if (get_nprocs() > 2 && fepw) { - if (ru->feprx) { - pthread_mutex_lock(&proc->mutex_fep); - proc->instance_cnt_fep = 0; - pthread_mutex_unlock(&proc->mutex_fep); - pthread_cond_signal(&proc->cond_fep); - LOG_D(PHY, "Joining pthread_fep\n"); - pthread_join(proc->pthread_fep, NULL); - pthread_mutex_destroy(&proc->mutex_fep); - pthread_cond_destroy(&proc->cond_fep); - } - if (ru->feptx_ofdm) { - pthread_mutex_lock(&proc->mutex_feptx); - proc->instance_cnt_feptx = 0; - pthread_mutex_unlock(&proc->mutex_feptx); - pthread_cond_signal(&proc->cond_feptx); - LOG_D(PHY, "Joining pthread_feptx\n"); - pthread_join(proc->pthread_feptx, NULL); - pthread_mutex_destroy(&proc->mutex_feptx); - pthread_cond_destroy(&proc->cond_feptx); - } - } if (opp_enabled) { LOG_D(PHY, "Joining ru_stats_thread\n"); pthread_join(ru->ru_stats_thread, NULL); @@ -2348,7 +2346,7 @@ void set_function_spec_param(RU_t *ru) } // switch on interface type } -extern void RCconfig_RU(void); +//extern void RCconfig_RU(void); void init_RU(char *rf_config_file) { diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 8e469d5260..90d68349f1 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -136,7 +136,7 @@ static clock_source_t clock_source = internal; static int wait_for_sync = 0; unsigned int mmapped_dma=0; -int single_thread_flag=1; +int single_thread_flag = 0; static int8_t threequarter_fs=0; diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index aff969908f..ae9ef50315 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -152,7 +152,7 @@ extern int16_t dlsch_demod_shift; {"mmapped-dma", CONFIG_HLP_DMAMAP, PARAMFLAG_BOOL, uptr:&mmapped_dma, defintval:0, TYPE_INT, 0}, \ {"external-clock", CONFIG_HLP_EXCCLK, PARAMFLAG_BOOL, uptr:&clock_source, defintval:0, TYPE_INT, 0}, \ {"wait-for-sync", NULL, PARAMFLAG_BOOL, iptr:&wait_for_sync, defintval:0, TYPE_INT, 0}, \ -{"single-thread-disable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:1, TYPE_INT, 0}, \ +{"single-thread-enable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:0, TYPE_INT, 0}, \ {"threadIQ", NULL, 0, iptr:&(threads.iq), defintval:1, TYPE_INT, 0}, \ {"threadOneSubframe", NULL, 0, iptr:&(threads.one), defintval:1, TYPE_INT, 0}, \ {"threadTwoSubframe", NULL, 0, iptr:&(threads.two), defintval:1, TYPE_INT, 0}, \ From 7e10daaf1464168943d6c9ffb6e744bb9a267a9e Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Tue, 15 May 2018 15:21:32 +0200 Subject: [PATCH 002/128] bug fix for phy-test DL --- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 14 ++++---- openair1/SCHED/fapi_l1.c | 10 +++--- openair1/SCHED/phy_procedures_lte_eNb.c | 6 ++-- openair2/LAYER2/MAC/eNB_scheduler.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 16 ++++----- targets/RT/USER/lte-enb.c | 37 +++++++++++---------- 6 files changed, 45 insertions(+), 40 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 49db69cff4..7c201d3c75 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -541,16 +541,16 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, proc->tep[i].total_worker = worker_num; proc->tep[i].current_worker = i; if (pthread_cond_signal(&proc->tep[i].cond_te) != 0) { - printf("[eNB] ERROR pthread_cond_signal for te thread exit\n"); - exit_fun( "ERROR pthread_cond_signal" ); - return (-1); + printf("[eNB] ERROR pthread_cond_signal for te thread exit\n"); + exit_fun( "ERROR pthread_cond_signal" ); + return (-1); } } } // Fill in the "e"-sequence from 36-212, V8.6 2009-03, p. 16-17 (for each "e") and concatenate the // outputs for each code segment, see Section 5.1.5 p.20 - +start_meas(rm_stats); for (r=0,r_offset=0; rharq_processes[harq_pid]->C; r++) { // get information for E for the segments that are handled by the worker thread @@ -566,7 +566,7 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, r_offset += Nl*Qm * ((GpmodC==0?0:1) + (Gp/C)); } else { - start_meas(rm_stats); + //start_meas(rm_stats); r_offset += lte_rate_matching_turbo(dlsch->harq_processes[harq_pid]->RTC[r], G, //G dlsch->harq_processes[harq_pid]->w[r], @@ -581,9 +581,10 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, r, nb_rb); // m); // r - stop_meas(rm_stats); + //stop_meas(rm_stats); } } +stop_meas(rm_stats); stop_meas(te_main_stats); start_meas(te_wait_stats); @@ -645,6 +646,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, C = C+1; } } +//LOG_I(PHY,"segmentation number C = %d\n", C);////////////********added if(C >= 8 && get_nprocs()>=16 && codingw)//one main three worker { diff --git a/openair1/SCHED/fapi_l1.c b/openair1/SCHED/fapi_l1.c index 5062d92d67..56e733051f 100644 --- a/openair1/SCHED/fapi_l1.c +++ b/openair1/SCHED/fapi_l1.c @@ -167,7 +167,7 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr #endif harq_pid = dlsch0->harq_ids[subframe]; -LOG_I(PHY,"handle_nfapi_dlsch_pdu subframe = %d harq_ids = [%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]\n", subframe,dlsch0->harq_ids[0], +/*LOG_I(PHY,"handle_nfapi_dlsch_pdu subframe = %d harq_ids = [%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]\n", subframe,dlsch0->harq_ids[0], dlsch0->harq_ids[1], dlsch0->harq_ids[2], dlsch0->harq_ids[3], @@ -176,7 +176,7 @@ LOG_I(PHY,"handle_nfapi_dlsch_pdu subframe = %d harq_ids = [%d:%d:%d:%d:%d:%d:%d dlsch0->harq_ids[6], dlsch0->harq_ids[7], dlsch0->harq_ids[8], - dlsch0->harq_ids[9]);/////////////*********added + dlsch0->harq_ids[9]);*/////////////*********added AssertFatal((harq_pid>=0) && (harq_pid<8),"harq_pid %d not in 0...7 frame:%d subframe:%d subframe(TX):%d rnti:%x UE_id:%d dlsch0[harq_ids:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]\n", harq_pid, frame,subframe, @@ -681,7 +681,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) LOG_D(PHY,"NFAPI: Clearing dci allocations for potential UL subframe %d\n",ul_subframe); harq_pid = subframe2harq_pid(fp,ul_frame,ul_subframe); -LOG_I(PHY,"schedule_response %d.%d UL %d.%d harq_pid = %d\n", frame, subframe, ul_frame, ul_subframe, harq_pid);/////////////*********added +//LOG_I(PHY,"schedule_response %d.%d UL %d.%d harq_pid = %d\n", frame, subframe, ul_frame, ul_subframe, harq_pid);/////////////*********added // clear DCI allocation maps for new subframe @@ -695,7 +695,7 @@ LOG_I(PHY,"schedule_response %d.%d UL %d.%d harq_pid = %d\n", frame, subframe, u } for (i=0;idl_config_request_body.dl_config_pdu_list[i]; - LOG_I(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type);/////////////*********LOG_D with mark out + //LOG_I(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type);/////////////*********LOG_D with mark out switch (dl_config_pdu->pdu_type) { case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE: //LOG_I(PHY,"NFAPI: dl_pdu %d : type %d executing handle_nfapi_dci_dl_pdu()\n",i,dl_config_pdu->pdu_type);/////////////*********added @@ -748,7 +748,7 @@ LOG_I(PHY,"schedule_response %d.%d UL %d.%d harq_pid = %d\n", frame, subframe, u dlsch_pdu_rel8->transport_blocks); if (sdu != NULL) { -LOG_I(PHY,"NFAPI: executing handle_nfapi_dlsch_pdu()\n");/////////////*********added +//LOG_I(PHY,"NFAPI: executing handle_nfapi_dlsch_pdu()\n");/////////////*********added handle_nfapi_dlsch_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu, dlsch_pdu_rel8->transport_blocks-1, sdu); } else diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index eabffd6533..94a2bd464c 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -470,7 +470,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, if (ul_subframe < 10) { // This means that there is a potential UL subframe that will be scheduled here for (i=0; iulsch[i]) { ulsch_harq = eNB->ulsch[i]->harq_processes[harq_pid]; @@ -536,7 +536,7 @@ LOG_I(PHY,"phy_procedures_eNB_TX %d.%d UL %d.%d harq_pid == %d \n", frame, subfr VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,1); // Now scan UE specific DLSCH LTE_eNB_DLSCH_t *dlsch0,*dlsch1; -LOG_I(PHY,"phy_procedures_eNB_TX before dlsch0 %d.%d UL %d.%d harq_pid == %d \n", frame, subframe, ul_frame, ul_subframe, harq_pid);////////////********added +//LOG_I(PHY,"phy_procedures_eNB_TX before dlsch0 %d.%d UL %d.%d harq_pid == %d \n", frame, subframe, ul_frame, ul_subframe, harq_pid);////////////********added for (UE_id=0; UE_iddlsch[(uint8_t)UE_id][0]; @@ -1410,7 +1410,7 @@ void init_te_thread(PHY_VARS_eNB *eNB) { pthread_cond_init( &proc->tep[i].cond_te, NULL); pthread_attr_init( &proc->tep[i].attr_te); - printf("Creating te_thread 0\n"); + LOG_I(PHY,"Creating te_thread %d\n",i); pthread_create(&proc->tep[i].pthread_te, &proc->tep[i].attr_te, te_thread, (void*)&proc->tep[i]); } } diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index 05a094c0ae..a441a4f776 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -666,7 +666,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, } else{ schedule_ulsch_phy_test(module_idP,frameP,subframeP); -LOG_I(MAC,"frameP = %d .subframeP = %d\n", frameP, subframeP);/////////////*********added +//LOG_I(MAC,"frameP = %d .subframeP = %d\n", frameP, subframeP);/////////////*********added schedule_ue_spec_phy_test(module_idP,frameP,subframeP,mbsfn_status); } diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index 308811ae4c..7d0c67dd7e 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -69,11 +69,11 @@ schedule_ue_spec_phy_test( unsigned char harq_pid = (frameP*10+subframeP)%8; uint16_t rnti = 0x1235; - uint32_t rb_alloc = 0x1FFFFFFF; + uint32_t rb_alloc = 0x1FFFFF; int32_t tpc = 1; int32_t mcs = 28; int32_t cqi = 15; - int32_t ndi = 1;//(frameP*10+subframeP)/8; + int32_t ndi = (frameP*10+subframeP)/8; int32_t dai = 0; eNB_MAC_INST *eNB = RC.mac[module_idP]; @@ -94,7 +94,7 @@ schedule_ue_spec_phy_test( nb_rb = conv_nprb(0,rb_alloc,N_RB_DL); TBS = get_TBS_DL(mcs,nb_rb); - LOG_I(MAC,"schedule_ue_spec_phy_test: subframe %d/%d: nb_rb=%d, TBS=%d, mcs=%d harq_pid=%d (rb_alloc=%x, N_RB_DL=%d) pdu_number = %d \n", frameP, subframeP, nb_rb, TBS, mcs, harq_pid, rb_alloc, N_RB_DL, dl_req->number_pdu);////////////********change into LOG_I + /*LOG_I(MAC,"schedule_ue_spec_phy_test: subframe %d/%d: nb_rb=%d, TBS=%d, mcs=%d harq_pid=%d (rb_alloc=%x, N_RB_DL=%d) pdu_number = %d \n", frameP, subframeP, nb_rb, TBS, mcs, harq_pid, rb_alloc, N_RB_DL, dl_req->number_pdu);*////////////********LOG_D to LOG_I dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); @@ -124,8 +124,8 @@ schedule_ue_spec_phy_test( LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, dai %d, mcs %d\n", module_idP,CC_id,harq_pid,dai,mcs); } else { - LOG_I(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", - module_idP,CC_id,harq_pid,mcs); + /*LOG_I(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", + module_idP,CC_id,harq_pid,mcs);*////////////********added } LOG_D(MAC,"Checking feasibility pdu %d (new sdu)\n",dl_req->number_pdu); @@ -135,7 +135,7 @@ schedule_ue_spec_phy_test( //ue_sched_ctl->round[CC_id][harq_pid] = 0; dl_req->number_dci++; dl_req->number_pdu++; -LOG_I(MAC,"phy-test DL number of dci = %d pdu = %d \n", dl_req->number_dci, dl_req->number_pdu);////////////********added +//LOG_I(MAC,"phy-test DL number of dci = %d pdu = %d \n", dl_req->number_dci, dl_req->number_pdu);////////////********added eNB->DL_req[CC_id].sfn_sf = frameP<<4 | subframeP; //eNB->DL_req[CC_id].header.message_id = NFAPI_DL_CONFIG_REQUEST; @@ -151,7 +151,7 @@ LOG_I(MAC,"phy-test DL number of dci = %d pdu = %d \n", dl_req->number_dci, dl_r AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated is NULL\n"); AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->pdsch_ConfigDedicated!=NULL,"physicalConfigDedicated->pdsch_ConfigDedicated is NULL\n"); */ -LOG_I(MAC,"pdu_index = %d \n", eNB->pdu_index[CC_id]);////////////********added +//LOG_I(MAC,"pdu_index = %d \n", eNB->pdu_index[CC_id]);////////////********added fill_nfapi_dlsch_config(eNB, @@ -237,7 +237,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s UE_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id]; harq_pid = subframe2harqpid(&cc[CC_id],sched_frame,sched_subframe); - LOG_I(MAC,"Scheduling for frame %d, subframe %d => harq_pid %d\n",sched_frame,sched_subframe,harq_pid); + //LOG_I(MAC,"Scheduling for frame %d, subframe %d => harq_pid %d\n",sched_frame,sched_subframe,harq_pid);////////////********added RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP] = UE_template->TBS_UL[harq_pid]; diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index 784148f6cb..e71ef56bfc 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -217,7 +217,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam wakeup_prach_eNB_br(eNB,NULL,proc->frame_rx,proc->subframe_rx); #endif } -LOG_I(PHY,"eNB_uespec_RX proc RX %d.%d TX %d.%d \n", proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx);/////////////*********added +//LOG_I(PHY,"eNB_uespec_RX proc RX %d.%d TX %d.%d \n", proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx);/////////////*********added // UE-specific RX processing for subframe n if (nfapi_mode == 0 || nfapi_mode == 1) { phy_procedures_eNB_uespec_RX(eNB, proc, no_relay ); @@ -238,7 +238,7 @@ LOG_I(PHY,"eNB_uespec_RX proc RX %d.%d TX %d.%d \n", proc->frame_rx, proc->subfr eNB->UL_INFO.subframe = proc->subframe_rx; eNB->UL_INFO.module_id = eNB->Mod_id; eNB->UL_INFO.CC_id = eNB->CC_id; -LOG_I(PHY,"UL_INFO %d.%d \n", eNB->UL_INFO.frame, eNB->UL_INFO.subframe);/////////////*********added +//LOG_I(PHY,"UL_INFO %d.%d \n", eNB->UL_INFO.frame, eNB->UL_INFO.subframe);/////////////*********added eNB->if_inst->UL_indication(&eNB->UL_INFO); @@ -328,7 +328,7 @@ static void* tx_thread(void* param) { VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_ENB,proc->frame_tx); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_ENB,proc->frame_rx); -LOG_I(PHY,"tx thread proc RX %d.%d TX %d.%d \n", proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx);/////////////*********added +//LOG_I(PHY,"tx thread proc RX %d.%d TX %d.%d \n", proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx);/////////////*********added phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1); if (release_thread(&proc->mutex_rxtx,&proc->instance_cnt_rxtx,thread_name)<0) break; @@ -864,20 +864,23 @@ static void* process_stats_thread(void* param) { wait_sync("process_stats_thread"); while (!oai_exit) { - sleep(1); - if (opp_enabled == 1) { - if (eNB->td) print_meas(&eNB->ulsch_decoding_stats,"ulsch_decoding",NULL,NULL); - if (eNB->te) - { - print_meas(&eNB->dlsch_turbo_encoding_preperation_stats,"dlsch_coding_crc",NULL,NULL); - print_meas(&eNB->dlsch_turbo_encoding_segmentation_stats,"dlsch_segmentation",NULL,NULL); - print_meas(&eNB->dlsch_encoding_stats,"dlsch_encoding",NULL,NULL); - print_meas(&eNB->dlsch_turbo_encoding_signal_stats,"coding_signal",NULL,NULL); - print_meas(&eNB->dlsch_turbo_encoding_main_stats,"coding_main",NULL,NULL); - print_meas(&eNB->dlsch_turbo_encoding_waiting_stats,"coding_wait",NULL,NULL); - print_meas(&eNB->dlsch_turbo_encoding_wakeup_stats0,"coding_worker_0",NULL,NULL); - print_meas(&eNB->dlsch_turbo_encoding_wakeup_stats1,"coding_worker_1",NULL,NULL); - } + sleep(1); + if (opp_enabled == 1) { + if (eNB->td) print_meas(&eNB->ulsch_decoding_stats,"ulsch_decoding",NULL,NULL); + if (eNB->te) + { + print_meas(&eNB->dlsch_turbo_encoding_preperation_stats,"dlsch_coding_crc",NULL,NULL); + print_meas(&eNB->dlsch_turbo_encoding_segmentation_stats,"dlsch_segmentation",NULL,NULL); + print_meas(&eNB->dlsch_encoding_stats,"dlsch_encoding",NULL,NULL); + print_meas(&eNB->dlsch_turbo_encoding_signal_stats,"coding_signal",NULL,NULL); + print_meas(&eNB->dlsch_turbo_encoding_main_stats,"coding_main",NULL,NULL); + print_meas(&eNB->dlsch_turbo_encoding_stats,"turbo_encoding",NULL,NULL); + print_meas(&eNB->dlsch_interleaving_stats,"turbo_interleaving",NULL,NULL); + print_meas(&eNB->dlsch_rate_matching_stats,"turbo_rate_matching",NULL,NULL); + print_meas(&eNB->dlsch_turbo_encoding_waiting_stats,"coding_wait",NULL,NULL); + print_meas(&eNB->dlsch_turbo_encoding_wakeup_stats0,"coding_worker_0",NULL,NULL); + print_meas(&eNB->dlsch_turbo_encoding_wakeup_stats1,"coding_worker_1",NULL,NULL); + } print_meas(&eNB->dlsch_modulation_stats,"dlsch_modulation",NULL,NULL); } } From 4fdbfc31eec795be73177bf4fae99cf7c87d2212 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Wed, 16 May 2018 16:18:50 +0200 Subject: [PATCH 003/128] adding timing check for emulate-rf --- openair1/PHY/defs.h | 1 + targets/RT/USER/lte-enb.c | 1 + targets/RT/USER/lte-ru.c | 9 ++++++++- targets/RT/USER/lte-softmodem.c | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index bcbcca9ab3..c53303d7e1 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -463,6 +463,7 @@ typedef struct RU_proc_t_s { /// pipeline ready state int ru_rx_ready; int ru_tx_ready; + int emulate_rf_busy; } RU_proc_t; /// Context data structure for eNB subframe processing diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index e71ef56bfc..884366374c 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -644,6 +644,7 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) { } pthread_mutex_unlock( &proc_rxtx0->mutex_rxtx ); + ru_proc->emulate_rf_busy = 0; return(0); } diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index ffccb9774f..568a01b9b3 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -122,6 +122,7 @@ extern volatile int oai_exit; extern int emulate_rf; extern int numerology; extern int fepw; +extern int single_thread_flag; extern void phy_init_RU(RU_t*); @@ -703,6 +704,11 @@ static void* emulatedRF_thread(void* param) { wait_sync("emulatedRF_thread"); while(!oai_exit){ nanosleep(&req, (struct timespec *)NULL); + if(proc->emulate_rf_busy ) + { + LOG_E(PHY,"rf being delayed in emulated RF\n"); + } + proc->emulate_rf_busy = 1; pthread_mutex_lock(&proc->mutex_emulateRF); ++proc->instance_cnt_emulateRF; pthread_mutex_unlock(&proc->mutex_emulateRF); @@ -1652,7 +1658,7 @@ static void* ru_thread( void* param ) { // wakeup all eNB processes waiting for this RU if (ru->num_eNB>0) wakeup_eNBs(ru); - if(get_nprocs() <= 4){ + if(get_nprocs() <= 4 || single_thread_flag){ // do TX front-end processing if needed (precoding and/or IDFTs) if (ru->feptx_prec) ru->feptx_prec(ru); @@ -1664,6 +1670,7 @@ static void* ru_thread( void* param ) { if (ru->fh_north_out) ru->fh_north_out(ru); } + proc->emulate_rf_busy = 0; } } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 90d68349f1..e5ce85a2dd 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -218,7 +218,7 @@ extern void init_eNB_afterRU(void); int transmission_mode=1; int emulate_rf = 0; -int numerology = 0; +int numerology = 2; int codingw = 0; int fepw = 0; From 003c4b6cb0fb069bea5c17b04f4516a7d3dbcf28 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Thu, 17 May 2018 11:01:58 +0200 Subject: [PATCH 004/128] numerology fix --- targets/RT/USER/lte-enb.c | 1 - targets/RT/USER/lte-ru.c | 4 ++++ targets/RT/USER/lte-softmodem.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index 884366374c..e71ef56bfc 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -644,7 +644,6 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) { } pthread_mutex_unlock( &proc_rxtx0->mutex_rxtx ); - ru_proc->emulate_rf_busy = 0; return(0); } diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 568a01b9b3..b563013c72 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -700,6 +700,7 @@ static void* emulatedRF_thread(void* param) { sparam.sched_priority = sched_get_priority_max(SCHED_FIFO); policy = SCHED_FIFO ; pthread_setschedparam(pthread_self(), policy, &sparam); + LOG_I(PHY,"/////////////////////******************** numerology = %d /////////////////////////////////***************************** \n",numerology); wait_sync("emulatedRF_thread"); while(!oai_exit){ @@ -1211,6 +1212,9 @@ void wakeup_eNBs(RU_t *ru) { { LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx); } + if(!eNB_list[i]->single_thread_flag){ + ru->proc.emulate_rf_busy = 0; + } } } } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index e5ce85a2dd..90d68349f1 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -218,7 +218,7 @@ extern void init_eNB_afterRU(void); int transmission_mode=1; int emulate_rf = 0; -int numerology = 2; +int numerology = 0; int codingw = 0; int fepw = 0; From c6e84198398efe0047b889ec8bdc533ae1a1b180 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Thu, 17 May 2018 11:44:51 +0200 Subject: [PATCH 005/128] remove print --- targets/RT/USER/lte-ru.c | 1 - 1 file changed, 1 deletion(-) diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index b563013c72..bf0d80388c 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -700,7 +700,6 @@ static void* emulatedRF_thread(void* param) { sparam.sched_priority = sched_get_priority_max(SCHED_FIFO); policy = SCHED_FIFO ; pthread_setschedparam(pthread_self(), policy, &sparam); - LOG_I(PHY,"/////////////////////******************** numerology = %d /////////////////////////////////***************************** \n",numerology); wait_sync("emulatedRF_thread"); while(!oai_exit){ From a34dc257aa79400012ad827f2a06149dd073f152 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Fri, 18 May 2018 16:57:15 +0200 Subject: [PATCH 006/128] diable worning of MAC not having the rnit with phy-test mode --- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 6 ++---- openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 7c201d3c75..8821b53064 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -550,7 +550,6 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, // Fill in the "e"-sequence from 36-212, V8.6 2009-03, p. 16-17 (for each "e") and concatenate the // outputs for each code segment, see Section 5.1.5 p.20 -start_meas(rm_stats); for (r=0,r_offset=0; rharq_processes[harq_pid]->C; r++) { // get information for E for the segments that are handled by the worker thread @@ -566,7 +565,7 @@ start_meas(rm_stats); r_offset += Nl*Qm * ((GpmodC==0?0:1) + (Gp/C)); } else { - //start_meas(rm_stats); + start_meas(rm_stats); r_offset += lte_rate_matching_turbo(dlsch->harq_processes[harq_pid]->RTC[r], G, //G dlsch->harq_processes[harq_pid]->w[r], @@ -581,10 +580,9 @@ start_meas(rm_stats); r, nb_rb); // m); // r - //stop_meas(rm_stats); + stop_meas(rm_stats); } } -stop_meas(rm_stats); stop_meas(te_main_stats); start_meas(te_wait_stats); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 9ccb0e66ab..67ac6d4a95 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -281,9 +281,9 @@ rx_sdu(const module_id_t enb_mod_idP, return; } } else { - LOG_W(MAC, + LOG_D(MAC, "Cannot find UE or RA corresponding to ULSCH rnti %x, dropping it\n", - current_rnti); + current_rnti);////////////******** LOG_W into LOG_D return; } payload_ptr = parse_ulsch_header(sduP, &num_ce, &num_sdu, rx_ces, rx_lcids, rx_lengths, sdu_lenP); From b40215665aee0a3925470c9d5189a279f9eaac5b Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Thu, 31 May 2018 14:20:18 +0200 Subject: [PATCH 007/128] fixes for printing single thread fep timing measurment --- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 4 ++-- openair1/SCHED/ru_procedures.c | 1 - targets/RT/USER/lte-ru.c | 11 +++-------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 2f4cfd2344..b2c6d9986d 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -794,11 +794,11 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) int ulsch_decoding_data_all(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) { int ret = 0; - /*if(codingw) + if(codingw) { ret = ulsch_decoding_data_2thread(eNB,UE_id,harq_pid,llr8_flag); } - else*/ + else { ret = ulsch_decoding_data(eNB,UE_id,harq_pid,llr8_flag); } diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c index 519bb1b7f7..d7e184ea83 100644 --- a/openair1/SCHED/ru_procedures.c +++ b/openair1/SCHED/ru_procedures.c @@ -251,7 +251,6 @@ void feptx_ofdm(RU_t *ru) { // int CC_id = ru->proc.CC_id; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 ); - slot_offset_F = 0; slot_offset = subframe*fp->samples_per_tti; diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index bf0d80388c..b31854fcb2 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -1432,12 +1432,11 @@ int setup_RU_buffers(RU_t *ru) { static void* ru_stats_thread(void* param) { RU_t *ru = (RU_t*)param; - wait_sync("ru_stats_thread"); while (!oai_exit) { sleep(1); - if (opp_enabled == 1 && fepw) { + if (opp_enabled) { if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx",NULL,NULL); if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm",NULL,NULL); if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul",NULL,NULL); @@ -1908,8 +1907,8 @@ void init_RU_proc(RU_t *ru) { } if (get_nprocs()> 2 && fepw) { - if (ru->feprx) init_fep_thread(ru,NULL); - if (ru->feptx_ofdm) init_feptx_thread(ru,NULL); + init_fep_thread(ru,NULL); + init_feptx_thread(ru,NULL); } if (opp_enabled == 1) pthread_create(&ru->ru_stats_thread,NULL,ru_stats_thread,(void*)ru); @@ -1921,14 +1920,10 @@ void kill_RU_proc(int inst) RU_proc_t *proc = &ru->proc; if (get_nprocs() > 2 && fepw) { - if (ru->feprx) { LOG_D(PHY, "killing FEP thread\n"); kill_fep_thread(ru); - } - if (ru->feptx_ofdm){ LOG_D(PHY, "killing FEP TX thread\n"); kill_feptx_thread(ru); - } } pthread_mutex_lock(&proc->mutex_FH); From 7e00727ce744f78e094f0b7ee020bb136478a8ef Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Thu, 31 May 2018 14:27:54 +0200 Subject: [PATCH 008/128] using accelarated modulation --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 3bd174c3b3..04b9a71b1a 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -2598,7 +2598,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, rb); - allocate_REs_in_RB(phy_vars_eNB, + allocate_REs(phy_vars_eNB, txdataF, &jj, &jj2, From bc691f05c5947772e4da770de7a61e720f5be052 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Fri, 8 Jun 2018 19:29:12 +0200 Subject: [PATCH 009/128] bug fix for QPSK modulation --- openair1/PHY/INIT/init_top.c | 1 + openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 20 +++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/openair1/PHY/INIT/init_top.c b/openair1/PHY/INIT/init_top.c index 6213520b8c..26d061da46 100644 --- a/openair1/PHY/INIT/init_top.c +++ b/openair1/PHY/INIT/init_top.c @@ -47,6 +47,7 @@ void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms) generate_64qam_table(); generate_16qam_table(); + generate_qpsk_table(); generate_RIV_tables(); init_unscrambling_lut(); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 04b9a71b1a..0efbcdfb59 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -2175,8 +2175,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, uint8_t mod_order0 = 0; uint8_t mod_order1 = 0; int16_t amp_rho_a, amp_rho_b; - int16_t qam16_table_a0[4],qam64_table_a0[8],qam16_table_b0[4],qam64_table_b0[8];//qpsk_table_a0[2],qpsk_table_b0[2] - int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8];//qpsk_table_a1[2],qpsk_table_b1[2] + int16_t qam16_table_a0[4],qam64_table_a0[8],qam16_table_b0[4],qam64_table_b0[8],qpsk_table_a0[2],qpsk_table_b0[2]; + int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8],qpsk_table_a1[2],qpsk_table_b1[2]; int16_t *qam_table_s0=NULL,*qam_table_s1=NULL; #ifdef NEW_ALLOC_RE @@ -2289,7 +2289,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, amp_rho_b = (int16_t)(((int32_t)amp*dlsch1->sqrt_rho_b)>>13); } - /*if(mod_order0 == 2) + if(mod_order0 == 2) { for(i=0;i<2;i++) { @@ -2297,7 +2297,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, qpsk_table_b0[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_b)>>15); } } - else*/ if (mod_order0 == 4) + else if (mod_order0 == 4) for (i=0;i<4; i++) { qam16_table_a0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_a)>>15); qam16_table_b0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_b)>>15); @@ -2308,14 +2308,14 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, qam64_table_b0[i] = (int16_t)(((int32_t)qam64_table[i]*amp_rho_b)>>15); } - /*if (mod_order1 == 2) + if (mod_order1 == 2) { for (i=0; i<2; i++) { qpsk_table_a1[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_a)>>15); qpsk_table_b1[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_b)>>15); } } - else*/ if (mod_order1 == 4) + else if (mod_order1 == 4) for (i=0; i<4; i++) { qam16_table_a1[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_a)>>15); qam16_table_b1[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_b)>>15); @@ -2445,7 +2445,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, switch (mod_order0) { case 2: qam_table_s0 = NULL; - /*if (pilots) { + if (pilots) { qam_table_s0 = qpsk_table_b0; #ifdef NEW_ALLOC_RE // TODO: remove this code? // @@ -2463,7 +2463,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, allocate_REs_in_RB; #endif - }*/ + } break; case 4: if (pilots) { @@ -2517,12 +2517,12 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, /* TODO: remove this code? */ allocate_REs = allocate_REs_in_RB; #endif - /*if (pilots) { + if (pilots) { qam_table_s1 = qpsk_table_b1; } else { qam_table_s1 = qpsk_table_a1; - }*/ + } break; case 4: if (pilots) { From 0915a0e66be11985ddd2188d162baae876e11af1 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Tue, 12 Jun 2018 15:53:15 +0200 Subject: [PATCH 010/128] fixes for frequency adjustment at 20MHz and disableing decoding worker --- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 4 ++-- .../GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index b2c6d9986d..2f4cfd2344 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -794,11 +794,11 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) int ulsch_decoding_data_all(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) { int ret = 0; - if(codingw) + /*if(codingw) { ret = ulsch_decoding_data_2thread(eNB,UE_id,harq_pid,llr8_flag); } - else + else*/ { ret = ulsch_decoding_data(eNB,UE_id,harq_pid,llr8_flag); } diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf index 92b2059e70..e617fdf39b 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -33,7 +33,7 @@ eNBs = tdd_config_s = 0; prefix_type = "NORMAL"; eutra_band = 7; - downlink_frequency = 2685000000L; + downlink_frequency = 2680000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; N_RB_DL = 100; From 0b405e3d2b71b704cd55c079534b0ad9db8cf7c8 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Fri, 15 Jun 2018 12:14:34 +0200 Subject: [PATCH 011/128] throughput fix for sdu and config file change back to 93 --- openair1/SCHED/fapi_l1.c | 2 +- .../CONF/enb.band7.tm1.100PRB.usrpx310.conf | 2 +- targets/RT/USER/lte-ru.c | 7 +------ 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/openair1/SCHED/fapi_l1.c b/openair1/SCHED/fapi_l1.c index f721f7ae17..798a279c90 100644 --- a/openair1/SCHED/fapi_l1.c +++ b/openair1/SCHED/fapi_l1.c @@ -747,7 +747,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) (dlsch_pdu_rel8->transport_blocks>0), "dlsch_pdu_rel8->transport_blocks = %d not in [1,2]\n", dlsch_pdu_rel8->transport_blocks); - if (sdu != NULL) + if (1)//(sdu != NULL) { //LOG_I(PHY,"NFAPI: executing handle_nfapi_dlsch_pdu()\n");/////////////*********added handle_nfapi_dlsch_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu, dlsch_pdu_rel8->transport_blocks-1, sdu); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf index e617fdf39b..81ef6cf881 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -17,7 +17,7 @@ eNBs = mobile_country_code = "208"; - mobile_network_code = "92"; + mobile_network_code = "93"; tr_s_preference = "local_mac" diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index d3729f02d8..987b063360 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -1199,12 +1199,7 @@ void wakeup_eNBs(RU_t *ru) { { LOG_D(PHY,"ru->wakeup_rxtx:%p\n", ru->wakeup_rxtx); eNB_list[i]->proc.ru_proc = &ru->proc; - if(eNB_list[i]->single_thread_flag){ - char string[20]; - sprintf(string,"Incoming RU %d",ru->idx); - ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string,ru); - } - else if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0) + if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0) { LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx); } From ad867af7a03f1057b70c42afdc3ccc937c5e3026 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sun, 22 Jul 2018 10:39:33 +0200 Subject: [PATCH 012/128] 1024-8192 initializations tested and static initializations removed --- openair1/PHY/TOOLS/Makefile | 8 +- openair1/PHY/TOOLS/lte_dfts.c | 358 +++++++++++++++++++++++++++++- openair1/PHY/TOOLS/twiddles4096.h | 43 ---- openair1/PHY/TOOLS/twiddles8192.h | 33 --- 4 files changed, 350 insertions(+), 92 deletions(-) delete mode 100644 openair1/PHY/TOOLS/twiddles4096.h delete mode 100644 openair1/PHY/TOOLS/twiddles8192.h diff --git a/openair1/PHY/TOOLS/Makefile b/openair1/PHY/TOOLS/Makefile index 59b6a1e03b..017bc74276 100644 --- a/openair1/PHY/TOOLS/Makefile +++ b/openair1/PHY/TOOLS/Makefile @@ -1,14 +1,14 @@ lte_dfts_sse4: lte_dfts.c - gcc -O2 -msse4.1 -g -ggdb -o lte_dfts_sse4 lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS + gcc -O2 -std=gnu99 -msse4.1 -g -ggdb -o lte_dfts_sse4 lte_dfts.c time_meas.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR_HOME -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR -I$$OPENAIR2_DIR/COMMON -I$$OPENAIR_HOME/common/utils -DMR_MAIN -DNB_ANTENNAS_RX=1 -lm -lpthread # -DD256STATS #-DD64STATS lte_dfts_avx2: lte_dfts.c - gcc -O2 -mavx2 -g -ggdb -o lte_dfts_avx2 lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS + gcc -O2 -std=gnu99 -mavx2 -g -ggdb -o lte_dfts_avx2 lte_dfts.c time_meas.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR_HOME -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR -I$$OPENAIR2_DIR/COMMON -I$$OPENAIR_HOME/common/utils -DMR_MAIN -DNB_ANTENNAS_RX=1 -lm -lpthread # -DD256STATS #-DD64STATS lte_dfts_avx2.s: lte_dfts.c - gcc -O2 -mavx2 -S lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS + gcc -O2 -std=gnu99 -mavx2 -S lte_dfts.c time_meas.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR_HOME -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR -I$$OPENAIR2_DIR/COMMON -I$$OPENAIR_HOME/common/utils -DMR_MAIN -DNB_ANTENNAS_RX=1 -lm -lpthread # -DD256STATS #-DD64STATS lte_dfts_sse4.s: lte_dfts.c - gcc -O2 -msse4.1 -S lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS + gcc -O2 -std=gnu99 -msse4.1 -S lte_dfts.c time_meas.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR_HOME -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR -I$$OPENAIR2_DIR/COMMON -I$$OPENAIR_HOME/common/utils -DMR_MAIN -DNB_ANTENNAS_RX=1 -lm # -DD256STATS #-DD64STATS dft_cycles_avx2: lte_dfts_avx2 ./lte_dfts_avx2 | egrep cycles diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 4bf6afd1fd..e217892ee2 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -24,6 +24,13 @@ #include #include +#include +#include +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif #ifndef MR_MAIN #include "PHY/defs_common.h" @@ -31,8 +38,7 @@ #include "tools_defs.h" #else #include "time_meas.h" -#include - +#include "UTIL/LOG/log.h" #define debug_msg #define ONE_OVER_SQRT2_Q15 23170 @@ -43,6 +49,10 @@ #include "PHY/sse_intrin.h" + +#include "assertions.h" + + #define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7]) #define print_shorts256(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7],(x)[8],(x)[9],(x)[10],(x)[11],(x)[12],(x)[13],(x)[14],(x)[15]) @@ -54,6 +64,8 @@ const static int16_t conjugatedft[32] __attribute__((aligned(32))) = {-1,1,-1,1, const static int16_t reflip[32] __attribute__((aligned(32))) = {1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1}; +int oai_exit=0; + #if defined(__x86_64__) || defined(__i386__) static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32) __attribute__((always_inline)); static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32) @@ -4134,10 +4146,8 @@ void idft512(int16_t *x,int16_t *y,int scale) #endif -int16_t tw1024[1536] __attribute__((aligned(32))) = { 32767,0,32766,-202,32764,-403,32761,-604,32757,-805,32751,-1006,32744,-1207,32736,-1407,32727,-1608,32717,-1809,32705,-2010,32692,-2210,32678,-2411,32662,-2611,32646,-2812,32628,-3012,32609,-3212,32588,-3412,32567,-3612,32544,-3812,32520,-4012,32495,-4211,32468,-4410,32441,-4609,32412,-4808,32382,-5007,32350,-5206,32318,-5404,32284,-5602,32249,-5800,32213,-5998,32176,-6196,32137,-6393,32097,-6590,32056,-6787,32014,-6983,31970,-7180,31926,-7376,31880,-7572,31833,-7767,31785,-7962,31735,-8157,31684,-8352,31633,-8546,31580,-8740,31525,-8933,31470,-9127,31413,-9320,31356,-9512,31297,-9704,31236,-9896,31175,-10088,31113,-10279,31049,-10470,30984,-10660,30918,-10850,30851,-11039,30783,-11228,30713,-11417,30643,-11605,30571,-11793,30498,-11981,30424,-12167,30349,-12354,30272,-12540,30195,-12725,30116,-12910,30036,-13095,29955,-13279,29873,-13463,29790,-13646,29706,-13828,29621,-14010,29534,-14192,29446,-14373,29358,-14553,29268,-14733,29177,-14912,29085,-15091,28992,-15269,28897,-15447,28802,-15624,28706,-15800,28608,-15976,28510,-16151,28410,-16326,28309,-16500,28208,-16673,28105,-16846,28001,-17018,27896,-17190,27790,-17361,27683,-17531,27575,-17700,27466,-17869,27355,-18037,27244,-18205,27132,-18372,27019,-18538,26905,-18703,26789,-18868,26673,-19032,26556,-19195,26437,-19358,26318,-19520,26198,-19681,26077,-19841,25954,-20001,25831,-20160,25707,-20318,25582,-20475,25456,-20632,25329,-20788,25201,-20943,25072,-21097,24942,-21250,24811,-21403,24679,-21555,24546,-21706,24413,-21856,24278,-22005,24143,-22154,24006,-22302,23869,-22449,23731,-22595,23592,-22740,23452,-22884,23311,-23028,23169,-23170,23027,-23312,22883,-23453,22739,-23593,22594,-23732,22448,-23870,22301,-24007,22153,-24144,22004,-24279,21855,-24414,21705,-24547,21554,-24680,21402,-24812,21249,-24943,21096,-25073,20942,-25202,20787,-25330,20631,-25457,20474,-25583,20317,-25708,20159,-25832,20000,-25955,19840,-26078,19680,-26199,19519,-26319,19357,-26438,19194,-26557,19031,-26674,18867,-26790,18702,-26906,18537,-27020,18371,-27133,18204,-27245,18036,-27356,17868,-27467,17699,-27576,17530,-27684,17360,-27791,17189,-27897,17017,-28002,16845,-28106,16672,-28209,16499,-28310,16325,-28411,16150,-28511,15975,-28609,15799,-28707,15623,-28803,15446,-28898,15268,-28993,15090,-29086,14911,-29178,14732,-29269,14552,-29359,14372,-29447,14191,-29535,14009,-29622,13827,-29707,13645,-29791,13462,-29874,13278,-29956,13094,-30037,12909,-30117,12724,-30196,12539,-30273,12353,-30350,12166,-30425,11980,-30499,11792,-30572,11604,-30644,11416,-30714,11227,-30784,11038,-30852,10849,-30919,10659,-30985,10469,-31050,10278,-31114,10087,-31176,9895,-31237,9703,-31298,9511,-31357,9319,-31414,9126,-31471,8932,-31526,8739,-31581,8545,-31634,8351,-31685,8156,-31736,7961,-31786,7766,-31834,7571,-31881,7375,-31927,7179,-31971,6982,-32015,6786,-32057,6589,-32098,6392,-32138,6195,-32177,5997,-32214,5799,-32250,5601,-32285,5403,-32319,5205,-32351,5006,-32383,4807,-32413,4608,-32442,4409,-32469,4210,-32496,4011,-32521,3811,-32545,3611,-32568,3411,-32589,3211,-32610,3011,-32629,2811,-32647,2610,-32663,2410,-32679,2209,-32693,2009,-32706,1808,-32718,1607,-32728,1406,-32737,1206,-32745,1005,-32752,804,-32758,603,-32762,402,-32765,201,-32767, - 32767,0,32764,-403,32757,-805,32744,-1207,32727,-1608,32705,-2010,32678,-2411,32646,-2812,32609,-3212,32567,-3612,32520,-4012,32468,-4410,32412,-4808,32350,-5206,32284,-5602,32213,-5998,32137,-6393,32056,-6787,31970,-7180,31880,-7572,31785,-7962,31684,-8352,31580,-8740,31470,-9127,31356,-9512,31236,-9896,31113,-10279,30984,-10660,30851,-11039,30713,-11417,30571,-11793,30424,-12167,30272,-12540,30116,-12910,29955,-13279,29790,-13646,29621,-14010,29446,-14373,29268,-14733,29085,-15091,28897,-15447,28706,-15800,28510,-16151,28309,-16500,28105,-16846,27896,-17190,27683,-17531,27466,-17869,27244,-18205,27019,-18538,26789,-18868,26556,-19195,26318,-19520,26077,-19841,25831,-20160,25582,-20475,25329,-20788,25072,-21097,24811,-21403,24546,-21706,24278,-22005,24006,-22302,23731,-22595,23452,-22884,23169,-23170,22883,-23453,22594,-23732,22301,-24007,22004,-24279,21705,-24547,21402,-24812,21096,-25073,20787,-25330,20474,-25583,20159,-25832,19840,-26078,19519,-26319,19194,-26557,18867,-26790,18537,-27020,18204,-27245,17868,-27467,17530,-27684,17189,-27897,16845,-28106,16499,-28310,16150,-28511,15799,-28707,15446,-28898,15090,-29086,14732,-29269,14372,-29447,14009,-29622,13645,-29791,13278,-29956,12909,-30117,12539,-30273,12166,-30425,11792,-30572,11416,-30714,11038,-30852,10659,-30985,10278,-31114,9895,-31237,9511,-31357,9126,-31471,8739,-31581,8351,-31685,7961,-31786,7571,-31881,7179,-31971,6786,-32057,6392,-32138,5997,-32214,5601,-32285,5205,-32351,4807,-32413,4409,-32469,4011,-32521,3611,-32568,3211,-32610,2811,-32647,2410,-32679,2009,-32706,1607,-32728,1206,-32745,804,-32758,402,-32765,0,-32767,-403,-32765,-805,-32758,-1207,-32745,-1608,-32728,-2010,-32706,-2411,-32679,-2812,-32647,-3212,-32610,-3612,-32568,-4012,-32521,-4410,-32469,-4808,-32413,-5206,-32351,-5602,-32285,-5998,-32214,-6393,-32138,-6787,-32057,-7180,-31971,-7572,-31881,-7962,-31786,-8352,-31685,-8740,-31581,-9127,-31471,-9512,-31357,-9896,-31237,-10279,-31114,-10660,-30985,-11039,-30852,-11417,-30714,-11793,-30572,-12167,-30425,-12540,-30273,-12910,-30117,-13279,-29956,-13646,-29791,-14010,-29622,-14373,-29447,-14733,-29269,-15091,-29086,-15447,-28898,-15800,-28707,-16151,-28511,-16500,-28310,-16846,-28106,-17190,-27897,-17531,-27684,-17869,-27467,-18205,-27245,-18538,-27020,-18868,-26790,-19195,-26557,-19520,-26319,-19841,-26078,-20160,-25832,-20475,-25583,-20788,-25330,-21097,-25073,-21403,-24812,-21706,-24547,-22005,-24279,-22302,-24007,-22595,-23732,-22884,-23453,-23170,-23170,-23453,-22884,-23732,-22595,-24007,-22302,-24279,-22005,-24547,-21706,-24812,-21403,-25073,-21097,-25330,-20788,-25583,-20475,-25832,-20160,-26078,-19841,-26319,-19520,-26557,-19195,-26790,-18868,-27020,-18538,-27245,-18205,-27467,-17869,-27684,-17531,-27897,-17190,-28106,-16846,-28310,-16500,-28511,-16151,-28707,-15800,-28898,-15447,-29086,-15091,-29269,-14733,-29447,-14373,-29622,-14010,-29791,-13646,-29956,-13279,-30117,-12910,-30273,-12540,-30425,-12167,-30572,-11793,-30714,-11417,-30852,-11039,-30985,-10660,-31114,-10279,-31237,-9896,-31357,-9512,-31471,-9127,-31581,-8740,-31685,-8352,-31786,-7962,-31881,-7572,-31971,-7180,-32057,-6787,-32138,-6393,-32214,-5998,-32285,-5602,-32351,-5206,-32413,-4808,-32469,-4410,-32521,-4012,-32568,-3612,-32610,-3212,-32647,-2812,-32679,-2411,-32706,-2010,-32728,-1608,-32745,-1207,-32758,-805,-32765,-403, - 32767,0,32761,-604,32744,-1207,32717,-1809,32678,-2411,32628,-3012,32567,-3612,32495,-4211,32412,-4808,32318,-5404,32213,-5998,32097,-6590,31970,-7180,31833,-7767,31684,-8352,31525,-8933,31356,-9512,31175,-10088,30984,-10660,30783,-11228,30571,-11793,30349,-12354,30116,-12910,29873,-13463,29621,-14010,29358,-14553,29085,-15091,28802,-15624,28510,-16151,28208,-16673,27896,-17190,27575,-17700,27244,-18205,26905,-18703,26556,-19195,26198,-19681,25831,-20160,25456,-20632,25072,-21097,24679,-21555,24278,-22005,23869,-22449,23452,-22884,23027,-23312,22594,-23732,22153,-24144,21705,-24547,21249,-24943,20787,-25330,20317,-25708,19840,-26078,19357,-26438,18867,-26790,18371,-27133,17868,-27467,17360,-27791,16845,-28106,16325,-28411,15799,-28707,15268,-28993,14732,-29269,14191,-29535,13645,-29791,13094,-30037,12539,-30273,11980,-30499,11416,-30714,10849,-30919,10278,-31114,9703,-31298,9126,-31471,8545,-31634,7961,-31786,7375,-31927,6786,-32057,6195,-32177,5601,-32285,5006,-32383,4409,-32469,3811,-32545,3211,-32610,2610,-32663,2009,-32706,1406,-32737,804,-32758,201,-32767,-403,-32765,-1006,-32752,-1608,-32728,-2210,-32693,-2812,-32647,-3412,-32589,-4012,-32521,-4609,-32442,-5206,-32351,-5800,-32250,-6393,-32138,-6983,-32015,-7572,-31881,-8157,-31736,-8740,-31581,-9320,-31414,-9896,-31237,-10470,-31050,-11039,-30852,-11605,-30644,-12167,-30425,-12725,-30196,-13279,-29956,-13828,-29707,-14373,-29447,-14912,-29178,-15447,-28898,-15976,-28609,-16500,-28310,-17018,-28002,-17531,-27684,-18037,-27356,-18538,-27020,-19032,-26674,-19520,-26319,-20001,-25955,-20475,-25583,-20943,-25202,-21403,-24812,-21856,-24414,-22302,-24007,-22740,-23593,-23170,-23170,-23593,-22740,-24007,-22302,-24414,-21856,-24812,-21403,-25202,-20943,-25583,-20475,-25955,-20001,-26319,-19520,-26674,-19032,-27020,-18538,-27356,-18037,-27684,-17531,-28002,-17018,-28310,-16500,-28609,-15976,-28898,-15447,-29178,-14912,-29447,-14373,-29707,-13828,-29956,-13279,-30196,-12725,-30425,-12167,-30644,-11605,-30852,-11039,-31050,-10470,-31237,-9896,-31414,-9320,-31581,-8740,-31736,-8157,-31881,-7572,-32015,-6983,-32138,-6393,-32250,-5800,-32351,-5206,-32442,-4609,-32521,-4012,-32589,-3412,-32647,-2812,-32693,-2210,-32728,-1608,-32752,-1006,-32765,-403,-32767,201,-32758,804,-32737,1406,-32706,2009,-32663,2610,-32610,3211,-32545,3811,-32469,4409,-32383,5006,-32285,5601,-32177,6195,-32057,6786,-31927,7375,-31786,7961,-31634,8545,-31471,9126,-31298,9703,-31114,10278,-30919,10849,-30714,11416,-30499,11980,-30273,12539,-30037,13094,-29791,13645,-29535,14191,-29269,14732,-28993,15268,-28707,15799,-28411,16325,-28106,16845,-27791,17360,-27467,17868,-27133,18371,-26790,18867,-26438,19357,-26078,19840,-25708,20317,-25330,20787,-24943,21249,-24547,21705,-24144,22153,-23732,22594,-23312,23027,-22884,23452,-22449,23869,-22005,24278,-21555,24679,-21097,25072,-20632,25456,-20160,25831,-19681,26198,-19195,26556,-18703,26905,-18205,27244,-17700,27575,-17190,27896,-16673,28208,-16151,28510,-15624,28802,-15091,29085,-14553,29358,-14010,29621,-13463,29873,-12910,30116,-12354,30349,-11793,30571,-11228,30783,-10660,30984,-10088,31175,-9512,31356,-8933,31525,-8352,31684,-7767,31833,-7180,31970,-6590,32097,-5998,32213,-5404,32318,-4808,32412,-4211,32495,-3612,32567,-3012,32628,-2411,32678,-1809,32717,-1207,32744,-604,32761 - }; +int16_t tw1024[1536] __attribute__((aligned(32))); + #ifndef __AVX2__ void dft1024(int16_t *x,int16_t *y,int scale) { @@ -4365,7 +4375,7 @@ void idft1024(int16_t *x,int16_t *y,int scale) } #endif -int16_t tw2048[2048] __attribute__((aligned(32))) = {32767,0,32766,-101,32766,-202,32765,-302,32764,-403,32763,-503,32761,-604,32759,-704,32757,-805,32754,-905,32751,-1006,32748,-1106,32744,-1207,32740,-1307,32736,-1407,32732,-1508,32727,-1608,32722,-1709,32717,-1809,32711,-1909,32705,-2010,32699,-2110,32692,-2210,32685,-2311,32678,-2411,32670,-2511,32662,-2611,32654,-2712,32646,-2812,32637,-2912,32628,-3012,32618,-3112,32609,-3212,32599,-3312,32588,-3412,32578,-3512,32567,-3612,32556,-3712,32544,-3812,32532,-3912,32520,-4012,32508,-4111,32495,-4211,32482,-4311,32468,-4410,32455,-4510,32441,-4609,32426,-4709,32412,-4808,32397,-4908,32382,-5007,32366,-5107,32350,-5206,32334,-5305,32318,-5404,32301,-5503,32284,-5602,32267,-5701,32249,-5800,32231,-5899,32213,-5998,32194,-6097,32176,-6196,32156,-6294,32137,-6393,32117,-6492,32097,-6590,32077,-6689,32056,-6787,32035,-6885,32014,-6983,31992,-7082,31970,-7180,31948,-7278,31926,-7376,31903,-7474,31880,-7572,31856,-7669,31833,-7767,31809,-7865,31785,-7962,31760,-8060,31735,-8157,31710,-8254,31684,-8352,31659,-8449,31633,-8546,31606,-8643,31580,-8740,31553,-8837,31525,-8933,31498,-9030,31470,-9127,31442,-9223,31413,-9320,31385,-9416,31356,-9512,31326,-9608,31297,-9704,31267,-9800,31236,-9896,31206,-9992,31175,-10088,31144,-10183,31113,-10279,31081,-10374,31049,-10470,31017,-10565,30984,-10660,30951,-10755,30918,-10850,30885,-10945,30851,-11039,30817,-11134,30783,-11228,30748,-11323,30713,-11417,30678,-11511,30643,-11605,30607,-11699,30571,-11793,30535,-11887,30498,-11981,30461,-12074,30424,-12167,30386,-12261,30349,-12354,30311,-12447,30272,-12540,30234,-12633,30195,-12725,30156,-12818,30116,-12910,30076,-13003,30036,-13095,29996,-13187,29955,-13279,29915,-13371,29873,-13463,29832,-13554,29790,-13646,29748,-13737,29706,-13828,29663,-13919,29621,-14010,29577,-14101,29534,-14192,29490,-14282,29446,-14373,29402,-14463,29358,-14553,29313,-14643,29268,-14733,29222,-14823,29177,-14912,29131,-15002,29085,-15091,29038,-15180,28992,-15269,28945,-15358,28897,-15447,28850,-15535,28802,-15624,28754,-15712,28706,-15800,28657,-15888,28608,-15976,28559,-16064,28510,-16151,28460,-16239,28410,-16326,28360,-16413,28309,-16500,28259,-16587,28208,-16673,28156,-16760,28105,-16846,28053,-16932,28001,-17018,27948,-17104,27896,-17190,27843,-17275,27790,-17361,27736,-17446,27683,-17531,27629,-17616,27575,-17700,27520,-17785,27466,-17869,27411,-17953,27355,-18037,27300,-18121,27244,-18205,27188,-18288,27132,-18372,27076,-18455,27019,-18538,26962,-18621,26905,-18703,26847,-18786,26789,-18868,26731,-18950,26673,-19032,26615,-19114,26556,-19195,26497,-19277,26437,-19358,26378,-19439,26318,-19520,26258,-19600,26198,-19681,26137,-19761,26077,-19841,26016,-19921,25954,-20001,25893,-20080,25831,-20160,25769,-20239,25707,-20318,25645,-20397,25582,-20475,25519,-20554,25456,-20632,25392,-20710,25329,-20788,25265,-20865,25201,-20943,25136,-21020,25072,-21097,25007,-21174,24942,-21250,24877,-21327,24811,-21403,24745,-21479,24679,-21555,24613,-21630,24546,-21706,24480,-21781,24413,-21856,24346,-21931,24278,-22005,24211,-22080,24143,-22154,24075,-22228,24006,-22302,23938,-22375,23869,-22449,23800,-22522,23731,-22595,23661,-22667,23592,-22740,23522,-22812,23452,-22884,23382,-22956,23311,-23028,23240,-23099,23169,-23170,23098,-23241,23027,-23312,22955,-23383,22883,-23453,22811,-23523,22739,-23593,22666,-23662,22594,-23732,22521,-23801,22448,-23870,22374,-23939,22301,-24007,22227,-24076,22153,-24144,22079,-24212,22004,-24279,21930,-24347,21855,-24414,21780,-24481,21705,-24547,21629,-24614,21554,-24680,21478,-24746,21402,-24812,21326,-24878,21249,-24943,21173,-25008,21096,-25073,21019,-25137,20942,-25202,20864,-25266,20787,-25330,20709,-25393,20631,-25457,20553,-25520,20474,-25583,20396,-25646,20317,-25708,20238,-25770,20159,-25832,20079,-25894,20000,-25955,19920,-26017,19840,-26078,19760,-26138,19680,-26199,19599,-26259,19519,-26319,19438,-26379,19357,-26438,19276,-26498,19194,-26557,19113,-26616,19031,-26674,18949,-26732,18867,-26790,18785,-26848,18702,-26906,18620,-26963,18537,-27020,18454,-27077,18371,-27133,18287,-27189,18204,-27245,18120,-27301,18036,-27356,17952,-27412,17868,-27467,17784,-27521,17699,-27576,17615,-27630,17530,-27684,17445,-27737,17360,-27791,17274,-27844,17189,-27897,17103,-27949,17017,-28002,16931,-28054,16845,-28106,16759,-28157,16672,-28209,16586,-28260,16499,-28310,16412,-28361,16325,-28411,16238,-28461,16150,-28511,16063,-28560,15975,-28609,15887,-28658,15799,-28707,15711,-28755,15623,-28803,15534,-28851,15446,-28898,15357,-28946,15268,-28993,15179,-29039,15090,-29086,15001,-29132,14911,-29178,14822,-29223,14732,-29269,14642,-29314,14552,-29359,14462,-29403,14372,-29447,14281,-29491,14191,-29535,14100,-29578,14009,-29622,13918,-29664,13827,-29707,13736,-29749,13645,-29791,13553,-29833,13462,-29874,13370,-29916,13278,-29956,13186,-29997,13094,-30037,13002,-30077,12909,-30117,12817,-30157,12724,-30196,12632,-30235,12539,-30273,12446,-30312,12353,-30350,12260,-30387,12166,-30425,12073,-30462,11980,-30499,11886,-30536,11792,-30572,11698,-30608,11604,-30644,11510,-30679,11416,-30714,11322,-30749,11227,-30784,11133,-30818,11038,-30852,10944,-30886,10849,-30919,10754,-30952,10659,-30985,10564,-31018,10469,-31050,10373,-31082,10278,-31114,10182,-31145,10087,-31176,9991,-31207,9895,-31237,9799,-31268,9703,-31298,9607,-31327,9511,-31357,9415,-31386,9319,-31414,9222,-31443,9126,-31471,9029,-31499,8932,-31526,8836,-31554,8739,-31581,8642,-31607,8545,-31634,8448,-31660,8351,-31685,8253,-31711,8156,-31736,8059,-31761,7961,-31786,7864,-31810,7766,-31834,7668,-31857,7571,-31881,7473,-31904,7375,-31927,7277,-31949,7179,-31971,7081,-31993,6982,-32015,6884,-32036,6786,-32057,6688,-32078,6589,-32098,6491,-32118,6392,-32138,6293,-32157,6195,-32177,6096,-32195,5997,-32214,5898,-32232,5799,-32250,5700,-32268,5601,-32285,5502,-32302,5403,-32319,5304,-32335,5205,-32351,5106,-32367,5006,-32383,4907,-32398,4807,-32413,4708,-32427,4608,-32442,4509,-32456,4409,-32469,4310,-32483,4210,-32496,4110,-32509,4011,-32521,3911,-32533,3811,-32545,3711,-32557,3611,-32568,3511,-32579,3411,-32589,3311,-32600,3211,-32610,3111,-32619,3011,-32629,2911,-32638,2811,-32647,2711,-32655,2610,-32663,2510,-32671,2410,-32679,2310,-32686,2209,-32693,2109,-32700,2009,-32706,1908,-32712,1808,-32718,1708,-32723,1607,-32728,1507,-32733,1406,-32737,1306,-32741,1206,-32745,1105,-32749,1005,-32752,904,-32755,804,-32758,703,-32760,603,-32762,502,-32764,402,-32765,301,-32766,201,-32767,100,-32767,0,-32767,-101,-32767,-202,-32767,-302,-32766,-403,-32765,-503,-32764,-604,-32762,-704,-32760,-805,-32758,-905,-32755,-1006,-32752,-1106,-32749,-1207,-32745,-1307,-32741,-1407,-32737,-1508,-32733,-1608,-32728,-1709,-32723,-1809,-32718,-1909,-32712,-2010,-32706,-2110,-32700,-2210,-32693,-2311,-32686,-2411,-32679,-2511,-32671,-2611,-32663,-2712,-32655,-2812,-32647,-2912,-32638,-3012,-32629,-3112,-32619,-3212,-32610,-3312,-32600,-3412,-32589,-3512,-32579,-3612,-32568,-3712,-32557,-3812,-32545,-3912,-32533,-4012,-32521,-4111,-32509,-4211,-32496,-4311,-32483,-4410,-32469,-4510,-32456,-4609,-32442,-4709,-32427,-4808,-32413,-4908,-32398,-5007,-32383,-5107,-32367,-5206,-32351,-5305,-32335,-5404,-32319,-5503,-32302,-5602,-32285,-5701,-32268,-5800,-32250,-5899,-32232,-5998,-32214,-6097,-32195,-6196,-32177,-6294,-32157,-6393,-32138,-6492,-32118,-6590,-32098,-6689,-32078,-6787,-32057,-6885,-32036,-6983,-32015,-7082,-31993,-7180,-31971,-7278,-31949,-7376,-31927,-7474,-31904,-7572,-31881,-7669,-31857,-7767,-31834,-7865,-31810,-7962,-31786,-8060,-31761,-8157,-31736,-8254,-31711,-8352,-31685,-8449,-31660,-8546,-31634,-8643,-31607,-8740,-31581,-8837,-31554,-8933,-31526,-9030,-31499,-9127,-31471,-9223,-31443,-9320,-31414,-9416,-31386,-9512,-31357,-9608,-31327,-9704,-31298,-9800,-31268,-9896,-31237,-9992,-31207,-10088,-31176,-10183,-31145,-10279,-31114,-10374,-31082,-10470,-31050,-10565,-31018,-10660,-30985,-10755,-30952,-10850,-30919,-10945,-30886,-11039,-30852,-11134,-30818,-11228,-30784,-11323,-30749,-11417,-30714,-11511,-30679,-11605,-30644,-11699,-30608,-11793,-30572,-11887,-30536,-11981,-30499,-12074,-30462,-12167,-30425,-12261,-30387,-12354,-30350,-12447,-30312,-12540,-30273,-12633,-30235,-12725,-30196,-12818,-30157,-12910,-30117,-13003,-30077,-13095,-30037,-13187,-29997,-13279,-29956,-13371,-29916,-13463,-29874,-13554,-29833,-13646,-29791,-13737,-29749,-13828,-29707,-13919,-29664,-14010,-29622,-14101,-29578,-14192,-29535,-14282,-29491,-14373,-29447,-14463,-29403,-14553,-29359,-14643,-29314,-14733,-29269,-14823,-29223,-14912,-29178,-15002,-29132,-15091,-29086,-15180,-29039,-15269,-28993,-15358,-28946,-15447,-28898,-15535,-28851,-15624,-28803,-15712,-28755,-15800,-28707,-15888,-28658,-15976,-28609,-16064,-28560,-16151,-28511,-16239,-28461,-16326,-28411,-16413,-28361,-16500,-28310,-16587,-28260,-16673,-28209,-16760,-28157,-16846,-28106,-16932,-28054,-17018,-28002,-17104,-27949,-17190,-27897,-17275,-27844,-17361,-27791,-17446,-27737,-17531,-27684,-17616,-27630,-17700,-27576,-17785,-27521,-17869,-27467,-17953,-27412,-18037,-27356,-18121,-27301,-18205,-27245,-18288,-27189,-18372,-27133,-18455,-27077,-18538,-27020,-18621,-26963,-18703,-26906,-18786,-26848,-18868,-26790,-18950,-26732,-19032,-26674,-19114,-26616,-19195,-26557,-19277,-26498,-19358,-26438,-19439,-26379,-19520,-26319,-19600,-26259,-19681,-26199,-19761,-26138,-19841,-26078,-19921,-26017,-20001,-25955,-20080,-25894,-20160,-25832,-20239,-25770,-20318,-25708,-20397,-25646,-20475,-25583,-20554,-25520,-20632,-25457,-20710,-25393,-20788,-25330,-20865,-25266,-20943,-25202,-21020,-25137,-21097,-25073,-21174,-25008,-21250,-24943,-21327,-24878,-21403,-24812,-21479,-24746,-21555,-24680,-21630,-24614,-21706,-24547,-21781,-24481,-21856,-24414,-21931,-24347,-22005,-24279,-22080,-24212,-22154,-24144,-22228,-24076,-22302,-24007,-22375,-23939,-22449,-23870,-22522,-23801,-22595,-23732,-22667,-23662,-22740,-23593,-22812,-23523,-22884,-23453,-22956,-23383,-23028,-23312,-23099,-23241,-23170,-23170,-23241,-23099,-23312,-23028,-23383,-22956,-23453,-22884,-23523,-22812,-23593,-22740,-23662,-22667,-23732,-22595,-23801,-22522,-23870,-22449,-23939,-22375,-24007,-22302,-24076,-22228,-24144,-22154,-24212,-22080,-24279,-22005,-24347,-21931,-24414,-21856,-24481,-21781,-24547,-21706,-24614,-21630,-24680,-21555,-24746,-21479,-24812,-21403,-24878,-21327,-24943,-21250,-25008,-21174,-25073,-21097,-25137,-21020,-25202,-20943,-25266,-20865,-25330,-20788,-25393,-20710,-25457,-20632,-25520,-20554,-25583,-20475,-25646,-20397,-25708,-20318,-25770,-20239,-25832,-20160,-25894,-20080,-25955,-20001,-26017,-19921,-26078,-19841,-26138,-19761,-26199,-19681,-26259,-19600,-26319,-19520,-26379,-19439,-26438,-19358,-26498,-19277,-26557,-19195,-26616,-19114,-26674,-19032,-26732,-18950,-26790,-18868,-26848,-18786,-26906,-18703,-26963,-18621,-27020,-18538,-27077,-18455,-27133,-18372,-27189,-18288,-27245,-18205,-27301,-18121,-27356,-18037,-27412,-17953,-27467,-17869,-27521,-17785,-27576,-17700,-27630,-17616,-27684,-17531,-27737,-17446,-27791,-17361,-27844,-17275,-27897,-17190,-27949,-17104,-28002,-17018,-28054,-16932,-28106,-16846,-28157,-16760,-28209,-16673,-28260,-16587,-28310,-16500,-28361,-16413,-28411,-16326,-28461,-16239,-28511,-16151,-28560,-16064,-28609,-15976,-28658,-15888,-28707,-15800,-28755,-15712,-28803,-15624,-28851,-15535,-28898,-15447,-28946,-15358,-28993,-15269,-29039,-15180,-29086,-15091,-29132,-15002,-29178,-14912,-29223,-14823,-29269,-14733,-29314,-14643,-29359,-14553,-29403,-14463,-29447,-14373,-29491,-14282,-29535,-14192,-29578,-14101,-29622,-14010,-29664,-13919,-29707,-13828,-29749,-13737,-29791,-13646,-29833,-13554,-29874,-13463,-29916,-13371,-29956,-13279,-29997,-13187,-30037,-13095,-30077,-13003,-30117,-12910,-30157,-12818,-30196,-12725,-30235,-12633,-30273,-12540,-30312,-12447,-30350,-12354,-30387,-12261,-30425,-12167,-30462,-12074,-30499,-11981,-30536,-11887,-30572,-11793,-30608,-11699,-30644,-11605,-30679,-11511,-30714,-11417,-30749,-11323,-30784,-11228,-30818,-11134,-30852,-11039,-30886,-10945,-30919,-10850,-30952,-10755,-30985,-10660,-31018,-10565,-31050,-10470,-31082,-10374,-31114,-10279,-31145,-10183,-31176,-10088,-31207,-9992,-31237,-9896,-31268,-9800,-31298,-9704,-31327,-9608,-31357,-9512,-31386,-9416,-31414,-9320,-31443,-9223,-31471,-9127,-31499,-9030,-31526,-8933,-31554,-8837,-31581,-8740,-31607,-8643,-31634,-8546,-31660,-8449,-31685,-8352,-31711,-8254,-31736,-8157,-31761,-8060,-31786,-7962,-31810,-7865,-31834,-7767,-31857,-7669,-31881,-7572,-31904,-7474,-31927,-7376,-31949,-7278,-31971,-7180,-31993,-7082,-32015,-6983,-32036,-6885,-32057,-6787,-32078,-6689,-32098,-6590,-32118,-6492,-32138,-6393,-32157,-6294,-32177,-6196,-32195,-6097,-32214,-5998,-32232,-5899,-32250,-5800,-32268,-5701,-32285,-5602,-32302,-5503,-32319,-5404,-32335,-5305,-32351,-5206,-32367,-5107,-32383,-5007,-32398,-4908,-32413,-4808,-32427,-4709,-32442,-4609,-32456,-4510,-32469,-4410,-32483,-4311,-32496,-4211,-32509,-4111,-32521,-4012,-32533,-3912,-32545,-3812,-32557,-3712,-32568,-3612,-32579,-3512,-32589,-3412,-32600,-3312,-32610,-3212,-32619,-3112,-32629,-3012,-32638,-2912,-32647,-2812,-32655,-2712,-32663,-2611,-32671,-2511,-32679,-2411,-32686,-2311,-32693,-2210,-32700,-2110,-32706,-2010,-32712,-1909,-32718,-1809,-32723,-1709,-32728,-1608,-32733,-1508,-32737,-1407,-32741,-1307,-32745,-1207,-32749,-1106,-32752,-1006,-32755,-905,-32758,-805,-32760,-704,-32762,-604,-32764,-503,-32765,-403,-32766,-302,-32767,-202,-32767,-101}; +int16_t tw2048[2048] __attribute__((aligned(32))); #ifndef __AVX2__ void dft2048(int16_t *x,int16_t *y,int scale) @@ -4732,7 +4742,9 @@ void idft2048(int16_t *x,int16_t *y,int scale) #endif -#include "twiddles4096.h" + + +int16_t tw4096[3*2*1024]; #ifndef __AVX2__ void dft4096(int16_t *x,int16_t *y,int scale) @@ -4965,7 +4977,7 @@ void idft4096(int16_t *x,int16_t *y,int scale) #endif //__AVX2__ -#include "twiddles8192.h" +int16_t tw8192[2*4096] __attribute__((aligned(32))); #ifndef __AVX2__ void dft8192(int16_t *x,int16_t *y,int scale) @@ -5154,6 +5166,7 @@ void dft8192(int16_t *x,int16_t *y,int scale) simd256_q15_t xtmp[1024],*xtmpp,*x256 = (simd256_q15_t *)x; simd256_q15_t ytmp[1024],*tw8192_256p=(simd256_q15_t *)tw8192,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y; + simd256_q15_t *ytmpp = &ytmp[0]; int i; simd256_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16_simd256(ONE_OVER_SQRT2_Q15); @@ -5332,7 +5345,8 @@ void idft8192(int16_t *x,int16_t *y,int scale) #endif -#include "twiddle1536.h" +int16_t twa1536[1024],twb1536[1024]; + // 512 x 3 void idft1536(int16_t *input, int16_t *output, int scale) { @@ -12943,6 +12957,15 @@ void dft720(int16_t *x,int16_t *y,unsigned char scale_flag) // 180 x 4 }; +static int16_t twa768[191*2*4]; +static int16_t twb768[191*2*4]; +static int16_t twc768[191*2*4]; + +void dft768(int16_t *x,int16_t *y,unsigned char scale_flag) { // 192x 4; + + +} + /* Twiddles generated with twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:287)/864)); twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:287)/864)); @@ -18504,11 +18527,319 @@ void dft1200(int16_t *x,int16_t *y,unsigned char scale_flag) } +void init_rad4(int N,int16_t *tw) { + + int16_t *twa = tw; + int16_t *twb = twa+(N/2); + int16_t *twc = twb+(N/2); + int i; + + for (i=0;i<(N/4);i++) { + *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); twa++; + *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); twa++; + *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); twb++; + *twb = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); twb++; + *twc = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); twc++; + *twc = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); twc++; + } +} +void init_rad4_rep(int N,int16_t *twa,int16_t *twb,int16_t *twc) { + + int i,j; + + for (i=1;i<(N/4)-1;i++) { + *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); + *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); + *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); + *twb = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); + *twc = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); + *twc = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); + for (j=1;j<4;j++) { + ((int32_t*)twa)[j]=((int32_t*)twa)[0]; + ((int32_t*)twb)[j]=((int32_t*)twb)[0]; + ((int32_t*)twc)[j]=((int32_t*)twc)[0]; + } + twa+=8; + twb+=8; + twc+=8; + } +} + +void init_rad2(int N,int16_t *tw) { + + int16_t *twa = tw; + int i; + + for (i=0;i<(N>>1);i++) { + *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); twa++; + *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); twa++; + } +} + +void init_rad2_rep(int N,int16_t *twa) { + + int i,j; + + for (i=1;i<(N/2)-1;i++) { + *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); + *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); + for (j=1;j<4;j++) { + ((int32_t*)twa)[j]=((int32_t*)twa)[0]; + } + twa+=8; + } +} + +void init_rad3(int N,int16_t *twa,int16_t *twb) { + + int i; + + for (i=0;i<(N/3)-1;i++) { + *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); twa++; + *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); twa++; + *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); twb++; + *twb = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); twb++; + } +} + +void init_rad3_rep(int N,int16_t *twa,int16_t *twb) { + + int i,j; + + for (i=1;i<(N/3)-1;i++) { + *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); + *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); + *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); + *twb = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); + for (j=1;j<4;j++) { + ((int32_t*)twa)[j]=((int32_t*)twa)[0]; + ((int32_t*)twb)[j]=((int32_t*)twb)[0]; + } + twa+=8; + twb+=8; + } +} + +void init_rad5_rep(int N,int16_t *twa,int16_t *twb,int16_t *twc,int16_t *twd) { + + int i,j; + + for (i=1;i<(N/5)-1;i++) { + *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); + *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); + *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); + *twb = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); + *twb = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); + *twb = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); + *twc = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); + *twc = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); + *twd = (int16_t)round(32767.0*cos(2*M_PI*4*i/N)); + *twd = -(int16_t)round(32767.0*sin(2*M_PI*4*i/N)); + for (j=1;j<4;j++) { + ((int32_t*)twa)[j]=((int32_t*)twa)[0]; + ((int32_t*)twb)[j]=((int32_t*)twb)[0]; + ((int32_t*)twc)[j]=((int32_t*)twc)[0]; + ((int32_t*)twd)[j]=((int32_t*)twd)[0]; + } + twa+=8; + twb+=8; + twc+=8; + twd+=8; + } +} + + +init_dfts() { + + init_rad4(1024,tw1024); + init_rad2(2048,tw2048); + init_rad4(4096,tw4096); + init_rad2(8192,tw8192); + + init_rad3(1536,twa1536,twb1536); + + init_rad3_rep(288,twa288,twb288); + init_rad5_rep(300,twa300,twb300,twc300,twd300); + init_rad3_rep(324,twa324,twb324); + init_rad3_rep(360,twa360,twb360); + init_rad4_rep(384,twa384,twb384,twc384); + init_rad4_rep(432,twa432,twb432,twc432); + init_rad4_rep(480,twa480,twb480,twc480); + init_rad3_rep(540,twa540,twb540); + init_rad3_rep(576,twa576,twb576); + init_rad2_rep(600,twa600); + init_rad3_rep(648,twa648,twb648); + init_rad4_rep(720,twa720,twb720,twc720); + init_rad4_rep(768,twa768,twb768,twc768); + init_rad3_rep(864,twa864,twb864); + init_rad3_rep(900,twa900,twb900); + init_rad4_rep(960,twa960,twb960,twc960); + init_rad3_rep(972,twa972,twb972); + init_rad3_rep(1080,twa1080,twb1080); + init_rad4_rep(960,twa1152,twb1152,twc1152); + init_rad4_rep(960,twa1200,twb1200,twc1200); +} #ifdef MR_MAIN #include #include +#define LOG_M write_output +int write_output(const char *fname,const char *vname,void *data,int length,int dec,char format) +{ + + FILE *fp=NULL; + int i; + + + printf("Writing %d elements of type %d to %s\n",length,format,fname); + + + if (format == 10 || format ==11 || format == 12 || format == 13 || format == 14) { + fp = fopen(fname,"a+"); + } else if (format != 10 && format !=11 && format != 12 && format != 13 && format != 14) { + fp = fopen(fname,"w+"); + } + + + + if (fp== NULL) { + printf("[OPENAIR][FILE OUTPUT] Cannot open file %s\n",fname); + return(-1); + } + + if (format != 10 && format !=11 && format != 12 && format != 13 && format != 14) + fprintf(fp,"%s = [",vname); + + + switch (format) { + case 0: // real 16-bit + + for (i=0; i 0)) + fprintf(fp,"%d + j*(%d),",((short *)data)[i],((short *)data)[i+1]); + else if (i == 2*(length-1)) + fprintf(fp,"%d + j*(%d);",((short *)data)[i],((short *)data)[i+1]); + else if (i == 0) + fprintf(fp,"\n%d + j*(%d),",((short *)data)[i],((short *)data)[i+1]); + + + + } + + break; + + case 11 : //case eren 16 bit real for channel magnitudes: + for (i=0; i 0)) + fprintf(fp,"%d,",((short *)data)[i]); + else if (i == (length-1)) + fprintf(fp,"%d;",((short *)data)[i]); + else if (i == 0) + fprintf(fp,"\n%d,",((short *)data)[i]); + } + + printf("\n erennnnnnnnnnnnnnn: length :%d",length); + break; + + case 12 : // case eren for log2_maxh real unsigned 8 bit + fprintf(fp,"%d \n",((unsigned char *)&data)[0]); + break; + + } + + if (format != 10 && format !=11 && format !=12 && format != 13 && format != 15) { + fprintf(fp,"];\n"); + fclose(fp); + return(0); + } else if (format == 10 || format ==11 || format == 12 || format == 13 || format == 15) { + fclose(fp); + return(0); + } + + return 0; +} + int main(int argc, char**argv) { @@ -18523,6 +18854,8 @@ int main(int argc, char**argv) int i; simd_q15_t *x128=x,*y128=y; + init_dfts(); + set_taus_seed(0); opp_enabled = 1; /* @@ -18718,6 +19051,7 @@ int main(int argc, char**argv) printf("%d,%d,",((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); printf("\n"); */ + dft60((int16_t *)x,(int16_t *)y,1); printf("\n\n60-point\n"); printf("X: "); @@ -18918,12 +19252,12 @@ int main(int argc, char**argv) stop_meas(&ts); } - + /* printf("\n\n64-point (%f cycles, #trials %d)\n",(double)ts.diff/(double)ts.trials,ts.trials); // LOG_M("x64.m","x64",x,64,1,1); LOG_M("y64.m","y64",y,64,1,1); LOG_M("x64.m","x64",x,64,1,1); - + * /* printf("X: "); for (i=0;i<16;i++) diff --git a/openair1/PHY/TOOLS/twiddles4096.h b/openair1/PHY/TOOLS/twiddles4096.h deleted file mode 100644 index af2b6a8887..0000000000 --- a/openair1/PHY/TOOLS/twiddles4096.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:1023)/4096)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(0:1023)/4096)); -twc = floor(32767*exp(-sqrt(-1)*2*pi*3*(0:1023)/4096)); -twa2 = zeros(1,2*1024); -twb2 = zeros(1,2*1024); -twc2 = zeros(1,2*1024); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -twc2(1:2:end) = real(twc); -twc2(2:2:end) = imag(twc); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t tw4096[3*1024*2] = {"); -fprintf(fd,"%d,",twa2); -fprintf(fd,"%d,",twb2); -fprintf(fd,"%d,",twc2(1:(1024*2)-1)); -fprintf(fd,"%d};\n",twc2(end)); -fclose(fd); -*/ -static int16_t tw4096[3*1024*2] = {32767,0,32766,-51,32766,-101,32766,-151,32766,-202,32766,-252,32765,-302,32765,-352,32764,-403,32763,-453,32763,-503,32762,-553,32761,-604,32760,-654,32759,-704,32758,-754,32757,-805,32755,-855,32754,-905,32753,-955,32751,-1006,32750,-1056,32748,-1106,32746,-1156,32744,-1207,32742,-1257,32740,-1307,32738,-1357,32736,-1407,32734,-1458,32732,-1508,32729,-1558,32727,-1608,32725,-1659,32722,-1709,32719,-1759,32717,-1809,32714,-1859,32711,-1909,32708,-1960,32705,-2010,32702,-2060,32699,-2110,32695,-2160,32692,-2210,32688,-2261,32685,-2311,32681,-2361,32678,-2411,32674,-2461,32670,-2511,32666,-2561,32662,-2611,32658,-2662,32654,-2712,32650,-2762,32646,-2812,32641,-2862,32637,-2912,32632,-2962,32628,-3012,32623,-3062,32618,-3112,32614,-3162,32609,-3212,32604,-3262,32599,-3312,32594,-3362,32588,-3412,32583,-3462,32578,-3512,32572,-3562,32567,-3612,32561,-3662,32556,-3712,32550,-3762,32544,-3812,32538,-3862,32532,-3912,32526,-3962,32520,-4012,32514,-4061,32508,-4111,32501,-4161,32495,-4211,32488,-4261,32482,-4311,32475,-4360,32468,-4410,32462,-4460,32455,-4510,32448,-4560,32441,-4609,32434,-4659,32426,-4709,32419,-4759,32412,-4808,32404,-4858,32397,-4908,32389,-4958,32382,-5007,32374,-5057,32366,-5107,32358,-5156,32350,-5206,32342,-5255,32334,-5305,32326,-5355,32318,-5404,32310,-5454,32301,-5503,32293,-5553,32284,-5602,32275,-5652,32267,-5701,32258,-5751,32249,-5800,32240,-5850,32231,-5899,32222,-5949,32213,-5998,32204,-6048,32194,-6097,32185,-6146,32176,-6196,32166,-6245,32156,-6294,32147,-6344,32137,-6393,32127,-6442,32117,-6492,32107,-6541,32097,-6590,32087,-6639,32077,-6689,32066,-6738,32056,-6787,32046,-6836,32035,-6885,32024,-6934,32014,-6983,32003,-7033,31992,-7082,31981,-7131,31970,-7180,31959,-7229,31948,-7278,31937,-7327,31926,-7376,31914,-7425,31903,-7474,31891,-7523,31880,-7572,31868,-7620,31856,-7669,31845,-7718,31833,-7767,31821,-7816,31809,-7865,31797,-7913,31785,-7962,31772,-8011,31760,-8060,31748,-8108,31735,-8157,31723,-8206,31710,-8254,31697,-8303,31684,-8352,31672,-8400,31659,-8449,31646,-8497,31633,-8546,31619,-8594,31606,-8643,31593,-8691,31580,-8740,31566,-8788,31553,-8837,31539,-8885,31525,-8933,31512,-8982,31498,-9030,31484,-9078,31470,-9127,31456,-9175,31442,-9223,31428,-9271,31413,-9320,31399,-9368,31385,-9416,31370,-9464,31356,-9512,31341,-9560,31326,-9608,31311,-9656,31297,-9704,31282,-9752,31267,-9800,31252,-9848,31236,-9896,31221,-9944,31206,-9992,31191,-10040,31175,-10088,31160,-10136,31144,-10183,31128,-10231,31113,-10279,31097,-10327,31081,-10374,31065,-10422,31049,-10470,31033,-10517,31017,-10565,31001,-10612,30984,-10660,30968,-10707,30951,-10755,30935,-10802,30918,-10850,30902,-10897,30885,-10945,30868,-10992,30851,-11039,30834,-11087,30817,-11134,30800,-11181,30783,-11228,30766,-11276,30748,-11323,30731,-11370,30713,-11417,30696,-11464,30678,-11511,30660,-11558,30643,-11605,30625,-11652,30607,-11699,30589,-11746,30571,-11793,30553,-11840,30535,-11887,30516,-11934,30498,-11981,30480,-12027,30461,-12074,30442,-12121,30424,-12167,30405,-12214,30386,-12261,30368,-12307,30349,-12354,30330,-12400,30311,-12447,30291,-12493,30272,-12540,30253,-12586,30234,-12633,30214,-12679,30195,-12725,30175,-12772,30156,-12818,30136,-12864,30116,-12910,30096,-12957,30076,-13003,30056,-13049,30036,-13095,30016,-13141,29996,-13187,29976,-13233,29955,-13279,29935,-13325,29915,-13371,29894,-13417,29873,-13463,29853,-13508,29832,-13554,29811,-13600,29790,-13646,29769,-13691,29748,-13737,29727,-13783,29706,-13828,29685,-13874,29663,-13919,29642,-13965,29621,-14010,29599,-14056,29577,-14101,29556,-14146,29534,-14192,29512,-14237,29490,-14282,29468,-14327,29446,-14373,29424,-14418,29402,-14463,29380,-14508,29358,-14553,29335,-14598,29313,-14643,29290,-14688,29268,-14733,29245,-14778,29222,-14823,29200,-14867,29177,-14912,29154,-14957,29131,-15002,29108,-15046,29085,-15091,29062,-15136,29038,-15180,29015,-15225,28992,-15269,28968,-15314,28945,-15358,28921,-15402,28897,-15447,28874,-15491,28850,-15535,28826,-15580,28802,-15624,28778,-15668,28754,-15712,28730,-15756,28706,-15800,28681,-15844,28657,-15888,28633,-15932,28608,-15976,28584,-16020,28559,-16064,28534,-16108,28510,-16151,28485,-16195,28460,-16239,28435,-16282,28410,-16326,28385,-16369,28360,-16413,28335,-16456,28309,-16500,28284,-16543,28259,-16587,28233,-16630,28208,-16673,28182,-16717,28156,-16760,28131,-16803,28105,-16846,28079,-16889,28053,-16932,28027,-16975,28001,-17018,27975,-17061,27948,-17104,27922,-17147,27896,-17190,27869,-17233,27843,-17275,27816,-17318,27790,-17361,27763,-17403,27736,-17446,27710,-17488,27683,-17531,27656,-17573,27629,-17616,27602,-17658,27575,-17700,27548,-17743,27520,-17785,27493,-17827,27466,-17869,27438,-17911,27411,-17953,27383,-17995,27355,-18037,27328,-18079,27300,-18121,27272,-18163,27244,-18205,27216,-18247,27188,-18288,27160,-18330,27132,-18372,27104,-18413,27076,-18455,27047,-18496,27019,-18538,26990,-18579,26962,-18621,26933,-18662,26905,-18703,26876,-18745,26847,-18786,26818,-18827,26789,-18868,26760,-18909,26731,-18950,26702,-18991,26673,-19032,26644,-19073,26615,-19114,26585,-19155,26556,-19195,26526,-19236,26497,-19277,26467,-19317,26437,-19358,26408,-19398,26378,-19439,26348,-19479,26318,-19520,26288,-19560,26258,-19600,26228,-19641,26198,-19681,26168,-19721,26137,-19761,26107,-19801,26077,-19841,26046,-19881,26016,-19921,25985,-19961,25954,-20001,25924,-20041,25893,-20080,25862,-20120,25831,-20160,25800,-20199,25769,-20239,25738,-20278,25707,-20318,25676,-20357,25645,-20397,25613,-20436,25582,-20475,25550,-20514,25519,-20554,25487,-20593,25456,-20632,25424,-20671,25392,-20710,25361,-20749,25329,-20788,25297,-20826,25265,-20865,25233,-20904,25201,-20943,25169,-20981,25136,-21020,25104,-21058,25072,-21097,25039,-21135,25007,-21174,24974,-21212,24942,-21250,24909,-21289,24877,-21327,24844,-21365,24811,-21403,24778,-21441,24745,-21479,24712,-21517,24679,-21555,24646,-21593,24613,-21630,24580,-21668,24546,-21706,24513,-21744,24480,-21781,24446,-21819,24413,-21856,24379,-21894,24346,-21931,24312,-21968,24278,-22005,24244,-22043,24211,-22080,24177,-22117,24143,-22154,24109,-22191,24075,-22228,24041,-22265,24006,-22302,23972,-22339,23938,-22375,23903,-22412,23869,-22449,23835,-22485,23800,-22522,23766,-22558,23731,-22595,23696,-22631,23661,-22667,23627,-22704,23592,-22740,23557,-22776,23522,-22812,23487,-22848,23452,-22884,23417,-22920,23382,-22956,23346,-22992,23311,-23028,23276,-23063,23240,-23099,23205,-23135,23169,-23170,23134,-23206,23098,-23241,23062,-23277,23027,-23312,22991,-23347,22955,-23383,22919,-23418,22883,-23453,22847,-23488,22811,-23523,22775,-23558,22739,-23593,22703,-23628,22666,-23662,22630,-23697,22594,-23732,22557,-23767,22521,-23801,22484,-23836,22448,-23870,22411,-23904,22374,-23939,22338,-23973,22301,-24007,22264,-24042,22227,-24076,22190,-24110,22153,-24144,22116,-24178,22079,-24212,22042,-24245,22004,-24279,21967,-24313,21930,-24347,21893,-24380,21855,-24414,21818,-24447,21780,-24481,21743,-24514,21705,-24547,21667,-24581,21629,-24614,21592,-24647,21554,-24680,21516,-24713,21478,-24746,21440,-24779,21402,-24812,21364,-24845,21326,-24878,21288,-24910,21249,-24943,21211,-24975,21173,-25008,21134,-25040,21096,-25073,21057,-25105,21019,-25137,20980,-25170,20942,-25202,20903,-25234,20864,-25266,20825,-25298,20787,-25330,20748,-25362,20709,-25393,20670,-25425,20631,-25457,20592,-25488,20553,-25520,20513,-25551,20474,-25583,20435,-25614,20396,-25646,20356,-25677,20317,-25708,20277,-25739,20238,-25770,20198,-25801,20159,-25832,20119,-25863,20079,-25894,20040,-25925,20000,-25955,19960,-25986,19920,-26017,19880,-26047,19840,-26078,19800,-26108,19760,-26138,19720,-26169,19680,-26199,19640,-26229,19599,-26259,19559,-26289,19519,-26319,19478,-26349,19438,-26379,19397,-26409,19357,-26438,19316,-26468,19276,-26498,19235,-26527,19194,-26557,19154,-26586,19113,-26616,19072,-26645,19031,-26674,18990,-26703,18949,-26732,18908,-26761,18867,-26790,18826,-26819,18785,-26848,18744,-26877,18702,-26906,18661,-26934,18620,-26963,18578,-26991,18537,-27020,18495,-27048,18454,-27077,18412,-27105,18371,-27133,18329,-27161,18287,-27189,18246,-27217,18204,-27245,18162,-27273,18120,-27301,18078,-27329,18036,-27356,17994,-27384,17952,-27412,17910,-27439,17868,-27467,17826,-27494,17784,-27521,17742,-27549,17699,-27576,17657,-27603,17615,-27630,17572,-27657,17530,-27684,17487,-27711,17445,-27737,17402,-27764,17360,-27791,17317,-27817,17274,-27844,17232,-27870,17189,-27897,17146,-27923,17103,-27949,17060,-27976,17017,-28002,16974,-28028,16931,-28054,16888,-28080,16845,-28106,16802,-28132,16759,-28157,16716,-28183,16672,-28209,16629,-28234,16586,-28260,16542,-28285,16499,-28310,16455,-28336,16412,-28361,16368,-28386,16325,-28411,16281,-28436,16238,-28461,16194,-28486,16150,-28511,16107,-28535,16063,-28560,16019,-28585,15975,-28609,15931,-28634,15887,-28658,15843,-28682,15799,-28707,15755,-28731,15711,-28755,15667,-28779,15623,-28803,15579,-28827,15534,-28851,15490,-28875,15446,-28898,15401,-28922,15357,-28946,15313,-28969,15268,-28993,15224,-29016,15179,-29039,15135,-29063,15090,-29086,15045,-29109,15001,-29132,14956,-29155,14911,-29178,14866,-29201,14822,-29223,14777,-29246,14732,-29269,14687,-29291,14642,-29314,14597,-29336,14552,-29359,14507,-29381,14462,-29403,14417,-29425,14372,-29447,14326,-29469,14281,-29491,14236,-29513,14191,-29535,14145,-29557,14100,-29578,14055,-29600,14009,-29622,13964,-29643,13918,-29664,13873,-29686,13827,-29707,13782,-29728,13736,-29749,13690,-29770,13645,-29791,13599,-29812,13553,-29833,13507,-29854,13462,-29874,13416,-29895,13370,-29916,13324,-29936,13278,-29956,13232,-29977,13186,-29997,13140,-30017,13094,-30037,13048,-30057,13002,-30077,12956,-30097,12909,-30117,12863,-30137,12817,-30157,12771,-30176,12724,-30196,12678,-30215,12632,-30235,12585,-30254,12539,-30273,12492,-30292,12446,-30312,12399,-30331,12353,-30350,12306,-30369,12260,-30387,12213,-30406,12166,-30425,12120,-30443,12073,-30462,12026,-30481,11980,-30499,11933,-30517,11886,-30536,11839,-30554,11792,-30572,11745,-30590,11698,-30608,11651,-30626,11604,-30644,11557,-30661,11510,-30679,11463,-30697,11416,-30714,11369,-30732,11322,-30749,11275,-30767,11227,-30784,11180,-30801,11133,-30818,11086,-30835,11038,-30852,10991,-30869,10944,-30886,10896,-30903,10849,-30919,10801,-30936,10754,-30952,10706,-30969,10659,-30985,10611,-31002,10564,-31018,10516,-31034,10469,-31050,10421,-31066,10373,-31082,10326,-31098,10278,-31114,10230,-31129,10182,-31145,10135,-31161,10087,-31176,10039,-31192,9991,-31207,9943,-31222,9895,-31237,9847,-31253,9799,-31268,9751,-31283,9703,-31298,9655,-31312,9607,-31327,9559,-31342,9511,-31357,9463,-31371,9415,-31386,9367,-31400,9319,-31414,9270,-31429,9222,-31443,9174,-31457,9126,-31471,9077,-31485,9029,-31499,8981,-31513,8932,-31526,8884,-31540,8836,-31554,8787,-31567,8739,-31581,8690,-31594,8642,-31607,8593,-31620,8545,-31634,8496,-31647,8448,-31660,8399,-31673,8351,-31685,8302,-31698,8253,-31711,8205,-31724,8156,-31736,8107,-31749,8059,-31761,8010,-31773,7961,-31786,7912,-31798,7864,-31810,7815,-31822,7766,-31834,7717,-31846,7668,-31857,7619,-31869,7571,-31881,7522,-31892,7473,-31904,7424,-31915,7375,-31927,7326,-31938,7277,-31949,7228,-31960,7179,-31971,7130,-31982,7081,-31993,7032,-32004,6982,-32015,6933,-32025,6884,-32036,6835,-32047,6786,-32057,6737,-32067,6688,-32078,6638,-32088,6589,-32098,6540,-32108,6491,-32118,6441,-32128,6392,-32138,6343,-32148,6293,-32157,6244,-32167,6195,-32177,6145,-32186,6096,-32195,6047,-32205,5997,-32214,5948,-32223,5898,-32232,5849,-32241,5799,-32250,5750,-32259,5700,-32268,5651,-32276,5601,-32285,5552,-32294,5502,-32302,5453,-32311,5403,-32319,5354,-32327,5304,-32335,5254,-32343,5205,-32351,5155,-32359,5106,-32367,5056,-32375,5006,-32383,4957,-32390,4907,-32398,4857,-32405,4807,-32413,4758,-32420,4708,-32427,4658,-32435,4608,-32442,4559,-32449,4509,-32456,4459,-32463,4409,-32469,4359,-32476,4310,-32483,4260,-32489,4210,-32496,4160,-32502,4110,-32509,4060,-32515,4011,-32521,3961,-32527,3911,-32533,3861,-32539,3811,-32545,3761,-32551,3711,-32557,3661,-32562,3611,-32568,3561,-32573,3511,-32579,3461,-32584,3411,-32589,3361,-32595,3311,-32600,3261,-32605,3211,-32610,3161,-32615,3111,-32619,3061,-32624,3011,-32629,2961,-32633,2911,-32638,2861,-32642,2811,-32647,2761,-32651,2711,-32655,2661,-32659,2610,-32663,2560,-32667,2510,-32671,2460,-32675,2410,-32679,2360,-32682,2310,-32686,2260,-32689,2209,-32693,2159,-32696,2109,-32700,2059,-32703,2009,-32706,1959,-32709,1908,-32712,1858,-32715,1808,-32718,1758,-32720,1708,-32723,1658,-32726,1607,-32728,1557,-32730,1507,-32733,1457,-32735,1406,-32737,1356,-32739,1306,-32741,1256,-32743,1206,-32745,1155,-32747,1105,-32749,1055,-32751,1005,-32752,954,-32754,904,-32755,854,-32756,804,-32758,753,-32759,703,-32760,653,-32761,603,-32762,552,-32763,502,-32764,452,-32764,402,-32765,351,-32766,301,-32766,251,-32767,201,-32767,150,-32767,100,-32767,50,-32767,32767,0,32766,-101,32766,-202,32765,-302,32764,-403,32763,-503,32761,-604,32759,-704,32757,-805,32754,-905,32751,-1006,32748,-1106,32744,-1207,32740,-1307,32736,-1407,32732,-1508,32727,-1608,32722,-1709,32717,-1809,32711,-1909,32705,-2010,32699,-2110,32692,-2210,32685,-2311,32678,-2411,32670,-2511,32662,-2611,32654,-2712,32646,-2812,32637,-2912,32628,-3012,32618,-3112,32609,-3212,32599,-3312,32588,-3412,32578,-3512,32567,-3612,32556,-3712,32544,-3812,32532,-3912,32520,-4012,32508,-4111,32495,-4211,32482,-4311,32468,-4410,32455,-4510,32441,-4609,32426,-4709,32412,-4808,32397,-4908,32382,-5007,32366,-5107,32350,-5206,32334,-5305,32318,-5404,32301,-5503,32284,-5602,32267,-5701,32249,-5800,32231,-5899,32213,-5998,32194,-6097,32176,-6196,32156,-6294,32137,-6393,32117,-6492,32097,-6590,32077,-6689,32056,-6787,32035,-6885,32014,-6983,31992,-7082,31970,-7180,31948,-7278,31926,-7376,31903,-7474,31880,-7572,31856,-7669,31833,-7767,31809,-7865,31785,-7962,31760,-8060,31735,-8157,31710,-8254,31684,-8352,31659,-8449,31633,-8546,31606,-8643,31580,-8740,31553,-8837,31525,-8933,31498,-9030,31470,-9127,31442,-9223,31413,-9320,31385,-9416,31356,-9512,31326,-9608,31297,-9704,31267,-9800,31236,-9896,31206,-9992,31175,-10088,31144,-10183,31113,-10279,31081,-10374,31049,-10470,31017,-10565,30984,-10660,30951,-10755,30918,-10850,30885,-10945,30851,-11039,30817,-11134,30783,-11228,30748,-11323,30713,-11417,30678,-11511,30643,-11605,30607,-11699,30571,-11793,30535,-11887,30498,-11981,30461,-12074,30424,-12167,30386,-12261,30349,-12354,30311,-12447,30272,-12540,30234,-12633,30195,-12725,30156,-12818,30116,-12910,30076,-13003,30036,-13095,29996,-13187,29955,-13279,29915,-13371,29873,-13463,29832,-13554,29790,-13646,29748,-13737,29706,-13828,29663,-13919,29621,-14010,29577,-14101,29534,-14192,29490,-14282,29446,-14373,29402,-14463,29358,-14553,29313,-14643,29268,-14733,29222,-14823,29177,-14912,29131,-15002,29085,-15091,29038,-15180,28992,-15269,28945,-15358,28897,-15447,28850,-15535,28802,-15624,28754,-15712,28706,-15800,28657,-15888,28608,-15976,28559,-16064,28510,-16151,28460,-16239,28410,-16326,28360,-16413,28309,-16500,28259,-16587,28208,-16673,28156,-16760,28105,-16846,28053,-16932,28001,-17018,27948,-17104,27896,-17190,27843,-17275,27790,-17361,27736,-17446,27683,-17531,27629,-17616,27575,-17700,27520,-17785,27466,-17869,27411,-17953,27355,-18037,27300,-18121,27244,-18205,27188,-18288,27132,-18372,27076,-18455,27019,-18538,26962,-18621,26905,-18703,26847,-18786,26789,-18868,26731,-18950,26673,-19032,26615,-19114,26556,-19195,26497,-19277,26437,-19358,26378,-19439,26318,-19520,26258,-19600,26198,-19681,26137,-19761,26077,-19841,26016,-19921,25954,-20001,25893,-20080,25831,-20160,25769,-20239,25707,-20318,25645,-20397,25582,-20475,25519,-20554,25456,-20632,25392,-20710,25329,-20788,25265,-20865,25201,-20943,25136,-21020,25072,-21097,25007,-21174,24942,-21250,24877,-21327,24811,-21403,24745,-21479,24679,-21555,24613,-21630,24546,-21706,24480,-21781,24413,-21856,24346,-21931,24278,-22005,24211,-22080,24143,-22154,24075,-22228,24006,-22302,23938,-22375,23869,-22449,23800,-22522,23731,-22595,23661,-22667,23592,-22740,23522,-22812,23452,-22884,23382,-22956,23311,-23028,23240,-23099,23169,-23170,23098,-23241,23027,-23312,22955,-23383,22883,-23453,22811,-23523,22739,-23593,22666,-23662,22594,-23732,22521,-23801,22448,-23870,22374,-23939,22301,-24007,22227,-24076,22153,-24144,22079,-24212,22004,-24279,21930,-24347,21855,-24414,21780,-24481,21705,-24547,21629,-24614,21554,-24680,21478,-24746,21402,-24812,21326,-24878,21249,-24943,21173,-25008,21096,-25073,21019,-25137,20942,-25202,20864,-25266,20787,-25330,20709,-25393,20631,-25457,20553,-25520,20474,-25583,20396,-25646,20317,-25708,20238,-25770,20159,-25832,20079,-25894,20000,-25955,19920,-26017,19840,-26078,19760,-26138,19680,-26199,19599,-26259,19519,-26319,19438,-26379,19357,-26438,19276,-26498,19194,-26557,19113,-26616,19031,-26674,18949,-26732,18867,-26790,18785,-26848,18702,-26906,18620,-26963,18537,-27020,18454,-27077,18371,-27133,18287,-27189,18204,-27245,18120,-27301,18036,-27356,17952,-27412,17868,-27467,17784,-27521,17699,-27576,17615,-27630,17530,-27684,17445,-27737,17360,-27791,17274,-27844,17189,-27897,17103,-27949,17017,-28002,16931,-28054,16845,-28106,16759,-28157,16672,-28209,16586,-28260,16499,-28310,16412,-28361,16325,-28411,16238,-28461,16150,-28511,16063,-28560,15975,-28609,15887,-28658,15799,-28707,15711,-28755,15623,-28803,15534,-28851,15446,-28898,15357,-28946,15268,-28993,15179,-29039,15090,-29086,15001,-29132,14911,-29178,14822,-29223,14732,-29269,14642,-29314,14552,-29359,14462,-29403,14372,-29447,14281,-29491,14191,-29535,14100,-29578,14009,-29622,13918,-29664,13827,-29707,13736,-29749,13645,-29791,13553,-29833,13462,-29874,13370,-29916,13278,-29956,13186,-29997,13094,-30037,13002,-30077,12909,-30117,12817,-30157,12724,-30196,12632,-30235,12539,-30273,12446,-30312,12353,-30350,12260,-30387,12166,-30425,12073,-30462,11980,-30499,11886,-30536,11792,-30572,11698,-30608,11604,-30644,11510,-30679,11416,-30714,11322,-30749,11227,-30784,11133,-30818,11038,-30852,10944,-30886,10849,-30919,10754,-30952,10659,-30985,10564,-31018,10469,-31050,10373,-31082,10278,-31114,10182,-31145,10087,-31176,9991,-31207,9895,-31237,9799,-31268,9703,-31298,9607,-31327,9511,-31357,9415,-31386,9319,-31414,9222,-31443,9126,-31471,9029,-31499,8932,-31526,8836,-31554,8739,-31581,8642,-31607,8545,-31634,8448,-31660,8351,-31685,8253,-31711,8156,-31736,8059,-31761,7961,-31786,7864,-31810,7766,-31834,7668,-31857,7571,-31881,7473,-31904,7375,-31927,7277,-31949,7179,-31971,7081,-31993,6982,-32015,6884,-32036,6786,-32057,6688,-32078,6589,-32098,6491,-32118,6392,-32138,6293,-32157,6195,-32177,6096,-32195,5997,-32214,5898,-32232,5799,-32250,5700,-32268,5601,-32285,5502,-32302,5403,-32319,5304,-32335,5205,-32351,5106,-32367,5006,-32383,4907,-32398,4807,-32413,4708,-32427,4608,-32442,4509,-32456,4409,-32469,4310,-32483,4210,-32496,4110,-32509,4011,-32521,3911,-32533,3811,-32545,3711,-32557,3611,-32568,3511,-32579,3411,-32589,3311,-32600,3211,-32610,3111,-32619,3011,-32629,2911,-32638,2811,-32647,2711,-32655,2610,-32663,2510,-32671,2410,-32679,2310,-32686,2209,-32693,2109,-32700,2009,-32706,1908,-32712,1808,-32718,1708,-32723,1607,-32728,1507,-32733,1406,-32737,1306,-32741,1206,-32745,1105,-32749,1005,-32752,904,-32755,804,-32758,703,-32760,603,-32762,502,-32764,402,-32765,301,-32766,201,-32767,100,-32767,0,-32767,-101,-32767,-202,-32767,-302,-32766,-403,-32765,-503,-32764,-604,-32762,-704,-32760,-805,-32758,-905,-32755,-1006,-32752,-1106,-32749,-1207,-32745,-1307,-32741,-1407,-32737,-1508,-32733,-1608,-32728,-1709,-32723,-1809,-32718,-1909,-32712,-2010,-32706,-2110,-32700,-2210,-32693,-2311,-32686,-2411,-32679,-2511,-32671,-2611,-32663,-2712,-32655,-2812,-32647,-2912,-32638,-3012,-32629,-3112,-32619,-3212,-32610,-3312,-32600,-3412,-32589,-3512,-32579,-3612,-32568,-3712,-32557,-3812,-32545,-3912,-32533,-4012,-32521,-4111,-32509,-4211,-32496,-4311,-32483,-4410,-32469,-4510,-32456,-4609,-32442,-4709,-32427,-4808,-32413,-4908,-32398,-5007,-32383,-5107,-32367,-5206,-32351,-5305,-32335,-5404,-32319,-5503,-32302,-5602,-32285,-5701,-32268,-5800,-32250,-5899,-32232,-5998,-32214,-6097,-32195,-6196,-32177,-6294,-32157,-6393,-32138,-6492,-32118,-6590,-32098,-6689,-32078,-6787,-32057,-6885,-32036,-6983,-32015,-7082,-31993,-7180,-31971,-7278,-31949,-7376,-31927,-7474,-31904,-7572,-31881,-7669,-31857,-7767,-31834,-7865,-31810,-7962,-31786,-8060,-31761,-8157,-31736,-8254,-31711,-8352,-31685,-8449,-31660,-8546,-31634,-8643,-31607,-8740,-31581,-8837,-31554,-8933,-31526,-9030,-31499,-9127,-31471,-9223,-31443,-9320,-31414,-9416,-31386,-9512,-31357,-9608,-31327,-9704,-31298,-9800,-31268,-9896,-31237,-9992,-31207,-10088,-31176,-10183,-31145,-10279,-31114,-10374,-31082,-10470,-31050,-10565,-31018,-10660,-30985,-10755,-30952,-10850,-30919,-10945,-30886,-11039,-30852,-11134,-30818,-11228,-30784,-11323,-30749,-11417,-30714,-11511,-30679,-11605,-30644,-11699,-30608,-11793,-30572,-11887,-30536,-11981,-30499,-12074,-30462,-12167,-30425,-12261,-30387,-12354,-30350,-12447,-30312,-12540,-30273,-12633,-30235,-12725,-30196,-12818,-30157,-12910,-30117,-13003,-30077,-13095,-30037,-13187,-29997,-13279,-29956,-13371,-29916,-13463,-29874,-13554,-29833,-13646,-29791,-13737,-29749,-13828,-29707,-13919,-29664,-14010,-29622,-14101,-29578,-14192,-29535,-14282,-29491,-14373,-29447,-14463,-29403,-14553,-29359,-14643,-29314,-14733,-29269,-14823,-29223,-14912,-29178,-15002,-29132,-15091,-29086,-15180,-29039,-15269,-28993,-15358,-28946,-15447,-28898,-15535,-28851,-15624,-28803,-15712,-28755,-15800,-28707,-15888,-28658,-15976,-28609,-16064,-28560,-16151,-28511,-16239,-28461,-16326,-28411,-16413,-28361,-16500,-28310,-16587,-28260,-16673,-28209,-16760,-28157,-16846,-28106,-16932,-28054,-17018,-28002,-17104,-27949,-17190,-27897,-17275,-27844,-17361,-27791,-17446,-27737,-17531,-27684,-17616,-27630,-17700,-27576,-17785,-27521,-17869,-27467,-17953,-27412,-18037,-27356,-18121,-27301,-18205,-27245,-18288,-27189,-18372,-27133,-18455,-27077,-18538,-27020,-18621,-26963,-18703,-26906,-18786,-26848,-18868,-26790,-18950,-26732,-19032,-26674,-19114,-26616,-19195,-26557,-19277,-26498,-19358,-26438,-19439,-26379,-19520,-26319,-19600,-26259,-19681,-26199,-19761,-26138,-19841,-26078,-19921,-26017,-20001,-25955,-20080,-25894,-20160,-25832,-20239,-25770,-20318,-25708,-20397,-25646,-20475,-25583,-20554,-25520,-20632,-25457,-20710,-25393,-20788,-25330,-20865,-25266,-20943,-25202,-21020,-25137,-21097,-25073,-21174,-25008,-21250,-24943,-21327,-24878,-21403,-24812,-21479,-24746,-21555,-24680,-21630,-24614,-21706,-24547,-21781,-24481,-21856,-24414,-21931,-24347,-22005,-24279,-22080,-24212,-22154,-24144,-22228,-24076,-22302,-24007,-22375,-23939,-22449,-23870,-22522,-23801,-22595,-23732,-22667,-23662,-22740,-23593,-22812,-23523,-22884,-23453,-22956,-23383,-23028,-23312,-23099,-23241,-23170,-23170,-23241,-23099,-23312,-23028,-23383,-22956,-23453,-22884,-23523,-22812,-23593,-22740,-23662,-22667,-23732,-22595,-23801,-22522,-23870,-22449,-23939,-22375,-24007,-22302,-24076,-22228,-24144,-22154,-24212,-22080,-24279,-22005,-24347,-21931,-24414,-21856,-24481,-21781,-24547,-21706,-24614,-21630,-24680,-21555,-24746,-21479,-24812,-21403,-24878,-21327,-24943,-21250,-25008,-21174,-25073,-21097,-25137,-21020,-25202,-20943,-25266,-20865,-25330,-20788,-25393,-20710,-25457,-20632,-25520,-20554,-25583,-20475,-25646,-20397,-25708,-20318,-25770,-20239,-25832,-20160,-25894,-20080,-25955,-20001,-26017,-19921,-26078,-19841,-26138,-19761,-26199,-19681,-26259,-19600,-26319,-19520,-26379,-19439,-26438,-19358,-26498,-19277,-26557,-19195,-26616,-19114,-26674,-19032,-26732,-18950,-26790,-18868,-26848,-18786,-26906,-18703,-26963,-18621,-27020,-18538,-27077,-18455,-27133,-18372,-27189,-18288,-27245,-18205,-27301,-18121,-27356,-18037,-27412,-17953,-27467,-17869,-27521,-17785,-27576,-17700,-27630,-17616,-27684,-17531,-27737,-17446,-27791,-17361,-27844,-17275,-27897,-17190,-27949,-17104,-28002,-17018,-28054,-16932,-28106,-16846,-28157,-16760,-28209,-16673,-28260,-16587,-28310,-16500,-28361,-16413,-28411,-16326,-28461,-16239,-28511,-16151,-28560,-16064,-28609,-15976,-28658,-15888,-28707,-15800,-28755,-15712,-28803,-15624,-28851,-15535,-28898,-15447,-28946,-15358,-28993,-15269,-29039,-15180,-29086,-15091,-29132,-15002,-29178,-14912,-29223,-14823,-29269,-14733,-29314,-14643,-29359,-14553,-29403,-14463,-29447,-14373,-29491,-14282,-29535,-14192,-29578,-14101,-29622,-14010,-29664,-13919,-29707,-13828,-29749,-13737,-29791,-13646,-29833,-13554,-29874,-13463,-29916,-13371,-29956,-13279,-29997,-13187,-30037,-13095,-30077,-13003,-30117,-12910,-30157,-12818,-30196,-12725,-30235,-12633,-30273,-12540,-30312,-12447,-30350,-12354,-30387,-12261,-30425,-12167,-30462,-12074,-30499,-11981,-30536,-11887,-30572,-11793,-30608,-11699,-30644,-11605,-30679,-11511,-30714,-11417,-30749,-11323,-30784,-11228,-30818,-11134,-30852,-11039,-30886,-10945,-30919,-10850,-30952,-10755,-30985,-10660,-31018,-10565,-31050,-10470,-31082,-10374,-31114,-10279,-31145,-10183,-31176,-10088,-31207,-9992,-31237,-9896,-31268,-9800,-31298,-9704,-31327,-9608,-31357,-9512,-31386,-9416,-31414,-9320,-31443,-9223,-31471,-9127,-31499,-9030,-31526,-8933,-31554,-8837,-31581,-8740,-31607,-8643,-31634,-8546,-31660,-8449,-31685,-8352,-31711,-8254,-31736,-8157,-31761,-8060,-31786,-7962,-31810,-7865,-31834,-7767,-31857,-7669,-31881,-7572,-31904,-7474,-31927,-7376,-31949,-7278,-31971,-7180,-31993,-7082,-32015,-6983,-32036,-6885,-32057,-6787,-32078,-6689,-32098,-6590,-32118,-6492,-32138,-6393,-32157,-6294,-32177,-6196,-32195,-6097,-32214,-5998,-32232,-5899,-32250,-5800,-32268,-5701,-32285,-5602,-32302,-5503,-32319,-5404,-32335,-5305,-32351,-5206,-32367,-5107,-32383,-5007,-32398,-4908,-32413,-4808,-32427,-4709,-32442,-4609,-32456,-4510,-32469,-4410,-32483,-4311,-32496,-4211,-32509,-4111,-32521,-4012,-32533,-3912,-32545,-3812,-32557,-3712,-32568,-3612,-32579,-3512,-32589,-3412,-32600,-3312,-32610,-3212,-32619,-3112,-32629,-3012,-32638,-2912,-32647,-2812,-32655,-2712,-32663,-2611,-32671,-2511,-32679,-2411,-32686,-2311,-32693,-2210,-32700,-2110,-32706,-2010,-32712,-1909,-32718,-1809,-32723,-1709,-32728,-1608,-32733,-1508,-32737,-1407,-32741,-1307,-32745,-1207,-32749,-1106,-32752,-1006,-32755,-905,-32758,-805,-32760,-704,-32762,-604,-32764,-503,-32765,-403,-32766,-302,-32767,-202,-32767,-101,32767,0,32766,-151,32765,-302,32763,-453,32761,-604,32758,-754,32754,-905,32750,-1056,32744,-1207,32738,-1357,32732,-1508,32725,-1659,32717,-1809,32708,-1960,32699,-2110,32688,-2261,32678,-2411,32666,-2561,32654,-2712,32641,-2862,32628,-3012,32614,-3162,32599,-3312,32583,-3462,32567,-3612,32550,-3762,32532,-3912,32514,-4061,32495,-4211,32475,-4360,32455,-4510,32434,-4659,32412,-4808,32389,-4958,32366,-5107,32342,-5255,32318,-5404,32293,-5553,32267,-5701,32240,-5850,32213,-5998,32185,-6146,32156,-6294,32127,-6442,32097,-6590,32066,-6738,32035,-6885,32003,-7033,31970,-7180,31937,-7327,31903,-7474,31868,-7620,31833,-7767,31797,-7913,31760,-8060,31723,-8206,31684,-8352,31646,-8497,31606,-8643,31566,-8788,31525,-8933,31484,-9078,31442,-9223,31399,-9368,31356,-9512,31311,-9656,31267,-9800,31221,-9944,31175,-10088,31128,-10231,31081,-10374,31033,-10517,30984,-10660,30935,-10802,30885,-10945,30834,-11087,30783,-11228,30731,-11370,30678,-11511,30625,-11652,30571,-11793,30516,-11934,30461,-12074,30405,-12214,30349,-12354,30291,-12493,30234,-12633,30175,-12772,30116,-12910,30056,-13049,29996,-13187,29935,-13325,29873,-13463,29811,-13600,29748,-13737,29685,-13874,29621,-14010,29556,-14146,29490,-14282,29424,-14418,29358,-14553,29290,-14688,29222,-14823,29154,-14957,29085,-15091,29015,-15225,28945,-15358,28874,-15491,28802,-15624,28730,-15756,28657,-15888,28584,-16020,28510,-16151,28435,-16282,28360,-16413,28284,-16543,28208,-16673,28131,-16803,28053,-16932,27975,-17061,27896,-17190,27816,-17318,27736,-17446,27656,-17573,27575,-17700,27493,-17827,27411,-17953,27328,-18079,27244,-18205,27160,-18330,27076,-18455,26990,-18579,26905,-18703,26818,-18827,26731,-18950,26644,-19073,26556,-19195,26467,-19317,26378,-19439,26288,-19560,26198,-19681,26107,-19801,26016,-19921,25924,-20041,25831,-20160,25738,-20278,25645,-20397,25550,-20514,25456,-20632,25361,-20749,25265,-20865,25169,-20981,25072,-21097,24974,-21212,24877,-21327,24778,-21441,24679,-21555,24580,-21668,24480,-21781,24379,-21894,24278,-22005,24177,-22117,24075,-22228,23972,-22339,23869,-22449,23766,-22558,23661,-22667,23557,-22776,23452,-22884,23346,-22992,23240,-23099,23134,-23206,23027,-23312,22919,-23418,22811,-23523,22703,-23628,22594,-23732,22484,-23836,22374,-23939,22264,-24042,22153,-24144,22042,-24245,21930,-24347,21818,-24447,21705,-24547,21592,-24647,21478,-24746,21364,-24845,21249,-24943,21134,-25040,21019,-25137,20903,-25234,20787,-25330,20670,-25425,20553,-25520,20435,-25614,20317,-25708,20198,-25801,20079,-25894,19960,-25986,19840,-26078,19720,-26169,19599,-26259,19478,-26349,19357,-26438,19235,-26527,19113,-26616,18990,-26703,18867,-26790,18744,-26877,18620,-26963,18495,-27048,18371,-27133,18246,-27217,18120,-27301,17994,-27384,17868,-27467,17742,-27549,17615,-27630,17487,-27711,17360,-27791,17232,-27870,17103,-27949,16974,-28028,16845,-28106,16716,-28183,16586,-28260,16455,-28336,16325,-28411,16194,-28486,16063,-28560,15931,-28634,15799,-28707,15667,-28779,15534,-28851,15401,-28922,15268,-28993,15135,-29063,15001,-29132,14866,-29201,14732,-29269,14597,-29336,14462,-29403,14326,-29469,14191,-29535,14055,-29600,13918,-29664,13782,-29728,13645,-29791,13507,-29854,13370,-29916,13232,-29977,13094,-30037,12956,-30097,12817,-30157,12678,-30215,12539,-30273,12399,-30331,12260,-30387,12120,-30443,11980,-30499,11839,-30554,11698,-30608,11557,-30661,11416,-30714,11275,-30767,11133,-30818,10991,-30869,10849,-30919,10706,-30969,10564,-31018,10421,-31066,10278,-31114,10135,-31161,9991,-31207,9847,-31253,9703,-31298,9559,-31342,9415,-31386,9270,-31429,9126,-31471,8981,-31513,8836,-31554,8690,-31594,8545,-31634,8399,-31673,8253,-31711,8107,-31749,7961,-31786,7815,-31822,7668,-31857,7522,-31892,7375,-31927,7228,-31960,7081,-31993,6933,-32025,6786,-32057,6638,-32088,6491,-32118,6343,-32148,6195,-32177,6047,-32205,5898,-32232,5750,-32259,5601,-32285,5453,-32311,5304,-32335,5155,-32359,5006,-32383,4857,-32405,4708,-32427,4559,-32449,4409,-32469,4260,-32489,4110,-32509,3961,-32527,3811,-32545,3661,-32562,3511,-32579,3361,-32595,3211,-32610,3061,-32624,2911,-32638,2761,-32651,2610,-32663,2460,-32675,2310,-32686,2159,-32696,2009,-32706,1858,-32715,1708,-32723,1557,-32730,1406,-32737,1256,-32743,1105,-32749,954,-32754,804,-32758,653,-32761,502,-32764,351,-32766,201,-32767,50,-32767,-101,-32767,-252,-32767,-403,-32765,-553,-32763,-704,-32760,-855,-32756,-1006,-32752,-1156,-32747,-1307,-32741,-1458,-32735,-1608,-32728,-1759,-32720,-1909,-32712,-2060,-32703,-2210,-32693,-2361,-32682,-2511,-32671,-2662,-32659,-2812,-32647,-2962,-32633,-3112,-32619,-3262,-32605,-3412,-32589,-3562,-32573,-3712,-32557,-3862,-32539,-4012,-32521,-4161,-32502,-4311,-32483,-4460,-32463,-4609,-32442,-4759,-32420,-4908,-32398,-5057,-32375,-5206,-32351,-5355,-32327,-5503,-32302,-5652,-32276,-5800,-32250,-5949,-32223,-6097,-32195,-6245,-32167,-6393,-32138,-6541,-32108,-6689,-32078,-6836,-32047,-6983,-32015,-7131,-31982,-7278,-31949,-7425,-31915,-7572,-31881,-7718,-31846,-7865,-31810,-8011,-31773,-8157,-31736,-8303,-31698,-8449,-31660,-8594,-31620,-8740,-31581,-8885,-31540,-9030,-31499,-9175,-31457,-9320,-31414,-9464,-31371,-9608,-31327,-9752,-31283,-9896,-31237,-10040,-31192,-10183,-31145,-10327,-31098,-10470,-31050,-10612,-31002,-10755,-30952,-10897,-30903,-11039,-30852,-11181,-30801,-11323,-30749,-11464,-30697,-11605,-30644,-11746,-30590,-11887,-30536,-12027,-30481,-12167,-30425,-12307,-30369,-12447,-30312,-12586,-30254,-12725,-30196,-12864,-30137,-13003,-30077,-13141,-30017,-13279,-29956,-13417,-29895,-13554,-29833,-13691,-29770,-13828,-29707,-13965,-29643,-14101,-29578,-14237,-29513,-14373,-29447,-14508,-29381,-14643,-29314,-14778,-29246,-14912,-29178,-15046,-29109,-15180,-29039,-15314,-28969,-15447,-28898,-15580,-28827,-15712,-28755,-15844,-28682,-15976,-28609,-16108,-28535,-16239,-28461,-16369,-28386,-16500,-28310,-16630,-28234,-16760,-28157,-16889,-28080,-17018,-28002,-17147,-27923,-17275,-27844,-17403,-27764,-17531,-27684,-17658,-27603,-17785,-27521,-17911,-27439,-18037,-27356,-18163,-27273,-18288,-27189,-18413,-27105,-18538,-27020,-18662,-26934,-18786,-26848,-18909,-26761,-19032,-26674,-19155,-26586,-19277,-26498,-19398,-26409,-19520,-26319,-19641,-26229,-19761,-26138,-19881,-26047,-20001,-25955,-20120,-25863,-20239,-25770,-20357,-25677,-20475,-25583,-20593,-25488,-20710,-25393,-20826,-25298,-20943,-25202,-21058,-25105,-21174,-25008,-21289,-24910,-21403,-24812,-21517,-24713,-21630,-24614,-21744,-24514,-21856,-24414,-21968,-24313,-22080,-24212,-22191,-24110,-22302,-24007,-22412,-23904,-22522,-23801,-22631,-23697,-22740,-23593,-22848,-23488,-22956,-23383,-23063,-23277,-23170,-23170,-23277,-23063,-23383,-22956,-23488,-22848,-23593,-22740,-23697,-22631,-23801,-22522,-23904,-22412,-24007,-22302,-24110,-22191,-24212,-22080,-24313,-21968,-24414,-21856,-24514,-21744,-24614,-21630,-24713,-21517,-24812,-21403,-24910,-21289,-25008,-21174,-25105,-21058,-25202,-20943,-25298,-20826,-25393,-20710,-25488,-20593,-25583,-20475,-25677,-20357,-25770,-20239,-25863,-20120,-25955,-20001,-26047,-19881,-26138,-19761,-26229,-19641,-26319,-19520,-26409,-19398,-26498,-19277,-26586,-19155,-26674,-19032,-26761,-18909,-26848,-18786,-26934,-18662,-27020,-18538,-27105,-18413,-27189,-18288,-27273,-18163,-27356,-18037,-27439,-17911,-27521,-17785,-27603,-17658,-27684,-17531,-27764,-17403,-27844,-17275,-27923,-17147,-28002,-17018,-28080,-16889,-28157,-16760,-28234,-16630,-28310,-16500,-28386,-16369,-28461,-16239,-28535,-16108,-28609,-15976,-28682,-15844,-28755,-15712,-28827,-15580,-28898,-15447,-28969,-15314,-29039,-15180,-29109,-15046,-29178,-14912,-29246,-14778,-29314,-14643,-29381,-14508,-29447,-14373,-29513,-14237,-29578,-14101,-29643,-13965,-29707,-13828,-29770,-13691,-29833,-13554,-29895,-13417,-29956,-13279,-30017,-13141,-30077,-13003,-30137,-12864,-30196,-12725,-30254,-12586,-30312,-12447,-30369,-12307,-30425,-12167,-30481,-12027,-30536,-11887,-30590,-11746,-30644,-11605,-30697,-11464,-30749,-11323,-30801,-11181,-30852,-11039,-30903,-10897,-30952,-10755,-31002,-10612,-31050,-10470,-31098,-10327,-31145,-10183,-31192,-10040,-31237,-9896,-31283,-9752,-31327,-9608,-31371,-9464,-31414,-9320,-31457,-9175,-31499,-9030,-31540,-8885,-31581,-8740,-31620,-8594,-31660,-8449,-31698,-8303,-31736,-8157,-31773,-8011,-31810,-7865,-31846,-7718,-31881,-7572,-31915,-7425,-31949,-7278,-31982,-7131,-32015,-6983,-32047,-6836,-32078,-6689,-32108,-6541,-32138,-6393,-32167,-6245,-32195,-6097,-32223,-5949,-32250,-5800,-32276,-5652,-32302,-5503,-32327,-5355,-32351,-5206,-32375,-5057,-32398,-4908,-32420,-4759,-32442,-4609,-32463,-4460,-32483,-4311,-32502,-4161,-32521,-4012,-32539,-3862,-32557,-3712,-32573,-3562,-32589,-3412,-32605,-3262,-32619,-3112,-32633,-2962,-32647,-2812,-32659,-2662,-32671,-2511,-32682,-2361,-32693,-2210,-32703,-2060,-32712,-1909,-32720,-1759,-32728,-1608,-32735,-1458,-32741,-1307,-32747,-1156,-32752,-1006,-32756,-855,-32760,-704,-32763,-553,-32765,-403,-32767,-252,-32767,-101,-32767,50,-32767,201,-32766,351,-32764,502,-32761,653,-32758,804,-32754,954,-32749,1105,-32743,1256,-32737,1406,-32730,1557,-32723,1708,-32715,1858,-32706,2009,-32696,2159,-32686,2310,-32675,2460,-32663,2610,-32651,2761,-32638,2911,-32624,3061,-32610,3211,-32595,3361,-32579,3511,-32562,3661,-32545,3811,-32527,3961,-32509,4110,-32489,4260,-32469,4409,-32449,4559,-32427,4708,-32405,4857,-32383,5006,-32359,5155,-32335,5304,-32311,5453,-32285,5601,-32259,5750,-32232,5898,-32205,6047,-32177,6195,-32148,6343,-32118,6491,-32088,6638,-32057,6786,-32025,6933,-31993,7081,-31960,7228,-31927,7375,-31892,7522,-31857,7668,-31822,7815,-31786,7961,-31749,8107,-31711,8253,-31673,8399,-31634,8545,-31594,8690,-31554,8836,-31513,8981,-31471,9126,-31429,9270,-31386,9415,-31342,9559,-31298,9703,-31253,9847,-31207,9991,-31161,10135,-31114,10278,-31066,10421,-31018,10564,-30969,10706,-30919,10849,-30869,10991,-30818,11133,-30767,11275,-30714,11416,-30661,11557,-30608,11698,-30554,11839,-30499,11980,-30443,12120,-30387,12260,-30331,12399,-30273,12539,-30215,12678,-30157,12817,-30097,12956,-30037,13094,-29977,13232,-29916,13370,-29854,13507,-29791,13645,-29728,13782,-29664,13918,-29600,14055,-29535,14191,-29469,14326,-29403,14462,-29336,14597,-29269,14732,-29201,14866,-29132,15001,-29063,15135,-28993,15268,-28922,15401,-28851,15534,-28779,15667,-28707,15799,-28634,15931,-28560,16063,-28486,16194,-28411,16325,-28336,16455,-28260,16586,-28183,16716,-28106,16845,-28028,16974,-27949,17103,-27870,17232,-27791,17360,-27711,17487,-27630,17615,-27549,17742,-27467,17868,-27384,17994,-27301,18120,-27217,18246,-27133,18371,-27048,18495,-26963,18620,-26877,18744,-26790,18867,-26703,18990,-26616,19113,-26527,19235,-26438,19357,-26349,19478,-26259,19599,-26169,19720,-26078,19840,-25986,19960,-25894,20079,-25801,20198,-25708,20317,-25614,20435,-25520,20553,-25425,20670,-25330,20787,-25234,20903,-25137,21019,-25040,21134,-24943,21249,-24845,21364,-24746,21478,-24647,21592,-24547,21705,-24447,21818,-24347,21930,-24245,22042,-24144,22153,-24042,22264,-23939,22374,-23836,22484,-23732,22594,-23628,22703,-23523,22811,-23418,22919,-23312,23027,-23206,23134,-23099,23240,-22992,23346,-22884,23452,-22776,23557,-22667,23661,-22558,23766,-22449,23869,-22339,23972,-22228,24075,-22117,24177,-22005,24278,-21894,24379,-21781,24480,-21668,24580,-21555,24679,-21441,24778,-21327,24877,-21212,24974,-21097,25072,-20981,25169,-20865,25265,-20749,25361,-20632,25456,-20514,25550,-20397,25645,-20278,25738,-20160,25831,-20041,25924,-19921,26016,-19801,26107,-19681,26198,-19560,26288,-19439,26378,-19317,26467,-19195,26556,-19073,26644,-18950,26731,-18827,26818,-18703,26905,-18579,26990,-18455,27076,-18330,27160,-18205,27244,-18079,27328,-17953,27411,-17827,27493,-17700,27575,-17573,27656,-17446,27736,-17318,27816,-17190,27896,-17061,27975,-16932,28053,-16803,28131,-16673,28208,-16543,28284,-16413,28360,-16282,28435,-16151,28510,-16020,28584,-15888,28657,-15756,28730,-15624,28802,-15491,28874,-15358,28945,-15225,29015,-15091,29085,-14957,29154,-14823,29222,-14688,29290,-14553,29358,-14418,29424,-14282,29490,-14146,29556,-14010,29621,-13874,29685,-13737,29748,-13600,29811,-13463,29873,-13325,29935,-13187,29996,-13049,30056,-12910,30116,-12772,30175,-12633,30234,-12493,30291,-12354,30349,-12214,30405,-12074,30461,-11934,30516,-11793,30571,-11652,30625,-11511,30678,-11370,30731,-11228,30783,-11087,30834,-10945,30885,-10802,30935,-10660,30984,-10517,31033,-10374,31081,-10231,31128,-10088,31175,-9944,31221,-9800,31267,-9656,31311,-9512,31356,-9368,31399,-9223,31442,-9078,31484,-8933,31525,-8788,31566,-8643,31606,-8497,31646,-8352,31684,-8206,31723,-8060,31760,-7913,31797,-7767,31833,-7620,31868,-7474,31903,-7327,31937,-7180,31970,-7033,32003,-6885,32035,-6738,32066,-6590,32097,-6442,32127,-6294,32156,-6146,32185,-5998,32213,-5850,32240,-5701,32267,-5553,32293,-5404,32318,-5255,32342,-5107,32366,-4958,32389,-4808,32412,-4659,32434,-4510,32455,-4360,32475,-4211,32495,-4061,32514,-3912,32532,-3762,32550,-3612,32567,-3462,32583,-3312,32599,-3162,32614,-3012,32628,-2862,32641,-2712,32654,-2561,32666,-2411,32678,-2261,32688,-2110,32699,-1960,32708,-1809,32717,-1659,32725,-1508,32732,-1357,32738,-1207,32744,-1056,32750,-905,32754,-754,32758,-604,32761,-453,32763,-302,32765,-151,32766}; diff --git a/openair1/PHY/TOOLS/twiddles8192.h b/openair1/PHY/TOOLS/twiddles8192.h deleted file mode 100644 index 6b76619013..0000000000 --- a/openair1/PHY/TOOLS/twiddles8192.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:4095)/8192)); -twa2 = zeros(1,2*4096); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t tw8192[4096*2] = {"); -fprintf(fd,"%d,",twa2(1:(4096*2)-1)); -fprintf(fd,"%d};\n",twa2(end)); -fclose(fd); -*/ -static int16_t tw8192[4096*2] = {32767,0,32766,-26,32766,-51,32766,-76,32766,-101,32766,-126,32766,-151,32766,-176,32766,-202,32766,-227,32766,-252,32765,-277,32765,-302,32765,-327,32765,-352,32764,-377,32764,-403,32764,-428,32763,-453,32763,-478,32763,-503,32762,-528,32762,-553,32761,-579,32761,-604,32760,-629,32760,-654,32759,-679,32759,-704,32758,-729,32758,-754,32757,-780,32757,-805,32756,-830,32755,-855,32755,-880,32754,-905,32753,-930,32753,-955,32752,-981,32751,-1006,32750,-1031,32750,-1056,32749,-1081,32748,-1106,32747,-1131,32746,-1156,32745,-1181,32744,-1207,32743,-1232,32742,-1257,32741,-1282,32740,-1307,32739,-1332,32738,-1357,32737,-1382,32736,-1407,32735,-1433,32734,-1458,32733,-1483,32732,-1508,32731,-1533,32729,-1558,32728,-1583,32727,-1608,32726,-1633,32725,-1659,32723,-1684,32722,-1709,32721,-1734,32719,-1759,32718,-1784,32717,-1809,32715,-1834,32714,-1859,32712,-1884,32711,-1909,32709,-1935,32708,-1960,32706,-1985,32705,-2010,32703,-2035,32702,-2060,32700,-2085,32699,-2110,32697,-2135,32695,-2160,32694,-2185,32692,-2210,32690,-2236,32688,-2261,32687,-2286,32685,-2311,32683,-2336,32681,-2361,32680,-2386,32678,-2411,32676,-2436,32674,-2461,32672,-2486,32670,-2511,32668,-2536,32666,-2561,32664,-2586,32662,-2611,32660,-2637,32658,-2662,32656,-2687,32654,-2712,32652,-2737,32650,-2762,32648,-2787,32646,-2812,32644,-2837,32641,-2862,32639,-2887,32637,-2912,32635,-2937,32632,-2962,32630,-2987,32628,-3012,32625,-3037,32623,-3062,32621,-3087,32618,-3112,32616,-3137,32614,-3162,32611,-3187,32609,-3212,32606,-3237,32604,-3262,32601,-3287,32599,-3312,32596,-3337,32594,-3362,32591,-3387,32588,-3412,32586,-3437,32583,-3462,32580,-3487,32578,-3512,32575,-3537,32572,-3562,32570,-3587,32567,-3612,32564,-3637,32561,-3662,32558,-3687,32556,-3712,32553,-3737,32550,-3762,32547,-3787,32544,-3812,32541,-3837,32538,-3862,32535,-3887,32532,-3912,32529,-3937,32526,-3962,32523,-3987,32520,-4012,32517,-4036,32514,-4061,32511,-4086,32508,-4111,32504,-4136,32501,-4161,32498,-4186,32495,-4211,32492,-4236,32488,-4261,32485,-4286,32482,-4311,32478,-4336,32475,-4360,32472,-4385,32468,-4410,32465,-4435,32462,-4460,32458,-4485,32455,-4510,32451,-4535,32448,-4560,32444,-4585,32441,-4609,32437,-4634,32434,-4659,32430,-4684,32426,-4709,32423,-4734,32419,-4759,32416,-4784,32412,-4808,32408,-4833,32404,-4858,32401,-4883,32397,-4908,32393,-4933,32389,-4958,32386,-4982,32382,-5007,32378,-5032,32374,-5057,32370,-5082,32366,-5107,32362,-5131,32358,-5156,32354,-5181,32350,-5206,32346,-5231,32342,-5255,32338,-5280,32334,-5305,32330,-5330,32326,-5355,32322,-5379,32318,-5404,32314,-5429,32310,-5454,32305,-5479,32301,-5503,32297,-5528,32293,-5553,32288,-5578,32284,-5602,32280,-5627,32275,-5652,32271,-5677,32267,-5701,32262,-5726,32258,-5751,32254,-5776,32249,-5800,32245,-5825,32240,-5850,32236,-5875,32231,-5899,32227,-5924,32222,-5949,32218,-5973,32213,-5998,32208,-6023,32204,-6048,32199,-6072,32194,-6097,32190,-6122,32185,-6146,32180,-6171,32176,-6196,32171,-6220,32166,-6245,32161,-6270,32156,-6294,32152,-6319,32147,-6344,32142,-6368,32137,-6393,32132,-6418,32127,-6442,32122,-6467,32117,-6492,32112,-6516,32107,-6541,32102,-6565,32097,-6590,32092,-6615,32087,-6639,32082,-6664,32077,-6689,32072,-6713,32066,-6738,32061,-6762,32056,-6787,32051,-6812,32046,-6836,32040,-6861,32035,-6885,32030,-6910,32024,-6934,32019,-6959,32014,-6983,32008,-7008,32003,-7033,31998,-7057,31992,-7082,31987,-7106,31981,-7131,31976,-7155,31970,-7180,31965,-7204,31959,-7229,31954,-7253,31948,-7278,31943,-7302,31937,-7327,31931,-7351,31926,-7376,31920,-7400,31914,-7425,31909,-7449,31903,-7474,31897,-7498,31891,-7523,31886,-7547,31880,-7572,31874,-7596,31868,-7620,31862,-7645,31856,-7669,31851,-7694,31845,-7718,31839,-7743,31833,-7767,31827,-7791,31821,-7816,31815,-7840,31809,-7865,31803,-7889,31797,-7913,31791,-7938,31785,-7962,31778,-7987,31772,-8011,31766,-8035,31760,-8060,31754,-8084,31748,-8108,31741,-8133,31735,-8157,31729,-8181,31723,-8206,31716,-8230,31710,-8254,31704,-8279,31697,-8303,31691,-8327,31684,-8352,31678,-8376,31672,-8400,31665,-8425,31659,-8449,31652,-8473,31646,-8497,31639,-8522,31633,-8546,31626,-8570,31619,-8594,31613,-8619,31606,-8643,31600,-8667,31593,-8691,31586,-8716,31580,-8740,31573,-8764,31566,-8788,31559,-8813,31553,-8837,31546,-8861,31539,-8885,31532,-8909,31525,-8933,31518,-8958,31512,-8982,31505,-9006,31498,-9030,31491,-9054,31484,-9078,31477,-9103,31470,-9127,31463,-9151,31456,-9175,31449,-9199,31442,-9223,31435,-9247,31428,-9271,31420,-9296,31413,-9320,31406,-9344,31399,-9368,31392,-9392,31385,-9416,31377,-9440,31370,-9464,31363,-9488,31356,-9512,31348,-9536,31341,-9560,31334,-9584,31326,-9608,31319,-9632,31311,-9656,31304,-9680,31297,-9704,31289,-9728,31282,-9752,31274,-9776,31267,-9800,31259,-9824,31252,-9848,31244,-9872,31236,-9896,31229,-9920,31221,-9944,31214,-9968,31206,-9992,31198,-10016,31191,-10040,31183,-10064,31175,-10088,31167,-10112,31160,-10136,31152,-10160,31144,-10183,31136,-10207,31128,-10231,31121,-10255,31113,-10279,31105,-10303,31097,-10327,31089,-10350,31081,-10374,31073,-10398,31065,-10422,31057,-10446,31049,-10470,31041,-10493,31033,-10517,31025,-10541,31017,-10565,31009,-10589,31001,-10612,30992,-10636,30984,-10660,30976,-10684,30968,-10707,30960,-10731,30951,-10755,30943,-10779,30935,-10802,30927,-10826,30918,-10850,30910,-10874,30902,-10897,30893,-10921,30885,-10945,30876,-10968,30868,-10992,30860,-11016,30851,-11039,30843,-11063,30834,-11087,30826,-11110,30817,-11134,30809,-11158,30800,-11181,30791,-11205,30783,-11228,30774,-11252,30766,-11276,30757,-11299,30748,-11323,30739,-11346,30731,-11370,30722,-11394,30713,-11417,30705,-11441,30696,-11464,30687,-11488,30678,-11511,30669,-11535,30660,-11558,30652,-11582,30643,-11605,30634,-11629,30625,-11652,30616,-11676,30607,-11699,30598,-11723,30589,-11746,30580,-11770,30571,-11793,30562,-11817,30553,-11840,30544,-11863,30535,-11887,30525,-11910,30516,-11934,30507,-11957,30498,-11981,30489,-12004,30480,-12027,30470,-12051,30461,-12074,30452,-12097,30442,-12121,30433,-12144,30424,-12167,30415,-12191,30405,-12214,30396,-12237,30386,-12261,30377,-12284,30368,-12307,30358,-12331,30349,-12354,30339,-12377,30330,-12400,30320,-12424,30311,-12447,30301,-12470,30291,-12493,30282,-12517,30272,-12540,30263,-12563,30253,-12586,30243,-12610,30234,-12633,30224,-12656,30214,-12679,30205,-12702,30195,-12725,30185,-12749,30175,-12772,30165,-12795,30156,-12818,30146,-12841,30136,-12864,30126,-12887,30116,-12910,30106,-12934,30096,-12957,30086,-12980,30076,-13003,30066,-13026,30056,-13049,30046,-13072,30036,-13095,30026,-13118,30016,-13141,30006,-13164,29996,-13187,29986,-13210,29976,-13233,29966,-13256,29955,-13279,29945,-13302,29935,-13325,29925,-13348,29915,-13371,29904,-13394,29894,-13417,29884,-13440,29873,-13463,29863,-13486,29853,-13508,29842,-13531,29832,-13554,29822,-13577,29811,-13600,29801,-13623,29790,-13646,29780,-13668,29769,-13691,29759,-13714,29748,-13737,29738,-13760,29727,-13783,29717,-13805,29706,-13828,29695,-13851,29685,-13874,29674,-13896,29663,-13919,29653,-13942,29642,-13965,29631,-13987,29621,-14010,29610,-14033,29599,-14056,29588,-14078,29577,-14101,29567,-14124,29556,-14146,29545,-14169,29534,-14192,29523,-14214,29512,-14237,29501,-14260,29490,-14282,29479,-14305,29468,-14327,29457,-14350,29446,-14373,29435,-14395,29424,-14418,29413,-14440,29402,-14463,29391,-14485,29380,-14508,29369,-14531,29358,-14553,29346,-14576,29335,-14598,29324,-14621,29313,-14643,29302,-14666,29290,-14688,29279,-14710,29268,-14733,29256,-14755,29245,-14778,29234,-14800,29222,-14823,29211,-14845,29200,-14867,29188,-14890,29177,-14912,29165,-14935,29154,-14957,29142,-14979,29131,-15002,29119,-15024,29108,-15046,29096,-15069,29085,-15091,29073,-15113,29062,-15136,29050,-15158,29038,-15180,29027,-15202,29015,-15225,29003,-15247,28992,-15269,28980,-15291,28968,-15314,28956,-15336,28945,-15358,28933,-15380,28921,-15402,28909,-15425,28897,-15447,28886,-15469,28874,-15491,28862,-15513,28850,-15535,28838,-15557,28826,-15580,28814,-15602,28802,-15624,28790,-15646,28778,-15668,28766,-15690,28754,-15712,28742,-15734,28730,-15756,28718,-15778,28706,-15800,28694,-15822,28681,-15844,28669,-15866,28657,-15888,28645,-15910,28633,-15932,28620,-15954,28608,-15976,28596,-15998,28584,-16020,28571,-16042,28559,-16064,28547,-16086,28534,-16108,28522,-16129,28510,-16151,28497,-16173,28485,-16195,28472,-16217,28460,-16239,28447,-16261,28435,-16282,28423,-16304,28410,-16326,28397,-16348,28385,-16369,28372,-16391,28360,-16413,28347,-16435,28335,-16456,28322,-16478,28309,-16500,28297,-16522,28284,-16543,28271,-16565,28259,-16587,28246,-16608,28233,-16630,28220,-16652,28208,-16673,28195,-16695,28182,-16717,28169,-16738,28156,-16760,28143,-16781,28131,-16803,28118,-16825,28105,-16846,28092,-16868,28079,-16889,28066,-16911,28053,-16932,28040,-16954,28027,-16975,28014,-16997,28001,-17018,27988,-17040,27975,-17061,27962,-17083,27948,-17104,27935,-17125,27922,-17147,27909,-17168,27896,-17190,27883,-17211,27869,-17233,27856,-17254,27843,-17275,27830,-17297,27816,-17318,27803,-17339,27790,-17361,27777,-17382,27763,-17403,27750,-17424,27736,-17446,27723,-17467,27710,-17488,27696,-17510,27683,-17531,27669,-17552,27656,-17573,27642,-17594,27629,-17616,27615,-17637,27602,-17658,27588,-17679,27575,-17700,27561,-17721,27548,-17743,27534,-17764,27520,-17785,27507,-17806,27493,-17827,27479,-17848,27466,-17869,27452,-17890,27438,-17911,27424,-17932,27411,-17953,27397,-17974,27383,-17995,27369,-18016,27355,-18037,27342,-18058,27328,-18079,27314,-18100,27300,-18121,27286,-18142,27272,-18163,27258,-18184,27244,-18205,27230,-18226,27216,-18247,27202,-18268,27188,-18288,27174,-18309,27160,-18330,27146,-18351,27132,-18372,27118,-18393,27104,-18413,27090,-18434,27076,-18455,27061,-18476,27047,-18496,27033,-18517,27019,-18538,27005,-18559,26990,-18579,26976,-18600,26962,-18621,26948,-18641,26933,-18662,26919,-18683,26905,-18703,26890,-18724,26876,-18745,26861,-18765,26847,-18786,26833,-18806,26818,-18827,26804,-18847,26789,-18868,26775,-18889,26760,-18909,26746,-18930,26731,-18950,26717,-18971,26702,-18991,26688,-19012,26673,-19032,26658,-19052,26644,-19073,26629,-19093,26615,-19114,26600,-19134,26585,-19155,26570,-19175,26556,-19195,26541,-19216,26526,-19236,26512,-19256,26497,-19277,26482,-19297,26467,-19317,26452,-19338,26437,-19358,26423,-19378,26408,-19398,26393,-19419,26378,-19439,26363,-19459,26348,-19479,26333,-19500,26318,-19520,26303,-19540,26288,-19560,26273,-19580,26258,-19600,26243,-19621,26228,-19641,26213,-19661,26198,-19681,26183,-19701,26168,-19721,26153,-19741,26137,-19761,26122,-19781,26107,-19801,26092,-19821,26077,-19841,26061,-19861,26046,-19881,26031,-19901,26016,-19921,26000,-19941,25985,-19961,25970,-19981,25954,-20001,25939,-20021,25924,-20041,25908,-20061,25893,-20080,25878,-20100,25862,-20120,25847,-20140,25831,-20160,25816,-20180,25800,-20199,25785,-20219,25769,-20239,25754,-20259,25738,-20278,25723,-20298,25707,-20318,25691,-20338,25676,-20357,25660,-20377,25645,-20397,25629,-20416,25613,-20436,25598,-20456,25582,-20475,25566,-20495,25550,-20514,25535,-20534,25519,-20554,25503,-20573,25487,-20593,25472,-20612,25456,-20632,25440,-20651,25424,-20671,25408,-20690,25392,-20710,25376,-20729,25361,-20749,25345,-20768,25329,-20788,25313,-20807,25297,-20826,25281,-20846,25265,-20865,25249,-20885,25233,-20904,25217,-20923,25201,-20943,25185,-20962,25169,-20981,25152,-21001,25136,-21020,25120,-21039,25104,-21058,25088,-21078,25072,-21097,25056,-21116,25039,-21135,25023,-21155,25007,-21174,24991,-21193,24974,-21212,24958,-21231,24942,-21250,24926,-21269,24909,-21289,24893,-21308,24877,-21327,24860,-21346,24844,-21365,24827,-21384,24811,-21403,24795,-21422,24778,-21441,24762,-21460,24745,-21479,24729,-21498,24712,-21517,24696,-21536,24679,-21555,24663,-21574,24646,-21593,24630,-21612,24613,-21630,24596,-21649,24580,-21668,24563,-21687,24546,-21706,24530,-21725,24513,-21744,24496,-21762,24480,-21781,24463,-21800,24446,-21819,24430,-21837,24413,-21856,24396,-21875,24379,-21894,24362,-21912,24346,-21931,24329,-21950,24312,-21968,24295,-21987,24278,-22005,24261,-22024,24244,-22043,24228,-22061,24211,-22080,24194,-22098,24177,-22117,24160,-22136,24143,-22154,24126,-22173,24109,-22191,24092,-22210,24075,-22228,24058,-22246,24041,-22265,24023,-22283,24006,-22302,23989,-22320,23972,-22339,23955,-22357,23938,-22375,23921,-22394,23903,-22412,23886,-22430,23869,-22449,23852,-22467,23835,-22485,23817,-22504,23800,-22522,23783,-22540,23766,-22558,23748,-22576,23731,-22595,23714,-22613,23696,-22631,23679,-22649,23661,-22667,23644,-22686,23627,-22704,23609,-22722,23592,-22740,23574,-22758,23557,-22776,23539,-22794,23522,-22812,23504,-22830,23487,-22848,23469,-22866,23452,-22884,23434,-22902,23417,-22920,23399,-22938,23382,-22956,23364,-22974,23346,-22992,23329,-23010,23311,-23028,23293,-23046,23276,-23063,23258,-23081,23240,-23099,23223,-23117,23205,-23135,23187,-23152,23169,-23170,23151,-23188,23134,-23206,23116,-23224,23098,-23241,23080,-23259,23062,-23277,23045,-23294,23027,-23312,23009,-23330,22991,-23347,22973,-23365,22955,-23383,22937,-23400,22919,-23418,22901,-23435,22883,-23453,22865,-23470,22847,-23488,22829,-23505,22811,-23523,22793,-23540,22775,-23558,22757,-23575,22739,-23593,22721,-23610,22703,-23628,22685,-23645,22666,-23662,22648,-23680,22630,-23697,22612,-23715,22594,-23732,22575,-23749,22557,-23767,22539,-23784,22521,-23801,22503,-23818,22484,-23836,22466,-23853,22448,-23870,22429,-23887,22411,-23904,22393,-23922,22374,-23939,22356,-23956,22338,-23973,22319,-23990,22301,-24007,22282,-24024,22264,-24042,22245,-24059,22227,-24076,22209,-24093,22190,-24110,22172,-24127,22153,-24144,22135,-24161,22116,-24178,22097,-24195,22079,-24212,22060,-24229,22042,-24245,22023,-24262,22004,-24279,21986,-24296,21967,-24313,21949,-24330,21930,-24347,21911,-24363,21893,-24380,21874,-24397,21855,-24414,21836,-24431,21818,-24447,21799,-24464,21780,-24481,21761,-24497,21743,-24514,21724,-24531,21705,-24547,21686,-24564,21667,-24581,21648,-24597,21629,-24614,21611,-24631,21592,-24647,21573,-24664,21554,-24680,21535,-24697,21516,-24713,21497,-24730,21478,-24746,21459,-24763,21440,-24779,21421,-24796,21402,-24812,21383,-24828,21364,-24845,21345,-24861,21326,-24878,21307,-24894,21288,-24910,21268,-24927,21249,-24943,21230,-24959,21211,-24975,21192,-24992,21173,-25008,21154,-25024,21134,-25040,21115,-25057,21096,-25073,21077,-25089,21057,-25105,21038,-25121,21019,-25137,21000,-25153,20980,-25170,20961,-25186,20942,-25202,20922,-25218,20903,-25234,20884,-25250,20864,-25266,20845,-25282,20825,-25298,20806,-25314,20787,-25330,20767,-25346,20748,-25362,20728,-25377,20709,-25393,20689,-25409,20670,-25425,20650,-25441,20631,-25457,20611,-25473,20592,-25488,20572,-25504,20553,-25520,20533,-25536,20513,-25551,20494,-25567,20474,-25583,20455,-25599,20435,-25614,20415,-25630,20396,-25646,20376,-25661,20356,-25677,20337,-25692,20317,-25708,20297,-25724,20277,-25739,20258,-25755,20238,-25770,20218,-25786,20198,-25801,20179,-25817,20159,-25832,20139,-25848,20119,-25863,20099,-25879,20079,-25894,20060,-25909,20040,-25925,20020,-25940,20000,-25955,19980,-25971,19960,-25986,19940,-26001,19920,-26017,19900,-26032,19880,-26047,19860,-26062,19840,-26078,19820,-26093,19800,-26108,19780,-26123,19760,-26138,19740,-26154,19720,-26169,19700,-26184,19680,-26199,19660,-26214,19640,-26229,19620,-26244,19599,-26259,19579,-26274,19559,-26289,19539,-26304,19519,-26319,19499,-26334,19478,-26349,19458,-26364,19438,-26379,19418,-26394,19397,-26409,19377,-26424,19357,-26438,19337,-26453,19316,-26468,19296,-26483,19276,-26498,19255,-26513,19235,-26527,19215,-26542,19194,-26557,19174,-26571,19154,-26586,19133,-26601,19113,-26616,19092,-26630,19072,-26645,19051,-26659,19031,-26674,19011,-26689,18990,-26703,18970,-26718,18949,-26732,18929,-26747,18908,-26761,18888,-26776,18867,-26790,18846,-26805,18826,-26819,18805,-26834,18785,-26848,18764,-26862,18744,-26877,18723,-26891,18702,-26906,18682,-26920,18661,-26934,18640,-26949,18620,-26963,18599,-26977,18578,-26991,18558,-27006,18537,-27020,18516,-27034,18495,-27048,18475,-27062,18454,-27077,18433,-27091,18412,-27105,18392,-27119,18371,-27133,18350,-27147,18329,-27161,18308,-27175,18287,-27189,18267,-27203,18246,-27217,18225,-27231,18204,-27245,18183,-27259,18162,-27273,18141,-27287,18120,-27301,18099,-27315,18078,-27329,18057,-27343,18036,-27356,18015,-27370,17994,-27384,17973,-27398,17952,-27412,17931,-27425,17910,-27439,17889,-27453,17868,-27467,17847,-27480,17826,-27494,17805,-27508,17784,-27521,17763,-27535,17742,-27549,17720,-27562,17699,-27576,17678,-27589,17657,-27603,17636,-27616,17615,-27630,17593,-27643,17572,-27657,17551,-27670,17530,-27684,17509,-27697,17487,-27711,17466,-27724,17445,-27737,17423,-27751,17402,-27764,17381,-27778,17360,-27791,17338,-27804,17317,-27817,17296,-27831,17274,-27844,17253,-27857,17232,-27870,17210,-27884,17189,-27897,17167,-27910,17146,-27923,17124,-27936,17103,-27949,17082,-27963,17060,-27976,17039,-27989,17017,-28002,16996,-28015,16974,-28028,16953,-28041,16931,-28054,16910,-28067,16888,-28080,16867,-28093,16845,-28106,16824,-28119,16802,-28132,16780,-28144,16759,-28157,16737,-28170,16716,-28183,16694,-28196,16672,-28209,16651,-28221,16629,-28234,16607,-28247,16586,-28260,16564,-28272,16542,-28285,16521,-28298,16499,-28310,16477,-28323,16455,-28336,16434,-28348,16412,-28361,16390,-28373,16368,-28386,16347,-28398,16325,-28411,16303,-28424,16281,-28436,16260,-28448,16238,-28461,16216,-28473,16194,-28486,16172,-28498,16150,-28511,16128,-28523,16107,-28535,16085,-28548,16063,-28560,16041,-28572,16019,-28585,15997,-28597,15975,-28609,15953,-28621,15931,-28634,15909,-28646,15887,-28658,15865,-28670,15843,-28682,15821,-28695,15799,-28707,15777,-28719,15755,-28731,15733,-28743,15711,-28755,15689,-28767,15667,-28779,15645,-28791,15623,-28803,15601,-28815,15579,-28827,15556,-28839,15534,-28851,15512,-28863,15490,-28875,15468,-28887,15446,-28898,15424,-28910,15401,-28922,15379,-28934,15357,-28946,15335,-28957,15313,-28969,15290,-28981,15268,-28993,15246,-29004,15224,-29016,15201,-29028,15179,-29039,15157,-29051,15135,-29063,15112,-29074,15090,-29086,15068,-29097,15045,-29109,15023,-29120,15001,-29132,14978,-29143,14956,-29155,14934,-29166,14911,-29178,14889,-29189,14866,-29201,14844,-29212,14822,-29223,14799,-29235,14777,-29246,14754,-29257,14732,-29269,14709,-29280,14687,-29291,14665,-29303,14642,-29314,14620,-29325,14597,-29336,14575,-29347,14552,-29359,14530,-29370,14507,-29381,14484,-29392,14462,-29403,14439,-29414,14417,-29425,14394,-29436,14372,-29447,14349,-29458,14326,-29469,14304,-29480,14281,-29491,14259,-29502,14236,-29513,14213,-29524,14191,-29535,14168,-29546,14145,-29557,14123,-29568,14100,-29578,14077,-29589,14055,-29600,14032,-29611,14009,-29622,13986,-29632,13964,-29643,13941,-29654,13918,-29664,13895,-29675,13873,-29686,13850,-29696,13827,-29707,13804,-29718,13782,-29728,13759,-29739,13736,-29749,13713,-29760,13690,-29770,13667,-29781,13645,-29791,13622,-29802,13599,-29812,13576,-29823,13553,-29833,13530,-29843,13507,-29854,13485,-29864,13462,-29874,13439,-29885,13416,-29895,13393,-29905,13370,-29916,13347,-29926,13324,-29936,13301,-29946,13278,-29956,13255,-29967,13232,-29977,13209,-29987,13186,-29997,13163,-30007,13140,-30017,13117,-30027,13094,-30037,13071,-30047,13048,-30057,13025,-30067,13002,-30077,12979,-30087,12956,-30097,12933,-30107,12909,-30117,12886,-30127,12863,-30137,12840,-30147,12817,-30157,12794,-30166,12771,-30176,12748,-30186,12724,-30196,12701,-30206,12678,-30215,12655,-30225,12632,-30235,12609,-30244,12585,-30254,12562,-30264,12539,-30273,12516,-30283,12492,-30292,12469,-30302,12446,-30312,12423,-30321,12399,-30331,12376,-30340,12353,-30350,12330,-30359,12306,-30369,12283,-30378,12260,-30387,12236,-30397,12213,-30406,12190,-30416,12166,-30425,12143,-30434,12120,-30443,12096,-30453,12073,-30462,12050,-30471,12026,-30481,12003,-30490,11980,-30499,11956,-30508,11933,-30517,11909,-30526,11886,-30536,11862,-30545,11839,-30554,11816,-30563,11792,-30572,11769,-30581,11745,-30590,11722,-30599,11698,-30608,11675,-30617,11651,-30626,11628,-30635,11604,-30644,11581,-30653,11557,-30661,11534,-30670,11510,-30679,11487,-30688,11463,-30697,11440,-30706,11416,-30714,11393,-30723,11369,-30732,11345,-30740,11322,-30749,11298,-30758,11275,-30767,11251,-30775,11227,-30784,11204,-30792,11180,-30801,11157,-30810,11133,-30818,11109,-30827,11086,-30835,11062,-30844,11038,-30852,11015,-30861,10991,-30869,10967,-30877,10944,-30886,10920,-30894,10896,-30903,10873,-30911,10849,-30919,10825,-30928,10801,-30936,10778,-30944,10754,-30952,10730,-30961,10706,-30969,10683,-30977,10659,-30985,10635,-30993,10611,-31002,10588,-31010,10564,-31018,10540,-31026,10516,-31034,10492,-31042,10469,-31050,10445,-31058,10421,-31066,10397,-31074,10373,-31082,10349,-31090,10326,-31098,10302,-31106,10278,-31114,10254,-31122,10230,-31129,10206,-31137,10182,-31145,10159,-31153,10135,-31161,10111,-31168,10087,-31176,10063,-31184,10039,-31192,10015,-31199,9991,-31207,9967,-31215,9943,-31222,9919,-31230,9895,-31237,9871,-31245,9847,-31253,9823,-31260,9799,-31268,9775,-31275,9751,-31283,9727,-31290,9703,-31298,9679,-31305,9655,-31312,9631,-31320,9607,-31327,9583,-31335,9559,-31342,9535,-31349,9511,-31357,9487,-31364,9463,-31371,9439,-31378,9415,-31386,9391,-31393,9367,-31400,9343,-31407,9319,-31414,9295,-31421,9270,-31429,9246,-31436,9222,-31443,9198,-31450,9174,-31457,9150,-31464,9126,-31471,9102,-31478,9077,-31485,9053,-31492,9029,-31499,9005,-31506,8981,-31513,8957,-31519,8932,-31526,8908,-31533,8884,-31540,8860,-31547,8836,-31554,8812,-31560,8787,-31567,8763,-31574,8739,-31581,8715,-31587,8690,-31594,8666,-31601,8642,-31607,8618,-31614,8593,-31620,8569,-31627,8545,-31634,8521,-31640,8496,-31647,8472,-31653,8448,-31660,8424,-31666,8399,-31673,8375,-31679,8351,-31685,8326,-31692,8302,-31698,8278,-31705,8253,-31711,8229,-31717,8205,-31724,8180,-31730,8156,-31736,8132,-31742,8107,-31749,8083,-31755,8059,-31761,8034,-31767,8010,-31773,7986,-31779,7961,-31786,7937,-31792,7912,-31798,7888,-31804,7864,-31810,7839,-31816,7815,-31822,7790,-31828,7766,-31834,7742,-31840,7717,-31846,7693,-31852,7668,-31857,7644,-31863,7619,-31869,7595,-31875,7571,-31881,7546,-31887,7522,-31892,7497,-31898,7473,-31904,7448,-31910,7424,-31915,7399,-31921,7375,-31927,7350,-31932,7326,-31938,7301,-31944,7277,-31949,7252,-31955,7228,-31960,7203,-31966,7179,-31971,7154,-31977,7130,-31982,7105,-31988,7081,-31993,7056,-31999,7032,-32004,7007,-32009,6982,-32015,6958,-32020,6933,-32025,6909,-32031,6884,-32036,6860,-32041,6835,-32047,6811,-32052,6786,-32057,6761,-32062,6737,-32067,6712,-32073,6688,-32078,6663,-32083,6638,-32088,6614,-32093,6589,-32098,6564,-32103,6540,-32108,6515,-32113,6491,-32118,6466,-32123,6441,-32128,6417,-32133,6392,-32138,6367,-32143,6343,-32148,6318,-32153,6293,-32157,6269,-32162,6244,-32167,6219,-32172,6195,-32177,6170,-32181,6145,-32186,6121,-32191,6096,-32195,6071,-32200,6047,-32205,6022,-32209,5997,-32214,5972,-32219,5948,-32223,5923,-32228,5898,-32232,5874,-32237,5849,-32241,5824,-32246,5799,-32250,5775,-32255,5750,-32259,5725,-32263,5700,-32268,5676,-32272,5651,-32276,5626,-32281,5601,-32285,5577,-32289,5552,-32294,5527,-32298,5502,-32302,5478,-32306,5453,-32311,5428,-32315,5403,-32319,5378,-32323,5354,-32327,5329,-32331,5304,-32335,5279,-32339,5254,-32343,5230,-32347,5205,-32351,5180,-32355,5155,-32359,5130,-32363,5106,-32367,5081,-32371,5056,-32375,5031,-32379,5006,-32383,4981,-32387,4957,-32390,4932,-32394,4907,-32398,4882,-32402,4857,-32405,4832,-32409,4807,-32413,4783,-32417,4758,-32420,4733,-32424,4708,-32427,4683,-32431,4658,-32435,4633,-32438,4608,-32442,4584,-32445,4559,-32449,4534,-32452,4509,-32456,4484,-32459,4459,-32463,4434,-32466,4409,-32469,4384,-32473,4359,-32476,4335,-32479,4310,-32483,4285,-32486,4260,-32489,4235,-32493,4210,-32496,4185,-32499,4160,-32502,4135,-32505,4110,-32509,4085,-32512,4060,-32515,4035,-32518,4011,-32521,3986,-32524,3961,-32527,3936,-32530,3911,-32533,3886,-32536,3861,-32539,3836,-32542,3811,-32545,3786,-32548,3761,-32551,3736,-32554,3711,-32557,3686,-32559,3661,-32562,3636,-32565,3611,-32568,3586,-32571,3561,-32573,3536,-32576,3511,-32579,3486,-32581,3461,-32584,3436,-32587,3411,-32589,3386,-32592,3361,-32595,3336,-32597,3311,-32600,3286,-32602,3261,-32605,3236,-32607,3211,-32610,3186,-32612,3161,-32615,3136,-32617,3111,-32619,3086,-32622,3061,-32624,3036,-32626,3011,-32629,2986,-32631,2961,-32633,2936,-32636,2911,-32638,2886,-32640,2861,-32642,2836,-32645,2811,-32647,2786,-32649,2761,-32651,2736,-32653,2711,-32655,2686,-32657,2661,-32659,2636,-32661,2610,-32663,2585,-32665,2560,-32667,2535,-32669,2510,-32671,2485,-32673,2460,-32675,2435,-32677,2410,-32679,2385,-32681,2360,-32682,2335,-32684,2310,-32686,2285,-32688,2260,-32689,2235,-32691,2209,-32693,2184,-32695,2159,-32696,2134,-32698,2109,-32700,2084,-32701,2059,-32703,2034,-32704,2009,-32706,1984,-32707,1959,-32709,1934,-32710,1908,-32712,1883,-32713,1858,-32715,1833,-32716,1808,-32718,1783,-32719,1758,-32720,1733,-32722,1708,-32723,1683,-32724,1658,-32726,1632,-32727,1607,-32728,1582,-32729,1557,-32730,1532,-32732,1507,-32733,1482,-32734,1457,-32735,1432,-32736,1406,-32737,1381,-32738,1356,-32739,1331,-32740,1306,-32741,1281,-32742,1256,-32743,1231,-32744,1206,-32745,1180,-32746,1155,-32747,1130,-32748,1105,-32749,1080,-32750,1055,-32751,1030,-32751,1005,-32752,980,-32753,954,-32754,929,-32754,904,-32755,879,-32756,854,-32756,829,-32757,804,-32758,779,-32758,753,-32759,728,-32759,703,-32760,678,-32760,653,-32761,628,-32761,603,-32762,578,-32762,552,-32763,527,-32763,502,-32764,477,-32764,452,-32764,427,-32765,402,-32765,376,-32765,351,-32766,326,-32766,301,-32766,276,-32766,251,-32767,226,-32767,201,-32767,175,-32767,150,-32767,125,-32767,100,-32767,75,-32767,50,-32767,25,-32767,0,-32767,-26,-32767,-51,-32767,-76,-32767,-101,-32767,-126,-32767,-151,-32767,-176,-32767,-202,-32767,-227,-32767,-252,-32767,-277,-32766,-302,-32766,-327,-32766,-352,-32766,-377,-32765,-403,-32765,-428,-32765,-453,-32764,-478,-32764,-503,-32764,-528,-32763,-553,-32763,-579,-32762,-604,-32762,-629,-32761,-654,-32761,-679,-32760,-704,-32760,-729,-32759,-754,-32759,-780,-32758,-805,-32758,-830,-32757,-855,-32756,-880,-32756,-905,-32755,-930,-32754,-955,-32754,-981,-32753,-1006,-32752,-1031,-32751,-1056,-32751,-1081,-32750,-1106,-32749,-1131,-32748,-1156,-32747,-1181,-32746,-1207,-32745,-1232,-32744,-1257,-32743,-1282,-32742,-1307,-32741,-1332,-32740,-1357,-32739,-1382,-32738,-1407,-32737,-1433,-32736,-1458,-32735,-1483,-32734,-1508,-32733,-1533,-32732,-1558,-32730,-1583,-32729,-1608,-32728,-1633,-32727,-1659,-32726,-1684,-32724,-1709,-32723,-1734,-32722,-1759,-32720,-1784,-32719,-1809,-32718,-1834,-32716,-1859,-32715,-1884,-32713,-1909,-32712,-1935,-32710,-1960,-32709,-1985,-32707,-2010,-32706,-2035,-32704,-2060,-32703,-2085,-32701,-2110,-32700,-2135,-32698,-2160,-32696,-2185,-32695,-2210,-32693,-2236,-32691,-2261,-32689,-2286,-32688,-2311,-32686,-2336,-32684,-2361,-32682,-2386,-32681,-2411,-32679,-2436,-32677,-2461,-32675,-2486,-32673,-2511,-32671,-2536,-32669,-2561,-32667,-2586,-32665,-2611,-32663,-2637,-32661,-2662,-32659,-2687,-32657,-2712,-32655,-2737,-32653,-2762,-32651,-2787,-32649,-2812,-32647,-2837,-32645,-2862,-32642,-2887,-32640,-2912,-32638,-2937,-32636,-2962,-32633,-2987,-32631,-3012,-32629,-3037,-32626,-3062,-32624,-3087,-32622,-3112,-32619,-3137,-32617,-3162,-32615,-3187,-32612,-3212,-32610,-3237,-32607,-3262,-32605,-3287,-32602,-3312,-32600,-3337,-32597,-3362,-32595,-3387,-32592,-3412,-32589,-3437,-32587,-3462,-32584,-3487,-32581,-3512,-32579,-3537,-32576,-3562,-32573,-3587,-32571,-3612,-32568,-3637,-32565,-3662,-32562,-3687,-32559,-3712,-32557,-3737,-32554,-3762,-32551,-3787,-32548,-3812,-32545,-3837,-32542,-3862,-32539,-3887,-32536,-3912,-32533,-3937,-32530,-3962,-32527,-3987,-32524,-4012,-32521,-4036,-32518,-4061,-32515,-4086,-32512,-4111,-32509,-4136,-32505,-4161,-32502,-4186,-32499,-4211,-32496,-4236,-32493,-4261,-32489,-4286,-32486,-4311,-32483,-4336,-32479,-4360,-32476,-4385,-32473,-4410,-32469,-4435,-32466,-4460,-32463,-4485,-32459,-4510,-32456,-4535,-32452,-4560,-32449,-4585,-32445,-4609,-32442,-4634,-32438,-4659,-32435,-4684,-32431,-4709,-32427,-4734,-32424,-4759,-32420,-4784,-32417,-4808,-32413,-4833,-32409,-4858,-32405,-4883,-32402,-4908,-32398,-4933,-32394,-4958,-32390,-4982,-32387,-5007,-32383,-5032,-32379,-5057,-32375,-5082,-32371,-5107,-32367,-5131,-32363,-5156,-32359,-5181,-32355,-5206,-32351,-5231,-32347,-5255,-32343,-5280,-32339,-5305,-32335,-5330,-32331,-5355,-32327,-5379,-32323,-5404,-32319,-5429,-32315,-5454,-32311,-5479,-32306,-5503,-32302,-5528,-32298,-5553,-32294,-5578,-32289,-5602,-32285,-5627,-32281,-5652,-32276,-5677,-32272,-5701,-32268,-5726,-32263,-5751,-32259,-5776,-32255,-5800,-32250,-5825,-32246,-5850,-32241,-5875,-32237,-5899,-32232,-5924,-32228,-5949,-32223,-5973,-32219,-5998,-32214,-6023,-32209,-6048,-32205,-6072,-32200,-6097,-32195,-6122,-32191,-6146,-32186,-6171,-32181,-6196,-32177,-6220,-32172,-6245,-32167,-6270,-32162,-6294,-32157,-6319,-32153,-6344,-32148,-6368,-32143,-6393,-32138,-6418,-32133,-6442,-32128,-6467,-32123,-6492,-32118,-6516,-32113,-6541,-32108,-6565,-32103,-6590,-32098,-6615,-32093,-6639,-32088,-6664,-32083,-6689,-32078,-6713,-32073,-6738,-32067,-6762,-32062,-6787,-32057,-6812,-32052,-6836,-32047,-6861,-32041,-6885,-32036,-6910,-32031,-6934,-32025,-6959,-32020,-6983,-32015,-7008,-32009,-7033,-32004,-7057,-31999,-7082,-31993,-7106,-31988,-7131,-31982,-7155,-31977,-7180,-31971,-7204,-31966,-7229,-31960,-7253,-31955,-7278,-31949,-7302,-31944,-7327,-31938,-7351,-31932,-7376,-31927,-7400,-31921,-7425,-31915,-7449,-31910,-7474,-31904,-7498,-31898,-7523,-31892,-7547,-31887,-7572,-31881,-7596,-31875,-7620,-31869,-7645,-31863,-7669,-31857,-7694,-31852,-7718,-31846,-7743,-31840,-7767,-31834,-7791,-31828,-7816,-31822,-7840,-31816,-7865,-31810,-7889,-31804,-7913,-31798,-7938,-31792,-7962,-31786,-7987,-31779,-8011,-31773,-8035,-31767,-8060,-31761,-8084,-31755,-8108,-31749,-8133,-31742,-8157,-31736,-8181,-31730,-8206,-31724,-8230,-31717,-8254,-31711,-8279,-31705,-8303,-31698,-8327,-31692,-8352,-31685,-8376,-31679,-8400,-31673,-8425,-31666,-8449,-31660,-8473,-31653,-8497,-31647,-8522,-31640,-8546,-31634,-8570,-31627,-8594,-31620,-8619,-31614,-8643,-31607,-8667,-31601,-8691,-31594,-8716,-31587,-8740,-31581,-8764,-31574,-8788,-31567,-8813,-31560,-8837,-31554,-8861,-31547,-8885,-31540,-8909,-31533,-8933,-31526,-8958,-31519,-8982,-31513,-9006,-31506,-9030,-31499,-9054,-31492,-9078,-31485,-9103,-31478,-9127,-31471,-9151,-31464,-9175,-31457,-9199,-31450,-9223,-31443,-9247,-31436,-9271,-31429,-9296,-31421,-9320,-31414,-9344,-31407,-9368,-31400,-9392,-31393,-9416,-31386,-9440,-31378,-9464,-31371,-9488,-31364,-9512,-31357,-9536,-31349,-9560,-31342,-9584,-31335,-9608,-31327,-9632,-31320,-9656,-31312,-9680,-31305,-9704,-31298,-9728,-31290,-9752,-31283,-9776,-31275,-9800,-31268,-9824,-31260,-9848,-31253,-9872,-31245,-9896,-31237,-9920,-31230,-9944,-31222,-9968,-31215,-9992,-31207,-10016,-31199,-10040,-31192,-10064,-31184,-10088,-31176,-10112,-31168,-10136,-31161,-10160,-31153,-10183,-31145,-10207,-31137,-10231,-31129,-10255,-31122,-10279,-31114,-10303,-31106,-10327,-31098,-10350,-31090,-10374,-31082,-10398,-31074,-10422,-31066,-10446,-31058,-10470,-31050,-10493,-31042,-10517,-31034,-10541,-31026,-10565,-31018,-10589,-31010,-10612,-31002,-10636,-30993,-10660,-30985,-10684,-30977,-10707,-30969,-10731,-30961,-10755,-30952,-10779,-30944,-10802,-30936,-10826,-30928,-10850,-30919,-10874,-30911,-10897,-30903,-10921,-30894,-10945,-30886,-10968,-30877,-10992,-30869,-11016,-30861,-11039,-30852,-11063,-30844,-11087,-30835,-11110,-30827,-11134,-30818,-11158,-30810,-11181,-30801,-11205,-30792,-11228,-30784,-11252,-30775,-11276,-30767,-11299,-30758,-11323,-30749,-11346,-30740,-11370,-30732,-11394,-30723,-11417,-30714,-11441,-30706,-11464,-30697,-11488,-30688,-11511,-30679,-11535,-30670,-11558,-30661,-11582,-30653,-11605,-30644,-11629,-30635,-11652,-30626,-11676,-30617,-11699,-30608,-11723,-30599,-11746,-30590,-11770,-30581,-11793,-30572,-11817,-30563,-11840,-30554,-11863,-30545,-11887,-30536,-11910,-30526,-11934,-30517,-11957,-30508,-11981,-30499,-12004,-30490,-12027,-30481,-12051,-30471,-12074,-30462,-12097,-30453,-12121,-30443,-12144,-30434,-12167,-30425,-12191,-30416,-12214,-30406,-12237,-30397,-12261,-30387,-12284,-30378,-12307,-30369,-12331,-30359,-12354,-30350,-12377,-30340,-12400,-30331,-12424,-30321,-12447,-30312,-12470,-30302,-12493,-30292,-12517,-30283,-12540,-30273,-12563,-30264,-12586,-30254,-12610,-30244,-12633,-30235,-12656,-30225,-12679,-30215,-12702,-30206,-12725,-30196,-12749,-30186,-12772,-30176,-12795,-30166,-12818,-30157,-12841,-30147,-12864,-30137,-12887,-30127,-12910,-30117,-12934,-30107,-12957,-30097,-12980,-30087,-13003,-30077,-13026,-30067,-13049,-30057,-13072,-30047,-13095,-30037,-13118,-30027,-13141,-30017,-13164,-30007,-13187,-29997,-13210,-29987,-13233,-29977,-13256,-29967,-13279,-29956,-13302,-29946,-13325,-29936,-13348,-29926,-13371,-29916,-13394,-29905,-13417,-29895,-13440,-29885,-13463,-29874,-13486,-29864,-13508,-29854,-13531,-29843,-13554,-29833,-13577,-29823,-13600,-29812,-13623,-29802,-13646,-29791,-13668,-29781,-13691,-29770,-13714,-29760,-13737,-29749,-13760,-29739,-13783,-29728,-13805,-29718,-13828,-29707,-13851,-29696,-13874,-29686,-13896,-29675,-13919,-29664,-13942,-29654,-13965,-29643,-13987,-29632,-14010,-29622,-14033,-29611,-14056,-29600,-14078,-29589,-14101,-29578,-14124,-29568,-14146,-29557,-14169,-29546,-14192,-29535,-14214,-29524,-14237,-29513,-14260,-29502,-14282,-29491,-14305,-29480,-14327,-29469,-14350,-29458,-14373,-29447,-14395,-29436,-14418,-29425,-14440,-29414,-14463,-29403,-14485,-29392,-14508,-29381,-14531,-29370,-14553,-29359,-14576,-29347,-14598,-29336,-14621,-29325,-14643,-29314,-14666,-29303,-14688,-29291,-14710,-29280,-14733,-29269,-14755,-29257,-14778,-29246,-14800,-29235,-14823,-29223,-14845,-29212,-14867,-29201,-14890,-29189,-14912,-29178,-14935,-29166,-14957,-29155,-14979,-29143,-15002,-29132,-15024,-29120,-15046,-29109,-15069,-29097,-15091,-29086,-15113,-29074,-15136,-29063,-15158,-29051,-15180,-29039,-15202,-29028,-15225,-29016,-15247,-29004,-15269,-28993,-15291,-28981,-15314,-28969,-15336,-28957,-15358,-28946,-15380,-28934,-15402,-28922,-15425,-28910,-15447,-28898,-15469,-28887,-15491,-28875,-15513,-28863,-15535,-28851,-15557,-28839,-15580,-28827,-15602,-28815,-15624,-28803,-15646,-28791,-15668,-28779,-15690,-28767,-15712,-28755,-15734,-28743,-15756,-28731,-15778,-28719,-15800,-28707,-15822,-28695,-15844,-28682,-15866,-28670,-15888,-28658,-15910,-28646,-15932,-28634,-15954,-28621,-15976,-28609,-15998,-28597,-16020,-28585,-16042,-28572,-16064,-28560,-16086,-28548,-16108,-28535,-16129,-28523,-16151,-28511,-16173,-28498,-16195,-28486,-16217,-28473,-16239,-28461,-16261,-28448,-16282,-28436,-16304,-28424,-16326,-28411,-16348,-28398,-16369,-28386,-16391,-28373,-16413,-28361,-16435,-28348,-16456,-28336,-16478,-28323,-16500,-28310,-16522,-28298,-16543,-28285,-16565,-28272,-16587,-28260,-16608,-28247,-16630,-28234,-16652,-28221,-16673,-28209,-16695,-28196,-16717,-28183,-16738,-28170,-16760,-28157,-16781,-28144,-16803,-28132,-16825,-28119,-16846,-28106,-16868,-28093,-16889,-28080,-16911,-28067,-16932,-28054,-16954,-28041,-16975,-28028,-16997,-28015,-17018,-28002,-17040,-27989,-17061,-27976,-17083,-27963,-17104,-27949,-17125,-27936,-17147,-27923,-17168,-27910,-17190,-27897,-17211,-27884,-17233,-27870,-17254,-27857,-17275,-27844,-17297,-27831,-17318,-27817,-17339,-27804,-17361,-27791,-17382,-27778,-17403,-27764,-17424,-27751,-17446,-27737,-17467,-27724,-17488,-27711,-17510,-27697,-17531,-27684,-17552,-27670,-17573,-27657,-17594,-27643,-17616,-27630,-17637,-27616,-17658,-27603,-17679,-27589,-17700,-27576,-17721,-27562,-17743,-27549,-17764,-27535,-17785,-27521,-17806,-27508,-17827,-27494,-17848,-27480,-17869,-27467,-17890,-27453,-17911,-27439,-17932,-27425,-17953,-27412,-17974,-27398,-17995,-27384,-18016,-27370,-18037,-27356,-18058,-27343,-18079,-27329,-18100,-27315,-18121,-27301,-18142,-27287,-18163,-27273,-18184,-27259,-18205,-27245,-18226,-27231,-18247,-27217,-18268,-27203,-18288,-27189,-18309,-27175,-18330,-27161,-18351,-27147,-18372,-27133,-18393,-27119,-18413,-27105,-18434,-27091,-18455,-27077,-18476,-27062,-18496,-27048,-18517,-27034,-18538,-27020,-18559,-27006,-18579,-26991,-18600,-26977,-18621,-26963,-18641,-26949,-18662,-26934,-18683,-26920,-18703,-26906,-18724,-26891,-18745,-26877,-18765,-26862,-18786,-26848,-18806,-26834,-18827,-26819,-18847,-26805,-18868,-26790,-18889,-26776,-18909,-26761,-18930,-26747,-18950,-26732,-18971,-26718,-18991,-26703,-19012,-26689,-19032,-26674,-19052,-26659,-19073,-26645,-19093,-26630,-19114,-26616,-19134,-26601,-19155,-26586,-19175,-26571,-19195,-26557,-19216,-26542,-19236,-26527,-19256,-26513,-19277,-26498,-19297,-26483,-19317,-26468,-19338,-26453,-19358,-26438,-19378,-26424,-19398,-26409,-19419,-26394,-19439,-26379,-19459,-26364,-19479,-26349,-19500,-26334,-19520,-26319,-19540,-26304,-19560,-26289,-19580,-26274,-19600,-26259,-19621,-26244,-19641,-26229,-19661,-26214,-19681,-26199,-19701,-26184,-19721,-26169,-19741,-26154,-19761,-26138,-19781,-26123,-19801,-26108,-19821,-26093,-19841,-26078,-19861,-26062,-19881,-26047,-19901,-26032,-19921,-26017,-19941,-26001,-19961,-25986,-19981,-25971,-20001,-25955,-20021,-25940,-20041,-25925,-20061,-25909,-20080,-25894,-20100,-25879,-20120,-25863,-20140,-25848,-20160,-25832,-20180,-25817,-20199,-25801,-20219,-25786,-20239,-25770,-20259,-25755,-20278,-25739,-20298,-25724,-20318,-25708,-20338,-25692,-20357,-25677,-20377,-25661,-20397,-25646,-20416,-25630,-20436,-25614,-20456,-25599,-20475,-25583,-20495,-25567,-20514,-25551,-20534,-25536,-20554,-25520,-20573,-25504,-20593,-25488,-20612,-25473,-20632,-25457,-20651,-25441,-20671,-25425,-20690,-25409,-20710,-25393,-20729,-25377,-20749,-25362,-20768,-25346,-20788,-25330,-20807,-25314,-20826,-25298,-20846,-25282,-20865,-25266,-20885,-25250,-20904,-25234,-20923,-25218,-20943,-25202,-20962,-25186,-20981,-25170,-21001,-25153,-21020,-25137,-21039,-25121,-21058,-25105,-21078,-25089,-21097,-25073,-21116,-25057,-21135,-25040,-21155,-25024,-21174,-25008,-21193,-24992,-21212,-24975,-21231,-24959,-21250,-24943,-21269,-24927,-21289,-24910,-21308,-24894,-21327,-24878,-21346,-24861,-21365,-24845,-21384,-24828,-21403,-24812,-21422,-24796,-21441,-24779,-21460,-24763,-21479,-24746,-21498,-24730,-21517,-24713,-21536,-24697,-21555,-24680,-21574,-24664,-21593,-24647,-21612,-24631,-21630,-24614,-21649,-24597,-21668,-24581,-21687,-24564,-21706,-24547,-21725,-24531,-21744,-24514,-21762,-24497,-21781,-24481,-21800,-24464,-21819,-24447,-21837,-24431,-21856,-24414,-21875,-24397,-21894,-24380,-21912,-24363,-21931,-24347,-21950,-24330,-21968,-24313,-21987,-24296,-22005,-24279,-22024,-24262,-22043,-24245,-22061,-24229,-22080,-24212,-22098,-24195,-22117,-24178,-22136,-24161,-22154,-24144,-22173,-24127,-22191,-24110,-22210,-24093,-22228,-24076,-22246,-24059,-22265,-24042,-22283,-24024,-22302,-24007,-22320,-23990,-22339,-23973,-22357,-23956,-22375,-23939,-22394,-23922,-22412,-23904,-22430,-23887,-22449,-23870,-22467,-23853,-22485,-23836,-22504,-23818,-22522,-23801,-22540,-23784,-22558,-23767,-22576,-23749,-22595,-23732,-22613,-23715,-22631,-23697,-22649,-23680,-22667,-23662,-22686,-23645,-22704,-23628,-22722,-23610,-22740,-23593,-22758,-23575,-22776,-23558,-22794,-23540,-22812,-23523,-22830,-23505,-22848,-23488,-22866,-23470,-22884,-23453,-22902,-23435,-22920,-23418,-22938,-23400,-22956,-23383,-22974,-23365,-22992,-23347,-23010,-23330,-23028,-23312,-23046,-23294,-23063,-23277,-23081,-23259,-23099,-23241,-23117,-23224,-23135,-23206,-23152,-23188,-23170,-23170,-23188,-23152,-23206,-23135,-23224,-23117,-23241,-23099,-23259,-23081,-23277,-23063,-23294,-23046,-23312,-23028,-23330,-23010,-23347,-22992,-23365,-22974,-23383,-22956,-23400,-22938,-23418,-22920,-23435,-22902,-23453,-22884,-23470,-22866,-23488,-22848,-23505,-22830,-23523,-22812,-23540,-22794,-23558,-22776,-23575,-22758,-23593,-22740,-23610,-22722,-23628,-22704,-23645,-22686,-23662,-22667,-23680,-22649,-23697,-22631,-23715,-22613,-23732,-22595,-23749,-22576,-23767,-22558,-23784,-22540,-23801,-22522,-23818,-22504,-23836,-22485,-23853,-22467,-23870,-22449,-23887,-22430,-23904,-22412,-23922,-22394,-23939,-22375,-23956,-22357,-23973,-22339,-23990,-22320,-24007,-22302,-24024,-22283,-24042,-22265,-24059,-22246,-24076,-22228,-24093,-22210,-24110,-22191,-24127,-22173,-24144,-22154,-24161,-22136,-24178,-22117,-24195,-22098,-24212,-22080,-24229,-22061,-24245,-22043,-24262,-22024,-24279,-22005,-24296,-21987,-24313,-21968,-24330,-21950,-24347,-21931,-24363,-21912,-24380,-21894,-24397,-21875,-24414,-21856,-24431,-21837,-24447,-21819,-24464,-21800,-24481,-21781,-24497,-21762,-24514,-21744,-24531,-21725,-24547,-21706,-24564,-21687,-24581,-21668,-24597,-21649,-24614,-21630,-24631,-21612,-24647,-21593,-24664,-21574,-24680,-21555,-24697,-21536,-24713,-21517,-24730,-21498,-24746,-21479,-24763,-21460,-24779,-21441,-24796,-21422,-24812,-21403,-24828,-21384,-24845,-21365,-24861,-21346,-24878,-21327,-24894,-21308,-24910,-21289,-24927,-21269,-24943,-21250,-24959,-21231,-24975,-21212,-24992,-21193,-25008,-21174,-25024,-21155,-25040,-21135,-25057,-21116,-25073,-21097,-25089,-21078,-25105,-21058,-25121,-21039,-25137,-21020,-25153,-21001,-25170,-20981,-25186,-20962,-25202,-20943,-25218,-20923,-25234,-20904,-25250,-20885,-25266,-20865,-25282,-20846,-25298,-20826,-25314,-20807,-25330,-20788,-25346,-20768,-25362,-20749,-25377,-20729,-25393,-20710,-25409,-20690,-25425,-20671,-25441,-20651,-25457,-20632,-25473,-20612,-25488,-20593,-25504,-20573,-25520,-20554,-25536,-20534,-25551,-20514,-25567,-20495,-25583,-20475,-25599,-20456,-25614,-20436,-25630,-20416,-25646,-20397,-25661,-20377,-25677,-20357,-25692,-20338,-25708,-20318,-25724,-20298,-25739,-20278,-25755,-20259,-25770,-20239,-25786,-20219,-25801,-20199,-25817,-20180,-25832,-20160,-25848,-20140,-25863,-20120,-25879,-20100,-25894,-20080,-25909,-20061,-25925,-20041,-25940,-20021,-25955,-20001,-25971,-19981,-25986,-19961,-26001,-19941,-26017,-19921,-26032,-19901,-26047,-19881,-26062,-19861,-26078,-19841,-26093,-19821,-26108,-19801,-26123,-19781,-26138,-19761,-26154,-19741,-26169,-19721,-26184,-19701,-26199,-19681,-26214,-19661,-26229,-19641,-26244,-19621,-26259,-19600,-26274,-19580,-26289,-19560,-26304,-19540,-26319,-19520,-26334,-19500,-26349,-19479,-26364,-19459,-26379,-19439,-26394,-19419,-26409,-19398,-26424,-19378,-26438,-19358,-26453,-19338,-26468,-19317,-26483,-19297,-26498,-19277,-26513,-19256,-26527,-19236,-26542,-19216,-26557,-19195,-26571,-19175,-26586,-19155,-26601,-19134,-26616,-19114,-26630,-19093,-26645,-19073,-26659,-19052,-26674,-19032,-26689,-19012,-26703,-18991,-26718,-18971,-26732,-18950,-26747,-18930,-26761,-18909,-26776,-18889,-26790,-18868,-26805,-18847,-26819,-18827,-26834,-18806,-26848,-18786,-26862,-18765,-26877,-18745,-26891,-18724,-26906,-18703,-26920,-18683,-26934,-18662,-26949,-18641,-26963,-18621,-26977,-18600,-26991,-18579,-27006,-18559,-27020,-18538,-27034,-18517,-27048,-18496,-27062,-18476,-27077,-18455,-27091,-18434,-27105,-18413,-27119,-18393,-27133,-18372,-27147,-18351,-27161,-18330,-27175,-18309,-27189,-18288,-27203,-18268,-27217,-18247,-27231,-18226,-27245,-18205,-27259,-18184,-27273,-18163,-27287,-18142,-27301,-18121,-27315,-18100,-27329,-18079,-27343,-18058,-27356,-18037,-27370,-18016,-27384,-17995,-27398,-17974,-27412,-17953,-27425,-17932,-27439,-17911,-27453,-17890,-27467,-17869,-27480,-17848,-27494,-17827,-27508,-17806,-27521,-17785,-27535,-17764,-27549,-17743,-27562,-17721,-27576,-17700,-27589,-17679,-27603,-17658,-27616,-17637,-27630,-17616,-27643,-17594,-27657,-17573,-27670,-17552,-27684,-17531,-27697,-17510,-27711,-17488,-27724,-17467,-27737,-17446,-27751,-17424,-27764,-17403,-27778,-17382,-27791,-17361,-27804,-17339,-27817,-17318,-27831,-17297,-27844,-17275,-27857,-17254,-27870,-17233,-27884,-17211,-27897,-17190,-27910,-17168,-27923,-17147,-27936,-17125,-27949,-17104,-27963,-17083,-27976,-17061,-27989,-17040,-28002,-17018,-28015,-16997,-28028,-16975,-28041,-16954,-28054,-16932,-28067,-16911,-28080,-16889,-28093,-16868,-28106,-16846,-28119,-16825,-28132,-16803,-28144,-16781,-28157,-16760,-28170,-16738,-28183,-16717,-28196,-16695,-28209,-16673,-28221,-16652,-28234,-16630,-28247,-16608,-28260,-16587,-28272,-16565,-28285,-16543,-28298,-16522,-28310,-16500,-28323,-16478,-28336,-16456,-28348,-16435,-28361,-16413,-28373,-16391,-28386,-16369,-28398,-16348,-28411,-16326,-28424,-16304,-28436,-16282,-28448,-16261,-28461,-16239,-28473,-16217,-28486,-16195,-28498,-16173,-28511,-16151,-28523,-16129,-28535,-16108,-28548,-16086,-28560,-16064,-28572,-16042,-28585,-16020,-28597,-15998,-28609,-15976,-28621,-15954,-28634,-15932,-28646,-15910,-28658,-15888,-28670,-15866,-28682,-15844,-28695,-15822,-28707,-15800,-28719,-15778,-28731,-15756,-28743,-15734,-28755,-15712,-28767,-15690,-28779,-15668,-28791,-15646,-28803,-15624,-28815,-15602,-28827,-15580,-28839,-15557,-28851,-15535,-28863,-15513,-28875,-15491,-28887,-15469,-28898,-15447,-28910,-15425,-28922,-15402,-28934,-15380,-28946,-15358,-28957,-15336,-28969,-15314,-28981,-15291,-28993,-15269,-29004,-15247,-29016,-15225,-29028,-15202,-29039,-15180,-29051,-15158,-29063,-15136,-29074,-15113,-29086,-15091,-29097,-15069,-29109,-15046,-29120,-15024,-29132,-15002,-29143,-14979,-29155,-14957,-29166,-14935,-29178,-14912,-29189,-14890,-29201,-14867,-29212,-14845,-29223,-14823,-29235,-14800,-29246,-14778,-29257,-14755,-29269,-14733,-29280,-14710,-29291,-14688,-29303,-14666,-29314,-14643,-29325,-14621,-29336,-14598,-29347,-14576,-29359,-14553,-29370,-14531,-29381,-14508,-29392,-14485,-29403,-14463,-29414,-14440,-29425,-14418,-29436,-14395,-29447,-14373,-29458,-14350,-29469,-14327,-29480,-14305,-29491,-14282,-29502,-14260,-29513,-14237,-29524,-14214,-29535,-14192,-29546,-14169,-29557,-14146,-29568,-14124,-29578,-14101,-29589,-14078,-29600,-14056,-29611,-14033,-29622,-14010,-29632,-13987,-29643,-13965,-29654,-13942,-29664,-13919,-29675,-13896,-29686,-13874,-29696,-13851,-29707,-13828,-29718,-13805,-29728,-13783,-29739,-13760,-29749,-13737,-29760,-13714,-29770,-13691,-29781,-13668,-29791,-13646,-29802,-13623,-29812,-13600,-29823,-13577,-29833,-13554,-29843,-13531,-29854,-13508,-29864,-13486,-29874,-13463,-29885,-13440,-29895,-13417,-29905,-13394,-29916,-13371,-29926,-13348,-29936,-13325,-29946,-13302,-29956,-13279,-29967,-13256,-29977,-13233,-29987,-13210,-29997,-13187,-30007,-13164,-30017,-13141,-30027,-13118,-30037,-13095,-30047,-13072,-30057,-13049,-30067,-13026,-30077,-13003,-30087,-12980,-30097,-12957,-30107,-12934,-30117,-12910,-30127,-12887,-30137,-12864,-30147,-12841,-30157,-12818,-30166,-12795,-30176,-12772,-30186,-12749,-30196,-12725,-30206,-12702,-30215,-12679,-30225,-12656,-30235,-12633,-30244,-12610,-30254,-12586,-30264,-12563,-30273,-12540,-30283,-12517,-30292,-12493,-30302,-12470,-30312,-12447,-30321,-12424,-30331,-12400,-30340,-12377,-30350,-12354,-30359,-12331,-30369,-12307,-30378,-12284,-30387,-12261,-30397,-12237,-30406,-12214,-30416,-12191,-30425,-12167,-30434,-12144,-30443,-12121,-30453,-12097,-30462,-12074,-30471,-12051,-30481,-12027,-30490,-12004,-30499,-11981,-30508,-11957,-30517,-11934,-30526,-11910,-30536,-11887,-30545,-11863,-30554,-11840,-30563,-11817,-30572,-11793,-30581,-11770,-30590,-11746,-30599,-11723,-30608,-11699,-30617,-11676,-30626,-11652,-30635,-11629,-30644,-11605,-30653,-11582,-30661,-11558,-30670,-11535,-30679,-11511,-30688,-11488,-30697,-11464,-30706,-11441,-30714,-11417,-30723,-11394,-30732,-11370,-30740,-11346,-30749,-11323,-30758,-11299,-30767,-11276,-30775,-11252,-30784,-11228,-30792,-11205,-30801,-11181,-30810,-11158,-30818,-11134,-30827,-11110,-30835,-11087,-30844,-11063,-30852,-11039,-30861,-11016,-30869,-10992,-30877,-10968,-30886,-10945,-30894,-10921,-30903,-10897,-30911,-10874,-30919,-10850,-30928,-10826,-30936,-10802,-30944,-10779,-30952,-10755,-30961,-10731,-30969,-10707,-30977,-10684,-30985,-10660,-30993,-10636,-31002,-10612,-31010,-10589,-31018,-10565,-31026,-10541,-31034,-10517,-31042,-10493,-31050,-10470,-31058,-10446,-31066,-10422,-31074,-10398,-31082,-10374,-31090,-10350,-31098,-10327,-31106,-10303,-31114,-10279,-31122,-10255,-31129,-10231,-31137,-10207,-31145,-10183,-31153,-10160,-31161,-10136,-31168,-10112,-31176,-10088,-31184,-10064,-31192,-10040,-31199,-10016,-31207,-9992,-31215,-9968,-31222,-9944,-31230,-9920,-31237,-9896,-31245,-9872,-31253,-9848,-31260,-9824,-31268,-9800,-31275,-9776,-31283,-9752,-31290,-9728,-31298,-9704,-31305,-9680,-31312,-9656,-31320,-9632,-31327,-9608,-31335,-9584,-31342,-9560,-31349,-9536,-31357,-9512,-31364,-9488,-31371,-9464,-31378,-9440,-31386,-9416,-31393,-9392,-31400,-9368,-31407,-9344,-31414,-9320,-31421,-9296,-31429,-9271,-31436,-9247,-31443,-9223,-31450,-9199,-31457,-9175,-31464,-9151,-31471,-9127,-31478,-9103,-31485,-9078,-31492,-9054,-31499,-9030,-31506,-9006,-31513,-8982,-31519,-8958,-31526,-8933,-31533,-8909,-31540,-8885,-31547,-8861,-31554,-8837,-31560,-8813,-31567,-8788,-31574,-8764,-31581,-8740,-31587,-8716,-31594,-8691,-31601,-8667,-31607,-8643,-31614,-8619,-31620,-8594,-31627,-8570,-31634,-8546,-31640,-8522,-31647,-8497,-31653,-8473,-31660,-8449,-31666,-8425,-31673,-8400,-31679,-8376,-31685,-8352,-31692,-8327,-31698,-8303,-31705,-8279,-31711,-8254,-31717,-8230,-31724,-8206,-31730,-8181,-31736,-8157,-31742,-8133,-31749,-8108,-31755,-8084,-31761,-8060,-31767,-8035,-31773,-8011,-31779,-7987,-31786,-7962,-31792,-7938,-31798,-7913,-31804,-7889,-31810,-7865,-31816,-7840,-31822,-7816,-31828,-7791,-31834,-7767,-31840,-7743,-31846,-7718,-31852,-7694,-31857,-7669,-31863,-7645,-31869,-7620,-31875,-7596,-31881,-7572,-31887,-7547,-31892,-7523,-31898,-7498,-31904,-7474,-31910,-7449,-31915,-7425,-31921,-7400,-31927,-7376,-31932,-7351,-31938,-7327,-31944,-7302,-31949,-7278,-31955,-7253,-31960,-7229,-31966,-7204,-31971,-7180,-31977,-7155,-31982,-7131,-31988,-7106,-31993,-7082,-31999,-7057,-32004,-7033,-32009,-7008,-32015,-6983,-32020,-6959,-32025,-6934,-32031,-6910,-32036,-6885,-32041,-6861,-32047,-6836,-32052,-6812,-32057,-6787,-32062,-6762,-32067,-6738,-32073,-6713,-32078,-6689,-32083,-6664,-32088,-6639,-32093,-6615,-32098,-6590,-32103,-6565,-32108,-6541,-32113,-6516,-32118,-6492,-32123,-6467,-32128,-6442,-32133,-6418,-32138,-6393,-32143,-6368,-32148,-6344,-32153,-6319,-32157,-6294,-32162,-6270,-32167,-6245,-32172,-6220,-32177,-6196,-32181,-6171,-32186,-6146,-32191,-6122,-32195,-6097,-32200,-6072,-32205,-6048,-32209,-6023,-32214,-5998,-32219,-5973,-32223,-5949,-32228,-5924,-32232,-5899,-32237,-5875,-32241,-5850,-32246,-5825,-32250,-5800,-32255,-5776,-32259,-5751,-32263,-5726,-32268,-5701,-32272,-5677,-32276,-5652,-32281,-5627,-32285,-5602,-32289,-5578,-32294,-5553,-32298,-5528,-32302,-5503,-32306,-5479,-32311,-5454,-32315,-5429,-32319,-5404,-32323,-5379,-32327,-5355,-32331,-5330,-32335,-5305,-32339,-5280,-32343,-5255,-32347,-5231,-32351,-5206,-32355,-5181,-32359,-5156,-32363,-5131,-32367,-5107,-32371,-5082,-32375,-5057,-32379,-5032,-32383,-5007,-32387,-4982,-32390,-4958,-32394,-4933,-32398,-4908,-32402,-4883,-32405,-4858,-32409,-4833,-32413,-4808,-32417,-4784,-32420,-4759,-32424,-4734,-32427,-4709,-32431,-4684,-32435,-4659,-32438,-4634,-32442,-4609,-32445,-4585,-32449,-4560,-32452,-4535,-32456,-4510,-32459,-4485,-32463,-4460,-32466,-4435,-32469,-4410,-32473,-4385,-32476,-4360,-32479,-4336,-32483,-4311,-32486,-4286,-32489,-4261,-32493,-4236,-32496,-4211,-32499,-4186,-32502,-4161,-32505,-4136,-32509,-4111,-32512,-4086,-32515,-4061,-32518,-4036,-32521,-4012,-32524,-3987,-32527,-3962,-32530,-3937,-32533,-3912,-32536,-3887,-32539,-3862,-32542,-3837,-32545,-3812,-32548,-3787,-32551,-3762,-32554,-3737,-32557,-3712,-32559,-3687,-32562,-3662,-32565,-3637,-32568,-3612,-32571,-3587,-32573,-3562,-32576,-3537,-32579,-3512,-32581,-3487,-32584,-3462,-32587,-3437,-32589,-3412,-32592,-3387,-32595,-3362,-32597,-3337,-32600,-3312,-32602,-3287,-32605,-3262,-32607,-3237,-32610,-3212,-32612,-3187,-32615,-3162,-32617,-3137,-32619,-3112,-32622,-3087,-32624,-3062,-32626,-3037,-32629,-3012,-32631,-2987,-32633,-2962,-32636,-2937,-32638,-2912,-32640,-2887,-32642,-2862,-32645,-2837,-32647,-2812,-32649,-2787,-32651,-2762,-32653,-2737,-32655,-2712,-32657,-2687,-32659,-2662,-32661,-2637,-32663,-2611,-32665,-2586,-32667,-2561,-32669,-2536,-32671,-2511,-32673,-2486,-32675,-2461,-32677,-2436,-32679,-2411,-32681,-2386,-32682,-2361,-32684,-2336,-32686,-2311,-32688,-2286,-32689,-2261,-32691,-2236,-32693,-2210,-32695,-2185,-32696,-2160,-32698,-2135,-32700,-2110,-32701,-2085,-32703,-2060,-32704,-2035,-32706,-2010,-32707,-1985,-32709,-1960,-32710,-1935,-32712,-1909,-32713,-1884,-32715,-1859,-32716,-1834,-32718,-1809,-32719,-1784,-32720,-1759,-32722,-1734,-32723,-1709,-32724,-1684,-32726,-1659,-32727,-1633,-32728,-1608,-32729,-1583,-32730,-1558,-32732,-1533,-32733,-1508,-32734,-1483,-32735,-1458,-32736,-1433,-32737,-1407,-32738,-1382,-32739,-1357,-32740,-1332,-32741,-1307,-32742,-1282,-32743,-1257,-32744,-1232,-32745,-1207,-32746,-1181,-32747,-1156,-32748,-1131,-32749,-1106,-32750,-1081,-32751,-1056,-32751,-1031,-32752,-1006,-32753,-981,-32754,-955,-32754,-930,-32755,-905,-32756,-880,-32756,-855,-32757,-830,-32758,-805,-32758,-780,-32759,-754,-32759,-729,-32760,-704,-32760,-679,-32761,-654,-32761,-629,-32762,-604,-32762,-579,-32763,-553,-32763,-528,-32764,-503,-32764,-478,-32764,-453,-32765,-428,-32765,-403,-32765,-377,-32766,-352,-32766,-327,-32766,-302,-32766,-277,-32767,-252,-32767,-227,-32767,-202,-32767,-176,-32767,-151,-32767,-126,-32767,-101,-32767,-76,-32767,-51,-32767,-26}; From 71c8d6b93f8759e6aa36a7212bb91348ddefa108 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sun, 22 Jul 2018 13:26:10 +0200 Subject: [PATCH 013/128] initializations for radix-3 FFTs (1536,3072,6144,12288,18432,24576), addition of 3072-point. --- openair1/PHY/TOOLS/lte_dfts.c | 522 +++++++++++++++++++++++++++--- openair1/PHY/TOOLS/twiddle12288.h | 38 --- openair1/PHY/TOOLS/twiddle1536.h | 39 --- openair1/PHY/TOOLS/twiddle18432.h | 35 -- openair1/PHY/TOOLS/twiddle24576.h | 37 --- openair1/PHY/TOOLS/twiddle6144.h | 38 --- 6 files changed, 469 insertions(+), 240 deletions(-) delete mode 100644 openair1/PHY/TOOLS/twiddle12288.h delete mode 100644 openair1/PHY/TOOLS/twiddle1536.h delete mode 100644 openair1/PHY/TOOLS/twiddle18432.h delete mode 100644 openair1/PHY/TOOLS/twiddle24576.h delete mode 100644 openair1/PHY/TOOLS/twiddle6144.h diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index e217892ee2..5b610858db 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -5461,24 +5461,121 @@ void dft1536(int16_t *input, int16_t *output, int scale) } +int16_t twa3072[2048] __attribute__((aligned(32))); +int16_t twb3072[2048] __attribute__((aligned(32))); // 1024 x 3 -void dft3072(int16_t *input, int16_t *output) +void dft3072(int16_t *input, int16_t *output,int scale) { + int i,i2,j; + uint32_t tmp[3][1024] __attribute__((aligned(32))); + uint32_t tmpo[3][1024] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); + for (i=0,j=0; i<1024; i++) { + tmp[0][i] = ((uint32_t *)input)[j++]; + tmp[1][i] = ((uint32_t *)input)[j++]; + tmp[2][i] = ((uint32_t *)input)[j++]; + } + + dft1024((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1); + dft1024((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); + dft1024((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); + + for (i=0,i2=0; i<2048; i+=8,i2+=4) { + bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+2048+i),(simd_q15_t*)(output+4096+i), + (simd_q15_t*)(twa3072+i),(simd_q15_t*)(twb3072+i)); + } + + if (scale==1) { + for (i=0; i<48; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } + + _mm_empty(); + _m_empty(); } -void idft3072(int16_t *input, int16_t *output) +void idft3072(int16_t *input, int16_t *output,int scale) { + int i,i2,j; + uint32_t tmp[3][1024]__attribute__((aligned(32))); + uint32_t tmpo[3][1024] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); + for (i=0,j=0; i<1024; i++) { + tmp[0][i] = ((uint32_t *)input)[j++]; + tmp[1][i] = ((uint32_t *)input)[j++]; + tmp[2][i] = ((uint32_t *)input)[j++]; + } + + idft1024((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1); + idft1024((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); + idft1024((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); + + for (i=0,i2=0; i<2048; i+=8,i2+=4) { + ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+2048+i),(simd_q15_t*)(output+4096+i), + (simd_q15_t*)(twa3072+i),(simd_q15_t*)(twb3072+i)); + } + + + if (scale==1) { + for (i=0; i<48; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } + + _mm_empty(); + _m_empty(); } -#include "twiddle6144.h" -void idft6144(int16_t *input, int16_t *output) +int16_t twa6144[4096] __attribute__((aligned(32))); +int16_t twb6144[4096] __attribute__((aligned(32))); + +void idft6144(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][2048] __attribute__((aligned(32))); uint32_t tmpo[3][2048] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); for (i=0,j=0; i<2048; i++) { tmp[0][i] = ((uint32_t *)input)[j++]; @@ -5490,36 +5587,47 @@ void idft6144(int16_t *input, int16_t *output) idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); - /* - for (i=1; i<2048; i++) { - tmpo[0][i] = tmpo[0][i<<1]; - tmpo[1][i] = tmpo[1][i<<1]; - tmpo[2][i] = tmpo[2][i<<1]; - }*/ - - // LOG_M("in.m","in",input,6144,1,1); - // LOG_M("out0.m","o0",tmpo[0],2048,1,1); - // LOG_M("out1.m","o1",tmpo[1],2048,1,1); - // LOG_M("out2.m","o2",tmpo[2],2048,1,1); - for (i=0,i2=0; i<4096; i+=8,i2+=4) { ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); } - // LOG_M("out.m","out",output,6144,1,1); + if (scale==1) { + for (i=0; i<96; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } + _mm_empty(); _m_empty(); } -void dft6144(int16_t *input, int16_t *output) +void dft6144(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][2048] __attribute__((aligned(32))); uint32_t tmpo[3][2048] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); for (i=0,j=0; i<2048; i++) { tmp[0][i] = ((uint32_t *)input)[j++]; @@ -5547,19 +5655,44 @@ void dft6144(int16_t *input, int16_t *output) (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); } + if (scale==1) { + for (i=0; i<96; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } + _mm_empty(); _m_empty(); } -#include "twiddle12288.h" +int16_t twa12288[8192] __attribute__((aligned(32))); +int16_t twb12288[8192] __attribute__((aligned(32))); // 4096 x 3 -void dft12288(int16_t *input, int16_t *output) +void dft12288(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][4096] __attribute__((aligned(32))); uint32_t tmpo[3][4096] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); for (i=0,j=0; i<4096; i++) { tmp[0][i] = ((uint32_t *)input)[j++]; @@ -5567,9 +5700,9 @@ void dft12288(int16_t *input, int16_t *output) tmp[2][i] = ((uint32_t *)input)[j++]; } - dft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1); - dft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); - dft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); + dft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale); + dft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale); + dft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale); /* for (i=1; i<4096; i++) { tmpo[0][i] = tmpo[0][i<<1]; @@ -5586,16 +5719,39 @@ void dft12288(int16_t *input, int16_t *output) (simd_q15_t*)(twa12288+i),(simd_q15_t*)(twb12288+i)); } + if (scale==1) { + for (i=0; i<192; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } _mm_empty(); _m_empty(); } -void idft12288(int16_t *input, int16_t *output) +void idft12288(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][4096] __attribute__((aligned(32))); uint32_t tmpo[3][4096] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); for (i=0,j=0; i<4096; i++) { tmp[0][i] = ((uint32_t *)input)[j++]; @@ -5604,34 +5760,52 @@ void idft12288(int16_t *input, int16_t *output) } - idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1); - idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); - idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); - /* - LOG_M("in.m","in",input,12288,1,1); - LOG_M("out0.m","o0",tmpo[0],4096,1,1); - LOG_M("out1.m","o1",tmpo[1],4096,1,1); - LOG_M("out2.m","o2",tmpo[2],4096,1,1); - */ + idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale); + idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale); + idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale); for (i=0,i2=0; i<8192; i+=8,i2+=4) { ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), (simd_q15_t*)(twa12288+i),(simd_q15_t*)(twb12288+i)); } + if (scale==1) { + for (i=0; i<192; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } _mm_empty(); _m_empty(); // LOG_M("out.m","out",output,6144,1,1); } -#include "twiddle18432.h" +int16_t twa18432[12288] __attribute__((aligned(32))); +int16_t twb18432[12288] __attribute__((aligned(32))); // 6144 x 3 -void dft18432(int16_t *input, int16_t *output) { +void dft18432(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][6144] __attribute__((aligned(32))); uint32_t tmpo[3][6144] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); for (i=0,j=0; i<6144; i++) { tmp[0][i] = ((uint32_t *)input)[j++]; @@ -5639,25 +5813,47 @@ void dft18432(int16_t *input, int16_t *output) { tmp[2][i] = ((uint32_t *)input)[j++]; } - dft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0])); - dft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1])); - dft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2])); + dft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale); + dft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale); + dft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale); for (i=0,i2=0; i<12288; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+12288+i),(simd_q15_t*)(output+24576+i), (simd_q15_t*)(twa18432+i),(simd_q15_t*)(twb18432+i)); } - + if (scale==1) { + for (i=0; i<288; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } _mm_empty(); _m_empty(); } -void idft18432(int16_t *input, int16_t *output) { +void idft18432(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][6144] __attribute__((aligned(32))); uint32_t tmpo[3][6144] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); for (i=0,j=0; i<6144; i++) { tmp[0][i] = ((uint32_t *)input)[j++]; @@ -5665,27 +5861,51 @@ void idft18432(int16_t *input, int16_t *output) { tmp[2][i] = ((uint32_t *)input)[j++]; } - idft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0])); - idft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1])); - idft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2])); + idft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale); + idft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale); + idft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale); for (i=0,i2=0; i<12288; i+=8,i2+=4) { ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+12288+i),(simd_q15_t*)(output+24576+i), (simd_q15_t*)(twa18432+i),(simd_q15_t*)(twb18432+i)); } - + if (scale==1) { + for (i=0; i<288; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } _mm_empty(); _m_empty(); } -#include "twiddle24576.h" + +int16_t twa24576[16384] __attribute__((aligned(32))); +int16_t twb24576[16384] __attribute__((aligned(32))); // 8192 x 3 -void dft24576(int16_t *input, int16_t *output) +void dft24576(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][8192] __attribute__((aligned(32))); uint32_t tmpo[3][8192] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); for (i=0,j=0; i<8192; i++) { tmp[0][i] = ((uint32_t *)input)[j++]; @@ -5712,17 +5932,40 @@ void dft24576(int16_t *input, int16_t *output) (simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i)); } + if (scale==1) { + for (i=0; i<384; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } _mm_empty(); _m_empty(); // LOG_M("out.m","out",output,24576,1,1); } -void idft24576(int16_t *input, int16_t *output) +void idft24576(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][8192] __attribute__((aligned(32))); uint32_t tmpo[3][8192] __attribute__((aligned(32))); + simd_q15_t *y128p=(simd_q15_t*)output; + simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15); for (i=0,j=0; i<8192; i++) { tmp[0][i] = ((uint32_t *)input)[j++]; @@ -5746,7 +5989,27 @@ void idft24576(int16_t *input, int16_t *output) (simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i), (simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i)); } - + if (scale==1) { + for (i=0; i<384; i++) { + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128); + y128p+=16; + } + } _mm_empty(); _m_empty(); @@ -18594,7 +18857,7 @@ void init_rad3(int N,int16_t *twa,int16_t *twb) { int i; - for (i=0;i<(N/3)-1;i++) { + for (i=0;i<(N/3);i++) { *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); twa++; *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); twa++; *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); twb++; @@ -18657,6 +18920,11 @@ init_dfts() { init_rad2(8192,tw8192); init_rad3(1536,twa1536,twb1536); + init_rad3(3072,twa3072,twb3072); + init_rad3(6144,twa6144,twb6144); + init_rad3(12288,twa12288,twb12288); + init_rad3(18432,twa18432,twb18432); + init_rad3(24576,twa24576,twb24576); init_rad3_rep(288,twa288,twb288); init_rad5_rep(300,twa300,twb300,twc300,twd300); @@ -18847,9 +19115,9 @@ int main(int argc, char**argv) time_stats_t ts; #ifdef __AVX2__ - simd256_q15_t x[2048],y[2048],tw0,tw1,tw2,tw3; + simd256_q15_t x[4096],y[4096],tw0,tw1,tw2,tw3; #else - simd_q15_t x[4096],y[4096],tw0,tw1,tw2,tw3; + simd_q15_t x[8192],y[8192],tw0,tw1,tw2,tw3; #endif int i; simd_q15_t *x128=x,*y128=y; @@ -19462,7 +19730,7 @@ int main(int argc, char**argv) else ((int16_t*)x)[i] = -364; } - for (i=2*(4096-1200);i<8192;i++) { + for (i=2*(8192-2400);i<16384;i++) { if ((taus() & 1)==0) ((int16_t*)x)[i] = 364; else @@ -19475,10 +19743,158 @@ int main(int argc, char**argv) stop_meas(&ts); } - printf("\n\n8192-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + printf("\n\n1536-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); LOG_M("y8192.m","y8192",y,8192,1,1); LOG_M("x8192.m","x8192",x,8192,1,1); + memset((void*)x,0,1536*sizeof(int32_t)); + for (i=2;i<1202;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + for (i=2*(1536-600);i<3072;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + idft1536((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n1536-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y1536.m","y1536",y,1536,1,1); + LOG_M("x1536.m","x1536",x,1536,1,1); + + printf("\n\n1536-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y8192.m","y8192",y,8192,1,1); + LOG_M("x8192.m","x8192",x,8192,1,1); + + memset((void*)x,0,3072*sizeof(int32_t)); + for (i=2;i<1202;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + for (i=2*(3072-600);i<3072;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + idft3072((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n3072-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y3072.m","y3072",y,3072,1,1); + LOG_M("x3072.m","x3072",x,3072,1,1); + + memset((void*)x,0,6144*sizeof(int32_t)); + for (i=2;i<4802;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + for (i=2*(6144-2400);i<12288;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + idft6144((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n6144-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y6144.m","y6144",y,6144,1,1); + LOG_M("x6144.m","x6144",x,6144,1,1); + + memset((void*)x,0,12288*sizeof(int32_t)); + for (i=2;i<9602;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + for (i=2*(12288-4800);i<24576;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + idft12288((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n12288-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y12288.m","y12288",y,12288,1,1); + LOG_M("x12288.m","x12288",x,12288,1,1); + + memset((void*)x,0,18432*sizeof(int32_t)); + for (i=2;i<14402;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + for (i=2*(18432-7200);i<36864;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + idft18432((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n18432-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y18432.m","y18432",y,18432,1,1); + LOG_M("x18432.m","x18432",x,18432,1,1); + + memset((void*)x,0,24576*sizeof(int32_t)); + for (i=2;i<19202;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + for (i=2*(24576-19200);i<49152;i++) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + } + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + idft24576((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n24576-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y24576.m","y24576",y,24576,1,1); + LOG_M("x24576.m","x24576",x,24576,1,1); + return(0); } diff --git a/openair1/PHY/TOOLS/twiddle12288.h b/openair1/PHY/TOOLS/twiddle12288.h deleted file mode 100644 index 17fa92f4e9..0000000000 --- a/openair1/PHY/TOOLS/twiddle12288.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:4095)/12288)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*(0:2:8190)/12288)); -twa2 = zeros(1,8192); -twb2 = zeros(1,8192); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); - - - */ - -int16_t twa12288[8192] __attribute__((aligned(32))) = {32767,0,32766,-17,32766,-34,32766,-51,32766,-68,32766,-84,32766,-101,32766,-118,32766,-135,32766,-151,32766,-168,32766,-185,32766,-202,32766,-218,32766,-235,32766,-252,32765,-269,32765,-285,32765,-302,32765,-319,32765,-336,32765,-352,32764,-369,32764,-386,32764,-403,32764,-419,32764,-436,32763,-453,32763,-470,32763,-486,32763,-503,32762,-520,32762,-537,32762,-553,32762,-570,32761,-587,32761,-604,32761,-620,32760,-637,32760,-654,32760,-671,32759,-687,32759,-704,32759,-721,32758,-738,32758,-754,32757,-771,32757,-788,32757,-805,32756,-821,32756,-838,32755,-855,32755,-872,32754,-888,32754,-905,32754,-922,32753,-939,32753,-955,32752,-972,32752,-989,32751,-1006,32751,-1022,32750,-1039,32750,-1056,32749,-1073,32748,-1089,32748,-1106,32747,-1123,32747,-1140,32746,-1156,32746,-1173,32745,-1190,32744,-1207,32744,-1223,32743,-1240,32742,-1257,32742,-1274,32741,-1290,32740,-1307,32740,-1324,32739,-1340,32738,-1357,32738,-1374,32737,-1391,32736,-1407,32736,-1424,32735,-1441,32734,-1458,32733,-1474,32733,-1491,32732,-1508,32731,-1525,32730,-1541,32729,-1558,32729,-1575,32728,-1592,32727,-1608,32726,-1625,32725,-1642,32725,-1659,32724,-1675,32723,-1692,32722,-1709,32721,-1725,32720,-1742,32719,-1759,32718,-1776,32717,-1792,32717,-1809,32716,-1826,32715,-1843,32714,-1859,32713,-1876,32712,-1893,32711,-1909,32710,-1926,32709,-1943,32708,-1960,32707,-1976,32706,-1993,32705,-2010,32704,-2027,32703,-2043,32702,-2060,32701,-2077,32700,-2093,32699,-2110,32697,-2127,32696,-2144,32695,-2160,32694,-2177,32693,-2194,32692,-2210,32691,-2227,32690,-2244,32688,-2261,32687,-2277,32686,-2294,32685,-2311,32684,-2327,32683,-2344,32681,-2361,32680,-2378,32679,-2394,32678,-2411,32676,-2428,32675,-2444,32674,-2461,32673,-2478,32671,-2495,32670,-2511,32669,-2528,32668,-2545,32666,-2561,32665,-2578,32664,-2595,32662,-2611,32661,-2628,32660,-2645,32658,-2662,32657,-2678,32656,-2695,32654,-2712,32653,-2728,32651,-2745,32650,-2762,32649,-2778,32647,-2795,32646,-2812,32644,-2829,32643,-2845,32641,-2862,32640,-2879,32638,-2895,32637,-2912,32635,-2929,32634,-2945,32632,-2962,32631,-2979,32629,-2995,32628,-3012,32626,-3029,32625,-3045,32623,-3062,32622,-3079,32620,-3095,32618,-3112,32617,-3129,32615,-3146,32614,-3162,32612,-3179,32610,-3196,32609,-3212,32607,-3229,32605,-3246,32604,-3262,32602,-3279,32600,-3296,32599,-3312,32597,-3329,32595,-3346,32594,-3362,32592,-3379,32590,-3396,32588,-3412,32587,-3429,32585,-3446,32583,-3462,32581,-3479,32580,-3496,32578,-3512,32576,-3529,32574,-3546,32572,-3562,32571,-3579,32569,-3595,32567,-3612,32565,-3629,32563,-3645,32561,-3662,32559,-3679,32558,-3695,32556,-3712,32554,-3729,32552,-3745,32550,-3762,32548,-3779,32546,-3795,32544,-3812,32542,-3829,32540,-3845,32538,-3862,32536,-3878,32534,-3895,32532,-3912,32530,-3928,32528,-3945,32526,-3962,32524,-3978,32522,-3995,32520,-4012,32518,-4028,32516,-4045,32514,-4061,32512,-4078,32510,-4095,32508,-4111,32506,-4128,32503,-4145,32501,-4161,32499,-4178,32497,-4194,32495,-4211,32493,-4228,32491,-4244,32488,-4261,32486,-4277,32484,-4294,32482,-4311,32480,-4327,32477,-4344,32475,-4360,32473,-4377,32471,-4394,32468,-4410,32466,-4427,32464,-4444,32462,-4460,32459,-4477,32457,-4493,32455,-4510,32452,-4526,32450,-4543,32448,-4560,32445,-4576,32443,-4593,32441,-4609,32438,-4626,32436,-4643,32434,-4659,32431,-4676,32429,-4692,32426,-4709,32424,-4726,32422,-4742,32419,-4759,32417,-4775,32414,-4792,32412,-4808,32409,-4825,32407,-4842,32404,-4858,32402,-4875,32399,-4891,32397,-4908,32394,-4924,32392,-4941,32389,-4958,32387,-4974,32384,-4991,32382,-5007,32379,-5024,32377,-5040,32374,-5057,32371,-5073,32369,-5090,32366,-5107,32364,-5123,32361,-5140,32358,-5156,32356,-5173,32353,-5189,32350,-5206,32348,-5222,32345,-5239,32342,-5255,32340,-5272,32337,-5288,32334,-5305,32332,-5322,32329,-5338,32326,-5355,32323,-5371,32321,-5388,32318,-5404,32315,-5421,32312,-5437,32310,-5454,32307,-5470,32304,-5487,32301,-5503,32298,-5520,32295,-5536,32293,-5553,32290,-5569,32287,-5586,32284,-5602,32281,-5619,32278,-5635,32275,-5652,32273,-5668,32270,-5685,32267,-5701,32264,-5718,32261,-5734,32258,-5751,32255,-5767,32252,-5784,32249,-5800,32246,-5817,32243,-5833,32240,-5850,32237,-5866,32234,-5883,32231,-5899,32228,-5916,32225,-5932,32222,-5949,32219,-5965,32216,-5982,32213,-5998,32210,-6015,32207,-6031,32204,-6048,32201,-6064,32197,-6081,32194,-6097,32191,-6113,32188,-6130,32185,-6146,32182,-6163,32179,-6179,32176,-6196,32172,-6212,32169,-6229,32166,-6245,32163,-6262,32160,-6278,32156,-6294,32153,-6311,32150,-6327,32147,-6344,32143,-6360,32140,-6377,32137,-6393,32134,-6409,32130,-6426,32127,-6442,32124,-6459,32120,-6475,32117,-6492,32114,-6508,32110,-6524,32107,-6541,32104,-6557,32100,-6574,32097,-6590,32094,-6607,32090,-6623,32087,-6639,32084,-6656,32080,-6672,32077,-6689,32073,-6705,32070,-6721,32066,-6738,32063,-6754,32059,-6771,32056,-6787,32053,-6803,32049,-6820,32046,-6836,32042,-6852,32039,-6869,32035,-6885,32032,-6902,32028,-6918,32024,-6934,32021,-6951,32017,-6967,32014,-6983,32010,-7000,32007,-7016,32003,-7033,31999,-7049,31996,-7065,31992,-7082,31989,-7098,31985,-7114,31981,-7131,31978,-7147,31974,-7163,31970,-7180,31967,-7196,31963,-7212,31959,-7229,31956,-7245,31952,-7262,31948,-7278,31944,-7294,31941,-7311,31937,-7327,31933,-7343,31929,-7359,31926,-7376,31922,-7392,31918,-7408,31914,-7425,31911,-7441,31907,-7457,31903,-7474,31899,-7490,31895,-7506,31891,-7523,31888,-7539,31884,-7555,31880,-7572,31876,-7588,31872,-7604,31868,-7620,31864,-7637,31860,-7653,31856,-7669,31853,-7686,31849,-7702,31845,-7718,31841,-7734,31837,-7751,31833,-7767,31829,-7783,31825,-7800,31821,-7816,31817,-7832,31813,-7848,31809,-7865,31805,-7881,31801,-7897,31797,-7913,31793,-7930,31789,-7946,31785,-7962,31780,-7978,31776,-7995,31772,-8011,31768,-8027,31764,-8043,31760,-8060,31756,-8076,31752,-8092,31748,-8108,31743,-8125,31739,-8141,31735,-8157,31731,-8173,31727,-8190,31723,-8206,31718,-8222,31714,-8238,31710,-8254,31706,-8271,31701,-8287,31697,-8303,31693,-8319,31689,-8335,31684,-8352,31680,-8368,31676,-8384,31672,-8400,31667,-8416,31663,-8433,31659,-8449,31654,-8465,31650,-8481,31646,-8497,31641,-8514,31637,-8530,31633,-8546,31628,-8562,31624,-8578,31619,-8594,31615,-8611,31611,-8627,31606,-8643,31602,-8659,31597,-8675,31593,-8691,31588,-8708,31584,-8724,31580,-8740,31575,-8756,31571,-8772,31566,-8788,31562,-8804,31557,-8821,31553,-8837,31548,-8853,31544,-8869,31539,-8885,31534,-8901,31530,-8917,31525,-8933,31521,-8950,31516,-8966,31512,-8982,31507,-8998,31502,-9014,31498,-9030,31493,-9046,31489,-9062,31484,-9078,31479,-9095,31475,-9111,31470,-9127,31465,-9143,31461,-9159,31456,-9175,31451,-9191,31446,-9207,31442,-9223,31437,-9239,31432,-9255,31428,-9271,31423,-9288,31418,-9304,31413,-9320,31409,-9336,31404,-9352,31399,-9368,31394,-9384,31389,-9400,31385,-9416,31380,-9432,31375,-9448,31370,-9464,31365,-9480,31360,-9496,31356,-9512,31351,-9528,31346,-9544,31341,-9560,31336,-9576,31331,-9592,31326,-9608,31321,-9624,31316,-9640,31311,-9656,31307,-9672,31302,-9688,31297,-9704,31292,-9720,31287,-9736,31282,-9752,31277,-9768,31272,-9784,31267,-9800,31262,-9816,31257,-9832,31252,-9848,31247,-9864,31242,-9880,31236,-9896,31231,-9912,31226,-9928,31221,-9944,31216,-9960,31211,-9976,31206,-9992,31201,-10008,31196,-10024,31191,-10040,31185,-10056,31180,-10072,31175,-10088,31170,-10104,31165,-10120,31160,-10136,31154,-10152,31149,-10167,31144,-10183,31139,-10199,31134,-10215,31128,-10231,31123,-10247,31118,-10263,31113,-10279,31107,-10295,31102,-10311,31097,-10327,31092,-10343,31086,-10358,31081,-10374,31076,-10390,31070,-10406,31065,-10422,31060,-10438,31054,-10454,31049,-10470,31044,-10485,31038,-10501,31033,-10517,31028,-10533,31022,-10549,31017,-10565,31011,-10581,31006,-10597,31001,-10612,30995,-10628,30990,-10644,30984,-10660,30979,-10676,30973,-10692,30968,-10707,30962,-10723,30957,-10739,30951,-10755,30946,-10771,30940,-10787,30935,-10802,30929,-10818,30924,-10834,30918,-10850,30913,-10866,30907,-10881,30902,-10897,30896,-10913,30890,-10929,30885,-10945,30879,-10960,30874,-10976,30868,-10992,30862,-11008,30857,-11024,30851,-11039,30845,-11055,30840,-11071,30834,-11087,30828,-11102,30823,-11118,30817,-11134,30811,-11150,30806,-11165,30800,-11181,30794,-11197,30788,-11213,30783,-11228,30777,-11244,30771,-11260,30766,-11276,30760,-11291,30754,-11307,30748,-11323,30742,-11339,30737,-11354,30731,-11370,30725,-11386,30719,-11401,30713,-11417,30707,-11433,30702,-11449,30696,-11464,30690,-11480,30684,-11496,30678,-11511,30672,-11527,30666,-11543,30660,-11558,30655,-11574,30649,-11590,30643,-11605,30637,-11621,30631,-11637,30625,-11652,30619,-11668,30613,-11684,30607,-11699,30601,-11715,30595,-11731,30589,-11746,30583,-11762,30577,-11778,30571,-11793,30565,-11809,30559,-11824,30553,-11840,30547,-11856,30541,-11871,30535,-11887,30528,-11903,30522,-11918,30516,-11934,30510,-11949,30504,-11965,30498,-11981,30492,-11996,30486,-12012,30480,-12027,30473,-12043,30467,-12058,30461,-12074,30455,-12090,30449,-12105,30442,-12121,30436,-12136,30430,-12152,30424,-12167,30418,-12183,30411,-12199,30405,-12214,30399,-12230,30393,-12245,30386,-12261,30380,-12276,30374,-12292,30368,-12307,30361,-12323,30355,-12338,30349,-12354,30342,-12369,30336,-12385,30330,-12400,30323,-12416,30317,-12431,30311,-12447,30304,-12462,30298,-12478,30291,-12493,30285,-12509,30279,-12524,30272,-12540,30266,-12555,30259,-12571,30253,-12586,30247,-12602,30240,-12617,30234,-12633,30227,-12648,30221,-12664,30214,-12679,30208,-12695,30201,-12710,30195,-12725,30188,-12741,30182,-12756,30175,-12772,30169,-12787,30162,-12803,30156,-12818,30149,-12833,30142,-12849,30136,-12864,30129,-12880,30123,-12895,30116,-12910,30109,-12926,30103,-12941,30096,-12957,30090,-12972,30083,-12987,30076,-13003,30070,-13018,30063,-13034,30056,-13049,30050,-13064,30043,-13080,30036,-13095,30030,-13110,30023,-13126,30016,-13141,30009,-13156,30003,-13172,29996,-13187,29989,-13202,29983,-13218,29976,-13233,29969,-13248,29962,-13264,29955,-13279,29949,-13294,29942,-13310,29935,-13325,29928,-13340,29921,-13356,29915,-13371,29908,-13386,29901,-13401,29894,-13417,29887,-13432,29880,-13447,29873,-13463,29866,-13478,29860,-13493,29853,-13508,29846,-13524,29839,-13539,29832,-13554,29825,-13569,29818,-13585,29811,-13600,29804,-13615,29797,-13630,29790,-13646,29783,-13661,29776,-13676,29769,-13691,29762,-13707,29755,-13722,29748,-13737,29741,-13752,29734,-13767,29727,-13783,29720,-13798,29713,-13813,29706,-13828,29699,-13843,29692,-13859,29685,-13874,29678,-13889,29670,-13904,29663,-13919,29656,-13934,29649,-13950,29642,-13965,29635,-13980,29628,-13995,29621,-14010,29613,-14025,29606,-14040,29599,-14056,29592,-14071,29585,-14086,29577,-14101,29570,-14116,29563,-14131,29556,-14146,29548,-14161,29541,-14177,29534,-14192,29527,-14207,29519,-14222,29512,-14237,29505,-14252,29498,-14267,29490,-14282,29483,-14297,29476,-14312,29468,-14327,29461,-14343,29454,-14358,29446,-14373,29439,-14388,29432,-14403,29424,-14418,29417,-14433,29410,-14448,29402,-14463,29395,-14478,29387,-14493,29380,-14508,29372,-14523,29365,-14538,29358,-14553,29350,-14568,29343,-14583,29335,-14598,29328,-14613,29320,-14628,29313,-14643,29305,-14658,29298,-14673,29290,-14688,29283,-14703,29275,-14718,29268,-14733,29260,-14748,29253,-14763,29245,-14778,29238,-14793,29230,-14808,29222,-14823,29215,-14838,29207,-14853,29200,-14867,29192,-14882,29184,-14897,29177,-14912,29169,-14927,29162,-14942,29154,-14957,29146,-14972,29139,-14987,29131,-15002,29123,-15017,29116,-15031,29108,-15046,29100,-15061,29092,-15076,29085,-15091,29077,-15106,29069,-15121,29062,-15136,29054,-15150,29046,-15165,29038,-15180,29031,-15195,29023,-15210,29015,-15225,29007,-15239,28999,-15254,28992,-15269,28984,-15284,28976,-15299,28968,-15314,28960,-15328,28953,-15343,28945,-15358,28937,-15373,28929,-15388,28921,-15402,28913,-15417,28905,-15432,28897,-15447,28890,-15462,28882,-15476,28874,-15491,28866,-15506,28858,-15521,28850,-15535,28842,-15550,28834,-15565,28826,-15580,28818,-15594,28810,-15609,28802,-15624,28794,-15639,28786,-15653,28778,-15668,28770,-15683,28762,-15697,28754,-15712,28746,-15727,28738,-15741,28730,-15756,28722,-15771,28714,-15786,28706,-15800,28698,-15815,28690,-15830,28681,-15844,28673,-15859,28665,-15874,28657,-15888,28649,-15903,28641,-15918,28633,-15932,28625,-15947,28616,-15961,28608,-15976,28600,-15991,28592,-16005,28584,-16020,28575,-16035,28567,-16049,28559,-16064,28551,-16078,28543,-16093,28534,-16108,28526,-16122,28518,-16137,28510,-16151,28501,-16166,28493,-16180,28485,-16195,28477,-16210,28468,-16224,28460,-16239,28452,-16253,28443,-16268,28435,-16282,28427,-16297,28418,-16311,28410,-16326,28402,-16340,28393,-16355,28385,-16369,28377,-16384,28368,-16399,28360,-16413,28351,-16428,28343,-16442,28335,-16456,28326,-16471,28318,-16485,28309,-16500,28301,-16514,28292,-16529,28284,-16543,28275,-16558,28267,-16572,28259,-16587,28250,-16601,28242,-16616,28233,-16630,28225,-16644,28216,-16659,28208,-16673,28199,-16688,28190,-16702,28182,-16717,28173,-16731,28165,-16745,28156,-16760,28148,-16774,28139,-16789,28131,-16803,28122,-16817,28113,-16832,28105,-16846,28096,-16860,28087,-16875,28079,-16889,28070,-16904,28062,-16918,28053,-16932,28044,-16947,28036,-16961,28027,-16975,28018,-16990,28009,-17004,28001,-17018,27992,-17033,27983,-17047,27975,-17061,27966,-17075,27957,-17090,27948,-17104,27940,-17118,27931,-17133,27922,-17147,27913,-17161,27905,-17175,27896,-17190,27887,-17204,27878,-17218,27869,-17233,27861,-17247,27852,-17261,27843,-17275,27834,-17289,27825,-17304,27816,-17318,27808,-17332,27799,-17346,27790,-17361,27781,-17375,27772,-17389,27763,-17403,27754,-17417,27745,-17432,27736,-17446,27728,-17460,27719,-17474,27710,-17488,27701,-17502,27692,-17517,27683,-17531,27674,-17545,27665,-17559,27656,-17573,27647,-17587,27638,-17601,27629,-17616,27620,-17630,27611,-17644,27602,-17658,27593,-17672,27584,-17686,27575,-17700,27566,-17714,27557,-17728,27548,-17743,27538,-17757,27529,-17771,27520,-17785,27511,-17799,27502,-17813,27493,-17827,27484,-17841,27475,-17855,27466,-17869,27456,-17883,27447,-17897,27438,-17911,27429,-17925,27420,-17939,27411,-17953,27401,-17967,27392,-17981,27383,-17995,27374,-18009,27365,-18023,27355,-18037,27346,-18051,27337,-18065,27328,-18079,27319,-18093,27309,-18107,27300,-18121,27291,-18135,27281,-18149,27272,-18163,27263,-18177,27254,-18191,27244,-18205,27235,-18219,27226,-18233,27216,-18247,27207,-18261,27198,-18274,27188,-18288,27179,-18302,27170,-18316,27160,-18330,27151,-18344,27141,-18358,27132,-18372,27123,-18386,27113,-18399,27104,-18413,27094,-18427,27085,-18441,27076,-18455,27066,-18469,27057,-18483,27047,-18496,27038,-18510,27028,-18524,27019,-18538,27009,-18552,27000,-18565,26990,-18579,26981,-18593,26971,-18607,26962,-18621,26952,-18634,26943,-18648,26933,-18662,26924,-18676,26914,-18690,26905,-18703,26895,-18717,26885,-18731,26876,-18745,26866,-18758,26857,-18772,26847,-18786,26837,-18799,26828,-18813,26818,-18827,26809,-18841,26799,-18854,26789,-18868,26780,-18882,26770,-18895,26760,-18909,26751,-18923,26741,-18936,26731,-18950,26722,-18964,26712,-18977,26702,-18991,26692,-19005,26683,-19018,26673,-19032,26663,-19046,26654,-19059,26644,-19073,26634,-19087,26624,-19100,26615,-19114,26605,-19127,26595,-19141,26585,-19155,26575,-19168,26566,-19182,26556,-19195,26546,-19209,26536,-19222,26526,-19236,26516,-19250,26507,-19263,26497,-19277,26487,-19290,26477,-19304,26467,-19317,26457,-19331,26447,-19344,26437,-19358,26428,-19371,26418,-19385,26408,-19398,26398,-19412,26388,-19425,26378,-19439,26368,-19452,26358,-19466,26348,-19479,26338,-19493,26328,-19506,26318,-19520,26308,-19533,26298,-19547,26288,-19560,26278,-19574,26268,-19587,26258,-19600,26248,-19614,26238,-19627,26228,-19641,26218,-19654,26208,-19668,26198,-19681,26188,-19694,26178,-19708,26168,-19721,26158,-19734,26148,-19748,26137,-19761,26127,-19775,26117,-19788,26107,-19801,26097,-19815,26087,-19828,26077,-19841,26067,-19855,26056,-19868,26046,-19881,26036,-19895,26026,-19908,26016,-19921,26006,-19934,25995,-19948,25985,-19961,25975,-19974,25965,-19988,25954,-20001,25944,-20014,25934,-20027,25924,-20041,25913,-20054,25903,-20067,25893,-20080,25883,-20094,25872,-20107,25862,-20120,25852,-20133,25842,-20147,25831,-20160,25821,-20173,25811,-20186,25800,-20199,25790,-20213,25780,-20226,25769,-20239,25759,-20252,25749,-20265,25738,-20278,25728,-20292,25717,-20305,25707,-20318,25697,-20331,25686,-20344,25676,-20357,25665,-20370,25655,-20384,25645,-20397,25634,-20410,25624,-20423,25613,-20436,25603,-20449,25592,-20462,25582,-20475,25571,-20488,25561,-20501,25550,-20514,25540,-20528,25529,-20541,25519,-20554,25508,-20567,25498,-20580,25487,-20593,25477,-20606,25466,-20619,25456,-20632,25445,-20645,25435,-20658,25424,-20671,25414,-20684,25403,-20697,25392,-20710,25382,-20723,25371,-20736,25361,-20749,25350,-20762,25339,-20775,25329,-20788,25318,-20801,25307,-20814,25297,-20826,25286,-20839,25276,-20852,25265,-20865,25254,-20878,25243,-20891,25233,-20904,25222,-20917,25211,-20930,25201,-20943,25190,-20956,25179,-20968,25169,-20981,25158,-20994,25147,-21007,25136,-21020,25126,-21033,25115,-21046,25104,-21058,25093,-21071,25083,-21084,25072,-21097,25061,-21110,25050,-21123,25039,-21135,25029,-21148,25018,-21161,25007,-21174,24996,-21187,24985,-21199,24974,-21212,24964,-21225,24953,-21238,24942,-21250,24931,-21263,24920,-21276,24909,-21289,24898,-21301,24887,-21314,24877,-21327,24866,-21340,24855,-21352,24844,-21365,24833,-21378,24822,-21390,24811,-21403,24800,-21416,24789,-21428,24778,-21441,24767,-21454,24756,-21466,24745,-21479,24734,-21492,24723,-21504,24712,-21517,24701,-21530,24690,-21542,24679,-21555,24668,-21567,24657,-21580,24646,-21593,24635,-21605,24624,-21618,24613,-21630,24602,-21643,24591,-21656,24580,-21668,24569,-21681,24558,-21693,24546,-21706,24535,-21718,24524,-21731,24513,-21744,24502,-21756,24491,-21769,24480,-21781,24469,-21794,24457,-21806,24446,-21819,24435,-21831,24424,-21844,24413,-21856,24402,-21869,24390,-21881,24379,-21894,24368,-21906,24357,-21918,24346,-21931,24334,-21943,24323,-21956,24312,-21968,24301,-21981,24289,-21993,24278,-22005,24267,-22018,24256,-22030,24244,-22043,24233,-22055,24222,-22067,24211,-22080,24199,-22092,24188,-22105,24177,-22117,24165,-22129,24154,-22142,24143,-22154,24131,-22166,24120,-22179,24109,-22191,24097,-22203,24086,-22216,24075,-22228,24063,-22240,24052,-22253,24041,-22265,24029,-22277,24018,-22289,24006,-22302,23995,-22314,23984,-22326,23972,-22339,23961,-22351,23949,-22363,23938,-22375,23926,-22388,23915,-22400,23903,-22412,23892,-22424,23881,-22436,23869,-22449,23858,-22461,23846,-22473,23835,-22485,23823,-22497,23812,-22510,23800,-22522,23789,-22534,23777,-22546,23766,-22558,23754,-22570,23742,-22583,23731,-22595,23719,-22607,23708,-22619,23696,-22631,23685,-22643,23673,-22655,23661,-22667,23650,-22679,23638,-22692,23627,-22704,23615,-22716,23603,-22728,23592,-22740,23580,-22752,23569,-22764,23557,-22776,23545,-22788,23534,-22800,23522,-22812,23510,-22824,23499,-22836,23487,-22848,23475,-22860,23464,-22872,23452,-22884,23440,-22896,23428,-22908,23417,-22920,23405,-22932,23393,-22944,23382,-22956,23370,-22968,23358,-22980,23346,-22992,23335,-23004,23323,-23016,23311,-23028,23299,-23040,23287,-23051,23276,-23063,23264,-23075,23252,-23087,23240,-23099,23228,-23111,23217,-23123,23205,-23135,23193,-23147,23181,-23158,23169,-23170,23157,-23182,23146,-23194,23134,-23206,23122,-23218,23110,-23229,23098,-23241,23086,-23253,23074,-23265,23062,-23277,23050,-23288,23039,-23300,23027,-23312,23015,-23324,23003,-23336,22991,-23347,22979,-23359,22967,-23371,22955,-23383,22943,-23394,22931,-23406,22919,-23418,22907,-23429,22895,-23441,22883,-23453,22871,-23465,22859,-23476,22847,-23488,22835,-23500,22823,-23511,22811,-23523,22799,-23535,22787,-23546,22775,-23558,22763,-23570,22751,-23581,22739,-23593,22727,-23604,22715,-23616,22703,-23628,22691,-23639,22678,-23651,22666,-23662,22654,-23674,22642,-23686,22630,-23697,22618,-23709,22606,-23720,22594,-23732,22582,-23743,22569,-23755,22557,-23767,22545,-23778,22533,-23790,22521,-23801,22509,-23813,22496,-23824,22484,-23836,22472,-23847,22460,-23859,22448,-23870,22435,-23882,22423,-23893,22411,-23904,22399,-23916,22387,-23927,22374,-23939,22362,-23950,22350,-23962,22338,-23973,22325,-23985,22313,-23996,22301,-24007,22288,-24019,22276,-24030,22264,-24042,22252,-24053,22239,-24064,22227,-24076,22215,-24087,22202,-24098,22190,-24110,22178,-24121,22165,-24132,22153,-24144,22141,-24155,22128,-24166,22116,-24178,22104,-24189,22091,-24200,22079,-24212,22066,-24223,22054,-24234,22042,-24245,22029,-24257,22017,-24268,22004,-24279,21992,-24290,21980,-24302,21967,-24313,21955,-24324,21942,-24335,21930,-24347,21917,-24358,21905,-24369,21893,-24380,21880,-24391,21868,-24403,21855,-24414,21843,-24425,21830,-24436,21818,-24447,21805,-24458,21793,-24470,21780,-24481,21768,-24492,21755,-24503,21743,-24514,21730,-24525,21717,-24536,21705,-24547,21692,-24559,21680,-24570,21667,-24581,21655,-24592,21642,-24603,21629,-24614,21617,-24625,21604,-24636,21592,-24647,21579,-24658,21566,-24669,21554,-24680,21541,-24691,21529,-24702,21516,-24713,21503,-24724,21491,-24735,21478,-24746,21465,-24757,21453,-24768,21440,-24779,21427,-24790,21415,-24801,21402,-24812,21389,-24823,21377,-24834,21364,-24845,21351,-24856,21339,-24867,21326,-24878,21313,-24888,21300,-24899,21288,-24910,21275,-24921,21262,-24932,21249,-24943,21237,-24954,21224,-24965,21211,-24975,21198,-24986,21186,-24997,21173,-25008,21160,-25019,21147,-25030,21134,-25040,21122,-25051,21109,-25062,21096,-25073,21083,-25084,21070,-25094,21057,-25105,21045,-25116,21032,-25127,21019,-25137,21006,-25148,20993,-25159,20980,-25170,20967,-25180,20955,-25191,20942,-25202,20929,-25212,20916,-25223,20903,-25234,20890,-25244,20877,-25255,20864,-25266,20851,-25277,20838,-25287,20825,-25298,20813,-25308,20800,-25319,20787,-25330,20774,-25340,20761,-25351,20748,-25362,20735,-25372,20722,-25383,20709,-25393,20696,-25404,20683,-25415,20670,-25425,20657,-25436,20644,-25446,20631,-25457,20618,-25467,20605,-25478,20592,-25488,20579,-25499,20566,-25509,20553,-25520,20540,-25530,20527,-25541,20513,-25551,20500,-25562,20487,-25572,20474,-25583,20461,-25593,20448,-25604,20435,-25614,20422,-25625,20409,-25635,20396,-25646,20383,-25656,20369,-25666,20356,-25677,20343,-25687,20330,-25698,20317,-25708,20304,-25718,20291,-25729,20277,-25739,20264,-25750,20251,-25760,20238,-25770,20225,-25781,20212,-25791,20198,-25801,20185,-25812,20172,-25822,20159,-25832,20146,-25843,20132,-25853,20119,-25863,20106,-25873,20093,-25884,20079,-25894,20066,-25904,20053,-25914,20040,-25925,20026,-25935,20013,-25945,20000,-25955,19987,-25966,19973,-25976,19960,-25986,19947,-25996,19933,-26007,19920,-26017,19907,-26027,19894,-26037,19880,-26047,19867,-26057,19854,-26068,19840,-26078,19827,-26088,19814,-26098,19800,-26108,19787,-26118,19774,-26128,19760,-26138,19747,-26149,19733,-26159,19720,-26169,19707,-26179,19693,-26189,19680,-26199,19667,-26209,19653,-26219,19640,-26229,19626,-26239,19613,-26249,19599,-26259,19586,-26269,19573,-26279,19559,-26289,19546,-26299,19532,-26309,19519,-26319,19505,-26329,19492,-26339,19478,-26349,19465,-26359,19451,-26369,19438,-26379,19424,-26389,19411,-26399,19397,-26409,19384,-26419,19370,-26429,19357,-26438,19343,-26448,19330,-26458,19316,-26468,19303,-26478,19289,-26488,19276,-26498,19262,-26508,19249,-26517,19235,-26527,19221,-26537,19208,-26547,19194,-26557,19181,-26567,19167,-26576,19154,-26586,19140,-26596,19126,-26606,19113,-26616,19099,-26625,19086,-26635,19072,-26645,19058,-26655,19045,-26664,19031,-26674,19017,-26684,19004,-26693,18990,-26703,18976,-26713,18963,-26723,18949,-26732,18935,-26742,18922,-26752,18908,-26761,18894,-26771,18881,-26781,18867,-26790,18853,-26800,18840,-26810,18826,-26819,18812,-26829,18798,-26838,18785,-26848,18771,-26858,18757,-26867,18744,-26877,18730,-26886,18716,-26896,18702,-26906,18689,-26915,18675,-26925,18661,-26934,18647,-26944,18633,-26953,18620,-26963,18606,-26972,18592,-26982,18578,-26991,18564,-27001,18551,-27010,18537,-27020,18523,-27029,18509,-27039,18495,-27048,18482,-27058,18468,-27067,18454,-27077,18440,-27086,18426,-27095,18412,-27105,18398,-27114,18385,-27124,18371,-27133,18357,-27142,18343,-27152,18329,-27161,18315,-27171,18301,-27180,18287,-27189,18273,-27199,18260,-27208,18246,-27217,18232,-27227,18218,-27236,18204,-27245,18190,-27255,18176,-27264,18162,-27273,18148,-27282,18134,-27292,18120,-27301,18106,-27310,18092,-27320,18078,-27329,18064,-27338,18050,-27347,18036,-27356,18022,-27366,18008,-27375,17994,-27384,17980,-27393,17966,-27402,17952,-27412,17938,-27421,17924,-27430,17910,-27439,17896,-27448,17882,-27457,17868,-27467,17854,-27476,17840,-27485,17826,-27494,17812,-27503,17798,-27512,17784,-27521,17770,-27530,17756,-27539,17742,-27549,17727,-27558,17713,-27567,17699,-27576,17685,-27585,17671,-27594,17657,-27603,17643,-27612,17629,-27621,17615,-27630,17600,-27639,17586,-27648,17572,-27657,17558,-27666,17544,-27675,17530,-27684,17516,-27693,17501,-27702,17487,-27711,17473,-27720,17459,-27729,17445,-27737,17431,-27746,17416,-27755,17402,-27764,17388,-27773,17374,-27782,17360,-27791,17345,-27800,17331,-27809,17317,-27817,17303,-27826,17288,-27835,17274,-27844,17260,-27853,17246,-27862,17232,-27870,17217,-27879,17203,-27888,17189,-27897,17174,-27906,17160,-27914,17146,-27923,17132,-27932,17117,-27941,17103,-27949,17089,-27958,17074,-27967,17060,-27976,17046,-27984,17032,-27993,17017,-28002,17003,-28010,16989,-28019,16974,-28028,16960,-28037,16946,-28045,16931,-28054,16917,-28063,16903,-28071,16888,-28080,16874,-28088,16859,-28097,16845,-28106,16831,-28114,16816,-28123,16802,-28132,16788,-28140,16773,-28149,16759,-28157,16744,-28166,16730,-28174,16716,-28183,16701,-28191,16687,-28200,16672,-28209,16658,-28217,16643,-28226,16629,-28234,16615,-28243,16600,-28251,16586,-28260,16571,-28268,16557,-28276,16542,-28285,16528,-28293,16513,-28302,16499,-28310,16484,-28319,16470,-28327,16455,-28336,16441,-28344,16427,-28352,16412,-28361,16398,-28369,16383,-28378,16368,-28386,16354,-28394,16339,-28403,16325,-28411,16310,-28419,16296,-28428,16281,-28436,16267,-28444,16252,-28453,16238,-28461,16223,-28469,16209,-28478,16194,-28486,16179,-28494,16165,-28502,16150,-28511,16136,-28519,16121,-28527,16107,-28535,16092,-28544,16077,-28552,16063,-28560,16048,-28568,16034,-28576,16019,-28585,16004,-28593,15990,-28601,15975,-28609,15960,-28617,15946,-28626,15931,-28634,15917,-28642,15902,-28650,15887,-28658,15873,-28666,15858,-28674,15843,-28682,15829,-28691,15814,-28699,15799,-28707,15785,-28715,15770,-28723,15755,-28731,15740,-28739,15726,-28747,15711,-28755,15696,-28763,15682,-28771,15667,-28779,15652,-28787,15638,-28795,15623,-28803,15608,-28811,15593,-28819,15579,-28827,15564,-28835,15549,-28843,15534,-28851,15520,-28859,15505,-28867,15490,-28875,15475,-28883,15461,-28891,15446,-28898,15431,-28906,15416,-28914,15401,-28922,15387,-28930,15372,-28938,15357,-28946,15342,-28954,15327,-28961,15313,-28969,15298,-28977,15283,-28985,15268,-28993,15253,-29000,15238,-29008,15224,-29016,15209,-29024,15194,-29032,15179,-29039,15164,-29047,15149,-29055,15135,-29063,15120,-29070,15105,-29078,15090,-29086,15075,-29093,15060,-29101,15045,-29109,15030,-29117,15016,-29124,15001,-29132,14986,-29140,14971,-29147,14956,-29155,14941,-29163,14926,-29170,14911,-29178,14896,-29185,14881,-29193,14866,-29201,14852,-29208,14837,-29216,14822,-29223,14807,-29231,14792,-29239,14777,-29246,14762,-29254,14747,-29261,14732,-29269,14717,-29276,14702,-29284,14687,-29291,14672,-29299,14657,-29306,14642,-29314,14627,-29321,14612,-29329,14597,-29336,14582,-29344,14567,-29351,14552,-29359,14537,-29366,14522,-29373,14507,-29381,14492,-29388,14477,-29396,14462,-29403,14447,-29411,14432,-29418,14417,-29425,14402,-29433,14387,-29440,14372,-29447,14357,-29455,14342,-29462,14326,-29469,14311,-29477,14296,-29484,14281,-29491,14266,-29499,14251,-29506,14236,-29513,14221,-29520,14206,-29528,14191,-29535,14176,-29542,14160,-29549,14145,-29557,14130,-29564,14115,-29571,14100,-29578,14085,-29586,14070,-29593,14055,-29600,14039,-29607,14024,-29614,14009,-29622,13994,-29629,13979,-29636,13964,-29643,13949,-29650,13933,-29657,13918,-29664,13903,-29671,13888,-29679,13873,-29686,13858,-29693,13842,-29700,13827,-29707,13812,-29714,13797,-29721,13782,-29728,13766,-29735,13751,-29742,13736,-29749,13721,-29756,13706,-29763,13690,-29770,13675,-29777,13660,-29784,13645,-29791,13629,-29798,13614,-29805,13599,-29812,13584,-29819,13568,-29826,13553,-29833,13538,-29840,13523,-29847,13507,-29854,13492,-29861,13477,-29867,13462,-29874,13446,-29881,13431,-29888,13416,-29895,13400,-29902,13385,-29909,13370,-29916,13355,-29922,13339,-29929,13324,-29936,13309,-29943,13293,-29950,13278,-29956,13263,-29963,13247,-29970,13232,-29977,13217,-29984,13201,-29990,13186,-29997,13171,-30004,13155,-30010,13140,-30017,13125,-30024,13109,-30031,13094,-30037,13079,-30044,13063,-30051,13048,-30057,13033,-30064,13017,-30071,13002,-30077,12986,-30084,12971,-30091,12956,-30097,12940,-30104,12925,-30110,12909,-30117,12894,-30124,12879,-30130,12863,-30137,12848,-30143,12832,-30150,12817,-30157,12802,-30163,12786,-30170,12771,-30176,12755,-30183,12740,-30189,12724,-30196,12709,-30202,12694,-30209,12678,-30215,12663,-30222,12647,-30228,12632,-30235,12616,-30241,12601,-30248,12585,-30254,12570,-30260,12554,-30267,12539,-30273,12523,-30280,12508,-30286,12492,-30292,12477,-30299,12461,-30305,12446,-30312,12430,-30318,12415,-30324,12399,-30331,12384,-30337,12368,-30343,12353,-30350,12337,-30356,12322,-30362,12306,-30369,12291,-30375,12275,-30381,12260,-30387,12244,-30394,12229,-30400,12213,-30406,12198,-30412,12182,-30419,12166,-30425,12151,-30431,12135,-30437,12120,-30443,12104,-30450,12089,-30456,12073,-30462,12057,-30468,12042,-30474,12026,-30481,12011,-30487,11995,-30493,11980,-30499,11964,-30505,11948,-30511,11933,-30517,11917,-30523,11902,-30529,11886,-30536,11870,-30542,11855,-30548,11839,-30554,11823,-30560,11808,-30566,11792,-30572,11777,-30578,11761,-30584,11745,-30590,11730,-30596,11714,-30602,11698,-30608,11683,-30614,11667,-30620,11651,-30626,11636,-30632,11620,-30638,11604,-30644,11589,-30650,11573,-30656,11557,-30661,11542,-30667,11526,-30673,11510,-30679,11495,-30685,11479,-30691,11463,-30697,11448,-30703,11432,-30708,11416,-30714,11400,-30720,11385,-30726,11369,-30732,11353,-30738,11338,-30743,11322,-30749,11306,-30755,11290,-30761,11275,-30767,11259,-30772,11243,-30778,11227,-30784,11212,-30789,11196,-30795,11180,-30801,11164,-30807,11149,-30812,11133,-30818,11117,-30824,11101,-30829,11086,-30835,11070,-30841,11054,-30846,11038,-30852,11023,-30858,11007,-30863,10991,-30869,10975,-30875,10959,-30880,10944,-30886,10928,-30891,10912,-30897,10896,-30903,10880,-30908,10865,-30914,10849,-30919,10833,-30925,10817,-30930,10801,-30936,10786,-30941,10770,-30947,10754,-30952,10738,-30958,10722,-30963,10706,-30969,10691,-30974,10675,-30980,10659,-30985,10643,-30991,10627,-30996,10611,-31002,10596,-31007,10580,-31012,10564,-31018,10548,-31023,10532,-31029,10516,-31034,10500,-31039,10484,-31045,10469,-31050,10453,-31055,10437,-31061,10421,-31066,10405,-31071,10389,-31077,10373,-31082,10357,-31087,10342,-31093,10326,-31098,10310,-31103,10294,-31108,10278,-31114,10262,-31119,10246,-31124,10230,-31129,10214,-31135,10198,-31140,10182,-31145,10166,-31150,10151,-31155,10135,-31161,10119,-31166,10103,-31171,10087,-31176,10071,-31181,10055,-31186,10039,-31192,10023,-31197,10007,-31202,9991,-31207,9975,-31212,9959,-31217,9943,-31222,9927,-31227,9911,-31232,9895,-31237,9879,-31243,9863,-31248,9847,-31253,9831,-31258,9815,-31263,9799,-31268,9783,-31273,9767,-31278,9751,-31283,9735,-31288,9719,-31293,9703,-31298,9687,-31303,9671,-31308,9655,-31312,9639,-31317,9623,-31322,9607,-31327,9591,-31332,9575,-31337,9559,-31342,9543,-31347,9527,-31352,9511,-31357,9495,-31361,9479,-31366,9463,-31371,9447,-31376,9431,-31381,9415,-31386,9399,-31390,9383,-31395,9367,-31400,9351,-31405,9335,-31410,9319,-31414,9303,-31419,9287,-31424,9270,-31429,9254,-31433,9238,-31438,9222,-31443,9206,-31447,9190,-31452,9174,-31457,9158,-31462,9142,-31466,9126,-31471,9110,-31476,9094,-31480,9077,-31485,9061,-31490,9045,-31494,9029,-31499,9013,-31503,8997,-31508,8981,-31513,8965,-31517,8949,-31522,8932,-31526,8916,-31531,8900,-31535,8884,-31540,8868,-31545,8852,-31549,8836,-31554,8820,-31558,8803,-31563,8787,-31567,8771,-31572,8755,-31576,8739,-31581,8723,-31585,8707,-31589,8690,-31594,8674,-31598,8658,-31603,8642,-31607,8626,-31612,8610,-31616,8593,-31620,8577,-31625,8561,-31629,8545,-31634,8529,-31638,8513,-31642,8496,-31647,8480,-31651,8464,-31655,8448,-31660,8432,-31664,8415,-31668,8399,-31673,8383,-31677,8367,-31681,8351,-31685,8334,-31690,8318,-31694,8302,-31698,8286,-31702,8270,-31707,8253,-31711,8237,-31715,8221,-31719,8205,-31724,8189,-31728,8172,-31732,8156,-31736,8140,-31740,8124,-31744,8107,-31749,8091,-31753,8075,-31757,8059,-31761,8042,-31765,8026,-31769,8010,-31773,7994,-31777,7977,-31781,7961,-31786,7945,-31790,7929,-31794,7912,-31798,7896,-31802,7880,-31806,7864,-31810,7847,-31814,7831,-31818,7815,-31822,7799,-31826,7782,-31830,7766,-31834,7750,-31838,7733,-31842,7717,-31846,7701,-31850,7685,-31854,7668,-31857,7652,-31861,7636,-31865,7619,-31869,7603,-31873,7587,-31877,7571,-31881,7554,-31885,7538,-31889,7522,-31892,7505,-31896,7489,-31900,7473,-31904,7456,-31908,7440,-31912,7424,-31915,7407,-31919,7391,-31923,7375,-31927,7358,-31930,7342,-31934,7326,-31938,7310,-31942,7293,-31945,7277,-31949,7261,-31953,7244,-31957,7228,-31960,7211,-31964,7195,-31968,7179,-31971,7162,-31975,7146,-31979,7130,-31982,7113,-31986,7097,-31990,7081,-31993,7064,-31997,7048,-32000,7032,-32004,7015,-32008,6999,-32011,6982,-32015,6966,-32018,6950,-32022,6933,-32025,6917,-32029,6901,-32033,6884,-32036,6868,-32040,6851,-32043,6835,-32047,6819,-32050,6802,-32054,6786,-32057,6770,-32060,6753,-32064,6737,-32067,6720,-32071,6704,-32074,6688,-32078,6671,-32081,6655,-32085,6638,-32088,6622,-32091,6606,-32095,6589,-32098,6573,-32101,6556,-32105,6540,-32108,6523,-32111,6507,-32115,6491,-32118,6474,-32121,6458,-32125,6441,-32128,6425,-32131,6408,-32135,6392,-32138,6376,-32141,6359,-32144,6343,-32148,6326,-32151,6310,-32154,6293,-32157,6277,-32161,6261,-32164,6244,-32167,6228,-32170,6211,-32173,6195,-32177,6178,-32180,6162,-32183,6145,-32186,6129,-32189,6112,-32192,6096,-32195,6080,-32198,6063,-32202,6047,-32205,6030,-32208,6014,-32211,5997,-32214,5981,-32217,5964,-32220,5948,-32223,5931,-32226,5915,-32229,5898,-32232,5882,-32235,5865,-32238,5849,-32241,5832,-32244,5816,-32247,5799,-32250,5783,-32253,5766,-32256,5750,-32259,5733,-32262,5717,-32265,5700,-32268,5684,-32271,5667,-32274,5651,-32276,5634,-32279,5618,-32282,5601,-32285,5585,-32288,5568,-32291,5552,-32294,5535,-32296,5519,-32299,5502,-32302,5486,-32305,5469,-32308,5453,-32311,5436,-32313,5420,-32316,5403,-32319,5387,-32322,5370,-32324,5354,-32327,5337,-32330,5321,-32333,5304,-32335,5287,-32338,5271,-32341,5254,-32343,5238,-32346,5221,-32349,5205,-32351,5188,-32354,5172,-32357,5155,-32359,5139,-32362,5122,-32365,5106,-32367,5089,-32370,5072,-32372,5056,-32375,5039,-32378,5023,-32380,5006,-32383,4990,-32385,4973,-32388,4957,-32390,4940,-32393,4923,-32395,4907,-32398,4890,-32400,4874,-32403,4857,-32405,4841,-32408,4824,-32410,4807,-32413,4791,-32415,4774,-32418,4758,-32420,4741,-32423,4725,-32425,4708,-32427,4691,-32430,4675,-32432,4658,-32435,4642,-32437,4625,-32439,4608,-32442,4592,-32444,4575,-32446,4559,-32449,4542,-32451,4525,-32453,4509,-32456,4492,-32458,4476,-32460,4459,-32463,4443,-32465,4426,-32467,4409,-32469,4393,-32472,4376,-32474,4359,-32476,4343,-32478,4326,-32481,4310,-32483,4293,-32485,4276,-32487,4260,-32489,4243,-32492,4227,-32494,4210,-32496,4193,-32498,4177,-32500,4160,-32502,4144,-32504,4127,-32507,4110,-32509,4094,-32511,4077,-32513,4060,-32515,4044,-32517,4027,-32519,4011,-32521,3994,-32523,3977,-32525,3961,-32527,3944,-32529,3927,-32531,3911,-32533,3894,-32535,3877,-32537,3861,-32539,3844,-32541,3828,-32543,3811,-32545,3794,-32547,3778,-32549,3761,-32551,3744,-32553,3728,-32555,3711,-32557,3694,-32559,3678,-32560,3661,-32562,3644,-32564,3628,-32566,3611,-32568,3594,-32570,3578,-32572,3561,-32573,3545,-32575,3528,-32577,3511,-32579,3495,-32581,3478,-32582,3461,-32584,3445,-32586,3428,-32588,3411,-32589,3395,-32591,3378,-32593,3361,-32595,3345,-32596,3328,-32598,3311,-32600,3295,-32601,3278,-32603,3261,-32605,3245,-32606,3228,-32608,3211,-32610,3195,-32611,3178,-32613,3161,-32615,3145,-32616,3128,-32618,3111,-32619,3094,-32621,3078,-32623,3061,-32624,3044,-32626,3028,-32627,3011,-32629,2994,-32630,2978,-32632,2961,-32633,2944,-32635,2928,-32636,2911,-32638,2894,-32639,2878,-32641,2861,-32642,2844,-32644,2828,-32645,2811,-32647,2794,-32648,2777,-32650,2761,-32651,2744,-32652,2727,-32654,2711,-32655,2694,-32657,2677,-32658,2661,-32659,2644,-32661,2627,-32662,2610,-32663,2594,-32665,2577,-32666,2560,-32667,2544,-32669,2527,-32670,2510,-32671,2494,-32672,2477,-32674,2460,-32675,2443,-32676,2427,-32677,2410,-32679,2393,-32680,2377,-32681,2360,-32682,2343,-32684,2326,-32685,2310,-32686,2293,-32687,2276,-32688,2260,-32689,2243,-32691,2226,-32692,2209,-32693,2193,-32694,2176,-32695,2159,-32696,2143,-32697,2126,-32698,2109,-32700,2092,-32701,2076,-32702,2059,-32703,2042,-32704,2026,-32705,2009,-32706,1992,-32707,1975,-32708,1959,-32709,1942,-32710,1925,-32711,1908,-32712,1892,-32713,1875,-32714,1858,-32715,1842,-32716,1825,-32717,1808,-32718,1791,-32718,1775,-32719,1758,-32720,1741,-32721,1724,-32722,1708,-32723,1691,-32724,1674,-32725,1658,-32726,1641,-32726,1624,-32727,1607,-32728,1591,-32729,1574,-32730,1557,-32730,1540,-32731,1524,-32732,1507,-32733,1490,-32734,1473,-32734,1457,-32735,1440,-32736,1423,-32737,1406,-32737,1390,-32738,1373,-32739,1356,-32739,1339,-32740,1323,-32741,1306,-32741,1289,-32742,1273,-32743,1256,-32743,1239,-32744,1222,-32745,1206,-32745,1189,-32746,1172,-32747,1155,-32747,1139,-32748,1122,-32748,1105,-32749,1088,-32749,1072,-32750,1055,-32751,1038,-32751,1021,-32752,1005,-32752,988,-32753,971,-32753,954,-32754,938,-32754,921,-32755,904,-32755,887,-32755,871,-32756,854,-32756,837,-32757,820,-32757,804,-32758,787,-32758,770,-32758,753,-32759,737,-32759,720,-32760,703,-32760,686,-32760,670,-32761,653,-32761,636,-32761,619,-32762,603,-32762,586,-32762,569,-32763,552,-32763,536,-32763,519,-32763,502,-32764,485,-32764,469,-32764,452,-32764,435,-32765,418,-32765,402,-32765,385,-32765,368,-32765,351,-32766,335,-32766,318,-32766,301,-32766,284,-32766,268,-32766,251,-32767,234,-32767,217,-32767,201,-32767,184,-32767,167,-32767,150,-32767,134,-32767,117,-32767,100,-32767,83,-32767,67,-32767,50,-32767,33,-32767,16,-32767,0,-32767,-17,-32767,-34,-32767,-51,-32767,-68,-32767,-84,-32767,-101,-32767,-118,-32767,-135,-32767,-151,-32767,-168,-32767,-185,-32767,-202,-32767,-218,-32767,-235,-32767,-252,-32767,-269,-32766,-285,-32766,-302,-32766,-319,-32766,-336,-32766,-352,-32766,-369,-32765,-386,-32765,-403,-32765,-419,-32765,-436,-32765,-453,-32764,-470,-32764,-486,-32764,-503,-32764,-520,-32763,-537,-32763,-553,-32763,-570,-32763,-587,-32762,-604,-32762,-620,-32762,-637,-32761,-654,-32761,-671,-32761,-687,-32760,-704,-32760,-721,-32760,-738,-32759,-754,-32759,-771,-32758,-788,-32758,-805,-32758,-821,-32757,-838,-32757,-855,-32756,-872,-32756,-888,-32755,-905,-32755,-922,-32755,-939,-32754,-955,-32754,-972,-32753,-989,-32753,-1006,-32752,-1022,-32752,-1039,-32751,-1056,-32751,-1073,-32750,-1089,-32749,-1106,-32749,-1123,-32748,-1140,-32748,-1156,-32747,-1173,-32747,-1190,-32746,-1207,-32745,-1223,-32745,-1240,-32744,-1257,-32743,-1274,-32743,-1290,-32742,-1307,-32741,-1324,-32741,-1340,-32740,-1357,-32739,-1374,-32739,-1391,-32738,-1407,-32737,-1424,-32737,-1441,-32736,-1458,-32735,-1474,-32734,-1491,-32734,-1508,-32733,-1525,-32732,-1541,-32731,-1558,-32730,-1575,-32730,-1592,-32729,-1608,-32728,-1625,-32727,-1642,-32726,-1659,-32726,-1675,-32725,-1692,-32724,-1709,-32723,-1725,-32722,-1742,-32721,-1759,-32720,-1776,-32719,-1792,-32718,-1809,-32718,-1826,-32717,-1843,-32716,-1859,-32715,-1876,-32714,-1893,-32713,-1909,-32712,-1926,-32711,-1943,-32710,-1960,-32709,-1976,-32708,-1993,-32707,-2010,-32706,-2027,-32705,-2043,-32704,-2060,-32703,-2077,-32702,-2093,-32701,-2110,-32700,-2127,-32698,-2144,-32697,-2160,-32696,-2177,-32695,-2194,-32694,-2210,-32693,-2227,-32692,-2244,-32691,-2261,-32689,-2277,-32688,-2294,-32687,-2311,-32686,-2327,-32685,-2344,-32684,-2361,-32682,-2378,-32681,-2394,-32680,-2411,-32679,-2428,-32677,-2444,-32676,-2461,-32675,-2478,-32674,-2495,-32672,-2511,-32671,-2528,-32670,-2545,-32669,-2561,-32667,-2578,-32666,-2595,-32665,-2611,-32663,-2628,-32662,-2645,-32661,-2662,-32659,-2678,-32658,-2695,-32657,-2712,-32655,-2728,-32654,-2745,-32652,-2762,-32651,-2778,-32650,-2795,-32648,-2812,-32647,-2829,-32645,-2845,-32644,-2862,-32642,-2879,-32641,-2895,-32639,-2912,-32638,-2929,-32636,-2945,-32635,-2962,-32633,-2979,-32632,-2995,-32630,-3012,-32629,-3029,-32627,-3045,-32626,-3062,-32624,-3079,-32623,-3095,-32621,-3112,-32619,-3129,-32618,-3146,-32616,-3162,-32615,-3179,-32613,-3196,-32611,-3212,-32610,-3229,-32608,-3246,-32606,-3262,-32605,-3279,-32603,-3296,-32601,-3312,-32600,-3329,-32598,-3346,-32596,-3362,-32595,-3379,-32593,-3396,-32591,-3412,-32589,-3429,-32588,-3446,-32586,-3462,-32584,-3479,-32582,-3496,-32581,-3512,-32579,-3529,-32577,-3546,-32575,-3562,-32573,-3579,-32572,-3595,-32570,-3612,-32568,-3629,-32566,-3645,-32564,-3662,-32562,-3679,-32560,-3695,-32559,-3712,-32557,-3729,-32555,-3745,-32553,-3762,-32551,-3779,-32549,-3795,-32547,-3812,-32545,-3829,-32543,-3845,-32541,-3862,-32539,-3878,-32537,-3895,-32535,-3912,-32533,-3928,-32531,-3945,-32529,-3962,-32527,-3978,-32525,-3995,-32523,-4012,-32521,-4028,-32519,-4045,-32517,-4061,-32515,-4078,-32513,-4095,-32511,-4111,-32509,-4128,-32507,-4145,-32504,-4161,-32502,-4178,-32500,-4194,-32498,-4211,-32496,-4228,-32494,-4244,-32492,-4261,-32489,-4277,-32487,-4294,-32485,-4311,-32483,-4327,-32481,-4344,-32478,-4360,-32476,-4377,-32474,-4394,-32472,-4410,-32469,-4427,-32467,-4444,-32465,-4460,-32463,-4477,-32460,-4493,-32458,-4510,-32456,-4526,-32453,-4543,-32451,-4560,-32449,-4576,-32446,-4593,-32444,-4609,-32442,-4626,-32439,-4643,-32437,-4659,-32435,-4676,-32432,-4692,-32430,-4709,-32427,-4726,-32425,-4742,-32423,-4759,-32420,-4775,-32418,-4792,-32415,-4808,-32413,-4825,-32410,-4842,-32408,-4858,-32405,-4875,-32403,-4891,-32400,-4908,-32398,-4924,-32395,-4941,-32393,-4958,-32390,-4974,-32388,-4991,-32385,-5007,-32383,-5024,-32380,-5040,-32378,-5057,-32375,-5073,-32372,-5090,-32370,-5107,-32367,-5123,-32365,-5140,-32362,-5156,-32359,-5173,-32357,-5189,-32354,-5206,-32351,-5222,-32349,-5239,-32346,-5255,-32343,-5272,-32341,-5288,-32338,-5305,-32335,-5322,-32333,-5338,-32330,-5355,-32327,-5371,-32324,-5388,-32322,-5404,-32319,-5421,-32316,-5437,-32313,-5454,-32311,-5470,-32308,-5487,-32305,-5503,-32302,-5520,-32299,-5536,-32296,-5553,-32294,-5569,-32291,-5586,-32288,-5602,-32285,-5619,-32282,-5635,-32279,-5652,-32276,-5668,-32274,-5685,-32271,-5701,-32268,-5718,-32265,-5734,-32262,-5751,-32259,-5767,-32256,-5784,-32253,-5800,-32250,-5817,-32247,-5833,-32244,-5850,-32241,-5866,-32238,-5883,-32235,-5899,-32232,-5916,-32229,-5932,-32226,-5949,-32223,-5965,-32220,-5982,-32217,-5998,-32214,-6015,-32211,-6031,-32208,-6048,-32205,-6064,-32202,-6081,-32198,-6097,-32195,-6113,-32192,-6130,-32189,-6146,-32186,-6163,-32183,-6179,-32180,-6196,-32177,-6212,-32173,-6229,-32170,-6245,-32167,-6262,-32164,-6278,-32161,-6294,-32157,-6311,-32154,-6327,-32151,-6344,-32148,-6360,-32144,-6377,-32141,-6393,-32138,-6409,-32135,-6426,-32131,-6442,-32128,-6459,-32125,-6475,-32121,-6492,-32118,-6508,-32115,-6524,-32111,-6541,-32108,-6557,-32105,-6574,-32101,-6590,-32098,-6607,-32095,-6623,-32091,-6639,-32088,-6656,-32085,-6672,-32081,-6689,-32078,-6705,-32074,-6721,-32071,-6738,-32067,-6754,-32064,-6771,-32060,-6787,-32057,-6803,-32054,-6820,-32050,-6836,-32047,-6852,-32043,-6869,-32040,-6885,-32036,-6902,-32033,-6918,-32029,-6934,-32025,-6951,-32022,-6967,-32018,-6983,-32015,-7000,-32011,-7016,-32008,-7033,-32004,-7049,-32000,-7065,-31997,-7082,-31993,-7098,-31990,-7114,-31986,-7131,-31982,-7147,-31979,-7163,-31975,-7180,-31971,-7196,-31968,-7212,-31964,-7229,-31960,-7245,-31957,-7262,-31953,-7278,-31949,-7294,-31945,-7311,-31942,-7327,-31938,-7343,-31934,-7359,-31930,-7376,-31927,-7392,-31923,-7408,-31919,-7425,-31915,-7441,-31912,-7457,-31908,-7474,-31904,-7490,-31900,-7506,-31896,-7523,-31892,-7539,-31889,-7555,-31885,-7572,-31881,-7588,-31877,-7604,-31873,-7620,-31869,-7637,-31865,-7653,-31861,-7669,-31857,-7686,-31854,-7702,-31850,-7718,-31846,-7734,-31842,-7751,-31838,-7767,-31834,-7783,-31830,-7800,-31826,-7816,-31822,-7832,-31818,-7848,-31814,-7865,-31810,-7881,-31806,-7897,-31802,-7913,-31798,-7930,-31794,-7946,-31790,-7962,-31786,-7978,-31781,-7995,-31777,-8011,-31773,-8027,-31769,-8043,-31765,-8060,-31761,-8076,-31757,-8092,-31753,-8108,-31749,-8125,-31744,-8141,-31740,-8157,-31736,-8173,-31732,-8190,-31728,-8206,-31724,-8222,-31719,-8238,-31715,-8254,-31711,-8271,-31707,-8287,-31702,-8303,-31698,-8319,-31694,-8335,-31690,-8352,-31685,-8368,-31681,-8384,-31677,-8400,-31673,-8416,-31668,-8433,-31664,-8449,-31660,-8465,-31655,-8481,-31651,-8497,-31647,-8514,-31642,-8530,-31638,-8546,-31634,-8562,-31629,-8578,-31625,-8594,-31620,-8611,-31616,-8627,-31612,-8643,-31607,-8659,-31603,-8675,-31598,-8691,-31594,-8708,-31589,-8724,-31585,-8740,-31581,-8756,-31576,-8772,-31572,-8788,-31567,-8804,-31563,-8821,-31558,-8837,-31554,-8853,-31549,-8869,-31545,-8885,-31540,-8901,-31535,-8917,-31531,-8933,-31526,-8950,-31522,-8966,-31517,-8982,-31513,-8998,-31508,-9014,-31503,-9030,-31499,-9046,-31494,-9062,-31490,-9078,-31485,-9095,-31480,-9111,-31476,-9127,-31471,-9143,-31466,-9159,-31462,-9175,-31457,-9191,-31452,-9207,-31447,-9223,-31443,-9239,-31438,-9255,-31433,-9271,-31429,-9288,-31424,-9304,-31419,-9320,-31414,-9336,-31410,-9352,-31405,-9368,-31400,-9384,-31395,-9400,-31390,-9416,-31386,-9432,-31381,-9448,-31376,-9464,-31371,-9480,-31366,-9496,-31361,-9512,-31357,-9528,-31352,-9544,-31347,-9560,-31342,-9576,-31337,-9592,-31332,-9608,-31327,-9624,-31322,-9640,-31317,-9656,-31312,-9672,-31308,-9688,-31303,-9704,-31298,-9720,-31293,-9736,-31288,-9752,-31283,-9768,-31278,-9784,-31273,-9800,-31268,-9816,-31263,-9832,-31258,-9848,-31253,-9864,-31248,-9880,-31243,-9896,-31237,-9912,-31232,-9928,-31227,-9944,-31222,-9960,-31217,-9976,-31212,-9992,-31207,-10008,-31202,-10024,-31197,-10040,-31192,-10056,-31186,-10072,-31181,-10088,-31176,-10104,-31171,-10120,-31166,-10136,-31161,-10152,-31155,-10167,-31150,-10183,-31145,-10199,-31140,-10215,-31135,-10231,-31129,-10247,-31124,-10263,-31119,-10279,-31114,-10295,-31108,-10311,-31103,-10327,-31098,-10343,-31093,-10358,-31087,-10374,-31082,-10390,-31077,-10406,-31071,-10422,-31066,-10438,-31061,-10454,-31055,-10470,-31050,-10485,-31045,-10501,-31039,-10517,-31034,-10533,-31029,-10549,-31023,-10565,-31018,-10581,-31012,-10597,-31007,-10612,-31002,-10628,-30996,-10644,-30991,-10660,-30985,-10676,-30980,-10692,-30974,-10707,-30969,-10723,-30963,-10739,-30958,-10755,-30952,-10771,-30947,-10787,-30941,-10802,-30936,-10818,-30930,-10834,-30925,-10850,-30919,-10866,-30914,-10881,-30908,-10897,-30903,-10913,-30897,-10929,-30891,-10945,-30886,-10960,-30880,-10976,-30875,-10992,-30869,-11008,-30863,-11024,-30858,-11039,-30852,-11055,-30846,-11071,-30841,-11087,-30835,-11102,-30829,-11118,-30824,-11134,-30818,-11150,-30812,-11165,-30807,-11181,-30801,-11197,-30795,-11213,-30789,-11228,-30784,-11244,-30778,-11260,-30772,-11276,-30767,-11291,-30761,-11307,-30755,-11323,-30749,-11339,-30743,-11354,-30738,-11370,-30732,-11386,-30726,-11401,-30720,-11417,-30714,-11433,-30708,-11449,-30703,-11464,-30697,-11480,-30691,-11496,-30685,-11511,-30679,-11527,-30673,-11543,-30667,-11558,-30661,-11574,-30656,-11590,-30650,-11605,-30644,-11621,-30638,-11637,-30632,-11652,-30626,-11668,-30620,-11684,-30614,-11699,-30608,-11715,-30602,-11731,-30596,-11746,-30590,-11762,-30584,-11778,-30578,-11793,-30572,-11809,-30566,-11824,-30560,-11840,-30554,-11856,-30548,-11871,-30542,-11887,-30536,-11903,-30529,-11918,-30523,-11934,-30517,-11949,-30511,-11965,-30505,-11981,-30499,-11996,-30493,-12012,-30487,-12027,-30481,-12043,-30474,-12058,-30468,-12074,-30462,-12090,-30456,-12105,-30450,-12121,-30443,-12136,-30437,-12152,-30431,-12167,-30425,-12183,-30419,-12199,-30412,-12214,-30406,-12230,-30400,-12245,-30394,-12261,-30387,-12276,-30381,-12292,-30375,-12307,-30369,-12323,-30362,-12338,-30356,-12354,-30350,-12369,-30343,-12385,-30337,-12400,-30331,-12416,-30324,-12431,-30318,-12447,-30312,-12462,-30305,-12478,-30299,-12493,-30292,-12509,-30286,-12524,-30280,-12540,-30273,-12555,-30267,-12571,-30260,-12586,-30254,-12602,-30248,-12617,-30241,-12633,-30235,-12648,-30228,-12664,-30222,-12679,-30215,-12695,-30209,-12710,-30202,-12725,-30196,-12741,-30189,-12756,-30183,-12772,-30176,-12787,-30170,-12803,-30163,-12818,-30157,-12833,-30150,-12849,-30143,-12864,-30137,-12880,-30130,-12895,-30124,-12910,-30117,-12926,-30110,-12941,-30104,-12957,-30097,-12972,-30091,-12987,-30084,-13003,-30077,-13018,-30071,-13034,-30064,-13049,-30057,-13064,-30051,-13080,-30044,-13095,-30037,-13110,-30031,-13126,-30024,-13141,-30017,-13156,-30010,-13172,-30004,-13187,-29997,-13202,-29990,-13218,-29984,-13233,-29977,-13248,-29970,-13264,-29963,-13279,-29956,-13294,-29950,-13310,-29943,-13325,-29936,-13340,-29929,-13356,-29922,-13371,-29916,-13386,-29909,-13401,-29902,-13417,-29895,-13432,-29888,-13447,-29881,-13463,-29874,-13478,-29867,-13493,-29861,-13508,-29854,-13524,-29847,-13539,-29840,-13554,-29833,-13569,-29826,-13585,-29819,-13600,-29812,-13615,-29805,-13630,-29798,-13646,-29791,-13661,-29784,-13676,-29777,-13691,-29770,-13707,-29763,-13722,-29756,-13737,-29749,-13752,-29742,-13767,-29735,-13783,-29728,-13798,-29721,-13813,-29714,-13828,-29707,-13843,-29700,-13859,-29693,-13874,-29686,-13889,-29679,-13904,-29671,-13919,-29664,-13934,-29657,-13950,-29650,-13965,-29643,-13980,-29636,-13995,-29629,-14010,-29622,-14025,-29614,-14040,-29607,-14056,-29600,-14071,-29593,-14086,-29586,-14101,-29578,-14116,-29571,-14131,-29564,-14146,-29557,-14161,-29549,-14177,-29542,-14192,-29535,-14207,-29528,-14222,-29520,-14237,-29513,-14252,-29506,-14267,-29499,-14282,-29491,-14297,-29484,-14312,-29477,-14327,-29469,-14343,-29462,-14358,-29455,-14373,-29447,-14388,-29440,-14403,-29433,-14418,-29425,-14433,-29418,-14448,-29411,-14463,-29403,-14478,-29396,-14493,-29388,-14508,-29381,-14523,-29373,-14538,-29366,-14553,-29359,-14568,-29351,-14583,-29344,-14598,-29336,-14613,-29329,-14628,-29321,-14643,-29314,-14658,-29306,-14673,-29299,-14688,-29291,-14703,-29284,-14718,-29276,-14733,-29269,-14748,-29261,-14763,-29254,-14778,-29246,-14793,-29239,-14808,-29231,-14823,-29223,-14838,-29216,-14853,-29208,-14867,-29201,-14882,-29193,-14897,-29185,-14912,-29178,-14927,-29170,-14942,-29163,-14957,-29155,-14972,-29147,-14987,-29140,-15002,-29132,-15017,-29124,-15031,-29117,-15046,-29109,-15061,-29101,-15076,-29093,-15091,-29086,-15106,-29078,-15121,-29070,-15136,-29063,-15150,-29055,-15165,-29047,-15180,-29039,-15195,-29032,-15210,-29024,-15225,-29016,-15239,-29008,-15254,-29000,-15269,-28993,-15284,-28985,-15299,-28977,-15314,-28969,-15328,-28961,-15343,-28954,-15358,-28946,-15373,-28938,-15388,-28930,-15402,-28922,-15417,-28914,-15432,-28906,-15447,-28898,-15462,-28891,-15476,-28883,-15491,-28875,-15506,-28867,-15521,-28859,-15535,-28851,-15550,-28843,-15565,-28835,-15580,-28827,-15594,-28819,-15609,-28811,-15624,-28803,-15639,-28795,-15653,-28787,-15668,-28779,-15683,-28771,-15697,-28763,-15712,-28755,-15727,-28747,-15741,-28739,-15756,-28731,-15771,-28723,-15786,-28715,-15800,-28707,-15815,-28699,-15830,-28691,-15844,-28682,-15859,-28674,-15874,-28666,-15888,-28658,-15903,-28650,-15918,-28642,-15932,-28634,-15947,-28626,-15961,-28617,-15976,-28609,-15991,-28601,-16005,-28593,-16020,-28585,-16035,-28576,-16049,-28568,-16064,-28560,-16078,-28552,-16093,-28544,-16108,-28535,-16122,-28527,-16137,-28519,-16151,-28511,-16166,-28502,-16180,-28494,-16195,-28486,-16210,-28478,-16224,-28469,-16239,-28461,-16253,-28453,-16268,-28444,-16282,-28436,-16297,-28428,-16311,-28419,-16326,-28411,-16340,-28403,-16355,-28394,-16369,-28386}; - -int16_t twb12288[8192] __attribute__((aligned(32))) = {32767,0,32766,-34,32766,-68,32766,-101,32766,-135,32766,-168,32766,-202,32766,-235,32765,-269,32765,-302,32765,-336,32764,-369,32764,-403,32764,-436,32763,-470,32763,-503,32762,-537,32762,-570,32761,-604,32760,-637,32760,-671,32759,-704,32758,-738,32757,-771,32757,-805,32756,-838,32755,-872,32754,-905,32753,-939,32752,-972,32751,-1006,32750,-1039,32749,-1073,32748,-1106,32747,-1140,32746,-1173,32744,-1207,32743,-1240,32742,-1274,32740,-1307,32739,-1340,32738,-1374,32736,-1407,32735,-1441,32733,-1474,32732,-1508,32730,-1541,32729,-1575,32727,-1608,32725,-1642,32724,-1675,32722,-1709,32720,-1742,32718,-1776,32717,-1809,32715,-1843,32713,-1876,32711,-1909,32709,-1943,32707,-1976,32705,-2010,32703,-2043,32701,-2077,32699,-2110,32696,-2144,32694,-2177,32692,-2210,32690,-2244,32687,-2277,32685,-2311,32683,-2344,32680,-2378,32678,-2411,32675,-2444,32673,-2478,32670,-2511,32668,-2545,32665,-2578,32662,-2611,32660,-2645,32657,-2678,32654,-2712,32651,-2745,32649,-2778,32646,-2812,32643,-2845,32640,-2879,32637,-2912,32634,-2945,32631,-2979,32628,-3012,32625,-3045,32622,-3079,32618,-3112,32615,-3146,32612,-3179,32609,-3212,32605,-3246,32602,-3279,32599,-3312,32595,-3346,32592,-3379,32588,-3412,32585,-3446,32581,-3479,32578,-3512,32574,-3546,32571,-3579,32567,-3612,32563,-3645,32559,-3679,32556,-3712,32552,-3745,32548,-3779,32544,-3812,32540,-3845,32536,-3878,32532,-3912,32528,-3945,32524,-3978,32520,-4012,32516,-4045,32512,-4078,32508,-4111,32503,-4145,32499,-4178,32495,-4211,32491,-4244,32486,-4277,32482,-4311,32477,-4344,32473,-4377,32468,-4410,32464,-4444,32459,-4477,32455,-4510,32450,-4543,32445,-4576,32441,-4609,32436,-4643,32431,-4676,32426,-4709,32422,-4742,32417,-4775,32412,-4808,32407,-4842,32402,-4875,32397,-4908,32392,-4941,32387,-4974,32382,-5007,32377,-5040,32371,-5073,32366,-5107,32361,-5140,32356,-5173,32350,-5206,32345,-5239,32340,-5272,32334,-5305,32329,-5338,32323,-5371,32318,-5404,32312,-5437,32307,-5470,32301,-5503,32295,-5536,32290,-5569,32284,-5602,32278,-5635,32273,-5668,32267,-5701,32261,-5734,32255,-5767,32249,-5800,32243,-5833,32237,-5866,32231,-5899,32225,-5932,32219,-5965,32213,-5998,32207,-6031,32201,-6064,32194,-6097,32188,-6130,32182,-6163,32176,-6196,32169,-6229,32163,-6262,32156,-6294,32150,-6327,32143,-6360,32137,-6393,32130,-6426,32124,-6459,32117,-6492,32110,-6524,32104,-6557,32097,-6590,32090,-6623,32084,-6656,32077,-6689,32070,-6721,32063,-6754,32056,-6787,32049,-6820,32042,-6852,32035,-6885,32028,-6918,32021,-6951,32014,-6983,32007,-7016,31999,-7049,31992,-7082,31985,-7114,31978,-7147,31970,-7180,31963,-7212,31956,-7245,31948,-7278,31941,-7311,31933,-7343,31926,-7376,31918,-7408,31911,-7441,31903,-7474,31895,-7506,31888,-7539,31880,-7572,31872,-7604,31864,-7637,31856,-7669,31849,-7702,31841,-7734,31833,-7767,31825,-7800,31817,-7832,31809,-7865,31801,-7897,31793,-7930,31785,-7962,31776,-7995,31768,-8027,31760,-8060,31752,-8092,31743,-8125,31735,-8157,31727,-8190,31718,-8222,31710,-8254,31701,-8287,31693,-8319,31684,-8352,31676,-8384,31667,-8416,31659,-8449,31650,-8481,31641,-8514,31633,-8546,31624,-8578,31615,-8611,31606,-8643,31597,-8675,31588,-8708,31580,-8740,31571,-8772,31562,-8804,31553,-8837,31544,-8869,31534,-8901,31525,-8933,31516,-8966,31507,-8998,31498,-9030,31489,-9062,31479,-9095,31470,-9127,31461,-9159,31451,-9191,31442,-9223,31432,-9255,31423,-9288,31413,-9320,31404,-9352,31394,-9384,31385,-9416,31375,-9448,31365,-9480,31356,-9512,31346,-9544,31336,-9576,31326,-9608,31316,-9640,31307,-9672,31297,-9704,31287,-9736,31277,-9768,31267,-9800,31257,-9832,31247,-9864,31236,-9896,31226,-9928,31216,-9960,31206,-9992,31196,-10024,31185,-10056,31175,-10088,31165,-10120,31154,-10152,31144,-10183,31134,-10215,31123,-10247,31113,-10279,31102,-10311,31092,-10343,31081,-10374,31070,-10406,31060,-10438,31049,-10470,31038,-10501,31028,-10533,31017,-10565,31006,-10597,30995,-10628,30984,-10660,30973,-10692,30962,-10723,30951,-10755,30940,-10787,30929,-10818,30918,-10850,30907,-10881,30896,-10913,30885,-10945,30874,-10976,30862,-11008,30851,-11039,30840,-11071,30828,-11102,30817,-11134,30806,-11165,30794,-11197,30783,-11228,30771,-11260,30760,-11291,30748,-11323,30737,-11354,30725,-11386,30713,-11417,30702,-11449,30690,-11480,30678,-11511,30666,-11543,30655,-11574,30643,-11605,30631,-11637,30619,-11668,30607,-11699,30595,-11731,30583,-11762,30571,-11793,30559,-11824,30547,-11856,30535,-11887,30522,-11918,30510,-11949,30498,-11981,30486,-12012,30473,-12043,30461,-12074,30449,-12105,30436,-12136,30424,-12167,30411,-12199,30399,-12230,30386,-12261,30374,-12292,30361,-12323,30349,-12354,30336,-12385,30323,-12416,30311,-12447,30298,-12478,30285,-12509,30272,-12540,30259,-12571,30247,-12602,30234,-12633,30221,-12664,30208,-12695,30195,-12725,30182,-12756,30169,-12787,30156,-12818,30142,-12849,30129,-12880,30116,-12910,30103,-12941,30090,-12972,30076,-13003,30063,-13034,30050,-13064,30036,-13095,30023,-13126,30009,-13156,29996,-13187,29983,-13218,29969,-13248,29955,-13279,29942,-13310,29928,-13340,29915,-13371,29901,-13401,29887,-13432,29873,-13463,29860,-13493,29846,-13524,29832,-13554,29818,-13585,29804,-13615,29790,-13646,29776,-13676,29762,-13707,29748,-13737,29734,-13767,29720,-13798,29706,-13828,29692,-13859,29678,-13889,29663,-13919,29649,-13950,29635,-13980,29621,-14010,29606,-14040,29592,-14071,29577,-14101,29563,-14131,29548,-14161,29534,-14192,29519,-14222,29505,-14252,29490,-14282,29476,-14312,29461,-14343,29446,-14373,29432,-14403,29417,-14433,29402,-14463,29387,-14493,29372,-14523,29358,-14553,29343,-14583,29328,-14613,29313,-14643,29298,-14673,29283,-14703,29268,-14733,29253,-14763,29238,-14793,29222,-14823,29207,-14853,29192,-14882,29177,-14912,29162,-14942,29146,-14972,29131,-15002,29116,-15031,29100,-15061,29085,-15091,29069,-15121,29054,-15150,29038,-15180,29023,-15210,29007,-15239,28992,-15269,28976,-15299,28960,-15328,28945,-15358,28929,-15388,28913,-15417,28897,-15447,28882,-15476,28866,-15506,28850,-15535,28834,-15565,28818,-15594,28802,-15624,28786,-15653,28770,-15683,28754,-15712,28738,-15741,28722,-15771,28706,-15800,28690,-15830,28673,-15859,28657,-15888,28641,-15918,28625,-15947,28608,-15976,28592,-16005,28575,-16035,28559,-16064,28543,-16093,28526,-16122,28510,-16151,28493,-16180,28477,-16210,28460,-16239,28443,-16268,28427,-16297,28410,-16326,28393,-16355,28377,-16384,28360,-16413,28343,-16442,28326,-16471,28309,-16500,28292,-16529,28275,-16558,28259,-16587,28242,-16616,28225,-16644,28208,-16673,28190,-16702,28173,-16731,28156,-16760,28139,-16789,28122,-16817,28105,-16846,28087,-16875,28070,-16904,28053,-16932,28036,-16961,28018,-16990,28001,-17018,27983,-17047,27966,-17075,27948,-17104,27931,-17133,27913,-17161,27896,-17190,27878,-17218,27861,-17247,27843,-17275,27825,-17304,27808,-17332,27790,-17361,27772,-17389,27754,-17417,27736,-17446,27719,-17474,27701,-17502,27683,-17531,27665,-17559,27647,-17587,27629,-17616,27611,-17644,27593,-17672,27575,-17700,27557,-17728,27538,-17757,27520,-17785,27502,-17813,27484,-17841,27466,-17869,27447,-17897,27429,-17925,27411,-17953,27392,-17981,27374,-18009,27355,-18037,27337,-18065,27319,-18093,27300,-18121,27281,-18149,27263,-18177,27244,-18205,27226,-18233,27207,-18261,27188,-18288,27170,-18316,27151,-18344,27132,-18372,27113,-18399,27094,-18427,27076,-18455,27057,-18483,27038,-18510,27019,-18538,27000,-18565,26981,-18593,26962,-18621,26943,-18648,26924,-18676,26905,-18703,26885,-18731,26866,-18758,26847,-18786,26828,-18813,26809,-18841,26789,-18868,26770,-18895,26751,-18923,26731,-18950,26712,-18977,26692,-19005,26673,-19032,26654,-19059,26634,-19087,26615,-19114,26595,-19141,26575,-19168,26556,-19195,26536,-19222,26516,-19250,26497,-19277,26477,-19304,26457,-19331,26437,-19358,26418,-19385,26398,-19412,26378,-19439,26358,-19466,26338,-19493,26318,-19520,26298,-19547,26278,-19574,26258,-19600,26238,-19627,26218,-19654,26198,-19681,26178,-19708,26158,-19734,26137,-19761,26117,-19788,26097,-19815,26077,-19841,26056,-19868,26036,-19895,26016,-19921,25995,-19948,25975,-19974,25954,-20001,25934,-20027,25913,-20054,25893,-20080,25872,-20107,25852,-20133,25831,-20160,25811,-20186,25790,-20213,25769,-20239,25749,-20265,25728,-20292,25707,-20318,25686,-20344,25665,-20370,25645,-20397,25624,-20423,25603,-20449,25582,-20475,25561,-20501,25540,-20528,25519,-20554,25498,-20580,25477,-20606,25456,-20632,25435,-20658,25414,-20684,25392,-20710,25371,-20736,25350,-20762,25329,-20788,25307,-20814,25286,-20839,25265,-20865,25243,-20891,25222,-20917,25201,-20943,25179,-20968,25158,-20994,25136,-21020,25115,-21046,25093,-21071,25072,-21097,25050,-21123,25029,-21148,25007,-21174,24985,-21199,24964,-21225,24942,-21250,24920,-21276,24898,-21301,24877,-21327,24855,-21352,24833,-21378,24811,-21403,24789,-21428,24767,-21454,24745,-21479,24723,-21504,24701,-21530,24679,-21555,24657,-21580,24635,-21605,24613,-21630,24591,-21656,24569,-21681,24546,-21706,24524,-21731,24502,-21756,24480,-21781,24457,-21806,24435,-21831,24413,-21856,24390,-21881,24368,-21906,24346,-21931,24323,-21956,24301,-21981,24278,-22005,24256,-22030,24233,-22055,24211,-22080,24188,-22105,24165,-22129,24143,-22154,24120,-22179,24097,-22203,24075,-22228,24052,-22253,24029,-22277,24006,-22302,23984,-22326,23961,-22351,23938,-22375,23915,-22400,23892,-22424,23869,-22449,23846,-22473,23823,-22497,23800,-22522,23777,-22546,23754,-22570,23731,-22595,23708,-22619,23685,-22643,23661,-22667,23638,-22692,23615,-22716,23592,-22740,23569,-22764,23545,-22788,23522,-22812,23499,-22836,23475,-22860,23452,-22884,23428,-22908,23405,-22932,23382,-22956,23358,-22980,23335,-23004,23311,-23028,23287,-23051,23264,-23075,23240,-23099,23217,-23123,23193,-23147,23169,-23170,23146,-23194,23122,-23218,23098,-23241,23074,-23265,23050,-23288,23027,-23312,23003,-23336,22979,-23359,22955,-23383,22931,-23406,22907,-23429,22883,-23453,22859,-23476,22835,-23500,22811,-23523,22787,-23546,22763,-23570,22739,-23593,22715,-23616,22691,-23639,22666,-23662,22642,-23686,22618,-23709,22594,-23732,22569,-23755,22545,-23778,22521,-23801,22496,-23824,22472,-23847,22448,-23870,22423,-23893,22399,-23916,22374,-23939,22350,-23962,22325,-23985,22301,-24007,22276,-24030,22252,-24053,22227,-24076,22202,-24098,22178,-24121,22153,-24144,22128,-24166,22104,-24189,22079,-24212,22054,-24234,22029,-24257,22004,-24279,21980,-24302,21955,-24324,21930,-24347,21905,-24369,21880,-24391,21855,-24414,21830,-24436,21805,-24458,21780,-24481,21755,-24503,21730,-24525,21705,-24547,21680,-24570,21655,-24592,21629,-24614,21604,-24636,21579,-24658,21554,-24680,21529,-24702,21503,-24724,21478,-24746,21453,-24768,21427,-24790,21402,-24812,21377,-24834,21351,-24856,21326,-24878,21300,-24899,21275,-24921,21249,-24943,21224,-24965,21198,-24986,21173,-25008,21147,-25030,21122,-25051,21096,-25073,21070,-25094,21045,-25116,21019,-25137,20993,-25159,20967,-25180,20942,-25202,20916,-25223,20890,-25244,20864,-25266,20838,-25287,20813,-25308,20787,-25330,20761,-25351,20735,-25372,20709,-25393,20683,-25415,20657,-25436,20631,-25457,20605,-25478,20579,-25499,20553,-25520,20527,-25541,20500,-25562,20474,-25583,20448,-25604,20422,-25625,20396,-25646,20369,-25666,20343,-25687,20317,-25708,20291,-25729,20264,-25750,20238,-25770,20212,-25791,20185,-25812,20159,-25832,20132,-25853,20106,-25873,20079,-25894,20053,-25914,20026,-25935,20000,-25955,19973,-25976,19947,-25996,19920,-26017,19894,-26037,19867,-26057,19840,-26078,19814,-26098,19787,-26118,19760,-26138,19733,-26159,19707,-26179,19680,-26199,19653,-26219,19626,-26239,19599,-26259,19573,-26279,19546,-26299,19519,-26319,19492,-26339,19465,-26359,19438,-26379,19411,-26399,19384,-26419,19357,-26438,19330,-26458,19303,-26478,19276,-26498,19249,-26517,19221,-26537,19194,-26557,19167,-26576,19140,-26596,19113,-26616,19086,-26635,19058,-26655,19031,-26674,19004,-26693,18976,-26713,18949,-26732,18922,-26752,18894,-26771,18867,-26790,18840,-26810,18812,-26829,18785,-26848,18757,-26867,18730,-26886,18702,-26906,18675,-26925,18647,-26944,18620,-26963,18592,-26982,18564,-27001,18537,-27020,18509,-27039,18482,-27058,18454,-27077,18426,-27095,18398,-27114,18371,-27133,18343,-27152,18315,-27171,18287,-27189,18260,-27208,18232,-27227,18204,-27245,18176,-27264,18148,-27282,18120,-27301,18092,-27320,18064,-27338,18036,-27356,18008,-27375,17980,-27393,17952,-27412,17924,-27430,17896,-27448,17868,-27467,17840,-27485,17812,-27503,17784,-27521,17756,-27539,17727,-27558,17699,-27576,17671,-27594,17643,-27612,17615,-27630,17586,-27648,17558,-27666,17530,-27684,17501,-27702,17473,-27720,17445,-27737,17416,-27755,17388,-27773,17360,-27791,17331,-27809,17303,-27826,17274,-27844,17246,-27862,17217,-27879,17189,-27897,17160,-27914,17132,-27932,17103,-27949,17074,-27967,17046,-27984,17017,-28002,16989,-28019,16960,-28037,16931,-28054,16903,-28071,16874,-28088,16845,-28106,16816,-28123,16788,-28140,16759,-28157,16730,-28174,16701,-28191,16672,-28209,16643,-28226,16615,-28243,16586,-28260,16557,-28276,16528,-28293,16499,-28310,16470,-28327,16441,-28344,16412,-28361,16383,-28378,16354,-28394,16325,-28411,16296,-28428,16267,-28444,16238,-28461,16209,-28478,16179,-28494,16150,-28511,16121,-28527,16092,-28544,16063,-28560,16034,-28576,16004,-28593,15975,-28609,15946,-28626,15917,-28642,15887,-28658,15858,-28674,15829,-28691,15799,-28707,15770,-28723,15740,-28739,15711,-28755,15682,-28771,15652,-28787,15623,-28803,15593,-28819,15564,-28835,15534,-28851,15505,-28867,15475,-28883,15446,-28898,15416,-28914,15387,-28930,15357,-28946,15327,-28961,15298,-28977,15268,-28993,15238,-29008,15209,-29024,15179,-29039,15149,-29055,15120,-29070,15090,-29086,15060,-29101,15030,-29117,15001,-29132,14971,-29147,14941,-29163,14911,-29178,14881,-29193,14852,-29208,14822,-29223,14792,-29239,14762,-29254,14732,-29269,14702,-29284,14672,-29299,14642,-29314,14612,-29329,14582,-29344,14552,-29359,14522,-29373,14492,-29388,14462,-29403,14432,-29418,14402,-29433,14372,-29447,14342,-29462,14311,-29477,14281,-29491,14251,-29506,14221,-29520,14191,-29535,14160,-29549,14130,-29564,14100,-29578,14070,-29593,14039,-29607,14009,-29622,13979,-29636,13949,-29650,13918,-29664,13888,-29679,13858,-29693,13827,-29707,13797,-29721,13766,-29735,13736,-29749,13706,-29763,13675,-29777,13645,-29791,13614,-29805,13584,-29819,13553,-29833,13523,-29847,13492,-29861,13462,-29874,13431,-29888,13400,-29902,13370,-29916,13339,-29929,13309,-29943,13278,-29956,13247,-29970,13217,-29984,13186,-29997,13155,-30010,13125,-30024,13094,-30037,13063,-30051,13033,-30064,13002,-30077,12971,-30091,12940,-30104,12909,-30117,12879,-30130,12848,-30143,12817,-30157,12786,-30170,12755,-30183,12724,-30196,12694,-30209,12663,-30222,12632,-30235,12601,-30248,12570,-30260,12539,-30273,12508,-30286,12477,-30299,12446,-30312,12415,-30324,12384,-30337,12353,-30350,12322,-30362,12291,-30375,12260,-30387,12229,-30400,12198,-30412,12166,-30425,12135,-30437,12104,-30450,12073,-30462,12042,-30474,12011,-30487,11980,-30499,11948,-30511,11917,-30523,11886,-30536,11855,-30548,11823,-30560,11792,-30572,11761,-30584,11730,-30596,11698,-30608,11667,-30620,11636,-30632,11604,-30644,11573,-30656,11542,-30667,11510,-30679,11479,-30691,11448,-30703,11416,-30714,11385,-30726,11353,-30738,11322,-30749,11290,-30761,11259,-30772,11227,-30784,11196,-30795,11164,-30807,11133,-30818,11101,-30829,11070,-30841,11038,-30852,11007,-30863,10975,-30875,10944,-30886,10912,-30897,10880,-30908,10849,-30919,10817,-30930,10786,-30941,10754,-30952,10722,-30963,10691,-30974,10659,-30985,10627,-30996,10596,-31007,10564,-31018,10532,-31029,10500,-31039,10469,-31050,10437,-31061,10405,-31071,10373,-31082,10342,-31093,10310,-31103,10278,-31114,10246,-31124,10214,-31135,10182,-31145,10151,-31155,10119,-31166,10087,-31176,10055,-31186,10023,-31197,9991,-31207,9959,-31217,9927,-31227,9895,-31237,9863,-31248,9831,-31258,9799,-31268,9767,-31278,9735,-31288,9703,-31298,9671,-31308,9639,-31317,9607,-31327,9575,-31337,9543,-31347,9511,-31357,9479,-31366,9447,-31376,9415,-31386,9383,-31395,9351,-31405,9319,-31414,9287,-31424,9254,-31433,9222,-31443,9190,-31452,9158,-31462,9126,-31471,9094,-31480,9061,-31490,9029,-31499,8997,-31508,8965,-31517,8932,-31526,8900,-31535,8868,-31545,8836,-31554,8803,-31563,8771,-31572,8739,-31581,8707,-31589,8674,-31598,8642,-31607,8610,-31616,8577,-31625,8545,-31634,8513,-31642,8480,-31651,8448,-31660,8415,-31668,8383,-31677,8351,-31685,8318,-31694,8286,-31702,8253,-31711,8221,-31719,8189,-31728,8156,-31736,8124,-31744,8091,-31753,8059,-31761,8026,-31769,7994,-31777,7961,-31786,7929,-31794,7896,-31802,7864,-31810,7831,-31818,7799,-31826,7766,-31834,7733,-31842,7701,-31850,7668,-31857,7636,-31865,7603,-31873,7571,-31881,7538,-31889,7505,-31896,7473,-31904,7440,-31912,7407,-31919,7375,-31927,7342,-31934,7310,-31942,7277,-31949,7244,-31957,7211,-31964,7179,-31971,7146,-31979,7113,-31986,7081,-31993,7048,-32000,7015,-32008,6982,-32015,6950,-32022,6917,-32029,6884,-32036,6851,-32043,6819,-32050,6786,-32057,6753,-32064,6720,-32071,6688,-32078,6655,-32085,6622,-32091,6589,-32098,6556,-32105,6523,-32111,6491,-32118,6458,-32125,6425,-32131,6392,-32138,6359,-32144,6326,-32151,6293,-32157,6261,-32164,6228,-32170,6195,-32177,6162,-32183,6129,-32189,6096,-32195,6063,-32202,6030,-32208,5997,-32214,5964,-32220,5931,-32226,5898,-32232,5865,-32238,5832,-32244,5799,-32250,5766,-32256,5733,-32262,5700,-32268,5667,-32274,5634,-32279,5601,-32285,5568,-32291,5535,-32296,5502,-32302,5469,-32308,5436,-32313,5403,-32319,5370,-32324,5337,-32330,5304,-32335,5271,-32341,5238,-32346,5205,-32351,5172,-32357,5139,-32362,5106,-32367,5072,-32372,5039,-32378,5006,-32383,4973,-32388,4940,-32393,4907,-32398,4874,-32403,4841,-32408,4807,-32413,4774,-32418,4741,-32423,4708,-32427,4675,-32432,4642,-32437,4608,-32442,4575,-32446,4542,-32451,4509,-32456,4476,-32460,4443,-32465,4409,-32469,4376,-32474,4343,-32478,4310,-32483,4276,-32487,4243,-32492,4210,-32496,4177,-32500,4144,-32504,4110,-32509,4077,-32513,4044,-32517,4011,-32521,3977,-32525,3944,-32529,3911,-32533,3877,-32537,3844,-32541,3811,-32545,3778,-32549,3744,-32553,3711,-32557,3678,-32560,3644,-32564,3611,-32568,3578,-32572,3545,-32575,3511,-32579,3478,-32582,3445,-32586,3411,-32589,3378,-32593,3345,-32596,3311,-32600,3278,-32603,3245,-32606,3211,-32610,3178,-32613,3145,-32616,3111,-32619,3078,-32623,3044,-32626,3011,-32629,2978,-32632,2944,-32635,2911,-32638,2878,-32641,2844,-32644,2811,-32647,2777,-32650,2744,-32652,2711,-32655,2677,-32658,2644,-32661,2610,-32663,2577,-32666,2544,-32669,2510,-32671,2477,-32674,2443,-32676,2410,-32679,2377,-32681,2343,-32684,2310,-32686,2276,-32688,2243,-32691,2209,-32693,2176,-32695,2143,-32697,2109,-32700,2076,-32702,2042,-32704,2009,-32706,1975,-32708,1942,-32710,1908,-32712,1875,-32714,1842,-32716,1808,-32718,1775,-32719,1741,-32721,1708,-32723,1674,-32725,1641,-32726,1607,-32728,1574,-32730,1540,-32731,1507,-32733,1473,-32734,1440,-32736,1406,-32737,1373,-32739,1339,-32740,1306,-32741,1273,-32743,1239,-32744,1206,-32745,1172,-32747,1139,-32748,1105,-32749,1072,-32750,1038,-32751,1005,-32752,971,-32753,938,-32754,904,-32755,871,-32756,837,-32757,804,-32758,770,-32758,737,-32759,703,-32760,670,-32761,636,-32761,603,-32762,569,-32763,536,-32763,502,-32764,469,-32764,435,-32765,402,-32765,368,-32765,335,-32766,301,-32766,268,-32766,234,-32767,201,-32767,167,-32767,134,-32767,100,-32767,67,-32767,33,-32767,0,-32767,-34,-32767,-68,-32767,-101,-32767,-135,-32767,-168,-32767,-202,-32767,-235,-32767,-269,-32766,-302,-32766,-336,-32766,-369,-32765,-403,-32765,-436,-32765,-470,-32764,-503,-32764,-537,-32763,-570,-32763,-604,-32762,-637,-32761,-671,-32761,-704,-32760,-738,-32759,-771,-32758,-805,-32758,-838,-32757,-872,-32756,-905,-32755,-939,-32754,-972,-32753,-1006,-32752,-1039,-32751,-1073,-32750,-1106,-32749,-1140,-32748,-1173,-32747,-1207,-32745,-1240,-32744,-1274,-32743,-1307,-32741,-1340,-32740,-1374,-32739,-1407,-32737,-1441,-32736,-1474,-32734,-1508,-32733,-1541,-32731,-1575,-32730,-1608,-32728,-1642,-32726,-1675,-32725,-1709,-32723,-1742,-32721,-1776,-32719,-1809,-32718,-1843,-32716,-1876,-32714,-1909,-32712,-1943,-32710,-1976,-32708,-2010,-32706,-2043,-32704,-2077,-32702,-2110,-32700,-2144,-32697,-2177,-32695,-2210,-32693,-2244,-32691,-2277,-32688,-2311,-32686,-2344,-32684,-2378,-32681,-2411,-32679,-2444,-32676,-2478,-32674,-2511,-32671,-2545,-32669,-2578,-32666,-2611,-32663,-2645,-32661,-2678,-32658,-2712,-32655,-2745,-32652,-2778,-32650,-2812,-32647,-2845,-32644,-2879,-32641,-2912,-32638,-2945,-32635,-2979,-32632,-3012,-32629,-3045,-32626,-3079,-32623,-3112,-32619,-3146,-32616,-3179,-32613,-3212,-32610,-3246,-32606,-3279,-32603,-3312,-32600,-3346,-32596,-3379,-32593,-3412,-32589,-3446,-32586,-3479,-32582,-3512,-32579,-3546,-32575,-3579,-32572,-3612,-32568,-3645,-32564,-3679,-32560,-3712,-32557,-3745,-32553,-3779,-32549,-3812,-32545,-3845,-32541,-3878,-32537,-3912,-32533,-3945,-32529,-3978,-32525,-4012,-32521,-4045,-32517,-4078,-32513,-4111,-32509,-4145,-32504,-4178,-32500,-4211,-32496,-4244,-32492,-4277,-32487,-4311,-32483,-4344,-32478,-4377,-32474,-4410,-32469,-4444,-32465,-4477,-32460,-4510,-32456,-4543,-32451,-4576,-32446,-4609,-32442,-4643,-32437,-4676,-32432,-4709,-32427,-4742,-32423,-4775,-32418,-4808,-32413,-4842,-32408,-4875,-32403,-4908,-32398,-4941,-32393,-4974,-32388,-5007,-32383,-5040,-32378,-5073,-32372,-5107,-32367,-5140,-32362,-5173,-32357,-5206,-32351,-5239,-32346,-5272,-32341,-5305,-32335,-5338,-32330,-5371,-32324,-5404,-32319,-5437,-32313,-5470,-32308,-5503,-32302,-5536,-32296,-5569,-32291,-5602,-32285,-5635,-32279,-5668,-32274,-5701,-32268,-5734,-32262,-5767,-32256,-5800,-32250,-5833,-32244,-5866,-32238,-5899,-32232,-5932,-32226,-5965,-32220,-5998,-32214,-6031,-32208,-6064,-32202,-6097,-32195,-6130,-32189,-6163,-32183,-6196,-32177,-6229,-32170,-6262,-32164,-6294,-32157,-6327,-32151,-6360,-32144,-6393,-32138,-6426,-32131,-6459,-32125,-6492,-32118,-6524,-32111,-6557,-32105,-6590,-32098,-6623,-32091,-6656,-32085,-6689,-32078,-6721,-32071,-6754,-32064,-6787,-32057,-6820,-32050,-6852,-32043,-6885,-32036,-6918,-32029,-6951,-32022,-6983,-32015,-7016,-32008,-7049,-32000,-7082,-31993,-7114,-31986,-7147,-31979,-7180,-31971,-7212,-31964,-7245,-31957,-7278,-31949,-7311,-31942,-7343,-31934,-7376,-31927,-7408,-31919,-7441,-31912,-7474,-31904,-7506,-31896,-7539,-31889,-7572,-31881,-7604,-31873,-7637,-31865,-7669,-31857,-7702,-31850,-7734,-31842,-7767,-31834,-7800,-31826,-7832,-31818,-7865,-31810,-7897,-31802,-7930,-31794,-7962,-31786,-7995,-31777,-8027,-31769,-8060,-31761,-8092,-31753,-8125,-31744,-8157,-31736,-8190,-31728,-8222,-31719,-8254,-31711,-8287,-31702,-8319,-31694,-8352,-31685,-8384,-31677,-8416,-31668,-8449,-31660,-8481,-31651,-8514,-31642,-8546,-31634,-8578,-31625,-8611,-31616,-8643,-31607,-8675,-31598,-8708,-31589,-8740,-31581,-8772,-31572,-8804,-31563,-8837,-31554,-8869,-31545,-8901,-31535,-8933,-31526,-8966,-31517,-8998,-31508,-9030,-31499,-9062,-31490,-9095,-31480,-9127,-31471,-9159,-31462,-9191,-31452,-9223,-31443,-9255,-31433,-9288,-31424,-9320,-31414,-9352,-31405,-9384,-31395,-9416,-31386,-9448,-31376,-9480,-31366,-9512,-31357,-9544,-31347,-9576,-31337,-9608,-31327,-9640,-31317,-9672,-31308,-9704,-31298,-9736,-31288,-9768,-31278,-9800,-31268,-9832,-31258,-9864,-31248,-9896,-31237,-9928,-31227,-9960,-31217,-9992,-31207,-10024,-31197,-10056,-31186,-10088,-31176,-10120,-31166,-10152,-31155,-10183,-31145,-10215,-31135,-10247,-31124,-10279,-31114,-10311,-31103,-10343,-31093,-10374,-31082,-10406,-31071,-10438,-31061,-10470,-31050,-10501,-31039,-10533,-31029,-10565,-31018,-10597,-31007,-10628,-30996,-10660,-30985,-10692,-30974,-10723,-30963,-10755,-30952,-10787,-30941,-10818,-30930,-10850,-30919,-10881,-30908,-10913,-30897,-10945,-30886,-10976,-30875,-11008,-30863,-11039,-30852,-11071,-30841,-11102,-30829,-11134,-30818,-11165,-30807,-11197,-30795,-11228,-30784,-11260,-30772,-11291,-30761,-11323,-30749,-11354,-30738,-11386,-30726,-11417,-30714,-11449,-30703,-11480,-30691,-11511,-30679,-11543,-30667,-11574,-30656,-11605,-30644,-11637,-30632,-11668,-30620,-11699,-30608,-11731,-30596,-11762,-30584,-11793,-30572,-11824,-30560,-11856,-30548,-11887,-30536,-11918,-30523,-11949,-30511,-11981,-30499,-12012,-30487,-12043,-30474,-12074,-30462,-12105,-30450,-12136,-30437,-12167,-30425,-12199,-30412,-12230,-30400,-12261,-30387,-12292,-30375,-12323,-30362,-12354,-30350,-12385,-30337,-12416,-30324,-12447,-30312,-12478,-30299,-12509,-30286,-12540,-30273,-12571,-30260,-12602,-30248,-12633,-30235,-12664,-30222,-12695,-30209,-12725,-30196,-12756,-30183,-12787,-30170,-12818,-30157,-12849,-30143,-12880,-30130,-12910,-30117,-12941,-30104,-12972,-30091,-13003,-30077,-13034,-30064,-13064,-30051,-13095,-30037,-13126,-30024,-13156,-30010,-13187,-29997,-13218,-29984,-13248,-29970,-13279,-29956,-13310,-29943,-13340,-29929,-13371,-29916,-13401,-29902,-13432,-29888,-13463,-29874,-13493,-29861,-13524,-29847,-13554,-29833,-13585,-29819,-13615,-29805,-13646,-29791,-13676,-29777,-13707,-29763,-13737,-29749,-13767,-29735,-13798,-29721,-13828,-29707,-13859,-29693,-13889,-29679,-13919,-29664,-13950,-29650,-13980,-29636,-14010,-29622,-14040,-29607,-14071,-29593,-14101,-29578,-14131,-29564,-14161,-29549,-14192,-29535,-14222,-29520,-14252,-29506,-14282,-29491,-14312,-29477,-14343,-29462,-14373,-29447,-14403,-29433,-14433,-29418,-14463,-29403,-14493,-29388,-14523,-29373,-14553,-29359,-14583,-29344,-14613,-29329,-14643,-29314,-14673,-29299,-14703,-29284,-14733,-29269,-14763,-29254,-14793,-29239,-14823,-29223,-14853,-29208,-14882,-29193,-14912,-29178,-14942,-29163,-14972,-29147,-15002,-29132,-15031,-29117,-15061,-29101,-15091,-29086,-15121,-29070,-15150,-29055,-15180,-29039,-15210,-29024,-15239,-29008,-15269,-28993,-15299,-28977,-15328,-28961,-15358,-28946,-15388,-28930,-15417,-28914,-15447,-28898,-15476,-28883,-15506,-28867,-15535,-28851,-15565,-28835,-15594,-28819,-15624,-28803,-15653,-28787,-15683,-28771,-15712,-28755,-15741,-28739,-15771,-28723,-15800,-28707,-15830,-28691,-15859,-28674,-15888,-28658,-15918,-28642,-15947,-28626,-15976,-28609,-16005,-28593,-16035,-28576,-16064,-28560,-16093,-28544,-16122,-28527,-16151,-28511,-16180,-28494,-16210,-28478,-16239,-28461,-16268,-28444,-16297,-28428,-16326,-28411,-16355,-28394,-16384,-28378,-16413,-28361,-16442,-28344,-16471,-28327,-16500,-28310,-16529,-28293,-16558,-28276,-16587,-28260,-16616,-28243,-16644,-28226,-16673,-28209,-16702,-28191,-16731,-28174,-16760,-28157,-16789,-28140,-16817,-28123,-16846,-28106,-16875,-28088,-16904,-28071,-16932,-28054,-16961,-28037,-16990,-28019,-17018,-28002,-17047,-27984,-17075,-27967,-17104,-27949,-17133,-27932,-17161,-27914,-17190,-27897,-17218,-27879,-17247,-27862,-17275,-27844,-17304,-27826,-17332,-27809,-17361,-27791,-17389,-27773,-17417,-27755,-17446,-27737,-17474,-27720,-17502,-27702,-17531,-27684,-17559,-27666,-17587,-27648,-17616,-27630,-17644,-27612,-17672,-27594,-17700,-27576,-17728,-27558,-17757,-27539,-17785,-27521,-17813,-27503,-17841,-27485,-17869,-27467,-17897,-27448,-17925,-27430,-17953,-27412,-17981,-27393,-18009,-27375,-18037,-27356,-18065,-27338,-18093,-27320,-18121,-27301,-18149,-27282,-18177,-27264,-18205,-27245,-18233,-27227,-18261,-27208,-18288,-27189,-18316,-27171,-18344,-27152,-18372,-27133,-18399,-27114,-18427,-27095,-18455,-27077,-18483,-27058,-18510,-27039,-18538,-27020,-18565,-27001,-18593,-26982,-18621,-26963,-18648,-26944,-18676,-26925,-18703,-26906,-18731,-26886,-18758,-26867,-18786,-26848,-18813,-26829,-18841,-26810,-18868,-26790,-18895,-26771,-18923,-26752,-18950,-26732,-18977,-26713,-19005,-26693,-19032,-26674,-19059,-26655,-19087,-26635,-19114,-26616,-19141,-26596,-19168,-26576,-19195,-26557,-19222,-26537,-19250,-26517,-19277,-26498,-19304,-26478,-19331,-26458,-19358,-26438,-19385,-26419,-19412,-26399,-19439,-26379,-19466,-26359,-19493,-26339,-19520,-26319,-19547,-26299,-19574,-26279,-19600,-26259,-19627,-26239,-19654,-26219,-19681,-26199,-19708,-26179,-19734,-26159,-19761,-26138,-19788,-26118,-19815,-26098,-19841,-26078,-19868,-26057,-19895,-26037,-19921,-26017,-19948,-25996,-19974,-25976,-20001,-25955,-20027,-25935,-20054,-25914,-20080,-25894,-20107,-25873,-20133,-25853,-20160,-25832,-20186,-25812,-20213,-25791,-20239,-25770,-20265,-25750,-20292,-25729,-20318,-25708,-20344,-25687,-20370,-25666,-20397,-25646,-20423,-25625,-20449,-25604,-20475,-25583,-20501,-25562,-20528,-25541,-20554,-25520,-20580,-25499,-20606,-25478,-20632,-25457,-20658,-25436,-20684,-25415,-20710,-25393,-20736,-25372,-20762,-25351,-20788,-25330,-20814,-25308,-20839,-25287,-20865,-25266,-20891,-25244,-20917,-25223,-20943,-25202,-20968,-25180,-20994,-25159,-21020,-25137,-21046,-25116,-21071,-25094,-21097,-25073,-21123,-25051,-21148,-25030,-21174,-25008,-21199,-24986,-21225,-24965,-21250,-24943,-21276,-24921,-21301,-24899,-21327,-24878,-21352,-24856,-21378,-24834,-21403,-24812,-21428,-24790,-21454,-24768,-21479,-24746,-21504,-24724,-21530,-24702,-21555,-24680,-21580,-24658,-21605,-24636,-21630,-24614,-21656,-24592,-21681,-24570,-21706,-24547,-21731,-24525,-21756,-24503,-21781,-24481,-21806,-24458,-21831,-24436,-21856,-24414,-21881,-24391,-21906,-24369,-21931,-24347,-21956,-24324,-21981,-24302,-22005,-24279,-22030,-24257,-22055,-24234,-22080,-24212,-22105,-24189,-22129,-24166,-22154,-24144,-22179,-24121,-22203,-24098,-22228,-24076,-22253,-24053,-22277,-24030,-22302,-24007,-22326,-23985,-22351,-23962,-22375,-23939,-22400,-23916,-22424,-23893,-22449,-23870,-22473,-23847,-22497,-23824,-22522,-23801,-22546,-23778,-22570,-23755,-22595,-23732,-22619,-23709,-22643,-23686,-22667,-23662,-22692,-23639,-22716,-23616,-22740,-23593,-22764,-23570,-22788,-23546,-22812,-23523,-22836,-23500,-22860,-23476,-22884,-23453,-22908,-23429,-22932,-23406,-22956,-23383,-22980,-23359,-23004,-23336,-23028,-23312,-23051,-23288,-23075,-23265,-23099,-23241,-23123,-23218,-23147,-23194,-23170,-23170,-23194,-23147,-23218,-23123,-23241,-23099,-23265,-23075,-23288,-23051,-23312,-23028,-23336,-23004,-23359,-22980,-23383,-22956,-23406,-22932,-23429,-22908,-23453,-22884,-23476,-22860,-23500,-22836,-23523,-22812,-23546,-22788,-23570,-22764,-23593,-22740,-23616,-22716,-23639,-22692,-23662,-22667,-23686,-22643,-23709,-22619,-23732,-22595,-23755,-22570,-23778,-22546,-23801,-22522,-23824,-22497,-23847,-22473,-23870,-22449,-23893,-22424,-23916,-22400,-23939,-22375,-23962,-22351,-23985,-22326,-24007,-22302,-24030,-22277,-24053,-22253,-24076,-22228,-24098,-22203,-24121,-22179,-24144,-22154,-24166,-22129,-24189,-22105,-24212,-22080,-24234,-22055,-24257,-22030,-24279,-22005,-24302,-21981,-24324,-21956,-24347,-21931,-24369,-21906,-24391,-21881,-24414,-21856,-24436,-21831,-24458,-21806,-24481,-21781,-24503,-21756,-24525,-21731,-24547,-21706,-24570,-21681,-24592,-21656,-24614,-21630,-24636,-21605,-24658,-21580,-24680,-21555,-24702,-21530,-24724,-21504,-24746,-21479,-24768,-21454,-24790,-21428,-24812,-21403,-24834,-21378,-24856,-21352,-24878,-21327,-24899,-21301,-24921,-21276,-24943,-21250,-24965,-21225,-24986,-21199,-25008,-21174,-25030,-21148,-25051,-21123,-25073,-21097,-25094,-21071,-25116,-21046,-25137,-21020,-25159,-20994,-25180,-20968,-25202,-20943,-25223,-20917,-25244,-20891,-25266,-20865,-25287,-20839,-25308,-20814,-25330,-20788,-25351,-20762,-25372,-20736,-25393,-20710,-25415,-20684,-25436,-20658,-25457,-20632,-25478,-20606,-25499,-20580,-25520,-20554,-25541,-20528,-25562,-20501,-25583,-20475,-25604,-20449,-25625,-20423,-25646,-20397,-25666,-20370,-25687,-20344,-25708,-20318,-25729,-20292,-25750,-20265,-25770,-20239,-25791,-20213,-25812,-20186,-25832,-20160,-25853,-20133,-25873,-20107,-25894,-20080,-25914,-20054,-25935,-20027,-25955,-20001,-25976,-19974,-25996,-19948,-26017,-19921,-26037,-19895,-26057,-19868,-26078,-19841,-26098,-19815,-26118,-19788,-26138,-19761,-26159,-19734,-26179,-19708,-26199,-19681,-26219,-19654,-26239,-19627,-26259,-19600,-26279,-19574,-26299,-19547,-26319,-19520,-26339,-19493,-26359,-19466,-26379,-19439,-26399,-19412,-26419,-19385,-26438,-19358,-26458,-19331,-26478,-19304,-26498,-19277,-26517,-19250,-26537,-19222,-26557,-19195,-26576,-19168,-26596,-19141,-26616,-19114,-26635,-19087,-26655,-19059,-26674,-19032,-26693,-19005,-26713,-18977,-26732,-18950,-26752,-18923,-26771,-18895,-26790,-18868,-26810,-18841,-26829,-18813,-26848,-18786,-26867,-18758,-26886,-18731,-26906,-18703,-26925,-18676,-26944,-18648,-26963,-18621,-26982,-18593,-27001,-18565,-27020,-18538,-27039,-18510,-27058,-18483,-27077,-18455,-27095,-18427,-27114,-18399,-27133,-18372,-27152,-18344,-27171,-18316,-27189,-18288,-27208,-18261,-27227,-18233,-27245,-18205,-27264,-18177,-27282,-18149,-27301,-18121,-27320,-18093,-27338,-18065,-27356,-18037,-27375,-18009,-27393,-17981,-27412,-17953,-27430,-17925,-27448,-17897,-27467,-17869,-27485,-17841,-27503,-17813,-27521,-17785,-27539,-17757,-27558,-17728,-27576,-17700,-27594,-17672,-27612,-17644,-27630,-17616,-27648,-17587,-27666,-17559,-27684,-17531,-27702,-17502,-27720,-17474,-27737,-17446,-27755,-17417,-27773,-17389,-27791,-17361,-27809,-17332,-27826,-17304,-27844,-17275,-27862,-17247,-27879,-17218,-27897,-17190,-27914,-17161,-27932,-17133,-27949,-17104,-27967,-17075,-27984,-17047,-28002,-17018,-28019,-16990,-28037,-16961,-28054,-16932,-28071,-16904,-28088,-16875,-28106,-16846,-28123,-16817,-28140,-16789,-28157,-16760,-28174,-16731,-28191,-16702,-28209,-16673,-28226,-16644,-28243,-16616,-28260,-16587,-28276,-16558,-28293,-16529,-28310,-16500,-28327,-16471,-28344,-16442,-28361,-16413,-28378,-16384,-28394,-16355,-28411,-16326,-28428,-16297,-28444,-16268,-28461,-16239,-28478,-16210,-28494,-16180,-28511,-16151,-28527,-16122,-28544,-16093,-28560,-16064,-28576,-16035,-28593,-16005,-28609,-15976,-28626,-15947,-28642,-15918,-28658,-15888,-28674,-15859,-28691,-15830,-28707,-15800,-28723,-15771,-28739,-15741,-28755,-15712,-28771,-15683,-28787,-15653,-28803,-15624,-28819,-15594,-28835,-15565,-28851,-15535,-28867,-15506,-28883,-15476,-28898,-15447,-28914,-15417,-28930,-15388,-28946,-15358,-28961,-15328,-28977,-15299,-28993,-15269,-29008,-15239,-29024,-15210,-29039,-15180,-29055,-15150,-29070,-15121,-29086,-15091,-29101,-15061,-29117,-15031,-29132,-15002,-29147,-14972,-29163,-14942,-29178,-14912,-29193,-14882,-29208,-14853,-29223,-14823,-29239,-14793,-29254,-14763,-29269,-14733,-29284,-14703,-29299,-14673,-29314,-14643,-29329,-14613,-29344,-14583,-29359,-14553,-29373,-14523,-29388,-14493,-29403,-14463,-29418,-14433,-29433,-14403,-29447,-14373,-29462,-14343,-29477,-14312,-29491,-14282,-29506,-14252,-29520,-14222,-29535,-14192,-29549,-14161,-29564,-14131,-29578,-14101,-29593,-14071,-29607,-14040,-29622,-14010,-29636,-13980,-29650,-13950,-29664,-13919,-29679,-13889,-29693,-13859,-29707,-13828,-29721,-13798,-29735,-13767,-29749,-13737,-29763,-13707,-29777,-13676,-29791,-13646,-29805,-13615,-29819,-13585,-29833,-13554,-29847,-13524,-29861,-13493,-29874,-13463,-29888,-13432,-29902,-13401,-29916,-13371,-29929,-13340,-29943,-13310,-29956,-13279,-29970,-13248,-29984,-13218,-29997,-13187,-30010,-13156,-30024,-13126,-30037,-13095,-30051,-13064,-30064,-13034,-30077,-13003,-30091,-12972,-30104,-12941,-30117,-12910,-30130,-12880,-30143,-12849,-30157,-12818,-30170,-12787,-30183,-12756,-30196,-12725,-30209,-12695,-30222,-12664,-30235,-12633,-30248,-12602,-30260,-12571,-30273,-12540,-30286,-12509,-30299,-12478,-30312,-12447,-30324,-12416,-30337,-12385,-30350,-12354,-30362,-12323,-30375,-12292,-30387,-12261,-30400,-12230,-30412,-12199,-30425,-12167,-30437,-12136,-30450,-12105,-30462,-12074,-30474,-12043,-30487,-12012,-30499,-11981,-30511,-11949,-30523,-11918,-30536,-11887,-30548,-11856,-30560,-11824,-30572,-11793,-30584,-11762,-30596,-11731,-30608,-11699,-30620,-11668,-30632,-11637,-30644,-11605,-30656,-11574,-30667,-11543,-30679,-11511,-30691,-11480,-30703,-11449,-30714,-11417,-30726,-11386,-30738,-11354,-30749,-11323,-30761,-11291,-30772,-11260,-30784,-11228,-30795,-11197,-30807,-11165,-30818,-11134,-30829,-11102,-30841,-11071,-30852,-11039,-30863,-11008,-30875,-10976,-30886,-10945,-30897,-10913,-30908,-10881,-30919,-10850,-30930,-10818,-30941,-10787,-30952,-10755,-30963,-10723,-30974,-10692,-30985,-10660,-30996,-10628,-31007,-10597,-31018,-10565,-31029,-10533,-31039,-10501,-31050,-10470,-31061,-10438,-31071,-10406,-31082,-10374,-31093,-10343,-31103,-10311,-31114,-10279,-31124,-10247,-31135,-10215,-31145,-10183,-31155,-10152,-31166,-10120,-31176,-10088,-31186,-10056,-31197,-10024,-31207,-9992,-31217,-9960,-31227,-9928,-31237,-9896,-31248,-9864,-31258,-9832,-31268,-9800,-31278,-9768,-31288,-9736,-31298,-9704,-31308,-9672,-31317,-9640,-31327,-9608,-31337,-9576,-31347,-9544,-31357,-9512,-31366,-9480,-31376,-9448,-31386,-9416,-31395,-9384,-31405,-9352,-31414,-9320,-31424,-9288,-31433,-9255,-31443,-9223,-31452,-9191,-31462,-9159,-31471,-9127,-31480,-9095,-31490,-9062,-31499,-9030,-31508,-8998,-31517,-8966,-31526,-8933,-31535,-8901,-31545,-8869,-31554,-8837,-31563,-8804,-31572,-8772,-31581,-8740,-31589,-8708,-31598,-8675,-31607,-8643,-31616,-8611,-31625,-8578,-31634,-8546,-31642,-8514,-31651,-8481,-31660,-8449,-31668,-8416,-31677,-8384,-31685,-8352,-31694,-8319,-31702,-8287,-31711,-8254,-31719,-8222,-31728,-8190,-31736,-8157,-31744,-8125,-31753,-8092,-31761,-8060,-31769,-8027,-31777,-7995,-31786,-7962,-31794,-7930,-31802,-7897,-31810,-7865,-31818,-7832,-31826,-7800,-31834,-7767,-31842,-7734,-31850,-7702,-31857,-7669,-31865,-7637,-31873,-7604,-31881,-7572,-31889,-7539,-31896,-7506,-31904,-7474,-31912,-7441,-31919,-7408,-31927,-7376,-31934,-7343,-31942,-7311,-31949,-7278,-31957,-7245,-31964,-7212,-31971,-7180,-31979,-7147,-31986,-7114,-31993,-7082,-32000,-7049,-32008,-7016,-32015,-6983,-32022,-6951,-32029,-6918,-32036,-6885,-32043,-6852,-32050,-6820,-32057,-6787,-32064,-6754,-32071,-6721,-32078,-6689,-32085,-6656,-32091,-6623,-32098,-6590,-32105,-6557,-32111,-6524,-32118,-6492,-32125,-6459,-32131,-6426,-32138,-6393,-32144,-6360,-32151,-6327,-32157,-6294,-32164,-6262,-32170,-6229,-32177,-6196,-32183,-6163,-32189,-6130,-32195,-6097,-32202,-6064,-32208,-6031,-32214,-5998,-32220,-5965,-32226,-5932,-32232,-5899,-32238,-5866,-32244,-5833,-32250,-5800,-32256,-5767,-32262,-5734,-32268,-5701,-32274,-5668,-32279,-5635,-32285,-5602,-32291,-5569,-32296,-5536,-32302,-5503,-32308,-5470,-32313,-5437,-32319,-5404,-32324,-5371,-32330,-5338,-32335,-5305,-32341,-5272,-32346,-5239,-32351,-5206,-32357,-5173,-32362,-5140,-32367,-5107,-32372,-5073,-32378,-5040,-32383,-5007,-32388,-4974,-32393,-4941,-32398,-4908,-32403,-4875,-32408,-4842,-32413,-4808,-32418,-4775,-32423,-4742,-32427,-4709,-32432,-4676,-32437,-4643,-32442,-4609,-32446,-4576,-32451,-4543,-32456,-4510,-32460,-4477,-32465,-4444,-32469,-4410,-32474,-4377,-32478,-4344,-32483,-4311,-32487,-4277,-32492,-4244,-32496,-4211,-32500,-4178,-32504,-4145,-32509,-4111,-32513,-4078,-32517,-4045,-32521,-4012,-32525,-3978,-32529,-3945,-32533,-3912,-32537,-3878,-32541,-3845,-32545,-3812,-32549,-3779,-32553,-3745,-32557,-3712,-32560,-3679,-32564,-3645,-32568,-3612,-32572,-3579,-32575,-3546,-32579,-3512,-32582,-3479,-32586,-3446,-32589,-3412,-32593,-3379,-32596,-3346,-32600,-3312,-32603,-3279,-32606,-3246,-32610,-3212,-32613,-3179,-32616,-3146,-32619,-3112,-32623,-3079,-32626,-3045,-32629,-3012,-32632,-2979,-32635,-2945,-32638,-2912,-32641,-2879,-32644,-2845,-32647,-2812,-32650,-2778,-32652,-2745,-32655,-2712,-32658,-2678,-32661,-2645,-32663,-2611,-32666,-2578,-32669,-2545,-32671,-2511,-32674,-2478,-32676,-2444,-32679,-2411,-32681,-2378,-32684,-2344,-32686,-2311,-32688,-2277,-32691,-2244,-32693,-2210,-32695,-2177,-32697,-2144,-32700,-2110,-32702,-2077,-32704,-2043,-32706,-2010,-32708,-1976,-32710,-1943,-32712,-1909,-32714,-1876,-32716,-1843,-32718,-1809,-32719,-1776,-32721,-1742,-32723,-1709,-32725,-1675,-32726,-1642,-32728,-1608,-32730,-1575,-32731,-1541,-32733,-1508,-32734,-1474,-32736,-1441,-32737,-1407,-32739,-1374,-32740,-1340,-32741,-1307,-32743,-1274,-32744,-1240,-32745,-1207,-32747,-1173,-32748,-1140,-32749,-1106,-32750,-1073,-32751,-1039,-32752,-1006,-32753,-972,-32754,-939,-32755,-905,-32756,-872,-32757,-838,-32758,-805,-32758,-771,-32759,-738,-32760,-704,-32761,-671,-32761,-637,-32762,-604,-32763,-570,-32763,-537,-32764,-503,-32764,-470,-32765,-436,-32765,-403,-32765,-369,-32766,-336,-32766,-302,-32766,-269,-32767,-235,-32767,-202,-32767,-168,-32767,-135,-32767,-101,-32767,-68,-32767,-34,-32767,-1,-32767,33,-32767,67,-32767,100,-32767,134,-32767,167,-32767,201,-32767,234,-32766,268,-32766,301,-32766,335,-32765,368,-32765,402,-32765,435,-32764,469,-32764,502,-32763,536,-32763,569,-32762,603,-32761,636,-32761,670,-32760,703,-32759,737,-32758,770,-32758,804,-32757,837,-32756,871,-32755,904,-32754,938,-32753,971,-32752,1005,-32751,1038,-32750,1072,-32749,1105,-32748,1139,-32747,1172,-32745,1206,-32744,1239,-32743,1273,-32741,1306,-32740,1339,-32739,1373,-32737,1406,-32736,1440,-32734,1473,-32733,1507,-32731,1540,-32730,1574,-32728,1607,-32726,1641,-32725,1674,-32723,1708,-32721,1741,-32719,1775,-32718,1808,-32716,1842,-32714,1875,-32712,1908,-32710,1942,-32708,1975,-32706,2009,-32704,2042,-32702,2076,-32700,2109,-32697,2143,-32695,2176,-32693,2209,-32691,2243,-32688,2276,-32686,2310,-32684,2343,-32681,2377,-32679,2410,-32676,2443,-32674,2477,-32671,2510,-32669,2544,-32666,2577,-32663,2610,-32661,2644,-32658,2677,-32655,2711,-32652,2744,-32650,2777,-32647,2811,-32644,2844,-32641,2878,-32638,2911,-32635,2944,-32632,2978,-32629,3011,-32626,3044,-32623,3078,-32619,3111,-32616,3145,-32613,3178,-32610,3211,-32606,3245,-32603,3278,-32600,3311,-32596,3345,-32593,3378,-32589,3411,-32586,3445,-32582,3478,-32579,3511,-32575,3545,-32572,3578,-32568,3611,-32564,3644,-32560,3678,-32557,3711,-32553,3744,-32549,3778,-32545,3811,-32541,3844,-32537,3877,-32533,3911,-32529,3944,-32525,3977,-32521,4011,-32517,4044,-32513,4077,-32509,4110,-32504,4144,-32500,4177,-32496,4210,-32492,4243,-32487,4276,-32483,4310,-32478,4343,-32474,4376,-32469,4409,-32465,4443,-32460,4476,-32456,4509,-32451,4542,-32446,4575,-32442,4608,-32437,4642,-32432,4675,-32427,4708,-32423,4741,-32418,4774,-32413,4807,-32408,4841,-32403,4874,-32398,4907,-32393,4940,-32388,4973,-32383,5006,-32378,5039,-32372,5072,-32367,5106,-32362,5139,-32357,5172,-32351,5205,-32346,5238,-32341,5271,-32335,5304,-32330,5337,-32324,5370,-32319,5403,-32313,5436,-32308,5469,-32302,5502,-32296,5535,-32291,5568,-32285,5601,-32279,5634,-32274,5667,-32268,5700,-32262,5733,-32256,5766,-32250,5799,-32244,5832,-32238,5865,-32232,5898,-32226,5931,-32220,5964,-32214,5997,-32208,6030,-32202,6063,-32195,6096,-32189,6129,-32183,6162,-32177,6195,-32170,6228,-32164,6261,-32157,6293,-32151,6326,-32144,6359,-32138,6392,-32131,6425,-32125,6458,-32118,6491,-32111,6523,-32105,6556,-32098,6589,-32091,6622,-32085,6655,-32078,6688,-32071,6720,-32064,6753,-32057,6786,-32050,6819,-32043,6851,-32036,6884,-32029,6917,-32022,6950,-32015,6982,-32008,7015,-32000,7048,-31993,7081,-31986,7113,-31979,7146,-31971,7179,-31964,7211,-31957,7244,-31949,7277,-31942,7310,-31934,7342,-31927,7375,-31919,7407,-31912,7440,-31904,7473,-31896,7505,-31889,7538,-31881,7571,-31873,7603,-31865,7636,-31857,7668,-31850,7701,-31842,7733,-31834,7766,-31826,7799,-31818,7831,-31810,7864,-31802,7896,-31794,7929,-31786,7961,-31777,7994,-31769,8026,-31761,8059,-31753,8091,-31744,8124,-31736,8156,-31728,8189,-31719,8221,-31711,8253,-31702,8286,-31694,8318,-31685,8351,-31677,8383,-31668,8415,-31660,8448,-31651,8480,-31642,8513,-31634,8545,-31625,8577,-31616,8610,-31607,8642,-31598,8674,-31589,8707,-31581,8739,-31572,8771,-31563,8803,-31554,8836,-31545,8868,-31535,8900,-31526,8932,-31517,8965,-31508,8997,-31499,9029,-31490,9061,-31480,9094,-31471,9126,-31462,9158,-31452,9190,-31443,9222,-31433,9254,-31424,9287,-31414,9319,-31405,9351,-31395,9383,-31386,9415,-31376,9447,-31366,9479,-31357,9511,-31347,9543,-31337,9575,-31327,9607,-31317,9639,-31308,9671,-31298,9703,-31288,9735,-31278,9767,-31268,9799,-31258,9831,-31248,9863,-31237,9895,-31227,9927,-31217,9959,-31207,9991,-31197,10023,-31186,10055,-31176,10087,-31166,10119,-31155,10151,-31145,10182,-31135,10214,-31124,10246,-31114,10278,-31103,10310,-31093,10342,-31082,10373,-31071,10405,-31061,10437,-31050,10469,-31039,10500,-31029,10532,-31018,10564,-31007,10596,-30996,10627,-30985,10659,-30974,10691,-30963,10722,-30952,10754,-30941,10786,-30930,10817,-30919,10849,-30908,10880,-30897,10912,-30886,10944,-30875,10975,-30863,11007,-30852,11038,-30841,11070,-30829,11101,-30818,11133,-30807,11164,-30795,11196,-30784,11227,-30772,11259,-30761,11290,-30749,11322,-30738,11353,-30726,11385,-30714,11416,-30703,11448,-30691,11479,-30679,11510,-30667,11542,-30656,11573,-30644,11604,-30632,11636,-30620,11667,-30608,11698,-30596,11730,-30584,11761,-30572,11792,-30560,11823,-30548,11855,-30536,11886,-30523,11917,-30511,11948,-30499,11980,-30487,12011,-30474,12042,-30462,12073,-30450,12104,-30437,12135,-30425,12166,-30412,12198,-30400,12229,-30387,12260,-30375,12291,-30362,12322,-30350,12353,-30337,12384,-30324,12415,-30312,12446,-30299,12477,-30286,12508,-30273,12539,-30260,12570,-30248,12601,-30235,12632,-30222,12663,-30209,12694,-30196,12724,-30183,12755,-30170,12786,-30157,12817,-30143,12848,-30130,12879,-30117,12909,-30104,12940,-30091,12971,-30077,13002,-30064,13033,-30051,13063,-30037,13094,-30024,13125,-30010,13155,-29997,13186,-29984,13217,-29970,13247,-29956,13278,-29943,13309,-29929,13339,-29916,13370,-29902,13400,-29888,13431,-29874,13462,-29861,13492,-29847,13523,-29833,13553,-29819,13584,-29805,13614,-29791,13645,-29777,13675,-29763,13706,-29749,13736,-29735,13766,-29721,13797,-29707,13827,-29693,13858,-29679,13888,-29664,13918,-29650,13949,-29636,13979,-29622,14009,-29607,14039,-29593,14070,-29578,14100,-29564,14130,-29549,14160,-29535,14191,-29520,14221,-29506,14251,-29491,14281,-29477,14311,-29462,14342,-29447,14372,-29433,14402,-29418,14432,-29403,14462,-29388,14492,-29373,14522,-29359,14552,-29344,14582,-29329,14612,-29314,14642,-29299,14672,-29284,14702,-29269,14732,-29254,14762,-29239,14792,-29223,14822,-29208,14852,-29193,14881,-29178,14911,-29163,14941,-29147,14971,-29132,15001,-29117,15030,-29101,15060,-29086,15090,-29070,15120,-29055,15149,-29039,15179,-29024,15209,-29008,15238,-28993,15268,-28977,15298,-28961,15327,-28946,15357,-28930,15387,-28914,15416,-28898,15446,-28883,15475,-28867,15505,-28851,15534,-28835,15564,-28819,15593,-28803,15623,-28787,15652,-28771,15682,-28755,15711,-28739,15740,-28723,15770,-28707,15799,-28691,15829,-28674,15858,-28658,15887,-28642,15917,-28626,15946,-28609,15975,-28593,16004,-28576,16034,-28560,16063,-28544,16092,-28527,16121,-28511,16150,-28494,16179,-28478,16209,-28461,16238,-28444,16267,-28428,16296,-28411,16325,-28394,16354,-28378,16383,-28361,16412,-28344,16441,-28327,16470,-28310,16499,-28293,16528,-28276,16557,-28260,16586,-28243,16615,-28226,16643,-28209,16672,-28191,16701,-28174,16730,-28157,16759,-28140,16788,-28123,16816,-28106,16845,-28088,16874,-28071,16903,-28054,16931,-28037,16960,-28019,16989,-28002,17017,-27984,17046,-27967,17074,-27949,17103,-27932,17132,-27914,17160,-27897,17189,-27879,17217,-27862,17246,-27844,17274,-27826,17303,-27809,17331,-27791,17360,-27773,17388,-27755,17416,-27737,17445,-27720,17473,-27702,17501,-27684,17530,-27666,17558,-27648,17586,-27630,17615,-27612,17643,-27594,17671,-27576,17699,-27558,17727,-27539,17756,-27521,17784,-27503,17812,-27485,17840,-27467,17868,-27448,17896,-27430,17924,-27412,17952,-27393,17980,-27375,18008,-27356,18036,-27338,18064,-27320,18092,-27301,18120,-27282,18148,-27264,18176,-27245,18204,-27227,18232,-27208,18260,-27189,18287,-27171,18315,-27152,18343,-27133,18371,-27114,18398,-27095,18426,-27077,18454,-27058,18482,-27039,18509,-27020,18537,-27001,18564,-26982,18592,-26963,18620,-26944,18647,-26925,18675,-26906,18702,-26886,18730,-26867,18757,-26848,18785,-26829,18812,-26810,18840,-26790,18867,-26771,18894,-26752,18922,-26732,18949,-26713,18976,-26693,19004,-26674,19031,-26655,19058,-26635,19086,-26616,19113,-26596,19140,-26576,19167,-26557,19194,-26537,19221,-26517,19249,-26498,19276,-26478,19303,-26458,19330,-26438,19357,-26419,19384,-26399,19411,-26379,19438,-26359,19465,-26339,19492,-26319,19519,-26299,19546,-26279,19573,-26259,19599,-26239,19626,-26219,19653,-26199,19680,-26179,19707,-26159,19733,-26138,19760,-26118,19787,-26098,19814,-26078,19840,-26057,19867,-26037,19894,-26017,19920,-25996,19947,-25976,19973,-25955,20000,-25935,20026,-25914,20053,-25894,20079,-25873,20106,-25853,20132,-25832,20159,-25812,20185,-25791,20212,-25770,20238,-25750,20264,-25729,20291,-25708,20317,-25687,20343,-25666,20369,-25646,20396,-25625,20422,-25604,20448,-25583,20474,-25562,20500,-25541,20527,-25520,20553,-25499,20579,-25478,20605,-25457,20631,-25436,20657,-25415,20683,-25393,20709,-25372,20735,-25351,20761,-25330,20787,-25308,20813,-25287,20838,-25266,20864,-25244,20890,-25223,20916,-25202,20942,-25180,20967,-25159,20993,-25137,21019,-25116,21045,-25094,21070,-25073,21096,-25051,21122,-25030,21147,-25008,21173,-24986,21198,-24965,21224,-24943,21249,-24921,21275,-24899,21300,-24878,21326,-24856,21351,-24834,21377,-24812,21402,-24790,21427,-24768,21453,-24746,21478,-24724,21503,-24702,21529,-24680,21554,-24658,21579,-24636,21604,-24614,21629,-24592,21655,-24570,21680,-24547,21705,-24525,21730,-24503,21755,-24481,21780,-24458,21805,-24436,21830,-24414,21855,-24391,21880,-24369,21905,-24347,21930,-24324,21955,-24302,21980,-24279,22004,-24257,22029,-24234,22054,-24212,22079,-24189,22104,-24166,22128,-24144,22153,-24121,22178,-24098,22202,-24076,22227,-24053,22252,-24030,22276,-24007,22301,-23985,22325,-23962,22350,-23939,22374,-23916,22399,-23893,22423,-23870,22448,-23847,22472,-23824,22496,-23801,22521,-23778,22545,-23755,22569,-23732,22594,-23709,22618,-23686,22642,-23662,22666,-23639,22691,-23616,22715,-23593,22739,-23570,22763,-23546,22787,-23523,22811,-23500,22835,-23476,22859,-23453,22883,-23429,22907,-23406,22931,-23383,22955,-23359,22979,-23336,23003,-23312,23027,-23288,23050,-23265,23074,-23241,23098,-23218,23122,-23194,23146,-23170,23169,-23147,23193,-23123,23217,-23099,23240,-23075,23264,-23051,23287,-23028,23311,-23004,23335,-22980,23358,-22956,23382,-22932,23405,-22908,23428,-22884,23452,-22860,23475,-22836,23499,-22812,23522,-22788,23545,-22764,23569,-22740,23592,-22716,23615,-22692,23638,-22667,23661,-22643,23685,-22619,23708,-22595,23731,-22570,23754,-22546,23777,-22522,23800,-22497,23823,-22473,23846,-22449,23869,-22424,23892,-22400,23915,-22375,23938,-22351,23961,-22326,23984,-22302,24006,-22277,24029,-22253,24052,-22228,24075,-22203,24097,-22179,24120,-22154,24143,-22129,24165,-22105,24188,-22080,24211,-22055,24233,-22030,24256,-22005,24278,-21981,24301,-21956,24323,-21931,24346,-21906,24368,-21881,24390,-21856,24413,-21831,24435,-21806,24457,-21781,24480,-21756,24502,-21731,24524,-21706,24546,-21681,24569,-21656,24591,-21630,24613,-21605,24635,-21580,24657,-21555,24679,-21530,24701,-21504,24723,-21479,24745,-21454,24767,-21428,24789,-21403,24811,-21378,24833,-21352,24855,-21327,24877,-21301,24898,-21276,24920,-21250,24942,-21225,24964,-21199,24985,-21174,25007,-21148,25029,-21123,25050,-21097,25072,-21071,25093,-21046,25115,-21020,25136,-20994,25158,-20968,25179,-20943,25201,-20917,25222,-20891,25243,-20865,25265,-20839,25286,-20814,25307,-20788,25329,-20762,25350,-20736,25371,-20710,25392,-20684,25414,-20658,25435,-20632,25456,-20606,25477,-20580,25498,-20554,25519,-20528,25540,-20501,25561,-20475,25582,-20449,25603,-20423,25624,-20397,25645,-20370,25665,-20344,25686,-20318,25707,-20292,25728,-20265,25749,-20239,25769,-20213,25790,-20186,25811,-20160,25831,-20133,25852,-20107,25872,-20080,25893,-20054,25913,-20027,25934,-20001,25954,-19974,25975,-19948,25995,-19921,26016,-19895,26036,-19868,26056,-19841,26077,-19815,26097,-19788,26117,-19761,26137,-19734,26158,-19708,26178,-19681,26198,-19654,26218,-19627,26238,-19600,26258,-19574,26278,-19547,26298,-19520,26318,-19493,26338,-19466,26358,-19439,26378,-19412,26398,-19385,26418,-19358,26437,-19331,26457,-19304,26477,-19277,26497,-19250,26516,-19222,26536,-19195,26556,-19168,26575,-19141,26595,-19114,26615,-19087,26634,-19059,26654,-19032,26673,-19005,26692,-18977,26712,-18950,26731,-18923,26751,-18895,26770,-18868,26789,-18841,26809,-18813,26828,-18786,26847,-18758,26866,-18731,26885,-18703,26905,-18676,26924,-18648,26943,-18621,26962,-18593,26981,-18565,27000,-18538,27019,-18510,27038,-18483,27057,-18455,27076,-18427,27094,-18399,27113,-18372,27132,-18344,27151,-18316,27170,-18288,27188,-18261,27207,-18233,27226,-18205,27244,-18177,27263,-18149,27281,-18121,27300,-18093,27319,-18065,27337,-18037,27355,-18009,27374,-17981,27392,-17953,27411,-17925,27429,-17897,27447,-17869,27466,-17841,27484,-17813,27502,-17785,27520,-17757,27538,-17728,27557,-17700,27575,-17672,27593,-17644,27611,-17616,27629,-17587,27647,-17559,27665,-17531,27683,-17502,27701,-17474,27719,-17446,27736,-17417,27754,-17389,27772,-17361,27790,-17332,27808,-17304,27825,-17275,27843,-17247,27861,-17218,27878,-17190,27896,-17161,27913,-17133,27931,-17104,27948,-17075,27966,-17047,27983,-17018,28001,-16990,28018,-16961,28036,-16932,28053,-16904,28070,-16875,28087,-16846,28105,-16817,28122,-16789,28139,-16760,28156,-16731,28173,-16702,28190,-16673,28208,-16644,28225,-16616,28242,-16587,28259,-16558,28275,-16529,28292,-16500,28309,-16471,28326,-16442,28343,-16413,28360}; - diff --git a/openair1/PHY/TOOLS/twiddle1536.h b/openair1/PHY/TOOLS/twiddle1536.h deleted file mode 100644 index 304766caaf..0000000000 --- a/openair1/PHY/TOOLS/twiddle1536.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include - -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:511)/1536)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*(0:2:1022)/1536)); -twa2 = zeros(1,1024); -twb2 = zeros(1,1024); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); - - - */ - -int16_t twa1536[1024] __attribute__((aligned(16))) = {32767,0,32766,-135,32765,-269,32764,-403,32762,-537,32760,-671,32757,-805,32753,-939,32749,-1073,32744,-1207,32739,-1340,32733,-1474,32727,-1608,32720,-1742,32713,-1876,32705,-2010,32696,-2144,32687,-2277,32678,-2411,32668,-2545,32657,-2678,32646,-2812,32634,-2945,32622,-3079,32609,-3212,32595,-3346,32581,-3479,32567,-3612,32552,-3745,32536,-3878,32520,-4012,32503,-4145,32486,-4277,32468,-4410,32450,-4543,32431,-4676,32412,-4808,32392,-4941,32371,-5073,32350,-5206,32329,-5338,32307,-5470,32284,-5602,32261,-5734,32237,-5866,32213,-5998,32188,-6130,32163,-6262,32137,-6393,32110,-6524,32084,-6656,32056,-6787,32028,-6918,31999,-7049,31970,-7180,31941,-7311,31911,-7441,31880,-7572,31849,-7702,31817,-7832,31785,-7962,31752,-8092,31718,-8222,31684,-8352,31650,-8481,31615,-8611,31580,-8740,31544,-8869,31507,-8998,31470,-9127,31432,-9255,31394,-9384,31356,-9512,31316,-9640,31277,-9768,31236,-9896,31196,-10024,31154,-10152,31113,-10279,31070,-10406,31028,-10533,30984,-10660,30940,-10787,30896,-10913,30851,-11039,30806,-11165,30760,-11291,30713,-11417,30666,-11543,30619,-11668,30571,-11793,30522,-11918,30473,-12043,30424,-12167,30374,-12292,30323,-12416,30272,-12540,30221,-12664,30169,-12787,30116,-12910,30063,-13034,30009,-13156,29955,-13279,29901,-13401,29846,-13524,29790,-13646,29734,-13767,29678,-13889,29621,-14010,29563,-14131,29505,-14252,29446,-14373,29387,-14493,29328,-14613,29268,-14733,29207,-14853,29146,-14972,29085,-15091,29023,-15210,28960,-15328,28897,-15447,28834,-15565,28770,-15683,28706,-15800,28641,-15918,28575,-16035,28510,-16151,28443,-16268,28377,-16384,28309,-16500,28242,-16616,28173,-16731,28105,-16846,28036,-16961,27966,-17075,27896,-17190,27825,-17304,27754,-17417,27683,-17531,27611,-17644,27538,-17757,27466,-17869,27392,-17981,27319,-18093,27244,-18205,27170,-18316,27094,-18427,27019,-18538,26943,-18648,26866,-18758,26789,-18868,26712,-18977,26634,-19087,26556,-19195,26477,-19304,26398,-19412,26318,-19520,26238,-19627,26158,-19734,26077,-19841,25995,-19948,25913,-20054,25831,-20160,25749,-20265,25665,-20370,25582,-20475,25498,-20580,25414,-20684,25329,-20788,25243,-20891,25158,-20994,25072,-21097,24985,-21199,24898,-21301,24811,-21403,24723,-21504,24635,-21605,24546,-21706,24457,-21806,24368,-21906,24278,-22005,24188,-22105,24097,-22203,24006,-22302,23915,-22400,23823,-22497,23731,-22595,23638,-22692,23545,-22788,23452,-22884,23358,-22980,23264,-23075,23169,-23170,23074,-23265,22979,-23359,22883,-23453,22787,-23546,22691,-23639,22594,-23732,22496,-23824,22399,-23916,22301,-24007,22202,-24098,22104,-24189,22004,-24279,21905,-24369,21805,-24458,21705,-24547,21604,-24636,21503,-24724,21402,-24812,21300,-24899,21198,-24986,21096,-25073,20993,-25159,20890,-25244,20787,-25330,20683,-25415,20579,-25499,20474,-25583,20369,-25666,20264,-25750,20159,-25832,20053,-25914,19947,-25996,19840,-26078,19733,-26159,19626,-26239,19519,-26319,19411,-26399,19303,-26478,19194,-26557,19086,-26635,18976,-26713,18867,-26790,18757,-26867,18647,-26944,18537,-27020,18426,-27095,18315,-27171,18204,-27245,18092,-27320,17980,-27393,17868,-27467,17756,-27539,17643,-27612,17530,-27684,17416,-27755,17303,-27826,17189,-27897,17074,-27967,16960,-28037,16845,-28106,16730,-28174,16615,-28243,16499,-28310,16383,-28378,16267,-28444,16150,-28511,16034,-28576,15917,-28642,15799,-28707,15682,-28771,15564,-28835,15446,-28898,15327,-28961,15209,-29024,15090,-29086,14971,-29147,14852,-29208,14732,-29269,14612,-29329,14492,-29388,14372,-29447,14251,-29506,14130,-29564,14009,-29622,13888,-29679,13766,-29735,13645,-29791,13523,-29847,13400,-29902,13278,-29956,13155,-30010,13033,-30064,12909,-30117,12786,-30170,12663,-30222,12539,-30273,12415,-30324,12291,-30375,12166,-30425,12042,-30474,11917,-30523,11792,-30572,11667,-30620,11542,-30667,11416,-30714,11290,-30761,11164,-30807,11038,-30852,10912,-30897,10786,-30941,10659,-30985,10532,-31029,10405,-31071,10278,-31114,10151,-31155,10023,-31197,9895,-31237,9767,-31278,9639,-31317,9511,-31357,9383,-31395,9254,-31433,9126,-31471,8997,-31508,8868,-31545,8739,-31581,8610,-31616,8480,-31651,8351,-31685,8221,-31719,8091,-31753,7961,-31786,7831,-31818,7701,-31850,7571,-31881,7440,-31912,7310,-31942,7179,-31971,7048,-32000,6917,-32029,6786,-32057,6655,-32085,6523,-32111,6392,-32138,6261,-32164,6129,-32189,5997,-32214,5865,-32238,5733,-32262,5601,-32285,5469,-32308,5337,-32330,5205,-32351,5072,-32372,4940,-32393,4807,-32413,4675,-32432,4542,-32451,4409,-32469,4276,-32487,4144,-32504,4011,-32521,3877,-32537,3744,-32553,3611,-32568,3478,-32582,3345,-32596,3211,-32610,3078,-32623,2944,-32635,2811,-32647,2677,-32658,2544,-32669,2410,-32679,2276,-32688,2143,-32697,2009,-32706,1875,-32714,1741,-32721,1607,-32728,1473,-32734,1339,-32740,1206,-32745,1072,-32750,938,-32754,804,-32758,670,-32761,536,-32763,402,-32765,268,-32766,134,-32767,0,-32767,-135,-32767,-269,-32766,-403,-32765,-537,-32763,-671,-32761,-805,-32758,-939,-32754,-1073,-32750,-1207,-32745,-1340,-32740,-1474,-32734,-1608,-32728,-1742,-32721,-1876,-32714,-2010,-32706,-2144,-32697,-2277,-32688,-2411,-32679,-2545,-32669,-2678,-32658,-2812,-32647,-2945,-32635,-3079,-32623,-3212,-32610,-3346,-32596,-3479,-32582,-3612,-32568,-3745,-32553,-3878,-32537,-4012,-32521,-4145,-32504,-4277,-32487,-4410,-32469,-4543,-32451,-4676,-32432,-4808,-32413,-4941,-32393,-5073,-32372,-5206,-32351,-5338,-32330,-5470,-32308,-5602,-32285,-5734,-32262,-5866,-32238,-5998,-32214,-6130,-32189,-6262,-32164,-6393,-32138,-6524,-32111,-6656,-32085,-6787,-32057,-6918,-32029,-7049,-32000,-7180,-31971,-7311,-31942,-7441,-31912,-7572,-31881,-7702,-31850,-7832,-31818,-7962,-31786,-8092,-31753,-8222,-31719,-8352,-31685,-8481,-31651,-8611,-31616,-8740,-31581,-8869,-31545,-8998,-31508,-9127,-31471,-9255,-31433,-9384,-31395,-9512,-31357,-9640,-31317,-9768,-31278,-9896,-31237,-10024,-31197,-10152,-31155,-10279,-31114,-10406,-31071,-10533,-31029,-10660,-30985,-10787,-30941,-10913,-30897,-11039,-30852,-11165,-30807,-11291,-30761,-11417,-30714,-11543,-30667,-11668,-30620,-11793,-30572,-11918,-30523,-12043,-30474,-12167,-30425,-12292,-30375,-12416,-30324,-12540,-30273,-12664,-30222,-12787,-30170,-12910,-30117,-13034,-30064,-13156,-30010,-13279,-29956,-13401,-29902,-13524,-29847,-13646,-29791,-13767,-29735,-13889,-29679,-14010,-29622,-14131,-29564,-14252,-29506,-14373,-29447,-14493,-29388,-14613,-29329,-14733,-29269,-14853,-29208,-14972,-29147,-15091,-29086,-15210,-29024,-15328,-28961,-15447,-28898,-15565,-28835,-15683,-28771,-15800,-28707,-15918,-28642,-16035,-28576,-16151,-28511,-16268,-28444}; - -int16_t twb1536[1024] __attribute__((aligned(16))) = {32767,0,32765,-269,32762,-537,32757,-805,32749,-1073,32739,-1340,32727,-1608,32713,-1876,32696,-2144,32678,-2411,32657,-2678,32634,-2945,32609,-3212,32581,-3479,32552,-3745,32520,-4012,32486,-4277,32450,-4543,32412,-4808,32371,-5073,32329,-5338,32284,-5602,32237,-5866,32188,-6130,32137,-6393,32084,-6656,32028,-6918,31970,-7180,31911,-7441,31849,-7702,31785,-7962,31718,-8222,31650,-8481,31580,-8740,31507,-8998,31432,-9255,31356,-9512,31277,-9768,31196,-10024,31113,-10279,31028,-10533,30940,-10787,30851,-11039,30760,-11291,30666,-11543,30571,-11793,30473,-12043,30374,-12292,30272,-12540,30169,-12787,30063,-13034,29955,-13279,29846,-13524,29734,-13767,29621,-14010,29505,-14252,29387,-14493,29268,-14733,29146,-14972,29023,-15210,28897,-15447,28770,-15683,28641,-15918,28510,-16151,28377,-16384,28242,-16616,28105,-16846,27966,-17075,27825,-17304,27683,-17531,27538,-17757,27392,-17981,27244,-18205,27094,-18427,26943,-18648,26789,-18868,26634,-19087,26477,-19304,26318,-19520,26158,-19734,25995,-19948,25831,-20160,25665,-20370,25498,-20580,25329,-20788,25158,-20994,24985,-21199,24811,-21403,24635,-21605,24457,-21806,24278,-22005,24097,-22203,23915,-22400,23731,-22595,23545,-22788,23358,-22980,23169,-23170,22979,-23359,22787,-23546,22594,-23732,22399,-23916,22202,-24098,22004,-24279,21805,-24458,21604,-24636,21402,-24812,21198,-24986,20993,-25159,20787,-25330,20579,-25499,20369,-25666,20159,-25832,19947,-25996,19733,-26159,19519,-26319,19303,-26478,19086,-26635,18867,-26790,18647,-26944,18426,-27095,18204,-27245,17980,-27393,17756,-27539,17530,-27684,17303,-27826,17074,-27967,16845,-28106,16615,-28243,16383,-28378,16150,-28511,15917,-28642,15682,-28771,15446,-28898,15209,-29024,14971,-29147,14732,-29269,14492,-29388,14251,-29506,14009,-29622,13766,-29735,13523,-29847,13278,-29956,13033,-30064,12786,-30170,12539,-30273,12291,-30375,12042,-30474,11792,-30572,11542,-30667,11290,-30761,11038,-30852,10786,-30941,10532,-31029,10278,-31114,10023,-31197,9767,-31278,9511,-31357,9254,-31433,8997,-31508,8739,-31581,8480,-31651,8221,-31719,7961,-31786,7701,-31850,7440,-31912,7179,-31971,6917,-32029,6655,-32085,6392,-32138,6129,-32189,5865,-32238,5601,-32285,5337,-32330,5072,-32372,4807,-32413,4542,-32451,4276,-32487,4011,-32521,3744,-32553,3478,-32582,3211,-32610,2944,-32635,2677,-32658,2410,-32679,2143,-32697,1875,-32714,1607,-32728,1339,-32740,1072,-32750,804,-32758,536,-32763,268,-32766,0,-32767,-269,-32766,-537,-32763,-805,-32758,-1073,-32750,-1340,-32740,-1608,-32728,-1876,-32714,-2144,-32697,-2411,-32679,-2678,-32658,-2945,-32635,-3212,-32610,-3479,-32582,-3745,-32553,-4012,-32521,-4277,-32487,-4543,-32451,-4808,-32413,-5073,-32372,-5338,-32330,-5602,-32285,-5866,-32238,-6130,-32189,-6393,-32138,-6656,-32085,-6918,-32029,-7180,-31971,-7441,-31912,-7702,-31850,-7962,-31786,-8222,-31719,-8481,-31651,-8740,-31581,-8998,-31508,-9255,-31433,-9512,-31357,-9768,-31278,-10024,-31197,-10279,-31114,-10533,-31029,-10787,-30941,-11039,-30852,-11291,-30761,-11543,-30667,-11793,-30572,-12043,-30474,-12292,-30375,-12540,-30273,-12787,-30170,-13034,-30064,-13279,-29956,-13524,-29847,-13767,-29735,-14010,-29622,-14252,-29506,-14493,-29388,-14733,-29269,-14972,-29147,-15210,-29024,-15447,-28898,-15683,-28771,-15918,-28642,-16151,-28511,-16384,-28378,-16616,-28243,-16846,-28106,-17075,-27967,-17304,-27826,-17531,-27684,-17757,-27539,-17981,-27393,-18205,-27245,-18427,-27095,-18648,-26944,-18868,-26790,-19087,-26635,-19304,-26478,-19520,-26319,-19734,-26159,-19948,-25996,-20160,-25832,-20370,-25666,-20580,-25499,-20788,-25330,-20994,-25159,-21199,-24986,-21403,-24812,-21605,-24636,-21806,-24458,-22005,-24279,-22203,-24098,-22400,-23916,-22595,-23732,-22788,-23546,-22980,-23359,-23170,-23170,-23359,-22980,-23546,-22788,-23732,-22595,-23916,-22400,-24098,-22203,-24279,-22005,-24458,-21806,-24636,-21605,-24812,-21403,-24986,-21199,-25159,-20994,-25330,-20788,-25499,-20580,-25666,-20370,-25832,-20160,-25996,-19948,-26159,-19734,-26319,-19520,-26478,-19304,-26635,-19087,-26790,-18868,-26944,-18648,-27095,-18427,-27245,-18205,-27393,-17981,-27539,-17757,-27684,-17531,-27826,-17304,-27967,-17075,-28106,-16846,-28243,-16616,-28378,-16384,-28511,-16151,-28642,-15918,-28771,-15683,-28898,-15447,-29024,-15210,-29147,-14972,-29269,-14733,-29388,-14493,-29506,-14252,-29622,-14010,-29735,-13767,-29847,-13524,-29956,-13279,-30064,-13034,-30170,-12787,-30273,-12540,-30375,-12292,-30474,-12043,-30572,-11793,-30667,-11543,-30761,-11291,-30852,-11039,-30941,-10787,-31029,-10533,-31114,-10279,-31197,-10024,-31278,-9768,-31357,-9512,-31433,-9255,-31508,-8998,-31581,-8740,-31651,-8481,-31719,-8222,-31786,-7962,-31850,-7702,-31912,-7441,-31971,-7180,-32029,-6918,-32085,-6656,-32138,-6393,-32189,-6130,-32238,-5866,-32285,-5602,-32330,-5338,-32372,-5073,-32413,-4808,-32451,-4543,-32487,-4277,-32521,-4012,-32553,-3745,-32582,-3479,-32610,-3212,-32635,-2945,-32658,-2678,-32679,-2411,-32697,-2144,-32714,-1876,-32728,-1608,-32740,-1340,-32750,-1073,-32758,-805,-32763,-537,-32766,-269,-32767,-1,-32766,268,-32763,536,-32758,804,-32750,1072,-32740,1339,-32728,1607,-32714,1875,-32697,2143,-32679,2410,-32658,2677,-32635,2944,-32610,3211,-32582,3478,-32553,3744,-32521,4011,-32487,4276,-32451,4542,-32413,4807,-32372,5072,-32330,5337,-32285,5601,-32238,5865,-32189,6129,-32138,6392,-32085,6655,-32029,6917,-31971,7179,-31912,7440,-31850,7701,-31786,7961,-31719,8221,-31651,8480,-31581,8739,-31508,8997,-31433,9254,-31357,9511,-31278,9767,-31197,10023,-31114,10278,-31029,10532,-30941,10786,-30852,11038,-30761,11290,-30667,11542,-30572,11792,-30474,12042,-30375,12291,-30273,12539,-30170,12786,-30064,13033,-29956,13278,-29847,13523,-29735,13766,-29622,14009,-29506,14251,-29388,14492,-29269,14732,-29147,14971,-29024,15209,-28898,15446,-28771,15682,-28642,15917,-28511,16150,-28378,16383,-28243,16615,-28106,16845,-27967,17074,-27826,17303,-27684,17530,-27539,17756,-27393,17980,-27245,18204,-27095,18426,-26944,18647,-26790,18867,-26635,19086,-26478,19303,-26319,19519,-26159,19733,-25996,19947,-25832,20159,-25666,20369,-25499,20579,-25330,20787,-25159,20993,-24986,21198,-24812,21402,-24636,21604,-24458,21805,-24279,22004,-24098,22202,-23916,22399,-23732,22594,-23546,22787,-23359,22979,-23170,23169,-22980,23358,-22788,23545,-22595,23731,-22400,23915,-22203,24097,-22005,24278,-21806,24457,-21605,24635,-21403,24811,-21199,24985,-20994,25158,-20788,25329,-20580,25498,-20370,25665,-20160,25831,-19948,25995,-19734,26158,-19520,26318,-19304,26477,-19087,26634,-18868,26789,-18648,26943,-18427,27094,-18205,27244,-17981,27392,-17757,27538,-17531,27683,-17304,27825,-17075,27966,-16846,28105,-16616,28242}; diff --git a/openair1/PHY/TOOLS/twiddle18432.h b/openair1/PHY/TOOLS/twiddle18432.h deleted file mode 100644 index 696c7f37ae..0000000000 --- a/openair1/PHY/TOOLS/twiddle18432.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:6143)/18432)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*(0:2:12286)/18432)); -twa2 = zeros(1,12288); -twb2 = zeros(1,12288); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -*/ - -int16_t twa18432[12288] = {32767,0,32766,-12,32766,-23,32766,-34,32766,-45,32766,-56,32766,-68,32766,-79,32766,-90,32766,-101,32766,-112,32766,-123,32766,-135,32766,-146,32766,-157,32766,-168,32766,-179,32766,-190,32766,-202,32766,-213,32766,-224,32766,-235,32766,-246,32765,-257,32765,-269,32765,-280,32765,-291,32765,-302,32765,-313,32765,-324,32765,-336,32765,-347,32765,-358,32764,-369,32764,-380,32764,-391,32764,-403,32764,-414,32764,-425,32764,-436,32763,-447,32763,-458,32763,-470,32763,-481,32763,-492,32763,-503,32762,-514,32762,-525,32762,-537,32762,-548,32762,-559,32762,-570,32761,-581,32761,-592,32761,-604,32761,-615,32761,-626,32760,-637,32760,-648,32760,-659,32760,-671,32759,-682,32759,-693,32759,-704,32759,-715,32758,-726,32758,-738,32758,-749,32758,-760,32757,-771,32757,-782,32757,-793,32757,-805,32756,-816,32756,-827,32756,-838,32756,-849,32755,-860,32755,-872,32755,-883,32754,-894,32754,-905,32754,-916,32753,-927,32753,-939,32753,-950,32752,-961,32752,-972,32752,-983,32751,-994,32751,-1006,32751,-1017,32750,-1028,32750,-1039,32750,-1050,32749,-1061,32749,-1073,32749,-1084,32748,-1095,32748,-1106,32747,-1117,32747,-1128,32747,-1140,32746,-1151,32746,-1162,32746,-1173,32745,-1184,32745,-1195,32744,-1207,32744,-1218,32743,-1229,32743,-1240,32743,-1251,32742,-1262,32742,-1274,32741,-1285,32741,-1296,32740,-1307,32740,-1318,32740,-1329,32739,-1340,32739,-1352,32738,-1363,32738,-1374,32737,-1385,32737,-1396,32736,-1407,32736,-1419,32735,-1430,32735,-1441,32734,-1452,32734,-1463,32733,-1474,32733,-1486,32732,-1497,32732,-1508,32731,-1519,32731,-1530,32730,-1541,32730,-1553,32729,-1564,32729,-1575,32728,-1586,32728,-1597,32727,-1608,32726,-1619,32726,-1631,32725,-1642,32725,-1653,32724,-1664,32724,-1675,32723,-1686,32723,-1698,32722,-1709,32721,-1720,32721,-1731,32720,-1742,32720,-1753,32719,-1764,32718,-1776,32718,-1787,32717,-1798,32717,-1809,32716,-1820,32715,-1831,32715,-1843,32714,-1854,32713,-1865,32713,-1876,32712,-1887,32711,-1898,32711,-1909,32710,-1921,32710,-1932,32709,-1943,32708,-1954,32708,-1965,32707,-1976,32706,-1987,32706,-1999,32705,-2010,32704,-2021,32703,-2032,32703,-2043,32702,-2054,32701,-2066,32701,-2077,32700,-2088,32699,-2099,32699,-2110,32698,-2121,32697,-2132,32696,-2144,32696,-2155,32695,-2166,32694,-2177,32693,-2188,32693,-2199,32692,-2210,32691,-2222,32690,-2233,32690,-2244,32689,-2255,32688,-2266,32687,-2277,32687,-2288,32686,-2300,32685,-2311,32684,-2322,32683,-2333,32683,-2344,32682,-2355,32681,-2366,32680,-2378,32679,-2389,32679,-2400,32678,-2411,32677,-2422,32676,-2433,32675,-2444,32674,-2456,32674,-2467,32673,-2478,32672,-2489,32671,-2500,32670,-2511,32669,-2522,32668,-2534,32668,-2545,32667,-2556,32666,-2567,32665,-2578,32664,-2589,32663,-2600,32662,-2611,32661,-2623,32661,-2634,32660,-2645,32659,-2656,32658,-2667,32657,-2678,32656,-2689,32655,-2701,32654,-2712,32653,-2723,32652,-2734,32651,-2745,32650,-2756,32649,-2767,32649,-2778,32648,-2790,32647,-2801,32646,-2812,32645,-2823,32644,-2834,32643,-2845,32642,-2856,32641,-2867,32640,-2879,32639,-2890,32638,-2901,32637,-2912,32636,-2923,32635,-2934,32634,-2945,32633,-2956,32632,-2968,32631,-2979,32630,-2990,32629,-3001,32628,-3012,32627,-3023,32626,-3034,32625,-3045,32624,-3057,32623,-3068,32622,-3079,32621,-3090,32619,-3101,32618,-3112,32617,-3123,32616,-3134,32615,-3146,32614,-3157,32613,-3168,32612,-3179,32611,-3190,32610,-3201,32609,-3212,32608,-3223,32607,-3234,32605,-3246,32604,-3257,32603,-3268,32602,-3279,32601,-3290,32600,-3301,32599,-3312,32598,-3323,32596,-3334,32595,-3346,32594,-3357,32593,-3368,32592,-3379,32591,-3390,32590,-3401,32588,-3412,32587,-3423,32586,-3434,32585,-3446,32584,-3457,32583,-3468,32581,-3479,32580,-3490,32579,-3501,32578,-3512,32577,-3523,32575,-3534,32574,-3546,32573,-3557,32572,-3568,32571,-3579,32569,-3590,32568,-3601,32567,-3612,32566,-3623,32564,-3634,32563,-3645,32562,-3657,32561,-3668,32559,-3679,32558,-3690,32557,-3701,32556,-3712,32554,-3723,32553,-3734,32552,-3745,32551,-3756,32549,-3768,32548,-3779,32547,-3790,32545,-3801,32544,-3812,32543,-3823,32541,-3834,32540,-3845,32539,-3856,32538,-3867,32536,-3878,32535,-3890,32534,-3901,32532,-3912,32531,-3923,32530,-3934,32528,-3945,32527,-3956,32526,-3967,32524,-3978,32523,-3989,32521,-4000,32520,-4012,32519,-4023,32517,-4034,32516,-4045,32515,-4056,32513,-4067,32512,-4078,32510,-4089,32509,-4100,32508,-4111,32506,-4122,32505,-4133,32503,-4145,32502,-4156,32501,-4167,32499,-4178,32498,-4189,32496,-4200,32495,-4211,32493,-4222,32492,-4233,32491,-4244,32489,-4255,32488,-4266,32486,-4277,32485,-4289,32483,-4300,32482,-4311,32480,-4322,32479,-4333,32477,-4344,32476,-4355,32474,-4366,32473,-4377,32471,-4388,32470,-4399,32468,-4410,32467,-4421,32465,-4432,32464,-4444,32462,-4455,32461,-4466,32459,-4477,32458,-4488,32456,-4499,32455,-4510,32453,-4521,32452,-4532,32450,-4543,32449,-4554,32447,-4565,32445,-4576,32444,-4587,32442,-4598,32441,-4609,32439,-4621,32438,-4632,32436,-4643,32434,-4654,32433,-4665,32431,-4676,32430,-4687,32428,-4698,32426,-4709,32425,-4720,32423,-4731,32422,-4742,32420,-4753,32418,-4764,32417,-4775,32415,-4786,32413,-4797,32412,-4808,32410,-4819,32409,-4831,32407,-4842,32405,-4853,32404,-4864,32402,-4875,32400,-4886,32399,-4897,32397,-4908,32395,-4919,32394,-4930,32392,-4941,32390,-4952,32389,-4963,32387,-4974,32385,-4985,32383,-4996,32382,-5007,32380,-5018,32378,-5029,32377,-5040,32375,-5051,32373,-5062,32371,-5073,32370,-5084,32368,-5095,32366,-5107,32364,-5118,32363,-5129,32361,-5140,32359,-5151,32357,-5162,32356,-5173,32354,-5184,32352,-5195,32350,-5206,32349,-5217,32347,-5228,32345,-5239,32343,-5250,32341,-5261,32340,-5272,32338,-5283,32336,-5294,32334,-5305,32332,-5316,32331,-5327,32329,-5338,32327,-5349,32325,-5360,32323,-5371,32322,-5382,32320,-5393,32318,-5404,32316,-5415,32314,-5426,32312,-5437,32310,-5448,32309,-5459,32307,-5470,32305,-5481,32303,-5492,32301,-5503,32299,-5514,32297,-5525,32295,-5536,32294,-5547,32292,-5558,32290,-5569,32288,-5580,32286,-5591,32284,-5602,32282,-5613,32280,-5624,32278,-5635,32276,-5646,32274,-5657,32273,-5668,32271,-5679,32269,-5690,32267,-5701,32265,-5712,32263,-5723,32261,-5734,32259,-5745,32257,-5756,32255,-5767,32253,-5778,32251,-5789,32249,-5800,32247,-5811,32245,-5822,32243,-5833,32241,-5844,32239,-5855,32237,-5866,32235,-5877,32233,-5888,32231,-5899,32229,-5910,32227,-5921,32225,-5932,32223,-5943,32221,-5954,32219,-5965,32217,-5976,32215,-5987,32213,-5998,32211,-6009,32209,-6020,32207,-6031,32205,-6042,32203,-6053,32201,-6064,32199,-6075,32196,-6086,32194,-6097,32192,-6108,32190,-6119,32188,-6130,32186,-6141,32184,-6152,32182,-6163,32180,-6174,32178,-6185,32176,-6196,32173,-6207,32171,-6218,32169,-6229,32167,-6240,32165,-6251,32163,-6262,32161,-6272,32158,-6283,32156,-6294,32154,-6305,32152,-6316,32150,-6327,32148,-6338,32146,-6349,32143,-6360,32141,-6371,32139,-6382,32137,-6393,32135,-6404,32133,-6415,32130,-6426,32128,-6437,32126,-6448,32124,-6459,32122,-6470,32119,-6481,32117,-6492,32115,-6503,32113,-6513,32110,-6524,32108,-6535,32106,-6546,32104,-6557,32102,-6568,32099,-6579,32097,-6590,32095,-6601,32093,-6612,32090,-6623,32088,-6634,32086,-6645,32084,-6656,32081,-6667,32079,-6678,32077,-6689,32074,-6699,32072,-6710,32070,-6721,32068,-6732,32065,-6743,32063,-6754,32061,-6765,32058,-6776,32056,-6787,32054,-6798,32051,-6809,32049,-6820,32047,-6831,32044,-6842,32042,-6852,32040,-6863,32037,-6874,32035,-6885,32033,-6896,32030,-6907,32028,-6918,32026,-6929,32023,-6940,32021,-6951,32019,-6962,32016,-6973,32014,-6983,32011,-6994,32009,-7005,32007,-7016,32004,-7027,32002,-7038,31999,-7049,31997,-7060,31995,-7071,31992,-7082,31990,-7093,31987,-7103,31985,-7114,31983,-7125,31980,-7136,31978,-7147,31975,-7158,31973,-7169,31970,-7180,31968,-7191,31965,-7202,31963,-7212,31961,-7223,31958,-7234,31956,-7245,31953,-7256,31951,-7267,31948,-7278,31946,-7289,31943,-7300,31941,-7311,31938,-7321,31936,-7332,31933,-7343,31931,-7354,31928,-7365,31926,-7376,31923,-7387,31921,-7398,31918,-7408,31916,-7419,31913,-7430,31911,-7441,31908,-7452,31905,-7463,31903,-7474,31900,-7485,31898,-7495,31895,-7506,31893,-7517,31890,-7528,31888,-7539,31885,-7550,31882,-7561,31880,-7572,31877,-7582,31875,-7593,31872,-7604,31869,-7615,31867,-7626,31864,-7637,31862,-7648,31859,-7658,31856,-7669,31854,-7680,31851,-7691,31849,-7702,31846,-7713,31843,-7724,31841,-7734,31838,-7745,31835,-7756,31833,-7767,31830,-7778,31827,-7789,31825,-7800,31822,-7810,31819,-7821,31817,-7832,31814,-7843,31811,-7854,31809,-7865,31806,-7876,31803,-7886,31801,-7897,31798,-7908,31795,-7919,31793,-7930,31790,-7941,31787,-7951,31785,-7962,31782,-7973,31779,-7984,31776,-7995,31774,-8006,31771,-8016,31768,-8027,31765,-8038,31763,-8049,31760,-8060,31757,-8071,31754,-8081,31752,-8092,31749,-8103,31746,-8114,31743,-8125,31741,-8135,31738,-8146,31735,-8157,31732,-8168,31729,-8179,31727,-8190,31724,-8200,31721,-8211,31718,-8222,31716,-8233,31713,-8244,31710,-8254,31707,-8265,31704,-8276,31701,-8287,31699,-8298,31696,-8308,31693,-8319,31690,-8330,31687,-8341,31684,-8352,31682,-8362,31679,-8373,31676,-8384,31673,-8395,31670,-8406,31667,-8416,31664,-8427,31662,-8438,31659,-8449,31656,-8460,31653,-8470,31650,-8481,31647,-8492,31644,-8503,31641,-8514,31638,-8524,31635,-8535,31633,-8546,31630,-8557,31627,-8568,31624,-8578,31621,-8589,31618,-8600,31615,-8611,31612,-8621,31609,-8632,31606,-8643,31603,-8654,31600,-8664,31597,-8675,31594,-8686,31591,-8697,31588,-8708,31586,-8718,31583,-8729,31580,-8740,31577,-8751,31574,-8761,31571,-8772,31568,-8783,31565,-8794,31562,-8804,31559,-8815,31556,-8826,31553,-8837,31550,-8847,31547,-8858,31544,-8869,31541,-8880,31537,-8890,31534,-8901,31531,-8912,31528,-8923,31525,-8933,31522,-8944,31519,-8955,31516,-8966,31513,-8976,31510,-8987,31507,-8998,31504,-9009,31501,-9019,31498,-9030,31495,-9041,31492,-9052,31489,-9062,31485,-9073,31482,-9084,31479,-9095,31476,-9105,31473,-9116,31470,-9127,31467,-9137,31464,-9148,31461,-9159,31457,-9170,31454,-9180,31451,-9191,31448,-9202,31445,-9213,31442,-9223,31439,-9234,31435,-9245,31432,-9255,31429,-9266,31426,-9277,31423,-9288,31420,-9298,31417,-9309,31413,-9320,31410,-9330,31407,-9341,31404,-9352,31401,-9363,31397,-9373,31394,-9384,31391,-9395,31388,-9405,31385,-9416,31381,-9427,31378,-9437,31375,-9448,31372,-9459,31369,-9469,31365,-9480,31362,-9491,31359,-9502,31356,-9512,31352,-9523,31349,-9534,31346,-9544,31343,-9555,31339,-9566,31336,-9576,31333,-9587,31330,-9598,31326,-9608,31323,-9619,31320,-9630,31316,-9640,31313,-9651,31310,-9662,31307,-9672,31303,-9683,31300,-9694,31297,-9704,31293,-9715,31290,-9726,31287,-9736,31283,-9747,31280,-9758,31277,-9768,31273,-9779,31270,-9790,31267,-9800,31263,-9811,31260,-9822,31257,-9832,31253,-9843,31250,-9854,31247,-9864,31243,-9875,31240,-9886,31236,-9896,31233,-9907,31230,-9918,31226,-9928,31223,-9939,31220,-9950,31216,-9960,31213,-9971,31209,-9981,31206,-9992,31203,-10003,31199,-10013,31196,-10024,31192,-10035,31189,-10045,31185,-10056,31182,-10067,31179,-10077,31175,-10088,31172,-10098,31168,-10109,31165,-10120,31161,-10130,31158,-10141,31154,-10152,31151,-10162,31148,-10173,31144,-10183,31141,-10194,31137,-10205,31134,-10215,31130,-10226,31127,-10236,31123,-10247,31120,-10258,31116,-10268,31113,-10279,31109,-10290,31106,-10300,31102,-10311,31099,-10321,31095,-10332,31092,-10343,31088,-10353,31085,-10364,31081,-10374,31077,-10385,31074,-10396,31070,-10406,31067,-10417,31063,-10427,31060,-10438,31056,-10448,31053,-10459,31049,-10470,31045,-10480,31042,-10491,31038,-10501,31035,-10512,31031,-10523,31028,-10533,31024,-10544,31020,-10554,31017,-10565,31013,-10575,31010,-10586,31006,-10597,31002,-10607,30999,-10618,30995,-10628,30991,-10639,30988,-10649,30984,-10660,30981,-10671,30977,-10681,30973,-10692,30970,-10702,30966,-10713,30962,-10723,30959,-10734,30955,-10744,30951,-10755,30948,-10766,30944,-10776,30940,-10787,30937,-10797,30933,-10808,30929,-10818,30926,-10829,30922,-10839,30918,-10850,30915,-10860,30911,-10871,30907,-10881,30903,-10892,30900,-10903,30896,-10913,30892,-10924,30889,-10934,30885,-10945,30881,-10955,30877,-10966,30874,-10976,30870,-10987,30866,-10997,30862,-11008,30859,-11018,30855,-11029,30851,-11039,30847,-11050,30844,-11060,30840,-11071,30836,-11081,30832,-11092,30828,-11102,30825,-11113,30821,-11123,30817,-11134,30813,-11144,30809,-11155,30806,-11165,30802,-11176,30798,-11186,30794,-11197,30790,-11207,30787,-11218,30783,-11228,30779,-11239,30775,-11249,30771,-11260,30767,-11270,30764,-11281,30760,-11291,30756,-11302,30752,-11312,30748,-11323,30744,-11333,30740,-11344,30737,-11354,30733,-11365,30729,-11375,30725,-11386,30721,-11396,30717,-11407,30713,-11417,30709,-11428,30705,-11438,30702,-11449,30698,-11459,30694,-11469,30690,-11480,30686,-11490,30682,-11501,30678,-11511,30674,-11522,30670,-11532,30666,-11543,30662,-11553,30658,-11564,30655,-11574,30651,-11584,30647,-11595,30643,-11605,30639,-11616,30635,-11626,30631,-11637,30627,-11647,30623,-11658,30619,-11668,30615,-11678,30611,-11689,30607,-11699,30603,-11710,30599,-11720,30595,-11731,30591,-11741,30587,-11751,30583,-11762,30579,-11772,30575,-11783,30571,-11793,30567,-11804,30563,-11814,30559,-11824,30555,-11835,30551,-11845,30547,-11856,30543,-11866,30539,-11877,30535,-11887,30530,-11897,30526,-11908,30522,-11918,30518,-11929,30514,-11939,30510,-11949,30506,-11960,30502,-11970,30498,-11981,30494,-11991,30490,-12001,30486,-12012,30482,-12022,30477,-12033,30473,-12043,30469,-12053,30465,-12064,30461,-12074,30457,-12084,30453,-12095,30449,-12105,30445,-12116,30440,-12126,30436,-12136,30432,-12147,30428,-12157,30424,-12167,30420,-12178,30416,-12188,30411,-12199,30407,-12209,30403,-12219,30399,-12230,30395,-12240,30391,-12250,30386,-12261,30382,-12271,30378,-12281,30374,-12292,30370,-12302,30365,-12313,30361,-12323,30357,-12333,30353,-12344,30349,-12354,30344,-12364,30340,-12375,30336,-12385,30332,-12395,30328,-12406,30323,-12416,30319,-12426,30315,-12437,30311,-12447,30306,-12457,30302,-12468,30298,-12478,30294,-12488,30289,-12499,30285,-12509,30281,-12519,30277,-12530,30272,-12540,30268,-12550,30264,-12561,30259,-12571,30255,-12581,30251,-12591,30247,-12602,30242,-12612,30238,-12622,30234,-12633,30229,-12643,30225,-12653,30221,-12664,30216,-12674,30212,-12684,30208,-12695,30203,-12705,30199,-12715,30195,-12725,30190,-12736,30186,-12746,30182,-12756,30177,-12767,30173,-12777,30169,-12787,30164,-12797,30160,-12808,30156,-12818,30151,-12828,30147,-12839,30142,-12849,30138,-12859,30134,-12869,30129,-12880,30125,-12890,30121,-12900,30116,-12910,30112,-12921,30107,-12931,30103,-12941,30098,-12951,30094,-12962,30090,-12972,30085,-12982,30081,-12993,30076,-13003,30072,-13013,30067,-13023,30063,-13034,30059,-13044,30054,-13054,30050,-13064,30045,-13075,30041,-13085,30036,-13095,30032,-13105,30027,-13115,30023,-13126,30018,-13136,30014,-13146,30009,-13156,30005,-13167,30001,-13177,29996,-13187,29992,-13197,29987,-13208,29983,-13218,29978,-13228,29973,-13238,29969,-13248,29964,-13259,29960,-13269,29955,-13279,29951,-13289,29946,-13299,29942,-13310,29937,-13320,29933,-13330,29928,-13340,29924,-13350,29919,-13361,29915,-13371,29910,-13381,29905,-13391,29901,-13401,29896,-13412,29892,-13422,29887,-13432,29883,-13442,29878,-13452,29873,-13463,29869,-13473,29864,-13483,29860,-13493,29855,-13503,29850,-13513,29846,-13524,29841,-13534,29837,-13544,29832,-13554,29827,-13564,29823,-13575,29818,-13585,29813,-13595,29809,-13605,29804,-13615,29800,-13625,29795,-13635,29790,-13646,29786,-13656,29781,-13666,29776,-13676,29772,-13686,29767,-13696,29762,-13707,29758,-13717,29753,-13727,29748,-13737,29744,-13747,29739,-13757,29734,-13767,29729,-13778,29725,-13788,29720,-13798,29715,-13808,29711,-13818,29706,-13828,29701,-13838,29696,-13848,29692,-13859,29687,-13869,29682,-13879,29678,-13889,29673,-13899,29668,-13909,29663,-13919,29659,-13929,29654,-13939,29649,-13950,29644,-13960,29640,-13970,29635,-13980,29630,-13990,29625,-14000,29621,-14010,29616,-14020,29611,-14030,29606,-14040,29601,-14051,29597,-14061,29592,-14071,29587,-14081,29582,-14091,29577,-14101,29573,-14111,29568,-14121,29563,-14131,29558,-14141,29553,-14151,29548,-14161,29544,-14172,29539,-14182,29534,-14192,29529,-14202,29524,-14212,29519,-14222,29515,-14232,29510,-14242,29505,-14252,29500,-14262,29495,-14272,29490,-14282,29485,-14292,29481,-14302,29476,-14312,29471,-14322,29466,-14332,29461,-14343,29456,-14353,29451,-14363,29446,-14373,29441,-14383,29437,-14393,29432,-14403,29427,-14413,29422,-14423,29417,-14433,29412,-14443,29407,-14453,29402,-14463,29397,-14473,29392,-14483,29387,-14493,29382,-14503,29377,-14513,29372,-14523,29368,-14533,29363,-14543,29358,-14553,29353,-14563,29348,-14573,29343,-14583,29338,-14593,29333,-14603,29328,-14613,29323,-14623,29318,-14633,29313,-14643,29308,-14653,29303,-14663,29298,-14673,29293,-14683,29288,-14693,29283,-14703,29278,-14713,29273,-14723,29268,-14733,29263,-14743,29258,-14753,29253,-14763,29248,-14773,29243,-14783,29238,-14793,29233,-14803,29227,-14813,29222,-14823,29217,-14833,29212,-14843,29207,-14853,29202,-14862,29197,-14872,29192,-14882,29187,-14892,29182,-14902,29177,-14912,29172,-14922,29167,-14932,29162,-14942,29156,-14952,29151,-14962,29146,-14972,29141,-14982,29136,-14992,29131,-15002,29126,-15012,29121,-15022,29116,-15031,29110,-15041,29105,-15051,29100,-15061,29095,-15071,29090,-15081,29085,-15091,29080,-15101,29074,-15111,29069,-15121,29064,-15131,29059,-15141,29054,-15150,29049,-15160,29044,-15170,29038,-15180,29033,-15190,29028,-15200,29023,-15210,29018,-15220,29012,-15230,29007,-15239,29002,-15249,28997,-15259,28992,-15269,28986,-15279,28981,-15289,28976,-15299,28971,-15309,28966,-15319,28960,-15328,28955,-15338,28950,-15348,28945,-15358,28939,-15368,28934,-15378,28929,-15388,28924,-15397,28918,-15407,28913,-15417,28908,-15427,28903,-15437,28897,-15447,28892,-15457,28887,-15466,28882,-15476,28876,-15486,28871,-15496,28866,-15506,28860,-15516,28855,-15526,28850,-15535,28845,-15545,28839,-15555,28834,-15565,28829,-15575,28823,-15584,28818,-15594,28813,-15604,28807,-15614,28802,-15624,28797,-15634,28791,-15643,28786,-15653,28781,-15663,28775,-15673,28770,-15683,28765,-15692,28759,-15702,28754,-15712,28749,-15722,28743,-15732,28738,-15741,28733,-15751,28727,-15761,28722,-15771,28716,-15781,28711,-15790,28706,-15800,28700,-15810,28695,-15820,28690,-15830,28684,-15839,28679,-15849,28673,-15859,28668,-15869,28662,-15878,28657,-15888,28652,-15898,28646,-15908,28641,-15918,28635,-15927,28630,-15937,28625,-15947,28619,-15957,28614,-15966,28608,-15976,28603,-15986,28597,-15996,28592,-16005,28586,-16015,28581,-16025,28575,-16035,28570,-16044,28565,-16054,28559,-16064,28554,-16073,28548,-16083,28543,-16093,28537,-16103,28532,-16112,28526,-16122,28521,-16132,28515,-16142,28510,-16151,28504,-16161,28499,-16171,28493,-16180,28488,-16190,28482,-16200,28477,-16210,28471,-16219,28465,-16229,28460,-16239,28454,-16248,28449,-16258,28443,-16268,28438,-16277,28432,-16287,28427,-16297,28421,-16307,28416,-16316,28410,-16326,28404,-16336,28399,-16345,28393,-16355,28388,-16365,28382,-16374,28377,-16384,28371,-16394,28365,-16403,28360,-16413,28354,-16423,28349,-16432,28343,-16442,28337,-16452,28332,-16461,28326,-16471,28321,-16481,28315,-16490,28309,-16500,28304,-16510,28298,-16519,28292,-16529,28287,-16539,28281,-16548,28275,-16558,28270,-16567,28264,-16577,28259,-16587,28253,-16596,28247,-16606,28242,-16616,28236,-16625,28230,-16635,28225,-16644,28219,-16654,28213,-16664,28208,-16673,28202,-16683,28196,-16693,28190,-16702,28185,-16712,28179,-16721,28173,-16731,28168,-16741,28162,-16750,28156,-16760,28151,-16769,28145,-16779,28139,-16789,28133,-16798,28128,-16808,28122,-16817,28116,-16827,28110,-16837,28105,-16846,28099,-16856,28093,-16865,28087,-16875,28082,-16884,28076,-16894,28070,-16904,28064,-16913,28059,-16923,28053,-16932,28047,-16942,28041,-16951,28036,-16961,28030,-16970,28024,-16980,28018,-16990,28012,-16999,28007,-17009,28001,-17018,27995,-17028,27989,-17037,27983,-17047,27978,-17056,27972,-17066,27966,-17075,27960,-17085,27954,-17095,27948,-17104,27943,-17114,27937,-17123,27931,-17133,27925,-17142,27919,-17152,27913,-17161,27908,-17171,27902,-17180,27896,-17190,27890,-17199,27884,-17209,27878,-17218,27872,-17228,27867,-17237,27861,-17247,27855,-17256,27849,-17266,27843,-17275,27837,-17285,27831,-17294,27825,-17304,27819,-17313,27814,-17323,27808,-17332,27802,-17342,27796,-17351,27790,-17361,27784,-17370,27778,-17380,27772,-17389,27766,-17398,27760,-17408,27754,-17417,27748,-17427,27742,-17436,27736,-17446,27731,-17455,27725,-17465,27719,-17474,27713,-17484,27707,-17493,27701,-17502,27695,-17512,27689,-17521,27683,-17531,27677,-17540,27671,-17550,27665,-17559,27659,-17568,27653,-17578,27647,-17587,27641,-17597,27635,-17606,27629,-17616,27623,-17625,27617,-17634,27611,-17644,27605,-17653,27599,-17663,27593,-17672,27587,-17681,27581,-17691,27575,-17700,27569,-17710,27563,-17719,27557,-17728,27551,-17738,27545,-17747,27538,-17757,27532,-17766,27526,-17775,27520,-17785,27514,-17794,27508,-17804,27502,-17813,27496,-17822,27490,-17832,27484,-17841,27478,-17850,27472,-17860,27466,-17869,27460,-17879,27453,-17888,27447,-17897,27441,-17907,27435,-17916,27429,-17925,27423,-17935,27417,-17944,27411,-17953,27405,-17963,27398,-17972,27392,-17981,27386,-17991,27380,-18000,27374,-18009,27368,-18019,27362,-18028,27355,-18037,27349,-18047,27343,-18056,27337,-18065,27331,-18075,27325,-18084,27319,-18093,27312,-18103,27306,-18112,27300,-18121,27294,-18131,27288,-18140,27281,-18149,27275,-18158,27269,-18168,27263,-18177,27257,-18186,27250,-18196,27244,-18205,27238,-18214,27232,-18223,27226,-18233,27219,-18242,27213,-18251,27207,-18261,27201,-18270,27195,-18279,27188,-18288,27182,-18298,27176,-18307,27170,-18316,27163,-18325,27157,-18335,27151,-18344,27145,-18353,27138,-18362,27132,-18372,27126,-18381,27120,-18390,27113,-18399,27107,-18409,27101,-18418,27094,-18427,27088,-18436,27082,-18446,27076,-18455,27069,-18464,27063,-18473,27057,-18483,27050,-18492,27044,-18501,27038,-18510,27031,-18519,27025,-18529,27019,-18538,27012,-18547,27006,-18556,27000,-18565,26994,-18575,26987,-18584,26981,-18593,26975,-18602,26968,-18611,26962,-18621,26955,-18630,26949,-18639,26943,-18648,26936,-18657,26930,-18667,26924,-18676,26917,-18685,26911,-18694,26905,-18703,26898,-18712,26892,-18722,26885,-18731,26879,-18740,26873,-18749,26866,-18758,26860,-18767,26853,-18777,26847,-18786,26841,-18795,26834,-18804,26828,-18813,26821,-18822,26815,-18831,26809,-18841,26802,-18850,26796,-18859,26789,-18868,26783,-18877,26776,-18886,26770,-18895,26764,-18905,26757,-18914,26751,-18923,26744,-18932,26738,-18941,26731,-18950,26725,-18959,26718,-18968,26712,-18977,26705,-18987,26699,-18996,26692,-19005,26686,-19014,26680,-19023,26673,-19032,26667,-19041,26660,-19050,26654,-19059,26647,-19068,26641,-19077,26634,-19087,26628,-19096,26621,-19105,26615,-19114,26608,-19123,26601,-19132,26595,-19141,26588,-19150,26582,-19159,26575,-19168,26569,-19177,26562,-19186,26556,-19195,26549,-19204,26543,-19213,26536,-19222,26530,-19232,26523,-19241,26516,-19250,26510,-19259,26503,-19268,26497,-19277,26490,-19286,26484,-19295,26477,-19304,26470,-19313,26464,-19322,26457,-19331,26451,-19340,26444,-19349,26437,-19358,26431,-19367,26424,-19376,26418,-19385,26411,-19394,26404,-19403,26398,-19412,26391,-19421,26385,-19430,26378,-19439,26371,-19448,26365,-19457,26358,-19466,26351,-19475,26345,-19484,26338,-19493,26332,-19502,26325,-19511,26318,-19520,26312,-19529,26305,-19538,26298,-19547,26292,-19556,26285,-19565,26278,-19574,26272,-19583,26265,-19591,26258,-19600,26252,-19609,26245,-19618,26238,-19627,26231,-19636,26225,-19645,26218,-19654,26211,-19663,26205,-19672,26198,-19681,26191,-19690,26185,-19699,26178,-19708,26171,-19717,26164,-19726,26158,-19734,26151,-19743,26144,-19752,26137,-19761,26131,-19770,26124,-19779,26117,-19788,26110,-19797,26104,-19806,26097,-19815,26090,-19823,26083,-19832,26077,-19841,26070,-19850,26063,-19859,26056,-19868,26050,-19877,26043,-19886,26036,-19895,26029,-19903,26022,-19912,26016,-19921,26009,-19930,26002,-19939,25995,-19948,25989,-19957,25982,-19966,25975,-19974,25968,-19983,25961,-19992,25954,-20001,25948,-20010,25941,-20019,25934,-20027,25927,-20036,25920,-20045,25913,-20054,25907,-20063,25900,-20072,25893,-20080,25886,-20089,25879,-20098,25872,-20107,25866,-20116,25859,-20125,25852,-20133,25845,-20142,25838,-20151,25831,-20160,25824,-20169,25817,-20177,25811,-20186,25804,-20195,25797,-20204,25790,-20213,25783,-20221,25776,-20230,25769,-20239,25762,-20248,25755,-20257,25749,-20265,25742,-20274,25735,-20283,25728,-20292,25721,-20300,25714,-20309,25707,-20318,25700,-20327,25693,-20335,25686,-20344,25679,-20353,25672,-20362,25665,-20370,25659,-20379,25652,-20388,25645,-20397,25638,-20405,25631,-20414,25624,-20423,25617,-20432,25610,-20440,25603,-20449,25596,-20458,25589,-20467,25582,-20475,25575,-20484,25568,-20493,25561,-20501,25554,-20510,25547,-20519,25540,-20528,25533,-20536,25526,-20545,25519,-20554,25512,-20562,25505,-20571,25498,-20580,25491,-20588,25484,-20597,25477,-20606,25470,-20614,25463,-20623,25456,-20632,25449,-20641,25442,-20649,25435,-20658,25428,-20667,25421,-20675,25414,-20684,25407,-20693,25399,-20701,25392,-20710,25385,-20719,25378,-20727,25371,-20736,25364,-20744,25357,-20753,25350,-20762,25343,-20770,25336,-20779,25329,-20788,25322,-20796,25315,-20805,25307,-20814,25300,-20822,25293,-20831,25286,-20839,25279,-20848,25272,-20857,25265,-20865,25258,-20874,25251,-20882,25243,-20891,25236,-20900,25229,-20908,25222,-20917,25215,-20926,25208,-20934,25201,-20943,25194,-20951,25186,-20960,25179,-20968,25172,-20977,25165,-20986,25158,-20994,25151,-21003,25144,-21011,25136,-21020,25129,-21028,25122,-21037,25115,-21046,25108,-21054,25100,-21063,25093,-21071,25086,-21080,25079,-21088,25072,-21097,25065,-21105,25057,-21114,25050,-21123,25043,-21131,25036,-21140,25029,-21148,25021,-21157,25014,-21165,25007,-21174,25000,-21182,24992,-21191,24985,-21199,24978,-21208,24971,-21216,24964,-21225,24956,-21233,24949,-21242,24942,-21250,24935,-21259,24927,-21267,24920,-21276,24913,-21284,24906,-21293,24898,-21301,24891,-21310,24884,-21318,24877,-21327,24869,-21335,24862,-21344,24855,-21352,24847,-21361,24840,-21369,24833,-21378,24826,-21386,24818,-21395,24811,-21403,24804,-21411,24796,-21420,24789,-21428,24782,-21437,24774,-21445,24767,-21454,24760,-21462,24753,-21471,24745,-21479,24738,-21487,24731,-21496,24723,-21504,24716,-21513,24709,-21521,24701,-21530,24694,-21538,24687,-21546,24679,-21555,24672,-21563,24664,-21572,24657,-21580,24650,-21588,24642,-21597,24635,-21605,24628,-21614,24620,-21622,24613,-21630,24606,-21639,24598,-21647,24591,-21656,24583,-21664,24576,-21672,24569,-21681,24561,-21689,24554,-21698,24546,-21706,24539,-21714,24532,-21723,24524,-21731,24517,-21739,24509,-21748,24502,-21756,24495,-21764,24487,-21773,24480,-21781,24472,-21789,24465,-21798,24457,-21806,24450,-21814,24443,-21823,24435,-21831,24428,-21839,24420,-21848,24413,-21856,24405,-21864,24398,-21873,24390,-21881,24383,-21889,24376,-21898,24368,-21906,24361,-21914,24353,-21923,24346,-21931,24338,-21939,24331,-21947,24323,-21956,24316,-21964,24308,-21972,24301,-21981,24293,-21989,24286,-21997,24278,-22005,24271,-22014,24263,-22022,24256,-22030,24248,-22039,24241,-22047,24233,-22055,24226,-22063,24218,-22072,24211,-22080,24203,-22088,24196,-22096,24188,-22105,24180,-22113,24173,-22121,24165,-22129,24158,-22138,24150,-22146,24143,-22154,24135,-22162,24128,-22170,24120,-22179,24113,-22187,24105,-22195,24097,-22203,24090,-22212,24082,-22220,24075,-22228,24067,-22236,24060,-22244,24052,-22253,24044,-22261,24037,-22269,24029,-22277,24022,-22285,24014,-22294,24006,-22302,23999,-22310,23991,-22318,23984,-22326,23976,-22334,23968,-22343,23961,-22351,23953,-22359,23945,-22367,23938,-22375,23930,-22383,23923,-22392,23915,-22400,23907,-22408,23900,-22416,23892,-22424,23884,-22432,23877,-22440,23869,-22449,23861,-22457,23854,-22465,23846,-22473,23838,-22481,23831,-22489,23823,-22497,23815,-22506,23808,-22514,23800,-22522,23792,-22530,23785,-22538,23777,-22546,23769,-22554,23762,-22562,23754,-22570,23746,-22578,23739,-22587,23731,-22595,23723,-22603,23715,-22611,23708,-22619,23700,-22627,23692,-22635,23685,-22643,23677,-22651,23669,-22659,23661,-22667,23654,-22675,23646,-22684,23638,-22692,23631,-22700,23623,-22708,23615,-22716,23607,-22724,23600,-22732,23592,-22740,23584,-22748,23576,-22756,23569,-22764,23561,-22772,23553,-22780,23545,-22788,23537,-22796,23530,-22804,23522,-22812,23514,-22820,23506,-22828,23499,-22836,23491,-22844,23483,-22852,23475,-22860,23467,-22868,23460,-22876,23452,-22884,23444,-22892,23436,-22900,23428,-22908,23421,-22916,23413,-22924,23405,-22932,23397,-22940,23389,-22948,23382,-22956,23374,-22964,23366,-22972,23358,-22980,23350,-22988,23342,-22996,23335,-23004,23327,-23012,23319,-23020,23311,-23028,23303,-23036,23295,-23044,23287,-23051,23280,-23059,23272,-23067,23264,-23075,23256,-23083,23248,-23091,23240,-23099,23232,-23107,23224,-23115,23217,-23123,23209,-23131,23201,-23139,23193,-23147,23185,-23154,23177,-23162,23169,-23170,23161,-23178,23153,-23186,23146,-23194,23138,-23202,23130,-23210,23122,-23218,23114,-23225,23106,-23233,23098,-23241,23090,-23249,23082,-23257,23074,-23265,23066,-23273,23058,-23281,23050,-23288,23043,-23296,23035,-23304,23027,-23312,23019,-23320,23011,-23328,23003,-23336,22995,-23343,22987,-23351,22979,-23359,22971,-23367,22963,-23375,22955,-23383,22947,-23390,22939,-23398,22931,-23406,22923,-23414,22915,-23422,22907,-23429,22899,-23437,22891,-23445,22883,-23453,22875,-23461,22867,-23468,22859,-23476,22851,-23484,22843,-23492,22835,-23500,22827,-23507,22819,-23515,22811,-23523,22803,-23531,22795,-23538,22787,-23546,22779,-23554,22771,-23562,22763,-23570,22755,-23577,22747,-23585,22739,-23593,22731,-23601,22723,-23608,22715,-23616,22707,-23624,22699,-23632,22691,-23639,22683,-23647,22674,-23655,22666,-23662,22658,-23670,22650,-23678,22642,-23686,22634,-23693,22626,-23701,22618,-23709,22610,-23716,22602,-23724,22594,-23732,22586,-23740,22577,-23747,22569,-23755,22561,-23763,22553,-23770,22545,-23778,22537,-23786,22529,-23793,22521,-23801,22513,-23809,22505,-23816,22496,-23824,22488,-23832,22480,-23839,22472,-23847,22464,-23855,22456,-23862,22448,-23870,22439,-23878,22431,-23885,22423,-23893,22415,-23901,22407,-23908,22399,-23916,22391,-23924,22382,-23931,22374,-23939,22366,-23946,22358,-23954,22350,-23962,22342,-23969,22333,-23977,22325,-23985,22317,-23992,22309,-24000,22301,-24007,22293,-24015,22284,-24023,22276,-24030,22268,-24038,22260,-24045,22252,-24053,22243,-24061,22235,-24068,22227,-24076,22219,-24083,22211,-24091,22202,-24098,22194,-24106,22186,-24114,22178,-24121,22169,-24129,22161,-24136,22153,-24144,22145,-24151,22137,-24159,22128,-24166,22120,-24174,22112,-24181,22104,-24189,22095,-24197,22087,-24204,22079,-24212,22071,-24219,22062,-24227,22054,-24234,22046,-24242,22038,-24249,22029,-24257,22021,-24264,22013,-24272,22004,-24279,21996,-24287,21988,-24294,21980,-24302,21971,-24309,21963,-24317,21955,-24324,21946,-24332,21938,-24339,21930,-24347,21922,-24354,21913,-24362,21905,-24369,21897,-24377,21888,-24384,21880,-24391,21872,-24399,21863,-24406,21855,-24414,21847,-24421,21838,-24429,21830,-24436,21822,-24444,21813,-24451,21805,-24458,21797,-24466,21788,-24473,21780,-24481,21772,-24488,21763,-24496,21755,-24503,21747,-24510,21738,-24518,21730,-24525,21722,-24533,21713,-24540,21705,-24547,21697,-24555,21688,-24562,21680,-24570,21671,-24577,21663,-24584,21655,-24592,21646,-24599,21638,-24607,21629,-24614,21621,-24621,21613,-24629,21604,-24636,21596,-24643,21587,-24651,21579,-24658,21571,-24665,21562,-24673,21554,-24680,21545,-24688,21537,-24695,21529,-24702,21520,-24710,21512,-24717,21503,-24724,21495,-24732,21486,-24739,21478,-24746,21470,-24754,21461,-24761,21453,-24768,21444,-24775,21436,-24783,21427,-24790,21419,-24797,21410,-24805,21402,-24812,21394,-24819,21385,-24827,21377,-24834,21368,-24841,21360,-24848,21351,-24856,21343,-24863,21334,-24870,21326,-24878,21317,-24885,21309,-24892,21300,-24899,21292,-24907,21283,-24914,21275,-24921,21266,-24928,21258,-24936,21249,-24943,21241,-24950,21232,-24957,21224,-24965,21215,-24972,21207,-24979,21198,-24986,21190,-24993,21181,-25001,21173,-25008,21164,-25015,21156,-25022,21147,-25030,21139,-25037,21130,-25044,21122,-25051,21113,-25058,21104,-25066,21096,-25073,21087,-25080,21079,-25087,21070,-25094,21062,-25101,21053,-25109,21045,-25116,21036,-25123,21027,-25130,21019,-25137,21010,-25145,21002,-25152,20993,-25159,20985,-25166,20976,-25173,20967,-25180,20959,-25187,20950,-25195,20942,-25202,20933,-25209,20925,-25216,20916,-25223,20907,-25230,20899,-25237,20890,-25244,20881,-25252,20873,-25259,20864,-25266,20856,-25273,20847,-25280,20838,-25287,20830,-25294,20821,-25301,20813,-25308,20804,-25316,20795,-25323,20787,-25330,20778,-25337,20769,-25344,20761,-25351,20752,-25358,20743,-25365,20735,-25372,20726,-25379,20718,-25386,20709,-25393,20700,-25400,20692,-25408,20683,-25415,20674,-25422,20666,-25429,20657,-25436,20648,-25443,20640,-25450,20631,-25457,20622,-25464,20613,-25471,20605,-25478,20596,-25485,20587,-25492,20579,-25499,20570,-25506,20561,-25513,20553,-25520,20544,-25527,20535,-25534,20527,-25541,20518,-25548,20509,-25555,20500,-25562,20492,-25569,20483,-25576,20474,-25583,20466,-25590,20457,-25597,20448,-25604,20439,-25611,20431,-25618,20422,-25625,20413,-25632,20404,-25639,20396,-25646,20387,-25653,20378,-25660,20369,-25666,20361,-25673,20352,-25680,20343,-25687,20334,-25694,20326,-25701,20317,-25708,20308,-25715,20299,-25722,20291,-25729,20282,-25736,20273,-25743,20264,-25750,20256,-25756,20247,-25763,20238,-25770,20229,-25777,20220,-25784,20212,-25791,20203,-25798,20194,-25805,20185,-25812,20176,-25818,20168,-25825,20159,-25832,20150,-25839,20141,-25846,20132,-25853,20124,-25860,20115,-25867,20106,-25873,20097,-25880,20088,-25887,20079,-25894,20071,-25901,20062,-25908,20053,-25914,20044,-25921,20035,-25928,20026,-25935,20018,-25942,20009,-25949,20000,-25955,19991,-25962,19982,-25969,19973,-25976,19965,-25983,19956,-25990,19947,-25996,19938,-26003,19929,-26010,19920,-26017,19911,-26023,19902,-26030,19894,-26037,19885,-26044,19876,-26051,19867,-26057,19858,-26064,19849,-26071,19840,-26078,19831,-26084,19822,-26091,19814,-26098,19805,-26105,19796,-26111,19787,-26118,19778,-26125,19769,-26132,19760,-26138,19751,-26145,19742,-26152,19733,-26159,19725,-26165,19716,-26172,19707,-26179,19698,-26186,19689,-26192,19680,-26199,19671,-26206,19662,-26212,19653,-26219,19644,-26226,19635,-26232,19626,-26239,19617,-26246,19608,-26253,19599,-26259,19590,-26266,19582,-26273,19573,-26279,19564,-26286,19555,-26293,19546,-26299,19537,-26306,19528,-26313,19519,-26319,19510,-26326,19501,-26333,19492,-26339,19483,-26346,19474,-26352,19465,-26359,19456,-26366,19447,-26372,19438,-26379,19429,-26386,19420,-26392,19411,-26399,19402,-26405,19393,-26412,19384,-26419,19375,-26425,19366,-26432,19357,-26438,19348,-26445,19339,-26452,19330,-26458,19321,-26465,19312,-26471,19303,-26478,19294,-26485,19285,-26491,19276,-26498,19267,-26504,19258,-26511,19249,-26517,19240,-26524,19231,-26531,19221,-26537,19212,-26544,19203,-26550,19194,-26557,19185,-26563,19176,-26570,19167,-26576,19158,-26583,19149,-26589,19140,-26596,19131,-26602,19122,-26609,19113,-26616,19104,-26622,19095,-26629,19086,-26635,19076,-26642,19067,-26648,19058,-26655,19049,-26661,19040,-26668,19031,-26674,19022,-26681,19013,-26687,19004,-26693,18995,-26700,18986,-26706,18976,-26713,18967,-26719,18958,-26726,18949,-26732,18940,-26739,18931,-26745,18922,-26752,18913,-26758,18904,-26765,18894,-26771,18885,-26777,18876,-26784,18867,-26790,18858,-26797,18849,-26803,18840,-26810,18830,-26816,18821,-26822,18812,-26829,18803,-26835,18794,-26842,18785,-26848,18776,-26854,18766,-26861,18757,-26867,18748,-26874,18739,-26880,18730,-26886,18721,-26893,18711,-26899,18702,-26906,18693,-26912,18684,-26918,18675,-26925,18666,-26931,18656,-26937,18647,-26944,18638,-26950,18629,-26956,18620,-26963,18610,-26969,18601,-26976,18592,-26982,18583,-26988,18574,-26995,18564,-27001,18555,-27007,18546,-27013,18537,-27020,18528,-27026,18518,-27032,18509,-27039,18500,-27045,18491,-27051,18482,-27058,18472,-27064,18463,-27070,18454,-27077,18445,-27083,18435,-27089,18426,-27095,18417,-27102,18408,-27108,18398,-27114,18389,-27121,18380,-27127,18371,-27133,18361,-27139,18352,-27146,18343,-27152,18334,-27158,18324,-27164,18315,-27171,18306,-27177,18297,-27183,18287,-27189,18278,-27196,18269,-27202,18260,-27208,18250,-27214,18241,-27220,18232,-27227,18222,-27233,18213,-27239,18204,-27245,18195,-27251,18185,-27258,18176,-27264,18167,-27270,18157,-27276,18148,-27282,18139,-27289,18130,-27295,18120,-27301,18111,-27307,18102,-27313,18092,-27320,18083,-27326,18074,-27332,18064,-27338,18055,-27344,18046,-27350,18036,-27356,18027,-27363,18018,-27369,18008,-27375,17999,-27381,17990,-27387,17980,-27393,17971,-27399,17962,-27406,17952,-27412,17943,-27418,17934,-27424,17924,-27430,17915,-27436,17906,-27442,17896,-27448,17887,-27454,17878,-27461,17868,-27467,17859,-27473,17849,-27479,17840,-27485,17831,-27491,17821,-27497,17812,-27503,17803,-27509,17793,-27515,17784,-27521,17774,-27527,17765,-27533,17756,-27539,17746,-27546,17737,-27552,17727,-27558,17718,-27564,17709,-27570,17699,-27576,17690,-27582,17680,-27588,17671,-27594,17662,-27600,17652,-27606,17643,-27612,17633,-27618,17624,-27624,17615,-27630,17605,-27636,17596,-27642,17586,-27648,17577,-27654,17567,-27660,17558,-27666,17549,-27672,17539,-27678,17530,-27684,17520,-27690,17511,-27696,17501,-27702,17492,-27708,17483,-27714,17473,-27720,17464,-27726,17454,-27732,17445,-27737,17435,-27743,17426,-27749,17416,-27755,17407,-27761,17397,-27767,17388,-27773,17379,-27779,17369,-27785,17360,-27791,17350,-27797,17341,-27803,17331,-27809,17322,-27815,17312,-27820,17303,-27826,17293,-27832,17284,-27838,17274,-27844,17265,-27850,17255,-27856,17246,-27862,17236,-27868,17227,-27873,17217,-27879,17208,-27885,17198,-27891,17189,-27897,17179,-27903,17170,-27909,17160,-27914,17151,-27920,17141,-27926,17132,-27932,17122,-27938,17113,-27944,17103,-27949,17094,-27955,17084,-27961,17074,-27967,17065,-27973,17055,-27979,17046,-27984,17036,-27990,17027,-27996,17017,-28002,17008,-28008,16998,-28013,16989,-28019,16979,-28025,16969,-28031,16960,-28037,16950,-28042,16941,-28048,16931,-28054,16922,-28060,16912,-28065,16903,-28071,16893,-28077,16883,-28083,16874,-28088,16864,-28094,16855,-28100,16845,-28106,16836,-28111,16826,-28117,16816,-28123,16807,-28129,16797,-28134,16788,-28140,16778,-28146,16768,-28152,16759,-28157,16749,-28163,16740,-28169,16730,-28174,16720,-28180,16711,-28186,16701,-28191,16692,-28197,16682,-28203,16672,-28209,16663,-28214,16653,-28220,16643,-28226,16634,-28231,16624,-28237,16615,-28243,16605,-28248,16595,-28254,16586,-28260,16576,-28265,16566,-28271,16557,-28276,16547,-28282,16538,-28288,16528,-28293,16518,-28299,16509,-28305,16499,-28310,16489,-28316,16480,-28322,16470,-28327,16460,-28333,16451,-28338,16441,-28344,16431,-28350,16422,-28355,16412,-28361,16402,-28366,16393,-28372,16383,-28378,16373,-28383,16364,-28389,16354,-28394,16344,-28400,16335,-28405,16325,-28411,16315,-28417,16306,-28422,16296,-28428,16286,-28433,16276,-28439,16267,-28444,16257,-28450,16247,-28455,16238,-28461,16228,-28466,16218,-28472,16209,-28478,16199,-28483,16189,-28489,16179,-28494,16170,-28500,16160,-28505,16150,-28511,16141,-28516,16131,-28522,16121,-28527,16111,-28533,16102,-28538,16092,-28544,16082,-28549,16072,-28555,16063,-28560,16053,-28566,16043,-28571,16034,-28576,16024,-28582,16014,-28587,16004,-28593,15995,-28598,15985,-28604,15975,-28609,15965,-28615,15956,-28620,15946,-28626,15936,-28631,15926,-28636,15917,-28642,15907,-28647,15897,-28653,15887,-28658,15877,-28663,15868,-28669,15858,-28674,15848,-28680,15838,-28685,15829,-28691,15819,-28696,15809,-28701,15799,-28707,15789,-28712,15780,-28717,15770,-28723,15760,-28728,15750,-28734,15740,-28739,15731,-28744,15721,-28750,15711,-28755,15701,-28760,15691,-28766,15682,-28771,15672,-28776,15662,-28782,15652,-28787,15642,-28792,15633,-28798,15623,-28803,15613,-28808,15603,-28814,15593,-28819,15583,-28824,15574,-28830,15564,-28835,15554,-28840,15544,-28846,15534,-28851,15525,-28856,15515,-28861,15505,-28867,15495,-28872,15485,-28877,15475,-28883,15465,-28888,15456,-28893,15446,-28898,15436,-28904,15426,-28909,15416,-28914,15406,-28919,15396,-28925,15387,-28930,15377,-28935,15367,-28940,15357,-28946,15347,-28951,15337,-28956,15327,-28961,15318,-28967,15308,-28972,15298,-28977,15288,-28982,15278,-28987,15268,-28993,15258,-28998,15248,-29003,15238,-29008,15229,-29013,15219,-29019,15209,-29024,15199,-29029,15189,-29034,15179,-29039,15169,-29045,15159,-29050,15149,-29055,15140,-29060,15130,-29065,15120,-29070,15110,-29075,15100,-29081,15090,-29086,15080,-29091,15070,-29096,15060,-29101,15050,-29106,15040,-29111,15030,-29117,15021,-29122,15011,-29127,15001,-29132,14991,-29137,14981,-29142,14971,-29147,14961,-29152,14951,-29157,14941,-29163,14931,-29168,14921,-29173,14911,-29178,14901,-29183,14891,-29188,14881,-29193,14871,-29198,14861,-29203,14852,-29208,14842,-29213,14832,-29218,14822,-29223,14812,-29228,14802,-29234,14792,-29239,14782,-29244,14772,-29249,14762,-29254,14752,-29259,14742,-29264,14732,-29269,14722,-29274,14712,-29279,14702,-29284,14692,-29289,14682,-29294,14672,-29299,14662,-29304,14652,-29309,14642,-29314,14632,-29319,14622,-29324,14612,-29329,14602,-29334,14592,-29339,14582,-29344,14572,-29349,14562,-29354,14552,-29359,14542,-29364,14532,-29369,14522,-29373,14512,-29378,14502,-29383,14492,-29388,14482,-29393,14472,-29398,14462,-29403,14452,-29408,14442,-29413,14432,-29418,14422,-29423,14412,-29428,14402,-29433,14392,-29438,14382,-29442,14372,-29447,14362,-29452,14352,-29457,14342,-29462,14331,-29467,14321,-29472,14311,-29477,14301,-29482,14291,-29486,14281,-29491,14271,-29496,14261,-29501,14251,-29506,14241,-29511,14231,-29516,14221,-29520,14211,-29525,14201,-29530,14191,-29535,14181,-29540,14171,-29545,14160,-29549,14150,-29554,14140,-29559,14130,-29564,14120,-29569,14110,-29574,14100,-29578,14090,-29583,14080,-29588,14070,-29593,14060,-29598,14050,-29602,14039,-29607,14029,-29612,14019,-29617,14009,-29622,13999,-29626,13989,-29631,13979,-29636,13969,-29641,13959,-29645,13949,-29650,13938,-29655,13928,-29660,13918,-29664,13908,-29669,13898,-29674,13888,-29679,13878,-29683,13868,-29688,13858,-29693,13847,-29697,13837,-29702,13827,-29707,13817,-29712,13807,-29716,13797,-29721,13787,-29726,13777,-29730,13766,-29735,13756,-29740,13746,-29745,13736,-29749,13726,-29754,13716,-29759,13706,-29763,13695,-29768,13685,-29773,13675,-29777,13665,-29782,13655,-29787,13645,-29791,13634,-29796,13624,-29801,13614,-29805,13604,-29810,13594,-29814,13584,-29819,13574,-29824,13563,-29828,13553,-29833,13543,-29838,13533,-29842,13523,-29847,13512,-29851,13502,-29856,13492,-29861,13482,-29865,13472,-29870,13462,-29874,13451,-29879,13441,-29884,13431,-29888,13421,-29893,13411,-29897,13400,-29902,13390,-29906,13380,-29911,13370,-29916,13360,-29920,13349,-29925,13339,-29929,13329,-29934,13319,-29938,13309,-29943,13298,-29947,13288,-29952,13278,-29956,13268,-29961,13258,-29965,13247,-29970,13237,-29974,13227,-29979,13217,-29984,13207,-29988,13196,-29993,13186,-29997,13176,-30002,13166,-30006,13155,-30010,13145,-30015,13135,-30019,13125,-30024,13114,-30028,13104,-30033,13094,-30037,13084,-30042,13074,-30046,13063,-30051,13053,-30055,13043,-30060,13033,-30064,13022,-30068,13012,-30073,13002,-30077,12992,-30082,12981,-30086,12971,-30091,12961,-30095,12950,-30099,12940,-30104,12930,-30108,12920,-30113,12909,-30117,12899,-30122,12889,-30126,12879,-30130,12868,-30135,12858,-30139,12848,-30143,12838,-30148,12827,-30152,12817,-30157,12807,-30161,12796,-30165,12786,-30170,12776,-30174,12766,-30178,12755,-30183,12745,-30187,12735,-30191,12724,-30196,12714,-30200,12704,-30204,12694,-30209,12683,-30213,12673,-30217,12663,-30222,12652,-30226,12642,-30230,12632,-30235,12621,-30239,12611,-30243,12601,-30248,12590,-30252,12580,-30256,12570,-30260,12560,-30265,12549,-30269,12539,-30273,12529,-30278,12518,-30282,12508,-30286,12498,-30290,12487,-30295,12477,-30299,12467,-30303,12456,-30307,12446,-30312,12436,-30316,12425,-30320,12415,-30324,12405,-30329,12394,-30333,12384,-30337,12374,-30341,12363,-30345,12353,-30350,12343,-30354,12332,-30358,12322,-30362,12312,-30366,12301,-30371,12291,-30375,12280,-30379,12270,-30383,12260,-30387,12249,-30392,12239,-30396,12229,-30400,12218,-30404,12208,-30408,12198,-30412,12187,-30417,12177,-30421,12166,-30425,12156,-30429,12146,-30433,12135,-30437,12125,-30441,12115,-30446,12104,-30450,12094,-30454,12083,-30458,12073,-30462,12063,-30466,12052,-30470,12042,-30474,12032,-30478,12021,-30483,12011,-30487,12000,-30491,11990,-30495,11980,-30499,11969,-30503,11959,-30507,11948,-30511,11938,-30515,11928,-30519,11917,-30523,11907,-30527,11896,-30531,11886,-30536,11876,-30540,11865,-30544,11855,-30548,11844,-30552,11834,-30556,11823,-30560,11813,-30564,11803,-30568,11792,-30572,11782,-30576,11771,-30580,11761,-30584,11750,-30588,11740,-30592,11730,-30596,11719,-30600,11709,-30604,11698,-30608,11688,-30612,11677,-30616,11667,-30620,11657,-30624,11646,-30628,11636,-30632,11625,-30636,11615,-30640,11604,-30644,11594,-30648,11583,-30652,11573,-30656,11563,-30659,11552,-30663,11542,-30667,11531,-30671,11521,-30675,11510,-30679,11500,-30683,11489,-30687,11479,-30691,11468,-30695,11458,-30699,11448,-30703,11437,-30706,11427,-30710,11416,-30714,11406,-30718,11395,-30722,11385,-30726,11374,-30730,11364,-30734,11353,-30738,11343,-30741,11332,-30745,11322,-30749,11311,-30753,11301,-30757,11290,-30761,11280,-30765,11269,-30768,11259,-30772,11248,-30776,11238,-30780,11227,-30784,11217,-30788,11206,-30791,11196,-30795,11185,-30799,11175,-30803,11164,-30807,11154,-30810,11143,-30814,11133,-30818,11122,-30822,11112,-30826,11101,-30829,11091,-30833,11080,-30837,11070,-30841,11059,-30845,11049,-30848,11038,-30852,11028,-30856,11017,-30860,11007,-30863,10996,-30867,10986,-30871,10975,-30875,10965,-30878,10954,-30882,10944,-30886,10933,-30890,10923,-30893,10912,-30897,10902,-30901,10891,-30904,10880,-30908,10870,-30912,10859,-30916,10849,-30919,10838,-30923,10828,-30927,10817,-30930,10807,-30934,10796,-30938,10786,-30941,10775,-30945,10765,-30949,10754,-30952,10743,-30956,10733,-30960,10722,-30963,10712,-30967,10701,-30971,10691,-30974,10680,-30978,10670,-30982,10659,-30985,10648,-30989,10638,-30992,10627,-30996,10617,-31000,10606,-31003,10596,-31007,10585,-31011,10574,-31014,10564,-31018,10553,-31021,10543,-31025,10532,-31029,10522,-31032,10511,-31036,10500,-31039,10490,-31043,10479,-31046,10469,-31050,10458,-31054,10447,-31057,10437,-31061,10426,-31064,10416,-31068,10405,-31071,10395,-31075,10384,-31078,10373,-31082,10363,-31086,10352,-31089,10342,-31093,10331,-31096,10320,-31100,10310,-31103,10299,-31107,10289,-31110,10278,-31114,10267,-31117,10257,-31121,10246,-31124,10235,-31128,10225,-31131,10214,-31135,10204,-31138,10193,-31142,10182,-31145,10172,-31149,10161,-31152,10151,-31155,10140,-31159,10129,-31162,10119,-31166,10108,-31169,10097,-31173,10087,-31176,10076,-31180,10066,-31183,10055,-31186,10044,-31190,10034,-31193,10023,-31197,10012,-31200,10002,-31204,9991,-31207,9980,-31210,9970,-31214,9959,-31217,9949,-31221,9938,-31224,9927,-31227,9917,-31231,9906,-31234,9895,-31237,9885,-31241,9874,-31244,9863,-31248,9853,-31251,9842,-31254,9831,-31258,9821,-31261,9810,-31264,9799,-31268,9789,-31271,9778,-31274,9767,-31278,9757,-31281,9746,-31284,9735,-31288,9725,-31291,9714,-31294,9703,-31298,9693,-31301,9682,-31304,9671,-31308,9661,-31311,9650,-31314,9639,-31317,9629,-31321,9618,-31324,9607,-31327,9597,-31331,9586,-31334,9575,-31337,9565,-31340,9554,-31344,9543,-31347,9533,-31350,9522,-31353,9511,-31357,9501,-31360,9490,-31363,9479,-31366,9468,-31370,9458,-31373,9447,-31376,9436,-31379,9426,-31382,9415,-31386,9404,-31389,9394,-31392,9383,-31395,9372,-31398,9362,-31402,9351,-31405,9340,-31408,9329,-31411,9319,-31414,9308,-31418,9297,-31421,9287,-31424,9276,-31427,9265,-31430,9254,-31433,9244,-31436,9233,-31440,9222,-31443,9212,-31446,9201,-31449,9190,-31452,9179,-31455,9169,-31458,9158,-31462,9147,-31465,9136,-31468,9126,-31471,9115,-31474,9104,-31477,9094,-31480,9083,-31483,9072,-31486,9061,-31490,9051,-31493,9040,-31496,9029,-31499,9018,-31502,9008,-31505,8997,-31508,8986,-31511,8975,-31514,8965,-31517,8954,-31520,8943,-31523,8932,-31526,8922,-31529,8911,-31532,8900,-31535,8889,-31538,8879,-31542,8868,-31545,8857,-31548,8846,-31551,8836,-31554,8825,-31557,8814,-31560,8803,-31563,8793,-31566,8782,-31569,8771,-31572,8760,-31575,8750,-31578,8739,-31581,8728,-31584,8717,-31587,8707,-31589,8696,-31592,8685,-31595,8674,-31598,8663,-31601,8653,-31604,8642,-31607,8631,-31610,8620,-31613,8610,-31616,8599,-31619,8588,-31622,8577,-31625,8567,-31628,8556,-31631,8545,-31634,8534,-31636,8523,-31639,8513,-31642,8502,-31645,8491,-31648,8480,-31651,8469,-31654,8459,-31657,8448,-31660,8437,-31663,8426,-31665,8415,-31668,8405,-31671,8394,-31674,8383,-31677,8372,-31680,8361,-31683,8351,-31685,8340,-31688,8329,-31691,8318,-31694,8307,-31697,8297,-31700,8286,-31702,8275,-31705,8264,-31708,8253,-31711,8243,-31714,8232,-31717,8221,-31719,8210,-31722,8199,-31725,8189,-31728,8178,-31730,8167,-31733,8156,-31736,8145,-31739,8134,-31742,8124,-31744,8113,-31747,8102,-31750,8091,-31753,8080,-31755,8070,-31758,8059,-31761,8048,-31764,8037,-31766,8026,-31769,8015,-31772,8005,-31775,7994,-31777,7983,-31780,7972,-31783,7961,-31786,7950,-31788,7940,-31791,7929,-31794,7918,-31796,7907,-31799,7896,-31802,7885,-31804,7875,-31807,7864,-31810,7853,-31812,7842,-31815,7831,-31818,7820,-31820,7809,-31823,7799,-31826,7788,-31828,7777,-31831,7766,-31834,7755,-31836,7744,-31839,7733,-31842,7723,-31844,7712,-31847,7701,-31850,7690,-31852,7679,-31855,7668,-31857,7657,-31860,7647,-31863,7636,-31865,7625,-31868,7614,-31870,7603,-31873,7592,-31876,7581,-31878,7571,-31881,7560,-31883,7549,-31886,7538,-31889,7527,-31891,7516,-31894,7505,-31896,7494,-31899,7484,-31901,7473,-31904,7462,-31906,7451,-31909,7440,-31912,7429,-31914,7418,-31917,7407,-31919,7397,-31922,7386,-31924,7375,-31927,7364,-31929,7353,-31932,7342,-31934,7331,-31937,7320,-31939,7310,-31942,7299,-31944,7288,-31947,7277,-31949,7266,-31952,7255,-31954,7244,-31957,7233,-31959,7222,-31962,7211,-31964,7201,-31966,7190,-31969,7179,-31971,7168,-31974,7157,-31976,7146,-31979,7135,-31981,7124,-31984,7113,-31986,7102,-31988,7092,-31991,7081,-31993,7070,-31996,7059,-31998,7048,-32000,7037,-32003,7026,-32005,7015,-32008,7004,-32010,6993,-32012,6982,-32015,6972,-32017,6961,-32020,6950,-32022,6939,-32024,6928,-32027,6917,-32029,6906,-32031,6895,-32034,6884,-32036,6873,-32038,6862,-32041,6851,-32043,6841,-32045,6830,-32048,6819,-32050,6808,-32052,6797,-32055,6786,-32057,6775,-32059,6764,-32062,6753,-32064,6742,-32066,6731,-32069,6720,-32071,6709,-32073,6698,-32075,6688,-32078,6677,-32080,6666,-32082,6655,-32085,6644,-32087,6633,-32089,6622,-32091,6611,-32094,6600,-32096,6589,-32098,6578,-32100,6567,-32103,6556,-32105,6545,-32107,6534,-32109,6523,-32111,6512,-32114,6502,-32116,6491,-32118,6480,-32120,6469,-32123,6458,-32125,6447,-32127,6436,-32129,6425,-32131,6414,-32134,6403,-32136,6392,-32138,6381,-32140,6370,-32142,6359,-32144,6348,-32147,6337,-32149,6326,-32151,6315,-32153,6304,-32155,6293,-32157,6282,-32159,6271,-32162,6261,-32164,6250,-32166,6239,-32168,6228,-32170,6217,-32172,6206,-32174,6195,-32177,6184,-32179,6173,-32181,6162,-32183,6151,-32185,6140,-32187,6129,-32189,6118,-32191,6107,-32193,6096,-32195,6085,-32197,6074,-32200,6063,-32202,6052,-32204,6041,-32206,6030,-32208,6019,-32210,6008,-32212,5997,-32214,5986,-32216,5975,-32218,5964,-32220,5953,-32222,5942,-32224,5931,-32226,5920,-32228,5909,-32230,5898,-32232,5887,-32234,5876,-32236,5865,-32238,5854,-32240,5843,-32242,5832,-32244,5821,-32246,5810,-32248,5799,-32250,5788,-32252,5777,-32254,5766,-32256,5755,-32258,5744,-32260,5733,-32262,5722,-32264,5711,-32266,5700,-32268,5689,-32270,5678,-32272,5667,-32274,5656,-32275,5645,-32277,5634,-32279,5623,-32281,5612,-32283,5601,-32285,5590,-32287,5579,-32289,5568,-32291,5557,-32293,5546,-32295,5535,-32296,5524,-32298,5513,-32300,5502,-32302,5491,-32304,5480,-32306,5469,-32308,5458,-32310,5447,-32311,5436,-32313,5425,-32315,5414,-32317,5403,-32319,5392,-32321,5381,-32323,5370,-32324,5359,-32326,5348,-32328,5337,-32330,5326,-32332,5315,-32333,5304,-32335,5293,-32337,5282,-32339,5271,-32341,5260,-32342,5249,-32344,5238,-32346,5227,-32348,5216,-32350,5205,-32351,5194,-32353,5183,-32355,5172,-32357,5161,-32358,5150,-32360,5139,-32362,5128,-32364,5117,-32365,5106,-32367,5094,-32369,5083,-32371,5072,-32372,5061,-32374,5050,-32376,5039,-32378,5028,-32379,5017,-32381,5006,-32383,4995,-32384,4984,-32386,4973,-32388,4962,-32390,4951,-32391,4940,-32393,4929,-32395,4918,-32396,4907,-32398,4896,-32400,4885,-32401,4874,-32403,4863,-32405,4852,-32406,4841,-32408,4830,-32410,4818,-32411,4807,-32413,4796,-32414,4785,-32416,4774,-32418,4763,-32419,4752,-32421,4741,-32423,4730,-32424,4719,-32426,4708,-32427,4697,-32429,4686,-32431,4675,-32432,4664,-32434,4653,-32435,4642,-32437,4631,-32439,4620,-32440,4608,-32442,4597,-32443,4586,-32445,4575,-32446,4564,-32448,4553,-32450,4542,-32451,4531,-32453,4520,-32454,4509,-32456,4498,-32457,4487,-32459,4476,-32460,4465,-32462,4454,-32463,4443,-32465,4431,-32466,4420,-32468,4409,-32469,4398,-32471,4387,-32472,4376,-32474,4365,-32475,4354,-32477,4343,-32478,4332,-32480,4321,-32481,4310,-32483,4299,-32484,4288,-32486,4276,-32487,4265,-32489,4254,-32490,4243,-32492,4232,-32493,4221,-32494,4210,-32496,4199,-32497,4188,-32499,4177,-32500,4166,-32502,4155,-32503,4144,-32504,4132,-32506,4121,-32507,4110,-32509,4099,-32510,4088,-32511,4077,-32513,4066,-32514,4055,-32516,4044,-32517,4033,-32518,4022,-32520,4011,-32521,3999,-32522,3988,-32524,3977,-32525,3966,-32527,3955,-32528,3944,-32529,3933,-32531,3922,-32532,3911,-32533,3900,-32535,3889,-32536,3877,-32537,3866,-32539,3855,-32540,3844,-32541,3833,-32542,3822,-32544,3811,-32545,3800,-32546,3789,-32548,3778,-32549,3767,-32550,3755,-32552,3744,-32553,3733,-32554,3722,-32555,3711,-32557,3700,-32558,3689,-32559,3678,-32560,3667,-32562,3656,-32563,3644,-32564,3633,-32565,3622,-32567,3611,-32568,3600,-32569,3589,-32570,3578,-32572,3567,-32573,3556,-32574,3545,-32575,3533,-32576,3522,-32578,3511,-32579,3500,-32580,3489,-32581,3478,-32582,3467,-32584,3456,-32585,3445,-32586,3433,-32587,3422,-32588,3411,-32589,3400,-32591,3389,-32592,3378,-32593,3367,-32594,3356,-32595,3345,-32596,3333,-32597,3322,-32599,3311,-32600,3300,-32601,3289,-32602,3278,-32603,3267,-32604,3256,-32605,3245,-32606,3233,-32608,3222,-32609,3211,-32610,3200,-32611,3189,-32612,3178,-32613,3167,-32614,3156,-32615,3145,-32616,3133,-32617,3122,-32618,3111,-32619,3100,-32620,3089,-32622,3078,-32623,3067,-32624,3056,-32625,3044,-32626,3033,-32627,3022,-32628,3011,-32629,3000,-32630,2989,-32631,2978,-32632,2967,-32633,2955,-32634,2944,-32635,2933,-32636,2922,-32637,2911,-32638,2900,-32639,2889,-32640,2878,-32641,2866,-32642,2855,-32643,2844,-32644,2833,-32645,2822,-32646,2811,-32647,2800,-32648,2789,-32649,2777,-32650,2766,-32650,2755,-32651,2744,-32652,2733,-32653,2722,-32654,2711,-32655,2700,-32656,2688,-32657,2677,-32658,2666,-32659,2655,-32660,2644,-32661,2633,-32662,2622,-32662,2610,-32663,2599,-32664,2588,-32665,2577,-32666,2566,-32667,2555,-32668,2544,-32669,2533,-32669,2521,-32670,2510,-32671,2499,-32672,2488,-32673,2477,-32674,2466,-32675,2455,-32675,2443,-32676,2432,-32677,2421,-32678,2410,-32679,2399,-32680,2388,-32680,2377,-32681,2365,-32682,2354,-32683,2343,-32684,2332,-32684,2321,-32685,2310,-32686,2299,-32687,2287,-32688,2276,-32688,2265,-32689,2254,-32690,2243,-32691,2232,-32691,2221,-32692,2209,-32693,2198,-32694,2187,-32694,2176,-32695,2165,-32696,2154,-32697,2143,-32697,2131,-32698,2120,-32699,2109,-32700,2098,-32700,2087,-32701,2076,-32702,2065,-32702,2053,-32703,2042,-32704,2031,-32704,2020,-32705,2009,-32706,1998,-32707,1986,-32707,1975,-32708,1964,-32709,1953,-32709,1942,-32710,1931,-32711,1920,-32711,1908,-32712,1897,-32712,1886,-32713,1875,-32714,1864,-32714,1853,-32715,1842,-32716,1830,-32716,1819,-32717,1808,-32718,1797,-32718,1786,-32719,1775,-32719,1763,-32720,1752,-32721,1741,-32721,1730,-32722,1719,-32722,1708,-32723,1697,-32724,1685,-32724,1674,-32725,1663,-32725,1652,-32726,1641,-32726,1630,-32727,1618,-32727,1607,-32728,1596,-32729,1585,-32729,1574,-32730,1563,-32730,1552,-32731,1540,-32731,1529,-32732,1518,-32732,1507,-32733,1496,-32733,1485,-32734,1473,-32734,1462,-32735,1451,-32735,1440,-32736,1429,-32736,1418,-32737,1406,-32737,1395,-32738,1384,-32738,1373,-32739,1362,-32739,1351,-32740,1339,-32740,1328,-32741,1317,-32741,1306,-32741,1295,-32742,1284,-32742,1273,-32743,1261,-32743,1250,-32744,1239,-32744,1228,-32744,1217,-32745,1206,-32745,1194,-32746,1183,-32746,1172,-32747,1161,-32747,1150,-32747,1139,-32748,1127,-32748,1116,-32748,1105,-32749,1094,-32749,1083,-32750,1072,-32750,1060,-32750,1049,-32751,1038,-32751,1027,-32751,1016,-32752,1005,-32752,993,-32752,982,-32753,971,-32753,960,-32753,949,-32754,938,-32754,926,-32754,915,-32755,904,-32755,893,-32755,882,-32756,871,-32756,859,-32756,848,-32757,837,-32757,826,-32757,815,-32757,804,-32758,792,-32758,781,-32758,770,-32758,759,-32759,748,-32759,737,-32759,725,-32759,714,-32760,703,-32760,692,-32760,681,-32760,670,-32761,658,-32761,647,-32761,636,-32761,625,-32762,614,-32762,603,-32762,591,-32762,580,-32762,569,-32763,558,-32763,547,-32763,536,-32763,524,-32763,513,-32763,502,-32764,491,-32764,480,-32764,469,-32764,457,-32764,446,-32764,435,-32765,424,-32765,413,-32765,402,-32765,390,-32765,379,-32765,368,-32765,357,-32766,346,-32766,335,-32766,323,-32766,312,-32766,301,-32766,290,-32766,279,-32766,268,-32766,256,-32766,245,-32767,234,-32767,223,-32767,212,-32767,201,-32767,189,-32767,178,-32767,167,-32767,156,-32767,145,-32767,134,-32767,122,-32767,111,-32767,100,-32767,89,-32767,78,-32767,67,-32767,55,-32767,44,-32767,33,-32767,22,-32767,11,-32767,0,-32767,-12,-32767,-23,-32767,-34,-32767,-45,-32767,-56,-32767,-68,-32767,-79,-32767,-90,-32767,-101,-32767,-112,-32767,-123,-32767,-135,-32767,-146,-32767,-157,-32767,-168,-32767,-179,-32767,-190,-32767,-202,-32767,-213,-32767,-224,-32767,-235,-32767,-246,-32767,-257,-32766,-269,-32766,-280,-32766,-291,-32766,-302,-32766,-313,-32766,-324,-32766,-336,-32766,-347,-32766,-358,-32766,-369,-32765,-380,-32765,-391,-32765,-403,-32765,-414,-32765,-425,-32765,-436,-32765,-447,-32764,-458,-32764,-470,-32764,-481,-32764,-492,-32764,-503,-32764,-514,-32763,-525,-32763,-537,-32763,-548,-32763,-559,-32763,-570,-32763,-581,-32762,-592,-32762,-604,-32762,-615,-32762,-626,-32762,-637,-32761,-648,-32761,-659,-32761,-671,-32761,-682,-32760,-693,-32760,-704,-32760,-715,-32760,-726,-32759,-738,-32759,-749,-32759,-760,-32759,-771,-32758,-782,-32758,-793,-32758,-805,-32758,-816,-32757,-827,-32757,-838,-32757,-849,-32757,-860,-32756,-872,-32756,-883,-32756,-894,-32755,-905,-32755,-916,-32755,-927,-32754,-939,-32754,-950,-32754,-961,-32753,-972,-32753,-983,-32753,-994,-32752,-1006,-32752,-1017,-32752,-1028,-32751,-1039,-32751,-1050,-32751,-1061,-32750,-1073,-32750,-1084,-32750,-1095,-32749,-1106,-32749,-1117,-32748,-1128,-32748,-1140,-32748,-1151,-32747,-1162,-32747,-1173,-32747,-1184,-32746,-1195,-32746,-1207,-32745,-1218,-32745,-1229,-32744,-1240,-32744,-1251,-32744,-1262,-32743,-1274,-32743,-1285,-32742,-1296,-32742,-1307,-32741,-1318,-32741,-1329,-32741,-1340,-32740,-1352,-32740,-1363,-32739,-1374,-32739,-1385,-32738,-1396,-32738,-1407,-32737,-1419,-32737,-1430,-32736,-1441,-32736,-1452,-32735,-1463,-32735,-1474,-32734,-1486,-32734,-1497,-32733,-1508,-32733,-1519,-32732,-1530,-32732,-1541,-32731,-1553,-32731,-1564,-32730,-1575,-32730,-1586,-32729,-1597,-32729,-1608,-32728,-1619,-32727,-1631,-32727,-1642,-32726,-1653,-32726,-1664,-32725,-1675,-32725,-1686,-32724,-1698,-32724,-1709,-32723,-1720,-32722,-1731,-32722,-1742,-32721,-1753,-32721,-1764,-32720,-1776,-32719,-1787,-32719,-1798,-32718,-1809,-32718,-1820,-32717,-1831,-32716,-1843,-32716,-1854,-32715,-1865,-32714,-1876,-32714,-1887,-32713,-1898,-32712,-1909,-32712,-1921,-32711,-1932,-32711,-1943,-32710,-1954,-32709,-1965,-32709,-1976,-32708,-1987,-32707,-1999,-32707,-2010,-32706,-2021,-32705,-2032,-32704,-2043,-32704,-2054,-32703,-2066,-32702,-2077,-32702,-2088,-32701,-2099,-32700,-2110,-32700,-2121,-32699,-2132,-32698,-2144,-32697,-2155,-32697,-2166,-32696,-2177,-32695,-2188,-32694,-2199,-32694,-2210,-32693,-2222,-32692,-2233,-32691,-2244,-32691,-2255,-32690,-2266,-32689,-2277,-32688,-2288,-32688,-2300,-32687,-2311,-32686,-2322,-32685,-2333,-32684,-2344,-32684,-2355,-32683,-2366,-32682,-2378,-32681,-2389,-32680,-2400,-32680,-2411,-32679,-2422,-32678,-2433,-32677,-2444,-32676,-2456,-32675,-2467,-32675,-2478,-32674,-2489,-32673,-2500,-32672,-2511,-32671,-2522,-32670,-2534,-32669,-2545,-32669,-2556,-32668,-2567,-32667,-2578,-32666,-2589,-32665,-2600,-32664,-2611,-32663,-2623,-32662,-2634,-32662,-2645,-32661,-2656,-32660,-2667,-32659,-2678,-32658,-2689,-32657,-2701,-32656,-2712,-32655,-2723,-32654,-2734,-32653,-2745,-32652,-2756,-32651,-2767,-32650,-2778,-32650,-2790,-32649,-2801,-32648,-2812,-32647,-2823,-32646,-2834,-32645,-2845,-32644,-2856,-32643,-2867,-32642,-2879,-32641,-2890,-32640,-2901,-32639,-2912,-32638,-2923,-32637,-2934,-32636,-2945,-32635,-2956,-32634,-2968,-32633,-2979,-32632,-2990,-32631,-3001,-32630,-3012,-32629,-3023,-32628,-3034,-32627,-3045,-32626,-3057,-32625,-3068,-32624,-3079,-32623,-3090,-32622,-3101,-32620,-3112,-32619,-3123,-32618,-3134,-32617,-3146,-32616,-3157,-32615,-3168,-32614,-3179,-32613,-3190,-32612,-3201,-32611,-3212,-32610,-3223,-32609,-3234,-32608,-3246,-32606,-3257,-32605,-3268,-32604,-3279,-32603,-3290,-32602,-3301,-32601,-3312,-32600,-3323,-32599,-3334,-32597,-3346,-32596,-3357,-32595,-3368,-32594,-3379,-32593,-3390,-32592,-3401,-32591,-3412,-32589,-3423,-32588,-3434,-32587,-3446,-32586,-3457,-32585,-3468,-32584,-3479,-32582,-3490,-32581,-3501,-32580,-3512,-32579,-3523,-32578,-3534,-32576,-3546,-32575,-3557,-32574,-3568,-32573,-3579,-32572,-3590,-32570,-3601,-32569,-3612,-32568,-3623,-32567,-3634,-32565,-3645,-32564,-3657,-32563,-3668,-32562,-3679,-32560,-3690,-32559,-3701,-32558,-3712,-32557,-3723,-32555,-3734,-32554,-3745,-32553,-3756,-32552,-3768,-32550,-3779,-32549,-3790,-32548,-3801,-32546,-3812,-32545,-3823,-32544,-3834,-32542,-3845,-32541,-3856,-32540,-3867,-32539,-3878,-32537,-3890,-32536,-3901,-32535,-3912,-32533,-3923,-32532,-3934,-32531,-3945,-32529,-3956,-32528,-3967,-32527,-3978,-32525,-3989,-32524,-4000,-32522,-4012,-32521,-4023,-32520,-4034,-32518,-4045,-32517,-4056,-32516,-4067,-32514,-4078,-32513,-4089,-32511,-4100,-32510,-4111,-32509,-4122,-32507,-4133,-32506,-4145,-32504,-4156,-32503,-4167,-32502,-4178,-32500,-4189,-32499,-4200,-32497,-4211,-32496,-4222,-32494,-4233,-32493,-4244,-32492,-4255,-32490,-4266,-32489,-4277,-32487,-4289,-32486,-4300,-32484,-4311,-32483,-4322,-32481,-4333,-32480,-4344,-32478,-4355,-32477,-4366,-32475,-4377,-32474,-4388,-32472,-4399,-32471,-4410,-32469,-4421,-32468,-4432,-32466,-4444,-32465,-4455,-32463,-4466,-32462,-4477,-32460,-4488,-32459,-4499,-32457,-4510,-32456,-4521,-32454,-4532,-32453,-4543,-32451,-4554,-32450,-4565,-32448,-4576,-32446,-4587,-32445,-4598,-32443,-4609,-32442,-4621,-32440,-4632,-32439,-4643,-32437,-4654,-32435,-4665,-32434,-4676,-32432,-4687,-32431,-4698,-32429,-4709,-32427,-4720,-32426,-4731,-32424,-4742,-32423,-4753,-32421,-4764,-32419,-4775,-32418,-4786,-32416,-4797,-32414,-4808,-32413,-4819,-32411,-4831,-32410,-4842,-32408,-4853,-32406,-4864,-32405,-4875,-32403,-4886,-32401,-4897,-32400,-4908,-32398,-4919,-32396,-4930,-32395,-4941,-32393,-4952,-32391,-4963,-32390,-4974,-32388,-4985,-32386,-4996,-32384,-5007,-32383,-5018,-32381,-5029,-32379,-5040,-32378,-5051,-32376,-5062,-32374,-5073,-32372,-5084,-32371,-5095,-32369,-5107,-32367,-5118,-32365,-5129,-32364,-5140,-32362,-5151,-32360,-5162,-32358,-5173,-32357,-5184,-32355,-5195,-32353,-5206,-32351,-5217,-32350,-5228,-32348,-5239,-32346,-5250,-32344,-5261,-32342,-5272,-32341,-5283,-32339,-5294,-32337,-5305,-32335,-5316,-32333,-5327,-32332,-5338,-32330,-5349,-32328,-5360,-32326,-5371,-32324,-5382,-32323,-5393,-32321,-5404,-32319,-5415,-32317,-5426,-32315,-5437,-32313,-5448,-32311,-5459,-32310,-5470,-32308,-5481,-32306,-5492,-32304,-5503,-32302,-5514,-32300,-5525,-32298,-5536,-32296,-5547,-32295,-5558,-32293,-5569,-32291,-5580,-32289,-5591,-32287,-5602,-32285,-5613,-32283,-5624,-32281,-5635,-32279,-5646,-32277,-5657,-32275,-5668,-32274,-5679,-32272,-5690,-32270,-5701,-32268,-5712,-32266,-5723,-32264,-5734,-32262,-5745,-32260,-5756,-32258,-5767,-32256,-5778,-32254,-5789,-32252,-5800,-32250,-5811,-32248,-5822,-32246,-5833,-32244,-5844,-32242,-5855,-32240,-5866,-32238,-5877,-32236,-5888,-32234,-5899,-32232,-5910,-32230,-5921,-32228,-5932,-32226,-5943,-32224,-5954,-32222,-5965,-32220,-5976,-32218,-5987,-32216,-5998,-32214,-6009,-32212,-6020,-32210,-6031,-32208,-6042,-32206,-6053,-32204,-6064,-32202,-6075,-32200,-6086,-32197,-6097,-32195,-6108,-32193,-6119,-32191,-6130,-32189,-6141,-32187,-6152,-32185,-6163,-32183,-6174,-32181,-6185,-32179,-6196,-32177,-6207,-32174,-6218,-32172,-6229,-32170,-6240,-32168,-6251,-32166,-6262,-32164,-6272,-32162,-6283,-32159,-6294,-32157,-6305,-32155,-6316,-32153,-6327,-32151,-6338,-32149,-6349,-32147,-6360,-32144,-6371,-32142,-6382,-32140,-6393,-32138,-6404,-32136,-6415,-32134,-6426,-32131,-6437,-32129,-6448,-32127,-6459,-32125,-6470,-32123,-6481,-32120,-6492,-32118,-6503,-32116,-6513,-32114,-6524,-32111,-6535,-32109,-6546,-32107,-6557,-32105,-6568,-32103,-6579,-32100,-6590,-32098,-6601,-32096,-6612,-32094,-6623,-32091,-6634,-32089,-6645,-32087,-6656,-32085,-6667,-32082,-6678,-32080,-6689,-32078,-6699,-32075,-6710,-32073,-6721,-32071,-6732,-32069,-6743,-32066,-6754,-32064,-6765,-32062,-6776,-32059,-6787,-32057,-6798,-32055,-6809,-32052,-6820,-32050,-6831,-32048,-6842,-32045,-6852,-32043,-6863,-32041,-6874,-32038,-6885,-32036,-6896,-32034,-6907,-32031,-6918,-32029,-6929,-32027,-6940,-32024,-6951,-32022,-6962,-32020,-6973,-32017,-6983,-32015,-6994,-32012,-7005,-32010,-7016,-32008,-7027,-32005,-7038,-32003,-7049,-32000,-7060,-31998,-7071,-31996,-7082,-31993,-7093,-31991,-7103,-31988,-7114,-31986,-7125,-31984,-7136,-31981,-7147,-31979,-7158,-31976,-7169,-31974,-7180,-31971,-7191,-31969,-7202,-31966,-7212,-31964,-7223,-31962,-7234,-31959,-7245,-31957,-7256,-31954,-7267,-31952,-7278,-31949,-7289,-31947,-7300,-31944,-7311,-31942,-7321,-31939,-7332,-31937,-7343,-31934,-7354,-31932,-7365,-31929,-7376,-31927,-7387,-31924,-7398,-31922,-7408,-31919,-7419,-31917,-7430,-31914,-7441,-31912,-7452,-31909,-7463,-31906,-7474,-31904,-7485,-31901,-7495,-31899,-7506,-31896,-7517,-31894,-7528,-31891,-7539,-31889,-7550,-31886,-7561,-31883,-7572,-31881,-7582,-31878,-7593,-31876,-7604,-31873,-7615,-31870,-7626,-31868,-7637,-31865,-7648,-31863,-7658,-31860,-7669,-31857,-7680,-31855,-7691,-31852,-7702,-31850,-7713,-31847,-7724,-31844,-7734,-31842,-7745,-31839,-7756,-31836,-7767,-31834,-7778,-31831,-7789,-31828,-7800,-31826,-7810,-31823,-7821,-31820,-7832,-31818,-7843,-31815,-7854,-31812,-7865,-31810,-7876,-31807,-7886,-31804,-7897,-31802,-7908,-31799,-7919,-31796,-7930,-31794,-7941,-31791,-7951,-31788,-7962,-31786,-7973,-31783,-7984,-31780,-7995,-31777,-8006,-31775,-8016,-31772,-8027,-31769,-8038,-31766,-8049,-31764,-8060,-31761,-8071,-31758,-8081,-31755,-8092,-31753,-8103,-31750,-8114,-31747,-8125,-31744,-8135,-31742,-8146,-31739,-8157,-31736,-8168,-31733,-8179,-31730,-8190,-31728,-8200,-31725,-8211,-31722,-8222,-31719,-8233,-31717,-8244,-31714,-8254,-31711,-8265,-31708,-8276,-31705,-8287,-31702,-8298,-31700,-8308,-31697,-8319,-31694,-8330,-31691,-8341,-31688,-8352,-31685,-8362,-31683,-8373,-31680,-8384,-31677,-8395,-31674,-8406,-31671,-8416,-31668,-8427,-31665,-8438,-31663,-8449,-31660,-8460,-31657,-8470,-31654,-8481,-31651,-8492,-31648,-8503,-31645,-8514,-31642,-8524,-31639,-8535,-31636,-8546,-31634,-8557,-31631,-8568,-31628,-8578,-31625,-8589,-31622,-8600,-31619,-8611,-31616,-8621,-31613,-8632,-31610,-8643,-31607,-8654,-31604,-8664,-31601,-8675,-31598,-8686,-31595,-8697,-31592,-8708,-31589,-8718,-31587,-8729,-31584,-8740,-31581,-8751,-31578,-8761,-31575,-8772,-31572,-8783,-31569,-8794,-31566,-8804,-31563,-8815,-31560,-8826,-31557,-8837,-31554,-8847,-31551,-8858,-31548,-8869,-31545,-8880,-31542,-8890,-31538,-8901,-31535,-8912,-31532,-8923,-31529,-8933,-31526,-8944,-31523,-8955,-31520,-8966,-31517,-8976,-31514,-8987,-31511,-8998,-31508,-9009,-31505,-9019,-31502,-9030,-31499,-9041,-31496,-9052,-31493,-9062,-31490,-9073,-31486,-9084,-31483,-9095,-31480,-9105,-31477,-9116,-31474,-9127,-31471,-9137,-31468,-9148,-31465,-9159,-31462,-9170,-31458,-9180,-31455,-9191,-31452,-9202,-31449,-9213,-31446,-9223,-31443,-9234,-31440,-9245,-31436,-9255,-31433,-9266,-31430,-9277,-31427,-9288,-31424,-9298,-31421,-9309,-31418,-9320,-31414,-9330,-31411,-9341,-31408,-9352,-31405,-9363,-31402,-9373,-31398,-9384,-31395,-9395,-31392,-9405,-31389,-9416,-31386,-9427,-31382,-9437,-31379,-9448,-31376,-9459,-31373,-9469,-31370,-9480,-31366,-9491,-31363,-9502,-31360,-9512,-31357,-9523,-31353,-9534,-31350,-9544,-31347,-9555,-31344,-9566,-31340,-9576,-31337,-9587,-31334,-9598,-31331,-9608,-31327,-9619,-31324,-9630,-31321,-9640,-31317,-9651,-31314,-9662,-31311,-9672,-31308,-9683,-31304,-9694,-31301,-9704,-31298,-9715,-31294,-9726,-31291,-9736,-31288,-9747,-31284,-9758,-31281,-9768,-31278,-9779,-31274,-9790,-31271,-9800,-31268,-9811,-31264,-9822,-31261,-9832,-31258,-9843,-31254,-9854,-31251,-9864,-31248,-9875,-31244,-9886,-31241,-9896,-31237,-9907,-31234,-9918,-31231,-9928,-31227,-9939,-31224,-9950,-31221,-9960,-31217,-9971,-31214,-9981,-31210,-9992,-31207,-10003,-31204,-10013,-31200,-10024,-31197,-10035,-31193,-10045,-31190,-10056,-31186,-10067,-31183,-10077,-31180,-10088,-31176,-10098,-31173,-10109,-31169,-10120,-31166,-10130,-31162,-10141,-31159,-10152,-31155,-10162,-31152,-10173,-31149,-10183,-31145,-10194,-31142,-10205,-31138,-10215,-31135,-10226,-31131,-10236,-31128,-10247,-31124,-10258,-31121,-10268,-31117,-10279,-31114,-10290,-31110,-10300,-31107,-10311,-31103,-10321,-31100,-10332,-31096,-10343,-31093,-10353,-31089,-10364,-31086,-10374,-31082,-10385,-31078,-10396,-31075,-10406,-31071,-10417,-31068,-10427,-31064,-10438,-31061,-10448,-31057,-10459,-31054,-10470,-31050,-10480,-31046,-10491,-31043,-10501,-31039,-10512,-31036,-10523,-31032,-10533,-31029,-10544,-31025,-10554,-31021,-10565,-31018,-10575,-31014,-10586,-31011,-10597,-31007,-10607,-31003,-10618,-31000,-10628,-30996,-10639,-30992,-10649,-30989,-10660,-30985,-10671,-30982,-10681,-30978,-10692,-30974,-10702,-30971,-10713,-30967,-10723,-30963,-10734,-30960,-10744,-30956,-10755,-30952,-10766,-30949,-10776,-30945,-10787,-30941,-10797,-30938,-10808,-30934,-10818,-30930,-10829,-30927,-10839,-30923,-10850,-30919,-10860,-30916,-10871,-30912,-10881,-30908,-10892,-30904,-10903,-30901,-10913,-30897,-10924,-30893,-10934,-30890,-10945,-30886,-10955,-30882,-10966,-30878,-10976,-30875,-10987,-30871,-10997,-30867,-11008,-30863,-11018,-30860,-11029,-30856,-11039,-30852,-11050,-30848,-11060,-30845,-11071,-30841,-11081,-30837,-11092,-30833,-11102,-30829,-11113,-30826,-11123,-30822,-11134,-30818,-11144,-30814,-11155,-30810,-11165,-30807,-11176,-30803,-11186,-30799,-11197,-30795,-11207,-30791,-11218,-30788,-11228,-30784,-11239,-30780,-11249,-30776,-11260,-30772,-11270,-30768,-11281,-30765,-11291,-30761,-11302,-30757,-11312,-30753,-11323,-30749,-11333,-30745,-11344,-30741,-11354,-30738,-11365,-30734,-11375,-30730,-11386,-30726,-11396,-30722,-11407,-30718,-11417,-30714,-11428,-30710,-11438,-30706,-11449,-30703,-11459,-30699,-11469,-30695,-11480,-30691,-11490,-30687,-11501,-30683,-11511,-30679,-11522,-30675,-11532,-30671,-11543,-30667,-11553,-30663,-11564,-30659,-11574,-30656,-11584,-30652,-11595,-30648,-11605,-30644,-11616,-30640,-11626,-30636,-11637,-30632,-11647,-30628,-11658,-30624,-11668,-30620,-11678,-30616,-11689,-30612,-11699,-30608,-11710,-30604,-11720,-30600,-11731,-30596,-11741,-30592,-11751,-30588,-11762,-30584,-11772,-30580,-11783,-30576,-11793,-30572,-11804,-30568,-11814,-30564,-11824,-30560,-11835,-30556,-11845,-30552,-11856,-30548,-11866,-30544,-11877,-30540,-11887,-30536,-11897,-30531,-11908,-30527,-11918,-30523,-11929,-30519,-11939,-30515,-11949,-30511,-11960,-30507,-11970,-30503,-11981,-30499,-11991,-30495,-12001,-30491,-12012,-30487,-12022,-30483,-12033,-30478,-12043,-30474,-12053,-30470,-12064,-30466,-12074,-30462,-12084,-30458,-12095,-30454,-12105,-30450,-12116,-30446,-12126,-30441,-12136,-30437,-12147,-30433,-12157,-30429,-12167,-30425,-12178,-30421,-12188,-30417,-12199,-30412,-12209,-30408,-12219,-30404,-12230,-30400,-12240,-30396,-12250,-30392,-12261,-30387,-12271,-30383,-12281,-30379,-12292,-30375,-12302,-30371,-12313,-30366,-12323,-30362,-12333,-30358,-12344,-30354,-12354,-30350,-12364,-30345,-12375,-30341,-12385,-30337,-12395,-30333,-12406,-30329,-12416,-30324,-12426,-30320,-12437,-30316,-12447,-30312,-12457,-30307,-12468,-30303,-12478,-30299,-12488,-30295,-12499,-30290,-12509,-30286,-12519,-30282,-12530,-30278,-12540,-30273,-12550,-30269,-12561,-30265,-12571,-30260,-12581,-30256,-12591,-30252,-12602,-30248,-12612,-30243,-12622,-30239,-12633,-30235,-12643,-30230,-12653,-30226,-12664,-30222,-12674,-30217,-12684,-30213,-12695,-30209,-12705,-30204,-12715,-30200,-12725,-30196,-12736,-30191,-12746,-30187,-12756,-30183,-12767,-30178,-12777,-30174,-12787,-30170,-12797,-30165,-12808,-30161,-12818,-30157,-12828,-30152,-12839,-30148,-12849,-30143,-12859,-30139,-12869,-30135,-12880,-30130,-12890,-30126,-12900,-30122,-12910,-30117,-12921,-30113,-12931,-30108,-12941,-30104,-12951,-30099,-12962,-30095,-12972,-30091,-12982,-30086,-12993,-30082,-13003,-30077,-13013,-30073,-13023,-30068,-13034,-30064,-13044,-30060,-13054,-30055,-13064,-30051,-13075,-30046,-13085,-30042,-13095,-30037,-13105,-30033,-13115,-30028,-13126,-30024,-13136,-30019,-13146,-30015,-13156,-30010,-13167,-30006,-13177,-30002,-13187,-29997,-13197,-29993,-13208,-29988,-13218,-29984,-13228,-29979,-13238,-29974,-13248,-29970,-13259,-29965,-13269,-29961,-13279,-29956,-13289,-29952,-13299,-29947,-13310,-29943,-13320,-29938,-13330,-29934,-13340,-29929,-13350,-29925,-13361,-29920,-13371,-29916,-13381,-29911,-13391,-29906,-13401,-29902,-13412,-29897,-13422,-29893,-13432,-29888,-13442,-29884,-13452,-29879,-13463,-29874,-13473,-29870,-13483,-29865,-13493,-29861,-13503,-29856,-13513,-29851,-13524,-29847,-13534,-29842,-13544,-29838,-13554,-29833,-13564,-29828,-13575,-29824,-13585,-29819,-13595,-29814,-13605,-29810,-13615,-29805,-13625,-29801,-13635,-29796,-13646,-29791,-13656,-29787,-13666,-29782,-13676,-29777,-13686,-29773,-13696,-29768,-13707,-29763,-13717,-29759,-13727,-29754,-13737,-29749,-13747,-29745,-13757,-29740,-13767,-29735,-13778,-29730,-13788,-29726,-13798,-29721,-13808,-29716,-13818,-29712,-13828,-29707,-13838,-29702,-13848,-29697,-13859,-29693,-13869,-29688,-13879,-29683,-13889,-29679,-13899,-29674,-13909,-29669,-13919,-29664,-13929,-29660,-13939,-29655,-13950,-29650,-13960,-29645,-13970,-29641,-13980,-29636,-13990,-29631,-14000,-29626,-14010,-29622,-14020,-29617,-14030,-29612,-14040,-29607,-14051,-29602,-14061,-29598,-14071,-29593,-14081,-29588,-14091,-29583,-14101,-29578,-14111,-29574,-14121,-29569,-14131,-29564,-14141,-29559,-14151,-29554,-14161,-29549,-14172,-29545,-14182,-29540,-14192,-29535,-14202,-29530,-14212,-29525,-14222,-29520,-14232,-29516,-14242,-29511,-14252,-29506,-14262,-29501,-14272,-29496,-14282,-29491,-14292,-29486,-14302,-29482,-14312,-29477,-14322,-29472,-14332,-29467,-14343,-29462,-14353,-29457,-14363,-29452,-14373,-29447,-14383,-29442,-14393,-29438,-14403,-29433,-14413,-29428,-14423,-29423,-14433,-29418,-14443,-29413,-14453,-29408,-14463,-29403,-14473,-29398,-14483,-29393,-14493,-29388,-14503,-29383,-14513,-29378,-14523,-29373,-14533,-29369,-14543,-29364,-14553,-29359,-14563,-29354,-14573,-29349,-14583,-29344,-14593,-29339,-14603,-29334,-14613,-29329,-14623,-29324,-14633,-29319,-14643,-29314,-14653,-29309,-14663,-29304,-14673,-29299,-14683,-29294,-14693,-29289,-14703,-29284,-14713,-29279,-14723,-29274,-14733,-29269,-14743,-29264,-14753,-29259,-14763,-29254,-14773,-29249,-14783,-29244,-14793,-29239,-14803,-29234,-14813,-29228,-14823,-29223,-14833,-29218,-14843,-29213,-14853,-29208,-14862,-29203,-14872,-29198,-14882,-29193,-14892,-29188,-14902,-29183,-14912,-29178,-14922,-29173,-14932,-29168,-14942,-29163,-14952,-29157,-14962,-29152,-14972,-29147,-14982,-29142,-14992,-29137,-15002,-29132,-15012,-29127,-15022,-29122,-15031,-29117,-15041,-29111,-15051,-29106,-15061,-29101,-15071,-29096,-15081,-29091,-15091,-29086,-15101,-29081,-15111,-29075,-15121,-29070,-15131,-29065,-15141,-29060,-15150,-29055,-15160,-29050,-15170,-29045,-15180,-29039,-15190,-29034,-15200,-29029,-15210,-29024,-15220,-29019,-15230,-29013,-15239,-29008,-15249,-29003,-15259,-28998,-15269,-28993,-15279,-28987,-15289,-28982,-15299,-28977,-15309,-28972,-15319,-28967,-15328,-28961,-15338,-28956,-15348,-28951,-15358,-28946,-15368,-28940,-15378,-28935,-15388,-28930,-15397,-28925,-15407,-28919,-15417,-28914,-15427,-28909,-15437,-28904,-15447,-28898,-15457,-28893,-15466,-28888,-15476,-28883,-15486,-28877,-15496,-28872,-15506,-28867,-15516,-28861,-15526,-28856,-15535,-28851,-15545,-28846,-15555,-28840,-15565,-28835,-15575,-28830,-15584,-28824,-15594,-28819,-15604,-28814,-15614,-28808,-15624,-28803,-15634,-28798,-15643,-28792,-15653,-28787,-15663,-28782,-15673,-28776,-15683,-28771,-15692,-28766,-15702,-28760,-15712,-28755,-15722,-28750,-15732,-28744,-15741,-28739,-15751,-28734,-15761,-28728,-15771,-28723,-15781,-28717,-15790,-28712,-15800,-28707,-15810,-28701,-15820,-28696,-15830,-28691,-15839,-28685,-15849,-28680,-15859,-28674,-15869,-28669,-15878,-28663,-15888,-28658,-15898,-28653,-15908,-28647,-15918,-28642,-15927,-28636,-15937,-28631,-15947,-28626,-15957,-28620,-15966,-28615,-15976,-28609,-15986,-28604,-15996,-28598,-16005,-28593,-16015,-28587,-16025,-28582,-16035,-28576,-16044,-28571,-16054,-28566,-16064,-28560,-16073,-28555,-16083,-28549,-16093,-28544,-16103,-28538,-16112,-28533,-16122,-28527,-16132,-28522,-16142,-28516,-16151,-28511,-16161,-28505,-16171,-28500,-16180,-28494,-16190,-28489,-16200,-28483,-16210,-28478,-16219,-28472,-16229,-28466,-16239,-28461,-16248,-28455,-16258,-28450,-16268,-28444,-16277,-28439,-16287,-28433,-16297,-28428,-16307,-28422,-16316,-28417,-16326,-28411,-16336,-28405,-16345,-28400,-16355,-28394,-16365,-28389,-16374,-28383}; - -int16_t twb18432[12288] = { 32767,0,32766,-23,32766,-45,32766,-68,32766,-90,32766,-112,32766,-135,32766,-157,32766,-179,32766,-202,32766,-224,32766,-246,32765,-269,32765,-291,32765,-313,32765,-336,32765,-358,32764,-380,32764,-403,32764,-425,32763,-447,32763,-470,32763,-492,32762,-514,32762,-537,32762,-559,32761,-581,32761,-604,32761,-626,32760,-648,32760,-671,32759,-693,32759,-715,32758,-738,32758,-760,32757,-782,32757,-805,32756,-827,32756,-849,32755,-872,32754,-894,32754,-916,32753,-939,32752,-961,32752,-983,32751,-1006,32750,-1028,32750,-1050,32749,-1073,32748,-1095,32747,-1117,32747,-1140,32746,-1162,32745,-1184,32744,-1207,32743,-1229,32743,-1251,32742,-1274,32741,-1296,32740,-1318,32739,-1340,32738,-1363,32737,-1385,32736,-1407,32735,-1430,32734,-1452,32733,-1474,32732,-1497,32731,-1519,32730,-1541,32729,-1564,32728,-1586,32727,-1608,32726,-1631,32725,-1653,32724,-1675,32723,-1698,32721,-1720,32720,-1742,32719,-1764,32718,-1787,32717,-1809,32715,-1831,32714,-1854,32713,-1876,32711,-1898,32710,-1921,32709,-1943,32708,-1965,32706,-1987,32705,-2010,32703,-2032,32702,-2054,32701,-2077,32699,-2099,32698,-2121,32696,-2144,32695,-2166,32693,-2188,32692,-2210,32690,-2233,32689,-2255,32687,-2277,32686,-2300,32684,-2322,32683,-2344,32681,-2366,32679,-2389,32678,-2411,32676,-2433,32674,-2456,32673,-2478,32671,-2500,32669,-2522,32668,-2545,32666,-2567,32664,-2589,32662,-2611,32661,-2634,32659,-2656,32657,-2678,32655,-2701,32653,-2723,32651,-2745,32649,-2767,32648,-2790,32646,-2812,32644,-2834,32642,-2856,32640,-2879,32638,-2901,32636,-2923,32634,-2945,32632,-2968,32630,-2990,32628,-3012,32626,-3034,32624,-3057,32622,-3079,32619,-3101,32617,-3123,32615,-3146,32613,-3168,32611,-3190,32609,-3212,32607,-3234,32604,-3257,32602,-3279,32600,-3301,32598,-3323,32595,-3346,32593,-3368,32591,-3390,32588,-3412,32586,-3434,32584,-3457,32581,-3479,32579,-3501,32577,-3523,32574,-3546,32572,-3568,32569,-3590,32567,-3612,32564,-3634,32562,-3657,32559,-3679,32557,-3701,32554,-3723,32552,-3745,32549,-3768,32547,-3790,32544,-3812,32541,-3834,32539,-3856,32536,-3878,32534,-3901,32531,-3923,32528,-3945,32526,-3967,32523,-3989,32520,-4012,32517,-4034,32515,-4056,32512,-4078,32509,-4100,32506,-4122,32503,-4145,32501,-4167,32498,-4189,32495,-4211,32492,-4233,32489,-4255,32486,-4277,32483,-4300,32480,-4322,32477,-4344,32474,-4366,32471,-4388,32468,-4410,32465,-4432,32462,-4455,32459,-4477,32456,-4499,32453,-4521,32450,-4543,32447,-4565,32444,-4587,32441,-4609,32438,-4632,32434,-4654,32431,-4676,32428,-4698,32425,-4720,32422,-4742,32418,-4764,32415,-4786,32412,-4808,32409,-4831,32405,-4853,32402,-4875,32399,-4897,32395,-4919,32392,-4941,32389,-4963,32385,-4985,32382,-5007,32378,-5029,32375,-5051,32371,-5073,32368,-5095,32364,-5118,32361,-5140,32357,-5162,32354,-5184,32350,-5206,32347,-5228,32343,-5250,32340,-5272,32336,-5294,32332,-5316,32329,-5338,32325,-5360,32322,-5382,32318,-5404,32314,-5426,32310,-5448,32307,-5470,32303,-5492,32299,-5514,32295,-5536,32292,-5558,32288,-5580,32284,-5602,32280,-5624,32276,-5646,32273,-5668,32269,-5690,32265,-5712,32261,-5734,32257,-5756,32253,-5778,32249,-5800,32245,-5822,32241,-5844,32237,-5866,32233,-5888,32229,-5910,32225,-5932,32221,-5954,32217,-5976,32213,-5998,32209,-6020,32205,-6042,32201,-6064,32196,-6086,32192,-6108,32188,-6130,32184,-6152,32180,-6174,32176,-6196,32171,-6218,32167,-6240,32163,-6262,32158,-6283,32154,-6305,32150,-6327,32146,-6349,32141,-6371,32137,-6393,32133,-6415,32128,-6437,32124,-6459,32119,-6481,32115,-6503,32110,-6524,32106,-6546,32102,-6568,32097,-6590,32093,-6612,32088,-6634,32084,-6656,32079,-6678,32074,-6699,32070,-6721,32065,-6743,32061,-6765,32056,-6787,32051,-6809,32047,-6831,32042,-6852,32037,-6874,32033,-6896,32028,-6918,32023,-6940,32019,-6962,32014,-6983,32009,-7005,32004,-7027,31999,-7049,31995,-7071,31990,-7093,31985,-7114,31980,-7136,31975,-7158,31970,-7180,31965,-7202,31961,-7223,31956,-7245,31951,-7267,31946,-7289,31941,-7311,31936,-7332,31931,-7354,31926,-7376,31921,-7398,31916,-7419,31911,-7441,31905,-7463,31900,-7485,31895,-7506,31890,-7528,31885,-7550,31880,-7572,31875,-7593,31869,-7615,31864,-7637,31859,-7658,31854,-7680,31849,-7702,31843,-7724,31838,-7745,31833,-7767,31827,-7789,31822,-7810,31817,-7832,31811,-7854,31806,-7876,31801,-7897,31795,-7919,31790,-7941,31785,-7962,31779,-7984,31774,-8006,31768,-8027,31763,-8049,31757,-8071,31752,-8092,31746,-8114,31741,-8135,31735,-8157,31729,-8179,31724,-8200,31718,-8222,31713,-8244,31707,-8265,31701,-8287,31696,-8308,31690,-8330,31684,-8352,31679,-8373,31673,-8395,31667,-8416,31662,-8438,31656,-8460,31650,-8481,31644,-8503,31638,-8524,31633,-8546,31627,-8568,31621,-8589,31615,-8611,31609,-8632,31603,-8654,31597,-8675,31591,-8697,31586,-8718,31580,-8740,31574,-8761,31568,-8783,31562,-8804,31556,-8826,31550,-8847,31544,-8869,31537,-8890,31531,-8912,31525,-8933,31519,-8955,31513,-8976,31507,-8998,31501,-9019,31495,-9041,31489,-9062,31482,-9084,31476,-9105,31470,-9127,31464,-9148,31457,-9170,31451,-9191,31445,-9213,31439,-9234,31432,-9255,31426,-9277,31420,-9298,31413,-9320,31407,-9341,31401,-9363,31394,-9384,31388,-9405,31381,-9427,31375,-9448,31369,-9469,31362,-9491,31356,-9512,31349,-9534,31343,-9555,31336,-9576,31330,-9598,31323,-9619,31316,-9640,31310,-9662,31303,-9683,31297,-9704,31290,-9726,31283,-9747,31277,-9768,31270,-9790,31263,-9811,31257,-9832,31250,-9854,31243,-9875,31236,-9896,31230,-9918,31223,-9939,31216,-9960,31209,-9981,31203,-10003,31196,-10024,31189,-10045,31182,-10067,31175,-10088,31168,-10109,31161,-10130,31154,-10152,31148,-10173,31141,-10194,31134,-10215,31127,-10236,31120,-10258,31113,-10279,31106,-10300,31099,-10321,31092,-10343,31085,-10364,31077,-10385,31070,-10406,31063,-10427,31056,-10448,31049,-10470,31042,-10491,31035,-10512,31028,-10533,31020,-10554,31013,-10575,31006,-10597,30999,-10618,30991,-10639,30984,-10660,30977,-10681,30970,-10702,30962,-10723,30955,-10744,30948,-10766,30940,-10787,30933,-10808,30926,-10829,30918,-10850,30911,-10871,30903,-10892,30896,-10913,30889,-10934,30881,-10955,30874,-10976,30866,-10997,30859,-11018,30851,-11039,30844,-11060,30836,-11081,30828,-11102,30821,-11123,30813,-11144,30806,-11165,30798,-11186,30790,-11207,30783,-11228,30775,-11249,30767,-11270,30760,-11291,30752,-11312,30744,-11333,30737,-11354,30729,-11375,30721,-11396,30713,-11417,30705,-11438,30698,-11459,30690,-11480,30682,-11501,30674,-11522,30666,-11543,30658,-11564,30651,-11584,30643,-11605,30635,-11626,30627,-11647,30619,-11668,30611,-11689,30603,-11710,30595,-11731,30587,-11751,30579,-11772,30571,-11793,30563,-11814,30555,-11835,30547,-11856,30539,-11877,30530,-11897,30522,-11918,30514,-11939,30506,-11960,30498,-11981,30490,-12001,30482,-12022,30473,-12043,30465,-12064,30457,-12084,30449,-12105,30440,-12126,30432,-12147,30424,-12167,30416,-12188,30407,-12209,30399,-12230,30391,-12250,30382,-12271,30374,-12292,30365,-12313,30357,-12333,30349,-12354,30340,-12375,30332,-12395,30323,-12416,30315,-12437,30306,-12457,30298,-12478,30289,-12499,30281,-12519,30272,-12540,30264,-12561,30255,-12581,30247,-12602,30238,-12622,30229,-12643,30221,-12664,30212,-12684,30203,-12705,30195,-12725,30186,-12746,30177,-12767,30169,-12787,30160,-12808,30151,-12828,30142,-12849,30134,-12869,30125,-12890,30116,-12910,30107,-12931,30098,-12951,30090,-12972,30081,-12993,30072,-13013,30063,-13034,30054,-13054,30045,-13075,30036,-13095,30027,-13115,30018,-13136,30009,-13156,30001,-13177,29992,-13197,29983,-13218,29973,-13238,29964,-13259,29955,-13279,29946,-13299,29937,-13320,29928,-13340,29919,-13361,29910,-13381,29901,-13401,29892,-13422,29883,-13442,29873,-13463,29864,-13483,29855,-13503,29846,-13524,29837,-13544,29827,-13564,29818,-13585,29809,-13605,29800,-13625,29790,-13646,29781,-13666,29772,-13686,29762,-13707,29753,-13727,29744,-13747,29734,-13767,29725,-13788,29715,-13808,29706,-13828,29696,-13848,29687,-13869,29678,-13889,29668,-13909,29659,-13929,29649,-13950,29640,-13970,29630,-13990,29621,-14010,29611,-14030,29601,-14051,29592,-14071,29582,-14091,29573,-14111,29563,-14131,29553,-14151,29544,-14172,29534,-14192,29524,-14212,29515,-14232,29505,-14252,29495,-14272,29485,-14292,29476,-14312,29466,-14332,29456,-14353,29446,-14373,29437,-14393,29427,-14413,29417,-14433,29407,-14453,29397,-14473,29387,-14493,29377,-14513,29368,-14533,29358,-14553,29348,-14573,29338,-14593,29328,-14613,29318,-14633,29308,-14653,29298,-14673,29288,-14693,29278,-14713,29268,-14733,29258,-14753,29248,-14773,29238,-14793,29227,-14813,29217,-14833,29207,-14853,29197,-14872,29187,-14892,29177,-14912,29167,-14932,29156,-14952,29146,-14972,29136,-14992,29126,-15012,29116,-15031,29105,-15051,29095,-15071,29085,-15091,29074,-15111,29064,-15131,29054,-15150,29044,-15170,29033,-15190,29023,-15210,29012,-15230,29002,-15249,28992,-15269,28981,-15289,28971,-15309,28960,-15328,28950,-15348,28939,-15368,28929,-15388,28918,-15407,28908,-15427,28897,-15447,28887,-15466,28876,-15486,28866,-15506,28855,-15526,28845,-15545,28834,-15565,28823,-15584,28813,-15604,28802,-15624,28791,-15643,28781,-15663,28770,-15683,28759,-15702,28749,-15722,28738,-15741,28727,-15761,28716,-15781,28706,-15800,28695,-15820,28684,-15839,28673,-15859,28662,-15878,28652,-15898,28641,-15918,28630,-15937,28619,-15957,28608,-15976,28597,-15996,28586,-16015,28575,-16035,28565,-16054,28554,-16073,28543,-16093,28532,-16112,28521,-16132,28510,-16151,28499,-16171,28488,-16190,28477,-16210,28465,-16229,28454,-16248,28443,-16268,28432,-16287,28421,-16307,28410,-16326,28399,-16345,28388,-16365,28377,-16384,28365,-16403,28354,-16423,28343,-16442,28332,-16461,28321,-16481,28309,-16500,28298,-16519,28287,-16539,28275,-16558,28264,-16577,28253,-16596,28242,-16616,28230,-16635,28219,-16654,28208,-16673,28196,-16693,28185,-16712,28173,-16731,28162,-16750,28151,-16769,28139,-16789,28128,-16808,28116,-16827,28105,-16846,28093,-16865,28082,-16884,28070,-16904,28059,-16923,28047,-16942,28036,-16961,28024,-16980,28012,-16999,28001,-17018,27989,-17037,27978,-17056,27966,-17075,27954,-17095,27943,-17114,27931,-17133,27919,-17152,27908,-17171,27896,-17190,27884,-17209,27872,-17228,27861,-17247,27849,-17266,27837,-17285,27825,-17304,27814,-17323,27802,-17342,27790,-17361,27778,-17380,27766,-17398,27754,-17417,27742,-17436,27731,-17455,27719,-17474,27707,-17493,27695,-17512,27683,-17531,27671,-17550,27659,-17568,27647,-17587,27635,-17606,27623,-17625,27611,-17644,27599,-17663,27587,-17681,27575,-17700,27563,-17719,27551,-17738,27538,-17757,27526,-17775,27514,-17794,27502,-17813,27490,-17832,27478,-17850,27466,-17869,27453,-17888,27441,-17907,27429,-17925,27417,-17944,27405,-17963,27392,-17981,27380,-18000,27368,-18019,27355,-18037,27343,-18056,27331,-18075,27319,-18093,27306,-18112,27294,-18131,27281,-18149,27269,-18168,27257,-18186,27244,-18205,27232,-18223,27219,-18242,27207,-18261,27195,-18279,27182,-18298,27170,-18316,27157,-18335,27145,-18353,27132,-18372,27120,-18390,27107,-18409,27094,-18427,27082,-18446,27069,-18464,27057,-18483,27044,-18501,27031,-18519,27019,-18538,27006,-18556,26994,-18575,26981,-18593,26968,-18611,26955,-18630,26943,-18648,26930,-18667,26917,-18685,26905,-18703,26892,-18722,26879,-18740,26866,-18758,26853,-18777,26841,-18795,26828,-18813,26815,-18831,26802,-18850,26789,-18868,26776,-18886,26764,-18905,26751,-18923,26738,-18941,26725,-18959,26712,-18977,26699,-18996,26686,-19014,26673,-19032,26660,-19050,26647,-19068,26634,-19087,26621,-19105,26608,-19123,26595,-19141,26582,-19159,26569,-19177,26556,-19195,26543,-19213,26530,-19232,26516,-19250,26503,-19268,26490,-19286,26477,-19304,26464,-19322,26451,-19340,26437,-19358,26424,-19376,26411,-19394,26398,-19412,26385,-19430,26371,-19448,26358,-19466,26345,-19484,26332,-19502,26318,-19520,26305,-19538,26292,-19556,26278,-19574,26265,-19591,26252,-19609,26238,-19627,26225,-19645,26211,-19663,26198,-19681,26185,-19699,26171,-19717,26158,-19734,26144,-19752,26131,-19770,26117,-19788,26104,-19806,26090,-19823,26077,-19841,26063,-19859,26050,-19877,26036,-19895,26022,-19912,26009,-19930,25995,-19948,25982,-19966,25968,-19983,25954,-20001,25941,-20019,25927,-20036,25913,-20054,25900,-20072,25886,-20089,25872,-20107,25859,-20125,25845,-20142,25831,-20160,25817,-20177,25804,-20195,25790,-20213,25776,-20230,25762,-20248,25749,-20265,25735,-20283,25721,-20300,25707,-20318,25693,-20335,25679,-20353,25665,-20370,25652,-20388,25638,-20405,25624,-20423,25610,-20440,25596,-20458,25582,-20475,25568,-20493,25554,-20510,25540,-20528,25526,-20545,25512,-20562,25498,-20580,25484,-20597,25470,-20614,25456,-20632,25442,-20649,25428,-20667,25414,-20684,25399,-20701,25385,-20719,25371,-20736,25357,-20753,25343,-20770,25329,-20788,25315,-20805,25300,-20822,25286,-20839,25272,-20857,25258,-20874,25243,-20891,25229,-20908,25215,-20926,25201,-20943,25186,-20960,25172,-20977,25158,-20994,25144,-21011,25129,-21028,25115,-21046,25100,-21063,25086,-21080,25072,-21097,25057,-21114,25043,-21131,25029,-21148,25014,-21165,25000,-21182,24985,-21199,24971,-21216,24956,-21233,24942,-21250,24927,-21267,24913,-21284,24898,-21301,24884,-21318,24869,-21335,24855,-21352,24840,-21369,24826,-21386,24811,-21403,24796,-21420,24782,-21437,24767,-21454,24753,-21471,24738,-21487,24723,-21504,24709,-21521,24694,-21538,24679,-21555,24664,-21572,24650,-21588,24635,-21605,24620,-21622,24606,-21639,24591,-21656,24576,-21672,24561,-21689,24546,-21706,24532,-21723,24517,-21739,24502,-21756,24487,-21773,24472,-21789,24457,-21806,24443,-21823,24428,-21839,24413,-21856,24398,-21873,24383,-21889,24368,-21906,24353,-21923,24338,-21939,24323,-21956,24308,-21972,24293,-21989,24278,-22005,24263,-22022,24248,-22039,24233,-22055,24218,-22072,24203,-22088,24188,-22105,24173,-22121,24158,-22138,24143,-22154,24128,-22170,24113,-22187,24097,-22203,24082,-22220,24067,-22236,24052,-22253,24037,-22269,24022,-22285,24006,-22302,23991,-22318,23976,-22334,23961,-22351,23945,-22367,23930,-22383,23915,-22400,23900,-22416,23884,-22432,23869,-22449,23854,-22465,23838,-22481,23823,-22497,23808,-22514,23792,-22530,23777,-22546,23762,-22562,23746,-22578,23731,-22595,23715,-22611,23700,-22627,23685,-22643,23669,-22659,23654,-22675,23638,-22692,23623,-22708,23607,-22724,23592,-22740,23576,-22756,23561,-22772,23545,-22788,23530,-22804,23514,-22820,23499,-22836,23483,-22852,23467,-22868,23452,-22884,23436,-22900,23421,-22916,23405,-22932,23389,-22948,23374,-22964,23358,-22980,23342,-22996,23327,-23012,23311,-23028,23295,-23044,23280,-23059,23264,-23075,23248,-23091,23232,-23107,23217,-23123,23201,-23139,23185,-23154,23169,-23170,23153,-23186,23138,-23202,23122,-23218,23106,-23233,23090,-23249,23074,-23265,23058,-23281,23043,-23296,23027,-23312,23011,-23328,22995,-23343,22979,-23359,22963,-23375,22947,-23390,22931,-23406,22915,-23422,22899,-23437,22883,-23453,22867,-23468,22851,-23484,22835,-23500,22819,-23515,22803,-23531,22787,-23546,22771,-23562,22755,-23577,22739,-23593,22723,-23608,22707,-23624,22691,-23639,22674,-23655,22658,-23670,22642,-23686,22626,-23701,22610,-23716,22594,-23732,22577,-23747,22561,-23763,22545,-23778,22529,-23793,22513,-23809,22496,-23824,22480,-23839,22464,-23855,22448,-23870,22431,-23885,22415,-23901,22399,-23916,22382,-23931,22366,-23946,22350,-23962,22333,-23977,22317,-23992,22301,-24007,22284,-24023,22268,-24038,22252,-24053,22235,-24068,22219,-24083,22202,-24098,22186,-24114,22169,-24129,22153,-24144,22137,-24159,22120,-24174,22104,-24189,22087,-24204,22071,-24219,22054,-24234,22038,-24249,22021,-24264,22004,-24279,21988,-24294,21971,-24309,21955,-24324,21938,-24339,21922,-24354,21905,-24369,21888,-24384,21872,-24399,21855,-24414,21838,-24429,21822,-24444,21805,-24458,21788,-24473,21772,-24488,21755,-24503,21738,-24518,21722,-24533,21705,-24547,21688,-24562,21671,-24577,21655,-24592,21638,-24607,21621,-24621,21604,-24636,21587,-24651,21571,-24665,21554,-24680,21537,-24695,21520,-24710,21503,-24724,21486,-24739,21470,-24754,21453,-24768,21436,-24783,21419,-24797,21402,-24812,21385,-24827,21368,-24841,21351,-24856,21334,-24870,21317,-24885,21300,-24899,21283,-24914,21266,-24928,21249,-24943,21232,-24957,21215,-24972,21198,-24986,21181,-25001,21164,-25015,21147,-25030,21130,-25044,21113,-25058,21096,-25073,21079,-25087,21062,-25101,21045,-25116,21027,-25130,21010,-25145,20993,-25159,20976,-25173,20959,-25187,20942,-25202,20925,-25216,20907,-25230,20890,-25244,20873,-25259,20856,-25273,20838,-25287,20821,-25301,20804,-25316,20787,-25330,20769,-25344,20752,-25358,20735,-25372,20718,-25386,20700,-25400,20683,-25415,20666,-25429,20648,-25443,20631,-25457,20613,-25471,20596,-25485,20579,-25499,20561,-25513,20544,-25527,20527,-25541,20509,-25555,20492,-25569,20474,-25583,20457,-25597,20439,-25611,20422,-25625,20404,-25639,20387,-25653,20369,-25666,20352,-25680,20334,-25694,20317,-25708,20299,-25722,20282,-25736,20264,-25750,20247,-25763,20229,-25777,20212,-25791,20194,-25805,20176,-25818,20159,-25832,20141,-25846,20124,-25860,20106,-25873,20088,-25887,20071,-25901,20053,-25914,20035,-25928,20018,-25942,20000,-25955,19982,-25969,19965,-25983,19947,-25996,19929,-26010,19911,-26023,19894,-26037,19876,-26051,19858,-26064,19840,-26078,19822,-26091,19805,-26105,19787,-26118,19769,-26132,19751,-26145,19733,-26159,19716,-26172,19698,-26186,19680,-26199,19662,-26212,19644,-26226,19626,-26239,19608,-26253,19590,-26266,19573,-26279,19555,-26293,19537,-26306,19519,-26319,19501,-26333,19483,-26346,19465,-26359,19447,-26372,19429,-26386,19411,-26399,19393,-26412,19375,-26425,19357,-26438,19339,-26452,19321,-26465,19303,-26478,19285,-26491,19267,-26504,19249,-26517,19231,-26531,19212,-26544,19194,-26557,19176,-26570,19158,-26583,19140,-26596,19122,-26609,19104,-26622,19086,-26635,19067,-26648,19049,-26661,19031,-26674,19013,-26687,18995,-26700,18976,-26713,18958,-26726,18940,-26739,18922,-26752,18904,-26765,18885,-26777,18867,-26790,18849,-26803,18830,-26816,18812,-26829,18794,-26842,18776,-26854,18757,-26867,18739,-26880,18721,-26893,18702,-26906,18684,-26918,18666,-26931,18647,-26944,18629,-26956,18610,-26969,18592,-26982,18574,-26995,18555,-27007,18537,-27020,18518,-27032,18500,-27045,18482,-27058,18463,-27070,18445,-27083,18426,-27095,18408,-27108,18389,-27121,18371,-27133,18352,-27146,18334,-27158,18315,-27171,18297,-27183,18278,-27196,18260,-27208,18241,-27220,18222,-27233,18204,-27245,18185,-27258,18167,-27270,18148,-27282,18130,-27295,18111,-27307,18092,-27320,18074,-27332,18055,-27344,18036,-27356,18018,-27369,17999,-27381,17980,-27393,17962,-27406,17943,-27418,17924,-27430,17906,-27442,17887,-27454,17868,-27467,17849,-27479,17831,-27491,17812,-27503,17793,-27515,17774,-27527,17756,-27539,17737,-27552,17718,-27564,17699,-27576,17680,-27588,17662,-27600,17643,-27612,17624,-27624,17605,-27636,17586,-27648,17567,-27660,17549,-27672,17530,-27684,17511,-27696,17492,-27708,17473,-27720,17454,-27732,17435,-27743,17416,-27755,17397,-27767,17379,-27779,17360,-27791,17341,-27803,17322,-27815,17303,-27826,17284,-27838,17265,-27850,17246,-27862,17227,-27873,17208,-27885,17189,-27897,17170,-27909,17151,-27920,17132,-27932,17113,-27944,17094,-27955,17074,-27967,17055,-27979,17036,-27990,17017,-28002,16998,-28013,16979,-28025,16960,-28037,16941,-28048,16922,-28060,16903,-28071,16883,-28083,16864,-28094,16845,-28106,16826,-28117,16807,-28129,16788,-28140,16768,-28152,16749,-28163,16730,-28174,16711,-28186,16692,-28197,16672,-28209,16653,-28220,16634,-28231,16615,-28243,16595,-28254,16576,-28265,16557,-28276,16538,-28288,16518,-28299,16499,-28310,16480,-28322,16460,-28333,16441,-28344,16422,-28355,16402,-28366,16383,-28378,16364,-28389,16344,-28400,16325,-28411,16306,-28422,16286,-28433,16267,-28444,16247,-28455,16228,-28466,16209,-28478,16189,-28489,16170,-28500,16150,-28511,16131,-28522,16111,-28533,16092,-28544,16072,-28555,16053,-28566,16034,-28576,16014,-28587,15995,-28598,15975,-28609,15956,-28620,15936,-28631,15917,-28642,15897,-28653,15877,-28663,15858,-28674,15838,-28685,15819,-28696,15799,-28707,15780,-28717,15760,-28728,15740,-28739,15721,-28750,15701,-28760,15682,-28771,15662,-28782,15642,-28792,15623,-28803,15603,-28814,15583,-28824,15564,-28835,15544,-28846,15525,-28856,15505,-28867,15485,-28877,15465,-28888,15446,-28898,15426,-28909,15406,-28919,15387,-28930,15367,-28940,15347,-28951,15327,-28961,15308,-28972,15288,-28982,15268,-28993,15248,-29003,15229,-29013,15209,-29024,15189,-29034,15169,-29045,15149,-29055,15130,-29065,15110,-29075,15090,-29086,15070,-29096,15050,-29106,15030,-29117,15011,-29127,14991,-29137,14971,-29147,14951,-29157,14931,-29168,14911,-29178,14891,-29188,14871,-29198,14852,-29208,14832,-29218,14812,-29228,14792,-29239,14772,-29249,14752,-29259,14732,-29269,14712,-29279,14692,-29289,14672,-29299,14652,-29309,14632,-29319,14612,-29329,14592,-29339,14572,-29349,14552,-29359,14532,-29369,14512,-29378,14492,-29388,14472,-29398,14452,-29408,14432,-29418,14412,-29428,14392,-29438,14372,-29447,14352,-29457,14331,-29467,14311,-29477,14291,-29486,14271,-29496,14251,-29506,14231,-29516,14211,-29525,14191,-29535,14171,-29545,14150,-29554,14130,-29564,14110,-29574,14090,-29583,14070,-29593,14050,-29602,14029,-29612,14009,-29622,13989,-29631,13969,-29641,13949,-29650,13928,-29660,13908,-29669,13888,-29679,13868,-29688,13847,-29697,13827,-29707,13807,-29716,13787,-29726,13766,-29735,13746,-29745,13726,-29754,13706,-29763,13685,-29773,13665,-29782,13645,-29791,13624,-29801,13604,-29810,13584,-29819,13563,-29828,13543,-29838,13523,-29847,13502,-29856,13482,-29865,13462,-29874,13441,-29884,13421,-29893,13400,-29902,13380,-29911,13360,-29920,13339,-29929,13319,-29938,13298,-29947,13278,-29956,13258,-29965,13237,-29974,13217,-29984,13196,-29993,13176,-30002,13155,-30010,13135,-30019,13114,-30028,13094,-30037,13074,-30046,13053,-30055,13033,-30064,13012,-30073,12992,-30082,12971,-30091,12950,-30099,12930,-30108,12909,-30117,12889,-30126,12868,-30135,12848,-30143,12827,-30152,12807,-30161,12786,-30170,12766,-30178,12745,-30187,12724,-30196,12704,-30204,12683,-30213,12663,-30222,12642,-30230,12621,-30239,12601,-30248,12580,-30256,12560,-30265,12539,-30273,12518,-30282,12498,-30290,12477,-30299,12456,-30307,12436,-30316,12415,-30324,12394,-30333,12374,-30341,12353,-30350,12332,-30358,12312,-30366,12291,-30375,12270,-30383,12249,-30392,12229,-30400,12208,-30408,12187,-30417,12166,-30425,12146,-30433,12125,-30441,12104,-30450,12083,-30458,12063,-30466,12042,-30474,12021,-30483,12000,-30491,11980,-30499,11959,-30507,11938,-30515,11917,-30523,11896,-30531,11876,-30540,11855,-30548,11834,-30556,11813,-30564,11792,-30572,11771,-30580,11750,-30588,11730,-30596,11709,-30604,11688,-30612,11667,-30620,11646,-30628,11625,-30636,11604,-30644,11583,-30652,11563,-30659,11542,-30667,11521,-30675,11500,-30683,11479,-30691,11458,-30699,11437,-30706,11416,-30714,11395,-30722,11374,-30730,11353,-30738,11332,-30745,11311,-30753,11290,-30761,11269,-30768,11248,-30776,11227,-30784,11206,-30791,11185,-30799,11164,-30807,11143,-30814,11122,-30822,11101,-30829,11080,-30837,11059,-30845,11038,-30852,11017,-30860,10996,-30867,10975,-30875,10954,-30882,10933,-30890,10912,-30897,10891,-30904,10870,-30912,10849,-30919,10828,-30927,10807,-30934,10786,-30941,10765,-30949,10743,-30956,10722,-30963,10701,-30971,10680,-30978,10659,-30985,10638,-30992,10617,-31000,10596,-31007,10574,-31014,10553,-31021,10532,-31029,10511,-31036,10490,-31043,10469,-31050,10447,-31057,10426,-31064,10405,-31071,10384,-31078,10363,-31086,10342,-31093,10320,-31100,10299,-31107,10278,-31114,10257,-31121,10235,-31128,10214,-31135,10193,-31142,10172,-31149,10151,-31155,10129,-31162,10108,-31169,10087,-31176,10066,-31183,10044,-31190,10023,-31197,10002,-31204,9980,-31210,9959,-31217,9938,-31224,9917,-31231,9895,-31237,9874,-31244,9853,-31251,9831,-31258,9810,-31264,9789,-31271,9767,-31278,9746,-31284,9725,-31291,9703,-31298,9682,-31304,9661,-31311,9639,-31317,9618,-31324,9597,-31331,9575,-31337,9554,-31344,9533,-31350,9511,-31357,9490,-31363,9468,-31370,9447,-31376,9426,-31382,9404,-31389,9383,-31395,9362,-31402,9340,-31408,9319,-31414,9297,-31421,9276,-31427,9254,-31433,9233,-31440,9212,-31446,9190,-31452,9169,-31458,9147,-31465,9126,-31471,9104,-31477,9083,-31483,9061,-31490,9040,-31496,9018,-31502,8997,-31508,8975,-31514,8954,-31520,8932,-31526,8911,-31532,8889,-31538,8868,-31545,8846,-31551,8825,-31557,8803,-31563,8782,-31569,8760,-31575,8739,-31581,8717,-31587,8696,-31592,8674,-31598,8653,-31604,8631,-31610,8610,-31616,8588,-31622,8567,-31628,8545,-31634,8523,-31639,8502,-31645,8480,-31651,8459,-31657,8437,-31663,8415,-31668,8394,-31674,8372,-31680,8351,-31685,8329,-31691,8307,-31697,8286,-31702,8264,-31708,8243,-31714,8221,-31719,8199,-31725,8178,-31730,8156,-31736,8134,-31742,8113,-31747,8091,-31753,8070,-31758,8048,-31764,8026,-31769,8005,-31775,7983,-31780,7961,-31786,7940,-31791,7918,-31796,7896,-31802,7875,-31807,7853,-31812,7831,-31818,7809,-31823,7788,-31828,7766,-31834,7744,-31839,7723,-31844,7701,-31850,7679,-31855,7657,-31860,7636,-31865,7614,-31870,7592,-31876,7571,-31881,7549,-31886,7527,-31891,7505,-31896,7484,-31901,7462,-31906,7440,-31912,7418,-31917,7397,-31922,7375,-31927,7353,-31932,7331,-31937,7310,-31942,7288,-31947,7266,-31952,7244,-31957,7222,-31962,7201,-31966,7179,-31971,7157,-31976,7135,-31981,7113,-31986,7092,-31991,7070,-31996,7048,-32000,7026,-32005,7004,-32010,6982,-32015,6961,-32020,6939,-32024,6917,-32029,6895,-32034,6873,-32038,6851,-32043,6830,-32048,6808,-32052,6786,-32057,6764,-32062,6742,-32066,6720,-32071,6698,-32075,6677,-32080,6655,-32085,6633,-32089,6611,-32094,6589,-32098,6567,-32103,6545,-32107,6523,-32111,6502,-32116,6480,-32120,6458,-32125,6436,-32129,6414,-32134,6392,-32138,6370,-32142,6348,-32147,6326,-32151,6304,-32155,6282,-32159,6261,-32164,6239,-32168,6217,-32172,6195,-32177,6173,-32181,6151,-32185,6129,-32189,6107,-32193,6085,-32197,6063,-32202,6041,-32206,6019,-32210,5997,-32214,5975,-32218,5953,-32222,5931,-32226,5909,-32230,5887,-32234,5865,-32238,5843,-32242,5821,-32246,5799,-32250,5777,-32254,5755,-32258,5733,-32262,5711,-32266,5689,-32270,5667,-32274,5645,-32277,5623,-32281,5601,-32285,5579,-32289,5557,-32293,5535,-32296,5513,-32300,5491,-32304,5469,-32308,5447,-32311,5425,-32315,5403,-32319,5381,-32323,5359,-32326,5337,-32330,5315,-32333,5293,-32337,5271,-32341,5249,-32344,5227,-32348,5205,-32351,5183,-32355,5161,-32358,5139,-32362,5117,-32365,5094,-32369,5072,-32372,5050,-32376,5028,-32379,5006,-32383,4984,-32386,4962,-32390,4940,-32393,4918,-32396,4896,-32400,4874,-32403,4852,-32406,4830,-32410,4807,-32413,4785,-32416,4763,-32419,4741,-32423,4719,-32426,4697,-32429,4675,-32432,4653,-32435,4631,-32439,4608,-32442,4586,-32445,4564,-32448,4542,-32451,4520,-32454,4498,-32457,4476,-32460,4454,-32463,4431,-32466,4409,-32469,4387,-32472,4365,-32475,4343,-32478,4321,-32481,4299,-32484,4276,-32487,4254,-32490,4232,-32493,4210,-32496,4188,-32499,4166,-32502,4144,-32504,4121,-32507,4099,-32510,4077,-32513,4055,-32516,4033,-32518,4011,-32521,3988,-32524,3966,-32527,3944,-32529,3922,-32532,3900,-32535,3877,-32537,3855,-32540,3833,-32542,3811,-32545,3789,-32548,3767,-32550,3744,-32553,3722,-32555,3700,-32558,3678,-32560,3656,-32563,3633,-32565,3611,-32568,3589,-32570,3567,-32573,3545,-32575,3522,-32578,3500,-32580,3478,-32582,3456,-32585,3433,-32587,3411,-32589,3389,-32592,3367,-32594,3345,-32596,3322,-32599,3300,-32601,3278,-32603,3256,-32605,3233,-32608,3211,-32610,3189,-32612,3167,-32614,3145,-32616,3122,-32618,3100,-32620,3078,-32623,3056,-32625,3033,-32627,3011,-32629,2989,-32631,2967,-32633,2944,-32635,2922,-32637,2900,-32639,2878,-32641,2855,-32643,2833,-32645,2811,-32647,2789,-32649,2766,-32650,2744,-32652,2722,-32654,2700,-32656,2677,-32658,2655,-32660,2633,-32662,2610,-32663,2588,-32665,2566,-32667,2544,-32669,2521,-32670,2499,-32672,2477,-32674,2455,-32675,2432,-32677,2410,-32679,2388,-32680,2365,-32682,2343,-32684,2321,-32685,2299,-32687,2276,-32688,2254,-32690,2232,-32691,2209,-32693,2187,-32694,2165,-32696,2143,-32697,2120,-32699,2098,-32700,2076,-32702,2053,-32703,2031,-32704,2009,-32706,1986,-32707,1964,-32709,1942,-32710,1920,-32711,1897,-32712,1875,-32714,1853,-32715,1830,-32716,1808,-32718,1786,-32719,1763,-32720,1741,-32721,1719,-32722,1697,-32724,1674,-32725,1652,-32726,1630,-32727,1607,-32728,1585,-32729,1563,-32730,1540,-32731,1518,-32732,1496,-32733,1473,-32734,1451,-32735,1429,-32736,1406,-32737,1384,-32738,1362,-32739,1339,-32740,1317,-32741,1295,-32742,1273,-32743,1250,-32744,1228,-32744,1206,-32745,1183,-32746,1161,-32747,1139,-32748,1116,-32748,1094,-32749,1072,-32750,1049,-32751,1027,-32751,1005,-32752,982,-32753,960,-32753,938,-32754,915,-32755,893,-32755,871,-32756,848,-32757,826,-32757,804,-32758,781,-32758,759,-32759,737,-32759,714,-32760,692,-32760,670,-32761,647,-32761,625,-32762,603,-32762,580,-32762,558,-32763,536,-32763,513,-32763,491,-32764,469,-32764,446,-32764,424,-32765,402,-32765,379,-32765,357,-32766,335,-32766,312,-32766,290,-32766,268,-32766,245,-32767,223,-32767,201,-32767,178,-32767,156,-32767,134,-32767,111,-32767,89,-32767,67,-32767,44,-32767,22,-32767,0,-32767,-23,-32767,-45,-32767,-68,-32767,-90,-32767,-112,-32767,-135,-32767,-157,-32767,-179,-32767,-202,-32767,-224,-32767,-246,-32767,-269,-32766,-291,-32766,-313,-32766,-336,-32766,-358,-32766,-380,-32765,-403,-32765,-425,-32765,-447,-32764,-470,-32764,-492,-32764,-514,-32763,-537,-32763,-559,-32763,-581,-32762,-604,-32762,-626,-32762,-648,-32761,-671,-32761,-693,-32760,-715,-32760,-738,-32759,-760,-32759,-782,-32758,-805,-32758,-827,-32757,-849,-32757,-872,-32756,-894,-32755,-916,-32755,-939,-32754,-961,-32753,-983,-32753,-1006,-32752,-1028,-32751,-1050,-32751,-1073,-32750,-1095,-32749,-1117,-32748,-1140,-32748,-1162,-32747,-1184,-32746,-1207,-32745,-1229,-32744,-1251,-32744,-1274,-32743,-1296,-32742,-1318,-32741,-1340,-32740,-1363,-32739,-1385,-32738,-1407,-32737,-1430,-32736,-1452,-32735,-1474,-32734,-1497,-32733,-1519,-32732,-1541,-32731,-1564,-32730,-1586,-32729,-1608,-32728,-1631,-32727,-1653,-32726,-1675,-32725,-1698,-32724,-1720,-32722,-1742,-32721,-1764,-32720,-1787,-32719,-1809,-32718,-1831,-32716,-1854,-32715,-1876,-32714,-1898,-32712,-1921,-32711,-1943,-32710,-1965,-32709,-1987,-32707,-2010,-32706,-2032,-32704,-2054,-32703,-2077,-32702,-2099,-32700,-2121,-32699,-2144,-32697,-2166,-32696,-2188,-32694,-2210,-32693,-2233,-32691,-2255,-32690,-2277,-32688,-2300,-32687,-2322,-32685,-2344,-32684,-2366,-32682,-2389,-32680,-2411,-32679,-2433,-32677,-2456,-32675,-2478,-32674,-2500,-32672,-2522,-32670,-2545,-32669,-2567,-32667,-2589,-32665,-2611,-32663,-2634,-32662,-2656,-32660,-2678,-32658,-2701,-32656,-2723,-32654,-2745,-32652,-2767,-32650,-2790,-32649,-2812,-32647,-2834,-32645,-2856,-32643,-2879,-32641,-2901,-32639,-2923,-32637,-2945,-32635,-2968,-32633,-2990,-32631,-3012,-32629,-3034,-32627,-3057,-32625,-3079,-32623,-3101,-32620,-3123,-32618,-3146,-32616,-3168,-32614,-3190,-32612,-3212,-32610,-3234,-32608,-3257,-32605,-3279,-32603,-3301,-32601,-3323,-32599,-3346,-32596,-3368,-32594,-3390,-32592,-3412,-32589,-3434,-32587,-3457,-32585,-3479,-32582,-3501,-32580,-3523,-32578,-3546,-32575,-3568,-32573,-3590,-32570,-3612,-32568,-3634,-32565,-3657,-32563,-3679,-32560,-3701,-32558,-3723,-32555,-3745,-32553,-3768,-32550,-3790,-32548,-3812,-32545,-3834,-32542,-3856,-32540,-3878,-32537,-3901,-32535,-3923,-32532,-3945,-32529,-3967,-32527,-3989,-32524,-4012,-32521,-4034,-32518,-4056,-32516,-4078,-32513,-4100,-32510,-4122,-32507,-4145,-32504,-4167,-32502,-4189,-32499,-4211,-32496,-4233,-32493,-4255,-32490,-4277,-32487,-4300,-32484,-4322,-32481,-4344,-32478,-4366,-32475,-4388,-32472,-4410,-32469,-4432,-32466,-4455,-32463,-4477,-32460,-4499,-32457,-4521,-32454,-4543,-32451,-4565,-32448,-4587,-32445,-4609,-32442,-4632,-32439,-4654,-32435,-4676,-32432,-4698,-32429,-4720,-32426,-4742,-32423,-4764,-32419,-4786,-32416,-4808,-32413,-4831,-32410,-4853,-32406,-4875,-32403,-4897,-32400,-4919,-32396,-4941,-32393,-4963,-32390,-4985,-32386,-5007,-32383,-5029,-32379,-5051,-32376,-5073,-32372,-5095,-32369,-5118,-32365,-5140,-32362,-5162,-32358,-5184,-32355,-5206,-32351,-5228,-32348,-5250,-32344,-5272,-32341,-5294,-32337,-5316,-32333,-5338,-32330,-5360,-32326,-5382,-32323,-5404,-32319,-5426,-32315,-5448,-32311,-5470,-32308,-5492,-32304,-5514,-32300,-5536,-32296,-5558,-32293,-5580,-32289,-5602,-32285,-5624,-32281,-5646,-32277,-5668,-32274,-5690,-32270,-5712,-32266,-5734,-32262,-5756,-32258,-5778,-32254,-5800,-32250,-5822,-32246,-5844,-32242,-5866,-32238,-5888,-32234,-5910,-32230,-5932,-32226,-5954,-32222,-5976,-32218,-5998,-32214,-6020,-32210,-6042,-32206,-6064,-32202,-6086,-32197,-6108,-32193,-6130,-32189,-6152,-32185,-6174,-32181,-6196,-32177,-6218,-32172,-6240,-32168,-6262,-32164,-6283,-32159,-6305,-32155,-6327,-32151,-6349,-32147,-6371,-32142,-6393,-32138,-6415,-32134,-6437,-32129,-6459,-32125,-6481,-32120,-6503,-32116,-6524,-32111,-6546,-32107,-6568,-32103,-6590,-32098,-6612,-32094,-6634,-32089,-6656,-32085,-6678,-32080,-6699,-32075,-6721,-32071,-6743,-32066,-6765,-32062,-6787,-32057,-6809,-32052,-6831,-32048,-6852,-32043,-6874,-32038,-6896,-32034,-6918,-32029,-6940,-32024,-6962,-32020,-6983,-32015,-7005,-32010,-7027,-32005,-7049,-32000,-7071,-31996,-7093,-31991,-7114,-31986,-7136,-31981,-7158,-31976,-7180,-31971,-7202,-31966,-7223,-31962,-7245,-31957,-7267,-31952,-7289,-31947,-7311,-31942,-7332,-31937,-7354,-31932,-7376,-31927,-7398,-31922,-7419,-31917,-7441,-31912,-7463,-31906,-7485,-31901,-7506,-31896,-7528,-31891,-7550,-31886,-7572,-31881,-7593,-31876,-7615,-31870,-7637,-31865,-7658,-31860,-7680,-31855,-7702,-31850,-7724,-31844,-7745,-31839,-7767,-31834,-7789,-31828,-7810,-31823,-7832,-31818,-7854,-31812,-7876,-31807,-7897,-31802,-7919,-31796,-7941,-31791,-7962,-31786,-7984,-31780,-8006,-31775,-8027,-31769,-8049,-31764,-8071,-31758,-8092,-31753,-8114,-31747,-8135,-31742,-8157,-31736,-8179,-31730,-8200,-31725,-8222,-31719,-8244,-31714,-8265,-31708,-8287,-31702,-8308,-31697,-8330,-31691,-8352,-31685,-8373,-31680,-8395,-31674,-8416,-31668,-8438,-31663,-8460,-31657,-8481,-31651,-8503,-31645,-8524,-31639,-8546,-31634,-8568,-31628,-8589,-31622,-8611,-31616,-8632,-31610,-8654,-31604,-8675,-31598,-8697,-31592,-8718,-31587,-8740,-31581,-8761,-31575,-8783,-31569,-8804,-31563,-8826,-31557,-8847,-31551,-8869,-31545,-8890,-31538,-8912,-31532,-8933,-31526,-8955,-31520,-8976,-31514,-8998,-31508,-9019,-31502,-9041,-31496,-9062,-31490,-9084,-31483,-9105,-31477,-9127,-31471,-9148,-31465,-9170,-31458,-9191,-31452,-9213,-31446,-9234,-31440,-9255,-31433,-9277,-31427,-9298,-31421,-9320,-31414,-9341,-31408,-9363,-31402,-9384,-31395,-9405,-31389,-9427,-31382,-9448,-31376,-9469,-31370,-9491,-31363,-9512,-31357,-9534,-31350,-9555,-31344,-9576,-31337,-9598,-31331,-9619,-31324,-9640,-31317,-9662,-31311,-9683,-31304,-9704,-31298,-9726,-31291,-9747,-31284,-9768,-31278,-9790,-31271,-9811,-31264,-9832,-31258,-9854,-31251,-9875,-31244,-9896,-31237,-9918,-31231,-9939,-31224,-9960,-31217,-9981,-31210,-10003,-31204,-10024,-31197,-10045,-31190,-10067,-31183,-10088,-31176,-10109,-31169,-10130,-31162,-10152,-31155,-10173,-31149,-10194,-31142,-10215,-31135,-10236,-31128,-10258,-31121,-10279,-31114,-10300,-31107,-10321,-31100,-10343,-31093,-10364,-31086,-10385,-31078,-10406,-31071,-10427,-31064,-10448,-31057,-10470,-31050,-10491,-31043,-10512,-31036,-10533,-31029,-10554,-31021,-10575,-31014,-10597,-31007,-10618,-31000,-10639,-30992,-10660,-30985,-10681,-30978,-10702,-30971,-10723,-30963,-10744,-30956,-10766,-30949,-10787,-30941,-10808,-30934,-10829,-30927,-10850,-30919,-10871,-30912,-10892,-30904,-10913,-30897,-10934,-30890,-10955,-30882,-10976,-30875,-10997,-30867,-11018,-30860,-11039,-30852,-11060,-30845,-11081,-30837,-11102,-30829,-11123,-30822,-11144,-30814,-11165,-30807,-11186,-30799,-11207,-30791,-11228,-30784,-11249,-30776,-11270,-30768,-11291,-30761,-11312,-30753,-11333,-30745,-11354,-30738,-11375,-30730,-11396,-30722,-11417,-30714,-11438,-30706,-11459,-30699,-11480,-30691,-11501,-30683,-11522,-30675,-11543,-30667,-11564,-30659,-11584,-30652,-11605,-30644,-11626,-30636,-11647,-30628,-11668,-30620,-11689,-30612,-11710,-30604,-11731,-30596,-11751,-30588,-11772,-30580,-11793,-30572,-11814,-30564,-11835,-30556,-11856,-30548,-11877,-30540,-11897,-30531,-11918,-30523,-11939,-30515,-11960,-30507,-11981,-30499,-12001,-30491,-12022,-30483,-12043,-30474,-12064,-30466,-12084,-30458,-12105,-30450,-12126,-30441,-12147,-30433,-12167,-30425,-12188,-30417,-12209,-30408,-12230,-30400,-12250,-30392,-12271,-30383,-12292,-30375,-12313,-30366,-12333,-30358,-12354,-30350,-12375,-30341,-12395,-30333,-12416,-30324,-12437,-30316,-12457,-30307,-12478,-30299,-12499,-30290,-12519,-30282,-12540,-30273,-12561,-30265,-12581,-30256,-12602,-30248,-12622,-30239,-12643,-30230,-12664,-30222,-12684,-30213,-12705,-30204,-12725,-30196,-12746,-30187,-12767,-30178,-12787,-30170,-12808,-30161,-12828,-30152,-12849,-30143,-12869,-30135,-12890,-30126,-12910,-30117,-12931,-30108,-12951,-30099,-12972,-30091,-12993,-30082,-13013,-30073,-13034,-30064,-13054,-30055,-13075,-30046,-13095,-30037,-13115,-30028,-13136,-30019,-13156,-30010,-13177,-30002,-13197,-29993,-13218,-29984,-13238,-29974,-13259,-29965,-13279,-29956,-13299,-29947,-13320,-29938,-13340,-29929,-13361,-29920,-13381,-29911,-13401,-29902,-13422,-29893,-13442,-29884,-13463,-29874,-13483,-29865,-13503,-29856,-13524,-29847,-13544,-29838,-13564,-29828,-13585,-29819,-13605,-29810,-13625,-29801,-13646,-29791,-13666,-29782,-13686,-29773,-13707,-29763,-13727,-29754,-13747,-29745,-13767,-29735,-13788,-29726,-13808,-29716,-13828,-29707,-13848,-29697,-13869,-29688,-13889,-29679,-13909,-29669,-13929,-29660,-13950,-29650,-13970,-29641,-13990,-29631,-14010,-29622,-14030,-29612,-14051,-29602,-14071,-29593,-14091,-29583,-14111,-29574,-14131,-29564,-14151,-29554,-14172,-29545,-14192,-29535,-14212,-29525,-14232,-29516,-14252,-29506,-14272,-29496,-14292,-29486,-14312,-29477,-14332,-29467,-14353,-29457,-14373,-29447,-14393,-29438,-14413,-29428,-14433,-29418,-14453,-29408,-14473,-29398,-14493,-29388,-14513,-29378,-14533,-29369,-14553,-29359,-14573,-29349,-14593,-29339,-14613,-29329,-14633,-29319,-14653,-29309,-14673,-29299,-14693,-29289,-14713,-29279,-14733,-29269,-14753,-29259,-14773,-29249,-14793,-29239,-14813,-29228,-14833,-29218,-14853,-29208,-14872,-29198,-14892,-29188,-14912,-29178,-14932,-29168,-14952,-29157,-14972,-29147,-14992,-29137,-15012,-29127,-15031,-29117,-15051,-29106,-15071,-29096,-15091,-29086,-15111,-29075,-15131,-29065,-15150,-29055,-15170,-29045,-15190,-29034,-15210,-29024,-15230,-29013,-15249,-29003,-15269,-28993,-15289,-28982,-15309,-28972,-15328,-28961,-15348,-28951,-15368,-28940,-15388,-28930,-15407,-28919,-15427,-28909,-15447,-28898,-15466,-28888,-15486,-28877,-15506,-28867,-15526,-28856,-15545,-28846,-15565,-28835,-15584,-28824,-15604,-28814,-15624,-28803,-15643,-28792,-15663,-28782,-15683,-28771,-15702,-28760,-15722,-28750,-15741,-28739,-15761,-28728,-15781,-28717,-15800,-28707,-15820,-28696,-15839,-28685,-15859,-28674,-15878,-28663,-15898,-28653,-15918,-28642,-15937,-28631,-15957,-28620,-15976,-28609,-15996,-28598,-16015,-28587,-16035,-28576,-16054,-28566,-16073,-28555,-16093,-28544,-16112,-28533,-16132,-28522,-16151,-28511,-16171,-28500,-16190,-28489,-16210,-28478,-16229,-28466,-16248,-28455,-16268,-28444,-16287,-28433,-16307,-28422,-16326,-28411,-16345,-28400,-16365,-28389,-16384,-28378,-16403,-28366,-16423,-28355,-16442,-28344,-16461,-28333,-16481,-28322,-16500,-28310,-16519,-28299,-16539,-28288,-16558,-28276,-16577,-28265,-16596,-28254,-16616,-28243,-16635,-28231,-16654,-28220,-16673,-28209,-16693,-28197,-16712,-28186,-16731,-28174,-16750,-28163,-16769,-28152,-16789,-28140,-16808,-28129,-16827,-28117,-16846,-28106,-16865,-28094,-16884,-28083,-16904,-28071,-16923,-28060,-16942,-28048,-16961,-28037,-16980,-28025,-16999,-28013,-17018,-28002,-17037,-27990,-17056,-27979,-17075,-27967,-17095,-27955,-17114,-27944,-17133,-27932,-17152,-27920,-17171,-27909,-17190,-27897,-17209,-27885,-17228,-27873,-17247,-27862,-17266,-27850,-17285,-27838,-17304,-27826,-17323,-27815,-17342,-27803,-17361,-27791,-17380,-27779,-17398,-27767,-17417,-27755,-17436,-27743,-17455,-27732,-17474,-27720,-17493,-27708,-17512,-27696,-17531,-27684,-17550,-27672,-17568,-27660,-17587,-27648,-17606,-27636,-17625,-27624,-17644,-27612,-17663,-27600,-17681,-27588,-17700,-27576,-17719,-27564,-17738,-27552,-17757,-27539,-17775,-27527,-17794,-27515,-17813,-27503,-17832,-27491,-17850,-27479,-17869,-27467,-17888,-27454,-17907,-27442,-17925,-27430,-17944,-27418,-17963,-27406,-17981,-27393,-18000,-27381,-18019,-27369,-18037,-27356,-18056,-27344,-18075,-27332,-18093,-27320,-18112,-27307,-18131,-27295,-18149,-27282,-18168,-27270,-18186,-27258,-18205,-27245,-18223,-27233,-18242,-27220,-18261,-27208,-18279,-27196,-18298,-27183,-18316,-27171,-18335,-27158,-18353,-27146,-18372,-27133,-18390,-27121,-18409,-27108,-18427,-27095,-18446,-27083,-18464,-27070,-18483,-27058,-18501,-27045,-18519,-27032,-18538,-27020,-18556,-27007,-18575,-26995,-18593,-26982,-18611,-26969,-18630,-26956,-18648,-26944,-18667,-26931,-18685,-26918,-18703,-26906,-18722,-26893,-18740,-26880,-18758,-26867,-18777,-26854,-18795,-26842,-18813,-26829,-18831,-26816,-18850,-26803,-18868,-26790,-18886,-26777,-18905,-26765,-18923,-26752,-18941,-26739,-18959,-26726,-18977,-26713,-18996,-26700,-19014,-26687,-19032,-26674,-19050,-26661,-19068,-26648,-19087,-26635,-19105,-26622,-19123,-26609,-19141,-26596,-19159,-26583,-19177,-26570,-19195,-26557,-19213,-26544,-19232,-26531,-19250,-26517,-19268,-26504,-19286,-26491,-19304,-26478,-19322,-26465,-19340,-26452,-19358,-26438,-19376,-26425,-19394,-26412,-19412,-26399,-19430,-26386,-19448,-26372,-19466,-26359,-19484,-26346,-19502,-26333,-19520,-26319,-19538,-26306,-19556,-26293,-19574,-26279,-19591,-26266,-19609,-26253,-19627,-26239,-19645,-26226,-19663,-26212,-19681,-26199,-19699,-26186,-19717,-26172,-19734,-26159,-19752,-26145,-19770,-26132,-19788,-26118,-19806,-26105,-19823,-26091,-19841,-26078,-19859,-26064,-19877,-26051,-19895,-26037,-19912,-26023,-19930,-26010,-19948,-25996,-19966,-25983,-19983,-25969,-20001,-25955,-20019,-25942,-20036,-25928,-20054,-25914,-20072,-25901,-20089,-25887,-20107,-25873,-20125,-25860,-20142,-25846,-20160,-25832,-20177,-25818,-20195,-25805,-20213,-25791,-20230,-25777,-20248,-25763,-20265,-25750,-20283,-25736,-20300,-25722,-20318,-25708,-20335,-25694,-20353,-25680,-20370,-25666,-20388,-25653,-20405,-25639,-20423,-25625,-20440,-25611,-20458,-25597,-20475,-25583,-20493,-25569,-20510,-25555,-20528,-25541,-20545,-25527,-20562,-25513,-20580,-25499,-20597,-25485,-20614,-25471,-20632,-25457,-20649,-25443,-20667,-25429,-20684,-25415,-20701,-25400,-20719,-25386,-20736,-25372,-20753,-25358,-20770,-25344,-20788,-25330,-20805,-25316,-20822,-25301,-20839,-25287,-20857,-25273,-20874,-25259,-20891,-25244,-20908,-25230,-20926,-25216,-20943,-25202,-20960,-25187,-20977,-25173,-20994,-25159,-21011,-25145,-21028,-25130,-21046,-25116,-21063,-25101,-21080,-25087,-21097,-25073,-21114,-25058,-21131,-25044,-21148,-25030,-21165,-25015,-21182,-25001,-21199,-24986,-21216,-24972,-21233,-24957,-21250,-24943,-21267,-24928,-21284,-24914,-21301,-24899,-21318,-24885,-21335,-24870,-21352,-24856,-21369,-24841,-21386,-24827,-21403,-24812,-21420,-24797,-21437,-24783,-21454,-24768,-21471,-24754,-21487,-24739,-21504,-24724,-21521,-24710,-21538,-24695,-21555,-24680,-21572,-24665,-21588,-24651,-21605,-24636,-21622,-24621,-21639,-24607,-21656,-24592,-21672,-24577,-21689,-24562,-21706,-24547,-21723,-24533,-21739,-24518,-21756,-24503,-21773,-24488,-21789,-24473,-21806,-24458,-21823,-24444,-21839,-24429,-21856,-24414,-21873,-24399,-21889,-24384,-21906,-24369,-21923,-24354,-21939,-24339,-21956,-24324,-21972,-24309,-21989,-24294,-22005,-24279,-22022,-24264,-22039,-24249,-22055,-24234,-22072,-24219,-22088,-24204,-22105,-24189,-22121,-24174,-22138,-24159,-22154,-24144,-22170,-24129,-22187,-24114,-22203,-24098,-22220,-24083,-22236,-24068,-22253,-24053,-22269,-24038,-22285,-24023,-22302,-24007,-22318,-23992,-22334,-23977,-22351,-23962,-22367,-23946,-22383,-23931,-22400,-23916,-22416,-23901,-22432,-23885,-22449,-23870,-22465,-23855,-22481,-23839,-22497,-23824,-22514,-23809,-22530,-23793,-22546,-23778,-22562,-23763,-22578,-23747,-22595,-23732,-22611,-23716,-22627,-23701,-22643,-23686,-22659,-23670,-22675,-23655,-22692,-23639,-22708,-23624,-22724,-23608,-22740,-23593,-22756,-23577,-22772,-23562,-22788,-23546,-22804,-23531,-22820,-23515,-22836,-23500,-22852,-23484,-22868,-23468,-22884,-23453,-22900,-23437,-22916,-23422,-22932,-23406,-22948,-23390,-22964,-23375,-22980,-23359,-22996,-23343,-23012,-23328,-23028,-23312,-23044,-23296,-23059,-23281,-23075,-23265,-23091,-23249,-23107,-23233,-23123,-23218,-23139,-23202,-23154,-23186,-23170,-23170,-23186,-23154,-23202,-23139,-23218,-23123,-23233,-23107,-23249,-23091,-23265,-23075,-23281,-23059,-23296,-23044,-23312,-23028,-23328,-23012,-23343,-22996,-23359,-22980,-23375,-22964,-23390,-22948,-23406,-22932,-23422,-22916,-23437,-22900,-23453,-22884,-23468,-22868,-23484,-22852,-23500,-22836,-23515,-22820,-23531,-22804,-23546,-22788,-23562,-22772,-23577,-22756,-23593,-22740,-23608,-22724,-23624,-22708,-23639,-22692,-23655,-22675,-23670,-22659,-23686,-22643,-23701,-22627,-23716,-22611,-23732,-22595,-23747,-22578,-23763,-22562,-23778,-22546,-23793,-22530,-23809,-22514,-23824,-22497,-23839,-22481,-23855,-22465,-23870,-22449,-23885,-22432,-23901,-22416,-23916,-22400,-23931,-22383,-23946,-22367,-23962,-22351,-23977,-22334,-23992,-22318,-24007,-22302,-24023,-22285,-24038,-22269,-24053,-22253,-24068,-22236,-24083,-22220,-24098,-22203,-24114,-22187,-24129,-22170,-24144,-22154,-24159,-22138,-24174,-22121,-24189,-22105,-24204,-22088,-24219,-22072,-24234,-22055,-24249,-22039,-24264,-22022,-24279,-22005,-24294,-21989,-24309,-21972,-24324,-21956,-24339,-21939,-24354,-21923,-24369,-21906,-24384,-21889,-24399,-21873,-24414,-21856,-24429,-21839,-24444,-21823,-24458,-21806,-24473,-21789,-24488,-21773,-24503,-21756,-24518,-21739,-24533,-21723,-24547,-21706,-24562,-21689,-24577,-21672,-24592,-21656,-24607,-21639,-24621,-21622,-24636,-21605,-24651,-21588,-24665,-21572,-24680,-21555,-24695,-21538,-24710,-21521,-24724,-21504,-24739,-21487,-24754,-21471,-24768,-21454,-24783,-21437,-24797,-21420,-24812,-21403,-24827,-21386,-24841,-21369,-24856,-21352,-24870,-21335,-24885,-21318,-24899,-21301,-24914,-21284,-24928,-21267,-24943,-21250,-24957,-21233,-24972,-21216,-24986,-21199,-25001,-21182,-25015,-21165,-25030,-21148,-25044,-21131,-25058,-21114,-25073,-21097,-25087,-21080,-25101,-21063,-25116,-21046,-25130,-21028,-25145,-21011,-25159,-20994,-25173,-20977,-25187,-20960,-25202,-20943,-25216,-20926,-25230,-20908,-25244,-20891,-25259,-20874,-25273,-20857,-25287,-20839,-25301,-20822,-25316,-20805,-25330,-20788,-25344,-20770,-25358,-20753,-25372,-20736,-25386,-20719,-25400,-20701,-25415,-20684,-25429,-20667,-25443,-20649,-25457,-20632,-25471,-20614,-25485,-20597,-25499,-20580,-25513,-20562,-25527,-20545,-25541,-20528,-25555,-20510,-25569,-20493,-25583,-20475,-25597,-20458,-25611,-20440,-25625,-20423,-25639,-20405,-25653,-20388,-25666,-20370,-25680,-20353,-25694,-20335,-25708,-20318,-25722,-20300,-25736,-20283,-25750,-20265,-25763,-20248,-25777,-20230,-25791,-20213,-25805,-20195,-25818,-20177,-25832,-20160,-25846,-20142,-25860,-20125,-25873,-20107,-25887,-20089,-25901,-20072,-25914,-20054,-25928,-20036,-25942,-20019,-25955,-20001,-25969,-19983,-25983,-19966,-25996,-19948,-26010,-19930,-26023,-19912,-26037,-19895,-26051,-19877,-26064,-19859,-26078,-19841,-26091,-19823,-26105,-19806,-26118,-19788,-26132,-19770,-26145,-19752,-26159,-19734,-26172,-19717,-26186,-19699,-26199,-19681,-26212,-19663,-26226,-19645,-26239,-19627,-26253,-19609,-26266,-19591,-26279,-19574,-26293,-19556,-26306,-19538,-26319,-19520,-26333,-19502,-26346,-19484,-26359,-19466,-26372,-19448,-26386,-19430,-26399,-19412,-26412,-19394,-26425,-19376,-26438,-19358,-26452,-19340,-26465,-19322,-26478,-19304,-26491,-19286,-26504,-19268,-26517,-19250,-26531,-19232,-26544,-19213,-26557,-19195,-26570,-19177,-26583,-19159,-26596,-19141,-26609,-19123,-26622,-19105,-26635,-19087,-26648,-19068,-26661,-19050,-26674,-19032,-26687,-19014,-26700,-18996,-26713,-18977,-26726,-18959,-26739,-18941,-26752,-18923,-26765,-18905,-26777,-18886,-26790,-18868,-26803,-18850,-26816,-18831,-26829,-18813,-26842,-18795,-26854,-18777,-26867,-18758,-26880,-18740,-26893,-18722,-26906,-18703,-26918,-18685,-26931,-18667,-26944,-18648,-26956,-18630,-26969,-18611,-26982,-18593,-26995,-18575,-27007,-18556,-27020,-18538,-27032,-18519,-27045,-18501,-27058,-18483,-27070,-18464,-27083,-18446,-27095,-18427,-27108,-18409,-27121,-18390,-27133,-18372,-27146,-18353,-27158,-18335,-27171,-18316,-27183,-18298,-27196,-18279,-27208,-18261,-27220,-18242,-27233,-18223,-27245,-18205,-27258,-18186,-27270,-18168,-27282,-18149,-27295,-18131,-27307,-18112,-27320,-18093,-27332,-18075,-27344,-18056,-27356,-18037,-27369,-18019,-27381,-18000,-27393,-17981,-27406,-17963,-27418,-17944,-27430,-17925,-27442,-17907,-27454,-17888,-27467,-17869,-27479,-17850,-27491,-17832,-27503,-17813,-27515,-17794,-27527,-17775,-27539,-17757,-27552,-17738,-27564,-17719,-27576,-17700,-27588,-17681,-27600,-17663,-27612,-17644,-27624,-17625,-27636,-17606,-27648,-17587,-27660,-17568,-27672,-17550,-27684,-17531,-27696,-17512,-27708,-17493,-27720,-17474,-27732,-17455,-27743,-17436,-27755,-17417,-27767,-17398,-27779,-17380,-27791,-17361,-27803,-17342,-27815,-17323,-27826,-17304,-27838,-17285,-27850,-17266,-27862,-17247,-27873,-17228,-27885,-17209,-27897,-17190,-27909,-17171,-27920,-17152,-27932,-17133,-27944,-17114,-27955,-17095,-27967,-17075,-27979,-17056,-27990,-17037,-28002,-17018,-28013,-16999,-28025,-16980,-28037,-16961,-28048,-16942,-28060,-16923,-28071,-16904,-28083,-16884,-28094,-16865,-28106,-16846,-28117,-16827,-28129,-16808,-28140,-16789,-28152,-16769,-28163,-16750,-28174,-16731,-28186,-16712,-28197,-16693,-28209,-16673,-28220,-16654,-28231,-16635,-28243,-16616,-28254,-16596,-28265,-16577,-28276,-16558,-28288,-16539,-28299,-16519,-28310,-16500,-28322,-16481,-28333,-16461,-28344,-16442,-28355,-16423,-28366,-16403,-28378,-16384,-28389,-16365,-28400,-16345,-28411,-16326,-28422,-16307,-28433,-16287,-28444,-16268,-28455,-16248,-28466,-16229,-28478,-16210,-28489,-16190,-28500,-16171,-28511,-16151,-28522,-16132,-28533,-16112,-28544,-16093,-28555,-16073,-28566,-16054,-28576,-16035,-28587,-16015,-28598,-15996,-28609,-15976,-28620,-15957,-28631,-15937,-28642,-15918,-28653,-15898,-28663,-15878,-28674,-15859,-28685,-15839,-28696,-15820,-28707,-15800,-28717,-15781,-28728,-15761,-28739,-15741,-28750,-15722,-28760,-15702,-28771,-15683,-28782,-15663,-28792,-15643,-28803,-15624,-28814,-15604,-28824,-15584,-28835,-15565,-28846,-15545,-28856,-15526,-28867,-15506,-28877,-15486,-28888,-15466,-28898,-15447,-28909,-15427,-28919,-15407,-28930,-15388,-28940,-15368,-28951,-15348,-28961,-15328,-28972,-15309,-28982,-15289,-28993,-15269,-29003,-15249,-29013,-15230,-29024,-15210,-29034,-15190,-29045,-15170,-29055,-15150,-29065,-15131,-29075,-15111,-29086,-15091,-29096,-15071,-29106,-15051,-29117,-15031,-29127,-15012,-29137,-14992,-29147,-14972,-29157,-14952,-29168,-14932,-29178,-14912,-29188,-14892,-29198,-14872,-29208,-14853,-29218,-14833,-29228,-14813,-29239,-14793,-29249,-14773,-29259,-14753,-29269,-14733,-29279,-14713,-29289,-14693,-29299,-14673,-29309,-14653,-29319,-14633,-29329,-14613,-29339,-14593,-29349,-14573,-29359,-14553,-29369,-14533,-29378,-14513,-29388,-14493,-29398,-14473,-29408,-14453,-29418,-14433,-29428,-14413,-29438,-14393,-29447,-14373,-29457,-14353,-29467,-14332,-29477,-14312,-29486,-14292,-29496,-14272,-29506,-14252,-29516,-14232,-29525,-14212,-29535,-14192,-29545,-14172,-29554,-14151,-29564,-14131,-29574,-14111,-29583,-14091,-29593,-14071,-29602,-14051,-29612,-14030,-29622,-14010,-29631,-13990,-29641,-13970,-29650,-13950,-29660,-13929,-29669,-13909,-29679,-13889,-29688,-13869,-29697,-13848,-29707,-13828,-29716,-13808,-29726,-13788,-29735,-13767,-29745,-13747,-29754,-13727,-29763,-13707,-29773,-13686,-29782,-13666,-29791,-13646,-29801,-13625,-29810,-13605,-29819,-13585,-29828,-13564,-29838,-13544,-29847,-13524,-29856,-13503,-29865,-13483,-29874,-13463,-29884,-13442,-29893,-13422,-29902,-13401,-29911,-13381,-29920,-13361,-29929,-13340,-29938,-13320,-29947,-13299,-29956,-13279,-29965,-13259,-29974,-13238,-29984,-13218,-29993,-13197,-30002,-13177,-30010,-13156,-30019,-13136,-30028,-13115,-30037,-13095,-30046,-13075,-30055,-13054,-30064,-13034,-30073,-13013,-30082,-12993,-30091,-12972,-30099,-12951,-30108,-12931,-30117,-12910,-30126,-12890,-30135,-12869,-30143,-12849,-30152,-12828,-30161,-12808,-30170,-12787,-30178,-12767,-30187,-12746,-30196,-12725,-30204,-12705,-30213,-12684,-30222,-12664,-30230,-12643,-30239,-12622,-30248,-12602,-30256,-12581,-30265,-12561,-30273,-12540,-30282,-12519,-30290,-12499,-30299,-12478,-30307,-12457,-30316,-12437,-30324,-12416,-30333,-12395,-30341,-12375,-30350,-12354,-30358,-12333,-30366,-12313,-30375,-12292,-30383,-12271,-30392,-12250,-30400,-12230,-30408,-12209,-30417,-12188,-30425,-12167,-30433,-12147,-30441,-12126,-30450,-12105,-30458,-12084,-30466,-12064,-30474,-12043,-30483,-12022,-30491,-12001,-30499,-11981,-30507,-11960,-30515,-11939,-30523,-11918,-30531,-11897,-30540,-11877,-30548,-11856,-30556,-11835,-30564,-11814,-30572,-11793,-30580,-11772,-30588,-11751,-30596,-11731,-30604,-11710,-30612,-11689,-30620,-11668,-30628,-11647,-30636,-11626,-30644,-11605,-30652,-11584,-30659,-11564,-30667,-11543,-30675,-11522,-30683,-11501,-30691,-11480,-30699,-11459,-30706,-11438,-30714,-11417,-30722,-11396,-30730,-11375,-30738,-11354,-30745,-11333,-30753,-11312,-30761,-11291,-30768,-11270,-30776,-11249,-30784,-11228,-30791,-11207,-30799,-11186,-30807,-11165,-30814,-11144,-30822,-11123,-30829,-11102,-30837,-11081,-30845,-11060,-30852,-11039,-30860,-11018,-30867,-10997,-30875,-10976,-30882,-10955,-30890,-10934,-30897,-10913,-30904,-10892,-30912,-10871,-30919,-10850,-30927,-10829,-30934,-10808,-30941,-10787,-30949,-10766,-30956,-10744,-30963,-10723,-30971,-10702,-30978,-10681,-30985,-10660,-30992,-10639,-31000,-10618,-31007,-10597,-31014,-10575,-31021,-10554,-31029,-10533,-31036,-10512,-31043,-10491,-31050,-10470,-31057,-10448,-31064,-10427,-31071,-10406,-31078,-10385,-31086,-10364,-31093,-10343,-31100,-10321,-31107,-10300,-31114,-10279,-31121,-10258,-31128,-10236,-31135,-10215,-31142,-10194,-31149,-10173,-31155,-10152,-31162,-10130,-31169,-10109,-31176,-10088,-31183,-10067,-31190,-10045,-31197,-10024,-31204,-10003,-31210,-9981,-31217,-9960,-31224,-9939,-31231,-9918,-31237,-9896,-31244,-9875,-31251,-9854,-31258,-9832,-31264,-9811,-31271,-9790,-31278,-9768,-31284,-9747,-31291,-9726,-31298,-9704,-31304,-9683,-31311,-9662,-31317,-9640,-31324,-9619,-31331,-9598,-31337,-9576,-31344,-9555,-31350,-9534,-31357,-9512,-31363,-9491,-31370,-9469,-31376,-9448,-31382,-9427,-31389,-9405,-31395,-9384,-31402,-9363,-31408,-9341,-31414,-9320,-31421,-9298,-31427,-9277,-31433,-9255,-31440,-9234,-31446,-9213,-31452,-9191,-31458,-9170,-31465,-9148,-31471,-9127,-31477,-9105,-31483,-9084,-31490,-9062,-31496,-9041,-31502,-9019,-31508,-8998,-31514,-8976,-31520,-8955,-31526,-8933,-31532,-8912,-31538,-8890,-31545,-8869,-31551,-8847,-31557,-8826,-31563,-8804,-31569,-8783,-31575,-8761,-31581,-8740,-31587,-8718,-31592,-8697,-31598,-8675,-31604,-8654,-31610,-8632,-31616,-8611,-31622,-8589,-31628,-8568,-31634,-8546,-31639,-8524,-31645,-8503,-31651,-8481,-31657,-8460,-31663,-8438,-31668,-8416,-31674,-8395,-31680,-8373,-31685,-8352,-31691,-8330,-31697,-8308,-31702,-8287,-31708,-8265,-31714,-8244,-31719,-8222,-31725,-8200,-31730,-8179,-31736,-8157,-31742,-8135,-31747,-8114,-31753,-8092,-31758,-8071,-31764,-8049,-31769,-8027,-31775,-8006,-31780,-7984,-31786,-7962,-31791,-7941,-31796,-7919,-31802,-7897,-31807,-7876,-31812,-7854,-31818,-7832,-31823,-7810,-31828,-7789,-31834,-7767,-31839,-7745,-31844,-7724,-31850,-7702,-31855,-7680,-31860,-7658,-31865,-7637,-31870,-7615,-31876,-7593,-31881,-7572,-31886,-7550,-31891,-7528,-31896,-7506,-31901,-7485,-31906,-7463,-31912,-7441,-31917,-7419,-31922,-7398,-31927,-7376,-31932,-7354,-31937,-7332,-31942,-7311,-31947,-7289,-31952,-7267,-31957,-7245,-31962,-7223,-31966,-7202,-31971,-7180,-31976,-7158,-31981,-7136,-31986,-7114,-31991,-7093,-31996,-7071,-32000,-7049,-32005,-7027,-32010,-7005,-32015,-6983,-32020,-6962,-32024,-6940,-32029,-6918,-32034,-6896,-32038,-6874,-32043,-6852,-32048,-6831,-32052,-6809,-32057,-6787,-32062,-6765,-32066,-6743,-32071,-6721,-32075,-6699,-32080,-6678,-32085,-6656,-32089,-6634,-32094,-6612,-32098,-6590,-32103,-6568,-32107,-6546,-32111,-6524,-32116,-6503,-32120,-6481,-32125,-6459,-32129,-6437,-32134,-6415,-32138,-6393,-32142,-6371,-32147,-6349,-32151,-6327,-32155,-6305,-32159,-6283,-32164,-6262,-32168,-6240,-32172,-6218,-32177,-6196,-32181,-6174,-32185,-6152,-32189,-6130,-32193,-6108,-32197,-6086,-32202,-6064,-32206,-6042,-32210,-6020,-32214,-5998,-32218,-5976,-32222,-5954,-32226,-5932,-32230,-5910,-32234,-5888,-32238,-5866,-32242,-5844,-32246,-5822,-32250,-5800,-32254,-5778,-32258,-5756,-32262,-5734,-32266,-5712,-32270,-5690,-32274,-5668,-32277,-5646,-32281,-5624,-32285,-5602,-32289,-5580,-32293,-5558,-32296,-5536,-32300,-5514,-32304,-5492,-32308,-5470,-32311,-5448,-32315,-5426,-32319,-5404,-32323,-5382,-32326,-5360,-32330,-5338,-32333,-5316,-32337,-5294,-32341,-5272,-32344,-5250,-32348,-5228,-32351,-5206,-32355,-5184,-32358,-5162,-32362,-5140,-32365,-5118,-32369,-5095,-32372,-5073,-32376,-5051,-32379,-5029,-32383,-5007,-32386,-4985,-32390,-4963,-32393,-4941,-32396,-4919,-32400,-4897,-32403,-4875,-32406,-4853,-32410,-4831,-32413,-4808,-32416,-4786,-32419,-4764,-32423,-4742,-32426,-4720,-32429,-4698,-32432,-4676,-32435,-4654,-32439,-4632,-32442,-4609,-32445,-4587,-32448,-4565,-32451,-4543,-32454,-4521,-32457,-4499,-32460,-4477,-32463,-4455,-32466,-4432,-32469,-4410,-32472,-4388,-32475,-4366,-32478,-4344,-32481,-4322,-32484,-4300,-32487,-4277,-32490,-4255,-32493,-4233,-32496,-4211,-32499,-4189,-32502,-4167,-32504,-4145,-32507,-4122,-32510,-4100,-32513,-4078,-32516,-4056,-32518,-4034,-32521,-4012,-32524,-3989,-32527,-3967,-32529,-3945,-32532,-3923,-32535,-3901,-32537,-3878,-32540,-3856,-32542,-3834,-32545,-3812,-32548,-3790,-32550,-3768,-32553,-3745,-32555,-3723,-32558,-3701,-32560,-3679,-32563,-3657,-32565,-3634,-32568,-3612,-32570,-3590,-32573,-3568,-32575,-3546,-32578,-3523,-32580,-3501,-32582,-3479,-32585,-3457,-32587,-3434,-32589,-3412,-32592,-3390,-32594,-3368,-32596,-3346,-32599,-3323,-32601,-3301,-32603,-3279,-32605,-3257,-32608,-3234,-32610,-3212,-32612,-3190,-32614,-3168,-32616,-3146,-32618,-3123,-32620,-3101,-32623,-3079,-32625,-3057,-32627,-3034,-32629,-3012,-32631,-2990,-32633,-2968,-32635,-2945,-32637,-2923,-32639,-2901,-32641,-2879,-32643,-2856,-32645,-2834,-32647,-2812,-32649,-2790,-32650,-2767,-32652,-2745,-32654,-2723,-32656,-2701,-32658,-2678,-32660,-2656,-32662,-2634,-32663,-2611,-32665,-2589,-32667,-2567,-32669,-2545,-32670,-2522,-32672,-2500,-32674,-2478,-32675,-2456,-32677,-2433,-32679,-2411,-32680,-2389,-32682,-2366,-32684,-2344,-32685,-2322,-32687,-2300,-32688,-2277,-32690,-2255,-32691,-2233,-32693,-2210,-32694,-2188,-32696,-2166,-32697,-2144,-32699,-2121,-32700,-2099,-32702,-2077,-32703,-2054,-32704,-2032,-32706,-2010,-32707,-1987,-32709,-1965,-32710,-1943,-32711,-1921,-32712,-1898,-32714,-1876,-32715,-1854,-32716,-1831,-32718,-1809,-32719,-1787,-32720,-1764,-32721,-1742,-32722,-1720,-32724,-1698,-32725,-1675,-32726,-1653,-32727,-1631,-32728,-1608,-32729,-1586,-32730,-1564,-32731,-1541,-32732,-1519,-32733,-1497,-32734,-1474,-32735,-1452,-32736,-1430,-32737,-1407,-32738,-1385,-32739,-1363,-32740,-1340,-32741,-1318,-32742,-1296,-32743,-1274,-32744,-1251,-32744,-1229,-32745,-1207,-32746,-1184,-32747,-1162,-32748,-1140,-32748,-1117,-32749,-1095,-32750,-1073,-32751,-1050,-32751,-1028,-32752,-1006,-32753,-983,-32753,-961,-32754,-939,-32755,-916,-32755,-894,-32756,-872,-32757,-849,-32757,-827,-32758,-805,-32758,-782,-32759,-760,-32759,-738,-32760,-715,-32760,-693,-32761,-671,-32761,-648,-32762,-626,-32762,-604,-32762,-581,-32763,-559,-32763,-537,-32763,-514,-32764,-492,-32764,-470,-32764,-447,-32765,-425,-32765,-403,-32765,-380,-32766,-358,-32766,-336,-32766,-313,-32766,-291,-32766,-269,-32767,-246,-32767,-224,-32767,-202,-32767,-179,-32767,-157,-32767,-135,-32767,-112,-32767,-90,-32767,-68,-32767,-45,-32767,-23,-32767,-1,-32767,22,-32767,44,-32767,67,-32767,89,-32767,111,-32767,134,-32767,156,-32767,178,-32767,201,-32767,223,-32767,245,-32766,268,-32766,290,-32766,312,-32766,335,-32766,357,-32765,379,-32765,402,-32765,424,-32764,446,-32764,469,-32764,491,-32763,513,-32763,536,-32763,558,-32762,580,-32762,603,-32762,625,-32761,647,-32761,670,-32760,692,-32760,714,-32759,737,-32759,759,-32758,781,-32758,804,-32757,826,-32757,848,-32756,871,-32755,893,-32755,915,-32754,938,-32753,960,-32753,982,-32752,1005,-32751,1027,-32751,1049,-32750,1072,-32749,1094,-32748,1116,-32748,1139,-32747,1161,-32746,1183,-32745,1206,-32744,1228,-32744,1250,-32743,1273,-32742,1295,-32741,1317,-32740,1339,-32739,1362,-32738,1384,-32737,1406,-32736,1429,-32735,1451,-32734,1473,-32733,1496,-32732,1518,-32731,1540,-32730,1563,-32729,1585,-32728,1607,-32727,1630,-32726,1652,-32725,1674,-32724,1697,-32722,1719,-32721,1741,-32720,1763,-32719,1786,-32718,1808,-32716,1830,-32715,1853,-32714,1875,-32712,1897,-32711,1920,-32710,1942,-32709,1964,-32707,1986,-32706,2009,-32704,2031,-32703,2053,-32702,2076,-32700,2098,-32699,2120,-32697,2143,-32696,2165,-32694,2187,-32693,2209,-32691,2232,-32690,2254,-32688,2276,-32687,2299,-32685,2321,-32684,2343,-32682,2365,-32680,2388,-32679,2410,-32677,2432,-32675,2455,-32674,2477,-32672,2499,-32670,2521,-32669,2544,-32667,2566,-32665,2588,-32663,2610,-32662,2633,-32660,2655,-32658,2677,-32656,2700,-32654,2722,-32652,2744,-32650,2766,-32649,2789,-32647,2811,-32645,2833,-32643,2855,-32641,2878,-32639,2900,-32637,2922,-32635,2944,-32633,2967,-32631,2989,-32629,3011,-32627,3033,-32625,3056,-32623,3078,-32620,3100,-32618,3122,-32616,3145,-32614,3167,-32612,3189,-32610,3211,-32608,3233,-32605,3256,-32603,3278,-32601,3300,-32599,3322,-32596,3345,-32594,3367,-32592,3389,-32589,3411,-32587,3433,-32585,3456,-32582,3478,-32580,3500,-32578,3522,-32575,3545,-32573,3567,-32570,3589,-32568,3611,-32565,3633,-32563,3656,-32560,3678,-32558,3700,-32555,3722,-32553,3744,-32550,3767,-32548,3789,-32545,3811,-32542,3833,-32540,3855,-32537,3877,-32535,3900,-32532,3922,-32529,3944,-32527,3966,-32524,3988,-32521,4011,-32518,4033,-32516,4055,-32513,4077,-32510,4099,-32507,4121,-32504,4144,-32502,4166,-32499,4188,-32496,4210,-32493,4232,-32490,4254,-32487,4276,-32484,4299,-32481,4321,-32478,4343,-32475,4365,-32472,4387,-32469,4409,-32466,4431,-32463,4454,-32460,4476,-32457,4498,-32454,4520,-32451,4542,-32448,4564,-32445,4586,-32442,4608,-32439,4631,-32435,4653,-32432,4675,-32429,4697,-32426,4719,-32423,4741,-32419,4763,-32416,4785,-32413,4807,-32410,4830,-32406,4852,-32403,4874,-32400,4896,-32396,4918,-32393,4940,-32390,4962,-32386,4984,-32383,5006,-32379,5028,-32376,5050,-32372,5072,-32369,5094,-32365,5117,-32362,5139,-32358,5161,-32355,5183,-32351,5205,-32348,5227,-32344,5249,-32341,5271,-32337,5293,-32333,5315,-32330,5337,-32326,5359,-32323,5381,-32319,5403,-32315,5425,-32311,5447,-32308,5469,-32304,5491,-32300,5513,-32296,5535,-32293,5557,-32289,5579,-32285,5601,-32281,5623,-32277,5645,-32274,5667,-32270,5689,-32266,5711,-32262,5733,-32258,5755,-32254,5777,-32250,5799,-32246,5821,-32242,5843,-32238,5865,-32234,5887,-32230,5909,-32226,5931,-32222,5953,-32218,5975,-32214,5997,-32210,6019,-32206,6041,-32202,6063,-32197,6085,-32193,6107,-32189,6129,-32185,6151,-32181,6173,-32177,6195,-32172,6217,-32168,6239,-32164,6261,-32159,6282,-32155,6304,-32151,6326,-32147,6348,-32142,6370,-32138,6392,-32134,6414,-32129,6436,-32125,6458,-32120,6480,-32116,6502,-32111,6523,-32107,6545,-32103,6567,-32098,6589,-32094,6611,-32089,6633,-32085,6655,-32080,6677,-32075,6698,-32071,6720,-32066,6742,-32062,6764,-32057,6786,-32052,6808,-32048,6830,-32043,6851,-32038,6873,-32034,6895,-32029,6917,-32024,6939,-32020,6961,-32015,6982,-32010,7004,-32005,7026,-32000,7048,-31996,7070,-31991,7092,-31986,7113,-31981,7135,-31976,7157,-31971,7179,-31966,7201,-31962,7222,-31957,7244,-31952,7266,-31947,7288,-31942,7310,-31937,7331,-31932,7353,-31927,7375,-31922,7397,-31917,7418,-31912,7440,-31906,7462,-31901,7484,-31896,7505,-31891,7527,-31886,7549,-31881,7571,-31876,7592,-31870,7614,-31865,7636,-31860,7657,-31855,7679,-31850,7701,-31844,7723,-31839,7744,-31834,7766,-31828,7788,-31823,7809,-31818,7831,-31812,7853,-31807,7875,-31802,7896,-31796,7918,-31791,7940,-31786,7961,-31780,7983,-31775,8005,-31769,8026,-31764,8048,-31758,8070,-31753,8091,-31747,8113,-31742,8134,-31736,8156,-31730,8178,-31725,8199,-31719,8221,-31714,8243,-31708,8264,-31702,8286,-31697,8307,-31691,8329,-31685,8351,-31680,8372,-31674,8394,-31668,8415,-31663,8437,-31657,8459,-31651,8480,-31645,8502,-31639,8523,-31634,8545,-31628,8567,-31622,8588,-31616,8610,-31610,8631,-31604,8653,-31598,8674,-31592,8696,-31587,8717,-31581,8739,-31575,8760,-31569,8782,-31563,8803,-31557,8825,-31551,8846,-31545,8868,-31538,8889,-31532,8911,-31526,8932,-31520,8954,-31514,8975,-31508,8997,-31502,9018,-31496,9040,-31490,9061,-31483,9083,-31477,9104,-31471,9126,-31465,9147,-31458,9169,-31452,9190,-31446,9212,-31440,9233,-31433,9254,-31427,9276,-31421,9297,-31414,9319,-31408,9340,-31402,9362,-31395,9383,-31389,9404,-31382,9426,-31376,9447,-31370,9468,-31363,9490,-31357,9511,-31350,9533,-31344,9554,-31337,9575,-31331,9597,-31324,9618,-31317,9639,-31311,9661,-31304,9682,-31298,9703,-31291,9725,-31284,9746,-31278,9767,-31271,9789,-31264,9810,-31258,9831,-31251,9853,-31244,9874,-31237,9895,-31231,9917,-31224,9938,-31217,9959,-31210,9980,-31204,10002,-31197,10023,-31190,10044,-31183,10066,-31176,10087,-31169,10108,-31162,10129,-31155,10151,-31149,10172,-31142,10193,-31135,10214,-31128,10235,-31121,10257,-31114,10278,-31107,10299,-31100,10320,-31093,10342,-31086,10363,-31078,10384,-31071,10405,-31064,10426,-31057,10447,-31050,10469,-31043,10490,-31036,10511,-31029,10532,-31021,10553,-31014,10574,-31007,10596,-31000,10617,-30992,10638,-30985,10659,-30978,10680,-30971,10701,-30963,10722,-30956,10743,-30949,10765,-30941,10786,-30934,10807,-30927,10828,-30919,10849,-30912,10870,-30904,10891,-30897,10912,-30890,10933,-30882,10954,-30875,10975,-30867,10996,-30860,11017,-30852,11038,-30845,11059,-30837,11080,-30829,11101,-30822,11122,-30814,11143,-30807,11164,-30799,11185,-30791,11206,-30784,11227,-30776,11248,-30768,11269,-30761,11290,-30753,11311,-30745,11332,-30738,11353,-30730,11374,-30722,11395,-30714,11416,-30706,11437,-30699,11458,-30691,11479,-30683,11500,-30675,11521,-30667,11542,-30659,11563,-30652,11583,-30644,11604,-30636,11625,-30628,11646,-30620,11667,-30612,11688,-30604,11709,-30596,11730,-30588,11750,-30580,11771,-30572,11792,-30564,11813,-30556,11834,-30548,11855,-30540,11876,-30531,11896,-30523,11917,-30515,11938,-30507,11959,-30499,11980,-30491,12000,-30483,12021,-30474,12042,-30466,12063,-30458,12083,-30450,12104,-30441,12125,-30433,12146,-30425,12166,-30417,12187,-30408,12208,-30400,12229,-30392,12249,-30383,12270,-30375,12291,-30366,12312,-30358,12332,-30350,12353,-30341,12374,-30333,12394,-30324,12415,-30316,12436,-30307,12456,-30299,12477,-30290,12498,-30282,12518,-30273,12539,-30265,12560,-30256,12580,-30248,12601,-30239,12621,-30230,12642,-30222,12663,-30213,12683,-30204,12704,-30196,12724,-30187,12745,-30178,12766,-30170,12786,-30161,12807,-30152,12827,-30143,12848,-30135,12868,-30126,12889,-30117,12909,-30108,12930,-30099,12950,-30091,12971,-30082,12992,-30073,13012,-30064,13033,-30055,13053,-30046,13074,-30037,13094,-30028,13114,-30019,13135,-30010,13155,-30002,13176,-29993,13196,-29984,13217,-29974,13237,-29965,13258,-29956,13278,-29947,13298,-29938,13319,-29929,13339,-29920,13360,-29911,13380,-29902,13400,-29893,13421,-29884,13441,-29874,13462,-29865,13482,-29856,13502,-29847,13523,-29838,13543,-29828,13563,-29819,13584,-29810,13604,-29801,13624,-29791,13645,-29782,13665,-29773,13685,-29763,13706,-29754,13726,-29745,13746,-29735,13766,-29726,13787,-29716,13807,-29707,13827,-29697,13847,-29688,13868,-29679,13888,-29669,13908,-29660,13928,-29650,13949,-29641,13969,-29631,13989,-29622,14009,-29612,14029,-29602,14050,-29593,14070,-29583,14090,-29574,14110,-29564,14130,-29554,14150,-29545,14171,-29535,14191,-29525,14211,-29516,14231,-29506,14251,-29496,14271,-29486,14291,-29477,14311,-29467,14331,-29457,14352,-29447,14372,-29438,14392,-29428,14412,-29418,14432,-29408,14452,-29398,14472,-29388,14492,-29378,14512,-29369,14532,-29359,14552,-29349,14572,-29339,14592,-29329,14612,-29319,14632,-29309,14652,-29299,14672,-29289,14692,-29279,14712,-29269,14732,-29259,14752,-29249,14772,-29239,14792,-29228,14812,-29218,14832,-29208,14852,-29198,14871,-29188,14891,-29178,14911,-29168,14931,-29157,14951,-29147,14971,-29137,14991,-29127,15011,-29117,15030,-29106,15050,-29096,15070,-29086,15090,-29075,15110,-29065,15130,-29055,15149,-29045,15169,-29034,15189,-29024,15209,-29013,15229,-29003,15248,-28993,15268,-28982,15288,-28972,15308,-28961,15327,-28951,15347,-28940,15367,-28930,15387,-28919,15406,-28909,15426,-28898,15446,-28888,15465,-28877,15485,-28867,15505,-28856,15525,-28846,15544,-28835,15564,-28824,15583,-28814,15603,-28803,15623,-28792,15642,-28782,15662,-28771,15682,-28760,15701,-28750,15721,-28739,15740,-28728,15760,-28717,15780,-28707,15799,-28696,15819,-28685,15838,-28674,15858,-28663,15877,-28653,15897,-28642,15917,-28631,15936,-28620,15956,-28609,15975,-28598,15995,-28587,16014,-28576,16034,-28566,16053,-28555,16072,-28544,16092,-28533,16111,-28522,16131,-28511,16150,-28500,16170,-28489,16189,-28478,16209,-28466,16228,-28455,16247,-28444,16267,-28433,16286,-28422,16306,-28411,16325,-28400,16344,-28389,16364,-28378,16383,-28366,16402,-28355,16422,-28344,16441,-28333,16460,-28322,16480,-28310,16499,-28299,16518,-28288,16538,-28276,16557,-28265,16576,-28254,16595,-28243,16615,-28231,16634,-28220,16653,-28209,16672,-28197,16692,-28186,16711,-28174,16730,-28163,16749,-28152,16768,-28140,16788,-28129,16807,-28117,16826,-28106,16845,-28094,16864,-28083,16883,-28071,16903,-28060,16922,-28048,16941,-28037,16960,-28025,16979,-28013,16998,-28002,17017,-27990,17036,-27979,17055,-27967,17074,-27955,17094,-27944,17113,-27932,17132,-27920,17151,-27909,17170,-27897,17189,-27885,17208,-27873,17227,-27862,17246,-27850,17265,-27838,17284,-27826,17303,-27815,17322,-27803,17341,-27791,17360,-27779,17379,-27767,17397,-27755,17416,-27743,17435,-27732,17454,-27720,17473,-27708,17492,-27696,17511,-27684,17530,-27672,17549,-27660,17567,-27648,17586,-27636,17605,-27624,17624,-27612,17643,-27600,17662,-27588,17680,-27576,17699,-27564,17718,-27552,17737,-27539,17756,-27527,17774,-27515,17793,-27503,17812,-27491,17831,-27479,17849,-27467,17868,-27454,17887,-27442,17906,-27430,17924,-27418,17943,-27406,17962,-27393,17980,-27381,17999,-27369,18018,-27356,18036,-27344,18055,-27332,18074,-27320,18092,-27307,18111,-27295,18130,-27282,18148,-27270,18167,-27258,18185,-27245,18204,-27233,18222,-27220,18241,-27208,18260,-27196,18278,-27183,18297,-27171,18315,-27158,18334,-27146,18352,-27133,18371,-27121,18389,-27108,18408,-27095,18426,-27083,18445,-27070,18463,-27058,18482,-27045,18500,-27032,18518,-27020,18537,-27007,18555,-26995,18574,-26982,18592,-26969,18610,-26956,18629,-26944,18647,-26931,18666,-26918,18684,-26906,18702,-26893,18721,-26880,18739,-26867,18757,-26854,18776,-26842,18794,-26829,18812,-26816,18830,-26803,18849,-26790,18867,-26777,18885,-26765,18904,-26752,18922,-26739,18940,-26726,18958,-26713,18976,-26700,18995,-26687,19013,-26674,19031,-26661,19049,-26648,19067,-26635,19086,-26622,19104,-26609,19122,-26596,19140,-26583,19158,-26570,19176,-26557,19194,-26544,19212,-26531,19231,-26517,19249,-26504,19267,-26491,19285,-26478,19303,-26465,19321,-26452,19339,-26438,19357,-26425,19375,-26412,19393,-26399,19411,-26386,19429,-26372,19447,-26359,19465,-26346,19483,-26333,19501,-26319,19519,-26306,19537,-26293,19555,-26279,19573,-26266,19590,-26253,19608,-26239,19626,-26226,19644,-26212,19662,-26199,19680,-26186,19698,-26172,19716,-26159,19733,-26145,19751,-26132,19769,-26118,19787,-26105,19805,-26091,19822,-26078,19840,-26064,19858,-26051,19876,-26037,19894,-26023,19911,-26010,19929,-25996,19947,-25983,19965,-25969,19982,-25955,20000,-25942,20018,-25928,20035,-25914,20053,-25901,20071,-25887,20088,-25873,20106,-25860,20124,-25846,20141,-25832,20159,-25818,20176,-25805,20194,-25791,20212,-25777,20229,-25763,20247,-25750,20264,-25736,20282,-25722,20299,-25708,20317,-25694,20334,-25680,20352,-25666,20369,-25653,20387,-25639,20404,-25625,20422,-25611,20439,-25597,20457,-25583,20474,-25569,20492,-25555,20509,-25541,20527,-25527,20544,-25513,20561,-25499,20579,-25485,20596,-25471,20613,-25457,20631,-25443,20648,-25429,20666,-25415,20683,-25400,20700,-25386,20718,-25372,20735,-25358,20752,-25344,20769,-25330,20787,-25316,20804,-25301,20821,-25287,20838,-25273,20856,-25259,20873,-25244,20890,-25230,20907,-25216,20925,-25202,20942,-25187,20959,-25173,20976,-25159,20993,-25145,21010,-25130,21027,-25116,21045,-25101,21062,-25087,21079,-25073,21096,-25058,21113,-25044,21130,-25030,21147,-25015,21164,-25001,21181,-24986,21198,-24972,21215,-24957,21232,-24943,21249,-24928,21266,-24914,21283,-24899,21300,-24885,21317,-24870,21334,-24856,21351,-24841,21368,-24827,21385,-24812,21402,-24797,21419,-24783,21436,-24768,21453,-24754,21470,-24739,21486,-24724,21503,-24710,21520,-24695,21537,-24680,21554,-24665,21571,-24651,21587,-24636,21604,-24621,21621,-24607,21638,-24592,21655,-24577,21671,-24562,21688,-24547,21705,-24533,21722,-24518,21738,-24503,21755,-24488,21772,-24473,21788,-24458,21805,-24444,21822,-24429,21838,-24414,21855,-24399,21872,-24384,21888,-24369,21905,-24354,21922,-24339,21938,-24324,21955,-24309,21971,-24294,21988,-24279,22004,-24264,22021,-24249,22038,-24234,22054,-24219,22071,-24204,22087,-24189,22104,-24174,22120,-24159,22137,-24144,22153,-24129,22169,-24114,22186,-24098,22202,-24083,22219,-24068,22235,-24053,22252,-24038,22268,-24023,22284,-24007,22301,-23992,22317,-23977,22333,-23962,22350,-23946,22366,-23931,22382,-23916,22399,-23901,22415,-23885,22431,-23870,22448,-23855,22464,-23839,22480,-23824,22496,-23809,22513,-23793,22529,-23778,22545,-23763,22561,-23747,22577,-23732,22594,-23716,22610,-23701,22626,-23686,22642,-23670,22658,-23655,22674,-23639,22691,-23624,22707,-23608,22723,-23593,22739,-23577,22755,-23562,22771,-23546,22787,-23531,22803,-23515,22819,-23500,22835,-23484,22851,-23468,22867,-23453,22883,-23437,22899,-23422,22915,-23406,22931,-23390,22947,-23375,22963,-23359,22979,-23343,22995,-23328,23011,-23312,23027,-23296,23043,-23281,23058,-23265,23074,-23249,23090,-23233,23106,-23218,23122,-23202,23138,-23186,23153,-23170,23169,-23154,23185,-23139,23201,-23123,23217,-23107,23232,-23091,23248,-23075,23264,-23059,23280,-23044,23295,-23028,23311,-23012,23327,-22996,23342,-22980,23358,-22964,23374,-22948,23389,-22932,23405,-22916,23421,-22900,23436,-22884,23452,-22868,23467,-22852,23483,-22836,23499,-22820,23514,-22804,23530,-22788,23545,-22772,23561,-22756,23576,-22740,23592,-22724,23607,-22708,23623,-22692,23638,-22675,23654,-22659,23669,-22643,23685,-22627,23700,-22611,23715,-22595,23731,-22578,23746,-22562,23762,-22546,23777,-22530,23792,-22514,23808,-22497,23823,-22481,23838,-22465,23854,-22449,23869,-22432,23884,-22416,23900,-22400,23915,-22383,23930,-22367,23945,-22351,23961,-22334,23976,-22318,23991,-22302,24006,-22285,24022,-22269,24037,-22253,24052,-22236,24067,-22220,24082,-22203,24097,-22187,24113,-22170,24128,-22154,24143,-22138,24158,-22121,24173,-22105,24188,-22088,24203,-22072,24218,-22055,24233,-22039,24248,-22022,24263,-22005,24278,-21989,24293,-21972,24308,-21956,24323,-21939,24338,-21923,24353,-21906,24368,-21889,24383,-21873,24398,-21856,24413,-21839,24428,-21823,24443,-21806,24457,-21789,24472,-21773,24487,-21756,24502,-21739,24517,-21723,24532,-21706,24546,-21689,24561,-21672,24576,-21656,24591,-21639,24606,-21622,24620,-21605,24635,-21588,24650,-21572,24664,-21555,24679,-21538,24694,-21521,24709,-21504,24723,-21487,24738,-21471,24753,-21454,24767,-21437,24782,-21420,24796,-21403,24811,-21386,24826,-21369,24840,-21352,24855,-21335,24869,-21318,24884,-21301,24898,-21284,24913,-21267,24927,-21250,24942,-21233,24956,-21216,24971,-21199,24985,-21182,25000,-21165,25014,-21148,25029,-21131,25043,-21114,25057,-21097,25072,-21080,25086,-21063,25100,-21046,25115,-21028,25129,-21011,25144,-20994,25158,-20977,25172,-20960,25186,-20943,25201,-20926,25215,-20908,25229,-20891,25243,-20874,25258,-20857,25272,-20839,25286,-20822,25300,-20805,25315,-20788,25329,-20770,25343,-20753,25357,-20736,25371,-20719,25385,-20701,25399,-20684,25414,-20667,25428,-20649,25442,-20632,25456,-20614,25470,-20597,25484,-20580,25498,-20562,25512,-20545,25526,-20528,25540,-20510,25554,-20493,25568,-20475,25582,-20458,25596,-20440,25610,-20423,25624,-20405,25638,-20388,25652,-20370,25665,-20353,25679,-20335,25693,-20318,25707,-20300,25721,-20283,25735,-20265,25749,-20248,25762,-20230,25776,-20213,25790,-20195,25804,-20177,25817,-20160,25831,-20142,25845,-20125,25859,-20107,25872,-20089,25886,-20072,25900,-20054,25913,-20036,25927,-20019,25941,-20001,25954,-19983,25968,-19966,25982,-19948,25995,-19930,26009,-19912,26022,-19895,26036,-19877,26050,-19859,26063,-19841,26077,-19823,26090,-19806,26104,-19788,26117,-19770,26131,-19752,26144,-19734,26158,-19717,26171,-19699,26185,-19681,26198,-19663,26211,-19645,26225,-19627,26238,-19609,26252,-19591,26265,-19574,26278,-19556,26292,-19538,26305,-19520,26318,-19502,26332,-19484,26345,-19466,26358,-19448,26371,-19430,26385,-19412,26398,-19394,26411,-19376,26424,-19358,26437,-19340,26451,-19322,26464,-19304,26477,-19286,26490,-19268,26503,-19250,26516,-19232,26530,-19213,26543,-19195,26556,-19177,26569,-19159,26582,-19141,26595,-19123,26608,-19105,26621,-19087,26634,-19068,26647,-19050,26660,-19032,26673,-19014,26686,-18996,26699,-18977,26712,-18959,26725,-18941,26738,-18923,26751,-18905,26764,-18886,26776,-18868,26789,-18850,26802,-18831,26815,-18813,26828,-18795,26841,-18777,26853,-18758,26866,-18740,26879,-18722,26892,-18703,26905,-18685,26917,-18667,26930,-18648,26943,-18630,26955,-18611,26968,-18593,26981,-18575,26994,-18556,27006,-18538,27019,-18519,27031,-18501,27044,-18483,27057,-18464,27069,-18446,27082,-18427,27094,-18409,27107,-18390,27120,-18372,27132,-18353,27145,-18335,27157,-18316,27170,-18298,27182,-18279,27195,-18261,27207,-18242,27219,-18223,27232,-18205,27244,-18186,27257,-18168,27269,-18149,27281,-18131,27294,-18112,27306,-18093,27319,-18075,27331,-18056,27343,-18037,27355,-18019,27368,-18000,27380,-17981,27392,-17963,27405,-17944,27417,-17925,27429,-17907,27441,-17888,27453,-17869,27466,-17850,27478,-17832,27490,-17813,27502,-17794,27514,-17775,27526,-17757,27538,-17738,27551,-17719,27563,-17700,27575,-17681,27587,-17663,27599,-17644,27611,-17625,27623,-17606,27635,-17587,27647,-17568,27659,-17550,27671,-17531,27683,-17512,27695,-17493,27707,-17474,27719,-17455,27731,-17436,27742,-17417,27754,-17398,27766,-17380,27778,-17361,27790,-17342,27802,-17323,27814,-17304,27825,-17285,27837,-17266,27849,-17247,27861,-17228,27872,-17209,27884,-17190,27896,-17171,27908,-17152,27919,-17133,27931,-17114,27943,-17095,27954,-17075,27966,-17056,27978,-17037,27989,-17018,28001,-16999,28012,-16980,28024,-16961,28036,-16942,28047,-16923,28059,-16904,28070,-16884,28082,-16865,28093,-16846,28105,-16827,28116,-16808,28128,-16789,28139,-16769,28151,-16750,28162,-16731,28173,-16712,28185,-16693,28196,-16673,28208,-16654,28219,-16635,28230,-16616,28242,-16596,28253,-16577,28264,-16558,28275,-16539,28287,-16519,28298,-16500,28309,-16481,28321,-16461,28332,-16442,28343,-16423,28354,-16403,28365}; diff --git a/openair1/PHY/TOOLS/twiddle24576.h b/openair1/PHY/TOOLS/twiddle24576.h deleted file mode 100644 index 34fc59d779..0000000000 --- a/openair1/PHY/TOOLS/twiddle24576.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:8191)/24576)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*(0:2:16382)/24576)); -twa2 = zeros(1,16384); -twb2 = zeros(1,16384); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); - - -*/ - -int16_t twa24576[16384] __attribute__((aligned(32))) = {32767,0,32766,-9,32766,-17,32766,-26,32766,-34,32766,-42,32766,-51,32766,-59,32766,-68,32766,-76,32766,-84,32766,-93,32766,-101,32766,-109,32766,-118,32766,-126,32766,-135,32766,-143,32766,-151,32766,-160,32766,-168,32766,-176,32766,-185,32766,-193,32766,-202,32766,-210,32766,-218,32766,-227,32766,-235,32766,-243,32766,-252,32765,-260,32765,-269,32765,-277,32765,-285,32765,-294,32765,-302,32765,-310,32765,-319,32765,-327,32765,-336,32765,-344,32765,-352,32765,-361,32764,-369,32764,-377,32764,-386,32764,-394,32764,-403,32764,-411,32764,-419,32764,-428,32764,-436,32763,-444,32763,-453,32763,-461,32763,-470,32763,-478,32763,-486,32763,-495,32763,-503,32763,-511,32762,-520,32762,-528,32762,-537,32762,-545,32762,-553,32762,-562,32762,-570,32761,-579,32761,-587,32761,-595,32761,-604,32761,-612,32761,-620,32760,-629,32760,-637,32760,-646,32760,-654,32760,-662,32760,-671,32759,-679,32759,-687,32759,-696,32759,-704,32759,-713,32759,-721,32758,-729,32758,-738,32758,-746,32758,-754,32758,-763,32757,-771,32757,-780,32757,-788,32757,-796,32757,-805,32756,-813,32756,-821,32756,-830,32756,-838,32756,-847,32755,-855,32755,-863,32755,-872,32755,-880,32754,-888,32754,-897,32754,-905,32754,-914,32754,-922,32753,-930,32753,-939,32753,-947,32753,-955,32752,-964,32752,-972,32752,-981,32752,-989,32751,-997,32751,-1006,32751,-1014,32751,-1022,32750,-1031,32750,-1039,32750,-1047,32750,-1056,32749,-1064,32749,-1073,32749,-1081,32748,-1089,32748,-1098,32748,-1106,32748,-1114,32747,-1123,32747,-1131,32747,-1140,32746,-1148,32746,-1156,32746,-1165,32746,-1173,32745,-1181,32745,-1190,32745,-1198,32744,-1207,32744,-1215,32744,-1223,32743,-1232,32743,-1240,32743,-1248,32742,-1257,32742,-1265,32742,-1274,32741,-1282,32741,-1290,32741,-1299,32740,-1307,32740,-1315,32740,-1324,32739,-1332,32739,-1340,32739,-1349,32738,-1357,32738,-1366,32738,-1374,32737,-1382,32737,-1391,32737,-1399,32736,-1407,32736,-1416,32736,-1424,32735,-1433,32735,-1441,32734,-1449,32734,-1458,32734,-1466,32733,-1474,32733,-1483,32733,-1491,32732,-1500,32732,-1508,32731,-1516,32731,-1525,32731,-1533,32730,-1541,32730,-1550,32729,-1558,32729,-1566,32729,-1575,32728,-1583,32728,-1592,32727,-1600,32727,-1608,32727,-1617,32726,-1625,32726,-1633,32725,-1642,32725,-1650,32725,-1659,32724,-1667,32724,-1675,32723,-1684,32723,-1692,32722,-1700,32722,-1709,32722,-1717,32721,-1725,32721,-1734,32720,-1742,32720,-1751,32719,-1759,32719,-1767,32718,-1776,32718,-1784,32717,-1792,32717,-1801,32717,-1809,32716,-1817,32716,-1826,32715,-1834,32715,-1843,32714,-1851,32714,-1859,32713,-1868,32713,-1876,32712,-1884,32712,-1893,32711,-1901,32711,-1909,32710,-1918,32710,-1926,32709,-1935,32709,-1943,32708,-1951,32708,-1960,32707,-1968,32707,-1976,32706,-1985,32706,-1993,32705,-2001,32705,-2010,32704,-2018,32704,-2027,32703,-2035,32703,-2043,32702,-2052,32702,-2060,32701,-2068,32701,-2077,32700,-2085,32700,-2093,32699,-2102,32699,-2110,32698,-2118,32697,-2127,32697,-2135,32696,-2144,32696,-2152,32695,-2160,32695,-2169,32694,-2177,32694,-2185,32693,-2194,32692,-2202,32692,-2210,32691,-2219,32691,-2227,32690,-2236,32690,-2244,32689,-2252,32688,-2261,32688,-2269,32687,-2277,32687,-2286,32686,-2294,32686,-2302,32685,-2311,32684,-2319,32684,-2327,32683,-2336,32683,-2344,32682,-2353,32681,-2361,32681,-2369,32680,-2378,32680,-2386,32679,-2394,32678,-2403,32678,-2411,32677,-2419,32676,-2428,32676,-2436,32675,-2444,32675,-2453,32674,-2461,32673,-2469,32673,-2478,32672,-2486,32671,-2495,32671,-2503,32670,-2511,32670,-2520,32669,-2528,32668,-2536,32668,-2545,32667,-2553,32666,-2561,32666,-2570,32665,-2578,32664,-2586,32664,-2595,32663,-2603,32662,-2611,32662,-2620,32661,-2628,32660,-2637,32660,-2645,32659,-2653,32658,-2662,32658,-2670,32657,-2678,32656,-2687,32656,-2695,32655,-2703,32654,-2712,32653,-2720,32653,-2728,32652,-2737,32651,-2745,32651,-2753,32650,-2762,32649,-2770,32649,-2778,32648,-2787,32647,-2795,32646,-2803,32646,-2812,32645,-2820,32644,-2829,32644,-2837,32643,-2845,32642,-2854,32641,-2862,32641,-2870,32640,-2879,32639,-2887,32638,-2895,32638,-2904,32637,-2912,32636,-2920,32635,-2929,32635,-2937,32634,-2945,32633,-2954,32632,-2962,32632,-2970,32631,-2979,32630,-2987,32629,-2995,32629,-3004,32628,-3012,32627,-3020,32626,-3029,32625,-3037,32625,-3045,32624,-3054,32623,-3062,32622,-3070,32622,-3079,32621,-3087,32620,-3095,32619,-3104,32618,-3112,32618,-3121,32617,-3129,32616,-3137,32615,-3146,32614,-3154,32614,-3162,32613,-3171,32612,-3179,32611,-3187,32610,-3196,32610,-3204,32609,-3212,32608,-3221,32607,-3229,32606,-3237,32605,-3246,32605,-3254,32604,-3262,32603,-3271,32602,-3279,32601,-3287,32600,-3296,32600,-3304,32599,-3312,32598,-3321,32597,-3329,32596,-3337,32595,-3346,32594,-3354,32594,-3362,32593,-3371,32592,-3379,32591,-3387,32590,-3396,32589,-3404,32588,-3412,32588,-3421,32587,-3429,32586,-3437,32585,-3446,32584,-3454,32583,-3462,32582,-3471,32581,-3479,32580,-3487,32580,-3496,32579,-3504,32578,-3512,32577,-3521,32576,-3529,32575,-3537,32574,-3546,32573,-3554,32572,-3562,32571,-3571,32571,-3579,32570,-3587,32569,-3595,32568,-3604,32567,-3612,32566,-3620,32565,-3629,32564,-3637,32563,-3645,32562,-3654,32561,-3662,32560,-3670,32559,-3679,32558,-3687,32558,-3695,32557,-3704,32556,-3712,32555,-3720,32554,-3729,32553,-3737,32552,-3745,32551,-3754,32550,-3762,32549,-3770,32548,-3779,32547,-3787,32546,-3795,32545,-3804,32544,-3812,32543,-3820,32542,-3829,32541,-3837,32540,-3845,32539,-3854,32538,-3862,32537,-3870,32536,-3878,32535,-3887,32534,-3895,32533,-3903,32532,-3912,32531,-3920,32530,-3928,32529,-3937,32528,-3945,32527,-3953,32526,-3962,32525,-3970,32524,-3978,32523,-3987,32522,-3995,32521,-4003,32520,-4012,32519,-4020,32518,-4028,32517,-4036,32516,-4045,32515,-4053,32514,-4061,32513,-4070,32512,-4078,32511,-4086,32510,-4095,32509,-4103,32508,-4111,32507,-4120,32506,-4128,32504,-4136,32503,-4145,32502,-4153,32501,-4161,32500,-4169,32499,-4178,32498,-4186,32497,-4194,32496,-4203,32495,-4211,32494,-4219,32493,-4228,32492,-4236,32491,-4244,32489,-4253,32488,-4261,32487,-4269,32486,-4277,32485,-4286,32484,-4294,32483,-4302,32482,-4311,32481,-4319,32480,-4327,32478,-4336,32477,-4344,32476,-4352,32475,-4360,32474,-4369,32473,-4377,32472,-4385,32471,-4394,32470,-4402,32468,-4410,32467,-4419,32466,-4427,32465,-4435,32464,-4444,32463,-4452,32462,-4460,32460,-4468,32459,-4477,32458,-4485,32457,-4493,32456,-4502,32455,-4510,32454,-4518,32452,-4526,32451,-4535,32450,-4543,32449,-4551,32448,-4560,32447,-4568,32445,-4576,32444,-4585,32443,-4593,32442,-4601,32441,-4609,32440,-4618,32438,-4626,32437,-4634,32436,-4643,32435,-4651,32434,-4659,32432,-4667,32431,-4676,32430,-4684,32429,-4692,32428,-4701,32426,-4709,32425,-4717,32424,-4726,32423,-4734,32422,-4742,32420,-4750,32419,-4759,32418,-4767,32417,-4775,32416,-4784,32414,-4792,32413,-4800,32412,-4808,32411,-4817,32409,-4825,32408,-4833,32407,-4842,32406,-4850,32404,-4858,32403,-4866,32402,-4875,32401,-4883,32399,-4891,32398,-4900,32397,-4908,32396,-4916,32394,-4924,32393,-4933,32392,-4941,32391,-4949,32389,-4958,32388,-4966,32387,-4974,32386,-4982,32384,-4991,32383,-4999,32382,-5007,32380,-5015,32379,-5024,32378,-5032,32377,-5040,32375,-5049,32374,-5057,32373,-5065,32371,-5073,32370,-5082,32369,-5090,32368,-5098,32366,-5107,32365,-5115,32364,-5123,32362,-5131,32361,-5140,32360,-5148,32358,-5156,32357,-5164,32356,-5173,32354,-5181,32353,-5189,32352,-5198,32350,-5206,32349,-5214,32348,-5222,32346,-5231,32345,-5239,32344,-5247,32342,-5255,32341,-5264,32340,-5272,32338,-5280,32337,-5288,32336,-5297,32334,-5305,32333,-5313,32332,-5322,32330,-5330,32329,-5338,32327,-5346,32326,-5355,32325,-5363,32323,-5371,32322,-5379,32321,-5388,32319,-5396,32318,-5404,32316,-5412,32315,-5421,32314,-5429,32312,-5437,32311,-5446,32310,-5454,32308,-5462,32307,-5470,32305,-5479,32304,-5487,32303,-5495,32301,-5503,32300,-5512,32298,-5520,32297,-5528,32295,-5536,32294,-5545,32293,-5553,32291,-5561,32290,-5569,32288,-5578,32287,-5586,32286,-5594,32284,-5602,32283,-5611,32281,-5619,32280,-5627,32278,-5635,32277,-5644,32275,-5652,32274,-5660,32273,-5668,32271,-5677,32270,-5685,32268,-5693,32267,-5701,32265,-5710,32264,-5718,32262,-5726,32261,-5734,32259,-5743,32258,-5751,32256,-5759,32255,-5767,32254,-5776,32252,-5784,32251,-5792,32249,-5800,32248,-5809,32246,-5817,32245,-5825,32243,-5833,32242,-5842,32240,-5850,32239,-5858,32237,-5866,32236,-5875,32234,-5883,32233,-5891,32231,-5899,32230,-5908,32228,-5916,32227,-5924,32225,-5932,32224,-5941,32222,-5949,32221,-5957,32219,-5965,32218,-5973,32216,-5982,32214,-5990,32213,-5998,32211,-6006,32210,-6015,32208,-6023,32207,-6031,32205,-6039,32204,-6048,32202,-6056,32201,-6064,32199,-6072,32197,-6081,32196,-6089,32194,-6097,32193,-6105,32191,-6113,32190,-6122,32188,-6130,32187,-6138,32185,-6146,32183,-6155,32182,-6163,32180,-6171,32179,-6179,32177,-6187,32176,-6196,32174,-6204,32172,-6212,32171,-6220,32169,-6229,32168,-6237,32166,-6245,32164,-6253,32163,-6262,32161,-6270,32160,-6278,32158,-6286,32156,-6294,32155,-6303,32153,-6311,32152,-6319,32150,-6327,32148,-6335,32147,-6344,32145,-6352,32143,-6360,32142,-6368,32140,-6377,32139,-6385,32137,-6393,32135,-6401,32134,-6409,32132,-6418,32130,-6426,32129,-6434,32127,-6442,32125,-6451,32124,-6459,32122,-6467,32120,-6475,32119,-6483,32117,-6492,32115,-6500,32114,-6508,32112,-6516,32110,-6524,32109,-6533,32107,-6541,32105,-6549,32104,-6557,32102,-6565,32100,-6574,32099,-6582,32097,-6590,32095,-6598,32094,-6607,32092,-6615,32090,-6623,32089,-6631,32087,-6639,32085,-6648,32084,-6656,32082,-6664,32080,-6672,32078,-6680,32077,-6689,32075,-6697,32073,-6705,32072,-6713,32070,-6721,32068,-6730,32066,-6738,32065,-6746,32063,-6754,32061,-6762,32059,-6771,32058,-6779,32056,-6787,32054,-6795,32053,-6803,32051,-6812,32049,-6820,32047,-6828,32046,-6836,32044,-6844,32042,-6852,32040,-6861,32039,-6869,32037,-6877,32035,-6885,32033,-6893,32032,-6902,32030,-6910,32028,-6918,32026,-6926,32024,-6934,32023,-6943,32021,-6951,32019,-6959,32017,-6967,32016,-6975,32014,-6983,32012,-6992,32010,-7000,32008,-7008,32007,-7016,32005,-7024,32003,-7033,32001,-7041,31999,-7049,31998,-7057,31996,-7065,31994,-7073,31992,-7082,31990,-7090,31989,-7098,31987,-7106,31985,-7114,31983,-7123,31981,-7131,31979,-7139,31978,-7147,31976,-7155,31974,-7163,31972,-7172,31970,-7180,31968,-7188,31967,-7196,31965,-7204,31963,-7212,31961,-7221,31959,-7229,31957,-7237,31956,-7245,31954,-7253,31952,-7262,31950,-7270,31948,-7278,31946,-7286,31944,-7294,31943,-7302,31941,-7311,31939,-7319,31937,-7327,31935,-7335,31933,-7343,31931,-7351,31929,-7359,31928,-7368,31926,-7376,31924,-7384,31922,-7392,31920,-7400,31918,-7408,31916,-7417,31914,-7425,31912,-7433,31911,-7441,31909,-7449,31907,-7457,31905,-7466,31903,-7474,31901,-7482,31899,-7490,31897,-7498,31895,-7506,31893,-7515,31891,-7523,31889,-7531,31888,-7539,31886,-7547,31884,-7555,31882,-7563,31880,-7572,31878,-7580,31876,-7588,31874,-7596,31872,-7604,31870,-7612,31868,-7620,31866,-7629,31864,-7637,31862,-7645,31860,-7653,31858,-7661,31856,-7669,31854,-7677,31853,-7686,31851,-7694,31849,-7702,31847,-7710,31845,-7718,31843,-7726,31841,-7734,31839,-7743,31837,-7751,31835,-7759,31833,-7767,31831,-7775,31829,-7783,31827,-7791,31825,-7800,31823,-7808,31821,-7816,31819,-7824,31817,-7832,31815,-7840,31813,-7848,31811,-7857,31809,-7865,31807,-7873,31805,-7881,31803,-7889,31801,-7897,31799,-7905,31797,-7913,31795,-7922,31793,-7930,31791,-7938,31789,-7946,31787,-7954,31785,-7962,31782,-7970,31780,-7978,31778,-7987,31776,-7995,31774,-8003,31772,-8011,31770,-8019,31768,-8027,31766,-8035,31764,-8043,31762,-8052,31760,-8060,31758,-8068,31756,-8076,31754,-8084,31752,-8092,31750,-8100,31748,-8108,31745,-8117,31743,-8125,31741,-8133,31739,-8141,31737,-8149,31735,-8157,31733,-8165,31731,-8173,31729,-8181,31727,-8190,31725,-8198,31723,-8206,31720,-8214,31718,-8222,31716,-8230,31714,-8238,31712,-8246,31710,-8254,31708,-8263,31706,-8271,31704,-8279,31701,-8287,31699,-8295,31697,-8303,31695,-8311,31693,-8319,31691,-8327,31689,-8335,31687,-8344,31684,-8352,31682,-8360,31680,-8368,31678,-8376,31676,-8384,31674,-8392,31672,-8400,31669,-8408,31667,-8416,31665,-8425,31663,-8433,31661,-8441,31659,-8449,31656,-8457,31654,-8465,31652,-8473,31650,-8481,31648,-8489,31646,-8497,31643,-8505,31641,-8514,31639,-8522,31637,-8530,31635,-8538,31633,-8546,31630,-8554,31628,-8562,31626,-8570,31624,-8578,31622,-8586,31619,-8594,31617,-8603,31615,-8611,31613,-8619,31611,-8627,31608,-8635,31606,-8643,31604,-8651,31602,-8659,31600,-8667,31597,-8675,31595,-8683,31593,-8691,31591,-8700,31588,-8708,31586,-8716,31584,-8724,31582,-8732,31580,-8740,31577,-8748,31575,-8756,31573,-8764,31571,-8772,31568,-8780,31566,-8788,31564,-8796,31562,-8804,31559,-8813,31557,-8821,31555,-8829,31553,-8837,31550,-8845,31548,-8853,31546,-8861,31544,-8869,31541,-8877,31539,-8885,31537,-8893,31534,-8901,31532,-8909,31530,-8917,31528,-8925,31525,-8933,31523,-8942,31521,-8950,31518,-8958,31516,-8966,31514,-8974,31512,-8982,31509,-8990,31507,-8998,31505,-9006,31502,-9014,31500,-9022,31498,-9030,31495,-9038,31493,-9046,31491,-9054,31489,-9062,31486,-9070,31484,-9078,31482,-9087,31479,-9095,31477,-9103,31475,-9111,31472,-9119,31470,-9127,31468,-9135,31465,-9143,31463,-9151,31461,-9159,31458,-9167,31456,-9175,31454,-9183,31451,-9191,31449,-9199,31446,-9207,31444,-9215,31442,-9223,31439,-9231,31437,-9239,31435,-9247,31432,-9255,31430,-9263,31428,-9271,31425,-9280,31423,-9288,31420,-9296,31418,-9304,31416,-9312,31413,-9320,31411,-9328,31409,-9336,31406,-9344,31404,-9352,31401,-9360,31399,-9368,31397,-9376,31394,-9384,31392,-9392,31389,-9400,31387,-9408,31385,-9416,31382,-9424,31380,-9432,31377,-9440,31375,-9448,31373,-9456,31370,-9464,31368,-9472,31365,-9480,31363,-9488,31360,-9496,31358,-9504,31356,-9512,31353,-9520,31351,-9528,31348,-9536,31346,-9544,31343,-9552,31341,-9560,31338,-9568,31336,-9576,31334,-9584,31331,-9592,31329,-9600,31326,-9608,31324,-9616,31321,-9624,31319,-9632,31316,-9640,31314,-9648,31311,-9656,31309,-9664,31307,-9672,31304,-9680,31302,-9688,31299,-9696,31297,-9704,31294,-9712,31292,-9720,31289,-9728,31287,-9736,31284,-9744,31282,-9752,31279,-9760,31277,-9768,31274,-9776,31272,-9784,31269,-9792,31267,-9800,31264,-9808,31262,-9816,31259,-9824,31257,-9832,31254,-9840,31252,-9848,31249,-9856,31247,-9864,31244,-9872,31242,-9880,31239,-9888,31236,-9896,31234,-9904,31231,-9912,31229,-9920,31226,-9928,31224,-9936,31221,-9944,31219,-9952,31216,-9960,31214,-9968,31211,-9976,31209,-9984,31206,-9992,31203,-10000,31201,-10008,31198,-10016,31196,-10024,31193,-10032,31191,-10040,31188,-10048,31185,-10056,31183,-10064,31180,-10072,31178,-10080,31175,-10088,31173,-10096,31170,-10104,31167,-10112,31165,-10120,31162,-10128,31160,-10136,31157,-10144,31154,-10152,31152,-10160,31149,-10167,31147,-10175,31144,-10183,31141,-10191,31139,-10199,31136,-10207,31134,-10215,31131,-10223,31128,-10231,31126,-10239,31123,-10247,31121,-10255,31118,-10263,31115,-10271,31113,-10279,31110,-10287,31107,-10295,31105,-10303,31102,-10311,31100,-10319,31097,-10327,31094,-10335,31092,-10343,31089,-10350,31086,-10358,31084,-10366,31081,-10374,31078,-10382,31076,-10390,31073,-10398,31070,-10406,31068,-10414,31065,-10422,31062,-10430,31060,-10438,31057,-10446,31054,-10454,31052,-10462,31049,-10470,31046,-10478,31044,-10485,31041,-10493,31038,-10501,31036,-10509,31033,-10517,31030,-10525,31028,-10533,31025,-10541,31022,-10549,31019,-10557,31017,-10565,31014,-10573,31011,-10581,31009,-10589,31006,-10597,31003,-10604,31001,-10612,30998,-10620,30995,-10628,30992,-10636,30990,-10644,30987,-10652,30984,-10660,30981,-10668,30979,-10676,30976,-10684,30973,-10692,30971,-10700,30968,-10707,30965,-10715,30962,-10723,30960,-10731,30957,-10739,30954,-10747,30951,-10755,30949,-10763,30946,-10771,30943,-10779,30940,-10787,30938,-10795,30935,-10802,30932,-10810,30929,-10818,30927,-10826,30924,-10834,30921,-10842,30918,-10850,30915,-10858,30913,-10866,30910,-10874,30907,-10881,30904,-10889,30902,-10897,30899,-10905,30896,-10913,30893,-10921,30890,-10929,30888,-10937,30885,-10945,30882,-10953,30879,-10960,30876,-10968,30874,-10976,30871,-10984,30868,-10992,30865,-11000,30862,-11008,30860,-11016,30857,-11024,30854,-11031,30851,-11039,30848,-11047,30845,-11055,30843,-11063,30840,-11071,30837,-11079,30834,-11087,30831,-11095,30828,-11102,30826,-11110,30823,-11118,30820,-11126,30817,-11134,30814,-11142,30811,-11150,30809,-11158,30806,-11165,30803,-11173,30800,-11181,30797,-11189,30794,-11197,30791,-11205,30788,-11213,30786,-11221,30783,-11228,30780,-11236,30777,-11244,30774,-11252,30771,-11260,30768,-11268,30766,-11276,30763,-11284,30760,-11291,30757,-11299,30754,-11307,30751,-11315,30748,-11323,30745,-11331,30742,-11339,30739,-11346,30737,-11354,30734,-11362,30731,-11370,30728,-11378,30725,-11386,30722,-11394,30719,-11401,30716,-11409,30713,-11417,30710,-11425,30707,-11433,30705,-11441,30702,-11449,30699,-11456,30696,-11464,30693,-11472,30690,-11480,30687,-11488,30684,-11496,30681,-11503,30678,-11511,30675,-11519,30672,-11527,30669,-11535,30666,-11543,30663,-11551,30660,-11558,30657,-11566,30655,-11574,30652,-11582,30649,-11590,30646,-11598,30643,-11605,30640,-11613,30637,-11621,30634,-11629,30631,-11637,30628,-11645,30625,-11652,30622,-11660,30619,-11668,30616,-11676,30613,-11684,30610,-11692,30607,-11699,30604,-11707,30601,-11715,30598,-11723,30595,-11731,30592,-11738,30589,-11746,30586,-11754,30583,-11762,30580,-11770,30577,-11778,30574,-11785,30571,-11793,30568,-11801,30565,-11809,30562,-11817,30559,-11824,30556,-11832,30553,-11840,30550,-11848,30547,-11856,30544,-11863,30541,-11871,30538,-11879,30535,-11887,30532,-11895,30528,-11903,30525,-11910,30522,-11918,30519,-11926,30516,-11934,30513,-11942,30510,-11949,30507,-11957,30504,-11965,30501,-11973,30498,-11981,30495,-11988,30492,-11996,30489,-12004,30486,-12012,30483,-12020,30480,-12027,30476,-12035,30473,-12043,30470,-12051,30467,-12058,30464,-12066,30461,-12074,30458,-12082,30455,-12090,30452,-12097,30449,-12105,30446,-12113,30442,-12121,30439,-12129,30436,-12136,30433,-12144,30430,-12152,30427,-12160,30424,-12167,30421,-12175,30418,-12183,30415,-12191,30411,-12199,30408,-12206,30405,-12214,30402,-12222,30399,-12230,30396,-12237,30393,-12245,30390,-12253,30386,-12261,30383,-12269,30380,-12276,30377,-12284,30374,-12292,30371,-12300,30368,-12307,30364,-12315,30361,-12323,30358,-12331,30355,-12338,30352,-12346,30349,-12354,30345,-12362,30342,-12369,30339,-12377,30336,-12385,30333,-12393,30330,-12400,30326,-12408,30323,-12416,30320,-12424,30317,-12431,30314,-12439,30311,-12447,30307,-12455,30304,-12462,30301,-12470,30298,-12478,30295,-12486,30291,-12493,30288,-12501,30285,-12509,30282,-12517,30279,-12524,30275,-12532,30272,-12540,30269,-12548,30266,-12555,30263,-12563,30259,-12571,30256,-12579,30253,-12586,30250,-12594,30247,-12602,30243,-12610,30240,-12617,30237,-12625,30234,-12633,30230,-12640,30227,-12648,30224,-12656,30221,-12664,30217,-12671,30214,-12679,30211,-12687,30208,-12695,30205,-12702,30201,-12710,30198,-12718,30195,-12725,30191,-12733,30188,-12741,30185,-12749,30182,-12756,30178,-12764,30175,-12772,30172,-12779,30169,-12787,30165,-12795,30162,-12803,30159,-12810,30156,-12818,30152,-12826,30149,-12833,30146,-12841,30142,-12849,30139,-12857,30136,-12864,30133,-12872,30129,-12880,30126,-12887,30123,-12895,30119,-12903,30116,-12910,30113,-12918,30109,-12926,30106,-12934,30103,-12941,30100,-12949,30096,-12957,30093,-12964,30090,-12972,30086,-12980,30083,-12987,30080,-12995,30076,-13003,30073,-13010,30070,-13018,30066,-13026,30063,-13034,30060,-13041,30056,-13049,30053,-13057,30050,-13064,30046,-13072,30043,-13080,30040,-13087,30036,-13095,30033,-13103,30030,-13110,30026,-13118,30023,-13126,30020,-13133,30016,-13141,30013,-13149,30009,-13156,30006,-13164,30003,-13172,29999,-13179,29996,-13187,29993,-13195,29989,-13202,29986,-13210,29983,-13218,29979,-13225,29976,-13233,29972,-13241,29969,-13248,29966,-13256,29962,-13264,29959,-13271,29955,-13279,29952,-13287,29949,-13294,29945,-13302,29942,-13310,29938,-13317,29935,-13325,29932,-13333,29928,-13340,29925,-13348,29921,-13356,29918,-13363,29915,-13371,29911,-13379,29908,-13386,29904,-13394,29901,-13401,29897,-13409,29894,-13417,29891,-13424,29887,-13432,29884,-13440,29880,-13447,29877,-13455,29873,-13463,29870,-13470,29866,-13478,29863,-13486,29860,-13493,29856,-13501,29853,-13508,29849,-13516,29846,-13524,29842,-13531,29839,-13539,29835,-13547,29832,-13554,29828,-13562,29825,-13569,29822,-13577,29818,-13585,29815,-13592,29811,-13600,29808,-13608,29804,-13615,29801,-13623,29797,-13630,29794,-13638,29790,-13646,29787,-13653,29783,-13661,29780,-13668,29776,-13676,29773,-13684,29769,-13691,29766,-13699,29762,-13707,29759,-13714,29755,-13722,29752,-13729,29748,-13737,29745,-13745,29741,-13752,29738,-13760,29734,-13767,29731,-13775,29727,-13783,29724,-13790,29720,-13798,29717,-13805,29713,-13813,29709,-13821,29706,-13828,29702,-13836,29699,-13843,29695,-13851,29692,-13859,29688,-13866,29685,-13874,29681,-13881,29678,-13889,29674,-13896,29670,-13904,29667,-13912,29663,-13919,29660,-13927,29656,-13934,29653,-13942,29649,-13950,29646,-13957,29642,-13965,29638,-13972,29635,-13980,29631,-13987,29628,-13995,29624,-14003,29621,-14010,29617,-14018,29613,-14025,29610,-14033,29606,-14040,29603,-14048,29599,-14056,29595,-14063,29592,-14071,29588,-14078,29585,-14086,29581,-14093,29577,-14101,29574,-14109,29570,-14116,29567,-14124,29563,-14131,29559,-14139,29556,-14146,29552,-14154,29548,-14161,29545,-14169,29541,-14177,29538,-14184,29534,-14192,29530,-14199,29527,-14207,29523,-14214,29519,-14222,29516,-14229,29512,-14237,29509,-14245,29505,-14252,29501,-14260,29498,-14267,29494,-14275,29490,-14282,29487,-14290,29483,-14297,29479,-14305,29476,-14312,29472,-14320,29468,-14327,29465,-14335,29461,-14343,29457,-14350,29454,-14358,29450,-14365,29446,-14373,29443,-14380,29439,-14388,29435,-14395,29432,-14403,29428,-14410,29424,-14418,29421,-14425,29417,-14433,29413,-14440,29410,-14448,29406,-14455,29402,-14463,29398,-14470,29395,-14478,29391,-14485,29387,-14493,29384,-14500,29380,-14508,29376,-14516,29372,-14523,29369,-14531,29365,-14538,29361,-14546,29358,-14553,29354,-14561,29350,-14568,29346,-14576,29343,-14583,29339,-14591,29335,-14598,29332,-14606,29328,-14613,29324,-14621,29320,-14628,29317,-14636,29313,-14643,29309,-14651,29305,-14658,29302,-14666,29298,-14673,29294,-14681,29290,-14688,29287,-14695,29283,-14703,29279,-14710,29275,-14718,29272,-14725,29268,-14733,29264,-14740,29260,-14748,29256,-14755,29253,-14763,29249,-14770,29245,-14778,29241,-14785,29238,-14793,29234,-14800,29230,-14808,29226,-14815,29222,-14823,29219,-14830,29215,-14838,29211,-14845,29207,-14853,29203,-14860,29200,-14867,29196,-14875,29192,-14882,29188,-14890,29184,-14897,29181,-14905,29177,-14912,29173,-14920,29169,-14927,29165,-14935,29162,-14942,29158,-14950,29154,-14957,29150,-14964,29146,-14972,29142,-14979,29139,-14987,29135,-14994,29131,-15002,29127,-15009,29123,-15017,29119,-15024,29116,-15031,29112,-15039,29108,-15046,29104,-15054,29100,-15061,29096,-15069,29092,-15076,29089,-15084,29085,-15091,29081,-15098,29077,-15106,29073,-15113,29069,-15121,29065,-15128,29062,-15136,29058,-15143,29054,-15150,29050,-15158,29046,-15165,29042,-15173,29038,-15180,29034,-15188,29031,-15195,29027,-15202,29023,-15210,29019,-15217,29015,-15225,29011,-15232,29007,-15239,29003,-15247,28999,-15254,28996,-15262,28992,-15269,28988,-15277,28984,-15284,28980,-15291,28976,-15299,28972,-15306,28968,-15314,28964,-15321,28960,-15328,28956,-15336,28953,-15343,28949,-15351,28945,-15358,28941,-15365,28937,-15373,28933,-15380,28929,-15388,28925,-15395,28921,-15402,28917,-15410,28913,-15417,28909,-15425,28905,-15432,28901,-15439,28897,-15447,28893,-15454,28890,-15462,28886,-15469,28882,-15476,28878,-15484,28874,-15491,28870,-15498,28866,-15506,28862,-15513,28858,-15521,28854,-15528,28850,-15535,28846,-15543,28842,-15550,28838,-15557,28834,-15565,28830,-15572,28826,-15580,28822,-15587,28818,-15594,28814,-15602,28810,-15609,28806,-15616,28802,-15624,28798,-15631,28794,-15639,28790,-15646,28786,-15653,28782,-15661,28778,-15668,28774,-15675,28770,-15683,28766,-15690,28762,-15697,28758,-15705,28754,-15712,28750,-15719,28746,-15727,28742,-15734,28738,-15741,28734,-15749,28730,-15756,28726,-15764,28722,-15771,28718,-15778,28714,-15786,28710,-15793,28706,-15800,28702,-15808,28698,-15815,28694,-15822,28690,-15830,28685,-15837,28681,-15844,28677,-15852,28673,-15859,28669,-15866,28665,-15874,28661,-15881,28657,-15888,28653,-15896,28649,-15903,28645,-15910,28641,-15918,28637,-15925,28633,-15932,28629,-15939,28625,-15947,28620,-15954,28616,-15961,28612,-15969,28608,-15976,28604,-15983,28600,-15991,28596,-15998,28592,-16005,28588,-16013,28584,-16020,28580,-16027,28575,-16035,28571,-16042,28567,-16049,28563,-16056,28559,-16064,28555,-16071,28551,-16078,28547,-16086,28543,-16093,28538,-16100,28534,-16108,28530,-16115,28526,-16122,28522,-16129,28518,-16137,28514,-16144,28510,-16151,28506,-16159,28501,-16166,28497,-16173,28493,-16180,28489,-16188,28485,-16195,28481,-16202,28477,-16210,28472,-16217,28468,-16224,28464,-16231,28460,-16239,28456,-16246,28452,-16253,28447,-16261,28443,-16268,28439,-16275,28435,-16282,28431,-16290,28427,-16297,28423,-16304,28418,-16311,28414,-16319,28410,-16326,28406,-16333,28402,-16340,28397,-16348,28393,-16355,28389,-16362,28385,-16369,28381,-16377,28377,-16384,28372,-16391,28368,-16399,28364,-16406,28360,-16413,28356,-16420,28351,-16428,28347,-16435,28343,-16442,28339,-16449,28335,-16456,28330,-16464,28326,-16471,28322,-16478,28318,-16485,28314,-16493,28309,-16500,28305,-16507,28301,-16514,28297,-16522,28292,-16529,28288,-16536,28284,-16543,28280,-16551,28275,-16558,28271,-16565,28267,-16572,28263,-16579,28259,-16587,28254,-16594,28250,-16601,28246,-16608,28242,-16616,28237,-16623,28233,-16630,28229,-16637,28225,-16644,28220,-16652,28216,-16659,28212,-16666,28208,-16673,28203,-16681,28199,-16688,28195,-16695,28190,-16702,28186,-16709,28182,-16717,28178,-16724,28173,-16731,28169,-16738,28165,-16745,28161,-16753,28156,-16760,28152,-16767,28148,-16774,28143,-16781,28139,-16789,28135,-16796,28131,-16803,28126,-16810,28122,-16817,28118,-16825,28113,-16832,28109,-16839,28105,-16846,28100,-16853,28096,-16860,28092,-16868,28087,-16875,28083,-16882,28079,-16889,28075,-16896,28070,-16904,28066,-16911,28062,-16918,28057,-16925,28053,-16932,28049,-16939,28044,-16947,28040,-16954,28036,-16961,28031,-16968,28027,-16975,28023,-16982,28018,-16990,28014,-16997,28009,-17004,28005,-17011,28001,-17018,27996,-17025,27992,-17033,27988,-17040,27983,-17047,27979,-17054,27975,-17061,27970,-17068,27966,-17075,27962,-17083,27957,-17090,27953,-17097,27948,-17104,27944,-17111,27940,-17118,27935,-17125,27931,-17133,27927,-17140,27922,-17147,27918,-17154,27913,-17161,27909,-17168,27905,-17175,27900,-17183,27896,-17190,27891,-17197,27887,-17204,27883,-17211,27878,-17218,27874,-17225,27869,-17233,27865,-17240,27861,-17247,27856,-17254,27852,-17261,27847,-17268,27843,-17275,27839,-17282,27834,-17289,27830,-17297,27825,-17304,27821,-17311,27816,-17318,27812,-17325,27808,-17332,27803,-17339,27799,-17346,27794,-17353,27790,-17361,27785,-17368,27781,-17375,27777,-17382,27772,-17389,27768,-17396,27763,-17403,27759,-17410,27754,-17417,27750,-17424,27745,-17432,27741,-17439,27736,-17446,27732,-17453,27728,-17460,27723,-17467,27719,-17474,27714,-17481,27710,-17488,27705,-17495,27701,-17502,27696,-17510,27692,-17517,27687,-17524,27683,-17531,27678,-17538,27674,-17545,27669,-17552,27665,-17559,27660,-17566,27656,-17573,27651,-17580,27647,-17587,27642,-17594,27638,-17601,27633,-17609,27629,-17616,27624,-17623,27620,-17630,27615,-17637,27611,-17644,27606,-17651,27602,-17658,27597,-17665,27593,-17672,27588,-17679,27584,-17686,27579,-17693,27575,-17700,27570,-17707,27566,-17714,27561,-17721,27557,-17728,27552,-17736,27548,-17743,27543,-17750,27538,-17757,27534,-17764,27529,-17771,27525,-17778,27520,-17785,27516,-17792,27511,-17799,27507,-17806,27502,-17813,27498,-17820,27493,-17827,27488,-17834,27484,-17841,27479,-17848,27475,-17855,27470,-17862,27466,-17869,27461,-17876,27456,-17883,27452,-17890,27447,-17897,27443,-17904,27438,-17911,27434,-17918,27429,-17925,27424,-17932,27420,-17939,27415,-17946,27411,-17953,27406,-17960,27401,-17967,27397,-17974,27392,-17981,27388,-17988,27383,-17995,27378,-18002,27374,-18009,27369,-18016,27365,-18023,27360,-18030,27355,-18037,27351,-18044,27346,-18051,27342,-18058,27337,-18065,27332,-18072,27328,-18079,27323,-18086,27319,-18093,27314,-18100,27309,-18107,27305,-18114,27300,-18121,27295,-18128,27291,-18135,27286,-18142,27281,-18149,27277,-18156,27272,-18163,27268,-18170,27263,-18177,27258,-18184,27254,-18191,27249,-18198,27244,-18205,27240,-18212,27235,-18219,27230,-18226,27226,-18233,27221,-18240,27216,-18247,27212,-18254,27207,-18261,27202,-18268,27198,-18274,27193,-18281,27188,-18288,27184,-18295,27179,-18302,27174,-18309,27170,-18316,27165,-18323,27160,-18330,27156,-18337,27151,-18344,27146,-18351,27141,-18358,27137,-18365,27132,-18372,27127,-18379,27123,-18386,27118,-18393,27113,-18399,27109,-18406,27104,-18413,27099,-18420,27094,-18427,27090,-18434,27085,-18441,27080,-18448,27076,-18455,27071,-18462,27066,-18469,27061,-18476,27057,-18483,27052,-18489,27047,-18496,27042,-18503,27038,-18510,27033,-18517,27028,-18524,27024,-18531,27019,-18538,27014,-18545,27009,-18552,27005,-18559,27000,-18565,26995,-18572,26990,-18579,26986,-18586,26981,-18593,26976,-18600,26971,-18607,26967,-18614,26962,-18621,26957,-18628,26952,-18634,26948,-18641,26943,-18648,26938,-18655,26933,-18662,26928,-18669,26924,-18676,26919,-18683,26914,-18690,26909,-18696,26905,-18703,26900,-18710,26895,-18717,26890,-18724,26885,-18731,26881,-18738,26876,-18745,26871,-18751,26866,-18758,26861,-18765,26857,-18772,26852,-18779,26847,-18786,26842,-18793,26837,-18799,26833,-18806,26828,-18813,26823,-18820,26818,-18827,26813,-18834,26809,-18841,26804,-18847,26799,-18854,26794,-18861,26789,-18868,26784,-18875,26780,-18882,26775,-18889,26770,-18895,26765,-18902,26760,-18909,26755,-18916,26751,-18923,26746,-18930,26741,-18936,26736,-18943,26731,-18950,26726,-18957,26722,-18964,26717,-18971,26712,-18977,26707,-18984,26702,-18991,26697,-18998,26692,-19005,26688,-19012,26683,-19018,26678,-19025,26673,-19032,26668,-19039,26663,-19046,26658,-19052,26654,-19059,26649,-19066,26644,-19073,26639,-19080,26634,-19087,26629,-19093,26624,-19100,26619,-19107,26615,-19114,26610,-19121,26605,-19127,26600,-19134,26595,-19141,26590,-19148,26585,-19155,26580,-19161,26575,-19168,26570,-19175,26566,-19182,26561,-19189,26556,-19195,26551,-19202,26546,-19209,26541,-19216,26536,-19222,26531,-19229,26526,-19236,26521,-19243,26516,-19250,26512,-19256,26507,-19263,26502,-19270,26497,-19277,26492,-19283,26487,-19290,26482,-19297,26477,-19304,26472,-19311,26467,-19317,26462,-19324,26457,-19331,26452,-19338,26447,-19344,26442,-19351,26437,-19358,26433,-19365,26428,-19371,26423,-19378,26418,-19385,26413,-19392,26408,-19398,26403,-19405,26398,-19412,26393,-19419,26388,-19425,26383,-19432,26378,-19439,26373,-19446,26368,-19452,26363,-19459,26358,-19466,26353,-19473,26348,-19479,26343,-19486,26338,-19493,26333,-19500,26328,-19506,26323,-19513,26318,-19520,26313,-19527,26308,-19533,26303,-19540,26298,-19547,26293,-19553,26288,-19560,26283,-19567,26278,-19574,26273,-19580,26268,-19587,26263,-19594,26258,-19600,26253,-19607,26248,-19614,26243,-19621,26238,-19627,26233,-19634,26228,-19641,26223,-19647,26218,-19654,26213,-19661,26208,-19668,26203,-19674,26198,-19681,26193,-19688,26188,-19694,26183,-19701,26178,-19708,26173,-19714,26168,-19721,26163,-19728,26158,-19734,26153,-19741,26148,-19748,26142,-19755,26137,-19761,26132,-19768,26127,-19775,26122,-19781,26117,-19788,26112,-19795,26107,-19801,26102,-19808,26097,-19815,26092,-19821,26087,-19828,26082,-19835,26077,-19841,26072,-19848,26067,-19855,26061,-19861,26056,-19868,26051,-19875,26046,-19881,26041,-19888,26036,-19895,26031,-19901,26026,-19908,26021,-19915,26016,-19921,26011,-19928,26006,-19934,26000,-19941,25995,-19948,25990,-19954,25985,-19961,25980,-19968,25975,-19974,25970,-19981,25965,-19988,25960,-19994,25954,-20001,25949,-20008,25944,-20014,25939,-20021,25934,-20027,25929,-20034,25924,-20041,25919,-20047,25913,-20054,25908,-20061,25903,-20067,25898,-20074,25893,-20080,25888,-20087,25883,-20094,25878,-20100,25872,-20107,25867,-20114,25862,-20120,25857,-20127,25852,-20133,25847,-20140,25842,-20147,25836,-20153,25831,-20160,25826,-20166,25821,-20173,25816,-20180,25811,-20186,25805,-20193,25800,-20199,25795,-20206,25790,-20213,25785,-20219,25780,-20226,25774,-20232,25769,-20239,25764,-20246,25759,-20252,25754,-20259,25749,-20265,25743,-20272,25738,-20278,25733,-20285,25728,-20292,25723,-20298,25717,-20305,25712,-20311,25707,-20318,25702,-20324,25697,-20331,25691,-20338,25686,-20344,25681,-20351,25676,-20357,25671,-20364,25665,-20370,25660,-20377,25655,-20384,25650,-20390,25645,-20397,25639,-20403,25634,-20410,25629,-20416,25624,-20423,25619,-20429,25613,-20436,25608,-20443,25603,-20449,25598,-20456,25592,-20462,25587,-20469,25582,-20475,25577,-20482,25571,-20488,25566,-20495,25561,-20501,25556,-20508,25550,-20514,25545,-20521,25540,-20528,25535,-20534,25529,-20541,25524,-20547,25519,-20554,25514,-20560,25508,-20567,25503,-20573,25498,-20580,25493,-20586,25487,-20593,25482,-20599,25477,-20606,25472,-20612,25466,-20619,25461,-20625,25456,-20632,25451,-20638,25445,-20645,25440,-20651,25435,-20658,25429,-20664,25424,-20671,25419,-20677,25414,-20684,25408,-20690,25403,-20697,25398,-20703,25392,-20710,25387,-20716,25382,-20723,25376,-20729,25371,-20736,25366,-20742,25361,-20749,25355,-20755,25350,-20762,25345,-20768,25339,-20775,25334,-20781,25329,-20788,25323,-20794,25318,-20801,25313,-20807,25307,-20814,25302,-20820,25297,-20826,25291,-20833,25286,-20839,25281,-20846,25276,-20852,25270,-20859,25265,-20865,25260,-20872,25254,-20878,25249,-20885,25243,-20891,25238,-20898,25233,-20904,25227,-20910,25222,-20917,25217,-20923,25211,-20930,25206,-20936,25201,-20943,25195,-20949,25190,-20956,25185,-20962,25179,-20968,25174,-20975,25169,-20981,25163,-20988,25158,-20994,25152,-21001,25147,-21007,25142,-21013,25136,-21020,25131,-21026,25126,-21033,25120,-21039,25115,-21046,25109,-21052,25104,-21058,25099,-21065,25093,-21071,25088,-21078,25083,-21084,25077,-21091,25072,-21097,25066,-21103,25061,-21110,25056,-21116,25050,-21123,25045,-21129,25039,-21135,25034,-21142,25029,-21148,25023,-21155,25018,-21161,25012,-21167,25007,-21174,25001,-21180,24996,-21187,24991,-21193,24985,-21199,24980,-21206,24974,-21212,24969,-21218,24964,-21225,24958,-21231,24953,-21238,24947,-21244,24942,-21250,24936,-21257,24931,-21263,24926,-21269,24920,-21276,24915,-21282,24909,-21289,24904,-21295,24898,-21301,24893,-21308,24887,-21314,24882,-21320,24877,-21327,24871,-21333,24866,-21340,24860,-21346,24855,-21352,24849,-21359,24844,-21365,24838,-21371,24833,-21378,24827,-21384,24822,-21390,24816,-21397,24811,-21403,24805,-21409,24800,-21416,24795,-21422,24789,-21428,24784,-21435,24778,-21441,24773,-21447,24767,-21454,24762,-21460,24756,-21466,24751,-21473,24745,-21479,24740,-21485,24734,-21492,24729,-21498,24723,-21504,24718,-21511,24712,-21517,24707,-21523,24701,-21530,24696,-21536,24690,-21542,24685,-21549,24679,-21555,24674,-21561,24668,-21567,24663,-21574,24657,-21580,24652,-21586,24646,-21593,24641,-21599,24635,-21605,24630,-21612,24624,-21618,24618,-21624,24613,-21630,24607,-21637,24602,-21643,24596,-21649,24591,-21656,24585,-21662,24580,-21668,24574,-21674,24569,-21681,24563,-21687,24558,-21693,24552,-21700,24546,-21706,24541,-21712,24535,-21718,24530,-21725,24524,-21731,24519,-21737,24513,-21744,24508,-21750,24502,-21756,24496,-21762,24491,-21769,24485,-21775,24480,-21781,24474,-21787,24469,-21794,24463,-21800,24457,-21806,24452,-21812,24446,-21819,24441,-21825,24435,-21831,24430,-21837,24424,-21844,24418,-21850,24413,-21856,24407,-21862,24402,-21869,24396,-21875,24390,-21881,24385,-21887,24379,-21894,24374,-21900,24368,-21906,24362,-21912,24357,-21918,24351,-21925,24346,-21931,24340,-21937,24334,-21943,24329,-21950,24323,-21956,24318,-21962,24312,-21968,24306,-21974,24301,-21981,24295,-21987,24289,-21993,24284,-21999,24278,-22005,24273,-22012,24267,-22018,24261,-22024,24256,-22030,24250,-22036,24244,-22043,24239,-22049,24233,-22055,24228,-22061,24222,-22067,24216,-22074,24211,-22080,24205,-22086,24199,-22092,24194,-22098,24188,-22105,24182,-22111,24177,-22117,24171,-22123,24165,-22129,24160,-22136,24154,-22142,24148,-22148,24143,-22154,24137,-22160,24131,-22166,24126,-22173,24120,-22179,24114,-22185,24109,-22191,24103,-22197,24097,-22203,24092,-22210,24086,-22216,24080,-22222,24075,-22228,24069,-22234,24063,-22240,24058,-22246,24052,-22253,24046,-22259,24041,-22265,24035,-22271,24029,-22277,24023,-22283,24018,-22289,24012,-22296,24006,-22302,24001,-22308,23995,-22314,23989,-22320,23984,-22326,23978,-22332,23972,-22339,23966,-22345,23961,-22351,23955,-22357,23949,-22363,23944,-22369,23938,-22375,23932,-22381,23926,-22388,23921,-22394,23915,-22400,23909,-22406,23903,-22412,23898,-22418,23892,-22424,23886,-22430,23881,-22436,23875,-22443,23869,-22449,23863,-22455,23858,-22461,23852,-22467,23846,-22473,23840,-22479,23835,-22485,23829,-22491,23823,-22497,23817,-22504,23812,-22510,23806,-22516,23800,-22522,23794,-22528,23789,-22534,23783,-22540,23777,-22546,23771,-22552,23766,-22558,23760,-22564,23754,-22570,23748,-22576,23742,-22583,23737,-22589,23731,-22595,23725,-22601,23719,-22607,23714,-22613,23708,-22619,23702,-22625,23696,-22631,23690,-22637,23685,-22643,23679,-22649,23673,-22655,23667,-22661,23661,-22667,23656,-22673,23650,-22679,23644,-22686,23638,-22692,23632,-22698,23627,-22704,23621,-22710,23615,-22716,23609,-22722,23603,-22728,23598,-22734,23592,-22740,23586,-22746,23580,-22752,23574,-22758,23569,-22764,23563,-22770,23557,-22776,23551,-22782,23545,-22788,23539,-22794,23534,-22800,23528,-22806,23522,-22812,23516,-22818,23510,-22824,23504,-22830,23499,-22836,23493,-22842,23487,-22848,23481,-22854,23475,-22860,23469,-22866,23464,-22872,23458,-22878,23452,-22884,23446,-22890,23440,-22896,23434,-22902,23428,-22908,23423,-22914,23417,-22920,23411,-22926,23405,-22932,23399,-22938,23393,-22944,23387,-22950,23382,-22956,23376,-22962,23370,-22968,23364,-22974,23358,-22980,23352,-22986,23346,-22992,23340,-22998,23335,-23004,23329,-23010,23323,-23016,23317,-23022,23311,-23028,23305,-23034,23299,-23040,23293,-23046,23287,-23051,23282,-23057,23276,-23063,23270,-23069,23264,-23075,23258,-23081,23252,-23087,23246,-23093,23240,-23099,23234,-23105,23228,-23111,23223,-23117,23217,-23123,23211,-23129,23205,-23135,23199,-23141,23193,-23147,23187,-23152,23181,-23158,23175,-23164,23169,-23170,23163,-23176,23157,-23182,23151,-23188,23146,-23194,23140,-23200,23134,-23206,23128,-23212,23122,-23218,23116,-23224,23110,-23229,23104,-23235,23098,-23241,23092,-23247,23086,-23253,23080,-23259,23074,-23265,23068,-23271,23062,-23277,23056,-23283,23050,-23288,23045,-23294,23039,-23300,23033,-23306,23027,-23312,23021,-23318,23015,-23324,23009,-23330,23003,-23336,22997,-23341,22991,-23347,22985,-23353,22979,-23359,22973,-23365,22967,-23371,22961,-23377,22955,-23383,22949,-23388,22943,-23394,22937,-23400,22931,-23406,22925,-23412,22919,-23418,22913,-23424,22907,-23429,22901,-23435,22895,-23441,22889,-23447,22883,-23453,22877,-23459,22871,-23465,22865,-23470,22859,-23476,22853,-23482,22847,-23488,22841,-23494,22835,-23500,22829,-23505,22823,-23511,22817,-23517,22811,-23523,22805,-23529,22799,-23535,22793,-23540,22787,-23546,22781,-23552,22775,-23558,22769,-23564,22763,-23570,22757,-23575,22751,-23581,22745,-23587,22739,-23593,22733,-23599,22727,-23604,22721,-23610,22715,-23616,22709,-23622,22703,-23628,22697,-23633,22691,-23639,22685,-23645,22678,-23651,22672,-23657,22666,-23662,22660,-23668,22654,-23674,22648,-23680,22642,-23686,22636,-23691,22630,-23697,22624,-23703,22618,-23709,22612,-23715,22606,-23720,22600,-23726,22594,-23732,22588,-23738,22582,-23743,22575,-23749,22569,-23755,22563,-23761,22557,-23767,22551,-23772,22545,-23778,22539,-23784,22533,-23790,22527,-23795,22521,-23801,22515,-23807,22509,-23813,22503,-23818,22496,-23824,22490,-23830,22484,-23836,22478,-23841,22472,-23847,22466,-23853,22460,-23859,22454,-23864,22448,-23870,22442,-23876,22435,-23882,22429,-23887,22423,-23893,22417,-23899,22411,-23904,22405,-23910,22399,-23916,22393,-23922,22387,-23927,22380,-23933,22374,-23939,22368,-23945,22362,-23950,22356,-23956,22350,-23962,22344,-23967,22338,-23973,22331,-23979,22325,-23985,22319,-23990,22313,-23996,22307,-24002,22301,-24007,22295,-24013,22288,-24019,22282,-24024,22276,-24030,22270,-24036,22264,-24042,22258,-24047,22252,-24053,22245,-24059,22239,-24064,22233,-24070,22227,-24076,22221,-24081,22215,-24087,22209,-24093,22202,-24098,22196,-24104,22190,-24110,22184,-24115,22178,-24121,22172,-24127,22165,-24132,22159,-24138,22153,-24144,22147,-24149,22141,-24155,22135,-24161,22128,-24166,22122,-24172,22116,-24178,22110,-24183,22104,-24189,22097,-24195,22091,-24200,22085,-24206,22079,-24212,22073,-24217,22066,-24223,22060,-24229,22054,-24234,22048,-24240,22042,-24245,22035,-24251,22029,-24257,22023,-24262,22017,-24268,22011,-24274,22004,-24279,21998,-24285,21992,-24290,21986,-24296,21980,-24302,21973,-24307,21967,-24313,21961,-24319,21955,-24324,21949,-24330,21942,-24335,21936,-24341,21930,-24347,21924,-24352,21917,-24358,21911,-24363,21905,-24369,21899,-24375,21893,-24380,21886,-24386,21880,-24391,21874,-24397,21868,-24403,21861,-24408,21855,-24414,21849,-24419,21843,-24425,21836,-24431,21830,-24436,21824,-24442,21818,-24447,21811,-24453,21805,-24458,21799,-24464,21793,-24470,21786,-24475,21780,-24481,21774,-24486,21768,-24492,21761,-24497,21755,-24503,21749,-24509,21743,-24514,21736,-24520,21730,-24525,21724,-24531,21717,-24536,21711,-24542,21705,-24547,21699,-24553,21692,-24559,21686,-24564,21680,-24570,21673,-24575,21667,-24581,21661,-24586,21655,-24592,21648,-24597,21642,-24603,21636,-24608,21629,-24614,21623,-24619,21617,-24625,21611,-24631,21604,-24636,21598,-24642,21592,-24647,21585,-24653,21579,-24658,21573,-24664,21566,-24669,21560,-24675,21554,-24680,21548,-24686,21541,-24691,21535,-24697,21529,-24702,21522,-24708,21516,-24713,21510,-24719,21503,-24724,21497,-24730,21491,-24735,21484,-24741,21478,-24746,21472,-24752,21465,-24757,21459,-24763,21453,-24768,21446,-24774,21440,-24779,21434,-24785,21427,-24790,21421,-24796,21415,-24801,21408,-24806,21402,-24812,21396,-24817,21389,-24823,21383,-24828,21377,-24834,21370,-24839,21364,-24845,21358,-24850,21351,-24856,21345,-24861,21339,-24867,21332,-24872,21326,-24878,21319,-24883,21313,-24888,21307,-24894,21300,-24899,21294,-24905,21288,-24910,21281,-24916,21275,-24921,21268,-24927,21262,-24932,21256,-24937,21249,-24943,21243,-24948,21237,-24954,21230,-24959,21224,-24965,21217,-24970,21211,-24975,21205,-24981,21198,-24986,21192,-24992,21186,-24997,21179,-25002,21173,-25008,21166,-25013,21160,-25019,21154,-25024,21147,-25030,21141,-25035,21134,-25040,21128,-25046,21122,-25051,21115,-25057,21109,-25062,21102,-25067,21096,-25073,21090,-25078,21083,-25084,21077,-25089,21070,-25094,21064,-25100,21057,-25105,21051,-25110,21045,-25116,21038,-25121,21032,-25127,21025,-25132,21019,-25137,21012,-25143,21006,-25148,21000,-25153,20993,-25159,20987,-25164,20980,-25170,20974,-25175,20967,-25180,20961,-25186,20955,-25191,20948,-25196,20942,-25202,20935,-25207,20929,-25212,20922,-25218,20916,-25223,20909,-25228,20903,-25234,20897,-25239,20890,-25244,20884,-25250,20877,-25255,20871,-25261,20864,-25266,20858,-25271,20851,-25277,20845,-25282,20838,-25287,20832,-25292,20825,-25298,20819,-25303,20813,-25308,20806,-25314,20800,-25319,20793,-25324,20787,-25330,20780,-25335,20774,-25340,20767,-25346,20761,-25351,20754,-25356,20748,-25362,20741,-25367,20735,-25372,20728,-25377,20722,-25383,20715,-25388,20709,-25393,20702,-25399,20696,-25404,20689,-25409,20683,-25415,20676,-25420,20670,-25425,20663,-25430,20657,-25436,20650,-25441,20644,-25446,20637,-25452,20631,-25457,20624,-25462,20618,-25467,20611,-25473,20605,-25478,20598,-25483,20592,-25488,20585,-25494,20579,-25499,20572,-25504,20566,-25509,20559,-25515,20553,-25520,20546,-25525,20540,-25530,20533,-25536,20527,-25541,20520,-25546,20513,-25551,20507,-25557,20500,-25562,20494,-25567,20487,-25572,20481,-25578,20474,-25583,20468,-25588,20461,-25593,20455,-25599,20448,-25604,20442,-25609,20435,-25614,20428,-25620,20422,-25625,20415,-25630,20409,-25635,20402,-25640,20396,-25646,20389,-25651,20383,-25656,20376,-25661,20369,-25666,20363,-25672,20356,-25677,20350,-25682,20343,-25687,20337,-25692,20330,-25698,20323,-25703,20317,-25708,20310,-25713,20304,-25718,20297,-25724,20291,-25729,20284,-25734,20277,-25739,20271,-25744,20264,-25750,20258,-25755,20251,-25760,20245,-25765,20238,-25770,20231,-25775,20225,-25781,20218,-25786,20212,-25791,20205,-25796,20198,-25801,20192,-25806,20185,-25812,20179,-25817,20172,-25822,20165,-25827,20159,-25832,20152,-25837,20146,-25843,20139,-25848,20132,-25853,20126,-25858,20119,-25863,20113,-25868,20106,-25873,20099,-25879,20093,-25884,20086,-25889,20079,-25894,20073,-25899,20066,-25904,20060,-25909,20053,-25914,20046,-25920,20040,-25925,20033,-25930,20026,-25935,20020,-25940,20013,-25945,20007,-25950,20000,-25955,19993,-25961,19987,-25966,19980,-25971,19973,-25976,19967,-25981,19960,-25986,19953,-25991,19947,-25996,19940,-26001,19933,-26007,19927,-26012,19920,-26017,19914,-26022,19907,-26027,19900,-26032,19894,-26037,19887,-26042,19880,-26047,19874,-26052,19867,-26057,19860,-26062,19854,-26068,19847,-26073,19840,-26078,19834,-26083,19827,-26088,19820,-26093,19814,-26098,19807,-26103,19800,-26108,19794,-26113,19787,-26118,19780,-26123,19774,-26128,19767,-26133,19760,-26138,19754,-26143,19747,-26149,19740,-26154,19733,-26159,19727,-26164,19720,-26169,19713,-26174,19707,-26179,19700,-26184,19693,-26189,19687,-26194,19680,-26199,19673,-26204,19667,-26209,19660,-26214,19653,-26219,19646,-26224,19640,-26229,19633,-26234,19626,-26239,19620,-26244,19613,-26249,19606,-26254,19599,-26259,19593,-26264,19586,-26269,19579,-26274,19573,-26279,19566,-26284,19559,-26289,19552,-26294,19546,-26299,19539,-26304,19532,-26309,19526,-26314,19519,-26319,19512,-26324,19505,-26329,19499,-26334,19492,-26339,19485,-26344,19478,-26349,19472,-26354,19465,-26359,19458,-26364,19451,-26369,19445,-26374,19438,-26379,19431,-26384,19424,-26389,19418,-26394,19411,-26399,19404,-26404,19397,-26409,19391,-26414,19384,-26419,19377,-26424,19370,-26429,19364,-26434,19357,-26438,19350,-26443,19343,-26448,19337,-26453,19330,-26458,19323,-26463,19316,-26468,19310,-26473,19303,-26478,19296,-26483,19289,-26488,19282,-26493,19276,-26498,19269,-26503,19262,-26508,19255,-26513,19249,-26517,19242,-26522,19235,-26527,19228,-26532,19221,-26537,19215,-26542,19208,-26547,19201,-26552,19194,-26557,19188,-26562,19181,-26567,19174,-26571,19167,-26576,19160,-26581,19154,-26586,19147,-26591,19140,-26596,19133,-26601,19126,-26606,19120,-26611,19113,-26616,19106,-26620,19099,-26625,19092,-26630,19086,-26635,19079,-26640,19072,-26645,19065,-26650,19058,-26655,19051,-26659,19045,-26664,19038,-26669,19031,-26674,19024,-26679,19017,-26684,19011,-26689,19004,-26693,18997,-26698,18990,-26703,18983,-26708,18976,-26713,18970,-26718,18963,-26723,18956,-26727,18949,-26732,18942,-26737,18935,-26742,18929,-26747,18922,-26752,18915,-26756,18908,-26761,18901,-26766,18894,-26771,18888,-26776,18881,-26781,18874,-26785,18867,-26790,18860,-26795,18853,-26800,18846,-26805,18840,-26810,18833,-26814,18826,-26819,18819,-26824,18812,-26829,18805,-26834,18798,-26838,18792,-26843,18785,-26848,18778,-26853,18771,-26858,18764,-26862,18757,-26867,18750,-26872,18744,-26877,18737,-26882,18730,-26886,18723,-26891,18716,-26896,18709,-26901,18702,-26906,18695,-26910,18689,-26915,18682,-26920,18675,-26925,18668,-26929,18661,-26934,18654,-26939,18647,-26944,18640,-26949,18633,-26953,18627,-26958,18620,-26963,18613,-26968,18606,-26972,18599,-26977,18592,-26982,18585,-26987,18578,-26991,18571,-26996,18564,-27001,18558,-27006,18551,-27010,18544,-27015,18537,-27020,18530,-27025,18523,-27029,18516,-27034,18509,-27039,18502,-27043,18495,-27048,18488,-27053,18482,-27058,18475,-27062,18468,-27067,18461,-27072,18454,-27077,18447,-27081,18440,-27086,18433,-27091,18426,-27095,18419,-27100,18412,-27105,18405,-27110,18398,-27114,18392,-27119,18385,-27124,18378,-27128,18371,-27133,18364,-27138,18357,-27142,18350,-27147,18343,-27152,18336,-27157,18329,-27161,18322,-27166,18315,-27171,18308,-27175,18301,-27180,18294,-27185,18287,-27189,18280,-27194,18273,-27199,18267,-27203,18260,-27208,18253,-27213,18246,-27217,18239,-27222,18232,-27227,18225,-27231,18218,-27236,18211,-27241,18204,-27245,18197,-27250,18190,-27255,18183,-27259,18176,-27264,18169,-27269,18162,-27273,18155,-27278,18148,-27282,18141,-27287,18134,-27292,18127,-27296,18120,-27301,18113,-27306,18106,-27310,18099,-27315,18092,-27320,18085,-27324,18078,-27329,18071,-27333,18064,-27338,18057,-27343,18050,-27347,18043,-27352,18036,-27356,18029,-27361,18022,-27366,18015,-27370,18008,-27375,18001,-27379,17994,-27384,17987,-27389,17980,-27393,17973,-27398,17966,-27402,17959,-27407,17952,-27412,17945,-27416,17938,-27421,17931,-27425,17924,-27430,17917,-27435,17910,-27439,17903,-27444,17896,-27448,17889,-27453,17882,-27457,17875,-27462,17868,-27467,17861,-27471,17854,-27476,17847,-27480,17840,-27485,17833,-27489,17826,-27494,17819,-27499,17812,-27503,17805,-27508,17798,-27512,17791,-27517,17784,-27521,17777,-27526,17770,-27530,17763,-27535,17756,-27539,17749,-27544,17742,-27549,17735,-27553,17727,-27558,17720,-27562,17713,-27567,17706,-27571,17699,-27576,17692,-27580,17685,-27585,17678,-27589,17671,-27594,17664,-27598,17657,-27603,17650,-27607,17643,-27612,17636,-27616,17629,-27621,17622,-27625,17615,-27630,17608,-27634,17600,-27639,17593,-27643,17586,-27648,17579,-27652,17572,-27657,17565,-27661,17558,-27666,17551,-27670,17544,-27675,17537,-27679,17530,-27684,17523,-27688,17516,-27693,17509,-27697,17501,-27702,17494,-27706,17487,-27711,17480,-27715,17473,-27720,17466,-27724,17459,-27729,17452,-27733,17445,-27737,17438,-27742,17431,-27746,17423,-27751,17416,-27755,17409,-27760,17402,-27764,17395,-27769,17388,-27773,17381,-27778,17374,-27782,17367,-27786,17360,-27791,17352,-27795,17345,-27800,17338,-27804,17331,-27809,17324,-27813,17317,-27817,17310,-27822,17303,-27826,17296,-27831,17288,-27835,17281,-27840,17274,-27844,17267,-27848,17260,-27853,17253,-27857,17246,-27862,17239,-27866,17232,-27870,17224,-27875,17217,-27879,17210,-27884,17203,-27888,17196,-27892,17189,-27897,17182,-27901,17174,-27906,17167,-27910,17160,-27914,17153,-27919,17146,-27923,17139,-27928,17132,-27932,17124,-27936,17117,-27941,17110,-27945,17103,-27949,17096,-27954,17089,-27958,17082,-27963,17074,-27967,17067,-27971,17060,-27976,17053,-27980,17046,-27984,17039,-27989,17032,-27993,17024,-27997,17017,-28002,17010,-28006,17003,-28010,16996,-28015,16989,-28019,16981,-28024,16974,-28028,16967,-28032,16960,-28037,16953,-28041,16946,-28045,16938,-28050,16931,-28054,16924,-28058,16917,-28063,16910,-28067,16903,-28071,16895,-28076,16888,-28080,16881,-28084,16874,-28088,16867,-28093,16859,-28097,16852,-28101,16845,-28106,16838,-28110,16831,-28114,16824,-28119,16816,-28123,16809,-28127,16802,-28132,16795,-28136,16788,-28140,16780,-28144,16773,-28149,16766,-28153,16759,-28157,16752,-28162,16744,-28166,16737,-28170,16730,-28174,16723,-28179,16716,-28183,16708,-28187,16701,-28191,16694,-28196,16687,-28200,16680,-28204,16672,-28209,16665,-28213,16658,-28217,16651,-28221,16643,-28226,16636,-28230,16629,-28234,16622,-28238,16615,-28243,16607,-28247,16600,-28251,16593,-28255,16586,-28260,16578,-28264,16571,-28268,16564,-28272,16557,-28276,16550,-28281,16542,-28285,16535,-28289,16528,-28293,16521,-28298,16513,-28302,16506,-28306,16499,-28310,16492,-28315,16484,-28319,16477,-28323,16470,-28327,16463,-28331,16455,-28336,16448,-28340,16441,-28344,16434,-28348,16427,-28352,16419,-28357,16412,-28361,16405,-28365,16398,-28369,16390,-28373,16383,-28378,16376,-28382,16368,-28386,16361,-28390,16354,-28394,16347,-28398,16339,-28403,16332,-28407,16325,-28411,16318,-28415,16310,-28419,16303,-28424,16296,-28428,16289,-28432,16281,-28436,16274,-28440,16267,-28444,16260,-28448,16252,-28453,16245,-28457,16238,-28461,16230,-28465,16223,-28469,16216,-28473,16209,-28478,16201,-28482,16194,-28486,16187,-28490,16179,-28494,16172,-28498,16165,-28502,16158,-28507,16150,-28511,16143,-28515,16136,-28519,16128,-28523,16121,-28527,16114,-28531,16107,-28535,16099,-28539,16092,-28544,16085,-28548,16077,-28552,16070,-28556,16063,-28560,16055,-28564,16048,-28568,16041,-28572,16034,-28576,16026,-28581,16019,-28585,16012,-28589,16004,-28593,15997,-28597,15990,-28601,15982,-28605,15975,-28609,15968,-28613,15960,-28617,15953,-28621,15946,-28626,15938,-28630,15931,-28634,15924,-28638,15917,-28642,15909,-28646,15902,-28650,15895,-28654,15887,-28658,15880,-28662,15873,-28666,15865,-28670,15858,-28674,15851,-28678,15843,-28682,15836,-28686,15829,-28691,15821,-28695,15814,-28699,15807,-28703,15799,-28707,15792,-28711,15785,-28715,15777,-28719,15770,-28723,15763,-28727,15755,-28731,15748,-28735,15740,-28739,15733,-28743,15726,-28747,15718,-28751,15711,-28755,15704,-28759,15696,-28763,15689,-28767,15682,-28771,15674,-28775,15667,-28779,15660,-28783,15652,-28787,15645,-28791,15638,-28795,15630,-28799,15623,-28803,15615,-28807,15608,-28811,15601,-28815,15593,-28819,15586,-28823,15579,-28827,15571,-28831,15564,-28835,15556,-28839,15549,-28843,15542,-28847,15534,-28851,15527,-28855,15520,-28859,15512,-28863,15505,-28867,15497,-28871,15490,-28875,15483,-28879,15475,-28883,15468,-28887,15461,-28891,15453,-28894,15446,-28898,15438,-28902,15431,-28906,15424,-28910,15416,-28914,15409,-28918,15401,-28922,15394,-28926,15387,-28930,15379,-28934,15372,-28938,15364,-28942,15357,-28946,15350,-28950,15342,-28954,15335,-28957,15327,-28961,15320,-28965,15313,-28969,15305,-28973,15298,-28977,15290,-28981,15283,-28985,15276,-28989,15268,-28993,15261,-28997,15253,-29000,15246,-29004,15238,-29008,15231,-29012,15224,-29016,15216,-29020,15209,-29024,15201,-29028,15194,-29032,15187,-29035,15179,-29039,15172,-29043,15164,-29047,15157,-29051,15149,-29055,15142,-29059,15135,-29063,15127,-29066,15120,-29070,15112,-29074,15105,-29078,15097,-29082,15090,-29086,15083,-29090,15075,-29093,15068,-29097,15060,-29101,15053,-29105,15045,-29109,15038,-29113,15030,-29117,15023,-29120,15016,-29124,15008,-29128,15001,-29132,14993,-29136,14986,-29140,14978,-29143,14971,-29147,14963,-29151,14956,-29155,14949,-29159,14941,-29163,14934,-29166,14926,-29170,14919,-29174,14911,-29178,14904,-29182,14896,-29185,14889,-29189,14881,-29193,14874,-29197,14866,-29201,14859,-29204,14852,-29208,14844,-29212,14837,-29216,14829,-29220,14822,-29223,14814,-29227,14807,-29231,14799,-29235,14792,-29239,14784,-29242,14777,-29246,14769,-29250,14762,-29254,14754,-29257,14747,-29261,14739,-29265,14732,-29269,14724,-29273,14717,-29276,14709,-29280,14702,-29284,14694,-29288,14687,-29291,14680,-29295,14672,-29299,14665,-29303,14657,-29306,14650,-29310,14642,-29314,14635,-29318,14627,-29321,14620,-29325,14612,-29329,14605,-29333,14597,-29336,14590,-29340,14582,-29344,14575,-29347,14567,-29351,14560,-29355,14552,-29359,14545,-29362,14537,-29366,14530,-29370,14522,-29373,14515,-29377,14507,-29381,14499,-29385,14492,-29388,14484,-29392,14477,-29396,14469,-29399,14462,-29403,14454,-29407,14447,-29411,14439,-29414,14432,-29418,14424,-29422,14417,-29425,14409,-29429,14402,-29433,14394,-29436,14387,-29440,14379,-29444,14372,-29447,14364,-29451,14357,-29455,14349,-29458,14342,-29462,14334,-29466,14326,-29469,14319,-29473,14311,-29477,14304,-29480,14296,-29484,14289,-29488,14281,-29491,14274,-29495,14266,-29499,14259,-29502,14251,-29506,14244,-29510,14236,-29513,14228,-29517,14221,-29520,14213,-29524,14206,-29528,14198,-29531,14191,-29535,14183,-29539,14176,-29542,14168,-29546,14160,-29549,14153,-29553,14145,-29557,14138,-29560,14130,-29564,14123,-29568,14115,-29571,14108,-29575,14100,-29578,14092,-29582,14085,-29586,14077,-29589,14070,-29593,14062,-29596,14055,-29600,14047,-29604,14039,-29607,14032,-29611,14024,-29614,14017,-29618,14009,-29622,14002,-29625,13994,-29629,13986,-29632,13979,-29636,13971,-29639,13964,-29643,13956,-29647,13949,-29650,13941,-29654,13933,-29657,13926,-29661,13918,-29664,13911,-29668,13903,-29671,13895,-29675,13888,-29679,13880,-29682,13873,-29686,13865,-29689,13858,-29693,13850,-29696,13842,-29700,13835,-29703,13827,-29707,13820,-29710,13812,-29714,13804,-29718,13797,-29721,13789,-29725,13782,-29728,13774,-29732,13766,-29735,13759,-29739,13751,-29742,13744,-29746,13736,-29749,13728,-29753,13721,-29756,13713,-29760,13706,-29763,13698,-29767,13690,-29770,13683,-29774,13675,-29777,13667,-29781,13660,-29784,13652,-29788,13645,-29791,13637,-29795,13629,-29798,13622,-29802,13614,-29805,13607,-29809,13599,-29812,13591,-29816,13584,-29819,13576,-29823,13568,-29826,13561,-29829,13553,-29833,13546,-29836,13538,-29840,13530,-29843,13523,-29847,13515,-29850,13507,-29854,13500,-29857,13492,-29861,13485,-29864,13477,-29867,13469,-29871,13462,-29874,13454,-29878,13446,-29881,13439,-29885,13431,-29888,13423,-29892,13416,-29895,13408,-29898,13400,-29902,13393,-29905,13385,-29909,13378,-29912,13370,-29916,13362,-29919,13355,-29922,13347,-29926,13339,-29929,13332,-29933,13324,-29936,13316,-29939,13309,-29943,13301,-29946,13293,-29950,13286,-29953,13278,-29956,13270,-29960,13263,-29963,13255,-29967,13247,-29970,13240,-29973,13232,-29977,13224,-29980,13217,-29984,13209,-29987,13201,-29990,13194,-29994,13186,-29997,13178,-30000,13171,-30004,13163,-30007,13155,-30010,13148,-30014,13140,-30017,13132,-30021,13125,-30024,13117,-30027,13109,-30031,13102,-30034,13094,-30037,13086,-30041,13079,-30044,13071,-30047,13063,-30051,13056,-30054,13048,-30057,13040,-30061,13033,-30064,13025,-30067,13017,-30071,13009,-30074,13002,-30077,12994,-30081,12986,-30084,12979,-30087,12971,-30091,12963,-30094,12956,-30097,12948,-30101,12940,-30104,12933,-30107,12925,-30110,12917,-30114,12909,-30117,12902,-30120,12894,-30124,12886,-30127,12879,-30130,12871,-30134,12863,-30137,12856,-30140,12848,-30143,12840,-30147,12832,-30150,12825,-30153,12817,-30157,12809,-30160,12802,-30163,12794,-30166,12786,-30170,12778,-30173,12771,-30176,12763,-30179,12755,-30183,12748,-30186,12740,-30189,12732,-30192,12724,-30196,12717,-30199,12709,-30202,12701,-30206,12694,-30209,12686,-30212,12678,-30215,12670,-30218,12663,-30222,12655,-30225,12647,-30228,12639,-30231,12632,-30235,12624,-30238,12616,-30241,12609,-30244,12601,-30248,12593,-30251,12585,-30254,12578,-30257,12570,-30260,12562,-30264,12554,-30267,12547,-30270,12539,-30273,12531,-30276,12523,-30280,12516,-30283,12508,-30286,12500,-30289,12492,-30292,12485,-30296,12477,-30299,12469,-30302,12461,-30305,12454,-30308,12446,-30312,12438,-30315,12430,-30318,12423,-30321,12415,-30324,12407,-30327,12399,-30331,12392,-30334,12384,-30337,12376,-30340,12368,-30343,12361,-30346,12353,-30350,12345,-30353,12337,-30356,12330,-30359,12322,-30362,12314,-30365,12306,-30369,12299,-30372,12291,-30375,12283,-30378,12275,-30381,12268,-30384,12260,-30387,12252,-30391,12244,-30394,12236,-30397,12229,-30400,12221,-30403,12213,-30406,12205,-30409,12198,-30412,12190,-30416,12182,-30419,12174,-30422,12166,-30425,12159,-30428,12151,-30431,12143,-30434,12135,-30437,12128,-30440,12120,-30443,12112,-30447,12104,-30450,12096,-30453,12089,-30456,12081,-30459,12073,-30462,12065,-30465,12057,-30468,12050,-30471,12042,-30474,12034,-30477,12026,-30481,12019,-30484,12011,-30487,12003,-30490,11995,-30493,11987,-30496,11980,-30499,11972,-30502,11964,-30505,11956,-30508,11948,-30511,11941,-30514,11933,-30517,11925,-30520,11917,-30523,11909,-30526,11902,-30529,11894,-30533,11886,-30536,11878,-30539,11870,-30542,11862,-30545,11855,-30548,11847,-30551,11839,-30554,11831,-30557,11823,-30560,11816,-30563,11808,-30566,11800,-30569,11792,-30572,11784,-30575,11777,-30578,11769,-30581,11761,-30584,11753,-30587,11745,-30590,11737,-30593,11730,-30596,11722,-30599,11714,-30602,11706,-30605,11698,-30608,11691,-30611,11683,-30614,11675,-30617,11667,-30620,11659,-30623,11651,-30626,11644,-30629,11636,-30632,11628,-30635,11620,-30638,11612,-30641,11604,-30644,11597,-30647,11589,-30650,11581,-30653,11573,-30656,11565,-30658,11557,-30661,11550,-30664,11542,-30667,11534,-30670,11526,-30673,11518,-30676,11510,-30679,11502,-30682,11495,-30685,11487,-30688,11479,-30691,11471,-30694,11463,-30697,11455,-30700,11448,-30703,11440,-30706,11432,-30708,11424,-30711,11416,-30714,11408,-30717,11400,-30720,11393,-30723,11385,-30726,11377,-30729,11369,-30732,11361,-30735,11353,-30738,11345,-30740,11338,-30743,11330,-30746,11322,-30749,11314,-30752,11306,-30755,11298,-30758,11290,-30761,11283,-30764,11275,-30767,11267,-30769,11259,-30772,11251,-30775,11243,-30778,11235,-30781,11227,-30784,11220,-30787,11212,-30789,11204,-30792,11196,-30795,11188,-30798,11180,-30801,11172,-30804,11164,-30807,11157,-30810,11149,-30812,11141,-30815,11133,-30818,11125,-30821,11117,-30824,11109,-30827,11101,-30829,11094,-30832,11086,-30835,11078,-30838,11070,-30841,11062,-30844,11054,-30846,11046,-30849,11038,-30852,11030,-30855,11023,-30858,11015,-30861,11007,-30863,10999,-30866,10991,-30869,10983,-30872,10975,-30875,10967,-30877,10959,-30880,10952,-30883,10944,-30886,10936,-30889,10928,-30891,10920,-30894,10912,-30897,10904,-30900,10896,-30903,10888,-30905,10880,-30908,10873,-30911,10865,-30914,10857,-30916,10849,-30919,10841,-30922,10833,-30925,10825,-30928,10817,-30930,10809,-30933,10801,-30936,10794,-30939,10786,-30941,10778,-30944,10770,-30947,10762,-30950,10754,-30952,10746,-30955,10738,-30958,10730,-30961,10722,-30963,10714,-30966,10706,-30969,10699,-30972,10691,-30974,10683,-30977,10675,-30980,10667,-30982,10659,-30985,10651,-30988,10643,-30991,10635,-30993,10627,-30996,10619,-30999,10611,-31002,10603,-31004,10596,-31007,10588,-31010,10580,-31012,10572,-31015,10564,-31018,10556,-31020,10548,-31023,10540,-31026,10532,-31029,10524,-31031,10516,-31034,10508,-31037,10500,-31039,10492,-31042,10484,-31045,10477,-31047,10469,-31050,10461,-31053,10453,-31055,10445,-31058,10437,-31061,10429,-31063,10421,-31066,10413,-31069,10405,-31071,10397,-31074,10389,-31077,10381,-31079,10373,-31082,10365,-31085,10357,-31087,10349,-31090,10342,-31093,10334,-31095,10326,-31098,10318,-31101,10310,-31103,10302,-31106,10294,-31108,10286,-31111,10278,-31114,10270,-31116,10262,-31119,10254,-31122,10246,-31124,10238,-31127,10230,-31129,10222,-31132,10214,-31135,10206,-31137,10198,-31140,10190,-31142,10182,-31145,10174,-31148,10166,-31150,10159,-31153,10151,-31155,10143,-31158,10135,-31161,10127,-31163,10119,-31166,10111,-31168,10103,-31171,10095,-31174,10087,-31176,10079,-31179,10071,-31181,10063,-31184,10055,-31186,10047,-31189,10039,-31192,10031,-31194,10023,-31197,10015,-31199,10007,-31202,9999,-31204,9991,-31207,9983,-31210,9975,-31212,9967,-31215,9959,-31217,9951,-31220,9943,-31222,9935,-31225,9927,-31227,9919,-31230,9911,-31232,9903,-31235,9895,-31237,9887,-31240,9879,-31243,9871,-31245,9863,-31248,9855,-31250,9847,-31253,9839,-31255,9831,-31258,9823,-31260,9815,-31263,9807,-31265,9799,-31268,9791,-31270,9783,-31273,9775,-31275,9767,-31278,9759,-31280,9751,-31283,9743,-31285,9735,-31288,9727,-31290,9719,-31293,9711,-31295,9703,-31298,9695,-31300,9687,-31303,9679,-31305,9671,-31308,9663,-31310,9655,-31312,9647,-31315,9639,-31317,9631,-31320,9623,-31322,9615,-31325,9607,-31327,9599,-31330,9591,-31332,9583,-31335,9575,-31337,9567,-31339,9559,-31342,9551,-31344,9543,-31347,9535,-31349,9527,-31352,9519,-31354,9511,-31357,9503,-31359,9495,-31361,9487,-31364,9479,-31366,9471,-31369,9463,-31371,9455,-31374,9447,-31376,9439,-31378,9431,-31381,9423,-31383,9415,-31386,9407,-31388,9399,-31390,9391,-31393,9383,-31395,9375,-31398,9367,-31400,9359,-31402,9351,-31405,9343,-31407,9335,-31410,9327,-31412,9319,-31414,9311,-31417,9303,-31419,9295,-31421,9287,-31424,9279,-31426,9270,-31429,9262,-31431,9254,-31433,9246,-31436,9238,-31438,9230,-31440,9222,-31443,9214,-31445,9206,-31447,9198,-31450,9190,-31452,9182,-31455,9174,-31457,9166,-31459,9158,-31462,9150,-31464,9142,-31466,9134,-31469,9126,-31471,9118,-31473,9110,-31476,9102,-31478,9094,-31480,9086,-31483,9077,-31485,9069,-31487,9061,-31490,9053,-31492,9045,-31494,9037,-31496,9029,-31499,9021,-31501,9013,-31503,9005,-31506,8997,-31508,8989,-31510,8981,-31513,8973,-31515,8965,-31517,8957,-31519,8949,-31522,8941,-31524,8932,-31526,8924,-31529,8916,-31531,8908,-31533,8900,-31535,8892,-31538,8884,-31540,8876,-31542,8868,-31545,8860,-31547,8852,-31549,8844,-31551,8836,-31554,8828,-31556,8820,-31558,8812,-31560,8803,-31563,8795,-31565,8787,-31567,8779,-31569,8771,-31572,8763,-31574,8755,-31576,8747,-31578,8739,-31581,8731,-31583,8723,-31585,8715,-31587,8707,-31589,8699,-31592,8690,-31594,8682,-31596,8674,-31598,8666,-31601,8658,-31603,8650,-31605,8642,-31607,8634,-31609,8626,-31612,8618,-31614,8610,-31616,8602,-31618,8593,-31620,8585,-31623,8577,-31625,8569,-31627,8561,-31629,8553,-31631,8545,-31634,8537,-31636,8529,-31638,8521,-31640,8513,-31642,8504,-31644,8496,-31647,8488,-31649,8480,-31651,8472,-31653,8464,-31655,8456,-31657,8448,-31660,8440,-31662,8432,-31664,8424,-31666,8415,-31668,8407,-31670,8399,-31673,8391,-31675,8383,-31677,8375,-31679,8367,-31681,8359,-31683,8351,-31685,8343,-31688,8334,-31690,8326,-31692,8318,-31694,8310,-31696,8302,-31698,8294,-31700,8286,-31702,8278,-31705,8270,-31707,8262,-31709,8253,-31711,8245,-31713,8237,-31715,8229,-31717,8221,-31719,8213,-31721,8205,-31724,8197,-31726,8189,-31728,8180,-31730,8172,-31732,8164,-31734,8156,-31736,8148,-31738,8140,-31740,8132,-31742,8124,-31744,8116,-31746,8107,-31749,8099,-31751,8091,-31753,8083,-31755,8075,-31757,8067,-31759,8059,-31761,8051,-31763,8042,-31765,8034,-31767,8026,-31769,8018,-31771,8010,-31773,8002,-31775,7994,-31777,7986,-31779,7977,-31781,7969,-31783,7961,-31786,7953,-31788,7945,-31790,7937,-31792,7929,-31794,7921,-31796,7912,-31798,7904,-31800,7896,-31802,7888,-31804,7880,-31806,7872,-31808,7864,-31810,7856,-31812,7847,-31814,7839,-31816,7831,-31818,7823,-31820,7815,-31822,7807,-31824,7799,-31826,7790,-31828,7782,-31830,7774,-31832,7766,-31834,7758,-31836,7750,-31838,7742,-31840,7733,-31842,7725,-31844,7717,-31846,7709,-31848,7701,-31850,7693,-31852,7685,-31854,7676,-31855,7668,-31857,7660,-31859,7652,-31861,7644,-31863,7636,-31865,7628,-31867,7619,-31869,7611,-31871,7603,-31873,7595,-31875,7587,-31877,7579,-31879,7571,-31881,7562,-31883,7554,-31885,7546,-31887,7538,-31889,7530,-31890,7522,-31892,7514,-31894,7505,-31896,7497,-31898,7489,-31900,7481,-31902,7473,-31904,7465,-31906,7456,-31908,7448,-31910,7440,-31912,7432,-31913,7424,-31915,7416,-31917,7407,-31919,7399,-31921,7391,-31923,7383,-31925,7375,-31927,7367,-31929,7358,-31930,7350,-31932,7342,-31934,7334,-31936,7326,-31938,7318,-31940,7310,-31942,7301,-31944,7293,-31945,7285,-31947,7277,-31949,7269,-31951,7261,-31953,7252,-31955,7244,-31957,7236,-31958,7228,-31960,7220,-31962,7211,-31964,7203,-31966,7195,-31968,7187,-31969,7179,-31971,7171,-31973,7162,-31975,7154,-31977,7146,-31979,7138,-31980,7130,-31982,7122,-31984,7113,-31986,7105,-31988,7097,-31990,7089,-31991,7081,-31993,7072,-31995,7064,-31997,7056,-31999,7048,-32000,7040,-32002,7032,-32004,7023,-32006,7015,-32008,7007,-32009,6999,-32011,6991,-32013,6982,-32015,6974,-32017,6966,-32018,6958,-32020,6950,-32022,6942,-32024,6933,-32025,6925,-32027,6917,-32029,6909,-32031,6901,-32033,6892,-32034,6884,-32036,6876,-32038,6868,-32040,6860,-32041,6851,-32043,6843,-32045,6835,-32047,6827,-32048,6819,-32050,6811,-32052,6802,-32054,6794,-32055,6786,-32057,6778,-32059,6770,-32060,6761,-32062,6753,-32064,6745,-32066,6737,-32067,6729,-32069,6720,-32071,6712,-32073,6704,-32074,6696,-32076,6688,-32078,6679,-32079,6671,-32081,6663,-32083,6655,-32085,6647,-32086,6638,-32088,6630,-32090,6622,-32091,6614,-32093,6606,-32095,6597,-32096,6589,-32098,6581,-32100,6573,-32101,6564,-32103,6556,-32105,6548,-32106,6540,-32108,6532,-32110,6523,-32111,6515,-32113,6507,-32115,6499,-32116,6491,-32118,6482,-32120,6474,-32121,6466,-32123,6458,-32125,6450,-32126,6441,-32128,6433,-32130,6425,-32131,6417,-32133,6408,-32135,6400,-32136,6392,-32138,6384,-32140,6376,-32141,6367,-32143,6359,-32144,6351,-32146,6343,-32148,6334,-32149,6326,-32151,6318,-32153,6310,-32154,6302,-32156,6293,-32157,6285,-32159,6277,-32161,6269,-32162,6261,-32164,6252,-32165,6244,-32167,6236,-32169,6228,-32170,6219,-32172,6211,-32173,6203,-32175,6195,-32177,6186,-32178,6178,-32180,6170,-32181,6162,-32183,6154,-32184,6145,-32186,6137,-32188,6129,-32189,6121,-32191,6112,-32192,6104,-32194,6096,-32195,6088,-32197,6080,-32198,6071,-32200,6063,-32202,6055,-32203,6047,-32205,6038,-32206,6030,-32208,6022,-32209,6014,-32211,6005,-32212,5997,-32214,5989,-32215,5981,-32217,5972,-32219,5964,-32220,5956,-32222,5948,-32223,5940,-32225,5931,-32226,5923,-32228,5915,-32229,5907,-32231,5898,-32232,5890,-32234,5882,-32235,5874,-32237,5865,-32238,5857,-32240,5849,-32241,5841,-32243,5832,-32244,5824,-32246,5816,-32247,5808,-32249,5799,-32250,5791,-32252,5783,-32253,5775,-32255,5766,-32256,5758,-32257,5750,-32259,5742,-32260,5733,-32262,5725,-32263,5717,-32265,5709,-32266,5700,-32268,5692,-32269,5684,-32271,5676,-32272,5667,-32274,5659,-32275,5651,-32276,5643,-32278,5634,-32279,5626,-32281,5618,-32282,5610,-32284,5601,-32285,5593,-32287,5585,-32288,5577,-32289,5568,-32291,5560,-32292,5552,-32294,5544,-32295,5535,-32296,5527,-32298,5519,-32299,5511,-32301,5502,-32302,5494,-32304,5486,-32305,5478,-32306,5469,-32308,5461,-32309,5453,-32311,5445,-32312,5436,-32313,5428,-32315,5420,-32316,5411,-32317,5403,-32319,5395,-32320,5387,-32322,5378,-32323,5370,-32324,5362,-32326,5354,-32327,5345,-32328,5337,-32330,5329,-32331,5321,-32333,5312,-32334,5304,-32335,5296,-32337,5287,-32338,5279,-32339,5271,-32341,5263,-32342,5254,-32343,5246,-32345,5238,-32346,5230,-32347,5221,-32349,5213,-32350,5205,-32351,5197,-32353,5188,-32354,5180,-32355,5172,-32357,5163,-32358,5155,-32359,5147,-32361,5139,-32362,5130,-32363,5122,-32365,5114,-32366,5106,-32367,5097,-32369,5089,-32370,5081,-32371,5072,-32372,5064,-32374,5056,-32375,5048,-32376,5039,-32378,5031,-32379,5023,-32380,5014,-32381,5006,-32383,4998,-32384,4990,-32385,4981,-32387,4973,-32388,4965,-32389,4957,-32390,4948,-32392,4940,-32393,4932,-32394,4923,-32395,4915,-32397,4907,-32398,4899,-32399,4890,-32400,4882,-32402,4874,-32403,4865,-32404,4857,-32405,4849,-32407,4841,-32408,4832,-32409,4824,-32410,4816,-32412,4807,-32413,4799,-32414,4791,-32415,4783,-32417,4774,-32418,4766,-32419,4758,-32420,4749,-32421,4741,-32423,4733,-32424,4725,-32425,4716,-32426,4708,-32427,4700,-32429,4691,-32430,4683,-32431,4675,-32432,4666,-32433,4658,-32435,4650,-32436,4642,-32437,4633,-32438,4625,-32439,4617,-32441,4608,-32442,4600,-32443,4592,-32444,4584,-32445,4575,-32446,4567,-32448,4559,-32449,4550,-32450,4542,-32451,4534,-32452,4525,-32453,4517,-32455,4509,-32456,4501,-32457,4492,-32458,4484,-32459,4476,-32460,4467,-32461,4459,-32463,4451,-32464,4443,-32465,4434,-32466,4426,-32467,4418,-32468,4409,-32469,4401,-32471,4393,-32472,4384,-32473,4376,-32474,4368,-32475,4359,-32476,4351,-32477,4343,-32478,4335,-32479,4326,-32481,4318,-32482,4310,-32483,4301,-32484,4293,-32485,4285,-32486,4276,-32487,4268,-32488,4260,-32489,4252,-32490,4243,-32492,4235,-32493,4227,-32494,4218,-32495,4210,-32496,4202,-32497,4193,-32498,4185,-32499,4177,-32500,4168,-32501,4160,-32502,4152,-32503,4144,-32504,4135,-32505,4127,-32507,4119,-32508,4110,-32509,4102,-32510,4094,-32511,4085,-32512,4077,-32513,4069,-32514,4060,-32515,4052,-32516,4044,-32517,4035,-32518,4027,-32519,4019,-32520,4011,-32521,4002,-32522,3994,-32523,3986,-32524,3977,-32525,3969,-32526,3961,-32527,3952,-32528,3944,-32529,3936,-32530,3927,-32531,3919,-32532,3911,-32533,3902,-32534,3894,-32535,3886,-32536,3877,-32537,3869,-32538,3861,-32539,3853,-32540,3844,-32541,3836,-32542,3828,-32543,3819,-32544,3811,-32545,3803,-32546,3794,-32547,3786,-32548,3778,-32549,3769,-32550,3761,-32551,3753,-32552,3744,-32553,3736,-32554,3728,-32555,3719,-32556,3711,-32557,3703,-32558,3694,-32559,3686,-32559,3678,-32560,3669,-32561,3661,-32562,3653,-32563,3644,-32564,3636,-32565,3628,-32566,3619,-32567,3611,-32568,3603,-32569,3594,-32570,3586,-32571,3578,-32572,3570,-32572,3561,-32573,3553,-32574,3545,-32575,3536,-32576,3528,-32577,3520,-32578,3511,-32579,3503,-32580,3495,-32581,3486,-32581,3478,-32582,3470,-32583,3461,-32584,3453,-32585,3445,-32586,3436,-32587,3428,-32588,3420,-32589,3411,-32589,3403,-32590,3395,-32591,3386,-32592,3378,-32593,3370,-32594,3361,-32595,3353,-32595,3345,-32596,3336,-32597,3328,-32598,3320,-32599,3311,-32600,3303,-32601,3295,-32601,3286,-32602,3278,-32603,3270,-32604,3261,-32605,3253,-32606,3245,-32606,3236,-32607,3228,-32608,3220,-32609,3211,-32610,3203,-32611,3195,-32611,3186,-32612,3178,-32613,3170,-32614,3161,-32615,3153,-32615,3145,-32616,3136,-32617,3128,-32618,3120,-32619,3111,-32619,3103,-32620,3094,-32621,3086,-32622,3078,-32623,3069,-32623,3061,-32624,3053,-32625,3044,-32626,3036,-32626,3028,-32627,3019,-32628,3011,-32629,3003,-32630,2994,-32630,2986,-32631,2978,-32632,2969,-32633,2961,-32633,2953,-32634,2944,-32635,2936,-32636,2928,-32636,2919,-32637,2911,-32638,2903,-32639,2894,-32639,2886,-32640,2878,-32641,2869,-32642,2861,-32642,2853,-32643,2844,-32644,2836,-32645,2828,-32645,2819,-32646,2811,-32647,2802,-32647,2794,-32648,2786,-32649,2777,-32650,2769,-32650,2761,-32651,2752,-32652,2744,-32652,2736,-32653,2727,-32654,2719,-32654,2711,-32655,2702,-32656,2694,-32657,2686,-32657,2677,-32658,2669,-32659,2661,-32659,2652,-32660,2644,-32661,2636,-32661,2627,-32662,2619,-32663,2610,-32663,2602,-32664,2594,-32665,2585,-32665,2577,-32666,2569,-32667,2560,-32667,2552,-32668,2544,-32669,2535,-32669,2527,-32670,2519,-32671,2510,-32671,2502,-32672,2494,-32672,2485,-32673,2477,-32674,2468,-32674,2460,-32675,2452,-32676,2443,-32676,2435,-32677,2427,-32677,2418,-32678,2410,-32679,2402,-32679,2393,-32680,2385,-32681,2377,-32681,2368,-32682,2360,-32682,2352,-32683,2343,-32684,2335,-32684,2326,-32685,2318,-32685,2310,-32686,2301,-32687,2293,-32687,2285,-32688,2276,-32688,2268,-32689,2260,-32689,2251,-32690,2243,-32691,2235,-32691,2226,-32692,2218,-32692,2209,-32693,2201,-32693,2193,-32694,2184,-32695,2176,-32695,2168,-32696,2159,-32696,2151,-32697,2143,-32697,2134,-32698,2126,-32698,2117,-32699,2109,-32700,2101,-32700,2092,-32701,2084,-32701,2076,-32702,2067,-32702,2059,-32703,2051,-32703,2042,-32704,2034,-32704,2026,-32705,2017,-32705,2009,-32706,2000,-32706,1992,-32707,1984,-32707,1975,-32708,1967,-32708,1959,-32709,1950,-32709,1942,-32710,1934,-32710,1925,-32711,1917,-32711,1908,-32712,1900,-32712,1892,-32713,1883,-32713,1875,-32714,1867,-32714,1858,-32715,1850,-32715,1842,-32716,1833,-32716,1825,-32717,1816,-32717,1808,-32718,1800,-32718,1791,-32718,1783,-32719,1775,-32719,1766,-32720,1758,-32720,1750,-32721,1741,-32721,1733,-32722,1724,-32722,1716,-32723,1708,-32723,1699,-32723,1691,-32724,1683,-32724,1674,-32725,1666,-32725,1658,-32726,1649,-32726,1641,-32726,1632,-32727,1624,-32727,1616,-32728,1607,-32728,1599,-32728,1591,-32729,1582,-32729,1574,-32730,1565,-32730,1557,-32730,1549,-32731,1540,-32731,1532,-32732,1524,-32732,1515,-32732,1507,-32733,1499,-32733,1490,-32734,1482,-32734,1473,-32734,1465,-32735,1457,-32735,1448,-32735,1440,-32736,1432,-32736,1423,-32737,1415,-32737,1406,-32737,1398,-32738,1390,-32738,1381,-32738,1373,-32739,1365,-32739,1356,-32739,1348,-32740,1339,-32740,1331,-32740,1323,-32741,1314,-32741,1306,-32741,1298,-32742,1289,-32742,1281,-32742,1273,-32743,1264,-32743,1256,-32743,1247,-32744,1239,-32744,1231,-32744,1222,-32745,1214,-32745,1206,-32745,1197,-32746,1189,-32746,1180,-32746,1172,-32747,1164,-32747,1155,-32747,1147,-32747,1139,-32748,1130,-32748,1122,-32748,1113,-32749,1105,-32749,1097,-32749,1088,-32749,1080,-32750,1072,-32750,1063,-32750,1055,-32751,1046,-32751,1038,-32751,1030,-32751,1021,-32752,1013,-32752,1005,-32752,996,-32752,988,-32753,980,-32753,971,-32753,963,-32753,954,-32754,946,-32754,938,-32754,929,-32754,921,-32755,913,-32755,904,-32755,896,-32755,887,-32755,879,-32756,871,-32756,862,-32756,854,-32756,846,-32757,837,-32757,829,-32757,820,-32757,812,-32757,804,-32758,795,-32758,787,-32758,779,-32758,770,-32758,762,-32759,753,-32759,745,-32759,737,-32759,728,-32759,720,-32760,712,-32760,703,-32760,695,-32760,686,-32760,678,-32760,670,-32761,661,-32761,653,-32761,645,-32761,636,-32761,628,-32761,619,-32762,611,-32762,603,-32762,594,-32762,586,-32762,578,-32762,569,-32763,561,-32763,552,-32763,544,-32763,536,-32763,527,-32763,519,-32763,510,-32764,502,-32764,494,-32764,485,-32764,477,-32764,469,-32764,460,-32764,452,-32764,443,-32764,435,-32765,427,-32765,418,-32765,410,-32765,402,-32765,393,-32765,385,-32765,376,-32765,368,-32765,360,-32766,351,-32766,343,-32766,335,-32766,326,-32766,318,-32766,309,-32766,301,-32766,293,-32766,284,-32766,276,-32766,268,-32766,259,-32766,251,-32767,242,-32767,234,-32767,226,-32767,217,-32767,209,-32767,201,-32767,192,-32767,184,-32767,175,-32767,167,-32767,159,-32767,150,-32767,142,-32767,134,-32767,125,-32767,117,-32767,108,-32767,100,-32767,92,-32767,83,-32767,75,-32767,67,-32767,58,-32767,50,-32767,41,-32767,33,-32767,25,-32767,16,-32767,8,-32767,0,-32767,-9,-32767,-17,-32767,-26,-32767,-34,-32767,-42,-32767,-51,-32767,-59,-32767,-68,-32767,-76,-32767,-84,-32767,-93,-32767,-101,-32767,-109,-32767,-118,-32767,-126,-32767,-135,-32767,-143,-32767,-151,-32767,-160,-32767,-168,-32767,-176,-32767,-185,-32767,-193,-32767,-202,-32767,-210,-32767,-218,-32767,-227,-32767,-235,-32767,-243,-32767,-252,-32767,-260,-32766,-269,-32766,-277,-32766,-285,-32766,-294,-32766,-302,-32766,-310,-32766,-319,-32766,-327,-32766,-336,-32766,-344,-32766,-352,-32766,-361,-32766,-369,-32765,-377,-32765,-386,-32765,-394,-32765,-403,-32765,-411,-32765,-419,-32765,-428,-32765,-436,-32765,-444,-32764,-453,-32764,-461,-32764,-470,-32764,-478,-32764,-486,-32764,-495,-32764,-503,-32764,-511,-32764,-520,-32763,-528,-32763,-537,-32763,-545,-32763,-553,-32763,-562,-32763,-570,-32763,-579,-32762,-587,-32762,-595,-32762,-604,-32762,-612,-32762,-620,-32762,-629,-32761,-637,-32761,-646,-32761,-654,-32761,-662,-32761,-671,-32761,-679,-32760,-687,-32760,-696,-32760,-704,-32760,-713,-32760,-721,-32760,-729,-32759,-738,-32759,-746,-32759,-754,-32759,-763,-32759,-771,-32758,-780,-32758,-788,-32758,-796,-32758,-805,-32758,-813,-32757,-821,-32757,-830,-32757,-838,-32757,-847,-32757,-855,-32756,-863,-32756,-872,-32756,-880,-32756,-888,-32755,-897,-32755,-905,-32755,-914,-32755,-922,-32755,-930,-32754,-939,-32754,-947,-32754,-955,-32754,-964,-32753,-972,-32753,-981,-32753,-989,-32753,-997,-32752,-1006,-32752,-1014,-32752,-1022,-32752,-1031,-32751,-1039,-32751,-1047,-32751,-1056,-32751,-1064,-32750,-1073,-32750,-1081,-32750,-1089,-32749,-1098,-32749,-1106,-32749,-1114,-32749,-1123,-32748,-1131,-32748,-1140,-32748,-1148,-32747,-1156,-32747,-1165,-32747,-1173,-32747,-1181,-32746,-1190,-32746,-1198,-32746,-1207,-32745,-1215,-32745,-1223,-32745,-1232,-32744,-1240,-32744,-1248,-32744,-1257,-32743,-1265,-32743,-1274,-32743,-1282,-32742,-1290,-32742,-1299,-32742,-1307,-32741,-1315,-32741,-1324,-32741,-1332,-32740,-1340,-32740,-1349,-32740,-1357,-32739,-1366,-32739,-1374,-32739,-1382,-32738,-1391,-32738,-1399,-32738,-1407,-32737,-1416,-32737,-1424,-32737,-1433,-32736,-1441,-32736,-1449,-32735,-1458,-32735,-1466,-32735,-1474,-32734,-1483,-32734,-1491,-32734,-1500,-32733,-1508,-32733,-1516,-32732,-1525,-32732,-1533,-32732,-1541,-32731,-1550,-32731,-1558,-32730,-1566,-32730,-1575,-32730,-1583,-32729,-1592,-32729,-1600,-32728,-1608,-32728,-1617,-32728,-1625,-32727,-1633,-32727,-1642,-32726,-1650,-32726,-1659,-32726,-1667,-32725,-1675,-32725,-1684,-32724,-1692,-32724,-1700,-32723,-1709,-32723,-1717,-32723,-1725,-32722,-1734,-32722,-1742,-32721,-1751,-32721,-1759,-32720,-1767,-32720,-1776,-32719,-1784,-32719,-1792,-32718,-1801,-32718,-1809,-32718,-1817,-32717,-1826,-32717,-1834,-32716,-1843,-32716,-1851,-32715,-1859,-32715,-1868,-32714,-1876,-32714,-1884,-32713,-1893,-32713,-1901,-32712,-1909,-32712,-1918,-32711,-1926,-32711,-1935,-32710,-1943,-32710,-1951,-32709,-1960,-32709,-1968,-32708,-1976,-32708,-1985,-32707,-1993,-32707,-2001,-32706,-2010,-32706,-2018,-32705,-2027,-32705,-2035,-32704,-2043,-32704,-2052,-32703,-2060,-32703,-2068,-32702,-2077,-32702,-2085,-32701,-2093,-32701,-2102,-32700,-2110,-32700,-2118,-32699,-2127,-32698,-2135,-32698,-2144,-32697,-2152,-32697,-2160,-32696,-2169,-32696,-2177,-32695,-2185,-32695,-2194,-32694,-2202,-32693,-2210,-32693,-2219,-32692,-2227,-32692,-2236,-32691,-2244,-32691,-2252,-32690,-2261,-32689,-2269,-32689,-2277,-32688,-2286,-32688,-2294,-32687,-2302,-32687,-2311,-32686,-2319,-32685,-2327,-32685,-2336,-32684,-2344,-32684,-2353,-32683,-2361,-32682,-2369,-32682,-2378,-32681,-2386,-32681,-2394,-32680,-2403,-32679,-2411,-32679,-2419,-32678,-2428,-32677,-2436,-32677,-2444,-32676,-2453,-32676,-2461,-32675,-2469,-32674,-2478,-32674,-2486,-32673,-2495,-32672,-2503,-32672,-2511,-32671,-2520,-32671,-2528,-32670,-2536,-32669,-2545,-32669,-2553,-32668,-2561,-32667,-2570,-32667,-2578,-32666,-2586,-32665,-2595,-32665,-2603,-32664,-2611,-32663,-2620,-32663,-2628,-32662,-2637,-32661,-2645,-32661,-2653,-32660,-2662,-32659,-2670,-32659,-2678,-32658,-2687,-32657,-2695,-32657,-2703,-32656,-2712,-32655,-2720,-32654,-2728,-32654,-2737,-32653,-2745,-32652,-2753,-32652,-2762,-32651,-2770,-32650,-2778,-32650,-2787,-32649,-2795,-32648,-2803,-32647,-2812,-32647,-2820,-32646,-2829,-32645,-2837,-32645,-2845,-32644,-2854,-32643,-2862,-32642,-2870,-32642,-2879,-32641,-2887,-32640,-2895,-32639,-2904,-32639,-2912,-32638,-2920,-32637,-2929,-32636,-2937,-32636,-2945,-32635,-2954,-32634,-2962,-32633,-2970,-32633,-2979,-32632,-2987,-32631,-2995,-32630,-3004,-32630,-3012,-32629,-3020,-32628,-3029,-32627,-3037,-32626,-3045,-32626,-3054,-32625,-3062,-32624,-3070,-32623,-3079,-32623,-3087,-32622,-3095,-32621,-3104,-32620,-3112,-32619,-3121,-32619,-3129,-32618,-3137,-32617,-3146,-32616,-3154,-32615,-3162,-32615,-3171,-32614,-3179,-32613,-3187,-32612,-3196,-32611,-3204,-32611,-3212,-32610,-3221,-32609,-3229,-32608,-3237,-32607,-3246,-32606,-3254,-32606,-3262,-32605,-3271,-32604,-3279,-32603,-3287,-32602,-3296,-32601,-3304,-32601,-3312,-32600,-3321,-32599,-3329,-32598,-3337,-32597,-3346,-32596,-3354,-32595,-3362,-32595,-3371,-32594,-3379,-32593,-3387,-32592,-3396,-32591,-3404,-32590,-3412,-32589,-3421,-32589,-3429,-32588,-3437,-32587,-3446,-32586,-3454,-32585,-3462,-32584,-3471,-32583,-3479,-32582,-3487,-32581,-3496,-32581,-3504,-32580,-3512,-32579,-3521,-32578,-3529,-32577,-3537,-32576,-3546,-32575,-3554,-32574,-3562,-32573,-3571,-32572,-3579,-32572,-3587,-32571,-3595,-32570,-3604,-32569,-3612,-32568,-3620,-32567,-3629,-32566,-3637,-32565,-3645,-32564,-3654,-32563,-3662,-32562,-3670,-32561,-3679,-32560,-3687,-32559,-3695,-32559,-3704,-32558,-3712,-32557,-3720,-32556,-3729,-32555,-3737,-32554,-3745,-32553,-3754,-32552,-3762,-32551,-3770,-32550,-3779,-32549,-3787,-32548,-3795,-32547,-3804,-32546,-3812,-32545,-3820,-32544,-3829,-32543,-3837,-32542,-3845,-32541,-3854,-32540,-3862,-32539,-3870,-32538,-3878,-32537,-3887,-32536,-3895,-32535,-3903,-32534,-3912,-32533,-3920,-32532,-3928,-32531,-3937,-32530,-3945,-32529,-3953,-32528,-3962,-32527,-3970,-32526,-3978,-32525,-3987,-32524,-3995,-32523,-4003,-32522,-4012,-32521,-4020,-32520,-4028,-32519,-4036,-32518,-4045,-32517,-4053,-32516,-4061,-32515,-4070,-32514,-4078,-32513,-4086,-32512,-4095,-32511,-4103,-32510,-4111,-32509,-4120,-32508,-4128,-32507,-4136,-32505,-4145,-32504,-4153,-32503,-4161,-32502,-4169,-32501,-4178,-32500,-4186,-32499,-4194,-32498,-4203,-32497,-4211,-32496,-4219,-32495,-4228,-32494,-4236,-32493,-4244,-32492,-4253,-32490,-4261,-32489,-4269,-32488,-4277,-32487,-4286,-32486,-4294,-32485,-4302,-32484,-4311,-32483,-4319,-32482,-4327,-32481,-4336,-32479,-4344,-32478,-4352,-32477,-4360,-32476,-4369,-32475,-4377,-32474,-4385,-32473,-4394,-32472,-4402,-32471,-4410,-32469,-4419,-32468,-4427,-32467,-4435,-32466,-4444,-32465,-4452,-32464,-4460,-32463,-4468,-32461,-4477,-32460,-4485,-32459,-4493,-32458,-4502,-32457,-4510,-32456,-4518,-32455,-4526,-32453,-4535,-32452,-4543,-32451,-4551,-32450,-4560,-32449,-4568,-32448,-4576,-32446,-4585,-32445,-4593,-32444,-4601,-32443,-4609,-32442,-4618,-32441,-4626,-32439,-4634,-32438,-4643,-32437,-4651,-32436,-4659,-32435,-4667,-32433,-4676,-32432,-4684,-32431,-4692,-32430,-4701,-32429,-4709,-32427,-4717,-32426,-4726,-32425,-4734,-32424,-4742,-32423,-4750,-32421,-4759,-32420,-4767,-32419,-4775,-32418,-4784,-32417,-4792,-32415,-4800,-32414,-4808,-32413,-4817,-32412,-4825,-32410,-4833,-32409,-4842,-32408,-4850,-32407,-4858,-32405,-4866,-32404,-4875,-32403,-4883,-32402,-4891,-32400,-4900,-32399,-4908,-32398,-4916,-32397,-4924,-32395,-4933,-32394,-4941,-32393,-4949,-32392,-4958,-32390,-4966,-32389,-4974,-32388,-4982,-32387,-4991,-32385,-4999,-32384,-5007,-32383,-5015,-32381,-5024,-32380,-5032,-32379,-5040,-32378,-5049,-32376,-5057,-32375,-5065,-32374,-5073,-32372,-5082,-32371,-5090,-32370,-5098,-32369,-5107,-32367,-5115,-32366,-5123,-32365,-5131,-32363,-5140,-32362,-5148,-32361,-5156,-32359,-5164,-32358,-5173,-32357,-5181,-32355,-5189,-32354,-5198,-32353,-5206,-32351,-5214,-32350,-5222,-32349,-5231,-32347,-5239,-32346,-5247,-32345,-5255,-32343,-5264,-32342,-5272,-32341,-5280,-32339,-5288,-32338,-5297,-32337,-5305,-32335,-5313,-32334,-5322,-32333,-5330,-32331,-5338,-32330,-5346,-32328,-5355,-32327,-5363,-32326,-5371,-32324,-5379,-32323,-5388,-32322,-5396,-32320,-5404,-32319,-5412,-32317,-5421,-32316,-5429,-32315,-5437,-32313,-5446,-32312,-5454,-32311,-5462,-32309,-5470,-32308,-5479,-32306,-5487,-32305,-5495,-32304,-5503,-32302,-5512,-32301,-5520,-32299,-5528,-32298,-5536,-32296,-5545,-32295,-5553,-32294,-5561,-32292,-5569,-32291,-5578,-32289,-5586,-32288,-5594,-32287,-5602,-32285,-5611,-32284,-5619,-32282,-5627,-32281,-5635,-32279,-5644,-32278,-5652,-32276,-5660,-32275,-5668,-32274,-5677,-32272,-5685,-32271,-5693,-32269,-5701,-32268,-5710,-32266,-5718,-32265,-5726,-32263,-5734,-32262,-5743,-32260,-5751,-32259,-5759,-32257,-5767,-32256,-5776,-32255,-5784,-32253,-5792,-32252,-5800,-32250,-5809,-32249,-5817,-32247,-5825,-32246,-5833,-32244,-5842,-32243,-5850,-32241,-5858,-32240,-5866,-32238,-5875,-32237,-5883,-32235,-5891,-32234,-5899,-32232,-5908,-32231,-5916,-32229,-5924,-32228,-5932,-32226,-5941,-32225,-5949,-32223,-5957,-32222,-5965,-32220,-5973,-32219,-5982,-32217,-5990,-32215,-5998,-32214,-6006,-32212,-6015,-32211,-6023,-32209,-6031,-32208,-6039,-32206,-6048,-32205,-6056,-32203,-6064,-32202,-6072,-32200,-6081,-32198,-6089,-32197,-6097,-32195,-6105,-32194,-6113,-32192,-6122,-32191,-6130,-32189,-6138,-32188,-6146,-32186,-6155,-32184,-6163,-32183,-6171,-32181,-6179,-32180,-6187,-32178,-6196,-32177,-6204,-32175,-6212,-32173,-6220,-32172,-6229,-32170,-6237,-32169,-6245,-32167,-6253,-32165,-6262,-32164,-6270,-32162,-6278,-32161,-6286,-32159,-6294,-32157,-6303,-32156,-6311,-32154,-6319,-32153,-6327,-32151,-6335,-32149,-6344,-32148,-6352,-32146,-6360,-32144,-6368,-32143,-6377,-32141,-6385,-32140,-6393,-32138,-6401,-32136,-6409,-32135,-6418,-32133,-6426,-32131,-6434,-32130,-6442,-32128,-6451,-32126,-6459,-32125,-6467,-32123,-6475,-32121,-6483,-32120,-6492,-32118,-6500,-32116,-6508,-32115,-6516,-32113,-6524,-32111,-6533,-32110,-6541,-32108,-6549,-32106,-6557,-32105,-6565,-32103,-6574,-32101,-6582,-32100,-6590,-32098,-6598,-32096,-6607,-32095,-6615,-32093,-6623,-32091,-6631,-32090,-6639,-32088,-6648,-32086,-6656,-32085,-6664,-32083,-6672,-32081,-6680,-32079,-6689,-32078,-6697,-32076,-6705,-32074,-6713,-32073,-6721,-32071,-6730,-32069,-6738,-32067,-6746,-32066,-6754,-32064,-6762,-32062,-6771,-32060,-6779,-32059,-6787,-32057,-6795,-32055,-6803,-32054,-6812,-32052,-6820,-32050,-6828,-32048,-6836,-32047,-6844,-32045,-6852,-32043,-6861,-32041,-6869,-32040,-6877,-32038,-6885,-32036,-6893,-32034,-6902,-32033,-6910,-32031,-6918,-32029,-6926,-32027,-6934,-32025,-6943,-32024,-6951,-32022,-6959,-32020,-6967,-32018,-6975,-32017,-6983,-32015,-6992,-32013,-7000,-32011,-7008,-32009,-7016,-32008,-7024,-32006,-7033,-32004,-7041,-32002,-7049,-32000,-7057,-31999,-7065,-31997,-7073,-31995,-7082,-31993,-7090,-31991,-7098,-31990,-7106,-31988,-7114,-31986,-7123,-31984,-7131,-31982,-7139,-31980,-7147,-31979,-7155,-31977,-7163,-31975,-7172,-31973,-7180,-31971,-7188,-31969,-7196,-31968,-7204,-31966,-7212,-31964,-7221,-31962,-7229,-31960,-7237,-31958,-7245,-31957,-7253,-31955,-7262,-31953,-7270,-31951,-7278,-31949,-7286,-31947,-7294,-31945,-7302,-31944,-7311,-31942,-7319,-31940,-7327,-31938,-7335,-31936,-7343,-31934,-7351,-31932,-7359,-31930,-7368,-31929,-7376,-31927,-7384,-31925,-7392,-31923,-7400,-31921,-7408,-31919,-7417,-31917,-7425,-31915,-7433,-31913,-7441,-31912,-7449,-31910,-7457,-31908,-7466,-31906,-7474,-31904,-7482,-31902,-7490,-31900,-7498,-31898,-7506,-31896,-7515,-31894,-7523,-31892,-7531,-31890,-7539,-31889,-7547,-31887,-7555,-31885,-7563,-31883,-7572,-31881,-7580,-31879,-7588,-31877,-7596,-31875,-7604,-31873,-7612,-31871,-7620,-31869,-7629,-31867,-7637,-31865,-7645,-31863,-7653,-31861,-7661,-31859,-7669,-31857,-7677,-31855,-7686,-31854,-7694,-31852,-7702,-31850,-7710,-31848,-7718,-31846,-7726,-31844,-7734,-31842,-7743,-31840,-7751,-31838,-7759,-31836,-7767,-31834,-7775,-31832,-7783,-31830,-7791,-31828,-7800,-31826,-7808,-31824,-7816,-31822,-7824,-31820,-7832,-31818,-7840,-31816,-7848,-31814,-7857,-31812,-7865,-31810,-7873,-31808,-7881,-31806,-7889,-31804,-7897,-31802,-7905,-31800,-7913,-31798,-7922,-31796,-7930,-31794,-7938,-31792,-7946,-31790,-7954,-31788,-7962,-31786,-7970,-31783,-7978,-31781,-7987,-31779,-7995,-31777,-8003,-31775,-8011,-31773,-8019,-31771,-8027,-31769,-8035,-31767,-8043,-31765,-8052,-31763,-8060,-31761,-8068,-31759,-8076,-31757,-8084,-31755,-8092,-31753,-8100,-31751,-8108,-31749,-8117,-31746,-8125,-31744,-8133,-31742,-8141,-31740,-8149,-31738,-8157,-31736,-8165,-31734,-8173,-31732,-8181,-31730,-8190,-31728,-8198,-31726,-8206,-31724,-8214,-31721,-8222,-31719,-8230,-31717,-8238,-31715,-8246,-31713,-8254,-31711,-8263,-31709,-8271,-31707,-8279,-31705,-8287,-31702,-8295,-31700,-8303,-31698,-8311,-31696,-8319,-31694,-8327,-31692,-8335,-31690,-8344,-31688,-8352,-31685,-8360,-31683,-8368,-31681,-8376,-31679,-8384,-31677,-8392,-31675,-8400,-31673,-8408,-31670,-8416,-31668,-8425,-31666,-8433,-31664,-8441,-31662,-8449,-31660,-8457,-31657,-8465,-31655,-8473,-31653,-8481,-31651,-8489,-31649,-8497,-31647,-8505,-31644,-8514,-31642,-8522,-31640,-8530,-31638,-8538,-31636,-8546,-31634,-8554,-31631,-8562,-31629,-8570,-31627,-8578,-31625,-8586,-31623,-8594,-31620,-8603,-31618,-8611,-31616,-8619,-31614,-8627,-31612,-8635,-31609,-8643,-31607,-8651,-31605,-8659,-31603,-8667,-31601,-8675,-31598,-8683,-31596,-8691,-31594,-8700,-31592,-8708,-31589,-8716,-31587,-8724,-31585,-8732,-31583,-8740,-31581,-8748,-31578,-8756,-31576,-8764,-31574,-8772,-31572,-8780,-31569,-8788,-31567,-8796,-31565,-8804,-31563,-8813,-31560,-8821,-31558,-8829,-31556,-8837,-31554,-8845,-31551,-8853,-31549,-8861,-31547,-8869,-31545,-8877,-31542,-8885,-31540,-8893,-31538,-8901,-31535,-8909,-31533,-8917,-31531,-8925,-31529,-8933,-31526,-8942,-31524,-8950,-31522,-8958,-31519,-8966,-31517,-8974,-31515,-8982,-31513,-8990,-31510,-8998,-31508,-9006,-31506,-9014,-31503,-9022,-31501,-9030,-31499,-9038,-31496,-9046,-31494,-9054,-31492,-9062,-31490,-9070,-31487,-9078,-31485,-9087,-31483,-9095,-31480,-9103,-31478,-9111,-31476,-9119,-31473,-9127,-31471,-9135,-31469,-9143,-31466,-9151,-31464,-9159,-31462,-9167,-31459,-9175,-31457,-9183,-31455,-9191,-31452,-9199,-31450,-9207,-31447,-9215,-31445,-9223,-31443,-9231,-31440,-9239,-31438,-9247,-31436,-9255,-31433,-9263,-31431,-9271,-31429,-9280,-31426,-9288,-31424,-9296,-31421,-9304,-31419,-9312,-31417,-9320,-31414,-9328,-31412,-9336,-31410,-9344,-31407,-9352,-31405,-9360,-31402,-9368,-31400,-9376,-31398,-9384,-31395,-9392,-31393,-9400,-31390,-9408,-31388,-9416,-31386,-9424,-31383,-9432,-31381,-9440,-31378,-9448,-31376,-9456,-31374,-9464,-31371,-9472,-31369,-9480,-31366,-9488,-31364,-9496,-31361,-9504,-31359,-9512,-31357,-9520,-31354,-9528,-31352,-9536,-31349,-9544,-31347,-9552,-31344,-9560,-31342,-9568,-31339,-9576,-31337,-9584,-31335,-9592,-31332,-9600,-31330,-9608,-31327,-9616,-31325,-9624,-31322,-9632,-31320,-9640,-31317,-9648,-31315,-9656,-31312,-9664,-31310,-9672,-31308,-9680,-31305,-9688,-31303,-9696,-31300,-9704,-31298,-9712,-31295,-9720,-31293,-9728,-31290,-9736,-31288,-9744,-31285,-9752,-31283,-9760,-31280,-9768,-31278,-9776,-31275,-9784,-31273,-9792,-31270,-9800,-31268,-9808,-31265,-9816,-31263,-9824,-31260,-9832,-31258,-9840,-31255,-9848,-31253,-9856,-31250,-9864,-31248,-9872,-31245,-9880,-31243,-9888,-31240,-9896,-31237,-9904,-31235,-9912,-31232,-9920,-31230,-9928,-31227,-9936,-31225,-9944,-31222,-9952,-31220,-9960,-31217,-9968,-31215,-9976,-31212,-9984,-31210,-9992,-31207,-10000,-31204,-10008,-31202,-10016,-31199,-10024,-31197,-10032,-31194,-10040,-31192,-10048,-31189,-10056,-31186,-10064,-31184,-10072,-31181,-10080,-31179,-10088,-31176,-10096,-31174,-10104,-31171,-10112,-31168,-10120,-31166,-10128,-31163,-10136,-31161,-10144,-31158,-10152,-31155,-10160,-31153,-10167,-31150,-10175,-31148,-10183,-31145,-10191,-31142,-10199,-31140,-10207,-31137,-10215,-31135,-10223,-31132,-10231,-31129,-10239,-31127,-10247,-31124,-10255,-31122,-10263,-31119,-10271,-31116,-10279,-31114,-10287,-31111,-10295,-31108,-10303,-31106,-10311,-31103,-10319,-31101,-10327,-31098,-10335,-31095,-10343,-31093,-10350,-31090,-10358,-31087,-10366,-31085,-10374,-31082,-10382,-31079,-10390,-31077,-10398,-31074,-10406,-31071,-10414,-31069,-10422,-31066,-10430,-31063,-10438,-31061,-10446,-31058,-10454,-31055,-10462,-31053,-10470,-31050,-10478,-31047,-10485,-31045,-10493,-31042,-10501,-31039,-10509,-31037,-10517,-31034,-10525,-31031,-10533,-31029,-10541,-31026,-10549,-31023,-10557,-31020,-10565,-31018,-10573,-31015,-10581,-31012,-10589,-31010,-10597,-31007,-10604,-31004,-10612,-31002,-10620,-30999,-10628,-30996,-10636,-30993,-10644,-30991,-10652,-30988,-10660,-30985,-10668,-30982,-10676,-30980,-10684,-30977,-10692,-30974,-10700,-30972,-10707,-30969,-10715,-30966,-10723,-30963,-10731,-30961,-10739,-30958,-10747,-30955,-10755,-30952,-10763,-30950,-10771,-30947,-10779,-30944,-10787,-30941,-10795,-30939,-10802,-30936,-10810,-30933,-10818,-30930,-10826,-30928,-10834,-30925,-10842,-30922,-10850,-30919,-10858,-30916,-10866,-30914,-10874,-30911,-10881,-30908,-10889,-30905,-10897,-30903,-10905,-30900,-10913,-30897,-10921,-30894,-10929,-30891,-10937,-30889,-10945,-30886,-10953,-30883,-10960,-30880,-10968,-30877,-10976,-30875,-10984,-30872,-10992,-30869,-11000,-30866,-11008,-30863,-11016,-30861,-11024,-30858,-11031,-30855,-11039,-30852,-11047,-30849,-11055,-30846,-11063,-30844,-11071,-30841,-11079,-30838,-11087,-30835,-11095,-30832,-11102,-30829,-11110,-30827,-11118,-30824,-11126,-30821,-11134,-30818,-11142,-30815,-11150,-30812,-11158,-30810,-11165,-30807,-11173,-30804,-11181,-30801,-11189,-30798,-11197,-30795,-11205,-30792,-11213,-30789,-11221,-30787,-11228,-30784,-11236,-30781,-11244,-30778,-11252,-30775,-11260,-30772,-11268,-30769,-11276,-30767,-11284,-30764,-11291,-30761,-11299,-30758,-11307,-30755,-11315,-30752,-11323,-30749,-11331,-30746,-11339,-30743,-11346,-30740,-11354,-30738,-11362,-30735,-11370,-30732,-11378,-30729,-11386,-30726,-11394,-30723,-11401,-30720,-11409,-30717,-11417,-30714,-11425,-30711,-11433,-30708,-11441,-30706,-11449,-30703,-11456,-30700,-11464,-30697,-11472,-30694,-11480,-30691,-11488,-30688,-11496,-30685,-11503,-30682,-11511,-30679,-11519,-30676,-11527,-30673,-11535,-30670,-11543,-30667,-11551,-30664,-11558,-30661,-11566,-30658,-11574,-30656,-11582,-30653,-11590,-30650,-11598,-30647,-11605,-30644,-11613,-30641,-11621,-30638,-11629,-30635,-11637,-30632,-11645,-30629,-11652,-30626,-11660,-30623,-11668,-30620,-11676,-30617,-11684,-30614,-11692,-30611,-11699,-30608,-11707,-30605,-11715,-30602,-11723,-30599,-11731,-30596,-11738,-30593,-11746,-30590,-11754,-30587,-11762,-30584,-11770,-30581,-11778,-30578,-11785,-30575,-11793,-30572,-11801,-30569,-11809,-30566,-11817,-30563,-11824,-30560,-11832,-30557,-11840,-30554,-11848,-30551,-11856,-30548,-11863,-30545,-11871,-30542,-11879,-30539,-11887,-30536,-11895,-30533,-11903,-30529,-11910,-30526,-11918,-30523,-11926,-30520,-11934,-30517,-11942,-30514,-11949,-30511,-11957,-30508,-11965,-30505,-11973,-30502,-11981,-30499,-11988,-30496,-11996,-30493,-12004,-30490,-12012,-30487,-12020,-30484,-12027,-30481,-12035,-30477,-12043,-30474,-12051,-30471,-12058,-30468,-12066,-30465,-12074,-30462,-12082,-30459,-12090,-30456,-12097,-30453,-12105,-30450,-12113,-30447,-12121,-30443,-12129,-30440,-12136,-30437,-12144,-30434,-12152,-30431,-12160,-30428,-12167,-30425,-12175,-30422,-12183,-30419,-12191,-30416,-12199,-30412,-12206,-30409,-12214,-30406,-12222,-30403,-12230,-30400,-12237,-30397,-12245,-30394,-12253,-30391,-12261,-30387,-12269,-30384,-12276,-30381,-12284,-30378,-12292,-30375,-12300,-30372,-12307,-30369,-12315,-30365,-12323,-30362,-12331,-30359,-12338,-30356,-12346,-30353,-12354,-30350,-12362,-30346,-12369,-30343,-12377,-30340,-12385,-30337,-12393,-30334,-12400,-30331,-12408,-30327,-12416,-30324,-12424,-30321,-12431,-30318,-12439,-30315,-12447,-30312,-12455,-30308,-12462,-30305,-12470,-30302,-12478,-30299,-12486,-30296,-12493,-30292,-12501,-30289,-12509,-30286,-12517,-30283,-12524,-30280,-12532,-30276,-12540,-30273,-12548,-30270,-12555,-30267,-12563,-30264,-12571,-30260,-12579,-30257,-12586,-30254,-12594,-30251,-12602,-30248,-12610,-30244,-12617,-30241,-12625,-30238,-12633,-30235,-12640,-30231,-12648,-30228,-12656,-30225,-12664,-30222,-12671,-30218,-12679,-30215,-12687,-30212,-12695,-30209,-12702,-30206,-12710,-30202,-12718,-30199,-12725,-30196,-12733,-30192,-12741,-30189,-12749,-30186,-12756,-30183,-12764,-30179,-12772,-30176,-12779,-30173,-12787,-30170,-12795,-30166,-12803,-30163,-12810,-30160,-12818,-30157,-12826,-30153,-12833,-30150,-12841,-30147,-12849,-30143,-12857,-30140,-12864,-30137,-12872,-30134,-12880,-30130,-12887,-30127,-12895,-30124,-12903,-30120,-12910,-30117,-12918,-30114,-12926,-30110,-12934,-30107,-12941,-30104,-12949,-30101,-12957,-30097,-12964,-30094,-12972,-30091,-12980,-30087,-12987,-30084,-12995,-30081,-13003,-30077,-13010,-30074,-13018,-30071,-13026,-30067,-13034,-30064,-13041,-30061,-13049,-30057,-13057,-30054,-13064,-30051,-13072,-30047,-13080,-30044,-13087,-30041,-13095,-30037,-13103,-30034,-13110,-30031,-13118,-30027,-13126,-30024,-13133,-30021,-13141,-30017,-13149,-30014,-13156,-30010,-13164,-30007,-13172,-30004,-13179,-30000,-13187,-29997,-13195,-29994,-13202,-29990,-13210,-29987,-13218,-29984,-13225,-29980,-13233,-29977,-13241,-29973,-13248,-29970,-13256,-29967,-13264,-29963,-13271,-29960,-13279,-29956,-13287,-29953,-13294,-29950,-13302,-29946,-13310,-29943,-13317,-29939,-13325,-29936,-13333,-29933,-13340,-29929,-13348,-29926,-13356,-29922,-13363,-29919,-13371,-29916,-13379,-29912,-13386,-29909,-13394,-29905,-13401,-29902,-13409,-29898,-13417,-29895,-13424,-29892,-13432,-29888,-13440,-29885,-13447,-29881,-13455,-29878,-13463,-29874,-13470,-29871,-13478,-29867,-13486,-29864,-13493,-29861,-13501,-29857,-13508,-29854,-13516,-29850,-13524,-29847,-13531,-29843,-13539,-29840,-13547,-29836,-13554,-29833,-13562,-29829,-13569,-29826,-13577,-29823,-13585,-29819,-13592,-29816,-13600,-29812,-13608,-29809,-13615,-29805,-13623,-29802,-13630,-29798,-13638,-29795,-13646,-29791,-13653,-29788,-13661,-29784,-13668,-29781,-13676,-29777,-13684,-29774,-13691,-29770,-13699,-29767,-13707,-29763,-13714,-29760,-13722,-29756,-13729,-29753,-13737,-29749,-13745,-29746,-13752,-29742,-13760,-29739,-13767,-29735,-13775,-29732,-13783,-29728,-13790,-29725,-13798,-29721,-13805,-29718,-13813,-29714,-13821,-29710,-13828,-29707,-13836,-29703,-13843,-29700,-13851,-29696,-13859,-29693,-13866,-29689,-13874,-29686,-13881,-29682,-13889,-29679,-13896,-29675,-13904,-29671,-13912,-29668,-13919,-29664,-13927,-29661,-13934,-29657,-13942,-29654,-13950,-29650,-13957,-29647,-13965,-29643,-13972,-29639,-13980,-29636,-13987,-29632,-13995,-29629,-14003,-29625,-14010,-29622,-14018,-29618,-14025,-29614,-14033,-29611,-14040,-29607,-14048,-29604,-14056,-29600,-14063,-29596,-14071,-29593,-14078,-29589,-14086,-29586,-14093,-29582,-14101,-29578,-14109,-29575,-14116,-29571,-14124,-29568,-14131,-29564,-14139,-29560,-14146,-29557,-14154,-29553,-14161,-29549,-14169,-29546,-14177,-29542,-14184,-29539,-14192,-29535,-14199,-29531,-14207,-29528,-14214,-29524,-14222,-29520,-14229,-29517,-14237,-29513,-14245,-29510,-14252,-29506,-14260,-29502,-14267,-29499,-14275,-29495,-14282,-29491,-14290,-29488,-14297,-29484,-14305,-29480,-14312,-29477,-14320,-29473,-14327,-29469,-14335,-29466,-14343,-29462,-14350,-29458,-14358,-29455,-14365,-29451,-14373,-29447,-14380,-29444,-14388,-29440,-14395,-29436,-14403,-29433,-14410,-29429,-14418,-29425,-14425,-29422,-14433,-29418,-14440,-29414,-14448,-29411,-14455,-29407,-14463,-29403,-14470,-29399,-14478,-29396,-14485,-29392,-14493,-29388,-14500,-29385,-14508,-29381,-14516,-29377,-14523,-29373,-14531,-29370,-14538,-29366,-14546,-29362,-14553,-29359,-14561,-29355,-14568,-29351,-14576,-29347,-14583,-29344,-14591,-29340,-14598,-29336,-14606,-29333,-14613,-29329,-14621,-29325,-14628,-29321,-14636,-29318,-14643,-29314,-14651,-29310,-14658,-29306,-14666,-29303,-14673,-29299,-14681,-29295,-14688,-29291,-14695,-29288,-14703,-29284,-14710,-29280,-14718,-29276,-14725,-29273,-14733,-29269,-14740,-29265,-14748,-29261,-14755,-29257,-14763,-29254,-14770,-29250,-14778,-29246,-14785,-29242,-14793,-29239,-14800,-29235,-14808,-29231,-14815,-29227,-14823,-29223,-14830,-29220,-14838,-29216,-14845,-29212,-14853,-29208,-14860,-29204,-14867,-29201,-14875,-29197,-14882,-29193,-14890,-29189,-14897,-29185,-14905,-29182,-14912,-29178,-14920,-29174,-14927,-29170,-14935,-29166,-14942,-29163,-14950,-29159,-14957,-29155,-14964,-29151,-14972,-29147,-14979,-29143,-14987,-29140,-14994,-29136,-15002,-29132,-15009,-29128,-15017,-29124,-15024,-29120,-15031,-29117,-15039,-29113,-15046,-29109,-15054,-29105,-15061,-29101,-15069,-29097,-15076,-29093,-15084,-29090,-15091,-29086,-15098,-29082,-15106,-29078,-15113,-29074,-15121,-29070,-15128,-29066,-15136,-29063,-15143,-29059,-15150,-29055,-15158,-29051,-15165,-29047,-15173,-29043,-15180,-29039,-15188,-29035,-15195,-29032,-15202,-29028,-15210,-29024,-15217,-29020,-15225,-29016,-15232,-29012,-15239,-29008,-15247,-29004,-15254,-29000,-15262,-28997,-15269,-28993,-15277,-28989,-15284,-28985,-15291,-28981,-15299,-28977,-15306,-28973,-15314,-28969,-15321,-28965,-15328,-28961,-15336,-28957,-15343,-28954,-15351,-28950,-15358,-28946,-15365,-28942,-15373,-28938,-15380,-28934,-15388,-28930,-15395,-28926,-15402,-28922,-15410,-28918,-15417,-28914,-15425,-28910,-15432,-28906,-15439,-28902,-15447,-28898,-15454,-28894,-15462,-28891,-15469,-28887,-15476,-28883,-15484,-28879,-15491,-28875,-15498,-28871,-15506,-28867,-15513,-28863,-15521,-28859,-15528,-28855,-15535,-28851,-15543,-28847,-15550,-28843,-15557,-28839,-15565,-28835,-15572,-28831,-15580,-28827,-15587,-28823,-15594,-28819,-15602,-28815,-15609,-28811,-15616,-28807,-15624,-28803,-15631,-28799,-15639,-28795,-15646,-28791,-15653,-28787,-15661,-28783,-15668,-28779,-15675,-28775,-15683,-28771,-15690,-28767,-15697,-28763,-15705,-28759,-15712,-28755,-15719,-28751,-15727,-28747,-15734,-28743,-15741,-28739,-15749,-28735,-15756,-28731,-15764,-28727,-15771,-28723,-15778,-28719,-15786,-28715,-15793,-28711,-15800,-28707,-15808,-28703,-15815,-28699,-15822,-28695,-15830,-28691,-15837,-28686,-15844,-28682,-15852,-28678,-15859,-28674,-15866,-28670,-15874,-28666,-15881,-28662,-15888,-28658,-15896,-28654,-15903,-28650,-15910,-28646,-15918,-28642,-15925,-28638,-15932,-28634,-15939,-28630,-15947,-28626,-15954,-28621,-15961,-28617,-15969,-28613,-15976,-28609,-15983,-28605,-15991,-28601,-15998,-28597,-16005,-28593,-16013,-28589,-16020,-28585,-16027,-28581,-16035,-28576,-16042,-28572,-16049,-28568,-16056,-28564,-16064,-28560,-16071,-28556,-16078,-28552,-16086,-28548,-16093,-28544,-16100,-28539,-16108,-28535,-16115,-28531,-16122,-28527,-16129,-28523,-16137,-28519,-16144,-28515,-16151,-28511,-16159,-28507,-16166,-28502,-16173,-28498,-16180,-28494,-16188,-28490,-16195,-28486,-16202,-28482,-16210,-28478,-16217,-28473,-16224,-28469,-16231,-28465,-16239,-28461,-16246,-28457,-16253,-28453,-16261,-28448,-16268,-28444,-16275,-28440,-16282,-28436,-16290,-28432,-16297,-28428,-16304,-28424,-16311,-28419,-16319,-28415,-16326,-28411,-16333,-28407,-16340,-28403,-16348,-28398,-16355,-28394,-16362,-28390,-16369,-28386,-16377,-28382}; - -int16_t twb24576[16384] __attribute__((aligned(32))) = {32767,0,32766,-17,32766,-34,32766,-51,32766,-68,32766,-84,32766,-101,32766,-118,32766,-135,32766,-151,32766,-168,32766,-185,32766,-202,32766,-218,32766,-235,32766,-252,32765,-269,32765,-285,32765,-302,32765,-319,32765,-336,32765,-352,32764,-369,32764,-386,32764,-403,32764,-419,32764,-436,32763,-453,32763,-470,32763,-486,32763,-503,32762,-520,32762,-537,32762,-553,32762,-570,32761,-587,32761,-604,32761,-620,32760,-637,32760,-654,32760,-671,32759,-687,32759,-704,32759,-721,32758,-738,32758,-754,32757,-771,32757,-788,32757,-805,32756,-821,32756,-838,32755,-855,32755,-872,32754,-888,32754,-905,32754,-922,32753,-939,32753,-955,32752,-972,32752,-989,32751,-1006,32751,-1022,32750,-1039,32750,-1056,32749,-1073,32748,-1089,32748,-1106,32747,-1123,32747,-1140,32746,-1156,32746,-1173,32745,-1190,32744,-1207,32744,-1223,32743,-1240,32742,-1257,32742,-1274,32741,-1290,32740,-1307,32740,-1324,32739,-1340,32738,-1357,32738,-1374,32737,-1391,32736,-1407,32736,-1424,32735,-1441,32734,-1458,32733,-1474,32733,-1491,32732,-1508,32731,-1525,32730,-1541,32729,-1558,32729,-1575,32728,-1592,32727,-1608,32726,-1625,32725,-1642,32725,-1659,32724,-1675,32723,-1692,32722,-1709,32721,-1725,32720,-1742,32719,-1759,32718,-1776,32717,-1792,32717,-1809,32716,-1826,32715,-1843,32714,-1859,32713,-1876,32712,-1893,32711,-1909,32710,-1926,32709,-1943,32708,-1960,32707,-1976,32706,-1993,32705,-2010,32704,-2027,32703,-2043,32702,-2060,32701,-2077,32700,-2093,32699,-2110,32697,-2127,32696,-2144,32695,-2160,32694,-2177,32693,-2194,32692,-2210,32691,-2227,32690,-2244,32688,-2261,32687,-2277,32686,-2294,32685,-2311,32684,-2327,32683,-2344,32681,-2361,32680,-2378,32679,-2394,32678,-2411,32676,-2428,32675,-2444,32674,-2461,32673,-2478,32671,-2495,32670,-2511,32669,-2528,32668,-2545,32666,-2561,32665,-2578,32664,-2595,32662,-2611,32661,-2628,32660,-2645,32658,-2662,32657,-2678,32656,-2695,32654,-2712,32653,-2728,32651,-2745,32650,-2762,32649,-2778,32647,-2795,32646,-2812,32644,-2829,32643,-2845,32641,-2862,32640,-2879,32638,-2895,32637,-2912,32635,-2929,32634,-2945,32632,-2962,32631,-2979,32629,-2995,32628,-3012,32626,-3029,32625,-3045,32623,-3062,32622,-3079,32620,-3095,32618,-3112,32617,-3129,32615,-3146,32614,-3162,32612,-3179,32610,-3196,32609,-3212,32607,-3229,32605,-3246,32604,-3262,32602,-3279,32600,-3296,32599,-3312,32597,-3329,32595,-3346,32594,-3362,32592,-3379,32590,-3396,32588,-3412,32587,-3429,32585,-3446,32583,-3462,32581,-3479,32580,-3496,32578,-3512,32576,-3529,32574,-3546,32572,-3562,32571,-3579,32569,-3595,32567,-3612,32565,-3629,32563,-3645,32561,-3662,32559,-3679,32558,-3695,32556,-3712,32554,-3729,32552,-3745,32550,-3762,32548,-3779,32546,-3795,32544,-3812,32542,-3829,32540,-3845,32538,-3862,32536,-3878,32534,-3895,32532,-3912,32530,-3928,32528,-3945,32526,-3962,32524,-3978,32522,-3995,32520,-4012,32518,-4028,32516,-4045,32514,-4061,32512,-4078,32510,-4095,32508,-4111,32506,-4128,32503,-4145,32501,-4161,32499,-4178,32497,-4194,32495,-4211,32493,-4228,32491,-4244,32488,-4261,32486,-4277,32484,-4294,32482,-4311,32480,-4327,32477,-4344,32475,-4360,32473,-4377,32471,-4394,32468,-4410,32466,-4427,32464,-4444,32462,-4460,32459,-4477,32457,-4493,32455,-4510,32452,-4526,32450,-4543,32448,-4560,32445,-4576,32443,-4593,32441,-4609,32438,-4626,32436,-4643,32434,-4659,32431,-4676,32429,-4692,32426,-4709,32424,-4726,32422,-4742,32419,-4759,32417,-4775,32414,-4792,32412,-4808,32409,-4825,32407,-4842,32404,-4858,32402,-4875,32399,-4891,32397,-4908,32394,-4924,32392,-4941,32389,-4958,32387,-4974,32384,-4991,32382,-5007,32379,-5024,32377,-5040,32374,-5057,32371,-5073,32369,-5090,32366,-5107,32364,-5123,32361,-5140,32358,-5156,32356,-5173,32353,-5189,32350,-5206,32348,-5222,32345,-5239,32342,-5255,32340,-5272,32337,-5288,32334,-5305,32332,-5322,32329,-5338,32326,-5355,32323,-5371,32321,-5388,32318,-5404,32315,-5421,32312,-5437,32310,-5454,32307,-5470,32304,-5487,32301,-5503,32298,-5520,32295,-5536,32293,-5553,32290,-5569,32287,-5586,32284,-5602,32281,-5619,32278,-5635,32275,-5652,32273,-5668,32270,-5685,32267,-5701,32264,-5718,32261,-5734,32258,-5751,32255,-5767,32252,-5784,32249,-5800,32246,-5817,32243,-5833,32240,-5850,32237,-5866,32234,-5883,32231,-5899,32228,-5916,32225,-5932,32222,-5949,32219,-5965,32216,-5982,32213,-5998,32210,-6015,32207,-6031,32204,-6048,32201,-6064,32197,-6081,32194,-6097,32191,-6113,32188,-6130,32185,-6146,32182,-6163,32179,-6179,32176,-6196,32172,-6212,32169,-6229,32166,-6245,32163,-6262,32160,-6278,32156,-6294,32153,-6311,32150,-6327,32147,-6344,32143,-6360,32140,-6377,32137,-6393,32134,-6409,32130,-6426,32127,-6442,32124,-6459,32120,-6475,32117,-6492,32114,-6508,32110,-6524,32107,-6541,32104,-6557,32100,-6574,32097,-6590,32094,-6607,32090,-6623,32087,-6639,32084,-6656,32080,-6672,32077,-6689,32073,-6705,32070,-6721,32066,-6738,32063,-6754,32059,-6771,32056,-6787,32053,-6803,32049,-6820,32046,-6836,32042,-6852,32039,-6869,32035,-6885,32032,-6902,32028,-6918,32024,-6934,32021,-6951,32017,-6967,32014,-6983,32010,-7000,32007,-7016,32003,-7033,31999,-7049,31996,-7065,31992,-7082,31989,-7098,31985,-7114,31981,-7131,31978,-7147,31974,-7163,31970,-7180,31967,-7196,31963,-7212,31959,-7229,31956,-7245,31952,-7262,31948,-7278,31944,-7294,31941,-7311,31937,-7327,31933,-7343,31929,-7359,31926,-7376,31922,-7392,31918,-7408,31914,-7425,31911,-7441,31907,-7457,31903,-7474,31899,-7490,31895,-7506,31891,-7523,31888,-7539,31884,-7555,31880,-7572,31876,-7588,31872,-7604,31868,-7620,31864,-7637,31860,-7653,31856,-7669,31853,-7686,31849,-7702,31845,-7718,31841,-7734,31837,-7751,31833,-7767,31829,-7783,31825,-7800,31821,-7816,31817,-7832,31813,-7848,31809,-7865,31805,-7881,31801,-7897,31797,-7913,31793,-7930,31789,-7946,31785,-7962,31780,-7978,31776,-7995,31772,-8011,31768,-8027,31764,-8043,31760,-8060,31756,-8076,31752,-8092,31748,-8108,31743,-8125,31739,-8141,31735,-8157,31731,-8173,31727,-8190,31723,-8206,31718,-8222,31714,-8238,31710,-8254,31706,-8271,31701,-8287,31697,-8303,31693,-8319,31689,-8335,31684,-8352,31680,-8368,31676,-8384,31672,-8400,31667,-8416,31663,-8433,31659,-8449,31654,-8465,31650,-8481,31646,-8497,31641,-8514,31637,-8530,31633,-8546,31628,-8562,31624,-8578,31619,-8594,31615,-8611,31611,-8627,31606,-8643,31602,-8659,31597,-8675,31593,-8691,31588,-8708,31584,-8724,31580,-8740,31575,-8756,31571,-8772,31566,-8788,31562,-8804,31557,-8821,31553,-8837,31548,-8853,31544,-8869,31539,-8885,31534,-8901,31530,-8917,31525,-8933,31521,-8950,31516,-8966,31512,-8982,31507,-8998,31502,-9014,31498,-9030,31493,-9046,31489,-9062,31484,-9078,31479,-9095,31475,-9111,31470,-9127,31465,-9143,31461,-9159,31456,-9175,31451,-9191,31446,-9207,31442,-9223,31437,-9239,31432,-9255,31428,-9271,31423,-9288,31418,-9304,31413,-9320,31409,-9336,31404,-9352,31399,-9368,31394,-9384,31389,-9400,31385,-9416,31380,-9432,31375,-9448,31370,-9464,31365,-9480,31360,-9496,31356,-9512,31351,-9528,31346,-9544,31341,-9560,31336,-9576,31331,-9592,31326,-9608,31321,-9624,31316,-9640,31311,-9656,31307,-9672,31302,-9688,31297,-9704,31292,-9720,31287,-9736,31282,-9752,31277,-9768,31272,-9784,31267,-9800,31262,-9816,31257,-9832,31252,-9848,31247,-9864,31242,-9880,31236,-9896,31231,-9912,31226,-9928,31221,-9944,31216,-9960,31211,-9976,31206,-9992,31201,-10008,31196,-10024,31191,-10040,31185,-10056,31180,-10072,31175,-10088,31170,-10104,31165,-10120,31160,-10136,31154,-10152,31149,-10167,31144,-10183,31139,-10199,31134,-10215,31128,-10231,31123,-10247,31118,-10263,31113,-10279,31107,-10295,31102,-10311,31097,-10327,31092,-10343,31086,-10358,31081,-10374,31076,-10390,31070,-10406,31065,-10422,31060,-10438,31054,-10454,31049,-10470,31044,-10485,31038,-10501,31033,-10517,31028,-10533,31022,-10549,31017,-10565,31011,-10581,31006,-10597,31001,-10612,30995,-10628,30990,-10644,30984,-10660,30979,-10676,30973,-10692,30968,-10707,30962,-10723,30957,-10739,30951,-10755,30946,-10771,30940,-10787,30935,-10802,30929,-10818,30924,-10834,30918,-10850,30913,-10866,30907,-10881,30902,-10897,30896,-10913,30890,-10929,30885,-10945,30879,-10960,30874,-10976,30868,-10992,30862,-11008,30857,-11024,30851,-11039,30845,-11055,30840,-11071,30834,-11087,30828,-11102,30823,-11118,30817,-11134,30811,-11150,30806,-11165,30800,-11181,30794,-11197,30788,-11213,30783,-11228,30777,-11244,30771,-11260,30766,-11276,30760,-11291,30754,-11307,30748,-11323,30742,-11339,30737,-11354,30731,-11370,30725,-11386,30719,-11401,30713,-11417,30707,-11433,30702,-11449,30696,-11464,30690,-11480,30684,-11496,30678,-11511,30672,-11527,30666,-11543,30660,-11558,30655,-11574,30649,-11590,30643,-11605,30637,-11621,30631,-11637,30625,-11652,30619,-11668,30613,-11684,30607,-11699,30601,-11715,30595,-11731,30589,-11746,30583,-11762,30577,-11778,30571,-11793,30565,-11809,30559,-11824,30553,-11840,30547,-11856,30541,-11871,30535,-11887,30528,-11903,30522,-11918,30516,-11934,30510,-11949,30504,-11965,30498,-11981,30492,-11996,30486,-12012,30480,-12027,30473,-12043,30467,-12058,30461,-12074,30455,-12090,30449,-12105,30442,-12121,30436,-12136,30430,-12152,30424,-12167,30418,-12183,30411,-12199,30405,-12214,30399,-12230,30393,-12245,30386,-12261,30380,-12276,30374,-12292,30368,-12307,30361,-12323,30355,-12338,30349,-12354,30342,-12369,30336,-12385,30330,-12400,30323,-12416,30317,-12431,30311,-12447,30304,-12462,30298,-12478,30291,-12493,30285,-12509,30279,-12524,30272,-12540,30266,-12555,30259,-12571,30253,-12586,30247,-12602,30240,-12617,30234,-12633,30227,-12648,30221,-12664,30214,-12679,30208,-12695,30201,-12710,30195,-12725,30188,-12741,30182,-12756,30175,-12772,30169,-12787,30162,-12803,30156,-12818,30149,-12833,30142,-12849,30136,-12864,30129,-12880,30123,-12895,30116,-12910,30109,-12926,30103,-12941,30096,-12957,30090,-12972,30083,-12987,30076,-13003,30070,-13018,30063,-13034,30056,-13049,30050,-13064,30043,-13080,30036,-13095,30030,-13110,30023,-13126,30016,-13141,30009,-13156,30003,-13172,29996,-13187,29989,-13202,29983,-13218,29976,-13233,29969,-13248,29962,-13264,29955,-13279,29949,-13294,29942,-13310,29935,-13325,29928,-13340,29921,-13356,29915,-13371,29908,-13386,29901,-13401,29894,-13417,29887,-13432,29880,-13447,29873,-13463,29866,-13478,29860,-13493,29853,-13508,29846,-13524,29839,-13539,29832,-13554,29825,-13569,29818,-13585,29811,-13600,29804,-13615,29797,-13630,29790,-13646,29783,-13661,29776,-13676,29769,-13691,29762,-13707,29755,-13722,29748,-13737,29741,-13752,29734,-13767,29727,-13783,29720,-13798,29713,-13813,29706,-13828,29699,-13843,29692,-13859,29685,-13874,29678,-13889,29670,-13904,29663,-13919,29656,-13934,29649,-13950,29642,-13965,29635,-13980,29628,-13995,29621,-14010,29613,-14025,29606,-14040,29599,-14056,29592,-14071,29585,-14086,29577,-14101,29570,-14116,29563,-14131,29556,-14146,29548,-14161,29541,-14177,29534,-14192,29527,-14207,29519,-14222,29512,-14237,29505,-14252,29498,-14267,29490,-14282,29483,-14297,29476,-14312,29468,-14327,29461,-14343,29454,-14358,29446,-14373,29439,-14388,29432,-14403,29424,-14418,29417,-14433,29410,-14448,29402,-14463,29395,-14478,29387,-14493,29380,-14508,29372,-14523,29365,-14538,29358,-14553,29350,-14568,29343,-14583,29335,-14598,29328,-14613,29320,-14628,29313,-14643,29305,-14658,29298,-14673,29290,-14688,29283,-14703,29275,-14718,29268,-14733,29260,-14748,29253,-14763,29245,-14778,29238,-14793,29230,-14808,29222,-14823,29215,-14838,29207,-14853,29200,-14867,29192,-14882,29184,-14897,29177,-14912,29169,-14927,29162,-14942,29154,-14957,29146,-14972,29139,-14987,29131,-15002,29123,-15017,29116,-15031,29108,-15046,29100,-15061,29092,-15076,29085,-15091,29077,-15106,29069,-15121,29062,-15136,29054,-15150,29046,-15165,29038,-15180,29031,-15195,29023,-15210,29015,-15225,29007,-15239,28999,-15254,28992,-15269,28984,-15284,28976,-15299,28968,-15314,28960,-15328,28953,-15343,28945,-15358,28937,-15373,28929,-15388,28921,-15402,28913,-15417,28905,-15432,28897,-15447,28890,-15462,28882,-15476,28874,-15491,28866,-15506,28858,-15521,28850,-15535,28842,-15550,28834,-15565,28826,-15580,28818,-15594,28810,-15609,28802,-15624,28794,-15639,28786,-15653,28778,-15668,28770,-15683,28762,-15697,28754,-15712,28746,-15727,28738,-15741,28730,-15756,28722,-15771,28714,-15786,28706,-15800,28698,-15815,28690,-15830,28681,-15844,28673,-15859,28665,-15874,28657,-15888,28649,-15903,28641,-15918,28633,-15932,28625,-15947,28616,-15961,28608,-15976,28600,-15991,28592,-16005,28584,-16020,28575,-16035,28567,-16049,28559,-16064,28551,-16078,28543,-16093,28534,-16108,28526,-16122,28518,-16137,28510,-16151,28501,-16166,28493,-16180,28485,-16195,28477,-16210,28468,-16224,28460,-16239,28452,-16253,28443,-16268,28435,-16282,28427,-16297,28418,-16311,28410,-16326,28402,-16340,28393,-16355,28385,-16369,28377,-16384,28368,-16399,28360,-16413,28351,-16428,28343,-16442,28335,-16456,28326,-16471,28318,-16485,28309,-16500,28301,-16514,28292,-16529,28284,-16543,28275,-16558,28267,-16572,28259,-16587,28250,-16601,28242,-16616,28233,-16630,28225,-16644,28216,-16659,28208,-16673,28199,-16688,28190,-16702,28182,-16717,28173,-16731,28165,-16745,28156,-16760,28148,-16774,28139,-16789,28131,-16803,28122,-16817,28113,-16832,28105,-16846,28096,-16860,28087,-16875,28079,-16889,28070,-16904,28062,-16918,28053,-16932,28044,-16947,28036,-16961,28027,-16975,28018,-16990,28009,-17004,28001,-17018,27992,-17033,27983,-17047,27975,-17061,27966,-17075,27957,-17090,27948,-17104,27940,-17118,27931,-17133,27922,-17147,27913,-17161,27905,-17175,27896,-17190,27887,-17204,27878,-17218,27869,-17233,27861,-17247,27852,-17261,27843,-17275,27834,-17289,27825,-17304,27816,-17318,27808,-17332,27799,-17346,27790,-17361,27781,-17375,27772,-17389,27763,-17403,27754,-17417,27745,-17432,27736,-17446,27728,-17460,27719,-17474,27710,-17488,27701,-17502,27692,-17517,27683,-17531,27674,-17545,27665,-17559,27656,-17573,27647,-17587,27638,-17601,27629,-17616,27620,-17630,27611,-17644,27602,-17658,27593,-17672,27584,-17686,27575,-17700,27566,-17714,27557,-17728,27548,-17743,27538,-17757,27529,-17771,27520,-17785,27511,-17799,27502,-17813,27493,-17827,27484,-17841,27475,-17855,27466,-17869,27456,-17883,27447,-17897,27438,-17911,27429,-17925,27420,-17939,27411,-17953,27401,-17967,27392,-17981,27383,-17995,27374,-18009,27365,-18023,27355,-18037,27346,-18051,27337,-18065,27328,-18079,27319,-18093,27309,-18107,27300,-18121,27291,-18135,27281,-18149,27272,-18163,27263,-18177,27254,-18191,27244,-18205,27235,-18219,27226,-18233,27216,-18247,27207,-18261,27198,-18274,27188,-18288,27179,-18302,27170,-18316,27160,-18330,27151,-18344,27141,-18358,27132,-18372,27123,-18386,27113,-18399,27104,-18413,27094,-18427,27085,-18441,27076,-18455,27066,-18469,27057,-18483,27047,-18496,27038,-18510,27028,-18524,27019,-18538,27009,-18552,27000,-18565,26990,-18579,26981,-18593,26971,-18607,26962,-18621,26952,-18634,26943,-18648,26933,-18662,26924,-18676,26914,-18690,26905,-18703,26895,-18717,26885,-18731,26876,-18745,26866,-18758,26857,-18772,26847,-18786,26837,-18799,26828,-18813,26818,-18827,26809,-18841,26799,-18854,26789,-18868,26780,-18882,26770,-18895,26760,-18909,26751,-18923,26741,-18936,26731,-18950,26722,-18964,26712,-18977,26702,-18991,26692,-19005,26683,-19018,26673,-19032,26663,-19046,26654,-19059,26644,-19073,26634,-19087,26624,-19100,26615,-19114,26605,-19127,26595,-19141,26585,-19155,26575,-19168,26566,-19182,26556,-19195,26546,-19209,26536,-19222,26526,-19236,26516,-19250,26507,-19263,26497,-19277,26487,-19290,26477,-19304,26467,-19317,26457,-19331,26447,-19344,26437,-19358,26428,-19371,26418,-19385,26408,-19398,26398,-19412,26388,-19425,26378,-19439,26368,-19452,26358,-19466,26348,-19479,26338,-19493,26328,-19506,26318,-19520,26308,-19533,26298,-19547,26288,-19560,26278,-19574,26268,-19587,26258,-19600,26248,-19614,26238,-19627,26228,-19641,26218,-19654,26208,-19668,26198,-19681,26188,-19694,26178,-19708,26168,-19721,26158,-19734,26148,-19748,26137,-19761,26127,-19775,26117,-19788,26107,-19801,26097,-19815,26087,-19828,26077,-19841,26067,-19855,26056,-19868,26046,-19881,26036,-19895,26026,-19908,26016,-19921,26006,-19934,25995,-19948,25985,-19961,25975,-19974,25965,-19988,25954,-20001,25944,-20014,25934,-20027,25924,-20041,25913,-20054,25903,-20067,25893,-20080,25883,-20094,25872,-20107,25862,-20120,25852,-20133,25842,-20147,25831,-20160,25821,-20173,25811,-20186,25800,-20199,25790,-20213,25780,-20226,25769,-20239,25759,-20252,25749,-20265,25738,-20278,25728,-20292,25717,-20305,25707,-20318,25697,-20331,25686,-20344,25676,-20357,25665,-20370,25655,-20384,25645,-20397,25634,-20410,25624,-20423,25613,-20436,25603,-20449,25592,-20462,25582,-20475,25571,-20488,25561,-20501,25550,-20514,25540,-20528,25529,-20541,25519,-20554,25508,-20567,25498,-20580,25487,-20593,25477,-20606,25466,-20619,25456,-20632,25445,-20645,25435,-20658,25424,-20671,25414,-20684,25403,-20697,25392,-20710,25382,-20723,25371,-20736,25361,-20749,25350,-20762,25339,-20775,25329,-20788,25318,-20801,25307,-20814,25297,-20826,25286,-20839,25276,-20852,25265,-20865,25254,-20878,25243,-20891,25233,-20904,25222,-20917,25211,-20930,25201,-20943,25190,-20956,25179,-20968,25169,-20981,25158,-20994,25147,-21007,25136,-21020,25126,-21033,25115,-21046,25104,-21058,25093,-21071,25083,-21084,25072,-21097,25061,-21110,25050,-21123,25039,-21135,25029,-21148,25018,-21161,25007,-21174,24996,-21187,24985,-21199,24974,-21212,24964,-21225,24953,-21238,24942,-21250,24931,-21263,24920,-21276,24909,-21289,24898,-21301,24887,-21314,24877,-21327,24866,-21340,24855,-21352,24844,-21365,24833,-21378,24822,-21390,24811,-21403,24800,-21416,24789,-21428,24778,-21441,24767,-21454,24756,-21466,24745,-21479,24734,-21492,24723,-21504,24712,-21517,24701,-21530,24690,-21542,24679,-21555,24668,-21567,24657,-21580,24646,-21593,24635,-21605,24624,-21618,24613,-21630,24602,-21643,24591,-21656,24580,-21668,24569,-21681,24558,-21693,24546,-21706,24535,-21718,24524,-21731,24513,-21744,24502,-21756,24491,-21769,24480,-21781,24469,-21794,24457,-21806,24446,-21819,24435,-21831,24424,-21844,24413,-21856,24402,-21869,24390,-21881,24379,-21894,24368,-21906,24357,-21918,24346,-21931,24334,-21943,24323,-21956,24312,-21968,24301,-21981,24289,-21993,24278,-22005,24267,-22018,24256,-22030,24244,-22043,24233,-22055,24222,-22067,24211,-22080,24199,-22092,24188,-22105,24177,-22117,24165,-22129,24154,-22142,24143,-22154,24131,-22166,24120,-22179,24109,-22191,24097,-22203,24086,-22216,24075,-22228,24063,-22240,24052,-22253,24041,-22265,24029,-22277,24018,-22289,24006,-22302,23995,-22314,23984,-22326,23972,-22339,23961,-22351,23949,-22363,23938,-22375,23926,-22388,23915,-22400,23903,-22412,23892,-22424,23881,-22436,23869,-22449,23858,-22461,23846,-22473,23835,-22485,23823,-22497,23812,-22510,23800,-22522,23789,-22534,23777,-22546,23766,-22558,23754,-22570,23742,-22583,23731,-22595,23719,-22607,23708,-22619,23696,-22631,23685,-22643,23673,-22655,23661,-22667,23650,-22679,23638,-22692,23627,-22704,23615,-22716,23603,-22728,23592,-22740,23580,-22752,23569,-22764,23557,-22776,23545,-22788,23534,-22800,23522,-22812,23510,-22824,23499,-22836,23487,-22848,23475,-22860,23464,-22872,23452,-22884,23440,-22896,23428,-22908,23417,-22920,23405,-22932,23393,-22944,23382,-22956,23370,-22968,23358,-22980,23346,-22992,23335,-23004,23323,-23016,23311,-23028,23299,-23040,23287,-23051,23276,-23063,23264,-23075,23252,-23087,23240,-23099,23228,-23111,23217,-23123,23205,-23135,23193,-23147,23181,-23158,23169,-23170,23157,-23182,23146,-23194,23134,-23206,23122,-23218,23110,-23229,23098,-23241,23086,-23253,23074,-23265,23062,-23277,23050,-23288,23039,-23300,23027,-23312,23015,-23324,23003,-23336,22991,-23347,22979,-23359,22967,-23371,22955,-23383,22943,-23394,22931,-23406,22919,-23418,22907,-23429,22895,-23441,22883,-23453,22871,-23465,22859,-23476,22847,-23488,22835,-23500,22823,-23511,22811,-23523,22799,-23535,22787,-23546,22775,-23558,22763,-23570,22751,-23581,22739,-23593,22727,-23604,22715,-23616,22703,-23628,22691,-23639,22678,-23651,22666,-23662,22654,-23674,22642,-23686,22630,-23697,22618,-23709,22606,-23720,22594,-23732,22582,-23743,22569,-23755,22557,-23767,22545,-23778,22533,-23790,22521,-23801,22509,-23813,22496,-23824,22484,-23836,22472,-23847,22460,-23859,22448,-23870,22435,-23882,22423,-23893,22411,-23904,22399,-23916,22387,-23927,22374,-23939,22362,-23950,22350,-23962,22338,-23973,22325,-23985,22313,-23996,22301,-24007,22288,-24019,22276,-24030,22264,-24042,22252,-24053,22239,-24064,22227,-24076,22215,-24087,22202,-24098,22190,-24110,22178,-24121,22165,-24132,22153,-24144,22141,-24155,22128,-24166,22116,-24178,22104,-24189,22091,-24200,22079,-24212,22066,-24223,22054,-24234,22042,-24245,22029,-24257,22017,-24268,22004,-24279,21992,-24290,21980,-24302,21967,-24313,21955,-24324,21942,-24335,21930,-24347,21917,-24358,21905,-24369,21893,-24380,21880,-24391,21868,-24403,21855,-24414,21843,-24425,21830,-24436,21818,-24447,21805,-24458,21793,-24470,21780,-24481,21768,-24492,21755,-24503,21743,-24514,21730,-24525,21717,-24536,21705,-24547,21692,-24559,21680,-24570,21667,-24581,21655,-24592,21642,-24603,21629,-24614,21617,-24625,21604,-24636,21592,-24647,21579,-24658,21566,-24669,21554,-24680,21541,-24691,21529,-24702,21516,-24713,21503,-24724,21491,-24735,21478,-24746,21465,-24757,21453,-24768,21440,-24779,21427,-24790,21415,-24801,21402,-24812,21389,-24823,21377,-24834,21364,-24845,21351,-24856,21339,-24867,21326,-24878,21313,-24888,21300,-24899,21288,-24910,21275,-24921,21262,-24932,21249,-24943,21237,-24954,21224,-24965,21211,-24975,21198,-24986,21186,-24997,21173,-25008,21160,-25019,21147,-25030,21134,-25040,21122,-25051,21109,-25062,21096,-25073,21083,-25084,21070,-25094,21057,-25105,21045,-25116,21032,-25127,21019,-25137,21006,-25148,20993,-25159,20980,-25170,20967,-25180,20955,-25191,20942,-25202,20929,-25212,20916,-25223,20903,-25234,20890,-25244,20877,-25255,20864,-25266,20851,-25277,20838,-25287,20825,-25298,20813,-25308,20800,-25319,20787,-25330,20774,-25340,20761,-25351,20748,-25362,20735,-25372,20722,-25383,20709,-25393,20696,-25404,20683,-25415,20670,-25425,20657,-25436,20644,-25446,20631,-25457,20618,-25467,20605,-25478,20592,-25488,20579,-25499,20566,-25509,20553,-25520,20540,-25530,20527,-25541,20513,-25551,20500,-25562,20487,-25572,20474,-25583,20461,-25593,20448,-25604,20435,-25614,20422,-25625,20409,-25635,20396,-25646,20383,-25656,20369,-25666,20356,-25677,20343,-25687,20330,-25698,20317,-25708,20304,-25718,20291,-25729,20277,-25739,20264,-25750,20251,-25760,20238,-25770,20225,-25781,20212,-25791,20198,-25801,20185,-25812,20172,-25822,20159,-25832,20146,-25843,20132,-25853,20119,-25863,20106,-25873,20093,-25884,20079,-25894,20066,-25904,20053,-25914,20040,-25925,20026,-25935,20013,-25945,20000,-25955,19987,-25966,19973,-25976,19960,-25986,19947,-25996,19933,-26007,19920,-26017,19907,-26027,19894,-26037,19880,-26047,19867,-26057,19854,-26068,19840,-26078,19827,-26088,19814,-26098,19800,-26108,19787,-26118,19774,-26128,19760,-26138,19747,-26149,19733,-26159,19720,-26169,19707,-26179,19693,-26189,19680,-26199,19667,-26209,19653,-26219,19640,-26229,19626,-26239,19613,-26249,19599,-26259,19586,-26269,19573,-26279,19559,-26289,19546,-26299,19532,-26309,19519,-26319,19505,-26329,19492,-26339,19478,-26349,19465,-26359,19451,-26369,19438,-26379,19424,-26389,19411,-26399,19397,-26409,19384,-26419,19370,-26429,19357,-26438,19343,-26448,19330,-26458,19316,-26468,19303,-26478,19289,-26488,19276,-26498,19262,-26508,19249,-26517,19235,-26527,19221,-26537,19208,-26547,19194,-26557,19181,-26567,19167,-26576,19154,-26586,19140,-26596,19126,-26606,19113,-26616,19099,-26625,19086,-26635,19072,-26645,19058,-26655,19045,-26664,19031,-26674,19017,-26684,19004,-26693,18990,-26703,18976,-26713,18963,-26723,18949,-26732,18935,-26742,18922,-26752,18908,-26761,18894,-26771,18881,-26781,18867,-26790,18853,-26800,18840,-26810,18826,-26819,18812,-26829,18798,-26838,18785,-26848,18771,-26858,18757,-26867,18744,-26877,18730,-26886,18716,-26896,18702,-26906,18689,-26915,18675,-26925,18661,-26934,18647,-26944,18633,-26953,18620,-26963,18606,-26972,18592,-26982,18578,-26991,18564,-27001,18551,-27010,18537,-27020,18523,-27029,18509,-27039,18495,-27048,18482,-27058,18468,-27067,18454,-27077,18440,-27086,18426,-27095,18412,-27105,18398,-27114,18385,-27124,18371,-27133,18357,-27142,18343,-27152,18329,-27161,18315,-27171,18301,-27180,18287,-27189,18273,-27199,18260,-27208,18246,-27217,18232,-27227,18218,-27236,18204,-27245,18190,-27255,18176,-27264,18162,-27273,18148,-27282,18134,-27292,18120,-27301,18106,-27310,18092,-27320,18078,-27329,18064,-27338,18050,-27347,18036,-27356,18022,-27366,18008,-27375,17994,-27384,17980,-27393,17966,-27402,17952,-27412,17938,-27421,17924,-27430,17910,-27439,17896,-27448,17882,-27457,17868,-27467,17854,-27476,17840,-27485,17826,-27494,17812,-27503,17798,-27512,17784,-27521,17770,-27530,17756,-27539,17742,-27549,17727,-27558,17713,-27567,17699,-27576,17685,-27585,17671,-27594,17657,-27603,17643,-27612,17629,-27621,17615,-27630,17600,-27639,17586,-27648,17572,-27657,17558,-27666,17544,-27675,17530,-27684,17516,-27693,17501,-27702,17487,-27711,17473,-27720,17459,-27729,17445,-27737,17431,-27746,17416,-27755,17402,-27764,17388,-27773,17374,-27782,17360,-27791,17345,-27800,17331,-27809,17317,-27817,17303,-27826,17288,-27835,17274,-27844,17260,-27853,17246,-27862,17232,-27870,17217,-27879,17203,-27888,17189,-27897,17174,-27906,17160,-27914,17146,-27923,17132,-27932,17117,-27941,17103,-27949,17089,-27958,17074,-27967,17060,-27976,17046,-27984,17032,-27993,17017,-28002,17003,-28010,16989,-28019,16974,-28028,16960,-28037,16946,-28045,16931,-28054,16917,-28063,16903,-28071,16888,-28080,16874,-28088,16859,-28097,16845,-28106,16831,-28114,16816,-28123,16802,-28132,16788,-28140,16773,-28149,16759,-28157,16744,-28166,16730,-28174,16716,-28183,16701,-28191,16687,-28200,16672,-28209,16658,-28217,16643,-28226,16629,-28234,16615,-28243,16600,-28251,16586,-28260,16571,-28268,16557,-28276,16542,-28285,16528,-28293,16513,-28302,16499,-28310,16484,-28319,16470,-28327,16455,-28336,16441,-28344,16427,-28352,16412,-28361,16398,-28369,16383,-28378,16368,-28386,16354,-28394,16339,-28403,16325,-28411,16310,-28419,16296,-28428,16281,-28436,16267,-28444,16252,-28453,16238,-28461,16223,-28469,16209,-28478,16194,-28486,16179,-28494,16165,-28502,16150,-28511,16136,-28519,16121,-28527,16107,-28535,16092,-28544,16077,-28552,16063,-28560,16048,-28568,16034,-28576,16019,-28585,16004,-28593,15990,-28601,15975,-28609,15960,-28617,15946,-28626,15931,-28634,15917,-28642,15902,-28650,15887,-28658,15873,-28666,15858,-28674,15843,-28682,15829,-28691,15814,-28699,15799,-28707,15785,-28715,15770,-28723,15755,-28731,15740,-28739,15726,-28747,15711,-28755,15696,-28763,15682,-28771,15667,-28779,15652,-28787,15638,-28795,15623,-28803,15608,-28811,15593,-28819,15579,-28827,15564,-28835,15549,-28843,15534,-28851,15520,-28859,15505,-28867,15490,-28875,15475,-28883,15461,-28891,15446,-28898,15431,-28906,15416,-28914,15401,-28922,15387,-28930,15372,-28938,15357,-28946,15342,-28954,15327,-28961,15313,-28969,15298,-28977,15283,-28985,15268,-28993,15253,-29000,15238,-29008,15224,-29016,15209,-29024,15194,-29032,15179,-29039,15164,-29047,15149,-29055,15135,-29063,15120,-29070,15105,-29078,15090,-29086,15075,-29093,15060,-29101,15045,-29109,15030,-29117,15016,-29124,15001,-29132,14986,-29140,14971,-29147,14956,-29155,14941,-29163,14926,-29170,14911,-29178,14896,-29185,14881,-29193,14866,-29201,14852,-29208,14837,-29216,14822,-29223,14807,-29231,14792,-29239,14777,-29246,14762,-29254,14747,-29261,14732,-29269,14717,-29276,14702,-29284,14687,-29291,14672,-29299,14657,-29306,14642,-29314,14627,-29321,14612,-29329,14597,-29336,14582,-29344,14567,-29351,14552,-29359,14537,-29366,14522,-29373,14507,-29381,14492,-29388,14477,-29396,14462,-29403,14447,-29411,14432,-29418,14417,-29425,14402,-29433,14387,-29440,14372,-29447,14357,-29455,14342,-29462,14326,-29469,14311,-29477,14296,-29484,14281,-29491,14266,-29499,14251,-29506,14236,-29513,14221,-29520,14206,-29528,14191,-29535,14176,-29542,14160,-29549,14145,-29557,14130,-29564,14115,-29571,14100,-29578,14085,-29586,14070,-29593,14055,-29600,14039,-29607,14024,-29614,14009,-29622,13994,-29629,13979,-29636,13964,-29643,13949,-29650,13933,-29657,13918,-29664,13903,-29671,13888,-29679,13873,-29686,13858,-29693,13842,-29700,13827,-29707,13812,-29714,13797,-29721,13782,-29728,13766,-29735,13751,-29742,13736,-29749,13721,-29756,13706,-29763,13690,-29770,13675,-29777,13660,-29784,13645,-29791,13629,-29798,13614,-29805,13599,-29812,13584,-29819,13568,-29826,13553,-29833,13538,-29840,13523,-29847,13507,-29854,13492,-29861,13477,-29867,13462,-29874,13446,-29881,13431,-29888,13416,-29895,13400,-29902,13385,-29909,13370,-29916,13355,-29922,13339,-29929,13324,-29936,13309,-29943,13293,-29950,13278,-29956,13263,-29963,13247,-29970,13232,-29977,13217,-29984,13201,-29990,13186,-29997,13171,-30004,13155,-30010,13140,-30017,13125,-30024,13109,-30031,13094,-30037,13079,-30044,13063,-30051,13048,-30057,13033,-30064,13017,-30071,13002,-30077,12986,-30084,12971,-30091,12956,-30097,12940,-30104,12925,-30110,12909,-30117,12894,-30124,12879,-30130,12863,-30137,12848,-30143,12832,-30150,12817,-30157,12802,-30163,12786,-30170,12771,-30176,12755,-30183,12740,-30189,12724,-30196,12709,-30202,12694,-30209,12678,-30215,12663,-30222,12647,-30228,12632,-30235,12616,-30241,12601,-30248,12585,-30254,12570,-30260,12554,-30267,12539,-30273,12523,-30280,12508,-30286,12492,-30292,12477,-30299,12461,-30305,12446,-30312,12430,-30318,12415,-30324,12399,-30331,12384,-30337,12368,-30343,12353,-30350,12337,-30356,12322,-30362,12306,-30369,12291,-30375,12275,-30381,12260,-30387,12244,-30394,12229,-30400,12213,-30406,12198,-30412,12182,-30419,12166,-30425,12151,-30431,12135,-30437,12120,-30443,12104,-30450,12089,-30456,12073,-30462,12057,-30468,12042,-30474,12026,-30481,12011,-30487,11995,-30493,11980,-30499,11964,-30505,11948,-30511,11933,-30517,11917,-30523,11902,-30529,11886,-30536,11870,-30542,11855,-30548,11839,-30554,11823,-30560,11808,-30566,11792,-30572,11777,-30578,11761,-30584,11745,-30590,11730,-30596,11714,-30602,11698,-30608,11683,-30614,11667,-30620,11651,-30626,11636,-30632,11620,-30638,11604,-30644,11589,-30650,11573,-30656,11557,-30661,11542,-30667,11526,-30673,11510,-30679,11495,-30685,11479,-30691,11463,-30697,11448,-30703,11432,-30708,11416,-30714,11400,-30720,11385,-30726,11369,-30732,11353,-30738,11338,-30743,11322,-30749,11306,-30755,11290,-30761,11275,-30767,11259,-30772,11243,-30778,11227,-30784,11212,-30789,11196,-30795,11180,-30801,11164,-30807,11149,-30812,11133,-30818,11117,-30824,11101,-30829,11086,-30835,11070,-30841,11054,-30846,11038,-30852,11023,-30858,11007,-30863,10991,-30869,10975,-30875,10959,-30880,10944,-30886,10928,-30891,10912,-30897,10896,-30903,10880,-30908,10865,-30914,10849,-30919,10833,-30925,10817,-30930,10801,-30936,10786,-30941,10770,-30947,10754,-30952,10738,-30958,10722,-30963,10706,-30969,10691,-30974,10675,-30980,10659,-30985,10643,-30991,10627,-30996,10611,-31002,10596,-31007,10580,-31012,10564,-31018,10548,-31023,10532,-31029,10516,-31034,10500,-31039,10484,-31045,10469,-31050,10453,-31055,10437,-31061,10421,-31066,10405,-31071,10389,-31077,10373,-31082,10357,-31087,10342,-31093,10326,-31098,10310,-31103,10294,-31108,10278,-31114,10262,-31119,10246,-31124,10230,-31129,10214,-31135,10198,-31140,10182,-31145,10166,-31150,10151,-31155,10135,-31161,10119,-31166,10103,-31171,10087,-31176,10071,-31181,10055,-31186,10039,-31192,10023,-31197,10007,-31202,9991,-31207,9975,-31212,9959,-31217,9943,-31222,9927,-31227,9911,-31232,9895,-31237,9879,-31243,9863,-31248,9847,-31253,9831,-31258,9815,-31263,9799,-31268,9783,-31273,9767,-31278,9751,-31283,9735,-31288,9719,-31293,9703,-31298,9687,-31303,9671,-31308,9655,-31312,9639,-31317,9623,-31322,9607,-31327,9591,-31332,9575,-31337,9559,-31342,9543,-31347,9527,-31352,9511,-31357,9495,-31361,9479,-31366,9463,-31371,9447,-31376,9431,-31381,9415,-31386,9399,-31390,9383,-31395,9367,-31400,9351,-31405,9335,-31410,9319,-31414,9303,-31419,9287,-31424,9270,-31429,9254,-31433,9238,-31438,9222,-31443,9206,-31447,9190,-31452,9174,-31457,9158,-31462,9142,-31466,9126,-31471,9110,-31476,9094,-31480,9077,-31485,9061,-31490,9045,-31494,9029,-31499,9013,-31503,8997,-31508,8981,-31513,8965,-31517,8949,-31522,8932,-31526,8916,-31531,8900,-31535,8884,-31540,8868,-31545,8852,-31549,8836,-31554,8820,-31558,8803,-31563,8787,-31567,8771,-31572,8755,-31576,8739,-31581,8723,-31585,8707,-31589,8690,-31594,8674,-31598,8658,-31603,8642,-31607,8626,-31612,8610,-31616,8593,-31620,8577,-31625,8561,-31629,8545,-31634,8529,-31638,8513,-31642,8496,-31647,8480,-31651,8464,-31655,8448,-31660,8432,-31664,8415,-31668,8399,-31673,8383,-31677,8367,-31681,8351,-31685,8334,-31690,8318,-31694,8302,-31698,8286,-31702,8270,-31707,8253,-31711,8237,-31715,8221,-31719,8205,-31724,8189,-31728,8172,-31732,8156,-31736,8140,-31740,8124,-31744,8107,-31749,8091,-31753,8075,-31757,8059,-31761,8042,-31765,8026,-31769,8010,-31773,7994,-31777,7977,-31781,7961,-31786,7945,-31790,7929,-31794,7912,-31798,7896,-31802,7880,-31806,7864,-31810,7847,-31814,7831,-31818,7815,-31822,7799,-31826,7782,-31830,7766,-31834,7750,-31838,7733,-31842,7717,-31846,7701,-31850,7685,-31854,7668,-31857,7652,-31861,7636,-31865,7619,-31869,7603,-31873,7587,-31877,7571,-31881,7554,-31885,7538,-31889,7522,-31892,7505,-31896,7489,-31900,7473,-31904,7456,-31908,7440,-31912,7424,-31915,7407,-31919,7391,-31923,7375,-31927,7358,-31930,7342,-31934,7326,-31938,7310,-31942,7293,-31945,7277,-31949,7261,-31953,7244,-31957,7228,-31960,7211,-31964,7195,-31968,7179,-31971,7162,-31975,7146,-31979,7130,-31982,7113,-31986,7097,-31990,7081,-31993,7064,-31997,7048,-32000,7032,-32004,7015,-32008,6999,-32011,6982,-32015,6966,-32018,6950,-32022,6933,-32025,6917,-32029,6901,-32033,6884,-32036,6868,-32040,6851,-32043,6835,-32047,6819,-32050,6802,-32054,6786,-32057,6770,-32060,6753,-32064,6737,-32067,6720,-32071,6704,-32074,6688,-32078,6671,-32081,6655,-32085,6638,-32088,6622,-32091,6606,-32095,6589,-32098,6573,-32101,6556,-32105,6540,-32108,6523,-32111,6507,-32115,6491,-32118,6474,-32121,6458,-32125,6441,-32128,6425,-32131,6408,-32135,6392,-32138,6376,-32141,6359,-32144,6343,-32148,6326,-32151,6310,-32154,6293,-32157,6277,-32161,6261,-32164,6244,-32167,6228,-32170,6211,-32173,6195,-32177,6178,-32180,6162,-32183,6145,-32186,6129,-32189,6112,-32192,6096,-32195,6080,-32198,6063,-32202,6047,-32205,6030,-32208,6014,-32211,5997,-32214,5981,-32217,5964,-32220,5948,-32223,5931,-32226,5915,-32229,5898,-32232,5882,-32235,5865,-32238,5849,-32241,5832,-32244,5816,-32247,5799,-32250,5783,-32253,5766,-32256,5750,-32259,5733,-32262,5717,-32265,5700,-32268,5684,-32271,5667,-32274,5651,-32276,5634,-32279,5618,-32282,5601,-32285,5585,-32288,5568,-32291,5552,-32294,5535,-32296,5519,-32299,5502,-32302,5486,-32305,5469,-32308,5453,-32311,5436,-32313,5420,-32316,5403,-32319,5387,-32322,5370,-32324,5354,-32327,5337,-32330,5321,-32333,5304,-32335,5287,-32338,5271,-32341,5254,-32343,5238,-32346,5221,-32349,5205,-32351,5188,-32354,5172,-32357,5155,-32359,5139,-32362,5122,-32365,5106,-32367,5089,-32370,5072,-32372,5056,-32375,5039,-32378,5023,-32380,5006,-32383,4990,-32385,4973,-32388,4957,-32390,4940,-32393,4923,-32395,4907,-32398,4890,-32400,4874,-32403,4857,-32405,4841,-32408,4824,-32410,4807,-32413,4791,-32415,4774,-32418,4758,-32420,4741,-32423,4725,-32425,4708,-32427,4691,-32430,4675,-32432,4658,-32435,4642,-32437,4625,-32439,4608,-32442,4592,-32444,4575,-32446,4559,-32449,4542,-32451,4525,-32453,4509,-32456,4492,-32458,4476,-32460,4459,-32463,4443,-32465,4426,-32467,4409,-32469,4393,-32472,4376,-32474,4359,-32476,4343,-32478,4326,-32481,4310,-32483,4293,-32485,4276,-32487,4260,-32489,4243,-32492,4227,-32494,4210,-32496,4193,-32498,4177,-32500,4160,-32502,4144,-32504,4127,-32507,4110,-32509,4094,-32511,4077,-32513,4060,-32515,4044,-32517,4027,-32519,4011,-32521,3994,-32523,3977,-32525,3961,-32527,3944,-32529,3927,-32531,3911,-32533,3894,-32535,3877,-32537,3861,-32539,3844,-32541,3828,-32543,3811,-32545,3794,-32547,3778,-32549,3761,-32551,3744,-32553,3728,-32555,3711,-32557,3694,-32559,3678,-32560,3661,-32562,3644,-32564,3628,-32566,3611,-32568,3594,-32570,3578,-32572,3561,-32573,3545,-32575,3528,-32577,3511,-32579,3495,-32581,3478,-32582,3461,-32584,3445,-32586,3428,-32588,3411,-32589,3395,-32591,3378,-32593,3361,-32595,3345,-32596,3328,-32598,3311,-32600,3295,-32601,3278,-32603,3261,-32605,3245,-32606,3228,-32608,3211,-32610,3195,-32611,3178,-32613,3161,-32615,3145,-32616,3128,-32618,3111,-32619,3094,-32621,3078,-32623,3061,-32624,3044,-32626,3028,-32627,3011,-32629,2994,-32630,2978,-32632,2961,-32633,2944,-32635,2928,-32636,2911,-32638,2894,-32639,2878,-32641,2861,-32642,2844,-32644,2828,-32645,2811,-32647,2794,-32648,2777,-32650,2761,-32651,2744,-32652,2727,-32654,2711,-32655,2694,-32657,2677,-32658,2661,-32659,2644,-32661,2627,-32662,2610,-32663,2594,-32665,2577,-32666,2560,-32667,2544,-32669,2527,-32670,2510,-32671,2494,-32672,2477,-32674,2460,-32675,2443,-32676,2427,-32677,2410,-32679,2393,-32680,2377,-32681,2360,-32682,2343,-32684,2326,-32685,2310,-32686,2293,-32687,2276,-32688,2260,-32689,2243,-32691,2226,-32692,2209,-32693,2193,-32694,2176,-32695,2159,-32696,2143,-32697,2126,-32698,2109,-32700,2092,-32701,2076,-32702,2059,-32703,2042,-32704,2026,-32705,2009,-32706,1992,-32707,1975,-32708,1959,-32709,1942,-32710,1925,-32711,1908,-32712,1892,-32713,1875,-32714,1858,-32715,1842,-32716,1825,-32717,1808,-32718,1791,-32718,1775,-32719,1758,-32720,1741,-32721,1724,-32722,1708,-32723,1691,-32724,1674,-32725,1658,-32726,1641,-32726,1624,-32727,1607,-32728,1591,-32729,1574,-32730,1557,-32730,1540,-32731,1524,-32732,1507,-32733,1490,-32734,1473,-32734,1457,-32735,1440,-32736,1423,-32737,1406,-32737,1390,-32738,1373,-32739,1356,-32739,1339,-32740,1323,-32741,1306,-32741,1289,-32742,1273,-32743,1256,-32743,1239,-32744,1222,-32745,1206,-32745,1189,-32746,1172,-32747,1155,-32747,1139,-32748,1122,-32748,1105,-32749,1088,-32749,1072,-32750,1055,-32751,1038,-32751,1021,-32752,1005,-32752,988,-32753,971,-32753,954,-32754,938,-32754,921,-32755,904,-32755,887,-32755,871,-32756,854,-32756,837,-32757,820,-32757,804,-32758,787,-32758,770,-32758,753,-32759,737,-32759,720,-32760,703,-32760,686,-32760,670,-32761,653,-32761,636,-32761,619,-32762,603,-32762,586,-32762,569,-32763,552,-32763,536,-32763,519,-32763,502,-32764,485,-32764,469,-32764,452,-32764,435,-32765,418,-32765,402,-32765,385,-32765,368,-32765,351,-32766,335,-32766,318,-32766,301,-32766,284,-32766,268,-32766,251,-32767,234,-32767,217,-32767,201,-32767,184,-32767,167,-32767,150,-32767,134,-32767,117,-32767,100,-32767,83,-32767,67,-32767,50,-32767,33,-32767,16,-32767,0,-32767,-17,-32767,-34,-32767,-51,-32767,-68,-32767,-84,-32767,-101,-32767,-118,-32767,-135,-32767,-151,-32767,-168,-32767,-185,-32767,-202,-32767,-218,-32767,-235,-32767,-252,-32767,-269,-32766,-285,-32766,-302,-32766,-319,-32766,-336,-32766,-352,-32766,-369,-32765,-386,-32765,-403,-32765,-419,-32765,-436,-32765,-453,-32764,-470,-32764,-486,-32764,-503,-32764,-520,-32763,-537,-32763,-553,-32763,-570,-32763,-587,-32762,-604,-32762,-620,-32762,-637,-32761,-654,-32761,-671,-32761,-687,-32760,-704,-32760,-721,-32760,-738,-32759,-754,-32759,-771,-32758,-788,-32758,-805,-32758,-821,-32757,-838,-32757,-855,-32756,-872,-32756,-888,-32755,-905,-32755,-922,-32755,-939,-32754,-955,-32754,-972,-32753,-989,-32753,-1006,-32752,-1022,-32752,-1039,-32751,-1056,-32751,-1073,-32750,-1089,-32749,-1106,-32749,-1123,-32748,-1140,-32748,-1156,-32747,-1173,-32747,-1190,-32746,-1207,-32745,-1223,-32745,-1240,-32744,-1257,-32743,-1274,-32743,-1290,-32742,-1307,-32741,-1324,-32741,-1340,-32740,-1357,-32739,-1374,-32739,-1391,-32738,-1407,-32737,-1424,-32737,-1441,-32736,-1458,-32735,-1474,-32734,-1491,-32734,-1508,-32733,-1525,-32732,-1541,-32731,-1558,-32730,-1575,-32730,-1592,-32729,-1608,-32728,-1625,-32727,-1642,-32726,-1659,-32726,-1675,-32725,-1692,-32724,-1709,-32723,-1725,-32722,-1742,-32721,-1759,-32720,-1776,-32719,-1792,-32718,-1809,-32718,-1826,-32717,-1843,-32716,-1859,-32715,-1876,-32714,-1893,-32713,-1909,-32712,-1926,-32711,-1943,-32710,-1960,-32709,-1976,-32708,-1993,-32707,-2010,-32706,-2027,-32705,-2043,-32704,-2060,-32703,-2077,-32702,-2093,-32701,-2110,-32700,-2127,-32698,-2144,-32697,-2160,-32696,-2177,-32695,-2194,-32694,-2210,-32693,-2227,-32692,-2244,-32691,-2261,-32689,-2277,-32688,-2294,-32687,-2311,-32686,-2327,-32685,-2344,-32684,-2361,-32682,-2378,-32681,-2394,-32680,-2411,-32679,-2428,-32677,-2444,-32676,-2461,-32675,-2478,-32674,-2495,-32672,-2511,-32671,-2528,-32670,-2545,-32669,-2561,-32667,-2578,-32666,-2595,-32665,-2611,-32663,-2628,-32662,-2645,-32661,-2662,-32659,-2678,-32658,-2695,-32657,-2712,-32655,-2728,-32654,-2745,-32652,-2762,-32651,-2778,-32650,-2795,-32648,-2812,-32647,-2829,-32645,-2845,-32644,-2862,-32642,-2879,-32641,-2895,-32639,-2912,-32638,-2929,-32636,-2945,-32635,-2962,-32633,-2979,-32632,-2995,-32630,-3012,-32629,-3029,-32627,-3045,-32626,-3062,-32624,-3079,-32623,-3095,-32621,-3112,-32619,-3129,-32618,-3146,-32616,-3162,-32615,-3179,-32613,-3196,-32611,-3212,-32610,-3229,-32608,-3246,-32606,-3262,-32605,-3279,-32603,-3296,-32601,-3312,-32600,-3329,-32598,-3346,-32596,-3362,-32595,-3379,-32593,-3396,-32591,-3412,-32589,-3429,-32588,-3446,-32586,-3462,-32584,-3479,-32582,-3496,-32581,-3512,-32579,-3529,-32577,-3546,-32575,-3562,-32573,-3579,-32572,-3595,-32570,-3612,-32568,-3629,-32566,-3645,-32564,-3662,-32562,-3679,-32560,-3695,-32559,-3712,-32557,-3729,-32555,-3745,-32553,-3762,-32551,-3779,-32549,-3795,-32547,-3812,-32545,-3829,-32543,-3845,-32541,-3862,-32539,-3878,-32537,-3895,-32535,-3912,-32533,-3928,-32531,-3945,-32529,-3962,-32527,-3978,-32525,-3995,-32523,-4012,-32521,-4028,-32519,-4045,-32517,-4061,-32515,-4078,-32513,-4095,-32511,-4111,-32509,-4128,-32507,-4145,-32504,-4161,-32502,-4178,-32500,-4194,-32498,-4211,-32496,-4228,-32494,-4244,-32492,-4261,-32489,-4277,-32487,-4294,-32485,-4311,-32483,-4327,-32481,-4344,-32478,-4360,-32476,-4377,-32474,-4394,-32472,-4410,-32469,-4427,-32467,-4444,-32465,-4460,-32463,-4477,-32460,-4493,-32458,-4510,-32456,-4526,-32453,-4543,-32451,-4560,-32449,-4576,-32446,-4593,-32444,-4609,-32442,-4626,-32439,-4643,-32437,-4659,-32435,-4676,-32432,-4692,-32430,-4709,-32427,-4726,-32425,-4742,-32423,-4759,-32420,-4775,-32418,-4792,-32415,-4808,-32413,-4825,-32410,-4842,-32408,-4858,-32405,-4875,-32403,-4891,-32400,-4908,-32398,-4924,-32395,-4941,-32393,-4958,-32390,-4974,-32388,-4991,-32385,-5007,-32383,-5024,-32380,-5040,-32378,-5057,-32375,-5073,-32372,-5090,-32370,-5107,-32367,-5123,-32365,-5140,-32362,-5156,-32359,-5173,-32357,-5189,-32354,-5206,-32351,-5222,-32349,-5239,-32346,-5255,-32343,-5272,-32341,-5288,-32338,-5305,-32335,-5322,-32333,-5338,-32330,-5355,-32327,-5371,-32324,-5388,-32322,-5404,-32319,-5421,-32316,-5437,-32313,-5454,-32311,-5470,-32308,-5487,-32305,-5503,-32302,-5520,-32299,-5536,-32296,-5553,-32294,-5569,-32291,-5586,-32288,-5602,-32285,-5619,-32282,-5635,-32279,-5652,-32276,-5668,-32274,-5685,-32271,-5701,-32268,-5718,-32265,-5734,-32262,-5751,-32259,-5767,-32256,-5784,-32253,-5800,-32250,-5817,-32247,-5833,-32244,-5850,-32241,-5866,-32238,-5883,-32235,-5899,-32232,-5916,-32229,-5932,-32226,-5949,-32223,-5965,-32220,-5982,-32217,-5998,-32214,-6015,-32211,-6031,-32208,-6048,-32205,-6064,-32202,-6081,-32198,-6097,-32195,-6113,-32192,-6130,-32189,-6146,-32186,-6163,-32183,-6179,-32180,-6196,-32177,-6212,-32173,-6229,-32170,-6245,-32167,-6262,-32164,-6278,-32161,-6294,-32157,-6311,-32154,-6327,-32151,-6344,-32148,-6360,-32144,-6377,-32141,-6393,-32138,-6409,-32135,-6426,-32131,-6442,-32128,-6459,-32125,-6475,-32121,-6492,-32118,-6508,-32115,-6524,-32111,-6541,-32108,-6557,-32105,-6574,-32101,-6590,-32098,-6607,-32095,-6623,-32091,-6639,-32088,-6656,-32085,-6672,-32081,-6689,-32078,-6705,-32074,-6721,-32071,-6738,-32067,-6754,-32064,-6771,-32060,-6787,-32057,-6803,-32054,-6820,-32050,-6836,-32047,-6852,-32043,-6869,-32040,-6885,-32036,-6902,-32033,-6918,-32029,-6934,-32025,-6951,-32022,-6967,-32018,-6983,-32015,-7000,-32011,-7016,-32008,-7033,-32004,-7049,-32000,-7065,-31997,-7082,-31993,-7098,-31990,-7114,-31986,-7131,-31982,-7147,-31979,-7163,-31975,-7180,-31971,-7196,-31968,-7212,-31964,-7229,-31960,-7245,-31957,-7262,-31953,-7278,-31949,-7294,-31945,-7311,-31942,-7327,-31938,-7343,-31934,-7359,-31930,-7376,-31927,-7392,-31923,-7408,-31919,-7425,-31915,-7441,-31912,-7457,-31908,-7474,-31904,-7490,-31900,-7506,-31896,-7523,-31892,-7539,-31889,-7555,-31885,-7572,-31881,-7588,-31877,-7604,-31873,-7620,-31869,-7637,-31865,-7653,-31861,-7669,-31857,-7686,-31854,-7702,-31850,-7718,-31846,-7734,-31842,-7751,-31838,-7767,-31834,-7783,-31830,-7800,-31826,-7816,-31822,-7832,-31818,-7848,-31814,-7865,-31810,-7881,-31806,-7897,-31802,-7913,-31798,-7930,-31794,-7946,-31790,-7962,-31786,-7978,-31781,-7995,-31777,-8011,-31773,-8027,-31769,-8043,-31765,-8060,-31761,-8076,-31757,-8092,-31753,-8108,-31749,-8125,-31744,-8141,-31740,-8157,-31736,-8173,-31732,-8190,-31728,-8206,-31724,-8222,-31719,-8238,-31715,-8254,-31711,-8271,-31707,-8287,-31702,-8303,-31698,-8319,-31694,-8335,-31690,-8352,-31685,-8368,-31681,-8384,-31677,-8400,-31673,-8416,-31668,-8433,-31664,-8449,-31660,-8465,-31655,-8481,-31651,-8497,-31647,-8514,-31642,-8530,-31638,-8546,-31634,-8562,-31629,-8578,-31625,-8594,-31620,-8611,-31616,-8627,-31612,-8643,-31607,-8659,-31603,-8675,-31598,-8691,-31594,-8708,-31589,-8724,-31585,-8740,-31581,-8756,-31576,-8772,-31572,-8788,-31567,-8804,-31563,-8821,-31558,-8837,-31554,-8853,-31549,-8869,-31545,-8885,-31540,-8901,-31535,-8917,-31531,-8933,-31526,-8950,-31522,-8966,-31517,-8982,-31513,-8998,-31508,-9014,-31503,-9030,-31499,-9046,-31494,-9062,-31490,-9078,-31485,-9095,-31480,-9111,-31476,-9127,-31471,-9143,-31466,-9159,-31462,-9175,-31457,-9191,-31452,-9207,-31447,-9223,-31443,-9239,-31438,-9255,-31433,-9271,-31429,-9288,-31424,-9304,-31419,-9320,-31414,-9336,-31410,-9352,-31405,-9368,-31400,-9384,-31395,-9400,-31390,-9416,-31386,-9432,-31381,-9448,-31376,-9464,-31371,-9480,-31366,-9496,-31361,-9512,-31357,-9528,-31352,-9544,-31347,-9560,-31342,-9576,-31337,-9592,-31332,-9608,-31327,-9624,-31322,-9640,-31317,-9656,-31312,-9672,-31308,-9688,-31303,-9704,-31298,-9720,-31293,-9736,-31288,-9752,-31283,-9768,-31278,-9784,-31273,-9800,-31268,-9816,-31263,-9832,-31258,-9848,-31253,-9864,-31248,-9880,-31243,-9896,-31237,-9912,-31232,-9928,-31227,-9944,-31222,-9960,-31217,-9976,-31212,-9992,-31207,-10008,-31202,-10024,-31197,-10040,-31192,-10056,-31186,-10072,-31181,-10088,-31176,-10104,-31171,-10120,-31166,-10136,-31161,-10152,-31155,-10167,-31150,-10183,-31145,-10199,-31140,-10215,-31135,-10231,-31129,-10247,-31124,-10263,-31119,-10279,-31114,-10295,-31108,-10311,-31103,-10327,-31098,-10343,-31093,-10358,-31087,-10374,-31082,-10390,-31077,-10406,-31071,-10422,-31066,-10438,-31061,-10454,-31055,-10470,-31050,-10485,-31045,-10501,-31039,-10517,-31034,-10533,-31029,-10549,-31023,-10565,-31018,-10581,-31012,-10597,-31007,-10612,-31002,-10628,-30996,-10644,-30991,-10660,-30985,-10676,-30980,-10692,-30974,-10707,-30969,-10723,-30963,-10739,-30958,-10755,-30952,-10771,-30947,-10787,-30941,-10802,-30936,-10818,-30930,-10834,-30925,-10850,-30919,-10866,-30914,-10881,-30908,-10897,-30903,-10913,-30897,-10929,-30891,-10945,-30886,-10960,-30880,-10976,-30875,-10992,-30869,-11008,-30863,-11024,-30858,-11039,-30852,-11055,-30846,-11071,-30841,-11087,-30835,-11102,-30829,-11118,-30824,-11134,-30818,-11150,-30812,-11165,-30807,-11181,-30801,-11197,-30795,-11213,-30789,-11228,-30784,-11244,-30778,-11260,-30772,-11276,-30767,-11291,-30761,-11307,-30755,-11323,-30749,-11339,-30743,-11354,-30738,-11370,-30732,-11386,-30726,-11401,-30720,-11417,-30714,-11433,-30708,-11449,-30703,-11464,-30697,-11480,-30691,-11496,-30685,-11511,-30679,-11527,-30673,-11543,-30667,-11558,-30661,-11574,-30656,-11590,-30650,-11605,-30644,-11621,-30638,-11637,-30632,-11652,-30626,-11668,-30620,-11684,-30614,-11699,-30608,-11715,-30602,-11731,-30596,-11746,-30590,-11762,-30584,-11778,-30578,-11793,-30572,-11809,-30566,-11824,-30560,-11840,-30554,-11856,-30548,-11871,-30542,-11887,-30536,-11903,-30529,-11918,-30523,-11934,-30517,-11949,-30511,-11965,-30505,-11981,-30499,-11996,-30493,-12012,-30487,-12027,-30481,-12043,-30474,-12058,-30468,-12074,-30462,-12090,-30456,-12105,-30450,-12121,-30443,-12136,-30437,-12152,-30431,-12167,-30425,-12183,-30419,-12199,-30412,-12214,-30406,-12230,-30400,-12245,-30394,-12261,-30387,-12276,-30381,-12292,-30375,-12307,-30369,-12323,-30362,-12338,-30356,-12354,-30350,-12369,-30343,-12385,-30337,-12400,-30331,-12416,-30324,-12431,-30318,-12447,-30312,-12462,-30305,-12478,-30299,-12493,-30292,-12509,-30286,-12524,-30280,-12540,-30273,-12555,-30267,-12571,-30260,-12586,-30254,-12602,-30248,-12617,-30241,-12633,-30235,-12648,-30228,-12664,-30222,-12679,-30215,-12695,-30209,-12710,-30202,-12725,-30196,-12741,-30189,-12756,-30183,-12772,-30176,-12787,-30170,-12803,-30163,-12818,-30157,-12833,-30150,-12849,-30143,-12864,-30137,-12880,-30130,-12895,-30124,-12910,-30117,-12926,-30110,-12941,-30104,-12957,-30097,-12972,-30091,-12987,-30084,-13003,-30077,-13018,-30071,-13034,-30064,-13049,-30057,-13064,-30051,-13080,-30044,-13095,-30037,-13110,-30031,-13126,-30024,-13141,-30017,-13156,-30010,-13172,-30004,-13187,-29997,-13202,-29990,-13218,-29984,-13233,-29977,-13248,-29970,-13264,-29963,-13279,-29956,-13294,-29950,-13310,-29943,-13325,-29936,-13340,-29929,-13356,-29922,-13371,-29916,-13386,-29909,-13401,-29902,-13417,-29895,-13432,-29888,-13447,-29881,-13463,-29874,-13478,-29867,-13493,-29861,-13508,-29854,-13524,-29847,-13539,-29840,-13554,-29833,-13569,-29826,-13585,-29819,-13600,-29812,-13615,-29805,-13630,-29798,-13646,-29791,-13661,-29784,-13676,-29777,-13691,-29770,-13707,-29763,-13722,-29756,-13737,-29749,-13752,-29742,-13767,-29735,-13783,-29728,-13798,-29721,-13813,-29714,-13828,-29707,-13843,-29700,-13859,-29693,-13874,-29686,-13889,-29679,-13904,-29671,-13919,-29664,-13934,-29657,-13950,-29650,-13965,-29643,-13980,-29636,-13995,-29629,-14010,-29622,-14025,-29614,-14040,-29607,-14056,-29600,-14071,-29593,-14086,-29586,-14101,-29578,-14116,-29571,-14131,-29564,-14146,-29557,-14161,-29549,-14177,-29542,-14192,-29535,-14207,-29528,-14222,-29520,-14237,-29513,-14252,-29506,-14267,-29499,-14282,-29491,-14297,-29484,-14312,-29477,-14327,-29469,-14343,-29462,-14358,-29455,-14373,-29447,-14388,-29440,-14403,-29433,-14418,-29425,-14433,-29418,-14448,-29411,-14463,-29403,-14478,-29396,-14493,-29388,-14508,-29381,-14523,-29373,-14538,-29366,-14553,-29359,-14568,-29351,-14583,-29344,-14598,-29336,-14613,-29329,-14628,-29321,-14643,-29314,-14658,-29306,-14673,-29299,-14688,-29291,-14703,-29284,-14718,-29276,-14733,-29269,-14748,-29261,-14763,-29254,-14778,-29246,-14793,-29239,-14808,-29231,-14823,-29223,-14838,-29216,-14853,-29208,-14867,-29201,-14882,-29193,-14897,-29185,-14912,-29178,-14927,-29170,-14942,-29163,-14957,-29155,-14972,-29147,-14987,-29140,-15002,-29132,-15017,-29124,-15031,-29117,-15046,-29109,-15061,-29101,-15076,-29093,-15091,-29086,-15106,-29078,-15121,-29070,-15136,-29063,-15150,-29055,-15165,-29047,-15180,-29039,-15195,-29032,-15210,-29024,-15225,-29016,-15239,-29008,-15254,-29000,-15269,-28993,-15284,-28985,-15299,-28977,-15314,-28969,-15328,-28961,-15343,-28954,-15358,-28946,-15373,-28938,-15388,-28930,-15402,-28922,-15417,-28914,-15432,-28906,-15447,-28898,-15462,-28891,-15476,-28883,-15491,-28875,-15506,-28867,-15521,-28859,-15535,-28851,-15550,-28843,-15565,-28835,-15580,-28827,-15594,-28819,-15609,-28811,-15624,-28803,-15639,-28795,-15653,-28787,-15668,-28779,-15683,-28771,-15697,-28763,-15712,-28755,-15727,-28747,-15741,-28739,-15756,-28731,-15771,-28723,-15786,-28715,-15800,-28707,-15815,-28699,-15830,-28691,-15844,-28682,-15859,-28674,-15874,-28666,-15888,-28658,-15903,-28650,-15918,-28642,-15932,-28634,-15947,-28626,-15961,-28617,-15976,-28609,-15991,-28601,-16005,-28593,-16020,-28585,-16035,-28576,-16049,-28568,-16064,-28560,-16078,-28552,-16093,-28544,-16108,-28535,-16122,-28527,-16137,-28519,-16151,-28511,-16166,-28502,-16180,-28494,-16195,-28486,-16210,-28478,-16224,-28469,-16239,-28461,-16253,-28453,-16268,-28444,-16282,-28436,-16297,-28428,-16311,-28419,-16326,-28411,-16340,-28403,-16355,-28394,-16369,-28386,-16384,-28378,-16399,-28369,-16413,-28361,-16428,-28352,-16442,-28344,-16456,-28336,-16471,-28327,-16485,-28319,-16500,-28310,-16514,-28302,-16529,-28293,-16543,-28285,-16558,-28276,-16572,-28268,-16587,-28260,-16601,-28251,-16616,-28243,-16630,-28234,-16644,-28226,-16659,-28217,-16673,-28209,-16688,-28200,-16702,-28191,-16717,-28183,-16731,-28174,-16745,-28166,-16760,-28157,-16774,-28149,-16789,-28140,-16803,-28132,-16817,-28123,-16832,-28114,-16846,-28106,-16860,-28097,-16875,-28088,-16889,-28080,-16904,-28071,-16918,-28063,-16932,-28054,-16947,-28045,-16961,-28037,-16975,-28028,-16990,-28019,-17004,-28010,-17018,-28002,-17033,-27993,-17047,-27984,-17061,-27976,-17075,-27967,-17090,-27958,-17104,-27949,-17118,-27941,-17133,-27932,-17147,-27923,-17161,-27914,-17175,-27906,-17190,-27897,-17204,-27888,-17218,-27879,-17233,-27870,-17247,-27862,-17261,-27853,-17275,-27844,-17289,-27835,-17304,-27826,-17318,-27817,-17332,-27809,-17346,-27800,-17361,-27791,-17375,-27782,-17389,-27773,-17403,-27764,-17417,-27755,-17432,-27746,-17446,-27737,-17460,-27729,-17474,-27720,-17488,-27711,-17502,-27702,-17517,-27693,-17531,-27684,-17545,-27675,-17559,-27666,-17573,-27657,-17587,-27648,-17601,-27639,-17616,-27630,-17630,-27621,-17644,-27612,-17658,-27603,-17672,-27594,-17686,-27585,-17700,-27576,-17714,-27567,-17728,-27558,-17743,-27549,-17757,-27539,-17771,-27530,-17785,-27521,-17799,-27512,-17813,-27503,-17827,-27494,-17841,-27485,-17855,-27476,-17869,-27467,-17883,-27457,-17897,-27448,-17911,-27439,-17925,-27430,-17939,-27421,-17953,-27412,-17967,-27402,-17981,-27393,-17995,-27384,-18009,-27375,-18023,-27366,-18037,-27356,-18051,-27347,-18065,-27338,-18079,-27329,-18093,-27320,-18107,-27310,-18121,-27301,-18135,-27292,-18149,-27282,-18163,-27273,-18177,-27264,-18191,-27255,-18205,-27245,-18219,-27236,-18233,-27227,-18247,-27217,-18261,-27208,-18274,-27199,-18288,-27189,-18302,-27180,-18316,-27171,-18330,-27161,-18344,-27152,-18358,-27142,-18372,-27133,-18386,-27124,-18399,-27114,-18413,-27105,-18427,-27095,-18441,-27086,-18455,-27077,-18469,-27067,-18483,-27058,-18496,-27048,-18510,-27039,-18524,-27029,-18538,-27020,-18552,-27010,-18565,-27001,-18579,-26991,-18593,-26982,-18607,-26972,-18621,-26963,-18634,-26953,-18648,-26944,-18662,-26934,-18676,-26925,-18690,-26915,-18703,-26906,-18717,-26896,-18731,-26886,-18745,-26877,-18758,-26867,-18772,-26858,-18786,-26848,-18799,-26838,-18813,-26829,-18827,-26819,-18841,-26810,-18854,-26800,-18868,-26790,-18882,-26781,-18895,-26771,-18909,-26761,-18923,-26752,-18936,-26742,-18950,-26732,-18964,-26723,-18977,-26713,-18991,-26703,-19005,-26693,-19018,-26684,-19032,-26674,-19046,-26664,-19059,-26655,-19073,-26645,-19087,-26635,-19100,-26625,-19114,-26616,-19127,-26606,-19141,-26596,-19155,-26586,-19168,-26576,-19182,-26567,-19195,-26557,-19209,-26547,-19222,-26537,-19236,-26527,-19250,-26517,-19263,-26508,-19277,-26498,-19290,-26488,-19304,-26478,-19317,-26468,-19331,-26458,-19344,-26448,-19358,-26438,-19371,-26429,-19385,-26419,-19398,-26409,-19412,-26399,-19425,-26389,-19439,-26379,-19452,-26369,-19466,-26359,-19479,-26349,-19493,-26339,-19506,-26329,-19520,-26319,-19533,-26309,-19547,-26299,-19560,-26289,-19574,-26279,-19587,-26269,-19600,-26259,-19614,-26249,-19627,-26239,-19641,-26229,-19654,-26219,-19668,-26209,-19681,-26199,-19694,-26189,-19708,-26179,-19721,-26169,-19734,-26159,-19748,-26149,-19761,-26138,-19775,-26128,-19788,-26118,-19801,-26108,-19815,-26098,-19828,-26088,-19841,-26078,-19855,-26068,-19868,-26057,-19881,-26047,-19895,-26037,-19908,-26027,-19921,-26017,-19934,-26007,-19948,-25996,-19961,-25986,-19974,-25976,-19988,-25966,-20001,-25955,-20014,-25945,-20027,-25935,-20041,-25925,-20054,-25914,-20067,-25904,-20080,-25894,-20094,-25884,-20107,-25873,-20120,-25863,-20133,-25853,-20147,-25843,-20160,-25832,-20173,-25822,-20186,-25812,-20199,-25801,-20213,-25791,-20226,-25781,-20239,-25770,-20252,-25760,-20265,-25750,-20278,-25739,-20292,-25729,-20305,-25718,-20318,-25708,-20331,-25698,-20344,-25687,-20357,-25677,-20370,-25666,-20384,-25656,-20397,-25646,-20410,-25635,-20423,-25625,-20436,-25614,-20449,-25604,-20462,-25593,-20475,-25583,-20488,-25572,-20501,-25562,-20514,-25551,-20528,-25541,-20541,-25530,-20554,-25520,-20567,-25509,-20580,-25499,-20593,-25488,-20606,-25478,-20619,-25467,-20632,-25457,-20645,-25446,-20658,-25436,-20671,-25425,-20684,-25415,-20697,-25404,-20710,-25393,-20723,-25383,-20736,-25372,-20749,-25362,-20762,-25351,-20775,-25340,-20788,-25330,-20801,-25319,-20814,-25308,-20826,-25298,-20839,-25287,-20852,-25277,-20865,-25266,-20878,-25255,-20891,-25244,-20904,-25234,-20917,-25223,-20930,-25212,-20943,-25202,-20956,-25191,-20968,-25180,-20981,-25170,-20994,-25159,-21007,-25148,-21020,-25137,-21033,-25127,-21046,-25116,-21058,-25105,-21071,-25094,-21084,-25084,-21097,-25073,-21110,-25062,-21123,-25051,-21135,-25040,-21148,-25030,-21161,-25019,-21174,-25008,-21187,-24997,-21199,-24986,-21212,-24975,-21225,-24965,-21238,-24954,-21250,-24943,-21263,-24932,-21276,-24921,-21289,-24910,-21301,-24899,-21314,-24888,-21327,-24878,-21340,-24867,-21352,-24856,-21365,-24845,-21378,-24834,-21390,-24823,-21403,-24812,-21416,-24801,-21428,-24790,-21441,-24779,-21454,-24768,-21466,-24757,-21479,-24746,-21492,-24735,-21504,-24724,-21517,-24713,-21530,-24702,-21542,-24691,-21555,-24680,-21567,-24669,-21580,-24658,-21593,-24647,-21605,-24636,-21618,-24625,-21630,-24614,-21643,-24603,-21656,-24592,-21668,-24581,-21681,-24570,-21693,-24559,-21706,-24547,-21718,-24536,-21731,-24525,-21744,-24514,-21756,-24503,-21769,-24492,-21781,-24481,-21794,-24470,-21806,-24458,-21819,-24447,-21831,-24436,-21844,-24425,-21856,-24414,-21869,-24403,-21881,-24391,-21894,-24380,-21906,-24369,-21918,-24358,-21931,-24347,-21943,-24335,-21956,-24324,-21968,-24313,-21981,-24302,-21993,-24290,-22005,-24279,-22018,-24268,-22030,-24257,-22043,-24245,-22055,-24234,-22067,-24223,-22080,-24212,-22092,-24200,-22105,-24189,-22117,-24178,-22129,-24166,-22142,-24155,-22154,-24144,-22166,-24132,-22179,-24121,-22191,-24110,-22203,-24098,-22216,-24087,-22228,-24076,-22240,-24064,-22253,-24053,-22265,-24042,-22277,-24030,-22289,-24019,-22302,-24007,-22314,-23996,-22326,-23985,-22339,-23973,-22351,-23962,-22363,-23950,-22375,-23939,-22388,-23927,-22400,-23916,-22412,-23904,-22424,-23893,-22436,-23882,-22449,-23870,-22461,-23859,-22473,-23847,-22485,-23836,-22497,-23824,-22510,-23813,-22522,-23801,-22534,-23790,-22546,-23778,-22558,-23767,-22570,-23755,-22583,-23743,-22595,-23732,-22607,-23720,-22619,-23709,-22631,-23697,-22643,-23686,-22655,-23674,-22667,-23662,-22679,-23651,-22692,-23639,-22704,-23628,-22716,-23616,-22728,-23604,-22740,-23593,-22752,-23581,-22764,-23570,-22776,-23558,-22788,-23546,-22800,-23535,-22812,-23523,-22824,-23511,-22836,-23500,-22848,-23488,-22860,-23476,-22872,-23465,-22884,-23453,-22896,-23441,-22908,-23429,-22920,-23418,-22932,-23406,-22944,-23394,-22956,-23383,-22968,-23371,-22980,-23359,-22992,-23347,-23004,-23336,-23016,-23324,-23028,-23312,-23040,-23300,-23051,-23288,-23063,-23277,-23075,-23265,-23087,-23253,-23099,-23241,-23111,-23229,-23123,-23218,-23135,-23206,-23147,-23194,-23158,-23182,-23170,-23170,-23182,-23158,-23194,-23147,-23206,-23135,-23218,-23123,-23229,-23111,-23241,-23099,-23253,-23087,-23265,-23075,-23277,-23063,-23288,-23051,-23300,-23040,-23312,-23028,-23324,-23016,-23336,-23004,-23347,-22992,-23359,-22980,-23371,-22968,-23383,-22956,-23394,-22944,-23406,-22932,-23418,-22920,-23429,-22908,-23441,-22896,-23453,-22884,-23465,-22872,-23476,-22860,-23488,-22848,-23500,-22836,-23511,-22824,-23523,-22812,-23535,-22800,-23546,-22788,-23558,-22776,-23570,-22764,-23581,-22752,-23593,-22740,-23604,-22728,-23616,-22716,-23628,-22704,-23639,-22692,-23651,-22679,-23662,-22667,-23674,-22655,-23686,-22643,-23697,-22631,-23709,-22619,-23720,-22607,-23732,-22595,-23743,-22583,-23755,-22570,-23767,-22558,-23778,-22546,-23790,-22534,-23801,-22522,-23813,-22510,-23824,-22497,-23836,-22485,-23847,-22473,-23859,-22461,-23870,-22449,-23882,-22436,-23893,-22424,-23904,-22412,-23916,-22400,-23927,-22388,-23939,-22375,-23950,-22363,-23962,-22351,-23973,-22339,-23985,-22326,-23996,-22314,-24007,-22302,-24019,-22289,-24030,-22277,-24042,-22265,-24053,-22253,-24064,-22240,-24076,-22228,-24087,-22216,-24098,-22203,-24110,-22191,-24121,-22179,-24132,-22166,-24144,-22154,-24155,-22142,-24166,-22129,-24178,-22117,-24189,-22105,-24200,-22092,-24212,-22080,-24223,-22067,-24234,-22055,-24245,-22043,-24257,-22030,-24268,-22018,-24279,-22005,-24290,-21993,-24302,-21981,-24313,-21968,-24324,-21956,-24335,-21943,-24347,-21931,-24358,-21918,-24369,-21906,-24380,-21894,-24391,-21881,-24403,-21869,-24414,-21856,-24425,-21844,-24436,-21831,-24447,-21819,-24458,-21806,-24470,-21794,-24481,-21781,-24492,-21769,-24503,-21756,-24514,-21744,-24525,-21731,-24536,-21718,-24547,-21706,-24559,-21693,-24570,-21681,-24581,-21668,-24592,-21656,-24603,-21643,-24614,-21630,-24625,-21618,-24636,-21605,-24647,-21593,-24658,-21580,-24669,-21567,-24680,-21555,-24691,-21542,-24702,-21530,-24713,-21517,-24724,-21504,-24735,-21492,-24746,-21479,-24757,-21466,-24768,-21454,-24779,-21441,-24790,-21428,-24801,-21416,-24812,-21403,-24823,-21390,-24834,-21378,-24845,-21365,-24856,-21352,-24867,-21340,-24878,-21327,-24888,-21314,-24899,-21301,-24910,-21289,-24921,-21276,-24932,-21263,-24943,-21250,-24954,-21238,-24965,-21225,-24975,-21212,-24986,-21199,-24997,-21187,-25008,-21174,-25019,-21161,-25030,-21148,-25040,-21135,-25051,-21123,-25062,-21110,-25073,-21097,-25084,-21084,-25094,-21071,-25105,-21058,-25116,-21046,-25127,-21033,-25137,-21020,-25148,-21007,-25159,-20994,-25170,-20981,-25180,-20968,-25191,-20956,-25202,-20943,-25212,-20930,-25223,-20917,-25234,-20904,-25244,-20891,-25255,-20878,-25266,-20865,-25277,-20852,-25287,-20839,-25298,-20826,-25308,-20814,-25319,-20801,-25330,-20788,-25340,-20775,-25351,-20762,-25362,-20749,-25372,-20736,-25383,-20723,-25393,-20710,-25404,-20697,-25415,-20684,-25425,-20671,-25436,-20658,-25446,-20645,-25457,-20632,-25467,-20619,-25478,-20606,-25488,-20593,-25499,-20580,-25509,-20567,-25520,-20554,-25530,-20541,-25541,-20528,-25551,-20514,-25562,-20501,-25572,-20488,-25583,-20475,-25593,-20462,-25604,-20449,-25614,-20436,-25625,-20423,-25635,-20410,-25646,-20397,-25656,-20384,-25666,-20370,-25677,-20357,-25687,-20344,-25698,-20331,-25708,-20318,-25718,-20305,-25729,-20292,-25739,-20278,-25750,-20265,-25760,-20252,-25770,-20239,-25781,-20226,-25791,-20213,-25801,-20199,-25812,-20186,-25822,-20173,-25832,-20160,-25843,-20147,-25853,-20133,-25863,-20120,-25873,-20107,-25884,-20094,-25894,-20080,-25904,-20067,-25914,-20054,-25925,-20041,-25935,-20027,-25945,-20014,-25955,-20001,-25966,-19988,-25976,-19974,-25986,-19961,-25996,-19948,-26007,-19934,-26017,-19921,-26027,-19908,-26037,-19895,-26047,-19881,-26057,-19868,-26068,-19855,-26078,-19841,-26088,-19828,-26098,-19815,-26108,-19801,-26118,-19788,-26128,-19775,-26138,-19761,-26149,-19748,-26159,-19734,-26169,-19721,-26179,-19708,-26189,-19694,-26199,-19681,-26209,-19668,-26219,-19654,-26229,-19641,-26239,-19627,-26249,-19614,-26259,-19600,-26269,-19587,-26279,-19574,-26289,-19560,-26299,-19547,-26309,-19533,-26319,-19520,-26329,-19506,-26339,-19493,-26349,-19479,-26359,-19466,-26369,-19452,-26379,-19439,-26389,-19425,-26399,-19412,-26409,-19398,-26419,-19385,-26429,-19371,-26438,-19358,-26448,-19344,-26458,-19331,-26468,-19317,-26478,-19304,-26488,-19290,-26498,-19277,-26508,-19263,-26517,-19250,-26527,-19236,-26537,-19222,-26547,-19209,-26557,-19195,-26567,-19182,-26576,-19168,-26586,-19155,-26596,-19141,-26606,-19127,-26616,-19114,-26625,-19100,-26635,-19087,-26645,-19073,-26655,-19059,-26664,-19046,-26674,-19032,-26684,-19018,-26693,-19005,-26703,-18991,-26713,-18977,-26723,-18964,-26732,-18950,-26742,-18936,-26752,-18923,-26761,-18909,-26771,-18895,-26781,-18882,-26790,-18868,-26800,-18854,-26810,-18841,-26819,-18827,-26829,-18813,-26838,-18799,-26848,-18786,-26858,-18772,-26867,-18758,-26877,-18745,-26886,-18731,-26896,-18717,-26906,-18703,-26915,-18690,-26925,-18676,-26934,-18662,-26944,-18648,-26953,-18634,-26963,-18621,-26972,-18607,-26982,-18593,-26991,-18579,-27001,-18565,-27010,-18552,-27020,-18538,-27029,-18524,-27039,-18510,-27048,-18496,-27058,-18483,-27067,-18469,-27077,-18455,-27086,-18441,-27095,-18427,-27105,-18413,-27114,-18399,-27124,-18386,-27133,-18372,-27142,-18358,-27152,-18344,-27161,-18330,-27171,-18316,-27180,-18302,-27189,-18288,-27199,-18274,-27208,-18261,-27217,-18247,-27227,-18233,-27236,-18219,-27245,-18205,-27255,-18191,-27264,-18177,-27273,-18163,-27282,-18149,-27292,-18135,-27301,-18121,-27310,-18107,-27320,-18093,-27329,-18079,-27338,-18065,-27347,-18051,-27356,-18037,-27366,-18023,-27375,-18009,-27384,-17995,-27393,-17981,-27402,-17967,-27412,-17953,-27421,-17939,-27430,-17925,-27439,-17911,-27448,-17897,-27457,-17883,-27467,-17869,-27476,-17855,-27485,-17841,-27494,-17827,-27503,-17813,-27512,-17799,-27521,-17785,-27530,-17771,-27539,-17757,-27549,-17743,-27558,-17728,-27567,-17714,-27576,-17700,-27585,-17686,-27594,-17672,-27603,-17658,-27612,-17644,-27621,-17630,-27630,-17616,-27639,-17601,-27648,-17587,-27657,-17573,-27666,-17559,-27675,-17545,-27684,-17531,-27693,-17517,-27702,-17502,-27711,-17488,-27720,-17474,-27729,-17460,-27737,-17446,-27746,-17432,-27755,-17417,-27764,-17403,-27773,-17389,-27782,-17375,-27791,-17361,-27800,-17346,-27809,-17332,-27817,-17318,-27826,-17304,-27835,-17289,-27844,-17275,-27853,-17261,-27862,-17247,-27870,-17233,-27879,-17218,-27888,-17204,-27897,-17190,-27906,-17175,-27914,-17161,-27923,-17147,-27932,-17133,-27941,-17118,-27949,-17104,-27958,-17090,-27967,-17075,-27976,-17061,-27984,-17047,-27993,-17033,-28002,-17018,-28010,-17004,-28019,-16990,-28028,-16975,-28037,-16961,-28045,-16947,-28054,-16932,-28063,-16918,-28071,-16904,-28080,-16889,-28088,-16875,-28097,-16860,-28106,-16846,-28114,-16832,-28123,-16817,-28132,-16803,-28140,-16789,-28149,-16774,-28157,-16760,-28166,-16745,-28174,-16731,-28183,-16717,-28191,-16702,-28200,-16688,-28209,-16673,-28217,-16659,-28226,-16644,-28234,-16630,-28243,-16616,-28251,-16601,-28260,-16587,-28268,-16572,-28276,-16558,-28285,-16543,-28293,-16529,-28302,-16514,-28310,-16500,-28319,-16485,-28327,-16471,-28336,-16456,-28344,-16442,-28352,-16428,-28361,-16413,-28369,-16399,-28378,-16384,-28386,-16369,-28394,-16355,-28403,-16340,-28411,-16326,-28419,-16311,-28428,-16297,-28436,-16282,-28444,-16268,-28453,-16253,-28461,-16239,-28469,-16224,-28478,-16210,-28486,-16195,-28494,-16180,-28502,-16166,-28511,-16151,-28519,-16137,-28527,-16122,-28535,-16108,-28544,-16093,-28552,-16078,-28560,-16064,-28568,-16049,-28576,-16035,-28585,-16020,-28593,-16005,-28601,-15991,-28609,-15976,-28617,-15961,-28626,-15947,-28634,-15932,-28642,-15918,-28650,-15903,-28658,-15888,-28666,-15874,-28674,-15859,-28682,-15844,-28691,-15830,-28699,-15815,-28707,-15800,-28715,-15786,-28723,-15771,-28731,-15756,-28739,-15741,-28747,-15727,-28755,-15712,-28763,-15697,-28771,-15683,-28779,-15668,-28787,-15653,-28795,-15639,-28803,-15624,-28811,-15609,-28819,-15594,-28827,-15580,-28835,-15565,-28843,-15550,-28851,-15535,-28859,-15521,-28867,-15506,-28875,-15491,-28883,-15476,-28891,-15462,-28898,-15447,-28906,-15432,-28914,-15417,-28922,-15402,-28930,-15388,-28938,-15373,-28946,-15358,-28954,-15343,-28961,-15328,-28969,-15314,-28977,-15299,-28985,-15284,-28993,-15269,-29000,-15254,-29008,-15239,-29016,-15225,-29024,-15210,-29032,-15195,-29039,-15180,-29047,-15165,-29055,-15150,-29063,-15136,-29070,-15121,-29078,-15106,-29086,-15091,-29093,-15076,-29101,-15061,-29109,-15046,-29117,-15031,-29124,-15017,-29132,-15002,-29140,-14987,-29147,-14972,-29155,-14957,-29163,-14942,-29170,-14927,-29178,-14912,-29185,-14897,-29193,-14882,-29201,-14867,-29208,-14853,-29216,-14838,-29223,-14823,-29231,-14808,-29239,-14793,-29246,-14778,-29254,-14763,-29261,-14748,-29269,-14733,-29276,-14718,-29284,-14703,-29291,-14688,-29299,-14673,-29306,-14658,-29314,-14643,-29321,-14628,-29329,-14613,-29336,-14598,-29344,-14583,-29351,-14568,-29359,-14553,-29366,-14538,-29373,-14523,-29381,-14508,-29388,-14493,-29396,-14478,-29403,-14463,-29411,-14448,-29418,-14433,-29425,-14418,-29433,-14403,-29440,-14388,-29447,-14373,-29455,-14358,-29462,-14343,-29469,-14327,-29477,-14312,-29484,-14297,-29491,-14282,-29499,-14267,-29506,-14252,-29513,-14237,-29520,-14222,-29528,-14207,-29535,-14192,-29542,-14177,-29549,-14161,-29557,-14146,-29564,-14131,-29571,-14116,-29578,-14101,-29586,-14086,-29593,-14071,-29600,-14056,-29607,-14040,-29614,-14025,-29622,-14010,-29629,-13995,-29636,-13980,-29643,-13965,-29650,-13950,-29657,-13934,-29664,-13919,-29671,-13904,-29679,-13889,-29686,-13874,-29693,-13859,-29700,-13843,-29707,-13828,-29714,-13813,-29721,-13798,-29728,-13783,-29735,-13767,-29742,-13752,-29749,-13737,-29756,-13722,-29763,-13707,-29770,-13691,-29777,-13676,-29784,-13661,-29791,-13646,-29798,-13630,-29805,-13615,-29812,-13600,-29819,-13585,-29826,-13569,-29833,-13554,-29840,-13539,-29847,-13524,-29854,-13508,-29861,-13493,-29867,-13478,-29874,-13463,-29881,-13447,-29888,-13432,-29895,-13417,-29902,-13401,-29909,-13386,-29916,-13371,-29922,-13356,-29929,-13340,-29936,-13325,-29943,-13310,-29950,-13294,-29956,-13279,-29963,-13264,-29970,-13248,-29977,-13233,-29984,-13218,-29990,-13202,-29997,-13187,-30004,-13172,-30010,-13156,-30017,-13141,-30024,-13126,-30031,-13110,-30037,-13095,-30044,-13080,-30051,-13064,-30057,-13049,-30064,-13034,-30071,-13018,-30077,-13003,-30084,-12987,-30091,-12972,-30097,-12957,-30104,-12941,-30110,-12926,-30117,-12910,-30124,-12895,-30130,-12880,-30137,-12864,-30143,-12849,-30150,-12833,-30157,-12818,-30163,-12803,-30170,-12787,-30176,-12772,-30183,-12756,-30189,-12741,-30196,-12725,-30202,-12710,-30209,-12695,-30215,-12679,-30222,-12664,-30228,-12648,-30235,-12633,-30241,-12617,-30248,-12602,-30254,-12586,-30260,-12571,-30267,-12555,-30273,-12540,-30280,-12524,-30286,-12509,-30292,-12493,-30299,-12478,-30305,-12462,-30312,-12447,-30318,-12431,-30324,-12416,-30331,-12400,-30337,-12385,-30343,-12369,-30350,-12354,-30356,-12338,-30362,-12323,-30369,-12307,-30375,-12292,-30381,-12276,-30387,-12261,-30394,-12245,-30400,-12230,-30406,-12214,-30412,-12199,-30419,-12183,-30425,-12167,-30431,-12152,-30437,-12136,-30443,-12121,-30450,-12105,-30456,-12090,-30462,-12074,-30468,-12058,-30474,-12043,-30481,-12027,-30487,-12012,-30493,-11996,-30499,-11981,-30505,-11965,-30511,-11949,-30517,-11934,-30523,-11918,-30529,-11903,-30536,-11887,-30542,-11871,-30548,-11856,-30554,-11840,-30560,-11824,-30566,-11809,-30572,-11793,-30578,-11778,-30584,-11762,-30590,-11746,-30596,-11731,-30602,-11715,-30608,-11699,-30614,-11684,-30620,-11668,-30626,-11652,-30632,-11637,-30638,-11621,-30644,-11605,-30650,-11590,-30656,-11574,-30661,-11558,-30667,-11543,-30673,-11527,-30679,-11511,-30685,-11496,-30691,-11480,-30697,-11464,-30703,-11449,-30708,-11433,-30714,-11417,-30720,-11401,-30726,-11386,-30732,-11370,-30738,-11354,-30743,-11339,-30749,-11323,-30755,-11307,-30761,-11291,-30767,-11276,-30772,-11260,-30778,-11244,-30784,-11228,-30789,-11213,-30795,-11197,-30801,-11181,-30807,-11165,-30812,-11150,-30818,-11134,-30824,-11118,-30829,-11102,-30835,-11087,-30841,-11071,-30846,-11055,-30852,-11039,-30858,-11024,-30863,-11008,-30869,-10992,-30875,-10976,-30880,-10960,-30886,-10945,-30891,-10929,-30897,-10913,-30903,-10897,-30908,-10881,-30914,-10866,-30919,-10850,-30925,-10834,-30930,-10818,-30936,-10802,-30941,-10787,-30947,-10771,-30952,-10755,-30958,-10739,-30963,-10723,-30969,-10707,-30974,-10692,-30980,-10676,-30985,-10660,-30991,-10644,-30996,-10628,-31002,-10612,-31007,-10597,-31012,-10581,-31018,-10565,-31023,-10549,-31029,-10533,-31034,-10517,-31039,-10501,-31045,-10485,-31050,-10470,-31055,-10454,-31061,-10438,-31066,-10422,-31071,-10406,-31077,-10390,-31082,-10374,-31087,-10358,-31093,-10343,-31098,-10327,-31103,-10311,-31108,-10295,-31114,-10279,-31119,-10263,-31124,-10247,-31129,-10231,-31135,-10215,-31140,-10199,-31145,-10183,-31150,-10167,-31155,-10152,-31161,-10136,-31166,-10120,-31171,-10104,-31176,-10088,-31181,-10072,-31186,-10056,-31192,-10040,-31197,-10024,-31202,-10008,-31207,-9992,-31212,-9976,-31217,-9960,-31222,-9944,-31227,-9928,-31232,-9912,-31237,-9896,-31243,-9880,-31248,-9864,-31253,-9848,-31258,-9832,-31263,-9816,-31268,-9800,-31273,-9784,-31278,-9768,-31283,-9752,-31288,-9736,-31293,-9720,-31298,-9704,-31303,-9688,-31308,-9672,-31312,-9656,-31317,-9640,-31322,-9624,-31327,-9608,-31332,-9592,-31337,-9576,-31342,-9560,-31347,-9544,-31352,-9528,-31357,-9512,-31361,-9496,-31366,-9480,-31371,-9464,-31376,-9448,-31381,-9432,-31386,-9416,-31390,-9400,-31395,-9384,-31400,-9368,-31405,-9352,-31410,-9336,-31414,-9320,-31419,-9304,-31424,-9288,-31429,-9271,-31433,-9255,-31438,-9239,-31443,-9223,-31447,-9207,-31452,-9191,-31457,-9175,-31462,-9159,-31466,-9143,-31471,-9127,-31476,-9111,-31480,-9095,-31485,-9078,-31490,-9062,-31494,-9046,-31499,-9030,-31503,-9014,-31508,-8998,-31513,-8982,-31517,-8966,-31522,-8950,-31526,-8933,-31531,-8917,-31535,-8901,-31540,-8885,-31545,-8869,-31549,-8853,-31554,-8837,-31558,-8821,-31563,-8804,-31567,-8788,-31572,-8772,-31576,-8756,-31581,-8740,-31585,-8724,-31589,-8708,-31594,-8691,-31598,-8675,-31603,-8659,-31607,-8643,-31612,-8627,-31616,-8611,-31620,-8594,-31625,-8578,-31629,-8562,-31634,-8546,-31638,-8530,-31642,-8514,-31647,-8497,-31651,-8481,-31655,-8465,-31660,-8449,-31664,-8433,-31668,-8416,-31673,-8400,-31677,-8384,-31681,-8368,-31685,-8352,-31690,-8335,-31694,-8319,-31698,-8303,-31702,-8287,-31707,-8271,-31711,-8254,-31715,-8238,-31719,-8222,-31724,-8206,-31728,-8190,-31732,-8173,-31736,-8157,-31740,-8141,-31744,-8125,-31749,-8108,-31753,-8092,-31757,-8076,-31761,-8060,-31765,-8043,-31769,-8027,-31773,-8011,-31777,-7995,-31781,-7978,-31786,-7962,-31790,-7946,-31794,-7930,-31798,-7913,-31802,-7897,-31806,-7881,-31810,-7865,-31814,-7848,-31818,-7832,-31822,-7816,-31826,-7800,-31830,-7783,-31834,-7767,-31838,-7751,-31842,-7734,-31846,-7718,-31850,-7702,-31854,-7686,-31857,-7669,-31861,-7653,-31865,-7637,-31869,-7620,-31873,-7604,-31877,-7588,-31881,-7572,-31885,-7555,-31889,-7539,-31892,-7523,-31896,-7506,-31900,-7490,-31904,-7474,-31908,-7457,-31912,-7441,-31915,-7425,-31919,-7408,-31923,-7392,-31927,-7376,-31930,-7359,-31934,-7343,-31938,-7327,-31942,-7311,-31945,-7294,-31949,-7278,-31953,-7262,-31957,-7245,-31960,-7229,-31964,-7212,-31968,-7196,-31971,-7180,-31975,-7163,-31979,-7147,-31982,-7131,-31986,-7114,-31990,-7098,-31993,-7082,-31997,-7065,-32000,-7049,-32004,-7033,-32008,-7016,-32011,-7000,-32015,-6983,-32018,-6967,-32022,-6951,-32025,-6934,-32029,-6918,-32033,-6902,-32036,-6885,-32040,-6869,-32043,-6852,-32047,-6836,-32050,-6820,-32054,-6803,-32057,-6787,-32060,-6771,-32064,-6754,-32067,-6738,-32071,-6721,-32074,-6705,-32078,-6689,-32081,-6672,-32085,-6656,-32088,-6639,-32091,-6623,-32095,-6607,-32098,-6590,-32101,-6574,-32105,-6557,-32108,-6541,-32111,-6524,-32115,-6508,-32118,-6492,-32121,-6475,-32125,-6459,-32128,-6442,-32131,-6426,-32135,-6409,-32138,-6393,-32141,-6377,-32144,-6360,-32148,-6344,-32151,-6327,-32154,-6311,-32157,-6294,-32161,-6278,-32164,-6262,-32167,-6245,-32170,-6229,-32173,-6212,-32177,-6196,-32180,-6179,-32183,-6163,-32186,-6146,-32189,-6130,-32192,-6113,-32195,-6097,-32198,-6081,-32202,-6064,-32205,-6048,-32208,-6031,-32211,-6015,-32214,-5998,-32217,-5982,-32220,-5965,-32223,-5949,-32226,-5932,-32229,-5916,-32232,-5899,-32235,-5883,-32238,-5866,-32241,-5850,-32244,-5833,-32247,-5817,-32250,-5800,-32253,-5784,-32256,-5767,-32259,-5751,-32262,-5734,-32265,-5718,-32268,-5701,-32271,-5685,-32274,-5668,-32276,-5652,-32279,-5635,-32282,-5619,-32285,-5602,-32288,-5586,-32291,-5569,-32294,-5553,-32296,-5536,-32299,-5520,-32302,-5503,-32305,-5487,-32308,-5470,-32311,-5454,-32313,-5437,-32316,-5421,-32319,-5404,-32322,-5388,-32324,-5371,-32327,-5355,-32330,-5338,-32333,-5322,-32335,-5305,-32338,-5288,-32341,-5272,-32343,-5255,-32346,-5239,-32349,-5222,-32351,-5206,-32354,-5189,-32357,-5173,-32359,-5156,-32362,-5140,-32365,-5123,-32367,-5107,-32370,-5090,-32372,-5073,-32375,-5057,-32378,-5040,-32380,-5024,-32383,-5007,-32385,-4991,-32388,-4974,-32390,-4958,-32393,-4941,-32395,-4924,-32398,-4908,-32400,-4891,-32403,-4875,-32405,-4858,-32408,-4842,-32410,-4825,-32413,-4808,-32415,-4792,-32418,-4775,-32420,-4759,-32423,-4742,-32425,-4726,-32427,-4709,-32430,-4692,-32432,-4676,-32435,-4659,-32437,-4643,-32439,-4626,-32442,-4609,-32444,-4593,-32446,-4576,-32449,-4560,-32451,-4543,-32453,-4526,-32456,-4510,-32458,-4493,-32460,-4477,-32463,-4460,-32465,-4444,-32467,-4427,-32469,-4410,-32472,-4394,-32474,-4377,-32476,-4360,-32478,-4344,-32481,-4327,-32483,-4311,-32485,-4294,-32487,-4277,-32489,-4261,-32492,-4244,-32494,-4228,-32496,-4211,-32498,-4194,-32500,-4178,-32502,-4161,-32504,-4145,-32507,-4128,-32509,-4111,-32511,-4095,-32513,-4078,-32515,-4061,-32517,-4045,-32519,-4028,-32521,-4012,-32523,-3995,-32525,-3978,-32527,-3962,-32529,-3945,-32531,-3928,-32533,-3912,-32535,-3895,-32537,-3878,-32539,-3862,-32541,-3845,-32543,-3829,-32545,-3812,-32547,-3795,-32549,-3779,-32551,-3762,-32553,-3745,-32555,-3729,-32557,-3712,-32559,-3695,-32560,-3679,-32562,-3662,-32564,-3645,-32566,-3629,-32568,-3612,-32570,-3595,-32572,-3579,-32573,-3562,-32575,-3546,-32577,-3529,-32579,-3512,-32581,-3496,-32582,-3479,-32584,-3462,-32586,-3446,-32588,-3429,-32589,-3412,-32591,-3396,-32593,-3379,-32595,-3362,-32596,-3346,-32598,-3329,-32600,-3312,-32601,-3296,-32603,-3279,-32605,-3262,-32606,-3246,-32608,-3229,-32610,-3212,-32611,-3196,-32613,-3179,-32615,-3162,-32616,-3146,-32618,-3129,-32619,-3112,-32621,-3095,-32623,-3079,-32624,-3062,-32626,-3045,-32627,-3029,-32629,-3012,-32630,-2995,-32632,-2979,-32633,-2962,-32635,-2945,-32636,-2929,-32638,-2912,-32639,-2895,-32641,-2879,-32642,-2862,-32644,-2845,-32645,-2829,-32647,-2812,-32648,-2795,-32650,-2778,-32651,-2762,-32652,-2745,-32654,-2728,-32655,-2712,-32657,-2695,-32658,-2678,-32659,-2662,-32661,-2645,-32662,-2628,-32663,-2611,-32665,-2595,-32666,-2578,-32667,-2561,-32669,-2545,-32670,-2528,-32671,-2511,-32672,-2495,-32674,-2478,-32675,-2461,-32676,-2444,-32677,-2428,-32679,-2411,-32680,-2394,-32681,-2378,-32682,-2361,-32684,-2344,-32685,-2327,-32686,-2311,-32687,-2294,-32688,-2277,-32689,-2261,-32691,-2244,-32692,-2227,-32693,-2210,-32694,-2194,-32695,-2177,-32696,-2160,-32697,-2144,-32698,-2127,-32700,-2110,-32701,-2093,-32702,-2077,-32703,-2060,-32704,-2043,-32705,-2027,-32706,-2010,-32707,-1993,-32708,-1976,-32709,-1960,-32710,-1943,-32711,-1926,-32712,-1909,-32713,-1893,-32714,-1876,-32715,-1859,-32716,-1843,-32717,-1826,-32718,-1809,-32718,-1792,-32719,-1776,-32720,-1759,-32721,-1742,-32722,-1725,-32723,-1709,-32724,-1692,-32725,-1675,-32726,-1659,-32726,-1642,-32727,-1625,-32728,-1608,-32729,-1592,-32730,-1575,-32730,-1558,-32731,-1541,-32732,-1525,-32733,-1508,-32734,-1491,-32734,-1474,-32735,-1458,-32736,-1441,-32737,-1424,-32737,-1407,-32738,-1391,-32739,-1374,-32739,-1357,-32740,-1340,-32741,-1324,-32741,-1307,-32742,-1290,-32743,-1274,-32743,-1257,-32744,-1240,-32745,-1223,-32745,-1207,-32746,-1190,-32747,-1173,-32747,-1156,-32748,-1140,-32748,-1123,-32749,-1106,-32749,-1089,-32750,-1073,-32751,-1056,-32751,-1039,-32752,-1022,-32752,-1006,-32753,-989,-32753,-972,-32754,-955,-32754,-939,-32755,-922,-32755,-905,-32755,-888,-32756,-872,-32756,-855,-32757,-838,-32757,-821,-32758,-805,-32758,-788,-32758,-771,-32759,-754,-32759,-738,-32760,-721,-32760,-704,-32760,-687,-32761,-671,-32761,-654,-32761,-637,-32762,-620,-32762,-604,-32762,-587,-32763,-570,-32763,-553,-32763,-537,-32763,-520,-32764,-503,-32764,-486,-32764,-470,-32764,-453,-32765,-436,-32765,-419,-32765,-403,-32765,-386,-32765,-369,-32766,-352,-32766,-336,-32766,-319,-32766,-302,-32766,-285,-32766,-269,-32767,-252,-32767,-235,-32767,-218,-32767,-202,-32767,-185,-32767,-168,-32767,-151,-32767,-135,-32767,-118,-32767,-101,-32767,-84,-32767,-68,-32767,-51,-32767,-34,-32767,-17,-32767,-1,-32767,16,-32767,33,-32767,50,-32767,67,-32767,83,-32767,100,-32767,117,-32767,134,-32767,150,-32767,167,-32767,184,-32767,201,-32767,217,-32767,234,-32767,251,-32766,268,-32766,284,-32766,301,-32766,318,-32766,335,-32766,351,-32765,368,-32765,385,-32765,402,-32765,418,-32765,435,-32764,452,-32764,469,-32764,485,-32764,502,-32763,519,-32763,536,-32763,552,-32763,569,-32762,586,-32762,603,-32762,619,-32761,636,-32761,653,-32761,670,-32760,686,-32760,703,-32760,720,-32759,737,-32759,753,-32758,770,-32758,787,-32758,804,-32757,820,-32757,837,-32756,854,-32756,871,-32755,887,-32755,904,-32755,921,-32754,938,-32754,954,-32753,971,-32753,988,-32752,1005,-32752,1021,-32751,1038,-32751,1055,-32750,1072,-32749,1088,-32749,1105,-32748,1122,-32748,1139,-32747,1155,-32747,1172,-32746,1189,-32745,1206,-32745,1222,-32744,1239,-32743,1256,-32743,1273,-32742,1289,-32741,1306,-32741,1323,-32740,1339,-32739,1356,-32739,1373,-32738,1390,-32737,1406,-32737,1423,-32736,1440,-32735,1457,-32734,1473,-32734,1490,-32733,1507,-32732,1524,-32731,1540,-32730,1557,-32730,1574,-32729,1591,-32728,1607,-32727,1624,-32726,1641,-32726,1658,-32725,1674,-32724,1691,-32723,1708,-32722,1724,-32721,1741,-32720,1758,-32719,1775,-32718,1791,-32718,1808,-32717,1825,-32716,1842,-32715,1858,-32714,1875,-32713,1892,-32712,1908,-32711,1925,-32710,1942,-32709,1959,-32708,1975,-32707,1992,-32706,2009,-32705,2026,-32704,2042,-32703,2059,-32702,2076,-32701,2092,-32700,2109,-32698,2126,-32697,2143,-32696,2159,-32695,2176,-32694,2193,-32693,2209,-32692,2226,-32691,2243,-32689,2260,-32688,2276,-32687,2293,-32686,2310,-32685,2326,-32684,2343,-32682,2360,-32681,2377,-32680,2393,-32679,2410,-32677,2427,-32676,2443,-32675,2460,-32674,2477,-32672,2494,-32671,2510,-32670,2527,-32669,2544,-32667,2560,-32666,2577,-32665,2594,-32663,2610,-32662,2627,-32661,2644,-32659,2661,-32658,2677,-32657,2694,-32655,2711,-32654,2727,-32652,2744,-32651,2761,-32650,2777,-32648,2794,-32647,2811,-32645,2828,-32644,2844,-32642,2861,-32641,2878,-32639,2894,-32638,2911,-32636,2928,-32635,2944,-32633,2961,-32632,2978,-32630,2994,-32629,3011,-32627,3028,-32626,3044,-32624,3061,-32623,3078,-32621,3094,-32619,3111,-32618,3128,-32616,3145,-32615,3161,-32613,3178,-32611,3195,-32610,3211,-32608,3228,-32606,3245,-32605,3261,-32603,3278,-32601,3295,-32600,3311,-32598,3328,-32596,3345,-32595,3361,-32593,3378,-32591,3395,-32589,3411,-32588,3428,-32586,3445,-32584,3461,-32582,3478,-32581,3495,-32579,3511,-32577,3528,-32575,3545,-32573,3561,-32572,3578,-32570,3594,-32568,3611,-32566,3628,-32564,3644,-32562,3661,-32560,3678,-32559,3694,-32557,3711,-32555,3728,-32553,3744,-32551,3761,-32549,3778,-32547,3794,-32545,3811,-32543,3828,-32541,3844,-32539,3861,-32537,3877,-32535,3894,-32533,3911,-32531,3927,-32529,3944,-32527,3961,-32525,3977,-32523,3994,-32521,4011,-32519,4027,-32517,4044,-32515,4060,-32513,4077,-32511,4094,-32509,4110,-32507,4127,-32504,4144,-32502,4160,-32500,4177,-32498,4193,-32496,4210,-32494,4227,-32492,4243,-32489,4260,-32487,4276,-32485,4293,-32483,4310,-32481,4326,-32478,4343,-32476,4359,-32474,4376,-32472,4393,-32469,4409,-32467,4426,-32465,4443,-32463,4459,-32460,4476,-32458,4492,-32456,4509,-32453,4525,-32451,4542,-32449,4559,-32446,4575,-32444,4592,-32442,4608,-32439,4625,-32437,4642,-32435,4658,-32432,4675,-32430,4691,-32427,4708,-32425,4725,-32423,4741,-32420,4758,-32418,4774,-32415,4791,-32413,4807,-32410,4824,-32408,4841,-32405,4857,-32403,4874,-32400,4890,-32398,4907,-32395,4923,-32393,4940,-32390,4957,-32388,4973,-32385,4990,-32383,5006,-32380,5023,-32378,5039,-32375,5056,-32372,5072,-32370,5089,-32367,5106,-32365,5122,-32362,5139,-32359,5155,-32357,5172,-32354,5188,-32351,5205,-32349,5221,-32346,5238,-32343,5254,-32341,5271,-32338,5287,-32335,5304,-32333,5321,-32330,5337,-32327,5354,-32324,5370,-32322,5387,-32319,5403,-32316,5420,-32313,5436,-32311,5453,-32308,5469,-32305,5486,-32302,5502,-32299,5519,-32296,5535,-32294,5552,-32291,5568,-32288,5585,-32285,5601,-32282,5618,-32279,5634,-32276,5651,-32274,5667,-32271,5684,-32268,5700,-32265,5717,-32262,5733,-32259,5750,-32256,5766,-32253,5783,-32250,5799,-32247,5816,-32244,5832,-32241,5849,-32238,5865,-32235,5882,-32232,5898,-32229,5915,-32226,5931,-32223,5948,-32220,5964,-32217,5981,-32214,5997,-32211,6014,-32208,6030,-32205,6047,-32202,6063,-32198,6080,-32195,6096,-32192,6112,-32189,6129,-32186,6145,-32183,6162,-32180,6178,-32177,6195,-32173,6211,-32170,6228,-32167,6244,-32164,6261,-32161,6277,-32157,6293,-32154,6310,-32151,6326,-32148,6343,-32144,6359,-32141,6376,-32138,6392,-32135,6408,-32131,6425,-32128,6441,-32125,6458,-32121,6474,-32118,6491,-32115,6507,-32111,6523,-32108,6540,-32105,6556,-32101,6573,-32098,6589,-32095,6606,-32091,6622,-32088,6638,-32085,6655,-32081,6671,-32078,6688,-32074,6704,-32071,6720,-32067,6737,-32064,6753,-32060,6770,-32057,6786,-32054,6802,-32050,6819,-32047,6835,-32043,6851,-32040,6868,-32036,6884,-32033,6901,-32029,6917,-32025,6933,-32022,6950,-32018,6966,-32015,6982,-32011,6999,-32008,7015,-32004,7032,-32000,7048,-31997,7064,-31993,7081,-31990,7097,-31986,7113,-31982,7130,-31979,7146,-31975,7162,-31971,7179,-31968,7195,-31964,7211,-31960,7228,-31957,7244,-31953,7261,-31949,7277,-31945,7293,-31942,7310,-31938,7326,-31934,7342,-31930,7358,-31927,7375,-31923,7391,-31919,7407,-31915,7424,-31912,7440,-31908,7456,-31904,7473,-31900,7489,-31896,7505,-31892,7522,-31889,7538,-31885,7554,-31881,7571,-31877,7587,-31873,7603,-31869,7619,-31865,7636,-31861,7652,-31857,7668,-31854,7685,-31850,7701,-31846,7717,-31842,7733,-31838,7750,-31834,7766,-31830,7782,-31826,7799,-31822,7815,-31818,7831,-31814,7847,-31810,7864,-31806,7880,-31802,7896,-31798,7912,-31794,7929,-31790,7945,-31786,7961,-31781,7977,-31777,7994,-31773,8010,-31769,8026,-31765,8042,-31761,8059,-31757,8075,-31753,8091,-31749,8107,-31744,8124,-31740,8140,-31736,8156,-31732,8172,-31728,8189,-31724,8205,-31719,8221,-31715,8237,-31711,8253,-31707,8270,-31702,8286,-31698,8302,-31694,8318,-31690,8334,-31685,8351,-31681,8367,-31677,8383,-31673,8399,-31668,8415,-31664,8432,-31660,8448,-31655,8464,-31651,8480,-31647,8496,-31642,8513,-31638,8529,-31634,8545,-31629,8561,-31625,8577,-31620,8593,-31616,8610,-31612,8626,-31607,8642,-31603,8658,-31598,8674,-31594,8690,-31589,8707,-31585,8723,-31581,8739,-31576,8755,-31572,8771,-31567,8787,-31563,8803,-31558,8820,-31554,8836,-31549,8852,-31545,8868,-31540,8884,-31535,8900,-31531,8916,-31526,8932,-31522,8949,-31517,8965,-31513,8981,-31508,8997,-31503,9013,-31499,9029,-31494,9045,-31490,9061,-31485,9077,-31480,9094,-31476,9110,-31471,9126,-31466,9142,-31462,9158,-31457,9174,-31452,9190,-31447,9206,-31443,9222,-31438,9238,-31433,9254,-31429,9270,-31424,9287,-31419,9303,-31414,9319,-31410,9335,-31405,9351,-31400,9367,-31395,9383,-31390,9399,-31386,9415,-31381,9431,-31376,9447,-31371,9463,-31366,9479,-31361,9495,-31357,9511,-31352,9527,-31347,9543,-31342,9559,-31337,9575,-31332,9591,-31327,9607,-31322,9623,-31317,9639,-31312,9655,-31308,9671,-31303,9687,-31298,9703,-31293,9719,-31288,9735,-31283,9751,-31278,9767,-31273,9783,-31268,9799,-31263,9815,-31258,9831,-31253,9847,-31248,9863,-31243,9879,-31237,9895,-31232,9911,-31227,9927,-31222,9943,-31217,9959,-31212,9975,-31207,9991,-31202,10007,-31197,10023,-31192,10039,-31186,10055,-31181,10071,-31176,10087,-31171,10103,-31166,10119,-31161,10135,-31155,10151,-31150,10166,-31145,10182,-31140,10198,-31135,10214,-31129,10230,-31124,10246,-31119,10262,-31114,10278,-31108,10294,-31103,10310,-31098,10326,-31093,10342,-31087,10357,-31082,10373,-31077,10389,-31071,10405,-31066,10421,-31061,10437,-31055,10453,-31050,10469,-31045,10484,-31039,10500,-31034,10516,-31029,10532,-31023,10548,-31018,10564,-31012,10580,-31007,10596,-31002,10611,-30996,10627,-30991,10643,-30985,10659,-30980,10675,-30974,10691,-30969,10706,-30963,10722,-30958,10738,-30952,10754,-30947,10770,-30941,10786,-30936,10801,-30930,10817,-30925,10833,-30919,10849,-30914,10865,-30908,10880,-30903,10896,-30897,10912,-30891,10928,-30886,10944,-30880,10959,-30875,10975,-30869,10991,-30863,11007,-30858,11023,-30852,11038,-30846,11054,-30841,11070,-30835,11086,-30829,11101,-30824,11117,-30818,11133,-30812,11149,-30807,11164,-30801,11180,-30795,11196,-30789,11212,-30784,11227,-30778,11243,-30772,11259,-30767,11275,-30761,11290,-30755,11306,-30749,11322,-30743,11338,-30738,11353,-30732,11369,-30726,11385,-30720,11400,-30714,11416,-30708,11432,-30703,11448,-30697,11463,-30691,11479,-30685,11495,-30679,11510,-30673,11526,-30667,11542,-30661,11557,-30656,11573,-30650,11589,-30644,11604,-30638,11620,-30632,11636,-30626,11651,-30620,11667,-30614,11683,-30608,11698,-30602,11714,-30596,11730,-30590,11745,-30584,11761,-30578,11777,-30572,11792,-30566,11808,-30560,11823,-30554,11839,-30548,11855,-30542,11870,-30536,11886,-30529,11902,-30523,11917,-30517,11933,-30511,11948,-30505,11964,-30499,11980,-30493,11995,-30487,12011,-30481,12026,-30474,12042,-30468,12057,-30462,12073,-30456,12089,-30450,12104,-30443,12120,-30437,12135,-30431,12151,-30425,12166,-30419,12182,-30412,12198,-30406,12213,-30400,12229,-30394,12244,-30387,12260,-30381,12275,-30375,12291,-30369,12306,-30362,12322,-30356,12337,-30350,12353,-30343,12368,-30337,12384,-30331,12399,-30324,12415,-30318,12430,-30312,12446,-30305,12461,-30299,12477,-30292,12492,-30286,12508,-30280,12523,-30273,12539,-30267,12554,-30260,12570,-30254,12585,-30248,12601,-30241,12616,-30235,12632,-30228,12647,-30222,12663,-30215,12678,-30209,12694,-30202,12709,-30196,12724,-30189,12740,-30183,12755,-30176,12771,-30170,12786,-30163,12802,-30157,12817,-30150,12832,-30143,12848,-30137,12863,-30130,12879,-30124,12894,-30117,12909,-30110,12925,-30104,12940,-30097,12956,-30091,12971,-30084,12986,-30077,13002,-30071,13017,-30064,13033,-30057,13048,-30051,13063,-30044,13079,-30037,13094,-30031,13109,-30024,13125,-30017,13140,-30010,13155,-30004,13171,-29997,13186,-29990,13201,-29984,13217,-29977,13232,-29970,13247,-29963,13263,-29956,13278,-29950,13293,-29943,13309,-29936,13324,-29929,13339,-29922,13355,-29916,13370,-29909,13385,-29902,13400,-29895,13416,-29888,13431,-29881,13446,-29874,13462,-29867,13477,-29861,13492,-29854,13507,-29847,13523,-29840,13538,-29833,13553,-29826,13568,-29819,13584,-29812,13599,-29805,13614,-29798,13629,-29791,13645,-29784,13660,-29777,13675,-29770,13690,-29763,13706,-29756,13721,-29749,13736,-29742,13751,-29735,13766,-29728,13782,-29721,13797,-29714,13812,-29707,13827,-29700,13842,-29693,13858,-29686,13873,-29679,13888,-29671,13903,-29664,13918,-29657,13933,-29650,13949,-29643,13964,-29636,13979,-29629,13994,-29622,14009,-29614,14024,-29607,14039,-29600,14055,-29593,14070,-29586,14085,-29578,14100,-29571,14115,-29564,14130,-29557,14145,-29549,14160,-29542,14176,-29535,14191,-29528,14206,-29520,14221,-29513,14236,-29506,14251,-29499,14266,-29491,14281,-29484,14296,-29477,14311,-29469,14326,-29462,14342,-29455,14357,-29447,14372,-29440,14387,-29433,14402,-29425,14417,-29418,14432,-29411,14447,-29403,14462,-29396,14477,-29388,14492,-29381,14507,-29373,14522,-29366,14537,-29359,14552,-29351,14567,-29344,14582,-29336,14597,-29329,14612,-29321,14627,-29314,14642,-29306,14657,-29299,14672,-29291,14687,-29284,14702,-29276,14717,-29269,14732,-29261,14747,-29254,14762,-29246,14777,-29239,14792,-29231,14807,-29223,14822,-29216,14837,-29208,14852,-29201,14866,-29193,14881,-29185,14896,-29178,14911,-29170,14926,-29163,14941,-29155,14956,-29147,14971,-29140,14986,-29132,15001,-29124,15016,-29117,15030,-29109,15045,-29101,15060,-29093,15075,-29086,15090,-29078,15105,-29070,15120,-29063,15135,-29055,15149,-29047,15164,-29039,15179,-29032,15194,-29024,15209,-29016,15224,-29008,15238,-29000,15253,-28993,15268,-28985,15283,-28977,15298,-28969,15313,-28961,15327,-28954,15342,-28946,15357,-28938,15372,-28930,15387,-28922,15401,-28914,15416,-28906,15431,-28898,15446,-28891,15461,-28883,15475,-28875,15490,-28867,15505,-28859,15520,-28851,15534,-28843,15549,-28835,15564,-28827,15579,-28819,15593,-28811,15608,-28803,15623,-28795,15638,-28787,15652,-28779,15667,-28771,15682,-28763,15696,-28755,15711,-28747,15726,-28739,15740,-28731,15755,-28723,15770,-28715,15785,-28707,15799,-28699,15814,-28691,15829,-28682,15843,-28674,15858,-28666,15873,-28658,15887,-28650,15902,-28642,15917,-28634,15931,-28626,15946,-28617,15960,-28609,15975,-28601,15990,-28593,16004,-28585,16019,-28576,16034,-28568,16048,-28560,16063,-28552,16077,-28544,16092,-28535,16107,-28527,16121,-28519,16136,-28511,16150,-28502,16165,-28494,16179,-28486,16194,-28478,16209,-28469,16223,-28461,16238,-28453,16252,-28444,16267,-28436,16281,-28428,16296,-28419,16310,-28411,16325,-28403,16339,-28394,16354,-28386,16368,-28378,16383,-28369,16398,-28361,16412,-28352,16427,-28344,16441,-28336,16455,-28327,16470,-28319,16484,-28310,16499,-28302,16513,-28293,16528,-28285,16542,-28276,16557,-28268,16571,-28260,16586,-28251,16600,-28243,16615,-28234,16629,-28226,16643,-28217,16658,-28209,16672,-28200,16687,-28191,16701,-28183,16716,-28174,16730,-28166,16744,-28157,16759,-28149,16773,-28140,16788,-28132,16802,-28123,16816,-28114,16831,-28106,16845,-28097,16859,-28088,16874,-28080,16888,-28071,16903,-28063,16917,-28054,16931,-28045,16946,-28037,16960,-28028,16974,-28019,16989,-28010,17003,-28002,17017,-27993,17032,-27984,17046,-27976,17060,-27967,17074,-27958,17089,-27949,17103,-27941,17117,-27932,17132,-27923,17146,-27914,17160,-27906,17174,-27897,17189,-27888,17203,-27879,17217,-27870,17232,-27862,17246,-27853,17260,-27844,17274,-27835,17288,-27826,17303,-27817,17317,-27809,17331,-27800,17345,-27791,17360,-27782,17374,-27773,17388,-27764,17402,-27755,17416,-27746,17431,-27737,17445,-27729,17459,-27720,17473,-27711,17487,-27702,17501,-27693,17516,-27684,17530,-27675,17544,-27666,17558,-27657,17572,-27648,17586,-27639,17600,-27630,17615,-27621,17629,-27612,17643,-27603,17657,-27594,17671,-27585,17685,-27576,17699,-27567,17713,-27558,17727,-27549,17742,-27539,17756,-27530,17770,-27521,17784,-27512,17798,-27503,17812,-27494,17826,-27485,17840,-27476,17854,-27467,17868,-27457,17882,-27448,17896,-27439,17910,-27430,17924,-27421,17938,-27412,17952,-27402,17966,-27393,17980,-27384,17994,-27375,18008,-27366,18022,-27356,18036,-27347,18050,-27338,18064,-27329,18078,-27320,18092,-27310,18106,-27301,18120,-27292,18134,-27282,18148,-27273,18162,-27264,18176,-27255,18190,-27245,18204,-27236,18218,-27227,18232,-27217,18246,-27208,18260,-27199,18273,-27189,18287,-27180,18301,-27171,18315,-27161,18329,-27152,18343,-27142,18357,-27133,18371,-27124,18385,-27114,18398,-27105,18412,-27095,18426,-27086,18440,-27077,18454,-27067,18468,-27058,18482,-27048,18495,-27039,18509,-27029,18523,-27020,18537,-27010,18551,-27001,18564,-26991,18578,-26982,18592,-26972,18606,-26963,18620,-26953,18633,-26944,18647,-26934,18661,-26925,18675,-26915,18689,-26906,18702,-26896,18716,-26886,18730,-26877,18744,-26867,18757,-26858,18771,-26848,18785,-26838,18798,-26829,18812,-26819,18826,-26810,18840,-26800,18853,-26790,18867,-26781,18881,-26771,18894,-26761,18908,-26752,18922,-26742,18935,-26732,18949,-26723,18963,-26713,18976,-26703,18990,-26693,19004,-26684,19017,-26674,19031,-26664,19045,-26655,19058,-26645,19072,-26635,19086,-26625,19099,-26616,19113,-26606,19126,-26596,19140,-26586,19154,-26576,19167,-26567,19181,-26557,19194,-26547,19208,-26537,19221,-26527,19235,-26517,19249,-26508,19262,-26498,19276,-26488,19289,-26478,19303,-26468,19316,-26458,19330,-26448,19343,-26438,19357,-26429,19370,-26419,19384,-26409,19397,-26399,19411,-26389,19424,-26379,19438,-26369,19451,-26359,19465,-26349,19478,-26339,19492,-26329,19505,-26319,19519,-26309,19532,-26299,19546,-26289,19559,-26279,19573,-26269,19586,-26259,19599,-26249,19613,-26239,19626,-26229,19640,-26219,19653,-26209,19667,-26199,19680,-26189,19693,-26179,19707,-26169,19720,-26159,19733,-26149,19747,-26138,19760,-26128,19774,-26118,19787,-26108,19800,-26098,19814,-26088,19827,-26078,19840,-26068,19854,-26057,19867,-26047,19880,-26037,19894,-26027,19907,-26017,19920,-26007,19933,-25996,19947,-25986,19960,-25976,19973,-25966,19987,-25955,20000,-25945,20013,-25935,20026,-25925,20040,-25914,20053,-25904,20066,-25894,20079,-25884,20093,-25873,20106,-25863,20119,-25853,20132,-25843,20146,-25832,20159,-25822,20172,-25812,20185,-25801,20198,-25791,20212,-25781,20225,-25770,20238,-25760,20251,-25750,20264,-25739,20277,-25729,20291,-25718,20304,-25708,20317,-25698,20330,-25687,20343,-25677,20356,-25666,20369,-25656,20383,-25646,20396,-25635,20409,-25625,20422,-25614,20435,-25604,20448,-25593,20461,-25583,20474,-25572,20487,-25562,20500,-25551,20513,-25541,20527,-25530,20540,-25520,20553,-25509,20566,-25499,20579,-25488,20592,-25478,20605,-25467,20618,-25457,20631,-25446,20644,-25436,20657,-25425,20670,-25415,20683,-25404,20696,-25393,20709,-25383,20722,-25372,20735,-25362,20748,-25351,20761,-25340,20774,-25330,20787,-25319,20800,-25308,20813,-25298,20825,-25287,20838,-25277,20851,-25266,20864,-25255,20877,-25244,20890,-25234,20903,-25223,20916,-25212,20929,-25202,20942,-25191,20955,-25180,20967,-25170,20980,-25159,20993,-25148,21006,-25137,21019,-25127,21032,-25116,21045,-25105,21057,-25094,21070,-25084,21083,-25073,21096,-25062,21109,-25051,21122,-25040,21134,-25030,21147,-25019,21160,-25008,21173,-24997,21186,-24986,21198,-24975,21211,-24965,21224,-24954,21237,-24943,21249,-24932,21262,-24921,21275,-24910,21288,-24899,21300,-24888,21313,-24878,21326,-24867,21339,-24856,21351,-24845,21364,-24834,21377,-24823,21389,-24812,21402,-24801,21415,-24790,21427,-24779,21440,-24768,21453,-24757,21465,-24746,21478,-24735,21491,-24724,21503,-24713,21516,-24702,21529,-24691,21541,-24680,21554,-24669,21566,-24658,21579,-24647,21592,-24636,21604,-24625,21617,-24614,21629,-24603,21642,-24592,21655,-24581,21667,-24570,21680,-24559,21692,-24547,21705,-24536,21717,-24525,21730,-24514,21743,-24503,21755,-24492,21768,-24481,21780,-24470,21793,-24458,21805,-24447,21818,-24436,21830,-24425,21843,-24414,21855,-24403,21868,-24391,21880,-24380,21893,-24369,21905,-24358,21917,-24347,21930,-24335,21942,-24324,21955,-24313,21967,-24302,21980,-24290,21992,-24279,22004,-24268,22017,-24257,22029,-24245,22042,-24234,22054,-24223,22066,-24212,22079,-24200,22091,-24189,22104,-24178,22116,-24166,22128,-24155,22141,-24144,22153,-24132,22165,-24121,22178,-24110,22190,-24098,22202,-24087,22215,-24076,22227,-24064,22239,-24053,22252,-24042,22264,-24030,22276,-24019,22288,-24007,22301,-23996,22313,-23985,22325,-23973,22338,-23962,22350,-23950,22362,-23939,22374,-23927,22387,-23916,22399,-23904,22411,-23893,22423,-23882,22435,-23870,22448,-23859,22460,-23847,22472,-23836,22484,-23824,22496,-23813,22509,-23801,22521,-23790,22533,-23778,22545,-23767,22557,-23755,22569,-23743,22582,-23732,22594,-23720,22606,-23709,22618,-23697,22630,-23686,22642,-23674,22654,-23662,22666,-23651,22678,-23639,22691,-23628,22703,-23616,22715,-23604,22727,-23593,22739,-23581,22751,-23570,22763,-23558,22775,-23546,22787,-23535,22799,-23523,22811,-23511,22823,-23500,22835,-23488,22847,-23476,22859,-23465,22871,-23453,22883,-23441,22895,-23429,22907,-23418,22919,-23406,22931,-23394,22943,-23383,22955,-23371,22967,-23359,22979,-23347,22991,-23336,23003,-23324,23015,-23312,23027,-23300,23039,-23288,23050,-23277,23062,-23265,23074,-23253,23086,-23241,23098,-23229,23110,-23218,23122,-23206,23134,-23194,23146,-23182,23157,-23170,23169,-23158,23181,-23147,23193,-23135,23205,-23123,23217,-23111,23228,-23099,23240,-23087,23252,-23075,23264,-23063,23276,-23051,23287,-23040,23299,-23028,23311,-23016,23323,-23004,23335,-22992,23346,-22980,23358,-22968,23370,-22956,23382,-22944,23393,-22932,23405,-22920,23417,-22908,23428,-22896,23440,-22884,23452,-22872,23464,-22860,23475,-22848,23487,-22836,23499,-22824,23510,-22812,23522,-22800,23534,-22788,23545,-22776,23557,-22764,23569,-22752,23580,-22740,23592,-22728,23603,-22716,23615,-22704,23627,-22692,23638,-22679,23650,-22667,23661,-22655,23673,-22643,23685,-22631,23696,-22619,23708,-22607,23719,-22595,23731,-22583,23742,-22570,23754,-22558,23766,-22546,23777,-22534,23789,-22522,23800,-22510,23812,-22497,23823,-22485,23835,-22473,23846,-22461,23858,-22449,23869,-22436,23881,-22424,23892,-22412,23903,-22400,23915,-22388,23926,-22375,23938,-22363,23949,-22351,23961,-22339,23972,-22326,23984,-22314,23995,-22302,24006,-22289,24018,-22277,24029,-22265,24041,-22253,24052,-22240,24063,-22228,24075,-22216,24086,-22203,24097,-22191,24109,-22179,24120,-22166,24131,-22154,24143,-22142,24154,-22129,24165,-22117,24177,-22105,24188,-22092,24199,-22080,24211,-22067,24222,-22055,24233,-22043,24244,-22030,24256,-22018,24267,-22005,24278,-21993,24289,-21981,24301,-21968,24312,-21956,24323,-21943,24334,-21931,24346,-21918,24357,-21906,24368,-21894,24379,-21881,24390,-21869,24402,-21856,24413,-21844,24424,-21831,24435,-21819,24446,-21806,24457,-21794,24469,-21781,24480,-21769,24491,-21756,24502,-21744,24513,-21731,24524,-21718,24535,-21706,24546,-21693,24558,-21681,24569,-21668,24580,-21656,24591,-21643,24602,-21630,24613,-21618,24624,-21605,24635,-21593,24646,-21580,24657,-21567,24668,-21555,24679,-21542,24690,-21530,24701,-21517,24712,-21504,24723,-21492,24734,-21479,24745,-21466,24756,-21454,24767,-21441,24778,-21428,24789,-21416,24800,-21403,24811,-21390,24822,-21378,24833,-21365,24844,-21352,24855,-21340,24866,-21327,24877,-21314,24887,-21301,24898,-21289,24909,-21276,24920,-21263,24931,-21250,24942,-21238,24953,-21225,24964,-21212,24974,-21199,24985,-21187,24996,-21174,25007,-21161,25018,-21148,25029,-21135,25039,-21123,25050,-21110,25061,-21097,25072,-21084,25083,-21071,25093,-21058,25104,-21046,25115,-21033,25126,-21020,25136,-21007,25147,-20994,25158,-20981,25169,-20968,25179,-20956,25190,-20943,25201,-20930,25211,-20917,25222,-20904,25233,-20891,25243,-20878,25254,-20865,25265,-20852,25276,-20839,25286,-20826,25297,-20814,25307,-20801,25318,-20788,25329,-20775,25339,-20762,25350,-20749,25361,-20736,25371,-20723,25382,-20710,25392,-20697,25403,-20684,25414,-20671,25424,-20658,25435,-20645,25445,-20632,25456,-20619,25466,-20606,25477,-20593,25487,-20580,25498,-20567,25508,-20554,25519,-20541,25529,-20528,25540,-20514,25550,-20501,25561,-20488,25571,-20475,25582,-20462,25592,-20449,25603,-20436,25613,-20423,25624,-20410,25634,-20397,25645,-20384,25655,-20370,25665,-20357,25676,-20344,25686,-20331,25697,-20318,25707,-20305,25717,-20292,25728,-20278,25738,-20265,25749,-20252,25759,-20239,25769,-20226,25780,-20213,25790,-20199,25800,-20186,25811,-20173,25821,-20160,25831,-20147,25842,-20133,25852,-20120,25862,-20107,25872,-20094,25883,-20080,25893,-20067,25903,-20054,25913,-20041,25924,-20027,25934,-20014,25944,-20001,25954,-19988,25965,-19974,25975,-19961,25985,-19948,25995,-19934,26006,-19921,26016,-19908,26026,-19895,26036,-19881,26046,-19868,26056,-19855,26067,-19841,26077,-19828,26087,-19815,26097,-19801,26107,-19788,26117,-19775,26127,-19761,26137,-19748,26148,-19734,26158,-19721,26168,-19708,26178,-19694,26188,-19681,26198,-19668,26208,-19654,26218,-19641,26228,-19627,26238,-19614,26248,-19600,26258,-19587,26268,-19574,26278,-19560,26288,-19547,26298,-19533,26308,-19520,26318,-19506,26328,-19493,26338,-19479,26348,-19466,26358,-19452,26368,-19439,26378,-19425,26388,-19412,26398,-19398,26408,-19385,26418,-19371,26428,-19358,26437,-19344,26447,-19331,26457,-19317,26467,-19304,26477,-19290,26487,-19277,26497,-19263,26507,-19250,26516,-19236,26526,-19222,26536,-19209,26546,-19195,26556,-19182,26566,-19168,26575,-19155,26585,-19141,26595,-19127,26605,-19114,26615,-19100,26624,-19087,26634,-19073,26644,-19059,26654,-19046,26663,-19032,26673,-19018,26683,-19005,26692,-18991,26702,-18977,26712,-18964,26722,-18950,26731,-18936,26741,-18923,26751,-18909,26760,-18895,26770,-18882,26780,-18868,26789,-18854,26799,-18841,26809,-18827,26818,-18813,26828,-18799,26837,-18786,26847,-18772,26857,-18758,26866,-18745,26876,-18731,26885,-18717,26895,-18703,26905,-18690,26914,-18676,26924,-18662,26933,-18648,26943,-18634,26952,-18621,26962,-18607,26971,-18593,26981,-18579,26990,-18565,27000,-18552,27009,-18538,27019,-18524,27028,-18510,27038,-18496,27047,-18483,27057,-18469,27066,-18455,27076,-18441,27085,-18427,27094,-18413,27104,-18399,27113,-18386,27123,-18372,27132,-18358,27141,-18344,27151,-18330,27160,-18316,27170,-18302,27179,-18288,27188,-18274,27198,-18261,27207,-18247,27216,-18233,27226,-18219,27235,-18205,27244,-18191,27254,-18177,27263,-18163,27272,-18149,27281,-18135,27291,-18121,27300,-18107,27309,-18093,27319,-18079,27328,-18065,27337,-18051,27346,-18037,27355,-18023,27365,-18009,27374,-17995,27383,-17981,27392,-17967,27401,-17953,27411,-17939,27420,-17925,27429,-17911,27438,-17897,27447,-17883,27456,-17869,27466,-17855,27475,-17841,27484,-17827,27493,-17813,27502,-17799,27511,-17785,27520,-17771,27529,-17757,27538,-17743,27548,-17728,27557,-17714,27566,-17700,27575,-17686,27584,-17672,27593,-17658,27602,-17644,27611,-17630,27620,-17616,27629,-17601,27638,-17587,27647,-17573,27656,-17559,27665,-17545,27674,-17531,27683,-17517,27692,-17502,27701,-17488,27710,-17474,27719,-17460,27728,-17446,27736,-17432,27745,-17417,27754,-17403,27763,-17389,27772,-17375,27781,-17361,27790,-17346,27799,-17332,27808,-17318,27816,-17304,27825,-17289,27834,-17275,27843,-17261,27852,-17247,27861,-17233,27869,-17218,27878,-17204,27887,-17190,27896,-17175,27905,-17161,27913,-17147,27922,-17133,27931,-17118,27940,-17104,27948,-17090,27957,-17075,27966,-17061,27975,-17047,27983,-17033,27992,-17018,28001,-17004,28009,-16990,28018,-16975,28027,-16961,28036,-16947,28044,-16932,28053,-16918,28062,-16904,28070,-16889,28079,-16875,28087,-16860,28096,-16846,28105,-16832,28113,-16817,28122,-16803,28131,-16789,28139,-16774,28148,-16760,28156,-16745,28165,-16731,28173,-16717,28182,-16702,28190,-16688,28199,-16673,28208,-16659,28216,-16644,28225,-16630,28233,-16616,28242,-16601,28250,-16587,28259,-16572,28267,-16558,28275,-16543,28284,-16529,28292,-16514,28301,-16500,28309,-16485,28318,-16471,28326,-16456,28335,-16442,28343,-16428,28351,-16413,28360,-16399,28368}; diff --git a/openair1/PHY/TOOLS/twiddle6144.h b/openair1/PHY/TOOLS/twiddle6144.h deleted file mode 100644 index 6fc18ebfbe..0000000000 --- a/openair1/PHY/TOOLS/twiddle6144.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:2047)/6144)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*(0:2:4094)/6144)); -twa2 = zeros(1,4096); -twb2 = zeros(1,4096); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); - - - */ -int16_t twa6144[4096] __attribute__((aligned(32))) = {32767,0,32766,-34,32766,-68,32766,-101,32766,-135,32766,-168,32766,-202,32766,-235,32765,-269,32765,-302,32765,-336,32764,-369,32764,-403,32764,-436,32763,-470,32763,-503,32762,-537,32762,-570,32761,-604,32760,-637,32760,-671,32759,-704,32758,-738,32757,-771,32757,-805,32756,-838,32755,-872,32754,-905,32753,-939,32752,-972,32751,-1006,32750,-1039,32749,-1073,32748,-1106,32747,-1140,32746,-1173,32744,-1207,32743,-1240,32742,-1274,32740,-1307,32739,-1340,32738,-1374,32736,-1407,32735,-1441,32733,-1474,32732,-1508,32730,-1541,32729,-1575,32727,-1608,32725,-1642,32724,-1675,32722,-1709,32720,-1742,32718,-1776,32717,-1809,32715,-1843,32713,-1876,32711,-1909,32709,-1943,32707,-1976,32705,-2010,32703,-2043,32701,-2077,32699,-2110,32696,-2144,32694,-2177,32692,-2210,32690,-2244,32687,-2277,32685,-2311,32683,-2344,32680,-2378,32678,-2411,32675,-2444,32673,-2478,32670,-2511,32668,-2545,32665,-2578,32662,-2611,32660,-2645,32657,-2678,32654,-2712,32651,-2745,32649,-2778,32646,-2812,32643,-2845,32640,-2879,32637,-2912,32634,-2945,32631,-2979,32628,-3012,32625,-3045,32622,-3079,32618,-3112,32615,-3146,32612,-3179,32609,-3212,32605,-3246,32602,-3279,32599,-3312,32595,-3346,32592,-3379,32588,-3412,32585,-3446,32581,-3479,32578,-3512,32574,-3546,32571,-3579,32567,-3612,32563,-3645,32559,-3679,32556,-3712,32552,-3745,32548,-3779,32544,-3812,32540,-3845,32536,-3878,32532,-3912,32528,-3945,32524,-3978,32520,-4012,32516,-4045,32512,-4078,32508,-4111,32503,-4145,32499,-4178,32495,-4211,32491,-4244,32486,-4277,32482,-4311,32477,-4344,32473,-4377,32468,-4410,32464,-4444,32459,-4477,32455,-4510,32450,-4543,32445,-4576,32441,-4609,32436,-4643,32431,-4676,32426,-4709,32422,-4742,32417,-4775,32412,-4808,32407,-4842,32402,-4875,32397,-4908,32392,-4941,32387,-4974,32382,-5007,32377,-5040,32371,-5073,32366,-5107,32361,-5140,32356,-5173,32350,-5206,32345,-5239,32340,-5272,32334,-5305,32329,-5338,32323,-5371,32318,-5404,32312,-5437,32307,-5470,32301,-5503,32295,-5536,32290,-5569,32284,-5602,32278,-5635,32273,-5668,32267,-5701,32261,-5734,32255,-5767,32249,-5800,32243,-5833,32237,-5866,32231,-5899,32225,-5932,32219,-5965,32213,-5998,32207,-6031,32201,-6064,32194,-6097,32188,-6130,32182,-6163,32176,-6196,32169,-6229,32163,-6262,32156,-6294,32150,-6327,32143,-6360,32137,-6393,32130,-6426,32124,-6459,32117,-6492,32110,-6524,32104,-6557,32097,-6590,32090,-6623,32084,-6656,32077,-6689,32070,-6721,32063,-6754,32056,-6787,32049,-6820,32042,-6852,32035,-6885,32028,-6918,32021,-6951,32014,-6983,32007,-7016,31999,-7049,31992,-7082,31985,-7114,31978,-7147,31970,-7180,31963,-7212,31956,-7245,31948,-7278,31941,-7311,31933,-7343,31926,-7376,31918,-7408,31911,-7441,31903,-7474,31895,-7506,31888,-7539,31880,-7572,31872,-7604,31864,-7637,31856,-7669,31849,-7702,31841,-7734,31833,-7767,31825,-7800,31817,-7832,31809,-7865,31801,-7897,31793,-7930,31785,-7962,31776,-7995,31768,-8027,31760,-8060,31752,-8092,31743,-8125,31735,-8157,31727,-8190,31718,-8222,31710,-8254,31701,-8287,31693,-8319,31684,-8352,31676,-8384,31667,-8416,31659,-8449,31650,-8481,31641,-8514,31633,-8546,31624,-8578,31615,-8611,31606,-8643,31597,-8675,31588,-8708,31580,-8740,31571,-8772,31562,-8804,31553,-8837,31544,-8869,31534,-8901,31525,-8933,31516,-8966,31507,-8998,31498,-9030,31489,-9062,31479,-9095,31470,-9127,31461,-9159,31451,-9191,31442,-9223,31432,-9255,31423,-9288,31413,-9320,31404,-9352,31394,-9384,31385,-9416,31375,-9448,31365,-9480,31356,-9512,31346,-9544,31336,-9576,31326,-9608,31316,-9640,31307,-9672,31297,-9704,31287,-9736,31277,-9768,31267,-9800,31257,-9832,31247,-9864,31236,-9896,31226,-9928,31216,-9960,31206,-9992,31196,-10024,31185,-10056,31175,-10088,31165,-10120,31154,-10152,31144,-10183,31134,-10215,31123,-10247,31113,-10279,31102,-10311,31092,-10343,31081,-10374,31070,-10406,31060,-10438,31049,-10470,31038,-10501,31028,-10533,31017,-10565,31006,-10597,30995,-10628,30984,-10660,30973,-10692,30962,-10723,30951,-10755,30940,-10787,30929,-10818,30918,-10850,30907,-10881,30896,-10913,30885,-10945,30874,-10976,30862,-11008,30851,-11039,30840,-11071,30828,-11102,30817,-11134,30806,-11165,30794,-11197,30783,-11228,30771,-11260,30760,-11291,30748,-11323,30737,-11354,30725,-11386,30713,-11417,30702,-11449,30690,-11480,30678,-11511,30666,-11543,30655,-11574,30643,-11605,30631,-11637,30619,-11668,30607,-11699,30595,-11731,30583,-11762,30571,-11793,30559,-11824,30547,-11856,30535,-11887,30522,-11918,30510,-11949,30498,-11981,30486,-12012,30473,-12043,30461,-12074,30449,-12105,30436,-12136,30424,-12167,30411,-12199,30399,-12230,30386,-12261,30374,-12292,30361,-12323,30349,-12354,30336,-12385,30323,-12416,30311,-12447,30298,-12478,30285,-12509,30272,-12540,30259,-12571,30247,-12602,30234,-12633,30221,-12664,30208,-12695,30195,-12725,30182,-12756,30169,-12787,30156,-12818,30142,-12849,30129,-12880,30116,-12910,30103,-12941,30090,-12972,30076,-13003,30063,-13034,30050,-13064,30036,-13095,30023,-13126,30009,-13156,29996,-13187,29983,-13218,29969,-13248,29955,-13279,29942,-13310,29928,-13340,29915,-13371,29901,-13401,29887,-13432,29873,-13463,29860,-13493,29846,-13524,29832,-13554,29818,-13585,29804,-13615,29790,-13646,29776,-13676,29762,-13707,29748,-13737,29734,-13767,29720,-13798,29706,-13828,29692,-13859,29678,-13889,29663,-13919,29649,-13950,29635,-13980,29621,-14010,29606,-14040,29592,-14071,29577,-14101,29563,-14131,29548,-14161,29534,-14192,29519,-14222,29505,-14252,29490,-14282,29476,-14312,29461,-14343,29446,-14373,29432,-14403,29417,-14433,29402,-14463,29387,-14493,29372,-14523,29358,-14553,29343,-14583,29328,-14613,29313,-14643,29298,-14673,29283,-14703,29268,-14733,29253,-14763,29238,-14793,29222,-14823,29207,-14853,29192,-14882,29177,-14912,29162,-14942,29146,-14972,29131,-15002,29116,-15031,29100,-15061,29085,-15091,29069,-15121,29054,-15150,29038,-15180,29023,-15210,29007,-15239,28992,-15269,28976,-15299,28960,-15328,28945,-15358,28929,-15388,28913,-15417,28897,-15447,28882,-15476,28866,-15506,28850,-15535,28834,-15565,28818,-15594,28802,-15624,28786,-15653,28770,-15683,28754,-15712,28738,-15741,28722,-15771,28706,-15800,28690,-15830,28673,-15859,28657,-15888,28641,-15918,28625,-15947,28608,-15976,28592,-16005,28575,-16035,28559,-16064,28543,-16093,28526,-16122,28510,-16151,28493,-16180,28477,-16210,28460,-16239,28443,-16268,28427,-16297,28410,-16326,28393,-16355,28377,-16384,28360,-16413,28343,-16442,28326,-16471,28309,-16500,28292,-16529,28275,-16558,28259,-16587,28242,-16616,28225,-16644,28208,-16673,28190,-16702,28173,-16731,28156,-16760,28139,-16789,28122,-16817,28105,-16846,28087,-16875,28070,-16904,28053,-16932,28036,-16961,28018,-16990,28001,-17018,27983,-17047,27966,-17075,27948,-17104,27931,-17133,27913,-17161,27896,-17190,27878,-17218,27861,-17247,27843,-17275,27825,-17304,27808,-17332,27790,-17361,27772,-17389,27754,-17417,27736,-17446,27719,-17474,27701,-17502,27683,-17531,27665,-17559,27647,-17587,27629,-17616,27611,-17644,27593,-17672,27575,-17700,27557,-17728,27538,-17757,27520,-17785,27502,-17813,27484,-17841,27466,-17869,27447,-17897,27429,-17925,27411,-17953,27392,-17981,27374,-18009,27355,-18037,27337,-18065,27319,-18093,27300,-18121,27281,-18149,27263,-18177,27244,-18205,27226,-18233,27207,-18261,27188,-18288,27170,-18316,27151,-18344,27132,-18372,27113,-18399,27094,-18427,27076,-18455,27057,-18483,27038,-18510,27019,-18538,27000,-18565,26981,-18593,26962,-18621,26943,-18648,26924,-18676,26905,-18703,26885,-18731,26866,-18758,26847,-18786,26828,-18813,26809,-18841,26789,-18868,26770,-18895,26751,-18923,26731,-18950,26712,-18977,26692,-19005,26673,-19032,26654,-19059,26634,-19087,26615,-19114,26595,-19141,26575,-19168,26556,-19195,26536,-19222,26516,-19250,26497,-19277,26477,-19304,26457,-19331,26437,-19358,26418,-19385,26398,-19412,26378,-19439,26358,-19466,26338,-19493,26318,-19520,26298,-19547,26278,-19574,26258,-19600,26238,-19627,26218,-19654,26198,-19681,26178,-19708,26158,-19734,26137,-19761,26117,-19788,26097,-19815,26077,-19841,26056,-19868,26036,-19895,26016,-19921,25995,-19948,25975,-19974,25954,-20001,25934,-20027,25913,-20054,25893,-20080,25872,-20107,25852,-20133,25831,-20160,25811,-20186,25790,-20213,25769,-20239,25749,-20265,25728,-20292,25707,-20318,25686,-20344,25665,-20370,25645,-20397,25624,-20423,25603,-20449,25582,-20475,25561,-20501,25540,-20528,25519,-20554,25498,-20580,25477,-20606,25456,-20632,25435,-20658,25414,-20684,25392,-20710,25371,-20736,25350,-20762,25329,-20788,25307,-20814,25286,-20839,25265,-20865,25243,-20891,25222,-20917,25201,-20943,25179,-20968,25158,-20994,25136,-21020,25115,-21046,25093,-21071,25072,-21097,25050,-21123,25029,-21148,25007,-21174,24985,-21199,24964,-21225,24942,-21250,24920,-21276,24898,-21301,24877,-21327,24855,-21352,24833,-21378,24811,-21403,24789,-21428,24767,-21454,24745,-21479,24723,-21504,24701,-21530,24679,-21555,24657,-21580,24635,-21605,24613,-21630,24591,-21656,24569,-21681,24546,-21706,24524,-21731,24502,-21756,24480,-21781,24457,-21806,24435,-21831,24413,-21856,24390,-21881,24368,-21906,24346,-21931,24323,-21956,24301,-21981,24278,-22005,24256,-22030,24233,-22055,24211,-22080,24188,-22105,24165,-22129,24143,-22154,24120,-22179,24097,-22203,24075,-22228,24052,-22253,24029,-22277,24006,-22302,23984,-22326,23961,-22351,23938,-22375,23915,-22400,23892,-22424,23869,-22449,23846,-22473,23823,-22497,23800,-22522,23777,-22546,23754,-22570,23731,-22595,23708,-22619,23685,-22643,23661,-22667,23638,-22692,23615,-22716,23592,-22740,23569,-22764,23545,-22788,23522,-22812,23499,-22836,23475,-22860,23452,-22884,23428,-22908,23405,-22932,23382,-22956,23358,-22980,23335,-23004,23311,-23028,23287,-23051,23264,-23075,23240,-23099,23217,-23123,23193,-23147,23169,-23170,23146,-23194,23122,-23218,23098,-23241,23074,-23265,23050,-23288,23027,-23312,23003,-23336,22979,-23359,22955,-23383,22931,-23406,22907,-23429,22883,-23453,22859,-23476,22835,-23500,22811,-23523,22787,-23546,22763,-23570,22739,-23593,22715,-23616,22691,-23639,22666,-23662,22642,-23686,22618,-23709,22594,-23732,22569,-23755,22545,-23778,22521,-23801,22496,-23824,22472,-23847,22448,-23870,22423,-23893,22399,-23916,22374,-23939,22350,-23962,22325,-23985,22301,-24007,22276,-24030,22252,-24053,22227,-24076,22202,-24098,22178,-24121,22153,-24144,22128,-24166,22104,-24189,22079,-24212,22054,-24234,22029,-24257,22004,-24279,21980,-24302,21955,-24324,21930,-24347,21905,-24369,21880,-24391,21855,-24414,21830,-24436,21805,-24458,21780,-24481,21755,-24503,21730,-24525,21705,-24547,21680,-24570,21655,-24592,21629,-24614,21604,-24636,21579,-24658,21554,-24680,21529,-24702,21503,-24724,21478,-24746,21453,-24768,21427,-24790,21402,-24812,21377,-24834,21351,-24856,21326,-24878,21300,-24899,21275,-24921,21249,-24943,21224,-24965,21198,-24986,21173,-25008,21147,-25030,21122,-25051,21096,-25073,21070,-25094,21045,-25116,21019,-25137,20993,-25159,20967,-25180,20942,-25202,20916,-25223,20890,-25244,20864,-25266,20838,-25287,20813,-25308,20787,-25330,20761,-25351,20735,-25372,20709,-25393,20683,-25415,20657,-25436,20631,-25457,20605,-25478,20579,-25499,20553,-25520,20527,-25541,20500,-25562,20474,-25583,20448,-25604,20422,-25625,20396,-25646,20369,-25666,20343,-25687,20317,-25708,20291,-25729,20264,-25750,20238,-25770,20212,-25791,20185,-25812,20159,-25832,20132,-25853,20106,-25873,20079,-25894,20053,-25914,20026,-25935,20000,-25955,19973,-25976,19947,-25996,19920,-26017,19894,-26037,19867,-26057,19840,-26078,19814,-26098,19787,-26118,19760,-26138,19733,-26159,19707,-26179,19680,-26199,19653,-26219,19626,-26239,19599,-26259,19573,-26279,19546,-26299,19519,-26319,19492,-26339,19465,-26359,19438,-26379,19411,-26399,19384,-26419,19357,-26438,19330,-26458,19303,-26478,19276,-26498,19249,-26517,19221,-26537,19194,-26557,19167,-26576,19140,-26596,19113,-26616,19086,-26635,19058,-26655,19031,-26674,19004,-26693,18976,-26713,18949,-26732,18922,-26752,18894,-26771,18867,-26790,18840,-26810,18812,-26829,18785,-26848,18757,-26867,18730,-26886,18702,-26906,18675,-26925,18647,-26944,18620,-26963,18592,-26982,18564,-27001,18537,-27020,18509,-27039,18482,-27058,18454,-27077,18426,-27095,18398,-27114,18371,-27133,18343,-27152,18315,-27171,18287,-27189,18260,-27208,18232,-27227,18204,-27245,18176,-27264,18148,-27282,18120,-27301,18092,-27320,18064,-27338,18036,-27356,18008,-27375,17980,-27393,17952,-27412,17924,-27430,17896,-27448,17868,-27467,17840,-27485,17812,-27503,17784,-27521,17756,-27539,17727,-27558,17699,-27576,17671,-27594,17643,-27612,17615,-27630,17586,-27648,17558,-27666,17530,-27684,17501,-27702,17473,-27720,17445,-27737,17416,-27755,17388,-27773,17360,-27791,17331,-27809,17303,-27826,17274,-27844,17246,-27862,17217,-27879,17189,-27897,17160,-27914,17132,-27932,17103,-27949,17074,-27967,17046,-27984,17017,-28002,16989,-28019,16960,-28037,16931,-28054,16903,-28071,16874,-28088,16845,-28106,16816,-28123,16788,-28140,16759,-28157,16730,-28174,16701,-28191,16672,-28209,16643,-28226,16615,-28243,16586,-28260,16557,-28276,16528,-28293,16499,-28310,16470,-28327,16441,-28344,16412,-28361,16383,-28378,16354,-28394,16325,-28411,16296,-28428,16267,-28444,16238,-28461,16209,-28478,16179,-28494,16150,-28511,16121,-28527,16092,-28544,16063,-28560,16034,-28576,16004,-28593,15975,-28609,15946,-28626,15917,-28642,15887,-28658,15858,-28674,15829,-28691,15799,-28707,15770,-28723,15740,-28739,15711,-28755,15682,-28771,15652,-28787,15623,-28803,15593,-28819,15564,-28835,15534,-28851,15505,-28867,15475,-28883,15446,-28898,15416,-28914,15387,-28930,15357,-28946,15327,-28961,15298,-28977,15268,-28993,15238,-29008,15209,-29024,15179,-29039,15149,-29055,15120,-29070,15090,-29086,15060,-29101,15030,-29117,15001,-29132,14971,-29147,14941,-29163,14911,-29178,14881,-29193,14852,-29208,14822,-29223,14792,-29239,14762,-29254,14732,-29269,14702,-29284,14672,-29299,14642,-29314,14612,-29329,14582,-29344,14552,-29359,14522,-29373,14492,-29388,14462,-29403,14432,-29418,14402,-29433,14372,-29447,14342,-29462,14311,-29477,14281,-29491,14251,-29506,14221,-29520,14191,-29535,14160,-29549,14130,-29564,14100,-29578,14070,-29593,14039,-29607,14009,-29622,13979,-29636,13949,-29650,13918,-29664,13888,-29679,13858,-29693,13827,-29707,13797,-29721,13766,-29735,13736,-29749,13706,-29763,13675,-29777,13645,-29791,13614,-29805,13584,-29819,13553,-29833,13523,-29847,13492,-29861,13462,-29874,13431,-29888,13400,-29902,13370,-29916,13339,-29929,13309,-29943,13278,-29956,13247,-29970,13217,-29984,13186,-29997,13155,-30010,13125,-30024,13094,-30037,13063,-30051,13033,-30064,13002,-30077,12971,-30091,12940,-30104,12909,-30117,12879,-30130,12848,-30143,12817,-30157,12786,-30170,12755,-30183,12724,-30196,12694,-30209,12663,-30222,12632,-30235,12601,-30248,12570,-30260,12539,-30273,12508,-30286,12477,-30299,12446,-30312,12415,-30324,12384,-30337,12353,-30350,12322,-30362,12291,-30375,12260,-30387,12229,-30400,12198,-30412,12166,-30425,12135,-30437,12104,-30450,12073,-30462,12042,-30474,12011,-30487,11980,-30499,11948,-30511,11917,-30523,11886,-30536,11855,-30548,11823,-30560,11792,-30572,11761,-30584,11730,-30596,11698,-30608,11667,-30620,11636,-30632,11604,-30644,11573,-30656,11542,-30667,11510,-30679,11479,-30691,11448,-30703,11416,-30714,11385,-30726,11353,-30738,11322,-30749,11290,-30761,11259,-30772,11227,-30784,11196,-30795,11164,-30807,11133,-30818,11101,-30829,11070,-30841,11038,-30852,11007,-30863,10975,-30875,10944,-30886,10912,-30897,10880,-30908,10849,-30919,10817,-30930,10786,-30941,10754,-30952,10722,-30963,10691,-30974,10659,-30985,10627,-30996,10596,-31007,10564,-31018,10532,-31029,10500,-31039,10469,-31050,10437,-31061,10405,-31071,10373,-31082,10342,-31093,10310,-31103,10278,-31114,10246,-31124,10214,-31135,10182,-31145,10151,-31155,10119,-31166,10087,-31176,10055,-31186,10023,-31197,9991,-31207,9959,-31217,9927,-31227,9895,-31237,9863,-31248,9831,-31258,9799,-31268,9767,-31278,9735,-31288,9703,-31298,9671,-31308,9639,-31317,9607,-31327,9575,-31337,9543,-31347,9511,-31357,9479,-31366,9447,-31376,9415,-31386,9383,-31395,9351,-31405,9319,-31414,9287,-31424,9254,-31433,9222,-31443,9190,-31452,9158,-31462,9126,-31471,9094,-31480,9061,-31490,9029,-31499,8997,-31508,8965,-31517,8932,-31526,8900,-31535,8868,-31545,8836,-31554,8803,-31563,8771,-31572,8739,-31581,8707,-31589,8674,-31598,8642,-31607,8610,-31616,8577,-31625,8545,-31634,8513,-31642,8480,-31651,8448,-31660,8415,-31668,8383,-31677,8351,-31685,8318,-31694,8286,-31702,8253,-31711,8221,-31719,8189,-31728,8156,-31736,8124,-31744,8091,-31753,8059,-31761,8026,-31769,7994,-31777,7961,-31786,7929,-31794,7896,-31802,7864,-31810,7831,-31818,7799,-31826,7766,-31834,7733,-31842,7701,-31850,7668,-31857,7636,-31865,7603,-31873,7571,-31881,7538,-31889,7505,-31896,7473,-31904,7440,-31912,7407,-31919,7375,-31927,7342,-31934,7310,-31942,7277,-31949,7244,-31957,7211,-31964,7179,-31971,7146,-31979,7113,-31986,7081,-31993,7048,-32000,7015,-32008,6982,-32015,6950,-32022,6917,-32029,6884,-32036,6851,-32043,6819,-32050,6786,-32057,6753,-32064,6720,-32071,6688,-32078,6655,-32085,6622,-32091,6589,-32098,6556,-32105,6523,-32111,6491,-32118,6458,-32125,6425,-32131,6392,-32138,6359,-32144,6326,-32151,6293,-32157,6261,-32164,6228,-32170,6195,-32177,6162,-32183,6129,-32189,6096,-32195,6063,-32202,6030,-32208,5997,-32214,5964,-32220,5931,-32226,5898,-32232,5865,-32238,5832,-32244,5799,-32250,5766,-32256,5733,-32262,5700,-32268,5667,-32274,5634,-32279,5601,-32285,5568,-32291,5535,-32296,5502,-32302,5469,-32308,5436,-32313,5403,-32319,5370,-32324,5337,-32330,5304,-32335,5271,-32341,5238,-32346,5205,-32351,5172,-32357,5139,-32362,5106,-32367,5072,-32372,5039,-32378,5006,-32383,4973,-32388,4940,-32393,4907,-32398,4874,-32403,4841,-32408,4807,-32413,4774,-32418,4741,-32423,4708,-32427,4675,-32432,4642,-32437,4608,-32442,4575,-32446,4542,-32451,4509,-32456,4476,-32460,4443,-32465,4409,-32469,4376,-32474,4343,-32478,4310,-32483,4276,-32487,4243,-32492,4210,-32496,4177,-32500,4144,-32504,4110,-32509,4077,-32513,4044,-32517,4011,-32521,3977,-32525,3944,-32529,3911,-32533,3877,-32537,3844,-32541,3811,-32545,3778,-32549,3744,-32553,3711,-32557,3678,-32560,3644,-32564,3611,-32568,3578,-32572,3545,-32575,3511,-32579,3478,-32582,3445,-32586,3411,-32589,3378,-32593,3345,-32596,3311,-32600,3278,-32603,3245,-32606,3211,-32610,3178,-32613,3145,-32616,3111,-32619,3078,-32623,3044,-32626,3011,-32629,2978,-32632,2944,-32635,2911,-32638,2878,-32641,2844,-32644,2811,-32647,2777,-32650,2744,-32652,2711,-32655,2677,-32658,2644,-32661,2610,-32663,2577,-32666,2544,-32669,2510,-32671,2477,-32674,2443,-32676,2410,-32679,2377,-32681,2343,-32684,2310,-32686,2276,-32688,2243,-32691,2209,-32693,2176,-32695,2143,-32697,2109,-32700,2076,-32702,2042,-32704,2009,-32706,1975,-32708,1942,-32710,1908,-32712,1875,-32714,1842,-32716,1808,-32718,1775,-32719,1741,-32721,1708,-32723,1674,-32725,1641,-32726,1607,-32728,1574,-32730,1540,-32731,1507,-32733,1473,-32734,1440,-32736,1406,-32737,1373,-32739,1339,-32740,1306,-32741,1273,-32743,1239,-32744,1206,-32745,1172,-32747,1139,-32748,1105,-32749,1072,-32750,1038,-32751,1005,-32752,971,-32753,938,-32754,904,-32755,871,-32756,837,-32757,804,-32758,770,-32758,737,-32759,703,-32760,670,-32761,636,-32761,603,-32762,569,-32763,536,-32763,502,-32764,469,-32764,435,-32765,402,-32765,368,-32765,335,-32766,301,-32766,268,-32766,234,-32767,201,-32767,167,-32767,134,-32767,100,-32767,67,-32767,33,-32767,0,-32767,-34,-32767,-68,-32767,-101,-32767,-135,-32767,-168,-32767,-202,-32767,-235,-32767,-269,-32766,-302,-32766,-336,-32766,-369,-32765,-403,-32765,-436,-32765,-470,-32764,-503,-32764,-537,-32763,-570,-32763,-604,-32762,-637,-32761,-671,-32761,-704,-32760,-738,-32759,-771,-32758,-805,-32758,-838,-32757,-872,-32756,-905,-32755,-939,-32754,-972,-32753,-1006,-32752,-1039,-32751,-1073,-32750,-1106,-32749,-1140,-32748,-1173,-32747,-1207,-32745,-1240,-32744,-1274,-32743,-1307,-32741,-1340,-32740,-1374,-32739,-1407,-32737,-1441,-32736,-1474,-32734,-1508,-32733,-1541,-32731,-1575,-32730,-1608,-32728,-1642,-32726,-1675,-32725,-1709,-32723,-1742,-32721,-1776,-32719,-1809,-32718,-1843,-32716,-1876,-32714,-1909,-32712,-1943,-32710,-1976,-32708,-2010,-32706,-2043,-32704,-2077,-32702,-2110,-32700,-2144,-32697,-2177,-32695,-2210,-32693,-2244,-32691,-2277,-32688,-2311,-32686,-2344,-32684,-2378,-32681,-2411,-32679,-2444,-32676,-2478,-32674,-2511,-32671,-2545,-32669,-2578,-32666,-2611,-32663,-2645,-32661,-2678,-32658,-2712,-32655,-2745,-32652,-2778,-32650,-2812,-32647,-2845,-32644,-2879,-32641,-2912,-32638,-2945,-32635,-2979,-32632,-3012,-32629,-3045,-32626,-3079,-32623,-3112,-32619,-3146,-32616,-3179,-32613,-3212,-32610,-3246,-32606,-3279,-32603,-3312,-32600,-3346,-32596,-3379,-32593,-3412,-32589,-3446,-32586,-3479,-32582,-3512,-32579,-3546,-32575,-3579,-32572,-3612,-32568,-3645,-32564,-3679,-32560,-3712,-32557,-3745,-32553,-3779,-32549,-3812,-32545,-3845,-32541,-3878,-32537,-3912,-32533,-3945,-32529,-3978,-32525,-4012,-32521,-4045,-32517,-4078,-32513,-4111,-32509,-4145,-32504,-4178,-32500,-4211,-32496,-4244,-32492,-4277,-32487,-4311,-32483,-4344,-32478,-4377,-32474,-4410,-32469,-4444,-32465,-4477,-32460,-4510,-32456,-4543,-32451,-4576,-32446,-4609,-32442,-4643,-32437,-4676,-32432,-4709,-32427,-4742,-32423,-4775,-32418,-4808,-32413,-4842,-32408,-4875,-32403,-4908,-32398,-4941,-32393,-4974,-32388,-5007,-32383,-5040,-32378,-5073,-32372,-5107,-32367,-5140,-32362,-5173,-32357,-5206,-32351,-5239,-32346,-5272,-32341,-5305,-32335,-5338,-32330,-5371,-32324,-5404,-32319,-5437,-32313,-5470,-32308,-5503,-32302,-5536,-32296,-5569,-32291,-5602,-32285,-5635,-32279,-5668,-32274,-5701,-32268,-5734,-32262,-5767,-32256,-5800,-32250,-5833,-32244,-5866,-32238,-5899,-32232,-5932,-32226,-5965,-32220,-5998,-32214,-6031,-32208,-6064,-32202,-6097,-32195,-6130,-32189,-6163,-32183,-6196,-32177,-6229,-32170,-6262,-32164,-6294,-32157,-6327,-32151,-6360,-32144,-6393,-32138,-6426,-32131,-6459,-32125,-6492,-32118,-6524,-32111,-6557,-32105,-6590,-32098,-6623,-32091,-6656,-32085,-6689,-32078,-6721,-32071,-6754,-32064,-6787,-32057,-6820,-32050,-6852,-32043,-6885,-32036,-6918,-32029,-6951,-32022,-6983,-32015,-7016,-32008,-7049,-32000,-7082,-31993,-7114,-31986,-7147,-31979,-7180,-31971,-7212,-31964,-7245,-31957,-7278,-31949,-7311,-31942,-7343,-31934,-7376,-31927,-7408,-31919,-7441,-31912,-7474,-31904,-7506,-31896,-7539,-31889,-7572,-31881,-7604,-31873,-7637,-31865,-7669,-31857,-7702,-31850,-7734,-31842,-7767,-31834,-7800,-31826,-7832,-31818,-7865,-31810,-7897,-31802,-7930,-31794,-7962,-31786,-7995,-31777,-8027,-31769,-8060,-31761,-8092,-31753,-8125,-31744,-8157,-31736,-8190,-31728,-8222,-31719,-8254,-31711,-8287,-31702,-8319,-31694,-8352,-31685,-8384,-31677,-8416,-31668,-8449,-31660,-8481,-31651,-8514,-31642,-8546,-31634,-8578,-31625,-8611,-31616,-8643,-31607,-8675,-31598,-8708,-31589,-8740,-31581,-8772,-31572,-8804,-31563,-8837,-31554,-8869,-31545,-8901,-31535,-8933,-31526,-8966,-31517,-8998,-31508,-9030,-31499,-9062,-31490,-9095,-31480,-9127,-31471,-9159,-31462,-9191,-31452,-9223,-31443,-9255,-31433,-9288,-31424,-9320,-31414,-9352,-31405,-9384,-31395,-9416,-31386,-9448,-31376,-9480,-31366,-9512,-31357,-9544,-31347,-9576,-31337,-9608,-31327,-9640,-31317,-9672,-31308,-9704,-31298,-9736,-31288,-9768,-31278,-9800,-31268,-9832,-31258,-9864,-31248,-9896,-31237,-9928,-31227,-9960,-31217,-9992,-31207,-10024,-31197,-10056,-31186,-10088,-31176,-10120,-31166,-10152,-31155,-10183,-31145,-10215,-31135,-10247,-31124,-10279,-31114,-10311,-31103,-10343,-31093,-10374,-31082,-10406,-31071,-10438,-31061,-10470,-31050,-10501,-31039,-10533,-31029,-10565,-31018,-10597,-31007,-10628,-30996,-10660,-30985,-10692,-30974,-10723,-30963,-10755,-30952,-10787,-30941,-10818,-30930,-10850,-30919,-10881,-30908,-10913,-30897,-10945,-30886,-10976,-30875,-11008,-30863,-11039,-30852,-11071,-30841,-11102,-30829,-11134,-30818,-11165,-30807,-11197,-30795,-11228,-30784,-11260,-30772,-11291,-30761,-11323,-30749,-11354,-30738,-11386,-30726,-11417,-30714,-11449,-30703,-11480,-30691,-11511,-30679,-11543,-30667,-11574,-30656,-11605,-30644,-11637,-30632,-11668,-30620,-11699,-30608,-11731,-30596,-11762,-30584,-11793,-30572,-11824,-30560,-11856,-30548,-11887,-30536,-11918,-30523,-11949,-30511,-11981,-30499,-12012,-30487,-12043,-30474,-12074,-30462,-12105,-30450,-12136,-30437,-12167,-30425,-12199,-30412,-12230,-30400,-12261,-30387,-12292,-30375,-12323,-30362,-12354,-30350,-12385,-30337,-12416,-30324,-12447,-30312,-12478,-30299,-12509,-30286,-12540,-30273,-12571,-30260,-12602,-30248,-12633,-30235,-12664,-30222,-12695,-30209,-12725,-30196,-12756,-30183,-12787,-30170,-12818,-30157,-12849,-30143,-12880,-30130,-12910,-30117,-12941,-30104,-12972,-30091,-13003,-30077,-13034,-30064,-13064,-30051,-13095,-30037,-13126,-30024,-13156,-30010,-13187,-29997,-13218,-29984,-13248,-29970,-13279,-29956,-13310,-29943,-13340,-29929,-13371,-29916,-13401,-29902,-13432,-29888,-13463,-29874,-13493,-29861,-13524,-29847,-13554,-29833,-13585,-29819,-13615,-29805,-13646,-29791,-13676,-29777,-13707,-29763,-13737,-29749,-13767,-29735,-13798,-29721,-13828,-29707,-13859,-29693,-13889,-29679,-13919,-29664,-13950,-29650,-13980,-29636,-14010,-29622,-14040,-29607,-14071,-29593,-14101,-29578,-14131,-29564,-14161,-29549,-14192,-29535,-14222,-29520,-14252,-29506,-14282,-29491,-14312,-29477,-14343,-29462,-14373,-29447,-14403,-29433,-14433,-29418,-14463,-29403,-14493,-29388,-14523,-29373,-14553,-29359,-14583,-29344,-14613,-29329,-14643,-29314,-14673,-29299,-14703,-29284,-14733,-29269,-14763,-29254,-14793,-29239,-14823,-29223,-14853,-29208,-14882,-29193,-14912,-29178,-14942,-29163,-14972,-29147,-15002,-29132,-15031,-29117,-15061,-29101,-15091,-29086,-15121,-29070,-15150,-29055,-15180,-29039,-15210,-29024,-15239,-29008,-15269,-28993,-15299,-28977,-15328,-28961,-15358,-28946,-15388,-28930,-15417,-28914,-15447,-28898,-15476,-28883,-15506,-28867,-15535,-28851,-15565,-28835,-15594,-28819,-15624,-28803,-15653,-28787,-15683,-28771,-15712,-28755,-15741,-28739,-15771,-28723,-15800,-28707,-15830,-28691,-15859,-28674,-15888,-28658,-15918,-28642,-15947,-28626,-15976,-28609,-16005,-28593,-16035,-28576,-16064,-28560,-16093,-28544,-16122,-28527,-16151,-28511,-16180,-28494,-16210,-28478,-16239,-28461,-16268,-28444,-16297,-28428,-16326,-28411,-16355,-28394}; - - - -int16_t twb6144[4096] __attribute__((aligned(32))) = {32767,0,32766,-68,32766,-135,32766,-202,32765,-269,32765,-336,32764,-403,32763,-470,32762,-537,32761,-604,32760,-671,32758,-738,32757,-805,32755,-872,32753,-939,32751,-1006,32749,-1073,32747,-1140,32744,-1207,32742,-1274,32739,-1340,32736,-1407,32733,-1474,32730,-1541,32727,-1608,32724,-1675,32720,-1742,32717,-1809,32713,-1876,32709,-1943,32705,-2010,32701,-2077,32696,-2144,32692,-2210,32687,-2277,32683,-2344,32678,-2411,32673,-2478,32668,-2545,32662,-2611,32657,-2678,32651,-2745,32646,-2812,32640,-2879,32634,-2945,32628,-3012,32622,-3079,32615,-3146,32609,-3212,32602,-3279,32595,-3346,32588,-3412,32581,-3479,32574,-3546,32567,-3612,32559,-3679,32552,-3745,32544,-3812,32536,-3878,32528,-3945,32520,-4012,32512,-4078,32503,-4145,32495,-4211,32486,-4277,32477,-4344,32468,-4410,32459,-4477,32450,-4543,32441,-4609,32431,-4676,32422,-4742,32412,-4808,32402,-4875,32392,-4941,32382,-5007,32371,-5073,32361,-5140,32350,-5206,32340,-5272,32329,-5338,32318,-5404,32307,-5470,32295,-5536,32284,-5602,32273,-5668,32261,-5734,32249,-5800,32237,-5866,32225,-5932,32213,-5998,32201,-6064,32188,-6130,32176,-6196,32163,-6262,32150,-6327,32137,-6393,32124,-6459,32110,-6524,32097,-6590,32084,-6656,32070,-6721,32056,-6787,32042,-6852,32028,-6918,32014,-6983,31999,-7049,31985,-7114,31970,-7180,31956,-7245,31941,-7311,31926,-7376,31911,-7441,31895,-7506,31880,-7572,31864,-7637,31849,-7702,31833,-7767,31817,-7832,31801,-7897,31785,-7962,31768,-8027,31752,-8092,31735,-8157,31718,-8222,31701,-8287,31684,-8352,31667,-8416,31650,-8481,31633,-8546,31615,-8611,31597,-8675,31580,-8740,31562,-8804,31544,-8869,31525,-8933,31507,-8998,31489,-9062,31470,-9127,31451,-9191,31432,-9255,31413,-9320,31394,-9384,31375,-9448,31356,-9512,31336,-9576,31316,-9640,31297,-9704,31277,-9768,31257,-9832,31236,-9896,31216,-9960,31196,-10024,31175,-10088,31154,-10152,31134,-10215,31113,-10279,31092,-10343,31070,-10406,31049,-10470,31028,-10533,31006,-10597,30984,-10660,30962,-10723,30940,-10787,30918,-10850,30896,-10913,30874,-10976,30851,-11039,30828,-11102,30806,-11165,30783,-11228,30760,-11291,30737,-11354,30713,-11417,30690,-11480,30666,-11543,30643,-11605,30619,-11668,30595,-11731,30571,-11793,30547,-11856,30522,-11918,30498,-11981,30473,-12043,30449,-12105,30424,-12167,30399,-12230,30374,-12292,30349,-12354,30323,-12416,30298,-12478,30272,-12540,30247,-12602,30221,-12664,30195,-12725,30169,-12787,30142,-12849,30116,-12910,30090,-12972,30063,-13034,30036,-13095,30009,-13156,29983,-13218,29955,-13279,29928,-13340,29901,-13401,29873,-13463,29846,-13524,29818,-13585,29790,-13646,29762,-13707,29734,-13767,29706,-13828,29678,-13889,29649,-13950,29621,-14010,29592,-14071,29563,-14131,29534,-14192,29505,-14252,29476,-14312,29446,-14373,29417,-14433,29387,-14493,29358,-14553,29328,-14613,29298,-14673,29268,-14733,29238,-14793,29207,-14853,29177,-14912,29146,-14972,29116,-15031,29085,-15091,29054,-15150,29023,-15210,28992,-15269,28960,-15328,28929,-15388,28897,-15447,28866,-15506,28834,-15565,28802,-15624,28770,-15683,28738,-15741,28706,-15800,28673,-15859,28641,-15918,28608,-15976,28575,-16035,28543,-16093,28510,-16151,28477,-16210,28443,-16268,28410,-16326,28377,-16384,28343,-16442,28309,-16500,28275,-16558,28242,-16616,28208,-16673,28173,-16731,28139,-16789,28105,-16846,28070,-16904,28036,-16961,28001,-17018,27966,-17075,27931,-17133,27896,-17190,27861,-17247,27825,-17304,27790,-17361,27754,-17417,27719,-17474,27683,-17531,27647,-17587,27611,-17644,27575,-17700,27538,-17757,27502,-17813,27466,-17869,27429,-17925,27392,-17981,27355,-18037,27319,-18093,27281,-18149,27244,-18205,27207,-18261,27170,-18316,27132,-18372,27094,-18427,27057,-18483,27019,-18538,26981,-18593,26943,-18648,26905,-18703,26866,-18758,26828,-18813,26789,-18868,26751,-18923,26712,-18977,26673,-19032,26634,-19087,26595,-19141,26556,-19195,26516,-19250,26477,-19304,26437,-19358,26398,-19412,26358,-19466,26318,-19520,26278,-19574,26238,-19627,26198,-19681,26158,-19734,26117,-19788,26077,-19841,26036,-19895,25995,-19948,25954,-20001,25913,-20054,25872,-20107,25831,-20160,25790,-20213,25749,-20265,25707,-20318,25665,-20370,25624,-20423,25582,-20475,25540,-20528,25498,-20580,25456,-20632,25414,-20684,25371,-20736,25329,-20788,25286,-20839,25243,-20891,25201,-20943,25158,-20994,25115,-21046,25072,-21097,25029,-21148,24985,-21199,24942,-21250,24898,-21301,24855,-21352,24811,-21403,24767,-21454,24723,-21504,24679,-21555,24635,-21605,24591,-21656,24546,-21706,24502,-21756,24457,-21806,24413,-21856,24368,-21906,24323,-21956,24278,-22005,24233,-22055,24188,-22105,24143,-22154,24097,-22203,24052,-22253,24006,-22302,23961,-22351,23915,-22400,23869,-22449,23823,-22497,23777,-22546,23731,-22595,23685,-22643,23638,-22692,23592,-22740,23545,-22788,23499,-22836,23452,-22884,23405,-22932,23358,-22980,23311,-23028,23264,-23075,23217,-23123,23169,-23170,23122,-23218,23074,-23265,23027,-23312,22979,-23359,22931,-23406,22883,-23453,22835,-23500,22787,-23546,22739,-23593,22691,-23639,22642,-23686,22594,-23732,22545,-23778,22496,-23824,22448,-23870,22399,-23916,22350,-23962,22301,-24007,22252,-24053,22202,-24098,22153,-24144,22104,-24189,22054,-24234,22004,-24279,21955,-24324,21905,-24369,21855,-24414,21805,-24458,21755,-24503,21705,-24547,21655,-24592,21604,-24636,21554,-24680,21503,-24724,21453,-24768,21402,-24812,21351,-24856,21300,-24899,21249,-24943,21198,-24986,21147,-25030,21096,-25073,21045,-25116,20993,-25159,20942,-25202,20890,-25244,20838,-25287,20787,-25330,20735,-25372,20683,-25415,20631,-25457,20579,-25499,20527,-25541,20474,-25583,20422,-25625,20369,-25666,20317,-25708,20264,-25750,20212,-25791,20159,-25832,20106,-25873,20053,-25914,20000,-25955,19947,-25996,19894,-26037,19840,-26078,19787,-26118,19733,-26159,19680,-26199,19626,-26239,19573,-26279,19519,-26319,19465,-26359,19411,-26399,19357,-26438,19303,-26478,19249,-26517,19194,-26557,19140,-26596,19086,-26635,19031,-26674,18976,-26713,18922,-26752,18867,-26790,18812,-26829,18757,-26867,18702,-26906,18647,-26944,18592,-26982,18537,-27020,18482,-27058,18426,-27095,18371,-27133,18315,-27171,18260,-27208,18204,-27245,18148,-27282,18092,-27320,18036,-27356,17980,-27393,17924,-27430,17868,-27467,17812,-27503,17756,-27539,17699,-27576,17643,-27612,17586,-27648,17530,-27684,17473,-27720,17416,-27755,17360,-27791,17303,-27826,17246,-27862,17189,-27897,17132,-27932,17074,-27967,17017,-28002,16960,-28037,16903,-28071,16845,-28106,16788,-28140,16730,-28174,16672,-28209,16615,-28243,16557,-28276,16499,-28310,16441,-28344,16383,-28378,16325,-28411,16267,-28444,16209,-28478,16150,-28511,16092,-28544,16034,-28576,15975,-28609,15917,-28642,15858,-28674,15799,-28707,15740,-28739,15682,-28771,15623,-28803,15564,-28835,15505,-28867,15446,-28898,15387,-28930,15327,-28961,15268,-28993,15209,-29024,15149,-29055,15090,-29086,15030,-29117,14971,-29147,14911,-29178,14852,-29208,14792,-29239,14732,-29269,14672,-29299,14612,-29329,14552,-29359,14492,-29388,14432,-29418,14372,-29447,14311,-29477,14251,-29506,14191,-29535,14130,-29564,14070,-29593,14009,-29622,13949,-29650,13888,-29679,13827,-29707,13766,-29735,13706,-29763,13645,-29791,13584,-29819,13523,-29847,13462,-29874,13400,-29902,13339,-29929,13278,-29956,13217,-29984,13155,-30010,13094,-30037,13033,-30064,12971,-30091,12909,-30117,12848,-30143,12786,-30170,12724,-30196,12663,-30222,12601,-30248,12539,-30273,12477,-30299,12415,-30324,12353,-30350,12291,-30375,12229,-30400,12166,-30425,12104,-30450,12042,-30474,11980,-30499,11917,-30523,11855,-30548,11792,-30572,11730,-30596,11667,-30620,11604,-30644,11542,-30667,11479,-30691,11416,-30714,11353,-30738,11290,-30761,11227,-30784,11164,-30807,11101,-30829,11038,-30852,10975,-30875,10912,-30897,10849,-30919,10786,-30941,10722,-30963,10659,-30985,10596,-31007,10532,-31029,10469,-31050,10405,-31071,10342,-31093,10278,-31114,10214,-31135,10151,-31155,10087,-31176,10023,-31197,9959,-31217,9895,-31237,9831,-31258,9767,-31278,9703,-31298,9639,-31317,9575,-31337,9511,-31357,9447,-31376,9383,-31395,9319,-31414,9254,-31433,9190,-31452,9126,-31471,9061,-31490,8997,-31508,8932,-31526,8868,-31545,8803,-31563,8739,-31581,8674,-31598,8610,-31616,8545,-31634,8480,-31651,8415,-31668,8351,-31685,8286,-31702,8221,-31719,8156,-31736,8091,-31753,8026,-31769,7961,-31786,7896,-31802,7831,-31818,7766,-31834,7701,-31850,7636,-31865,7571,-31881,7505,-31896,7440,-31912,7375,-31927,7310,-31942,7244,-31957,7179,-31971,7113,-31986,7048,-32000,6982,-32015,6917,-32029,6851,-32043,6786,-32057,6720,-32071,6655,-32085,6589,-32098,6523,-32111,6458,-32125,6392,-32138,6326,-32151,6261,-32164,6195,-32177,6129,-32189,6063,-32202,5997,-32214,5931,-32226,5865,-32238,5799,-32250,5733,-32262,5667,-32274,5601,-32285,5535,-32296,5469,-32308,5403,-32319,5337,-32330,5271,-32341,5205,-32351,5139,-32362,5072,-32372,5006,-32383,4940,-32393,4874,-32403,4807,-32413,4741,-32423,4675,-32432,4608,-32442,4542,-32451,4476,-32460,4409,-32469,4343,-32478,4276,-32487,4210,-32496,4144,-32504,4077,-32513,4011,-32521,3944,-32529,3877,-32537,3811,-32545,3744,-32553,3678,-32560,3611,-32568,3545,-32575,3478,-32582,3411,-32589,3345,-32596,3278,-32603,3211,-32610,3145,-32616,3078,-32623,3011,-32629,2944,-32635,2878,-32641,2811,-32647,2744,-32652,2677,-32658,2610,-32663,2544,-32669,2477,-32674,2410,-32679,2343,-32684,2276,-32688,2209,-32693,2143,-32697,2076,-32702,2009,-32706,1942,-32710,1875,-32714,1808,-32718,1741,-32721,1674,-32725,1607,-32728,1540,-32731,1473,-32734,1406,-32737,1339,-32740,1273,-32743,1206,-32745,1139,-32748,1072,-32750,1005,-32752,938,-32754,871,-32756,804,-32758,737,-32759,670,-32761,603,-32762,536,-32763,469,-32764,402,-32765,335,-32766,268,-32766,201,-32767,134,-32767,67,-32767,0,-32767,-68,-32767,-135,-32767,-202,-32767,-269,-32766,-336,-32766,-403,-32765,-470,-32764,-537,-32763,-604,-32762,-671,-32761,-738,-32759,-805,-32758,-872,-32756,-939,-32754,-1006,-32752,-1073,-32750,-1140,-32748,-1207,-32745,-1274,-32743,-1340,-32740,-1407,-32737,-1474,-32734,-1541,-32731,-1608,-32728,-1675,-32725,-1742,-32721,-1809,-32718,-1876,-32714,-1943,-32710,-2010,-32706,-2077,-32702,-2144,-32697,-2210,-32693,-2277,-32688,-2344,-32684,-2411,-32679,-2478,-32674,-2545,-32669,-2611,-32663,-2678,-32658,-2745,-32652,-2812,-32647,-2879,-32641,-2945,-32635,-3012,-32629,-3079,-32623,-3146,-32616,-3212,-32610,-3279,-32603,-3346,-32596,-3412,-32589,-3479,-32582,-3546,-32575,-3612,-32568,-3679,-32560,-3745,-32553,-3812,-32545,-3878,-32537,-3945,-32529,-4012,-32521,-4078,-32513,-4145,-32504,-4211,-32496,-4277,-32487,-4344,-32478,-4410,-32469,-4477,-32460,-4543,-32451,-4609,-32442,-4676,-32432,-4742,-32423,-4808,-32413,-4875,-32403,-4941,-32393,-5007,-32383,-5073,-32372,-5140,-32362,-5206,-32351,-5272,-32341,-5338,-32330,-5404,-32319,-5470,-32308,-5536,-32296,-5602,-32285,-5668,-32274,-5734,-32262,-5800,-32250,-5866,-32238,-5932,-32226,-5998,-32214,-6064,-32202,-6130,-32189,-6196,-32177,-6262,-32164,-6327,-32151,-6393,-32138,-6459,-32125,-6524,-32111,-6590,-32098,-6656,-32085,-6721,-32071,-6787,-32057,-6852,-32043,-6918,-32029,-6983,-32015,-7049,-32000,-7114,-31986,-7180,-31971,-7245,-31957,-7311,-31942,-7376,-31927,-7441,-31912,-7506,-31896,-7572,-31881,-7637,-31865,-7702,-31850,-7767,-31834,-7832,-31818,-7897,-31802,-7962,-31786,-8027,-31769,-8092,-31753,-8157,-31736,-8222,-31719,-8287,-31702,-8352,-31685,-8416,-31668,-8481,-31651,-8546,-31634,-8611,-31616,-8675,-31598,-8740,-31581,-8804,-31563,-8869,-31545,-8933,-31526,-8998,-31508,-9062,-31490,-9127,-31471,-9191,-31452,-9255,-31433,-9320,-31414,-9384,-31395,-9448,-31376,-9512,-31357,-9576,-31337,-9640,-31317,-9704,-31298,-9768,-31278,-9832,-31258,-9896,-31237,-9960,-31217,-10024,-31197,-10088,-31176,-10152,-31155,-10215,-31135,-10279,-31114,-10343,-31093,-10406,-31071,-10470,-31050,-10533,-31029,-10597,-31007,-10660,-30985,-10723,-30963,-10787,-30941,-10850,-30919,-10913,-30897,-10976,-30875,-11039,-30852,-11102,-30829,-11165,-30807,-11228,-30784,-11291,-30761,-11354,-30738,-11417,-30714,-11480,-30691,-11543,-30667,-11605,-30644,-11668,-30620,-11731,-30596,-11793,-30572,-11856,-30548,-11918,-30523,-11981,-30499,-12043,-30474,-12105,-30450,-12167,-30425,-12230,-30400,-12292,-30375,-12354,-30350,-12416,-30324,-12478,-30299,-12540,-30273,-12602,-30248,-12664,-30222,-12725,-30196,-12787,-30170,-12849,-30143,-12910,-30117,-12972,-30091,-13034,-30064,-13095,-30037,-13156,-30010,-13218,-29984,-13279,-29956,-13340,-29929,-13401,-29902,-13463,-29874,-13524,-29847,-13585,-29819,-13646,-29791,-13707,-29763,-13767,-29735,-13828,-29707,-13889,-29679,-13950,-29650,-14010,-29622,-14071,-29593,-14131,-29564,-14192,-29535,-14252,-29506,-14312,-29477,-14373,-29447,-14433,-29418,-14493,-29388,-14553,-29359,-14613,-29329,-14673,-29299,-14733,-29269,-14793,-29239,-14853,-29208,-14912,-29178,-14972,-29147,-15031,-29117,-15091,-29086,-15150,-29055,-15210,-29024,-15269,-28993,-15328,-28961,-15388,-28930,-15447,-28898,-15506,-28867,-15565,-28835,-15624,-28803,-15683,-28771,-15741,-28739,-15800,-28707,-15859,-28674,-15918,-28642,-15976,-28609,-16035,-28576,-16093,-28544,-16151,-28511,-16210,-28478,-16268,-28444,-16326,-28411,-16384,-28378,-16442,-28344,-16500,-28310,-16558,-28276,-16616,-28243,-16673,-28209,-16731,-28174,-16789,-28140,-16846,-28106,-16904,-28071,-16961,-28037,-17018,-28002,-17075,-27967,-17133,-27932,-17190,-27897,-17247,-27862,-17304,-27826,-17361,-27791,-17417,-27755,-17474,-27720,-17531,-27684,-17587,-27648,-17644,-27612,-17700,-27576,-17757,-27539,-17813,-27503,-17869,-27467,-17925,-27430,-17981,-27393,-18037,-27356,-18093,-27320,-18149,-27282,-18205,-27245,-18261,-27208,-18316,-27171,-18372,-27133,-18427,-27095,-18483,-27058,-18538,-27020,-18593,-26982,-18648,-26944,-18703,-26906,-18758,-26867,-18813,-26829,-18868,-26790,-18923,-26752,-18977,-26713,-19032,-26674,-19087,-26635,-19141,-26596,-19195,-26557,-19250,-26517,-19304,-26478,-19358,-26438,-19412,-26399,-19466,-26359,-19520,-26319,-19574,-26279,-19627,-26239,-19681,-26199,-19734,-26159,-19788,-26118,-19841,-26078,-19895,-26037,-19948,-25996,-20001,-25955,-20054,-25914,-20107,-25873,-20160,-25832,-20213,-25791,-20265,-25750,-20318,-25708,-20370,-25666,-20423,-25625,-20475,-25583,-20528,-25541,-20580,-25499,-20632,-25457,-20684,-25415,-20736,-25372,-20788,-25330,-20839,-25287,-20891,-25244,-20943,-25202,-20994,-25159,-21046,-25116,-21097,-25073,-21148,-25030,-21199,-24986,-21250,-24943,-21301,-24899,-21352,-24856,-21403,-24812,-21454,-24768,-21504,-24724,-21555,-24680,-21605,-24636,-21656,-24592,-21706,-24547,-21756,-24503,-21806,-24458,-21856,-24414,-21906,-24369,-21956,-24324,-22005,-24279,-22055,-24234,-22105,-24189,-22154,-24144,-22203,-24098,-22253,-24053,-22302,-24007,-22351,-23962,-22400,-23916,-22449,-23870,-22497,-23824,-22546,-23778,-22595,-23732,-22643,-23686,-22692,-23639,-22740,-23593,-22788,-23546,-22836,-23500,-22884,-23453,-22932,-23406,-22980,-23359,-23028,-23312,-23075,-23265,-23123,-23218,-23170,-23170,-23218,-23123,-23265,-23075,-23312,-23028,-23359,-22980,-23406,-22932,-23453,-22884,-23500,-22836,-23546,-22788,-23593,-22740,-23639,-22692,-23686,-22643,-23732,-22595,-23778,-22546,-23824,-22497,-23870,-22449,-23916,-22400,-23962,-22351,-24007,-22302,-24053,-22253,-24098,-22203,-24144,-22154,-24189,-22105,-24234,-22055,-24279,-22005,-24324,-21956,-24369,-21906,-24414,-21856,-24458,-21806,-24503,-21756,-24547,-21706,-24592,-21656,-24636,-21605,-24680,-21555,-24724,-21504,-24768,-21454,-24812,-21403,-24856,-21352,-24899,-21301,-24943,-21250,-24986,-21199,-25030,-21148,-25073,-21097,-25116,-21046,-25159,-20994,-25202,-20943,-25244,-20891,-25287,-20839,-25330,-20788,-25372,-20736,-25415,-20684,-25457,-20632,-25499,-20580,-25541,-20528,-25583,-20475,-25625,-20423,-25666,-20370,-25708,-20318,-25750,-20265,-25791,-20213,-25832,-20160,-25873,-20107,-25914,-20054,-25955,-20001,-25996,-19948,-26037,-19895,-26078,-19841,-26118,-19788,-26159,-19734,-26199,-19681,-26239,-19627,-26279,-19574,-26319,-19520,-26359,-19466,-26399,-19412,-26438,-19358,-26478,-19304,-26517,-19250,-26557,-19195,-26596,-19141,-26635,-19087,-26674,-19032,-26713,-18977,-26752,-18923,-26790,-18868,-26829,-18813,-26867,-18758,-26906,-18703,-26944,-18648,-26982,-18593,-27020,-18538,-27058,-18483,-27095,-18427,-27133,-18372,-27171,-18316,-27208,-18261,-27245,-18205,-27282,-18149,-27320,-18093,-27356,-18037,-27393,-17981,-27430,-17925,-27467,-17869,-27503,-17813,-27539,-17757,-27576,-17700,-27612,-17644,-27648,-17587,-27684,-17531,-27720,-17474,-27755,-17417,-27791,-17361,-27826,-17304,-27862,-17247,-27897,-17190,-27932,-17133,-27967,-17075,-28002,-17018,-28037,-16961,-28071,-16904,-28106,-16846,-28140,-16789,-28174,-16731,-28209,-16673,-28243,-16616,-28276,-16558,-28310,-16500,-28344,-16442,-28378,-16384,-28411,-16326,-28444,-16268,-28478,-16210,-28511,-16151,-28544,-16093,-28576,-16035,-28609,-15976,-28642,-15918,-28674,-15859,-28707,-15800,-28739,-15741,-28771,-15683,-28803,-15624,-28835,-15565,-28867,-15506,-28898,-15447,-28930,-15388,-28961,-15328,-28993,-15269,-29024,-15210,-29055,-15150,-29086,-15091,-29117,-15031,-29147,-14972,-29178,-14912,-29208,-14853,-29239,-14793,-29269,-14733,-29299,-14673,-29329,-14613,-29359,-14553,-29388,-14493,-29418,-14433,-29447,-14373,-29477,-14312,-29506,-14252,-29535,-14192,-29564,-14131,-29593,-14071,-29622,-14010,-29650,-13950,-29679,-13889,-29707,-13828,-29735,-13767,-29763,-13707,-29791,-13646,-29819,-13585,-29847,-13524,-29874,-13463,-29902,-13401,-29929,-13340,-29956,-13279,-29984,-13218,-30010,-13156,-30037,-13095,-30064,-13034,-30091,-12972,-30117,-12910,-30143,-12849,-30170,-12787,-30196,-12725,-30222,-12664,-30248,-12602,-30273,-12540,-30299,-12478,-30324,-12416,-30350,-12354,-30375,-12292,-30400,-12230,-30425,-12167,-30450,-12105,-30474,-12043,-30499,-11981,-30523,-11918,-30548,-11856,-30572,-11793,-30596,-11731,-30620,-11668,-30644,-11605,-30667,-11543,-30691,-11480,-30714,-11417,-30738,-11354,-30761,-11291,-30784,-11228,-30807,-11165,-30829,-11102,-30852,-11039,-30875,-10976,-30897,-10913,-30919,-10850,-30941,-10787,-30963,-10723,-30985,-10660,-31007,-10597,-31029,-10533,-31050,-10470,-31071,-10406,-31093,-10343,-31114,-10279,-31135,-10215,-31155,-10152,-31176,-10088,-31197,-10024,-31217,-9960,-31237,-9896,-31258,-9832,-31278,-9768,-31298,-9704,-31317,-9640,-31337,-9576,-31357,-9512,-31376,-9448,-31395,-9384,-31414,-9320,-31433,-9255,-31452,-9191,-31471,-9127,-31490,-9062,-31508,-8998,-31526,-8933,-31545,-8869,-31563,-8804,-31581,-8740,-31598,-8675,-31616,-8611,-31634,-8546,-31651,-8481,-31668,-8416,-31685,-8352,-31702,-8287,-31719,-8222,-31736,-8157,-31753,-8092,-31769,-8027,-31786,-7962,-31802,-7897,-31818,-7832,-31834,-7767,-31850,-7702,-31865,-7637,-31881,-7572,-31896,-7506,-31912,-7441,-31927,-7376,-31942,-7311,-31957,-7245,-31971,-7180,-31986,-7114,-32000,-7049,-32015,-6983,-32029,-6918,-32043,-6852,-32057,-6787,-32071,-6721,-32085,-6656,-32098,-6590,-32111,-6524,-32125,-6459,-32138,-6393,-32151,-6327,-32164,-6262,-32177,-6196,-32189,-6130,-32202,-6064,-32214,-5998,-32226,-5932,-32238,-5866,-32250,-5800,-32262,-5734,-32274,-5668,-32285,-5602,-32296,-5536,-32308,-5470,-32319,-5404,-32330,-5338,-32341,-5272,-32351,-5206,-32362,-5140,-32372,-5073,-32383,-5007,-32393,-4941,-32403,-4875,-32413,-4808,-32423,-4742,-32432,-4676,-32442,-4609,-32451,-4543,-32460,-4477,-32469,-4410,-32478,-4344,-32487,-4277,-32496,-4211,-32504,-4145,-32513,-4078,-32521,-4012,-32529,-3945,-32537,-3878,-32545,-3812,-32553,-3745,-32560,-3679,-32568,-3612,-32575,-3546,-32582,-3479,-32589,-3412,-32596,-3346,-32603,-3279,-32610,-3212,-32616,-3146,-32623,-3079,-32629,-3012,-32635,-2945,-32641,-2879,-32647,-2812,-32652,-2745,-32658,-2678,-32663,-2611,-32669,-2545,-32674,-2478,-32679,-2411,-32684,-2344,-32688,-2277,-32693,-2210,-32697,-2144,-32702,-2077,-32706,-2010,-32710,-1943,-32714,-1876,-32718,-1809,-32721,-1742,-32725,-1675,-32728,-1608,-32731,-1541,-32734,-1474,-32737,-1407,-32740,-1340,-32743,-1274,-32745,-1207,-32748,-1140,-32750,-1073,-32752,-1006,-32754,-939,-32756,-872,-32758,-805,-32759,-738,-32761,-671,-32762,-604,-32763,-537,-32764,-470,-32765,-403,-32766,-336,-32766,-269,-32767,-202,-32767,-135,-32767,-68,-32767,-1,-32767,67,-32767,134,-32767,201,-32766,268,-32766,335,-32765,402,-32764,469,-32763,536,-32762,603,-32761,670,-32759,737,-32758,804,-32756,871,-32754,938,-32752,1005,-32750,1072,-32748,1139,-32745,1206,-32743,1273,-32740,1339,-32737,1406,-32734,1473,-32731,1540,-32728,1607,-32725,1674,-32721,1741,-32718,1808,-32714,1875,-32710,1942,-32706,2009,-32702,2076,-32697,2143,-32693,2209,-32688,2276,-32684,2343,-32679,2410,-32674,2477,-32669,2544,-32663,2610,-32658,2677,-32652,2744,-32647,2811,-32641,2878,-32635,2944,-32629,3011,-32623,3078,-32616,3145,-32610,3211,-32603,3278,-32596,3345,-32589,3411,-32582,3478,-32575,3545,-32568,3611,-32560,3678,-32553,3744,-32545,3811,-32537,3877,-32529,3944,-32521,4011,-32513,4077,-32504,4144,-32496,4210,-32487,4276,-32478,4343,-32469,4409,-32460,4476,-32451,4542,-32442,4608,-32432,4675,-32423,4741,-32413,4807,-32403,4874,-32393,4940,-32383,5006,-32372,5072,-32362,5139,-32351,5205,-32341,5271,-32330,5337,-32319,5403,-32308,5469,-32296,5535,-32285,5601,-32274,5667,-32262,5733,-32250,5799,-32238,5865,-32226,5931,-32214,5997,-32202,6063,-32189,6129,-32177,6195,-32164,6261,-32151,6326,-32138,6392,-32125,6458,-32111,6523,-32098,6589,-32085,6655,-32071,6720,-32057,6786,-32043,6851,-32029,6917,-32015,6982,-32000,7048,-31986,7113,-31971,7179,-31957,7244,-31942,7310,-31927,7375,-31912,7440,-31896,7505,-31881,7571,-31865,7636,-31850,7701,-31834,7766,-31818,7831,-31802,7896,-31786,7961,-31769,8026,-31753,8091,-31736,8156,-31719,8221,-31702,8286,-31685,8351,-31668,8415,-31651,8480,-31634,8545,-31616,8610,-31598,8674,-31581,8739,-31563,8803,-31545,8868,-31526,8932,-31508,8997,-31490,9061,-31471,9126,-31452,9190,-31433,9254,-31414,9319,-31395,9383,-31376,9447,-31357,9511,-31337,9575,-31317,9639,-31298,9703,-31278,9767,-31258,9831,-31237,9895,-31217,9959,-31197,10023,-31176,10087,-31155,10151,-31135,10214,-31114,10278,-31093,10342,-31071,10405,-31050,10469,-31029,10532,-31007,10596,-30985,10659,-30963,10722,-30941,10786,-30919,10849,-30897,10912,-30875,10975,-30852,11038,-30829,11101,-30807,11164,-30784,11227,-30761,11290,-30738,11353,-30714,11416,-30691,11479,-30667,11542,-30644,11604,-30620,11667,-30596,11730,-30572,11792,-30548,11855,-30523,11917,-30499,11980,-30474,12042,-30450,12104,-30425,12166,-30400,12229,-30375,12291,-30350,12353,-30324,12415,-30299,12477,-30273,12539,-30248,12601,-30222,12663,-30196,12724,-30170,12786,-30143,12848,-30117,12909,-30091,12971,-30064,13033,-30037,13094,-30010,13155,-29984,13217,-29956,13278,-29929,13339,-29902,13400,-29874,13462,-29847,13523,-29819,13584,-29791,13645,-29763,13706,-29735,13766,-29707,13827,-29679,13888,-29650,13949,-29622,14009,-29593,14070,-29564,14130,-29535,14191,-29506,14251,-29477,14311,-29447,14372,-29418,14432,-29388,14492,-29359,14552,-29329,14612,-29299,14672,-29269,14732,-29239,14792,-29208,14852,-29178,14911,-29147,14971,-29117,15030,-29086,15090,-29055,15149,-29024,15209,-28993,15268,-28961,15327,-28930,15387,-28898,15446,-28867,15505,-28835,15564,-28803,15623,-28771,15682,-28739,15740,-28707,15799,-28674,15858,-28642,15917,-28609,15975,-28576,16034,-28544,16092,-28511,16150,-28478,16209,-28444,16267,-28411,16325,-28378,16383,-28344,16441,-28310,16499,-28276,16557,-28243,16615,-28209,16672,-28174,16730,-28140,16788,-28106,16845,-28071,16903,-28037,16960,-28002,17017,-27967,17074,-27932,17132,-27897,17189,-27862,17246,-27826,17303,-27791,17360,-27755,17416,-27720,17473,-27684,17530,-27648,17586,-27612,17643,-27576,17699,-27539,17756,-27503,17812,-27467,17868,-27430,17924,-27393,17980,-27356,18036,-27320,18092,-27282,18148,-27245,18204,-27208,18260,-27171,18315,-27133,18371,-27095,18426,-27058,18482,-27020,18537,-26982,18592,-26944,18647,-26906,18702,-26867,18757,-26829,18812,-26790,18867,-26752,18922,-26713,18976,-26674,19031,-26635,19086,-26596,19140,-26557,19194,-26517,19249,-26478,19303,-26438,19357,-26399,19411,-26359,19465,-26319,19519,-26279,19573,-26239,19626,-26199,19680,-26159,19733,-26118,19787,-26078,19840,-26037,19894,-25996,19947,-25955,20000,-25914,20053,-25873,20106,-25832,20159,-25791,20212,-25750,20264,-25708,20317,-25666,20369,-25625,20422,-25583,20474,-25541,20527,-25499,20579,-25457,20631,-25415,20683,-25372,20735,-25330,20787,-25287,20838,-25244,20890,-25202,20942,-25159,20993,-25116,21045,-25073,21096,-25030,21147,-24986,21198,-24943,21249,-24899,21300,-24856,21351,-24812,21402,-24768,21453,-24724,21503,-24680,21554,-24636,21604,-24592,21655,-24547,21705,-24503,21755,-24458,21805,-24414,21855,-24369,21905,-24324,21955,-24279,22004,-24234,22054,-24189,22104,-24144,22153,-24098,22202,-24053,22252,-24007,22301,-23962,22350,-23916,22399,-23870,22448,-23824,22496,-23778,22545,-23732,22594,-23686,22642,-23639,22691,-23593,22739,-23546,22787,-23500,22835,-23453,22883,-23406,22931,-23359,22979,-23312,23027,-23265,23074,-23218,23122,-23170,23169,-23123,23217,-23075,23264,-23028,23311,-22980,23358,-22932,23405,-22884,23452,-22836,23499,-22788,23545,-22740,23592,-22692,23638,-22643,23685,-22595,23731,-22546,23777,-22497,23823,-22449,23869,-22400,23915,-22351,23961,-22302,24006,-22253,24052,-22203,24097,-22154,24143,-22105,24188,-22055,24233,-22005,24278,-21956,24323,-21906,24368,-21856,24413,-21806,24457,-21756,24502,-21706,24546,-21656,24591,-21605,24635,-21555,24679,-21504,24723,-21454,24767,-21403,24811,-21352,24855,-21301,24898,-21250,24942,-21199,24985,-21148,25029,-21097,25072,-21046,25115,-20994,25158,-20943,25201,-20891,25243,-20839,25286,-20788,25329,-20736,25371,-20684,25414,-20632,25456,-20580,25498,-20528,25540,-20475,25582,-20423,25624,-20370,25665,-20318,25707,-20265,25749,-20213,25790,-20160,25831,-20107,25872,-20054,25913,-20001,25954,-19948,25995,-19895,26036,-19841,26077,-19788,26117,-19734,26158,-19681,26198,-19627,26238,-19574,26278,-19520,26318,-19466,26358,-19412,26398,-19358,26437,-19304,26477,-19250,26516,-19195,26556,-19141,26595,-19087,26634,-19032,26673,-18977,26712,-18923,26751,-18868,26789,-18813,26828,-18758,26866,-18703,26905,-18648,26943,-18593,26981,-18538,27019,-18483,27057,-18427,27094,-18372,27132,-18316,27170,-18261,27207,-18205,27244,-18149,27281,-18093,27319,-18037,27355,-17981,27392,-17925,27429,-17869,27466,-17813,27502,-17757,27538,-17700,27575,-17644,27611,-17587,27647,-17531,27683,-17474,27719,-17417,27754,-17361,27790,-17304,27825,-17247,27861,-17190,27896,-17133,27931,-17075,27966,-17018,28001,-16961,28036,-16904,28070,-16846,28105,-16789,28139,-16731,28173,-16673,28208,-16616,28242,-16558,28275,-16500,28309,-16442,28343}; From 76f15d6249a3244bcbec6402a5505daba05ecde3 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sun, 22 Jul 2018 21:00:41 +0200 Subject: [PATCH 014/128] testing with dlsim --- openair1/PHY/INIT/init_top.c | 5 +--- .../PHY/LTE_ESTIMATION/lte_sync_timefreq.c | 2 +- openair1/PHY/LTE_TRANSPORT/prach.c | 28 +++++++++---------- openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c | 16 +++++------ openair1/PHY/TOOLS/lte_dfts.c | 4 +-- openair1/PHY/TOOLS/tools_defs.h | 20 ++++++------- openair1/SIMULATION/LTE_PHY/dlsim.c | 3 ++ 7 files changed, 39 insertions(+), 39 deletions(-) diff --git a/openair1/PHY/INIT/init_top.c b/openair1/PHY/INIT/init_top.c index 25f35ab082..b857d1a17c 100644 --- a/openair1/PHY/INIT/init_top.c +++ b/openair1/PHY/INIT/init_top.c @@ -67,15 +67,12 @@ void generate_qpsk_table(void) void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms) { - ccodedot11_init(); - ccodedot11_init_inv(); - ccodelte_init(); ccodelte_init_inv(); + init_dfts(); - phy_generate_viterbi_tables(); phy_generate_viterbi_tables_lte(); load_codinglib(); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c index e8225aa1fd..de48a855df 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c @@ -81,7 +81,7 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq) //compute frequency-domain representation of 6144-sample chunk dft6144((int16_t *)rxp, - sp); + sp,1); /* diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index 8e225822b1..92d2d0ca39 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -357,10 +357,10 @@ void rx_prach0(PHY_VARS_eNB *eNB, if (prach_fmt == 4) { dft256(prach2,rxsigF[aa],1); } else { - dft3072(prach2,rxsigF[aa]); + dft3072(prach2,rxsigF[aa],1); if (prach_fmt>1) - dft3072(prach2+6144,rxsigF[aa]+6144); + dft3072(prach2+6144,rxsigF[aa]+6144,1); } break; @@ -371,10 +371,10 @@ void rx_prach0(PHY_VARS_eNB *eNB, dft1024(prach2,rxsigF[aa],1); fft_size = 1024; } else { - dft6144(prach2,rxsigF[aa]); + dft6144(prach2,rxsigF[aa],1); if (prach_fmt>1) - dft6144(prach2+12288,rxsigF[aa]+12288); + dft6144(prach2+12288,rxsigF[aa]+12288,1); fft_size = 6144; } @@ -385,22 +385,22 @@ void rx_prach0(PHY_VARS_eNB *eNB, if (prach_fmt == 4) { dft2048(prach2,rxsigF[aa],1); } else { - dft12288(prach2,rxsigF[aa]); + dft12288(prach2,rxsigF[aa],1); if (prach_fmt>1) - dft12288(prach2+24576,rxsigF[aa]+24576); + dft12288(prach2+24576,rxsigF[aa]+24576,1); } break; case 75: if (prach_fmt == 4) { - dft3072(prach2,rxsigF[aa]); + dft3072(prach2,rxsigF[aa],1); } else { - dft18432(prach2,rxsigF[aa]); + dft18432(prach2,rxsigF[aa],1); if (prach_fmt>1) - dft18432(prach2+36864,rxsigF[aa]+36864); + dft18432(prach2+36864,rxsigF[aa]+36864,1); } break; @@ -410,19 +410,19 @@ void rx_prach0(PHY_VARS_eNB *eNB, if (prach_fmt == 4) { dft4096(prach2,rxsigF[aa],1); } else { - dft24576(prach2,rxsigF[aa]); + dft24576(prach2,rxsigF[aa],1); if (prach_fmt>1) - dft24576(prach2+49152,rxsigF[aa]+49152); + dft24576(prach2+49152,rxsigF[aa]+49152,1); } } else { if (prach_fmt == 4) { - dft3072(prach2,rxsigF[aa]); + dft3072(prach2,rxsigF[aa],1); } else { - dft18432(prach2,rxsigF[aa]); + dft18432(prach2,rxsigF[aa],1); if (prach_fmt>1) - dft18432(prach2+36864,rxsigF[aa]+36864); + dft18432(prach2+36864,rxsigF[aa]+36864,1); } } diff --git a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c index 06acb31d57..d3af58d80b 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c @@ -374,7 +374,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 memmove( prach, prach+1024, Ncp<<2 ); prach_len = 512+Ncp; } else { - idft3072(prachF,prach2); + idft3072(prachF,prach2,1); memmove( prach, prach+6144, Ncp<<2 ); prach_len = 3072+Ncp; @@ -393,7 +393,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 memmove( prach, prach+2048, Ncp<<2 ); prach_len = 1024+Ncp; } else { - idft6144(prachF,prach2); + idft6144(prachF,prach2,1); /*for (i=0;i<6144*2;i++) prach2[i]<<=1;*/ memmove( prach, prach+12288, Ncp<<2 ); @@ -413,7 +413,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 memmove( prach, prach+4096, Ncp<<2 ); prach_len = 2048+Ncp; } else { - idft12288(prachF,prach2); + idft12288(prachF,prach2,1); memmove( prach, prach+24576, Ncp<<2 ); prach_len = 12288+Ncp; @@ -427,12 +427,12 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 case 75: if (prach_fmt == 4) { - idft3072(prachF,prach2); + idft3072(prachF,prach2,1); //TODO: account for repeated format in dft output memmove( prach, prach+6144, Ncp<<2 ); prach_len = 3072+Ncp; } else { - idft18432(prachF,prach2); + idft18432(prachF,prach2,1); memmove( prach, prach+36864, Ncp<<2 ); prach_len = 18432+Ncp; @@ -451,7 +451,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 memmove( prach, prach+8192, Ncp<<2 ); prach_len = 4096+Ncp; } else { - idft24576(prachF,prach2); + idft24576(prachF,prach2,1); memmove( prach, prach+49152, Ncp<<2 ); prach_len = 24576+Ncp; @@ -463,12 +463,12 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 } else { if (prach_fmt == 4) { - idft3072(prachF,prach2); + idft3072(prachF,prach2,1); //TODO: account for repeated format in dft output memmove( prach, prach+6144, Ncp<<2 ); prach_len = 3072+Ncp; } else { - idft18432(prachF,prach2); + idft18432(prachF,prach2,1); memmove( prach, prach+36864, Ncp<<2 ); prach_len = 18432+Ncp; printf("Generated prach for 100 PRB, 3/4 sampling\n"); diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 5b610858db..744902c5ed 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -42,7 +42,7 @@ #define debug_msg #define ONE_OVER_SQRT2_Q15 23170 - +int oai_exit=0; #endif #define ONE_OVER_SQRT3_Q15 18919 @@ -64,7 +64,7 @@ const static int16_t conjugatedft[32] __attribute__((aligned(32))) = {-1,1,-1,1, const static int16_t reflip[32] __attribute__((aligned(32))) = {1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1}; -int oai_exit=0; + #if defined(__x86_64__) || defined(__i386__) static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32) __attribute__((always_inline)); diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index e09cfb5ed8..a5e8d49eb7 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -174,27 +174,27 @@ This function performs optimized fixed-point radix-2 FFT/IFFT. void idft1536(int16_t *sigF,int16_t *sig,int scale); -void idft6144(int16_t *sigF,int16_t *sig); +void idft6144(int16_t *sigF,int16_t *sig,int scale); -void idft12288(int16_t *sigF,int16_t *sig); +void idft12288(int16_t *sigF,int16_t *sig,int scale); -void idft18432(int16_t *sigF,int16_t *sig); +void idft18432(int16_t *sigF,int16_t *sig,int scale); -void idft3072(int16_t *sigF,int16_t *sig); +void idft3072(int16_t *sigF,int16_t *sig,int scale); -void idft24576(int16_t *sigF,int16_t *sig); +void idft24576(int16_t *sigF,int16_t *sig,int scale); void dft1536(int16_t *sigF,int16_t *sig,int scale); -void dft6144(int16_t *sigF,int16_t *sig); +void dft6144(int16_t *sigF,int16_t *sig,int scale); -void dft12288(int16_t *sigF,int16_t *sig); +void dft12288(int16_t *sigF,int16_t *sig,int scale); -void dft18432(int16_t *sigF,int16_t *sig); +void dft18432(int16_t *sigF,int16_t *sig,int scale); -void dft3072(int16_t *sigF,int16_t *sig); +void dft3072(int16_t *sigF,int16_t *sig,int scale); -void dft24576(int16_t *sigF,int16_t *sig); +void dft24576(int16_t *sigF,int16_t *sig,int scale); /*!\fn int32_t rotate_cpx_vector(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N,uint16_t output_shift) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index f269a6fe58..fd7bf8e1f0 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -67,6 +67,7 @@ #include "common/config/config_load_configmodule.h" #include "PHY/INIT/phy_init.h" + void feptx_ofdm(RU_t *ru); void feptx_prec(RU_t *ru); @@ -83,6 +84,8 @@ int n_rx_dropped = 0; /*!< \brief initial max process time for rx */ int codingw = 0; +int emulate_rf = 0; + void handler(int sig) { void *array[10]; From 006fced248be169b24f0ee63b3e35ef62aa1919a Mon Sep 17 00:00:00 2001 From: bruno mongazon-cazavet Date: Mon, 23 Jul 2018 16:25:34 +0200 Subject: [PATCH 015/128] Fix #334 --- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 144 +++++++++++++++---- 1 file changed, 114 insertions(+), 30 deletions(-) diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index d704b9604c..f8191a221f 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -43,6 +43,8 @@ #include "UTIL/LOG/log_extern.h" #include "common_lib.h" #include "assertions.h" +#include +#include #ifdef __SSE4_1__ # include @@ -274,6 +276,8 @@ static int sync_to_gps(openair0_device *device) #include "usrp_lib.h" static FILE *pFile = NULL; int mmapfd = 0; +int iqfd = 0; +int use_mmap = 1; // default is to use mmap struct stat sb; iqrec_t *ms_sample = NULL; // memory for all subframes unsigned int nb_samples = 0; @@ -406,13 +410,24 @@ static void trx_usrp_end(openair0_device *device) { } } if (u_sf_mode == 2) { // replay - if (ms_sample != MAP_FAILED) { - munmap(ms_sample, sb.st_size); - ms_sample = NULL; - } - if (mmapfd != 0) { - close(mmapfd); - mmapfd = 0; + if (use_mmap) { + if (ms_sample != MAP_FAILED) { + munmap(ms_sample, sb.st_size); + ms_sample = NULL; + } + if (mmapfd != 0) { + close(mmapfd); + mmapfd = 0; + } + } else { + if (ms_sample != NULL) { + free(ms_sample); + ms_sample = NULL; + } + if (iqfd != 0) { + close(iqfd); + iqfd = 0; + } } } #endif @@ -619,15 +634,50 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp return 0; // should make calling process exit } wrap_ts = wrap_count * (nb_samples * (((int)(device->openair0_cfg[0].sample_rate)) / 1000)); + if (!use_mmap) { + if (lseek(iqfd, 0, SEEK_SET) == 0) { + std::cerr << "Seeking at the beginning of IQ file" << std::endl; + } else { + std::cerr << "Problem seeking at the beginning of IQ file" << std::endl; + } + } } - if (cur_samples < nb_samples) { - *ptimestamp = (ms_sample[0].ts + (cur_samples * (((int)(device->openair0_cfg[0].sample_rate)) / 1000))) + wrap_ts; - if (cur_samples == 0) { - std::cerr << "starting subframes file with wrap_count=" << wrap_count << " wrap_ts=" << wrap_ts - << " ts=" << *ptimestamp << std::endl; + if (use_mmap) { + if (cur_samples < nb_samples) { + *ptimestamp = (ms_sample[0].ts + (cur_samples * (((int)(device->openair0_cfg[0].sample_rate)) / 1000))) + wrap_ts; + if (cur_samples == 0) { + std::cerr << "starting subframes file with wrap_count=" << wrap_count << " wrap_ts=" << wrap_ts + << " ts=" << *ptimestamp << std::endl; + } + memcpy(buff[0], &ms_sample[cur_samples].samples[0], nsamps*4); + cur_samples++; + } + } else { + // read sample from file + if (read(iqfd, ms_sample, sizeof(iqrec_t)) != sizeof(iqrec_t)) { + std::cerr << "pb reading iqfile at index " << sizeof(iqrec_t)*cur_samples << std::endl; + close(iqfd); + free(ms_sample); + ms_sample = NULL; + iqfd = 0; + exit(-1); + } + + if (cur_samples < nb_samples) { + static int64_t ts0 = 0; + if ((cur_samples == 0) && (wrap_count == 0)) { + ts0 = ms_sample->ts; + } + *ptimestamp = ts0 + (cur_samples * (((int)(device->openair0_cfg[0].sample_rate)) / 1000)) + wrap_ts; + if (cur_samples == 0) { + std::cerr << "starting subframes file with wrap_count=" << wrap_count << " wrap_ts=" << wrap_ts + << " ts=" << *ptimestamp << std::endl; + } + memcpy(buff[0], &ms_sample->samples[0], nsamps*4); + cur_samples++; + // Prepare for next read + off_t where = lseek(iqfd, cur_samples * sizeof(iqrec_t), SEEK_SET); } - memcpy(buff[0], &ms_sample[cur_samples].samples[0], nsamps*4); - cur_samples++; } struct timespec req; req.tv_sec = 0; @@ -907,6 +957,7 @@ extern "C" { int device_init(openair0_device* device, openair0_config_t *openair0_cfg) { #if defined(USRP_REC_PLAY) paramdef_t usrp_recplay_params[7]; + struct sysinfo systeminfo; // to check static int done = 0; if (done == 1) { @@ -914,6 +965,11 @@ extern "C" { } // prevent from multiple init done = 1; // end to check + // Use mmap for IQ files for systems with less than 6GB total RAM + sysinfo(&systeminfo); + if (systeminfo.totalram < 6144000000) { + use_mmap = 0; + } memset(usrp_recplay_params, 0, 7*sizeof(paramdef_t)); memset(&u_sf_filename[0], 0, 1024); if (trx_usrp_recplay_config_init(usrp_recplay_params) != 0) { @@ -953,7 +1009,8 @@ extern "C" { device->trx_set_freq_func = trx_usrp_set_freq; device->trx_set_gains_func = trx_usrp_set_gains; device->openair0_cfg = openair0_cfg; - std::cerr << "USRP device initialized in subframes replay mode for " << u_sf_loops << " loops." << std::endl; + std::cerr << "USRP device initialized in subframes replay mode for " << u_sf_loops << " loops. Use mmap=" + << use_mmap << std::endl; } else { #endif uhd::set_thread_priority_safe(1.0); @@ -1282,33 +1339,60 @@ extern "C" { memset(ms_sample, 0, u_sf_max * BELL_LABS_IQ_BYTES_PER_SF); } if (u_sf_mode == 2) { - // use mmap - mmapfd = open(u_sf_filename, O_RDONLY | O_LARGEFILE); - if (mmapfd != 0) { - fstat(mmapfd, &sb); - std::cerr << "Loading subframes using mmap() from " << u_sf_filename << " size=" << (uint64_t)sb.st_size << " bytes ..." << std::endl; - ms_sample = (iqrec_t*) mmap(NULL, sb.st_size, PROT_WRITE, MAP_PRIVATE, mmapfd, 0); - if (ms_sample != MAP_FAILED) { - nb_samples = (sb.st_size / sizeof(iqrec_t)); - int aligned = (((unsigned long)ms_sample & 31) == 0)? 1:0; - std::cerr<< "Loaded "<< nb_samples << " subframes." << std::endl; - if (aligned == 0) { - std::cerr<< "mmap address is not 32 bytes aligned, exiting." << std::endl; + if (use_mmap) { + // use mmap + mmapfd = open(u_sf_filename, O_RDONLY | O_LARGEFILE); + if (mmapfd != 0) { + fstat(mmapfd, &sb); + std::cerr << "Loading subframes using mmap() from " << u_sf_filename << " size=" << (uint64_t)sb.st_size << " bytes ..." << std::endl; + ms_sample = (iqrec_t*) mmap(NULL, sb.st_size, PROT_WRITE, MAP_PRIVATE, mmapfd, 0); + if (ms_sample != MAP_FAILED) { + nb_samples = (sb.st_size / sizeof(iqrec_t)); + int aligned = (((unsigned long)ms_sample & 31) == 0)? 1:0; + std::cerr<< "Loaded "<< nb_samples << " subframes." << std::endl; + if (aligned == 0) { + std::cerr<< "mmap address is not 32 bytes aligned, exiting." << std::endl; + close(mmapfd); + exit(-1); + } + } else { + std::cerr << "Cannot mmap file, exiting." << std::endl; close(mmapfd); exit(-1); } } else { - std::cerr << "Cannot mmap file, exiting." << std::endl; - close(mmapfd); + std::cerr << "Cannot open " << u_sf_filename << " , exiting." << std::endl; exit(-1); } } else { + iqfd = open(u_sf_filename, O_RDONLY | O_LARGEFILE); + if (iqfd != 0) { + fstat(iqfd, &sb); + nb_samples = (sb.st_size / sizeof(iqrec_t)); + std::cerr << "Loading " << nb_samples << " subframes from " << u_sf_filename + << " size=" << (uint64_t)sb.st_size << " bytes ..." << std::endl; + // allocate buffer for 1 sample at a time + ms_sample = (iqrec_t*) malloc(sizeof(iqrec_t)); + if (ms_sample == NULL) { + std::cerr<< "Memory allocation failed for individual subframe replay mode." << std::endl; + close(iqfd); + exit(-1); + } + memset(ms_sample, 0, sizeof(iqrec_t)); + // point at beginning of file + if (lseek(iqfd, 0, SEEK_SET) == 0) { + std::cerr << "Initial seek at beginning of the file" << std::endl; + } else { + std::cerr << "Problem initial seek at beginning of the file" << std::endl; + } + } else { std::cerr << "Cannot open " << u_sf_filename << " , exiting." << std::endl; exit(-1); + } } } #endif - return 0; + return 0; } } /*@}*/ From bd5a8535f162fd443a34da350bb14aae5677de42 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 27 Jul 2018 08:46:00 +0200 Subject: [PATCH 016/128] testing of UL dfts. commit before merge --- openair1/PHY/TOOLS/lte_dfts.c | 1144 ++++----------------------------- 1 file changed, 130 insertions(+), 1014 deletions(-) diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 744902c5ed..6ea44ba20f 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -8424,211 +8424,8 @@ void dft240(int16_t *x,int16_t *y,unsigned char scale_flag) } -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:95)/288)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*(2:2:190)/288)); -twa2 = zeros(1,191); -twb2 = zeros(1,191); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); - - - */ -static int16_t twa288[760]__attribute__((aligned(32))) = {32759,-714,32759,-714,32759,-714,32759,-714, - 32735,-1429,32735,-1429,32735,-1429,32735,-1429, - 32696,-2143,32696,-2143,32696,-2143,32696,-2143, - 32642,-2855,32642,-2855,32642,-2855,32642,-2855, - 32572,-3567,32572,-3567,32572,-3567,32572,-3567, - 32486,-4276,32486,-4276,32486,-4276,32486,-4276, - 32385,-4984,32385,-4984,32385,-4984,32385,-4984, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 32137,-6392,32137,-6392,32137,-6392,32137,-6392, - 31990,-7092,31990,-7092,31990,-7092,31990,-7092, - 31827,-7788,31827,-7788,31827,-7788,31827,-7788, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31457,-9169,31457,-9169,31457,-9169,31457,-9169, - 31250,-9853,31250,-9853,31250,-9853,31250,-9853, - 31028,-10532,31028,-10532,31028,-10532,31028,-10532, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 30539,-11876,30539,-11876,30539,-11876,30539,-11876, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 29992,-13196,29992,-13196,29992,-13196,29992,-13196, - 29696,-13847,29696,-13847,29696,-13847,29696,-13847, - 29387,-14492,29387,-14492,29387,-14492,29387,-14492, - 29064,-15130,29064,-15130,29064,-15130,29064,-15130, - 28727,-15760,28727,-15760,28727,-15760,28727,-15760, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 28012,-16998,28012,-16998,28012,-16998,28012,-16998, - 27635,-17605,27635,-17605,27635,-17605,27635,-17605, - 27244,-18204,27244,-18204,27244,-18204,27244,-18204, - 26841,-18794,26841,-18794,26841,-18794,26841,-18794, - 26424,-19375,26424,-19375,26424,-19375,26424,-19375, - 25995,-19947,25995,-19947,25995,-19947,25995,-19947, - 25554,-20509,25554,-20509,25554,-20509,25554,-20509, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 24635,-21604,24635,-21604,24635,-21604,24635,-21604, - 24158,-22137,24158,-22137,24158,-22137,24158,-22137, - 23669,-22658,23669,-22658,23669,-22658,23669,-22658, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 22658,-23669,22658,-23669,22658,-23669,22658,-23669, - 22137,-24158,22137,-24158,22137,-24158,22137,-24158, - 21604,-24635,21604,-24635,21604,-24635,21604,-24635, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 20509,-25554,20509,-25554,20509,-25554,20509,-25554, - 19947,-25995,19947,-25995,19947,-25995,19947,-25995, - 19375,-26424,19375,-26424,19375,-26424,19375,-26424, - 18794,-26841,18794,-26841,18794,-26841,18794,-26841, - 18204,-27244,18204,-27244,18204,-27244,18204,-27244, - 17605,-27635,17605,-27635,17605,-27635,17605,-27635, - 16998,-28012,16998,-28012,16998,-28012,16998,-28012, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15760,-28727,15760,-28727,15760,-28727,15760,-28727, - 15130,-29064,15130,-29064,15130,-29064,15130,-29064, - 14492,-29387,14492,-29387,14492,-29387,14492,-29387, - 13847,-29696,13847,-29696,13847,-29696,13847,-29696, - 13196,-29992,13196,-29992,13196,-29992,13196,-29992, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 11876,-30539,11876,-30539,11876,-30539,11876,-30539, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 10532,-31028,10532,-31028,10532,-31028,10532,-31028, - 9853,-31250,9853,-31250,9853,-31250,9853,-31250, - 9169,-31457,9169,-31457,9169,-31457,9169,-31457, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 7788,-31827,7788,-31827,7788,-31827,7788,-31827, - 7092,-31990,7092,-31990,7092,-31990,7092,-31990, - 6392,-32137,6392,-32137,6392,-32137,6392,-32137, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 4984,-32385,4984,-32385,4984,-32385,4984,-32385, - 4276,-32486,4276,-32486,4276,-32486,4276,-32486, - 3567,-32572,3567,-32572,3567,-32572,3567,-32572, - 2855,-32642,2855,-32642,2855,-32642,2855,-32642, - 2143,-32696,2143,-32696,2143,-32696,2143,-32696, - 1429,-32735,1429,-32735,1429,-32735,1429,-32735, - 714,-32759,714,-32759,714,-32759,714,-32759, - 0,-32767,0,-32767,0,-32767,0,-32767, - -714,-32759,-714,-32759,-714,-32759,-714,-32759, - -1429,-32735,-1429,-32735,-1429,-32735,-1429,-32735, - -2143,-32696,-2143,-32696,-2143,-32696,-2143,-32696, - -2855,-32642,-2855,-32642,-2855,-32642,-2855,-32642, - -3567,-32572,-3567,-32572,-3567,-32572,-3567,-32572, - -4276,-32486,-4276,-32486,-4276,-32486,-4276,-32486, - -4984,-32385,-4984,-32385,-4984,-32385,-4984,-32385, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -6392,-32137,-6392,-32137,-6392,-32137,-6392,-32137, - -7092,-31990,-7092,-31990,-7092,-31990,-7092,-31990, - -7788,-31827,-7788,-31827,-7788,-31827,-7788,-31827, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -9169,-31457,-9169,-31457,-9169,-31457,-9169,-31457, - -9853,-31250,-9853,-31250,-9853,-31250,-9853,-31250, - -10532,-31028,-10532,-31028,-10532,-31028,-10532,-31028, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -11876,-30539,-11876,-30539,-11876,-30539,-11876,-30539, - -12539,-30272,-12539,-30272,-12539,-30272,-12539,-30272, - -13196,-29992,-13196,-29992,-13196,-29992,-13196,-29992, - -13847,-29696,-13847,-29696,-13847,-29696,-13847,-29696, - -14492,-29387,-14492,-29387,-14492,-29387,-14492,-29387, - -15130,-29064,-15130,-29064,-15130,-29064,-15130,-29064, - -15760,-28727,-15760,-28727,-15760,-28727,-15760,-28727 - }; - -static int16_t twb288[760]__attribute__((aligned(32))) = {32735,-1429,32735,-1429,32735,-1429,32735,-1429, - 32642,-2855,32642,-2855,32642,-2855,32642,-2855, - 32486,-4276,32486,-4276,32486,-4276,32486,-4276, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 31990,-7092,31990,-7092,31990,-7092,31990,-7092, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31250,-9853,31250,-9853,31250,-9853,31250,-9853, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 29696,-13847,29696,-13847,29696,-13847,29696,-13847, - 29064,-15130,29064,-15130,29064,-15130,29064,-15130, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27635,-17605,27635,-17605,27635,-17605,27635,-17605, - 26841,-18794,26841,-18794,26841,-18794,26841,-18794, - 25995,-19947,25995,-19947,25995,-19947,25995,-19947, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 24158,-22137,24158,-22137,24158,-22137,24158,-22137, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 22137,-24158,22137,-24158,22137,-24158,22137,-24158, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 19947,-25995,19947,-25995,19947,-25995,19947,-25995, - 18794,-26841,18794,-26841,18794,-26841,18794,-26841, - 17605,-27635,17605,-27635,17605,-27635,17605,-27635, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15130,-29064,15130,-29064,15130,-29064,15130,-29064, - 13847,-29696,13847,-29696,13847,-29696,13847,-29696, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 9853,-31250,9853,-31250,9853,-31250,9853,-31250, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 7092,-31990,7092,-31990,7092,-31990,7092,-31990, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 4276,-32486,4276,-32486,4276,-32486,4276,-32486, - 2855,-32642,2855,-32642,2855,-32642,2855,-32642, - 1429,-32735,1429,-32735,1429,-32735,1429,-32735, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1429,-32735,-1429,-32735,-1429,-32735,-1429,-32735, - -2855,-32642,-2855,-32642,-2855,-32642,-2855,-32642, - -4276,-32486,-4276,-32486,-4276,-32486,-4276,-32486, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -7092,-31990,-7092,-31990,-7092,-31990,-7092,-31990, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -9853,-31250,-9853,-31250,-9853,-31250,-9853,-31250, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -12539,-30272,-12539,-30272,-12539,-30272,-12539,-30272, - -13847,-29696,-13847,-29696,-13847,-29696,-13847,-29696, - -15130,-29064,-15130,-29064,-15130,-29064,-15130,-29064, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -17605,-27635,-17605,-27635,-17605,-27635,-17605,-27635, - -18794,-26841,-18794,-26841,-18794,-26841,-18794,-26841, - -19947,-25995,-19947,-25995,-19947,-25995,-19947,-25995, - -21062,-25100,-21062,-25100,-21062,-25100,-21062,-25100, - -22137,-24158,-22137,-24158,-22137,-24158,-22137,-24158, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -24158,-22137,-24158,-22137,-24158,-22137,-24158,-22137, - -25100,-21062,-25100,-21062,-25100,-21062,-25100,-21062, - -25995,-19947,-25995,-19947,-25995,-19947,-25995,-19947, - -26841,-18794,-26841,-18794,-26841,-18794,-26841,-18794, - -27635,-17605,-27635,-17605,-27635,-17605,-27635,-17605, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -29064,-15130,-29064,-15130,-29064,-15130,-29064,-15130, - -29696,-13847,-29696,-13847,-29696,-13847,-29696,-13847, - -30272,-12539,-30272,-12539,-30272,-12539,-30272,-12539, - -30790,-11206,-30790,-11206,-30790,-11206,-30790,-11206, - -31250,-9853,-31250,-9853,-31250,-9853,-31250,-9853, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480, - -31990,-7092,-31990,-7092,-31990,-7092,-31990,-7092, - -32269,-5689,-32269,-5689,-32269,-5689,-32269,-5689, - -32486,-4276,-32486,-4276,-32486,-4276,-32486,-4276, - -32642,-2855,-32642,-2855,-32642,-2855,-32642,-2855, - -32735,-1429,-32735,-1429,-32735,-1429,-32735,-1429, - -32767,0,-32767,0,-32767,0,-32767,0, - -32735,1429,-32735,1429,-32735,1429,-32735,1429, - -32642,2855,-32642,2855,-32642,2855,-32642,2855, - -32486,4276,-32486,4276,-32486,4276,-32486,4276, - -32269,5689,-32269,5689,-32269,5689,-32269,5689, - -31990,7092,-31990,7092,-31990,7092,-31990,7092, - -31650,8480,-31650,8480,-31650,8480,-31650,8480, - -31250,9853,-31250,9853,-31250,9853,-31250,9853, - -30790,11206,-30790,11206,-30790,11206,-30790,11206, - -30272,12539,-30272,12539,-30272,12539,-30272,12539, - -29696,13847,-29696,13847,-29696,13847,-29696,13847, - -29064,15130,-29064,15130,-29064,15130,-29064,15130, - -28377,16383,-28377,16383,-28377,16383,-28377,16383, - -27635,17605,-27635,17605,-27635,17605,-27635,17605, - -26841,18794,-26841,18794,-26841,18794,-26841,18794, - -25995,19947,-25995,19947,-25995,19947,-25995,19947, - -25100,21062,-25100,21062,-25100,21062,-25100,21062, - -24158,22137,-24158,22137,-24158,22137,-24158,22137, - -23169,23169,-23169,23169,-23169,23169,-23169,23169, - -22137,24158,-22137,24158,-22137,24158,-22137,24158, - -21062,25100,-21062,25100,-21062,25100,-21062,25100, - -19947,25995,-19947,25995,-19947,25995,-19947,25995, - -18794,26841,-18794,26841,-18794,26841,-18794,26841, - -17605,27635,-17605,27635,-17605,27635,-17605,27635 - }; +static int16_t twa288[760]__attribute__((aligned(32))); +static int16_t twb288[760]__attribute__((aligned(32))); void dft288(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -8679,249 +8476,10 @@ void dft288(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t twa300[472]__attribute__((aligned(32))) = {32759,-686,32759,-686,32759,-686,32759,-686, - 32738,-1372,32738,-1372,32738,-1372,32738,-1372, - 32702,-2057,32702,-2057,32702,-2057,32702,-2057, - 32652,-2741,32652,-2741,32652,-2741,32652,-2741, - 32587,-3425,32587,-3425,32587,-3425,32587,-3425, - 32508,-4106,32508,-4106,32508,-4106,32508,-4106, - 32415,-4786,32415,-4786,32415,-4786,32415,-4786, - 32308,-5464,32308,-5464,32308,-5464,32308,-5464, - 32186,-6139,32186,-6139,32186,-6139,32186,-6139, - 32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 31901,-7482,31901,-7482,31901,-7482,31901,-7482, - 31737,-8148,31737,-8148,31737,-8148,31737,-8148, - 31559,-8811,31559,-8811,31559,-8811,31559,-8811, - 31368,-9470,31368,-9470,31368,-9470,31368,-9470, - 31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 30944,-10775,30944,-10775,30944,-10775,30944,-10775, - 30711,-11421,30711,-11421,30711,-11421,30711,-11421, - 30465,-12062,30465,-12062,30465,-12062,30465,-12062, - 30206,-12697,30206,-12697,30206,-12697,30206,-12697, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 29648,-13951,29648,-13951,29648,-13951,29648,-13951, - 29349,-14569,29349,-14569,29349,-14569,29349,-14569, - 29038,-15180,29038,-15180,29038,-15180,29038,-15180, - 28713,-15785,28713,-15785,28713,-15785,28713,-15785, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 28027,-16974,28027,-16974,28027,-16974,28027,-16974, - 27666,-17557,27666,-17557,27666,-17557,27666,-17557, - 27292,-18132,27292,-18132,27292,-18132,27292,-18132, - 26906,-18700,26906,-18700,26906,-18700,26906,-18700, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 26099,-19810,26099,-19810,26099,-19810,26099,-19810, - 25679,-20353,25679,-20353,25679,-20353,25679,-20353, - 25247,-20886,25247,-20886,25247,-20886,25247,-20886, - 24804,-21410,24804,-21410,24804,-21410,24804,-21410, - 24350,-21925,24350,-21925,24350,-21925,24350,-21925, - 23886,-22430,23886,-22430,23886,-22430,23886,-22430, - 23411,-22925,23411,-22925,23411,-22925,23411,-22925, - 22925,-23411,22925,-23411,22925,-23411,22925,-23411, - 22430,-23886,22430,-23886,22430,-23886,22430,-23886, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 21410,-24804,21410,-24804,21410,-24804,21410,-24804, - 20886,-25247,20886,-25247,20886,-25247,20886,-25247, - 20353,-25679,20353,-25679,20353,-25679,20353,-25679, - 19810,-26099,19810,-26099,19810,-26099,19810,-26099, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 18700,-26906,18700,-26906,18700,-26906,18700,-26906, - 18132,-27292,18132,-27292,18132,-27292,18132,-27292, - 17557,-27666,17557,-27666,17557,-27666,17557,-27666, - 16974,-28027,16974,-28027,16974,-28027,16974,-28027, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15785,-28713,15785,-28713,15785,-28713,15785,-28713, - 15180,-29038,15180,-29038,15180,-29038,15180,-29038, - 14569,-29349,14569,-29349,14569,-29349,14569,-29349, - 13951,-29648,13951,-29648,13951,-29648,13951,-29648, - 13327,-29934,13327,-29934,13327,-29934,13327,-29934, - 12697,-30206,12697,-30206,12697,-30206,12697,-30206, - 12062,-30465,12062,-30465,12062,-30465,12062,-30465, - 11421,-30711,11421,-30711,11421,-30711,11421,-30711, - 10775,-30944,10775,-30944,10775,-30944,10775,-30944 - }; - -static int16_t twb300[472]__attribute__((aligned(32))) = {32738,-1372,32738,-1372,32738,-1372,32738,-1372, - 32652,-2741,32652,-2741,32652,-2741,32652,-2741, - 32508,-4106,32508,-4106,32508,-4106,32508,-4106, - 32308,-5464,32308,-5464,32308,-5464,32308,-5464, - 32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 31737,-8148,31737,-8148,31737,-8148,31737,-8148, - 31368,-9470,31368,-9470,31368,-9470,31368,-9470, - 30944,-10775,30944,-10775,30944,-10775,30944,-10775, - 30465,-12062,30465,-12062,30465,-12062,30465,-12062, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 29349,-14569,29349,-14569,29349,-14569,29349,-14569, - 28713,-15785,28713,-15785,28713,-15785,28713,-15785, - 28027,-16974,28027,-16974,28027,-16974,28027,-16974, - 27292,-18132,27292,-18132,27292,-18132,27292,-18132, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 25679,-20353,25679,-20353,25679,-20353,25679,-20353, - 24804,-21410,24804,-21410,24804,-21410,24804,-21410, - 23886,-22430,23886,-22430,23886,-22430,23886,-22430, - 22925,-23411,22925,-23411,22925,-23411,22925,-23411, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 20886,-25247,20886,-25247,20886,-25247,20886,-25247, - 19810,-26099,19810,-26099,19810,-26099,19810,-26099, - 18700,-26906,18700,-26906,18700,-26906,18700,-26906, - 17557,-27666,17557,-27666,17557,-27666,17557,-27666, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15180,-29038,15180,-29038,15180,-29038,15180,-29038, - 13951,-29648,13951,-29648,13951,-29648,13951,-29648, - 12697,-30206,12697,-30206,12697,-30206,12697,-30206, - 11421,-30711,11421,-30711,11421,-30711,11421,-30711, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 8811,-31559,8811,-31559,8811,-31559,8811,-31559, - 7482,-31901,7482,-31901,7482,-31901,7482,-31901, - 6139,-32186,6139,-32186,6139,-32186,6139,-32186, - 4786,-32415,4786,-32415,4786,-32415,4786,-32415, - 3425,-32587,3425,-32587,3425,-32587,3425,-32587, - 2057,-32702,2057,-32702,2057,-32702,2057,-32702, - 686,-32759,686,-32759,686,-32759,686,-32759, - -686,-32759,-686,-32759,-686,-32759,-686,-32759, - -2057,-32702,-2057,-32702,-2057,-32702,-2057,-32702, - -3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587, - -4786,-32415,-4786,-32415,-4786,-32415,-4786,-32415, - -6139,-32186,-6139,-32186,-6139,-32186,-6139,-32186, - -7482,-31901,-7482,-31901,-7482,-31901,-7482,-31901, - -8811,-31559,-8811,-31559,-8811,-31559,-8811,-31559, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -11421,-30711,-11421,-30711,-11421,-30711,-11421,-30711, - -12697,-30206,-12697,-30206,-12697,-30206,-12697,-30206, - -13951,-29648,-13951,-29648,-13951,-29648,-13951,-29648, - -15180,-29038,-15180,-29038,-15180,-29038,-15180,-29038, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -17557,-27666,-17557,-27666,-17557,-27666,-17557,-27666, - -18700,-26906,-18700,-26906,-18700,-26906,-18700,-26906, - -19810,-26099,-19810,-26099,-19810,-26099,-19810,-26099, - -20886,-25247,-20886,-25247,-20886,-25247,-20886,-25247, - -21925,-24350,-21925,-24350,-21925,-24350,-21925,-24350, - -22925,-23411,-22925,-23411,-22925,-23411,-22925,-23411, - -23886,-22430,-23886,-22430,-23886,-22430,-23886,-22430, - -24804,-21410,-24804,-21410,-24804,-21410,-24804,-21410, - -25679,-20353,-25679,-20353,-25679,-20353,-25679,-20353 - }; - -static int16_t twc300[472]__attribute__((aligned(32))) = {32702,-2057,32702,-2057,32702,-2057,32702,-2057, - 32508,-4106,32508,-4106,32508,-4106,32508,-4106, - 32186,-6139,32186,-6139,32186,-6139,32186,-6139, - 31737,-8148,31737,-8148,31737,-8148,31737,-8148, - 31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 30465,-12062,30465,-12062,30465,-12062,30465,-12062, - 29648,-13951,29648,-13951,29648,-13951,29648,-13951, - 28713,-15785,28713,-15785,28713,-15785,28713,-15785, - 27666,-17557,27666,-17557,27666,-17557,27666,-17557, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 25247,-20886,25247,-20886,25247,-20886,25247,-20886, - 23886,-22430,23886,-22430,23886,-22430,23886,-22430, - 22430,-23886,22430,-23886,22430,-23886,22430,-23886, - 20886,-25247,20886,-25247,20886,-25247,20886,-25247, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 17557,-27666,17557,-27666,17557,-27666,17557,-27666, - 15785,-28713,15785,-28713,15785,-28713,15785,-28713, - 13951,-29648,13951,-29648,13951,-29648,13951,-29648, - 12062,-30465,12062,-30465,12062,-30465,12062,-30465, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 8148,-31737,8148,-31737,8148,-31737,8148,-31737, - 6139,-32186,6139,-32186,6139,-32186,6139,-32186, - 4106,-32508,4106,-32508,4106,-32508,4106,-32508, - 2057,-32702,2057,-32702,2057,-32702,2057,-32702, - 0,-32767,0,-32767,0,-32767,0,-32767, - -2057,-32702,-2057,-32702,-2057,-32702,-2057,-32702, - -4106,-32508,-4106,-32508,-4106,-32508,-4106,-32508, - -6139,-32186,-6139,-32186,-6139,-32186,-6139,-32186, - -8148,-31737,-8148,-31737,-8148,-31737,-8148,-31737, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -12062,-30465,-12062,-30465,-12062,-30465,-12062,-30465, - -13951,-29648,-13951,-29648,-13951,-29648,-13951,-29648, - -15785,-28713,-15785,-28713,-15785,-28713,-15785,-28713, - -17557,-27666,-17557,-27666,-17557,-27666,-17557,-27666, - -19259,-26509,-19259,-26509,-19259,-26509,-19259,-26509, - -20886,-25247,-20886,-25247,-20886,-25247,-20886,-25247, - -22430,-23886,-22430,-23886,-22430,-23886,-22430,-23886, - -23886,-22430,-23886,-22430,-23886,-22430,-23886,-22430, - -25247,-20886,-25247,-20886,-25247,-20886,-25247,-20886, - -26509,-19259,-26509,-19259,-26509,-19259,-26509,-19259, - -27666,-17557,-27666,-17557,-27666,-17557,-27666,-17557, - -28713,-15785,-28713,-15785,-28713,-15785,-28713,-15785, - -29648,-13951,-29648,-13951,-29648,-13951,-29648,-13951, - -30465,-12062,-30465,-12062,-30465,-12062,-30465,-12062, - -31163,-10125,-31163,-10125,-31163,-10125,-31163,-10125, - -31737,-8148,-31737,-8148,-31737,-8148,-31737,-8148, - -32186,-6139,-32186,-6139,-32186,-6139,-32186,-6139, - -32508,-4106,-32508,-4106,-32508,-4106,-32508,-4106, - -32702,-2057,-32702,-2057,-32702,-2057,-32702,-2057, - -32767,0,-32767,0,-32767,0,-32767,0, - -32702,2057,-32702,2057,-32702,2057,-32702,2057, - -32508,4106,-32508,4106,-32508,4106,-32508,4106, - -32186,6139,-32186,6139,-32186,6139,-32186,6139, - -31737,8148,-31737,8148,-31737,8148,-31737,8148, - -31163,10125,-31163,10125,-31163,10125,-31163,10125, - -30465,12062,-30465,12062,-30465,12062,-30465,12062, - -29648,13951,-29648,13951,-29648,13951,-29648,13951, - -28713,15785,-28713,15785,-28713,15785,-28713,15785, - -27666,17557,-27666,17557,-27666,17557,-27666,17557 - }; - -static int16_t twd300[472]__attribute__((aligned(32))) = {32652,-2741,32652,-2741,32652,-2741,32652,-2741, - 32308,-5464,32308,-5464,32308,-5464,32308,-5464, - 31737,-8148,31737,-8148,31737,-8148,31737,-8148, - 30944,-10775,30944,-10775,30944,-10775,30944,-10775, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 28713,-15785,28713,-15785,28713,-15785,28713,-15785, - 27292,-18132,27292,-18132,27292,-18132,27292,-18132, - 25679,-20353,25679,-20353,25679,-20353,25679,-20353, - 23886,-22430,23886,-22430,23886,-22430,23886,-22430, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 19810,-26099,19810,-26099,19810,-26099,19810,-26099, - 17557,-27666,17557,-27666,17557,-27666,17557,-27666, - 15180,-29038,15180,-29038,15180,-29038,15180,-29038, - 12697,-30206,12697,-30206,12697,-30206,12697,-30206, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 7482,-31901,7482,-31901,7482,-31901,7482,-31901, - 4786,-32415,4786,-32415,4786,-32415,4786,-32415, - 2057,-32702,2057,-32702,2057,-32702,2057,-32702, - -686,-32759,-686,-32759,-686,-32759,-686,-32759, - -3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587, - -6139,-32186,-6139,-32186,-6139,-32186,-6139,-32186, - -8811,-31559,-8811,-31559,-8811,-31559,-8811,-31559, - -11421,-30711,-11421,-30711,-11421,-30711,-11421,-30711, - -13951,-29648,-13951,-29648,-13951,-29648,-13951,-29648, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -18700,-26906,-18700,-26906,-18700,-26906,-18700,-26906, - -20886,-25247,-20886,-25247,-20886,-25247,-20886,-25247, - -22925,-23411,-22925,-23411,-22925,-23411,-22925,-23411, - -24804,-21410,-24804,-21410,-24804,-21410,-24804,-21410, - -26509,-19259,-26509,-19259,-26509,-19259,-26509,-19259, - -28027,-16974,-28027,-16974,-28027,-16974,-28027,-16974, - -29349,-14569,-29349,-14569,-29349,-14569,-29349,-14569, - -30465,-12062,-30465,-12062,-30465,-12062,-30465,-12062, - -31368,-9470,-31368,-9470,-31368,-9470,-31368,-9470, - -32050,-6812,-32050,-6812,-32050,-6812,-32050,-6812, - -32508,-4106,-32508,-4106,-32508,-4106,-32508,-4106, - -32738,-1372,-32738,-1372,-32738,-1372,-32738,-1372, - -32738,1372,-32738,1372,-32738,1372,-32738,1372, - -32508,4106,-32508,4106,-32508,4106,-32508,4106, - -32050,6812,-32050,6812,-32050,6812,-32050,6812, - -31368,9470,-31368,9470,-31368,9470,-31368,9470, - -30465,12062,-30465,12062,-30465,12062,-30465,12062, - -29349,14569,-29349,14569,-29349,14569,-29349,14569, - -28027,16974,-28027,16974,-28027,16974,-28027,16974, - -26509,19259,-26509,19259,-26509,19259,-26509,19259, - -24804,21410,-24804,21410,-24804,21410,-24804,21410, - -22925,23411,-22925,23411,-22925,23411,-22925,23411, - -20886,25247,-20886,25247,-20886,25247,-20886,25247, - -18700,26906,-18700,26906,-18700,26906,-18700,26906, - -16383,28377,-16383,28377,-16383,28377,-16383,28377, - -13951,29648,-13951,29648,-13951,29648,-13951,29648, - -11421,30711,-11421,30711,-11421,30711,-11421,30711, - -8811,31559,-8811,31559,-8811,31559,-8811,31559, - -6139,32186,-6139,32186,-6139,32186,-6139,32186, - -3425,32587,-3425,32587,-3425,32587,-3425,32587, - -686,32759,-686,32759,-686,32759,-686,32759, - 2057,32702,2057,32702,2057,32702,2057,32702, - 4786,32415,4786,32415,4786,32415,4786,32415, - 7482,31901,7482,31901,7482,31901,7482,31901 - }; +static int16_t twa300[472]__attribute__((aligned(32))); +static int16_t twb300[472]__attribute__((aligned(32))); +static int16_t twc300[472]__attribute__((aligned(32))); +static int16_t twd300[472]__attribute__((aligned(32))); void dft300(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -8984,246 +8542,8 @@ void dft300(int16_t *x,int16_t *y,unsigned char scale_flag) } -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:107)/324)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:107)/324)); -twa2 = zeros(1,2*107); -twb2 = zeros(1,2*107); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa324[107*2*4] = {"); -for i=1:2:(2*106) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb324[107*2*4] = {"); -for i=1:2:(2*106) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); - */ -static int16_t twa324[107*2*4] = {32760,-636,32760,-636,32760,-636,32760,-636, - 32742,-1271,32742,-1271,32742,-1271,32742,-1271, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32668,-2540,32668,-2540,32668,-2540,32668,-2540, - 32613,-3173,32613,-3173,32613,-3173,32613,-3173, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32465,-4435,32465,-4435,32465,-4435,32465,-4435, - 32373,-5064,32373,-5064,32373,-5064,32373,-5064, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32152,-6315,32152,-6315,32152,-6315,32152,-6315, - 32024,-6937,32024,-6937,32024,-6937,32024,-6937, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31731,-8174,31731,-8174,31731,-8174,31731,-8174, - 31566,-8788,31566,-8788,31566,-8788,31566,-8788, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31202,-10005,31202,-10005,31202,-10005,31202,-10005, - 31002,-10608,31002,-10608,31002,-10608,31002,-10608, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30567,-11802,30567,-11802,30567,-11802,30567,-11802, - 30333,-12393,30333,-12393,30333,-12393,30333,-12393, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29829,-13560,29829,-13560,29829,-13560,29829,-13560, - 29561,-14136,29561,-14136,29561,-14136,29561,-14136, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 28990,-15271,28990,-15271,28990,-15271,28990,-15271, - 28689,-15831,28689,-15831,28689,-15831,28689,-15831, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28054,-16931,28054,-16931,28054,-16931,28054,-16931, - 27720,-17472,27720,-17472,27720,-17472,27720,-17472, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27022,-18534,27022,-18534,27022,-18534,27022,-18534, - 26657,-19054,26657,-19054,26657,-19054,26657,-19054, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 25898,-20074,25898,-20074,25898,-20074,25898,-20074, - 25504,-20572,25504,-20572,25504,-20572,25504,-20572, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24687,-21546,24687,-21546,24687,-21546,24687,-21546, - 24265,-22020,24265,-22020,24265,-22020,24265,-22020, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23393,-22945,23393,-22945,23393,-22945,23393,-22945, - 22944,-23394,22944,-23394,22944,-23394,22944,-23394, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22019,-24266,22019,-24266,22019,-24266,22019,-24266, - 21545,-24688,21545,-24688,21545,-24688,21545,-24688, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20571,-25505,20571,-25505,20571,-25505,20571,-25505, - 20073,-25899,20073,-25899,20073,-25899,20073,-25899, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19053,-26658,19053,-26658,19053,-26658,19053,-26658, - 18533,-27023,18533,-27023,18533,-27023,18533,-27023, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17471,-27721,17471,-27721,17471,-27721,17471,-27721, - 16930,-28055,16930,-28055,16930,-28055,16930,-28055, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15830,-28690,15830,-28690,15830,-28690,15830,-28690, - 15270,-28991,15270,-28991,15270,-28991,15270,-28991, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14135,-29562,14135,-29562,14135,-29562,14135,-29562, - 13559,-29830,13559,-29830,13559,-29830,13559,-29830, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12392,-30334,12392,-30334,12392,-30334,12392,-30334, - 11801,-30568,11801,-30568,11801,-30568,11801,-30568, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10607,-31003,10607,-31003,10607,-31003,10607,-31003, - 10004,-31203,10004,-31203,10004,-31203,10004,-31203, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 8787,-31567,8787,-31567,8787,-31567,8787,-31567, - 8173,-31732,8173,-31732,8173,-31732,8173,-31732, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 6936,-32025,6936,-32025,6936,-32025,6936,-32025, - 6314,-32153,6314,-32153,6314,-32153,6314,-32153, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5063,-32374,5063,-32374,5063,-32374,5063,-32374, - 4434,-32466,4434,-32466,4434,-32466,4434,-32466, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3172,-32614,3172,-32614,3172,-32614,3172,-32614, - 2539,-32669,2539,-32669,2539,-32669,2539,-32669, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1270,-32743,1270,-32743,1270,-32743,1270,-32743, - 635,-32761,635,-32761,635,-32761,635,-32761, - 0,-32767,0,-32767,0,-32767,0,-32767, - -636,-32761,-636,-32761,-636,-32761,-636,-32761, - -1271,-32743,-1271,-32743,-1271,-32743,-1271,-32743, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2540,-32669,-2540,-32669,-2540,-32669,-2540,-32669, - -3173,-32614,-3173,-32614,-3173,-32614,-3173,-32614, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4435,-32466,-4435,-32466,-4435,-32466,-4435,-32466, - -5064,-32374,-5064,-32374,-5064,-32374,-5064,-32374, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6315,-32153,-6315,-32153,-6315,-32153,-6315,-32153, - -6937,-32025,-6937,-32025,-6937,-32025,-6937,-32025, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -8174,-31732,-8174,-31732,-8174,-31732,-8174,-31732, - -8788,-31567,-8788,-31567,-8788,-31567,-8788,-31567, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -10005,-31203,-10005,-31203,-10005,-31203,-10005,-31203, - -10608,-31003,-10608,-31003,-10608,-31003,-10608,-31003, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11802,-30568,-11802,-30568,-11802,-30568,-11802,-30568, - -12393,-30334,-12393,-30334,-12393,-30334,-12393,-30334, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13560,-29830,-13560,-29830,-13560,-29830,-13560,-29830, - -14136,-29562,-14136,-29562,-14136,-29562,-14136,-29562, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -15271,-28991,-15271,-28991,-15271,-28991,-15271,-28991, - -15831,-28690,-15831,-28690,-15831,-28690,-15831,-28690 - }; -static int16_t twb324[107*2*4] = {32742,-1271,32742,-1271,32742,-1271,32742,-1271, - 32668,-2540,32668,-2540,32668,-2540,32668,-2540, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32373,-5064,32373,-5064,32373,-5064,32373,-5064, - 32152,-6315,32152,-6315,32152,-6315,32152,-6315, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31566,-8788,31566,-8788,31566,-8788,31566,-8788, - 31202,-10005,31202,-10005,31202,-10005,31202,-10005, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30333,-12393,30333,-12393,30333,-12393,30333,-12393, - 29829,-13560,29829,-13560,29829,-13560,29829,-13560, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 28689,-15831,28689,-15831,28689,-15831,28689,-15831, - 28054,-16931,28054,-16931,28054,-16931,28054,-16931, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 26657,-19054,26657,-19054,26657,-19054,26657,-19054, - 25898,-20074,25898,-20074,25898,-20074,25898,-20074, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24265,-22020,24265,-22020,24265,-22020,24265,-22020, - 23393,-22945,23393,-22945,23393,-22945,23393,-22945, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 21545,-24688,21545,-24688,21545,-24688,21545,-24688, - 20571,-25505,20571,-25505,20571,-25505,20571,-25505, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 18533,-27023,18533,-27023,18533,-27023,18533,-27023, - 17471,-27721,17471,-27721,17471,-27721,17471,-27721, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15270,-28991,15270,-28991,15270,-28991,15270,-28991, - 14135,-29562,14135,-29562,14135,-29562,14135,-29562, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 11801,-30568,11801,-30568,11801,-30568,11801,-30568, - 10607,-31003,10607,-31003,10607,-31003,10607,-31003, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 8173,-31732,8173,-31732,8173,-31732,8173,-31732, - 6936,-32025,6936,-32025,6936,-32025,6936,-32025, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 4434,-32466,4434,-32466,4434,-32466,4434,-32466, - 3172,-32614,3172,-32614,3172,-32614,3172,-32614, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 635,-32761,635,-32761,635,-32761,635,-32761, - -636,-32761,-636,-32761,-636,-32761,-636,-32761, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -3173,-32614,-3173,-32614,-3173,-32614,-3173,-32614, - -4435,-32466,-4435,-32466,-4435,-32466,-4435,-32466, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6937,-32025,-6937,-32025,-6937,-32025,-6937,-32025, - -8174,-31732,-8174,-31732,-8174,-31732,-8174,-31732, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -10608,-31003,-10608,-31003,-10608,-31003,-10608,-31003, - -11802,-30568,-11802,-30568,-11802,-30568,-11802,-30568, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -14136,-29562,-14136,-29562,-14136,-29562,-14136,-29562, - -15271,-28991,-15271,-28991,-15271,-28991,-15271,-28991, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -17472,-27721,-17472,-27721,-17472,-27721,-17472,-27721, - -18534,-27023,-18534,-27023,-18534,-27023,-18534,-27023, - -19568,-26284,-19568,-26284,-19568,-26284,-19568,-26284, - -20572,-25505,-20572,-25505,-20572,-25505,-20572,-25505, - -21546,-24688,-21546,-24688,-21546,-24688,-21546,-24688, - -22487,-23834,-22487,-23834,-22487,-23834,-22487,-23834, - -23394,-22945,-23394,-22945,-23394,-22945,-23394,-22945, - -24266,-22020,-24266,-22020,-24266,-22020,-24266,-22020, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25899,-20074,-25899,-20074,-25899,-20074,-25899,-20074, - -26658,-19054,-26658,-19054,-26658,-19054,-26658,-19054, - -27377,-18006,-27377,-18006,-27377,-18006,-27377,-18006, - -28055,-16931,-28055,-16931,-28055,-16931,-28055,-16931, - -28690,-15831,-28690,-15831,-28690,-15831,-28690,-15831, - -29282,-14706,-29282,-14706,-29282,-14706,-29282,-14706, - -29830,-13560,-29830,-13560,-29830,-13560,-29830,-13560, - -30334,-12393,-30334,-12393,-30334,-12393,-30334,-12393, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -31203,-10005,-31203,-10005,-31203,-10005,-31203,-10005, - -31567,-8788,-31567,-8788,-31567,-8788,-31567,-8788, - -31884,-7557,-31884,-7557,-31884,-7557,-31884,-7557, - -32153,-6315,-32153,-6315,-32153,-6315,-32153,-6315, - -32374,-5064,-32374,-5064,-32374,-5064,-32374,-5064, - -32546,-3805,-32546,-3805,-32546,-3805,-32546,-3805, - -32669,-2540,-32669,-2540,-32669,-2540,-32669,-2540, - -32743,-1271,-32743,-1271,-32743,-1271,-32743,-1271, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32743,1270,-32743,1270,-32743,1270,-32743,1270, - -32669,2539,-32669,2539,-32669,2539,-32669,2539, - -32546,3804,-32546,3804,-32546,3804,-32546,3804, - -32374,5063,-32374,5063,-32374,5063,-32374,5063, - -32153,6314,-32153,6314,-32153,6314,-32153,6314, - -31884,7556,-31884,7556,-31884,7556,-31884,7556, - -31567,8787,-31567,8787,-31567,8787,-31567,8787, - -31203,10004,-31203,10004,-31203,10004,-31203,10004, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30334,12392,-30334,12392,-30334,12392,-30334,12392, - -29830,13559,-29830,13559,-29830,13559,-29830,13559, - -29282,14705,-29282,14705,-29282,14705,-29282,14705, - -28690,15830,-28690,15830,-28690,15830,-28690,15830, - -28055,16930,-28055,16930,-28055,16930,-28055,16930, - -27377,18005,-27377,18005,-27377,18005,-27377,18005, - -26658,19053,-26658,19053,-26658,19053,-26658,19053, - -25899,20073,-25899,20073,-25899,20073,-25899,20073, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24266,22019,-24266,22019,-24266,22019,-24266,22019, - -23394,22944,-23394,22944,-23394,22944,-23394,22944, - -22487,23833,-22487,23833,-22487,23833,-22487,23833, - -21546,24687,-21546,24687,-21546,24687,-21546,24687, - -20572,25504,-20572,25504,-20572,25504,-20572,25504, - -19568,26283,-19568,26283,-19568,26283,-19568,26283, - -18534,27022,-18534,27022,-18534,27022,-18534,27022, - -17472,27720,-17472,27720,-17472,27720,-17472,27720 - }; +static int16_t twa324[107*2*4]; +static int16_t twb324[107*2*4]; void dft324(int16_t *x,int16_t *y,unsigned char scale_flag) // 108 x 3 { @@ -9273,271 +8593,8 @@ void dft324(int16_t *x,int16_t *y,unsigned char scale_flag) // 108 x 3 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:119)/360)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:119)/360)); -twa2 = zeros(1,2*119); -twb2 = zeros(1,2*119); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa360[119*2*4] = {"); -for i=1:2:(2*118) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb360[119*2*4] = {"); -for i=1:2:(2*118) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); - */ -static int16_t twa360[119*2*4] = {32762,-572,32762,-572,32762,-572,32762,-572, - 32747,-1144,32747,-1144,32747,-1144,32747,-1144, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32522,-3994,32522,-3994,32522,-3994,32522,-3994, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32164,-6253,32164,-6253,32164,-6253,32164,-6253, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31927,-7371,31927,-7371,31927,-7371,31927,-7371, - 31793,-7928,31793,-7928,31793,-7928,31793,-7928, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31335,-9581,31335,-9581,31335,-9581,31335,-9581, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 30981,-10668,30981,-10668,30981,-10668,30981,-10668, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30381,-12275,30381,-12275,30381,-12275,30381,-12275, - 30162,-12804,30162,-12804,30162,-12804,30162,-12804, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29450,-14365,29450,-14365,29450,-14365,29450,-14365, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28658,-15886,28658,-15886,28658,-15886,28658,-15886, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28086,-16877,28086,-16877,28086,-16877,28086,-16877, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27165,-18324,27165,-18324,27165,-18324,27165,-18324, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26168,-19720,26168,-19720,26168,-19720,26168,-19720, - 25820,-20174,25820,-20174,25820,-20174,25820,-20174, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24729,-21498,24729,-21498,24729,-21498,24729,-21498, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 23964,-22348,23964,-22348,23964,-22348,23964,-22348, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22761,-23571,22761,-23571,22761,-23571,22761,-23571, - 22347,-23965,22347,-23965,22347,-23965,22347,-23965, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21497,-24730,21497,-24730,21497,-24730,21497,-24730, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19719,-26169,19719,-26169,19719,-26169,19719,-26169, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17363,-27788,17363,-27788,17363,-27788,17363,-27788, - 16876,-28087,16876,-28087,16876,-28087,16876,-28087, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15885,-28659,15885,-28659,15885,-28659,15885,-28659, - 15383,-28932,15383,-28932,15383,-28932,15383,-28932, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12803,-30163,12803,-30163,12803,-30163,12803,-30163, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10667,-30982,10667,-30982,10667,-30982,10667,-30982, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9580,-31336,9580,-31336,9580,-31336,9580,-31336, - 9031,-31498,9031,-31498,9031,-31498,9031,-31498, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7370,-31928,7370,-31928,7370,-31928,7370,-31928, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6252,-32165,6252,-32165,6252,-32165,6252,-32165, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4560,-32449,4560,-32449,4560,-32449,4560,-32449, - 3993,-32523,3993,-32523,3993,-32523,3993,-32523, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2285,-32688,2285,-32688,2285,-32688,2285,-32688, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 571,-32763,571,-32763,571,-32763,571,-32763, - 0,-32767,0,-32767,0,-32767,0,-32767, - -572,-32763,-572,-32763,-572,-32763,-572,-32763, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -1715,-32723,-1715,-32723,-1715,-32723,-1715,-32723, - -2286,-32688,-2286,-32688,-2286,-32688,-2286,-32688, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3994,-32523,-3994,-32523,-3994,-32523,-3994,-32523, - -4561,-32449,-4561,-32449,-4561,-32449,-4561,-32449, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6253,-32165,-6253,-32165,-6253,-32165,-6253,-32165, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7371,-31928,-7371,-31928,-7371,-31928,-7371,-31928, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -9032,-31498,-9032,-31498,-9032,-31498,-9032,-31498, - -9581,-31336,-9581,-31336,-9581,-31336,-9581,-31336, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10668,-30982,-10668,-30982,-10668,-30982,-10668,-30982, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11743,-30591,-11743,-30591,-11743,-30591,-11743,-30591, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -12804,-30163,-12804,-30163,-12804,-30163,-12804,-30163, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15384,-28932,-15384,-28932,-15384,-28932,-15384,-28932, - -15886,-28659,-15886,-28659,-15886,-28659,-15886,-28659 - }; -static int16_t twb360[119*2*4] = {32747,-1144,32747,-1144,32747,-1144,32747,-1144, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31793,-7928,31793,-7928,31793,-7928,31793,-7928, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30381,-12275,30381,-12275,30381,-12275,30381,-12275, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29450,-14365,29450,-14365,29450,-14365,29450,-14365, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27165,-18324,27165,-18324,27165,-18324,27165,-18324, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 25820,-20174,25820,-20174,25820,-20174,25820,-20174, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 22761,-23571,22761,-23571,22761,-23571,22761,-23571, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 17363,-27788,17363,-27788,17363,-27788,17363,-27788, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15383,-28932,15383,-28932,15383,-28932,15383,-28932, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9031,-31498,9031,-31498,9031,-31498,9031,-31498, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 4560,-32449,4560,-32449,4560,-32449,4560,-32449, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2285,-32688,2285,-32688,2285,-32688,2285,-32688, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -2286,-32688,-2286,-32688,-2286,-32688,-2286,-32688, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -4561,-32449,-4561,-32449,-4561,-32449,-4561,-32449, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -9032,-31498,-9032,-31498,-9032,-31498,-9032,-31498, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -15384,-28932,-15384,-28932,-15384,-28932,-15384,-28932, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -17364,-27788,-17364,-27788,-17364,-27788,-17364,-27788, - -18324,-27166,-18324,-27166,-18324,-27166,-18324,-27166, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -20174,-25821,-20174,-25821,-20174,-25821,-20174,-25821, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22762,-23571,-22762,-23571,-22762,-23571,-22762,-23571, - -23571,-22762,-23571,-22762,-23571,-22762,-23571,-22762, - -24351,-21926,-24351,-21926,-24351,-21926,-24351,-21926, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25821,-20174,-25821,-20174,-25821,-20174,-25821,-20174, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -27166,-18324,-27166,-18324,-27166,-18324,-27166,-18324, - -27788,-17364,-27788,-17364,-27788,-17364,-27788,-17364, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28932,-15384,-28932,-15384,-28932,-15384,-28932,-15384, - -29451,-14365,-29451,-14365,-29451,-14365,-29451,-14365, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30382,-12275,-30382,-12275,-30382,-12275,-30382,-12275, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31498,-9032,-31498,-9032,-31498,-9032,-31498,-9032, - -31794,-7928,-31794,-7928,-31794,-7928,-31794,-7928, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32449,-4561,-32449,-4561,-32449,-4561,-32449,-4561, - -32588,-3426,-32588,-3426,-32588,-3426,-32588,-3426, - -32688,-2286,-32688,-2286,-32688,-2286,-32688,-2286, - -32748,-1144,-32748,-1144,-32748,-1144,-32748,-1144, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32748,1143,-32748,1143,-32748,1143,-32748,1143, - -32688,2285,-32688,2285,-32688,2285,-32688,2285, - -32588,3425,-32588,3425,-32588,3425,-32588,3425, - -32449,4560,-32449,4560,-32449,4560,-32449,4560, - -32270,5689,-32270,5689,-32270,5689,-32270,5689, - -32051,6812,-32051,6812,-32051,6812,-32051,6812, - -31794,7927,-31794,7927,-31794,7927,-31794,7927, - -31498,9031,-31498,9031,-31498,9031,-31498,9031, - -31164,10125,-31164,10125,-31164,10125,-31164,10125, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30382,12274,-30382,12274,-30382,12274,-30382,12274, - -29935,13327,-29935,13327,-29935,13327,-29935,13327, - -29451,14364,-29451,14364,-29451,14364,-29451,14364, - -28932,15383,-28932,15383,-28932,15383,-28932,15383, - -28378,16383,-28378,16383,-28378,16383,-28378,16383, - -27788,17363,-27788,17363,-27788,17363,-27788,17363, - -27166,18323,-27166,18323,-27166,18323,-27166,18323, - -26510,19259,-26510,19259,-26510,19259,-26510,19259, - -25821,20173,-25821,20173,-25821,20173,-25821,20173, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24351,21925,-24351,21925,-24351,21925,-24351,21925, - -23571,22761,-23571,22761,-23571,22761,-23571,22761, - -22762,23570,-22762,23570,-22762,23570,-22762,23570, - -21926,24350,-21926,24350,-21926,24350,-21926,24350, - -21063,25100,-21063,25100,-21063,25100,-21063,25100, - -20174,25820,-20174,25820,-20174,25820,-20174,25820, - -19260,26509,-19260,26509,-19260,26509,-19260,26509, - -18324,27165,-18324,27165,-18324,27165,-18324,27165, - -17364,27787,-17364,27787,-17364,27787,-17364,27787 - }; - +static int16_t twa360[119*2*4]; +static int16_t twb360[119*2*4]; void dft360(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 3 { @@ -9587,41 +8644,6 @@ void dft360(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 3 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:95)/384)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:95)/384)); -twc = floor(32767*exp(-sqrt(-1)*2*pi*3*(1:95)/384)); -twa2 = zeros(1,2*95); -twb2 = zeros(1,2*95); -twc2 = zeros(1,2*95); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -twc2(1:2:end) = real(twc); -twc2(2:2:end) = imag(twc); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa384[95*2*4] = {"); -for i=1:2:(2*94) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb384[95*2*4] = {"); -for i=1:2:(2*94) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fprintf(fd,"static int16_t twc384[95*2*4] = {"); -for i=1:2:(2*94) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -fclose(fd); - */ - static int16_t twa384[95*2*4] = {32762,-537,32762,-537,32762,-537,32762,-537, 32749,-1073,32749,-1073,32749,-1073,32749,-1073, 32727,-1608,32727,-1608,32727,-1608,32727,-1608, @@ -18810,13 +17832,13 @@ void init_rad4_rep(int N,int16_t *twa,int16_t *twb,int16_t *twc) { int i,j; - for (i=1;i<(N/4)-1;i++) { - *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); - *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); - *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); - *twb = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); - *twc = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); - *twc = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); + for (i=1;i<(N/4);i++) { + twa[0] = (int16_t)round(32767.0*cos(2*M_PI*i/N)); + twa[1] = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); + twb[0] = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); + twb[1] = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); + twc[0] = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); + twc[1] = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); for (j=1;j<4;j++) { ((int32_t*)twa)[j]=((int32_t*)twa)[0]; ((int32_t*)twb)[j]=((int32_t*)twb)[0]; @@ -18843,9 +17865,9 @@ void init_rad2_rep(int N,int16_t *twa) { int i,j; - for (i=1;i<(N/2)-1;i++) { - *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); - *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); + for (i=1;i<(N/2);i++) { + twa[0] = (int16_t)round(32767.0*cos(2*M_PI*i/N)); + twa[1] = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); for (j=1;j<4;j++) { ((int32_t*)twa)[j]=((int32_t*)twa)[0]; } @@ -18869,11 +17891,11 @@ void init_rad3_rep(int N,int16_t *twa,int16_t *twb) { int i,j; - for (i=1;i<(N/3)-1;i++) { - *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); - *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); - *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); - *twb = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); + for (i=1;i<(N/3);i++) { + twa[0] = (int16_t)round(32767.0*cos(2*M_PI*i/N)); + twa[1] = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); + twb[0] = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); + twb[1] = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); for (j=1;j<4;j++) { ((int32_t*)twa)[j]=((int32_t*)twa)[0]; ((int32_t*)twb)[j]=((int32_t*)twb)[0]; @@ -18887,17 +17909,15 @@ void init_rad5_rep(int N,int16_t *twa,int16_t *twb,int16_t *twc,int16_t *twd) { int i,j; - for (i=1;i<(N/5)-1;i++) { - *twa = (int16_t)round(32767.0*cos(2*M_PI*i/N)); - *twa = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); - *twb = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); - *twb = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); - *twb = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); - *twb = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); - *twc = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); - *twc = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); - *twd = (int16_t)round(32767.0*cos(2*M_PI*4*i/N)); - *twd = -(int16_t)round(32767.0*sin(2*M_PI*4*i/N)); + for (i=1;i<(N/5);i++) { + twa[0] = (int16_t)round(32767.0*cos(2*M_PI*i/N)); + twa[1] = -(int16_t)round(32767.0*sin(2*M_PI*i/N)); + twb[0] = (int16_t)round(32767.0*cos(2*M_PI*2*i/N)); + twb[1] = -(int16_t)round(32767.0*sin(2*M_PI*2*i/N)); + twc[0] = (int16_t)round(32767.0*cos(2*M_PI*3*i/N)); + twc[1] = -(int16_t)round(32767.0*sin(2*M_PI*3*i/N)); + twd[0] = (int16_t)round(32767.0*cos(2*M_PI*4*i/N)); + twd[1] = -(int16_t)round(32767.0*sin(2*M_PI*4*i/N)); for (j=1;j<4;j++) { ((int32_t*)twa)[j]=((int32_t*)twa)[0]; ((int32_t*)twb)[j]=((int32_t*)twb)[0]; @@ -19895,6 +18915,102 @@ int main(int argc, char**argv) LOG_M("y24576.m","y24576",y,24576,1,1); LOG_M("x24576.m","x24576",x,24576,1,1); + // 4x288-point DFT + memset((void*)x,0,288*8*sizeof(int16_t)); + for (i=0;i<288*8;i+=8) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + if ((taus() & 1)==0) + ((int16_t*)x)[i+1] = 364; + else + ((int16_t*)x)[i+1] = -364; + } + + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + dft288((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n4x288-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y288.m","y288",y,288*4,1,1); + LOG_M("x288.m","x288",x,288*4,1,1); + + // 4x300-point DFT + memset((void*)x,0,300*8*sizeof(int16_t)); + for (i=0;i<300*8;i+=8) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + if ((taus() & 1)==0) + ((int16_t*)x)[i+1] = 364; + else + ((int16_t*)x)[i+1] = -364; + } + + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + dft300((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n4x300-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y300.m","y300",y,300*4,1,1); + LOG_M("x300.m","x300",x,300*4,1,1); + + // 4x324-point DFT + memset((void*)x,0,324*8*sizeof(int16_t)); + for (i=0;i<324*8;i+=8) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + if ((taus() & 1)==0) + ((int16_t*)x)[i+1] = 364; + else + ((int16_t*)x)[i+1] = -364; + } + + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + dft324((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n4x324-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y324.m","y324",y,324*4,1,1); + LOG_M("x324.m","x324",x,324*4,1,1); + + // 4x360-point DFT + memset((void*)x,0,360*8*sizeof(int16_t)); + for (i=0;i<360*8;i+=8) { + if ((taus() & 1)==0) + ((int16_t*)x)[i] = 364; + else + ((int16_t*)x)[i] = -364; + if ((taus() & 1)==0) + ((int16_t*)x)[i+1] = 364; + else + ((int16_t*)x)[i+1] = -364; + } + + reset_meas(&ts); + for (i=0; i<10000; i++) { + start_meas(&ts); + dft360((int16_t *)x,(int16_t *)y,1); + stop_meas(&ts); + } + + printf("\n\n4x360-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); + LOG_M("y360.m","y360",y,360*4,1,1); + LOG_M("x360.m","x360",x,360*4,1,1); + return(0); } From ec0b924852bc1a0c40814792050cbe3b29a891d9 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 27 Jul 2018 18:52:18 +0200 Subject: [PATCH 017/128] successful testing of all DFTs. added missing 4x768-point DFT. --- openair1/PHY/TOOLS/lte_dfts.c | 9838 +-------------------------------- 1 file changed, 164 insertions(+), 9674 deletions(-) diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 6ea44ba20f..ecf57cd2e3 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -6388,23 +6388,7 @@ void dft12_simd256(int16_t *x,int16_t *y) #endif -static int16_t tw24[88]__attribute__((aligned(32))) = {31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 0,-32767,0,-32767,0,-32767,0,-32767, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480 - }; - -//static simd_q15_t ytmp128array[300]; -//static simd_q15_t ytmp128array2[300]; -//static simd_q15_t ytmp128array3[300]; -//static simd_q15_t x2128array[300]; +static int16_t tw24[88]__attribute__((aligned(32))); void dft24(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -6499,31 +6483,8 @@ void dft24(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t twa36[88]__attribute__((aligned(32))) = {32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 0,-32767,0,-32767,0,-32767,0,-32767, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790 - }; - -static int16_t twb36[88]__attribute__((aligned(32))) = {30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -25100,-21062,-25100,-21062,-25100,-21062,-25100,-21062, - -30790,-11206,-30790,-11206,-30790,-11206,-30790,-11206, - -32767,0,-32767,0,-32767,0,-32767,0, - -30790,11206,-30790,11206,-30790,11206,-30790,11206, - -25100,21062,-25100,21062,-25100,21062,-25100,21062 - }; +static int16_t twa36[88]__attribute__((aligned(32))); +static int16_t twb36[88]__attribute__((aligned(32))); void dft36(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -6645,44 +6606,9 @@ void dft36(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t twa48[88]__attribute__((aligned(32))) = {32486,-4276,32486,-4276,32486,-4276,32486,-4276, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 25995,-19947,25995,-19947,25995,-19947,25995,-19947, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 19947,-25995,19947,-25995,19947,-25995,19947,-25995, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 4276,-32486,4276,-32486,4276,-32486,4276,-32486 - }; - -static int16_t twb48[88]__attribute__((aligned(32))) = {31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 0,-32767,0,-32767,0,-32767,0,-32767, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480 - }; - -static int16_t twc48[88]__attribute__((aligned(32))) = {30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 0,-32767,0,-32767,0,-32767,0,-32767, - -12539,-30272,-12539,-30272,-12539,-30272,-12539,-30272, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -30272,-12539,-30272,-12539,-30272,-12539,-30272,-12539, - -32767,0,-32767,0,-32767,0,-32767,0, - -30272,12539,-30272,12539,-30272,12539,-30272,12539, - -23169,23169,-23169,23169,-23169,23169,-23169,23169, - -12539,30272,-12539,30272,-12539,30272,-12539,30272 - }; +static int16_t twa48[88]__attribute__((aligned(32))); +static int16_t twb48[88]__attribute__((aligned(32))); +static int16_t twc48[88]__attribute__((aligned(32))); void dft48(int16_t *x, int16_t *y,unsigned char scale_flag) { @@ -6841,54 +6767,10 @@ void dft48(int16_t *x, int16_t *y,unsigned char scale_flag) } -static int16_t twa60[88]__attribute__((aligned(32))) = {32587,-3425,32587,-3425,32587,-3425,32587,-3425, - 32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 24350,-21925,24350,-21925,24350,-21925,24350,-21925, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 13327,-29934,13327,-29934,13327,-29934,13327,-29934 - }; -static int16_t twb60[88]__attribute__((aligned(32))) = {32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 3425,-32587,3425,-32587,3425,-32587,3425,-32587, - -3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -21925,-24350,-21925,-24350,-21925,-24350,-21925,-24350 - }; -static int16_t twc60[88]__attribute__((aligned(32))) = {31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 0,-32767,0,-32767,0,-32767,0,-32767, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -19259,-26509,-19259,-26509,-19259,-26509,-19259,-26509, - -26509,-19259,-26509,-19259,-26509,-19259,-26509,-19259, - -31163,-10125,-31163,-10125,-31163,-10125,-31163,-10125, - -32767,0,-32767,0,-32767,0,-32767,0, - -31163,10125,-31163,10125,-31163,10125,-31163,10125 - }; -static int16_t twd60[88]__attribute__((aligned(32))) = {29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - -3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -26509,-19259,-26509,-19259,-26509,-19259,-26509,-19259, - -32050,-6812,-32050,-6812,-32050,-6812,-32050,-6812, - -32050,6812,-32050,6812,-32050,6812,-32050,6812, - -26509,19259,-26509,19259,-26509,19259,-26509,19259, - -16383,28377,-16383,28377,-16383,28377,-16383,28377, - -3425,32587,-3425,32587,-3425,32587,-3425,32587 - }; +static int16_t twa60[88]__attribute__((aligned(32))); +static int16_t twb60[88]__attribute__((aligned(32))); +static int16_t twc60[88]__attribute__((aligned(32))); +static int16_t twd60[88]__attribute__((aligned(32))); void dft60(int16_t *x,int16_t *y,unsigned char scale) { @@ -7070,42 +6952,7 @@ void dft60(int16_t *x,int16_t *y,unsigned char scale) } -static int16_t tw72[280]__attribute__((aligned(32))) = {32642,-2855,32642,-2855,32642,-2855,32642,-2855, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 29696,-13847,29696,-13847,29696,-13847,29696,-13847, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 26841,-18794,26841,-18794,26841,-18794,26841,-18794, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 18794,-26841,18794,-26841,18794,-26841,18794,-26841, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 13847,-29696,13847,-29696,13847,-29696,13847,-29696, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 2855,-32642,2855,-32642,2855,-32642,2855,-32642, - 0,-32767,0,-32767,0,-32767,0,-32767, - -2855,-32642,-2855,-32642,-2855,-32642,-2855,-32642, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -13847,-29696,-13847,-29696,-13847,-29696,-13847,-29696, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -18794,-26841,-18794,-26841,-18794,-26841,-18794,-26841, - -21062,-25100,-21062,-25100,-21062,-25100,-21062,-25100, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -25100,-21062,-25100,-21062,-25100,-21062,-25100,-21062, - -26841,-18794,-26841,-18794,-26841,-18794,-26841,-18794, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -29696,-13847,-29696,-13847,-29696,-13847,-29696,-13847, - -30790,-11206,-30790,-11206,-30790,-11206,-30790,-11206, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480, - -32269,-5689,-32269,-5689,-32269,-5689,-32269,-5689, - -32642,-2855,-32642,-2855,-32642,-2855,-32642,-2855, - }; +static int16_t tw72[280]__attribute__((aligned(32))); void dft72(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -7149,54 +6996,7 @@ void dft72(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t tw96[376]__attribute__((aligned(32))) = {32696,-2143,32696,-2143,32696,-2143,32696,-2143, - 32486,-4276,32486,-4276,32486,-4276,32486,-4276, - 32137,-6392,32137,-6392,32137,-6392,32137,-6392, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31028,-10532,31028,-10532,31028,-10532,31028,-10532, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 29387,-14492,29387,-14492,29387,-14492,29387,-14492, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27244,-18204,27244,-18204,27244,-18204,27244,-18204, - 25995,-19947,25995,-19947,25995,-19947,25995,-19947, - 24635,-21604,24635,-21604,24635,-21604,24635,-21604, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 21604,-24635,21604,-24635,21604,-24635,21604,-24635, - 19947,-25995,19947,-25995,19947,-25995,19947,-25995, - 18204,-27244,18204,-27244,18204,-27244,18204,-27244, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 14492,-29387,14492,-29387,14492,-29387,14492,-29387, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 10532,-31028,10532,-31028,10532,-31028,10532,-31028, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 6392,-32137,6392,-32137,6392,-32137,6392,-32137, - 4276,-32486,4276,-32486,4276,-32486,4276,-32486, - 2143,-32696,2143,-32696,2143,-32696,2143,-32696, - 0,-32767,0,-32767,0,-32767,0,-32767, - -2143,-32696,-2143,-32696,-2143,-32696,-2143,-32696, - -4276,-32486,-4276,-32486,-4276,-32486,-4276,-32486, - -6392,-32137,-6392,-32137,-6392,-32137,-6392,-32137, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -10532,-31028,-10532,-31028,-10532,-31028,-10532,-31028, - -12539,-30272,-12539,-30272,-12539,-30272,-12539,-30272, - -14492,-29387,-14492,-29387,-14492,-29387,-14492,-29387, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -18204,-27244,-18204,-27244,-18204,-27244,-18204,-27244, - -19947,-25995,-19947,-25995,-19947,-25995,-19947,-25995, - -21604,-24635,-21604,-24635,-21604,-24635,-21604,-24635, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -24635,-21604,-24635,-21604,-24635,-21604,-24635,-21604, - -25995,-19947,-25995,-19947,-25995,-19947,-25995,-19947, - -27244,-18204,-27244,-18204,-27244,-18204,-27244,-18204, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -29387,-14492,-29387,-14492,-29387,-14492,-29387,-14492, - -30272,-12539,-30272,-12539,-30272,-12539,-30272,-12539, - -31028,-10532,-31028,-10532,-31028,-10532,-31028,-10532, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480, - -32137,-6392,-32137,-6392,-32137,-6392,-32137,-6392, - -32486,-4276,-32486,-4276,-32486,-4276,-32486,-4276, - -32696,-2143,-32696,-2143,-32696,-2143,-32696,-2143 - }; +static int16_t tw96[376]__attribute__((aligned(32))); void dft96(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -7242,84 +7042,11 @@ void dft96(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t twa108[280]__attribute__((aligned(32))) = {32711,-1905,32711,-1905,32711,-1905,32711,-1905, - 32545,-3804,32545,-3804,32545,-3804,32545,-3804, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 31883,-7556,31883,-7556,31883,-7556,31883,-7556, - 31390,-9397,31390,-9397,31390,-9397,31390,-9397, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 30087,-12978,30087,-12978,30087,-12978,30087,-12978, - 29281,-14705,29281,-14705,29281,-14705,29281,-14705, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27376,-18005,27376,-18005,27376,-18005,27376,-18005, - 26283,-19567,26283,-19567,26283,-19567,26283,-19567, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 23833,-22486,23833,-22486,23833,-22486,23833,-22486, - 22486,-23833,22486,-23833,22486,-23833,22486,-23833, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 19567,-26283,19567,-26283,19567,-26283,19567,-26283, - 18005,-27376,18005,-27376,18005,-27376,18005,-27376, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 14705,-29281,14705,-29281,14705,-29281,14705,-29281, - 12978,-30087,12978,-30087,12978,-30087,12978,-30087, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 9397,-31390,9397,-31390,9397,-31390,9397,-31390, - 7556,-31883,7556,-31883,7556,-31883,7556,-31883, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 3804,-32545,3804,-32545,3804,-32545,3804,-32545, - 1905,-32711,1905,-32711,1905,-32711,1905,-32711, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1905,-32711,-1905,-32711,-1905,-32711,-1905,-32711, - -3804,-32545,-3804,-32545,-3804,-32545,-3804,-32545, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -7556,-31883,-7556,-31883,-7556,-31883,-7556,-31883, - -9397,-31390,-9397,-31390,-9397,-31390,-9397,-31390, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -12978,-30087,-12978,-30087,-12978,-30087,-12978,-30087, - -14705,-29281,-14705,-29281,-14705,-29281,-14705,-29281 - }; - -static int16_t twb108[280]__attribute__((aligned(32))) = {32545,-3804,32545,-3804,32545,-3804,32545,-3804, - 31883,-7556,31883,-7556,31883,-7556,31883,-7556, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 29281,-14705,29281,-14705,29281,-14705,29281,-14705, - 27376,-18005,27376,-18005,27376,-18005,27376,-18005, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 22486,-23833,22486,-23833,22486,-23833,22486,-23833, - 19567,-26283,19567,-26283,19567,-26283,19567,-26283, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 12978,-30087,12978,-30087,12978,-30087,12978,-30087, - 9397,-31390,9397,-31390,9397,-31390,9397,-31390, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 1905,-32711,1905,-32711,1905,-32711,1905,-32711, - -1905,-32711,-1905,-32711,-1905,-32711,-1905,-32711, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -9397,-31390,-9397,-31390,-9397,-31390,-9397,-31390, - -12978,-30087,-12978,-30087,-12978,-30087,-12978,-30087, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -19567,-26283,-19567,-26283,-19567,-26283,-19567,-26283, - -22486,-23833,-22486,-23833,-22486,-23833,-22486,-23833, - -25100,-21062,-25100,-21062,-25100,-21062,-25100,-21062, - -27376,-18005,-27376,-18005,-27376,-18005,-27376,-18005, - -29281,-14705,-29281,-14705,-29281,-14705,-29281,-14705, - -30790,-11206,-30790,-11206,-30790,-11206,-30790,-11206, - -31883,-7556,-31883,-7556,-31883,-7556,-31883,-7556, - -32545,-3804,-32545,-3804,-32545,-3804,-32545,-3804, - -32767,0,-32767,0,-32767,0,-32767,0, - -32545,3804,-32545,3804,-32545,3804,-32545,3804, - -31883,7556,-31883,7556,-31883,7556,-31883,7556, - -30790,11206,-30790,11206,-30790,11206,-30790,11206, - -29281,14705,-29281,14705,-29281,14705,-29281,14705, - -27376,18005,-27376,18005,-27376,18005,-27376,18005, - -25100,21062,-25100,21062,-25100,21062,-25100,21062, - -22486,23833,-22486,23833,-22486,23833,-22486,23833, - -19567,26283,-19567,26283,-19567,26283,-19567,26283 - }; +static int16_t twa108[280]__attribute__((aligned(32))); +static int16_t twb108[280]__attribute__((aligned(32))); void dft108(int16_t *x,int16_t *y,unsigned char scale_flag) { - - int i,j; simd_q15_t *x128=(simd_q15_t *)x; simd_q15_t *y128=(simd_q15_t *)y; @@ -7366,71 +7093,9 @@ void dft108(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t tw120[472]__attribute__((aligned(32))) = {32722,-1714,32722,-1714,32722,-1714,32722,-1714, - 32587,-3425,32587,-3425,32587,-3425,32587,-3425, - 32363,-5125,32363,-5125,32363,-5125,32363,-5125, - 32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 30590,-11742,30590,-11742,30590,-11742,30590,-11742, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 29195,-14875,29195,-14875,29195,-14875,29195,-14875, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27480,-17846,27480,-17846,27480,-17846,27480,-17846, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 25464,-20620,25464,-20620,25464,-20620,25464,-20620, - 24350,-21925,24350,-21925,24350,-21925,24350,-21925, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 20620,-25464,20620,-25464,20620,-25464,20620,-25464, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 17846,-27480,17846,-27480,17846,-27480,17846,-27480, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 14875,-29195,14875,-29195,14875,-29195,14875,-29195, - 13327,-29934,13327,-29934,13327,-29934,13327,-29934, - 11742,-30590,11742,-30590,11742,-30590,11742,-30590, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 6812,-32050,6812,-32050,6812,-32050,6812,-32050, - 5125,-32363,5125,-32363,5125,-32363,5125,-32363, - 3425,-32587,3425,-32587,3425,-32587,3425,-32587, - 1714,-32722,1714,-32722,1714,-32722,1714,-32722, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1714,-32722,-1714,-32722,-1714,-32722,-1714,-32722, - -3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587, - -5125,-32363,-5125,-32363,-5125,-32363,-5125,-32363, - -6812,-32050,-6812,-32050,-6812,-32050,-6812,-32050, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -11742,-30590,-11742,-30590,-11742,-30590,-11742,-30590, - -13327,-29934,-13327,-29934,-13327,-29934,-13327,-29934, - -14875,-29195,-14875,-29195,-14875,-29195,-14875,-29195, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -17846,-27480,-17846,-27480,-17846,-27480,-17846,-27480, - -19259,-26509,-19259,-26509,-19259,-26509,-19259,-26509, - -20620,-25464,-20620,-25464,-20620,-25464,-20620,-25464, - -21925,-24350,-21925,-24350,-21925,-24350,-21925,-24350, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -24350,-21925,-24350,-21925,-24350,-21925,-24350,-21925, - -25464,-20620,-25464,-20620,-25464,-20620,-25464,-20620, - -26509,-19259,-26509,-19259,-26509,-19259,-26509,-19259, - -27480,-17846,-27480,-17846,-27480,-17846,-27480,-17846, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -29195,-14875,-29195,-14875,-29195,-14875,-29195,-14875, - -29934,-13327,-29934,-13327,-29934,-13327,-29934,-13327, - -30590,-11742,-30590,-11742,-30590,-11742,-30590,-11742, - -31163,-10125,-31163,-10125,-31163,-10125,-31163,-10125, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480, - -32050,-6812,-32050,-6812,-32050,-6812,-32050,-6812, - -32363,-5125,-32363,-5125,-32363,-5125,-32363,-5125, - -32587,-3425,-32587,-3425,-32587,-3425,-32587,-3425, - -32722,-1714,-32722,-1714,-32722,-1714,-32722,-1714 - }; - +static int16_t tw120[472]__attribute__((aligned(32))); void dft120(int16_t *x,int16_t *y, unsigned char scale_flag) { - - int i,j; simd_q15_t *x128=(simd_q15_t *)x; simd_q15_t *y128=(simd_q15_t *)y; @@ -7438,7 +7103,6 @@ void dft120(int16_t *x,int16_t *y, unsigned char scale_flag) simd_q15_t x2128[120];// = (simd_q15_t *)&x2128array[0]; simd_q15_t ytmp128[120];//=&ytmp128array2[0]; - for (i=0,j=0; i<60; i++,j+=2) { x2128[i] = x128[j]; x2128[i+60] = x128[j+1]; @@ -7471,107 +7135,11 @@ void dft120(int16_t *x,int16_t *y, unsigned char scale_flag) } -static int16_t twa144[376]__attribute__((aligned(32))) = {32735,-1429,32735,-1429,32735,-1429,32735,-1429, - 32642,-2855,32642,-2855,32642,-2855,32642,-2855, - 32486,-4276,32486,-4276,32486,-4276,32486,-4276, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 31990,-7092,31990,-7092,31990,-7092,31990,-7092, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31250,-9853,31250,-9853,31250,-9853,31250,-9853, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 29696,-13847,29696,-13847,29696,-13847,29696,-13847, - 29064,-15130,29064,-15130,29064,-15130,29064,-15130, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27635,-17605,27635,-17605,27635,-17605,27635,-17605, - 26841,-18794,26841,-18794,26841,-18794,26841,-18794, - 25995,-19947,25995,-19947,25995,-19947,25995,-19947, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 24158,-22137,24158,-22137,24158,-22137,24158,-22137, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 22137,-24158,22137,-24158,22137,-24158,22137,-24158, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 19947,-25995,19947,-25995,19947,-25995,19947,-25995, - 18794,-26841,18794,-26841,18794,-26841,18794,-26841, - 17605,-27635,17605,-27635,17605,-27635,17605,-27635, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15130,-29064,15130,-29064,15130,-29064,15130,-29064, - 13847,-29696,13847,-29696,13847,-29696,13847,-29696, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 9853,-31250,9853,-31250,9853,-31250,9853,-31250, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 7092,-31990,7092,-31990,7092,-31990,7092,-31990, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 4276,-32486,4276,-32486,4276,-32486,4276,-32486, - 2855,-32642,2855,-32642,2855,-32642,2855,-32642, - 1429,-32735,1429,-32735,1429,-32735,1429,-32735, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1429,-32735,-1429,-32735,-1429,-32735,-1429,-32735, - -2855,-32642,-2855,-32642,-2855,-32642,-2855,-32642, - -4276,-32486,-4276,-32486,-4276,-32486,-4276,-32486, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -7092,-31990,-7092,-31990,-7092,-31990,-7092,-31990, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -9853,-31250,-9853,-31250,-9853,-31250,-9853,-31250, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -12539,-30272,-12539,-30272,-12539,-30272,-12539,-30272, - -13847,-29696,-13847,-29696,-13847,-29696,-13847,-29696, - -15130,-29064,-15130,-29064,-15130,-29064,-15130,-29064 - }; - -static int16_t twb144[376]__attribute__((aligned(32))) = {32642,-2855,32642,-2855,32642,-2855,32642,-2855, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 29696,-13847,29696,-13847,29696,-13847,29696,-13847, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 26841,-18794,26841,-18794,26841,-18794,26841,-18794, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 18794,-26841,18794,-26841,18794,-26841,18794,-26841, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 13847,-29696,13847,-29696,13847,-29696,13847,-29696, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 2855,-32642,2855,-32642,2855,-32642,2855,-32642, - 0,-32767,0,-32767,0,-32767,0,-32767, - -2855,-32642,-2855,-32642,-2855,-32642,-2855,-32642, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -13847,-29696,-13847,-29696,-13847,-29696,-13847,-29696, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -18794,-26841,-18794,-26841,-18794,-26841,-18794,-26841, - -21062,-25100,-21062,-25100,-21062,-25100,-21062,-25100, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -25100,-21062,-25100,-21062,-25100,-21062,-25100,-21062, - -26841,-18794,-26841,-18794,-26841,-18794,-26841,-18794, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -29696,-13847,-29696,-13847,-29696,-13847,-29696,-13847, - -30790,-11206,-30790,-11206,-30790,-11206,-30790,-11206, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480, - -32269,-5689,-32269,-5689,-32269,-5689,-32269,-5689, - -32642,-2855,-32642,-2855,-32642,-2855,-32642,-2855, - -32767,0,-32767,0,-32767,0,-32767,0, - -32642,2855,-32642,2855,-32642,2855,-32642,2855, - -32269,5689,-32269,5689,-32269,5689,-32269,5689, - -31650,8480,-31650,8480,-31650,8480,-31650,8480, - -30790,11206,-30790,11206,-30790,11206,-30790,11206, - -29696,13847,-29696,13847,-29696,13847,-29696,13847, - -28377,16383,-28377,16383,-28377,16383,-28377,16383, - -26841,18794,-26841,18794,-26841,18794,-26841,18794, - -25100,21062,-25100,21062,-25100,21062,-25100,21062, - -23169,23169,-23169,23169,-23169,23169,-23169,23169, - -21062,25100,-21062,25100,-21062,25100,-21062,25100, - -18794,26841,-18794,26841,-18794,26841,-18794,26841 - }; +static int16_t twa144[376]__attribute__((aligned(32))); +static int16_t twb144[376]__attribute__((aligned(32))); void dft144(int16_t *x,int16_t *y,unsigned char scale_flag) { - int i,j; simd_q15_t *x128=(simd_q15_t *)x; simd_q15_t *y128=(simd_q15_t *)y; @@ -7618,127 +7186,8 @@ void dft144(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t twa180[472]__attribute__((aligned(32))) = {32747,-1143,32747,-1143,32747,-1143,32747,-1143, - 32687,-2285,32687,-2285,32687,-2285,32687,-2285, - 32587,-3425,32587,-3425,32587,-3425,32587,-3425, - 32448,-4560,32448,-4560,32448,-4560,32448,-4560, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 31793,-7927,31793,-7927,31793,-7927,31793,-7927, - 31497,-9031,31497,-9031,31497,-9031,31497,-9031, - 31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 30381,-12274,30381,-12274,30381,-12274,30381,-12274, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 29450,-14364,29450,-14364,29450,-14364,29450,-14364, - 28931,-15383,28931,-15383,28931,-15383,28931,-15383, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27787,-17363,27787,-17363,27787,-17363,27787,-17363, - 27165,-18323,27165,-18323,27165,-18323,27165,-18323, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 25820,-20173,25820,-20173,25820,-20173,25820,-20173, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 24350,-21925,24350,-21925,24350,-21925,24350,-21925, - 23570,-22761,23570,-22761,23570,-22761,23570,-22761, - 22761,-23570,22761,-23570,22761,-23570,22761,-23570, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 20173,-25820,20173,-25820,20173,-25820,20173,-25820, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 18323,-27165,18323,-27165,18323,-27165,18323,-27165, - 17363,-27787,17363,-27787,17363,-27787,17363,-27787, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15383,-28931,15383,-28931,15383,-28931,15383,-28931, - 14364,-29450,14364,-29450,14364,-29450,14364,-29450, - 13327,-29934,13327,-29934,13327,-29934,13327,-29934, - 12274,-30381,12274,-30381,12274,-30381,12274,-30381, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 9031,-31497,9031,-31497,9031,-31497,9031,-31497, - 7927,-31793,7927,-31793,7927,-31793,7927,-31793, - 6812,-32050,6812,-32050,6812,-32050,6812,-32050, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 4560,-32448,4560,-32448,4560,-32448,4560,-32448, - 3425,-32587,3425,-32587,3425,-32587,3425,-32587, - 2285,-32687,2285,-32687,2285,-32687,2285,-32687, - 1143,-32747,1143,-32747,1143,-32747,1143,-32747, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1143,-32747,-1143,-32747,-1143,-32747,-1143,-32747, - -2285,-32687,-2285,-32687,-2285,-32687,-2285,-32687, - -3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587, - -4560,-32448,-4560,-32448,-4560,-32448,-4560,-32448, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -6812,-32050,-6812,-32050,-6812,-32050,-6812,-32050, - -7927,-31793,-7927,-31793,-7927,-31793,-7927,-31793, - -9031,-31497,-9031,-31497,-9031,-31497,-9031,-31497, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -12274,-30381,-12274,-30381,-12274,-30381,-12274,-30381, - -13327,-29934,-13327,-29934,-13327,-29934,-13327,-29934, - -14364,-29450,-14364,-29450,-14364,-29450,-14364,-29450, - -15383,-28931,-15383,-28931,-15383,-28931,-15383,-28931 - }; - -static int16_t twb180[472]__attribute__((aligned(32))) = {32687,-2285,32687,-2285,32687,-2285,32687,-2285, - 32448,-4560,32448,-4560,32448,-4560,32448,-4560, - 32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 31497,-9031,31497,-9031,31497,-9031,31497,-9031, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 28931,-15383,28931,-15383,28931,-15383,28931,-15383, - 27787,-17363,27787,-17363,27787,-17363,27787,-17363, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 23570,-22761,23570,-22761,23570,-22761,23570,-22761, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 20173,-25820,20173,-25820,20173,-25820,20173,-25820, - 18323,-27165,18323,-27165,18323,-27165,18323,-27165, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 14364,-29450,14364,-29450,14364,-29450,14364,-29450, - 12274,-30381,12274,-30381,12274,-30381,12274,-30381, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 7927,-31793,7927,-31793,7927,-31793,7927,-31793, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 3425,-32587,3425,-32587,3425,-32587,3425,-32587, - 1143,-32747,1143,-32747,1143,-32747,1143,-32747, - -1143,-32747,-1143,-32747,-1143,-32747,-1143,-32747, - -3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -7927,-31793,-7927,-31793,-7927,-31793,-7927,-31793, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -12274,-30381,-12274,-30381,-12274,-30381,-12274,-30381, - -14364,-29450,-14364,-29450,-14364,-29450,-14364,-29450, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -18323,-27165,-18323,-27165,-18323,-27165,-18323,-27165, - -20173,-25820,-20173,-25820,-20173,-25820,-20173,-25820, - -21925,-24350,-21925,-24350,-21925,-24350,-21925,-24350, - -23570,-22761,-23570,-22761,-23570,-22761,-23570,-22761, - -25100,-21062,-25100,-21062,-25100,-21062,-25100,-21062, - -26509,-19259,-26509,-19259,-26509,-19259,-26509,-19259, - -27787,-17363,-27787,-17363,-27787,-17363,-27787,-17363, - -28931,-15383,-28931,-15383,-28931,-15383,-28931,-15383, - -29934,-13327,-29934,-13327,-29934,-13327,-29934,-13327, - -30790,-11206,-30790,-11206,-30790,-11206,-30790,-11206, - -31497,-9031,-31497,-9031,-31497,-9031,-31497,-9031, - -32050,-6812,-32050,-6812,-32050,-6812,-32050,-6812, - -32448,-4560,-32448,-4560,-32448,-4560,-32448,-4560, - -32687,-2285,-32687,-2285,-32687,-2285,-32687,-2285, - -32767,0,-32767,0,-32767,0,-32767,0, - -32687,2285,-32687,2285,-32687,2285,-32687,2285, - -32448,4560,-32448,4560,-32448,4560,-32448,4560, - -32050,6812,-32050,6812,-32050,6812,-32050,6812, - -31497,9031,-31497,9031,-31497,9031,-31497,9031, - -30790,11206,-30790,11206,-30790,11206,-30790,11206, - -29934,13327,-29934,13327,-29934,13327,-29934,13327, - -28931,15383,-28931,15383,-28931,15383,-28931,15383, - -27787,17363,-27787,17363,-27787,17363,-27787,17363, - -26509,19259,-26509,19259,-26509,19259,-26509,19259, - -25100,21062,-25100,21062,-25100,21062,-25100,21062, - -23570,22761,-23570,22761,-23570,22761,-23570,22761, - -21925,24350,-21925,24350,-21925,24350,-21925,24350, - -20173,25820,-20173,25820,-20173,25820,-20173,25820, - -18323,27165,-18323,27165,-18323,27165,-18323,27165 - }; +static int16_t twa180[472]__attribute__((aligned(32))); +static int16_t twb180[472]__attribute__((aligned(32))); void dft180(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -7789,152 +7238,9 @@ void dft180(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t twa192[376]__attribute__((aligned(32))) = {32749,-1072,32749,-1072,32749,-1072,32749,-1072, - 32696,-2143,32696,-2143,32696,-2143,32696,-2143, - 32609,-3211,32609,-3211,32609,-3211,32609,-3211, - 32486,-4276,32486,-4276,32486,-4276,32486,-4276, - 32329,-5337,32329,-5337,32329,-5337,32329,-5337, - 32137,-6392,32137,-6392,32137,-6392,32137,-6392, - 31911,-7440,31911,-7440,31911,-7440,31911,-7440, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31356,-9511,31356,-9511,31356,-9511,31356,-9511, - 31028,-10532,31028,-10532,31028,-10532,31028,-10532, - 30666,-11542,30666,-11542,30666,-11542,30666,-11542, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 29846,-13523,29846,-13523,29846,-13523,29846,-13523, - 29387,-14492,29387,-14492,29387,-14492,29387,-14492, - 28897,-15446,28897,-15446,28897,-15446,28897,-15446, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27825,-17303,27825,-17303,27825,-17303,27825,-17303, - 27244,-18204,27244,-18204,27244,-18204,27244,-18204, - 26634,-19086,26634,-19086,26634,-19086,26634,-19086, - 25995,-19947,25995,-19947,25995,-19947,25995,-19947, - 25329,-20787,25329,-20787,25329,-20787,25329,-20787, - 24635,-21604,24635,-21604,24635,-21604,24635,-21604, - 23915,-22399,23915,-22399,23915,-22399,23915,-22399, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 22399,-23915,22399,-23915,22399,-23915,22399,-23915, - 21604,-24635,21604,-24635,21604,-24635,21604,-24635, - 20787,-25329,20787,-25329,20787,-25329,20787,-25329, - 19947,-25995,19947,-25995,19947,-25995,19947,-25995, - 19086,-26634,19086,-26634,19086,-26634,19086,-26634, - 18204,-27244,18204,-27244,18204,-27244,18204,-27244, - 17303,-27825,17303,-27825,17303,-27825,17303,-27825, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15446,-28897,15446,-28897,15446,-28897,15446,-28897, - 14492,-29387,14492,-29387,14492,-29387,14492,-29387, - 13523,-29846,13523,-29846,13523,-29846,13523,-29846, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 11542,-30666,11542,-30666,11542,-30666,11542,-30666, - 10532,-31028,10532,-31028,10532,-31028,10532,-31028, - 9511,-31356,9511,-31356,9511,-31356,9511,-31356, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 7440,-31911,7440,-31911,7440,-31911,7440,-31911, - 6392,-32137,6392,-32137,6392,-32137,6392,-32137, - 5337,-32329,5337,-32329,5337,-32329,5337,-32329, - 4276,-32486,4276,-32486,4276,-32486,4276,-32486, - 3211,-32609,3211,-32609,3211,-32609,3211,-32609, - 2143,-32696,2143,-32696,2143,-32696,2143,-32696, - 1072,-32749,1072,-32749,1072,-32749,1072,-32749 - }; - -static int16_t twb192[376]__attribute__((aligned(32))) = {32696,-2143,32696,-2143,32696,-2143,32696,-2143, - 32486,-4276,32486,-4276,32486,-4276,32486,-4276, - 32137,-6392,32137,-6392,32137,-6392,32137,-6392, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31028,-10532,31028,-10532,31028,-10532,31028,-10532, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 29387,-14492,29387,-14492,29387,-14492,29387,-14492, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27244,-18204,27244,-18204,27244,-18204,27244,-18204, - 25995,-19947,25995,-19947,25995,-19947,25995,-19947, - 24635,-21604,24635,-21604,24635,-21604,24635,-21604, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 21604,-24635,21604,-24635,21604,-24635,21604,-24635, - 19947,-25995,19947,-25995,19947,-25995,19947,-25995, - 18204,-27244,18204,-27244,18204,-27244,18204,-27244, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 14492,-29387,14492,-29387,14492,-29387,14492,-29387, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 10532,-31028,10532,-31028,10532,-31028,10532,-31028, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 6392,-32137,6392,-32137,6392,-32137,6392,-32137, - 4276,-32486,4276,-32486,4276,-32486,4276,-32486, - 2143,-32696,2143,-32696,2143,-32696,2143,-32696, - 0,-32767,0,-32767,0,-32767,0,-32767, - -2143,-32696,-2143,-32696,-2143,-32696,-2143,-32696, - -4276,-32486,-4276,-32486,-4276,-32486,-4276,-32486, - -6392,-32137,-6392,-32137,-6392,-32137,-6392,-32137, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -10532,-31028,-10532,-31028,-10532,-31028,-10532,-31028, - -12539,-30272,-12539,-30272,-12539,-30272,-12539,-30272, - -14492,-29387,-14492,-29387,-14492,-29387,-14492,-29387, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -18204,-27244,-18204,-27244,-18204,-27244,-18204,-27244, - -19947,-25995,-19947,-25995,-19947,-25995,-19947,-25995, - -21604,-24635,-21604,-24635,-21604,-24635,-21604,-24635, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -24635,-21604,-24635,-21604,-24635,-21604,-24635,-21604, - -25995,-19947,-25995,-19947,-25995,-19947,-25995,-19947, - -27244,-18204,-27244,-18204,-27244,-18204,-27244,-18204, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -29387,-14492,-29387,-14492,-29387,-14492,-29387,-14492, - -30272,-12539,-30272,-12539,-30272,-12539,-30272,-12539, - -31028,-10532,-31028,-10532,-31028,-10532,-31028,-10532, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480, - -32137,-6392,-32137,-6392,-32137,-6392,-32137,-6392, - -32486,-4276,-32486,-4276,-32486,-4276,-32486,-4276, - -32696,-2143,-32696,-2143,-32696,-2143,-32696,-2143 - }; - -static int16_t twc192[376]__attribute__((aligned(32))) = {32609,-3211,32609,-3211,32609,-3211,32609,-3211, - 32137,-6392,32137,-6392,32137,-6392,32137,-6392, - 31356,-9511,31356,-9511,31356,-9511,31356,-9511, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 28897,-15446,28897,-15446,28897,-15446,28897,-15446, - 27244,-18204,27244,-18204,27244,-18204,27244,-18204, - 25329,-20787,25329,-20787,25329,-20787,25329,-20787, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 20787,-25329,20787,-25329,20787,-25329,20787,-25329, - 18204,-27244,18204,-27244,18204,-27244,18204,-27244, - 15446,-28897,15446,-28897,15446,-28897,15446,-28897, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 9511,-31356,9511,-31356,9511,-31356,9511,-31356, - 6392,-32137,6392,-32137,6392,-32137,6392,-32137, - 3211,-32609,3211,-32609,3211,-32609,3211,-32609, - 0,-32767,0,-32767,0,-32767,0,-32767, - -3211,-32609,-3211,-32609,-3211,-32609,-3211,-32609, - -6392,-32137,-6392,-32137,-6392,-32137,-6392,-32137, - -9511,-31356,-9511,-31356,-9511,-31356,-9511,-31356, - -12539,-30272,-12539,-30272,-12539,-30272,-12539,-30272, - -15446,-28897,-15446,-28897,-15446,-28897,-15446,-28897, - -18204,-27244,-18204,-27244,-18204,-27244,-18204,-27244, - -20787,-25329,-20787,-25329,-20787,-25329,-20787,-25329, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -25329,-20787,-25329,-20787,-25329,-20787,-25329,-20787, - -27244,-18204,-27244,-18204,-27244,-18204,-27244,-18204, - -28897,-15446,-28897,-15446,-28897,-15446,-28897,-15446, - -30272,-12539,-30272,-12539,-30272,-12539,-30272,-12539, - -31356,-9511,-31356,-9511,-31356,-9511,-31356,-9511, - -32137,-6392,-32137,-6392,-32137,-6392,-32137,-6392, - -32609,-3211,-32609,-3211,-32609,-3211,-32609,-3211, - -32767,0,-32767,0,-32767,0,-32767,0, - -32609,3211,-32609,3211,-32609,3211,-32609,3211, - -32137,6392,-32137,6392,-32137,6392,-32137,6392, - -31356,9511,-31356,9511,-31356,9511,-31356,9511, - -30272,12539,-30272,12539,-30272,12539,-30272,12539, - -28897,15446,-28897,15446,-28897,15446,-28897,15446, - -27244,18204,-27244,18204,-27244,18204,-27244,18204, - -25329,20787,-25329,20787,-25329,20787,-25329,20787, - -23169,23169,-23169,23169,-23169,23169,-23169,23169, - -20787,25329,-20787,25329,-20787,25329,-20787,25329, - -18204,27244,-18204,27244,-18204,27244,-18204,27244, - -15446,28897,-15446,28897,-15446,28897,-15446,28897, - -12539,30272,-12539,30272,-12539,30272,-12539,30272, - -9511,31356,-9511,31356,-9511,31356,-9511,31356, - -6392,32137,-6392,32137,-6392,32137,-6392,32137, - -3211,32609,-3211,32609,-3211,32609,-3211,32609 - }; +static int16_t twa192[376]__attribute__((aligned(32))); +static int16_t twb192[376]__attribute__((aligned(32))); +static int16_t twc192[376]__attribute__((aligned(32))); void dft192(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -7991,151 +7297,8 @@ void dft192(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t twa216[568]__attribute__((aligned(32))) = {32753,-953,32753,-953,32753,-953,32753,-953, - 32711,-1905,32711,-1905,32711,-1905,32711,-1905, - 32642,-2855,32642,-2855,32642,-2855,32642,-2855, - 32545,-3804,32545,-3804,32545,-3804,32545,-3804, - 32421,-4748,32421,-4748,32421,-4748,32421,-4748, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 32090,-6626,32090,-6626,32090,-6626,32090,-6626, - 31883,-7556,31883,-7556,31883,-7556,31883,-7556, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31390,-9397,31390,-9397,31390,-9397,31390,-9397, - 31103,-10306,31103,-10306,31103,-10306,31103,-10306, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 30451,-12097,30451,-12097,30451,-12097,30451,-12097, - 30087,-12978,30087,-12978,30087,-12978,30087,-12978, - 29696,-13847,29696,-13847,29696,-13847,29696,-13847, - 29281,-14705,29281,-14705,29281,-14705,29281,-14705, - 28841,-15551,28841,-15551,28841,-15551,28841,-15551, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27888,-17201,27888,-17201,27888,-17201,27888,-17201, - 27376,-18005,27376,-18005,27376,-18005,27376,-18005, - 26841,-18794,26841,-18794,26841,-18794,26841,-18794, - 26283,-19567,26283,-19567,26283,-19567,26283,-19567, - 25702,-20323,25702,-20323,25702,-20323,25702,-20323, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 24477,-21783,24477,-21783,24477,-21783,24477,-21783, - 23833,-22486,23833,-22486,23833,-22486,23833,-22486, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 22486,-23833,22486,-23833,22486,-23833,22486,-23833, - 21783,-24477,21783,-24477,21783,-24477,21783,-24477, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 20323,-25702,20323,-25702,20323,-25702,20323,-25702, - 19567,-26283,19567,-26283,19567,-26283,19567,-26283, - 18794,-26841,18794,-26841,18794,-26841,18794,-26841, - 18005,-27376,18005,-27376,18005,-27376,18005,-27376, - 17201,-27888,17201,-27888,17201,-27888,17201,-27888, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15551,-28841,15551,-28841,15551,-28841,15551,-28841, - 14705,-29281,14705,-29281,14705,-29281,14705,-29281, - 13847,-29696,13847,-29696,13847,-29696,13847,-29696, - 12978,-30087,12978,-30087,12978,-30087,12978,-30087, - 12097,-30451,12097,-30451,12097,-30451,12097,-30451, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 10306,-31103,10306,-31103,10306,-31103,10306,-31103, - 9397,-31390,9397,-31390,9397,-31390,9397,-31390, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 7556,-31883,7556,-31883,7556,-31883,7556,-31883, - 6626,-32090,6626,-32090,6626,-32090,6626,-32090, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 4748,-32421,4748,-32421,4748,-32421,4748,-32421, - 3804,-32545,3804,-32545,3804,-32545,3804,-32545, - 2855,-32642,2855,-32642,2855,-32642,2855,-32642, - 1905,-32711,1905,-32711,1905,-32711,1905,-32711, - 953,-32753,953,-32753,953,-32753,953,-32753, - 0,-32767,0,-32767,0,-32767,0,-32767, - -953,-32753,-953,-32753,-953,-32753,-953,-32753, - -1905,-32711,-1905,-32711,-1905,-32711,-1905,-32711, - -2855,-32642,-2855,-32642,-2855,-32642,-2855,-32642, - -3804,-32545,-3804,-32545,-3804,-32545,-3804,-32545, - -4748,-32421,-4748,-32421,-4748,-32421,-4748,-32421, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -6626,-32090,-6626,-32090,-6626,-32090,-6626,-32090, - -7556,-31883,-7556,-31883,-7556,-31883,-7556,-31883, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -9397,-31390,-9397,-31390,-9397,-31390,-9397,-31390, - -10306,-31103,-10306,-31103,-10306,-31103,-10306,-31103, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -12097,-30451,-12097,-30451,-12097,-30451,-12097,-30451, - -12978,-30087,-12978,-30087,-12978,-30087,-12978,-30087, - -13847,-29696,-13847,-29696,-13847,-29696,-13847,-29696, - -14705,-29281,-14705,-29281,-14705,-29281,-14705,-29281, - -15551,-28841,-15551,-28841,-15551,-28841,-15551,-28841 - }; - -static int16_t twb216[568]__attribute__((aligned(32))) = {32711,-1905,32711,-1905,32711,-1905,32711,-1905, - 32545,-3804,32545,-3804,32545,-3804,32545,-3804, - 32269,-5689,32269,-5689,32269,-5689,32269,-5689, - 31883,-7556,31883,-7556,31883,-7556,31883,-7556, - 31390,-9397,31390,-9397,31390,-9397,31390,-9397, - 30790,-11206,30790,-11206,30790,-11206,30790,-11206, - 30087,-12978,30087,-12978,30087,-12978,30087,-12978, - 29281,-14705,29281,-14705,29281,-14705,29281,-14705, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27376,-18005,27376,-18005,27376,-18005,27376,-18005, - 26283,-19567,26283,-19567,26283,-19567,26283,-19567, - 25100,-21062,25100,-21062,25100,-21062,25100,-21062, - 23833,-22486,23833,-22486,23833,-22486,23833,-22486, - 22486,-23833,22486,-23833,22486,-23833,22486,-23833, - 21062,-25100,21062,-25100,21062,-25100,21062,-25100, - 19567,-26283,19567,-26283,19567,-26283,19567,-26283, - 18005,-27376,18005,-27376,18005,-27376,18005,-27376, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 14705,-29281,14705,-29281,14705,-29281,14705,-29281, - 12978,-30087,12978,-30087,12978,-30087,12978,-30087, - 11206,-30790,11206,-30790,11206,-30790,11206,-30790, - 9397,-31390,9397,-31390,9397,-31390,9397,-31390, - 7556,-31883,7556,-31883,7556,-31883,7556,-31883, - 5689,-32269,5689,-32269,5689,-32269,5689,-32269, - 3804,-32545,3804,-32545,3804,-32545,3804,-32545, - 1905,-32711,1905,-32711,1905,-32711,1905,-32711, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1905,-32711,-1905,-32711,-1905,-32711,-1905,-32711, - -3804,-32545,-3804,-32545,-3804,-32545,-3804,-32545, - -5689,-32269,-5689,-32269,-5689,-32269,-5689,-32269, - -7556,-31883,-7556,-31883,-7556,-31883,-7556,-31883, - -9397,-31390,-9397,-31390,-9397,-31390,-9397,-31390, - -11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790, - -12978,-30087,-12978,-30087,-12978,-30087,-12978,-30087, - -14705,-29281,-14705,-29281,-14705,-29281,-14705,-29281, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -18005,-27376,-18005,-27376,-18005,-27376,-18005,-27376, - -19567,-26283,-19567,-26283,-19567,-26283,-19567,-26283, - -21062,-25100,-21062,-25100,-21062,-25100,-21062,-25100, - -22486,-23833,-22486,-23833,-22486,-23833,-22486,-23833, - -23833,-22486,-23833,-22486,-23833,-22486,-23833,-22486, - -25100,-21062,-25100,-21062,-25100,-21062,-25100,-21062, - -26283,-19567,-26283,-19567,-26283,-19567,-26283,-19567, - -27376,-18005,-27376,-18005,-27376,-18005,-27376,-18005, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -29281,-14705,-29281,-14705,-29281,-14705,-29281,-14705, - -30087,-12978,-30087,-12978,-30087,-12978,-30087,-12978, - -30790,-11206,-30790,-11206,-30790,-11206,-30790,-11206, - -31390,-9397,-31390,-9397,-31390,-9397,-31390,-9397, - -31883,-7556,-31883,-7556,-31883,-7556,-31883,-7556, - -32269,-5689,-32269,-5689,-32269,-5689,-32269,-5689, - -32545,-3804,-32545,-3804,-32545,-3804,-32545,-3804, - -32711,-1905,-32711,-1905,-32711,-1905,-32711,-1905, - -32767,0,-32767,0,-32767,0,-32767,0, - -32711,1905,-32711,1905,-32711,1905,-32711,1905, - -32545,3804,-32545,3804,-32545,3804,-32545,3804, - -32269,5689,-32269,5689,-32269,5689,-32269,5689, - -31883,7556,-31883,7556,-31883,7556,-31883,7556, - -31390,9397,-31390,9397,-31390,9397,-31390,9397, - -30790,11206,-30790,11206,-30790,11206,-30790,11206, - -30087,12978,-30087,12978,-30087,12978,-30087,12978, - -29281,14705,-29281,14705,-29281,14705,-29281,14705, - -28377,16383,-28377,16383,-28377,16383,-28377,16383, - -27376,18005,-27376,18005,-27376,18005,-27376,18005, - -26283,19567,-26283,19567,-26283,19567,-26283,19567, - -25100,21062,-25100,21062,-25100,21062,-25100,21062, - -23833,22486,-23833,22486,-23833,22486,-23833,22486, - -22486,23833,-22486,23833,-22486,23833,-22486,23833, - -21062,25100,-21062,25100,-21062,25100,-21062,25100, - -19567,26283,-19567,26283,-19567,26283,-19567,26283, - -18005,27376,-18005,27376,-18005,27376,-18005,27376 - }; +static int16_t twa216[568]__attribute__((aligned(32))); +static int16_t twb216[568]__attribute__((aligned(32))); void dft216(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -8186,188 +7349,9 @@ void dft216(int16_t *x,int16_t *y,unsigned char scale_flag) } -static int16_t twa240[472]__attribute__((aligned(32))) = {32755,-857,32755,-857,32755,-857,32755,-857, - 32722,-1714,32722,-1714,32722,-1714,32722,-1714, - 32665,-2570,32665,-2570,32665,-2570,32665,-2570, - 32587,-3425,32587,-3425,32587,-3425,32587,-3425, - 32486,-4276,32486,-4276,32486,-4276,32486,-4276, - 32363,-5125,32363,-5125,32363,-5125,32363,-5125, - 32218,-5971,32218,-5971,32218,-5971,32218,-5971, - 32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 31861,-7649,31861,-7649,31861,-7649,31861,-7649, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31417,-9306,31417,-9306,31417,-9306,31417,-9306, - 31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 30887,-10937,30887,-10937,30887,-10937,30887,-10937, - 30590,-11742,30590,-11742,30590,-11742,30590,-11742, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 29575,-14106,29575,-14106,29575,-14106,29575,-14106, - 29195,-14875,29195,-14875,29195,-14875,29195,-14875, - 28796,-15635,28796,-15635,28796,-15635,28796,-15635, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27938,-17120,27938,-17120,27938,-17120,27938,-17120, - 27480,-17846,27480,-17846,27480,-17846,27480,-17846, - 27004,-18559,27004,-18559,27004,-18559,27004,-18559, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 25995,-19947,25995,-19947,25995,-19947,25995,-19947, - 25464,-20620,25464,-20620,25464,-20620,25464,-20620, - 24916,-21280,24916,-21280,24916,-21280,24916,-21280, - 24350,-21925,24350,-21925,24350,-21925,24350,-21925, - 23768,-22555,23768,-22555,23768,-22555,23768,-22555, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 22555,-23768,22555,-23768,22555,-23768,22555,-23768, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 21280,-24916,21280,-24916,21280,-24916,21280,-24916, - 20620,-25464,20620,-25464,20620,-25464,20620,-25464, - 19947,-25995,19947,-25995,19947,-25995,19947,-25995, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 18559,-27004,18559,-27004,18559,-27004,18559,-27004, - 17846,-27480,17846,-27480,17846,-27480,17846,-27480, - 17120,-27938,17120,-27938,17120,-27938,17120,-27938, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 15635,-28796,15635,-28796,15635,-28796,15635,-28796, - 14875,-29195,14875,-29195,14875,-29195,14875,-29195, - 14106,-29575,14106,-29575,14106,-29575,14106,-29575, - 13327,-29934,13327,-29934,13327,-29934,13327,-29934, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 11742,-30590,11742,-30590,11742,-30590,11742,-30590, - 10937,-30887,10937,-30887,10937,-30887,10937,-30887, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 9306,-31417,9306,-31417,9306,-31417,9306,-31417, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 7649,-31861,7649,-31861,7649,-31861,7649,-31861, - 6812,-32050,6812,-32050,6812,-32050,6812,-32050, - 5971,-32218,5971,-32218,5971,-32218,5971,-32218, - 5125,-32363,5125,-32363,5125,-32363,5125,-32363, - 4276,-32486,4276,-32486,4276,-32486,4276,-32486, - 3425,-32587,3425,-32587,3425,-32587,3425,-32587, - 2570,-32665,2570,-32665,2570,-32665,2570,-32665, - 1714,-32722,1714,-32722,1714,-32722,1714,-32722, - 857,-32755,857,-32755,857,-32755,857,-32755 - }; - -static int16_t twb240[472]__attribute__((aligned(32))) = {32722,-1714,32722,-1714,32722,-1714,32722,-1714, - 32587,-3425,32587,-3425,32587,-3425,32587,-3425, - 32363,-5125,32363,-5125,32363,-5125,32363,-5125, - 32050,-6812,32050,-6812,32050,-6812,32050,-6812, - 31650,-8480,31650,-8480,31650,-8480,31650,-8480, - 31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 30590,-11742,30590,-11742,30590,-11742,30590,-11742, - 29934,-13327,29934,-13327,29934,-13327,29934,-13327, - 29195,-14875,29195,-14875,29195,-14875,29195,-14875, - 28377,-16383,28377,-16383,28377,-16383,28377,-16383, - 27480,-17846,27480,-17846,27480,-17846,27480,-17846, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 25464,-20620,25464,-20620,25464,-20620,25464,-20620, - 24350,-21925,24350,-21925,24350,-21925,24350,-21925, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 21925,-24350,21925,-24350,21925,-24350,21925,-24350, - 20620,-25464,20620,-25464,20620,-25464,20620,-25464, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 17846,-27480,17846,-27480,17846,-27480,17846,-27480, - 16383,-28377,16383,-28377,16383,-28377,16383,-28377, - 14875,-29195,14875,-29195,14875,-29195,14875,-29195, - 13327,-29934,13327,-29934,13327,-29934,13327,-29934, - 11742,-30590,11742,-30590,11742,-30590,11742,-30590, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 8480,-31650,8480,-31650,8480,-31650,8480,-31650, - 6812,-32050,6812,-32050,6812,-32050,6812,-32050, - 5125,-32363,5125,-32363,5125,-32363,5125,-32363, - 3425,-32587,3425,-32587,3425,-32587,3425,-32587, - 1714,-32722,1714,-32722,1714,-32722,1714,-32722, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1714,-32722,-1714,-32722,-1714,-32722,-1714,-32722, - -3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587, - -5125,-32363,-5125,-32363,-5125,-32363,-5125,-32363, - -6812,-32050,-6812,-32050,-6812,-32050,-6812,-32050, - -8480,-31650,-8480,-31650,-8480,-31650,-8480,-31650, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -11742,-30590,-11742,-30590,-11742,-30590,-11742,-30590, - -13327,-29934,-13327,-29934,-13327,-29934,-13327,-29934, - -14875,-29195,-14875,-29195,-14875,-29195,-14875,-29195, - -16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377, - -17846,-27480,-17846,-27480,-17846,-27480,-17846,-27480, - -19259,-26509,-19259,-26509,-19259,-26509,-19259,-26509, - -20620,-25464,-20620,-25464,-20620,-25464,-20620,-25464, - -21925,-24350,-21925,-24350,-21925,-24350,-21925,-24350, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -24350,-21925,-24350,-21925,-24350,-21925,-24350,-21925, - -25464,-20620,-25464,-20620,-25464,-20620,-25464,-20620, - -26509,-19259,-26509,-19259,-26509,-19259,-26509,-19259, - -27480,-17846,-27480,-17846,-27480,-17846,-27480,-17846, - -28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383, - -29195,-14875,-29195,-14875,-29195,-14875,-29195,-14875, - -29934,-13327,-29934,-13327,-29934,-13327,-29934,-13327, - -30590,-11742,-30590,-11742,-30590,-11742,-30590,-11742, - -31163,-10125,-31163,-10125,-31163,-10125,-31163,-10125, - -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480, - -32050,-6812,-32050,-6812,-32050,-6812,-32050,-6812, - -32363,-5125,-32363,-5125,-32363,-5125,-32363,-5125, - -32587,-3425,-32587,-3425,-32587,-3425,-32587,-3425, - -32722,-1714,-32722,-1714,-32722,-1714,-32722,-1714 - }; - -static int16_t twc240[472]__attribute__((aligned(32))) = {32665,-2570,32665,-2570,32665,-2570,32665,-2570, - 32363,-5125,32363,-5125,32363,-5125,32363,-5125, - 31861,-7649,31861,-7649,31861,-7649,31861,-7649, - 31163,-10125,31163,-10125,31163,-10125,31163,-10125, - 30272,-12539,30272,-12539,30272,-12539,30272,-12539, - 29195,-14875,29195,-14875,29195,-14875,29195,-14875, - 27938,-17120,27938,-17120,27938,-17120,27938,-17120, - 26509,-19259,26509,-19259,26509,-19259,26509,-19259, - 24916,-21280,24916,-21280,24916,-21280,24916,-21280, - 23169,-23169,23169,-23169,23169,-23169,23169,-23169, - 21280,-24916,21280,-24916,21280,-24916,21280,-24916, - 19259,-26509,19259,-26509,19259,-26509,19259,-26509, - 17120,-27938,17120,-27938,17120,-27938,17120,-27938, - 14875,-29195,14875,-29195,14875,-29195,14875,-29195, - 12539,-30272,12539,-30272,12539,-30272,12539,-30272, - 10125,-31163,10125,-31163,10125,-31163,10125,-31163, - 7649,-31861,7649,-31861,7649,-31861,7649,-31861, - 5125,-32363,5125,-32363,5125,-32363,5125,-32363, - 2570,-32665,2570,-32665,2570,-32665,2570,-32665, - 0,-32767,0,-32767,0,-32767,0,-32767, - -2570,-32665,-2570,-32665,-2570,-32665,-2570,-32665, - -5125,-32363,-5125,-32363,-5125,-32363,-5125,-32363, - -7649,-31861,-7649,-31861,-7649,-31861,-7649,-31861, - -10125,-31163,-10125,-31163,-10125,-31163,-10125,-31163, - -12539,-30272,-12539,-30272,-12539,-30272,-12539,-30272, - -14875,-29195,-14875,-29195,-14875,-29195,-14875,-29195, - -17120,-27938,-17120,-27938,-17120,-27938,-17120,-27938, - -19259,-26509,-19259,-26509,-19259,-26509,-19259,-26509, - -21280,-24916,-21280,-24916,-21280,-24916,-21280,-24916, - -23169,-23169,-23169,-23169,-23169,-23169,-23169,-23169, - -24916,-21280,-24916,-21280,-24916,-21280,-24916,-21280, - -26509,-19259,-26509,-19259,-26509,-19259,-26509,-19259, - -27938,-17120,-27938,-17120,-27938,-17120,-27938,-17120, - -29195,-14875,-29195,-14875,-29195,-14875,-29195,-14875, - -30272,-12539,-30272,-12539,-30272,-12539,-30272,-12539, - -31163,-10125,-31163,-10125,-31163,-10125,-31163,-10125, - -31861,-7649,-31861,-7649,-31861,-7649,-31861,-7649, - -32363,-5125,-32363,-5125,-32363,-5125,-32363,-5125, - -32665,-2570,-32665,-2570,-32665,-2570,-32665,-2570, - -32767,0,-32767,0,-32767,0,-32767,0, - -32665,2570,-32665,2570,-32665,2570,-32665,2570, - -32363,5125,-32363,5125,-32363,5125,-32363,5125, - -31861,7649,-31861,7649,-31861,7649,-31861,7649, - -31163,10125,-31163,10125,-31163,10125,-31163,10125, - -30272,12539,-30272,12539,-30272,12539,-30272,12539, - -29195,14875,-29195,14875,-29195,14875,-29195,14875, - -27938,17120,-27938,17120,-27938,17120,-27938,17120, - -26509,19259,-26509,19259,-26509,19259,-26509,19259, - -24916,21280,-24916,21280,-24916,21280,-24916,21280, - -23169,23169,-23169,23169,-23169,23169,-23169,23169, - -21280,24916,-21280,24916,-21280,24916,-21280,24916, - -19259,26509,-19259,26509,-19259,26509,-19259,26509, - -17120,27938,-17120,27938,-17120,27938,-17120,27938, - -14875,29195,-14875,29195,-14875,29195,-14875,29195, - -12539,30272,-12539,30272,-12539,30272,-12539,30272, - -10125,31163,-10125,31163,-10125,31163,-10125,31163, - -7649,31861,-7649,31861,-7649,31861,-7649,31861, - -5125,32363,-5125,32363,-5125,32363,-5125,32363, - -2570,32665,-2570,32665,-2570,32665,-2570,32665 - }; +static int16_t twa240[472]__attribute__((aligned(32))); +static int16_t twb240[472]__attribute__((aligned(32))); +static int16_t twc240[472]__attribute__((aligned(32))); void dft240(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -8644,294 +7628,9 @@ void dft360(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 3 }; -static int16_t twa384[95*2*4] = {32762,-537,32762,-537,32762,-537,32762,-537, - 32749,-1073,32749,-1073,32749,-1073,32749,-1073, - 32727,-1608,32727,-1608,32727,-1608,32727,-1608, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32657,-2678,32657,-2678,32657,-2678,32657,-2678, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32552,-3745,32552,-3745,32552,-3745,32552,-3745, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32412,-4808,32412,-4808,32412,-4808,32412,-4808, - 32329,-5338,32329,-5338,32329,-5338,32329,-5338, - 32237,-5866,32237,-5866,32237,-5866,32237,-5866, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32028,-6918,32028,-6918,32028,-6918,32028,-6918, - 31911,-7441,31911,-7441,31911,-7441,31911,-7441, - 31785,-7962,31785,-7962,31785,-7962,31785,-7962, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31507,-8998,31507,-8998,31507,-8998,31507,-8998, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 31196,-10024,31196,-10024,31196,-10024,31196,-10024, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30851,-11039,30851,-11039,30851,-11039,30851,-11039, - 30666,-11543,30666,-11543,30666,-11543,30666,-11543, - 30473,-12043,30473,-12043,30473,-12043,30473,-12043, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30063,-13034,30063,-13034,30063,-13034,30063,-13034, - 29846,-13524,29846,-13524,29846,-13524,29846,-13524, - 29621,-14010,29621,-14010,29621,-14010,29621,-14010, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29146,-14972,29146,-14972,29146,-14972,29146,-14972, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28641,-15918,28641,-15918,28641,-15918,28641,-15918, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28105,-16846,28105,-16846,28105,-16846,28105,-16846, - 27825,-17304,27825,-17304,27825,-17304,27825,-17304, - 27538,-17757,27538,-17757,27538,-17757,27538,-17757, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 26943,-18648,26943,-18648,26943,-18648,26943,-18648, - 26634,-19087,26634,-19087,26634,-19087,26634,-19087, - 26318,-19520,26318,-19520,26318,-19520,26318,-19520, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25665,-20370,25665,-20370,25665,-20370,25665,-20370, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 24985,-21199,24985,-21199,24985,-21199,24985,-21199, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24278,-22005,24278,-22005,24278,-22005,24278,-22005, - 23915,-22400,23915,-22400,23915,-22400,23915,-22400, - 23545,-22788,23545,-22788,23545,-22788,23545,-22788, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22787,-23546,22787,-23546,22787,-23546,22787,-23546, - 22399,-23916,22399,-23916,22399,-23916,22399,-23916, - 22004,-24279,22004,-24279,22004,-24279,22004,-24279, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21198,-24986,21198,-24986,21198,-24986,21198,-24986, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 20369,-25666,20369,-25666,20369,-25666,20369,-25666, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19519,-26319,19519,-26319,19519,-26319,19519,-26319, - 19086,-26635,19086,-26635,19086,-26635,19086,-26635, - 18647,-26944,18647,-26944,18647,-26944,18647,-26944, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17756,-27539,17756,-27539,17756,-27539,17756,-27539, - 17303,-27826,17303,-27826,17303,-27826,17303,-27826, - 16845,-28106,16845,-28106,16845,-28106,16845,-28106, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15917,-28642,15917,-28642,15917,-28642,15917,-28642, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 14971,-29147,14971,-29147,14971,-29147,14971,-29147, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14009,-29622,14009,-29622,14009,-29622,14009,-29622, - 13523,-29847,13523,-29847,13523,-29847,13523,-29847, - 13033,-30064,13033,-30064,13033,-30064,13033,-30064, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12042,-30474,12042,-30474,12042,-30474,12042,-30474, - 11542,-30667,11542,-30667,11542,-30667,11542,-30667, - 11038,-30852,11038,-30852,11038,-30852,11038,-30852, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10023,-31197,10023,-31197,10023,-31197,10023,-31197, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 8997,-31508,8997,-31508,8997,-31508,8997,-31508, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7961,-31786,7961,-31786,7961,-31786,7961,-31786, - 7440,-31912,7440,-31912,7440,-31912,7440,-31912, - 6917,-32029,6917,-32029,6917,-32029,6917,-32029, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 5865,-32238,5865,-32238,5865,-32238,5865,-32238, - 5337,-32330,5337,-32330,5337,-32330,5337,-32330, - 4807,-32413,4807,-32413,4807,-32413,4807,-32413, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3744,-32553,3744,-32553,3744,-32553,3744,-32553, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 2677,-32658,2677,-32658,2677,-32658,2677,-32658, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1607,-32728,1607,-32728,1607,-32728,1607,-32728, - 1072,-32750,1072,-32750,1072,-32750,1072,-32750, - 536,-32763,536,-32763,536,-32763,536,-32763 - }; -static int16_t twb384[95*2*4] = {32749,-1073,32749,-1073,32749,-1073,32749,-1073, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32329,-5338,32329,-5338,32329,-5338,32329,-5338, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 31911,-7441,31911,-7441,31911,-7441,31911,-7441, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30666,-11543,30666,-11543,30666,-11543,30666,-11543, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 29846,-13524,29846,-13524,29846,-13524,29846,-13524, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 27825,-17304,27825,-17304,27825,-17304,27825,-17304, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 26634,-19087,26634,-19087,26634,-19087,26634,-19087, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 23915,-22400,23915,-22400,23915,-22400,23915,-22400, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22399,-23916,22399,-23916,22399,-23916,22399,-23916, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19086,-26635,19086,-26635,19086,-26635,19086,-26635, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17303,-27826,17303,-27826,17303,-27826,17303,-27826, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 13523,-29847,13523,-29847,13523,-29847,13523,-29847, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 11542,-30667,11542,-30667,11542,-30667,11542,-30667, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7440,-31912,7440,-31912,7440,-31912,7440,-31912, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 5337,-32330,5337,-32330,5337,-32330,5337,-32330, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1072,-32750,1072,-32750,1072,-32750,1072,-32750, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1073,-32750,-1073,-32750,-1073,-32750,-1073,-32750, - -2144,-32697,-2144,-32697,-2144,-32697,-2144,-32697, - -3212,-32610,-3212,-32610,-3212,-32610,-3212,-32610, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -5338,-32330,-5338,-32330,-5338,-32330,-5338,-32330, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -7441,-31912,-7441,-31912,-7441,-31912,-7441,-31912, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -9512,-31357,-9512,-31357,-9512,-31357,-9512,-31357, - -10533,-31029,-10533,-31029,-10533,-31029,-10533,-31029, - -11543,-30667,-11543,-30667,-11543,-30667,-11543,-30667, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13524,-29847,-13524,-29847,-13524,-29847,-13524,-29847, - -14493,-29388,-14493,-29388,-14493,-29388,-14493,-29388, - -15447,-28898,-15447,-28898,-15447,-28898,-15447,-28898, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -17304,-27826,-17304,-27826,-17304,-27826,-17304,-27826, - -18205,-27245,-18205,-27245,-18205,-27245,-18205,-27245, - -19087,-26635,-19087,-26635,-19087,-26635,-19087,-26635, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -20788,-25330,-20788,-25330,-20788,-25330,-20788,-25330, - -21605,-24636,-21605,-24636,-21605,-24636,-21605,-24636, - -22400,-23916,-22400,-23916,-22400,-23916,-22400,-23916, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23916,-22400,-23916,-22400,-23916,-22400,-23916,-22400, - -24636,-21605,-24636,-21605,-24636,-21605,-24636,-21605, - -25330,-20788,-25330,-20788,-25330,-20788,-25330,-20788, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26635,-19087,-26635,-19087,-26635,-19087,-26635,-19087, - -27245,-18205,-27245,-18205,-27245,-18205,-27245,-18205, - -27826,-17304,-27826,-17304,-27826,-17304,-27826,-17304, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28898,-15447,-28898,-15447,-28898,-15447,-28898,-15447, - -29388,-14493,-29388,-14493,-29388,-14493,-29388,-14493, - -29847,-13524,-29847,-13524,-29847,-13524,-29847,-13524, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30667,-11543,-30667,-11543,-30667,-11543,-30667,-11543, - -31029,-10533,-31029,-10533,-31029,-10533,-31029,-10533, - -31357,-9512,-31357,-9512,-31357,-9512,-31357,-9512, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31912,-7441,-31912,-7441,-31912,-7441,-31912,-7441, - -32138,-6393,-32138,-6393,-32138,-6393,-32138,-6393, - -32330,-5338,-32330,-5338,-32330,-5338,-32330,-5338, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32610,-3212,-32610,-3212,-32610,-3212,-32610,-3212, - -32697,-2144,-32697,-2144,-32697,-2144,-32697,-2144, - -32750,-1073,-32750,-1073,-32750,-1073,-32750,-1073 - }; -static int16_t twc384[95*2*4] = {32727,-1608,32727,-1608,32727,-1608,32727,-1608, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32412,-4808,32412,-4808,32412,-4808,32412,-4808, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 31785,-7962,31785,-7962,31785,-7962,31785,-7962, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 30851,-11039,30851,-11039,30851,-11039,30851,-11039, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 29621,-14010,29621,-14010,29621,-14010,29621,-14010, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28105,-16846,28105,-16846,28105,-16846,28105,-16846, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 26318,-19520,26318,-19520,26318,-19520,26318,-19520, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 24278,-22005,24278,-22005,24278,-22005,24278,-22005, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22004,-24279,22004,-24279,22004,-24279,22004,-24279, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 19519,-26319,19519,-26319,19519,-26319,19519,-26319, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 16845,-28106,16845,-28106,16845,-28106,16845,-28106, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 14009,-29622,14009,-29622,14009,-29622,14009,-29622, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 11038,-30852,11038,-30852,11038,-30852,11038,-30852, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 7961,-31786,7961,-31786,7961,-31786,7961,-31786, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 4807,-32413,4807,-32413,4807,-32413,4807,-32413, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 1607,-32728,1607,-32728,1607,-32728,1607,-32728, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1608,-32728,-1608,-32728,-1608,-32728,-1608,-32728, - -3212,-32610,-3212,-32610,-3212,-32610,-3212,-32610, - -4808,-32413,-4808,-32413,-4808,-32413,-4808,-32413, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -7962,-31786,-7962,-31786,-7962,-31786,-7962,-31786, - -9512,-31357,-9512,-31357,-9512,-31357,-9512,-31357, - -11039,-30852,-11039,-30852,-11039,-30852,-11039,-30852, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -14010,-29622,-14010,-29622,-14010,-29622,-14010,-29622, - -15447,-28898,-15447,-28898,-15447,-28898,-15447,-28898, - -16846,-28106,-16846,-28106,-16846,-28106,-16846,-28106, - -18205,-27245,-18205,-27245,-18205,-27245,-18205,-27245, - -19520,-26319,-19520,-26319,-19520,-26319,-19520,-26319, - -20788,-25330,-20788,-25330,-20788,-25330,-20788,-25330, - -22005,-24279,-22005,-24279,-22005,-24279,-22005,-24279, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -24279,-22005,-24279,-22005,-24279,-22005,-24279,-22005, - -25330,-20788,-25330,-20788,-25330,-20788,-25330,-20788, - -26319,-19520,-26319,-19520,-26319,-19520,-26319,-19520, - -27245,-18205,-27245,-18205,-27245,-18205,-27245,-18205, - -28106,-16846,-28106,-16846,-28106,-16846,-28106,-16846, - -28898,-15447,-28898,-15447,-28898,-15447,-28898,-15447, - -29622,-14010,-29622,-14010,-29622,-14010,-29622,-14010, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30852,-11039,-30852,-11039,-30852,-11039,-30852,-11039, - -31357,-9512,-31357,-9512,-31357,-9512,-31357,-9512, - -31786,-7962,-31786,-7962,-31786,-7962,-31786,-7962, - -32138,-6393,-32138,-6393,-32138,-6393,-32138,-6393, - -32413,-4808,-32413,-4808,-32413,-4808,-32413,-4808, - -32610,-3212,-32610,-3212,-32610,-3212,-32610,-3212, - -32728,-1608,-32728,-1608,-32728,-1608,-32728,-1608, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32728,1607,-32728,1607,-32728,1607,-32728,1607, - -32610,3211,-32610,3211,-32610,3211,-32610,3211, - -32413,4807,-32413,4807,-32413,4807,-32413,4807, - -32138,6392,-32138,6392,-32138,6392,-32138,6392, - -31786,7961,-31786,7961,-31786,7961,-31786,7961, - -31357,9511,-31357,9511,-31357,9511,-31357,9511, - -30852,11038,-30852,11038,-30852,11038,-30852,11038, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -29622,14009,-29622,14009,-29622,14009,-29622,14009, - -28898,15446,-28898,15446,-28898,15446,-28898,15446, - -28106,16845,-28106,16845,-28106,16845,-28106,16845, - -27245,18204,-27245,18204,-27245,18204,-27245,18204, - -26319,19519,-26319,19519,-26319,19519,-26319,19519, - -25330,20787,-25330,20787,-25330,20787,-25330,20787, - -24279,22004,-24279,22004,-24279,22004,-24279,22004, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22005,24278,-22005,24278,-22005,24278,-22005,24278, - -20788,25329,-20788,25329,-20788,25329,-20788,25329, - -19520,26318,-19520,26318,-19520,26318,-19520,26318, - -18205,27244,-18205,27244,-18205,27244,-18205,27244, - -16846,28105,-16846,28105,-16846,28105,-16846,28105, - -15447,28897,-15447,28897,-15447,28897,-15447,28897, - -14010,29621,-14010,29621,-14010,29621,-14010,29621, - -12540,30272,-12540,30272,-12540,30272,-12540,30272, - -11039,30851,-11039,30851,-11039,30851,-11039,30851, - -9512,31356,-9512,31356,-9512,31356,-9512,31356, - -7962,31785,-7962,31785,-7962,31785,-7962,31785, - -6393,32137,-6393,32137,-6393,32137,-6393,32137, - -4808,32412,-4808,32412,-4808,32412,-4808,32412, - -3212,32609,-3212,32609,-3212,32609,-3212,32609, - -1608,32727,-1608,32727,-1608,32727,-1608,32727 - }; +static int16_t twa384[95*2*4]; +static int16_t twb384[95*2*4]; +static int16_t twc384[95*2*4]; void dft384(int16_t *x,int16_t *y,unsigned char scale_flag) // 96 x 4 { @@ -8987,366 +7686,9 @@ void dft384(int16_t *x,int16_t *y,unsigned char scale_flag) // 96 x 4 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:107)/432)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:107)/432)); -twc = floor(32767*exp(-sqrt(-1)*2*pi*3*(1:107)/432)); -twa2 = zeros(1,2*107); -twb2 = zeros(1,2*107); -twc2 = zeros(1,2*107); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -twc2(1:2:end) = real(twc); -twc2(2:2:end) = imag(twc); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa432[107*2*4] = {"); -for i=1:2:(2*106) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb432[107*2*4] = {"); -for i=1:2:(2*106) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fprintf(fd,"static int16_t twc432[107*2*4] = {"); -for i=1:2:(2*106) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -fclose(fd); - */ - -static int16_t twa432[107*2*4] = {32763,-477,32763,-477,32763,-477,32763,-477, - 32753,-954,32753,-954,32753,-954,32753,-954, - 32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32680,-2381,32680,-2381,32680,-2381,32680,-2381, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32597,-3331,32597,-3331,32597,-3331,32597,-3331, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32421,-4749,32421,-4749,32421,-4749,32421,-4749, - 32348,-5221,32348,-5221,32348,-5221,32348,-5221, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32183,-6159,32183,-6159,32183,-6159,32183,-6159, - 32090,-6627,32090,-6627,32090,-6627,32090,-6627, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31770,-8020,31770,-8020,31770,-8020,31770,-8020, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31523,-8941,31523,-8941,31523,-8941,31523,-8941, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 31103,-10307,31103,-10307,31103,-10307,31103,-10307, - 30950,-10758,30950,-10758,30950,-10758,30950,-10758, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30624,-11654,30624,-11654,30624,-11654,30624,-11654, - 30451,-12098,30451,-12098,30451,-12098,30451,-12098, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29895,-13415,29895,-13415,29895,-13415,29895,-13415, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29492,-14279,29492,-14279,29492,-14279,29492,-14279, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28841,-15552,28841,-15552,28841,-15552,28841,-15552, - 28612,-15970,28612,-15970,28612,-15970,28612,-15970, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28135,-16795,28135,-16795,28135,-16795,28135,-16795, - 27888,-17202,27888,-17202,27888,-17202,27888,-17202, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27111,-18403,27111,-18403,27111,-18403,27111,-18403, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26564,-19183,26564,-19183,26564,-19183,26564,-19183, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25702,-20324,25702,-20324,25702,-20324,25702,-20324, - 25404,-20695,25404,-20695,25404,-20695,25404,-20695, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24791,-21426,24791,-21426,24791,-21426,24791,-21426, - 24477,-21784,24477,-21784,24477,-21784,24477,-21784, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23504,-22831,23504,-22831,23504,-22831,23504,-22831, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22830,-23505,22830,-23505,22830,-23505,22830,-23505, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 21783,-24478,21783,-24478,21783,-24478,21783,-24478, - 21425,-24792,21425,-24792,21425,-24792,21425,-24792, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20694,-25405,20694,-25405,20694,-25405,20694,-25405, - 20323,-25703,20323,-25703,20323,-25703,20323,-25703, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19182,-26565,19182,-26565,19182,-26565,19182,-26565, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18402,-27112,18402,-27112,18402,-27112,18402,-27112, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 17201,-27889,17201,-27889,17201,-27889,17201,-27889, - 16794,-28136,16794,-28136,16794,-28136,16794,-28136, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15969,-28613,15969,-28613,15969,-28613,15969,-28613, - 15551,-28842,15551,-28842,15551,-28842,15551,-28842, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14278,-29493,14278,-29493,14278,-29493,14278,-29493, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13414,-29896,13414,-29896,13414,-29896,13414,-29896, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12097,-30452,12097,-30452,12097,-30452,12097,-30452, - 11653,-30625,11653,-30625,11653,-30625,11653,-30625, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10757,-30951,10757,-30951,10757,-30951,10757,-30951, - 10306,-31104,10306,-31104,10306,-31104,10306,-31104, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 8940,-31524,8940,-31524,8940,-31524,8940,-31524, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8019,-31771,8019,-31771,8019,-31771,8019,-31771, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 6626,-32091,6626,-32091,6626,-32091,6626,-32091, - 6158,-32184,6158,-32184,6158,-32184,6158,-32184, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5220,-32349,5220,-32349,5220,-32349,5220,-32349, - 4748,-32422,4748,-32422,4748,-32422,4748,-32422, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3330,-32598,3330,-32598,3330,-32598,3330,-32598, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2380,-32681,2380,-32681,2380,-32681,2380,-32681, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 953,-32754,953,-32754,953,-32754,953,-32754, - 476,-32764,476,-32764,476,-32764,476,-32764 - }; -static int16_t twb432[107*2*4] = {32753,-954,32753,-954,32753,-954,32753,-954, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32421,-4749,32421,-4749,32421,-4749,32421,-4749, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32090,-6627,32090,-6627,32090,-6627,32090,-6627, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31103,-10307,31103,-10307,31103,-10307,31103,-10307, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30451,-12098,30451,-12098,30451,-12098,30451,-12098, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 28841,-15552,28841,-15552,28841,-15552,28841,-15552, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 27888,-17202,27888,-17202,27888,-17202,27888,-17202, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 25702,-20324,25702,-20324,25702,-20324,25702,-20324, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24477,-21784,24477,-21784,24477,-21784,24477,-21784, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 21783,-24478,21783,-24478,21783,-24478,21783,-24478, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20323,-25703,20323,-25703,20323,-25703,20323,-25703, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17201,-27889,17201,-27889,17201,-27889,17201,-27889, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15551,-28842,15551,-28842,15551,-28842,15551,-28842, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12097,-30452,12097,-30452,12097,-30452,12097,-30452, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10306,-31104,10306,-31104,10306,-31104,10306,-31104, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 6626,-32091,6626,-32091,6626,-32091,6626,-32091, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 4748,-32422,4748,-32422,4748,-32422,4748,-32422, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 953,-32754,953,-32754,953,-32754,953,-32754, - 0,-32767,0,-32767,0,-32767,0,-32767, - -954,-32754,-954,-32754,-954,-32754,-954,-32754, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4749,-32422,-4749,-32422,-4749,-32422,-4749,-32422, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6627,-32091,-6627,-32091,-6627,-32091,-6627,-32091, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -10307,-31104,-10307,-31104,-10307,-31104,-10307,-31104, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -12098,-30452,-12098,-30452,-12098,-30452,-12098,-30452, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -15552,-28842,-15552,-28842,-15552,-28842,-15552,-28842, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -17202,-27889,-17202,-27889,-17202,-27889,-17202,-27889, - -18006,-27377,-18006,-27377,-18006,-27377,-18006,-27377, - -18795,-26842,-18795,-26842,-18795,-26842,-18795,-26842, - -19568,-26284,-19568,-26284,-19568,-26284,-19568,-26284, - -20324,-25703,-20324,-25703,-20324,-25703,-20324,-25703, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -21784,-24478,-21784,-24478,-21784,-24478,-21784,-24478, - -22487,-23834,-22487,-23834,-22487,-23834,-22487,-23834, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23834,-22487,-23834,-22487,-23834,-22487,-23834,-22487, - -24478,-21784,-24478,-21784,-24478,-21784,-24478,-21784, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25703,-20324,-25703,-20324,-25703,-20324,-25703,-20324, - -26284,-19568,-26284,-19568,-26284,-19568,-26284,-19568, - -26842,-18795,-26842,-18795,-26842,-18795,-26842,-18795, - -27377,-18006,-27377,-18006,-27377,-18006,-27377,-18006, - -27889,-17202,-27889,-17202,-27889,-17202,-27889,-17202, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28842,-15552,-28842,-15552,-28842,-15552,-28842,-15552, - -29282,-14706,-29282,-14706,-29282,-14706,-29282,-14706, - -29697,-13848,-29697,-13848,-29697,-13848,-29697,-13848, - -30088,-12979,-30088,-12979,-30088,-12979,-30088,-12979, - -30452,-12098,-30452,-12098,-30452,-12098,-30452,-12098, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -31104,-10307,-31104,-10307,-31104,-10307,-31104,-10307, - -31391,-9398,-31391,-9398,-31391,-9398,-31391,-9398, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31884,-7557,-31884,-7557,-31884,-7557,-31884,-7557, - -32091,-6627,-32091,-6627,-32091,-6627,-32091,-6627, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32422,-4749,-32422,-4749,-32422,-4749,-32422,-4749, - -32546,-3805,-32546,-3805,-32546,-3805,-32546,-3805, - -32643,-2856,-32643,-2856,-32643,-2856,-32643,-2856, - -32712,-1906,-32712,-1906,-32712,-1906,-32712,-1906, - -32754,-954,-32754,-954,-32754,-954,-32754,-954 - }; -static int16_t twc432[107*2*4] = {32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1430,-32736,-1430,-32736,-1430,-32736,-1430,-32736, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -7093,-31991,-7093,-31991,-7093,-31991,-7093,-31991, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -9854,-31251,-9854,-31251,-9854,-31251,-9854,-31251, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -15131,-29065,-15131,-29065,-15131,-29065,-15131,-29065, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -17606,-27636,-17606,-27636,-17606,-27636,-17606,-27636, - -18795,-26842,-18795,-26842,-18795,-26842,-18795,-26842, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -22138,-24159,-22138,-24159,-22138,-24159,-22138,-24159, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -24159,-22138,-24159,-22138,-24159,-22138,-24159,-22138, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26842,-18795,-26842,-18795,-26842,-18795,-26842,-18795, - -27636,-17606,-27636,-17606,-27636,-17606,-27636,-17606, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -29065,-15131,-29065,-15131,-29065,-15131,-29065,-15131, - -29697,-13848,-29697,-13848,-29697,-13848,-29697,-13848, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -31251,-9854,-31251,-9854,-31251,-9854,-31251,-9854, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31991,-7093,-31991,-7093,-31991,-7093,-31991,-7093, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32643,-2856,-32643,-2856,-32643,-2856,-32643,-2856, - -32736,-1430,-32736,-1430,-32736,-1430,-32736,-1430, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32736,1429,-32736,1429,-32736,1429,-32736,1429, - -32643,2855,-32643,2855,-32643,2855,-32643,2855, - -32487,4276,-32487,4276,-32487,4276,-32487,4276, - -32270,5689,-32270,5689,-32270,5689,-32270,5689, - -31991,7092,-31991,7092,-31991,7092,-31991,7092, - -31651,8480,-31651,8480,-31651,8480,-31651,8480, - -31251,9853,-31251,9853,-31251,9853,-31251,9853, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -29697,13847,-29697,13847,-29697,13847,-29697,13847, - -29065,15130,-29065,15130,-29065,15130,-29065,15130, - -28378,16383,-28378,16383,-28378,16383,-28378,16383, - -27636,17605,-27636,17605,-27636,17605,-27636,17605, - -26842,18794,-26842,18794,-26842,18794,-26842,18794, - -25996,19947,-25996,19947,-25996,19947,-25996,19947, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24159,22137,-24159,22137,-24159,22137,-24159,22137, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22138,24158,-22138,24158,-22138,24158,-22138,24158, - -21063,25100,-21063,25100,-21063,25100,-21063,25100, - -19948,25995,-19948,25995,-19948,25995,-19948,25995, - -18795,26841,-18795,26841,-18795,26841,-18795,26841, - -17606,27635,-17606,27635,-17606,27635,-17606,27635, - -16384,28377,-16384,28377,-16384,28377,-16384,28377, - -15131,29064,-15131,29064,-15131,29064,-15131,29064, - -13848,29696,-13848,29696,-13848,29696,-13848,29696, - -12540,30272,-12540,30272,-12540,30272,-12540,30272, - -11207,30790,-11207,30790,-11207,30790,-11207,30790, - -9854,31250,-9854,31250,-9854,31250,-9854,31250, - -8481,31650,-8481,31650,-8481,31650,-8481,31650, - -7093,31990,-7093,31990,-7093,31990,-7093,31990, - -5690,32269,-5690,32269,-5690,32269,-5690,32269, - -4277,32486,-4277,32486,-4277,32486,-4277,32486, - -2856,32642,-2856,32642,-2856,32642,-2856,32642, - -1430,32735,-1430,32735,-1430,32735,-1430,32735 - }; - +static int16_t twa432[107*2*4]; +static int16_t twb432[107*2*4]; +static int16_t twc432[107*2*4]; void dft432(int16_t *x,int16_t *y,unsigned char scale_flag) // 108 x 4 { @@ -9400,402 +7742,9 @@ void dft432(int16_t *x,int16_t *y,unsigned char scale_flag) // 108 x 4 _m_empty(); }; -/* -Twiddles generated with - -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:119)/480)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:119)/480)); -twc = floor(32767*exp(-sqrt(-1)*2*pi*3*(1:119)/480)); -twa2 = zeros(1,2*119); -twb2 = zeros(1,2*119); -twc2 = zeros(1,2*119); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -twc2(1:2:end) = real(twc); -twc2(2:2:end) = imag(twc); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa480[119*2*4] = {"); -for i=1:2:(2*118) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb480[119*2*4] = {"); -for i=1:2:(2*118) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fprintf(fd,"static int16_t twc480[119*2*4] = {"); -for i=1:2:(2*118) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -fclose(fd); -*/ -static int16_t twa480[119*2*4] = {32764,-429,32764,-429,32764,-429,32764,-429, - 32755,-858,32755,-858,32755,-858,32755,-858, - 32741,-1287,32741,-1287,32741,-1287,32741,-1287, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32629,-2999,32629,-2999,32629,-2999,32629,-2999, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32539,-3852,32539,-3852,32539,-3852,32539,-3852, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32427,-4702,32427,-4702,32427,-4702,32427,-4702, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32293,-5550,32293,-5550,32293,-5550,32293,-5550, - 32218,-5972,32218,-5972,32218,-5972,32218,-5972, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31959,-7232,31959,-7232,31959,-7232,31959,-7232, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31758,-8066,31758,-8066,31758,-8066,31758,-8066, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31536,-8895,31536,-8895,31536,-8895,31536,-8895, - 31417,-9307,31417,-9307,31417,-9307,31417,-9307, - 31293,-9717,31293,-9717,31293,-9717,31293,-9717, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30887,-10938,30887,-10938,30887,-10938,30887,-10938, - 30741,-11342,30741,-11342,30741,-11342,30741,-11342, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30434,-12143,30434,-12143,30434,-12143,30434,-12143, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30106,-12935,30106,-12935,30106,-12935,30106,-12935, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29757,-13719,29757,-13719,29757,-13719,29757,-13719, - 29575,-14107,29575,-14107,29575,-14107,29575,-14107, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28998,-15257,28998,-15257,28998,-15257,28998,-15257, - 28796,-15636,28796,-15636,28796,-15636,28796,-15636, - 28589,-16011,28589,-16011,28589,-16011,28589,-16011, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28160,-16754,28160,-16754,28160,-16754,28160,-16754, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27711,-17485,27711,-17485,27711,-17485,27711,-17485, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 27004,-18560,27004,-18560,27004,-18560,27004,-18560, - 26758,-18912,26758,-18912,26758,-18912,26758,-18912, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26254,-19606,26254,-19606,26254,-19606,26254,-19606, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25732,-20286,25732,-20286,25732,-20286,25732,-20286, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25192,-20953,25192,-20953,25192,-20953,25192,-20953, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24061,-22243,24061,-22243,24061,-22243,24061,-22243, - 23768,-22556,23768,-22556,23768,-22556,23768,-22556, - 23471,-22865,23471,-22865,23471,-22865,23471,-22865, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22864,-23472,22864,-23472,22864,-23472,22864,-23472, - 22555,-23769,22555,-23769,22555,-23769,22555,-23769, - 22242,-24062,22242,-24062,22242,-24062,22242,-24062, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 20952,-25193,20952,-25193,20952,-25193,20952,-25193, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20285,-25733,20285,-25733,20285,-25733,20285,-25733, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19605,-26255,19605,-26255,19605,-26255,19605,-26255, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18911,-26759,18911,-26759,18911,-26759,18911,-26759, - 18559,-27005,18559,-27005,18559,-27005,18559,-27005, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17484,-27712,17484,-27712,17484,-27712,17484,-27712, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16753,-28161,16753,-28161,16753,-28161,16753,-28161, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16010,-28590,16010,-28590,16010,-28590,16010,-28590, - 15635,-28797,15635,-28797,15635,-28797,15635,-28797, - 15256,-28999,15256,-28999,15256,-28999,15256,-28999, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14106,-29576,14106,-29576,14106,-29576,14106,-29576, - 13718,-29758,13718,-29758,13718,-29758,13718,-29758, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12934,-30107,12934,-30107,12934,-30107,12934,-30107, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12142,-30435,12142,-30435,12142,-30435,12142,-30435, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11341,-30742,11341,-30742,11341,-30742,11341,-30742, - 10937,-30888,10937,-30888,10937,-30888,10937,-30888, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9716,-31294,9716,-31294,9716,-31294,9716,-31294, - 9306,-31418,9306,-31418,9306,-31418,9306,-31418, - 8894,-31537,8894,-31537,8894,-31537,8894,-31537, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8065,-31759,8065,-31759,8065,-31759,8065,-31759, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 7231,-31960,7231,-31960,7231,-31960,7231,-31960, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 5971,-32219,5971,-32219,5971,-32219,5971,-32219, - 5549,-32294,5549,-32294,5549,-32294,5549,-32294, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4701,-32428,4701,-32428,4701,-32428,4701,-32428, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3851,-32540,3851,-32540,3851,-32540,3851,-32540, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2998,-32630,2998,-32630,2998,-32630,2998,-32630, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1286,-32742,1286,-32742,1286,-32742,1286,-32742, - 857,-32756,857,-32756,857,-32756,857,-32756, - 428,-32765,428,-32765,428,-32765,428,-32765 - }; -static int16_t twb480[119*2*4] = {32755,-858,32755,-858,32755,-858,32755,-858, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32218,-5972,32218,-5972,32218,-5972,32218,-5972, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31417,-9307,31417,-9307,31417,-9307,31417,-9307, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 30887,-10938,30887,-10938,30887,-10938,30887,-10938, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29575,-14107,29575,-14107,29575,-14107,29575,-14107, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28796,-15636,28796,-15636,28796,-15636,28796,-15636, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27004,-18560,27004,-18560,27004,-18560,27004,-18560, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 23768,-22556,23768,-22556,23768,-22556,23768,-22556, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22555,-23769,22555,-23769,22555,-23769,22555,-23769, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18559,-27005,18559,-27005,18559,-27005,18559,-27005, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15635,-28797,15635,-28797,15635,-28797,15635,-28797, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14106,-29576,14106,-29576,14106,-29576,14106,-29576, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 10937,-30888,10937,-30888,10937,-30888,10937,-30888, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9306,-31418,9306,-31418,9306,-31418,9306,-31418, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 5971,-32219,5971,-32219,5971,-32219,5971,-32219, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 857,-32756,857,-32756,857,-32756,857,-32756, - 0,-32767,0,-32767,0,-32767,0,-32767, - -858,-32756,-858,-32756,-858,-32756,-858,-32756, - -1715,-32723,-1715,-32723,-1715,-32723,-1715,-32723, - -2571,-32666,-2571,-32666,-2571,-32666,-2571,-32666, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5972,-32219,-5972,-32219,-5972,-32219,-5972,-32219, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7650,-31862,-7650,-31862,-7650,-31862,-7650,-31862, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -9307,-31418,-9307,-31418,-9307,-31418,-9307,-31418, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10938,-30888,-10938,-30888,-10938,-30888,-10938,-30888, - -11743,-30591,-11743,-30591,-11743,-30591,-11743,-30591, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -14107,-29576,-14107,-29576,-14107,-29576,-14107,-29576, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15636,-28797,-15636,-28797,-15636,-28797,-15636,-28797, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -17121,-27939,-17121,-27939,-17121,-27939,-17121,-27939, - -17847,-27481,-17847,-27481,-17847,-27481,-17847,-27481, - -18560,-27005,-18560,-27005,-18560,-27005,-18560,-27005, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -20621,-25465,-20621,-25465,-20621,-25465,-20621,-25465, - -21281,-24917,-21281,-24917,-21281,-24917,-21281,-24917, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22556,-23769,-22556,-23769,-22556,-23769,-22556,-23769, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23769,-22556,-23769,-22556,-23769,-22556,-23769,-22556, - -24351,-21926,-24351,-21926,-24351,-21926,-24351,-21926, - -24917,-21281,-24917,-21281,-24917,-21281,-24917,-21281, - -25465,-20621,-25465,-20621,-25465,-20621,-25465,-20621, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -27005,-18560,-27005,-18560,-27005,-18560,-27005,-18560, - -27481,-17847,-27481,-17847,-27481,-17847,-27481,-17847, - -27939,-17121,-27939,-17121,-27939,-17121,-27939,-17121, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28797,-15636,-28797,-15636,-28797,-15636,-28797,-15636, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29576,-14107,-29576,-14107,-29576,-14107,-29576,-14107, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30591,-11743,-30591,-11743,-30591,-11743,-30591,-11743, - -30888,-10938,-30888,-10938,-30888,-10938,-30888,-10938, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31418,-9307,-31418,-9307,-31418,-9307,-31418,-9307, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31862,-7650,-31862,-7650,-31862,-7650,-31862,-7650, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32219,-5972,-32219,-5972,-32219,-5972,-32219,-5972, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32588,-3426,-32588,-3426,-32588,-3426,-32588,-3426, - -32666,-2571,-32666,-2571,-32666,-2571,-32666,-2571, - -32723,-1715,-32723,-1715,-32723,-1715,-32723,-1715, - -32756,-858,-32756,-858,-32756,-858,-32756,-858 - }; -static int16_t twc480[119*2*4] = {32741,-1287,32741,-1287,32741,-1287,32741,-1287, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32539,-3852,32539,-3852,32539,-3852,32539,-3852, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31536,-8895,31536,-8895,31536,-8895,31536,-8895, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 30741,-11342,30741,-11342,30741,-11342,30741,-11342, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 29757,-13719,29757,-13719,29757,-13719,29757,-13719, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28589,-16011,28589,-16011,28589,-16011,28589,-16011, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 25732,-20286,25732,-20286,25732,-20286,25732,-20286, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24061,-22243,24061,-22243,24061,-22243,24061,-22243, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22242,-24062,22242,-24062,22242,-24062,22242,-24062, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 20285,-25733,20285,-25733,20285,-25733,20285,-25733, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16010,-28590,16010,-28590,16010,-28590,16010,-28590, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 13718,-29758,13718,-29758,13718,-29758,13718,-29758, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 11341,-30742,11341,-30742,11341,-30742,11341,-30742, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 8894,-31537,8894,-31537,8894,-31537,8894,-31537, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 3851,-32540,3851,-32540,3851,-32540,3851,-32540, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 1286,-32742,1286,-32742,1286,-32742,1286,-32742, - 0,-32767,0,-32767,0,-32767,0,-32767, - -1287,-32742,-1287,-32742,-1287,-32742,-1287,-32742, - -2571,-32666,-2571,-32666,-2571,-32666,-2571,-32666, - -3852,-32540,-3852,-32540,-3852,-32540,-3852,-32540, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -7650,-31862,-7650,-31862,-7650,-31862,-7650,-31862, - -8895,-31537,-8895,-31537,-8895,-31537,-8895,-31537, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -11342,-30742,-11342,-30742,-11342,-30742,-11342,-30742, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13719,-29758,-13719,-29758,-13719,-29758,-13719,-29758, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -16011,-28590,-16011,-28590,-16011,-28590,-16011,-28590, - -17121,-27939,-17121,-27939,-17121,-27939,-17121,-27939, - -18205,-27245,-18205,-27245,-18205,-27245,-18205,-27245, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -20286,-25733,-20286,-25733,-20286,-25733,-20286,-25733, - -21281,-24917,-21281,-24917,-21281,-24917,-21281,-24917, - -22243,-24062,-22243,-24062,-22243,-24062,-22243,-24062, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -24062,-22243,-24062,-22243,-24062,-22243,-24062,-22243, - -24917,-21281,-24917,-21281,-24917,-21281,-24917,-21281, - -25733,-20286,-25733,-20286,-25733,-20286,-25733,-20286, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -27245,-18205,-27245,-18205,-27245,-18205,-27245,-18205, - -27939,-17121,-27939,-17121,-27939,-17121,-27939,-17121, - -28590,-16011,-28590,-16011,-28590,-16011,-28590,-16011, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29758,-13719,-29758,-13719,-29758,-13719,-29758,-13719, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30742,-11342,-30742,-11342,-30742,-11342,-30742,-11342, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31537,-8895,-31537,-8895,-31537,-8895,-31537,-8895, - -31862,-7650,-31862,-7650,-31862,-7650,-31862,-7650, - -32138,-6393,-32138,-6393,-32138,-6393,-32138,-6393, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32540,-3852,-32540,-3852,-32540,-3852,-32540,-3852, - -32666,-2571,-32666,-2571,-32666,-2571,-32666,-2571, - -32742,-1287,-32742,-1287,-32742,-1287,-32742,-1287, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32742,1286,-32742,1286,-32742,1286,-32742,1286, - -32666,2570,-32666,2570,-32666,2570,-32666,2570, - -32540,3851,-32540,3851,-32540,3851,-32540,3851, - -32364,5125,-32364,5125,-32364,5125,-32364,5125, - -32138,6392,-32138,6392,-32138,6392,-32138,6392, - -31862,7649,-31862,7649,-31862,7649,-31862,7649, - -31537,8894,-31537,8894,-31537,8894,-31537,8894, - -31164,10125,-31164,10125,-31164,10125,-31164,10125, - -30742,11341,-30742,11341,-30742,11341,-30742,11341, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -29758,13718,-29758,13718,-29758,13718,-29758,13718, - -29196,14875,-29196,14875,-29196,14875,-29196,14875, - -28590,16010,-28590,16010,-28590,16010,-28590,16010, - -27939,17120,-27939,17120,-27939,17120,-27939,17120, - -27245,18204,-27245,18204,-27245,18204,-27245,18204, - -26510,19259,-26510,19259,-26510,19259,-26510,19259, - -25733,20285,-25733,20285,-25733,20285,-25733,20285, - -24917,21280,-24917,21280,-24917,21280,-24917,21280, - -24062,22242,-24062,22242,-24062,22242,-24062,22242, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22243,24061,-22243,24061,-22243,24061,-22243,24061, - -21281,24916,-21281,24916,-21281,24916,-21281,24916, - -20286,25732,-20286,25732,-20286,25732,-20286,25732, - -19260,26509,-19260,26509,-19260,26509,-19260,26509, - -18205,27244,-18205,27244,-18205,27244,-18205,27244, - -17121,27938,-17121,27938,-17121,27938,-17121,27938, - -16011,28589,-16011,28589,-16011,28589,-16011,28589, - -14876,29195,-14876,29195,-14876,29195,-14876,29195, - -13719,29757,-13719,29757,-13719,29757,-13719,29757, - -12540,30272,-12540,30272,-12540,30272,-12540,30272, - -11342,30741,-11342,30741,-11342,30741,-11342,30741, - -10126,31163,-10126,31163,-10126,31163,-10126,31163, - -8895,31536,-8895,31536,-8895,31536,-8895,31536, - -7650,31861,-7650,31861,-7650,31861,-7650,31861, - -6393,32137,-6393,32137,-6393,32137,-6393,32137, - -5126,32363,-5126,32363,-5126,32363,-5126,32363, - -3852,32539,-3852,32539,-3852,32539,-3852,32539, - -2571,32665,-2571,32665,-2571,32665,-2571,32665, - -1287,32741,-1287,32741,-1287,32741,-1287,32741 - }; +static int16_t twa480[119*2*4]; +static int16_t twb480[119*2*4]; +static int16_t twc480[119*2*4]; void dft480(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 4 { @@ -9851,392 +7800,9 @@ void dft480(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 4 }; -/* -Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:179)/540)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:179)/540)); -twa2 = zeros(1,2*179); -twb2 = zeros(1,2*179); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa540[179*2*4] = {"); -for i=1:2:(2*178) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb540[179*2*4] = {"); -for i=1:2:(2*178) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); -*/ -static int16_t twa540[179*2*4] = {32764,-382,32764,-382,32764,-382,32764,-382, - 32758,-763,32758,-763,32758,-763,32758,-763, - 32747,-1144,32747,-1144,32747,-1144,32747,-1144, - 32731,-1525,32731,-1525,32731,-1525,32731,-1525, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32658,-2666,32658,-2666,32658,-2666,32658,-2666, - 32625,-3046,32625,-3046,32625,-3046,32625,-3046, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32498,-4183,32498,-4183,32498,-4183,32498,-4183, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32392,-4938,32392,-4938,32392,-4938,32392,-4938, - 32333,-5315,32333,-5315,32333,-5315,32333,-5315, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32200,-6066,32200,-6066,32200,-6066,32200,-6066, - 32128,-6440,32128,-6440,32128,-6440,32128,-6440, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31969,-7186,31969,-7186,31969,-7186,31969,-7186, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31793,-7928,31793,-7928,31793,-7928,31793,-7928, - 31699,-8297,31699,-8297,31699,-8297,31699,-8297, - 31600,-8665,31600,-8665,31600,-8665,31600,-8665, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31278,-9763,31278,-9763,31278,-9763,31278,-9763, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31043,-10488,31043,-10488,31043,-10488,31043,-10488, - 30919,-10848,30919,-10848,30919,-10848,30919,-10848, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30658,-11565,30658,-11565,30658,-11565,30658,-11565, - 30521,-11921,30521,-11921,30521,-11921,30521,-11921, - 30381,-12275,30381,-12275,30381,-12275,30381,-12275, - 30236,-12628,30236,-12628,30236,-12628,30236,-12628, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29777,-13675,29777,-13675,29777,-13675,29777,-13675, - 29615,-14021,29615,-14021,29615,-14021,29615,-14021, - 29450,-14365,29450,-14365,29450,-14365,29450,-14365, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29108,-15046,29108,-15046,29108,-15046,29108,-15046, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28750,-15719,28750,-15719,28750,-15719,28750,-15719, - 28565,-16053,28565,-16053,28565,-16053,28565,-16053, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28184,-16713,28184,-16713,28184,-16713,28184,-16713, - 27988,-17040,27988,-17040,27988,-17040,27988,-17040, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27584,-17687,27584,-17687,27584,-17687,27584,-17687, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27165,-18324,27165,-18324,27165,-18324,27165,-18324, - 26950,-18638,26950,-18638,26950,-18638,26950,-18638, - 26731,-18951,26731,-18951,26731,-18951,26731,-18951, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 26053,-19872,26053,-19872,26053,-19872,26053,-19872, - 25820,-20174,25820,-20174,25820,-20174,25820,-20174, - 25584,-20473,25584,-20473,25584,-20473,25584,-20473, - 25344,-20769,25344,-20769,25344,-20769,25344,-20769, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24854,-21353,24854,-21353,24854,-21353,24854,-21353, - 24604,-21641,24604,-21641,24604,-21641,24604,-21641, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24093,-22208,24093,-22208,24093,-22208,24093,-22208, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23304,-23035,23304,-23035,23304,-23035,23304,-23035, - 23034,-23305,23034,-23305,23034,-23305,23034,-23305, - 22761,-23571,22761,-23571,22761,-23571,22761,-23571, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22207,-24094,22207,-24094,22207,-24094,22207,-24094, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21640,-24605,21640,-24605,21640,-24605,21640,-24605, - 21352,-24855,21352,-24855,21352,-24855,21352,-24855, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20768,-25345,20768,-25345,20768,-25345,20768,-25345, - 20472,-25585,20472,-25585,20472,-25585,20472,-25585, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19871,-26054,19871,-26054,19871,-26054,19871,-26054, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18950,-26732,18950,-26732,18950,-26732,18950,-26732, - 18637,-26951,18637,-26951,18637,-26951,18637,-26951, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17686,-27585,17686,-27585,17686,-27585,17686,-27585, - 17363,-27788,17363,-27788,17363,-27788,17363,-27788, - 17039,-27989,17039,-27989,17039,-27989,17039,-27989, - 16712,-28185,16712,-28185,16712,-28185,16712,-28185, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16052,-28566,16052,-28566,16052,-28566,16052,-28566, - 15718,-28751,15718,-28751,15718,-28751,15718,-28751, - 15383,-28932,15383,-28932,15383,-28932,15383,-28932, - 15045,-29109,15045,-29109,15045,-29109,15045,-29109, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 14020,-29616,14020,-29616,14020,-29616,14020,-29616, - 13674,-29778,13674,-29778,13674,-29778,13674,-29778, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12627,-30237,12627,-30237,12627,-30237,12627,-30237, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 11920,-30522,11920,-30522,11920,-30522,11920,-30522, - 11564,-30659,11564,-30659,11564,-30659,11564,-30659, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10847,-30920,10847,-30920,10847,-30920,10847,-30920, - 10487,-31044,10487,-31044,10487,-31044,10487,-31044, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9762,-31279,9762,-31279,9762,-31279,9762,-31279, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 9031,-31498,9031,-31498,9031,-31498,9031,-31498, - 8664,-31601,8664,-31601,8664,-31601,8664,-31601, - 8296,-31700,8296,-31700,8296,-31700,8296,-31700, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 7185,-31970,7185,-31970,7185,-31970,7185,-31970, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6439,-32129,6439,-32129,6439,-32129,6439,-32129, - 6065,-32201,6065,-32201,6065,-32201,6065,-32201, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5314,-32334,5314,-32334,5314,-32334,5314,-32334, - 4937,-32393,4937,-32393,4937,-32393,4937,-32393, - 4560,-32449,4560,-32449,4560,-32449,4560,-32449, - 4182,-32499,4182,-32499,4182,-32499,4182,-32499, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3045,-32626,3045,-32626,3045,-32626,3045,-32626, - 2665,-32659,2665,-32659,2665,-32659,2665,-32659, - 2285,-32688,2285,-32688,2285,-32688,2285,-32688, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1524,-32732,1524,-32732,1524,-32732,1524,-32732, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 762,-32759,762,-32759,762,-32759,762,-32759, - 381,-32765,381,-32765,381,-32765,381,-32765, - 0,-32767,0,-32767,0,-32767,0,-32767, - -382,-32765,-382,-32765,-382,-32765,-382,-32765, - -763,-32759,-763,-32759,-763,-32759,-763,-32759, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -1525,-32732,-1525,-32732,-1525,-32732,-1525,-32732, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2286,-32688,-2286,-32688,-2286,-32688,-2286,-32688, - -2666,-32659,-2666,-32659,-2666,-32659,-2666,-32659, - -3046,-32626,-3046,-32626,-3046,-32626,-3046,-32626, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4183,-32499,-4183,-32499,-4183,-32499,-4183,-32499, - -4561,-32449,-4561,-32449,-4561,-32449,-4561,-32449, - -4938,-32393,-4938,-32393,-4938,-32393,-4938,-32393, - -5315,-32334,-5315,-32334,-5315,-32334,-5315,-32334, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6066,-32201,-6066,-32201,-6066,-32201,-6066,-32201, - -6440,-32129,-6440,-32129,-6440,-32129,-6440,-32129, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7186,-31970,-7186,-31970,-7186,-31970,-7186,-31970, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -8297,-31700,-8297,-31700,-8297,-31700,-8297,-31700, - -8665,-31601,-8665,-31601,-8665,-31601,-8665,-31601, - -9032,-31498,-9032,-31498,-9032,-31498,-9032,-31498, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -9763,-31279,-9763,-31279,-9763,-31279,-9763,-31279, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10488,-31044,-10488,-31044,-10488,-31044,-10488,-31044, - -10848,-30920,-10848,-30920,-10848,-30920,-10848,-30920, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11565,-30659,-11565,-30659,-11565,-30659,-11565,-30659, - -11921,-30522,-11921,-30522,-11921,-30522,-11921,-30522, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -12628,-30237,-12628,-30237,-12628,-30237,-12628,-30237, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13675,-29778,-13675,-29778,-13675,-29778,-13675,-29778, - -14021,-29616,-14021,-29616,-14021,-29616,-14021,-29616, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -15046,-29109,-15046,-29109,-15046,-29109,-15046,-29109, - -15384,-28932,-15384,-28932,-15384,-28932,-15384,-28932, - -15719,-28751,-15719,-28751,-15719,-28751,-15719,-28751, - -16053,-28566,-16053,-28566,-16053,-28566,-16053,-28566 - }; -static int16_t twb540[179*2*4] = {32758,-763,32758,-763,32758,-763,32758,-763, - 32731,-1525,32731,-1525,32731,-1525,32731,-1525, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32625,-3046,32625,-3046,32625,-3046,32625,-3046, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32333,-5315,32333,-5315,32333,-5315,32333,-5315, - 32200,-6066,32200,-6066,32200,-6066,32200,-6066, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31699,-8297,31699,-8297,31699,-8297,31699,-8297, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31278,-9763,31278,-9763,31278,-9763,31278,-9763, - 31043,-10488,31043,-10488,31043,-10488,31043,-10488, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30521,-11921,30521,-11921,30521,-11921,30521,-11921, - 30236,-12628,30236,-12628,30236,-12628,30236,-12628, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29615,-14021,29615,-14021,29615,-14021,29615,-14021, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28565,-16053,28565,-16053,28565,-16053,28565,-16053, - 28184,-16713,28184,-16713,28184,-16713,28184,-16713, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 26950,-18638,26950,-18638,26950,-18638,26950,-18638, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26053,-19872,26053,-19872,26053,-19872,26053,-19872, - 25584,-20473,25584,-20473,25584,-20473,25584,-20473, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24604,-21641,24604,-21641,24604,-21641,24604,-21641, - 24093,-22208,24093,-22208,24093,-22208,24093,-22208, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23034,-23305,23034,-23305,23034,-23305,23034,-23305, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21352,-24855,21352,-24855,21352,-24855,21352,-24855, - 20768,-25345,20768,-25345,20768,-25345,20768,-25345, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 18950,-26732,18950,-26732,18950,-26732,18950,-26732, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 17686,-27585,17686,-27585,17686,-27585,17686,-27585, - 17039,-27989,17039,-27989,17039,-27989,17039,-27989, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15718,-28751,15718,-28751,15718,-28751,15718,-28751, - 15045,-29109,15045,-29109,15045,-29109,15045,-29109, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 13674,-29778,13674,-29778,13674,-29778,13674,-29778, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 11564,-30659,11564,-30659,11564,-30659,11564,-30659, - 10847,-30920,10847,-30920,10847,-30920,10847,-30920, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 8664,-31601,8664,-31601,8664,-31601,8664,-31601, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7185,-31970,7185,-31970,7185,-31970,7185,-31970, - 6439,-32129,6439,-32129,6439,-32129,6439,-32129, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 4937,-32393,4937,-32393,4937,-32393,4937,-32393, - 4182,-32499,4182,-32499,4182,-32499,4182,-32499, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2665,-32659,2665,-32659,2665,-32659,2665,-32659, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 381,-32765,381,-32765,381,-32765,381,-32765, - -382,-32765,-382,-32765,-382,-32765,-382,-32765, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2666,-32659,-2666,-32659,-2666,-32659,-2666,-32659, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -4183,-32499,-4183,-32499,-4183,-32499,-4183,-32499, - -4938,-32393,-4938,-32393,-4938,-32393,-4938,-32393, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6440,-32129,-6440,-32129,-6440,-32129,-6440,-32129, - -7186,-31970,-7186,-31970,-7186,-31970,-7186,-31970, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -8665,-31601,-8665,-31601,-8665,-31601,-8665,-31601, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10848,-30920,-10848,-30920,-10848,-30920,-10848,-30920, - -11565,-30659,-11565,-30659,-11565,-30659,-11565,-30659, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13675,-29778,-13675,-29778,-13675,-29778,-13675,-29778, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -15046,-29109,-15046,-29109,-15046,-29109,-15046,-29109, - -15719,-28751,-15719,-28751,-15719,-28751,-15719,-28751, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -17040,-27989,-17040,-27989,-17040,-27989,-17040,-27989, - -17687,-27585,-17687,-27585,-17687,-27585,-17687,-27585, - -18324,-27166,-18324,-27166,-18324,-27166,-18324,-27166, - -18951,-26732,-18951,-26732,-18951,-26732,-18951,-26732, - -19568,-26284,-19568,-26284,-19568,-26284,-19568,-26284, - -20174,-25821,-20174,-25821,-20174,-25821,-20174,-25821, - -20769,-25345,-20769,-25345,-20769,-25345,-20769,-25345, - -21353,-24855,-21353,-24855,-21353,-24855,-21353,-24855, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22487,-23834,-22487,-23834,-22487,-23834,-22487,-23834, - -23035,-23305,-23035,-23305,-23035,-23305,-23035,-23305, - -23571,-22762,-23571,-22762,-23571,-22762,-23571,-22762, - -24094,-22208,-24094,-22208,-24094,-22208,-24094,-22208, - -24605,-21641,-24605,-21641,-24605,-21641,-24605,-21641, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25585,-20473,-25585,-20473,-25585,-20473,-25585,-20473, - -26054,-19872,-26054,-19872,-26054,-19872,-26054,-19872, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26951,-18638,-26951,-18638,-26951,-18638,-26951,-18638, - -27377,-18006,-27377,-18006,-27377,-18006,-27377,-18006, - -27788,-17364,-27788,-17364,-27788,-17364,-27788,-17364, - -28185,-16713,-28185,-16713,-28185,-16713,-28185,-16713, - -28566,-16053,-28566,-16053,-28566,-16053,-28566,-16053, - -28932,-15384,-28932,-15384,-28932,-15384,-28932,-15384, - -29282,-14706,-29282,-14706,-29282,-14706,-29282,-14706, - -29616,-14021,-29616,-14021,-29616,-14021,-29616,-14021, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30237,-12628,-30237,-12628,-30237,-12628,-30237,-12628, - -30522,-11921,-30522,-11921,-30522,-11921,-30522,-11921, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -31044,-10488,-31044,-10488,-31044,-10488,-31044,-10488, - -31279,-9763,-31279,-9763,-31279,-9763,-31279,-9763, - -31498,-9032,-31498,-9032,-31498,-9032,-31498,-9032, - -31700,-8297,-31700,-8297,-31700,-8297,-31700,-8297, - -31884,-7557,-31884,-7557,-31884,-7557,-31884,-7557, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32201,-6066,-32201,-6066,-32201,-6066,-32201,-6066, - -32334,-5315,-32334,-5315,-32334,-5315,-32334,-5315, - -32449,-4561,-32449,-4561,-32449,-4561,-32449,-4561, - -32546,-3805,-32546,-3805,-32546,-3805,-32546,-3805, - -32626,-3046,-32626,-3046,-32626,-3046,-32626,-3046, - -32688,-2286,-32688,-2286,-32688,-2286,-32688,-2286, - -32732,-1525,-32732,-1525,-32732,-1525,-32732,-1525, - -32759,-763,-32759,-763,-32759,-763,-32759,-763, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32759,762,-32759,762,-32759,762,-32759,762, - -32732,1524,-32732,1524,-32732,1524,-32732,1524, - -32688,2285,-32688,2285,-32688,2285,-32688,2285, - -32626,3045,-32626,3045,-32626,3045,-32626,3045, - -32546,3804,-32546,3804,-32546,3804,-32546,3804, - -32449,4560,-32449,4560,-32449,4560,-32449,4560, - -32334,5314,-32334,5314,-32334,5314,-32334,5314, - -32201,6065,-32201,6065,-32201,6065,-32201,6065, - -32051,6812,-32051,6812,-32051,6812,-32051,6812, - -31884,7556,-31884,7556,-31884,7556,-31884,7556, - -31700,8296,-31700,8296,-31700,8296,-31700,8296, - -31498,9031,-31498,9031,-31498,9031,-31498,9031, - -31279,9762,-31279,9762,-31279,9762,-31279,9762, - -31044,10487,-31044,10487,-31044,10487,-31044,10487, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30522,11920,-30522,11920,-30522,11920,-30522,11920, - -30237,12627,-30237,12627,-30237,12627,-30237,12627, - -29935,13327,-29935,13327,-29935,13327,-29935,13327, - -29616,14020,-29616,14020,-29616,14020,-29616,14020, - -29282,14705,-29282,14705,-29282,14705,-29282,14705, - -28932,15383,-28932,15383,-28932,15383,-28932,15383, - -28566,16052,-28566,16052,-28566,16052,-28566,16052, - -28185,16712,-28185,16712,-28185,16712,-28185,16712, - -27788,17363,-27788,17363,-27788,17363,-27788,17363, - -27377,18005,-27377,18005,-27377,18005,-27377,18005, - -26951,18637,-26951,18637,-26951,18637,-26951,18637, - -26510,19259,-26510,19259,-26510,19259,-26510,19259, - -26054,19871,-26054,19871,-26054,19871,-26054,19871, - -25585,20472,-25585,20472,-25585,20472,-25585,20472, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24605,21640,-24605,21640,-24605,21640,-24605,21640, - -24094,22207,-24094,22207,-24094,22207,-24094,22207, - -23571,22761,-23571,22761,-23571,22761,-23571,22761, - -23035,23304,-23035,23304,-23035,23304,-23035,23304, - -22487,23833,-22487,23833,-22487,23833,-22487,23833, - -21926,24350,-21926,24350,-21926,24350,-21926,24350, - -21353,24854,-21353,24854,-21353,24854,-21353,24854, - -20769,25344,-20769,25344,-20769,25344,-20769,25344, - -20174,25820,-20174,25820,-20174,25820,-20174,25820, - -19568,26283,-19568,26283,-19568,26283,-19568,26283, - -18951,26731,-18951,26731,-18951,26731,-18951,26731, - -18324,27165,-18324,27165,-18324,27165,-18324,27165, - -17687,27584,-17687,27584,-17687,27584,-17687,27584, - -17040,27988,-17040,27988,-17040,27988,-17040,27988 - }; +static int16_t twa540[179*2*4]; +static int16_t twb540[179*2*4]; void dft540(int16_t *x,int16_t *y,unsigned char scale_flag) // 180 x 3 { @@ -10286,416 +7852,8 @@ void dft540(int16_t *x,int16_t *y,unsigned char scale_flag) // 180 x 3 }; -/* -Twiddles generated with - -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:191)/576)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:191)/576)); -twa2 = zeros(1,2*191); -twb2 = zeros(1,2*191); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa576[191*2*4] = {"); -for i=1:2:(2*190) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb576[191*2*4] = {"); -for i=1:2:(2*190) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); -*/ -static int16_t twa576[191*2*4] = {32765,-358,32765,-358,32765,-358,32765,-358, - 32759,-715,32759,-715,32759,-715,32759,-715, - 32749,-1073,32749,-1073,32749,-1073,32749,-1073, - 32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32718,-1787,32718,-1787,32718,-1787,32718,-1787, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32671,-2500,32671,-2500,32671,-2500,32671,-2500, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32572,-3568,32572,-3568,32572,-3568,32572,-3568, - 32531,-3923,32531,-3923,32531,-3923,32531,-3923, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32438,-4632,32438,-4632,32438,-4632,32438,-4632, - 32385,-4985,32385,-4985,32385,-4985,32385,-4985, - 32329,-5338,32329,-5338,32329,-5338,32329,-5338, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32205,-6042,32205,-6042,32205,-6042,32205,-6042, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32065,-6743,32065,-6743,32065,-6743,32065,-6743, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31911,-7441,31911,-7441,31911,-7441,31911,-7441, - 31827,-7789,31827,-7789,31827,-7789,31827,-7789, - 31741,-8135,31741,-8135,31741,-8135,31741,-8135, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31556,-8826,31556,-8826,31556,-8826,31556,-8826, - 31457,-9170,31457,-9170,31457,-9170,31457,-9170, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 31141,-10194,31141,-10194,31141,-10194,31141,-10194, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30911,-10871,30911,-10871,30911,-10871,30911,-10871, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30666,-11543,30666,-11543,30666,-11543,30666,-11543, - 30539,-11877,30539,-11877,30539,-11877,30539,-11877, - 30407,-12209,30407,-12209,30407,-12209,30407,-12209, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30134,-12869,30134,-12869,30134,-12869,30134,-12869, - 29992,-13197,29992,-13197,29992,-13197,29992,-13197, - 29846,-13524,29846,-13524,29846,-13524,29846,-13524, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29544,-14172,29544,-14172,29544,-14172,29544,-14172, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29227,-14813,29227,-14813,29227,-14813,29227,-14813, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28727,-15761,28727,-15761,28727,-15761,28727,-15761, - 28554,-16073,28554,-16073,28554,-16073,28554,-16073, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28196,-16693,28196,-16693,28196,-16693,28196,-16693, - 28012,-16999,28012,-16999,28012,-16999,28012,-16999, - 27825,-17304,27825,-17304,27825,-17304,27825,-17304, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 27441,-17907,27441,-17907,27441,-17907,27441,-17907, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 27044,-18501,27044,-18501,27044,-18501,27044,-18501, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26634,-19087,26634,-19087,26634,-19087,26634,-19087, - 26424,-19376,26424,-19376,26424,-19376,26424,-19376, - 26211,-19663,26211,-19663,26211,-19663,26211,-19663, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25776,-20230,25776,-20230,25776,-20230,25776,-20230, - 25554,-20510,25554,-20510,25554,-20510,25554,-20510, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24869,-21335,24869,-21335,24869,-21335,24869,-21335, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24398,-21873,24398,-21873,24398,-21873,24398,-21873, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 23915,-22400,23915,-22400,23915,-22400,23915,-22400, - 23669,-22659,23669,-22659,23669,-22659,23669,-22659, - 23421,-22916,23421,-22916,23421,-22916,23421,-22916, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22915,-23422,22915,-23422,22915,-23422,22915,-23422, - 22658,-23670,22658,-23670,22658,-23670,22658,-23670, - 22399,-23916,22399,-23916,22399,-23916,22399,-23916, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 21872,-24399,21872,-24399,21872,-24399,21872,-24399, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21334,-24870,21334,-24870,21334,-24870,21334,-24870, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 20509,-25555,20509,-25555,20509,-25555,20509,-25555, - 20229,-25777,20229,-25777,20229,-25777,20229,-25777, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19662,-26212,19662,-26212,19662,-26212,19662,-26212, - 19375,-26425,19375,-26425,19375,-26425,19375,-26425, - 19086,-26635,19086,-26635,19086,-26635,19086,-26635, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18500,-27045,18500,-27045,18500,-27045,18500,-27045, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17906,-27442,17906,-27442,17906,-27442,17906,-27442, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 17303,-27826,17303,-27826,17303,-27826,17303,-27826, - 16998,-28013,16998,-28013,16998,-28013,16998,-28013, - 16692,-28197,16692,-28197,16692,-28197,16692,-28197, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16072,-28555,16072,-28555,16072,-28555,16072,-28555, - 15760,-28728,15760,-28728,15760,-28728,15760,-28728, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 14812,-29228,14812,-29228,14812,-29228,14812,-29228, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14171,-29545,14171,-29545,14171,-29545,14171,-29545, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13523,-29847,13523,-29847,13523,-29847,13523,-29847, - 13196,-29993,13196,-29993,13196,-29993,13196,-29993, - 12868,-30135,12868,-30135,12868,-30135,12868,-30135, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12208,-30408,12208,-30408,12208,-30408,12208,-30408, - 11876,-30540,11876,-30540,11876,-30540,11876,-30540, - 11542,-30667,11542,-30667,11542,-30667,11542,-30667, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10870,-30912,10870,-30912,10870,-30912,10870,-30912, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10193,-31142,10193,-31142,10193,-31142,10193,-31142, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 9169,-31458,9169,-31458,9169,-31458,9169,-31458, - 8825,-31557,8825,-31557,8825,-31557,8825,-31557, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8134,-31742,8134,-31742,8134,-31742,8134,-31742, - 7788,-31828,7788,-31828,7788,-31828,7788,-31828, - 7440,-31912,7440,-31912,7440,-31912,7440,-31912, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 6742,-32066,6742,-32066,6742,-32066,6742,-32066, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 6041,-32206,6041,-32206,6041,-32206,6041,-32206, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5337,-32330,5337,-32330,5337,-32330,5337,-32330, - 4984,-32386,4984,-32386,4984,-32386,4984,-32386, - 4631,-32439,4631,-32439,4631,-32439,4631,-32439, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3922,-32532,3922,-32532,3922,-32532,3922,-32532, - 3567,-32573,3567,-32573,3567,-32573,3567,-32573, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2499,-32672,2499,-32672,2499,-32672,2499,-32672, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1786,-32719,1786,-32719,1786,-32719,1786,-32719, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 1072,-32750,1072,-32750,1072,-32750,1072,-32750, - 714,-32760,714,-32760,714,-32760,714,-32760, - 357,-32766,357,-32766,357,-32766,357,-32766, - 0,-32767,0,-32767,0,-32767,0,-32767, - -358,-32766,-358,-32766,-358,-32766,-358,-32766, - -715,-32760,-715,-32760,-715,-32760,-715,-32760, - -1073,-32750,-1073,-32750,-1073,-32750,-1073,-32750, - -1430,-32736,-1430,-32736,-1430,-32736,-1430,-32736, - -1787,-32719,-1787,-32719,-1787,-32719,-1787,-32719, - -2144,-32697,-2144,-32697,-2144,-32697,-2144,-32697, - -2500,-32672,-2500,-32672,-2500,-32672,-2500,-32672, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3212,-32610,-3212,-32610,-3212,-32610,-3212,-32610, - -3568,-32573,-3568,-32573,-3568,-32573,-3568,-32573, - -3923,-32532,-3923,-32532,-3923,-32532,-3923,-32532, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -4632,-32439,-4632,-32439,-4632,-32439,-4632,-32439, - -4985,-32386,-4985,-32386,-4985,-32386,-4985,-32386, - -5338,-32330,-5338,-32330,-5338,-32330,-5338,-32330, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6042,-32206,-6042,-32206,-6042,-32206,-6042,-32206, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -6743,-32066,-6743,-32066,-6743,-32066,-6743,-32066, - -7093,-31991,-7093,-31991,-7093,-31991,-7093,-31991, - -7441,-31912,-7441,-31912,-7441,-31912,-7441,-31912, - -7789,-31828,-7789,-31828,-7789,-31828,-7789,-31828, - -8135,-31742,-8135,-31742,-8135,-31742,-8135,-31742, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8826,-31557,-8826,-31557,-8826,-31557,-8826,-31557, - -9170,-31458,-9170,-31458,-9170,-31458,-9170,-31458, - -9512,-31357,-9512,-31357,-9512,-31357,-9512,-31357, - -9854,-31251,-9854,-31251,-9854,-31251,-9854,-31251, - -10194,-31142,-10194,-31142,-10194,-31142,-10194,-31142, - -10533,-31029,-10533,-31029,-10533,-31029,-10533,-31029, - -10871,-30912,-10871,-30912,-10871,-30912,-10871,-30912, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11543,-30667,-11543,-30667,-11543,-30667,-11543,-30667, - -11877,-30540,-11877,-30540,-11877,-30540,-11877,-30540, - -12209,-30408,-12209,-30408,-12209,-30408,-12209,-30408, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -12869,-30135,-12869,-30135,-12869,-30135,-12869,-30135, - -13197,-29993,-13197,-29993,-13197,-29993,-13197,-29993, - -13524,-29847,-13524,-29847,-13524,-29847,-13524,-29847, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14172,-29545,-14172,-29545,-14172,-29545,-14172,-29545, - -14493,-29388,-14493,-29388,-14493,-29388,-14493,-29388, - -14813,-29228,-14813,-29228,-14813,-29228,-14813,-29228, - -15131,-29065,-15131,-29065,-15131,-29065,-15131,-29065, - -15447,-28898,-15447,-28898,-15447,-28898,-15447,-28898, - -15761,-28728,-15761,-28728,-15761,-28728,-15761,-28728, - -16073,-28555,-16073,-28555,-16073,-28555,-16073,-28555 - }; -static int16_t twb576[191*2*4] = {32759,-715,32759,-715,32759,-715,32759,-715, - 32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32572,-3568,32572,-3568,32572,-3568,32572,-3568, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32385,-4985,32385,-4985,32385,-4985,32385,-4985, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31827,-7789,31827,-7789,31827,-7789,31827,-7789, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31457,-9170,31457,-9170,31457,-9170,31457,-9170, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30539,-11877,30539,-11877,30539,-11877,30539,-11877, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 29992,-13197,29992,-13197,29992,-13197,29992,-13197, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28727,-15761,28727,-15761,28727,-15761,28727,-15761, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28012,-16999,28012,-16999,28012,-16999,28012,-16999, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26424,-19376,26424,-19376,26424,-19376,26424,-19376, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25554,-20510,25554,-20510,25554,-20510,25554,-20510, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 23669,-22659,23669,-22659,23669,-22659,23669,-22659, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22658,-23670,22658,-23670,22658,-23670,22658,-23670, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20509,-25555,20509,-25555,20509,-25555,20509,-25555, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19375,-26425,19375,-26425,19375,-26425,19375,-26425, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 16998,-28013,16998,-28013,16998,-28013,16998,-28013, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15760,-28728,15760,-28728,15760,-28728,15760,-28728, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13196,-29993,13196,-29993,13196,-29993,13196,-29993, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 11876,-30540,11876,-30540,11876,-30540,11876,-30540, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 9169,-31458,9169,-31458,9169,-31458,9169,-31458, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7788,-31828,7788,-31828,7788,-31828,7788,-31828, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 4984,-32386,4984,-32386,4984,-32386,4984,-32386, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3567,-32573,3567,-32573,3567,-32573,3567,-32573, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 714,-32760,714,-32760,714,-32760,714,-32760, - 0,-32767,0,-32767,0,-32767,0,-32767, - -715,-32760,-715,-32760,-715,-32760,-715,-32760, - -1430,-32736,-1430,-32736,-1430,-32736,-1430,-32736, - -2144,-32697,-2144,-32697,-2144,-32697,-2144,-32697, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3568,-32573,-3568,-32573,-3568,-32573,-3568,-32573, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -4985,-32386,-4985,-32386,-4985,-32386,-4985,-32386, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -7093,-31991,-7093,-31991,-7093,-31991,-7093,-31991, - -7789,-31828,-7789,-31828,-7789,-31828,-7789,-31828, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -9170,-31458,-9170,-31458,-9170,-31458,-9170,-31458, - -9854,-31251,-9854,-31251,-9854,-31251,-9854,-31251, - -10533,-31029,-10533,-31029,-10533,-31029,-10533,-31029, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11877,-30540,-11877,-30540,-11877,-30540,-11877,-30540, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13197,-29993,-13197,-29993,-13197,-29993,-13197,-29993, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14493,-29388,-14493,-29388,-14493,-29388,-14493,-29388, - -15131,-29065,-15131,-29065,-15131,-29065,-15131,-29065, - -15761,-28728,-15761,-28728,-15761,-28728,-15761,-28728, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16999,-28013,-16999,-28013,-16999,-28013,-16999,-28013, - -17606,-27636,-17606,-27636,-17606,-27636,-17606,-27636, - -18205,-27245,-18205,-27245,-18205,-27245,-18205,-27245, - -18795,-26842,-18795,-26842,-18795,-26842,-18795,-26842, - -19376,-26425,-19376,-26425,-19376,-26425,-19376,-26425, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -20510,-25555,-20510,-25555,-20510,-25555,-20510,-25555, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -21605,-24636,-21605,-24636,-21605,-24636,-21605,-24636, - -22138,-24159,-22138,-24159,-22138,-24159,-22138,-24159, - -22659,-23670,-22659,-23670,-22659,-23670,-22659,-23670, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23670,-22659,-23670,-22659,-23670,-22659,-23670,-22659, - -24159,-22138,-24159,-22138,-24159,-22138,-24159,-22138, - -24636,-21605,-24636,-21605,-24636,-21605,-24636,-21605, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25555,-20510,-25555,-20510,-25555,-20510,-25555,-20510, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26425,-19376,-26425,-19376,-26425,-19376,-26425,-19376, - -26842,-18795,-26842,-18795,-26842,-18795,-26842,-18795, - -27245,-18205,-27245,-18205,-27245,-18205,-27245,-18205, - -27636,-17606,-27636,-17606,-27636,-17606,-27636,-17606, - -28013,-16999,-28013,-16999,-28013,-16999,-28013,-16999, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28728,-15761,-28728,-15761,-28728,-15761,-28728,-15761, - -29065,-15131,-29065,-15131,-29065,-15131,-29065,-15131, - -29388,-14493,-29388,-14493,-29388,-14493,-29388,-14493, - -29697,-13848,-29697,-13848,-29697,-13848,-29697,-13848, - -29993,-13197,-29993,-13197,-29993,-13197,-29993,-13197, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30540,-11877,-30540,-11877,-30540,-11877,-30540,-11877, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -31029,-10533,-31029,-10533,-31029,-10533,-31029,-10533, - -31251,-9854,-31251,-9854,-31251,-9854,-31251,-9854, - -31458,-9170,-31458,-9170,-31458,-9170,-31458,-9170, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31828,-7789,-31828,-7789,-31828,-7789,-31828,-7789, - -31991,-7093,-31991,-7093,-31991,-7093,-31991,-7093, - -32138,-6393,-32138,-6393,-32138,-6393,-32138,-6393, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32386,-4985,-32386,-4985,-32386,-4985,-32386,-4985, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32573,-3568,-32573,-3568,-32573,-3568,-32573,-3568, - -32643,-2856,-32643,-2856,-32643,-2856,-32643,-2856, - -32697,-2144,-32697,-2144,-32697,-2144,-32697,-2144, - -32736,-1430,-32736,-1430,-32736,-1430,-32736,-1430, - -32760,-715,-32760,-715,-32760,-715,-32760,-715, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32760,714,-32760,714,-32760,714,-32760,714, - -32736,1429,-32736,1429,-32736,1429,-32736,1429, - -32697,2143,-32697,2143,-32697,2143,-32697,2143, - -32643,2855,-32643,2855,-32643,2855,-32643,2855, - -32573,3567,-32573,3567,-32573,3567,-32573,3567, - -32487,4276,-32487,4276,-32487,4276,-32487,4276, - -32386,4984,-32386,4984,-32386,4984,-32386,4984, - -32270,5689,-32270,5689,-32270,5689,-32270,5689, - -32138,6392,-32138,6392,-32138,6392,-32138,6392, - -31991,7092,-31991,7092,-31991,7092,-31991,7092, - -31828,7788,-31828,7788,-31828,7788,-31828,7788, - -31651,8480,-31651,8480,-31651,8480,-31651,8480, - -31458,9169,-31458,9169,-31458,9169,-31458,9169, - -31251,9853,-31251,9853,-31251,9853,-31251,9853, - -31029,10532,-31029,10532,-31029,10532,-31029,10532, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30540,11876,-30540,11876,-30540,11876,-30540,11876, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -29993,13196,-29993,13196,-29993,13196,-29993,13196, - -29697,13847,-29697,13847,-29697,13847,-29697,13847, - -29388,14492,-29388,14492,-29388,14492,-29388,14492, - -29065,15130,-29065,15130,-29065,15130,-29065,15130, - -28728,15760,-28728,15760,-28728,15760,-28728,15760, - -28378,16383,-28378,16383,-28378,16383,-28378,16383, - -28013,16998,-28013,16998,-28013,16998,-28013,16998, - -27636,17605,-27636,17605,-27636,17605,-27636,17605, - -27245,18204,-27245,18204,-27245,18204,-27245,18204, - -26842,18794,-26842,18794,-26842,18794,-26842,18794, - -26425,19375,-26425,19375,-26425,19375,-26425,19375, - -25996,19947,-25996,19947,-25996,19947,-25996,19947, - -25555,20509,-25555,20509,-25555,20509,-25555,20509, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24636,21604,-24636,21604,-24636,21604,-24636,21604, - -24159,22137,-24159,22137,-24159,22137,-24159,22137, - -23670,22658,-23670,22658,-23670,22658,-23670,22658, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22659,23669,-22659,23669,-22659,23669,-22659,23669, - -22138,24158,-22138,24158,-22138,24158,-22138,24158, - -21605,24635,-21605,24635,-21605,24635,-21605,24635, - -21063,25100,-21063,25100,-21063,25100,-21063,25100, - -20510,25554,-20510,25554,-20510,25554,-20510,25554, - -19948,25995,-19948,25995,-19948,25995,-19948,25995, - -19376,26424,-19376,26424,-19376,26424,-19376,26424, - -18795,26841,-18795,26841,-18795,26841,-18795,26841, - -18205,27244,-18205,27244,-18205,27244,-18205,27244, - -17606,27635,-17606,27635,-17606,27635,-17606,27635, - -16999,28012,-16999,28012,-16999,28012,-16999,28012 - }; +static int16_t twa576[191*2*4]; +static int16_t twb576[191*2*4]; void dft576(int16_t *x,int16_t *y,unsigned char scale_flag) // 192 x 3 { @@ -10745,320 +7903,8 @@ void dft576(int16_t *x,int16_t *y,unsigned char scale_flag) // 192 x 3 _m_empty(); }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:299)/600)); -twa2 = zeros(1,2*299); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa600[299*2*4] = {"); -for i=1:2:(2*298) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fclose(fd); - */ -static int16_t twa600[299*2*4] = {32765,-344,32765,-344,32765,-344,32765,-344, - 32759,-687,32759,-687,32759,-687,32759,-687, - 32750,-1030,32750,-1030,32750,-1030,32750,-1030, - 32738,-1373,32738,-1373,32738,-1373,32738,-1373, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32702,-2058,32702,-2058,32702,-2058,32702,-2058, - 32679,-2400,32679,-2400,32679,-2400,32679,-2400, - 32652,-2742,32652,-2742,32652,-2742,32652,-2742, - 32621,-3084,32621,-3084,32621,-3084,32621,-3084, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32549,-3767,32549,-3767,32549,-3767,32549,-3767, - 32508,-4107,32508,-4107,32508,-4107,32508,-4107, - 32463,-4447,32463,-4447,32463,-4447,32463,-4447, - 32415,-4787,32415,-4787,32415,-4787,32415,-4787, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32308,-5465,32308,-5465,32308,-5465,32308,-5465, - 32249,-5803,32249,-5803,32249,-5803,32249,-5803, - 32186,-6140,32186,-6140,32186,-6140,32186,-6140, - 32120,-6477,32120,-6477,32120,-6477,32120,-6477, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31977,-7148,31977,-7148,31977,-7148,31977,-7148, - 31901,-7483,31901,-7483,31901,-7483,31901,-7483, - 31821,-7817,31821,-7817,31821,-7817,31821,-7817, - 31737,-8149,31737,-8149,31737,-8149,31737,-8149, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31559,-8812,31559,-8812,31559,-8812,31559,-8812, - 31465,-9142,31465,-9142,31465,-9142,31465,-9142, - 31368,-9471,31368,-9471,31368,-9471,31368,-9471, - 31267,-9799,31267,-9799,31267,-9799,31267,-9799, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31055,-10452,31055,-10452,31055,-10452,31055,-10452, - 30944,-10776,30944,-10776,30944,-10776,30944,-10776, - 30829,-11100,30829,-11100,30829,-11100,30829,-11100, - 30711,-11422,30711,-11422,30711,-11422,30711,-11422, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30465,-12063,30465,-12063,30465,-12063,30465,-12063, - 30338,-12381,30338,-12381,30338,-12381,30338,-12381, - 30206,-12698,30206,-12698,30206,-12698,30206,-12698, - 30072,-13014,30072,-13014,30072,-13014,30072,-13014, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29792,-13641,29792,-13641,29792,-13641,29792,-13641, - 29648,-13952,29648,-13952,29648,-13952,29648,-13952, - 29500,-14262,29500,-14262,29500,-14262,29500,-14262, - 29349,-14570,29349,-14570,29349,-14570,29349,-14570, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 29038,-15181,29038,-15181,29038,-15181,29038,-15181, - 28877,-15485,28877,-15485,28877,-15485,28877,-15485, - 28713,-15786,28713,-15786,28713,-15786,28713,-15786, - 28547,-16086,28547,-16086,28547,-16086,28547,-16086, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28203,-16680,28203,-16680,28203,-16680,28203,-16680, - 28027,-16975,28027,-16975,28027,-16975,28027,-16975, - 27848,-17267,27848,-17267,27848,-17267,27848,-17267, - 27666,-17558,27666,-17558,27666,-17558,27666,-17558, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27292,-18133,27292,-18133,27292,-18133,27292,-18133, - 27100,-18418,27100,-18418,27100,-18418,27100,-18418, - 26906,-18701,26906,-18701,26906,-18701,26906,-18701, - 26709,-18982,26709,-18982,26709,-18982,26709,-18982, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26305,-19537,26305,-19537,26305,-19537,26305,-19537, - 26099,-19811,26099,-19811,26099,-19811,26099,-19811, - 25891,-20084,25891,-20084,25891,-20084,25891,-20084, - 25679,-20354,25679,-20354,25679,-20354,25679,-20354, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25247,-20887,25247,-20887,25247,-20887,25247,-20887, - 25027,-21150,25027,-21150,25027,-21150,25027,-21150, - 24804,-21411,24804,-21411,24804,-21411,24804,-21411, - 24578,-21670,24578,-21670,24578,-21670,24578,-21670, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24119,-22180,24119,-22180,24119,-22180,24119,-22180, - 23886,-22431,23886,-22431,23886,-22431,23886,-22431, - 23649,-22680,23649,-22680,23649,-22680,23649,-22680, - 23411,-22926,23411,-22926,23411,-22926,23411,-22926, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22925,-23412,22925,-23412,22925,-23412,22925,-23412, - 22679,-23650,22679,-23650,22679,-23650,22679,-23650, - 22430,-23887,22430,-23887,22430,-23887,22430,-23887, - 22179,-24120,22179,-24120,22179,-24120,22179,-24120, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21669,-24579,21669,-24579,21669,-24579,21669,-24579, - 21410,-24805,21410,-24805,21410,-24805,21410,-24805, - 21149,-25028,21149,-25028,21149,-25028,21149,-25028, - 20886,-25248,20886,-25248,20886,-25248,20886,-25248, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20353,-25680,20353,-25680,20353,-25680,20353,-25680, - 20083,-25892,20083,-25892,20083,-25892,20083,-25892, - 19810,-26100,19810,-26100,19810,-26100,19810,-26100, - 19536,-26306,19536,-26306,19536,-26306,19536,-26306, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18981,-26710,18981,-26710,18981,-26710,18981,-26710, - 18700,-26907,18700,-26907,18700,-26907,18700,-26907, - 18417,-27101,18417,-27101,18417,-27101,18417,-27101, - 18132,-27293,18132,-27293,18132,-27293,18132,-27293, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17557,-27667,17557,-27667,17557,-27667,17557,-27667, - 17266,-27849,17266,-27849,17266,-27849,17266,-27849, - 16974,-28028,16974,-28028,16974,-28028,16974,-28028, - 16679,-28204,16679,-28204,16679,-28204,16679,-28204, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16085,-28548,16085,-28548,16085,-28548,16085,-28548, - 15785,-28714,15785,-28714,15785,-28714,15785,-28714, - 15484,-28878,15484,-28878,15484,-28878,15484,-28878, - 15180,-29039,15180,-29039,15180,-29039,15180,-29039, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14569,-29350,14569,-29350,14569,-29350,14569,-29350, - 14261,-29501,14261,-29501,14261,-29501,14261,-29501, - 13951,-29649,13951,-29649,13951,-29649,13951,-29649, - 13640,-29793,13640,-29793,13640,-29793,13640,-29793, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 13013,-30073,13013,-30073,13013,-30073,13013,-30073, - 12697,-30207,12697,-30207,12697,-30207,12697,-30207, - 12380,-30339,12380,-30339,12380,-30339,12380,-30339, - 12062,-30466,12062,-30466,12062,-30466,12062,-30466, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11421,-30712,11421,-30712,11421,-30712,11421,-30712, - 11099,-30830,11099,-30830,11099,-30830,11099,-30830, - 10775,-30945,10775,-30945,10775,-30945,10775,-30945, - 10451,-31056,10451,-31056,10451,-31056,10451,-31056, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9798,-31268,9798,-31268,9798,-31268,9798,-31268, - 9470,-31369,9470,-31369,9470,-31369,9470,-31369, - 9141,-31466,9141,-31466,9141,-31466,9141,-31466, - 8811,-31560,8811,-31560,8811,-31560,8811,-31560, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8148,-31738,8148,-31738,8148,-31738,8148,-31738, - 7816,-31822,7816,-31822,7816,-31822,7816,-31822, - 7482,-31902,7482,-31902,7482,-31902,7482,-31902, - 7147,-31978,7147,-31978,7147,-31978,7147,-31978, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6476,-32121,6476,-32121,6476,-32121,6476,-32121, - 6139,-32187,6139,-32187,6139,-32187,6139,-32187, - 5802,-32250,5802,-32250,5802,-32250,5802,-32250, - 5464,-32309,5464,-32309,5464,-32309,5464,-32309, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4786,-32416,4786,-32416,4786,-32416,4786,-32416, - 4446,-32464,4446,-32464,4446,-32464,4446,-32464, - 4106,-32509,4106,-32509,4106,-32509,4106,-32509, - 3766,-32550,3766,-32550,3766,-32550,3766,-32550, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3083,-32622,3083,-32622,3083,-32622,3083,-32622, - 2741,-32653,2741,-32653,2741,-32653,2741,-32653, - 2399,-32680,2399,-32680,2399,-32680,2399,-32680, - 2057,-32703,2057,-32703,2057,-32703,2057,-32703, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1372,-32739,1372,-32739,1372,-32739,1372,-32739, - 1029,-32751,1029,-32751,1029,-32751,1029,-32751, - 686,-32760,686,-32760,686,-32760,686,-32760, - 343,-32766,343,-32766,343,-32766,343,-32766, - 0,-32767,0,-32767,0,-32767,0,-32767, - -344,-32766,-344,-32766,-344,-32766,-344,-32766, - -687,-32760,-687,-32760,-687,-32760,-687,-32760, - -1030,-32751,-1030,-32751,-1030,-32751,-1030,-32751, - -1373,-32739,-1373,-32739,-1373,-32739,-1373,-32739, - -1715,-32723,-1715,-32723,-1715,-32723,-1715,-32723, - -2058,-32703,-2058,-32703,-2058,-32703,-2058,-32703, - -2400,-32680,-2400,-32680,-2400,-32680,-2400,-32680, - -2742,-32653,-2742,-32653,-2742,-32653,-2742,-32653, - -3084,-32622,-3084,-32622,-3084,-32622,-3084,-32622, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3767,-32550,-3767,-32550,-3767,-32550,-3767,-32550, - -4107,-32509,-4107,-32509,-4107,-32509,-4107,-32509, - -4447,-32464,-4447,-32464,-4447,-32464,-4447,-32464, - -4787,-32416,-4787,-32416,-4787,-32416,-4787,-32416, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5465,-32309,-5465,-32309,-5465,-32309,-5465,-32309, - -5803,-32250,-5803,-32250,-5803,-32250,-5803,-32250, - -6140,-32187,-6140,-32187,-6140,-32187,-6140,-32187, - -6477,-32121,-6477,-32121,-6477,-32121,-6477,-32121, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7148,-31978,-7148,-31978,-7148,-31978,-7148,-31978, - -7483,-31902,-7483,-31902,-7483,-31902,-7483,-31902, - -7817,-31822,-7817,-31822,-7817,-31822,-7817,-31822, - -8149,-31738,-8149,-31738,-8149,-31738,-8149,-31738, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8812,-31560,-8812,-31560,-8812,-31560,-8812,-31560, - -9142,-31466,-9142,-31466,-9142,-31466,-9142,-31466, - -9471,-31369,-9471,-31369,-9471,-31369,-9471,-31369, - -9799,-31268,-9799,-31268,-9799,-31268,-9799,-31268, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10452,-31056,-10452,-31056,-10452,-31056,-10452,-31056, - -10776,-30945,-10776,-30945,-10776,-30945,-10776,-30945, - -11100,-30830,-11100,-30830,-11100,-30830,-11100,-30830, - -11422,-30712,-11422,-30712,-11422,-30712,-11422,-30712, - -11743,-30591,-11743,-30591,-11743,-30591,-11743,-30591, - -12063,-30466,-12063,-30466,-12063,-30466,-12063,-30466, - -12381,-30339,-12381,-30339,-12381,-30339,-12381,-30339, - -12698,-30207,-12698,-30207,-12698,-30207,-12698,-30207, - -13014,-30073,-13014,-30073,-13014,-30073,-13014,-30073, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13641,-29793,-13641,-29793,-13641,-29793,-13641,-29793, - -13952,-29649,-13952,-29649,-13952,-29649,-13952,-29649, - -14262,-29501,-14262,-29501,-14262,-29501,-14262,-29501, - -14570,-29350,-14570,-29350,-14570,-29350,-14570,-29350, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15181,-29039,-15181,-29039,-15181,-29039,-15181,-29039, - -15485,-28878,-15485,-28878,-15485,-28878,-15485,-28878, - -15786,-28714,-15786,-28714,-15786,-28714,-15786,-28714, - -16086,-28548,-16086,-28548,-16086,-28548,-16086,-28548, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16680,-28204,-16680,-28204,-16680,-28204,-16680,-28204, - -16975,-28028,-16975,-28028,-16975,-28028,-16975,-28028, - -17267,-27849,-17267,-27849,-17267,-27849,-17267,-27849, - -17558,-27667,-17558,-27667,-17558,-27667,-17558,-27667, - -17847,-27481,-17847,-27481,-17847,-27481,-17847,-27481, - -18133,-27293,-18133,-27293,-18133,-27293,-18133,-27293, - -18418,-27101,-18418,-27101,-18418,-27101,-18418,-27101, - -18701,-26907,-18701,-26907,-18701,-26907,-18701,-26907, - -18982,-26710,-18982,-26710,-18982,-26710,-18982,-26710, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19537,-26306,-19537,-26306,-19537,-26306,-19537,-26306, - -19811,-26100,-19811,-26100,-19811,-26100,-19811,-26100, - -20084,-25892,-20084,-25892,-20084,-25892,-20084,-25892, - -20354,-25680,-20354,-25680,-20354,-25680,-20354,-25680, - -20621,-25465,-20621,-25465,-20621,-25465,-20621,-25465, - -20887,-25248,-20887,-25248,-20887,-25248,-20887,-25248, - -21150,-25028,-21150,-25028,-21150,-25028,-21150,-25028, - -21411,-24805,-21411,-24805,-21411,-24805,-21411,-24805, - -21670,-24579,-21670,-24579,-21670,-24579,-21670,-24579, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22180,-24120,-22180,-24120,-22180,-24120,-22180,-24120, - -22431,-23887,-22431,-23887,-22431,-23887,-22431,-23887, - -22680,-23650,-22680,-23650,-22680,-23650,-22680,-23650, - -22926,-23412,-22926,-23412,-22926,-23412,-22926,-23412, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23412,-22926,-23412,-22926,-23412,-22926,-23412,-22926, - -23650,-22680,-23650,-22680,-23650,-22680,-23650,-22680, - -23887,-22431,-23887,-22431,-23887,-22431,-23887,-22431, - -24120,-22180,-24120,-22180,-24120,-22180,-24120,-22180, - -24351,-21926,-24351,-21926,-24351,-21926,-24351,-21926, - -24579,-21670,-24579,-21670,-24579,-21670,-24579,-21670, - -24805,-21411,-24805,-21411,-24805,-21411,-24805,-21411, - -25028,-21150,-25028,-21150,-25028,-21150,-25028,-21150, - -25248,-20887,-25248,-20887,-25248,-20887,-25248,-20887, - -25465,-20621,-25465,-20621,-25465,-20621,-25465,-20621, - -25680,-20354,-25680,-20354,-25680,-20354,-25680,-20354, - -25892,-20084,-25892,-20084,-25892,-20084,-25892,-20084, - -26100,-19811,-26100,-19811,-26100,-19811,-26100,-19811, - -26306,-19537,-26306,-19537,-26306,-19537,-26306,-19537, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26710,-18982,-26710,-18982,-26710,-18982,-26710,-18982, - -26907,-18701,-26907,-18701,-26907,-18701,-26907,-18701, - -27101,-18418,-27101,-18418,-27101,-18418,-27101,-18418, - -27293,-18133,-27293,-18133,-27293,-18133,-27293,-18133, - -27481,-17847,-27481,-17847,-27481,-17847,-27481,-17847, - -27667,-17558,-27667,-17558,-27667,-17558,-27667,-17558, - -27849,-17267,-27849,-17267,-27849,-17267,-27849,-17267, - -28028,-16975,-28028,-16975,-28028,-16975,-28028,-16975, - -28204,-16680,-28204,-16680,-28204,-16680,-28204,-16680, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28548,-16086,-28548,-16086,-28548,-16086,-28548,-16086, - -28714,-15786,-28714,-15786,-28714,-15786,-28714,-15786, - -28878,-15485,-28878,-15485,-28878,-15485,-28878,-15485, - -29039,-15181,-29039,-15181,-29039,-15181,-29039,-15181, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29350,-14570,-29350,-14570,-29350,-14570,-29350,-14570, - -29501,-14262,-29501,-14262,-29501,-14262,-29501,-14262, - -29649,-13952,-29649,-13952,-29649,-13952,-29649,-13952, - -29793,-13641,-29793,-13641,-29793,-13641,-29793,-13641, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30073,-13014,-30073,-13014,-30073,-13014,-30073,-13014, - -30207,-12698,-30207,-12698,-30207,-12698,-30207,-12698, - -30339,-12381,-30339,-12381,-30339,-12381,-30339,-12381, - -30466,-12063,-30466,-12063,-30466,-12063,-30466,-12063, - -30591,-11743,-30591,-11743,-30591,-11743,-30591,-11743, - -30712,-11422,-30712,-11422,-30712,-11422,-30712,-11422, - -30830,-11100,-30830,-11100,-30830,-11100,-30830,-11100, - -30945,-10776,-30945,-10776,-30945,-10776,-30945,-10776, - -31056,-10452,-31056,-10452,-31056,-10452,-31056,-10452, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31268,-9799,-31268,-9799,-31268,-9799,-31268,-9799, - -31369,-9471,-31369,-9471,-31369,-9471,-31369,-9471, - -31466,-9142,-31466,-9142,-31466,-9142,-31466,-9142, - -31560,-8812,-31560,-8812,-31560,-8812,-31560,-8812, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31738,-8149,-31738,-8149,-31738,-8149,-31738,-8149, - -31822,-7817,-31822,-7817,-31822,-7817,-31822,-7817, - -31902,-7483,-31902,-7483,-31902,-7483,-31902,-7483, - -31978,-7148,-31978,-7148,-31978,-7148,-31978,-7148, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32121,-6477,-32121,-6477,-32121,-6477,-32121,-6477, - -32187,-6140,-32187,-6140,-32187,-6140,-32187,-6140, - -32250,-5803,-32250,-5803,-32250,-5803,-32250,-5803, - -32309,-5465,-32309,-5465,-32309,-5465,-32309,-5465, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32416,-4787,-32416,-4787,-32416,-4787,-32416,-4787, - -32464,-4447,-32464,-4447,-32464,-4447,-32464,-4447, - -32509,-4107,-32509,-4107,-32509,-4107,-32509,-4107, - -32550,-3767,-32550,-3767,-32550,-3767,-32550,-3767, - -32588,-3426,-32588,-3426,-32588,-3426,-32588,-3426, - -32622,-3084,-32622,-3084,-32622,-3084,-32622,-3084, - -32653,-2742,-32653,-2742,-32653,-2742,-32653,-2742, - -32680,-2400,-32680,-2400,-32680,-2400,-32680,-2400, - -32703,-2058,-32703,-2058,-32703,-2058,-32703,-2058, - -32723,-1715,-32723,-1715,-32723,-1715,-32723,-1715, - -32739,-1373,-32739,-1373,-32739,-1373,-32739,-1373, - -32751,-1030,-32751,-1030,-32751,-1030,-32751,-1030, - -32760,-687,-32760,-687,-32760,-687,-32760,-687, - -32766,-344,-32766,-344,-32766,-344,-32766,-344 - }; + +static int16_t twa600[299*2*4]; void dft600(int16_t *x,int16_t *y,unsigned char scale_flag) // 300 x 2 { @@ -11102,464 +7948,8 @@ void dft600(int16_t *x,int16_t *y,unsigned char scale_flag) // 300 x 2 }; -/* -Twiddles generated with - -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:215)/648)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:215)/648)); -twa2 = zeros(1,2*215); -twb2 = zeros(1,2*215); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa648[215*2*4] = {"); -for i=1:2:(2*214) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb648[215*2*4] = {"); -for i=1:2:(2*214) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); -*/ -static int16_t twa648[215*2*4] = {32765,-318,32765,-318,32765,-318,32765,-318, - 32760,-636,32760,-636,32760,-636,32760,-636, - 32753,-954,32753,-954,32753,-954,32753,-954, - 32742,-1271,32742,-1271,32742,-1271,32742,-1271, - 32728,-1588,32728,-1588,32728,-1588,32728,-1588, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32691,-2223,32691,-2223,32691,-2223,32691,-2223, - 32668,-2540,32668,-2540,32668,-2540,32668,-2540, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32613,-3173,32613,-3173,32613,-3173,32613,-3173, - 32580,-3489,32580,-3489,32580,-3489,32580,-3489, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32507,-4120,32507,-4120,32507,-4120,32507,-4120, - 32465,-4435,32465,-4435,32465,-4435,32465,-4435, - 32421,-4749,32421,-4749,32421,-4749,32421,-4749, - 32373,-5064,32373,-5064,32373,-5064,32373,-5064, - 32322,-5377,32322,-5377,32322,-5377,32322,-5377, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32212,-6003,32212,-6003,32212,-6003,32212,-6003, - 32152,-6315,32152,-6315,32152,-6315,32152,-6315, - 32090,-6627,32090,-6627,32090,-6627,32090,-6627, - 32024,-6937,32024,-6937,32024,-6937,32024,-6937, - 31955,-7248,31955,-7248,31955,-7248,31955,-7248, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31808,-7866,31808,-7866,31808,-7866,31808,-7866, - 31731,-8174,31731,-8174,31731,-8174,31731,-8174, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31566,-8788,31566,-8788,31566,-8788,31566,-8788, - 31480,-9093,31480,-9093,31480,-9093,31480,-9093, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31297,-9702,31297,-9702,31297,-9702,31297,-9702, - 31202,-10005,31202,-10005,31202,-10005,31202,-10005, - 31103,-10307,31103,-10307,31103,-10307,31103,-10307, - 31002,-10608,31002,-10608,31002,-10608,31002,-10608, - 30898,-10908,30898,-10908,30898,-10908,30898,-10908, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30680,-11505,30680,-11505,30680,-11505,30680,-11505, - 30567,-11802,30567,-11802,30567,-11802,30567,-11802, - 30451,-12098,30451,-12098,30451,-12098,30451,-12098, - 30333,-12393,30333,-12393,30333,-12393,30333,-12393, - 30211,-12687,30211,-12687,30211,-12687,30211,-12687, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29959,-13270,29959,-13270,29959,-13270,29959,-13270, - 29829,-13560,29829,-13560,29829,-13560,29829,-13560, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29561,-14136,29561,-14136,29561,-14136,29561,-14136, - 29422,-14422,29422,-14422,29422,-14422,29422,-14422, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29137,-14990,29137,-14990,29137,-14990,29137,-14990, - 28990,-15271,28990,-15271,28990,-15271,28990,-15271, - 28841,-15552,28841,-15552,28841,-15552,28841,-15552, - 28689,-15831,28689,-15831,28689,-15831,28689,-15831, - 28534,-16108,28534,-16108,28534,-16108,28534,-16108, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28216,-16658,28216,-16658,28216,-16658,28216,-16658, - 28054,-16931,28054,-16931,28054,-16931,28054,-16931, - 27888,-17202,27888,-17202,27888,-17202,27888,-17202, - 27720,-17472,27720,-17472,27720,-17472,27720,-17472, - 27549,-17740,27549,-17740,27549,-17740,27549,-17740, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27200,-18271,27200,-18271,27200,-18271,27200,-18271, - 27022,-18534,27022,-18534,27022,-18534,27022,-18534, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26657,-19054,26657,-19054,26657,-19054,26657,-19054, - 26471,-19312,26471,-19312,26471,-19312,26471,-19312, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 26092,-19822,26092,-19822,26092,-19822,26092,-19822, - 25898,-20074,25898,-20074,25898,-20074,25898,-20074, - 25702,-20324,25702,-20324,25702,-20324,25702,-20324, - 25504,-20572,25504,-20572,25504,-20572,25504,-20572, - 25304,-20818,25304,-20818,25304,-20818,25304,-20818, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24895,-21305,24895,-21305,24895,-21305,24895,-21305, - 24687,-21546,24687,-21546,24687,-21546,24687,-21546, - 24477,-21784,24477,-21784,24477,-21784,24477,-21784, - 24265,-22020,24265,-22020,24265,-22020,24265,-22020, - 24050,-22254,24050,-22254,24050,-22254,24050,-22254, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23614,-22717,23614,-22717,23614,-22717,23614,-22717, - 23393,-22945,23393,-22945,23393,-22945,23393,-22945, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22944,-23394,22944,-23394,22944,-23394,22944,-23394, - 22716,-23615,22716,-23615,22716,-23615,22716,-23615, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22253,-24051,22253,-24051,22253,-24051,22253,-24051, - 22019,-24266,22019,-24266,22019,-24266,22019,-24266, - 21783,-24478,21783,-24478,21783,-24478,21783,-24478, - 21545,-24688,21545,-24688,21545,-24688,21545,-24688, - 21304,-24896,21304,-24896,21304,-24896,21304,-24896, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20817,-25305,20817,-25305,20817,-25305,20817,-25305, - 20571,-25505,20571,-25505,20571,-25505,20571,-25505, - 20323,-25703,20323,-25703,20323,-25703,20323,-25703, - 20073,-25899,20073,-25899,20073,-25899,20073,-25899, - 19821,-26093,19821,-26093,19821,-26093,19821,-26093, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19311,-26472,19311,-26472,19311,-26472,19311,-26472, - 19053,-26658,19053,-26658,19053,-26658,19053,-26658, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18533,-27023,18533,-27023,18533,-27023,18533,-27023, - 18270,-27201,18270,-27201,18270,-27201,18270,-27201, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17739,-27550,17739,-27550,17739,-27550,17739,-27550, - 17471,-27721,17471,-27721,17471,-27721,17471,-27721, - 17201,-27889,17201,-27889,17201,-27889,17201,-27889, - 16930,-28055,16930,-28055,16930,-28055,16930,-28055, - 16657,-28217,16657,-28217,16657,-28217,16657,-28217, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16107,-28535,16107,-28535,16107,-28535,16107,-28535, - 15830,-28690,15830,-28690,15830,-28690,15830,-28690, - 15551,-28842,15551,-28842,15551,-28842,15551,-28842, - 15270,-28991,15270,-28991,15270,-28991,15270,-28991, - 14989,-29138,14989,-29138,14989,-29138,14989,-29138, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14421,-29423,14421,-29423,14421,-29423,14421,-29423, - 14135,-29562,14135,-29562,14135,-29562,14135,-29562, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13559,-29830,13559,-29830,13559,-29830,13559,-29830, - 13269,-29960,13269,-29960,13269,-29960,13269,-29960, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12686,-30212,12686,-30212,12686,-30212,12686,-30212, - 12392,-30334,12392,-30334,12392,-30334,12392,-30334, - 12097,-30452,12097,-30452,12097,-30452,12097,-30452, - 11801,-30568,11801,-30568,11801,-30568,11801,-30568, - 11504,-30681,11504,-30681,11504,-30681,11504,-30681, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10907,-30899,10907,-30899,10907,-30899,10907,-30899, - 10607,-31003,10607,-31003,10607,-31003,10607,-31003, - 10306,-31104,10306,-31104,10306,-31104,10306,-31104, - 10004,-31203,10004,-31203,10004,-31203,10004,-31203, - 9701,-31298,9701,-31298,9701,-31298,9701,-31298, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 9092,-31481,9092,-31481,9092,-31481,9092,-31481, - 8787,-31567,8787,-31567,8787,-31567,8787,-31567, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8173,-31732,8173,-31732,8173,-31732,8173,-31732, - 7865,-31809,7865,-31809,7865,-31809,7865,-31809, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 7247,-31956,7247,-31956,7247,-31956,7247,-31956, - 6936,-32025,6936,-32025,6936,-32025,6936,-32025, - 6626,-32091,6626,-32091,6626,-32091,6626,-32091, - 6314,-32153,6314,-32153,6314,-32153,6314,-32153, - 6002,-32213,6002,-32213,6002,-32213,6002,-32213, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5376,-32323,5376,-32323,5376,-32323,5376,-32323, - 5063,-32374,5063,-32374,5063,-32374,5063,-32374, - 4748,-32422,4748,-32422,4748,-32422,4748,-32422, - 4434,-32466,4434,-32466,4434,-32466,4434,-32466, - 4119,-32508,4119,-32508,4119,-32508,4119,-32508, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3488,-32581,3488,-32581,3488,-32581,3488,-32581, - 3172,-32614,3172,-32614,3172,-32614,3172,-32614, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2539,-32669,2539,-32669,2539,-32669,2539,-32669, - 2222,-32692,2222,-32692,2222,-32692,2222,-32692, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1587,-32729,1587,-32729,1587,-32729,1587,-32729, - 1270,-32743,1270,-32743,1270,-32743,1270,-32743, - 953,-32754,953,-32754,953,-32754,953,-32754, - 635,-32761,635,-32761,635,-32761,635,-32761, - 317,-32766,317,-32766,317,-32766,317,-32766, - 0,-32767,0,-32767,0,-32767,0,-32767, - -318,-32766,-318,-32766,-318,-32766,-318,-32766, - -636,-32761,-636,-32761,-636,-32761,-636,-32761, - -954,-32754,-954,-32754,-954,-32754,-954,-32754, - -1271,-32743,-1271,-32743,-1271,-32743,-1271,-32743, - -1588,-32729,-1588,-32729,-1588,-32729,-1588,-32729, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2223,-32692,-2223,-32692,-2223,-32692,-2223,-32692, - -2540,-32669,-2540,-32669,-2540,-32669,-2540,-32669, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3173,-32614,-3173,-32614,-3173,-32614,-3173,-32614, - -3489,-32581,-3489,-32581,-3489,-32581,-3489,-32581, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4120,-32508,-4120,-32508,-4120,-32508,-4120,-32508, - -4435,-32466,-4435,-32466,-4435,-32466,-4435,-32466, - -4749,-32422,-4749,-32422,-4749,-32422,-4749,-32422, - -5064,-32374,-5064,-32374,-5064,-32374,-5064,-32374, - -5377,-32323,-5377,-32323,-5377,-32323,-5377,-32323, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6003,-32213,-6003,-32213,-6003,-32213,-6003,-32213, - -6315,-32153,-6315,-32153,-6315,-32153,-6315,-32153, - -6627,-32091,-6627,-32091,-6627,-32091,-6627,-32091, - -6937,-32025,-6937,-32025,-6937,-32025,-6937,-32025, - -7248,-31956,-7248,-31956,-7248,-31956,-7248,-31956, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -7866,-31809,-7866,-31809,-7866,-31809,-7866,-31809, - -8174,-31732,-8174,-31732,-8174,-31732,-8174,-31732, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8788,-31567,-8788,-31567,-8788,-31567,-8788,-31567, - -9093,-31481,-9093,-31481,-9093,-31481,-9093,-31481, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -9702,-31298,-9702,-31298,-9702,-31298,-9702,-31298, - -10005,-31203,-10005,-31203,-10005,-31203,-10005,-31203, - -10307,-31104,-10307,-31104,-10307,-31104,-10307,-31104, - -10608,-31003,-10608,-31003,-10608,-31003,-10608,-31003, - -10908,-30899,-10908,-30899,-10908,-30899,-10908,-30899, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11505,-30681,-11505,-30681,-11505,-30681,-11505,-30681, - -11802,-30568,-11802,-30568,-11802,-30568,-11802,-30568, - -12098,-30452,-12098,-30452,-12098,-30452,-12098,-30452, - -12393,-30334,-12393,-30334,-12393,-30334,-12393,-30334, - -12687,-30212,-12687,-30212,-12687,-30212,-12687,-30212, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13270,-29960,-13270,-29960,-13270,-29960,-13270,-29960, - -13560,-29830,-13560,-29830,-13560,-29830,-13560,-29830, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14136,-29562,-14136,-29562,-14136,-29562,-14136,-29562, - -14422,-29423,-14422,-29423,-14422,-29423,-14422,-29423, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -14990,-29138,-14990,-29138,-14990,-29138,-14990,-29138, - -15271,-28991,-15271,-28991,-15271,-28991,-15271,-28991, - -15552,-28842,-15552,-28842,-15552,-28842,-15552,-28842, - -15831,-28690,-15831,-28690,-15831,-28690,-15831,-28690, - -16108,-28535,-16108,-28535,-16108,-28535,-16108,-28535 - }; -static int16_t twb648[215*2*4] = {32760,-636,32760,-636,32760,-636,32760,-636, - 32742,-1271,32742,-1271,32742,-1271,32742,-1271, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32668,-2540,32668,-2540,32668,-2540,32668,-2540, - 32613,-3173,32613,-3173,32613,-3173,32613,-3173, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32465,-4435,32465,-4435,32465,-4435,32465,-4435, - 32373,-5064,32373,-5064,32373,-5064,32373,-5064, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32152,-6315,32152,-6315,32152,-6315,32152,-6315, - 32024,-6937,32024,-6937,32024,-6937,32024,-6937, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31731,-8174,31731,-8174,31731,-8174,31731,-8174, - 31566,-8788,31566,-8788,31566,-8788,31566,-8788, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31202,-10005,31202,-10005,31202,-10005,31202,-10005, - 31002,-10608,31002,-10608,31002,-10608,31002,-10608, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30567,-11802,30567,-11802,30567,-11802,30567,-11802, - 30333,-12393,30333,-12393,30333,-12393,30333,-12393, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29829,-13560,29829,-13560,29829,-13560,29829,-13560, - 29561,-14136,29561,-14136,29561,-14136,29561,-14136, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 28990,-15271,28990,-15271,28990,-15271,28990,-15271, - 28689,-15831,28689,-15831,28689,-15831,28689,-15831, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28054,-16931,28054,-16931,28054,-16931,28054,-16931, - 27720,-17472,27720,-17472,27720,-17472,27720,-17472, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27022,-18534,27022,-18534,27022,-18534,27022,-18534, - 26657,-19054,26657,-19054,26657,-19054,26657,-19054, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 25898,-20074,25898,-20074,25898,-20074,25898,-20074, - 25504,-20572,25504,-20572,25504,-20572,25504,-20572, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24687,-21546,24687,-21546,24687,-21546,24687,-21546, - 24265,-22020,24265,-22020,24265,-22020,24265,-22020, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23393,-22945,23393,-22945,23393,-22945,23393,-22945, - 22944,-23394,22944,-23394,22944,-23394,22944,-23394, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22019,-24266,22019,-24266,22019,-24266,22019,-24266, - 21545,-24688,21545,-24688,21545,-24688,21545,-24688, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20571,-25505,20571,-25505,20571,-25505,20571,-25505, - 20073,-25899,20073,-25899,20073,-25899,20073,-25899, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19053,-26658,19053,-26658,19053,-26658,19053,-26658, - 18533,-27023,18533,-27023,18533,-27023,18533,-27023, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17471,-27721,17471,-27721,17471,-27721,17471,-27721, - 16930,-28055,16930,-28055,16930,-28055,16930,-28055, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15830,-28690,15830,-28690,15830,-28690,15830,-28690, - 15270,-28991,15270,-28991,15270,-28991,15270,-28991, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14135,-29562,14135,-29562,14135,-29562,14135,-29562, - 13559,-29830,13559,-29830,13559,-29830,13559,-29830, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12392,-30334,12392,-30334,12392,-30334,12392,-30334, - 11801,-30568,11801,-30568,11801,-30568,11801,-30568, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10607,-31003,10607,-31003,10607,-31003,10607,-31003, - 10004,-31203,10004,-31203,10004,-31203,10004,-31203, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 8787,-31567,8787,-31567,8787,-31567,8787,-31567, - 8173,-31732,8173,-31732,8173,-31732,8173,-31732, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 6936,-32025,6936,-32025,6936,-32025,6936,-32025, - 6314,-32153,6314,-32153,6314,-32153,6314,-32153, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5063,-32374,5063,-32374,5063,-32374,5063,-32374, - 4434,-32466,4434,-32466,4434,-32466,4434,-32466, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3172,-32614,3172,-32614,3172,-32614,3172,-32614, - 2539,-32669,2539,-32669,2539,-32669,2539,-32669, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1270,-32743,1270,-32743,1270,-32743,1270,-32743, - 635,-32761,635,-32761,635,-32761,635,-32761, - 0,-32767,0,-32767,0,-32767,0,-32767, - -636,-32761,-636,-32761,-636,-32761,-636,-32761, - -1271,-32743,-1271,-32743,-1271,-32743,-1271,-32743, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2540,-32669,-2540,-32669,-2540,-32669,-2540,-32669, - -3173,-32614,-3173,-32614,-3173,-32614,-3173,-32614, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4435,-32466,-4435,-32466,-4435,-32466,-4435,-32466, - -5064,-32374,-5064,-32374,-5064,-32374,-5064,-32374, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6315,-32153,-6315,-32153,-6315,-32153,-6315,-32153, - -6937,-32025,-6937,-32025,-6937,-32025,-6937,-32025, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -8174,-31732,-8174,-31732,-8174,-31732,-8174,-31732, - -8788,-31567,-8788,-31567,-8788,-31567,-8788,-31567, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -10005,-31203,-10005,-31203,-10005,-31203,-10005,-31203, - -10608,-31003,-10608,-31003,-10608,-31003,-10608,-31003, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11802,-30568,-11802,-30568,-11802,-30568,-11802,-30568, - -12393,-30334,-12393,-30334,-12393,-30334,-12393,-30334, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13560,-29830,-13560,-29830,-13560,-29830,-13560,-29830, - -14136,-29562,-14136,-29562,-14136,-29562,-14136,-29562, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -15271,-28991,-15271,-28991,-15271,-28991,-15271,-28991, - -15831,-28690,-15831,-28690,-15831,-28690,-15831,-28690, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16931,-28055,-16931,-28055,-16931,-28055,-16931,-28055, - -17472,-27721,-17472,-27721,-17472,-27721,-17472,-27721, - -18006,-27377,-18006,-27377,-18006,-27377,-18006,-27377, - -18534,-27023,-18534,-27023,-18534,-27023,-18534,-27023, - -19054,-26658,-19054,-26658,-19054,-26658,-19054,-26658, - -19568,-26284,-19568,-26284,-19568,-26284,-19568,-26284, - -20074,-25899,-20074,-25899,-20074,-25899,-20074,-25899, - -20572,-25505,-20572,-25505,-20572,-25505,-20572,-25505, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -21546,-24688,-21546,-24688,-21546,-24688,-21546,-24688, - -22020,-24266,-22020,-24266,-22020,-24266,-22020,-24266, - -22487,-23834,-22487,-23834,-22487,-23834,-22487,-23834, - -22945,-23394,-22945,-23394,-22945,-23394,-22945,-23394, - -23394,-22945,-23394,-22945,-23394,-22945,-23394,-22945, - -23834,-22487,-23834,-22487,-23834,-22487,-23834,-22487, - -24266,-22020,-24266,-22020,-24266,-22020,-24266,-22020, - -24688,-21546,-24688,-21546,-24688,-21546,-24688,-21546, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25505,-20572,-25505,-20572,-25505,-20572,-25505,-20572, - -25899,-20074,-25899,-20074,-25899,-20074,-25899,-20074, - -26284,-19568,-26284,-19568,-26284,-19568,-26284,-19568, - -26658,-19054,-26658,-19054,-26658,-19054,-26658,-19054, - -27023,-18534,-27023,-18534,-27023,-18534,-27023,-18534, - -27377,-18006,-27377,-18006,-27377,-18006,-27377,-18006, - -27721,-17472,-27721,-17472,-27721,-17472,-27721,-17472, - -28055,-16931,-28055,-16931,-28055,-16931,-28055,-16931, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28690,-15831,-28690,-15831,-28690,-15831,-28690,-15831, - -28991,-15271,-28991,-15271,-28991,-15271,-28991,-15271, - -29282,-14706,-29282,-14706,-29282,-14706,-29282,-14706, - -29562,-14136,-29562,-14136,-29562,-14136,-29562,-14136, - -29830,-13560,-29830,-13560,-29830,-13560,-29830,-13560, - -30088,-12979,-30088,-12979,-30088,-12979,-30088,-12979, - -30334,-12393,-30334,-12393,-30334,-12393,-30334,-12393, - -30568,-11802,-30568,-11802,-30568,-11802,-30568,-11802, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -31003,-10608,-31003,-10608,-31003,-10608,-31003,-10608, - -31203,-10005,-31203,-10005,-31203,-10005,-31203,-10005, - -31391,-9398,-31391,-9398,-31391,-9398,-31391,-9398, - -31567,-8788,-31567,-8788,-31567,-8788,-31567,-8788, - -31732,-8174,-31732,-8174,-31732,-8174,-31732,-8174, - -31884,-7557,-31884,-7557,-31884,-7557,-31884,-7557, - -32025,-6937,-32025,-6937,-32025,-6937,-32025,-6937, - -32153,-6315,-32153,-6315,-32153,-6315,-32153,-6315, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32374,-5064,-32374,-5064,-32374,-5064,-32374,-5064, - -32466,-4435,-32466,-4435,-32466,-4435,-32466,-4435, - -32546,-3805,-32546,-3805,-32546,-3805,-32546,-3805, - -32614,-3173,-32614,-3173,-32614,-3173,-32614,-3173, - -32669,-2540,-32669,-2540,-32669,-2540,-32669,-2540, - -32712,-1906,-32712,-1906,-32712,-1906,-32712,-1906, - -32743,-1271,-32743,-1271,-32743,-1271,-32743,-1271, - -32761,-636,-32761,-636,-32761,-636,-32761,-636, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32761,635,-32761,635,-32761,635,-32761,635, - -32743,1270,-32743,1270,-32743,1270,-32743,1270, - -32712,1905,-32712,1905,-32712,1905,-32712,1905, - -32669,2539,-32669,2539,-32669,2539,-32669,2539, - -32614,3172,-32614,3172,-32614,3172,-32614,3172, - -32546,3804,-32546,3804,-32546,3804,-32546,3804, - -32466,4434,-32466,4434,-32466,4434,-32466,4434, - -32374,5063,-32374,5063,-32374,5063,-32374,5063, - -32270,5689,-32270,5689,-32270,5689,-32270,5689, - -32153,6314,-32153,6314,-32153,6314,-32153,6314, - -32025,6936,-32025,6936,-32025,6936,-32025,6936, - -31884,7556,-31884,7556,-31884,7556,-31884,7556, - -31732,8173,-31732,8173,-31732,8173,-31732,8173, - -31567,8787,-31567,8787,-31567,8787,-31567,8787, - -31391,9397,-31391,9397,-31391,9397,-31391,9397, - -31203,10004,-31203,10004,-31203,10004,-31203,10004, - -31003,10607,-31003,10607,-31003,10607,-31003,10607, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30568,11801,-30568,11801,-30568,11801,-30568,11801, - -30334,12392,-30334,12392,-30334,12392,-30334,12392, - -30088,12978,-30088,12978,-30088,12978,-30088,12978, - -29830,13559,-29830,13559,-29830,13559,-29830,13559, - -29562,14135,-29562,14135,-29562,14135,-29562,14135, - -29282,14705,-29282,14705,-29282,14705,-29282,14705, - -28991,15270,-28991,15270,-28991,15270,-28991,15270, - -28690,15830,-28690,15830,-28690,15830,-28690,15830, - -28378,16383,-28378,16383,-28378,16383,-28378,16383, - -28055,16930,-28055,16930,-28055,16930,-28055,16930, - -27721,17471,-27721,17471,-27721,17471,-27721,17471, - -27377,18005,-27377,18005,-27377,18005,-27377,18005, - -27023,18533,-27023,18533,-27023,18533,-27023,18533, - -26658,19053,-26658,19053,-26658,19053,-26658,19053, - -26284,19567,-26284,19567,-26284,19567,-26284,19567, - -25899,20073,-25899,20073,-25899,20073,-25899,20073, - -25505,20571,-25505,20571,-25505,20571,-25505,20571, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24688,21545,-24688,21545,-24688,21545,-24688,21545, - -24266,22019,-24266,22019,-24266,22019,-24266,22019, - -23834,22486,-23834,22486,-23834,22486,-23834,22486, - -23394,22944,-23394,22944,-23394,22944,-23394,22944, - -22945,23393,-22945,23393,-22945,23393,-22945,23393, - -22487,23833,-22487,23833,-22487,23833,-22487,23833, - -22020,24265,-22020,24265,-22020,24265,-22020,24265, - -21546,24687,-21546,24687,-21546,24687,-21546,24687, - -21063,25100,-21063,25100,-21063,25100,-21063,25100, - -20572,25504,-20572,25504,-20572,25504,-20572,25504, - -20074,25898,-20074,25898,-20074,25898,-20074,25898, - -19568,26283,-19568,26283,-19568,26283,-19568,26283, - -19054,26657,-19054,26657,-19054,26657,-19054,26657, - -18534,27022,-18534,27022,-18534,27022,-18534,27022, - -18006,27376,-18006,27376,-18006,27376,-18006,27376, - -17472,27720,-17472,27720,-17472,27720,-17472,27720, - -16931,28054,-16931,28054,-16931,28054,-16931,28054 - }; +static int16_t twa648[215*2*4]; +static int16_t twb648[215*2*4]; void dft648(int16_t *x,int16_t *y,unsigned char scale_flag) // 216 x 3 { @@ -11610,583 +8000,10 @@ void dft648(int16_t *x,int16_t *y,unsigned char scale_flag) // 216 x 3 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:179)/720)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:179)/720)); -twc = floor(32767*exp(-sqrt(-1)*2*pi*3*(1:179)/720)); -twa2 = zeros(1,2*179); -twb2 = zeros(1,2*179); -twc2 = zeros(1,2*179); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -twc2(1:2:end) = real(twc); -twc2(2:2:end) = imag(twc); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa720[179*2*4] = {"); -for i=1:2:(2*178) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"\nstatic int16_t twb720[179*2*4] = {"); -for i=1:2:(2*178) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fprintf(fd,"\nstatic int16_t twc720[179*2*4] = {"); -for i=1:2:(2*178) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -fclose(fd); - */ +static int16_t twa720[179*2*4]; +static int16_t twb720[179*2*4]; +static int16_t twc720[179*2*4]; -static int16_t twa720[179*2*4] = {32765,-286,32765,-286,32765,-286,32765,-286, - 32762,-572,32762,-572,32762,-572,32762,-572, - 32755,-858,32755,-858,32755,-858,32755,-858, - 32747,-1144,32747,-1144,32747,-1144,32747,-1144, - 32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32705,-2001,32705,-2001,32705,-2001,32705,-2001, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32616,-3141,32616,-3141,32616,-3141,32616,-3141, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32556,-3710,32556,-3710,32556,-3710,32556,-3710, - 32522,-3994,32522,-3994,32522,-3994,32522,-3994, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32407,-4844,32407,-4844,32407,-4844,32407,-4844, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32317,-5409,32317,-5409,32317,-5409,32317,-5409, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32218,-5972,32218,-5972,32218,-5972,32218,-5972, - 32164,-6253,32164,-6253,32164,-6253,32164,-6253, - 32109,-6533,32109,-6533,32109,-6533,32109,-6533, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31927,-7371,31927,-7371,31927,-7371,31927,-7371, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31793,-7928,31793,-7928,31793,-7928,31793,-7928, - 31723,-8205,31723,-8205,31723,-8205,31723,-8205, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31575,-8757,31575,-8757,31575,-8757,31575,-8757, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31417,-9307,31417,-9307,31417,-9307,31417,-9307, - 31335,-9581,31335,-9581,31335,-9581,31335,-9581, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31073,-10398,31073,-10398,31073,-10398,31073,-10398, - 30981,-10668,30981,-10668,30981,-10668,30981,-10668, - 30887,-10938,30887,-10938,30887,-10938,30887,-10938, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30691,-11476,30691,-11476,30691,-11476,30691,-11476, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30486,-12010,30486,-12010,30486,-12010,30486,-12010, - 30381,-12275,30381,-12275,30381,-12275,30381,-12275, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30162,-12804,30162,-12804,30162,-12804,30162,-12804, - 30049,-13066,30049,-13066,30049,-13066,30049,-13066, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29816,-13589,29816,-13589,29816,-13589,29816,-13589, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29575,-14107,29575,-14107,29575,-14107,29575,-14107, - 29450,-14365,29450,-14365,29450,-14365,29450,-14365, - 29324,-14621,29324,-14621,29324,-14621,29324,-14621, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28796,-15636,28796,-15636,28796,-15636,28796,-15636, - 28658,-15886,28658,-15886,28658,-15886,28658,-15886, - 28518,-16136,28518,-16136,28518,-16136,28518,-16136, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28233,-16631,28233,-16631,28233,-16631,28233,-16631, - 28086,-16877,28086,-16877,28086,-16877,28086,-16877, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27323,-18086,27323,-18086,27323,-18086,27323,-18086, - 27165,-18324,27165,-18324,27165,-18324,27165,-18324, - 27004,-18560,27004,-18560,27004,-18560,27004,-18560, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26676,-19028,26676,-19028,26676,-19028,26676,-19028, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26339,-19491,26339,-19491,26339,-19491,26339,-19491, - 26168,-19720,26168,-19720,26168,-19720,26168,-19720, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25820,-20174,25820,-20174,25820,-20174,25820,-20174, - 25643,-20398,25643,-20398,25643,-20398,25643,-20398, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25283,-20843,25283,-20843,25283,-20843,25283,-20843, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24729,-21498,24729,-21498,24729,-21498,24729,-21498, - 24541,-21713,24541,-21713,24541,-21713,24541,-21713, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 23964,-22348,23964,-22348,23964,-22348,23964,-22348, - 23768,-22556,23768,-22556,23768,-22556,23768,-22556, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23371,-22967,23371,-22967,23371,-22967,23371,-22967, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22966,-23372,22966,-23372,22966,-23372,22966,-23372, - 22761,-23571,22761,-23571,22761,-23571,22761,-23571, - 22555,-23769,22555,-23769,22555,-23769,22555,-23769, - 22347,-23965,22347,-23965,22347,-23965,22347,-23965, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21712,-24542,21712,-24542,21712,-24542,21712,-24542, - 21497,-24730,21497,-24730,21497,-24730,21497,-24730, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20842,-25284,20842,-25284,20842,-25284,20842,-25284, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20397,-25644,20397,-25644,20397,-25644,20397,-25644, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19719,-26169,19719,-26169,19719,-26169,19719,-26169, - 19490,-26340,19490,-26340,19490,-26340,19490,-26340, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 19027,-26677,19027,-26677,19027,-26677,19027,-26677, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18559,-27005,18559,-27005,18559,-27005,18559,-27005, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 18085,-27324,18085,-27324,18085,-27324,18085,-27324, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 17363,-27788,17363,-27788,17363,-27788,17363,-27788, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16876,-28087,16876,-28087,16876,-28087,16876,-28087, - 16630,-28234,16630,-28234,16630,-28234,16630,-28234, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16135,-28519,16135,-28519,16135,-28519,16135,-28519, - 15885,-28659,15885,-28659,15885,-28659,15885,-28659, - 15635,-28797,15635,-28797,15635,-28797,15635,-28797, - 15383,-28932,15383,-28932,15383,-28932,15383,-28932, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14620,-29325,14620,-29325,14620,-29325,14620,-29325, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 14106,-29576,14106,-29576,14106,-29576,14106,-29576, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13588,-29817,13588,-29817,13588,-29817,13588,-29817, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 13065,-30050,13065,-30050,13065,-30050,13065,-30050, - 12803,-30163,12803,-30163,12803,-30163,12803,-30163, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 12009,-30487,12009,-30487,12009,-30487,12009,-30487, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11475,-30692,11475,-30692,11475,-30692,11475,-30692, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10937,-30888,10937,-30888,10937,-30888,10937,-30888, - 10667,-30982,10667,-30982,10667,-30982,10667,-30982, - 10397,-31074,10397,-31074,10397,-31074,10397,-31074, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 9580,-31336,9580,-31336,9580,-31336,9580,-31336, - 9306,-31418,9306,-31418,9306,-31418,9306,-31418, - 9031,-31498,9031,-31498,9031,-31498,9031,-31498, - 8756,-31576,8756,-31576,8756,-31576,8756,-31576, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8204,-31724,8204,-31724,8204,-31724,8204,-31724, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 7370,-31928,7370,-31928,7370,-31928,7370,-31928, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6532,-32110,6532,-32110,6532,-32110,6532,-32110, - 6252,-32165,6252,-32165,6252,-32165,6252,-32165, - 5971,-32219,5971,-32219,5971,-32219,5971,-32219, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5408,-32318,5408,-32318,5408,-32318,5408,-32318, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4843,-32408,4843,-32408,4843,-32408,4843,-32408, - 4560,-32449,4560,-32449,4560,-32449,4560,-32449, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3993,-32523,3993,-32523,3993,-32523,3993,-32523, - 3709,-32557,3709,-32557,3709,-32557,3709,-32557, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3140,-32617,3140,-32617,3140,-32617,3140,-32617, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 2285,-32688,2285,-32688,2285,-32688,2285,-32688, - 2000,-32706,2000,-32706,2000,-32706,2000,-32706, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 857,-32756,857,-32756,857,-32756,857,-32756, - 571,-32763,571,-32763,571,-32763,571,-32763, - 285,-32766,285,-32766,285,-32766,285,-32766 - }; - -static int16_t twb720[179*2*4] = {32762,-572,32762,-572,32762,-572,32762,-572, - 32747,-1144,32747,-1144,32747,-1144,32747,-1144, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32522,-3994,32522,-3994,32522,-3994,32522,-3994, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32164,-6253,32164,-6253,32164,-6253,32164,-6253, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31927,-7371,31927,-7371,31927,-7371,31927,-7371, - 31793,-7928,31793,-7928,31793,-7928,31793,-7928, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31335,-9581,31335,-9581,31335,-9581,31335,-9581, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 30981,-10668,30981,-10668,30981,-10668,30981,-10668, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30381,-12275,30381,-12275,30381,-12275,30381,-12275, - 30162,-12804,30162,-12804,30162,-12804,30162,-12804, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29450,-14365,29450,-14365,29450,-14365,29450,-14365, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28658,-15886,28658,-15886,28658,-15886,28658,-15886, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28086,-16877,28086,-16877,28086,-16877,28086,-16877, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27165,-18324,27165,-18324,27165,-18324,27165,-18324, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26168,-19720,26168,-19720,26168,-19720,26168,-19720, - 25820,-20174,25820,-20174,25820,-20174,25820,-20174, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24729,-21498,24729,-21498,24729,-21498,24729,-21498, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 23964,-22348,23964,-22348,23964,-22348,23964,-22348, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22761,-23571,22761,-23571,22761,-23571,22761,-23571, - 22347,-23965,22347,-23965,22347,-23965,22347,-23965, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21497,-24730,21497,-24730,21497,-24730,21497,-24730, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19719,-26169,19719,-26169,19719,-26169,19719,-26169, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17363,-27788,17363,-27788,17363,-27788,17363,-27788, - 16876,-28087,16876,-28087,16876,-28087,16876,-28087, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15885,-28659,15885,-28659,15885,-28659,15885,-28659, - 15383,-28932,15383,-28932,15383,-28932,15383,-28932, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12803,-30163,12803,-30163,12803,-30163,12803,-30163, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10667,-30982,10667,-30982,10667,-30982,10667,-30982, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9580,-31336,9580,-31336,9580,-31336,9580,-31336, - 9031,-31498,9031,-31498,9031,-31498,9031,-31498, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7370,-31928,7370,-31928,7370,-31928,7370,-31928, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6252,-32165,6252,-32165,6252,-32165,6252,-32165, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4560,-32449,4560,-32449,4560,-32449,4560,-32449, - 3993,-32523,3993,-32523,3993,-32523,3993,-32523, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2285,-32688,2285,-32688,2285,-32688,2285,-32688, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 571,-32763,571,-32763,571,-32763,571,-32763, - 0,-32767,0,-32767,0,-32767,0,-32767, - -572,-32763,-572,-32763,-572,-32763,-572,-32763, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -1715,-32723,-1715,-32723,-1715,-32723,-1715,-32723, - -2286,-32688,-2286,-32688,-2286,-32688,-2286,-32688, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3994,-32523,-3994,-32523,-3994,-32523,-3994,-32523, - -4561,-32449,-4561,-32449,-4561,-32449,-4561,-32449, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6253,-32165,-6253,-32165,-6253,-32165,-6253,-32165, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7371,-31928,-7371,-31928,-7371,-31928,-7371,-31928, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -9032,-31498,-9032,-31498,-9032,-31498,-9032,-31498, - -9581,-31336,-9581,-31336,-9581,-31336,-9581,-31336, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10668,-30982,-10668,-30982,-10668,-30982,-10668,-30982, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11743,-30591,-11743,-30591,-11743,-30591,-11743,-30591, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -12804,-30163,-12804,-30163,-12804,-30163,-12804,-30163, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15384,-28932,-15384,-28932,-15384,-28932,-15384,-28932, - -15886,-28659,-15886,-28659,-15886,-28659,-15886,-28659, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16877,-28087,-16877,-28087,-16877,-28087,-16877,-28087, - -17364,-27788,-17364,-27788,-17364,-27788,-17364,-27788, - -17847,-27481,-17847,-27481,-17847,-27481,-17847,-27481, - -18324,-27166,-18324,-27166,-18324,-27166,-18324,-27166, - -18795,-26842,-18795,-26842,-18795,-26842,-18795,-26842, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19720,-26169,-19720,-26169,-19720,-26169,-19720,-26169, - -20174,-25821,-20174,-25821,-20174,-25821,-20174,-25821, - -20621,-25465,-20621,-25465,-20621,-25465,-20621,-25465, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -21498,-24730,-21498,-24730,-21498,-24730,-21498,-24730, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22348,-23965,-22348,-23965,-22348,-23965,-22348,-23965, - -22762,-23571,-22762,-23571,-22762,-23571,-22762,-23571, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23571,-22762,-23571,-22762,-23571,-22762,-23571,-22762, - -23965,-22348,-23965,-22348,-23965,-22348,-23965,-22348, - -24351,-21926,-24351,-21926,-24351,-21926,-24351,-21926, - -24730,-21498,-24730,-21498,-24730,-21498,-24730,-21498, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25465,-20621,-25465,-20621,-25465,-20621,-25465,-20621, - -25821,-20174,-25821,-20174,-25821,-20174,-25821,-20174, - -26169,-19720,-26169,-19720,-26169,-19720,-26169,-19720, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26842,-18795,-26842,-18795,-26842,-18795,-26842,-18795, - -27166,-18324,-27166,-18324,-27166,-18324,-27166,-18324, - -27481,-17847,-27481,-17847,-27481,-17847,-27481,-17847, - -27788,-17364,-27788,-17364,-27788,-17364,-27788,-17364, - -28087,-16877,-28087,-16877,-28087,-16877,-28087,-16877, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28659,-15886,-28659,-15886,-28659,-15886,-28659,-15886, - -28932,-15384,-28932,-15384,-28932,-15384,-28932,-15384, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29451,-14365,-29451,-14365,-29451,-14365,-29451,-14365, - -29697,-13848,-29697,-13848,-29697,-13848,-29697,-13848, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30163,-12804,-30163,-12804,-30163,-12804,-30163,-12804, - -30382,-12275,-30382,-12275,-30382,-12275,-30382,-12275, - -30591,-11743,-30591,-11743,-30591,-11743,-30591,-11743, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -30982,-10668,-30982,-10668,-30982,-10668,-30982,-10668, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31336,-9581,-31336,-9581,-31336,-9581,-31336,-9581, - -31498,-9032,-31498,-9032,-31498,-9032,-31498,-9032, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31794,-7928,-31794,-7928,-31794,-7928,-31794,-7928, - -31928,-7371,-31928,-7371,-31928,-7371,-31928,-7371, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32165,-6253,-32165,-6253,-32165,-6253,-32165,-6253, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32449,-4561,-32449,-4561,-32449,-4561,-32449,-4561, - -32523,-3994,-32523,-3994,-32523,-3994,-32523,-3994, - -32588,-3426,-32588,-3426,-32588,-3426,-32588,-3426, - -32643,-2856,-32643,-2856,-32643,-2856,-32643,-2856, - -32688,-2286,-32688,-2286,-32688,-2286,-32688,-2286, - -32723,-1715,-32723,-1715,-32723,-1715,-32723,-1715, - -32748,-1144,-32748,-1144,-32748,-1144,-32748,-1144, - -32763,-572,-32763,-572,-32763,-572,-32763,-572 - }; - -static int16_t twc720[179*2*4] = {32755,-858,32755,-858,32755,-858,32755,-858, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32218,-5972,32218,-5972,32218,-5972,32218,-5972, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31417,-9307,31417,-9307,31417,-9307,31417,-9307, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 30887,-10938,30887,-10938,30887,-10938,30887,-10938, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29575,-14107,29575,-14107,29575,-14107,29575,-14107, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28796,-15636,28796,-15636,28796,-15636,28796,-15636, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27004,-18560,27004,-18560,27004,-18560,27004,-18560, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 23768,-22556,23768,-22556,23768,-22556,23768,-22556, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22555,-23769,22555,-23769,22555,-23769,22555,-23769, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18559,-27005,18559,-27005,18559,-27005,18559,-27005, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15635,-28797,15635,-28797,15635,-28797,15635,-28797, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14106,-29576,14106,-29576,14106,-29576,14106,-29576, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 10937,-30888,10937,-30888,10937,-30888,10937,-30888, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9306,-31418,9306,-31418,9306,-31418,9306,-31418, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 5971,-32219,5971,-32219,5971,-32219,5971,-32219, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 857,-32756,857,-32756,857,-32756,857,-32756, - 0,-32767,0,-32767,0,-32767,0,-32767, - -858,-32756,-858,-32756,-858,-32756,-858,-32756, - -1715,-32723,-1715,-32723,-1715,-32723,-1715,-32723, - -2571,-32666,-2571,-32666,-2571,-32666,-2571,-32666, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5972,-32219,-5972,-32219,-5972,-32219,-5972,-32219, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7650,-31862,-7650,-31862,-7650,-31862,-7650,-31862, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -9307,-31418,-9307,-31418,-9307,-31418,-9307,-31418, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10938,-30888,-10938,-30888,-10938,-30888,-10938,-30888, - -11743,-30591,-11743,-30591,-11743,-30591,-11743,-30591, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -14107,-29576,-14107,-29576,-14107,-29576,-14107,-29576, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15636,-28797,-15636,-28797,-15636,-28797,-15636,-28797, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -17121,-27939,-17121,-27939,-17121,-27939,-17121,-27939, - -17847,-27481,-17847,-27481,-17847,-27481,-17847,-27481, - -18560,-27005,-18560,-27005,-18560,-27005,-18560,-27005, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -20621,-25465,-20621,-25465,-20621,-25465,-20621,-25465, - -21281,-24917,-21281,-24917,-21281,-24917,-21281,-24917, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22556,-23769,-22556,-23769,-22556,-23769,-22556,-23769, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23769,-22556,-23769,-22556,-23769,-22556,-23769,-22556, - -24351,-21926,-24351,-21926,-24351,-21926,-24351,-21926, - -24917,-21281,-24917,-21281,-24917,-21281,-24917,-21281, - -25465,-20621,-25465,-20621,-25465,-20621,-25465,-20621, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -27005,-18560,-27005,-18560,-27005,-18560,-27005,-18560, - -27481,-17847,-27481,-17847,-27481,-17847,-27481,-17847, - -27939,-17121,-27939,-17121,-27939,-17121,-27939,-17121, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28797,-15636,-28797,-15636,-28797,-15636,-28797,-15636, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29576,-14107,-29576,-14107,-29576,-14107,-29576,-14107, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30591,-11743,-30591,-11743,-30591,-11743,-30591,-11743, - -30888,-10938,-30888,-10938,-30888,-10938,-30888,-10938, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31418,-9307,-31418,-9307,-31418,-9307,-31418,-9307, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31862,-7650,-31862,-7650,-31862,-7650,-31862,-7650, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32219,-5972,-32219,-5972,-32219,-5972,-32219,-5972, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32588,-3426,-32588,-3426,-32588,-3426,-32588,-3426, - -32666,-2571,-32666,-2571,-32666,-2571,-32666,-2571, - -32723,-1715,-32723,-1715,-32723,-1715,-32723,-1715, - -32756,-858,-32756,-858,-32756,-858,-32756,-858, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32756,857,-32756,857,-32756,857,-32756,857, - -32723,1714,-32723,1714,-32723,1714,-32723,1714, - -32666,2570,-32666,2570,-32666,2570,-32666,2570, - -32588,3425,-32588,3425,-32588,3425,-32588,3425, - -32487,4276,-32487,4276,-32487,4276,-32487,4276, - -32364,5125,-32364,5125,-32364,5125,-32364,5125, - -32219,5971,-32219,5971,-32219,5971,-32219,5971, - -32051,6812,-32051,6812,-32051,6812,-32051,6812, - -31862,7649,-31862,7649,-31862,7649,-31862,7649, - -31651,8480,-31651,8480,-31651,8480,-31651,8480, - -31418,9306,-31418,9306,-31418,9306,-31418,9306, - -31164,10125,-31164,10125,-31164,10125,-31164,10125, - -30888,10937,-30888,10937,-30888,10937,-30888,10937, - -30591,11742,-30591,11742,-30591,11742,-30591,11742, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -29935,13327,-29935,13327,-29935,13327,-29935,13327, - -29576,14106,-29576,14106,-29576,14106,-29576,14106, - -29196,14875,-29196,14875,-29196,14875,-29196,14875, - -28797,15635,-28797,15635,-28797,15635,-28797,15635, - -28378,16383,-28378,16383,-28378,16383,-28378,16383, - -27939,17120,-27939,17120,-27939,17120,-27939,17120, - -27481,17846,-27481,17846,-27481,17846,-27481,17846, - -27005,18559,-27005,18559,-27005,18559,-27005,18559, - -26510,19259,-26510,19259,-26510,19259,-26510,19259, - -25996,19947,-25996,19947,-25996,19947,-25996,19947, - -25465,20620,-25465,20620,-25465,20620,-25465,20620, - -24917,21280,-24917,21280,-24917,21280,-24917,21280, - -24351,21925,-24351,21925,-24351,21925,-24351,21925, - -23769,22555,-23769,22555,-23769,22555,-23769,22555, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22556,23768,-22556,23768,-22556,23768,-22556,23768, - -21926,24350,-21926,24350,-21926,24350,-21926,24350, - -21281,24916,-21281,24916,-21281,24916,-21281,24916, - -20621,25464,-20621,25464,-20621,25464,-20621,25464, - -19948,25995,-19948,25995,-19948,25995,-19948,25995, - -19260,26509,-19260,26509,-19260,26509,-19260,26509, - -18560,27004,-18560,27004,-18560,27004,-18560,27004, - -17847,27480,-17847,27480,-17847,27480,-17847,27480, - -17121,27938,-17121,27938,-17121,27938,-17121,27938, - -16384,28377,-16384,28377,-16384,28377,-16384,28377, - -15636,28796,-15636,28796,-15636,28796,-15636,28796, - -14876,29195,-14876,29195,-14876,29195,-14876,29195, - -14107,29575,-14107,29575,-14107,29575,-14107,29575, - -13328,29934,-13328,29934,-13328,29934,-13328,29934, - -12540,30272,-12540,30272,-12540,30272,-12540,30272, - -11743,30590,-11743,30590,-11743,30590,-11743,30590, - -10938,30887,-10938,30887,-10938,30887,-10938,30887, - -10126,31163,-10126,31163,-10126,31163,-10126,31163, - -9307,31417,-9307,31417,-9307,31417,-9307,31417, - -8481,31650,-8481,31650,-8481,31650,-8481,31650, - -7650,31861,-7650,31861,-7650,31861,-7650,31861, - -6813,32050,-6813,32050,-6813,32050,-6813,32050, - -5972,32218,-5972,32218,-5972,32218,-5972,32218, - -5126,32363,-5126,32363,-5126,32363,-5126,32363, - -4277,32486,-4277,32486,-4277,32486,-4277,32486, - -3426,32587,-3426,32587,-3426,32587,-3426,32587, - -2571,32665,-2571,32665,-2571,32665,-2571,32665, - -1715,32722,-1715,32722,-1715,32722,-1715,32722, - -858,32755,-858,32755,-858,32755,-858,32755 - }; void dft720(int16_t *x,int16_t *y,unsigned char scale_flag) // 180 x 4 { @@ -12248,609 +8065,62 @@ static int16_t twc768[191*2*4]; void dft768(int16_t *x,int16_t *y,unsigned char scale_flag) { // 192x 4; + int i,j; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa768[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb768[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc768[0]; + simd_q15_t x2128[768];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[768];//=&ytmp128array2[0]; + + + + for (i=0,j=0; i<192; i++,j+=4) { + x2128[i] = x128[j]; + x2128[i+192] = x128[j+1]; + x2128[i+384] = x128[j+2]; + x2128[i+576] = x128[j+3]; + } + + dft192((int16_t *)x2128,(int16_t *)ytmp128,1); + dft192((int16_t *)(x2128+192),(int16_t *)(ytmp128+192),1); + dft192((int16_t *)(x2128+384),(int16_t *)(ytmp128+384),1); + dft192((int16_t *)(x2128+576),(int16_t *)(ytmp128+576),1); + + bfly4_tw1(ytmp128,ytmp128+192,ytmp128+384,ytmp128+576,y128,y128+192,y128+384,y128+576); + + for (i=1,j=0; i<192; i++,j++) { + bfly4(ytmp128+i, + ytmp128+192+i, + ytmp128+384+i, + ytmp128+576+i, + y128+i, + y128+192+i, + y128+384+i, + y128+576+i, + twa128+j, + twb128+j, + twc128+j); + } + + if (scale_flag==1) { + norm128 = set1_int16(16384);//dft_norm_table[13]); + + for (i=0; i<768; i++) { + y128[i] = mulhi_int16(y128[i],norm128); + } + } + + _mm_empty(); + _m_empty(); + } -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:287)/864)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:287)/864)); -twa2 = zeros(1,2*287); -twb2 = zeros(1,2*287); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa864[287*2*4] = {"); -for i=1:2:(2*286) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb864[287*2*4] = {"); -for i=1:2:(2*286) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); -*/ -static int16_t twa864[287*2*4] = {32766,-239,32766,-239,32766,-239,32766,-239, - 32763,-477,32763,-477,32763,-477,32763,-477, - 32759,-715,32759,-715,32759,-715,32759,-715, - 32753,-954,32753,-954,32753,-954,32753,-954, - 32745,-1192,32745,-1192,32745,-1192,32745,-1192, - 32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32724,-1668,32724,-1668,32724,-1668,32724,-1668, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32680,-2381,32680,-2381,32680,-2381,32680,-2381, - 32662,-2619,32662,-2619,32662,-2619,32662,-2619, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32620,-3094,32620,-3094,32620,-3094,32620,-3094, - 32597,-3331,32597,-3331,32597,-3331,32597,-3331, - 32572,-3568,32572,-3568,32572,-3568,32572,-3568, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32516,-4041,32516,-4041,32516,-4041,32516,-4041, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32454,-4514,32454,-4514,32454,-4514,32454,-4514, - 32421,-4749,32421,-4749,32421,-4749,32421,-4749, - 32385,-4985,32385,-4985,32385,-4985,32385,-4985, - 32348,-5221,32348,-5221,32348,-5221,32348,-5221, - 32309,-5456,32309,-5456,32309,-5456,32309,-5456, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32226,-5925,32226,-5925,32226,-5925,32226,-5925, - 32183,-6159,32183,-6159,32183,-6159,32183,-6159, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32090,-6627,32090,-6627,32090,-6627,32090,-6627, - 32041,-6860,32041,-6860,32041,-6860,32041,-6860, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31937,-7325,31937,-7325,31937,-7325,31937,-7325, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31827,-7789,31827,-7789,31827,-7789,31827,-7789, - 31770,-8020,31770,-8020,31770,-8020,31770,-8020, - 31711,-8251,31711,-8251,31711,-8251,31711,-8251, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31587,-8711,31587,-8711,31587,-8711,31587,-8711, - 31523,-8941,31523,-8941,31523,-8941,31523,-8941, - 31457,-9170,31457,-9170,31457,-9170,31457,-9170, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31321,-9626,31321,-9626,31321,-9626,31321,-9626, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 31177,-10081,31177,-10081,31177,-10081,31177,-10081, - 31103,-10307,31103,-10307,31103,-10307,31103,-10307, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30950,-10758,30950,-10758,30950,-10758,30950,-10758, - 30871,-10983,30871,-10983,30871,-10983,30871,-10983, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30708,-11431,30708,-11431,30708,-11431,30708,-11431, - 30624,-11654,30624,-11654,30624,-11654,30624,-11654, - 30539,-11877,30539,-11877,30539,-11877,30539,-11877, - 30451,-12098,30451,-12098,30451,-12098,30451,-12098, - 30363,-12319,30363,-12319,30363,-12319,30363,-12319, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30180,-12760,30180,-12760,30180,-12760,30180,-12760, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29992,-13197,29992,-13197,29992,-13197,29992,-13197, - 29895,-13415,29895,-13415,29895,-13415,29895,-13415, - 29796,-13632,29796,-13632,29796,-13632,29796,-13632, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29595,-14064,29595,-14064,29595,-14064,29595,-14064, - 29492,-14279,29492,-14279,29492,-14279,29492,-14279, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29173,-14919,29173,-14919,29173,-14919,29173,-14919, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28953,-15342,28953,-15342,28953,-15342,28953,-15342, - 28841,-15552,28841,-15552,28841,-15552,28841,-15552, - 28727,-15761,28727,-15761,28727,-15761,28727,-15761, - 28612,-15970,28612,-15970,28612,-15970,28612,-15970, - 28495,-16177,28495,-16177,28495,-16177,28495,-16177, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28257,-16590,28257,-16590,28257,-16590,28257,-16590, - 28135,-16795,28135,-16795,28135,-16795,28135,-16795, - 28012,-16999,28012,-16999,28012,-16999,28012,-16999, - 27888,-17202,27888,-17202,27888,-17202,27888,-17202, - 27762,-17405,27762,-17405,27762,-17405,27762,-17405, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 27506,-17807,27506,-17807,27506,-17807,27506,-17807, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 27111,-18403,27111,-18403,27111,-18403,27111,-18403, - 26977,-18599,26977,-18599,26977,-18599,26977,-18599, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26703,-18990,26703,-18990,26703,-18990,26703,-18990, - 26564,-19183,26564,-19183,26564,-19183,26564,-19183, - 26424,-19376,26424,-19376,26424,-19376,26424,-19376, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 26140,-19758,26140,-19758,26140,-19758,26140,-19758, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25850,-20136,25850,-20136,25850,-20136,25850,-20136, - 25702,-20324,25702,-20324,25702,-20324,25702,-20324, - 25554,-20510,25554,-20510,25554,-20510,25554,-20510, - 25404,-20695,25404,-20695,25404,-20695,25404,-20695, - 25253,-20880,25253,-20880,25253,-20880,25253,-20880, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24947,-21245,24947,-21245,24947,-21245,24947,-21245, - 24791,-21426,24791,-21426,24791,-21426,24791,-21426, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24477,-21784,24477,-21784,24477,-21784,24477,-21784, - 24318,-21961,24318,-21961,24318,-21961,24318,-21961, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 23996,-22313,23996,-22313,23996,-22313,23996,-22313, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23669,-22659,23669,-22659,23669,-22659,23669,-22659, - 23504,-22831,23504,-22831,23504,-22831,23504,-22831, - 23337,-23001,23337,-23001,23337,-23001,23337,-23001, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 23000,-23338,23000,-23338,23000,-23338,23000,-23338, - 22830,-23505,22830,-23505,22830,-23505,22830,-23505, - 22658,-23670,22658,-23670,22658,-23670,22658,-23670, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22312,-23997,22312,-23997,22312,-23997,22312,-23997, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 21960,-24319,21960,-24319,21960,-24319,21960,-24319, - 21783,-24478,21783,-24478,21783,-24478,21783,-24478, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21425,-24792,21425,-24792,21425,-24792,21425,-24792, - 21244,-24948,21244,-24948,21244,-24948,21244,-24948, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20879,-25254,20879,-25254,20879,-25254,20879,-25254, - 20694,-25405,20694,-25405,20694,-25405,20694,-25405, - 20509,-25555,20509,-25555,20509,-25555,20509,-25555, - 20323,-25703,20323,-25703,20323,-25703,20323,-25703, - 20135,-25851,20135,-25851,20135,-25851,20135,-25851, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19757,-26141,19757,-26141,19757,-26141,19757,-26141, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19375,-26425,19375,-26425,19375,-26425,19375,-26425, - 19182,-26565,19182,-26565,19182,-26565,19182,-26565, - 18989,-26704,18989,-26704,18989,-26704,18989,-26704, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18598,-26978,18598,-26978,18598,-26978,18598,-26978, - 18402,-27112,18402,-27112,18402,-27112,18402,-27112, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17806,-27507,17806,-27507,17806,-27507,17806,-27507, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 17404,-27763,17404,-27763,17404,-27763,17404,-27763, - 17201,-27889,17201,-27889,17201,-27889,17201,-27889, - 16998,-28013,16998,-28013,16998,-28013,16998,-28013, - 16794,-28136,16794,-28136,16794,-28136,16794,-28136, - 16589,-28258,16589,-28258,16589,-28258,16589,-28258, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16176,-28496,16176,-28496,16176,-28496,16176,-28496, - 15969,-28613,15969,-28613,15969,-28613,15969,-28613, - 15760,-28728,15760,-28728,15760,-28728,15760,-28728, - 15551,-28842,15551,-28842,15551,-28842,15551,-28842, - 15341,-28954,15341,-28954,15341,-28954,15341,-28954, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 14918,-29174,14918,-29174,14918,-29174,14918,-29174, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14278,-29493,14278,-29493,14278,-29493,14278,-29493, - 14063,-29596,14063,-29596,14063,-29596,14063,-29596, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13631,-29797,13631,-29797,13631,-29797,13631,-29797, - 13414,-29896,13414,-29896,13414,-29896,13414,-29896, - 13196,-29993,13196,-29993,13196,-29993,13196,-29993, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12759,-30181,12759,-30181,12759,-30181,12759,-30181, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12318,-30364,12318,-30364,12318,-30364,12318,-30364, - 12097,-30452,12097,-30452,12097,-30452,12097,-30452, - 11876,-30540,11876,-30540,11876,-30540,11876,-30540, - 11653,-30625,11653,-30625,11653,-30625,11653,-30625, - 11430,-30709,11430,-30709,11430,-30709,11430,-30709, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10982,-30872,10982,-30872,10982,-30872,10982,-30872, - 10757,-30951,10757,-30951,10757,-30951,10757,-30951, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10306,-31104,10306,-31104,10306,-31104,10306,-31104, - 10080,-31178,10080,-31178,10080,-31178,10080,-31178, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 9625,-31322,9625,-31322,9625,-31322,9625,-31322, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 9169,-31458,9169,-31458,9169,-31458,9169,-31458, - 8940,-31524,8940,-31524,8940,-31524,8940,-31524, - 8710,-31588,8710,-31588,8710,-31588,8710,-31588, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8250,-31712,8250,-31712,8250,-31712,8250,-31712, - 8019,-31771,8019,-31771,8019,-31771,8019,-31771, - 7788,-31828,7788,-31828,7788,-31828,7788,-31828, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 7324,-31938,7324,-31938,7324,-31938,7324,-31938, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 6859,-32042,6859,-32042,6859,-32042,6859,-32042, - 6626,-32091,6626,-32091,6626,-32091,6626,-32091, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 6158,-32184,6158,-32184,6158,-32184,6158,-32184, - 5924,-32227,5924,-32227,5924,-32227,5924,-32227, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5455,-32310,5455,-32310,5455,-32310,5455,-32310, - 5220,-32349,5220,-32349,5220,-32349,5220,-32349, - 4984,-32386,4984,-32386,4984,-32386,4984,-32386, - 4748,-32422,4748,-32422,4748,-32422,4748,-32422, - 4513,-32455,4513,-32455,4513,-32455,4513,-32455, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 4040,-32517,4040,-32517,4040,-32517,4040,-32517, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3567,-32573,3567,-32573,3567,-32573,3567,-32573, - 3330,-32598,3330,-32598,3330,-32598,3330,-32598, - 3093,-32621,3093,-32621,3093,-32621,3093,-32621, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2618,-32663,2618,-32663,2618,-32663,2618,-32663, - 2380,-32681,2380,-32681,2380,-32681,2380,-32681, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1667,-32725,1667,-32725,1667,-32725,1667,-32725, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 1191,-32746,1191,-32746,1191,-32746,1191,-32746, - 953,-32754,953,-32754,953,-32754,953,-32754, - 714,-32760,714,-32760,714,-32760,714,-32760, - 476,-32764,476,-32764,476,-32764,476,-32764, - 238,-32767,238,-32767,238,-32767,238,-32767, - 0,-32767,0,-32767,0,-32767,0,-32767, - -239,-32767,-239,-32767,-239,-32767,-239,-32767, - -477,-32764,-477,-32764,-477,-32764,-477,-32764, - -715,-32760,-715,-32760,-715,-32760,-715,-32760, - -954,-32754,-954,-32754,-954,-32754,-954,-32754, - -1192,-32746,-1192,-32746,-1192,-32746,-1192,-32746, - -1430,-32736,-1430,-32736,-1430,-32736,-1430,-32736, - -1668,-32725,-1668,-32725,-1668,-32725,-1668,-32725, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2144,-32697,-2144,-32697,-2144,-32697,-2144,-32697, - -2381,-32681,-2381,-32681,-2381,-32681,-2381,-32681, - -2619,-32663,-2619,-32663,-2619,-32663,-2619,-32663, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3094,-32621,-3094,-32621,-3094,-32621,-3094,-32621, - -3331,-32598,-3331,-32598,-3331,-32598,-3331,-32598, - -3568,-32573,-3568,-32573,-3568,-32573,-3568,-32573, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4041,-32517,-4041,-32517,-4041,-32517,-4041,-32517, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -4514,-32455,-4514,-32455,-4514,-32455,-4514,-32455, - -4749,-32422,-4749,-32422,-4749,-32422,-4749,-32422, - -4985,-32386,-4985,-32386,-4985,-32386,-4985,-32386, - -5221,-32349,-5221,-32349,-5221,-32349,-5221,-32349, - -5456,-32310,-5456,-32310,-5456,-32310,-5456,-32310, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -5925,-32227,-5925,-32227,-5925,-32227,-5925,-32227, - -6159,-32184,-6159,-32184,-6159,-32184,-6159,-32184, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -6627,-32091,-6627,-32091,-6627,-32091,-6627,-32091, - -6860,-32042,-6860,-32042,-6860,-32042,-6860,-32042, - -7093,-31991,-7093,-31991,-7093,-31991,-7093,-31991, - -7325,-31938,-7325,-31938,-7325,-31938,-7325,-31938, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -7789,-31828,-7789,-31828,-7789,-31828,-7789,-31828, - -8020,-31771,-8020,-31771,-8020,-31771,-8020,-31771, - -8251,-31712,-8251,-31712,-8251,-31712,-8251,-31712, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8711,-31588,-8711,-31588,-8711,-31588,-8711,-31588, - -8941,-31524,-8941,-31524,-8941,-31524,-8941,-31524, - -9170,-31458,-9170,-31458,-9170,-31458,-9170,-31458, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -9626,-31322,-9626,-31322,-9626,-31322,-9626,-31322, - -9854,-31251,-9854,-31251,-9854,-31251,-9854,-31251, - -10081,-31178,-10081,-31178,-10081,-31178,-10081,-31178, - -10307,-31104,-10307,-31104,-10307,-31104,-10307,-31104, - -10533,-31029,-10533,-31029,-10533,-31029,-10533,-31029, - -10758,-30951,-10758,-30951,-10758,-30951,-10758,-30951, - -10983,-30872,-10983,-30872,-10983,-30872,-10983,-30872, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11431,-30709,-11431,-30709,-11431,-30709,-11431,-30709, - -11654,-30625,-11654,-30625,-11654,-30625,-11654,-30625, - -11877,-30540,-11877,-30540,-11877,-30540,-11877,-30540, - -12098,-30452,-12098,-30452,-12098,-30452,-12098,-30452, - -12319,-30364,-12319,-30364,-12319,-30364,-12319,-30364, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -12760,-30181,-12760,-30181,-12760,-30181,-12760,-30181, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13197,-29993,-13197,-29993,-13197,-29993,-13197,-29993, - -13415,-29896,-13415,-29896,-13415,-29896,-13415,-29896, - -13632,-29797,-13632,-29797,-13632,-29797,-13632,-29797, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14064,-29596,-14064,-29596,-14064,-29596,-14064,-29596, - -14279,-29493,-14279,-29493,-14279,-29493,-14279,-29493, - -14493,-29388,-14493,-29388,-14493,-29388,-14493,-29388, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -14919,-29174,-14919,-29174,-14919,-29174,-14919,-29174, - -15131,-29065,-15131,-29065,-15131,-29065,-15131,-29065, - -15342,-28954,-15342,-28954,-15342,-28954,-15342,-28954, - -15552,-28842,-15552,-28842,-15552,-28842,-15552,-28842, - -15761,-28728,-15761,-28728,-15761,-28728,-15761,-28728, - -15970,-28613,-15970,-28613,-15970,-28613,-15970,-28613, - -16177,-28496,-16177,-28496,-16177,-28496,-16177,-28496 - }; -static int16_t twb864[287*2*4] = {32763,-477,32763,-477,32763,-477,32763,-477, - 32753,-954,32753,-954,32753,-954,32753,-954, - 32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32680,-2381,32680,-2381,32680,-2381,32680,-2381, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32597,-3331,32597,-3331,32597,-3331,32597,-3331, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32421,-4749,32421,-4749,32421,-4749,32421,-4749, - 32348,-5221,32348,-5221,32348,-5221,32348,-5221, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32183,-6159,32183,-6159,32183,-6159,32183,-6159, - 32090,-6627,32090,-6627,32090,-6627,32090,-6627, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31770,-8020,31770,-8020,31770,-8020,31770,-8020, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31523,-8941,31523,-8941,31523,-8941,31523,-8941, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 31103,-10307,31103,-10307,31103,-10307,31103,-10307, - 30950,-10758,30950,-10758,30950,-10758,30950,-10758, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30624,-11654,30624,-11654,30624,-11654,30624,-11654, - 30451,-12098,30451,-12098,30451,-12098,30451,-12098, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29895,-13415,29895,-13415,29895,-13415,29895,-13415, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29492,-14279,29492,-14279,29492,-14279,29492,-14279, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28841,-15552,28841,-15552,28841,-15552,28841,-15552, - 28612,-15970,28612,-15970,28612,-15970,28612,-15970, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28135,-16795,28135,-16795,28135,-16795,28135,-16795, - 27888,-17202,27888,-17202,27888,-17202,27888,-17202, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27111,-18403,27111,-18403,27111,-18403,27111,-18403, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26564,-19183,26564,-19183,26564,-19183,26564,-19183, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25702,-20324,25702,-20324,25702,-20324,25702,-20324, - 25404,-20695,25404,-20695,25404,-20695,25404,-20695, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24791,-21426,24791,-21426,24791,-21426,24791,-21426, - 24477,-21784,24477,-21784,24477,-21784,24477,-21784, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23504,-22831,23504,-22831,23504,-22831,23504,-22831, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22830,-23505,22830,-23505,22830,-23505,22830,-23505, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 21783,-24478,21783,-24478,21783,-24478,21783,-24478, - 21425,-24792,21425,-24792,21425,-24792,21425,-24792, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20694,-25405,20694,-25405,20694,-25405,20694,-25405, - 20323,-25703,20323,-25703,20323,-25703,20323,-25703, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19182,-26565,19182,-26565,19182,-26565,19182,-26565, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18402,-27112,18402,-27112,18402,-27112,18402,-27112, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 17201,-27889,17201,-27889,17201,-27889,17201,-27889, - 16794,-28136,16794,-28136,16794,-28136,16794,-28136, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15969,-28613,15969,-28613,15969,-28613,15969,-28613, - 15551,-28842,15551,-28842,15551,-28842,15551,-28842, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14278,-29493,14278,-29493,14278,-29493,14278,-29493, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13414,-29896,13414,-29896,13414,-29896,13414,-29896, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12097,-30452,12097,-30452,12097,-30452,12097,-30452, - 11653,-30625,11653,-30625,11653,-30625,11653,-30625, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10757,-30951,10757,-30951,10757,-30951,10757,-30951, - 10306,-31104,10306,-31104,10306,-31104,10306,-31104, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 8940,-31524,8940,-31524,8940,-31524,8940,-31524, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8019,-31771,8019,-31771,8019,-31771,8019,-31771, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 6626,-32091,6626,-32091,6626,-32091,6626,-32091, - 6158,-32184,6158,-32184,6158,-32184,6158,-32184, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5220,-32349,5220,-32349,5220,-32349,5220,-32349, - 4748,-32422,4748,-32422,4748,-32422,4748,-32422, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3330,-32598,3330,-32598,3330,-32598,3330,-32598, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2380,-32681,2380,-32681,2380,-32681,2380,-32681, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 953,-32754,953,-32754,953,-32754,953,-32754, - 476,-32764,476,-32764,476,-32764,476,-32764, - 0,-32767,0,-32767,0,-32767,0,-32767, - -477,-32764,-477,-32764,-477,-32764,-477,-32764, - -954,-32754,-954,-32754,-954,-32754,-954,-32754, - -1430,-32736,-1430,-32736,-1430,-32736,-1430,-32736, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2381,-32681,-2381,-32681,-2381,-32681,-2381,-32681, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3331,-32598,-3331,-32598,-3331,-32598,-3331,-32598, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -4749,-32422,-4749,-32422,-4749,-32422,-4749,-32422, - -5221,-32349,-5221,-32349,-5221,-32349,-5221,-32349, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6159,-32184,-6159,-32184,-6159,-32184,-6159,-32184, - -6627,-32091,-6627,-32091,-6627,-32091,-6627,-32091, - -7093,-31991,-7093,-31991,-7093,-31991,-7093,-31991, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -8020,-31771,-8020,-31771,-8020,-31771,-8020,-31771, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8941,-31524,-8941,-31524,-8941,-31524,-8941,-31524, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -9854,-31251,-9854,-31251,-9854,-31251,-9854,-31251, - -10307,-31104,-10307,-31104,-10307,-31104,-10307,-31104, - -10758,-30951,-10758,-30951,-10758,-30951,-10758,-30951, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11654,-30625,-11654,-30625,-11654,-30625,-11654,-30625, - -12098,-30452,-12098,-30452,-12098,-30452,-12098,-30452, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13415,-29896,-13415,-29896,-13415,-29896,-13415,-29896, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14279,-29493,-14279,-29493,-14279,-29493,-14279,-29493, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -15131,-29065,-15131,-29065,-15131,-29065,-15131,-29065, - -15552,-28842,-15552,-28842,-15552,-28842,-15552,-28842, - -15970,-28613,-15970,-28613,-15970,-28613,-15970,-28613, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16795,-28136,-16795,-28136,-16795,-28136,-16795,-28136, - -17202,-27889,-17202,-27889,-17202,-27889,-17202,-27889, - -17606,-27636,-17606,-27636,-17606,-27636,-17606,-27636, - -18006,-27377,-18006,-27377,-18006,-27377,-18006,-27377, - -18403,-27112,-18403,-27112,-18403,-27112,-18403,-27112, - -18795,-26842,-18795,-26842,-18795,-26842,-18795,-26842, - -19183,-26565,-19183,-26565,-19183,-26565,-19183,-26565, - -19568,-26284,-19568,-26284,-19568,-26284,-19568,-26284, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -20324,-25703,-20324,-25703,-20324,-25703,-20324,-25703, - -20695,-25405,-20695,-25405,-20695,-25405,-20695,-25405, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -21426,-24792,-21426,-24792,-21426,-24792,-21426,-24792, - -21784,-24478,-21784,-24478,-21784,-24478,-21784,-24478, - -22138,-24159,-22138,-24159,-22138,-24159,-22138,-24159, - -22487,-23834,-22487,-23834,-22487,-23834,-22487,-23834, - -22831,-23505,-22831,-23505,-22831,-23505,-22831,-23505, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23505,-22831,-23505,-22831,-23505,-22831,-23505,-22831, - -23834,-22487,-23834,-22487,-23834,-22487,-23834,-22487, - -24159,-22138,-24159,-22138,-24159,-22138,-24159,-22138, - -24478,-21784,-24478,-21784,-24478,-21784,-24478,-21784, - -24792,-21426,-24792,-21426,-24792,-21426,-24792,-21426, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25405,-20695,-25405,-20695,-25405,-20695,-25405,-20695, - -25703,-20324,-25703,-20324,-25703,-20324,-25703,-20324, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26284,-19568,-26284,-19568,-26284,-19568,-26284,-19568, - -26565,-19183,-26565,-19183,-26565,-19183,-26565,-19183, - -26842,-18795,-26842,-18795,-26842,-18795,-26842,-18795, - -27112,-18403,-27112,-18403,-27112,-18403,-27112,-18403, - -27377,-18006,-27377,-18006,-27377,-18006,-27377,-18006, - -27636,-17606,-27636,-17606,-27636,-17606,-27636,-17606, - -27889,-17202,-27889,-17202,-27889,-17202,-27889,-17202, - -28136,-16795,-28136,-16795,-28136,-16795,-28136,-16795, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28613,-15970,-28613,-15970,-28613,-15970,-28613,-15970, - -28842,-15552,-28842,-15552,-28842,-15552,-28842,-15552, - -29065,-15131,-29065,-15131,-29065,-15131,-29065,-15131, - -29282,-14706,-29282,-14706,-29282,-14706,-29282,-14706, - -29493,-14279,-29493,-14279,-29493,-14279,-29493,-14279, - -29697,-13848,-29697,-13848,-29697,-13848,-29697,-13848, - -29896,-13415,-29896,-13415,-29896,-13415,-29896,-13415, - -30088,-12979,-30088,-12979,-30088,-12979,-30088,-12979, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30452,-12098,-30452,-12098,-30452,-12098,-30452,-12098, - -30625,-11654,-30625,-11654,-30625,-11654,-30625,-11654, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -30951,-10758,-30951,-10758,-30951,-10758,-30951,-10758, - -31104,-10307,-31104,-10307,-31104,-10307,-31104,-10307, - -31251,-9854,-31251,-9854,-31251,-9854,-31251,-9854, - -31391,-9398,-31391,-9398,-31391,-9398,-31391,-9398, - -31524,-8941,-31524,-8941,-31524,-8941,-31524,-8941, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31771,-8020,-31771,-8020,-31771,-8020,-31771,-8020, - -31884,-7557,-31884,-7557,-31884,-7557,-31884,-7557, - -31991,-7093,-31991,-7093,-31991,-7093,-31991,-7093, - -32091,-6627,-32091,-6627,-32091,-6627,-32091,-6627, - -32184,-6159,-32184,-6159,-32184,-6159,-32184,-6159, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32349,-5221,-32349,-5221,-32349,-5221,-32349,-5221, - -32422,-4749,-32422,-4749,-32422,-4749,-32422,-4749, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32546,-3805,-32546,-3805,-32546,-3805,-32546,-3805, - -32598,-3331,-32598,-3331,-32598,-3331,-32598,-3331, - -32643,-2856,-32643,-2856,-32643,-2856,-32643,-2856, - -32681,-2381,-32681,-2381,-32681,-2381,-32681,-2381, - -32712,-1906,-32712,-1906,-32712,-1906,-32712,-1906, - -32736,-1430,-32736,-1430,-32736,-1430,-32736,-1430, - -32754,-954,-32754,-954,-32754,-954,-32754,-954, - -32764,-477,-32764,-477,-32764,-477,-32764,-477, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32764,476,-32764,476,-32764,476,-32764,476, - -32754,953,-32754,953,-32754,953,-32754,953, - -32736,1429,-32736,1429,-32736,1429,-32736,1429, - -32712,1905,-32712,1905,-32712,1905,-32712,1905, - -32681,2380,-32681,2380,-32681,2380,-32681,2380, - -32643,2855,-32643,2855,-32643,2855,-32643,2855, - -32598,3330,-32598,3330,-32598,3330,-32598,3330, - -32546,3804,-32546,3804,-32546,3804,-32546,3804, - -32487,4276,-32487,4276,-32487,4276,-32487,4276, - -32422,4748,-32422,4748,-32422,4748,-32422,4748, - -32349,5220,-32349,5220,-32349,5220,-32349,5220, - -32270,5689,-32270,5689,-32270,5689,-32270,5689, - -32184,6158,-32184,6158,-32184,6158,-32184,6158, - -32091,6626,-32091,6626,-32091,6626,-32091,6626, - -31991,7092,-31991,7092,-31991,7092,-31991,7092, - -31884,7556,-31884,7556,-31884,7556,-31884,7556, - -31771,8019,-31771,8019,-31771,8019,-31771,8019, - -31651,8480,-31651,8480,-31651,8480,-31651,8480, - -31524,8940,-31524,8940,-31524,8940,-31524,8940, - -31391,9397,-31391,9397,-31391,9397,-31391,9397, - -31251,9853,-31251,9853,-31251,9853,-31251,9853, - -31104,10306,-31104,10306,-31104,10306,-31104,10306, - -30951,10757,-30951,10757,-30951,10757,-30951,10757, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30625,11653,-30625,11653,-30625,11653,-30625,11653, - -30452,12097,-30452,12097,-30452,12097,-30452,12097, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -30088,12978,-30088,12978,-30088,12978,-30088,12978, - -29896,13414,-29896,13414,-29896,13414,-29896,13414, - -29697,13847,-29697,13847,-29697,13847,-29697,13847, - -29493,14278,-29493,14278,-29493,14278,-29493,14278, - -29282,14705,-29282,14705,-29282,14705,-29282,14705, - -29065,15130,-29065,15130,-29065,15130,-29065,15130, - -28842,15551,-28842,15551,-28842,15551,-28842,15551, - -28613,15969,-28613,15969,-28613,15969,-28613,15969, - -28378,16383,-28378,16383,-28378,16383,-28378,16383, - -28136,16794,-28136,16794,-28136,16794,-28136,16794, - -27889,17201,-27889,17201,-27889,17201,-27889,17201, - -27636,17605,-27636,17605,-27636,17605,-27636,17605, - -27377,18005,-27377,18005,-27377,18005,-27377,18005, - -27112,18402,-27112,18402,-27112,18402,-27112,18402, - -26842,18794,-26842,18794,-26842,18794,-26842,18794, - -26565,19182,-26565,19182,-26565,19182,-26565,19182, - -26284,19567,-26284,19567,-26284,19567,-26284,19567, - -25996,19947,-25996,19947,-25996,19947,-25996,19947, - -25703,20323,-25703,20323,-25703,20323,-25703,20323, - -25405,20694,-25405,20694,-25405,20694,-25405,20694, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24792,21425,-24792,21425,-24792,21425,-24792,21425, - -24478,21783,-24478,21783,-24478,21783,-24478,21783, - -24159,22137,-24159,22137,-24159,22137,-24159,22137, - -23834,22486,-23834,22486,-23834,22486,-23834,22486, - -23505,22830,-23505,22830,-23505,22830,-23505,22830, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22831,23504,-22831,23504,-22831,23504,-22831,23504, - -22487,23833,-22487,23833,-22487,23833,-22487,23833, - -22138,24158,-22138,24158,-22138,24158,-22138,24158, - -21784,24477,-21784,24477,-21784,24477,-21784,24477, - -21426,24791,-21426,24791,-21426,24791,-21426,24791, - -21063,25100,-21063,25100,-21063,25100,-21063,25100, - -20695,25404,-20695,25404,-20695,25404,-20695,25404, - -20324,25702,-20324,25702,-20324,25702,-20324,25702, - -19948,25995,-19948,25995,-19948,25995,-19948,25995, - -19568,26283,-19568,26283,-19568,26283,-19568,26283, - -19183,26564,-19183,26564,-19183,26564,-19183,26564, - -18795,26841,-18795,26841,-18795,26841,-18795,26841, - -18403,27111,-18403,27111,-18403,27111,-18403,27111, - -18006,27376,-18006,27376,-18006,27376,-18006,27376, - -17606,27635,-17606,27635,-17606,27635,-17606,27635, - -17202,27888,-17202,27888,-17202,27888,-17202,27888, - -16795,28135,-16795,28135,-16795,28135,-16795,28135 - }; + +static int16_t twa864[287*2*4]; +static int16_t twb864[287*2*4]; void dft864(int16_t *x,int16_t *y,unsigned char scale_flag) // 288 x 3 { @@ -12900,630 +8170,8 @@ void dft864(int16_t *x,int16_t *y,unsigned char scale_flag) // 288 x 3 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:299)/900)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:299)/900)); -twa2 = zeros(1,2*299); -twb2 = zeros(1,2*299); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa900[299*2*4] = {"); -for i=1:2:(2*298) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb900[299*2*4] = {"); -for i=1:2:(2*298) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); -*/ -static int16_t twa900[299*2*4] = {32766,-229,32766,-229,32766,-229,32766,-229, - 32763,-458,32763,-458,32763,-458,32763,-458, - 32759,-687,32759,-687,32759,-687,32759,-687, - 32754,-915,32754,-915,32754,-915,32754,-915, - 32747,-1144,32747,-1144,32747,-1144,32747,-1144, - 32738,-1373,32738,-1373,32738,-1373,32738,-1373, - 32727,-1601,32727,-1601,32727,-1601,32727,-1601, - 32715,-1830,32715,-1830,32715,-1830,32715,-1830, - 32702,-2058,32702,-2058,32702,-2058,32702,-2058, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32670,-2514,32670,-2514,32670,-2514,32670,-2514, - 32652,-2742,32652,-2742,32652,-2742,32652,-2742, - 32632,-2970,32632,-2970,32632,-2970,32632,-2970, - 32610,-3198,32610,-3198,32610,-3198,32610,-3198, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32562,-3653,32562,-3653,32562,-3653,32562,-3653, - 32536,-3880,32536,-3880,32536,-3880,32536,-3880, - 32508,-4107,32508,-4107,32508,-4107,32508,-4107, - 32479,-4334,32479,-4334,32479,-4334,32479,-4334, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32415,-4787,32415,-4787,32415,-4787,32415,-4787, - 32381,-5013,32381,-5013,32381,-5013,32381,-5013, - 32345,-5239,32345,-5239,32345,-5239,32345,-5239, - 32308,-5465,32308,-5465,32308,-5465,32308,-5465, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32228,-5916,32228,-5916,32228,-5916,32228,-5916, - 32186,-6140,32186,-6140,32186,-6140,32186,-6140, - 32142,-6365,32142,-6365,32142,-6365,32142,-6365, - 32097,-6589,32097,-6589,32097,-6589,32097,-6589, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 32002,-7037,32002,-7037,32002,-7037,32002,-7037, - 31952,-7260,31952,-7260,31952,-7260,31952,-7260, - 31901,-7483,31901,-7483,31901,-7483,31901,-7483, - 31848,-7705,31848,-7705,31848,-7705,31848,-7705, - 31793,-7928,31793,-7928,31793,-7928,31793,-7928, - 31737,-8149,31737,-8149,31737,-8149,31737,-8149, - 31679,-8371,31679,-8371,31679,-8371,31679,-8371, - 31620,-8592,31620,-8592,31620,-8592,31620,-8592, - 31559,-8812,31559,-8812,31559,-8812,31559,-8812, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31433,-9252,31433,-9252,31433,-9252,31433,-9252, - 31368,-9471,31368,-9471,31368,-9471,31368,-9471, - 31301,-9690,31301,-9690,31301,-9690,31301,-9690, - 31233,-9908,31233,-9908,31233,-9908,31233,-9908, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31091,-10343,31091,-10343,31091,-10343,31091,-10343, - 31018,-10560,31018,-10560,31018,-10560,31018,-10560, - 30944,-10776,30944,-10776,30944,-10776,30944,-10776, - 30868,-10992,30868,-10992,30868,-10992,30868,-10992, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30711,-11422,30711,-11422,30711,-11422,30711,-11422, - 30631,-11636,30631,-11636,30631,-11636,30631,-11636, - 30549,-11850,30549,-11850,30549,-11850,30549,-11850, - 30465,-12063,30465,-12063,30465,-12063,30465,-12063, - 30381,-12275,30381,-12275,30381,-12275,30381,-12275, - 30294,-12487,30294,-12487,30294,-12487,30294,-12487, - 30206,-12698,30206,-12698,30206,-12698,30206,-12698, - 30117,-12909,30117,-12909,30117,-12909,30117,-12909, - 30026,-13119,30026,-13119,30026,-13119,30026,-13119, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29840,-13537,29840,-13537,29840,-13537,29840,-13537, - 29745,-13745,29745,-13745,29745,-13745,29745,-13745, - 29648,-13952,29648,-13952,29648,-13952,29648,-13952, - 29550,-14159,29550,-14159,29550,-14159,29550,-14159, - 29450,-14365,29450,-14365,29450,-14365,29450,-14365, - 29349,-14570,29349,-14570,29349,-14570,29349,-14570, - 29247,-14774,29247,-14774,29247,-14774,29247,-14774, - 29143,-14978,29143,-14978,29143,-14978,29143,-14978, - 29038,-15181,29038,-15181,29038,-15181,29038,-15181, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28823,-15585,28823,-15585,28823,-15585,28823,-15585, - 28713,-15786,28713,-15786,28713,-15786,28713,-15786, - 28603,-15986,28603,-15986,28603,-15986,28603,-15986, - 28490,-16185,28490,-16185,28490,-16185,28490,-16185, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28261,-16582,28261,-16582,28261,-16582,28261,-16582, - 28145,-16779,28145,-16779,28145,-16779,28145,-16779, - 28027,-16975,28027,-16975,28027,-16975,28027,-16975, - 27908,-17170,27908,-17170,27908,-17170,27908,-17170, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27666,-17558,27666,-17558,27666,-17558,27666,-17558, - 27542,-17751,27542,-17751,27542,-17751,27542,-17751, - 27418,-17943,27418,-17943,27418,-17943,27418,-17943, - 27292,-18133,27292,-18133,27292,-18133,27292,-18133, - 27165,-18324,27165,-18324,27165,-18324,27165,-18324, - 27036,-18513,27036,-18513,27036,-18513,27036,-18513, - 26906,-18701,26906,-18701,26906,-18701,26906,-18701, - 26775,-18888,26775,-18888,26775,-18888,26775,-18888, - 26642,-19075,26642,-19075,26642,-19075,26642,-19075, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26373,-19445,26373,-19445,26373,-19445,26373,-19445, - 26237,-19629,26237,-19629,26237,-19629,26237,-19629, - 26099,-19811,26099,-19811,26099,-19811,26099,-19811, - 25960,-19993,25960,-19993,25960,-19993,25960,-19993, - 25820,-20174,25820,-20174,25820,-20174,25820,-20174, - 25679,-20354,25679,-20354,25679,-20354,25679,-20354, - 25536,-20532,25536,-20532,25536,-20532,25536,-20532, - 25392,-20710,25392,-20710,25392,-20710,25392,-20710, - 25247,-20887,25247,-20887,25247,-20887,25247,-20887, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24953,-21237,24953,-21237,24953,-21237,24953,-21237, - 24804,-21411,24804,-21411,24804,-21411,24804,-21411, - 24654,-21584,24654,-21584,24654,-21584,24654,-21584, - 24503,-21755,24503,-21755,24503,-21755,24503,-21755, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24196,-22095,24196,-22095,24196,-22095,24196,-22095, - 24042,-22264,24042,-22264,24042,-22264,24042,-22264, - 23886,-22431,23886,-22431,23886,-22431,23886,-22431, - 23728,-22597,23728,-22597,23728,-22597,23728,-22597, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23411,-22926,23411,-22926,23411,-22926,23411,-22926, - 23250,-23089,23250,-23089,23250,-23089,23250,-23089, - 23088,-23251,23088,-23251,23088,-23251,23088,-23251, - 22925,-23412,22925,-23412,22925,-23412,22925,-23412, - 22761,-23571,22761,-23571,22761,-23571,22761,-23571, - 22596,-23729,22596,-23729,22596,-23729,22596,-23729, - 22430,-23887,22430,-23887,22430,-23887,22430,-23887, - 22263,-24043,22263,-24043,22263,-24043,22263,-24043, - 22094,-24197,22094,-24197,22094,-24197,22094,-24197, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21754,-24504,21754,-24504,21754,-24504,21754,-24504, - 21583,-24655,21583,-24655,21583,-24655,21583,-24655, - 21410,-24805,21410,-24805,21410,-24805,21410,-24805, - 21236,-24954,21236,-24954,21236,-24954,21236,-24954, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20886,-25248,20886,-25248,20886,-25248,20886,-25248, - 20709,-25393,20709,-25393,20709,-25393,20709,-25393, - 20531,-25537,20531,-25537,20531,-25537,20531,-25537, - 20353,-25680,20353,-25680,20353,-25680,20353,-25680, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19992,-25961,19992,-25961,19992,-25961,19992,-25961, - 19810,-26100,19810,-26100,19810,-26100,19810,-26100, - 19628,-26238,19628,-26238,19628,-26238,19628,-26238, - 19444,-26374,19444,-26374,19444,-26374,19444,-26374, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 19074,-26643,19074,-26643,19074,-26643,19074,-26643, - 18887,-26776,18887,-26776,18887,-26776,18887,-26776, - 18700,-26907,18700,-26907,18700,-26907,18700,-26907, - 18512,-27037,18512,-27037,18512,-27037,18512,-27037, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 18132,-27293,18132,-27293,18132,-27293,18132,-27293, - 17942,-27419,17942,-27419,17942,-27419,17942,-27419, - 17750,-27543,17750,-27543,17750,-27543,17750,-27543, - 17557,-27667,17557,-27667,17557,-27667,17557,-27667, - 17363,-27788,17363,-27788,17363,-27788,17363,-27788, - 17169,-27909,17169,-27909,17169,-27909,17169,-27909, - 16974,-28028,16974,-28028,16974,-28028,16974,-28028, - 16778,-28146,16778,-28146,16778,-28146,16778,-28146, - 16581,-28262,16581,-28262,16581,-28262,16581,-28262, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16184,-28491,16184,-28491,16184,-28491,16184,-28491, - 15985,-28604,15985,-28604,15985,-28604,15985,-28604, - 15785,-28714,15785,-28714,15785,-28714,15785,-28714, - 15584,-28824,15584,-28824,15584,-28824,15584,-28824, - 15383,-28932,15383,-28932,15383,-28932,15383,-28932, - 15180,-29039,15180,-29039,15180,-29039,15180,-29039, - 14977,-29144,14977,-29144,14977,-29144,14977,-29144, - 14773,-29248,14773,-29248,14773,-29248,14773,-29248, - 14569,-29350,14569,-29350,14569,-29350,14569,-29350, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 14158,-29551,14158,-29551,14158,-29551,14158,-29551, - 13951,-29649,13951,-29649,13951,-29649,13951,-29649, - 13744,-29746,13744,-29746,13744,-29746,13744,-29746, - 13536,-29841,13536,-29841,13536,-29841,13536,-29841, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 13118,-30027,13118,-30027,13118,-30027,13118,-30027, - 12908,-30118,12908,-30118,12908,-30118,12908,-30118, - 12697,-30207,12697,-30207,12697,-30207,12697,-30207, - 12486,-30295,12486,-30295,12486,-30295,12486,-30295, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 12062,-30466,12062,-30466,12062,-30466,12062,-30466, - 11849,-30550,11849,-30550,11849,-30550,11849,-30550, - 11635,-30632,11635,-30632,11635,-30632,11635,-30632, - 11421,-30712,11421,-30712,11421,-30712,11421,-30712, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10991,-30869,10991,-30869,10991,-30869,10991,-30869, - 10775,-30945,10775,-30945,10775,-30945,10775,-30945, - 10559,-31019,10559,-31019,10559,-31019,10559,-31019, - 10342,-31092,10342,-31092,10342,-31092,10342,-31092, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9907,-31234,9907,-31234,9907,-31234,9907,-31234, - 9689,-31302,9689,-31302,9689,-31302,9689,-31302, - 9470,-31369,9470,-31369,9470,-31369,9470,-31369, - 9251,-31434,9251,-31434,9251,-31434,9251,-31434, - 9031,-31498,9031,-31498,9031,-31498,9031,-31498, - 8811,-31560,8811,-31560,8811,-31560,8811,-31560, - 8591,-31621,8591,-31621,8591,-31621,8591,-31621, - 8370,-31680,8370,-31680,8370,-31680,8370,-31680, - 8148,-31738,8148,-31738,8148,-31738,8148,-31738, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7704,-31849,7704,-31849,7704,-31849,7704,-31849, - 7482,-31902,7482,-31902,7482,-31902,7482,-31902, - 7259,-31953,7259,-31953,7259,-31953,7259,-31953, - 7036,-32003,7036,-32003,7036,-32003,7036,-32003, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6588,-32098,6588,-32098,6588,-32098,6588,-32098, - 6364,-32143,6364,-32143,6364,-32143,6364,-32143, - 6139,-32187,6139,-32187,6139,-32187,6139,-32187, - 5915,-32229,5915,-32229,5915,-32229,5915,-32229, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5464,-32309,5464,-32309,5464,-32309,5464,-32309, - 5238,-32346,5238,-32346,5238,-32346,5238,-32346, - 5012,-32382,5012,-32382,5012,-32382,5012,-32382, - 4786,-32416,4786,-32416,4786,-32416,4786,-32416, - 4560,-32449,4560,-32449,4560,-32449,4560,-32449, - 4333,-32480,4333,-32480,4333,-32480,4333,-32480, - 4106,-32509,4106,-32509,4106,-32509,4106,-32509, - 3879,-32537,3879,-32537,3879,-32537,3879,-32537, - 3652,-32563,3652,-32563,3652,-32563,3652,-32563, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3197,-32611,3197,-32611,3197,-32611,3197,-32611, - 2969,-32633,2969,-32633,2969,-32633,2969,-32633, - 2741,-32653,2741,-32653,2741,-32653,2741,-32653, - 2513,-32671,2513,-32671,2513,-32671,2513,-32671, - 2285,-32688,2285,-32688,2285,-32688,2285,-32688, - 2057,-32703,2057,-32703,2057,-32703,2057,-32703, - 1829,-32716,1829,-32716,1829,-32716,1829,-32716, - 1600,-32728,1600,-32728,1600,-32728,1600,-32728, - 1372,-32739,1372,-32739,1372,-32739,1372,-32739, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 914,-32755,914,-32755,914,-32755,914,-32755, - 686,-32760,686,-32760,686,-32760,686,-32760, - 457,-32764,457,-32764,457,-32764,457,-32764, - 228,-32767,228,-32767,228,-32767,228,-32767, - 0,-32767,0,-32767,0,-32767,0,-32767, - -229,-32767,-229,-32767,-229,-32767,-229,-32767, - -458,-32764,-458,-32764,-458,-32764,-458,-32764, - -687,-32760,-687,-32760,-687,-32760,-687,-32760, - -915,-32755,-915,-32755,-915,-32755,-915,-32755, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -1373,-32739,-1373,-32739,-1373,-32739,-1373,-32739, - -1601,-32728,-1601,-32728,-1601,-32728,-1601,-32728, - -1830,-32716,-1830,-32716,-1830,-32716,-1830,-32716, - -2058,-32703,-2058,-32703,-2058,-32703,-2058,-32703, - -2286,-32688,-2286,-32688,-2286,-32688,-2286,-32688, - -2514,-32671,-2514,-32671,-2514,-32671,-2514,-32671, - -2742,-32653,-2742,-32653,-2742,-32653,-2742,-32653, - -2970,-32633,-2970,-32633,-2970,-32633,-2970,-32633, - -3198,-32611,-3198,-32611,-3198,-32611,-3198,-32611, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3653,-32563,-3653,-32563,-3653,-32563,-3653,-32563, - -3880,-32537,-3880,-32537,-3880,-32537,-3880,-32537, - -4107,-32509,-4107,-32509,-4107,-32509,-4107,-32509, - -4334,-32480,-4334,-32480,-4334,-32480,-4334,-32480, - -4561,-32449,-4561,-32449,-4561,-32449,-4561,-32449, - -4787,-32416,-4787,-32416,-4787,-32416,-4787,-32416, - -5013,-32382,-5013,-32382,-5013,-32382,-5013,-32382, - -5239,-32346,-5239,-32346,-5239,-32346,-5239,-32346, - -5465,-32309,-5465,-32309,-5465,-32309,-5465,-32309, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -5916,-32229,-5916,-32229,-5916,-32229,-5916,-32229, - -6140,-32187,-6140,-32187,-6140,-32187,-6140,-32187, - -6365,-32143,-6365,-32143,-6365,-32143,-6365,-32143, - -6589,-32098,-6589,-32098,-6589,-32098,-6589,-32098, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7037,-32003,-7037,-32003,-7037,-32003,-7037,-32003, - -7260,-31953,-7260,-31953,-7260,-31953,-7260,-31953, - -7483,-31902,-7483,-31902,-7483,-31902,-7483,-31902, - -7705,-31849,-7705,-31849,-7705,-31849,-7705,-31849, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -8149,-31738,-8149,-31738,-8149,-31738,-8149,-31738, - -8371,-31680,-8371,-31680,-8371,-31680,-8371,-31680, - -8592,-31621,-8592,-31621,-8592,-31621,-8592,-31621, - -8812,-31560,-8812,-31560,-8812,-31560,-8812,-31560, - -9032,-31498,-9032,-31498,-9032,-31498,-9032,-31498, - -9252,-31434,-9252,-31434,-9252,-31434,-9252,-31434, - -9471,-31369,-9471,-31369,-9471,-31369,-9471,-31369, - -9690,-31302,-9690,-31302,-9690,-31302,-9690,-31302, - -9908,-31234,-9908,-31234,-9908,-31234,-9908,-31234, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10343,-31092,-10343,-31092,-10343,-31092,-10343,-31092, - -10560,-31019,-10560,-31019,-10560,-31019,-10560,-31019, - -10776,-30945,-10776,-30945,-10776,-30945,-10776,-30945, - -10992,-30869,-10992,-30869,-10992,-30869,-10992,-30869, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11422,-30712,-11422,-30712,-11422,-30712,-11422,-30712, - -11636,-30632,-11636,-30632,-11636,-30632,-11636,-30632, - -11850,-30550,-11850,-30550,-11850,-30550,-11850,-30550, - -12063,-30466,-12063,-30466,-12063,-30466,-12063,-30466, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -12487,-30295,-12487,-30295,-12487,-30295,-12487,-30295, - -12698,-30207,-12698,-30207,-12698,-30207,-12698,-30207, - -12909,-30118,-12909,-30118,-12909,-30118,-12909,-30118, - -13119,-30027,-13119,-30027,-13119,-30027,-13119,-30027, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13537,-29841,-13537,-29841,-13537,-29841,-13537,-29841, - -13745,-29746,-13745,-29746,-13745,-29746,-13745,-29746, - -13952,-29649,-13952,-29649,-13952,-29649,-13952,-29649, - -14159,-29551,-14159,-29551,-14159,-29551,-14159,-29551, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -14570,-29350,-14570,-29350,-14570,-29350,-14570,-29350, - -14774,-29248,-14774,-29248,-14774,-29248,-14774,-29248, - -14978,-29144,-14978,-29144,-14978,-29144,-14978,-29144, - -15181,-29039,-15181,-29039,-15181,-29039,-15181,-29039, - -15384,-28932,-15384,-28932,-15384,-28932,-15384,-28932, - -15585,-28824,-15585,-28824,-15585,-28824,-15585,-28824, - -15786,-28714,-15786,-28714,-15786,-28714,-15786,-28714, - -15986,-28604,-15986,-28604,-15986,-28604,-15986,-28604, - -16185,-28491,-16185,-28491,-16185,-28491,-16185,-28491 - }; -static int16_t twb900[299*2*4] = {32763,-458,32763,-458,32763,-458,32763,-458, - 32754,-915,32754,-915,32754,-915,32754,-915, - 32738,-1373,32738,-1373,32738,-1373,32738,-1373, - 32715,-1830,32715,-1830,32715,-1830,32715,-1830, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32652,-2742,32652,-2742,32652,-2742,32652,-2742, - 32610,-3198,32610,-3198,32610,-3198,32610,-3198, - 32562,-3653,32562,-3653,32562,-3653,32562,-3653, - 32508,-4107,32508,-4107,32508,-4107,32508,-4107, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32381,-5013,32381,-5013,32381,-5013,32381,-5013, - 32308,-5465,32308,-5465,32308,-5465,32308,-5465, - 32228,-5916,32228,-5916,32228,-5916,32228,-5916, - 32142,-6365,32142,-6365,32142,-6365,32142,-6365, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31952,-7260,31952,-7260,31952,-7260,31952,-7260, - 31848,-7705,31848,-7705,31848,-7705,31848,-7705, - 31737,-8149,31737,-8149,31737,-8149,31737,-8149, - 31620,-8592,31620,-8592,31620,-8592,31620,-8592, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31368,-9471,31368,-9471,31368,-9471,31368,-9471, - 31233,-9908,31233,-9908,31233,-9908,31233,-9908, - 31091,-10343,31091,-10343,31091,-10343,31091,-10343, - 30944,-10776,30944,-10776,30944,-10776,30944,-10776, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30631,-11636,30631,-11636,30631,-11636,30631,-11636, - 30465,-12063,30465,-12063,30465,-12063,30465,-12063, - 30294,-12487,30294,-12487,30294,-12487,30294,-12487, - 30117,-12909,30117,-12909,30117,-12909,30117,-12909, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29745,-13745,29745,-13745,29745,-13745,29745,-13745, - 29550,-14159,29550,-14159,29550,-14159,29550,-14159, - 29349,-14570,29349,-14570,29349,-14570,29349,-14570, - 29143,-14978,29143,-14978,29143,-14978,29143,-14978, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28713,-15786,28713,-15786,28713,-15786,28713,-15786, - 28490,-16185,28490,-16185,28490,-16185,28490,-16185, - 28261,-16582,28261,-16582,28261,-16582,28261,-16582, - 28027,-16975,28027,-16975,28027,-16975,28027,-16975, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27542,-17751,27542,-17751,27542,-17751,27542,-17751, - 27292,-18133,27292,-18133,27292,-18133,27292,-18133, - 27036,-18513,27036,-18513,27036,-18513,27036,-18513, - 26775,-18888,26775,-18888,26775,-18888,26775,-18888, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26237,-19629,26237,-19629,26237,-19629,26237,-19629, - 25960,-19993,25960,-19993,25960,-19993,25960,-19993, - 25679,-20354,25679,-20354,25679,-20354,25679,-20354, - 25392,-20710,25392,-20710,25392,-20710,25392,-20710, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24804,-21411,24804,-21411,24804,-21411,24804,-21411, - 24503,-21755,24503,-21755,24503,-21755,24503,-21755, - 24196,-22095,24196,-22095,24196,-22095,24196,-22095, - 23886,-22431,23886,-22431,23886,-22431,23886,-22431, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23250,-23089,23250,-23089,23250,-23089,23250,-23089, - 22925,-23412,22925,-23412,22925,-23412,22925,-23412, - 22596,-23729,22596,-23729,22596,-23729,22596,-23729, - 22263,-24043,22263,-24043,22263,-24043,22263,-24043, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21583,-24655,21583,-24655,21583,-24655,21583,-24655, - 21236,-24954,21236,-24954,21236,-24954,21236,-24954, - 20886,-25248,20886,-25248,20886,-25248,20886,-25248, - 20531,-25537,20531,-25537,20531,-25537,20531,-25537, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19810,-26100,19810,-26100,19810,-26100,19810,-26100, - 19444,-26374,19444,-26374,19444,-26374,19444,-26374, - 19074,-26643,19074,-26643,19074,-26643,19074,-26643, - 18700,-26907,18700,-26907,18700,-26907,18700,-26907, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 17942,-27419,17942,-27419,17942,-27419,17942,-27419, - 17557,-27667,17557,-27667,17557,-27667,17557,-27667, - 17169,-27909,17169,-27909,17169,-27909,17169,-27909, - 16778,-28146,16778,-28146,16778,-28146,16778,-28146, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15985,-28604,15985,-28604,15985,-28604,15985,-28604, - 15584,-28824,15584,-28824,15584,-28824,15584,-28824, - 15180,-29039,15180,-29039,15180,-29039,15180,-29039, - 14773,-29248,14773,-29248,14773,-29248,14773,-29248, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 13951,-29649,13951,-29649,13951,-29649,13951,-29649, - 13536,-29841,13536,-29841,13536,-29841,13536,-29841, - 13118,-30027,13118,-30027,13118,-30027,13118,-30027, - 12697,-30207,12697,-30207,12697,-30207,12697,-30207, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 11849,-30550,11849,-30550,11849,-30550,11849,-30550, - 11421,-30712,11421,-30712,11421,-30712,11421,-30712, - 10991,-30869,10991,-30869,10991,-30869,10991,-30869, - 10559,-31019,10559,-31019,10559,-31019,10559,-31019, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9689,-31302,9689,-31302,9689,-31302,9689,-31302, - 9251,-31434,9251,-31434,9251,-31434,9251,-31434, - 8811,-31560,8811,-31560,8811,-31560,8811,-31560, - 8370,-31680,8370,-31680,8370,-31680,8370,-31680, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7482,-31902,7482,-31902,7482,-31902,7482,-31902, - 7036,-32003,7036,-32003,7036,-32003,7036,-32003, - 6588,-32098,6588,-32098,6588,-32098,6588,-32098, - 6139,-32187,6139,-32187,6139,-32187,6139,-32187, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5238,-32346,5238,-32346,5238,-32346,5238,-32346, - 4786,-32416,4786,-32416,4786,-32416,4786,-32416, - 4333,-32480,4333,-32480,4333,-32480,4333,-32480, - 3879,-32537,3879,-32537,3879,-32537,3879,-32537, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2969,-32633,2969,-32633,2969,-32633,2969,-32633, - 2513,-32671,2513,-32671,2513,-32671,2513,-32671, - 2057,-32703,2057,-32703,2057,-32703,2057,-32703, - 1600,-32728,1600,-32728,1600,-32728,1600,-32728, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 686,-32760,686,-32760,686,-32760,686,-32760, - 228,-32767,228,-32767,228,-32767,228,-32767, - -229,-32767,-229,-32767,-229,-32767,-229,-32767, - -687,-32760,-687,-32760,-687,-32760,-687,-32760, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -1601,-32728,-1601,-32728,-1601,-32728,-1601,-32728, - -2058,-32703,-2058,-32703,-2058,-32703,-2058,-32703, - -2514,-32671,-2514,-32671,-2514,-32671,-2514,-32671, - -2970,-32633,-2970,-32633,-2970,-32633,-2970,-32633, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3880,-32537,-3880,-32537,-3880,-32537,-3880,-32537, - -4334,-32480,-4334,-32480,-4334,-32480,-4334,-32480, - -4787,-32416,-4787,-32416,-4787,-32416,-4787,-32416, - -5239,-32346,-5239,-32346,-5239,-32346,-5239,-32346, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6140,-32187,-6140,-32187,-6140,-32187,-6140,-32187, - -6589,-32098,-6589,-32098,-6589,-32098,-6589,-32098, - -7037,-32003,-7037,-32003,-7037,-32003,-7037,-32003, - -7483,-31902,-7483,-31902,-7483,-31902,-7483,-31902, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -8371,-31680,-8371,-31680,-8371,-31680,-8371,-31680, - -8812,-31560,-8812,-31560,-8812,-31560,-8812,-31560, - -9252,-31434,-9252,-31434,-9252,-31434,-9252,-31434, - -9690,-31302,-9690,-31302,-9690,-31302,-9690,-31302, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10560,-31019,-10560,-31019,-10560,-31019,-10560,-31019, - -10992,-30869,-10992,-30869,-10992,-30869,-10992,-30869, - -11422,-30712,-11422,-30712,-11422,-30712,-11422,-30712, - -11850,-30550,-11850,-30550,-11850,-30550,-11850,-30550, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -12698,-30207,-12698,-30207,-12698,-30207,-12698,-30207, - -13119,-30027,-13119,-30027,-13119,-30027,-13119,-30027, - -13537,-29841,-13537,-29841,-13537,-29841,-13537,-29841, - -13952,-29649,-13952,-29649,-13952,-29649,-13952,-29649, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -14774,-29248,-14774,-29248,-14774,-29248,-14774,-29248, - -15181,-29039,-15181,-29039,-15181,-29039,-15181,-29039, - -15585,-28824,-15585,-28824,-15585,-28824,-15585,-28824, - -15986,-28604,-15986,-28604,-15986,-28604,-15986,-28604, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16779,-28146,-16779,-28146,-16779,-28146,-16779,-28146, - -17170,-27909,-17170,-27909,-17170,-27909,-17170,-27909, - -17558,-27667,-17558,-27667,-17558,-27667,-17558,-27667, - -17943,-27419,-17943,-27419,-17943,-27419,-17943,-27419, - -18324,-27166,-18324,-27166,-18324,-27166,-18324,-27166, - -18701,-26907,-18701,-26907,-18701,-26907,-18701,-26907, - -19075,-26643,-19075,-26643,-19075,-26643,-19075,-26643, - -19445,-26374,-19445,-26374,-19445,-26374,-19445,-26374, - -19811,-26100,-19811,-26100,-19811,-26100,-19811,-26100, - -20174,-25821,-20174,-25821,-20174,-25821,-20174,-25821, - -20532,-25537,-20532,-25537,-20532,-25537,-20532,-25537, - -20887,-25248,-20887,-25248,-20887,-25248,-20887,-25248, - -21237,-24954,-21237,-24954,-21237,-24954,-21237,-24954, - -21584,-24655,-21584,-24655,-21584,-24655,-21584,-24655, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22264,-24043,-22264,-24043,-22264,-24043,-22264,-24043, - -22597,-23729,-22597,-23729,-22597,-23729,-22597,-23729, - -22926,-23412,-22926,-23412,-22926,-23412,-22926,-23412, - -23251,-23089,-23251,-23089,-23251,-23089,-23251,-23089, - -23571,-22762,-23571,-22762,-23571,-22762,-23571,-22762, - -23887,-22431,-23887,-22431,-23887,-22431,-23887,-22431, - -24197,-22095,-24197,-22095,-24197,-22095,-24197,-22095, - -24504,-21755,-24504,-21755,-24504,-21755,-24504,-21755, - -24805,-21411,-24805,-21411,-24805,-21411,-24805,-21411, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25393,-20710,-25393,-20710,-25393,-20710,-25393,-20710, - -25680,-20354,-25680,-20354,-25680,-20354,-25680,-20354, - -25961,-19993,-25961,-19993,-25961,-19993,-25961,-19993, - -26238,-19629,-26238,-19629,-26238,-19629,-26238,-19629, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26776,-18888,-26776,-18888,-26776,-18888,-26776,-18888, - -27037,-18513,-27037,-18513,-27037,-18513,-27037,-18513, - -27293,-18133,-27293,-18133,-27293,-18133,-27293,-18133, - -27543,-17751,-27543,-17751,-27543,-17751,-27543,-17751, - -27788,-17364,-27788,-17364,-27788,-17364,-27788,-17364, - -28028,-16975,-28028,-16975,-28028,-16975,-28028,-16975, - -28262,-16582,-28262,-16582,-28262,-16582,-28262,-16582, - -28491,-16185,-28491,-16185,-28491,-16185,-28491,-16185, - -28714,-15786,-28714,-15786,-28714,-15786,-28714,-15786, - -28932,-15384,-28932,-15384,-28932,-15384,-28932,-15384, - -29144,-14978,-29144,-14978,-29144,-14978,-29144,-14978, - -29350,-14570,-29350,-14570,-29350,-14570,-29350,-14570, - -29551,-14159,-29551,-14159,-29551,-14159,-29551,-14159, - -29746,-13745,-29746,-13745,-29746,-13745,-29746,-13745, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30118,-12909,-30118,-12909,-30118,-12909,-30118,-12909, - -30295,-12487,-30295,-12487,-30295,-12487,-30295,-12487, - -30466,-12063,-30466,-12063,-30466,-12063,-30466,-12063, - -30632,-11636,-30632,-11636,-30632,-11636,-30632,-11636, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -30945,-10776,-30945,-10776,-30945,-10776,-30945,-10776, - -31092,-10343,-31092,-10343,-31092,-10343,-31092,-10343, - -31234,-9908,-31234,-9908,-31234,-9908,-31234,-9908, - -31369,-9471,-31369,-9471,-31369,-9471,-31369,-9471, - -31498,-9032,-31498,-9032,-31498,-9032,-31498,-9032, - -31621,-8592,-31621,-8592,-31621,-8592,-31621,-8592, - -31738,-8149,-31738,-8149,-31738,-8149,-31738,-8149, - -31849,-7705,-31849,-7705,-31849,-7705,-31849,-7705, - -31953,-7260,-31953,-7260,-31953,-7260,-31953,-7260, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32143,-6365,-32143,-6365,-32143,-6365,-32143,-6365, - -32229,-5916,-32229,-5916,-32229,-5916,-32229,-5916, - -32309,-5465,-32309,-5465,-32309,-5465,-32309,-5465, - -32382,-5013,-32382,-5013,-32382,-5013,-32382,-5013, - -32449,-4561,-32449,-4561,-32449,-4561,-32449,-4561, - -32509,-4107,-32509,-4107,-32509,-4107,-32509,-4107, - -32563,-3653,-32563,-3653,-32563,-3653,-32563,-3653, - -32611,-3198,-32611,-3198,-32611,-3198,-32611,-3198, - -32653,-2742,-32653,-2742,-32653,-2742,-32653,-2742, - -32688,-2286,-32688,-2286,-32688,-2286,-32688,-2286, - -32716,-1830,-32716,-1830,-32716,-1830,-32716,-1830, - -32739,-1373,-32739,-1373,-32739,-1373,-32739,-1373, - -32755,-915,-32755,-915,-32755,-915,-32755,-915, - -32764,-458,-32764,-458,-32764,-458,-32764,-458, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32764,457,-32764,457,-32764,457,-32764,457, - -32755,914,-32755,914,-32755,914,-32755,914, - -32739,1372,-32739,1372,-32739,1372,-32739,1372, - -32716,1829,-32716,1829,-32716,1829,-32716,1829, - -32688,2285,-32688,2285,-32688,2285,-32688,2285, - -32653,2741,-32653,2741,-32653,2741,-32653,2741, - -32611,3197,-32611,3197,-32611,3197,-32611,3197, - -32563,3652,-32563,3652,-32563,3652,-32563,3652, - -32509,4106,-32509,4106,-32509,4106,-32509,4106, - -32449,4560,-32449,4560,-32449,4560,-32449,4560, - -32382,5012,-32382,5012,-32382,5012,-32382,5012, - -32309,5464,-32309,5464,-32309,5464,-32309,5464, - -32229,5915,-32229,5915,-32229,5915,-32229,5915, - -32143,6364,-32143,6364,-32143,6364,-32143,6364, - -32051,6812,-32051,6812,-32051,6812,-32051,6812, - -31953,7259,-31953,7259,-31953,7259,-31953,7259, - -31849,7704,-31849,7704,-31849,7704,-31849,7704, - -31738,8148,-31738,8148,-31738,8148,-31738,8148, - -31621,8591,-31621,8591,-31621,8591,-31621,8591, - -31498,9031,-31498,9031,-31498,9031,-31498,9031, - -31369,9470,-31369,9470,-31369,9470,-31369,9470, - -31234,9907,-31234,9907,-31234,9907,-31234,9907, - -31092,10342,-31092,10342,-31092,10342,-31092,10342, - -30945,10775,-30945,10775,-30945,10775,-30945,10775, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30632,11635,-30632,11635,-30632,11635,-30632,11635, - -30466,12062,-30466,12062,-30466,12062,-30466,12062, - -30295,12486,-30295,12486,-30295,12486,-30295,12486, - -30118,12908,-30118,12908,-30118,12908,-30118,12908, - -29935,13327,-29935,13327,-29935,13327,-29935,13327, - -29746,13744,-29746,13744,-29746,13744,-29746,13744, - -29551,14158,-29551,14158,-29551,14158,-29551,14158, - -29350,14569,-29350,14569,-29350,14569,-29350,14569, - -29144,14977,-29144,14977,-29144,14977,-29144,14977, - -28932,15383,-28932,15383,-28932,15383,-28932,15383, - -28714,15785,-28714,15785,-28714,15785,-28714,15785, - -28491,16184,-28491,16184,-28491,16184,-28491,16184, - -28262,16581,-28262,16581,-28262,16581,-28262,16581, - -28028,16974,-28028,16974,-28028,16974,-28028,16974, - -27788,17363,-27788,17363,-27788,17363,-27788,17363, - -27543,17750,-27543,17750,-27543,17750,-27543,17750, - -27293,18132,-27293,18132,-27293,18132,-27293,18132, - -27037,18512,-27037,18512,-27037,18512,-27037,18512, - -26776,18887,-26776,18887,-26776,18887,-26776,18887, - -26510,19259,-26510,19259,-26510,19259,-26510,19259, - -26238,19628,-26238,19628,-26238,19628,-26238,19628, - -25961,19992,-25961,19992,-25961,19992,-25961,19992, - -25680,20353,-25680,20353,-25680,20353,-25680,20353, - -25393,20709,-25393,20709,-25393,20709,-25393,20709, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24805,21410,-24805,21410,-24805,21410,-24805,21410, - -24504,21754,-24504,21754,-24504,21754,-24504,21754, - -24197,22094,-24197,22094,-24197,22094,-24197,22094, - -23887,22430,-23887,22430,-23887,22430,-23887,22430, - -23571,22761,-23571,22761,-23571,22761,-23571,22761, - -23251,23088,-23251,23088,-23251,23088,-23251,23088, - -22926,23411,-22926,23411,-22926,23411,-22926,23411, - -22597,23728,-22597,23728,-22597,23728,-22597,23728, - -22264,24042,-22264,24042,-22264,24042,-22264,24042, - -21926,24350,-21926,24350,-21926,24350,-21926,24350, - -21584,24654,-21584,24654,-21584,24654,-21584,24654, - -21237,24953,-21237,24953,-21237,24953,-21237,24953, - -20887,25247,-20887,25247,-20887,25247,-20887,25247, - -20532,25536,-20532,25536,-20532,25536,-20532,25536, - -20174,25820,-20174,25820,-20174,25820,-20174,25820, - -19811,26099,-19811,26099,-19811,26099,-19811,26099, - -19445,26373,-19445,26373,-19445,26373,-19445,26373, - -19075,26642,-19075,26642,-19075,26642,-19075,26642, - -18701,26906,-18701,26906,-18701,26906,-18701,26906, - -18324,27165,-18324,27165,-18324,27165,-18324,27165, - -17943,27418,-17943,27418,-17943,27418,-17943,27418, - -17558,27666,-17558,27666,-17558,27666,-17558,27666, - -17170,27908,-17170,27908,-17170,27908,-17170,27908, - -16779,28145,-16779,28145,-16779,28145,-16779,28145 - }; +static int16_t twa900[299*2*4]; +static int16_t twb900[299*2*4]; void dft900(int16_t *x,int16_t *y,unsigned char scale_flag) // 300 x 3 { @@ -13574,762 +8222,10 @@ void dft900(int16_t *x,int16_t *y,unsigned char scale_flag) // 300 x 3 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:239)/960)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:239)/960)); -twc = floor(32767*exp(-sqrt(-1)*2*pi*3*(1:239)/960)); -twa2 = zeros(1,2*239); -twb2 = zeros(1,2*239); -twc2 = zeros(1,2*239); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -twc2(1:2:end) = real(twc); -twc2(2:2:end) = imag(twc); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa960[239*2*4] = {"); -for i=1:2:(2*238) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"\nstatic int16_t twb960[239*2*4] = {"); -for i=1:2:(2*238) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fprintf(fd,"\nstatic int16_t twc960[239*2*4] = {"); -for i=1:2:(2*238) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -fclose(fd); -*/ -static int16_t twa960[239*2*4] = {32766,-215,32766,-215,32766,-215,32766,-215, - 32764,-429,32764,-429,32764,-429,32764,-429, - 32760,-644,32760,-644,32760,-644,32760,-644, - 32755,-858,32755,-858,32755,-858,32755,-858, - 32749,-1073,32749,-1073,32749,-1073,32749,-1073, - 32741,-1287,32741,-1287,32741,-1287,32741,-1287, - 32732,-1501,32732,-1501,32732,-1501,32732,-1501, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32710,-1930,32710,-1930,32710,-1930,32710,-1930, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32682,-2358,32682,-2358,32682,-2358,32682,-2358, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32648,-2785,32648,-2785,32648,-2785,32648,-2785, - 32629,-2999,32629,-2999,32629,-2999,32629,-2999, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32564,-3639,32564,-3639,32564,-3639,32564,-3639, - 32539,-3852,32539,-3852,32539,-3852,32539,-3852, - 32513,-4065,32513,-4065,32513,-4065,32513,-4065, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32457,-4490,32457,-4490,32457,-4490,32457,-4490, - 32427,-4702,32427,-4702,32427,-4702,32427,-4702, - 32396,-4914,32396,-4914,32396,-4914,32396,-4914, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32329,-5338,32329,-5338,32329,-5338,32329,-5338, - 32293,-5550,32293,-5550,32293,-5550,32293,-5550, - 32256,-5761,32256,-5761,32256,-5761,32256,-5761, - 32218,-5972,32218,-5972,32218,-5972,32218,-5972, - 32178,-6183,32178,-6183,32178,-6183,32178,-6183, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32094,-6603,32094,-6603,32094,-6603,32094,-6603, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 32005,-7023,32005,-7023,32005,-7023,32005,-7023, - 31959,-7232,31959,-7232,31959,-7232,31959,-7232, - 31911,-7441,31911,-7441,31911,-7441,31911,-7441, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31810,-7858,31810,-7858,31810,-7858,31810,-7858, - 31758,-8066,31758,-8066,31758,-8066,31758,-8066, - 31705,-8274,31705,-8274,31705,-8274,31705,-8274, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31594,-8688,31594,-8688,31594,-8688,31594,-8688, - 31536,-8895,31536,-8895,31536,-8895,31536,-8895, - 31477,-9101,31477,-9101,31477,-9101,31477,-9101, - 31417,-9307,31417,-9307,31417,-9307,31417,-9307, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 31293,-9717,31293,-9717,31293,-9717,31293,-9717, - 31228,-9922,31228,-9922,31228,-9922,31228,-9922, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31096,-10330,31096,-10330,31096,-10330,31096,-10330, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30958,-10736,30958,-10736,30958,-10736,30958,-10736, - 30887,-10938,30887,-10938,30887,-10938,30887,-10938, - 30815,-11140,30815,-11140,30815,-11140,30815,-11140, - 30741,-11342,30741,-11342,30741,-11342,30741,-11342, - 30666,-11543,30666,-11543,30666,-11543,30666,-11543, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30513,-11943,30513,-11943,30513,-11943,30513,-11943, - 30434,-12143,30434,-12143,30434,-12143,30434,-12143, - 30354,-12341,30354,-12341,30354,-12341,30354,-12341, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30190,-12738,30190,-12738,30190,-12738,30190,-12738, - 30106,-12935,30106,-12935,30106,-12935,30106,-12935, - 30020,-13132,30020,-13132,30020,-13132,30020,-13132, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29846,-13524,29846,-13524,29846,-13524,29846,-13524, - 29757,-13719,29757,-13719,29757,-13719,29757,-13719, - 29666,-13913,29666,-13913,29666,-13913,29666,-13913, - 29575,-14107,29575,-14107,29575,-14107,29575,-14107, - 29482,-14300,29482,-14300,29482,-14300,29482,-14300, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29292,-14685,29292,-14685,29292,-14685,29292,-14685, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 29097,-15067,29097,-15067,29097,-15067,29097,-15067, - 28998,-15257,28998,-15257,28998,-15257,28998,-15257, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28796,-15636,28796,-15636,28796,-15636,28796,-15636, - 28693,-15824,28693,-15824,28693,-15824,28693,-15824, - 28589,-16011,28589,-16011,28589,-16011,28589,-16011, - 28483,-16198,28483,-16198,28483,-16198,28483,-16198, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28269,-16569,28269,-16569,28269,-16569,28269,-16569, - 28160,-16754,28160,-16754,28160,-16754,28160,-16754, - 28049,-16938,28049,-16938,28049,-16938,28049,-16938, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27825,-17304,27825,-17304,27825,-17304,27825,-17304, - 27711,-17485,27711,-17485,27711,-17485,27711,-17485, - 27596,-17666,27596,-17666,27596,-17666,27596,-17666, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27363,-18026,27363,-18026,27363,-18026,27363,-18026, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 27125,-18383,27125,-18383,27125,-18383,27125,-18383, - 27004,-18560,27004,-18560,27004,-18560,27004,-18560, - 26882,-18736,26882,-18736,26882,-18736,26882,-18736, - 26758,-18912,26758,-18912,26758,-18912,26758,-18912, - 26634,-19087,26634,-19087,26634,-19087,26634,-19087, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26382,-19434,26382,-19434,26382,-19434,26382,-19434, - 26254,-19606,26254,-19606,26254,-19606,26254,-19606, - 26125,-19777,26125,-19777,26125,-19777,26125,-19777, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25864,-20117,25864,-20117,25864,-20117,25864,-20117, - 25732,-20286,25732,-20286,25732,-20286,25732,-20286, - 25599,-20454,25599,-20454,25599,-20454,25599,-20454, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 25192,-20953,25192,-20953,25192,-20953,25192,-20953, - 25054,-21117,25054,-21117,25054,-21117,25054,-21117, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24776,-21444,24776,-21444,24776,-21444,24776,-21444, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24493,-21766,24493,-21766,24493,-21766,24493,-21766, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24206,-22085,24206,-22085,24206,-22085,24206,-22085, - 24061,-22243,24061,-22243,24061,-22243,24061,-22243, - 23915,-22400,23915,-22400,23915,-22400,23915,-22400, - 23768,-22556,23768,-22556,23768,-22556,23768,-22556, - 23620,-22711,23620,-22711,23620,-22711,23620,-22711, - 23471,-22865,23471,-22865,23471,-22865,23471,-22865, - 23320,-23018,23320,-23018,23320,-23018,23320,-23018, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 23017,-23321,23017,-23321,23017,-23321,23017,-23321, - 22864,-23472,22864,-23472,22864,-23472,22864,-23472, - 22710,-23621,22710,-23621,22710,-23621,22710,-23621, - 22555,-23769,22555,-23769,22555,-23769,22555,-23769, - 22399,-23916,22399,-23916,22399,-23916,22399,-23916, - 22242,-24062,22242,-24062,22242,-24062,22242,-24062, - 22084,-24207,22084,-24207,22084,-24207,22084,-24207, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21765,-24494,21765,-24494,21765,-24494,21765,-24494, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21443,-24777,21443,-24777,21443,-24777,21443,-24777, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 21116,-25055,21116,-25055,21116,-25055,21116,-25055, - 20952,-25193,20952,-25193,20952,-25193,20952,-25193, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20453,-25600,20453,-25600,20453,-25600,20453,-25600, - 20285,-25733,20285,-25733,20285,-25733,20285,-25733, - 20116,-25865,20116,-25865,20116,-25865,20116,-25865, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19776,-26126,19776,-26126,19776,-26126,19776,-26126, - 19605,-26255,19605,-26255,19605,-26255,19605,-26255, - 19433,-26383,19433,-26383,19433,-26383,19433,-26383, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 19086,-26635,19086,-26635,19086,-26635,19086,-26635, - 18911,-26759,18911,-26759,18911,-26759,18911,-26759, - 18735,-26883,18735,-26883,18735,-26883,18735,-26883, - 18559,-27005,18559,-27005,18559,-27005,18559,-27005, - 18382,-27126,18382,-27126,18382,-27126,18382,-27126, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 18025,-27364,18025,-27364,18025,-27364,18025,-27364, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17665,-27597,17665,-27597,17665,-27597,17665,-27597, - 17484,-27712,17484,-27712,17484,-27712,17484,-27712, - 17303,-27826,17303,-27826,17303,-27826,17303,-27826, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16937,-28050,16937,-28050,16937,-28050,16937,-28050, - 16753,-28161,16753,-28161,16753,-28161,16753,-28161, - 16568,-28270,16568,-28270,16568,-28270,16568,-28270, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16197,-28484,16197,-28484,16197,-28484,16197,-28484, - 16010,-28590,16010,-28590,16010,-28590,16010,-28590, - 15823,-28694,15823,-28694,15823,-28694,15823,-28694, - 15635,-28797,15635,-28797,15635,-28797,15635,-28797, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 15256,-28999,15256,-28999,15256,-28999,15256,-28999, - 15066,-29098,15066,-29098,15066,-29098,15066,-29098, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14684,-29293,14684,-29293,14684,-29293,14684,-29293, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14299,-29483,14299,-29483,14299,-29483,14299,-29483, - 14106,-29576,14106,-29576,14106,-29576,14106,-29576, - 13912,-29667,13912,-29667,13912,-29667,13912,-29667, - 13718,-29758,13718,-29758,13718,-29758,13718,-29758, - 13523,-29847,13523,-29847,13523,-29847,13523,-29847, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 13131,-30021,13131,-30021,13131,-30021,13131,-30021, - 12934,-30107,12934,-30107,12934,-30107,12934,-30107, - 12737,-30191,12737,-30191,12737,-30191,12737,-30191, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12340,-30355,12340,-30355,12340,-30355,12340,-30355, - 12142,-30435,12142,-30435,12142,-30435,12142,-30435, - 11942,-30514,11942,-30514,11942,-30514,11942,-30514, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11542,-30667,11542,-30667,11542,-30667,11542,-30667, - 11341,-30742,11341,-30742,11341,-30742,11341,-30742, - 11139,-30816,11139,-30816,11139,-30816,11139,-30816, - 10937,-30888,10937,-30888,10937,-30888,10937,-30888, - 10735,-30959,10735,-30959,10735,-30959,10735,-30959, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10329,-31097,10329,-31097,10329,-31097,10329,-31097, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9921,-31229,9921,-31229,9921,-31229,9921,-31229, - 9716,-31294,9716,-31294,9716,-31294,9716,-31294, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 9306,-31418,9306,-31418,9306,-31418,9306,-31418, - 9100,-31478,9100,-31478,9100,-31478,9100,-31478, - 8894,-31537,8894,-31537,8894,-31537,8894,-31537, - 8687,-31595,8687,-31595,8687,-31595,8687,-31595, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8273,-31706,8273,-31706,8273,-31706,8273,-31706, - 8065,-31759,8065,-31759,8065,-31759,8065,-31759, - 7857,-31811,7857,-31811,7857,-31811,7857,-31811, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 7440,-31912,7440,-31912,7440,-31912,7440,-31912, - 7231,-31960,7231,-31960,7231,-31960,7231,-31960, - 7022,-32006,7022,-32006,7022,-32006,7022,-32006, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6602,-32095,6602,-32095,6602,-32095,6602,-32095, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 6182,-32179,6182,-32179,6182,-32179,6182,-32179, - 5971,-32219,5971,-32219,5971,-32219,5971,-32219, - 5760,-32257,5760,-32257,5760,-32257,5760,-32257, - 5549,-32294,5549,-32294,5549,-32294,5549,-32294, - 5337,-32330,5337,-32330,5337,-32330,5337,-32330, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4913,-32397,4913,-32397,4913,-32397,4913,-32397, - 4701,-32428,4701,-32428,4701,-32428,4701,-32428, - 4489,-32458,4489,-32458,4489,-32458,4489,-32458, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 4064,-32514,4064,-32514,4064,-32514,4064,-32514, - 3851,-32540,3851,-32540,3851,-32540,3851,-32540, - 3638,-32565,3638,-32565,3638,-32565,3638,-32565, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 2998,-32630,2998,-32630,2998,-32630,2998,-32630, - 2784,-32649,2784,-32649,2784,-32649,2784,-32649, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 2357,-32683,2357,-32683,2357,-32683,2357,-32683, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1929,-32711,1929,-32711,1929,-32711,1929,-32711, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1500,-32733,1500,-32733,1500,-32733,1500,-32733, - 1286,-32742,1286,-32742,1286,-32742,1286,-32742, - 1072,-32750,1072,-32750,1072,-32750,1072,-32750, - 857,-32756,857,-32756,857,-32756,857,-32756, - 643,-32761,643,-32761,643,-32761,643,-32761, - 428,-32765,428,-32765,428,-32765,428,-32765, - 214,-32767,214,-32767,214,-32767,214,-32767 - }; +static int16_t twa960[239*2*4]; +static int16_t twb960[239*2*4]; +static int16_t twc960[239*2*4]; -static int16_t twb960[239*2*4] = {32764,-429,32764,-429,32764,-429,32764,-429, - 32755,-858,32755,-858,32755,-858,32755,-858, - 32741,-1287,32741,-1287,32741,-1287,32741,-1287, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32629,-2999,32629,-2999,32629,-2999,32629,-2999, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32539,-3852,32539,-3852,32539,-3852,32539,-3852, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32427,-4702,32427,-4702,32427,-4702,32427,-4702, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32293,-5550,32293,-5550,32293,-5550,32293,-5550, - 32218,-5972,32218,-5972,32218,-5972,32218,-5972, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31959,-7232,31959,-7232,31959,-7232,31959,-7232, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31758,-8066,31758,-8066,31758,-8066,31758,-8066, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31536,-8895,31536,-8895,31536,-8895,31536,-8895, - 31417,-9307,31417,-9307,31417,-9307,31417,-9307, - 31293,-9717,31293,-9717,31293,-9717,31293,-9717, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30887,-10938,30887,-10938,30887,-10938,30887,-10938, - 30741,-11342,30741,-11342,30741,-11342,30741,-11342, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30434,-12143,30434,-12143,30434,-12143,30434,-12143, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30106,-12935,30106,-12935,30106,-12935,30106,-12935, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29757,-13719,29757,-13719,29757,-13719,29757,-13719, - 29575,-14107,29575,-14107,29575,-14107,29575,-14107, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28998,-15257,28998,-15257,28998,-15257,28998,-15257, - 28796,-15636,28796,-15636,28796,-15636,28796,-15636, - 28589,-16011,28589,-16011,28589,-16011,28589,-16011, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28160,-16754,28160,-16754,28160,-16754,28160,-16754, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27711,-17485,27711,-17485,27711,-17485,27711,-17485, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 27004,-18560,27004,-18560,27004,-18560,27004,-18560, - 26758,-18912,26758,-18912,26758,-18912,26758,-18912, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26254,-19606,26254,-19606,26254,-19606,26254,-19606, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25732,-20286,25732,-20286,25732,-20286,25732,-20286, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25192,-20953,25192,-20953,25192,-20953,25192,-20953, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24061,-22243,24061,-22243,24061,-22243,24061,-22243, - 23768,-22556,23768,-22556,23768,-22556,23768,-22556, - 23471,-22865,23471,-22865,23471,-22865,23471,-22865, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22864,-23472,22864,-23472,22864,-23472,22864,-23472, - 22555,-23769,22555,-23769,22555,-23769,22555,-23769, - 22242,-24062,22242,-24062,22242,-24062,22242,-24062, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 20952,-25193,20952,-25193,20952,-25193,20952,-25193, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20285,-25733,20285,-25733,20285,-25733,20285,-25733, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19605,-26255,19605,-26255,19605,-26255,19605,-26255, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18911,-26759,18911,-26759,18911,-26759,18911,-26759, - 18559,-27005,18559,-27005,18559,-27005,18559,-27005, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17484,-27712,17484,-27712,17484,-27712,17484,-27712, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16753,-28161,16753,-28161,16753,-28161,16753,-28161, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16010,-28590,16010,-28590,16010,-28590,16010,-28590, - 15635,-28797,15635,-28797,15635,-28797,15635,-28797, - 15256,-28999,15256,-28999,15256,-28999,15256,-28999, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14106,-29576,14106,-29576,14106,-29576,14106,-29576, - 13718,-29758,13718,-29758,13718,-29758,13718,-29758, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12934,-30107,12934,-30107,12934,-30107,12934,-30107, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12142,-30435,12142,-30435,12142,-30435,12142,-30435, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11341,-30742,11341,-30742,11341,-30742,11341,-30742, - 10937,-30888,10937,-30888,10937,-30888,10937,-30888, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9716,-31294,9716,-31294,9716,-31294,9716,-31294, - 9306,-31418,9306,-31418,9306,-31418,9306,-31418, - 8894,-31537,8894,-31537,8894,-31537,8894,-31537, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8065,-31759,8065,-31759,8065,-31759,8065,-31759, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 7231,-31960,7231,-31960,7231,-31960,7231,-31960, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 5971,-32219,5971,-32219,5971,-32219,5971,-32219, - 5549,-32294,5549,-32294,5549,-32294,5549,-32294, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4701,-32428,4701,-32428,4701,-32428,4701,-32428, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3851,-32540,3851,-32540,3851,-32540,3851,-32540, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 2998,-32630,2998,-32630,2998,-32630,2998,-32630, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1286,-32742,1286,-32742,1286,-32742,1286,-32742, - 857,-32756,857,-32756,857,-32756,857,-32756, - 428,-32765,428,-32765,428,-32765,428,-32765, - 0,-32767,0,-32767,0,-32767,0,-32767, - -429,-32765,-429,-32765,-429,-32765,-429,-32765, - -858,-32756,-858,-32756,-858,-32756,-858,-32756, - -1287,-32742,-1287,-32742,-1287,-32742,-1287,-32742, - -1715,-32723,-1715,-32723,-1715,-32723,-1715,-32723, - -2144,-32697,-2144,-32697,-2144,-32697,-2144,-32697, - -2571,-32666,-2571,-32666,-2571,-32666,-2571,-32666, - -2999,-32630,-2999,-32630,-2999,-32630,-2999,-32630, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3852,-32540,-3852,-32540,-3852,-32540,-3852,-32540, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -4702,-32428,-4702,-32428,-4702,-32428,-4702,-32428, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5550,-32294,-5550,-32294,-5550,-32294,-5550,-32294, - -5972,-32219,-5972,-32219,-5972,-32219,-5972,-32219, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7232,-31960,-7232,-31960,-7232,-31960,-7232,-31960, - -7650,-31862,-7650,-31862,-7650,-31862,-7650,-31862, - -8066,-31759,-8066,-31759,-8066,-31759,-8066,-31759, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8895,-31537,-8895,-31537,-8895,-31537,-8895,-31537, - -9307,-31418,-9307,-31418,-9307,-31418,-9307,-31418, - -9717,-31294,-9717,-31294,-9717,-31294,-9717,-31294, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10533,-31029,-10533,-31029,-10533,-31029,-10533,-31029, - -10938,-30888,-10938,-30888,-10938,-30888,-10938,-30888, - -11342,-30742,-11342,-30742,-11342,-30742,-11342,-30742, - -11743,-30591,-11743,-30591,-11743,-30591,-11743,-30591, - -12143,-30435,-12143,-30435,-12143,-30435,-12143,-30435, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -12935,-30107,-12935,-30107,-12935,-30107,-12935,-30107, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13719,-29758,-13719,-29758,-13719,-29758,-13719,-29758, - -14107,-29576,-14107,-29576,-14107,-29576,-14107,-29576, - -14493,-29388,-14493,-29388,-14493,-29388,-14493,-29388, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15257,-28999,-15257,-28999,-15257,-28999,-15257,-28999, - -15636,-28797,-15636,-28797,-15636,-28797,-15636,-28797, - -16011,-28590,-16011,-28590,-16011,-28590,-16011,-28590, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16754,-28161,-16754,-28161,-16754,-28161,-16754,-28161, - -17121,-27939,-17121,-27939,-17121,-27939,-17121,-27939, - -17485,-27712,-17485,-27712,-17485,-27712,-17485,-27712, - -17847,-27481,-17847,-27481,-17847,-27481,-17847,-27481, - -18205,-27245,-18205,-27245,-18205,-27245,-18205,-27245, - -18560,-27005,-18560,-27005,-18560,-27005,-18560,-27005, - -18912,-26759,-18912,-26759,-18912,-26759,-18912,-26759, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19606,-26255,-19606,-26255,-19606,-26255,-19606,-26255, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -20286,-25733,-20286,-25733,-20286,-25733,-20286,-25733, - -20621,-25465,-20621,-25465,-20621,-25465,-20621,-25465, - -20953,-25193,-20953,-25193,-20953,-25193,-20953,-25193, - -21281,-24917,-21281,-24917,-21281,-24917,-21281,-24917, - -21605,-24636,-21605,-24636,-21605,-24636,-21605,-24636, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22243,-24062,-22243,-24062,-22243,-24062,-22243,-24062, - -22556,-23769,-22556,-23769,-22556,-23769,-22556,-23769, - -22865,-23472,-22865,-23472,-22865,-23472,-22865,-23472, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23472,-22865,-23472,-22865,-23472,-22865,-23472,-22865, - -23769,-22556,-23769,-22556,-23769,-22556,-23769,-22556, - -24062,-22243,-24062,-22243,-24062,-22243,-24062,-22243, - -24351,-21926,-24351,-21926,-24351,-21926,-24351,-21926, - -24636,-21605,-24636,-21605,-24636,-21605,-24636,-21605, - -24917,-21281,-24917,-21281,-24917,-21281,-24917,-21281, - -25193,-20953,-25193,-20953,-25193,-20953,-25193,-20953, - -25465,-20621,-25465,-20621,-25465,-20621,-25465,-20621, - -25733,-20286,-25733,-20286,-25733,-20286,-25733,-20286, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26255,-19606,-26255,-19606,-26255,-19606,-26255,-19606, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26759,-18912,-26759,-18912,-26759,-18912,-26759,-18912, - -27005,-18560,-27005,-18560,-27005,-18560,-27005,-18560, - -27245,-18205,-27245,-18205,-27245,-18205,-27245,-18205, - -27481,-17847,-27481,-17847,-27481,-17847,-27481,-17847, - -27712,-17485,-27712,-17485,-27712,-17485,-27712,-17485, - -27939,-17121,-27939,-17121,-27939,-17121,-27939,-17121, - -28161,-16754,-28161,-16754,-28161,-16754,-28161,-16754, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28590,-16011,-28590,-16011,-28590,-16011,-28590,-16011, - -28797,-15636,-28797,-15636,-28797,-15636,-28797,-15636, - -28999,-15257,-28999,-15257,-28999,-15257,-28999,-15257, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29388,-14493,-29388,-14493,-29388,-14493,-29388,-14493, - -29576,-14107,-29576,-14107,-29576,-14107,-29576,-14107, - -29758,-13719,-29758,-13719,-29758,-13719,-29758,-13719, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30107,-12935,-30107,-12935,-30107,-12935,-30107,-12935, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30435,-12143,-30435,-12143,-30435,-12143,-30435,-12143, - -30591,-11743,-30591,-11743,-30591,-11743,-30591,-11743, - -30742,-11342,-30742,-11342,-30742,-11342,-30742,-11342, - -30888,-10938,-30888,-10938,-30888,-10938,-30888,-10938, - -31029,-10533,-31029,-10533,-31029,-10533,-31029,-10533, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31294,-9717,-31294,-9717,-31294,-9717,-31294,-9717, - -31418,-9307,-31418,-9307,-31418,-9307,-31418,-9307, - -31537,-8895,-31537,-8895,-31537,-8895,-31537,-8895, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31759,-8066,-31759,-8066,-31759,-8066,-31759,-8066, - -31862,-7650,-31862,-7650,-31862,-7650,-31862,-7650, - -31960,-7232,-31960,-7232,-31960,-7232,-31960,-7232, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32138,-6393,-32138,-6393,-32138,-6393,-32138,-6393, - -32219,-5972,-32219,-5972,-32219,-5972,-32219,-5972, - -32294,-5550,-32294,-5550,-32294,-5550,-32294,-5550, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32428,-4702,-32428,-4702,-32428,-4702,-32428,-4702, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32540,-3852,-32540,-3852,-32540,-3852,-32540,-3852, - -32588,-3426,-32588,-3426,-32588,-3426,-32588,-3426, - -32630,-2999,-32630,-2999,-32630,-2999,-32630,-2999, - -32666,-2571,-32666,-2571,-32666,-2571,-32666,-2571, - -32697,-2144,-32697,-2144,-32697,-2144,-32697,-2144, - -32723,-1715,-32723,-1715,-32723,-1715,-32723,-1715, - -32742,-1287,-32742,-1287,-32742,-1287,-32742,-1287, - -32756,-858,-32756,-858,-32756,-858,-32756,-858, - -32765,-429,-32765,-429,-32765,-429,-32765,-429 - }; - -static int16_t twc960[239*2*4] = {32760,-644,32760,-644,32760,-644,32760,-644, - 32741,-1287,32741,-1287,32741,-1287,32741,-1287, - 32710,-1930,32710,-1930,32710,-1930,32710,-1930, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32539,-3852,32539,-3852,32539,-3852,32539,-3852, - 32457,-4490,32457,-4490,32457,-4490,32457,-4490, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32256,-5761,32256,-5761,32256,-5761,32256,-5761, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32005,-7023,32005,-7023,32005,-7023,32005,-7023, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31705,-8274,31705,-8274,31705,-8274,31705,-8274, - 31536,-8895,31536,-8895,31536,-8895,31536,-8895, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 30958,-10736,30958,-10736,30958,-10736,30958,-10736, - 30741,-11342,30741,-11342,30741,-11342,30741,-11342, - 30513,-11943,30513,-11943,30513,-11943,30513,-11943, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30020,-13132,30020,-13132,30020,-13132,30020,-13132, - 29757,-13719,29757,-13719,29757,-13719,29757,-13719, - 29482,-14300,29482,-14300,29482,-14300,29482,-14300, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28589,-16011,28589,-16011,28589,-16011,28589,-16011, - 28269,-16569,28269,-16569,28269,-16569,28269,-16569, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27596,-17666,27596,-17666,27596,-17666,27596,-17666, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 26882,-18736,26882,-18736,26882,-18736,26882,-18736, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26125,-19777,26125,-19777,26125,-19777,26125,-19777, - 25732,-20286,25732,-20286,25732,-20286,25732,-20286, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24493,-21766,24493,-21766,24493,-21766,24493,-21766, - 24061,-22243,24061,-22243,24061,-22243,24061,-22243, - 23620,-22711,23620,-22711,23620,-22711,23620,-22711, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22710,-23621,22710,-23621,22710,-23621,22710,-23621, - 22242,-24062,22242,-24062,22242,-24062,22242,-24062, - 21765,-24494,21765,-24494,21765,-24494,21765,-24494, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 20285,-25733,20285,-25733,20285,-25733,20285,-25733, - 19776,-26126,19776,-26126,19776,-26126,19776,-26126, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18735,-26883,18735,-26883,18735,-26883,18735,-26883, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17665,-27597,17665,-27597,17665,-27597,17665,-27597, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16568,-28270,16568,-28270,16568,-28270,16568,-28270, - 16010,-28590,16010,-28590,16010,-28590,16010,-28590, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14299,-29483,14299,-29483,14299,-29483,14299,-29483, - 13718,-29758,13718,-29758,13718,-29758,13718,-29758, - 13131,-30021,13131,-30021,13131,-30021,13131,-30021, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 11942,-30514,11942,-30514,11942,-30514,11942,-30514, - 11341,-30742,11341,-30742,11341,-30742,11341,-30742, - 10735,-30959,10735,-30959,10735,-30959,10735,-30959, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 8894,-31537,8894,-31537,8894,-31537,8894,-31537, - 8273,-31706,8273,-31706,8273,-31706,8273,-31706, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 7022,-32006,7022,-32006,7022,-32006,7022,-32006, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 5760,-32257,5760,-32257,5760,-32257,5760,-32257, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4489,-32458,4489,-32458,4489,-32458,4489,-32458, - 3851,-32540,3851,-32540,3851,-32540,3851,-32540, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 1929,-32711,1929,-32711,1929,-32711,1929,-32711, - 1286,-32742,1286,-32742,1286,-32742,1286,-32742, - 643,-32761,643,-32761,643,-32761,643,-32761, - 0,-32767,0,-32767,0,-32767,0,-32767, - -644,-32761,-644,-32761,-644,-32761,-644,-32761, - -1287,-32742,-1287,-32742,-1287,-32742,-1287,-32742, - -1930,-32711,-1930,-32711,-1930,-32711,-1930,-32711, - -2571,-32666,-2571,-32666,-2571,-32666,-2571,-32666, - -3212,-32610,-3212,-32610,-3212,-32610,-3212,-32610, - -3852,-32540,-3852,-32540,-3852,-32540,-3852,-32540, - -4490,-32458,-4490,-32458,-4490,-32458,-4490,-32458, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5761,-32257,-5761,-32257,-5761,-32257,-5761,-32257, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -7023,-32006,-7023,-32006,-7023,-32006,-7023,-32006, - -7650,-31862,-7650,-31862,-7650,-31862,-7650,-31862, - -8274,-31706,-8274,-31706,-8274,-31706,-8274,-31706, - -8895,-31537,-8895,-31537,-8895,-31537,-8895,-31537, - -9512,-31357,-9512,-31357,-9512,-31357,-9512,-31357, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10736,-30959,-10736,-30959,-10736,-30959,-10736,-30959, - -11342,-30742,-11342,-30742,-11342,-30742,-11342,-30742, - -11943,-30514,-11943,-30514,-11943,-30514,-11943,-30514, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13132,-30021,-13132,-30021,-13132,-30021,-13132,-30021, - -13719,-29758,-13719,-29758,-13719,-29758,-13719,-29758, - -14300,-29483,-14300,-29483,-14300,-29483,-14300,-29483, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15447,-28898,-15447,-28898,-15447,-28898,-15447,-28898, - -16011,-28590,-16011,-28590,-16011,-28590,-16011,-28590, - -16569,-28270,-16569,-28270,-16569,-28270,-16569,-28270, - -17121,-27939,-17121,-27939,-17121,-27939,-17121,-27939, - -17666,-27597,-17666,-27597,-17666,-27597,-17666,-27597, - -18205,-27245,-18205,-27245,-18205,-27245,-18205,-27245, - -18736,-26883,-18736,-26883,-18736,-26883,-18736,-26883, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19777,-26126,-19777,-26126,-19777,-26126,-19777,-26126, - -20286,-25733,-20286,-25733,-20286,-25733,-20286,-25733, - -20788,-25330,-20788,-25330,-20788,-25330,-20788,-25330, - -21281,-24917,-21281,-24917,-21281,-24917,-21281,-24917, - -21766,-24494,-21766,-24494,-21766,-24494,-21766,-24494, - -22243,-24062,-22243,-24062,-22243,-24062,-22243,-24062, - -22711,-23621,-22711,-23621,-22711,-23621,-22711,-23621, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23621,-22711,-23621,-22711,-23621,-22711,-23621,-22711, - -24062,-22243,-24062,-22243,-24062,-22243,-24062,-22243, - -24494,-21766,-24494,-21766,-24494,-21766,-24494,-21766, - -24917,-21281,-24917,-21281,-24917,-21281,-24917,-21281, - -25330,-20788,-25330,-20788,-25330,-20788,-25330,-20788, - -25733,-20286,-25733,-20286,-25733,-20286,-25733,-20286, - -26126,-19777,-26126,-19777,-26126,-19777,-26126,-19777, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26883,-18736,-26883,-18736,-26883,-18736,-26883,-18736, - -27245,-18205,-27245,-18205,-27245,-18205,-27245,-18205, - -27597,-17666,-27597,-17666,-27597,-17666,-27597,-17666, - -27939,-17121,-27939,-17121,-27939,-17121,-27939,-17121, - -28270,-16569,-28270,-16569,-28270,-16569,-28270,-16569, - -28590,-16011,-28590,-16011,-28590,-16011,-28590,-16011, - -28898,-15447,-28898,-15447,-28898,-15447,-28898,-15447, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29483,-14300,-29483,-14300,-29483,-14300,-29483,-14300, - -29758,-13719,-29758,-13719,-29758,-13719,-29758,-13719, - -30021,-13132,-30021,-13132,-30021,-13132,-30021,-13132, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30514,-11943,-30514,-11943,-30514,-11943,-30514,-11943, - -30742,-11342,-30742,-11342,-30742,-11342,-30742,-11342, - -30959,-10736,-30959,-10736,-30959,-10736,-30959,-10736, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31357,-9512,-31357,-9512,-31357,-9512,-31357,-9512, - -31537,-8895,-31537,-8895,-31537,-8895,-31537,-8895, - -31706,-8274,-31706,-8274,-31706,-8274,-31706,-8274, - -31862,-7650,-31862,-7650,-31862,-7650,-31862,-7650, - -32006,-7023,-32006,-7023,-32006,-7023,-32006,-7023, - -32138,-6393,-32138,-6393,-32138,-6393,-32138,-6393, - -32257,-5761,-32257,-5761,-32257,-5761,-32257,-5761, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32458,-4490,-32458,-4490,-32458,-4490,-32458,-4490, - -32540,-3852,-32540,-3852,-32540,-3852,-32540,-3852, - -32610,-3212,-32610,-3212,-32610,-3212,-32610,-3212, - -32666,-2571,-32666,-2571,-32666,-2571,-32666,-2571, - -32711,-1930,-32711,-1930,-32711,-1930,-32711,-1930, - -32742,-1287,-32742,-1287,-32742,-1287,-32742,-1287, - -32761,-644,-32761,-644,-32761,-644,-32761,-644, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32761,643,-32761,643,-32761,643,-32761,643, - -32742,1286,-32742,1286,-32742,1286,-32742,1286, - -32711,1929,-32711,1929,-32711,1929,-32711,1929, - -32666,2570,-32666,2570,-32666,2570,-32666,2570, - -32610,3211,-32610,3211,-32610,3211,-32610,3211, - -32540,3851,-32540,3851,-32540,3851,-32540,3851, - -32458,4489,-32458,4489,-32458,4489,-32458,4489, - -32364,5125,-32364,5125,-32364,5125,-32364,5125, - -32257,5760,-32257,5760,-32257,5760,-32257,5760, - -32138,6392,-32138,6392,-32138,6392,-32138,6392, - -32006,7022,-32006,7022,-32006,7022,-32006,7022, - -31862,7649,-31862,7649,-31862,7649,-31862,7649, - -31706,8273,-31706,8273,-31706,8273,-31706,8273, - -31537,8894,-31537,8894,-31537,8894,-31537,8894, - -31357,9511,-31357,9511,-31357,9511,-31357,9511, - -31164,10125,-31164,10125,-31164,10125,-31164,10125, - -30959,10735,-30959,10735,-30959,10735,-30959,10735, - -30742,11341,-30742,11341,-30742,11341,-30742,11341, - -30514,11942,-30514,11942,-30514,11942,-30514,11942, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -30021,13131,-30021,13131,-30021,13131,-30021,13131, - -29758,13718,-29758,13718,-29758,13718,-29758,13718, - -29483,14299,-29483,14299,-29483,14299,-29483,14299, - -29196,14875,-29196,14875,-29196,14875,-29196,14875, - -28898,15446,-28898,15446,-28898,15446,-28898,15446, - -28590,16010,-28590,16010,-28590,16010,-28590,16010, - -28270,16568,-28270,16568,-28270,16568,-28270,16568, - -27939,17120,-27939,17120,-27939,17120,-27939,17120, - -27597,17665,-27597,17665,-27597,17665,-27597,17665, - -27245,18204,-27245,18204,-27245,18204,-27245,18204, - -26883,18735,-26883,18735,-26883,18735,-26883,18735, - -26510,19259,-26510,19259,-26510,19259,-26510,19259, - -26126,19776,-26126,19776,-26126,19776,-26126,19776, - -25733,20285,-25733,20285,-25733,20285,-25733,20285, - -25330,20787,-25330,20787,-25330,20787,-25330,20787, - -24917,21280,-24917,21280,-24917,21280,-24917,21280, - -24494,21765,-24494,21765,-24494,21765,-24494,21765, - -24062,22242,-24062,22242,-24062,22242,-24062,22242, - -23621,22710,-23621,22710,-23621,22710,-23621,22710, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22711,23620,-22711,23620,-22711,23620,-22711,23620, - -22243,24061,-22243,24061,-22243,24061,-22243,24061, - -21766,24493,-21766,24493,-21766,24493,-21766,24493, - -21281,24916,-21281,24916,-21281,24916,-21281,24916, - -20788,25329,-20788,25329,-20788,25329,-20788,25329, - -20286,25732,-20286,25732,-20286,25732,-20286,25732, - -19777,26125,-19777,26125,-19777,26125,-19777,26125, - -19260,26509,-19260,26509,-19260,26509,-19260,26509, - -18736,26882,-18736,26882,-18736,26882,-18736,26882, - -18205,27244,-18205,27244,-18205,27244,-18205,27244, - -17666,27596,-17666,27596,-17666,27596,-17666,27596, - -17121,27938,-17121,27938,-17121,27938,-17121,27938, - -16569,28269,-16569,28269,-16569,28269,-16569,28269, - -16011,28589,-16011,28589,-16011,28589,-16011,28589, - -15447,28897,-15447,28897,-15447,28897,-15447,28897, - -14876,29195,-14876,29195,-14876,29195,-14876,29195, - -14300,29482,-14300,29482,-14300,29482,-14300,29482, - -13719,29757,-13719,29757,-13719,29757,-13719,29757, - -13132,30020,-13132,30020,-13132,30020,-13132,30020, - -12540,30272,-12540,30272,-12540,30272,-12540,30272, - -11943,30513,-11943,30513,-11943,30513,-11943,30513, - -11342,30741,-11342,30741,-11342,30741,-11342,30741, - -10736,30958,-10736,30958,-10736,30958,-10736,30958, - -10126,31163,-10126,31163,-10126,31163,-10126,31163, - -9512,31356,-9512,31356,-9512,31356,-9512,31356, - -8895,31536,-8895,31536,-8895,31536,-8895,31536, - -8274,31705,-8274,31705,-8274,31705,-8274,31705, - -7650,31861,-7650,31861,-7650,31861,-7650,31861, - -7023,32005,-7023,32005,-7023,32005,-7023,32005, - -6393,32137,-6393,32137,-6393,32137,-6393,32137, - -5761,32256,-5761,32256,-5761,32256,-5761,32256, - -5126,32363,-5126,32363,-5126,32363,-5126,32363, - -4490,32457,-4490,32457,-4490,32457,-4490,32457, - -3852,32539,-3852,32539,-3852,32539,-3852,32539, - -3212,32609,-3212,32609,-3212,32609,-3212,32609, - -2571,32665,-2571,32665,-2571,32665,-2571,32665, - -1930,32710,-1930,32710,-1930,32710,-1930,32710, - -1287,32741,-1287,32741,-1287,32741,-1287,32741, - -644,32760,-644,32760,-644,32760,-644,32760 - }; void dft960(int16_t *x,int16_t *y,unsigned char scale_flag) // 240 x 4 { @@ -14385,678 +8281,9 @@ void dft960(int16_t *x,int16_t *y,unsigned char scale_flag) // 240 x 4 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:323)/972)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:323)/972)); -twa2 = zeros(1,2*323); -twb2 = zeros(1,2*323); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa972[323*2*4] = {"); -for i=1:2:(2*322) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb972[323*2*4] = {"); -for i=1:2:(2*322) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); -*/ -static int16_t twa972[323*2*4] = {32766,-212,32766,-212,32766,-212,32766,-212, - 32764,-424,32764,-424,32764,-424,32764,-424, - 32760,-636,32760,-636,32760,-636,32760,-636, - 32756,-848,32756,-848,32756,-848,32756,-848, - 32749,-1059,32749,-1059,32749,-1059,32749,-1059, - 32742,-1271,32742,-1271,32742,-1271,32742,-1271, - 32733,-1483,32733,-1483,32733,-1483,32733,-1483, - 32723,-1694,32723,-1694,32723,-1694,32723,-1694, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32698,-2117,32698,-2117,32698,-2117,32698,-2117, - 32684,-2328,32684,-2328,32684,-2328,32684,-2328, - 32668,-2540,32668,-2540,32668,-2540,32668,-2540, - 32651,-2751,32651,-2751,32651,-2751,32651,-2751, - 32632,-2962,32632,-2962,32632,-2962,32632,-2962, - 32613,-3173,32613,-3173,32613,-3173,32613,-3173, - 32591,-3383,32591,-3383,32591,-3383,32591,-3383, - 32569,-3594,32569,-3594,32569,-3594,32569,-3594, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32520,-4015,32520,-4015,32520,-4015,32520,-4015, - 32493,-4225,32493,-4225,32493,-4225,32493,-4225, - 32465,-4435,32465,-4435,32465,-4435,32465,-4435, - 32436,-4645,32436,-4645,32436,-4645,32436,-4645, - 32405,-4854,32405,-4854,32405,-4854,32405,-4854, - 32373,-5064,32373,-5064,32373,-5064,32373,-5064, - 32340,-5273,32340,-5273,32340,-5273,32340,-5273, - 32305,-5482,32305,-5482,32305,-5482,32305,-5482, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32231,-5899,32231,-5899,32231,-5899,32231,-5899, - 32192,-6107,32192,-6107,32192,-6107,32192,-6107, - 32152,-6315,32152,-6315,32152,-6315,32152,-6315, - 32111,-6523,32111,-6523,32111,-6523,32111,-6523, - 32068,-6730,32068,-6730,32068,-6730,32068,-6730, - 32024,-6937,32024,-6937,32024,-6937,32024,-6937, - 31978,-7144,31978,-7144,31978,-7144,31978,-7144, - 31931,-7351,31931,-7351,31931,-7351,31931,-7351, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31834,-7763,31834,-7763,31834,-7763,31834,-7763, - 31783,-7969,31783,-7969,31783,-7969,31783,-7969, - 31731,-8174,31731,-8174,31731,-8174,31731,-8174, - 31677,-8379,31677,-8379,31677,-8379,31677,-8379, - 31622,-8583,31622,-8583,31622,-8583,31622,-8583, - 31566,-8788,31566,-8788,31566,-8788,31566,-8788, - 31509,-8992,31509,-8992,31509,-8992,31509,-8992, - 31450,-9195,31450,-9195,31450,-9195,31450,-9195, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31329,-9601,31329,-9601,31329,-9601,31329,-9601, - 31266,-9803,31266,-9803,31266,-9803,31266,-9803, - 31202,-10005,31202,-10005,31202,-10005,31202,-10005, - 31136,-10207,31136,-10207,31136,-10207,31136,-10207, - 31070,-10408,31070,-10408,31070,-10408,31070,-10408, - 31002,-10608,31002,-10608,31002,-10608,31002,-10608, - 30933,-10808,30933,-10808,30933,-10808,30933,-10808, - 30862,-11008,30862,-11008,30862,-11008,30862,-11008, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30717,-11406,30717,-11406,30717,-11406,30717,-11406, - 30643,-11605,30643,-11605,30643,-11605,30643,-11605, - 30567,-11802,30567,-11802,30567,-11802,30567,-11802, - 30490,-12000,30490,-12000,30490,-12000,30490,-12000, - 30412,-12197,30412,-12197,30412,-12197,30412,-12197, - 30333,-12393,30333,-12393,30333,-12393,30333,-12393, - 30252,-12589,30252,-12589,30252,-12589,30252,-12589, - 30170,-12784,30170,-12784,30170,-12784,30170,-12784, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 30002,-13173,30002,-13173,30002,-13173,30002,-13173, - 29916,-13367,29916,-13367,29916,-13367,29916,-13367, - 29829,-13560,29829,-13560,29829,-13560,29829,-13560, - 29741,-13752,29741,-13752,29741,-13752,29741,-13752, - 29652,-13944,29652,-13944,29652,-13944,29652,-13944, - 29561,-14136,29561,-14136,29561,-14136,29561,-14136, - 29469,-14327,29469,-14327,29469,-14327,29469,-14327, - 29376,-14517,29376,-14517,29376,-14517,29376,-14517, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29185,-14895,29185,-14895,29185,-14895,29185,-14895, - 29089,-15084,29089,-15084,29089,-15084,29089,-15084, - 28990,-15271,28990,-15271,28990,-15271,28990,-15271, - 28891,-15458,28891,-15458,28891,-15458,28891,-15458, - 28791,-15645,28791,-15645,28791,-15645,28791,-15645, - 28689,-15831,28689,-15831,28689,-15831,28689,-15831, - 28586,-16016,28586,-16016,28586,-16016,28586,-16016, - 28482,-16200,28482,-16200,28482,-16200,28482,-16200, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28270,-16567,28270,-16567,28270,-16567,28270,-16567, - 28162,-16749,28162,-16749,28162,-16749,28162,-16749, - 28054,-16931,28054,-16931,28054,-16931,28054,-16931, - 27943,-17112,27943,-17112,27943,-17112,27943,-17112, - 27832,-17292,27832,-17292,27832,-17292,27832,-17292, - 27720,-17472,27720,-17472,27720,-17472,27720,-17472, - 27606,-17651,27606,-17651,27606,-17651,27606,-17651, - 27492,-17829,27492,-17829,27492,-17829,27492,-17829, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27259,-18183,27259,-18183,27259,-18183,27259,-18183, - 27141,-18359,27141,-18359,27141,-18359,27141,-18359, - 27022,-18534,27022,-18534,27022,-18534,27022,-18534, - 26901,-18708,26901,-18708,26901,-18708,26901,-18708, - 26780,-18882,26780,-18882,26780,-18882,26780,-18882, - 26657,-19054,26657,-19054,26657,-19054,26657,-19054, - 26533,-19226,26533,-19226,26533,-19226,26533,-19226, - 26409,-19397,26409,-19397,26409,-19397,26409,-19397, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 26156,-19737,26156,-19737,26156,-19737,26156,-19737, - 26028,-19906,26028,-19906,26028,-19906,26028,-19906, - 25898,-20074,25898,-20074,25898,-20074,25898,-20074, - 25768,-20241,25768,-20241,25768,-20241,25768,-20241, - 25637,-20407,25637,-20407,25637,-20407,25637,-20407, - 25504,-20572,25504,-20572,25504,-20572,25504,-20572, - 25371,-20736,25371,-20736,25371,-20736,25371,-20736, - 25236,-20900,25236,-20900,25236,-20900,25236,-20900, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24964,-21225,24964,-21225,24964,-21225,24964,-21225, - 24826,-21385,24826,-21385,24826,-21385,24826,-21385, - 24687,-21546,24687,-21546,24687,-21546,24687,-21546, - 24548,-21705,24548,-21705,24548,-21705,24548,-21705, - 24407,-21863,24407,-21863,24407,-21863,24407,-21863, - 24265,-22020,24265,-22020,24265,-22020,24265,-22020, - 24122,-22177,24122,-22177,24122,-22177,24122,-22177, - 23978,-22332,23978,-22332,23978,-22332,23978,-22332, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23688,-22640,23688,-22640,23688,-22640,23688,-22640, - 23541,-22793,23541,-22793,23541,-22793,23541,-22793, - 23393,-22945,23393,-22945,23393,-22945,23393,-22945, - 23244,-23095,23244,-23095,23244,-23095,23244,-23095, - 23094,-23245,23094,-23245,23094,-23245,23094,-23245, - 22944,-23394,22944,-23394,22944,-23394,22944,-23394, - 22792,-23542,22792,-23542,22792,-23542,22792,-23542, - 22639,-23689,22639,-23689,22639,-23689,22639,-23689, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22331,-23979,22331,-23979,22331,-23979,22331,-23979, - 22176,-24123,22176,-24123,22176,-24123,22176,-24123, - 22019,-24266,22019,-24266,22019,-24266,22019,-24266, - 21862,-24408,21862,-24408,21862,-24408,21862,-24408, - 21704,-24549,21704,-24549,21704,-24549,21704,-24549, - 21545,-24688,21545,-24688,21545,-24688,21545,-24688, - 21384,-24827,21384,-24827,21384,-24827,21384,-24827, - 21224,-24965,21224,-24965,21224,-24965,21224,-24965, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20899,-25237,20899,-25237,20899,-25237,20899,-25237, - 20735,-25372,20735,-25372,20735,-25372,20735,-25372, - 20571,-25505,20571,-25505,20571,-25505,20571,-25505, - 20406,-25638,20406,-25638,20406,-25638,20406,-25638, - 20240,-25769,20240,-25769,20240,-25769,20240,-25769, - 20073,-25899,20073,-25899,20073,-25899,20073,-25899, - 19905,-26029,19905,-26029,19905,-26029,19905,-26029, - 19736,-26157,19736,-26157,19736,-26157,19736,-26157, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19396,-26410,19396,-26410,19396,-26410,19396,-26410, - 19225,-26534,19225,-26534,19225,-26534,19225,-26534, - 19053,-26658,19053,-26658,19053,-26658,19053,-26658, - 18881,-26781,18881,-26781,18881,-26781,18881,-26781, - 18707,-26902,18707,-26902,18707,-26902,18707,-26902, - 18533,-27023,18533,-27023,18533,-27023,18533,-27023, - 18358,-27142,18358,-27142,18358,-27142,18358,-27142, - 18182,-27260,18182,-27260,18182,-27260,18182,-27260, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17828,-27493,17828,-27493,17828,-27493,17828,-27493, - 17650,-27607,17650,-27607,17650,-27607,17650,-27607, - 17471,-27721,17471,-27721,17471,-27721,17471,-27721, - 17291,-27833,17291,-27833,17291,-27833,17291,-27833, - 17111,-27944,17111,-27944,17111,-27944,17111,-27944, - 16930,-28055,16930,-28055,16930,-28055,16930,-28055, - 16748,-28163,16748,-28163,16748,-28163,16748,-28163, - 16566,-28271,16566,-28271,16566,-28271,16566,-28271, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16199,-28483,16199,-28483,16199,-28483,16199,-28483, - 16015,-28587,16015,-28587,16015,-28587,16015,-28587, - 15830,-28690,15830,-28690,15830,-28690,15830,-28690, - 15644,-28792,15644,-28792,15644,-28792,15644,-28792, - 15457,-28892,15457,-28892,15457,-28892,15457,-28892, - 15270,-28991,15270,-28991,15270,-28991,15270,-28991, - 15083,-29090,15083,-29090,15083,-29090,15083,-29090, - 14894,-29186,14894,-29186,14894,-29186,14894,-29186, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14516,-29377,14516,-29377,14516,-29377,14516,-29377, - 14326,-29470,14326,-29470,14326,-29470,14326,-29470, - 14135,-29562,14135,-29562,14135,-29562,14135,-29562, - 13943,-29653,13943,-29653,13943,-29653,13943,-29653, - 13751,-29742,13751,-29742,13751,-29742,13751,-29742, - 13559,-29830,13559,-29830,13559,-29830,13559,-29830, - 13366,-29917,13366,-29917,13366,-29917,13366,-29917, - 13172,-30003,13172,-30003,13172,-30003,13172,-30003, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12783,-30171,12783,-30171,12783,-30171,12783,-30171, - 12588,-30253,12588,-30253,12588,-30253,12588,-30253, - 12392,-30334,12392,-30334,12392,-30334,12392,-30334, - 12196,-30413,12196,-30413,12196,-30413,12196,-30413, - 11999,-30491,11999,-30491,11999,-30491,11999,-30491, - 11801,-30568,11801,-30568,11801,-30568,11801,-30568, - 11604,-30644,11604,-30644,11604,-30644,11604,-30644, - 11405,-30718,11405,-30718,11405,-30718,11405,-30718, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 11007,-30863,11007,-30863,11007,-30863,11007,-30863, - 10807,-30934,10807,-30934,10807,-30934,10807,-30934, - 10607,-31003,10607,-31003,10607,-31003,10607,-31003, - 10407,-31071,10407,-31071,10407,-31071,10407,-31071, - 10206,-31137,10206,-31137,10206,-31137,10206,-31137, - 10004,-31203,10004,-31203,10004,-31203,10004,-31203, - 9802,-31267,9802,-31267,9802,-31267,9802,-31267, - 9600,-31330,9600,-31330,9600,-31330,9600,-31330, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 9194,-31451,9194,-31451,9194,-31451,9194,-31451, - 8991,-31510,8991,-31510,8991,-31510,8991,-31510, - 8787,-31567,8787,-31567,8787,-31567,8787,-31567, - 8582,-31623,8582,-31623,8582,-31623,8582,-31623, - 8378,-31678,8378,-31678,8378,-31678,8378,-31678, - 8173,-31732,8173,-31732,8173,-31732,8173,-31732, - 7968,-31784,7968,-31784,7968,-31784,7968,-31784, - 7762,-31835,7762,-31835,7762,-31835,7762,-31835, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 7350,-31932,7350,-31932,7350,-31932,7350,-31932, - 7143,-31979,7143,-31979,7143,-31979,7143,-31979, - 6936,-32025,6936,-32025,6936,-32025,6936,-32025, - 6729,-32069,6729,-32069,6729,-32069,6729,-32069, - 6522,-32112,6522,-32112,6522,-32112,6522,-32112, - 6314,-32153,6314,-32153,6314,-32153,6314,-32153, - 6106,-32193,6106,-32193,6106,-32193,6106,-32193, - 5898,-32232,5898,-32232,5898,-32232,5898,-32232, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5481,-32306,5481,-32306,5481,-32306,5481,-32306, - 5272,-32341,5272,-32341,5272,-32341,5272,-32341, - 5063,-32374,5063,-32374,5063,-32374,5063,-32374, - 4853,-32406,4853,-32406,4853,-32406,4853,-32406, - 4644,-32437,4644,-32437,4644,-32437,4644,-32437, - 4434,-32466,4434,-32466,4434,-32466,4434,-32466, - 4224,-32494,4224,-32494,4224,-32494,4224,-32494, - 4014,-32521,4014,-32521,4014,-32521,4014,-32521, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3593,-32570,3593,-32570,3593,-32570,3593,-32570, - 3382,-32592,3382,-32592,3382,-32592,3382,-32592, - 3172,-32614,3172,-32614,3172,-32614,3172,-32614, - 2961,-32633,2961,-32633,2961,-32633,2961,-32633, - 2750,-32652,2750,-32652,2750,-32652,2750,-32652, - 2539,-32669,2539,-32669,2539,-32669,2539,-32669, - 2327,-32685,2327,-32685,2327,-32685,2327,-32685, - 2116,-32699,2116,-32699,2116,-32699,2116,-32699, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1693,-32724,1693,-32724,1693,-32724,1693,-32724, - 1482,-32734,1482,-32734,1482,-32734,1482,-32734, - 1270,-32743,1270,-32743,1270,-32743,1270,-32743, - 1058,-32750,1058,-32750,1058,-32750,1058,-32750, - 847,-32757,847,-32757,847,-32757,847,-32757, - 635,-32761,635,-32761,635,-32761,635,-32761, - 423,-32765,423,-32765,423,-32765,423,-32765, - 211,-32767,211,-32767,211,-32767,211,-32767, - 0,-32767,0,-32767,0,-32767,0,-32767, - -212,-32767,-212,-32767,-212,-32767,-212,-32767, - -424,-32765,-424,-32765,-424,-32765,-424,-32765, - -636,-32761,-636,-32761,-636,-32761,-636,-32761, - -848,-32757,-848,-32757,-848,-32757,-848,-32757, - -1059,-32750,-1059,-32750,-1059,-32750,-1059,-32750, - -1271,-32743,-1271,-32743,-1271,-32743,-1271,-32743, - -1483,-32734,-1483,-32734,-1483,-32734,-1483,-32734, - -1694,-32724,-1694,-32724,-1694,-32724,-1694,-32724, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2117,-32699,-2117,-32699,-2117,-32699,-2117,-32699, - -2328,-32685,-2328,-32685,-2328,-32685,-2328,-32685, - -2540,-32669,-2540,-32669,-2540,-32669,-2540,-32669, - -2751,-32652,-2751,-32652,-2751,-32652,-2751,-32652, - -2962,-32633,-2962,-32633,-2962,-32633,-2962,-32633, - -3173,-32614,-3173,-32614,-3173,-32614,-3173,-32614, - -3383,-32592,-3383,-32592,-3383,-32592,-3383,-32592, - -3594,-32570,-3594,-32570,-3594,-32570,-3594,-32570, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4015,-32521,-4015,-32521,-4015,-32521,-4015,-32521, - -4225,-32494,-4225,-32494,-4225,-32494,-4225,-32494, - -4435,-32466,-4435,-32466,-4435,-32466,-4435,-32466, - -4645,-32437,-4645,-32437,-4645,-32437,-4645,-32437, - -4854,-32406,-4854,-32406,-4854,-32406,-4854,-32406, - -5064,-32374,-5064,-32374,-5064,-32374,-5064,-32374, - -5273,-32341,-5273,-32341,-5273,-32341,-5273,-32341, - -5482,-32306,-5482,-32306,-5482,-32306,-5482,-32306, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -5899,-32232,-5899,-32232,-5899,-32232,-5899,-32232, - -6107,-32193,-6107,-32193,-6107,-32193,-6107,-32193, - -6315,-32153,-6315,-32153,-6315,-32153,-6315,-32153, - -6523,-32112,-6523,-32112,-6523,-32112,-6523,-32112, - -6730,-32069,-6730,-32069,-6730,-32069,-6730,-32069, - -6937,-32025,-6937,-32025,-6937,-32025,-6937,-32025, - -7144,-31979,-7144,-31979,-7144,-31979,-7144,-31979, - -7351,-31932,-7351,-31932,-7351,-31932,-7351,-31932, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -7763,-31835,-7763,-31835,-7763,-31835,-7763,-31835, - -7969,-31784,-7969,-31784,-7969,-31784,-7969,-31784, - -8174,-31732,-8174,-31732,-8174,-31732,-8174,-31732, - -8379,-31678,-8379,-31678,-8379,-31678,-8379,-31678, - -8583,-31623,-8583,-31623,-8583,-31623,-8583,-31623, - -8788,-31567,-8788,-31567,-8788,-31567,-8788,-31567, - -8992,-31510,-8992,-31510,-8992,-31510,-8992,-31510, - -9195,-31451,-9195,-31451,-9195,-31451,-9195,-31451, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -9601,-31330,-9601,-31330,-9601,-31330,-9601,-31330, - -9803,-31267,-9803,-31267,-9803,-31267,-9803,-31267, - -10005,-31203,-10005,-31203,-10005,-31203,-10005,-31203, - -10207,-31137,-10207,-31137,-10207,-31137,-10207,-31137, - -10408,-31071,-10408,-31071,-10408,-31071,-10408,-31071, - -10608,-31003,-10608,-31003,-10608,-31003,-10608,-31003, - -10808,-30934,-10808,-30934,-10808,-30934,-10808,-30934, - -11008,-30863,-11008,-30863,-11008,-30863,-11008,-30863, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11406,-30718,-11406,-30718,-11406,-30718,-11406,-30718, - -11605,-30644,-11605,-30644,-11605,-30644,-11605,-30644, - -11802,-30568,-11802,-30568,-11802,-30568,-11802,-30568, - -12000,-30491,-12000,-30491,-12000,-30491,-12000,-30491, - -12197,-30413,-12197,-30413,-12197,-30413,-12197,-30413, - -12393,-30334,-12393,-30334,-12393,-30334,-12393,-30334, - -12589,-30253,-12589,-30253,-12589,-30253,-12589,-30253, - -12784,-30171,-12784,-30171,-12784,-30171,-12784,-30171, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13173,-30003,-13173,-30003,-13173,-30003,-13173,-30003, - -13367,-29917,-13367,-29917,-13367,-29917,-13367,-29917, - -13560,-29830,-13560,-29830,-13560,-29830,-13560,-29830, - -13752,-29742,-13752,-29742,-13752,-29742,-13752,-29742, - -13944,-29653,-13944,-29653,-13944,-29653,-13944,-29653, - -14136,-29562,-14136,-29562,-14136,-29562,-14136,-29562, - -14327,-29470,-14327,-29470,-14327,-29470,-14327,-29470, - -14517,-29377,-14517,-29377,-14517,-29377,-14517,-29377, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -14895,-29186,-14895,-29186,-14895,-29186,-14895,-29186, - -15084,-29090,-15084,-29090,-15084,-29090,-15084,-29090, - -15271,-28991,-15271,-28991,-15271,-28991,-15271,-28991, - -15458,-28892,-15458,-28892,-15458,-28892,-15458,-28892, - -15645,-28792,-15645,-28792,-15645,-28792,-15645,-28792, - -15831,-28690,-15831,-28690,-15831,-28690,-15831,-28690, - -16016,-28587,-16016,-28587,-16016,-28587,-16016,-28587, - -16200,-28483,-16200,-28483,-16200,-28483,-16200,-28483 - }; -static int16_t twb972[323*2*4] = {32764,-424,32764,-424,32764,-424,32764,-424, - 32756,-848,32756,-848,32756,-848,32756,-848, - 32742,-1271,32742,-1271,32742,-1271,32742,-1271, - 32723,-1694,32723,-1694,32723,-1694,32723,-1694, - 32698,-2117,32698,-2117,32698,-2117,32698,-2117, - 32668,-2540,32668,-2540,32668,-2540,32668,-2540, - 32632,-2962,32632,-2962,32632,-2962,32632,-2962, - 32591,-3383,32591,-3383,32591,-3383,32591,-3383, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32493,-4225,32493,-4225,32493,-4225,32493,-4225, - 32436,-4645,32436,-4645,32436,-4645,32436,-4645, - 32373,-5064,32373,-5064,32373,-5064,32373,-5064, - 32305,-5482,32305,-5482,32305,-5482,32305,-5482, - 32231,-5899,32231,-5899,32231,-5899,32231,-5899, - 32152,-6315,32152,-6315,32152,-6315,32152,-6315, - 32068,-6730,32068,-6730,32068,-6730,32068,-6730, - 31978,-7144,31978,-7144,31978,-7144,31978,-7144, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31783,-7969,31783,-7969,31783,-7969,31783,-7969, - 31677,-8379,31677,-8379,31677,-8379,31677,-8379, - 31566,-8788,31566,-8788,31566,-8788,31566,-8788, - 31450,-9195,31450,-9195,31450,-9195,31450,-9195, - 31329,-9601,31329,-9601,31329,-9601,31329,-9601, - 31202,-10005,31202,-10005,31202,-10005,31202,-10005, - 31070,-10408,31070,-10408,31070,-10408,31070,-10408, - 30933,-10808,30933,-10808,30933,-10808,30933,-10808, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30643,-11605,30643,-11605,30643,-11605,30643,-11605, - 30490,-12000,30490,-12000,30490,-12000,30490,-12000, - 30333,-12393,30333,-12393,30333,-12393,30333,-12393, - 30170,-12784,30170,-12784,30170,-12784,30170,-12784, - 30002,-13173,30002,-13173,30002,-13173,30002,-13173, - 29829,-13560,29829,-13560,29829,-13560,29829,-13560, - 29652,-13944,29652,-13944,29652,-13944,29652,-13944, - 29469,-14327,29469,-14327,29469,-14327,29469,-14327, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29089,-15084,29089,-15084,29089,-15084,29089,-15084, - 28891,-15458,28891,-15458,28891,-15458,28891,-15458, - 28689,-15831,28689,-15831,28689,-15831,28689,-15831, - 28482,-16200,28482,-16200,28482,-16200,28482,-16200, - 28270,-16567,28270,-16567,28270,-16567,28270,-16567, - 28054,-16931,28054,-16931,28054,-16931,28054,-16931, - 27832,-17292,27832,-17292,27832,-17292,27832,-17292, - 27606,-17651,27606,-17651,27606,-17651,27606,-17651, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27141,-18359,27141,-18359,27141,-18359,27141,-18359, - 26901,-18708,26901,-18708,26901,-18708,26901,-18708, - 26657,-19054,26657,-19054,26657,-19054,26657,-19054, - 26409,-19397,26409,-19397,26409,-19397,26409,-19397, - 26156,-19737,26156,-19737,26156,-19737,26156,-19737, - 25898,-20074,25898,-20074,25898,-20074,25898,-20074, - 25637,-20407,25637,-20407,25637,-20407,25637,-20407, - 25371,-20736,25371,-20736,25371,-20736,25371,-20736, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24826,-21385,24826,-21385,24826,-21385,24826,-21385, - 24548,-21705,24548,-21705,24548,-21705,24548,-21705, - 24265,-22020,24265,-22020,24265,-22020,24265,-22020, - 23978,-22332,23978,-22332,23978,-22332,23978,-22332, - 23688,-22640,23688,-22640,23688,-22640,23688,-22640, - 23393,-22945,23393,-22945,23393,-22945,23393,-22945, - 23094,-23245,23094,-23245,23094,-23245,23094,-23245, - 22792,-23542,22792,-23542,22792,-23542,22792,-23542, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22176,-24123,22176,-24123,22176,-24123,22176,-24123, - 21862,-24408,21862,-24408,21862,-24408,21862,-24408, - 21545,-24688,21545,-24688,21545,-24688,21545,-24688, - 21224,-24965,21224,-24965,21224,-24965,21224,-24965, - 20899,-25237,20899,-25237,20899,-25237,20899,-25237, - 20571,-25505,20571,-25505,20571,-25505,20571,-25505, - 20240,-25769,20240,-25769,20240,-25769,20240,-25769, - 19905,-26029,19905,-26029,19905,-26029,19905,-26029, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19225,-26534,19225,-26534,19225,-26534,19225,-26534, - 18881,-26781,18881,-26781,18881,-26781,18881,-26781, - 18533,-27023,18533,-27023,18533,-27023,18533,-27023, - 18182,-27260,18182,-27260,18182,-27260,18182,-27260, - 17828,-27493,17828,-27493,17828,-27493,17828,-27493, - 17471,-27721,17471,-27721,17471,-27721,17471,-27721, - 17111,-27944,17111,-27944,17111,-27944,17111,-27944, - 16748,-28163,16748,-28163,16748,-28163,16748,-28163, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16015,-28587,16015,-28587,16015,-28587,16015,-28587, - 15644,-28792,15644,-28792,15644,-28792,15644,-28792, - 15270,-28991,15270,-28991,15270,-28991,15270,-28991, - 14894,-29186,14894,-29186,14894,-29186,14894,-29186, - 14516,-29377,14516,-29377,14516,-29377,14516,-29377, - 14135,-29562,14135,-29562,14135,-29562,14135,-29562, - 13751,-29742,13751,-29742,13751,-29742,13751,-29742, - 13366,-29917,13366,-29917,13366,-29917,13366,-29917, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12588,-30253,12588,-30253,12588,-30253,12588,-30253, - 12196,-30413,12196,-30413,12196,-30413,12196,-30413, - 11801,-30568,11801,-30568,11801,-30568,11801,-30568, - 11405,-30718,11405,-30718,11405,-30718,11405,-30718, - 11007,-30863,11007,-30863,11007,-30863,11007,-30863, - 10607,-31003,10607,-31003,10607,-31003,10607,-31003, - 10206,-31137,10206,-31137,10206,-31137,10206,-31137, - 9802,-31267,9802,-31267,9802,-31267,9802,-31267, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 8991,-31510,8991,-31510,8991,-31510,8991,-31510, - 8582,-31623,8582,-31623,8582,-31623,8582,-31623, - 8173,-31732,8173,-31732,8173,-31732,8173,-31732, - 7762,-31835,7762,-31835,7762,-31835,7762,-31835, - 7350,-31932,7350,-31932,7350,-31932,7350,-31932, - 6936,-32025,6936,-32025,6936,-32025,6936,-32025, - 6522,-32112,6522,-32112,6522,-32112,6522,-32112, - 6106,-32193,6106,-32193,6106,-32193,6106,-32193, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5272,-32341,5272,-32341,5272,-32341,5272,-32341, - 4853,-32406,4853,-32406,4853,-32406,4853,-32406, - 4434,-32466,4434,-32466,4434,-32466,4434,-32466, - 4014,-32521,4014,-32521,4014,-32521,4014,-32521, - 3593,-32570,3593,-32570,3593,-32570,3593,-32570, - 3172,-32614,3172,-32614,3172,-32614,3172,-32614, - 2750,-32652,2750,-32652,2750,-32652,2750,-32652, - 2327,-32685,2327,-32685,2327,-32685,2327,-32685, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1482,-32734,1482,-32734,1482,-32734,1482,-32734, - 1058,-32750,1058,-32750,1058,-32750,1058,-32750, - 635,-32761,635,-32761,635,-32761,635,-32761, - 211,-32767,211,-32767,211,-32767,211,-32767, - -212,-32767,-212,-32767,-212,-32767,-212,-32767, - -636,-32761,-636,-32761,-636,-32761,-636,-32761, - -1059,-32750,-1059,-32750,-1059,-32750,-1059,-32750, - -1483,-32734,-1483,-32734,-1483,-32734,-1483,-32734, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2328,-32685,-2328,-32685,-2328,-32685,-2328,-32685, - -2751,-32652,-2751,-32652,-2751,-32652,-2751,-32652, - -3173,-32614,-3173,-32614,-3173,-32614,-3173,-32614, - -3594,-32570,-3594,-32570,-3594,-32570,-3594,-32570, - -4015,-32521,-4015,-32521,-4015,-32521,-4015,-32521, - -4435,-32466,-4435,-32466,-4435,-32466,-4435,-32466, - -4854,-32406,-4854,-32406,-4854,-32406,-4854,-32406, - -5273,-32341,-5273,-32341,-5273,-32341,-5273,-32341, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6107,-32193,-6107,-32193,-6107,-32193,-6107,-32193, - -6523,-32112,-6523,-32112,-6523,-32112,-6523,-32112, - -6937,-32025,-6937,-32025,-6937,-32025,-6937,-32025, - -7351,-31932,-7351,-31932,-7351,-31932,-7351,-31932, - -7763,-31835,-7763,-31835,-7763,-31835,-7763,-31835, - -8174,-31732,-8174,-31732,-8174,-31732,-8174,-31732, - -8583,-31623,-8583,-31623,-8583,-31623,-8583,-31623, - -8992,-31510,-8992,-31510,-8992,-31510,-8992,-31510, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -9803,-31267,-9803,-31267,-9803,-31267,-9803,-31267, - -10207,-31137,-10207,-31137,-10207,-31137,-10207,-31137, - -10608,-31003,-10608,-31003,-10608,-31003,-10608,-31003, - -11008,-30863,-11008,-30863,-11008,-30863,-11008,-30863, - -11406,-30718,-11406,-30718,-11406,-30718,-11406,-30718, - -11802,-30568,-11802,-30568,-11802,-30568,-11802,-30568, - -12197,-30413,-12197,-30413,-12197,-30413,-12197,-30413, - -12589,-30253,-12589,-30253,-12589,-30253,-12589,-30253, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13367,-29917,-13367,-29917,-13367,-29917,-13367,-29917, - -13752,-29742,-13752,-29742,-13752,-29742,-13752,-29742, - -14136,-29562,-14136,-29562,-14136,-29562,-14136,-29562, - -14517,-29377,-14517,-29377,-14517,-29377,-14517,-29377, - -14895,-29186,-14895,-29186,-14895,-29186,-14895,-29186, - -15271,-28991,-15271,-28991,-15271,-28991,-15271,-28991, - -15645,-28792,-15645,-28792,-15645,-28792,-15645,-28792, - -16016,-28587,-16016,-28587,-16016,-28587,-16016,-28587, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16749,-28163,-16749,-28163,-16749,-28163,-16749,-28163, - -17112,-27944,-17112,-27944,-17112,-27944,-17112,-27944, - -17472,-27721,-17472,-27721,-17472,-27721,-17472,-27721, - -17829,-27493,-17829,-27493,-17829,-27493,-17829,-27493, - -18183,-27260,-18183,-27260,-18183,-27260,-18183,-27260, - -18534,-27023,-18534,-27023,-18534,-27023,-18534,-27023, - -18882,-26781,-18882,-26781,-18882,-26781,-18882,-26781, - -19226,-26534,-19226,-26534,-19226,-26534,-19226,-26534, - -19568,-26284,-19568,-26284,-19568,-26284,-19568,-26284, - -19906,-26029,-19906,-26029,-19906,-26029,-19906,-26029, - -20241,-25769,-20241,-25769,-20241,-25769,-20241,-25769, - -20572,-25505,-20572,-25505,-20572,-25505,-20572,-25505, - -20900,-25237,-20900,-25237,-20900,-25237,-20900,-25237, - -21225,-24965,-21225,-24965,-21225,-24965,-21225,-24965, - -21546,-24688,-21546,-24688,-21546,-24688,-21546,-24688, - -21863,-24408,-21863,-24408,-21863,-24408,-21863,-24408, - -22177,-24123,-22177,-24123,-22177,-24123,-22177,-24123, - -22487,-23834,-22487,-23834,-22487,-23834,-22487,-23834, - -22793,-23542,-22793,-23542,-22793,-23542,-22793,-23542, - -23095,-23245,-23095,-23245,-23095,-23245,-23095,-23245, - -23394,-22945,-23394,-22945,-23394,-22945,-23394,-22945, - -23689,-22640,-23689,-22640,-23689,-22640,-23689,-22640, - -23979,-22332,-23979,-22332,-23979,-22332,-23979,-22332, - -24266,-22020,-24266,-22020,-24266,-22020,-24266,-22020, - -24549,-21705,-24549,-21705,-24549,-21705,-24549,-21705, - -24827,-21385,-24827,-21385,-24827,-21385,-24827,-21385, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25372,-20736,-25372,-20736,-25372,-20736,-25372,-20736, - -25638,-20407,-25638,-20407,-25638,-20407,-25638,-20407, - -25899,-20074,-25899,-20074,-25899,-20074,-25899,-20074, - -26157,-19737,-26157,-19737,-26157,-19737,-26157,-19737, - -26410,-19397,-26410,-19397,-26410,-19397,-26410,-19397, - -26658,-19054,-26658,-19054,-26658,-19054,-26658,-19054, - -26902,-18708,-26902,-18708,-26902,-18708,-26902,-18708, - -27142,-18359,-27142,-18359,-27142,-18359,-27142,-18359, - -27377,-18006,-27377,-18006,-27377,-18006,-27377,-18006, - -27607,-17651,-27607,-17651,-27607,-17651,-27607,-17651, - -27833,-17292,-27833,-17292,-27833,-17292,-27833,-17292, - -28055,-16931,-28055,-16931,-28055,-16931,-28055,-16931, - -28271,-16567,-28271,-16567,-28271,-16567,-28271,-16567, - -28483,-16200,-28483,-16200,-28483,-16200,-28483,-16200, - -28690,-15831,-28690,-15831,-28690,-15831,-28690,-15831, - -28892,-15458,-28892,-15458,-28892,-15458,-28892,-15458, - -29090,-15084,-29090,-15084,-29090,-15084,-29090,-15084, - -29282,-14706,-29282,-14706,-29282,-14706,-29282,-14706, - -29470,-14327,-29470,-14327,-29470,-14327,-29470,-14327, - -29653,-13944,-29653,-13944,-29653,-13944,-29653,-13944, - -29830,-13560,-29830,-13560,-29830,-13560,-29830,-13560, - -30003,-13173,-30003,-13173,-30003,-13173,-30003,-13173, - -30171,-12784,-30171,-12784,-30171,-12784,-30171,-12784, - -30334,-12393,-30334,-12393,-30334,-12393,-30334,-12393, - -30491,-12000,-30491,-12000,-30491,-12000,-30491,-12000, - -30644,-11605,-30644,-11605,-30644,-11605,-30644,-11605, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -30934,-10808,-30934,-10808,-30934,-10808,-30934,-10808, - -31071,-10408,-31071,-10408,-31071,-10408,-31071,-10408, - -31203,-10005,-31203,-10005,-31203,-10005,-31203,-10005, - -31330,-9601,-31330,-9601,-31330,-9601,-31330,-9601, - -31451,-9195,-31451,-9195,-31451,-9195,-31451,-9195, - -31567,-8788,-31567,-8788,-31567,-8788,-31567,-8788, - -31678,-8379,-31678,-8379,-31678,-8379,-31678,-8379, - -31784,-7969,-31784,-7969,-31784,-7969,-31784,-7969, - -31884,-7557,-31884,-7557,-31884,-7557,-31884,-7557, - -31979,-7144,-31979,-7144,-31979,-7144,-31979,-7144, - -32069,-6730,-32069,-6730,-32069,-6730,-32069,-6730, - -32153,-6315,-32153,-6315,-32153,-6315,-32153,-6315, - -32232,-5899,-32232,-5899,-32232,-5899,-32232,-5899, - -32306,-5482,-32306,-5482,-32306,-5482,-32306,-5482, - -32374,-5064,-32374,-5064,-32374,-5064,-32374,-5064, - -32437,-4645,-32437,-4645,-32437,-4645,-32437,-4645, - -32494,-4225,-32494,-4225,-32494,-4225,-32494,-4225, - -32546,-3805,-32546,-3805,-32546,-3805,-32546,-3805, - -32592,-3383,-32592,-3383,-32592,-3383,-32592,-3383, - -32633,-2962,-32633,-2962,-32633,-2962,-32633,-2962, - -32669,-2540,-32669,-2540,-32669,-2540,-32669,-2540, - -32699,-2117,-32699,-2117,-32699,-2117,-32699,-2117, - -32724,-1694,-32724,-1694,-32724,-1694,-32724,-1694, - -32743,-1271,-32743,-1271,-32743,-1271,-32743,-1271, - -32757,-848,-32757,-848,-32757,-848,-32757,-848, - -32765,-424,-32765,-424,-32765,-424,-32765,-424, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32765,423,-32765,423,-32765,423,-32765,423, - -32757,847,-32757,847,-32757,847,-32757,847, - -32743,1270,-32743,1270,-32743,1270,-32743,1270, - -32724,1693,-32724,1693,-32724,1693,-32724,1693, - -32699,2116,-32699,2116,-32699,2116,-32699,2116, - -32669,2539,-32669,2539,-32669,2539,-32669,2539, - -32633,2961,-32633,2961,-32633,2961,-32633,2961, - -32592,3382,-32592,3382,-32592,3382,-32592,3382, - -32546,3804,-32546,3804,-32546,3804,-32546,3804, - -32494,4224,-32494,4224,-32494,4224,-32494,4224, - -32437,4644,-32437,4644,-32437,4644,-32437,4644, - -32374,5063,-32374,5063,-32374,5063,-32374,5063, - -32306,5481,-32306,5481,-32306,5481,-32306,5481, - -32232,5898,-32232,5898,-32232,5898,-32232,5898, - -32153,6314,-32153,6314,-32153,6314,-32153,6314, - -32069,6729,-32069,6729,-32069,6729,-32069,6729, - -31979,7143,-31979,7143,-31979,7143,-31979,7143, - -31884,7556,-31884,7556,-31884,7556,-31884,7556, - -31784,7968,-31784,7968,-31784,7968,-31784,7968, - -31678,8378,-31678,8378,-31678,8378,-31678,8378, - -31567,8787,-31567,8787,-31567,8787,-31567,8787, - -31451,9194,-31451,9194,-31451,9194,-31451,9194, - -31330,9600,-31330,9600,-31330,9600,-31330,9600, - -31203,10004,-31203,10004,-31203,10004,-31203,10004, - -31071,10407,-31071,10407,-31071,10407,-31071,10407, - -30934,10807,-30934,10807,-30934,10807,-30934,10807, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30644,11604,-30644,11604,-30644,11604,-30644,11604, - -30491,11999,-30491,11999,-30491,11999,-30491,11999, - -30334,12392,-30334,12392,-30334,12392,-30334,12392, - -30171,12783,-30171,12783,-30171,12783,-30171,12783, - -30003,13172,-30003,13172,-30003,13172,-30003,13172, - -29830,13559,-29830,13559,-29830,13559,-29830,13559, - -29653,13943,-29653,13943,-29653,13943,-29653,13943, - -29470,14326,-29470,14326,-29470,14326,-29470,14326, - -29282,14705,-29282,14705,-29282,14705,-29282,14705, - -29090,15083,-29090,15083,-29090,15083,-29090,15083, - -28892,15457,-28892,15457,-28892,15457,-28892,15457, - -28690,15830,-28690,15830,-28690,15830,-28690,15830, - -28483,16199,-28483,16199,-28483,16199,-28483,16199, - -28271,16566,-28271,16566,-28271,16566,-28271,16566, - -28055,16930,-28055,16930,-28055,16930,-28055,16930, - -27833,17291,-27833,17291,-27833,17291,-27833,17291, - -27607,17650,-27607,17650,-27607,17650,-27607,17650, - -27377,18005,-27377,18005,-27377,18005,-27377,18005, - -27142,18358,-27142,18358,-27142,18358,-27142,18358, - -26902,18707,-26902,18707,-26902,18707,-26902,18707, - -26658,19053,-26658,19053,-26658,19053,-26658,19053, - -26410,19396,-26410,19396,-26410,19396,-26410,19396, - -26157,19736,-26157,19736,-26157,19736,-26157,19736, - -25899,20073,-25899,20073,-25899,20073,-25899,20073, - -25638,20406,-25638,20406,-25638,20406,-25638,20406, - -25372,20735,-25372,20735,-25372,20735,-25372,20735, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24827,21384,-24827,21384,-24827,21384,-24827,21384, - -24549,21704,-24549,21704,-24549,21704,-24549,21704, - -24266,22019,-24266,22019,-24266,22019,-24266,22019, - -23979,22331,-23979,22331,-23979,22331,-23979,22331, - -23689,22639,-23689,22639,-23689,22639,-23689,22639, - -23394,22944,-23394,22944,-23394,22944,-23394,22944, - -23095,23244,-23095,23244,-23095,23244,-23095,23244, - -22793,23541,-22793,23541,-22793,23541,-22793,23541, - -22487,23833,-22487,23833,-22487,23833,-22487,23833, - -22177,24122,-22177,24122,-22177,24122,-22177,24122, - -21863,24407,-21863,24407,-21863,24407,-21863,24407, - -21546,24687,-21546,24687,-21546,24687,-21546,24687, - -21225,24964,-21225,24964,-21225,24964,-21225,24964, - -20900,25236,-20900,25236,-20900,25236,-20900,25236, - -20572,25504,-20572,25504,-20572,25504,-20572,25504, - -20241,25768,-20241,25768,-20241,25768,-20241,25768, - -19906,26028,-19906,26028,-19906,26028,-19906,26028, - -19568,26283,-19568,26283,-19568,26283,-19568,26283, - -19226,26533,-19226,26533,-19226,26533,-19226,26533, - -18882,26780,-18882,26780,-18882,26780,-18882,26780, - -18534,27022,-18534,27022,-18534,27022,-18534,27022, - -18183,27259,-18183,27259,-18183,27259,-18183,27259, - -17829,27492,-17829,27492,-17829,27492,-17829,27492, - -17472,27720,-17472,27720,-17472,27720,-17472,27720, - -17112,27943,-17112,27943,-17112,27943,-17112,27943, - -16749,28162,-16749,28162,-16749,28162,-16749,28162 - }; + +static int16_t twa972[323*2*4]; +static int16_t twb972[323*2*4]; void dft972(int16_t *x,int16_t *y,unsigned char scale_flag) // 324 x 3 { @@ -15106,750 +8333,8 @@ void dft972(int16_t *x,int16_t *y,unsigned char scale_flag) // 324 x 3 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:359)/1080)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:359)/1080)); -twa2 = zeros(1,2*359); -twb2 = zeros(1,2*359); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa1080[359*2*4] = {"); -for i=1:2:(2*358) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"static int16_t twb1080[359*2*4] = {"); -for i=1:2:(2*358) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fclose(fd); -*/ -static int16_t twa1080[359*2*4] = {32766,-191,32766,-191,32766,-191,32766,-191, - 32764,-382,32764,-382,32764,-382,32764,-382, - 32762,-572,32762,-572,32762,-572,32762,-572, - 32758,-763,32758,-763,32758,-763,32758,-763, - 32753,-954,32753,-954,32753,-954,32753,-954, - 32747,-1144,32747,-1144,32747,-1144,32747,-1144, - 32739,-1335,32739,-1335,32739,-1335,32739,-1335, - 32731,-1525,32731,-1525,32731,-1525,32731,-1525, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32699,-2096,32699,-2096,32699,-2096,32699,-2096, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32673,-2476,32673,-2476,32673,-2476,32673,-2476, - 32658,-2666,32658,-2666,32658,-2666,32658,-2666, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32625,-3046,32625,-3046,32625,-3046,32625,-3046, - 32606,-3236,32606,-3236,32606,-3236,32606,-3236, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32567,-3615,32567,-3615,32567,-3615,32567,-3615, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32522,-3994,32522,-3994,32522,-3994,32522,-3994, - 32498,-4183,32498,-4183,32498,-4183,32498,-4183, - 32474,-4372,32474,-4372,32474,-4372,32474,-4372, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32421,-4749,32421,-4749,32421,-4749,32421,-4749, - 32392,-4938,32392,-4938,32392,-4938,32392,-4938, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32333,-5315,32333,-5315,32333,-5315,32333,-5315, - 32301,-5503,32301,-5503,32301,-5503,32301,-5503, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32235,-5878,32235,-5878,32235,-5878,32235,-5878, - 32200,-6066,32200,-6066,32200,-6066,32200,-6066, - 32164,-6253,32164,-6253,32164,-6253,32164,-6253, - 32128,-6440,32128,-6440,32128,-6440,32128,-6440, - 32090,-6627,32090,-6627,32090,-6627,32090,-6627, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 32010,-6999,32010,-6999,32010,-6999,32010,-6999, - 31969,-7186,31969,-7186,31969,-7186,31969,-7186, - 31927,-7371,31927,-7371,31927,-7371,31927,-7371, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31839,-7742,31839,-7742,31839,-7742,31839,-7742, - 31793,-7928,31793,-7928,31793,-7928,31793,-7928, - 31747,-8112,31747,-8112,31747,-8112,31747,-8112, - 31699,-8297,31699,-8297,31699,-8297,31699,-8297, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31600,-8665,31600,-8665,31600,-8665,31600,-8665, - 31549,-8849,31549,-8849,31549,-8849,31549,-8849, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31444,-9215,31444,-9215,31444,-9215,31444,-9215, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31335,-9581,31335,-9581,31335,-9581,31335,-9581, - 31278,-9763,31278,-9763,31278,-9763,31278,-9763, - 31221,-9945,31221,-9945,31221,-9945,31221,-9945, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31103,-10307,31103,-10307,31103,-10307,31103,-10307, - 31043,-10488,31043,-10488,31043,-10488,31043,-10488, - 30981,-10668,30981,-10668,30981,-10668,30981,-10668, - 30919,-10848,30919,-10848,30919,-10848,30919,-10848, - 30855,-11028,30855,-11028,30855,-11028,30855,-11028, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30725,-11386,30725,-11386,30725,-11386,30725,-11386, - 30658,-11565,30658,-11565,30658,-11565,30658,-11565, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30521,-11921,30521,-11921,30521,-11921,30521,-11921, - 30451,-12098,30451,-12098,30451,-12098,30451,-12098, - 30381,-12275,30381,-12275,30381,-12275,30381,-12275, - 30309,-12452,30309,-12452,30309,-12452,30309,-12452, - 30236,-12628,30236,-12628,30236,-12628,30236,-12628, - 30162,-12804,30162,-12804,30162,-12804,30162,-12804, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 30011,-13154,30011,-13154,30011,-13154,30011,-13154, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29856,-13502,29856,-13502,29856,-13502,29856,-13502, - 29777,-13675,29777,-13675,29777,-13675,29777,-13675, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29615,-14021,29615,-14021,29615,-14021,29615,-14021, - 29533,-14193,29533,-14193,29533,-14193,29533,-14193, - 29450,-14365,29450,-14365,29450,-14365,29450,-14365, - 29366,-14536,29366,-14536,29366,-14536,29366,-14536, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 29108,-15046,29108,-15046,29108,-15046,29108,-15046, - 29020,-15215,29020,-15215,29020,-15215,29020,-15215, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28841,-15552,28841,-15552,28841,-15552,28841,-15552, - 28750,-15719,28750,-15719,28750,-15719,28750,-15719, - 28658,-15886,28658,-15886,28658,-15886,28658,-15886, - 28565,-16053,28565,-16053,28565,-16053,28565,-16053, - 28471,-16219,28471,-16219,28471,-16219,28471,-16219, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28281,-16549,28281,-16549,28281,-16549,28281,-16549, - 28184,-16713,28184,-16713,28184,-16713,28184,-16713, - 28086,-16877,28086,-16877,28086,-16877,28086,-16877, - 27988,-17040,27988,-17040,27988,-17040,27988,-17040, - 27888,-17202,27888,-17202,27888,-17202,27888,-17202, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27686,-17526,27686,-17526,27686,-17526,27686,-17526, - 27584,-17687,27584,-17687,27584,-17687,27584,-17687, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27271,-18165,27271,-18165,27271,-18165,27271,-18165, - 27165,-18324,27165,-18324,27165,-18324,27165,-18324, - 27058,-18481,27058,-18481,27058,-18481,27058,-18481, - 26950,-18638,26950,-18638,26950,-18638,26950,-18638, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26731,-18951,26731,-18951,26731,-18951,26731,-18951, - 26620,-19106,26620,-19106,26620,-19106,26620,-19106, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26396,-19414,26396,-19414,26396,-19414,26396,-19414, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 26168,-19720,26168,-19720,26168,-19720,26168,-19720, - 26053,-19872,26053,-19872,26053,-19872,26053,-19872, - 25937,-20023,25937,-20023,25937,-20023,25937,-20023, - 25820,-20174,25820,-20174,25820,-20174,25820,-20174, - 25702,-20324,25702,-20324,25702,-20324,25702,-20324, - 25584,-20473,25584,-20473,25584,-20473,25584,-20473, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25344,-20769,25344,-20769,25344,-20769,25344,-20769, - 25223,-20916,25223,-20916,25223,-20916,25223,-20916, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24978,-21208,24978,-21208,24978,-21208,24978,-21208, - 24854,-21353,24854,-21353,24854,-21353,24854,-21353, - 24729,-21498,24729,-21498,24729,-21498,24729,-21498, - 24604,-21641,24604,-21641,24604,-21641,24604,-21641, - 24477,-21784,24477,-21784,24477,-21784,24477,-21784, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24222,-22067,24222,-22067,24222,-22067,24222,-22067, - 24093,-22208,24093,-22208,24093,-22208,24093,-22208, - 23964,-22348,23964,-22348,23964,-22348,23964,-22348, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23702,-22625,23702,-22625,23702,-22625,23702,-22625, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23437,-22899,23437,-22899,23437,-22899,23437,-22899, - 23304,-23035,23304,-23035,23304,-23035,23304,-23035, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 23034,-23305,23034,-23305,23034,-23305,23034,-23305, - 22898,-23438,22898,-23438,22898,-23438,22898,-23438, - 22761,-23571,22761,-23571,22761,-23571,22761,-23571, - 22624,-23703,22624,-23703,22624,-23703,22624,-23703, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22347,-23965,22347,-23965,22347,-23965,22347,-23965, - 22207,-24094,22207,-24094,22207,-24094,22207,-24094, - 22066,-24223,22066,-24223,22066,-24223,22066,-24223, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21783,-24478,21783,-24478,21783,-24478,21783,-24478, - 21640,-24605,21640,-24605,21640,-24605,21640,-24605, - 21497,-24730,21497,-24730,21497,-24730,21497,-24730, - 21352,-24855,21352,-24855,21352,-24855,21352,-24855, - 21207,-24979,21207,-24979,21207,-24979,21207,-24979, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20915,-25224,20915,-25224,20915,-25224,20915,-25224, - 20768,-25345,20768,-25345,20768,-25345,20768,-25345, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20472,-25585,20472,-25585,20472,-25585,20472,-25585, - 20323,-25703,20323,-25703,20323,-25703,20323,-25703, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 20022,-25938,20022,-25938,20022,-25938,20022,-25938, - 19871,-26054,19871,-26054,19871,-26054,19871,-26054, - 19719,-26169,19719,-26169,19719,-26169,19719,-26169, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19413,-26397,19413,-26397,19413,-26397,19413,-26397, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 19105,-26621,19105,-26621,19105,-26621,19105,-26621, - 18950,-26732,18950,-26732,18950,-26732,18950,-26732, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18637,-26951,18637,-26951,18637,-26951,18637,-26951, - 18480,-27059,18480,-27059,18480,-27059,18480,-27059, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 18164,-27272,18164,-27272,18164,-27272,18164,-27272, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17686,-27585,17686,-27585,17686,-27585,17686,-27585, - 17525,-27687,17525,-27687,17525,-27687,17525,-27687, - 17363,-27788,17363,-27788,17363,-27788,17363,-27788, - 17201,-27889,17201,-27889,17201,-27889,17201,-27889, - 17039,-27989,17039,-27989,17039,-27989,17039,-27989, - 16876,-28087,16876,-28087,16876,-28087,16876,-28087, - 16712,-28185,16712,-28185,16712,-28185,16712,-28185, - 16548,-28282,16548,-28282,16548,-28282,16548,-28282, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16218,-28472,16218,-28472,16218,-28472,16218,-28472, - 16052,-28566,16052,-28566,16052,-28566,16052,-28566, - 15885,-28659,15885,-28659,15885,-28659,15885,-28659, - 15718,-28751,15718,-28751,15718,-28751,15718,-28751, - 15551,-28842,15551,-28842,15551,-28842,15551,-28842, - 15383,-28932,15383,-28932,15383,-28932,15383,-28932, - 15214,-29021,15214,-29021,15214,-29021,15214,-29021, - 15045,-29109,15045,-29109,15045,-29109,15045,-29109, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14535,-29367,14535,-29367,14535,-29367,14535,-29367, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 14192,-29534,14192,-29534,14192,-29534,14192,-29534, - 14020,-29616,14020,-29616,14020,-29616,14020,-29616, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13674,-29778,13674,-29778,13674,-29778,13674,-29778, - 13501,-29857,13501,-29857,13501,-29857,13501,-29857, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 13153,-30012,13153,-30012,13153,-30012,13153,-30012, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12803,-30163,12803,-30163,12803,-30163,12803,-30163, - 12627,-30237,12627,-30237,12627,-30237,12627,-30237, - 12451,-30310,12451,-30310,12451,-30310,12451,-30310, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 12097,-30452,12097,-30452,12097,-30452,12097,-30452, - 11920,-30522,11920,-30522,11920,-30522,11920,-30522, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11564,-30659,11564,-30659,11564,-30659,11564,-30659, - 11385,-30726,11385,-30726,11385,-30726,11385,-30726, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 11027,-30856,11027,-30856,11027,-30856,11027,-30856, - 10847,-30920,10847,-30920,10847,-30920,10847,-30920, - 10667,-30982,10667,-30982,10667,-30982,10667,-30982, - 10487,-31044,10487,-31044,10487,-31044,10487,-31044, - 10306,-31104,10306,-31104,10306,-31104,10306,-31104, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9944,-31222,9944,-31222,9944,-31222,9944,-31222, - 9762,-31279,9762,-31279,9762,-31279,9762,-31279, - 9580,-31336,9580,-31336,9580,-31336,9580,-31336, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 9214,-31445,9214,-31445,9214,-31445,9214,-31445, - 9031,-31498,9031,-31498,9031,-31498,9031,-31498, - 8848,-31550,8848,-31550,8848,-31550,8848,-31550, - 8664,-31601,8664,-31601,8664,-31601,8664,-31601, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8296,-31700,8296,-31700,8296,-31700,8296,-31700, - 8111,-31748,8111,-31748,8111,-31748,8111,-31748, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7741,-31840,7741,-31840,7741,-31840,7741,-31840, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 7370,-31928,7370,-31928,7370,-31928,7370,-31928, - 7185,-31970,7185,-31970,7185,-31970,7185,-31970, - 6998,-32011,6998,-32011,6998,-32011,6998,-32011, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6626,-32091,6626,-32091,6626,-32091,6626,-32091, - 6439,-32129,6439,-32129,6439,-32129,6439,-32129, - 6252,-32165,6252,-32165,6252,-32165,6252,-32165, - 6065,-32201,6065,-32201,6065,-32201,6065,-32201, - 5877,-32236,5877,-32236,5877,-32236,5877,-32236, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5502,-32302,5502,-32302,5502,-32302,5502,-32302, - 5314,-32334,5314,-32334,5314,-32334,5314,-32334, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4937,-32393,4937,-32393,4937,-32393,4937,-32393, - 4748,-32422,4748,-32422,4748,-32422,4748,-32422, - 4560,-32449,4560,-32449,4560,-32449,4560,-32449, - 4371,-32475,4371,-32475,4371,-32475,4371,-32475, - 4182,-32499,4182,-32499,4182,-32499,4182,-32499, - 3993,-32523,3993,-32523,3993,-32523,3993,-32523, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3614,-32568,3614,-32568,3614,-32568,3614,-32568, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3235,-32607,3235,-32607,3235,-32607,3235,-32607, - 3045,-32626,3045,-32626,3045,-32626,3045,-32626, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2665,-32659,2665,-32659,2665,-32659,2665,-32659, - 2475,-32674,2475,-32674,2475,-32674,2475,-32674, - 2285,-32688,2285,-32688,2285,-32688,2285,-32688, - 2095,-32700,2095,-32700,2095,-32700,2095,-32700, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1524,-32732,1524,-32732,1524,-32732,1524,-32732, - 1334,-32740,1334,-32740,1334,-32740,1334,-32740, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 953,-32754,953,-32754,953,-32754,953,-32754, - 762,-32759,762,-32759,762,-32759,762,-32759, - 571,-32763,571,-32763,571,-32763,571,-32763, - 381,-32765,381,-32765,381,-32765,381,-32765, - 190,-32767,190,-32767,190,-32767,190,-32767, - 0,-32767,0,-32767,0,-32767,0,-32767, - -191,-32767,-191,-32767,-191,-32767,-191,-32767, - -382,-32765,-382,-32765,-382,-32765,-382,-32765, - -572,-32763,-572,-32763,-572,-32763,-572,-32763, - -763,-32759,-763,-32759,-763,-32759,-763,-32759, - -954,-32754,-954,-32754,-954,-32754,-954,-32754, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -1335,-32740,-1335,-32740,-1335,-32740,-1335,-32740, - -1525,-32732,-1525,-32732,-1525,-32732,-1525,-32732, - -1715,-32723,-1715,-32723,-1715,-32723,-1715,-32723, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2096,-32700,-2096,-32700,-2096,-32700,-2096,-32700, - -2286,-32688,-2286,-32688,-2286,-32688,-2286,-32688, - -2476,-32674,-2476,-32674,-2476,-32674,-2476,-32674, - -2666,-32659,-2666,-32659,-2666,-32659,-2666,-32659, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3046,-32626,-3046,-32626,-3046,-32626,-3046,-32626, - -3236,-32607,-3236,-32607,-3236,-32607,-3236,-32607, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3615,-32568,-3615,-32568,-3615,-32568,-3615,-32568, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -3994,-32523,-3994,-32523,-3994,-32523,-3994,-32523, - -4183,-32499,-4183,-32499,-4183,-32499,-4183,-32499, - -4372,-32475,-4372,-32475,-4372,-32475,-4372,-32475, - -4561,-32449,-4561,-32449,-4561,-32449,-4561,-32449, - -4749,-32422,-4749,-32422,-4749,-32422,-4749,-32422, - -4938,-32393,-4938,-32393,-4938,-32393,-4938,-32393, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5315,-32334,-5315,-32334,-5315,-32334,-5315,-32334, - -5503,-32302,-5503,-32302,-5503,-32302,-5503,-32302, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -5878,-32236,-5878,-32236,-5878,-32236,-5878,-32236, - -6066,-32201,-6066,-32201,-6066,-32201,-6066,-32201, - -6253,-32165,-6253,-32165,-6253,-32165,-6253,-32165, - -6440,-32129,-6440,-32129,-6440,-32129,-6440,-32129, - -6627,-32091,-6627,-32091,-6627,-32091,-6627,-32091, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -6999,-32011,-6999,-32011,-6999,-32011,-6999,-32011, - -7186,-31970,-7186,-31970,-7186,-31970,-7186,-31970, - -7371,-31928,-7371,-31928,-7371,-31928,-7371,-31928, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -7742,-31840,-7742,-31840,-7742,-31840,-7742,-31840, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -8112,-31748,-8112,-31748,-8112,-31748,-8112,-31748, - -8297,-31700,-8297,-31700,-8297,-31700,-8297,-31700, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8665,-31601,-8665,-31601,-8665,-31601,-8665,-31601, - -8849,-31550,-8849,-31550,-8849,-31550,-8849,-31550, - -9032,-31498,-9032,-31498,-9032,-31498,-9032,-31498, - -9215,-31445,-9215,-31445,-9215,-31445,-9215,-31445, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -9581,-31336,-9581,-31336,-9581,-31336,-9581,-31336, - -9763,-31279,-9763,-31279,-9763,-31279,-9763,-31279, - -9945,-31222,-9945,-31222,-9945,-31222,-9945,-31222, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10307,-31104,-10307,-31104,-10307,-31104,-10307,-31104, - -10488,-31044,-10488,-31044,-10488,-31044,-10488,-31044, - -10668,-30982,-10668,-30982,-10668,-30982,-10668,-30982, - -10848,-30920,-10848,-30920,-10848,-30920,-10848,-30920, - -11028,-30856,-11028,-30856,-11028,-30856,-11028,-30856, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11386,-30726,-11386,-30726,-11386,-30726,-11386,-30726, - -11565,-30659,-11565,-30659,-11565,-30659,-11565,-30659, - -11743,-30591,-11743,-30591,-11743,-30591,-11743,-30591, - -11921,-30522,-11921,-30522,-11921,-30522,-11921,-30522, - -12098,-30452,-12098,-30452,-12098,-30452,-12098,-30452, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -12452,-30310,-12452,-30310,-12452,-30310,-12452,-30310, - -12628,-30237,-12628,-30237,-12628,-30237,-12628,-30237, - -12804,-30163,-12804,-30163,-12804,-30163,-12804,-30163, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13154,-30012,-13154,-30012,-13154,-30012,-13154,-30012, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13502,-29857,-13502,-29857,-13502,-29857,-13502,-29857, - -13675,-29778,-13675,-29778,-13675,-29778,-13675,-29778, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14021,-29616,-14021,-29616,-14021,-29616,-14021,-29616, - -14193,-29534,-14193,-29534,-14193,-29534,-14193,-29534, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -14536,-29367,-14536,-29367,-14536,-29367,-14536,-29367, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15046,-29109,-15046,-29109,-15046,-29109,-15046,-29109, - -15215,-29021,-15215,-29021,-15215,-29021,-15215,-29021, - -15384,-28932,-15384,-28932,-15384,-28932,-15384,-28932, - -15552,-28842,-15552,-28842,-15552,-28842,-15552,-28842, - -15719,-28751,-15719,-28751,-15719,-28751,-15719,-28751, - -15886,-28659,-15886,-28659,-15886,-28659,-15886,-28659, - -16053,-28566,-16053,-28566,-16053,-28566,-16053,-28566, - -16219,-28472,-16219,-28472,-16219,-28472,-16219,-28472 - }; -static int16_t twb1080[359*2*4] = {32764,-382,32764,-382,32764,-382,32764,-382, - 32758,-763,32758,-763,32758,-763,32758,-763, - 32747,-1144,32747,-1144,32747,-1144,32747,-1144, - 32731,-1525,32731,-1525,32731,-1525,32731,-1525, - 32711,-1906,32711,-1906,32711,-1906,32711,-1906, - 32687,-2286,32687,-2286,32687,-2286,32687,-2286, - 32658,-2666,32658,-2666,32658,-2666,32658,-2666, - 32625,-3046,32625,-3046,32625,-3046,32625,-3046, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32545,-3805,32545,-3805,32545,-3805,32545,-3805, - 32498,-4183,32498,-4183,32498,-4183,32498,-4183, - 32448,-4561,32448,-4561,32448,-4561,32448,-4561, - 32392,-4938,32392,-4938,32392,-4938,32392,-4938, - 32333,-5315,32333,-5315,32333,-5315,32333,-5315, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32200,-6066,32200,-6066,32200,-6066,32200,-6066, - 32128,-6440,32128,-6440,32128,-6440,32128,-6440, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31969,-7186,31969,-7186,31969,-7186,31969,-7186, - 31883,-7557,31883,-7557,31883,-7557,31883,-7557, - 31793,-7928,31793,-7928,31793,-7928,31793,-7928, - 31699,-8297,31699,-8297,31699,-8297,31699,-8297, - 31600,-8665,31600,-8665,31600,-8665,31600,-8665, - 31497,-9032,31497,-9032,31497,-9032,31497,-9032, - 31390,-9398,31390,-9398,31390,-9398,31390,-9398, - 31278,-9763,31278,-9763,31278,-9763,31278,-9763, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31043,-10488,31043,-10488,31043,-10488,31043,-10488, - 30919,-10848,30919,-10848,30919,-10848,30919,-10848, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30658,-11565,30658,-11565,30658,-11565,30658,-11565, - 30521,-11921,30521,-11921,30521,-11921,30521,-11921, - 30381,-12275,30381,-12275,30381,-12275,30381,-12275, - 30236,-12628,30236,-12628,30236,-12628,30236,-12628, - 30087,-12979,30087,-12979,30087,-12979,30087,-12979, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29777,-13675,29777,-13675,29777,-13675,29777,-13675, - 29615,-14021,29615,-14021,29615,-14021,29615,-14021, - 29450,-14365,29450,-14365,29450,-14365,29450,-14365, - 29281,-14706,29281,-14706,29281,-14706,29281,-14706, - 29108,-15046,29108,-15046,29108,-15046,29108,-15046, - 28931,-15384,28931,-15384,28931,-15384,28931,-15384, - 28750,-15719,28750,-15719,28750,-15719,28750,-15719, - 28565,-16053,28565,-16053,28565,-16053,28565,-16053, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28184,-16713,28184,-16713,28184,-16713,28184,-16713, - 27988,-17040,27988,-17040,27988,-17040,27988,-17040, - 27787,-17364,27787,-17364,27787,-17364,27787,-17364, - 27584,-17687,27584,-17687,27584,-17687,27584,-17687, - 27376,-18006,27376,-18006,27376,-18006,27376,-18006, - 27165,-18324,27165,-18324,27165,-18324,27165,-18324, - 26950,-18638,26950,-18638,26950,-18638,26950,-18638, - 26731,-18951,26731,-18951,26731,-18951,26731,-18951, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26283,-19568,26283,-19568,26283,-19568,26283,-19568, - 26053,-19872,26053,-19872,26053,-19872,26053,-19872, - 25820,-20174,25820,-20174,25820,-20174,25820,-20174, - 25584,-20473,25584,-20473,25584,-20473,25584,-20473, - 25344,-20769,25344,-20769,25344,-20769,25344,-20769, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24854,-21353,24854,-21353,24854,-21353,24854,-21353, - 24604,-21641,24604,-21641,24604,-21641,24604,-21641, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24093,-22208,24093,-22208,24093,-22208,24093,-22208, - 23833,-22487,23833,-22487,23833,-22487,23833,-22487, - 23570,-22762,23570,-22762,23570,-22762,23570,-22762, - 23304,-23035,23304,-23035,23304,-23035,23304,-23035, - 23034,-23305,23034,-23305,23034,-23305,23034,-23305, - 22761,-23571,22761,-23571,22761,-23571,22761,-23571, - 22486,-23834,22486,-23834,22486,-23834,22486,-23834, - 22207,-24094,22207,-24094,22207,-24094,22207,-24094, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21640,-24605,21640,-24605,21640,-24605,21640,-24605, - 21352,-24855,21352,-24855,21352,-24855,21352,-24855, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20768,-25345,20768,-25345,20768,-25345,20768,-25345, - 20472,-25585,20472,-25585,20472,-25585,20472,-25585, - 20173,-25821,20173,-25821,20173,-25821,20173,-25821, - 19871,-26054,19871,-26054,19871,-26054,19871,-26054, - 19567,-26284,19567,-26284,19567,-26284,19567,-26284, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18950,-26732,18950,-26732,18950,-26732,18950,-26732, - 18637,-26951,18637,-26951,18637,-26951,18637,-26951, - 18323,-27166,18323,-27166,18323,-27166,18323,-27166, - 18005,-27377,18005,-27377,18005,-27377,18005,-27377, - 17686,-27585,17686,-27585,17686,-27585,17686,-27585, - 17363,-27788,17363,-27788,17363,-27788,17363,-27788, - 17039,-27989,17039,-27989,17039,-27989,17039,-27989, - 16712,-28185,16712,-28185,16712,-28185,16712,-28185, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16052,-28566,16052,-28566,16052,-28566,16052,-28566, - 15718,-28751,15718,-28751,15718,-28751,15718,-28751, - 15383,-28932,15383,-28932,15383,-28932,15383,-28932, - 15045,-29109,15045,-29109,15045,-29109,15045,-29109, - 14705,-29282,14705,-29282,14705,-29282,14705,-29282, - 14364,-29451,14364,-29451,14364,-29451,14364,-29451, - 14020,-29616,14020,-29616,14020,-29616,14020,-29616, - 13674,-29778,13674,-29778,13674,-29778,13674,-29778, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 12978,-30088,12978,-30088,12978,-30088,12978,-30088, - 12627,-30237,12627,-30237,12627,-30237,12627,-30237, - 12274,-30382,12274,-30382,12274,-30382,12274,-30382, - 11920,-30522,11920,-30522,11920,-30522,11920,-30522, - 11564,-30659,11564,-30659,11564,-30659,11564,-30659, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10847,-30920,10847,-30920,10847,-30920,10847,-30920, - 10487,-31044,10487,-31044,10487,-31044,10487,-31044, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9762,-31279,9762,-31279,9762,-31279,9762,-31279, - 9397,-31391,9397,-31391,9397,-31391,9397,-31391, - 9031,-31498,9031,-31498,9031,-31498,9031,-31498, - 8664,-31601,8664,-31601,8664,-31601,8664,-31601, - 8296,-31700,8296,-31700,8296,-31700,8296,-31700, - 7927,-31794,7927,-31794,7927,-31794,7927,-31794, - 7556,-31884,7556,-31884,7556,-31884,7556,-31884, - 7185,-31970,7185,-31970,7185,-31970,7185,-31970, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6439,-32129,6439,-32129,6439,-32129,6439,-32129, - 6065,-32201,6065,-32201,6065,-32201,6065,-32201, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5314,-32334,5314,-32334,5314,-32334,5314,-32334, - 4937,-32393,4937,-32393,4937,-32393,4937,-32393, - 4560,-32449,4560,-32449,4560,-32449,4560,-32449, - 4182,-32499,4182,-32499,4182,-32499,4182,-32499, - 3804,-32546,3804,-32546,3804,-32546,3804,-32546, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3045,-32626,3045,-32626,3045,-32626,3045,-32626, - 2665,-32659,2665,-32659,2665,-32659,2665,-32659, - 2285,-32688,2285,-32688,2285,-32688,2285,-32688, - 1905,-32712,1905,-32712,1905,-32712,1905,-32712, - 1524,-32732,1524,-32732,1524,-32732,1524,-32732, - 1143,-32748,1143,-32748,1143,-32748,1143,-32748, - 762,-32759,762,-32759,762,-32759,762,-32759, - 381,-32765,381,-32765,381,-32765,381,-32765, - 0,-32767,0,-32767,0,-32767,0,-32767, - -382,-32765,-382,-32765,-382,-32765,-382,-32765, - -763,-32759,-763,-32759,-763,-32759,-763,-32759, - -1144,-32748,-1144,-32748,-1144,-32748,-1144,-32748, - -1525,-32732,-1525,-32732,-1525,-32732,-1525,-32732, - -1906,-32712,-1906,-32712,-1906,-32712,-1906,-32712, - -2286,-32688,-2286,-32688,-2286,-32688,-2286,-32688, - -2666,-32659,-2666,-32659,-2666,-32659,-2666,-32659, - -3046,-32626,-3046,-32626,-3046,-32626,-3046,-32626, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3805,-32546,-3805,-32546,-3805,-32546,-3805,-32546, - -4183,-32499,-4183,-32499,-4183,-32499,-4183,-32499, - -4561,-32449,-4561,-32449,-4561,-32449,-4561,-32449, - -4938,-32393,-4938,-32393,-4938,-32393,-4938,-32393, - -5315,-32334,-5315,-32334,-5315,-32334,-5315,-32334, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6066,-32201,-6066,-32201,-6066,-32201,-6066,-32201, - -6440,-32129,-6440,-32129,-6440,-32129,-6440,-32129, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7186,-31970,-7186,-31970,-7186,-31970,-7186,-31970, - -7557,-31884,-7557,-31884,-7557,-31884,-7557,-31884, - -7928,-31794,-7928,-31794,-7928,-31794,-7928,-31794, - -8297,-31700,-8297,-31700,-8297,-31700,-8297,-31700, - -8665,-31601,-8665,-31601,-8665,-31601,-8665,-31601, - -9032,-31498,-9032,-31498,-9032,-31498,-9032,-31498, - -9398,-31391,-9398,-31391,-9398,-31391,-9398,-31391, - -9763,-31279,-9763,-31279,-9763,-31279,-9763,-31279, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10488,-31044,-10488,-31044,-10488,-31044,-10488,-31044, - -10848,-30920,-10848,-30920,-10848,-30920,-10848,-30920, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11565,-30659,-11565,-30659,-11565,-30659,-11565,-30659, - -11921,-30522,-11921,-30522,-11921,-30522,-11921,-30522, - -12275,-30382,-12275,-30382,-12275,-30382,-12275,-30382, - -12628,-30237,-12628,-30237,-12628,-30237,-12628,-30237, - -12979,-30088,-12979,-30088,-12979,-30088,-12979,-30088, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13675,-29778,-13675,-29778,-13675,-29778,-13675,-29778, - -14021,-29616,-14021,-29616,-14021,-29616,-14021,-29616, - -14365,-29451,-14365,-29451,-14365,-29451,-14365,-29451, - -14706,-29282,-14706,-29282,-14706,-29282,-14706,-29282, - -15046,-29109,-15046,-29109,-15046,-29109,-15046,-29109, - -15384,-28932,-15384,-28932,-15384,-28932,-15384,-28932, - -15719,-28751,-15719,-28751,-15719,-28751,-15719,-28751, - -16053,-28566,-16053,-28566,-16053,-28566,-16053,-28566, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16713,-28185,-16713,-28185,-16713,-28185,-16713,-28185, - -17040,-27989,-17040,-27989,-17040,-27989,-17040,-27989, - -17364,-27788,-17364,-27788,-17364,-27788,-17364,-27788, - -17687,-27585,-17687,-27585,-17687,-27585,-17687,-27585, - -18006,-27377,-18006,-27377,-18006,-27377,-18006,-27377, - -18324,-27166,-18324,-27166,-18324,-27166,-18324,-27166, - -18638,-26951,-18638,-26951,-18638,-26951,-18638,-26951, - -18951,-26732,-18951,-26732,-18951,-26732,-18951,-26732, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19568,-26284,-19568,-26284,-19568,-26284,-19568,-26284, - -19872,-26054,-19872,-26054,-19872,-26054,-19872,-26054, - -20174,-25821,-20174,-25821,-20174,-25821,-20174,-25821, - -20473,-25585,-20473,-25585,-20473,-25585,-20473,-25585, - -20769,-25345,-20769,-25345,-20769,-25345,-20769,-25345, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -21353,-24855,-21353,-24855,-21353,-24855,-21353,-24855, - -21641,-24605,-21641,-24605,-21641,-24605,-21641,-24605, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22208,-24094,-22208,-24094,-22208,-24094,-22208,-24094, - -22487,-23834,-22487,-23834,-22487,-23834,-22487,-23834, - -22762,-23571,-22762,-23571,-22762,-23571,-22762,-23571, - -23035,-23305,-23035,-23305,-23035,-23305,-23035,-23305, - -23305,-23035,-23305,-23035,-23305,-23035,-23305,-23035, - -23571,-22762,-23571,-22762,-23571,-22762,-23571,-22762, - -23834,-22487,-23834,-22487,-23834,-22487,-23834,-22487, - -24094,-22208,-24094,-22208,-24094,-22208,-24094,-22208, - -24351,-21926,-24351,-21926,-24351,-21926,-24351,-21926, - -24605,-21641,-24605,-21641,-24605,-21641,-24605,-21641, - -24855,-21353,-24855,-21353,-24855,-21353,-24855,-21353, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25345,-20769,-25345,-20769,-25345,-20769,-25345,-20769, - -25585,-20473,-25585,-20473,-25585,-20473,-25585,-20473, - -25821,-20174,-25821,-20174,-25821,-20174,-25821,-20174, - -26054,-19872,-26054,-19872,-26054,-19872,-26054,-19872, - -26284,-19568,-26284,-19568,-26284,-19568,-26284,-19568, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26732,-18951,-26732,-18951,-26732,-18951,-26732,-18951, - -26951,-18638,-26951,-18638,-26951,-18638,-26951,-18638, - -27166,-18324,-27166,-18324,-27166,-18324,-27166,-18324, - -27377,-18006,-27377,-18006,-27377,-18006,-27377,-18006, - -27585,-17687,-27585,-17687,-27585,-17687,-27585,-17687, - -27788,-17364,-27788,-17364,-27788,-17364,-27788,-17364, - -27989,-17040,-27989,-17040,-27989,-17040,-27989,-17040, - -28185,-16713,-28185,-16713,-28185,-16713,-28185,-16713, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28566,-16053,-28566,-16053,-28566,-16053,-28566,-16053, - -28751,-15719,-28751,-15719,-28751,-15719,-28751,-15719, - -28932,-15384,-28932,-15384,-28932,-15384,-28932,-15384, - -29109,-15046,-29109,-15046,-29109,-15046,-29109,-15046, - -29282,-14706,-29282,-14706,-29282,-14706,-29282,-14706, - -29451,-14365,-29451,-14365,-29451,-14365,-29451,-14365, - -29616,-14021,-29616,-14021,-29616,-14021,-29616,-14021, - -29778,-13675,-29778,-13675,-29778,-13675,-29778,-13675, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30088,-12979,-30088,-12979,-30088,-12979,-30088,-12979, - -30237,-12628,-30237,-12628,-30237,-12628,-30237,-12628, - -30382,-12275,-30382,-12275,-30382,-12275,-30382,-12275, - -30522,-11921,-30522,-11921,-30522,-11921,-30522,-11921, - -30659,-11565,-30659,-11565,-30659,-11565,-30659,-11565, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -30920,-10848,-30920,-10848,-30920,-10848,-30920,-10848, - -31044,-10488,-31044,-10488,-31044,-10488,-31044,-10488, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31279,-9763,-31279,-9763,-31279,-9763,-31279,-9763, - -31391,-9398,-31391,-9398,-31391,-9398,-31391,-9398, - -31498,-9032,-31498,-9032,-31498,-9032,-31498,-9032, - -31601,-8665,-31601,-8665,-31601,-8665,-31601,-8665, - -31700,-8297,-31700,-8297,-31700,-8297,-31700,-8297, - -31794,-7928,-31794,-7928,-31794,-7928,-31794,-7928, - -31884,-7557,-31884,-7557,-31884,-7557,-31884,-7557, - -31970,-7186,-31970,-7186,-31970,-7186,-31970,-7186, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32129,-6440,-32129,-6440,-32129,-6440,-32129,-6440, - -32201,-6066,-32201,-6066,-32201,-6066,-32201,-6066, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32334,-5315,-32334,-5315,-32334,-5315,-32334,-5315, - -32393,-4938,-32393,-4938,-32393,-4938,-32393,-4938, - -32449,-4561,-32449,-4561,-32449,-4561,-32449,-4561, - -32499,-4183,-32499,-4183,-32499,-4183,-32499,-4183, - -32546,-3805,-32546,-3805,-32546,-3805,-32546,-3805, - -32588,-3426,-32588,-3426,-32588,-3426,-32588,-3426, - -32626,-3046,-32626,-3046,-32626,-3046,-32626,-3046, - -32659,-2666,-32659,-2666,-32659,-2666,-32659,-2666, - -32688,-2286,-32688,-2286,-32688,-2286,-32688,-2286, - -32712,-1906,-32712,-1906,-32712,-1906,-32712,-1906, - -32732,-1525,-32732,-1525,-32732,-1525,-32732,-1525, - -32748,-1144,-32748,-1144,-32748,-1144,-32748,-1144, - -32759,-763,-32759,-763,-32759,-763,-32759,-763, - -32765,-382,-32765,-382,-32765,-382,-32765,-382, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32765,381,-32765,381,-32765,381,-32765,381, - -32759,762,-32759,762,-32759,762,-32759,762, - -32748,1143,-32748,1143,-32748,1143,-32748,1143, - -32732,1524,-32732,1524,-32732,1524,-32732,1524, - -32712,1905,-32712,1905,-32712,1905,-32712,1905, - -32688,2285,-32688,2285,-32688,2285,-32688,2285, - -32659,2665,-32659,2665,-32659,2665,-32659,2665, - -32626,3045,-32626,3045,-32626,3045,-32626,3045, - -32588,3425,-32588,3425,-32588,3425,-32588,3425, - -32546,3804,-32546,3804,-32546,3804,-32546,3804, - -32499,4182,-32499,4182,-32499,4182,-32499,4182, - -32449,4560,-32449,4560,-32449,4560,-32449,4560, - -32393,4937,-32393,4937,-32393,4937,-32393,4937, - -32334,5314,-32334,5314,-32334,5314,-32334,5314, - -32270,5689,-32270,5689,-32270,5689,-32270,5689, - -32201,6065,-32201,6065,-32201,6065,-32201,6065, - -32129,6439,-32129,6439,-32129,6439,-32129,6439, - -32051,6812,-32051,6812,-32051,6812,-32051,6812, - -31970,7185,-31970,7185,-31970,7185,-31970,7185, - -31884,7556,-31884,7556,-31884,7556,-31884,7556, - -31794,7927,-31794,7927,-31794,7927,-31794,7927, - -31700,8296,-31700,8296,-31700,8296,-31700,8296, - -31601,8664,-31601,8664,-31601,8664,-31601,8664, - -31498,9031,-31498,9031,-31498,9031,-31498,9031, - -31391,9397,-31391,9397,-31391,9397,-31391,9397, - -31279,9762,-31279,9762,-31279,9762,-31279,9762, - -31164,10125,-31164,10125,-31164,10125,-31164,10125, - -31044,10487,-31044,10487,-31044,10487,-31044,10487, - -30920,10847,-30920,10847,-30920,10847,-30920,10847, - -30791,11206,-30791,11206,-30791,11206,-30791,11206, - -30659,11564,-30659,11564,-30659,11564,-30659,11564, - -30522,11920,-30522,11920,-30522,11920,-30522,11920, - -30382,12274,-30382,12274,-30382,12274,-30382,12274, - -30237,12627,-30237,12627,-30237,12627,-30237,12627, - -30088,12978,-30088,12978,-30088,12978,-30088,12978, - -29935,13327,-29935,13327,-29935,13327,-29935,13327, - -29778,13674,-29778,13674,-29778,13674,-29778,13674, - -29616,14020,-29616,14020,-29616,14020,-29616,14020, - -29451,14364,-29451,14364,-29451,14364,-29451,14364, - -29282,14705,-29282,14705,-29282,14705,-29282,14705, - -29109,15045,-29109,15045,-29109,15045,-29109,15045, - -28932,15383,-28932,15383,-28932,15383,-28932,15383, - -28751,15718,-28751,15718,-28751,15718,-28751,15718, - -28566,16052,-28566,16052,-28566,16052,-28566,16052, - -28378,16383,-28378,16383,-28378,16383,-28378,16383, - -28185,16712,-28185,16712,-28185,16712,-28185,16712, - -27989,17039,-27989,17039,-27989,17039,-27989,17039, - -27788,17363,-27788,17363,-27788,17363,-27788,17363, - -27585,17686,-27585,17686,-27585,17686,-27585,17686, - -27377,18005,-27377,18005,-27377,18005,-27377,18005, - -27166,18323,-27166,18323,-27166,18323,-27166,18323, - -26951,18637,-26951,18637,-26951,18637,-26951,18637, - -26732,18950,-26732,18950,-26732,18950,-26732,18950, - -26510,19259,-26510,19259,-26510,19259,-26510,19259, - -26284,19567,-26284,19567,-26284,19567,-26284,19567, - -26054,19871,-26054,19871,-26054,19871,-26054,19871, - -25821,20173,-25821,20173,-25821,20173,-25821,20173, - -25585,20472,-25585,20472,-25585,20472,-25585,20472, - -25345,20768,-25345,20768,-25345,20768,-25345,20768, - -25101,21062,-25101,21062,-25101,21062,-25101,21062, - -24855,21352,-24855,21352,-24855,21352,-24855,21352, - -24605,21640,-24605,21640,-24605,21640,-24605,21640, - -24351,21925,-24351,21925,-24351,21925,-24351,21925, - -24094,22207,-24094,22207,-24094,22207,-24094,22207, - -23834,22486,-23834,22486,-23834,22486,-23834,22486, - -23571,22761,-23571,22761,-23571,22761,-23571,22761, - -23305,23034,-23305,23034,-23305,23034,-23305,23034, - -23035,23304,-23035,23304,-23035,23304,-23035,23304, - -22762,23570,-22762,23570,-22762,23570,-22762,23570, - -22487,23833,-22487,23833,-22487,23833,-22487,23833, - -22208,24093,-22208,24093,-22208,24093,-22208,24093, - -21926,24350,-21926,24350,-21926,24350,-21926,24350, - -21641,24604,-21641,24604,-21641,24604,-21641,24604, - -21353,24854,-21353,24854,-21353,24854,-21353,24854, - -21063,25100,-21063,25100,-21063,25100,-21063,25100, - -20769,25344,-20769,25344,-20769,25344,-20769,25344, - -20473,25584,-20473,25584,-20473,25584,-20473,25584, - -20174,25820,-20174,25820,-20174,25820,-20174,25820, - -19872,26053,-19872,26053,-19872,26053,-19872,26053, - -19568,26283,-19568,26283,-19568,26283,-19568,26283, - -19260,26509,-19260,26509,-19260,26509,-19260,26509, - -18951,26731,-18951,26731,-18951,26731,-18951,26731, - -18638,26950,-18638,26950,-18638,26950,-18638,26950, - -18324,27165,-18324,27165,-18324,27165,-18324,27165, - -18006,27376,-18006,27376,-18006,27376,-18006,27376, - -17687,27584,-17687,27584,-17687,27584,-17687,27584, - -17364,27787,-17364,27787,-17364,27787,-17364,27787, - -17040,27988,-17040,27988,-17040,27988,-17040,27988, - -16713,28184,-16713,28184,-16713,28184,-16713,28184 - }; +static int16_t twa1080[359*2*4]; +static int16_t twb1080[359*2*4]; void dft1080(int16_t *x,int16_t *y,unsigned char scale_flag) // 360 x 3 { @@ -15899,906 +8384,9 @@ void dft1080(int16_t *x,int16_t *y,unsigned char scale_flag) // 360 x 3 }; -/* Twiddles generated with -twa = floor(32767*exp(-sqrt(-1)*2*pi*(1:287)/1152)); -twb = floor(32767*exp(-sqrt(-1)*2*pi*2*(1:287)/1152)); -twc = floor(32767*exp(-sqrt(-1)*2*pi*3*(1:287)/1152)); -twa2 = zeros(1,2*287); -twb2 = zeros(1,2*287); -twc2 = zeros(1,2*287); -twa2(1:2:end) = real(twa); -twa2(2:2:end) = imag(twa); -twb2(1:2:end) = real(twb); -twb2(2:2:end) = imag(twb); -twc2(1:2:end) = real(twc); -twc2(2:2:end) = imag(twc); -fd=fopen("twiddle_tmp.txt","w"); -fprintf(fd,"static int16_t twa1152[287*2*4] = {"); -for i=1:2:(2*286) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1),twa2(i),twa2(i+1)); -fprintf(fd,"\nstatic int16_t twb1152[287*2*4] = {"); -for i=1:2:(2*286) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1),twb2(i),twb2(i+1)); -fprintf(fd,"\nstatic int16_t twc1152[287*2*4] = {"); -for i=1:2:(2*286) - fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d,\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -end -i=i+2; -fprintf(fd,"%d,%d,%d,%d,%d,%d,%d,%d};\n",twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1),twc2(i),twc2(i+1)); -fclose(fd); -*/ -static int16_t twa1152[287*2*4] = {32766,-179,32766,-179,32766,-179,32766,-179, - 32765,-358,32765,-358,32765,-358,32765,-358, - 32762,-537,32762,-537,32762,-537,32762,-537, - 32759,-715,32759,-715,32759,-715,32759,-715, - 32754,-894,32754,-894,32754,-894,32754,-894, - 32749,-1073,32749,-1073,32749,-1073,32749,-1073, - 32743,-1251,32743,-1251,32743,-1251,32743,-1251, - 32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32727,-1608,32727,-1608,32727,-1608,32727,-1608, - 32718,-1787,32718,-1787,32718,-1787,32718,-1787, - 32708,-1965,32708,-1965,32708,-1965,32708,-1965, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32684,-2322,32684,-2322,32684,-2322,32684,-2322, - 32671,-2500,32671,-2500,32671,-2500,32671,-2500, - 32657,-2678,32657,-2678,32657,-2678,32657,-2678, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32626,-3034,32626,-3034,32626,-3034,32626,-3034, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32591,-3390,32591,-3390,32591,-3390,32591,-3390, - 32572,-3568,32572,-3568,32572,-3568,32572,-3568, - 32552,-3745,32552,-3745,32552,-3745,32552,-3745, - 32531,-3923,32531,-3923,32531,-3923,32531,-3923, - 32509,-4100,32509,-4100,32509,-4100,32509,-4100, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32462,-4455,32462,-4455,32462,-4455,32462,-4455, - 32438,-4632,32438,-4632,32438,-4632,32438,-4632, - 32412,-4808,32412,-4808,32412,-4808,32412,-4808, - 32385,-4985,32385,-4985,32385,-4985,32385,-4985, - 32357,-5162,32357,-5162,32357,-5162,32357,-5162, - 32329,-5338,32329,-5338,32329,-5338,32329,-5338, - 32299,-5514,32299,-5514,32299,-5514,32299,-5514, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32237,-5866,32237,-5866,32237,-5866,32237,-5866, - 32205,-6042,32205,-6042,32205,-6042,32205,-6042, - 32171,-6218,32171,-6218,32171,-6218,32171,-6218, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32102,-6568,32102,-6568,32102,-6568,32102,-6568, - 32065,-6743,32065,-6743,32065,-6743,32065,-6743, - 32028,-6918,32028,-6918,32028,-6918,32028,-6918, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31951,-7267,31951,-7267,31951,-7267,31951,-7267, - 31911,-7441,31911,-7441,31911,-7441,31911,-7441, - 31869,-7615,31869,-7615,31869,-7615,31869,-7615, - 31827,-7789,31827,-7789,31827,-7789,31827,-7789, - 31785,-7962,31785,-7962,31785,-7962,31785,-7962, - 31741,-8135,31741,-8135,31741,-8135,31741,-8135, - 31696,-8308,31696,-8308,31696,-8308,31696,-8308, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31603,-8654,31603,-8654,31603,-8654,31603,-8654, - 31556,-8826,31556,-8826,31556,-8826,31556,-8826, - 31507,-8998,31507,-8998,31507,-8998,31507,-8998, - 31457,-9170,31457,-9170,31457,-9170,31457,-9170, - 31407,-9341,31407,-9341,31407,-9341,31407,-9341, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 31303,-9683,31303,-9683,31303,-9683,31303,-9683, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 31196,-10024,31196,-10024,31196,-10024,31196,-10024, - 31141,-10194,31141,-10194,31141,-10194,31141,-10194, - 31085,-10364,31085,-10364,31085,-10364,31085,-10364, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30970,-10702,30970,-10702,30970,-10702,30970,-10702, - 30911,-10871,30911,-10871,30911,-10871,30911,-10871, - 30851,-11039,30851,-11039,30851,-11039,30851,-11039, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30729,-11375,30729,-11375,30729,-11375,30729,-11375, - 30666,-11543,30666,-11543,30666,-11543,30666,-11543, - 30603,-11710,30603,-11710,30603,-11710,30603,-11710, - 30539,-11877,30539,-11877,30539,-11877,30539,-11877, - 30473,-12043,30473,-12043,30473,-12043,30473,-12043, - 30407,-12209,30407,-12209,30407,-12209,30407,-12209, - 30340,-12375,30340,-12375,30340,-12375,30340,-12375, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30203,-12705,30203,-12705,30203,-12705,30203,-12705, - 30134,-12869,30134,-12869,30134,-12869,30134,-12869, - 30063,-13034,30063,-13034,30063,-13034,30063,-13034, - 29992,-13197,29992,-13197,29992,-13197,29992,-13197, - 29919,-13361,29919,-13361,29919,-13361,29919,-13361, - 29846,-13524,29846,-13524,29846,-13524,29846,-13524, - 29772,-13686,29772,-13686,29772,-13686,29772,-13686, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29621,-14010,29621,-14010,29621,-14010,29621,-14010, - 29544,-14172,29544,-14172,29544,-14172,29544,-14172, - 29466,-14332,29466,-14332,29466,-14332,29466,-14332, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29308,-14653,29308,-14653,29308,-14653,29308,-14653, - 29227,-14813,29227,-14813,29227,-14813,29227,-14813, - 29146,-14972,29146,-14972,29146,-14972,29146,-14972, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28981,-15289,28981,-15289,28981,-15289,28981,-15289, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28813,-15604,28813,-15604,28813,-15604,28813,-15604, - 28727,-15761,28727,-15761,28727,-15761,28727,-15761, - 28641,-15918,28641,-15918,28641,-15918,28641,-15918, - 28554,-16073,28554,-16073,28554,-16073,28554,-16073, - 28465,-16229,28465,-16229,28465,-16229,28465,-16229, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28287,-16539,28287,-16539,28287,-16539,28287,-16539, - 28196,-16693,28196,-16693,28196,-16693,28196,-16693, - 28105,-16846,28105,-16846,28105,-16846,28105,-16846, - 28012,-16999,28012,-16999,28012,-16999,28012,-16999, - 27919,-17152,27919,-17152,27919,-17152,27919,-17152, - 27825,-17304,27825,-17304,27825,-17304,27825,-17304, - 27731,-17455,27731,-17455,27731,-17455,27731,-17455, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 27538,-17757,27538,-17757,27538,-17757,27538,-17757, - 27441,-17907,27441,-17907,27441,-17907,27441,-17907, - 27343,-18056,27343,-18056,27343,-18056,27343,-18056, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 27145,-18353,27145,-18353,27145,-18353,27145,-18353, - 27044,-18501,27044,-18501,27044,-18501,27044,-18501, - 26943,-18648,26943,-18648,26943,-18648,26943,-18648, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26738,-18941,26738,-18941,26738,-18941,26738,-18941, - 26634,-19087,26634,-19087,26634,-19087,26634,-19087, - 26530,-19232,26530,-19232,26530,-19232,26530,-19232, - 26424,-19376,26424,-19376,26424,-19376,26424,-19376, - 26318,-19520,26318,-19520,26318,-19520,26318,-19520, - 26211,-19663,26211,-19663,26211,-19663,26211,-19663, - 26104,-19806,26104,-19806,26104,-19806,26104,-19806, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25886,-20089,25886,-20089,25886,-20089,25886,-20089, - 25776,-20230,25776,-20230,25776,-20230,25776,-20230, - 25665,-20370,25665,-20370,25665,-20370,25665,-20370, - 25554,-20510,25554,-20510,25554,-20510,25554,-20510, - 25442,-20649,25442,-20649,25442,-20649,25442,-20649, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 25215,-20926,25215,-20926,25215,-20926,25215,-20926, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24985,-21199,24985,-21199,24985,-21199,24985,-21199, - 24869,-21335,24869,-21335,24869,-21335,24869,-21335, - 24753,-21471,24753,-21471,24753,-21471,24753,-21471, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24517,-21739,24517,-21739,24517,-21739,24517,-21739, - 24398,-21873,24398,-21873,24398,-21873,24398,-21873, - 24278,-22005,24278,-22005,24278,-22005,24278,-22005, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 24037,-22269,24037,-22269,24037,-22269,24037,-22269, - 23915,-22400,23915,-22400,23915,-22400,23915,-22400, - 23792,-22530,23792,-22530,23792,-22530,23792,-22530, - 23669,-22659,23669,-22659,23669,-22659,23669,-22659, - 23545,-22788,23545,-22788,23545,-22788,23545,-22788, - 23421,-22916,23421,-22916,23421,-22916,23421,-22916, - 23295,-23044,23295,-23044,23295,-23044,23295,-23044, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 23043,-23296,23043,-23296,23043,-23296,23043,-23296, - 22915,-23422,22915,-23422,22915,-23422,22915,-23422, - 22787,-23546,22787,-23546,22787,-23546,22787,-23546, - 22658,-23670,22658,-23670,22658,-23670,22658,-23670, - 22529,-23793,22529,-23793,22529,-23793,22529,-23793, - 22399,-23916,22399,-23916,22399,-23916,22399,-23916, - 22268,-24038,22268,-24038,22268,-24038,22268,-24038, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 22004,-24279,22004,-24279,22004,-24279,22004,-24279, - 21872,-24399,21872,-24399,21872,-24399,21872,-24399, - 21738,-24518,21738,-24518,21738,-24518,21738,-24518, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21470,-24754,21470,-24754,21470,-24754,21470,-24754, - 21334,-24870,21334,-24870,21334,-24870,21334,-24870, - 21198,-24986,21198,-24986,21198,-24986,21198,-24986, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20925,-25216,20925,-25216,20925,-25216,20925,-25216, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 20648,-25443,20648,-25443,20648,-25443,20648,-25443, - 20509,-25555,20509,-25555,20509,-25555,20509,-25555, - 20369,-25666,20369,-25666,20369,-25666,20369,-25666, - 20229,-25777,20229,-25777,20229,-25777,20229,-25777, - 20088,-25887,20088,-25887,20088,-25887,20088,-25887, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19805,-26105,19805,-26105,19805,-26105,19805,-26105, - 19662,-26212,19662,-26212,19662,-26212,19662,-26212, - 19519,-26319,19519,-26319,19519,-26319,19519,-26319, - 19375,-26425,19375,-26425,19375,-26425,19375,-26425, - 19231,-26531,19231,-26531,19231,-26531,19231,-26531, - 19086,-26635,19086,-26635,19086,-26635,19086,-26635, - 18940,-26739,18940,-26739,18940,-26739,18940,-26739, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18647,-26944,18647,-26944,18647,-26944,18647,-26944, - 18500,-27045,18500,-27045,18500,-27045,18500,-27045, - 18352,-27146,18352,-27146,18352,-27146,18352,-27146, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 18055,-27344,18055,-27344,18055,-27344,18055,-27344, - 17906,-27442,17906,-27442,17906,-27442,17906,-27442, - 17756,-27539,17756,-27539,17756,-27539,17756,-27539, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 17454,-27732,17454,-27732,17454,-27732,17454,-27732, - 17303,-27826,17303,-27826,17303,-27826,17303,-27826, - 17151,-27920,17151,-27920,17151,-27920,17151,-27920, - 16998,-28013,16998,-28013,16998,-28013,16998,-28013, - 16845,-28106,16845,-28106,16845,-28106,16845,-28106, - 16692,-28197,16692,-28197,16692,-28197,16692,-28197, - 16538,-28288,16538,-28288,16538,-28288,16538,-28288, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16228,-28466,16228,-28466,16228,-28466,16228,-28466, - 16072,-28555,16072,-28555,16072,-28555,16072,-28555, - 15917,-28642,15917,-28642,15917,-28642,15917,-28642, - 15760,-28728,15760,-28728,15760,-28728,15760,-28728, - 15603,-28814,15603,-28814,15603,-28814,15603,-28814, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 15288,-28982,15288,-28982,15288,-28982,15288,-28982, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 14971,-29147,14971,-29147,14971,-29147,14971,-29147, - 14812,-29228,14812,-29228,14812,-29228,14812,-29228, - 14652,-29309,14652,-29309,14652,-29309,14652,-29309, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14331,-29467,14331,-29467,14331,-29467,14331,-29467, - 14171,-29545,14171,-29545,14171,-29545,14171,-29545, - 14009,-29622,14009,-29622,14009,-29622,14009,-29622, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13685,-29773,13685,-29773,13685,-29773,13685,-29773, - 13523,-29847,13523,-29847,13523,-29847,13523,-29847, - 13360,-29920,13360,-29920,13360,-29920,13360,-29920, - 13196,-29993,13196,-29993,13196,-29993,13196,-29993, - 13033,-30064,13033,-30064,13033,-30064,13033,-30064, - 12868,-30135,12868,-30135,12868,-30135,12868,-30135, - 12704,-30204,12704,-30204,12704,-30204,12704,-30204, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12374,-30341,12374,-30341,12374,-30341,12374,-30341, - 12208,-30408,12208,-30408,12208,-30408,12208,-30408, - 12042,-30474,12042,-30474,12042,-30474,12042,-30474, - 11876,-30540,11876,-30540,11876,-30540,11876,-30540, - 11709,-30604,11709,-30604,11709,-30604,11709,-30604, - 11542,-30667,11542,-30667,11542,-30667,11542,-30667, - 11374,-30730,11374,-30730,11374,-30730,11374,-30730, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 11038,-30852,11038,-30852,11038,-30852,11038,-30852, - 10870,-30912,10870,-30912,10870,-30912,10870,-30912, - 10701,-30971,10701,-30971,10701,-30971,10701,-30971, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10363,-31086,10363,-31086,10363,-31086,10363,-31086, - 10193,-31142,10193,-31142,10193,-31142,10193,-31142, - 10023,-31197,10023,-31197,10023,-31197,10023,-31197, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 9682,-31304,9682,-31304,9682,-31304,9682,-31304, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 9340,-31408,9340,-31408,9340,-31408,9340,-31408, - 9169,-31458,9169,-31458,9169,-31458,9169,-31458, - 8997,-31508,8997,-31508,8997,-31508,8997,-31508, - 8825,-31557,8825,-31557,8825,-31557,8825,-31557, - 8653,-31604,8653,-31604,8653,-31604,8653,-31604, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8307,-31697,8307,-31697,8307,-31697,8307,-31697, - 8134,-31742,8134,-31742,8134,-31742,8134,-31742, - 7961,-31786,7961,-31786,7961,-31786,7961,-31786, - 7788,-31828,7788,-31828,7788,-31828,7788,-31828, - 7614,-31870,7614,-31870,7614,-31870,7614,-31870, - 7440,-31912,7440,-31912,7440,-31912,7440,-31912, - 7266,-31952,7266,-31952,7266,-31952,7266,-31952, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 6917,-32029,6917,-32029,6917,-32029,6917,-32029, - 6742,-32066,6742,-32066,6742,-32066,6742,-32066, - 6567,-32103,6567,-32103,6567,-32103,6567,-32103, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 6217,-32172,6217,-32172,6217,-32172,6217,-32172, - 6041,-32206,6041,-32206,6041,-32206,6041,-32206, - 5865,-32238,5865,-32238,5865,-32238,5865,-32238, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5513,-32300,5513,-32300,5513,-32300,5513,-32300, - 5337,-32330,5337,-32330,5337,-32330,5337,-32330, - 5161,-32358,5161,-32358,5161,-32358,5161,-32358, - 4984,-32386,4984,-32386,4984,-32386,4984,-32386, - 4807,-32413,4807,-32413,4807,-32413,4807,-32413, - 4631,-32439,4631,-32439,4631,-32439,4631,-32439, - 4454,-32463,4454,-32463,4454,-32463,4454,-32463, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 4099,-32510,4099,-32510,4099,-32510,4099,-32510, - 3922,-32532,3922,-32532,3922,-32532,3922,-32532, - 3744,-32553,3744,-32553,3744,-32553,3744,-32553, - 3567,-32573,3567,-32573,3567,-32573,3567,-32573, - 3389,-32592,3389,-32592,3389,-32592,3389,-32592, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 3033,-32627,3033,-32627,3033,-32627,3033,-32627, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2677,-32658,2677,-32658,2677,-32658,2677,-32658, - 2499,-32672,2499,-32672,2499,-32672,2499,-32672, - 2321,-32685,2321,-32685,2321,-32685,2321,-32685, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1964,-32709,1964,-32709,1964,-32709,1964,-32709, - 1786,-32719,1786,-32719,1786,-32719,1786,-32719, - 1607,-32728,1607,-32728,1607,-32728,1607,-32728, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 1250,-32744,1250,-32744,1250,-32744,1250,-32744, - 1072,-32750,1072,-32750,1072,-32750,1072,-32750, - 893,-32755,893,-32755,893,-32755,893,-32755, - 714,-32760,714,-32760,714,-32760,714,-32760, - 536,-32763,536,-32763,536,-32763,536,-32763, - 357,-32766,357,-32766,357,-32766,357,-32766, - 178,-32767,178,-32767,178,-32767,178,-32767 - }; - -static int16_t twb1152[287*2*4] = {32765,-358,32765,-358,32765,-358,32765,-358, - 32759,-715,32759,-715,32759,-715,32759,-715, - 32749,-1073,32749,-1073,32749,-1073,32749,-1073, - 32735,-1430,32735,-1430,32735,-1430,32735,-1430, - 32718,-1787,32718,-1787,32718,-1787,32718,-1787, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32671,-2500,32671,-2500,32671,-2500,32671,-2500, - 32642,-2856,32642,-2856,32642,-2856,32642,-2856, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32572,-3568,32572,-3568,32572,-3568,32572,-3568, - 32531,-3923,32531,-3923,32531,-3923,32531,-3923, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32438,-4632,32438,-4632,32438,-4632,32438,-4632, - 32385,-4985,32385,-4985,32385,-4985,32385,-4985, - 32329,-5338,32329,-5338,32329,-5338,32329,-5338, - 32269,-5690,32269,-5690,32269,-5690,32269,-5690, - 32205,-6042,32205,-6042,32205,-6042,32205,-6042, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32065,-6743,32065,-6743,32065,-6743,32065,-6743, - 31990,-7093,31990,-7093,31990,-7093,31990,-7093, - 31911,-7441,31911,-7441,31911,-7441,31911,-7441, - 31827,-7789,31827,-7789,31827,-7789,31827,-7789, - 31741,-8135,31741,-8135,31741,-8135,31741,-8135, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31556,-8826,31556,-8826,31556,-8826,31556,-8826, - 31457,-9170,31457,-9170,31457,-9170,31457,-9170, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 31250,-9854,31250,-9854,31250,-9854,31250,-9854, - 31141,-10194,31141,-10194,31141,-10194,31141,-10194, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30911,-10871,30911,-10871,30911,-10871,30911,-10871, - 30790,-11207,30790,-11207,30790,-11207,30790,-11207, - 30666,-11543,30666,-11543,30666,-11543,30666,-11543, - 30539,-11877,30539,-11877,30539,-11877,30539,-11877, - 30407,-12209,30407,-12209,30407,-12209,30407,-12209, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30134,-12869,30134,-12869,30134,-12869,30134,-12869, - 29992,-13197,29992,-13197,29992,-13197,29992,-13197, - 29846,-13524,29846,-13524,29846,-13524,29846,-13524, - 29696,-13848,29696,-13848,29696,-13848,29696,-13848, - 29544,-14172,29544,-14172,29544,-14172,29544,-14172, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29227,-14813,29227,-14813,29227,-14813,29227,-14813, - 29064,-15131,29064,-15131,29064,-15131,29064,-15131, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28727,-15761,28727,-15761,28727,-15761,28727,-15761, - 28554,-16073,28554,-16073,28554,-16073,28554,-16073, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28196,-16693,28196,-16693,28196,-16693,28196,-16693, - 28012,-16999,28012,-16999,28012,-16999,28012,-16999, - 27825,-17304,27825,-17304,27825,-17304,27825,-17304, - 27635,-17606,27635,-17606,27635,-17606,27635,-17606, - 27441,-17907,27441,-17907,27441,-17907,27441,-17907, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 27044,-18501,27044,-18501,27044,-18501,27044,-18501, - 26841,-18795,26841,-18795,26841,-18795,26841,-18795, - 26634,-19087,26634,-19087,26634,-19087,26634,-19087, - 26424,-19376,26424,-19376,26424,-19376,26424,-19376, - 26211,-19663,26211,-19663,26211,-19663,26211,-19663, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25776,-20230,25776,-20230,25776,-20230,25776,-20230, - 25554,-20510,25554,-20510,25554,-20510,25554,-20510, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 25100,-21063,25100,-21063,25100,-21063,25100,-21063, - 24869,-21335,24869,-21335,24869,-21335,24869,-21335, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24398,-21873,24398,-21873,24398,-21873,24398,-21873, - 24158,-22138,24158,-22138,24158,-22138,24158,-22138, - 23915,-22400,23915,-22400,23915,-22400,23915,-22400, - 23669,-22659,23669,-22659,23669,-22659,23669,-22659, - 23421,-22916,23421,-22916,23421,-22916,23421,-22916, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22915,-23422,22915,-23422,22915,-23422,22915,-23422, - 22658,-23670,22658,-23670,22658,-23670,22658,-23670, - 22399,-23916,22399,-23916,22399,-23916,22399,-23916, - 22137,-24159,22137,-24159,22137,-24159,22137,-24159, - 21872,-24399,21872,-24399,21872,-24399,21872,-24399, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21334,-24870,21334,-24870,21334,-24870,21334,-24870, - 21062,-25101,21062,-25101,21062,-25101,21062,-25101, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 20509,-25555,20509,-25555,20509,-25555,20509,-25555, - 20229,-25777,20229,-25777,20229,-25777,20229,-25777, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19662,-26212,19662,-26212,19662,-26212,19662,-26212, - 19375,-26425,19375,-26425,19375,-26425,19375,-26425, - 19086,-26635,19086,-26635,19086,-26635,19086,-26635, - 18794,-26842,18794,-26842,18794,-26842,18794,-26842, - 18500,-27045,18500,-27045,18500,-27045,18500,-27045, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17906,-27442,17906,-27442,17906,-27442,17906,-27442, - 17605,-27636,17605,-27636,17605,-27636,17605,-27636, - 17303,-27826,17303,-27826,17303,-27826,17303,-27826, - 16998,-28013,16998,-28013,16998,-28013,16998,-28013, - 16692,-28197,16692,-28197,16692,-28197,16692,-28197, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16072,-28555,16072,-28555,16072,-28555,16072,-28555, - 15760,-28728,15760,-28728,15760,-28728,15760,-28728, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 15130,-29065,15130,-29065,15130,-29065,15130,-29065, - 14812,-29228,14812,-29228,14812,-29228,14812,-29228, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14171,-29545,14171,-29545,14171,-29545,14171,-29545, - 13847,-29697,13847,-29697,13847,-29697,13847,-29697, - 13523,-29847,13523,-29847,13523,-29847,13523,-29847, - 13196,-29993,13196,-29993,13196,-29993,13196,-29993, - 12868,-30135,12868,-30135,12868,-30135,12868,-30135, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12208,-30408,12208,-30408,12208,-30408,12208,-30408, - 11876,-30540,11876,-30540,11876,-30540,11876,-30540, - 11542,-30667,11542,-30667,11542,-30667,11542,-30667, - 11206,-30791,11206,-30791,11206,-30791,11206,-30791, - 10870,-30912,10870,-30912,10870,-30912,10870,-30912, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10193,-31142,10193,-31142,10193,-31142,10193,-31142, - 9853,-31251,9853,-31251,9853,-31251,9853,-31251, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 9169,-31458,9169,-31458,9169,-31458,9169,-31458, - 8825,-31557,8825,-31557,8825,-31557,8825,-31557, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8134,-31742,8134,-31742,8134,-31742,8134,-31742, - 7788,-31828,7788,-31828,7788,-31828,7788,-31828, - 7440,-31912,7440,-31912,7440,-31912,7440,-31912, - 7092,-31991,7092,-31991,7092,-31991,7092,-31991, - 6742,-32066,6742,-32066,6742,-32066,6742,-32066, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 6041,-32206,6041,-32206,6041,-32206,6041,-32206, - 5689,-32270,5689,-32270,5689,-32270,5689,-32270, - 5337,-32330,5337,-32330,5337,-32330,5337,-32330, - 4984,-32386,4984,-32386,4984,-32386,4984,-32386, - 4631,-32439,4631,-32439,4631,-32439,4631,-32439, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3922,-32532,3922,-32532,3922,-32532,3922,-32532, - 3567,-32573,3567,-32573,3567,-32573,3567,-32573, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 2855,-32643,2855,-32643,2855,-32643,2855,-32643, - 2499,-32672,2499,-32672,2499,-32672,2499,-32672, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1786,-32719,1786,-32719,1786,-32719,1786,-32719, - 1429,-32736,1429,-32736,1429,-32736,1429,-32736, - 1072,-32750,1072,-32750,1072,-32750,1072,-32750, - 714,-32760,714,-32760,714,-32760,714,-32760, - 357,-32766,357,-32766,357,-32766,357,-32766, - 0,-32767,0,-32767,0,-32767,0,-32767, - -358,-32766,-358,-32766,-358,-32766,-358,-32766, - -715,-32760,-715,-32760,-715,-32760,-715,-32760, - -1073,-32750,-1073,-32750,-1073,-32750,-1073,-32750, - -1430,-32736,-1430,-32736,-1430,-32736,-1430,-32736, - -1787,-32719,-1787,-32719,-1787,-32719,-1787,-32719, - -2144,-32697,-2144,-32697,-2144,-32697,-2144,-32697, - -2500,-32672,-2500,-32672,-2500,-32672,-2500,-32672, - -2856,-32643,-2856,-32643,-2856,-32643,-2856,-32643, - -3212,-32610,-3212,-32610,-3212,-32610,-3212,-32610, - -3568,-32573,-3568,-32573,-3568,-32573,-3568,-32573, - -3923,-32532,-3923,-32532,-3923,-32532,-3923,-32532, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -4632,-32439,-4632,-32439,-4632,-32439,-4632,-32439, - -4985,-32386,-4985,-32386,-4985,-32386,-4985,-32386, - -5338,-32330,-5338,-32330,-5338,-32330,-5338,-32330, - -5690,-32270,-5690,-32270,-5690,-32270,-5690,-32270, - -6042,-32206,-6042,-32206,-6042,-32206,-6042,-32206, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -6743,-32066,-6743,-32066,-6743,-32066,-6743,-32066, - -7093,-31991,-7093,-31991,-7093,-31991,-7093,-31991, - -7441,-31912,-7441,-31912,-7441,-31912,-7441,-31912, - -7789,-31828,-7789,-31828,-7789,-31828,-7789,-31828, - -8135,-31742,-8135,-31742,-8135,-31742,-8135,-31742, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8826,-31557,-8826,-31557,-8826,-31557,-8826,-31557, - -9170,-31458,-9170,-31458,-9170,-31458,-9170,-31458, - -9512,-31357,-9512,-31357,-9512,-31357,-9512,-31357, - -9854,-31251,-9854,-31251,-9854,-31251,-9854,-31251, - -10194,-31142,-10194,-31142,-10194,-31142,-10194,-31142, - -10533,-31029,-10533,-31029,-10533,-31029,-10533,-31029, - -10871,-30912,-10871,-30912,-10871,-30912,-10871,-30912, - -11207,-30791,-11207,-30791,-11207,-30791,-11207,-30791, - -11543,-30667,-11543,-30667,-11543,-30667,-11543,-30667, - -11877,-30540,-11877,-30540,-11877,-30540,-11877,-30540, - -12209,-30408,-12209,-30408,-12209,-30408,-12209,-30408, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -12869,-30135,-12869,-30135,-12869,-30135,-12869,-30135, - -13197,-29993,-13197,-29993,-13197,-29993,-13197,-29993, - -13524,-29847,-13524,-29847,-13524,-29847,-13524,-29847, - -13848,-29697,-13848,-29697,-13848,-29697,-13848,-29697, - -14172,-29545,-14172,-29545,-14172,-29545,-14172,-29545, - -14493,-29388,-14493,-29388,-14493,-29388,-14493,-29388, - -14813,-29228,-14813,-29228,-14813,-29228,-14813,-29228, - -15131,-29065,-15131,-29065,-15131,-29065,-15131,-29065, - -15447,-28898,-15447,-28898,-15447,-28898,-15447,-28898, - -15761,-28728,-15761,-28728,-15761,-28728,-15761,-28728, - -16073,-28555,-16073,-28555,-16073,-28555,-16073,-28555, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16693,-28197,-16693,-28197,-16693,-28197,-16693,-28197, - -16999,-28013,-16999,-28013,-16999,-28013,-16999,-28013, - -17304,-27826,-17304,-27826,-17304,-27826,-17304,-27826, - -17606,-27636,-17606,-27636,-17606,-27636,-17606,-27636, - -17907,-27442,-17907,-27442,-17907,-27442,-17907,-27442, - -18205,-27245,-18205,-27245,-18205,-27245,-18205,-27245, - -18501,-27045,-18501,-27045,-18501,-27045,-18501,-27045, - -18795,-26842,-18795,-26842,-18795,-26842,-18795,-26842, - -19087,-26635,-19087,-26635,-19087,-26635,-19087,-26635, - -19376,-26425,-19376,-26425,-19376,-26425,-19376,-26425, - -19663,-26212,-19663,-26212,-19663,-26212,-19663,-26212, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -20230,-25777,-20230,-25777,-20230,-25777,-20230,-25777, - -20510,-25555,-20510,-25555,-20510,-25555,-20510,-25555, - -20788,-25330,-20788,-25330,-20788,-25330,-20788,-25330, - -21063,-25101,-21063,-25101,-21063,-25101,-21063,-25101, - -21335,-24870,-21335,-24870,-21335,-24870,-21335,-24870, - -21605,-24636,-21605,-24636,-21605,-24636,-21605,-24636, - -21873,-24399,-21873,-24399,-21873,-24399,-21873,-24399, - -22138,-24159,-22138,-24159,-22138,-24159,-22138,-24159, - -22400,-23916,-22400,-23916,-22400,-23916,-22400,-23916, - -22659,-23670,-22659,-23670,-22659,-23670,-22659,-23670, - -22916,-23422,-22916,-23422,-22916,-23422,-22916,-23422, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23422,-22916,-23422,-22916,-23422,-22916,-23422,-22916, - -23670,-22659,-23670,-22659,-23670,-22659,-23670,-22659, - -23916,-22400,-23916,-22400,-23916,-22400,-23916,-22400, - -24159,-22138,-24159,-22138,-24159,-22138,-24159,-22138, - -24399,-21873,-24399,-21873,-24399,-21873,-24399,-21873, - -24636,-21605,-24636,-21605,-24636,-21605,-24636,-21605, - -24870,-21335,-24870,-21335,-24870,-21335,-24870,-21335, - -25101,-21063,-25101,-21063,-25101,-21063,-25101,-21063, - -25330,-20788,-25330,-20788,-25330,-20788,-25330,-20788, - -25555,-20510,-25555,-20510,-25555,-20510,-25555,-20510, - -25777,-20230,-25777,-20230,-25777,-20230,-25777,-20230, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26212,-19663,-26212,-19663,-26212,-19663,-26212,-19663, - -26425,-19376,-26425,-19376,-26425,-19376,-26425,-19376, - -26635,-19087,-26635,-19087,-26635,-19087,-26635,-19087, - -26842,-18795,-26842,-18795,-26842,-18795,-26842,-18795, - -27045,-18501,-27045,-18501,-27045,-18501,-27045,-18501, - -27245,-18205,-27245,-18205,-27245,-18205,-27245,-18205, - -27442,-17907,-27442,-17907,-27442,-17907,-27442,-17907, - -27636,-17606,-27636,-17606,-27636,-17606,-27636,-17606, - -27826,-17304,-27826,-17304,-27826,-17304,-27826,-17304, - -28013,-16999,-28013,-16999,-28013,-16999,-28013,-16999, - -28197,-16693,-28197,-16693,-28197,-16693,-28197,-16693, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28555,-16073,-28555,-16073,-28555,-16073,-28555,-16073, - -28728,-15761,-28728,-15761,-28728,-15761,-28728,-15761, - -28898,-15447,-28898,-15447,-28898,-15447,-28898,-15447, - -29065,-15131,-29065,-15131,-29065,-15131,-29065,-15131, - -29228,-14813,-29228,-14813,-29228,-14813,-29228,-14813, - -29388,-14493,-29388,-14493,-29388,-14493,-29388,-14493, - -29545,-14172,-29545,-14172,-29545,-14172,-29545,-14172, - -29697,-13848,-29697,-13848,-29697,-13848,-29697,-13848, - -29847,-13524,-29847,-13524,-29847,-13524,-29847,-13524, - -29993,-13197,-29993,-13197,-29993,-13197,-29993,-13197, - -30135,-12869,-30135,-12869,-30135,-12869,-30135,-12869, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30408,-12209,-30408,-12209,-30408,-12209,-30408,-12209, - -30540,-11877,-30540,-11877,-30540,-11877,-30540,-11877, - -30667,-11543,-30667,-11543,-30667,-11543,-30667,-11543, - -30791,-11207,-30791,-11207,-30791,-11207,-30791,-11207, - -30912,-10871,-30912,-10871,-30912,-10871,-30912,-10871, - -31029,-10533,-31029,-10533,-31029,-10533,-31029,-10533, - -31142,-10194,-31142,-10194,-31142,-10194,-31142,-10194, - -31251,-9854,-31251,-9854,-31251,-9854,-31251,-9854, - -31357,-9512,-31357,-9512,-31357,-9512,-31357,-9512, - -31458,-9170,-31458,-9170,-31458,-9170,-31458,-9170, - -31557,-8826,-31557,-8826,-31557,-8826,-31557,-8826, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31742,-8135,-31742,-8135,-31742,-8135,-31742,-8135, - -31828,-7789,-31828,-7789,-31828,-7789,-31828,-7789, - -31912,-7441,-31912,-7441,-31912,-7441,-31912,-7441, - -31991,-7093,-31991,-7093,-31991,-7093,-31991,-7093, - -32066,-6743,-32066,-6743,-32066,-6743,-32066,-6743, - -32138,-6393,-32138,-6393,-32138,-6393,-32138,-6393, - -32206,-6042,-32206,-6042,-32206,-6042,-32206,-6042, - -32270,-5690,-32270,-5690,-32270,-5690,-32270,-5690, - -32330,-5338,-32330,-5338,-32330,-5338,-32330,-5338, - -32386,-4985,-32386,-4985,-32386,-4985,-32386,-4985, - -32439,-4632,-32439,-4632,-32439,-4632,-32439,-4632, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32532,-3923,-32532,-3923,-32532,-3923,-32532,-3923, - -32573,-3568,-32573,-3568,-32573,-3568,-32573,-3568, - -32610,-3212,-32610,-3212,-32610,-3212,-32610,-3212, - -32643,-2856,-32643,-2856,-32643,-2856,-32643,-2856, - -32672,-2500,-32672,-2500,-32672,-2500,-32672,-2500, - -32697,-2144,-32697,-2144,-32697,-2144,-32697,-2144, - -32719,-1787,-32719,-1787,-32719,-1787,-32719,-1787, - -32736,-1430,-32736,-1430,-32736,-1430,-32736,-1430, - -32750,-1073,-32750,-1073,-32750,-1073,-32750,-1073, - -32760,-715,-32760,-715,-32760,-715,-32760,-715, - -32766,-358,-32766,-358,-32766,-358,-32766,-358 - }; - -static int16_t twc1152[287*2*4] = {32762,-537,32762,-537,32762,-537,32762,-537, - 32749,-1073,32749,-1073,32749,-1073,32749,-1073, - 32727,-1608,32727,-1608,32727,-1608,32727,-1608, - 32696,-2144,32696,-2144,32696,-2144,32696,-2144, - 32657,-2678,32657,-2678,32657,-2678,32657,-2678, - 32609,-3212,32609,-3212,32609,-3212,32609,-3212, - 32552,-3745,32552,-3745,32552,-3745,32552,-3745, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32412,-4808,32412,-4808,32412,-4808,32412,-4808, - 32329,-5338,32329,-5338,32329,-5338,32329,-5338, - 32237,-5866,32237,-5866,32237,-5866,32237,-5866, - 32137,-6393,32137,-6393,32137,-6393,32137,-6393, - 32028,-6918,32028,-6918,32028,-6918,32028,-6918, - 31911,-7441,31911,-7441,31911,-7441,31911,-7441, - 31785,-7962,31785,-7962,31785,-7962,31785,-7962, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31507,-8998,31507,-8998,31507,-8998,31507,-8998, - 31356,-9512,31356,-9512,31356,-9512,31356,-9512, - 31196,-10024,31196,-10024,31196,-10024,31196,-10024, - 31028,-10533,31028,-10533,31028,-10533,31028,-10533, - 30851,-11039,30851,-11039,30851,-11039,30851,-11039, - 30666,-11543,30666,-11543,30666,-11543,30666,-11543, - 30473,-12043,30473,-12043,30473,-12043,30473,-12043, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30063,-13034,30063,-13034,30063,-13034,30063,-13034, - 29846,-13524,29846,-13524,29846,-13524,29846,-13524, - 29621,-14010,29621,-14010,29621,-14010,29621,-14010, - 29387,-14493,29387,-14493,29387,-14493,29387,-14493, - 29146,-14972,29146,-14972,29146,-14972,29146,-14972, - 28897,-15447,28897,-15447,28897,-15447,28897,-15447, - 28641,-15918,28641,-15918,28641,-15918,28641,-15918, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28105,-16846,28105,-16846,28105,-16846,28105,-16846, - 27825,-17304,27825,-17304,27825,-17304,27825,-17304, - 27538,-17757,27538,-17757,27538,-17757,27538,-17757, - 27244,-18205,27244,-18205,27244,-18205,27244,-18205, - 26943,-18648,26943,-18648,26943,-18648,26943,-18648, - 26634,-19087,26634,-19087,26634,-19087,26634,-19087, - 26318,-19520,26318,-19520,26318,-19520,26318,-19520, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25665,-20370,25665,-20370,25665,-20370,25665,-20370, - 25329,-20788,25329,-20788,25329,-20788,25329,-20788, - 24985,-21199,24985,-21199,24985,-21199,24985,-21199, - 24635,-21605,24635,-21605,24635,-21605,24635,-21605, - 24278,-22005,24278,-22005,24278,-22005,24278,-22005, - 23915,-22400,23915,-22400,23915,-22400,23915,-22400, - 23545,-22788,23545,-22788,23545,-22788,23545,-22788, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22787,-23546,22787,-23546,22787,-23546,22787,-23546, - 22399,-23916,22399,-23916,22399,-23916,22399,-23916, - 22004,-24279,22004,-24279,22004,-24279,22004,-24279, - 21604,-24636,21604,-24636,21604,-24636,21604,-24636, - 21198,-24986,21198,-24986,21198,-24986,21198,-24986, - 20787,-25330,20787,-25330,20787,-25330,20787,-25330, - 20369,-25666,20369,-25666,20369,-25666,20369,-25666, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19519,-26319,19519,-26319,19519,-26319,19519,-26319, - 19086,-26635,19086,-26635,19086,-26635,19086,-26635, - 18647,-26944,18647,-26944,18647,-26944,18647,-26944, - 18204,-27245,18204,-27245,18204,-27245,18204,-27245, - 17756,-27539,17756,-27539,17756,-27539,17756,-27539, - 17303,-27826,17303,-27826,17303,-27826,17303,-27826, - 16845,-28106,16845,-28106,16845,-28106,16845,-28106, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 15917,-28642,15917,-28642,15917,-28642,15917,-28642, - 15446,-28898,15446,-28898,15446,-28898,15446,-28898, - 14971,-29147,14971,-29147,14971,-29147,14971,-29147, - 14492,-29388,14492,-29388,14492,-29388,14492,-29388, - 14009,-29622,14009,-29622,14009,-29622,14009,-29622, - 13523,-29847,13523,-29847,13523,-29847,13523,-29847, - 13033,-30064,13033,-30064,13033,-30064,13033,-30064, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12042,-30474,12042,-30474,12042,-30474,12042,-30474, - 11542,-30667,11542,-30667,11542,-30667,11542,-30667, - 11038,-30852,11038,-30852,11038,-30852,11038,-30852, - 10532,-31029,10532,-31029,10532,-31029,10532,-31029, - 10023,-31197,10023,-31197,10023,-31197,10023,-31197, - 9511,-31357,9511,-31357,9511,-31357,9511,-31357, - 8997,-31508,8997,-31508,8997,-31508,8997,-31508, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 7961,-31786,7961,-31786,7961,-31786,7961,-31786, - 7440,-31912,7440,-31912,7440,-31912,7440,-31912, - 6917,-32029,6917,-32029,6917,-32029,6917,-32029, - 6392,-32138,6392,-32138,6392,-32138,6392,-32138, - 5865,-32238,5865,-32238,5865,-32238,5865,-32238, - 5337,-32330,5337,-32330,5337,-32330,5337,-32330, - 4807,-32413,4807,-32413,4807,-32413,4807,-32413, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 3744,-32553,3744,-32553,3744,-32553,3744,-32553, - 3211,-32610,3211,-32610,3211,-32610,3211,-32610, - 2677,-32658,2677,-32658,2677,-32658,2677,-32658, - 2143,-32697,2143,-32697,2143,-32697,2143,-32697, - 1607,-32728,1607,-32728,1607,-32728,1607,-32728, - 1072,-32750,1072,-32750,1072,-32750,1072,-32750, - 536,-32763,536,-32763,536,-32763,536,-32763, - 0,-32767,0,-32767,0,-32767,0,-32767, - -537,-32763,-537,-32763,-537,-32763,-537,-32763, - -1073,-32750,-1073,-32750,-1073,-32750,-1073,-32750, - -1608,-32728,-1608,-32728,-1608,-32728,-1608,-32728, - -2144,-32697,-2144,-32697,-2144,-32697,-2144,-32697, - -2678,-32658,-2678,-32658,-2678,-32658,-2678,-32658, - -3212,-32610,-3212,-32610,-3212,-32610,-3212,-32610, - -3745,-32553,-3745,-32553,-3745,-32553,-3745,-32553, - -4277,-32487,-4277,-32487,-4277,-32487,-4277,-32487, - -4808,-32413,-4808,-32413,-4808,-32413,-4808,-32413, - -5338,-32330,-5338,-32330,-5338,-32330,-5338,-32330, - -5866,-32238,-5866,-32238,-5866,-32238,-5866,-32238, - -6393,-32138,-6393,-32138,-6393,-32138,-6393,-32138, - -6918,-32029,-6918,-32029,-6918,-32029,-6918,-32029, - -7441,-31912,-7441,-31912,-7441,-31912,-7441,-31912, - -7962,-31786,-7962,-31786,-7962,-31786,-7962,-31786, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8998,-31508,-8998,-31508,-8998,-31508,-8998,-31508, - -9512,-31357,-9512,-31357,-9512,-31357,-9512,-31357, - -10024,-31197,-10024,-31197,-10024,-31197,-10024,-31197, - -10533,-31029,-10533,-31029,-10533,-31029,-10533,-31029, - -11039,-30852,-11039,-30852,-11039,-30852,-11039,-30852, - -11543,-30667,-11543,-30667,-11543,-30667,-11543,-30667, - -12043,-30474,-12043,-30474,-12043,-30474,-12043,-30474, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13034,-30064,-13034,-30064,-13034,-30064,-13034,-30064, - -13524,-29847,-13524,-29847,-13524,-29847,-13524,-29847, - -14010,-29622,-14010,-29622,-14010,-29622,-14010,-29622, - -14493,-29388,-14493,-29388,-14493,-29388,-14493,-29388, - -14972,-29147,-14972,-29147,-14972,-29147,-14972,-29147, - -15447,-28898,-15447,-28898,-15447,-28898,-15447,-28898, - -15918,-28642,-15918,-28642,-15918,-28642,-15918,-28642, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16846,-28106,-16846,-28106,-16846,-28106,-16846,-28106, - -17304,-27826,-17304,-27826,-17304,-27826,-17304,-27826, - -17757,-27539,-17757,-27539,-17757,-27539,-17757,-27539, - -18205,-27245,-18205,-27245,-18205,-27245,-18205,-27245, - -18648,-26944,-18648,-26944,-18648,-26944,-18648,-26944, - -19087,-26635,-19087,-26635,-19087,-26635,-19087,-26635, - -19520,-26319,-19520,-26319,-19520,-26319,-19520,-26319, - -19948,-25996,-19948,-25996,-19948,-25996,-19948,-25996, - -20370,-25666,-20370,-25666,-20370,-25666,-20370,-25666, - -20788,-25330,-20788,-25330,-20788,-25330,-20788,-25330, - -21199,-24986,-21199,-24986,-21199,-24986,-21199,-24986, - -21605,-24636,-21605,-24636,-21605,-24636,-21605,-24636, - -22005,-24279,-22005,-24279,-22005,-24279,-22005,-24279, - -22400,-23916,-22400,-23916,-22400,-23916,-22400,-23916, - -22788,-23546,-22788,-23546,-22788,-23546,-22788,-23546, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23546,-22788,-23546,-22788,-23546,-22788,-23546,-22788, - -23916,-22400,-23916,-22400,-23916,-22400,-23916,-22400, - -24279,-22005,-24279,-22005,-24279,-22005,-24279,-22005, - -24636,-21605,-24636,-21605,-24636,-21605,-24636,-21605, - -24986,-21199,-24986,-21199,-24986,-21199,-24986,-21199, - -25330,-20788,-25330,-20788,-25330,-20788,-25330,-20788, - -25666,-20370,-25666,-20370,-25666,-20370,-25666,-20370, - -25996,-19948,-25996,-19948,-25996,-19948,-25996,-19948, - -26319,-19520,-26319,-19520,-26319,-19520,-26319,-19520, - -26635,-19087,-26635,-19087,-26635,-19087,-26635,-19087, - -26944,-18648,-26944,-18648,-26944,-18648,-26944,-18648, - -27245,-18205,-27245,-18205,-27245,-18205,-27245,-18205, - -27539,-17757,-27539,-17757,-27539,-17757,-27539,-17757, - -27826,-17304,-27826,-17304,-27826,-17304,-27826,-17304, - -28106,-16846,-28106,-16846,-28106,-16846,-28106,-16846, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28642,-15918,-28642,-15918,-28642,-15918,-28642,-15918, - -28898,-15447,-28898,-15447,-28898,-15447,-28898,-15447, - -29147,-14972,-29147,-14972,-29147,-14972,-29147,-14972, - -29388,-14493,-29388,-14493,-29388,-14493,-29388,-14493, - -29622,-14010,-29622,-14010,-29622,-14010,-29622,-14010, - -29847,-13524,-29847,-13524,-29847,-13524,-29847,-13524, - -30064,-13034,-30064,-13034,-30064,-13034,-30064,-13034, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30474,-12043,-30474,-12043,-30474,-12043,-30474,-12043, - -30667,-11543,-30667,-11543,-30667,-11543,-30667,-11543, - -30852,-11039,-30852,-11039,-30852,-11039,-30852,-11039, - -31029,-10533,-31029,-10533,-31029,-10533,-31029,-10533, - -31197,-10024,-31197,-10024,-31197,-10024,-31197,-10024, - -31357,-9512,-31357,-9512,-31357,-9512,-31357,-9512, - -31508,-8998,-31508,-8998,-31508,-8998,-31508,-8998, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31786,-7962,-31786,-7962,-31786,-7962,-31786,-7962, - -31912,-7441,-31912,-7441,-31912,-7441,-31912,-7441, - -32029,-6918,-32029,-6918,-32029,-6918,-32029,-6918, - -32138,-6393,-32138,-6393,-32138,-6393,-32138,-6393, - -32238,-5866,-32238,-5866,-32238,-5866,-32238,-5866, - -32330,-5338,-32330,-5338,-32330,-5338,-32330,-5338, - -32413,-4808,-32413,-4808,-32413,-4808,-32413,-4808, - -32487,-4277,-32487,-4277,-32487,-4277,-32487,-4277, - -32553,-3745,-32553,-3745,-32553,-3745,-32553,-3745, - -32610,-3212,-32610,-3212,-32610,-3212,-32610,-3212, - -32658,-2678,-32658,-2678,-32658,-2678,-32658,-2678, - -32697,-2144,-32697,-2144,-32697,-2144,-32697,-2144, - -32728,-1608,-32728,-1608,-32728,-1608,-32728,-1608, - -32750,-1073,-32750,-1073,-32750,-1073,-32750,-1073, - -32763,-537,-32763,-537,-32763,-537,-32763,-537, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32763,536,-32763,536,-32763,536,-32763,536, - -32750,1072,-32750,1072,-32750,1072,-32750,1072, - -32728,1607,-32728,1607,-32728,1607,-32728,1607, - -32697,2143,-32697,2143,-32697,2143,-32697,2143, - -32658,2677,-32658,2677,-32658,2677,-32658,2677, - -32610,3211,-32610,3211,-32610,3211,-32610,3211, - -32553,3744,-32553,3744,-32553,3744,-32553,3744, - -32487,4276,-32487,4276,-32487,4276,-32487,4276, - -32413,4807,-32413,4807,-32413,4807,-32413,4807, - -32330,5337,-32330,5337,-32330,5337,-32330,5337, - -32238,5865,-32238,5865,-32238,5865,-32238,5865, - -32138,6392,-32138,6392,-32138,6392,-32138,6392, - -32029,6917,-32029,6917,-32029,6917,-32029,6917, - -31912,7440,-31912,7440,-31912,7440,-31912,7440, - -31786,7961,-31786,7961,-31786,7961,-31786,7961, - -31651,8480,-31651,8480,-31651,8480,-31651,8480, - -31508,8997,-31508,8997,-31508,8997,-31508,8997, - -31357,9511,-31357,9511,-31357,9511,-31357,9511, - -31197,10023,-31197,10023,-31197,10023,-31197,10023, - -31029,10532,-31029,10532,-31029,10532,-31029,10532, - -30852,11038,-30852,11038,-30852,11038,-30852,11038, - -30667,11542,-30667,11542,-30667,11542,-30667,11542, - -30474,12042,-30474,12042,-30474,12042,-30474,12042, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -30064,13033,-30064,13033,-30064,13033,-30064,13033, - -29847,13523,-29847,13523,-29847,13523,-29847,13523, - -29622,14009,-29622,14009,-29622,14009,-29622,14009, - -29388,14492,-29388,14492,-29388,14492,-29388,14492, - -29147,14971,-29147,14971,-29147,14971,-29147,14971, - -28898,15446,-28898,15446,-28898,15446,-28898,15446, - -28642,15917,-28642,15917,-28642,15917,-28642,15917, - -28378,16383,-28378,16383,-28378,16383,-28378,16383, - -28106,16845,-28106,16845,-28106,16845,-28106,16845, - -27826,17303,-27826,17303,-27826,17303,-27826,17303, - -27539,17756,-27539,17756,-27539,17756,-27539,17756, - -27245,18204,-27245,18204,-27245,18204,-27245,18204, - -26944,18647,-26944,18647,-26944,18647,-26944,18647, - -26635,19086,-26635,19086,-26635,19086,-26635,19086, - -26319,19519,-26319,19519,-26319,19519,-26319,19519, - -25996,19947,-25996,19947,-25996,19947,-25996,19947, - -25666,20369,-25666,20369,-25666,20369,-25666,20369, - -25330,20787,-25330,20787,-25330,20787,-25330,20787, - -24986,21198,-24986,21198,-24986,21198,-24986,21198, - -24636,21604,-24636,21604,-24636,21604,-24636,21604, - -24279,22004,-24279,22004,-24279,22004,-24279,22004, - -23916,22399,-23916,22399,-23916,22399,-23916,22399, - -23546,22787,-23546,22787,-23546,22787,-23546,22787, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22788,23545,-22788,23545,-22788,23545,-22788,23545, - -22400,23915,-22400,23915,-22400,23915,-22400,23915, - -22005,24278,-22005,24278,-22005,24278,-22005,24278, - -21605,24635,-21605,24635,-21605,24635,-21605,24635, - -21199,24985,-21199,24985,-21199,24985,-21199,24985, - -20788,25329,-20788,25329,-20788,25329,-20788,25329, - -20370,25665,-20370,25665,-20370,25665,-20370,25665, - -19948,25995,-19948,25995,-19948,25995,-19948,25995, - -19520,26318,-19520,26318,-19520,26318,-19520,26318, - -19087,26634,-19087,26634,-19087,26634,-19087,26634, - -18648,26943,-18648,26943,-18648,26943,-18648,26943, - -18205,27244,-18205,27244,-18205,27244,-18205,27244, - -17757,27538,-17757,27538,-17757,27538,-17757,27538, - -17304,27825,-17304,27825,-17304,27825,-17304,27825, - -16846,28105,-16846,28105,-16846,28105,-16846,28105, - -16384,28377,-16384,28377,-16384,28377,-16384,28377, - -15918,28641,-15918,28641,-15918,28641,-15918,28641, - -15447,28897,-15447,28897,-15447,28897,-15447,28897, - -14972,29146,-14972,29146,-14972,29146,-14972,29146, - -14493,29387,-14493,29387,-14493,29387,-14493,29387, - -14010,29621,-14010,29621,-14010,29621,-14010,29621, - -13524,29846,-13524,29846,-13524,29846,-13524,29846, - -13034,30063,-13034,30063,-13034,30063,-13034,30063, - -12540,30272,-12540,30272,-12540,30272,-12540,30272, - -12043,30473,-12043,30473,-12043,30473,-12043,30473, - -11543,30666,-11543,30666,-11543,30666,-11543,30666, - -11039,30851,-11039,30851,-11039,30851,-11039,30851, - -10533,31028,-10533,31028,-10533,31028,-10533,31028, - -10024,31196,-10024,31196,-10024,31196,-10024,31196, - -9512,31356,-9512,31356,-9512,31356,-9512,31356, - -8998,31507,-8998,31507,-8998,31507,-8998,31507, - -8481,31650,-8481,31650,-8481,31650,-8481,31650, - -7962,31785,-7962,31785,-7962,31785,-7962,31785, - -7441,31911,-7441,31911,-7441,31911,-7441,31911, - -6918,32028,-6918,32028,-6918,32028,-6918,32028, - -6393,32137,-6393,32137,-6393,32137,-6393,32137, - -5866,32237,-5866,32237,-5866,32237,-5866,32237, - -5338,32329,-5338,32329,-5338,32329,-5338,32329, - -4808,32412,-4808,32412,-4808,32412,-4808,32412, - -4277,32486,-4277,32486,-4277,32486,-4277,32486, - -3745,32552,-3745,32552,-3745,32552,-3745,32552, - -3212,32609,-3212,32609,-3212,32609,-3212,32609, - -2678,32657,-2678,32657,-2678,32657,-2678,32657, - -2144,32696,-2144,32696,-2144,32696,-2144,32696, - -1608,32727,-1608,32727,-1608,32727,-1608,32727, - -1073,32749,-1073,32749,-1073,32749,-1073,32749, - -537,32762,-537,32762,-537,32762,-537,32762 - }; +static int16_t twa1152[287*2*4]; +static int16_t twb1152[287*2*4]; +static int16_t twc1152[287*2*4]; void dft1152(int16_t *x,int16_t *y,unsigned char scale_flag) // 288 x 4 { @@ -16854,909 +8442,9 @@ void dft1152(int16_t *x,int16_t *y,unsigned char scale_flag) // 288 x 4 _m_empty(); }; -int16_t twa1200[4784] = { 32766,-172,32766,-172,32766,-172,32766,-172, - 32765,-344,32765,-344,32765,-344,32765,-344, - 32762,-515,32762,-515,32762,-515,32762,-515, - 32759,-687,32759,-687,32759,-687,32759,-687, - 32755,-858,32755,-858,32755,-858,32755,-858, - 32750,-1030,32750,-1030,32750,-1030,32750,-1030, - 32744,-1201,32744,-1201,32744,-1201,32744,-1201, - 32738,-1373,32738,-1373,32738,-1373,32738,-1373, - 32730,-1544,32730,-1544,32730,-1544,32730,-1544, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32712,-1887,32712,-1887,32712,-1887,32712,-1887, - 32702,-2058,32702,-2058,32702,-2058,32702,-2058, - 32691,-2229,32691,-2229,32691,-2229,32691,-2229, - 32679,-2400,32679,-2400,32679,-2400,32679,-2400, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32652,-2742,32652,-2742,32652,-2742,32652,-2742, - 32637,-2913,32637,-2913,32637,-2913,32637,-2913, - 32621,-3084,32621,-3084,32621,-3084,32621,-3084, - 32604,-3255,32604,-3255,32604,-3255,32604,-3255, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32569,-3596,32569,-3596,32569,-3596,32569,-3596, - 32549,-3767,32549,-3767,32549,-3767,32549,-3767, - 32529,-3937,32529,-3937,32529,-3937,32529,-3937, - 32508,-4107,32508,-4107,32508,-4107,32508,-4107, - 32486,-4277,32486,-4277,32486,-4277,32486,-4277, - 32463,-4447,32463,-4447,32463,-4447,32463,-4447, - 32440,-4617,32440,-4617,32440,-4617,32440,-4617, - 32415,-4787,32415,-4787,32415,-4787,32415,-4787, - 32389,-4957,32389,-4957,32389,-4957,32389,-4957, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32336,-5296,32336,-5296,32336,-5296,32336,-5296, - 32308,-5465,32308,-5465,32308,-5465,32308,-5465, - 32279,-5634,32279,-5634,32279,-5634,32279,-5634, - 32249,-5803,32249,-5803,32249,-5803,32249,-5803, - 32218,-5972,32218,-5972,32218,-5972,32218,-5972, - 32186,-6140,32186,-6140,32186,-6140,32186,-6140, - 32154,-6309,32154,-6309,32154,-6309,32154,-6309, - 32120,-6477,32120,-6477,32120,-6477,32120,-6477, - 32086,-6645,32086,-6645,32086,-6645,32086,-6645, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 32014,-6981,32014,-6981,32014,-6981,32014,-6981, - 31977,-7148,31977,-7148,31977,-7148,31977,-7148, - 31940,-7316,31940,-7316,31940,-7316,31940,-7316, - 31901,-7483,31901,-7483,31901,-7483,31901,-7483, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31821,-7817,31821,-7817,31821,-7817,31821,-7817, - 31779,-7983,31779,-7983,31779,-7983,31779,-7983, - 31737,-8149,31737,-8149,31737,-8149,31737,-8149, - 31694,-8315,31694,-8315,31694,-8315,31694,-8315, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31605,-8647,31605,-8647,31605,-8647,31605,-8647, - 31559,-8812,31559,-8812,31559,-8812,31559,-8812, - 31513,-8977,31513,-8977,31513,-8977,31513,-8977, - 31465,-9142,31465,-9142,31465,-9142,31465,-9142, - 31417,-9307,31417,-9307,31417,-9307,31417,-9307, - 31368,-9471,31368,-9471,31368,-9471,31368,-9471, - 31318,-9635,31318,-9635,31318,-9635,31318,-9635, - 31267,-9799,31267,-9799,31267,-9799,31267,-9799, - 31215,-9963,31215,-9963,31215,-9963,31215,-9963, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31109,-10289,31109,-10289,31109,-10289,31109,-10289, - 31055,-10452,31055,-10452,31055,-10452,31055,-10452, - 31000,-10614,31000,-10614,31000,-10614,31000,-10614, - 30944,-10776,30944,-10776,30944,-10776,30944,-10776, - 30887,-10938,30887,-10938,30887,-10938,30887,-10938, - 30829,-11100,30829,-11100,30829,-11100,30829,-11100, - 30771,-11261,30771,-11261,30771,-11261,30771,-11261, - 30711,-11422,30711,-11422,30711,-11422,30711,-11422, - 30651,-11583,30651,-11583,30651,-11583,30651,-11583, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30528,-11903,30528,-11903,30528,-11903,30528,-11903, - 30465,-12063,30465,-12063,30465,-12063,30465,-12063, - 30402,-12222,30402,-12222,30402,-12222,30402,-12222, - 30338,-12381,30338,-12381,30338,-12381,30338,-12381, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30206,-12698,30206,-12698,30206,-12698,30206,-12698, - 30139,-12856,30139,-12856,30139,-12856,30139,-12856, - 30072,-13014,30072,-13014,30072,-13014,30072,-13014, - 30003,-13171,30003,-13171,30003,-13171,30003,-13171, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29863,-13485,29863,-13485,29863,-13485,29863,-13485, - 29792,-13641,29792,-13641,29792,-13641,29792,-13641, - 29721,-13797,29721,-13797,29721,-13797,29721,-13797, - 29648,-13952,29648,-13952,29648,-13952,29648,-13952, - 29575,-14107,29575,-14107,29575,-14107,29575,-14107, - 29500,-14262,29500,-14262,29500,-14262,29500,-14262, - 29425,-14416,29425,-14416,29425,-14416,29425,-14416, - 29349,-14570,29349,-14570,29349,-14570,29349,-14570, - 29273,-14723,29273,-14723,29273,-14723,29273,-14723, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 29117,-15029,29117,-15029,29117,-15029,29117,-15029, - 29038,-15181,29038,-15181,29038,-15181,29038,-15181, - 28958,-15333,28958,-15333,28958,-15333,28958,-15333, - 28877,-15485,28877,-15485,28877,-15485,28877,-15485, - 28796,-15636,28796,-15636,28796,-15636,28796,-15636, - 28713,-15786,28713,-15786,28713,-15786,28713,-15786, - 28630,-15936,28630,-15936,28630,-15936,28630,-15936, - 28547,-16086,28547,-16086,28547,-16086,28547,-16086, - 28462,-16235,28462,-16235,28462,-16235,28462,-16235, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28290,-16532,28290,-16532,28290,-16532,28290,-16532, - 28203,-16680,28203,-16680,28203,-16680,28203,-16680, - 28116,-16828,28116,-16828,28116,-16828,28116,-16828, - 28027,-16975,28027,-16975,28027,-16975,28027,-16975, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27848,-17267,27848,-17267,27848,-17267,27848,-17267, - 27757,-17413,27757,-17413,27757,-17413,27757,-17413, - 27666,-17558,27666,-17558,27666,-17558,27666,-17558, - 27573,-17703,27573,-17703,27573,-17703,27573,-17703, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27386,-17990,27386,-17990,27386,-17990,27386,-17990, - 27292,-18133,27292,-18133,27292,-18133,27292,-18133, - 27197,-18276,27197,-18276,27197,-18276,27197,-18276, - 27100,-18418,27100,-18418,27100,-18418,27100,-18418, - 27004,-18560,27004,-18560,27004,-18560,27004,-18560, - 26906,-18701,26906,-18701,26906,-18701,26906,-18701, - 26808,-18842,26808,-18842,26808,-18842,26808,-18842, - 26709,-18982,26709,-18982,26709,-18982,26709,-18982, - 26609,-19121,26609,-19121,26609,-19121,26609,-19121, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26407,-19399,26407,-19399,26407,-19399,26407,-19399, - 26305,-19537,26305,-19537,26305,-19537,26305,-19537, - 26203,-19674,26203,-19674,26203,-19674,26203,-19674, - 26099,-19811,26099,-19811,26099,-19811,26099,-19811, - 25995,-19948,25995,-19948,25995,-19948,25995,-19948, - 25891,-20084,25891,-20084,25891,-20084,25891,-20084, - 25785,-20219,25785,-20219,25785,-20219,25785,-20219, - 25679,-20354,25679,-20354,25679,-20354,25679,-20354, - 25572,-20488,25572,-20488,25572,-20488,25572,-20488, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25356,-20754,25356,-20754,25356,-20754,25356,-20754, - 25247,-20887,25247,-20887,25247,-20887,25247,-20887, - 25137,-21019,25137,-21019,25137,-21019,25137,-21019, - 25027,-21150,25027,-21150,25027,-21150,25027,-21150, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24804,-21411,24804,-21411,24804,-21411,24804,-21411, - 24692,-21541,24692,-21541,24692,-21541,24692,-21541, - 24578,-21670,24578,-21670,24578,-21670,24578,-21670, - 24465,-21798,24465,-21798,24465,-21798,24465,-21798, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24235,-22053,24235,-22053,24235,-22053,24235,-22053, - 24119,-22180,24119,-22180,24119,-22180,24119,-22180, - 24003,-22306,24003,-22306,24003,-22306,24003,-22306, - 23886,-22431,23886,-22431,23886,-22431,23886,-22431, - 23768,-22556,23768,-22556,23768,-22556,23768,-22556, - 23649,-22680,23649,-22680,23649,-22680,23649,-22680, - 23530,-22803,23530,-22803,23530,-22803,23530,-22803, - 23411,-22926,23411,-22926,23411,-22926,23411,-22926, - 23290,-23049,23290,-23049,23290,-23049,23290,-23049, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 23048,-23291,23048,-23291,23048,-23291,23048,-23291, - 22925,-23412,22925,-23412,22925,-23412,22925,-23412, - 22802,-23531,22802,-23531,22802,-23531,22802,-23531, - 22679,-23650,22679,-23650,22679,-23650,22679,-23650, - 22555,-23769,22555,-23769,22555,-23769,22555,-23769, - 22430,-23887,22430,-23887,22430,-23887,22430,-23887, - 22305,-24004,22305,-24004,22305,-24004,22305,-24004, - 22179,-24120,22179,-24120,22179,-24120,22179,-24120, - 22052,-24236,22052,-24236,22052,-24236,22052,-24236, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21797,-24466,21797,-24466,21797,-24466,21797,-24466, - 21669,-24579,21669,-24579,21669,-24579,21669,-24579, - 21540,-24693,21540,-24693,21540,-24693,21540,-24693, - 21410,-24805,21410,-24805,21410,-24805,21410,-24805, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 21149,-25028,21149,-25028,21149,-25028,21149,-25028, - 21018,-25138,21018,-25138,21018,-25138,21018,-25138, - 20886,-25248,20886,-25248,20886,-25248,20886,-25248, - 20753,-25357,20753,-25357,20753,-25357,20753,-25357, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20487,-25573,20487,-25573,20487,-25573,20487,-25573, - 20353,-25680,20353,-25680,20353,-25680,20353,-25680, - 20218,-25786,20218,-25786,20218,-25786,20218,-25786, - 20083,-25892,20083,-25892,20083,-25892,20083,-25892, - 19947,-25996,19947,-25996,19947,-25996,19947,-25996, - 19810,-26100,19810,-26100,19810,-26100,19810,-26100, - 19673,-26204,19673,-26204,19673,-26204,19673,-26204, - 19536,-26306,19536,-26306,19536,-26306,19536,-26306, - 19398,-26408,19398,-26408,19398,-26408,19398,-26408, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 19120,-26610,19120,-26610,19120,-26610,19120,-26610, - 18981,-26710,18981,-26710,18981,-26710,18981,-26710, - 18841,-26809,18841,-26809,18841,-26809,18841,-26809, - 18700,-26907,18700,-26907,18700,-26907,18700,-26907, - 18559,-27005,18559,-27005,18559,-27005,18559,-27005, - 18417,-27101,18417,-27101,18417,-27101,18417,-27101, - 18275,-27198,18275,-27198,18275,-27198,18275,-27198, - 18132,-27293,18132,-27293,18132,-27293,18132,-27293, - 17989,-27387,17989,-27387,17989,-27387,17989,-27387, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17702,-27574,17702,-27574,17702,-27574,17702,-27574, - 17557,-27667,17557,-27667,17557,-27667,17557,-27667, - 17412,-27758,17412,-27758,17412,-27758,17412,-27758, - 17266,-27849,17266,-27849,17266,-27849,17266,-27849, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16974,-28028,16974,-28028,16974,-28028,16974,-28028, - 16827,-28117,16827,-28117,16827,-28117,16827,-28117, - 16679,-28204,16679,-28204,16679,-28204,16679,-28204, - 16531,-28291,16531,-28291,16531,-28291,16531,-28291, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16234,-28463,16234,-28463,16234,-28463,16234,-28463, - 16085,-28548,16085,-28548,16085,-28548,16085,-28548, - 15935,-28631,15935,-28631,15935,-28631,15935,-28631, - 15785,-28714,15785,-28714,15785,-28714,15785,-28714, - 15635,-28797,15635,-28797,15635,-28797,15635,-28797, - 15484,-28878,15484,-28878,15484,-28878,15484,-28878, - 15332,-28959,15332,-28959,15332,-28959,15332,-28959, - 15180,-29039,15180,-29039,15180,-29039,15180,-29039, - 15028,-29118,15028,-29118,15028,-29118,15028,-29118, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14722,-29274,14722,-29274,14722,-29274,14722,-29274, - 14569,-29350,14569,-29350,14569,-29350,14569,-29350, - 14415,-29426,14415,-29426,14415,-29426,14415,-29426, - 14261,-29501,14261,-29501,14261,-29501,14261,-29501, - 14106,-29576,14106,-29576,14106,-29576,14106,-29576, - 13951,-29649,13951,-29649,13951,-29649,13951,-29649, - 13796,-29722,13796,-29722,13796,-29722,13796,-29722, - 13640,-29793,13640,-29793,13640,-29793,13640,-29793, - 13484,-29864,13484,-29864,13484,-29864,13484,-29864, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 13170,-30004,13170,-30004,13170,-30004,13170,-30004, - 13013,-30073,13013,-30073,13013,-30073,13013,-30073, - 12855,-30140,12855,-30140,12855,-30140,12855,-30140, - 12697,-30207,12697,-30207,12697,-30207,12697,-30207, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12380,-30339,12380,-30339,12380,-30339,12380,-30339, - 12221,-30403,12221,-30403,12221,-30403,12221,-30403, - 12062,-30466,12062,-30466,12062,-30466,12062,-30466, - 11902,-30529,11902,-30529,11902,-30529,11902,-30529, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11582,-30652,11582,-30652,11582,-30652,11582,-30652, - 11421,-30712,11421,-30712,11421,-30712,11421,-30712, - 11260,-30772,11260,-30772,11260,-30772,11260,-30772, - 11099,-30830,11099,-30830,11099,-30830,11099,-30830, - 10937,-30888,10937,-30888,10937,-30888,10937,-30888, - 10775,-30945,10775,-30945,10775,-30945,10775,-30945, - 10613,-31001,10613,-31001,10613,-31001,10613,-31001, - 10451,-31056,10451,-31056,10451,-31056,10451,-31056, - 10288,-31110,10288,-31110,10288,-31110,10288,-31110, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9962,-31216,9962,-31216,9962,-31216,9962,-31216, - 9798,-31268,9798,-31268,9798,-31268,9798,-31268, - 9634,-31319,9634,-31319,9634,-31319,9634,-31319, - 9470,-31369,9470,-31369,9470,-31369,9470,-31369, - 9306,-31418,9306,-31418,9306,-31418,9306,-31418, - 9141,-31466,9141,-31466,9141,-31466,9141,-31466, - 8976,-31514,8976,-31514,8976,-31514,8976,-31514, - 8811,-31560,8811,-31560,8811,-31560,8811,-31560, - 8646,-31606,8646,-31606,8646,-31606,8646,-31606, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8314,-31695,8314,-31695,8314,-31695,8314,-31695, - 8148,-31738,8148,-31738,8148,-31738,8148,-31738, - 7982,-31780,7982,-31780,7982,-31780,7982,-31780, - 7816,-31822,7816,-31822,7816,-31822,7816,-31822, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 7482,-31902,7482,-31902,7482,-31902,7482,-31902, - 7315,-31941,7315,-31941,7315,-31941,7315,-31941, - 7147,-31978,7147,-31978,7147,-31978,7147,-31978, - 6980,-32015,6980,-32015,6980,-32015,6980,-32015, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6644,-32087,6644,-32087,6644,-32087,6644,-32087, - 6476,-32121,6476,-32121,6476,-32121,6476,-32121, - 6308,-32155,6308,-32155,6308,-32155,6308,-32155, - 6139,-32187,6139,-32187,6139,-32187,6139,-32187, - 5971,-32219,5971,-32219,5971,-32219,5971,-32219, - 5802,-32250,5802,-32250,5802,-32250,5802,-32250, - 5633,-32280,5633,-32280,5633,-32280,5633,-32280, - 5464,-32309,5464,-32309,5464,-32309,5464,-32309, - 5295,-32337,5295,-32337,5295,-32337,5295,-32337, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4956,-32390,4956,-32390,4956,-32390,4956,-32390, - 4786,-32416,4786,-32416,4786,-32416,4786,-32416, - 4616,-32441,4616,-32441,4616,-32441,4616,-32441, - 4446,-32464,4446,-32464,4446,-32464,4446,-32464, - 4276,-32487,4276,-32487,4276,-32487,4276,-32487, - 4106,-32509,4106,-32509,4106,-32509,4106,-32509, - 3936,-32530,3936,-32530,3936,-32530,3936,-32530, - 3766,-32550,3766,-32550,3766,-32550,3766,-32550, - 3595,-32570,3595,-32570,3595,-32570,3595,-32570, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3254,-32605,3254,-32605,3254,-32605,3254,-32605, - 3083,-32622,3083,-32622,3083,-32622,3083,-32622, - 2912,-32638,2912,-32638,2912,-32638,2912,-32638, - 2741,-32653,2741,-32653,2741,-32653,2741,-32653, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 2399,-32680,2399,-32680,2399,-32680,2399,-32680, - 2228,-32692,2228,-32692,2228,-32692,2228,-32692, - 2057,-32703,2057,-32703,2057,-32703,2057,-32703, - 1886,-32713,1886,-32713,1886,-32713,1886,-32713, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1543,-32731,1543,-32731,1543,-32731,1543,-32731, - 1372,-32739,1372,-32739,1372,-32739,1372,-32739, - 1200,-32745,1200,-32745,1200,-32745,1200,-32745, - 1029,-32751,1029,-32751,1029,-32751,1029,-32751, - 857,-32756,857,-32756,857,-32756,857,-32756, - 686,-32760,686,-32760,686,-32760,686,-32760, - 514,-32763,514,-32763,514,-32763,514,-32763, - 343,-32766,343,-32766,343,-32766,343,-32766, - 171,-32767,171,-32767,171,-32767,171,-32767 - }; - -int16_t twb1200[4784] = {32765,-344,32765,-344,32765,-344,32765,-344, - 32759,-687,32759,-687,32759,-687,32759,-687, - 32750,-1030,32750,-1030,32750,-1030,32750,-1030, - 32738,-1373,32738,-1373,32738,-1373,32738,-1373, - 32722,-1715,32722,-1715,32722,-1715,32722,-1715, - 32702,-2058,32702,-2058,32702,-2058,32702,-2058, - 32679,-2400,32679,-2400,32679,-2400,32679,-2400, - 32652,-2742,32652,-2742,32652,-2742,32652,-2742, - 32621,-3084,32621,-3084,32621,-3084,32621,-3084, - 32587,-3426,32587,-3426,32587,-3426,32587,-3426, - 32549,-3767,32549,-3767,32549,-3767,32549,-3767, - 32508,-4107,32508,-4107,32508,-4107,32508,-4107, - 32463,-4447,32463,-4447,32463,-4447,32463,-4447, - 32415,-4787,32415,-4787,32415,-4787,32415,-4787, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32308,-5465,32308,-5465,32308,-5465,32308,-5465, - 32249,-5803,32249,-5803,32249,-5803,32249,-5803, - 32186,-6140,32186,-6140,32186,-6140,32186,-6140, - 32120,-6477,32120,-6477,32120,-6477,32120,-6477, - 32050,-6813,32050,-6813,32050,-6813,32050,-6813, - 31977,-7148,31977,-7148,31977,-7148,31977,-7148, - 31901,-7483,31901,-7483,31901,-7483,31901,-7483, - 31821,-7817,31821,-7817,31821,-7817,31821,-7817, - 31737,-8149,31737,-8149,31737,-8149,31737,-8149, - 31650,-8481,31650,-8481,31650,-8481,31650,-8481, - 31559,-8812,31559,-8812,31559,-8812,31559,-8812, - 31465,-9142,31465,-9142,31465,-9142,31465,-9142, - 31368,-9471,31368,-9471,31368,-9471,31368,-9471, - 31267,-9799,31267,-9799,31267,-9799,31267,-9799, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31055,-10452,31055,-10452,31055,-10452,31055,-10452, - 30944,-10776,30944,-10776,30944,-10776,30944,-10776, - 30829,-11100,30829,-11100,30829,-11100,30829,-11100, - 30711,-11422,30711,-11422,30711,-11422,30711,-11422, - 30590,-11743,30590,-11743,30590,-11743,30590,-11743, - 30465,-12063,30465,-12063,30465,-12063,30465,-12063, - 30338,-12381,30338,-12381,30338,-12381,30338,-12381, - 30206,-12698,30206,-12698,30206,-12698,30206,-12698, - 30072,-13014,30072,-13014,30072,-13014,30072,-13014, - 29934,-13328,29934,-13328,29934,-13328,29934,-13328, - 29792,-13641,29792,-13641,29792,-13641,29792,-13641, - 29648,-13952,29648,-13952,29648,-13952,29648,-13952, - 29500,-14262,29500,-14262,29500,-14262,29500,-14262, - 29349,-14570,29349,-14570,29349,-14570,29349,-14570, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 29038,-15181,29038,-15181,29038,-15181,29038,-15181, - 28877,-15485,28877,-15485,28877,-15485,28877,-15485, - 28713,-15786,28713,-15786,28713,-15786,28713,-15786, - 28547,-16086,28547,-16086,28547,-16086,28547,-16086, - 28377,-16384,28377,-16384,28377,-16384,28377,-16384, - 28203,-16680,28203,-16680,28203,-16680,28203,-16680, - 28027,-16975,28027,-16975,28027,-16975,28027,-16975, - 27848,-17267,27848,-17267,27848,-17267,27848,-17267, - 27666,-17558,27666,-17558,27666,-17558,27666,-17558, - 27480,-17847,27480,-17847,27480,-17847,27480,-17847, - 27292,-18133,27292,-18133,27292,-18133,27292,-18133, - 27100,-18418,27100,-18418,27100,-18418,27100,-18418, - 26906,-18701,26906,-18701,26906,-18701,26906,-18701, - 26709,-18982,26709,-18982,26709,-18982,26709,-18982, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26305,-19537,26305,-19537,26305,-19537,26305,-19537, - 26099,-19811,26099,-19811,26099,-19811,26099,-19811, - 25891,-20084,25891,-20084,25891,-20084,25891,-20084, - 25679,-20354,25679,-20354,25679,-20354,25679,-20354, - 25464,-20621,25464,-20621,25464,-20621,25464,-20621, - 25247,-20887,25247,-20887,25247,-20887,25247,-20887, - 25027,-21150,25027,-21150,25027,-21150,25027,-21150, - 24804,-21411,24804,-21411,24804,-21411,24804,-21411, - 24578,-21670,24578,-21670,24578,-21670,24578,-21670, - 24350,-21926,24350,-21926,24350,-21926,24350,-21926, - 24119,-22180,24119,-22180,24119,-22180,24119,-22180, - 23886,-22431,23886,-22431,23886,-22431,23886,-22431, - 23649,-22680,23649,-22680,23649,-22680,23649,-22680, - 23411,-22926,23411,-22926,23411,-22926,23411,-22926, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22925,-23412,22925,-23412,22925,-23412,22925,-23412, - 22679,-23650,22679,-23650,22679,-23650,22679,-23650, - 22430,-23887,22430,-23887,22430,-23887,22430,-23887, - 22179,-24120,22179,-24120,22179,-24120,22179,-24120, - 21925,-24351,21925,-24351,21925,-24351,21925,-24351, - 21669,-24579,21669,-24579,21669,-24579,21669,-24579, - 21410,-24805,21410,-24805,21410,-24805,21410,-24805, - 21149,-25028,21149,-25028,21149,-25028,21149,-25028, - 20886,-25248,20886,-25248,20886,-25248,20886,-25248, - 20620,-25465,20620,-25465,20620,-25465,20620,-25465, - 20353,-25680,20353,-25680,20353,-25680,20353,-25680, - 20083,-25892,20083,-25892,20083,-25892,20083,-25892, - 19810,-26100,19810,-26100,19810,-26100,19810,-26100, - 19536,-26306,19536,-26306,19536,-26306,19536,-26306, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18981,-26710,18981,-26710,18981,-26710,18981,-26710, - 18700,-26907,18700,-26907,18700,-26907,18700,-26907, - 18417,-27101,18417,-27101,18417,-27101,18417,-27101, - 18132,-27293,18132,-27293,18132,-27293,18132,-27293, - 17846,-27481,17846,-27481,17846,-27481,17846,-27481, - 17557,-27667,17557,-27667,17557,-27667,17557,-27667, - 17266,-27849,17266,-27849,17266,-27849,17266,-27849, - 16974,-28028,16974,-28028,16974,-28028,16974,-28028, - 16679,-28204,16679,-28204,16679,-28204,16679,-28204, - 16383,-28378,16383,-28378,16383,-28378,16383,-28378, - 16085,-28548,16085,-28548,16085,-28548,16085,-28548, - 15785,-28714,15785,-28714,15785,-28714,15785,-28714, - 15484,-28878,15484,-28878,15484,-28878,15484,-28878, - 15180,-29039,15180,-29039,15180,-29039,15180,-29039, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14569,-29350,14569,-29350,14569,-29350,14569,-29350, - 14261,-29501,14261,-29501,14261,-29501,14261,-29501, - 13951,-29649,13951,-29649,13951,-29649,13951,-29649, - 13640,-29793,13640,-29793,13640,-29793,13640,-29793, - 13327,-29935,13327,-29935,13327,-29935,13327,-29935, - 13013,-30073,13013,-30073,13013,-30073,13013,-30073, - 12697,-30207,12697,-30207,12697,-30207,12697,-30207, - 12380,-30339,12380,-30339,12380,-30339,12380,-30339, - 12062,-30466,12062,-30466,12062,-30466,12062,-30466, - 11742,-30591,11742,-30591,11742,-30591,11742,-30591, - 11421,-30712,11421,-30712,11421,-30712,11421,-30712, - 11099,-30830,11099,-30830,11099,-30830,11099,-30830, - 10775,-30945,10775,-30945,10775,-30945,10775,-30945, - 10451,-31056,10451,-31056,10451,-31056,10451,-31056, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9798,-31268,9798,-31268,9798,-31268,9798,-31268, - 9470,-31369,9470,-31369,9470,-31369,9470,-31369, - 9141,-31466,9141,-31466,9141,-31466,9141,-31466, - 8811,-31560,8811,-31560,8811,-31560,8811,-31560, - 8480,-31651,8480,-31651,8480,-31651,8480,-31651, - 8148,-31738,8148,-31738,8148,-31738,8148,-31738, - 7816,-31822,7816,-31822,7816,-31822,7816,-31822, - 7482,-31902,7482,-31902,7482,-31902,7482,-31902, - 7147,-31978,7147,-31978,7147,-31978,7147,-31978, - 6812,-32051,6812,-32051,6812,-32051,6812,-32051, - 6476,-32121,6476,-32121,6476,-32121,6476,-32121, - 6139,-32187,6139,-32187,6139,-32187,6139,-32187, - 5802,-32250,5802,-32250,5802,-32250,5802,-32250, - 5464,-32309,5464,-32309,5464,-32309,5464,-32309, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4786,-32416,4786,-32416,4786,-32416,4786,-32416, - 4446,-32464,4446,-32464,4446,-32464,4446,-32464, - 4106,-32509,4106,-32509,4106,-32509,4106,-32509, - 3766,-32550,3766,-32550,3766,-32550,3766,-32550, - 3425,-32588,3425,-32588,3425,-32588,3425,-32588, - 3083,-32622,3083,-32622,3083,-32622,3083,-32622, - 2741,-32653,2741,-32653,2741,-32653,2741,-32653, - 2399,-32680,2399,-32680,2399,-32680,2399,-32680, - 2057,-32703,2057,-32703,2057,-32703,2057,-32703, - 1714,-32723,1714,-32723,1714,-32723,1714,-32723, - 1372,-32739,1372,-32739,1372,-32739,1372,-32739, - 1029,-32751,1029,-32751,1029,-32751,1029,-32751, - 686,-32760,686,-32760,686,-32760,686,-32760, - 343,-32766,343,-32766,343,-32766,343,-32766, - 0,-32767,0,-32767,0,-32767,0,-32767, - -344,-32766,-344,-32766,-344,-32766,-344,-32766, - -687,-32760,-687,-32760,-687,-32760,-687,-32760, - -1030,-32751,-1030,-32751,-1030,-32751,-1030,-32751, - -1373,-32739,-1373,-32739,-1373,-32739,-1373,-32739, - -1715,-32723,-1715,-32723,-1715,-32723,-1715,-32723, - -2058,-32703,-2058,-32703,-2058,-32703,-2058,-32703, - -2400,-32680,-2400,-32680,-2400,-32680,-2400,-32680, - -2742,-32653,-2742,-32653,-2742,-32653,-2742,-32653, - -3084,-32622,-3084,-32622,-3084,-32622,-3084,-32622, - -3426,-32588,-3426,-32588,-3426,-32588,-3426,-32588, - -3767,-32550,-3767,-32550,-3767,-32550,-3767,-32550, - -4107,-32509,-4107,-32509,-4107,-32509,-4107,-32509, - -4447,-32464,-4447,-32464,-4447,-32464,-4447,-32464, - -4787,-32416,-4787,-32416,-4787,-32416,-4787,-32416, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5465,-32309,-5465,-32309,-5465,-32309,-5465,-32309, - -5803,-32250,-5803,-32250,-5803,-32250,-5803,-32250, - -6140,-32187,-6140,-32187,-6140,-32187,-6140,-32187, - -6477,-32121,-6477,-32121,-6477,-32121,-6477,-32121, - -6813,-32051,-6813,-32051,-6813,-32051,-6813,-32051, - -7148,-31978,-7148,-31978,-7148,-31978,-7148,-31978, - -7483,-31902,-7483,-31902,-7483,-31902,-7483,-31902, - -7817,-31822,-7817,-31822,-7817,-31822,-7817,-31822, - -8149,-31738,-8149,-31738,-8149,-31738,-8149,-31738, - -8481,-31651,-8481,-31651,-8481,-31651,-8481,-31651, - -8812,-31560,-8812,-31560,-8812,-31560,-8812,-31560, - -9142,-31466,-9142,-31466,-9142,-31466,-9142,-31466, - -9471,-31369,-9471,-31369,-9471,-31369,-9471,-31369, - -9799,-31268,-9799,-31268,-9799,-31268,-9799,-31268, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10452,-31056,-10452,-31056,-10452,-31056,-10452,-31056, - -10776,-30945,-10776,-30945,-10776,-30945,-10776,-30945, - -11100,-30830,-11100,-30830,-11100,-30830,-11100,-30830, - -11422,-30712,-11422,-30712,-11422,-30712,-11422,-30712, - -11743,-30591,-11743,-30591,-11743,-30591,-11743,-30591, - -12063,-30466,-12063,-30466,-12063,-30466,-12063,-30466, - -12381,-30339,-12381,-30339,-12381,-30339,-12381,-30339, - -12698,-30207,-12698,-30207,-12698,-30207,-12698,-30207, - -13014,-30073,-13014,-30073,-13014,-30073,-13014,-30073, - -13328,-29935,-13328,-29935,-13328,-29935,-13328,-29935, - -13641,-29793,-13641,-29793,-13641,-29793,-13641,-29793, - -13952,-29649,-13952,-29649,-13952,-29649,-13952,-29649, - -14262,-29501,-14262,-29501,-14262,-29501,-14262,-29501, - -14570,-29350,-14570,-29350,-14570,-29350,-14570,-29350, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15181,-29039,-15181,-29039,-15181,-29039,-15181,-29039, - -15485,-28878,-15485,-28878,-15485,-28878,-15485,-28878, - -15786,-28714,-15786,-28714,-15786,-28714,-15786,-28714, - -16086,-28548,-16086,-28548,-16086,-28548,-16086,-28548, - -16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378, - -16680,-28204,-16680,-28204,-16680,-28204,-16680,-28204, - -16975,-28028,-16975,-28028,-16975,-28028,-16975,-28028, - -17267,-27849,-17267,-27849,-17267,-27849,-17267,-27849, - -17558,-27667,-17558,-27667,-17558,-27667,-17558,-27667, - -17847,-27481,-17847,-27481,-17847,-27481,-17847,-27481, - -18133,-27293,-18133,-27293,-18133,-27293,-18133,-27293, - -18418,-27101,-18418,-27101,-18418,-27101,-18418,-27101, - -18701,-26907,-18701,-26907,-18701,-26907,-18701,-26907, - -18982,-26710,-18982,-26710,-18982,-26710,-18982,-26710, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19537,-26306,-19537,-26306,-19537,-26306,-19537,-26306, - -19811,-26100,-19811,-26100,-19811,-26100,-19811,-26100, - -20084,-25892,-20084,-25892,-20084,-25892,-20084,-25892, - -20354,-25680,-20354,-25680,-20354,-25680,-20354,-25680, - -20621,-25465,-20621,-25465,-20621,-25465,-20621,-25465, - -20887,-25248,-20887,-25248,-20887,-25248,-20887,-25248, - -21150,-25028,-21150,-25028,-21150,-25028,-21150,-25028, - -21411,-24805,-21411,-24805,-21411,-24805,-21411,-24805, - -21670,-24579,-21670,-24579,-21670,-24579,-21670,-24579, - -21926,-24351,-21926,-24351,-21926,-24351,-21926,-24351, - -22180,-24120,-22180,-24120,-22180,-24120,-22180,-24120, - -22431,-23887,-22431,-23887,-22431,-23887,-22431,-23887, - -22680,-23650,-22680,-23650,-22680,-23650,-22680,-23650, - -22926,-23412,-22926,-23412,-22926,-23412,-22926,-23412, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23412,-22926,-23412,-22926,-23412,-22926,-23412,-22926, - -23650,-22680,-23650,-22680,-23650,-22680,-23650,-22680, - -23887,-22431,-23887,-22431,-23887,-22431,-23887,-22431, - -24120,-22180,-24120,-22180,-24120,-22180,-24120,-22180, - -24351,-21926,-24351,-21926,-24351,-21926,-24351,-21926, - -24579,-21670,-24579,-21670,-24579,-21670,-24579,-21670, - -24805,-21411,-24805,-21411,-24805,-21411,-24805,-21411, - -25028,-21150,-25028,-21150,-25028,-21150,-25028,-21150, - -25248,-20887,-25248,-20887,-25248,-20887,-25248,-20887, - -25465,-20621,-25465,-20621,-25465,-20621,-25465,-20621, - -25680,-20354,-25680,-20354,-25680,-20354,-25680,-20354, - -25892,-20084,-25892,-20084,-25892,-20084,-25892,-20084, - -26100,-19811,-26100,-19811,-26100,-19811,-26100,-19811, - -26306,-19537,-26306,-19537,-26306,-19537,-26306,-19537, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26710,-18982,-26710,-18982,-26710,-18982,-26710,-18982, - -26907,-18701,-26907,-18701,-26907,-18701,-26907,-18701, - -27101,-18418,-27101,-18418,-27101,-18418,-27101,-18418, - -27293,-18133,-27293,-18133,-27293,-18133,-27293,-18133, - -27481,-17847,-27481,-17847,-27481,-17847,-27481,-17847, - -27667,-17558,-27667,-17558,-27667,-17558,-27667,-17558, - -27849,-17267,-27849,-17267,-27849,-17267,-27849,-17267, - -28028,-16975,-28028,-16975,-28028,-16975,-28028,-16975, - -28204,-16680,-28204,-16680,-28204,-16680,-28204,-16680, - -28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384, - -28548,-16086,-28548,-16086,-28548,-16086,-28548,-16086, - -28714,-15786,-28714,-15786,-28714,-15786,-28714,-15786, - -28878,-15485,-28878,-15485,-28878,-15485,-28878,-15485, - -29039,-15181,-29039,-15181,-29039,-15181,-29039,-15181, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29350,-14570,-29350,-14570,-29350,-14570,-29350,-14570, - -29501,-14262,-29501,-14262,-29501,-14262,-29501,-14262, - -29649,-13952,-29649,-13952,-29649,-13952,-29649,-13952, - -29793,-13641,-29793,-13641,-29793,-13641,-29793,-13641, - -29935,-13328,-29935,-13328,-29935,-13328,-29935,-13328, - -30073,-13014,-30073,-13014,-30073,-13014,-30073,-13014, - -30207,-12698,-30207,-12698,-30207,-12698,-30207,-12698, - -30339,-12381,-30339,-12381,-30339,-12381,-30339,-12381, - -30466,-12063,-30466,-12063,-30466,-12063,-30466,-12063, - -30591,-11743,-30591,-11743,-30591,-11743,-30591,-11743, - -30712,-11422,-30712,-11422,-30712,-11422,-30712,-11422, - -30830,-11100,-30830,-11100,-30830,-11100,-30830,-11100, - -30945,-10776,-30945,-10776,-30945,-10776,-30945,-10776, - -31056,-10452,-31056,-10452,-31056,-10452,-31056,-10452, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31268,-9799,-31268,-9799,-31268,-9799,-31268,-9799, - -31369,-9471,-31369,-9471,-31369,-9471,-31369,-9471, - -31466,-9142,-31466,-9142,-31466,-9142,-31466,-9142, - -31560,-8812,-31560,-8812,-31560,-8812,-31560,-8812, - -31651,-8481,-31651,-8481,-31651,-8481,-31651,-8481, - -31738,-8149,-31738,-8149,-31738,-8149,-31738,-8149, - -31822,-7817,-31822,-7817,-31822,-7817,-31822,-7817, - -31902,-7483,-31902,-7483,-31902,-7483,-31902,-7483, - -31978,-7148,-31978,-7148,-31978,-7148,-31978,-7148, - -32051,-6813,-32051,-6813,-32051,-6813,-32051,-6813, - -32121,-6477,-32121,-6477,-32121,-6477,-32121,-6477, - -32187,-6140,-32187,-6140,-32187,-6140,-32187,-6140, - -32250,-5803,-32250,-5803,-32250,-5803,-32250,-5803, - -32309,-5465,-32309,-5465,-32309,-5465,-32309,-5465, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32416,-4787,-32416,-4787,-32416,-4787,-32416,-4787, - -32464,-4447,-32464,-4447,-32464,-4447,-32464,-4447, - -32509,-4107,-32509,-4107,-32509,-4107,-32509,-4107, - -32550,-3767,-32550,-3767,-32550,-3767,-32550,-3767, - -32588,-3426,-32588,-3426,-32588,-3426,-32588,-3426, - -32622,-3084,-32622,-3084,-32622,-3084,-32622,-3084, - -32653,-2742,-32653,-2742,-32653,-2742,-32653,-2742, - -32680,-2400,-32680,-2400,-32680,-2400,-32680,-2400, - -32703,-2058,-32703,-2058,-32703,-2058,-32703,-2058, - -32723,-1715,-32723,-1715,-32723,-1715,-32723,-1715, - -32739,-1373,-32739,-1373,-32739,-1373,-32739,-1373, - -32751,-1030,-32751,-1030,-32751,-1030,-32751,-1030, - -32760,-687,-32760,-687,-32760,-687,-32760,-687, - -32766,-344,-32766,-344,-32766,-344,-32766,-344 - }; - -int16_t twc1200[4784] = { 32762,-515,32762,-515,32762,-515,32762,-515, - 32750,-1030,32750,-1030,32750,-1030,32750,-1030, - 32730,-1544,32730,-1544,32730,-1544,32730,-1544, - 32702,-2058,32702,-2058,32702,-2058,32702,-2058, - 32665,-2571,32665,-2571,32665,-2571,32665,-2571, - 32621,-3084,32621,-3084,32621,-3084,32621,-3084, - 32569,-3596,32569,-3596,32569,-3596,32569,-3596, - 32508,-4107,32508,-4107,32508,-4107,32508,-4107, - 32440,-4617,32440,-4617,32440,-4617,32440,-4617, - 32363,-5126,32363,-5126,32363,-5126,32363,-5126, - 32279,-5634,32279,-5634,32279,-5634,32279,-5634, - 32186,-6140,32186,-6140,32186,-6140,32186,-6140, - 32086,-6645,32086,-6645,32086,-6645,32086,-6645, - 31977,-7148,31977,-7148,31977,-7148,31977,-7148, - 31861,-7650,31861,-7650,31861,-7650,31861,-7650, - 31737,-8149,31737,-8149,31737,-8149,31737,-8149, - 31605,-8647,31605,-8647,31605,-8647,31605,-8647, - 31465,-9142,31465,-9142,31465,-9142,31465,-9142, - 31318,-9635,31318,-9635,31318,-9635,31318,-9635, - 31163,-10126,31163,-10126,31163,-10126,31163,-10126, - 31000,-10614,31000,-10614,31000,-10614,31000,-10614, - 30829,-11100,30829,-11100,30829,-11100,30829,-11100, - 30651,-11583,30651,-11583,30651,-11583,30651,-11583, - 30465,-12063,30465,-12063,30465,-12063,30465,-12063, - 30272,-12540,30272,-12540,30272,-12540,30272,-12540, - 30072,-13014,30072,-13014,30072,-13014,30072,-13014, - 29863,-13485,29863,-13485,29863,-13485,29863,-13485, - 29648,-13952,29648,-13952,29648,-13952,29648,-13952, - 29425,-14416,29425,-14416,29425,-14416,29425,-14416, - 29195,-14876,29195,-14876,29195,-14876,29195,-14876, - 28958,-15333,28958,-15333,28958,-15333,28958,-15333, - 28713,-15786,28713,-15786,28713,-15786,28713,-15786, - 28462,-16235,28462,-16235,28462,-16235,28462,-16235, - 28203,-16680,28203,-16680,28203,-16680,28203,-16680, - 27938,-17121,27938,-17121,27938,-17121,27938,-17121, - 27666,-17558,27666,-17558,27666,-17558,27666,-17558, - 27386,-17990,27386,-17990,27386,-17990,27386,-17990, - 27100,-18418,27100,-18418,27100,-18418,27100,-18418, - 26808,-18842,26808,-18842,26808,-18842,26808,-18842, - 26509,-19260,26509,-19260,26509,-19260,26509,-19260, - 26203,-19674,26203,-19674,26203,-19674,26203,-19674, - 25891,-20084,25891,-20084,25891,-20084,25891,-20084, - 25572,-20488,25572,-20488,25572,-20488,25572,-20488, - 25247,-20887,25247,-20887,25247,-20887,25247,-20887, - 24916,-21281,24916,-21281,24916,-21281,24916,-21281, - 24578,-21670,24578,-21670,24578,-21670,24578,-21670, - 24235,-22053,24235,-22053,24235,-22053,24235,-22053, - 23886,-22431,23886,-22431,23886,-22431,23886,-22431, - 23530,-22803,23530,-22803,23530,-22803,23530,-22803, - 23169,-23170,23169,-23170,23169,-23170,23169,-23170, - 22802,-23531,22802,-23531,22802,-23531,22802,-23531, - 22430,-23887,22430,-23887,22430,-23887,22430,-23887, - 22052,-24236,22052,-24236,22052,-24236,22052,-24236, - 21669,-24579,21669,-24579,21669,-24579,21669,-24579, - 21280,-24917,21280,-24917,21280,-24917,21280,-24917, - 20886,-25248,20886,-25248,20886,-25248,20886,-25248, - 20487,-25573,20487,-25573,20487,-25573,20487,-25573, - 20083,-25892,20083,-25892,20083,-25892,20083,-25892, - 19673,-26204,19673,-26204,19673,-26204,19673,-26204, - 19259,-26510,19259,-26510,19259,-26510,19259,-26510, - 18841,-26809,18841,-26809,18841,-26809,18841,-26809, - 18417,-27101,18417,-27101,18417,-27101,18417,-27101, - 17989,-27387,17989,-27387,17989,-27387,17989,-27387, - 17557,-27667,17557,-27667,17557,-27667,17557,-27667, - 17120,-27939,17120,-27939,17120,-27939,17120,-27939, - 16679,-28204,16679,-28204,16679,-28204,16679,-28204, - 16234,-28463,16234,-28463,16234,-28463,16234,-28463, - 15785,-28714,15785,-28714,15785,-28714,15785,-28714, - 15332,-28959,15332,-28959,15332,-28959,15332,-28959, - 14875,-29196,14875,-29196,14875,-29196,14875,-29196, - 14415,-29426,14415,-29426,14415,-29426,14415,-29426, - 13951,-29649,13951,-29649,13951,-29649,13951,-29649, - 13484,-29864,13484,-29864,13484,-29864,13484,-29864, - 13013,-30073,13013,-30073,13013,-30073,13013,-30073, - 12539,-30273,12539,-30273,12539,-30273,12539,-30273, - 12062,-30466,12062,-30466,12062,-30466,12062,-30466, - 11582,-30652,11582,-30652,11582,-30652,11582,-30652, - 11099,-30830,11099,-30830,11099,-30830,11099,-30830, - 10613,-31001,10613,-31001,10613,-31001,10613,-31001, - 10125,-31164,10125,-31164,10125,-31164,10125,-31164, - 9634,-31319,9634,-31319,9634,-31319,9634,-31319, - 9141,-31466,9141,-31466,9141,-31466,9141,-31466, - 8646,-31606,8646,-31606,8646,-31606,8646,-31606, - 8148,-31738,8148,-31738,8148,-31738,8148,-31738, - 7649,-31862,7649,-31862,7649,-31862,7649,-31862, - 7147,-31978,7147,-31978,7147,-31978,7147,-31978, - 6644,-32087,6644,-32087,6644,-32087,6644,-32087, - 6139,-32187,6139,-32187,6139,-32187,6139,-32187, - 5633,-32280,5633,-32280,5633,-32280,5633,-32280, - 5125,-32364,5125,-32364,5125,-32364,5125,-32364, - 4616,-32441,4616,-32441,4616,-32441,4616,-32441, - 4106,-32509,4106,-32509,4106,-32509,4106,-32509, - 3595,-32570,3595,-32570,3595,-32570,3595,-32570, - 3083,-32622,3083,-32622,3083,-32622,3083,-32622, - 2570,-32666,2570,-32666,2570,-32666,2570,-32666, - 2057,-32703,2057,-32703,2057,-32703,2057,-32703, - 1543,-32731,1543,-32731,1543,-32731,1543,-32731, - 1029,-32751,1029,-32751,1029,-32751,1029,-32751, - 514,-32763,514,-32763,514,-32763,514,-32763, - 0,-32767,0,-32767,0,-32767,0,-32767, - -515,-32763,-515,-32763,-515,-32763,-515,-32763, - -1030,-32751,-1030,-32751,-1030,-32751,-1030,-32751, - -1544,-32731,-1544,-32731,-1544,-32731,-1544,-32731, - -2058,-32703,-2058,-32703,-2058,-32703,-2058,-32703, - -2571,-32666,-2571,-32666,-2571,-32666,-2571,-32666, - -3084,-32622,-3084,-32622,-3084,-32622,-3084,-32622, - -3596,-32570,-3596,-32570,-3596,-32570,-3596,-32570, - -4107,-32509,-4107,-32509,-4107,-32509,-4107,-32509, - -4617,-32441,-4617,-32441,-4617,-32441,-4617,-32441, - -5126,-32364,-5126,-32364,-5126,-32364,-5126,-32364, - -5634,-32280,-5634,-32280,-5634,-32280,-5634,-32280, - -6140,-32187,-6140,-32187,-6140,-32187,-6140,-32187, - -6645,-32087,-6645,-32087,-6645,-32087,-6645,-32087, - -7148,-31978,-7148,-31978,-7148,-31978,-7148,-31978, - -7650,-31862,-7650,-31862,-7650,-31862,-7650,-31862, - -8149,-31738,-8149,-31738,-8149,-31738,-8149,-31738, - -8647,-31606,-8647,-31606,-8647,-31606,-8647,-31606, - -9142,-31466,-9142,-31466,-9142,-31466,-9142,-31466, - -9635,-31319,-9635,-31319,-9635,-31319,-9635,-31319, - -10126,-31164,-10126,-31164,-10126,-31164,-10126,-31164, - -10614,-31001,-10614,-31001,-10614,-31001,-10614,-31001, - -11100,-30830,-11100,-30830,-11100,-30830,-11100,-30830, - -11583,-30652,-11583,-30652,-11583,-30652,-11583,-30652, - -12063,-30466,-12063,-30466,-12063,-30466,-12063,-30466, - -12540,-30273,-12540,-30273,-12540,-30273,-12540,-30273, - -13014,-30073,-13014,-30073,-13014,-30073,-13014,-30073, - -13485,-29864,-13485,-29864,-13485,-29864,-13485,-29864, - -13952,-29649,-13952,-29649,-13952,-29649,-13952,-29649, - -14416,-29426,-14416,-29426,-14416,-29426,-14416,-29426, - -14876,-29196,-14876,-29196,-14876,-29196,-14876,-29196, - -15333,-28959,-15333,-28959,-15333,-28959,-15333,-28959, - -15786,-28714,-15786,-28714,-15786,-28714,-15786,-28714, - -16235,-28463,-16235,-28463,-16235,-28463,-16235,-28463, - -16680,-28204,-16680,-28204,-16680,-28204,-16680,-28204, - -17121,-27939,-17121,-27939,-17121,-27939,-17121,-27939, - -17558,-27667,-17558,-27667,-17558,-27667,-17558,-27667, - -17990,-27387,-17990,-27387,-17990,-27387,-17990,-27387, - -18418,-27101,-18418,-27101,-18418,-27101,-18418,-27101, - -18842,-26809,-18842,-26809,-18842,-26809,-18842,-26809, - -19260,-26510,-19260,-26510,-19260,-26510,-19260,-26510, - -19674,-26204,-19674,-26204,-19674,-26204,-19674,-26204, - -20084,-25892,-20084,-25892,-20084,-25892,-20084,-25892, - -20488,-25573,-20488,-25573,-20488,-25573,-20488,-25573, - -20887,-25248,-20887,-25248,-20887,-25248,-20887,-25248, - -21281,-24917,-21281,-24917,-21281,-24917,-21281,-24917, - -21670,-24579,-21670,-24579,-21670,-24579,-21670,-24579, - -22053,-24236,-22053,-24236,-22053,-24236,-22053,-24236, - -22431,-23887,-22431,-23887,-22431,-23887,-22431,-23887, - -22803,-23531,-22803,-23531,-22803,-23531,-22803,-23531, - -23170,-23170,-23170,-23170,-23170,-23170,-23170,-23170, - -23531,-22803,-23531,-22803,-23531,-22803,-23531,-22803, - -23887,-22431,-23887,-22431,-23887,-22431,-23887,-22431, - -24236,-22053,-24236,-22053,-24236,-22053,-24236,-22053, - -24579,-21670,-24579,-21670,-24579,-21670,-24579,-21670, - -24917,-21281,-24917,-21281,-24917,-21281,-24917,-21281, - -25248,-20887,-25248,-20887,-25248,-20887,-25248,-20887, - -25573,-20488,-25573,-20488,-25573,-20488,-25573,-20488, - -25892,-20084,-25892,-20084,-25892,-20084,-25892,-20084, - -26204,-19674,-26204,-19674,-26204,-19674,-26204,-19674, - -26510,-19260,-26510,-19260,-26510,-19260,-26510,-19260, - -26809,-18842,-26809,-18842,-26809,-18842,-26809,-18842, - -27101,-18418,-27101,-18418,-27101,-18418,-27101,-18418, - -27387,-17990,-27387,-17990,-27387,-17990,-27387,-17990, - -27667,-17558,-27667,-17558,-27667,-17558,-27667,-17558, - -27939,-17121,-27939,-17121,-27939,-17121,-27939,-17121, - -28204,-16680,-28204,-16680,-28204,-16680,-28204,-16680, - -28463,-16235,-28463,-16235,-28463,-16235,-28463,-16235, - -28714,-15786,-28714,-15786,-28714,-15786,-28714,-15786, - -28959,-15333,-28959,-15333,-28959,-15333,-28959,-15333, - -29196,-14876,-29196,-14876,-29196,-14876,-29196,-14876, - -29426,-14416,-29426,-14416,-29426,-14416,-29426,-14416, - -29649,-13952,-29649,-13952,-29649,-13952,-29649,-13952, - -29864,-13485,-29864,-13485,-29864,-13485,-29864,-13485, - -30073,-13014,-30073,-13014,-30073,-13014,-30073,-13014, - -30273,-12540,-30273,-12540,-30273,-12540,-30273,-12540, - -30466,-12063,-30466,-12063,-30466,-12063,-30466,-12063, - -30652,-11583,-30652,-11583,-30652,-11583,-30652,-11583, - -30830,-11100,-30830,-11100,-30830,-11100,-30830,-11100, - -31001,-10614,-31001,-10614,-31001,-10614,-31001,-10614, - -31164,-10126,-31164,-10126,-31164,-10126,-31164,-10126, - -31319,-9635,-31319,-9635,-31319,-9635,-31319,-9635, - -31466,-9142,-31466,-9142,-31466,-9142,-31466,-9142, - -31606,-8647,-31606,-8647,-31606,-8647,-31606,-8647, - -31738,-8149,-31738,-8149,-31738,-8149,-31738,-8149, - -31862,-7650,-31862,-7650,-31862,-7650,-31862,-7650, - -31978,-7148,-31978,-7148,-31978,-7148,-31978,-7148, - -32087,-6645,-32087,-6645,-32087,-6645,-32087,-6645, - -32187,-6140,-32187,-6140,-32187,-6140,-32187,-6140, - -32280,-5634,-32280,-5634,-32280,-5634,-32280,-5634, - -32364,-5126,-32364,-5126,-32364,-5126,-32364,-5126, - -32441,-4617,-32441,-4617,-32441,-4617,-32441,-4617, - -32509,-4107,-32509,-4107,-32509,-4107,-32509,-4107, - -32570,-3596,-32570,-3596,-32570,-3596,-32570,-3596, - -32622,-3084,-32622,-3084,-32622,-3084,-32622,-3084, - -32666,-2571,-32666,-2571,-32666,-2571,-32666,-2571, - -32703,-2058,-32703,-2058,-32703,-2058,-32703,-2058, - -32731,-1544,-32731,-1544,-32731,-1544,-32731,-1544, - -32751,-1030,-32751,-1030,-32751,-1030,-32751,-1030, - -32763,-515,-32763,-515,-32763,-515,-32763,-515, - -32767,-1,-32767,-1,-32767,-1,-32767,-1, - -32763,514,-32763,514,-32763,514,-32763,514, - -32751,1029,-32751,1029,-32751,1029,-32751,1029, - -32731,1543,-32731,1543,-32731,1543,-32731,1543, - -32703,2057,-32703,2057,-32703,2057,-32703,2057, - -32666,2570,-32666,2570,-32666,2570,-32666,2570, - -32622,3083,-32622,3083,-32622,3083,-32622,3083, - -32570,3595,-32570,3595,-32570,3595,-32570,3595, - -32509,4106,-32509,4106,-32509,4106,-32509,4106, - -32441,4616,-32441,4616,-32441,4616,-32441,4616, - -32364,5125,-32364,5125,-32364,5125,-32364,5125, - -32280,5633,-32280,5633,-32280,5633,-32280,5633, - -32187,6139,-32187,6139,-32187,6139,-32187,6139, - -32087,6644,-32087,6644,-32087,6644,-32087,6644, - -31978,7147,-31978,7147,-31978,7147,-31978,7147, - -31862,7649,-31862,7649,-31862,7649,-31862,7649, - -31738,8148,-31738,8148,-31738,8148,-31738,8148, - -31606,8646,-31606,8646,-31606,8646,-31606,8646, - -31466,9141,-31466,9141,-31466,9141,-31466,9141, - -31319,9634,-31319,9634,-31319,9634,-31319,9634, - -31164,10125,-31164,10125,-31164,10125,-31164,10125, - -31001,10613,-31001,10613,-31001,10613,-31001,10613, - -30830,11099,-30830,11099,-30830,11099,-30830,11099, - -30652,11582,-30652,11582,-30652,11582,-30652,11582, - -30466,12062,-30466,12062,-30466,12062,-30466,12062, - -30273,12539,-30273,12539,-30273,12539,-30273,12539, - -30073,13013,-30073,13013,-30073,13013,-30073,13013, - -29864,13484,-29864,13484,-29864,13484,-29864,13484, - -29649,13951,-29649,13951,-29649,13951,-29649,13951, - -29426,14415,-29426,14415,-29426,14415,-29426,14415, - -29196,14875,-29196,14875,-29196,14875,-29196,14875, - -28959,15332,-28959,15332,-28959,15332,-28959,15332, - -28714,15785,-28714,15785,-28714,15785,-28714,15785, - -28463,16234,-28463,16234,-28463,16234,-28463,16234, - -28204,16679,-28204,16679,-28204,16679,-28204,16679, - -27939,17120,-27939,17120,-27939,17120,-27939,17120, - -27667,17557,-27667,17557,-27667,17557,-27667,17557, - -27387,17989,-27387,17989,-27387,17989,-27387,17989, - -27101,18417,-27101,18417,-27101,18417,-27101,18417, - -26809,18841,-26809,18841,-26809,18841,-26809,18841, - -26510,19259,-26510,19259,-26510,19259,-26510,19259, - -26204,19673,-26204,19673,-26204,19673,-26204,19673, - -25892,20083,-25892,20083,-25892,20083,-25892,20083, - -25573,20487,-25573,20487,-25573,20487,-25573,20487, - -25248,20886,-25248,20886,-25248,20886,-25248,20886, - -24917,21280,-24917,21280,-24917,21280,-24917,21280, - -24579,21669,-24579,21669,-24579,21669,-24579,21669, - -24236,22052,-24236,22052,-24236,22052,-24236,22052, - -23887,22430,-23887,22430,-23887,22430,-23887,22430, - -23531,22802,-23531,22802,-23531,22802,-23531,22802, - -23170,23169,-23170,23169,-23170,23169,-23170,23169, - -22803,23530,-22803,23530,-22803,23530,-22803,23530, - -22431,23886,-22431,23886,-22431,23886,-22431,23886, - -22053,24235,-22053,24235,-22053,24235,-22053,24235, - -21670,24578,-21670,24578,-21670,24578,-21670,24578, - -21281,24916,-21281,24916,-21281,24916,-21281,24916, - -20887,25247,-20887,25247,-20887,25247,-20887,25247, - -20488,25572,-20488,25572,-20488,25572,-20488,25572, - -20084,25891,-20084,25891,-20084,25891,-20084,25891, - -19674,26203,-19674,26203,-19674,26203,-19674,26203, - -19260,26509,-19260,26509,-19260,26509,-19260,26509, - -18842,26808,-18842,26808,-18842,26808,-18842,26808, - -18418,27100,-18418,27100,-18418,27100,-18418,27100, - -17990,27386,-17990,27386,-17990,27386,-17990,27386, - -17558,27666,-17558,27666,-17558,27666,-17558,27666, - -17121,27938,-17121,27938,-17121,27938,-17121,27938, - -16680,28203,-16680,28203,-16680,28203,-16680,28203, - -16235,28462,-16235,28462,-16235,28462,-16235,28462, - -15786,28713,-15786,28713,-15786,28713,-15786,28713, - -15333,28958,-15333,28958,-15333,28958,-15333,28958, - -14876,29195,-14876,29195,-14876,29195,-14876,29195, - -14416,29425,-14416,29425,-14416,29425,-14416,29425, - -13952,29648,-13952,29648,-13952,29648,-13952,29648, - -13485,29863,-13485,29863,-13485,29863,-13485,29863, - -13014,30072,-13014,30072,-13014,30072,-13014,30072, - -12540,30272,-12540,30272,-12540,30272,-12540,30272, - -12063,30465,-12063,30465,-12063,30465,-12063,30465, - -11583,30651,-11583,30651,-11583,30651,-11583,30651, - -11100,30829,-11100,30829,-11100,30829,-11100,30829, - -10614,31000,-10614,31000,-10614,31000,-10614,31000, - -10126,31163,-10126,31163,-10126,31163,-10126,31163, - -9635,31318,-9635,31318,-9635,31318,-9635,31318, - -9142,31465,-9142,31465,-9142,31465,-9142,31465, - -8647,31605,-8647,31605,-8647,31605,-8647,31605, - -8149,31737,-8149,31737,-8149,31737,-8149,31737, - -7650,31861,-7650,31861,-7650,31861,-7650,31861, - -7148,31977,-7148,31977,-7148,31977,-7148,31977, - -6645,32086,-6645,32086,-6645,32086,-6645,32086, - -6140,32186,-6140,32186,-6140,32186,-6140,32186, - -5634,32279,-5634,32279,-5634,32279,-5634,32279, - -5126,32363,-5126,32363,-5126,32363,-5126,32363, - -4617,32440,-4617,32440,-4617,32440,-4617,32440, - -4107,32508,-4107,32508,-4107,32508,-4107,32508, - -3596,32569,-3596,32569,-3596,32569,-3596,32569, - -3084,32621,-3084,32621,-3084,32621,-3084,32621, - -2571,32665,-2571,32665,-2571,32665,-2571,32665, - -2058,32702,-2058,32702,-2058,32702,-2058,32702, - -1544,32730,-1544,32730,-1544,32730,-1544,32730, - -1030,32750,-1030,32750,-1030,32750,-1030,32750, - -515,32762,-515,32762,-515,32762,-515,32762 - }; - +int16_t twa1200[4784]; +int16_t twb1200[4784]; +int16_t twc1200[4784]; void dft1200(int16_t *x,int16_t *y,unsigned char scale_flag) { @@ -17946,6 +8634,19 @@ init_dfts() { init_rad3(18432,twa18432,twb18432); init_rad3(24576,twa24576,twb24576); + init_rad2_rep(24,tw24); + init_rad3_rep(36,twa36,twb36); + init_rad4_rep(48,twa48,twb48,twc48); + init_rad5_rep(60,twa60,twb60,twc60,twd60); + init_rad2_rep(72,tw72); + init_rad2_rep(96,tw96); + init_rad3_rep(108,twa108,twb108); + init_rad2_rep(120,tw120); + init_rad3_rep(144,twa144,twb144); + init_rad3_rep(180,twa180,twb180); + init_rad4_rep(192,twa192,twb192,twc192); + init_rad3_rep(216,twa216,twb216); + init_rad4_rep(240,twa240,twb240,twc240); init_rad3_rep(288,twa288,twb288); init_rad5_rep(300,twa300,twb300,twc300,twd300); init_rad3_rep(324,twa324,twb324); @@ -17964,8 +8665,8 @@ init_dfts() { init_rad4_rep(960,twa960,twb960,twc960); init_rad3_rep(972,twa972,twb972); init_rad3_rep(1080,twa1080,twb1080); - init_rad4_rep(960,twa1152,twb1152,twc1152); - init_rad4_rep(960,twa1200,twb1200,twc1200); + init_rad4_rep(1152,twa1152,twb1152,twc1152); + init_rad4_rep(1200,twa1200,twb1200,twc1200); } #ifdef MR_MAIN @@ -18140,7 +8841,7 @@ int main(int argc, char**argv) simd_q15_t x[8192],y[8192],tw0,tw1,tw2,tw3; #endif int i; - simd_q15_t *x128=x,*y128=y; + simd_q15_t *x128=(simd_q15_t*)x,*y128=(simd_q15_t*)y; init_dfts(); @@ -18309,157 +9010,8 @@ int main(int argc, char**argv) printf("%d,%d,",((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); printf("\n"); - dft24((int16_t *)x,(int16_t *)y,1); - printf("\n\n24-point\n"); - printf("X: "); - for (i=0;i<24;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<24;i++) - printf("%d,%d,",((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft36((int16_t *)x,(int16_t *)y,1); - printf("\n\n36-point\n"); - printf("X: "); - for (i=0;i<36;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<36;i++) - printf("%d,%d,",((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft48((int16_t *)x,(int16_t *)y,1); - printf("\n\n48-point\n"); - printf("X: "); - for (i=0;i<48;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<48;i++) - printf("%d,%d,",((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); */ - dft60((int16_t *)x,(int16_t *)y,1); - printf("\n\n60-point\n"); - printf("X: "); - for (i=0;i<60;i++) - printf("%d,%d,",((int16_t*)(&x128[i]))[0],((int16_t *)(&x128[i]))[1]); - printf("\nY:"); - for (i=0;i<60;i++) - printf("%d,%d,",((int16_t*)(&y128[i]))[0],((int16_t *)(&y128[i]))[1]); - printf("\n"); - - dft72((int16_t *)x,(int16_t *)y,1); - printf("\n\n72-point\n"); - printf("X: "); - for (i=0;i<72;i++) - printf("%d,%d,",((int16_t*)(&x128[i]))[0],((int16_t *)(&x128[i]))[1]); - printf("\nY:"); - for (i=0;i<72;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y128[i]))[0],((int16_t *)(&y128[i]))[1]); - printf("\n"); - /* - dft96((int16_t *)x,(int16_t *)y,1); - printf("\n\n96-point\n"); - printf("X: "); - for (i=0;i<96;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<96;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft108((int16_t *)x,(int16_t *)y,1); - printf("\n\n108-point\n"); - printf("X: "); - for (i=0;i<108;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<108;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - */ - dft120((int16_t *)x,(int16_t *)y,1); - printf("\n\n120-point\n"); - printf("X: "); - for (i=0;i<120;i++) - printf("%d,%d,",((int16_t*)(&x128[i]))[0],((int16_t *)(&x128[i]))[1]); - printf("\nY:"); - for (i=0;i<120;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y128[i]))[0],((int16_t *)(&y128[i]))[1]); - printf("\n"); - /* - dft144((int16_t *)x,(int16_t *)y,1); - printf("\n\n144-point\n"); - printf("X: "); - for (i=0;i<144;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<144;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft180((int16_t *)x,(int16_t *)y,1); - printf("\n\n180-point\n"); - printf("X: "); - for (i=0;i<180;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<180;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft192((int16_t *)x,(int16_t *)y,1); - printf("\n\n192-point\n"); - printf("X: "); - for (i=0;i<192;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<192;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft216((int16_t *)x,(int16_t *)y,1); - printf("\n\n216-point\n"); - printf("X: "); - for (i=0;i<216;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<216;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft240((int16_t *)x,(int16_t *)y,1); - printf("\n\n240-point\n"); - printf("X: "); - for (i=0;i<240;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<240;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft288((int16_t *)x,(int16_t *)y,1); - printf("\n\n288-point\n"); - printf("X: "); - for (i=0;i<288;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<288;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - - dft300((int16_t *)x,(int16_t *)y,1); - printf("\n\n300-point\n"); - printf("X: "); - for (i=0;i<300;i++) - printf("%d,%d,",((int16_t*)(&x[i]))[0],((int16_t *)(&x[i]))[1]); - printf("\nY:"); - for (i=0;i<300;i++) - printf("%d: %d,%d\n",i,((int16_t*)(&y[i]))[0],((int16_t *)(&y[i]))[1]); - printf("\n"); - for (i=0;i<32;i++) { ((int16_t*)x)[i] = (int16_t)((taus()&0xffff))>>5; } @@ -18474,7 +9026,7 @@ int main(int argc, char**argv) for (i=0;i<4;i++) printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&y[i])[0],((int16_t *)&y[i])[1],((int16_t*)&y[i])[2],((int16_t *)&y[i])[3],((int16_t*)&y[i])[4],((int16_t *)&y[i])[5],((int16_t*)&y[i])[6],((int16_t *)&y[i])[7]); printf("\n"); - */ + memset((void*)&x[0],0,2048*4); for (i=0; i<2048; i+=4) { @@ -18915,101 +9467,39 @@ int main(int argc, char**argv) LOG_M("y24576.m","y24576",y,24576,1,1); LOG_M("x24576.m","x24576",x,24576,1,1); - // 4x288-point DFT - memset((void*)x,0,288*8*sizeof(int16_t)); - for (i=0;i<288*8;i+=8) { - if ((taus() & 1)==0) - ((int16_t*)x)[i] = 364; - else - ((int16_t*)x)[i] = -364; - if ((taus() & 1)==0) - ((int16_t*)x)[i+1] = 364; - else - ((int16_t*)x)[i+1] = -364; + int dftsizes[33]={24,36,48,60,72,96,108,120,144,180,192,216,240,288,300,324,360,384,432,480,540,576,600,648,720,768,864,900,960,972,1080,1152,1200}; + void (*dft[33])(int16_t *x,int16_t *y,uint8_t scale) = {dft24,dft36,dft48,dft60,dft72,dft96,dft108,dft120,dft144,dft180,dft192,dft216,dft240,dft288,dft300,dft324,dft360,dft384,dft432,dft480,dft540,dft576,dft600,dft648,dft720,dft768,dft864,dft900,dft960,dft972,dft1080,dft1152,dft1200}; + for (int n=0;n<33;n++) { + // 4xN-point DFT + memset((void*)x,0,dftsizes[n]*8*sizeof(int16_t)); + for (i=0;i Date: Mon, 30 Jul 2018 11:24:08 +0200 Subject: [PATCH 018/128] reset for remerging --- ci-scripts/Jenkinsfile-gitlab | 185 +- ci-scripts/checkCodingFormattingRules.sh | 142 +- ci-scripts/doGitLabMerge.sh | 104 +- cmake_targets/CMakeLists.txt | 420 +- .../autotests/run_exec_autotests.bash | 63 +- cmake_targets/autotests/test_case_list.xml | 44 +- .../enb.band38.tm1.usrpb210.tdd.10MHz.conf | 2 +- .../enb.band38.tm1.usrpb210.tdd.20MHz.conf | 2 +- .../enb.band38.tm1.usrpb210.tdd.5MHz.conf | 2 +- .../enb.band7.tm1.usrpb210.fdd.10MHz.conf | 2 +- .../enb.band7.tm1.usrpb210.fdd.20MHz.conf | 2 +- .../enb.band7.tm1.usrpb210.fdd.5MHz.conf | 2 +- .../v2/config/rcc.band7.tm1.if4p5.10MHz.conf | 2 +- .../v2/config/rcc.band7.tm1.if4p5.20MHz.conf | 2 +- .../v2/config/rcc.band7.tm1.if4p5.5MHz.conf | 2 +- ...ru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf | 2 +- ...ru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf | 2 +- ...rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf | 2 +- cmake_targets/build_oai | 169 +- cmake_targets/tools/build_helper | 64 +- cmake_targets/tools/init_nas_nos1 | 2 +- cmake_targets/tools/init_nas_s1 | 0 cmake_targets/tools/test_helper | 8 +- common/config/config_cmdline.c | 89 +- common/config/config_load_configmodule.c | 124 +- common/config/config_load_configmodule.h | 28 +- common/config/config_paramdesc.h | 3 + common/config/config_userapi.c | 146 +- common/config/config_userapi.h | 15 + common/config/libconfig/config_libconfig.c | 98 +- common/utils/T/T.c | 22 + common/utils/T/T.h | 75 +- common/utils/T/T_defs.h | 4 +- common/utils/T/T_messages.txt | 45 +- common/utils/T/local_tracer.c | 14 +- .../utils/T/tracer/extract_input_subframe.c | 7 +- .../utils/T/tracer/extract_output_subframe.c | 6 - common/utils/T/tracer/gui/test.c | 6 - common/utils/T/tracer/gui/x.c | 22 - common/utils/T/tracer/gui/xy_plot.c | 159 - common/utils/T/tracer/logger/iqlog.c | 36 - common/utils/T/tracer/packet-mac-lte.h | 249 - common/utils/hashtable/hashtable.c | 3 +- common/utils/itti/assertions.h | 2 + common/utils/itti/intertask_interface.c | 74 +- common/utils/itti/intertask_interface_dump.c | 790 - common/utils/itti/intertask_interface_dump.h | 34 - common/utils/itti/intertask_interface_init.h | 7 +- common/utils/itti/signals.c | 7 +- .../utils/itti_analyzer/libparser/xml_parse.c | 19 - common/utils/telnetsrv/telnetsrv_phycmd.h | 2 +- common/utils/telnetsrv/telnetsrv_proccmd.c | 22 +- nfapi/oai_integration/nfapi_pnf.c | 30 +- nfapi/oai_integration/nfapi_vnf.c | 12 - .../nfapi/public_inc/nfapi_interface.h | 19 +- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 16 +- nfapi/open-nFAPI/pnf/src/pnf_p7.c | 4 - nfapi/open-nFAPI/vnf/src/vnf_p7.c | 4 +- nfapi/open-nFAPI/vnf/src/vnf_p7_interface.c | 14 - openair1/PHY/CODING/3gpplte.c | 220 +- openair1/PHY/CODING/3gpplte_sse.c | 10 +- .../CODING/3gpplte_turbo_decoder_avx2_16bit.c | 135 - .../PHY/CODING/3gpplte_turbo_decoder_sse.c | 5 - .../CODING/3gpplte_turbo_decoder_sse_16bit.c | 44 +- .../CODING/3gpplte_turbo_decoder_sse_8bit.c | 302 +- openair1/PHY/CODING/TESTBENCH/ltetest.c | 1 - openair1/PHY/CODING/TESTBENCH/pdcch_test.c | 4 - openair1/PHY/CODING/TESTBENCH/viterbi_test.c | 2 - openair1/PHY/CODING/coding_defs.h | 40 +- openair1/PHY/CODING/coding_extern.h | 9 +- openair1/PHY/CODING/coding_load.c | 59 +- openair1/PHY/CODING/coding_vars.h | 23 - openair1/PHY/CODING/crc_byte.c | 265 +- openair1/PHY/CODING/extern_3GPPinterleaver.h | 32 - openair1/PHY/CODING/lte_interleaver.h | 710716 --------------- openair1/PHY/CODING/lte_interleaver2.h | 210 - openair1/PHY/INIT/init_top.c | 2 - openair1/PHY/INIT/lte_init.c | 12 +- openair1/PHY/INIT/lte_init_ru.c | 2 +- openair1/PHY/INIT/lte_init_ue.c | 15 +- openair1/PHY/INIT/lte_parms.c | 4 +- openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c | 2 +- .../PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c | 4 +- .../PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c | 2 +- .../lte_dl_bf_channel_estimation.c | 4 +- .../lte_dl_channel_estimation.c | 2 +- .../lte_dl_mbsfn_channel_estimation.c | 2 +- .../PHY/LTE_ESTIMATION/lte_eNB_measurements.c | 6 +- openair1/PHY/LTE_ESTIMATION/lte_sync_time.c | 14 +- .../PHY/LTE_ESTIMATION/lte_sync_timefreq.c | 12 +- .../PHY/LTE_ESTIMATION/lte_ue_measurements.c | 16 +- .../lte_ul_channel_estimation.c | 26 +- openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c | 12 +- openair1/PHY/LTE_REFSIG/lte_dl_uespec.c | 12 +- openair1/PHY/LTE_REFSIG/lte_gold.c | 40 +- openair1/PHY/LTE_REFSIG/lte_refsig.h | 5 +- openair1/PHY/LTE_TRANSPORT/dci.c | 16 +- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 172 +- openair1/PHY/LTE_TRANSPORT/dci_tools_common.c | 119 +- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 97 +- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 58 +- openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c | 59 +- openair1/PHY/LTE_TRANSPORT/if5_tools.c | 4 +- openair1/PHY/LTE_TRANSPORT/pbch.c | 6 +- openair1/PHY/LTE_TRANSPORT/prach.c | 37 +- openair1/PHY/LTE_TRANSPORT/prach_common.c | 2 +- openair1/PHY/LTE_TRANSPORT/pucch.c | 25 +- openair1/PHY/LTE_TRANSPORT/transport_common.h | 6 +- openair1/PHY/LTE_TRANSPORT/transport_eNB.h | 17 +- openair1/PHY/LTE_TRANSPORT/transport_proto.h | 11 +- openair1/PHY/LTE_TRANSPORT/uci_tools.c | 7 +- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 92 +- .../PHY/LTE_TRANSPORT/ulsch_demodulation.c | 71 +- openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c | 10 +- openair1/PHY/LTE_UE_TRANSPORT/dci_ue.c | 6 +- .../PHY/LTE_UE_TRANSPORT/dlsch_decoding.c | 77 +- .../PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 1897 +- .../LTE_UE_TRANSPORT/dlsch_llr_computation.c | 285 +- openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c | 25 +- openair1/PHY/LTE_UE_TRANSPORT/phich_ue.c | 4 +- openair1/PHY/LTE_UE_TRANSPORT/pmch_ue.c | 26 +- openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c | 10 +- openair1/PHY/LTE_UE_TRANSPORT/rar_tools_ue.c | 2 +- .../PHY/LTE_UE_TRANSPORT/srs_modulation.c | 107 - openair1/PHY/LTE_UE_TRANSPORT/sss_ue.c | 12 +- .../PHY/LTE_UE_TRANSPORT/transport_proto_ue.h | 53 +- openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c | 28 +- openair1/PHY/MODULATION/ul_7_5_kHz.c | 3 + openair1/PHY/TOOLS/file_output.c | 180 - openair1/PHY/TOOLS/lte_dfts.c | 182 +- openair1/PHY/TOOLS/tools_defs.h | 11 - openair1/PHY/defs_UE.h | 44 +- openair1/PHY/defs_common.h | 23 +- openair1/PHY/defs_eNB.h | 52 +- openair1/PHY/impl_defs_lte.h | 10 - openair1/PHY/impl_defs_top.h | 8 +- openair1/PHY/phy_extern.h | 1 - openair1/PHY/phy_extern_ue.h | 1 - openair1/PHY/phy_vars.h | 2 - openair1/PHY/phy_vars_ue.h | 2 - openair1/SCHED/fapi_l1.c | 128 +- openair1/SCHED/phy_procedures_lte_common.c | 61 +- openair1/SCHED/phy_procedures_lte_eNb.c | 358 +- openair1/SCHED/ru_procedures.c | 50 +- openair1/SCHED/sched_common.h | 12 +- openair1/SCHED/sched_eNB.h | 4 +- openair1/SCHED_UE/phy_procedures_lte_ue.c | 322 +- openair1/SCHED_UE/pusch_pc.c | 2 +- .../SIMULATION/ETH_TRANSPORT/multicast_link.c | 37 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 108 +- openair1/SIMULATION/LTE_PHY/dlsim_tm4.c | 84 +- openair1/SIMULATION/LTE_PHY/dlsim_tm7.c | 81 +- openair1/SIMULATION/LTE_PHY/dummy_functions.c | 2 +- openair1/SIMULATION/LTE_PHY/framegen.c | 4 +- openair1/SIMULATION/LTE_PHY/mbmssim.c | 6 +- openair1/SIMULATION/LTE_PHY/pbchsim.c | 46 +- openair1/SIMULATION/LTE_PHY/pdcchsim.c | 40 +- openair1/SIMULATION/LTE_PHY/prachsim.c | 14 +- openair1/SIMULATION/LTE_PHY/pucchsim.c | 14 +- openair1/SIMULATION/LTE_PHY/scansim.c | 8 +- openair1/SIMULATION/LTE_PHY/syncsim.c | 42 +- openair1/SIMULATION/LTE_PHY/test.c | 4 +- openair1/SIMULATION/LTE_PHY/ulsim.c | 45 +- openair1/SIMULATION/LTE_PHY/ulsim2.c | 40 +- openair1/SIMULATION/LTE_PHY/unitary_defs.h | 2 +- openair1/SIMULATION/RF/adc.c | 5 - openair1/SIMULATION/RF/dac.c | 4 +- openair1/SIMULATION/RF/rf.c | 16 +- openair1/SIMULATION/RF/rf.h | 6 +- openair1/SIMULATION/TOOLS/rangen_double.c | 27 - openair1/SIMULATION/TOOLS/sim.h | 41 +- openair1/SIMULATION/TOOLS/taus.c | 29 - openair2/COMMON/gtpv1_u_messages_types.h | 2 +- openair2/COMMON/mac_rrc_primitives.h | 4 +- openair2/COMMON/platform_constants.h | 15 +- openair2/COMMON/platform_types.h | 2 +- openair2/COMMON/ral_messages_types.h | 2 +- openair2/COMMON/rrc_messages_types.h | 14 +- openair2/COMMON/s1ap_messages_def.h | 2 +- openair2/ENB_APP/MACRLC_paramdef.h | 13 +- openair2/ENB_APP/NB_IoT_config.c | 2 +- openair2/ENB_APP/enb_config.c | 94 +- openair2/ENB_APP/enb_config.h | 2 +- openair2/ENB_APP/enb_paramdef.h | 44 +- openair2/ENB_APP/flexran_agent_defs.h | 2 +- openair2/ENB_APP/flexran_agent_ran_api.c | 6 +- openair2/LAYER2/MAC/config.c | 11 +- openair2/LAYER2/MAC/config_NB_IoT.h | 54 +- openair2/LAYER2/MAC/config_ue.c | 4 +- openair2/LAYER2/MAC/eNB_scheduler.c | 95 +- openair2/LAYER2/MAC/eNB_scheduler_RA.c | 114 +- openair2/LAYER2/MAC/eNB_scheduler_dlsch.c | 162 +- openair2/LAYER2/MAC/eNB_scheduler_mch.c | 4 +- openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 54 +- .../LAYER2/MAC/eNB_scheduler_primitives.c | 611 +- openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 300 +- openair2/LAYER2/MAC/mac.h | 90 +- openair2/LAYER2/MAC/mac_extern.h | 10 + openair2/LAYER2/MAC/mac_proto.h | 54 +- openair2/LAYER2/MAC/mac_vars.h | 2 + openair2/LAYER2/MAC/main.c | 36 +- openair2/LAYER2/MAC/pre_processor.c | 246 +- openair2/LAYER2/MAC/proto_NB_IoT.h | 2 +- openair2/LAYER2/MAC/ra_procedures.c | 8 +- openair2/LAYER2/MAC/rar_tools.c | 12 +- openair2/LAYER2/MAC/rar_tools_ue.c | 2 +- openair2/LAYER2/MAC/ue_procedures.c | 43 +- openair2/LAYER2/PDCP_v10.1.0/pdcp.c | 43 +- openair2/LAYER2/PDCP_v10.1.0/pdcp.h | 208 +- .../PDCP_v10.1.0/pdcp_control_primitive.c | 1 + openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c | 29 +- .../LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h | 2 +- .../PDCP_v10.1.0/pdcp_sequence_manager.c | 16 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c | 8 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h | 61 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c | 18 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h | 24 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h | 25 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c | 21 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h | 23 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c | 28 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h | 31 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c | 787 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h | 50 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c | 571 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h | 36 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c | 27 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h | 19 +- .../RLC/AM_v9.3.0/rlc_am_segments_holes.c | 299 +- .../RLC/AM_v9.3.0/rlc_am_segments_holes.h | 33 +- .../RLC/AM_v9.3.0/rlc_am_status_report.c | 401 +- .../RLC/AM_v9.3.0/rlc_am_status_report.h | 41 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c | 4 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h | 43 +- .../AM_v9.3.0/rlc_am_timer_poll_retransmit.c | 13 +- .../AM_v9.3.0/rlc_am_timer_poll_retransmit.h | 35 +- .../RLC/AM_v9.3.0/rlc_am_timer_reordering.c | 15 +- .../RLC/AM_v9.3.0/rlc_am_timer_reordering.h | 31 +- .../AM_v9.3.0/rlc_am_timer_status_prohibit.h | 24 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h | 43 +- openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h | 50 +- openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c | 1 + openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h | 39 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c | 9 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h | 80 +- .../RLC/UM_v9.3.0/rlc_um_control_primitives.c | 56 +- .../RLC/UM_v9.3.0/rlc_um_control_primitives.h | 45 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c | 79 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h | 45 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h | 17 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h | 21 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h | 20 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c | 18 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h | 19 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c | 7 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h | 49 +- .../RLC/UM_v9.3.0/rlc_um_very_simple_test.h | 17 +- openair2/LAYER2/RLC/rlc.c | 50 +- openair2/LAYER2/RLC/rlc.h | 141 +- openair2/LAYER2/RLC/rlc_mac.c | 39 +- openair2/LAYER2/RLC/rlc_mpls.c | 2 +- openair2/LAYER2/RLC/rlc_rrc.c | 76 +- openair2/NETWORK_DRIVER/UE_IP/common.c | 2 +- openair2/NETWORK_DRIVER/UE_IP/device.c | 31 +- openair2/NETWORK_DRIVER/UE_IP/local.h | 5 +- openair2/PHY_INTERFACE/IF_Module.c | 36 +- openair2/PHY_INTERFACE/UE_MAC_interface.h | 4 +- openair2/PHY_INTERFACE/phy_stub_UE.c | 57 +- openair2/PHY_INTERFACE/phy_stub_UE.h | 4 +- .../L2_INTERFACE/openair_rrc_L2_interface.c | 2 +- openair2/RRC/LTE/L2_interface.c | 158 +- openair2/RRC/LTE/L2_interface_common.c | 5 + openair2/RRC/LTE/L2_interface_ue.c | 5 +- openair2/RRC/LTE/MESSAGES/asn1_msg.c | 192 +- openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c | 11 + openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.h | 2 +- openair2/RRC/LTE/defs_NB_IoT.h | 2 +- openair2/RRC/LTE/rrc_UE.c | 140 +- openair2/RRC/LTE/rrc_UE_ral.c | 4 +- openair2/RRC/LTE/rrc_UE_ral.h | 21 +- openair2/RRC/LTE/rrc_defs.h | 11 +- openair2/RRC/LTE/rrc_eNB.c | 771 +- openair2/RRC/LTE/rrc_eNB_S1AP.c | 72 +- openair2/RRC/LTE/rrc_eNB_UE_context.c | 3 - openair2/RRC/LTE/rrc_eNB_ral.c | 4 +- openair2/RRC/LTE/rrc_eNB_ral.h | 23 +- openair2/RRC/LTE/rrc_proto.h | 8 +- openair2/UTIL/CLI/cli_if.h | 24 +- openair2/UTIL/FIFO/pad_list.h | 73 +- openair2/UTIL/LISTS/list.h | 84 +- openair2/UTIL/LOG/log.c | 1340 +- openair2/UTIL/LOG/log.h | 96 +- openair2/UTIL/LOG/log_extern.h | 3 + openair2/UTIL/LOG/vcd_signal_dumper.c | 8 +- openair2/UTIL/LOG/vcd_signal_dumper.h | 29 +- openair2/UTIL/MEM/mem_block.c | 6 +- openair2/UTIL/MEM/mem_block.h | 52 +- openair2/UTIL/OPT/packet-mac-lte.h | 40 - openair2/UTIL/TIMER/umts_timer.c | 1 + .../X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile | 81 - .../X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile.inc | 462 - .../ASN1/R.UNKNOWN/X2AP-CommonDataTypes.asn | 126 - .../ASN1/R.UNKNOWN/X2AP-Constants.asn | 138 - .../ASN1/R.UNKNOWN/X2AP-Containers.asn | 194 - .../X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-IEs.asn | 989 - .../ASN1/R.UNKNOWN/X2AP-PDU-Contents.asn | 951 - .../ASN1/R.UNKNOWN/X2AP-PDU-Definitions.asn | 240 - .../ASN1/R.UNKNOWN/X2AP-PDU-Descriptions.asn | 241 - .../X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU.asn | 199 - .../X2AP/MESSAGES/ASN1/R11.2/Makefile.inc | 462 - .../ASN1/R11.2/X2AP-CommonDataTypes.asn | 142 - .../MESSAGES/ASN1/R11.2/X2AP-Constants.asn | 162 - .../MESSAGES/ASN1/R11.2/X2AP-Containers.asn | 195 - .../X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn | 1447 - .../MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn | 892 - .../ASN1/R11.2/X2AP-PDU-Descriptions.asn | 243 - .../X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn | 199 - openair2/X2AP/x2ap_common.c | 87 +- openair2/X2AP/x2ap_common.h | 294 +- openair3/COMMON/s1ap_messages_def.h | 1 + openair3/COMMON/security_types.h | 9 - openair3/GTPV1-U/gtpv1u_eNB.c | 4 +- openair3/GTPV1-U/gtpv1u_eNB_defs.h | 2 +- .../ActivateDefaultEpsBearerContextRequest.c | 25 - openair3/NAS/COMMON/IES/EsmMessageContainer.c | 4 - openair3/NAS/COMMON/IES/MobileIdentity.h | 31 - openair3/NAS/COMMON/UTIL/device.c | 12 - openair3/NAS/COMMON/commonDef.h | 11 - openair3/NAS/COMMON/networkDef.h | 9 - openair3/NAS/TEST/AS_SIMULATOR/nas_process.c | 10 +- openair3/NAS/TEST/USER/user_simulator.c | 17 - .../ASN1/R10.5/S1AP-CommonDataTypes.asn | 232 - .../MESSAGES/ASN1/R10.5/S1AP-Constants.asn | 283 - .../MESSAGES/ASN1/R10.5/S1AP-Containers.asn | 197 - .../S1AP/MESSAGES/ASN1/R10.5/S1AP-IEs.asn | 1422 - .../MESSAGES/ASN1/R10.5/S1AP-PDU-Contents.asn | 2409 - .../ASN1/R10.5/S1AP-PDU-Descriptions.asn | 590 - .../S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU.asn | 412 - .../ASN1/R8.10/S1AP-CommonDataTypes.asn | 201 - .../MESSAGES/ASN1/R8.10/S1AP-Constants.asn | 249 - .../S1AP/MESSAGES/ASN1/R8.10/S1AP-IEs.asn | 1401 - .../MESSAGES/ASN1/R8.10/S1AP-PDU-Contents.asn | 2069 - .../S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU.asn | 663 - .../ASN1/R9.8/S1AP-CommonDataTypes.asn | 217 - .../MESSAGES/ASN1/R9.8/S1AP-Constants.asn | 265 - .../MESSAGES/ASN1/R9.8/S1AP-Containers.asn | 197 - openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-IEs.asn | 1213 - .../MESSAGES/ASN1/R9.8/S1AP-PDU-Contents.asn | 2419 - .../ASN1/R9.8/S1AP-PDU-Descriptions.asn | 591 - openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU.asn | 413 - openair3/S1AP/s1ap_common.c | 144 +- openair3/S1AP/s1ap_common.h | 437 +- openair3/S1AP/s1ap_eNB.c | 183 +- .../s1ap_eNB_context_management_procedures.c | 227 +- openair3/S1AP/s1ap_eNB_decoder.c | 367 +- openair3/S1AP/s1ap_eNB_decoder.h | 3 +- openair3/S1AP/s1ap_eNB_encoder.c | 724 +- openair3/S1AP/s1ap_eNB_encoder.h | 2 +- openair3/S1AP/s1ap_eNB_handlers.c | 1217 +- openair3/S1AP/s1ap_eNB_itti_messaging.c | 3 +- openair3/S1AP/s1ap_eNB_nas_procedures.c | 1339 +- openair3/S1AP/s1ap_eNB_nas_procedures.h | 14 +- openair3/S1AP/s1ap_eNB_overload.c | 34 +- openair3/S1AP/s1ap_eNB_overload.h | 12 +- openair3/S1AP/s1ap_eNB_trace.c | 98 +- openair3/S1AP/s1ap_eNB_trace.h | 12 +- openair3/SCTP/sctp_eNB_task.c | 15 - .../enb.band7.tm1.usrpb210.epc.local.conf | 2 +- .../TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb1.conf | 2 +- openair3/TEST/EPC_TEST/generate_scenario.h | 2 +- openair3/TEST/EPC_TEST/play_scenario.c | 2 +- openair3/TEST/EPC_TEST/play_scenario_decode.c | 152 +- openair3/TEST/EPC_TEST/play_scenario_s1ap.c | 59 +- .../EPC_TEST/play_scenario_s1ap_compare_ie.c | 399 +- openair3/TEST/oaisim_mme_client_test.c | 1 - openair3/TEST/oaisim_mme_itti_test.c | 2 +- openair3/TEST/oaisim_mme_s1ap_test.c | 10 +- openair3/TEST/oaisim_mme_sctp_test.c | 1 - openair3/TEST/oaisim_mme_test_s1c.c | 7 +- openair3/TEST/oaisim_mme_test_s1c_s1ap.c | 5 +- openair3/UDP/udp_eNB_task.c | 5 +- .../ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c | 2 +- .../EXMIMO/DRIVER/telecomparistech/em1_drv.h | 17 - targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 7 +- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.h | 2 +- targets/ARCH/mobipass/queues.c | 14 - targets/ARCH/tcp_bridge/README.tcp_bridge_oai | 5 +- targets/ARCH/tcp_bridge/tcp_bridge.c | 8 - targets/COMMON/openairinterface5g_limits.h | 19 +- .../CONF/enb.band38.tm1.100PRB.usrpx310.conf | 2 +- .../CONF/enb.band38.tm1.usrpx310.conf | 2 +- .../CONF/enb.band7.tm1.100PRB.usrpx310.conf | 4 +- .../enb.band7.tm1.50PRB.usrpb210-d2d.conf | 2 +- .../CONF/enb.band7.tm1.50PRB.usrpb210.conf | 6 +- .../CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf | 2 +- .../CONF/rcc.band7.tm1.50PRB.nfapi.conf | 2 +- .../CONF/rcc.band7.tm1.if4p5.50PRB.conf | 4 +- .../CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf | 2 +- .../GENERIC-LTE-EPC/CONF/rru.oaisim.conf | 6 +- targets/README.txt | 3 +- targets/RT/USER/lte-enb.c | 62 +- targets/RT/USER/lte-ru.c | 432 +- targets/RT/USER/lte-softmodem.c | 82 +- targets/RT/USER/lte-softmodem.h | 49 +- targets/RT/USER/lte-ue.c | 457 +- targets/RT/USER/lte-uesoftmodem.c | 398 +- targets/RT/USER/rru_if4p5_usrp.gtkw | 39 +- .../SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile | 14 - .../SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_enb | 71 - .../SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_ue | 67 - .../AT_serial_bouchon.py | 209 - .../Makefile | 20 - .../start_enb | 86 - .../start_enb_v2 | 320 - .../start_ue | 259 - .../start_ue_cx2android | 426 - .../SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/Makefile | 13 - .../SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_enb | 34 - .../SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue1 | 31 - .../SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue2 | 30 - targets/SIMU/EXAMPLES/OSD/README.txt | 4 - .../SIMU/EXAMPLES/OSD/WEBXML/template_0.xml | 147 - .../SIMU/EXAMPLES/OSD/WEBXML/template_1.xml | 12 - .../SIMU/EXAMPLES/OSD/WEBXML/template_10.xml | 77 - .../SIMU/EXAMPLES/OSD/WEBXML/template_11.xml | 123 - .../SIMU/EXAMPLES/OSD/WEBXML/template_120.xml | 106 - .../SIMU/EXAMPLES/OSD/WEBXML/template_121.xml | 106 - .../SIMU/EXAMPLES/OSD/WEBXML/template_122.xml | 105 - .../SIMU/EXAMPLES/OSD/WEBXML/template_123.xml | 105 - .../SIMU/EXAMPLES/OSD/WEBXML/template_124.xml | 105 - .../SIMU/EXAMPLES/OSD/WEBXML/template_125.xml | 106 - .../SIMU/EXAMPLES/OSD/WEBXML/template_126.xml | 106 - .../SIMU/EXAMPLES/OSD/WEBXML/template_127.xml | 106 - .../SIMU/EXAMPLES/OSD/WEBXML/template_128.xml | 106 - .../SIMU/EXAMPLES/OSD/WEBXML/template_129.xml | 106 - .../SIMU/EXAMPLES/OSD/WEBXML/template_13.xml | 66 - .../SIMU/EXAMPLES/OSD/WEBXML/template_14.xml | 67 - .../SIMU/EXAMPLES/OSD/WEBXML/template_15.xml | 84 - .../SIMU/EXAMPLES/OSD/WEBXML/template_16.xml | 70 - .../SIMU/EXAMPLES/OSD/WEBXML/template_17.xml | 71 - .../SIMU/EXAMPLES/OSD/WEBXML/template_18.xml | 55 - .../SIMU/EXAMPLES/OSD/WEBXML/template_19.xml | 77 - .../SIMU/EXAMPLES/OSD/WEBXML/template_2.xml | 56 - .../SIMU/EXAMPLES/OSD/WEBXML/template_20.xml | 87 - .../SIMU/EXAMPLES/OSD/WEBXML/template_21.xml | 55 - .../SIMU/EXAMPLES/OSD/WEBXML/template_22.xml | 105 - .../SIMU/EXAMPLES/OSD/WEBXML/template_26.xml | 93 - .../SIMU/EXAMPLES/OSD/WEBXML/template_27.xml | 90 - .../SIMU/EXAMPLES/OSD/WEBXML/template_29.xml | 104 - .../SIMU/EXAMPLES/OSD/WEBXML/template_3.xml | 63 - .../SIMU/EXAMPLES/OSD/WEBXML/template_33.xml | 93 - .../SIMU/EXAMPLES/OSD/WEBXML/template_34.xml | 53 - .../SIMU/EXAMPLES/OSD/WEBXML/template_4.xml | 44 - .../SIMU/EXAMPLES/OSD/WEBXML/template_40.xml | 84 - .../SIMU/EXAMPLES/OSD/WEBXML/template_41.xml | 92 - .../SIMU/EXAMPLES/OSD/WEBXML/template_42.xml | 70 - .../SIMU/EXAMPLES/OSD/WEBXML/template_43.xml | 70 - .../SIMU/EXAMPLES/OSD/WEBXML/template_5.xml | 104 - .../SIMU/EXAMPLES/OSD/WEBXML/template_6.xml | 43 - .../SIMU/EXAMPLES/OSD/WEBXML/template_60.xml | 96 - .../SIMU/EXAMPLES/OSD/WEBXML/template_7.xml | 56 - .../SIMU/EXAMPLES/OSD/WEBXML/template_70.xml | 111 - .../SIMU/EXAMPLES/OSD/WEBXML/template_8.xml | 52 - .../SIMU/EXAMPLES/OSD/WEBXML/template_9.xml | 64 - targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/Makefile | 46 - .../VIRT_EMUL_1eNB/start_one_eNB_multi_UE_nas | 53 - .../start_one_eNB_two_UE_PHY_nas | 53 - .../EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/Makefile | 31 - .../start_one_eNB_multi_UE_nas | 531 - targets/SIMU/PROC/Process.c | 531 - targets/SIMU/PROC/Process.h | 59 - targets/SIMU/PROC/SCRIPT/Run.py | 61 - targets/SIMU/PROC/Tsync.h | 63 - targets/SIMU/PROC/channel_sim_proc.c | 677 - targets/SIMU/PROC/channel_sim_proc.h | 45 - targets/SIMU/PROC/interface.h | 87 - targets/SIMU/USER/.ue.nvram | Bin 55 -> 0 bytes targets/SIMU/USER/.ue_emm.nvram | Bin 61 -> 0 bytes targets/SIMU/USER/.usim.nvram | Bin 616 -> 0 bytes targets/SIMU/USER/Makefile | 503 - targets/SIMU/USER/channel_sim.c | 618 - targets/SIMU/USER/cor_SF_sim.c | 216 - targets/SIMU/USER/cor_SF_sim.h | 31 - targets/SIMU/USER/event_handler.c | 2568 - targets/SIMU/USER/event_handler.h | 65 - targets/SIMU/USER/files/MI_16qam.csv | 3 - targets/SIMU/USER/files/MI_16qam.txt | 3 - targets/SIMU/USER/files/MI_4qam.csv | 3 - targets/SIMU/USER/files/MI_4qam.txt | 3 - targets/SIMU/USER/files/MI_64qam.csv | 3 - targets/SIMU/USER/files/MI_64qam.txt | 3 - targets/SIMU/USER/init_lte.c | 278 - targets/SIMU/USER/init_lte.h | 48 - targets/SIMU/USER/oaisim.c | 1845 - targets/SIMU/USER/oaisim.h | 92 - targets/SIMU/USER/oaisim_config.c | 1349 - targets/SIMU/USER/oaisim_config.h | 83 - targets/SIMU/USER/oaisim_functions.c | 1686 - targets/SIMU/USER/oaisim_functions.h | 70 - targets/SIMU/USER/oaisim_pad.c | 1149 - targets/SIMU/USER/phy_procedures_sim_form.c | 48 - targets/SIMU/USER/phy_procedures_sim_form.fd | 88 - targets/SIMU/USER/phy_procedures_sim_form.h | 43 - targets/SIMU/USER/plot_results.m | 57 - targets/SIMU/USER/sinr_sim.c | 679 - targets/SIMU/USER/threadpool.c | 346 - targets/SIMU/USER/threadpool.h | 101 - targets/SIMU/USER/valgrind.sh | 2 - targets/TEST/AT_COMMANDS/oaisim.c | 2 +- targets/TEST/PACKET_TRACER/pt.c | 2 +- targets/TEST/PDCP/test_pdcp.c | 3 - targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c | 4 +- targets/TEST/RLC_AM_V9.3.0/oaisim.c | 2 +- targets/TEST/RLC_UM_V9.3.0/oaisim.c | 2 +- targets/build_helper.bash | 384 +- 516 files changed, 11979 insertions(+), 768789 deletions(-) mode change 100644 => 100755 cmake_targets/tools/init_nas_s1 delete mode 100644 common/utils/itti/intertask_interface_dump.c delete mode 100644 common/utils/itti/intertask_interface_dump.h delete mode 100644 openair1/PHY/CODING/coding_vars.h delete mode 100644 openair1/PHY/CODING/extern_3GPPinterleaver.h delete mode 100644 openair1/PHY/CODING/lte_interleaver.h delete mode 100644 openair1/PHY/CODING/lte_interleaver2.h delete mode 100644 openair1/PHY/TOOLS/file_output.c delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile delete mode 100644 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile.inc delete mode 100644 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-CommonDataTypes.asn delete mode 100644 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-Constants.asn delete mode 100644 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-Containers.asn delete mode 100644 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-IEs.asn delete mode 100644 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Contents.asn delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Definitions.asn delete mode 100644 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Descriptions.asn delete mode 100644 openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU.asn delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R11.2/Makefile.inc delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-CommonDataTypes.asn delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-Constants.asn delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-Containers.asn delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Descriptions.asn delete mode 100755 openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-CommonDataTypes.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-Constants.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-Containers.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-IEs.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU-Contents.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU-Descriptions.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-CommonDataTypes.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-Constants.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-IEs.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU-Contents.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-CommonDataTypes.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-Constants.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-Containers.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-IEs.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU-Contents.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU-Descriptions.asn delete mode 100644 openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU.asn delete mode 100644 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_enb delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_ue delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/AT_serial_bouchon.py delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/Makefile delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_enb delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_enb_v2 delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_ue delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_ue_cx2android delete mode 100644 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/Makefile delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_enb delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue1 delete mode 100755 targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue2 delete mode 100644 targets/SIMU/EXAMPLES/OSD/README.txt delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_0.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_1.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_10.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_11.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_120.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_121.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_122.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_123.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_124.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_125.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_126.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_127.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_128.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_129.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_13.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_14.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_15.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_16.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_17.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_18.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_19.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_2.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_20.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_21.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_22.xml delete mode 100755 targets/SIMU/EXAMPLES/OSD/WEBXML/template_26.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_27.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_29.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_3.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_33.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_34.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_4.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_40.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_41.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_42.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_43.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_5.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_6.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_60.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_7.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_70.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_8.xml delete mode 100644 targets/SIMU/EXAMPLES/OSD/WEBXML/template_9.xml delete mode 100644 targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/Makefile delete mode 100755 targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/start_one_eNB_multi_UE_nas delete mode 100755 targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/start_one_eNB_two_UE_PHY_nas delete mode 100755 targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/Makefile delete mode 100755 targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/start_one_eNB_multi_UE_nas delete mode 100644 targets/SIMU/PROC/Process.c delete mode 100644 targets/SIMU/PROC/Process.h delete mode 100755 targets/SIMU/PROC/SCRIPT/Run.py delete mode 100644 targets/SIMU/PROC/Tsync.h delete mode 100644 targets/SIMU/PROC/channel_sim_proc.c delete mode 100644 targets/SIMU/PROC/channel_sim_proc.h delete mode 100644 targets/SIMU/PROC/interface.h delete mode 100644 targets/SIMU/USER/.ue.nvram delete mode 100644 targets/SIMU/USER/.ue_emm.nvram delete mode 100644 targets/SIMU/USER/.usim.nvram delete mode 100644 targets/SIMU/USER/Makefile delete mode 100644 targets/SIMU/USER/channel_sim.c delete mode 100644 targets/SIMU/USER/cor_SF_sim.c delete mode 100644 targets/SIMU/USER/cor_SF_sim.h delete mode 100644 targets/SIMU/USER/event_handler.c delete mode 100644 targets/SIMU/USER/event_handler.h delete mode 100644 targets/SIMU/USER/files/MI_16qam.csv delete mode 100644 targets/SIMU/USER/files/MI_16qam.txt delete mode 100644 targets/SIMU/USER/files/MI_4qam.csv delete mode 100644 targets/SIMU/USER/files/MI_4qam.txt delete mode 100644 targets/SIMU/USER/files/MI_64qam.csv delete mode 100644 targets/SIMU/USER/files/MI_64qam.txt delete mode 100644 targets/SIMU/USER/init_lte.c delete mode 100644 targets/SIMU/USER/init_lte.h delete mode 100644 targets/SIMU/USER/oaisim.c delete mode 100644 targets/SIMU/USER/oaisim.h delete mode 100644 targets/SIMU/USER/oaisim_config.c delete mode 100644 targets/SIMU/USER/oaisim_config.h delete mode 100644 targets/SIMU/USER/oaisim_functions.c delete mode 100644 targets/SIMU/USER/oaisim_functions.h delete mode 100644 targets/SIMU/USER/oaisim_pad.c delete mode 100644 targets/SIMU/USER/phy_procedures_sim_form.c delete mode 100644 targets/SIMU/USER/phy_procedures_sim_form.fd delete mode 100644 targets/SIMU/USER/phy_procedures_sim_form.h delete mode 100644 targets/SIMU/USER/plot_results.m delete mode 100644 targets/SIMU/USER/sinr_sim.c delete mode 100644 targets/SIMU/USER/threadpool.c delete mode 100644 targets/SIMU/USER/threadpool.h delete mode 100755 targets/SIMU/USER/valgrind.sh diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index 510d594eb5..d3e55c9655 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -8,49 +8,208 @@ pipeline { disableConcurrentBuilds() timestamps() gitLabConnection('OAI GitLab') - //gitlabBuilds(builds: ["Build", "Test"]) + gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim"]) } stages { - stage ("Verify Parameters") { + stage ("Verify Guidelines") { steps { - echo 'Verify Parameters' echo "Git URL is ${GIT_URL}" echo "GitLab Act is ${env.gitlabActionType}" script { if ("MERGE".equals(env.gitlabActionType)) { - // GitLab-Jenkins pugin integration is lacking to perform the merge by itself + // GitLab-Jenkins plugin integration is lacking to perform the merge by itself // Doing it manually --> it may have merge conflicts - sh "./ci-scripts/doGitLabMerge.sh ${env.gitlabSourceBranch} ${env.gitlabMergeRequestLastCommit} ${env.gitlabTargetBranch} ${GIT_COMMIT}" - sh "./ci-scripts/checkCodingFormattingRules.sh ${env.gitlabSourceBranch} ${env.gitlabTargetBranch}" + sh "./ci-scripts/doGitLabMerge.sh --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}" + sh "zip -r -qq localZip.zip ." + + // Running astyle options on the list of modified files by the merge request + // For the moment, there is no fail criteria. Just a notification of number of files that do not follow + sh "./ci-scripts/checkCodingFormattingRules.sh --src-branch ${env.gitlabSourceBranch} --target-branch ${env.gitlabTargetBranch}" def res=readFile('./oai_rules_result.txt').trim(); if ("0".equals(res)) { - addGitLabMRComment comment: "All Changed files in Merge Request follow OAI Formatting Rules" + def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): All Changed files in Merge Request follow OAI Formatting Rules" + addGitLabMRComment comment: message } else { - addGitLabMRComment comment: "Some Changed files in Merge Request DO NOT follow OAI Formatting Rules" + def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Some Changed files in Merge Request DO NOT follow OAI Formatting Rules" + addGitLabMRComment comment: message } } else { echo "Git Branch is ${GIT_BRANCH}" echo "Git Commit is ${GIT_COMMIT}" + + sh "zip -r -qq localZip.zip ." + // Running astyle options on all C/H files in the repository + // For the moment, there is no fail criteria. Just a notification of number of files that do not follow sh "./ci-scripts/checkCodingFormattingRules.sh" } } } + post { + failure { + script { + def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Merge Conflicts -- Cannot perform CI" + addGitLabMRComment comment: message + } + } + } + } + + stage ("Start VM -- cppcheck") { + steps { + sh "./ci-scripts/createVM.sh --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID}" + } + } + + stage ("Start VM -- enb-usrp") { + steps { + sh "./ci-scripts/createVM.sh --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID}" + } + } + + stage ("Start VM -- basic-sim") { + steps { + sh "./ci-scripts/createVM.sh --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID}" + } + } + + stage ("Start VM -- phy-sim") { + steps { + sh "./ci-scripts/createVM.sh --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID}" + } + } + + stage ("Start VM -- enb-ethernet") { + steps { + sh "./ci-scripts/createVM.sh --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}" + } + } + + stage ("Start VM -- ue-ethernet") { + steps { + sh "./ci-scripts/createVM.sh --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}" + } + } + + stage ("Variant Builds") { + parallel { + stage ("Analysis with cppcheck") { + steps { + gitlabCommitStatus(name: "Analysis with cppcheck") { + sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + } + } + } + stage ("Build eNb-USRP") { + steps { + gitlabCommitStatus(name: "Build eNb-USRP") { + sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + } + } + } + stage ("Build basic simulator") { + steps { + gitlabCommitStatus(name: "Build basic-sim") { + sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + } + } + } + stage ("Build physical simulators") { + steps { + gitlabCommitStatus(name: "Build phy-sim") { + sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + } + } + } + stage ("Build eNb-ethernet") { + steps { + gitlabCommitStatus(name: "Build eNb-ethernet") { + sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + } + } + } + stage ("Build UE-ethernet") { + steps { + gitlabCommitStatus(name: "Build UE-ethernet") { + sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + } + } + } + } + post { + always { + script { + dir ('archives') { + sh "zip -r -qq vm_build_logs.zip basic_sim enb_usrp phy_sim cppcheck enb_eth ue_eth" + } + if(fileExists('archives/vm_build_logs.zip')) { + archiveArtifacts artifacts: 'archives/vm_build_logs.zip' + } + if ("MERGE".equals(env.gitlabActionType)) { + sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}" + } else { + sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}" + } + if(fileExists('build_results.html')) { + archiveArtifacts artifacts: 'build_results.html' + } + } + } + } + } + + stage ("Variant Tests") { + parallel { + stage ("Test physical simulators") { + steps { + gitlabCommitStatus(name: "Test phy-sim") { + sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + } + } + } + stage ("Test basic simulator") { + steps { + //gitlabCommitStatus(name: "Test basic-sim") { + sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + //} + } + } + } + post { + always { + script { + dir ('archives') { + sh "if [ -d */test ]; then zip -r -qq vm_tests_logs.zip */test ; fi" + } + if(fileExists('archives/vm_tests_logs.zip')) { + archiveArtifacts artifacts: 'archives/vm_tests_logs.zip' + archiveArtifacts artifacts: 'archives/*/test/results_autotests*.xml' + archiveArtifacts artifacts: 'archives/*/test/*.xsl' + } + } + } + } + } + stage ("Destroy all Virtual Machines") { + steps { + sh "./ci-scripts/destroyAllRunningVM.sh --job-name ${JOB_NAME} --build-id ${BUILD_ID}" + } } } post { always { script { - echo "End of script" + // Stage destroy may not be run if error in previous stage + sh "./ci-scripts/destroyAllRunningVM.sh --job-name ${JOB_NAME} --build-id ${BUILD_ID}" } } success { script { - def message = "OAI build #" + BUILD_ID + " passed (" + BUILD_URL + ")" + def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): passed (" + BUILD_URL + ")" if ("MERGE".equals(env.gitlabActionType)) { echo "This is a MERGE event" addGitLabMRComment comment: message - def message2 = "OAI build #" + BUILD_ID + " passed (" + BUILD_URL + ") -- MergeRequest #" + env.gitlabMergeRequestIid + " (" + env.gitlabMergeRequestTitle + ")" + def message2 = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): passed (" + BUILD_URL + ") -- MergeRequest #" + env.gitlabMergeRequestIid + " (" + env.gitlabMergeRequestTitle + ")" slackSend channel: 'ci-enb', color: 'good', message: message2 } else { slackSend channel: 'ci-enb', color: 'good', message: message @@ -59,11 +218,11 @@ pipeline { } failure { script { - def message = "OAI build #" + BUILD_ID + " failed (" + BUILD_URL + ")" + def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): failed (" + BUILD_URL + ")" if ("MERGE".equals(env.gitlabActionType)) { echo "This is a MERGE event" addGitLabMRComment comment: message - def message2 = "OAI build #" + BUILD_ID + " failed (" + BUILD_URL + ") -- MergeRequest #" + env.gitlabMergeRequestIid + " (" + env.gitlabMergeRequestTitle + ")" + def message2 = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): failed (" + BUILD_URL + ") -- MergeRequest #" + env.gitlabMergeRequestIid + " (" + env.gitlabMergeRequestTitle + ")" slackSend channel: 'ci-enb', color: 'danger', message: message2 } else { slackSend channel: 'ci-enb', color: 'danger', message: message diff --git a/ci-scripts/checkCodingFormattingRules.sh b/ci-scripts/checkCodingFormattingRules.sh index fb35ce35ae..20657b7fd0 100755 --- a/ci-scripts/checkCodingFormattingRules.sh +++ b/ci-scripts/checkCodingFormattingRules.sh @@ -1,51 +1,121 @@ #!/bin/bash +function usage { + echo "OAI Coding / Formatting Guideline Check script" + echo " Original Author: Raphael Defosseux" + echo "" + echo " Requirement: astyle shall be installed" + echo "" + echo " By default (no options) the complete repository will be checked" + echo " In case of merge request, provided source and target branch," + echo " the script will check only the modified files" + echo "" + echo "Usage:" + echo "------" + echo " checkCodingFormattingRules.sh [OPTIONS]" + echo "" + echo "Options:" + echo "--------" + echo " --src-branch #### OR -sb ####" + echo " Specify the source branch of the merge request." + echo "" + echo " --target-branch #### OR -tb ####" + echo " Specify the target branch of the merge request (usually develop)." + echo "" + echo " --help OR -h" + echo " Print this help message." + echo "" +} + +if [ $# -ne 4 ] && [ $# -ne 1 ] && [ $# -ne 0 ] +then + echo "Syntax Error: not the correct number of arguments" + echo "" + usage + exit 1 +fi + if [ $# -eq 0 ] then + echo " ---- Checking the whole repository ----" + echo "" NB_FILES_TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt --recursive *.c *.h | grep -c Formatted ` echo "Nb Files that do NOT follow OAI rules: $NB_FILES_TO_FORMAT" + echo $NB_FILES_TO_FORMAT > ./oai_rules_result.txt exit 0 fi -if [ $# -eq 2 ] -then - # Merge request scenario - - SOURCE_BRANCH=$1 - echo "Source Branch is : $SOURCE_BRANCH" - - TARGET_BRANCH=$2 - echo "Target Branch is : $TARGET_BRANCH" - - MERGE_COMMMIT=`git log -n1 | grep commit | sed -e "s@commit @@"` - echo "Merged Commit is : $MERGE_COMMMIT" - TARGET_INIT_COMMIT=`cat .git/refs/remotes/origin/$TARGET_BRANCH` - echo "Target Init is : $TARGET_INIT_COMMIT" - - # Retrieve the list of modified files since the latest develop commit - MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | egrep "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq` - NB_TO_FORMAT=0 - for FULLFILE in $MODIFIED_FILES - do - echo $FULLFILE - filename=$(basename -- "$FULLFILE") - EXT="${filename##*.}" - if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ] - then - TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt $FULLFILE | grep -c Formatted ` - NB_TO_FORMAT=$((NB_TO_FORMAT + TO_FORMAT)) - fi - done - echo "Nb Files that do NOT follow OAI rules: $NB_TO_FORMAT" - echo $NB_TO_FORMAT > ./oai_rules_result.txt +checker=0 +while [[ $# -gt 0 ]] +do +key="$1" +case $key in + -h|--help) + shift + usage exit 0 -fi + ;; + -sb|--src-branch) + SOURCE_BRANCH="$2" + let "checker|=0x1" + shift + shift + ;; + -tb|--target-branch) + TARGET_BRANCH="$2" + let "checker|=0x2" + shift + shift + ;; + *) + echo "Syntax Error: unknown option: $key" + echo "" + usage + exit 1 +esac -if [ $# -ne 0 ] || [ $# -ne 2 ] +done + + +if [ $checker -ne 3 ] then - echo "Syntax error: $0 without any option will check all files in repository" - echo " or: $0 source-branch target-branch" - echo " will only check files that are pushed for a merge-request" + echo "Source Branch is : $SOURCE_BRANCH" + echo "Target Branch is : $TARGET_BRANCH" + echo "" + echo "Syntax Error: missing option" + echo "" + usage exit 1 fi + +# Merge request scenario + +MERGE_COMMMIT=`git log -n1 | grep commit | sed -e "s@commit @@"` +TARGET_INIT_COMMIT=`cat .git/refs/remotes/origin/$TARGET_BRANCH` + +echo " ---- Checking the modified files by the merge request ----" +echo "" +echo "Source Branch is : $SOURCE_BRANCH" +echo "Target Branch is : $TARGET_BRANCH" +echo "Merged Commit is : $MERGE_COMMMIT" +echo "Target Init is : $TARGET_INIT_COMMIT" + +# Retrieve the list of modified files since the latest develop commit +MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | egrep "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq` +NB_TO_FORMAT=0 +for FULLFILE in $MODIFIED_FILES +do + echo $FULLFILE + filename=$(basename -- "$FULLFILE") + EXT="${filename##*.}" + if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ] + then + TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt $FULLFILE | grep -c Formatted ` + NB_TO_FORMAT=$((NB_TO_FORMAT + TO_FORMAT)) + fi +done +echo "Nb Files that do NOT follow OAI rules: $NB_TO_FORMAT" +echo $NB_TO_FORMAT > ./oai_rules_result.txt + +exit 0 diff --git a/ci-scripts/doGitLabMerge.sh b/ci-scripts/doGitLabMerge.sh index 07636cb6cb..dfe2f02b55 100755 --- a/ci-scripts/doGitLabMerge.sh +++ b/ci-scripts/doGitLabMerge.sh @@ -1,23 +1,102 @@ #!/bin/bash -if [ $# -ne 4 ] +function usage { + echo "OAI GitLab merge request applying script" + echo " Original Author: Raphael Defosseux" + echo "" + echo "Usage:" + echo "------" + echo "" + echo " doGitLabMerge.sh [OPTIONS] [MANDATORY_OPTIONS]" + echo "" + echo "Mandatory Options:" + echo "------------------" + echo "" + echo " --src-branch #### OR -sb ####" + echo " Specify the source branch of the merge request." + echo "" + echo " --src-commit #### OR -sc ####" + echo " Specify the source commit ID (SHA-1) of the merge request." + echo "" + echo " --target-branch #### OR -tb ####" + echo " Specify the target branch of the merge request (usually develop)." + echo "" + echo " --target-commit #### OR -tc ####" + echo " Specify the target commit ID (SHA-1) of the merge request." + echo "" + echo "Options:" + echo "--------" + echo " --help OR -h" + echo " Print this help message." + echo "" +} + +if [ $# -ne 8 ] && [ $# -ne 1 ] then - echo "Syntax Error: $0 src-branch src-commit-id dest-branch dest-commit-id" + echo "Syntax Error: not the correct number of arguments" + echo "" + usage exit 1 fi -SOURCE_BRANCH=$1 +checker=0 +while [[ $# -gt 0 ]] +do +key="$1" + +case $key in + -h|--help) + shift + usage + exit 0 + ;; + -sb|--src-branch) + SOURCE_BRANCH="$2" + let "checker|=0x1" + shift + shift + ;; + -sc|--src-commit) + SOURCE_COMMIT_ID="$2" + let "checker|=0x2" + shift + shift + ;; + -tb|--target-branch) + TARGET_BRANCH="$2" + let "checker|=0x4" + shift + shift + ;; + -tc|--target-commit) + TARGET_COMMIT_ID="$2" + let "checker|=0x8" + shift + shift + ;; + *) + echo "Syntax Error: unknown option: $key" + echo "" + usage + exit 1 +esac + +done + echo "Source Branch is : $SOURCE_BRANCH" - -SOURCE_COMMIT_ID=$2 echo "Source Commit ID is : $SOURCE_COMMIT_ID" - -TARGET_BRANCH=$3 echo "Target Branch is : $TARGET_BRANCH" - -TARGET_COMMIT_ID=$4 echo "Target Commit ID is : $TARGET_COMMIT_ID" +if [ $checker -ne 15 ] +then + echo "" + echo "Syntax Error: missing option" + echo "" + usage + exit 1 +fi + git config user.email "jenkins@openairinterface.org" git config user.name "OAI Jenkins" @@ -25,3 +104,10 @@ git checkout -f $SOURCE_COMMIT_ID git merge --ff $TARGET_COMMIT_ID -m "Temporary merge for CI" +STATUS=`git status | egrep -c "You have unmerged paths.|fix conflicts"` +if [ $STATUS -ne 0 ] +then + echo "There are merge conflicts.. Cannot perform further build tasks" + STATUS=-1 +fi +exit $STATUS diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index d112660f18..f59792894e 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -170,7 +170,7 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${C_FLAGS_PROCESSOR} -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing -rdynamic -funroll-loops -Wno-packed-bitfield-compat -fPIC ") # add autotools definitions that were maybe used! set(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -D'MAKE_VERSION(a,b,c)=((a)*256+(b)*16+c)'" + "${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -DASN_DISABLE_OER_SUPPORT -D'MAKE_VERSION(a,b,c)=((a)*256+(b)*16+c)'" ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -std=c++11 " @@ -244,7 +244,7 @@ add_boolean_option(TEST_OMG False "???") add_boolean_option(DEBUG_OMG False "???") add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope") add_boolean_option(PRINT_STATS False "This adds the possibility to see the status") -add_boolean_option(T_TRACER False "Activate the T tracer, a debugging/monitoring framework" ) +add_boolean_option(T_TRACER True "Activate the T tracer, a debugging/monitoring framework" ) add_boolean_option(UE_AUTOTEST_TRACE False "Activate UE autotest specific logs") add_boolean_option(UE_DEBUG_TRACE False "Activate UE debug trace") add_boolean_option(UE_TIMING_TRACE False "Activate UE timing trace") @@ -262,7 +262,6 @@ if (${ENABLE_ITTI}) # add .h files if depend on (this one is generated) ${ITTI_DIR}/intertask_interface.h ${ITTI_DIR}/intertask_interface.c - ${ITTI_DIR}/intertask_interface_dump.c ${ITTI_DIR}/backtrace.c ${ITTI_DIR}/memory_pools.c ${ITTI_DIR}/signals.c @@ -281,8 +280,8 @@ endif (${ENABLE_ITTI}) # (so creating new asn.1 objects instead of modifying the object attributes) # New C code source file, cmake must be re-run (instead of re-running make only) ############# -set(asn1c_call "${OPENAIR_CMAKE}/tools/generate_asn1") -set(fix_asn1c_call "${OPENAIR_CMAKE}/tools/fix_asn1") +# set(asn1c_call "${OPENAIR_CMAKE}/tools/generate_asn1") +# set(fix_asn1c_call "${OPENAIR_CMAKE}/tools/fix_asn1") set(asn1_generated_dir ${OPENAIR_BIN_DIR}) set(protoc_call "${OPENAIR_CMAKE}/tools/generate_protobuf") @@ -302,31 +301,35 @@ elseif (${RRC_ASN1_VERSION} STREQUAL "CBA") elseif (${RRC_ASN1_VERSION} STREQUAL "Rel10") make_version(RRC_VERSION 10 2 0) set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LTE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-a20.asn) -else() - make_version(RRC_VERSION 14 3 0) - set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LTE/MESSAGES/asn1c/ASN1_files/RRC-e30.asn) +elseif (${RRC_ASN1_VERSION} STREQUAL "Rel11") + make_version(RRC_VERSION 11 18 0) + set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LTE/MESSAGES/asn1c/ASN1_files/lte-rrc-11.18.0.asn1) +elseif (${RRC_ASN1_VERSION} STREQUAL "Rel12") + make_version(RRC_VERSION 12 16 0) + set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LTE/MESSAGES/asn1c/ASN1_files/lte-rrc-12.16.0.asn1) +elseif (${RRC_ASN1_VERSION} STREQUAL "Rel13") + make_version(RRC_VERSION 13 9 1) + set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LTE/MESSAGES/asn1c/ASN1_files/lte-rrc-13.9.1.asn1) +elseif (${RRC_ASN1_VERSION} STREQUAL "Rel14") + make_version(RRC_VERSION 14 7 0) + set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LTE/MESSAGES/asn1c/ASN1_files/lte-rrc-14.7.0.asn1) +elseif (${RRC_ASN1_VERSION} STREQUAL "Rel15") + make_version(RRC_VERSION 15 2 2) + set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LTE/MESSAGES/asn1c/ASN1_files/lte-rrc-15.2.2.asn1) endif (${RRC_ASN1_VERSION} STREQUAL "Rel8") add_definitions(-DRRC_VERSION=${RRC_VERSION}) set (RRC_FULL_DIR ${asn1_generated_dir}/RRC_${RRC_ASN1_VERSION}) -if(NOT EXISTS ${asn1c_call}) - message( FATAL_ERROR "The script ${asn1c_call} must be present" ) -endif(NOT EXISTS ${asn1c_call}) -execute_process(COMMAND ${asn1c_call} ${RRC_FULL_DIR} ${RRC_GRAMMAR} +message("calling asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example -D ${RRC_FULL_DIR} ${RRC_GRAMMAR}") +execute_process(COMMAND mkdir -p ${RRC_FULL_DIR} + COMMAND env asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example -D ${RRC_FULL_DIR} ${RRC_GRAMMAR} RESULT_VARIABLE ret) if (NOT ${ret} STREQUAL 0) - message(FATAL_ERROR "${asn1c_call}: error") -endif (NOT ${ret} STREQUAL 0) -if(NOT EXISTS ${fix_asn1c_call}) - message( FATAL_ERROR "The script ${fix_asn1c_call} must be present" ) -endif(NOT EXISTS ${fix_asn1c_call}) -execute_process(COMMAND ${fix_asn1c_call} ${RRC_FULL_DIR} RRC ${RRC_ASN1_VERSION} - RESULT_VARIABLE ret) -if (NOT ${ret} STREQUAL 0) - message(FATAL_ERROR "${fix_asn1c_call}: error") + message(FATAL_ERROR "${ret}: error") endif (NOT ${ret} STREQUAL 0) + file(GLOB rrc_source ${RRC_FULL_DIR}/*.c) file(GLOB rrc_h ${RRC_FULL_DIR}/*.h) -set(rrc_h ${rrc_h} ${RRC_FULL_DIR}/asn1_constants.h) +set(rrc_h ${rrc_h} ${RRC_FULL_DIR}/asn_constant.h) set_source_files_properties(${rrc_source} PROPERTIES COMPILE_FLAGS -w) # suppress warnings from generated code add_library(RRC_LIB ${rrc_h} ${rrc_source} ${OPENAIR2_DIR}/RRC/LTE/MESSAGES/asn1_msg.c @@ -336,9 +339,9 @@ include_directories ("${RRC_FULL_DIR}") # add the command to generate the source code # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make add_custom_command ( - OUTPUT ${RRC_FULL_DIR}/asn1_constants.h - COMMAND ${asn1c_call} ${RRC_FULL_DIR} ${RRC_GRAMMAR} - COMMAND ${fix_asn1c_call} ${RRC_FULL_DIR} RRC ${RRC_ASN1_VERSION} + OUTPUT ${RRC_FULL_DIR}/asn_constant.h + COMMAND mkdir -p ${RRC_FULL_DIR} + COMMAND env asn1c -pdu=all -fcompound-names -gen-PER -no-gen-OER -no-gen-example -D ${RRC_FULL_DIR} ${RRC_GRAMMAR} DEPENDS ${RRC_GRAMMAR} ) @@ -346,65 +349,56 @@ add_custom_command ( # Same limitation as described in RRC: unknown generated file list # so we generate it at cmake time ############## -add_list1_option(S1AP_RELEASE R10 "S1AP ASN.1 grammar version" R8 R9 R10) +add_list1_option(S1AP_RELEASE R14 "S1AP ASN.1 grammar version" R8 R9 R10 R14 R15) set(S1AP_DIR ${OPENAIR3_DIR}/S1AP) if (${S1AP_RELEASE} STREQUAL "R8") make_version(S1AP_VERSION 8 10 0) - set (ASN1RELDIR R8.10) + set(S1AP_ASN_FILES "s1ap-8.10.0.asn1") elseif (${S1AP_RELEASE} STREQUAL "R9") - make_version(S1AP_VERSION 9 8 0) - set (ASN1RELDIR R9.8) + make_version(S1AP_VERSION 9 10 0) + set(S1AP_ASN_FILES "s1ap-9.10.0.asn1") elseif (${S1AP_RELEASE} STREQUAL "R10") - make_version(S1AP_VERSION 10 5 0) - set (ASN1RELDIR R10.5) + make_version(S1AP_VERSION 10 9 0) + set(S1AP_ASN_FILES "s1ap-10.9.0.asn1") +elseif (${S1AP_RELEASE} STREQUAL "R11") + make_version(S1AP_VERSION 11 8 0) + set(S1AP_ASN_FILES "s1ap-11.8.0.asn1") +elseif (${S1AP_RELEASE} STREQUAL "R12") + make_version(S1AP_VERSION 12 7 0) + set(S1AP_ASN_FILES "s1ap-12.7.0.asn1") +elseif (${S1AP_RELEASE} STREQUAL "R13") + make_version(S1AP_VERSION 13 6 0) + set(S1AP_ASN_FILES "s1ap-13.6.0.asn1") +elseif (${S1AP_RELEASE} STREQUAL "R14") + make_version(S1AP_VERSION 14 5 0) + set(S1AP_ASN_FILES "s1ap-14.5.0.asn1") +else (${S1AP_RELEASE} STREQUAL "R15") + make_version(S1AP_VERSION 15 1 0) + set(S1AP_ASN_FILES "s1ap-15.1.0.asn1") endif(${S1AP_RELEASE} STREQUAL "R8") add_definitions(-DS1AP_VERSION=${S1AP_VERSION}) -set(S1AP_ASN_DIR ${S1AP_DIR}/MESSAGES/ASN1/${ASN1RELDIR}) -set(S1AP_ASN_FILES - ${S1AP_ASN_DIR}/S1AP-CommonDataTypes.asn - ${S1AP_ASN_DIR}/S1AP-Constants.asn - ${S1AP_ASN_DIR}/S1AP-IEs.asn - ${S1AP_ASN_DIR}/S1AP-PDU.asn - ) -set(S1AP_C_DIR ${asn1_generated_dir}/S1AP_${ASN1RELDIR}) -#message("calling ${asn1c_call} ${S1AP_C_DIR} ${S1AP_ASN_FILES}") -execute_process(COMMAND ${asn1c_call} ${S1AP_C_DIR} ${S1AP_ASN_FILES} +set(S1AP_ASN_DIR ${S1AP_DIR}/MESSAGES/ASN1/${S1AP_RELEASE}) +set(S1AP_C_DIR ${asn1_generated_dir}/S1AP_${S1AP_RELEASE}) +message("calling ASN1C_PREFIX=S1AP_ asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${S1AP_C_DIR} ${S1AP_ASN_DIR}/${S1AP_ASN_FILES}") +execute_process(COMMAND mkdir -p ${S1AP_C_DIR} + COMMAND env "ASN1C_PREFIX=S1AP_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${S1AP_C_DIR} ${S1AP_ASN_DIR}/${S1AP_ASN_FILES} RESULT_VARIABLE ret) if (NOT ${ret} STREQUAL 0) - message(FATAL_ERROR "${asn1c_call}: error") -endif (NOT ${ret} STREQUAL 0) -execute_process(COMMAND python ${S1AP_DIR}/MESSAGES/ASN1/asn1tostruct.py -f${S1AP_ASN_DIR}/S1AP-PDU-Contents.asn -o${S1AP_C_DIR} - RESULT_VARIABLE ret) -if (NOT ${ret} STREQUAL 0) - message(FATAL_ERROR "asn1tostruct.py: error") -endif (NOT ${ret} STREQUAL 0) -execute_process(COMMAND ${fix_asn1c_call} ${S1AP_C_DIR} S1AP ${S1AP_RELEASE} - RESULT_VARIABLE ret) -if (NOT ${ret} STREQUAL 0) - message(FATAL_ERROR "${fix_asn1c_call}: error") + message(FATAL_ERROR "${ret}: error") endif (NOT ${ret} STREQUAL 0) file(GLOB S1AP_source ${S1AP_C_DIR}/*.c) -set(S1AP_OAI_generated - ${S1AP_C_DIR}/s1ap_decoder.c - ${S1AP_C_DIR}/s1ap_encoder.c - ${S1AP_C_DIR}/s1ap_xer_print.c - ${S1AP_C_DIR}/s1ap_compare.c - ${S1AP_C_DIR}/s1ap_ies_defs.h - ) file(GLOB s1ap_h ${S1AP_C_DIR}/*.h) -set(s1ap_h ${s1ap_h} ) +set(s1ap_h ${s1ap_h}) add_custom_command ( - OUTPUT ${S1AP_OAI_generated} - COMMAND ${asn1c_call} ${S1AP_C_DIR} ${S1AP_ASN_FILES} - COMMAND python ${S1AP_DIR}/MESSAGES/ASN1/asn1tostruct.py -f${S1AP_ASN_DIR}/S1AP-PDU-Contents.asn -o${S1AP_C_DIR} - COMMAND ${fix_asn1c_call} ${S1AP_C_DIR} S1AP ${S1AP_RELEASE} - DEPENDS ${S1AP_ASN_FILES} - ) + OUTPUT ${S1AP_C_DIR}/S1AP_asn_constant.h + COMMAND mkdir -p ${S1AP_C_DIR} + COMMAND env "ASN1C_PREFIX=S1AP_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${S1AP_C_DIR} ${S1AP_ASN_DIR}/${S1AP_ASN_FILES} + DEPENDS ${S1AP_ASN_DIR}/${S1AP_ASN_FILES} +) add_library(S1AP_LIB - ${S1AP_OAI_generated} ${S1AP_source} ${S1AP_DIR}/s1ap_common.c ) @@ -413,7 +407,6 @@ include_directories ("${S1AP_C_DIR}") include_directories ("${S1AP_DIR}") add_library(S1AP_ENB - ${S1AP_C_DIR}/s1ap_ies_defs.h ${S1AP_DIR}/s1ap_eNB.c ${S1AP_DIR}/s1ap_eNB_context_management_procedures.c ${S1AP_DIR}/s1ap_eNB_decoder.c @@ -428,70 +421,52 @@ add_library(S1AP_ENB ${S1AP_DIR}/s1ap_eNB_ue_context.c ) - - #X2AP # Same limitation as described in RRC/S1AP: unknown generated file list # so we generate it at cmake time ############## -add_list1_option(X2AP_RELEASE R11 "X2AP ASN.1 grammar version" R10 R11) -set(X2AP_DIR ${OPENAIR2_DIR}/X2AP) -if (${X2AP_RELEASE} STREQUAL "R10") - make_version(S1AP_VERSION 10 0 0) - set (ASN1RELDIR R.UNKNOWN) -elseif (${X2AP_RELEASE} STREQUAL "R11") - make_version(S1AP_VERSION 11 2 0) - set (ASN1RELDIR R11.2) -endif(${X2AP_RELEASE} STREQUAL "R10") -add_definitions(-DX2AP_VERSION=${X2AP_VERSION}) -set(X2AP_ASN_DIR ${X2AP_DIR}/MESSAGES/ASN1/${ASN1RELDIR}) -set(X2AP_ASN_FILES - ${X2AP_ASN_DIR}/X2AP-CommonDataTypes.asn - ${X2AP_ASN_DIR}/X2AP-Constants.asn - ${X2AP_ASN_DIR}/X2AP-IEs.asn - ${X2AP_ASN_DIR}/X2AP-PDU.asn - ${X2AP_ASN_DIR}/X2AP-Containers.asn - ) +add_list1_option(X2AP_RELEASE R14 "X2AP ASN.1 grammar version" R8 R11 R12 R14 R15) -set(X2AP_C_DIR ${asn1_generated_dir}/X2AP_${ASN1RELDIR}) -#message("calling ${asn1c_call} ${X2AP_C_DIR} ${X2AP_ASN_FILES}") -execute_process(COMMAND ${asn1c_call} ${X2AP_C_DIR} ${X2AP_ASN_FILES} +set(X2AP_DIR ${OPENAIR2_DIR}/X2AP) +if (${X2AP_RELEASE} STREQUAL "R8") + make_version(X2AP_VERSION 8 9 0) + set(X2AP_ASN_FILES x2ap-8.9.0.asn1) +elseif (${X2AP_RELEASE} STREQUAL "R11") + make_version(X2AP_VERSION 11 9 0) + set(X2AP_ASN_FILES x2ap-11.9.0.asn1) +elseif (${X2AP_RELEASE} STREQUAL "R12") + make_version(X2AP_VERSION 12 9 0) + set(X2AP_ASN_FILES x2ap-12.9.0.asn1) +elseif (${X2AP_RELEASE} STREQUAL "R14") + make_version(X2AP_VERSION 14 6 0) + set(X2AP_ASN_FILES x2ap-14.6.0.asn1) +elseif (${X2AP_RELEASE} STREQUAL "R15") + make_version(X2AP_VERSION 15 1 0) + set(X2AP_ASN_FILES x2ap-15.1.0.asn1) +endif(${X2AP_RELEASE} STREQUAL "R8") +add_definitions(-DX2AP_VERSION=${X2AP_VERSION}) +set(X2AP_ASN_DIR ${X2AP_DIR}/MESSAGES/ASN1/${X2AP_RELEASE}) +set(X2AP_C_DIR ${asn1_generated_dir}/X2AP_${X2AP_RELEASE}) +message("calling ASN1C_PREFIX=X2AP_ asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES}") +execute_process(COMMAND mkdir -p ${X2AP_C_DIR} + COMMAND env "ASN1C_PREFIX=X2AP_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} RESULT_VARIABLE ret) if (NOT ${ret} STREQUAL 0) - message(FATAL_ERROR "${asn1c_call}: error") -endif (NOT ${ret} STREQUAL 0) -execute_process(COMMAND python ${X2AP_DIR}/MESSAGES/ASN1/asn1tostruct.py -f ${X2AP_ASN_DIR}/X2AP-PDU-Contents.asn -o ${X2AP_C_DIR} - RESULT_VARIABLE ret) -if (NOT ${ret} STREQUAL 0) - message(FATAL_ERROR "asn1tostruct.py: error") -endif (NOT ${ret} STREQUAL 0) -execute_process(COMMAND ${fix_asn1c_call} ${X2AP_C_DIR} X2AP ${X2AP_RELEASE} - RESULT_VARIABLE ret) -if (NOT ${ret} STREQUAL 0) - message(FATAL_ERROR "${fix_asn1c_call}: error") + message(FATAL_ERROR "${ret}: error") endif (NOT ${ret} STREQUAL 0) file(GLOB X2AP_source ${X2AP_C_DIR}/*.c) -set(X2AP_OAI_generated - ${X2AP_C_DIR}/x2ap_decoder.c - ${X2AP_C_DIR}/x2ap_encoder.c - ${X2AP_C_DIR}/x2ap_xer_print.c - ${X2AP_C_DIR}/x2ap_ies_defs.h - ) file(GLOB x2ap_h ${X2AP_C_DIR}/*.h) -set(x2ap_h ${x2ap_h} ) +set(x2ap_h ${x2ap_h}) -#message("calling ${X2AP_DIR}/MESSAGES/ASN1/asn1tostruct.py -f ${X2AP_ASN_DIR}/X2AP-PDU-Contents.asn -o ${X2AP_C_DIR}") add_custom_command ( - OUTPUT ${X2AP_OAI_generated} - COMMAND ${asn1c_call} ${X2AP_C_DIR} ${X2AP_ASN_FILES} - COMMAND python ${X2AP_DIR}/MESSAGES/ASN1/asn1tostruct.py -f ${X2AP_ASN_DIR}/X2AP-PDU-Contents.asn -o ${X2AP_C_DIR} - COMMAND ${fix_asn1c_call} ${X2AP_C_DIR} X2AP ${X2AP_RELEASE} - DEPENDS ${X2AP_ASN_FILES} + OUTPUT ${X2AP_C_DIR}/X2AP_asn_constant.h + COMMAND mkdir -p ${X2AP_C_DIR} + COMMAND env "ASN1C_PREFIX=X2AP_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} + DEPENDS ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} ) add_library(X2AP_LIB - ${X2AP_OAI_generated} ${X2AP_source} ${X2AP_DIR}/x2ap_common.c ) @@ -515,12 +490,12 @@ set (CONFIG_SOURCES ${CONFIG_ROOTDIR}/config_load_configmodule.c ${CONFIG_ROOTDIR}/config_userapi.c ${CONFIG_ROOTDIR}/config_cmdline.c - ) + ) set (CONFIG_LIBCONFIG_SOURCES ${CONFIG_ROOTDIR}/libconfig/config_libconfig.c - ) + ) add_library(params_libconfig MODULE ${CONFIG_LIBCONFIG_SOURCES} ) -target_link_libraries(params_libconfig config) +target_link_libraries(params_libconfig config) # shared library loader set (SHLIB_LOADER_SOURCES ${OPENAIR_DIR}/common/utils/load_module_shlib.c @@ -621,9 +596,7 @@ add_boolean_option(RRC_DEFAULT_RAB_IS_AM False "set the RLC mode to AM for the d add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????") add_boolean_option(DEADLINE_SCHEDULER True "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14") add_boolean_option(CPU_AFFINITY False "Enable CPU Affinity of threads (only valid without deadline scheduler). It is enabled only with >2 CPUs") -add_boolean_option(NAS_ADDRESS_FIX False "specific to oaisim: for nasmesh driver") add_boolean_option(NAS_NETLINK False "useless ??? Must be True to compile nasmesh driver without rtai ????") -add_boolean_option(OAISIM False "specific to oaisim") add_boolean_option(OAI_NW_DRIVER_USE_NETLINK True "????") add_boolean_option(USE_MME False "this flag is used only one time in lte-softmodem.c") @@ -632,6 +605,10 @@ add_boolean_option(MESSAGE_CHART_GENERATOR False "For generating sequenc add_boolean_option(MESSAGE_CHART_GENERATOR_RLC_MAC False "trace RLC-MAC exchanges in sequence diagrams") add_boolean_option(MESSAGE_CHART_GENERATOR_PHY False "trace some PHY exchanges in sequence diagrams") +add_boolean_option(UE_EXPANSION False "enable UE_EXPANSION with max 256 UE") +add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE") +add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE") + ######################## # Include order ########################## @@ -652,9 +629,7 @@ add_boolean_option(OPENAIR_LTE True "Seems legacy: keep it to true") # PHY options ########################## add_boolean_option(DRIVER2013 True "only relevant for EXMIMO") -add_boolean_option(ENABLE_NEW_MULTICAST False "specific to oaisim") add_boolean_option(EXMIMO_IOT True "????") -add_boolean_option(LARGE_SCALE False "specific to oaisim: defines max eNB=2 and max UE=120") add_boolean_option(LOCALIZATION False "???") add_integer_option(MAX_NUM_CCs 1 "????") add_boolean_option(MU_RECEIVER False "????") @@ -665,6 +640,7 @@ add_boolean_option(SMBV False "Rohde&Schwarz SMBV100A vector add_boolean_option(DEBUG_PHY False "Enable PHY layer debugging options") add_boolean_option(DEBUG_PHY_PROC False "Enable debugging of PHY layer procedures") add_boolean_option(DEBUG_DLSCH False "Enable debugging of DLSCH physical layer channel") +add_boolean_option(MEX False "Enabling compilation with mex") ########################## # NAS LAYER OPTIONS @@ -677,7 +653,6 @@ add_boolean_option(NAS_UE True "NAS UE INSTANCE (<> NAS_MME)") ########################## # ACCESS STRATUM LAYER2 OPTIONS ########################## -add_boolean_option(MAC_CONTEXT True "specific to oaisim") add_boolean_option(JUMBO_FRAME True "ENABLE LARGE SDU in ACCESS STRATUM (larger than common MTU)") ########################## @@ -923,7 +898,7 @@ set(UTIL_SRC ${OPENAIR2_DIR}/UTIL/LISTS/list.c ${OPENAIR2_DIR}/UTIL/LISTS/list2.c ${OPENAIR2_DIR}/UTIL/LOG/log.c - ${OPENAIR2_DIR}/UTIL/LOG/vcd_signal_dumper.c +# ${OPENAIR2_DIR}/UTIL/LOG/vcd_signal_dumper.c ${OPENAIR2_DIR}/UTIL/MATH/oml.c ${OPENAIR2_DIR}/UTIL/MEM/mem_block.c # ${OPENAIR2_DIR}/UTIL/OCG/OCG.c @@ -985,7 +960,7 @@ set(SECU_CN_SRC ) add_library(SECU_CN ${SECU_CN_SRC}) -# Physical Channel Procedures Scheduling +# Physical Channel Procedures Scheduling ################################" set(SCHED_SRC ${OPENAIR1_DIR}/SCHED/fapi_l1.c @@ -1078,13 +1053,14 @@ set(PHY_TURBOIF add_library(coding MODULE ${PHY_TURBOSRC} ) set(PHY_SRC_COMMON # depend on code generation from asn1c - ${RRC_FULL_DIR}/asn1_constants.h + ${RRC_FULL_DIR}/asn_constant.h # actual source ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dci_tools_common.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/lte_mcs.c # ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/slss.c # ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/sldch.c # ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/slsch.c + ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/get_pmi.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/group_hopping.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/phich_common.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pcfich_common.c @@ -1093,6 +1069,7 @@ set(PHY_SRC_COMMON ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/prach_common.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pucch_common.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dlsch_scrambling.c + ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/lte_gold_generic.c ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/srs_modulation.c ${OPENAIR1_DIR}/PHY/MODULATION/ofdm_mod.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_sync_time.c @@ -1114,7 +1091,6 @@ set(PHY_SRC_COMMON ${OPENAIR1_DIR}/PHY/INIT/init_top.c ${OPENAIR1_DIR}/PHY/INIT/lte_parms.c ${OPENAIR1_DIR}/PHY/INIT/lte_param_init.c - ${OPENAIR1_DIR}/PHY/TOOLS/file_output.c ${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c ${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c ${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c @@ -1173,6 +1149,7 @@ set(PHY_SRC_UE ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/sss_ue.c ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c + ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/uci_tools_ue.c @@ -1220,6 +1197,27 @@ add_library(PHY ${PHY_SRC}) add_library(PHY_UE ${PHY_SRC_UE}) add_library(PHY_RU ${PHY_SRC_RU}) +#Library for mex functions +#########################3 +set(PHY_MEX_UE + ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c + ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c + ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c + ${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c + ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/lte_mcs.c + ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/get_pmi.c + ${OPENAIR1_DIR}/PHY/TOOLS/dB_routines.c + ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pmch_common.c + ${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c + ${OPENAIR1_DIR}/PHY/TOOLS/cmult_sv.c + ${OPENAIR1_DIR}/PHY/TOOLS/cmult_vv.c + ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c + ${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c + ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c + ${OPENAIR2_DIR}/UTIL/LOG/log.c + ) +add_library(PHY_MEX ${PHY_MEX_UE}) + #Layer 2 library ##################### set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC) @@ -1334,6 +1332,7 @@ set (MAC_SRC ${MAC_DIR}/eNB_scheduler_bch.c ${MAC_DIR}/eNB_scheduler_primitives.c ${MAC_DIR}/eNB_scheduler_RA.c + ${MAC_DIR}/eNB_scheduler_fairRR.c ${MAC_DIR}/eNB_scheduler_phytest.c ${MAC_DIR}/pre_processor.c ${MAC_DIR}/config.c @@ -1720,12 +1719,14 @@ ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_channel.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_tv_channel.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/abstraction.c +${OPENAIR1_DIR}/SIMULATION/TOOLS/channel_sim.c ${OPENAIR1_DIR}/SIMULATION/RF/rf.c ${OPENAIR1_DIR}/SIMULATION/RF/dac.c ${OPENAIR1_DIR}/SIMULATION/RF/adc.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c ) + add_library(SIMU_ETH ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c @@ -1812,11 +1813,13 @@ endif() # So, here are some hacks here. Hope this gets fixed in future! if(EXISTS "/usr/include/atlas/cblas.h" OR EXISTS "/usr/include/cblas.h") include_directories("/usr/include/atlas") + LINK_DIRECTORIES("/usr/lib/lapack") LINK_DIRECTORIES("/usr/lib64") LINK_DIRECTORIES("/usr/lib64/atlas") #Added because atlas libraries in CentOS 7 are here! - + if(EXISTS "/usr/lib64/libblas.so" OR EXISTS "/usr/lib/libblas.so") #Case for CentOS7 list(APPEND ATLAS_LIBRARIES blas) + else() # Case for Ubuntu list(APPEND ATLAS_LIBRARIES cblas) endif() @@ -1842,6 +1845,8 @@ else() message("No Blas/Atlas libs found, some targets will fail") endif() +list(APPEND ATLAS_LIBRARIES lapack lapacke) + if (${XFORMS}) include_directories ("/usr/include/X11") set(XFORMS_SOURCE @@ -1899,7 +1904,6 @@ add_definitions(-DASN1_MINIMUM_VERSION=924) add_executable(lte-softmodem ${rrc_h} ${s1ap_h} - ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c ${OPENAIR_TARGETS}/RT/USER/lte-enb.c ${OPENAIR_TARGETS}/RT/USER/lte-ru.c @@ -1924,7 +1928,7 @@ add_executable(lte-softmodem target_link_libraries (lte-softmodem -Wl,--start-group - RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 + RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl) @@ -1939,7 +1943,6 @@ target_link_libraries (lte-softmodem ${T_LIB}) add_executable(lte-softmodem-nos1 ${rrc_h} ${s1ap_h} - ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c ${OPENAIR_TARGETS}/RT/USER/lte-enb.c ${OPENAIR_TARGETS}/RT/USER/lte-ru.c @@ -1962,7 +1965,7 @@ add_executable(lte-softmodem-nos1 ) target_link_libraries (lte-softmodem-nos1 -Wl,--start-group - RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB} + RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB} ${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl ) @@ -1978,10 +1981,11 @@ target_link_libraries (lte-softmodem-nos1 ${T_LIB}) add_executable(lte-uesoftmodem ${rrc_h} ${s1ap_h} - ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c ${OPENAIR_TARGETS}/RT/USER/lte-ue.c ${OPENAIR_TARGETS}/RT/USER/lte-uesoftmodem.c + ${OPENAIR_TARGETS}/RT/USER/lte-ru.c + ${OPENAIR_TARGETS}/RT/USER/rfsim.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c ${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c @@ -2000,13 +2004,13 @@ add_executable(lte-uesoftmodem target_link_libraries (lte-uesoftmodem -Wl,--start-group - RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE - ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 + RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU + ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl) target_link_libraries (lte-uesoftmodem ${LIBXML2_LIBRARIES}) -target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES}) +target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES}) target_link_libraries (lte-uesoftmodem ${LIB_LMS_LIBRARIES}) target_link_libraries (lte-uesoftmodem ${T_LIB}) @@ -2015,10 +2019,11 @@ target_link_libraries (lte-uesoftmodem ${T_LIB}) add_executable(lte-uesoftmodem-nos1 ${rrc_h} ${s1ap_h} -# ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c ${OPENAIR_TARGETS}/RT/USER/lte-ue.c ${OPENAIR_TARGETS}/RT/USER/lte-uesoftmodem.c + ${OPENAIR_TARGETS}/RT/USER/lte-ru.c + ${OPENAIR_TARGETS}/RT/USER/rfsim.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c ${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c @@ -2038,13 +2043,13 @@ add_executable(lte-uesoftmodem-nos1 target_link_libraries (lte-uesoftmodem-nos1 -Wl,--start-group - RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB} - ${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 + RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB} + ${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl ) target_link_libraries (lte-uesoftmodem-nos1 ${LIBXML2_LIBRARIES}) -target_link_libraries (lte-uesoftmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES}) +target_link_libraries (lte-uesoftmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES}) target_link_libraries (lte-uesoftmodem-nos1 ${LIB_LMS_LIBRARIES}) target_link_libraries (lte-uesoftmodem-nos1 ${T_LIB}) @@ -2075,103 +2080,12 @@ target_link_libraries (lte-uesoftmodem-nos1 ${T_LIB}) # Addexecutables for tests #################################### -# A all in one network simulator -################ -add_executable(oaisim - ${rrc_h} - ${s1ap_h} - ${x2ap_h} - ${OPENAIR_BIN_DIR}/messages_xml.h - ${OPENAIR_TARGETS}/RT/USER/lte-ue.c - ${OPENAIR_TARGETS}/RT/USER/lte-ru.c - ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c - ${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c -# ${OPENAIR_TARGETS}/SIMU/USER/oaisim_config.c - ${OPENAIR_TARGETS}/SIMU/USER/sinr_sim.c - ${OPENAIR_TARGETS}/SIMU/USER/cor_SF_sim.c - ${OPENAIR_TARGETS}/SIMU/USER/oaisim_functions.c - ${OPENAIR_TARGETS}/SIMU/USER/event_handler.c - ${OPENAIR_TARGETS}/SIMU/USER/oaisim.c - ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c - ${OPENAIR2_DIR}/RRC/NAS/nas_config.c - ${OPENAIR2_DIR}/RRC/NAS/rb_config.c - ${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c - ${OPENAIR_DIR}/common/utils/utils.c - ${OPENAIR_DIR}/common/utils/system.c - ${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c - ${XFORMS_SOURCE} - ${T_SOURCE} - ${CONFIG_SOURCES} - ${SHLIB_LOADER_SOURCES} -) - - -target_include_directories(oaisim PUBLIC ${OPENAIR_TARGETS}/SIMU/USER) -target_link_libraries (oaisim - -Wl,-ldl,--start-group - RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE ${MSC_LIB} LIB_NAS_UE SIMU SECU_OSA ${ITTI_LIB} ${MIH_LIB} - ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 - -Wl,--end-group z dl) - -target_link_libraries (oaisim ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES}) -target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp z - ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES}) -#Force link with forms, regardless XFORMS option -target_link_libraries (oaisim forms) -target_link_libraries (oaisim ${T_LIB}) - - -# A all in one network simulator -################ -add_executable(oaisim_nos1 - ${rrc_h} - ${s1ap_h} - ${x2ap_h} - ${OPENAIR_BIN_DIR}/messages_xml.h - ${OPENAIR_TARGETS}/RT/USER/lte-ue.c - ${OPENAIR_TARGETS}/RT/USER/lte-ru.c - ${OPENAIR1_DIR}/SCHED/prach_procedures.c - ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c - ${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c -# ${OPENAIR_TARGETS}/SIMU/USER/oaisim_config.c - ${OPENAIR_TARGETS}/SIMU/USER/sinr_sim.c - ${OPENAIR_TARGETS}/SIMU/USER/cor_SF_sim.c - ${OPENAIR_TARGETS}/SIMU/USER/oaisim_functions.c - ${OPENAIR_TARGETS}/SIMU/USER/event_handler.c - ${OPENAIR_TARGETS}/SIMU/USER/oaisim.c - ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c - ${OPENAIR2_DIR}/RRC/NAS/nas_config.c - ${OPENAIR2_DIR}/RRC/NAS/rb_config.c - ${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c - ${OPENAIR_DIR}/common/utils/system.c - ${XFORMS_SOURCE} - ${T_SOURCE} - ${CONFIG_SOURCES} - ${SHLIB_LOADER_SOURCES} -) -target_include_directories(oaisim_nos1 PUBLIC ${OPENAIR_TARGETS}/SIMU/USER) -target_link_libraries (oaisim_nos1 - -Wl,--start-group - RRC_LIB X2AP_LIB SECU_CN UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS ${MSC_LIB} ${ITTI_LIB} SIMU L2_UE ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 - -Wl,--end-group z dl ) - -target_link_libraries (oaisim_nos1 ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES}) -target_link_libraries (oaisim_nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} - ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES}) -#Force link with forms, regardless XFORMS option -target_link_libraries (oaisim_nos1 forms) - -#message("protobuflib is ${PROTOBUF_LIB}") - -target_link_libraries (oaisim_nos1 ${T_LIB}) - # Unitary tests for each piece of L1: example, mbmssim is MBMS L1 simulator ##################################### #special case for dlim TM4, which uses its own version of phy_scope code add_executable(dlsim_tm4 -# ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR1_DIR}/SIMULATION/LTE_PHY/dlsim_tm4.c ${OPENAIR1_DIR}/PHY/TOOLS/lte_phy_scope_tm4.c ${T_SOURCE} @@ -2184,7 +2098,6 @@ target_link_libraries (dlsim_tm4 foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim) add_executable(${myExe} -# ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c ${XFORMS_SOURCE} ${T_SOURCE} @@ -2206,7 +2119,6 @@ add_executable(test_epc_generate_scenario ${OPENAIR2_DIR}/COMMON/messages_def.h ${OPENAIR2_DIR}/COMMON/messages_types.h ${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h -# ${OPENAIR_BIN_DIR}/messages_xml.h ) target_link_libraries (test_epc_generate_scenario -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} @@ -2226,7 +2138,6 @@ add_executable(test_epc_play_scenario ${OPENAIR2_DIR}/COMMON/commonDef.h ${OPENAIR2_DIR}/COMMON/messages_def.h ${OPENAIR2_DIR}/COMMON/messages_types.h - ${OPENAIR_BIN_DIR}/messages_xml.h ) target_include_directories(test_epc_play_scenario PUBLIC /usr/local/share/asn1c) target_link_libraries (test_epc_play_scenario @@ -2262,7 +2173,7 @@ endforeach(myExe) if (${T_TRACER}) foreach(i #all "add_executable" definitions (except tests, rb_tool, updatefw) - lte-softmodem lte-softmodem-nos1 oaisim oaisim_nos1 + lte-softmodem lte-softmodem-nos1 lte-uesoftmodem lte-uesoftmodem-nos1 dlsim_tm4 dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim #all "add_library" definitions @@ -2282,43 +2193,6 @@ endif (${T_TRACER}) # Generated specific cases is not regular code ############################################### -##################"" -# itti symbolic debug print require to generate a specific include file -######################################## - -# retrieve the compiler options to send it to gccxml -get_directory_property( DirDefs COMPILE_DEFINITIONS ) -foreach( d ${DirDefs} ) - list(APPEND itti_compiler_options "-D${d}") -endforeach() -get_directory_property( DirDefs INCLUDE_DIRECTORIES ) -foreach( d ${DirDefs} ) - list(APPEND itti_compiler_options "-I${d}") -endforeach() - -# castxml doesn't work with c11 (gcc 5 default) -# force castxml and clang compilation with gnu89 standard -# we can't use cXX standard as pthread_rwlock_t is gnu standard -list(APPEND itti_compiler_options "-std=gnu89;-D'MAKE_VERSION(a,b,c)=((a)*256+(b)*16+c)'") -set (ITTI_H ${ITTI_DIR}/intertask_interface_types.h) -if(EXISTS /usr/bin/gccxml) - set(xml_command gccxml ${itti_compiler_options} -fxml=${OPENAIR_BIN_DIR}/messages.xml ${ITTI_H}) -else() - set(xml_command castxml --castxml-gccxml ${itti_compiler_options} ${ITTI_H} -o ${OPENAIR_BIN_DIR}/messages.xml) -endif() - -add_custom_command ( - OUTPUT ${OPENAIR_BIN_DIR}/messages.xml - COMMAND ${xml_command} - DEPENDS ${S1AP_OAI_generated} ${RRC_FULL_DIR}/asn1_constants.h - ) - -add_custom_command ( - OUTPUT ${OPENAIR_BIN_DIR}/messages_xml.h - COMMAND sed -e 's/ *//' -e 's/\"/\\\\\"/g' -e 's/^/\"/' -e 's/$$/\\\\n\"/' ${OPENAIR_BIN_DIR}/messages.xml > ${OPENAIR_BIN_DIR}/messages_xml.h - DEPENDS ${OPENAIR_BIN_DIR}/messages.xml ${RRC_FULL_DIR}/asn1_constants.h - ) - ################ # Kernel modules ############### diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index ff38ae9d3c..9a1a5cad02 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -175,10 +175,10 @@ function test_compile() { fi if [ "$result" == "1" ]; then echo_success "$test_case_name.${tags} PASSED" - xUnit_success "compilation" "$test_case_name.$tags" "PASS" "$result_string" "$xmlfile_testcase" + xUnit_success "compilation" "$test_case_name.$tags" "PASS" "$result_string" "$xmlfile_testcase" "" else echo_error "$test_case_name.${tags} FAILED" - xUnit_fail "compilation" "$test_case_name.$tags" "FAIL" "$result_string" "$xmlfile_testcase" + xUnit_fail "compilation" "$test_case_name.$tags" "FAIL" "$result_string" "$xmlfile_testcase" "" fi } @@ -200,6 +200,8 @@ function test_compile() { #\param $14 -> tags to help identify the test case for readability in output xml file #\param $15 => password for the user to run certain commands as sudo #\param $16 => test config file params to be modified +#\param $17 => bypass flag if main_exec if available +#\param $18 -> desc to help identify the test case for readability in output xml file function test_compile_and_run() { xUnit_start @@ -221,6 +223,8 @@ function test_compile_and_run() { tags=${14} mypassword=${15} test_config_file=${16} + bypass_compile=${17} + desc=${18} build_dir=$tdir/$1/build #exec_file=$build_dir/$6 @@ -231,8 +235,6 @@ function test_compile_and_run() { rm -fr $log_dir mkdir -p $log_dir - rm -fr $OPENAIR_DIR/cmake_targets/log - echo "" > $temp_exec_log echo "" > $log_file #echo "log_dir = $log_dir" @@ -243,6 +245,7 @@ function test_compile_and_run() { #echo "pre_exec_file = $pre_exec_file" #echo "nruns = $nruns" echo "class = $class" + #echo "desc = $desc" #compile_prog_array=() #read -a compile_prog_array <<<"$compile_prog" @@ -253,11 +256,19 @@ function test_compile_and_run() { tags_array=() read -a tags_array <<<"$tags" + desc_array=() + readarray -t desc_array <<<"$desc" main_exec_args_array=() readarray -t main_exec_args_array <<< "$exec_args" - + REAL_MAIN_EXEC=`eval "echo $main_exec"` + if [ "$bypass_compile" == "1" ] && [ -f $REAL_MAIN_EXEC ] + then + echo "Bypassing compilation for $main_exec" + else + rm -fr $OPENAIR_DIR/cmake_targets/log + #for search_expr in "${compile_prog_array[@]}" #do echo "Compiling test case $test_case_name Log file = $log_file" @@ -283,6 +294,7 @@ function test_compile_and_run() { }>> $log_file 2>&1 echo "" >> $log_file 2>&1 #done + fi #process the test case if it is that of execution if [ "$class" == "execution" ]; then @@ -291,6 +303,7 @@ function test_compile_and_run() { do global_result=1 result_string="" + PROPER_DESC=`echo ${desc_array[$tags_array_index]} | sed -e "s@^.*lsim.*est case.*(Test@Test@" -e "s@^ *(@@" -e "s/),$//"` for (( run_index=1; run_index <= $nruns; run_index++ )) do @@ -359,16 +372,16 @@ function test_compile_and_run() { if [ "$result_string" == "" ]; then echo_error "execution $test_case_name.$compile_prog.${tags_array[$tags_array_index]} Run_Result = \"$result_string\" Result = FAIL" - xUnit_fail "execution" "$test_case_name.${tags_array[$tags_array_index]}" "FAIL" "$result_string" "$xmlfile_testcase" + xUnit_fail "execution" "$test_case_name.${tags_array[$tags_array_index]}" "FAIL" "$result_string" "$xmlfile_testcase" "$PROPER_DESC" else if [ "$global_result" == "0" ]; then echo_error "execution $test_case_name.${tags_array[$tags_array_index]} Run_Result = \"$result_string\" Result = FAIL" - xUnit_fail "execution" "$test_case_name.${tags_array[$tags_array_index]}" "FAIL" "$result_string" "$xmlfile_testcase" + xUnit_fail "execution" "$test_case_name.${tags_array[$tags_array_index]}" "FAIL" "$result_string" "$xmlfile_testcase" "$PROPER_DESC" fi if [ "$global_result" == "1" ]; then echo_success "execution $test_case_name.${tags_array[$tags_array_index]} Run_Result = \"$result_string\" Result = PASS " - xUnit_success "execution" "$test_case_name.${tags_array[$tags_array_index]}" "PASS" "$result_string" "$xmlfile_testcase" + xUnit_success "execution" "$test_case_name.${tags_array[$tags_array_index]}" "PASS" "$result_string" "$xmlfile_testcase" "$PROPER_DESC" fi fi @@ -393,10 +406,18 @@ Options Run test cases in a group. For example, ./run_exec_autotests "0101* 010102" -p Use password for logging +-np | --no-password + No need for a password +-q | --quiet + Quiet mode; eliminate informational messages and comment prompts. +-b | --bypass-compile + Bypass compilation of main-exec if already present ' } function main () { +QUIET=0 +BYPASS_COMPILE=0 RUN_GROUP=0 SET_PASSWORD=0 passwd="" @@ -419,6 +440,16 @@ until [ -z "$1" ] SET_PASSWORD=1 passwd=$2 shift 2;; + -np|--no-password) + SET_PASSWORD=1 + shift ;; + -q|--quiet) + QUIET=1 + shift ;; + -b|--bypass-compile) + BYPASS_COMPILE=1 + echo "bypass option ON" + shift ;; -h | --help) print_help exit 1;; @@ -449,15 +480,15 @@ xml_conf="$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml" test_case_list=`xmlstarlet sel -T -t -m /testCaseList/testCase -s A:N:- "@id" -v "@id" -n $xml_conf` test_case_excl_list=`xmlstarlet sel -t -v "/testCaseList/TestCaseExclusionList" $xml_conf` -echo "Test Case Exclusion List = $test_case_excl_list " +if [ $QUIET -eq 0 ]; then echo "Test Case Exclusion List = $test_case_excl_list "; fi test_case_excl_list=`sed "s/\+/\*/g" <<< "$test_case_excl_list" ` # Replace + with * for bash string substituion read -a test_case_excl_array <<< "$test_case_excl_list" -echo "test_case_list = $test_case_list" +if [ $QUIET -eq 0 ]; then echo "test_case_list = $test_case_list"; fi -echo "Test Case Exclusion List = $test_case_excl_list \n" +if [ $QUIET -eq 0 ]; then echo "Test Case Exclusion List = $test_case_excl_list \n"; fi readarray -t test_case_array <<<"$test_case_list" @@ -484,7 +515,7 @@ for search_expr in "${test_case_array[@]}" do if [[ $search_expr == $search_excl ]];then flag_run_test_case=0 - echo_info "Test case $search_expr match found in test case excl group. Will skip the test case for execution..." + if [ $QUIET -eq 0 ]; then echo_info "Test case $search_expr match found in test case excl group. Will skip the test case for execution..."; fi break fi done @@ -533,8 +564,8 @@ for search_expr in "${test_case_array[@]}" search_array_true=() - IFS=\" #set the shell's field separator - set -f #don't try to glob + IFS=\" #set the shell field separator + set -f #dont try to glob #set -- $search_expr_true #split on $IFS for i in $search_expr_true do echo "i = $i" @@ -548,10 +579,10 @@ for search_expr in "${test_case_array[@]}" #echo "arg1 = ${search_array_true[0]}" #echo " arg2 = ${search_array_true[1]}" if [ "$class" == "compilation" ]; then - test_compile "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" + test_compile "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" "$desc" elif [ "$class" == "execution" ]; then echo \'passwd\' | $SUDO killall -q oaisim_nos1 - test_compile_and_run "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" "$mypassword" "$test_config_file" + test_compile_and_run "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" "$mypassword" "$test_config_file" "$BYPASS_COMPILE" "$desc" else echo "Unexpected class of test case...Skipping the test case $name ...." fi diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index d9ed38a4ec..f0b3256015 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -955,21 +955,21 @@ --phy_simulators -c $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash - $OPENAIR_DIR/cmake_targets/lte-simulators/build/dlsim - -m5 -gF -s-1 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70 - -m4 -gF -s0 -w1.0 -f.2 -n500 -B6 -c4 -z2 -O70 - -m15 -gF -s6.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70 - -m14 -gF -s6.7 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O70 - -m15 -gG -s6.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O30 - -m14 -gG -s1.4 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O30 - -m25 -gF -s17.4 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O70 - -m25 -gF -s17.5 -w1.0 -f.2 -n500 -B25 -c3 -z2 -r1022 -O70 - -m26 -gF -s17.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70 - -m26 -gF -s17.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -O70 - -m26 -gF -s17.3 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1600 -O70 - -m26 -gF -s16.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1899 -O70 - -m14 -gF -s6.8 -w1.0 -f.2 -n500 -B50 -c2 -x2 -y2 -z2 -O70 - -m13 -gF -s5.9 -w1.0 -f.2 -n500 -B25 -c3 -x2 -y2 -z2 -O70 + $OPENAIR_DIR/targets/bin/dlsim.Rel14 + -m5 -gF -s-1 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O60 + -m4 -gF -s0 -w1.0 -f.2 -n500 -B6 -c4 -z2 -O60 + -m15 -gF -s6.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O60 + -m15 -gF -s6.7 -w1.0 -f.2 -n500 -B25 -c2 -z2 -O60 + -m15 -gG -s1.4 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O25 + -m15 -gG -s1.4 -w1.0 -f.2 -n500 -B25 -c2 -z2 -O25 + -m25 -gF -s17.4 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O60 + -m25 -gF -s17.5 -w1.0 -f.2 -n500 -B25 -c3 -z2 -r1022 -O60 + -m26 -gF -s17.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O60 + -m26 -gF -s17.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -O60 + -m26 -gF -s17.3 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1600 -O60 + -m26 -gF -s16.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1899 -O60 + -m14 -gF -s6.8 -w1.0 -f.2 -n500 -B50 -c2 -x2 -y2 -z2 -O60 + -m13 -gF -s5.9 -w1.0 -f.2 -n500 -B25 -c3 -x2 -y2 -z2 -O60 dlsim.test1 dlsim.test5 dlsim.test6 dlsim.test6b dlsim.test7 dlsim.test7b dlsim.test10 dlsim.test10b dlsim.test11 dlsim.TM2_test1 dlsim.TM2_test1b "passed" segmentation fault|assertion|exiting|fatal @@ -989,13 +989,13 @@ --phy_simulators -c $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash - $OPENAIR_DIR/cmake_targets/lte-simulators/build/ulsim - -B25 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L - -B25 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L - -B50 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L - -B50 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L - -B100 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L - -B100 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L + $OPENAIR_DIR/targets/bin/ulsim.Rel14 + -B25 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 + -B25 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 + -B50 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 + -B50 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 + -B100 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 + -B100 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 ulsim.test1 ulsim.test2 ulsim.test3 ulsim.test4 ulsim.test5 ulsim.test6 "passed" segmentation fault|assertion|exiting|fatal diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf index 0994acdf9d..e2ea056ea1 100644 --- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -24; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf index 5e8cd8007e..b2ac3ccf42 100644 --- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -24; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf index 53eae1d531..006d59d2a5 100644 --- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -24; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf index d30a57041c..8c76d95d4c 100644 --- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -24; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf index e90eb3fe51..0d2bb27dcc 100644 --- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -24; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf index 5dbecd3813..c418f355f2 100644 --- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -24; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf index 1397184cc7..89e06d2b1e 100644 --- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf +++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -29; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf index caebb36eb2..c8e6c861e0 100644 --- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf +++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -29; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf index fe90cdb338..cc00f4f3ea 100644 --- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf +++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -29; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf index 5d9027ce15..6e1e776fed 100644 --- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf +++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -29; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf index 539f0bd744..7e7c3c185d 100644 --- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf +++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -29; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf index 58b088002f..3098660c8d 100644 --- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf +++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf @@ -49,7 +49,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -29; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 2de8298ffc..354123d684 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -42,6 +42,7 @@ conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf MSC_GEN="False" XFORMS="True" +UE_EXPANSION="False" PRINT_STATS="False" VCD_TIMING="False" DEADLINE_SCHEDULER_FLAG_USER="False" @@ -57,7 +58,7 @@ CFLAGS_PROCESSOR_USER="" RUN_GROUP=0 TEST_CASE_GROUP="" BUILD_DOXYGEN=0 -T_TRACER="False" +T_TRACER="True" DISABLE_HARDWARE_DEPENDENCY="False" CMAKE_BUILD_TYPE="" CMAKE_CMD="$CMAKE" @@ -111,8 +112,6 @@ Options -t | --transport protocol ETHERNET , None Adds this trasport protocol support in compilation ---oaisim - Makes the oaisim simulator. Hardware will be defaulted to \"None\". --phy_simulators Makes the unitary tests Layer 1 simulators --core_simulators @@ -124,12 +123,12 @@ Options -V | --vcd Adds a debgging facility to the binary files: GUI with major internal synchronization events -x | --xforms - Adds a software oscilloscope feature to the produced binaries. If oaisim, then enable PRINT_STATS. + Adds a software oscilloscope feature to the produced binaries. --install-system-files Install OpenArInterface required files in Linux system (will ask root password) --noS1 - Compiles oaisim or lte-softmodem without S1 interface, using direct link to IP instead + Compiles lte-softmodem without S1 interface, using direct link to IP instead --verbose-compile Shows detailed compilation instructions in makefile --cflags_processor @@ -142,8 +141,8 @@ Options Enable deadline scheduler of Linux kernel (>=3.14.x). --disable-cpu-affinity Disables CPU Affinity between UHD/TX/RX Threads (Valid only when deadline scheduler is disabled). By defaulT, CPU Affinity is enabled when not using deadline scheduler. It is enabled only with >2 CPUs. For eNB, CPU_0-> Device library (UHD), CPU_1->TX Threads, CPU_2...CPU_MAX->Rx Threads. For UE, CPU_0->Device Library(UHD), CPU_1..CPU_MAX -> All the UE threads ---T-tracer - Enables the T tracer. +--disable-T-Tracer + Disables the T tracer. --disable-hardware-dependency Disable HW dependency during installation --ue-autotest-trace @@ -164,11 +163,8 @@ Options Generates a basic [1 UE + 1 eNB + no channel] simulator. See targets/ARCH/tcp_bridge/README.tcp_bridge_oai for documentation. Usage (first build): - oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files - Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files NI/ETTUS B201 + COTS UE : ./build_oai -I --eNB -x --install-system-files -w USRP Usage (Regular): - oaisim : ./build_oai --oaisim -x Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x NI/ETTUS B201 + OAI ENB : ./build_oai --eNB -x -w USRP" } @@ -214,8 +210,12 @@ function main() { UE=1 echo_info "Will compile UE" shift;; + --mu) + UE_EXPANSION="True" + echo_info "Will compile with UE_EXPANSION" + shift;; --UE-conf-nvram) - conf_nvram_path=$(readlink -f "$1") + conf_nvram_path=$(readlink -f $2) shift 2;; --UE-gen-nvram) gen_nvram_path=$(readlink -f $2) @@ -250,10 +250,6 @@ function main() { echo_info "Setting transport protocol to: $TP" fi shift 2;; - --oaisim) - oaisim=1 - echo_info "Will compile oaisim and drivers nasmesh, ..." - shift;; --phy_simulators) SIMUS_PHY=1 echo_info "Will compile dlsim, ulsim, ..." @@ -313,9 +309,9 @@ function main() { CPU_AFFINITY_FLAG_USER="False" echo_info "Disabling CPU Affinity (only valid when not using deadline scheduler)" shift 1;; - --T-tracer) - T_TRACER="True" - echo_info "Enabling the T tracer" + --disable-T-Tracer) + T_TRACER="False" + echo_info "Disabling the T tracer" shift 1;; --disable-hardware-dependency) echo_info "Disabling hardware dependency for compiling software" @@ -490,16 +486,6 @@ function main() { check_install_additional_tools fi - if [ "$oaisim" = "1" ] ; then - #to be discussed - # there is no RF device transport protocol - HW="None" - TP="ETHERNET" - - if [ "$XFORMS" == "True" ] ; then - PRINT_STATS="True" - fi - fi echo_info "3. building the compilation directives ..." @@ -540,6 +526,9 @@ function main() { echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file echo "set ( XFORMS $XFORMS )" >> $cmake_file + echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file +# echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file + echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file @@ -689,123 +678,7 @@ function main() { cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin fi - # oaisim compilation - ############### - if [ "$oaisim" = "1" ] ; then - dconf=$OPENAIR_DIR/targets/bin - if [ "$NOS1" = "1" ] ; then - oaisim_build_dir=oaisim_noS1_build_oai - oaisim_exec=oaisim_nos1 - else - oaisim_build_dir=oaisim_build_oai - oaisim_exec=oaisim - fi - - echo_info "Compiling $oaisim_exec ($oaisim_build_dir)" - cmake_file=$DIR/$oaisim_build_dir/CMakeLists.txt - cp $DIR/$oaisim_build_dir/CMakeLists.template $cmake_file - echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file - echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file - echo "set ( XFORMS $XFORMS )" >> $cmake_file - echo "set ( PRINT_STATS $PRINT_STATS )" >> $cmake_file - echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file - echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file - echo "set ( T_TRACER $T_TRACER )" >> $cmake_file - echo "set ( UE_NAS_USE_TUN $UE_NAS_USE_TUN )" >> $cmake_file - echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file - [ "$CLEAN" = "1" ] && rm -rf $DIR/$oaisim_build_dir/build - mkdir -p $DIR/$oaisim_build_dir/build - cd $DIR/$oaisim_build_dir/build - eval $CMAKE_CMD - compilations \ - $oaisim_build_dir $oaisim_exec \ - $oaisim_exec $dbin/$oaisim_exec.$REL - compilations \ - $oaisim_build_dir $config_libconfig_shlib \ - lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so - compilations \ - $oaisim_build_dir coding \ - libcoding.so $dbin/libcoding.so - if [ "$NOS1" != "1" ] ; then - - [ "$CLEAN" = "1" ] && rm -rf $DIR/at_commands/build - echo_info "Compiling at_nas_ue" - mkdir -p $DIR/at_commands/build - cd $DIR/at_commands/build - eval $CMAKE_CMD - compilations \ - at_commands at_nas_ue \ - at_nas_ue $dbin/at_nas_ue - - # ue_ip driver compilation - echo_info "Compiling UE specific part (ue_ip driver and usim tools)" - compilations \ - oaisim_build_oai ue_ip \ - CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko - - [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build - mkdir -p $DIR/nas_sim_tools/build - cd $DIR/nas_sim_tools/build - eval $CMAKE_CMD - compilations \ - nas_sim_tools usim \ - usim $dbin/usim - compilations \ - nas_sim_tools nvram \ - nvram $dbin/nvram - compilations \ - nas_sim_tools conf2uedata \ - conf2uedata $dbin/conf2uedata - - # generate USIM data - if [ -f $dbin/conf2uedata ]; then - install_nas_tools $conf_nvram_path $gen_nvram_path - else - echo_warning "not generated UE NAS files: binaries not found" - fi - else - - compilations \ - $oaisim_build_dir rb_tool \ - rb_tool $dbin/rb_tool - - # nasmesh driver compilation - compilations \ - $oaisim_build_dir nasmesh \ - CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko - - #oai_nw_drv - #compilations \ - # $oaisim_build_dir oai_nw_drv \ - # CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko - fi - - if [ "$TP" == "ETHERNET" ] ; then - compilations \ - $oaisim_build_dir oai_eth_transpro \ - liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL - ln -sf liboai_eth_transpro.so liboai_transpro.so - ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so - echo_info "liboai_transpro.so is linked with ETHERNET library" - fi - - cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt - cp $DIR/oaisim_mme_build_oai/CMakeLists.template $cmake_file - echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file - echo "set ( XFORMS $XFORMS )" >> $cmake_file - echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file - echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file - echo "set ( T_TRACER $T_TRACER )" >> $cmake_file - echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file - #[ "$CLEAN" = "1" ] && rm -rf $DIR/oaisim_mme_build_oai/build - #mkdir -p $DIR/oaisim_mme_build_oai/build - #cd $DIR/oaisim_mme_build_oai/build - #eval $CMAKE_CMD - #compilations \ - # oaisim_mme_build_oai oaisim_mme \ - # oaisim_mme $dbin/oaisim_mme.$REL - fi # Telnet server compilation ##################### @@ -968,7 +841,8 @@ fi { cd $OPENAIR_DIR/cmake_targets/basic_simulator/enb cmake . - make -j`nproc` coding params_libconfig tcp_bridge_oai lte-softmodem + make -j`nproc` lte-softmodem + make -j`nproc` coding params_libconfig tcp_bridge_oai ln -sf libtcp_bridge_oai.so liboai_device.so cd ../.. } > $dlog/basic_simulator_enb.txt 2>&1 @@ -1005,7 +879,7 @@ fi echo "set(PACKAGE_NAME \"simulator_ue\")" >> $cmake_file echo "set (DEADLINE_SCHEDULER \"False\" )" >> $cmake_file echo "set (CPU_AFFINITY \"False\" )" >> $cmake_file - echo "set ( T_TRACER \"False\" )" >> $cmake_file + echo "set ( T_TRACER \"True\" )" >> $cmake_file echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)" >> $cmake_file echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)" >> $cmake_file @@ -1023,7 +897,8 @@ fi { cd $OPENAIR_DIR/cmake_targets/basic_simulator/ue cmake . - make -j`nproc` coding params_libconfig tcp_bridge_oai lte-uesoftmodem + make -j`nproc` lte-uesoftmodem + make -j`nproc` coding params_libconfig tcp_bridge_oai ln -sf libtcp_bridge_oai.so liboai_device.so cd ../.. } > $dlog/basic_simulator_ue.txt 2>&1 diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 722db38ffc..4b0ea9cc6b 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -56,7 +56,7 @@ white='\E[37m' reset_color='\E[00m' COLORIZE=1 -cecho() { +cecho() { # Color-echo # arg1 = message # arg2 = color @@ -147,10 +147,10 @@ clean_kernel() { clean_all_files() { set_openair_env dir=$OPENAIR_DIR/cmake_targets - rm -rf $dir/log $OPENAIR_DIR/targets/bin/* + rm -rf $dir/log $OPENAIR_DIR/targets/bin/* rm -rf $dir/lte_build_oai $dir/lte-simulators/build rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt - rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build + rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build } ################################### @@ -271,8 +271,23 @@ check_install_usrp_uhd_driver(){ $SUDO apt-get remove libuhd-dev libuhd003 uhd-host -y || true v=$(lsb_release -cs) $SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main" - #The new USRP repository - $SUDO add-apt-repository ppa:ettusresearch/uhd -y + # The new USRP repository + # Raphael Defosseux: Adding a loop on adding PPA because in CI the gpg key retrieve may + # timeout due to proxy / network latencies in Eurecom on VM + echo_info "\nAdding PPA repository ettusresearch/uhd\n" + x=0 + while [ $x -le 5 ] + do + if $SUDO add-apt-repository ppa:ettusresearch/uhd -y + then + echo_info "add-apt-repository successful\n" + break + else + echo_info "add-apt-repository failed, retrying...\n" + sleep 30 + fi + x=$((x + 1)) + done $SUDO apt-get update $SUDO apt-get -y --allow-unauthenticated install python python-tk libboost-all-dev libusb-1.0-0-dev $SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host @@ -337,7 +352,7 @@ check_install_bladerf_driver(){ fi $SUDO apt-get install -y --allow-unauthenticated bladerf libbladerf-dev $SUDO apt-get install -y --allow-unauthenticated bladerf-firmware-fx3 - $SUDO apt-get install -y --allow-unauthenticated bladerf-fpga-hostedx40 + $SUDO apt-get install -y --allow-unauthenticated bladerf-fpga-hostedx40 elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then install_bladerf_driver_from_source else @@ -358,7 +373,7 @@ check_install_lmssdr_driver(){ echo_error "lmssdr support implies installing lmssdr drivers and tools" \ " from sources. check:" echo_info "https://open-cells.com/index.php/2017/05/10/limesdr-installation/" - echo_fatal "Cannot compile lmssdr device" + echo_fatal "Cannot compile lmssdr device" fi @@ -455,7 +470,7 @@ check_install_additional_tools (){ python2-matplotlib" fi $SUDO $INSTALLER install -y $PACKAGE_LIST - + $SUDO rm -fr /opt/ssh $SUDO GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/ssh.git /opt/ssh @@ -489,24 +504,24 @@ check_install_oai_software() { $SUDO apt install -y software-properties-common case "$(get_distribution_release)" in "ubuntu14.04") - specific_packages="libtasn1-3-dev gccxml libgnutls-dev libatlas-dev iproute libconfig8-dev" + specific_packages="libtasn1-3-dev libgnutls-dev libatlas-dev iproute libconfig8-dev" # For iperf3 $SUDO add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty-backports universe" $SUDO apt-get update ;; "ubuntu16.04") - specific_packages="libtasn1-6-dev gccxml libgnutls-dev libatlas-dev iproute libconfig8-dev" + specific_packages="libtasn1-6-dev libgnutls-dev libatlas-dev iproute libconfig8-dev" ;; "ubuntu17.04") - specific_packages="libtasn1-6-dev castxml libgnutls28-dev libatlas-dev iproute libconfig8-dev" + specific_packages="libtasn1-6-dev libgnutls28-dev libatlas-dev iproute libconfig8-dev" ;; "ubuntu17.10") - specific_packages="libtasn1-6-dev castxml libgnutls28-dev iproute libconfig8-dev" + specific_packages="libtasn1-6-dev libgnutls28-dev iproute libconfig8-dev" LAPACK_LIBNAME="liblapack.so-x86_64-linux-gnu" LAPACK_TARGET="/usr/lib/x86_64-linux-gnu/atlas/liblapack.so" ;; "ubuntu18.04") - specific_packages="libtasn1-6-dev castxml libgnutls28-dev iproute2 libconfig-dev" + specific_packages="libtasn1-6-dev libgnutls28-dev iproute2 libconfig-dev" LAPACK_LIBNAME="liblapack.so-x86_64-linux-gnu" LAPACK_TARGET="/usr/lib/x86_64-linux-gnu/atlas/liblapack.so" ;; @@ -534,6 +549,8 @@ check_install_oai_software() { iptables-dev \ libatlas-base-dev \ libblas-dev \ + liblapack-dev\ + liblapacke-dev\ libffi-dev \ libforms-bin \ libforms-dev \ @@ -581,13 +598,10 @@ check_install_oai_software() { $SUDO $INSTALLER install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm fi $SUDO $INSTALLER install -y python-epdb - $SUDO $INSTALLER install -y gccxml else $SUDO $INSTALLER install -y mscgen pydb - # Fedora repos already contain gccxml's successor castxml. - $SUDO $INSTALLER install -y castxml fi - + $SUDO $INSTALLER install -y \ autoconf \ automake \ @@ -663,8 +677,14 @@ install_asn1c_from_source(){ echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log " ( $SUDO rm -rf /tmp/asn1c - GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c + # GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c + git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c cd /tmp/asn1c + # better to use a given commit than a branch in case the branch + # is updated and requires modifications in the source of OAI + #git checkout velichkov_s1ap_plus_option_group + git checkout ec830d70bbb014b769810355a2f321a91ccd8a58 + autoreconf -iv ./configure make -j`nproc` $SUDO make install @@ -674,7 +694,7 @@ install_asn1c_from_source(){ } ################################################# -# 2. compile +# 2. compile ################################################ install_nas_tools() { @@ -703,7 +723,7 @@ set_openair_env(){ [ -f "/.$fullpath" ] || fullpath=`readlink -f $PWD/$fullpath` openair_path=${fullpath%/cmake_targets/*} openair_path=${openair_path%/targets/*} - openair_path=${openair_path%/openair[123]/*} + openair_path=${openair_path%/openair[123]/*} export OPENAIR_DIR=$openair_path export OPENAIR1_DIR=$openair_path/openair1 export OPENAIR2_DIR=$openair_path/openair2 @@ -720,7 +740,7 @@ ppid=$$ arraycounter=1 echo_info "** Trapped CTRL-C. Killing all subprocesses now..." echo_info "** Calling sync now..." -sync +sync while true do FORLOOP=FALSE @@ -738,7 +758,7 @@ do arraycounter=`expr $arraycounter - 1` ## We want to kill child process id first and then parent id's while [ $arraycounter -ne 0 ] - do + do echo "first we send ctrl-c to program" $SUDO kill -INT "${procid[$arraycounter]}" sleep 5 diff --git a/cmake_targets/tools/init_nas_nos1 b/cmake_targets/tools/init_nas_nos1 index f7347e5508..5766020d70 100755 --- a/cmake_targets/tools/init_nas_nos1 +++ b/cmake_targets/tools/init_nas_nos1 @@ -48,7 +48,7 @@ if [ "$1" = "eNB" ]; then else if [ "$1" = "UE" ]; then echo "bring up oai0 interface for UE" - sudo ifconfig oai0 10.0.1.9 netmask 255.255.255.0 broadcast 10.0.1.255 + sudo ifconfig oai0 10.0.1.2 netmask 255.255.255.0 broadcast 10.0.1.255 $OPENAIR_DIR/targets/bin/rb_tool -a -c0 -i0 -z0 -s 10.0.1.2 -t 10.0.1.1 -r 1 fi fi diff --git a/cmake_targets/tools/init_nas_s1 b/cmake_targets/tools/init_nas_s1 old mode 100644 new mode 100755 diff --git a/cmake_targets/tools/test_helper b/cmake_targets/tools/test_helper index cae0bacbe0..f73b53c4be 100644 --- a/cmake_targets/tools/test_helper +++ b/cmake_targets/tools/test_helper @@ -26,15 +26,17 @@ xUnit_start() { # \param $3 testcase result # \param $4 run result # \param $5 XML file local to test case for storing its own results +# \param $6 proper description xUnit_fail() { class=$1 test_case=$2 result=$3 run_result=$4 xmlfile_testcase=$5 + desc=$6 currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) - xml="" + xml="" echo -e "$xml" >> "$xmlfile_testcase" XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_FAILED=$((XUNIT_FAILED+1)) @@ -48,15 +50,17 @@ xUnit_fail() { # \param $3 testcase result # \param $4 run result # \param $5 XML file local to test case for storing its own results +# \param $6 proper description xUnit_success() { class=$1 test_case=$2 result=$3 run_result=$4 xmlfile_testcase=$5 + desc=$6 currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) - xml="" + xml="" echo -e $xml >> $xmlfile_testcase XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_SUCCESS=$((XUNIT_SUCCESS+1)) diff --git a/common/config/config_cmdline.c b/common/config/config_cmdline.c index 040cd92faf..d5e099451a 100644 --- a/common/config/config_cmdline.c +++ b/common/config/config_cmdline.c @@ -29,9 +29,11 @@ * \note * \warning */ +#define _GNU_SOURCE #include #include #include +#include #include #include "config_userapi.h" @@ -41,6 +43,7 @@ char *tmpval = value; int optisset=0; char defbool[2]="1"; + if ( value == NULL) { if( (cfgoptions->paramflags &PARAMFLAG_BOOL) == 0 ) { /* not a boolean, argument required */ fprintf(stderr,"[CONFIG] command line, option %s requires an argument\n",cfgoptions->optname); @@ -103,15 +106,15 @@ char defbool[2]="1"; if (optisset == 1) { cfgoptions->paramflags = cfgoptions->paramflags | PARAMFLAG_PARAMSET; } - return optisset; } int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) { -char **p = config_get_if()->argv; + + int c = config_get_if()->argc; -int j; +int i,j; char *pp; char *cfgpath; @@ -122,42 +125,72 @@ char *cfgpath; return -1; } - j=0; - p++; - c--; - while (c > 0 && *p != NULL) { - if (strcmp(*p, "-h") == 0 || strcmp(*p, "--help") == 0 ) { - config_printhelp(cfgoptions,numoptions); + j = 0; + i = 0; + while (c > 0 ) { + char *oneargv = strdup(config_get_if()->argv[i]); /* we use strtok_r which modifies its string paramater, and we don't want argv to be modified */ +/* first check help options, either --help, -h or --help_
*/ + if (strncmp(oneargv, "-h",2) == 0 || strncmp(oneargv, "--help",6) == 0 ) { + char *tokctx; + pp=strtok_r(oneargv, "_",&tokctx); + if (pp == NULL || strcasecmp(pp,config_get_if()->argv[i] ) == 0 ) { + if( prefix == NULL) { + config_printhelp(cfgoptions,numoptions); + if ( ! ( CONFIG_ISFLAGSET(CONFIG_NOEXITONHELP))) + exit_fun("[CONFIG] Exiting after displaying help\n"); + } + } else { + pp=strtok_r(NULL, "_",&tokctx); + if ( prefix != NULL && pp != NULL && strncasecmp(prefix,pp,strlen(pp)) == 0 ) { + printf ("Help for %s section:\n",prefix); + config_printhelp(cfgoptions,numoptions); + if ( ! (CONFIG_ISFLAGSET(CONFIG_NOEXITONHELP))) { + fprintf(stderr,"[CONFIG] %s %i section %s:", __FILE__, __LINE__, prefix); + exit_fun(" Exiting after displaying help\n"); + } + } + } } - if (*p[0] == '-') { - for(int i=0;i 2) && (strcmp(*p + 2,cfgpath ) == 0 )) ) { - pp = *(p+1); - if ( ( pp != NULL ) && (c>1) && (pp[0]!= '-') ) { - - j += processoption(&(cfgoptions[i]), pp); - } else { - j += processoption(&(cfgoptions[i]), NULL); - } + if ( ((strlen(oneargv) == 2) && (strcmp(oneargv + 1,cfgpath) == 0)) || /* short option, one "-" */ + ((strlen(oneargv) > 2) && (strcmp(oneargv + 2,cfgpath ) == 0 )) ) { + char *valptr=NULL; + int ret; + pp = config_get_if()->argv[i+1]; + if (pp != NULL && c > 1) { + ret = strlen(pp); + if (ret > 0 ) { + if (pp[0] != '-') + valptr=pp; + else if ( ret > 1 && pp[0] == '-' && isdigit(pp[1]) ) + valptr=pp; + } + } + j += processoption(&(cfgoptions[n]), pp); + if ( valptr != NULL ) { + i++; + c--; + } break; } - } /* for */ - } /* if (*p[0] == '-') */ - p++; + } /* for n... */ + } /* if (oneargv[0] == '-') */ + free(oneargv); + i++; c--; } /* fin du while */ - printf_cmdl("[CONFIG] %s %i options set from command line\n",((prefix == NULL) ? "":prefix),j); + printf_cmdl("[CONFIG] %s %i options set from command line\n",((prefix == NULL) ? "(root)":prefix),j); free(cfgpath); return j; } /* parse_cmdline*/ diff --git a/common/config/config_load_configmodule.c b/common/config/config_load_configmodule.c index 7860742804..2c6700c73e 100644 --- a/common/config/config_load_configmodule.c +++ b/common/config/config_load_configmodule.c @@ -97,7 +97,77 @@ int st; } /*-----------------------------------------------------------------------------------*/ /* from here: interface implementtion of the configuration module */ +int nooptfunc(void) { + return 0; +}; +int config_cmdlineonly_getlist(paramlist_def_t *ParamList, + paramdef_t *params, int numparams, char *prefix) +{ + ParamList->numelt = 0; + return 0; +} + + +int config_cmdlineonly_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) +{ + int defval; + int fatalerror=0; + int numdefvals=0; + + + for(int i=0;i option, default cfgmode to libconfig with one parameter, the path to the configuration file */ modeparams=cfgmode; - cfgmode=strdup(DEFAULT_CFGMODE); + cfgmode=strdup(CONFIG_LIBCONFIGFILE); } cfgptr = malloc(sizeof(configmodule_interface_t)); @@ -153,7 +229,6 @@ int i; cfgptr->argc = argc; cfgptr->argv = argv; cfgptr->cfgmode=strdup(cfgmode); - cfgptr->num_cfgP=0; atoken=strtok_r(modeparams,":",&strtokctx); while ( cfgptr->num_cfgP< CONFIG_MAX_OOPT_PARAMS && atoken != NULL) { @@ -176,24 +251,33 @@ int i; for (i=0;inum_cfgP; i++) { printf("%s ",cfgptr->cfgP[i]); } - printf("\n"); + printf(", debug flags: 0x%08x\n",cfgptr->rtflags); - - i=load_config_sharedlib(cfgptr); - if (i< 0) { - fprintf(stderr,"[CONFIG] %s %d config module %s couldn't be loaded\n", __FILE__, __LINE__,cfgmode); - cfgptr->rtflags = cfgptr->rtflags | CONFIG_HELP | CONFIG_ABORT; + if (strstr(cfgparam,CONFIG_CMDLINEONLY) == NULL) { + i=load_config_sharedlib(cfgptr); + if (i == 0) { + printf("[CONFIG] config module %s loaded\n",cfgmode); + Config_Params[CONFIGPARAM_DEBUGFLAGS_IDX].uptr=&(cfgptr->rtflags); + config_get(Config_Params,CONFIG_PARAMLENGTH(Config_Params), CONFIG_SECTIONNAME ); + } else { + fprintf(stderr,"[CONFIG] %s %d config module \"%s\" couldn't be loaded\n", __FILE__, __LINE__,cfgmode); + cfgptr->rtflags = cfgptr->rtflags | CONFIG_HELP | CONFIG_ABORT; + } } else { - printf("[CONFIG] config module %s loaded\n",cfgmode); - Config_Params[CONFIGPARAM_DEBUGFLAGS_IDX].uptr=&(cfgptr->rtflags); - config_get(Config_Params,CONFIG_PARAMLENGTH(Config_Params), CONFIG_SECTIONNAME ); + cfgptr->init = (configmodule_initfunc_t)nooptfunc; + cfgptr->get = config_cmdlineonly_get; + cfgptr->getlist = config_cmdlineonly_getlist; + cfgptr->end = (configmodule_endfunc_t)nooptfunc; } if (modeparams != NULL) free(modeparams); if (cfgmode != NULL) free(cfgmode); - if (CONFIG_ISFLAGSET(CONFIG_ABORT)) config_printhelp(Config_Params,CONFIG_PARAMLENGTH(Config_Params)); + if (CONFIG_ISFLAGSET(CONFIG_ABORT)) { + config_printhelp(Config_Params,CONFIG_PARAMLENGTH(Config_Params)); +// exit(-1); + } return cfgptr; } diff --git a/common/config/config_load_configmodule.h b/common/config/config_load_configmodule.h index 724cd1dbf5..ff3fa80f4e 100644 --- a/common/config/config_load_configmodule.h +++ b/common/config/config_load_configmodule.h @@ -41,17 +41,19 @@ #define CONFIG_MAX_ALLOCATEDPTRS 1024 // maximum number of parameters that can be dynamicaly allocated in the config module /* default values for configuration module parameters */ -#define DEFAULT_CFGMODE "libconfig" // use libconfig file -#define DEFAULT_CFGFILENAME "oai.conf" // default config file +#define CONFIG_LIBCONFIGFILE "libconfig" // use libconfig file +#define CONFIG_CMDLINEONLY "cmdline" // use only command line options +#define DEFAULT_CFGFILENAME "oai.conf" // default config file /* rtflags bit position definitions */ -#define CONFIG_PRINTPARAMS 1 // print parameters values while processing -#define CONFIG_DEBUGPTR 1<<1 // print memory allocation/free debug messages -#define CONFIG_DEBUGCMDLINE 1<<2 // print command line processing messages -#define CONFIG_NOABORTONCHKF 1<<3 // disable abort execution when parameter checking function fails -#define CONFIG_HELP 1<<20 // print help message -#define CONFIG_ABORT 1<<21 // config failed,abort execution -#define CONFIG_NOOOPT 1<<22 // no -O option found when parsing command line +#define CONFIG_PRINTPARAMS 1 // print parameters values while processing +#define CONFIG_DEBUGPTR (1<<1) // print memory allocation/free debug messages +#define CONFIG_DEBUGCMDLINE (1<<2) // print command line processing messages +#define CONFIG_NOABORTONCHKF (1<<3) // disable abort execution when parameter checking function fails +#define CONFIG_NOEXITONHELP (1<<19) // do not exit after printing help +#define CONFIG_HELP (1<<20) // print help message +#define CONFIG_ABORT (1<<21) // config failed,abort execution +#define CONFIG_NOOOPT (1<<22) // no -O option found when parsing command line typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP); typedef int(*configmodule_getfunc_t)(paramdef_t *,int numparams, char *prefix); typedef int(*configmodule_getlistfunc_t)(paramlist_def_t *, paramdef_t *,int numparams, char *prefix); @@ -75,7 +77,7 @@ typedef struct configmodule_interface #ifdef CONFIG_LOADCONFIG_MAIN configmodule_interface_t *cfgptr=NULL; -static char config_helpstr [] = "\n lte-softmodem -O [config mode]<:dbg[debugflags]> \n \ +static char config_helpstr [] = "\n lte-softmodem -O [config mode]<:dbgl[debugflags]> \n \ debugflags can also be defined in the config_libconfig section of the config file\n \ debugflags: mask, 1->print parameters, 2->print memory allocations debug messages\n \ 4->print command line processing debug messages\n "; @@ -97,9 +99,9 @@ extern configmodule_interface_t *cfgptr; #endif -#define printf_params(...) if ( (cfgptr->rtflags & CONFIG_PRINTPARAMS) != 0 ) { printf ( __VA_ARGS__ ); } -#define printf_ptrs(...) if ( (cfgptr->rtflags & CONFIG_DEBUGPTR) != 0 ) { printf ( __VA_ARGS__ ); } -#define printf_cmdl(...) if ( (cfgptr->rtflags & CONFIG_DEBUGCMDLINE) != 0 ) { printf ( __VA_ARGS__ ); } +#define printf_params(...) if ( (cfgptr->rtflags & (CONFIG_PRINTPARAMS)) != 0 ) { printf ( __VA_ARGS__ ); } +#define printf_ptrs(...) if ( (cfgptr->rtflags & (CONFIG_DEBUGPTR)) != 0 ) { printf ( __VA_ARGS__ ); } +#define printf_cmdl(...) if ( (cfgptr->rtflags & (CONFIG_DEBUGCMDLINE)) != 0 ) { printf ( __VA_ARGS__ ); } extern configmodule_interface_t *load_configmodule(int argc, char **argv); extern void end_configmodule(void); diff --git a/common/config/config_paramdesc.h b/common/config/config_paramdesc.h index 6f153535fb..c65e298dfb 100644 --- a/common/config/config_paramdesc.h +++ b/common/config/config_paramdesc.h @@ -148,7 +148,10 @@ typedef struct paramdef #define TYPE_MASK 10 #define TYPE_DOUBLE 16 #define TYPE_IPV4ADDR 20 +#define TYPE_LASTSCALAR 25 +#define PARAM_ISLISTORARRAY(P) (P->type > TYPE_LASTSCALAR ) +#define PARAM_ISSCALAR(P) (P->type < TYPE_LASTSCALAR ) #define TYPE_STRINGLIST 50 #define TYPE_INTARRAY 51 diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c index c1acc84384..3f3651aa01 100644 --- a/common/config/config_userapi.c +++ b/common/config/config_userapi.c @@ -35,6 +35,8 @@ #include #include #include +#include + #include "config_userapi.h" extern void exit_fun(const char* s); // lte-softmodem clean exit function @@ -50,10 +52,30 @@ configmodule_interface_t *config_get_if(void) char * config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) { - + if (ptr == NULL ) { + ptr = malloc(sizeof(char *)); + if (ptr != NULL) { + *ptr=NULL; + cfgoptions->strptr=ptr; + if ( (cfgoptions->paramflags & PARAMFLAG_NOFREE) == 0) { + config_get_if()->ptrs[config_get_if()->numptrs] = (char *)ptr; + config_get_if()->numptrs++; + } + } else { + fprintf(stderr, "[CONFIG] %s %d option %s, cannot allocate pointer: %s \n", + __FILE__, __LINE__, cfgoptions->optname, strerror(errno)); + exit(-1); + } + } printf_ptrs("[CONFIG] %s ptr: 0x%08lx requested size: %i\n",cfgoptions->optname,(uintptr_t)(ptr),length); - if(cfgoptions->numelt > 0) { /* already allocated */ - return *ptr; + if(cfgoptions->numelt > 0 && PARAM_ISSCALAR(cfgoptions) ) { /* already allocated */ + if (*ptr != NULL) { + return *ptr; + } else { + fprintf(stderr,"[CONFIG] %s %d option %s, definition error: value pointer is NULL, declared as %i bytes allocated\n", + __FILE__, __LINE__,cfgoptions->optname, cfgoptions->numelt); + exit(-1); + } } if (*ptr == NULL) { @@ -75,7 +97,7 @@ char * config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val) { int tmpval=val; - if ( ((cfgoptions->paramflags &PARAMFLAG_BOOL) != 0) && tmpval >1) { + if ( ((cfgoptions->paramflags &PARAMFLAG_BOOL) != 0) && tmpval >0) { tmpval =1; } switch (cfgoptions->type) { @@ -160,7 +182,7 @@ int st=0; } } if (st != 0) { - fprintf(stderr,"[CONFIG] config_execcheck: %i parameters with wrong value\n", -st); + fprintf(stderr,"[CONFIG] config_execcheck: section %s %i parameters with wrong value\n", prefix, -st); if ( CONFIG_ISFLAGSET(CONFIG_NOABORTONCHKF) == 0) { exit_fun("exit because configuration failed\n"); } @@ -173,7 +195,7 @@ int config_get(paramdef_t *params,int numparams, char *prefix) int ret= -1; if (CONFIG_ISFLAGSET(CONFIG_ABORT)) { - fprintf(stderr,"[CONFIG] config_get skipped, config module not properly initialized\n"); + fprintf(stderr,"[CONFIG] config_get, section %s skipped, config module not properly initialized\n",prefix); return ret; } configmodule_interface_t *cfgif = config_get_if(); @@ -283,3 +305,115 @@ int config_checkstr_assign_integer(paramdef_t *param) return -1; } + +int config_setdefault_string(paramdef_t *cfgoptions, char *prefix) +{ + int status = 0; + if( cfgoptions->defstrval != NULL) { + status=1; + + if (cfgoptions->numelt == 0 ) { + config_check_valptr(cfgoptions, (char **)(cfgoptions->strptr), sizeof(char *)); + config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(cfgoptions->defstrval)+1); + sprintf(*(cfgoptions->strptr), "%s",cfgoptions->defstrval); + printf_params("[CONFIG] %s.%s set to default value \"%s\"\n", ((prefix == NULL) ? "" : prefix), cfgoptions->optname, *(cfgoptions->strptr)); + } else { + sprintf((char *)*(cfgoptions->strptr), "%s",cfgoptions->defstrval); + printf_params("[CONFIG] %s.%s set to default value \"%s\"\n", ((prefix == NULL) ? "" : prefix), cfgoptions->optname, (char *)*(cfgoptions->strptr)); + } + } + return status; +} + +int config_setdefault_stringlist(paramdef_t *cfgoptions, char *prefix) +{ + int status = 0; + if( cfgoptions->defstrlistval != NULL) { + cfgoptions->strlistptr=cfgoptions->defstrlistval; + status=1; + for(int j=0; jnumelt; j++) + printf_params("[CONFIG] %s.%s[%i] set to default value %s\n", ((prefix == NULL) ? "" : prefix), cfgoptions->optname,j, cfgoptions->strlistptr[j]); + } + return status; +} + +int config_setdefault_int(paramdef_t *cfgoptions, char *prefix) +{ + int status = 0; + config_check_valptr(cfgoptions, (char **)(&(cfgoptions->iptr)),sizeof(int32_t)); + if( ((cfgoptions->paramflags & PARAMFLAG_MANDATORY) == 0)) { + config_assign_int(cfgoptions,cfgoptions->optname,cfgoptions->defintval); + status=1; + printf_params("[CONFIG] %s.%s set to default value\n", ((prefix == NULL) ? "" : prefix), cfgoptions->optname); + } + return status; +} + +int config_setdefault_int64(paramdef_t *cfgoptions, char *prefix) +{ + int status = 0; + config_check_valptr(cfgoptions, (char **)&(cfgoptions->i64ptr),sizeof(long long)); + if( ((cfgoptions->paramflags & PARAMFLAG_MANDATORY) == 0)) { + *(cfgoptions->u64ptr)=cfgoptions->defuintval; + status=1; + printf_params("[CONFIG] %s.%s set to default value %llu\n", ((prefix == NULL) ? "" : prefix), cfgoptions->optname, (long long unsigned)(*(cfgoptions->u64ptr))); + } + return status; +} + +int config_setdefault_intlist(paramdef_t *cfgoptions, char *prefix) +{ + int status = 0; + if( cfgoptions->defintarrayval != NULL) { + config_check_valptr(cfgoptions,(char **)&(cfgoptions->iptr), sizeof(int32_t*)); + cfgoptions->iptr=cfgoptions->defintarrayval; + status=1; + for (int j=0; jnumelt ; j++) { + printf_params("[CONFIG] %s[%i] set to default value %i\n",cfgoptions->optname ,j,(int)cfgoptions->iptr[j]); + } + } + return status; +} + +int config_setdefault_double(paramdef_t *cfgoptions, char *prefix) +{ + int status = 0; + config_check_valptr(cfgoptions, (char **)&(cfgoptions->dblptr),sizeof(double)); + if( ((cfgoptions->paramflags & PARAMFLAG_MANDATORY) == 0)) { + *(cfgoptions->u64ptr)=cfgoptions->defdblval; + status=1; + printf_params("[CONFIG] %s set to default value %lf\n",cfgoptions->optname , *(cfgoptions->dblptr)); + } + return status; +} + +int config_assign_ipv4addr(paramdef_t *cfgoptions, char *ipv4addr) +{ + config_check_valptr(cfgoptions,(char **)&(cfgoptions->uptr), sizeof(int)); + int rst=inet_pton(AF_INET, ipv4addr ,cfgoptions->uptr ); + if (rst == 1 && *(cfgoptions->uptr) > 0) { + printf_params("[CONFIG] %s: %s\n",cfgoptions->optname, ipv4addr); + return 1; + } else { + if ( strncmp(ipv4addr,ANY_IPV4ADDR_STRING,sizeof(ANY_IPV4ADDR_STRING)) == 0) { + printf_params("[CONFIG] %s:%s (INADDR_ANY) \n",cfgoptions->optname,ipv4addr); + *cfgoptions->uptr=INADDR_ANY; + return 1; + } else { + fprintf(stderr,"[CONFIG] %s not valid for %s \n", ipv4addr, cfgoptions->optname); + return -1; + } + } + return 0; +} + + +int config_setdefault_ipv4addr(paramdef_t *cfgoptions, char *prefix) +{ + int status = 0; + + if (cfgoptions->defstrval != NULL) { + status = config_assign_ipv4addr(cfgoptions, cfgoptions->defstrval); + } + return status; +} diff --git a/common/config/config_userapi.h b/common/config/config_userapi.h index 923a690f51..217310db36 100644 --- a/common/config/config_userapi.h +++ b/common/config/config_userapi.h @@ -38,10 +38,15 @@ extern "C" { #endif +/* get rid of "exit_fun undeclared" warning */ +extern void exit_fun(const char* s); + #define CONFIG_GETSOURCE ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgmode ) #define CONFIG_GETNUMP ( (config_get_if()==NULL) ? 0 : config_get_if()->num_cfgP ) #define CONFIG_GETP(P) ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgP[P] ) #define CONFIG_ISFLAGSET(P) ( (config_get_if()==NULL) ? 0 : !!(config_get_if()->rtflags & P)) +#define CONFIG_SETRTFLAG(P) if (config_get_if()) { config_get_if()->rtflags |= P; } +#define CONFIG_CLEARRTFLAG(P) if (config_get_if()) { config_get_if()->rtflags &= (~P); } #define CONFIG_ISPARAMFLAGSET(P,F) ( !!(P.paramflags & F)) /* utility functions, to be used by configuration module and/or configuration libraries */ extern configmodule_interface_t *config_get_if(void); @@ -50,6 +55,7 @@ extern void config_printhelp(paramdef_t *,int numparams); extern int config_process_cmdline(paramdef_t *params,int numparams, char *prefix); extern void config_assign_processedint(paramdef_t *cfgoption, int val); extern void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val); +extern int config_assign_ipv4addr(paramdef_t *cfgoptions, char *ipv4addr); /* apis to get parameters, to be used by oai modules, at configuration time */ extern int config_get(paramdef_t *params,int numparams, char *prefix); @@ -66,6 +72,15 @@ extern int config_check_intrange(paramdef_t *param); extern int config_check_strval(paramdef_t *param); extern int config_checkstr_assign_integer(paramdef_t *param); +/* functions to set a parameter to its default value */ +extern int config_setdefault_string(paramdef_t *cfgoptions, char *prefix); +extern int config_setdefault_stringlist(paramdef_t *cfgoptions, char *prefix); +extern int config_setdefault_int(paramdef_t *cfgoptions, char *prefix); +extern int config_setdefault_int64(paramdef_t *cfgoptions, char *prefix); +extern int config_setdefault_intlist(paramdef_t *cfgoptions, char *prefix); +extern int config_setdefault_double(paramdef_t *cfgoptions, char *prefix); +extern int config_setdefault_ipv4addr(paramdef_t *cfgoptions, char *prefix); + #define CONFIG_GETCONFFILE (config_get_if()->cfgP[0]) #ifdef __cplusplus diff --git a/common/config/libconfig/config_libconfig.c b/common/config/libconfig/config_libconfig.c index cfb0a214cf..f192fd2dc5 100644 --- a/common/config/libconfig/config_libconfig.c +++ b/common/config/libconfig/config_libconfig.c @@ -129,8 +129,6 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) switch(cfgoptions[i].type) { case TYPE_STRING: - -printf("call config_lookup_string for '%s' %p\n", cfgpath, &(libconfig_privdata.cfg)); fflush(stdout); if ( config_lookup_string(&(libconfig_privdata.cfg),cfgpath, (const char **)&str)) { if ( cfgoptions[i].numelt > 0 && str != NULL && strlen(str) >= cfgoptions[i].numelt ) { fprintf(stderr,"[LIBCONFIG] %s: %s exceeds maximum length of %i bytes, value truncated\n", @@ -138,7 +136,7 @@ printf("call config_lookup_string for '%s' %p\n", cfgpath, &(libconfig_privdata. str[strlen(str)-1] = 0; } if (cfgoptions[i].numelt == 0 ) { - config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *)); + // config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *)); config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(str)+1); sprintf( *(cfgoptions[i].strptr) , "%s", str); printf_params("[LIBCONFIG] %s: \"%s\"\n", cfgpath,*(cfgoptions[i].strptr) ); @@ -147,21 +145,7 @@ printf("call config_lookup_string for '%s' %p\n", cfgpath, &(libconfig_privdata. printf_params("[LIBCONFIG] %s: \"%s\"\n", cfgpath,(char *)cfgoptions[i].strptr ); } } else { - if( cfgoptions[i].defstrval != NULL) { - defval=1; - - if (cfgoptions[i].numelt == 0 ) { - config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *)); - config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(cfgoptions[i].defstrval)+1); - sprintf(*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval); - printf_params("[LIBCONFIG] %s set to default value \"%s\"\n", cfgpath, *(cfgoptions[i].strptr)); - } else { - sprintf((char *)*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval); - printf_params("[LIBCONFIG] %s set to default value \"%s\"\n", cfgpath, (char *)*(cfgoptions[i].strptr)); - } - } else { - notfound=1; - } + defval=config_setdefault_string(&(cfgoptions[i]),prefix); } break; case TYPE_STRINGLIST: @@ -169,14 +153,7 @@ printf("call config_lookup_string for '%s' %p\n", cfgpath, &(libconfig_privdata. if ( setting != NULL) { read_strlist(&cfgoptions[i],setting,cfgpath); } else { - if( cfgoptions[i].defstrlistval != NULL) { - cfgoptions[i].strlistptr=cfgoptions[i].defstrlistval; - defval=1; - for(int j=0; j 0) { - printf_params("[LIBCONFIG] %s: %s\n", cfgpath,str ); - } else { - if ( strncmp(str,ANY_IPV4ADDR_STRING,sizeof(ANY_IPV4ADDR_STRING)) == 0) { - printf_params("[LIBCONFIG] %s:%s (INADDR_ANY) \n",cfgpath,str); - *cfgoptions[i].uptr=INADDR_ANY; - } else { - fprintf(stderr,"[LIBCONFIG] %s not valid for %s \n", str, cfgpath); - fatalerror=1; - } + defval=config_setdefault_ipv4addr(&(cfgoptions[i]),prefix); + } else { + rst=config_assign_ipv4addr(cfgoptions, str); + if (rst < 0) { + fprintf(stderr,"[LIBCONFIG] %s not valid for %s \n", str, cfgpath); + fatalerror=1; } - } else { - notfound=1; - } - + } break; case TYPE_LIST: setting = config_setting_lookup (config_root_setting(&(libconfig_privdata.cfg)),cfgpath ); diff --git a/common/utils/T/T.c b/common/utils/T/T.c index 92e70c221b..8679a4185f 100644 --- a/common/utils/T/T.c +++ b/common/utils/T/T.c @@ -9,6 +9,8 @@ #include #include +#include "common/config/config_userapi.h" + #define QUIT(x) do { \ printf("T tracer: QUIT: %s\n", x); \ exit(1); \ @@ -17,6 +19,7 @@ /* array used to activate/disactivate a log */ static int T_IDs[T_NUMBER_OF_IDS]; int *T_active = T_IDs; +int T_stdout; static int T_socket; @@ -157,3 +160,22 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) new_thread(T_receive_thread, NULL); } + +void T_Config_Init(void) +{ +int T_port; /* by default we wait for the tracer */ +int T_nowait; /* default port to listen to to wait for the tracer */ +int T_dont_fork; /* default is to fork, see 'T_init' to understand */ + +paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC ; + +/* for a cleaner config file, TTracer params should be defined in a specific section... */ + config_get( ttraceparams,sizeof(ttraceparams)/sizeof(paramdef_t),TTRACER_CONFIG_PREFIX); + +/* compatibility: look for TTracer command line options in root section */ + config_process_cmdline( ttraceparams,sizeof(ttraceparams)/sizeof(paramdef_t),NULL); + + if (T_stdout == 0) { + T_init(T_port, 1-T_nowait, T_dont_fork); + } +} diff --git a/common/utils/T/T.h b/common/utils/T/T.h index cab246a6ff..755f5d4e39 100644 --- a/common/utils/T/T.h +++ b/common/utils/T/T.h @@ -14,6 +14,7 @@ /* T message IDs */ #include "T_IDs.h" +#define T_ACTIVE_STDOUT 2 /* known type - this is where you add new types */ #define T_INT(x) int, (x) @@ -94,12 +95,12 @@ struct T_header; #define T_ID(x) ((struct T_header *)(uintptr_t)(x)) /* T macro tricks */ - +extern int T_stdout; #define TN(...) TN_N(__VA_ARGS__,33,32,31,30,29,28,27,26,25,24,23,22,21,\ 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)(__VA_ARGS__) #define TN_N(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,\ n18,n19,n20,n21,n22,n23,n24,n25,n26,n27,n28,n29,n30,n31,n32,n,...) T##n -#define T(...) TN(__VA_ARGS__) +#define T(...) do { if (T_stdout == 0) TN(__VA_ARGS__); } while (0) /* type used to send arbitrary buffer data */ typedef struct { @@ -109,7 +110,7 @@ typedef struct { extern volatile int *T_freelist_head; extern T_cache_t *T_cache; - +extern int *T_active; /* When running the basic simulator, we may fill the T cache too fast. * Let's not crash if it's full, just wait. */ @@ -151,50 +152,6 @@ extern T_cache_t *T_cache; abort(); \ } -#if 0 -#define T_PUT(type, var, argnum) \ - do { \ - if (T_LOCAL_size + sizeof(var) > T_BUFFER_MAX) { \ - printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \ - ", consider increasing T_BUFFER_MAX (%d)\n", \ - __FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \ - abort(); \ - } \ - memcpy(T_LOCAL_buf + T_LOCAL_size, &var, sizeof(var)); \ - T_LOCAL_size += sizeof(var); \ - } while (0) -#endif - -#if 0 -#define T_PROCESS(x, argnum) \ - do { \ - T_PUT(typeof(x), x, argnum); \ - } while (0) -#endif - -#if 0 -#define T_PROCESS(x, argnum) \ - do { \ - if (__builtin_types_compatible_p(typeof(x), int)) \ - { T_PUT(int, (intptr_t)(x), argnum); printf("int\n"); } \ - else if (__builtin_types_compatible_p(typeof(x), short)) \ - { T_PUT(short, (intptr_t)(x), argnum); printf("short\n"); } \ - else if (__builtin_types_compatible_p(typeof(x), float)) \ - { T_PUT(float, (x), argnum); printf("float\n"); } \ - else if (__builtin_types_compatible_p(typeof(x), char *)) \ - { T_PUT(char *, (char *)(intptr_t)(x), argnum); printf("char *\n"); } \ - else if (__builtin_types_compatible_p(typeof(x), float *)) \ - { T_PUT(float *, (float *)(intptr_t)(x), argnum); printf("float *\n"); } \ - else if (__builtin_types_compatible_p(typeof(x), void *)) \ - { T_PUT(void *, (void *)(intptr_t)(x), argnum); printf("void *\n"); } \ - else { \ - printf("%s:%d:%s: unsupported type for argument %d in T macro\n", \ - __FILE__, __LINE__, __FUNCTION__, argnum); \ - abort(); \ - } \ - } while (0) -#endif - /* we have 4 versions of T_HEADER: * - bad quality C++ version with time * - good quality C version with time @@ -608,10 +565,30 @@ extern T_cache_t *T_cache; } \ } while (0) -extern int *T_active; +#define CONFIG_HLP_TPORT "tracer port\n" +#define CONFIG_HLP_NOTWAIT "don't wait for tracer, start immediately\n" +#define CONFIG_HLP_TNOFORK "to ease debugging with gdb\n" +#define CONFIG_HLP_STDOUT "print log messges on console\n" + + +#define TTRACER_CONFIG_PREFIX "TTracer" +/*------------------------------------------------------------------------------------------------------------------------------------------*/ +/* configuration parameters for TTRACE utility */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*------------------------------------------------------------------------------------------------------------------------------------------*/ +#define CMDLINE_TTRACEPARAMS_DESC { \ +{"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:2021, TYPE_INT, 0}, \ +{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0}, \ +{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:0, TYPE_INT, 0}, \ +{"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL, iptr:&T_stdout, defintval:1, TYPE_INT, 0}, \ +} + + + + /* log on stdout */ void T_init(int remote_port, int wait_for_tracer, int dont_fork); - +void T_Config_Init(void); #else /* T_TRACER */ /* if T_TRACER is not defined or is 0, the T is deactivated */ diff --git a/common/utils/T/T_defs.h b/common/utils/T/T_defs.h index 9961c1919e..b0b9940c30 100644 --- a/common/utils/T/T_defs.h +++ b/common/utils/T/T_defs.h @@ -39,10 +39,10 @@ typedef struct { #define T_SHM_FILENAME "/T_shm_segment" /* number of VCD functions (to be kept up to date! see in T_messages.txt) */ -#define VCD_NUM_FUNCTIONS 187 +#define VCD_NUM_FUNCTIONS 190 /* number of VCD variables (to be kept up to date! see in T_messages.txt) */ -#define VCD_NUM_VARIABLES 131 +#define VCD_NUM_VARIABLES 128 /* first VCD function (to be kept up to date! see in T_messages.txt) */ #define VCD_FIRST_FUNCTION ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP) diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index 4d59a8d380..9432155147 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -750,6 +750,27 @@ ID = LEGACY_OSA_TRACE GROUP = ALL:LEGACY_OSA:LEGACY_GROUP_TRACE:LEGACY FORMAT = string,log +ID = LEGACY_SIM_INFO + DESC = SIM legacy logs - info level + GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_INFO:LEGACY + FORMAT = string,log +ID = LEGACY_SIM_ERROR + DESC = SIM legacy logs - error level + GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_ERROR:LEGACY + FORMAT = string,log +ID = LEGACY_SIM_WARNING + DESC = SIM legacy logs - warning level + GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_WARNING:LEGACY + FORMAT = string,log +ID = LEGACY_SIM_DEBUG + DESC = SIM legacy logs - debug level + GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_DEBUG:LEGACY + FORMAT = string,log +ID = LEGACY_SIM_TRACE + DESC = SIM legacy logs - trace level + GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_TRACE:LEGACY + FORMAT = string,log + # this is a bad hack but I won't fix (function util_print_hex_octets # in openairinterface5g/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c # does funky things with the LOG_x macros but we work on the C pre-processor @@ -1034,18 +1055,6 @@ ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_UE DESC = VCD variable SUBFRAME_NUMBER_RX1_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value -ID = VCD_VARIABLE_MISSED_SLOTS_ENB - DESC = VCD variable MISSED_SLOTS_ENB - GROUP = ALL:VCD:ENB:VCD_VARIABLE - FORMAT = ulong,value -ID = VCD_VARIABLE_DAQ_MBOX - DESC = VCD variable DAQ_MBOX - GROUP = ALL:VCD:ENB:VCD_VARIABLE - FORMAT = ulong,value -ID = VCD_VARIABLE_UE_OFFSET_MBOX - DESC = VCD variable UE_OFFSET_MBOX - GROUP = ALL:VCD:UE:VCD_VARIABLE - FORMAT = ulong,value ID = VCD_VARIABLE_UE_RX_OFFSET DESC = VCD variable UE_RX_OFFSET GROUP = ALL:VCD:UE:VCD_VARIABLE @@ -1553,6 +1562,18 @@ ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value +ID = VCD_FUNCTION_SIM_DO_DL_SIGNAL + DESC = VCD function SIM_DO_DL_SIGNAL + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_SIM_DO_UL_SIGNAL + DESC = VCD function SIM_DO_UL_SIGNAL + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_SIM_UE_TRX_READ + DESC = VCD function SIM_UE_TRX_READ + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value ID = VCD_FUNCTION_eNB_TX DESC = VCD function eNB_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION diff --git a/common/utils/T/local_tracer.c b/common/utils/T/local_tracer.c index 43680b4099..c331daa4a9 100644 --- a/common/utils/T/local_tracer.c +++ b/common/utils/T/local_tracer.c @@ -367,20 +367,24 @@ void T_local_tracer_main(int remote_port, int wait_for_tracer, int port = remote_port; int dont_wait = wait_for_tracer ? 0 : 1; void *f; - + printf("local tracer starting\n"); /* write on a socket fails if the other end is closed and we get SIGPIPE */ - if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort(); + if (signal(SIGPIPE, SIG_IGN) == SIG_ERR){ + printf("local tracer received SIGPIPE\n"); + abort(); + } init_shm(shm_file); s = local_socket; - + printf("local tracer starting step 2\n"); if (dont_wait) { char t = 2; + printf("local tracer in no wait mode \n"); if (write(s, &t, 1) != 1) abort(); } - + printf("local tracer starting step 3\n"); f = forwarder(port, s); - + printf("local tracer main loop.... \n"); /* read messages */ while (1) { wait_message(); diff --git a/common/utils/T/tracer/extract_input_subframe.c b/common/utils/T/tracer/extract_input_subframe.c index d742318201..48e3ec07f9 100644 --- a/common/utils/T/tracer/extract_input_subframe.c +++ b/common/utils/T/tracer/extract_input_subframe.c @@ -117,12 +117,7 @@ err: e.e[frame_arg].i, e.e[subframe_arg].i, e.e[buffer_arg].bsize); if (!(frame == e.e[frame_arg].i && subframe == e.e[subframe_arg].i)) continue; -#if 0 -for (i = 0; i < e.e[buffer_arg].bsize/2; i++) { -short *x = e.e[buffer_arg].b; -x[i] *= 14; -} -#endif + if (fwrite(e.e[buffer_arg].b, e.e[buffer_arg].bsize, 1, out) != 1) { perror(output_file); exit(1); } processed_subframes++; diff --git a/common/utils/T/tracer/extract_output_subframe.c b/common/utils/T/tracer/extract_output_subframe.c index d24393553c..d7f9ff95ed 100644 --- a/common/utils/T/tracer/extract_output_subframe.c +++ b/common/utils/T/tracer/extract_output_subframe.c @@ -124,12 +124,6 @@ err: } last_frame = frame; last_subframe = subframe; -#if 0 -for (i = 0; i < e.e[buffer_arg].bsize/2; i++) { -short *x = e.e[buffer_arg].b; -x[i] *= 14; -} -#endif if (verbose) printf("save output frame %d subframe %d size %d\n", e.e[frame_arg].i, e.e[subframe_arg].i, e.e[buffer_arg].bsize); diff --git a/common/utils/T/tracer/gui/test.c b/common/utils/T/tracer/gui/test.c index f64d02347e..f0429cba17 100644 --- a/common/utils/T/tracer/gui/test.c +++ b/common/utils/T/tracer/gui/test.c @@ -22,13 +22,7 @@ int main(void) widget_add_child(g, c1, c2, 0); plot = new_xy_plot(g, 100, 100, "xy plot test", 30); -#if 0 - c2 = new_container(g, HORIZONTAL); - widget_add_child(g, c2, plot, -1); - widget_add_child(g, c1, c2, -1); -#else widget_add_child(g, c1, plot, -1); -#endif tlcol = new_color(g, "#ddf"); tl = new_textlist(g, 300, 10, tlcol); diff --git a/common/utils/T/tracer/gui/x.c b/common/utils/T/tracer/gui/x.c index af3d05cc14..94448eb666 100644 --- a/common/utils/T/tracer/gui/x.c +++ b/common/utils/T/tracer/gui/x.c @@ -124,20 +124,6 @@ x_window *x_create_window(x_connection *_x, int width, int height, XMapWindow(x->d, ret->w); -#if 0 - /* wait for window to be mapped */ - LOGD("wait for map\n"); - while (1) { - XEvent ev; - //XWindowEvent(x->d, ret->w, StructureNotifyMask, &ev); - XWindowEvent(x->d, ret->w, ExposureMask, &ev); - LOGD("got ev %d\n", ev.type); - //if (ev.type == MapNotify) break; - if (ev.type == Expose) break; - } - LOGD("XXX create connection %p window %p (win id %d pixmap %d) w h %d %d\n", x, ret, (int)ret->w, (int)ret->p, width, height); -#endif - return ret; } @@ -265,14 +251,6 @@ void x_events(gui *_gui) ev.xbutton.button, 1); } break; -#if 0 - case MapNotify: - if ((w = find_x_window(g, ev.xmap.window)) != NULL) { - struct x_window *xw = w->x; - xw->repaint = 1; - } - break; -#endif default: if (gui_logd) WARN("TODO: X event type %d\n", ev.type); break; } } diff --git a/common/utils/T/tracer/gui/xy_plot.c b/common/utils/T/tracer/gui/xy_plot.c index 4115f92103..0f15f4862a 100644 --- a/common/utils/T/tracer/gui/xy_plot.c +++ b/common/utils/T/tracer/gui/xy_plot.c @@ -7,165 +7,6 @@ #include #include -#if 0 -/* this version behaves differently when you resize the XY plot. Say - * you increase the size. The old (smaller) view is put at the center - * of the new view. Everything inside keeps the same size/aspect ratio. - * The other version below resizes the old view so that it fully occupies - * the new view. It may introduce aspect ratio changes, but usage seems - * to suggest it's a better behaviour. - */ -static void paint(gui *_gui, widget *_this) -{ - struct gui *g = _gui; - struct xy_plot_widget *this = _this; - int wanted_plot_width, allocated_plot_width; - int wanted_plot_height, allocated_plot_height; - float pxsize; - float ticdist; - float tic; - float ticstep; - int k, kmin, kmax; - float allocated_xmin, allocated_xmax; - float allocated_ymin, allocated_ymax; - float center; - int i; - int n; - -# define FLIP(v) (-(v) + allocated_plot_height-1) - - LOGD("PAINT xy plot xywh %d %d %d %d\n", this->common.x, this->common.y, this->common.width, this->common.height); - -//x_draw_rectangle(g->x, g->xwin, 1, this->common.x, this->common.y, this->common.width, this->common.height); - - wanted_plot_width = this->wanted_width; - allocated_plot_width = this->common.width - this->vrule_width; - wanted_plot_height = this->wanted_height; - allocated_plot_height = this->common.height - this->label_height * 2; - - /* plot zone */ - /* TODO: refine height - height of hrule text may be != from label */ - x_draw_rectangle(g->x, g->xwin, 1, - this->common.x + this->vrule_width, - this->common.y, - this->common.width - this->vrule_width -1, /* -1 to see right border */ - this->common.height - this->label_height * 2); - - /* horizontal tics */ - pxsize = (this->xmax - this->xmin) / wanted_plot_width; - ticdist = 100; - tic = floor(log10(ticdist * pxsize)); - ticstep = powf(10, tic); - center = (this->xmax + this->xmin) / 2; - allocated_xmin = center - ((this->xmax - this->xmin) * - allocated_plot_width / wanted_plot_width) / 2; - allocated_xmax = center + ((this->xmax - this->xmin) * - allocated_plot_width / wanted_plot_width) / 2; - /* adjust tic if too tight */ - LOGD("pre x ticstep %g\n", ticstep); - while (1) { - if (ticstep / (allocated_xmax - allocated_xmin) - * (allocated_plot_width - 1) > 40) break; - ticstep *= 2; - } - LOGD("post x ticstep %g\n", ticstep); - LOGD("xmin/max %g %g width wanted allocated %d %d alloc xmin/max %g %g ticstep %g\n", this->xmin, this->xmax, wanted_plot_width, allocated_plot_width, allocated_xmin, allocated_xmax, ticstep); - kmin = ceil(allocated_xmin / ticstep); - kmax = floor(allocated_xmax / ticstep); - for (k = kmin; k <= kmax; k++) { -/* - (k * ticstep - allocated_xmin) / (allocated_max - allocated_xmin) = - (x - 0) / (allocated_plot_width-1 - 0) - */ - char v[64]; - int vwidth, dummy; - int x = (k * ticstep - allocated_xmin) / - (allocated_xmax - allocated_xmin) * - (allocated_plot_width - 1); - x_draw_line(g->x, g->xwin, FOREGROUND_COLOR, - this->common.x + this->vrule_width + x, - this->common.y + this->common.height - this->label_height * 2, - this->common.x + this->vrule_width + x, - this->common.y + this->common.height - this->label_height * 2 - 5); - sprintf(v, "%g", k * ticstep); - x_text_get_dimensions(g->x, DEFAULT_FONT, v, &vwidth, &dummy, &dummy); - x_draw_string(g->x, g->xwin, DEFAULT_FONT, FOREGROUND_COLOR, - this->common.x + this->vrule_width + x - vwidth/2, - this->common.y + this->common.height - this->label_height * 2 + - this->label_baseline, - v); - LOGD("tic k %d val %g x %d\n", k, k * ticstep, x); - } - - /* vertical tics */ - pxsize = (this->ymax - this->ymin) / wanted_plot_height; - ticdist = 30; - tic = floor(log10(ticdist * pxsize)); - ticstep = powf(10, tic); - center = (this->ymax + this->ymin) / 2; - allocated_ymin = center - ((this->ymax - this->ymin) * - allocated_plot_height / wanted_plot_height) / 2; - allocated_ymax = center + ((this->ymax - this->ymin) * - allocated_plot_height / wanted_plot_height) / 2; - /* adjust tic if too tight */ - LOGD("pre y ticstep %g\n", ticstep); - while (1) { - if (ticstep / (allocated_ymax - allocated_ymin) - * (allocated_plot_height - 1) > 20) break; - ticstep *= 2; - } - LOGD("post y ticstep %g\n", ticstep); - LOGD("ymin/max %g %g height wanted allocated %d %d alloc ymin/max %g %g ticstep %g\n", this->ymin, this->ymax, wanted_plot_height, allocated_plot_height, allocated_ymin, allocated_ymax, ticstep); - kmin = ceil(allocated_ymin / ticstep); - kmax = floor(allocated_ymax / ticstep); - for (k = kmin; k <= kmax; k++) { - char v[64]; - int vwidth, dummy; - int y = (k * ticstep - allocated_ymin) / - (allocated_ymax - allocated_ymin) * - (allocated_plot_height - 1); - sprintf(v, "%g", k * ticstep); - x_text_get_dimensions(g->x, DEFAULT_FONT, v, &vwidth, &dummy, &dummy); - x_draw_line(g->x, g->xwin, FOREGROUND_COLOR, - this->common.x + this->vrule_width, - this->common.y + FLIP(y), - this->common.x + this->vrule_width + 5, - this->common.y + FLIP(y)); - x_draw_string(g->x, g->xwin, DEFAULT_FONT, FOREGROUND_COLOR, - this->common.x + this->vrule_width - vwidth - 2, - this->common.y + FLIP(y) - this->label_height/2+this->label_baseline, - v); - } - - /* label at bottom, in the middle */ - x_draw_string(g->x, g->xwin, DEFAULT_FONT, FOREGROUND_COLOR, - this->common.x + (this->common.width - this->label_width) / 2, - this->common.y + this->common.height - this->label_height - + this->label_baseline, - this->label); - - for (n = 0; n < this->nplots; n++) { - /* points */ - float ax, bx, ay, by; - ax = (allocated_plot_width-1) / (allocated_xmax - allocated_xmin); - bx = -ax * allocated_xmin; - ay = (allocated_plot_height-1) / (allocated_ymax - allocated_ymin); - by = -ay * allocated_ymin; - for (i = 0; i < this->plots[n].npoints; i++) { - int x, y; - x = ax * this->plots[n].x[i] + bx; - y = ay * this->plots[n].y[i] + by; - if (x >= 0 && x < allocated_plot_width && - y >= 0 && y < allocated_plot_height) - x_add_point(g->x, - this->common.x + this->vrule_width + x, - this->common.y + FLIP(y)); - } - x_plot_points(g->x, g->xwin, this->plots[n].color); - } -} -#endif - static void paint(gui *_gui, widget *_this) { struct gui *g = _gui; diff --git a/common/utils/T/tracer/logger/iqlog.c b/common/utils/T/tracer/logger/iqlog.c index bea8adccc5..168c50e39b 100644 --- a/common/utils/T/tracer/logger/iqlog.c +++ b/common/utils/T/tracer/logger/iqlog.c @@ -20,42 +20,6 @@ struct iqlog { int max_length; }; -#if 0 -/* this function passes all received IQ samples to the views */ -static void _event(void *p, event e) -{ - struct iqlog *l = p; - int i; - void *buffer; - int bsize; - int nsamples; - - if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0) - return; - - buffer = e.e[l->buffer_arg].b; - bsize = e.e[l->buffer_arg].bsize; - - nsamples = bsize / (2*sizeof(int16_t)); - - if (nsamples > l->max_length) { - l->i = realloc(l->i, nsamples * sizeof(float)); - if (l->i == NULL) abort(); - l->q = realloc(l->q, nsamples * sizeof(float)); - if (l->q == NULL) abort(); - l->max_length = nsamples; - } - - for (i = 0; i < nsamples; i++) { - l->i[i] = ((int16_t *)buffer)[i*2]; - l->q[i] = ((int16_t *)buffer)[i*2+1]; - } - - for (i = 0; i < l->common.vsize; i++) - l->common.v[i]->append(l->common.v[i], l->i, l->q, nsamples); -} -#endif - static void _event(void *p, event e) { struct iqlog *l = p; diff --git a/common/utils/T/tracer/packet-mac-lte.h b/common/utils/T/tracer/packet-mac-lte.h index e418f3417e..1bc6df632b 100644 --- a/common/utils/T/tracer/packet-mac-lte.h +++ b/common/utils/T/tracer/packet-mac-lte.h @@ -56,176 +56,6 @@ #define SC_RNTI 9 #define G_RNTI 10 -#if 0 -typedef enum mac_lte_oob_event { - ltemac_send_preamble, - ltemac_send_sr, - ltemac_sr_failure -} mac_lte_oob_event; - -typedef enum mac_lte_dl_retx { - dl_retx_no, - dl_retx_yes, - dl_retx_unknown -} mac_lte_dl_retx; - -typedef enum mac_lte_crc_status { - crc_fail = 0, - crc_success = 1, - crc_high_code_rate = 2, - crc_pdsch_lost = 3, - crc_duplicate_nonzero_rv = 4, - crc_false_dci = 5 -} mac_lte_crc_status; - -typedef enum mac_lte_carrier_id { - carrier_id_primary, - carrier_id_secondary_1, - carrier_id_secondary_2, - carrier_id_secondary_3, - carrier_id_secondary_4 -} mac_lte_carrier_id; - -typedef enum mac_lte_ce_mode { - no_ce_mode = 0, - ce_mode_a = 1, - ce_mode_b = 2 -} mac_lte_ce_mode; - -typedef enum mac_lte_nb_mode { - no_nb_mode = 0, - nb_mode = 1 -} mac_lte_nb_mode; - -/* Context info attached to each LTE MAC frame */ -typedef struct mac_lte_info -{ - /* Needed for decode */ - guint8 radioType; - guint8 direction; - guint8 rntiType; - - /* Extra info to display */ - guint16 rnti; - guint16 ueid; - - /* Timing info */ - guint16 sysframeNumber; - guint16 subframeNumber; - - /* Optional field. More interesting for TDD (FDD is always -4 subframeNumber) */ - gboolean subframeNumberOfGrantPresent; - guint16 subframeNumberOfGrant; - - /* Flag set only if doing PHY-level data test - i.e. there may not be a - well-formed MAC PDU so just show as raw data */ - gboolean isPredefinedData; - - /* Length of DL PDU or UL grant size in bytes */ - guint16 length; - - /* 0=newTx, 1=first-retx, etc */ - guint8 reTxCount; - guint8 isPHICHNACK; /* FALSE=PDCCH retx grant, TRUE=PHICH NACK */ - - /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set */ - gboolean isExtendedBSRSizes; - - /* UL only. Indicates if the R10 simultaneousPUCCH-PUSCH parameter is set for PCell */ - gboolean isSimultPUCCHPUSCHPCell; - - /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set for PSCell */ - gboolean isSimultPUCCHPUSCHPSCell; - - /* Status of CRC check. For UE it is DL only. For eNodeB it is UL - only. For an analyzer, it is present for both DL and UL. */ - gboolean crcStatusValid; - mac_lte_crc_status crcStatus; - - /* Carrier ID */ - mac_lte_carrier_id carrierId; - - /* DL only. Is this known to be a retransmission? */ - mac_lte_dl_retx dl_retx; - - /* DL only. CE mode to be used for RAR decoding */ - mac_lte_ce_mode ceMode; - - /* DL and UL. NB-IoT mode of the UE */ - mac_lte_nb_mode nbMode; - - /* More Physical layer info (see direction above for which side of union to use) */ - union { - struct mac_lte_ul_phy_info - { - guint8 present; /* Remaining UL fields are present and should be displayed */ - guint8 modulation_type; - guint8 tbs_index; - guint8 resource_block_length; - guint8 resource_block_start; - guint8 harq_id; - gboolean ndi; - } ul_info; - struct mac_lte_dl_phy_info - { - guint8 present; /* Remaining DL fields are present and should be displayed */ - guint8 dci_format; - guint8 resource_allocation_type; - guint8 aggregation_level; - guint8 mcs_index; - guint8 redundancy_version_index; - guint8 resource_block_length; - guint8 harq_id; - gboolean ndi; - guint8 transport_block; /* 0..1 */ - } dl_info; - } detailed_phy_info; - - /* Relating to out-of-band events */ - /* N.B. dissector will only look to these fields if length is 0... */ - mac_lte_oob_event oob_event; - guint8 rapid; - guint8 rach_attempt_number; - #define MAX_SRs 20 - guint16 number_of_srs; - guint16 oob_ueid[MAX_SRs]; - guint16 oob_rnti[MAX_SRs]; -} mac_lte_info; - - -typedef struct mac_lte_tap_info { - /* Info from context */ - guint16 rnti; - guint16 ueid; - guint8 rntiType; - guint8 isPredefinedData; - gboolean crcStatusValid; - mac_lte_crc_status crcStatus; - guint8 direction; - - guint8 isPHYRetx; - guint16 ueInTTI; - - nstime_t mac_lte_time; - - /* Number of bytes (which part is used depends upon context settings) */ - guint32 single_number_of_bytes; - guint32 bytes_for_lcid[11]; - guint32 sdus_for_lcid[11]; - guint8 number_of_rars; - guint8 number_of_paging_ids; - - /* Number of padding bytes includes padding subheaders and trailing padding */ - guint16 padding_bytes; - guint16 raw_length; -} mac_lte_tap_info; - - -/* Accessor function to check if a frame was considered to be ReTx */ -int is_mac_lte_frame_retx(packet_info *pinfo, guint8 direction); - -#endif - /*****************************************************************/ /* UDP framing format */ /* ----------------------- */ @@ -309,82 +139,3 @@ int is_mac_lte_frame_retx(packet_info *pinfo, guint8 direction); continues until the end of the frame) */ #define MAC_LTE_PAYLOAD_TAG 0x01 - -#if 0 - -/* Type to store parameters for configuring LCID->RLC channel settings for DRB */ -/* Some are optional, and may not be seen (e.g. on reestablishment) */ -typedef struct drb_mapping_t -{ - guint16 ueid; /* Mandatory */ - guint8 drbid; /* Mandatory */ - gboolean lcid_present; - guint8 lcid; /* Part of LogicalChannelConfig - optional */ - gboolean rlcMode_present; - guint8 rlcMode; /* Part of RLC config - optional */ - gboolean rlc_ul_ext_li_field; /* Part of RLC config - optional */ - gboolean rlc_dl_ext_li_field; /* Part of RLC config - optional */ - gboolean rlc_ul_ext_am_sn; /* Part of RLC config - optional */ - gboolean rlc_dl_ext_am_sn; /* Part of RLC config - optional */ - gboolean um_sn_length_present; - guint8 um_sn_length; /* Part of RLC config - optional */ - gboolean ul_priority_present; - guint8 ul_priority; /* Part of LogicalChannelConfig - optional */ - gboolean pdcp_sn_size_present; - guint8 pdcp_sn_size; /* Part of pdcp-Config - optional */ -} drb_mapping_t; - - -/* Set details of an LCID -> drb channel mapping. To be called from - configuration protocol (e.g. RRC) */ -void set_mac_lte_channel_mapping(drb_mapping_t *drb_mapping); - - -/* Dedicated DRX config. Used to verify that a sensible config is given. - Also, beginning to configure MAC with this config and (optionally) show - DRX config and state (cycles/timers) attached to each UL/DL PDU! */ -typedef struct drx_config_t { - gboolean configured; - guint32 frameNum; - guint32 previousFrameNum; - - guint32 onDurationTimer; - guint32 inactivityTimer; - guint32 retransmissionTimer; - guint32 longCycle; - guint32 cycleOffset; - /* Optional Short cycle */ - gboolean shortCycleConfigured; - guint32 shortCycle; - guint32 shortCycleTimer; -} drx_config_t; - -/* Functions to set/release up dedicated DRX config */ -void set_mac_lte_drx_config(guint16 ueid, drx_config_t *drx_config, packet_info *pinfo); -void set_mac_lte_drx_config_release(guint16 ueid, packet_info *pinfo); - -/* RRC can tell this dissector which RAPIDs are Group A, Group A&B */ -void set_mac_lte_rapid_ranges(guint groupA, guint all_RA); - -/* RRC can indicate whether extended BSR sizes are used */ -void set_mac_lte_extended_bsr_sizes(guint16 ueid, gboolean use_ext_bsr_sizes, packet_info *pinfo); - -/* RRC can indicate whether simultaneous PUCCH/PUSCH is used */ -typedef enum { - SIMULT_PUCCH_PUSCH_PCELL = 0, - SIMULT_PUCCH_PUSCH_PSCELL -} simult_pucch_pusch_cell_type; -void set_mac_lte_simult_pucch_pusch(guint16 ueid, simult_pucch_pusch_cell_type cell_type, gboolean use_simult_pucch_pusch, packet_info *pinfo); - -/* Functions to be called from outside this module (e.g. in a plugin, where mac_lte_info - isn't available) to get/set per-packet data */ -WS_DLL_PUBLIC -mac_lte_info *get_mac_lte_proto_data(packet_info *pinfo); -WS_DLL_PUBLIC -void set_mac_lte_proto_data(packet_info *pinfo, mac_lte_info *p_mac_lte_info); - -/* Function to attempt to populate p_mac_lte_info using framing definition above */ -gboolean dissect_mac_lte_context_fields(struct mac_lte_info *p_mac_lte_info, tvbuff_t *tvb, - gint *p_offset); - -#endif diff --git a/common/utils/hashtable/hashtable.c b/common/utils/hashtable/hashtable.c index 6322b1dea6..2c7b35744c 100644 --- a/common/utils/hashtable/hashtable.c +++ b/common/utils/hashtable/hashtable.c @@ -95,7 +95,7 @@ hash_table_t *hashtable_create(const hash_size_t sizeP, hash_size_t (*hashfuncP) * Cleanup * The hashtable_destroy() walks through the linked lists for each possible hash value, and releases the elements. It also releases the nodes array and the hash_table_t. */ -hashtable_rc_t hashtable_destroy(hash_table_t * const hashtblP) +hashtable_rc_t hashtable_destroy(hash_table_t * hashtblP) { hash_size_t n; hash_node_t *node, *oldnode; @@ -117,6 +117,7 @@ hashtable_rc_t hashtable_destroy(hash_table_t * const hashtblP) } free(hashtblP->nodes); free(hashtblP); + hashtblP=NULL; return HASH_TABLE_OK; } //------------------------------------------------------------------------------------------------------------------------------- diff --git a/common/utils/itti/assertions.h b/common/utils/itti/assertions.h index bb6c27cbab..803c3d001e 100644 --- a/common/utils/itti/assertions.h +++ b/common/utils/itti/assertions.h @@ -35,9 +35,11 @@ #ifndef ASSERTIONS_H_ #define ASSERTIONS_H_ +void output_log_mem(void); #define _Assert_Exit_ \ { \ fprintf(stderr, "\nExiting execution\n"); \ + output_log_mem(); \ display_backtrace(); \ fflush(stdout); \ fflush(stderr); \ diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c index 21a3304e20..2e38b660d7 100644 --- a/common/utils/itti/intertask_interface.c +++ b/common/utils/itti/intertask_interface.c @@ -39,7 +39,6 @@ #include "assertions.h" #include "intertask_interface.h" -#include "intertask_interface_dump.h" #if T_TRACER #include "T.h" @@ -328,22 +327,17 @@ int itti_send_msg_to_task(task_id_t destination_task_id, instance_t instance, Me /* Increment the global message number */ message_number = itti_increment_message_number (); -#if 0 - /* itti dump is disabled */ - itti_dump_queue_message (origin_task_id, message_number, message, itti_desc.messages_info[message_id].name, - sizeof(MessageHeader) + message->ittiMsgHeader.ittiMsgSize); -#endif - if (destination_task_id != TASK_UNKNOWN) { - if (itti_desc.threads[destination_thread_id].task_state == TASK_STATE_ENDED) { - ITTI_DEBUG(ITTI_DEBUG_ISSUES, " Message %s, number %lu with priority %d can not be sent from %s to queue (%u:%s), ended destination task!\n", - itti_desc.messages_info[message_id].name, - message_number, - priority, - itti_get_task_name(origin_task_id), - destination_task_id, - itti_get_task_name(destination_task_id)); + if (itti_desc.threads[destination_thread_id].task_state == TASK_STATE_ENDED || + itti_desc.threads[destination_thread_id].task_state == TASK_STATE_NOT_CONFIGURED) { + ITTI_DEBUG(ITTI_DEBUG_ISSUES, " Message %s, number %lu with priority %d can not be sent from %s to queue (%u:%s), unconfigured or ended destination task!\n", + itti_desc.messages_info[message_id].name, + message_number, + priority, + itti_get_task_name(origin_task_id), + destination_task_id, + itti_get_task_name(destination_task_id)); } else { if(!emulate_rf){ /* We cannot send a message if the task is not running */ @@ -429,22 +423,17 @@ int itti_try_send_msg_to_task(task_id_t destination_task_id, instance_t instance /* Increment the global message number */ message_number = itti_increment_message_number (); -#if 0 - /* itti dump is disabled */ - itti_dump_queue_message (origin_task_id, message_number, message, itti_desc.messages_info[message_id].name, - sizeof(MessageHeader) + message->ittiMsgHeader.ittiMsgSize); -#endif - if (destination_task_id != TASK_UNKNOWN) { - if (itti_desc.threads[destination_thread_id].task_state == TASK_STATE_ENDED) { - ITTI_DEBUG(ITTI_DEBUG_ISSUES, " Message %s, number %lu with priority %d can not be sent from %s to queue (%u:%s), ended destination task!\n", - itti_desc.messages_info[message_id].name, - message_number, - priority, - itti_get_task_name(origin_task_id), - destination_task_id, - itti_get_task_name(destination_task_id)); + if (itti_desc.threads[destination_thread_id].task_state == TASK_STATE_ENDED || + itti_desc.threads[destination_thread_id].task_state == TASK_STATE_NOT_CONFIGURED) { + ITTI_DEBUG(ITTI_DEBUG_ISSUES, " Message %s, number %lu with priority %d can not be sent from %s to queue (%u:%s), unconfigured or ended destination task!\n", + itti_desc.messages_info[message_id].name, + message_number, + priority, + itti_get_task_name(origin_task_id), + destination_task_id, + itti_get_task_name(destination_task_id)); } else { /* We cannot send a message if the task is not running */ AssertFatal (itti_desc.threads[destination_thread_id].task_state == TASK_STATE_READY, @@ -727,15 +716,18 @@ void itti_mark_task_ready(task_id_t task_id) AssertFatal (thread_id < itti_desc.thread_max, "Thread id (%d) is out of range (%d)!\n", thread_id, itti_desc.thread_max); -#if 0 - /* itti dump is disabled */ - /* Register the thread in itti dump */ - itti_dump_thread_use_ring_buffer(); -#endif - /* Mark the thread as using LFDS queue */ lfds611_queue_use(itti_desc.tasks[task_id].message_queue); +#if defined(UE_EXPANSION) || defined(RTAI) + /* Assign low priority to created threads */ + { + struct sched_param sched_param; + sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO) + 1; + sched_setscheduler(0, SCHED_FIFO, &sched_param); + } +#endif + itti_desc.threads[thread_id].task_state = TASK_STATE_READY; itti_desc.ready_tasks ++; @@ -777,7 +769,7 @@ void itti_terminate_tasks(task_id_t task_id) } int itti_init(task_id_t task_max, thread_id_t thread_max, MessagesIds messages_id_max, const task_info_t *tasks_info, - const message_info_t *messages_info, const char * const messages_definition_xml, const char * const dump_file_name) + const message_info_t *messages_info) { task_id_t task_id; thread_id_t thread_id; @@ -862,11 +854,6 @@ int itti_init(task_id_t task_max, thread_id_t thread_max, MessagesIds messages_i itti_desc.wait_tasks = 0; itti_desc.created_tasks = 0; itti_desc.ready_tasks = 0; -#if 0 - /* itti dump is disabled */ - itti_dump_init (messages_definition_xml, dump_file_name); -#endif - CHECK_INIT_RETURN(timer_init ()); return 0; @@ -931,11 +918,6 @@ void itti_wait_tasks_end(void) ITTI_DEBUG(ITTI_DEBUG_ISSUES, " Some threads are still running, force exit\n"); exit (0); } - -#if 0 - /* itti dump is disabled */ - itti_dump_exit(); -#endif } void itti_send_terminate_message(task_id_t task_id) diff --git a/common/utils/itti/intertask_interface_dump.c b/common/utils/itti/intertask_interface_dump.c deleted file mode 100644 index bb77509726..0000000000 --- a/common/utils/itti/intertask_interface_dump.c +++ /dev/null @@ -1,790 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/** @brief Intertask Interface Signal Dumper - * Allows users to connect their itti_analyzer to this process and dump - * signals exchanged between tasks. - * @author Sebastien Roux - */ - -#define _GNU_SOURCE // required for pthread_setname_np() -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include "assertions.h" -#include "liblfds611.h" - -#include "itti_types.h" -#include "intertask_interface.h" -#include "intertask_interface_dump.h" - -#if T_TRACER -#include "T.h" -#endif - -static const int itti_dump_debug = 0; // 0x8 | 0x4 | 0x2; - -# define ITTI_DUMP_DEBUG(m, x, args...) do { if ((m) & itti_dump_debug) fprintf(stdout, "[ITTI_DUMP][D]"x, ##args); } \ - while(0) -#define ITTI_DUMP_ERROR(x, args...) do { fprintf(stdout, "[ITTI_DUMP][E]"x, ##args); } \ - while(0) - - -typedef struct itti_dump_queue_item_s { - MessageDef *data; - uint32_t data_size; - uint32_t message_number; - uint32_t message_type; - uint32_t message_size; -} itti_dump_queue_item_t; - -typedef struct { - int sd; - uint32_t last_message_number; -} itti_client_desc_t; - -typedef struct itti_desc_s { - /* Asynchronous thread that write to file/accept new clients */ - pthread_t itti_acceptor_thread; - pthread_attr_t attr; - - /* List of messages to dump. - * NOTE: we limit the size of this queue to retain only the last exchanged - * messages. The size can be increased by setting up the ITTI_QUEUE_MAX_ELEMENTS - * in mme_default_values.h or by putting a custom in the configuration file. - */ - struct lfds611_ringbuffer_state *itti_message_queue; - - int nb_connected; - - /* Event fd used to notify new messages (semaphore) */ - int event_fd; - int itti_listen_socket; - - itti_client_desc_t itti_clients[ITTI_DUMP_MAX_CON]; -} itti_desc_t; - -typedef struct { - itti_socket_header_t socket_header; - - itti_signal_header_t signal_header; - - /* Message payload is added here, this struct is used as an header */ -} itti_dump_message_t; - -typedef struct { - itti_socket_header_t socket_header; -} itti_statistic_message_t; - -static const itti_message_types_t itti_dump_xml_definition_end = ITTI_DUMP_XML_DEFINITION_END; -static const itti_message_types_t itti_dump_message_type_end = ITTI_DUMP_MESSAGE_TYPE_END; - -static itti_desc_t itti_dump_queue; -static FILE *dump_file = NULL; -static int itti_dump_running = 1; - -static volatile uint32_t pending_messages = 0; - -/*------------------------------------------------------------------------------*/ -static int itti_dump_send_message(int sd, itti_dump_queue_item_t *message) -{ - itti_dump_message_t *new_message; - ssize_t bytes_sent = 0, total_sent = 0; - uint8_t *data_ptr; - - /* Allocate memory for message header and payload */ - size_t size = sizeof(itti_dump_message_t) + message->data_size + sizeof(itti_message_types_t); - - AssertFatal (sd > 0, "Socket descriptor (%d) is invalid!\n", sd); - AssertFatal (message != NULL, "Message is NULL!\n"); - - new_message = malloc(size); - AssertFatal (new_message != NULL, "New message allocation failed!\n"); - - /* Preparing the header */ - new_message->socket_header.message_size = size; - new_message->socket_header.message_type = ITTI_DUMP_MESSAGE_TYPE; - /* Adds message number in unsigned decimal ASCII format */ - snprintf(new_message->signal_header.message_number_char, sizeof(new_message->signal_header.message_number_char), - MESSAGE_NUMBER_CHAR_FORMAT, message->message_number); - new_message->signal_header.message_number_char[sizeof(new_message->signal_header.message_number_char) - 1] = '\n'; - /* Appends message payload */ - memcpy(&new_message[1], message->data, message->data_size); - - memcpy(((void *) &new_message[1]) + message->data_size, &itti_dump_message_type_end, sizeof(itti_message_types_t)); - - data_ptr = (uint8_t *)&new_message[0]; - - do { - bytes_sent = send(sd, &data_ptr[total_sent], size - total_sent, 0); - - if (bytes_sent < 0) { - ITTI_DUMP_ERROR("[%d] Failed to send %zu bytes to socket (%d:%s)\n", - sd, size, errno, strerror(errno)); - free(new_message); - return -1; - } - - total_sent += bytes_sent; - } while (total_sent != size); - - free(new_message); - return total_sent; -} - -static int itti_dump_fwrite_message(itti_dump_queue_item_t *message) -{ - itti_dump_message_t new_message_header; - - if ((dump_file != NULL) && (message != NULL)) { - - new_message_header.socket_header.message_size = message->message_size + sizeof(itti_dump_message_t) + sizeof(itti_message_types_t); - new_message_header.socket_header.message_type = message->message_type; - snprintf(new_message_header.signal_header.message_number_char, sizeof(new_message_header.signal_header.message_number_char), - MESSAGE_NUMBER_CHAR_FORMAT, message->message_number); - new_message_header.signal_header.message_number_char[sizeof(new_message_header.signal_header.message_number_char) - 1] = '\n'; - - fwrite (&new_message_header, sizeof(itti_dump_message_t), 1, dump_file); - fwrite (message->data, message->data_size, 1, dump_file); - fwrite (&itti_dump_message_type_end, sizeof(itti_message_types_t), 1, dump_file); - fflush (dump_file); - return (1); - } - - return (0); -} - -static int itti_dump_send_xml_definition(const int sd, const char *message_definition_xml, - const uint32_t message_definition_xml_length) -{ - itti_socket_header_t *itti_dump_message; - /* Allocate memory for message header and payload */ - size_t itti_dump_message_size; - ssize_t bytes_sent = 0, total_sent = 0; - uint8_t *data_ptr; - - AssertFatal (sd > 0, "Socket descriptor (%d) is invalid!\n", sd); - AssertFatal (message_definition_xml != NULL, "Message definition XML is NULL!\n"); - - itti_dump_message_size = sizeof(itti_socket_header_t) + message_definition_xml_length + sizeof(itti_message_types_t); - - itti_dump_message = calloc(1, itti_dump_message_size); - - ITTI_DUMP_DEBUG(0x2, "[%d] Sending XML definition message of size %zu to observer peer\n", - sd, itti_dump_message_size); - - itti_dump_message->message_size = itti_dump_message_size; - itti_dump_message->message_type = ITTI_DUMP_XML_DEFINITION; - - /* Copying message definition */ - memcpy (&itti_dump_message[1], message_definition_xml, message_definition_xml_length); - memcpy (((void *) &itti_dump_message[1]) + message_definition_xml_length, &itti_dump_xml_definition_end, sizeof(itti_message_types_t)); - - data_ptr = (uint8_t *)&itti_dump_message[0]; - - do { - bytes_sent = send(sd, &data_ptr[total_sent], itti_dump_message_size - total_sent, 0); - - if (bytes_sent < 0) { - ITTI_DUMP_ERROR("[%d] Failed to send %zu bytes to socket (%d:%s)\n", - sd, itti_dump_message_size, errno, strerror(errno)); - free(itti_dump_message); - return -1; - } - - total_sent += bytes_sent; - } while (total_sent != itti_dump_message_size); - - free(itti_dump_message); - - return 0; -} - -static void itti_dump_user_data_delete_function(void *user_data, void *user_state) -{ - (void)user_state; // UNUSED - - if (user_data != NULL) { - itti_dump_queue_item_t *item; - task_id_t task_id; - int result; - - item = (itti_dump_queue_item_t *)user_data; - - if (item->data != NULL) { - task_id = ITTI_MSG_ORIGIN_ID(item->data); - result = itti_free(task_id, item->data); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - } else { - task_id = TASK_UNKNOWN; - } - - result = itti_free(task_id, item); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - } -} - -static int itti_dump_enqueue_message(itti_dump_queue_item_t *new, uint32_t message_size, - uint32_t message_type) -{ - struct lfds611_freelist_element *new_queue_element = NULL; - int overwrite_flag; - AssertFatal (new != NULL, "Message to queue is NULL!\n"); - - new->message_type = message_type; - new->message_size = message_size; - - ITTI_DUMP_DEBUG (0x1, " itti_dump_enqueue_message: lfds611_ringbuffer_get_write_element\n"); - new_queue_element = lfds611_ringbuffer_get_write_element (itti_dump_queue.itti_message_queue, &new_queue_element, &overwrite_flag); - - if (overwrite_flag != 0) { - // no free element available: overwrite a non read one => data loss! - void *old = NULL; - - lfds611_freelist_get_user_data_from_element(new_queue_element, &old); - ITTI_DUMP_DEBUG (0x4, " overwrite_flag set, freeing old data %p %p\n", new_queue_element, old); - itti_dump_user_data_delete_function (old, NULL); - } - - lfds611_freelist_set_user_data_in_element(new_queue_element, new); - lfds611_ringbuffer_put_write_element(itti_dump_queue.itti_message_queue, new_queue_element); - - if (overwrite_flag == 0) { - { - ssize_t write_ret; - eventfd_t sem_counter = 1; - - /* Call to write for an event fd must be of 8 bytes */ - write_ret = write(itti_dump_queue.event_fd, &sem_counter, sizeof(sem_counter)); - AssertFatal (write_ret == sizeof(sem_counter), "Write to dump event failed (%d/%d)!\n", (int) write_ret, (int) sizeof(sem_counter)); - } - // add one to pending_messages, atomically - __sync_fetch_and_add (&pending_messages, 1); - } - - ITTI_DUMP_DEBUG (0x2, " Added element to queue %p %p, pending %u, type %u\n", new_queue_element, new, pending_messages, message_type); - - return 0; -} - -static void itti_dump_socket_exit(void) -{ - close(itti_dump_queue.event_fd); - close(itti_dump_queue.itti_listen_socket); - - /* Leave the thread as we detected end signal */ - pthread_exit(NULL); -} - -static int itti_dump_flush_ring_buffer(int flush_all) -{ - struct lfds611_freelist_element *element = NULL; - void *user_data; - int j; - int consumer; - - /* Check if there is a least one consumer */ - consumer = 0; - - if (dump_file != NULL) { - consumer = 1; - } else { - for (j = 0; j < ITTI_DUMP_MAX_CON; j++) { - if (itti_dump_queue.itti_clients[j].sd > 0) { - consumer = 1; - break; - } - } - } - - if (consumer > 0) { - do { - /* Acquire the ring element */ - lfds611_ringbuffer_get_read_element(itti_dump_queue.itti_message_queue, &element); - - // subtract one from pending_messages, atomically - __sync_fetch_and_sub (&pending_messages, 1); - - if (element == NULL) { - if (flush_all != 0) { - flush_all = 0; - } else { - AssertFatal (0, "Dump event with no data!\n"); - } - } else { - /* Retrieve user part of the message */ - lfds611_freelist_get_user_data_from_element(element, &user_data); - - ITTI_DUMP_DEBUG (0x2, " removed element from queue %p %p, pending %u\n", element, user_data, pending_messages); - - if (((itti_dump_queue_item_t *)user_data)->message_type == ITTI_DUMP_EXIT_SIGNAL) { - lfds611_ringbuffer_put_read_element(itti_dump_queue.itti_message_queue, element); - itti_dump_socket_exit(); - } - - /* Write message to file */ - itti_dump_fwrite_message((itti_dump_queue_item_t *)user_data); - - /* Send message to remote analyzer */ - for (j = 0; j < ITTI_DUMP_MAX_CON; j++) { - if (itti_dump_queue.itti_clients[j].sd > 0) { - itti_dump_send_message(itti_dump_queue.itti_clients[j].sd, - (itti_dump_queue_item_t *)user_data); - } - } - - itti_dump_user_data_delete_function (user_data, NULL); - lfds611_freelist_set_user_data_in_element(element, NULL); - - /* We have finished with this element, reinsert it in the ring buffer */ - lfds611_ringbuffer_put_read_element(itti_dump_queue.itti_message_queue, element); - } - } while(flush_all - ); - } - - return (consumer); -} - -static int itti_dump_handle_new_connection(int sd, const char *xml_definition, uint32_t xml_definition_length) -{ - if (itti_dump_queue.nb_connected < ITTI_DUMP_MAX_CON) { - uint8_t i; - - for (i = 0; i < ITTI_DUMP_MAX_CON; i++) { - /* Let's find a place to store the new client */ - if (itti_dump_queue.itti_clients[i].sd == -1) { - break; - } - } - - ITTI_DUMP_DEBUG(0x2, " Found place to store new connection: %d\n", i); - - AssertFatal (i < ITTI_DUMP_MAX_CON, "No more connection available (%d/%d) for socked %d!\n", i, ITTI_DUMP_MAX_CON, sd); - - ITTI_DUMP_DEBUG(0x2, " Socket %d accepted\n", sd); - - /* Send the XML message definition */ - if (itti_dump_send_xml_definition(sd, xml_definition, xml_definition_length) < 0) { - AssertError (0, {}, "Failed to send XML definition!\n"); - close (sd); - return -1; - } - - itti_dump_queue.itti_clients[i].sd = sd; - itti_dump_queue.nb_connected++; - } else { - ITTI_DUMP_DEBUG(0x2, " Socket %d rejected\n", sd); - /* We have reached max number of users connected... - * Reject the connection. - */ - close (sd); - return -1; - } - - return 0; -} - -static void *itti_dump_socket(void *arg_p) -{ - uint32_t message_definition_xml_length; - char *message_definition_xml; - int rc; - int itti_listen_socket, max_sd; - int on = 1; - fd_set read_set, working_set; - struct sockaddr_in servaddr; /* socket address structure */ - - struct timeval *timeout_p = NULL; - - ITTI_DUMP_DEBUG(0x2, " Creating TCP dump socket on port %u\n", ITTI_PORT); - - message_definition_xml = (char *)arg_p; - AssertFatal (message_definition_xml != NULL, "Message definition XML is NULL!\n"); - - message_definition_xml_length = strlen(message_definition_xml) + 1; - - if ((itti_listen_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { - ITTI_DUMP_ERROR(" ocket creation failed (%d:%s)\n", errno, strerror(errno)); - pthread_exit(NULL); - } - - /* Allow socket reuse */ - rc = setsockopt(itti_listen_socket, SOL_SOCKET, SO_REUSEADDR, - (char *)&on, sizeof(on)); - - if (rc < 0) { - ITTI_DUMP_ERROR(" setsockopt SO_REUSEADDR failed (%d:%s)\n", errno, strerror(errno)); - close(itti_listen_socket); - pthread_exit(NULL); - } - - /* Set socket to be non-blocking. - * NOTE: sockets accepted will inherit this option. - */ - rc = ioctl(itti_listen_socket, FIONBIO, (char *)&on); - - if (rc < 0) { - ITTI_DUMP_ERROR(" ioctl FIONBIO (non-blocking) failed (%d:%s)\n", errno, strerror(errno)); - close(itti_listen_socket); - pthread_exit(NULL); - } - - memset(&servaddr, 0, sizeof(servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr = htonl(INADDR_ANY); - servaddr.sin_port = htons(ITTI_PORT); - - if (bind(itti_listen_socket, (struct sockaddr *) &servaddr, - sizeof(servaddr)) < 0) { - ITTI_DUMP_ERROR(" Bind failed (%d:%s)\n", errno, strerror(errno)); - pthread_exit(NULL); - } - - if (listen(itti_listen_socket, 5) < 0) { - ITTI_DUMP_ERROR(" Listen failed (%d:%s)\n", errno, strerror(errno)); - pthread_exit(NULL); - } - - FD_ZERO(&read_set); - - /* Add the listener */ - FD_SET(itti_listen_socket, &read_set); - - /* Add the event fd */ - FD_SET(itti_dump_queue.event_fd, &read_set); - - /* Max of both sd */ - max_sd = itti_listen_socket > itti_dump_queue.event_fd ? itti_listen_socket : itti_dump_queue.event_fd; - - itti_dump_queue.itti_listen_socket = itti_listen_socket; - - /* Loop waiting for incoming connects or for incoming data - * on any of the connected sockets. - */ - while (1) { - int desc_ready; - int client_socket = -1; - int i; - - memcpy(&working_set, &read_set, sizeof(read_set)); - timeout_p = NULL; - - /* No timeout: select blocks till a new event has to be handled - * on sd's. - */ - rc = select(max_sd + 1, &working_set, NULL, NULL, timeout_p); - - if (rc < 0) { - ITTI_DUMP_ERROR(" select failed (%d:%s)\n", errno, strerror(errno)); - pthread_exit(NULL); - } else if (rc == 0) { - /* Timeout */ - if (itti_dump_flush_ring_buffer(1) == 0) { - if (itti_dump_running) { - ITTI_DUMP_DEBUG (0x4, " No messages consumers, waiting ...\n"); - usleep(100 * 1000); - } else { - itti_dump_socket_exit(); - } - } - } - - desc_ready = rc; - - for (i = 0; i <= max_sd && desc_ready > 0; i++) { - if (FD_ISSET(i, &working_set)) { - desc_ready -= 1; - - if (i == itti_dump_queue.event_fd) { - /* Notification of new element to dump from other tasks */ - eventfd_t sem_counter; - ssize_t read_ret; - - /* Read will always return 1 for kernel versions > 2.6.30 */ - read_ret = read (itti_dump_queue.event_fd, &sem_counter, sizeof(sem_counter)); - - if (read_ret < 0) { - ITTI_DUMP_ERROR(" Failed read for semaphore: %s\n", strerror(errno)); - pthread_exit(NULL); - } - - AssertFatal (read_ret == sizeof(sem_counter), "Failed to read from dump event FD (%d/%d)!\n", (int) read_ret, (int) sizeof(sem_counter)); - - if (itti_dump_flush_ring_buffer(0) == 0) { - if (itti_dump_running) { - ITTI_DUMP_DEBUG (0x4, " No messages consumers, waiting ...\n"); - usleep(100 * 1000); - { - ssize_t write_ret; - - sem_counter = 1; - /* Call to write for an event fd must be of 8 bytes */ - write_ret = write(itti_dump_queue.event_fd, &sem_counter, sizeof(sem_counter)); - AssertFatal (write_ret == sizeof(sem_counter), "Failed to write to dump event FD (%d/%d)!\n", (int) write_ret, (int) sem_counter); - } - } else { - itti_dump_socket_exit(); - } - } else { - ITTI_DUMP_DEBUG(0x1, " Write element to file\n"); - } - } else - if (i == itti_listen_socket) { - do { - client_socket = accept(itti_listen_socket, NULL, NULL); - - if (client_socket < 0) { - if (errno == EWOULDBLOCK || errno == EAGAIN) { - /* No more new connection */ - ITTI_DUMP_DEBUG(0x2, " No more new connection\n"); - continue; - } else { - ITTI_DUMP_ERROR(" accept failed (%d:%s)\n", errno, strerror(errno)); - pthread_exit(NULL); - } - } - - if (itti_dump_handle_new_connection(client_socket, message_definition_xml, - message_definition_xml_length) == 0) { - /* The socket has been accepted. - * We have to update the set to include this new sd. - */ - FD_SET(client_socket, &read_set); - - if (client_socket > max_sd) - max_sd = client_socket; - } - } while(client_socket != -1); - } else { - /* For now the MME itti dumper should not receive data - * other than connection oriented (CLOSE). - */ - uint8_t j; - - ITTI_DUMP_DEBUG(0x2, " Socket %d disconnected\n", i); - - /* Close the socket and update info related to this connection */ - close(i); - - for (j = 0; j < ITTI_DUMP_MAX_CON; j++) { - if (itti_dump_queue.itti_clients[j].sd == i) - break; - } - - /* In case we don't find the matching sd in list of known - * connections -> assert. - */ - AssertFatal (j < ITTI_DUMP_MAX_CON, "Connection index not found (%d/%d) for socked %d!\n", j, ITTI_DUMP_MAX_CON, i); - - /* Re-initialize the socket to -1 so we can accept new - * incoming connections. - */ - itti_dump_queue.itti_clients[j].sd = -1; - itti_dump_queue.itti_clients[j].last_message_number = 0; - itti_dump_queue.nb_connected--; - - /* Remove the socket from the FD set and update the max sd */ - FD_CLR(i, &read_set); - - if (i == max_sd) { - if (itti_dump_queue.nb_connected == 0) { - /* No more new connection max_sd = itti_listen_socket */ - max_sd = itti_listen_socket; - } else { - while (FD_ISSET(max_sd, &read_set) == 0) { - max_sd -= 1; - } - } - } - } - } - } - } - - return NULL; -} - -/*------------------------------------------------------------------------------*/ -int itti_dump_queue_message(task_id_t sender_task, - message_number_t message_number, - MessageDef *message_p, - const char *message_name, - const uint32_t message_size) -{ - if (itti_dump_running) { - itti_dump_queue_item_t *new; - - AssertFatal (message_name != NULL, "Message name is NULL!\n"); - AssertFatal (message_p != NULL, "Message is NULL!\n"); - - new = itti_malloc(sender_task, TASK_MAX, sizeof(itti_dump_queue_item_t)); - - new->data = itti_malloc(sender_task, TASK_MAX, message_size); - - memcpy(new->data, message_p, message_size); - new->data_size = message_size; - new->message_number = message_number; - - itti_dump_enqueue_message(new, message_size, ITTI_DUMP_MESSAGE_TYPE); - } - - return 0; -} - -/* This function should be called by each thread that will use the ring buffer */ -void itti_dump_thread_use_ring_buffer(void) -{ - lfds611_ringbuffer_use(itti_dump_queue.itti_message_queue); -} - -int itti_dump_init(const char * const messages_definition_xml, const char * const dump_file_name) -{ - int i, ret; - struct sched_param scheduler_param; - - scheduler_param.sched_priority = sched_get_priority_min(SCHED_FIFO) + 1; - - if (dump_file_name != NULL) { - dump_file = fopen(dump_file_name, "wb"); - - if (dump_file == NULL) { - ITTI_DUMP_ERROR(" can not open dump file \"%s\" (%d:%s)\n", dump_file_name, errno, strerror(errno)); - } else { - /* Output the XML to file */ - uint32_t message_size = strlen(messages_definition_xml) + 1; - itti_socket_header_t header; - - header.message_size = sizeof(itti_socket_header_t) + message_size + sizeof(itti_message_types_t); - header.message_type = ITTI_DUMP_XML_DEFINITION; - - fwrite (&header, sizeof(itti_socket_header_t), 1, dump_file); - fwrite (messages_definition_xml, message_size, 1, dump_file); - fwrite (&itti_dump_xml_definition_end, sizeof(itti_message_types_t), 1, dump_file); - fflush (dump_file); - } - } - - memset(&itti_dump_queue, 0, sizeof(itti_desc_t)); - - ITTI_DUMP_DEBUG(0x2, " Creating new ring buffer for itti dump of %u elements\n", - ITTI_QUEUE_MAX_ELEMENTS); - - if (lfds611_ringbuffer_new(&itti_dump_queue.itti_message_queue, - ITTI_QUEUE_MAX_ELEMENTS, - NULL, - NULL) != 1) { - /* Always assert on this condition */ - AssertFatal (0, " Failed to create ring buffer!\n"); - } - - itti_dump_queue.event_fd = eventfd(0, EFD_SEMAPHORE); - - if (itti_dump_queue.event_fd == -1) { - /* Always assert on this condition */ - AssertFatal (0, "eventfd failed: %s!\n", strerror(errno)); - } - - itti_dump_queue.nb_connected = 0; - - for(i = 0; i < ITTI_DUMP_MAX_CON; i++) { - itti_dump_queue.itti_clients[i].sd = -1; - itti_dump_queue.itti_clients[i].last_message_number = 0; - } - - /* initialized with default attributes */ - ret = pthread_attr_init(&itti_dump_queue.attr); - - if (ret < 0) { - AssertFatal (0, "pthread_attr_init failed (%d:%s)!\n", errno, strerror(errno)); - } - - ret = pthread_attr_setschedpolicy(&itti_dump_queue.attr, SCHED_FIFO); - - if (ret < 0) { - AssertFatal (0, "pthread_attr_setschedpolicy (SCHED_IDLE) failed (%d:%s)!\n", errno, strerror(errno)); - } - - ret = pthread_attr_setschedparam(&itti_dump_queue.attr, &scheduler_param); - - if (ret < 0) { - AssertFatal (0, "pthread_attr_setschedparam failed (%d:%s)!\n", errno, strerror(errno)); - } - - ret = pthread_create(&itti_dump_queue.itti_acceptor_thread, &itti_dump_queue.attr, - &itti_dump_socket, (void *)messages_definition_xml); - - if (ret < 0) { - AssertFatal (0, "pthread_create failed (%d:%s)!\n", errno, strerror(errno)); - } - - pthread_setname_np( itti_dump_queue.itti_acceptor_thread, "ITTI acceptor" ); - - return 0; -} - -void itti_dump_exit(void) -{ - void *arg; - itti_dump_queue_item_t *new; - - new = itti_malloc(TASK_UNKNOWN, TASK_UNKNOWN, sizeof(itti_dump_queue_item_t)); - memset(new, 0, sizeof(itti_dump_queue_item_t)); - - /* Set a flag to stop recording message */ - itti_dump_running = 0; - - /* Send the exit signal to other thread */ - itti_dump_enqueue_message(new, 0, ITTI_DUMP_EXIT_SIGNAL); - - ITTI_DUMP_DEBUG(0x2, " waiting for dumper thread to finish\n"); - - /* wait for the thread to terminate */ - pthread_join(itti_dump_queue.itti_acceptor_thread, &arg); - - ITTI_DUMP_DEBUG(0x2, " dumper thread correctly exited\n"); - - if (dump_file != NULL) { - /* Synchronise file and then close it */ - fclose(dump_file); - dump_file = NULL; - } - - if (itti_dump_queue.itti_message_queue) { - lfds611_ringbuffer_delete(itti_dump_queue.itti_message_queue, - itti_dump_user_data_delete_function, NULL); - } -} diff --git a/common/utils/itti/intertask_interface_dump.h b/common/utils/itti/intertask_interface_dump.h deleted file mode 100644 index a34dcecbf6..0000000000 --- a/common/utils/itti/intertask_interface_dump.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#ifndef INTERTASK_INTERFACE_DUMP_H_ -#define INTERTASK_INTERFACE_DUMP_H_ - -int itti_dump_queue_message(task_id_t sender_task, message_number_t message_number, MessageDef *message_p, const char *message_name, - const uint32_t message_size); - -int itti_dump_init(const char * const messages_definition_xml, const char * const dump_file_name); - -void itti_dump_exit(void); - -void itti_dump_thread_use_ring_buffer(void); - -#endif /* INTERTASK_INTERFACE_DUMP_H_ */ diff --git a/common/utils/itti/intertask_interface_init.h b/common/utils/itti/intertask_interface_init.h index 333b0653d7..dbd4e1b2ec 100644 --- a/common/utils/itti/intertask_interface_init.h +++ b/common/utils/itti/intertask_interface_init.h @@ -41,10 +41,6 @@ #ifndef CHECK_PROTOTYPE_ONLY -const char * const messages_definition_xml = { -#include "messages_xml.h" -}; - /* Map task id to printable name. */ const task_info_t tasks_info[] = { {0, TASK_UNKNOWN, 0, 0, "TASK_UNKNOWN"}, @@ -71,8 +67,7 @@ const message_info_t messages_info[] = { * \param messages_info Pointer on messages information as created by this include file **/ int itti_init(task_id_t task_max, thread_id_t thread_max, MessagesIds messages_id_max, const task_info_t *tasks_info, - const message_info_t *messages_info, const char * const messages_definition_xml, - const char * const dump_file_name); + const message_info_t *messages_info); #endif /* INTERTASK_INTERFACE_INIT_H_ */ /* @} */ diff --git a/common/utils/itti/signals.c b/common/utils/itti/signals.c index 9767ba3f67..c526f04f43 100644 --- a/common/utils/itti/signals.c +++ b/common/utils/itti/signals.c @@ -42,8 +42,8 @@ #include "log.h" #if defined (LOG_D) && defined (LOG_E) -# define SIG_DEBUG(x, args...) LOG_D(EMU, x, ##args) -# define SIG_ERROR(x, args...) LOG_E(EMU, x, ##args) +# define SIG_DEBUG(x, args...) LOG_D(RRC, x, ##args) +# define SIG_ERROR(x, args...) LOG_E(RRC, x, ##args) #endif #ifndef SIG_DEBUG @@ -117,16 +117,19 @@ int signal_handle(int *end) case SIGUSR1: SIG_DEBUG("Received SIGUSR1\n"); *end = 1; + output_log_mem(); break; case SIGSEGV: /* Fall through */ case SIGABRT: SIG_DEBUG("Received SIGABORT\n"); + output_log_mem(); backtrace_handle_signal(&info); break; case SIGINT: printf("Received SIGINT\n"); + output_log_mem(); itti_send_terminate_message(TASK_UNKNOWN); *end = 1; break; diff --git a/common/utils/itti_analyzer/libparser/xml_parse.c b/common/utils/itti_analyzer/libparser/xml_parse.c index 352b10d616..72447e7669 100644 --- a/common/utils/itti_analyzer/libparser/xml_parse.c +++ b/common/utils/itti_analyzer/libparser/xml_parse.c @@ -740,25 +740,6 @@ int xml_parse_buffer(char *xml_buffer, const int size) { return xml_parse_doc(doc); } -#if 0 /* Not used anymore */ -int xml_parse_file(const char *filename) { - xmlDocPtr doc; /* the resulting document tree */ - - if (filename == NULL) { - return RC_NULL_POINTER; - } - - doc = xmlReadFile (filename, NULL, 0); - - if (doc == NULL) { - ui_notification_dialog(GTK_MESSAGE_ERROR, FALSE, "parse messages format definition", "Failed to parse file \"%s\"", filename); - return RC_FAIL; - } - - return xml_parse_doc(doc); -} -#endif - static int update_filters() { types_t *types; diff --git a/common/utils/telnetsrv/telnetsrv_phycmd.h b/common/utils/telnetsrv/telnetsrv_phycmd.h index 6e2b0ecacf..3eaa9e1684 100644 --- a/common/utils/telnetsrv/telnetsrv_phycmd.h +++ b/common/utils/telnetsrv/telnetsrv_phycmd.h @@ -35,7 +35,7 @@ #include "UTIL/LOG/log.h" -#include "openair1/PHY/extern.h" +#include "openair1/PHY/phy_extern.h" #define TELNETVAR_PHYCC0 0 diff --git a/common/utils/telnetsrv/telnetsrv_proccmd.c b/common/utils/telnetsrv/telnetsrv_proccmd.c index 91f0e9c93a..ac48dc527d 100644 --- a/common/utils/telnetsrv/telnetsrv_proccmd.c +++ b/common/utils/telnetsrv/telnetsrv_proccmd.c @@ -55,7 +55,7 @@ #include "log.h" #include "log_extern.h" #include "common/config/config_userapi.h" -#include "openair1/PHY/extern.h" +#include "openair1/PHY/phy_extern.h" #include "telnetsrv_proccmd.h" void decode_procstat(char *record, int debug, telnet_printfunc_t prnt) @@ -193,7 +193,6 @@ struct dirent *entry; int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt) { -extern log_t *g_log; if (debug > 0) prnt(" proccmd_show received %s\n",buf); @@ -203,10 +202,12 @@ extern log_t *g_log; if (strcasestr(buf,"loglvl") != NULL) { prnt("component verbosity level enabled\n"); for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { - prnt("%02i %17.17s:%10.10s%10.10s %s\n",i ,g_log->log_component[i].name, - map_int_to_str(log_verbosity_names,g_log->log_component[i].flag), - map_int_to_str(log_level_names,g_log->log_component[i].level), - ((g_log->log_component[i].interval>0)?"Y":"N") ); + if (g_log->log_component[i].name != NULL) { + prnt("%02i %17.17s:%10.10s%10.10s %s\n",i ,g_log->log_component[i].name, + map_int_to_str(log_verbosity_names,g_log->log_component[i].flag), + map_int_to_str(log_level_names,g_log->log_component[i].level), + ((g_log->log_component[i].interval>0)?"Y":"N") ); + } } } if (strcasestr(buf,"config") != NULL) { @@ -368,6 +369,15 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); if (logparam != NULL) free(logparam); if (tmpstr != NULL) free(tmpstr); for (int i=idx1; i<=idx2 ; i++) { + if (level < 0) { + level=g_log->log_component[i].level; + } + if (verbosity < 0) { + verbosity=g_log->log_component[i].flag; + } + if (interval < 0) { + interval=g_log->log_component[i].interval; + } set_comp_log(i, level, verbosity, interval); prnt("log level/verbosity comp %i %s set to %s / %s (%s)\n", i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name), diff --git a/nfapi/oai_integration/nfapi_pnf.c b/nfapi/oai_integration/nfapi_pnf.c index dee4e8d310..80e144c81c 100644 --- a/nfapi/oai_integration/nfapi_pnf.c +++ b/nfapi/oai_integration/nfapi_pnf.c @@ -516,7 +516,7 @@ int config_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfap uint8_t num_tlv = 0; //struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0]; - // Panos: In the case of nfapi_mode = 3 (UE = PNF) we should not have dependency on any eNB var. So we aim + // In the case of nfapi_mode = 3 (UE = PNF) we should not have dependency on any eNB var. So we aim // to keep only the necessary just to keep the nfapi FSM rolling by sending a dummy response. LTE_DL_FRAME_PARMS *fp; if (nfapi_mode!=3) { @@ -527,18 +527,6 @@ int config_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfap fp = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS)); } - -#if 0 - //DJP - auto found = std::find_if(pnf->phys.begin(), pnf->phys.end(), [&](phy_info& item) - { return item.id == req->header.phy_id; }); - - if(found != pnf->phys.end()) - { - phy_info& phy_info = (*found); - } -#endif - //DJP phy_info* phy_info = pnf->phys; if(req->nfapi_config.timing_window.tl.tag == NFAPI_NFAPI_TIMING_WINDOW_TAG) { @@ -871,7 +859,11 @@ int pnf_phy_dl_config_req(nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request AssertFatal(UE_id= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX); LTE_eNB_DLSCH_t *dlsch0 = eNB->dlsch[UE_id][0]; //LTE_eNB_DLSCH_t *dlsch1 = eNB->dlsch[UE_id][1]; - int harq_pid = dlsch0->harq_ids[sf]; + int harq_pid = dlsch0->harq_ids[sfn%2][sf]; + if(harq_pid >= dlsch0->Mdlharq) { + LOG_E(PHY,"pnf_phy_dl_config_req illegal harq_pid %d\n", harq_pid); + return(-1); + } uint8_t *dlsch_sdu = tx_pdus[UE_id][harq_pid]; memcpy(dlsch_sdu, tx_pdu->segments[0].segment_data, tx_pdu->segments[0].segment_length); @@ -1113,7 +1105,6 @@ int start_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi } if(phy_info->timing_info_mode & 0x2) { - //printf("Panos-D: start_request () Enabling timing_info_mode_aperiodic \n"); p7_config->timing_info_mode_aperiodic = 1; } @@ -1181,9 +1172,6 @@ int start_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] DJP - HACK - Set p7_config global ready for subframe ind%s\n", __FUNCTION__); p7_config_g = p7_config; - //NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] Panos-D: start_request, BUFFER SIZE: %d", p7_config_g->subframe_buffer_size); - //printf("Panos-D: start_request, bUFFER SIZE: %d", p7_config_g->subframe_buffer_size); - // Need to wait for main thread to create RU structures while(config_sync_var<0) { @@ -1197,13 +1185,7 @@ int start_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi printf("[PNF] About to call init_eNB_afterRU()\n"); - // Panos: Instead - /*if (nfapi_mode == 3) { - init_UE_stub(1,0,uecap_xer_in); - }*/ - //else{ if (nfapi_mode != 3) { - // Panos init_eNB_afterRU(); } diff --git a/nfapi/oai_integration/nfapi_vnf.c b/nfapi/oai_integration/nfapi_vnf.c index 74e999528c..5380d340a3 100644 --- a/nfapi/oai_integration/nfapi_vnf.c +++ b/nfapi/oai_integration/nfapi_vnf.c @@ -357,18 +357,6 @@ int wake_eNB_rxtx(PHY_VARS_eNB *eNB, uint16_t sfn, uint16_t sf) { wait.tv_sec=0; wait.tv_nsec=5000000L; -#if 0 - /* accept some delay in processing - up to 5ms */ - for (i = 0; i < 10 && proc_rxtx->instance_cnt_rxtx == 0; i++) { - LOG_W( PHY,"[eNB] sfn/sf:%d:%d proc_rxtx[%d]:TXsfn:%d/%d eNB RXn-TXnp4 thread busy!! (cnt_rxtx %i)\n", sfn, sf, sf&1, proc_rxtx->frame_tx, proc_rxtx->subframe_tx, proc_rxtx->instance_cnt_rxtx); - usleep(500); - } - if (proc_rxtx->instance_cnt_rxtx == 0) { - exit_fun( "TX thread busy" ); - return(-1); - } -#endif - // wake up TX for subframe n+sf_ahead // lock the TX mutex and make sure the thread is ready if (pthread_mutex_timedlock(&proc_rxtx->mutex_rxtx,&wait) != 0) { diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h index f665d11c89..282739e315 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h @@ -1308,7 +1308,7 @@ typedef struct { typedef struct { nfapi_tl_t tl; uint16_t length; - uint16_t pdu_index; + int16_t pdu_index; uint16_t transmission_power; } nfapi_dl_config_bch_pdu_rel8_t; #define NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG 0x2004 @@ -1320,7 +1320,7 @@ typedef struct { typedef struct { nfapi_tl_t tl; uint16_t length; - uint16_t pdu_index; + int16_t pdu_index; uint16_t rnti; uint8_t resource_allocation_type; uint32_t resource_block_coding; @@ -1344,7 +1344,7 @@ typedef struct { typedef struct { nfapi_tl_t tl; uint16_t length; - uint16_t pdu_index; + int16_t pdu_index; uint16_t rnti; uint8_t resource_allocation_type; uint8_t virtual_resource_block_assignment_flag; @@ -1429,7 +1429,7 @@ typedef struct { typedef struct { nfapi_tl_t tl; uint16_t length; - uint16_t pdu_index; + int16_t pdu_index; uint16_t p_rnti; uint8_t resource_allocation_type; uint8_t virtual_resource_block_assignment_flag; @@ -1595,7 +1595,7 @@ typedef struct { typedef struct { nfapi_tl_t tl; uint16_t length; - uint16_t pdu_index; + int16_t pdu_index; uint16_t transmission_power; uint16_t hyper_sfn_2_lsbs; } nfapi_dl_config_nbch_pdu_rel13_t; @@ -1609,7 +1609,7 @@ typedef struct { typedef struct { nfapi_tl_t tl; uint16_t length; - uint16_t pdu_index; + int16_t pdu_index; uint8_t ncce_index; uint8_t aggregation_level; uint8_t start_symbol; @@ -1642,7 +1642,7 @@ typedef struct { typedef struct { nfapi_tl_t tl; uint16_t length; - uint16_t pdu_index; + int16_t pdu_index; uint8_t start_symbol; uint8_t rnti_type; uint16_t rnti; @@ -2218,6 +2218,7 @@ typedef struct { uint8_t dl_assignment_index; uint32_t tpc_bitmap; uint16_t transmission_power; + uint8_t harq_pid; } nfapi_hi_dci0_dci_pdu_rel8_t; #define NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG 0x2020 @@ -2361,7 +2362,7 @@ typedef struct { #define NFAPI_TX_MAX_SEGMENTS 32 typedef struct { uint16_t pdu_length; - uint16_t pdu_index; + int16_t pdu_index; uint8_t num_segments; struct { uint32_t segment_length; @@ -2902,7 +2903,7 @@ typedef struct { typedef struct { uint8_t sub_error_code; - uint16_t pdu_index; + int16_t pdu_index; } nfapi_error_indication_msg_tx_err; // diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index 3754fe379f..c180b5b0f9 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -2924,7 +2924,7 @@ static uint8_t unpack_dl_config_bch_pdu_rel8_value(void *tlv, uint8_t **ppReadPa nfapi_dl_config_bch_pdu_rel8_t* bch_pdu_rel8 = (nfapi_dl_config_bch_pdu_rel8_t*)tlv; return ( pull16(ppReadPackedMsg, &bch_pdu_rel8->length, end) && - pull16(ppReadPackedMsg, &bch_pdu_rel8->pdu_index, end) && + pull16(ppReadPackedMsg, (uint16_t *)&bch_pdu_rel8->pdu_index, end) && pull16(ppReadPackedMsg, &bch_pdu_rel8->transmission_power, end)); } @@ -2933,7 +2933,7 @@ static uint8_t unpack_dl_config_mch_pdu_rel8_value(void *tlv, uint8_t **ppReadPa nfapi_dl_config_mch_pdu_rel8_t* mch_pdu_rel8 = (nfapi_dl_config_mch_pdu_rel8_t*)tlv; return (pull16(ppReadPackedMsg, &mch_pdu_rel8->length, end) && - pull16(ppReadPackedMsg, &mch_pdu_rel8->pdu_index, end) && + pull16(ppReadPackedMsg, (uint16_t *)&mch_pdu_rel8->pdu_index, end) && pull16(ppReadPackedMsg, &mch_pdu_rel8->rnti, end) && pull8(ppReadPackedMsg, &mch_pdu_rel8->resource_allocation_type, end) && pull32(ppReadPackedMsg, &mch_pdu_rel8->resource_block_coding, end) && @@ -2947,7 +2947,7 @@ static uint8_t unpack_dl_config_dlsch_pdu_rel8_value(void *tlv, uint8_t **ppRead nfapi_dl_config_dlsch_pdu_rel8_t* dlsch_pdu_rel8 = (nfapi_dl_config_dlsch_pdu_rel8_t*)tlv; if (!(pull16(ppReadPackedMsg, &dlsch_pdu_rel8->length, end) && - pull16(ppReadPackedMsg, &dlsch_pdu_rel8->pdu_index, end) && + pull16(ppReadPackedMsg, (uint16_t *)&dlsch_pdu_rel8->pdu_index, end) && pull16(ppReadPackedMsg, &dlsch_pdu_rel8->rnti, end) && pull8(ppReadPackedMsg, &dlsch_pdu_rel8->resource_allocation_type, end) && pull8(ppReadPackedMsg, &dlsch_pdu_rel8->virtual_resource_block_assignment_flag, end) && @@ -3033,7 +3033,7 @@ static uint8_t unpack_dl_config_pch_pdu_rel8_value(void *tlv, uint8_t **ppReadPa nfapi_dl_config_pch_pdu_rel8_t* pch_pdu_rel8 = (nfapi_dl_config_pch_pdu_rel8_t*)tlv; return ( pull16(ppReadPackedMsg, &pch_pdu_rel8->length, end) && - pull16(ppReadPackedMsg, &pch_pdu_rel8->pdu_index, end) && + pull16(ppReadPackedMsg, (uint16_t *)&pch_pdu_rel8->pdu_index, end) && pull16(ppReadPackedMsg, &pch_pdu_rel8->p_rnti, end) && pull8(ppReadPackedMsg, &pch_pdu_rel8->resource_allocation_type, end) && pull8(ppReadPackedMsg, &pch_pdu_rel8->virtual_resource_block_assignment_flag, end) && @@ -3179,7 +3179,7 @@ static uint8_t unpack_dl_config_nbch_pdu_rel13_value(void *tlv, uint8_t **ppRead nfapi_dl_config_nbch_pdu_rel13_t* nbch_params_rel13 = (nfapi_dl_config_nbch_pdu_rel13_t*)tlv; return ( pull16(ppReadPackedMsg, &nbch_params_rel13->length, end) && - pull16(ppReadPackedMsg, &nbch_params_rel13->pdu_index, end) && + pull16(ppReadPackedMsg, (uint16_t *)&nbch_params_rel13->pdu_index, end) && pull16(ppReadPackedMsg, &nbch_params_rel13->transmission_power, end) && pull16(ppReadPackedMsg, &nbch_params_rel13->hyper_sfn_2_lsbs, end)); } @@ -3189,7 +3189,7 @@ static uint8_t unpack_dl_config_npdcch_pdu_rel13_value(void *tlv, uint8_t **ppRe nfapi_dl_config_npdcch_pdu_rel13_t* npdcch_params_rel13 = (nfapi_dl_config_npdcch_pdu_rel13_t*)tlv; return ( pull16(ppReadPackedMsg, &npdcch_params_rel13->length, end) && - pull16(ppReadPackedMsg, &npdcch_params_rel13->pdu_index, end) && + pull16(ppReadPackedMsg, (uint16_t *)&npdcch_params_rel13->pdu_index, end) && pull8(ppReadPackedMsg, &npdcch_params_rel13->ncce_index, end) && pull8(ppReadPackedMsg, &npdcch_params_rel13->aggregation_level, end) && pull8(ppReadPackedMsg, &npdcch_params_rel13->start_symbol, end) && @@ -3218,7 +3218,7 @@ static uint8_t unpack_dl_config_ndlsch_pdu_rel13_value(void *tlv, uint8_t **ppRe nfapi_dl_config_ndlsch_pdu_rel13_t* ndlsch_params_rel13 = (nfapi_dl_config_ndlsch_pdu_rel13_t*)tlv; return ( pull16(ppReadPackedMsg, &ndlsch_params_rel13->length, end) && - pull16(ppReadPackedMsg, &ndlsch_params_rel13->pdu_index, end) && + pull16(ppReadPackedMsg, (uint16_t *)&ndlsch_params_rel13->pdu_index, end) && pull8(ppReadPackedMsg, &ndlsch_params_rel13->start_symbol, end) && pull8(ppReadPackedMsg, &ndlsch_params_rel13->rnti_type, end) && pull16(ppReadPackedMsg, &ndlsch_params_rel13->rnti, end) && @@ -3602,7 +3602,7 @@ static uint8_t unpack_ul_config_ue_info_rel8_value(void *tlv, uint8_t **ppReadPa nfapi_ul_config_ue_information_rel8_t* ue_info_rel8 = (nfapi_ul_config_ue_information_rel8_t*)tlv; return (pull32(ppReadPackedMsg, &ue_info_rel8->handle, end) && - pull16(ppReadPackedMsg, &ue_info_rel8->rnti, end)); + pull16(ppReadPackedMsg, (uint16_t *)&ue_info_rel8->rnti, end)); } static uint8_t unpack_ul_config_ue_info_rel11_value(void *tlv, uint8_t **ppReadPackedMsg, uint8_t *end) { diff --git a/nfapi/open-nFAPI/pnf/src/pnf_p7.c b/nfapi/open-nFAPI/pnf/src/pnf_p7.c index 02b828d382..8d94c23476 100644 --- a/nfapi/open-nFAPI/pnf/src/pnf_p7.c +++ b/nfapi/open-nFAPI/pnf/src/pnf_p7.c @@ -1624,10 +1624,6 @@ void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time) // need to update the time as we would only use the value from the // select -#if 0 -// DJP - why do this here and not on return from recv??? - now_hr_time = pnf_get_current_time_hr(); -#endif } while(recvfrom_result > 0); } diff --git a/nfapi/open-nFAPI/vnf/src/vnf_p7.c b/nfapi/open-nFAPI/vnf/src/vnf_p7.c index 3c469c942b..cea259c35b 100644 --- a/nfapi/open-nFAPI/vnf/src/vnf_p7.c +++ b/nfapi/open-nFAPI/vnf/src/vnf_p7.c @@ -1248,12 +1248,12 @@ void vnf_handle_timing_info(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7) //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() PNF:SFN/SF:%d VNF:SFN/SF:%d deltaSFNSF:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind.last_sfn_sf), NFAPI_SFNSF2DEC(vnf_p7->p7_connections[0].sfn_sf), vnf_pnf_sfnsf_delta); - // Panos: Careful here!!! + // Panos: Careful here!!! Modification of the original nfapi-code //if (vnf_pnf_sfnsf_delta>1 || vnf_pnf_sfnsf_delta < -1) if (vnf_pnf_sfnsf_delta>0 || vnf_pnf_sfnsf_delta < 0) { NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() LARGE SFN/SF DELTA between PNF and VNF delta:%d VNF:%d PNF:%d\n\n\n\n\n\n\n\n\n", __FUNCTION__, vnf_pnf_sfnsf_delta, NFAPI_SFNSF2DEC(vnf_p7->p7_connections[0].sfn_sf), NFAPI_SFNSF2DEC(ind.last_sfn_sf)); - // Panos: Careful here!!! + // Panos: Careful here!!! Modification of the original nfapi-code vnf_p7->p7_connections[0].sfn_sf = ind.last_sfn_sf; } } diff --git a/nfapi/open-nFAPI/vnf/src/vnf_p7_interface.c b/nfapi/open-nFAPI/vnf/src/vnf_p7_interface.c index a35d8e3c1d..4a85f7e4b3 100644 --- a/nfapi/open-nFAPI/vnf/src/vnf_p7_interface.c +++ b/nfapi/open-nFAPI/vnf/src/vnf_p7_interface.c @@ -200,13 +200,6 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config) // still time before the end of the subframe wait pselect_timeout = timespec_sub(sf_start, pselect_start); -#if 0 - NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() sf_start:%d.%ld pselect_start:%d.%ld pseclect_timeout:%d.%ld\n", - __FUNCTION__, - sf_start.tv_sec, sf_start.tv_nsec, - pselect_start.tv_sec, pselect_start.tv_nsec, - pselect_timeout.tv_sec, pselect_timeout.tv_nsec); -#endif } //original_pselect_timeout = pselect_timeout; @@ -266,13 +259,6 @@ if (selectRetval==-1 && errno == 22) phy->insync_minor_adjustment_duration, phy->insync_minor_adjustment, sf_duration.tv_sec, sf_duration.tv_nsec); } -#if 0 - if (selectRetval != 0 || phy->insync_minor_adjustment_duration != 0) - NFAPI_TRACE(NFAPI_TRACE_NOTE, "pselect()=%d maxSock:%d vnf_p7->socket:%d pselect_timeout:%u.%u original_pselect_timeout:%u.%u\n", - selectRetval, maxSock, vnf_p7->socket, pselect_timeout.tv_sec, pselect_timeout.tv_nsec, - original_pselect_timeout.tv_sec, original_pselect_timeout.tv_nsec); -#endif - if(selectRetval == 0) { // calculate the start of the next subframe diff --git a/openair1/PHY/CODING/3gpplte.c b/openair1/PHY/CODING/3gpplte.c index ae476a118f..52090d8ec1 100644 --- a/openair1/PHY/CODING/3gpplte.c +++ b/openair1/PHY/CODING/3gpplte.c @@ -30,7 +30,6 @@ #include #include #include "PHY/CODING/coding_defs.h" -#include "extern_3GPPinterleaver.h" //#define DEBUG_TURBO_ENCODER 1 @@ -110,9 +109,7 @@ uint32_t bit_byte_lut[2048]; void threegpplte_turbo_encoder(uint8_t *input, uint16_t input_length_bytes, uint8_t *output, - uint8_t F, - uint16_t interleaver_f1, - uint16_t interleaver_f2) + uint8_t F) { int i,k=0; @@ -256,6 +253,217 @@ inline short threegpp_interleaver_parameters(uint16_t bytes_per_codeword) return(-1); } } + +const interleaver_TS_36_212_t f1f2[188] = { + { 40, 3, 10 }, + { 48, 7, 12 }, + { 56, 19, 42 }, + { 64, 7, 16 }, + { 72, 7, 18 }, + { 80, 11, 20 }, + { 88, 5, 22 }, + { 96, 11, 24 }, + { 104, 7, 26 }, + { 112, 41, 84 }, + { 120, 103, 90 }, + { 128, 15, 32 }, + { 136, 9, 34 }, + { 144, 17, 108 }, + { 152, 9, 38 }, + { 160, 21, 120 }, + { 168, 101, 84 }, + { 176, 21, 44 }, + { 184, 57, 46 }, + { 192, 23, 48 }, + { 200, 13, 50 }, + { 208, 27, 52 }, + { 216, 11, 36 }, + { 224, 27, 56 }, + { 232, 85, 58 }, + { 240, 29, 60 }, + { 248, 33, 62 }, + { 256, 15, 32 }, + { 264, 17, 198 }, + { 272, 33, 68 }, + { 280, 103, 210 }, + { 288, 19, 36 }, + { 296, 19, 74 }, + { 304, 37, 76 }, + { 312, 19, 78 }, + { 320, 21, 120 }, + { 328, 21, 82 }, + { 336, 115, 84 }, + { 344, 193, 86 }, + { 352, 21, 44 }, + { 360, 133, 90 }, + { 368, 81, 46 }, + { 376, 45, 94 }, + { 384, 23, 48 }, + { 392, 243, 98 }, + { 400, 151, 40 }, + { 408, 155, 102 }, + { 416, 25, 52 }, + { 424, 51, 106 }, + { 432, 47, 72 }, + { 440, 91, 110 }, + { 448, 29, 168 }, + { 456, 29, 114 }, + { 464, 247, 58 }, + { 472, 29, 118 }, + { 480, 89, 180 }, + { 488, 91, 122 }, + { 496, 157, 62 }, + { 504, 55, 84 }, + { 512, 31, 64 }, + { 528, 17, 66 }, + { 544, 35, 68 }, + { 560, 227, 420 }, + { 576, 65, 96 }, + { 592, 19, 74 }, + { 608, 37, 76 }, + { 624, 41, 234 }, + { 640, 39, 80 }, + { 656, 185, 82 }, + { 672, 43, 252 }, + { 688, 21, 86 }, + { 704, 155, 44 }, + { 720, 79, 120 }, + { 736, 139, 92 }, + { 752, 23, 94 }, + { 768, 217, 48 }, + { 784, 25, 98 }, + { 800, 17, 80 }, + { 816, 127, 102 }, + { 832, 25, 52 }, + { 848, 239, 106 }, + { 864, 17, 48 }, + { 880, 137, 110 }, + { 896, 215, 112 }, + { 912, 29, 114 }, + { 928, 15, 58 }, + { 944, 147, 118 }, + { 960, 29, 60 }, + { 976, 59, 122 }, + { 992, 65, 124 }, + { 1008, 55, 84 }, + { 1024, 31, 64 }, + { 1056, 17, 66 }, + { 1088, 171, 204 }, + { 1120, 67, 140 }, + { 1152, 35, 72 }, + { 1184, 19, 74 }, + { 1216, 39, 76 }, + { 1248, 19, 78 }, + { 1280, 199, 240 }, + { 1312, 21, 82 }, + { 1344, 211, 252 }, + { 1376, 21, 86 }, + { 1408, 43, 88 }, + { 1440, 149, 60 }, + { 1472, 45, 92 }, + { 1504, 49, 846 }, + { 1536, 71, 48 }, + { 1568, 13, 28 }, + { 1600, 17, 80 }, + { 1632, 25, 102 }, + { 1664, 183, 104 }, + { 1696, 55, 954 }, + { 1728, 127, 96 }, + { 1760, 27, 110 }, + { 1792, 29, 112 }, + { 1824, 29, 114 }, + { 1856, 57, 116 }, + { 1888, 45, 354 }, + { 1920, 31, 120 }, + { 1952, 59, 610 }, + { 1984, 185, 124 }, + { 2016, 113, 420 }, + { 2048, 31, 64 }, + { 2112, 17, 66 }, + { 2176, 171, 136 }, + { 2240, 209, 420 }, + { 2304, 253, 216 }, + { 2368, 367, 444 }, + { 2432, 265, 456 }, + { 2496, 181, 468 }, + { 2560, 39, 80 }, + { 2624, 27, 164 }, + { 2688, 127, 504 }, + { 2752, 143, 172 }, + { 2816, 43, 88 }, + { 2880, 29, 300 }, + { 2944, 45, 92 }, + { 3008, 157, 188 }, + { 3072, 47, 96 }, + { 3136, 13, 28 }, + { 3200, 111, 240 }, + { 3264, 443, 204 }, + { 3328, 51, 104 }, + { 3392, 51, 212 }, + { 3456, 451, 192 }, + { 3520, 257, 220 }, + { 3584, 57, 336 }, + { 3648, 313, 228 }, + { 3712, 271, 232 }, + { 3776, 179, 236 }, + { 3840, 331, 120 }, + { 3904, 363, 244 }, + { 3968, 375, 248 }, + { 4032, 127, 168 }, + { 4096, 31, 64 }, + { 4160, 33, 130 }, + { 4224, 43, 264 }, + { 4288, 33, 134 }, + { 4352, 477, 408 }, + { 4416, 35, 138 }, + { 4480, 233, 280 }, + { 4544, 357, 142 }, + { 4608, 337, 480 }, + { 4672, 37, 146 }, + { 4736, 71, 444 }, + { 4800, 71, 120 }, + { 4864, 37, 152 }, + { 4928, 39, 462 }, + { 4992, 127, 234 }, + { 5056, 39, 158 }, + { 5120, 39, 80 }, + { 5184, 31, 96 }, + { 5248, 113, 902 }, + { 5312, 41, 166 }, + { 5376, 251, 336 }, + { 5440, 43, 170 }, + { 5504, 21, 86 }, + { 5568, 43, 174 }, + { 5632, 45, 176 }, + { 5696, 45, 178 }, + { 5760, 161, 120 }, + { 5824, 89, 182 }, + { 5888, 323, 184 }, + { 5952, 47, 186 }, + { 6016, 23, 94 }, + { 6080, 47, 190 }, + { 6144, 263, 480 }, +}; + + +t_interleaver_codebook *f1f2mat; +short *il_tb; +__attribute__((constructor)) static void init_interleaver(void) { + int totSize=0; + f1f2mat=(t_interleaver_codebook*) malloc(sizeof(*f1f2mat) * sizeof(f1f2) / sizeof(*f1f2)); + for (int i=0; i < sizeof(f1f2)/sizeof(*f1f2) ; i++) { + f1f2mat[i].nb_bits=f1f2[i].nb_bits; + f1f2mat[i].f1=f1f2[i].f1; + f1f2mat[i].f2=f1f2[i].f2; + f1f2mat[i].beg_index=totSize; + totSize+=f1f2mat[i].nb_bits; + } + il_tb=(short*)malloc(sizeof(*il_tb)*totSize); + int idx=0; + for (int i=0; i < sizeof(f1f2)/sizeof(*f1f2) ; i++) + for (uint64_t j=0; j #endif #include @@ -539,9 +537,7 @@ char interleave_compact_byte(short * base_interleaver,unsigned char * input, uns void threegpplte_turbo_encoder_sse(unsigned char *input, unsigned short input_length_bytes, unsigned char *output, - unsigned char F, - unsigned short interleaver_f1, - unsigned short interleaver_f2) + unsigned char F) { int i; @@ -699,9 +695,7 @@ int main(int argc,char **argv) threegpplte_turbo_encoder_sse(&input[0], INPUT_LENGTH, &output[0], - 0, - F1, - F2); + 0); for (i=0;i<12+(INPUT_LENGTH*24);i++) diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c index a541c22393..8c2513b702 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c @@ -46,7 +46,6 @@ #include "PHY/defs_common.h" #include "PHY/CODING/coding_defs.h" #include "PHY/CODING/lte_interleaver_inline.h" -#include "extern_3GPPinterleaver.h" #else #include "defs.h" @@ -893,8 +892,6 @@ unsigned char phy_threegpplte_turbo_decoder16avx2(int16_t *y, uint8_t *decoded_bytes, uint8_t *decoded_bytes2, uint16_t n, - uint16_t f1, - uint16_t f2, uint8_t max_iterations, uint8_t crc_type, uint8_t F, @@ -989,134 +986,6 @@ unsigned char phy_threegpplte_turbo_decoder16avx2(int16_t *y, yp1 = yparity1; yp2 = yparity2; - -#if 0 - __m128i *yp128,*yp128_cw2; - __m128i tmpe,tmpe_cw2; - yp128 = (__m128i*)y; - yp128_cw2 = (__m128i*)y2; - - - - for (i=0; i>4)<<3)+(j&7),s[j],yp1[j],yp2[j]); - fprintf(fdavx2b,"init0: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]); -#endif - - j=pi2_p[1]; - - s[j] = _mm_extract_epi16(tmpe,3); - yp1[j] = _mm_extract_epi16(tmpe,4); - yp2[j] = _mm_extract_epi16(tmpe,5); - s[j+8] = _mm_extract_epi16(tmpe_cw2,3); - yp1[j+8] = _mm_extract_epi16(tmpe_cw2,4); - yp2[j+8] = _mm_extract_epi16(tmpe_cw2,5); -#ifdef DEBUG_LOGMAP - fprintf(fdavx2,"init1: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]); - fprintf(fdavx2b,"init1: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]); -#endif - j=pi2_p[2]; - - s[j] = _mm_extract_epi16(tmpe,6); - yp1[j] = _mm_extract_epi16(tmpe,7); - tmpe = _mm_load_si128(&yp128[1]); - yp2[j] = _mm_extract_epi16(tmpe,0); - s[j+8] = _mm_extract_epi16(tmpe_cw2,6); - yp1[j+8] = _mm_extract_epi16(tmpe_cw2,7); - tmpe_cw2 = _mm_load_si128(&yp128_cw2[1]); - yp2[j+8] = _mm_extract_epi16(tmpe_cw2,0); -#ifdef DEBUG_LOGMAP - fprintf(fdavx2,"init2: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]); - fprintf(fdavx2b,"init2: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]); -#endif - j=pi2_p[3]; - - s[j] = _mm_extract_epi16(tmpe,1); - yp1[j] = _mm_extract_epi16(tmpe,2); - yp2[j] = _mm_extract_epi16(tmpe,3); - s[j+8] = _mm_extract_epi16(tmpe_cw2,1); - yp1[j+8] = _mm_extract_epi16(tmpe_cw2,2); - yp2[j+8] = _mm_extract_epi16(tmpe_cw2,3); -#ifdef DEBUG_LOGMAP - fprintf(fdavx2,"init3: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]); - fprintf(fdavx2b,"init3: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]); -#endif - j=pi2_p[4]; - - s[j] = _mm_extract_epi16(tmpe,4); - yp1[j] = _mm_extract_epi16(tmpe,5); - yp2[j] = _mm_extract_epi16(tmpe,6); - s[j+8] = _mm_extract_epi16(tmpe_cw2,4); - yp1[j+8] = _mm_extract_epi16(tmpe_cw2,5); - yp2[j+8] = _mm_extract_epi16(tmpe_cw2,6); -#ifdef DEBUG_LOGMAP - fprintf(fdavx2,"init4: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]); - fprintf(fdavx2b,"init4: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]); -#endif - j=pi2_p[5]; - - s[j] = _mm_extract_epi16(tmpe,7); - tmpe = _mm_load_si128(&yp128[2]); - yp1[j] = _mm_extract_epi16(tmpe,0); - yp2[j] = _mm_extract_epi16(tmpe,1); - s[j+8] = _mm_extract_epi16(tmpe_cw2,7); - tmpe_cw2 = _mm_load_si128(&yp128_cw2[2]); - yp1[j+8] = _mm_extract_epi16(tmpe_cw2,0); - yp2[j+8] = _mm_extract_epi16(tmpe_cw2,1); -#ifdef DEBUG_LOGMAP - fprintf(fdavx2,"init5: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]); - fprintf(fdavx2b,"init5: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]); -#endif - j=pi2_p[6]; - - s[j] = _mm_extract_epi16(tmpe,2); - yp1[j] = _mm_extract_epi16(tmpe,3); - yp2[j] = _mm_extract_epi16(tmpe,4); - s[j+8] = _mm_extract_epi16(tmpe_cw2,2); - yp1[j+8] = _mm_extract_epi16(tmpe_cw2,3); - yp2[j+8] = _mm_extract_epi16(tmpe_cw2,4); -#ifdef DEBUG_LOGMAP - fprintf(fdavx2,"init6: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]); - fprintf(fdavx2b,"init6: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]); -#endif - j=pi2_p[7]; - - s[j] = _mm_extract_epi16(tmpe,5); - yp1[j] = _mm_extract_epi16(tmpe,6); - yp2[j] = _mm_extract_epi16(tmpe,7); - s[j+8] = _mm_extract_epi16(tmpe_cw2,5); - yp1[j+8] = _mm_extract_epi16(tmpe_cw2,6); - yp2[j+8] = _mm_extract_epi16(tmpe_cw2,7); -#ifdef DEBUG_LOGMAP - fprintf(fdavx2,"init7: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]); - fprintf(fdavx2b,"init7: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]); -#endif - yp128+=3; - yp128_cw2+=3; - - } - yp=(llr_t*)yp128; - yp_cw2=(llr_t*)yp128_cw2; -#else - pi2_p = &pi2tab16avx2[iind][0]; for (i=0,j=0; i>8; diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c index 7daa86b8bb..a25ba46ff8 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c @@ -45,7 +45,6 @@ #include "PHY/defs_common.h" #include "PHY/CODING/coding_defs.h" #include "PHY/CODING/lte_interleaver_inline.h" -#include "extern_3GPPinterleaver.h" #else #include "defs.h" @@ -233,9 +232,6 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s #if defined(__x86_64__) || defined(__i386__) alpha128 = (__m128i *)alpha; //#ifdef __AVX2__ -#if 0 - alpha256 = (__m256i *)alpha; -#endif #elif defined(__arm__) alpha128 = (int16x8_t *)alpha; #endif @@ -317,10 +313,6 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s alpha_ptr = &alpha128[0]; //#ifdef __AVX2__ -#if 0 - alpha_ptr256 = &alpha256[0]; -#endif - #if defined(__x86_64__) || defined(__i386__) m11p = (__m128i*)m_11; m10p = (__m128i*)m_10; @@ -450,9 +442,6 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s alpha_ptr+=8; //#ifdef __AVX2__ -#if 0 - alpha_ptr256+=4; -#endif m11p++; m10p++; #if defined(__x86_64__) || defined(__i386__) @@ -1172,24 +1161,21 @@ void init_td16(void) } } -unsigned char phy_threegpplte_turbo_decoder16(short *y, - short *y2, - unsigned char *decoded_bytes, - unsigned char *decoded_bytes2, - unsigned short n, - unsigned short f1, - unsigned short f2, - unsigned char max_iterations, - unsigned char crc_type, - unsigned char F, - time_stats_t *init_stats, - time_stats_t *alpha_stats, - time_stats_t *beta_stats, - time_stats_t *gamma_stats, - time_stats_t *ext_stats, - time_stats_t *intl1_stats, - time_stats_t *intl2_stats) -{ +uint8_t phy_threegpplte_turbo_decoder16(int16_t *y, + int16_t *y2, + uint8_t *decoded_bytes, + uint8_t *decoded_bytes2, + uint16_t n, + uint8_t max_iterations, + uint8_t crc_type, + uint8_t F, + time_stats_t *init_stats, + time_stats_t *alpha_stats, + time_stats_t *beta_stats, + time_stats_t *gamma_stats, + time_stats_t *ext_stats, + time_stats_t *intl1_stats, + time_stats_t *intl2_stats) { /* y is a pointer to the input decoded_bytes is a pointer to the decoded output diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c index f22ec21ff0..476e79cacb 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c @@ -42,7 +42,6 @@ #include "PHY/defs_common.h" #include "PHY/CODING/coding_defs.h" #include "PHY/CODING/lte_interleaver_inline.h" -#include "extern_3GPPinterleaver.h" #else #include "defs.h" @@ -427,67 +426,6 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho llr_t beta2,beta3,beta4,beta5,beta6,beta7; - -#if 0 - int16_t m11,m10; - int16_t beta0_16,beta1_16,beta2_16,beta3_16,beta4_16,beta5_16,beta6_16,beta7_16,beta0_2,beta1_2,beta2_2,beta3_2,beta_m; - __m128i beta_16; - // termination for beta initialization - - m11=(int16_t)m_11[2+frame_length]; - m10=(int16_t)m_10[2+frame_length]; - - beta0 = -m11;//M0T_TERM; - beta1 = m11;//M1T_TERM; - m11=(int16_t)m_11[1+frame_length]; - m10=(int16_t)m_10[1+frame_length]; - - beta0_2 = beta0-m11;//+M0T_TERM; - beta1_2 = beta0+m11;//+M1T_TERM; - beta2_2 = beta1+m10;//M2T_TERM; - beta3_2 = beta1-m10;//+M3T_TERM; - m11=(int16_t)m_11[frame_length]; - m10=(int16_t)m_10[frame_length]; - - beta0_16 = beta0_2-m11;//+M0T_TERM; - beta1_16 = beta0_2+m11;//+M1T_TERM; - beta2_16 = beta1_2+m10;//+M2T_TERM; - beta3_16 = beta1_2-m10;//+M3T_TERM; - beta4_16 = beta2_2-m10;//+M4T_TERM; - beta5_16 = beta2_2+m10;//+M5T_TERM; - beta6_16 = beta3_2+m11;//+M6T_TERM; - beta7_16 = beta3_2-m11;//+M7T_TERM; - - beta_m = (beta0_16>beta1_16) ? beta0_16 : beta1_16; - beta_m = (beta_m>beta2_16) ? beta_m : beta2_16; - beta_m = (beta_m>beta3_16) ? beta_m : beta3_16; - beta_m = (beta_m>beta4_16) ? beta_m : beta4_16; - beta_m = (beta_m>beta5_16) ? beta_m : beta5_16; - beta_m = (beta_m>beta6_16) ? beta_m : beta6_16; - beta_m = (beta_m>beta7_16) ? beta_m : beta7_16; - - beta0_16=beta0_16-beta_m; - beta1_16=beta1_16-beta_m; - beta2_16=beta2_16-beta_m; - beta3_16=beta3_16-beta_m; - beta4_16=beta4_16-beta_m; - beta5_16=beta5_16-beta_m; - beta6_16=beta6_16-beta_m; - beta7_16=beta7_16-beta_m; - - beta_16 = _mm_set_epi16(beta7_16,beta6_16,beta5_16,beta4_16,beta3_16,beta2_16,beta1_16,beta0_16); - beta_16 = _mm_packs_epi16(beta_16,beta_16); - beta0 = _mm_extract_epi8(beta_16,0); - beta1 = _mm_extract_epi8(beta_16,1); - beta2 = _mm_extract_epi8(beta_16,2); - beta3 = _mm_extract_epi8(beta_16,3); - beta4 = _mm_extract_epi8(beta_16,4); - beta5 = _mm_extract_epi8(beta_16,5); - beta6 = _mm_extract_epi8(beta_16,6); - beta7 = _mm_extract_epi8(beta_16,7); - -#endif - if (frame_length > 6144) { LOG_E(PHY,"compute_beta: frame_length %d\n",frame_length); return; @@ -897,25 +835,21 @@ void init_td8(void) } } -unsigned char phy_threegpplte_turbo_decoder8(short *y, - short y2, - unsigned char *decoded_bytes, - unsigned char *decoded_bytes2, - unsigned short n, - unsigned short f1, - unsigned short f2, - unsigned char max_iterations, - unsigned char crc_type, - unsigned char F, - time_stats_t *init_stats, - time_stats_t *alpha_stats, - time_stats_t *beta_stats, - time_stats_t *gamma_stats, - time_stats_t *ext_stats, - time_stats_t *intl1_stats, - time_stats_t *intl2_stats) -{ - +uint8_t phy_threegpplte_turbo_decoder8(int16_t *y, + int16_t *y2, + uint8_t *decoded_bytes, + uint8_t *decoded_bytes2, + uint16_t n, + uint8_t max_iterations, + uint8_t crc_type, + uint8_t F, + time_stats_t *init_stats, + time_stats_t *alpha_stats, + time_stats_t *beta_stats, + time_stats_t *gamma_stats, + time_stats_t *ext_stats, + time_stats_t *intl1_stats, + time_stats_t *intl2_stats) { /* y is a pointer to the input decoded_bytes is a pointer to the decoded output n is the size in bits of the coded block, with the tail */ @@ -1085,209 +1019,6 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, yp2[k]=*yp++; } -#endif -#if 0 - - for (i=0; ilte_frame_parms); //openair1/PHY/impl_defs_lte.h lte_ue_common_vars = &(PHY_vars->lte_ue_common_vars); lte_ue_dlsch_vars = &(PHY_vars->lte_ue_dlsch_vars); @@ -249,7 +246,6 @@ int main(int argc, char *argv[]) randominit(0); set_taus_seed(0); - crcTableInit(); ccodelte_init(); ccodelte_init_inv(); diff --git a/openair1/PHY/CODING/TESTBENCH/viterbi_test.c b/openair1/PHY/CODING/TESTBENCH/viterbi_test.c index 385910f680..0d41482fef 100644 --- a/openair1/PHY/CODING/TESTBENCH/viterbi_test.c +++ b/openair1/PHY/CODING/TESTBENCH/viterbi_test.c @@ -218,8 +218,6 @@ int main(int argc, char *argv[]) randominit(); set_taus_seed(); - crcTableInit(); - printf("EbN0, sigma, BER, FER\n"); for (SNR=0; SNR<10; SNR++) { diff --git a/openair1/PHY/CODING/coding_defs.h b/openair1/PHY/CODING/coding_defs.h index d2975f3f93..0960395689 100644 --- a/openair1/PHY/CODING/coding_defs.h +++ b/openair1/PHY/CODING/coding_defs.h @@ -28,8 +28,7 @@ #define __CODING_DEFS__H__ #include - -#include "PHY/defs_common.h" +#include #define CRC24_A 0 #define CRC24_B 1 @@ -39,7 +38,24 @@ #define MAX_TURBO_ITERATIONS_MBSFN 8 #define MAX_TURBO_ITERATIONS max_turbo_iterations +typedef struct { + unsigned short nb_bits; + unsigned short f1; + unsigned short f2; +} interleaver_TS_36_212_t; + +extern const interleaver_TS_36_212_t f1f2[188]; + #define LTE_NULL 2 +typedef struct interleaver_codebook { + unsigned long nb_bits; + unsigned short f1; + unsigned short f2; + unsigned int beg_index; +} t_interleaver_codebook; +extern t_interleaver_codebook *f1f2mat; +extern short *il_tb; + /** @addtogroup _PHY_CODING_BLOCKS_ * @{ @@ -321,7 +337,7 @@ void ccodedab_init_inv(void); /*!\fn void crcTableInit(void) \brief This function initializes the different crc tables.*/ -void crcTableInit (void); +//void crcTableInit (void); @@ -331,7 +347,7 @@ based on 3GPP UMTS/LTE specifications. @param inPtr Pointer to input byte stream @param bitlen length of inputs in bits */ -uint32_t crc24a (uint8_t *inPtr, int32_t bitlen); +uint32_t crc24a (uint8_t * inptr, uint32_t bitlen); /*!\fn uint32_t crc24b(uint8_t *inPtr, int32_t bitlen) \brief This computes a 24-bit crc ('b' variant for transport-block segments) @@ -339,26 +355,26 @@ based on 3GPP UMTS/LTE specifications. @param inPtr Pointer to input byte stream @param bitlen length of inputs in bits */ -uint32_t crc24b (uint8_t *inPtr, int32_t bitlen); - +uint32_t crc24b (uint8_t * inptr, uint32_t bitlen); + /*!\fn uint32_t crc16(uint8_t *inPtr, int32_t bitlen) \brief This computes a 16-bit crc based on 3GPP UMTS specifications. @param inPtr Pointer to input byte stream @param bitlen length of inputs in bits*/ -uint32_t crc16 (uint8_t *inPtr, int32_t bitlen); +uint32_t crc16 (uint8_t * inptr, uint32_t bitlen); /*!\fn uint32_t crc12(uint8_t *inPtr, int32_t bitlen) \brief This computes a 12-bit crc based on 3GPP UMTS specifications. @param inPtr Pointer to input byte stream @param bitlen length of inputs in bits*/ -uint32_t crc12 (uint8_t *inPtr, int32_t bitlen); +uint32_t crc12 (uint8_t * inptr, uint32_t bitlen); /*!\fn uint32_t crc8(uint8_t *inPtr, int32_t bitlen) \brief This computes a 8-bit crc based on 3GPP UMTS specifications. @param inPtr Pointer to input byte stream @param bitlen length of inputs in bits*/ -uint32_t crc8 (uint8_t *inPtr, int32_t bitlen); - +uint32_t crc8 (uint8_t * inptr, uint32_t bitlen); + /*!\fn void phy_viterbi_dot11_sse2(int8_t *y, uint8_t *decoded_bytes, uint16_t n,int offset,int traceback) \brief This routine performs a SIMD optmized Viterbi decoder for the 802.11 64-state convolutional code. It can be run in segments with final trace back after last segment. @@ -422,4 +438,8 @@ uint32_t crcbit (uint8_t * , int16_t reverseBits(int32_t ,int32_t); void phy_viterbi_dot11(int8_t *,uint8_t *,uint16_t); +decoder_if_t phy_threegpplte_turbo_decoder; +decoder_if_t phy_threegpplte_turbo_decoder8; +decoder_if_t phy_threegpplte_turbo_decoder16; + #endif diff --git a/openair1/PHY/CODING/coding_extern.h b/openair1/PHY/CODING/coding_extern.h index 0d3e2ccb02..12aeb3af05 100644 --- a/openair1/PHY/CODING/coding_extern.h +++ b/openair1/PHY/CODING/coding_extern.h @@ -19,10 +19,9 @@ * contact@openairinterface.org */ -extern unsigned short f1f2mat_old[2*188]; extern double cpuf; -extern decoder_if_t decoder16; -extern decoder_if_t decoder8; -extern encoder_if_t encoder; +extern decoder_if_t *decoder16; +extern decoder_if_t *decoder8; +extern encoder_if_t *encoder; extern int load_codinglib(void); -extern int free_codinglib(void); +extern void free_codinglib(void); diff --git a/openair1/PHY/CODING/coding_load.c b/openair1/PHY/CODING/coding_load.c index 76ab04f220..a895d9648e 100644 --- a/openair1/PHY/CODING/coding_load.c +++ b/openair1/PHY/CODING/coding_load.c @@ -35,6 +35,7 @@ #include "PHY/defs_common.h" #include "PHY/phy_extern.h" +#include "PHY/CODING/coding_extern.h" #include "common/utils/load_module_shlib.h" #include "common/utils/telnetsrv/telnetsrv.h" @@ -55,28 +56,26 @@ loader_shlibfunc_t shlib_fdesc[DECODE_NUM_FPTR]; /* encoding decoding functions pointers, filled here and used when encoding/decoding */ /*defined as extern in PHY?CODING/extern.h */ -decoder_if_t decoder16; -decoder_if_t decoder8; -encoder_if_t encoder; +decoder_if_t *decoder16; +decoder_if_t *decoder8; +encoder_if_t *encoder; extern int _may_i_use_cpu_feature(unsigned __int64); -uint8_t nodecod(short *y, - short *y2, - unsigned char *decoded_bytes, - unsigned char *decoded_bytes2, - unsigned short n, - unsigned short f1, - unsigned short f2, - unsigned char max_iterations, - unsigned char crc_type, - unsigned char F, - time_stats_t *init_stats, - time_stats_t *alpha_stats, - time_stats_t *beta_stats, - time_stats_t *gamma_stats, - time_stats_t *ext_stats, - time_stats_t *intl1_stats, - time_stats_t *intl2_stats) +uint8_t nodecod(int16_t *y, + int16_t *y2, + uint8_t *decoded_bytes, + uint8_t *decoded_bytes2, + uint16_t n, + uint8_t max_iterations, + uint8_t crc_type, + uint8_t F, + time_stats_t *init_stats, + time_stats_t *alpha_stats, + time_stats_t *beta_stats, + time_stats_t *gamma_stats, + time_stats_t *ext_stats, + time_stats_t *intl1_stats, + time_stats_t *intl2_stats) { return max_iterations+1; }; @@ -86,24 +85,24 @@ void decoding_setmode (int mode) { case MODE_DECODE_NONE: decoder8=nodecod; decoder16=nodecod; - encoder=(encoder_if_t)shlib_fdesc[ENCODE_C_FPTRIDX].fptr; + encoder=(encoder_if_t*)shlib_fdesc[ENCODE_C_FPTRIDX].fptr; break; case MODE_DECODE_C: - decoder16=(decoder_if_t)shlib_fdesc[DECODE_TD_C_FPTRIDX].fptr; - decoder8=(decoder_if_t)shlib_fdesc[DECODE_TD_C_FPTRIDX].fptr; - encoder=(encoder_if_t)shlib_fdesc[ENCODE_C_FPTRIDX].fptr; + decoder16=(decoder_if_t*)shlib_fdesc[DECODE_TD_C_FPTRIDX].fptr; + decoder8=(decoder_if_t*)shlib_fdesc[DECODE_TD_C_FPTRIDX].fptr; + encoder=(encoder_if_t*)shlib_fdesc[ENCODE_C_FPTRIDX].fptr; break; case MODE_DECODE_AVX2: - decoder16=(decoder_if_t)shlib_fdesc[DECODE_TD16_AVX2_FPTRIDX].fptr; - decoder8=(decoder_if_t)shlib_fdesc[DECODE_TD8_SSE_FPTRIDX].fptr; - encoder=(encoder_if_t)shlib_fdesc[ENCODE_SSE_FPTRIDX].fptr; + decoder16=(decoder_if_t*)shlib_fdesc[DECODE_TD16_AVX2_FPTRIDX].fptr; + decoder8=(decoder_if_t*)shlib_fdesc[DECODE_TD8_SSE_FPTRIDX].fptr; + encoder=(encoder_if_t*)shlib_fdesc[ENCODE_SSE_FPTRIDX].fptr; break; default: mode=MODE_DECODE_SSE; case MODE_DECODE_SSE: - decoder8=(decoder_if_t)shlib_fdesc[DECODE_TD8_SSE_FPTRIDX].fptr; - decoder16=(decoder_if_t)shlib_fdesc[DECODE_TD16_SSE_FPTRIDX].fptr; - encoder=(encoder_if_t)shlib_fdesc[ENCODE_SSE_FPTRIDX].fptr; + decoder8=(decoder_if_t*)shlib_fdesc[DECODE_TD8_SSE_FPTRIDX].fptr; + decoder16=(decoder_if_t*)shlib_fdesc[DECODE_TD16_SSE_FPTRIDX].fptr; + encoder=(encoder_if_t*)shlib_fdesc[ENCODE_SSE_FPTRIDX].fptr; break; } curmode=mode; diff --git a/openair1/PHY/CODING/coding_vars.h b/openair1/PHY/CODING/coding_vars.h deleted file mode 100644 index 944ea08d0c..0000000000 --- a/openair1/PHY/CODING/coding_vars.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include "lte_interleaver.h" -#include "lte_interleaver2.h" diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c index 0e1f0e065f..f2f7e4e5c7 100644 --- a/openair1/PHY/CODING/crc_byte.c +++ b/openair1/PHY/CODING/crc_byte.c @@ -30,185 +30,196 @@ Modified in June, 2001, to include the length non multiple of 8 */ +#include "PHY/types.h" -#include "coding_defs.h" +// For initialization && verification purposes, bit by bit implementation with any polynomial +// The first bit is in the MSB of each byte + +// Reference 38.212 V15.1.1 Section 5.1 (36-212 v8.6.0 , pp 8-9) +// The highest degree is set by default +/** 1000 0110 0100 1100 1111 1011 D^24 + D^23 + D^18 + D^17 + D^14 + D^11 + D^10 + D^7 + D^6 + D^5 + D^4 + D^3 + D + 1 */ +static const uint32_t poly24a = 0x864cfb00; +/** 1000 0000 0000 0000 0110 0011 D^24 + D^23 + D^6 + D^5 + D + 1 */ +static const uint32_t poly24b = 0x80006300; +/** 0001 0000 0010 0001 D^16 + D^12 + D^5 + 1 */ +static const uint32_t poly16 = 0x10210000; +/** 1000 0000 1111 D^12 + D^11 + D^3 + D^2 + D + 1 */ +static const uint32_t poly12 = 0x80F00000; +/** 1001 1011 D^8 + D^7 + D^4 + D^3 + D + 1 */ +static const uint32_t poly8 = 0x9B000000; + +// The following arrays are generated with the function 'crcTableInit' +/** Encoding table for CRC 24A */ +static const uint32_t crc24aTable[256] = {0x0, 0x864cfb00, 0x8ad50d00, 0xc99f600, 0x93e6e100, 0x15aa1a00, 0x1933ec00, 0x9f7f1700, 0xa1813900, 0x27cdc200, 0x2b543400, 0xad18cf00, 0x3267d800, 0xb42b2300, 0xb8b2d500, 0x3efe2e00, 0xc54e8900, 0x43027200, 0x4f9b8400, 0xc9d77f00, 0x56a86800, 0xd0e49300, 0xdc7d6500, 0x5a319e00, 0x64cfb000, 0xe2834b00, 0xee1abd00, 0x68564600, 0xf7295100, 0x7165aa00, 0x7dfc5c00, 0xfbb0a700, 0xcd1e900, 0x8a9d1200, 0x8604e400, 0x481f00, 0x9f370800, 0x197bf300, 0x15e20500, 0x93aefe00, 0xad50d000, 0x2b1c2b00, 0x2785dd00, 0xa1c92600, 0x3eb63100, 0xb8faca00, 0xb4633c00, 0x322fc700, 0xc99f6000, 0x4fd39b00, 0x434a6d00, 0xc5069600, 0x5a798100, 0xdc357a00, 0xd0ac8c00, 0x56e07700, 0x681e5900, 0xee52a200, 0xe2cb5400, 0x6487af00, 0xfbf8b800, 0x7db44300, 0x712db500, 0xf7614e00, 0x19a3d200, 0x9fef2900, 0x9376df00, 0x153a2400, 0x8a453300, 0xc09c800, 0x903e00, 0x86dcc500, 0xb822eb00, 0x3e6e1000, 0x32f7e600, 0xb4bb1d00, 0x2bc40a00, 0xad88f100, 0xa1110700, 0x275dfc00, 0xdced5b00, 0x5aa1a000, 0x56385600, 0xd074ad00, 0x4f0bba00, 0xc9474100, 0xc5deb700, 0x43924c00, 0x7d6c6200, 0xfb209900, 0xf7b96f00, 0x71f59400, 0xee8a8300, 0x68c67800, 0x645f8e00, 0xe2137500, 0x15723b00, 0x933ec000, 0x9fa73600, 0x19ebcd00, 0x8694da00, 0xd82100, 0xc41d700, 0x8a0d2c00, 0xb4f30200, 0x32bff900, 0x3e260f00, 0xb86af400, 0x2715e300, 0xa1591800, 0xadc0ee00, 0x2b8c1500, 0xd03cb200, 0x56704900, 0x5ae9bf00, 0xdca54400, 0x43da5300, 0xc596a800, 0xc90f5e00, 0x4f43a500, 0x71bd8b00, 0xf7f17000, 0xfb688600, 0x7d247d00, 0xe25b6a00, 0x64179100, 0x688e6700, 0xeec29c00, 0x3347a400, 0xb50b5f00, 0xb992a900, 0x3fde5200, 0xa0a14500, 0x26edbe00, 0x2a744800, 0xac38b300, 0x92c69d00, 0x148a6600, 0x18139000, 0x9e5f6b00, 0x1207c00, 0x876c8700, 0x8bf57100, 0xdb98a00, 0xf6092d00, 0x7045d600, 0x7cdc2000, 0xfa90db00, 0x65efcc00, 0xe3a33700, 0xef3ac100, 0x69763a00, 0x57881400, 0xd1c4ef00, 0xdd5d1900, 0x5b11e200, 0xc46ef500, 0x42220e00, 0x4ebbf800, 0xc8f70300, 0x3f964d00, 0xb9dab600, 0xb5434000, 0x330fbb00, 0xac70ac00, 0x2a3c5700, 0x26a5a100, 0xa0e95a00, 0x9e177400, 0x185b8f00, 0x14c27900, 0x928e8200, 0xdf19500, 0x8bbd6e00, 0x87249800, 0x1686300, 0xfad8c400, 0x7c943f00, 0x700dc900, 0xf6413200, 0x693e2500, 0xef72de00, 0xe3eb2800, 0x65a7d300, 0x5b59fd00, 0xdd150600, 0xd18cf000, 0x57c00b00, 0xc8bf1c00, 0x4ef3e700, 0x426a1100, 0xc426ea00, 0x2ae47600, 0xaca88d00, 0xa0317b00, 0x267d8000, 0xb9029700, 0x3f4e6c00, 0x33d79a00, 0xb59b6100, 0x8b654f00, 0xd29b400, 0x1b04200, 0x87fcb900, 0x1883ae00, 0x9ecf5500, 0x9256a300, 0x141a5800, 0xefaaff00, 0x69e60400, 0x657ff200, 0xe3330900, 0x7c4c1e00, 0xfa00e500, 0xf6991300, 0x70d5e800, 0x4e2bc600, 0xc8673d00, 0xc4fecb00, 0x42b23000, 0xddcd2700, 0x5b81dc00, 0x57182a00, 0xd154d100, 0x26359f00, 0xa0796400, 0xace09200, 0x2aac6900, 0xb5d37e00, 0x339f8500, 0x3f067300, 0xb94a8800, 0x87b4a600, 0x1f85d00, 0xd61ab00, 0x8b2d5000, 0x14524700, 0x921ebc00, 0x9e874a00, 0x18cbb100, 0xe37b1600, 0x6537ed00, 0x69ae1b00, 0xefe2e000, 0x709df700, 0xf6d10c00, 0xfa48fa00, 0x7c040100, 0x42fa2f00, 0xc4b6d400, 0xc82f2200, 0x4e63d900, 0xd11cce00, 0x57503500, 0x5bc9c300, 0xdd853800}; + +/** Encoding table for CRC 24B */ +static const uint32_t crc24bTable[256] = {0x0, 0x80006300, 0x8000a500, 0xc600, 0x80012900, 0x14a00, 0x18c00, 0x8001ef00, 0x80023100, 0x25200, 0x29400, 0x8002f700, 0x31800, 0x80037b00, 0x8003bd00, 0x3de00, 0x80040100, 0x46200, 0x4a400, 0x8004c700, 0x52800, 0x80054b00, 0x80058d00, 0x5ee00, 0x63000, 0x80065300, 0x80069500, 0x6f600, 0x80071900, 0x77a00, 0x7bc00, 0x8007df00, 0x80086100, 0x80200, 0x8c400, 0x8008a700, 0x94800, 0x80092b00, 0x8009ed00, 0x98e00, 0xa5000, 0x800a3300, 0x800af500, 0xa9600, 0x800b7900, 0xb1a00, 0xbdc00, 0x800bbf00, 0xc6000, 0x800c0300, 0x800cc500, 0xca600, 0x800d4900, 0xd2a00, 0xdec00, 0x800d8f00, 0x800e5100, 0xe3200, 0xef400, 0x800e9700, 0xf7800, 0x800f1b00, 0x800fdd00, 0xfbe00, 0x8010a100, 0x10c200, 0x100400, 0x80106700, 0x118800, 0x8011eb00, 0x80112d00, 0x114e00, 0x129000, 0x8012f300, 0x80123500, 0x125600, 0x8013b900, 0x13da00, 0x131c00, 0x80137f00, 0x14a000, 0x8014c300, 0x80140500, 0x146600, 0x80158900, 0x15ea00, 0x152c00, 0x80154f00, 0x80169100, 0x16f200, 0x163400, 0x80165700, 0x17b800, 0x8017db00, 0x80171d00, 0x177e00, 0x18c000, 0x8018a300, 0x80186500, 0x180600, 0x8019e900, 0x198a00, 0x194c00, 0x80192f00, 0x801af100, 0x1a9200, 0x1a5400, 0x801a3700, 0x1bd800, 0x801bbb00, 0x801b7d00, 0x1b1e00, 0x801cc100, 0x1ca200, 0x1c6400, 0x801c0700, 0x1de800, 0x801d8b00, 0x801d4d00, 0x1d2e00, 0x1ef000, 0x801e9300, 0x801e5500, 0x1e3600, 0x801fd900, 0x1fba00, 0x1f7c00, 0x801f1f00, 0x80212100, 0x214200, 0x218400, 0x8021e700, 0x200800, 0x80206b00, 0x8020ad00, 0x20ce00, 0x231000, 0x80237300, 0x8023b500, 0x23d600, 0x80223900, 0x225a00, 0x229c00, 0x8022ff00, 0x252000, 0x80254300, 0x80258500, 0x25e600, 0x80240900, 0x246a00, 0x24ac00, 0x8024cf00, 0x80271100, 0x277200, 0x27b400, 0x8027d700, 0x263800, 0x80265b00, 0x80269d00, 0x26fe00, 0x294000, 0x80292300, 0x8029e500, 0x298600, 0x80286900, 0x280a00, 0x28cc00, 0x8028af00, 0x802b7100, 0x2b1200, 0x2bd400, 0x802bb700, 0x2a5800, 0x802a3b00, 0x802afd00, 0x2a9e00, 0x802d4100, 0x2d2200, 0x2de400, 0x802d8700, 0x2c6800, 0x802c0b00, 0x802ccd00, 0x2cae00, 0x2f7000, 0x802f1300, 0x802fd500, 0x2fb600, 0x802e5900, 0x2e3a00, 0x2efc00, 0x802e9f00, 0x318000, 0x8031e300, 0x80312500, 0x314600, 0x8030a900, 0x30ca00, 0x300c00, 0x80306f00, 0x8033b100, 0x33d200, 0x331400, 0x80337700, 0x329800, 0x8032fb00, 0x80323d00, 0x325e00, 0x80358100, 0x35e200, 0x352400, 0x80354700, 0x34a800, 0x8034cb00, 0x80340d00, 0x346e00, 0x37b000, 0x8037d300, 0x80371500, 0x377600, 0x80369900, 0x36fa00, 0x363c00, 0x80365f00, 0x8039e100, 0x398200, 0x394400, 0x80392700, 0x38c800, 0x8038ab00, 0x80386d00, 0x380e00, 0x3bd000, 0x803bb300, 0x803b7500, 0x3b1600, 0x803af900, 0x3a9a00, 0x3a5c00, 0x803a3f00, 0x3de000, 0x803d8300, 0x803d4500, 0x3d2600, 0x803cc900, 0x3caa00, 0x3c6c00, 0x803c0f00, 0x803fd100, 0x3fb200, 0x3f7400, 0x803f1700, 0x3ef800, 0x803e9b00, 0x803e5d00, 0x3e3e00}; + +/** Encoding table for CRC 16 */ +static const uint16_t crc16Table[256] = {0x0, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0xa50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0xc60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0xe70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0xa1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x2b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x8e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0xaf1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0xcc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0xed1, 0x1ef0}; + +/** Encoding table for CRC 12 */ +static const uint16_t crc12Table[256] = {0x0, 0x80f0, 0x8110, 0x1e0, 0x82d0, 0x220, 0x3c0, 0x8330, 0x8550, 0x5a0, 0x440, 0x84b0, 0x780, 0x8770, 0x8690, 0x660, 0x8a50, 0xaa0, 0xb40, 0x8bb0, 0x880, 0x8870, 0x8990, 0x960, 0xf00, 0x8ff0, 0x8e10, 0xee0, 0x8dd0, 0xd20, 0xcc0, 0x8c30, 0x9450, 0x14a0, 0x1540, 0x95b0, 0x1680, 0x9670, 0x9790, 0x1760, 0x1100, 0x91f0, 0x9010, 0x10e0, 0x93d0, 0x1320, 0x12c0, 0x9230, 0x1e00, 0x9ef0, 0x9f10, 0x1fe0, 0x9cd0, 0x1c20, 0x1dc0, 0x9d30, 0x9b50, 0x1ba0, 0x1a40, 0x9ab0, 0x1980, 0x9970, 0x9890, 0x1860, 0xa850, 0x28a0, 0x2940, 0xa9b0, 0x2a80, 0xaa70, 0xab90, 0x2b60, 0x2d00, 0xadf0, 0xac10, 0x2ce0, 0xafd0, 0x2f20, 0x2ec0, 0xae30, 0x2200, 0xa2f0, 0xa310, 0x23e0, 0xa0d0, 0x2020, 0x21c0, 0xa130, 0xa750, 0x27a0, 0x2640, 0xa6b0, 0x2580, 0xa570, 0xa490, 0x2460, 0x3c00, 0xbcf0, 0xbd10, 0x3de0, 0xbed0, 0x3e20, 0x3fc0, 0xbf30, 0xb950, 0x39a0, 0x3840, 0xb8b0, 0x3b80, 0xbb70, 0xba90, 0x3a60, 0xb650, 0x36a0, 0x3740, 0xb7b0, 0x3480, 0xb470, 0xb590, 0x3560, 0x3300, 0xb3f0, 0xb210, 0x32e0, 0xb1d0, 0x3120, 0x30c0, 0xb030, 0xd050, 0x50a0, 0x5140, 0xd1b0, 0x5280, 0xd270, 0xd390, 0x5360, 0x5500, 0xd5f0, 0xd410, 0x54e0, 0xd7d0, 0x5720, 0x56c0, 0xd630, 0x5a00, 0xdaf0, 0xdb10, 0x5be0, 0xd8d0, 0x5820, 0x59c0, 0xd930, 0xdf50, 0x5fa0, 0x5e40, 0xdeb0, 0x5d80, 0xdd70, 0xdc90, 0x5c60, 0x4400, 0xc4f0, 0xc510, 0x45e0, 0xc6d0, 0x4620, 0x47c0, 0xc730, 0xc150, 0x41a0, 0x4040, 0xc0b0, 0x4380, 0xc370, 0xc290, 0x4260, 0xce50, 0x4ea0, 0x4f40, 0xcfb0, 0x4c80, 0xcc70, 0xcd90, 0x4d60, 0x4b00, 0xcbf0, 0xca10, 0x4ae0, 0xc9d0, 0x4920, 0x48c0, 0xc830, 0x7800, 0xf8f0, 0xf910, 0x79e0, 0xfad0, 0x7a20, 0x7bc0, 0xfb30, 0xfd50, 0x7da0, 0x7c40, 0xfcb0, 0x7f80, 0xff70, 0xfe90, 0x7e60, 0xf250, 0x72a0, 0x7340, 0xf3b0, 0x7080, 0xf070, 0xf190, 0x7160, 0x7700, 0xf7f0, 0xf610, 0x76e0, 0xf5d0, 0x7520, 0x74c0, 0xf430, 0xec50, 0x6ca0, 0x6d40, 0xedb0, 0x6e80, 0xee70, 0xef90, 0x6f60, 0x6900, 0xe9f0, 0xe810, 0x68e0, 0xebd0, 0x6b20, 0x6ac0, 0xea30, 0x6600, 0xe6f0, 0xe710, 0x67e0, 0xe4d0, 0x6420, 0x65c0, 0xe530, 0xe350, 0x63a0, 0x6240, 0xe2b0, 0x6180, 0xe170, 0xe090, 0x6060}; + +/** Encoding table for CRC 8 */ +static const uint8_t crc8Table[256] = {0x0, 0x9b, 0xad, 0x36, 0xc1, 0x5a, 0x6c, 0xf7, 0x19, 0x82, 0xb4, 0x2f, 0xd8, 0x43, 0x75, 0xee, 0x32, 0xa9, 0x9f, 0x4, 0xf3, 0x68, 0x5e, 0xc5, 0x2b, 0xb0, 0x86, 0x1d, 0xea, 0x71, 0x47, 0xdc, 0x64, 0xff, 0xc9, 0x52, 0xa5, 0x3e, 0x8, 0x93, 0x7d, 0xe6, 0xd0, 0x4b, 0xbc, 0x27, 0x11, 0x8a, 0x56, 0xcd, 0xfb, 0x60, 0x97, 0xc, 0x3a, 0xa1, 0x4f, 0xd4, 0xe2, 0x79, 0x8e, 0x15, 0x23, 0xb8, 0xc8, 0x53, 0x65, 0xfe, 0x9, 0x92, 0xa4, 0x3f, 0xd1, 0x4a, 0x7c, 0xe7, 0x10, 0x8b, 0xbd, 0x26, 0xfa, 0x61, 0x57, 0xcc, 0x3b, 0xa0, 0x96, 0xd, 0xe3, 0x78, 0x4e, 0xd5, 0x22, 0xb9, 0x8f, 0x14, 0xac, 0x37, 0x1, 0x9a, 0x6d, 0xf6, 0xc0, 0x5b, 0xb5, 0x2e, 0x18, 0x83, 0x74, 0xef, 0xd9, 0x42, 0x9e, 0x5, 0x33, 0xa8, 0x5f, 0xc4, 0xf2, 0x69, 0x87, 0x1c, 0x2a, 0xb1, 0x46, 0xdd, 0xeb, 0x70, 0xb, 0x90, 0xa6, 0x3d, 0xca, 0x51, 0x67, 0xfc, 0x12, 0x89, 0xbf, 0x24, 0xd3, 0x48, 0x7e, 0xe5, 0x39, 0xa2, 0x94, 0xf, 0xf8, 0x63, 0x55, 0xce, 0x20, 0xbb, 0x8d, 0x16, 0xe1, 0x7a, 0x4c, 0xd7, 0x6f, 0xf4, 0xc2, 0x59, 0xae, 0x35, 0x3, 0x98, 0x76, 0xed, 0xdb, 0x40, 0xb7, 0x2c, 0x1a, 0x81, 0x5d, 0xc6, 0xf0, 0x6b, 0x9c, 0x7, 0x31, 0xaa, 0x44, 0xdf, 0xe9, 0x72, 0x85, 0x1e, 0x28, 0xb3, 0xc3, 0x58, 0x6e, 0xf5, 0x2, 0x99, 0xaf, 0x34, 0xda, 0x41, 0x77, 0xec, 0x1b, 0x80, 0xb6, 0x2d, 0xf1, 0x6a, 0x5c, 0xc7, 0x30, 0xab, 0x9d, 0x6, 0xe8, 0x73, 0x45, 0xde, 0x29, 0xb2, 0x84, 0x1f, 0xa7, 0x3c, 0xa, 0x91, 0x66, 0xfd, 0xcb, 0x50, 0xbe, 0x25, 0x13, 0x88, 0x7f, 0xe4, 0xd2, 0x49, 0x95, 0xe, 0x38, 0xa3, 0x54, 0xcf, 0xf9, 0x62, 0x8c, 0x17, 0x21, 0xba, 0x4d, 0xd6, 0xe0, 0x7b}; -/*ref 36-212 v8.6.0 , pp 8-9 */ -/* the highest degree is set by default */ -unsigned int poly24a = 0x864cfb00; //1000 0110 0100 1100 1111 1011 D^24 + D^23 + D^18 + D^17 + D^14 + D^11 + D^10 + D^7 + D^6 + D^5 + D^4 + D^3 + D + 1 -unsigned int poly24b = 0x80006300; // 1000 0000 0000 0000 0110 0011 D^24 + D^23 + D^6 + D^5 + D + 1 -unsigned int poly16 = 0x10210000; // 0001 0000 0010 0001 D^16 + D^12 + D^5 + 1 -unsigned int poly12 = 0x80F00000; // 1000 0000 1111 D^12 + D^11 + D^3 + D^2 + D + 1 -unsigned int poly8 = 0x9B000000; // 1001 1011 D^8 + D^7 + D^4 + D^3 + D + 1 -/********************************************************* - -For initialization && verification purposes, - bit by bit implementation with any polynomial - -The first bit is in the MSB of each byte - -*********************************************************/ -unsigned int -crcbit (unsigned char * inputptr, int octetlen, unsigned int poly) +uint32_t crcbit (uint8_t * inputptr, int32_t octetlen, uint32_t poly) { - unsigned int i, crc = 0, c; + uint32_t i; + uint32_t crc = 0; + uint32_t c; - while (octetlen-- > 0) { - c = (*inputptr++) << 24; + while (octetlen-- > 0) + { + c = (*inputptr++) << 24; - for (i = 8; i != 0; i--) { - if ((1 << 31) & (c ^ crc)) - crc = (crc << 1) ^ poly; - else - crc <<= 1; + for (i = 8; i != 0; i--) + { + if ( (1 << 31) & (c ^ crc) ) + { + crc = (crc << 1) ^ poly; + } + else + { + crc <<= 1; + } - c <<= 1; + c <<= 1; + } } - } - return crc; + return crc; } -/********************************************************* - -crc table initialization - -*********************************************************/ -static unsigned int crc24aTable[256]; -static unsigned int crc24bTable[256]; -static unsigned short crc16Table[256]; -static unsigned short crc12Table[256]; -static unsigned char crc8Table[256]; +// CRC table initialization +/* void crcTableInit (void) { - unsigned char c = 0; + uint8_t c = 0; - do { - crc24aTable[c] = crcbit (&c, 1, poly24a); - crc24bTable[c] = crcbit (&c, 1, poly24b); - crc16Table[c] = (unsigned short) (crcbit (&c, 1, poly16) >> 16); - crc12Table[c] = (unsigned short) (crcbit (&c, 1, poly12) >> 16); - crc8Table[c] = (unsigned char) (crcbit (&c, 1, poly8) >> 24); - } while (++c); + do + { + crc24aTable[c] = crcbit (&c, 1, poly24a); + crc24bTable[c] = crcbit (&c, 1, poly24b); + crc16Table [c] = (uint16_t) (crcbit (&c, 1, poly16) >> 16); + crc12Table [c] = (uint16_t) (crcbit (&c, 1, poly12) >> 16); + crc8Table [c] = (uint8_t) (crcbit (&c, 1, poly8 ) >> 24); + } + while (++c); } -/********************************************************* +*/ -Byte by byte implementations, -assuming initial byte is 0 padded (in MSB) if necessary - -*********************************************************/ -unsigned int -crc24a (unsigned char * inptr, int bitlen) +// Byte by byte implementations, assuming initial byte is 0 padded (in MSB) if necessary +uint32_t crc24a (uint8_t * inptr, uint32_t bitlen) { + int32_t octetlen = bitlen / 8; + int32_t resbit = (bitlen % 8); + uint32_t crc = 0; - int octetlen, resbit; - unsigned int crc = 0; - octetlen = bitlen / 8; /* Change in octets */ - resbit = (bitlen % 8); + while (octetlen-- > 0) + { + crc = (crc << 8) ^ crc24aTable[(*inptr++) ^ (crc >> 24)]; + } - while (octetlen-- > 0) { - // printf("crc24a: in %x => crc %x\n",crc,*inptr); - crc = (crc << 8) ^ crc24aTable[(*inptr++) ^ (crc >> 24)]; - } + if (resbit > 0) + { + crc = (crc << resbit) ^ crc24aTable[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]; + } - if (resbit > 0) - crc = (crc << resbit) ^ crc24aTable[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]; - - return crc; + return crc; } -unsigned int crc24b (unsigned char * inptr, int bitlen) +uint32_t crc24b (uint8_t * inptr, uint32_t bitlen) { + int32_t octetlen = bitlen / 8; + int32_t resbit = (bitlen % 8); + uint32_t crc = 0; - int octetlen, resbit; - unsigned int crc = 0; - octetlen = bitlen / 8; /* Change in octets */ - resbit = (bitlen % 8); + while (octetlen-- > 0) + { + crc = (crc << 8) ^ crc24bTable[(*inptr++) ^ (crc >> 24)]; + } - while (octetlen-- > 0) { - // printf("crc24b: in %x => crc %x (%x)\n",crc,*inptr,crc24bTable[(*inptr) ^ (crc >> 24)]); - crc = (crc << 8) ^ crc24bTable[(*inptr++) ^ (crc >> 24)]; - } + if (resbit > 0) + { + crc = (crc << resbit) ^ crc24bTable[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]; + } - if (resbit > 0) - crc = (crc << resbit) ^ crc24bTable[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]; - - return crc; + return crc; } -unsigned int -crc16 (unsigned char * inptr, int bitlen) +uint32_t crc16 (uint8_t * inptr, uint32_t bitlen) { - int octetlen, resbit; - unsigned int crc = 0; - octetlen = bitlen / 8; /* Change in octets */ - resbit = (bitlen % 8); + int32_t octetlen = bitlen / 8; + int32_t resbit = (bitlen % 8); + uint32_t crc = 0; - while (octetlen-- > 0) { + while (octetlen-- > 0) + { + crc = (crc << 8) ^ (crc16Table[(*inptr++) ^ (crc >> 24)] << 16); + } - crc = (crc << 8) ^ (crc16Table[(*inptr++) ^ (crc >> 24)] << 16); - } + if (resbit > 0) + { + crc = (crc << resbit) ^ (crc16Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 16); + } - if (resbit > 0) - crc = (crc << resbit) ^ (crc16Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 16); - - return crc; + return crc; } -unsigned int -crc12 (unsigned char * inptr, int bitlen) +uint32_t crc12 (uint8_t * inptr, uint32_t bitlen) { - int octetlen, resbit; - unsigned int crc = 0; - octetlen = bitlen / 8; /* Change in octets */ - resbit = (bitlen % 8); + int32_t octetlen = bitlen / 8; + int32_t resbit = (bitlen % 8); + uint32_t crc = 0; - while (octetlen-- > 0) { - crc = (crc << 8) ^ (crc12Table[(*inptr++) ^ (crc >> 24)] << 16); - } + while (octetlen-- > 0) + { + crc = (crc << 8) ^ (crc12Table[(*inptr++) ^ (crc >> 24)] << 16); + } - if (resbit > 0) - crc = (crc << resbit) ^ (crc12Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 16); + if (resbit > 0) + { + crc = (crc << resbit) ^ (crc12Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 16); + } - return crc; + return crc; } -unsigned int -crc8 (unsigned char * inptr, int bitlen) +uint32_t crc8 (uint8_t * inptr, uint32_t bitlen) { - int octetlen, resbit; - unsigned int crc = 0; - octetlen = bitlen / 8; /* Change in octets */ - resbit = (bitlen % 8); + int32_t octetlen = bitlen / 8; + int32_t resbit = (bitlen % 8); + uint32_t crc = 0; - while (octetlen-- > 0) { - crc = crc8Table[(*inptr++) ^ (crc >> 24)] << 24; - } + while (octetlen-- > 0) + { + crc = crc8Table[(*inptr++) ^ (crc >> 24)] << 24; + } - if (resbit > 0) - crc = (crc << resbit) ^ (crc8Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 24); + if (resbit > 0) + { + crc = (crc << resbit) ^ (crc8Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 24); + } - return crc; + return crc; } #ifdef DEBUG_CRC -/*******************************************************************/ -/** - Test code -********************************************************************/ +// Test code #include main() { - unsigned char test[] = "Thebigredfox"; - crcTableInit(); - printf("%x\n", crcbit(test, sizeof(test) - 1, poly24)); - printf("%x\n", crc24(test, (sizeof(test) - 1)*8)); - printf("%x\n", crcbit(test, sizeof(test) - 1, poly8)); - printf("%x\n", crc8(test, (sizeof(test) - 1)*8)); + unsigned char test[] = "Thebigredfox"; + crcTableInit(); + printf("%x\n", crcbit(test, sizeof(test) - 1, poly24)); + printf("%x\n", crc24 (test, (sizeof(test) - 1)*8)); + printf("%x\n", crcbit(test, sizeof(test) - 1, poly8)); + printf("%x\n", crc8 (test, (sizeof(test) - 1)*8)); } #endif - diff --git a/openair1/PHY/CODING/extern_3GPPinterleaver.h b/openair1/PHY/CODING/extern_3GPPinterleaver.h deleted file mode 100644 index 007c1fecc3..0000000000 --- a/openair1/PHY/CODING/extern_3GPPinterleaver.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -typedef struct interleaver_codebook { - unsigned long nb_bits; - unsigned short f1; - unsigned short f2; - unsigned int beg_index; -} t_interleaver_codebook; -#ifndef INCL_INTERLEAVE -extern t_interleaver_codebook f1f2mat[]; -extern short il_tb[]; -extern short reverse_il_tl[]; -#endif diff --git a/openair1/PHY/CODING/lte_interleaver.h b/openair1/PHY/CODING/lte_interleaver.h deleted file mode 100644 index fbf26a8e1f..0000000000 --- a/openair1/PHY/CODING/lte_interleaver.h +++ /dev/null @@ -1,710716 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#ifndef __LTE_INTERLEAVER_H -#define __LTE_INTERLEAVER_H -#define INCL_INTERLEAVE -#include "extern_3GPPinterleaver.h" -t_interleaver_codebook f1f2mat[188] = { - { 40, 3, 10, 0 }, - { 48, 7, 12, 40 }, - { 56, 19, 42, 88 }, - { 64, 7, 16, 144 }, - { 72, 7, 18, 208 }, - { 80, 11, 20, 280 }, - { 88, 5, 22, 360 }, - { 96, 11, 24, 448 }, - { 104, 7, 26, 544 }, - { 112, 41, 84, 648 }, - { 120, 103, 90, 760 }, - { 128, 15, 32, 880 }, - { 136, 9, 34, 1008 }, - { 144, 17, 108, 1144 }, - { 152, 9, 38, 1288 }, - { 160, 21, 120, 1440 }, - { 168, 101, 84, 1600 }, - { 176, 21, 44, 1768 }, - { 184, 57, 46, 1944 }, - { 192, 23, 48, 2128 }, - { 200, 13, 50, 2320 }, - { 208, 27, 52, 2520 }, - { 216, 11, 36, 2728 }, - { 224, 27, 56, 2944 }, - { 232, 85, 58, 3168 }, - { 240, 29, 60, 3400 }, - { 248, 33, 62, 3640 }, - { 256, 15, 32, 3888 }, - { 264, 17, 198, 4144 }, - { 272, 33, 68, 4408 }, - { 280, 103, 210, 4680 }, - { 288, 19, 36, 4960 }, - { 296, 19, 74, 5248 }, - { 304, 37, 76, 5544 }, - { 312, 19, 78, 5848 }, - { 320, 21, 120, 6160 }, - { 328, 21, 82, 6480 }, - { 336, 115, 84, 6808 }, - { 344, 193, 86, 7144 }, - { 352, 21, 44, 7488 }, - { 360, 133, 90, 7840 }, - { 368, 81, 46, 8200 }, - { 376, 45, 94, 8568 }, - { 384, 23, 48, 8944 }, - { 392, 243, 98, 9328 }, - { 400, 151, 40, 9720 }, - { 408, 155, 102, 10120 }, - { 416, 25, 52, 10528 }, - { 424, 51, 106, 10944 }, - { 432, 47, 72, 11368 }, - { 440, 91, 110, 11800 }, - { 448, 29, 168, 12240 }, - { 456, 29, 114, 12688 }, - { 464, 247, 58, 13144 }, - { 472, 29, 118, 13608 }, - { 480, 89, 180, 14080 }, - { 488, 91, 122, 14560 }, - { 496, 157, 62, 15048 }, - { 504, 55, 84, 15544 }, - { 512, 31, 64, 16048 }, - { 528, 17, 66, 16560 }, - { 544, 35, 68, 17088 }, - { 560, 227, 420, 17632 }, - { 576, 65, 96, 18192 }, - { 592, 19, 74, 18768 }, - { 608, 37, 76, 19360 }, - { 624, 41, 234, 19968 }, - { 640, 39, 80, 20592 }, - { 656, 185, 82, 21232 }, - { 672, 43, 252, 21888 }, - { 688, 21, 86, 22560 }, - { 704, 155, 44, 23248 }, - { 720, 79, 120, 23952 }, - { 736, 139, 92, 24672 }, - { 752, 23, 94, 25408 }, - { 768, 217, 48, 26160 }, - { 784, 25, 98, 26928 }, - { 800, 17, 80, 27712 }, - { 816, 127, 102, 28512 }, - { 832, 25, 52, 29328 }, - { 848, 239, 106, 30160 }, - { 864, 17, 48, 31008 }, - { 880, 137, 110, 31872 }, - { 896, 215, 112, 32752 }, - { 912, 29, 114, 33648 }, - { 928, 15, 58, 34560 }, - { 944, 147, 118, 35488 }, - { 960, 29, 60, 36432 }, - { 976, 59, 122, 37392 }, - { 992, 65, 124, 38368 }, - { 1008, 55, 84, 39360 }, - { 1024, 31, 64, 40368 }, - { 1056, 17, 66, 41392 }, - { 1088, 171, 204, 42448 }, - { 1120, 67, 140, 43536 }, - { 1152, 35, 72, 44656 }, - { 1184, 19, 74, 45808 }, - { 1216, 39, 76, 46992 }, - { 1248, 19, 78, 48208 }, - { 1280, 199, 240, 49456 }, - { 1312, 21, 82, 50736 }, - { 1344, 211, 252, 52048 }, - { 1376, 21, 86, 53392 }, - { 1408, 43, 88, 54768 }, - { 1440, 149, 60, 56176 }, - { 1472, 45, 92, 57616 }, - { 1504, 49, 846, 59088 }, - { 1536, 71, 48, 60592 }, - { 1568, 13, 28, 62128 }, - { 1600, 17, 80, 63696 }, - { 1632, 25, 102, 65296 }, - { 1664, 183, 104, 66928 }, - { 1696, 55, 954, 68592 }, - { 1728, 127, 96, 70288 }, - { 1760, 27, 110, 72016 }, - { 1792, 29, 112, 73776 }, - { 1824, 29, 114, 75568 }, - { 1856, 57, 116, 77392 }, - { 1888, 45, 354, 79248 }, - { 1920, 31, 120, 81136 }, - { 1952, 59, 610, 83056 }, - { 1984, 185, 124, 85008 }, - { 2016, 113, 420, 86992 }, - { 2048, 31, 64, 89008 }, - { 2112, 17, 66, 91056 }, - { 2176, 171, 136, 93168 }, - { 2240, 209, 420, 95344 }, - { 2304, 253, 216, 97584 }, - { 2368, 367, 444, 99888 }, - { 2432, 265, 456, 102256 }, - { 2496, 181, 468, 104688 }, - { 2560, 39, 80, 107184 }, - { 2624, 27, 164, 109744 }, - { 2688, 127, 504, 112368 }, - { 2752, 143, 172, 115056 }, - { 2816, 43, 88, 117808 }, - { 2880, 29, 300, 120624 }, - { 2944, 45, 92, 123504 }, - { 3008, 157, 188, 126448 }, - { 3072, 47, 96, 129456 }, - { 3136, 13, 28, 132528 }, - { 3200, 111, 240, 135664 }, - { 3264, 443, 204, 138864 }, - { 3328, 51, 104, 142128 }, - { 3392, 51, 212, 145456 }, - { 3456, 451, 192, 148848 }, - { 3520, 257, 220, 152304 }, - { 3584, 57, 336, 155824 }, - { 3648, 313, 228, 159408 }, - { 3712, 271, 232, 163056 }, - { 3776, 179, 236, 166768 }, - { 3840, 331, 120, 170544 }, - { 3904, 363, 244, 174384 }, - { 3968, 375, 248, 178288 }, - { 4032, 127, 168, 182256 }, - { 4096, 31, 64, 186288 }, - { 4160, 33, 130, 190384 }, - { 4224, 43, 264, 194544 }, - { 4288, 33, 134, 198768 }, - { 4352, 477, 408, 203056 }, - { 4416, 35, 138, 207408 }, - { 4480, 233, 280, 211824 }, - { 4544, 357, 142, 216304 }, - { 4608, 337, 480, 220848 }, - { 4672, 37, 146, 225456 }, - { 4736, 71, 444, 230128 }, - { 4800, 71, 120, 234864 }, - { 4864, 37, 152, 239664 }, - { 4928, 39, 462, 244528 }, - { 4992, 127, 234, 249456 }, - { 5056, 39, 158, 254448 }, - { 5120, 39, 80, 259504 }, - { 5184, 31, 96, 264624 }, - { 5248, 113, 902, 269808 }, - { 5312, 41, 166, 275056 }, - { 5376, 251, 336, 280368 }, - { 5440, 43, 170, 285744 }, - { 5504, 21, 86, 291184 }, - { 5568, 43, 174, 296688 }, - { 5632, 45, 176, 302256 }, - { 5696, 45, 178, 307888 }, - { 5760, 161, 120, 313584 }, - { 5824, 89, 182, 319344 }, - { 5888, 323, 184, 325168 }, - { 5952, 47, 186, 331056 }, - { 6016, 23, 94, 337008 }, - { 6080, 47, 190, 343024 }, - { 6144, 263, 480, 349104 }, -}; -short il_tb[ 355248 ] = { - 0 , - 13 , - 6 , - 19 , - 12 , - 25 , - 18 , - 31 , - 24 , - 37 , - 30 , - 3 , - 36 , - 9 , - 2 , - 15 , - 8 , - 21 , - 14 , - 27 , - 20 , - 33 , - 26 , - 39 , - 32 , - 5 , - 38 , - 11 , - 4 , - 17 , - 10 , - 23 , - 16 , - 29 , - 22 , - 35 , - 28 , - 1 , - 34 , - 7 , - 0 , - 19 , - 14 , - 33 , - 28 , - 47 , - 42 , - 13 , - 8 , - 27 , - 22 , - 41 , - 36 , - 7 , - 2 , - 21 , - 16 , - 35 , - 30 , - 1 , - 44 , - 15 , - 10 , - 29 , - 24 , - 43 , - 38 , - 9 , - 4 , - 23 , - 18 , - 37 , - 32 , - 3 , - 46 , - 17 , - 12 , - 31 , - 26 , - 45 , - 40 , - 11 , - 6 , - 25 , - 20 , - 39 , - 34 , - 5 , - 0 , - 5 , - 38 , - 43 , - 20 , - 25 , - 2 , - 7 , - 40 , - 45 , - 22 , - 27 , - 4 , - 9 , - 42 , - 47 , - 24 , - 29 , - 6 , - 11 , - 44 , - 49 , - 26 , - 31 , - 8 , - 13 , - 46 , - 51 , - 28 , - 33 , - 10 , - 15 , - 48 , - 53 , - 30 , - 35 , - 12 , - 17 , - 50 , - 55 , - 32 , - 37 , - 14 , - 19 , - 52 , - 1 , - 34 , - 39 , - 16 , - 21 , - 54 , - 3 , - 36 , - 41 , - 18 , - 23 , - 0 , - 23 , - 14 , - 37 , - 28 , - 51 , - 42 , - 1 , - 56 , - 15 , - 6 , - 29 , - 20 , - 43 , - 34 , - 57 , - 48 , - 7 , - 62 , - 21 , - 12 , - 35 , - 26 , - 49 , - 40 , - 63 , - 54 , - 13 , - 4 , - 27 , - 18 , - 41 , - 32 , - 55 , - 46 , - 5 , - 60 , - 19 , - 10 , - 33 , - 24 , - 47 , - 38 , - 61 , - 52 , - 11 , - 2 , - 25 , - 16 , - 39 , - 30 , - 53 , - 44 , - 3 , - 58 , - 17 , - 8 , - 31 , - 22 , - 45 , - 36 , - 59 , - 50 , - 9 , - 0 , - 25 , - 14 , - 39 , - 28 , - 53 , - 42 , - 67 , - 56 , - 9 , - 70 , - 23 , - 12 , - 37 , - 26 , - 51 , - 40 , - 65 , - 54 , - 7 , - 68 , - 21 , - 10 , - 35 , - 24 , - 49 , - 38 , - 63 , - 52 , - 5 , - 66 , - 19 , - 8 , - 33 , - 22 , - 47 , - 36 , - 61 , - 50 , - 3 , - 64 , - 17 , - 6 , - 31 , - 20 , - 45 , - 34 , - 59 , - 48 , - 1 , - 62 , - 15 , - 4 , - 29 , - 18 , - 43 , - 32 , - 57 , - 46 , - 71 , - 60 , - 13 , - 2 , - 27 , - 16 , - 41 , - 30 , - 55 , - 44 , - 69 , - 58 , - 11 , - 0 , - 31 , - 22 , - 53 , - 44 , - 75 , - 66 , - 17 , - 8 , - 39 , - 30 , - 61 , - 52 , - 3 , - 74 , - 25 , - 16 , - 47 , - 38 , - 69 , - 60 , - 11 , - 2 , - 33 , - 24 , - 55 , - 46 , - 77 , - 68 , - 19 , - 10 , - 41 , - 32 , - 63 , - 54 , - 5 , - 76 , - 27 , - 18 , - 49 , - 40 , - 71 , - 62 , - 13 , - 4 , - 35 , - 26 , - 57 , - 48 , - 79 , - 70 , - 21 , - 12 , - 43 , - 34 , - 65 , - 56 , - 7 , - 78 , - 29 , - 20 , - 51 , - 42 , - 73 , - 64 , - 15 , - 6 , - 37 , - 28 , - 59 , - 50 , - 1 , - 72 , - 23 , - 14 , - 45 , - 36 , - 67 , - 58 , - 9 , - 0 , - 27 , - 10 , - 37 , - 20 , - 47 , - 30 , - 57 , - 40 , - 67 , - 50 , - 77 , - 60 , - 87 , - 70 , - 9 , - 80 , - 19 , - 2 , - 29 , - 12 , - 39 , - 22 , - 49 , - 32 , - 59 , - 42 , - 69 , - 52 , - 79 , - 62 , - 1 , - 72 , - 11 , - 82 , - 21 , - 4 , - 31 , - 14 , - 41 , - 24 , - 51 , - 34 , - 61 , - 44 , - 71 , - 54 , - 81 , - 64 , - 3 , - 74 , - 13 , - 84 , - 23 , - 6 , - 33 , - 16 , - 43 , - 26 , - 53 , - 36 , - 63 , - 46 , - 73 , - 56 , - 83 , - 66 , - 5 , - 76 , - 15 , - 86 , - 25 , - 8 , - 35 , - 18 , - 45 , - 28 , - 55 , - 38 , - 65 , - 48 , - 75 , - 58 , - 85 , - 68 , - 7 , - 78 , - 17 , - 0 , - 35 , - 22 , - 57 , - 44 , - 79 , - 66 , - 5 , - 88 , - 27 , - 14 , - 49 , - 36 , - 71 , - 58 , - 93 , - 80 , - 19 , - 6 , - 41 , - 28 , - 63 , - 50 , - 85 , - 72 , - 11 , - 94 , - 33 , - 20 , - 55 , - 42 , - 77 , - 64 , - 3 , - 86 , - 25 , - 12 , - 47 , - 34 , - 69 , - 56 , - 91 , - 78 , - 17 , - 4 , - 39 , - 26 , - 61 , - 48 , - 83 , - 70 , - 9 , - 92 , - 31 , - 18 , - 53 , - 40 , - 75 , - 62 , - 1 , - 84 , - 23 , - 10 , - 45 , - 32 , - 67 , - 54 , - 89 , - 76 , - 15 , - 2 , - 37 , - 24 , - 59 , - 46 , - 81 , - 68 , - 7 , - 90 , - 29 , - 16 , - 51 , - 38 , - 73 , - 60 , - 95 , - 82 , - 21 , - 8 , - 43 , - 30 , - 65 , - 52 , - 87 , - 74 , - 13 , - 0 , - 33 , - 14 , - 47 , - 28 , - 61 , - 42 , - 75 , - 56 , - 89 , - 70 , - 103 , - 84 , - 13 , - 98 , - 27 , - 8 , - 41 , - 22 , - 55 , - 36 , - 69 , - 50 , - 83 , - 64 , - 97 , - 78 , - 7 , - 92 , - 21 , - 2 , - 35 , - 16 , - 49 , - 30 , - 63 , - 44 , - 77 , - 58 , - 91 , - 72 , - 1 , - 86 , - 15 , - 100 , - 29 , - 10 , - 43 , - 24 , - 57 , - 38 , - 71 , - 52 , - 85 , - 66 , - 99 , - 80 , - 9 , - 94 , - 23 , - 4 , - 37 , - 18 , - 51 , - 32 , - 65 , - 46 , - 79 , - 60 , - 93 , - 74 , - 3 , - 88 , - 17 , - 102 , - 31 , - 12 , - 45 , - 26 , - 59 , - 40 , - 73 , - 54 , - 87 , - 68 , - 101 , - 82 , - 11 , - 96 , - 25 , - 6 , - 39 , - 20 , - 53 , - 34 , - 67 , - 48 , - 81 , - 62 , - 95 , - 76 , - 5 , - 90 , - 19 , - 0 , - 13 , - 82 , - 95 , - 52 , - 65 , - 22 , - 35 , - 104 , - 5 , - 74 , - 87 , - 44 , - 57 , - 14 , - 27 , - 96 , - 109 , - 66 , - 79 , - 36 , - 49 , - 6 , - 19 , - 88 , - 101 , - 58 , - 71 , - 28 , - 41 , - 110 , - 11 , - 80 , - 93 , - 50 , - 63 , - 20 , - 33 , - 102 , - 3 , - 72 , - 85 , - 42 , - 55 , - 12 , - 25 , - 94 , - 107 , - 64 , - 77 , - 34 , - 47 , - 4 , - 17 , - 86 , - 99 , - 56 , - 69 , - 26 , - 39 , - 108 , - 9 , - 78 , - 91 , - 48 , - 61 , - 18 , - 31 , - 100 , - 1 , - 70 , - 83 , - 40 , - 53 , - 10 , - 23 , - 92 , - 105 , - 62 , - 75 , - 32 , - 45 , - 2 , - 15 , - 84 , - 97 , - 54 , - 67 , - 24 , - 37 , - 106 , - 7 , - 76 , - 89 , - 46 , - 59 , - 16 , - 29 , - 98 , - 111 , - 68 , - 81 , - 38 , - 51 , - 8 , - 21 , - 90 , - 103 , - 60 , - 73 , - 30 , - 43 , - 0 , - 73 , - 86 , - 39 , - 52 , - 5 , - 18 , - 91 , - 104 , - 57 , - 70 , - 23 , - 36 , - 109 , - 2 , - 75 , - 88 , - 41 , - 54 , - 7 , - 20 , - 93 , - 106 , - 59 , - 72 , - 25 , - 38 , - 111 , - 4 , - 77 , - 90 , - 43 , - 56 , - 9 , - 22 , - 95 , - 108 , - 61 , - 74 , - 27 , - 40 , - 113 , - 6 , - 79 , - 92 , - 45 , - 58 , - 11 , - 24 , - 97 , - 110 , - 63 , - 76 , - 29 , - 42 , - 115 , - 8 , - 81 , - 94 , - 47 , - 60 , - 13 , - 26 , - 99 , - 112 , - 65 , - 78 , - 31 , - 44 , - 117 , - 10 , - 83 , - 96 , - 49 , - 62 , - 15 , - 28 , - 101 , - 114 , - 67 , - 80 , - 33 , - 46 , - 119 , - 12 , - 85 , - 98 , - 51 , - 64 , - 17 , - 30 , - 103 , - 116 , - 69 , - 82 , - 35 , - 48 , - 1 , - 14 , - 87 , - 100 , - 53 , - 66 , - 19 , - 32 , - 105 , - 118 , - 71 , - 84 , - 37 , - 50 , - 3 , - 16 , - 89 , - 102 , - 55 , - 68 , - 21 , - 34 , - 107 , - 0 , - 47 , - 30 , - 77 , - 60 , - 107 , - 90 , - 9 , - 120 , - 39 , - 22 , - 69 , - 52 , - 99 , - 82 , - 1 , - 112 , - 31 , - 14 , - 61 , - 44 , - 91 , - 74 , - 121 , - 104 , - 23 , - 6 , - 53 , - 36 , - 83 , - 66 , - 113 , - 96 , - 15 , - 126 , - 45 , - 28 , - 75 , - 58 , - 105 , - 88 , - 7 , - 118 , - 37 , - 20 , - 67 , - 50 , - 97 , - 80 , - 127 , - 110 , - 29 , - 12 , - 59 , - 42 , - 89 , - 72 , - 119 , - 102 , - 21 , - 4 , - 51 , - 34 , - 81 , - 64 , - 111 , - 94 , - 13 , - 124 , - 43 , - 26 , - 73 , - 56 , - 103 , - 86 , - 5 , - 116 , - 35 , - 18 , - 65 , - 48 , - 95 , - 78 , - 125 , - 108 , - 27 , - 10 , - 57 , - 40 , - 87 , - 70 , - 117 , - 100 , - 19 , - 2 , - 49 , - 32 , - 79 , - 62 , - 109 , - 92 , - 11 , - 122 , - 41 , - 24 , - 71 , - 54 , - 101 , - 84 , - 3 , - 114 , - 33 , - 16 , - 63 , - 46 , - 93 , - 76 , - 123 , - 106 , - 25 , - 8 , - 55 , - 38 , - 85 , - 68 , - 115 , - 98 , - 17 , - 0 , - 43 , - 18 , - 61 , - 36 , - 79 , - 54 , - 97 , - 72 , - 115 , - 90 , - 133 , - 108 , - 15 , - 126 , - 33 , - 8 , - 51 , - 26 , - 69 , - 44 , - 87 , - 62 , - 105 , - 80 , - 123 , - 98 , - 5 , - 116 , - 23 , - 134 , - 41 , - 16 , - 59 , - 34 , - 77 , - 52 , - 95 , - 70 , - 113 , - 88 , - 131 , - 106 , - 13 , - 124 , - 31 , - 6 , - 49 , - 24 , - 67 , - 42 , - 85 , - 60 , - 103 , - 78 , - 121 , - 96 , - 3 , - 114 , - 21 , - 132 , - 39 , - 14 , - 57 , - 32 , - 75 , - 50 , - 93 , - 68 , - 111 , - 86 , - 129 , - 104 , - 11 , - 122 , - 29 , - 4 , - 47 , - 22 , - 65 , - 40 , - 83 , - 58 , - 101 , - 76 , - 119 , - 94 , - 1 , - 112 , - 19 , - 130 , - 37 , - 12 , - 55 , - 30 , - 73 , - 48 , - 91 , - 66 , - 109 , - 84 , - 127 , - 102 , - 9 , - 120 , - 27 , - 2 , - 45 , - 20 , - 63 , - 38 , - 81 , - 56 , - 99 , - 74 , - 117 , - 92 , - 135 , - 110 , - 17 , - 128 , - 35 , - 10 , - 53 , - 28 , - 71 , - 46 , - 89 , - 64 , - 107 , - 82 , - 125 , - 100 , - 7 , - 118 , - 25 , - 0 , - 125 , - 34 , - 15 , - 68 , - 49 , - 102 , - 83 , - 136 , - 117 , - 26 , - 7 , - 60 , - 41 , - 94 , - 75 , - 128 , - 109 , - 18 , - 143 , - 52 , - 33 , - 86 , - 67 , - 120 , - 101 , - 10 , - 135 , - 44 , - 25 , - 78 , - 59 , - 112 , - 93 , - 2 , - 127 , - 36 , - 17 , - 70 , - 51 , - 104 , - 85 , - 138 , - 119 , - 28 , - 9 , - 62 , - 43 , - 96 , - 77 , - 130 , - 111 , - 20 , - 1 , - 54 , - 35 , - 88 , - 69 , - 122 , - 103 , - 12 , - 137 , - 46 , - 27 , - 80 , - 61 , - 114 , - 95 , - 4 , - 129 , - 38 , - 19 , - 72 , - 53 , - 106 , - 87 , - 140 , - 121 , - 30 , - 11 , - 64 , - 45 , - 98 , - 79 , - 132 , - 113 , - 22 , - 3 , - 56 , - 37 , - 90 , - 71 , - 124 , - 105 , - 14 , - 139 , - 48 , - 29 , - 82 , - 63 , - 116 , - 97 , - 6 , - 131 , - 40 , - 21 , - 74 , - 55 , - 108 , - 89 , - 142 , - 123 , - 32 , - 13 , - 66 , - 47 , - 100 , - 81 , - 134 , - 115 , - 24 , - 5 , - 58 , - 39 , - 92 , - 73 , - 126 , - 107 , - 16 , - 141 , - 50 , - 31 , - 84 , - 65 , - 118 , - 99 , - 8 , - 133 , - 42 , - 23 , - 76 , - 57 , - 110 , - 91 , - 0 , - 47 , - 18 , - 65 , - 36 , - 83 , - 54 , - 101 , - 72 , - 119 , - 90 , - 137 , - 108 , - 3 , - 126 , - 21 , - 144 , - 39 , - 10 , - 57 , - 28 , - 75 , - 46 , - 93 , - 64 , - 111 , - 82 , - 129 , - 100 , - 147 , - 118 , - 13 , - 136 , - 31 , - 2 , - 49 , - 20 , - 67 , - 38 , - 85 , - 56 , - 103 , - 74 , - 121 , - 92 , - 139 , - 110 , - 5 , - 128 , - 23 , - 146 , - 41 , - 12 , - 59 , - 30 , - 77 , - 48 , - 95 , - 66 , - 113 , - 84 , - 131 , - 102 , - 149 , - 120 , - 15 , - 138 , - 33 , - 4 , - 51 , - 22 , - 69 , - 40 , - 87 , - 58 , - 105 , - 76 , - 123 , - 94 , - 141 , - 112 , - 7 , - 130 , - 25 , - 148 , - 43 , - 14 , - 61 , - 32 , - 79 , - 50 , - 97 , - 68 , - 115 , - 86 , - 133 , - 104 , - 151 , - 122 , - 17 , - 140 , - 35 , - 6 , - 53 , - 24 , - 71 , - 42 , - 89 , - 60 , - 107 , - 78 , - 125 , - 96 , - 143 , - 114 , - 9 , - 132 , - 27 , - 150 , - 45 , - 16 , - 63 , - 34 , - 81 , - 52 , - 99 , - 70 , - 117 , - 88 , - 135 , - 106 , - 1 , - 124 , - 19 , - 142 , - 37 , - 8 , - 55 , - 26 , - 73 , - 44 , - 91 , - 62 , - 109 , - 80 , - 127 , - 98 , - 145 , - 116 , - 11 , - 134 , - 29 , - 0 , - 141 , - 42 , - 23 , - 84 , - 65 , - 126 , - 107 , - 8 , - 149 , - 50 , - 31 , - 92 , - 73 , - 134 , - 115 , - 16 , - 157 , - 58 , - 39 , - 100 , - 81 , - 142 , - 123 , - 24 , - 5 , - 66 , - 47 , - 108 , - 89 , - 150 , - 131 , - 32 , - 13 , - 74 , - 55 , - 116 , - 97 , - 158 , - 139 , - 40 , - 21 , - 82 , - 63 , - 124 , - 105 , - 6 , - 147 , - 48 , - 29 , - 90 , - 71 , - 132 , - 113 , - 14 , - 155 , - 56 , - 37 , - 98 , - 79 , - 140 , - 121 , - 22 , - 3 , - 64 , - 45 , - 106 , - 87 , - 148 , - 129 , - 30 , - 11 , - 72 , - 53 , - 114 , - 95 , - 156 , - 137 , - 38 , - 19 , - 80 , - 61 , - 122 , - 103 , - 4 , - 145 , - 46 , - 27 , - 88 , - 69 , - 130 , - 111 , - 12 , - 153 , - 54 , - 35 , - 96 , - 77 , - 138 , - 119 , - 20 , - 1 , - 62 , - 43 , - 104 , - 85 , - 146 , - 127 , - 28 , - 9 , - 70 , - 51 , - 112 , - 93 , - 154 , - 135 , - 36 , - 17 , - 78 , - 59 , - 120 , - 101 , - 2 , - 143 , - 44 , - 25 , - 86 , - 67 , - 128 , - 109 , - 10 , - 151 , - 52 , - 33 , - 94 , - 75 , - 136 , - 117 , - 18 , - 159 , - 60 , - 41 , - 102 , - 83 , - 144 , - 125 , - 26 , - 7 , - 68 , - 49 , - 110 , - 91 , - 152 , - 133 , - 34 , - 15 , - 76 , - 57 , - 118 , - 99 , - 0 , - 17 , - 34 , - 51 , - 68 , - 85 , - 102 , - 119 , - 136 , - 153 , - 2 , - 19 , - 36 , - 53 , - 70 , - 87 , - 104 , - 121 , - 138 , - 155 , - 4 , - 21 , - 38 , - 55 , - 72 , - 89 , - 106 , - 123 , - 140 , - 157 , - 6 , - 23 , - 40 , - 57 , - 74 , - 91 , - 108 , - 125 , - 142 , - 159 , - 8 , - 25 , - 42 , - 59 , - 76 , - 93 , - 110 , - 127 , - 144 , - 161 , - 10 , - 27 , - 44 , - 61 , - 78 , - 95 , - 112 , - 129 , - 146 , - 163 , - 12 , - 29 , - 46 , - 63 , - 80 , - 97 , - 114 , - 131 , - 148 , - 165 , - 14 , - 31 , - 48 , - 65 , - 82 , - 99 , - 116 , - 133 , - 150 , - 167 , - 16 , - 33 , - 50 , - 67 , - 84 , - 101 , - 118 , - 135 , - 152 , - 1 , - 18 , - 35 , - 52 , - 69 , - 86 , - 103 , - 120 , - 137 , - 154 , - 3 , - 20 , - 37 , - 54 , - 71 , - 88 , - 105 , - 122 , - 139 , - 156 , - 5 , - 22 , - 39 , - 56 , - 73 , - 90 , - 107 , - 124 , - 141 , - 158 , - 7 , - 24 , - 41 , - 58 , - 75 , - 92 , - 109 , - 126 , - 143 , - 160 , - 9 , - 26 , - 43 , - 60 , - 77 , - 94 , - 111 , - 128 , - 145 , - 162 , - 11 , - 28 , - 45 , - 62 , - 79 , - 96 , - 113 , - 130 , - 147 , - 164 , - 13 , - 30 , - 47 , - 64 , - 81 , - 98 , - 115 , - 132 , - 149 , - 166 , - 15 , - 32 , - 49 , - 66 , - 83 , - 100 , - 117 , - 134 , - 151 , - 0 , - 65 , - 42 , - 107 , - 84 , - 149 , - 126 , - 15 , - 168 , - 57 , - 34 , - 99 , - 76 , - 141 , - 118 , - 7 , - 160 , - 49 , - 26 , - 91 , - 68 , - 133 , - 110 , - 175 , - 152 , - 41 , - 18 , - 83 , - 60 , - 125 , - 102 , - 167 , - 144 , - 33 , - 10 , - 75 , - 52 , - 117 , - 94 , - 159 , - 136 , - 25 , - 2 , - 67 , - 44 , - 109 , - 86 , - 151 , - 128 , - 17 , - 170 , - 59 , - 36 , - 101 , - 78 , - 143 , - 120 , - 9 , - 162 , - 51 , - 28 , - 93 , - 70 , - 135 , - 112 , - 1 , - 154 , - 43 , - 20 , - 85 , - 62 , - 127 , - 104 , - 169 , - 146 , - 35 , - 12 , - 77 , - 54 , - 119 , - 96 , - 161 , - 138 , - 27 , - 4 , - 69 , - 46 , - 111 , - 88 , - 153 , - 130 , - 19 , - 172 , - 61 , - 38 , - 103 , - 80 , - 145 , - 122 , - 11 , - 164 , - 53 , - 30 , - 95 , - 72 , - 137 , - 114 , - 3 , - 156 , - 45 , - 22 , - 87 , - 64 , - 129 , - 106 , - 171 , - 148 , - 37 , - 14 , - 79 , - 56 , - 121 , - 98 , - 163 , - 140 , - 29 , - 6 , - 71 , - 48 , - 113 , - 90 , - 155 , - 132 , - 21 , - 174 , - 63 , - 40 , - 105 , - 82 , - 147 , - 124 , - 13 , - 166 , - 55 , - 32 , - 97 , - 74 , - 139 , - 116 , - 5 , - 158 , - 47 , - 24 , - 89 , - 66 , - 131 , - 108 , - 173 , - 150 , - 39 , - 16 , - 81 , - 58 , - 123 , - 100 , - 165 , - 142 , - 31 , - 8 , - 73 , - 50 , - 115 , - 92 , - 157 , - 134 , - 23 , - 0 , - 103 , - 114 , - 33 , - 44 , - 147 , - 158 , - 77 , - 88 , - 7 , - 18 , - 121 , - 132 , - 51 , - 62 , - 165 , - 176 , - 95 , - 106 , - 25 , - 36 , - 139 , - 150 , - 69 , - 80 , - 183 , - 10 , - 113 , - 124 , - 43 , - 54 , - 157 , - 168 , - 87 , - 98 , - 17 , - 28 , - 131 , - 142 , - 61 , - 72 , - 175 , - 2 , - 105 , - 116 , - 35 , - 46 , - 149 , - 160 , - 79 , - 90 , - 9 , - 20 , - 123 , - 134 , - 53 , - 64 , - 167 , - 178 , - 97 , - 108 , - 27 , - 38 , - 141 , - 152 , - 71 , - 82 , - 1 , - 12 , - 115 , - 126 , - 45 , - 56 , - 159 , - 170 , - 89 , - 100 , - 19 , - 30 , - 133 , - 144 , - 63 , - 74 , - 177 , - 4 , - 107 , - 118 , - 37 , - 48 , - 151 , - 162 , - 81 , - 92 , - 11 , - 22 , - 125 , - 136 , - 55 , - 66 , - 169 , - 180 , - 99 , - 110 , - 29 , - 40 , - 143 , - 154 , - 73 , - 84 , - 3 , - 14 , - 117 , - 128 , - 47 , - 58 , - 161 , - 172 , - 91 , - 102 , - 21 , - 32 , - 135 , - 146 , - 65 , - 76 , - 179 , - 6 , - 109 , - 120 , - 39 , - 50 , - 153 , - 164 , - 83 , - 94 , - 13 , - 24 , - 127 , - 138 , - 57 , - 68 , - 171 , - 182 , - 101 , - 112 , - 31 , - 42 , - 145 , - 156 , - 75 , - 86 , - 5 , - 16 , - 119 , - 130 , - 49 , - 60 , - 163 , - 174 , - 93 , - 104 , - 23 , - 34 , - 137 , - 148 , - 67 , - 78 , - 181 , - 8 , - 111 , - 122 , - 41 , - 52 , - 155 , - 166 , - 85 , - 96 , - 15 , - 26 , - 129 , - 140 , - 59 , - 70 , - 173 , - 0 , - 71 , - 46 , - 117 , - 92 , - 163 , - 138 , - 17 , - 184 , - 63 , - 38 , - 109 , - 84 , - 155 , - 130 , - 9 , - 176 , - 55 , - 30 , - 101 , - 76 , - 147 , - 122 , - 1 , - 168 , - 47 , - 22 , - 93 , - 68 , - 139 , - 114 , - 185 , - 160 , - 39 , - 14 , - 85 , - 60 , - 131 , - 106 , - 177 , - 152 , - 31 , - 6 , - 77 , - 52 , - 123 , - 98 , - 169 , - 144 , - 23 , - 190 , - 69 , - 44 , - 115 , - 90 , - 161 , - 136 , - 15 , - 182 , - 61 , - 36 , - 107 , - 82 , - 153 , - 128 , - 7 , - 174 , - 53 , - 28 , - 99 , - 74 , - 145 , - 120 , - 191 , - 166 , - 45 , - 20 , - 91 , - 66 , - 137 , - 112 , - 183 , - 158 , - 37 , - 12 , - 83 , - 58 , - 129 , - 104 , - 175 , - 150 , - 29 , - 4 , - 75 , - 50 , - 121 , - 96 , - 167 , - 142 , - 21 , - 188 , - 67 , - 42 , - 113 , - 88 , - 159 , - 134 , - 13 , - 180 , - 59 , - 34 , - 105 , - 80 , - 151 , - 126 , - 5 , - 172 , - 51 , - 26 , - 97 , - 72 , - 143 , - 118 , - 189 , - 164 , - 43 , - 18 , - 89 , - 64 , - 135 , - 110 , - 181 , - 156 , - 35 , - 10 , - 81 , - 56 , - 127 , - 102 , - 173 , - 148 , - 27 , - 2 , - 73 , - 48 , - 119 , - 94 , - 165 , - 140 , - 19 , - 186 , - 65 , - 40 , - 111 , - 86 , - 157 , - 132 , - 11 , - 178 , - 57 , - 32 , - 103 , - 78 , - 149 , - 124 , - 3 , - 170 , - 49 , - 24 , - 95 , - 70 , - 141 , - 116 , - 187 , - 162 , - 41 , - 16 , - 87 , - 62 , - 133 , - 108 , - 179 , - 154 , - 33 , - 8 , - 79 , - 54 , - 125 , - 100 , - 171 , - 146 , - 25 , - 0 , - 63 , - 26 , - 89 , - 52 , - 115 , - 78 , - 141 , - 104 , - 167 , - 130 , - 193 , - 156 , - 19 , - 182 , - 45 , - 8 , - 71 , - 34 , - 97 , - 60 , - 123 , - 86 , - 149 , - 112 , - 175 , - 138 , - 1 , - 164 , - 27 , - 190 , - 53 , - 16 , - 79 , - 42 , - 105 , - 68 , - 131 , - 94 , - 157 , - 120 , - 183 , - 146 , - 9 , - 172 , - 35 , - 198 , - 61 , - 24 , - 87 , - 50 , - 113 , - 76 , - 139 , - 102 , - 165 , - 128 , - 191 , - 154 , - 17 , - 180 , - 43 , - 6 , - 69 , - 32 , - 95 , - 58 , - 121 , - 84 , - 147 , - 110 , - 173 , - 136 , - 199 , - 162 , - 25 , - 188 , - 51 , - 14 , - 77 , - 40 , - 103 , - 66 , - 129 , - 92 , - 155 , - 118 , - 181 , - 144 , - 7 , - 170 , - 33 , - 196 , - 59 , - 22 , - 85 , - 48 , - 111 , - 74 , - 137 , - 100 , - 163 , - 126 , - 189 , - 152 , - 15 , - 178 , - 41 , - 4 , - 67 , - 30 , - 93 , - 56 , - 119 , - 82 , - 145 , - 108 , - 171 , - 134 , - 197 , - 160 , - 23 , - 186 , - 49 , - 12 , - 75 , - 38 , - 101 , - 64 , - 127 , - 90 , - 153 , - 116 , - 179 , - 142 , - 5 , - 168 , - 31 , - 194 , - 57 , - 20 , - 83 , - 46 , - 109 , - 72 , - 135 , - 98 , - 161 , - 124 , - 187 , - 150 , - 13 , - 176 , - 39 , - 2 , - 65 , - 28 , - 91 , - 54 , - 117 , - 80 , - 143 , - 106 , - 169 , - 132 , - 195 , - 158 , - 21 , - 184 , - 47 , - 10 , - 73 , - 36 , - 99 , - 62 , - 125 , - 88 , - 151 , - 114 , - 177 , - 140 , - 3 , - 166 , - 29 , - 192 , - 55 , - 18 , - 81 , - 44 , - 107 , - 70 , - 133 , - 96 , - 159 , - 122 , - 185 , - 148 , - 11 , - 174 , - 37 , - 0 , - 79 , - 54 , - 133 , - 108 , - 187 , - 162 , - 33 , - 8 , - 87 , - 62 , - 141 , - 116 , - 195 , - 170 , - 41 , - 16 , - 95 , - 70 , - 149 , - 124 , - 203 , - 178 , - 49 , - 24 , - 103 , - 78 , - 157 , - 132 , - 3 , - 186 , - 57 , - 32 , - 111 , - 86 , - 165 , - 140 , - 11 , - 194 , - 65 , - 40 , - 119 , - 94 , - 173 , - 148 , - 19 , - 202 , - 73 , - 48 , - 127 , - 102 , - 181 , - 156 , - 27 , - 2 , - 81 , - 56 , - 135 , - 110 , - 189 , - 164 , - 35 , - 10 , - 89 , - 64 , - 143 , - 118 , - 197 , - 172 , - 43 , - 18 , - 97 , - 72 , - 151 , - 126 , - 205 , - 180 , - 51 , - 26 , - 105 , - 80 , - 159 , - 134 , - 5 , - 188 , - 59 , - 34 , - 113 , - 88 , - 167 , - 142 , - 13 , - 196 , - 67 , - 42 , - 121 , - 96 , - 175 , - 150 , - 21 , - 204 , - 75 , - 50 , - 129 , - 104 , - 183 , - 158 , - 29 , - 4 , - 83 , - 58 , - 137 , - 112 , - 191 , - 166 , - 37 , - 12 , - 91 , - 66 , - 145 , - 120 , - 199 , - 174 , - 45 , - 20 , - 99 , - 74 , - 153 , - 128 , - 207 , - 182 , - 53 , - 28 , - 107 , - 82 , - 161 , - 136 , - 7 , - 190 , - 61 , - 36 , - 115 , - 90 , - 169 , - 144 , - 15 , - 198 , - 69 , - 44 , - 123 , - 98 , - 177 , - 152 , - 23 , - 206 , - 77 , - 52 , - 131 , - 106 , - 185 , - 160 , - 31 , - 6 , - 85 , - 60 , - 139 , - 114 , - 193 , - 168 , - 39 , - 14 , - 93 , - 68 , - 147 , - 122 , - 201 , - 176 , - 47 , - 22 , - 101 , - 76 , - 155 , - 130 , - 1 , - 184 , - 55 , - 30 , - 109 , - 84 , - 163 , - 138 , - 9 , - 192 , - 63 , - 38 , - 117 , - 92 , - 171 , - 146 , - 17 , - 200 , - 71 , - 46 , - 125 , - 100 , - 179 , - 154 , - 25 , - 0 , - 47 , - 166 , - 141 , - 188 , - 91 , - 66 , - 113 , - 16 , - 207 , - 38 , - 157 , - 132 , - 179 , - 82 , - 57 , - 104 , - 7 , - 198 , - 29 , - 148 , - 123 , - 170 , - 73 , - 48 , - 95 , - 214 , - 189 , - 20 , - 139 , - 114 , - 161 , - 64 , - 39 , - 86 , - 205 , - 180 , - 11 , - 130 , - 105 , - 152 , - 55 , - 30 , - 77 , - 196 , - 171 , - 2 , - 121 , - 96 , - 143 , - 46 , - 21 , - 68 , - 187 , - 162 , - 209 , - 112 , - 87 , - 134 , - 37 , - 12 , - 59 , - 178 , - 153 , - 200 , - 103 , - 78 , - 125 , - 28 , - 3 , - 50 , - 169 , - 144 , - 191 , - 94 , - 69 , - 116 , - 19 , - 210 , - 41 , - 160 , - 135 , - 182 , - 85 , - 60 , - 107 , - 10 , - 201 , - 32 , - 151 , - 126 , - 173 , - 76 , - 51 , - 98 , - 1 , - 192 , - 23 , - 142 , - 117 , - 164 , - 67 , - 42 , - 89 , - 208 , - 183 , - 14 , - 133 , - 108 , - 155 , - 58 , - 33 , - 80 , - 199 , - 174 , - 5 , - 124 , - 99 , - 146 , - 49 , - 24 , - 71 , - 190 , - 165 , - 212 , - 115 , - 90 , - 137 , - 40 , - 15 , - 62 , - 181 , - 156 , - 203 , - 106 , - 81 , - 128 , - 31 , - 6 , - 53 , - 172 , - 147 , - 194 , - 97 , - 72 , - 119 , - 22 , - 213 , - 44 , - 163 , - 138 , - 185 , - 88 , - 63 , - 110 , - 13 , - 204 , - 35 , - 154 , - 129 , - 176 , - 79 , - 54 , - 101 , - 4 , - 195 , - 26 , - 145 , - 120 , - 167 , - 70 , - 45 , - 92 , - 211 , - 186 , - 17 , - 136 , - 111 , - 158 , - 61 , - 36 , - 83 , - 202 , - 177 , - 8 , - 127 , - 102 , - 149 , - 52 , - 27 , - 74 , - 193 , - 168 , - 215 , - 118 , - 93 , - 140 , - 43 , - 18 , - 65 , - 184 , - 159 , - 206 , - 109 , - 84 , - 131 , - 34 , - 9 , - 56 , - 175 , - 150 , - 197 , - 100 , - 75 , - 122 , - 25 , - 0 , - 83 , - 54 , - 137 , - 108 , - 191 , - 162 , - 21 , - 216 , - 75 , - 46 , - 129 , - 100 , - 183 , - 154 , - 13 , - 208 , - 67 , - 38 , - 121 , - 92 , - 175 , - 146 , - 5 , - 200 , - 59 , - 30 , - 113 , - 84 , - 167 , - 138 , - 221 , - 192 , - 51 , - 22 , - 105 , - 76 , - 159 , - 130 , - 213 , - 184 , - 43 , - 14 , - 97 , - 68 , - 151 , - 122 , - 205 , - 176 , - 35 , - 6 , - 89 , - 60 , - 143 , - 114 , - 197 , - 168 , - 27 , - 222 , - 81 , - 52 , - 135 , - 106 , - 189 , - 160 , - 19 , - 214 , - 73 , - 44 , - 127 , - 98 , - 181 , - 152 , - 11 , - 206 , - 65 , - 36 , - 119 , - 90 , - 173 , - 144 , - 3 , - 198 , - 57 , - 28 , - 111 , - 82 , - 165 , - 136 , - 219 , - 190 , - 49 , - 20 , - 103 , - 74 , - 157 , - 128 , - 211 , - 182 , - 41 , - 12 , - 95 , - 66 , - 149 , - 120 , - 203 , - 174 , - 33 , - 4 , - 87 , - 58 , - 141 , - 112 , - 195 , - 166 , - 25 , - 220 , - 79 , - 50 , - 133 , - 104 , - 187 , - 158 , - 17 , - 212 , - 71 , - 42 , - 125 , - 96 , - 179 , - 150 , - 9 , - 204 , - 63 , - 34 , - 117 , - 88 , - 171 , - 142 , - 1 , - 196 , - 55 , - 26 , - 109 , - 80 , - 163 , - 134 , - 217 , - 188 , - 47 , - 18 , - 101 , - 72 , - 155 , - 126 , - 209 , - 180 , - 39 , - 10 , - 93 , - 64 , - 147 , - 118 , - 201 , - 172 , - 31 , - 2 , - 85 , - 56 , - 139 , - 110 , - 193 , - 164 , - 23 , - 218 , - 77 , - 48 , - 131 , - 102 , - 185 , - 156 , - 15 , - 210 , - 69 , - 40 , - 123 , - 94 , - 177 , - 148 , - 7 , - 202 , - 61 , - 32 , - 115 , - 86 , - 169 , - 140 , - 223 , - 194 , - 53 , - 24 , - 107 , - 78 , - 161 , - 132 , - 215 , - 186 , - 45 , - 16 , - 99 , - 70 , - 153 , - 124 , - 207 , - 178 , - 37 , - 8 , - 91 , - 62 , - 145 , - 116 , - 199 , - 170 , - 29 , - 0 , - 143 , - 170 , - 81 , - 108 , - 19 , - 46 , - 189 , - 216 , - 127 , - 154 , - 65 , - 92 , - 3 , - 30 , - 173 , - 200 , - 111 , - 138 , - 49 , - 76 , - 219 , - 14 , - 157 , - 184 , - 95 , - 122 , - 33 , - 60 , - 203 , - 230 , - 141 , - 168 , - 79 , - 106 , - 17 , - 44 , - 187 , - 214 , - 125 , - 152 , - 63 , - 90 , - 1 , - 28 , - 171 , - 198 , - 109 , - 136 , - 47 , - 74 , - 217 , - 12 , - 155 , - 182 , - 93 , - 120 , - 31 , - 58 , - 201 , - 228 , - 139 , - 166 , - 77 , - 104 , - 15 , - 42 , - 185 , - 212 , - 123 , - 150 , - 61 , - 88 , - 231 , - 26 , - 169 , - 196 , - 107 , - 134 , - 45 , - 72 , - 215 , - 10 , - 153 , - 180 , - 91 , - 118 , - 29 , - 56 , - 199 , - 226 , - 137 , - 164 , - 75 , - 102 , - 13 , - 40 , - 183 , - 210 , - 121 , - 148 , - 59 , - 86 , - 229 , - 24 , - 167 , - 194 , - 105 , - 132 , - 43 , - 70 , - 213 , - 8 , - 151 , - 178 , - 89 , - 116 , - 27 , - 54 , - 197 , - 224 , - 135 , - 162 , - 73 , - 100 , - 11 , - 38 , - 181 , - 208 , - 119 , - 146 , - 57 , - 84 , - 227 , - 22 , - 165 , - 192 , - 103 , - 130 , - 41 , - 68 , - 211 , - 6 , - 149 , - 176 , - 87 , - 114 , - 25 , - 52 , - 195 , - 222 , - 133 , - 160 , - 71 , - 98 , - 9 , - 36 , - 179 , - 206 , - 117 , - 144 , - 55 , - 82 , - 225 , - 20 , - 163 , - 190 , - 101 , - 128 , - 39 , - 66 , - 209 , - 4 , - 147 , - 174 , - 85 , - 112 , - 23 , - 50 , - 193 , - 220 , - 131 , - 158 , - 69 , - 96 , - 7 , - 34 , - 177 , - 204 , - 115 , - 142 , - 53 , - 80 , - 223 , - 18 , - 161 , - 188 , - 99 , - 126 , - 37 , - 64 , - 207 , - 2 , - 145 , - 172 , - 83 , - 110 , - 21 , - 48 , - 191 , - 218 , - 129 , - 156 , - 67 , - 94 , - 5 , - 32 , - 175 , - 202 , - 113 , - 140 , - 51 , - 78 , - 221 , - 16 , - 159 , - 186 , - 97 , - 124 , - 35 , - 62 , - 205 , - 0 , - 89 , - 58 , - 147 , - 116 , - 205 , - 174 , - 23 , - 232 , - 81 , - 50 , - 139 , - 108 , - 197 , - 166 , - 15 , - 224 , - 73 , - 42 , - 131 , - 100 , - 189 , - 158 , - 7 , - 216 , - 65 , - 34 , - 123 , - 92 , - 181 , - 150 , - 239 , - 208 , - 57 , - 26 , - 115 , - 84 , - 173 , - 142 , - 231 , - 200 , - 49 , - 18 , - 107 , - 76 , - 165 , - 134 , - 223 , - 192 , - 41 , - 10 , - 99 , - 68 , - 157 , - 126 , - 215 , - 184 , - 33 , - 2 , - 91 , - 60 , - 149 , - 118 , - 207 , - 176 , - 25 , - 234 , - 83 , - 52 , - 141 , - 110 , - 199 , - 168 , - 17 , - 226 , - 75 , - 44 , - 133 , - 102 , - 191 , - 160 , - 9 , - 218 , - 67 , - 36 , - 125 , - 94 , - 183 , - 152 , - 1 , - 210 , - 59 , - 28 , - 117 , - 86 , - 175 , - 144 , - 233 , - 202 , - 51 , - 20 , - 109 , - 78 , - 167 , - 136 , - 225 , - 194 , - 43 , - 12 , - 101 , - 70 , - 159 , - 128 , - 217 , - 186 , - 35 , - 4 , - 93 , - 62 , - 151 , - 120 , - 209 , - 178 , - 27 , - 236 , - 85 , - 54 , - 143 , - 112 , - 201 , - 170 , - 19 , - 228 , - 77 , - 46 , - 135 , - 104 , - 193 , - 162 , - 11 , - 220 , - 69 , - 38 , - 127 , - 96 , - 185 , - 154 , - 3 , - 212 , - 61 , - 30 , - 119 , - 88 , - 177 , - 146 , - 235 , - 204 , - 53 , - 22 , - 111 , - 80 , - 169 , - 138 , - 227 , - 196 , - 45 , - 14 , - 103 , - 72 , - 161 , - 130 , - 219 , - 188 , - 37 , - 6 , - 95 , - 64 , - 153 , - 122 , - 211 , - 180 , - 29 , - 238 , - 87 , - 56 , - 145 , - 114 , - 203 , - 172 , - 21 , - 230 , - 79 , - 48 , - 137 , - 106 , - 195 , - 164 , - 13 , - 222 , - 71 , - 40 , - 129 , - 98 , - 187 , - 156 , - 5 , - 214 , - 63 , - 32 , - 121 , - 90 , - 179 , - 148 , - 237 , - 206 , - 55 , - 24 , - 113 , - 82 , - 171 , - 140 , - 229 , - 198 , - 47 , - 16 , - 105 , - 74 , - 163 , - 132 , - 221 , - 190 , - 39 , - 8 , - 97 , - 66 , - 155 , - 124 , - 213 , - 182 , - 31 , - 0 , - 95 , - 66 , - 161 , - 132 , - 227 , - 198 , - 45 , - 16 , - 111 , - 82 , - 177 , - 148 , - 243 , - 214 , - 61 , - 32 , - 127 , - 98 , - 193 , - 164 , - 11 , - 230 , - 77 , - 48 , - 143 , - 114 , - 209 , - 180 , - 27 , - 246 , - 93 , - 64 , - 159 , - 130 , - 225 , - 196 , - 43 , - 14 , - 109 , - 80 , - 175 , - 146 , - 241 , - 212 , - 59 , - 30 , - 125 , - 96 , - 191 , - 162 , - 9 , - 228 , - 75 , - 46 , - 141 , - 112 , - 207 , - 178 , - 25 , - 244 , - 91 , - 62 , - 157 , - 128 , - 223 , - 194 , - 41 , - 12 , - 107 , - 78 , - 173 , - 144 , - 239 , - 210 , - 57 , - 28 , - 123 , - 94 , - 189 , - 160 , - 7 , - 226 , - 73 , - 44 , - 139 , - 110 , - 205 , - 176 , - 23 , - 242 , - 89 , - 60 , - 155 , - 126 , - 221 , - 192 , - 39 , - 10 , - 105 , - 76 , - 171 , - 142 , - 237 , - 208 , - 55 , - 26 , - 121 , - 92 , - 187 , - 158 , - 5 , - 224 , - 71 , - 42 , - 137 , - 108 , - 203 , - 174 , - 21 , - 240 , - 87 , - 58 , - 153 , - 124 , - 219 , - 190 , - 37 , - 8 , - 103 , - 74 , - 169 , - 140 , - 235 , - 206 , - 53 , - 24 , - 119 , - 90 , - 185 , - 156 , - 3 , - 222 , - 69 , - 40 , - 135 , - 106 , - 201 , - 172 , - 19 , - 238 , - 85 , - 56 , - 151 , - 122 , - 217 , - 188 , - 35 , - 6 , - 101 , - 72 , - 167 , - 138 , - 233 , - 204 , - 51 , - 22 , - 117 , - 88 , - 183 , - 154 , - 1 , - 220 , - 67 , - 38 , - 133 , - 104 , - 199 , - 170 , - 17 , - 236 , - 83 , - 54 , - 149 , - 120 , - 215 , - 186 , - 33 , - 4 , - 99 , - 70 , - 165 , - 136 , - 231 , - 202 , - 49 , - 20 , - 115 , - 86 , - 181 , - 152 , - 247 , - 218 , - 65 , - 36 , - 131 , - 102 , - 197 , - 168 , - 15 , - 234 , - 81 , - 52 , - 147 , - 118 , - 213 , - 184 , - 31 , - 2 , - 97 , - 68 , - 163 , - 134 , - 229 , - 200 , - 47 , - 18 , - 113 , - 84 , - 179 , - 150 , - 245 , - 216 , - 63 , - 34 , - 129 , - 100 , - 195 , - 166 , - 13 , - 232 , - 79 , - 50 , - 145 , - 116 , - 211 , - 182 , - 29 , - 0 , - 47 , - 158 , - 77 , - 60 , - 107 , - 218 , - 137 , - 120 , - 167 , - 22 , - 197 , - 180 , - 227 , - 82 , - 1 , - 240 , - 31 , - 142 , - 61 , - 44 , - 91 , - 202 , - 121 , - 104 , - 151 , - 6 , - 181 , - 164 , - 211 , - 66 , - 241 , - 224 , - 15 , - 126 , - 45 , - 28 , - 75 , - 186 , - 105 , - 88 , - 135 , - 246 , - 165 , - 148 , - 195 , - 50 , - 225 , - 208 , - 255 , - 110 , - 29 , - 12 , - 59 , - 170 , - 89 , - 72 , - 119 , - 230 , - 149 , - 132 , - 179 , - 34 , - 209 , - 192 , - 239 , - 94 , - 13 , - 252 , - 43 , - 154 , - 73 , - 56 , - 103 , - 214 , - 133 , - 116 , - 163 , - 18 , - 193 , - 176 , - 223 , - 78 , - 253 , - 236 , - 27 , - 138 , - 57 , - 40 , - 87 , - 198 , - 117 , - 100 , - 147 , - 2 , - 177 , - 160 , - 207 , - 62 , - 237 , - 220 , - 11 , - 122 , - 41 , - 24 , - 71 , - 182 , - 101 , - 84 , - 131 , - 242 , - 161 , - 144 , - 191 , - 46 , - 221 , - 204 , - 251 , - 106 , - 25 , - 8 , - 55 , - 166 , - 85 , - 68 , - 115 , - 226 , - 145 , - 128 , - 175 , - 30 , - 205 , - 188 , - 235 , - 90 , - 9 , - 248 , - 39 , - 150 , - 69 , - 52 , - 99 , - 210 , - 129 , - 112 , - 159 , - 14 , - 189 , - 172 , - 219 , - 74 , - 249 , - 232 , - 23 , - 134 , - 53 , - 36 , - 83 , - 194 , - 113 , - 96 , - 143 , - 254 , - 173 , - 156 , - 203 , - 58 , - 233 , - 216 , - 7 , - 118 , - 37 , - 20 , - 67 , - 178 , - 97 , - 80 , - 127 , - 238 , - 157 , - 140 , - 187 , - 42 , - 217 , - 200 , - 247 , - 102 , - 21 , - 4 , - 51 , - 162 , - 81 , - 64 , - 111 , - 222 , - 141 , - 124 , - 171 , - 26 , - 201 , - 184 , - 231 , - 86 , - 5 , - 244 , - 35 , - 146 , - 65 , - 48 , - 95 , - 206 , - 125 , - 108 , - 155 , - 10 , - 185 , - 168 , - 215 , - 70 , - 245 , - 228 , - 19 , - 130 , - 49 , - 32 , - 79 , - 190 , - 109 , - 92 , - 139 , - 250 , - 169 , - 152 , - 199 , - 54 , - 229 , - 212 , - 3 , - 114 , - 33 , - 16 , - 63 , - 174 , - 93 , - 76 , - 123 , - 234 , - 153 , - 136 , - 183 , - 38 , - 213 , - 196 , - 243 , - 98 , - 17 , - 0 , - 215 , - 34 , - 249 , - 68 , - 19 , - 102 , - 53 , - 136 , - 87 , - 170 , - 121 , - 204 , - 155 , - 238 , - 189 , - 8 , - 223 , - 42 , - 257 , - 76 , - 27 , - 110 , - 61 , - 144 , - 95 , - 178 , - 129 , - 212 , - 163 , - 246 , - 197 , - 16 , - 231 , - 50 , - 1 , - 84 , - 35 , - 118 , - 69 , - 152 , - 103 , - 186 , - 137 , - 220 , - 171 , - 254 , - 205 , - 24 , - 239 , - 58 , - 9 , - 92 , - 43 , - 126 , - 77 , - 160 , - 111 , - 194 , - 145 , - 228 , - 179 , - 262 , - 213 , - 32 , - 247 , - 66 , - 17 , - 100 , - 51 , - 134 , - 85 , - 168 , - 119 , - 202 , - 153 , - 236 , - 187 , - 6 , - 221 , - 40 , - 255 , - 74 , - 25 , - 108 , - 59 , - 142 , - 93 , - 176 , - 127 , - 210 , - 161 , - 244 , - 195 , - 14 , - 229 , - 48 , - 263 , - 82 , - 33 , - 116 , - 67 , - 150 , - 101 , - 184 , - 135 , - 218 , - 169 , - 252 , - 203 , - 22 , - 237 , - 56 , - 7 , - 90 , - 41 , - 124 , - 75 , - 158 , - 109 , - 192 , - 143 , - 226 , - 177 , - 260 , - 211 , - 30 , - 245 , - 64 , - 15 , - 98 , - 49 , - 132 , - 83 , - 166 , - 117 , - 200 , - 151 , - 234 , - 185 , - 4 , - 219 , - 38 , - 253 , - 72 , - 23 , - 106 , - 57 , - 140 , - 91 , - 174 , - 125 , - 208 , - 159 , - 242 , - 193 , - 12 , - 227 , - 46 , - 261 , - 80 , - 31 , - 114 , - 65 , - 148 , - 99 , - 182 , - 133 , - 216 , - 167 , - 250 , - 201 , - 20 , - 235 , - 54 , - 5 , - 88 , - 39 , - 122 , - 73 , - 156 , - 107 , - 190 , - 141 , - 224 , - 175 , - 258 , - 209 , - 28 , - 243 , - 62 , - 13 , - 96 , - 47 , - 130 , - 81 , - 164 , - 115 , - 198 , - 149 , - 232 , - 183 , - 2 , - 217 , - 36 , - 251 , - 70 , - 21 , - 104 , - 55 , - 138 , - 89 , - 172 , - 123 , - 206 , - 157 , - 240 , - 191 , - 10 , - 225 , - 44 , - 259 , - 78 , - 29 , - 112 , - 63 , - 146 , - 97 , - 180 , - 131 , - 214 , - 165 , - 248 , - 199 , - 18 , - 233 , - 52 , - 3 , - 86 , - 37 , - 120 , - 71 , - 154 , - 105 , - 188 , - 139 , - 222 , - 173 , - 256 , - 207 , - 26 , - 241 , - 60 , - 11 , - 94 , - 45 , - 128 , - 79 , - 162 , - 113 , - 196 , - 147 , - 230 , - 181 , - 0 , - 101 , - 66 , - 167 , - 132 , - 233 , - 198 , - 27 , - 264 , - 93 , - 58 , - 159 , - 124 , - 225 , - 190 , - 19 , - 256 , - 85 , - 50 , - 151 , - 116 , - 217 , - 182 , - 11 , - 248 , - 77 , - 42 , - 143 , - 108 , - 209 , - 174 , - 3 , - 240 , - 69 , - 34 , - 135 , - 100 , - 201 , - 166 , - 267 , - 232 , - 61 , - 26 , - 127 , - 92 , - 193 , - 158 , - 259 , - 224 , - 53 , - 18 , - 119 , - 84 , - 185 , - 150 , - 251 , - 216 , - 45 , - 10 , - 111 , - 76 , - 177 , - 142 , - 243 , - 208 , - 37 , - 2 , - 103 , - 68 , - 169 , - 134 , - 235 , - 200 , - 29 , - 266 , - 95 , - 60 , - 161 , - 126 , - 227 , - 192 , - 21 , - 258 , - 87 , - 52 , - 153 , - 118 , - 219 , - 184 , - 13 , - 250 , - 79 , - 44 , - 145 , - 110 , - 211 , - 176 , - 5 , - 242 , - 71 , - 36 , - 137 , - 102 , - 203 , - 168 , - 269 , - 234 , - 63 , - 28 , - 129 , - 94 , - 195 , - 160 , - 261 , - 226 , - 55 , - 20 , - 121 , - 86 , - 187 , - 152 , - 253 , - 218 , - 47 , - 12 , - 113 , - 78 , - 179 , - 144 , - 245 , - 210 , - 39 , - 4 , - 105 , - 70 , - 171 , - 136 , - 237 , - 202 , - 31 , - 268 , - 97 , - 62 , - 163 , - 128 , - 229 , - 194 , - 23 , - 260 , - 89 , - 54 , - 155 , - 120 , - 221 , - 186 , - 15 , - 252 , - 81 , - 46 , - 147 , - 112 , - 213 , - 178 , - 7 , - 244 , - 73 , - 38 , - 139 , - 104 , - 205 , - 170 , - 271 , - 236 , - 65 , - 30 , - 131 , - 96 , - 197 , - 162 , - 263 , - 228 , - 57 , - 22 , - 123 , - 88 , - 189 , - 154 , - 255 , - 220 , - 49 , - 14 , - 115 , - 80 , - 181 , - 146 , - 247 , - 212 , - 41 , - 6 , - 107 , - 72 , - 173 , - 138 , - 239 , - 204 , - 33 , - 270 , - 99 , - 64 , - 165 , - 130 , - 231 , - 196 , - 25 , - 262 , - 91 , - 56 , - 157 , - 122 , - 223 , - 188 , - 17 , - 254 , - 83 , - 48 , - 149 , - 114 , - 215 , - 180 , - 9 , - 246 , - 75 , - 40 , - 141 , - 106 , - 207 , - 172 , - 1 , - 238 , - 67 , - 32 , - 133 , - 98 , - 199 , - 164 , - 265 , - 230 , - 59 , - 24 , - 125 , - 90 , - 191 , - 156 , - 257 , - 222 , - 51 , - 16 , - 117 , - 82 , - 183 , - 148 , - 249 , - 214 , - 43 , - 8 , - 109 , - 74 , - 175 , - 140 , - 241 , - 206 , - 35 , - 0 , - 33 , - 206 , - 239 , - 132 , - 165 , - 58 , - 91 , - 264 , - 17 , - 190 , - 223 , - 116 , - 149 , - 42 , - 75 , - 248 , - 1 , - 174 , - 207 , - 100 , - 133 , - 26 , - 59 , - 232 , - 265 , - 158 , - 191 , - 84 , - 117 , - 10 , - 43 , - 216 , - 249 , - 142 , - 175 , - 68 , - 101 , - 274 , - 27 , - 200 , - 233 , - 126 , - 159 , - 52 , - 85 , - 258 , - 11 , - 184 , - 217 , - 110 , - 143 , - 36 , - 69 , - 242 , - 275 , - 168 , - 201 , - 94 , - 127 , - 20 , - 53 , - 226 , - 259 , - 152 , - 185 , - 78 , - 111 , - 4 , - 37 , - 210 , - 243 , - 136 , - 169 , - 62 , - 95 , - 268 , - 21 , - 194 , - 227 , - 120 , - 153 , - 46 , - 79 , - 252 , - 5 , - 178 , - 211 , - 104 , - 137 , - 30 , - 63 , - 236 , - 269 , - 162 , - 195 , - 88 , - 121 , - 14 , - 47 , - 220 , - 253 , - 146 , - 179 , - 72 , - 105 , - 278 , - 31 , - 204 , - 237 , - 130 , - 163 , - 56 , - 89 , - 262 , - 15 , - 188 , - 221 , - 114 , - 147 , - 40 , - 73 , - 246 , - 279 , - 172 , - 205 , - 98 , - 131 , - 24 , - 57 , - 230 , - 263 , - 156 , - 189 , - 82 , - 115 , - 8 , - 41 , - 214 , - 247 , - 140 , - 173 , - 66 , - 99 , - 272 , - 25 , - 198 , - 231 , - 124 , - 157 , - 50 , - 83 , - 256 , - 9 , - 182 , - 215 , - 108 , - 141 , - 34 , - 67 , - 240 , - 273 , - 166 , - 199 , - 92 , - 125 , - 18 , - 51 , - 224 , - 257 , - 150 , - 183 , - 76 , - 109 , - 2 , - 35 , - 208 , - 241 , - 134 , - 167 , - 60 , - 93 , - 266 , - 19 , - 192 , - 225 , - 118 , - 151 , - 44 , - 77 , - 250 , - 3 , - 176 , - 209 , - 102 , - 135 , - 28 , - 61 , - 234 , - 267 , - 160 , - 193 , - 86 , - 119 , - 12 , - 45 , - 218 , - 251 , - 144 , - 177 , - 70 , - 103 , - 276 , - 29 , - 202 , - 235 , - 128 , - 161 , - 54 , - 87 , - 260 , - 13 , - 186 , - 219 , - 112 , - 145 , - 38 , - 71 , - 244 , - 277 , - 170 , - 203 , - 96 , - 129 , - 22 , - 55 , - 228 , - 261 , - 154 , - 187 , - 80 , - 113 , - 6 , - 39 , - 212 , - 245 , - 138 , - 171 , - 64 , - 97 , - 270 , - 23 , - 196 , - 229 , - 122 , - 155 , - 48 , - 81 , - 254 , - 7 , - 180 , - 213 , - 106 , - 139 , - 32 , - 65 , - 238 , - 271 , - 164 , - 197 , - 90 , - 123 , - 16 , - 49 , - 222 , - 255 , - 148 , - 181 , - 74 , - 107 , - 0 , - 55 , - 182 , - 93 , - 76 , - 131 , - 258 , - 169 , - 152 , - 207 , - 46 , - 245 , - 228 , - 283 , - 122 , - 33 , - 16 , - 71 , - 198 , - 109 , - 92 , - 147 , - 274 , - 185 , - 168 , - 223 , - 62 , - 261 , - 244 , - 11 , - 138 , - 49 , - 32 , - 87 , - 214 , - 125 , - 108 , - 163 , - 2 , - 201 , - 184 , - 239 , - 78 , - 277 , - 260 , - 27 , - 154 , - 65 , - 48 , - 103 , - 230 , - 141 , - 124 , - 179 , - 18 , - 217 , - 200 , - 255 , - 94 , - 5 , - 276 , - 43 , - 170 , - 81 , - 64 , - 119 , - 246 , - 157 , - 140 , - 195 , - 34 , - 233 , - 216 , - 271 , - 110 , - 21 , - 4 , - 59 , - 186 , - 97 , - 80 , - 135 , - 262 , - 173 , - 156 , - 211 , - 50 , - 249 , - 232 , - 287 , - 126 , - 37 , - 20 , - 75 , - 202 , - 113 , - 96 , - 151 , - 278 , - 189 , - 172 , - 227 , - 66 , - 265 , - 248 , - 15 , - 142 , - 53 , - 36 , - 91 , - 218 , - 129 , - 112 , - 167 , - 6 , - 205 , - 188 , - 243 , - 82 , - 281 , - 264 , - 31 , - 158 , - 69 , - 52 , - 107 , - 234 , - 145 , - 128 , - 183 , - 22 , - 221 , - 204 , - 259 , - 98 , - 9 , - 280 , - 47 , - 174 , - 85 , - 68 , - 123 , - 250 , - 161 , - 144 , - 199 , - 38 , - 237 , - 220 , - 275 , - 114 , - 25 , - 8 , - 63 , - 190 , - 101 , - 84 , - 139 , - 266 , - 177 , - 160 , - 215 , - 54 , - 253 , - 236 , - 3 , - 130 , - 41 , - 24 , - 79 , - 206 , - 117 , - 100 , - 155 , - 282 , - 193 , - 176 , - 231 , - 70 , - 269 , - 252 , - 19 , - 146 , - 57 , - 40 , - 95 , - 222 , - 133 , - 116 , - 171 , - 10 , - 209 , - 192 , - 247 , - 86 , - 285 , - 268 , - 35 , - 162 , - 73 , - 56 , - 111 , - 238 , - 149 , - 132 , - 187 , - 26 , - 225 , - 208 , - 263 , - 102 , - 13 , - 284 , - 51 , - 178 , - 89 , - 72 , - 127 , - 254 , - 165 , - 148 , - 203 , - 42 , - 241 , - 224 , - 279 , - 118 , - 29 , - 12 , - 67 , - 194 , - 105 , - 88 , - 143 , - 270 , - 181 , - 164 , - 219 , - 58 , - 257 , - 240 , - 7 , - 134 , - 45 , - 28 , - 83 , - 210 , - 121 , - 104 , - 159 , - 286 , - 197 , - 180 , - 235 , - 74 , - 273 , - 256 , - 23 , - 150 , - 61 , - 44 , - 99 , - 226 , - 137 , - 120 , - 175 , - 14 , - 213 , - 196 , - 251 , - 90 , - 1 , - 272 , - 39 , - 166 , - 77 , - 60 , - 115 , - 242 , - 153 , - 136 , - 191 , - 30 , - 229 , - 212 , - 267 , - 106 , - 17 , - 0 , - 93 , - 38 , - 131 , - 76 , - 169 , - 114 , - 207 , - 152 , - 245 , - 190 , - 283 , - 228 , - 25 , - 266 , - 63 , - 8 , - 101 , - 46 , - 139 , - 84 , - 177 , - 122 , - 215 , - 160 , - 253 , - 198 , - 291 , - 236 , - 33 , - 274 , - 71 , - 16 , - 109 , - 54 , - 147 , - 92 , - 185 , - 130 , - 223 , - 168 , - 261 , - 206 , - 3 , - 244 , - 41 , - 282 , - 79 , - 24 , - 117 , - 62 , - 155 , - 100 , - 193 , - 138 , - 231 , - 176 , - 269 , - 214 , - 11 , - 252 , - 49 , - 290 , - 87 , - 32 , - 125 , - 70 , - 163 , - 108 , - 201 , - 146 , - 239 , - 184 , - 277 , - 222 , - 19 , - 260 , - 57 , - 2 , - 95 , - 40 , - 133 , - 78 , - 171 , - 116 , - 209 , - 154 , - 247 , - 192 , - 285 , - 230 , - 27 , - 268 , - 65 , - 10 , - 103 , - 48 , - 141 , - 86 , - 179 , - 124 , - 217 , - 162 , - 255 , - 200 , - 293 , - 238 , - 35 , - 276 , - 73 , - 18 , - 111 , - 56 , - 149 , - 94 , - 187 , - 132 , - 225 , - 170 , - 263 , - 208 , - 5 , - 246 , - 43 , - 284 , - 81 , - 26 , - 119 , - 64 , - 157 , - 102 , - 195 , - 140 , - 233 , - 178 , - 271 , - 216 , - 13 , - 254 , - 51 , - 292 , - 89 , - 34 , - 127 , - 72 , - 165 , - 110 , - 203 , - 148 , - 241 , - 186 , - 279 , - 224 , - 21 , - 262 , - 59 , - 4 , - 97 , - 42 , - 135 , - 80 , - 173 , - 118 , - 211 , - 156 , - 249 , - 194 , - 287 , - 232 , - 29 , - 270 , - 67 , - 12 , - 105 , - 50 , - 143 , - 88 , - 181 , - 126 , - 219 , - 164 , - 257 , - 202 , - 295 , - 240 , - 37 , - 278 , - 75 , - 20 , - 113 , - 58 , - 151 , - 96 , - 189 , - 134 , - 227 , - 172 , - 265 , - 210 , - 7 , - 248 , - 45 , - 286 , - 83 , - 28 , - 121 , - 66 , - 159 , - 104 , - 197 , - 142 , - 235 , - 180 , - 273 , - 218 , - 15 , - 256 , - 53 , - 294 , - 91 , - 36 , - 129 , - 74 , - 167 , - 112 , - 205 , - 150 , - 243 , - 188 , - 281 , - 226 , - 23 , - 264 , - 61 , - 6 , - 99 , - 44 , - 137 , - 82 , - 175 , - 120 , - 213 , - 158 , - 251 , - 196 , - 289 , - 234 , - 31 , - 272 , - 69 , - 14 , - 107 , - 52 , - 145 , - 90 , - 183 , - 128 , - 221 , - 166 , - 259 , - 204 , - 1 , - 242 , - 39 , - 280 , - 77 , - 22 , - 115 , - 60 , - 153 , - 98 , - 191 , - 136 , - 229 , - 174 , - 267 , - 212 , - 9 , - 250 , - 47 , - 288 , - 85 , - 30 , - 123 , - 68 , - 161 , - 106 , - 199 , - 144 , - 237 , - 182 , - 275 , - 220 , - 17 , - 258 , - 55 , - 0 , - 113 , - 74 , - 187 , - 148 , - 261 , - 222 , - 31 , - 296 , - 105 , - 66 , - 179 , - 140 , - 253 , - 214 , - 23 , - 288 , - 97 , - 58 , - 171 , - 132 , - 245 , - 206 , - 15 , - 280 , - 89 , - 50 , - 163 , - 124 , - 237 , - 198 , - 7 , - 272 , - 81 , - 42 , - 155 , - 116 , - 229 , - 190 , - 303 , - 264 , - 73 , - 34 , - 147 , - 108 , - 221 , - 182 , - 295 , - 256 , - 65 , - 26 , - 139 , - 100 , - 213 , - 174 , - 287 , - 248 , - 57 , - 18 , - 131 , - 92 , - 205 , - 166 , - 279 , - 240 , - 49 , - 10 , - 123 , - 84 , - 197 , - 158 , - 271 , - 232 , - 41 , - 2 , - 115 , - 76 , - 189 , - 150 , - 263 , - 224 , - 33 , - 298 , - 107 , - 68 , - 181 , - 142 , - 255 , - 216 , - 25 , - 290 , - 99 , - 60 , - 173 , - 134 , - 247 , - 208 , - 17 , - 282 , - 91 , - 52 , - 165 , - 126 , - 239 , - 200 , - 9 , - 274 , - 83 , - 44 , - 157 , - 118 , - 231 , - 192 , - 1 , - 266 , - 75 , - 36 , - 149 , - 110 , - 223 , - 184 , - 297 , - 258 , - 67 , - 28 , - 141 , - 102 , - 215 , - 176 , - 289 , - 250 , - 59 , - 20 , - 133 , - 94 , - 207 , - 168 , - 281 , - 242 , - 51 , - 12 , - 125 , - 86 , - 199 , - 160 , - 273 , - 234 , - 43 , - 4 , - 117 , - 78 , - 191 , - 152 , - 265 , - 226 , - 35 , - 300 , - 109 , - 70 , - 183 , - 144 , - 257 , - 218 , - 27 , - 292 , - 101 , - 62 , - 175 , - 136 , - 249 , - 210 , - 19 , - 284 , - 93 , - 54 , - 167 , - 128 , - 241 , - 202 , - 11 , - 276 , - 85 , - 46 , - 159 , - 120 , - 233 , - 194 , - 3 , - 268 , - 77 , - 38 , - 151 , - 112 , - 225 , - 186 , - 299 , - 260 , - 69 , - 30 , - 143 , - 104 , - 217 , - 178 , - 291 , - 252 , - 61 , - 22 , - 135 , - 96 , - 209 , - 170 , - 283 , - 244 , - 53 , - 14 , - 127 , - 88 , - 201 , - 162 , - 275 , - 236 , - 45 , - 6 , - 119 , - 80 , - 193 , - 154 , - 267 , - 228 , - 37 , - 302 , - 111 , - 72 , - 185 , - 146 , - 259 , - 220 , - 29 , - 294 , - 103 , - 64 , - 177 , - 138 , - 251 , - 212 , - 21 , - 286 , - 95 , - 56 , - 169 , - 130 , - 243 , - 204 , - 13 , - 278 , - 87 , - 48 , - 161 , - 122 , - 235 , - 196 , - 5 , - 270 , - 79 , - 40 , - 153 , - 114 , - 227 , - 188 , - 301 , - 262 , - 71 , - 32 , - 145 , - 106 , - 219 , - 180 , - 293 , - 254 , - 63 , - 24 , - 137 , - 98 , - 211 , - 172 , - 285 , - 246 , - 55 , - 16 , - 129 , - 90 , - 203 , - 164 , - 277 , - 238 , - 47 , - 8 , - 121 , - 82 , - 195 , - 156 , - 269 , - 230 , - 39 , - 0 , - 97 , - 38 , - 135 , - 76 , - 173 , - 114 , - 211 , - 152 , - 249 , - 190 , - 287 , - 228 , - 13 , - 266 , - 51 , - 304 , - 89 , - 30 , - 127 , - 68 , - 165 , - 106 , - 203 , - 144 , - 241 , - 182 , - 279 , - 220 , - 5 , - 258 , - 43 , - 296 , - 81 , - 22 , - 119 , - 60 , - 157 , - 98 , - 195 , - 136 , - 233 , - 174 , - 271 , - 212 , - 309 , - 250 , - 35 , - 288 , - 73 , - 14 , - 111 , - 52 , - 149 , - 90 , - 187 , - 128 , - 225 , - 166 , - 263 , - 204 , - 301 , - 242 , - 27 , - 280 , - 65 , - 6 , - 103 , - 44 , - 141 , - 82 , - 179 , - 120 , - 217 , - 158 , - 255 , - 196 , - 293 , - 234 , - 19 , - 272 , - 57 , - 310 , - 95 , - 36 , - 133 , - 74 , - 171 , - 112 , - 209 , - 150 , - 247 , - 188 , - 285 , - 226 , - 11 , - 264 , - 49 , - 302 , - 87 , - 28 , - 125 , - 66 , - 163 , - 104 , - 201 , - 142 , - 239 , - 180 , - 277 , - 218 , - 3 , - 256 , - 41 , - 294 , - 79 , - 20 , - 117 , - 58 , - 155 , - 96 , - 193 , - 134 , - 231 , - 172 , - 269 , - 210 , - 307 , - 248 , - 33 , - 286 , - 71 , - 12 , - 109 , - 50 , - 147 , - 88 , - 185 , - 126 , - 223 , - 164 , - 261 , - 202 , - 299 , - 240 , - 25 , - 278 , - 63 , - 4 , - 101 , - 42 , - 139 , - 80 , - 177 , - 118 , - 215 , - 156 , - 253 , - 194 , - 291 , - 232 , - 17 , - 270 , - 55 , - 308 , - 93 , - 34 , - 131 , - 72 , - 169 , - 110 , - 207 , - 148 , - 245 , - 186 , - 283 , - 224 , - 9 , - 262 , - 47 , - 300 , - 85 , - 26 , - 123 , - 64 , - 161 , - 102 , - 199 , - 140 , - 237 , - 178 , - 275 , - 216 , - 1 , - 254 , - 39 , - 292 , - 77 , - 18 , - 115 , - 56 , - 153 , - 94 , - 191 , - 132 , - 229 , - 170 , - 267 , - 208 , - 305 , - 246 , - 31 , - 284 , - 69 , - 10 , - 107 , - 48 , - 145 , - 86 , - 183 , - 124 , - 221 , - 162 , - 259 , - 200 , - 297 , - 238 , - 23 , - 276 , - 61 , - 2 , - 99 , - 40 , - 137 , - 78 , - 175 , - 116 , - 213 , - 154 , - 251 , - 192 , - 289 , - 230 , - 15 , - 268 , - 53 , - 306 , - 91 , - 32 , - 129 , - 70 , - 167 , - 108 , - 205 , - 146 , - 243 , - 184 , - 281 , - 222 , - 7 , - 260 , - 45 , - 298 , - 83 , - 24 , - 121 , - 62 , - 159 , - 100 , - 197 , - 138 , - 235 , - 176 , - 273 , - 214 , - 311 , - 252 , - 37 , - 290 , - 75 , - 16 , - 113 , - 54 , - 151 , - 92 , - 189 , - 130 , - 227 , - 168 , - 265 , - 206 , - 303 , - 244 , - 29 , - 282 , - 67 , - 8 , - 105 , - 46 , - 143 , - 84 , - 181 , - 122 , - 219 , - 160 , - 257 , - 198 , - 295 , - 236 , - 21 , - 274 , - 59 , - 0 , - 141 , - 202 , - 183 , - 84 , - 225 , - 286 , - 267 , - 168 , - 309 , - 50 , - 31 , - 252 , - 73 , - 134 , - 115 , - 16 , - 157 , - 218 , - 199 , - 100 , - 241 , - 302 , - 283 , - 184 , - 5 , - 66 , - 47 , - 268 , - 89 , - 150 , - 131 , - 32 , - 173 , - 234 , - 215 , - 116 , - 257 , - 318 , - 299 , - 200 , - 21 , - 82 , - 63 , - 284 , - 105 , - 166 , - 147 , - 48 , - 189 , - 250 , - 231 , - 132 , - 273 , - 14 , - 315 , - 216 , - 37 , - 98 , - 79 , - 300 , - 121 , - 182 , - 163 , - 64 , - 205 , - 266 , - 247 , - 148 , - 289 , - 30 , - 11 , - 232 , - 53 , - 114 , - 95 , - 316 , - 137 , - 198 , - 179 , - 80 , - 221 , - 282 , - 263 , - 164 , - 305 , - 46 , - 27 , - 248 , - 69 , - 130 , - 111 , - 12 , - 153 , - 214 , - 195 , - 96 , - 237 , - 298 , - 279 , - 180 , - 1 , - 62 , - 43 , - 264 , - 85 , - 146 , - 127 , - 28 , - 169 , - 230 , - 211 , - 112 , - 253 , - 314 , - 295 , - 196 , - 17 , - 78 , - 59 , - 280 , - 101 , - 162 , - 143 , - 44 , - 185 , - 246 , - 227 , - 128 , - 269 , - 10 , - 311 , - 212 , - 33 , - 94 , - 75 , - 296 , - 117 , - 178 , - 159 , - 60 , - 201 , - 262 , - 243 , - 144 , - 285 , - 26 , - 7 , - 228 , - 49 , - 110 , - 91 , - 312 , - 133 , - 194 , - 175 , - 76 , - 217 , - 278 , - 259 , - 160 , - 301 , - 42 , - 23 , - 244 , - 65 , - 126 , - 107 , - 8 , - 149 , - 210 , - 191 , - 92 , - 233 , - 294 , - 275 , - 176 , - 317 , - 58 , - 39 , - 260 , - 81 , - 142 , - 123 , - 24 , - 165 , - 226 , - 207 , - 108 , - 249 , - 310 , - 291 , - 192 , - 13 , - 74 , - 55 , - 276 , - 97 , - 158 , - 139 , - 40 , - 181 , - 242 , - 223 , - 124 , - 265 , - 6 , - 307 , - 208 , - 29 , - 90 , - 71 , - 292 , - 113 , - 174 , - 155 , - 56 , - 197 , - 258 , - 239 , - 140 , - 281 , - 22 , - 3 , - 224 , - 45 , - 106 , - 87 , - 308 , - 129 , - 190 , - 171 , - 72 , - 213 , - 274 , - 255 , - 156 , - 297 , - 38 , - 19 , - 240 , - 61 , - 122 , - 103 , - 4 , - 145 , - 206 , - 187 , - 88 , - 229 , - 290 , - 271 , - 172 , - 313 , - 54 , - 35 , - 256 , - 77 , - 138 , - 119 , - 20 , - 161 , - 222 , - 203 , - 104 , - 245 , - 306 , - 287 , - 188 , - 9 , - 70 , - 51 , - 272 , - 93 , - 154 , - 135 , - 36 , - 177 , - 238 , - 219 , - 120 , - 261 , - 2 , - 303 , - 204 , - 25 , - 86 , - 67 , - 288 , - 109 , - 170 , - 151 , - 52 , - 193 , - 254 , - 235 , - 136 , - 277 , - 18 , - 319 , - 220 , - 41 , - 102 , - 83 , - 304 , - 125 , - 186 , - 167 , - 68 , - 209 , - 270 , - 251 , - 152 , - 293 , - 34 , - 15 , - 236 , - 57 , - 118 , - 99 , - 0 , - 103 , - 42 , - 145 , - 84 , - 187 , - 126 , - 229 , - 168 , - 271 , - 210 , - 313 , - 252 , - 27 , - 294 , - 69 , - 8 , - 111 , - 50 , - 153 , - 92 , - 195 , - 134 , - 237 , - 176 , - 279 , - 218 , - 321 , - 260 , - 35 , - 302 , - 77 , - 16 , - 119 , - 58 , - 161 , - 100 , - 203 , - 142 , - 245 , - 184 , - 287 , - 226 , - 1 , - 268 , - 43 , - 310 , - 85 , - 24 , - 127 , - 66 , - 169 , - 108 , - 211 , - 150 , - 253 , - 192 , - 295 , - 234 , - 9 , - 276 , - 51 , - 318 , - 93 , - 32 , - 135 , - 74 , - 177 , - 116 , - 219 , - 158 , - 261 , - 200 , - 303 , - 242 , - 17 , - 284 , - 59 , - 326 , - 101 , - 40 , - 143 , - 82 , - 185 , - 124 , - 227 , - 166 , - 269 , - 208 , - 311 , - 250 , - 25 , - 292 , - 67 , - 6 , - 109 , - 48 , - 151 , - 90 , - 193 , - 132 , - 235 , - 174 , - 277 , - 216 , - 319 , - 258 , - 33 , - 300 , - 75 , - 14 , - 117 , - 56 , - 159 , - 98 , - 201 , - 140 , - 243 , - 182 , - 285 , - 224 , - 327 , - 266 , - 41 , - 308 , - 83 , - 22 , - 125 , - 64 , - 167 , - 106 , - 209 , - 148 , - 251 , - 190 , - 293 , - 232 , - 7 , - 274 , - 49 , - 316 , - 91 , - 30 , - 133 , - 72 , - 175 , - 114 , - 217 , - 156 , - 259 , - 198 , - 301 , - 240 , - 15 , - 282 , - 57 , - 324 , - 99 , - 38 , - 141 , - 80 , - 183 , - 122 , - 225 , - 164 , - 267 , - 206 , - 309 , - 248 , - 23 , - 290 , - 65 , - 4 , - 107 , - 46 , - 149 , - 88 , - 191 , - 130 , - 233 , - 172 , - 275 , - 214 , - 317 , - 256 , - 31 , - 298 , - 73 , - 12 , - 115 , - 54 , - 157 , - 96 , - 199 , - 138 , - 241 , - 180 , - 283 , - 222 , - 325 , - 264 , - 39 , - 306 , - 81 , - 20 , - 123 , - 62 , - 165 , - 104 , - 207 , - 146 , - 249 , - 188 , - 291 , - 230 , - 5 , - 272 , - 47 , - 314 , - 89 , - 28 , - 131 , - 70 , - 173 , - 112 , - 215 , - 154 , - 257 , - 196 , - 299 , - 238 , - 13 , - 280 , - 55 , - 322 , - 97 , - 36 , - 139 , - 78 , - 181 , - 120 , - 223 , - 162 , - 265 , - 204 , - 307 , - 246 , - 21 , - 288 , - 63 , - 2 , - 105 , - 44 , - 147 , - 86 , - 189 , - 128 , - 231 , - 170 , - 273 , - 212 , - 315 , - 254 , - 29 , - 296 , - 71 , - 10 , - 113 , - 52 , - 155 , - 94 , - 197 , - 136 , - 239 , - 178 , - 281 , - 220 , - 323 , - 262 , - 37 , - 304 , - 79 , - 18 , - 121 , - 60 , - 163 , - 102 , - 205 , - 144 , - 247 , - 186 , - 289 , - 228 , - 3 , - 270 , - 45 , - 312 , - 87 , - 26 , - 129 , - 68 , - 171 , - 110 , - 213 , - 152 , - 255 , - 194 , - 297 , - 236 , - 11 , - 278 , - 53 , - 320 , - 95 , - 34 , - 137 , - 76 , - 179 , - 118 , - 221 , - 160 , - 263 , - 202 , - 305 , - 244 , - 19 , - 286 , - 61 , - 0 , - 199 , - 230 , - 93 , - 124 , - 323 , - 18 , - 217 , - 248 , - 111 , - 142 , - 5 , - 36 , - 235 , - 266 , - 129 , - 160 , - 23 , - 54 , - 253 , - 284 , - 147 , - 178 , - 41 , - 72 , - 271 , - 302 , - 165 , - 196 , - 59 , - 90 , - 289 , - 320 , - 183 , - 214 , - 77 , - 108 , - 307 , - 2 , - 201 , - 232 , - 95 , - 126 , - 325 , - 20 , - 219 , - 250 , - 113 , - 144 , - 7 , - 38 , - 237 , - 268 , - 131 , - 162 , - 25 , - 56 , - 255 , - 286 , - 149 , - 180 , - 43 , - 74 , - 273 , - 304 , - 167 , - 198 , - 61 , - 92 , - 291 , - 322 , - 185 , - 216 , - 79 , - 110 , - 309 , - 4 , - 203 , - 234 , - 97 , - 128 , - 327 , - 22 , - 221 , - 252 , - 115 , - 146 , - 9 , - 40 , - 239 , - 270 , - 133 , - 164 , - 27 , - 58 , - 257 , - 288 , - 151 , - 182 , - 45 , - 76 , - 275 , - 306 , - 169 , - 200 , - 63 , - 94 , - 293 , - 324 , - 187 , - 218 , - 81 , - 112 , - 311 , - 6 , - 205 , - 236 , - 99 , - 130 , - 329 , - 24 , - 223 , - 254 , - 117 , - 148 , - 11 , - 42 , - 241 , - 272 , - 135 , - 166 , - 29 , - 60 , - 259 , - 290 , - 153 , - 184 , - 47 , - 78 , - 277 , - 308 , - 171 , - 202 , - 65 , - 96 , - 295 , - 326 , - 189 , - 220 , - 83 , - 114 , - 313 , - 8 , - 207 , - 238 , - 101 , - 132 , - 331 , - 26 , - 225 , - 256 , - 119 , - 150 , - 13 , - 44 , - 243 , - 274 , - 137 , - 168 , - 31 , - 62 , - 261 , - 292 , - 155 , - 186 , - 49 , - 80 , - 279 , - 310 , - 173 , - 204 , - 67 , - 98 , - 297 , - 328 , - 191 , - 222 , - 85 , - 116 , - 315 , - 10 , - 209 , - 240 , - 103 , - 134 , - 333 , - 28 , - 227 , - 258 , - 121 , - 152 , - 15 , - 46 , - 245 , - 276 , - 139 , - 170 , - 33 , - 64 , - 263 , - 294 , - 157 , - 188 , - 51 , - 82 , - 281 , - 312 , - 175 , - 206 , - 69 , - 100 , - 299 , - 330 , - 193 , - 224 , - 87 , - 118 , - 317 , - 12 , - 211 , - 242 , - 105 , - 136 , - 335 , - 30 , - 229 , - 260 , - 123 , - 154 , - 17 , - 48 , - 247 , - 278 , - 141 , - 172 , - 35 , - 66 , - 265 , - 296 , - 159 , - 190 , - 53 , - 84 , - 283 , - 314 , - 177 , - 208 , - 71 , - 102 , - 301 , - 332 , - 195 , - 226 , - 89 , - 120 , - 319 , - 14 , - 213 , - 244 , - 107 , - 138 , - 1 , - 32 , - 231 , - 262 , - 125 , - 156 , - 19 , - 50 , - 249 , - 280 , - 143 , - 174 , - 37 , - 68 , - 267 , - 298 , - 161 , - 192 , - 55 , - 86 , - 285 , - 316 , - 179 , - 210 , - 73 , - 104 , - 303 , - 334 , - 197 , - 228 , - 91 , - 122 , - 321 , - 16 , - 215 , - 246 , - 109 , - 140 , - 3 , - 34 , - 233 , - 264 , - 127 , - 158 , - 21 , - 52 , - 251 , - 282 , - 145 , - 176 , - 39 , - 70 , - 269 , - 300 , - 163 , - 194 , - 57 , - 88 , - 287 , - 318 , - 181 , - 212 , - 75 , - 106 , - 305 , - 0 , - 279 , - 42 , - 321 , - 84 , - 19 , - 126 , - 61 , - 168 , - 103 , - 210 , - 145 , - 252 , - 187 , - 294 , - 229 , - 336 , - 271 , - 34 , - 313 , - 76 , - 11 , - 118 , - 53 , - 160 , - 95 , - 202 , - 137 , - 244 , - 179 , - 286 , - 221 , - 328 , - 263 , - 26 , - 305 , - 68 , - 3 , - 110 , - 45 , - 152 , - 87 , - 194 , - 129 , - 236 , - 171 , - 278 , - 213 , - 320 , - 255 , - 18 , - 297 , - 60 , - 339 , - 102 , - 37 , - 144 , - 79 , - 186 , - 121 , - 228 , - 163 , - 270 , - 205 , - 312 , - 247 , - 10 , - 289 , - 52 , - 331 , - 94 , - 29 , - 136 , - 71 , - 178 , - 113 , - 220 , - 155 , - 262 , - 197 , - 304 , - 239 , - 2 , - 281 , - 44 , - 323 , - 86 , - 21 , - 128 , - 63 , - 170 , - 105 , - 212 , - 147 , - 254 , - 189 , - 296 , - 231 , - 338 , - 273 , - 36 , - 315 , - 78 , - 13 , - 120 , - 55 , - 162 , - 97 , - 204 , - 139 , - 246 , - 181 , - 288 , - 223 , - 330 , - 265 , - 28 , - 307 , - 70 , - 5 , - 112 , - 47 , - 154 , - 89 , - 196 , - 131 , - 238 , - 173 , - 280 , - 215 , - 322 , - 257 , - 20 , - 299 , - 62 , - 341 , - 104 , - 39 , - 146 , - 81 , - 188 , - 123 , - 230 , - 165 , - 272 , - 207 , - 314 , - 249 , - 12 , - 291 , - 54 , - 333 , - 96 , - 31 , - 138 , - 73 , - 180 , - 115 , - 222 , - 157 , - 264 , - 199 , - 306 , - 241 , - 4 , - 283 , - 46 , - 325 , - 88 , - 23 , - 130 , - 65 , - 172 , - 107 , - 214 , - 149 , - 256 , - 191 , - 298 , - 233 , - 340 , - 275 , - 38 , - 317 , - 80 , - 15 , - 122 , - 57 , - 164 , - 99 , - 206 , - 141 , - 248 , - 183 , - 290 , - 225 , - 332 , - 267 , - 30 , - 309 , - 72 , - 7 , - 114 , - 49 , - 156 , - 91 , - 198 , - 133 , - 240 , - 175 , - 282 , - 217 , - 324 , - 259 , - 22 , - 301 , - 64 , - 343 , - 106 , - 41 , - 148 , - 83 , - 190 , - 125 , - 232 , - 167 , - 274 , - 209 , - 316 , - 251 , - 14 , - 293 , - 56 , - 335 , - 98 , - 33 , - 140 , - 75 , - 182 , - 117 , - 224 , - 159 , - 266 , - 201 , - 308 , - 243 , - 6 , - 285 , - 48 , - 327 , - 90 , - 25 , - 132 , - 67 , - 174 , - 109 , - 216 , - 151 , - 258 , - 193 , - 300 , - 235 , - 342 , - 277 , - 40 , - 319 , - 82 , - 17 , - 124 , - 59 , - 166 , - 101 , - 208 , - 143 , - 250 , - 185 , - 292 , - 227 , - 334 , - 269 , - 32 , - 311 , - 74 , - 9 , - 116 , - 51 , - 158 , - 93 , - 200 , - 135 , - 242 , - 177 , - 284 , - 219 , - 326 , - 261 , - 24 , - 303 , - 66 , - 1 , - 108 , - 43 , - 150 , - 85 , - 192 , - 127 , - 234 , - 169 , - 276 , - 211 , - 318 , - 253 , - 16 , - 295 , - 58 , - 337 , - 100 , - 35 , - 142 , - 77 , - 184 , - 119 , - 226 , - 161 , - 268 , - 203 , - 310 , - 245 , - 8 , - 287 , - 50 , - 329 , - 92 , - 27 , - 134 , - 69 , - 176 , - 111 , - 218 , - 153 , - 260 , - 195 , - 302 , - 237 , - 0 , - 65 , - 218 , - 107 , - 84 , - 149 , - 302 , - 191 , - 168 , - 233 , - 34 , - 275 , - 252 , - 317 , - 118 , - 7 , - 336 , - 49 , - 202 , - 91 , - 68 , - 133 , - 286 , - 175 , - 152 , - 217 , - 18 , - 259 , - 236 , - 301 , - 102 , - 343 , - 320 , - 33 , - 186 , - 75 , - 52 , - 117 , - 270 , - 159 , - 136 , - 201 , - 2 , - 243 , - 220 , - 285 , - 86 , - 327 , - 304 , - 17 , - 170 , - 59 , - 36 , - 101 , - 254 , - 143 , - 120 , - 185 , - 338 , - 227 , - 204 , - 269 , - 70 , - 311 , - 288 , - 1 , - 154 , - 43 , - 20 , - 85 , - 238 , - 127 , - 104 , - 169 , - 322 , - 211 , - 188 , - 253 , - 54 , - 295 , - 272 , - 337 , - 138 , - 27 , - 4 , - 69 , - 222 , - 111 , - 88 , - 153 , - 306 , - 195 , - 172 , - 237 , - 38 , - 279 , - 256 , - 321 , - 122 , - 11 , - 340 , - 53 , - 206 , - 95 , - 72 , - 137 , - 290 , - 179 , - 156 , - 221 , - 22 , - 263 , - 240 , - 305 , - 106 , - 347 , - 324 , - 37 , - 190 , - 79 , - 56 , - 121 , - 274 , - 163 , - 140 , - 205 , - 6 , - 247 , - 224 , - 289 , - 90 , - 331 , - 308 , - 21 , - 174 , - 63 , - 40 , - 105 , - 258 , - 147 , - 124 , - 189 , - 342 , - 231 , - 208 , - 273 , - 74 , - 315 , - 292 , - 5 , - 158 , - 47 , - 24 , - 89 , - 242 , - 131 , - 108 , - 173 , - 326 , - 215 , - 192 , - 257 , - 58 , - 299 , - 276 , - 341 , - 142 , - 31 , - 8 , - 73 , - 226 , - 115 , - 92 , - 157 , - 310 , - 199 , - 176 , - 241 , - 42 , - 283 , - 260 , - 325 , - 126 , - 15 , - 344 , - 57 , - 210 , - 99 , - 76 , - 141 , - 294 , - 183 , - 160 , - 225 , - 26 , - 267 , - 244 , - 309 , - 110 , - 351 , - 328 , - 41 , - 194 , - 83 , - 60 , - 125 , - 278 , - 167 , - 144 , - 209 , - 10 , - 251 , - 228 , - 293 , - 94 , - 335 , - 312 , - 25 , - 178 , - 67 , - 44 , - 109 , - 262 , - 151 , - 128 , - 193 , - 346 , - 235 , - 212 , - 277 , - 78 , - 319 , - 296 , - 9 , - 162 , - 51 , - 28 , - 93 , - 246 , - 135 , - 112 , - 177 , - 330 , - 219 , - 196 , - 261 , - 62 , - 303 , - 280 , - 345 , - 146 , - 35 , - 12 , - 77 , - 230 , - 119 , - 96 , - 161 , - 314 , - 203 , - 180 , - 245 , - 46 , - 287 , - 264 , - 329 , - 130 , - 19 , - 348 , - 61 , - 214 , - 103 , - 80 , - 145 , - 298 , - 187 , - 164 , - 229 , - 30 , - 271 , - 248 , - 313 , - 114 , - 3 , - 332 , - 45 , - 198 , - 87 , - 64 , - 129 , - 282 , - 171 , - 148 , - 213 , - 14 , - 255 , - 232 , - 297 , - 98 , - 339 , - 316 , - 29 , - 182 , - 71 , - 48 , - 113 , - 266 , - 155 , - 132 , - 197 , - 350 , - 239 , - 216 , - 281 , - 82 , - 323 , - 300 , - 13 , - 166 , - 55 , - 32 , - 97 , - 250 , - 139 , - 116 , - 181 , - 334 , - 223 , - 200 , - 265 , - 66 , - 307 , - 284 , - 349 , - 150 , - 39 , - 16 , - 81 , - 234 , - 123 , - 100 , - 165 , - 318 , - 207 , - 184 , - 249 , - 50 , - 291 , - 268 , - 333 , - 134 , - 23 , - 0 , - 223 , - 266 , - 129 , - 172 , - 35 , - 78 , - 301 , - 344 , - 207 , - 250 , - 113 , - 156 , - 19 , - 62 , - 285 , - 328 , - 191 , - 234 , - 97 , - 140 , - 3 , - 46 , - 269 , - 312 , - 175 , - 218 , - 81 , - 124 , - 347 , - 30 , - 253 , - 296 , - 159 , - 202 , - 65 , - 108 , - 331 , - 14 , - 237 , - 280 , - 143 , - 186 , - 49 , - 92 , - 315 , - 358 , - 221 , - 264 , - 127 , - 170 , - 33 , - 76 , - 299 , - 342 , - 205 , - 248 , - 111 , - 154 , - 17 , - 60 , - 283 , - 326 , - 189 , - 232 , - 95 , - 138 , - 1 , - 44 , - 267 , - 310 , - 173 , - 216 , - 79 , - 122 , - 345 , - 28 , - 251 , - 294 , - 157 , - 200 , - 63 , - 106 , - 329 , - 12 , - 235 , - 278 , - 141 , - 184 , - 47 , - 90 , - 313 , - 356 , - 219 , - 262 , - 125 , - 168 , - 31 , - 74 , - 297 , - 340 , - 203 , - 246 , - 109 , - 152 , - 15 , - 58 , - 281 , - 324 , - 187 , - 230 , - 93 , - 136 , - 359 , - 42 , - 265 , - 308 , - 171 , - 214 , - 77 , - 120 , - 343 , - 26 , - 249 , - 292 , - 155 , - 198 , - 61 , - 104 , - 327 , - 10 , - 233 , - 276 , - 139 , - 182 , - 45 , - 88 , - 311 , - 354 , - 217 , - 260 , - 123 , - 166 , - 29 , - 72 , - 295 , - 338 , - 201 , - 244 , - 107 , - 150 , - 13 , - 56 , - 279 , - 322 , - 185 , - 228 , - 91 , - 134 , - 357 , - 40 , - 263 , - 306 , - 169 , - 212 , - 75 , - 118 , - 341 , - 24 , - 247 , - 290 , - 153 , - 196 , - 59 , - 102 , - 325 , - 8 , - 231 , - 274 , - 137 , - 180 , - 43 , - 86 , - 309 , - 352 , - 215 , - 258 , - 121 , - 164 , - 27 , - 70 , - 293 , - 336 , - 199 , - 242 , - 105 , - 148 , - 11 , - 54 , - 277 , - 320 , - 183 , - 226 , - 89 , - 132 , - 355 , - 38 , - 261 , - 304 , - 167 , - 210 , - 73 , - 116 , - 339 , - 22 , - 245 , - 288 , - 151 , - 194 , - 57 , - 100 , - 323 , - 6 , - 229 , - 272 , - 135 , - 178 , - 41 , - 84 , - 307 , - 350 , - 213 , - 256 , - 119 , - 162 , - 25 , - 68 , - 291 , - 334 , - 197 , - 240 , - 103 , - 146 , - 9 , - 52 , - 275 , - 318 , - 181 , - 224 , - 87 , - 130 , - 353 , - 36 , - 259 , - 302 , - 165 , - 208 , - 71 , - 114 , - 337 , - 20 , - 243 , - 286 , - 149 , - 192 , - 55 , - 98 , - 321 , - 4 , - 227 , - 270 , - 133 , - 176 , - 39 , - 82 , - 305 , - 348 , - 211 , - 254 , - 117 , - 160 , - 23 , - 66 , - 289 , - 332 , - 195 , - 238 , - 101 , - 144 , - 7 , - 50 , - 273 , - 316 , - 179 , - 222 , - 85 , - 128 , - 351 , - 34 , - 257 , - 300 , - 163 , - 206 , - 69 , - 112 , - 335 , - 18 , - 241 , - 284 , - 147 , - 190 , - 53 , - 96 , - 319 , - 2 , - 225 , - 268 , - 131 , - 174 , - 37 , - 80 , - 303 , - 346 , - 209 , - 252 , - 115 , - 158 , - 21 , - 64 , - 287 , - 330 , - 193 , - 236 , - 99 , - 142 , - 5 , - 48 , - 271 , - 314 , - 177 , - 220 , - 83 , - 126 , - 349 , - 32 , - 255 , - 298 , - 161 , - 204 , - 67 , - 110 , - 333 , - 16 , - 239 , - 282 , - 145 , - 188 , - 51 , - 94 , - 317 , - 0 , - 127 , - 346 , - 289 , - 324 , - 83 , - 302 , - 245 , - 280 , - 39 , - 258 , - 201 , - 236 , - 363 , - 214 , - 157 , - 192 , - 319 , - 170 , - 113 , - 148 , - 275 , - 126 , - 69 , - 104 , - 231 , - 82 , - 25 , - 60 , - 187 , - 38 , - 349 , - 16 , - 143 , - 362 , - 305 , - 340 , - 99 , - 318 , - 261 , - 296 , - 55 , - 274 , - 217 , - 252 , - 11 , - 230 , - 173 , - 208 , - 335 , - 186 , - 129 , - 164 , - 291 , - 142 , - 85 , - 120 , - 247 , - 98 , - 41 , - 76 , - 203 , - 54 , - 365 , - 32 , - 159 , - 10 , - 321 , - 356 , - 115 , - 334 , - 277 , - 312 , - 71 , - 290 , - 233 , - 268 , - 27 , - 246 , - 189 , - 224 , - 351 , - 202 , - 145 , - 180 , - 307 , - 158 , - 101 , - 136 , - 263 , - 114 , - 57 , - 92 , - 219 , - 70 , - 13 , - 48 , - 175 , - 26 , - 337 , - 4 , - 131 , - 350 , - 293 , - 328 , - 87 , - 306 , - 249 , - 284 , - 43 , - 262 , - 205 , - 240 , - 367 , - 218 , - 161 , - 196 , - 323 , - 174 , - 117 , - 152 , - 279 , - 130 , - 73 , - 108 , - 235 , - 86 , - 29 , - 64 , - 191 , - 42 , - 353 , - 20 , - 147 , - 366 , - 309 , - 344 , - 103 , - 322 , - 265 , - 300 , - 59 , - 278 , - 221 , - 256 , - 15 , - 234 , - 177 , - 212 , - 339 , - 190 , - 133 , - 168 , - 295 , - 146 , - 89 , - 124 , - 251 , - 102 , - 45 , - 80 , - 207 , - 58 , - 1 , - 36 , - 163 , - 14 , - 325 , - 360 , - 119 , - 338 , - 281 , - 316 , - 75 , - 294 , - 237 , - 272 , - 31 , - 250 , - 193 , - 228 , - 355 , - 206 , - 149 , - 184 , - 311 , - 162 , - 105 , - 140 , - 267 , - 118 , - 61 , - 96 , - 223 , - 74 , - 17 , - 52 , - 179 , - 30 , - 341 , - 8 , - 135 , - 354 , - 297 , - 332 , - 91 , - 310 , - 253 , - 288 , - 47 , - 266 , - 209 , - 244 , - 3 , - 222 , - 165 , - 200 , - 327 , - 178 , - 121 , - 156 , - 283 , - 134 , - 77 , - 112 , - 239 , - 90 , - 33 , - 68 , - 195 , - 46 , - 357 , - 24 , - 151 , - 2 , - 313 , - 348 , - 107 , - 326 , - 269 , - 304 , - 63 , - 282 , - 225 , - 260 , - 19 , - 238 , - 181 , - 216 , - 343 , - 194 , - 137 , - 172 , - 299 , - 150 , - 93 , - 128 , - 255 , - 106 , - 49 , - 84 , - 211 , - 62 , - 5 , - 40 , - 167 , - 18 , - 329 , - 364 , - 123 , - 342 , - 285 , - 320 , - 79 , - 298 , - 241 , - 276 , - 35 , - 254 , - 197 , - 232 , - 359 , - 210 , - 153 , - 188 , - 315 , - 166 , - 109 , - 144 , - 271 , - 122 , - 65 , - 100 , - 227 , - 78 , - 21 , - 56 , - 183 , - 34 , - 345 , - 12 , - 139 , - 358 , - 301 , - 336 , - 95 , - 314 , - 257 , - 292 , - 51 , - 270 , - 213 , - 248 , - 7 , - 226 , - 169 , - 204 , - 331 , - 182 , - 125 , - 160 , - 287 , - 138 , - 81 , - 116 , - 243 , - 94 , - 37 , - 72 , - 199 , - 50 , - 361 , - 28 , - 155 , - 6 , - 317 , - 352 , - 111 , - 330 , - 273 , - 308 , - 67 , - 286 , - 229 , - 264 , - 23 , - 242 , - 185 , - 220 , - 347 , - 198 , - 141 , - 176 , - 303 , - 154 , - 97 , - 132 , - 259 , - 110 , - 53 , - 88 , - 215 , - 66 , - 9 , - 44 , - 171 , - 22 , - 333 , - 0 , - 139 , - 90 , - 229 , - 180 , - 319 , - 270 , - 33 , - 360 , - 123 , - 74 , - 213 , - 164 , - 303 , - 254 , - 17 , - 344 , - 107 , - 58 , - 197 , - 148 , - 287 , - 238 , - 1 , - 328 , - 91 , - 42 , - 181 , - 132 , - 271 , - 222 , - 361 , - 312 , - 75 , - 26 , - 165 , - 116 , - 255 , - 206 , - 345 , - 296 , - 59 , - 10 , - 149 , - 100 , - 239 , - 190 , - 329 , - 280 , - 43 , - 370 , - 133 , - 84 , - 223 , - 174 , - 313 , - 264 , - 27 , - 354 , - 117 , - 68 , - 207 , - 158 , - 297 , - 248 , - 11 , - 338 , - 101 , - 52 , - 191 , - 142 , - 281 , - 232 , - 371 , - 322 , - 85 , - 36 , - 175 , - 126 , - 265 , - 216 , - 355 , - 306 , - 69 , - 20 , - 159 , - 110 , - 249 , - 200 , - 339 , - 290 , - 53 , - 4 , - 143 , - 94 , - 233 , - 184 , - 323 , - 274 , - 37 , - 364 , - 127 , - 78 , - 217 , - 168 , - 307 , - 258 , - 21 , - 348 , - 111 , - 62 , - 201 , - 152 , - 291 , - 242 , - 5 , - 332 , - 95 , - 46 , - 185 , - 136 , - 275 , - 226 , - 365 , - 316 , - 79 , - 30 , - 169 , - 120 , - 259 , - 210 , - 349 , - 300 , - 63 , - 14 , - 153 , - 104 , - 243 , - 194 , - 333 , - 284 , - 47 , - 374 , - 137 , - 88 , - 227 , - 178 , - 317 , - 268 , - 31 , - 358 , - 121 , - 72 , - 211 , - 162 , - 301 , - 252 , - 15 , - 342 , - 105 , - 56 , - 195 , - 146 , - 285 , - 236 , - 375 , - 326 , - 89 , - 40 , - 179 , - 130 , - 269 , - 220 , - 359 , - 310 , - 73 , - 24 , - 163 , - 114 , - 253 , - 204 , - 343 , - 294 , - 57 , - 8 , - 147 , - 98 , - 237 , - 188 , - 327 , - 278 , - 41 , - 368 , - 131 , - 82 , - 221 , - 172 , - 311 , - 262 , - 25 , - 352 , - 115 , - 66 , - 205 , - 156 , - 295 , - 246 , - 9 , - 336 , - 99 , - 50 , - 189 , - 140 , - 279 , - 230 , - 369 , - 320 , - 83 , - 34 , - 173 , - 124 , - 263 , - 214 , - 353 , - 304 , - 67 , - 18 , - 157 , - 108 , - 247 , - 198 , - 337 , - 288 , - 51 , - 2 , - 141 , - 92 , - 231 , - 182 , - 321 , - 272 , - 35 , - 362 , - 125 , - 76 , - 215 , - 166 , - 305 , - 256 , - 19 , - 346 , - 109 , - 60 , - 199 , - 150 , - 289 , - 240 , - 3 , - 330 , - 93 , - 44 , - 183 , - 134 , - 273 , - 224 , - 363 , - 314 , - 77 , - 28 , - 167 , - 118 , - 257 , - 208 , - 347 , - 298 , - 61 , - 12 , - 151 , - 102 , - 241 , - 192 , - 331 , - 282 , - 45 , - 372 , - 135 , - 86 , - 225 , - 176 , - 315 , - 266 , - 29 , - 356 , - 119 , - 70 , - 209 , - 160 , - 299 , - 250 , - 13 , - 340 , - 103 , - 54 , - 193 , - 144 , - 283 , - 234 , - 373 , - 324 , - 87 , - 38 , - 177 , - 128 , - 267 , - 218 , - 357 , - 308 , - 71 , - 22 , - 161 , - 112 , - 251 , - 202 , - 341 , - 292 , - 55 , - 6 , - 145 , - 96 , - 235 , - 186 , - 325 , - 276 , - 39 , - 366 , - 129 , - 80 , - 219 , - 170 , - 309 , - 260 , - 23 , - 350 , - 113 , - 64 , - 203 , - 154 , - 293 , - 244 , - 7 , - 334 , - 97 , - 48 , - 187 , - 138 , - 277 , - 228 , - 367 , - 318 , - 81 , - 32 , - 171 , - 122 , - 261 , - 212 , - 351 , - 302 , - 65 , - 16 , - 155 , - 106 , - 245 , - 196 , - 335 , - 286 , - 49 , - 0 , - 71 , - 238 , - 117 , - 92 , - 163 , - 330 , - 209 , - 184 , - 255 , - 38 , - 301 , - 276 , - 347 , - 130 , - 9 , - 368 , - 55 , - 222 , - 101 , - 76 , - 147 , - 314 , - 193 , - 168 , - 239 , - 22 , - 285 , - 260 , - 331 , - 114 , - 377 , - 352 , - 39 , - 206 , - 85 , - 60 , - 131 , - 298 , - 177 , - 152 , - 223 , - 6 , - 269 , - 244 , - 315 , - 98 , - 361 , - 336 , - 23 , - 190 , - 69 , - 44 , - 115 , - 282 , - 161 , - 136 , - 207 , - 374 , - 253 , - 228 , - 299 , - 82 , - 345 , - 320 , - 7 , - 174 , - 53 , - 28 , - 99 , - 266 , - 145 , - 120 , - 191 , - 358 , - 237 , - 212 , - 283 , - 66 , - 329 , - 304 , - 375 , - 158 , - 37 , - 12 , - 83 , - 250 , - 129 , - 104 , - 175 , - 342 , - 221 , - 196 , - 267 , - 50 , - 313 , - 288 , - 359 , - 142 , - 21 , - 380 , - 67 , - 234 , - 113 , - 88 , - 159 , - 326 , - 205 , - 180 , - 251 , - 34 , - 297 , - 272 , - 343 , - 126 , - 5 , - 364 , - 51 , - 218 , - 97 , - 72 , - 143 , - 310 , - 189 , - 164 , - 235 , - 18 , - 281 , - 256 , - 327 , - 110 , - 373 , - 348 , - 35 , - 202 , - 81 , - 56 , - 127 , - 294 , - 173 , - 148 , - 219 , - 2 , - 265 , - 240 , - 311 , - 94 , - 357 , - 332 , - 19 , - 186 , - 65 , - 40 , - 111 , - 278 , - 157 , - 132 , - 203 , - 370 , - 249 , - 224 , - 295 , - 78 , - 341 , - 316 , - 3 , - 170 , - 49 , - 24 , - 95 , - 262 , - 141 , - 116 , - 187 , - 354 , - 233 , - 208 , - 279 , - 62 , - 325 , - 300 , - 371 , - 154 , - 33 , - 8 , - 79 , - 246 , - 125 , - 100 , - 171 , - 338 , - 217 , - 192 , - 263 , - 46 , - 309 , - 284 , - 355 , - 138 , - 17 , - 376 , - 63 , - 230 , - 109 , - 84 , - 155 , - 322 , - 201 , - 176 , - 247 , - 30 , - 293 , - 268 , - 339 , - 122 , - 1 , - 360 , - 47 , - 214 , - 93 , - 68 , - 139 , - 306 , - 185 , - 160 , - 231 , - 14 , - 277 , - 252 , - 323 , - 106 , - 369 , - 344 , - 31 , - 198 , - 77 , - 52 , - 123 , - 290 , - 169 , - 144 , - 215 , - 382 , - 261 , - 236 , - 307 , - 90 , - 353 , - 328 , - 15 , - 182 , - 61 , - 36 , - 107 , - 274 , - 153 , - 128 , - 199 , - 366 , - 245 , - 220 , - 291 , - 74 , - 337 , - 312 , - 383 , - 166 , - 45 , - 20 , - 91 , - 258 , - 137 , - 112 , - 183 , - 350 , - 229 , - 204 , - 275 , - 58 , - 321 , - 296 , - 367 , - 150 , - 29 , - 4 , - 75 , - 242 , - 121 , - 96 , - 167 , - 334 , - 213 , - 188 , - 259 , - 42 , - 305 , - 280 , - 351 , - 134 , - 13 , - 372 , - 59 , - 226 , - 105 , - 80 , - 151 , - 318 , - 197 , - 172 , - 243 , - 26 , - 289 , - 264 , - 335 , - 118 , - 381 , - 356 , - 43 , - 210 , - 89 , - 64 , - 135 , - 302 , - 181 , - 156 , - 227 , - 10 , - 273 , - 248 , - 319 , - 102 , - 365 , - 340 , - 27 , - 194 , - 73 , - 48 , - 119 , - 286 , - 165 , - 140 , - 211 , - 378 , - 257 , - 232 , - 303 , - 86 , - 349 , - 324 , - 11 , - 178 , - 57 , - 32 , - 103 , - 270 , - 149 , - 124 , - 195 , - 362 , - 241 , - 216 , - 287 , - 70 , - 333 , - 308 , - 379 , - 162 , - 41 , - 16 , - 87 , - 254 , - 133 , - 108 , - 179 , - 346 , - 225 , - 200 , - 271 , - 54 , - 317 , - 292 , - 363 , - 146 , - 25 , - 0 , - 341 , - 94 , - 43 , - 188 , - 137 , - 282 , - 231 , - 376 , - 325 , - 78 , - 27 , - 172 , - 121 , - 266 , - 215 , - 360 , - 309 , - 62 , - 11 , - 156 , - 105 , - 250 , - 199 , - 344 , - 293 , - 46 , - 387 , - 140 , - 89 , - 234 , - 183 , - 328 , - 277 , - 30 , - 371 , - 124 , - 73 , - 218 , - 167 , - 312 , - 261 , - 14 , - 355 , - 108 , - 57 , - 202 , - 151 , - 296 , - 245 , - 390 , - 339 , - 92 , - 41 , - 186 , - 135 , - 280 , - 229 , - 374 , - 323 , - 76 , - 25 , - 170 , - 119 , - 264 , - 213 , - 358 , - 307 , - 60 , - 9 , - 154 , - 103 , - 248 , - 197 , - 342 , - 291 , - 44 , - 385 , - 138 , - 87 , - 232 , - 181 , - 326 , - 275 , - 28 , - 369 , - 122 , - 71 , - 216 , - 165 , - 310 , - 259 , - 12 , - 353 , - 106 , - 55 , - 200 , - 149 , - 294 , - 243 , - 388 , - 337 , - 90 , - 39 , - 184 , - 133 , - 278 , - 227 , - 372 , - 321 , - 74 , - 23 , - 168 , - 117 , - 262 , - 211 , - 356 , - 305 , - 58 , - 7 , - 152 , - 101 , - 246 , - 195 , - 340 , - 289 , - 42 , - 383 , - 136 , - 85 , - 230 , - 179 , - 324 , - 273 , - 26 , - 367 , - 120 , - 69 , - 214 , - 163 , - 308 , - 257 , - 10 , - 351 , - 104 , - 53 , - 198 , - 147 , - 292 , - 241 , - 386 , - 335 , - 88 , - 37 , - 182 , - 131 , - 276 , - 225 , - 370 , - 319 , - 72 , - 21 , - 166 , - 115 , - 260 , - 209 , - 354 , - 303 , - 56 , - 5 , - 150 , - 99 , - 244 , - 193 , - 338 , - 287 , - 40 , - 381 , - 134 , - 83 , - 228 , - 177 , - 322 , - 271 , - 24 , - 365 , - 118 , - 67 , - 212 , - 161 , - 306 , - 255 , - 8 , - 349 , - 102 , - 51 , - 196 , - 145 , - 290 , - 239 , - 384 , - 333 , - 86 , - 35 , - 180 , - 129 , - 274 , - 223 , - 368 , - 317 , - 70 , - 19 , - 164 , - 113 , - 258 , - 207 , - 352 , - 301 , - 54 , - 3 , - 148 , - 97 , - 242 , - 191 , - 336 , - 285 , - 38 , - 379 , - 132 , - 81 , - 226 , - 175 , - 320 , - 269 , - 22 , - 363 , - 116 , - 65 , - 210 , - 159 , - 304 , - 253 , - 6 , - 347 , - 100 , - 49 , - 194 , - 143 , - 288 , - 237 , - 382 , - 331 , - 84 , - 33 , - 178 , - 127 , - 272 , - 221 , - 366 , - 315 , - 68 , - 17 , - 162 , - 111 , - 256 , - 205 , - 350 , - 299 , - 52 , - 1 , - 146 , - 95 , - 240 , - 189 , - 334 , - 283 , - 36 , - 377 , - 130 , - 79 , - 224 , - 173 , - 318 , - 267 , - 20 , - 361 , - 114 , - 63 , - 208 , - 157 , - 302 , - 251 , - 4 , - 345 , - 98 , - 47 , - 192 , - 141 , - 286 , - 235 , - 380 , - 329 , - 82 , - 31 , - 176 , - 125 , - 270 , - 219 , - 364 , - 313 , - 66 , - 15 , - 160 , - 109 , - 254 , - 203 , - 348 , - 297 , - 50 , - 391 , - 144 , - 93 , - 238 , - 187 , - 332 , - 281 , - 34 , - 375 , - 128 , - 77 , - 222 , - 171 , - 316 , - 265 , - 18 , - 359 , - 112 , - 61 , - 206 , - 155 , - 300 , - 249 , - 2 , - 343 , - 96 , - 45 , - 190 , - 139 , - 284 , - 233 , - 378 , - 327 , - 80 , - 29 , - 174 , - 123 , - 268 , - 217 , - 362 , - 311 , - 64 , - 13 , - 158 , - 107 , - 252 , - 201 , - 346 , - 295 , - 48 , - 389 , - 142 , - 91 , - 236 , - 185 , - 330 , - 279 , - 32 , - 373 , - 126 , - 75 , - 220 , - 169 , - 314 , - 263 , - 16 , - 357 , - 110 , - 59 , - 204 , - 153 , - 298 , - 247 , - 0 , - 191 , - 62 , - 13 , - 44 , - 155 , - 346 , - 217 , - 168 , - 199 , - 310 , - 101 , - 372 , - 323 , - 354 , - 65 , - 256 , - 127 , - 78 , - 109 , - 220 , - 11 , - 282 , - 233 , - 264 , - 375 , - 166 , - 37 , - 388 , - 19 , - 130 , - 321 , - 192 , - 143 , - 174 , - 285 , - 76 , - 347 , - 298 , - 329 , - 40 , - 231 , - 102 , - 53 , - 84 , - 195 , - 386 , - 257 , - 208 , - 239 , - 350 , - 141 , - 12 , - 363 , - 394 , - 105 , - 296 , - 167 , - 118 , - 149 , - 260 , - 51 , - 322 , - 273 , - 304 , - 15 , - 206 , - 77 , - 28 , - 59 , - 170 , - 361 , - 232 , - 183 , - 214 , - 325 , - 116 , - 387 , - 338 , - 369 , - 80 , - 271 , - 142 , - 93 , - 124 , - 235 , - 26 , - 297 , - 248 , - 279 , - 390 , - 181 , - 52 , - 3 , - 34 , - 145 , - 336 , - 207 , - 158 , - 189 , - 300 , - 91 , - 362 , - 313 , - 344 , - 55 , - 246 , - 117 , - 68 , - 99 , - 210 , - 1 , - 272 , - 223 , - 254 , - 365 , - 156 , - 27 , - 378 , - 9 , - 120 , - 311 , - 182 , - 133 , - 164 , - 275 , - 66 , - 337 , - 288 , - 319 , - 30 , - 221 , - 92 , - 43 , - 74 , - 185 , - 376 , - 247 , - 198 , - 229 , - 340 , - 131 , - 2 , - 353 , - 384 , - 95 , - 286 , - 157 , - 108 , - 139 , - 250 , - 41 , - 312 , - 263 , - 294 , - 5 , - 196 , - 67 , - 18 , - 49 , - 160 , - 351 , - 222 , - 173 , - 204 , - 315 , - 106 , - 377 , - 328 , - 359 , - 70 , - 261 , - 132 , - 83 , - 114 , - 225 , - 16 , - 287 , - 238 , - 269 , - 380 , - 171 , - 42 , - 393 , - 24 , - 135 , - 326 , - 197 , - 148 , - 179 , - 290 , - 81 , - 352 , - 303 , - 334 , - 45 , - 236 , - 107 , - 58 , - 89 , - 200 , - 391 , - 262 , - 213 , - 244 , - 355 , - 146 , - 17 , - 368 , - 399 , - 110 , - 301 , - 172 , - 123 , - 154 , - 265 , - 56 , - 327 , - 278 , - 309 , - 20 , - 211 , - 82 , - 33 , - 64 , - 175 , - 366 , - 237 , - 188 , - 219 , - 330 , - 121 , - 392 , - 343 , - 374 , - 85 , - 276 , - 147 , - 98 , - 129 , - 240 , - 31 , - 302 , - 253 , - 284 , - 395 , - 186 , - 57 , - 8 , - 39 , - 150 , - 341 , - 212 , - 163 , - 194 , - 305 , - 96 , - 367 , - 318 , - 349 , - 60 , - 251 , - 122 , - 73 , - 104 , - 215 , - 6 , - 277 , - 228 , - 259 , - 370 , - 161 , - 32 , - 383 , - 14 , - 125 , - 316 , - 187 , - 138 , - 169 , - 280 , - 71 , - 342 , - 293 , - 324 , - 35 , - 226 , - 97 , - 48 , - 79 , - 190 , - 381 , - 252 , - 203 , - 234 , - 345 , - 136 , - 7 , - 358 , - 389 , - 100 , - 291 , - 162 , - 113 , - 144 , - 255 , - 46 , - 317 , - 268 , - 299 , - 10 , - 201 , - 72 , - 23 , - 54 , - 165 , - 356 , - 227 , - 178 , - 209 , - 320 , - 111 , - 382 , - 333 , - 364 , - 75 , - 266 , - 137 , - 88 , - 119 , - 230 , - 21 , - 292 , - 243 , - 274 , - 385 , - 176 , - 47 , - 398 , - 29 , - 140 , - 331 , - 202 , - 153 , - 184 , - 295 , - 86 , - 357 , - 308 , - 339 , - 50 , - 241 , - 112 , - 63 , - 94 , - 205 , - 396 , - 267 , - 218 , - 249 , - 360 , - 151 , - 22 , - 373 , - 4 , - 115 , - 306 , - 177 , - 128 , - 159 , - 270 , - 61 , - 332 , - 283 , - 314 , - 25 , - 216 , - 87 , - 38 , - 69 , - 180 , - 371 , - 242 , - 193 , - 224 , - 335 , - 126 , - 397 , - 348 , - 379 , - 90 , - 281 , - 152 , - 103 , - 134 , - 245 , - 36 , - 307 , - 258 , - 289 , - 0 , - 257 , - 310 , - 159 , - 212 , - 61 , - 114 , - 371 , - 16 , - 273 , - 326 , - 175 , - 228 , - 77 , - 130 , - 387 , - 32 , - 289 , - 342 , - 191 , - 244 , - 93 , - 146 , - 403 , - 48 , - 305 , - 358 , - 207 , - 260 , - 109 , - 162 , - 11 , - 64 , - 321 , - 374 , - 223 , - 276 , - 125 , - 178 , - 27 , - 80 , - 337 , - 390 , - 239 , - 292 , - 141 , - 194 , - 43 , - 96 , - 353 , - 406 , - 255 , - 308 , - 157 , - 210 , - 59 , - 112 , - 369 , - 14 , - 271 , - 324 , - 173 , - 226 , - 75 , - 128 , - 385 , - 30 , - 287 , - 340 , - 189 , - 242 , - 91 , - 144 , - 401 , - 46 , - 303 , - 356 , - 205 , - 258 , - 107 , - 160 , - 9 , - 62 , - 319 , - 372 , - 221 , - 274 , - 123 , - 176 , - 25 , - 78 , - 335 , - 388 , - 237 , - 290 , - 139 , - 192 , - 41 , - 94 , - 351 , - 404 , - 253 , - 306 , - 155 , - 208 , - 57 , - 110 , - 367 , - 12 , - 269 , - 322 , - 171 , - 224 , - 73 , - 126 , - 383 , - 28 , - 285 , - 338 , - 187 , - 240 , - 89 , - 142 , - 399 , - 44 , - 301 , - 354 , - 203 , - 256 , - 105 , - 158 , - 7 , - 60 , - 317 , - 370 , - 219 , - 272 , - 121 , - 174 , - 23 , - 76 , - 333 , - 386 , - 235 , - 288 , - 137 , - 190 , - 39 , - 92 , - 349 , - 402 , - 251 , - 304 , - 153 , - 206 , - 55 , - 108 , - 365 , - 10 , - 267 , - 320 , - 169 , - 222 , - 71 , - 124 , - 381 , - 26 , - 283 , - 336 , - 185 , - 238 , - 87 , - 140 , - 397 , - 42 , - 299 , - 352 , - 201 , - 254 , - 103 , - 156 , - 5 , - 58 , - 315 , - 368 , - 217 , - 270 , - 119 , - 172 , - 21 , - 74 , - 331 , - 384 , - 233 , - 286 , - 135 , - 188 , - 37 , - 90 , - 347 , - 400 , - 249 , - 302 , - 151 , - 204 , - 53 , - 106 , - 363 , - 8 , - 265 , - 318 , - 167 , - 220 , - 69 , - 122 , - 379 , - 24 , - 281 , - 334 , - 183 , - 236 , - 85 , - 138 , - 395 , - 40 , - 297 , - 350 , - 199 , - 252 , - 101 , - 154 , - 3 , - 56 , - 313 , - 366 , - 215 , - 268 , - 117 , - 170 , - 19 , - 72 , - 329 , - 382 , - 231 , - 284 , - 133 , - 186 , - 35 , - 88 , - 345 , - 398 , - 247 , - 300 , - 149 , - 202 , - 51 , - 104 , - 361 , - 6 , - 263 , - 316 , - 165 , - 218 , - 67 , - 120 , - 377 , - 22 , - 279 , - 332 , - 181 , - 234 , - 83 , - 136 , - 393 , - 38 , - 295 , - 348 , - 197 , - 250 , - 99 , - 152 , - 1 , - 54 , - 311 , - 364 , - 213 , - 266 , - 115 , - 168 , - 17 , - 70 , - 327 , - 380 , - 229 , - 282 , - 131 , - 184 , - 33 , - 86 , - 343 , - 396 , - 245 , - 298 , - 147 , - 200 , - 49 , - 102 , - 359 , - 4 , - 261 , - 314 , - 163 , - 216 , - 65 , - 118 , - 375 , - 20 , - 277 , - 330 , - 179 , - 232 , - 81 , - 134 , - 391 , - 36 , - 293 , - 346 , - 195 , - 248 , - 97 , - 150 , - 407 , - 52 , - 309 , - 362 , - 211 , - 264 , - 113 , - 166 , - 15 , - 68 , - 325 , - 378 , - 227 , - 280 , - 129 , - 182 , - 31 , - 84 , - 341 , - 394 , - 243 , - 296 , - 145 , - 198 , - 47 , - 100 , - 357 , - 2 , - 259 , - 312 , - 161 , - 214 , - 63 , - 116 , - 373 , - 18 , - 275 , - 328 , - 177 , - 230 , - 79 , - 132 , - 389 , - 34 , - 291 , - 344 , - 193 , - 246 , - 95 , - 148 , - 405 , - 50 , - 307 , - 360 , - 209 , - 262 , - 111 , - 164 , - 13 , - 66 , - 323 , - 376 , - 225 , - 278 , - 127 , - 180 , - 29 , - 82 , - 339 , - 392 , - 241 , - 294 , - 143 , - 196 , - 45 , - 98 , - 355 , - 0 , - 77 , - 258 , - 127 , - 100 , - 177 , - 358 , - 227 , - 200 , - 277 , - 42 , - 327 , - 300 , - 377 , - 142 , - 11 , - 400 , - 61 , - 242 , - 111 , - 84 , - 161 , - 342 , - 211 , - 184 , - 261 , - 26 , - 311 , - 284 , - 361 , - 126 , - 411 , - 384 , - 45 , - 226 , - 95 , - 68 , - 145 , - 326 , - 195 , - 168 , - 245 , - 10 , - 295 , - 268 , - 345 , - 110 , - 395 , - 368 , - 29 , - 210 , - 79 , - 52 , - 129 , - 310 , - 179 , - 152 , - 229 , - 410 , - 279 , - 252 , - 329 , - 94 , - 379 , - 352 , - 13 , - 194 , - 63 , - 36 , - 113 , - 294 , - 163 , - 136 , - 213 , - 394 , - 263 , - 236 , - 313 , - 78 , - 363 , - 336 , - 413 , - 178 , - 47 , - 20 , - 97 , - 278 , - 147 , - 120 , - 197 , - 378 , - 247 , - 220 , - 297 , - 62 , - 347 , - 320 , - 397 , - 162 , - 31 , - 4 , - 81 , - 262 , - 131 , - 104 , - 181 , - 362 , - 231 , - 204 , - 281 , - 46 , - 331 , - 304 , - 381 , - 146 , - 15 , - 404 , - 65 , - 246 , - 115 , - 88 , - 165 , - 346 , - 215 , - 188 , - 265 , - 30 , - 315 , - 288 , - 365 , - 130 , - 415 , - 388 , - 49 , - 230 , - 99 , - 72 , - 149 , - 330 , - 199 , - 172 , - 249 , - 14 , - 299 , - 272 , - 349 , - 114 , - 399 , - 372 , - 33 , - 214 , - 83 , - 56 , - 133 , - 314 , - 183 , - 156 , - 233 , - 414 , - 283 , - 256 , - 333 , - 98 , - 383 , - 356 , - 17 , - 198 , - 67 , - 40 , - 117 , - 298 , - 167 , - 140 , - 217 , - 398 , - 267 , - 240 , - 317 , - 82 , - 367 , - 340 , - 1 , - 182 , - 51 , - 24 , - 101 , - 282 , - 151 , - 124 , - 201 , - 382 , - 251 , - 224 , - 301 , - 66 , - 351 , - 324 , - 401 , - 166 , - 35 , - 8 , - 85 , - 266 , - 135 , - 108 , - 185 , - 366 , - 235 , - 208 , - 285 , - 50 , - 335 , - 308 , - 385 , - 150 , - 19 , - 408 , - 69 , - 250 , - 119 , - 92 , - 169 , - 350 , - 219 , - 192 , - 269 , - 34 , - 319 , - 292 , - 369 , - 134 , - 3 , - 392 , - 53 , - 234 , - 103 , - 76 , - 153 , - 334 , - 203 , - 176 , - 253 , - 18 , - 303 , - 276 , - 353 , - 118 , - 403 , - 376 , - 37 , - 218 , - 87 , - 60 , - 137 , - 318 , - 187 , - 160 , - 237 , - 2 , - 287 , - 260 , - 337 , - 102 , - 387 , - 360 , - 21 , - 202 , - 71 , - 44 , - 121 , - 302 , - 171 , - 144 , - 221 , - 402 , - 271 , - 244 , - 321 , - 86 , - 371 , - 344 , - 5 , - 186 , - 55 , - 28 , - 105 , - 286 , - 155 , - 128 , - 205 , - 386 , - 255 , - 228 , - 305 , - 70 , - 355 , - 328 , - 405 , - 170 , - 39 , - 12 , - 89 , - 270 , - 139 , - 112 , - 189 , - 370 , - 239 , - 212 , - 289 , - 54 , - 339 , - 312 , - 389 , - 154 , - 23 , - 412 , - 73 , - 254 , - 123 , - 96 , - 173 , - 354 , - 223 , - 196 , - 273 , - 38 , - 323 , - 296 , - 373 , - 138 , - 7 , - 396 , - 57 , - 238 , - 107 , - 80 , - 157 , - 338 , - 207 , - 180 , - 257 , - 22 , - 307 , - 280 , - 357 , - 122 , - 407 , - 380 , - 41 , - 222 , - 91 , - 64 , - 141 , - 322 , - 191 , - 164 , - 241 , - 6 , - 291 , - 264 , - 341 , - 106 , - 391 , - 364 , - 25 , - 206 , - 75 , - 48 , - 125 , - 306 , - 175 , - 148 , - 225 , - 406 , - 275 , - 248 , - 325 , - 90 , - 375 , - 348 , - 9 , - 190 , - 59 , - 32 , - 109 , - 290 , - 159 , - 132 , - 209 , - 390 , - 259 , - 232 , - 309 , - 74 , - 359 , - 332 , - 409 , - 174 , - 43 , - 16 , - 93 , - 274 , - 143 , - 116 , - 193 , - 374 , - 243 , - 216 , - 293 , - 58 , - 343 , - 316 , - 393 , - 158 , - 27 , - 0 , - 157 , - 102 , - 259 , - 204 , - 361 , - 306 , - 39 , - 408 , - 141 , - 86 , - 243 , - 188 , - 345 , - 290 , - 23 , - 392 , - 125 , - 70 , - 227 , - 172 , - 329 , - 274 , - 7 , - 376 , - 109 , - 54 , - 211 , - 156 , - 313 , - 258 , - 415 , - 360 , - 93 , - 38 , - 195 , - 140 , - 297 , - 242 , - 399 , - 344 , - 77 , - 22 , - 179 , - 124 , - 281 , - 226 , - 383 , - 328 , - 61 , - 6 , - 163 , - 108 , - 265 , - 210 , - 367 , - 312 , - 45 , - 414 , - 147 , - 92 , - 249 , - 194 , - 351 , - 296 , - 29 , - 398 , - 131 , - 76 , - 233 , - 178 , - 335 , - 280 , - 13 , - 382 , - 115 , - 60 , - 217 , - 162 , - 319 , - 264 , - 421 , - 366 , - 99 , - 44 , - 201 , - 146 , - 303 , - 248 , - 405 , - 350 , - 83 , - 28 , - 185 , - 130 , - 287 , - 232 , - 389 , - 334 , - 67 , - 12 , - 169 , - 114 , - 271 , - 216 , - 373 , - 318 , - 51 , - 420 , - 153 , - 98 , - 255 , - 200 , - 357 , - 302 , - 35 , - 404 , - 137 , - 82 , - 239 , - 184 , - 341 , - 286 , - 19 , - 388 , - 121 , - 66 , - 223 , - 168 , - 325 , - 270 , - 3 , - 372 , - 105 , - 50 , - 207 , - 152 , - 309 , - 254 , - 411 , - 356 , - 89 , - 34 , - 191 , - 136 , - 293 , - 238 , - 395 , - 340 , - 73 , - 18 , - 175 , - 120 , - 277 , - 222 , - 379 , - 324 , - 57 , - 2 , - 159 , - 104 , - 261 , - 206 , - 363 , - 308 , - 41 , - 410 , - 143 , - 88 , - 245 , - 190 , - 347 , - 292 , - 25 , - 394 , - 127 , - 72 , - 229 , - 174 , - 331 , - 276 , - 9 , - 378 , - 111 , - 56 , - 213 , - 158 , - 315 , - 260 , - 417 , - 362 , - 95 , - 40 , - 197 , - 142 , - 299 , - 244 , - 401 , - 346 , - 79 , - 24 , - 181 , - 126 , - 283 , - 228 , - 385 , - 330 , - 63 , - 8 , - 165 , - 110 , - 267 , - 212 , - 369 , - 314 , - 47 , - 416 , - 149 , - 94 , - 251 , - 196 , - 353 , - 298 , - 31 , - 400 , - 133 , - 78 , - 235 , - 180 , - 337 , - 282 , - 15 , - 384 , - 117 , - 62 , - 219 , - 164 , - 321 , - 266 , - 423 , - 368 , - 101 , - 46 , - 203 , - 148 , - 305 , - 250 , - 407 , - 352 , - 85 , - 30 , - 187 , - 132 , - 289 , - 234 , - 391 , - 336 , - 69 , - 14 , - 171 , - 116 , - 273 , - 218 , - 375 , - 320 , - 53 , - 422 , - 155 , - 100 , - 257 , - 202 , - 359 , - 304 , - 37 , - 406 , - 139 , - 84 , - 241 , - 186 , - 343 , - 288 , - 21 , - 390 , - 123 , - 68 , - 225 , - 170 , - 327 , - 272 , - 5 , - 374 , - 107 , - 52 , - 209 , - 154 , - 311 , - 256 , - 413 , - 358 , - 91 , - 36 , - 193 , - 138 , - 295 , - 240 , - 397 , - 342 , - 75 , - 20 , - 177 , - 122 , - 279 , - 224 , - 381 , - 326 , - 59 , - 4 , - 161 , - 106 , - 263 , - 208 , - 365 , - 310 , - 43 , - 412 , - 145 , - 90 , - 247 , - 192 , - 349 , - 294 , - 27 , - 396 , - 129 , - 74 , - 231 , - 176 , - 333 , - 278 , - 11 , - 380 , - 113 , - 58 , - 215 , - 160 , - 317 , - 262 , - 419 , - 364 , - 97 , - 42 , - 199 , - 144 , - 301 , - 246 , - 403 , - 348 , - 81 , - 26 , - 183 , - 128 , - 285 , - 230 , - 387 , - 332 , - 65 , - 10 , - 167 , - 112 , - 269 , - 214 , - 371 , - 316 , - 49 , - 418 , - 151 , - 96 , - 253 , - 198 , - 355 , - 300 , - 33 , - 402 , - 135 , - 80 , - 237 , - 182 , - 339 , - 284 , - 17 , - 386 , - 119 , - 64 , - 221 , - 166 , - 323 , - 268 , - 1 , - 370 , - 103 , - 48 , - 205 , - 150 , - 307 , - 252 , - 409 , - 354 , - 87 , - 32 , - 189 , - 134 , - 291 , - 236 , - 393 , - 338 , - 71 , - 16 , - 173 , - 118 , - 275 , - 220 , - 377 , - 322 , - 55 , - 0 , - 119 , - 382 , - 357 , - 44 , - 307 , - 282 , - 401 , - 232 , - 207 , - 326 , - 157 , - 132 , - 251 , - 82 , - 57 , - 176 , - 7 , - 414 , - 101 , - 364 , - 339 , - 26 , - 289 , - 264 , - 383 , - 214 , - 189 , - 308 , - 139 , - 114 , - 233 , - 64 , - 39 , - 158 , - 421 , - 396 , - 83 , - 346 , - 321 , - 8 , - 271 , - 246 , - 365 , - 196 , - 171 , - 290 , - 121 , - 96 , - 215 , - 46 , - 21 , - 140 , - 403 , - 378 , - 65 , - 328 , - 303 , - 422 , - 253 , - 228 , - 347 , - 178 , - 153 , - 272 , - 103 , - 78 , - 197 , - 28 , - 3 , - 122 , - 385 , - 360 , - 47 , - 310 , - 285 , - 404 , - 235 , - 210 , - 329 , - 160 , - 135 , - 254 , - 85 , - 60 , - 179 , - 10 , - 417 , - 104 , - 367 , - 342 , - 29 , - 292 , - 267 , - 386 , - 217 , - 192 , - 311 , - 142 , - 117 , - 236 , - 67 , - 42 , - 161 , - 424 , - 399 , - 86 , - 349 , - 324 , - 11 , - 274 , - 249 , - 368 , - 199 , - 174 , - 293 , - 124 , - 99 , - 218 , - 49 , - 24 , - 143 , - 406 , - 381 , - 68 , - 331 , - 306 , - 425 , - 256 , - 231 , - 350 , - 181 , - 156 , - 275 , - 106 , - 81 , - 200 , - 31 , - 6 , - 125 , - 388 , - 363 , - 50 , - 313 , - 288 , - 407 , - 238 , - 213 , - 332 , - 163 , - 138 , - 257 , - 88 , - 63 , - 182 , - 13 , - 420 , - 107 , - 370 , - 345 , - 32 , - 295 , - 270 , - 389 , - 220 , - 195 , - 314 , - 145 , - 120 , - 239 , - 70 , - 45 , - 164 , - 427 , - 402 , - 89 , - 352 , - 327 , - 14 , - 277 , - 252 , - 371 , - 202 , - 177 , - 296 , - 127 , - 102 , - 221 , - 52 , - 27 , - 146 , - 409 , - 384 , - 71 , - 334 , - 309 , - 428 , - 259 , - 234 , - 353 , - 184 , - 159 , - 278 , - 109 , - 84 , - 203 , - 34 , - 9 , - 128 , - 391 , - 366 , - 53 , - 316 , - 291 , - 410 , - 241 , - 216 , - 335 , - 166 , - 141 , - 260 , - 91 , - 66 , - 185 , - 16 , - 423 , - 110 , - 373 , - 348 , - 35 , - 298 , - 273 , - 392 , - 223 , - 198 , - 317 , - 148 , - 123 , - 242 , - 73 , - 48 , - 167 , - 430 , - 405 , - 92 , - 355 , - 330 , - 17 , - 280 , - 255 , - 374 , - 205 , - 180 , - 299 , - 130 , - 105 , - 224 , - 55 , - 30 , - 149 , - 412 , - 387 , - 74 , - 337 , - 312 , - 431 , - 262 , - 237 , - 356 , - 187 , - 162 , - 281 , - 112 , - 87 , - 206 , - 37 , - 12 , - 131 , - 394 , - 369 , - 56 , - 319 , - 294 , - 413 , - 244 , - 219 , - 338 , - 169 , - 144 , - 263 , - 94 , - 69 , - 188 , - 19 , - 426 , - 113 , - 376 , - 351 , - 38 , - 301 , - 276 , - 395 , - 226 , - 201 , - 320 , - 151 , - 126 , - 245 , - 76 , - 51 , - 170 , - 1 , - 408 , - 95 , - 358 , - 333 , - 20 , - 283 , - 258 , - 377 , - 208 , - 183 , - 302 , - 133 , - 108 , - 227 , - 58 , - 33 , - 152 , - 415 , - 390 , - 77 , - 340 , - 315 , - 2 , - 265 , - 240 , - 359 , - 190 , - 165 , - 284 , - 115 , - 90 , - 209 , - 40 , - 15 , - 134 , - 397 , - 372 , - 59 , - 322 , - 297 , - 416 , - 247 , - 222 , - 341 , - 172 , - 147 , - 266 , - 97 , - 72 , - 191 , - 22 , - 429 , - 116 , - 379 , - 354 , - 41 , - 304 , - 279 , - 398 , - 229 , - 204 , - 323 , - 154 , - 129 , - 248 , - 79 , - 54 , - 173 , - 4 , - 411 , - 98 , - 361 , - 336 , - 23 , - 286 , - 261 , - 380 , - 211 , - 186 , - 305 , - 136 , - 111 , - 230 , - 61 , - 36 , - 155 , - 418 , - 393 , - 80 , - 343 , - 318 , - 5 , - 268 , - 243 , - 362 , - 193 , - 168 , - 287 , - 118 , - 93 , - 212 , - 43 , - 18 , - 137 , - 400 , - 375 , - 62 , - 325 , - 300 , - 419 , - 250 , - 225 , - 344 , - 175 , - 150 , - 269 , - 100 , - 75 , - 194 , - 25 , - 0 , - 201 , - 182 , - 383 , - 364 , - 125 , - 106 , - 307 , - 288 , - 49 , - 30 , - 231 , - 212 , - 413 , - 394 , - 155 , - 136 , - 337 , - 318 , - 79 , - 60 , - 261 , - 242 , - 3 , - 424 , - 185 , - 166 , - 367 , - 348 , - 109 , - 90 , - 291 , - 272 , - 33 , - 14 , - 215 , - 196 , - 397 , - 378 , - 139 , - 120 , - 321 , - 302 , - 63 , - 44 , - 245 , - 226 , - 427 , - 408 , - 169 , - 150 , - 351 , - 332 , - 93 , - 74 , - 275 , - 256 , - 17 , - 438 , - 199 , - 180 , - 381 , - 362 , - 123 , - 104 , - 305 , - 286 , - 47 , - 28 , - 229 , - 210 , - 411 , - 392 , - 153 , - 134 , - 335 , - 316 , - 77 , - 58 , - 259 , - 240 , - 1 , - 422 , - 183 , - 164 , - 365 , - 346 , - 107 , - 88 , - 289 , - 270 , - 31 , - 12 , - 213 , - 194 , - 395 , - 376 , - 137 , - 118 , - 319 , - 300 , - 61 , - 42 , - 243 , - 224 , - 425 , - 406 , - 167 , - 148 , - 349 , - 330 , - 91 , - 72 , - 273 , - 254 , - 15 , - 436 , - 197 , - 178 , - 379 , - 360 , - 121 , - 102 , - 303 , - 284 , - 45 , - 26 , - 227 , - 208 , - 409 , - 390 , - 151 , - 132 , - 333 , - 314 , - 75 , - 56 , - 257 , - 238 , - 439 , - 420 , - 181 , - 162 , - 363 , - 344 , - 105 , - 86 , - 287 , - 268 , - 29 , - 10 , - 211 , - 192 , - 393 , - 374 , - 135 , - 116 , - 317 , - 298 , - 59 , - 40 , - 241 , - 222 , - 423 , - 404 , - 165 , - 146 , - 347 , - 328 , - 89 , - 70 , - 271 , - 252 , - 13 , - 434 , - 195 , - 176 , - 377 , - 358 , - 119 , - 100 , - 301 , - 282 , - 43 , - 24 , - 225 , - 206 , - 407 , - 388 , - 149 , - 130 , - 331 , - 312 , - 73 , - 54 , - 255 , - 236 , - 437 , - 418 , - 179 , - 160 , - 361 , - 342 , - 103 , - 84 , - 285 , - 266 , - 27 , - 8 , - 209 , - 190 , - 391 , - 372 , - 133 , - 114 , - 315 , - 296 , - 57 , - 38 , - 239 , - 220 , - 421 , - 402 , - 163 , - 144 , - 345 , - 326 , - 87 , - 68 , - 269 , - 250 , - 11 , - 432 , - 193 , - 174 , - 375 , - 356 , - 117 , - 98 , - 299 , - 280 , - 41 , - 22 , - 223 , - 204 , - 405 , - 386 , - 147 , - 128 , - 329 , - 310 , - 71 , - 52 , - 253 , - 234 , - 435 , - 416 , - 177 , - 158 , - 359 , - 340 , - 101 , - 82 , - 283 , - 264 , - 25 , - 6 , - 207 , - 188 , - 389 , - 370 , - 131 , - 112 , - 313 , - 294 , - 55 , - 36 , - 237 , - 218 , - 419 , - 400 , - 161 , - 142 , - 343 , - 324 , - 85 , - 66 , - 267 , - 248 , - 9 , - 430 , - 191 , - 172 , - 373 , - 354 , - 115 , - 96 , - 297 , - 278 , - 39 , - 20 , - 221 , - 202 , - 403 , - 384 , - 145 , - 126 , - 327 , - 308 , - 69 , - 50 , - 251 , - 232 , - 433 , - 414 , - 175 , - 156 , - 357 , - 338 , - 99 , - 80 , - 281 , - 262 , - 23 , - 4 , - 205 , - 186 , - 387 , - 368 , - 129 , - 110 , - 311 , - 292 , - 53 , - 34 , - 235 , - 216 , - 417 , - 398 , - 159 , - 140 , - 341 , - 322 , - 83 , - 64 , - 265 , - 246 , - 7 , - 428 , - 189 , - 170 , - 371 , - 352 , - 113 , - 94 , - 295 , - 276 , - 37 , - 18 , - 219 , - 200 , - 401 , - 382 , - 143 , - 124 , - 325 , - 306 , - 67 , - 48 , - 249 , - 230 , - 431 , - 412 , - 173 , - 154 , - 355 , - 336 , - 97 , - 78 , - 279 , - 260 , - 21 , - 2 , - 203 , - 184 , - 385 , - 366 , - 127 , - 108 , - 309 , - 290 , - 51 , - 32 , - 233 , - 214 , - 415 , - 396 , - 157 , - 138 , - 339 , - 320 , - 81 , - 62 , - 263 , - 244 , - 5 , - 426 , - 187 , - 168 , - 369 , - 350 , - 111 , - 92 , - 293 , - 274 , - 35 , - 16 , - 217 , - 198 , - 399 , - 380 , - 141 , - 122 , - 323 , - 304 , - 65 , - 46 , - 247 , - 228 , - 429 , - 410 , - 171 , - 152 , - 353 , - 334 , - 95 , - 76 , - 277 , - 258 , - 19 , - 0 , - 197 , - 282 , - 255 , - 116 , - 313 , - 398 , - 371 , - 232 , - 429 , - 66 , - 39 , - 348 , - 97 , - 182 , - 155 , - 16 , - 213 , - 298 , - 271 , - 132 , - 329 , - 414 , - 387 , - 248 , - 445 , - 82 , - 55 , - 364 , - 113 , - 198 , - 171 , - 32 , - 229 , - 314 , - 287 , - 148 , - 345 , - 430 , - 403 , - 264 , - 13 , - 98 , - 71 , - 380 , - 129 , - 214 , - 187 , - 48 , - 245 , - 330 , - 303 , - 164 , - 361 , - 446 , - 419 , - 280 , - 29 , - 114 , - 87 , - 396 , - 145 , - 230 , - 203 , - 64 , - 261 , - 346 , - 319 , - 180 , - 377 , - 14 , - 435 , - 296 , - 45 , - 130 , - 103 , - 412 , - 161 , - 246 , - 219 , - 80 , - 277 , - 362 , - 335 , - 196 , - 393 , - 30 , - 3 , - 312 , - 61 , - 146 , - 119 , - 428 , - 177 , - 262 , - 235 , - 96 , - 293 , - 378 , - 351 , - 212 , - 409 , - 46 , - 19 , - 328 , - 77 , - 162 , - 135 , - 444 , - 193 , - 278 , - 251 , - 112 , - 309 , - 394 , - 367 , - 228 , - 425 , - 62 , - 35 , - 344 , - 93 , - 178 , - 151 , - 12 , - 209 , - 294 , - 267 , - 128 , - 325 , - 410 , - 383 , - 244 , - 441 , - 78 , - 51 , - 360 , - 109 , - 194 , - 167 , - 28 , - 225 , - 310 , - 283 , - 144 , - 341 , - 426 , - 399 , - 260 , - 9 , - 94 , - 67 , - 376 , - 125 , - 210 , - 183 , - 44 , - 241 , - 326 , - 299 , - 160 , - 357 , - 442 , - 415 , - 276 , - 25 , - 110 , - 83 , - 392 , - 141 , - 226 , - 199 , - 60 , - 257 , - 342 , - 315 , - 176 , - 373 , - 10 , - 431 , - 292 , - 41 , - 126 , - 99 , - 408 , - 157 , - 242 , - 215 , - 76 , - 273 , - 358 , - 331 , - 192 , - 389 , - 26 , - 447 , - 308 , - 57 , - 142 , - 115 , - 424 , - 173 , - 258 , - 231 , - 92 , - 289 , - 374 , - 347 , - 208 , - 405 , - 42 , - 15 , - 324 , - 73 , - 158 , - 131 , - 440 , - 189 , - 274 , - 247 , - 108 , - 305 , - 390 , - 363 , - 224 , - 421 , - 58 , - 31 , - 340 , - 89 , - 174 , - 147 , - 8 , - 205 , - 290 , - 263 , - 124 , - 321 , - 406 , - 379 , - 240 , - 437 , - 74 , - 47 , - 356 , - 105 , - 190 , - 163 , - 24 , - 221 , - 306 , - 279 , - 140 , - 337 , - 422 , - 395 , - 256 , - 5 , - 90 , - 63 , - 372 , - 121 , - 206 , - 179 , - 40 , - 237 , - 322 , - 295 , - 156 , - 353 , - 438 , - 411 , - 272 , - 21 , - 106 , - 79 , - 388 , - 137 , - 222 , - 195 , - 56 , - 253 , - 338 , - 311 , - 172 , - 369 , - 6 , - 427 , - 288 , - 37 , - 122 , - 95 , - 404 , - 153 , - 238 , - 211 , - 72 , - 269 , - 354 , - 327 , - 188 , - 385 , - 22 , - 443 , - 304 , - 53 , - 138 , - 111 , - 420 , - 169 , - 254 , - 227 , - 88 , - 285 , - 370 , - 343 , - 204 , - 401 , - 38 , - 11 , - 320 , - 69 , - 154 , - 127 , - 436 , - 185 , - 270 , - 243 , - 104 , - 301 , - 386 , - 359 , - 220 , - 417 , - 54 , - 27 , - 336 , - 85 , - 170 , - 143 , - 4 , - 201 , - 286 , - 259 , - 120 , - 317 , - 402 , - 375 , - 236 , - 433 , - 70 , - 43 , - 352 , - 101 , - 186 , - 159 , - 20 , - 217 , - 302 , - 275 , - 136 , - 333 , - 418 , - 391 , - 252 , - 1 , - 86 , - 59 , - 368 , - 117 , - 202 , - 175 , - 36 , - 233 , - 318 , - 291 , - 152 , - 349 , - 434 , - 407 , - 268 , - 17 , - 102 , - 75 , - 384 , - 133 , - 218 , - 191 , - 52 , - 249 , - 334 , - 307 , - 168 , - 365 , - 2 , - 423 , - 284 , - 33 , - 118 , - 91 , - 400 , - 149 , - 234 , - 207 , - 68 , - 265 , - 350 , - 323 , - 184 , - 381 , - 18 , - 439 , - 300 , - 49 , - 134 , - 107 , - 416 , - 165 , - 250 , - 223 , - 84 , - 281 , - 366 , - 339 , - 200 , - 397 , - 34 , - 7 , - 316 , - 65 , - 150 , - 123 , - 432 , - 181 , - 266 , - 239 , - 100 , - 297 , - 382 , - 355 , - 216 , - 413 , - 50 , - 23 , - 332 , - 81 , - 166 , - 139 , - 0 , - 143 , - 58 , - 201 , - 116 , - 259 , - 174 , - 317 , - 232 , - 375 , - 290 , - 433 , - 348 , - 35 , - 406 , - 93 , - 8 , - 151 , - 66 , - 209 , - 124 , - 267 , - 182 , - 325 , - 240 , - 383 , - 298 , - 441 , - 356 , - 43 , - 414 , - 101 , - 16 , - 159 , - 74 , - 217 , - 132 , - 275 , - 190 , - 333 , - 248 , - 391 , - 306 , - 449 , - 364 , - 51 , - 422 , - 109 , - 24 , - 167 , - 82 , - 225 , - 140 , - 283 , - 198 , - 341 , - 256 , - 399 , - 314 , - 1 , - 372 , - 59 , - 430 , - 117 , - 32 , - 175 , - 90 , - 233 , - 148 , - 291 , - 206 , - 349 , - 264 , - 407 , - 322 , - 9 , - 380 , - 67 , - 438 , - 125 , - 40 , - 183 , - 98 , - 241 , - 156 , - 299 , - 214 , - 357 , - 272 , - 415 , - 330 , - 17 , - 388 , - 75 , - 446 , - 133 , - 48 , - 191 , - 106 , - 249 , - 164 , - 307 , - 222 , - 365 , - 280 , - 423 , - 338 , - 25 , - 396 , - 83 , - 454 , - 141 , - 56 , - 199 , - 114 , - 257 , - 172 , - 315 , - 230 , - 373 , - 288 , - 431 , - 346 , - 33 , - 404 , - 91 , - 6 , - 149 , - 64 , - 207 , - 122 , - 265 , - 180 , - 323 , - 238 , - 381 , - 296 , - 439 , - 354 , - 41 , - 412 , - 99 , - 14 , - 157 , - 72 , - 215 , - 130 , - 273 , - 188 , - 331 , - 246 , - 389 , - 304 , - 447 , - 362 , - 49 , - 420 , - 107 , - 22 , - 165 , - 80 , - 223 , - 138 , - 281 , - 196 , - 339 , - 254 , - 397 , - 312 , - 455 , - 370 , - 57 , - 428 , - 115 , - 30 , - 173 , - 88 , - 231 , - 146 , - 289 , - 204 , - 347 , - 262 , - 405 , - 320 , - 7 , - 378 , - 65 , - 436 , - 123 , - 38 , - 181 , - 96 , - 239 , - 154 , - 297 , - 212 , - 355 , - 270 , - 413 , - 328 , - 15 , - 386 , - 73 , - 444 , - 131 , - 46 , - 189 , - 104 , - 247 , - 162 , - 305 , - 220 , - 363 , - 278 , - 421 , - 336 , - 23 , - 394 , - 81 , - 452 , - 139 , - 54 , - 197 , - 112 , - 255 , - 170 , - 313 , - 228 , - 371 , - 286 , - 429 , - 344 , - 31 , - 402 , - 89 , - 4 , - 147 , - 62 , - 205 , - 120 , - 263 , - 178 , - 321 , - 236 , - 379 , - 294 , - 437 , - 352 , - 39 , - 410 , - 97 , - 12 , - 155 , - 70 , - 213 , - 128 , - 271 , - 186 , - 329 , - 244 , - 387 , - 302 , - 445 , - 360 , - 47 , - 418 , - 105 , - 20 , - 163 , - 78 , - 221 , - 136 , - 279 , - 194 , - 337 , - 252 , - 395 , - 310 , - 453 , - 368 , - 55 , - 426 , - 113 , - 28 , - 171 , - 86 , - 229 , - 144 , - 287 , - 202 , - 345 , - 260 , - 403 , - 318 , - 5 , - 376 , - 63 , - 434 , - 121 , - 36 , - 179 , - 94 , - 237 , - 152 , - 295 , - 210 , - 353 , - 268 , - 411 , - 326 , - 13 , - 384 , - 71 , - 442 , - 129 , - 44 , - 187 , - 102 , - 245 , - 160 , - 303 , - 218 , - 361 , - 276 , - 419 , - 334 , - 21 , - 392 , - 79 , - 450 , - 137 , - 52 , - 195 , - 110 , - 253 , - 168 , - 311 , - 226 , - 369 , - 284 , - 427 , - 342 , - 29 , - 400 , - 87 , - 2 , - 145 , - 60 , - 203 , - 118 , - 261 , - 176 , - 319 , - 234 , - 377 , - 292 , - 435 , - 350 , - 37 , - 408 , - 95 , - 10 , - 153 , - 68 , - 211 , - 126 , - 269 , - 184 , - 327 , - 242 , - 385 , - 300 , - 443 , - 358 , - 45 , - 416 , - 103 , - 18 , - 161 , - 76 , - 219 , - 134 , - 277 , - 192 , - 335 , - 250 , - 393 , - 308 , - 451 , - 366 , - 53 , - 424 , - 111 , - 26 , - 169 , - 84 , - 227 , - 142 , - 285 , - 200 , - 343 , - 258 , - 401 , - 316 , - 3 , - 374 , - 61 , - 432 , - 119 , - 34 , - 177 , - 92 , - 235 , - 150 , - 293 , - 208 , - 351 , - 266 , - 409 , - 324 , - 11 , - 382 , - 69 , - 440 , - 127 , - 42 , - 185 , - 100 , - 243 , - 158 , - 301 , - 216 , - 359 , - 274 , - 417 , - 332 , - 19 , - 390 , - 77 , - 448 , - 135 , - 50 , - 193 , - 108 , - 251 , - 166 , - 309 , - 224 , - 367 , - 282 , - 425 , - 340 , - 27 , - 398 , - 85 , - 0 , - 305 , - 262 , - 335 , - 60 , - 365 , - 322 , - 395 , - 120 , - 425 , - 382 , - 455 , - 180 , - 21 , - 442 , - 51 , - 240 , - 81 , - 38 , - 111 , - 300 , - 141 , - 98 , - 171 , - 360 , - 201 , - 158 , - 231 , - 420 , - 261 , - 218 , - 291 , - 16 , - 321 , - 278 , - 351 , - 76 , - 381 , - 338 , - 411 , - 136 , - 441 , - 398 , - 7 , - 196 , - 37 , - 458 , - 67 , - 256 , - 97 , - 54 , - 127 , - 316 , - 157 , - 114 , - 187 , - 376 , - 217 , - 174 , - 247 , - 436 , - 277 , - 234 , - 307 , - 32 , - 337 , - 294 , - 367 , - 92 , - 397 , - 354 , - 427 , - 152 , - 457 , - 414 , - 23 , - 212 , - 53 , - 10 , - 83 , - 272 , - 113 , - 70 , - 143 , - 332 , - 173 , - 130 , - 203 , - 392 , - 233 , - 190 , - 263 , - 452 , - 293 , - 250 , - 323 , - 48 , - 353 , - 310 , - 383 , - 108 , - 413 , - 370 , - 443 , - 168 , - 9 , - 430 , - 39 , - 228 , - 69 , - 26 , - 99 , - 288 , - 129 , - 86 , - 159 , - 348 , - 189 , - 146 , - 219 , - 408 , - 249 , - 206 , - 279 , - 4 , - 309 , - 266 , - 339 , - 64 , - 369 , - 326 , - 399 , - 124 , - 429 , - 386 , - 459 , - 184 , - 25 , - 446 , - 55 , - 244 , - 85 , - 42 , - 115 , - 304 , - 145 , - 102 , - 175 , - 364 , - 205 , - 162 , - 235 , - 424 , - 265 , - 222 , - 295 , - 20 , - 325 , - 282 , - 355 , - 80 , - 385 , - 342 , - 415 , - 140 , - 445 , - 402 , - 11 , - 200 , - 41 , - 462 , - 71 , - 260 , - 101 , - 58 , - 131 , - 320 , - 161 , - 118 , - 191 , - 380 , - 221 , - 178 , - 251 , - 440 , - 281 , - 238 , - 311 , - 36 , - 341 , - 298 , - 371 , - 96 , - 401 , - 358 , - 431 , - 156 , - 461 , - 418 , - 27 , - 216 , - 57 , - 14 , - 87 , - 276 , - 117 , - 74 , - 147 , - 336 , - 177 , - 134 , - 207 , - 396 , - 237 , - 194 , - 267 , - 456 , - 297 , - 254 , - 327 , - 52 , - 357 , - 314 , - 387 , - 112 , - 417 , - 374 , - 447 , - 172 , - 13 , - 434 , - 43 , - 232 , - 73 , - 30 , - 103 , - 292 , - 133 , - 90 , - 163 , - 352 , - 193 , - 150 , - 223 , - 412 , - 253 , - 210 , - 283 , - 8 , - 313 , - 270 , - 343 , - 68 , - 373 , - 330 , - 403 , - 128 , - 433 , - 390 , - 463 , - 188 , - 29 , - 450 , - 59 , - 248 , - 89 , - 46 , - 119 , - 308 , - 149 , - 106 , - 179 , - 368 , - 209 , - 166 , - 239 , - 428 , - 269 , - 226 , - 299 , - 24 , - 329 , - 286 , - 359 , - 84 , - 389 , - 346 , - 419 , - 144 , - 449 , - 406 , - 15 , - 204 , - 45 , - 2 , - 75 , - 264 , - 105 , - 62 , - 135 , - 324 , - 165 , - 122 , - 195 , - 384 , - 225 , - 182 , - 255 , - 444 , - 285 , - 242 , - 315 , - 40 , - 345 , - 302 , - 375 , - 100 , - 405 , - 362 , - 435 , - 160 , - 1 , - 422 , - 31 , - 220 , - 61 , - 18 , - 91 , - 280 , - 121 , - 78 , - 151 , - 340 , - 181 , - 138 , - 211 , - 400 , - 241 , - 198 , - 271 , - 460 , - 301 , - 258 , - 331 , - 56 , - 361 , - 318 , - 391 , - 116 , - 421 , - 378 , - 451 , - 176 , - 17 , - 438 , - 47 , - 236 , - 77 , - 34 , - 107 , - 296 , - 137 , - 94 , - 167 , - 356 , - 197 , - 154 , - 227 , - 416 , - 257 , - 214 , - 287 , - 12 , - 317 , - 274 , - 347 , - 72 , - 377 , - 334 , - 407 , - 132 , - 437 , - 394 , - 3 , - 192 , - 33 , - 454 , - 63 , - 252 , - 93 , - 50 , - 123 , - 312 , - 153 , - 110 , - 183 , - 372 , - 213 , - 170 , - 243 , - 432 , - 273 , - 230 , - 303 , - 28 , - 333 , - 290 , - 363 , - 88 , - 393 , - 350 , - 423 , - 148 , - 453 , - 410 , - 19 , - 208 , - 49 , - 6 , - 79 , - 268 , - 109 , - 66 , - 139 , - 328 , - 169 , - 126 , - 199 , - 388 , - 229 , - 186 , - 259 , - 448 , - 289 , - 246 , - 319 , - 44 , - 349 , - 306 , - 379 , - 104 , - 409 , - 366 , - 439 , - 164 , - 5 , - 426 , - 35 , - 224 , - 65 , - 22 , - 95 , - 284 , - 125 , - 82 , - 155 , - 344 , - 185 , - 142 , - 215 , - 404 , - 245 , - 202 , - 275 , - 0 , - 147 , - 58 , - 205 , - 116 , - 263 , - 174 , - 321 , - 232 , - 379 , - 290 , - 437 , - 348 , - 23 , - 406 , - 81 , - 464 , - 139 , - 50 , - 197 , - 108 , - 255 , - 166 , - 313 , - 224 , - 371 , - 282 , - 429 , - 340 , - 15 , - 398 , - 73 , - 456 , - 131 , - 42 , - 189 , - 100 , - 247 , - 158 , - 305 , - 216 , - 363 , - 274 , - 421 , - 332 , - 7 , - 390 , - 65 , - 448 , - 123 , - 34 , - 181 , - 92 , - 239 , - 150 , - 297 , - 208 , - 355 , - 266 , - 413 , - 324 , - 471 , - 382 , - 57 , - 440 , - 115 , - 26 , - 173 , - 84 , - 231 , - 142 , - 289 , - 200 , - 347 , - 258 , - 405 , - 316 , - 463 , - 374 , - 49 , - 432 , - 107 , - 18 , - 165 , - 76 , - 223 , - 134 , - 281 , - 192 , - 339 , - 250 , - 397 , - 308 , - 455 , - 366 , - 41 , - 424 , - 99 , - 10 , - 157 , - 68 , - 215 , - 126 , - 273 , - 184 , - 331 , - 242 , - 389 , - 300 , - 447 , - 358 , - 33 , - 416 , - 91 , - 2 , - 149 , - 60 , - 207 , - 118 , - 265 , - 176 , - 323 , - 234 , - 381 , - 292 , - 439 , - 350 , - 25 , - 408 , - 83 , - 466 , - 141 , - 52 , - 199 , - 110 , - 257 , - 168 , - 315 , - 226 , - 373 , - 284 , - 431 , - 342 , - 17 , - 400 , - 75 , - 458 , - 133 , - 44 , - 191 , - 102 , - 249 , - 160 , - 307 , - 218 , - 365 , - 276 , - 423 , - 334 , - 9 , - 392 , - 67 , - 450 , - 125 , - 36 , - 183 , - 94 , - 241 , - 152 , - 299 , - 210 , - 357 , - 268 , - 415 , - 326 , - 1 , - 384 , - 59 , - 442 , - 117 , - 28 , - 175 , - 86 , - 233 , - 144 , - 291 , - 202 , - 349 , - 260 , - 407 , - 318 , - 465 , - 376 , - 51 , - 434 , - 109 , - 20 , - 167 , - 78 , - 225 , - 136 , - 283 , - 194 , - 341 , - 252 , - 399 , - 310 , - 457 , - 368 , - 43 , - 426 , - 101 , - 12 , - 159 , - 70 , - 217 , - 128 , - 275 , - 186 , - 333 , - 244 , - 391 , - 302 , - 449 , - 360 , - 35 , - 418 , - 93 , - 4 , - 151 , - 62 , - 209 , - 120 , - 267 , - 178 , - 325 , - 236 , - 383 , - 294 , - 441 , - 352 , - 27 , - 410 , - 85 , - 468 , - 143 , - 54 , - 201 , - 112 , - 259 , - 170 , - 317 , - 228 , - 375 , - 286 , - 433 , - 344 , - 19 , - 402 , - 77 , - 460 , - 135 , - 46 , - 193 , - 104 , - 251 , - 162 , - 309 , - 220 , - 367 , - 278 , - 425 , - 336 , - 11 , - 394 , - 69 , - 452 , - 127 , - 38 , - 185 , - 96 , - 243 , - 154 , - 301 , - 212 , - 359 , - 270 , - 417 , - 328 , - 3 , - 386 , - 61 , - 444 , - 119 , - 30 , - 177 , - 88 , - 235 , - 146 , - 293 , - 204 , - 351 , - 262 , - 409 , - 320 , - 467 , - 378 , - 53 , - 436 , - 111 , - 22 , - 169 , - 80 , - 227 , - 138 , - 285 , - 196 , - 343 , - 254 , - 401 , - 312 , - 459 , - 370 , - 45 , - 428 , - 103 , - 14 , - 161 , - 72 , - 219 , - 130 , - 277 , - 188 , - 335 , - 246 , - 393 , - 304 , - 451 , - 362 , - 37 , - 420 , - 95 , - 6 , - 153 , - 64 , - 211 , - 122 , - 269 , - 180 , - 327 , - 238 , - 385 , - 296 , - 443 , - 354 , - 29 , - 412 , - 87 , - 470 , - 145 , - 56 , - 203 , - 114 , - 261 , - 172 , - 319 , - 230 , - 377 , - 288 , - 435 , - 346 , - 21 , - 404 , - 79 , - 462 , - 137 , - 48 , - 195 , - 106 , - 253 , - 164 , - 311 , - 222 , - 369 , - 280 , - 427 , - 338 , - 13 , - 396 , - 71 , - 454 , - 129 , - 40 , - 187 , - 98 , - 245 , - 156 , - 303 , - 214 , - 361 , - 272 , - 419 , - 330 , - 5 , - 388 , - 63 , - 446 , - 121 , - 32 , - 179 , - 90 , - 237 , - 148 , - 295 , - 206 , - 353 , - 264 , - 411 , - 322 , - 469 , - 380 , - 55 , - 438 , - 113 , - 24 , - 171 , - 82 , - 229 , - 140 , - 287 , - 198 , - 345 , - 256 , - 403 , - 314 , - 461 , - 372 , - 47 , - 430 , - 105 , - 16 , - 163 , - 74 , - 221 , - 132 , - 279 , - 190 , - 337 , - 248 , - 395 , - 306 , - 453 , - 364 , - 39 , - 422 , - 97 , - 8 , - 155 , - 66 , - 213 , - 124 , - 271 , - 182 , - 329 , - 240 , - 387 , - 298 , - 445 , - 356 , - 31 , - 414 , - 89 , - 0 , - 269 , - 418 , - 447 , - 356 , - 145 , - 294 , - 323 , - 232 , - 21 , - 170 , - 199 , - 108 , - 377 , - 46 , - 75 , - 464 , - 253 , - 402 , - 431 , - 340 , - 129 , - 278 , - 307 , - 216 , - 5 , - 154 , - 183 , - 92 , - 361 , - 30 , - 59 , - 448 , - 237 , - 386 , - 415 , - 324 , - 113 , - 262 , - 291 , - 200 , - 469 , - 138 , - 167 , - 76 , - 345 , - 14 , - 43 , - 432 , - 221 , - 370 , - 399 , - 308 , - 97 , - 246 , - 275 , - 184 , - 453 , - 122 , - 151 , - 60 , - 329 , - 478 , - 27 , - 416 , - 205 , - 354 , - 383 , - 292 , - 81 , - 230 , - 259 , - 168 , - 437 , - 106 , - 135 , - 44 , - 313 , - 462 , - 11 , - 400 , - 189 , - 338 , - 367 , - 276 , - 65 , - 214 , - 243 , - 152 , - 421 , - 90 , - 119 , - 28 , - 297 , - 446 , - 475 , - 384 , - 173 , - 322 , - 351 , - 260 , - 49 , - 198 , - 227 , - 136 , - 405 , - 74 , - 103 , - 12 , - 281 , - 430 , - 459 , - 368 , - 157 , - 306 , - 335 , - 244 , - 33 , - 182 , - 211 , - 120 , - 389 , - 58 , - 87 , - 476 , - 265 , - 414 , - 443 , - 352 , - 141 , - 290 , - 319 , - 228 , - 17 , - 166 , - 195 , - 104 , - 373 , - 42 , - 71 , - 460 , - 249 , - 398 , - 427 , - 336 , - 125 , - 274 , - 303 , - 212 , - 1 , - 150 , - 179 , - 88 , - 357 , - 26 , - 55 , - 444 , - 233 , - 382 , - 411 , - 320 , - 109 , - 258 , - 287 , - 196 , - 465 , - 134 , - 163 , - 72 , - 341 , - 10 , - 39 , - 428 , - 217 , - 366 , - 395 , - 304 , - 93 , - 242 , - 271 , - 180 , - 449 , - 118 , - 147 , - 56 , - 325 , - 474 , - 23 , - 412 , - 201 , - 350 , - 379 , - 288 , - 77 , - 226 , - 255 , - 164 , - 433 , - 102 , - 131 , - 40 , - 309 , - 458 , - 7 , - 396 , - 185 , - 334 , - 363 , - 272 , - 61 , - 210 , - 239 , - 148 , - 417 , - 86 , - 115 , - 24 , - 293 , - 442 , - 471 , - 380 , - 169 , - 318 , - 347 , - 256 , - 45 , - 194 , - 223 , - 132 , - 401 , - 70 , - 99 , - 8 , - 277 , - 426 , - 455 , - 364 , - 153 , - 302 , - 331 , - 240 , - 29 , - 178 , - 207 , - 116 , - 385 , - 54 , - 83 , - 472 , - 261 , - 410 , - 439 , - 348 , - 137 , - 286 , - 315 , - 224 , - 13 , - 162 , - 191 , - 100 , - 369 , - 38 , - 67 , - 456 , - 245 , - 394 , - 423 , - 332 , - 121 , - 270 , - 299 , - 208 , - 477 , - 146 , - 175 , - 84 , - 353 , - 22 , - 51 , - 440 , - 229 , - 378 , - 407 , - 316 , - 105 , - 254 , - 283 , - 192 , - 461 , - 130 , - 159 , - 68 , - 337 , - 6 , - 35 , - 424 , - 213 , - 362 , - 391 , - 300 , - 89 , - 238 , - 267 , - 176 , - 445 , - 114 , - 143 , - 52 , - 321 , - 470 , - 19 , - 408 , - 197 , - 346 , - 375 , - 284 , - 73 , - 222 , - 251 , - 160 , - 429 , - 98 , - 127 , - 36 , - 305 , - 454 , - 3 , - 392 , - 181 , - 330 , - 359 , - 268 , - 57 , - 206 , - 235 , - 144 , - 413 , - 82 , - 111 , - 20 , - 289 , - 438 , - 467 , - 376 , - 165 , - 314 , - 343 , - 252 , - 41 , - 190 , - 219 , - 128 , - 397 , - 66 , - 95 , - 4 , - 273 , - 422 , - 451 , - 360 , - 149 , - 298 , - 327 , - 236 , - 25 , - 174 , - 203 , - 112 , - 381 , - 50 , - 79 , - 468 , - 257 , - 406 , - 435 , - 344 , - 133 , - 282 , - 311 , - 220 , - 9 , - 158 , - 187 , - 96 , - 365 , - 34 , - 63 , - 452 , - 241 , - 390 , - 419 , - 328 , - 117 , - 266 , - 295 , - 204 , - 473 , - 142 , - 171 , - 80 , - 349 , - 18 , - 47 , - 436 , - 225 , - 374 , - 403 , - 312 , - 101 , - 250 , - 279 , - 188 , - 457 , - 126 , - 155 , - 64 , - 333 , - 2 , - 31 , - 420 , - 209 , - 358 , - 387 , - 296 , - 85 , - 234 , - 263 , - 172 , - 441 , - 110 , - 139 , - 48 , - 317 , - 466 , - 15 , - 404 , - 193 , - 342 , - 371 , - 280 , - 69 , - 218 , - 247 , - 156 , - 425 , - 94 , - 123 , - 32 , - 301 , - 450 , - 479 , - 388 , - 177 , - 326 , - 355 , - 264 , - 53 , - 202 , - 231 , - 140 , - 409 , - 78 , - 107 , - 16 , - 285 , - 434 , - 463 , - 372 , - 161 , - 310 , - 339 , - 248 , - 37 , - 186 , - 215 , - 124 , - 393 , - 62 , - 91 , - 0 , - 213 , - 182 , - 395 , - 364 , - 89 , - 58 , - 271 , - 240 , - 453 , - 422 , - 147 , - 116 , - 329 , - 298 , - 23 , - 480 , - 205 , - 174 , - 387 , - 356 , - 81 , - 50 , - 263 , - 232 , - 445 , - 414 , - 139 , - 108 , - 321 , - 290 , - 15 , - 472 , - 197 , - 166 , - 379 , - 348 , - 73 , - 42 , - 255 , - 224 , - 437 , - 406 , - 131 , - 100 , - 313 , - 282 , - 7 , - 464 , - 189 , - 158 , - 371 , - 340 , - 65 , - 34 , - 247 , - 216 , - 429 , - 398 , - 123 , - 92 , - 305 , - 274 , - 487 , - 456 , - 181 , - 150 , - 363 , - 332 , - 57 , - 26 , - 239 , - 208 , - 421 , - 390 , - 115 , - 84 , - 297 , - 266 , - 479 , - 448 , - 173 , - 142 , - 355 , - 324 , - 49 , - 18 , - 231 , - 200 , - 413 , - 382 , - 107 , - 76 , - 289 , - 258 , - 471 , - 440 , - 165 , - 134 , - 347 , - 316 , - 41 , - 10 , - 223 , - 192 , - 405 , - 374 , - 99 , - 68 , - 281 , - 250 , - 463 , - 432 , - 157 , - 126 , - 339 , - 308 , - 33 , - 2 , - 215 , - 184 , - 397 , - 366 , - 91 , - 60 , - 273 , - 242 , - 455 , - 424 , - 149 , - 118 , - 331 , - 300 , - 25 , - 482 , - 207 , - 176 , - 389 , - 358 , - 83 , - 52 , - 265 , - 234 , - 447 , - 416 , - 141 , - 110 , - 323 , - 292 , - 17 , - 474 , - 199 , - 168 , - 381 , - 350 , - 75 , - 44 , - 257 , - 226 , - 439 , - 408 , - 133 , - 102 , - 315 , - 284 , - 9 , - 466 , - 191 , - 160 , - 373 , - 342 , - 67 , - 36 , - 249 , - 218 , - 431 , - 400 , - 125 , - 94 , - 307 , - 276 , - 1 , - 458 , - 183 , - 152 , - 365 , - 334 , - 59 , - 28 , - 241 , - 210 , - 423 , - 392 , - 117 , - 86 , - 299 , - 268 , - 481 , - 450 , - 175 , - 144 , - 357 , - 326 , - 51 , - 20 , - 233 , - 202 , - 415 , - 384 , - 109 , - 78 , - 291 , - 260 , - 473 , - 442 , - 167 , - 136 , - 349 , - 318 , - 43 , - 12 , - 225 , - 194 , - 407 , - 376 , - 101 , - 70 , - 283 , - 252 , - 465 , - 434 , - 159 , - 128 , - 341 , - 310 , - 35 , - 4 , - 217 , - 186 , - 399 , - 368 , - 93 , - 62 , - 275 , - 244 , - 457 , - 426 , - 151 , - 120 , - 333 , - 302 , - 27 , - 484 , - 209 , - 178 , - 391 , - 360 , - 85 , - 54 , - 267 , - 236 , - 449 , - 418 , - 143 , - 112 , - 325 , - 294 , - 19 , - 476 , - 201 , - 170 , - 383 , - 352 , - 77 , - 46 , - 259 , - 228 , - 441 , - 410 , - 135 , - 104 , - 317 , - 286 , - 11 , - 468 , - 193 , - 162 , - 375 , - 344 , - 69 , - 38 , - 251 , - 220 , - 433 , - 402 , - 127 , - 96 , - 309 , - 278 , - 3 , - 460 , - 185 , - 154 , - 367 , - 336 , - 61 , - 30 , - 243 , - 212 , - 425 , - 394 , - 119 , - 88 , - 301 , - 270 , - 483 , - 452 , - 177 , - 146 , - 359 , - 328 , - 53 , - 22 , - 235 , - 204 , - 417 , - 386 , - 111 , - 80 , - 293 , - 262 , - 475 , - 444 , - 169 , - 138 , - 351 , - 320 , - 45 , - 14 , - 227 , - 196 , - 409 , - 378 , - 103 , - 72 , - 285 , - 254 , - 467 , - 436 , - 161 , - 130 , - 343 , - 312 , - 37 , - 6 , - 219 , - 188 , - 401 , - 370 , - 95 , - 64 , - 277 , - 246 , - 459 , - 428 , - 153 , - 122 , - 335 , - 304 , - 29 , - 486 , - 211 , - 180 , - 393 , - 362 , - 87 , - 56 , - 269 , - 238 , - 451 , - 420 , - 145 , - 114 , - 327 , - 296 , - 21 , - 478 , - 203 , - 172 , - 385 , - 354 , - 79 , - 48 , - 261 , - 230 , - 443 , - 412 , - 137 , - 106 , - 319 , - 288 , - 13 , - 470 , - 195 , - 164 , - 377 , - 346 , - 71 , - 40 , - 253 , - 222 , - 435 , - 404 , - 129 , - 98 , - 311 , - 280 , - 5 , - 462 , - 187 , - 156 , - 369 , - 338 , - 63 , - 32 , - 245 , - 214 , - 427 , - 396 , - 121 , - 90 , - 303 , - 272 , - 485 , - 454 , - 179 , - 148 , - 361 , - 330 , - 55 , - 24 , - 237 , - 206 , - 419 , - 388 , - 113 , - 82 , - 295 , - 264 , - 477 , - 446 , - 171 , - 140 , - 353 , - 322 , - 47 , - 16 , - 229 , - 198 , - 411 , - 380 , - 105 , - 74 , - 287 , - 256 , - 469 , - 438 , - 163 , - 132 , - 345 , - 314 , - 39 , - 8 , - 221 , - 190 , - 403 , - 372 , - 97 , - 66 , - 279 , - 248 , - 461 , - 430 , - 155 , - 124 , - 337 , - 306 , - 31 , - 0 , - 219 , - 66 , - 37 , - 132 , - 351 , - 198 , - 169 , - 264 , - 483 , - 330 , - 301 , - 396 , - 119 , - 462 , - 433 , - 32 , - 251 , - 98 , - 69 , - 164 , - 383 , - 230 , - 201 , - 296 , - 19 , - 362 , - 333 , - 428 , - 151 , - 494 , - 465 , - 64 , - 283 , - 130 , - 101 , - 196 , - 415 , - 262 , - 233 , - 328 , - 51 , - 394 , - 365 , - 460 , - 183 , - 30 , - 1 , - 96 , - 315 , - 162 , - 133 , - 228 , - 447 , - 294 , - 265 , - 360 , - 83 , - 426 , - 397 , - 492 , - 215 , - 62 , - 33 , - 128 , - 347 , - 194 , - 165 , - 260 , - 479 , - 326 , - 297 , - 392 , - 115 , - 458 , - 429 , - 28 , - 247 , - 94 , - 65 , - 160 , - 379 , - 226 , - 197 , - 292 , - 15 , - 358 , - 329 , - 424 , - 147 , - 490 , - 461 , - 60 , - 279 , - 126 , - 97 , - 192 , - 411 , - 258 , - 229 , - 324 , - 47 , - 390 , - 361 , - 456 , - 179 , - 26 , - 493 , - 92 , - 311 , - 158 , - 129 , - 224 , - 443 , - 290 , - 261 , - 356 , - 79 , - 422 , - 393 , - 488 , - 211 , - 58 , - 29 , - 124 , - 343 , - 190 , - 161 , - 256 , - 475 , - 322 , - 293 , - 388 , - 111 , - 454 , - 425 , - 24 , - 243 , - 90 , - 61 , - 156 , - 375 , - 222 , - 193 , - 288 , - 11 , - 354 , - 325 , - 420 , - 143 , - 486 , - 457 , - 56 , - 275 , - 122 , - 93 , - 188 , - 407 , - 254 , - 225 , - 320 , - 43 , - 386 , - 357 , - 452 , - 175 , - 22 , - 489 , - 88 , - 307 , - 154 , - 125 , - 220 , - 439 , - 286 , - 257 , - 352 , - 75 , - 418 , - 389 , - 484 , - 207 , - 54 , - 25 , - 120 , - 339 , - 186 , - 157 , - 252 , - 471 , - 318 , - 289 , - 384 , - 107 , - 450 , - 421 , - 20 , - 239 , - 86 , - 57 , - 152 , - 371 , - 218 , - 189 , - 284 , - 7 , - 350 , - 321 , - 416 , - 139 , - 482 , - 453 , - 52 , - 271 , - 118 , - 89 , - 184 , - 403 , - 250 , - 221 , - 316 , - 39 , - 382 , - 353 , - 448 , - 171 , - 18 , - 485 , - 84 , - 303 , - 150 , - 121 , - 216 , - 435 , - 282 , - 253 , - 348 , - 71 , - 414 , - 385 , - 480 , - 203 , - 50 , - 21 , - 116 , - 335 , - 182 , - 153 , - 248 , - 467 , - 314 , - 285 , - 380 , - 103 , - 446 , - 417 , - 16 , - 235 , - 82 , - 53 , - 148 , - 367 , - 214 , - 185 , - 280 , - 3 , - 346 , - 317 , - 412 , - 135 , - 478 , - 449 , - 48 , - 267 , - 114 , - 85 , - 180 , - 399 , - 246 , - 217 , - 312 , - 35 , - 378 , - 349 , - 444 , - 167 , - 14 , - 481 , - 80 , - 299 , - 146 , - 117 , - 212 , - 431 , - 278 , - 249 , - 344 , - 67 , - 410 , - 381 , - 476 , - 199 , - 46 , - 17 , - 112 , - 331 , - 178 , - 149 , - 244 , - 463 , - 310 , - 281 , - 376 , - 99 , - 442 , - 413 , - 12 , - 231 , - 78 , - 49 , - 144 , - 363 , - 210 , - 181 , - 276 , - 495 , - 342 , - 313 , - 408 , - 131 , - 474 , - 445 , - 44 , - 263 , - 110 , - 81 , - 176 , - 395 , - 242 , - 213 , - 308 , - 31 , - 374 , - 345 , - 440 , - 163 , - 10 , - 477 , - 76 , - 295 , - 142 , - 113 , - 208 , - 427 , - 274 , - 245 , - 340 , - 63 , - 406 , - 377 , - 472 , - 195 , - 42 , - 13 , - 108 , - 327 , - 174 , - 145 , - 240 , - 459 , - 306 , - 277 , - 372 , - 95 , - 438 , - 409 , - 8 , - 227 , - 74 , - 45 , - 140 , - 359 , - 206 , - 177 , - 272 , - 491 , - 338 , - 309 , - 404 , - 127 , - 470 , - 441 , - 40 , - 259 , - 106 , - 77 , - 172 , - 391 , - 238 , - 209 , - 304 , - 27 , - 370 , - 341 , - 436 , - 159 , - 6 , - 473 , - 72 , - 291 , - 138 , - 109 , - 204 , - 423 , - 270 , - 241 , - 336 , - 59 , - 402 , - 373 , - 468 , - 191 , - 38 , - 9 , - 104 , - 323 , - 170 , - 141 , - 236 , - 455 , - 302 , - 273 , - 368 , - 91 , - 434 , - 405 , - 4 , - 223 , - 70 , - 41 , - 136 , - 355 , - 202 , - 173 , - 268 , - 487 , - 334 , - 305 , - 400 , - 123 , - 466 , - 437 , - 36 , - 255 , - 102 , - 73 , - 168 , - 387 , - 234 , - 205 , - 300 , - 23 , - 366 , - 337 , - 432 , - 155 , - 2 , - 469 , - 68 , - 287 , - 134 , - 105 , - 200 , - 419 , - 266 , - 237 , - 332 , - 55 , - 398 , - 369 , - 464 , - 187 , - 34 , - 5 , - 100 , - 319 , - 166 , - 137 , - 232 , - 451 , - 298 , - 269 , - 364 , - 87 , - 430 , - 401 , - 0 , - 139 , - 446 , - 417 , - 52 , - 359 , - 330 , - 469 , - 272 , - 243 , - 382 , - 185 , - 156 , - 295 , - 98 , - 69 , - 208 , - 11 , - 486 , - 121 , - 428 , - 399 , - 34 , - 341 , - 312 , - 451 , - 254 , - 225 , - 364 , - 167 , - 138 , - 277 , - 80 , - 51 , - 190 , - 497 , - 468 , - 103 , - 410 , - 381 , - 16 , - 323 , - 294 , - 433 , - 236 , - 207 , - 346 , - 149 , - 120 , - 259 , - 62 , - 33 , - 172 , - 479 , - 450 , - 85 , - 392 , - 363 , - 502 , - 305 , - 276 , - 415 , - 218 , - 189 , - 328 , - 131 , - 102 , - 241 , - 44 , - 15 , - 154 , - 461 , - 432 , - 67 , - 374 , - 345 , - 484 , - 287 , - 258 , - 397 , - 200 , - 171 , - 310 , - 113 , - 84 , - 223 , - 26 , - 501 , - 136 , - 443 , - 414 , - 49 , - 356 , - 327 , - 466 , - 269 , - 240 , - 379 , - 182 , - 153 , - 292 , - 95 , - 66 , - 205 , - 8 , - 483 , - 118 , - 425 , - 396 , - 31 , - 338 , - 309 , - 448 , - 251 , - 222 , - 361 , - 164 , - 135 , - 274 , - 77 , - 48 , - 187 , - 494 , - 465 , - 100 , - 407 , - 378 , - 13 , - 320 , - 291 , - 430 , - 233 , - 204 , - 343 , - 146 , - 117 , - 256 , - 59 , - 30 , - 169 , - 476 , - 447 , - 82 , - 389 , - 360 , - 499 , - 302 , - 273 , - 412 , - 215 , - 186 , - 325 , - 128 , - 99 , - 238 , - 41 , - 12 , - 151 , - 458 , - 429 , - 64 , - 371 , - 342 , - 481 , - 284 , - 255 , - 394 , - 197 , - 168 , - 307 , - 110 , - 81 , - 220 , - 23 , - 498 , - 133 , - 440 , - 411 , - 46 , - 353 , - 324 , - 463 , - 266 , - 237 , - 376 , - 179 , - 150 , - 289 , - 92 , - 63 , - 202 , - 5 , - 480 , - 115 , - 422 , - 393 , - 28 , - 335 , - 306 , - 445 , - 248 , - 219 , - 358 , - 161 , - 132 , - 271 , - 74 , - 45 , - 184 , - 491 , - 462 , - 97 , - 404 , - 375 , - 10 , - 317 , - 288 , - 427 , - 230 , - 201 , - 340 , - 143 , - 114 , - 253 , - 56 , - 27 , - 166 , - 473 , - 444 , - 79 , - 386 , - 357 , - 496 , - 299 , - 270 , - 409 , - 212 , - 183 , - 322 , - 125 , - 96 , - 235 , - 38 , - 9 , - 148 , - 455 , - 426 , - 61 , - 368 , - 339 , - 478 , - 281 , - 252 , - 391 , - 194 , - 165 , - 304 , - 107 , - 78 , - 217 , - 20 , - 495 , - 130 , - 437 , - 408 , - 43 , - 350 , - 321 , - 460 , - 263 , - 234 , - 373 , - 176 , - 147 , - 286 , - 89 , - 60 , - 199 , - 2 , - 477 , - 112 , - 419 , - 390 , - 25 , - 332 , - 303 , - 442 , - 245 , - 216 , - 355 , - 158 , - 129 , - 268 , - 71 , - 42 , - 181 , - 488 , - 459 , - 94 , - 401 , - 372 , - 7 , - 314 , - 285 , - 424 , - 227 , - 198 , - 337 , - 140 , - 111 , - 250 , - 53 , - 24 , - 163 , - 470 , - 441 , - 76 , - 383 , - 354 , - 493 , - 296 , - 267 , - 406 , - 209 , - 180 , - 319 , - 122 , - 93 , - 232 , - 35 , - 6 , - 145 , - 452 , - 423 , - 58 , - 365 , - 336 , - 475 , - 278 , - 249 , - 388 , - 191 , - 162 , - 301 , - 104 , - 75 , - 214 , - 17 , - 492 , - 127 , - 434 , - 405 , - 40 , - 347 , - 318 , - 457 , - 260 , - 231 , - 370 , - 173 , - 144 , - 283 , - 86 , - 57 , - 196 , - 503 , - 474 , - 109 , - 416 , - 387 , - 22 , - 329 , - 300 , - 439 , - 242 , - 213 , - 352 , - 155 , - 126 , - 265 , - 68 , - 39 , - 178 , - 485 , - 456 , - 91 , - 398 , - 369 , - 4 , - 311 , - 282 , - 421 , - 224 , - 195 , - 334 , - 137 , - 108 , - 247 , - 50 , - 21 , - 160 , - 467 , - 438 , - 73 , - 380 , - 351 , - 490 , - 293 , - 264 , - 403 , - 206 , - 177 , - 316 , - 119 , - 90 , - 229 , - 32 , - 3 , - 142 , - 449 , - 420 , - 55 , - 362 , - 333 , - 472 , - 275 , - 246 , - 385 , - 188 , - 159 , - 298 , - 101 , - 72 , - 211 , - 14 , - 489 , - 124 , - 431 , - 402 , - 37 , - 344 , - 315 , - 454 , - 257 , - 228 , - 367 , - 170 , - 141 , - 280 , - 83 , - 54 , - 193 , - 500 , - 471 , - 106 , - 413 , - 384 , - 19 , - 326 , - 297 , - 436 , - 239 , - 210 , - 349 , - 152 , - 123 , - 262 , - 65 , - 36 , - 175 , - 482 , - 453 , - 88 , - 395 , - 366 , - 1 , - 308 , - 279 , - 418 , - 221 , - 192 , - 331 , - 134 , - 105 , - 244 , - 47 , - 18 , - 157 , - 464 , - 435 , - 70 , - 377 , - 348 , - 487 , - 290 , - 261 , - 400 , - 203 , - 174 , - 313 , - 116 , - 87 , - 226 , - 29 , - 0 , - 95 , - 318 , - 157 , - 124 , - 219 , - 442 , - 281 , - 248 , - 343 , - 54 , - 405 , - 372 , - 467 , - 178 , - 17 , - 496 , - 79 , - 302 , - 141 , - 108 , - 203 , - 426 , - 265 , - 232 , - 327 , - 38 , - 389 , - 356 , - 451 , - 162 , - 1 , - 480 , - 63 , - 286 , - 125 , - 92 , - 187 , - 410 , - 249 , - 216 , - 311 , - 22 , - 373 , - 340 , - 435 , - 146 , - 497 , - 464 , - 47 , - 270 , - 109 , - 76 , - 171 , - 394 , - 233 , - 200 , - 295 , - 6 , - 357 , - 324 , - 419 , - 130 , - 481 , - 448 , - 31 , - 254 , - 93 , - 60 , - 155 , - 378 , - 217 , - 184 , - 279 , - 502 , - 341 , - 308 , - 403 , - 114 , - 465 , - 432 , - 15 , - 238 , - 77 , - 44 , - 139 , - 362 , - 201 , - 168 , - 263 , - 486 , - 325 , - 292 , - 387 , - 98 , - 449 , - 416 , - 511 , - 222 , - 61 , - 28 , - 123 , - 346 , - 185 , - 152 , - 247 , - 470 , - 309 , - 276 , - 371 , - 82 , - 433 , - 400 , - 495 , - 206 , - 45 , - 12 , - 107 , - 330 , - 169 , - 136 , - 231 , - 454 , - 293 , - 260 , - 355 , - 66 , - 417 , - 384 , - 479 , - 190 , - 29 , - 508 , - 91 , - 314 , - 153 , - 120 , - 215 , - 438 , - 277 , - 244 , - 339 , - 50 , - 401 , - 368 , - 463 , - 174 , - 13 , - 492 , - 75 , - 298 , - 137 , - 104 , - 199 , - 422 , - 261 , - 228 , - 323 , - 34 , - 385 , - 352 , - 447 , - 158 , - 509 , - 476 , - 59 , - 282 , - 121 , - 88 , - 183 , - 406 , - 245 , - 212 , - 307 , - 18 , - 369 , - 336 , - 431 , - 142 , - 493 , - 460 , - 43 , - 266 , - 105 , - 72 , - 167 , - 390 , - 229 , - 196 , - 291 , - 2 , - 353 , - 320 , - 415 , - 126 , - 477 , - 444 , - 27 , - 250 , - 89 , - 56 , - 151 , - 374 , - 213 , - 180 , - 275 , - 498 , - 337 , - 304 , - 399 , - 110 , - 461 , - 428 , - 11 , - 234 , - 73 , - 40 , - 135 , - 358 , - 197 , - 164 , - 259 , - 482 , - 321 , - 288 , - 383 , - 94 , - 445 , - 412 , - 507 , - 218 , - 57 , - 24 , - 119 , - 342 , - 181 , - 148 , - 243 , - 466 , - 305 , - 272 , - 367 , - 78 , - 429 , - 396 , - 491 , - 202 , - 41 , - 8 , - 103 , - 326 , - 165 , - 132 , - 227 , - 450 , - 289 , - 256 , - 351 , - 62 , - 413 , - 380 , - 475 , - 186 , - 25 , - 504 , - 87 , - 310 , - 149 , - 116 , - 211 , - 434 , - 273 , - 240 , - 335 , - 46 , - 397 , - 364 , - 459 , - 170 , - 9 , - 488 , - 71 , - 294 , - 133 , - 100 , - 195 , - 418 , - 257 , - 224 , - 319 , - 30 , - 381 , - 348 , - 443 , - 154 , - 505 , - 472 , - 55 , - 278 , - 117 , - 84 , - 179 , - 402 , - 241 , - 208 , - 303 , - 14 , - 365 , - 332 , - 427 , - 138 , - 489 , - 456 , - 39 , - 262 , - 101 , - 68 , - 163 , - 386 , - 225 , - 192 , - 287 , - 510 , - 349 , - 316 , - 411 , - 122 , - 473 , - 440 , - 23 , - 246 , - 85 , - 52 , - 147 , - 370 , - 209 , - 176 , - 271 , - 494 , - 333 , - 300 , - 395 , - 106 , - 457 , - 424 , - 7 , - 230 , - 69 , - 36 , - 131 , - 354 , - 193 , - 160 , - 255 , - 478 , - 317 , - 284 , - 379 , - 90 , - 441 , - 408 , - 503 , - 214 , - 53 , - 20 , - 115 , - 338 , - 177 , - 144 , - 239 , - 462 , - 301 , - 268 , - 363 , - 74 , - 425 , - 392 , - 487 , - 198 , - 37 , - 4 , - 99 , - 322 , - 161 , - 128 , - 223 , - 446 , - 285 , - 252 , - 347 , - 58 , - 409 , - 376 , - 471 , - 182 , - 21 , - 500 , - 83 , - 306 , - 145 , - 112 , - 207 , - 430 , - 269 , - 236 , - 331 , - 42 , - 393 , - 360 , - 455 , - 166 , - 5 , - 484 , - 67 , - 290 , - 129 , - 96 , - 191 , - 414 , - 253 , - 220 , - 315 , - 26 , - 377 , - 344 , - 439 , - 150 , - 501 , - 468 , - 51 , - 274 , - 113 , - 80 , - 175 , - 398 , - 237 , - 204 , - 299 , - 10 , - 361 , - 328 , - 423 , - 134 , - 485 , - 452 , - 35 , - 258 , - 97 , - 64 , - 159 , - 382 , - 221 , - 188 , - 283 , - 506 , - 345 , - 312 , - 407 , - 118 , - 469 , - 436 , - 19 , - 242 , - 81 , - 48 , - 143 , - 366 , - 205 , - 172 , - 267 , - 490 , - 329 , - 296 , - 391 , - 102 , - 453 , - 420 , - 3 , - 226 , - 65 , - 32 , - 127 , - 350 , - 189 , - 156 , - 251 , - 474 , - 313 , - 280 , - 375 , - 86 , - 437 , - 404 , - 499 , - 210 , - 49 , - 16 , - 111 , - 334 , - 173 , - 140 , - 235 , - 458 , - 297 , - 264 , - 359 , - 70 , - 421 , - 388 , - 483 , - 194 , - 33 , - 0 , - 83 , - 298 , - 117 , - 68 , - 151 , - 366 , - 185 , - 136 , - 219 , - 434 , - 253 , - 204 , - 287 , - 502 , - 321 , - 272 , - 355 , - 42 , - 389 , - 340 , - 423 , - 110 , - 457 , - 408 , - 491 , - 178 , - 525 , - 476 , - 31 , - 246 , - 65 , - 16 , - 99 , - 314 , - 133 , - 84 , - 167 , - 382 , - 201 , - 152 , - 235 , - 450 , - 269 , - 220 , - 303 , - 518 , - 337 , - 288 , - 371 , - 58 , - 405 , - 356 , - 439 , - 126 , - 473 , - 424 , - 507 , - 194 , - 13 , - 492 , - 47 , - 262 , - 81 , - 32 , - 115 , - 330 , - 149 , - 100 , - 183 , - 398 , - 217 , - 168 , - 251 , - 466 , - 285 , - 236 , - 319 , - 6 , - 353 , - 304 , - 387 , - 74 , - 421 , - 372 , - 455 , - 142 , - 489 , - 440 , - 523 , - 210 , - 29 , - 508 , - 63 , - 278 , - 97 , - 48 , - 131 , - 346 , - 165 , - 116 , - 199 , - 414 , - 233 , - 184 , - 267 , - 482 , - 301 , - 252 , - 335 , - 22 , - 369 , - 320 , - 403 , - 90 , - 437 , - 388 , - 471 , - 158 , - 505 , - 456 , - 11 , - 226 , - 45 , - 524 , - 79 , - 294 , - 113 , - 64 , - 147 , - 362 , - 181 , - 132 , - 215 , - 430 , - 249 , - 200 , - 283 , - 498 , - 317 , - 268 , - 351 , - 38 , - 385 , - 336 , - 419 , - 106 , - 453 , - 404 , - 487 , - 174 , - 521 , - 472 , - 27 , - 242 , - 61 , - 12 , - 95 , - 310 , - 129 , - 80 , - 163 , - 378 , - 197 , - 148 , - 231 , - 446 , - 265 , - 216 , - 299 , - 514 , - 333 , - 284 , - 367 , - 54 , - 401 , - 352 , - 435 , - 122 , - 469 , - 420 , - 503 , - 190 , - 9 , - 488 , - 43 , - 258 , - 77 , - 28 , - 111 , - 326 , - 145 , - 96 , - 179 , - 394 , - 213 , - 164 , - 247 , - 462 , - 281 , - 232 , - 315 , - 2 , - 349 , - 300 , - 383 , - 70 , - 417 , - 368 , - 451 , - 138 , - 485 , - 436 , - 519 , - 206 , - 25 , - 504 , - 59 , - 274 , - 93 , - 44 , - 127 , - 342 , - 161 , - 112 , - 195 , - 410 , - 229 , - 180 , - 263 , - 478 , - 297 , - 248 , - 331 , - 18 , - 365 , - 316 , - 399 , - 86 , - 433 , - 384 , - 467 , - 154 , - 501 , - 452 , - 7 , - 222 , - 41 , - 520 , - 75 , - 290 , - 109 , - 60 , - 143 , - 358 , - 177 , - 128 , - 211 , - 426 , - 245 , - 196 , - 279 , - 494 , - 313 , - 264 , - 347 , - 34 , - 381 , - 332 , - 415 , - 102 , - 449 , - 400 , - 483 , - 170 , - 517 , - 468 , - 23 , - 238 , - 57 , - 8 , - 91 , - 306 , - 125 , - 76 , - 159 , - 374 , - 193 , - 144 , - 227 , - 442 , - 261 , - 212 , - 295 , - 510 , - 329 , - 280 , - 363 , - 50 , - 397 , - 348 , - 431 , - 118 , - 465 , - 416 , - 499 , - 186 , - 5 , - 484 , - 39 , - 254 , - 73 , - 24 , - 107 , - 322 , - 141 , - 92 , - 175 , - 390 , - 209 , - 160 , - 243 , - 458 , - 277 , - 228 , - 311 , - 526 , - 345 , - 296 , - 379 , - 66 , - 413 , - 364 , - 447 , - 134 , - 481 , - 432 , - 515 , - 202 , - 21 , - 500 , - 55 , - 270 , - 89 , - 40 , - 123 , - 338 , - 157 , - 108 , - 191 , - 406 , - 225 , - 176 , - 259 , - 474 , - 293 , - 244 , - 327 , - 14 , - 361 , - 312 , - 395 , - 82 , - 429 , - 380 , - 463 , - 150 , - 497 , - 448 , - 3 , - 218 , - 37 , - 516 , - 71 , - 286 , - 105 , - 56 , - 139 , - 354 , - 173 , - 124 , - 207 , - 422 , - 241 , - 192 , - 275 , - 490 , - 309 , - 260 , - 343 , - 30 , - 377 , - 328 , - 411 , - 98 , - 445 , - 396 , - 479 , - 166 , - 513 , - 464 , - 19 , - 234 , - 53 , - 4 , - 87 , - 302 , - 121 , - 72 , - 155 , - 370 , - 189 , - 140 , - 223 , - 438 , - 257 , - 208 , - 291 , - 506 , - 325 , - 276 , - 359 , - 46 , - 393 , - 344 , - 427 , - 114 , - 461 , - 412 , - 495 , - 182 , - 1 , - 480 , - 35 , - 250 , - 69 , - 20 , - 103 , - 318 , - 137 , - 88 , - 171 , - 386 , - 205 , - 156 , - 239 , - 454 , - 273 , - 224 , - 307 , - 522 , - 341 , - 292 , - 375 , - 62 , - 409 , - 360 , - 443 , - 130 , - 477 , - 428 , - 511 , - 198 , - 17 , - 496 , - 51 , - 266 , - 85 , - 36 , - 119 , - 334 , - 153 , - 104 , - 187 , - 402 , - 221 , - 172 , - 255 , - 470 , - 289 , - 240 , - 323 , - 10 , - 357 , - 308 , - 391 , - 78 , - 425 , - 376 , - 459 , - 146 , - 493 , - 444 , - 527 , - 214 , - 33 , - 512 , - 67 , - 282 , - 101 , - 52 , - 135 , - 350 , - 169 , - 120 , - 203 , - 418 , - 237 , - 188 , - 271 , - 486 , - 305 , - 256 , - 339 , - 26 , - 373 , - 324 , - 407 , - 94 , - 441 , - 392 , - 475 , - 162 , - 509 , - 460 , - 15 , - 230 , - 49 , - 0 , - 103 , - 342 , - 173 , - 140 , - 243 , - 482 , - 313 , - 280 , - 383 , - 78 , - 453 , - 420 , - 523 , - 218 , - 49 , - 16 , - 119 , - 358 , - 189 , - 156 , - 259 , - 498 , - 329 , - 296 , - 399 , - 94 , - 469 , - 436 , - 539 , - 234 , - 65 , - 32 , - 135 , - 374 , - 205 , - 172 , - 275 , - 514 , - 345 , - 312 , - 415 , - 110 , - 485 , - 452 , - 11 , - 250 , - 81 , - 48 , - 151 , - 390 , - 221 , - 188 , - 291 , - 530 , - 361 , - 328 , - 431 , - 126 , - 501 , - 468 , - 27 , - 266 , - 97 , - 64 , - 167 , - 406 , - 237 , - 204 , - 307 , - 2 , - 377 , - 344 , - 447 , - 142 , - 517 , - 484 , - 43 , - 282 , - 113 , - 80 , - 183 , - 422 , - 253 , - 220 , - 323 , - 18 , - 393 , - 360 , - 463 , - 158 , - 533 , - 500 , - 59 , - 298 , - 129 , - 96 , - 199 , - 438 , - 269 , - 236 , - 339 , - 34 , - 409 , - 376 , - 479 , - 174 , - 5 , - 516 , - 75 , - 314 , - 145 , - 112 , - 215 , - 454 , - 285 , - 252 , - 355 , - 50 , - 425 , - 392 , - 495 , - 190 , - 21 , - 532 , - 91 , - 330 , - 161 , - 128 , - 231 , - 470 , - 301 , - 268 , - 371 , - 66 , - 441 , - 408 , - 511 , - 206 , - 37 , - 4 , - 107 , - 346 , - 177 , - 144 , - 247 , - 486 , - 317 , - 284 , - 387 , - 82 , - 457 , - 424 , - 527 , - 222 , - 53 , - 20 , - 123 , - 362 , - 193 , - 160 , - 263 , - 502 , - 333 , - 300 , - 403 , - 98 , - 473 , - 440 , - 543 , - 238 , - 69 , - 36 , - 139 , - 378 , - 209 , - 176 , - 279 , - 518 , - 349 , - 316 , - 419 , - 114 , - 489 , - 456 , - 15 , - 254 , - 85 , - 52 , - 155 , - 394 , - 225 , - 192 , - 295 , - 534 , - 365 , - 332 , - 435 , - 130 , - 505 , - 472 , - 31 , - 270 , - 101 , - 68 , - 171 , - 410 , - 241 , - 208 , - 311 , - 6 , - 381 , - 348 , - 451 , - 146 , - 521 , - 488 , - 47 , - 286 , - 117 , - 84 , - 187 , - 426 , - 257 , - 224 , - 327 , - 22 , - 397 , - 364 , - 467 , - 162 , - 537 , - 504 , - 63 , - 302 , - 133 , - 100 , - 203 , - 442 , - 273 , - 240 , - 343 , - 38 , - 413 , - 380 , - 483 , - 178 , - 9 , - 520 , - 79 , - 318 , - 149 , - 116 , - 219 , - 458 , - 289 , - 256 , - 359 , - 54 , - 429 , - 396 , - 499 , - 194 , - 25 , - 536 , - 95 , - 334 , - 165 , - 132 , - 235 , - 474 , - 305 , - 272 , - 375 , - 70 , - 445 , - 412 , - 515 , - 210 , - 41 , - 8 , - 111 , - 350 , - 181 , - 148 , - 251 , - 490 , - 321 , - 288 , - 391 , - 86 , - 461 , - 428 , - 531 , - 226 , - 57 , - 24 , - 127 , - 366 , - 197 , - 164 , - 267 , - 506 , - 337 , - 304 , - 407 , - 102 , - 477 , - 444 , - 3 , - 242 , - 73 , - 40 , - 143 , - 382 , - 213 , - 180 , - 283 , - 522 , - 353 , - 320 , - 423 , - 118 , - 493 , - 460 , - 19 , - 258 , - 89 , - 56 , - 159 , - 398 , - 229 , - 196 , - 299 , - 538 , - 369 , - 336 , - 439 , - 134 , - 509 , - 476 , - 35 , - 274 , - 105 , - 72 , - 175 , - 414 , - 245 , - 212 , - 315 , - 10 , - 385 , - 352 , - 455 , - 150 , - 525 , - 492 , - 51 , - 290 , - 121 , - 88 , - 191 , - 430 , - 261 , - 228 , - 331 , - 26 , - 401 , - 368 , - 471 , - 166 , - 541 , - 508 , - 67 , - 306 , - 137 , - 104 , - 207 , - 446 , - 277 , - 244 , - 347 , - 42 , - 417 , - 384 , - 487 , - 182 , - 13 , - 524 , - 83 , - 322 , - 153 , - 120 , - 223 , - 462 , - 293 , - 260 , - 363 , - 58 , - 433 , - 400 , - 503 , - 198 , - 29 , - 540 , - 99 , - 338 , - 169 , - 136 , - 239 , - 478 , - 309 , - 276 , - 379 , - 74 , - 449 , - 416 , - 519 , - 214 , - 45 , - 12 , - 115 , - 354 , - 185 , - 152 , - 255 , - 494 , - 325 , - 292 , - 395 , - 90 , - 465 , - 432 , - 535 , - 230 , - 61 , - 28 , - 131 , - 370 , - 201 , - 168 , - 271 , - 510 , - 341 , - 308 , - 411 , - 106 , - 481 , - 448 , - 7 , - 246 , - 77 , - 44 , - 147 , - 386 , - 217 , - 184 , - 287 , - 526 , - 357 , - 324 , - 427 , - 122 , - 497 , - 464 , - 23 , - 262 , - 93 , - 60 , - 163 , - 402 , - 233 , - 200 , - 303 , - 542 , - 373 , - 340 , - 443 , - 138 , - 513 , - 480 , - 39 , - 278 , - 109 , - 76 , - 179 , - 418 , - 249 , - 216 , - 319 , - 14 , - 389 , - 356 , - 459 , - 154 , - 529 , - 496 , - 55 , - 294 , - 125 , - 92 , - 195 , - 434 , - 265 , - 232 , - 335 , - 30 , - 405 , - 372 , - 475 , - 170 , - 1 , - 512 , - 71 , - 310 , - 141 , - 108 , - 211 , - 450 , - 281 , - 248 , - 351 , - 46 , - 421 , - 388 , - 491 , - 186 , - 17 , - 528 , - 87 , - 326 , - 157 , - 124 , - 227 , - 466 , - 297 , - 264 , - 367 , - 62 , - 437 , - 404 , - 507 , - 202 , - 33 , - 0 , - 87 , - 454 , - 541 , - 348 , - 435 , - 242 , - 329 , - 136 , - 223 , - 30 , - 117 , - 484 , - 11 , - 378 , - 465 , - 272 , - 359 , - 166 , - 253 , - 60 , - 147 , - 514 , - 41 , - 408 , - 495 , - 302 , - 389 , - 196 , - 283 , - 90 , - 177 , - 544 , - 71 , - 438 , - 525 , - 332 , - 419 , - 226 , - 313 , - 120 , - 207 , - 14 , - 101 , - 468 , - 555 , - 362 , - 449 , - 256 , - 343 , - 150 , - 237 , - 44 , - 131 , - 498 , - 25 , - 392 , - 479 , - 286 , - 373 , - 180 , - 267 , - 74 , - 161 , - 528 , - 55 , - 422 , - 509 , - 316 , - 403 , - 210 , - 297 , - 104 , - 191 , - 558 , - 85 , - 452 , - 539 , - 346 , - 433 , - 240 , - 327 , - 134 , - 221 , - 28 , - 115 , - 482 , - 9 , - 376 , - 463 , - 270 , - 357 , - 164 , - 251 , - 58 , - 145 , - 512 , - 39 , - 406 , - 493 , - 300 , - 387 , - 194 , - 281 , - 88 , - 175 , - 542 , - 69 , - 436 , - 523 , - 330 , - 417 , - 224 , - 311 , - 118 , - 205 , - 12 , - 99 , - 466 , - 553 , - 360 , - 447 , - 254 , - 341 , - 148 , - 235 , - 42 , - 129 , - 496 , - 23 , - 390 , - 477 , - 284 , - 371 , - 178 , - 265 , - 72 , - 159 , - 526 , - 53 , - 420 , - 507 , - 314 , - 401 , - 208 , - 295 , - 102 , - 189 , - 556 , - 83 , - 450 , - 537 , - 344 , - 431 , - 238 , - 325 , - 132 , - 219 , - 26 , - 113 , - 480 , - 7 , - 374 , - 461 , - 268 , - 355 , - 162 , - 249 , - 56 , - 143 , - 510 , - 37 , - 404 , - 491 , - 298 , - 385 , - 192 , - 279 , - 86 , - 173 , - 540 , - 67 , - 434 , - 521 , - 328 , - 415 , - 222 , - 309 , - 116 , - 203 , - 10 , - 97 , - 464 , - 551 , - 358 , - 445 , - 252 , - 339 , - 146 , - 233 , - 40 , - 127 , - 494 , - 21 , - 388 , - 475 , - 282 , - 369 , - 176 , - 263 , - 70 , - 157 , - 524 , - 51 , - 418 , - 505 , - 312 , - 399 , - 206 , - 293 , - 100 , - 187 , - 554 , - 81 , - 448 , - 535 , - 342 , - 429 , - 236 , - 323 , - 130 , - 217 , - 24 , - 111 , - 478 , - 5 , - 372 , - 459 , - 266 , - 353 , - 160 , - 247 , - 54 , - 141 , - 508 , - 35 , - 402 , - 489 , - 296 , - 383 , - 190 , - 277 , - 84 , - 171 , - 538 , - 65 , - 432 , - 519 , - 326 , - 413 , - 220 , - 307 , - 114 , - 201 , - 8 , - 95 , - 462 , - 549 , - 356 , - 443 , - 250 , - 337 , - 144 , - 231 , - 38 , - 125 , - 492 , - 19 , - 386 , - 473 , - 280 , - 367 , - 174 , - 261 , - 68 , - 155 , - 522 , - 49 , - 416 , - 503 , - 310 , - 397 , - 204 , - 291 , - 98 , - 185 , - 552 , - 79 , - 446 , - 533 , - 340 , - 427 , - 234 , - 321 , - 128 , - 215 , - 22 , - 109 , - 476 , - 3 , - 370 , - 457 , - 264 , - 351 , - 158 , - 245 , - 52 , - 139 , - 506 , - 33 , - 400 , - 487 , - 294 , - 381 , - 188 , - 275 , - 82 , - 169 , - 536 , - 63 , - 430 , - 517 , - 324 , - 411 , - 218 , - 305 , - 112 , - 199 , - 6 , - 93 , - 460 , - 547 , - 354 , - 441 , - 248 , - 335 , - 142 , - 229 , - 36 , - 123 , - 490 , - 17 , - 384 , - 471 , - 278 , - 365 , - 172 , - 259 , - 66 , - 153 , - 520 , - 47 , - 414 , - 501 , - 308 , - 395 , - 202 , - 289 , - 96 , - 183 , - 550 , - 77 , - 444 , - 531 , - 338 , - 425 , - 232 , - 319 , - 126 , - 213 , - 20 , - 107 , - 474 , - 1 , - 368 , - 455 , - 262 , - 349 , - 156 , - 243 , - 50 , - 137 , - 504 , - 31 , - 398 , - 485 , - 292 , - 379 , - 186 , - 273 , - 80 , - 167 , - 534 , - 61 , - 428 , - 515 , - 322 , - 409 , - 216 , - 303 , - 110 , - 197 , - 4 , - 91 , - 458 , - 545 , - 352 , - 439 , - 246 , - 333 , - 140 , - 227 , - 34 , - 121 , - 488 , - 15 , - 382 , - 469 , - 276 , - 363 , - 170 , - 257 , - 64 , - 151 , - 518 , - 45 , - 412 , - 499 , - 306 , - 393 , - 200 , - 287 , - 94 , - 181 , - 548 , - 75 , - 442 , - 529 , - 336 , - 423 , - 230 , - 317 , - 124 , - 211 , - 18 , - 105 , - 472 , - 559 , - 366 , - 453 , - 260 , - 347 , - 154 , - 241 , - 48 , - 135 , - 502 , - 29 , - 396 , - 483 , - 290 , - 377 , - 184 , - 271 , - 78 , - 165 , - 532 , - 59 , - 426 , - 513 , - 320 , - 407 , - 214 , - 301 , - 108 , - 195 , - 2 , - 89 , - 456 , - 543 , - 350 , - 437 , - 244 , - 331 , - 138 , - 225 , - 32 , - 119 , - 486 , - 13 , - 380 , - 467 , - 274 , - 361 , - 168 , - 255 , - 62 , - 149 , - 516 , - 43 , - 410 , - 497 , - 304 , - 391 , - 198 , - 285 , - 92 , - 179 , - 546 , - 73 , - 440 , - 527 , - 334 , - 421 , - 228 , - 315 , - 122 , - 209 , - 16 , - 103 , - 470 , - 557 , - 364 , - 451 , - 258 , - 345 , - 152 , - 239 , - 46 , - 133 , - 500 , - 27 , - 394 , - 481 , - 288 , - 375 , - 182 , - 269 , - 76 , - 163 , - 530 , - 57 , - 424 , - 511 , - 318 , - 405 , - 212 , - 299 , - 106 , - 193 , - 0 , - 161 , - 514 , - 483 , - 68 , - 421 , - 390 , - 551 , - 328 , - 297 , - 458 , - 235 , - 204 , - 365 , - 142 , - 111 , - 272 , - 49 , - 18 , - 179 , - 532 , - 501 , - 86 , - 439 , - 408 , - 569 , - 346 , - 315 , - 476 , - 253 , - 222 , - 383 , - 160 , - 129 , - 290 , - 67 , - 36 , - 197 , - 550 , - 519 , - 104 , - 457 , - 426 , - 11 , - 364 , - 333 , - 494 , - 271 , - 240 , - 401 , - 178 , - 147 , - 308 , - 85 , - 54 , - 215 , - 568 , - 537 , - 122 , - 475 , - 444 , - 29 , - 382 , - 351 , - 512 , - 289 , - 258 , - 419 , - 196 , - 165 , - 326 , - 103 , - 72 , - 233 , - 10 , - 555 , - 140 , - 493 , - 462 , - 47 , - 400 , - 369 , - 530 , - 307 , - 276 , - 437 , - 214 , - 183 , - 344 , - 121 , - 90 , - 251 , - 28 , - 573 , - 158 , - 511 , - 480 , - 65 , - 418 , - 387 , - 548 , - 325 , - 294 , - 455 , - 232 , - 201 , - 362 , - 139 , - 108 , - 269 , - 46 , - 15 , - 176 , - 529 , - 498 , - 83 , - 436 , - 405 , - 566 , - 343 , - 312 , - 473 , - 250 , - 219 , - 380 , - 157 , - 126 , - 287 , - 64 , - 33 , - 194 , - 547 , - 516 , - 101 , - 454 , - 423 , - 8 , - 361 , - 330 , - 491 , - 268 , - 237 , - 398 , - 175 , - 144 , - 305 , - 82 , - 51 , - 212 , - 565 , - 534 , - 119 , - 472 , - 441 , - 26 , - 379 , - 348 , - 509 , - 286 , - 255 , - 416 , - 193 , - 162 , - 323 , - 100 , - 69 , - 230 , - 7 , - 552 , - 137 , - 490 , - 459 , - 44 , - 397 , - 366 , - 527 , - 304 , - 273 , - 434 , - 211 , - 180 , - 341 , - 118 , - 87 , - 248 , - 25 , - 570 , - 155 , - 508 , - 477 , - 62 , - 415 , - 384 , - 545 , - 322 , - 291 , - 452 , - 229 , - 198 , - 359 , - 136 , - 105 , - 266 , - 43 , - 12 , - 173 , - 526 , - 495 , - 80 , - 433 , - 402 , - 563 , - 340 , - 309 , - 470 , - 247 , - 216 , - 377 , - 154 , - 123 , - 284 , - 61 , - 30 , - 191 , - 544 , - 513 , - 98 , - 451 , - 420 , - 5 , - 358 , - 327 , - 488 , - 265 , - 234 , - 395 , - 172 , - 141 , - 302 , - 79 , - 48 , - 209 , - 562 , - 531 , - 116 , - 469 , - 438 , - 23 , - 376 , - 345 , - 506 , - 283 , - 252 , - 413 , - 190 , - 159 , - 320 , - 97 , - 66 , - 227 , - 4 , - 549 , - 134 , - 487 , - 456 , - 41 , - 394 , - 363 , - 524 , - 301 , - 270 , - 431 , - 208 , - 177 , - 338 , - 115 , - 84 , - 245 , - 22 , - 567 , - 152 , - 505 , - 474 , - 59 , - 412 , - 381 , - 542 , - 319 , - 288 , - 449 , - 226 , - 195 , - 356 , - 133 , - 102 , - 263 , - 40 , - 9 , - 170 , - 523 , - 492 , - 77 , - 430 , - 399 , - 560 , - 337 , - 306 , - 467 , - 244 , - 213 , - 374 , - 151 , - 120 , - 281 , - 58 , - 27 , - 188 , - 541 , - 510 , - 95 , - 448 , - 417 , - 2 , - 355 , - 324 , - 485 , - 262 , - 231 , - 392 , - 169 , - 138 , - 299 , - 76 , - 45 , - 206 , - 559 , - 528 , - 113 , - 466 , - 435 , - 20 , - 373 , - 342 , - 503 , - 280 , - 249 , - 410 , - 187 , - 156 , - 317 , - 94 , - 63 , - 224 , - 1 , - 546 , - 131 , - 484 , - 453 , - 38 , - 391 , - 360 , - 521 , - 298 , - 267 , - 428 , - 205 , - 174 , - 335 , - 112 , - 81 , - 242 , - 19 , - 564 , - 149 , - 502 , - 471 , - 56 , - 409 , - 378 , - 539 , - 316 , - 285 , - 446 , - 223 , - 192 , - 353 , - 130 , - 99 , - 260 , - 37 , - 6 , - 167 , - 520 , - 489 , - 74 , - 427 , - 396 , - 557 , - 334 , - 303 , - 464 , - 241 , - 210 , - 371 , - 148 , - 117 , - 278 , - 55 , - 24 , - 185 , - 538 , - 507 , - 92 , - 445 , - 414 , - 575 , - 352 , - 321 , - 482 , - 259 , - 228 , - 389 , - 166 , - 135 , - 296 , - 73 , - 42 , - 203 , - 556 , - 525 , - 110 , - 463 , - 432 , - 17 , - 370 , - 339 , - 500 , - 277 , - 246 , - 407 , - 184 , - 153 , - 314 , - 91 , - 60 , - 221 , - 574 , - 543 , - 128 , - 481 , - 450 , - 35 , - 388 , - 357 , - 518 , - 295 , - 264 , - 425 , - 202 , - 171 , - 332 , - 109 , - 78 , - 239 , - 16 , - 561 , - 146 , - 499 , - 468 , - 53 , - 406 , - 375 , - 536 , - 313 , - 282 , - 443 , - 220 , - 189 , - 350 , - 127 , - 96 , - 257 , - 34 , - 3 , - 164 , - 517 , - 486 , - 71 , - 424 , - 393 , - 554 , - 331 , - 300 , - 461 , - 238 , - 207 , - 368 , - 145 , - 114 , - 275 , - 52 , - 21 , - 182 , - 535 , - 504 , - 89 , - 442 , - 411 , - 572 , - 349 , - 318 , - 479 , - 256 , - 225 , - 386 , - 163 , - 132 , - 293 , - 70 , - 39 , - 200 , - 553 , - 522 , - 107 , - 460 , - 429 , - 14 , - 367 , - 336 , - 497 , - 274 , - 243 , - 404 , - 181 , - 150 , - 311 , - 88 , - 57 , - 218 , - 571 , - 540 , - 125 , - 478 , - 447 , - 32 , - 385 , - 354 , - 515 , - 292 , - 261 , - 422 , - 199 , - 168 , - 329 , - 106 , - 75 , - 236 , - 13 , - 558 , - 143 , - 496 , - 465 , - 50 , - 403 , - 372 , - 533 , - 310 , - 279 , - 440 , - 217 , - 186 , - 347 , - 124 , - 93 , - 254 , - 31 , - 0 , - 93 , - 334 , - 131 , - 76 , - 169 , - 410 , - 207 , - 152 , - 245 , - 486 , - 283 , - 228 , - 321 , - 562 , - 359 , - 304 , - 397 , - 46 , - 435 , - 380 , - 473 , - 122 , - 511 , - 456 , - 549 , - 198 , - 587 , - 532 , - 33 , - 274 , - 71 , - 16 , - 109 , - 350 , - 147 , - 92 , - 185 , - 426 , - 223 , - 168 , - 261 , - 502 , - 299 , - 244 , - 337 , - 578 , - 375 , - 320 , - 413 , - 62 , - 451 , - 396 , - 489 , - 138 , - 527 , - 472 , - 565 , - 214 , - 11 , - 548 , - 49 , - 290 , - 87 , - 32 , - 125 , - 366 , - 163 , - 108 , - 201 , - 442 , - 239 , - 184 , - 277 , - 518 , - 315 , - 260 , - 353 , - 2 , - 391 , - 336 , - 429 , - 78 , - 467 , - 412 , - 505 , - 154 , - 543 , - 488 , - 581 , - 230 , - 27 , - 564 , - 65 , - 306 , - 103 , - 48 , - 141 , - 382 , - 179 , - 124 , - 217 , - 458 , - 255 , - 200 , - 293 , - 534 , - 331 , - 276 , - 369 , - 18 , - 407 , - 352 , - 445 , - 94 , - 483 , - 428 , - 521 , - 170 , - 559 , - 504 , - 5 , - 246 , - 43 , - 580 , - 81 , - 322 , - 119 , - 64 , - 157 , - 398 , - 195 , - 140 , - 233 , - 474 , - 271 , - 216 , - 309 , - 550 , - 347 , - 292 , - 385 , - 34 , - 423 , - 368 , - 461 , - 110 , - 499 , - 444 , - 537 , - 186 , - 575 , - 520 , - 21 , - 262 , - 59 , - 4 , - 97 , - 338 , - 135 , - 80 , - 173 , - 414 , - 211 , - 156 , - 249 , - 490 , - 287 , - 232 , - 325 , - 566 , - 363 , - 308 , - 401 , - 50 , - 439 , - 384 , - 477 , - 126 , - 515 , - 460 , - 553 , - 202 , - 591 , - 536 , - 37 , - 278 , - 75 , - 20 , - 113 , - 354 , - 151 , - 96 , - 189 , - 430 , - 227 , - 172 , - 265 , - 506 , - 303 , - 248 , - 341 , - 582 , - 379 , - 324 , - 417 , - 66 , - 455 , - 400 , - 493 , - 142 , - 531 , - 476 , - 569 , - 218 , - 15 , - 552 , - 53 , - 294 , - 91 , - 36 , - 129 , - 370 , - 167 , - 112 , - 205 , - 446 , - 243 , - 188 , - 281 , - 522 , - 319 , - 264 , - 357 , - 6 , - 395 , - 340 , - 433 , - 82 , - 471 , - 416 , - 509 , - 158 , - 547 , - 492 , - 585 , - 234 , - 31 , - 568 , - 69 , - 310 , - 107 , - 52 , - 145 , - 386 , - 183 , - 128 , - 221 , - 462 , - 259 , - 204 , - 297 , - 538 , - 335 , - 280 , - 373 , - 22 , - 411 , - 356 , - 449 , - 98 , - 487 , - 432 , - 525 , - 174 , - 563 , - 508 , - 9 , - 250 , - 47 , - 584 , - 85 , - 326 , - 123 , - 68 , - 161 , - 402 , - 199 , - 144 , - 237 , - 478 , - 275 , - 220 , - 313 , - 554 , - 351 , - 296 , - 389 , - 38 , - 427 , - 372 , - 465 , - 114 , - 503 , - 448 , - 541 , - 190 , - 579 , - 524 , - 25 , - 266 , - 63 , - 8 , - 101 , - 342 , - 139 , - 84 , - 177 , - 418 , - 215 , - 160 , - 253 , - 494 , - 291 , - 236 , - 329 , - 570 , - 367 , - 312 , - 405 , - 54 , - 443 , - 388 , - 481 , - 130 , - 519 , - 464 , - 557 , - 206 , - 3 , - 540 , - 41 , - 282 , - 79 , - 24 , - 117 , - 358 , - 155 , - 100 , - 193 , - 434 , - 231 , - 176 , - 269 , - 510 , - 307 , - 252 , - 345 , - 586 , - 383 , - 328 , - 421 , - 70 , - 459 , - 404 , - 497 , - 146 , - 535 , - 480 , - 573 , - 222 , - 19 , - 556 , - 57 , - 298 , - 95 , - 40 , - 133 , - 374 , - 171 , - 116 , - 209 , - 450 , - 247 , - 192 , - 285 , - 526 , - 323 , - 268 , - 361 , - 10 , - 399 , - 344 , - 437 , - 86 , - 475 , - 420 , - 513 , - 162 , - 551 , - 496 , - 589 , - 238 , - 35 , - 572 , - 73 , - 314 , - 111 , - 56 , - 149 , - 390 , - 187 , - 132 , - 225 , - 466 , - 263 , - 208 , - 301 , - 542 , - 339 , - 284 , - 377 , - 26 , - 415 , - 360 , - 453 , - 102 , - 491 , - 436 , - 529 , - 178 , - 567 , - 512 , - 13 , - 254 , - 51 , - 588 , - 89 , - 330 , - 127 , - 72 , - 165 , - 406 , - 203 , - 148 , - 241 , - 482 , - 279 , - 224 , - 317 , - 558 , - 355 , - 300 , - 393 , - 42 , - 431 , - 376 , - 469 , - 118 , - 507 , - 452 , - 545 , - 194 , - 583 , - 528 , - 29 , - 270 , - 67 , - 12 , - 105 , - 346 , - 143 , - 88 , - 181 , - 422 , - 219 , - 164 , - 257 , - 498 , - 295 , - 240 , - 333 , - 574 , - 371 , - 316 , - 409 , - 58 , - 447 , - 392 , - 485 , - 134 , - 523 , - 468 , - 561 , - 210 , - 7 , - 544 , - 45 , - 286 , - 83 , - 28 , - 121 , - 362 , - 159 , - 104 , - 197 , - 438 , - 235 , - 180 , - 273 , - 514 , - 311 , - 256 , - 349 , - 590 , - 387 , - 332 , - 425 , - 74 , - 463 , - 408 , - 501 , - 150 , - 539 , - 484 , - 577 , - 226 , - 23 , - 560 , - 61 , - 302 , - 99 , - 44 , - 137 , - 378 , - 175 , - 120 , - 213 , - 454 , - 251 , - 196 , - 289 , - 530 , - 327 , - 272 , - 365 , - 14 , - 403 , - 348 , - 441 , - 90 , - 479 , - 424 , - 517 , - 166 , - 555 , - 500 , - 1 , - 242 , - 39 , - 576 , - 77 , - 318 , - 115 , - 60 , - 153 , - 394 , - 191 , - 136 , - 229 , - 470 , - 267 , - 212 , - 305 , - 546 , - 343 , - 288 , - 381 , - 30 , - 419 , - 364 , - 457 , - 106 , - 495 , - 440 , - 533 , - 182 , - 571 , - 516 , - 17 , - 258 , - 55 , - 0 , - 113 , - 378 , - 187 , - 148 , - 261 , - 526 , - 335 , - 296 , - 409 , - 66 , - 483 , - 444 , - 557 , - 214 , - 23 , - 592 , - 97 , - 362 , - 171 , - 132 , - 245 , - 510 , - 319 , - 280 , - 393 , - 50 , - 467 , - 428 , - 541 , - 198 , - 7 , - 576 , - 81 , - 346 , - 155 , - 116 , - 229 , - 494 , - 303 , - 264 , - 377 , - 34 , - 451 , - 412 , - 525 , - 182 , - 599 , - 560 , - 65 , - 330 , - 139 , - 100 , - 213 , - 478 , - 287 , - 248 , - 361 , - 18 , - 435 , - 396 , - 509 , - 166 , - 583 , - 544 , - 49 , - 314 , - 123 , - 84 , - 197 , - 462 , - 271 , - 232 , - 345 , - 2 , - 419 , - 380 , - 493 , - 150 , - 567 , - 528 , - 33 , - 298 , - 107 , - 68 , - 181 , - 446 , - 255 , - 216 , - 329 , - 594 , - 403 , - 364 , - 477 , - 134 , - 551 , - 512 , - 17 , - 282 , - 91 , - 52 , - 165 , - 430 , - 239 , - 200 , - 313 , - 578 , - 387 , - 348 , - 461 , - 118 , - 535 , - 496 , - 1 , - 266 , - 75 , - 36 , - 149 , - 414 , - 223 , - 184 , - 297 , - 562 , - 371 , - 332 , - 445 , - 102 , - 519 , - 480 , - 593 , - 250 , - 59 , - 20 , - 133 , - 398 , - 207 , - 168 , - 281 , - 546 , - 355 , - 316 , - 429 , - 86 , - 503 , - 464 , - 577 , - 234 , - 43 , - 4 , - 117 , - 382 , - 191 , - 152 , - 265 , - 530 , - 339 , - 300 , - 413 , - 70 , - 487 , - 448 , - 561 , - 218 , - 27 , - 596 , - 101 , - 366 , - 175 , - 136 , - 249 , - 514 , - 323 , - 284 , - 397 , - 54 , - 471 , - 432 , - 545 , - 202 , - 11 , - 580 , - 85 , - 350 , - 159 , - 120 , - 233 , - 498 , - 307 , - 268 , - 381 , - 38 , - 455 , - 416 , - 529 , - 186 , - 603 , - 564 , - 69 , - 334 , - 143 , - 104 , - 217 , - 482 , - 291 , - 252 , - 365 , - 22 , - 439 , - 400 , - 513 , - 170 , - 587 , - 548 , - 53 , - 318 , - 127 , - 88 , - 201 , - 466 , - 275 , - 236 , - 349 , - 6 , - 423 , - 384 , - 497 , - 154 , - 571 , - 532 , - 37 , - 302 , - 111 , - 72 , - 185 , - 450 , - 259 , - 220 , - 333 , - 598 , - 407 , - 368 , - 481 , - 138 , - 555 , - 516 , - 21 , - 286 , - 95 , - 56 , - 169 , - 434 , - 243 , - 204 , - 317 , - 582 , - 391 , - 352 , - 465 , - 122 , - 539 , - 500 , - 5 , - 270 , - 79 , - 40 , - 153 , - 418 , - 227 , - 188 , - 301 , - 566 , - 375 , - 336 , - 449 , - 106 , - 523 , - 484 , - 597 , - 254 , - 63 , - 24 , - 137 , - 402 , - 211 , - 172 , - 285 , - 550 , - 359 , - 320 , - 433 , - 90 , - 507 , - 468 , - 581 , - 238 , - 47 , - 8 , - 121 , - 386 , - 195 , - 156 , - 269 , - 534 , - 343 , - 304 , - 417 , - 74 , - 491 , - 452 , - 565 , - 222 , - 31 , - 600 , - 105 , - 370 , - 179 , - 140 , - 253 , - 518 , - 327 , - 288 , - 401 , - 58 , - 475 , - 436 , - 549 , - 206 , - 15 , - 584 , - 89 , - 354 , - 163 , - 124 , - 237 , - 502 , - 311 , - 272 , - 385 , - 42 , - 459 , - 420 , - 533 , - 190 , - 607 , - 568 , - 73 , - 338 , - 147 , - 108 , - 221 , - 486 , - 295 , - 256 , - 369 , - 26 , - 443 , - 404 , - 517 , - 174 , - 591 , - 552 , - 57 , - 322 , - 131 , - 92 , - 205 , - 470 , - 279 , - 240 , - 353 , - 10 , - 427 , - 388 , - 501 , - 158 , - 575 , - 536 , - 41 , - 306 , - 115 , - 76 , - 189 , - 454 , - 263 , - 224 , - 337 , - 602 , - 411 , - 372 , - 485 , - 142 , - 559 , - 520 , - 25 , - 290 , - 99 , - 60 , - 173 , - 438 , - 247 , - 208 , - 321 , - 586 , - 395 , - 356 , - 469 , - 126 , - 543 , - 504 , - 9 , - 274 , - 83 , - 44 , - 157 , - 422 , - 231 , - 192 , - 305 , - 570 , - 379 , - 340 , - 453 , - 110 , - 527 , - 488 , - 601 , - 258 , - 67 , - 28 , - 141 , - 406 , - 215 , - 176 , - 289 , - 554 , - 363 , - 324 , - 437 , - 94 , - 511 , - 472 , - 585 , - 242 , - 51 , - 12 , - 125 , - 390 , - 199 , - 160 , - 273 , - 538 , - 347 , - 308 , - 421 , - 78 , - 495 , - 456 , - 569 , - 226 , - 35 , - 604 , - 109 , - 374 , - 183 , - 144 , - 257 , - 522 , - 331 , - 292 , - 405 , - 62 , - 479 , - 440 , - 553 , - 210 , - 19 , - 588 , - 93 , - 358 , - 167 , - 128 , - 241 , - 506 , - 315 , - 276 , - 389 , - 46 , - 463 , - 424 , - 537 , - 194 , - 3 , - 572 , - 77 , - 342 , - 151 , - 112 , - 225 , - 490 , - 299 , - 260 , - 373 , - 30 , - 447 , - 408 , - 521 , - 178 , - 595 , - 556 , - 61 , - 326 , - 135 , - 96 , - 209 , - 474 , - 283 , - 244 , - 357 , - 14 , - 431 , - 392 , - 505 , - 162 , - 579 , - 540 , - 45 , - 310 , - 119 , - 80 , - 193 , - 458 , - 267 , - 228 , - 341 , - 606 , - 415 , - 376 , - 489 , - 146 , - 563 , - 524 , - 29 , - 294 , - 103 , - 64 , - 177 , - 442 , - 251 , - 212 , - 325 , - 590 , - 399 , - 360 , - 473 , - 130 , - 547 , - 508 , - 13 , - 278 , - 87 , - 48 , - 161 , - 426 , - 235 , - 196 , - 309 , - 574 , - 383 , - 344 , - 457 , - 114 , - 531 , - 492 , - 605 , - 262 , - 71 , - 32 , - 145 , - 410 , - 219 , - 180 , - 293 , - 558 , - 367 , - 328 , - 441 , - 98 , - 515 , - 476 , - 589 , - 246 , - 55 , - 16 , - 129 , - 394 , - 203 , - 164 , - 277 , - 542 , - 351 , - 312 , - 425 , - 82 , - 499 , - 460 , - 573 , - 230 , - 39 , - 0 , - 275 , - 394 , - 357 , - 164 , - 439 , - 558 , - 521 , - 328 , - 603 , - 98 , - 61 , - 492 , - 143 , - 262 , - 225 , - 32 , - 307 , - 426 , - 389 , - 196 , - 471 , - 590 , - 553 , - 360 , - 11 , - 130 , - 93 , - 524 , - 175 , - 294 , - 257 , - 64 , - 339 , - 458 , - 421 , - 228 , - 503 , - 622 , - 585 , - 392 , - 43 , - 162 , - 125 , - 556 , - 207 , - 326 , - 289 , - 96 , - 371 , - 490 , - 453 , - 260 , - 535 , - 30 , - 617 , - 424 , - 75 , - 194 , - 157 , - 588 , - 239 , - 358 , - 321 , - 128 , - 403 , - 522 , - 485 , - 292 , - 567 , - 62 , - 25 , - 456 , - 107 , - 226 , - 189 , - 620 , - 271 , - 390 , - 353 , - 160 , - 435 , - 554 , - 517 , - 324 , - 599 , - 94 , - 57 , - 488 , - 139 , - 258 , - 221 , - 28 , - 303 , - 422 , - 385 , - 192 , - 467 , - 586 , - 549 , - 356 , - 7 , - 126 , - 89 , - 520 , - 171 , - 290 , - 253 , - 60 , - 335 , - 454 , - 417 , - 224 , - 499 , - 618 , - 581 , - 388 , - 39 , - 158 , - 121 , - 552 , - 203 , - 322 , - 285 , - 92 , - 367 , - 486 , - 449 , - 256 , - 531 , - 26 , - 613 , - 420 , - 71 , - 190 , - 153 , - 584 , - 235 , - 354 , - 317 , - 124 , - 399 , - 518 , - 481 , - 288 , - 563 , - 58 , - 21 , - 452 , - 103 , - 222 , - 185 , - 616 , - 267 , - 386 , - 349 , - 156 , - 431 , - 550 , - 513 , - 320 , - 595 , - 90 , - 53 , - 484 , - 135 , - 254 , - 217 , - 24 , - 299 , - 418 , - 381 , - 188 , - 463 , - 582 , - 545 , - 352 , - 3 , - 122 , - 85 , - 516 , - 167 , - 286 , - 249 , - 56 , - 331 , - 450 , - 413 , - 220 , - 495 , - 614 , - 577 , - 384 , - 35 , - 154 , - 117 , - 548 , - 199 , - 318 , - 281 , - 88 , - 363 , - 482 , - 445 , - 252 , - 527 , - 22 , - 609 , - 416 , - 67 , - 186 , - 149 , - 580 , - 231 , - 350 , - 313 , - 120 , - 395 , - 514 , - 477 , - 284 , - 559 , - 54 , - 17 , - 448 , - 99 , - 218 , - 181 , - 612 , - 263 , - 382 , - 345 , - 152 , - 427 , - 546 , - 509 , - 316 , - 591 , - 86 , - 49 , - 480 , - 131 , - 250 , - 213 , - 20 , - 295 , - 414 , - 377 , - 184 , - 459 , - 578 , - 541 , - 348 , - 623 , - 118 , - 81 , - 512 , - 163 , - 282 , - 245 , - 52 , - 327 , - 446 , - 409 , - 216 , - 491 , - 610 , - 573 , - 380 , - 31 , - 150 , - 113 , - 544 , - 195 , - 314 , - 277 , - 84 , - 359 , - 478 , - 441 , - 248 , - 523 , - 18 , - 605 , - 412 , - 63 , - 182 , - 145 , - 576 , - 227 , - 346 , - 309 , - 116 , - 391 , - 510 , - 473 , - 280 , - 555 , - 50 , - 13 , - 444 , - 95 , - 214 , - 177 , - 608 , - 259 , - 378 , - 341 , - 148 , - 423 , - 542 , - 505 , - 312 , - 587 , - 82 , - 45 , - 476 , - 127 , - 246 , - 209 , - 16 , - 291 , - 410 , - 373 , - 180 , - 455 , - 574 , - 537 , - 344 , - 619 , - 114 , - 77 , - 508 , - 159 , - 278 , - 241 , - 48 , - 323 , - 442 , - 405 , - 212 , - 487 , - 606 , - 569 , - 376 , - 27 , - 146 , - 109 , - 540 , - 191 , - 310 , - 273 , - 80 , - 355 , - 474 , - 437 , - 244 , - 519 , - 14 , - 601 , - 408 , - 59 , - 178 , - 141 , - 572 , - 223 , - 342 , - 305 , - 112 , - 387 , - 506 , - 469 , - 276 , - 551 , - 46 , - 9 , - 440 , - 91 , - 210 , - 173 , - 604 , - 255 , - 374 , - 337 , - 144 , - 419 , - 538 , - 501 , - 308 , - 583 , - 78 , - 41 , - 472 , - 123 , - 242 , - 205 , - 12 , - 287 , - 406 , - 369 , - 176 , - 451 , - 570 , - 533 , - 340 , - 615 , - 110 , - 73 , - 504 , - 155 , - 274 , - 237 , - 44 , - 319 , - 438 , - 401 , - 208 , - 483 , - 602 , - 565 , - 372 , - 23 , - 142 , - 105 , - 536 , - 187 , - 306 , - 269 , - 76 , - 351 , - 470 , - 433 , - 240 , - 515 , - 10 , - 597 , - 404 , - 55 , - 174 , - 137 , - 568 , - 219 , - 338 , - 301 , - 108 , - 383 , - 502 , - 465 , - 272 , - 547 , - 42 , - 5 , - 436 , - 87 , - 206 , - 169 , - 600 , - 251 , - 370 , - 333 , - 140 , - 415 , - 534 , - 497 , - 304 , - 579 , - 74 , - 37 , - 468 , - 119 , - 238 , - 201 , - 8 , - 283 , - 402 , - 365 , - 172 , - 447 , - 566 , - 529 , - 336 , - 611 , - 106 , - 69 , - 500 , - 151 , - 270 , - 233 , - 40 , - 315 , - 434 , - 397 , - 204 , - 479 , - 598 , - 561 , - 368 , - 19 , - 138 , - 101 , - 532 , - 183 , - 302 , - 265 , - 72 , - 347 , - 466 , - 429 , - 236 , - 511 , - 6 , - 593 , - 400 , - 51 , - 170 , - 133 , - 564 , - 215 , - 334 , - 297 , - 104 , - 379 , - 498 , - 461 , - 268 , - 543 , - 38 , - 1 , - 432 , - 83 , - 202 , - 165 , - 596 , - 247 , - 366 , - 329 , - 136 , - 411 , - 530 , - 493 , - 300 , - 575 , - 70 , - 33 , - 464 , - 115 , - 234 , - 197 , - 4 , - 279 , - 398 , - 361 , - 168 , - 443 , - 562 , - 525 , - 332 , - 607 , - 102 , - 65 , - 496 , - 147 , - 266 , - 229 , - 36 , - 311 , - 430 , - 393 , - 200 , - 475 , - 594 , - 557 , - 364 , - 15 , - 134 , - 97 , - 528 , - 179 , - 298 , - 261 , - 68 , - 343 , - 462 , - 425 , - 232 , - 507 , - 2 , - 589 , - 396 , - 47 , - 166 , - 129 , - 560 , - 211 , - 330 , - 293 , - 100 , - 375 , - 494 , - 457 , - 264 , - 539 , - 34 , - 621 , - 428 , - 79 , - 198 , - 161 , - 592 , - 243 , - 362 , - 325 , - 132 , - 407 , - 526 , - 489 , - 296 , - 571 , - 66 , - 29 , - 460 , - 111 , - 230 , - 193 , - 0 , - 119 , - 398 , - 197 , - 156 , - 275 , - 554 , - 353 , - 312 , - 431 , - 70 , - 509 , - 468 , - 587 , - 226 , - 25 , - 624 , - 103 , - 382 , - 181 , - 140 , - 259 , - 538 , - 337 , - 296 , - 415 , - 54 , - 493 , - 452 , - 571 , - 210 , - 9 , - 608 , - 87 , - 366 , - 165 , - 124 , - 243 , - 522 , - 321 , - 280 , - 399 , - 38 , - 477 , - 436 , - 555 , - 194 , - 633 , - 592 , - 71 , - 350 , - 149 , - 108 , - 227 , - 506 , - 305 , - 264 , - 383 , - 22 , - 461 , - 420 , - 539 , - 178 , - 617 , - 576 , - 55 , - 334 , - 133 , - 92 , - 211 , - 490 , - 289 , - 248 , - 367 , - 6 , - 445 , - 404 , - 523 , - 162 , - 601 , - 560 , - 39 , - 318 , - 117 , - 76 , - 195 , - 474 , - 273 , - 232 , - 351 , - 630 , - 429 , - 388 , - 507 , - 146 , - 585 , - 544 , - 23 , - 302 , - 101 , - 60 , - 179 , - 458 , - 257 , - 216 , - 335 , - 614 , - 413 , - 372 , - 491 , - 130 , - 569 , - 528 , - 7 , - 286 , - 85 , - 44 , - 163 , - 442 , - 241 , - 200 , - 319 , - 598 , - 397 , - 356 , - 475 , - 114 , - 553 , - 512 , - 631 , - 270 , - 69 , - 28 , - 147 , - 426 , - 225 , - 184 , - 303 , - 582 , - 381 , - 340 , - 459 , - 98 , - 537 , - 496 , - 615 , - 254 , - 53 , - 12 , - 131 , - 410 , - 209 , - 168 , - 287 , - 566 , - 365 , - 324 , - 443 , - 82 , - 521 , - 480 , - 599 , - 238 , - 37 , - 636 , - 115 , - 394 , - 193 , - 152 , - 271 , - 550 , - 349 , - 308 , - 427 , - 66 , - 505 , - 464 , - 583 , - 222 , - 21 , - 620 , - 99 , - 378 , - 177 , - 136 , - 255 , - 534 , - 333 , - 292 , - 411 , - 50 , - 489 , - 448 , - 567 , - 206 , - 5 , - 604 , - 83 , - 362 , - 161 , - 120 , - 239 , - 518 , - 317 , - 276 , - 395 , - 34 , - 473 , - 432 , - 551 , - 190 , - 629 , - 588 , - 67 , - 346 , - 145 , - 104 , - 223 , - 502 , - 301 , - 260 , - 379 , - 18 , - 457 , - 416 , - 535 , - 174 , - 613 , - 572 , - 51 , - 330 , - 129 , - 88 , - 207 , - 486 , - 285 , - 244 , - 363 , - 2 , - 441 , - 400 , - 519 , - 158 , - 597 , - 556 , - 35 , - 314 , - 113 , - 72 , - 191 , - 470 , - 269 , - 228 , - 347 , - 626 , - 425 , - 384 , - 503 , - 142 , - 581 , - 540 , - 19 , - 298 , - 97 , - 56 , - 175 , - 454 , - 253 , - 212 , - 331 , - 610 , - 409 , - 368 , - 487 , - 126 , - 565 , - 524 , - 3 , - 282 , - 81 , - 40 , - 159 , - 438 , - 237 , - 196 , - 315 , - 594 , - 393 , - 352 , - 471 , - 110 , - 549 , - 508 , - 627 , - 266 , - 65 , - 24 , - 143 , - 422 , - 221 , - 180 , - 299 , - 578 , - 377 , - 336 , - 455 , - 94 , - 533 , - 492 , - 611 , - 250 , - 49 , - 8 , - 127 , - 406 , - 205 , - 164 , - 283 , - 562 , - 361 , - 320 , - 439 , - 78 , - 517 , - 476 , - 595 , - 234 , - 33 , - 632 , - 111 , - 390 , - 189 , - 148 , - 267 , - 546 , - 345 , - 304 , - 423 , - 62 , - 501 , - 460 , - 579 , - 218 , - 17 , - 616 , - 95 , - 374 , - 173 , - 132 , - 251 , - 530 , - 329 , - 288 , - 407 , - 46 , - 485 , - 444 , - 563 , - 202 , - 1 , - 600 , - 79 , - 358 , - 157 , - 116 , - 235 , - 514 , - 313 , - 272 , - 391 , - 30 , - 469 , - 428 , - 547 , - 186 , - 625 , - 584 , - 63 , - 342 , - 141 , - 100 , - 219 , - 498 , - 297 , - 256 , - 375 , - 14 , - 453 , - 412 , - 531 , - 170 , - 609 , - 568 , - 47 , - 326 , - 125 , - 84 , - 203 , - 482 , - 281 , - 240 , - 359 , - 638 , - 437 , - 396 , - 515 , - 154 , - 593 , - 552 , - 31 , - 310 , - 109 , - 68 , - 187 , - 466 , - 265 , - 224 , - 343 , - 622 , - 421 , - 380 , - 499 , - 138 , - 577 , - 536 , - 15 , - 294 , - 93 , - 52 , - 171 , - 450 , - 249 , - 208 , - 327 , - 606 , - 405 , - 364 , - 483 , - 122 , - 561 , - 520 , - 639 , - 278 , - 77 , - 36 , - 155 , - 434 , - 233 , - 192 , - 311 , - 590 , - 389 , - 348 , - 467 , - 106 , - 545 , - 504 , - 623 , - 262 , - 61 , - 20 , - 139 , - 418 , - 217 , - 176 , - 295 , - 574 , - 373 , - 332 , - 451 , - 90 , - 529 , - 488 , - 607 , - 246 , - 45 , - 4 , - 123 , - 402 , - 201 , - 160 , - 279 , - 558 , - 357 , - 316 , - 435 , - 74 , - 513 , - 472 , - 591 , - 230 , - 29 , - 628 , - 107 , - 386 , - 185 , - 144 , - 263 , - 542 , - 341 , - 300 , - 419 , - 58 , - 497 , - 456 , - 575 , - 214 , - 13 , - 612 , - 91 , - 370 , - 169 , - 128 , - 247 , - 526 , - 325 , - 284 , - 403 , - 42 , - 481 , - 440 , - 559 , - 198 , - 637 , - 596 , - 75 , - 354 , - 153 , - 112 , - 231 , - 510 , - 309 , - 268 , - 387 , - 26 , - 465 , - 424 , - 543 , - 182 , - 621 , - 580 , - 59 , - 338 , - 137 , - 96 , - 215 , - 494 , - 293 , - 252 , - 371 , - 10 , - 449 , - 408 , - 527 , - 166 , - 605 , - 564 , - 43 , - 322 , - 121 , - 80 , - 199 , - 478 , - 277 , - 236 , - 355 , - 634 , - 433 , - 392 , - 511 , - 150 , - 589 , - 548 , - 27 , - 306 , - 105 , - 64 , - 183 , - 462 , - 261 , - 220 , - 339 , - 618 , - 417 , - 376 , - 495 , - 134 , - 573 , - 532 , - 11 , - 290 , - 89 , - 48 , - 167 , - 446 , - 245 , - 204 , - 323 , - 602 , - 401 , - 360 , - 479 , - 118 , - 557 , - 516 , - 635 , - 274 , - 73 , - 32 , - 151 , - 430 , - 229 , - 188 , - 307 , - 586 , - 385 , - 344 , - 463 , - 102 , - 541 , - 500 , - 619 , - 258 , - 57 , - 16 , - 135 , - 414 , - 213 , - 172 , - 291 , - 570 , - 369 , - 328 , - 447 , - 86 , - 525 , - 484 , - 603 , - 242 , - 41 , - 0 , - 267 , - 42 , - 637 , - 84 , - 351 , - 126 , - 65 , - 168 , - 435 , - 210 , - 149 , - 252 , - 519 , - 294 , - 233 , - 336 , - 603 , - 378 , - 317 , - 420 , - 31 , - 462 , - 401 , - 504 , - 115 , - 546 , - 485 , - 588 , - 199 , - 630 , - 569 , - 16 , - 283 , - 58 , - 653 , - 100 , - 367 , - 142 , - 81 , - 184 , - 451 , - 226 , - 165 , - 268 , - 535 , - 310 , - 249 , - 352 , - 619 , - 394 , - 333 , - 436 , - 47 , - 478 , - 417 , - 520 , - 131 , - 562 , - 501 , - 604 , - 215 , - 646 , - 585 , - 32 , - 299 , - 74 , - 13 , - 116 , - 383 , - 158 , - 97 , - 200 , - 467 , - 242 , - 181 , - 284 , - 551 , - 326 , - 265 , - 368 , - 635 , - 410 , - 349 , - 452 , - 63 , - 494 , - 433 , - 536 , - 147 , - 578 , - 517 , - 620 , - 231 , - 6 , - 601 , - 48 , - 315 , - 90 , - 29 , - 132 , - 399 , - 174 , - 113 , - 216 , - 483 , - 258 , - 197 , - 300 , - 567 , - 342 , - 281 , - 384 , - 651 , - 426 , - 365 , - 468 , - 79 , - 510 , - 449 , - 552 , - 163 , - 594 , - 533 , - 636 , - 247 , - 22 , - 617 , - 64 , - 331 , - 106 , - 45 , - 148 , - 415 , - 190 , - 129 , - 232 , - 499 , - 274 , - 213 , - 316 , - 583 , - 358 , - 297 , - 400 , - 11 , - 442 , - 381 , - 484 , - 95 , - 526 , - 465 , - 568 , - 179 , - 610 , - 549 , - 652 , - 263 , - 38 , - 633 , - 80 , - 347 , - 122 , - 61 , - 164 , - 431 , - 206 , - 145 , - 248 , - 515 , - 290 , - 229 , - 332 , - 599 , - 374 , - 313 , - 416 , - 27 , - 458 , - 397 , - 500 , - 111 , - 542 , - 481 , - 584 , - 195 , - 626 , - 565 , - 12 , - 279 , - 54 , - 649 , - 96 , - 363 , - 138 , - 77 , - 180 , - 447 , - 222 , - 161 , - 264 , - 531 , - 306 , - 245 , - 348 , - 615 , - 390 , - 329 , - 432 , - 43 , - 474 , - 413 , - 516 , - 127 , - 558 , - 497 , - 600 , - 211 , - 642 , - 581 , - 28 , - 295 , - 70 , - 9 , - 112 , - 379 , - 154 , - 93 , - 196 , - 463 , - 238 , - 177 , - 280 , - 547 , - 322 , - 261 , - 364 , - 631 , - 406 , - 345 , - 448 , - 59 , - 490 , - 429 , - 532 , - 143 , - 574 , - 513 , - 616 , - 227 , - 2 , - 597 , - 44 , - 311 , - 86 , - 25 , - 128 , - 395 , - 170 , - 109 , - 212 , - 479 , - 254 , - 193 , - 296 , - 563 , - 338 , - 277 , - 380 , - 647 , - 422 , - 361 , - 464 , - 75 , - 506 , - 445 , - 548 , - 159 , - 590 , - 529 , - 632 , - 243 , - 18 , - 613 , - 60 , - 327 , - 102 , - 41 , - 144 , - 411 , - 186 , - 125 , - 228 , - 495 , - 270 , - 209 , - 312 , - 579 , - 354 , - 293 , - 396 , - 7 , - 438 , - 377 , - 480 , - 91 , - 522 , - 461 , - 564 , - 175 , - 606 , - 545 , - 648 , - 259 , - 34 , - 629 , - 76 , - 343 , - 118 , - 57 , - 160 , - 427 , - 202 , - 141 , - 244 , - 511 , - 286 , - 225 , - 328 , - 595 , - 370 , - 309 , - 412 , - 23 , - 454 , - 393 , - 496 , - 107 , - 538 , - 477 , - 580 , - 191 , - 622 , - 561 , - 8 , - 275 , - 50 , - 645 , - 92 , - 359 , - 134 , - 73 , - 176 , - 443 , - 218 , - 157 , - 260 , - 527 , - 302 , - 241 , - 344 , - 611 , - 386 , - 325 , - 428 , - 39 , - 470 , - 409 , - 512 , - 123 , - 554 , - 493 , - 596 , - 207 , - 638 , - 577 , - 24 , - 291 , - 66 , - 5 , - 108 , - 375 , - 150 , - 89 , - 192 , - 459 , - 234 , - 173 , - 276 , - 543 , - 318 , - 257 , - 360 , - 627 , - 402 , - 341 , - 444 , - 55 , - 486 , - 425 , - 528 , - 139 , - 570 , - 509 , - 612 , - 223 , - 654 , - 593 , - 40 , - 307 , - 82 , - 21 , - 124 , - 391 , - 166 , - 105 , - 208 , - 475 , - 250 , - 189 , - 292 , - 559 , - 334 , - 273 , - 376 , - 643 , - 418 , - 357 , - 460 , - 71 , - 502 , - 441 , - 544 , - 155 , - 586 , - 525 , - 628 , - 239 , - 14 , - 609 , - 56 , - 323 , - 98 , - 37 , - 140 , - 407 , - 182 , - 121 , - 224 , - 491 , - 266 , - 205 , - 308 , - 575 , - 350 , - 289 , - 392 , - 3 , - 434 , - 373 , - 476 , - 87 , - 518 , - 457 , - 560 , - 171 , - 602 , - 541 , - 644 , - 255 , - 30 , - 625 , - 72 , - 339 , - 114 , - 53 , - 156 , - 423 , - 198 , - 137 , - 240 , - 507 , - 282 , - 221 , - 324 , - 591 , - 366 , - 305 , - 408 , - 19 , - 450 , - 389 , - 492 , - 103 , - 534 , - 473 , - 576 , - 187 , - 618 , - 557 , - 4 , - 271 , - 46 , - 641 , - 88 , - 355 , - 130 , - 69 , - 172 , - 439 , - 214 , - 153 , - 256 , - 523 , - 298 , - 237 , - 340 , - 607 , - 382 , - 321 , - 424 , - 35 , - 466 , - 405 , - 508 , - 119 , - 550 , - 489 , - 592 , - 203 , - 634 , - 573 , - 20 , - 287 , - 62 , - 1 , - 104 , - 371 , - 146 , - 85 , - 188 , - 455 , - 230 , - 169 , - 272 , - 539 , - 314 , - 253 , - 356 , - 623 , - 398 , - 337 , - 440 , - 51 , - 482 , - 421 , - 524 , - 135 , - 566 , - 505 , - 608 , - 219 , - 650 , - 589 , - 36 , - 303 , - 78 , - 17 , - 120 , - 387 , - 162 , - 101 , - 204 , - 471 , - 246 , - 185 , - 288 , - 555 , - 330 , - 269 , - 372 , - 639 , - 414 , - 353 , - 456 , - 67 , - 498 , - 437 , - 540 , - 151 , - 582 , - 521 , - 624 , - 235 , - 10 , - 605 , - 52 , - 319 , - 94 , - 33 , - 136 , - 403 , - 178 , - 117 , - 220 , - 487 , - 262 , - 201 , - 304 , - 571 , - 346 , - 285 , - 388 , - 655 , - 430 , - 369 , - 472 , - 83 , - 514 , - 453 , - 556 , - 167 , - 598 , - 537 , - 640 , - 251 , - 26 , - 621 , - 68 , - 335 , - 110 , - 49 , - 152 , - 419 , - 194 , - 133 , - 236 , - 503 , - 278 , - 217 , - 320 , - 587 , - 362 , - 301 , - 404 , - 15 , - 446 , - 385 , - 488 , - 99 , - 530 , - 469 , - 572 , - 183 , - 614 , - 553 , - 0 , - 295 , - 422 , - 381 , - 172 , - 467 , - 594 , - 553 , - 344 , - 639 , - 94 , - 53 , - 516 , - 139 , - 266 , - 225 , - 16 , - 311 , - 438 , - 397 , - 188 , - 483 , - 610 , - 569 , - 360 , - 655 , - 110 , - 69 , - 532 , - 155 , - 282 , - 241 , - 32 , - 327 , - 454 , - 413 , - 204 , - 499 , - 626 , - 585 , - 376 , - 671 , - 126 , - 85 , - 548 , - 171 , - 298 , - 257 , - 48 , - 343 , - 470 , - 429 , - 220 , - 515 , - 642 , - 601 , - 392 , - 15 , - 142 , - 101 , - 564 , - 187 , - 314 , - 273 , - 64 , - 359 , - 486 , - 445 , - 236 , - 531 , - 658 , - 617 , - 408 , - 31 , - 158 , - 117 , - 580 , - 203 , - 330 , - 289 , - 80 , - 375 , - 502 , - 461 , - 252 , - 547 , - 2 , - 633 , - 424 , - 47 , - 174 , - 133 , - 596 , - 219 , - 346 , - 305 , - 96 , - 391 , - 518 , - 477 , - 268 , - 563 , - 18 , - 649 , - 440 , - 63 , - 190 , - 149 , - 612 , - 235 , - 362 , - 321 , - 112 , - 407 , - 534 , - 493 , - 284 , - 579 , - 34 , - 665 , - 456 , - 79 , - 206 , - 165 , - 628 , - 251 , - 378 , - 337 , - 128 , - 423 , - 550 , - 509 , - 300 , - 595 , - 50 , - 9 , - 472 , - 95 , - 222 , - 181 , - 644 , - 267 , - 394 , - 353 , - 144 , - 439 , - 566 , - 525 , - 316 , - 611 , - 66 , - 25 , - 488 , - 111 , - 238 , - 197 , - 660 , - 283 , - 410 , - 369 , - 160 , - 455 , - 582 , - 541 , - 332 , - 627 , - 82 , - 41 , - 504 , - 127 , - 254 , - 213 , - 4 , - 299 , - 426 , - 385 , - 176 , - 471 , - 598 , - 557 , - 348 , - 643 , - 98 , - 57 , - 520 , - 143 , - 270 , - 229 , - 20 , - 315 , - 442 , - 401 , - 192 , - 487 , - 614 , - 573 , - 364 , - 659 , - 114 , - 73 , - 536 , - 159 , - 286 , - 245 , - 36 , - 331 , - 458 , - 417 , - 208 , - 503 , - 630 , - 589 , - 380 , - 3 , - 130 , - 89 , - 552 , - 175 , - 302 , - 261 , - 52 , - 347 , - 474 , - 433 , - 224 , - 519 , - 646 , - 605 , - 396 , - 19 , - 146 , - 105 , - 568 , - 191 , - 318 , - 277 , - 68 , - 363 , - 490 , - 449 , - 240 , - 535 , - 662 , - 621 , - 412 , - 35 , - 162 , - 121 , - 584 , - 207 , - 334 , - 293 , - 84 , - 379 , - 506 , - 465 , - 256 , - 551 , - 6 , - 637 , - 428 , - 51 , - 178 , - 137 , - 600 , - 223 , - 350 , - 309 , - 100 , - 395 , - 522 , - 481 , - 272 , - 567 , - 22 , - 653 , - 444 , - 67 , - 194 , - 153 , - 616 , - 239 , - 366 , - 325 , - 116 , - 411 , - 538 , - 497 , - 288 , - 583 , - 38 , - 669 , - 460 , - 83 , - 210 , - 169 , - 632 , - 255 , - 382 , - 341 , - 132 , - 427 , - 554 , - 513 , - 304 , - 599 , - 54 , - 13 , - 476 , - 99 , - 226 , - 185 , - 648 , - 271 , - 398 , - 357 , - 148 , - 443 , - 570 , - 529 , - 320 , - 615 , - 70 , - 29 , - 492 , - 115 , - 242 , - 201 , - 664 , - 287 , - 414 , - 373 , - 164 , - 459 , - 586 , - 545 , - 336 , - 631 , - 86 , - 45 , - 508 , - 131 , - 258 , - 217 , - 8 , - 303 , - 430 , - 389 , - 180 , - 475 , - 602 , - 561 , - 352 , - 647 , - 102 , - 61 , - 524 , - 147 , - 274 , - 233 , - 24 , - 319 , - 446 , - 405 , - 196 , - 491 , - 618 , - 577 , - 368 , - 663 , - 118 , - 77 , - 540 , - 163 , - 290 , - 249 , - 40 , - 335 , - 462 , - 421 , - 212 , - 507 , - 634 , - 593 , - 384 , - 7 , - 134 , - 93 , - 556 , - 179 , - 306 , - 265 , - 56 , - 351 , - 478 , - 437 , - 228 , - 523 , - 650 , - 609 , - 400 , - 23 , - 150 , - 109 , - 572 , - 195 , - 322 , - 281 , - 72 , - 367 , - 494 , - 453 , - 244 , - 539 , - 666 , - 625 , - 416 , - 39 , - 166 , - 125 , - 588 , - 211 , - 338 , - 297 , - 88 , - 383 , - 510 , - 469 , - 260 , - 555 , - 10 , - 641 , - 432 , - 55 , - 182 , - 141 , - 604 , - 227 , - 354 , - 313 , - 104 , - 399 , - 526 , - 485 , - 276 , - 571 , - 26 , - 657 , - 448 , - 71 , - 198 , - 157 , - 620 , - 243 , - 370 , - 329 , - 120 , - 415 , - 542 , - 501 , - 292 , - 587 , - 42 , - 1 , - 464 , - 87 , - 214 , - 173 , - 636 , - 259 , - 386 , - 345 , - 136 , - 431 , - 558 , - 517 , - 308 , - 603 , - 58 , - 17 , - 480 , - 103 , - 230 , - 189 , - 652 , - 275 , - 402 , - 361 , - 152 , - 447 , - 574 , - 533 , - 324 , - 619 , - 74 , - 33 , - 496 , - 119 , - 246 , - 205 , - 668 , - 291 , - 418 , - 377 , - 168 , - 463 , - 590 , - 549 , - 340 , - 635 , - 90 , - 49 , - 512 , - 135 , - 262 , - 221 , - 12 , - 307 , - 434 , - 393 , - 184 , - 479 , - 606 , - 565 , - 356 , - 651 , - 106 , - 65 , - 528 , - 151 , - 278 , - 237 , - 28 , - 323 , - 450 , - 409 , - 200 , - 495 , - 622 , - 581 , - 372 , - 667 , - 122 , - 81 , - 544 , - 167 , - 294 , - 253 , - 44 , - 339 , - 466 , - 425 , - 216 , - 511 , - 638 , - 597 , - 388 , - 11 , - 138 , - 97 , - 560 , - 183 , - 310 , - 269 , - 60 , - 355 , - 482 , - 441 , - 232 , - 527 , - 654 , - 613 , - 404 , - 27 , - 154 , - 113 , - 576 , - 199 , - 326 , - 285 , - 76 , - 371 , - 498 , - 457 , - 248 , - 543 , - 670 , - 629 , - 420 , - 43 , - 170 , - 129 , - 592 , - 215 , - 342 , - 301 , - 92 , - 387 , - 514 , - 473 , - 264 , - 559 , - 14 , - 645 , - 436 , - 59 , - 186 , - 145 , - 608 , - 231 , - 358 , - 317 , - 108 , - 403 , - 530 , - 489 , - 280 , - 575 , - 30 , - 661 , - 452 , - 75 , - 202 , - 161 , - 624 , - 247 , - 374 , - 333 , - 124 , - 419 , - 546 , - 505 , - 296 , - 591 , - 46 , - 5 , - 468 , - 91 , - 218 , - 177 , - 640 , - 263 , - 390 , - 349 , - 140 , - 435 , - 562 , - 521 , - 312 , - 607 , - 62 , - 21 , - 484 , - 107 , - 234 , - 193 , - 656 , - 279 , - 406 , - 365 , - 156 , - 451 , - 578 , - 537 , - 328 , - 623 , - 78 , - 37 , - 500 , - 123 , - 250 , - 209 , - 0 , - 107 , - 386 , - 149 , - 84 , - 191 , - 470 , - 233 , - 168 , - 275 , - 554 , - 317 , - 252 , - 359 , - 638 , - 401 , - 336 , - 443 , - 34 , - 485 , - 420 , - 527 , - 118 , - 569 , - 504 , - 611 , - 202 , - 653 , - 588 , - 7 , - 286 , - 49 , - 672 , - 91 , - 370 , - 133 , - 68 , - 175 , - 454 , - 217 , - 152 , - 259 , - 538 , - 301 , - 236 , - 343 , - 622 , - 385 , - 320 , - 427 , - 18 , - 469 , - 404 , - 511 , - 102 , - 553 , - 488 , - 595 , - 186 , - 637 , - 572 , - 679 , - 270 , - 33 , - 656 , - 75 , - 354 , - 117 , - 52 , - 159 , - 438 , - 201 , - 136 , - 243 , - 522 , - 285 , - 220 , - 327 , - 606 , - 369 , - 304 , - 411 , - 2 , - 453 , - 388 , - 495 , - 86 , - 537 , - 472 , - 579 , - 170 , - 621 , - 556 , - 663 , - 254 , - 17 , - 640 , - 59 , - 338 , - 101 , - 36 , - 143 , - 422 , - 185 , - 120 , - 227 , - 506 , - 269 , - 204 , - 311 , - 590 , - 353 , - 288 , - 395 , - 674 , - 437 , - 372 , - 479 , - 70 , - 521 , - 456 , - 563 , - 154 , - 605 , - 540 , - 647 , - 238 , - 1 , - 624 , - 43 , - 322 , - 85 , - 20 , - 127 , - 406 , - 169 , - 104 , - 211 , - 490 , - 253 , - 188 , - 295 , - 574 , - 337 , - 272 , - 379 , - 658 , - 421 , - 356 , - 463 , - 54 , - 505 , - 440 , - 547 , - 138 , - 589 , - 524 , - 631 , - 222 , - 673 , - 608 , - 27 , - 306 , - 69 , - 4 , - 111 , - 390 , - 153 , - 88 , - 195 , - 474 , - 237 , - 172 , - 279 , - 558 , - 321 , - 256 , - 363 , - 642 , - 405 , - 340 , - 447 , - 38 , - 489 , - 424 , - 531 , - 122 , - 573 , - 508 , - 615 , - 206 , - 657 , - 592 , - 11 , - 290 , - 53 , - 676 , - 95 , - 374 , - 137 , - 72 , - 179 , - 458 , - 221 , - 156 , - 263 , - 542 , - 305 , - 240 , - 347 , - 626 , - 389 , - 324 , - 431 , - 22 , - 473 , - 408 , - 515 , - 106 , - 557 , - 492 , - 599 , - 190 , - 641 , - 576 , - 683 , - 274 , - 37 , - 660 , - 79 , - 358 , - 121 , - 56 , - 163 , - 442 , - 205 , - 140 , - 247 , - 526 , - 289 , - 224 , - 331 , - 610 , - 373 , - 308 , - 415 , - 6 , - 457 , - 392 , - 499 , - 90 , - 541 , - 476 , - 583 , - 174 , - 625 , - 560 , - 667 , - 258 , - 21 , - 644 , - 63 , - 342 , - 105 , - 40 , - 147 , - 426 , - 189 , - 124 , - 231 , - 510 , - 273 , - 208 , - 315 , - 594 , - 357 , - 292 , - 399 , - 678 , - 441 , - 376 , - 483 , - 74 , - 525 , - 460 , - 567 , - 158 , - 609 , - 544 , - 651 , - 242 , - 5 , - 628 , - 47 , - 326 , - 89 , - 24 , - 131 , - 410 , - 173 , - 108 , - 215 , - 494 , - 257 , - 192 , - 299 , - 578 , - 341 , - 276 , - 383 , - 662 , - 425 , - 360 , - 467 , - 58 , - 509 , - 444 , - 551 , - 142 , - 593 , - 528 , - 635 , - 226 , - 677 , - 612 , - 31 , - 310 , - 73 , - 8 , - 115 , - 394 , - 157 , - 92 , - 199 , - 478 , - 241 , - 176 , - 283 , - 562 , - 325 , - 260 , - 367 , - 646 , - 409 , - 344 , - 451 , - 42 , - 493 , - 428 , - 535 , - 126 , - 577 , - 512 , - 619 , - 210 , - 661 , - 596 , - 15 , - 294 , - 57 , - 680 , - 99 , - 378 , - 141 , - 76 , - 183 , - 462 , - 225 , - 160 , - 267 , - 546 , - 309 , - 244 , - 351 , - 630 , - 393 , - 328 , - 435 , - 26 , - 477 , - 412 , - 519 , - 110 , - 561 , - 496 , - 603 , - 194 , - 645 , - 580 , - 687 , - 278 , - 41 , - 664 , - 83 , - 362 , - 125 , - 60 , - 167 , - 446 , - 209 , - 144 , - 251 , - 530 , - 293 , - 228 , - 335 , - 614 , - 377 , - 312 , - 419 , - 10 , - 461 , - 396 , - 503 , - 94 , - 545 , - 480 , - 587 , - 178 , - 629 , - 564 , - 671 , - 262 , - 25 , - 648 , - 67 , - 346 , - 109 , - 44 , - 151 , - 430 , - 193 , - 128 , - 235 , - 514 , - 277 , - 212 , - 319 , - 598 , - 361 , - 296 , - 403 , - 682 , - 445 , - 380 , - 487 , - 78 , - 529 , - 464 , - 571 , - 162 , - 613 , - 548 , - 655 , - 246 , - 9 , - 632 , - 51 , - 330 , - 93 , - 28 , - 135 , - 414 , - 177 , - 112 , - 219 , - 498 , - 261 , - 196 , - 303 , - 582 , - 345 , - 280 , - 387 , - 666 , - 429 , - 364 , - 471 , - 62 , - 513 , - 448 , - 555 , - 146 , - 597 , - 532 , - 639 , - 230 , - 681 , - 616 , - 35 , - 314 , - 77 , - 12 , - 119 , - 398 , - 161 , - 96 , - 203 , - 482 , - 245 , - 180 , - 287 , - 566 , - 329 , - 264 , - 371 , - 650 , - 413 , - 348 , - 455 , - 46 , - 497 , - 432 , - 539 , - 130 , - 581 , - 516 , - 623 , - 214 , - 665 , - 600 , - 19 , - 298 , - 61 , - 684 , - 103 , - 382 , - 145 , - 80 , - 187 , - 466 , - 229 , - 164 , - 271 , - 550 , - 313 , - 248 , - 355 , - 634 , - 397 , - 332 , - 439 , - 30 , - 481 , - 416 , - 523 , - 114 , - 565 , - 500 , - 607 , - 198 , - 649 , - 584 , - 3 , - 282 , - 45 , - 668 , - 87 , - 366 , - 129 , - 64 , - 171 , - 450 , - 213 , - 148 , - 255 , - 534 , - 297 , - 232 , - 339 , - 618 , - 381 , - 316 , - 423 , - 14 , - 465 , - 400 , - 507 , - 98 , - 549 , - 484 , - 591 , - 182 , - 633 , - 568 , - 675 , - 266 , - 29 , - 652 , - 71 , - 350 , - 113 , - 48 , - 155 , - 434 , - 197 , - 132 , - 239 , - 518 , - 281 , - 216 , - 323 , - 602 , - 365 , - 300 , - 407 , - 686 , - 449 , - 384 , - 491 , - 82 , - 533 , - 468 , - 575 , - 166 , - 617 , - 552 , - 659 , - 250 , - 13 , - 636 , - 55 , - 334 , - 97 , - 32 , - 139 , - 418 , - 181 , - 116 , - 223 , - 502 , - 265 , - 200 , - 307 , - 586 , - 349 , - 284 , - 391 , - 670 , - 433 , - 368 , - 475 , - 66 , - 517 , - 452 , - 559 , - 150 , - 601 , - 536 , - 643 , - 234 , - 685 , - 620 , - 39 , - 318 , - 81 , - 16 , - 123 , - 402 , - 165 , - 100 , - 207 , - 486 , - 249 , - 184 , - 291 , - 570 , - 333 , - 268 , - 375 , - 654 , - 417 , - 352 , - 459 , - 50 , - 501 , - 436 , - 543 , - 134 , - 585 , - 520 , - 627 , - 218 , - 669 , - 604 , - 23 , - 302 , - 65 , - 0 , - 199 , - 486 , - 157 , - 620 , - 467 , - 402 , - 425 , - 536 , - 31 , - 318 , - 693 , - 452 , - 299 , - 234 , - 257 , - 368 , - 567 , - 150 , - 525 , - 284 , - 131 , - 66 , - 89 , - 200 , - 399 , - 686 , - 357 , - 116 , - 667 , - 602 , - 625 , - 32 , - 231 , - 518 , - 189 , - 652 , - 499 , - 434 , - 457 , - 568 , - 63 , - 350 , - 21 , - 484 , - 331 , - 266 , - 289 , - 400 , - 599 , - 182 , - 557 , - 316 , - 163 , - 98 , - 121 , - 232 , - 431 , - 14 , - 389 , - 148 , - 699 , - 634 , - 657 , - 64 , - 263 , - 550 , - 221 , - 684 , - 531 , - 466 , - 489 , - 600 , - 95 , - 382 , - 53 , - 516 , - 363 , - 298 , - 321 , - 432 , - 631 , - 214 , - 589 , - 348 , - 195 , - 130 , - 153 , - 264 , - 463 , - 46 , - 421 , - 180 , - 27 , - 666 , - 689 , - 96 , - 295 , - 582 , - 253 , - 12 , - 563 , - 498 , - 521 , - 632 , - 127 , - 414 , - 85 , - 548 , - 395 , - 330 , - 353 , - 464 , - 663 , - 246 , - 621 , - 380 , - 227 , - 162 , - 185 , - 296 , - 495 , - 78 , - 453 , - 212 , - 59 , - 698 , - 17 , - 128 , - 327 , - 614 , - 285 , - 44 , - 595 , - 530 , - 553 , - 664 , - 159 , - 446 , - 117 , - 580 , - 427 , - 362 , - 385 , - 496 , - 695 , - 278 , - 653 , - 412 , - 259 , - 194 , - 217 , - 328 , - 527 , - 110 , - 485 , - 244 , - 91 , - 26 , - 49 , - 160 , - 359 , - 646 , - 317 , - 76 , - 627 , - 562 , - 585 , - 696 , - 191 , - 478 , - 149 , - 612 , - 459 , - 394 , - 417 , - 528 , - 23 , - 310 , - 685 , - 444 , - 291 , - 226 , - 249 , - 360 , - 559 , - 142 , - 517 , - 276 , - 123 , - 58 , - 81 , - 192 , - 391 , - 678 , - 349 , - 108 , - 659 , - 594 , - 617 , - 24 , - 223 , - 510 , - 181 , - 644 , - 491 , - 426 , - 449 , - 560 , - 55 , - 342 , - 13 , - 476 , - 323 , - 258 , - 281 , - 392 , - 591 , - 174 , - 549 , - 308 , - 155 , - 90 , - 113 , - 224 , - 423 , - 6 , - 381 , - 140 , - 691 , - 626 , - 649 , - 56 , - 255 , - 542 , - 213 , - 676 , - 523 , - 458 , - 481 , - 592 , - 87 , - 374 , - 45 , - 508 , - 355 , - 290 , - 313 , - 424 , - 623 , - 206 , - 581 , - 340 , - 187 , - 122 , - 145 , - 256 , - 455 , - 38 , - 413 , - 172 , - 19 , - 658 , - 681 , - 88 , - 287 , - 574 , - 245 , - 4 , - 555 , - 490 , - 513 , - 624 , - 119 , - 406 , - 77 , - 540 , - 387 , - 322 , - 345 , - 456 , - 655 , - 238 , - 613 , - 372 , - 219 , - 154 , - 177 , - 288 , - 487 , - 70 , - 445 , - 204 , - 51 , - 690 , - 9 , - 120 , - 319 , - 606 , - 277 , - 36 , - 587 , - 522 , - 545 , - 656 , - 151 , - 438 , - 109 , - 572 , - 419 , - 354 , - 377 , - 488 , - 687 , - 270 , - 645 , - 404 , - 251 , - 186 , - 209 , - 320 , - 519 , - 102 , - 477 , - 236 , - 83 , - 18 , - 41 , - 152 , - 351 , - 638 , - 309 , - 68 , - 619 , - 554 , - 577 , - 688 , - 183 , - 470 , - 141 , - 604 , - 451 , - 386 , - 409 , - 520 , - 15 , - 302 , - 677 , - 436 , - 283 , - 218 , - 241 , - 352 , - 551 , - 134 , - 509 , - 268 , - 115 , - 50 , - 73 , - 184 , - 383 , - 670 , - 341 , - 100 , - 651 , - 586 , - 609 , - 16 , - 215 , - 502 , - 173 , - 636 , - 483 , - 418 , - 441 , - 552 , - 47 , - 334 , - 5 , - 468 , - 315 , - 250 , - 273 , - 384 , - 583 , - 166 , - 541 , - 300 , - 147 , - 82 , - 105 , - 216 , - 415 , - 702 , - 373 , - 132 , - 683 , - 618 , - 641 , - 48 , - 247 , - 534 , - 205 , - 668 , - 515 , - 450 , - 473 , - 584 , - 79 , - 366 , - 37 , - 500 , - 347 , - 282 , - 305 , - 416 , - 615 , - 198 , - 573 , - 332 , - 179 , - 114 , - 137 , - 248 , - 447 , - 30 , - 405 , - 164 , - 11 , - 650 , - 673 , - 80 , - 279 , - 566 , - 237 , - 700 , - 547 , - 482 , - 505 , - 616 , - 111 , - 398 , - 69 , - 532 , - 379 , - 314 , - 337 , - 448 , - 647 , - 230 , - 605 , - 364 , - 211 , - 146 , - 169 , - 280 , - 479 , - 62 , - 437 , - 196 , - 43 , - 682 , - 1 , - 112 , - 311 , - 598 , - 269 , - 28 , - 579 , - 514 , - 537 , - 648 , - 143 , - 430 , - 101 , - 564 , - 411 , - 346 , - 369 , - 480 , - 679 , - 262 , - 637 , - 396 , - 243 , - 178 , - 201 , - 312 , - 511 , - 94 , - 469 , - 228 , - 75 , - 10 , - 33 , - 144 , - 343 , - 630 , - 301 , - 60 , - 611 , - 546 , - 569 , - 680 , - 175 , - 462 , - 133 , - 596 , - 443 , - 378 , - 401 , - 512 , - 7 , - 294 , - 669 , - 428 , - 275 , - 210 , - 233 , - 344 , - 543 , - 126 , - 501 , - 260 , - 107 , - 42 , - 65 , - 176 , - 375 , - 662 , - 333 , - 92 , - 643 , - 578 , - 601 , - 8 , - 207 , - 494 , - 165 , - 628 , - 475 , - 410 , - 433 , - 544 , - 39 , - 326 , - 701 , - 460 , - 307 , - 242 , - 265 , - 376 , - 575 , - 158 , - 533 , - 292 , - 139 , - 74 , - 97 , - 208 , - 407 , - 694 , - 365 , - 124 , - 675 , - 610 , - 633 , - 40 , - 239 , - 526 , - 197 , - 660 , - 507 , - 442 , - 465 , - 576 , - 71 , - 358 , - 29 , - 492 , - 339 , - 274 , - 297 , - 408 , - 607 , - 190 , - 565 , - 324 , - 171 , - 106 , - 129 , - 240 , - 439 , - 22 , - 397 , - 156 , - 3 , - 642 , - 665 , - 72 , - 271 , - 558 , - 229 , - 692 , - 539 , - 474 , - 497 , - 608 , - 103 , - 390 , - 61 , - 524 , - 371 , - 306 , - 329 , - 440 , - 639 , - 222 , - 597 , - 356 , - 203 , - 138 , - 161 , - 272 , - 471 , - 54 , - 429 , - 188 , - 35 , - 674 , - 697 , - 104 , - 303 , - 590 , - 261 , - 20 , - 571 , - 506 , - 529 , - 640 , - 135 , - 422 , - 93 , - 556 , - 403 , - 338 , - 361 , - 472 , - 671 , - 254 , - 629 , - 388 , - 235 , - 170 , - 193 , - 304 , - 503 , - 86 , - 461 , - 220 , - 67 , - 2 , - 25 , - 136 , - 335 , - 622 , - 293 , - 52 , - 603 , - 538 , - 561 , - 672 , - 167 , - 454 , - 125 , - 588 , - 435 , - 370 , - 393 , - 504 , - 703 , - 286 , - 661 , - 420 , - 267 , - 202 , - 225 , - 336 , - 535 , - 118 , - 493 , - 252 , - 99 , - 34 , - 57 , - 168 , - 367 , - 654 , - 325 , - 84 , - 635 , - 570 , - 593 , - 0 , - 199 , - 638 , - 597 , - 76 , - 515 , - 474 , - 673 , - 392 , - 351 , - 550 , - 269 , - 228 , - 427 , - 146 , - 105 , - 304 , - 23 , - 702 , - 181 , - 620 , - 579 , - 58 , - 497 , - 456 , - 655 , - 374 , - 333 , - 532 , - 251 , - 210 , - 409 , - 128 , - 87 , - 286 , - 5 , - 684 , - 163 , - 602 , - 561 , - 40 , - 479 , - 438 , - 637 , - 356 , - 315 , - 514 , - 233 , - 192 , - 391 , - 110 , - 69 , - 268 , - 707 , - 666 , - 145 , - 584 , - 543 , - 22 , - 461 , - 420 , - 619 , - 338 , - 297 , - 496 , - 215 , - 174 , - 373 , - 92 , - 51 , - 250 , - 689 , - 648 , - 127 , - 566 , - 525 , - 4 , - 443 , - 402 , - 601 , - 320 , - 279 , - 478 , - 197 , - 156 , - 355 , - 74 , - 33 , - 232 , - 671 , - 630 , - 109 , - 548 , - 507 , - 706 , - 425 , - 384 , - 583 , - 302 , - 261 , - 460 , - 179 , - 138 , - 337 , - 56 , - 15 , - 214 , - 653 , - 612 , - 91 , - 530 , - 489 , - 688 , - 407 , - 366 , - 565 , - 284 , - 243 , - 442 , - 161 , - 120 , - 319 , - 38 , - 717 , - 196 , - 635 , - 594 , - 73 , - 512 , - 471 , - 670 , - 389 , - 348 , - 547 , - 266 , - 225 , - 424 , - 143 , - 102 , - 301 , - 20 , - 699 , - 178 , - 617 , - 576 , - 55 , - 494 , - 453 , - 652 , - 371 , - 330 , - 529 , - 248 , - 207 , - 406 , - 125 , - 84 , - 283 , - 2 , - 681 , - 160 , - 599 , - 558 , - 37 , - 476 , - 435 , - 634 , - 353 , - 312 , - 511 , - 230 , - 189 , - 388 , - 107 , - 66 , - 265 , - 704 , - 663 , - 142 , - 581 , - 540 , - 19 , - 458 , - 417 , - 616 , - 335 , - 294 , - 493 , - 212 , - 171 , - 370 , - 89 , - 48 , - 247 , - 686 , - 645 , - 124 , - 563 , - 522 , - 1 , - 440 , - 399 , - 598 , - 317 , - 276 , - 475 , - 194 , - 153 , - 352 , - 71 , - 30 , - 229 , - 668 , - 627 , - 106 , - 545 , - 504 , - 703 , - 422 , - 381 , - 580 , - 299 , - 258 , - 457 , - 176 , - 135 , - 334 , - 53 , - 12 , - 211 , - 650 , - 609 , - 88 , - 527 , - 486 , - 685 , - 404 , - 363 , - 562 , - 281 , - 240 , - 439 , - 158 , - 117 , - 316 , - 35 , - 714 , - 193 , - 632 , - 591 , - 70 , - 509 , - 468 , - 667 , - 386 , - 345 , - 544 , - 263 , - 222 , - 421 , - 140 , - 99 , - 298 , - 17 , - 696 , - 175 , - 614 , - 573 , - 52 , - 491 , - 450 , - 649 , - 368 , - 327 , - 526 , - 245 , - 204 , - 403 , - 122 , - 81 , - 280 , - 719 , - 678 , - 157 , - 596 , - 555 , - 34 , - 473 , - 432 , - 631 , - 350 , - 309 , - 508 , - 227 , - 186 , - 385 , - 104 , - 63 , - 262 , - 701 , - 660 , - 139 , - 578 , - 537 , - 16 , - 455 , - 414 , - 613 , - 332 , - 291 , - 490 , - 209 , - 168 , - 367 , - 86 , - 45 , - 244 , - 683 , - 642 , - 121 , - 560 , - 519 , - 718 , - 437 , - 396 , - 595 , - 314 , - 273 , - 472 , - 191 , - 150 , - 349 , - 68 , - 27 , - 226 , - 665 , - 624 , - 103 , - 542 , - 501 , - 700 , - 419 , - 378 , - 577 , - 296 , - 255 , - 454 , - 173 , - 132 , - 331 , - 50 , - 9 , - 208 , - 647 , - 606 , - 85 , - 524 , - 483 , - 682 , - 401 , - 360 , - 559 , - 278 , - 237 , - 436 , - 155 , - 114 , - 313 , - 32 , - 711 , - 190 , - 629 , - 588 , - 67 , - 506 , - 465 , - 664 , - 383 , - 342 , - 541 , - 260 , - 219 , - 418 , - 137 , - 96 , - 295 , - 14 , - 693 , - 172 , - 611 , - 570 , - 49 , - 488 , - 447 , - 646 , - 365 , - 324 , - 523 , - 242 , - 201 , - 400 , - 119 , - 78 , - 277 , - 716 , - 675 , - 154 , - 593 , - 552 , - 31 , - 470 , - 429 , - 628 , - 347 , - 306 , - 505 , - 224 , - 183 , - 382 , - 101 , - 60 , - 259 , - 698 , - 657 , - 136 , - 575 , - 534 , - 13 , - 452 , - 411 , - 610 , - 329 , - 288 , - 487 , - 206 , - 165 , - 364 , - 83 , - 42 , - 241 , - 680 , - 639 , - 118 , - 557 , - 516 , - 715 , - 434 , - 393 , - 592 , - 311 , - 270 , - 469 , - 188 , - 147 , - 346 , - 65 , - 24 , - 223 , - 662 , - 621 , - 100 , - 539 , - 498 , - 697 , - 416 , - 375 , - 574 , - 293 , - 252 , - 451 , - 170 , - 129 , - 328 , - 47 , - 6 , - 205 , - 644 , - 603 , - 82 , - 521 , - 480 , - 679 , - 398 , - 357 , - 556 , - 275 , - 234 , - 433 , - 152 , - 111 , - 310 , - 29 , - 708 , - 187 , - 626 , - 585 , - 64 , - 503 , - 462 , - 661 , - 380 , - 339 , - 538 , - 257 , - 216 , - 415 , - 134 , - 93 , - 292 , - 11 , - 690 , - 169 , - 608 , - 567 , - 46 , - 485 , - 444 , - 643 , - 362 , - 321 , - 520 , - 239 , - 198 , - 397 , - 116 , - 75 , - 274 , - 713 , - 672 , - 151 , - 590 , - 549 , - 28 , - 467 , - 426 , - 625 , - 344 , - 303 , - 502 , - 221 , - 180 , - 379 , - 98 , - 57 , - 256 , - 695 , - 654 , - 133 , - 572 , - 531 , - 10 , - 449 , - 408 , - 607 , - 326 , - 285 , - 484 , - 203 , - 162 , - 361 , - 80 , - 39 , - 238 , - 677 , - 636 , - 115 , - 554 , - 513 , - 712 , - 431 , - 390 , - 589 , - 308 , - 267 , - 466 , - 185 , - 144 , - 343 , - 62 , - 21 , - 220 , - 659 , - 618 , - 97 , - 536 , - 495 , - 694 , - 413 , - 372 , - 571 , - 290 , - 249 , - 448 , - 167 , - 126 , - 325 , - 44 , - 3 , - 202 , - 641 , - 600 , - 79 , - 518 , - 477 , - 676 , - 395 , - 354 , - 553 , - 272 , - 231 , - 430 , - 149 , - 108 , - 307 , - 26 , - 705 , - 184 , - 623 , - 582 , - 61 , - 500 , - 459 , - 658 , - 377 , - 336 , - 535 , - 254 , - 213 , - 412 , - 131 , - 90 , - 289 , - 8 , - 687 , - 166 , - 605 , - 564 , - 43 , - 482 , - 441 , - 640 , - 359 , - 318 , - 517 , - 236 , - 195 , - 394 , - 113 , - 72 , - 271 , - 710 , - 669 , - 148 , - 587 , - 546 , - 25 , - 464 , - 423 , - 622 , - 341 , - 300 , - 499 , - 218 , - 177 , - 376 , - 95 , - 54 , - 253 , - 692 , - 651 , - 130 , - 569 , - 528 , - 7 , - 446 , - 405 , - 604 , - 323 , - 282 , - 481 , - 200 , - 159 , - 358 , - 77 , - 36 , - 235 , - 674 , - 633 , - 112 , - 551 , - 510 , - 709 , - 428 , - 387 , - 586 , - 305 , - 264 , - 463 , - 182 , - 141 , - 340 , - 59 , - 18 , - 217 , - 656 , - 615 , - 94 , - 533 , - 492 , - 691 , - 410 , - 369 , - 568 , - 287 , - 246 , - 445 , - 164 , - 123 , - 322 , - 41 , - 0 , - 231 , - 646 , - 509 , - 556 , - 51 , - 466 , - 329 , - 376 , - 607 , - 286 , - 149 , - 196 , - 427 , - 106 , - 705 , - 16 , - 247 , - 662 , - 525 , - 572 , - 67 , - 482 , - 345 , - 392 , - 623 , - 302 , - 165 , - 212 , - 443 , - 122 , - 721 , - 32 , - 263 , - 678 , - 541 , - 588 , - 83 , - 498 , - 361 , - 408 , - 639 , - 318 , - 181 , - 228 , - 459 , - 138 , - 1 , - 48 , - 279 , - 694 , - 557 , - 604 , - 99 , - 514 , - 377 , - 424 , - 655 , - 334 , - 197 , - 244 , - 475 , - 154 , - 17 , - 64 , - 295 , - 710 , - 573 , - 620 , - 115 , - 530 , - 393 , - 440 , - 671 , - 350 , - 213 , - 260 , - 491 , - 170 , - 33 , - 80 , - 311 , - 726 , - 589 , - 636 , - 131 , - 546 , - 409 , - 456 , - 687 , - 366 , - 229 , - 276 , - 507 , - 186 , - 49 , - 96 , - 327 , - 6 , - 605 , - 652 , - 147 , - 562 , - 425 , - 472 , - 703 , - 382 , - 245 , - 292 , - 523 , - 202 , - 65 , - 112 , - 343 , - 22 , - 621 , - 668 , - 163 , - 578 , - 441 , - 488 , - 719 , - 398 , - 261 , - 308 , - 539 , - 218 , - 81 , - 128 , - 359 , - 38 , - 637 , - 684 , - 179 , - 594 , - 457 , - 504 , - 735 , - 414 , - 277 , - 324 , - 555 , - 234 , - 97 , - 144 , - 375 , - 54 , - 653 , - 700 , - 195 , - 610 , - 473 , - 520 , - 15 , - 430 , - 293 , - 340 , - 571 , - 250 , - 113 , - 160 , - 391 , - 70 , - 669 , - 716 , - 211 , - 626 , - 489 , - 536 , - 31 , - 446 , - 309 , - 356 , - 587 , - 266 , - 129 , - 176 , - 407 , - 86 , - 685 , - 732 , - 227 , - 642 , - 505 , - 552 , - 47 , - 462 , - 325 , - 372 , - 603 , - 282 , - 145 , - 192 , - 423 , - 102 , - 701 , - 12 , - 243 , - 658 , - 521 , - 568 , - 63 , - 478 , - 341 , - 388 , - 619 , - 298 , - 161 , - 208 , - 439 , - 118 , - 717 , - 28 , - 259 , - 674 , - 537 , - 584 , - 79 , - 494 , - 357 , - 404 , - 635 , - 314 , - 177 , - 224 , - 455 , - 134 , - 733 , - 44 , - 275 , - 690 , - 553 , - 600 , - 95 , - 510 , - 373 , - 420 , - 651 , - 330 , - 193 , - 240 , - 471 , - 150 , - 13 , - 60 , - 291 , - 706 , - 569 , - 616 , - 111 , - 526 , - 389 , - 436 , - 667 , - 346 , - 209 , - 256 , - 487 , - 166 , - 29 , - 76 , - 307 , - 722 , - 585 , - 632 , - 127 , - 542 , - 405 , - 452 , - 683 , - 362 , - 225 , - 272 , - 503 , - 182 , - 45 , - 92 , - 323 , - 2 , - 601 , - 648 , - 143 , - 558 , - 421 , - 468 , - 699 , - 378 , - 241 , - 288 , - 519 , - 198 , - 61 , - 108 , - 339 , - 18 , - 617 , - 664 , - 159 , - 574 , - 437 , - 484 , - 715 , - 394 , - 257 , - 304 , - 535 , - 214 , - 77 , - 124 , - 355 , - 34 , - 633 , - 680 , - 175 , - 590 , - 453 , - 500 , - 731 , - 410 , - 273 , - 320 , - 551 , - 230 , - 93 , - 140 , - 371 , - 50 , - 649 , - 696 , - 191 , - 606 , - 469 , - 516 , - 11 , - 426 , - 289 , - 336 , - 567 , - 246 , - 109 , - 156 , - 387 , - 66 , - 665 , - 712 , - 207 , - 622 , - 485 , - 532 , - 27 , - 442 , - 305 , - 352 , - 583 , - 262 , - 125 , - 172 , - 403 , - 82 , - 681 , - 728 , - 223 , - 638 , - 501 , - 548 , - 43 , - 458 , - 321 , - 368 , - 599 , - 278 , - 141 , - 188 , - 419 , - 98 , - 697 , - 8 , - 239 , - 654 , - 517 , - 564 , - 59 , - 474 , - 337 , - 384 , - 615 , - 294 , - 157 , - 204 , - 435 , - 114 , - 713 , - 24 , - 255 , - 670 , - 533 , - 580 , - 75 , - 490 , - 353 , - 400 , - 631 , - 310 , - 173 , - 220 , - 451 , - 130 , - 729 , - 40 , - 271 , - 686 , - 549 , - 596 , - 91 , - 506 , - 369 , - 416 , - 647 , - 326 , - 189 , - 236 , - 467 , - 146 , - 9 , - 56 , - 287 , - 702 , - 565 , - 612 , - 107 , - 522 , - 385 , - 432 , - 663 , - 342 , - 205 , - 252 , - 483 , - 162 , - 25 , - 72 , - 303 , - 718 , - 581 , - 628 , - 123 , - 538 , - 401 , - 448 , - 679 , - 358 , - 221 , - 268 , - 499 , - 178 , - 41 , - 88 , - 319 , - 734 , - 597 , - 644 , - 139 , - 554 , - 417 , - 464 , - 695 , - 374 , - 237 , - 284 , - 515 , - 194 , - 57 , - 104 , - 335 , - 14 , - 613 , - 660 , - 155 , - 570 , - 433 , - 480 , - 711 , - 390 , - 253 , - 300 , - 531 , - 210 , - 73 , - 120 , - 351 , - 30 , - 629 , - 676 , - 171 , - 586 , - 449 , - 496 , - 727 , - 406 , - 269 , - 316 , - 547 , - 226 , - 89 , - 136 , - 367 , - 46 , - 645 , - 692 , - 187 , - 602 , - 465 , - 512 , - 7 , - 422 , - 285 , - 332 , - 563 , - 242 , - 105 , - 152 , - 383 , - 62 , - 661 , - 708 , - 203 , - 618 , - 481 , - 528 , - 23 , - 438 , - 301 , - 348 , - 579 , - 258 , - 121 , - 168 , - 399 , - 78 , - 677 , - 724 , - 219 , - 634 , - 497 , - 544 , - 39 , - 454 , - 317 , - 364 , - 595 , - 274 , - 137 , - 184 , - 415 , - 94 , - 693 , - 4 , - 235 , - 650 , - 513 , - 560 , - 55 , - 470 , - 333 , - 380 , - 611 , - 290 , - 153 , - 200 , - 431 , - 110 , - 709 , - 20 , - 251 , - 666 , - 529 , - 576 , - 71 , - 486 , - 349 , - 396 , - 627 , - 306 , - 169 , - 216 , - 447 , - 126 , - 725 , - 36 , - 267 , - 682 , - 545 , - 592 , - 87 , - 502 , - 365 , - 412 , - 643 , - 322 , - 185 , - 232 , - 463 , - 142 , - 5 , - 52 , - 283 , - 698 , - 561 , - 608 , - 103 , - 518 , - 381 , - 428 , - 659 , - 338 , - 201 , - 248 , - 479 , - 158 , - 21 , - 68 , - 299 , - 714 , - 577 , - 624 , - 119 , - 534 , - 397 , - 444 , - 675 , - 354 , - 217 , - 264 , - 495 , - 174 , - 37 , - 84 , - 315 , - 730 , - 593 , - 640 , - 135 , - 550 , - 413 , - 460 , - 691 , - 370 , - 233 , - 280 , - 511 , - 190 , - 53 , - 100 , - 331 , - 10 , - 609 , - 656 , - 151 , - 566 , - 429 , - 476 , - 707 , - 386 , - 249 , - 296 , - 527 , - 206 , - 69 , - 116 , - 347 , - 26 , - 625 , - 672 , - 167 , - 582 , - 445 , - 492 , - 723 , - 402 , - 265 , - 312 , - 543 , - 222 , - 85 , - 132 , - 363 , - 42 , - 641 , - 688 , - 183 , - 598 , - 461 , - 508 , - 3 , - 418 , - 281 , - 328 , - 559 , - 238 , - 101 , - 148 , - 379 , - 58 , - 657 , - 704 , - 199 , - 614 , - 477 , - 524 , - 19 , - 434 , - 297 , - 344 , - 575 , - 254 , - 117 , - 164 , - 395 , - 74 , - 673 , - 720 , - 215 , - 630 , - 493 , - 540 , - 35 , - 450 , - 313 , - 360 , - 591 , - 270 , - 133 , - 180 , - 411 , - 90 , - 689 , - 0 , - 117 , - 422 , - 163 , - 92 , - 209 , - 514 , - 255 , - 184 , - 301 , - 606 , - 347 , - 276 , - 393 , - 698 , - 439 , - 368 , - 485 , - 38 , - 531 , - 460 , - 577 , - 130 , - 623 , - 552 , - 669 , - 222 , - 715 , - 644 , - 9 , - 314 , - 55 , - 736 , - 101 , - 406 , - 147 , - 76 , - 193 , - 498 , - 239 , - 168 , - 285 , - 590 , - 331 , - 260 , - 377 , - 682 , - 423 , - 352 , - 469 , - 22 , - 515 , - 444 , - 561 , - 114 , - 607 , - 536 , - 653 , - 206 , - 699 , - 628 , - 745 , - 298 , - 39 , - 720 , - 85 , - 390 , - 131 , - 60 , - 177 , - 482 , - 223 , - 152 , - 269 , - 574 , - 315 , - 244 , - 361 , - 666 , - 407 , - 336 , - 453 , - 6 , - 499 , - 428 , - 545 , - 98 , - 591 , - 520 , - 637 , - 190 , - 683 , - 612 , - 729 , - 282 , - 23 , - 704 , - 69 , - 374 , - 115 , - 44 , - 161 , - 466 , - 207 , - 136 , - 253 , - 558 , - 299 , - 228 , - 345 , - 650 , - 391 , - 320 , - 437 , - 742 , - 483 , - 412 , - 529 , - 82 , - 575 , - 504 , - 621 , - 174 , - 667 , - 596 , - 713 , - 266 , - 7 , - 688 , - 53 , - 358 , - 99 , - 28 , - 145 , - 450 , - 191 , - 120 , - 237 , - 542 , - 283 , - 212 , - 329 , - 634 , - 375 , - 304 , - 421 , - 726 , - 467 , - 396 , - 513 , - 66 , - 559 , - 488 , - 605 , - 158 , - 651 , - 580 , - 697 , - 250 , - 743 , - 672 , - 37 , - 342 , - 83 , - 12 , - 129 , - 434 , - 175 , - 104 , - 221 , - 526 , - 267 , - 196 , - 313 , - 618 , - 359 , - 288 , - 405 , - 710 , - 451 , - 380 , - 497 , - 50 , - 543 , - 472 , - 589 , - 142 , - 635 , - 564 , - 681 , - 234 , - 727 , - 656 , - 21 , - 326 , - 67 , - 748 , - 113 , - 418 , - 159 , - 88 , - 205 , - 510 , - 251 , - 180 , - 297 , - 602 , - 343 , - 272 , - 389 , - 694 , - 435 , - 364 , - 481 , - 34 , - 527 , - 456 , - 573 , - 126 , - 619 , - 548 , - 665 , - 218 , - 711 , - 640 , - 5 , - 310 , - 51 , - 732 , - 97 , - 402 , - 143 , - 72 , - 189 , - 494 , - 235 , - 164 , - 281 , - 586 , - 327 , - 256 , - 373 , - 678 , - 419 , - 348 , - 465 , - 18 , - 511 , - 440 , - 557 , - 110 , - 603 , - 532 , - 649 , - 202 , - 695 , - 624 , - 741 , - 294 , - 35 , - 716 , - 81 , - 386 , - 127 , - 56 , - 173 , - 478 , - 219 , - 148 , - 265 , - 570 , - 311 , - 240 , - 357 , - 662 , - 403 , - 332 , - 449 , - 2 , - 495 , - 424 , - 541 , - 94 , - 587 , - 516 , - 633 , - 186 , - 679 , - 608 , - 725 , - 278 , - 19 , - 700 , - 65 , - 370 , - 111 , - 40 , - 157 , - 462 , - 203 , - 132 , - 249 , - 554 , - 295 , - 224 , - 341 , - 646 , - 387 , - 316 , - 433 , - 738 , - 479 , - 408 , - 525 , - 78 , - 571 , - 500 , - 617 , - 170 , - 663 , - 592 , - 709 , - 262 , - 3 , - 684 , - 49 , - 354 , - 95 , - 24 , - 141 , - 446 , - 187 , - 116 , - 233 , - 538 , - 279 , - 208 , - 325 , - 630 , - 371 , - 300 , - 417 , - 722 , - 463 , - 392 , - 509 , - 62 , - 555 , - 484 , - 601 , - 154 , - 647 , - 576 , - 693 , - 246 , - 739 , - 668 , - 33 , - 338 , - 79 , - 8 , - 125 , - 430 , - 171 , - 100 , - 217 , - 522 , - 263 , - 192 , - 309 , - 614 , - 355 , - 284 , - 401 , - 706 , - 447 , - 376 , - 493 , - 46 , - 539 , - 468 , - 585 , - 138 , - 631 , - 560 , - 677 , - 230 , - 723 , - 652 , - 17 , - 322 , - 63 , - 744 , - 109 , - 414 , - 155 , - 84 , - 201 , - 506 , - 247 , - 176 , - 293 , - 598 , - 339 , - 268 , - 385 , - 690 , - 431 , - 360 , - 477 , - 30 , - 523 , - 452 , - 569 , - 122 , - 615 , - 544 , - 661 , - 214 , - 707 , - 636 , - 1 , - 306 , - 47 , - 728 , - 93 , - 398 , - 139 , - 68 , - 185 , - 490 , - 231 , - 160 , - 277 , - 582 , - 323 , - 252 , - 369 , - 674 , - 415 , - 344 , - 461 , - 14 , - 507 , - 436 , - 553 , - 106 , - 599 , - 528 , - 645 , - 198 , - 691 , - 620 , - 737 , - 290 , - 31 , - 712 , - 77 , - 382 , - 123 , - 52 , - 169 , - 474 , - 215 , - 144 , - 261 , - 566 , - 307 , - 236 , - 353 , - 658 , - 399 , - 328 , - 445 , - 750 , - 491 , - 420 , - 537 , - 90 , - 583 , - 512 , - 629 , - 182 , - 675 , - 604 , - 721 , - 274 , - 15 , - 696 , - 61 , - 366 , - 107 , - 36 , - 153 , - 458 , - 199 , - 128 , - 245 , - 550 , - 291 , - 220 , - 337 , - 642 , - 383 , - 312 , - 429 , - 734 , - 475 , - 404 , - 521 , - 74 , - 567 , - 496 , - 613 , - 166 , - 659 , - 588 , - 705 , - 258 , - 751 , - 680 , - 45 , - 350 , - 91 , - 20 , - 137 , - 442 , - 183 , - 112 , - 229 , - 534 , - 275 , - 204 , - 321 , - 626 , - 367 , - 296 , - 413 , - 718 , - 459 , - 388 , - 505 , - 58 , - 551 , - 480 , - 597 , - 150 , - 643 , - 572 , - 689 , - 242 , - 735 , - 664 , - 29 , - 334 , - 75 , - 4 , - 121 , - 426 , - 167 , - 96 , - 213 , - 518 , - 259 , - 188 , - 305 , - 610 , - 351 , - 280 , - 397 , - 702 , - 443 , - 372 , - 489 , - 42 , - 535 , - 464 , - 581 , - 134 , - 627 , - 556 , - 673 , - 226 , - 719 , - 648 , - 13 , - 318 , - 59 , - 740 , - 105 , - 410 , - 151 , - 80 , - 197 , - 502 , - 243 , - 172 , - 289 , - 594 , - 335 , - 264 , - 381 , - 686 , - 427 , - 356 , - 473 , - 26 , - 519 , - 448 , - 565 , - 118 , - 611 , - 540 , - 657 , - 210 , - 703 , - 632 , - 749 , - 302 , - 43 , - 724 , - 89 , - 394 , - 135 , - 64 , - 181 , - 486 , - 227 , - 156 , - 273 , - 578 , - 319 , - 248 , - 365 , - 670 , - 411 , - 340 , - 457 , - 10 , - 503 , - 432 , - 549 , - 102 , - 595 , - 524 , - 641 , - 194 , - 687 , - 616 , - 733 , - 286 , - 27 , - 708 , - 73 , - 378 , - 119 , - 48 , - 165 , - 470 , - 211 , - 140 , - 257 , - 562 , - 303 , - 232 , - 349 , - 654 , - 395 , - 324 , - 441 , - 746 , - 487 , - 416 , - 533 , - 86 , - 579 , - 508 , - 625 , - 178 , - 671 , - 600 , - 717 , - 270 , - 11 , - 692 , - 57 , - 362 , - 103 , - 32 , - 149 , - 454 , - 195 , - 124 , - 241 , - 546 , - 287 , - 216 , - 333 , - 638 , - 379 , - 308 , - 425 , - 730 , - 471 , - 400 , - 517 , - 70 , - 563 , - 492 , - 609 , - 162 , - 655 , - 584 , - 701 , - 254 , - 747 , - 676 , - 41 , - 346 , - 87 , - 16 , - 133 , - 438 , - 179 , - 108 , - 225 , - 530 , - 271 , - 200 , - 317 , - 622 , - 363 , - 292 , - 409 , - 714 , - 455 , - 384 , - 501 , - 54 , - 547 , - 476 , - 593 , - 146 , - 639 , - 568 , - 685 , - 238 , - 731 , - 660 , - 25 , - 330 , - 71 , - 0 , - 265 , - 626 , - 315 , - 100 , - 749 , - 726 , - 31 , - 200 , - 465 , - 58 , - 515 , - 300 , - 181 , - 158 , - 231 , - 400 , - 665 , - 258 , - 715 , - 500 , - 381 , - 358 , - 431 , - 600 , - 97 , - 458 , - 147 , - 700 , - 581 , - 558 , - 631 , - 32 , - 297 , - 658 , - 347 , - 132 , - 13 , - 758 , - 63 , - 232 , - 497 , - 90 , - 547 , - 332 , - 213 , - 190 , - 263 , - 432 , - 697 , - 290 , - 747 , - 532 , - 413 , - 390 , - 463 , - 632 , - 129 , - 490 , - 179 , - 732 , - 613 , - 590 , - 663 , - 64 , - 329 , - 690 , - 379 , - 164 , - 45 , - 22 , - 95 , - 264 , - 529 , - 122 , - 579 , - 364 , - 245 , - 222 , - 295 , - 464 , - 729 , - 322 , - 11 , - 564 , - 445 , - 422 , - 495 , - 664 , - 161 , - 522 , - 211 , - 764 , - 645 , - 622 , - 695 , - 96 , - 361 , - 722 , - 411 , - 196 , - 77 , - 54 , - 127 , - 296 , - 561 , - 154 , - 611 , - 396 , - 277 , - 254 , - 327 , - 496 , - 761 , - 354 , - 43 , - 596 , - 477 , - 454 , - 527 , - 696 , - 193 , - 554 , - 243 , - 28 , - 677 , - 654 , - 727 , - 128 , - 393 , - 754 , - 443 , - 228 , - 109 , - 86 , - 159 , - 328 , - 593 , - 186 , - 643 , - 428 , - 309 , - 286 , - 359 , - 528 , - 25 , - 386 , - 75 , - 628 , - 509 , - 486 , - 559 , - 728 , - 225 , - 586 , - 275 , - 60 , - 709 , - 686 , - 759 , - 160 , - 425 , - 18 , - 475 , - 260 , - 141 , - 118 , - 191 , - 360 , - 625 , - 218 , - 675 , - 460 , - 341 , - 318 , - 391 , - 560 , - 57 , - 418 , - 107 , - 660 , - 541 , - 518 , - 591 , - 760 , - 257 , - 618 , - 307 , - 92 , - 741 , - 718 , - 23 , - 192 , - 457 , - 50 , - 507 , - 292 , - 173 , - 150 , - 223 , - 392 , - 657 , - 250 , - 707 , - 492 , - 373 , - 350 , - 423 , - 592 , - 89 , - 450 , - 139 , - 692 , - 573 , - 550 , - 623 , - 24 , - 289 , - 650 , - 339 , - 124 , - 5 , - 750 , - 55 , - 224 , - 489 , - 82 , - 539 , - 324 , - 205 , - 182 , - 255 , - 424 , - 689 , - 282 , - 739 , - 524 , - 405 , - 382 , - 455 , - 624 , - 121 , - 482 , - 171 , - 724 , - 605 , - 582 , - 655 , - 56 , - 321 , - 682 , - 371 , - 156 , - 37 , - 14 , - 87 , - 256 , - 521 , - 114 , - 571 , - 356 , - 237 , - 214 , - 287 , - 456 , - 721 , - 314 , - 3 , - 556 , - 437 , - 414 , - 487 , - 656 , - 153 , - 514 , - 203 , - 756 , - 637 , - 614 , - 687 , - 88 , - 353 , - 714 , - 403 , - 188 , - 69 , - 46 , - 119 , - 288 , - 553 , - 146 , - 603 , - 388 , - 269 , - 246 , - 319 , - 488 , - 753 , - 346 , - 35 , - 588 , - 469 , - 446 , - 519 , - 688 , - 185 , - 546 , - 235 , - 20 , - 669 , - 646 , - 719 , - 120 , - 385 , - 746 , - 435 , - 220 , - 101 , - 78 , - 151 , - 320 , - 585 , - 178 , - 635 , - 420 , - 301 , - 278 , - 351 , - 520 , - 17 , - 378 , - 67 , - 620 , - 501 , - 478 , - 551 , - 720 , - 217 , - 578 , - 267 , - 52 , - 701 , - 678 , - 751 , - 152 , - 417 , - 10 , - 467 , - 252 , - 133 , - 110 , - 183 , - 352 , - 617 , - 210 , - 667 , - 452 , - 333 , - 310 , - 383 , - 552 , - 49 , - 410 , - 99 , - 652 , - 533 , - 510 , - 583 , - 752 , - 249 , - 610 , - 299 , - 84 , - 733 , - 710 , - 15 , - 184 , - 449 , - 42 , - 499 , - 284 , - 165 , - 142 , - 215 , - 384 , - 649 , - 242 , - 699 , - 484 , - 365 , - 342 , - 415 , - 584 , - 81 , - 442 , - 131 , - 684 , - 565 , - 542 , - 615 , - 16 , - 281 , - 642 , - 331 , - 116 , - 765 , - 742 , - 47 , - 216 , - 481 , - 74 , - 531 , - 316 , - 197 , - 174 , - 247 , - 416 , - 681 , - 274 , - 731 , - 516 , - 397 , - 374 , - 447 , - 616 , - 113 , - 474 , - 163 , - 716 , - 597 , - 574 , - 647 , - 48 , - 313 , - 674 , - 363 , - 148 , - 29 , - 6 , - 79 , - 248 , - 513 , - 106 , - 563 , - 348 , - 229 , - 206 , - 279 , - 448 , - 713 , - 306 , - 763 , - 548 , - 429 , - 406 , - 479 , - 648 , - 145 , - 506 , - 195 , - 748 , - 629 , - 606 , - 679 , - 80 , - 345 , - 706 , - 395 , - 180 , - 61 , - 38 , - 111 , - 280 , - 545 , - 138 , - 595 , - 380 , - 261 , - 238 , - 311 , - 480 , - 745 , - 338 , - 27 , - 580 , - 461 , - 438 , - 511 , - 680 , - 177 , - 538 , - 227 , - 12 , - 661 , - 638 , - 711 , - 112 , - 377 , - 738 , - 427 , - 212 , - 93 , - 70 , - 143 , - 312 , - 577 , - 170 , - 627 , - 412 , - 293 , - 270 , - 343 , - 512 , - 9 , - 370 , - 59 , - 612 , - 493 , - 470 , - 543 , - 712 , - 209 , - 570 , - 259 , - 44 , - 693 , - 670 , - 743 , - 144 , - 409 , - 2 , - 459 , - 244 , - 125 , - 102 , - 175 , - 344 , - 609 , - 202 , - 659 , - 444 , - 325 , - 302 , - 375 , - 544 , - 41 , - 402 , - 91 , - 644 , - 525 , - 502 , - 575 , - 744 , - 241 , - 602 , - 291 , - 76 , - 725 , - 702 , - 7 , - 176 , - 441 , - 34 , - 491 , - 276 , - 157 , - 134 , - 207 , - 376 , - 641 , - 234 , - 691 , - 476 , - 357 , - 334 , - 407 , - 576 , - 73 , - 434 , - 123 , - 676 , - 557 , - 534 , - 607 , - 8 , - 273 , - 634 , - 323 , - 108 , - 757 , - 734 , - 39 , - 208 , - 473 , - 66 , - 523 , - 308 , - 189 , - 166 , - 239 , - 408 , - 673 , - 266 , - 723 , - 508 , - 389 , - 366 , - 439 , - 608 , - 105 , - 466 , - 155 , - 708 , - 589 , - 566 , - 639 , - 40 , - 305 , - 666 , - 355 , - 140 , - 21 , - 766 , - 71 , - 240 , - 505 , - 98 , - 555 , - 340 , - 221 , - 198 , - 271 , - 440 , - 705 , - 298 , - 755 , - 540 , - 421 , - 398 , - 471 , - 640 , - 137 , - 498 , - 187 , - 740 , - 621 , - 598 , - 671 , - 72 , - 337 , - 698 , - 387 , - 172 , - 53 , - 30 , - 103 , - 272 , - 537 , - 130 , - 587 , - 372 , - 253 , - 230 , - 303 , - 472 , - 737 , - 330 , - 19 , - 572 , - 453 , - 430 , - 503 , - 672 , - 169 , - 530 , - 219 , - 4 , - 653 , - 630 , - 703 , - 104 , - 369 , - 730 , - 419 , - 204 , - 85 , - 62 , - 135 , - 304 , - 569 , - 162 , - 619 , - 404 , - 285 , - 262 , - 335 , - 504 , - 1 , - 362 , - 51 , - 604 , - 485 , - 462 , - 535 , - 704 , - 201 , - 562 , - 251 , - 36 , - 685 , - 662 , - 735 , - 136 , - 401 , - 762 , - 451 , - 236 , - 117 , - 94 , - 167 , - 336 , - 601 , - 194 , - 651 , - 436 , - 317 , - 294 , - 367 , - 536 , - 33 , - 394 , - 83 , - 636 , - 517 , - 494 , - 567 , - 736 , - 233 , - 594 , - 283 , - 68 , - 717 , - 694 , - 767 , - 168 , - 433 , - 26 , - 483 , - 268 , - 149 , - 126 , - 199 , - 368 , - 633 , - 226 , - 683 , - 468 , - 349 , - 326 , - 399 , - 568 , - 65 , - 426 , - 115 , - 668 , - 549 , - 526 , - 599 , - 0 , - 123 , - 442 , - 173 , - 100 , - 223 , - 542 , - 273 , - 200 , - 323 , - 642 , - 373 , - 300 , - 423 , - 742 , - 473 , - 400 , - 523 , - 58 , - 573 , - 500 , - 623 , - 158 , - 673 , - 600 , - 723 , - 258 , - 773 , - 700 , - 39 , - 358 , - 89 , - 16 , - 139 , - 458 , - 189 , - 116 , - 239 , - 558 , - 289 , - 216 , - 339 , - 658 , - 389 , - 316 , - 439 , - 758 , - 489 , - 416 , - 539 , - 74 , - 589 , - 516 , - 639 , - 174 , - 689 , - 616 , - 739 , - 274 , - 5 , - 716 , - 55 , - 374 , - 105 , - 32 , - 155 , - 474 , - 205 , - 132 , - 255 , - 574 , - 305 , - 232 , - 355 , - 674 , - 405 , - 332 , - 455 , - 774 , - 505 , - 432 , - 555 , - 90 , - 605 , - 532 , - 655 , - 190 , - 705 , - 632 , - 755 , - 290 , - 21 , - 732 , - 71 , - 390 , - 121 , - 48 , - 171 , - 490 , - 221 , - 148 , - 271 , - 590 , - 321 , - 248 , - 371 , - 690 , - 421 , - 348 , - 471 , - 6 , - 521 , - 448 , - 571 , - 106 , - 621 , - 548 , - 671 , - 206 , - 721 , - 648 , - 771 , - 306 , - 37 , - 748 , - 87 , - 406 , - 137 , - 64 , - 187 , - 506 , - 237 , - 164 , - 287 , - 606 , - 337 , - 264 , - 387 , - 706 , - 437 , - 364 , - 487 , - 22 , - 537 , - 464 , - 587 , - 122 , - 637 , - 564 , - 687 , - 222 , - 737 , - 664 , - 3 , - 322 , - 53 , - 764 , - 103 , - 422 , - 153 , - 80 , - 203 , - 522 , - 253 , - 180 , - 303 , - 622 , - 353 , - 280 , - 403 , - 722 , - 453 , - 380 , - 503 , - 38 , - 553 , - 480 , - 603 , - 138 , - 653 , - 580 , - 703 , - 238 , - 753 , - 680 , - 19 , - 338 , - 69 , - 780 , - 119 , - 438 , - 169 , - 96 , - 219 , - 538 , - 269 , - 196 , - 319 , - 638 , - 369 , - 296 , - 419 , - 738 , - 469 , - 396 , - 519 , - 54 , - 569 , - 496 , - 619 , - 154 , - 669 , - 596 , - 719 , - 254 , - 769 , - 696 , - 35 , - 354 , - 85 , - 12 , - 135 , - 454 , - 185 , - 112 , - 235 , - 554 , - 285 , - 212 , - 335 , - 654 , - 385 , - 312 , - 435 , - 754 , - 485 , - 412 , - 535 , - 70 , - 585 , - 512 , - 635 , - 170 , - 685 , - 612 , - 735 , - 270 , - 1 , - 712 , - 51 , - 370 , - 101 , - 28 , - 151 , - 470 , - 201 , - 128 , - 251 , - 570 , - 301 , - 228 , - 351 , - 670 , - 401 , - 328 , - 451 , - 770 , - 501 , - 428 , - 551 , - 86 , - 601 , - 528 , - 651 , - 186 , - 701 , - 628 , - 751 , - 286 , - 17 , - 728 , - 67 , - 386 , - 117 , - 44 , - 167 , - 486 , - 217 , - 144 , - 267 , - 586 , - 317 , - 244 , - 367 , - 686 , - 417 , - 344 , - 467 , - 2 , - 517 , - 444 , - 567 , - 102 , - 617 , - 544 , - 667 , - 202 , - 717 , - 644 , - 767 , - 302 , - 33 , - 744 , - 83 , - 402 , - 133 , - 60 , - 183 , - 502 , - 233 , - 160 , - 283 , - 602 , - 333 , - 260 , - 383 , - 702 , - 433 , - 360 , - 483 , - 18 , - 533 , - 460 , - 583 , - 118 , - 633 , - 560 , - 683 , - 218 , - 733 , - 660 , - 783 , - 318 , - 49 , - 760 , - 99 , - 418 , - 149 , - 76 , - 199 , - 518 , - 249 , - 176 , - 299 , - 618 , - 349 , - 276 , - 399 , - 718 , - 449 , - 376 , - 499 , - 34 , - 549 , - 476 , - 599 , - 134 , - 649 , - 576 , - 699 , - 234 , - 749 , - 676 , - 15 , - 334 , - 65 , - 776 , - 115 , - 434 , - 165 , - 92 , - 215 , - 534 , - 265 , - 192 , - 315 , - 634 , - 365 , - 292 , - 415 , - 734 , - 465 , - 392 , - 515 , - 50 , - 565 , - 492 , - 615 , - 150 , - 665 , - 592 , - 715 , - 250 , - 765 , - 692 , - 31 , - 350 , - 81 , - 8 , - 131 , - 450 , - 181 , - 108 , - 231 , - 550 , - 281 , - 208 , - 331 , - 650 , - 381 , - 308 , - 431 , - 750 , - 481 , - 408 , - 531 , - 66 , - 581 , - 508 , - 631 , - 166 , - 681 , - 608 , - 731 , - 266 , - 781 , - 708 , - 47 , - 366 , - 97 , - 24 , - 147 , - 466 , - 197 , - 124 , - 247 , - 566 , - 297 , - 224 , - 347 , - 666 , - 397 , - 324 , - 447 , - 766 , - 497 , - 424 , - 547 , - 82 , - 597 , - 524 , - 647 , - 182 , - 697 , - 624 , - 747 , - 282 , - 13 , - 724 , - 63 , - 382 , - 113 , - 40 , - 163 , - 482 , - 213 , - 140 , - 263 , - 582 , - 313 , - 240 , - 363 , - 682 , - 413 , - 340 , - 463 , - 782 , - 513 , - 440 , - 563 , - 98 , - 613 , - 540 , - 663 , - 198 , - 713 , - 640 , - 763 , - 298 , - 29 , - 740 , - 79 , - 398 , - 129 , - 56 , - 179 , - 498 , - 229 , - 156 , - 279 , - 598 , - 329 , - 256 , - 379 , - 698 , - 429 , - 356 , - 479 , - 14 , - 529 , - 456 , - 579 , - 114 , - 629 , - 556 , - 679 , - 214 , - 729 , - 656 , - 779 , - 314 , - 45 , - 756 , - 95 , - 414 , - 145 , - 72 , - 195 , - 514 , - 245 , - 172 , - 295 , - 614 , - 345 , - 272 , - 395 , - 714 , - 445 , - 372 , - 495 , - 30 , - 545 , - 472 , - 595 , - 130 , - 645 , - 572 , - 695 , - 230 , - 745 , - 672 , - 11 , - 330 , - 61 , - 772 , - 111 , - 430 , - 161 , - 88 , - 211 , - 530 , - 261 , - 188 , - 311 , - 630 , - 361 , - 288 , - 411 , - 730 , - 461 , - 388 , - 511 , - 46 , - 561 , - 488 , - 611 , - 146 , - 661 , - 588 , - 711 , - 246 , - 761 , - 688 , - 27 , - 346 , - 77 , - 4 , - 127 , - 446 , - 177 , - 104 , - 227 , - 546 , - 277 , - 204 , - 327 , - 646 , - 377 , - 304 , - 427 , - 746 , - 477 , - 404 , - 527 , - 62 , - 577 , - 504 , - 627 , - 162 , - 677 , - 604 , - 727 , - 262 , - 777 , - 704 , - 43 , - 362 , - 93 , - 20 , - 143 , - 462 , - 193 , - 120 , - 243 , - 562 , - 293 , - 220 , - 343 , - 662 , - 393 , - 320 , - 443 , - 762 , - 493 , - 420 , - 543 , - 78 , - 593 , - 520 , - 643 , - 178 , - 693 , - 620 , - 743 , - 278 , - 9 , - 720 , - 59 , - 378 , - 109 , - 36 , - 159 , - 478 , - 209 , - 136 , - 259 , - 578 , - 309 , - 236 , - 359 , - 678 , - 409 , - 336 , - 459 , - 778 , - 509 , - 436 , - 559 , - 94 , - 609 , - 536 , - 659 , - 194 , - 709 , - 636 , - 759 , - 294 , - 25 , - 736 , - 75 , - 394 , - 125 , - 52 , - 175 , - 494 , - 225 , - 152 , - 275 , - 594 , - 325 , - 252 , - 375 , - 694 , - 425 , - 352 , - 475 , - 10 , - 525 , - 452 , - 575 , - 110 , - 625 , - 552 , - 675 , - 210 , - 725 , - 652 , - 775 , - 310 , - 41 , - 752 , - 91 , - 410 , - 141 , - 68 , - 191 , - 510 , - 241 , - 168 , - 291 , - 610 , - 341 , - 268 , - 391 , - 710 , - 441 , - 368 , - 491 , - 26 , - 541 , - 468 , - 591 , - 126 , - 641 , - 568 , - 691 , - 226 , - 741 , - 668 , - 7 , - 326 , - 57 , - 768 , - 107 , - 426 , - 157 , - 84 , - 207 , - 526 , - 257 , - 184 , - 307 , - 626 , - 357 , - 284 , - 407 , - 726 , - 457 , - 384 , - 507 , - 42 , - 557 , - 484 , - 607 , - 142 , - 657 , - 584 , - 707 , - 242 , - 757 , - 684 , - 23 , - 342 , - 73 , - 0 , - 97 , - 354 , - 771 , - 548 , - 485 , - 582 , - 39 , - 456 , - 233 , - 170 , - 267 , - 524 , - 141 , - 718 , - 655 , - 752 , - 209 , - 626 , - 403 , - 340 , - 437 , - 694 , - 311 , - 88 , - 25 , - 122 , - 379 , - 796 , - 573 , - 510 , - 607 , - 64 , - 481 , - 258 , - 195 , - 292 , - 549 , - 166 , - 743 , - 680 , - 777 , - 234 , - 651 , - 428 , - 365 , - 462 , - 719 , - 336 , - 113 , - 50 , - 147 , - 404 , - 21 , - 598 , - 535 , - 632 , - 89 , - 506 , - 283 , - 220 , - 317 , - 574 , - 191 , - 768 , - 705 , - 2 , - 259 , - 676 , - 453 , - 390 , - 487 , - 744 , - 361 , - 138 , - 75 , - 172 , - 429 , - 46 , - 623 , - 560 , - 657 , - 114 , - 531 , - 308 , - 245 , - 342 , - 599 , - 216 , - 793 , - 730 , - 27 , - 284 , - 701 , - 478 , - 415 , - 512 , - 769 , - 386 , - 163 , - 100 , - 197 , - 454 , - 71 , - 648 , - 585 , - 682 , - 139 , - 556 , - 333 , - 270 , - 367 , - 624 , - 241 , - 18 , - 755 , - 52 , - 309 , - 726 , - 503 , - 440 , - 537 , - 794 , - 411 , - 188 , - 125 , - 222 , - 479 , - 96 , - 673 , - 610 , - 707 , - 164 , - 581 , - 358 , - 295 , - 392 , - 649 , - 266 , - 43 , - 780 , - 77 , - 334 , - 751 , - 528 , - 465 , - 562 , - 19 , - 436 , - 213 , - 150 , - 247 , - 504 , - 121 , - 698 , - 635 , - 732 , - 189 , - 606 , - 383 , - 320 , - 417 , - 674 , - 291 , - 68 , - 5 , - 102 , - 359 , - 776 , - 553 , - 490 , - 587 , - 44 , - 461 , - 238 , - 175 , - 272 , - 529 , - 146 , - 723 , - 660 , - 757 , - 214 , - 631 , - 408 , - 345 , - 442 , - 699 , - 316 , - 93 , - 30 , - 127 , - 384 , - 1 , - 578 , - 515 , - 612 , - 69 , - 486 , - 263 , - 200 , - 297 , - 554 , - 171 , - 748 , - 685 , - 782 , - 239 , - 656 , - 433 , - 370 , - 467 , - 724 , - 341 , - 118 , - 55 , - 152 , - 409 , - 26 , - 603 , - 540 , - 637 , - 94 , - 511 , - 288 , - 225 , - 322 , - 579 , - 196 , - 773 , - 710 , - 7 , - 264 , - 681 , - 458 , - 395 , - 492 , - 749 , - 366 , - 143 , - 80 , - 177 , - 434 , - 51 , - 628 , - 565 , - 662 , - 119 , - 536 , - 313 , - 250 , - 347 , - 604 , - 221 , - 798 , - 735 , - 32 , - 289 , - 706 , - 483 , - 420 , - 517 , - 774 , - 391 , - 168 , - 105 , - 202 , - 459 , - 76 , - 653 , - 590 , - 687 , - 144 , - 561 , - 338 , - 275 , - 372 , - 629 , - 246 , - 23 , - 760 , - 57 , - 314 , - 731 , - 508 , - 445 , - 542 , - 799 , - 416 , - 193 , - 130 , - 227 , - 484 , - 101 , - 678 , - 615 , - 712 , - 169 , - 586 , - 363 , - 300 , - 397 , - 654 , - 271 , - 48 , - 785 , - 82 , - 339 , - 756 , - 533 , - 470 , - 567 , - 24 , - 441 , - 218 , - 155 , - 252 , - 509 , - 126 , - 703 , - 640 , - 737 , - 194 , - 611 , - 388 , - 325 , - 422 , - 679 , - 296 , - 73 , - 10 , - 107 , - 364 , - 781 , - 558 , - 495 , - 592 , - 49 , - 466 , - 243 , - 180 , - 277 , - 534 , - 151 , - 728 , - 665 , - 762 , - 219 , - 636 , - 413 , - 350 , - 447 , - 704 , - 321 , - 98 , - 35 , - 132 , - 389 , - 6 , - 583 , - 520 , - 617 , - 74 , - 491 , - 268 , - 205 , - 302 , - 559 , - 176 , - 753 , - 690 , - 787 , - 244 , - 661 , - 438 , - 375 , - 472 , - 729 , - 346 , - 123 , - 60 , - 157 , - 414 , - 31 , - 608 , - 545 , - 642 , - 99 , - 516 , - 293 , - 230 , - 327 , - 584 , - 201 , - 778 , - 715 , - 12 , - 269 , - 686 , - 463 , - 400 , - 497 , - 754 , - 371 , - 148 , - 85 , - 182 , - 439 , - 56 , - 633 , - 570 , - 667 , - 124 , - 541 , - 318 , - 255 , - 352 , - 609 , - 226 , - 3 , - 740 , - 37 , - 294 , - 711 , - 488 , - 425 , - 522 , - 779 , - 396 , - 173 , - 110 , - 207 , - 464 , - 81 , - 658 , - 595 , - 692 , - 149 , - 566 , - 343 , - 280 , - 377 , - 634 , - 251 , - 28 , - 765 , - 62 , - 319 , - 736 , - 513 , - 450 , - 547 , - 4 , - 421 , - 198 , - 135 , - 232 , - 489 , - 106 , - 683 , - 620 , - 717 , - 174 , - 591 , - 368 , - 305 , - 402 , - 659 , - 276 , - 53 , - 790 , - 87 , - 344 , - 761 , - 538 , - 475 , - 572 , - 29 , - 446 , - 223 , - 160 , - 257 , - 514 , - 131 , - 708 , - 645 , - 742 , - 199 , - 616 , - 393 , - 330 , - 427 , - 684 , - 301 , - 78 , - 15 , - 112 , - 369 , - 786 , - 563 , - 500 , - 597 , - 54 , - 471 , - 248 , - 185 , - 282 , - 539 , - 156 , - 733 , - 670 , - 767 , - 224 , - 641 , - 418 , - 355 , - 452 , - 709 , - 326 , - 103 , - 40 , - 137 , - 394 , - 11 , - 588 , - 525 , - 622 , - 79 , - 496 , - 273 , - 210 , - 307 , - 564 , - 181 , - 758 , - 695 , - 792 , - 249 , - 666 , - 443 , - 380 , - 477 , - 734 , - 351 , - 128 , - 65 , - 162 , - 419 , - 36 , - 613 , - 550 , - 647 , - 104 , - 521 , - 298 , - 235 , - 332 , - 589 , - 206 , - 783 , - 720 , - 17 , - 274 , - 691 , - 468 , - 405 , - 502 , - 759 , - 376 , - 153 , - 90 , - 187 , - 444 , - 61 , - 638 , - 575 , - 672 , - 129 , - 546 , - 323 , - 260 , - 357 , - 614 , - 231 , - 8 , - 745 , - 42 , - 299 , - 716 , - 493 , - 430 , - 527 , - 784 , - 401 , - 178 , - 115 , - 212 , - 469 , - 86 , - 663 , - 600 , - 697 , - 154 , - 571 , - 348 , - 285 , - 382 , - 639 , - 256 , - 33 , - 770 , - 67 , - 324 , - 741 , - 518 , - 455 , - 552 , - 9 , - 426 , - 203 , - 140 , - 237 , - 494 , - 111 , - 688 , - 625 , - 722 , - 179 , - 596 , - 373 , - 310 , - 407 , - 664 , - 281 , - 58 , - 795 , - 92 , - 349 , - 766 , - 543 , - 480 , - 577 , - 34 , - 451 , - 228 , - 165 , - 262 , - 519 , - 136 , - 713 , - 650 , - 747 , - 204 , - 621 , - 398 , - 335 , - 432 , - 689 , - 306 , - 83 , - 20 , - 117 , - 374 , - 791 , - 568 , - 505 , - 602 , - 59 , - 476 , - 253 , - 190 , - 287 , - 544 , - 161 , - 738 , - 675 , - 772 , - 229 , - 646 , - 423 , - 360 , - 457 , - 714 , - 331 , - 108 , - 45 , - 142 , - 399 , - 16 , - 593 , - 530 , - 627 , - 84 , - 501 , - 278 , - 215 , - 312 , - 569 , - 186 , - 763 , - 700 , - 797 , - 254 , - 671 , - 448 , - 385 , - 482 , - 739 , - 356 , - 133 , - 70 , - 167 , - 424 , - 41 , - 618 , - 555 , - 652 , - 109 , - 526 , - 303 , - 240 , - 337 , - 594 , - 211 , - 788 , - 725 , - 22 , - 279 , - 696 , - 473 , - 410 , - 507 , - 764 , - 381 , - 158 , - 95 , - 192 , - 449 , - 66 , - 643 , - 580 , - 677 , - 134 , - 551 , - 328 , - 265 , - 362 , - 619 , - 236 , - 13 , - 750 , - 47 , - 304 , - 721 , - 498 , - 435 , - 532 , - 789 , - 406 , - 183 , - 120 , - 217 , - 474 , - 91 , - 668 , - 605 , - 702 , - 159 , - 576 , - 353 , - 290 , - 387 , - 644 , - 261 , - 38 , - 775 , - 72 , - 329 , - 746 , - 523 , - 460 , - 557 , - 14 , - 431 , - 208 , - 145 , - 242 , - 499 , - 116 , - 693 , - 630 , - 727 , - 184 , - 601 , - 378 , - 315 , - 412 , - 669 , - 286 , - 63 , - 0 , - 229 , - 662 , - 483 , - 508 , - 737 , - 354 , - 175 , - 200 , - 429 , - 46 , - 683 , - 708 , - 121 , - 554 , - 375 , - 400 , - 629 , - 246 , - 67 , - 92 , - 321 , - 754 , - 575 , - 600 , - 13 , - 446 , - 267 , - 292 , - 521 , - 138 , - 775 , - 800 , - 213 , - 646 , - 467 , - 492 , - 721 , - 338 , - 159 , - 184 , - 413 , - 30 , - 667 , - 692 , - 105 , - 538 , - 359 , - 384 , - 613 , - 230 , - 51 , - 76 , - 305 , - 738 , - 559 , - 584 , - 813 , - 430 , - 251 , - 276 , - 505 , - 122 , - 759 , - 784 , - 197 , - 630 , - 451 , - 476 , - 705 , - 322 , - 143 , - 168 , - 397 , - 14 , - 651 , - 676 , - 89 , - 522 , - 343 , - 368 , - 597 , - 214 , - 35 , - 60 , - 289 , - 722 , - 543 , - 568 , - 797 , - 414 , - 235 , - 260 , - 489 , - 106 , - 743 , - 768 , - 181 , - 614 , - 435 , - 460 , - 689 , - 306 , - 127 , - 152 , - 381 , - 814 , - 635 , - 660 , - 73 , - 506 , - 327 , - 352 , - 581 , - 198 , - 19 , - 44 , - 273 , - 706 , - 527 , - 552 , - 781 , - 398 , - 219 , - 244 , - 473 , - 90 , - 727 , - 752 , - 165 , - 598 , - 419 , - 444 , - 673 , - 290 , - 111 , - 136 , - 365 , - 798 , - 619 , - 644 , - 57 , - 490 , - 311 , - 336 , - 565 , - 182 , - 3 , - 28 , - 257 , - 690 , - 511 , - 536 , - 765 , - 382 , - 203 , - 228 , - 457 , - 74 , - 711 , - 736 , - 149 , - 582 , - 403 , - 428 , - 657 , - 274 , - 95 , - 120 , - 349 , - 782 , - 603 , - 628 , - 41 , - 474 , - 295 , - 320 , - 549 , - 166 , - 803 , - 12 , - 241 , - 674 , - 495 , - 520 , - 749 , - 366 , - 187 , - 212 , - 441 , - 58 , - 695 , - 720 , - 133 , - 566 , - 387 , - 412 , - 641 , - 258 , - 79 , - 104 , - 333 , - 766 , - 587 , - 612 , - 25 , - 458 , - 279 , - 304 , - 533 , - 150 , - 787 , - 812 , - 225 , - 658 , - 479 , - 504 , - 733 , - 350 , - 171 , - 196 , - 425 , - 42 , - 679 , - 704 , - 117 , - 550 , - 371 , - 396 , - 625 , - 242 , - 63 , - 88 , - 317 , - 750 , - 571 , - 596 , - 9 , - 442 , - 263 , - 288 , - 517 , - 134 , - 771 , - 796 , - 209 , - 642 , - 463 , - 488 , - 717 , - 334 , - 155 , - 180 , - 409 , - 26 , - 663 , - 688 , - 101 , - 534 , - 355 , - 380 , - 609 , - 226 , - 47 , - 72 , - 301 , - 734 , - 555 , - 580 , - 809 , - 426 , - 247 , - 272 , - 501 , - 118 , - 755 , - 780 , - 193 , - 626 , - 447 , - 472 , - 701 , - 318 , - 139 , - 164 , - 393 , - 10 , - 647 , - 672 , - 85 , - 518 , - 339 , - 364 , - 593 , - 210 , - 31 , - 56 , - 285 , - 718 , - 539 , - 564 , - 793 , - 410 , - 231 , - 256 , - 485 , - 102 , - 739 , - 764 , - 177 , - 610 , - 431 , - 456 , - 685 , - 302 , - 123 , - 148 , - 377 , - 810 , - 631 , - 656 , - 69 , - 502 , - 323 , - 348 , - 577 , - 194 , - 15 , - 40 , - 269 , - 702 , - 523 , - 548 , - 777 , - 394 , - 215 , - 240 , - 469 , - 86 , - 723 , - 748 , - 161 , - 594 , - 415 , - 440 , - 669 , - 286 , - 107 , - 132 , - 361 , - 794 , - 615 , - 640 , - 53 , - 486 , - 307 , - 332 , - 561 , - 178 , - 815 , - 24 , - 253 , - 686 , - 507 , - 532 , - 761 , - 378 , - 199 , - 224 , - 453 , - 70 , - 707 , - 732 , - 145 , - 578 , - 399 , - 424 , - 653 , - 270 , - 91 , - 116 , - 345 , - 778 , - 599 , - 624 , - 37 , - 470 , - 291 , - 316 , - 545 , - 162 , - 799 , - 8 , - 237 , - 670 , - 491 , - 516 , - 745 , - 362 , - 183 , - 208 , - 437 , - 54 , - 691 , - 716 , - 129 , - 562 , - 383 , - 408 , - 637 , - 254 , - 75 , - 100 , - 329 , - 762 , - 583 , - 608 , - 21 , - 454 , - 275 , - 300 , - 529 , - 146 , - 783 , - 808 , - 221 , - 654 , - 475 , - 500 , - 729 , - 346 , - 167 , - 192 , - 421 , - 38 , - 675 , - 700 , - 113 , - 546 , - 367 , - 392 , - 621 , - 238 , - 59 , - 84 , - 313 , - 746 , - 567 , - 592 , - 5 , - 438 , - 259 , - 284 , - 513 , - 130 , - 767 , - 792 , - 205 , - 638 , - 459 , - 484 , - 713 , - 330 , - 151 , - 176 , - 405 , - 22 , - 659 , - 684 , - 97 , - 530 , - 351 , - 376 , - 605 , - 222 , - 43 , - 68 , - 297 , - 730 , - 551 , - 576 , - 805 , - 422 , - 243 , - 268 , - 497 , - 114 , - 751 , - 776 , - 189 , - 622 , - 443 , - 468 , - 697 , - 314 , - 135 , - 160 , - 389 , - 6 , - 643 , - 668 , - 81 , - 514 , - 335 , - 360 , - 589 , - 206 , - 27 , - 52 , - 281 , - 714 , - 535 , - 560 , - 789 , - 406 , - 227 , - 252 , - 481 , - 98 , - 735 , - 760 , - 173 , - 606 , - 427 , - 452 , - 681 , - 298 , - 119 , - 144 , - 373 , - 806 , - 627 , - 652 , - 65 , - 498 , - 319 , - 344 , - 573 , - 190 , - 11 , - 36 , - 265 , - 698 , - 519 , - 544 , - 773 , - 390 , - 211 , - 236 , - 465 , - 82 , - 719 , - 744 , - 157 , - 590 , - 411 , - 436 , - 665 , - 282 , - 103 , - 128 , - 357 , - 790 , - 611 , - 636 , - 49 , - 482 , - 303 , - 328 , - 557 , - 174 , - 811 , - 20 , - 249 , - 682 , - 503 , - 528 , - 757 , - 374 , - 195 , - 220 , - 449 , - 66 , - 703 , - 728 , - 141 , - 574 , - 395 , - 420 , - 649 , - 266 , - 87 , - 112 , - 341 , - 774 , - 595 , - 620 , - 33 , - 466 , - 287 , - 312 , - 541 , - 158 , - 795 , - 4 , - 233 , - 666 , - 487 , - 512 , - 741 , - 358 , - 179 , - 204 , - 433 , - 50 , - 687 , - 712 , - 125 , - 558 , - 379 , - 404 , - 633 , - 250 , - 71 , - 96 , - 325 , - 758 , - 579 , - 604 , - 17 , - 450 , - 271 , - 296 , - 525 , - 142 , - 779 , - 804 , - 217 , - 650 , - 471 , - 496 , - 725 , - 342 , - 163 , - 188 , - 417 , - 34 , - 671 , - 696 , - 109 , - 542 , - 363 , - 388 , - 617 , - 234 , - 55 , - 80 , - 309 , - 742 , - 563 , - 588 , - 1 , - 434 , - 255 , - 280 , - 509 , - 126 , - 763 , - 788 , - 201 , - 634 , - 455 , - 480 , - 709 , - 326 , - 147 , - 172 , - 401 , - 18 , - 655 , - 680 , - 93 , - 526 , - 347 , - 372 , - 601 , - 218 , - 39 , - 64 , - 293 , - 726 , - 547 , - 572 , - 801 , - 418 , - 239 , - 264 , - 493 , - 110 , - 747 , - 772 , - 185 , - 618 , - 439 , - 464 , - 693 , - 310 , - 131 , - 156 , - 385 , - 2 , - 639 , - 664 , - 77 , - 510 , - 331 , - 356 , - 585 , - 202 , - 23 , - 48 , - 277 , - 710 , - 531 , - 556 , - 785 , - 402 , - 223 , - 248 , - 477 , - 94 , - 731 , - 756 , - 169 , - 602 , - 423 , - 448 , - 677 , - 294 , - 115 , - 140 , - 369 , - 802 , - 623 , - 648 , - 61 , - 494 , - 315 , - 340 , - 569 , - 186 , - 7 , - 32 , - 261 , - 694 , - 515 , - 540 , - 769 , - 386 , - 207 , - 232 , - 461 , - 78 , - 715 , - 740 , - 153 , - 586 , - 407 , - 432 , - 661 , - 278 , - 99 , - 124 , - 353 , - 786 , - 607 , - 632 , - 45 , - 478 , - 299 , - 324 , - 553 , - 170 , - 807 , - 16 , - 245 , - 678 , - 499 , - 524 , - 753 , - 370 , - 191 , - 216 , - 445 , - 62 , - 699 , - 724 , - 137 , - 570 , - 391 , - 416 , - 645 , - 262 , - 83 , - 108 , - 337 , - 770 , - 591 , - 616 , - 29 , - 462 , - 283 , - 308 , - 537 , - 154 , - 791 , - 0 , - 77 , - 258 , - 543 , - 100 , - 593 , - 358 , - 227 , - 200 , - 277 , - 458 , - 743 , - 300 , - 793 , - 558 , - 427 , - 400 , - 477 , - 658 , - 111 , - 500 , - 161 , - 758 , - 627 , - 600 , - 677 , - 26 , - 311 , - 700 , - 361 , - 126 , - 827 , - 800 , - 45 , - 226 , - 511 , - 68 , - 561 , - 326 , - 195 , - 168 , - 245 , - 426 , - 711 , - 268 , - 761 , - 526 , - 395 , - 368 , - 445 , - 626 , - 79 , - 468 , - 129 , - 726 , - 595 , - 568 , - 645 , - 826 , - 279 , - 668 , - 329 , - 94 , - 795 , - 768 , - 13 , - 194 , - 479 , - 36 , - 529 , - 294 , - 163 , - 136 , - 213 , - 394 , - 679 , - 236 , - 729 , - 494 , - 363 , - 336 , - 413 , - 594 , - 47 , - 436 , - 97 , - 694 , - 563 , - 536 , - 613 , - 794 , - 247 , - 636 , - 297 , - 62 , - 763 , - 736 , - 813 , - 162 , - 447 , - 4 , - 497 , - 262 , - 131 , - 104 , - 181 , - 362 , - 647 , - 204 , - 697 , - 462 , - 331 , - 304 , - 381 , - 562 , - 15 , - 404 , - 65 , - 662 , - 531 , - 504 , - 581 , - 762 , - 215 , - 604 , - 265 , - 30 , - 731 , - 704 , - 781 , - 130 , - 415 , - 804 , - 465 , - 230 , - 99 , - 72 , - 149 , - 330 , - 615 , - 172 , - 665 , - 430 , - 299 , - 272 , - 349 , - 530 , - 815 , - 372 , - 33 , - 630 , - 499 , - 472 , - 549 , - 730 , - 183 , - 572 , - 233 , - 830 , - 699 , - 672 , - 749 , - 98 , - 383 , - 772 , - 433 , - 198 , - 67 , - 40 , - 117 , - 298 , - 583 , - 140 , - 633 , - 398 , - 267 , - 240 , - 317 , - 498 , - 783 , - 340 , - 1 , - 598 , - 467 , - 440 , - 517 , - 698 , - 151 , - 540 , - 201 , - 798 , - 667 , - 640 , - 717 , - 66 , - 351 , - 740 , - 401 , - 166 , - 35 , - 8 , - 85 , - 266 , - 551 , - 108 , - 601 , - 366 , - 235 , - 208 , - 285 , - 466 , - 751 , - 308 , - 801 , - 566 , - 435 , - 408 , - 485 , - 666 , - 119 , - 508 , - 169 , - 766 , - 635 , - 608 , - 685 , - 34 , - 319 , - 708 , - 369 , - 134 , - 3 , - 808 , - 53 , - 234 , - 519 , - 76 , - 569 , - 334 , - 203 , - 176 , - 253 , - 434 , - 719 , - 276 , - 769 , - 534 , - 403 , - 376 , - 453 , - 634 , - 87 , - 476 , - 137 , - 734 , - 603 , - 576 , - 653 , - 2 , - 287 , - 676 , - 337 , - 102 , - 803 , - 776 , - 21 , - 202 , - 487 , - 44 , - 537 , - 302 , - 171 , - 144 , - 221 , - 402 , - 687 , - 244 , - 737 , - 502 , - 371 , - 344 , - 421 , - 602 , - 55 , - 444 , - 105 , - 702 , - 571 , - 544 , - 621 , - 802 , - 255 , - 644 , - 305 , - 70 , - 771 , - 744 , - 821 , - 170 , - 455 , - 12 , - 505 , - 270 , - 139 , - 112 , - 189 , - 370 , - 655 , - 212 , - 705 , - 470 , - 339 , - 312 , - 389 , - 570 , - 23 , - 412 , - 73 , - 670 , - 539 , - 512 , - 589 , - 770 , - 223 , - 612 , - 273 , - 38 , - 739 , - 712 , - 789 , - 138 , - 423 , - 812 , - 473 , - 238 , - 107 , - 80 , - 157 , - 338 , - 623 , - 180 , - 673 , - 438 , - 307 , - 280 , - 357 , - 538 , - 823 , - 380 , - 41 , - 638 , - 507 , - 480 , - 557 , - 738 , - 191 , - 580 , - 241 , - 6 , - 707 , - 680 , - 757 , - 106 , - 391 , - 780 , - 441 , - 206 , - 75 , - 48 , - 125 , - 306 , - 591 , - 148 , - 641 , - 406 , - 275 , - 248 , - 325 , - 506 , - 791 , - 348 , - 9 , - 606 , - 475 , - 448 , - 525 , - 706 , - 159 , - 548 , - 209 , - 806 , - 675 , - 648 , - 725 , - 74 , - 359 , - 748 , - 409 , - 174 , - 43 , - 16 , - 93 , - 274 , - 559 , - 116 , - 609 , - 374 , - 243 , - 216 , - 293 , - 474 , - 759 , - 316 , - 809 , - 574 , - 443 , - 416 , - 493 , - 674 , - 127 , - 516 , - 177 , - 774 , - 643 , - 616 , - 693 , - 42 , - 327 , - 716 , - 377 , - 142 , - 11 , - 816 , - 61 , - 242 , - 527 , - 84 , - 577 , - 342 , - 211 , - 184 , - 261 , - 442 , - 727 , - 284 , - 777 , - 542 , - 411 , - 384 , - 461 , - 642 , - 95 , - 484 , - 145 , - 742 , - 611 , - 584 , - 661 , - 10 , - 295 , - 684 , - 345 , - 110 , - 811 , - 784 , - 29 , - 210 , - 495 , - 52 , - 545 , - 310 , - 179 , - 152 , - 229 , - 410 , - 695 , - 252 , - 745 , - 510 , - 379 , - 352 , - 429 , - 610 , - 63 , - 452 , - 113 , - 710 , - 579 , - 552 , - 629 , - 810 , - 263 , - 652 , - 313 , - 78 , - 779 , - 752 , - 829 , - 178 , - 463 , - 20 , - 513 , - 278 , - 147 , - 120 , - 197 , - 378 , - 663 , - 220 , - 713 , - 478 , - 347 , - 320 , - 397 , - 578 , - 31 , - 420 , - 81 , - 678 , - 547 , - 520 , - 597 , - 778 , - 231 , - 620 , - 281 , - 46 , - 747 , - 720 , - 797 , - 146 , - 431 , - 820 , - 481 , - 246 , - 115 , - 88 , - 165 , - 346 , - 631 , - 188 , - 681 , - 446 , - 315 , - 288 , - 365 , - 546 , - 831 , - 388 , - 49 , - 646 , - 515 , - 488 , - 565 , - 746 , - 199 , - 588 , - 249 , - 14 , - 715 , - 688 , - 765 , - 114 , - 399 , - 788 , - 449 , - 214 , - 83 , - 56 , - 133 , - 314 , - 599 , - 156 , - 649 , - 414 , - 283 , - 256 , - 333 , - 514 , - 799 , - 356 , - 17 , - 614 , - 483 , - 456 , - 533 , - 714 , - 167 , - 556 , - 217 , - 814 , - 683 , - 656 , - 733 , - 82 , - 367 , - 756 , - 417 , - 182 , - 51 , - 24 , - 101 , - 282 , - 567 , - 124 , - 617 , - 382 , - 251 , - 224 , - 301 , - 482 , - 767 , - 324 , - 817 , - 582 , - 451 , - 424 , - 501 , - 682 , - 135 , - 524 , - 185 , - 782 , - 651 , - 624 , - 701 , - 50 , - 335 , - 724 , - 385 , - 150 , - 19 , - 824 , - 69 , - 250 , - 535 , - 92 , - 585 , - 350 , - 219 , - 192 , - 269 , - 450 , - 735 , - 292 , - 785 , - 550 , - 419 , - 392 , - 469 , - 650 , - 103 , - 492 , - 153 , - 750 , - 619 , - 592 , - 669 , - 18 , - 303 , - 692 , - 353 , - 118 , - 819 , - 792 , - 37 , - 218 , - 503 , - 60 , - 553 , - 318 , - 187 , - 160 , - 237 , - 418 , - 703 , - 260 , - 753 , - 518 , - 387 , - 360 , - 437 , - 618 , - 71 , - 460 , - 121 , - 718 , - 587 , - 560 , - 637 , - 818 , - 271 , - 660 , - 321 , - 86 , - 787 , - 760 , - 5 , - 186 , - 471 , - 28 , - 521 , - 286 , - 155 , - 128 , - 205 , - 386 , - 671 , - 228 , - 721 , - 486 , - 355 , - 328 , - 405 , - 586 , - 39 , - 428 , - 89 , - 686 , - 555 , - 528 , - 605 , - 786 , - 239 , - 628 , - 289 , - 54 , - 755 , - 728 , - 805 , - 154 , - 439 , - 828 , - 489 , - 254 , - 123 , - 96 , - 173 , - 354 , - 639 , - 196 , - 689 , - 454 , - 323 , - 296 , - 373 , - 554 , - 7 , - 396 , - 57 , - 654 , - 523 , - 496 , - 573 , - 754 , - 207 , - 596 , - 257 , - 22 , - 723 , - 696 , - 773 , - 122 , - 407 , - 796 , - 457 , - 222 , - 91 , - 64 , - 141 , - 322 , - 607 , - 164 , - 657 , - 422 , - 291 , - 264 , - 341 , - 522 , - 807 , - 364 , - 25 , - 622 , - 491 , - 464 , - 541 , - 722 , - 175 , - 564 , - 225 , - 822 , - 691 , - 664 , - 741 , - 90 , - 375 , - 764 , - 425 , - 190 , - 59 , - 32 , - 109 , - 290 , - 575 , - 132 , - 625 , - 390 , - 259 , - 232 , - 309 , - 490 , - 775 , - 332 , - 825 , - 590 , - 459 , - 432 , - 509 , - 690 , - 143 , - 532 , - 193 , - 790 , - 659 , - 632 , - 709 , - 58 , - 343 , - 732 , - 393 , - 158 , - 27 , - 0 , - 345 , - 54 , - 823 , - 108 , - 453 , - 162 , - 83 , - 216 , - 561 , - 270 , - 191 , - 324 , - 669 , - 378 , - 299 , - 432 , - 777 , - 486 , - 407 , - 540 , - 37 , - 594 , - 515 , - 648 , - 145 , - 702 , - 623 , - 756 , - 253 , - 810 , - 731 , - 16 , - 361 , - 70 , - 839 , - 124 , - 469 , - 178 , - 99 , - 232 , - 577 , - 286 , - 207 , - 340 , - 685 , - 394 , - 315 , - 448 , - 793 , - 502 , - 423 , - 556 , - 53 , - 610 , - 531 , - 664 , - 161 , - 718 , - 639 , - 772 , - 269 , - 826 , - 747 , - 32 , - 377 , - 86 , - 7 , - 140 , - 485 , - 194 , - 115 , - 248 , - 593 , - 302 , - 223 , - 356 , - 701 , - 410 , - 331 , - 464 , - 809 , - 518 , - 439 , - 572 , - 69 , - 626 , - 547 , - 680 , - 177 , - 734 , - 655 , - 788 , - 285 , - 842 , - 763 , - 48 , - 393 , - 102 , - 23 , - 156 , - 501 , - 210 , - 131 , - 264 , - 609 , - 318 , - 239 , - 372 , - 717 , - 426 , - 347 , - 480 , - 825 , - 534 , - 455 , - 588 , - 85 , - 642 , - 563 , - 696 , - 193 , - 750 , - 671 , - 804 , - 301 , - 10 , - 779 , - 64 , - 409 , - 118 , - 39 , - 172 , - 517 , - 226 , - 147 , - 280 , - 625 , - 334 , - 255 , - 388 , - 733 , - 442 , - 363 , - 496 , - 841 , - 550 , - 471 , - 604 , - 101 , - 658 , - 579 , - 712 , - 209 , - 766 , - 687 , - 820 , - 317 , - 26 , - 795 , - 80 , - 425 , - 134 , - 55 , - 188 , - 533 , - 242 , - 163 , - 296 , - 641 , - 350 , - 271 , - 404 , - 749 , - 458 , - 379 , - 512 , - 9 , - 566 , - 487 , - 620 , - 117 , - 674 , - 595 , - 728 , - 225 , - 782 , - 703 , - 836 , - 333 , - 42 , - 811 , - 96 , - 441 , - 150 , - 71 , - 204 , - 549 , - 258 , - 179 , - 312 , - 657 , - 366 , - 287 , - 420 , - 765 , - 474 , - 395 , - 528 , - 25 , - 582 , - 503 , - 636 , - 133 , - 690 , - 611 , - 744 , - 241 , - 798 , - 719 , - 4 , - 349 , - 58 , - 827 , - 112 , - 457 , - 166 , - 87 , - 220 , - 565 , - 274 , - 195 , - 328 , - 673 , - 382 , - 303 , - 436 , - 781 , - 490 , - 411 , - 544 , - 41 , - 598 , - 519 , - 652 , - 149 , - 706 , - 627 , - 760 , - 257 , - 814 , - 735 , - 20 , - 365 , - 74 , - 843 , - 128 , - 473 , - 182 , - 103 , - 236 , - 581 , - 290 , - 211 , - 344 , - 689 , - 398 , - 319 , - 452 , - 797 , - 506 , - 427 , - 560 , - 57 , - 614 , - 535 , - 668 , - 165 , - 722 , - 643 , - 776 , - 273 , - 830 , - 751 , - 36 , - 381 , - 90 , - 11 , - 144 , - 489 , - 198 , - 119 , - 252 , - 597 , - 306 , - 227 , - 360 , - 705 , - 414 , - 335 , - 468 , - 813 , - 522 , - 443 , - 576 , - 73 , - 630 , - 551 , - 684 , - 181 , - 738 , - 659 , - 792 , - 289 , - 846 , - 767 , - 52 , - 397 , - 106 , - 27 , - 160 , - 505 , - 214 , - 135 , - 268 , - 613 , - 322 , - 243 , - 376 , - 721 , - 430 , - 351 , - 484 , - 829 , - 538 , - 459 , - 592 , - 89 , - 646 , - 567 , - 700 , - 197 , - 754 , - 675 , - 808 , - 305 , - 14 , - 783 , - 68 , - 413 , - 122 , - 43 , - 176 , - 521 , - 230 , - 151 , - 284 , - 629 , - 338 , - 259 , - 392 , - 737 , - 446 , - 367 , - 500 , - 845 , - 554 , - 475 , - 608 , - 105 , - 662 , - 583 , - 716 , - 213 , - 770 , - 691 , - 824 , - 321 , - 30 , - 799 , - 84 , - 429 , - 138 , - 59 , - 192 , - 537 , - 246 , - 167 , - 300 , - 645 , - 354 , - 275 , - 408 , - 753 , - 462 , - 383 , - 516 , - 13 , - 570 , - 491 , - 624 , - 121 , - 678 , - 599 , - 732 , - 229 , - 786 , - 707 , - 840 , - 337 , - 46 , - 815 , - 100 , - 445 , - 154 , - 75 , - 208 , - 553 , - 262 , - 183 , - 316 , - 661 , - 370 , - 291 , - 424 , - 769 , - 478 , - 399 , - 532 , - 29 , - 586 , - 507 , - 640 , - 137 , - 694 , - 615 , - 748 , - 245 , - 802 , - 723 , - 8 , - 353 , - 62 , - 831 , - 116 , - 461 , - 170 , - 91 , - 224 , - 569 , - 278 , - 199 , - 332 , - 677 , - 386 , - 307 , - 440 , - 785 , - 494 , - 415 , - 548 , - 45 , - 602 , - 523 , - 656 , - 153 , - 710 , - 631 , - 764 , - 261 , - 818 , - 739 , - 24 , - 369 , - 78 , - 847 , - 132 , - 477 , - 186 , - 107 , - 240 , - 585 , - 294 , - 215 , - 348 , - 693 , - 402 , - 323 , - 456 , - 801 , - 510 , - 431 , - 564 , - 61 , - 618 , - 539 , - 672 , - 169 , - 726 , - 647 , - 780 , - 277 , - 834 , - 755 , - 40 , - 385 , - 94 , - 15 , - 148 , - 493 , - 202 , - 123 , - 256 , - 601 , - 310 , - 231 , - 364 , - 709 , - 418 , - 339 , - 472 , - 817 , - 526 , - 447 , - 580 , - 77 , - 634 , - 555 , - 688 , - 185 , - 742 , - 663 , - 796 , - 293 , - 2 , - 771 , - 56 , - 401 , - 110 , - 31 , - 164 , - 509 , - 218 , - 139 , - 272 , - 617 , - 326 , - 247 , - 380 , - 725 , - 434 , - 355 , - 488 , - 833 , - 542 , - 463 , - 596 , - 93 , - 650 , - 571 , - 704 , - 201 , - 758 , - 679 , - 812 , - 309 , - 18 , - 787 , - 72 , - 417 , - 126 , - 47 , - 180 , - 525 , - 234 , - 155 , - 288 , - 633 , - 342 , - 263 , - 396 , - 741 , - 450 , - 371 , - 504 , - 1 , - 558 , - 479 , - 612 , - 109 , - 666 , - 587 , - 720 , - 217 , - 774 , - 695 , - 828 , - 325 , - 34 , - 803 , - 88 , - 433 , - 142 , - 63 , - 196 , - 541 , - 250 , - 171 , - 304 , - 649 , - 358 , - 279 , - 412 , - 757 , - 466 , - 387 , - 520 , - 17 , - 574 , - 495 , - 628 , - 125 , - 682 , - 603 , - 736 , - 233 , - 790 , - 711 , - 844 , - 341 , - 50 , - 819 , - 104 , - 449 , - 158 , - 79 , - 212 , - 557 , - 266 , - 187 , - 320 , - 665 , - 374 , - 295 , - 428 , - 773 , - 482 , - 403 , - 536 , - 33 , - 590 , - 511 , - 644 , - 141 , - 698 , - 619 , - 752 , - 249 , - 806 , - 727 , - 12 , - 357 , - 66 , - 835 , - 120 , - 465 , - 174 , - 95 , - 228 , - 573 , - 282 , - 203 , - 336 , - 681 , - 390 , - 311 , - 444 , - 789 , - 498 , - 419 , - 552 , - 49 , - 606 , - 527 , - 660 , - 157 , - 714 , - 635 , - 768 , - 265 , - 822 , - 743 , - 28 , - 373 , - 82 , - 3 , - 136 , - 481 , - 190 , - 111 , - 244 , - 589 , - 298 , - 219 , - 352 , - 697 , - 406 , - 327 , - 460 , - 805 , - 514 , - 435 , - 568 , - 65 , - 622 , - 543 , - 676 , - 173 , - 730 , - 651 , - 784 , - 281 , - 838 , - 759 , - 44 , - 389 , - 98 , - 19 , - 152 , - 497 , - 206 , - 127 , - 260 , - 605 , - 314 , - 235 , - 368 , - 713 , - 422 , - 343 , - 476 , - 821 , - 530 , - 451 , - 584 , - 81 , - 638 , - 559 , - 692 , - 189 , - 746 , - 667 , - 800 , - 297 , - 6 , - 775 , - 60 , - 405 , - 114 , - 35 , - 168 , - 513 , - 222 , - 143 , - 276 , - 621 , - 330 , - 251 , - 384 , - 729 , - 438 , - 359 , - 492 , - 837 , - 546 , - 467 , - 600 , - 97 , - 654 , - 575 , - 708 , - 205 , - 762 , - 683 , - 816 , - 313 , - 22 , - 791 , - 76 , - 421 , - 130 , - 51 , - 184 , - 529 , - 238 , - 159 , - 292 , - 637 , - 346 , - 267 , - 400 , - 745 , - 454 , - 375 , - 508 , - 5 , - 562 , - 483 , - 616 , - 113 , - 670 , - 591 , - 724 , - 221 , - 778 , - 699 , - 832 , - 329 , - 38 , - 807 , - 92 , - 437 , - 146 , - 67 , - 200 , - 545 , - 254 , - 175 , - 308 , - 653 , - 362 , - 283 , - 416 , - 761 , - 470 , - 391 , - 524 , - 21 , - 578 , - 499 , - 632 , - 129 , - 686 , - 607 , - 740 , - 237 , - 794 , - 715 , - 0 , - 65 , - 226 , - 483 , - 836 , - 421 , - 102 , - 743 , - 616 , - 585 , - 650 , - 811 , - 204 , - 557 , - 142 , - 687 , - 464 , - 337 , - 306 , - 371 , - 532 , - 789 , - 278 , - 727 , - 408 , - 185 , - 58 , - 27 , - 92 , - 253 , - 510 , - 863 , - 448 , - 129 , - 770 , - 643 , - 612 , - 677 , - 838 , - 231 , - 584 , - 169 , - 714 , - 491 , - 364 , - 333 , - 398 , - 559 , - 816 , - 305 , - 754 , - 435 , - 212 , - 85 , - 54 , - 119 , - 280 , - 537 , - 26 , - 475 , - 156 , - 797 , - 670 , - 639 , - 704 , - 1 , - 258 , - 611 , - 196 , - 741 , - 518 , - 391 , - 360 , - 425 , - 586 , - 843 , - 332 , - 781 , - 462 , - 239 , - 112 , - 81 , - 146 , - 307 , - 564 , - 53 , - 502 , - 183 , - 824 , - 697 , - 666 , - 731 , - 28 , - 285 , - 638 , - 223 , - 768 , - 545 , - 418 , - 387 , - 452 , - 613 , - 6 , - 359 , - 808 , - 489 , - 266 , - 139 , - 108 , - 173 , - 334 , - 591 , - 80 , - 529 , - 210 , - 851 , - 724 , - 693 , - 758 , - 55 , - 312 , - 665 , - 250 , - 795 , - 572 , - 445 , - 414 , - 479 , - 640 , - 33 , - 386 , - 835 , - 516 , - 293 , - 166 , - 135 , - 200 , - 361 , - 618 , - 107 , - 556 , - 237 , - 14 , - 751 , - 720 , - 785 , - 82 , - 339 , - 692 , - 277 , - 822 , - 599 , - 472 , - 441 , - 506 , - 667 , - 60 , - 413 , - 862 , - 543 , - 320 , - 193 , - 162 , - 227 , - 388 , - 645 , - 134 , - 583 , - 264 , - 41 , - 778 , - 747 , - 812 , - 109 , - 366 , - 719 , - 304 , - 849 , - 626 , - 499 , - 468 , - 533 , - 694 , - 87 , - 440 , - 25 , - 570 , - 347 , - 220 , - 189 , - 254 , - 415 , - 672 , - 161 , - 610 , - 291 , - 68 , - 805 , - 774 , - 839 , - 136 , - 393 , - 746 , - 331 , - 12 , - 653 , - 526 , - 495 , - 560 , - 721 , - 114 , - 467 , - 52 , - 597 , - 374 , - 247 , - 216 , - 281 , - 442 , - 699 , - 188 , - 637 , - 318 , - 95 , - 832 , - 801 , - 2 , - 163 , - 420 , - 773 , - 358 , - 39 , - 680 , - 553 , - 522 , - 587 , - 748 , - 141 , - 494 , - 79 , - 624 , - 401 , - 274 , - 243 , - 308 , - 469 , - 726 , - 215 , - 664 , - 345 , - 122 , - 859 , - 828 , - 29 , - 190 , - 447 , - 800 , - 385 , - 66 , - 707 , - 580 , - 549 , - 614 , - 775 , - 168 , - 521 , - 106 , - 651 , - 428 , - 301 , - 270 , - 335 , - 496 , - 753 , - 242 , - 691 , - 372 , - 149 , - 22 , - 855 , - 56 , - 217 , - 474 , - 827 , - 412 , - 93 , - 734 , - 607 , - 576 , - 641 , - 802 , - 195 , - 548 , - 133 , - 678 , - 455 , - 328 , - 297 , - 362 , - 523 , - 780 , - 269 , - 718 , - 399 , - 176 , - 49 , - 18 , - 83 , - 244 , - 501 , - 854 , - 439 , - 120 , - 761 , - 634 , - 603 , - 668 , - 829 , - 222 , - 575 , - 160 , - 705 , - 482 , - 355 , - 324 , - 389 , - 550 , - 807 , - 296 , - 745 , - 426 , - 203 , - 76 , - 45 , - 110 , - 271 , - 528 , - 17 , - 466 , - 147 , - 788 , - 661 , - 630 , - 695 , - 856 , - 249 , - 602 , - 187 , - 732 , - 509 , - 382 , - 351 , - 416 , - 577 , - 834 , - 323 , - 772 , - 453 , - 230 , - 103 , - 72 , - 137 , - 298 , - 555 , - 44 , - 493 , - 174 , - 815 , - 688 , - 657 , - 722 , - 19 , - 276 , - 629 , - 214 , - 759 , - 536 , - 409 , - 378 , - 443 , - 604 , - 861 , - 350 , - 799 , - 480 , - 257 , - 130 , - 99 , - 164 , - 325 , - 582 , - 71 , - 520 , - 201 , - 842 , - 715 , - 684 , - 749 , - 46 , - 303 , - 656 , - 241 , - 786 , - 563 , - 436 , - 405 , - 470 , - 631 , - 24 , - 377 , - 826 , - 507 , - 284 , - 157 , - 126 , - 191 , - 352 , - 609 , - 98 , - 547 , - 228 , - 5 , - 742 , - 711 , - 776 , - 73 , - 330 , - 683 , - 268 , - 813 , - 590 , - 463 , - 432 , - 497 , - 658 , - 51 , - 404 , - 853 , - 534 , - 311 , - 184 , - 153 , - 218 , - 379 , - 636 , - 125 , - 574 , - 255 , - 32 , - 769 , - 738 , - 803 , - 100 , - 357 , - 710 , - 295 , - 840 , - 617 , - 490 , - 459 , - 524 , - 685 , - 78 , - 431 , - 16 , - 561 , - 338 , - 211 , - 180 , - 245 , - 406 , - 663 , - 152 , - 601 , - 282 , - 59 , - 796 , - 765 , - 830 , - 127 , - 384 , - 737 , - 322 , - 3 , - 644 , - 517 , - 486 , - 551 , - 712 , - 105 , - 458 , - 43 , - 588 , - 365 , - 238 , - 207 , - 272 , - 433 , - 690 , - 179 , - 628 , - 309 , - 86 , - 823 , - 792 , - 857 , - 154 , - 411 , - 764 , - 349 , - 30 , - 671 , - 544 , - 513 , - 578 , - 739 , - 132 , - 485 , - 70 , - 615 , - 392 , - 265 , - 234 , - 299 , - 460 , - 717 , - 206 , - 655 , - 336 , - 113 , - 850 , - 819 , - 20 , - 181 , - 438 , - 791 , - 376 , - 57 , - 698 , - 571 , - 540 , - 605 , - 766 , - 159 , - 512 , - 97 , - 642 , - 419 , - 292 , - 261 , - 326 , - 487 , - 744 , - 233 , - 682 , - 363 , - 140 , - 13 , - 846 , - 47 , - 208 , - 465 , - 818 , - 403 , - 84 , - 725 , - 598 , - 567 , - 632 , - 793 , - 186 , - 539 , - 124 , - 669 , - 446 , - 319 , - 288 , - 353 , - 514 , - 771 , - 260 , - 709 , - 390 , - 167 , - 40 , - 9 , - 74 , - 235 , - 492 , - 845 , - 430 , - 111 , - 752 , - 625 , - 594 , - 659 , - 820 , - 213 , - 566 , - 151 , - 696 , - 473 , - 346 , - 315 , - 380 , - 541 , - 798 , - 287 , - 736 , - 417 , - 194 , - 67 , - 36 , - 101 , - 262 , - 519 , - 8 , - 457 , - 138 , - 779 , - 652 , - 621 , - 686 , - 847 , - 240 , - 593 , - 178 , - 723 , - 500 , - 373 , - 342 , - 407 , - 568 , - 825 , - 314 , - 763 , - 444 , - 221 , - 94 , - 63 , - 128 , - 289 , - 546 , - 35 , - 484 , - 165 , - 806 , - 679 , - 648 , - 713 , - 10 , - 267 , - 620 , - 205 , - 750 , - 527 , - 400 , - 369 , - 434 , - 595 , - 852 , - 341 , - 790 , - 471 , - 248 , - 121 , - 90 , - 155 , - 316 , - 573 , - 62 , - 511 , - 192 , - 833 , - 706 , - 675 , - 740 , - 37 , - 294 , - 647 , - 232 , - 777 , - 554 , - 427 , - 396 , - 461 , - 622 , - 15 , - 368 , - 817 , - 498 , - 275 , - 148 , - 117 , - 182 , - 343 , - 600 , - 89 , - 538 , - 219 , - 860 , - 733 , - 702 , - 767 , - 64 , - 321 , - 674 , - 259 , - 804 , - 581 , - 454 , - 423 , - 488 , - 649 , - 42 , - 395 , - 844 , - 525 , - 302 , - 175 , - 144 , - 209 , - 370 , - 627 , - 116 , - 565 , - 246 , - 23 , - 760 , - 729 , - 794 , - 91 , - 348 , - 701 , - 286 , - 831 , - 608 , - 481 , - 450 , - 515 , - 676 , - 69 , - 422 , - 7 , - 552 , - 329 , - 202 , - 171 , - 236 , - 397 , - 654 , - 143 , - 592 , - 273 , - 50 , - 787 , - 756 , - 821 , - 118 , - 375 , - 728 , - 313 , - 858 , - 635 , - 508 , - 477 , - 542 , - 703 , - 96 , - 449 , - 34 , - 579 , - 356 , - 229 , - 198 , - 263 , - 424 , - 681 , - 170 , - 619 , - 300 , - 77 , - 814 , - 783 , - 848 , - 145 , - 402 , - 755 , - 340 , - 21 , - 662 , - 535 , - 504 , - 569 , - 730 , - 123 , - 476 , - 61 , - 606 , - 383 , - 256 , - 225 , - 290 , - 451 , - 708 , - 197 , - 646 , - 327 , - 104 , - 841 , - 810 , - 11 , - 172 , - 429 , - 782 , - 367 , - 48 , - 689 , - 562 , - 531 , - 596 , - 757 , - 150 , - 503 , - 88 , - 633 , - 410 , - 283 , - 252 , - 317 , - 478 , - 735 , - 224 , - 673 , - 354 , - 131 , - 4 , - 837 , - 38 , - 199 , - 456 , - 809 , - 394 , - 75 , - 716 , - 589 , - 558 , - 623 , - 784 , - 177 , - 530 , - 115 , - 660 , - 437 , - 310 , - 279 , - 344 , - 505 , - 762 , - 251 , - 700 , - 381 , - 158 , - 31 , - 0 , - 247 , - 714 , - 521 , - 548 , - 795 , - 382 , - 189 , - 216 , - 463 , - 50 , - 737 , - 764 , - 131 , - 598 , - 405 , - 432 , - 679 , - 266 , - 73 , - 100 , - 347 , - 814 , - 621 , - 648 , - 15 , - 482 , - 289 , - 316 , - 563 , - 150 , - 837 , - 864 , - 231 , - 698 , - 505 , - 532 , - 779 , - 366 , - 173 , - 200 , - 447 , - 34 , - 721 , - 748 , - 115 , - 582 , - 389 , - 416 , - 663 , - 250 , - 57 , - 84 , - 331 , - 798 , - 605 , - 632 , - 879 , - 466 , - 273 , - 300 , - 547 , - 134 , - 821 , - 848 , - 215 , - 682 , - 489 , - 516 , - 763 , - 350 , - 157 , - 184 , - 431 , - 18 , - 705 , - 732 , - 99 , - 566 , - 373 , - 400 , - 647 , - 234 , - 41 , - 68 , - 315 , - 782 , - 589 , - 616 , - 863 , - 450 , - 257 , - 284 , - 531 , - 118 , - 805 , - 832 , - 199 , - 666 , - 473 , - 500 , - 747 , - 334 , - 141 , - 168 , - 415 , - 2 , - 689 , - 716 , - 83 , - 550 , - 357 , - 384 , - 631 , - 218 , - 25 , - 52 , - 299 , - 766 , - 573 , - 600 , - 847 , - 434 , - 241 , - 268 , - 515 , - 102 , - 789 , - 816 , - 183 , - 650 , - 457 , - 484 , - 731 , - 318 , - 125 , - 152 , - 399 , - 866 , - 673 , - 700 , - 67 , - 534 , - 341 , - 368 , - 615 , - 202 , - 9 , - 36 , - 283 , - 750 , - 557 , - 584 , - 831 , - 418 , - 225 , - 252 , - 499 , - 86 , - 773 , - 800 , - 167 , - 634 , - 441 , - 468 , - 715 , - 302 , - 109 , - 136 , - 383 , - 850 , - 657 , - 684 , - 51 , - 518 , - 325 , - 352 , - 599 , - 186 , - 873 , - 20 , - 267 , - 734 , - 541 , - 568 , - 815 , - 402 , - 209 , - 236 , - 483 , - 70 , - 757 , - 784 , - 151 , - 618 , - 425 , - 452 , - 699 , - 286 , - 93 , - 120 , - 367 , - 834 , - 641 , - 668 , - 35 , - 502 , - 309 , - 336 , - 583 , - 170 , - 857 , - 4 , - 251 , - 718 , - 525 , - 552 , - 799 , - 386 , - 193 , - 220 , - 467 , - 54 , - 741 , - 768 , - 135 , - 602 , - 409 , - 436 , - 683 , - 270 , - 77 , - 104 , - 351 , - 818 , - 625 , - 652 , - 19 , - 486 , - 293 , - 320 , - 567 , - 154 , - 841 , - 868 , - 235 , - 702 , - 509 , - 536 , - 783 , - 370 , - 177 , - 204 , - 451 , - 38 , - 725 , - 752 , - 119 , - 586 , - 393 , - 420 , - 667 , - 254 , - 61 , - 88 , - 335 , - 802 , - 609 , - 636 , - 3 , - 470 , - 277 , - 304 , - 551 , - 138 , - 825 , - 852 , - 219 , - 686 , - 493 , - 520 , - 767 , - 354 , - 161 , - 188 , - 435 , - 22 , - 709 , - 736 , - 103 , - 570 , - 377 , - 404 , - 651 , - 238 , - 45 , - 72 , - 319 , - 786 , - 593 , - 620 , - 867 , - 454 , - 261 , - 288 , - 535 , - 122 , - 809 , - 836 , - 203 , - 670 , - 477 , - 504 , - 751 , - 338 , - 145 , - 172 , - 419 , - 6 , - 693 , - 720 , - 87 , - 554 , - 361 , - 388 , - 635 , - 222 , - 29 , - 56 , - 303 , - 770 , - 577 , - 604 , - 851 , - 438 , - 245 , - 272 , - 519 , - 106 , - 793 , - 820 , - 187 , - 654 , - 461 , - 488 , - 735 , - 322 , - 129 , - 156 , - 403 , - 870 , - 677 , - 704 , - 71 , - 538 , - 345 , - 372 , - 619 , - 206 , - 13 , - 40 , - 287 , - 754 , - 561 , - 588 , - 835 , - 422 , - 229 , - 256 , - 503 , - 90 , - 777 , - 804 , - 171 , - 638 , - 445 , - 472 , - 719 , - 306 , - 113 , - 140 , - 387 , - 854 , - 661 , - 688 , - 55 , - 522 , - 329 , - 356 , - 603 , - 190 , - 877 , - 24 , - 271 , - 738 , - 545 , - 572 , - 819 , - 406 , - 213 , - 240 , - 487 , - 74 , - 761 , - 788 , - 155 , - 622 , - 429 , - 456 , - 703 , - 290 , - 97 , - 124 , - 371 , - 838 , - 645 , - 672 , - 39 , - 506 , - 313 , - 340 , - 587 , - 174 , - 861 , - 8 , - 255 , - 722 , - 529 , - 556 , - 803 , - 390 , - 197 , - 224 , - 471 , - 58 , - 745 , - 772 , - 139 , - 606 , - 413 , - 440 , - 687 , - 274 , - 81 , - 108 , - 355 , - 822 , - 629 , - 656 , - 23 , - 490 , - 297 , - 324 , - 571 , - 158 , - 845 , - 872 , - 239 , - 706 , - 513 , - 540 , - 787 , - 374 , - 181 , - 208 , - 455 , - 42 , - 729 , - 756 , - 123 , - 590 , - 397 , - 424 , - 671 , - 258 , - 65 , - 92 , - 339 , - 806 , - 613 , - 640 , - 7 , - 474 , - 281 , - 308 , - 555 , - 142 , - 829 , - 856 , - 223 , - 690 , - 497 , - 524 , - 771 , - 358 , - 165 , - 192 , - 439 , - 26 , - 713 , - 740 , - 107 , - 574 , - 381 , - 408 , - 655 , - 242 , - 49 , - 76 , - 323 , - 790 , - 597 , - 624 , - 871 , - 458 , - 265 , - 292 , - 539 , - 126 , - 813 , - 840 , - 207 , - 674 , - 481 , - 508 , - 755 , - 342 , - 149 , - 176 , - 423 , - 10 , - 697 , - 724 , - 91 , - 558 , - 365 , - 392 , - 639 , - 226 , - 33 , - 60 , - 307 , - 774 , - 581 , - 608 , - 855 , - 442 , - 249 , - 276 , - 523 , - 110 , - 797 , - 824 , - 191 , - 658 , - 465 , - 492 , - 739 , - 326 , - 133 , - 160 , - 407 , - 874 , - 681 , - 708 , - 75 , - 542 , - 349 , - 376 , - 623 , - 210 , - 17 , - 44 , - 291 , - 758 , - 565 , - 592 , - 839 , - 426 , - 233 , - 260 , - 507 , - 94 , - 781 , - 808 , - 175 , - 642 , - 449 , - 476 , - 723 , - 310 , - 117 , - 144 , - 391 , - 858 , - 665 , - 692 , - 59 , - 526 , - 333 , - 360 , - 607 , - 194 , - 1 , - 28 , - 275 , - 742 , - 549 , - 576 , - 823 , - 410 , - 217 , - 244 , - 491 , - 78 , - 765 , - 792 , - 159 , - 626 , - 433 , - 460 , - 707 , - 294 , - 101 , - 128 , - 375 , - 842 , - 649 , - 676 , - 43 , - 510 , - 317 , - 344 , - 591 , - 178 , - 865 , - 12 , - 259 , - 726 , - 533 , - 560 , - 807 , - 394 , - 201 , - 228 , - 475 , - 62 , - 749 , - 776 , - 143 , - 610 , - 417 , - 444 , - 691 , - 278 , - 85 , - 112 , - 359 , - 826 , - 633 , - 660 , - 27 , - 494 , - 301 , - 328 , - 575 , - 162 , - 849 , - 876 , - 243 , - 710 , - 517 , - 544 , - 791 , - 378 , - 185 , - 212 , - 459 , - 46 , - 733 , - 760 , - 127 , - 594 , - 401 , - 428 , - 675 , - 262 , - 69 , - 96 , - 343 , - 810 , - 617 , - 644 , - 11 , - 478 , - 285 , - 312 , - 559 , - 146 , - 833 , - 860 , - 227 , - 694 , - 501 , - 528 , - 775 , - 362 , - 169 , - 196 , - 443 , - 30 , - 717 , - 744 , - 111 , - 578 , - 385 , - 412 , - 659 , - 246 , - 53 , - 80 , - 327 , - 794 , - 601 , - 628 , - 875 , - 462 , - 269 , - 296 , - 543 , - 130 , - 817 , - 844 , - 211 , - 678 , - 485 , - 512 , - 759 , - 346 , - 153 , - 180 , - 427 , - 14 , - 701 , - 728 , - 95 , - 562 , - 369 , - 396 , - 643 , - 230 , - 37 , - 64 , - 311 , - 778 , - 585 , - 612 , - 859 , - 446 , - 253 , - 280 , - 527 , - 114 , - 801 , - 828 , - 195 , - 662 , - 469 , - 496 , - 743 , - 330 , - 137 , - 164 , - 411 , - 878 , - 685 , - 712 , - 79 , - 546 , - 353 , - 380 , - 627 , - 214 , - 21 , - 48 , - 295 , - 762 , - 569 , - 596 , - 843 , - 430 , - 237 , - 264 , - 511 , - 98 , - 785 , - 812 , - 179 , - 646 , - 453 , - 480 , - 727 , - 314 , - 121 , - 148 , - 395 , - 862 , - 669 , - 696 , - 63 , - 530 , - 337 , - 364 , - 611 , - 198 , - 5 , - 32 , - 279 , - 746 , - 553 , - 580 , - 827 , - 414 , - 221 , - 248 , - 495 , - 82 , - 769 , - 796 , - 163 , - 630 , - 437 , - 464 , - 711 , - 298 , - 105 , - 132 , - 379 , - 846 , - 653 , - 680 , - 47 , - 514 , - 321 , - 348 , - 595 , - 182 , - 869 , - 16 , - 263 , - 730 , - 537 , - 564 , - 811 , - 398 , - 205 , - 232 , - 479 , - 66 , - 753 , - 780 , - 147 , - 614 , - 421 , - 448 , - 695 , - 282 , - 89 , - 116 , - 363 , - 830 , - 637 , - 664 , - 31 , - 498 , - 305 , - 332 , - 579 , - 166 , - 853 , - 0 , - 327 , - 878 , - 757 , - 860 , - 291 , - 842 , - 721 , - 824 , - 255 , - 806 , - 685 , - 788 , - 219 , - 770 , - 649 , - 752 , - 183 , - 734 , - 613 , - 716 , - 147 , - 698 , - 577 , - 680 , - 111 , - 662 , - 541 , - 644 , - 75 , - 626 , - 505 , - 608 , - 39 , - 590 , - 469 , - 572 , - 3 , - 554 , - 433 , - 536 , - 863 , - 518 , - 397 , - 500 , - 827 , - 482 , - 361 , - 464 , - 791 , - 446 , - 325 , - 428 , - 755 , - 410 , - 289 , - 392 , - 719 , - 374 , - 253 , - 356 , - 683 , - 338 , - 217 , - 320 , - 647 , - 302 , - 181 , - 284 , - 611 , - 266 , - 145 , - 248 , - 575 , - 230 , - 109 , - 212 , - 539 , - 194 , - 73 , - 176 , - 503 , - 158 , - 37 , - 140 , - 467 , - 122 , - 1 , - 104 , - 431 , - 86 , - 861 , - 68 , - 395 , - 50 , - 825 , - 32 , - 359 , - 14 , - 789 , - 892 , - 323 , - 874 , - 753 , - 856 , - 287 , - 838 , - 717 , - 820 , - 251 , - 802 , - 681 , - 784 , - 215 , - 766 , - 645 , - 748 , - 179 , - 730 , - 609 , - 712 , - 143 , - 694 , - 573 , - 676 , - 107 , - 658 , - 537 , - 640 , - 71 , - 622 , - 501 , - 604 , - 35 , - 586 , - 465 , - 568 , - 895 , - 550 , - 429 , - 532 , - 859 , - 514 , - 393 , - 496 , - 823 , - 478 , - 357 , - 460 , - 787 , - 442 , - 321 , - 424 , - 751 , - 406 , - 285 , - 388 , - 715 , - 370 , - 249 , - 352 , - 679 , - 334 , - 213 , - 316 , - 643 , - 298 , - 177 , - 280 , - 607 , - 262 , - 141 , - 244 , - 571 , - 226 , - 105 , - 208 , - 535 , - 190 , - 69 , - 172 , - 499 , - 154 , - 33 , - 136 , - 463 , - 118 , - 893 , - 100 , - 427 , - 82 , - 857 , - 64 , - 391 , - 46 , - 821 , - 28 , - 355 , - 10 , - 785 , - 888 , - 319 , - 870 , - 749 , - 852 , - 283 , - 834 , - 713 , - 816 , - 247 , - 798 , - 677 , - 780 , - 211 , - 762 , - 641 , - 744 , - 175 , - 726 , - 605 , - 708 , - 139 , - 690 , - 569 , - 672 , - 103 , - 654 , - 533 , - 636 , - 67 , - 618 , - 497 , - 600 , - 31 , - 582 , - 461 , - 564 , - 891 , - 546 , - 425 , - 528 , - 855 , - 510 , - 389 , - 492 , - 819 , - 474 , - 353 , - 456 , - 783 , - 438 , - 317 , - 420 , - 747 , - 402 , - 281 , - 384 , - 711 , - 366 , - 245 , - 348 , - 675 , - 330 , - 209 , - 312 , - 639 , - 294 , - 173 , - 276 , - 603 , - 258 , - 137 , - 240 , - 567 , - 222 , - 101 , - 204 , - 531 , - 186 , - 65 , - 168 , - 495 , - 150 , - 29 , - 132 , - 459 , - 114 , - 889 , - 96 , - 423 , - 78 , - 853 , - 60 , - 387 , - 42 , - 817 , - 24 , - 351 , - 6 , - 781 , - 884 , - 315 , - 866 , - 745 , - 848 , - 279 , - 830 , - 709 , - 812 , - 243 , - 794 , - 673 , - 776 , - 207 , - 758 , - 637 , - 740 , - 171 , - 722 , - 601 , - 704 , - 135 , - 686 , - 565 , - 668 , - 99 , - 650 , - 529 , - 632 , - 63 , - 614 , - 493 , - 596 , - 27 , - 578 , - 457 , - 560 , - 887 , - 542 , - 421 , - 524 , - 851 , - 506 , - 385 , - 488 , - 815 , - 470 , - 349 , - 452 , - 779 , - 434 , - 313 , - 416 , - 743 , - 398 , - 277 , - 380 , - 707 , - 362 , - 241 , - 344 , - 671 , - 326 , - 205 , - 308 , - 635 , - 290 , - 169 , - 272 , - 599 , - 254 , - 133 , - 236 , - 563 , - 218 , - 97 , - 200 , - 527 , - 182 , - 61 , - 164 , - 491 , - 146 , - 25 , - 128 , - 455 , - 110 , - 885 , - 92 , - 419 , - 74 , - 849 , - 56 , - 383 , - 38 , - 813 , - 20 , - 347 , - 2 , - 777 , - 880 , - 311 , - 862 , - 741 , - 844 , - 275 , - 826 , - 705 , - 808 , - 239 , - 790 , - 669 , - 772 , - 203 , - 754 , - 633 , - 736 , - 167 , - 718 , - 597 , - 700 , - 131 , - 682 , - 561 , - 664 , - 95 , - 646 , - 525 , - 628 , - 59 , - 610 , - 489 , - 592 , - 23 , - 574 , - 453 , - 556 , - 883 , - 538 , - 417 , - 520 , - 847 , - 502 , - 381 , - 484 , - 811 , - 466 , - 345 , - 448 , - 775 , - 430 , - 309 , - 412 , - 739 , - 394 , - 273 , - 376 , - 703 , - 358 , - 237 , - 340 , - 667 , - 322 , - 201 , - 304 , - 631 , - 286 , - 165 , - 268 , - 595 , - 250 , - 129 , - 232 , - 559 , - 214 , - 93 , - 196 , - 523 , - 178 , - 57 , - 160 , - 487 , - 142 , - 21 , - 124 , - 451 , - 106 , - 881 , - 88 , - 415 , - 70 , - 845 , - 52 , - 379 , - 34 , - 809 , - 16 , - 343 , - 894 , - 773 , - 876 , - 307 , - 858 , - 737 , - 840 , - 271 , - 822 , - 701 , - 804 , - 235 , - 786 , - 665 , - 768 , - 199 , - 750 , - 629 , - 732 , - 163 , - 714 , - 593 , - 696 , - 127 , - 678 , - 557 , - 660 , - 91 , - 642 , - 521 , - 624 , - 55 , - 606 , - 485 , - 588 , - 19 , - 570 , - 449 , - 552 , - 879 , - 534 , - 413 , - 516 , - 843 , - 498 , - 377 , - 480 , - 807 , - 462 , - 341 , - 444 , - 771 , - 426 , - 305 , - 408 , - 735 , - 390 , - 269 , - 372 , - 699 , - 354 , - 233 , - 336 , - 663 , - 318 , - 197 , - 300 , - 627 , - 282 , - 161 , - 264 , - 591 , - 246 , - 125 , - 228 , - 555 , - 210 , - 89 , - 192 , - 519 , - 174 , - 53 , - 156 , - 483 , - 138 , - 17 , - 120 , - 447 , - 102 , - 877 , - 84 , - 411 , - 66 , - 841 , - 48 , - 375 , - 30 , - 805 , - 12 , - 339 , - 890 , - 769 , - 872 , - 303 , - 854 , - 733 , - 836 , - 267 , - 818 , - 697 , - 800 , - 231 , - 782 , - 661 , - 764 , - 195 , - 746 , - 625 , - 728 , - 159 , - 710 , - 589 , - 692 , - 123 , - 674 , - 553 , - 656 , - 87 , - 638 , - 517 , - 620 , - 51 , - 602 , - 481 , - 584 , - 15 , - 566 , - 445 , - 548 , - 875 , - 530 , - 409 , - 512 , - 839 , - 494 , - 373 , - 476 , - 803 , - 458 , - 337 , - 440 , - 767 , - 422 , - 301 , - 404 , - 731 , - 386 , - 265 , - 368 , - 695 , - 350 , - 229 , - 332 , - 659 , - 314 , - 193 , - 296 , - 623 , - 278 , - 157 , - 260 , - 587 , - 242 , - 121 , - 224 , - 551 , - 206 , - 85 , - 188 , - 515 , - 170 , - 49 , - 152 , - 479 , - 134 , - 13 , - 116 , - 443 , - 98 , - 873 , - 80 , - 407 , - 62 , - 837 , - 44 , - 371 , - 26 , - 801 , - 8 , - 335 , - 886 , - 765 , - 868 , - 299 , - 850 , - 729 , - 832 , - 263 , - 814 , - 693 , - 796 , - 227 , - 778 , - 657 , - 760 , - 191 , - 742 , - 621 , - 724 , - 155 , - 706 , - 585 , - 688 , - 119 , - 670 , - 549 , - 652 , - 83 , - 634 , - 513 , - 616 , - 47 , - 598 , - 477 , - 580 , - 11 , - 562 , - 441 , - 544 , - 871 , - 526 , - 405 , - 508 , - 835 , - 490 , - 369 , - 472 , - 799 , - 454 , - 333 , - 436 , - 763 , - 418 , - 297 , - 400 , - 727 , - 382 , - 261 , - 364 , - 691 , - 346 , - 225 , - 328 , - 655 , - 310 , - 189 , - 292 , - 619 , - 274 , - 153 , - 256 , - 583 , - 238 , - 117 , - 220 , - 547 , - 202 , - 81 , - 184 , - 511 , - 166 , - 45 , - 148 , - 475 , - 130 , - 9 , - 112 , - 439 , - 94 , - 869 , - 76 , - 403 , - 58 , - 833 , - 40 , - 367 , - 22 , - 797 , - 4 , - 331 , - 882 , - 761 , - 864 , - 295 , - 846 , - 725 , - 828 , - 259 , - 810 , - 689 , - 792 , - 223 , - 774 , - 653 , - 756 , - 187 , - 738 , - 617 , - 720 , - 151 , - 702 , - 581 , - 684 , - 115 , - 666 , - 545 , - 648 , - 79 , - 630 , - 509 , - 612 , - 43 , - 594 , - 473 , - 576 , - 7 , - 558 , - 437 , - 540 , - 867 , - 522 , - 401 , - 504 , - 831 , - 486 , - 365 , - 468 , - 795 , - 450 , - 329 , - 432 , - 759 , - 414 , - 293 , - 396 , - 723 , - 378 , - 257 , - 360 , - 687 , - 342 , - 221 , - 324 , - 651 , - 306 , - 185 , - 288 , - 615 , - 270 , - 149 , - 252 , - 579 , - 234 , - 113 , - 216 , - 543 , - 198 , - 77 , - 180 , - 507 , - 162 , - 41 , - 144 , - 471 , - 126 , - 5 , - 108 , - 435 , - 90 , - 865 , - 72 , - 399 , - 54 , - 829 , - 36 , - 363 , - 18 , - 793 , - 0 , - 143 , - 514 , - 201 , - 116 , - 259 , - 630 , - 317 , - 232 , - 375 , - 746 , - 433 , - 348 , - 491 , - 862 , - 549 , - 464 , - 607 , - 66 , - 665 , - 580 , - 723 , - 182 , - 781 , - 696 , - 839 , - 298 , - 897 , - 812 , - 43 , - 414 , - 101 , - 16 , - 159 , - 530 , - 217 , - 132 , - 275 , - 646 , - 333 , - 248 , - 391 , - 762 , - 449 , - 364 , - 507 , - 878 , - 565 , - 480 , - 623 , - 82 , - 681 , - 596 , - 739 , - 198 , - 797 , - 712 , - 855 , - 314 , - 1 , - 828 , - 59 , - 430 , - 117 , - 32 , - 175 , - 546 , - 233 , - 148 , - 291 , - 662 , - 349 , - 264 , - 407 , - 778 , - 465 , - 380 , - 523 , - 894 , - 581 , - 496 , - 639 , - 98 , - 697 , - 612 , - 755 , - 214 , - 813 , - 728 , - 871 , - 330 , - 17 , - 844 , - 75 , - 446 , - 133 , - 48 , - 191 , - 562 , - 249 , - 164 , - 307 , - 678 , - 365 , - 280 , - 423 , - 794 , - 481 , - 396 , - 539 , - 910 , - 597 , - 512 , - 655 , - 114 , - 713 , - 628 , - 771 , - 230 , - 829 , - 744 , - 887 , - 346 , - 33 , - 860 , - 91 , - 462 , - 149 , - 64 , - 207 , - 578 , - 265 , - 180 , - 323 , - 694 , - 381 , - 296 , - 439 , - 810 , - 497 , - 412 , - 555 , - 14 , - 613 , - 528 , - 671 , - 130 , - 729 , - 644 , - 787 , - 246 , - 845 , - 760 , - 903 , - 362 , - 49 , - 876 , - 107 , - 478 , - 165 , - 80 , - 223 , - 594 , - 281 , - 196 , - 339 , - 710 , - 397 , - 312 , - 455 , - 826 , - 513 , - 428 , - 571 , - 30 , - 629 , - 544 , - 687 , - 146 , - 745 , - 660 , - 803 , - 262 , - 861 , - 776 , - 7 , - 378 , - 65 , - 892 , - 123 , - 494 , - 181 , - 96 , - 239 , - 610 , - 297 , - 212 , - 355 , - 726 , - 413 , - 328 , - 471 , - 842 , - 529 , - 444 , - 587 , - 46 , - 645 , - 560 , - 703 , - 162 , - 761 , - 676 , - 819 , - 278 , - 877 , - 792 , - 23 , - 394 , - 81 , - 908 , - 139 , - 510 , - 197 , - 112 , - 255 , - 626 , - 313 , - 228 , - 371 , - 742 , - 429 , - 344 , - 487 , - 858 , - 545 , - 460 , - 603 , - 62 , - 661 , - 576 , - 719 , - 178 , - 777 , - 692 , - 835 , - 294 , - 893 , - 808 , - 39 , - 410 , - 97 , - 12 , - 155 , - 526 , - 213 , - 128 , - 271 , - 642 , - 329 , - 244 , - 387 , - 758 , - 445 , - 360 , - 503 , - 874 , - 561 , - 476 , - 619 , - 78 , - 677 , - 592 , - 735 , - 194 , - 793 , - 708 , - 851 , - 310 , - 909 , - 824 , - 55 , - 426 , - 113 , - 28 , - 171 , - 542 , - 229 , - 144 , - 287 , - 658 , - 345 , - 260 , - 403 , - 774 , - 461 , - 376 , - 519 , - 890 , - 577 , - 492 , - 635 , - 94 , - 693 , - 608 , - 751 , - 210 , - 809 , - 724 , - 867 , - 326 , - 13 , - 840 , - 71 , - 442 , - 129 , - 44 , - 187 , - 558 , - 245 , - 160 , - 303 , - 674 , - 361 , - 276 , - 419 , - 790 , - 477 , - 392 , - 535 , - 906 , - 593 , - 508 , - 651 , - 110 , - 709 , - 624 , - 767 , - 226 , - 825 , - 740 , - 883 , - 342 , - 29 , - 856 , - 87 , - 458 , - 145 , - 60 , - 203 , - 574 , - 261 , - 176 , - 319 , - 690 , - 377 , - 292 , - 435 , - 806 , - 493 , - 408 , - 551 , - 10 , - 609 , - 524 , - 667 , - 126 , - 725 , - 640 , - 783 , - 242 , - 841 , - 756 , - 899 , - 358 , - 45 , - 872 , - 103 , - 474 , - 161 , - 76 , - 219 , - 590 , - 277 , - 192 , - 335 , - 706 , - 393 , - 308 , - 451 , - 822 , - 509 , - 424 , - 567 , - 26 , - 625 , - 540 , - 683 , - 142 , - 741 , - 656 , - 799 , - 258 , - 857 , - 772 , - 3 , - 374 , - 61 , - 888 , - 119 , - 490 , - 177 , - 92 , - 235 , - 606 , - 293 , - 208 , - 351 , - 722 , - 409 , - 324 , - 467 , - 838 , - 525 , - 440 , - 583 , - 42 , - 641 , - 556 , - 699 , - 158 , - 757 , - 672 , - 815 , - 274 , - 873 , - 788 , - 19 , - 390 , - 77 , - 904 , - 135 , - 506 , - 193 , - 108 , - 251 , - 622 , - 309 , - 224 , - 367 , - 738 , - 425 , - 340 , - 483 , - 854 , - 541 , - 456 , - 599 , - 58 , - 657 , - 572 , - 715 , - 174 , - 773 , - 688 , - 831 , - 290 , - 889 , - 804 , - 35 , - 406 , - 93 , - 8 , - 151 , - 522 , - 209 , - 124 , - 267 , - 638 , - 325 , - 240 , - 383 , - 754 , - 441 , - 356 , - 499 , - 870 , - 557 , - 472 , - 615 , - 74 , - 673 , - 588 , - 731 , - 190 , - 789 , - 704 , - 847 , - 306 , - 905 , - 820 , - 51 , - 422 , - 109 , - 24 , - 167 , - 538 , - 225 , - 140 , - 283 , - 654 , - 341 , - 256 , - 399 , - 770 , - 457 , - 372 , - 515 , - 886 , - 573 , - 488 , - 631 , - 90 , - 689 , - 604 , - 747 , - 206 , - 805 , - 720 , - 863 , - 322 , - 9 , - 836 , - 67 , - 438 , - 125 , - 40 , - 183 , - 554 , - 241 , - 156 , - 299 , - 670 , - 357 , - 272 , - 415 , - 786 , - 473 , - 388 , - 531 , - 902 , - 589 , - 504 , - 647 , - 106 , - 705 , - 620 , - 763 , - 222 , - 821 , - 736 , - 879 , - 338 , - 25 , - 852 , - 83 , - 454 , - 141 , - 56 , - 199 , - 570 , - 257 , - 172 , - 315 , - 686 , - 373 , - 288 , - 431 , - 802 , - 489 , - 404 , - 547 , - 6 , - 605 , - 520 , - 663 , - 122 , - 721 , - 636 , - 779 , - 238 , - 837 , - 752 , - 895 , - 354 , - 41 , - 868 , - 99 , - 470 , - 157 , - 72 , - 215 , - 586 , - 273 , - 188 , - 331 , - 702 , - 389 , - 304 , - 447 , - 818 , - 505 , - 420 , - 563 , - 22 , - 621 , - 536 , - 679 , - 138 , - 737 , - 652 , - 795 , - 254 , - 853 , - 768 , - 911 , - 370 , - 57 , - 884 , - 115 , - 486 , - 173 , - 88 , - 231 , - 602 , - 289 , - 204 , - 347 , - 718 , - 405 , - 320 , - 463 , - 834 , - 521 , - 436 , - 579 , - 38 , - 637 , - 552 , - 695 , - 154 , - 753 , - 668 , - 811 , - 270 , - 869 , - 784 , - 15 , - 386 , - 73 , - 900 , - 131 , - 502 , - 189 , - 104 , - 247 , - 618 , - 305 , - 220 , - 363 , - 734 , - 421 , - 336 , - 479 , - 850 , - 537 , - 452 , - 595 , - 54 , - 653 , - 568 , - 711 , - 170 , - 769 , - 684 , - 827 , - 286 , - 885 , - 800 , - 31 , - 402 , - 89 , - 4 , - 147 , - 518 , - 205 , - 120 , - 263 , - 634 , - 321 , - 236 , - 379 , - 750 , - 437 , - 352 , - 495 , - 866 , - 553 , - 468 , - 611 , - 70 , - 669 , - 584 , - 727 , - 186 , - 785 , - 700 , - 843 , - 302 , - 901 , - 816 , - 47 , - 418 , - 105 , - 20 , - 163 , - 534 , - 221 , - 136 , - 279 , - 650 , - 337 , - 252 , - 395 , - 766 , - 453 , - 368 , - 511 , - 882 , - 569 , - 484 , - 627 , - 86 , - 685 , - 600 , - 743 , - 202 , - 801 , - 716 , - 859 , - 318 , - 5 , - 832 , - 63 , - 434 , - 121 , - 36 , - 179 , - 550 , - 237 , - 152 , - 295 , - 666 , - 353 , - 268 , - 411 , - 782 , - 469 , - 384 , - 527 , - 898 , - 585 , - 500 , - 643 , - 102 , - 701 , - 616 , - 759 , - 218 , - 817 , - 732 , - 875 , - 334 , - 21 , - 848 , - 79 , - 450 , - 137 , - 52 , - 195 , - 566 , - 253 , - 168 , - 311 , - 682 , - 369 , - 284 , - 427 , - 798 , - 485 , - 400 , - 543 , - 2 , - 601 , - 516 , - 659 , - 118 , - 717 , - 632 , - 775 , - 234 , - 833 , - 748 , - 891 , - 350 , - 37 , - 864 , - 95 , - 466 , - 153 , - 68 , - 211 , - 582 , - 269 , - 184 , - 327 , - 698 , - 385 , - 300 , - 443 , - 814 , - 501 , - 416 , - 559 , - 18 , - 617 , - 532 , - 675 , - 134 , - 733 , - 648 , - 791 , - 250 , - 849 , - 764 , - 907 , - 366 , - 53 , - 880 , - 111 , - 482 , - 169 , - 84 , - 227 , - 598 , - 285 , - 200 , - 343 , - 714 , - 401 , - 316 , - 459 , - 830 , - 517 , - 432 , - 575 , - 34 , - 633 , - 548 , - 691 , - 150 , - 749 , - 664 , - 807 , - 266 , - 865 , - 780 , - 11 , - 382 , - 69 , - 896 , - 127 , - 498 , - 185 , - 100 , - 243 , - 614 , - 301 , - 216 , - 359 , - 730 , - 417 , - 332 , - 475 , - 846 , - 533 , - 448 , - 591 , - 50 , - 649 , - 564 , - 707 , - 166 , - 765 , - 680 , - 823 , - 282 , - 881 , - 796 , - 27 , - 398 , - 85 , - 0 , - 73 , - 262 , - 567 , - 60 , - 597 , - 322 , - 163 , - 120 , - 193 , - 382 , - 687 , - 180 , - 717 , - 442 , - 283 , - 240 , - 313 , - 502 , - 807 , - 300 , - 837 , - 562 , - 403 , - 360 , - 433 , - 622 , - 927 , - 420 , - 29 , - 682 , - 523 , - 480 , - 553 , - 742 , - 119 , - 540 , - 149 , - 802 , - 643 , - 600 , - 673 , - 862 , - 239 , - 660 , - 269 , - 922 , - 763 , - 720 , - 793 , - 54 , - 359 , - 780 , - 389 , - 114 , - 883 , - 840 , - 913 , - 174 , - 479 , - 900 , - 509 , - 234 , - 75 , - 32 , - 105 , - 294 , - 599 , - 92 , - 629 , - 354 , - 195 , - 152 , - 225 , - 414 , - 719 , - 212 , - 749 , - 474 , - 315 , - 272 , - 345 , - 534 , - 839 , - 332 , - 869 , - 594 , - 435 , - 392 , - 465 , - 654 , - 31 , - 452 , - 61 , - 714 , - 555 , - 512 , - 585 , - 774 , - 151 , - 572 , - 181 , - 834 , - 675 , - 632 , - 705 , - 894 , - 271 , - 692 , - 301 , - 26 , - 795 , - 752 , - 825 , - 86 , - 391 , - 812 , - 421 , - 146 , - 915 , - 872 , - 17 , - 206 , - 511 , - 4 , - 541 , - 266 , - 107 , - 64 , - 137 , - 326 , - 631 , - 124 , - 661 , - 386 , - 227 , - 184 , - 257 , - 446 , - 751 , - 244 , - 781 , - 506 , - 347 , - 304 , - 377 , - 566 , - 871 , - 364 , - 901 , - 626 , - 467 , - 424 , - 497 , - 686 , - 63 , - 484 , - 93 , - 746 , - 587 , - 544 , - 617 , - 806 , - 183 , - 604 , - 213 , - 866 , - 707 , - 664 , - 737 , - 926 , - 303 , - 724 , - 333 , - 58 , - 827 , - 784 , - 857 , - 118 , - 423 , - 844 , - 453 , - 178 , - 19 , - 904 , - 49 , - 238 , - 543 , - 36 , - 573 , - 298 , - 139 , - 96 , - 169 , - 358 , - 663 , - 156 , - 693 , - 418 , - 259 , - 216 , - 289 , - 478 , - 783 , - 276 , - 813 , - 538 , - 379 , - 336 , - 409 , - 598 , - 903 , - 396 , - 5 , - 658 , - 499 , - 456 , - 529 , - 718 , - 95 , - 516 , - 125 , - 778 , - 619 , - 576 , - 649 , - 838 , - 215 , - 636 , - 245 , - 898 , - 739 , - 696 , - 769 , - 30 , - 335 , - 756 , - 365 , - 90 , - 859 , - 816 , - 889 , - 150 , - 455 , - 876 , - 485 , - 210 , - 51 , - 8 , - 81 , - 270 , - 575 , - 68 , - 605 , - 330 , - 171 , - 128 , - 201 , - 390 , - 695 , - 188 , - 725 , - 450 , - 291 , - 248 , - 321 , - 510 , - 815 , - 308 , - 845 , - 570 , - 411 , - 368 , - 441 , - 630 , - 7 , - 428 , - 37 , - 690 , - 531 , - 488 , - 561 , - 750 , - 127 , - 548 , - 157 , - 810 , - 651 , - 608 , - 681 , - 870 , - 247 , - 668 , - 277 , - 2 , - 771 , - 728 , - 801 , - 62 , - 367 , - 788 , - 397 , - 122 , - 891 , - 848 , - 921 , - 182 , - 487 , - 908 , - 517 , - 242 , - 83 , - 40 , - 113 , - 302 , - 607 , - 100 , - 637 , - 362 , - 203 , - 160 , - 233 , - 422 , - 727 , - 220 , - 757 , - 482 , - 323 , - 280 , - 353 , - 542 , - 847 , - 340 , - 877 , - 602 , - 443 , - 400 , - 473 , - 662 , - 39 , - 460 , - 69 , - 722 , - 563 , - 520 , - 593 , - 782 , - 159 , - 580 , - 189 , - 842 , - 683 , - 640 , - 713 , - 902 , - 279 , - 700 , - 309 , - 34 , - 803 , - 760 , - 833 , - 94 , - 399 , - 820 , - 429 , - 154 , - 923 , - 880 , - 25 , - 214 , - 519 , - 12 , - 549 , - 274 , - 115 , - 72 , - 145 , - 334 , - 639 , - 132 , - 669 , - 394 , - 235 , - 192 , - 265 , - 454 , - 759 , - 252 , - 789 , - 514 , - 355 , - 312 , - 385 , - 574 , - 879 , - 372 , - 909 , - 634 , - 475 , - 432 , - 505 , - 694 , - 71 , - 492 , - 101 , - 754 , - 595 , - 552 , - 625 , - 814 , - 191 , - 612 , - 221 , - 874 , - 715 , - 672 , - 745 , - 6 , - 311 , - 732 , - 341 , - 66 , - 835 , - 792 , - 865 , - 126 , - 431 , - 852 , - 461 , - 186 , - 27 , - 912 , - 57 , - 246 , - 551 , - 44 , - 581 , - 306 , - 147 , - 104 , - 177 , - 366 , - 671 , - 164 , - 701 , - 426 , - 267 , - 224 , - 297 , - 486 , - 791 , - 284 , - 821 , - 546 , - 387 , - 344 , - 417 , - 606 , - 911 , - 404 , - 13 , - 666 , - 507 , - 464 , - 537 , - 726 , - 103 , - 524 , - 133 , - 786 , - 627 , - 584 , - 657 , - 846 , - 223 , - 644 , - 253 , - 906 , - 747 , - 704 , - 777 , - 38 , - 343 , - 764 , - 373 , - 98 , - 867 , - 824 , - 897 , - 158 , - 463 , - 884 , - 493 , - 218 , - 59 , - 16 , - 89 , - 278 , - 583 , - 76 , - 613 , - 338 , - 179 , - 136 , - 209 , - 398 , - 703 , - 196 , - 733 , - 458 , - 299 , - 256 , - 329 , - 518 , - 823 , - 316 , - 853 , - 578 , - 419 , - 376 , - 449 , - 638 , - 15 , - 436 , - 45 , - 698 , - 539 , - 496 , - 569 , - 758 , - 135 , - 556 , - 165 , - 818 , - 659 , - 616 , - 689 , - 878 , - 255 , - 676 , - 285 , - 10 , - 779 , - 736 , - 809 , - 70 , - 375 , - 796 , - 405 , - 130 , - 899 , - 856 , - 1 , - 190 , - 495 , - 916 , - 525 , - 250 , - 91 , - 48 , - 121 , - 310 , - 615 , - 108 , - 645 , - 370 , - 211 , - 168 , - 241 , - 430 , - 735 , - 228 , - 765 , - 490 , - 331 , - 288 , - 361 , - 550 , - 855 , - 348 , - 885 , - 610 , - 451 , - 408 , - 481 , - 670 , - 47 , - 468 , - 77 , - 730 , - 571 , - 528 , - 601 , - 790 , - 167 , - 588 , - 197 , - 850 , - 691 , - 648 , - 721 , - 910 , - 287 , - 708 , - 317 , - 42 , - 811 , - 768 , - 841 , - 102 , - 407 , - 828 , - 437 , - 162 , - 3 , - 888 , - 33 , - 222 , - 527 , - 20 , - 557 , - 282 , - 123 , - 80 , - 153 , - 342 , - 647 , - 140 , - 677 , - 402 , - 243 , - 200 , - 273 , - 462 , - 767 , - 260 , - 797 , - 522 , - 363 , - 320 , - 393 , - 582 , - 887 , - 380 , - 917 , - 642 , - 483 , - 440 , - 513 , - 702 , - 79 , - 500 , - 109 , - 762 , - 603 , - 560 , - 633 , - 822 , - 199 , - 620 , - 229 , - 882 , - 723 , - 680 , - 753 , - 14 , - 319 , - 740 , - 349 , - 74 , - 843 , - 800 , - 873 , - 134 , - 439 , - 860 , - 469 , - 194 , - 35 , - 920 , - 65 , - 254 , - 559 , - 52 , - 589 , - 314 , - 155 , - 112 , - 185 , - 374 , - 679 , - 172 , - 709 , - 434 , - 275 , - 232 , - 305 , - 494 , - 799 , - 292 , - 829 , - 554 , - 395 , - 352 , - 425 , - 614 , - 919 , - 412 , - 21 , - 674 , - 515 , - 472 , - 545 , - 734 , - 111 , - 532 , - 141 , - 794 , - 635 , - 592 , - 665 , - 854 , - 231 , - 652 , - 261 , - 914 , - 755 , - 712 , - 785 , - 46 , - 351 , - 772 , - 381 , - 106 , - 875 , - 832 , - 905 , - 166 , - 471 , - 892 , - 501 , - 226 , - 67 , - 24 , - 97 , - 286 , - 591 , - 84 , - 621 , - 346 , - 187 , - 144 , - 217 , - 406 , - 711 , - 204 , - 741 , - 466 , - 307 , - 264 , - 337 , - 526 , - 831 , - 324 , - 861 , - 586 , - 427 , - 384 , - 457 , - 646 , - 23 , - 444 , - 53 , - 706 , - 547 , - 504 , - 577 , - 766 , - 143 , - 564 , - 173 , - 826 , - 667 , - 624 , - 697 , - 886 , - 263 , - 684 , - 293 , - 18 , - 787 , - 744 , - 817 , - 78 , - 383 , - 804 , - 413 , - 138 , - 907 , - 864 , - 9 , - 198 , - 503 , - 924 , - 533 , - 258 , - 99 , - 56 , - 129 , - 318 , - 623 , - 116 , - 653 , - 378 , - 219 , - 176 , - 249 , - 438 , - 743 , - 236 , - 773 , - 498 , - 339 , - 296 , - 369 , - 558 , - 863 , - 356 , - 893 , - 618 , - 459 , - 416 , - 489 , - 678 , - 55 , - 476 , - 85 , - 738 , - 579 , - 536 , - 609 , - 798 , - 175 , - 596 , - 205 , - 858 , - 699 , - 656 , - 729 , - 918 , - 295 , - 716 , - 325 , - 50 , - 819 , - 776 , - 849 , - 110 , - 415 , - 836 , - 445 , - 170 , - 11 , - 896 , - 41 , - 230 , - 535 , - 28 , - 565 , - 290 , - 131 , - 88 , - 161 , - 350 , - 655 , - 148 , - 685 , - 410 , - 251 , - 208 , - 281 , - 470 , - 775 , - 268 , - 805 , - 530 , - 371 , - 328 , - 401 , - 590 , - 895 , - 388 , - 925 , - 650 , - 491 , - 448 , - 521 , - 710 , - 87 , - 508 , - 117 , - 770 , - 611 , - 568 , - 641 , - 830 , - 207 , - 628 , - 237 , - 890 , - 731 , - 688 , - 761 , - 22 , - 327 , - 748 , - 357 , - 82 , - 851 , - 808 , - 881 , - 142 , - 447 , - 868 , - 477 , - 202 , - 43 , - 0 , - 265 , - 766 , - 559 , - 588 , - 853 , - 410 , - 203 , - 232 , - 497 , - 54 , - 791 , - 820 , - 141 , - 642 , - 435 , - 464 , - 729 , - 286 , - 79 , - 108 , - 373 , - 874 , - 667 , - 696 , - 17 , - 518 , - 311 , - 340 , - 605 , - 162 , - 899 , - 928 , - 249 , - 750 , - 543 , - 572 , - 837 , - 394 , - 187 , - 216 , - 481 , - 38 , - 775 , - 804 , - 125 , - 626 , - 419 , - 448 , - 713 , - 270 , - 63 , - 92 , - 357 , - 858 , - 651 , - 680 , - 1 , - 502 , - 295 , - 324 , - 589 , - 146 , - 883 , - 912 , - 233 , - 734 , - 527 , - 556 , - 821 , - 378 , - 171 , - 200 , - 465 , - 22 , - 759 , - 788 , - 109 , - 610 , - 403 , - 432 , - 697 , - 254 , - 47 , - 76 , - 341 , - 842 , - 635 , - 664 , - 929 , - 486 , - 279 , - 308 , - 573 , - 130 , - 867 , - 896 , - 217 , - 718 , - 511 , - 540 , - 805 , - 362 , - 155 , - 184 , - 449 , - 6 , - 743 , - 772 , - 93 , - 594 , - 387 , - 416 , - 681 , - 238 , - 31 , - 60 , - 325 , - 826 , - 619 , - 648 , - 913 , - 470 , - 263 , - 292 , - 557 , - 114 , - 851 , - 880 , - 201 , - 702 , - 495 , - 524 , - 789 , - 346 , - 139 , - 168 , - 433 , - 934 , - 727 , - 756 , - 77 , - 578 , - 371 , - 400 , - 665 , - 222 , - 15 , - 44 , - 309 , - 810 , - 603 , - 632 , - 897 , - 454 , - 247 , - 276 , - 541 , - 98 , - 835 , - 864 , - 185 , - 686 , - 479 , - 508 , - 773 , - 330 , - 123 , - 152 , - 417 , - 918 , - 711 , - 740 , - 61 , - 562 , - 355 , - 384 , - 649 , - 206 , - 943 , - 28 , - 293 , - 794 , - 587 , - 616 , - 881 , - 438 , - 231 , - 260 , - 525 , - 82 , - 819 , - 848 , - 169 , - 670 , - 463 , - 492 , - 757 , - 314 , - 107 , - 136 , - 401 , - 902 , - 695 , - 724 , - 45 , - 546 , - 339 , - 368 , - 633 , - 190 , - 927 , - 12 , - 277 , - 778 , - 571 , - 600 , - 865 , - 422 , - 215 , - 244 , - 509 , - 66 , - 803 , - 832 , - 153 , - 654 , - 447 , - 476 , - 741 , - 298 , - 91 , - 120 , - 385 , - 886 , - 679 , - 708 , - 29 , - 530 , - 323 , - 352 , - 617 , - 174 , - 911 , - 940 , - 261 , - 762 , - 555 , - 584 , - 849 , - 406 , - 199 , - 228 , - 493 , - 50 , - 787 , - 816 , - 137 , - 638 , - 431 , - 460 , - 725 , - 282 , - 75 , - 104 , - 369 , - 870 , - 663 , - 692 , - 13 , - 514 , - 307 , - 336 , - 601 , - 158 , - 895 , - 924 , - 245 , - 746 , - 539 , - 568 , - 833 , - 390 , - 183 , - 212 , - 477 , - 34 , - 771 , - 800 , - 121 , - 622 , - 415 , - 444 , - 709 , - 266 , - 59 , - 88 , - 353 , - 854 , - 647 , - 676 , - 941 , - 498 , - 291 , - 320 , - 585 , - 142 , - 879 , - 908 , - 229 , - 730 , - 523 , - 552 , - 817 , - 374 , - 167 , - 196 , - 461 , - 18 , - 755 , - 784 , - 105 , - 606 , - 399 , - 428 , - 693 , - 250 , - 43 , - 72 , - 337 , - 838 , - 631 , - 660 , - 925 , - 482 , - 275 , - 304 , - 569 , - 126 , - 863 , - 892 , - 213 , - 714 , - 507 , - 536 , - 801 , - 358 , - 151 , - 180 , - 445 , - 2 , - 739 , - 768 , - 89 , - 590 , - 383 , - 412 , - 677 , - 234 , - 27 , - 56 , - 321 , - 822 , - 615 , - 644 , - 909 , - 466 , - 259 , - 288 , - 553 , - 110 , - 847 , - 876 , - 197 , - 698 , - 491 , - 520 , - 785 , - 342 , - 135 , - 164 , - 429 , - 930 , - 723 , - 752 , - 73 , - 574 , - 367 , - 396 , - 661 , - 218 , - 11 , - 40 , - 305 , - 806 , - 599 , - 628 , - 893 , - 450 , - 243 , - 272 , - 537 , - 94 , - 831 , - 860 , - 181 , - 682 , - 475 , - 504 , - 769 , - 326 , - 119 , - 148 , - 413 , - 914 , - 707 , - 736 , - 57 , - 558 , - 351 , - 380 , - 645 , - 202 , - 939 , - 24 , - 289 , - 790 , - 583 , - 612 , - 877 , - 434 , - 227 , - 256 , - 521 , - 78 , - 815 , - 844 , - 165 , - 666 , - 459 , - 488 , - 753 , - 310 , - 103 , - 132 , - 397 , - 898 , - 691 , - 720 , - 41 , - 542 , - 335 , - 364 , - 629 , - 186 , - 923 , - 8 , - 273 , - 774 , - 567 , - 596 , - 861 , - 418 , - 211 , - 240 , - 505 , - 62 , - 799 , - 828 , - 149 , - 650 , - 443 , - 472 , - 737 , - 294 , - 87 , - 116 , - 381 , - 882 , - 675 , - 704 , - 25 , - 526 , - 319 , - 348 , - 613 , - 170 , - 907 , - 936 , - 257 , - 758 , - 551 , - 580 , - 845 , - 402 , - 195 , - 224 , - 489 , - 46 , - 783 , - 812 , - 133 , - 634 , - 427 , - 456 , - 721 , - 278 , - 71 , - 100 , - 365 , - 866 , - 659 , - 688 , - 9 , - 510 , - 303 , - 332 , - 597 , - 154 , - 891 , - 920 , - 241 , - 742 , - 535 , - 564 , - 829 , - 386 , - 179 , - 208 , - 473 , - 30 , - 767 , - 796 , - 117 , - 618 , - 411 , - 440 , - 705 , - 262 , - 55 , - 84 , - 349 , - 850 , - 643 , - 672 , - 937 , - 494 , - 287 , - 316 , - 581 , - 138 , - 875 , - 904 , - 225 , - 726 , - 519 , - 548 , - 813 , - 370 , - 163 , - 192 , - 457 , - 14 , - 751 , - 780 , - 101 , - 602 , - 395 , - 424 , - 689 , - 246 , - 39 , - 68 , - 333 , - 834 , - 627 , - 656 , - 921 , - 478 , - 271 , - 300 , - 565 , - 122 , - 859 , - 888 , - 209 , - 710 , - 503 , - 532 , - 797 , - 354 , - 147 , - 176 , - 441 , - 942 , - 735 , - 764 , - 85 , - 586 , - 379 , - 408 , - 673 , - 230 , - 23 , - 52 , - 317 , - 818 , - 611 , - 640 , - 905 , - 462 , - 255 , - 284 , - 549 , - 106 , - 843 , - 872 , - 193 , - 694 , - 487 , - 516 , - 781 , - 338 , - 131 , - 160 , - 425 , - 926 , - 719 , - 748 , - 69 , - 570 , - 363 , - 392 , - 657 , - 214 , - 7 , - 36 , - 301 , - 802 , - 595 , - 624 , - 889 , - 446 , - 239 , - 268 , - 533 , - 90 , - 827 , - 856 , - 177 , - 678 , - 471 , - 500 , - 765 , - 322 , - 115 , - 144 , - 409 , - 910 , - 703 , - 732 , - 53 , - 554 , - 347 , - 376 , - 641 , - 198 , - 935 , - 20 , - 285 , - 786 , - 579 , - 608 , - 873 , - 430 , - 223 , - 252 , - 517 , - 74 , - 811 , - 840 , - 161 , - 662 , - 455 , - 484 , - 749 , - 306 , - 99 , - 128 , - 393 , - 894 , - 687 , - 716 , - 37 , - 538 , - 331 , - 360 , - 625 , - 182 , - 919 , - 4 , - 269 , - 770 , - 563 , - 592 , - 857 , - 414 , - 207 , - 236 , - 501 , - 58 , - 795 , - 824 , - 145 , - 646 , - 439 , - 468 , - 733 , - 290 , - 83 , - 112 , - 377 , - 878 , - 671 , - 700 , - 21 , - 522 , - 315 , - 344 , - 609 , - 166 , - 903 , - 932 , - 253 , - 754 , - 547 , - 576 , - 841 , - 398 , - 191 , - 220 , - 485 , - 42 , - 779 , - 808 , - 129 , - 630 , - 423 , - 452 , - 717 , - 274 , - 67 , - 96 , - 361 , - 862 , - 655 , - 684 , - 5 , - 506 , - 299 , - 328 , - 593 , - 150 , - 887 , - 916 , - 237 , - 738 , - 531 , - 560 , - 825 , - 382 , - 175 , - 204 , - 469 , - 26 , - 763 , - 792 , - 113 , - 614 , - 407 , - 436 , - 701 , - 258 , - 51 , - 80 , - 345 , - 846 , - 639 , - 668 , - 933 , - 490 , - 283 , - 312 , - 577 , - 134 , - 871 , - 900 , - 221 , - 722 , - 515 , - 544 , - 809 , - 366 , - 159 , - 188 , - 453 , - 10 , - 747 , - 776 , - 97 , - 598 , - 391 , - 420 , - 685 , - 242 , - 35 , - 64 , - 329 , - 830 , - 623 , - 652 , - 917 , - 474 , - 267 , - 296 , - 561 , - 118 , - 855 , - 884 , - 205 , - 706 , - 499 , - 528 , - 793 , - 350 , - 143 , - 172 , - 437 , - 938 , - 731 , - 760 , - 81 , - 582 , - 375 , - 404 , - 669 , - 226 , - 19 , - 48 , - 313 , - 814 , - 607 , - 636 , - 901 , - 458 , - 251 , - 280 , - 545 , - 102 , - 839 , - 868 , - 189 , - 690 , - 483 , - 512 , - 777 , - 334 , - 127 , - 156 , - 421 , - 922 , - 715 , - 744 , - 65 , - 566 , - 359 , - 388 , - 653 , - 210 , - 3 , - 32 , - 297 , - 798 , - 591 , - 620 , - 885 , - 442 , - 235 , - 264 , - 529 , - 86 , - 823 , - 852 , - 173 , - 674 , - 467 , - 496 , - 761 , - 318 , - 111 , - 140 , - 405 , - 906 , - 699 , - 728 , - 49 , - 550 , - 343 , - 372 , - 637 , - 194 , - 931 , - 16 , - 281 , - 782 , - 575 , - 604 , - 869 , - 426 , - 219 , - 248 , - 513 , - 70 , - 807 , - 836 , - 157 , - 658 , - 451 , - 480 , - 745 , - 302 , - 95 , - 124 , - 389 , - 890 , - 683 , - 712 , - 33 , - 534 , - 327 , - 356 , - 621 , - 178 , - 915 , - 0 , - 89 , - 298 , - 627 , - 116 , - 685 , - 414 , - 263 , - 232 , - 321 , - 530 , - 859 , - 348 , - 917 , - 646 , - 495 , - 464 , - 553 , - 762 , - 131 , - 580 , - 189 , - 878 , - 727 , - 696 , - 785 , - 34 , - 363 , - 812 , - 421 , - 150 , - 959 , - 928 , - 57 , - 266 , - 595 , - 84 , - 653 , - 382 , - 231 , - 200 , - 289 , - 498 , - 827 , - 316 , - 885 , - 614 , - 463 , - 432 , - 521 , - 730 , - 99 , - 548 , - 157 , - 846 , - 695 , - 664 , - 753 , - 2 , - 331 , - 780 , - 389 , - 118 , - 927 , - 896 , - 25 , - 234 , - 563 , - 52 , - 621 , - 350 , - 199 , - 168 , - 257 , - 466 , - 795 , - 284 , - 853 , - 582 , - 431 , - 400 , - 489 , - 698 , - 67 , - 516 , - 125 , - 814 , - 663 , - 632 , - 721 , - 930 , - 299 , - 748 , - 357 , - 86 , - 895 , - 864 , - 953 , - 202 , - 531 , - 20 , - 589 , - 318 , - 167 , - 136 , - 225 , - 434 , - 763 , - 252 , - 821 , - 550 , - 399 , - 368 , - 457 , - 666 , - 35 , - 484 , - 93 , - 782 , - 631 , - 600 , - 689 , - 898 , - 267 , - 716 , - 325 , - 54 , - 863 , - 832 , - 921 , - 170 , - 499 , - 948 , - 557 , - 286 , - 135 , - 104 , - 193 , - 402 , - 731 , - 220 , - 789 , - 518 , - 367 , - 336 , - 425 , - 634 , - 3 , - 452 , - 61 , - 750 , - 599 , - 568 , - 657 , - 866 , - 235 , - 684 , - 293 , - 22 , - 831 , - 800 , - 889 , - 138 , - 467 , - 916 , - 525 , - 254 , - 103 , - 72 , - 161 , - 370 , - 699 , - 188 , - 757 , - 486 , - 335 , - 304 , - 393 , - 602 , - 931 , - 420 , - 29 , - 718 , - 567 , - 536 , - 625 , - 834 , - 203 , - 652 , - 261 , - 950 , - 799 , - 768 , - 857 , - 106 , - 435 , - 884 , - 493 , - 222 , - 71 , - 40 , - 129 , - 338 , - 667 , - 156 , - 725 , - 454 , - 303 , - 272 , - 361 , - 570 , - 899 , - 388 , - 957 , - 686 , - 535 , - 504 , - 593 , - 802 , - 171 , - 620 , - 229 , - 918 , - 767 , - 736 , - 825 , - 74 , - 403 , - 852 , - 461 , - 190 , - 39 , - 8 , - 97 , - 306 , - 635 , - 124 , - 693 , - 422 , - 271 , - 240 , - 329 , - 538 , - 867 , - 356 , - 925 , - 654 , - 503 , - 472 , - 561 , - 770 , - 139 , - 588 , - 197 , - 886 , - 735 , - 704 , - 793 , - 42 , - 371 , - 820 , - 429 , - 158 , - 7 , - 936 , - 65 , - 274 , - 603 , - 92 , - 661 , - 390 , - 239 , - 208 , - 297 , - 506 , - 835 , - 324 , - 893 , - 622 , - 471 , - 440 , - 529 , - 738 , - 107 , - 556 , - 165 , - 854 , - 703 , - 672 , - 761 , - 10 , - 339 , - 788 , - 397 , - 126 , - 935 , - 904 , - 33 , - 242 , - 571 , - 60 , - 629 , - 358 , - 207 , - 176 , - 265 , - 474 , - 803 , - 292 , - 861 , - 590 , - 439 , - 408 , - 497 , - 706 , - 75 , - 524 , - 133 , - 822 , - 671 , - 640 , - 729 , - 938 , - 307 , - 756 , - 365 , - 94 , - 903 , - 872 , - 1 , - 210 , - 539 , - 28 , - 597 , - 326 , - 175 , - 144 , - 233 , - 442 , - 771 , - 260 , - 829 , - 558 , - 407 , - 376 , - 465 , - 674 , - 43 , - 492 , - 101 , - 790 , - 639 , - 608 , - 697 , - 906 , - 275 , - 724 , - 333 , - 62 , - 871 , - 840 , - 929 , - 178 , - 507 , - 956 , - 565 , - 294 , - 143 , - 112 , - 201 , - 410 , - 739 , - 228 , - 797 , - 526 , - 375 , - 344 , - 433 , - 642 , - 11 , - 460 , - 69 , - 758 , - 607 , - 576 , - 665 , - 874 , - 243 , - 692 , - 301 , - 30 , - 839 , - 808 , - 897 , - 146 , - 475 , - 924 , - 533 , - 262 , - 111 , - 80 , - 169 , - 378 , - 707 , - 196 , - 765 , - 494 , - 343 , - 312 , - 401 , - 610 , - 939 , - 428 , - 37 , - 726 , - 575 , - 544 , - 633 , - 842 , - 211 , - 660 , - 269 , - 958 , - 807 , - 776 , - 865 , - 114 , - 443 , - 892 , - 501 , - 230 , - 79 , - 48 , - 137 , - 346 , - 675 , - 164 , - 733 , - 462 , - 311 , - 280 , - 369 , - 578 , - 907 , - 396 , - 5 , - 694 , - 543 , - 512 , - 601 , - 810 , - 179 , - 628 , - 237 , - 926 , - 775 , - 744 , - 833 , - 82 , - 411 , - 860 , - 469 , - 198 , - 47 , - 16 , - 105 , - 314 , - 643 , - 132 , - 701 , - 430 , - 279 , - 248 , - 337 , - 546 , - 875 , - 364 , - 933 , - 662 , - 511 , - 480 , - 569 , - 778 , - 147 , - 596 , - 205 , - 894 , - 743 , - 712 , - 801 , - 50 , - 379 , - 828 , - 437 , - 166 , - 15 , - 944 , - 73 , - 282 , - 611 , - 100 , - 669 , - 398 , - 247 , - 216 , - 305 , - 514 , - 843 , - 332 , - 901 , - 630 , - 479 , - 448 , - 537 , - 746 , - 115 , - 564 , - 173 , - 862 , - 711 , - 680 , - 769 , - 18 , - 347 , - 796 , - 405 , - 134 , - 943 , - 912 , - 41 , - 250 , - 579 , - 68 , - 637 , - 366 , - 215 , - 184 , - 273 , - 482 , - 811 , - 300 , - 869 , - 598 , - 447 , - 416 , - 505 , - 714 , - 83 , - 532 , - 141 , - 830 , - 679 , - 648 , - 737 , - 946 , - 315 , - 764 , - 373 , - 102 , - 911 , - 880 , - 9 , - 218 , - 547 , - 36 , - 605 , - 334 , - 183 , - 152 , - 241 , - 450 , - 779 , - 268 , - 837 , - 566 , - 415 , - 384 , - 473 , - 682 , - 51 , - 500 , - 109 , - 798 , - 647 , - 616 , - 705 , - 914 , - 283 , - 732 , - 341 , - 70 , - 879 , - 848 , - 937 , - 186 , - 515 , - 4 , - 573 , - 302 , - 151 , - 120 , - 209 , - 418 , - 747 , - 236 , - 805 , - 534 , - 383 , - 352 , - 441 , - 650 , - 19 , - 468 , - 77 , - 766 , - 615 , - 584 , - 673 , - 882 , - 251 , - 700 , - 309 , - 38 , - 847 , - 816 , - 905 , - 154 , - 483 , - 932 , - 541 , - 270 , - 119 , - 88 , - 177 , - 386 , - 715 , - 204 , - 773 , - 502 , - 351 , - 320 , - 409 , - 618 , - 947 , - 436 , - 45 , - 734 , - 583 , - 552 , - 641 , - 850 , - 219 , - 668 , - 277 , - 6 , - 815 , - 784 , - 873 , - 122 , - 451 , - 900 , - 509 , - 238 , - 87 , - 56 , - 145 , - 354 , - 683 , - 172 , - 741 , - 470 , - 319 , - 288 , - 377 , - 586 , - 915 , - 404 , - 13 , - 702 , - 551 , - 520 , - 609 , - 818 , - 187 , - 636 , - 245 , - 934 , - 783 , - 752 , - 841 , - 90 , - 419 , - 868 , - 477 , - 206 , - 55 , - 24 , - 113 , - 322 , - 651 , - 140 , - 709 , - 438 , - 287 , - 256 , - 345 , - 554 , - 883 , - 372 , - 941 , - 670 , - 519 , - 488 , - 577 , - 786 , - 155 , - 604 , - 213 , - 902 , - 751 , - 720 , - 809 , - 58 , - 387 , - 836 , - 445 , - 174 , - 23 , - 952 , - 81 , - 290 , - 619 , - 108 , - 677 , - 406 , - 255 , - 224 , - 313 , - 522 , - 851 , - 340 , - 909 , - 638 , - 487 , - 456 , - 545 , - 754 , - 123 , - 572 , - 181 , - 870 , - 719 , - 688 , - 777 , - 26 , - 355 , - 804 , - 413 , - 142 , - 951 , - 920 , - 49 , - 258 , - 587 , - 76 , - 645 , - 374 , - 223 , - 192 , - 281 , - 490 , - 819 , - 308 , - 877 , - 606 , - 455 , - 424 , - 513 , - 722 , - 91 , - 540 , - 149 , - 838 , - 687 , - 656 , - 745 , - 954 , - 323 , - 772 , - 381 , - 110 , - 919 , - 888 , - 17 , - 226 , - 555 , - 44 , - 613 , - 342 , - 191 , - 160 , - 249 , - 458 , - 787 , - 276 , - 845 , - 574 , - 423 , - 392 , - 481 , - 690 , - 59 , - 508 , - 117 , - 806 , - 655 , - 624 , - 713 , - 922 , - 291 , - 740 , - 349 , - 78 , - 887 , - 856 , - 945 , - 194 , - 523 , - 12 , - 581 , - 310 , - 159 , - 128 , - 217 , - 426 , - 755 , - 244 , - 813 , - 542 , - 391 , - 360 , - 449 , - 658 , - 27 , - 476 , - 85 , - 774 , - 623 , - 592 , - 681 , - 890 , - 259 , - 708 , - 317 , - 46 , - 855 , - 824 , - 913 , - 162 , - 491 , - 940 , - 549 , - 278 , - 127 , - 96 , - 185 , - 394 , - 723 , - 212 , - 781 , - 510 , - 359 , - 328 , - 417 , - 626 , - 955 , - 444 , - 53 , - 742 , - 591 , - 560 , - 649 , - 858 , - 227 , - 676 , - 285 , - 14 , - 823 , - 792 , - 881 , - 130 , - 459 , - 908 , - 517 , - 246 , - 95 , - 64 , - 153 , - 362 , - 691 , - 180 , - 749 , - 478 , - 327 , - 296 , - 385 , - 594 , - 923 , - 412 , - 21 , - 710 , - 559 , - 528 , - 617 , - 826 , - 195 , - 644 , - 253 , - 942 , - 791 , - 760 , - 849 , - 98 , - 427 , - 876 , - 485 , - 214 , - 63 , - 32 , - 121 , - 330 , - 659 , - 148 , - 717 , - 446 , - 295 , - 264 , - 353 , - 562 , - 891 , - 380 , - 949 , - 678 , - 527 , - 496 , - 585 , - 794 , - 163 , - 612 , - 221 , - 910 , - 759 , - 728 , - 817 , - 66 , - 395 , - 844 , - 453 , - 182 , - 31 , - 0 , - 181 , - 606 , - 299 , - 236 , - 417 , - 842 , - 535 , - 472 , - 653 , - 102 , - 771 , - 708 , - 889 , - 338 , - 31 , - 944 , - 149 , - 574 , - 267 , - 204 , - 385 , - 810 , - 503 , - 440 , - 621 , - 70 , - 739 , - 676 , - 857 , - 306 , - 975 , - 912 , - 117 , - 542 , - 235 , - 172 , - 353 , - 778 , - 471 , - 408 , - 589 , - 38 , - 707 , - 644 , - 825 , - 274 , - 943 , - 880 , - 85 , - 510 , - 203 , - 140 , - 321 , - 746 , - 439 , - 376 , - 557 , - 6 , - 675 , - 612 , - 793 , - 242 , - 911 , - 848 , - 53 , - 478 , - 171 , - 108 , - 289 , - 714 , - 407 , - 344 , - 525 , - 950 , - 643 , - 580 , - 761 , - 210 , - 879 , - 816 , - 21 , - 446 , - 139 , - 76 , - 257 , - 682 , - 375 , - 312 , - 493 , - 918 , - 611 , - 548 , - 729 , - 178 , - 847 , - 784 , - 965 , - 414 , - 107 , - 44 , - 225 , - 650 , - 343 , - 280 , - 461 , - 886 , - 579 , - 516 , - 697 , - 146 , - 815 , - 752 , - 933 , - 382 , - 75 , - 12 , - 193 , - 618 , - 311 , - 248 , - 429 , - 854 , - 547 , - 484 , - 665 , - 114 , - 783 , - 720 , - 901 , - 350 , - 43 , - 956 , - 161 , - 586 , - 279 , - 216 , - 397 , - 822 , - 515 , - 452 , - 633 , - 82 , - 751 , - 688 , - 869 , - 318 , - 11 , - 924 , - 129 , - 554 , - 247 , - 184 , - 365 , - 790 , - 483 , - 420 , - 601 , - 50 , - 719 , - 656 , - 837 , - 286 , - 955 , - 892 , - 97 , - 522 , - 215 , - 152 , - 333 , - 758 , - 451 , - 388 , - 569 , - 18 , - 687 , - 624 , - 805 , - 254 , - 923 , - 860 , - 65 , - 490 , - 183 , - 120 , - 301 , - 726 , - 419 , - 356 , - 537 , - 962 , - 655 , - 592 , - 773 , - 222 , - 891 , - 828 , - 33 , - 458 , - 151 , - 88 , - 269 , - 694 , - 387 , - 324 , - 505 , - 930 , - 623 , - 560 , - 741 , - 190 , - 859 , - 796 , - 1 , - 426 , - 119 , - 56 , - 237 , - 662 , - 355 , - 292 , - 473 , - 898 , - 591 , - 528 , - 709 , - 158 , - 827 , - 764 , - 945 , - 394 , - 87 , - 24 , - 205 , - 630 , - 323 , - 260 , - 441 , - 866 , - 559 , - 496 , - 677 , - 126 , - 795 , - 732 , - 913 , - 362 , - 55 , - 968 , - 173 , - 598 , - 291 , - 228 , - 409 , - 834 , - 527 , - 464 , - 645 , - 94 , - 763 , - 700 , - 881 , - 330 , - 23 , - 936 , - 141 , - 566 , - 259 , - 196 , - 377 , - 802 , - 495 , - 432 , - 613 , - 62 , - 731 , - 668 , - 849 , - 298 , - 967 , - 904 , - 109 , - 534 , - 227 , - 164 , - 345 , - 770 , - 463 , - 400 , - 581 , - 30 , - 699 , - 636 , - 817 , - 266 , - 935 , - 872 , - 77 , - 502 , - 195 , - 132 , - 313 , - 738 , - 431 , - 368 , - 549 , - 974 , - 667 , - 604 , - 785 , - 234 , - 903 , - 840 , - 45 , - 470 , - 163 , - 100 , - 281 , - 706 , - 399 , - 336 , - 517 , - 942 , - 635 , - 572 , - 753 , - 202 , - 871 , - 808 , - 13 , - 438 , - 131 , - 68 , - 249 , - 674 , - 367 , - 304 , - 485 , - 910 , - 603 , - 540 , - 721 , - 170 , - 839 , - 776 , - 957 , - 406 , - 99 , - 36 , - 217 , - 642 , - 335 , - 272 , - 453 , - 878 , - 571 , - 508 , - 689 , - 138 , - 807 , - 744 , - 925 , - 374 , - 67 , - 4 , - 185 , - 610 , - 303 , - 240 , - 421 , - 846 , - 539 , - 476 , - 657 , - 106 , - 775 , - 712 , - 893 , - 342 , - 35 , - 948 , - 153 , - 578 , - 271 , - 208 , - 389 , - 814 , - 507 , - 444 , - 625 , - 74 , - 743 , - 680 , - 861 , - 310 , - 3 , - 916 , - 121 , - 546 , - 239 , - 176 , - 357 , - 782 , - 475 , - 412 , - 593 , - 42 , - 711 , - 648 , - 829 , - 278 , - 947 , - 884 , - 89 , - 514 , - 207 , - 144 , - 325 , - 750 , - 443 , - 380 , - 561 , - 10 , - 679 , - 616 , - 797 , - 246 , - 915 , - 852 , - 57 , - 482 , - 175 , - 112 , - 293 , - 718 , - 411 , - 348 , - 529 , - 954 , - 647 , - 584 , - 765 , - 214 , - 883 , - 820 , - 25 , - 450 , - 143 , - 80 , - 261 , - 686 , - 379 , - 316 , - 497 , - 922 , - 615 , - 552 , - 733 , - 182 , - 851 , - 788 , - 969 , - 418 , - 111 , - 48 , - 229 , - 654 , - 347 , - 284 , - 465 , - 890 , - 583 , - 520 , - 701 , - 150 , - 819 , - 756 , - 937 , - 386 , - 79 , - 16 , - 197 , - 622 , - 315 , - 252 , - 433 , - 858 , - 551 , - 488 , - 669 , - 118 , - 787 , - 724 , - 905 , - 354 , - 47 , - 960 , - 165 , - 590 , - 283 , - 220 , - 401 , - 826 , - 519 , - 456 , - 637 , - 86 , - 755 , - 692 , - 873 , - 322 , - 15 , - 928 , - 133 , - 558 , - 251 , - 188 , - 369 , - 794 , - 487 , - 424 , - 605 , - 54 , - 723 , - 660 , - 841 , - 290 , - 959 , - 896 , - 101 , - 526 , - 219 , - 156 , - 337 , - 762 , - 455 , - 392 , - 573 , - 22 , - 691 , - 628 , - 809 , - 258 , - 927 , - 864 , - 69 , - 494 , - 187 , - 124 , - 305 , - 730 , - 423 , - 360 , - 541 , - 966 , - 659 , - 596 , - 777 , - 226 , - 895 , - 832 , - 37 , - 462 , - 155 , - 92 , - 273 , - 698 , - 391 , - 328 , - 509 , - 934 , - 627 , - 564 , - 745 , - 194 , - 863 , - 800 , - 5 , - 430 , - 123 , - 60 , - 241 , - 666 , - 359 , - 296 , - 477 , - 902 , - 595 , - 532 , - 713 , - 162 , - 831 , - 768 , - 949 , - 398 , - 91 , - 28 , - 209 , - 634 , - 327 , - 264 , - 445 , - 870 , - 563 , - 500 , - 681 , - 130 , - 799 , - 736 , - 917 , - 366 , - 59 , - 972 , - 177 , - 602 , - 295 , - 232 , - 413 , - 838 , - 531 , - 468 , - 649 , - 98 , - 767 , - 704 , - 885 , - 334 , - 27 , - 940 , - 145 , - 570 , - 263 , - 200 , - 381 , - 806 , - 499 , - 436 , - 617 , - 66 , - 735 , - 672 , - 853 , - 302 , - 971 , - 908 , - 113 , - 538 , - 231 , - 168 , - 349 , - 774 , - 467 , - 404 , - 585 , - 34 , - 703 , - 640 , - 821 , - 270 , - 939 , - 876 , - 81 , - 506 , - 199 , - 136 , - 317 , - 742 , - 435 , - 372 , - 553 , - 2 , - 671 , - 608 , - 789 , - 238 , - 907 , - 844 , - 49 , - 474 , - 167 , - 104 , - 285 , - 710 , - 403 , - 340 , - 521 , - 946 , - 639 , - 576 , - 757 , - 206 , - 875 , - 812 , - 17 , - 442 , - 135 , - 72 , - 253 , - 678 , - 371 , - 308 , - 489 , - 914 , - 607 , - 544 , - 725 , - 174 , - 843 , - 780 , - 961 , - 410 , - 103 , - 40 , - 221 , - 646 , - 339 , - 276 , - 457 , - 882 , - 575 , - 512 , - 693 , - 142 , - 811 , - 748 , - 929 , - 378 , - 71 , - 8 , - 189 , - 614 , - 307 , - 244 , - 425 , - 850 , - 543 , - 480 , - 661 , - 110 , - 779 , - 716 , - 897 , - 346 , - 39 , - 952 , - 157 , - 582 , - 275 , - 212 , - 393 , - 818 , - 511 , - 448 , - 629 , - 78 , - 747 , - 684 , - 865 , - 314 , - 7 , - 920 , - 125 , - 550 , - 243 , - 180 , - 361 , - 786 , - 479 , - 416 , - 597 , - 46 , - 715 , - 652 , - 833 , - 282 , - 951 , - 888 , - 93 , - 518 , - 211 , - 148 , - 329 , - 754 , - 447 , - 384 , - 565 , - 14 , - 683 , - 620 , - 801 , - 250 , - 919 , - 856 , - 61 , - 486 , - 179 , - 116 , - 297 , - 722 , - 415 , - 352 , - 533 , - 958 , - 651 , - 588 , - 769 , - 218 , - 887 , - 824 , - 29 , - 454 , - 147 , - 84 , - 265 , - 690 , - 383 , - 320 , - 501 , - 926 , - 619 , - 556 , - 737 , - 186 , - 855 , - 792 , - 973 , - 422 , - 115 , - 52 , - 233 , - 658 , - 351 , - 288 , - 469 , - 894 , - 587 , - 524 , - 705 , - 154 , - 823 , - 760 , - 941 , - 390 , - 83 , - 20 , - 201 , - 626 , - 319 , - 256 , - 437 , - 862 , - 555 , - 492 , - 673 , - 122 , - 791 , - 728 , - 909 , - 358 , - 51 , - 964 , - 169 , - 594 , - 287 , - 224 , - 405 , - 830 , - 523 , - 460 , - 641 , - 90 , - 759 , - 696 , - 877 , - 326 , - 19 , - 932 , - 137 , - 562 , - 255 , - 192 , - 373 , - 798 , - 491 , - 428 , - 609 , - 58 , - 727 , - 664 , - 845 , - 294 , - 963 , - 900 , - 105 , - 530 , - 223 , - 160 , - 341 , - 766 , - 459 , - 396 , - 577 , - 26 , - 695 , - 632 , - 813 , - 262 , - 931 , - 868 , - 73 , - 498 , - 191 , - 128 , - 309 , - 734 , - 427 , - 364 , - 545 , - 970 , - 663 , - 600 , - 781 , - 230 , - 899 , - 836 , - 41 , - 466 , - 159 , - 96 , - 277 , - 702 , - 395 , - 332 , - 513 , - 938 , - 631 , - 568 , - 749 , - 198 , - 867 , - 804 , - 9 , - 434 , - 127 , - 64 , - 245 , - 670 , - 363 , - 300 , - 481 , - 906 , - 599 , - 536 , - 717 , - 166 , - 835 , - 772 , - 953 , - 402 , - 95 , - 32 , - 213 , - 638 , - 331 , - 268 , - 449 , - 874 , - 567 , - 504 , - 685 , - 134 , - 803 , - 740 , - 921 , - 370 , - 63 , - 0 , - 189 , - 626 , - 319 , - 260 , - 449 , - 886 , - 579 , - 520 , - 709 , - 154 , - 839 , - 780 , - 969 , - 414 , - 107 , - 48 , - 237 , - 674 , - 367 , - 308 , - 497 , - 934 , - 627 , - 568 , - 757 , - 202 , - 887 , - 828 , - 25 , - 462 , - 155 , - 96 , - 285 , - 722 , - 415 , - 356 , - 545 , - 982 , - 675 , - 616 , - 805 , - 250 , - 935 , - 876 , - 73 , - 510 , - 203 , - 144 , - 333 , - 770 , - 463 , - 404 , - 593 , - 38 , - 723 , - 664 , - 853 , - 298 , - 983 , - 924 , - 121 , - 558 , - 251 , - 192 , - 381 , - 818 , - 511 , - 452 , - 641 , - 86 , - 771 , - 712 , - 901 , - 346 , - 39 , - 972 , - 169 , - 606 , - 299 , - 240 , - 429 , - 866 , - 559 , - 500 , - 689 , - 134 , - 819 , - 760 , - 949 , - 394 , - 87 , - 28 , - 217 , - 654 , - 347 , - 288 , - 477 , - 914 , - 607 , - 548 , - 737 , - 182 , - 867 , - 808 , - 5 , - 442 , - 135 , - 76 , - 265 , - 702 , - 395 , - 336 , - 525 , - 962 , - 655 , - 596 , - 785 , - 230 , - 915 , - 856 , - 53 , - 490 , - 183 , - 124 , - 313 , - 750 , - 443 , - 384 , - 573 , - 18 , - 703 , - 644 , - 833 , - 278 , - 963 , - 904 , - 101 , - 538 , - 231 , - 172 , - 361 , - 798 , - 491 , - 432 , - 621 , - 66 , - 751 , - 692 , - 881 , - 326 , - 19 , - 952 , - 149 , - 586 , - 279 , - 220 , - 409 , - 846 , - 539 , - 480 , - 669 , - 114 , - 799 , - 740 , - 929 , - 374 , - 67 , - 8 , - 197 , - 634 , - 327 , - 268 , - 457 , - 894 , - 587 , - 528 , - 717 , - 162 , - 847 , - 788 , - 977 , - 422 , - 115 , - 56 , - 245 , - 682 , - 375 , - 316 , - 505 , - 942 , - 635 , - 576 , - 765 , - 210 , - 895 , - 836 , - 33 , - 470 , - 163 , - 104 , - 293 , - 730 , - 423 , - 364 , - 553 , - 990 , - 683 , - 624 , - 813 , - 258 , - 943 , - 884 , - 81 , - 518 , - 211 , - 152 , - 341 , - 778 , - 471 , - 412 , - 601 , - 46 , - 731 , - 672 , - 861 , - 306 , - 991 , - 932 , - 129 , - 566 , - 259 , - 200 , - 389 , - 826 , - 519 , - 460 , - 649 , - 94 , - 779 , - 720 , - 909 , - 354 , - 47 , - 980 , - 177 , - 614 , - 307 , - 248 , - 437 , - 874 , - 567 , - 508 , - 697 , - 142 , - 827 , - 768 , - 957 , - 402 , - 95 , - 36 , - 225 , - 662 , - 355 , - 296 , - 485 , - 922 , - 615 , - 556 , - 745 , - 190 , - 875 , - 816 , - 13 , - 450 , - 143 , - 84 , - 273 , - 710 , - 403 , - 344 , - 533 , - 970 , - 663 , - 604 , - 793 , - 238 , - 923 , - 864 , - 61 , - 498 , - 191 , - 132 , - 321 , - 758 , - 451 , - 392 , - 581 , - 26 , - 711 , - 652 , - 841 , - 286 , - 971 , - 912 , - 109 , - 546 , - 239 , - 180 , - 369 , - 806 , - 499 , - 440 , - 629 , - 74 , - 759 , - 700 , - 889 , - 334 , - 27 , - 960 , - 157 , - 594 , - 287 , - 228 , - 417 , - 854 , - 547 , - 488 , - 677 , - 122 , - 807 , - 748 , - 937 , - 382 , - 75 , - 16 , - 205 , - 642 , - 335 , - 276 , - 465 , - 902 , - 595 , - 536 , - 725 , - 170 , - 855 , - 796 , - 985 , - 430 , - 123 , - 64 , - 253 , - 690 , - 383 , - 324 , - 513 , - 950 , - 643 , - 584 , - 773 , - 218 , - 903 , - 844 , - 41 , - 478 , - 171 , - 112 , - 301 , - 738 , - 431 , - 372 , - 561 , - 6 , - 691 , - 632 , - 821 , - 266 , - 951 , - 892 , - 89 , - 526 , - 219 , - 160 , - 349 , - 786 , - 479 , - 420 , - 609 , - 54 , - 739 , - 680 , - 869 , - 314 , - 7 , - 940 , - 137 , - 574 , - 267 , - 208 , - 397 , - 834 , - 527 , - 468 , - 657 , - 102 , - 787 , - 728 , - 917 , - 362 , - 55 , - 988 , - 185 , - 622 , - 315 , - 256 , - 445 , - 882 , - 575 , - 516 , - 705 , - 150 , - 835 , - 776 , - 965 , - 410 , - 103 , - 44 , - 233 , - 670 , - 363 , - 304 , - 493 , - 930 , - 623 , - 564 , - 753 , - 198 , - 883 , - 824 , - 21 , - 458 , - 151 , - 92 , - 281 , - 718 , - 411 , - 352 , - 541 , - 978 , - 671 , - 612 , - 801 , - 246 , - 931 , - 872 , - 69 , - 506 , - 199 , - 140 , - 329 , - 766 , - 459 , - 400 , - 589 , - 34 , - 719 , - 660 , - 849 , - 294 , - 979 , - 920 , - 117 , - 554 , - 247 , - 188 , - 377 , - 814 , - 507 , - 448 , - 637 , - 82 , - 767 , - 708 , - 897 , - 342 , - 35 , - 968 , - 165 , - 602 , - 295 , - 236 , - 425 , - 862 , - 555 , - 496 , - 685 , - 130 , - 815 , - 756 , - 945 , - 390 , - 83 , - 24 , - 213 , - 650 , - 343 , - 284 , - 473 , - 910 , - 603 , - 544 , - 733 , - 178 , - 863 , - 804 , - 1 , - 438 , - 131 , - 72 , - 261 , - 698 , - 391 , - 332 , - 521 , - 958 , - 651 , - 592 , - 781 , - 226 , - 911 , - 852 , - 49 , - 486 , - 179 , - 120 , - 309 , - 746 , - 439 , - 380 , - 569 , - 14 , - 699 , - 640 , - 829 , - 274 , - 959 , - 900 , - 97 , - 534 , - 227 , - 168 , - 357 , - 794 , - 487 , - 428 , - 617 , - 62 , - 747 , - 688 , - 877 , - 322 , - 15 , - 948 , - 145 , - 582 , - 275 , - 216 , - 405 , - 842 , - 535 , - 476 , - 665 , - 110 , - 795 , - 736 , - 925 , - 370 , - 63 , - 4 , - 193 , - 630 , - 323 , - 264 , - 453 , - 890 , - 583 , - 524 , - 713 , - 158 , - 843 , - 784 , - 973 , - 418 , - 111 , - 52 , - 241 , - 678 , - 371 , - 312 , - 501 , - 938 , - 631 , - 572 , - 761 , - 206 , - 891 , - 832 , - 29 , - 466 , - 159 , - 100 , - 289 , - 726 , - 419 , - 360 , - 549 , - 986 , - 679 , - 620 , - 809 , - 254 , - 939 , - 880 , - 77 , - 514 , - 207 , - 148 , - 337 , - 774 , - 467 , - 408 , - 597 , - 42 , - 727 , - 668 , - 857 , - 302 , - 987 , - 928 , - 125 , - 562 , - 255 , - 196 , - 385 , - 822 , - 515 , - 456 , - 645 , - 90 , - 775 , - 716 , - 905 , - 350 , - 43 , - 976 , - 173 , - 610 , - 303 , - 244 , - 433 , - 870 , - 563 , - 504 , - 693 , - 138 , - 823 , - 764 , - 953 , - 398 , - 91 , - 32 , - 221 , - 658 , - 351 , - 292 , - 481 , - 918 , - 611 , - 552 , - 741 , - 186 , - 871 , - 812 , - 9 , - 446 , - 139 , - 80 , - 269 , - 706 , - 399 , - 340 , - 529 , - 966 , - 659 , - 600 , - 789 , - 234 , - 919 , - 860 , - 57 , - 494 , - 187 , - 128 , - 317 , - 754 , - 447 , - 388 , - 577 , - 22 , - 707 , - 648 , - 837 , - 282 , - 967 , - 908 , - 105 , - 542 , - 235 , - 176 , - 365 , - 802 , - 495 , - 436 , - 625 , - 70 , - 755 , - 696 , - 885 , - 330 , - 23 , - 956 , - 153 , - 590 , - 283 , - 224 , - 413 , - 850 , - 543 , - 484 , - 673 , - 118 , - 803 , - 744 , - 933 , - 378 , - 71 , - 12 , - 201 , - 638 , - 331 , - 272 , - 461 , - 898 , - 591 , - 532 , - 721 , - 166 , - 851 , - 792 , - 981 , - 426 , - 119 , - 60 , - 249 , - 686 , - 379 , - 320 , - 509 , - 946 , - 639 , - 580 , - 769 , - 214 , - 899 , - 840 , - 37 , - 474 , - 167 , - 108 , - 297 , - 734 , - 427 , - 368 , - 557 , - 2 , - 687 , - 628 , - 817 , - 262 , - 947 , - 888 , - 85 , - 522 , - 215 , - 156 , - 345 , - 782 , - 475 , - 416 , - 605 , - 50 , - 735 , - 676 , - 865 , - 310 , - 3 , - 936 , - 133 , - 570 , - 263 , - 204 , - 393 , - 830 , - 523 , - 464 , - 653 , - 98 , - 783 , - 724 , - 913 , - 358 , - 51 , - 984 , - 181 , - 618 , - 311 , - 252 , - 441 , - 878 , - 571 , - 512 , - 701 , - 146 , - 831 , - 772 , - 961 , - 406 , - 99 , - 40 , - 229 , - 666 , - 359 , - 300 , - 489 , - 926 , - 619 , - 560 , - 749 , - 194 , - 879 , - 820 , - 17 , - 454 , - 147 , - 88 , - 277 , - 714 , - 407 , - 348 , - 537 , - 974 , - 667 , - 608 , - 797 , - 242 , - 927 , - 868 , - 65 , - 502 , - 195 , - 136 , - 325 , - 762 , - 455 , - 396 , - 585 , - 30 , - 715 , - 656 , - 845 , - 290 , - 975 , - 916 , - 113 , - 550 , - 243 , - 184 , - 373 , - 810 , - 503 , - 444 , - 633 , - 78 , - 763 , - 704 , - 893 , - 338 , - 31 , - 964 , - 161 , - 598 , - 291 , - 232 , - 421 , - 858 , - 551 , - 492 , - 681 , - 126 , - 811 , - 752 , - 941 , - 386 , - 79 , - 20 , - 209 , - 646 , - 339 , - 280 , - 469 , - 906 , - 599 , - 540 , - 729 , - 174 , - 859 , - 800 , - 989 , - 434 , - 127 , - 68 , - 257 , - 694 , - 387 , - 328 , - 517 , - 954 , - 647 , - 588 , - 777 , - 222 , - 907 , - 848 , - 45 , - 482 , - 175 , - 116 , - 305 , - 742 , - 435 , - 376 , - 565 , - 10 , - 695 , - 636 , - 825 , - 270 , - 955 , - 896 , - 93 , - 530 , - 223 , - 164 , - 353 , - 790 , - 483 , - 424 , - 613 , - 58 , - 743 , - 684 , - 873 , - 318 , - 11 , - 944 , - 141 , - 578 , - 271 , - 212 , - 401 , - 838 , - 531 , - 472 , - 661 , - 106 , - 791 , - 732 , - 921 , - 366 , - 59 , - 0 , - 139 , - 446 , - 921 , - 556 , - 359 , - 330 , - 469 , - 776 , - 243 , - 886 , - 689 , - 660 , - 799 , - 98 , - 573 , - 208 , - 11 , - 990 , - 121 , - 428 , - 903 , - 538 , - 341 , - 312 , - 451 , - 758 , - 225 , - 868 , - 671 , - 642 , - 781 , - 80 , - 555 , - 190 , - 1001 , - 972 , - 103 , - 410 , - 885 , - 520 , - 323 , - 294 , - 433 , - 740 , - 207 , - 850 , - 653 , - 624 , - 763 , - 62 , - 537 , - 172 , - 983 , - 954 , - 85 , - 392 , - 867 , - 502 , - 305 , - 276 , - 415 , - 722 , - 189 , - 832 , - 635 , - 606 , - 745 , - 44 , - 519 , - 154 , - 965 , - 936 , - 67 , - 374 , - 849 , - 484 , - 287 , - 258 , - 397 , - 704 , - 171 , - 814 , - 617 , - 588 , - 727 , - 26 , - 501 , - 136 , - 947 , - 918 , - 49 , - 356 , - 831 , - 466 , - 269 , - 240 , - 379 , - 686 , - 153 , - 796 , - 599 , - 570 , - 709 , - 8 , - 483 , - 118 , - 929 , - 900 , - 31 , - 338 , - 813 , - 448 , - 251 , - 222 , - 361 , - 668 , - 135 , - 778 , - 581 , - 552 , - 691 , - 998 , - 465 , - 100 , - 911 , - 882 , - 13 , - 320 , - 795 , - 430 , - 233 , - 204 , - 343 , - 650 , - 117 , - 760 , - 563 , - 534 , - 673 , - 980 , - 447 , - 82 , - 893 , - 864 , - 1003 , - 302 , - 777 , - 412 , - 215 , - 186 , - 325 , - 632 , - 99 , - 742 , - 545 , - 516 , - 655 , - 962 , - 429 , - 64 , - 875 , - 846 , - 985 , - 284 , - 759 , - 394 , - 197 , - 168 , - 307 , - 614 , - 81 , - 724 , - 527 , - 498 , - 637 , - 944 , - 411 , - 46 , - 857 , - 828 , - 967 , - 266 , - 741 , - 376 , - 179 , - 150 , - 289 , - 596 , - 63 , - 706 , - 509 , - 480 , - 619 , - 926 , - 393 , - 28 , - 839 , - 810 , - 949 , - 248 , - 723 , - 358 , - 161 , - 132 , - 271 , - 578 , - 45 , - 688 , - 491 , - 462 , - 601 , - 908 , - 375 , - 10 , - 821 , - 792 , - 931 , - 230 , - 705 , - 340 , - 143 , - 114 , - 253 , - 560 , - 27 , - 670 , - 473 , - 444 , - 583 , - 890 , - 357 , - 1000 , - 803 , - 774 , - 913 , - 212 , - 687 , - 322 , - 125 , - 96 , - 235 , - 542 , - 9 , - 652 , - 455 , - 426 , - 565 , - 872 , - 339 , - 982 , - 785 , - 756 , - 895 , - 194 , - 669 , - 304 , - 107 , - 78 , - 217 , - 524 , - 999 , - 634 , - 437 , - 408 , - 547 , - 854 , - 321 , - 964 , - 767 , - 738 , - 877 , - 176 , - 651 , - 286 , - 89 , - 60 , - 199 , - 506 , - 981 , - 616 , - 419 , - 390 , - 529 , - 836 , - 303 , - 946 , - 749 , - 720 , - 859 , - 158 , - 633 , - 268 , - 71 , - 42 , - 181 , - 488 , - 963 , - 598 , - 401 , - 372 , - 511 , - 818 , - 285 , - 928 , - 731 , - 702 , - 841 , - 140 , - 615 , - 250 , - 53 , - 24 , - 163 , - 470 , - 945 , - 580 , - 383 , - 354 , - 493 , - 800 , - 267 , - 910 , - 713 , - 684 , - 823 , - 122 , - 597 , - 232 , - 35 , - 6 , - 145 , - 452 , - 927 , - 562 , - 365 , - 336 , - 475 , - 782 , - 249 , - 892 , - 695 , - 666 , - 805 , - 104 , - 579 , - 214 , - 17 , - 996 , - 127 , - 434 , - 909 , - 544 , - 347 , - 318 , - 457 , - 764 , - 231 , - 874 , - 677 , - 648 , - 787 , - 86 , - 561 , - 196 , - 1007 , - 978 , - 109 , - 416 , - 891 , - 526 , - 329 , - 300 , - 439 , - 746 , - 213 , - 856 , - 659 , - 630 , - 769 , - 68 , - 543 , - 178 , - 989 , - 960 , - 91 , - 398 , - 873 , - 508 , - 311 , - 282 , - 421 , - 728 , - 195 , - 838 , - 641 , - 612 , - 751 , - 50 , - 525 , - 160 , - 971 , - 942 , - 73 , - 380 , - 855 , - 490 , - 293 , - 264 , - 403 , - 710 , - 177 , - 820 , - 623 , - 594 , - 733 , - 32 , - 507 , - 142 , - 953 , - 924 , - 55 , - 362 , - 837 , - 472 , - 275 , - 246 , - 385 , - 692 , - 159 , - 802 , - 605 , - 576 , - 715 , - 14 , - 489 , - 124 , - 935 , - 906 , - 37 , - 344 , - 819 , - 454 , - 257 , - 228 , - 367 , - 674 , - 141 , - 784 , - 587 , - 558 , - 697 , - 1004 , - 471 , - 106 , - 917 , - 888 , - 19 , - 326 , - 801 , - 436 , - 239 , - 210 , - 349 , - 656 , - 123 , - 766 , - 569 , - 540 , - 679 , - 986 , - 453 , - 88 , - 899 , - 870 , - 1 , - 308 , - 783 , - 418 , - 221 , - 192 , - 331 , - 638 , - 105 , - 748 , - 551 , - 522 , - 661 , - 968 , - 435 , - 70 , - 881 , - 852 , - 991 , - 290 , - 765 , - 400 , - 203 , - 174 , - 313 , - 620 , - 87 , - 730 , - 533 , - 504 , - 643 , - 950 , - 417 , - 52 , - 863 , - 834 , - 973 , - 272 , - 747 , - 382 , - 185 , - 156 , - 295 , - 602 , - 69 , - 712 , - 515 , - 486 , - 625 , - 932 , - 399 , - 34 , - 845 , - 816 , - 955 , - 254 , - 729 , - 364 , - 167 , - 138 , - 277 , - 584 , - 51 , - 694 , - 497 , - 468 , - 607 , - 914 , - 381 , - 16 , - 827 , - 798 , - 937 , - 236 , - 711 , - 346 , - 149 , - 120 , - 259 , - 566 , - 33 , - 676 , - 479 , - 450 , - 589 , - 896 , - 363 , - 1006 , - 809 , - 780 , - 919 , - 218 , - 693 , - 328 , - 131 , - 102 , - 241 , - 548 , - 15 , - 658 , - 461 , - 432 , - 571 , - 878 , - 345 , - 988 , - 791 , - 762 , - 901 , - 200 , - 675 , - 310 , - 113 , - 84 , - 223 , - 530 , - 1005 , - 640 , - 443 , - 414 , - 553 , - 860 , - 327 , - 970 , - 773 , - 744 , - 883 , - 182 , - 657 , - 292 , - 95 , - 66 , - 205 , - 512 , - 987 , - 622 , - 425 , - 396 , - 535 , - 842 , - 309 , - 952 , - 755 , - 726 , - 865 , - 164 , - 639 , - 274 , - 77 , - 48 , - 187 , - 494 , - 969 , - 604 , - 407 , - 378 , - 517 , - 824 , - 291 , - 934 , - 737 , - 708 , - 847 , - 146 , - 621 , - 256 , - 59 , - 30 , - 169 , - 476 , - 951 , - 586 , - 389 , - 360 , - 499 , - 806 , - 273 , - 916 , - 719 , - 690 , - 829 , - 128 , - 603 , - 238 , - 41 , - 12 , - 151 , - 458 , - 933 , - 568 , - 371 , - 342 , - 481 , - 788 , - 255 , - 898 , - 701 , - 672 , - 811 , - 110 , - 585 , - 220 , - 23 , - 1002 , - 133 , - 440 , - 915 , - 550 , - 353 , - 324 , - 463 , - 770 , - 237 , - 880 , - 683 , - 654 , - 793 , - 92 , - 567 , - 202 , - 5 , - 984 , - 115 , - 422 , - 897 , - 532 , - 335 , - 306 , - 445 , - 752 , - 219 , - 862 , - 665 , - 636 , - 775 , - 74 , - 549 , - 184 , - 995 , - 966 , - 97 , - 404 , - 879 , - 514 , - 317 , - 288 , - 427 , - 734 , - 201 , - 844 , - 647 , - 618 , - 757 , - 56 , - 531 , - 166 , - 977 , - 948 , - 79 , - 386 , - 861 , - 496 , - 299 , - 270 , - 409 , - 716 , - 183 , - 826 , - 629 , - 600 , - 739 , - 38 , - 513 , - 148 , - 959 , - 930 , - 61 , - 368 , - 843 , - 478 , - 281 , - 252 , - 391 , - 698 , - 165 , - 808 , - 611 , - 582 , - 721 , - 20 , - 495 , - 130 , - 941 , - 912 , - 43 , - 350 , - 825 , - 460 , - 263 , - 234 , - 373 , - 680 , - 147 , - 790 , - 593 , - 564 , - 703 , - 2 , - 477 , - 112 , - 923 , - 894 , - 25 , - 332 , - 807 , - 442 , - 245 , - 216 , - 355 , - 662 , - 129 , - 772 , - 575 , - 546 , - 685 , - 992 , - 459 , - 94 , - 905 , - 876 , - 7 , - 314 , - 789 , - 424 , - 227 , - 198 , - 337 , - 644 , - 111 , - 754 , - 557 , - 528 , - 667 , - 974 , - 441 , - 76 , - 887 , - 858 , - 997 , - 296 , - 771 , - 406 , - 209 , - 180 , - 319 , - 626 , - 93 , - 736 , - 539 , - 510 , - 649 , - 956 , - 423 , - 58 , - 869 , - 840 , - 979 , - 278 , - 753 , - 388 , - 191 , - 162 , - 301 , - 608 , - 75 , - 718 , - 521 , - 492 , - 631 , - 938 , - 405 , - 40 , - 851 , - 822 , - 961 , - 260 , - 735 , - 370 , - 173 , - 144 , - 283 , - 590 , - 57 , - 700 , - 503 , - 474 , - 613 , - 920 , - 387 , - 22 , - 833 , - 804 , - 943 , - 242 , - 717 , - 352 , - 155 , - 126 , - 265 , - 572 , - 39 , - 682 , - 485 , - 456 , - 595 , - 902 , - 369 , - 4 , - 815 , - 786 , - 925 , - 224 , - 699 , - 334 , - 137 , - 108 , - 247 , - 554 , - 21 , - 664 , - 467 , - 438 , - 577 , - 884 , - 351 , - 994 , - 797 , - 768 , - 907 , - 206 , - 681 , - 316 , - 119 , - 90 , - 229 , - 536 , - 3 , - 646 , - 449 , - 420 , - 559 , - 866 , - 333 , - 976 , - 779 , - 750 , - 889 , - 188 , - 663 , - 298 , - 101 , - 72 , - 211 , - 518 , - 993 , - 628 , - 431 , - 402 , - 541 , - 848 , - 315 , - 958 , - 761 , - 732 , - 871 , - 170 , - 645 , - 280 , - 83 , - 54 , - 193 , - 500 , - 975 , - 610 , - 413 , - 384 , - 523 , - 830 , - 297 , - 940 , - 743 , - 714 , - 853 , - 152 , - 627 , - 262 , - 65 , - 36 , - 175 , - 482 , - 957 , - 592 , - 395 , - 366 , - 505 , - 812 , - 279 , - 922 , - 725 , - 696 , - 835 , - 134 , - 609 , - 244 , - 47 , - 18 , - 157 , - 464 , - 939 , - 574 , - 377 , - 348 , - 487 , - 794 , - 261 , - 904 , - 707 , - 678 , - 817 , - 116 , - 591 , - 226 , - 29 , - 0 , - 95 , - 318 , - 669 , - 124 , - 731 , - 442 , - 281 , - 248 , - 343 , - 566 , - 917 , - 372 , - 979 , - 690 , - 529 , - 496 , - 591 , - 814 , - 141 , - 620 , - 203 , - 938 , - 777 , - 744 , - 839 , - 38 , - 389 , - 868 , - 451 , - 162 , - 1 , - 992 , - 63 , - 286 , - 637 , - 92 , - 699 , - 410 , - 249 , - 216 , - 311 , - 534 , - 885 , - 340 , - 947 , - 658 , - 497 , - 464 , - 559 , - 782 , - 109 , - 588 , - 171 , - 906 , - 745 , - 712 , - 807 , - 6 , - 357 , - 836 , - 419 , - 130 , - 993 , - 960 , - 31 , - 254 , - 605 , - 60 , - 667 , - 378 , - 217 , - 184 , - 279 , - 502 , - 853 , - 308 , - 915 , - 626 , - 465 , - 432 , - 527 , - 750 , - 77 , - 556 , - 139 , - 874 , - 713 , - 680 , - 775 , - 998 , - 325 , - 804 , - 387 , - 98 , - 961 , - 928 , - 1023 , - 222 , - 573 , - 28 , - 635 , - 346 , - 185 , - 152 , - 247 , - 470 , - 821 , - 276 , - 883 , - 594 , - 433 , - 400 , - 495 , - 718 , - 45 , - 524 , - 107 , - 842 , - 681 , - 648 , - 743 , - 966 , - 293 , - 772 , - 355 , - 66 , - 929 , - 896 , - 991 , - 190 , - 541 , - 1020 , - 603 , - 314 , - 153 , - 120 , - 215 , - 438 , - 789 , - 244 , - 851 , - 562 , - 401 , - 368 , - 463 , - 686 , - 13 , - 492 , - 75 , - 810 , - 649 , - 616 , - 711 , - 934 , - 261 , - 740 , - 323 , - 34 , - 897 , - 864 , - 959 , - 158 , - 509 , - 988 , - 571 , - 282 , - 121 , - 88 , - 183 , - 406 , - 757 , - 212 , - 819 , - 530 , - 369 , - 336 , - 431 , - 654 , - 1005 , - 460 , - 43 , - 778 , - 617 , - 584 , - 679 , - 902 , - 229 , - 708 , - 291 , - 2 , - 865 , - 832 , - 927 , - 126 , - 477 , - 956 , - 539 , - 250 , - 89 , - 56 , - 151 , - 374 , - 725 , - 180 , - 787 , - 498 , - 337 , - 304 , - 399 , - 622 , - 973 , - 428 , - 11 , - 746 , - 585 , - 552 , - 647 , - 870 , - 197 , - 676 , - 259 , - 994 , - 833 , - 800 , - 895 , - 94 , - 445 , - 924 , - 507 , - 218 , - 57 , - 24 , - 119 , - 342 , - 693 , - 148 , - 755 , - 466 , - 305 , - 272 , - 367 , - 590 , - 941 , - 396 , - 1003 , - 714 , - 553 , - 520 , - 615 , - 838 , - 165 , - 644 , - 227 , - 962 , - 801 , - 768 , - 863 , - 62 , - 413 , - 892 , - 475 , - 186 , - 25 , - 1016 , - 87 , - 310 , - 661 , - 116 , - 723 , - 434 , - 273 , - 240 , - 335 , - 558 , - 909 , - 364 , - 971 , - 682 , - 521 , - 488 , - 583 , - 806 , - 133 , - 612 , - 195 , - 930 , - 769 , - 736 , - 831 , - 30 , - 381 , - 860 , - 443 , - 154 , - 1017 , - 984 , - 55 , - 278 , - 629 , - 84 , - 691 , - 402 , - 241 , - 208 , - 303 , - 526 , - 877 , - 332 , - 939 , - 650 , - 489 , - 456 , - 551 , - 774 , - 101 , - 580 , - 163 , - 898 , - 737 , - 704 , - 799 , - 1022 , - 349 , - 828 , - 411 , - 122 , - 985 , - 952 , - 23 , - 246 , - 597 , - 52 , - 659 , - 370 , - 209 , - 176 , - 271 , - 494 , - 845 , - 300 , - 907 , - 618 , - 457 , - 424 , - 519 , - 742 , - 69 , - 548 , - 131 , - 866 , - 705 , - 672 , - 767 , - 990 , - 317 , - 796 , - 379 , - 90 , - 953 , - 920 , - 1015 , - 214 , - 565 , - 20 , - 627 , - 338 , - 177 , - 144 , - 239 , - 462 , - 813 , - 268 , - 875 , - 586 , - 425 , - 392 , - 487 , - 710 , - 37 , - 516 , - 99 , - 834 , - 673 , - 640 , - 735 , - 958 , - 285 , - 764 , - 347 , - 58 , - 921 , - 888 , - 983 , - 182 , - 533 , - 1012 , - 595 , - 306 , - 145 , - 112 , - 207 , - 430 , - 781 , - 236 , - 843 , - 554 , - 393 , - 360 , - 455 , - 678 , - 5 , - 484 , - 67 , - 802 , - 641 , - 608 , - 703 , - 926 , - 253 , - 732 , - 315 , - 26 , - 889 , - 856 , - 951 , - 150 , - 501 , - 980 , - 563 , - 274 , - 113 , - 80 , - 175 , - 398 , - 749 , - 204 , - 811 , - 522 , - 361 , - 328 , - 423 , - 646 , - 997 , - 452 , - 35 , - 770 , - 609 , - 576 , - 671 , - 894 , - 221 , - 700 , - 283 , - 1018 , - 857 , - 824 , - 919 , - 118 , - 469 , - 948 , - 531 , - 242 , - 81 , - 48 , - 143 , - 366 , - 717 , - 172 , - 779 , - 490 , - 329 , - 296 , - 391 , - 614 , - 965 , - 420 , - 3 , - 738 , - 577 , - 544 , - 639 , - 862 , - 189 , - 668 , - 251 , - 986 , - 825 , - 792 , - 887 , - 86 , - 437 , - 916 , - 499 , - 210 , - 49 , - 16 , - 111 , - 334 , - 685 , - 140 , - 747 , - 458 , - 297 , - 264 , - 359 , - 582 , - 933 , - 388 , - 995 , - 706 , - 545 , - 512 , - 607 , - 830 , - 157 , - 636 , - 219 , - 954 , - 793 , - 760 , - 855 , - 54 , - 405 , - 884 , - 467 , - 178 , - 17 , - 1008 , - 79 , - 302 , - 653 , - 108 , - 715 , - 426 , - 265 , - 232 , - 327 , - 550 , - 901 , - 356 , - 963 , - 674 , - 513 , - 480 , - 575 , - 798 , - 125 , - 604 , - 187 , - 922 , - 761 , - 728 , - 823 , - 22 , - 373 , - 852 , - 435 , - 146 , - 1009 , - 976 , - 47 , - 270 , - 621 , - 76 , - 683 , - 394 , - 233 , - 200 , - 295 , - 518 , - 869 , - 324 , - 931 , - 642 , - 481 , - 448 , - 543 , - 766 , - 93 , - 572 , - 155 , - 890 , - 729 , - 696 , - 791 , - 1014 , - 341 , - 820 , - 403 , - 114 , - 977 , - 944 , - 15 , - 238 , - 589 , - 44 , - 651 , - 362 , - 201 , - 168 , - 263 , - 486 , - 837 , - 292 , - 899 , - 610 , - 449 , - 416 , - 511 , - 734 , - 61 , - 540 , - 123 , - 858 , - 697 , - 664 , - 759 , - 982 , - 309 , - 788 , - 371 , - 82 , - 945 , - 912 , - 1007 , - 206 , - 557 , - 12 , - 619 , - 330 , - 169 , - 136 , - 231 , - 454 , - 805 , - 260 , - 867 , - 578 , - 417 , - 384 , - 479 , - 702 , - 29 , - 508 , - 91 , - 826 , - 665 , - 632 , - 727 , - 950 , - 277 , - 756 , - 339 , - 50 , - 913 , - 880 , - 975 , - 174 , - 525 , - 1004 , - 587 , - 298 , - 137 , - 104 , - 199 , - 422 , - 773 , - 228 , - 835 , - 546 , - 385 , - 352 , - 447 , - 670 , - 1021 , - 476 , - 59 , - 794 , - 633 , - 600 , - 695 , - 918 , - 245 , - 724 , - 307 , - 18 , - 881 , - 848 , - 943 , - 142 , - 493 , - 972 , - 555 , - 266 , - 105 , - 72 , - 167 , - 390 , - 741 , - 196 , - 803 , - 514 , - 353 , - 320 , - 415 , - 638 , - 989 , - 444 , - 27 , - 762 , - 601 , - 568 , - 663 , - 886 , - 213 , - 692 , - 275 , - 1010 , - 849 , - 816 , - 911 , - 110 , - 461 , - 940 , - 523 , - 234 , - 73 , - 40 , - 135 , - 358 , - 709 , - 164 , - 771 , - 482 , - 321 , - 288 , - 383 , - 606 , - 957 , - 412 , - 1019 , - 730 , - 569 , - 536 , - 631 , - 854 , - 181 , - 660 , - 243 , - 978 , - 817 , - 784 , - 879 , - 78 , - 429 , - 908 , - 491 , - 202 , - 41 , - 8 , - 103 , - 326 , - 677 , - 132 , - 739 , - 450 , - 289 , - 256 , - 351 , - 574 , - 925 , - 380 , - 987 , - 698 , - 537 , - 504 , - 599 , - 822 , - 149 , - 628 , - 211 , - 946 , - 785 , - 752 , - 847 , - 46 , - 397 , - 876 , - 459 , - 170 , - 9 , - 1000 , - 71 , - 294 , - 645 , - 100 , - 707 , - 418 , - 257 , - 224 , - 319 , - 542 , - 893 , - 348 , - 955 , - 666 , - 505 , - 472 , - 567 , - 790 , - 117 , - 596 , - 179 , - 914 , - 753 , - 720 , - 815 , - 14 , - 365 , - 844 , - 427 , - 138 , - 1001 , - 968 , - 39 , - 262 , - 613 , - 68 , - 675 , - 386 , - 225 , - 192 , - 287 , - 510 , - 861 , - 316 , - 923 , - 634 , - 473 , - 440 , - 535 , - 758 , - 85 , - 564 , - 147 , - 882 , - 721 , - 688 , - 783 , - 1006 , - 333 , - 812 , - 395 , - 106 , - 969 , - 936 , - 7 , - 230 , - 581 , - 36 , - 643 , - 354 , - 193 , - 160 , - 255 , - 478 , - 829 , - 284 , - 891 , - 602 , - 441 , - 408 , - 503 , - 726 , - 53 , - 532 , - 115 , - 850 , - 689 , - 656 , - 751 , - 974 , - 301 , - 780 , - 363 , - 74 , - 937 , - 904 , - 999 , - 198 , - 549 , - 4 , - 611 , - 322 , - 161 , - 128 , - 223 , - 446 , - 797 , - 252 , - 859 , - 570 , - 409 , - 376 , - 471 , - 694 , - 21 , - 500 , - 83 , - 818 , - 657 , - 624 , - 719 , - 942 , - 269 , - 748 , - 331 , - 42 , - 905 , - 872 , - 967 , - 166 , - 517 , - 996 , - 579 , - 290 , - 129 , - 96 , - 191 , - 414 , - 765 , - 220 , - 827 , - 538 , - 377 , - 344 , - 439 , - 662 , - 1013 , - 468 , - 51 , - 786 , - 625 , - 592 , - 687 , - 910 , - 237 , - 716 , - 299 , - 10 , - 873 , - 840 , - 935 , - 134 , - 485 , - 964 , - 547 , - 258 , - 97 , - 64 , - 159 , - 382 , - 733 , - 188 , - 795 , - 506 , - 345 , - 312 , - 407 , - 630 , - 981 , - 436 , - 19 , - 754 , - 593 , - 560 , - 655 , - 878 , - 205 , - 684 , - 267 , - 1002 , - 841 , - 808 , - 903 , - 102 , - 453 , - 932 , - 515 , - 226 , - 65 , - 32 , - 127 , - 350 , - 701 , - 156 , - 763 , - 474 , - 313 , - 280 , - 375 , - 598 , - 949 , - 404 , - 1011 , - 722 , - 561 , - 528 , - 623 , - 846 , - 173 , - 652 , - 235 , - 970 , - 809 , - 776 , - 871 , - 70 , - 421 , - 900 , - 483 , - 194 , - 33 , - 0 , - 83 , - 298 , - 645 , - 68 , - 679 , - 366 , - 185 , - 136 , - 219 , - 434 , - 781 , - 204 , - 815 , - 502 , - 321 , - 272 , - 355 , - 570 , - 917 , - 340 , - 951 , - 638 , - 457 , - 408 , - 491 , - 706 , - 1053 , - 476 , - 31 , - 774 , - 593 , - 544 , - 627 , - 842 , - 133 , - 612 , - 167 , - 910 , - 729 , - 680 , - 763 , - 978 , - 269 , - 748 , - 303 , - 1046 , - 865 , - 816 , - 899 , - 58 , - 405 , - 884 , - 439 , - 126 , - 1001 , - 952 , - 1035 , - 194 , - 541 , - 1020 , - 575 , - 262 , - 81 , - 32 , - 115 , - 330 , - 677 , - 100 , - 711 , - 398 , - 217 , - 168 , - 251 , - 466 , - 813 , - 236 , - 847 , - 534 , - 353 , - 304 , - 387 , - 602 , - 949 , - 372 , - 983 , - 670 , - 489 , - 440 , - 523 , - 738 , - 29 , - 508 , - 63 , - 806 , - 625 , - 576 , - 659 , - 874 , - 165 , - 644 , - 199 , - 942 , - 761 , - 712 , - 795 , - 1010 , - 301 , - 780 , - 335 , - 22 , - 897 , - 848 , - 931 , - 90 , - 437 , - 916 , - 471 , - 158 , - 1033 , - 984 , - 11 , - 226 , - 573 , - 1052 , - 607 , - 294 , - 113 , - 64 , - 147 , - 362 , - 709 , - 132 , - 743 , - 430 , - 249 , - 200 , - 283 , - 498 , - 845 , - 268 , - 879 , - 566 , - 385 , - 336 , - 419 , - 634 , - 981 , - 404 , - 1015 , - 702 , - 521 , - 472 , - 555 , - 770 , - 61 , - 540 , - 95 , - 838 , - 657 , - 608 , - 691 , - 906 , - 197 , - 676 , - 231 , - 974 , - 793 , - 744 , - 827 , - 1042 , - 333 , - 812 , - 367 , - 54 , - 929 , - 880 , - 963 , - 122 , - 469 , - 948 , - 503 , - 190 , - 9 , - 1016 , - 43 , - 258 , - 605 , - 28 , - 639 , - 326 , - 145 , - 96 , - 179 , - 394 , - 741 , - 164 , - 775 , - 462 , - 281 , - 232 , - 315 , - 530 , - 877 , - 300 , - 911 , - 598 , - 417 , - 368 , - 451 , - 666 , - 1013 , - 436 , - 1047 , - 734 , - 553 , - 504 , - 587 , - 802 , - 93 , - 572 , - 127 , - 870 , - 689 , - 640 , - 723 , - 938 , - 229 , - 708 , - 263 , - 1006 , - 825 , - 776 , - 859 , - 18 , - 365 , - 844 , - 399 , - 86 , - 961 , - 912 , - 995 , - 154 , - 501 , - 980 , - 535 , - 222 , - 41 , - 1048 , - 75 , - 290 , - 637 , - 60 , - 671 , - 358 , - 177 , - 128 , - 211 , - 426 , - 773 , - 196 , - 807 , - 494 , - 313 , - 264 , - 347 , - 562 , - 909 , - 332 , - 943 , - 630 , - 449 , - 400 , - 483 , - 698 , - 1045 , - 468 , - 23 , - 766 , - 585 , - 536 , - 619 , - 834 , - 125 , - 604 , - 159 , - 902 , - 721 , - 672 , - 755 , - 970 , - 261 , - 740 , - 295 , - 1038 , - 857 , - 808 , - 891 , - 50 , - 397 , - 876 , - 431 , - 118 , - 993 , - 944 , - 1027 , - 186 , - 533 , - 1012 , - 567 , - 254 , - 73 , - 24 , - 107 , - 322 , - 669 , - 92 , - 703 , - 390 , - 209 , - 160 , - 243 , - 458 , - 805 , - 228 , - 839 , - 526 , - 345 , - 296 , - 379 , - 594 , - 941 , - 364 , - 975 , - 662 , - 481 , - 432 , - 515 , - 730 , - 21 , - 500 , - 55 , - 798 , - 617 , - 568 , - 651 , - 866 , - 157 , - 636 , - 191 , - 934 , - 753 , - 704 , - 787 , - 1002 , - 293 , - 772 , - 327 , - 14 , - 889 , - 840 , - 923 , - 82 , - 429 , - 908 , - 463 , - 150 , - 1025 , - 976 , - 3 , - 218 , - 565 , - 1044 , - 599 , - 286 , - 105 , - 56 , - 139 , - 354 , - 701 , - 124 , - 735 , - 422 , - 241 , - 192 , - 275 , - 490 , - 837 , - 260 , - 871 , - 558 , - 377 , - 328 , - 411 , - 626 , - 973 , - 396 , - 1007 , - 694 , - 513 , - 464 , - 547 , - 762 , - 53 , - 532 , - 87 , - 830 , - 649 , - 600 , - 683 , - 898 , - 189 , - 668 , - 223 , - 966 , - 785 , - 736 , - 819 , - 1034 , - 325 , - 804 , - 359 , - 46 , - 921 , - 872 , - 955 , - 114 , - 461 , - 940 , - 495 , - 182 , - 1 , - 1008 , - 35 , - 250 , - 597 , - 20 , - 631 , - 318 , - 137 , - 88 , - 171 , - 386 , - 733 , - 156 , - 767 , - 454 , - 273 , - 224 , - 307 , - 522 , - 869 , - 292 , - 903 , - 590 , - 409 , - 360 , - 443 , - 658 , - 1005 , - 428 , - 1039 , - 726 , - 545 , - 496 , - 579 , - 794 , - 85 , - 564 , - 119 , - 862 , - 681 , - 632 , - 715 , - 930 , - 221 , - 700 , - 255 , - 998 , - 817 , - 768 , - 851 , - 10 , - 357 , - 836 , - 391 , - 78 , - 953 , - 904 , - 987 , - 146 , - 493 , - 972 , - 527 , - 214 , - 33 , - 1040 , - 67 , - 282 , - 629 , - 52 , - 663 , - 350 , - 169 , - 120 , - 203 , - 418 , - 765 , - 188 , - 799 , - 486 , - 305 , - 256 , - 339 , - 554 , - 901 , - 324 , - 935 , - 622 , - 441 , - 392 , - 475 , - 690 , - 1037 , - 460 , - 15 , - 758 , - 577 , - 528 , - 611 , - 826 , - 117 , - 596 , - 151 , - 894 , - 713 , - 664 , - 747 , - 962 , - 253 , - 732 , - 287 , - 1030 , - 849 , - 800 , - 883 , - 42 , - 389 , - 868 , - 423 , - 110 , - 985 , - 936 , - 1019 , - 178 , - 525 , - 1004 , - 559 , - 246 , - 65 , - 16 , - 99 , - 314 , - 661 , - 84 , - 695 , - 382 , - 201 , - 152 , - 235 , - 450 , - 797 , - 220 , - 831 , - 518 , - 337 , - 288 , - 371 , - 586 , - 933 , - 356 , - 967 , - 654 , - 473 , - 424 , - 507 , - 722 , - 13 , - 492 , - 47 , - 790 , - 609 , - 560 , - 643 , - 858 , - 149 , - 628 , - 183 , - 926 , - 745 , - 696 , - 779 , - 994 , - 285 , - 764 , - 319 , - 6 , - 881 , - 832 , - 915 , - 74 , - 421 , - 900 , - 455 , - 142 , - 1017 , - 968 , - 1051 , - 210 , - 557 , - 1036 , - 591 , - 278 , - 97 , - 48 , - 131 , - 346 , - 693 , - 116 , - 727 , - 414 , - 233 , - 184 , - 267 , - 482 , - 829 , - 252 , - 863 , - 550 , - 369 , - 320 , - 403 , - 618 , - 965 , - 388 , - 999 , - 686 , - 505 , - 456 , - 539 , - 754 , - 45 , - 524 , - 79 , - 822 , - 641 , - 592 , - 675 , - 890 , - 181 , - 660 , - 215 , - 958 , - 777 , - 728 , - 811 , - 1026 , - 317 , - 796 , - 351 , - 38 , - 913 , - 864 , - 947 , - 106 , - 453 , - 932 , - 487 , - 174 , - 1049 , - 1000 , - 27 , - 242 , - 589 , - 12 , - 623 , - 310 , - 129 , - 80 , - 163 , - 378 , - 725 , - 148 , - 759 , - 446 , - 265 , - 216 , - 299 , - 514 , - 861 , - 284 , - 895 , - 582 , - 401 , - 352 , - 435 , - 650 , - 997 , - 420 , - 1031 , - 718 , - 537 , - 488 , - 571 , - 786 , - 77 , - 556 , - 111 , - 854 , - 673 , - 624 , - 707 , - 922 , - 213 , - 692 , - 247 , - 990 , - 809 , - 760 , - 843 , - 2 , - 349 , - 828 , - 383 , - 70 , - 945 , - 896 , - 979 , - 138 , - 485 , - 964 , - 519 , - 206 , - 25 , - 1032 , - 59 , - 274 , - 621 , - 44 , - 655 , - 342 , - 161 , - 112 , - 195 , - 410 , - 757 , - 180 , - 791 , - 478 , - 297 , - 248 , - 331 , - 546 , - 893 , - 316 , - 927 , - 614 , - 433 , - 384 , - 467 , - 682 , - 1029 , - 452 , - 7 , - 750 , - 569 , - 520 , - 603 , - 818 , - 109 , - 588 , - 143 , - 886 , - 705 , - 656 , - 739 , - 954 , - 245 , - 724 , - 279 , - 1022 , - 841 , - 792 , - 875 , - 34 , - 381 , - 860 , - 415 , - 102 , - 977 , - 928 , - 1011 , - 170 , - 517 , - 996 , - 551 , - 238 , - 57 , - 8 , - 91 , - 306 , - 653 , - 76 , - 687 , - 374 , - 193 , - 144 , - 227 , - 442 , - 789 , - 212 , - 823 , - 510 , - 329 , - 280 , - 363 , - 578 , - 925 , - 348 , - 959 , - 646 , - 465 , - 416 , - 499 , - 714 , - 5 , - 484 , - 39 , - 782 , - 601 , - 552 , - 635 , - 850 , - 141 , - 620 , - 175 , - 918 , - 737 , - 688 , - 771 , - 986 , - 277 , - 756 , - 311 , - 1054 , - 873 , - 824 , - 907 , - 66 , - 413 , - 892 , - 447 , - 134 , - 1009 , - 960 , - 1043 , - 202 , - 549 , - 1028 , - 583 , - 270 , - 89 , - 40 , - 123 , - 338 , - 685 , - 108 , - 719 , - 406 , - 225 , - 176 , - 259 , - 474 , - 821 , - 244 , - 855 , - 542 , - 361 , - 312 , - 395 , - 610 , - 957 , - 380 , - 991 , - 678 , - 497 , - 448 , - 531 , - 746 , - 37 , - 516 , - 71 , - 814 , - 633 , - 584 , - 667 , - 882 , - 173 , - 652 , - 207 , - 950 , - 769 , - 720 , - 803 , - 1018 , - 309 , - 788 , - 343 , - 30 , - 905 , - 856 , - 939 , - 98 , - 445 , - 924 , - 479 , - 166 , - 1041 , - 992 , - 19 , - 234 , - 581 , - 4 , - 615 , - 302 , - 121 , - 72 , - 155 , - 370 , - 717 , - 140 , - 751 , - 438 , - 257 , - 208 , - 291 , - 506 , - 853 , - 276 , - 887 , - 574 , - 393 , - 344 , - 427 , - 642 , - 989 , - 412 , - 1023 , - 710 , - 529 , - 480 , - 563 , - 778 , - 69 , - 548 , - 103 , - 846 , - 665 , - 616 , - 699 , - 914 , - 205 , - 684 , - 239 , - 982 , - 801 , - 752 , - 835 , - 1050 , - 341 , - 820 , - 375 , - 62 , - 937 , - 888 , - 971 , - 130 , - 477 , - 956 , - 511 , - 198 , - 17 , - 1024 , - 51 , - 266 , - 613 , - 36 , - 647 , - 334 , - 153 , - 104 , - 187 , - 402 , - 749 , - 172 , - 783 , - 470 , - 289 , - 240 , - 323 , - 538 , - 885 , - 308 , - 919 , - 606 , - 425 , - 376 , - 459 , - 674 , - 1021 , - 444 , - 1055 , - 742 , - 561 , - 512 , - 595 , - 810 , - 101 , - 580 , - 135 , - 878 , - 697 , - 648 , - 731 , - 946 , - 237 , - 716 , - 271 , - 1014 , - 833 , - 784 , - 867 , - 26 , - 373 , - 852 , - 407 , - 94 , - 969 , - 920 , - 1003 , - 162 , - 509 , - 988 , - 543 , - 230 , - 49 , - 0 , - 375 , - 70 , - 173 , - 684 , - 515 , - 754 , - 313 , - 280 , - 655 , - 350 , - 453 , - 964 , - 795 , - 1034 , - 593 , - 560 , - 935 , - 630 , - 733 , - 156 , - 1075 , - 226 , - 873 , - 840 , - 127 , - 910 , - 1013 , - 436 , - 267 , - 506 , - 65 , - 32 , - 407 , - 102 , - 205 , - 716 , - 547 , - 786 , - 345 , - 312 , - 687 , - 382 , - 485 , - 996 , - 827 , - 1066 , - 625 , - 592 , - 967 , - 662 , - 765 , - 188 , - 19 , - 258 , - 905 , - 872 , - 159 , - 942 , - 1045 , - 468 , - 299 , - 538 , - 97 , - 64 , - 439 , - 134 , - 237 , - 748 , - 579 , - 818 , - 377 , - 344 , - 719 , - 414 , - 517 , - 1028 , - 859 , - 10 , - 657 , - 624 , - 999 , - 694 , - 797 , - 220 , - 51 , - 290 , - 937 , - 904 , - 191 , - 974 , - 1077 , - 500 , - 331 , - 570 , - 129 , - 96 , - 471 , - 166 , - 269 , - 780 , - 611 , - 850 , - 409 , - 376 , - 751 , - 446 , - 549 , - 1060 , - 891 , - 42 , - 689 , - 656 , - 1031 , - 726 , - 829 , - 252 , - 83 , - 322 , - 969 , - 936 , - 223 , - 1006 , - 21 , - 532 , - 363 , - 602 , - 161 , - 128 , - 503 , - 198 , - 301 , - 812 , - 643 , - 882 , - 441 , - 408 , - 783 , - 478 , - 581 , - 4 , - 923 , - 74 , - 721 , - 688 , - 1063 , - 758 , - 861 , - 284 , - 115 , - 354 , - 1001 , - 968 , - 255 , - 1038 , - 53 , - 564 , - 395 , - 634 , - 193 , - 160 , - 535 , - 230 , - 333 , - 844 , - 675 , - 914 , - 473 , - 440 , - 815 , - 510 , - 613 , - 36 , - 955 , - 106 , - 753 , - 720 , - 7 , - 790 , - 893 , - 316 , - 147 , - 386 , - 1033 , - 1000 , - 287 , - 1070 , - 85 , - 596 , - 427 , - 666 , - 225 , - 192 , - 567 , - 262 , - 365 , - 876 , - 707 , - 946 , - 505 , - 472 , - 847 , - 542 , - 645 , - 68 , - 987 , - 138 , - 785 , - 752 , - 39 , - 822 , - 925 , - 348 , - 179 , - 418 , - 1065 , - 1032 , - 319 , - 14 , - 117 , - 628 , - 459 , - 698 , - 257 , - 224 , - 599 , - 294 , - 397 , - 908 , - 739 , - 978 , - 537 , - 504 , - 879 , - 574 , - 677 , - 100 , - 1019 , - 170 , - 817 , - 784 , - 71 , - 854 , - 957 , - 380 , - 211 , - 450 , - 9 , - 1064 , - 351 , - 46 , - 149 , - 660 , - 491 , - 730 , - 289 , - 256 , - 631 , - 326 , - 429 , - 940 , - 771 , - 1010 , - 569 , - 536 , - 911 , - 606 , - 709 , - 132 , - 1051 , - 202 , - 849 , - 816 , - 103 , - 886 , - 989 , - 412 , - 243 , - 482 , - 41 , - 8 , - 383 , - 78 , - 181 , - 692 , - 523 , - 762 , - 321 , - 288 , - 663 , - 358 , - 461 , - 972 , - 803 , - 1042 , - 601 , - 568 , - 943 , - 638 , - 741 , - 164 , - 1083 , - 234 , - 881 , - 848 , - 135 , - 918 , - 1021 , - 444 , - 275 , - 514 , - 73 , - 40 , - 415 , - 110 , - 213 , - 724 , - 555 , - 794 , - 353 , - 320 , - 695 , - 390 , - 493 , - 1004 , - 835 , - 1074 , - 633 , - 600 , - 975 , - 670 , - 773 , - 196 , - 27 , - 266 , - 913 , - 880 , - 167 , - 950 , - 1053 , - 476 , - 307 , - 546 , - 105 , - 72 , - 447 , - 142 , - 245 , - 756 , - 587 , - 826 , - 385 , - 352 , - 727 , - 422 , - 525 , - 1036 , - 867 , - 18 , - 665 , - 632 , - 1007 , - 702 , - 805 , - 228 , - 59 , - 298 , - 945 , - 912 , - 199 , - 982 , - 1085 , - 508 , - 339 , - 578 , - 137 , - 104 , - 479 , - 174 , - 277 , - 788 , - 619 , - 858 , - 417 , - 384 , - 759 , - 454 , - 557 , - 1068 , - 899 , - 50 , - 697 , - 664 , - 1039 , - 734 , - 837 , - 260 , - 91 , - 330 , - 977 , - 944 , - 231 , - 1014 , - 29 , - 540 , - 371 , - 610 , - 169 , - 136 , - 511 , - 206 , - 309 , - 820 , - 651 , - 890 , - 449 , - 416 , - 791 , - 486 , - 589 , - 12 , - 931 , - 82 , - 729 , - 696 , - 1071 , - 766 , - 869 , - 292 , - 123 , - 362 , - 1009 , - 976 , - 263 , - 1046 , - 61 , - 572 , - 403 , - 642 , - 201 , - 168 , - 543 , - 238 , - 341 , - 852 , - 683 , - 922 , - 481 , - 448 , - 823 , - 518 , - 621 , - 44 , - 963 , - 114 , - 761 , - 728 , - 15 , - 798 , - 901 , - 324 , - 155 , - 394 , - 1041 , - 1008 , - 295 , - 1078 , - 93 , - 604 , - 435 , - 674 , - 233 , - 200 , - 575 , - 270 , - 373 , - 884 , - 715 , - 954 , - 513 , - 480 , - 855 , - 550 , - 653 , - 76 , - 995 , - 146 , - 793 , - 760 , - 47 , - 830 , - 933 , - 356 , - 187 , - 426 , - 1073 , - 1040 , - 327 , - 22 , - 125 , - 636 , - 467 , - 706 , - 265 , - 232 , - 607 , - 302 , - 405 , - 916 , - 747 , - 986 , - 545 , - 512 , - 887 , - 582 , - 685 , - 108 , - 1027 , - 178 , - 825 , - 792 , - 79 , - 862 , - 965 , - 388 , - 219 , - 458 , - 17 , - 1072 , - 359 , - 54 , - 157 , - 668 , - 499 , - 738 , - 297 , - 264 , - 639 , - 334 , - 437 , - 948 , - 779 , - 1018 , - 577 , - 544 , - 919 , - 614 , - 717 , - 140 , - 1059 , - 210 , - 857 , - 824 , - 111 , - 894 , - 997 , - 420 , - 251 , - 490 , - 49 , - 16 , - 391 , - 86 , - 189 , - 700 , - 531 , - 770 , - 329 , - 296 , - 671 , - 366 , - 469 , - 980 , - 811 , - 1050 , - 609 , - 576 , - 951 , - 646 , - 749 , - 172 , - 3 , - 242 , - 889 , - 856 , - 143 , - 926 , - 1029 , - 452 , - 283 , - 522 , - 81 , - 48 , - 423 , - 118 , - 221 , - 732 , - 563 , - 802 , - 361 , - 328 , - 703 , - 398 , - 501 , - 1012 , - 843 , - 1082 , - 641 , - 608 , - 983 , - 678 , - 781 , - 204 , - 35 , - 274 , - 921 , - 888 , - 175 , - 958 , - 1061 , - 484 , - 315 , - 554 , - 113 , - 80 , - 455 , - 150 , - 253 , - 764 , - 595 , - 834 , - 393 , - 360 , - 735 , - 430 , - 533 , - 1044 , - 875 , - 26 , - 673 , - 640 , - 1015 , - 710 , - 813 , - 236 , - 67 , - 306 , - 953 , - 920 , - 207 , - 990 , - 5 , - 516 , - 347 , - 586 , - 145 , - 112 , - 487 , - 182 , - 285 , - 796 , - 627 , - 866 , - 425 , - 392 , - 767 , - 462 , - 565 , - 1076 , - 907 , - 58 , - 705 , - 672 , - 1047 , - 742 , - 845 , - 268 , - 99 , - 338 , - 985 , - 952 , - 239 , - 1022 , - 37 , - 548 , - 379 , - 618 , - 177 , - 144 , - 519 , - 214 , - 317 , - 828 , - 659 , - 898 , - 457 , - 424 , - 799 , - 494 , - 597 , - 20 , - 939 , - 90 , - 737 , - 704 , - 1079 , - 774 , - 877 , - 300 , - 131 , - 370 , - 1017 , - 984 , - 271 , - 1054 , - 69 , - 580 , - 411 , - 650 , - 209 , - 176 , - 551 , - 246 , - 349 , - 860 , - 691 , - 930 , - 489 , - 456 , - 831 , - 526 , - 629 , - 52 , - 971 , - 122 , - 769 , - 736 , - 23 , - 806 , - 909 , - 332 , - 163 , - 402 , - 1049 , - 1016 , - 303 , - 1086 , - 101 , - 612 , - 443 , - 682 , - 241 , - 208 , - 583 , - 278 , - 381 , - 892 , - 723 , - 962 , - 521 , - 488 , - 863 , - 558 , - 661 , - 84 , - 1003 , - 154 , - 801 , - 768 , - 55 , - 838 , - 941 , - 364 , - 195 , - 434 , - 1081 , - 1048 , - 335 , - 30 , - 133 , - 644 , - 475 , - 714 , - 273 , - 240 , - 615 , - 310 , - 413 , - 924 , - 755 , - 994 , - 553 , - 520 , - 895 , - 590 , - 693 , - 116 , - 1035 , - 186 , - 833 , - 800 , - 87 , - 870 , - 973 , - 396 , - 227 , - 466 , - 25 , - 1080 , - 367 , - 62 , - 165 , - 676 , - 507 , - 746 , - 305 , - 272 , - 647 , - 342 , - 445 , - 956 , - 787 , - 1026 , - 585 , - 552 , - 927 , - 622 , - 725 , - 148 , - 1067 , - 218 , - 865 , - 832 , - 119 , - 902 , - 1005 , - 428 , - 259 , - 498 , - 57 , - 24 , - 399 , - 94 , - 197 , - 708 , - 539 , - 778 , - 337 , - 304 , - 679 , - 374 , - 477 , - 988 , - 819 , - 1058 , - 617 , - 584 , - 959 , - 654 , - 757 , - 180 , - 11 , - 250 , - 897 , - 864 , - 151 , - 934 , - 1037 , - 460 , - 291 , - 530 , - 89 , - 56 , - 431 , - 126 , - 229 , - 740 , - 571 , - 810 , - 369 , - 336 , - 711 , - 406 , - 509 , - 1020 , - 851 , - 2 , - 649 , - 616 , - 991 , - 686 , - 789 , - 212 , - 43 , - 282 , - 929 , - 896 , - 183 , - 966 , - 1069 , - 492 , - 323 , - 562 , - 121 , - 88 , - 463 , - 158 , - 261 , - 772 , - 603 , - 842 , - 401 , - 368 , - 743 , - 438 , - 541 , - 1052 , - 883 , - 34 , - 681 , - 648 , - 1023 , - 718 , - 821 , - 244 , - 75 , - 314 , - 961 , - 928 , - 215 , - 998 , - 13 , - 524 , - 355 , - 594 , - 153 , - 120 , - 495 , - 190 , - 293 , - 804 , - 635 , - 874 , - 433 , - 400 , - 775 , - 470 , - 573 , - 1084 , - 915 , - 66 , - 713 , - 680 , - 1055 , - 750 , - 853 , - 276 , - 107 , - 346 , - 993 , - 960 , - 247 , - 1030 , - 45 , - 556 , - 387 , - 626 , - 185 , - 152 , - 527 , - 222 , - 325 , - 836 , - 667 , - 906 , - 465 , - 432 , - 807 , - 502 , - 605 , - 28 , - 947 , - 98 , - 745 , - 712 , - 1087 , - 782 , - 885 , - 308 , - 139 , - 378 , - 1025 , - 992 , - 279 , - 1062 , - 77 , - 588 , - 419 , - 658 , - 217 , - 184 , - 559 , - 254 , - 357 , - 868 , - 699 , - 938 , - 497 , - 464 , - 839 , - 534 , - 637 , - 60 , - 979 , - 130 , - 777 , - 744 , - 31 , - 814 , - 917 , - 340 , - 171 , - 410 , - 1057 , - 1024 , - 311 , - 6 , - 109 , - 620 , - 451 , - 690 , - 249 , - 216 , - 591 , - 286 , - 389 , - 900 , - 731 , - 970 , - 529 , - 496 , - 871 , - 566 , - 669 , - 92 , - 1011 , - 162 , - 809 , - 776 , - 63 , - 846 , - 949 , - 372 , - 203 , - 442 , - 1 , - 1056 , - 343 , - 38 , - 141 , - 652 , - 483 , - 722 , - 281 , - 248 , - 623 , - 318 , - 421 , - 932 , - 763 , - 1002 , - 561 , - 528 , - 903 , - 598 , - 701 , - 124 , - 1043 , - 194 , - 841 , - 808 , - 95 , - 878 , - 981 , - 404 , - 235 , - 474 , - 33 , - 0 , - 207 , - 694 , - 341 , - 268 , - 475 , - 962 , - 609 , - 536 , - 743 , - 110 , - 877 , - 804 , - 1011 , - 378 , - 25 , - 1072 , - 159 , - 646 , - 293 , - 220 , - 427 , - 914 , - 561 , - 488 , - 695 , - 62 , - 829 , - 756 , - 963 , - 330 , - 1097 , - 1024 , - 111 , - 598 , - 245 , - 172 , - 379 , - 866 , - 513 , - 440 , - 647 , - 14 , - 781 , - 708 , - 915 , - 282 , - 1049 , - 976 , - 63 , - 550 , - 197 , - 124 , - 331 , - 818 , - 465 , - 392 , - 599 , - 1086 , - 733 , - 660 , - 867 , - 234 , - 1001 , - 928 , - 15 , - 502 , - 149 , - 76 , - 283 , - 770 , - 417 , - 344 , - 551 , - 1038 , - 685 , - 612 , - 819 , - 186 , - 953 , - 880 , - 1087 , - 454 , - 101 , - 28 , - 235 , - 722 , - 369 , - 296 , - 503 , - 990 , - 637 , - 564 , - 771 , - 138 , - 905 , - 832 , - 1039 , - 406 , - 53 , - 1100 , - 187 , - 674 , - 321 , - 248 , - 455 , - 942 , - 589 , - 516 , - 723 , - 90 , - 857 , - 784 , - 991 , - 358 , - 5 , - 1052 , - 139 , - 626 , - 273 , - 200 , - 407 , - 894 , - 541 , - 468 , - 675 , - 42 , - 809 , - 736 , - 943 , - 310 , - 1077 , - 1004 , - 91 , - 578 , - 225 , - 152 , - 359 , - 846 , - 493 , - 420 , - 627 , - 1114 , - 761 , - 688 , - 895 , - 262 , - 1029 , - 956 , - 43 , - 530 , - 177 , - 104 , - 311 , - 798 , - 445 , - 372 , - 579 , - 1066 , - 713 , - 640 , - 847 , - 214 , - 981 , - 908 , - 1115 , - 482 , - 129 , - 56 , - 263 , - 750 , - 397 , - 324 , - 531 , - 1018 , - 665 , - 592 , - 799 , - 166 , - 933 , - 860 , - 1067 , - 434 , - 81 , - 8 , - 215 , - 702 , - 349 , - 276 , - 483 , - 970 , - 617 , - 544 , - 751 , - 118 , - 885 , - 812 , - 1019 , - 386 , - 33 , - 1080 , - 167 , - 654 , - 301 , - 228 , - 435 , - 922 , - 569 , - 496 , - 703 , - 70 , - 837 , - 764 , - 971 , - 338 , - 1105 , - 1032 , - 119 , - 606 , - 253 , - 180 , - 387 , - 874 , - 521 , - 448 , - 655 , - 22 , - 789 , - 716 , - 923 , - 290 , - 1057 , - 984 , - 71 , - 558 , - 205 , - 132 , - 339 , - 826 , - 473 , - 400 , - 607 , - 1094 , - 741 , - 668 , - 875 , - 242 , - 1009 , - 936 , - 23 , - 510 , - 157 , - 84 , - 291 , - 778 , - 425 , - 352 , - 559 , - 1046 , - 693 , - 620 , - 827 , - 194 , - 961 , - 888 , - 1095 , - 462 , - 109 , - 36 , - 243 , - 730 , - 377 , - 304 , - 511 , - 998 , - 645 , - 572 , - 779 , - 146 , - 913 , - 840 , - 1047 , - 414 , - 61 , - 1108 , - 195 , - 682 , - 329 , - 256 , - 463 , - 950 , - 597 , - 524 , - 731 , - 98 , - 865 , - 792 , - 999 , - 366 , - 13 , - 1060 , - 147 , - 634 , - 281 , - 208 , - 415 , - 902 , - 549 , - 476 , - 683 , - 50 , - 817 , - 744 , - 951 , - 318 , - 1085 , - 1012 , - 99 , - 586 , - 233 , - 160 , - 367 , - 854 , - 501 , - 428 , - 635 , - 2 , - 769 , - 696 , - 903 , - 270 , - 1037 , - 964 , - 51 , - 538 , - 185 , - 112 , - 319 , - 806 , - 453 , - 380 , - 587 , - 1074 , - 721 , - 648 , - 855 , - 222 , - 989 , - 916 , - 3 , - 490 , - 137 , - 64 , - 271 , - 758 , - 405 , - 332 , - 539 , - 1026 , - 673 , - 600 , - 807 , - 174 , - 941 , - 868 , - 1075 , - 442 , - 89 , - 16 , - 223 , - 710 , - 357 , - 284 , - 491 , - 978 , - 625 , - 552 , - 759 , - 126 , - 893 , - 820 , - 1027 , - 394 , - 41 , - 1088 , - 175 , - 662 , - 309 , - 236 , - 443 , - 930 , - 577 , - 504 , - 711 , - 78 , - 845 , - 772 , - 979 , - 346 , - 1113 , - 1040 , - 127 , - 614 , - 261 , - 188 , - 395 , - 882 , - 529 , - 456 , - 663 , - 30 , - 797 , - 724 , - 931 , - 298 , - 1065 , - 992 , - 79 , - 566 , - 213 , - 140 , - 347 , - 834 , - 481 , - 408 , - 615 , - 1102 , - 749 , - 676 , - 883 , - 250 , - 1017 , - 944 , - 31 , - 518 , - 165 , - 92 , - 299 , - 786 , - 433 , - 360 , - 567 , - 1054 , - 701 , - 628 , - 835 , - 202 , - 969 , - 896 , - 1103 , - 470 , - 117 , - 44 , - 251 , - 738 , - 385 , - 312 , - 519 , - 1006 , - 653 , - 580 , - 787 , - 154 , - 921 , - 848 , - 1055 , - 422 , - 69 , - 1116 , - 203 , - 690 , - 337 , - 264 , - 471 , - 958 , - 605 , - 532 , - 739 , - 106 , - 873 , - 800 , - 1007 , - 374 , - 21 , - 1068 , - 155 , - 642 , - 289 , - 216 , - 423 , - 910 , - 557 , - 484 , - 691 , - 58 , - 825 , - 752 , - 959 , - 326 , - 1093 , - 1020 , - 107 , - 594 , - 241 , - 168 , - 375 , - 862 , - 509 , - 436 , - 643 , - 10 , - 777 , - 704 , - 911 , - 278 , - 1045 , - 972 , - 59 , - 546 , - 193 , - 120 , - 327 , - 814 , - 461 , - 388 , - 595 , - 1082 , - 729 , - 656 , - 863 , - 230 , - 997 , - 924 , - 11 , - 498 , - 145 , - 72 , - 279 , - 766 , - 413 , - 340 , - 547 , - 1034 , - 681 , - 608 , - 815 , - 182 , - 949 , - 876 , - 1083 , - 450 , - 97 , - 24 , - 231 , - 718 , - 365 , - 292 , - 499 , - 986 , - 633 , - 560 , - 767 , - 134 , - 901 , - 828 , - 1035 , - 402 , - 49 , - 1096 , - 183 , - 670 , - 317 , - 244 , - 451 , - 938 , - 585 , - 512 , - 719 , - 86 , - 853 , - 780 , - 987 , - 354 , - 1 , - 1048 , - 135 , - 622 , - 269 , - 196 , - 403 , - 890 , - 537 , - 464 , - 671 , - 38 , - 805 , - 732 , - 939 , - 306 , - 1073 , - 1000 , - 87 , - 574 , - 221 , - 148 , - 355 , - 842 , - 489 , - 416 , - 623 , - 1110 , - 757 , - 684 , - 891 , - 258 , - 1025 , - 952 , - 39 , - 526 , - 173 , - 100 , - 307 , - 794 , - 441 , - 368 , - 575 , - 1062 , - 709 , - 636 , - 843 , - 210 , - 977 , - 904 , - 1111 , - 478 , - 125 , - 52 , - 259 , - 746 , - 393 , - 320 , - 527 , - 1014 , - 661 , - 588 , - 795 , - 162 , - 929 , - 856 , - 1063 , - 430 , - 77 , - 4 , - 211 , - 698 , - 345 , - 272 , - 479 , - 966 , - 613 , - 540 , - 747 , - 114 , - 881 , - 808 , - 1015 , - 382 , - 29 , - 1076 , - 163 , - 650 , - 297 , - 224 , - 431 , - 918 , - 565 , - 492 , - 699 , - 66 , - 833 , - 760 , - 967 , - 334 , - 1101 , - 1028 , - 115 , - 602 , - 249 , - 176 , - 383 , - 870 , - 517 , - 444 , - 651 , - 18 , - 785 , - 712 , - 919 , - 286 , - 1053 , - 980 , - 67 , - 554 , - 201 , - 128 , - 335 , - 822 , - 469 , - 396 , - 603 , - 1090 , - 737 , - 664 , - 871 , - 238 , - 1005 , - 932 , - 19 , - 506 , - 153 , - 80 , - 287 , - 774 , - 421 , - 348 , - 555 , - 1042 , - 689 , - 616 , - 823 , - 190 , - 957 , - 884 , - 1091 , - 458 , - 105 , - 32 , - 239 , - 726 , - 373 , - 300 , - 507 , - 994 , - 641 , - 568 , - 775 , - 142 , - 909 , - 836 , - 1043 , - 410 , - 57 , - 1104 , - 191 , - 678 , - 325 , - 252 , - 459 , - 946 , - 593 , - 520 , - 727 , - 94 , - 861 , - 788 , - 995 , - 362 , - 9 , - 1056 , - 143 , - 630 , - 277 , - 204 , - 411 , - 898 , - 545 , - 472 , - 679 , - 46 , - 813 , - 740 , - 947 , - 314 , - 1081 , - 1008 , - 95 , - 582 , - 229 , - 156 , - 363 , - 850 , - 497 , - 424 , - 631 , - 1118 , - 765 , - 692 , - 899 , - 266 , - 1033 , - 960 , - 47 , - 534 , - 181 , - 108 , - 315 , - 802 , - 449 , - 376 , - 583 , - 1070 , - 717 , - 644 , - 851 , - 218 , - 985 , - 912 , - 1119 , - 486 , - 133 , - 60 , - 267 , - 754 , - 401 , - 328 , - 535 , - 1022 , - 669 , - 596 , - 803 , - 170 , - 937 , - 864 , - 1071 , - 438 , - 85 , - 12 , - 219 , - 706 , - 353 , - 280 , - 487 , - 974 , - 621 , - 548 , - 755 , - 122 , - 889 , - 816 , - 1023 , - 390 , - 37 , - 1084 , - 171 , - 658 , - 305 , - 232 , - 439 , - 926 , - 573 , - 500 , - 707 , - 74 , - 841 , - 768 , - 975 , - 342 , - 1109 , - 1036 , - 123 , - 610 , - 257 , - 184 , - 391 , - 878 , - 525 , - 452 , - 659 , - 26 , - 793 , - 720 , - 927 , - 294 , - 1061 , - 988 , - 75 , - 562 , - 209 , - 136 , - 343 , - 830 , - 477 , - 404 , - 611 , - 1098 , - 745 , - 672 , - 879 , - 246 , - 1013 , - 940 , - 27 , - 514 , - 161 , - 88 , - 295 , - 782 , - 429 , - 356 , - 563 , - 1050 , - 697 , - 624 , - 831 , - 198 , - 965 , - 892 , - 1099 , - 466 , - 113 , - 40 , - 247 , - 734 , - 381 , - 308 , - 515 , - 1002 , - 649 , - 576 , - 783 , - 150 , - 917 , - 844 , - 1051 , - 418 , - 65 , - 1112 , - 199 , - 686 , - 333 , - 260 , - 467 , - 954 , - 601 , - 528 , - 735 , - 102 , - 869 , - 796 , - 1003 , - 370 , - 17 , - 1064 , - 151 , - 638 , - 285 , - 212 , - 419 , - 906 , - 553 , - 480 , - 687 , - 54 , - 821 , - 748 , - 955 , - 322 , - 1089 , - 1016 , - 103 , - 590 , - 237 , - 164 , - 371 , - 858 , - 505 , - 432 , - 639 , - 6 , - 773 , - 700 , - 907 , - 274 , - 1041 , - 968 , - 55 , - 542 , - 189 , - 116 , - 323 , - 810 , - 457 , - 384 , - 591 , - 1078 , - 725 , - 652 , - 859 , - 226 , - 993 , - 920 , - 7 , - 494 , - 141 , - 68 , - 275 , - 762 , - 409 , - 336 , - 543 , - 1030 , - 677 , - 604 , - 811 , - 178 , - 945 , - 872 , - 1079 , - 446 , - 93 , - 20 , - 227 , - 714 , - 361 , - 288 , - 495 , - 982 , - 629 , - 556 , - 763 , - 130 , - 897 , - 824 , - 1031 , - 398 , - 45 , - 1092 , - 179 , - 666 , - 313 , - 240 , - 447 , - 934 , - 581 , - 508 , - 715 , - 82 , - 849 , - 776 , - 983 , - 350 , - 1117 , - 1044 , - 131 , - 618 , - 265 , - 192 , - 399 , - 886 , - 533 , - 460 , - 667 , - 34 , - 801 , - 728 , - 935 , - 302 , - 1069 , - 996 , - 83 , - 570 , - 217 , - 144 , - 351 , - 838 , - 485 , - 412 , - 619 , - 1106 , - 753 , - 680 , - 887 , - 254 , - 1021 , - 948 , - 35 , - 522 , - 169 , - 96 , - 303 , - 790 , - 437 , - 364 , - 571 , - 1058 , - 705 , - 632 , - 839 , - 206 , - 973 , - 900 , - 1107 , - 474 , - 121 , - 48 , - 255 , - 742 , - 389 , - 316 , - 523 , - 1010 , - 657 , - 584 , - 791 , - 158 , - 925 , - 852 , - 1059 , - 426 , - 73 , - 0 , - 107 , - 358 , - 753 , - 140 , - 823 , - 498 , - 317 , - 280 , - 387 , - 638 , - 1033 , - 420 , - 1103 , - 778 , - 597 , - 560 , - 667 , - 918 , - 161 , - 700 , - 231 , - 1058 , - 877 , - 840 , - 947 , - 46 , - 441 , - 980 , - 511 , - 186 , - 5 , - 1120 , - 75 , - 326 , - 721 , - 108 , - 791 , - 466 , - 285 , - 248 , - 355 , - 606 , - 1001 , - 388 , - 1071 , - 746 , - 565 , - 528 , - 635 , - 886 , - 129 , - 668 , - 199 , - 1026 , - 845 , - 808 , - 915 , - 14 , - 409 , - 948 , - 479 , - 154 , - 1125 , - 1088 , - 43 , - 294 , - 689 , - 76 , - 759 , - 434 , - 253 , - 216 , - 323 , - 574 , - 969 , - 356 , - 1039 , - 714 , - 533 , - 496 , - 603 , - 854 , - 97 , - 636 , - 167 , - 994 , - 813 , - 776 , - 883 , - 1134 , - 377 , - 916 , - 447 , - 122 , - 1093 , - 1056 , - 11 , - 262 , - 657 , - 44 , - 727 , - 402 , - 221 , - 184 , - 291 , - 542 , - 937 , - 324 , - 1007 , - 682 , - 501 , - 464 , - 571 , - 822 , - 65 , - 604 , - 135 , - 962 , - 781 , - 744 , - 851 , - 1102 , - 345 , - 884 , - 415 , - 90 , - 1061 , - 1024 , - 1131 , - 230 , - 625 , - 12 , - 695 , - 370 , - 189 , - 152 , - 259 , - 510 , - 905 , - 292 , - 975 , - 650 , - 469 , - 432 , - 539 , - 790 , - 33 , - 572 , - 103 , - 930 , - 749 , - 712 , - 819 , - 1070 , - 313 , - 852 , - 383 , - 58 , - 1029 , - 992 , - 1099 , - 198 , - 593 , - 1132 , - 663 , - 338 , - 157 , - 120 , - 227 , - 478 , - 873 , - 260 , - 943 , - 618 , - 437 , - 400 , - 507 , - 758 , - 1 , - 540 , - 71 , - 898 , - 717 , - 680 , - 787 , - 1038 , - 281 , - 820 , - 351 , - 26 , - 997 , - 960 , - 1067 , - 166 , - 561 , - 1100 , - 631 , - 306 , - 125 , - 88 , - 195 , - 446 , - 841 , - 228 , - 911 , - 586 , - 405 , - 368 , - 475 , - 726 , - 1121 , - 508 , - 39 , - 866 , - 685 , - 648 , - 755 , - 1006 , - 249 , - 788 , - 319 , - 1146 , - 965 , - 928 , - 1035 , - 134 , - 529 , - 1068 , - 599 , - 274 , - 93 , - 56 , - 163 , - 414 , - 809 , - 196 , - 879 , - 554 , - 373 , - 336 , - 443 , - 694 , - 1089 , - 476 , - 7 , - 834 , - 653 , - 616 , - 723 , - 974 , - 217 , - 756 , - 287 , - 1114 , - 933 , - 896 , - 1003 , - 102 , - 497 , - 1036 , - 567 , - 242 , - 61 , - 24 , - 131 , - 382 , - 777 , - 164 , - 847 , - 522 , - 341 , - 304 , - 411 , - 662 , - 1057 , - 444 , - 1127 , - 802 , - 621 , - 584 , - 691 , - 942 , - 185 , - 724 , - 255 , - 1082 , - 901 , - 864 , - 971 , - 70 , - 465 , - 1004 , - 535 , - 210 , - 29 , - 1144 , - 99 , - 350 , - 745 , - 132 , - 815 , - 490 , - 309 , - 272 , - 379 , - 630 , - 1025 , - 412 , - 1095 , - 770 , - 589 , - 552 , - 659 , - 910 , - 153 , - 692 , - 223 , - 1050 , - 869 , - 832 , - 939 , - 38 , - 433 , - 972 , - 503 , - 178 , - 1149 , - 1112 , - 67 , - 318 , - 713 , - 100 , - 783 , - 458 , - 277 , - 240 , - 347 , - 598 , - 993 , - 380 , - 1063 , - 738 , - 557 , - 520 , - 627 , - 878 , - 121 , - 660 , - 191 , - 1018 , - 837 , - 800 , - 907 , - 6 , - 401 , - 940 , - 471 , - 146 , - 1117 , - 1080 , - 35 , - 286 , - 681 , - 68 , - 751 , - 426 , - 245 , - 208 , - 315 , - 566 , - 961 , - 348 , - 1031 , - 706 , - 525 , - 488 , - 595 , - 846 , - 89 , - 628 , - 159 , - 986 , - 805 , - 768 , - 875 , - 1126 , - 369 , - 908 , - 439 , - 114 , - 1085 , - 1048 , - 3 , - 254 , - 649 , - 36 , - 719 , - 394 , - 213 , - 176 , - 283 , - 534 , - 929 , - 316 , - 999 , - 674 , - 493 , - 456 , - 563 , - 814 , - 57 , - 596 , - 127 , - 954 , - 773 , - 736 , - 843 , - 1094 , - 337 , - 876 , - 407 , - 82 , - 1053 , - 1016 , - 1123 , - 222 , - 617 , - 4 , - 687 , - 362 , - 181 , - 144 , - 251 , - 502 , - 897 , - 284 , - 967 , - 642 , - 461 , - 424 , - 531 , - 782 , - 25 , - 564 , - 95 , - 922 , - 741 , - 704 , - 811 , - 1062 , - 305 , - 844 , - 375 , - 50 , - 1021 , - 984 , - 1091 , - 190 , - 585 , - 1124 , - 655 , - 330 , - 149 , - 112 , - 219 , - 470 , - 865 , - 252 , - 935 , - 610 , - 429 , - 392 , - 499 , - 750 , - 1145 , - 532 , - 63 , - 890 , - 709 , - 672 , - 779 , - 1030 , - 273 , - 812 , - 343 , - 18 , - 989 , - 952 , - 1059 , - 158 , - 553 , - 1092 , - 623 , - 298 , - 117 , - 80 , - 187 , - 438 , - 833 , - 220 , - 903 , - 578 , - 397 , - 360 , - 467 , - 718 , - 1113 , - 500 , - 31 , - 858 , - 677 , - 640 , - 747 , - 998 , - 241 , - 780 , - 311 , - 1138 , - 957 , - 920 , - 1027 , - 126 , - 521 , - 1060 , - 591 , - 266 , - 85 , - 48 , - 155 , - 406 , - 801 , - 188 , - 871 , - 546 , - 365 , - 328 , - 435 , - 686 , - 1081 , - 468 , - 1151 , - 826 , - 645 , - 608 , - 715 , - 966 , - 209 , - 748 , - 279 , - 1106 , - 925 , - 888 , - 995 , - 94 , - 489 , - 1028 , - 559 , - 234 , - 53 , - 16 , - 123 , - 374 , - 769 , - 156 , - 839 , - 514 , - 333 , - 296 , - 403 , - 654 , - 1049 , - 436 , - 1119 , - 794 , - 613 , - 576 , - 683 , - 934 , - 177 , - 716 , - 247 , - 1074 , - 893 , - 856 , - 963 , - 62 , - 457 , - 996 , - 527 , - 202 , - 21 , - 1136 , - 91 , - 342 , - 737 , - 124 , - 807 , - 482 , - 301 , - 264 , - 371 , - 622 , - 1017 , - 404 , - 1087 , - 762 , - 581 , - 544 , - 651 , - 902 , - 145 , - 684 , - 215 , - 1042 , - 861 , - 824 , - 931 , - 30 , - 425 , - 964 , - 495 , - 170 , - 1141 , - 1104 , - 59 , - 310 , - 705 , - 92 , - 775 , - 450 , - 269 , - 232 , - 339 , - 590 , - 985 , - 372 , - 1055 , - 730 , - 549 , - 512 , - 619 , - 870 , - 113 , - 652 , - 183 , - 1010 , - 829 , - 792 , - 899 , - 1150 , - 393 , - 932 , - 463 , - 138 , - 1109 , - 1072 , - 27 , - 278 , - 673 , - 60 , - 743 , - 418 , - 237 , - 200 , - 307 , - 558 , - 953 , - 340 , - 1023 , - 698 , - 517 , - 480 , - 587 , - 838 , - 81 , - 620 , - 151 , - 978 , - 797 , - 760 , - 867 , - 1118 , - 361 , - 900 , - 431 , - 106 , - 1077 , - 1040 , - 1147 , - 246 , - 641 , - 28 , - 711 , - 386 , - 205 , - 168 , - 275 , - 526 , - 921 , - 308 , - 991 , - 666 , - 485 , - 448 , - 555 , - 806 , - 49 , - 588 , - 119 , - 946 , - 765 , - 728 , - 835 , - 1086 , - 329 , - 868 , - 399 , - 74 , - 1045 , - 1008 , - 1115 , - 214 , - 609 , - 1148 , - 679 , - 354 , - 173 , - 136 , - 243 , - 494 , - 889 , - 276 , - 959 , - 634 , - 453 , - 416 , - 523 , - 774 , - 17 , - 556 , - 87 , - 914 , - 733 , - 696 , - 803 , - 1054 , - 297 , - 836 , - 367 , - 42 , - 1013 , - 976 , - 1083 , - 182 , - 577 , - 1116 , - 647 , - 322 , - 141 , - 104 , - 211 , - 462 , - 857 , - 244 , - 927 , - 602 , - 421 , - 384 , - 491 , - 742 , - 1137 , - 524 , - 55 , - 882 , - 701 , - 664 , - 771 , - 1022 , - 265 , - 804 , - 335 , - 10 , - 981 , - 944 , - 1051 , - 150 , - 545 , - 1084 , - 615 , - 290 , - 109 , - 72 , - 179 , - 430 , - 825 , - 212 , - 895 , - 570 , - 389 , - 352 , - 459 , - 710 , - 1105 , - 492 , - 23 , - 850 , - 669 , - 632 , - 739 , - 990 , - 233 , - 772 , - 303 , - 1130 , - 949 , - 912 , - 1019 , - 118 , - 513 , - 1052 , - 583 , - 258 , - 77 , - 40 , - 147 , - 398 , - 793 , - 180 , - 863 , - 538 , - 357 , - 320 , - 427 , - 678 , - 1073 , - 460 , - 1143 , - 818 , - 637 , - 600 , - 707 , - 958 , - 201 , - 740 , - 271 , - 1098 , - 917 , - 880 , - 987 , - 86 , - 481 , - 1020 , - 551 , - 226 , - 45 , - 8 , - 115 , - 366 , - 761 , - 148 , - 831 , - 506 , - 325 , - 288 , - 395 , - 646 , - 1041 , - 428 , - 1111 , - 786 , - 605 , - 568 , - 675 , - 926 , - 169 , - 708 , - 239 , - 1066 , - 885 , - 848 , - 955 , - 54 , - 449 , - 988 , - 519 , - 194 , - 13 , - 1128 , - 83 , - 334 , - 729 , - 116 , - 799 , - 474 , - 293 , - 256 , - 363 , - 614 , - 1009 , - 396 , - 1079 , - 754 , - 573 , - 536 , - 643 , - 894 , - 137 , - 676 , - 207 , - 1034 , - 853 , - 816 , - 923 , - 22 , - 417 , - 956 , - 487 , - 162 , - 1133 , - 1096 , - 51 , - 302 , - 697 , - 84 , - 767 , - 442 , - 261 , - 224 , - 331 , - 582 , - 977 , - 364 , - 1047 , - 722 , - 541 , - 504 , - 611 , - 862 , - 105 , - 644 , - 175 , - 1002 , - 821 , - 784 , - 891 , - 1142 , - 385 , - 924 , - 455 , - 130 , - 1101 , - 1064 , - 19 , - 270 , - 665 , - 52 , - 735 , - 410 , - 229 , - 192 , - 299 , - 550 , - 945 , - 332 , - 1015 , - 690 , - 509 , - 472 , - 579 , - 830 , - 73 , - 612 , - 143 , - 970 , - 789 , - 752 , - 859 , - 1110 , - 353 , - 892 , - 423 , - 98 , - 1069 , - 1032 , - 1139 , - 238 , - 633 , - 20 , - 703 , - 378 , - 197 , - 160 , - 267 , - 518 , - 913 , - 300 , - 983 , - 658 , - 477 , - 440 , - 547 , - 798 , - 41 , - 580 , - 111 , - 938 , - 757 , - 720 , - 827 , - 1078 , - 321 , - 860 , - 391 , - 66 , - 1037 , - 1000 , - 1107 , - 206 , - 601 , - 1140 , - 671 , - 346 , - 165 , - 128 , - 235 , - 486 , - 881 , - 268 , - 951 , - 626 , - 445 , - 408 , - 515 , - 766 , - 9 , - 548 , - 79 , - 906 , - 725 , - 688 , - 795 , - 1046 , - 289 , - 828 , - 359 , - 34 , - 1005 , - 968 , - 1075 , - 174 , - 569 , - 1108 , - 639 , - 314 , - 133 , - 96 , - 203 , - 454 , - 849 , - 236 , - 919 , - 594 , - 413 , - 376 , - 483 , - 734 , - 1129 , - 516 , - 47 , - 874 , - 693 , - 656 , - 763 , - 1014 , - 257 , - 796 , - 327 , - 2 , - 973 , - 936 , - 1043 , - 142 , - 537 , - 1076 , - 607 , - 282 , - 101 , - 64 , - 171 , - 422 , - 817 , - 204 , - 887 , - 562 , - 381 , - 344 , - 451 , - 702 , - 1097 , - 484 , - 15 , - 842 , - 661 , - 624 , - 731 , - 982 , - 225 , - 764 , - 295 , - 1122 , - 941 , - 904 , - 1011 , - 110 , - 505 , - 1044 , - 575 , - 250 , - 69 , - 32 , - 139 , - 390 , - 785 , - 172 , - 855 , - 530 , - 349 , - 312 , - 419 , - 670 , - 1065 , - 452 , - 1135 , - 810 , - 629 , - 592 , - 699 , - 950 , - 193 , - 732 , - 263 , - 1090 , - 909 , - 872 , - 979 , - 78 , - 473 , - 1012 , - 543 , - 218 , - 37 , - 0 , - 93 , - 334 , - 723 , - 76 , - 761 , - 410 , - 207 , - 152 , - 245 , - 486 , - 875 , - 228 , - 913 , - 562 , - 359 , - 304 , - 397 , - 638 , - 1027 , - 380 , - 1065 , - 714 , - 511 , - 456 , - 549 , - 790 , - 1179 , - 532 , - 33 , - 866 , - 663 , - 608 , - 701 , - 942 , - 147 , - 684 , - 185 , - 1018 , - 815 , - 760 , - 853 , - 1094 , - 299 , - 836 , - 337 , - 1170 , - 967 , - 912 , - 1005 , - 62 , - 451 , - 988 , - 489 , - 138 , - 1119 , - 1064 , - 1157 , - 214 , - 603 , - 1140 , - 641 , - 290 , - 87 , - 32 , - 125 , - 366 , - 755 , - 108 , - 793 , - 442 , - 239 , - 184 , - 277 , - 518 , - 907 , - 260 , - 945 , - 594 , - 391 , - 336 , - 429 , - 670 , - 1059 , - 412 , - 1097 , - 746 , - 543 , - 488 , - 581 , - 822 , - 27 , - 564 , - 65 , - 898 , - 695 , - 640 , - 733 , - 974 , - 179 , - 716 , - 217 , - 1050 , - 847 , - 792 , - 885 , - 1126 , - 331 , - 868 , - 369 , - 18 , - 999 , - 944 , - 1037 , - 94 , - 483 , - 1020 , - 521 , - 170 , - 1151 , - 1096 , - 5 , - 246 , - 635 , - 1172 , - 673 , - 322 , - 119 , - 64 , - 157 , - 398 , - 787 , - 140 , - 825 , - 474 , - 271 , - 216 , - 309 , - 550 , - 939 , - 292 , - 977 , - 626 , - 423 , - 368 , - 461 , - 702 , - 1091 , - 444 , - 1129 , - 778 , - 575 , - 520 , - 613 , - 854 , - 59 , - 596 , - 97 , - 930 , - 727 , - 672 , - 765 , - 1006 , - 211 , - 748 , - 249 , - 1082 , - 879 , - 824 , - 917 , - 1158 , - 363 , - 900 , - 401 , - 50 , - 1031 , - 976 , - 1069 , - 126 , - 515 , - 1052 , - 553 , - 202 , - 1183 , - 1128 , - 37 , - 278 , - 667 , - 20 , - 705 , - 354 , - 151 , - 96 , - 189 , - 430 , - 819 , - 172 , - 857 , - 506 , - 303 , - 248 , - 341 , - 582 , - 971 , - 324 , - 1009 , - 658 , - 455 , - 400 , - 493 , - 734 , - 1123 , - 476 , - 1161 , - 810 , - 607 , - 552 , - 645 , - 886 , - 91 , - 628 , - 129 , - 962 , - 759 , - 704 , - 797 , - 1038 , - 243 , - 780 , - 281 , - 1114 , - 911 , - 856 , - 949 , - 6 , - 395 , - 932 , - 433 , - 82 , - 1063 , - 1008 , - 1101 , - 158 , - 547 , - 1084 , - 585 , - 234 , - 31 , - 1160 , - 69 , - 310 , - 699 , - 52 , - 737 , - 386 , - 183 , - 128 , - 221 , - 462 , - 851 , - 204 , - 889 , - 538 , - 335 , - 280 , - 373 , - 614 , - 1003 , - 356 , - 1041 , - 690 , - 487 , - 432 , - 525 , - 766 , - 1155 , - 508 , - 9 , - 842 , - 639 , - 584 , - 677 , - 918 , - 123 , - 660 , - 161 , - 994 , - 791 , - 736 , - 829 , - 1070 , - 275 , - 812 , - 313 , - 1146 , - 943 , - 888 , - 981 , - 38 , - 427 , - 964 , - 465 , - 114 , - 1095 , - 1040 , - 1133 , - 190 , - 579 , - 1116 , - 617 , - 266 , - 63 , - 8 , - 101 , - 342 , - 731 , - 84 , - 769 , - 418 , - 215 , - 160 , - 253 , - 494 , - 883 , - 236 , - 921 , - 570 , - 367 , - 312 , - 405 , - 646 , - 1035 , - 388 , - 1073 , - 722 , - 519 , - 464 , - 557 , - 798 , - 3 , - 540 , - 41 , - 874 , - 671 , - 616 , - 709 , - 950 , - 155 , - 692 , - 193 , - 1026 , - 823 , - 768 , - 861 , - 1102 , - 307 , - 844 , - 345 , - 1178 , - 975 , - 920 , - 1013 , - 70 , - 459 , - 996 , - 497 , - 146 , - 1127 , - 1072 , - 1165 , - 222 , - 611 , - 1148 , - 649 , - 298 , - 95 , - 40 , - 133 , - 374 , - 763 , - 116 , - 801 , - 450 , - 247 , - 192 , - 285 , - 526 , - 915 , - 268 , - 953 , - 602 , - 399 , - 344 , - 437 , - 678 , - 1067 , - 420 , - 1105 , - 754 , - 551 , - 496 , - 589 , - 830 , - 35 , - 572 , - 73 , - 906 , - 703 , - 648 , - 741 , - 982 , - 187 , - 724 , - 225 , - 1058 , - 855 , - 800 , - 893 , - 1134 , - 339 , - 876 , - 377 , - 26 , - 1007 , - 952 , - 1045 , - 102 , - 491 , - 1028 , - 529 , - 178 , - 1159 , - 1104 , - 13 , - 254 , - 643 , - 1180 , - 681 , - 330 , - 127 , - 72 , - 165 , - 406 , - 795 , - 148 , - 833 , - 482 , - 279 , - 224 , - 317 , - 558 , - 947 , - 300 , - 985 , - 634 , - 431 , - 376 , - 469 , - 710 , - 1099 , - 452 , - 1137 , - 786 , - 583 , - 528 , - 621 , - 862 , - 67 , - 604 , - 105 , - 938 , - 735 , - 680 , - 773 , - 1014 , - 219 , - 756 , - 257 , - 1090 , - 887 , - 832 , - 925 , - 1166 , - 371 , - 908 , - 409 , - 58 , - 1039 , - 984 , - 1077 , - 134 , - 523 , - 1060 , - 561 , - 210 , - 7 , - 1136 , - 45 , - 286 , - 675 , - 28 , - 713 , - 362 , - 159 , - 104 , - 197 , - 438 , - 827 , - 180 , - 865 , - 514 , - 311 , - 256 , - 349 , - 590 , - 979 , - 332 , - 1017 , - 666 , - 463 , - 408 , - 501 , - 742 , - 1131 , - 484 , - 1169 , - 818 , - 615 , - 560 , - 653 , - 894 , - 99 , - 636 , - 137 , - 970 , - 767 , - 712 , - 805 , - 1046 , - 251 , - 788 , - 289 , - 1122 , - 919 , - 864 , - 957 , - 14 , - 403 , - 940 , - 441 , - 90 , - 1071 , - 1016 , - 1109 , - 166 , - 555 , - 1092 , - 593 , - 242 , - 39 , - 1168 , - 77 , - 318 , - 707 , - 60 , - 745 , - 394 , - 191 , - 136 , - 229 , - 470 , - 859 , - 212 , - 897 , - 546 , - 343 , - 288 , - 381 , - 622 , - 1011 , - 364 , - 1049 , - 698 , - 495 , - 440 , - 533 , - 774 , - 1163 , - 516 , - 17 , - 850 , - 647 , - 592 , - 685 , - 926 , - 131 , - 668 , - 169 , - 1002 , - 799 , - 744 , - 837 , - 1078 , - 283 , - 820 , - 321 , - 1154 , - 951 , - 896 , - 989 , - 46 , - 435 , - 972 , - 473 , - 122 , - 1103 , - 1048 , - 1141 , - 198 , - 587 , - 1124 , - 625 , - 274 , - 71 , - 16 , - 109 , - 350 , - 739 , - 92 , - 777 , - 426 , - 223 , - 168 , - 261 , - 502 , - 891 , - 244 , - 929 , - 578 , - 375 , - 320 , - 413 , - 654 , - 1043 , - 396 , - 1081 , - 730 , - 527 , - 472 , - 565 , - 806 , - 11 , - 548 , - 49 , - 882 , - 679 , - 624 , - 717 , - 958 , - 163 , - 700 , - 201 , - 1034 , - 831 , - 776 , - 869 , - 1110 , - 315 , - 852 , - 353 , - 2 , - 983 , - 928 , - 1021 , - 78 , - 467 , - 1004 , - 505 , - 154 , - 1135 , - 1080 , - 1173 , - 230 , - 619 , - 1156 , - 657 , - 306 , - 103 , - 48 , - 141 , - 382 , - 771 , - 124 , - 809 , - 458 , - 255 , - 200 , - 293 , - 534 , - 923 , - 276 , - 961 , - 610 , - 407 , - 352 , - 445 , - 686 , - 1075 , - 428 , - 1113 , - 762 , - 559 , - 504 , - 597 , - 838 , - 43 , - 580 , - 81 , - 914 , - 711 , - 656 , - 749 , - 990 , - 195 , - 732 , - 233 , - 1066 , - 863 , - 808 , - 901 , - 1142 , - 347 , - 884 , - 385 , - 34 , - 1015 , - 960 , - 1053 , - 110 , - 499 , - 1036 , - 537 , - 186 , - 1167 , - 1112 , - 21 , - 262 , - 651 , - 4 , - 689 , - 338 , - 135 , - 80 , - 173 , - 414 , - 803 , - 156 , - 841 , - 490 , - 287 , - 232 , - 325 , - 566 , - 955 , - 308 , - 993 , - 642 , - 439 , - 384 , - 477 , - 718 , - 1107 , - 460 , - 1145 , - 794 , - 591 , - 536 , - 629 , - 870 , - 75 , - 612 , - 113 , - 946 , - 743 , - 688 , - 781 , - 1022 , - 227 , - 764 , - 265 , - 1098 , - 895 , - 840 , - 933 , - 1174 , - 379 , - 916 , - 417 , - 66 , - 1047 , - 992 , - 1085 , - 142 , - 531 , - 1068 , - 569 , - 218 , - 15 , - 1144 , - 53 , - 294 , - 683 , - 36 , - 721 , - 370 , - 167 , - 112 , - 205 , - 446 , - 835 , - 188 , - 873 , - 522 , - 319 , - 264 , - 357 , - 598 , - 987 , - 340 , - 1025 , - 674 , - 471 , - 416 , - 509 , - 750 , - 1139 , - 492 , - 1177 , - 826 , - 623 , - 568 , - 661 , - 902 , - 107 , - 644 , - 145 , - 978 , - 775 , - 720 , - 813 , - 1054 , - 259 , - 796 , - 297 , - 1130 , - 927 , - 872 , - 965 , - 22 , - 411 , - 948 , - 449 , - 98 , - 1079 , - 1024 , - 1117 , - 174 , - 563 , - 1100 , - 601 , - 250 , - 47 , - 1176 , - 85 , - 326 , - 715 , - 68 , - 753 , - 402 , - 199 , - 144 , - 237 , - 478 , - 867 , - 220 , - 905 , - 554 , - 351 , - 296 , - 389 , - 630 , - 1019 , - 372 , - 1057 , - 706 , - 503 , - 448 , - 541 , - 782 , - 1171 , - 524 , - 25 , - 858 , - 655 , - 600 , - 693 , - 934 , - 139 , - 676 , - 177 , - 1010 , - 807 , - 752 , - 845 , - 1086 , - 291 , - 828 , - 329 , - 1162 , - 959 , - 904 , - 997 , - 54 , - 443 , - 980 , - 481 , - 130 , - 1111 , - 1056 , - 1149 , - 206 , - 595 , - 1132 , - 633 , - 282 , - 79 , - 24 , - 117 , - 358 , - 747 , - 100 , - 785 , - 434 , - 231 , - 176 , - 269 , - 510 , - 899 , - 252 , - 937 , - 586 , - 383 , - 328 , - 421 , - 662 , - 1051 , - 404 , - 1089 , - 738 , - 535 , - 480 , - 573 , - 814 , - 19 , - 556 , - 57 , - 890 , - 687 , - 632 , - 725 , - 966 , - 171 , - 708 , - 209 , - 1042 , - 839 , - 784 , - 877 , - 1118 , - 323 , - 860 , - 361 , - 10 , - 991 , - 936 , - 1029 , - 86 , - 475 , - 1012 , - 513 , - 162 , - 1143 , - 1088 , - 1181 , - 238 , - 627 , - 1164 , - 665 , - 314 , - 111 , - 56 , - 149 , - 390 , - 779 , - 132 , - 817 , - 466 , - 263 , - 208 , - 301 , - 542 , - 931 , - 284 , - 969 , - 618 , - 415 , - 360 , - 453 , - 694 , - 1083 , - 436 , - 1121 , - 770 , - 567 , - 512 , - 605 , - 846 , - 51 , - 588 , - 89 , - 922 , - 719 , - 664 , - 757 , - 998 , - 203 , - 740 , - 241 , - 1074 , - 871 , - 816 , - 909 , - 1150 , - 355 , - 892 , - 393 , - 42 , - 1023 , - 968 , - 1061 , - 118 , - 507 , - 1044 , - 545 , - 194 , - 1175 , - 1120 , - 29 , - 270 , - 659 , - 12 , - 697 , - 346 , - 143 , - 88 , - 181 , - 422 , - 811 , - 164 , - 849 , - 498 , - 295 , - 240 , - 333 , - 574 , - 963 , - 316 , - 1001 , - 650 , - 447 , - 392 , - 485 , - 726 , - 1115 , - 468 , - 1153 , - 802 , - 599 , - 544 , - 637 , - 878 , - 83 , - 620 , - 121 , - 954 , - 751 , - 696 , - 789 , - 1030 , - 235 , - 772 , - 273 , - 1106 , - 903 , - 848 , - 941 , - 1182 , - 387 , - 924 , - 425 , - 74 , - 1055 , - 1000 , - 1093 , - 150 , - 539 , - 1076 , - 577 , - 226 , - 23 , - 1152 , - 61 , - 302 , - 691 , - 44 , - 729 , - 378 , - 175 , - 120 , - 213 , - 454 , - 843 , - 196 , - 881 , - 530 , - 327 , - 272 , - 365 , - 606 , - 995 , - 348 , - 1033 , - 682 , - 479 , - 424 , - 517 , - 758 , - 1147 , - 500 , - 1 , - 834 , - 631 , - 576 , - 669 , - 910 , - 115 , - 652 , - 153 , - 986 , - 783 , - 728 , - 821 , - 1062 , - 267 , - 804 , - 305 , - 1138 , - 935 , - 880 , - 973 , - 30 , - 419 , - 956 , - 457 , - 106 , - 1087 , - 1032 , - 1125 , - 182 , - 571 , - 1108 , - 609 , - 258 , - 55 , - 0 , - 115 , - 382 , - 801 , - 156 , - 879 , - 538 , - 349 , - 312 , - 427 , - 694 , - 1113 , - 468 , - 1191 , - 850 , - 661 , - 624 , - 739 , - 1006 , - 209 , - 780 , - 287 , - 1162 , - 973 , - 936 , - 1051 , - 102 , - 521 , - 1092 , - 599 , - 258 , - 69 , - 32 , - 147 , - 414 , - 833 , - 188 , - 911 , - 570 , - 381 , - 344 , - 459 , - 726 , - 1145 , - 500 , - 7 , - 882 , - 693 , - 656 , - 771 , - 1038 , - 241 , - 812 , - 319 , - 1194 , - 1005 , - 968 , - 1083 , - 134 , - 553 , - 1124 , - 631 , - 290 , - 101 , - 64 , - 179 , - 446 , - 865 , - 220 , - 943 , - 602 , - 413 , - 376 , - 491 , - 758 , - 1177 , - 532 , - 39 , - 914 , - 725 , - 688 , - 803 , - 1070 , - 273 , - 844 , - 351 , - 10 , - 1037 , - 1000 , - 1115 , - 166 , - 585 , - 1156 , - 663 , - 322 , - 133 , - 96 , - 211 , - 478 , - 897 , - 252 , - 975 , - 634 , - 445 , - 408 , - 523 , - 790 , - 1209 , - 564 , - 71 , - 946 , - 757 , - 720 , - 835 , - 1102 , - 305 , - 876 , - 383 , - 42 , - 1069 , - 1032 , - 1147 , - 198 , - 617 , - 1188 , - 695 , - 354 , - 165 , - 128 , - 243 , - 510 , - 929 , - 284 , - 1007 , - 666 , - 477 , - 440 , - 555 , - 822 , - 25 , - 596 , - 103 , - 978 , - 789 , - 752 , - 867 , - 1134 , - 337 , - 908 , - 415 , - 74 , - 1101 , - 1064 , - 1179 , - 230 , - 649 , - 4 , - 727 , - 386 , - 197 , - 160 , - 275 , - 542 , - 961 , - 316 , - 1039 , - 698 , - 509 , - 472 , - 587 , - 854 , - 57 , - 628 , - 135 , - 1010 , - 821 , - 784 , - 899 , - 1166 , - 369 , - 940 , - 447 , - 106 , - 1133 , - 1096 , - 1211 , - 262 , - 681 , - 36 , - 759 , - 418 , - 229 , - 192 , - 307 , - 574 , - 993 , - 348 , - 1071 , - 730 , - 541 , - 504 , - 619 , - 886 , - 89 , - 660 , - 167 , - 1042 , - 853 , - 816 , - 931 , - 1198 , - 401 , - 972 , - 479 , - 138 , - 1165 , - 1128 , - 27 , - 294 , - 713 , - 68 , - 791 , - 450 , - 261 , - 224 , - 339 , - 606 , - 1025 , - 380 , - 1103 , - 762 , - 573 , - 536 , - 651 , - 918 , - 121 , - 692 , - 199 , - 1074 , - 885 , - 848 , - 963 , - 14 , - 433 , - 1004 , - 511 , - 170 , - 1197 , - 1160 , - 59 , - 326 , - 745 , - 100 , - 823 , - 482 , - 293 , - 256 , - 371 , - 638 , - 1057 , - 412 , - 1135 , - 794 , - 605 , - 568 , - 683 , - 950 , - 153 , - 724 , - 231 , - 1106 , - 917 , - 880 , - 995 , - 46 , - 465 , - 1036 , - 543 , - 202 , - 13 , - 1192 , - 91 , - 358 , - 777 , - 132 , - 855 , - 514 , - 325 , - 288 , - 403 , - 670 , - 1089 , - 444 , - 1167 , - 826 , - 637 , - 600 , - 715 , - 982 , - 185 , - 756 , - 263 , - 1138 , - 949 , - 912 , - 1027 , - 78 , - 497 , - 1068 , - 575 , - 234 , - 45 , - 8 , - 123 , - 390 , - 809 , - 164 , - 887 , - 546 , - 357 , - 320 , - 435 , - 702 , - 1121 , - 476 , - 1199 , - 858 , - 669 , - 632 , - 747 , - 1014 , - 217 , - 788 , - 295 , - 1170 , - 981 , - 944 , - 1059 , - 110 , - 529 , - 1100 , - 607 , - 266 , - 77 , - 40 , - 155 , - 422 , - 841 , - 196 , - 919 , - 578 , - 389 , - 352 , - 467 , - 734 , - 1153 , - 508 , - 15 , - 890 , - 701 , - 664 , - 779 , - 1046 , - 249 , - 820 , - 327 , - 1202 , - 1013 , - 976 , - 1091 , - 142 , - 561 , - 1132 , - 639 , - 298 , - 109 , - 72 , - 187 , - 454 , - 873 , - 228 , - 951 , - 610 , - 421 , - 384 , - 499 , - 766 , - 1185 , - 540 , - 47 , - 922 , - 733 , - 696 , - 811 , - 1078 , - 281 , - 852 , - 359 , - 18 , - 1045 , - 1008 , - 1123 , - 174 , - 593 , - 1164 , - 671 , - 330 , - 141 , - 104 , - 219 , - 486 , - 905 , - 260 , - 983 , - 642 , - 453 , - 416 , - 531 , - 798 , - 1 , - 572 , - 79 , - 954 , - 765 , - 728 , - 843 , - 1110 , - 313 , - 884 , - 391 , - 50 , - 1077 , - 1040 , - 1155 , - 206 , - 625 , - 1196 , - 703 , - 362 , - 173 , - 136 , - 251 , - 518 , - 937 , - 292 , - 1015 , - 674 , - 485 , - 448 , - 563 , - 830 , - 33 , - 604 , - 111 , - 986 , - 797 , - 760 , - 875 , - 1142 , - 345 , - 916 , - 423 , - 82 , - 1109 , - 1072 , - 1187 , - 238 , - 657 , - 12 , - 735 , - 394 , - 205 , - 168 , - 283 , - 550 , - 969 , - 324 , - 1047 , - 706 , - 517 , - 480 , - 595 , - 862 , - 65 , - 636 , - 143 , - 1018 , - 829 , - 792 , - 907 , - 1174 , - 377 , - 948 , - 455 , - 114 , - 1141 , - 1104 , - 3 , - 270 , - 689 , - 44 , - 767 , - 426 , - 237 , - 200 , - 315 , - 582 , - 1001 , - 356 , - 1079 , - 738 , - 549 , - 512 , - 627 , - 894 , - 97 , - 668 , - 175 , - 1050 , - 861 , - 824 , - 939 , - 1206 , - 409 , - 980 , - 487 , - 146 , - 1173 , - 1136 , - 35 , - 302 , - 721 , - 76 , - 799 , - 458 , - 269 , - 232 , - 347 , - 614 , - 1033 , - 388 , - 1111 , - 770 , - 581 , - 544 , - 659 , - 926 , - 129 , - 700 , - 207 , - 1082 , - 893 , - 856 , - 971 , - 22 , - 441 , - 1012 , - 519 , - 178 , - 1205 , - 1168 , - 67 , - 334 , - 753 , - 108 , - 831 , - 490 , - 301 , - 264 , - 379 , - 646 , - 1065 , - 420 , - 1143 , - 802 , - 613 , - 576 , - 691 , - 958 , - 161 , - 732 , - 239 , - 1114 , - 925 , - 888 , - 1003 , - 54 , - 473 , - 1044 , - 551 , - 210 , - 21 , - 1200 , - 99 , - 366 , - 785 , - 140 , - 863 , - 522 , - 333 , - 296 , - 411 , - 678 , - 1097 , - 452 , - 1175 , - 834 , - 645 , - 608 , - 723 , - 990 , - 193 , - 764 , - 271 , - 1146 , - 957 , - 920 , - 1035 , - 86 , - 505 , - 1076 , - 583 , - 242 , - 53 , - 16 , - 131 , - 398 , - 817 , - 172 , - 895 , - 554 , - 365 , - 328 , - 443 , - 710 , - 1129 , - 484 , - 1207 , - 866 , - 677 , - 640 , - 755 , - 1022 , - 225 , - 796 , - 303 , - 1178 , - 989 , - 952 , - 1067 , - 118 , - 537 , - 1108 , - 615 , - 274 , - 85 , - 48 , - 163 , - 430 , - 849 , - 204 , - 927 , - 586 , - 397 , - 360 , - 475 , - 742 , - 1161 , - 516 , - 23 , - 898 , - 709 , - 672 , - 787 , - 1054 , - 257 , - 828 , - 335 , - 1210 , - 1021 , - 984 , - 1099 , - 150 , - 569 , - 1140 , - 647 , - 306 , - 117 , - 80 , - 195 , - 462 , - 881 , - 236 , - 959 , - 618 , - 429 , - 392 , - 507 , - 774 , - 1193 , - 548 , - 55 , - 930 , - 741 , - 704 , - 819 , - 1086 , - 289 , - 860 , - 367 , - 26 , - 1053 , - 1016 , - 1131 , - 182 , - 601 , - 1172 , - 679 , - 338 , - 149 , - 112 , - 227 , - 494 , - 913 , - 268 , - 991 , - 650 , - 461 , - 424 , - 539 , - 806 , - 9 , - 580 , - 87 , - 962 , - 773 , - 736 , - 851 , - 1118 , - 321 , - 892 , - 399 , - 58 , - 1085 , - 1048 , - 1163 , - 214 , - 633 , - 1204 , - 711 , - 370 , - 181 , - 144 , - 259 , - 526 , - 945 , - 300 , - 1023 , - 682 , - 493 , - 456 , - 571 , - 838 , - 41 , - 612 , - 119 , - 994 , - 805 , - 768 , - 883 , - 1150 , - 353 , - 924 , - 431 , - 90 , - 1117 , - 1080 , - 1195 , - 246 , - 665 , - 20 , - 743 , - 402 , - 213 , - 176 , - 291 , - 558 , - 977 , - 332 , - 1055 , - 714 , - 525 , - 488 , - 603 , - 870 , - 73 , - 644 , - 151 , - 1026 , - 837 , - 800 , - 915 , - 1182 , - 385 , - 956 , - 463 , - 122 , - 1149 , - 1112 , - 11 , - 278 , - 697 , - 52 , - 775 , - 434 , - 245 , - 208 , - 323 , - 590 , - 1009 , - 364 , - 1087 , - 746 , - 557 , - 520 , - 635 , - 902 , - 105 , - 676 , - 183 , - 1058 , - 869 , - 832 , - 947 , - 1214 , - 417 , - 988 , - 495 , - 154 , - 1181 , - 1144 , - 43 , - 310 , - 729 , - 84 , - 807 , - 466 , - 277 , - 240 , - 355 , - 622 , - 1041 , - 396 , - 1119 , - 778 , - 589 , - 552 , - 667 , - 934 , - 137 , - 708 , - 215 , - 1090 , - 901 , - 864 , - 979 , - 30 , - 449 , - 1020 , - 527 , - 186 , - 1213 , - 1176 , - 75 , - 342 , - 761 , - 116 , - 839 , - 498 , - 309 , - 272 , - 387 , - 654 , - 1073 , - 428 , - 1151 , - 810 , - 621 , - 584 , - 699 , - 966 , - 169 , - 740 , - 247 , - 1122 , - 933 , - 896 , - 1011 , - 62 , - 481 , - 1052 , - 559 , - 218 , - 29 , - 1208 , - 107 , - 374 , - 793 , - 148 , - 871 , - 530 , - 341 , - 304 , - 419 , - 686 , - 1105 , - 460 , - 1183 , - 842 , - 653 , - 616 , - 731 , - 998 , - 201 , - 772 , - 279 , - 1154 , - 965 , - 928 , - 1043 , - 94 , - 513 , - 1084 , - 591 , - 250 , - 61 , - 24 , - 139 , - 406 , - 825 , - 180 , - 903 , - 562 , - 373 , - 336 , - 451 , - 718 , - 1137 , - 492 , - 1215 , - 874 , - 685 , - 648 , - 763 , - 1030 , - 233 , - 804 , - 311 , - 1186 , - 997 , - 960 , - 1075 , - 126 , - 545 , - 1116 , - 623 , - 282 , - 93 , - 56 , - 171 , - 438 , - 857 , - 212 , - 935 , - 594 , - 405 , - 368 , - 483 , - 750 , - 1169 , - 524 , - 31 , - 906 , - 717 , - 680 , - 795 , - 1062 , - 265 , - 836 , - 343 , - 2 , - 1029 , - 992 , - 1107 , - 158 , - 577 , - 1148 , - 655 , - 314 , - 125 , - 88 , - 203 , - 470 , - 889 , - 244 , - 967 , - 626 , - 437 , - 400 , - 515 , - 782 , - 1201 , - 556 , - 63 , - 938 , - 749 , - 712 , - 827 , - 1094 , - 297 , - 868 , - 375 , - 34 , - 1061 , - 1024 , - 1139 , - 190 , - 609 , - 1180 , - 687 , - 346 , - 157 , - 120 , - 235 , - 502 , - 921 , - 276 , - 999 , - 658 , - 469 , - 432 , - 547 , - 814 , - 17 , - 588 , - 95 , - 970 , - 781 , - 744 , - 859 , - 1126 , - 329 , - 900 , - 407 , - 66 , - 1093 , - 1056 , - 1171 , - 222 , - 641 , - 1212 , - 719 , - 378 , - 189 , - 152 , - 267 , - 534 , - 953 , - 308 , - 1031 , - 690 , - 501 , - 464 , - 579 , - 846 , - 49 , - 620 , - 127 , - 1002 , - 813 , - 776 , - 891 , - 1158 , - 361 , - 932 , - 439 , - 98 , - 1125 , - 1088 , - 1203 , - 254 , - 673 , - 28 , - 751 , - 410 , - 221 , - 184 , - 299 , - 566 , - 985 , - 340 , - 1063 , - 722 , - 533 , - 496 , - 611 , - 878 , - 81 , - 652 , - 159 , - 1034 , - 845 , - 808 , - 923 , - 1190 , - 393 , - 964 , - 471 , - 130 , - 1157 , - 1120 , - 19 , - 286 , - 705 , - 60 , - 783 , - 442 , - 253 , - 216 , - 331 , - 598 , - 1017 , - 372 , - 1095 , - 754 , - 565 , - 528 , - 643 , - 910 , - 113 , - 684 , - 191 , - 1066 , - 877 , - 840 , - 955 , - 6 , - 425 , - 996 , - 503 , - 162 , - 1189 , - 1152 , - 51 , - 318 , - 737 , - 92 , - 815 , - 474 , - 285 , - 248 , - 363 , - 630 , - 1049 , - 404 , - 1127 , - 786 , - 597 , - 560 , - 675 , - 942 , - 145 , - 716 , - 223 , - 1098 , - 909 , - 872 , - 987 , - 38 , - 457 , - 1028 , - 535 , - 194 , - 5 , - 1184 , - 83 , - 350 , - 769 , - 124 , - 847 , - 506 , - 317 , - 280 , - 395 , - 662 , - 1081 , - 436 , - 1159 , - 818 , - 629 , - 592 , - 707 , - 974 , - 177 , - 748 , - 255 , - 1130 , - 941 , - 904 , - 1019 , - 70 , - 489 , - 1060 , - 567 , - 226 , - 37 , - 0 , - 97 , - 350 , - 759 , - 76 , - 797 , - 426 , - 211 , - 152 , - 249 , - 502 , - 911 , - 228 , - 949 , - 578 , - 363 , - 304 , - 401 , - 654 , - 1063 , - 380 , - 1101 , - 730 , - 515 , - 456 , - 553 , - 806 , - 1215 , - 532 , - 5 , - 882 , - 667 , - 608 , - 705 , - 958 , - 119 , - 684 , - 157 , - 1034 , - 819 , - 760 , - 857 , - 1110 , - 271 , - 836 , - 309 , - 1186 , - 971 , - 912 , - 1009 , - 14 , - 423 , - 988 , - 461 , - 90 , - 1123 , - 1064 , - 1161 , - 166 , - 575 , - 1140 , - 613 , - 242 , - 27 , - 1216 , - 65 , - 318 , - 727 , - 44 , - 765 , - 394 , - 179 , - 120 , - 217 , - 470 , - 879 , - 196 , - 917 , - 546 , - 331 , - 272 , - 369 , - 622 , - 1031 , - 348 , - 1069 , - 698 , - 483 , - 424 , - 521 , - 774 , - 1183 , - 500 , - 1221 , - 850 , - 635 , - 576 , - 673 , - 926 , - 87 , - 652 , - 125 , - 1002 , - 787 , - 728 , - 825 , - 1078 , - 239 , - 804 , - 277 , - 1154 , - 939 , - 880 , - 977 , - 1230 , - 391 , - 956 , - 429 , - 58 , - 1091 , - 1032 , - 1129 , - 134 , - 543 , - 1108 , - 581 , - 210 , - 1243 , - 1184 , - 33 , - 286 , - 695 , - 12 , - 733 , - 362 , - 147 , - 88 , - 185 , - 438 , - 847 , - 164 , - 885 , - 514 , - 299 , - 240 , - 337 , - 590 , - 999 , - 316 , - 1037 , - 666 , - 451 , - 392 , - 489 , - 742 , - 1151 , - 468 , - 1189 , - 818 , - 603 , - 544 , - 641 , - 894 , - 55 , - 620 , - 93 , - 970 , - 755 , - 696 , - 793 , - 1046 , - 207 , - 772 , - 245 , - 1122 , - 907 , - 848 , - 945 , - 1198 , - 359 , - 924 , - 397 , - 26 , - 1059 , - 1000 , - 1097 , - 102 , - 511 , - 1076 , - 549 , - 178 , - 1211 , - 1152 , - 1 , - 254 , - 663 , - 1228 , - 701 , - 330 , - 115 , - 56 , - 153 , - 406 , - 815 , - 132 , - 853 , - 482 , - 267 , - 208 , - 305 , - 558 , - 967 , - 284 , - 1005 , - 634 , - 419 , - 360 , - 457 , - 710 , - 1119 , - 436 , - 1157 , - 786 , - 571 , - 512 , - 609 , - 862 , - 23 , - 588 , - 61 , - 938 , - 723 , - 664 , - 761 , - 1014 , - 175 , - 740 , - 213 , - 1090 , - 875 , - 816 , - 913 , - 1166 , - 327 , - 892 , - 365 , - 1242 , - 1027 , - 968 , - 1065 , - 70 , - 479 , - 1044 , - 517 , - 146 , - 1179 , - 1120 , - 1217 , - 222 , - 631 , - 1196 , - 669 , - 298 , - 83 , - 24 , - 121 , - 374 , - 783 , - 100 , - 821 , - 450 , - 235 , - 176 , - 273 , - 526 , - 935 , - 252 , - 973 , - 602 , - 387 , - 328 , - 425 , - 678 , - 1087 , - 404 , - 1125 , - 754 , - 539 , - 480 , - 577 , - 830 , - 1239 , - 556 , - 29 , - 906 , - 691 , - 632 , - 729 , - 982 , - 143 , - 708 , - 181 , - 1058 , - 843 , - 784 , - 881 , - 1134 , - 295 , - 860 , - 333 , - 1210 , - 995 , - 936 , - 1033 , - 38 , - 447 , - 1012 , - 485 , - 114 , - 1147 , - 1088 , - 1185 , - 190 , - 599 , - 1164 , - 637 , - 266 , - 51 , - 1240 , - 89 , - 342 , - 751 , - 68 , - 789 , - 418 , - 203 , - 144 , - 241 , - 494 , - 903 , - 220 , - 941 , - 570 , - 355 , - 296 , - 393 , - 646 , - 1055 , - 372 , - 1093 , - 722 , - 507 , - 448 , - 545 , - 798 , - 1207 , - 524 , - 1245 , - 874 , - 659 , - 600 , - 697 , - 950 , - 111 , - 676 , - 149 , - 1026 , - 811 , - 752 , - 849 , - 1102 , - 263 , - 828 , - 301 , - 1178 , - 963 , - 904 , - 1001 , - 6 , - 415 , - 980 , - 453 , - 82 , - 1115 , - 1056 , - 1153 , - 158 , - 567 , - 1132 , - 605 , - 234 , - 19 , - 1208 , - 57 , - 310 , - 719 , - 36 , - 757 , - 386 , - 171 , - 112 , - 209 , - 462 , - 871 , - 188 , - 909 , - 538 , - 323 , - 264 , - 361 , - 614 , - 1023 , - 340 , - 1061 , - 690 , - 475 , - 416 , - 513 , - 766 , - 1175 , - 492 , - 1213 , - 842 , - 627 , - 568 , - 665 , - 918 , - 79 , - 644 , - 117 , - 994 , - 779 , - 720 , - 817 , - 1070 , - 231 , - 796 , - 269 , - 1146 , - 931 , - 872 , - 969 , - 1222 , - 383 , - 948 , - 421 , - 50 , - 1083 , - 1024 , - 1121 , - 126 , - 535 , - 1100 , - 573 , - 202 , - 1235 , - 1176 , - 25 , - 278 , - 687 , - 4 , - 725 , - 354 , - 139 , - 80 , - 177 , - 430 , - 839 , - 156 , - 877 , - 506 , - 291 , - 232 , - 329 , - 582 , - 991 , - 308 , - 1029 , - 658 , - 443 , - 384 , - 481 , - 734 , - 1143 , - 460 , - 1181 , - 810 , - 595 , - 536 , - 633 , - 886 , - 47 , - 612 , - 85 , - 962 , - 747 , - 688 , - 785 , - 1038 , - 199 , - 764 , - 237 , - 1114 , - 899 , - 840 , - 937 , - 1190 , - 351 , - 916 , - 389 , - 18 , - 1051 , - 992 , - 1089 , - 94 , - 503 , - 1068 , - 541 , - 170 , - 1203 , - 1144 , - 1241 , - 246 , - 655 , - 1220 , - 693 , - 322 , - 107 , - 48 , - 145 , - 398 , - 807 , - 124 , - 845 , - 474 , - 259 , - 200 , - 297 , - 550 , - 959 , - 276 , - 997 , - 626 , - 411 , - 352 , - 449 , - 702 , - 1111 , - 428 , - 1149 , - 778 , - 563 , - 504 , - 601 , - 854 , - 15 , - 580 , - 53 , - 930 , - 715 , - 656 , - 753 , - 1006 , - 167 , - 732 , - 205 , - 1082 , - 867 , - 808 , - 905 , - 1158 , - 319 , - 884 , - 357 , - 1234 , - 1019 , - 960 , - 1057 , - 62 , - 471 , - 1036 , - 509 , - 138 , - 1171 , - 1112 , - 1209 , - 214 , - 623 , - 1188 , - 661 , - 290 , - 75 , - 16 , - 113 , - 366 , - 775 , - 92 , - 813 , - 442 , - 227 , - 168 , - 265 , - 518 , - 927 , - 244 , - 965 , - 594 , - 379 , - 320 , - 417 , - 670 , - 1079 , - 396 , - 1117 , - 746 , - 531 , - 472 , - 569 , - 822 , - 1231 , - 548 , - 21 , - 898 , - 683 , - 624 , - 721 , - 974 , - 135 , - 700 , - 173 , - 1050 , - 835 , - 776 , - 873 , - 1126 , - 287 , - 852 , - 325 , - 1202 , - 987 , - 928 , - 1025 , - 30 , - 439 , - 1004 , - 477 , - 106 , - 1139 , - 1080 , - 1177 , - 182 , - 591 , - 1156 , - 629 , - 258 , - 43 , - 1232 , - 81 , - 334 , - 743 , - 60 , - 781 , - 410 , - 195 , - 136 , - 233 , - 486 , - 895 , - 212 , - 933 , - 562 , - 347 , - 288 , - 385 , - 638 , - 1047 , - 364 , - 1085 , - 714 , - 499 , - 440 , - 537 , - 790 , - 1199 , - 516 , - 1237 , - 866 , - 651 , - 592 , - 689 , - 942 , - 103 , - 668 , - 141 , - 1018 , - 803 , - 744 , - 841 , - 1094 , - 255 , - 820 , - 293 , - 1170 , - 955 , - 896 , - 993 , - 1246 , - 407 , - 972 , - 445 , - 74 , - 1107 , - 1048 , - 1145 , - 150 , - 559 , - 1124 , - 597 , - 226 , - 11 , - 1200 , - 49 , - 302 , - 711 , - 28 , - 749 , - 378 , - 163 , - 104 , - 201 , - 454 , - 863 , - 180 , - 901 , - 530 , - 315 , - 256 , - 353 , - 606 , - 1015 , - 332 , - 1053 , - 682 , - 467 , - 408 , - 505 , - 758 , - 1167 , - 484 , - 1205 , - 834 , - 619 , - 560 , - 657 , - 910 , - 71 , - 636 , - 109 , - 986 , - 771 , - 712 , - 809 , - 1062 , - 223 , - 788 , - 261 , - 1138 , - 923 , - 864 , - 961 , - 1214 , - 375 , - 940 , - 413 , - 42 , - 1075 , - 1016 , - 1113 , - 118 , - 527 , - 1092 , - 565 , - 194 , - 1227 , - 1168 , - 17 , - 270 , - 679 , - 1244 , - 717 , - 346 , - 131 , - 72 , - 169 , - 422 , - 831 , - 148 , - 869 , - 498 , - 283 , - 224 , - 321 , - 574 , - 983 , - 300 , - 1021 , - 650 , - 435 , - 376 , - 473 , - 726 , - 1135 , - 452 , - 1173 , - 802 , - 587 , - 528 , - 625 , - 878 , - 39 , - 604 , - 77 , - 954 , - 739 , - 680 , - 777 , - 1030 , - 191 , - 756 , - 229 , - 1106 , - 891 , - 832 , - 929 , - 1182 , - 343 , - 908 , - 381 , - 10 , - 1043 , - 984 , - 1081 , - 86 , - 495 , - 1060 , - 533 , - 162 , - 1195 , - 1136 , - 1233 , - 238 , - 647 , - 1212 , - 685 , - 314 , - 99 , - 40 , - 137 , - 390 , - 799 , - 116 , - 837 , - 466 , - 251 , - 192 , - 289 , - 542 , - 951 , - 268 , - 989 , - 618 , - 403 , - 344 , - 441 , - 694 , - 1103 , - 420 , - 1141 , - 770 , - 555 , - 496 , - 593 , - 846 , - 7 , - 572 , - 45 , - 922 , - 707 , - 648 , - 745 , - 998 , - 159 , - 724 , - 197 , - 1074 , - 859 , - 800 , - 897 , - 1150 , - 311 , - 876 , - 349 , - 1226 , - 1011 , - 952 , - 1049 , - 54 , - 463 , - 1028 , - 501 , - 130 , - 1163 , - 1104 , - 1201 , - 206 , - 615 , - 1180 , - 653 , - 282 , - 67 , - 8 , - 105 , - 358 , - 767 , - 84 , - 805 , - 434 , - 219 , - 160 , - 257 , - 510 , - 919 , - 236 , - 957 , - 586 , - 371 , - 312 , - 409 , - 662 , - 1071 , - 388 , - 1109 , - 738 , - 523 , - 464 , - 561 , - 814 , - 1223 , - 540 , - 13 , - 890 , - 675 , - 616 , - 713 , - 966 , - 127 , - 692 , - 165 , - 1042 , - 827 , - 768 , - 865 , - 1118 , - 279 , - 844 , - 317 , - 1194 , - 979 , - 920 , - 1017 , - 22 , - 431 , - 996 , - 469 , - 98 , - 1131 , - 1072 , - 1169 , - 174 , - 583 , - 1148 , - 621 , - 250 , - 35 , - 1224 , - 73 , - 326 , - 735 , - 52 , - 773 , - 402 , - 187 , - 128 , - 225 , - 478 , - 887 , - 204 , - 925 , - 554 , - 339 , - 280 , - 377 , - 630 , - 1039 , - 356 , - 1077 , - 706 , - 491 , - 432 , - 529 , - 782 , - 1191 , - 508 , - 1229 , - 858 , - 643 , - 584 , - 681 , - 934 , - 95 , - 660 , - 133 , - 1010 , - 795 , - 736 , - 833 , - 1086 , - 247 , - 812 , - 285 , - 1162 , - 947 , - 888 , - 985 , - 1238 , - 399 , - 964 , - 437 , - 66 , - 1099 , - 1040 , - 1137 , - 142 , - 551 , - 1116 , - 589 , - 218 , - 3 , - 1192 , - 41 , - 294 , - 703 , - 20 , - 741 , - 370 , - 155 , - 96 , - 193 , - 446 , - 855 , - 172 , - 893 , - 522 , - 307 , - 248 , - 345 , - 598 , - 1007 , - 324 , - 1045 , - 674 , - 459 , - 400 , - 497 , - 750 , - 1159 , - 476 , - 1197 , - 826 , - 611 , - 552 , - 649 , - 902 , - 63 , - 628 , - 101 , - 978 , - 763 , - 704 , - 801 , - 1054 , - 215 , - 780 , - 253 , - 1130 , - 915 , - 856 , - 953 , - 1206 , - 367 , - 932 , - 405 , - 34 , - 1067 , - 1008 , - 1105 , - 110 , - 519 , - 1084 , - 557 , - 186 , - 1219 , - 1160 , - 9 , - 262 , - 671 , - 1236 , - 709 , - 338 , - 123 , - 64 , - 161 , - 414 , - 823 , - 140 , - 861 , - 490 , - 275 , - 216 , - 313 , - 566 , - 975 , - 292 , - 1013 , - 642 , - 427 , - 368 , - 465 , - 718 , - 1127 , - 444 , - 1165 , - 794 , - 579 , - 520 , - 617 , - 870 , - 31 , - 596 , - 69 , - 946 , - 731 , - 672 , - 769 , - 1022 , - 183 , - 748 , - 221 , - 1098 , - 883 , - 824 , - 921 , - 1174 , - 335 , - 900 , - 373 , - 2 , - 1035 , - 976 , - 1073 , - 78 , - 487 , - 1052 , - 525 , - 154 , - 1187 , - 1128 , - 1225 , - 230 , - 639 , - 1204 , - 677 , - 306 , - 91 , - 32 , - 129 , - 382 , - 791 , - 108 , - 829 , - 458 , - 243 , - 184 , - 281 , - 534 , - 943 , - 260 , - 981 , - 610 , - 395 , - 336 , - 433 , - 686 , - 1095 , - 412 , - 1133 , - 762 , - 547 , - 488 , - 585 , - 838 , - 1247 , - 564 , - 37 , - 914 , - 699 , - 640 , - 737 , - 990 , - 151 , - 716 , - 189 , - 1066 , - 851 , - 792 , - 889 , - 1142 , - 303 , - 868 , - 341 , - 1218 , - 1003 , - 944 , - 1041 , - 46 , - 455 , - 1020 , - 493 , - 122 , - 1155 , - 1096 , - 1193 , - 198 , - 607 , - 1172 , - 645 , - 274 , - 59 , - 0 , - 439 , - 78 , - 197 , - 796 , - 595 , - 874 , - 353 , - 312 , - 751 , - 390 , - 509 , - 1108 , - 907 , - 1186 , - 665 , - 624 , - 1063 , - 702 , - 821 , - 140 , - 1219 , - 218 , - 977 , - 936 , - 95 , - 1014 , - 1133 , - 452 , - 251 , - 530 , - 9 , - 1248 , - 407 , - 46 , - 165 , - 764 , - 563 , - 842 , - 321 , - 280 , - 719 , - 358 , - 477 , - 1076 , - 875 , - 1154 , - 633 , - 592 , - 1031 , - 670 , - 789 , - 108 , - 1187 , - 186 , - 945 , - 904 , - 63 , - 982 , - 1101 , - 420 , - 219 , - 498 , - 1257 , - 1216 , - 375 , - 14 , - 133 , - 732 , - 531 , - 810 , - 289 , - 248 , - 687 , - 326 , - 445 , - 1044 , - 843 , - 1122 , - 601 , - 560 , - 999 , - 638 , - 757 , - 76 , - 1155 , - 154 , - 913 , - 872 , - 31 , - 950 , - 1069 , - 388 , - 187 , - 466 , - 1225 , - 1184 , - 343 , - 1262 , - 101 , - 700 , - 499 , - 778 , - 257 , - 216 , - 655 , - 294 , - 413 , - 1012 , - 811 , - 1090 , - 569 , - 528 , - 967 , - 606 , - 725 , - 44 , - 1123 , - 122 , - 881 , - 840 , - 1279 , - 918 , - 1037 , - 356 , - 155 , - 434 , - 1193 , - 1152 , - 311 , - 1230 , - 69 , - 668 , - 467 , - 746 , - 225 , - 184 , - 623 , - 262 , - 381 , - 980 , - 779 , - 1058 , - 537 , - 496 , - 935 , - 574 , - 693 , - 12 , - 1091 , - 90 , - 849 , - 808 , - 1247 , - 886 , - 1005 , - 324 , - 123 , - 402 , - 1161 , - 1120 , - 279 , - 1198 , - 37 , - 636 , - 435 , - 714 , - 193 , - 152 , - 591 , - 230 , - 349 , - 948 , - 747 , - 1026 , - 505 , - 464 , - 903 , - 542 , - 661 , - 1260 , - 1059 , - 58 , - 817 , - 776 , - 1215 , - 854 , - 973 , - 292 , - 91 , - 370 , - 1129 , - 1088 , - 247 , - 1166 , - 5 , - 604 , - 403 , - 682 , - 161 , - 120 , - 559 , - 198 , - 317 , - 916 , - 715 , - 994 , - 473 , - 432 , - 871 , - 510 , - 629 , - 1228 , - 1027 , - 26 , - 785 , - 744 , - 1183 , - 822 , - 941 , - 260 , - 59 , - 338 , - 1097 , - 1056 , - 215 , - 1134 , - 1253 , - 572 , - 371 , - 650 , - 129 , - 88 , - 527 , - 166 , - 285 , - 884 , - 683 , - 962 , - 441 , - 400 , - 839 , - 478 , - 597 , - 1196 , - 995 , - 1274 , - 753 , - 712 , - 1151 , - 790 , - 909 , - 228 , - 27 , - 306 , - 1065 , - 1024 , - 183 , - 1102 , - 1221 , - 540 , - 339 , - 618 , - 97 , - 56 , - 495 , - 134 , - 253 , - 852 , - 651 , - 930 , - 409 , - 368 , - 807 , - 446 , - 565 , - 1164 , - 963 , - 1242 , - 721 , - 680 , - 1119 , - 758 , - 877 , - 196 , - 1275 , - 274 , - 1033 , - 992 , - 151 , - 1070 , - 1189 , - 508 , - 307 , - 586 , - 65 , - 24 , - 463 , - 102 , - 221 , - 820 , - 619 , - 898 , - 377 , - 336 , - 775 , - 414 , - 533 , - 1132 , - 931 , - 1210 , - 689 , - 648 , - 1087 , - 726 , - 845 , - 164 , - 1243 , - 242 , - 1001 , - 960 , - 119 , - 1038 , - 1157 , - 476 , - 275 , - 554 , - 33 , - 1272 , - 431 , - 70 , - 189 , - 788 , - 587 , - 866 , - 345 , - 304 , - 743 , - 382 , - 501 , - 1100 , - 899 , - 1178 , - 657 , - 616 , - 1055 , - 694 , - 813 , - 132 , - 1211 , - 210 , - 969 , - 928 , - 87 , - 1006 , - 1125 , - 444 , - 243 , - 522 , - 1 , - 1240 , - 399 , - 38 , - 157 , - 756 , - 555 , - 834 , - 313 , - 272 , - 711 , - 350 , - 469 , - 1068 , - 867 , - 1146 , - 625 , - 584 , - 1023 , - 662 , - 781 , - 100 , - 1179 , - 178 , - 937 , - 896 , - 55 , - 974 , - 1093 , - 412 , - 211 , - 490 , - 1249 , - 1208 , - 367 , - 6 , - 125 , - 724 , - 523 , - 802 , - 281 , - 240 , - 679 , - 318 , - 437 , - 1036 , - 835 , - 1114 , - 593 , - 552 , - 991 , - 630 , - 749 , - 68 , - 1147 , - 146 , - 905 , - 864 , - 23 , - 942 , - 1061 , - 380 , - 179 , - 458 , - 1217 , - 1176 , - 335 , - 1254 , - 93 , - 692 , - 491 , - 770 , - 249 , - 208 , - 647 , - 286 , - 405 , - 1004 , - 803 , - 1082 , - 561 , - 520 , - 959 , - 598 , - 717 , - 36 , - 1115 , - 114 , - 873 , - 832 , - 1271 , - 910 , - 1029 , - 348 , - 147 , - 426 , - 1185 , - 1144 , - 303 , - 1222 , - 61 , - 660 , - 459 , - 738 , - 217 , - 176 , - 615 , - 254 , - 373 , - 972 , - 771 , - 1050 , - 529 , - 488 , - 927 , - 566 , - 685 , - 4 , - 1083 , - 82 , - 841 , - 800 , - 1239 , - 878 , - 997 , - 316 , - 115 , - 394 , - 1153 , - 1112 , - 271 , - 1190 , - 29 , - 628 , - 427 , - 706 , - 185 , - 144 , - 583 , - 222 , - 341 , - 940 , - 739 , - 1018 , - 497 , - 456 , - 895 , - 534 , - 653 , - 1252 , - 1051 , - 50 , - 809 , - 768 , - 1207 , - 846 , - 965 , - 284 , - 83 , - 362 , - 1121 , - 1080 , - 239 , - 1158 , - 1277 , - 596 , - 395 , - 674 , - 153 , - 112 , - 551 , - 190 , - 309 , - 908 , - 707 , - 986 , - 465 , - 424 , - 863 , - 502 , - 621 , - 1220 , - 1019 , - 18 , - 777 , - 736 , - 1175 , - 814 , - 933 , - 252 , - 51 , - 330 , - 1089 , - 1048 , - 207 , - 1126 , - 1245 , - 564 , - 363 , - 642 , - 121 , - 80 , - 519 , - 158 , - 277 , - 876 , - 675 , - 954 , - 433 , - 392 , - 831 , - 470 , - 589 , - 1188 , - 987 , - 1266 , - 745 , - 704 , - 1143 , - 782 , - 901 , - 220 , - 19 , - 298 , - 1057 , - 1016 , - 175 , - 1094 , - 1213 , - 532 , - 331 , - 610 , - 89 , - 48 , - 487 , - 126 , - 245 , - 844 , - 643 , - 922 , - 401 , - 360 , - 799 , - 438 , - 557 , - 1156 , - 955 , - 1234 , - 713 , - 672 , - 1111 , - 750 , - 869 , - 188 , - 1267 , - 266 , - 1025 , - 984 , - 143 , - 1062 , - 1181 , - 500 , - 299 , - 578 , - 57 , - 16 , - 455 , - 94 , - 213 , - 812 , - 611 , - 890 , - 369 , - 328 , - 767 , - 406 , - 525 , - 1124 , - 923 , - 1202 , - 681 , - 640 , - 1079 , - 718 , - 837 , - 156 , - 1235 , - 234 , - 993 , - 952 , - 111 , - 1030 , - 1149 , - 468 , - 267 , - 546 , - 25 , - 1264 , - 423 , - 62 , - 181 , - 780 , - 579 , - 858 , - 337 , - 296 , - 735 , - 374 , - 493 , - 1092 , - 891 , - 1170 , - 649 , - 608 , - 1047 , - 686 , - 805 , - 124 , - 1203 , - 202 , - 961 , - 920 , - 79 , - 998 , - 1117 , - 436 , - 235 , - 514 , - 1273 , - 1232 , - 391 , - 30 , - 149 , - 748 , - 547 , - 826 , - 305 , - 264 , - 703 , - 342 , - 461 , - 1060 , - 859 , - 1138 , - 617 , - 576 , - 1015 , - 654 , - 773 , - 92 , - 1171 , - 170 , - 929 , - 888 , - 47 , - 966 , - 1085 , - 404 , - 203 , - 482 , - 1241 , - 1200 , - 359 , - 1278 , - 117 , - 716 , - 515 , - 794 , - 273 , - 232 , - 671 , - 310 , - 429 , - 1028 , - 827 , - 1106 , - 585 , - 544 , - 983 , - 622 , - 741 , - 60 , - 1139 , - 138 , - 897 , - 856 , - 15 , - 934 , - 1053 , - 372 , - 171 , - 450 , - 1209 , - 1168 , - 327 , - 1246 , - 85 , - 684 , - 483 , - 762 , - 241 , - 200 , - 639 , - 278 , - 397 , - 996 , - 795 , - 1074 , - 553 , - 512 , - 951 , - 590 , - 709 , - 28 , - 1107 , - 106 , - 865 , - 824 , - 1263 , - 902 , - 1021 , - 340 , - 139 , - 418 , - 1177 , - 1136 , - 295 , - 1214 , - 53 , - 652 , - 451 , - 730 , - 209 , - 168 , - 607 , - 246 , - 365 , - 964 , - 763 , - 1042 , - 521 , - 480 , - 919 , - 558 , - 677 , - 1276 , - 1075 , - 74 , - 833 , - 792 , - 1231 , - 870 , - 989 , - 308 , - 107 , - 386 , - 1145 , - 1104 , - 263 , - 1182 , - 21 , - 620 , - 419 , - 698 , - 177 , - 136 , - 575 , - 214 , - 333 , - 932 , - 731 , - 1010 , - 489 , - 448 , - 887 , - 526 , - 645 , - 1244 , - 1043 , - 42 , - 801 , - 760 , - 1199 , - 838 , - 957 , - 276 , - 75 , - 354 , - 1113 , - 1072 , - 231 , - 1150 , - 1269 , - 588 , - 387 , - 666 , - 145 , - 104 , - 543 , - 182 , - 301 , - 900 , - 699 , - 978 , - 457 , - 416 , - 855 , - 494 , - 613 , - 1212 , - 1011 , - 10 , - 769 , - 728 , - 1167 , - 806 , - 925 , - 244 , - 43 , - 322 , - 1081 , - 1040 , - 199 , - 1118 , - 1237 , - 556 , - 355 , - 634 , - 113 , - 72 , - 511 , - 150 , - 269 , - 868 , - 667 , - 946 , - 425 , - 384 , - 823 , - 462 , - 581 , - 1180 , - 979 , - 1258 , - 737 , - 696 , - 1135 , - 774 , - 893 , - 212 , - 11 , - 290 , - 1049 , - 1008 , - 167 , - 1086 , - 1205 , - 524 , - 323 , - 602 , - 81 , - 40 , - 479 , - 118 , - 237 , - 836 , - 635 , - 914 , - 393 , - 352 , - 791 , - 430 , - 549 , - 1148 , - 947 , - 1226 , - 705 , - 664 , - 1103 , - 742 , - 861 , - 180 , - 1259 , - 258 , - 1017 , - 976 , - 135 , - 1054 , - 1173 , - 492 , - 291 , - 570 , - 49 , - 8 , - 447 , - 86 , - 205 , - 804 , - 603 , - 882 , - 361 , - 320 , - 759 , - 398 , - 517 , - 1116 , - 915 , - 1194 , - 673 , - 632 , - 1071 , - 710 , - 829 , - 148 , - 1227 , - 226 , - 985 , - 944 , - 103 , - 1022 , - 1141 , - 460 , - 259 , - 538 , - 17 , - 1256 , - 415 , - 54 , - 173 , - 772 , - 571 , - 850 , - 329 , - 288 , - 727 , - 366 , - 485 , - 1084 , - 883 , - 1162 , - 641 , - 600 , - 1039 , - 678 , - 797 , - 116 , - 1195 , - 194 , - 953 , - 912 , - 71 , - 990 , - 1109 , - 428 , - 227 , - 506 , - 1265 , - 1224 , - 383 , - 22 , - 141 , - 740 , - 539 , - 818 , - 297 , - 256 , - 695 , - 334 , - 453 , - 1052 , - 851 , - 1130 , - 609 , - 568 , - 1007 , - 646 , - 765 , - 84 , - 1163 , - 162 , - 921 , - 880 , - 39 , - 958 , - 1077 , - 396 , - 195 , - 474 , - 1233 , - 1192 , - 351 , - 1270 , - 109 , - 708 , - 507 , - 786 , - 265 , - 224 , - 663 , - 302 , - 421 , - 1020 , - 819 , - 1098 , - 577 , - 536 , - 975 , - 614 , - 733 , - 52 , - 1131 , - 130 , - 889 , - 848 , - 7 , - 926 , - 1045 , - 364 , - 163 , - 442 , - 1201 , - 1160 , - 319 , - 1238 , - 77 , - 676 , - 475 , - 754 , - 233 , - 192 , - 631 , - 270 , - 389 , - 988 , - 787 , - 1066 , - 545 , - 504 , - 943 , - 582 , - 701 , - 20 , - 1099 , - 98 , - 857 , - 816 , - 1255 , - 894 , - 1013 , - 332 , - 131 , - 410 , - 1169 , - 1128 , - 287 , - 1206 , - 45 , - 644 , - 443 , - 722 , - 201 , - 160 , - 599 , - 238 , - 357 , - 956 , - 755 , - 1034 , - 513 , - 472 , - 911 , - 550 , - 669 , - 1268 , - 1067 , - 66 , - 825 , - 784 , - 1223 , - 862 , - 981 , - 300 , - 99 , - 378 , - 1137 , - 1096 , - 255 , - 1174 , - 13 , - 612 , - 411 , - 690 , - 169 , - 128 , - 567 , - 206 , - 325 , - 924 , - 723 , - 1002 , - 481 , - 440 , - 879 , - 518 , - 637 , - 1236 , - 1035 , - 34 , - 793 , - 752 , - 1191 , - 830 , - 949 , - 268 , - 67 , - 346 , - 1105 , - 1064 , - 223 , - 1142 , - 1261 , - 580 , - 379 , - 658 , - 137 , - 96 , - 535 , - 174 , - 293 , - 892 , - 691 , - 970 , - 449 , - 408 , - 847 , - 486 , - 605 , - 1204 , - 1003 , - 2 , - 761 , - 720 , - 1159 , - 798 , - 917 , - 236 , - 35 , - 314 , - 1073 , - 1032 , - 191 , - 1110 , - 1229 , - 548 , - 347 , - 626 , - 105 , - 64 , - 503 , - 142 , - 261 , - 860 , - 659 , - 938 , - 417 , - 376 , - 815 , - 454 , - 573 , - 1172 , - 971 , - 1250 , - 729 , - 688 , - 1127 , - 766 , - 885 , - 204 , - 3 , - 282 , - 1041 , - 1000 , - 159 , - 1078 , - 1197 , - 516 , - 315 , - 594 , - 73 , - 32 , - 471 , - 110 , - 229 , - 828 , - 627 , - 906 , - 385 , - 344 , - 783 , - 422 , - 541 , - 1140 , - 939 , - 1218 , - 697 , - 656 , - 1095 , - 734 , - 853 , - 172 , - 1251 , - 250 , - 1009 , - 968 , - 127 , - 1046 , - 1165 , - 484 , - 283 , - 562 , - 41 , - 0 , - 103 , - 370 , - 801 , - 84 , - 843 , - 454 , - 229 , - 168 , - 271 , - 538 , - 969 , - 252 , - 1011 , - 622 , - 397 , - 336 , - 439 , - 706 , - 1137 , - 420 , - 1179 , - 790 , - 565 , - 504 , - 607 , - 874 , - 1305 , - 588 , - 35 , - 958 , - 733 , - 672 , - 775 , - 1042 , - 161 , - 756 , - 203 , - 1126 , - 901 , - 840 , - 943 , - 1210 , - 329 , - 924 , - 371 , - 1294 , - 1069 , - 1008 , - 1111 , - 66 , - 497 , - 1092 , - 539 , - 150 , - 1237 , - 1176 , - 1279 , - 234 , - 665 , - 1260 , - 707 , - 318 , - 93 , - 32 , - 135 , - 402 , - 833 , - 116 , - 875 , - 486 , - 261 , - 200 , - 303 , - 570 , - 1001 , - 284 , - 1043 , - 654 , - 429 , - 368 , - 471 , - 738 , - 1169 , - 452 , - 1211 , - 822 , - 597 , - 536 , - 639 , - 906 , - 25 , - 620 , - 67 , - 990 , - 765 , - 704 , - 807 , - 1074 , - 193 , - 788 , - 235 , - 1158 , - 933 , - 872 , - 975 , - 1242 , - 361 , - 956 , - 403 , - 14 , - 1101 , - 1040 , - 1143 , - 98 , - 529 , - 1124 , - 571 , - 182 , - 1269 , - 1208 , - 1311 , - 266 , - 697 , - 1292 , - 739 , - 350 , - 125 , - 64 , - 167 , - 434 , - 865 , - 148 , - 907 , - 518 , - 293 , - 232 , - 335 , - 602 , - 1033 , - 316 , - 1075 , - 686 , - 461 , - 400 , - 503 , - 770 , - 1201 , - 484 , - 1243 , - 854 , - 629 , - 568 , - 671 , - 938 , - 57 , - 652 , - 99 , - 1022 , - 797 , - 736 , - 839 , - 1106 , - 225 , - 820 , - 267 , - 1190 , - 965 , - 904 , - 1007 , - 1274 , - 393 , - 988 , - 435 , - 46 , - 1133 , - 1072 , - 1175 , - 130 , - 561 , - 1156 , - 603 , - 214 , - 1301 , - 1240 , - 31 , - 298 , - 729 , - 12 , - 771 , - 382 , - 157 , - 96 , - 199 , - 466 , - 897 , - 180 , - 939 , - 550 , - 325 , - 264 , - 367 , - 634 , - 1065 , - 348 , - 1107 , - 718 , - 493 , - 432 , - 535 , - 802 , - 1233 , - 516 , - 1275 , - 886 , - 661 , - 600 , - 703 , - 970 , - 89 , - 684 , - 131 , - 1054 , - 829 , - 768 , - 871 , - 1138 , - 257 , - 852 , - 299 , - 1222 , - 997 , - 936 , - 1039 , - 1306 , - 425 , - 1020 , - 467 , - 78 , - 1165 , - 1104 , - 1207 , - 162 , - 593 , - 1188 , - 635 , - 246 , - 21 , - 1272 , - 63 , - 330 , - 761 , - 44 , - 803 , - 414 , - 189 , - 128 , - 231 , - 498 , - 929 , - 212 , - 971 , - 582 , - 357 , - 296 , - 399 , - 666 , - 1097 , - 380 , - 1139 , - 750 , - 525 , - 464 , - 567 , - 834 , - 1265 , - 548 , - 1307 , - 918 , - 693 , - 632 , - 735 , - 1002 , - 121 , - 716 , - 163 , - 1086 , - 861 , - 800 , - 903 , - 1170 , - 289 , - 884 , - 331 , - 1254 , - 1029 , - 968 , - 1071 , - 26 , - 457 , - 1052 , - 499 , - 110 , - 1197 , - 1136 , - 1239 , - 194 , - 625 , - 1220 , - 667 , - 278 , - 53 , - 1304 , - 95 , - 362 , - 793 , - 76 , - 835 , - 446 , - 221 , - 160 , - 263 , - 530 , - 961 , - 244 , - 1003 , - 614 , - 389 , - 328 , - 431 , - 698 , - 1129 , - 412 , - 1171 , - 782 , - 557 , - 496 , - 599 , - 866 , - 1297 , - 580 , - 27 , - 950 , - 725 , - 664 , - 767 , - 1034 , - 153 , - 748 , - 195 , - 1118 , - 893 , - 832 , - 935 , - 1202 , - 321 , - 916 , - 363 , - 1286 , - 1061 , - 1000 , - 1103 , - 58 , - 489 , - 1084 , - 531 , - 142 , - 1229 , - 1168 , - 1271 , - 226 , - 657 , - 1252 , - 699 , - 310 , - 85 , - 24 , - 127 , - 394 , - 825 , - 108 , - 867 , - 478 , - 253 , - 192 , - 295 , - 562 , - 993 , - 276 , - 1035 , - 646 , - 421 , - 360 , - 463 , - 730 , - 1161 , - 444 , - 1203 , - 814 , - 589 , - 528 , - 631 , - 898 , - 17 , - 612 , - 59 , - 982 , - 757 , - 696 , - 799 , - 1066 , - 185 , - 780 , - 227 , - 1150 , - 925 , - 864 , - 967 , - 1234 , - 353 , - 948 , - 395 , - 6 , - 1093 , - 1032 , - 1135 , - 90 , - 521 , - 1116 , - 563 , - 174 , - 1261 , - 1200 , - 1303 , - 258 , - 689 , - 1284 , - 731 , - 342 , - 117 , - 56 , - 159 , - 426 , - 857 , - 140 , - 899 , - 510 , - 285 , - 224 , - 327 , - 594 , - 1025 , - 308 , - 1067 , - 678 , - 453 , - 392 , - 495 , - 762 , - 1193 , - 476 , - 1235 , - 846 , - 621 , - 560 , - 663 , - 930 , - 49 , - 644 , - 91 , - 1014 , - 789 , - 728 , - 831 , - 1098 , - 217 , - 812 , - 259 , - 1182 , - 957 , - 896 , - 999 , - 1266 , - 385 , - 980 , - 427 , - 38 , - 1125 , - 1064 , - 1167 , - 122 , - 553 , - 1148 , - 595 , - 206 , - 1293 , - 1232 , - 23 , - 290 , - 721 , - 4 , - 763 , - 374 , - 149 , - 88 , - 191 , - 458 , - 889 , - 172 , - 931 , - 542 , - 317 , - 256 , - 359 , - 626 , - 1057 , - 340 , - 1099 , - 710 , - 485 , - 424 , - 527 , - 794 , - 1225 , - 508 , - 1267 , - 878 , - 653 , - 592 , - 695 , - 962 , - 81 , - 676 , - 123 , - 1046 , - 821 , - 760 , - 863 , - 1130 , - 249 , - 844 , - 291 , - 1214 , - 989 , - 928 , - 1031 , - 1298 , - 417 , - 1012 , - 459 , - 70 , - 1157 , - 1096 , - 1199 , - 154 , - 585 , - 1180 , - 627 , - 238 , - 13 , - 1264 , - 55 , - 322 , - 753 , - 36 , - 795 , - 406 , - 181 , - 120 , - 223 , - 490 , - 921 , - 204 , - 963 , - 574 , - 349 , - 288 , - 391 , - 658 , - 1089 , - 372 , - 1131 , - 742 , - 517 , - 456 , - 559 , - 826 , - 1257 , - 540 , - 1299 , - 910 , - 685 , - 624 , - 727 , - 994 , - 113 , - 708 , - 155 , - 1078 , - 853 , - 792 , - 895 , - 1162 , - 281 , - 876 , - 323 , - 1246 , - 1021 , - 960 , - 1063 , - 18 , - 449 , - 1044 , - 491 , - 102 , - 1189 , - 1128 , - 1231 , - 186 , - 617 , - 1212 , - 659 , - 270 , - 45 , - 1296 , - 87 , - 354 , - 785 , - 68 , - 827 , - 438 , - 213 , - 152 , - 255 , - 522 , - 953 , - 236 , - 995 , - 606 , - 381 , - 320 , - 423 , - 690 , - 1121 , - 404 , - 1163 , - 774 , - 549 , - 488 , - 591 , - 858 , - 1289 , - 572 , - 19 , - 942 , - 717 , - 656 , - 759 , - 1026 , - 145 , - 740 , - 187 , - 1110 , - 885 , - 824 , - 927 , - 1194 , - 313 , - 908 , - 355 , - 1278 , - 1053 , - 992 , - 1095 , - 50 , - 481 , - 1076 , - 523 , - 134 , - 1221 , - 1160 , - 1263 , - 218 , - 649 , - 1244 , - 691 , - 302 , - 77 , - 16 , - 119 , - 386 , - 817 , - 100 , - 859 , - 470 , - 245 , - 184 , - 287 , - 554 , - 985 , - 268 , - 1027 , - 638 , - 413 , - 352 , - 455 , - 722 , - 1153 , - 436 , - 1195 , - 806 , - 581 , - 520 , - 623 , - 890 , - 9 , - 604 , - 51 , - 974 , - 749 , - 688 , - 791 , - 1058 , - 177 , - 772 , - 219 , - 1142 , - 917 , - 856 , - 959 , - 1226 , - 345 , - 940 , - 387 , - 1310 , - 1085 , - 1024 , - 1127 , - 82 , - 513 , - 1108 , - 555 , - 166 , - 1253 , - 1192 , - 1295 , - 250 , - 681 , - 1276 , - 723 , - 334 , - 109 , - 48 , - 151 , - 418 , - 849 , - 132 , - 891 , - 502 , - 277 , - 216 , - 319 , - 586 , - 1017 , - 300 , - 1059 , - 670 , - 445 , - 384 , - 487 , - 754 , - 1185 , - 468 , - 1227 , - 838 , - 613 , - 552 , - 655 , - 922 , - 41 , - 636 , - 83 , - 1006 , - 781 , - 720 , - 823 , - 1090 , - 209 , - 804 , - 251 , - 1174 , - 949 , - 888 , - 991 , - 1258 , - 377 , - 972 , - 419 , - 30 , - 1117 , - 1056 , - 1159 , - 114 , - 545 , - 1140 , - 587 , - 198 , - 1285 , - 1224 , - 15 , - 282 , - 713 , - 1308 , - 755 , - 366 , - 141 , - 80 , - 183 , - 450 , - 881 , - 164 , - 923 , - 534 , - 309 , - 248 , - 351 , - 618 , - 1049 , - 332 , - 1091 , - 702 , - 477 , - 416 , - 519 , - 786 , - 1217 , - 500 , - 1259 , - 870 , - 645 , - 584 , - 687 , - 954 , - 73 , - 668 , - 115 , - 1038 , - 813 , - 752 , - 855 , - 1122 , - 241 , - 836 , - 283 , - 1206 , - 981 , - 920 , - 1023 , - 1290 , - 409 , - 1004 , - 451 , - 62 , - 1149 , - 1088 , - 1191 , - 146 , - 577 , - 1172 , - 619 , - 230 , - 5 , - 1256 , - 47 , - 314 , - 745 , - 28 , - 787 , - 398 , - 173 , - 112 , - 215 , - 482 , - 913 , - 196 , - 955 , - 566 , - 341 , - 280 , - 383 , - 650 , - 1081 , - 364 , - 1123 , - 734 , - 509 , - 448 , - 551 , - 818 , - 1249 , - 532 , - 1291 , - 902 , - 677 , - 616 , - 719 , - 986 , - 105 , - 700 , - 147 , - 1070 , - 845 , - 784 , - 887 , - 1154 , - 273 , - 868 , - 315 , - 1238 , - 1013 , - 952 , - 1055 , - 10 , - 441 , - 1036 , - 483 , - 94 , - 1181 , - 1120 , - 1223 , - 178 , - 609 , - 1204 , - 651 , - 262 , - 37 , - 1288 , - 79 , - 346 , - 777 , - 60 , - 819 , - 430 , - 205 , - 144 , - 247 , - 514 , - 945 , - 228 , - 987 , - 598 , - 373 , - 312 , - 415 , - 682 , - 1113 , - 396 , - 1155 , - 766 , - 541 , - 480 , - 583 , - 850 , - 1281 , - 564 , - 11 , - 934 , - 709 , - 648 , - 751 , - 1018 , - 137 , - 732 , - 179 , - 1102 , - 877 , - 816 , - 919 , - 1186 , - 305 , - 900 , - 347 , - 1270 , - 1045 , - 984 , - 1087 , - 42 , - 473 , - 1068 , - 515 , - 126 , - 1213 , - 1152 , - 1255 , - 210 , - 641 , - 1236 , - 683 , - 294 , - 69 , - 8 , - 111 , - 378 , - 809 , - 92 , - 851 , - 462 , - 237 , - 176 , - 279 , - 546 , - 977 , - 260 , - 1019 , - 630 , - 405 , - 344 , - 447 , - 714 , - 1145 , - 428 , - 1187 , - 798 , - 573 , - 512 , - 615 , - 882 , - 1 , - 596 , - 43 , - 966 , - 741 , - 680 , - 783 , - 1050 , - 169 , - 764 , - 211 , - 1134 , - 909 , - 848 , - 951 , - 1218 , - 337 , - 932 , - 379 , - 1302 , - 1077 , - 1016 , - 1119 , - 74 , - 505 , - 1100 , - 547 , - 158 , - 1245 , - 1184 , - 1287 , - 242 , - 673 , - 1268 , - 715 , - 326 , - 101 , - 40 , - 143 , - 410 , - 841 , - 124 , - 883 , - 494 , - 269 , - 208 , - 311 , - 578 , - 1009 , - 292 , - 1051 , - 662 , - 437 , - 376 , - 479 , - 746 , - 1177 , - 460 , - 1219 , - 830 , - 605 , - 544 , - 647 , - 914 , - 33 , - 628 , - 75 , - 998 , - 773 , - 712 , - 815 , - 1082 , - 201 , - 796 , - 243 , - 1166 , - 941 , - 880 , - 983 , - 1250 , - 369 , - 964 , - 411 , - 22 , - 1109 , - 1048 , - 1151 , - 106 , - 537 , - 1132 , - 579 , - 190 , - 1277 , - 1216 , - 7 , - 274 , - 705 , - 1300 , - 747 , - 358 , - 133 , - 72 , - 175 , - 442 , - 873 , - 156 , - 915 , - 526 , - 301 , - 240 , - 343 , - 610 , - 1041 , - 324 , - 1083 , - 694 , - 469 , - 408 , - 511 , - 778 , - 1209 , - 492 , - 1251 , - 862 , - 637 , - 576 , - 679 , - 946 , - 65 , - 660 , - 107 , - 1030 , - 805 , - 744 , - 847 , - 1114 , - 233 , - 828 , - 275 , - 1198 , - 973 , - 912 , - 1015 , - 1282 , - 401 , - 996 , - 443 , - 54 , - 1141 , - 1080 , - 1183 , - 138 , - 569 , - 1164 , - 611 , - 222 , - 1309 , - 1248 , - 39 , - 306 , - 737 , - 20 , - 779 , - 390 , - 165 , - 104 , - 207 , - 474 , - 905 , - 188 , - 947 , - 558 , - 333 , - 272 , - 375 , - 642 , - 1073 , - 356 , - 1115 , - 726 , - 501 , - 440 , - 543 , - 810 , - 1241 , - 524 , - 1283 , - 894 , - 669 , - 608 , - 711 , - 978 , - 97 , - 692 , - 139 , - 1062 , - 837 , - 776 , - 879 , - 1146 , - 265 , - 860 , - 307 , - 1230 , - 1005 , - 944 , - 1047 , - 2 , - 433 , - 1028 , - 475 , - 86 , - 1173 , - 1112 , - 1215 , - 170 , - 601 , - 1196 , - 643 , - 254 , - 29 , - 1280 , - 71 , - 338 , - 769 , - 52 , - 811 , - 422 , - 197 , - 136 , - 239 , - 506 , - 937 , - 220 , - 979 , - 590 , - 365 , - 304 , - 407 , - 674 , - 1105 , - 388 , - 1147 , - 758 , - 533 , - 472 , - 575 , - 842 , - 1273 , - 556 , - 3 , - 926 , - 701 , - 640 , - 743 , - 1010 , - 129 , - 724 , - 171 , - 1094 , - 869 , - 808 , - 911 , - 1178 , - 297 , - 892 , - 339 , - 1262 , - 1037 , - 976 , - 1079 , - 34 , - 465 , - 1060 , - 507 , - 118 , - 1205 , - 1144 , - 1247 , - 202 , - 633 , - 1228 , - 675 , - 286 , - 61 , - 0 , - 463 , - 86 , - 213 , - 844 , - 635 , - 930 , - 385 , - 344 , - 807 , - 430 , - 557 , - 1188 , - 979 , - 1274 , - 729 , - 688 , - 1151 , - 774 , - 901 , - 188 , - 1323 , - 274 , - 1073 , - 1032 , - 151 , - 1118 , - 1245 , - 532 , - 323 , - 618 , - 73 , - 32 , - 495 , - 118 , - 245 , - 876 , - 667 , - 962 , - 417 , - 376 , - 839 , - 462 , - 589 , - 1220 , - 1011 , - 1306 , - 761 , - 720 , - 1183 , - 806 , - 933 , - 220 , - 11 , - 306 , - 1105 , - 1064 , - 183 , - 1150 , - 1277 , - 564 , - 355 , - 650 , - 105 , - 64 , - 527 , - 150 , - 277 , - 908 , - 699 , - 994 , - 449 , - 408 , - 871 , - 494 , - 621 , - 1252 , - 1043 , - 1338 , - 793 , - 752 , - 1215 , - 838 , - 965 , - 252 , - 43 , - 338 , - 1137 , - 1096 , - 215 , - 1182 , - 1309 , - 596 , - 387 , - 682 , - 137 , - 96 , - 559 , - 182 , - 309 , - 940 , - 731 , - 1026 , - 481 , - 440 , - 903 , - 526 , - 653 , - 1284 , - 1075 , - 26 , - 825 , - 784 , - 1247 , - 870 , - 997 , - 284 , - 75 , - 370 , - 1169 , - 1128 , - 247 , - 1214 , - 1341 , - 628 , - 419 , - 714 , - 169 , - 128 , - 591 , - 214 , - 341 , - 972 , - 763 , - 1058 , - 513 , - 472 , - 935 , - 558 , - 685 , - 1316 , - 1107 , - 58 , - 857 , - 816 , - 1279 , - 902 , - 1029 , - 316 , - 107 , - 402 , - 1201 , - 1160 , - 279 , - 1246 , - 29 , - 660 , - 451 , - 746 , - 201 , - 160 , - 623 , - 246 , - 373 , - 1004 , - 795 , - 1090 , - 545 , - 504 , - 967 , - 590 , - 717 , - 4 , - 1139 , - 90 , - 889 , - 848 , - 1311 , - 934 , - 1061 , - 348 , - 139 , - 434 , - 1233 , - 1192 , - 311 , - 1278 , - 61 , - 692 , - 483 , - 778 , - 233 , - 192 , - 655 , - 278 , - 405 , - 1036 , - 827 , - 1122 , - 577 , - 536 , - 999 , - 622 , - 749 , - 36 , - 1171 , - 122 , - 921 , - 880 , - 1343 , - 966 , - 1093 , - 380 , - 171 , - 466 , - 1265 , - 1224 , - 343 , - 1310 , - 93 , - 724 , - 515 , - 810 , - 265 , - 224 , - 687 , - 310 , - 437 , - 1068 , - 859 , - 1154 , - 609 , - 568 , - 1031 , - 654 , - 781 , - 68 , - 1203 , - 154 , - 953 , - 912 , - 31 , - 998 , - 1125 , - 412 , - 203 , - 498 , - 1297 , - 1256 , - 375 , - 1342 , - 125 , - 756 , - 547 , - 842 , - 297 , - 256 , - 719 , - 342 , - 469 , - 1100 , - 891 , - 1186 , - 641 , - 600 , - 1063 , - 686 , - 813 , - 100 , - 1235 , - 186 , - 985 , - 944 , - 63 , - 1030 , - 1157 , - 444 , - 235 , - 530 , - 1329 , - 1288 , - 407 , - 30 , - 157 , - 788 , - 579 , - 874 , - 329 , - 288 , - 751 , - 374 , - 501 , - 1132 , - 923 , - 1218 , - 673 , - 632 , - 1095 , - 718 , - 845 , - 132 , - 1267 , - 218 , - 1017 , - 976 , - 95 , - 1062 , - 1189 , - 476 , - 267 , - 562 , - 17 , - 1320 , - 439 , - 62 , - 189 , - 820 , - 611 , - 906 , - 361 , - 320 , - 783 , - 406 , - 533 , - 1164 , - 955 , - 1250 , - 705 , - 664 , - 1127 , - 750 , - 877 , - 164 , - 1299 , - 250 , - 1049 , - 1008 , - 127 , - 1094 , - 1221 , - 508 , - 299 , - 594 , - 49 , - 8 , - 471 , - 94 , - 221 , - 852 , - 643 , - 938 , - 393 , - 352 , - 815 , - 438 , - 565 , - 1196 , - 987 , - 1282 , - 737 , - 696 , - 1159 , - 782 , - 909 , - 196 , - 1331 , - 282 , - 1081 , - 1040 , - 159 , - 1126 , - 1253 , - 540 , - 331 , - 626 , - 81 , - 40 , - 503 , - 126 , - 253 , - 884 , - 675 , - 970 , - 425 , - 384 , - 847 , - 470 , - 597 , - 1228 , - 1019 , - 1314 , - 769 , - 728 , - 1191 , - 814 , - 941 , - 228 , - 19 , - 314 , - 1113 , - 1072 , - 191 , - 1158 , - 1285 , - 572 , - 363 , - 658 , - 113 , - 72 , - 535 , - 158 , - 285 , - 916 , - 707 , - 1002 , - 457 , - 416 , - 879 , - 502 , - 629 , - 1260 , - 1051 , - 2 , - 801 , - 760 , - 1223 , - 846 , - 973 , - 260 , - 51 , - 346 , - 1145 , - 1104 , - 223 , - 1190 , - 1317 , - 604 , - 395 , - 690 , - 145 , - 104 , - 567 , - 190 , - 317 , - 948 , - 739 , - 1034 , - 489 , - 448 , - 911 , - 534 , - 661 , - 1292 , - 1083 , - 34 , - 833 , - 792 , - 1255 , - 878 , - 1005 , - 292 , - 83 , - 378 , - 1177 , - 1136 , - 255 , - 1222 , - 5 , - 636 , - 427 , - 722 , - 177 , - 136 , - 599 , - 222 , - 349 , - 980 , - 771 , - 1066 , - 521 , - 480 , - 943 , - 566 , - 693 , - 1324 , - 1115 , - 66 , - 865 , - 824 , - 1287 , - 910 , - 1037 , - 324 , - 115 , - 410 , - 1209 , - 1168 , - 287 , - 1254 , - 37 , - 668 , - 459 , - 754 , - 209 , - 168 , - 631 , - 254 , - 381 , - 1012 , - 803 , - 1098 , - 553 , - 512 , - 975 , - 598 , - 725 , - 12 , - 1147 , - 98 , - 897 , - 856 , - 1319 , - 942 , - 1069 , - 356 , - 147 , - 442 , - 1241 , - 1200 , - 319 , - 1286 , - 69 , - 700 , - 491 , - 786 , - 241 , - 200 , - 663 , - 286 , - 413 , - 1044 , - 835 , - 1130 , - 585 , - 544 , - 1007 , - 630 , - 757 , - 44 , - 1179 , - 130 , - 929 , - 888 , - 7 , - 974 , - 1101 , - 388 , - 179 , - 474 , - 1273 , - 1232 , - 351 , - 1318 , - 101 , - 732 , - 523 , - 818 , - 273 , - 232 , - 695 , - 318 , - 445 , - 1076 , - 867 , - 1162 , - 617 , - 576 , - 1039 , - 662 , - 789 , - 76 , - 1211 , - 162 , - 961 , - 920 , - 39 , - 1006 , - 1133 , - 420 , - 211 , - 506 , - 1305 , - 1264 , - 383 , - 6 , - 133 , - 764 , - 555 , - 850 , - 305 , - 264 , - 727 , - 350 , - 477 , - 1108 , - 899 , - 1194 , - 649 , - 608 , - 1071 , - 694 , - 821 , - 108 , - 1243 , - 194 , - 993 , - 952 , - 71 , - 1038 , - 1165 , - 452 , - 243 , - 538 , - 1337 , - 1296 , - 415 , - 38 , - 165 , - 796 , - 587 , - 882 , - 337 , - 296 , - 759 , - 382 , - 509 , - 1140 , - 931 , - 1226 , - 681 , - 640 , - 1103 , - 726 , - 853 , - 140 , - 1275 , - 226 , - 1025 , - 984 , - 103 , - 1070 , - 1197 , - 484 , - 275 , - 570 , - 25 , - 1328 , - 447 , - 70 , - 197 , - 828 , - 619 , - 914 , - 369 , - 328 , - 791 , - 414 , - 541 , - 1172 , - 963 , - 1258 , - 713 , - 672 , - 1135 , - 758 , - 885 , - 172 , - 1307 , - 258 , - 1057 , - 1016 , - 135 , - 1102 , - 1229 , - 516 , - 307 , - 602 , - 57 , - 16 , - 479 , - 102 , - 229 , - 860 , - 651 , - 946 , - 401 , - 360 , - 823 , - 446 , - 573 , - 1204 , - 995 , - 1290 , - 745 , - 704 , - 1167 , - 790 , - 917 , - 204 , - 1339 , - 290 , - 1089 , - 1048 , - 167 , - 1134 , - 1261 , - 548 , - 339 , - 634 , - 89 , - 48 , - 511 , - 134 , - 261 , - 892 , - 683 , - 978 , - 433 , - 392 , - 855 , - 478 , - 605 , - 1236 , - 1027 , - 1322 , - 777 , - 736 , - 1199 , - 822 , - 949 , - 236 , - 27 , - 322 , - 1121 , - 1080 , - 199 , - 1166 , - 1293 , - 580 , - 371 , - 666 , - 121 , - 80 , - 543 , - 166 , - 293 , - 924 , - 715 , - 1010 , - 465 , - 424 , - 887 , - 510 , - 637 , - 1268 , - 1059 , - 10 , - 809 , - 768 , - 1231 , - 854 , - 981 , - 268 , - 59 , - 354 , - 1153 , - 1112 , - 231 , - 1198 , - 1325 , - 612 , - 403 , - 698 , - 153 , - 112 , - 575 , - 198 , - 325 , - 956 , - 747 , - 1042 , - 497 , - 456 , - 919 , - 542 , - 669 , - 1300 , - 1091 , - 42 , - 841 , - 800 , - 1263 , - 886 , - 1013 , - 300 , - 91 , - 386 , - 1185 , - 1144 , - 263 , - 1230 , - 13 , - 644 , - 435 , - 730 , - 185 , - 144 , - 607 , - 230 , - 357 , - 988 , - 779 , - 1074 , - 529 , - 488 , - 951 , - 574 , - 701 , - 1332 , - 1123 , - 74 , - 873 , - 832 , - 1295 , - 918 , - 1045 , - 332 , - 123 , - 418 , - 1217 , - 1176 , - 295 , - 1262 , - 45 , - 676 , - 467 , - 762 , - 217 , - 176 , - 639 , - 262 , - 389 , - 1020 , - 811 , - 1106 , - 561 , - 520 , - 983 , - 606 , - 733 , - 20 , - 1155 , - 106 , - 905 , - 864 , - 1327 , - 950 , - 1077 , - 364 , - 155 , - 450 , - 1249 , - 1208 , - 327 , - 1294 , - 77 , - 708 , - 499 , - 794 , - 249 , - 208 , - 671 , - 294 , - 421 , - 1052 , - 843 , - 1138 , - 593 , - 552 , - 1015 , - 638 , - 765 , - 52 , - 1187 , - 138 , - 937 , - 896 , - 15 , - 982 , - 1109 , - 396 , - 187 , - 482 , - 1281 , - 1240 , - 359 , - 1326 , - 109 , - 740 , - 531 , - 826 , - 281 , - 240 , - 703 , - 326 , - 453 , - 1084 , - 875 , - 1170 , - 625 , - 584 , - 1047 , - 670 , - 797 , - 84 , - 1219 , - 170 , - 969 , - 928 , - 47 , - 1014 , - 1141 , - 428 , - 219 , - 514 , - 1313 , - 1272 , - 391 , - 14 , - 141 , - 772 , - 563 , - 858 , - 313 , - 272 , - 735 , - 358 , - 485 , - 1116 , - 907 , - 1202 , - 657 , - 616 , - 1079 , - 702 , - 829 , - 116 , - 1251 , - 202 , - 1001 , - 960 , - 79 , - 1046 , - 1173 , - 460 , - 251 , - 546 , - 1 , - 1304 , - 423 , - 46 , - 173 , - 804 , - 595 , - 890 , - 345 , - 304 , - 767 , - 390 , - 517 , - 1148 , - 939 , - 1234 , - 689 , - 648 , - 1111 , - 734 , - 861 , - 148 , - 1283 , - 234 , - 1033 , - 992 , - 111 , - 1078 , - 1205 , - 492 , - 283 , - 578 , - 33 , - 1336 , - 455 , - 78 , - 205 , - 836 , - 627 , - 922 , - 377 , - 336 , - 799 , - 422 , - 549 , - 1180 , - 971 , - 1266 , - 721 , - 680 , - 1143 , - 766 , - 893 , - 180 , - 1315 , - 266 , - 1065 , - 1024 , - 143 , - 1110 , - 1237 , - 524 , - 315 , - 610 , - 65 , - 24 , - 487 , - 110 , - 237 , - 868 , - 659 , - 954 , - 409 , - 368 , - 831 , - 454 , - 581 , - 1212 , - 1003 , - 1298 , - 753 , - 712 , - 1175 , - 798 , - 925 , - 212 , - 3 , - 298 , - 1097 , - 1056 , - 175 , - 1142 , - 1269 , - 556 , - 347 , - 642 , - 97 , - 56 , - 519 , - 142 , - 269 , - 900 , - 691 , - 986 , - 441 , - 400 , - 863 , - 486 , - 613 , - 1244 , - 1035 , - 1330 , - 785 , - 744 , - 1207 , - 830 , - 957 , - 244 , - 35 , - 330 , - 1129 , - 1088 , - 207 , - 1174 , - 1301 , - 588 , - 379 , - 674 , - 129 , - 88 , - 551 , - 174 , - 301 , - 932 , - 723 , - 1018 , - 473 , - 432 , - 895 , - 518 , - 645 , - 1276 , - 1067 , - 18 , - 817 , - 776 , - 1239 , - 862 , - 989 , - 276 , - 67 , - 362 , - 1161 , - 1120 , - 239 , - 1206 , - 1333 , - 620 , - 411 , - 706 , - 161 , - 120 , - 583 , - 206 , - 333 , - 964 , - 755 , - 1050 , - 505 , - 464 , - 927 , - 550 , - 677 , - 1308 , - 1099 , - 50 , - 849 , - 808 , - 1271 , - 894 , - 1021 , - 308 , - 99 , - 394 , - 1193 , - 1152 , - 271 , - 1238 , - 21 , - 652 , - 443 , - 738 , - 193 , - 152 , - 615 , - 238 , - 365 , - 996 , - 787 , - 1082 , - 537 , - 496 , - 959 , - 582 , - 709 , - 1340 , - 1131 , - 82 , - 881 , - 840 , - 1303 , - 926 , - 1053 , - 340 , - 131 , - 426 , - 1225 , - 1184 , - 303 , - 1270 , - 53 , - 684 , - 475 , - 770 , - 225 , - 184 , - 647 , - 270 , - 397 , - 1028 , - 819 , - 1114 , - 569 , - 528 , - 991 , - 614 , - 741 , - 28 , - 1163 , - 114 , - 913 , - 872 , - 1335 , - 958 , - 1085 , - 372 , - 163 , - 458 , - 1257 , - 1216 , - 335 , - 1302 , - 85 , - 716 , - 507 , - 802 , - 257 , - 216 , - 679 , - 302 , - 429 , - 1060 , - 851 , - 1146 , - 601 , - 560 , - 1023 , - 646 , - 773 , - 60 , - 1195 , - 146 , - 945 , - 904 , - 23 , - 990 , - 1117 , - 404 , - 195 , - 490 , - 1289 , - 1248 , - 367 , - 1334 , - 117 , - 748 , - 539 , - 834 , - 289 , - 248 , - 711 , - 334 , - 461 , - 1092 , - 883 , - 1178 , - 633 , - 592 , - 1055 , - 678 , - 805 , - 92 , - 1227 , - 178 , - 977 , - 936 , - 55 , - 1022 , - 1149 , - 436 , - 227 , - 522 , - 1321 , - 1280 , - 399 , - 22 , - 149 , - 780 , - 571 , - 866 , - 321 , - 280 , - 743 , - 366 , - 493 , - 1124 , - 915 , - 1210 , - 665 , - 624 , - 1087 , - 710 , - 837 , - 124 , - 1259 , - 210 , - 1009 , - 968 , - 87 , - 1054 , - 1181 , - 468 , - 259 , - 554 , - 9 , - 1312 , - 431 , - 54 , - 181 , - 812 , - 603 , - 898 , - 353 , - 312 , - 775 , - 398 , - 525 , - 1156 , - 947 , - 1242 , - 697 , - 656 , - 1119 , - 742 , - 869 , - 156 , - 1291 , - 242 , - 1041 , - 1000 , - 119 , - 1086 , - 1213 , - 500 , - 291 , - 586 , - 41 , - 0 , - 107 , - 386 , - 837 , - 84 , - 879 , - 470 , - 233 , - 168 , - 275 , - 554 , - 1005 , - 252 , - 1047 , - 638 , - 401 , - 336 , - 443 , - 722 , - 1173 , - 420 , - 1215 , - 806 , - 569 , - 504 , - 611 , - 890 , - 1341 , - 588 , - 7 , - 974 , - 737 , - 672 , - 779 , - 1058 , - 133 , - 756 , - 175 , - 1142 , - 905 , - 840 , - 947 , - 1226 , - 301 , - 924 , - 343 , - 1310 , - 1073 , - 1008 , - 1115 , - 18 , - 469 , - 1092 , - 511 , - 102 , - 1241 , - 1176 , - 1283 , - 186 , - 637 , - 1260 , - 679 , - 270 , - 33 , - 1344 , - 75 , - 354 , - 805 , - 52 , - 847 , - 438 , - 201 , - 136 , - 243 , - 522 , - 973 , - 220 , - 1015 , - 606 , - 369 , - 304 , - 411 , - 690 , - 1141 , - 388 , - 1183 , - 774 , - 537 , - 472 , - 579 , - 858 , - 1309 , - 556 , - 1351 , - 942 , - 705 , - 640 , - 747 , - 1026 , - 101 , - 724 , - 143 , - 1110 , - 873 , - 808 , - 915 , - 1194 , - 269 , - 892 , - 311 , - 1278 , - 1041 , - 976 , - 1083 , - 1362 , - 437 , - 1060 , - 479 , - 70 , - 1209 , - 1144 , - 1251 , - 154 , - 605 , - 1228 , - 647 , - 238 , - 1 , - 1312 , - 43 , - 322 , - 773 , - 20 , - 815 , - 406 , - 169 , - 104 , - 211 , - 490 , - 941 , - 188 , - 983 , - 574 , - 337 , - 272 , - 379 , - 658 , - 1109 , - 356 , - 1151 , - 742 , - 505 , - 440 , - 547 , - 826 , - 1277 , - 524 , - 1319 , - 910 , - 673 , - 608 , - 715 , - 994 , - 69 , - 692 , - 111 , - 1078 , - 841 , - 776 , - 883 , - 1162 , - 237 , - 860 , - 279 , - 1246 , - 1009 , - 944 , - 1051 , - 1330 , - 405 , - 1028 , - 447 , - 38 , - 1177 , - 1112 , - 1219 , - 122 , - 573 , - 1196 , - 615 , - 206 , - 1345 , - 1280 , - 11 , - 290 , - 741 , - 1364 , - 783 , - 374 , - 137 , - 72 , - 179 , - 458 , - 909 , - 156 , - 951 , - 542 , - 305 , - 240 , - 347 , - 626 , - 1077 , - 324 , - 1119 , - 710 , - 473 , - 408 , - 515 , - 794 , - 1245 , - 492 , - 1287 , - 878 , - 641 , - 576 , - 683 , - 962 , - 37 , - 660 , - 79 , - 1046 , - 809 , - 744 , - 851 , - 1130 , - 205 , - 828 , - 247 , - 1214 , - 977 , - 912 , - 1019 , - 1298 , - 373 , - 996 , - 415 , - 6 , - 1145 , - 1080 , - 1187 , - 90 , - 541 , - 1164 , - 583 , - 174 , - 1313 , - 1248 , - 1355 , - 258 , - 709 , - 1332 , - 751 , - 342 , - 105 , - 40 , - 147 , - 426 , - 877 , - 124 , - 919 , - 510 , - 273 , - 208 , - 315 , - 594 , - 1045 , - 292 , - 1087 , - 678 , - 441 , - 376 , - 483 , - 762 , - 1213 , - 460 , - 1255 , - 846 , - 609 , - 544 , - 651 , - 930 , - 5 , - 628 , - 47 , - 1014 , - 777 , - 712 , - 819 , - 1098 , - 173 , - 796 , - 215 , - 1182 , - 945 , - 880 , - 987 , - 1266 , - 341 , - 964 , - 383 , - 1350 , - 1113 , - 1048 , - 1155 , - 58 , - 509 , - 1132 , - 551 , - 142 , - 1281 , - 1216 , - 1323 , - 226 , - 677 , - 1300 , - 719 , - 310 , - 73 , - 8 , - 115 , - 394 , - 845 , - 92 , - 887 , - 478 , - 241 , - 176 , - 283 , - 562 , - 1013 , - 260 , - 1055 , - 646 , - 409 , - 344 , - 451 , - 730 , - 1181 , - 428 , - 1223 , - 814 , - 577 , - 512 , - 619 , - 898 , - 1349 , - 596 , - 15 , - 982 , - 745 , - 680 , - 787 , - 1066 , - 141 , - 764 , - 183 , - 1150 , - 913 , - 848 , - 955 , - 1234 , - 309 , - 932 , - 351 , - 1318 , - 1081 , - 1016 , - 1123 , - 26 , - 477 , - 1100 , - 519 , - 110 , - 1249 , - 1184 , - 1291 , - 194 , - 645 , - 1268 , - 687 , - 278 , - 41 , - 1352 , - 83 , - 362 , - 813 , - 60 , - 855 , - 446 , - 209 , - 144 , - 251 , - 530 , - 981 , - 228 , - 1023 , - 614 , - 377 , - 312 , - 419 , - 698 , - 1149 , - 396 , - 1191 , - 782 , - 545 , - 480 , - 587 , - 866 , - 1317 , - 564 , - 1359 , - 950 , - 713 , - 648 , - 755 , - 1034 , - 109 , - 732 , - 151 , - 1118 , - 881 , - 816 , - 923 , - 1202 , - 277 , - 900 , - 319 , - 1286 , - 1049 , - 984 , - 1091 , - 1370 , - 445 , - 1068 , - 487 , - 78 , - 1217 , - 1152 , - 1259 , - 162 , - 613 , - 1236 , - 655 , - 246 , - 9 , - 1320 , - 51 , - 330 , - 781 , - 28 , - 823 , - 414 , - 177 , - 112 , - 219 , - 498 , - 949 , - 196 , - 991 , - 582 , - 345 , - 280 , - 387 , - 666 , - 1117 , - 364 , - 1159 , - 750 , - 513 , - 448 , - 555 , - 834 , - 1285 , - 532 , - 1327 , - 918 , - 681 , - 616 , - 723 , - 1002 , - 77 , - 700 , - 119 , - 1086 , - 849 , - 784 , - 891 , - 1170 , - 245 , - 868 , - 287 , - 1254 , - 1017 , - 952 , - 1059 , - 1338 , - 413 , - 1036 , - 455 , - 46 , - 1185 , - 1120 , - 1227 , - 130 , - 581 , - 1204 , - 623 , - 214 , - 1353 , - 1288 , - 19 , - 298 , - 749 , - 1372 , - 791 , - 382 , - 145 , - 80 , - 187 , - 466 , - 917 , - 164 , - 959 , - 550 , - 313 , - 248 , - 355 , - 634 , - 1085 , - 332 , - 1127 , - 718 , - 481 , - 416 , - 523 , - 802 , - 1253 , - 500 , - 1295 , - 886 , - 649 , - 584 , - 691 , - 970 , - 45 , - 668 , - 87 , - 1054 , - 817 , - 752 , - 859 , - 1138 , - 213 , - 836 , - 255 , - 1222 , - 985 , - 920 , - 1027 , - 1306 , - 381 , - 1004 , - 423 , - 14 , - 1153 , - 1088 , - 1195 , - 98 , - 549 , - 1172 , - 591 , - 182 , - 1321 , - 1256 , - 1363 , - 266 , - 717 , - 1340 , - 759 , - 350 , - 113 , - 48 , - 155 , - 434 , - 885 , - 132 , - 927 , - 518 , - 281 , - 216 , - 323 , - 602 , - 1053 , - 300 , - 1095 , - 686 , - 449 , - 384 , - 491 , - 770 , - 1221 , - 468 , - 1263 , - 854 , - 617 , - 552 , - 659 , - 938 , - 13 , - 636 , - 55 , - 1022 , - 785 , - 720 , - 827 , - 1106 , - 181 , - 804 , - 223 , - 1190 , - 953 , - 888 , - 995 , - 1274 , - 349 , - 972 , - 391 , - 1358 , - 1121 , - 1056 , - 1163 , - 66 , - 517 , - 1140 , - 559 , - 150 , - 1289 , - 1224 , - 1331 , - 234 , - 685 , - 1308 , - 727 , - 318 , - 81 , - 16 , - 123 , - 402 , - 853 , - 100 , - 895 , - 486 , - 249 , - 184 , - 291 , - 570 , - 1021 , - 268 , - 1063 , - 654 , - 417 , - 352 , - 459 , - 738 , - 1189 , - 436 , - 1231 , - 822 , - 585 , - 520 , - 627 , - 906 , - 1357 , - 604 , - 23 , - 990 , - 753 , - 688 , - 795 , - 1074 , - 149 , - 772 , - 191 , - 1158 , - 921 , - 856 , - 963 , - 1242 , - 317 , - 940 , - 359 , - 1326 , - 1089 , - 1024 , - 1131 , - 34 , - 485 , - 1108 , - 527 , - 118 , - 1257 , - 1192 , - 1299 , - 202 , - 653 , - 1276 , - 695 , - 286 , - 49 , - 1360 , - 91 , - 370 , - 821 , - 68 , - 863 , - 454 , - 217 , - 152 , - 259 , - 538 , - 989 , - 236 , - 1031 , - 622 , - 385 , - 320 , - 427 , - 706 , - 1157 , - 404 , - 1199 , - 790 , - 553 , - 488 , - 595 , - 874 , - 1325 , - 572 , - 1367 , - 958 , - 721 , - 656 , - 763 , - 1042 , - 117 , - 740 , - 159 , - 1126 , - 889 , - 824 , - 931 , - 1210 , - 285 , - 908 , - 327 , - 1294 , - 1057 , - 992 , - 1099 , - 2 , - 453 , - 1076 , - 495 , - 86 , - 1225 , - 1160 , - 1267 , - 170 , - 621 , - 1244 , - 663 , - 254 , - 17 , - 1328 , - 59 , - 338 , - 789 , - 36 , - 831 , - 422 , - 185 , - 120 , - 227 , - 506 , - 957 , - 204 , - 999 , - 590 , - 353 , - 288 , - 395 , - 674 , - 1125 , - 372 , - 1167 , - 758 , - 521 , - 456 , - 563 , - 842 , - 1293 , - 540 , - 1335 , - 926 , - 689 , - 624 , - 731 , - 1010 , - 85 , - 708 , - 127 , - 1094 , - 857 , - 792 , - 899 , - 1178 , - 253 , - 876 , - 295 , - 1262 , - 1025 , - 960 , - 1067 , - 1346 , - 421 , - 1044 , - 463 , - 54 , - 1193 , - 1128 , - 1235 , - 138 , - 589 , - 1212 , - 631 , - 222 , - 1361 , - 1296 , - 27 , - 306 , - 757 , - 4 , - 799 , - 390 , - 153 , - 88 , - 195 , - 474 , - 925 , - 172 , - 967 , - 558 , - 321 , - 256 , - 363 , - 642 , - 1093 , - 340 , - 1135 , - 726 , - 489 , - 424 , - 531 , - 810 , - 1261 , - 508 , - 1303 , - 894 , - 657 , - 592 , - 699 , - 978 , - 53 , - 676 , - 95 , - 1062 , - 825 , - 760 , - 867 , - 1146 , - 221 , - 844 , - 263 , - 1230 , - 993 , - 928 , - 1035 , - 1314 , - 389 , - 1012 , - 431 , - 22 , - 1161 , - 1096 , - 1203 , - 106 , - 557 , - 1180 , - 599 , - 190 , - 1329 , - 1264 , - 1371 , - 274 , - 725 , - 1348 , - 767 , - 358 , - 121 , - 56 , - 163 , - 442 , - 893 , - 140 , - 935 , - 526 , - 289 , - 224 , - 331 , - 610 , - 1061 , - 308 , - 1103 , - 694 , - 457 , - 392 , - 499 , - 778 , - 1229 , - 476 , - 1271 , - 862 , - 625 , - 560 , - 667 , - 946 , - 21 , - 644 , - 63 , - 1030 , - 793 , - 728 , - 835 , - 1114 , - 189 , - 812 , - 231 , - 1198 , - 961 , - 896 , - 1003 , - 1282 , - 357 , - 980 , - 399 , - 1366 , - 1129 , - 1064 , - 1171 , - 74 , - 525 , - 1148 , - 567 , - 158 , - 1297 , - 1232 , - 1339 , - 242 , - 693 , - 1316 , - 735 , - 326 , - 89 , - 24 , - 131 , - 410 , - 861 , - 108 , - 903 , - 494 , - 257 , - 192 , - 299 , - 578 , - 1029 , - 276 , - 1071 , - 662 , - 425 , - 360 , - 467 , - 746 , - 1197 , - 444 , - 1239 , - 830 , - 593 , - 528 , - 635 , - 914 , - 1365 , - 612 , - 31 , - 998 , - 761 , - 696 , - 803 , - 1082 , - 157 , - 780 , - 199 , - 1166 , - 929 , - 864 , - 971 , - 1250 , - 325 , - 948 , - 367 , - 1334 , - 1097 , - 1032 , - 1139 , - 42 , - 493 , - 1116 , - 535 , - 126 , - 1265 , - 1200 , - 1307 , - 210 , - 661 , - 1284 , - 703 , - 294 , - 57 , - 1368 , - 99 , - 378 , - 829 , - 76 , - 871 , - 462 , - 225 , - 160 , - 267 , - 546 , - 997 , - 244 , - 1039 , - 630 , - 393 , - 328 , - 435 , - 714 , - 1165 , - 412 , - 1207 , - 798 , - 561 , - 496 , - 603 , - 882 , - 1333 , - 580 , - 1375 , - 966 , - 729 , - 664 , - 771 , - 1050 , - 125 , - 748 , - 167 , - 1134 , - 897 , - 832 , - 939 , - 1218 , - 293 , - 916 , - 335 , - 1302 , - 1065 , - 1000 , - 1107 , - 10 , - 461 , - 1084 , - 503 , - 94 , - 1233 , - 1168 , - 1275 , - 178 , - 629 , - 1252 , - 671 , - 262 , - 25 , - 1336 , - 67 , - 346 , - 797 , - 44 , - 839 , - 430 , - 193 , - 128 , - 235 , - 514 , - 965 , - 212 , - 1007 , - 598 , - 361 , - 296 , - 403 , - 682 , - 1133 , - 380 , - 1175 , - 766 , - 529 , - 464 , - 571 , - 850 , - 1301 , - 548 , - 1343 , - 934 , - 697 , - 632 , - 739 , - 1018 , - 93 , - 716 , - 135 , - 1102 , - 865 , - 800 , - 907 , - 1186 , - 261 , - 884 , - 303 , - 1270 , - 1033 , - 968 , - 1075 , - 1354 , - 429 , - 1052 , - 471 , - 62 , - 1201 , - 1136 , - 1243 , - 146 , - 597 , - 1220 , - 639 , - 230 , - 1369 , - 1304 , - 35 , - 314 , - 765 , - 12 , - 807 , - 398 , - 161 , - 96 , - 203 , - 482 , - 933 , - 180 , - 975 , - 566 , - 329 , - 264 , - 371 , - 650 , - 1101 , - 348 , - 1143 , - 734 , - 497 , - 432 , - 539 , - 818 , - 1269 , - 516 , - 1311 , - 902 , - 665 , - 600 , - 707 , - 986 , - 61 , - 684 , - 103 , - 1070 , - 833 , - 768 , - 875 , - 1154 , - 229 , - 852 , - 271 , - 1238 , - 1001 , - 936 , - 1043 , - 1322 , - 397 , - 1020 , - 439 , - 30 , - 1169 , - 1104 , - 1211 , - 114 , - 565 , - 1188 , - 607 , - 198 , - 1337 , - 1272 , - 3 , - 282 , - 733 , - 1356 , - 775 , - 366 , - 129 , - 64 , - 171 , - 450 , - 901 , - 148 , - 943 , - 534 , - 297 , - 232 , - 339 , - 618 , - 1069 , - 316 , - 1111 , - 702 , - 465 , - 400 , - 507 , - 786 , - 1237 , - 484 , - 1279 , - 870 , - 633 , - 568 , - 675 , - 954 , - 29 , - 652 , - 71 , - 1038 , - 801 , - 736 , - 843 , - 1122 , - 197 , - 820 , - 239 , - 1206 , - 969 , - 904 , - 1011 , - 1290 , - 365 , - 988 , - 407 , - 1374 , - 1137 , - 1072 , - 1179 , - 82 , - 533 , - 1156 , - 575 , - 166 , - 1305 , - 1240 , - 1347 , - 250 , - 701 , - 1324 , - 743 , - 334 , - 97 , - 32 , - 139 , - 418 , - 869 , - 116 , - 911 , - 502 , - 265 , - 200 , - 307 , - 586 , - 1037 , - 284 , - 1079 , - 670 , - 433 , - 368 , - 475 , - 754 , - 1205 , - 452 , - 1247 , - 838 , - 601 , - 536 , - 643 , - 922 , - 1373 , - 620 , - 39 , - 1006 , - 769 , - 704 , - 811 , - 1090 , - 165 , - 788 , - 207 , - 1174 , - 937 , - 872 , - 979 , - 1258 , - 333 , - 956 , - 375 , - 1342 , - 1105 , - 1040 , - 1147 , - 50 , - 501 , - 1124 , - 543 , - 134 , - 1273 , - 1208 , - 1315 , - 218 , - 669 , - 1292 , - 711 , - 302 , - 65 , - 0 , - 131 , - 438 , - 921 , - 172 , - 1007 , - 610 , - 389 , - 344 , - 475 , - 782 , - 1265 , - 516 , - 1351 , - 954 , - 733 , - 688 , - 819 , - 1126 , - 201 , - 860 , - 287 , - 1298 , - 1077 , - 1032 , - 1163 , - 62 , - 545 , - 1204 , - 631 , - 234 , - 13 , - 1376 , - 99 , - 406 , - 889 , - 140 , - 975 , - 578 , - 357 , - 312 , - 443 , - 750 , - 1233 , - 484 , - 1319 , - 922 , - 701 , - 656 , - 787 , - 1094 , - 169 , - 828 , - 255 , - 1266 , - 1045 , - 1000 , - 1131 , - 30 , - 513 , - 1172 , - 599 , - 202 , - 1389 , - 1344 , - 67 , - 374 , - 857 , - 108 , - 943 , - 546 , - 325 , - 280 , - 411 , - 718 , - 1201 , - 452 , - 1287 , - 890 , - 669 , - 624 , - 755 , - 1062 , - 137 , - 796 , - 223 , - 1234 , - 1013 , - 968 , - 1099 , - 1406 , - 481 , - 1140 , - 567 , - 170 , - 1357 , - 1312 , - 35 , - 342 , - 825 , - 76 , - 911 , - 514 , - 293 , - 248 , - 379 , - 686 , - 1169 , - 420 , - 1255 , - 858 , - 637 , - 592 , - 723 , - 1030 , - 105 , - 764 , - 191 , - 1202 , - 981 , - 936 , - 1067 , - 1374 , - 449 , - 1108 , - 535 , - 138 , - 1325 , - 1280 , - 3 , - 310 , - 793 , - 44 , - 879 , - 482 , - 261 , - 216 , - 347 , - 654 , - 1137 , - 388 , - 1223 , - 826 , - 605 , - 560 , - 691 , - 998 , - 73 , - 732 , - 159 , - 1170 , - 949 , - 904 , - 1035 , - 1342 , - 417 , - 1076 , - 503 , - 106 , - 1293 , - 1248 , - 1379 , - 278 , - 761 , - 12 , - 847 , - 450 , - 229 , - 184 , - 315 , - 622 , - 1105 , - 356 , - 1191 , - 794 , - 573 , - 528 , - 659 , - 966 , - 41 , - 700 , - 127 , - 1138 , - 917 , - 872 , - 1003 , - 1310 , - 385 , - 1044 , - 471 , - 74 , - 1261 , - 1216 , - 1347 , - 246 , - 729 , - 1388 , - 815 , - 418 , - 197 , - 152 , - 283 , - 590 , - 1073 , - 324 , - 1159 , - 762 , - 541 , - 496 , - 627 , - 934 , - 9 , - 668 , - 95 , - 1106 , - 885 , - 840 , - 971 , - 1278 , - 353 , - 1012 , - 439 , - 42 , - 1229 , - 1184 , - 1315 , - 214 , - 697 , - 1356 , - 783 , - 386 , - 165 , - 120 , - 251 , - 558 , - 1041 , - 292 , - 1127 , - 730 , - 509 , - 464 , - 595 , - 902 , - 1385 , - 636 , - 63 , - 1074 , - 853 , - 808 , - 939 , - 1246 , - 321 , - 980 , - 407 , - 10 , - 1197 , - 1152 , - 1283 , - 182 , - 665 , - 1324 , - 751 , - 354 , - 133 , - 88 , - 219 , - 526 , - 1009 , - 260 , - 1095 , - 698 , - 477 , - 432 , - 563 , - 870 , - 1353 , - 604 , - 31 , - 1042 , - 821 , - 776 , - 907 , - 1214 , - 289 , - 948 , - 375 , - 1386 , - 1165 , - 1120 , - 1251 , - 150 , - 633 , - 1292 , - 719 , - 322 , - 101 , - 56 , - 187 , - 494 , - 977 , - 228 , - 1063 , - 666 , - 445 , - 400 , - 531 , - 838 , - 1321 , - 572 , - 1407 , - 1010 , - 789 , - 744 , - 875 , - 1182 , - 257 , - 916 , - 343 , - 1354 , - 1133 , - 1088 , - 1219 , - 118 , - 601 , - 1260 , - 687 , - 290 , - 69 , - 24 , - 155 , - 462 , - 945 , - 196 , - 1031 , - 634 , - 413 , - 368 , - 499 , - 806 , - 1289 , - 540 , - 1375 , - 978 , - 757 , - 712 , - 843 , - 1150 , - 225 , - 884 , - 311 , - 1322 , - 1101 , - 1056 , - 1187 , - 86 , - 569 , - 1228 , - 655 , - 258 , - 37 , - 1400 , - 123 , - 430 , - 913 , - 164 , - 999 , - 602 , - 381 , - 336 , - 467 , - 774 , - 1257 , - 508 , - 1343 , - 946 , - 725 , - 680 , - 811 , - 1118 , - 193 , - 852 , - 279 , - 1290 , - 1069 , - 1024 , - 1155 , - 54 , - 537 , - 1196 , - 623 , - 226 , - 5 , - 1368 , - 91 , - 398 , - 881 , - 132 , - 967 , - 570 , - 349 , - 304 , - 435 , - 742 , - 1225 , - 476 , - 1311 , - 914 , - 693 , - 648 , - 779 , - 1086 , - 161 , - 820 , - 247 , - 1258 , - 1037 , - 992 , - 1123 , - 22 , - 505 , - 1164 , - 591 , - 194 , - 1381 , - 1336 , - 59 , - 366 , - 849 , - 100 , - 935 , - 538 , - 317 , - 272 , - 403 , - 710 , - 1193 , - 444 , - 1279 , - 882 , - 661 , - 616 , - 747 , - 1054 , - 129 , - 788 , - 215 , - 1226 , - 1005 , - 960 , - 1091 , - 1398 , - 473 , - 1132 , - 559 , - 162 , - 1349 , - 1304 , - 27 , - 334 , - 817 , - 68 , - 903 , - 506 , - 285 , - 240 , - 371 , - 678 , - 1161 , - 412 , - 1247 , - 850 , - 629 , - 584 , - 715 , - 1022 , - 97 , - 756 , - 183 , - 1194 , - 973 , - 928 , - 1059 , - 1366 , - 441 , - 1100 , - 527 , - 130 , - 1317 , - 1272 , - 1403 , - 302 , - 785 , - 36 , - 871 , - 474 , - 253 , - 208 , - 339 , - 646 , - 1129 , - 380 , - 1215 , - 818 , - 597 , - 552 , - 683 , - 990 , - 65 , - 724 , - 151 , - 1162 , - 941 , - 896 , - 1027 , - 1334 , - 409 , - 1068 , - 495 , - 98 , - 1285 , - 1240 , - 1371 , - 270 , - 753 , - 4 , - 839 , - 442 , - 221 , - 176 , - 307 , - 614 , - 1097 , - 348 , - 1183 , - 786 , - 565 , - 520 , - 651 , - 958 , - 33 , - 692 , - 119 , - 1130 , - 909 , - 864 , - 995 , - 1302 , - 377 , - 1036 , - 463 , - 66 , - 1253 , - 1208 , - 1339 , - 238 , - 721 , - 1380 , - 807 , - 410 , - 189 , - 144 , - 275 , - 582 , - 1065 , - 316 , - 1151 , - 754 , - 533 , - 488 , - 619 , - 926 , - 1 , - 660 , - 87 , - 1098 , - 877 , - 832 , - 963 , - 1270 , - 345 , - 1004 , - 431 , - 34 , - 1221 , - 1176 , - 1307 , - 206 , - 689 , - 1348 , - 775 , - 378 , - 157 , - 112 , - 243 , - 550 , - 1033 , - 284 , - 1119 , - 722 , - 501 , - 456 , - 587 , - 894 , - 1377 , - 628 , - 55 , - 1066 , - 845 , - 800 , - 931 , - 1238 , - 313 , - 972 , - 399 , - 2 , - 1189 , - 1144 , - 1275 , - 174 , - 657 , - 1316 , - 743 , - 346 , - 125 , - 80 , - 211 , - 518 , - 1001 , - 252 , - 1087 , - 690 , - 469 , - 424 , - 555 , - 862 , - 1345 , - 596 , - 23 , - 1034 , - 813 , - 768 , - 899 , - 1206 , - 281 , - 940 , - 367 , - 1378 , - 1157 , - 1112 , - 1243 , - 142 , - 625 , - 1284 , - 711 , - 314 , - 93 , - 48 , - 179 , - 486 , - 969 , - 220 , - 1055 , - 658 , - 437 , - 392 , - 523 , - 830 , - 1313 , - 564 , - 1399 , - 1002 , - 781 , - 736 , - 867 , - 1174 , - 249 , - 908 , - 335 , - 1346 , - 1125 , - 1080 , - 1211 , - 110 , - 593 , - 1252 , - 679 , - 282 , - 61 , - 16 , - 147 , - 454 , - 937 , - 188 , - 1023 , - 626 , - 405 , - 360 , - 491 , - 798 , - 1281 , - 532 , - 1367 , - 970 , - 749 , - 704 , - 835 , - 1142 , - 217 , - 876 , - 303 , - 1314 , - 1093 , - 1048 , - 1179 , - 78 , - 561 , - 1220 , - 647 , - 250 , - 29 , - 1392 , - 115 , - 422 , - 905 , - 156 , - 991 , - 594 , - 373 , - 328 , - 459 , - 766 , - 1249 , - 500 , - 1335 , - 938 , - 717 , - 672 , - 803 , - 1110 , - 185 , - 844 , - 271 , - 1282 , - 1061 , - 1016 , - 1147 , - 46 , - 529 , - 1188 , - 615 , - 218 , - 1405 , - 1360 , - 83 , - 390 , - 873 , - 124 , - 959 , - 562 , - 341 , - 296 , - 427 , - 734 , - 1217 , - 468 , - 1303 , - 906 , - 685 , - 640 , - 771 , - 1078 , - 153 , - 812 , - 239 , - 1250 , - 1029 , - 984 , - 1115 , - 14 , - 497 , - 1156 , - 583 , - 186 , - 1373 , - 1328 , - 51 , - 358 , - 841 , - 92 , - 927 , - 530 , - 309 , - 264 , - 395 , - 702 , - 1185 , - 436 , - 1271 , - 874 , - 653 , - 608 , - 739 , - 1046 , - 121 , - 780 , - 207 , - 1218 , - 997 , - 952 , - 1083 , - 1390 , - 465 , - 1124 , - 551 , - 154 , - 1341 , - 1296 , - 19 , - 326 , - 809 , - 60 , - 895 , - 498 , - 277 , - 232 , - 363 , - 670 , - 1153 , - 404 , - 1239 , - 842 , - 621 , - 576 , - 707 , - 1014 , - 89 , - 748 , - 175 , - 1186 , - 965 , - 920 , - 1051 , - 1358 , - 433 , - 1092 , - 519 , - 122 , - 1309 , - 1264 , - 1395 , - 294 , - 777 , - 28 , - 863 , - 466 , - 245 , - 200 , - 331 , - 638 , - 1121 , - 372 , - 1207 , - 810 , - 589 , - 544 , - 675 , - 982 , - 57 , - 716 , - 143 , - 1154 , - 933 , - 888 , - 1019 , - 1326 , - 401 , - 1060 , - 487 , - 90 , - 1277 , - 1232 , - 1363 , - 262 , - 745 , - 1404 , - 831 , - 434 , - 213 , - 168 , - 299 , - 606 , - 1089 , - 340 , - 1175 , - 778 , - 557 , - 512 , - 643 , - 950 , - 25 , - 684 , - 111 , - 1122 , - 901 , - 856 , - 987 , - 1294 , - 369 , - 1028 , - 455 , - 58 , - 1245 , - 1200 , - 1331 , - 230 , - 713 , - 1372 , - 799 , - 402 , - 181 , - 136 , - 267 , - 574 , - 1057 , - 308 , - 1143 , - 746 , - 525 , - 480 , - 611 , - 918 , - 1401 , - 652 , - 79 , - 1090 , - 869 , - 824 , - 955 , - 1262 , - 337 , - 996 , - 423 , - 26 , - 1213 , - 1168 , - 1299 , - 198 , - 681 , - 1340 , - 767 , - 370 , - 149 , - 104 , - 235 , - 542 , - 1025 , - 276 , - 1111 , - 714 , - 493 , - 448 , - 579 , - 886 , - 1369 , - 620 , - 47 , - 1058 , - 837 , - 792 , - 923 , - 1230 , - 305 , - 964 , - 391 , - 1402 , - 1181 , - 1136 , - 1267 , - 166 , - 649 , - 1308 , - 735 , - 338 , - 117 , - 72 , - 203 , - 510 , - 993 , - 244 , - 1079 , - 682 , - 461 , - 416 , - 547 , - 854 , - 1337 , - 588 , - 15 , - 1026 , - 805 , - 760 , - 891 , - 1198 , - 273 , - 932 , - 359 , - 1370 , - 1149 , - 1104 , - 1235 , - 134 , - 617 , - 1276 , - 703 , - 306 , - 85 , - 40 , - 171 , - 478 , - 961 , - 212 , - 1047 , - 650 , - 429 , - 384 , - 515 , - 822 , - 1305 , - 556 , - 1391 , - 994 , - 773 , - 728 , - 859 , - 1166 , - 241 , - 900 , - 327 , - 1338 , - 1117 , - 1072 , - 1203 , - 102 , - 585 , - 1244 , - 671 , - 274 , - 53 , - 8 , - 139 , - 446 , - 929 , - 180 , - 1015 , - 618 , - 397 , - 352 , - 483 , - 790 , - 1273 , - 524 , - 1359 , - 962 , - 741 , - 696 , - 827 , - 1134 , - 209 , - 868 , - 295 , - 1306 , - 1085 , - 1040 , - 1171 , - 70 , - 553 , - 1212 , - 639 , - 242 , - 21 , - 1384 , - 107 , - 414 , - 897 , - 148 , - 983 , - 586 , - 365 , - 320 , - 451 , - 758 , - 1241 , - 492 , - 1327 , - 930 , - 709 , - 664 , - 795 , - 1102 , - 177 , - 836 , - 263 , - 1274 , - 1053 , - 1008 , - 1139 , - 38 , - 521 , - 1180 , - 607 , - 210 , - 1397 , - 1352 , - 75 , - 382 , - 865 , - 116 , - 951 , - 554 , - 333 , - 288 , - 419 , - 726 , - 1209 , - 460 , - 1295 , - 898 , - 677 , - 632 , - 763 , - 1070 , - 145 , - 804 , - 231 , - 1242 , - 1021 , - 976 , - 1107 , - 6 , - 489 , - 1148 , - 575 , - 178 , - 1365 , - 1320 , - 43 , - 350 , - 833 , - 84 , - 919 , - 522 , - 301 , - 256 , - 387 , - 694 , - 1177 , - 428 , - 1263 , - 866 , - 645 , - 600 , - 731 , - 1038 , - 113 , - 772 , - 199 , - 1210 , - 989 , - 944 , - 1075 , - 1382 , - 457 , - 1116 , - 543 , - 146 , - 1333 , - 1288 , - 11 , - 318 , - 801 , - 52 , - 887 , - 490 , - 269 , - 224 , - 355 , - 662 , - 1145 , - 396 , - 1231 , - 834 , - 613 , - 568 , - 699 , - 1006 , - 81 , - 740 , - 167 , - 1178 , - 957 , - 912 , - 1043 , - 1350 , - 425 , - 1084 , - 511 , - 114 , - 1301 , - 1256 , - 1387 , - 286 , - 769 , - 20 , - 855 , - 458 , - 237 , - 192 , - 323 , - 630 , - 1113 , - 364 , - 1199 , - 802 , - 581 , - 536 , - 667 , - 974 , - 49 , - 708 , - 135 , - 1146 , - 925 , - 880 , - 1011 , - 1318 , - 393 , - 1052 , - 479 , - 82 , - 1269 , - 1224 , - 1355 , - 254 , - 737 , - 1396 , - 823 , - 426 , - 205 , - 160 , - 291 , - 598 , - 1081 , - 332 , - 1167 , - 770 , - 549 , - 504 , - 635 , - 942 , - 17 , - 676 , - 103 , - 1114 , - 893 , - 848 , - 979 , - 1286 , - 361 , - 1020 , - 447 , - 50 , - 1237 , - 1192 , - 1323 , - 222 , - 705 , - 1364 , - 791 , - 394 , - 173 , - 128 , - 259 , - 566 , - 1049 , - 300 , - 1135 , - 738 , - 517 , - 472 , - 603 , - 910 , - 1393 , - 644 , - 71 , - 1082 , - 861 , - 816 , - 947 , - 1254 , - 329 , - 988 , - 415 , - 18 , - 1205 , - 1160 , - 1291 , - 190 , - 673 , - 1332 , - 759 , - 362 , - 141 , - 96 , - 227 , - 534 , - 1017 , - 268 , - 1103 , - 706 , - 485 , - 440 , - 571 , - 878 , - 1361 , - 612 , - 39 , - 1050 , - 829 , - 784 , - 915 , - 1222 , - 297 , - 956 , - 383 , - 1394 , - 1173 , - 1128 , - 1259 , - 158 , - 641 , - 1300 , - 727 , - 330 , - 109 , - 64 , - 195 , - 502 , - 985 , - 236 , - 1071 , - 674 , - 453 , - 408 , - 539 , - 846 , - 1329 , - 580 , - 7 , - 1018 , - 797 , - 752 , - 883 , - 1190 , - 265 , - 924 , - 351 , - 1362 , - 1141 , - 1096 , - 1227 , - 126 , - 609 , - 1268 , - 695 , - 298 , - 77 , - 32 , - 163 , - 470 , - 953 , - 204 , - 1039 , - 642 , - 421 , - 376 , - 507 , - 814 , - 1297 , - 548 , - 1383 , - 986 , - 765 , - 720 , - 851 , - 1158 , - 233 , - 892 , - 319 , - 1330 , - 1109 , - 1064 , - 1195 , - 94 , - 577 , - 1236 , - 663 , - 266 , - 45 , - 0 , - 209 , - 538 , - 987 , - 116 , - 805 , - 174 , - 1103 , - 712 , - 441 , - 290 , - 259 , - 348 , - 557 , - 886 , - 1335 , - 464 , - 1153 , - 522 , - 11 , - 1060 , - 789 , - 638 , - 607 , - 696 , - 905 , - 1234 , - 243 , - 812 , - 61 , - 870 , - 359 , - 1408 , - 1137 , - 986 , - 955 , - 1044 , - 1253 , - 142 , - 591 , - 1160 , - 409 , - 1218 , - 707 , - 316 , - 45 , - 1334 , - 1303 , - 1392 , - 161 , - 490 , - 939 , - 68 , - 757 , - 126 , - 1055 , - 664 , - 393 , - 242 , - 211 , - 300 , - 509 , - 838 , - 1287 , - 416 , - 1105 , - 474 , - 1403 , - 1012 , - 741 , - 590 , - 559 , - 648 , - 857 , - 1186 , - 195 , - 764 , - 13 , - 822 , - 311 , - 1360 , - 1089 , - 938 , - 907 , - 996 , - 1205 , - 94 , - 543 , - 1112 , - 361 , - 1170 , - 659 , - 268 , - 1437 , - 1286 , - 1255 , - 1344 , - 113 , - 442 , - 891 , - 20 , - 709 , - 78 , - 1007 , - 616 , - 345 , - 194 , - 163 , - 252 , - 461 , - 790 , - 1239 , - 368 , - 1057 , - 426 , - 1355 , - 964 , - 693 , - 542 , - 511 , - 600 , - 809 , - 1138 , - 147 , - 716 , - 1405 , - 774 , - 263 , - 1312 , - 1041 , - 890 , - 859 , - 948 , - 1157 , - 46 , - 495 , - 1064 , - 313 , - 1122 , - 611 , - 220 , - 1389 , - 1238 , - 1207 , - 1296 , - 65 , - 394 , - 843 , - 1412 , - 661 , - 30 , - 959 , - 568 , - 297 , - 146 , - 115 , - 204 , - 413 , - 742 , - 1191 , - 320 , - 1009 , - 378 , - 1307 , - 916 , - 645 , - 494 , - 463 , - 552 , - 761 , - 1090 , - 99 , - 668 , - 1357 , - 726 , - 215 , - 1264 , - 993 , - 842 , - 811 , - 900 , - 1109 , - 1438 , - 447 , - 1016 , - 265 , - 1074 , - 563 , - 172 , - 1341 , - 1190 , - 1159 , - 1248 , - 17 , - 346 , - 795 , - 1364 , - 613 , - 1422 , - 911 , - 520 , - 249 , - 98 , - 67 , - 156 , - 365 , - 694 , - 1143 , - 272 , - 961 , - 330 , - 1259 , - 868 , - 597 , - 446 , - 415 , - 504 , - 713 , - 1042 , - 51 , - 620 , - 1309 , - 678 , - 167 , - 1216 , - 945 , - 794 , - 763 , - 852 , - 1061 , - 1390 , - 399 , - 968 , - 217 , - 1026 , - 515 , - 124 , - 1293 , - 1142 , - 1111 , - 1200 , - 1409 , - 298 , - 747 , - 1316 , - 565 , - 1374 , - 863 , - 472 , - 201 , - 50 , - 19 , - 108 , - 317 , - 646 , - 1095 , - 224 , - 913 , - 282 , - 1211 , - 820 , - 549 , - 398 , - 367 , - 456 , - 665 , - 994 , - 3 , - 572 , - 1261 , - 630 , - 119 , - 1168 , - 897 , - 746 , - 715 , - 804 , - 1013 , - 1342 , - 351 , - 920 , - 169 , - 978 , - 467 , - 76 , - 1245 , - 1094 , - 1063 , - 1152 , - 1361 , - 250 , - 699 , - 1268 , - 517 , - 1326 , - 815 , - 424 , - 153 , - 2 , - 1411 , - 60 , - 269 , - 598 , - 1047 , - 176 , - 865 , - 234 , - 1163 , - 772 , - 501 , - 350 , - 319 , - 408 , - 617 , - 946 , - 1395 , - 524 , - 1213 , - 582 , - 71 , - 1120 , - 849 , - 698 , - 667 , - 756 , - 965 , - 1294 , - 303 , - 872 , - 121 , - 930 , - 419 , - 28 , - 1197 , - 1046 , - 1015 , - 1104 , - 1313 , - 202 , - 651 , - 1220 , - 469 , - 1278 , - 767 , - 376 , - 105 , - 1394 , - 1363 , - 12 , - 221 , - 550 , - 999 , - 128 , - 817 , - 186 , - 1115 , - 724 , - 453 , - 302 , - 271 , - 360 , - 569 , - 898 , - 1347 , - 476 , - 1165 , - 534 , - 23 , - 1072 , - 801 , - 650 , - 619 , - 708 , - 917 , - 1246 , - 255 , - 824 , - 73 , - 882 , - 371 , - 1420 , - 1149 , - 998 , - 967 , - 1056 , - 1265 , - 154 , - 603 , - 1172 , - 421 , - 1230 , - 719 , - 328 , - 57 , - 1346 , - 1315 , - 1404 , - 173 , - 502 , - 951 , - 80 , - 769 , - 138 , - 1067 , - 676 , - 405 , - 254 , - 223 , - 312 , - 521 , - 850 , - 1299 , - 428 , - 1117 , - 486 , - 1415 , - 1024 , - 753 , - 602 , - 571 , - 660 , - 869 , - 1198 , - 207 , - 776 , - 25 , - 834 , - 323 , - 1372 , - 1101 , - 950 , - 919 , - 1008 , - 1217 , - 106 , - 555 , - 1124 , - 373 , - 1182 , - 671 , - 280 , - 9 , - 1298 , - 1267 , - 1356 , - 125 , - 454 , - 903 , - 32 , - 721 , - 90 , - 1019 , - 628 , - 357 , - 206 , - 175 , - 264 , - 473 , - 802 , - 1251 , - 380 , - 1069 , - 438 , - 1367 , - 976 , - 705 , - 554 , - 523 , - 612 , - 821 , - 1150 , - 159 , - 728 , - 1417 , - 786 , - 275 , - 1324 , - 1053 , - 902 , - 871 , - 960 , - 1169 , - 58 , - 507 , - 1076 , - 325 , - 1134 , - 623 , - 232 , - 1401 , - 1250 , - 1219 , - 1308 , - 77 , - 406 , - 855 , - 1424 , - 673 , - 42 , - 971 , - 580 , - 309 , - 158 , - 127 , - 216 , - 425 , - 754 , - 1203 , - 332 , - 1021 , - 390 , - 1319 , - 928 , - 657 , - 506 , - 475 , - 564 , - 773 , - 1102 , - 111 , - 680 , - 1369 , - 738 , - 227 , - 1276 , - 1005 , - 854 , - 823 , - 912 , - 1121 , - 10 , - 459 , - 1028 , - 277 , - 1086 , - 575 , - 184 , - 1353 , - 1202 , - 1171 , - 1260 , - 29 , - 358 , - 807 , - 1376 , - 625 , - 1434 , - 923 , - 532 , - 261 , - 110 , - 79 , - 168 , - 377 , - 706 , - 1155 , - 284 , - 973 , - 342 , - 1271 , - 880 , - 609 , - 458 , - 427 , - 516 , - 725 , - 1054 , - 63 , - 632 , - 1321 , - 690 , - 179 , - 1228 , - 957 , - 806 , - 775 , - 864 , - 1073 , - 1402 , - 411 , - 980 , - 229 , - 1038 , - 527 , - 136 , - 1305 , - 1154 , - 1123 , - 1212 , - 1421 , - 310 , - 759 , - 1328 , - 577 , - 1386 , - 875 , - 484 , - 213 , - 62 , - 31 , - 120 , - 329 , - 658 , - 1107 , - 236 , - 925 , - 294 , - 1223 , - 832 , - 561 , - 410 , - 379 , - 468 , - 677 , - 1006 , - 15 , - 584 , - 1273 , - 642 , - 131 , - 1180 , - 909 , - 758 , - 727 , - 816 , - 1025 , - 1354 , - 363 , - 932 , - 181 , - 990 , - 479 , - 88 , - 1257 , - 1106 , - 1075 , - 1164 , - 1373 , - 262 , - 711 , - 1280 , - 529 , - 1338 , - 827 , - 436 , - 165 , - 14 , - 1423 , - 72 , - 281 , - 610 , - 1059 , - 188 , - 877 , - 246 , - 1175 , - 784 , - 513 , - 362 , - 331 , - 420 , - 629 , - 958 , - 1407 , - 536 , - 1225 , - 594 , - 83 , - 1132 , - 861 , - 710 , - 679 , - 768 , - 977 , - 1306 , - 315 , - 884 , - 133 , - 942 , - 431 , - 40 , - 1209 , - 1058 , - 1027 , - 1116 , - 1325 , - 214 , - 663 , - 1232 , - 481 , - 1290 , - 779 , - 388 , - 117 , - 1406 , - 1375 , - 24 , - 233 , - 562 , - 1011 , - 140 , - 829 , - 198 , - 1127 , - 736 , - 465 , - 314 , - 283 , - 372 , - 581 , - 910 , - 1359 , - 488 , - 1177 , - 546 , - 35 , - 1084 , - 813 , - 662 , - 631 , - 720 , - 929 , - 1258 , - 267 , - 836 , - 85 , - 894 , - 383 , - 1432 , - 1161 , - 1010 , - 979 , - 1068 , - 1277 , - 166 , - 615 , - 1184 , - 433 , - 1242 , - 731 , - 340 , - 69 , - 1358 , - 1327 , - 1416 , - 185 , - 514 , - 963 , - 92 , - 781 , - 150 , - 1079 , - 688 , - 417 , - 266 , - 235 , - 324 , - 533 , - 862 , - 1311 , - 440 , - 1129 , - 498 , - 1427 , - 1036 , - 765 , - 614 , - 583 , - 672 , - 881 , - 1210 , - 219 , - 788 , - 37 , - 846 , - 335 , - 1384 , - 1113 , - 962 , - 931 , - 1020 , - 1229 , - 118 , - 567 , - 1136 , - 385 , - 1194 , - 683 , - 292 , - 21 , - 1310 , - 1279 , - 1368 , - 137 , - 466 , - 915 , - 44 , - 733 , - 102 , - 1031 , - 640 , - 369 , - 218 , - 187 , - 276 , - 485 , - 814 , - 1263 , - 392 , - 1081 , - 450 , - 1379 , - 988 , - 717 , - 566 , - 535 , - 624 , - 833 , - 1162 , - 171 , - 740 , - 1429 , - 798 , - 287 , - 1336 , - 1065 , - 914 , - 883 , - 972 , - 1181 , - 70 , - 519 , - 1088 , - 337 , - 1146 , - 635 , - 244 , - 1413 , - 1262 , - 1231 , - 1320 , - 89 , - 418 , - 867 , - 1436 , - 685 , - 54 , - 983 , - 592 , - 321 , - 170 , - 139 , - 228 , - 437 , - 766 , - 1215 , - 344 , - 1033 , - 402 , - 1331 , - 940 , - 669 , - 518 , - 487 , - 576 , - 785 , - 1114 , - 123 , - 692 , - 1381 , - 750 , - 239 , - 1288 , - 1017 , - 866 , - 835 , - 924 , - 1133 , - 22 , - 471 , - 1040 , - 289 , - 1098 , - 587 , - 196 , - 1365 , - 1214 , - 1183 , - 1272 , - 41 , - 370 , - 819 , - 1388 , - 637 , - 6 , - 935 , - 544 , - 273 , - 122 , - 91 , - 180 , - 389 , - 718 , - 1167 , - 296 , - 985 , - 354 , - 1283 , - 892 , - 621 , - 470 , - 439 , - 528 , - 737 , - 1066 , - 75 , - 644 , - 1333 , - 702 , - 191 , - 1240 , - 969 , - 818 , - 787 , - 876 , - 1085 , - 1414 , - 423 , - 992 , - 241 , - 1050 , - 539 , - 148 , - 1317 , - 1166 , - 1135 , - 1224 , - 1433 , - 322 , - 771 , - 1340 , - 589 , - 1398 , - 887 , - 496 , - 225 , - 74 , - 43 , - 132 , - 341 , - 670 , - 1119 , - 248 , - 937 , - 306 , - 1235 , - 844 , - 573 , - 422 , - 391 , - 480 , - 689 , - 1018 , - 27 , - 596 , - 1285 , - 654 , - 143 , - 1192 , - 921 , - 770 , - 739 , - 828 , - 1037 , - 1366 , - 375 , - 944 , - 193 , - 1002 , - 491 , - 100 , - 1269 , - 1118 , - 1087 , - 1176 , - 1385 , - 274 , - 723 , - 1292 , - 541 , - 1350 , - 839 , - 448 , - 177 , - 26 , - 1435 , - 84 , - 293 , - 622 , - 1071 , - 200 , - 889 , - 258 , - 1187 , - 796 , - 525 , - 374 , - 343 , - 432 , - 641 , - 970 , - 1419 , - 548 , - 1237 , - 606 , - 95 , - 1144 , - 873 , - 722 , - 691 , - 780 , - 989 , - 1318 , - 327 , - 896 , - 145 , - 954 , - 443 , - 52 , - 1221 , - 1070 , - 1039 , - 1128 , - 1337 , - 226 , - 675 , - 1244 , - 493 , - 1302 , - 791 , - 400 , - 129 , - 1418 , - 1387 , - 36 , - 245 , - 574 , - 1023 , - 152 , - 841 , - 210 , - 1139 , - 748 , - 477 , - 326 , - 295 , - 384 , - 593 , - 922 , - 1371 , - 500 , - 1189 , - 558 , - 47 , - 1096 , - 825 , - 674 , - 643 , - 732 , - 941 , - 1270 , - 279 , - 848 , - 97 , - 906 , - 395 , - 4 , - 1173 , - 1022 , - 991 , - 1080 , - 1289 , - 178 , - 627 , - 1196 , - 445 , - 1254 , - 743 , - 352 , - 81 , - 1370 , - 1339 , - 1428 , - 197 , - 526 , - 975 , - 104 , - 793 , - 162 , - 1091 , - 700 , - 429 , - 278 , - 247 , - 336 , - 545 , - 874 , - 1323 , - 452 , - 1141 , - 510 , - 1439 , - 1048 , - 777 , - 626 , - 595 , - 684 , - 893 , - 1222 , - 231 , - 800 , - 49 , - 858 , - 347 , - 1396 , - 1125 , - 974 , - 943 , - 1032 , - 1241 , - 130 , - 579 , - 1148 , - 397 , - 1206 , - 695 , - 304 , - 33 , - 1322 , - 1291 , - 1380 , - 149 , - 478 , - 927 , - 56 , - 745 , - 114 , - 1043 , - 652 , - 381 , - 230 , - 199 , - 288 , - 497 , - 826 , - 1275 , - 404 , - 1093 , - 462 , - 1391 , - 1000 , - 729 , - 578 , - 547 , - 636 , - 845 , - 1174 , - 183 , - 752 , - 1 , - 810 , - 299 , - 1348 , - 1077 , - 926 , - 895 , - 984 , - 1193 , - 82 , - 531 , - 1100 , - 349 , - 1158 , - 647 , - 256 , - 1425 , - 1274 , - 1243 , - 1332 , - 101 , - 430 , - 879 , - 8 , - 697 , - 66 , - 995 , - 604 , - 333 , - 182 , - 151 , - 240 , - 449 , - 778 , - 1227 , - 356 , - 1045 , - 414 , - 1343 , - 952 , - 681 , - 530 , - 499 , - 588 , - 797 , - 1126 , - 135 , - 704 , - 1393 , - 762 , - 251 , - 1300 , - 1029 , - 878 , - 847 , - 936 , - 1145 , - 34 , - 483 , - 1052 , - 301 , - 1110 , - 599 , - 208 , - 1377 , - 1226 , - 1195 , - 1284 , - 53 , - 382 , - 831 , - 1400 , - 649 , - 18 , - 947 , - 556 , - 285 , - 134 , - 103 , - 192 , - 401 , - 730 , - 1179 , - 308 , - 997 , - 366 , - 1295 , - 904 , - 633 , - 482 , - 451 , - 540 , - 749 , - 1078 , - 87 , - 656 , - 1345 , - 714 , - 203 , - 1252 , - 981 , - 830 , - 799 , - 888 , - 1097 , - 1426 , - 435 , - 1004 , - 253 , - 1062 , - 551 , - 160 , - 1329 , - 1178 , - 1147 , - 1236 , - 5 , - 334 , - 783 , - 1352 , - 601 , - 1410 , - 899 , - 508 , - 237 , - 86 , - 55 , - 144 , - 353 , - 682 , - 1131 , - 260 , - 949 , - 318 , - 1247 , - 856 , - 585 , - 434 , - 403 , - 492 , - 701 , - 1030 , - 39 , - 608 , - 1297 , - 666 , - 155 , - 1204 , - 933 , - 782 , - 751 , - 840 , - 1049 , - 1378 , - 387 , - 956 , - 205 , - 1014 , - 503 , - 112 , - 1281 , - 1130 , - 1099 , - 1188 , - 1397 , - 286 , - 735 , - 1304 , - 553 , - 1362 , - 851 , - 460 , - 189 , - 38 , - 7 , - 96 , - 305 , - 634 , - 1083 , - 212 , - 901 , - 270 , - 1199 , - 808 , - 537 , - 386 , - 355 , - 444 , - 653 , - 982 , - 1431 , - 560 , - 1249 , - 618 , - 107 , - 1156 , - 885 , - 734 , - 703 , - 792 , - 1001 , - 1330 , - 339 , - 908 , - 157 , - 966 , - 455 , - 64 , - 1233 , - 1082 , - 1051 , - 1140 , - 1349 , - 238 , - 687 , - 1256 , - 505 , - 1314 , - 803 , - 412 , - 141 , - 1430 , - 1399 , - 48 , - 257 , - 586 , - 1035 , - 164 , - 853 , - 222 , - 1151 , - 760 , - 489 , - 338 , - 307 , - 396 , - 605 , - 934 , - 1383 , - 512 , - 1201 , - 570 , - 59 , - 1108 , - 837 , - 686 , - 655 , - 744 , - 953 , - 1282 , - 291 , - 860 , - 109 , - 918 , - 407 , - 16 , - 1185 , - 1034 , - 1003 , - 1092 , - 1301 , - 190 , - 639 , - 1208 , - 457 , - 1266 , - 755 , - 364 , - 93 , - 1382 , - 1351 , - 0 , - 137 , - 458 , - 963 , - 180 , - 1053 , - 638 , - 407 , - 360 , - 497 , - 818 , - 1323 , - 540 , - 1413 , - 998 , - 767 , - 720 , - 857 , - 1178 , - 211 , - 900 , - 301 , - 1358 , - 1127 , - 1080 , - 1217 , - 66 , - 571 , - 1260 , - 661 , - 246 , - 15 , - 1440 , - 105 , - 426 , - 931 , - 148 , - 1021 , - 606 , - 375 , - 328 , - 465 , - 786 , - 1291 , - 508 , - 1381 , - 966 , - 735 , - 688 , - 825 , - 1146 , - 179 , - 868 , - 269 , - 1326 , - 1095 , - 1048 , - 1185 , - 34 , - 539 , - 1228 , - 629 , - 214 , - 1455 , - 1408 , - 73 , - 394 , - 899 , - 116 , - 989 , - 574 , - 343 , - 296 , - 433 , - 754 , - 1259 , - 476 , - 1349 , - 934 , - 703 , - 656 , - 793 , - 1114 , - 147 , - 836 , - 237 , - 1294 , - 1063 , - 1016 , - 1153 , - 2 , - 507 , - 1196 , - 597 , - 182 , - 1423 , - 1376 , - 41 , - 362 , - 867 , - 84 , - 957 , - 542 , - 311 , - 264 , - 401 , - 722 , - 1227 , - 444 , - 1317 , - 902 , - 671 , - 624 , - 761 , - 1082 , - 115 , - 804 , - 205 , - 1262 , - 1031 , - 984 , - 1121 , - 1442 , - 475 , - 1164 , - 565 , - 150 , - 1391 , - 1344 , - 9 , - 330 , - 835 , - 52 , - 925 , - 510 , - 279 , - 232 , - 369 , - 690 , - 1195 , - 412 , - 1285 , - 870 , - 639 , - 592 , - 729 , - 1050 , - 83 , - 772 , - 173 , - 1230 , - 999 , - 952 , - 1089 , - 1410 , - 443 , - 1132 , - 533 , - 118 , - 1359 , - 1312 , - 1449 , - 298 , - 803 , - 20 , - 893 , - 478 , - 247 , - 200 , - 337 , - 658 , - 1163 , - 380 , - 1253 , - 838 , - 607 , - 560 , - 697 , - 1018 , - 51 , - 740 , - 141 , - 1198 , - 967 , - 920 , - 1057 , - 1378 , - 411 , - 1100 , - 501 , - 86 , - 1327 , - 1280 , - 1417 , - 266 , - 771 , - 1460 , - 861 , - 446 , - 215 , - 168 , - 305 , - 626 , - 1131 , - 348 , - 1221 , - 806 , - 575 , - 528 , - 665 , - 986 , - 19 , - 708 , - 109 , - 1166 , - 935 , - 888 , - 1025 , - 1346 , - 379 , - 1068 , - 469 , - 54 , - 1295 , - 1248 , - 1385 , - 234 , - 739 , - 1428 , - 829 , - 414 , - 183 , - 136 , - 273 , - 594 , - 1099 , - 316 , - 1189 , - 774 , - 543 , - 496 , - 633 , - 954 , - 1459 , - 676 , - 77 , - 1134 , - 903 , - 856 , - 993 , - 1314 , - 347 , - 1036 , - 437 , - 22 , - 1263 , - 1216 , - 1353 , - 202 , - 707 , - 1396 , - 797 , - 382 , - 151 , - 104 , - 241 , - 562 , - 1067 , - 284 , - 1157 , - 742 , - 511 , - 464 , - 601 , - 922 , - 1427 , - 644 , - 45 , - 1102 , - 871 , - 824 , - 961 , - 1282 , - 315 , - 1004 , - 405 , - 1462 , - 1231 , - 1184 , - 1321 , - 170 , - 675 , - 1364 , - 765 , - 350 , - 119 , - 72 , - 209 , - 530 , - 1035 , - 252 , - 1125 , - 710 , - 479 , - 432 , - 569 , - 890 , - 1395 , - 612 , - 13 , - 1070 , - 839 , - 792 , - 929 , - 1250 , - 283 , - 972 , - 373 , - 1430 , - 1199 , - 1152 , - 1289 , - 138 , - 643 , - 1332 , - 733 , - 318 , - 87 , - 40 , - 177 , - 498 , - 1003 , - 220 , - 1093 , - 678 , - 447 , - 400 , - 537 , - 858 , - 1363 , - 580 , - 1453 , - 1038 , - 807 , - 760 , - 897 , - 1218 , - 251 , - 940 , - 341 , - 1398 , - 1167 , - 1120 , - 1257 , - 106 , - 611 , - 1300 , - 701 , - 286 , - 55 , - 8 , - 145 , - 466 , - 971 , - 188 , - 1061 , - 646 , - 415 , - 368 , - 505 , - 826 , - 1331 , - 548 , - 1421 , - 1006 , - 775 , - 728 , - 865 , - 1186 , - 219 , - 908 , - 309 , - 1366 , - 1135 , - 1088 , - 1225 , - 74 , - 579 , - 1268 , - 669 , - 254 , - 23 , - 1448 , - 113 , - 434 , - 939 , - 156 , - 1029 , - 614 , - 383 , - 336 , - 473 , - 794 , - 1299 , - 516 , - 1389 , - 974 , - 743 , - 696 , - 833 , - 1154 , - 187 , - 876 , - 277 , - 1334 , - 1103 , - 1056 , - 1193 , - 42 , - 547 , - 1236 , - 637 , - 222 , - 1463 , - 1416 , - 81 , - 402 , - 907 , - 124 , - 997 , - 582 , - 351 , - 304 , - 441 , - 762 , - 1267 , - 484 , - 1357 , - 942 , - 711 , - 664 , - 801 , - 1122 , - 155 , - 844 , - 245 , - 1302 , - 1071 , - 1024 , - 1161 , - 10 , - 515 , - 1204 , - 605 , - 190 , - 1431 , - 1384 , - 49 , - 370 , - 875 , - 92 , - 965 , - 550 , - 319 , - 272 , - 409 , - 730 , - 1235 , - 452 , - 1325 , - 910 , - 679 , - 632 , - 769 , - 1090 , - 123 , - 812 , - 213 , - 1270 , - 1039 , - 992 , - 1129 , - 1450 , - 483 , - 1172 , - 573 , - 158 , - 1399 , - 1352 , - 17 , - 338 , - 843 , - 60 , - 933 , - 518 , - 287 , - 240 , - 377 , - 698 , - 1203 , - 420 , - 1293 , - 878 , - 647 , - 600 , - 737 , - 1058 , - 91 , - 780 , - 181 , - 1238 , - 1007 , - 960 , - 1097 , - 1418 , - 451 , - 1140 , - 541 , - 126 , - 1367 , - 1320 , - 1457 , - 306 , - 811 , - 28 , - 901 , - 486 , - 255 , - 208 , - 345 , - 666 , - 1171 , - 388 , - 1261 , - 846 , - 615 , - 568 , - 705 , - 1026 , - 59 , - 748 , - 149 , - 1206 , - 975 , - 928 , - 1065 , - 1386 , - 419 , - 1108 , - 509 , - 94 , - 1335 , - 1288 , - 1425 , - 274 , - 779 , - 1468 , - 869 , - 454 , - 223 , - 176 , - 313 , - 634 , - 1139 , - 356 , - 1229 , - 814 , - 583 , - 536 , - 673 , - 994 , - 27 , - 716 , - 117 , - 1174 , - 943 , - 896 , - 1033 , - 1354 , - 387 , - 1076 , - 477 , - 62 , - 1303 , - 1256 , - 1393 , - 242 , - 747 , - 1436 , - 837 , - 422 , - 191 , - 144 , - 281 , - 602 , - 1107 , - 324 , - 1197 , - 782 , - 551 , - 504 , - 641 , - 962 , - 1467 , - 684 , - 85 , - 1142 , - 911 , - 864 , - 1001 , - 1322 , - 355 , - 1044 , - 445 , - 30 , - 1271 , - 1224 , - 1361 , - 210 , - 715 , - 1404 , - 805 , - 390 , - 159 , - 112 , - 249 , - 570 , - 1075 , - 292 , - 1165 , - 750 , - 519 , - 472 , - 609 , - 930 , - 1435 , - 652 , - 53 , - 1110 , - 879 , - 832 , - 969 , - 1290 , - 323 , - 1012 , - 413 , - 1470 , - 1239 , - 1192 , - 1329 , - 178 , - 683 , - 1372 , - 773 , - 358 , - 127 , - 80 , - 217 , - 538 , - 1043 , - 260 , - 1133 , - 718 , - 487 , - 440 , - 577 , - 898 , - 1403 , - 620 , - 21 , - 1078 , - 847 , - 800 , - 937 , - 1258 , - 291 , - 980 , - 381 , - 1438 , - 1207 , - 1160 , - 1297 , - 146 , - 651 , - 1340 , - 741 , - 326 , - 95 , - 48 , - 185 , - 506 , - 1011 , - 228 , - 1101 , - 686 , - 455 , - 408 , - 545 , - 866 , - 1371 , - 588 , - 1461 , - 1046 , - 815 , - 768 , - 905 , - 1226 , - 259 , - 948 , - 349 , - 1406 , - 1175 , - 1128 , - 1265 , - 114 , - 619 , - 1308 , - 709 , - 294 , - 63 , - 16 , - 153 , - 474 , - 979 , - 196 , - 1069 , - 654 , - 423 , - 376 , - 513 , - 834 , - 1339 , - 556 , - 1429 , - 1014 , - 783 , - 736 , - 873 , - 1194 , - 227 , - 916 , - 317 , - 1374 , - 1143 , - 1096 , - 1233 , - 82 , - 587 , - 1276 , - 677 , - 262 , - 31 , - 1456 , - 121 , - 442 , - 947 , - 164 , - 1037 , - 622 , - 391 , - 344 , - 481 , - 802 , - 1307 , - 524 , - 1397 , - 982 , - 751 , - 704 , - 841 , - 1162 , - 195 , - 884 , - 285 , - 1342 , - 1111 , - 1064 , - 1201 , - 50 , - 555 , - 1244 , - 645 , - 230 , - 1471 , - 1424 , - 89 , - 410 , - 915 , - 132 , - 1005 , - 590 , - 359 , - 312 , - 449 , - 770 , - 1275 , - 492 , - 1365 , - 950 , - 719 , - 672 , - 809 , - 1130 , - 163 , - 852 , - 253 , - 1310 , - 1079 , - 1032 , - 1169 , - 18 , - 523 , - 1212 , - 613 , - 198 , - 1439 , - 1392 , - 57 , - 378 , - 883 , - 100 , - 973 , - 558 , - 327 , - 280 , - 417 , - 738 , - 1243 , - 460 , - 1333 , - 918 , - 687 , - 640 , - 777 , - 1098 , - 131 , - 820 , - 221 , - 1278 , - 1047 , - 1000 , - 1137 , - 1458 , - 491 , - 1180 , - 581 , - 166 , - 1407 , - 1360 , - 25 , - 346 , - 851 , - 68 , - 941 , - 526 , - 295 , - 248 , - 385 , - 706 , - 1211 , - 428 , - 1301 , - 886 , - 655 , - 608 , - 745 , - 1066 , - 99 , - 788 , - 189 , - 1246 , - 1015 , - 968 , - 1105 , - 1426 , - 459 , - 1148 , - 549 , - 134 , - 1375 , - 1328 , - 1465 , - 314 , - 819 , - 36 , - 909 , - 494 , - 263 , - 216 , - 353 , - 674 , - 1179 , - 396 , - 1269 , - 854 , - 623 , - 576 , - 713 , - 1034 , - 67 , - 756 , - 157 , - 1214 , - 983 , - 936 , - 1073 , - 1394 , - 427 , - 1116 , - 517 , - 102 , - 1343 , - 1296 , - 1433 , - 282 , - 787 , - 4 , - 877 , - 462 , - 231 , - 184 , - 321 , - 642 , - 1147 , - 364 , - 1237 , - 822 , - 591 , - 544 , - 681 , - 1002 , - 35 , - 724 , - 125 , - 1182 , - 951 , - 904 , - 1041 , - 1362 , - 395 , - 1084 , - 485 , - 70 , - 1311 , - 1264 , - 1401 , - 250 , - 755 , - 1444 , - 845 , - 430 , - 199 , - 152 , - 289 , - 610 , - 1115 , - 332 , - 1205 , - 790 , - 559 , - 512 , - 649 , - 970 , - 3 , - 692 , - 93 , - 1150 , - 919 , - 872 , - 1009 , - 1330 , - 363 , - 1052 , - 453 , - 38 , - 1279 , - 1232 , - 1369 , - 218 , - 723 , - 1412 , - 813 , - 398 , - 167 , - 120 , - 257 , - 578 , - 1083 , - 300 , - 1173 , - 758 , - 527 , - 480 , - 617 , - 938 , - 1443 , - 660 , - 61 , - 1118 , - 887 , - 840 , - 977 , - 1298 , - 331 , - 1020 , - 421 , - 6 , - 1247 , - 1200 , - 1337 , - 186 , - 691 , - 1380 , - 781 , - 366 , - 135 , - 88 , - 225 , - 546 , - 1051 , - 268 , - 1141 , - 726 , - 495 , - 448 , - 585 , - 906 , - 1411 , - 628 , - 29 , - 1086 , - 855 , - 808 , - 945 , - 1266 , - 299 , - 988 , - 389 , - 1446 , - 1215 , - 1168 , - 1305 , - 154 , - 659 , - 1348 , - 749 , - 334 , - 103 , - 56 , - 193 , - 514 , - 1019 , - 236 , - 1109 , - 694 , - 463 , - 416 , - 553 , - 874 , - 1379 , - 596 , - 1469 , - 1054 , - 823 , - 776 , - 913 , - 1234 , - 267 , - 956 , - 357 , - 1414 , - 1183 , - 1136 , - 1273 , - 122 , - 627 , - 1316 , - 717 , - 302 , - 71 , - 24 , - 161 , - 482 , - 987 , - 204 , - 1077 , - 662 , - 431 , - 384 , - 521 , - 842 , - 1347 , - 564 , - 1437 , - 1022 , - 791 , - 744 , - 881 , - 1202 , - 235 , - 924 , - 325 , - 1382 , - 1151 , - 1104 , - 1241 , - 90 , - 595 , - 1284 , - 685 , - 270 , - 39 , - 1464 , - 129 , - 450 , - 955 , - 172 , - 1045 , - 630 , - 399 , - 352 , - 489 , - 810 , - 1315 , - 532 , - 1405 , - 990 , - 759 , - 712 , - 849 , - 1170 , - 203 , - 892 , - 293 , - 1350 , - 1119 , - 1072 , - 1209 , - 58 , - 563 , - 1252 , - 653 , - 238 , - 7 , - 1432 , - 97 , - 418 , - 923 , - 140 , - 1013 , - 598 , - 367 , - 320 , - 457 , - 778 , - 1283 , - 500 , - 1373 , - 958 , - 727 , - 680 , - 817 , - 1138 , - 171 , - 860 , - 261 , - 1318 , - 1087 , - 1040 , - 1177 , - 26 , - 531 , - 1220 , - 621 , - 206 , - 1447 , - 1400 , - 65 , - 386 , - 891 , - 108 , - 981 , - 566 , - 335 , - 288 , - 425 , - 746 , - 1251 , - 468 , - 1341 , - 926 , - 695 , - 648 , - 785 , - 1106 , - 139 , - 828 , - 229 , - 1286 , - 1055 , - 1008 , - 1145 , - 1466 , - 499 , - 1188 , - 589 , - 174 , - 1415 , - 1368 , - 33 , - 354 , - 859 , - 76 , - 949 , - 534 , - 303 , - 256 , - 393 , - 714 , - 1219 , - 436 , - 1309 , - 894 , - 663 , - 616 , - 753 , - 1074 , - 107 , - 796 , - 197 , - 1254 , - 1023 , - 976 , - 1113 , - 1434 , - 467 , - 1156 , - 557 , - 142 , - 1383 , - 1336 , - 1 , - 322 , - 827 , - 44 , - 917 , - 502 , - 271 , - 224 , - 361 , - 682 , - 1187 , - 404 , - 1277 , - 862 , - 631 , - 584 , - 721 , - 1042 , - 75 , - 764 , - 165 , - 1222 , - 991 , - 944 , - 1081 , - 1402 , - 435 , - 1124 , - 525 , - 110 , - 1351 , - 1304 , - 1441 , - 290 , - 795 , - 12 , - 885 , - 470 , - 239 , - 192 , - 329 , - 650 , - 1155 , - 372 , - 1245 , - 830 , - 599 , - 552 , - 689 , - 1010 , - 43 , - 732 , - 133 , - 1190 , - 959 , - 912 , - 1049 , - 1370 , - 403 , - 1092 , - 493 , - 78 , - 1319 , - 1272 , - 1409 , - 258 , - 763 , - 1452 , - 853 , - 438 , - 207 , - 160 , - 297 , - 618 , - 1123 , - 340 , - 1213 , - 798 , - 567 , - 520 , - 657 , - 978 , - 11 , - 700 , - 101 , - 1158 , - 927 , - 880 , - 1017 , - 1338 , - 371 , - 1060 , - 461 , - 46 , - 1287 , - 1240 , - 1377 , - 226 , - 731 , - 1420 , - 821 , - 406 , - 175 , - 128 , - 265 , - 586 , - 1091 , - 308 , - 1181 , - 766 , - 535 , - 488 , - 625 , - 946 , - 1451 , - 668 , - 69 , - 1126 , - 895 , - 848 , - 985 , - 1306 , - 339 , - 1028 , - 429 , - 14 , - 1255 , - 1208 , - 1345 , - 194 , - 699 , - 1388 , - 789 , - 374 , - 143 , - 96 , - 233 , - 554 , - 1059 , - 276 , - 1149 , - 734 , - 503 , - 456 , - 593 , - 914 , - 1419 , - 636 , - 37 , - 1094 , - 863 , - 816 , - 953 , - 1274 , - 307 , - 996 , - 397 , - 1454 , - 1223 , - 1176 , - 1313 , - 162 , - 667 , - 1356 , - 757 , - 342 , - 111 , - 64 , - 201 , - 522 , - 1027 , - 244 , - 1117 , - 702 , - 471 , - 424 , - 561 , - 882 , - 1387 , - 604 , - 5 , - 1062 , - 831 , - 784 , - 921 , - 1242 , - 275 , - 964 , - 365 , - 1422 , - 1191 , - 1144 , - 1281 , - 130 , - 635 , - 1324 , - 725 , - 310 , - 79 , - 32 , - 169 , - 490 , - 995 , - 212 , - 1085 , - 670 , - 439 , - 392 , - 529 , - 850 , - 1355 , - 572 , - 1445 , - 1030 , - 799 , - 752 , - 889 , - 1210 , - 243 , - 932 , - 333 , - 1390 , - 1159 , - 1112 , - 1249 , - 98 , - 603 , - 1292 , - 693 , - 278 , - 47 , - 0 , - 895 , - 474 , - 241 , - 196 , - 339 , - 670 , - 1189 , - 392 , - 1287 , - 866 , - 633 , - 588 , - 731 , - 1062 , - 77 , - 784 , - 175 , - 1258 , - 1025 , - 980 , - 1123 , - 1454 , - 469 , - 1176 , - 567 , - 146 , - 1417 , - 1372 , - 11 , - 342 , - 861 , - 64 , - 959 , - 538 , - 305 , - 260 , - 403 , - 734 , - 1253 , - 456 , - 1351 , - 930 , - 697 , - 652 , - 795 , - 1126 , - 141 , - 848 , - 239 , - 1322 , - 1089 , - 1044 , - 1187 , - 14 , - 533 , - 1240 , - 631 , - 210 , - 1481 , - 1436 , - 75 , - 406 , - 925 , - 128 , - 1023 , - 602 , - 369 , - 324 , - 467 , - 798 , - 1317 , - 520 , - 1415 , - 994 , - 761 , - 716 , - 859 , - 1190 , - 205 , - 912 , - 303 , - 1386 , - 1153 , - 1108 , - 1251 , - 78 , - 597 , - 1304 , - 695 , - 274 , - 41 , - 1500 , - 139 , - 470 , - 989 , - 192 , - 1087 , - 666 , - 433 , - 388 , - 531 , - 862 , - 1381 , - 584 , - 1479 , - 1058 , - 825 , - 780 , - 923 , - 1254 , - 269 , - 976 , - 367 , - 1450 , - 1217 , - 1172 , - 1315 , - 142 , - 661 , - 1368 , - 759 , - 338 , - 105 , - 60 , - 203 , - 534 , - 1053 , - 256 , - 1151 , - 730 , - 497 , - 452 , - 595 , - 926 , - 1445 , - 648 , - 39 , - 1122 , - 889 , - 844 , - 987 , - 1318 , - 333 , - 1040 , - 431 , - 10 , - 1281 , - 1236 , - 1379 , - 206 , - 725 , - 1432 , - 823 , - 402 , - 169 , - 124 , - 267 , - 598 , - 1117 , - 320 , - 1215 , - 794 , - 561 , - 516 , - 659 , - 990 , - 5 , - 712 , - 103 , - 1186 , - 953 , - 908 , - 1051 , - 1382 , - 397 , - 1104 , - 495 , - 74 , - 1345 , - 1300 , - 1443 , - 270 , - 789 , - 1496 , - 887 , - 466 , - 233 , - 188 , - 331 , - 662 , - 1181 , - 384 , - 1279 , - 858 , - 625 , - 580 , - 723 , - 1054 , - 69 , - 776 , - 167 , - 1250 , - 1017 , - 972 , - 1115 , - 1446 , - 461 , - 1168 , - 559 , - 138 , - 1409 , - 1364 , - 3 , - 334 , - 853 , - 56 , - 951 , - 530 , - 297 , - 252 , - 395 , - 726 , - 1245 , - 448 , - 1343 , - 922 , - 689 , - 644 , - 787 , - 1118 , - 133 , - 840 , - 231 , - 1314 , - 1081 , - 1036 , - 1179 , - 6 , - 525 , - 1232 , - 623 , - 202 , - 1473 , - 1428 , - 67 , - 398 , - 917 , - 120 , - 1015 , - 594 , - 361 , - 316 , - 459 , - 790 , - 1309 , - 512 , - 1407 , - 986 , - 753 , - 708 , - 851 , - 1182 , - 197 , - 904 , - 295 , - 1378 , - 1145 , - 1100 , - 1243 , - 70 , - 589 , - 1296 , - 687 , - 266 , - 33 , - 1492 , - 131 , - 462 , - 981 , - 184 , - 1079 , - 658 , - 425 , - 380 , - 523 , - 854 , - 1373 , - 576 , - 1471 , - 1050 , - 817 , - 772 , - 915 , - 1246 , - 261 , - 968 , - 359 , - 1442 , - 1209 , - 1164 , - 1307 , - 134 , - 653 , - 1360 , - 751 , - 330 , - 97 , - 52 , - 195 , - 526 , - 1045 , - 248 , - 1143 , - 722 , - 489 , - 444 , - 587 , - 918 , - 1437 , - 640 , - 31 , - 1114 , - 881 , - 836 , - 979 , - 1310 , - 325 , - 1032 , - 423 , - 2 , - 1273 , - 1228 , - 1371 , - 198 , - 717 , - 1424 , - 815 , - 394 , - 161 , - 116 , - 259 , - 590 , - 1109 , - 312 , - 1207 , - 786 , - 553 , - 508 , - 651 , - 982 , - 1501 , - 704 , - 95 , - 1178 , - 945 , - 900 , - 1043 , - 1374 , - 389 , - 1096 , - 487 , - 66 , - 1337 , - 1292 , - 1435 , - 262 , - 781 , - 1488 , - 879 , - 458 , - 225 , - 180 , - 323 , - 654 , - 1173 , - 376 , - 1271 , - 850 , - 617 , - 572 , - 715 , - 1046 , - 61 , - 768 , - 159 , - 1242 , - 1009 , - 964 , - 1107 , - 1438 , - 453 , - 1160 , - 551 , - 130 , - 1401 , - 1356 , - 1499 , - 326 , - 845 , - 48 , - 943 , - 522 , - 289 , - 244 , - 387 , - 718 , - 1237 , - 440 , - 1335 , - 914 , - 681 , - 636 , - 779 , - 1110 , - 125 , - 832 , - 223 , - 1306 , - 1073 , - 1028 , - 1171 , - 1502 , - 517 , - 1224 , - 615 , - 194 , - 1465 , - 1420 , - 59 , - 390 , - 909 , - 112 , - 1007 , - 586 , - 353 , - 308 , - 451 , - 782 , - 1301 , - 504 , - 1399 , - 978 , - 745 , - 700 , - 843 , - 1174 , - 189 , - 896 , - 287 , - 1370 , - 1137 , - 1092 , - 1235 , - 62 , - 581 , - 1288 , - 679 , - 258 , - 25 , - 1484 , - 123 , - 454 , - 973 , - 176 , - 1071 , - 650 , - 417 , - 372 , - 515 , - 846 , - 1365 , - 568 , - 1463 , - 1042 , - 809 , - 764 , - 907 , - 1238 , - 253 , - 960 , - 351 , - 1434 , - 1201 , - 1156 , - 1299 , - 126 , - 645 , - 1352 , - 743 , - 322 , - 89 , - 44 , - 187 , - 518 , - 1037 , - 240 , - 1135 , - 714 , - 481 , - 436 , - 579 , - 910 , - 1429 , - 632 , - 23 , - 1106 , - 873 , - 828 , - 971 , - 1302 , - 317 , - 1024 , - 415 , - 1498 , - 1265 , - 1220 , - 1363 , - 190 , - 709 , - 1416 , - 807 , - 386 , - 153 , - 108 , - 251 , - 582 , - 1101 , - 304 , - 1199 , - 778 , - 545 , - 500 , - 643 , - 974 , - 1493 , - 696 , - 87 , - 1170 , - 937 , - 892 , - 1035 , - 1366 , - 381 , - 1088 , - 479 , - 58 , - 1329 , - 1284 , - 1427 , - 254 , - 773 , - 1480 , - 871 , - 450 , - 217 , - 172 , - 315 , - 646 , - 1165 , - 368 , - 1263 , - 842 , - 609 , - 564 , - 707 , - 1038 , - 53 , - 760 , - 151 , - 1234 , - 1001 , - 956 , - 1099 , - 1430 , - 445 , - 1152 , - 543 , - 122 , - 1393 , - 1348 , - 1491 , - 318 , - 837 , - 40 , - 935 , - 514 , - 281 , - 236 , - 379 , - 710 , - 1229 , - 432 , - 1327 , - 906 , - 673 , - 628 , - 771 , - 1102 , - 117 , - 824 , - 215 , - 1298 , - 1065 , - 1020 , - 1163 , - 1494 , - 509 , - 1216 , - 607 , - 186 , - 1457 , - 1412 , - 51 , - 382 , - 901 , - 104 , - 999 , - 578 , - 345 , - 300 , - 443 , - 774 , - 1293 , - 496 , - 1391 , - 970 , - 737 , - 692 , - 835 , - 1166 , - 181 , - 888 , - 279 , - 1362 , - 1129 , - 1084 , - 1227 , - 54 , - 573 , - 1280 , - 671 , - 250 , - 17 , - 1476 , - 115 , - 446 , - 965 , - 168 , - 1063 , - 642 , - 409 , - 364 , - 507 , - 838 , - 1357 , - 560 , - 1455 , - 1034 , - 801 , - 756 , - 899 , - 1230 , - 245 , - 952 , - 343 , - 1426 , - 1193 , - 1148 , - 1291 , - 118 , - 637 , - 1344 , - 735 , - 314 , - 81 , - 36 , - 179 , - 510 , - 1029 , - 232 , - 1127 , - 706 , - 473 , - 428 , - 571 , - 902 , - 1421 , - 624 , - 15 , - 1098 , - 865 , - 820 , - 963 , - 1294 , - 309 , - 1016 , - 407 , - 1490 , - 1257 , - 1212 , - 1355 , - 182 , - 701 , - 1408 , - 799 , - 378 , - 145 , - 100 , - 243 , - 574 , - 1093 , - 296 , - 1191 , - 770 , - 537 , - 492 , - 635 , - 966 , - 1485 , - 688 , - 79 , - 1162 , - 929 , - 884 , - 1027 , - 1358 , - 373 , - 1080 , - 471 , - 50 , - 1321 , - 1276 , - 1419 , - 246 , - 765 , - 1472 , - 863 , - 442 , - 209 , - 164 , - 307 , - 638 , - 1157 , - 360 , - 1255 , - 834 , - 601 , - 556 , - 699 , - 1030 , - 45 , - 752 , - 143 , - 1226 , - 993 , - 948 , - 1091 , - 1422 , - 437 , - 1144 , - 535 , - 114 , - 1385 , - 1340 , - 1483 , - 310 , - 829 , - 32 , - 927 , - 506 , - 273 , - 228 , - 371 , - 702 , - 1221 , - 424 , - 1319 , - 898 , - 665 , - 620 , - 763 , - 1094 , - 109 , - 816 , - 207 , - 1290 , - 1057 , - 1012 , - 1155 , - 1486 , - 501 , - 1208 , - 599 , - 178 , - 1449 , - 1404 , - 43 , - 374 , - 893 , - 96 , - 991 , - 570 , - 337 , - 292 , - 435 , - 766 , - 1285 , - 488 , - 1383 , - 962 , - 729 , - 684 , - 827 , - 1158 , - 173 , - 880 , - 271 , - 1354 , - 1121 , - 1076 , - 1219 , - 46 , - 565 , - 1272 , - 663 , - 242 , - 9 , - 1468 , - 107 , - 438 , - 957 , - 160 , - 1055 , - 634 , - 401 , - 356 , - 499 , - 830 , - 1349 , - 552 , - 1447 , - 1026 , - 793 , - 748 , - 891 , - 1222 , - 237 , - 944 , - 335 , - 1418 , - 1185 , - 1140 , - 1283 , - 110 , - 629 , - 1336 , - 727 , - 306 , - 73 , - 28 , - 171 , - 502 , - 1021 , - 224 , - 1119 , - 698 , - 465 , - 420 , - 563 , - 894 , - 1413 , - 616 , - 7 , - 1090 , - 857 , - 812 , - 955 , - 1286 , - 301 , - 1008 , - 399 , - 1482 , - 1249 , - 1204 , - 1347 , - 174 , - 693 , - 1400 , - 791 , - 370 , - 137 , - 92 , - 235 , - 566 , - 1085 , - 288 , - 1183 , - 762 , - 529 , - 484 , - 627 , - 958 , - 1477 , - 680 , - 71 , - 1154 , - 921 , - 876 , - 1019 , - 1350 , - 365 , - 1072 , - 463 , - 42 , - 1313 , - 1268 , - 1411 , - 238 , - 757 , - 1464 , - 855 , - 434 , - 201 , - 156 , - 299 , - 630 , - 1149 , - 352 , - 1247 , - 826 , - 593 , - 548 , - 691 , - 1022 , - 37 , - 744 , - 135 , - 1218 , - 985 , - 940 , - 1083 , - 1414 , - 429 , - 1136 , - 527 , - 106 , - 1377 , - 1332 , - 1475 , - 302 , - 821 , - 24 , - 919 , - 498 , - 265 , - 220 , - 363 , - 694 , - 1213 , - 416 , - 1311 , - 890 , - 657 , - 612 , - 755 , - 1086 , - 101 , - 808 , - 199 , - 1282 , - 1049 , - 1004 , - 1147 , - 1478 , - 493 , - 1200 , - 591 , - 170 , - 1441 , - 1396 , - 35 , - 366 , - 885 , - 88 , - 983 , - 562 , - 329 , - 284 , - 427 , - 758 , - 1277 , - 480 , - 1375 , - 954 , - 721 , - 676 , - 819 , - 1150 , - 165 , - 872 , - 263 , - 1346 , - 1113 , - 1068 , - 1211 , - 38 , - 557 , - 1264 , - 655 , - 234 , - 1 , - 1460 , - 99 , - 430 , - 949 , - 152 , - 1047 , - 626 , - 393 , - 348 , - 491 , - 822 , - 1341 , - 544 , - 1439 , - 1018 , - 785 , - 740 , - 883 , - 1214 , - 229 , - 936 , - 327 , - 1410 , - 1177 , - 1132 , - 1275 , - 102 , - 621 , - 1328 , - 719 , - 298 , - 65 , - 20 , - 163 , - 494 , - 1013 , - 216 , - 1111 , - 690 , - 457 , - 412 , - 555 , - 886 , - 1405 , - 608 , - 1503 , - 1082 , - 849 , - 804 , - 947 , - 1278 , - 293 , - 1000 , - 391 , - 1474 , - 1241 , - 1196 , - 1339 , - 166 , - 685 , - 1392 , - 783 , - 362 , - 129 , - 84 , - 227 , - 558 , - 1077 , - 280 , - 1175 , - 754 , - 521 , - 476 , - 619 , - 950 , - 1469 , - 672 , - 63 , - 1146 , - 913 , - 868 , - 1011 , - 1342 , - 357 , - 1064 , - 455 , - 34 , - 1305 , - 1260 , - 1403 , - 230 , - 749 , - 1456 , - 847 , - 426 , - 193 , - 148 , - 291 , - 622 , - 1141 , - 344 , - 1239 , - 818 , - 585 , - 540 , - 683 , - 1014 , - 29 , - 736 , - 127 , - 1210 , - 977 , - 932 , - 1075 , - 1406 , - 421 , - 1128 , - 519 , - 98 , - 1369 , - 1324 , - 1467 , - 294 , - 813 , - 16 , - 911 , - 490 , - 257 , - 212 , - 355 , - 686 , - 1205 , - 408 , - 1303 , - 882 , - 649 , - 604 , - 747 , - 1078 , - 93 , - 800 , - 191 , - 1274 , - 1041 , - 996 , - 1139 , - 1470 , - 485 , - 1192 , - 583 , - 162 , - 1433 , - 1388 , - 27 , - 358 , - 877 , - 80 , - 975 , - 554 , - 321 , - 276 , - 419 , - 750 , - 1269 , - 472 , - 1367 , - 946 , - 713 , - 668 , - 811 , - 1142 , - 157 , - 864 , - 255 , - 1338 , - 1105 , - 1060 , - 1203 , - 30 , - 549 , - 1256 , - 647 , - 226 , - 1497 , - 1452 , - 91 , - 422 , - 941 , - 144 , - 1039 , - 618 , - 385 , - 340 , - 483 , - 814 , - 1333 , - 536 , - 1431 , - 1010 , - 777 , - 732 , - 875 , - 1206 , - 221 , - 928 , - 319 , - 1402 , - 1169 , - 1124 , - 1267 , - 94 , - 613 , - 1320 , - 711 , - 290 , - 57 , - 12 , - 155 , - 486 , - 1005 , - 208 , - 1103 , - 682 , - 449 , - 404 , - 547 , - 878 , - 1397 , - 600 , - 1495 , - 1074 , - 841 , - 796 , - 939 , - 1270 , - 285 , - 992 , - 383 , - 1466 , - 1233 , - 1188 , - 1331 , - 158 , - 677 , - 1384 , - 775 , - 354 , - 121 , - 76 , - 219 , - 550 , - 1069 , - 272 , - 1167 , - 746 , - 513 , - 468 , - 611 , - 942 , - 1461 , - 664 , - 55 , - 1138 , - 905 , - 860 , - 1003 , - 1334 , - 349 , - 1056 , - 447 , - 26 , - 1297 , - 1252 , - 1395 , - 222 , - 741 , - 1448 , - 839 , - 418 , - 185 , - 140 , - 283 , - 614 , - 1133 , - 336 , - 1231 , - 810 , - 577 , - 532 , - 675 , - 1006 , - 21 , - 728 , - 119 , - 1202 , - 969 , - 924 , - 1067 , - 1398 , - 413 , - 1120 , - 511 , - 90 , - 1361 , - 1316 , - 1459 , - 286 , - 805 , - 8 , - 903 , - 482 , - 249 , - 204 , - 347 , - 678 , - 1197 , - 400 , - 1295 , - 874 , - 641 , - 596 , - 739 , - 1070 , - 85 , - 792 , - 183 , - 1266 , - 1033 , - 988 , - 1131 , - 1462 , - 477 , - 1184 , - 575 , - 154 , - 1425 , - 1380 , - 19 , - 350 , - 869 , - 72 , - 967 , - 546 , - 313 , - 268 , - 411 , - 742 , - 1261 , - 464 , - 1359 , - 938 , - 705 , - 660 , - 803 , - 1134 , - 149 , - 856 , - 247 , - 1330 , - 1097 , - 1052 , - 1195 , - 22 , - 541 , - 1248 , - 639 , - 218 , - 1489 , - 1444 , - 83 , - 414 , - 933 , - 136 , - 1031 , - 610 , - 377 , - 332 , - 475 , - 806 , - 1325 , - 528 , - 1423 , - 1002 , - 769 , - 724 , - 867 , - 1198 , - 213 , - 920 , - 311 , - 1394 , - 1161 , - 1116 , - 1259 , - 86 , - 605 , - 1312 , - 703 , - 282 , - 49 , - 4 , - 147 , - 478 , - 997 , - 200 , - 1095 , - 674 , - 441 , - 396 , - 539 , - 870 , - 1389 , - 592 , - 1487 , - 1066 , - 833 , - 788 , - 931 , - 1262 , - 277 , - 984 , - 375 , - 1458 , - 1225 , - 1180 , - 1323 , - 150 , - 669 , - 1376 , - 767 , - 346 , - 113 , - 68 , - 211 , - 542 , - 1061 , - 264 , - 1159 , - 738 , - 505 , - 460 , - 603 , - 934 , - 1453 , - 656 , - 47 , - 1130 , - 897 , - 852 , - 995 , - 1326 , - 341 , - 1048 , - 439 , - 18 , - 1289 , - 1244 , - 1387 , - 214 , - 733 , - 1440 , - 831 , - 410 , - 177 , - 132 , - 275 , - 606 , - 1125 , - 328 , - 1223 , - 802 , - 569 , - 524 , - 667 , - 998 , - 13 , - 720 , - 111 , - 1194 , - 961 , - 916 , - 1059 , - 1390 , - 405 , - 1112 , - 503 , - 82 , - 1353 , - 1308 , - 1451 , - 278 , - 797 , - 0 , - 119 , - 334 , - 645 , - 1052 , - 19 , - 618 , - 1313 , - 568 , - 1455 , - 902 , - 445 , - 84 , - 1355 , - 1186 , - 1113 , - 1136 , - 1255 , - 1470 , - 245 , - 652 , - 1155 , - 218 , - 913 , - 168 , - 1055 , - 502 , - 45 , - 1220 , - 955 , - 786 , - 713 , - 736 , - 855 , - 1070 , - 1381 , - 252 , - 755 , - 1354 , - 513 , - 1304 , - 655 , - 102 , - 1181 , - 820 , - 555 , - 386 , - 313 , - 336 , - 455 , - 670 , - 981 , - 1388 , - 355 , - 954 , - 113 , - 904 , - 255 , - 1238 , - 781 , - 420 , - 155 , - 1522 , - 1449 , - 1472 , - 55 , - 270 , - 581 , - 988 , - 1491 , - 554 , - 1249 , - 504 , - 1391 , - 838 , - 381 , - 20 , - 1291 , - 1122 , - 1049 , - 1072 , - 1191 , - 1406 , - 181 , - 588 , - 1091 , - 154 , - 849 , - 104 , - 991 , - 438 , - 1517 , - 1156 , - 891 , - 722 , - 649 , - 672 , - 791 , - 1006 , - 1317 , - 188 , - 691 , - 1290 , - 449 , - 1240 , - 591 , - 38 , - 1117 , - 756 , - 491 , - 322 , - 249 , - 272 , - 391 , - 606 , - 917 , - 1324 , - 291 , - 890 , - 49 , - 840 , - 191 , - 1174 , - 717 , - 356 , - 91 , - 1458 , - 1385 , - 1408 , - 1527 , - 206 , - 517 , - 924 , - 1427 , - 490 , - 1185 , - 440 , - 1327 , - 774 , - 317 , - 1492 , - 1227 , - 1058 , - 985 , - 1008 , - 1127 , - 1342 , - 117 , - 524 , - 1027 , - 90 , - 785 , - 40 , - 927 , - 374 , - 1453 , - 1092 , - 827 , - 658 , - 585 , - 608 , - 727 , - 942 , - 1253 , - 124 , - 627 , - 1226 , - 385 , - 1176 , - 527 , - 1510 , - 1053 , - 692 , - 427 , - 258 , - 185 , - 208 , - 327 , - 542 , - 853 , - 1260 , - 227 , - 826 , - 1521 , - 776 , - 127 , - 1110 , - 653 , - 292 , - 27 , - 1394 , - 1321 , - 1344 , - 1463 , - 142 , - 453 , - 860 , - 1363 , - 426 , - 1121 , - 376 , - 1263 , - 710 , - 253 , - 1428 , - 1163 , - 994 , - 921 , - 944 , - 1063 , - 1278 , - 53 , - 460 , - 963 , - 26 , - 721 , - 1512 , - 863 , - 310 , - 1389 , - 1028 , - 763 , - 594 , - 521 , - 544 , - 663 , - 878 , - 1189 , - 60 , - 563 , - 1162 , - 321 , - 1112 , - 463 , - 1446 , - 989 , - 628 , - 363 , - 194 , - 121 , - 144 , - 263 , - 478 , - 789 , - 1196 , - 163 , - 762 , - 1457 , - 712 , - 63 , - 1046 , - 589 , - 228 , - 1499 , - 1330 , - 1257 , - 1280 , - 1399 , - 78 , - 389 , - 796 , - 1299 , - 362 , - 1057 , - 312 , - 1199 , - 646 , - 189 , - 1364 , - 1099 , - 930 , - 857 , - 880 , - 999 , - 1214 , - 1525 , - 396 , - 899 , - 1498 , - 657 , - 1448 , - 799 , - 246 , - 1325 , - 964 , - 699 , - 530 , - 457 , - 480 , - 599 , - 814 , - 1125 , - 1532 , - 499 , - 1098 , - 257 , - 1048 , - 399 , - 1382 , - 925 , - 564 , - 299 , - 130 , - 57 , - 80 , - 199 , - 414 , - 725 , - 1132 , - 99 , - 698 , - 1393 , - 648 , - 1535 , - 982 , - 525 , - 164 , - 1435 , - 1266 , - 1193 , - 1216 , - 1335 , - 14 , - 325 , - 732 , - 1235 , - 298 , - 993 , - 248 , - 1135 , - 582 , - 125 , - 1300 , - 1035 , - 866 , - 793 , - 816 , - 935 , - 1150 , - 1461 , - 332 , - 835 , - 1434 , - 593 , - 1384 , - 735 , - 182 , - 1261 , - 900 , - 635 , - 466 , - 393 , - 416 , - 535 , - 750 , - 1061 , - 1468 , - 435 , - 1034 , - 193 , - 984 , - 335 , - 1318 , - 861 , - 500 , - 235 , - 66 , - 1529 , - 16 , - 135 , - 350 , - 661 , - 1068 , - 35 , - 634 , - 1329 , - 584 , - 1471 , - 918 , - 461 , - 100 , - 1371 , - 1202 , - 1129 , - 1152 , - 1271 , - 1486 , - 261 , - 668 , - 1171 , - 234 , - 929 , - 184 , - 1071 , - 518 , - 61 , - 1236 , - 971 , - 802 , - 729 , - 752 , - 871 , - 1086 , - 1397 , - 268 , - 771 , - 1370 , - 529 , - 1320 , - 671 , - 118 , - 1197 , - 836 , - 571 , - 402 , - 329 , - 352 , - 471 , - 686 , - 997 , - 1404 , - 371 , - 970 , - 129 , - 920 , - 271 , - 1254 , - 797 , - 436 , - 171 , - 2 , - 1465 , - 1488 , - 71 , - 286 , - 597 , - 1004 , - 1507 , - 570 , - 1265 , - 520 , - 1407 , - 854 , - 397 , - 36 , - 1307 , - 1138 , - 1065 , - 1088 , - 1207 , - 1422 , - 197 , - 604 , - 1107 , - 170 , - 865 , - 120 , - 1007 , - 454 , - 1533 , - 1172 , - 907 , - 738 , - 665 , - 688 , - 807 , - 1022 , - 1333 , - 204 , - 707 , - 1306 , - 465 , - 1256 , - 607 , - 54 , - 1133 , - 772 , - 507 , - 338 , - 265 , - 288 , - 407 , - 622 , - 933 , - 1340 , - 307 , - 906 , - 65 , - 856 , - 207 , - 1190 , - 733 , - 372 , - 107 , - 1474 , - 1401 , - 1424 , - 7 , - 222 , - 533 , - 940 , - 1443 , - 506 , - 1201 , - 456 , - 1343 , - 790 , - 333 , - 1508 , - 1243 , - 1074 , - 1001 , - 1024 , - 1143 , - 1358 , - 133 , - 540 , - 1043 , - 106 , - 801 , - 56 , - 943 , - 390 , - 1469 , - 1108 , - 843 , - 674 , - 601 , - 624 , - 743 , - 958 , - 1269 , - 140 , - 643 , - 1242 , - 401 , - 1192 , - 543 , - 1526 , - 1069 , - 708 , - 443 , - 274 , - 201 , - 224 , - 343 , - 558 , - 869 , - 1276 , - 243 , - 842 , - 1 , - 792 , - 143 , - 1126 , - 669 , - 308 , - 43 , - 1410 , - 1337 , - 1360 , - 1479 , - 158 , - 469 , - 876 , - 1379 , - 442 , - 1137 , - 392 , - 1279 , - 726 , - 269 , - 1444 , - 1179 , - 1010 , - 937 , - 960 , - 1079 , - 1294 , - 69 , - 476 , - 979 , - 42 , - 737 , - 1528 , - 879 , - 326 , - 1405 , - 1044 , - 779 , - 610 , - 537 , - 560 , - 679 , - 894 , - 1205 , - 76 , - 579 , - 1178 , - 337 , - 1128 , - 479 , - 1462 , - 1005 , - 644 , - 379 , - 210 , - 137 , - 160 , - 279 , - 494 , - 805 , - 1212 , - 179 , - 778 , - 1473 , - 728 , - 79 , - 1062 , - 605 , - 244 , - 1515 , - 1346 , - 1273 , - 1296 , - 1415 , - 94 , - 405 , - 812 , - 1315 , - 378 , - 1073 , - 328 , - 1215 , - 662 , - 205 , - 1380 , - 1115 , - 946 , - 873 , - 896 , - 1015 , - 1230 , - 5 , - 412 , - 915 , - 1514 , - 673 , - 1464 , - 815 , - 262 , - 1341 , - 980 , - 715 , - 546 , - 473 , - 496 , - 615 , - 830 , - 1141 , - 12 , - 515 , - 1114 , - 273 , - 1064 , - 415 , - 1398 , - 941 , - 580 , - 315 , - 146 , - 73 , - 96 , - 215 , - 430 , - 741 , - 1148 , - 115 , - 714 , - 1409 , - 664 , - 15 , - 998 , - 541 , - 180 , - 1451 , - 1282 , - 1209 , - 1232 , - 1351 , - 30 , - 341 , - 748 , - 1251 , - 314 , - 1009 , - 264 , - 1151 , - 598 , - 141 , - 1316 , - 1051 , - 882 , - 809 , - 832 , - 951 , - 1166 , - 1477 , - 348 , - 851 , - 1450 , - 609 , - 1400 , - 751 , - 198 , - 1277 , - 916 , - 651 , - 482 , - 409 , - 432 , - 551 , - 766 , - 1077 , - 1484 , - 451 , - 1050 , - 209 , - 1000 , - 351 , - 1334 , - 877 , - 516 , - 251 , - 82 , - 9 , - 32 , - 151 , - 366 , - 677 , - 1084 , - 51 , - 650 , - 1345 , - 600 , - 1487 , - 934 , - 477 , - 116 , - 1387 , - 1218 , - 1145 , - 1168 , - 1287 , - 1502 , - 277 , - 684 , - 1187 , - 250 , - 945 , - 200 , - 1087 , - 534 , - 77 , - 1252 , - 987 , - 818 , - 745 , - 768 , - 887 , - 1102 , - 1413 , - 284 , - 787 , - 1386 , - 545 , - 1336 , - 687 , - 134 , - 1213 , - 852 , - 587 , - 418 , - 345 , - 368 , - 487 , - 702 , - 1013 , - 1420 , - 387 , - 986 , - 145 , - 936 , - 287 , - 1270 , - 813 , - 452 , - 187 , - 18 , - 1481 , - 1504 , - 87 , - 302 , - 613 , - 1020 , - 1523 , - 586 , - 1281 , - 536 , - 1423 , - 870 , - 413 , - 52 , - 1323 , - 1154 , - 1081 , - 1104 , - 1223 , - 1438 , - 213 , - 620 , - 1123 , - 186 , - 881 , - 136 , - 1023 , - 470 , - 13 , - 1188 , - 923 , - 754 , - 681 , - 704 , - 823 , - 1038 , - 1349 , - 220 , - 723 , - 1322 , - 481 , - 1272 , - 623 , - 70 , - 1149 , - 788 , - 523 , - 354 , - 281 , - 304 , - 423 , - 638 , - 949 , - 1356 , - 323 , - 922 , - 81 , - 872 , - 223 , - 1206 , - 749 , - 388 , - 123 , - 1490 , - 1417 , - 1440 , - 23 , - 238 , - 549 , - 956 , - 1459 , - 522 , - 1217 , - 472 , - 1359 , - 806 , - 349 , - 1524 , - 1259 , - 1090 , - 1017 , - 1040 , - 1159 , - 1374 , - 149 , - 556 , - 1059 , - 122 , - 817 , - 72 , - 959 , - 406 , - 1485 , - 1124 , - 859 , - 690 , - 617 , - 640 , - 759 , - 974 , - 1285 , - 156 , - 659 , - 1258 , - 417 , - 1208 , - 559 , - 6 , - 1085 , - 724 , - 459 , - 290 , - 217 , - 240 , - 359 , - 574 , - 885 , - 1292 , - 259 , - 858 , - 17 , - 808 , - 159 , - 1142 , - 685 , - 324 , - 59 , - 1426 , - 1353 , - 1376 , - 1495 , - 174 , - 485 , - 892 , - 1395 , - 458 , - 1153 , - 408 , - 1295 , - 742 , - 285 , - 1460 , - 1195 , - 1026 , - 953 , - 976 , - 1095 , - 1310 , - 85 , - 492 , - 995 , - 58 , - 753 , - 8 , - 895 , - 342 , - 1421 , - 1060 , - 795 , - 626 , - 553 , - 576 , - 695 , - 910 , - 1221 , - 92 , - 595 , - 1194 , - 353 , - 1144 , - 495 , - 1478 , - 1021 , - 660 , - 395 , - 226 , - 153 , - 176 , - 295 , - 510 , - 821 , - 1228 , - 195 , - 794 , - 1489 , - 744 , - 95 , - 1078 , - 621 , - 260 , - 1531 , - 1362 , - 1289 , - 1312 , - 1431 , - 110 , - 421 , - 828 , - 1331 , - 394 , - 1089 , - 344 , - 1231 , - 678 , - 221 , - 1396 , - 1131 , - 962 , - 889 , - 912 , - 1031 , - 1246 , - 21 , - 428 , - 931 , - 1530 , - 689 , - 1480 , - 831 , - 278 , - 1357 , - 996 , - 731 , - 562 , - 489 , - 512 , - 631 , - 846 , - 1157 , - 28 , - 531 , - 1130 , - 289 , - 1080 , - 431 , - 1414 , - 957 , - 596 , - 331 , - 162 , - 89 , - 112 , - 231 , - 446 , - 757 , - 1164 , - 131 , - 730 , - 1425 , - 680 , - 31 , - 1014 , - 557 , - 196 , - 1467 , - 1298 , - 1225 , - 1248 , - 1367 , - 46 , - 357 , - 764 , - 1267 , - 330 , - 1025 , - 280 , - 1167 , - 614 , - 157 , - 1332 , - 1067 , - 898 , - 825 , - 848 , - 967 , - 1182 , - 1493 , - 364 , - 867 , - 1466 , - 625 , - 1416 , - 767 , - 214 , - 1293 , - 932 , - 667 , - 498 , - 425 , - 448 , - 567 , - 782 , - 1093 , - 1500 , - 467 , - 1066 , - 225 , - 1016 , - 367 , - 1350 , - 893 , - 532 , - 267 , - 98 , - 25 , - 48 , - 167 , - 382 , - 693 , - 1100 , - 67 , - 666 , - 1361 , - 616 , - 1503 , - 950 , - 493 , - 132 , - 1403 , - 1234 , - 1161 , - 1184 , - 1303 , - 1518 , - 293 , - 700 , - 1203 , - 266 , - 961 , - 216 , - 1103 , - 550 , - 93 , - 1268 , - 1003 , - 834 , - 761 , - 784 , - 903 , - 1118 , - 1429 , - 300 , - 803 , - 1402 , - 561 , - 1352 , - 703 , - 150 , - 1229 , - 868 , - 603 , - 434 , - 361 , - 384 , - 503 , - 718 , - 1029 , - 1436 , - 403 , - 1002 , - 161 , - 952 , - 303 , - 1286 , - 829 , - 468 , - 203 , - 34 , - 1497 , - 1520 , - 103 , - 318 , - 629 , - 1036 , - 3 , - 602 , - 1297 , - 552 , - 1439 , - 886 , - 429 , - 68 , - 1339 , - 1170 , - 1097 , - 1120 , - 1239 , - 1454 , - 229 , - 636 , - 1139 , - 202 , - 897 , - 152 , - 1039 , - 486 , - 29 , - 1204 , - 939 , - 770 , - 697 , - 720 , - 839 , - 1054 , - 1365 , - 236 , - 739 , - 1338 , - 497 , - 1288 , - 639 , - 86 , - 1165 , - 804 , - 539 , - 370 , - 297 , - 320 , - 439 , - 654 , - 965 , - 1372 , - 339 , - 938 , - 97 , - 888 , - 239 , - 1222 , - 765 , - 404 , - 139 , - 1506 , - 1433 , - 1456 , - 39 , - 254 , - 565 , - 972 , - 1475 , - 538 , - 1233 , - 488 , - 1375 , - 822 , - 365 , - 4 , - 1275 , - 1106 , - 1033 , - 1056 , - 1175 , - 1390 , - 165 , - 572 , - 1075 , - 138 , - 833 , - 88 , - 975 , - 422 , - 1501 , - 1140 , - 875 , - 706 , - 633 , - 656 , - 775 , - 990 , - 1301 , - 172 , - 675 , - 1274 , - 433 , - 1224 , - 575 , - 22 , - 1101 , - 740 , - 475 , - 306 , - 233 , - 256 , - 375 , - 590 , - 901 , - 1308 , - 275 , - 874 , - 33 , - 824 , - 175 , - 1158 , - 701 , - 340 , - 75 , - 1442 , - 1369 , - 1392 , - 1511 , - 190 , - 501 , - 908 , - 1411 , - 474 , - 1169 , - 424 , - 1311 , - 758 , - 301 , - 1476 , - 1211 , - 1042 , - 969 , - 992 , - 1111 , - 1326 , - 101 , - 508 , - 1011 , - 74 , - 769 , - 24 , - 911 , - 358 , - 1437 , - 1076 , - 811 , - 642 , - 569 , - 592 , - 711 , - 926 , - 1237 , - 108 , - 611 , - 1210 , - 369 , - 1160 , - 511 , - 1494 , - 1037 , - 676 , - 411 , - 242 , - 169 , - 192 , - 311 , - 526 , - 837 , - 1244 , - 211 , - 810 , - 1505 , - 760 , - 111 , - 1094 , - 637 , - 276 , - 11 , - 1378 , - 1305 , - 1328 , - 1447 , - 126 , - 437 , - 844 , - 1347 , - 410 , - 1105 , - 360 , - 1247 , - 694 , - 237 , - 1412 , - 1147 , - 978 , - 905 , - 928 , - 1047 , - 1262 , - 37 , - 444 , - 947 , - 10 , - 705 , - 1496 , - 847 , - 294 , - 1373 , - 1012 , - 747 , - 578 , - 505 , - 528 , - 647 , - 862 , - 1173 , - 44 , - 547 , - 1146 , - 305 , - 1096 , - 447 , - 1430 , - 973 , - 612 , - 347 , - 178 , - 105 , - 128 , - 247 , - 462 , - 773 , - 1180 , - 147 , - 746 , - 1441 , - 696 , - 47 , - 1030 , - 573 , - 212 , - 1483 , - 1314 , - 1241 , - 1264 , - 1383 , - 62 , - 373 , - 780 , - 1283 , - 346 , - 1041 , - 296 , - 1183 , - 630 , - 173 , - 1348 , - 1083 , - 914 , - 841 , - 864 , - 983 , - 1198 , - 1509 , - 380 , - 883 , - 1482 , - 641 , - 1432 , - 783 , - 230 , - 1309 , - 948 , - 683 , - 514 , - 441 , - 464 , - 583 , - 798 , - 1109 , - 1516 , - 483 , - 1082 , - 241 , - 1032 , - 383 , - 1366 , - 909 , - 548 , - 283 , - 114 , - 41 , - 64 , - 183 , - 398 , - 709 , - 1116 , - 83 , - 682 , - 1377 , - 632 , - 1519 , - 966 , - 509 , - 148 , - 1419 , - 1250 , - 1177 , - 1200 , - 1319 , - 1534 , - 309 , - 716 , - 1219 , - 282 , - 977 , - 232 , - 1119 , - 566 , - 109 , - 1284 , - 1019 , - 850 , - 777 , - 800 , - 919 , - 1134 , - 1445 , - 316 , - 819 , - 1418 , - 577 , - 1368 , - 719 , - 166 , - 1245 , - 884 , - 619 , - 450 , - 377 , - 400 , - 519 , - 734 , - 1045 , - 1452 , - 419 , - 1018 , - 177 , - 968 , - 319 , - 1302 , - 845 , - 484 , - 219 , - 50 , - 1513 , - 0 , - 41 , - 138 , - 291 , - 500 , - 765 , - 1086 , - 1463 , - 328 , - 817 , - 1362 , - 395 , - 1052 , - 197 , - 966 , - 223 , - 1104 , - 473 , - 1466 , - 947 , - 484 , - 77 , - 1294 , - 999 , - 760 , - 577 , - 450 , - 379 , - 364 , - 405 , - 502 , - 655 , - 864 , - 1129 , - 1450 , - 259 , - 692 , - 1181 , - 158 , - 759 , - 1416 , - 561 , - 1330 , - 587 , - 1468 , - 837 , - 262 , - 1311 , - 848 , - 441 , - 90 , - 1363 , - 1124 , - 941 , - 814 , - 743 , - 728 , - 769 , - 866 , - 1019 , - 1228 , - 1493 , - 246 , - 623 , - 1056 , - 1545 , - 522 , - 1123 , - 212 , - 925 , - 126 , - 951 , - 264 , - 1201 , - 626 , - 107 , - 1212 , - 805 , - 454 , - 159 , - 1488 , - 1305 , - 1178 , - 1107 , - 1092 , - 1133 , - 1230 , - 1383 , - 24 , - 289 , - 610 , - 987 , - 1420 , - 341 , - 886 , - 1487 , - 576 , - 1289 , - 490 , - 1315 , - 628 , - 1565 , - 990 , - 471 , - 8 , - 1169 , - 818 , - 523 , - 284 , - 101 , - 1542 , - 1471 , - 1456 , - 1497 , - 26 , - 179 , - 388 , - 653 , - 974 , - 1351 , - 216 , - 705 , - 1250 , - 283 , - 940 , - 85 , - 854 , - 111 , - 992 , - 361 , - 1354 , - 835 , - 372 , - 1533 , - 1182 , - 887 , - 648 , - 465 , - 338 , - 267 , - 252 , - 293 , - 390 , - 543 , - 752 , - 1017 , - 1338 , - 147 , - 580 , - 1069 , - 46 , - 647 , - 1304 , - 449 , - 1218 , - 475 , - 1356 , - 725 , - 150 , - 1199 , - 736 , - 329 , - 1546 , - 1251 , - 1012 , - 829 , - 702 , - 631 , - 616 , - 657 , - 754 , - 907 , - 1116 , - 1381 , - 134 , - 511 , - 944 , - 1433 , - 410 , - 1011 , - 100 , - 813 , - 14 , - 839 , - 152 , - 1089 , - 514 , - 1563 , - 1100 , - 693 , - 342 , - 47 , - 1376 , - 1193 , - 1066 , - 995 , - 980 , - 1021 , - 1118 , - 1271 , - 1480 , - 177 , - 498 , - 875 , - 1308 , - 229 , - 774 , - 1375 , - 464 , - 1177 , - 378 , - 1203 , - 516 , - 1453 , - 878 , - 359 , - 1464 , - 1057 , - 706 , - 411 , - 172 , - 1557 , - 1430 , - 1359 , - 1344 , - 1385 , - 1482 , - 67 , - 276 , - 541 , - 862 , - 1239 , - 104 , - 593 , - 1138 , - 171 , - 828 , - 1541 , - 742 , - 1567 , - 880 , - 249 , - 1242 , - 723 , - 260 , - 1421 , - 1070 , - 775 , - 536 , - 353 , - 226 , - 155 , - 140 , - 181 , - 278 , - 431 , - 640 , - 905 , - 1226 , - 35 , - 468 , - 957 , - 1502 , - 535 , - 1192 , - 337 , - 1106 , - 363 , - 1244 , - 613 , - 38 , - 1087 , - 624 , - 217 , - 1434 , - 1139 , - 900 , - 717 , - 590 , - 519 , - 504 , - 545 , - 642 , - 795 , - 1004 , - 1269 , - 22 , - 399 , - 832 , - 1321 , - 298 , - 899 , - 1556 , - 701 , - 1470 , - 727 , - 40 , - 977 , - 402 , - 1451 , - 988 , - 581 , - 230 , - 1503 , - 1264 , - 1081 , - 954 , - 883 , - 868 , - 909 , - 1006 , - 1159 , - 1368 , - 65 , - 386 , - 763 , - 1196 , - 117 , - 662 , - 1263 , - 352 , - 1065 , - 266 , - 1091 , - 404 , - 1341 , - 766 , - 247 , - 1352 , - 945 , - 594 , - 299 , - 60 , - 1445 , - 1318 , - 1247 , - 1232 , - 1273 , - 1370 , - 1523 , - 164 , - 429 , - 750 , - 1127 , - 1560 , - 481 , - 1026 , - 59 , - 716 , - 1429 , - 630 , - 1455 , - 768 , - 137 , - 1130 , - 611 , - 148 , - 1309 , - 958 , - 663 , - 424 , - 241 , - 114 , - 43 , - 28 , - 69 , - 166 , - 319 , - 528 , - 793 , - 1114 , - 1491 , - 356 , - 845 , - 1390 , - 423 , - 1080 , - 225 , - 994 , - 251 , - 1132 , - 501 , - 1494 , - 975 , - 512 , - 105 , - 1322 , - 1027 , - 788 , - 605 , - 478 , - 407 , - 392 , - 433 , - 530 , - 683 , - 892 , - 1157 , - 1478 , - 287 , - 720 , - 1209 , - 186 , - 787 , - 1444 , - 589 , - 1358 , - 615 , - 1496 , - 865 , - 290 , - 1339 , - 876 , - 469 , - 118 , - 1391 , - 1152 , - 969 , - 842 , - 771 , - 756 , - 797 , - 894 , - 1047 , - 1256 , - 1521 , - 274 , - 651 , - 1084 , - 5 , - 550 , - 1151 , - 240 , - 953 , - 154 , - 979 , - 292 , - 1229 , - 654 , - 135 , - 1240 , - 833 , - 482 , - 187 , - 1516 , - 1333 , - 1206 , - 1135 , - 1120 , - 1161 , - 1258 , - 1411 , - 52 , - 317 , - 638 , - 1015 , - 1448 , - 369 , - 914 , - 1515 , - 604 , - 1317 , - 518 , - 1343 , - 656 , - 25 , - 1018 , - 499 , - 36 , - 1197 , - 846 , - 551 , - 312 , - 129 , - 2 , - 1499 , - 1484 , - 1525 , - 54 , - 207 , - 416 , - 681 , - 1002 , - 1379 , - 244 , - 733 , - 1278 , - 311 , - 968 , - 113 , - 882 , - 139 , - 1020 , - 389 , - 1382 , - 863 , - 400 , - 1561 , - 1210 , - 915 , - 676 , - 493 , - 366 , - 295 , - 280 , - 321 , - 418 , - 571 , - 780 , - 1045 , - 1366 , - 175 , - 608 , - 1097 , - 74 , - 675 , - 1332 , - 477 , - 1246 , - 503 , - 1384 , - 753 , - 178 , - 1227 , - 764 , - 357 , - 6 , - 1279 , - 1040 , - 857 , - 730 , - 659 , - 644 , - 685 , - 782 , - 935 , - 1144 , - 1409 , - 162 , - 539 , - 972 , - 1461 , - 438 , - 1039 , - 128 , - 841 , - 42 , - 867 , - 180 , - 1117 , - 542 , - 23 , - 1128 , - 721 , - 370 , - 75 , - 1404 , - 1221 , - 1094 , - 1023 , - 1008 , - 1049 , - 1146 , - 1299 , - 1508 , - 205 , - 526 , - 903 , - 1336 , - 257 , - 802 , - 1403 , - 492 , - 1205 , - 406 , - 1231 , - 544 , - 1481 , - 906 , - 387 , - 1492 , - 1085 , - 734 , - 439 , - 200 , - 17 , - 1458 , - 1387 , - 1372 , - 1413 , - 1510 , - 95 , - 304 , - 569 , - 890 , - 1267 , - 132 , - 621 , - 1166 , - 199 , - 856 , - 1 , - 770 , - 27 , - 908 , - 277 , - 1270 , - 751 , - 288 , - 1449 , - 1098 , - 803 , - 564 , - 381 , - 254 , - 183 , - 168 , - 209 , - 306 , - 459 , - 668 , - 933 , - 1254 , - 63 , - 496 , - 985 , - 1530 , - 563 , - 1220 , - 365 , - 1134 , - 391 , - 1272 , - 641 , - 66 , - 1115 , - 652 , - 245 , - 1462 , - 1167 , - 928 , - 745 , - 618 , - 547 , - 532 , - 573 , - 670 , - 823 , - 1032 , - 1297 , - 50 , - 427 , - 860 , - 1349 , - 326 , - 927 , - 16 , - 729 , - 1498 , - 755 , - 68 , - 1005 , - 430 , - 1479 , - 1016 , - 609 , - 258 , - 1531 , - 1292 , - 1109 , - 982 , - 911 , - 896 , - 937 , - 1034 , - 1187 , - 1396 , - 93 , - 414 , - 791 , - 1224 , - 145 , - 690 , - 1291 , - 380 , - 1093 , - 294 , - 1119 , - 432 , - 1369 , - 794 , - 275 , - 1380 , - 973 , - 622 , - 327 , - 88 , - 1473 , - 1346 , - 1275 , - 1260 , - 1301 , - 1398 , - 1551 , - 192 , - 457 , - 778 , - 1155 , - 20 , - 509 , - 1054 , - 87 , - 744 , - 1457 , - 658 , - 1483 , - 796 , - 165 , - 1158 , - 639 , - 176 , - 1337 , - 986 , - 691 , - 452 , - 269 , - 142 , - 71 , - 56 , - 97 , - 194 , - 347 , - 556 , - 821 , - 1142 , - 1519 , - 384 , - 873 , - 1418 , - 451 , - 1108 , - 253 , - 1022 , - 279 , - 1160 , - 529 , - 1522 , - 1003 , - 540 , - 133 , - 1350 , - 1055 , - 816 , - 633 , - 506 , - 435 , - 420 , - 461 , - 558 , - 711 , - 920 , - 1185 , - 1506 , - 315 , - 748 , - 1237 , - 214 , - 815 , - 1472 , - 617 , - 1386 , - 643 , - 1524 , - 893 , - 318 , - 1367 , - 904 , - 497 , - 146 , - 1419 , - 1180 , - 997 , - 870 , - 799 , - 784 , - 825 , - 922 , - 1075 , - 1284 , - 1549 , - 302 , - 679 , - 1112 , - 33 , - 578 , - 1179 , - 268 , - 981 , - 182 , - 1007 , - 320 , - 1257 , - 682 , - 163 , - 1268 , - 861 , - 510 , - 215 , - 1544 , - 1361 , - 1234 , - 1163 , - 1148 , - 1189 , - 1286 , - 1439 , - 80 , - 345 , - 666 , - 1043 , - 1476 , - 397 , - 942 , - 1543 , - 632 , - 1345 , - 546 , - 1371 , - 684 , - 53 , - 1046 , - 527 , - 64 , - 1225 , - 874 , - 579 , - 340 , - 157 , - 30 , - 1527 , - 1512 , - 1553 , - 82 , - 235 , - 444 , - 709 , - 1030 , - 1407 , - 272 , - 761 , - 1306 , - 339 , - 996 , - 141 , - 910 , - 167 , - 1048 , - 417 , - 1410 , - 891 , - 428 , - 21 , - 1238 , - 943 , - 704 , - 521 , - 394 , - 323 , - 308 , - 349 , - 446 , - 599 , - 808 , - 1073 , - 1394 , - 203 , - 636 , - 1125 , - 102 , - 703 , - 1360 , - 505 , - 1274 , - 531 , - 1412 , - 781 , - 206 , - 1255 , - 792 , - 385 , - 34 , - 1307 , - 1068 , - 885 , - 758 , - 687 , - 672 , - 713 , - 810 , - 963 , - 1172 , - 1437 , - 190 , - 567 , - 1000 , - 1489 , - 466 , - 1067 , - 156 , - 869 , - 70 , - 895 , - 208 , - 1145 , - 570 , - 51 , - 1156 , - 749 , - 398 , - 103 , - 1432 , - 1249 , - 1122 , - 1051 , - 1036 , - 1077 , - 1174 , - 1327 , - 1536 , - 233 , - 554 , - 931 , - 1364 , - 285 , - 830 , - 1431 , - 520 , - 1233 , - 434 , - 1259 , - 572 , - 1509 , - 934 , - 415 , - 1520 , - 1113 , - 762 , - 467 , - 228 , - 45 , - 1486 , - 1415 , - 1400 , - 1441 , - 1538 , - 123 , - 332 , - 597 , - 918 , - 1295 , - 160 , - 649 , - 1194 , - 227 , - 884 , - 29 , - 798 , - 55 , - 936 , - 305 , - 1298 , - 779 , - 316 , - 1477 , - 1126 , - 831 , - 592 , - 409 , - 282 , - 211 , - 196 , - 237 , - 334 , - 487 , - 696 , - 961 , - 1282 , - 91 , - 524 , - 1013 , - 1558 , - 591 , - 1248 , - 393 , - 1162 , - 419 , - 1300 , - 669 , - 94 , - 1143 , - 680 , - 273 , - 1490 , - 1195 , - 956 , - 773 , - 646 , - 575 , - 560 , - 601 , - 698 , - 851 , - 1060 , - 1325 , - 78 , - 455 , - 888 , - 1377 , - 354 , - 955 , - 44 , - 757 , - 1526 , - 783 , - 96 , - 1033 , - 458 , - 1507 , - 1044 , - 637 , - 286 , - 1559 , - 1320 , - 1137 , - 1010 , - 939 , - 924 , - 965 , - 1062 , - 1215 , - 1424 , - 121 , - 442 , - 819 , - 1252 , - 173 , - 718 , - 1319 , - 408 , - 1121 , - 322 , - 1147 , - 460 , - 1397 , - 822 , - 303 , - 1408 , - 1001 , - 650 , - 355 , - 116 , - 1501 , - 1374 , - 1303 , - 1288 , - 1329 , - 1426 , - 11 , - 220 , - 485 , - 806 , - 1183 , - 48 , - 537 , - 1082 , - 115 , - 772 , - 1485 , - 686 , - 1511 , - 824 , - 193 , - 1186 , - 667 , - 204 , - 1365 , - 1014 , - 719 , - 480 , - 297 , - 170 , - 99 , - 84 , - 125 , - 222 , - 375 , - 584 , - 849 , - 1170 , - 1547 , - 412 , - 901 , - 1446 , - 479 , - 1136 , - 281 , - 1050 , - 307 , - 1188 , - 557 , - 1550 , - 1031 , - 568 , - 161 , - 1378 , - 1083 , - 844 , - 661 , - 534 , - 463 , - 448 , - 489 , - 586 , - 739 , - 948 , - 1213 , - 1534 , - 343 , - 776 , - 1265 , - 242 , - 843 , - 1500 , - 645 , - 1414 , - 671 , - 1552 , - 921 , - 346 , - 1395 , - 932 , - 525 , - 174 , - 1447 , - 1208 , - 1025 , - 898 , - 827 , - 812 , - 853 , - 950 , - 1103 , - 1312 , - 9 , - 330 , - 707 , - 1140 , - 61 , - 606 , - 1207 , - 296 , - 1009 , - 210 , - 1035 , - 348 , - 1285 , - 710 , - 191 , - 1296 , - 889 , - 538 , - 243 , - 4 , - 1389 , - 1262 , - 1191 , - 1176 , - 1217 , - 1314 , - 1467 , - 108 , - 373 , - 694 , - 1071 , - 1504 , - 425 , - 970 , - 3 , - 660 , - 1373 , - 574 , - 1399 , - 712 , - 81 , - 1074 , - 555 , - 92 , - 1253 , - 902 , - 607 , - 368 , - 185 , - 58 , - 1555 , - 1540 , - 13 , - 110 , - 263 , - 472 , - 737 , - 1058 , - 1435 , - 300 , - 789 , - 1334 , - 367 , - 1024 , - 169 , - 938 , - 195 , - 1076 , - 445 , - 1438 , - 919 , - 456 , - 49 , - 1266 , - 971 , - 732 , - 549 , - 422 , - 351 , - 336 , - 377 , - 474 , - 627 , - 836 , - 1101 , - 1422 , - 231 , - 664 , - 1153 , - 130 , - 731 , - 1388 , - 533 , - 1302 , - 559 , - 1440 , - 809 , - 234 , - 1283 , - 820 , - 413 , - 62 , - 1335 , - 1096 , - 913 , - 786 , - 715 , - 700 , - 741 , - 838 , - 991 , - 1200 , - 1465 , - 218 , - 595 , - 1028 , - 1517 , - 494 , - 1095 , - 184 , - 897 , - 98 , - 923 , - 236 , - 1173 , - 598 , - 79 , - 1184 , - 777 , - 426 , - 131 , - 1460 , - 1277 , - 1150 , - 1079 , - 1064 , - 1105 , - 1202 , - 1355 , - 1564 , - 261 , - 582 , - 959 , - 1392 , - 313 , - 858 , - 1459 , - 548 , - 1261 , - 462 , - 1287 , - 600 , - 1537 , - 962 , - 443 , - 1548 , - 1141 , - 790 , - 495 , - 256 , - 73 , - 1514 , - 1443 , - 1428 , - 1469 , - 1566 , - 151 , - 360 , - 625 , - 946 , - 1323 , - 188 , - 677 , - 1222 , - 255 , - 912 , - 57 , - 826 , - 83 , - 964 , - 333 , - 1326 , - 807 , - 344 , - 1505 , - 1154 , - 859 , - 620 , - 437 , - 310 , - 239 , - 224 , - 265 , - 362 , - 515 , - 724 , - 989 , - 1310 , - 119 , - 552 , - 1041 , - 18 , - 619 , - 1276 , - 421 , - 1190 , - 447 , - 1328 , - 697 , - 122 , - 1171 , - 708 , - 301 , - 1518 , - 1223 , - 984 , - 801 , - 674 , - 603 , - 588 , - 629 , - 726 , - 879 , - 1088 , - 1353 , - 106 , - 483 , - 916 , - 1405 , - 382 , - 983 , - 72 , - 785 , - 1554 , - 811 , - 124 , - 1061 , - 486 , - 1535 , - 1072 , - 665 , - 314 , - 19 , - 1348 , - 1165 , - 1038 , - 967 , - 952 , - 993 , - 1090 , - 1243 , - 1452 , - 149 , - 470 , - 847 , - 1280 , - 201 , - 746 , - 1347 , - 436 , - 1149 , - 350 , - 1175 , - 488 , - 1425 , - 850 , - 331 , - 1436 , - 1029 , - 678 , - 383 , - 144 , - 1529 , - 1402 , - 1331 , - 1316 , - 1357 , - 1454 , - 39 , - 248 , - 513 , - 834 , - 1211 , - 76 , - 565 , - 1110 , - 143 , - 800 , - 1513 , - 714 , - 1539 , - 852 , - 221 , - 1214 , - 695 , - 232 , - 1393 , - 1042 , - 747 , - 508 , - 325 , - 198 , - 127 , - 112 , - 153 , - 250 , - 403 , - 612 , - 877 , - 1198 , - 7 , - 440 , - 929 , - 1474 , - 507 , - 1164 , - 309 , - 1078 , - 335 , - 1216 , - 585 , - 10 , - 1059 , - 596 , - 189 , - 1406 , - 1111 , - 872 , - 689 , - 562 , - 491 , - 476 , - 517 , - 614 , - 767 , - 976 , - 1241 , - 1562 , - 371 , - 804 , - 1293 , - 270 , - 871 , - 1528 , - 673 , - 1442 , - 699 , - 12 , - 949 , - 374 , - 1423 , - 960 , - 553 , - 202 , - 1475 , - 1236 , - 1053 , - 926 , - 855 , - 840 , - 881 , - 978 , - 1131 , - 1340 , - 37 , - 358 , - 735 , - 1168 , - 89 , - 634 , - 1235 , - 324 , - 1037 , - 238 , - 1063 , - 376 , - 1313 , - 738 , - 219 , - 1324 , - 917 , - 566 , - 271 , - 32 , - 1417 , - 1290 , - 1219 , - 1204 , - 1245 , - 1342 , - 1495 , - 136 , - 401 , - 722 , - 1099 , - 1532 , - 453 , - 998 , - 31 , - 688 , - 1401 , - 602 , - 1427 , - 740 , - 109 , - 1102 , - 583 , - 120 , - 1281 , - 930 , - 635 , - 396 , - 213 , - 86 , - 15 , - 0 , - 97 , - 354 , - 771 , - 1348 , - 485 , - 1382 , - 839 , - 456 , - 233 , - 170 , - 267 , - 524 , - 941 , - 1518 , - 655 , - 1552 , - 1009 , - 626 , - 403 , - 340 , - 437 , - 694 , - 1111 , - 88 , - 825 , - 122 , - 1179 , - 796 , - 573 , - 510 , - 607 , - 864 , - 1281 , - 258 , - 995 , - 292 , - 1349 , - 966 , - 743 , - 680 , - 777 , - 1034 , - 1451 , - 428 , - 1165 , - 462 , - 1519 , - 1136 , - 913 , - 850 , - 947 , - 1204 , - 21 , - 598 , - 1335 , - 632 , - 89 , - 1306 , - 1083 , - 1020 , - 1117 , - 1374 , - 191 , - 768 , - 1505 , - 802 , - 259 , - 1476 , - 1253 , - 1190 , - 1287 , - 1544 , - 361 , - 938 , - 75 , - 972 , - 429 , - 46 , - 1423 , - 1360 , - 1457 , - 114 , - 531 , - 1108 , - 245 , - 1142 , - 599 , - 216 , - 1593 , - 1530 , - 27 , - 284 , - 701 , - 1278 , - 415 , - 1312 , - 769 , - 386 , - 163 , - 100 , - 197 , - 454 , - 871 , - 1448 , - 585 , - 1482 , - 939 , - 556 , - 333 , - 270 , - 367 , - 624 , - 1041 , - 18 , - 755 , - 52 , - 1109 , - 726 , - 503 , - 440 , - 537 , - 794 , - 1211 , - 188 , - 925 , - 222 , - 1279 , - 896 , - 673 , - 610 , - 707 , - 964 , - 1381 , - 358 , - 1095 , - 392 , - 1449 , - 1066 , - 843 , - 780 , - 877 , - 1134 , - 1551 , - 528 , - 1265 , - 562 , - 19 , - 1236 , - 1013 , - 950 , - 1047 , - 1304 , - 121 , - 698 , - 1435 , - 732 , - 189 , - 1406 , - 1183 , - 1120 , - 1217 , - 1474 , - 291 , - 868 , - 5 , - 902 , - 359 , - 1576 , - 1353 , - 1290 , - 1387 , - 44 , - 461 , - 1038 , - 175 , - 1072 , - 529 , - 146 , - 1523 , - 1460 , - 1557 , - 214 , - 631 , - 1208 , - 345 , - 1242 , - 699 , - 316 , - 93 , - 30 , - 127 , - 384 , - 801 , - 1378 , - 515 , - 1412 , - 869 , - 486 , - 263 , - 200 , - 297 , - 554 , - 971 , - 1548 , - 685 , - 1582 , - 1039 , - 656 , - 433 , - 370 , - 467 , - 724 , - 1141 , - 118 , - 855 , - 152 , - 1209 , - 826 , - 603 , - 540 , - 637 , - 894 , - 1311 , - 288 , - 1025 , - 322 , - 1379 , - 996 , - 773 , - 710 , - 807 , - 1064 , - 1481 , - 458 , - 1195 , - 492 , - 1549 , - 1166 , - 943 , - 880 , - 977 , - 1234 , - 51 , - 628 , - 1365 , - 662 , - 119 , - 1336 , - 1113 , - 1050 , - 1147 , - 1404 , - 221 , - 798 , - 1535 , - 832 , - 289 , - 1506 , - 1283 , - 1220 , - 1317 , - 1574 , - 391 , - 968 , - 105 , - 1002 , - 459 , - 76 , - 1453 , - 1390 , - 1487 , - 144 , - 561 , - 1138 , - 275 , - 1172 , - 629 , - 246 , - 23 , - 1560 , - 57 , - 314 , - 731 , - 1308 , - 445 , - 1342 , - 799 , - 416 , - 193 , - 130 , - 227 , - 484 , - 901 , - 1478 , - 615 , - 1512 , - 969 , - 586 , - 363 , - 300 , - 397 , - 654 , - 1071 , - 48 , - 785 , - 82 , - 1139 , - 756 , - 533 , - 470 , - 567 , - 824 , - 1241 , - 218 , - 955 , - 252 , - 1309 , - 926 , - 703 , - 640 , - 737 , - 994 , - 1411 , - 388 , - 1125 , - 422 , - 1479 , - 1096 , - 873 , - 810 , - 907 , - 1164 , - 1581 , - 558 , - 1295 , - 592 , - 49 , - 1266 , - 1043 , - 980 , - 1077 , - 1334 , - 151 , - 728 , - 1465 , - 762 , - 219 , - 1436 , - 1213 , - 1150 , - 1247 , - 1504 , - 321 , - 898 , - 35 , - 932 , - 389 , - 6 , - 1383 , - 1320 , - 1417 , - 74 , - 491 , - 1068 , - 205 , - 1102 , - 559 , - 176 , - 1553 , - 1490 , - 1587 , - 244 , - 661 , - 1238 , - 375 , - 1272 , - 729 , - 346 , - 123 , - 60 , - 157 , - 414 , - 831 , - 1408 , - 545 , - 1442 , - 899 , - 516 , - 293 , - 230 , - 327 , - 584 , - 1001 , - 1578 , - 715 , - 12 , - 1069 , - 686 , - 463 , - 400 , - 497 , - 754 , - 1171 , - 148 , - 885 , - 182 , - 1239 , - 856 , - 633 , - 570 , - 667 , - 924 , - 1341 , - 318 , - 1055 , - 352 , - 1409 , - 1026 , - 803 , - 740 , - 837 , - 1094 , - 1511 , - 488 , - 1225 , - 522 , - 1579 , - 1196 , - 973 , - 910 , - 1007 , - 1264 , - 81 , - 658 , - 1395 , - 692 , - 149 , - 1366 , - 1143 , - 1080 , - 1177 , - 1434 , - 251 , - 828 , - 1565 , - 862 , - 319 , - 1536 , - 1313 , - 1250 , - 1347 , - 4 , - 421 , - 998 , - 135 , - 1032 , - 489 , - 106 , - 1483 , - 1420 , - 1517 , - 174 , - 591 , - 1168 , - 305 , - 1202 , - 659 , - 276 , - 53 , - 1590 , - 87 , - 344 , - 761 , - 1338 , - 475 , - 1372 , - 829 , - 446 , - 223 , - 160 , - 257 , - 514 , - 931 , - 1508 , - 645 , - 1542 , - 999 , - 616 , - 393 , - 330 , - 427 , - 684 , - 1101 , - 78 , - 815 , - 112 , - 1169 , - 786 , - 563 , - 500 , - 597 , - 854 , - 1271 , - 248 , - 985 , - 282 , - 1339 , - 956 , - 733 , - 670 , - 767 , - 1024 , - 1441 , - 418 , - 1155 , - 452 , - 1509 , - 1126 , - 903 , - 840 , - 937 , - 1194 , - 11 , - 588 , - 1325 , - 622 , - 79 , - 1296 , - 1073 , - 1010 , - 1107 , - 1364 , - 181 , - 758 , - 1495 , - 792 , - 249 , - 1466 , - 1243 , - 1180 , - 1277 , - 1534 , - 351 , - 928 , - 65 , - 962 , - 419 , - 36 , - 1413 , - 1350 , - 1447 , - 104 , - 521 , - 1098 , - 235 , - 1132 , - 589 , - 206 , - 1583 , - 1520 , - 17 , - 274 , - 691 , - 1268 , - 405 , - 1302 , - 759 , - 376 , - 153 , - 90 , - 187 , - 444 , - 861 , - 1438 , - 575 , - 1472 , - 929 , - 546 , - 323 , - 260 , - 357 , - 614 , - 1031 , - 8 , - 745 , - 42 , - 1099 , - 716 , - 493 , - 430 , - 527 , - 784 , - 1201 , - 178 , - 915 , - 212 , - 1269 , - 886 , - 663 , - 600 , - 697 , - 954 , - 1371 , - 348 , - 1085 , - 382 , - 1439 , - 1056 , - 833 , - 770 , - 867 , - 1124 , - 1541 , - 518 , - 1255 , - 552 , - 9 , - 1226 , - 1003 , - 940 , - 1037 , - 1294 , - 111 , - 688 , - 1425 , - 722 , - 179 , - 1396 , - 1173 , - 1110 , - 1207 , - 1464 , - 281 , - 858 , - 1595 , - 892 , - 349 , - 1566 , - 1343 , - 1280 , - 1377 , - 34 , - 451 , - 1028 , - 165 , - 1062 , - 519 , - 136 , - 1513 , - 1450 , - 1547 , - 204 , - 621 , - 1198 , - 335 , - 1232 , - 689 , - 306 , - 83 , - 20 , - 117 , - 374 , - 791 , - 1368 , - 505 , - 1402 , - 859 , - 476 , - 253 , - 190 , - 287 , - 544 , - 961 , - 1538 , - 675 , - 1572 , - 1029 , - 646 , - 423 , - 360 , - 457 , - 714 , - 1131 , - 108 , - 845 , - 142 , - 1199 , - 816 , - 593 , - 530 , - 627 , - 884 , - 1301 , - 278 , - 1015 , - 312 , - 1369 , - 986 , - 763 , - 700 , - 797 , - 1054 , - 1471 , - 448 , - 1185 , - 482 , - 1539 , - 1156 , - 933 , - 870 , - 967 , - 1224 , - 41 , - 618 , - 1355 , - 652 , - 109 , - 1326 , - 1103 , - 1040 , - 1137 , - 1394 , - 211 , - 788 , - 1525 , - 822 , - 279 , - 1496 , - 1273 , - 1210 , - 1307 , - 1564 , - 381 , - 958 , - 95 , - 992 , - 449 , - 66 , - 1443 , - 1380 , - 1477 , - 134 , - 551 , - 1128 , - 265 , - 1162 , - 619 , - 236 , - 13 , - 1550 , - 47 , - 304 , - 721 , - 1298 , - 435 , - 1332 , - 789 , - 406 , - 183 , - 120 , - 217 , - 474 , - 891 , - 1468 , - 605 , - 1502 , - 959 , - 576 , - 353 , - 290 , - 387 , - 644 , - 1061 , - 38 , - 775 , - 72 , - 1129 , - 746 , - 523 , - 460 , - 557 , - 814 , - 1231 , - 208 , - 945 , - 242 , - 1299 , - 916 , - 693 , - 630 , - 727 , - 984 , - 1401 , - 378 , - 1115 , - 412 , - 1469 , - 1086 , - 863 , - 800 , - 897 , - 1154 , - 1571 , - 548 , - 1285 , - 582 , - 39 , - 1256 , - 1033 , - 970 , - 1067 , - 1324 , - 141 , - 718 , - 1455 , - 752 , - 209 , - 1426 , - 1203 , - 1140 , - 1237 , - 1494 , - 311 , - 888 , - 25 , - 922 , - 379 , - 1596 , - 1373 , - 1310 , - 1407 , - 64 , - 481 , - 1058 , - 195 , - 1092 , - 549 , - 166 , - 1543 , - 1480 , - 1577 , - 234 , - 651 , - 1228 , - 365 , - 1262 , - 719 , - 336 , - 113 , - 50 , - 147 , - 404 , - 821 , - 1398 , - 535 , - 1432 , - 889 , - 506 , - 283 , - 220 , - 317 , - 574 , - 991 , - 1568 , - 705 , - 2 , - 1059 , - 676 , - 453 , - 390 , - 487 , - 744 , - 1161 , - 138 , - 875 , - 172 , - 1229 , - 846 , - 623 , - 560 , - 657 , - 914 , - 1331 , - 308 , - 1045 , - 342 , - 1399 , - 1016 , - 793 , - 730 , - 827 , - 1084 , - 1501 , - 478 , - 1215 , - 512 , - 1569 , - 1186 , - 963 , - 900 , - 997 , - 1254 , - 71 , - 648 , - 1385 , - 682 , - 139 , - 1356 , - 1133 , - 1070 , - 1167 , - 1424 , - 241 , - 818 , - 1555 , - 852 , - 309 , - 1526 , - 1303 , - 1240 , - 1337 , - 1594 , - 411 , - 988 , - 125 , - 1022 , - 479 , - 96 , - 1473 , - 1410 , - 1507 , - 164 , - 581 , - 1158 , - 295 , - 1192 , - 649 , - 266 , - 43 , - 1580 , - 77 , - 334 , - 751 , - 1328 , - 465 , - 1362 , - 819 , - 436 , - 213 , - 150 , - 247 , - 504 , - 921 , - 1498 , - 635 , - 1532 , - 989 , - 606 , - 383 , - 320 , - 417 , - 674 , - 1091 , - 68 , - 805 , - 102 , - 1159 , - 776 , - 553 , - 490 , - 587 , - 844 , - 1261 , - 238 , - 975 , - 272 , - 1329 , - 946 , - 723 , - 660 , - 757 , - 1014 , - 1431 , - 408 , - 1145 , - 442 , - 1499 , - 1116 , - 893 , - 830 , - 927 , - 1184 , - 1 , - 578 , - 1315 , - 612 , - 69 , - 1286 , - 1063 , - 1000 , - 1097 , - 1354 , - 171 , - 748 , - 1485 , - 782 , - 239 , - 1456 , - 1233 , - 1170 , - 1267 , - 1524 , - 341 , - 918 , - 55 , - 952 , - 409 , - 26 , - 1403 , - 1340 , - 1437 , - 94 , - 511 , - 1088 , - 225 , - 1122 , - 579 , - 196 , - 1573 , - 1510 , - 7 , - 264 , - 681 , - 1258 , - 395 , - 1292 , - 749 , - 366 , - 143 , - 80 , - 177 , - 434 , - 851 , - 1428 , - 565 , - 1462 , - 919 , - 536 , - 313 , - 250 , - 347 , - 604 , - 1021 , - 1598 , - 735 , - 32 , - 1089 , - 706 , - 483 , - 420 , - 517 , - 774 , - 1191 , - 168 , - 905 , - 202 , - 1259 , - 876 , - 653 , - 590 , - 687 , - 944 , - 1361 , - 338 , - 1075 , - 372 , - 1429 , - 1046 , - 823 , - 760 , - 857 , - 1114 , - 1531 , - 508 , - 1245 , - 542 , - 1599 , - 1216 , - 993 , - 930 , - 1027 , - 1284 , - 101 , - 678 , - 1415 , - 712 , - 169 , - 1386 , - 1163 , - 1100 , - 1197 , - 1454 , - 271 , - 848 , - 1585 , - 882 , - 339 , - 1556 , - 1333 , - 1270 , - 1367 , - 24 , - 441 , - 1018 , - 155 , - 1052 , - 509 , - 126 , - 1503 , - 1440 , - 1537 , - 194 , - 611 , - 1188 , - 325 , - 1222 , - 679 , - 296 , - 73 , - 10 , - 107 , - 364 , - 781 , - 1358 , - 495 , - 1392 , - 849 , - 466 , - 243 , - 180 , - 277 , - 534 , - 951 , - 1528 , - 665 , - 1562 , - 1019 , - 636 , - 413 , - 350 , - 447 , - 704 , - 1121 , - 98 , - 835 , - 132 , - 1189 , - 806 , - 583 , - 520 , - 617 , - 874 , - 1291 , - 268 , - 1005 , - 302 , - 1359 , - 976 , - 753 , - 690 , - 787 , - 1044 , - 1461 , - 438 , - 1175 , - 472 , - 1529 , - 1146 , - 923 , - 860 , - 957 , - 1214 , - 31 , - 608 , - 1345 , - 642 , - 99 , - 1316 , - 1093 , - 1030 , - 1127 , - 1384 , - 201 , - 778 , - 1515 , - 812 , - 269 , - 1486 , - 1263 , - 1200 , - 1297 , - 1554 , - 371 , - 948 , - 85 , - 982 , - 439 , - 56 , - 1433 , - 1370 , - 1467 , - 124 , - 541 , - 1118 , - 255 , - 1152 , - 609 , - 226 , - 3 , - 1540 , - 37 , - 294 , - 711 , - 1288 , - 425 , - 1322 , - 779 , - 396 , - 173 , - 110 , - 207 , - 464 , - 881 , - 1458 , - 595 , - 1492 , - 949 , - 566 , - 343 , - 280 , - 377 , - 634 , - 1051 , - 28 , - 765 , - 62 , - 1119 , - 736 , - 513 , - 450 , - 547 , - 804 , - 1221 , - 198 , - 935 , - 232 , - 1289 , - 906 , - 683 , - 620 , - 717 , - 974 , - 1391 , - 368 , - 1105 , - 402 , - 1459 , - 1076 , - 853 , - 790 , - 887 , - 1144 , - 1561 , - 538 , - 1275 , - 572 , - 29 , - 1246 , - 1023 , - 960 , - 1057 , - 1314 , - 131 , - 708 , - 1445 , - 742 , - 199 , - 1416 , - 1193 , - 1130 , - 1227 , - 1484 , - 301 , - 878 , - 15 , - 912 , - 369 , - 1586 , - 1363 , - 1300 , - 1397 , - 54 , - 471 , - 1048 , - 185 , - 1082 , - 539 , - 156 , - 1533 , - 1470 , - 1567 , - 224 , - 641 , - 1218 , - 355 , - 1252 , - 709 , - 326 , - 103 , - 40 , - 137 , - 394 , - 811 , - 1388 , - 525 , - 1422 , - 879 , - 496 , - 273 , - 210 , - 307 , - 564 , - 981 , - 1558 , - 695 , - 1592 , - 1049 , - 666 , - 443 , - 380 , - 477 , - 734 , - 1151 , - 128 , - 865 , - 162 , - 1219 , - 836 , - 613 , - 550 , - 647 , - 904 , - 1321 , - 298 , - 1035 , - 332 , - 1389 , - 1006 , - 783 , - 720 , - 817 , - 1074 , - 1491 , - 468 , - 1205 , - 502 , - 1559 , - 1176 , - 953 , - 890 , - 987 , - 1244 , - 61 , - 638 , - 1375 , - 672 , - 129 , - 1346 , - 1123 , - 1060 , - 1157 , - 1414 , - 231 , - 808 , - 1545 , - 842 , - 299 , - 1516 , - 1293 , - 1230 , - 1327 , - 1584 , - 401 , - 978 , - 115 , - 1012 , - 469 , - 86 , - 1463 , - 1400 , - 1497 , - 154 , - 571 , - 1148 , - 285 , - 1182 , - 639 , - 256 , - 33 , - 1570 , - 67 , - 324 , - 741 , - 1318 , - 455 , - 1352 , - 809 , - 426 , - 203 , - 140 , - 237 , - 494 , - 911 , - 1488 , - 625 , - 1522 , - 979 , - 596 , - 373 , - 310 , - 407 , - 664 , - 1081 , - 58 , - 795 , - 92 , - 1149 , - 766 , - 543 , - 480 , - 577 , - 834 , - 1251 , - 228 , - 965 , - 262 , - 1319 , - 936 , - 713 , - 650 , - 747 , - 1004 , - 1421 , - 398 , - 1135 , - 432 , - 1489 , - 1106 , - 883 , - 820 , - 917 , - 1174 , - 1591 , - 568 , - 1305 , - 602 , - 59 , - 1276 , - 1053 , - 990 , - 1087 , - 1344 , - 161 , - 738 , - 1475 , - 772 , - 229 , - 1446 , - 1223 , - 1160 , - 1257 , - 1514 , - 331 , - 908 , - 45 , - 942 , - 399 , - 16 , - 1393 , - 1330 , - 1427 , - 84 , - 501 , - 1078 , - 215 , - 1112 , - 569 , - 186 , - 1563 , - 1500 , - 1597 , - 254 , - 671 , - 1248 , - 385 , - 1282 , - 739 , - 356 , - 133 , - 70 , - 167 , - 424 , - 841 , - 1418 , - 555 , - 1452 , - 909 , - 526 , - 303 , - 240 , - 337 , - 594 , - 1011 , - 1588 , - 725 , - 22 , - 1079 , - 696 , - 473 , - 410 , - 507 , - 764 , - 1181 , - 158 , - 895 , - 192 , - 1249 , - 866 , - 643 , - 580 , - 677 , - 934 , - 1351 , - 328 , - 1065 , - 362 , - 1419 , - 1036 , - 813 , - 750 , - 847 , - 1104 , - 1521 , - 498 , - 1235 , - 532 , - 1589 , - 1206 , - 983 , - 920 , - 1017 , - 1274 , - 91 , - 668 , - 1405 , - 702 , - 159 , - 1376 , - 1153 , - 1090 , - 1187 , - 1444 , - 261 , - 838 , - 1575 , - 872 , - 329 , - 1546 , - 1323 , - 1260 , - 1357 , - 14 , - 431 , - 1008 , - 145 , - 1042 , - 499 , - 116 , - 1493 , - 1430 , - 1527 , - 184 , - 601 , - 1178 , - 315 , - 1212 , - 669 , - 286 , - 63 , - 0 , - 127 , - 458 , - 993 , - 100 , - 1043 , - 558 , - 277 , - 200 , - 327 , - 658 , - 1193 , - 300 , - 1243 , - 758 , - 477 , - 400 , - 527 , - 858 , - 1393 , - 500 , - 1443 , - 958 , - 677 , - 600 , - 727 , - 1058 , - 1593 , - 700 , - 11 , - 1158 , - 877 , - 800 , - 927 , - 1258 , - 161 , - 900 , - 211 , - 1358 , - 1077 , - 1000 , - 1127 , - 1458 , - 361 , - 1100 , - 411 , - 1558 , - 1277 , - 1200 , - 1327 , - 26 , - 561 , - 1300 , - 611 , - 126 , - 1477 , - 1400 , - 1527 , - 226 , - 761 , - 1500 , - 811 , - 326 , - 45 , - 1600 , - 95 , - 426 , - 961 , - 68 , - 1011 , - 526 , - 245 , - 168 , - 295 , - 626 , - 1161 , - 268 , - 1211 , - 726 , - 445 , - 368 , - 495 , - 826 , - 1361 , - 468 , - 1411 , - 926 , - 645 , - 568 , - 695 , - 1026 , - 1561 , - 668 , - 1611 , - 1126 , - 845 , - 768 , - 895 , - 1226 , - 129 , - 868 , - 179 , - 1326 , - 1045 , - 968 , - 1095 , - 1426 , - 329 , - 1068 , - 379 , - 1526 , - 1245 , - 1168 , - 1295 , - 1626 , - 529 , - 1268 , - 579 , - 94 , - 1445 , - 1368 , - 1495 , - 194 , - 729 , - 1468 , - 779 , - 294 , - 13 , - 1568 , - 63 , - 394 , - 929 , - 36 , - 979 , - 494 , - 213 , - 136 , - 263 , - 594 , - 1129 , - 236 , - 1179 , - 694 , - 413 , - 336 , - 463 , - 794 , - 1329 , - 436 , - 1379 , - 894 , - 613 , - 536 , - 663 , - 994 , - 1529 , - 636 , - 1579 , - 1094 , - 813 , - 736 , - 863 , - 1194 , - 97 , - 836 , - 147 , - 1294 , - 1013 , - 936 , - 1063 , - 1394 , - 297 , - 1036 , - 347 , - 1494 , - 1213 , - 1136 , - 1263 , - 1594 , - 497 , - 1236 , - 547 , - 62 , - 1413 , - 1336 , - 1463 , - 162 , - 697 , - 1436 , - 747 , - 262 , - 1613 , - 1536 , - 31 , - 362 , - 897 , - 4 , - 947 , - 462 , - 181 , - 104 , - 231 , - 562 , - 1097 , - 204 , - 1147 , - 662 , - 381 , - 304 , - 431 , - 762 , - 1297 , - 404 , - 1347 , - 862 , - 581 , - 504 , - 631 , - 962 , - 1497 , - 604 , - 1547 , - 1062 , - 781 , - 704 , - 831 , - 1162 , - 65 , - 804 , - 115 , - 1262 , - 981 , - 904 , - 1031 , - 1362 , - 265 , - 1004 , - 315 , - 1462 , - 1181 , - 1104 , - 1231 , - 1562 , - 465 , - 1204 , - 515 , - 30 , - 1381 , - 1304 , - 1431 , - 130 , - 665 , - 1404 , - 715 , - 230 , - 1581 , - 1504 , - 1631 , - 330 , - 865 , - 1604 , - 915 , - 430 , - 149 , - 72 , - 199 , - 530 , - 1065 , - 172 , - 1115 , - 630 , - 349 , - 272 , - 399 , - 730 , - 1265 , - 372 , - 1315 , - 830 , - 549 , - 472 , - 599 , - 930 , - 1465 , - 572 , - 1515 , - 1030 , - 749 , - 672 , - 799 , - 1130 , - 33 , - 772 , - 83 , - 1230 , - 949 , - 872 , - 999 , - 1330 , - 233 , - 972 , - 283 , - 1430 , - 1149 , - 1072 , - 1199 , - 1530 , - 433 , - 1172 , - 483 , - 1630 , - 1349 , - 1272 , - 1399 , - 98 , - 633 , - 1372 , - 683 , - 198 , - 1549 , - 1472 , - 1599 , - 298 , - 833 , - 1572 , - 883 , - 398 , - 117 , - 40 , - 167 , - 498 , - 1033 , - 140 , - 1083 , - 598 , - 317 , - 240 , - 367 , - 698 , - 1233 , - 340 , - 1283 , - 798 , - 517 , - 440 , - 567 , - 898 , - 1433 , - 540 , - 1483 , - 998 , - 717 , - 640 , - 767 , - 1098 , - 1 , - 740 , - 51 , - 1198 , - 917 , - 840 , - 967 , - 1298 , - 201 , - 940 , - 251 , - 1398 , - 1117 , - 1040 , - 1167 , - 1498 , - 401 , - 1140 , - 451 , - 1598 , - 1317 , - 1240 , - 1367 , - 66 , - 601 , - 1340 , - 651 , - 166 , - 1517 , - 1440 , - 1567 , - 266 , - 801 , - 1540 , - 851 , - 366 , - 85 , - 8 , - 135 , - 466 , - 1001 , - 108 , - 1051 , - 566 , - 285 , - 208 , - 335 , - 666 , - 1201 , - 308 , - 1251 , - 766 , - 485 , - 408 , - 535 , - 866 , - 1401 , - 508 , - 1451 , - 966 , - 685 , - 608 , - 735 , - 1066 , - 1601 , - 708 , - 19 , - 1166 , - 885 , - 808 , - 935 , - 1266 , - 169 , - 908 , - 219 , - 1366 , - 1085 , - 1008 , - 1135 , - 1466 , - 369 , - 1108 , - 419 , - 1566 , - 1285 , - 1208 , - 1335 , - 34 , - 569 , - 1308 , - 619 , - 134 , - 1485 , - 1408 , - 1535 , - 234 , - 769 , - 1508 , - 819 , - 334 , - 53 , - 1608 , - 103 , - 434 , - 969 , - 76 , - 1019 , - 534 , - 253 , - 176 , - 303 , - 634 , - 1169 , - 276 , - 1219 , - 734 , - 453 , - 376 , - 503 , - 834 , - 1369 , - 476 , - 1419 , - 934 , - 653 , - 576 , - 703 , - 1034 , - 1569 , - 676 , - 1619 , - 1134 , - 853 , - 776 , - 903 , - 1234 , - 137 , - 876 , - 187 , - 1334 , - 1053 , - 976 , - 1103 , - 1434 , - 337 , - 1076 , - 387 , - 1534 , - 1253 , - 1176 , - 1303 , - 2 , - 537 , - 1276 , - 587 , - 102 , - 1453 , - 1376 , - 1503 , - 202 , - 737 , - 1476 , - 787 , - 302 , - 21 , - 1576 , - 71 , - 402 , - 937 , - 44 , - 987 , - 502 , - 221 , - 144 , - 271 , - 602 , - 1137 , - 244 , - 1187 , - 702 , - 421 , - 344 , - 471 , - 802 , - 1337 , - 444 , - 1387 , - 902 , - 621 , - 544 , - 671 , - 1002 , - 1537 , - 644 , - 1587 , - 1102 , - 821 , - 744 , - 871 , - 1202 , - 105 , - 844 , - 155 , - 1302 , - 1021 , - 944 , - 1071 , - 1402 , - 305 , - 1044 , - 355 , - 1502 , - 1221 , - 1144 , - 1271 , - 1602 , - 505 , - 1244 , - 555 , - 70 , - 1421 , - 1344 , - 1471 , - 170 , - 705 , - 1444 , - 755 , - 270 , - 1621 , - 1544 , - 39 , - 370 , - 905 , - 12 , - 955 , - 470 , - 189 , - 112 , - 239 , - 570 , - 1105 , - 212 , - 1155 , - 670 , - 389 , - 312 , - 439 , - 770 , - 1305 , - 412 , - 1355 , - 870 , - 589 , - 512 , - 639 , - 970 , - 1505 , - 612 , - 1555 , - 1070 , - 789 , - 712 , - 839 , - 1170 , - 73 , - 812 , - 123 , - 1270 , - 989 , - 912 , - 1039 , - 1370 , - 273 , - 1012 , - 323 , - 1470 , - 1189 , - 1112 , - 1239 , - 1570 , - 473 , - 1212 , - 523 , - 38 , - 1389 , - 1312 , - 1439 , - 138 , - 673 , - 1412 , - 723 , - 238 , - 1589 , - 1512 , - 7 , - 338 , - 873 , - 1612 , - 923 , - 438 , - 157 , - 80 , - 207 , - 538 , - 1073 , - 180 , - 1123 , - 638 , - 357 , - 280 , - 407 , - 738 , - 1273 , - 380 , - 1323 , - 838 , - 557 , - 480 , - 607 , - 938 , - 1473 , - 580 , - 1523 , - 1038 , - 757 , - 680 , - 807 , - 1138 , - 41 , - 780 , - 91 , - 1238 , - 957 , - 880 , - 1007 , - 1338 , - 241 , - 980 , - 291 , - 1438 , - 1157 , - 1080 , - 1207 , - 1538 , - 441 , - 1180 , - 491 , - 6 , - 1357 , - 1280 , - 1407 , - 106 , - 641 , - 1380 , - 691 , - 206 , - 1557 , - 1480 , - 1607 , - 306 , - 841 , - 1580 , - 891 , - 406 , - 125 , - 48 , - 175 , - 506 , - 1041 , - 148 , - 1091 , - 606 , - 325 , - 248 , - 375 , - 706 , - 1241 , - 348 , - 1291 , - 806 , - 525 , - 448 , - 575 , - 906 , - 1441 , - 548 , - 1491 , - 1006 , - 725 , - 648 , - 775 , - 1106 , - 9 , - 748 , - 59 , - 1206 , - 925 , - 848 , - 975 , - 1306 , - 209 , - 948 , - 259 , - 1406 , - 1125 , - 1048 , - 1175 , - 1506 , - 409 , - 1148 , - 459 , - 1606 , - 1325 , - 1248 , - 1375 , - 74 , - 609 , - 1348 , - 659 , - 174 , - 1525 , - 1448 , - 1575 , - 274 , - 809 , - 1548 , - 859 , - 374 , - 93 , - 16 , - 143 , - 474 , - 1009 , - 116 , - 1059 , - 574 , - 293 , - 216 , - 343 , - 674 , - 1209 , - 316 , - 1259 , - 774 , - 493 , - 416 , - 543 , - 874 , - 1409 , - 516 , - 1459 , - 974 , - 693 , - 616 , - 743 , - 1074 , - 1609 , - 716 , - 27 , - 1174 , - 893 , - 816 , - 943 , - 1274 , - 177 , - 916 , - 227 , - 1374 , - 1093 , - 1016 , - 1143 , - 1474 , - 377 , - 1116 , - 427 , - 1574 , - 1293 , - 1216 , - 1343 , - 42 , - 577 , - 1316 , - 627 , - 142 , - 1493 , - 1416 , - 1543 , - 242 , - 777 , - 1516 , - 827 , - 342 , - 61 , - 1616 , - 111 , - 442 , - 977 , - 84 , - 1027 , - 542 , - 261 , - 184 , - 311 , - 642 , - 1177 , - 284 , - 1227 , - 742 , - 461 , - 384 , - 511 , - 842 , - 1377 , - 484 , - 1427 , - 942 , - 661 , - 584 , - 711 , - 1042 , - 1577 , - 684 , - 1627 , - 1142 , - 861 , - 784 , - 911 , - 1242 , - 145 , - 884 , - 195 , - 1342 , - 1061 , - 984 , - 1111 , - 1442 , - 345 , - 1084 , - 395 , - 1542 , - 1261 , - 1184 , - 1311 , - 10 , - 545 , - 1284 , - 595 , - 110 , - 1461 , - 1384 , - 1511 , - 210 , - 745 , - 1484 , - 795 , - 310 , - 29 , - 1584 , - 79 , - 410 , - 945 , - 52 , - 995 , - 510 , - 229 , - 152 , - 279 , - 610 , - 1145 , - 252 , - 1195 , - 710 , - 429 , - 352 , - 479 , - 810 , - 1345 , - 452 , - 1395 , - 910 , - 629 , - 552 , - 679 , - 1010 , - 1545 , - 652 , - 1595 , - 1110 , - 829 , - 752 , - 879 , - 1210 , - 113 , - 852 , - 163 , - 1310 , - 1029 , - 952 , - 1079 , - 1410 , - 313 , - 1052 , - 363 , - 1510 , - 1229 , - 1152 , - 1279 , - 1610 , - 513 , - 1252 , - 563 , - 78 , - 1429 , - 1352 , - 1479 , - 178 , - 713 , - 1452 , - 763 , - 278 , - 1629 , - 1552 , - 47 , - 378 , - 913 , - 20 , - 963 , - 478 , - 197 , - 120 , - 247 , - 578 , - 1113 , - 220 , - 1163 , - 678 , - 397 , - 320 , - 447 , - 778 , - 1313 , - 420 , - 1363 , - 878 , - 597 , - 520 , - 647 , - 978 , - 1513 , - 620 , - 1563 , - 1078 , - 797 , - 720 , - 847 , - 1178 , - 81 , - 820 , - 131 , - 1278 , - 997 , - 920 , - 1047 , - 1378 , - 281 , - 1020 , - 331 , - 1478 , - 1197 , - 1120 , - 1247 , - 1578 , - 481 , - 1220 , - 531 , - 46 , - 1397 , - 1320 , - 1447 , - 146 , - 681 , - 1420 , - 731 , - 246 , - 1597 , - 1520 , - 15 , - 346 , - 881 , - 1620 , - 931 , - 446 , - 165 , - 88 , - 215 , - 546 , - 1081 , - 188 , - 1131 , - 646 , - 365 , - 288 , - 415 , - 746 , - 1281 , - 388 , - 1331 , - 846 , - 565 , - 488 , - 615 , - 946 , - 1481 , - 588 , - 1531 , - 1046 , - 765 , - 688 , - 815 , - 1146 , - 49 , - 788 , - 99 , - 1246 , - 965 , - 888 , - 1015 , - 1346 , - 249 , - 988 , - 299 , - 1446 , - 1165 , - 1088 , - 1215 , - 1546 , - 449 , - 1188 , - 499 , - 14 , - 1365 , - 1288 , - 1415 , - 114 , - 649 , - 1388 , - 699 , - 214 , - 1565 , - 1488 , - 1615 , - 314 , - 849 , - 1588 , - 899 , - 414 , - 133 , - 56 , - 183 , - 514 , - 1049 , - 156 , - 1099 , - 614 , - 333 , - 256 , - 383 , - 714 , - 1249 , - 356 , - 1299 , - 814 , - 533 , - 456 , - 583 , - 914 , - 1449 , - 556 , - 1499 , - 1014 , - 733 , - 656 , - 783 , - 1114 , - 17 , - 756 , - 67 , - 1214 , - 933 , - 856 , - 983 , - 1314 , - 217 , - 956 , - 267 , - 1414 , - 1133 , - 1056 , - 1183 , - 1514 , - 417 , - 1156 , - 467 , - 1614 , - 1333 , - 1256 , - 1383 , - 82 , - 617 , - 1356 , - 667 , - 182 , - 1533 , - 1456 , - 1583 , - 282 , - 817 , - 1556 , - 867 , - 382 , - 101 , - 24 , - 151 , - 482 , - 1017 , - 124 , - 1067 , - 582 , - 301 , - 224 , - 351 , - 682 , - 1217 , - 324 , - 1267 , - 782 , - 501 , - 424 , - 551 , - 882 , - 1417 , - 524 , - 1467 , - 982 , - 701 , - 624 , - 751 , - 1082 , - 1617 , - 724 , - 35 , - 1182 , - 901 , - 824 , - 951 , - 1282 , - 185 , - 924 , - 235 , - 1382 , - 1101 , - 1024 , - 1151 , - 1482 , - 385 , - 1124 , - 435 , - 1582 , - 1301 , - 1224 , - 1351 , - 50 , - 585 , - 1324 , - 635 , - 150 , - 1501 , - 1424 , - 1551 , - 250 , - 785 , - 1524 , - 835 , - 350 , - 69 , - 1624 , - 119 , - 450 , - 985 , - 92 , - 1035 , - 550 , - 269 , - 192 , - 319 , - 650 , - 1185 , - 292 , - 1235 , - 750 , - 469 , - 392 , - 519 , - 850 , - 1385 , - 492 , - 1435 , - 950 , - 669 , - 592 , - 719 , - 1050 , - 1585 , - 692 , - 3 , - 1150 , - 869 , - 792 , - 919 , - 1250 , - 153 , - 892 , - 203 , - 1350 , - 1069 , - 992 , - 1119 , - 1450 , - 353 , - 1092 , - 403 , - 1550 , - 1269 , - 1192 , - 1319 , - 18 , - 553 , - 1292 , - 603 , - 118 , - 1469 , - 1392 , - 1519 , - 218 , - 753 , - 1492 , - 803 , - 318 , - 37 , - 1592 , - 87 , - 418 , - 953 , - 60 , - 1003 , - 518 , - 237 , - 160 , - 287 , - 618 , - 1153 , - 260 , - 1203 , - 718 , - 437 , - 360 , - 487 , - 818 , - 1353 , - 460 , - 1403 , - 918 , - 637 , - 560 , - 687 , - 1018 , - 1553 , - 660 , - 1603 , - 1118 , - 837 , - 760 , - 887 , - 1218 , - 121 , - 860 , - 171 , - 1318 , - 1037 , - 960 , - 1087 , - 1418 , - 321 , - 1060 , - 371 , - 1518 , - 1237 , - 1160 , - 1287 , - 1618 , - 521 , - 1260 , - 571 , - 86 , - 1437 , - 1360 , - 1487 , - 186 , - 721 , - 1460 , - 771 , - 286 , - 5 , - 1560 , - 55 , - 386 , - 921 , - 28 , - 971 , - 486 , - 205 , - 128 , - 255 , - 586 , - 1121 , - 228 , - 1171 , - 686 , - 405 , - 328 , - 455 , - 786 , - 1321 , - 428 , - 1371 , - 886 , - 605 , - 528 , - 655 , - 986 , - 1521 , - 628 , - 1571 , - 1086 , - 805 , - 728 , - 855 , - 1186 , - 89 , - 828 , - 139 , - 1286 , - 1005 , - 928 , - 1055 , - 1386 , - 289 , - 1028 , - 339 , - 1486 , - 1205 , - 1128 , - 1255 , - 1586 , - 489 , - 1228 , - 539 , - 54 , - 1405 , - 1328 , - 1455 , - 154 , - 689 , - 1428 , - 739 , - 254 , - 1605 , - 1528 , - 23 , - 354 , - 889 , - 1628 , - 939 , - 454 , - 173 , - 96 , - 223 , - 554 , - 1089 , - 196 , - 1139 , - 654 , - 373 , - 296 , - 423 , - 754 , - 1289 , - 396 , - 1339 , - 854 , - 573 , - 496 , - 623 , - 954 , - 1489 , - 596 , - 1539 , - 1054 , - 773 , - 696 , - 823 , - 1154 , - 57 , - 796 , - 107 , - 1254 , - 973 , - 896 , - 1023 , - 1354 , - 257 , - 996 , - 307 , - 1454 , - 1173 , - 1096 , - 1223 , - 1554 , - 457 , - 1196 , - 507 , - 22 , - 1373 , - 1296 , - 1423 , - 122 , - 657 , - 1396 , - 707 , - 222 , - 1573 , - 1496 , - 1623 , - 322 , - 857 , - 1596 , - 907 , - 422 , - 141 , - 64 , - 191 , - 522 , - 1057 , - 164 , - 1107 , - 622 , - 341 , - 264 , - 391 , - 722 , - 1257 , - 364 , - 1307 , - 822 , - 541 , - 464 , - 591 , - 922 , - 1457 , - 564 , - 1507 , - 1022 , - 741 , - 664 , - 791 , - 1122 , - 25 , - 764 , - 75 , - 1222 , - 941 , - 864 , - 991 , - 1322 , - 225 , - 964 , - 275 , - 1422 , - 1141 , - 1064 , - 1191 , - 1522 , - 425 , - 1164 , - 475 , - 1622 , - 1341 , - 1264 , - 1391 , - 90 , - 625 , - 1364 , - 675 , - 190 , - 1541 , - 1464 , - 1591 , - 290 , - 825 , - 1564 , - 875 , - 390 , - 109 , - 32 , - 159 , - 490 , - 1025 , - 132 , - 1075 , - 590 , - 309 , - 232 , - 359 , - 690 , - 1225 , - 332 , - 1275 , - 790 , - 509 , - 432 , - 559 , - 890 , - 1425 , - 532 , - 1475 , - 990 , - 709 , - 632 , - 759 , - 1090 , - 1625 , - 732 , - 43 , - 1190 , - 909 , - 832 , - 959 , - 1290 , - 193 , - 932 , - 243 , - 1390 , - 1109 , - 1032 , - 1159 , - 1490 , - 393 , - 1132 , - 443 , - 1590 , - 1309 , - 1232 , - 1359 , - 58 , - 593 , - 1332 , - 643 , - 158 , - 1509 , - 1432 , - 1559 , - 258 , - 793 , - 1532 , - 843 , - 358 , - 77 , - 0 , - 287 , - 782 , - 1485 , - 732 , - 187 , - 1514 , - 1385 , - 1464 , - 87 , - 582 , - 1285 , - 532 , - 1651 , - 1314 , - 1185 , - 1264 , - 1551 , - 382 , - 1085 , - 332 , - 1451 , - 1114 , - 985 , - 1064 , - 1351 , - 182 , - 885 , - 132 , - 1251 , - 914 , - 785 , - 864 , - 1151 , - 1646 , - 685 , - 1596 , - 1051 , - 714 , - 585 , - 664 , - 951 , - 1446 , - 485 , - 1396 , - 851 , - 514 , - 385 , - 464 , - 751 , - 1246 , - 285 , - 1196 , - 651 , - 314 , - 185 , - 264 , - 551 , - 1046 , - 85 , - 996 , - 451 , - 114 , - 1649 , - 64 , - 351 , - 846 , - 1549 , - 796 , - 251 , - 1578 , - 1449 , - 1528 , - 151 , - 646 , - 1349 , - 596 , - 51 , - 1378 , - 1249 , - 1328 , - 1615 , - 446 , - 1149 , - 396 , - 1515 , - 1178 , - 1049 , - 1128 , - 1415 , - 246 , - 949 , - 196 , - 1315 , - 978 , - 849 , - 928 , - 1215 , - 46 , - 749 , - 1660 , - 1115 , - 778 , - 649 , - 728 , - 1015 , - 1510 , - 549 , - 1460 , - 915 , - 578 , - 449 , - 528 , - 815 , - 1310 , - 349 , - 1260 , - 715 , - 378 , - 249 , - 328 , - 615 , - 1110 , - 149 , - 1060 , - 515 , - 178 , - 49 , - 128 , - 415 , - 910 , - 1613 , - 860 , - 315 , - 1642 , - 1513 , - 1592 , - 215 , - 710 , - 1413 , - 660 , - 115 , - 1442 , - 1313 , - 1392 , - 15 , - 510 , - 1213 , - 460 , - 1579 , - 1242 , - 1113 , - 1192 , - 1479 , - 310 , - 1013 , - 260 , - 1379 , - 1042 , - 913 , - 992 , - 1279 , - 110 , - 813 , - 60 , - 1179 , - 842 , - 713 , - 792 , - 1079 , - 1574 , - 613 , - 1524 , - 979 , - 642 , - 513 , - 592 , - 879 , - 1374 , - 413 , - 1324 , - 779 , - 442 , - 313 , - 392 , - 679 , - 1174 , - 213 , - 1124 , - 579 , - 242 , - 113 , - 192 , - 479 , - 974 , - 13 , - 924 , - 379 , - 42 , - 1577 , - 1656 , - 279 , - 774 , - 1477 , - 724 , - 179 , - 1506 , - 1377 , - 1456 , - 79 , - 574 , - 1277 , - 524 , - 1643 , - 1306 , - 1177 , - 1256 , - 1543 , - 374 , - 1077 , - 324 , - 1443 , - 1106 , - 977 , - 1056 , - 1343 , - 174 , - 877 , - 124 , - 1243 , - 906 , - 777 , - 856 , - 1143 , - 1638 , - 677 , - 1588 , - 1043 , - 706 , - 577 , - 656 , - 943 , - 1438 , - 477 , - 1388 , - 843 , - 506 , - 377 , - 456 , - 743 , - 1238 , - 277 , - 1188 , - 643 , - 306 , - 177 , - 256 , - 543 , - 1038 , - 77 , - 988 , - 443 , - 106 , - 1641 , - 56 , - 343 , - 838 , - 1541 , - 788 , - 243 , - 1570 , - 1441 , - 1520 , - 143 , - 638 , - 1341 , - 588 , - 43 , - 1370 , - 1241 , - 1320 , - 1607 , - 438 , - 1141 , - 388 , - 1507 , - 1170 , - 1041 , - 1120 , - 1407 , - 238 , - 941 , - 188 , - 1307 , - 970 , - 841 , - 920 , - 1207 , - 38 , - 741 , - 1652 , - 1107 , - 770 , - 641 , - 720 , - 1007 , - 1502 , - 541 , - 1452 , - 907 , - 570 , - 441 , - 520 , - 807 , - 1302 , - 341 , - 1252 , - 707 , - 370 , - 241 , - 320 , - 607 , - 1102 , - 141 , - 1052 , - 507 , - 170 , - 41 , - 120 , - 407 , - 902 , - 1605 , - 852 , - 307 , - 1634 , - 1505 , - 1584 , - 207 , - 702 , - 1405 , - 652 , - 107 , - 1434 , - 1305 , - 1384 , - 7 , - 502 , - 1205 , - 452 , - 1571 , - 1234 , - 1105 , - 1184 , - 1471 , - 302 , - 1005 , - 252 , - 1371 , - 1034 , - 905 , - 984 , - 1271 , - 102 , - 805 , - 52 , - 1171 , - 834 , - 705 , - 784 , - 1071 , - 1566 , - 605 , - 1516 , - 971 , - 634 , - 505 , - 584 , - 871 , - 1366 , - 405 , - 1316 , - 771 , - 434 , - 305 , - 384 , - 671 , - 1166 , - 205 , - 1116 , - 571 , - 234 , - 105 , - 184 , - 471 , - 966 , - 5 , - 916 , - 371 , - 34 , - 1569 , - 1648 , - 271 , - 766 , - 1469 , - 716 , - 171 , - 1498 , - 1369 , - 1448 , - 71 , - 566 , - 1269 , - 516 , - 1635 , - 1298 , - 1169 , - 1248 , - 1535 , - 366 , - 1069 , - 316 , - 1435 , - 1098 , - 969 , - 1048 , - 1335 , - 166 , - 869 , - 116 , - 1235 , - 898 , - 769 , - 848 , - 1135 , - 1630 , - 669 , - 1580 , - 1035 , - 698 , - 569 , - 648 , - 935 , - 1430 , - 469 , - 1380 , - 835 , - 498 , - 369 , - 448 , - 735 , - 1230 , - 269 , - 1180 , - 635 , - 298 , - 169 , - 248 , - 535 , - 1030 , - 69 , - 980 , - 435 , - 98 , - 1633 , - 48 , - 335 , - 830 , - 1533 , - 780 , - 235 , - 1562 , - 1433 , - 1512 , - 135 , - 630 , - 1333 , - 580 , - 35 , - 1362 , - 1233 , - 1312 , - 1599 , - 430 , - 1133 , - 380 , - 1499 , - 1162 , - 1033 , - 1112 , - 1399 , - 230 , - 933 , - 180 , - 1299 , - 962 , - 833 , - 912 , - 1199 , - 30 , - 733 , - 1644 , - 1099 , - 762 , - 633 , - 712 , - 999 , - 1494 , - 533 , - 1444 , - 899 , - 562 , - 433 , - 512 , - 799 , - 1294 , - 333 , - 1244 , - 699 , - 362 , - 233 , - 312 , - 599 , - 1094 , - 133 , - 1044 , - 499 , - 162 , - 33 , - 112 , - 399 , - 894 , - 1597 , - 844 , - 299 , - 1626 , - 1497 , - 1576 , - 199 , - 694 , - 1397 , - 644 , - 99 , - 1426 , - 1297 , - 1376 , - 1663 , - 494 , - 1197 , - 444 , - 1563 , - 1226 , - 1097 , - 1176 , - 1463 , - 294 , - 997 , - 244 , - 1363 , - 1026 , - 897 , - 976 , - 1263 , - 94 , - 797 , - 44 , - 1163 , - 826 , - 697 , - 776 , - 1063 , - 1558 , - 597 , - 1508 , - 963 , - 626 , - 497 , - 576 , - 863 , - 1358 , - 397 , - 1308 , - 763 , - 426 , - 297 , - 376 , - 663 , - 1158 , - 197 , - 1108 , - 563 , - 226 , - 97 , - 176 , - 463 , - 958 , - 1661 , - 908 , - 363 , - 26 , - 1561 , - 1640 , - 263 , - 758 , - 1461 , - 708 , - 163 , - 1490 , - 1361 , - 1440 , - 63 , - 558 , - 1261 , - 508 , - 1627 , - 1290 , - 1161 , - 1240 , - 1527 , - 358 , - 1061 , - 308 , - 1427 , - 1090 , - 961 , - 1040 , - 1327 , - 158 , - 861 , - 108 , - 1227 , - 890 , - 761 , - 840 , - 1127 , - 1622 , - 661 , - 1572 , - 1027 , - 690 , - 561 , - 640 , - 927 , - 1422 , - 461 , - 1372 , - 827 , - 490 , - 361 , - 440 , - 727 , - 1222 , - 261 , - 1172 , - 627 , - 290 , - 161 , - 240 , - 527 , - 1022 , - 61 , - 972 , - 427 , - 90 , - 1625 , - 40 , - 327 , - 822 , - 1525 , - 772 , - 227 , - 1554 , - 1425 , - 1504 , - 127 , - 622 , - 1325 , - 572 , - 27 , - 1354 , - 1225 , - 1304 , - 1591 , - 422 , - 1125 , - 372 , - 1491 , - 1154 , - 1025 , - 1104 , - 1391 , - 222 , - 925 , - 172 , - 1291 , - 954 , - 825 , - 904 , - 1191 , - 22 , - 725 , - 1636 , - 1091 , - 754 , - 625 , - 704 , - 991 , - 1486 , - 525 , - 1436 , - 891 , - 554 , - 425 , - 504 , - 791 , - 1286 , - 325 , - 1236 , - 691 , - 354 , - 225 , - 304 , - 591 , - 1086 , - 125 , - 1036 , - 491 , - 154 , - 25 , - 104 , - 391 , - 886 , - 1589 , - 836 , - 291 , - 1618 , - 1489 , - 1568 , - 191 , - 686 , - 1389 , - 636 , - 91 , - 1418 , - 1289 , - 1368 , - 1655 , - 486 , - 1189 , - 436 , - 1555 , - 1218 , - 1089 , - 1168 , - 1455 , - 286 , - 989 , - 236 , - 1355 , - 1018 , - 889 , - 968 , - 1255 , - 86 , - 789 , - 36 , - 1155 , - 818 , - 689 , - 768 , - 1055 , - 1550 , - 589 , - 1500 , - 955 , - 618 , - 489 , - 568 , - 855 , - 1350 , - 389 , - 1300 , - 755 , - 418 , - 289 , - 368 , - 655 , - 1150 , - 189 , - 1100 , - 555 , - 218 , - 89 , - 168 , - 455 , - 950 , - 1653 , - 900 , - 355 , - 18 , - 1553 , - 1632 , - 255 , - 750 , - 1453 , - 700 , - 155 , - 1482 , - 1353 , - 1432 , - 55 , - 550 , - 1253 , - 500 , - 1619 , - 1282 , - 1153 , - 1232 , - 1519 , - 350 , - 1053 , - 300 , - 1419 , - 1082 , - 953 , - 1032 , - 1319 , - 150 , - 853 , - 100 , - 1219 , - 882 , - 753 , - 832 , - 1119 , - 1614 , - 653 , - 1564 , - 1019 , - 682 , - 553 , - 632 , - 919 , - 1414 , - 453 , - 1364 , - 819 , - 482 , - 353 , - 432 , - 719 , - 1214 , - 253 , - 1164 , - 619 , - 282 , - 153 , - 232 , - 519 , - 1014 , - 53 , - 964 , - 419 , - 82 , - 1617 , - 32 , - 319 , - 814 , - 1517 , - 764 , - 219 , - 1546 , - 1417 , - 1496 , - 119 , - 614 , - 1317 , - 564 , - 19 , - 1346 , - 1217 , - 1296 , - 1583 , - 414 , - 1117 , - 364 , - 1483 , - 1146 , - 1017 , - 1096 , - 1383 , - 214 , - 917 , - 164 , - 1283 , - 946 , - 817 , - 896 , - 1183 , - 14 , - 717 , - 1628 , - 1083 , - 746 , - 617 , - 696 , - 983 , - 1478 , - 517 , - 1428 , - 883 , - 546 , - 417 , - 496 , - 783 , - 1278 , - 317 , - 1228 , - 683 , - 346 , - 217 , - 296 , - 583 , - 1078 , - 117 , - 1028 , - 483 , - 146 , - 17 , - 96 , - 383 , - 878 , - 1581 , - 828 , - 283 , - 1610 , - 1481 , - 1560 , - 183 , - 678 , - 1381 , - 628 , - 83 , - 1410 , - 1281 , - 1360 , - 1647 , - 478 , - 1181 , - 428 , - 1547 , - 1210 , - 1081 , - 1160 , - 1447 , - 278 , - 981 , - 228 , - 1347 , - 1010 , - 881 , - 960 , - 1247 , - 78 , - 781 , - 28 , - 1147 , - 810 , - 681 , - 760 , - 1047 , - 1542 , - 581 , - 1492 , - 947 , - 610 , - 481 , - 560 , - 847 , - 1342 , - 381 , - 1292 , - 747 , - 410 , - 281 , - 360 , - 647 , - 1142 , - 181 , - 1092 , - 547 , - 210 , - 81 , - 160 , - 447 , - 942 , - 1645 , - 892 , - 347 , - 10 , - 1545 , - 1624 , - 247 , - 742 , - 1445 , - 692 , - 147 , - 1474 , - 1345 , - 1424 , - 47 , - 542 , - 1245 , - 492 , - 1611 , - 1274 , - 1145 , - 1224 , - 1511 , - 342 , - 1045 , - 292 , - 1411 , - 1074 , - 945 , - 1024 , - 1311 , - 142 , - 845 , - 92 , - 1211 , - 874 , - 745 , - 824 , - 1111 , - 1606 , - 645 , - 1556 , - 1011 , - 674 , - 545 , - 624 , - 911 , - 1406 , - 445 , - 1356 , - 811 , - 474 , - 345 , - 424 , - 711 , - 1206 , - 245 , - 1156 , - 611 , - 274 , - 145 , - 224 , - 511 , - 1006 , - 45 , - 956 , - 411 , - 74 , - 1609 , - 24 , - 311 , - 806 , - 1509 , - 756 , - 211 , - 1538 , - 1409 , - 1488 , - 111 , - 606 , - 1309 , - 556 , - 11 , - 1338 , - 1209 , - 1288 , - 1575 , - 406 , - 1109 , - 356 , - 1475 , - 1138 , - 1009 , - 1088 , - 1375 , - 206 , - 909 , - 156 , - 1275 , - 938 , - 809 , - 888 , - 1175 , - 6 , - 709 , - 1620 , - 1075 , - 738 , - 609 , - 688 , - 975 , - 1470 , - 509 , - 1420 , - 875 , - 538 , - 409 , - 488 , - 775 , - 1270 , - 309 , - 1220 , - 675 , - 338 , - 209 , - 288 , - 575 , - 1070 , - 109 , - 1020 , - 475 , - 138 , - 9 , - 88 , - 375 , - 870 , - 1573 , - 820 , - 275 , - 1602 , - 1473 , - 1552 , - 175 , - 670 , - 1373 , - 620 , - 75 , - 1402 , - 1273 , - 1352 , - 1639 , - 470 , - 1173 , - 420 , - 1539 , - 1202 , - 1073 , - 1152 , - 1439 , - 270 , - 973 , - 220 , - 1339 , - 1002 , - 873 , - 952 , - 1239 , - 70 , - 773 , - 20 , - 1139 , - 802 , - 673 , - 752 , - 1039 , - 1534 , - 573 , - 1484 , - 939 , - 602 , - 473 , - 552 , - 839 , - 1334 , - 373 , - 1284 , - 739 , - 402 , - 273 , - 352 , - 639 , - 1134 , - 173 , - 1084 , - 539 , - 202 , - 73 , - 152 , - 439 , - 934 , - 1637 , - 884 , - 339 , - 2 , - 1537 , - 1616 , - 239 , - 734 , - 1437 , - 684 , - 139 , - 1466 , - 1337 , - 1416 , - 39 , - 534 , - 1237 , - 484 , - 1603 , - 1266 , - 1137 , - 1216 , - 1503 , - 334 , - 1037 , - 284 , - 1403 , - 1066 , - 937 , - 1016 , - 1303 , - 134 , - 837 , - 84 , - 1203 , - 866 , - 737 , - 816 , - 1103 , - 1598 , - 637 , - 1548 , - 1003 , - 666 , - 537 , - 616 , - 903 , - 1398 , - 437 , - 1348 , - 803 , - 466 , - 337 , - 416 , - 703 , - 1198 , - 237 , - 1148 , - 603 , - 266 , - 137 , - 216 , - 503 , - 998 , - 37 , - 948 , - 403 , - 66 , - 1601 , - 16 , - 303 , - 798 , - 1501 , - 748 , - 203 , - 1530 , - 1401 , - 1480 , - 103 , - 598 , - 1301 , - 548 , - 3 , - 1330 , - 1201 , - 1280 , - 1567 , - 398 , - 1101 , - 348 , - 1467 , - 1130 , - 1001 , - 1080 , - 1367 , - 198 , - 901 , - 148 , - 1267 , - 930 , - 801 , - 880 , - 1167 , - 1662 , - 701 , - 1612 , - 1067 , - 730 , - 601 , - 680 , - 967 , - 1462 , - 501 , - 1412 , - 867 , - 530 , - 401 , - 480 , - 767 , - 1262 , - 301 , - 1212 , - 667 , - 330 , - 201 , - 280 , - 567 , - 1062 , - 101 , - 1012 , - 467 , - 130 , - 1 , - 80 , - 367 , - 862 , - 1565 , - 812 , - 267 , - 1594 , - 1465 , - 1544 , - 167 , - 662 , - 1365 , - 612 , - 67 , - 1394 , - 1265 , - 1344 , - 1631 , - 462 , - 1165 , - 412 , - 1531 , - 1194 , - 1065 , - 1144 , - 1431 , - 262 , - 965 , - 212 , - 1331 , - 994 , - 865 , - 944 , - 1231 , - 62 , - 765 , - 12 , - 1131 , - 794 , - 665 , - 744 , - 1031 , - 1526 , - 565 , - 1476 , - 931 , - 594 , - 465 , - 544 , - 831 , - 1326 , - 365 , - 1276 , - 731 , - 394 , - 265 , - 344 , - 631 , - 1126 , - 165 , - 1076 , - 531 , - 194 , - 65 , - 144 , - 431 , - 926 , - 1629 , - 876 , - 331 , - 1658 , - 1529 , - 1608 , - 231 , - 726 , - 1429 , - 676 , - 131 , - 1458 , - 1329 , - 1408 , - 31 , - 526 , - 1229 , - 476 , - 1595 , - 1258 , - 1129 , - 1208 , - 1495 , - 326 , - 1029 , - 276 , - 1395 , - 1058 , - 929 , - 1008 , - 1295 , - 126 , - 829 , - 76 , - 1195 , - 858 , - 729 , - 808 , - 1095 , - 1590 , - 629 , - 1540 , - 995 , - 658 , - 529 , - 608 , - 895 , - 1390 , - 429 , - 1340 , - 795 , - 458 , - 329 , - 408 , - 695 , - 1190 , - 229 , - 1140 , - 595 , - 258 , - 129 , - 208 , - 495 , - 990 , - 29 , - 940 , - 395 , - 58 , - 1593 , - 8 , - 295 , - 790 , - 1493 , - 740 , - 195 , - 1522 , - 1393 , - 1472 , - 95 , - 590 , - 1293 , - 540 , - 1659 , - 1322 , - 1193 , - 1272 , - 1559 , - 390 , - 1093 , - 340 , - 1459 , - 1122 , - 993 , - 1072 , - 1359 , - 190 , - 893 , - 140 , - 1259 , - 922 , - 793 , - 872 , - 1159 , - 1654 , - 693 , - 1604 , - 1059 , - 722 , - 593 , - 672 , - 959 , - 1454 , - 493 , - 1404 , - 859 , - 522 , - 393 , - 472 , - 759 , - 1254 , - 293 , - 1204 , - 659 , - 322 , - 193 , - 272 , - 559 , - 1054 , - 93 , - 1004 , - 459 , - 122 , - 1657 , - 72 , - 359 , - 854 , - 1557 , - 804 , - 259 , - 1586 , - 1457 , - 1536 , - 159 , - 654 , - 1357 , - 604 , - 59 , - 1386 , - 1257 , - 1336 , - 1623 , - 454 , - 1157 , - 404 , - 1523 , - 1186 , - 1057 , - 1136 , - 1423 , - 254 , - 957 , - 204 , - 1323 , - 986 , - 857 , - 936 , - 1223 , - 54 , - 757 , - 4 , - 1123 , - 786 , - 657 , - 736 , - 1023 , - 1518 , - 557 , - 1468 , - 923 , - 586 , - 457 , - 536 , - 823 , - 1318 , - 357 , - 1268 , - 723 , - 386 , - 257 , - 336 , - 623 , - 1118 , - 157 , - 1068 , - 523 , - 186 , - 57 , - 136 , - 423 , - 918 , - 1621 , - 868 , - 323 , - 1650 , - 1521 , - 1600 , - 223 , - 718 , - 1421 , - 668 , - 123 , - 1450 , - 1321 , - 1400 , - 23 , - 518 , - 1221 , - 468 , - 1587 , - 1250 , - 1121 , - 1200 , - 1487 , - 318 , - 1021 , - 268 , - 1387 , - 1050 , - 921 , - 1000 , - 1287 , - 118 , - 821 , - 68 , - 1187 , - 850 , - 721 , - 800 , - 1087 , - 1582 , - 621 , - 1532 , - 987 , - 650 , - 521 , - 600 , - 887 , - 1382 , - 421 , - 1332 , - 787 , - 450 , - 321 , - 400 , - 687 , - 1182 , - 221 , - 1132 , - 587 , - 250 , - 121 , - 200 , - 487 , - 982 , - 21 , - 932 , - 387 , - 50 , - 1585 , - 0 , - 1009 , - 534 , - 271 , - 220 , - 381 , - 754 , - 1339 , - 440 , - 1449 , - 974 , - 711 , - 660 , - 821 , - 1194 , - 83 , - 880 , - 193 , - 1414 , - 1151 , - 1100 , - 1261 , - 1634 , - 523 , - 1320 , - 633 , - 158 , - 1591 , - 1540 , - 5 , - 378 , - 963 , - 64 , - 1073 , - 598 , - 335 , - 284 , - 445 , - 818 , - 1403 , - 504 , - 1513 , - 1038 , - 775 , - 724 , - 885 , - 1258 , - 147 , - 944 , - 257 , - 1478 , - 1215 , - 1164 , - 1325 , - 2 , - 587 , - 1384 , - 697 , - 222 , - 1655 , - 1604 , - 69 , - 442 , - 1027 , - 128 , - 1137 , - 662 , - 399 , - 348 , - 509 , - 882 , - 1467 , - 568 , - 1577 , - 1102 , - 839 , - 788 , - 949 , - 1322 , - 211 , - 1008 , - 321 , - 1542 , - 1279 , - 1228 , - 1389 , - 66 , - 651 , - 1448 , - 761 , - 286 , - 23 , - 1668 , - 133 , - 506 , - 1091 , - 192 , - 1201 , - 726 , - 463 , - 412 , - 573 , - 946 , - 1531 , - 632 , - 1641 , - 1166 , - 903 , - 852 , - 1013 , - 1386 , - 275 , - 1072 , - 385 , - 1606 , - 1343 , - 1292 , - 1453 , - 130 , - 715 , - 1512 , - 825 , - 350 , - 87 , - 36 , - 197 , - 570 , - 1155 , - 256 , - 1265 , - 790 , - 527 , - 476 , - 637 , - 1010 , - 1595 , - 696 , - 9 , - 1230 , - 967 , - 916 , - 1077 , - 1450 , - 339 , - 1136 , - 449 , - 1670 , - 1407 , - 1356 , - 1517 , - 194 , - 779 , - 1576 , - 889 , - 414 , - 151 , - 100 , - 261 , - 634 , - 1219 , - 320 , - 1329 , - 854 , - 591 , - 540 , - 701 , - 1074 , - 1659 , - 760 , - 73 , - 1294 , - 1031 , - 980 , - 1141 , - 1514 , - 403 , - 1200 , - 513 , - 38 , - 1471 , - 1420 , - 1581 , - 258 , - 843 , - 1640 , - 953 , - 478 , - 215 , - 164 , - 325 , - 698 , - 1283 , - 384 , - 1393 , - 918 , - 655 , - 604 , - 765 , - 1138 , - 27 , - 824 , - 137 , - 1358 , - 1095 , - 1044 , - 1205 , - 1578 , - 467 , - 1264 , - 577 , - 102 , - 1535 , - 1484 , - 1645 , - 322 , - 907 , - 8 , - 1017 , - 542 , - 279 , - 228 , - 389 , - 762 , - 1347 , - 448 , - 1457 , - 982 , - 719 , - 668 , - 829 , - 1202 , - 91 , - 888 , - 201 , - 1422 , - 1159 , - 1108 , - 1269 , - 1642 , - 531 , - 1328 , - 641 , - 166 , - 1599 , - 1548 , - 13 , - 386 , - 971 , - 72 , - 1081 , - 606 , - 343 , - 292 , - 453 , - 826 , - 1411 , - 512 , - 1521 , - 1046 , - 783 , - 732 , - 893 , - 1266 , - 155 , - 952 , - 265 , - 1486 , - 1223 , - 1172 , - 1333 , - 10 , - 595 , - 1392 , - 705 , - 230 , - 1663 , - 1612 , - 77 , - 450 , - 1035 , - 136 , - 1145 , - 670 , - 407 , - 356 , - 517 , - 890 , - 1475 , - 576 , - 1585 , - 1110 , - 847 , - 796 , - 957 , - 1330 , - 219 , - 1016 , - 329 , - 1550 , - 1287 , - 1236 , - 1397 , - 74 , - 659 , - 1456 , - 769 , - 294 , - 31 , - 1676 , - 141 , - 514 , - 1099 , - 200 , - 1209 , - 734 , - 471 , - 420 , - 581 , - 954 , - 1539 , - 640 , - 1649 , - 1174 , - 911 , - 860 , - 1021 , - 1394 , - 283 , - 1080 , - 393 , - 1614 , - 1351 , - 1300 , - 1461 , - 138 , - 723 , - 1520 , - 833 , - 358 , - 95 , - 44 , - 205 , - 578 , - 1163 , - 264 , - 1273 , - 798 , - 535 , - 484 , - 645 , - 1018 , - 1603 , - 704 , - 17 , - 1238 , - 975 , - 924 , - 1085 , - 1458 , - 347 , - 1144 , - 457 , - 1678 , - 1415 , - 1364 , - 1525 , - 202 , - 787 , - 1584 , - 897 , - 422 , - 159 , - 108 , - 269 , - 642 , - 1227 , - 328 , - 1337 , - 862 , - 599 , - 548 , - 709 , - 1082 , - 1667 , - 768 , - 81 , - 1302 , - 1039 , - 988 , - 1149 , - 1522 , - 411 , - 1208 , - 521 , - 46 , - 1479 , - 1428 , - 1589 , - 266 , - 851 , - 1648 , - 961 , - 486 , - 223 , - 172 , - 333 , - 706 , - 1291 , - 392 , - 1401 , - 926 , - 663 , - 612 , - 773 , - 1146 , - 35 , - 832 , - 145 , - 1366 , - 1103 , - 1052 , - 1213 , - 1586 , - 475 , - 1272 , - 585 , - 110 , - 1543 , - 1492 , - 1653 , - 330 , - 915 , - 16 , - 1025 , - 550 , - 287 , - 236 , - 397 , - 770 , - 1355 , - 456 , - 1465 , - 990 , - 727 , - 676 , - 837 , - 1210 , - 99 , - 896 , - 209 , - 1430 , - 1167 , - 1116 , - 1277 , - 1650 , - 539 , - 1336 , - 649 , - 174 , - 1607 , - 1556 , - 21 , - 394 , - 979 , - 80 , - 1089 , - 614 , - 351 , - 300 , - 461 , - 834 , - 1419 , - 520 , - 1529 , - 1054 , - 791 , - 740 , - 901 , - 1274 , - 163 , - 960 , - 273 , - 1494 , - 1231 , - 1180 , - 1341 , - 18 , - 603 , - 1400 , - 713 , - 238 , - 1671 , - 1620 , - 85 , - 458 , - 1043 , - 144 , - 1153 , - 678 , - 415 , - 364 , - 525 , - 898 , - 1483 , - 584 , - 1593 , - 1118 , - 855 , - 804 , - 965 , - 1338 , - 227 , - 1024 , - 337 , - 1558 , - 1295 , - 1244 , - 1405 , - 82 , - 667 , - 1464 , - 777 , - 302 , - 39 , - 1684 , - 149 , - 522 , - 1107 , - 208 , - 1217 , - 742 , - 479 , - 428 , - 589 , - 962 , - 1547 , - 648 , - 1657 , - 1182 , - 919 , - 868 , - 1029 , - 1402 , - 291 , - 1088 , - 401 , - 1622 , - 1359 , - 1308 , - 1469 , - 146 , - 731 , - 1528 , - 841 , - 366 , - 103 , - 52 , - 213 , - 586 , - 1171 , - 272 , - 1281 , - 806 , - 543 , - 492 , - 653 , - 1026 , - 1611 , - 712 , - 25 , - 1246 , - 983 , - 932 , - 1093 , - 1466 , - 355 , - 1152 , - 465 , - 1686 , - 1423 , - 1372 , - 1533 , - 210 , - 795 , - 1592 , - 905 , - 430 , - 167 , - 116 , - 277 , - 650 , - 1235 , - 336 , - 1345 , - 870 , - 607 , - 556 , - 717 , - 1090 , - 1675 , - 776 , - 89 , - 1310 , - 1047 , - 996 , - 1157 , - 1530 , - 419 , - 1216 , - 529 , - 54 , - 1487 , - 1436 , - 1597 , - 274 , - 859 , - 1656 , - 969 , - 494 , - 231 , - 180 , - 341 , - 714 , - 1299 , - 400 , - 1409 , - 934 , - 671 , - 620 , - 781 , - 1154 , - 43 , - 840 , - 153 , - 1374 , - 1111 , - 1060 , - 1221 , - 1594 , - 483 , - 1280 , - 593 , - 118 , - 1551 , - 1500 , - 1661 , - 338 , - 923 , - 24 , - 1033 , - 558 , - 295 , - 244 , - 405 , - 778 , - 1363 , - 464 , - 1473 , - 998 , - 735 , - 684 , - 845 , - 1218 , - 107 , - 904 , - 217 , - 1438 , - 1175 , - 1124 , - 1285 , - 1658 , - 547 , - 1344 , - 657 , - 182 , - 1615 , - 1564 , - 29 , - 402 , - 987 , - 88 , - 1097 , - 622 , - 359 , - 308 , - 469 , - 842 , - 1427 , - 528 , - 1537 , - 1062 , - 799 , - 748 , - 909 , - 1282 , - 171 , - 968 , - 281 , - 1502 , - 1239 , - 1188 , - 1349 , - 26 , - 611 , - 1408 , - 721 , - 246 , - 1679 , - 1628 , - 93 , - 466 , - 1051 , - 152 , - 1161 , - 686 , - 423 , - 372 , - 533 , - 906 , - 1491 , - 592 , - 1601 , - 1126 , - 863 , - 812 , - 973 , - 1346 , - 235 , - 1032 , - 345 , - 1566 , - 1303 , - 1252 , - 1413 , - 90 , - 675 , - 1472 , - 785 , - 310 , - 47 , - 1692 , - 157 , - 530 , - 1115 , - 216 , - 1225 , - 750 , - 487 , - 436 , - 597 , - 970 , - 1555 , - 656 , - 1665 , - 1190 , - 927 , - 876 , - 1037 , - 1410 , - 299 , - 1096 , - 409 , - 1630 , - 1367 , - 1316 , - 1477 , - 154 , - 739 , - 1536 , - 849 , - 374 , - 111 , - 60 , - 221 , - 594 , - 1179 , - 280 , - 1289 , - 814 , - 551 , - 500 , - 661 , - 1034 , - 1619 , - 720 , - 33 , - 1254 , - 991 , - 940 , - 1101 , - 1474 , - 363 , - 1160 , - 473 , - 1694 , - 1431 , - 1380 , - 1541 , - 218 , - 803 , - 1600 , - 913 , - 438 , - 175 , - 124 , - 285 , - 658 , - 1243 , - 344 , - 1353 , - 878 , - 615 , - 564 , - 725 , - 1098 , - 1683 , - 784 , - 97 , - 1318 , - 1055 , - 1004 , - 1165 , - 1538 , - 427 , - 1224 , - 537 , - 62 , - 1495 , - 1444 , - 1605 , - 282 , - 867 , - 1664 , - 977 , - 502 , - 239 , - 188 , - 349 , - 722 , - 1307 , - 408 , - 1417 , - 942 , - 679 , - 628 , - 789 , - 1162 , - 51 , - 848 , - 161 , - 1382 , - 1119 , - 1068 , - 1229 , - 1602 , - 491 , - 1288 , - 601 , - 126 , - 1559 , - 1508 , - 1669 , - 346 , - 931 , - 32 , - 1041 , - 566 , - 303 , - 252 , - 413 , - 786 , - 1371 , - 472 , - 1481 , - 1006 , - 743 , - 692 , - 853 , - 1226 , - 115 , - 912 , - 225 , - 1446 , - 1183 , - 1132 , - 1293 , - 1666 , - 555 , - 1352 , - 665 , - 190 , - 1623 , - 1572 , - 37 , - 410 , - 995 , - 96 , - 1105 , - 630 , - 367 , - 316 , - 477 , - 850 , - 1435 , - 536 , - 1545 , - 1070 , - 807 , - 756 , - 917 , - 1290 , - 179 , - 976 , - 289 , - 1510 , - 1247 , - 1196 , - 1357 , - 34 , - 619 , - 1416 , - 729 , - 254 , - 1687 , - 1636 , - 101 , - 474 , - 1059 , - 160 , - 1169 , - 694 , - 431 , - 380 , - 541 , - 914 , - 1499 , - 600 , - 1609 , - 1134 , - 871 , - 820 , - 981 , - 1354 , - 243 , - 1040 , - 353 , - 1574 , - 1311 , - 1260 , - 1421 , - 98 , - 683 , - 1480 , - 793 , - 318 , - 55 , - 4 , - 165 , - 538 , - 1123 , - 224 , - 1233 , - 758 , - 495 , - 444 , - 605 , - 978 , - 1563 , - 664 , - 1673 , - 1198 , - 935 , - 884 , - 1045 , - 1418 , - 307 , - 1104 , - 417 , - 1638 , - 1375 , - 1324 , - 1485 , - 162 , - 747 , - 1544 , - 857 , - 382 , - 119 , - 68 , - 229 , - 602 , - 1187 , - 288 , - 1297 , - 822 , - 559 , - 508 , - 669 , - 1042 , - 1627 , - 728 , - 41 , - 1262 , - 999 , - 948 , - 1109 , - 1482 , - 371 , - 1168 , - 481 , - 6 , - 1439 , - 1388 , - 1549 , - 226 , - 811 , - 1608 , - 921 , - 446 , - 183 , - 132 , - 293 , - 666 , - 1251 , - 352 , - 1361 , - 886 , - 623 , - 572 , - 733 , - 1106 , - 1691 , - 792 , - 105 , - 1326 , - 1063 , - 1012 , - 1173 , - 1546 , - 435 , - 1232 , - 545 , - 70 , - 1503 , - 1452 , - 1613 , - 290 , - 875 , - 1672 , - 985 , - 510 , - 247 , - 196 , - 357 , - 730 , - 1315 , - 416 , - 1425 , - 950 , - 687 , - 636 , - 797 , - 1170 , - 59 , - 856 , - 169 , - 1390 , - 1127 , - 1076 , - 1237 , - 1610 , - 499 , - 1296 , - 609 , - 134 , - 1567 , - 1516 , - 1677 , - 354 , - 939 , - 40 , - 1049 , - 574 , - 311 , - 260 , - 421 , - 794 , - 1379 , - 480 , - 1489 , - 1014 , - 751 , - 700 , - 861 , - 1234 , - 123 , - 920 , - 233 , - 1454 , - 1191 , - 1140 , - 1301 , - 1674 , - 563 , - 1360 , - 673 , - 198 , - 1631 , - 1580 , - 45 , - 418 , - 1003 , - 104 , - 1113 , - 638 , - 375 , - 324 , - 485 , - 858 , - 1443 , - 544 , - 1553 , - 1078 , - 815 , - 764 , - 925 , - 1298 , - 187 , - 984 , - 297 , - 1518 , - 1255 , - 1204 , - 1365 , - 42 , - 627 , - 1424 , - 737 , - 262 , - 1695 , - 1644 , - 109 , - 482 , - 1067 , - 168 , - 1177 , - 702 , - 439 , - 388 , - 549 , - 922 , - 1507 , - 608 , - 1617 , - 1142 , - 879 , - 828 , - 989 , - 1362 , - 251 , - 1048 , - 361 , - 1582 , - 1319 , - 1268 , - 1429 , - 106 , - 691 , - 1488 , - 801 , - 326 , - 63 , - 12 , - 173 , - 546 , - 1131 , - 232 , - 1241 , - 766 , - 503 , - 452 , - 613 , - 986 , - 1571 , - 672 , - 1681 , - 1206 , - 943 , - 892 , - 1053 , - 1426 , - 315 , - 1112 , - 425 , - 1646 , - 1383 , - 1332 , - 1493 , - 170 , - 755 , - 1552 , - 865 , - 390 , - 127 , - 76 , - 237 , - 610 , - 1195 , - 296 , - 1305 , - 830 , - 567 , - 516 , - 677 , - 1050 , - 1635 , - 736 , - 49 , - 1270 , - 1007 , - 956 , - 1117 , - 1490 , - 379 , - 1176 , - 489 , - 14 , - 1447 , - 1396 , - 1557 , - 234 , - 819 , - 1616 , - 929 , - 454 , - 191 , - 140 , - 301 , - 674 , - 1259 , - 360 , - 1369 , - 894 , - 631 , - 580 , - 741 , - 1114 , - 3 , - 800 , - 113 , - 1334 , - 1071 , - 1020 , - 1181 , - 1554 , - 443 , - 1240 , - 553 , - 78 , - 1511 , - 1460 , - 1621 , - 298 , - 883 , - 1680 , - 993 , - 518 , - 255 , - 204 , - 365 , - 738 , - 1323 , - 424 , - 1433 , - 958 , - 695 , - 644 , - 805 , - 1178 , - 67 , - 864 , - 177 , - 1398 , - 1135 , - 1084 , - 1245 , - 1618 , - 507 , - 1304 , - 617 , - 142 , - 1575 , - 1524 , - 1685 , - 362 , - 947 , - 48 , - 1057 , - 582 , - 319 , - 268 , - 429 , - 802 , - 1387 , - 488 , - 1497 , - 1022 , - 759 , - 708 , - 869 , - 1242 , - 131 , - 928 , - 241 , - 1462 , - 1199 , - 1148 , - 1309 , - 1682 , - 571 , - 1368 , - 681 , - 206 , - 1639 , - 1588 , - 53 , - 426 , - 1011 , - 112 , - 1121 , - 646 , - 383 , - 332 , - 493 , - 866 , - 1451 , - 552 , - 1561 , - 1086 , - 823 , - 772 , - 933 , - 1306 , - 195 , - 992 , - 305 , - 1526 , - 1263 , - 1212 , - 1373 , - 50 , - 635 , - 1432 , - 745 , - 270 , - 7 , - 1652 , - 117 , - 490 , - 1075 , - 176 , - 1185 , - 710 , - 447 , - 396 , - 557 , - 930 , - 1515 , - 616 , - 1625 , - 1150 , - 887 , - 836 , - 997 , - 1370 , - 259 , - 1056 , - 369 , - 1590 , - 1327 , - 1276 , - 1437 , - 114 , - 699 , - 1496 , - 809 , - 334 , - 71 , - 20 , - 181 , - 554 , - 1139 , - 240 , - 1249 , - 774 , - 511 , - 460 , - 621 , - 994 , - 1579 , - 680 , - 1689 , - 1214 , - 951 , - 900 , - 1061 , - 1434 , - 323 , - 1120 , - 433 , - 1654 , - 1391 , - 1340 , - 1501 , - 178 , - 763 , - 1560 , - 873 , - 398 , - 135 , - 84 , - 245 , - 618 , - 1203 , - 304 , - 1313 , - 838 , - 575 , - 524 , - 685 , - 1058 , - 1643 , - 744 , - 57 , - 1278 , - 1015 , - 964 , - 1125 , - 1498 , - 387 , - 1184 , - 497 , - 22 , - 1455 , - 1404 , - 1565 , - 242 , - 827 , - 1624 , - 937 , - 462 , - 199 , - 148 , - 309 , - 682 , - 1267 , - 368 , - 1377 , - 902 , - 639 , - 588 , - 749 , - 1122 , - 11 , - 808 , - 121 , - 1342 , - 1079 , - 1028 , - 1189 , - 1562 , - 451 , - 1248 , - 561 , - 86 , - 1519 , - 1468 , - 1629 , - 306 , - 891 , - 1688 , - 1001 , - 526 , - 263 , - 212 , - 373 , - 746 , - 1331 , - 432 , - 1441 , - 966 , - 703 , - 652 , - 813 , - 1186 , - 75 , - 872 , - 185 , - 1406 , - 1143 , - 1092 , - 1253 , - 1626 , - 515 , - 1312 , - 625 , - 150 , - 1583 , - 1532 , - 1693 , - 370 , - 955 , - 56 , - 1065 , - 590 , - 327 , - 276 , - 437 , - 810 , - 1395 , - 496 , - 1505 , - 1030 , - 767 , - 716 , - 877 , - 1250 , - 139 , - 936 , - 249 , - 1470 , - 1207 , - 1156 , - 1317 , - 1690 , - 579 , - 1376 , - 689 , - 214 , - 1647 , - 1596 , - 61 , - 434 , - 1019 , - 120 , - 1129 , - 654 , - 391 , - 340 , - 501 , - 874 , - 1459 , - 560 , - 1569 , - 1094 , - 831 , - 780 , - 941 , - 1314 , - 203 , - 1000 , - 313 , - 1534 , - 1271 , - 1220 , - 1381 , - 58 , - 643 , - 1440 , - 753 , - 278 , - 15 , - 1660 , - 125 , - 498 , - 1083 , - 184 , - 1193 , - 718 , - 455 , - 404 , - 565 , - 938 , - 1523 , - 624 , - 1633 , - 1158 , - 895 , - 844 , - 1005 , - 1378 , - 267 , - 1064 , - 377 , - 1598 , - 1335 , - 1284 , - 1445 , - 122 , - 707 , - 1504 , - 817 , - 342 , - 79 , - 28 , - 189 , - 562 , - 1147 , - 248 , - 1257 , - 782 , - 519 , - 468 , - 629 , - 1002 , - 1587 , - 688 , - 1 , - 1222 , - 959 , - 908 , - 1069 , - 1442 , - 331 , - 1128 , - 441 , - 1662 , - 1399 , - 1348 , - 1509 , - 186 , - 771 , - 1568 , - 881 , - 406 , - 143 , - 92 , - 253 , - 626 , - 1211 , - 312 , - 1321 , - 846 , - 583 , - 532 , - 693 , - 1066 , - 1651 , - 752 , - 65 , - 1286 , - 1023 , - 972 , - 1133 , - 1506 , - 395 , - 1192 , - 505 , - 30 , - 1463 , - 1412 , - 1573 , - 250 , - 835 , - 1632 , - 945 , - 470 , - 207 , - 156 , - 317 , - 690 , - 1275 , - 376 , - 1385 , - 910 , - 647 , - 596 , - 757 , - 1130 , - 19 , - 816 , - 129 , - 1350 , - 1087 , - 1036 , - 1197 , - 1570 , - 459 , - 1256 , - 569 , - 94 , - 1527 , - 1476 , - 1637 , - 314 , - 899 , - 0 , - 223 , - 638 , - 1245 , - 316 , - 1307 , - 762 , - 409 , - 248 , - 279 , - 502 , - 917 , - 1524 , - 595 , - 1586 , - 1041 , - 688 , - 527 , - 558 , - 781 , - 1196 , - 75 , - 874 , - 137 , - 1320 , - 967 , - 806 , - 837 , - 1060 , - 1475 , - 354 , - 1153 , - 416 , - 1599 , - 1246 , - 1085 , - 1116 , - 1339 , - 26 , - 633 , - 1432 , - 695 , - 150 , - 1525 , - 1364 , - 1395 , - 1618 , - 305 , - 912 , - 1711 , - 974 , - 429 , - 76 , - 1643 , - 1674 , - 169 , - 584 , - 1191 , - 262 , - 1253 , - 708 , - 355 , - 194 , - 225 , - 448 , - 863 , - 1470 , - 541 , - 1532 , - 987 , - 634 , - 473 , - 504 , - 727 , - 1142 , - 21 , - 820 , - 83 , - 1266 , - 913 , - 752 , - 783 , - 1006 , - 1421 , - 300 , - 1099 , - 362 , - 1545 , - 1192 , - 1031 , - 1062 , - 1285 , - 1700 , - 579 , - 1378 , - 641 , - 96 , - 1471 , - 1310 , - 1341 , - 1564 , - 251 , - 858 , - 1657 , - 920 , - 375 , - 22 , - 1589 , - 1620 , - 115 , - 530 , - 1137 , - 208 , - 1199 , - 654 , - 301 , - 140 , - 171 , - 394 , - 809 , - 1416 , - 487 , - 1478 , - 933 , - 580 , - 419 , - 450 , - 673 , - 1088 , - 1695 , - 766 , - 29 , - 1212 , - 859 , - 698 , - 729 , - 952 , - 1367 , - 246 , - 1045 , - 308 , - 1491 , - 1138 , - 977 , - 1008 , - 1231 , - 1646 , - 525 , - 1324 , - 587 , - 42 , - 1417 , - 1256 , - 1287 , - 1510 , - 197 , - 804 , - 1603 , - 866 , - 321 , - 1696 , - 1535 , - 1566 , - 61 , - 476 , - 1083 , - 154 , - 1145 , - 600 , - 247 , - 86 , - 117 , - 340 , - 755 , - 1362 , - 433 , - 1424 , - 879 , - 526 , - 365 , - 396 , - 619 , - 1034 , - 1641 , - 712 , - 1703 , - 1158 , - 805 , - 644 , - 675 , - 898 , - 1313 , - 192 , - 991 , - 254 , - 1437 , - 1084 , - 923 , - 954 , - 1177 , - 1592 , - 471 , - 1270 , - 533 , - 1716 , - 1363 , - 1202 , - 1233 , - 1456 , - 143 , - 750 , - 1549 , - 812 , - 267 , - 1642 , - 1481 , - 1512 , - 7 , - 422 , - 1029 , - 100 , - 1091 , - 546 , - 193 , - 32 , - 63 , - 286 , - 701 , - 1308 , - 379 , - 1370 , - 825 , - 472 , - 311 , - 342 , - 565 , - 980 , - 1587 , - 658 , - 1649 , - 1104 , - 751 , - 590 , - 621 , - 844 , - 1259 , - 138 , - 937 , - 200 , - 1383 , - 1030 , - 869 , - 900 , - 1123 , - 1538 , - 417 , - 1216 , - 479 , - 1662 , - 1309 , - 1148 , - 1179 , - 1402 , - 89 , - 696 , - 1495 , - 758 , - 213 , - 1588 , - 1427 , - 1458 , - 1681 , - 368 , - 975 , - 46 , - 1037 , - 492 , - 139 , - 1706 , - 9 , - 232 , - 647 , - 1254 , - 325 , - 1316 , - 771 , - 418 , - 257 , - 288 , - 511 , - 926 , - 1533 , - 604 , - 1595 , - 1050 , - 697 , - 536 , - 567 , - 790 , - 1205 , - 84 , - 883 , - 146 , - 1329 , - 976 , - 815 , - 846 , - 1069 , - 1484 , - 363 , - 1162 , - 425 , - 1608 , - 1255 , - 1094 , - 1125 , - 1348 , - 35 , - 642 , - 1441 , - 704 , - 159 , - 1534 , - 1373 , - 1404 , - 1627 , - 314 , - 921 , - 1720 , - 983 , - 438 , - 85 , - 1652 , - 1683 , - 178 , - 593 , - 1200 , - 271 , - 1262 , - 717 , - 364 , - 203 , - 234 , - 457 , - 872 , - 1479 , - 550 , - 1541 , - 996 , - 643 , - 482 , - 513 , - 736 , - 1151 , - 30 , - 829 , - 92 , - 1275 , - 922 , - 761 , - 792 , - 1015 , - 1430 , - 309 , - 1108 , - 371 , - 1554 , - 1201 , - 1040 , - 1071 , - 1294 , - 1709 , - 588 , - 1387 , - 650 , - 105 , - 1480 , - 1319 , - 1350 , - 1573 , - 260 , - 867 , - 1666 , - 929 , - 384 , - 31 , - 1598 , - 1629 , - 124 , - 539 , - 1146 , - 217 , - 1208 , - 663 , - 310 , - 149 , - 180 , - 403 , - 818 , - 1425 , - 496 , - 1487 , - 942 , - 589 , - 428 , - 459 , - 682 , - 1097 , - 1704 , - 775 , - 38 , - 1221 , - 868 , - 707 , - 738 , - 961 , - 1376 , - 255 , - 1054 , - 317 , - 1500 , - 1147 , - 986 , - 1017 , - 1240 , - 1655 , - 534 , - 1333 , - 596 , - 51 , - 1426 , - 1265 , - 1296 , - 1519 , - 206 , - 813 , - 1612 , - 875 , - 330 , - 1705 , - 1544 , - 1575 , - 70 , - 485 , - 1092 , - 163 , - 1154 , - 609 , - 256 , - 95 , - 126 , - 349 , - 764 , - 1371 , - 442 , - 1433 , - 888 , - 535 , - 374 , - 405 , - 628 , - 1043 , - 1650 , - 721 , - 1712 , - 1167 , - 814 , - 653 , - 684 , - 907 , - 1322 , - 201 , - 1000 , - 263 , - 1446 , - 1093 , - 932 , - 963 , - 1186 , - 1601 , - 480 , - 1279 , - 542 , - 1725 , - 1372 , - 1211 , - 1242 , - 1465 , - 152 , - 759 , - 1558 , - 821 , - 276 , - 1651 , - 1490 , - 1521 , - 16 , - 431 , - 1038 , - 109 , - 1100 , - 555 , - 202 , - 41 , - 72 , - 295 , - 710 , - 1317 , - 388 , - 1379 , - 834 , - 481 , - 320 , - 351 , - 574 , - 989 , - 1596 , - 667 , - 1658 , - 1113 , - 760 , - 599 , - 630 , - 853 , - 1268 , - 147 , - 946 , - 209 , - 1392 , - 1039 , - 878 , - 909 , - 1132 , - 1547 , - 426 , - 1225 , - 488 , - 1671 , - 1318 , - 1157 , - 1188 , - 1411 , - 98 , - 705 , - 1504 , - 767 , - 222 , - 1597 , - 1436 , - 1467 , - 1690 , - 377 , - 984 , - 55 , - 1046 , - 501 , - 148 , - 1715 , - 18 , - 241 , - 656 , - 1263 , - 334 , - 1325 , - 780 , - 427 , - 266 , - 297 , - 520 , - 935 , - 1542 , - 613 , - 1604 , - 1059 , - 706 , - 545 , - 576 , - 799 , - 1214 , - 93 , - 892 , - 155 , - 1338 , - 985 , - 824 , - 855 , - 1078 , - 1493 , - 372 , - 1171 , - 434 , - 1617 , - 1264 , - 1103 , - 1134 , - 1357 , - 44 , - 651 , - 1450 , - 713 , - 168 , - 1543 , - 1382 , - 1413 , - 1636 , - 323 , - 930 , - 1 , - 992 , - 447 , - 94 , - 1661 , - 1692 , - 187 , - 602 , - 1209 , - 280 , - 1271 , - 726 , - 373 , - 212 , - 243 , - 466 , - 881 , - 1488 , - 559 , - 1550 , - 1005 , - 652 , - 491 , - 522 , - 745 , - 1160 , - 39 , - 838 , - 101 , - 1284 , - 931 , - 770 , - 801 , - 1024 , - 1439 , - 318 , - 1117 , - 380 , - 1563 , - 1210 , - 1049 , - 1080 , - 1303 , - 1718 , - 597 , - 1396 , - 659 , - 114 , - 1489 , - 1328 , - 1359 , - 1582 , - 269 , - 876 , - 1675 , - 938 , - 393 , - 40 , - 1607 , - 1638 , - 133 , - 548 , - 1155 , - 226 , - 1217 , - 672 , - 319 , - 158 , - 189 , - 412 , - 827 , - 1434 , - 505 , - 1496 , - 951 , - 598 , - 437 , - 468 , - 691 , - 1106 , - 1713 , - 784 , - 47 , - 1230 , - 877 , - 716 , - 747 , - 970 , - 1385 , - 264 , - 1063 , - 326 , - 1509 , - 1156 , - 995 , - 1026 , - 1249 , - 1664 , - 543 , - 1342 , - 605 , - 60 , - 1435 , - 1274 , - 1305 , - 1528 , - 215 , - 822 , - 1621 , - 884 , - 339 , - 1714 , - 1553 , - 1584 , - 79 , - 494 , - 1101 , - 172 , - 1163 , - 618 , - 265 , - 104 , - 135 , - 358 , - 773 , - 1380 , - 451 , - 1442 , - 897 , - 544 , - 383 , - 414 , - 637 , - 1052 , - 1659 , - 730 , - 1721 , - 1176 , - 823 , - 662 , - 693 , - 916 , - 1331 , - 210 , - 1009 , - 272 , - 1455 , - 1102 , - 941 , - 972 , - 1195 , - 1610 , - 489 , - 1288 , - 551 , - 6 , - 1381 , - 1220 , - 1251 , - 1474 , - 161 , - 768 , - 1567 , - 830 , - 285 , - 1660 , - 1499 , - 1530 , - 25 , - 440 , - 1047 , - 118 , - 1109 , - 564 , - 211 , - 50 , - 81 , - 304 , - 719 , - 1326 , - 397 , - 1388 , - 843 , - 490 , - 329 , - 360 , - 583 , - 998 , - 1605 , - 676 , - 1667 , - 1122 , - 769 , - 608 , - 639 , - 862 , - 1277 , - 156 , - 955 , - 218 , - 1401 , - 1048 , - 887 , - 918 , - 1141 , - 1556 , - 435 , - 1234 , - 497 , - 1680 , - 1327 , - 1166 , - 1197 , - 1420 , - 107 , - 714 , - 1513 , - 776 , - 231 , - 1606 , - 1445 , - 1476 , - 1699 , - 386 , - 993 , - 64 , - 1055 , - 510 , - 157 , - 1724 , - 27 , - 250 , - 665 , - 1272 , - 343 , - 1334 , - 789 , - 436 , - 275 , - 306 , - 529 , - 944 , - 1551 , - 622 , - 1613 , - 1068 , - 715 , - 554 , - 585 , - 808 , - 1223 , - 102 , - 901 , - 164 , - 1347 , - 994 , - 833 , - 864 , - 1087 , - 1502 , - 381 , - 1180 , - 443 , - 1626 , - 1273 , - 1112 , - 1143 , - 1366 , - 53 , - 660 , - 1459 , - 722 , - 177 , - 1552 , - 1391 , - 1422 , - 1645 , - 332 , - 939 , - 10 , - 1001 , - 456 , - 103 , - 1670 , - 1701 , - 196 , - 611 , - 1218 , - 289 , - 1280 , - 735 , - 382 , - 221 , - 252 , - 475 , - 890 , - 1497 , - 568 , - 1559 , - 1014 , - 661 , - 500 , - 531 , - 754 , - 1169 , - 48 , - 847 , - 110 , - 1293 , - 940 , - 779 , - 810 , - 1033 , - 1448 , - 327 , - 1126 , - 389 , - 1572 , - 1219 , - 1058 , - 1089 , - 1312 , - 1727 , - 606 , - 1405 , - 668 , - 123 , - 1498 , - 1337 , - 1368 , - 1591 , - 278 , - 885 , - 1684 , - 947 , - 402 , - 49 , - 1616 , - 1647 , - 142 , - 557 , - 1164 , - 235 , - 1226 , - 681 , - 328 , - 167 , - 198 , - 421 , - 836 , - 1443 , - 514 , - 1505 , - 960 , - 607 , - 446 , - 477 , - 700 , - 1115 , - 1722 , - 793 , - 56 , - 1239 , - 886 , - 725 , - 756 , - 979 , - 1394 , - 273 , - 1072 , - 335 , - 1518 , - 1165 , - 1004 , - 1035 , - 1258 , - 1673 , - 552 , - 1351 , - 614 , - 69 , - 1444 , - 1283 , - 1314 , - 1537 , - 224 , - 831 , - 1630 , - 893 , - 348 , - 1723 , - 1562 , - 1593 , - 88 , - 503 , - 1110 , - 181 , - 1172 , - 627 , - 274 , - 113 , - 144 , - 367 , - 782 , - 1389 , - 460 , - 1451 , - 906 , - 553 , - 392 , - 423 , - 646 , - 1061 , - 1668 , - 739 , - 2 , - 1185 , - 832 , - 671 , - 702 , - 925 , - 1340 , - 219 , - 1018 , - 281 , - 1464 , - 1111 , - 950 , - 981 , - 1204 , - 1619 , - 498 , - 1297 , - 560 , - 15 , - 1390 , - 1229 , - 1260 , - 1483 , - 170 , - 777 , - 1576 , - 839 , - 294 , - 1669 , - 1508 , - 1539 , - 34 , - 449 , - 1056 , - 127 , - 1118 , - 573 , - 220 , - 59 , - 90 , - 313 , - 728 , - 1335 , - 406 , - 1397 , - 852 , - 499 , - 338 , - 369 , - 592 , - 1007 , - 1614 , - 685 , - 1676 , - 1131 , - 778 , - 617 , - 648 , - 871 , - 1286 , - 165 , - 964 , - 227 , - 1410 , - 1057 , - 896 , - 927 , - 1150 , - 1565 , - 444 , - 1243 , - 506 , - 1689 , - 1336 , - 1175 , - 1206 , - 1429 , - 116 , - 723 , - 1522 , - 785 , - 240 , - 1615 , - 1454 , - 1485 , - 1708 , - 395 , - 1002 , - 73 , - 1064 , - 519 , - 166 , - 5 , - 36 , - 259 , - 674 , - 1281 , - 352 , - 1343 , - 798 , - 445 , - 284 , - 315 , - 538 , - 953 , - 1560 , - 631 , - 1622 , - 1077 , - 724 , - 563 , - 594 , - 817 , - 1232 , - 111 , - 910 , - 173 , - 1356 , - 1003 , - 842 , - 873 , - 1096 , - 1511 , - 390 , - 1189 , - 452 , - 1635 , - 1282 , - 1121 , - 1152 , - 1375 , - 62 , - 669 , - 1468 , - 731 , - 186 , - 1561 , - 1400 , - 1431 , - 1654 , - 341 , - 948 , - 19 , - 1010 , - 465 , - 112 , - 1679 , - 1710 , - 205 , - 620 , - 1227 , - 298 , - 1289 , - 744 , - 391 , - 230 , - 261 , - 484 , - 899 , - 1506 , - 577 , - 1568 , - 1023 , - 670 , - 509 , - 540 , - 763 , - 1178 , - 57 , - 856 , - 119 , - 1302 , - 949 , - 788 , - 819 , - 1042 , - 1457 , - 336 , - 1135 , - 398 , - 1581 , - 1228 , - 1067 , - 1098 , - 1321 , - 8 , - 615 , - 1414 , - 677 , - 132 , - 1507 , - 1346 , - 1377 , - 1600 , - 287 , - 894 , - 1693 , - 956 , - 411 , - 58 , - 1625 , - 1656 , - 151 , - 566 , - 1173 , - 244 , - 1235 , - 690 , - 337 , - 176 , - 207 , - 430 , - 845 , - 1452 , - 523 , - 1514 , - 969 , - 616 , - 455 , - 486 , - 709 , - 1124 , - 3 , - 802 , - 65 , - 1248 , - 895 , - 734 , - 765 , - 988 , - 1403 , - 282 , - 1081 , - 344 , - 1527 , - 1174 , - 1013 , - 1044 , - 1267 , - 1682 , - 561 , - 1360 , - 623 , - 78 , - 1453 , - 1292 , - 1323 , - 1546 , - 233 , - 840 , - 1639 , - 902 , - 357 , - 4 , - 1571 , - 1602 , - 97 , - 512 , - 1119 , - 190 , - 1181 , - 636 , - 283 , - 122 , - 153 , - 376 , - 791 , - 1398 , - 469 , - 1460 , - 915 , - 562 , - 401 , - 432 , - 655 , - 1070 , - 1677 , - 748 , - 11 , - 1194 , - 841 , - 680 , - 711 , - 934 , - 1349 , - 228 , - 1027 , - 290 , - 1473 , - 1120 , - 959 , - 990 , - 1213 , - 1628 , - 507 , - 1306 , - 569 , - 24 , - 1399 , - 1238 , - 1269 , - 1492 , - 179 , - 786 , - 1585 , - 848 , - 303 , - 1678 , - 1517 , - 1548 , - 43 , - 458 , - 1065 , - 136 , - 1127 , - 582 , - 229 , - 68 , - 99 , - 322 , - 737 , - 1344 , - 415 , - 1406 , - 861 , - 508 , - 347 , - 378 , - 601 , - 1016 , - 1623 , - 694 , - 1685 , - 1140 , - 787 , - 626 , - 657 , - 880 , - 1295 , - 174 , - 973 , - 236 , - 1419 , - 1066 , - 905 , - 936 , - 1159 , - 1574 , - 453 , - 1252 , - 515 , - 1698 , - 1345 , - 1184 , - 1215 , - 1438 , - 125 , - 732 , - 1531 , - 794 , - 249 , - 1624 , - 1463 , - 1494 , - 1717 , - 404 , - 1011 , - 82 , - 1073 , - 528 , - 175 , - 14 , - 45 , - 268 , - 683 , - 1290 , - 361 , - 1352 , - 807 , - 454 , - 293 , - 324 , - 547 , - 962 , - 1569 , - 640 , - 1631 , - 1086 , - 733 , - 572 , - 603 , - 826 , - 1241 , - 120 , - 919 , - 182 , - 1365 , - 1012 , - 851 , - 882 , - 1105 , - 1520 , - 399 , - 1198 , - 461 , - 1644 , - 1291 , - 1130 , - 1161 , - 1384 , - 71 , - 678 , - 1477 , - 740 , - 195 , - 1570 , - 1409 , - 1440 , - 1663 , - 350 , - 957 , - 28 , - 1019 , - 474 , - 121 , - 1688 , - 1719 , - 214 , - 629 , - 1236 , - 307 , - 1298 , - 753 , - 400 , - 239 , - 270 , - 493 , - 908 , - 1515 , - 586 , - 1577 , - 1032 , - 679 , - 518 , - 549 , - 772 , - 1187 , - 66 , - 865 , - 128 , - 1311 , - 958 , - 797 , - 828 , - 1051 , - 1466 , - 345 , - 1144 , - 407 , - 1590 , - 1237 , - 1076 , - 1107 , - 1330 , - 17 , - 624 , - 1423 , - 686 , - 141 , - 1516 , - 1355 , - 1386 , - 1609 , - 296 , - 903 , - 1702 , - 965 , - 420 , - 67 , - 1634 , - 1665 , - 160 , - 575 , - 1182 , - 253 , - 1244 , - 699 , - 346 , - 185 , - 216 , - 439 , - 854 , - 1461 , - 532 , - 1523 , - 978 , - 625 , - 464 , - 495 , - 718 , - 1133 , - 12 , - 811 , - 74 , - 1257 , - 904 , - 743 , - 774 , - 997 , - 1412 , - 291 , - 1090 , - 353 , - 1536 , - 1183 , - 1022 , - 1053 , - 1276 , - 1691 , - 570 , - 1369 , - 632 , - 87 , - 1462 , - 1301 , - 1332 , - 1555 , - 242 , - 849 , - 1648 , - 911 , - 366 , - 13 , - 1580 , - 1611 , - 106 , - 521 , - 1128 , - 199 , - 1190 , - 645 , - 292 , - 131 , - 162 , - 385 , - 800 , - 1407 , - 478 , - 1469 , - 924 , - 571 , - 410 , - 441 , - 664 , - 1079 , - 1686 , - 757 , - 20 , - 1203 , - 850 , - 689 , - 720 , - 943 , - 1358 , - 237 , - 1036 , - 299 , - 1482 , - 1129 , - 968 , - 999 , - 1222 , - 1637 , - 516 , - 1315 , - 578 , - 33 , - 1408 , - 1247 , - 1278 , - 1501 , - 188 , - 795 , - 1594 , - 857 , - 312 , - 1687 , - 1526 , - 1557 , - 52 , - 467 , - 1074 , - 145 , - 1136 , - 591 , - 238 , - 77 , - 108 , - 331 , - 746 , - 1353 , - 424 , - 1415 , - 870 , - 517 , - 356 , - 387 , - 610 , - 1025 , - 1632 , - 703 , - 1694 , - 1149 , - 796 , - 635 , - 666 , - 889 , - 1304 , - 183 , - 982 , - 245 , - 1428 , - 1075 , - 914 , - 945 , - 1168 , - 1583 , - 462 , - 1261 , - 524 , - 1707 , - 1354 , - 1193 , - 1224 , - 1447 , - 134 , - 741 , - 1540 , - 803 , - 258 , - 1633 , - 1472 , - 1503 , - 1726 , - 413 , - 1020 , - 91 , - 1082 , - 537 , - 184 , - 23 , - 54 , - 277 , - 692 , - 1299 , - 370 , - 1361 , - 816 , - 463 , - 302 , - 333 , - 556 , - 971 , - 1578 , - 649 , - 1640 , - 1095 , - 742 , - 581 , - 612 , - 835 , - 1250 , - 129 , - 928 , - 191 , - 1374 , - 1021 , - 860 , - 891 , - 1114 , - 1529 , - 408 , - 1207 , - 470 , - 1653 , - 1300 , - 1139 , - 1170 , - 1393 , - 80 , - 687 , - 1486 , - 749 , - 204 , - 1579 , - 1418 , - 1449 , - 1672 , - 359 , - 966 , - 37 , - 1028 , - 483 , - 130 , - 1697 , - 0 , - 137 , - 494 , - 1071 , - 108 , - 1125 , - 602 , - 299 , - 216 , - 353 , - 710 , - 1287 , - 324 , - 1341 , - 818 , - 515 , - 432 , - 569 , - 926 , - 1503 , - 540 , - 1557 , - 1034 , - 731 , - 648 , - 785 , - 1142 , - 1719 , - 756 , - 13 , - 1250 , - 947 , - 864 , - 1001 , - 1358 , - 175 , - 972 , - 229 , - 1466 , - 1163 , - 1080 , - 1217 , - 1574 , - 391 , - 1188 , - 445 , - 1682 , - 1379 , - 1296 , - 1433 , - 30 , - 607 , - 1404 , - 661 , - 138 , - 1595 , - 1512 , - 1649 , - 246 , - 823 , - 1620 , - 877 , - 354 , - 51 , - 1728 , - 105 , - 462 , - 1039 , - 76 , - 1093 , - 570 , - 267 , - 184 , - 321 , - 678 , - 1255 , - 292 , - 1309 , - 786 , - 483 , - 400 , - 537 , - 894 , - 1471 , - 508 , - 1525 , - 1002 , - 699 , - 616 , - 753 , - 1110 , - 1687 , - 724 , - 1741 , - 1218 , - 915 , - 832 , - 969 , - 1326 , - 143 , - 940 , - 197 , - 1434 , - 1131 , - 1048 , - 1185 , - 1542 , - 359 , - 1156 , - 413 , - 1650 , - 1347 , - 1264 , - 1401 , - 1758 , - 575 , - 1372 , - 629 , - 106 , - 1563 , - 1480 , - 1617 , - 214 , - 791 , - 1588 , - 845 , - 322 , - 19 , - 1696 , - 73 , - 430 , - 1007 , - 44 , - 1061 , - 538 , - 235 , - 152 , - 289 , - 646 , - 1223 , - 260 , - 1277 , - 754 , - 451 , - 368 , - 505 , - 862 , - 1439 , - 476 , - 1493 , - 970 , - 667 , - 584 , - 721 , - 1078 , - 1655 , - 692 , - 1709 , - 1186 , - 883 , - 800 , - 937 , - 1294 , - 111 , - 908 , - 165 , - 1402 , - 1099 , - 1016 , - 1153 , - 1510 , - 327 , - 1124 , - 381 , - 1618 , - 1315 , - 1232 , - 1369 , - 1726 , - 543 , - 1340 , - 597 , - 74 , - 1531 , - 1448 , - 1585 , - 182 , - 759 , - 1556 , - 813 , - 290 , - 1747 , - 1664 , - 41 , - 398 , - 975 , - 12 , - 1029 , - 506 , - 203 , - 120 , - 257 , - 614 , - 1191 , - 228 , - 1245 , - 722 , - 419 , - 336 , - 473 , - 830 , - 1407 , - 444 , - 1461 , - 938 , - 635 , - 552 , - 689 , - 1046 , - 1623 , - 660 , - 1677 , - 1154 , - 851 , - 768 , - 905 , - 1262 , - 79 , - 876 , - 133 , - 1370 , - 1067 , - 984 , - 1121 , - 1478 , - 295 , - 1092 , - 349 , - 1586 , - 1283 , - 1200 , - 1337 , - 1694 , - 511 , - 1308 , - 565 , - 42 , - 1499 , - 1416 , - 1553 , - 150 , - 727 , - 1524 , - 781 , - 258 , - 1715 , - 1632 , - 9 , - 366 , - 943 , - 1740 , - 997 , - 474 , - 171 , - 88 , - 225 , - 582 , - 1159 , - 196 , - 1213 , - 690 , - 387 , - 304 , - 441 , - 798 , - 1375 , - 412 , - 1429 , - 906 , - 603 , - 520 , - 657 , - 1014 , - 1591 , - 628 , - 1645 , - 1122 , - 819 , - 736 , - 873 , - 1230 , - 47 , - 844 , - 101 , - 1338 , - 1035 , - 952 , - 1089 , - 1446 , - 263 , - 1060 , - 317 , - 1554 , - 1251 , - 1168 , - 1305 , - 1662 , - 479 , - 1276 , - 533 , - 10 , - 1467 , - 1384 , - 1521 , - 118 , - 695 , - 1492 , - 749 , - 226 , - 1683 , - 1600 , - 1737 , - 334 , - 911 , - 1708 , - 965 , - 442 , - 139 , - 56 , - 193 , - 550 , - 1127 , - 164 , - 1181 , - 658 , - 355 , - 272 , - 409 , - 766 , - 1343 , - 380 , - 1397 , - 874 , - 571 , - 488 , - 625 , - 982 , - 1559 , - 596 , - 1613 , - 1090 , - 787 , - 704 , - 841 , - 1198 , - 15 , - 812 , - 69 , - 1306 , - 1003 , - 920 , - 1057 , - 1414 , - 231 , - 1028 , - 285 , - 1522 , - 1219 , - 1136 , - 1273 , - 1630 , - 447 , - 1244 , - 501 , - 1738 , - 1435 , - 1352 , - 1489 , - 86 , - 663 , - 1460 , - 717 , - 194 , - 1651 , - 1568 , - 1705 , - 302 , - 879 , - 1676 , - 933 , - 410 , - 107 , - 24 , - 161 , - 518 , - 1095 , - 132 , - 1149 , - 626 , - 323 , - 240 , - 377 , - 734 , - 1311 , - 348 , - 1365 , - 842 , - 539 , - 456 , - 593 , - 950 , - 1527 , - 564 , - 1581 , - 1058 , - 755 , - 672 , - 809 , - 1166 , - 1743 , - 780 , - 37 , - 1274 , - 971 , - 888 , - 1025 , - 1382 , - 199 , - 996 , - 253 , - 1490 , - 1187 , - 1104 , - 1241 , - 1598 , - 415 , - 1212 , - 469 , - 1706 , - 1403 , - 1320 , - 1457 , - 54 , - 631 , - 1428 , - 685 , - 162 , - 1619 , - 1536 , - 1673 , - 270 , - 847 , - 1644 , - 901 , - 378 , - 75 , - 1752 , - 129 , - 486 , - 1063 , - 100 , - 1117 , - 594 , - 291 , - 208 , - 345 , - 702 , - 1279 , - 316 , - 1333 , - 810 , - 507 , - 424 , - 561 , - 918 , - 1495 , - 532 , - 1549 , - 1026 , - 723 , - 640 , - 777 , - 1134 , - 1711 , - 748 , - 5 , - 1242 , - 939 , - 856 , - 993 , - 1350 , - 167 , - 964 , - 221 , - 1458 , - 1155 , - 1072 , - 1209 , - 1566 , - 383 , - 1180 , - 437 , - 1674 , - 1371 , - 1288 , - 1425 , - 22 , - 599 , - 1396 , - 653 , - 130 , - 1587 , - 1504 , - 1641 , - 238 , - 815 , - 1612 , - 869 , - 346 , - 43 , - 1720 , - 97 , - 454 , - 1031 , - 68 , - 1085 , - 562 , - 259 , - 176 , - 313 , - 670 , - 1247 , - 284 , - 1301 , - 778 , - 475 , - 392 , - 529 , - 886 , - 1463 , - 500 , - 1517 , - 994 , - 691 , - 608 , - 745 , - 1102 , - 1679 , - 716 , - 1733 , - 1210 , - 907 , - 824 , - 961 , - 1318 , - 135 , - 932 , - 189 , - 1426 , - 1123 , - 1040 , - 1177 , - 1534 , - 351 , - 1148 , - 405 , - 1642 , - 1339 , - 1256 , - 1393 , - 1750 , - 567 , - 1364 , - 621 , - 98 , - 1555 , - 1472 , - 1609 , - 206 , - 783 , - 1580 , - 837 , - 314 , - 11 , - 1688 , - 65 , - 422 , - 999 , - 36 , - 1053 , - 530 , - 227 , - 144 , - 281 , - 638 , - 1215 , - 252 , - 1269 , - 746 , - 443 , - 360 , - 497 , - 854 , - 1431 , - 468 , - 1485 , - 962 , - 659 , - 576 , - 713 , - 1070 , - 1647 , - 684 , - 1701 , - 1178 , - 875 , - 792 , - 929 , - 1286 , - 103 , - 900 , - 157 , - 1394 , - 1091 , - 1008 , - 1145 , - 1502 , - 319 , - 1116 , - 373 , - 1610 , - 1307 , - 1224 , - 1361 , - 1718 , - 535 , - 1332 , - 589 , - 66 , - 1523 , - 1440 , - 1577 , - 174 , - 751 , - 1548 , - 805 , - 282 , - 1739 , - 1656 , - 33 , - 390 , - 967 , - 4 , - 1021 , - 498 , - 195 , - 112 , - 249 , - 606 , - 1183 , - 220 , - 1237 , - 714 , - 411 , - 328 , - 465 , - 822 , - 1399 , - 436 , - 1453 , - 930 , - 627 , - 544 , - 681 , - 1038 , - 1615 , - 652 , - 1669 , - 1146 , - 843 , - 760 , - 897 , - 1254 , - 71 , - 868 , - 125 , - 1362 , - 1059 , - 976 , - 1113 , - 1470 , - 287 , - 1084 , - 341 , - 1578 , - 1275 , - 1192 , - 1329 , - 1686 , - 503 , - 1300 , - 557 , - 34 , - 1491 , - 1408 , - 1545 , - 142 , - 719 , - 1516 , - 773 , - 250 , - 1707 , - 1624 , - 1 , - 358 , - 935 , - 1732 , - 989 , - 466 , - 163 , - 80 , - 217 , - 574 , - 1151 , - 188 , - 1205 , - 682 , - 379 , - 296 , - 433 , - 790 , - 1367 , - 404 , - 1421 , - 898 , - 595 , - 512 , - 649 , - 1006 , - 1583 , - 620 , - 1637 , - 1114 , - 811 , - 728 , - 865 , - 1222 , - 39 , - 836 , - 93 , - 1330 , - 1027 , - 944 , - 1081 , - 1438 , - 255 , - 1052 , - 309 , - 1546 , - 1243 , - 1160 , - 1297 , - 1654 , - 471 , - 1268 , - 525 , - 2 , - 1459 , - 1376 , - 1513 , - 110 , - 687 , - 1484 , - 741 , - 218 , - 1675 , - 1592 , - 1729 , - 326 , - 903 , - 1700 , - 957 , - 434 , - 131 , - 48 , - 185 , - 542 , - 1119 , - 156 , - 1173 , - 650 , - 347 , - 264 , - 401 , - 758 , - 1335 , - 372 , - 1389 , - 866 , - 563 , - 480 , - 617 , - 974 , - 1551 , - 588 , - 1605 , - 1082 , - 779 , - 696 , - 833 , - 1190 , - 7 , - 804 , - 61 , - 1298 , - 995 , - 912 , - 1049 , - 1406 , - 223 , - 1020 , - 277 , - 1514 , - 1211 , - 1128 , - 1265 , - 1622 , - 439 , - 1236 , - 493 , - 1730 , - 1427 , - 1344 , - 1481 , - 78 , - 655 , - 1452 , - 709 , - 186 , - 1643 , - 1560 , - 1697 , - 294 , - 871 , - 1668 , - 925 , - 402 , - 99 , - 16 , - 153 , - 510 , - 1087 , - 124 , - 1141 , - 618 , - 315 , - 232 , - 369 , - 726 , - 1303 , - 340 , - 1357 , - 834 , - 531 , - 448 , - 585 , - 942 , - 1519 , - 556 , - 1573 , - 1050 , - 747 , - 664 , - 801 , - 1158 , - 1735 , - 772 , - 29 , - 1266 , - 963 , - 880 , - 1017 , - 1374 , - 191 , - 988 , - 245 , - 1482 , - 1179 , - 1096 , - 1233 , - 1590 , - 407 , - 1204 , - 461 , - 1698 , - 1395 , - 1312 , - 1449 , - 46 , - 623 , - 1420 , - 677 , - 154 , - 1611 , - 1528 , - 1665 , - 262 , - 839 , - 1636 , - 893 , - 370 , - 67 , - 1744 , - 121 , - 478 , - 1055 , - 92 , - 1109 , - 586 , - 283 , - 200 , - 337 , - 694 , - 1271 , - 308 , - 1325 , - 802 , - 499 , - 416 , - 553 , - 910 , - 1487 , - 524 , - 1541 , - 1018 , - 715 , - 632 , - 769 , - 1126 , - 1703 , - 740 , - 1757 , - 1234 , - 931 , - 848 , - 985 , - 1342 , - 159 , - 956 , - 213 , - 1450 , - 1147 , - 1064 , - 1201 , - 1558 , - 375 , - 1172 , - 429 , - 1666 , - 1363 , - 1280 , - 1417 , - 14 , - 591 , - 1388 , - 645 , - 122 , - 1579 , - 1496 , - 1633 , - 230 , - 807 , - 1604 , - 861 , - 338 , - 35 , - 1712 , - 89 , - 446 , - 1023 , - 60 , - 1077 , - 554 , - 251 , - 168 , - 305 , - 662 , - 1239 , - 276 , - 1293 , - 770 , - 467 , - 384 , - 521 , - 878 , - 1455 , - 492 , - 1509 , - 986 , - 683 , - 600 , - 737 , - 1094 , - 1671 , - 708 , - 1725 , - 1202 , - 899 , - 816 , - 953 , - 1310 , - 127 , - 924 , - 181 , - 1418 , - 1115 , - 1032 , - 1169 , - 1526 , - 343 , - 1140 , - 397 , - 1634 , - 1331 , - 1248 , - 1385 , - 1742 , - 559 , - 1356 , - 613 , - 90 , - 1547 , - 1464 , - 1601 , - 198 , - 775 , - 1572 , - 829 , - 306 , - 3 , - 1680 , - 57 , - 414 , - 991 , - 28 , - 1045 , - 522 , - 219 , - 136 , - 273 , - 630 , - 1207 , - 244 , - 1261 , - 738 , - 435 , - 352 , - 489 , - 846 , - 1423 , - 460 , - 1477 , - 954 , - 651 , - 568 , - 705 , - 1062 , - 1639 , - 676 , - 1693 , - 1170 , - 867 , - 784 , - 921 , - 1278 , - 95 , - 892 , - 149 , - 1386 , - 1083 , - 1000 , - 1137 , - 1494 , - 311 , - 1108 , - 365 , - 1602 , - 1299 , - 1216 , - 1353 , - 1710 , - 527 , - 1324 , - 581 , - 58 , - 1515 , - 1432 , - 1569 , - 166 , - 743 , - 1540 , - 797 , - 274 , - 1731 , - 1648 , - 25 , - 382 , - 959 , - 1756 , - 1013 , - 490 , - 187 , - 104 , - 241 , - 598 , - 1175 , - 212 , - 1229 , - 706 , - 403 , - 320 , - 457 , - 814 , - 1391 , - 428 , - 1445 , - 922 , - 619 , - 536 , - 673 , - 1030 , - 1607 , - 644 , - 1661 , - 1138 , - 835 , - 752 , - 889 , - 1246 , - 63 , - 860 , - 117 , - 1354 , - 1051 , - 968 , - 1105 , - 1462 , - 279 , - 1076 , - 333 , - 1570 , - 1267 , - 1184 , - 1321 , - 1678 , - 495 , - 1292 , - 549 , - 26 , - 1483 , - 1400 , - 1537 , - 134 , - 711 , - 1508 , - 765 , - 242 , - 1699 , - 1616 , - 1753 , - 350 , - 927 , - 1724 , - 981 , - 458 , - 155 , - 72 , - 209 , - 566 , - 1143 , - 180 , - 1197 , - 674 , - 371 , - 288 , - 425 , - 782 , - 1359 , - 396 , - 1413 , - 890 , - 587 , - 504 , - 641 , - 998 , - 1575 , - 612 , - 1629 , - 1106 , - 803 , - 720 , - 857 , - 1214 , - 31 , - 828 , - 85 , - 1322 , - 1019 , - 936 , - 1073 , - 1430 , - 247 , - 1044 , - 301 , - 1538 , - 1235 , - 1152 , - 1289 , - 1646 , - 463 , - 1260 , - 517 , - 1754 , - 1451 , - 1368 , - 1505 , - 102 , - 679 , - 1476 , - 733 , - 210 , - 1667 , - 1584 , - 1721 , - 318 , - 895 , - 1692 , - 949 , - 426 , - 123 , - 40 , - 177 , - 534 , - 1111 , - 148 , - 1165 , - 642 , - 339 , - 256 , - 393 , - 750 , - 1327 , - 364 , - 1381 , - 858 , - 555 , - 472 , - 609 , - 966 , - 1543 , - 580 , - 1597 , - 1074 , - 771 , - 688 , - 825 , - 1182 , - 1759 , - 796 , - 53 , - 1290 , - 987 , - 904 , - 1041 , - 1398 , - 215 , - 1012 , - 269 , - 1506 , - 1203 , - 1120 , - 1257 , - 1614 , - 431 , - 1228 , - 485 , - 1722 , - 1419 , - 1336 , - 1473 , - 70 , - 647 , - 1444 , - 701 , - 178 , - 1635 , - 1552 , - 1689 , - 286 , - 863 , - 1660 , - 917 , - 394 , - 91 , - 8 , - 145 , - 502 , - 1079 , - 116 , - 1133 , - 610 , - 307 , - 224 , - 361 , - 718 , - 1295 , - 332 , - 1349 , - 826 , - 523 , - 440 , - 577 , - 934 , - 1511 , - 548 , - 1565 , - 1042 , - 739 , - 656 , - 793 , - 1150 , - 1727 , - 764 , - 21 , - 1258 , - 955 , - 872 , - 1009 , - 1366 , - 183 , - 980 , - 237 , - 1474 , - 1171 , - 1088 , - 1225 , - 1582 , - 399 , - 1196 , - 453 , - 1690 , - 1387 , - 1304 , - 1441 , - 38 , - 615 , - 1412 , - 669 , - 146 , - 1603 , - 1520 , - 1657 , - 254 , - 831 , - 1628 , - 885 , - 362 , - 59 , - 1736 , - 113 , - 470 , - 1047 , - 84 , - 1101 , - 578 , - 275 , - 192 , - 329 , - 686 , - 1263 , - 300 , - 1317 , - 794 , - 491 , - 408 , - 545 , - 902 , - 1479 , - 516 , - 1533 , - 1010 , - 707 , - 624 , - 761 , - 1118 , - 1695 , - 732 , - 1749 , - 1226 , - 923 , - 840 , - 977 , - 1334 , - 151 , - 948 , - 205 , - 1442 , - 1139 , - 1056 , - 1193 , - 1550 , - 367 , - 1164 , - 421 , - 1658 , - 1355 , - 1272 , - 1409 , - 6 , - 583 , - 1380 , - 637 , - 114 , - 1571 , - 1488 , - 1625 , - 222 , - 799 , - 1596 , - 853 , - 330 , - 27 , - 1704 , - 81 , - 438 , - 1015 , - 52 , - 1069 , - 546 , - 243 , - 160 , - 297 , - 654 , - 1231 , - 268 , - 1285 , - 762 , - 459 , - 376 , - 513 , - 870 , - 1447 , - 484 , - 1501 , - 978 , - 675 , - 592 , - 729 , - 1086 , - 1663 , - 700 , - 1717 , - 1194 , - 891 , - 808 , - 945 , - 1302 , - 119 , - 916 , - 173 , - 1410 , - 1107 , - 1024 , - 1161 , - 1518 , - 335 , - 1132 , - 389 , - 1626 , - 1323 , - 1240 , - 1377 , - 1734 , - 551 , - 1348 , - 605 , - 82 , - 1539 , - 1456 , - 1593 , - 190 , - 767 , - 1564 , - 821 , - 298 , - 1755 , - 1672 , - 49 , - 406 , - 983 , - 20 , - 1037 , - 514 , - 211 , - 128 , - 265 , - 622 , - 1199 , - 236 , - 1253 , - 730 , - 427 , - 344 , - 481 , - 838 , - 1415 , - 452 , - 1469 , - 946 , - 643 , - 560 , - 697 , - 1054 , - 1631 , - 668 , - 1685 , - 1162 , - 859 , - 776 , - 913 , - 1270 , - 87 , - 884 , - 141 , - 1378 , - 1075 , - 992 , - 1129 , - 1486 , - 303 , - 1100 , - 357 , - 1594 , - 1291 , - 1208 , - 1345 , - 1702 , - 519 , - 1316 , - 573 , - 50 , - 1507 , - 1424 , - 1561 , - 158 , - 735 , - 1532 , - 789 , - 266 , - 1723 , - 1640 , - 17 , - 374 , - 951 , - 1748 , - 1005 , - 482 , - 179 , - 96 , - 233 , - 590 , - 1167 , - 204 , - 1221 , - 698 , - 395 , - 312 , - 449 , - 806 , - 1383 , - 420 , - 1437 , - 914 , - 611 , - 528 , - 665 , - 1022 , - 1599 , - 636 , - 1653 , - 1130 , - 827 , - 744 , - 881 , - 1238 , - 55 , - 852 , - 109 , - 1346 , - 1043 , - 960 , - 1097 , - 1454 , - 271 , - 1068 , - 325 , - 1562 , - 1259 , - 1176 , - 1313 , - 1670 , - 487 , - 1284 , - 541 , - 18 , - 1475 , - 1392 , - 1529 , - 126 , - 703 , - 1500 , - 757 , - 234 , - 1691 , - 1608 , - 1745 , - 342 , - 919 , - 1716 , - 973 , - 450 , - 147 , - 64 , - 201 , - 558 , - 1135 , - 172 , - 1189 , - 666 , - 363 , - 280 , - 417 , - 774 , - 1351 , - 388 , - 1405 , - 882 , - 579 , - 496 , - 633 , - 990 , - 1567 , - 604 , - 1621 , - 1098 , - 795 , - 712 , - 849 , - 1206 , - 23 , - 820 , - 77 , - 1314 , - 1011 , - 928 , - 1065 , - 1422 , - 239 , - 1036 , - 293 , - 1530 , - 1227 , - 1144 , - 1281 , - 1638 , - 455 , - 1252 , - 509 , - 1746 , - 1443 , - 1360 , - 1497 , - 94 , - 671 , - 1468 , - 725 , - 202 , - 1659 , - 1576 , - 1713 , - 310 , - 887 , - 1684 , - 941 , - 418 , - 115 , - 32 , - 169 , - 526 , - 1103 , - 140 , - 1157 , - 634 , - 331 , - 248 , - 385 , - 742 , - 1319 , - 356 , - 1373 , - 850 , - 547 , - 464 , - 601 , - 958 , - 1535 , - 572 , - 1589 , - 1066 , - 763 , - 680 , - 817 , - 1174 , - 1751 , - 788 , - 45 , - 1282 , - 979 , - 896 , - 1033 , - 1390 , - 207 , - 1004 , - 261 , - 1498 , - 1195 , - 1112 , - 1249 , - 1606 , - 423 , - 1220 , - 477 , - 1714 , - 1411 , - 1328 , - 1465 , - 62 , - 639 , - 1436 , - 693 , - 170 , - 1627 , - 1544 , - 1681 , - 278 , - 855 , - 1652 , - 909 , - 386 , - 83 , - 0 , - 141 , - 506 , - 1095 , - 116 , - 1153 , - 622 , - 315 , - 232 , - 373 , - 738 , - 1327 , - 348 , - 1385 , - 854 , - 547 , - 464 , - 605 , - 970 , - 1559 , - 580 , - 1617 , - 1086 , - 779 , - 696 , - 837 , - 1202 , - 1791 , - 812 , - 57 , - 1318 , - 1011 , - 928 , - 1069 , - 1434 , - 231 , - 1044 , - 289 , - 1550 , - 1243 , - 1160 , - 1301 , - 1666 , - 463 , - 1276 , - 521 , - 1782 , - 1475 , - 1392 , - 1533 , - 106 , - 695 , - 1508 , - 753 , - 222 , - 1707 , - 1624 , - 1765 , - 338 , - 927 , - 1740 , - 985 , - 454 , - 147 , - 64 , - 205 , - 570 , - 1159 , - 180 , - 1217 , - 686 , - 379 , - 296 , - 437 , - 802 , - 1391 , - 412 , - 1449 , - 918 , - 611 , - 528 , - 669 , - 1034 , - 1623 , - 644 , - 1681 , - 1150 , - 843 , - 760 , - 901 , - 1266 , - 63 , - 876 , - 121 , - 1382 , - 1075 , - 992 , - 1133 , - 1498 , - 295 , - 1108 , - 353 , - 1614 , - 1307 , - 1224 , - 1365 , - 1730 , - 527 , - 1340 , - 585 , - 54 , - 1539 , - 1456 , - 1597 , - 170 , - 759 , - 1572 , - 817 , - 286 , - 1771 , - 1688 , - 37 , - 402 , - 991 , - 12 , - 1049 , - 518 , - 211 , - 128 , - 269 , - 634 , - 1223 , - 244 , - 1281 , - 750 , - 443 , - 360 , - 501 , - 866 , - 1455 , - 476 , - 1513 , - 982 , - 675 , - 592 , - 733 , - 1098 , - 1687 , - 708 , - 1745 , - 1214 , - 907 , - 824 , - 965 , - 1330 , - 127 , - 940 , - 185 , - 1446 , - 1139 , - 1056 , - 1197 , - 1562 , - 359 , - 1172 , - 417 , - 1678 , - 1371 , - 1288 , - 1429 , - 2 , - 591 , - 1404 , - 649 , - 118 , - 1603 , - 1520 , - 1661 , - 234 , - 823 , - 1636 , - 881 , - 350 , - 43 , - 1752 , - 101 , - 466 , - 1055 , - 76 , - 1113 , - 582 , - 275 , - 192 , - 333 , - 698 , - 1287 , - 308 , - 1345 , - 814 , - 507 , - 424 , - 565 , - 930 , - 1519 , - 540 , - 1577 , - 1046 , - 739 , - 656 , - 797 , - 1162 , - 1751 , - 772 , - 17 , - 1278 , - 971 , - 888 , - 1029 , - 1394 , - 191 , - 1004 , - 249 , - 1510 , - 1203 , - 1120 , - 1261 , - 1626 , - 423 , - 1236 , - 481 , - 1742 , - 1435 , - 1352 , - 1493 , - 66 , - 655 , - 1468 , - 713 , - 182 , - 1667 , - 1584 , - 1725 , - 298 , - 887 , - 1700 , - 945 , - 414 , - 107 , - 24 , - 165 , - 530 , - 1119 , - 140 , - 1177 , - 646 , - 339 , - 256 , - 397 , - 762 , - 1351 , - 372 , - 1409 , - 878 , - 571 , - 488 , - 629 , - 994 , - 1583 , - 604 , - 1641 , - 1110 , - 803 , - 720 , - 861 , - 1226 , - 23 , - 836 , - 81 , - 1342 , - 1035 , - 952 , - 1093 , - 1458 , - 255 , - 1068 , - 313 , - 1574 , - 1267 , - 1184 , - 1325 , - 1690 , - 487 , - 1300 , - 545 , - 14 , - 1499 , - 1416 , - 1557 , - 130 , - 719 , - 1532 , - 777 , - 246 , - 1731 , - 1648 , - 1789 , - 362 , - 951 , - 1764 , - 1009 , - 478 , - 171 , - 88 , - 229 , - 594 , - 1183 , - 204 , - 1241 , - 710 , - 403 , - 320 , - 461 , - 826 , - 1415 , - 436 , - 1473 , - 942 , - 635 , - 552 , - 693 , - 1058 , - 1647 , - 668 , - 1705 , - 1174 , - 867 , - 784 , - 925 , - 1290 , - 87 , - 900 , - 145 , - 1406 , - 1099 , - 1016 , - 1157 , - 1522 , - 319 , - 1132 , - 377 , - 1638 , - 1331 , - 1248 , - 1389 , - 1754 , - 551 , - 1364 , - 609 , - 78 , - 1563 , - 1480 , - 1621 , - 194 , - 783 , - 1596 , - 841 , - 310 , - 3 , - 1712 , - 61 , - 426 , - 1015 , - 36 , - 1073 , - 542 , - 235 , - 152 , - 293 , - 658 , - 1247 , - 268 , - 1305 , - 774 , - 467 , - 384 , - 525 , - 890 , - 1479 , - 500 , - 1537 , - 1006 , - 699 , - 616 , - 757 , - 1122 , - 1711 , - 732 , - 1769 , - 1238 , - 931 , - 848 , - 989 , - 1354 , - 151 , - 964 , - 209 , - 1470 , - 1163 , - 1080 , - 1221 , - 1586 , - 383 , - 1196 , - 441 , - 1702 , - 1395 , - 1312 , - 1453 , - 26 , - 615 , - 1428 , - 673 , - 142 , - 1627 , - 1544 , - 1685 , - 258 , - 847 , - 1660 , - 905 , - 374 , - 67 , - 1776 , - 125 , - 490 , - 1079 , - 100 , - 1137 , - 606 , - 299 , - 216 , - 357 , - 722 , - 1311 , - 332 , - 1369 , - 838 , - 531 , - 448 , - 589 , - 954 , - 1543 , - 564 , - 1601 , - 1070 , - 763 , - 680 , - 821 , - 1186 , - 1775 , - 796 , - 41 , - 1302 , - 995 , - 912 , - 1053 , - 1418 , - 215 , - 1028 , - 273 , - 1534 , - 1227 , - 1144 , - 1285 , - 1650 , - 447 , - 1260 , - 505 , - 1766 , - 1459 , - 1376 , - 1517 , - 90 , - 679 , - 1492 , - 737 , - 206 , - 1691 , - 1608 , - 1749 , - 322 , - 911 , - 1724 , - 969 , - 438 , - 131 , - 48 , - 189 , - 554 , - 1143 , - 164 , - 1201 , - 670 , - 363 , - 280 , - 421 , - 786 , - 1375 , - 396 , - 1433 , - 902 , - 595 , - 512 , - 653 , - 1018 , - 1607 , - 628 , - 1665 , - 1134 , - 827 , - 744 , - 885 , - 1250 , - 47 , - 860 , - 105 , - 1366 , - 1059 , - 976 , - 1117 , - 1482 , - 279 , - 1092 , - 337 , - 1598 , - 1291 , - 1208 , - 1349 , - 1714 , - 511 , - 1324 , - 569 , - 38 , - 1523 , - 1440 , - 1581 , - 154 , - 743 , - 1556 , - 801 , - 270 , - 1755 , - 1672 , - 21 , - 386 , - 975 , - 1788 , - 1033 , - 502 , - 195 , - 112 , - 253 , - 618 , - 1207 , - 228 , - 1265 , - 734 , - 427 , - 344 , - 485 , - 850 , - 1439 , - 460 , - 1497 , - 966 , - 659 , - 576 , - 717 , - 1082 , - 1671 , - 692 , - 1729 , - 1198 , - 891 , - 808 , - 949 , - 1314 , - 111 , - 924 , - 169 , - 1430 , - 1123 , - 1040 , - 1181 , - 1546 , - 343 , - 1156 , - 401 , - 1662 , - 1355 , - 1272 , - 1413 , - 1778 , - 575 , - 1388 , - 633 , - 102 , - 1587 , - 1504 , - 1645 , - 218 , - 807 , - 1620 , - 865 , - 334 , - 27 , - 1736 , - 85 , - 450 , - 1039 , - 60 , - 1097 , - 566 , - 259 , - 176 , - 317 , - 682 , - 1271 , - 292 , - 1329 , - 798 , - 491 , - 408 , - 549 , - 914 , - 1503 , - 524 , - 1561 , - 1030 , - 723 , - 640 , - 781 , - 1146 , - 1735 , - 756 , - 1 , - 1262 , - 955 , - 872 , - 1013 , - 1378 , - 175 , - 988 , - 233 , - 1494 , - 1187 , - 1104 , - 1245 , - 1610 , - 407 , - 1220 , - 465 , - 1726 , - 1419 , - 1336 , - 1477 , - 50 , - 639 , - 1452 , - 697 , - 166 , - 1651 , - 1568 , - 1709 , - 282 , - 871 , - 1684 , - 929 , - 398 , - 91 , - 8 , - 149 , - 514 , - 1103 , - 124 , - 1161 , - 630 , - 323 , - 240 , - 381 , - 746 , - 1335 , - 356 , - 1393 , - 862 , - 555 , - 472 , - 613 , - 978 , - 1567 , - 588 , - 1625 , - 1094 , - 787 , - 704 , - 845 , - 1210 , - 7 , - 820 , - 65 , - 1326 , - 1019 , - 936 , - 1077 , - 1442 , - 239 , - 1052 , - 297 , - 1558 , - 1251 , - 1168 , - 1309 , - 1674 , - 471 , - 1284 , - 529 , - 1790 , - 1483 , - 1400 , - 1541 , - 114 , - 703 , - 1516 , - 761 , - 230 , - 1715 , - 1632 , - 1773 , - 346 , - 935 , - 1748 , - 993 , - 462 , - 155 , - 72 , - 213 , - 578 , - 1167 , - 188 , - 1225 , - 694 , - 387 , - 304 , - 445 , - 810 , - 1399 , - 420 , - 1457 , - 926 , - 619 , - 536 , - 677 , - 1042 , - 1631 , - 652 , - 1689 , - 1158 , - 851 , - 768 , - 909 , - 1274 , - 71 , - 884 , - 129 , - 1390 , - 1083 , - 1000 , - 1141 , - 1506 , - 303 , - 1116 , - 361 , - 1622 , - 1315 , - 1232 , - 1373 , - 1738 , - 535 , - 1348 , - 593 , - 62 , - 1547 , - 1464 , - 1605 , - 178 , - 767 , - 1580 , - 825 , - 294 , - 1779 , - 1696 , - 45 , - 410 , - 999 , - 20 , - 1057 , - 526 , - 219 , - 136 , - 277 , - 642 , - 1231 , - 252 , - 1289 , - 758 , - 451 , - 368 , - 509 , - 874 , - 1463 , - 484 , - 1521 , - 990 , - 683 , - 600 , - 741 , - 1106 , - 1695 , - 716 , - 1753 , - 1222 , - 915 , - 832 , - 973 , - 1338 , - 135 , - 948 , - 193 , - 1454 , - 1147 , - 1064 , - 1205 , - 1570 , - 367 , - 1180 , - 425 , - 1686 , - 1379 , - 1296 , - 1437 , - 10 , - 599 , - 1412 , - 657 , - 126 , - 1611 , - 1528 , - 1669 , - 242 , - 831 , - 1644 , - 889 , - 358 , - 51 , - 1760 , - 109 , - 474 , - 1063 , - 84 , - 1121 , - 590 , - 283 , - 200 , - 341 , - 706 , - 1295 , - 316 , - 1353 , - 822 , - 515 , - 432 , - 573 , - 938 , - 1527 , - 548 , - 1585 , - 1054 , - 747 , - 664 , - 805 , - 1170 , - 1759 , - 780 , - 25 , - 1286 , - 979 , - 896 , - 1037 , - 1402 , - 199 , - 1012 , - 257 , - 1518 , - 1211 , - 1128 , - 1269 , - 1634 , - 431 , - 1244 , - 489 , - 1750 , - 1443 , - 1360 , - 1501 , - 74 , - 663 , - 1476 , - 721 , - 190 , - 1675 , - 1592 , - 1733 , - 306 , - 895 , - 1708 , - 953 , - 422 , - 115 , - 32 , - 173 , - 538 , - 1127 , - 148 , - 1185 , - 654 , - 347 , - 264 , - 405 , - 770 , - 1359 , - 380 , - 1417 , - 886 , - 579 , - 496 , - 637 , - 1002 , - 1591 , - 612 , - 1649 , - 1118 , - 811 , - 728 , - 869 , - 1234 , - 31 , - 844 , - 89 , - 1350 , - 1043 , - 960 , - 1101 , - 1466 , - 263 , - 1076 , - 321 , - 1582 , - 1275 , - 1192 , - 1333 , - 1698 , - 495 , - 1308 , - 553 , - 22 , - 1507 , - 1424 , - 1565 , - 138 , - 727 , - 1540 , - 785 , - 254 , - 1739 , - 1656 , - 5 , - 370 , - 959 , - 1772 , - 1017 , - 486 , - 179 , - 96 , - 237 , - 602 , - 1191 , - 212 , - 1249 , - 718 , - 411 , - 328 , - 469 , - 834 , - 1423 , - 444 , - 1481 , - 950 , - 643 , - 560 , - 701 , - 1066 , - 1655 , - 676 , - 1713 , - 1182 , - 875 , - 792 , - 933 , - 1298 , - 95 , - 908 , - 153 , - 1414 , - 1107 , - 1024 , - 1165 , - 1530 , - 327 , - 1140 , - 385 , - 1646 , - 1339 , - 1256 , - 1397 , - 1762 , - 559 , - 1372 , - 617 , - 86 , - 1571 , - 1488 , - 1629 , - 202 , - 791 , - 1604 , - 849 , - 318 , - 11 , - 1720 , - 69 , - 434 , - 1023 , - 44 , - 1081 , - 550 , - 243 , - 160 , - 301 , - 666 , - 1255 , - 276 , - 1313 , - 782 , - 475 , - 392 , - 533 , - 898 , - 1487 , - 508 , - 1545 , - 1014 , - 707 , - 624 , - 765 , - 1130 , - 1719 , - 740 , - 1777 , - 1246 , - 939 , - 856 , - 997 , - 1362 , - 159 , - 972 , - 217 , - 1478 , - 1171 , - 1088 , - 1229 , - 1594 , - 391 , - 1204 , - 449 , - 1710 , - 1403 , - 1320 , - 1461 , - 34 , - 623 , - 1436 , - 681 , - 150 , - 1635 , - 1552 , - 1693 , - 266 , - 855 , - 1668 , - 913 , - 382 , - 75 , - 1784 , - 133 , - 498 , - 1087 , - 108 , - 1145 , - 614 , - 307 , - 224 , - 365 , - 730 , - 1319 , - 340 , - 1377 , - 846 , - 539 , - 456 , - 597 , - 962 , - 1551 , - 572 , - 1609 , - 1078 , - 771 , - 688 , - 829 , - 1194 , - 1783 , - 804 , - 49 , - 1310 , - 1003 , - 920 , - 1061 , - 1426 , - 223 , - 1036 , - 281 , - 1542 , - 1235 , - 1152 , - 1293 , - 1658 , - 455 , - 1268 , - 513 , - 1774 , - 1467 , - 1384 , - 1525 , - 98 , - 687 , - 1500 , - 745 , - 214 , - 1699 , - 1616 , - 1757 , - 330 , - 919 , - 1732 , - 977 , - 446 , - 139 , - 56 , - 197 , - 562 , - 1151 , - 172 , - 1209 , - 678 , - 371 , - 288 , - 429 , - 794 , - 1383 , - 404 , - 1441 , - 910 , - 603 , - 520 , - 661 , - 1026 , - 1615 , - 636 , - 1673 , - 1142 , - 835 , - 752 , - 893 , - 1258 , - 55 , - 868 , - 113 , - 1374 , - 1067 , - 984 , - 1125 , - 1490 , - 287 , - 1100 , - 345 , - 1606 , - 1299 , - 1216 , - 1357 , - 1722 , - 519 , - 1332 , - 577 , - 46 , - 1531 , - 1448 , - 1589 , - 162 , - 751 , - 1564 , - 809 , - 278 , - 1763 , - 1680 , - 29 , - 394 , - 983 , - 4 , - 1041 , - 510 , - 203 , - 120 , - 261 , - 626 , - 1215 , - 236 , - 1273 , - 742 , - 435 , - 352 , - 493 , - 858 , - 1447 , - 468 , - 1505 , - 974 , - 667 , - 584 , - 725 , - 1090 , - 1679 , - 700 , - 1737 , - 1206 , - 899 , - 816 , - 957 , - 1322 , - 119 , - 932 , - 177 , - 1438 , - 1131 , - 1048 , - 1189 , - 1554 , - 351 , - 1164 , - 409 , - 1670 , - 1363 , - 1280 , - 1421 , - 1786 , - 583 , - 1396 , - 641 , - 110 , - 1595 , - 1512 , - 1653 , - 226 , - 815 , - 1628 , - 873 , - 342 , - 35 , - 1744 , - 93 , - 458 , - 1047 , - 68 , - 1105 , - 574 , - 267 , - 184 , - 325 , - 690 , - 1279 , - 300 , - 1337 , - 806 , - 499 , - 416 , - 557 , - 922 , - 1511 , - 532 , - 1569 , - 1038 , - 731 , - 648 , - 789 , - 1154 , - 1743 , - 764 , - 9 , - 1270 , - 963 , - 880 , - 1021 , - 1386 , - 183 , - 996 , - 241 , - 1502 , - 1195 , - 1112 , - 1253 , - 1618 , - 415 , - 1228 , - 473 , - 1734 , - 1427 , - 1344 , - 1485 , - 58 , - 647 , - 1460 , - 705 , - 174 , - 1659 , - 1576 , - 1717 , - 290 , - 879 , - 1692 , - 937 , - 406 , - 99 , - 16 , - 157 , - 522 , - 1111 , - 132 , - 1169 , - 638 , - 331 , - 248 , - 389 , - 754 , - 1343 , - 364 , - 1401 , - 870 , - 563 , - 480 , - 621 , - 986 , - 1575 , - 596 , - 1633 , - 1102 , - 795 , - 712 , - 853 , - 1218 , - 15 , - 828 , - 73 , - 1334 , - 1027 , - 944 , - 1085 , - 1450 , - 247 , - 1060 , - 305 , - 1566 , - 1259 , - 1176 , - 1317 , - 1682 , - 479 , - 1292 , - 537 , - 6 , - 1491 , - 1408 , - 1549 , - 122 , - 711 , - 1524 , - 769 , - 238 , - 1723 , - 1640 , - 1781 , - 354 , - 943 , - 1756 , - 1001 , - 470 , - 163 , - 80 , - 221 , - 586 , - 1175 , - 196 , - 1233 , - 702 , - 395 , - 312 , - 453 , - 818 , - 1407 , - 428 , - 1465 , - 934 , - 627 , - 544 , - 685 , - 1050 , - 1639 , - 660 , - 1697 , - 1166 , - 859 , - 776 , - 917 , - 1282 , - 79 , - 892 , - 137 , - 1398 , - 1091 , - 1008 , - 1149 , - 1514 , - 311 , - 1124 , - 369 , - 1630 , - 1323 , - 1240 , - 1381 , - 1746 , - 543 , - 1356 , - 601 , - 70 , - 1555 , - 1472 , - 1613 , - 186 , - 775 , - 1588 , - 833 , - 302 , - 1787 , - 1704 , - 53 , - 418 , - 1007 , - 28 , - 1065 , - 534 , - 227 , - 144 , - 285 , - 650 , - 1239 , - 260 , - 1297 , - 766 , - 459 , - 376 , - 517 , - 882 , - 1471 , - 492 , - 1529 , - 998 , - 691 , - 608 , - 749 , - 1114 , - 1703 , - 724 , - 1761 , - 1230 , - 923 , - 840 , - 981 , - 1346 , - 143 , - 956 , - 201 , - 1462 , - 1155 , - 1072 , - 1213 , - 1578 , - 375 , - 1188 , - 433 , - 1694 , - 1387 , - 1304 , - 1445 , - 18 , - 607 , - 1420 , - 665 , - 134 , - 1619 , - 1536 , - 1677 , - 250 , - 839 , - 1652 , - 897 , - 366 , - 59 , - 1768 , - 117 , - 482 , - 1071 , - 92 , - 1129 , - 598 , - 291 , - 208 , - 349 , - 714 , - 1303 , - 324 , - 1361 , - 830 , - 523 , - 440 , - 581 , - 946 , - 1535 , - 556 , - 1593 , - 1062 , - 755 , - 672 , - 813 , - 1178 , - 1767 , - 788 , - 33 , - 1294 , - 987 , - 904 , - 1045 , - 1410 , - 207 , - 1020 , - 265 , - 1526 , - 1219 , - 1136 , - 1277 , - 1642 , - 439 , - 1252 , - 497 , - 1758 , - 1451 , - 1368 , - 1509 , - 82 , - 671 , - 1484 , - 729 , - 198 , - 1683 , - 1600 , - 1741 , - 314 , - 903 , - 1716 , - 961 , - 430 , - 123 , - 40 , - 181 , - 546 , - 1135 , - 156 , - 1193 , - 662 , - 355 , - 272 , - 413 , - 778 , - 1367 , - 388 , - 1425 , - 894 , - 587 , - 504 , - 645 , - 1010 , - 1599 , - 620 , - 1657 , - 1126 , - 819 , - 736 , - 877 , - 1242 , - 39 , - 852 , - 97 , - 1358 , - 1051 , - 968 , - 1109 , - 1474 , - 271 , - 1084 , - 329 , - 1590 , - 1283 , - 1200 , - 1341 , - 1706 , - 503 , - 1316 , - 561 , - 30 , - 1515 , - 1432 , - 1573 , - 146 , - 735 , - 1548 , - 793 , - 262 , - 1747 , - 1664 , - 13 , - 378 , - 967 , - 1780 , - 1025 , - 494 , - 187 , - 104 , - 245 , - 610 , - 1199 , - 220 , - 1257 , - 726 , - 419 , - 336 , - 477 , - 842 , - 1431 , - 452 , - 1489 , - 958 , - 651 , - 568 , - 709 , - 1074 , - 1663 , - 684 , - 1721 , - 1190 , - 883 , - 800 , - 941 , - 1306 , - 103 , - 916 , - 161 , - 1422 , - 1115 , - 1032 , - 1173 , - 1538 , - 335 , - 1148 , - 393 , - 1654 , - 1347 , - 1264 , - 1405 , - 1770 , - 567 , - 1380 , - 625 , - 94 , - 1579 , - 1496 , - 1637 , - 210 , - 799 , - 1612 , - 857 , - 326 , - 19 , - 1728 , - 77 , - 442 , - 1031 , - 52 , - 1089 , - 558 , - 251 , - 168 , - 309 , - 674 , - 1263 , - 284 , - 1321 , - 790 , - 483 , - 400 , - 541 , - 906 , - 1495 , - 516 , - 1553 , - 1022 , - 715 , - 632 , - 773 , - 1138 , - 1727 , - 748 , - 1785 , - 1254 , - 947 , - 864 , - 1005 , - 1370 , - 167 , - 980 , - 225 , - 1486 , - 1179 , - 1096 , - 1237 , - 1602 , - 399 , - 1212 , - 457 , - 1718 , - 1411 , - 1328 , - 1469 , - 42 , - 631 , - 1444 , - 689 , - 158 , - 1643 , - 1560 , - 1701 , - 274 , - 863 , - 1676 , - 921 , - 390 , - 83 , - 0 , - 143 , - 514 , - 1113 , - 116 , - 1171 , - 630 , - 317 , - 232 , - 375 , - 746 , - 1345 , - 348 , - 1403 , - 862 , - 549 , - 464 , - 607 , - 978 , - 1577 , - 580 , - 1635 , - 1094 , - 781 , - 696 , - 839 , - 1210 , - 1809 , - 812 , - 43 , - 1326 , - 1013 , - 928 , - 1071 , - 1442 , - 217 , - 1044 , - 275 , - 1558 , - 1245 , - 1160 , - 1303 , - 1674 , - 449 , - 1276 , - 507 , - 1790 , - 1477 , - 1392 , - 1535 , - 82 , - 681 , - 1508 , - 739 , - 198 , - 1709 , - 1624 , - 1767 , - 314 , - 913 , - 1740 , - 971 , - 430 , - 117 , - 32 , - 175 , - 546 , - 1145 , - 148 , - 1203 , - 662 , - 349 , - 264 , - 407 , - 778 , - 1377 , - 380 , - 1435 , - 894 , - 581 , - 496 , - 639 , - 1010 , - 1609 , - 612 , - 1667 , - 1126 , - 813 , - 728 , - 871 , - 1242 , - 17 , - 844 , - 75 , - 1358 , - 1045 , - 960 , - 1103 , - 1474 , - 249 , - 1076 , - 307 , - 1590 , - 1277 , - 1192 , - 1335 , - 1706 , - 481 , - 1308 , - 539 , - 1822 , - 1509 , - 1424 , - 1567 , - 114 , - 713 , - 1540 , - 771 , - 230 , - 1741 , - 1656 , - 1799 , - 346 , - 945 , - 1772 , - 1003 , - 462 , - 149 , - 64 , - 207 , - 578 , - 1177 , - 180 , - 1235 , - 694 , - 381 , - 296 , - 439 , - 810 , - 1409 , - 412 , - 1467 , - 926 , - 613 , - 528 , - 671 , - 1042 , - 1641 , - 644 , - 1699 , - 1158 , - 845 , - 760 , - 903 , - 1274 , - 49 , - 876 , - 107 , - 1390 , - 1077 , - 992 , - 1135 , - 1506 , - 281 , - 1108 , - 339 , - 1622 , - 1309 , - 1224 , - 1367 , - 1738 , - 513 , - 1340 , - 571 , - 30 , - 1541 , - 1456 , - 1599 , - 146 , - 745 , - 1572 , - 803 , - 262 , - 1773 , - 1688 , - 7 , - 378 , - 977 , - 1804 , - 1035 , - 494 , - 181 , - 96 , - 239 , - 610 , - 1209 , - 212 , - 1267 , - 726 , - 413 , - 328 , - 471 , - 842 , - 1441 , - 444 , - 1499 , - 958 , - 645 , - 560 , - 703 , - 1074 , - 1673 , - 676 , - 1731 , - 1190 , - 877 , - 792 , - 935 , - 1306 , - 81 , - 908 , - 139 , - 1422 , - 1109 , - 1024 , - 1167 , - 1538 , - 313 , - 1140 , - 371 , - 1654 , - 1341 , - 1256 , - 1399 , - 1770 , - 545 , - 1372 , - 603 , - 62 , - 1573 , - 1488 , - 1631 , - 178 , - 777 , - 1604 , - 835 , - 294 , - 1805 , - 1720 , - 39 , - 410 , - 1009 , - 12 , - 1067 , - 526 , - 213 , - 128 , - 271 , - 642 , - 1241 , - 244 , - 1299 , - 758 , - 445 , - 360 , - 503 , - 874 , - 1473 , - 476 , - 1531 , - 990 , - 677 , - 592 , - 735 , - 1106 , - 1705 , - 708 , - 1763 , - 1222 , - 909 , - 824 , - 967 , - 1338 , - 113 , - 940 , - 171 , - 1454 , - 1141 , - 1056 , - 1199 , - 1570 , - 345 , - 1172 , - 403 , - 1686 , - 1373 , - 1288 , - 1431 , - 1802 , - 577 , - 1404 , - 635 , - 94 , - 1605 , - 1520 , - 1663 , - 210 , - 809 , - 1636 , - 867 , - 326 , - 13 , - 1752 , - 71 , - 442 , - 1041 , - 44 , - 1099 , - 558 , - 245 , - 160 , - 303 , - 674 , - 1273 , - 276 , - 1331 , - 790 , - 477 , - 392 , - 535 , - 906 , - 1505 , - 508 , - 1563 , - 1022 , - 709 , - 624 , - 767 , - 1138 , - 1737 , - 740 , - 1795 , - 1254 , - 941 , - 856 , - 999 , - 1370 , - 145 , - 972 , - 203 , - 1486 , - 1173 , - 1088 , - 1231 , - 1602 , - 377 , - 1204 , - 435 , - 1718 , - 1405 , - 1320 , - 1463 , - 10 , - 609 , - 1436 , - 667 , - 126 , - 1637 , - 1552 , - 1695 , - 242 , - 841 , - 1668 , - 899 , - 358 , - 45 , - 1784 , - 103 , - 474 , - 1073 , - 76 , - 1131 , - 590 , - 277 , - 192 , - 335 , - 706 , - 1305 , - 308 , - 1363 , - 822 , - 509 , - 424 , - 567 , - 938 , - 1537 , - 540 , - 1595 , - 1054 , - 741 , - 656 , - 799 , - 1170 , - 1769 , - 772 , - 3 , - 1286 , - 973 , - 888 , - 1031 , - 1402 , - 177 , - 1004 , - 235 , - 1518 , - 1205 , - 1120 , - 1263 , - 1634 , - 409 , - 1236 , - 467 , - 1750 , - 1437 , - 1352 , - 1495 , - 42 , - 641 , - 1468 , - 699 , - 158 , - 1669 , - 1584 , - 1727 , - 274 , - 873 , - 1700 , - 931 , - 390 , - 77 , - 1816 , - 135 , - 506 , - 1105 , - 108 , - 1163 , - 622 , - 309 , - 224 , - 367 , - 738 , - 1337 , - 340 , - 1395 , - 854 , - 541 , - 456 , - 599 , - 970 , - 1569 , - 572 , - 1627 , - 1086 , - 773 , - 688 , - 831 , - 1202 , - 1801 , - 804 , - 35 , - 1318 , - 1005 , - 920 , - 1063 , - 1434 , - 209 , - 1036 , - 267 , - 1550 , - 1237 , - 1152 , - 1295 , - 1666 , - 441 , - 1268 , - 499 , - 1782 , - 1469 , - 1384 , - 1527 , - 74 , - 673 , - 1500 , - 731 , - 190 , - 1701 , - 1616 , - 1759 , - 306 , - 905 , - 1732 , - 963 , - 422 , - 109 , - 24 , - 167 , - 538 , - 1137 , - 140 , - 1195 , - 654 , - 341 , - 256 , - 399 , - 770 , - 1369 , - 372 , - 1427 , - 886 , - 573 , - 488 , - 631 , - 1002 , - 1601 , - 604 , - 1659 , - 1118 , - 805 , - 720 , - 863 , - 1234 , - 9 , - 836 , - 67 , - 1350 , - 1037 , - 952 , - 1095 , - 1466 , - 241 , - 1068 , - 299 , - 1582 , - 1269 , - 1184 , - 1327 , - 1698 , - 473 , - 1300 , - 531 , - 1814 , - 1501 , - 1416 , - 1559 , - 106 , - 705 , - 1532 , - 763 , - 222 , - 1733 , - 1648 , - 1791 , - 338 , - 937 , - 1764 , - 995 , - 454 , - 141 , - 56 , - 199 , - 570 , - 1169 , - 172 , - 1227 , - 686 , - 373 , - 288 , - 431 , - 802 , - 1401 , - 404 , - 1459 , - 918 , - 605 , - 520 , - 663 , - 1034 , - 1633 , - 636 , - 1691 , - 1150 , - 837 , - 752 , - 895 , - 1266 , - 41 , - 868 , - 99 , - 1382 , - 1069 , - 984 , - 1127 , - 1498 , - 273 , - 1100 , - 331 , - 1614 , - 1301 , - 1216 , - 1359 , - 1730 , - 505 , - 1332 , - 563 , - 22 , - 1533 , - 1448 , - 1591 , - 138 , - 737 , - 1564 , - 795 , - 254 , - 1765 , - 1680 , - 1823 , - 370 , - 969 , - 1796 , - 1027 , - 486 , - 173 , - 88 , - 231 , - 602 , - 1201 , - 204 , - 1259 , - 718 , - 405 , - 320 , - 463 , - 834 , - 1433 , - 436 , - 1491 , - 950 , - 637 , - 552 , - 695 , - 1066 , - 1665 , - 668 , - 1723 , - 1182 , - 869 , - 784 , - 927 , - 1298 , - 73 , - 900 , - 131 , - 1414 , - 1101 , - 1016 , - 1159 , - 1530 , - 305 , - 1132 , - 363 , - 1646 , - 1333 , - 1248 , - 1391 , - 1762 , - 537 , - 1364 , - 595 , - 54 , - 1565 , - 1480 , - 1623 , - 170 , - 769 , - 1596 , - 827 , - 286 , - 1797 , - 1712 , - 31 , - 402 , - 1001 , - 4 , - 1059 , - 518 , - 205 , - 120 , - 263 , - 634 , - 1233 , - 236 , - 1291 , - 750 , - 437 , - 352 , - 495 , - 866 , - 1465 , - 468 , - 1523 , - 982 , - 669 , - 584 , - 727 , - 1098 , - 1697 , - 700 , - 1755 , - 1214 , - 901 , - 816 , - 959 , - 1330 , - 105 , - 932 , - 163 , - 1446 , - 1133 , - 1048 , - 1191 , - 1562 , - 337 , - 1164 , - 395 , - 1678 , - 1365 , - 1280 , - 1423 , - 1794 , - 569 , - 1396 , - 627 , - 86 , - 1597 , - 1512 , - 1655 , - 202 , - 801 , - 1628 , - 859 , - 318 , - 5 , - 1744 , - 63 , - 434 , - 1033 , - 36 , - 1091 , - 550 , - 237 , - 152 , - 295 , - 666 , - 1265 , - 268 , - 1323 , - 782 , - 469 , - 384 , - 527 , - 898 , - 1497 , - 500 , - 1555 , - 1014 , - 701 , - 616 , - 759 , - 1130 , - 1729 , - 732 , - 1787 , - 1246 , - 933 , - 848 , - 991 , - 1362 , - 137 , - 964 , - 195 , - 1478 , - 1165 , - 1080 , - 1223 , - 1594 , - 369 , - 1196 , - 427 , - 1710 , - 1397 , - 1312 , - 1455 , - 2 , - 601 , - 1428 , - 659 , - 118 , - 1629 , - 1544 , - 1687 , - 234 , - 833 , - 1660 , - 891 , - 350 , - 37 , - 1776 , - 95 , - 466 , - 1065 , - 68 , - 1123 , - 582 , - 269 , - 184 , - 327 , - 698 , - 1297 , - 300 , - 1355 , - 814 , - 501 , - 416 , - 559 , - 930 , - 1529 , - 532 , - 1587 , - 1046 , - 733 , - 648 , - 791 , - 1162 , - 1761 , - 764 , - 1819 , - 1278 , - 965 , - 880 , - 1023 , - 1394 , - 169 , - 996 , - 227 , - 1510 , - 1197 , - 1112 , - 1255 , - 1626 , - 401 , - 1228 , - 459 , - 1742 , - 1429 , - 1344 , - 1487 , - 34 , - 633 , - 1460 , - 691 , - 150 , - 1661 , - 1576 , - 1719 , - 266 , - 865 , - 1692 , - 923 , - 382 , - 69 , - 1808 , - 127 , - 498 , - 1097 , - 100 , - 1155 , - 614 , - 301 , - 216 , - 359 , - 730 , - 1329 , - 332 , - 1387 , - 846 , - 533 , - 448 , - 591 , - 962 , - 1561 , - 564 , - 1619 , - 1078 , - 765 , - 680 , - 823 , - 1194 , - 1793 , - 796 , - 27 , - 1310 , - 997 , - 912 , - 1055 , - 1426 , - 201 , - 1028 , - 259 , - 1542 , - 1229 , - 1144 , - 1287 , - 1658 , - 433 , - 1260 , - 491 , - 1774 , - 1461 , - 1376 , - 1519 , - 66 , - 665 , - 1492 , - 723 , - 182 , - 1693 , - 1608 , - 1751 , - 298 , - 897 , - 1724 , - 955 , - 414 , - 101 , - 16 , - 159 , - 530 , - 1129 , - 132 , - 1187 , - 646 , - 333 , - 248 , - 391 , - 762 , - 1361 , - 364 , - 1419 , - 878 , - 565 , - 480 , - 623 , - 994 , - 1593 , - 596 , - 1651 , - 1110 , - 797 , - 712 , - 855 , - 1226 , - 1 , - 828 , - 59 , - 1342 , - 1029 , - 944 , - 1087 , - 1458 , - 233 , - 1060 , - 291 , - 1574 , - 1261 , - 1176 , - 1319 , - 1690 , - 465 , - 1292 , - 523 , - 1806 , - 1493 , - 1408 , - 1551 , - 98 , - 697 , - 1524 , - 755 , - 214 , - 1725 , - 1640 , - 1783 , - 330 , - 929 , - 1756 , - 987 , - 446 , - 133 , - 48 , - 191 , - 562 , - 1161 , - 164 , - 1219 , - 678 , - 365 , - 280 , - 423 , - 794 , - 1393 , - 396 , - 1451 , - 910 , - 597 , - 512 , - 655 , - 1026 , - 1625 , - 628 , - 1683 , - 1142 , - 829 , - 744 , - 887 , - 1258 , - 33 , - 860 , - 91 , - 1374 , - 1061 , - 976 , - 1119 , - 1490 , - 265 , - 1092 , - 323 , - 1606 , - 1293 , - 1208 , - 1351 , - 1722 , - 497 , - 1324 , - 555 , - 14 , - 1525 , - 1440 , - 1583 , - 130 , - 729 , - 1556 , - 787 , - 246 , - 1757 , - 1672 , - 1815 , - 362 , - 961 , - 1788 , - 1019 , - 478 , - 165 , - 80 , - 223 , - 594 , - 1193 , - 196 , - 1251 , - 710 , - 397 , - 312 , - 455 , - 826 , - 1425 , - 428 , - 1483 , - 942 , - 629 , - 544 , - 687 , - 1058 , - 1657 , - 660 , - 1715 , - 1174 , - 861 , - 776 , - 919 , - 1290 , - 65 , - 892 , - 123 , - 1406 , - 1093 , - 1008 , - 1151 , - 1522 , - 297 , - 1124 , - 355 , - 1638 , - 1325 , - 1240 , - 1383 , - 1754 , - 529 , - 1356 , - 587 , - 46 , - 1557 , - 1472 , - 1615 , - 162 , - 761 , - 1588 , - 819 , - 278 , - 1789 , - 1704 , - 23 , - 394 , - 993 , - 1820 , - 1051 , - 510 , - 197 , - 112 , - 255 , - 626 , - 1225 , - 228 , - 1283 , - 742 , - 429 , - 344 , - 487 , - 858 , - 1457 , - 460 , - 1515 , - 974 , - 661 , - 576 , - 719 , - 1090 , - 1689 , - 692 , - 1747 , - 1206 , - 893 , - 808 , - 951 , - 1322 , - 97 , - 924 , - 155 , - 1438 , - 1125 , - 1040 , - 1183 , - 1554 , - 329 , - 1156 , - 387 , - 1670 , - 1357 , - 1272 , - 1415 , - 1786 , - 561 , - 1388 , - 619 , - 78 , - 1589 , - 1504 , - 1647 , - 194 , - 793 , - 1620 , - 851 , - 310 , - 1821 , - 1736 , - 55 , - 426 , - 1025 , - 28 , - 1083 , - 542 , - 229 , - 144 , - 287 , - 658 , - 1257 , - 260 , - 1315 , - 774 , - 461 , - 376 , - 519 , - 890 , - 1489 , - 492 , - 1547 , - 1006 , - 693 , - 608 , - 751 , - 1122 , - 1721 , - 724 , - 1779 , - 1238 , - 925 , - 840 , - 983 , - 1354 , - 129 , - 956 , - 187 , - 1470 , - 1157 , - 1072 , - 1215 , - 1586 , - 361 , - 1188 , - 419 , - 1702 , - 1389 , - 1304 , - 1447 , - 1818 , - 593 , - 1420 , - 651 , - 110 , - 1621 , - 1536 , - 1679 , - 226 , - 825 , - 1652 , - 883 , - 342 , - 29 , - 1768 , - 87 , - 458 , - 1057 , - 60 , - 1115 , - 574 , - 261 , - 176 , - 319 , - 690 , - 1289 , - 292 , - 1347 , - 806 , - 493 , - 408 , - 551 , - 922 , - 1521 , - 524 , - 1579 , - 1038 , - 725 , - 640 , - 783 , - 1154 , - 1753 , - 756 , - 1811 , - 1270 , - 957 , - 872 , - 1015 , - 1386 , - 161 , - 988 , - 219 , - 1502 , - 1189 , - 1104 , - 1247 , - 1618 , - 393 , - 1220 , - 451 , - 1734 , - 1421 , - 1336 , - 1479 , - 26 , - 625 , - 1452 , - 683 , - 142 , - 1653 , - 1568 , - 1711 , - 258 , - 857 , - 1684 , - 915 , - 374 , - 61 , - 1800 , - 119 , - 490 , - 1089 , - 92 , - 1147 , - 606 , - 293 , - 208 , - 351 , - 722 , - 1321 , - 324 , - 1379 , - 838 , - 525 , - 440 , - 583 , - 954 , - 1553 , - 556 , - 1611 , - 1070 , - 757 , - 672 , - 815 , - 1186 , - 1785 , - 788 , - 19 , - 1302 , - 989 , - 904 , - 1047 , - 1418 , - 193 , - 1020 , - 251 , - 1534 , - 1221 , - 1136 , - 1279 , - 1650 , - 425 , - 1252 , - 483 , - 1766 , - 1453 , - 1368 , - 1511 , - 58 , - 657 , - 1484 , - 715 , - 174 , - 1685 , - 1600 , - 1743 , - 290 , - 889 , - 1716 , - 947 , - 406 , - 93 , - 8 , - 151 , - 522 , - 1121 , - 124 , - 1179 , - 638 , - 325 , - 240 , - 383 , - 754 , - 1353 , - 356 , - 1411 , - 870 , - 557 , - 472 , - 615 , - 986 , - 1585 , - 588 , - 1643 , - 1102 , - 789 , - 704 , - 847 , - 1218 , - 1817 , - 820 , - 51 , - 1334 , - 1021 , - 936 , - 1079 , - 1450 , - 225 , - 1052 , - 283 , - 1566 , - 1253 , - 1168 , - 1311 , - 1682 , - 457 , - 1284 , - 515 , - 1798 , - 1485 , - 1400 , - 1543 , - 90 , - 689 , - 1516 , - 747 , - 206 , - 1717 , - 1632 , - 1775 , - 322 , - 921 , - 1748 , - 979 , - 438 , - 125 , - 40 , - 183 , - 554 , - 1153 , - 156 , - 1211 , - 670 , - 357 , - 272 , - 415 , - 786 , - 1385 , - 388 , - 1443 , - 902 , - 589 , - 504 , - 647 , - 1018 , - 1617 , - 620 , - 1675 , - 1134 , - 821 , - 736 , - 879 , - 1250 , - 25 , - 852 , - 83 , - 1366 , - 1053 , - 968 , - 1111 , - 1482 , - 257 , - 1084 , - 315 , - 1598 , - 1285 , - 1200 , - 1343 , - 1714 , - 489 , - 1316 , - 547 , - 6 , - 1517 , - 1432 , - 1575 , - 122 , - 721 , - 1548 , - 779 , - 238 , - 1749 , - 1664 , - 1807 , - 354 , - 953 , - 1780 , - 1011 , - 470 , - 157 , - 72 , - 215 , - 586 , - 1185 , - 188 , - 1243 , - 702 , - 389 , - 304 , - 447 , - 818 , - 1417 , - 420 , - 1475 , - 934 , - 621 , - 536 , - 679 , - 1050 , - 1649 , - 652 , - 1707 , - 1166 , - 853 , - 768 , - 911 , - 1282 , - 57 , - 884 , - 115 , - 1398 , - 1085 , - 1000 , - 1143 , - 1514 , - 289 , - 1116 , - 347 , - 1630 , - 1317 , - 1232 , - 1375 , - 1746 , - 521 , - 1348 , - 579 , - 38 , - 1549 , - 1464 , - 1607 , - 154 , - 753 , - 1580 , - 811 , - 270 , - 1781 , - 1696 , - 15 , - 386 , - 985 , - 1812 , - 1043 , - 502 , - 189 , - 104 , - 247 , - 618 , - 1217 , - 220 , - 1275 , - 734 , - 421 , - 336 , - 479 , - 850 , - 1449 , - 452 , - 1507 , - 966 , - 653 , - 568 , - 711 , - 1082 , - 1681 , - 684 , - 1739 , - 1198 , - 885 , - 800 , - 943 , - 1314 , - 89 , - 916 , - 147 , - 1430 , - 1117 , - 1032 , - 1175 , - 1546 , - 321 , - 1148 , - 379 , - 1662 , - 1349 , - 1264 , - 1407 , - 1778 , - 553 , - 1380 , - 611 , - 70 , - 1581 , - 1496 , - 1639 , - 186 , - 785 , - 1612 , - 843 , - 302 , - 1813 , - 1728 , - 47 , - 418 , - 1017 , - 20 , - 1075 , - 534 , - 221 , - 136 , - 279 , - 650 , - 1249 , - 252 , - 1307 , - 766 , - 453 , - 368 , - 511 , - 882 , - 1481 , - 484 , - 1539 , - 998 , - 685 , - 600 , - 743 , - 1114 , - 1713 , - 716 , - 1771 , - 1230 , - 917 , - 832 , - 975 , - 1346 , - 121 , - 948 , - 179 , - 1462 , - 1149 , - 1064 , - 1207 , - 1578 , - 353 , - 1180 , - 411 , - 1694 , - 1381 , - 1296 , - 1439 , - 1810 , - 585 , - 1412 , - 643 , - 102 , - 1613 , - 1528 , - 1671 , - 218 , - 817 , - 1644 , - 875 , - 334 , - 21 , - 1760 , - 79 , - 450 , - 1049 , - 52 , - 1107 , - 566 , - 253 , - 168 , - 311 , - 682 , - 1281 , - 284 , - 1339 , - 798 , - 485 , - 400 , - 543 , - 914 , - 1513 , - 516 , - 1571 , - 1030 , - 717 , - 632 , - 775 , - 1146 , - 1745 , - 748 , - 1803 , - 1262 , - 949 , - 864 , - 1007 , - 1378 , - 153 , - 980 , - 211 , - 1494 , - 1181 , - 1096 , - 1239 , - 1610 , - 385 , - 1212 , - 443 , - 1726 , - 1413 , - 1328 , - 1471 , - 18 , - 617 , - 1444 , - 675 , - 134 , - 1645 , - 1560 , - 1703 , - 250 , - 849 , - 1676 , - 907 , - 366 , - 53 , - 1792 , - 111 , - 482 , - 1081 , - 84 , - 1139 , - 598 , - 285 , - 200 , - 343 , - 714 , - 1313 , - 316 , - 1371 , - 830 , - 517 , - 432 , - 575 , - 946 , - 1545 , - 548 , - 1603 , - 1062 , - 749 , - 664 , - 807 , - 1178 , - 1777 , - 780 , - 11 , - 1294 , - 981 , - 896 , - 1039 , - 1410 , - 185 , - 1012 , - 243 , - 1526 , - 1213 , - 1128 , - 1271 , - 1642 , - 417 , - 1244 , - 475 , - 1758 , - 1445 , - 1360 , - 1503 , - 50 , - 649 , - 1476 , - 707 , - 166 , - 1677 , - 1592 , - 1735 , - 282 , - 881 , - 1708 , - 939 , - 398 , - 85 , - 0 , - 173 , - 578 , - 1215 , - 228 , - 1329 , - 806 , - 515 , - 456 , - 629 , - 1034 , - 1671 , - 684 , - 1785 , - 1262 , - 971 , - 912 , - 1085 , - 1490 , - 271 , - 1140 , - 385 , - 1718 , - 1427 , - 1368 , - 1541 , - 90 , - 727 , - 1596 , - 841 , - 318 , - 27 , - 1824 , - 141 , - 546 , - 1183 , - 196 , - 1297 , - 774 , - 483 , - 424 , - 597 , - 1002 , - 1639 , - 652 , - 1753 , - 1230 , - 939 , - 880 , - 1053 , - 1458 , - 239 , - 1108 , - 353 , - 1686 , - 1395 , - 1336 , - 1509 , - 58 , - 695 , - 1564 , - 809 , - 286 , - 1851 , - 1792 , - 109 , - 514 , - 1151 , - 164 , - 1265 , - 742 , - 451 , - 392 , - 565 , - 970 , - 1607 , - 620 , - 1721 , - 1198 , - 907 , - 848 , - 1021 , - 1426 , - 207 , - 1076 , - 321 , - 1654 , - 1363 , - 1304 , - 1477 , - 26 , - 663 , - 1532 , - 777 , - 254 , - 1819 , - 1760 , - 77 , - 482 , - 1119 , - 132 , - 1233 , - 710 , - 419 , - 360 , - 533 , - 938 , - 1575 , - 588 , - 1689 , - 1166 , - 875 , - 816 , - 989 , - 1394 , - 175 , - 1044 , - 289 , - 1622 , - 1331 , - 1272 , - 1445 , - 1850 , - 631 , - 1500 , - 745 , - 222 , - 1787 , - 1728 , - 45 , - 450 , - 1087 , - 100 , - 1201 , - 678 , - 387 , - 328 , - 501 , - 906 , - 1543 , - 556 , - 1657 , - 1134 , - 843 , - 784 , - 957 , - 1362 , - 143 , - 1012 , - 257 , - 1590 , - 1299 , - 1240 , - 1413 , - 1818 , - 599 , - 1468 , - 713 , - 190 , - 1755 , - 1696 , - 13 , - 418 , - 1055 , - 68 , - 1169 , - 646 , - 355 , - 296 , - 469 , - 874 , - 1511 , - 524 , - 1625 , - 1102 , - 811 , - 752 , - 925 , - 1330 , - 111 , - 980 , - 225 , - 1558 , - 1267 , - 1208 , - 1381 , - 1786 , - 567 , - 1436 , - 681 , - 158 , - 1723 , - 1664 , - 1837 , - 386 , - 1023 , - 36 , - 1137 , - 614 , - 323 , - 264 , - 437 , - 842 , - 1479 , - 492 , - 1593 , - 1070 , - 779 , - 720 , - 893 , - 1298 , - 79 , - 948 , - 193 , - 1526 , - 1235 , - 1176 , - 1349 , - 1754 , - 535 , - 1404 , - 649 , - 126 , - 1691 , - 1632 , - 1805 , - 354 , - 991 , - 4 , - 1105 , - 582 , - 291 , - 232 , - 405 , - 810 , - 1447 , - 460 , - 1561 , - 1038 , - 747 , - 688 , - 861 , - 1266 , - 47 , - 916 , - 161 , - 1494 , - 1203 , - 1144 , - 1317 , - 1722 , - 503 , - 1372 , - 617 , - 94 , - 1659 , - 1600 , - 1773 , - 322 , - 959 , - 1828 , - 1073 , - 550 , - 259 , - 200 , - 373 , - 778 , - 1415 , - 428 , - 1529 , - 1006 , - 715 , - 656 , - 829 , - 1234 , - 15 , - 884 , - 129 , - 1462 , - 1171 , - 1112 , - 1285 , - 1690 , - 471 , - 1340 , - 585 , - 62 , - 1627 , - 1568 , - 1741 , - 290 , - 927 , - 1796 , - 1041 , - 518 , - 227 , - 168 , - 341 , - 746 , - 1383 , - 396 , - 1497 , - 974 , - 683 , - 624 , - 797 , - 1202 , - 1839 , - 852 , - 97 , - 1430 , - 1139 , - 1080 , - 1253 , - 1658 , - 439 , - 1308 , - 553 , - 30 , - 1595 , - 1536 , - 1709 , - 258 , - 895 , - 1764 , - 1009 , - 486 , - 195 , - 136 , - 309 , - 714 , - 1351 , - 364 , - 1465 , - 942 , - 651 , - 592 , - 765 , - 1170 , - 1807 , - 820 , - 65 , - 1398 , - 1107 , - 1048 , - 1221 , - 1626 , - 407 , - 1276 , - 521 , - 1854 , - 1563 , - 1504 , - 1677 , - 226 , - 863 , - 1732 , - 977 , - 454 , - 163 , - 104 , - 277 , - 682 , - 1319 , - 332 , - 1433 , - 910 , - 619 , - 560 , - 733 , - 1138 , - 1775 , - 788 , - 33 , - 1366 , - 1075 , - 1016 , - 1189 , - 1594 , - 375 , - 1244 , - 489 , - 1822 , - 1531 , - 1472 , - 1645 , - 194 , - 831 , - 1700 , - 945 , - 422 , - 131 , - 72 , - 245 , - 650 , - 1287 , - 300 , - 1401 , - 878 , - 587 , - 528 , - 701 , - 1106 , - 1743 , - 756 , - 1 , - 1334 , - 1043 , - 984 , - 1157 , - 1562 , - 343 , - 1212 , - 457 , - 1790 , - 1499 , - 1440 , - 1613 , - 162 , - 799 , - 1668 , - 913 , - 390 , - 99 , - 40 , - 213 , - 618 , - 1255 , - 268 , - 1369 , - 846 , - 555 , - 496 , - 669 , - 1074 , - 1711 , - 724 , - 1825 , - 1302 , - 1011 , - 952 , - 1125 , - 1530 , - 311 , - 1180 , - 425 , - 1758 , - 1467 , - 1408 , - 1581 , - 130 , - 767 , - 1636 , - 881 , - 358 , - 67 , - 8 , - 181 , - 586 , - 1223 , - 236 , - 1337 , - 814 , - 523 , - 464 , - 637 , - 1042 , - 1679 , - 692 , - 1793 , - 1270 , - 979 , - 920 , - 1093 , - 1498 , - 279 , - 1148 , - 393 , - 1726 , - 1435 , - 1376 , - 1549 , - 98 , - 735 , - 1604 , - 849 , - 326 , - 35 , - 1832 , - 149 , - 554 , - 1191 , - 204 , - 1305 , - 782 , - 491 , - 432 , - 605 , - 1010 , - 1647 , - 660 , - 1761 , - 1238 , - 947 , - 888 , - 1061 , - 1466 , - 247 , - 1116 , - 361 , - 1694 , - 1403 , - 1344 , - 1517 , - 66 , - 703 , - 1572 , - 817 , - 294 , - 3 , - 1800 , - 117 , - 522 , - 1159 , - 172 , - 1273 , - 750 , - 459 , - 400 , - 573 , - 978 , - 1615 , - 628 , - 1729 , - 1206 , - 915 , - 856 , - 1029 , - 1434 , - 215 , - 1084 , - 329 , - 1662 , - 1371 , - 1312 , - 1485 , - 34 , - 671 , - 1540 , - 785 , - 262 , - 1827 , - 1768 , - 85 , - 490 , - 1127 , - 140 , - 1241 , - 718 , - 427 , - 368 , - 541 , - 946 , - 1583 , - 596 , - 1697 , - 1174 , - 883 , - 824 , - 997 , - 1402 , - 183 , - 1052 , - 297 , - 1630 , - 1339 , - 1280 , - 1453 , - 2 , - 639 , - 1508 , - 753 , - 230 , - 1795 , - 1736 , - 53 , - 458 , - 1095 , - 108 , - 1209 , - 686 , - 395 , - 336 , - 509 , - 914 , - 1551 , - 564 , - 1665 , - 1142 , - 851 , - 792 , - 965 , - 1370 , - 151 , - 1020 , - 265 , - 1598 , - 1307 , - 1248 , - 1421 , - 1826 , - 607 , - 1476 , - 721 , - 198 , - 1763 , - 1704 , - 21 , - 426 , - 1063 , - 76 , - 1177 , - 654 , - 363 , - 304 , - 477 , - 882 , - 1519 , - 532 , - 1633 , - 1110 , - 819 , - 760 , - 933 , - 1338 , - 119 , - 988 , - 233 , - 1566 , - 1275 , - 1216 , - 1389 , - 1794 , - 575 , - 1444 , - 689 , - 166 , - 1731 , - 1672 , - 1845 , - 394 , - 1031 , - 44 , - 1145 , - 622 , - 331 , - 272 , - 445 , - 850 , - 1487 , - 500 , - 1601 , - 1078 , - 787 , - 728 , - 901 , - 1306 , - 87 , - 956 , - 201 , - 1534 , - 1243 , - 1184 , - 1357 , - 1762 , - 543 , - 1412 , - 657 , - 134 , - 1699 , - 1640 , - 1813 , - 362 , - 999 , - 12 , - 1113 , - 590 , - 299 , - 240 , - 413 , - 818 , - 1455 , - 468 , - 1569 , - 1046 , - 755 , - 696 , - 869 , - 1274 , - 55 , - 924 , - 169 , - 1502 , - 1211 , - 1152 , - 1325 , - 1730 , - 511 , - 1380 , - 625 , - 102 , - 1667 , - 1608 , - 1781 , - 330 , - 967 , - 1836 , - 1081 , - 558 , - 267 , - 208 , - 381 , - 786 , - 1423 , - 436 , - 1537 , - 1014 , - 723 , - 664 , - 837 , - 1242 , - 23 , - 892 , - 137 , - 1470 , - 1179 , - 1120 , - 1293 , - 1698 , - 479 , - 1348 , - 593 , - 70 , - 1635 , - 1576 , - 1749 , - 298 , - 935 , - 1804 , - 1049 , - 526 , - 235 , - 176 , - 349 , - 754 , - 1391 , - 404 , - 1505 , - 982 , - 691 , - 632 , - 805 , - 1210 , - 1847 , - 860 , - 105 , - 1438 , - 1147 , - 1088 , - 1261 , - 1666 , - 447 , - 1316 , - 561 , - 38 , - 1603 , - 1544 , - 1717 , - 266 , - 903 , - 1772 , - 1017 , - 494 , - 203 , - 144 , - 317 , - 722 , - 1359 , - 372 , - 1473 , - 950 , - 659 , - 600 , - 773 , - 1178 , - 1815 , - 828 , - 73 , - 1406 , - 1115 , - 1056 , - 1229 , - 1634 , - 415 , - 1284 , - 529 , - 6 , - 1571 , - 1512 , - 1685 , - 234 , - 871 , - 1740 , - 985 , - 462 , - 171 , - 112 , - 285 , - 690 , - 1327 , - 340 , - 1441 , - 918 , - 627 , - 568 , - 741 , - 1146 , - 1783 , - 796 , - 41 , - 1374 , - 1083 , - 1024 , - 1197 , - 1602 , - 383 , - 1252 , - 497 , - 1830 , - 1539 , - 1480 , - 1653 , - 202 , - 839 , - 1708 , - 953 , - 430 , - 139 , - 80 , - 253 , - 658 , - 1295 , - 308 , - 1409 , - 886 , - 595 , - 536 , - 709 , - 1114 , - 1751 , - 764 , - 9 , - 1342 , - 1051 , - 992 , - 1165 , - 1570 , - 351 , - 1220 , - 465 , - 1798 , - 1507 , - 1448 , - 1621 , - 170 , - 807 , - 1676 , - 921 , - 398 , - 107 , - 48 , - 221 , - 626 , - 1263 , - 276 , - 1377 , - 854 , - 563 , - 504 , - 677 , - 1082 , - 1719 , - 732 , - 1833 , - 1310 , - 1019 , - 960 , - 1133 , - 1538 , - 319 , - 1188 , - 433 , - 1766 , - 1475 , - 1416 , - 1589 , - 138 , - 775 , - 1644 , - 889 , - 366 , - 75 , - 16 , - 189 , - 594 , - 1231 , - 244 , - 1345 , - 822 , - 531 , - 472 , - 645 , - 1050 , - 1687 , - 700 , - 1801 , - 1278 , - 987 , - 928 , - 1101 , - 1506 , - 287 , - 1156 , - 401 , - 1734 , - 1443 , - 1384 , - 1557 , - 106 , - 743 , - 1612 , - 857 , - 334 , - 43 , - 1840 , - 157 , - 562 , - 1199 , - 212 , - 1313 , - 790 , - 499 , - 440 , - 613 , - 1018 , - 1655 , - 668 , - 1769 , - 1246 , - 955 , - 896 , - 1069 , - 1474 , - 255 , - 1124 , - 369 , - 1702 , - 1411 , - 1352 , - 1525 , - 74 , - 711 , - 1580 , - 825 , - 302 , - 11 , - 1808 , - 125 , - 530 , - 1167 , - 180 , - 1281 , - 758 , - 467 , - 408 , - 581 , - 986 , - 1623 , - 636 , - 1737 , - 1214 , - 923 , - 864 , - 1037 , - 1442 , - 223 , - 1092 , - 337 , - 1670 , - 1379 , - 1320 , - 1493 , - 42 , - 679 , - 1548 , - 793 , - 270 , - 1835 , - 1776 , - 93 , - 498 , - 1135 , - 148 , - 1249 , - 726 , - 435 , - 376 , - 549 , - 954 , - 1591 , - 604 , - 1705 , - 1182 , - 891 , - 832 , - 1005 , - 1410 , - 191 , - 1060 , - 305 , - 1638 , - 1347 , - 1288 , - 1461 , - 10 , - 647 , - 1516 , - 761 , - 238 , - 1803 , - 1744 , - 61 , - 466 , - 1103 , - 116 , - 1217 , - 694 , - 403 , - 344 , - 517 , - 922 , - 1559 , - 572 , - 1673 , - 1150 , - 859 , - 800 , - 973 , - 1378 , - 159 , - 1028 , - 273 , - 1606 , - 1315 , - 1256 , - 1429 , - 1834 , - 615 , - 1484 , - 729 , - 206 , - 1771 , - 1712 , - 29 , - 434 , - 1071 , - 84 , - 1185 , - 662 , - 371 , - 312 , - 485 , - 890 , - 1527 , - 540 , - 1641 , - 1118 , - 827 , - 768 , - 941 , - 1346 , - 127 , - 996 , - 241 , - 1574 , - 1283 , - 1224 , - 1397 , - 1802 , - 583 , - 1452 , - 697 , - 174 , - 1739 , - 1680 , - 1853 , - 402 , - 1039 , - 52 , - 1153 , - 630 , - 339 , - 280 , - 453 , - 858 , - 1495 , - 508 , - 1609 , - 1086 , - 795 , - 736 , - 909 , - 1314 , - 95 , - 964 , - 209 , - 1542 , - 1251 , - 1192 , - 1365 , - 1770 , - 551 , - 1420 , - 665 , - 142 , - 1707 , - 1648 , - 1821 , - 370 , - 1007 , - 20 , - 1121 , - 598 , - 307 , - 248 , - 421 , - 826 , - 1463 , - 476 , - 1577 , - 1054 , - 763 , - 704 , - 877 , - 1282 , - 63 , - 932 , - 177 , - 1510 , - 1219 , - 1160 , - 1333 , - 1738 , - 519 , - 1388 , - 633 , - 110 , - 1675 , - 1616 , - 1789 , - 338 , - 975 , - 1844 , - 1089 , - 566 , - 275 , - 216 , - 389 , - 794 , - 1431 , - 444 , - 1545 , - 1022 , - 731 , - 672 , - 845 , - 1250 , - 31 , - 900 , - 145 , - 1478 , - 1187 , - 1128 , - 1301 , - 1706 , - 487 , - 1356 , - 601 , - 78 , - 1643 , - 1584 , - 1757 , - 306 , - 943 , - 1812 , - 1057 , - 534 , - 243 , - 184 , - 357 , - 762 , - 1399 , - 412 , - 1513 , - 990 , - 699 , - 640 , - 813 , - 1218 , - 1855 , - 868 , - 113 , - 1446 , - 1155 , - 1096 , - 1269 , - 1674 , - 455 , - 1324 , - 569 , - 46 , - 1611 , - 1552 , - 1725 , - 274 , - 911 , - 1780 , - 1025 , - 502 , - 211 , - 152 , - 325 , - 730 , - 1367 , - 380 , - 1481 , - 958 , - 667 , - 608 , - 781 , - 1186 , - 1823 , - 836 , - 81 , - 1414 , - 1123 , - 1064 , - 1237 , - 1642 , - 423 , - 1292 , - 537 , - 14 , - 1579 , - 1520 , - 1693 , - 242 , - 879 , - 1748 , - 993 , - 470 , - 179 , - 120 , - 293 , - 698 , - 1335 , - 348 , - 1449 , - 926 , - 635 , - 576 , - 749 , - 1154 , - 1791 , - 804 , - 49 , - 1382 , - 1091 , - 1032 , - 1205 , - 1610 , - 391 , - 1260 , - 505 , - 1838 , - 1547 , - 1488 , - 1661 , - 210 , - 847 , - 1716 , - 961 , - 438 , - 147 , - 88 , - 261 , - 666 , - 1303 , - 316 , - 1417 , - 894 , - 603 , - 544 , - 717 , - 1122 , - 1759 , - 772 , - 17 , - 1350 , - 1059 , - 1000 , - 1173 , - 1578 , - 359 , - 1228 , - 473 , - 1806 , - 1515 , - 1456 , - 1629 , - 178 , - 815 , - 1684 , - 929 , - 406 , - 115 , - 56 , - 229 , - 634 , - 1271 , - 284 , - 1385 , - 862 , - 571 , - 512 , - 685 , - 1090 , - 1727 , - 740 , - 1841 , - 1318 , - 1027 , - 968 , - 1141 , - 1546 , - 327 , - 1196 , - 441 , - 1774 , - 1483 , - 1424 , - 1597 , - 146 , - 783 , - 1652 , - 897 , - 374 , - 83 , - 24 , - 197 , - 602 , - 1239 , - 252 , - 1353 , - 830 , - 539 , - 480 , - 653 , - 1058 , - 1695 , - 708 , - 1809 , - 1286 , - 995 , - 936 , - 1109 , - 1514 , - 295 , - 1164 , - 409 , - 1742 , - 1451 , - 1392 , - 1565 , - 114 , - 751 , - 1620 , - 865 , - 342 , - 51 , - 1848 , - 165 , - 570 , - 1207 , - 220 , - 1321 , - 798 , - 507 , - 448 , - 621 , - 1026 , - 1663 , - 676 , - 1777 , - 1254 , - 963 , - 904 , - 1077 , - 1482 , - 263 , - 1132 , - 377 , - 1710 , - 1419 , - 1360 , - 1533 , - 82 , - 719 , - 1588 , - 833 , - 310 , - 19 , - 1816 , - 133 , - 538 , - 1175 , - 188 , - 1289 , - 766 , - 475 , - 416 , - 589 , - 994 , - 1631 , - 644 , - 1745 , - 1222 , - 931 , - 872 , - 1045 , - 1450 , - 231 , - 1100 , - 345 , - 1678 , - 1387 , - 1328 , - 1501 , - 50 , - 687 , - 1556 , - 801 , - 278 , - 1843 , - 1784 , - 101 , - 506 , - 1143 , - 156 , - 1257 , - 734 , - 443 , - 384 , - 557 , - 962 , - 1599 , - 612 , - 1713 , - 1190 , - 899 , - 840 , - 1013 , - 1418 , - 199 , - 1068 , - 313 , - 1646 , - 1355 , - 1296 , - 1469 , - 18 , - 655 , - 1524 , - 769 , - 246 , - 1811 , - 1752 , - 69 , - 474 , - 1111 , - 124 , - 1225 , - 702 , - 411 , - 352 , - 525 , - 930 , - 1567 , - 580 , - 1681 , - 1158 , - 867 , - 808 , - 981 , - 1386 , - 167 , - 1036 , - 281 , - 1614 , - 1323 , - 1264 , - 1437 , - 1842 , - 623 , - 1492 , - 737 , - 214 , - 1779 , - 1720 , - 37 , - 442 , - 1079 , - 92 , - 1193 , - 670 , - 379 , - 320 , - 493 , - 898 , - 1535 , - 548 , - 1649 , - 1126 , - 835 , - 776 , - 949 , - 1354 , - 135 , - 1004 , - 249 , - 1582 , - 1291 , - 1232 , - 1405 , - 1810 , - 591 , - 1460 , - 705 , - 182 , - 1747 , - 1688 , - 5 , - 410 , - 1047 , - 60 , - 1161 , - 638 , - 347 , - 288 , - 461 , - 866 , - 1503 , - 516 , - 1617 , - 1094 , - 803 , - 744 , - 917 , - 1322 , - 103 , - 972 , - 217 , - 1550 , - 1259 , - 1200 , - 1373 , - 1778 , - 559 , - 1428 , - 673 , - 150 , - 1715 , - 1656 , - 1829 , - 378 , - 1015 , - 28 , - 1129 , - 606 , - 315 , - 256 , - 429 , - 834 , - 1471 , - 484 , - 1585 , - 1062 , - 771 , - 712 , - 885 , - 1290 , - 71 , - 940 , - 185 , - 1518 , - 1227 , - 1168 , - 1341 , - 1746 , - 527 , - 1396 , - 641 , - 118 , - 1683 , - 1624 , - 1797 , - 346 , - 983 , - 1852 , - 1097 , - 574 , - 283 , - 224 , - 397 , - 802 , - 1439 , - 452 , - 1553 , - 1030 , - 739 , - 680 , - 853 , - 1258 , - 39 , - 908 , - 153 , - 1486 , - 1195 , - 1136 , - 1309 , - 1714 , - 495 , - 1364 , - 609 , - 86 , - 1651 , - 1592 , - 1765 , - 314 , - 951 , - 1820 , - 1065 , - 542 , - 251 , - 192 , - 365 , - 770 , - 1407 , - 420 , - 1521 , - 998 , - 707 , - 648 , - 821 , - 1226 , - 7 , - 876 , - 121 , - 1454 , - 1163 , - 1104 , - 1277 , - 1682 , - 463 , - 1332 , - 577 , - 54 , - 1619 , - 1560 , - 1733 , - 282 , - 919 , - 1788 , - 1033 , - 510 , - 219 , - 160 , - 333 , - 738 , - 1375 , - 388 , - 1489 , - 966 , - 675 , - 616 , - 789 , - 1194 , - 1831 , - 844 , - 89 , - 1422 , - 1131 , - 1072 , - 1245 , - 1650 , - 431 , - 1300 , - 545 , - 22 , - 1587 , - 1528 , - 1701 , - 250 , - 887 , - 1756 , - 1001 , - 478 , - 187 , - 128 , - 301 , - 706 , - 1343 , - 356 , - 1457 , - 934 , - 643 , - 584 , - 757 , - 1162 , - 1799 , - 812 , - 57 , - 1390 , - 1099 , - 1040 , - 1213 , - 1618 , - 399 , - 1268 , - 513 , - 1846 , - 1555 , - 1496 , - 1669 , - 218 , - 855 , - 1724 , - 969 , - 446 , - 155 , - 96 , - 269 , - 674 , - 1311 , - 324 , - 1425 , - 902 , - 611 , - 552 , - 725 , - 1130 , - 1767 , - 780 , - 25 , - 1358 , - 1067 , - 1008 , - 1181 , - 1586 , - 367 , - 1236 , - 481 , - 1814 , - 1523 , - 1464 , - 1637 , - 186 , - 823 , - 1692 , - 937 , - 414 , - 123 , - 64 , - 237 , - 642 , - 1279 , - 292 , - 1393 , - 870 , - 579 , - 520 , - 693 , - 1098 , - 1735 , - 748 , - 1849 , - 1326 , - 1035 , - 976 , - 1149 , - 1554 , - 335 , - 1204 , - 449 , - 1782 , - 1491 , - 1432 , - 1605 , - 154 , - 791 , - 1660 , - 905 , - 382 , - 91 , - 32 , - 205 , - 610 , - 1247 , - 260 , - 1361 , - 838 , - 547 , - 488 , - 661 , - 1066 , - 1703 , - 716 , - 1817 , - 1294 , - 1003 , - 944 , - 1117 , - 1522 , - 303 , - 1172 , - 417 , - 1750 , - 1459 , - 1400 , - 1573 , - 122 , - 759 , - 1628 , - 873 , - 350 , - 59 , - 0 , - 399 , - 1506 , - 1433 , - 180 , - 1523 , - 1686 , - 669 , - 360 , - 759 , - 1866 , - 1793 , - 540 , - 1883 , - 158 , - 1029 , - 720 , - 1119 , - 338 , - 265 , - 900 , - 355 , - 518 , - 1389 , - 1080 , - 1479 , - 698 , - 625 , - 1260 , - 715 , - 878 , - 1749 , - 1440 , - 1839 , - 1058 , - 985 , - 1620 , - 1075 , - 1238 , - 221 , - 1800 , - 311 , - 1418 , - 1345 , - 92 , - 1435 , - 1598 , - 581 , - 272 , - 671 , - 1778 , - 1705 , - 452 , - 1795 , - 70 , - 941 , - 632 , - 1031 , - 250 , - 177 , - 812 , - 267 , - 430 , - 1301 , - 992 , - 1391 , - 610 , - 537 , - 1172 , - 627 , - 790 , - 1661 , - 1352 , - 1751 , - 970 , - 897 , - 1532 , - 987 , - 1150 , - 133 , - 1712 , - 223 , - 1330 , - 1257 , - 4 , - 1347 , - 1510 , - 493 , - 184 , - 583 , - 1690 , - 1617 , - 364 , - 1707 , - 1870 , - 853 , - 544 , - 943 , - 162 , - 89 , - 724 , - 179 , - 342 , - 1213 , - 904 , - 1303 , - 522 , - 449 , - 1084 , - 539 , - 702 , - 1573 , - 1264 , - 1663 , - 882 , - 809 , - 1444 , - 899 , - 1062 , - 45 , - 1624 , - 135 , - 1242 , - 1169 , - 1804 , - 1259 , - 1422 , - 405 , - 96 , - 495 , - 1602 , - 1529 , - 276 , - 1619 , - 1782 , - 765 , - 456 , - 855 , - 74 , - 1 , - 636 , - 91 , - 254 , - 1125 , - 816 , - 1215 , - 434 , - 361 , - 996 , - 451 , - 614 , - 1485 , - 1176 , - 1575 , - 794 , - 721 , - 1356 , - 811 , - 974 , - 1845 , - 1536 , - 47 , - 1154 , - 1081 , - 1716 , - 1171 , - 1334 , - 317 , - 8 , - 407 , - 1514 , - 1441 , - 188 , - 1531 , - 1694 , - 677 , - 368 , - 767 , - 1874 , - 1801 , - 548 , - 3 , - 166 , - 1037 , - 728 , - 1127 , - 346 , - 273 , - 908 , - 363 , - 526 , - 1397 , - 1088 , - 1487 , - 706 , - 633 , - 1268 , - 723 , - 886 , - 1757 , - 1448 , - 1847 , - 1066 , - 993 , - 1628 , - 1083 , - 1246 , - 229 , - 1808 , - 319 , - 1426 , - 1353 , - 100 , - 1443 , - 1606 , - 589 , - 280 , - 679 , - 1786 , - 1713 , - 460 , - 1803 , - 78 , - 949 , - 640 , - 1039 , - 258 , - 185 , - 820 , - 275 , - 438 , - 1309 , - 1000 , - 1399 , - 618 , - 545 , - 1180 , - 635 , - 798 , - 1669 , - 1360 , - 1759 , - 978 , - 905 , - 1540 , - 995 , - 1158 , - 141 , - 1720 , - 231 , - 1338 , - 1265 , - 12 , - 1355 , - 1518 , - 501 , - 192 , - 591 , - 1698 , - 1625 , - 372 , - 1715 , - 1878 , - 861 , - 552 , - 951 , - 170 , - 97 , - 732 , - 187 , - 350 , - 1221 , - 912 , - 1311 , - 530 , - 457 , - 1092 , - 547 , - 710 , - 1581 , - 1272 , - 1671 , - 890 , - 817 , - 1452 , - 907 , - 1070 , - 53 , - 1632 , - 143 , - 1250 , - 1177 , - 1812 , - 1267 , - 1430 , - 413 , - 104 , - 503 , - 1610 , - 1537 , - 284 , - 1627 , - 1790 , - 773 , - 464 , - 863 , - 82 , - 9 , - 644 , - 99 , - 262 , - 1133 , - 824 , - 1223 , - 442 , - 369 , - 1004 , - 459 , - 622 , - 1493 , - 1184 , - 1583 , - 802 , - 729 , - 1364 , - 819 , - 982 , - 1853 , - 1544 , - 55 , - 1162 , - 1089 , - 1724 , - 1179 , - 1342 , - 325 , - 16 , - 415 , - 1522 , - 1449 , - 196 , - 1539 , - 1702 , - 685 , - 376 , - 775 , - 1882 , - 1809 , - 556 , - 11 , - 174 , - 1045 , - 736 , - 1135 , - 354 , - 281 , - 916 , - 371 , - 534 , - 1405 , - 1096 , - 1495 , - 714 , - 641 , - 1276 , - 731 , - 894 , - 1765 , - 1456 , - 1855 , - 1074 , - 1001 , - 1636 , - 1091 , - 1254 , - 237 , - 1816 , - 327 , - 1434 , - 1361 , - 108 , - 1451 , - 1614 , - 597 , - 288 , - 687 , - 1794 , - 1721 , - 468 , - 1811 , - 86 , - 957 , - 648 , - 1047 , - 266 , - 193 , - 828 , - 283 , - 446 , - 1317 , - 1008 , - 1407 , - 626 , - 553 , - 1188 , - 643 , - 806 , - 1677 , - 1368 , - 1767 , - 986 , - 913 , - 1548 , - 1003 , - 1166 , - 149 , - 1728 , - 239 , - 1346 , - 1273 , - 20 , - 1363 , - 1526 , - 509 , - 200 , - 599 , - 1706 , - 1633 , - 380 , - 1723 , - 1886 , - 869 , - 560 , - 959 , - 178 , - 105 , - 740 , - 195 , - 358 , - 1229 , - 920 , - 1319 , - 538 , - 465 , - 1100 , - 555 , - 718 , - 1589 , - 1280 , - 1679 , - 898 , - 825 , - 1460 , - 915 , - 1078 , - 61 , - 1640 , - 151 , - 1258 , - 1185 , - 1820 , - 1275 , - 1438 , - 421 , - 112 , - 511 , - 1618 , - 1545 , - 292 , - 1635 , - 1798 , - 781 , - 472 , - 871 , - 90 , - 17 , - 652 , - 107 , - 270 , - 1141 , - 832 , - 1231 , - 450 , - 377 , - 1012 , - 467 , - 630 , - 1501 , - 1192 , - 1591 , - 810 , - 737 , - 1372 , - 827 , - 990 , - 1861 , - 1552 , - 63 , - 1170 , - 1097 , - 1732 , - 1187 , - 1350 , - 333 , - 24 , - 423 , - 1530 , - 1457 , - 204 , - 1547 , - 1710 , - 693 , - 384 , - 783 , - 2 , - 1817 , - 564 , - 19 , - 182 , - 1053 , - 744 , - 1143 , - 362 , - 289 , - 924 , - 379 , - 542 , - 1413 , - 1104 , - 1503 , - 722 , - 649 , - 1284 , - 739 , - 902 , - 1773 , - 1464 , - 1863 , - 1082 , - 1009 , - 1644 , - 1099 , - 1262 , - 245 , - 1824 , - 335 , - 1442 , - 1369 , - 116 , - 1459 , - 1622 , - 605 , - 296 , - 695 , - 1802 , - 1729 , - 476 , - 1819 , - 94 , - 965 , - 656 , - 1055 , - 274 , - 201 , - 836 , - 291 , - 454 , - 1325 , - 1016 , - 1415 , - 634 , - 561 , - 1196 , - 651 , - 814 , - 1685 , - 1376 , - 1775 , - 994 , - 921 , - 1556 , - 1011 , - 1174 , - 157 , - 1736 , - 247 , - 1354 , - 1281 , - 28 , - 1371 , - 1534 , - 517 , - 208 , - 607 , - 1714 , - 1641 , - 388 , - 1731 , - 6 , - 877 , - 568 , - 967 , - 186 , - 113 , - 748 , - 203 , - 366 , - 1237 , - 928 , - 1327 , - 546 , - 473 , - 1108 , - 563 , - 726 , - 1597 , - 1288 , - 1687 , - 906 , - 833 , - 1468 , - 923 , - 1086 , - 69 , - 1648 , - 159 , - 1266 , - 1193 , - 1828 , - 1283 , - 1446 , - 429 , - 120 , - 519 , - 1626 , - 1553 , - 300 , - 1643 , - 1806 , - 789 , - 480 , - 879 , - 98 , - 25 , - 660 , - 115 , - 278 , - 1149 , - 840 , - 1239 , - 458 , - 385 , - 1020 , - 475 , - 638 , - 1509 , - 1200 , - 1599 , - 818 , - 745 , - 1380 , - 835 , - 998 , - 1869 , - 1560 , - 71 , - 1178 , - 1105 , - 1740 , - 1195 , - 1358 , - 341 , - 32 , - 431 , - 1538 , - 1465 , - 212 , - 1555 , - 1718 , - 701 , - 392 , - 791 , - 10 , - 1825 , - 572 , - 27 , - 190 , - 1061 , - 752 , - 1151 , - 370 , - 297 , - 932 , - 387 , - 550 , - 1421 , - 1112 , - 1511 , - 730 , - 657 , - 1292 , - 747 , - 910 , - 1781 , - 1472 , - 1871 , - 1090 , - 1017 , - 1652 , - 1107 , - 1270 , - 253 , - 1832 , - 343 , - 1450 , - 1377 , - 124 , - 1467 , - 1630 , - 613 , - 304 , - 703 , - 1810 , - 1737 , - 484 , - 1827 , - 102 , - 973 , - 664 , - 1063 , - 282 , - 209 , - 844 , - 299 , - 462 , - 1333 , - 1024 , - 1423 , - 642 , - 569 , - 1204 , - 659 , - 822 , - 1693 , - 1384 , - 1783 , - 1002 , - 929 , - 1564 , - 1019 , - 1182 , - 165 , - 1744 , - 255 , - 1362 , - 1289 , - 36 , - 1379 , - 1542 , - 525 , - 216 , - 615 , - 1722 , - 1649 , - 396 , - 1739 , - 14 , - 885 , - 576 , - 975 , - 194 , - 121 , - 756 , - 211 , - 374 , - 1245 , - 936 , - 1335 , - 554 , - 481 , - 1116 , - 571 , - 734 , - 1605 , - 1296 , - 1695 , - 914 , - 841 , - 1476 , - 931 , - 1094 , - 77 , - 1656 , - 167 , - 1274 , - 1201 , - 1836 , - 1291 , - 1454 , - 437 , - 128 , - 527 , - 1634 , - 1561 , - 308 , - 1651 , - 1814 , - 797 , - 488 , - 887 , - 106 , - 33 , - 668 , - 123 , - 286 , - 1157 , - 848 , - 1247 , - 466 , - 393 , - 1028 , - 483 , - 646 , - 1517 , - 1208 , - 1607 , - 826 , - 753 , - 1388 , - 843 , - 1006 , - 1877 , - 1568 , - 79 , - 1186 , - 1113 , - 1748 , - 1203 , - 1366 , - 349 , - 40 , - 439 , - 1546 , - 1473 , - 220 , - 1563 , - 1726 , - 709 , - 400 , - 799 , - 18 , - 1833 , - 580 , - 35 , - 198 , - 1069 , - 760 , - 1159 , - 378 , - 305 , - 940 , - 395 , - 558 , - 1429 , - 1120 , - 1519 , - 738 , - 665 , - 1300 , - 755 , - 918 , - 1789 , - 1480 , - 1879 , - 1098 , - 1025 , - 1660 , - 1115 , - 1278 , - 261 , - 1840 , - 351 , - 1458 , - 1385 , - 132 , - 1475 , - 1638 , - 621 , - 312 , - 711 , - 1818 , - 1745 , - 492 , - 1835 , - 110 , - 981 , - 672 , - 1071 , - 290 , - 217 , - 852 , - 307 , - 470 , - 1341 , - 1032 , - 1431 , - 650 , - 577 , - 1212 , - 667 , - 830 , - 1701 , - 1392 , - 1791 , - 1010 , - 937 , - 1572 , - 1027 , - 1190 , - 173 , - 1752 , - 263 , - 1370 , - 1297 , - 44 , - 1387 , - 1550 , - 533 , - 224 , - 623 , - 1730 , - 1657 , - 404 , - 1747 , - 22 , - 893 , - 584 , - 983 , - 202 , - 129 , - 764 , - 219 , - 382 , - 1253 , - 944 , - 1343 , - 562 , - 489 , - 1124 , - 579 , - 742 , - 1613 , - 1304 , - 1703 , - 922 , - 849 , - 1484 , - 939 , - 1102 , - 85 , - 1664 , - 175 , - 1282 , - 1209 , - 1844 , - 1299 , - 1462 , - 445 , - 136 , - 535 , - 1642 , - 1569 , - 316 , - 1659 , - 1822 , - 805 , - 496 , - 895 , - 114 , - 41 , - 676 , - 131 , - 294 , - 1165 , - 856 , - 1255 , - 474 , - 401 , - 1036 , - 491 , - 654 , - 1525 , - 1216 , - 1615 , - 834 , - 761 , - 1396 , - 851 , - 1014 , - 1885 , - 1576 , - 87 , - 1194 , - 1121 , - 1756 , - 1211 , - 1374 , - 357 , - 48 , - 447 , - 1554 , - 1481 , - 228 , - 1571 , - 1734 , - 717 , - 408 , - 807 , - 26 , - 1841 , - 588 , - 43 , - 206 , - 1077 , - 768 , - 1167 , - 386 , - 313 , - 948 , - 403 , - 566 , - 1437 , - 1128 , - 1527 , - 746 , - 673 , - 1308 , - 763 , - 926 , - 1797 , - 1488 , - 1887 , - 1106 , - 1033 , - 1668 , - 1123 , - 1286 , - 269 , - 1848 , - 359 , - 1466 , - 1393 , - 140 , - 1483 , - 1646 , - 629 , - 320 , - 719 , - 1826 , - 1753 , - 500 , - 1843 , - 118 , - 989 , - 680 , - 1079 , - 298 , - 225 , - 860 , - 315 , - 478 , - 1349 , - 1040 , - 1439 , - 658 , - 585 , - 1220 , - 675 , - 838 , - 1709 , - 1400 , - 1799 , - 1018 , - 945 , - 1580 , - 1035 , - 1198 , - 181 , - 1760 , - 271 , - 1378 , - 1305 , - 52 , - 1395 , - 1558 , - 541 , - 232 , - 631 , - 1738 , - 1665 , - 412 , - 1755 , - 30 , - 901 , - 592 , - 991 , - 210 , - 137 , - 772 , - 227 , - 390 , - 1261 , - 952 , - 1351 , - 570 , - 497 , - 1132 , - 587 , - 750 , - 1621 , - 1312 , - 1711 , - 930 , - 857 , - 1492 , - 947 , - 1110 , - 93 , - 1672 , - 183 , - 1290 , - 1217 , - 1852 , - 1307 , - 1470 , - 453 , - 144 , - 543 , - 1650 , - 1577 , - 324 , - 1667 , - 1830 , - 813 , - 504 , - 903 , - 122 , - 49 , - 684 , - 139 , - 302 , - 1173 , - 864 , - 1263 , - 482 , - 409 , - 1044 , - 499 , - 662 , - 1533 , - 1224 , - 1623 , - 842 , - 769 , - 1404 , - 859 , - 1022 , - 5 , - 1584 , - 95 , - 1202 , - 1129 , - 1764 , - 1219 , - 1382 , - 365 , - 56 , - 455 , - 1562 , - 1489 , - 236 , - 1579 , - 1742 , - 725 , - 416 , - 815 , - 34 , - 1849 , - 596 , - 51 , - 214 , - 1085 , - 776 , - 1175 , - 394 , - 321 , - 956 , - 411 , - 574 , - 1445 , - 1136 , - 1535 , - 754 , - 681 , - 1316 , - 771 , - 934 , - 1805 , - 1496 , - 7 , - 1114 , - 1041 , - 1676 , - 1131 , - 1294 , - 277 , - 1856 , - 367 , - 1474 , - 1401 , - 148 , - 1491 , - 1654 , - 637 , - 328 , - 727 , - 1834 , - 1761 , - 508 , - 1851 , - 126 , - 997 , - 688 , - 1087 , - 306 , - 233 , - 868 , - 323 , - 486 , - 1357 , - 1048 , - 1447 , - 666 , - 593 , - 1228 , - 683 , - 846 , - 1717 , - 1408 , - 1807 , - 1026 , - 953 , - 1588 , - 1043 , - 1206 , - 189 , - 1768 , - 279 , - 1386 , - 1313 , - 60 , - 1403 , - 1566 , - 549 , - 240 , - 639 , - 1746 , - 1673 , - 420 , - 1763 , - 38 , - 909 , - 600 , - 999 , - 218 , - 145 , - 780 , - 235 , - 398 , - 1269 , - 960 , - 1359 , - 578 , - 505 , - 1140 , - 595 , - 758 , - 1629 , - 1320 , - 1719 , - 938 , - 865 , - 1500 , - 955 , - 1118 , - 101 , - 1680 , - 191 , - 1298 , - 1225 , - 1860 , - 1315 , - 1478 , - 461 , - 152 , - 551 , - 1658 , - 1585 , - 332 , - 1675 , - 1838 , - 821 , - 512 , - 911 , - 130 , - 57 , - 692 , - 147 , - 310 , - 1181 , - 872 , - 1271 , - 490 , - 417 , - 1052 , - 507 , - 670 , - 1541 , - 1232 , - 1631 , - 850 , - 777 , - 1412 , - 867 , - 1030 , - 13 , - 1592 , - 103 , - 1210 , - 1137 , - 1772 , - 1227 , - 1390 , - 373 , - 64 , - 463 , - 1570 , - 1497 , - 244 , - 1587 , - 1750 , - 733 , - 424 , - 823 , - 42 , - 1857 , - 604 , - 59 , - 222 , - 1093 , - 784 , - 1183 , - 402 , - 329 , - 964 , - 419 , - 582 , - 1453 , - 1144 , - 1543 , - 762 , - 689 , - 1324 , - 779 , - 942 , - 1813 , - 1504 , - 15 , - 1122 , - 1049 , - 1684 , - 1139 , - 1302 , - 285 , - 1864 , - 375 , - 1482 , - 1409 , - 156 , - 1499 , - 1662 , - 645 , - 336 , - 735 , - 1842 , - 1769 , - 516 , - 1859 , - 134 , - 1005 , - 696 , - 1095 , - 314 , - 241 , - 876 , - 331 , - 494 , - 1365 , - 1056 , - 1455 , - 674 , - 601 , - 1236 , - 691 , - 854 , - 1725 , - 1416 , - 1815 , - 1034 , - 961 , - 1596 , - 1051 , - 1214 , - 197 , - 1776 , - 287 , - 1394 , - 1321 , - 68 , - 1411 , - 1574 , - 557 , - 248 , - 647 , - 1754 , - 1681 , - 428 , - 1771 , - 46 , - 917 , - 608 , - 1007 , - 226 , - 153 , - 788 , - 243 , - 406 , - 1277 , - 968 , - 1367 , - 586 , - 513 , - 1148 , - 603 , - 766 , - 1637 , - 1328 , - 1727 , - 946 , - 873 , - 1508 , - 963 , - 1126 , - 109 , - 1688 , - 199 , - 1306 , - 1233 , - 1868 , - 1323 , - 1486 , - 469 , - 160 , - 559 , - 1666 , - 1593 , - 340 , - 1683 , - 1846 , - 829 , - 520 , - 919 , - 138 , - 65 , - 700 , - 155 , - 318 , - 1189 , - 880 , - 1279 , - 498 , - 425 , - 1060 , - 515 , - 678 , - 1549 , - 1240 , - 1639 , - 858 , - 785 , - 1420 , - 875 , - 1038 , - 21 , - 1600 , - 111 , - 1218 , - 1145 , - 1780 , - 1235 , - 1398 , - 381 , - 72 , - 471 , - 1578 , - 1505 , - 252 , - 1595 , - 1758 , - 741 , - 432 , - 831 , - 50 , - 1865 , - 612 , - 67 , - 230 , - 1101 , - 792 , - 1191 , - 410 , - 337 , - 972 , - 427 , - 590 , - 1461 , - 1152 , - 1551 , - 770 , - 697 , - 1332 , - 787 , - 950 , - 1821 , - 1512 , - 23 , - 1130 , - 1057 , - 1692 , - 1147 , - 1310 , - 293 , - 1872 , - 383 , - 1490 , - 1417 , - 164 , - 1507 , - 1670 , - 653 , - 344 , - 743 , - 1850 , - 1777 , - 524 , - 1867 , - 142 , - 1013 , - 704 , - 1103 , - 322 , - 249 , - 884 , - 339 , - 502 , - 1373 , - 1064 , - 1463 , - 682 , - 609 , - 1244 , - 699 , - 862 , - 1733 , - 1424 , - 1823 , - 1042 , - 969 , - 1604 , - 1059 , - 1222 , - 205 , - 1784 , - 295 , - 1402 , - 1329 , - 76 , - 1419 , - 1582 , - 565 , - 256 , - 655 , - 1762 , - 1689 , - 436 , - 1779 , - 54 , - 925 , - 616 , - 1015 , - 234 , - 161 , - 796 , - 251 , - 414 , - 1285 , - 976 , - 1375 , - 594 , - 521 , - 1156 , - 611 , - 774 , - 1645 , - 1336 , - 1735 , - 954 , - 881 , - 1516 , - 971 , - 1134 , - 117 , - 1696 , - 207 , - 1314 , - 1241 , - 1876 , - 1331 , - 1494 , - 477 , - 168 , - 567 , - 1674 , - 1601 , - 348 , - 1691 , - 1854 , - 837 , - 528 , - 927 , - 146 , - 73 , - 708 , - 163 , - 326 , - 1197 , - 888 , - 1287 , - 506 , - 433 , - 1068 , - 523 , - 686 , - 1557 , - 1248 , - 1647 , - 866 , - 793 , - 1428 , - 883 , - 1046 , - 29 , - 1608 , - 119 , - 1226 , - 1153 , - 1788 , - 1243 , - 1406 , - 389 , - 80 , - 479 , - 1586 , - 1513 , - 260 , - 1603 , - 1766 , - 749 , - 440 , - 839 , - 58 , - 1873 , - 620 , - 75 , - 238 , - 1109 , - 800 , - 1199 , - 418 , - 345 , - 980 , - 435 , - 598 , - 1469 , - 1160 , - 1559 , - 778 , - 705 , - 1340 , - 795 , - 958 , - 1829 , - 1520 , - 31 , - 1138 , - 1065 , - 1700 , - 1155 , - 1318 , - 301 , - 1880 , - 391 , - 1498 , - 1425 , - 172 , - 1515 , - 1678 , - 661 , - 352 , - 751 , - 1858 , - 1785 , - 532 , - 1875 , - 150 , - 1021 , - 712 , - 1111 , - 330 , - 257 , - 892 , - 347 , - 510 , - 1381 , - 1072 , - 1471 , - 690 , - 617 , - 1252 , - 707 , - 870 , - 1741 , - 1432 , - 1831 , - 1050 , - 977 , - 1612 , - 1067 , - 1230 , - 213 , - 1792 , - 303 , - 1410 , - 1337 , - 84 , - 1427 , - 1590 , - 573 , - 264 , - 663 , - 1770 , - 1697 , - 444 , - 1787 , - 62 , - 933 , - 624 , - 1023 , - 242 , - 169 , - 804 , - 259 , - 422 , - 1293 , - 984 , - 1383 , - 602 , - 529 , - 1164 , - 619 , - 782 , - 1653 , - 1344 , - 1743 , - 962 , - 889 , - 1524 , - 979 , - 1142 , - 125 , - 1704 , - 215 , - 1322 , - 1249 , - 1884 , - 1339 , - 1502 , - 485 , - 176 , - 575 , - 1682 , - 1609 , - 356 , - 1699 , - 1862 , - 845 , - 536 , - 935 , - 154 , - 81 , - 716 , - 171 , - 334 , - 1205 , - 896 , - 1295 , - 514 , - 441 , - 1076 , - 531 , - 694 , - 1565 , - 1256 , - 1655 , - 874 , - 801 , - 1436 , - 891 , - 1054 , - 37 , - 1616 , - 127 , - 1234 , - 1161 , - 1796 , - 1251 , - 1414 , - 397 , - 88 , - 487 , - 1594 , - 1521 , - 268 , - 1611 , - 1774 , - 757 , - 448 , - 847 , - 66 , - 1881 , - 628 , - 83 , - 246 , - 1117 , - 808 , - 1207 , - 426 , - 353 , - 988 , - 443 , - 606 , - 1477 , - 1168 , - 1567 , - 786 , - 713 , - 1348 , - 803 , - 966 , - 1837 , - 1528 , - 39 , - 1146 , - 1073 , - 1708 , - 1163 , - 1326 , - 309 , - 0 , - 151 , - 542 , - 1173 , - 124 , - 1235 , - 666 , - 337 , - 248 , - 399 , - 790 , - 1421 , - 372 , - 1483 , - 914 , - 585 , - 496 , - 647 , - 1038 , - 1669 , - 620 , - 1731 , - 1162 , - 833 , - 744 , - 895 , - 1286 , - 1917 , - 868 , - 59 , - 1410 , - 1081 , - 992 , - 1143 , - 1534 , - 245 , - 1116 , - 307 , - 1658 , - 1329 , - 1240 , - 1391 , - 1782 , - 493 , - 1364 , - 555 , - 1906 , - 1577 , - 1488 , - 1639 , - 110 , - 741 , - 1612 , - 803 , - 234 , - 1825 , - 1736 , - 1887 , - 358 , - 989 , - 1860 , - 1051 , - 482 , - 153 , - 64 , - 215 , - 606 , - 1237 , - 188 , - 1299 , - 730 , - 401 , - 312 , - 463 , - 854 , - 1485 , - 436 , - 1547 , - 978 , - 649 , - 560 , - 711 , - 1102 , - 1733 , - 684 , - 1795 , - 1226 , - 897 , - 808 , - 959 , - 1350 , - 61 , - 932 , - 123 , - 1474 , - 1145 , - 1056 , - 1207 , - 1598 , - 309 , - 1180 , - 371 , - 1722 , - 1393 , - 1304 , - 1455 , - 1846 , - 557 , - 1428 , - 619 , - 50 , - 1641 , - 1552 , - 1703 , - 174 , - 805 , - 1676 , - 867 , - 298 , - 1889 , - 1800 , - 31 , - 422 , - 1053 , - 4 , - 1115 , - 546 , - 217 , - 128 , - 279 , - 670 , - 1301 , - 252 , - 1363 , - 794 , - 465 , - 376 , - 527 , - 918 , - 1549 , - 500 , - 1611 , - 1042 , - 713 , - 624 , - 775 , - 1166 , - 1797 , - 748 , - 1859 , - 1290 , - 961 , - 872 , - 1023 , - 1414 , - 125 , - 996 , - 187 , - 1538 , - 1209 , - 1120 , - 1271 , - 1662 , - 373 , - 1244 , - 435 , - 1786 , - 1457 , - 1368 , - 1519 , - 1910 , - 621 , - 1492 , - 683 , - 114 , - 1705 , - 1616 , - 1767 , - 238 , - 869 , - 1740 , - 931 , - 362 , - 33 , - 1864 , - 95 , - 486 , - 1117 , - 68 , - 1179 , - 610 , - 281 , - 192 , - 343 , - 734 , - 1365 , - 316 , - 1427 , - 858 , - 529 , - 440 , - 591 , - 982 , - 1613 , - 564 , - 1675 , - 1106 , - 777 , - 688 , - 839 , - 1230 , - 1861 , - 812 , - 3 , - 1354 , - 1025 , - 936 , - 1087 , - 1478 , - 189 , - 1060 , - 251 , - 1602 , - 1273 , - 1184 , - 1335 , - 1726 , - 437 , - 1308 , - 499 , - 1850 , - 1521 , - 1432 , - 1583 , - 54 , - 685 , - 1556 , - 747 , - 178 , - 1769 , - 1680 , - 1831 , - 302 , - 933 , - 1804 , - 995 , - 426 , - 97 , - 8 , - 159 , - 550 , - 1181 , - 132 , - 1243 , - 674 , - 345 , - 256 , - 407 , - 798 , - 1429 , - 380 , - 1491 , - 922 , - 593 , - 504 , - 655 , - 1046 , - 1677 , - 628 , - 1739 , - 1170 , - 841 , - 752 , - 903 , - 1294 , - 5 , - 876 , - 67 , - 1418 , - 1089 , - 1000 , - 1151 , - 1542 , - 253 , - 1124 , - 315 , - 1666 , - 1337 , - 1248 , - 1399 , - 1790 , - 501 , - 1372 , - 563 , - 1914 , - 1585 , - 1496 , - 1647 , - 118 , - 749 , - 1620 , - 811 , - 242 , - 1833 , - 1744 , - 1895 , - 366 , - 997 , - 1868 , - 1059 , - 490 , - 161 , - 72 , - 223 , - 614 , - 1245 , - 196 , - 1307 , - 738 , - 409 , - 320 , - 471 , - 862 , - 1493 , - 444 , - 1555 , - 986 , - 657 , - 568 , - 719 , - 1110 , - 1741 , - 692 , - 1803 , - 1234 , - 905 , - 816 , - 967 , - 1358 , - 69 , - 940 , - 131 , - 1482 , - 1153 , - 1064 , - 1215 , - 1606 , - 317 , - 1188 , - 379 , - 1730 , - 1401 , - 1312 , - 1463 , - 1854 , - 565 , - 1436 , - 627 , - 58 , - 1649 , - 1560 , - 1711 , - 182 , - 813 , - 1684 , - 875 , - 306 , - 1897 , - 1808 , - 39 , - 430 , - 1061 , - 12 , - 1123 , - 554 , - 225 , - 136 , - 287 , - 678 , - 1309 , - 260 , - 1371 , - 802 , - 473 , - 384 , - 535 , - 926 , - 1557 , - 508 , - 1619 , - 1050 , - 721 , - 632 , - 783 , - 1174 , - 1805 , - 756 , - 1867 , - 1298 , - 969 , - 880 , - 1031 , - 1422 , - 133 , - 1004 , - 195 , - 1546 , - 1217 , - 1128 , - 1279 , - 1670 , - 381 , - 1252 , - 443 , - 1794 , - 1465 , - 1376 , - 1527 , - 1918 , - 629 , - 1500 , - 691 , - 122 , - 1713 , - 1624 , - 1775 , - 246 , - 877 , - 1748 , - 939 , - 370 , - 41 , - 1872 , - 103 , - 494 , - 1125 , - 76 , - 1187 , - 618 , - 289 , - 200 , - 351 , - 742 , - 1373 , - 324 , - 1435 , - 866 , - 537 , - 448 , - 599 , - 990 , - 1621 , - 572 , - 1683 , - 1114 , - 785 , - 696 , - 847 , - 1238 , - 1869 , - 820 , - 11 , - 1362 , - 1033 , - 944 , - 1095 , - 1486 , - 197 , - 1068 , - 259 , - 1610 , - 1281 , - 1192 , - 1343 , - 1734 , - 445 , - 1316 , - 507 , - 1858 , - 1529 , - 1440 , - 1591 , - 62 , - 693 , - 1564 , - 755 , - 186 , - 1777 , - 1688 , - 1839 , - 310 , - 941 , - 1812 , - 1003 , - 434 , - 105 , - 16 , - 167 , - 558 , - 1189 , - 140 , - 1251 , - 682 , - 353 , - 264 , - 415 , - 806 , - 1437 , - 388 , - 1499 , - 930 , - 601 , - 512 , - 663 , - 1054 , - 1685 , - 636 , - 1747 , - 1178 , - 849 , - 760 , - 911 , - 1302 , - 13 , - 884 , - 75 , - 1426 , - 1097 , - 1008 , - 1159 , - 1550 , - 261 , - 1132 , - 323 , - 1674 , - 1345 , - 1256 , - 1407 , - 1798 , - 509 , - 1380 , - 571 , - 2 , - 1593 , - 1504 , - 1655 , - 126 , - 757 , - 1628 , - 819 , - 250 , - 1841 , - 1752 , - 1903 , - 374 , - 1005 , - 1876 , - 1067 , - 498 , - 169 , - 80 , - 231 , - 622 , - 1253 , - 204 , - 1315 , - 746 , - 417 , - 328 , - 479 , - 870 , - 1501 , - 452 , - 1563 , - 994 , - 665 , - 576 , - 727 , - 1118 , - 1749 , - 700 , - 1811 , - 1242 , - 913 , - 824 , - 975 , - 1366 , - 77 , - 948 , - 139 , - 1490 , - 1161 , - 1072 , - 1223 , - 1614 , - 325 , - 1196 , - 387 , - 1738 , - 1409 , - 1320 , - 1471 , - 1862 , - 573 , - 1444 , - 635 , - 66 , - 1657 , - 1568 , - 1719 , - 190 , - 821 , - 1692 , - 883 , - 314 , - 1905 , - 1816 , - 47 , - 438 , - 1069 , - 20 , - 1131 , - 562 , - 233 , - 144 , - 295 , - 686 , - 1317 , - 268 , - 1379 , - 810 , - 481 , - 392 , - 543 , - 934 , - 1565 , - 516 , - 1627 , - 1058 , - 729 , - 640 , - 791 , - 1182 , - 1813 , - 764 , - 1875 , - 1306 , - 977 , - 888 , - 1039 , - 1430 , - 141 , - 1012 , - 203 , - 1554 , - 1225 , - 1136 , - 1287 , - 1678 , - 389 , - 1260 , - 451 , - 1802 , - 1473 , - 1384 , - 1535 , - 6 , - 637 , - 1508 , - 699 , - 130 , - 1721 , - 1632 , - 1783 , - 254 , - 885 , - 1756 , - 947 , - 378 , - 49 , - 1880 , - 111 , - 502 , - 1133 , - 84 , - 1195 , - 626 , - 297 , - 208 , - 359 , - 750 , - 1381 , - 332 , - 1443 , - 874 , - 545 , - 456 , - 607 , - 998 , - 1629 , - 580 , - 1691 , - 1122 , - 793 , - 704 , - 855 , - 1246 , - 1877 , - 828 , - 19 , - 1370 , - 1041 , - 952 , - 1103 , - 1494 , - 205 , - 1076 , - 267 , - 1618 , - 1289 , - 1200 , - 1351 , - 1742 , - 453 , - 1324 , - 515 , - 1866 , - 1537 , - 1448 , - 1599 , - 70 , - 701 , - 1572 , - 763 , - 194 , - 1785 , - 1696 , - 1847 , - 318 , - 949 , - 1820 , - 1011 , - 442 , - 113 , - 24 , - 175 , - 566 , - 1197 , - 148 , - 1259 , - 690 , - 361 , - 272 , - 423 , - 814 , - 1445 , - 396 , - 1507 , - 938 , - 609 , - 520 , - 671 , - 1062 , - 1693 , - 644 , - 1755 , - 1186 , - 857 , - 768 , - 919 , - 1310 , - 21 , - 892 , - 83 , - 1434 , - 1105 , - 1016 , - 1167 , - 1558 , - 269 , - 1140 , - 331 , - 1682 , - 1353 , - 1264 , - 1415 , - 1806 , - 517 , - 1388 , - 579 , - 10 , - 1601 , - 1512 , - 1663 , - 134 , - 765 , - 1636 , - 827 , - 258 , - 1849 , - 1760 , - 1911 , - 382 , - 1013 , - 1884 , - 1075 , - 506 , - 177 , - 88 , - 239 , - 630 , - 1261 , - 212 , - 1323 , - 754 , - 425 , - 336 , - 487 , - 878 , - 1509 , - 460 , - 1571 , - 1002 , - 673 , - 584 , - 735 , - 1126 , - 1757 , - 708 , - 1819 , - 1250 , - 921 , - 832 , - 983 , - 1374 , - 85 , - 956 , - 147 , - 1498 , - 1169 , - 1080 , - 1231 , - 1622 , - 333 , - 1204 , - 395 , - 1746 , - 1417 , - 1328 , - 1479 , - 1870 , - 581 , - 1452 , - 643 , - 74 , - 1665 , - 1576 , - 1727 , - 198 , - 829 , - 1700 , - 891 , - 322 , - 1913 , - 1824 , - 55 , - 446 , - 1077 , - 28 , - 1139 , - 570 , - 241 , - 152 , - 303 , - 694 , - 1325 , - 276 , - 1387 , - 818 , - 489 , - 400 , - 551 , - 942 , - 1573 , - 524 , - 1635 , - 1066 , - 737 , - 648 , - 799 , - 1190 , - 1821 , - 772 , - 1883 , - 1314 , - 985 , - 896 , - 1047 , - 1438 , - 149 , - 1020 , - 211 , - 1562 , - 1233 , - 1144 , - 1295 , - 1686 , - 397 , - 1268 , - 459 , - 1810 , - 1481 , - 1392 , - 1543 , - 14 , - 645 , - 1516 , - 707 , - 138 , - 1729 , - 1640 , - 1791 , - 262 , - 893 , - 1764 , - 955 , - 386 , - 57 , - 1888 , - 119 , - 510 , - 1141 , - 92 , - 1203 , - 634 , - 305 , - 216 , - 367 , - 758 , - 1389 , - 340 , - 1451 , - 882 , - 553 , - 464 , - 615 , - 1006 , - 1637 , - 588 , - 1699 , - 1130 , - 801 , - 712 , - 863 , - 1254 , - 1885 , - 836 , - 27 , - 1378 , - 1049 , - 960 , - 1111 , - 1502 , - 213 , - 1084 , - 275 , - 1626 , - 1297 , - 1208 , - 1359 , - 1750 , - 461 , - 1332 , - 523 , - 1874 , - 1545 , - 1456 , - 1607 , - 78 , - 709 , - 1580 , - 771 , - 202 , - 1793 , - 1704 , - 1855 , - 326 , - 957 , - 1828 , - 1019 , - 450 , - 121 , - 32 , - 183 , - 574 , - 1205 , - 156 , - 1267 , - 698 , - 369 , - 280 , - 431 , - 822 , - 1453 , - 404 , - 1515 , - 946 , - 617 , - 528 , - 679 , - 1070 , - 1701 , - 652 , - 1763 , - 1194 , - 865 , - 776 , - 927 , - 1318 , - 29 , - 900 , - 91 , - 1442 , - 1113 , - 1024 , - 1175 , - 1566 , - 277 , - 1148 , - 339 , - 1690 , - 1361 , - 1272 , - 1423 , - 1814 , - 525 , - 1396 , - 587 , - 18 , - 1609 , - 1520 , - 1671 , - 142 , - 773 , - 1644 , - 835 , - 266 , - 1857 , - 1768 , - 1919 , - 390 , - 1021 , - 1892 , - 1083 , - 514 , - 185 , - 96 , - 247 , - 638 , - 1269 , - 220 , - 1331 , - 762 , - 433 , - 344 , - 495 , - 886 , - 1517 , - 468 , - 1579 , - 1010 , - 681 , - 592 , - 743 , - 1134 , - 1765 , - 716 , - 1827 , - 1258 , - 929 , - 840 , - 991 , - 1382 , - 93 , - 964 , - 155 , - 1506 , - 1177 , - 1088 , - 1239 , - 1630 , - 341 , - 1212 , - 403 , - 1754 , - 1425 , - 1336 , - 1487 , - 1878 , - 589 , - 1460 , - 651 , - 82 , - 1673 , - 1584 , - 1735 , - 206 , - 837 , - 1708 , - 899 , - 330 , - 1 , - 1832 , - 63 , - 454 , - 1085 , - 36 , - 1147 , - 578 , - 249 , - 160 , - 311 , - 702 , - 1333 , - 284 , - 1395 , - 826 , - 497 , - 408 , - 559 , - 950 , - 1581 , - 532 , - 1643 , - 1074 , - 745 , - 656 , - 807 , - 1198 , - 1829 , - 780 , - 1891 , - 1322 , - 993 , - 904 , - 1055 , - 1446 , - 157 , - 1028 , - 219 , - 1570 , - 1241 , - 1152 , - 1303 , - 1694 , - 405 , - 1276 , - 467 , - 1818 , - 1489 , - 1400 , - 1551 , - 22 , - 653 , - 1524 , - 715 , - 146 , - 1737 , - 1648 , - 1799 , - 270 , - 901 , - 1772 , - 963 , - 394 , - 65 , - 1896 , - 127 , - 518 , - 1149 , - 100 , - 1211 , - 642 , - 313 , - 224 , - 375 , - 766 , - 1397 , - 348 , - 1459 , - 890 , - 561 , - 472 , - 623 , - 1014 , - 1645 , - 596 , - 1707 , - 1138 , - 809 , - 720 , - 871 , - 1262 , - 1893 , - 844 , - 35 , - 1386 , - 1057 , - 968 , - 1119 , - 1510 , - 221 , - 1092 , - 283 , - 1634 , - 1305 , - 1216 , - 1367 , - 1758 , - 469 , - 1340 , - 531 , - 1882 , - 1553 , - 1464 , - 1615 , - 86 , - 717 , - 1588 , - 779 , - 210 , - 1801 , - 1712 , - 1863 , - 334 , - 965 , - 1836 , - 1027 , - 458 , - 129 , - 40 , - 191 , - 582 , - 1213 , - 164 , - 1275 , - 706 , - 377 , - 288 , - 439 , - 830 , - 1461 , - 412 , - 1523 , - 954 , - 625 , - 536 , - 687 , - 1078 , - 1709 , - 660 , - 1771 , - 1202 , - 873 , - 784 , - 935 , - 1326 , - 37 , - 908 , - 99 , - 1450 , - 1121 , - 1032 , - 1183 , - 1574 , - 285 , - 1156 , - 347 , - 1698 , - 1369 , - 1280 , - 1431 , - 1822 , - 533 , - 1404 , - 595 , - 26 , - 1617 , - 1528 , - 1679 , - 150 , - 781 , - 1652 , - 843 , - 274 , - 1865 , - 1776 , - 7 , - 398 , - 1029 , - 1900 , - 1091 , - 522 , - 193 , - 104 , - 255 , - 646 , - 1277 , - 228 , - 1339 , - 770 , - 441 , - 352 , - 503 , - 894 , - 1525 , - 476 , - 1587 , - 1018 , - 689 , - 600 , - 751 , - 1142 , - 1773 , - 724 , - 1835 , - 1266 , - 937 , - 848 , - 999 , - 1390 , - 101 , - 972 , - 163 , - 1514 , - 1185 , - 1096 , - 1247 , - 1638 , - 349 , - 1220 , - 411 , - 1762 , - 1433 , - 1344 , - 1495 , - 1886 , - 597 , - 1468 , - 659 , - 90 , - 1681 , - 1592 , - 1743 , - 214 , - 845 , - 1716 , - 907 , - 338 , - 9 , - 1840 , - 71 , - 462 , - 1093 , - 44 , - 1155 , - 586 , - 257 , - 168 , - 319 , - 710 , - 1341 , - 292 , - 1403 , - 834 , - 505 , - 416 , - 567 , - 958 , - 1589 , - 540 , - 1651 , - 1082 , - 753 , - 664 , - 815 , - 1206 , - 1837 , - 788 , - 1899 , - 1330 , - 1001 , - 912 , - 1063 , - 1454 , - 165 , - 1036 , - 227 , - 1578 , - 1249 , - 1160 , - 1311 , - 1702 , - 413 , - 1284 , - 475 , - 1826 , - 1497 , - 1408 , - 1559 , - 30 , - 661 , - 1532 , - 723 , - 154 , - 1745 , - 1656 , - 1807 , - 278 , - 909 , - 1780 , - 971 , - 402 , - 73 , - 1904 , - 135 , - 526 , - 1157 , - 108 , - 1219 , - 650 , - 321 , - 232 , - 383 , - 774 , - 1405 , - 356 , - 1467 , - 898 , - 569 , - 480 , - 631 , - 1022 , - 1653 , - 604 , - 1715 , - 1146 , - 817 , - 728 , - 879 , - 1270 , - 1901 , - 852 , - 43 , - 1394 , - 1065 , - 976 , - 1127 , - 1518 , - 229 , - 1100 , - 291 , - 1642 , - 1313 , - 1224 , - 1375 , - 1766 , - 477 , - 1348 , - 539 , - 1890 , - 1561 , - 1472 , - 1623 , - 94 , - 725 , - 1596 , - 787 , - 218 , - 1809 , - 1720 , - 1871 , - 342 , - 973 , - 1844 , - 1035 , - 466 , - 137 , - 48 , - 199 , - 590 , - 1221 , - 172 , - 1283 , - 714 , - 385 , - 296 , - 447 , - 838 , - 1469 , - 420 , - 1531 , - 962 , - 633 , - 544 , - 695 , - 1086 , - 1717 , - 668 , - 1779 , - 1210 , - 881 , - 792 , - 943 , - 1334 , - 45 , - 916 , - 107 , - 1458 , - 1129 , - 1040 , - 1191 , - 1582 , - 293 , - 1164 , - 355 , - 1706 , - 1377 , - 1288 , - 1439 , - 1830 , - 541 , - 1412 , - 603 , - 34 , - 1625 , - 1536 , - 1687 , - 158 , - 789 , - 1660 , - 851 , - 282 , - 1873 , - 1784 , - 15 , - 406 , - 1037 , - 1908 , - 1099 , - 530 , - 201 , - 112 , - 263 , - 654 , - 1285 , - 236 , - 1347 , - 778 , - 449 , - 360 , - 511 , - 902 , - 1533 , - 484 , - 1595 , - 1026 , - 697 , - 608 , - 759 , - 1150 , - 1781 , - 732 , - 1843 , - 1274 , - 945 , - 856 , - 1007 , - 1398 , - 109 , - 980 , - 171 , - 1522 , - 1193 , - 1104 , - 1255 , - 1646 , - 357 , - 1228 , - 419 , - 1770 , - 1441 , - 1352 , - 1503 , - 1894 , - 605 , - 1476 , - 667 , - 98 , - 1689 , - 1600 , - 1751 , - 222 , - 853 , - 1724 , - 915 , - 346 , - 17 , - 1848 , - 79 , - 470 , - 1101 , - 52 , - 1163 , - 594 , - 265 , - 176 , - 327 , - 718 , - 1349 , - 300 , - 1411 , - 842 , - 513 , - 424 , - 575 , - 966 , - 1597 , - 548 , - 1659 , - 1090 , - 761 , - 672 , - 823 , - 1214 , - 1845 , - 796 , - 1907 , - 1338 , - 1009 , - 920 , - 1071 , - 1462 , - 173 , - 1044 , - 235 , - 1586 , - 1257 , - 1168 , - 1319 , - 1710 , - 421 , - 1292 , - 483 , - 1834 , - 1505 , - 1416 , - 1567 , - 38 , - 669 , - 1540 , - 731 , - 162 , - 1753 , - 1664 , - 1815 , - 286 , - 917 , - 1788 , - 979 , - 410 , - 81 , - 1912 , - 143 , - 534 , - 1165 , - 116 , - 1227 , - 658 , - 329 , - 240 , - 391 , - 782 , - 1413 , - 364 , - 1475 , - 906 , - 577 , - 488 , - 639 , - 1030 , - 1661 , - 612 , - 1723 , - 1154 , - 825 , - 736 , - 887 , - 1278 , - 1909 , - 860 , - 51 , - 1402 , - 1073 , - 984 , - 1135 , - 1526 , - 237 , - 1108 , - 299 , - 1650 , - 1321 , - 1232 , - 1383 , - 1774 , - 485 , - 1356 , - 547 , - 1898 , - 1569 , - 1480 , - 1631 , - 102 , - 733 , - 1604 , - 795 , - 226 , - 1817 , - 1728 , - 1879 , - 350 , - 981 , - 1852 , - 1043 , - 474 , - 145 , - 56 , - 207 , - 598 , - 1229 , - 180 , - 1291 , - 722 , - 393 , - 304 , - 455 , - 846 , - 1477 , - 428 , - 1539 , - 970 , - 641 , - 552 , - 703 , - 1094 , - 1725 , - 676 , - 1787 , - 1218 , - 889 , - 800 , - 951 , - 1342 , - 53 , - 924 , - 115 , - 1466 , - 1137 , - 1048 , - 1199 , - 1590 , - 301 , - 1172 , - 363 , - 1714 , - 1385 , - 1296 , - 1447 , - 1838 , - 549 , - 1420 , - 611 , - 42 , - 1633 , - 1544 , - 1695 , - 166 , - 797 , - 1668 , - 859 , - 290 , - 1881 , - 1792 , - 23 , - 414 , - 1045 , - 1916 , - 1107 , - 538 , - 209 , - 120 , - 271 , - 662 , - 1293 , - 244 , - 1355 , - 786 , - 457 , - 368 , - 519 , - 910 , - 1541 , - 492 , - 1603 , - 1034 , - 705 , - 616 , - 767 , - 1158 , - 1789 , - 740 , - 1851 , - 1282 , - 953 , - 864 , - 1015 , - 1406 , - 117 , - 988 , - 179 , - 1530 , - 1201 , - 1112 , - 1263 , - 1654 , - 365 , - 1236 , - 427 , - 1778 , - 1449 , - 1360 , - 1511 , - 1902 , - 613 , - 1484 , - 675 , - 106 , - 1697 , - 1608 , - 1759 , - 230 , - 861 , - 1732 , - 923 , - 354 , - 25 , - 1856 , - 87 , - 478 , - 1109 , - 60 , - 1171 , - 602 , - 273 , - 184 , - 335 , - 726 , - 1357 , - 308 , - 1419 , - 850 , - 521 , - 432 , - 583 , - 974 , - 1605 , - 556 , - 1667 , - 1098 , - 769 , - 680 , - 831 , - 1222 , - 1853 , - 804 , - 1915 , - 1346 , - 1017 , - 928 , - 1079 , - 1470 , - 181 , - 1052 , - 243 , - 1594 , - 1265 , - 1176 , - 1327 , - 1718 , - 429 , - 1300 , - 491 , - 1842 , - 1513 , - 1424 , - 1575 , - 46 , - 677 , - 1548 , - 739 , - 170 , - 1761 , - 1672 , - 1823 , - 294 , - 925 , - 1796 , - 987 , - 418 , - 89 , - 0 , - 669 , - 606 , - 1763 , - 236 , - 1881 , - 842 , - 1023 , - 472 , - 1141 , - 1078 , - 283 , - 708 , - 401 , - 1314 , - 1495 , - 944 , - 1613 , - 1550 , - 755 , - 1180 , - 873 , - 1786 , - 15 , - 1416 , - 133 , - 70 , - 1227 , - 1652 , - 1345 , - 306 , - 487 , - 1888 , - 605 , - 542 , - 1699 , - 172 , - 1817 , - 778 , - 959 , - 408 , - 1077 , - 1014 , - 219 , - 644 , - 337 , - 1250 , - 1431 , - 880 , - 1549 , - 1486 , - 691 , - 1116 , - 809 , - 1722 , - 1903 , - 1352 , - 69 , - 6 , - 1163 , - 1588 , - 1281 , - 242 , - 423 , - 1824 , - 541 , - 478 , - 1635 , - 108 , - 1753 , - 714 , - 895 , - 344 , - 1013 , - 950 , - 155 , - 580 , - 273 , - 1186 , - 1367 , - 816 , - 1485 , - 1422 , - 627 , - 1052 , - 745 , - 1658 , - 1839 , - 1288 , - 5 , - 1894 , - 1099 , - 1524 , - 1217 , - 178 , - 359 , - 1760 , - 477 , - 414 , - 1571 , - 44 , - 1689 , - 650 , - 831 , - 280 , - 949 , - 886 , - 91 , - 516 , - 209 , - 1122 , - 1303 , - 752 , - 1421 , - 1358 , - 563 , - 988 , - 681 , - 1594 , - 1775 , - 1224 , - 1893 , - 1830 , - 1035 , - 1460 , - 1153 , - 114 , - 295 , - 1696 , - 413 , - 350 , - 1507 , - 1932 , - 1625 , - 586 , - 767 , - 216 , - 885 , - 822 , - 27 , - 452 , - 145 , - 1058 , - 1239 , - 688 , - 1357 , - 1294 , - 499 , - 924 , - 617 , - 1530 , - 1711 , - 1160 , - 1829 , - 1766 , - 971 , - 1396 , - 1089 , - 50 , - 231 , - 1632 , - 349 , - 286 , - 1443 , - 1868 , - 1561 , - 522 , - 703 , - 152 , - 821 , - 758 , - 1915 , - 388 , - 81 , - 994 , - 1175 , - 624 , - 1293 , - 1230 , - 435 , - 860 , - 553 , - 1466 , - 1647 , - 1096 , - 1765 , - 1702 , - 907 , - 1332 , - 1025 , - 1938 , - 167 , - 1568 , - 285 , - 222 , - 1379 , - 1804 , - 1497 , - 458 , - 639 , - 88 , - 757 , - 694 , - 1851 , - 324 , - 17 , - 930 , - 1111 , - 560 , - 1229 , - 1166 , - 371 , - 796 , - 489 , - 1402 , - 1583 , - 1032 , - 1701 , - 1638 , - 843 , - 1268 , - 961 , - 1874 , - 103 , - 1504 , - 221 , - 158 , - 1315 , - 1740 , - 1433 , - 394 , - 575 , - 24 , - 693 , - 630 , - 1787 , - 260 , - 1905 , - 866 , - 1047 , - 496 , - 1165 , - 1102 , - 307 , - 732 , - 425 , - 1338 , - 1519 , - 968 , - 1637 , - 1574 , - 779 , - 1204 , - 897 , - 1810 , - 39 , - 1440 , - 157 , - 94 , - 1251 , - 1676 , - 1369 , - 330 , - 511 , - 1912 , - 629 , - 566 , - 1723 , - 196 , - 1841 , - 802 , - 983 , - 432 , - 1101 , - 1038 , - 243 , - 668 , - 361 , - 1274 , - 1455 , - 904 , - 1573 , - 1510 , - 715 , - 1140 , - 833 , - 1746 , - 1927 , - 1376 , - 93 , - 30 , - 1187 , - 1612 , - 1305 , - 266 , - 447 , - 1848 , - 565 , - 502 , - 1659 , - 132 , - 1777 , - 738 , - 919 , - 368 , - 1037 , - 974 , - 179 , - 604 , - 297 , - 1210 , - 1391 , - 840 , - 1509 , - 1446 , - 651 , - 1076 , - 769 , - 1682 , - 1863 , - 1312 , - 29 , - 1918 , - 1123 , - 1548 , - 1241 , - 202 , - 383 , - 1784 , - 501 , - 438 , - 1595 , - 68 , - 1713 , - 674 , - 855 , - 304 , - 973 , - 910 , - 115 , - 540 , - 233 , - 1146 , - 1327 , - 776 , - 1445 , - 1382 , - 587 , - 1012 , - 705 , - 1618 , - 1799 , - 1248 , - 1917 , - 1854 , - 1059 , - 1484 , - 1177 , - 138 , - 319 , - 1720 , - 437 , - 374 , - 1531 , - 4 , - 1649 , - 610 , - 791 , - 240 , - 909 , - 846 , - 51 , - 476 , - 169 , - 1082 , - 1263 , - 712 , - 1381 , - 1318 , - 523 , - 948 , - 641 , - 1554 , - 1735 , - 1184 , - 1853 , - 1790 , - 995 , - 1420 , - 1113 , - 74 , - 255 , - 1656 , - 373 , - 310 , - 1467 , - 1892 , - 1585 , - 546 , - 727 , - 176 , - 845 , - 782 , - 1939 , - 412 , - 105 , - 1018 , - 1199 , - 648 , - 1317 , - 1254 , - 459 , - 884 , - 577 , - 1490 , - 1671 , - 1120 , - 1789 , - 1726 , - 931 , - 1356 , - 1049 , - 10 , - 191 , - 1592 , - 309 , - 246 , - 1403 , - 1828 , - 1521 , - 482 , - 663 , - 112 , - 781 , - 718 , - 1875 , - 348 , - 41 , - 954 , - 1135 , - 584 , - 1253 , - 1190 , - 395 , - 820 , - 513 , - 1426 , - 1607 , - 1056 , - 1725 , - 1662 , - 867 , - 1292 , - 985 , - 1898 , - 127 , - 1528 , - 245 , - 182 , - 1339 , - 1764 , - 1457 , - 418 , - 599 , - 48 , - 717 , - 654 , - 1811 , - 284 , - 1929 , - 890 , - 1071 , - 520 , - 1189 , - 1126 , - 331 , - 756 , - 449 , - 1362 , - 1543 , - 992 , - 1661 , - 1598 , - 803 , - 1228 , - 921 , - 1834 , - 63 , - 1464 , - 181 , - 118 , - 1275 , - 1700 , - 1393 , - 354 , - 535 , - 1936 , - 653 , - 590 , - 1747 , - 220 , - 1865 , - 826 , - 1007 , - 456 , - 1125 , - 1062 , - 267 , - 692 , - 385 , - 1298 , - 1479 , - 928 , - 1597 , - 1534 , - 739 , - 1164 , - 857 , - 1770 , - 1951 , - 1400 , - 117 , - 54 , - 1211 , - 1636 , - 1329 , - 290 , - 471 , - 1872 , - 589 , - 526 , - 1683 , - 156 , - 1801 , - 762 , - 943 , - 392 , - 1061 , - 998 , - 203 , - 628 , - 321 , - 1234 , - 1415 , - 864 , - 1533 , - 1470 , - 675 , - 1100 , - 793 , - 1706 , - 1887 , - 1336 , - 53 , - 1942 , - 1147 , - 1572 , - 1265 , - 226 , - 407 , - 1808 , - 525 , - 462 , - 1619 , - 92 , - 1737 , - 698 , - 879 , - 328 , - 997 , - 934 , - 139 , - 564 , - 257 , - 1170 , - 1351 , - 800 , - 1469 , - 1406 , - 611 , - 1036 , - 729 , - 1642 , - 1823 , - 1272 , - 1941 , - 1878 , - 1083 , - 1508 , - 1201 , - 162 , - 343 , - 1744 , - 461 , - 398 , - 1555 , - 28 , - 1673 , - 634 , - 815 , - 264 , - 933 , - 870 , - 75 , - 500 , - 193 , - 1106 , - 1287 , - 736 , - 1405 , - 1342 , - 547 , - 972 , - 665 , - 1578 , - 1759 , - 1208 , - 1877 , - 1814 , - 1019 , - 1444 , - 1137 , - 98 , - 279 , - 1680 , - 397 , - 334 , - 1491 , - 1916 , - 1609 , - 570 , - 751 , - 200 , - 869 , - 806 , - 11 , - 436 , - 129 , - 1042 , - 1223 , - 672 , - 1341 , - 1278 , - 483 , - 908 , - 601 , - 1514 , - 1695 , - 1144 , - 1813 , - 1750 , - 955 , - 1380 , - 1073 , - 34 , - 215 , - 1616 , - 333 , - 270 , - 1427 , - 1852 , - 1545 , - 506 , - 687 , - 136 , - 805 , - 742 , - 1899 , - 372 , - 65 , - 978 , - 1159 , - 608 , - 1277 , - 1214 , - 419 , - 844 , - 537 , - 1450 , - 1631 , - 1080 , - 1749 , - 1686 , - 891 , - 1316 , - 1009 , - 1922 , - 151 , - 1552 , - 269 , - 206 , - 1363 , - 1788 , - 1481 , - 442 , - 623 , - 72 , - 741 , - 678 , - 1835 , - 308 , - 1 , - 914 , - 1095 , - 544 , - 1213 , - 1150 , - 355 , - 780 , - 473 , - 1386 , - 1567 , - 1016 , - 1685 , - 1622 , - 827 , - 1252 , - 945 , - 1858 , - 87 , - 1488 , - 205 , - 142 , - 1299 , - 1724 , - 1417 , - 378 , - 559 , - 8 , - 677 , - 614 , - 1771 , - 244 , - 1889 , - 850 , - 1031 , - 480 , - 1149 , - 1086 , - 291 , - 716 , - 409 , - 1322 , - 1503 , - 952 , - 1621 , - 1558 , - 763 , - 1188 , - 881 , - 1794 , - 23 , - 1424 , - 141 , - 78 , - 1235 , - 1660 , - 1353 , - 314 , - 495 , - 1896 , - 613 , - 550 , - 1707 , - 180 , - 1825 , - 786 , - 967 , - 416 , - 1085 , - 1022 , - 227 , - 652 , - 345 , - 1258 , - 1439 , - 888 , - 1557 , - 1494 , - 699 , - 1124 , - 817 , - 1730 , - 1911 , - 1360 , - 77 , - 14 , - 1171 , - 1596 , - 1289 , - 250 , - 431 , - 1832 , - 549 , - 486 , - 1643 , - 116 , - 1761 , - 722 , - 903 , - 352 , - 1021 , - 958 , - 163 , - 588 , - 281 , - 1194 , - 1375 , - 824 , - 1493 , - 1430 , - 635 , - 1060 , - 753 , - 1666 , - 1847 , - 1296 , - 13 , - 1902 , - 1107 , - 1532 , - 1225 , - 186 , - 367 , - 1768 , - 485 , - 422 , - 1579 , - 52 , - 1697 , - 658 , - 839 , - 288 , - 957 , - 894 , - 99 , - 524 , - 217 , - 1130 , - 1311 , - 760 , - 1429 , - 1366 , - 571 , - 996 , - 689 , - 1602 , - 1783 , - 1232 , - 1901 , - 1838 , - 1043 , - 1468 , - 1161 , - 122 , - 303 , - 1704 , - 421 , - 358 , - 1515 , - 1940 , - 1633 , - 594 , - 775 , - 224 , - 893 , - 830 , - 35 , - 460 , - 153 , - 1066 , - 1247 , - 696 , - 1365 , - 1302 , - 507 , - 932 , - 625 , - 1538 , - 1719 , - 1168 , - 1837 , - 1774 , - 979 , - 1404 , - 1097 , - 58 , - 239 , - 1640 , - 357 , - 294 , - 1451 , - 1876 , - 1569 , - 530 , - 711 , - 160 , - 829 , - 766 , - 1923 , - 396 , - 89 , - 1002 , - 1183 , - 632 , - 1301 , - 1238 , - 443 , - 868 , - 561 , - 1474 , - 1655 , - 1104 , - 1773 , - 1710 , - 915 , - 1340 , - 1033 , - 1946 , - 175 , - 1576 , - 293 , - 230 , - 1387 , - 1812 , - 1505 , - 466 , - 647 , - 96 , - 765 , - 702 , - 1859 , - 332 , - 25 , - 938 , - 1119 , - 568 , - 1237 , - 1174 , - 379 , - 804 , - 497 , - 1410 , - 1591 , - 1040 , - 1709 , - 1646 , - 851 , - 1276 , - 969 , - 1882 , - 111 , - 1512 , - 229 , - 166 , - 1323 , - 1748 , - 1441 , - 402 , - 583 , - 32 , - 701 , - 638 , - 1795 , - 268 , - 1913 , - 874 , - 1055 , - 504 , - 1173 , - 1110 , - 315 , - 740 , - 433 , - 1346 , - 1527 , - 976 , - 1645 , - 1582 , - 787 , - 1212 , - 905 , - 1818 , - 47 , - 1448 , - 165 , - 102 , - 1259 , - 1684 , - 1377 , - 338 , - 519 , - 1920 , - 637 , - 574 , - 1731 , - 204 , - 1849 , - 810 , - 991 , - 440 , - 1109 , - 1046 , - 251 , - 676 , - 369 , - 1282 , - 1463 , - 912 , - 1581 , - 1518 , - 723 , - 1148 , - 841 , - 1754 , - 1935 , - 1384 , - 101 , - 38 , - 1195 , - 1620 , - 1313 , - 274 , - 455 , - 1856 , - 573 , - 510 , - 1667 , - 140 , - 1785 , - 746 , - 927 , - 376 , - 1045 , - 982 , - 187 , - 612 , - 305 , - 1218 , - 1399 , - 848 , - 1517 , - 1454 , - 659 , - 1084 , - 777 , - 1690 , - 1871 , - 1320 , - 37 , - 1926 , - 1131 , - 1556 , - 1249 , - 210 , - 391 , - 1792 , - 509 , - 446 , - 1603 , - 76 , - 1721 , - 682 , - 863 , - 312 , - 981 , - 918 , - 123 , - 548 , - 241 , - 1154 , - 1335 , - 784 , - 1453 , - 1390 , - 595 , - 1020 , - 713 , - 1626 , - 1807 , - 1256 , - 1925 , - 1862 , - 1067 , - 1492 , - 1185 , - 146 , - 327 , - 1728 , - 445 , - 382 , - 1539 , - 12 , - 1657 , - 618 , - 799 , - 248 , - 917 , - 854 , - 59 , - 484 , - 177 , - 1090 , - 1271 , - 720 , - 1389 , - 1326 , - 531 , - 956 , - 649 , - 1562 , - 1743 , - 1192 , - 1861 , - 1798 , - 1003 , - 1428 , - 1121 , - 82 , - 263 , - 1664 , - 381 , - 318 , - 1475 , - 1900 , - 1593 , - 554 , - 735 , - 184 , - 853 , - 790 , - 1947 , - 420 , - 113 , - 1026 , - 1207 , - 656 , - 1325 , - 1262 , - 467 , - 892 , - 585 , - 1498 , - 1679 , - 1128 , - 1797 , - 1734 , - 939 , - 1364 , - 1057 , - 18 , - 199 , - 1600 , - 317 , - 254 , - 1411 , - 1836 , - 1529 , - 490 , - 671 , - 120 , - 789 , - 726 , - 1883 , - 356 , - 49 , - 962 , - 1143 , - 592 , - 1261 , - 1198 , - 403 , - 828 , - 521 , - 1434 , - 1615 , - 1064 , - 1733 , - 1670 , - 875 , - 1300 , - 993 , - 1906 , - 135 , - 1536 , - 253 , - 190 , - 1347 , - 1772 , - 1465 , - 426 , - 607 , - 56 , - 725 , - 662 , - 1819 , - 292 , - 1937 , - 898 , - 1079 , - 528 , - 1197 , - 1134 , - 339 , - 764 , - 457 , - 1370 , - 1551 , - 1000 , - 1669 , - 1606 , - 811 , - 1236 , - 929 , - 1842 , - 71 , - 1472 , - 189 , - 126 , - 1283 , - 1708 , - 1401 , - 362 , - 543 , - 1944 , - 661 , - 598 , - 1755 , - 228 , - 1873 , - 834 , - 1015 , - 464 , - 1133 , - 1070 , - 275 , - 700 , - 393 , - 1306 , - 1487 , - 936 , - 1605 , - 1542 , - 747 , - 1172 , - 865 , - 1778 , - 7 , - 1408 , - 125 , - 62 , - 1219 , - 1644 , - 1337 , - 298 , - 479 , - 1880 , - 597 , - 534 , - 1691 , - 164 , - 1809 , - 770 , - 951 , - 400 , - 1069 , - 1006 , - 211 , - 636 , - 329 , - 1242 , - 1423 , - 872 , - 1541 , - 1478 , - 683 , - 1108 , - 801 , - 1714 , - 1895 , - 1344 , - 61 , - 1950 , - 1155 , - 1580 , - 1273 , - 234 , - 415 , - 1816 , - 533 , - 470 , - 1627 , - 100 , - 1745 , - 706 , - 887 , - 336 , - 1005 , - 942 , - 147 , - 572 , - 265 , - 1178 , - 1359 , - 808 , - 1477 , - 1414 , - 619 , - 1044 , - 737 , - 1650 , - 1831 , - 1280 , - 1949 , - 1886 , - 1091 , - 1516 , - 1209 , - 170 , - 351 , - 1752 , - 469 , - 406 , - 1563 , - 36 , - 1681 , - 642 , - 823 , - 272 , - 941 , - 878 , - 83 , - 508 , - 201 , - 1114 , - 1295 , - 744 , - 1413 , - 1350 , - 555 , - 980 , - 673 , - 1586 , - 1767 , - 1216 , - 1885 , - 1822 , - 1027 , - 1452 , - 1145 , - 106 , - 287 , - 1688 , - 405 , - 342 , - 1499 , - 1924 , - 1617 , - 578 , - 759 , - 208 , - 877 , - 814 , - 19 , - 444 , - 137 , - 1050 , - 1231 , - 680 , - 1349 , - 1286 , - 491 , - 916 , - 609 , - 1522 , - 1703 , - 1152 , - 1821 , - 1758 , - 963 , - 1388 , - 1081 , - 42 , - 223 , - 1624 , - 341 , - 278 , - 1435 , - 1860 , - 1553 , - 514 , - 695 , - 144 , - 813 , - 750 , - 1907 , - 380 , - 73 , - 986 , - 1167 , - 616 , - 1285 , - 1222 , - 427 , - 852 , - 545 , - 1458 , - 1639 , - 1088 , - 1757 , - 1694 , - 899 , - 1324 , - 1017 , - 1930 , - 159 , - 1560 , - 277 , - 214 , - 1371 , - 1796 , - 1489 , - 450 , - 631 , - 80 , - 749 , - 686 , - 1843 , - 316 , - 9 , - 922 , - 1103 , - 552 , - 1221 , - 1158 , - 363 , - 788 , - 481 , - 1394 , - 1575 , - 1024 , - 1693 , - 1630 , - 835 , - 1260 , - 953 , - 1866 , - 95 , - 1496 , - 213 , - 150 , - 1307 , - 1732 , - 1425 , - 386 , - 567 , - 16 , - 685 , - 622 , - 1779 , - 252 , - 1897 , - 858 , - 1039 , - 488 , - 1157 , - 1094 , - 299 , - 724 , - 417 , - 1330 , - 1511 , - 960 , - 1629 , - 1566 , - 771 , - 1196 , - 889 , - 1802 , - 31 , - 1432 , - 149 , - 86 , - 1243 , - 1668 , - 1361 , - 322 , - 503 , - 1904 , - 621 , - 558 , - 1715 , - 188 , - 1833 , - 794 , - 975 , - 424 , - 1093 , - 1030 , - 235 , - 660 , - 353 , - 1266 , - 1447 , - 896 , - 1565 , - 1502 , - 707 , - 1132 , - 825 , - 1738 , - 1919 , - 1368 , - 85 , - 22 , - 1179 , - 1604 , - 1297 , - 258 , - 439 , - 1840 , - 557 , - 494 , - 1651 , - 124 , - 1769 , - 730 , - 911 , - 360 , - 1029 , - 966 , - 171 , - 596 , - 289 , - 1202 , - 1383 , - 832 , - 1501 , - 1438 , - 643 , - 1068 , - 761 , - 1674 , - 1855 , - 1304 , - 21 , - 1910 , - 1115 , - 1540 , - 1233 , - 194 , - 375 , - 1776 , - 493 , - 430 , - 1587 , - 60 , - 1705 , - 666 , - 847 , - 296 , - 965 , - 902 , - 107 , - 532 , - 225 , - 1138 , - 1319 , - 768 , - 1437 , - 1374 , - 579 , - 1004 , - 697 , - 1610 , - 1791 , - 1240 , - 1909 , - 1846 , - 1051 , - 1476 , - 1169 , - 130 , - 311 , - 1712 , - 429 , - 366 , - 1523 , - 1948 , - 1641 , - 602 , - 783 , - 232 , - 901 , - 838 , - 43 , - 468 , - 161 , - 1074 , - 1255 , - 704 , - 1373 , - 1310 , - 515 , - 940 , - 633 , - 1546 , - 1727 , - 1176 , - 1845 , - 1782 , - 987 , - 1412 , - 1105 , - 66 , - 247 , - 1648 , - 365 , - 302 , - 1459 , - 1884 , - 1577 , - 538 , - 719 , - 168 , - 837 , - 774 , - 1931 , - 404 , - 97 , - 1010 , - 1191 , - 640 , - 1309 , - 1246 , - 451 , - 876 , - 569 , - 1482 , - 1663 , - 1112 , - 1781 , - 1718 , - 923 , - 1348 , - 1041 , - 2 , - 183 , - 1584 , - 301 , - 238 , - 1395 , - 1820 , - 1513 , - 474 , - 655 , - 104 , - 773 , - 710 , - 1867 , - 340 , - 33 , - 946 , - 1127 , - 576 , - 1245 , - 1182 , - 387 , - 812 , - 505 , - 1418 , - 1599 , - 1048 , - 1717 , - 1654 , - 859 , - 1284 , - 977 , - 1890 , - 119 , - 1520 , - 237 , - 174 , - 1331 , - 1756 , - 1449 , - 410 , - 591 , - 40 , - 709 , - 646 , - 1803 , - 276 , - 1921 , - 882 , - 1063 , - 512 , - 1181 , - 1118 , - 323 , - 748 , - 441 , - 1354 , - 1535 , - 984 , - 1653 , - 1590 , - 795 , - 1220 , - 913 , - 1826 , - 55 , - 1456 , - 173 , - 110 , - 1267 , - 1692 , - 1385 , - 346 , - 527 , - 1928 , - 645 , - 582 , - 1739 , - 212 , - 1857 , - 818 , - 999 , - 448 , - 1117 , - 1054 , - 259 , - 684 , - 377 , - 1290 , - 1471 , - 920 , - 1589 , - 1526 , - 731 , - 1156 , - 849 , - 1762 , - 1943 , - 1392 , - 109 , - 46 , - 1203 , - 1628 , - 1321 , - 282 , - 463 , - 1864 , - 581 , - 518 , - 1675 , - 148 , - 1793 , - 754 , - 935 , - 384 , - 1053 , - 990 , - 195 , - 620 , - 313 , - 1226 , - 1407 , - 856 , - 1525 , - 1462 , - 667 , - 1092 , - 785 , - 1698 , - 1879 , - 1328 , - 45 , - 1934 , - 1139 , - 1564 , - 1257 , - 218 , - 399 , - 1800 , - 517 , - 454 , - 1611 , - 84 , - 1729 , - 690 , - 871 , - 320 , - 989 , - 926 , - 131 , - 556 , - 249 , - 1162 , - 1343 , - 792 , - 1461 , - 1398 , - 603 , - 1028 , - 721 , - 1634 , - 1815 , - 1264 , - 1933 , - 1870 , - 1075 , - 1500 , - 1193 , - 154 , - 335 , - 1736 , - 453 , - 390 , - 1547 , - 20 , - 1665 , - 626 , - 807 , - 256 , - 925 , - 862 , - 67 , - 492 , - 185 , - 1098 , - 1279 , - 728 , - 1397 , - 1334 , - 539 , - 964 , - 657 , - 1570 , - 1751 , - 1200 , - 1869 , - 1806 , - 1011 , - 1436 , - 1129 , - 90 , - 271 , - 1672 , - 389 , - 326 , - 1483 , - 1908 , - 1601 , - 562 , - 743 , - 192 , - 861 , - 798 , - 3 , - 428 , - 121 , - 1034 , - 1215 , - 664 , - 1333 , - 1270 , - 475 , - 900 , - 593 , - 1506 , - 1687 , - 1136 , - 1805 , - 1742 , - 947 , - 1372 , - 1065 , - 26 , - 207 , - 1608 , - 325 , - 262 , - 1419 , - 1844 , - 1537 , - 498 , - 679 , - 128 , - 797 , - 734 , - 1891 , - 364 , - 57 , - 970 , - 1151 , - 600 , - 1269 , - 1206 , - 411 , - 836 , - 529 , - 1442 , - 1623 , - 1072 , - 1741 , - 1678 , - 883 , - 1308 , - 1001 , - 1914 , - 143 , - 1544 , - 261 , - 198 , - 1355 , - 1780 , - 1473 , - 434 , - 615 , - 64 , - 733 , - 670 , - 1827 , - 300 , - 1945 , - 906 , - 1087 , - 536 , - 1205 , - 1142 , - 347 , - 772 , - 465 , - 1378 , - 1559 , - 1008 , - 1677 , - 1614 , - 819 , - 1244 , - 937 , - 1850 , - 79 , - 1480 , - 197 , - 134 , - 1291 , - 1716 , - 1409 , - 370 , - 551 , - 0 , - 309 , - 866 , - 1671 , - 740 , - 57 , - 1606 , - 1419 , - 1480 , - 1789 , - 362 , - 1167 , - 236 , - 1537 , - 1102 , - 915 , - 976 , - 1285 , - 1842 , - 663 , - 1716 , - 1033 , - 598 , - 411 , - 472 , - 781 , - 1338 , - 159 , - 1212 , - 529 , - 94 , - 1891 , - 1952 , - 277 , - 834 , - 1639 , - 708 , - 25 , - 1574 , - 1387 , - 1448 , - 1757 , - 330 , - 1135 , - 204 , - 1505 , - 1070 , - 883 , - 944 , - 1253 , - 1810 , - 631 , - 1684 , - 1001 , - 566 , - 379 , - 440 , - 749 , - 1306 , - 127 , - 1180 , - 497 , - 62 , - 1859 , - 1920 , - 245 , - 802 , - 1607 , - 676 , - 1977 , - 1542 , - 1355 , - 1416 , - 1725 , - 298 , - 1103 , - 172 , - 1473 , - 1038 , - 851 , - 912 , - 1221 , - 1778 , - 599 , - 1652 , - 969 , - 534 , - 347 , - 408 , - 717 , - 1274 , - 95 , - 1148 , - 465 , - 30 , - 1827 , - 1888 , - 213 , - 770 , - 1575 , - 644 , - 1945 , - 1510 , - 1323 , - 1384 , - 1693 , - 266 , - 1071 , - 140 , - 1441 , - 1006 , - 819 , - 880 , - 1189 , - 1746 , - 567 , - 1620 , - 937 , - 502 , - 315 , - 376 , - 685 , - 1242 , - 63 , - 1116 , - 433 , - 1982 , - 1795 , - 1856 , - 181 , - 738 , - 1543 , - 612 , - 1913 , - 1478 , - 1291 , - 1352 , - 1661 , - 234 , - 1039 , - 108 , - 1409 , - 974 , - 787 , - 848 , - 1157 , - 1714 , - 535 , - 1588 , - 905 , - 470 , - 283 , - 344 , - 653 , - 1210 , - 31 , - 1084 , - 401 , - 1950 , - 1763 , - 1824 , - 149 , - 706 , - 1511 , - 580 , - 1881 , - 1446 , - 1259 , - 1320 , - 1629 , - 202 , - 1007 , - 76 , - 1377 , - 942 , - 755 , - 816 , - 1125 , - 1682 , - 503 , - 1556 , - 873 , - 438 , - 251 , - 312 , - 621 , - 1178 , - 1983 , - 1052 , - 369 , - 1918 , - 1731 , - 1792 , - 117 , - 674 , - 1479 , - 548 , - 1849 , - 1414 , - 1227 , - 1288 , - 1597 , - 170 , - 975 , - 44 , - 1345 , - 910 , - 723 , - 784 , - 1093 , - 1650 , - 471 , - 1524 , - 841 , - 406 , - 219 , - 280 , - 589 , - 1146 , - 1951 , - 1020 , - 337 , - 1886 , - 1699 , - 1760 , - 85 , - 642 , - 1447 , - 516 , - 1817 , - 1382 , - 1195 , - 1256 , - 1565 , - 138 , - 943 , - 12 , - 1313 , - 878 , - 691 , - 752 , - 1061 , - 1618 , - 439 , - 1492 , - 809 , - 374 , - 187 , - 248 , - 557 , - 1114 , - 1919 , - 988 , - 305 , - 1854 , - 1667 , - 1728 , - 53 , - 610 , - 1415 , - 484 , - 1785 , - 1350 , - 1163 , - 1224 , - 1533 , - 106 , - 911 , - 1964 , - 1281 , - 846 , - 659 , - 720 , - 1029 , - 1586 , - 407 , - 1460 , - 777 , - 342 , - 155 , - 216 , - 525 , - 1082 , - 1887 , - 956 , - 273 , - 1822 , - 1635 , - 1696 , - 21 , - 578 , - 1383 , - 452 , - 1753 , - 1318 , - 1131 , - 1192 , - 1501 , - 74 , - 879 , - 1932 , - 1249 , - 814 , - 627 , - 688 , - 997 , - 1554 , - 375 , - 1428 , - 745 , - 310 , - 123 , - 184 , - 493 , - 1050 , - 1855 , - 924 , - 241 , - 1790 , - 1603 , - 1664 , - 1973 , - 546 , - 1351 , - 420 , - 1721 , - 1286 , - 1099 , - 1160 , - 1469 , - 42 , - 847 , - 1900 , - 1217 , - 782 , - 595 , - 656 , - 965 , - 1522 , - 343 , - 1396 , - 713 , - 278 , - 91 , - 152 , - 461 , - 1018 , - 1823 , - 892 , - 209 , - 1758 , - 1571 , - 1632 , - 1941 , - 514 , - 1319 , - 388 , - 1689 , - 1254 , - 1067 , - 1128 , - 1437 , - 10 , - 815 , - 1868 , - 1185 , - 750 , - 563 , - 624 , - 933 , - 1490 , - 311 , - 1364 , - 681 , - 246 , - 59 , - 120 , - 429 , - 986 , - 1791 , - 860 , - 177 , - 1726 , - 1539 , - 1600 , - 1909 , - 482 , - 1287 , - 356 , - 1657 , - 1222 , - 1035 , - 1096 , - 1405 , - 1962 , - 783 , - 1836 , - 1153 , - 718 , - 531 , - 592 , - 901 , - 1458 , - 279 , - 1332 , - 649 , - 214 , - 27 , - 88 , - 397 , - 954 , - 1759 , - 828 , - 145 , - 1694 , - 1507 , - 1568 , - 1877 , - 450 , - 1255 , - 324 , - 1625 , - 1190 , - 1003 , - 1064 , - 1373 , - 1930 , - 751 , - 1804 , - 1121 , - 686 , - 499 , - 560 , - 869 , - 1426 , - 247 , - 1300 , - 617 , - 182 , - 1979 , - 56 , - 365 , - 922 , - 1727 , - 796 , - 113 , - 1662 , - 1475 , - 1536 , - 1845 , - 418 , - 1223 , - 292 , - 1593 , - 1158 , - 971 , - 1032 , - 1341 , - 1898 , - 719 , - 1772 , - 1089 , - 654 , - 467 , - 528 , - 837 , - 1394 , - 215 , - 1268 , - 585 , - 150 , - 1947 , - 24 , - 333 , - 890 , - 1695 , - 764 , - 81 , - 1630 , - 1443 , - 1504 , - 1813 , - 386 , - 1191 , - 260 , - 1561 , - 1126 , - 939 , - 1000 , - 1309 , - 1866 , - 687 , - 1740 , - 1057 , - 622 , - 435 , - 496 , - 805 , - 1362 , - 183 , - 1236 , - 553 , - 118 , - 1915 , - 1976 , - 301 , - 858 , - 1663 , - 732 , - 49 , - 1598 , - 1411 , - 1472 , - 1781 , - 354 , - 1159 , - 228 , - 1529 , - 1094 , - 907 , - 968 , - 1277 , - 1834 , - 655 , - 1708 , - 1025 , - 590 , - 403 , - 464 , - 773 , - 1330 , - 151 , - 1204 , - 521 , - 86 , - 1883 , - 1944 , - 269 , - 826 , - 1631 , - 700 , - 17 , - 1566 , - 1379 , - 1440 , - 1749 , - 322 , - 1127 , - 196 , - 1497 , - 1062 , - 875 , - 936 , - 1245 , - 1802 , - 623 , - 1676 , - 993 , - 558 , - 371 , - 432 , - 741 , - 1298 , - 119 , - 1172 , - 489 , - 54 , - 1851 , - 1912 , - 237 , - 794 , - 1599 , - 668 , - 1969 , - 1534 , - 1347 , - 1408 , - 1717 , - 290 , - 1095 , - 164 , - 1465 , - 1030 , - 843 , - 904 , - 1213 , - 1770 , - 591 , - 1644 , - 961 , - 526 , - 339 , - 400 , - 709 , - 1266 , - 87 , - 1140 , - 457 , - 22 , - 1819 , - 1880 , - 205 , - 762 , - 1567 , - 636 , - 1937 , - 1502 , - 1315 , - 1376 , - 1685 , - 258 , - 1063 , - 132 , - 1433 , - 998 , - 811 , - 872 , - 1181 , - 1738 , - 559 , - 1612 , - 929 , - 494 , - 307 , - 368 , - 677 , - 1234 , - 55 , - 1108 , - 425 , - 1974 , - 1787 , - 1848 , - 173 , - 730 , - 1535 , - 604 , - 1905 , - 1470 , - 1283 , - 1344 , - 1653 , - 226 , - 1031 , - 100 , - 1401 , - 966 , - 779 , - 840 , - 1149 , - 1706 , - 527 , - 1580 , - 897 , - 462 , - 275 , - 336 , - 645 , - 1202 , - 23 , - 1076 , - 393 , - 1942 , - 1755 , - 1816 , - 141 , - 698 , - 1503 , - 572 , - 1873 , - 1438 , - 1251 , - 1312 , - 1621 , - 194 , - 999 , - 68 , - 1369 , - 934 , - 747 , - 808 , - 1117 , - 1674 , - 495 , - 1548 , - 865 , - 430 , - 243 , - 304 , - 613 , - 1170 , - 1975 , - 1044 , - 361 , - 1910 , - 1723 , - 1784 , - 109 , - 666 , - 1471 , - 540 , - 1841 , - 1406 , - 1219 , - 1280 , - 1589 , - 162 , - 967 , - 36 , - 1337 , - 902 , - 715 , - 776 , - 1085 , - 1642 , - 463 , - 1516 , - 833 , - 398 , - 211 , - 272 , - 581 , - 1138 , - 1943 , - 1012 , - 329 , - 1878 , - 1691 , - 1752 , - 77 , - 634 , - 1439 , - 508 , - 1809 , - 1374 , - 1187 , - 1248 , - 1557 , - 130 , - 935 , - 4 , - 1305 , - 870 , - 683 , - 744 , - 1053 , - 1610 , - 431 , - 1484 , - 801 , - 366 , - 179 , - 240 , - 549 , - 1106 , - 1911 , - 980 , - 297 , - 1846 , - 1659 , - 1720 , - 45 , - 602 , - 1407 , - 476 , - 1777 , - 1342 , - 1155 , - 1216 , - 1525 , - 98 , - 903 , - 1956 , - 1273 , - 838 , - 651 , - 712 , - 1021 , - 1578 , - 399 , - 1452 , - 769 , - 334 , - 147 , - 208 , - 517 , - 1074 , - 1879 , - 948 , - 265 , - 1814 , - 1627 , - 1688 , - 13 , - 570 , - 1375 , - 444 , - 1745 , - 1310 , - 1123 , - 1184 , - 1493 , - 66 , - 871 , - 1924 , - 1241 , - 806 , - 619 , - 680 , - 989 , - 1546 , - 367 , - 1420 , - 737 , - 302 , - 115 , - 176 , - 485 , - 1042 , - 1847 , - 916 , - 233 , - 1782 , - 1595 , - 1656 , - 1965 , - 538 , - 1343 , - 412 , - 1713 , - 1278 , - 1091 , - 1152 , - 1461 , - 34 , - 839 , - 1892 , - 1209 , - 774 , - 587 , - 648 , - 957 , - 1514 , - 335 , - 1388 , - 705 , - 270 , - 83 , - 144 , - 453 , - 1010 , - 1815 , - 884 , - 201 , - 1750 , - 1563 , - 1624 , - 1933 , - 506 , - 1311 , - 380 , - 1681 , - 1246 , - 1059 , - 1120 , - 1429 , - 2 , - 807 , - 1860 , - 1177 , - 742 , - 555 , - 616 , - 925 , - 1482 , - 303 , - 1356 , - 673 , - 238 , - 51 , - 112 , - 421 , - 978 , - 1783 , - 852 , - 169 , - 1718 , - 1531 , - 1592 , - 1901 , - 474 , - 1279 , - 348 , - 1649 , - 1214 , - 1027 , - 1088 , - 1397 , - 1954 , - 775 , - 1828 , - 1145 , - 710 , - 523 , - 584 , - 893 , - 1450 , - 271 , - 1324 , - 641 , - 206 , - 19 , - 80 , - 389 , - 946 , - 1751 , - 820 , - 137 , - 1686 , - 1499 , - 1560 , - 1869 , - 442 , - 1247 , - 316 , - 1617 , - 1182 , - 995 , - 1056 , - 1365 , - 1922 , - 743 , - 1796 , - 1113 , - 678 , - 491 , - 552 , - 861 , - 1418 , - 239 , - 1292 , - 609 , - 174 , - 1971 , - 48 , - 357 , - 914 , - 1719 , - 788 , - 105 , - 1654 , - 1467 , - 1528 , - 1837 , - 410 , - 1215 , - 284 , - 1585 , - 1150 , - 963 , - 1024 , - 1333 , - 1890 , - 711 , - 1764 , - 1081 , - 646 , - 459 , - 520 , - 829 , - 1386 , - 207 , - 1260 , - 577 , - 142 , - 1939 , - 16 , - 325 , - 882 , - 1687 , - 756 , - 73 , - 1622 , - 1435 , - 1496 , - 1805 , - 378 , - 1183 , - 252 , - 1553 , - 1118 , - 931 , - 992 , - 1301 , - 1858 , - 679 , - 1732 , - 1049 , - 614 , - 427 , - 488 , - 797 , - 1354 , - 175 , - 1228 , - 545 , - 110 , - 1907 , - 1968 , - 293 , - 850 , - 1655 , - 724 , - 41 , - 1590 , - 1403 , - 1464 , - 1773 , - 346 , - 1151 , - 220 , - 1521 , - 1086 , - 899 , - 960 , - 1269 , - 1826 , - 647 , - 1700 , - 1017 , - 582 , - 395 , - 456 , - 765 , - 1322 , - 143 , - 1196 , - 513 , - 78 , - 1875 , - 1936 , - 261 , - 818 , - 1623 , - 692 , - 9 , - 1558 , - 1371 , - 1432 , - 1741 , - 314 , - 1119 , - 188 , - 1489 , - 1054 , - 867 , - 928 , - 1237 , - 1794 , - 615 , - 1668 , - 985 , - 550 , - 363 , - 424 , - 733 , - 1290 , - 111 , - 1164 , - 481 , - 46 , - 1843 , - 1904 , - 229 , - 786 , - 1591 , - 660 , - 1961 , - 1526 , - 1339 , - 1400 , - 1709 , - 282 , - 1087 , - 156 , - 1457 , - 1022 , - 835 , - 896 , - 1205 , - 1762 , - 583 , - 1636 , - 953 , - 518 , - 331 , - 392 , - 701 , - 1258 , - 79 , - 1132 , - 449 , - 14 , - 1811 , - 1872 , - 197 , - 754 , - 1559 , - 628 , - 1929 , - 1494 , - 1307 , - 1368 , - 1677 , - 250 , - 1055 , - 124 , - 1425 , - 990 , - 803 , - 864 , - 1173 , - 1730 , - 551 , - 1604 , - 921 , - 486 , - 299 , - 360 , - 669 , - 1226 , - 47 , - 1100 , - 417 , - 1966 , - 1779 , - 1840 , - 165 , - 722 , - 1527 , - 596 , - 1897 , - 1462 , - 1275 , - 1336 , - 1645 , - 218 , - 1023 , - 92 , - 1393 , - 958 , - 771 , - 832 , - 1141 , - 1698 , - 519 , - 1572 , - 889 , - 454 , - 267 , - 328 , - 637 , - 1194 , - 15 , - 1068 , - 385 , - 1934 , - 1747 , - 1808 , - 133 , - 690 , - 1495 , - 564 , - 1865 , - 1430 , - 1243 , - 1304 , - 1613 , - 186 , - 991 , - 60 , - 1361 , - 926 , - 739 , - 800 , - 1109 , - 1666 , - 487 , - 1540 , - 857 , - 422 , - 235 , - 296 , - 605 , - 1162 , - 1967 , - 1036 , - 353 , - 1902 , - 1715 , - 1776 , - 101 , - 658 , - 1463 , - 532 , - 1833 , - 1398 , - 1211 , - 1272 , - 1581 , - 154 , - 959 , - 28 , - 1329 , - 894 , - 707 , - 768 , - 1077 , - 1634 , - 455 , - 1508 , - 825 , - 390 , - 203 , - 264 , - 573 , - 1130 , - 1935 , - 1004 , - 321 , - 1870 , - 1683 , - 1744 , - 69 , - 626 , - 1431 , - 500 , - 1801 , - 1366 , - 1179 , - 1240 , - 1549 , - 122 , - 927 , - 1980 , - 1297 , - 862 , - 675 , - 736 , - 1045 , - 1602 , - 423 , - 1476 , - 793 , - 358 , - 171 , - 232 , - 541 , - 1098 , - 1903 , - 972 , - 289 , - 1838 , - 1651 , - 1712 , - 37 , - 594 , - 1399 , - 468 , - 1769 , - 1334 , - 1147 , - 1208 , - 1517 , - 90 , - 895 , - 1948 , - 1265 , - 830 , - 643 , - 704 , - 1013 , - 1570 , - 391 , - 1444 , - 761 , - 326 , - 139 , - 200 , - 509 , - 1066 , - 1871 , - 940 , - 257 , - 1806 , - 1619 , - 1680 , - 5 , - 562 , - 1367 , - 436 , - 1737 , - 1302 , - 1115 , - 1176 , - 1485 , - 58 , - 863 , - 1916 , - 1233 , - 798 , - 611 , - 672 , - 981 , - 1538 , - 359 , - 1412 , - 729 , - 294 , - 107 , - 168 , - 477 , - 1034 , - 1839 , - 908 , - 225 , - 1774 , - 1587 , - 1648 , - 1957 , - 530 , - 1335 , - 404 , - 1705 , - 1270 , - 1083 , - 1144 , - 1453 , - 26 , - 831 , - 1884 , - 1201 , - 766 , - 579 , - 640 , - 949 , - 1506 , - 327 , - 1380 , - 697 , - 262 , - 75 , - 136 , - 445 , - 1002 , - 1807 , - 876 , - 193 , - 1742 , - 1555 , - 1616 , - 1925 , - 498 , - 1303 , - 372 , - 1673 , - 1238 , - 1051 , - 1112 , - 1421 , - 1978 , - 799 , - 1852 , - 1169 , - 734 , - 547 , - 608 , - 917 , - 1474 , - 295 , - 1348 , - 665 , - 230 , - 43 , - 104 , - 413 , - 970 , - 1775 , - 844 , - 161 , - 1710 , - 1523 , - 1584 , - 1893 , - 466 , - 1271 , - 340 , - 1641 , - 1206 , - 1019 , - 1080 , - 1389 , - 1946 , - 767 , - 1820 , - 1137 , - 702 , - 515 , - 576 , - 885 , - 1442 , - 263 , - 1316 , - 633 , - 198 , - 11 , - 72 , - 381 , - 938 , - 1743 , - 812 , - 129 , - 1678 , - 1491 , - 1552 , - 1861 , - 434 , - 1239 , - 308 , - 1609 , - 1174 , - 987 , - 1048 , - 1357 , - 1914 , - 735 , - 1788 , - 1105 , - 670 , - 483 , - 544 , - 853 , - 1410 , - 231 , - 1284 , - 601 , - 166 , - 1963 , - 40 , - 349 , - 906 , - 1711 , - 780 , - 97 , - 1646 , - 1459 , - 1520 , - 1829 , - 402 , - 1207 , - 276 , - 1577 , - 1142 , - 955 , - 1016 , - 1325 , - 1882 , - 703 , - 1756 , - 1073 , - 638 , - 451 , - 512 , - 821 , - 1378 , - 199 , - 1252 , - 569 , - 134 , - 1931 , - 8 , - 317 , - 874 , - 1679 , - 748 , - 65 , - 1614 , - 1427 , - 1488 , - 1797 , - 370 , - 1175 , - 244 , - 1545 , - 1110 , - 923 , - 984 , - 1293 , - 1850 , - 671 , - 1724 , - 1041 , - 606 , - 419 , - 480 , - 789 , - 1346 , - 167 , - 1220 , - 537 , - 102 , - 1899 , - 1960 , - 285 , - 842 , - 1647 , - 716 , - 33 , - 1582 , - 1395 , - 1456 , - 1765 , - 338 , - 1143 , - 212 , - 1513 , - 1078 , - 891 , - 952 , - 1261 , - 1818 , - 639 , - 1692 , - 1009 , - 574 , - 387 , - 448 , - 757 , - 1314 , - 135 , - 1188 , - 505 , - 70 , - 1867 , - 1928 , - 253 , - 810 , - 1615 , - 684 , - 1 , - 1550 , - 1363 , - 1424 , - 1733 , - 306 , - 1111 , - 180 , - 1481 , - 1046 , - 859 , - 920 , - 1229 , - 1786 , - 607 , - 1660 , - 977 , - 542 , - 355 , - 416 , - 725 , - 1282 , - 103 , - 1156 , - 473 , - 38 , - 1835 , - 1896 , - 221 , - 778 , - 1583 , - 652 , - 1953 , - 1518 , - 1331 , - 1392 , - 1701 , - 274 , - 1079 , - 148 , - 1449 , - 1014 , - 827 , - 888 , - 1197 , - 1754 , - 575 , - 1628 , - 945 , - 510 , - 323 , - 384 , - 693 , - 1250 , - 71 , - 1124 , - 441 , - 6 , - 1803 , - 1864 , - 189 , - 746 , - 1551 , - 620 , - 1921 , - 1486 , - 1299 , - 1360 , - 1669 , - 242 , - 1047 , - 116 , - 1417 , - 982 , - 795 , - 856 , - 1165 , - 1722 , - 543 , - 1596 , - 913 , - 478 , - 291 , - 352 , - 661 , - 1218 , - 39 , - 1092 , - 409 , - 1958 , - 1771 , - 1832 , - 157 , - 714 , - 1519 , - 588 , - 1889 , - 1454 , - 1267 , - 1328 , - 1637 , - 210 , - 1015 , - 84 , - 1385 , - 950 , - 763 , - 824 , - 1133 , - 1690 , - 511 , - 1564 , - 881 , - 446 , - 259 , - 320 , - 629 , - 1186 , - 7 , - 1060 , - 377 , - 1926 , - 1739 , - 1800 , - 125 , - 682 , - 1487 , - 556 , - 1857 , - 1422 , - 1235 , - 1296 , - 1605 , - 178 , - 983 , - 52 , - 1353 , - 918 , - 731 , - 792 , - 1101 , - 1658 , - 479 , - 1532 , - 849 , - 414 , - 227 , - 288 , - 597 , - 1154 , - 1959 , - 1028 , - 345 , - 1894 , - 1707 , - 1768 , - 93 , - 650 , - 1455 , - 524 , - 1825 , - 1390 , - 1203 , - 1264 , - 1573 , - 146 , - 951 , - 20 , - 1321 , - 886 , - 699 , - 760 , - 1069 , - 1626 , - 447 , - 1500 , - 817 , - 382 , - 195 , - 256 , - 565 , - 1122 , - 1927 , - 996 , - 313 , - 1862 , - 1675 , - 1736 , - 61 , - 618 , - 1423 , - 492 , - 1793 , - 1358 , - 1171 , - 1232 , - 1541 , - 114 , - 919 , - 1972 , - 1289 , - 854 , - 667 , - 728 , - 1037 , - 1594 , - 415 , - 1468 , - 785 , - 350 , - 163 , - 224 , - 533 , - 1090 , - 1895 , - 964 , - 281 , - 1830 , - 1643 , - 1704 , - 29 , - 586 , - 1391 , - 460 , - 1761 , - 1326 , - 1139 , - 1200 , - 1509 , - 82 , - 887 , - 1940 , - 1257 , - 822 , - 635 , - 696 , - 1005 , - 1562 , - 383 , - 1436 , - 753 , - 318 , - 131 , - 192 , - 501 , - 1058 , - 1863 , - 932 , - 249 , - 1798 , - 1611 , - 1672 , - 1981 , - 554 , - 1359 , - 428 , - 1729 , - 1294 , - 1107 , - 1168 , - 1477 , - 50 , - 855 , - 1908 , - 1225 , - 790 , - 603 , - 664 , - 973 , - 1530 , - 351 , - 1404 , - 721 , - 286 , - 99 , - 160 , - 469 , - 1026 , - 1831 , - 900 , - 217 , - 1766 , - 1579 , - 1640 , - 1949 , - 522 , - 1327 , - 396 , - 1697 , - 1262 , - 1075 , - 1136 , - 1445 , - 18 , - 823 , - 1876 , - 1193 , - 758 , - 571 , - 632 , - 941 , - 1498 , - 319 , - 1372 , - 689 , - 254 , - 67 , - 128 , - 437 , - 994 , - 1799 , - 868 , - 185 , - 1734 , - 1547 , - 1608 , - 1917 , - 490 , - 1295 , - 364 , - 1665 , - 1230 , - 1043 , - 1104 , - 1413 , - 1970 , - 791 , - 1844 , - 1161 , - 726 , - 539 , - 600 , - 909 , - 1466 , - 287 , - 1340 , - 657 , - 222 , - 35 , - 96 , - 405 , - 962 , - 1767 , - 836 , - 153 , - 1702 , - 1515 , - 1576 , - 1885 , - 458 , - 1263 , - 332 , - 1633 , - 1198 , - 1011 , - 1072 , - 1381 , - 1938 , - 759 , - 1812 , - 1129 , - 694 , - 507 , - 568 , - 877 , - 1434 , - 255 , - 1308 , - 625 , - 190 , - 3 , - 64 , - 373 , - 930 , - 1735 , - 804 , - 121 , - 1670 , - 1483 , - 1544 , - 1853 , - 426 , - 1231 , - 300 , - 1601 , - 1166 , - 979 , - 1040 , - 1349 , - 1906 , - 727 , - 1780 , - 1097 , - 662 , - 475 , - 536 , - 845 , - 1402 , - 223 , - 1276 , - 593 , - 158 , - 1955 , - 32 , - 341 , - 898 , - 1703 , - 772 , - 89 , - 1638 , - 1451 , - 1512 , - 1821 , - 394 , - 1199 , - 268 , - 1569 , - 1134 , - 947 , - 1008 , - 1317 , - 1874 , - 695 , - 1748 , - 1065 , - 630 , - 443 , - 504 , - 813 , - 1370 , - 191 , - 1244 , - 561 , - 126 , - 1923 , - 0 , - 533 , - 1906 , - 87 , - 1124 , - 985 , - 1686 , - 1211 , - 1576 , - 765 , - 794 , - 1663 , - 1356 , - 1889 , - 1246 , - 1443 , - 464 , - 325 , - 1026 , - 551 , - 916 , - 105 , - 134 , - 1003 , - 696 , - 1229 , - 586 , - 783 , - 1820 , - 1681 , - 366 , - 1907 , - 256 , - 1461 , - 1490 , - 343 , - 36 , - 569 , - 1942 , - 123 , - 1160 , - 1021 , - 1722 , - 1247 , - 1612 , - 801 , - 830 , - 1699 , - 1392 , - 1925 , - 1282 , - 1479 , - 500 , - 361 , - 1062 , - 587 , - 952 , - 141 , - 170 , - 1039 , - 732 , - 1265 , - 622 , - 819 , - 1856 , - 1717 , - 402 , - 1943 , - 292 , - 1497 , - 1526 , - 379 , - 72 , - 605 , - 1978 , - 159 , - 1196 , - 1057 , - 1758 , - 1283 , - 1648 , - 837 , - 866 , - 1735 , - 1428 , - 1961 , - 1318 , - 1515 , - 536 , - 397 , - 1098 , - 623 , - 988 , - 177 , - 206 , - 1075 , - 768 , - 1301 , - 658 , - 855 , - 1892 , - 1753 , - 438 , - 1979 , - 328 , - 1533 , - 1562 , - 415 , - 108 , - 641 , - 2014 , - 195 , - 1232 , - 1093 , - 1794 , - 1319 , - 1684 , - 873 , - 902 , - 1771 , - 1464 , - 1997 , - 1354 , - 1551 , - 572 , - 433 , - 1134 , - 659 , - 1024 , - 213 , - 242 , - 1111 , - 804 , - 1337 , - 694 , - 891 , - 1928 , - 1789 , - 474 , - 2015 , - 364 , - 1569 , - 1598 , - 451 , - 144 , - 677 , - 34 , - 231 , - 1268 , - 1129 , - 1830 , - 1355 , - 1720 , - 909 , - 938 , - 1807 , - 1500 , - 17 , - 1390 , - 1587 , - 608 , - 469 , - 1170 , - 695 , - 1060 , - 249 , - 278 , - 1147 , - 840 , - 1373 , - 730 , - 927 , - 1964 , - 1825 , - 510 , - 35 , - 400 , - 1605 , - 1634 , - 487 , - 180 , - 713 , - 70 , - 267 , - 1304 , - 1165 , - 1866 , - 1391 , - 1756 , - 945 , - 974 , - 1843 , - 1536 , - 53 , - 1426 , - 1623 , - 644 , - 505 , - 1206 , - 731 , - 1096 , - 285 , - 314 , - 1183 , - 876 , - 1409 , - 766 , - 963 , - 2000 , - 1861 , - 546 , - 71 , - 436 , - 1641 , - 1670 , - 523 , - 216 , - 749 , - 106 , - 303 , - 1340 , - 1201 , - 1902 , - 1427 , - 1792 , - 981 , - 1010 , - 1879 , - 1572 , - 89 , - 1462 , - 1659 , - 680 , - 541 , - 1242 , - 767 , - 1132 , - 321 , - 350 , - 1219 , - 912 , - 1445 , - 802 , - 999 , - 20 , - 1897 , - 582 , - 107 , - 472 , - 1677 , - 1706 , - 559 , - 252 , - 785 , - 142 , - 339 , - 1376 , - 1237 , - 1938 , - 1463 , - 1828 , - 1017 , - 1046 , - 1915 , - 1608 , - 125 , - 1498 , - 1695 , - 716 , - 577 , - 1278 , - 803 , - 1168 , - 357 , - 386 , - 1255 , - 948 , - 1481 , - 838 , - 1035 , - 56 , - 1933 , - 618 , - 143 , - 508 , - 1713 , - 1742 , - 595 , - 288 , - 821 , - 178 , - 375 , - 1412 , - 1273 , - 1974 , - 1499 , - 1864 , - 1053 , - 1082 , - 1951 , - 1644 , - 161 , - 1534 , - 1731 , - 752 , - 613 , - 1314 , - 839 , - 1204 , - 393 , - 422 , - 1291 , - 984 , - 1517 , - 874 , - 1071 , - 92 , - 1969 , - 654 , - 179 , - 544 , - 1749 , - 1778 , - 631 , - 324 , - 857 , - 214 , - 411 , - 1448 , - 1309 , - 2010 , - 1535 , - 1900 , - 1089 , - 1118 , - 1987 , - 1680 , - 197 , - 1570 , - 1767 , - 788 , - 649 , - 1350 , - 875 , - 1240 , - 429 , - 458 , - 1327 , - 1020 , - 1553 , - 910 , - 1107 , - 128 , - 2005 , - 690 , - 215 , - 580 , - 1785 , - 1814 , - 667 , - 360 , - 893 , - 250 , - 447 , - 1484 , - 1345 , - 30 , - 1571 , - 1936 , - 1125 , - 1154 , - 7 , - 1716 , - 233 , - 1606 , - 1803 , - 824 , - 685 , - 1386 , - 911 , - 1276 , - 465 , - 494 , - 1363 , - 1056 , - 1589 , - 946 , - 1143 , - 164 , - 25 , - 726 , - 251 , - 616 , - 1821 , - 1850 , - 703 , - 396 , - 929 , - 286 , - 483 , - 1520 , - 1381 , - 66 , - 1607 , - 1972 , - 1161 , - 1190 , - 43 , - 1752 , - 269 , - 1642 , - 1839 , - 860 , - 721 , - 1422 , - 947 , - 1312 , - 501 , - 530 , - 1399 , - 1092 , - 1625 , - 982 , - 1179 , - 200 , - 61 , - 762 , - 287 , - 652 , - 1857 , - 1886 , - 739 , - 432 , - 965 , - 322 , - 519 , - 1556 , - 1417 , - 102 , - 1643 , - 2008 , - 1197 , - 1226 , - 79 , - 1788 , - 305 , - 1678 , - 1875 , - 896 , - 757 , - 1458 , - 983 , - 1348 , - 537 , - 566 , - 1435 , - 1128 , - 1661 , - 1018 , - 1215 , - 236 , - 97 , - 798 , - 323 , - 688 , - 1893 , - 1922 , - 775 , - 468 , - 1001 , - 358 , - 555 , - 1592 , - 1453 , - 138 , - 1679 , - 28 , - 1233 , - 1262 , - 115 , - 1824 , - 341 , - 1714 , - 1911 , - 932 , - 793 , - 1494 , - 1019 , - 1384 , - 573 , - 602 , - 1471 , - 1164 , - 1697 , - 1054 , - 1251 , - 272 , - 133 , - 834 , - 359 , - 724 , - 1929 , - 1958 , - 811 , - 504 , - 1037 , - 394 , - 591 , - 1628 , - 1489 , - 174 , - 1715 , - 64 , - 1269 , - 1298 , - 151 , - 1860 , - 377 , - 1750 , - 1947 , - 968 , - 829 , - 1530 , - 1055 , - 1420 , - 609 , - 638 , - 1507 , - 1200 , - 1733 , - 1090 , - 1287 , - 308 , - 169 , - 870 , - 395 , - 760 , - 1965 , - 1994 , - 847 , - 540 , - 1073 , - 430 , - 627 , - 1664 , - 1525 , - 210 , - 1751 , - 100 , - 1305 , - 1334 , - 187 , - 1896 , - 413 , - 1786 , - 1983 , - 1004 , - 865 , - 1566 , - 1091 , - 1456 , - 645 , - 674 , - 1543 , - 1236 , - 1769 , - 1126 , - 1323 , - 344 , - 205 , - 906 , - 431 , - 796 , - 2001 , - 14 , - 883 , - 576 , - 1109 , - 466 , - 663 , - 1700 , - 1561 , - 246 , - 1787 , - 136 , - 1341 , - 1370 , - 223 , - 1932 , - 449 , - 1822 , - 3 , - 1040 , - 901 , - 1602 , - 1127 , - 1492 , - 681 , - 710 , - 1579 , - 1272 , - 1805 , - 1162 , - 1359 , - 380 , - 241 , - 942 , - 467 , - 832 , - 21 , - 50 , - 919 , - 612 , - 1145 , - 502 , - 699 , - 1736 , - 1597 , - 282 , - 1823 , - 172 , - 1377 , - 1406 , - 259 , - 1968 , - 485 , - 1858 , - 39 , - 1076 , - 937 , - 1638 , - 1163 , - 1528 , - 717 , - 746 , - 1615 , - 1308 , - 1841 , - 1198 , - 1395 , - 416 , - 277 , - 978 , - 503 , - 868 , - 57 , - 86 , - 955 , - 648 , - 1181 , - 538 , - 735 , - 1772 , - 1633 , - 318 , - 1859 , - 208 , - 1413 , - 1442 , - 295 , - 2004 , - 521 , - 1894 , - 75 , - 1112 , - 973 , - 1674 , - 1199 , - 1564 , - 753 , - 782 , - 1651 , - 1344 , - 1877 , - 1234 , - 1431 , - 452 , - 313 , - 1014 , - 539 , - 904 , - 93 , - 122 , - 991 , - 684 , - 1217 , - 574 , - 771 , - 1808 , - 1669 , - 354 , - 1895 , - 244 , - 1449 , - 1478 , - 331 , - 24 , - 557 , - 1930 , - 111 , - 1148 , - 1009 , - 1710 , - 1235 , - 1600 , - 789 , - 818 , - 1687 , - 1380 , - 1913 , - 1270 , - 1467 , - 488 , - 349 , - 1050 , - 575 , - 940 , - 129 , - 158 , - 1027 , - 720 , - 1253 , - 610 , - 807 , - 1844 , - 1705 , - 390 , - 1931 , - 280 , - 1485 , - 1514 , - 367 , - 60 , - 593 , - 1966 , - 147 , - 1184 , - 1045 , - 1746 , - 1271 , - 1636 , - 825 , - 854 , - 1723 , - 1416 , - 1949 , - 1306 , - 1503 , - 524 , - 385 , - 1086 , - 611 , - 976 , - 165 , - 194 , - 1063 , - 756 , - 1289 , - 646 , - 843 , - 1880 , - 1741 , - 426 , - 1967 , - 316 , - 1521 , - 1550 , - 403 , - 96 , - 629 , - 2002 , - 183 , - 1220 , - 1081 , - 1782 , - 1307 , - 1672 , - 861 , - 890 , - 1759 , - 1452 , - 1985 , - 1342 , - 1539 , - 560 , - 421 , - 1122 , - 647 , - 1012 , - 201 , - 230 , - 1099 , - 792 , - 1325 , - 682 , - 879 , - 1916 , - 1777 , - 462 , - 2003 , - 352 , - 1557 , - 1586 , - 439 , - 132 , - 665 , - 22 , - 219 , - 1256 , - 1117 , - 1818 , - 1343 , - 1708 , - 897 , - 926 , - 1795 , - 1488 , - 5 , - 1378 , - 1575 , - 596 , - 457 , - 1158 , - 683 , - 1048 , - 237 , - 266 , - 1135 , - 828 , - 1361 , - 718 , - 915 , - 1952 , - 1813 , - 498 , - 23 , - 388 , - 1593 , - 1622 , - 475 , - 168 , - 701 , - 58 , - 255 , - 1292 , - 1153 , - 1854 , - 1379 , - 1744 , - 933 , - 962 , - 1831 , - 1524 , - 41 , - 1414 , - 1611 , - 632 , - 493 , - 1194 , - 719 , - 1084 , - 273 , - 302 , - 1171 , - 864 , - 1397 , - 754 , - 951 , - 1988 , - 1849 , - 534 , - 59 , - 424 , - 1629 , - 1658 , - 511 , - 204 , - 737 , - 94 , - 291 , - 1328 , - 1189 , - 1890 , - 1415 , - 1780 , - 969 , - 998 , - 1867 , - 1560 , - 77 , - 1450 , - 1647 , - 668 , - 529 , - 1230 , - 755 , - 1120 , - 309 , - 338 , - 1207 , - 900 , - 1433 , - 790 , - 987 , - 8 , - 1885 , - 570 , - 95 , - 460 , - 1665 , - 1694 , - 547 , - 240 , - 773 , - 130 , - 327 , - 1364 , - 1225 , - 1926 , - 1451 , - 1816 , - 1005 , - 1034 , - 1903 , - 1596 , - 113 , - 1486 , - 1683 , - 704 , - 565 , - 1266 , - 791 , - 1156 , - 345 , - 374 , - 1243 , - 936 , - 1469 , - 826 , - 1023 , - 44 , - 1921 , - 606 , - 131 , - 496 , - 1701 , - 1730 , - 583 , - 276 , - 809 , - 166 , - 363 , - 1400 , - 1261 , - 1962 , - 1487 , - 1852 , - 1041 , - 1070 , - 1939 , - 1632 , - 149 , - 1522 , - 1719 , - 740 , - 601 , - 1302 , - 827 , - 1192 , - 381 , - 410 , - 1279 , - 972 , - 1505 , - 862 , - 1059 , - 80 , - 1957 , - 642 , - 167 , - 532 , - 1737 , - 1766 , - 619 , - 312 , - 845 , - 202 , - 399 , - 1436 , - 1297 , - 1998 , - 1523 , - 1888 , - 1077 , - 1106 , - 1975 , - 1668 , - 185 , - 1558 , - 1755 , - 776 , - 637 , - 1338 , - 863 , - 1228 , - 417 , - 446 , - 1315 , - 1008 , - 1541 , - 898 , - 1095 , - 116 , - 1993 , - 678 , - 203 , - 568 , - 1773 , - 1802 , - 655 , - 348 , - 881 , - 238 , - 435 , - 1472 , - 1333 , - 18 , - 1559 , - 1924 , - 1113 , - 1142 , - 2011 , - 1704 , - 221 , - 1594 , - 1791 , - 812 , - 673 , - 1374 , - 899 , - 1264 , - 453 , - 482 , - 1351 , - 1044 , - 1577 , - 934 , - 1131 , - 152 , - 13 , - 714 , - 239 , - 604 , - 1809 , - 1838 , - 691 , - 384 , - 917 , - 274 , - 471 , - 1508 , - 1369 , - 54 , - 1595 , - 1960 , - 1149 , - 1178 , - 31 , - 1740 , - 257 , - 1630 , - 1827 , - 848 , - 709 , - 1410 , - 935 , - 1300 , - 489 , - 518 , - 1387 , - 1080 , - 1613 , - 970 , - 1167 , - 188 , - 49 , - 750 , - 275 , - 640 , - 1845 , - 1874 , - 727 , - 420 , - 953 , - 310 , - 507 , - 1544 , - 1405 , - 90 , - 1631 , - 1996 , - 1185 , - 1214 , - 67 , - 1776 , - 293 , - 1666 , - 1863 , - 884 , - 745 , - 1446 , - 971 , - 1336 , - 525 , - 554 , - 1423 , - 1116 , - 1649 , - 1006 , - 1203 , - 224 , - 85 , - 786 , - 311 , - 676 , - 1881 , - 1910 , - 763 , - 456 , - 989 , - 346 , - 543 , - 1580 , - 1441 , - 126 , - 1667 , - 16 , - 1221 , - 1250 , - 103 , - 1812 , - 329 , - 1702 , - 1899 , - 920 , - 781 , - 1482 , - 1007 , - 1372 , - 561 , - 590 , - 1459 , - 1152 , - 1685 , - 1042 , - 1239 , - 260 , - 121 , - 822 , - 347 , - 712 , - 1917 , - 1946 , - 799 , - 492 , - 1025 , - 382 , - 579 , - 1616 , - 1477 , - 162 , - 1703 , - 52 , - 1257 , - 1286 , - 139 , - 1848 , - 365 , - 1738 , - 1935 , - 956 , - 817 , - 1518 , - 1043 , - 1408 , - 597 , - 626 , - 1495 , - 1188 , - 1721 , - 1078 , - 1275 , - 296 , - 157 , - 858 , - 383 , - 748 , - 1953 , - 1982 , - 835 , - 528 , - 1061 , - 418 , - 615 , - 1652 , - 1513 , - 198 , - 1739 , - 88 , - 1293 , - 1322 , - 175 , - 1884 , - 401 , - 1774 , - 1971 , - 992 , - 853 , - 1554 , - 1079 , - 1444 , - 633 , - 662 , - 1531 , - 1224 , - 1757 , - 1114 , - 1311 , - 332 , - 193 , - 894 , - 419 , - 784 , - 1989 , - 2 , - 871 , - 564 , - 1097 , - 454 , - 651 , - 1688 , - 1549 , - 234 , - 1775 , - 124 , - 1329 , - 1358 , - 211 , - 1920 , - 437 , - 1810 , - 2007 , - 1028 , - 889 , - 1590 , - 1115 , - 1480 , - 669 , - 698 , - 1567 , - 1260 , - 1793 , - 1150 , - 1347 , - 368 , - 229 , - 930 , - 455 , - 820 , - 9 , - 38 , - 907 , - 600 , - 1133 , - 490 , - 687 , - 1724 , - 1585 , - 270 , - 1811 , - 160 , - 1365 , - 1394 , - 247 , - 1956 , - 473 , - 1846 , - 27 , - 1064 , - 925 , - 1626 , - 1151 , - 1516 , - 705 , - 734 , - 1603 , - 1296 , - 1829 , - 1186 , - 1383 , - 404 , - 265 , - 966 , - 491 , - 856 , - 45 , - 74 , - 943 , - 636 , - 1169 , - 526 , - 723 , - 1760 , - 1621 , - 306 , - 1847 , - 196 , - 1401 , - 1430 , - 283 , - 1992 , - 509 , - 1882 , - 63 , - 1100 , - 961 , - 1662 , - 1187 , - 1552 , - 741 , - 770 , - 1639 , - 1332 , - 1865 , - 1222 , - 1419 , - 440 , - 301 , - 1002 , - 527 , - 892 , - 81 , - 110 , - 979 , - 672 , - 1205 , - 562 , - 759 , - 1796 , - 1657 , - 342 , - 1883 , - 232 , - 1437 , - 1466 , - 319 , - 12 , - 545 , - 1918 , - 99 , - 1136 , - 997 , - 1698 , - 1223 , - 1588 , - 777 , - 806 , - 1675 , - 1368 , - 1901 , - 1258 , - 1455 , - 476 , - 337 , - 1038 , - 563 , - 928 , - 117 , - 146 , - 1015 , - 708 , - 1241 , - 598 , - 795 , - 1832 , - 1693 , - 378 , - 1919 , - 268 , - 1473 , - 1502 , - 355 , - 48 , - 581 , - 1954 , - 135 , - 1172 , - 1033 , - 1734 , - 1259 , - 1624 , - 813 , - 842 , - 1711 , - 1404 , - 1937 , - 1294 , - 1491 , - 512 , - 373 , - 1074 , - 599 , - 964 , - 153 , - 182 , - 1051 , - 744 , - 1277 , - 634 , - 831 , - 1868 , - 1729 , - 414 , - 1955 , - 304 , - 1509 , - 1538 , - 391 , - 84 , - 617 , - 1990 , - 171 , - 1208 , - 1069 , - 1770 , - 1295 , - 1660 , - 849 , - 878 , - 1747 , - 1440 , - 1973 , - 1330 , - 1527 , - 548 , - 409 , - 1110 , - 635 , - 1000 , - 189 , - 218 , - 1087 , - 780 , - 1313 , - 670 , - 867 , - 1904 , - 1765 , - 450 , - 1991 , - 340 , - 1545 , - 1574 , - 427 , - 120 , - 653 , - 10 , - 207 , - 1244 , - 1105 , - 1806 , - 1331 , - 1696 , - 885 , - 914 , - 1783 , - 1476 , - 2009 , - 1366 , - 1563 , - 584 , - 445 , - 1146 , - 671 , - 1036 , - 225 , - 254 , - 1123 , - 816 , - 1349 , - 706 , - 903 , - 1940 , - 1801 , - 486 , - 11 , - 376 , - 1581 , - 1610 , - 463 , - 156 , - 689 , - 46 , - 243 , - 1280 , - 1141 , - 1842 , - 1367 , - 1732 , - 921 , - 950 , - 1819 , - 1512 , - 29 , - 1402 , - 1599 , - 620 , - 481 , - 1182 , - 707 , - 1072 , - 261 , - 290 , - 1159 , - 852 , - 1385 , - 742 , - 939 , - 1976 , - 1837 , - 522 , - 47 , - 412 , - 1617 , - 1646 , - 499 , - 192 , - 725 , - 82 , - 279 , - 1316 , - 1177 , - 1878 , - 1403 , - 1768 , - 957 , - 986 , - 1855 , - 1548 , - 65 , - 1438 , - 1635 , - 656 , - 517 , - 1218 , - 743 , - 1108 , - 297 , - 326 , - 1195 , - 888 , - 1421 , - 778 , - 975 , - 2012 , - 1873 , - 558 , - 83 , - 448 , - 1653 , - 1682 , - 535 , - 228 , - 761 , - 118 , - 315 , - 1352 , - 1213 , - 1914 , - 1439 , - 1804 , - 993 , - 1022 , - 1891 , - 1584 , - 101 , - 1474 , - 1671 , - 692 , - 553 , - 1254 , - 779 , - 1144 , - 333 , - 362 , - 1231 , - 924 , - 1457 , - 814 , - 1011 , - 32 , - 1909 , - 594 , - 119 , - 484 , - 1689 , - 1718 , - 571 , - 264 , - 797 , - 154 , - 351 , - 1388 , - 1249 , - 1950 , - 1475 , - 1840 , - 1029 , - 1058 , - 1927 , - 1620 , - 137 , - 1510 , - 1707 , - 728 , - 589 , - 1290 , - 815 , - 1180 , - 369 , - 398 , - 1267 , - 960 , - 1493 , - 850 , - 1047 , - 68 , - 1945 , - 630 , - 155 , - 520 , - 1725 , - 1754 , - 607 , - 300 , - 833 , - 190 , - 387 , - 1424 , - 1285 , - 1986 , - 1511 , - 1876 , - 1065 , - 1094 , - 1963 , - 1656 , - 173 , - 1546 , - 1743 , - 764 , - 625 , - 1326 , - 851 , - 1216 , - 405 , - 434 , - 1303 , - 996 , - 1529 , - 886 , - 1083 , - 104 , - 1981 , - 666 , - 191 , - 556 , - 1761 , - 1790 , - 643 , - 336 , - 869 , - 226 , - 423 , - 1460 , - 1321 , - 6 , - 1547 , - 1912 , - 1101 , - 1130 , - 1999 , - 1692 , - 209 , - 1582 , - 1779 , - 800 , - 661 , - 1362 , - 887 , - 1252 , - 441 , - 470 , - 1339 , - 1032 , - 1565 , - 922 , - 1119 , - 140 , - 1 , - 702 , - 227 , - 592 , - 1797 , - 1826 , - 679 , - 372 , - 905 , - 262 , - 459 , - 1496 , - 1357 , - 42 , - 1583 , - 1948 , - 1137 , - 1166 , - 19 , - 1728 , - 245 , - 1618 , - 1815 , - 836 , - 697 , - 1398 , - 923 , - 1288 , - 477 , - 506 , - 1375 , - 1068 , - 1601 , - 958 , - 1155 , - 176 , - 37 , - 738 , - 263 , - 628 , - 1833 , - 1862 , - 715 , - 408 , - 941 , - 298 , - 495 , - 1532 , - 1393 , - 78 , - 1619 , - 1984 , - 1173 , - 1202 , - 55 , - 1764 , - 281 , - 1654 , - 1851 , - 872 , - 733 , - 1434 , - 959 , - 1324 , - 513 , - 542 , - 1411 , - 1104 , - 1637 , - 994 , - 1191 , - 212 , - 73 , - 774 , - 299 , - 664 , - 1869 , - 1898 , - 751 , - 444 , - 977 , - 334 , - 531 , - 1568 , - 1429 , - 114 , - 1655 , - 4 , - 1209 , - 1238 , - 91 , - 1800 , - 317 , - 1690 , - 1887 , - 908 , - 769 , - 1470 , - 995 , - 1360 , - 549 , - 578 , - 1447 , - 1140 , - 1673 , - 1030 , - 1227 , - 248 , - 109 , - 810 , - 335 , - 700 , - 1905 , - 1934 , - 787 , - 480 , - 1013 , - 370 , - 567 , - 1604 , - 1465 , - 150 , - 1691 , - 40 , - 1245 , - 1274 , - 127 , - 1836 , - 353 , - 1726 , - 1923 , - 944 , - 805 , - 1506 , - 1031 , - 1396 , - 585 , - 614 , - 1483 , - 1176 , - 1709 , - 1066 , - 1263 , - 284 , - 145 , - 846 , - 371 , - 736 , - 1941 , - 1970 , - 823 , - 516 , - 1049 , - 406 , - 603 , - 1640 , - 1501 , - 186 , - 1727 , - 76 , - 1281 , - 1310 , - 163 , - 1872 , - 389 , - 1762 , - 1959 , - 980 , - 841 , - 1542 , - 1067 , - 1432 , - 621 , - 650 , - 1519 , - 1212 , - 1745 , - 1102 , - 1299 , - 320 , - 181 , - 882 , - 407 , - 772 , - 1977 , - 2006 , - 859 , - 552 , - 1085 , - 442 , - 639 , - 1676 , - 1537 , - 222 , - 1763 , - 112 , - 1317 , - 1346 , - 199 , - 1908 , - 425 , - 1798 , - 1995 , - 1016 , - 877 , - 1578 , - 1103 , - 1468 , - 657 , - 686 , - 1555 , - 1248 , - 1781 , - 1138 , - 1335 , - 356 , - 217 , - 918 , - 443 , - 808 , - 2013 , - 26 , - 895 , - 588 , - 1121 , - 478 , - 675 , - 1712 , - 1573 , - 258 , - 1799 , - 148 , - 1353 , - 1382 , - 235 , - 1944 , - 461 , - 1834 , - 15 , - 1052 , - 913 , - 1614 , - 1139 , - 1504 , - 693 , - 722 , - 1591 , - 1284 , - 1817 , - 1174 , - 1371 , - 392 , - 253 , - 954 , - 479 , - 844 , - 33 , - 62 , - 931 , - 624 , - 1157 , - 514 , - 711 , - 1748 , - 1609 , - 294 , - 1835 , - 184 , - 1389 , - 1418 , - 271 , - 1980 , - 497 , - 1870 , - 51 , - 1088 , - 949 , - 1650 , - 1175 , - 1540 , - 729 , - 758 , - 1627 , - 1320 , - 1853 , - 1210 , - 1407 , - 428 , - 289 , - 990 , - 515 , - 880 , - 69 , - 98 , - 967 , - 660 , - 1193 , - 550 , - 747 , - 1784 , - 1645 , - 330 , - 1871 , - 220 , - 1425 , - 1454 , - 307 , - 0 , - 95 , - 318 , - 669 , - 1148 , - 1755 , - 442 , - 1305 , - 248 , - 1367 , - 566 , - 1941 , - 1396 , - 979 , - 690 , - 529 , - 496 , - 591 , - 814 , - 1165 , - 1644 , - 203 , - 938 , - 1801 , - 744 , - 1863 , - 1062 , - 389 , - 1892 , - 1475 , - 1186 , - 1025 , - 992 , - 1087 , - 1310 , - 1661 , - 92 , - 699 , - 1434 , - 249 , - 1240 , - 311 , - 1558 , - 885 , - 340 , - 1971 , - 1682 , - 1521 , - 1488 , - 1583 , - 1806 , - 109 , - 588 , - 1195 , - 1930 , - 745 , - 1736 , - 807 , - 6 , - 1381 , - 836 , - 419 , - 130 , - 2017 , - 1984 , - 31 , - 254 , - 605 , - 1084 , - 1691 , - 378 , - 1241 , - 184 , - 1303 , - 502 , - 1877 , - 1332 , - 915 , - 626 , - 465 , - 432 , - 527 , - 750 , - 1101 , - 1580 , - 139 , - 874 , - 1737 , - 680 , - 1799 , - 998 , - 325 , - 1828 , - 1411 , - 1122 , - 961 , - 928 , - 1023 , - 1246 , - 1597 , - 28 , - 635 , - 1370 , - 185 , - 1176 , - 247 , - 1494 , - 821 , - 276 , - 1907 , - 1618 , - 1457 , - 1424 , - 1519 , - 1742 , - 45 , - 524 , - 1131 , - 1866 , - 681 , - 1672 , - 743 , - 1990 , - 1317 , - 772 , - 355 , - 66 , - 1953 , - 1920 , - 2015 , - 190 , - 541 , - 1020 , - 1627 , - 314 , - 1177 , - 120 , - 1239 , - 438 , - 1813 , - 1268 , - 851 , - 562 , - 401 , - 368 , - 463 , - 686 , - 1037 , - 1516 , - 75 , - 810 , - 1673 , - 616 , - 1735 , - 934 , - 261 , - 1764 , - 1347 , - 1058 , - 897 , - 864 , - 959 , - 1182 , - 1533 , - 2012 , - 571 , - 1306 , - 121 , - 1112 , - 183 , - 1430 , - 757 , - 212 , - 1843 , - 1554 , - 1393 , - 1360 , - 1455 , - 1678 , - 2029 , - 460 , - 1067 , - 1802 , - 617 , - 1608 , - 679 , - 1926 , - 1253 , - 708 , - 291 , - 2 , - 1889 , - 1856 , - 1951 , - 126 , - 477 , - 956 , - 1563 , - 250 , - 1113 , - 56 , - 1175 , - 374 , - 1749 , - 1204 , - 787 , - 498 , - 337 , - 304 , - 399 , - 622 , - 973 , - 1452 , - 11 , - 746 , - 1609 , - 552 , - 1671 , - 870 , - 197 , - 1700 , - 1283 , - 994 , - 833 , - 800 , - 895 , - 1118 , - 1469 , - 1948 , - 507 , - 1242 , - 57 , - 1048 , - 119 , - 1366 , - 693 , - 148 , - 1779 , - 1490 , - 1329 , - 1296 , - 1391 , - 1614 , - 1965 , - 396 , - 1003 , - 1738 , - 553 , - 1544 , - 615 , - 1862 , - 1189 , - 644 , - 227 , - 1986 , - 1825 , - 1792 , - 1887 , - 62 , - 413 , - 892 , - 1499 , - 186 , - 1049 , - 2040 , - 1111 , - 310 , - 1685 , - 1140 , - 723 , - 434 , - 273 , - 240 , - 335 , - 558 , - 909 , - 1388 , - 1995 , - 682 , - 1545 , - 488 , - 1607 , - 806 , - 133 , - 1636 , - 1219 , - 930 , - 769 , - 736 , - 831 , - 1054 , - 1405 , - 1884 , - 443 , - 1178 , - 2041 , - 984 , - 55 , - 1302 , - 629 , - 84 , - 1715 , - 1426 , - 1265 , - 1232 , - 1327 , - 1550 , - 1901 , - 332 , - 939 , - 1674 , - 489 , - 1480 , - 551 , - 1798 , - 1125 , - 580 , - 163 , - 1922 , - 1761 , - 1728 , - 1823 , - 2046 , - 349 , - 828 , - 1435 , - 122 , - 985 , - 1976 , - 1047 , - 246 , - 1621 , - 1076 , - 659 , - 370 , - 209 , - 176 , - 271 , - 494 , - 845 , - 1324 , - 1931 , - 618 , - 1481 , - 424 , - 1543 , - 742 , - 69 , - 1572 , - 1155 , - 866 , - 705 , - 672 , - 767 , - 990 , - 1341 , - 1820 , - 379 , - 1114 , - 1977 , - 920 , - 2039 , - 1238 , - 565 , - 20 , - 1651 , - 1362 , - 1201 , - 1168 , - 1263 , - 1486 , - 1837 , - 268 , - 875 , - 1610 , - 425 , - 1416 , - 487 , - 1734 , - 1061 , - 516 , - 99 , - 1858 , - 1697 , - 1664 , - 1759 , - 1982 , - 285 , - 764 , - 1371 , - 58 , - 921 , - 1912 , - 983 , - 182 , - 1557 , - 1012 , - 595 , - 306 , - 145 , - 112 , - 207 , - 430 , - 781 , - 1260 , - 1867 , - 554 , - 1417 , - 360 , - 1479 , - 678 , - 5 , - 1508 , - 1091 , - 802 , - 641 , - 608 , - 703 , - 926 , - 1277 , - 1756 , - 315 , - 1050 , - 1913 , - 856 , - 1975 , - 1174 , - 501 , - 2004 , - 1587 , - 1298 , - 1137 , - 1104 , - 1199 , - 1422 , - 1773 , - 204 , - 811 , - 1546 , - 361 , - 1352 , - 423 , - 1670 , - 997 , - 452 , - 35 , - 1794 , - 1633 , - 1600 , - 1695 , - 1918 , - 221 , - 700 , - 1307 , - 2042 , - 857 , - 1848 , - 919 , - 118 , - 1493 , - 948 , - 531 , - 242 , - 81 , - 48 , - 143 , - 366 , - 717 , - 1196 , - 1803 , - 490 , - 1353 , - 296 , - 1415 , - 614 , - 1989 , - 1444 , - 1027 , - 738 , - 577 , - 544 , - 639 , - 862 , - 1213 , - 1692 , - 251 , - 986 , - 1849 , - 792 , - 1911 , - 1110 , - 437 , - 1940 , - 1523 , - 1234 , - 1073 , - 1040 , - 1135 , - 1358 , - 1709 , - 140 , - 747 , - 1482 , - 297 , - 1288 , - 359 , - 1606 , - 933 , - 388 , - 2019 , - 1730 , - 1569 , - 1536 , - 1631 , - 1854 , - 157 , - 636 , - 1243 , - 1978 , - 793 , - 1784 , - 855 , - 54 , - 1429 , - 884 , - 467 , - 178 , - 17 , - 2032 , - 79 , - 302 , - 653 , - 1132 , - 1739 , - 426 , - 1289 , - 232 , - 1351 , - 550 , - 1925 , - 1380 , - 963 , - 674 , - 513 , - 480 , - 575 , - 798 , - 1149 , - 1628 , - 187 , - 922 , - 1785 , - 728 , - 1847 , - 1046 , - 373 , - 1876 , - 1459 , - 1170 , - 1009 , - 976 , - 1071 , - 1294 , - 1645 , - 76 , - 683 , - 1418 , - 233 , - 1224 , - 295 , - 1542 , - 869 , - 324 , - 1955 , - 1666 , - 1505 , - 1472 , - 1567 , - 1790 , - 93 , - 572 , - 1179 , - 1914 , - 729 , - 1720 , - 791 , - 2038 , - 1365 , - 820 , - 403 , - 114 , - 2001 , - 1968 , - 15 , - 238 , - 589 , - 1068 , - 1675 , - 362 , - 1225 , - 168 , - 1287 , - 486 , - 1861 , - 1316 , - 899 , - 610 , - 449 , - 416 , - 511 , - 734 , - 1085 , - 1564 , - 123 , - 858 , - 1721 , - 664 , - 1783 , - 982 , - 309 , - 1812 , - 1395 , - 1106 , - 945 , - 912 , - 1007 , - 1230 , - 1581 , - 12 , - 619 , - 1354 , - 169 , - 1160 , - 231 , - 1478 , - 805 , - 260 , - 1891 , - 1602 , - 1441 , - 1408 , - 1503 , - 1726 , - 29 , - 508 , - 1115 , - 1850 , - 665 , - 1656 , - 727 , - 1974 , - 1301 , - 756 , - 339 , - 50 , - 1937 , - 1904 , - 1999 , - 174 , - 525 , - 1004 , - 1611 , - 298 , - 1161 , - 104 , - 1223 , - 422 , - 1797 , - 1252 , - 835 , - 546 , - 385 , - 352 , - 447 , - 670 , - 1021 , - 1500 , - 59 , - 794 , - 1657 , - 600 , - 1719 , - 918 , - 245 , - 1748 , - 1331 , - 1042 , - 881 , - 848 , - 943 , - 1166 , - 1517 , - 1996 , - 555 , - 1290 , - 105 , - 1096 , - 167 , - 1414 , - 741 , - 196 , - 1827 , - 1538 , - 1377 , - 1344 , - 1439 , - 1662 , - 2013 , - 444 , - 1051 , - 1786 , - 601 , - 1592 , - 663 , - 1910 , - 1237 , - 692 , - 275 , - 2034 , - 1873 , - 1840 , - 1935 , - 110 , - 461 , - 940 , - 1547 , - 234 , - 1097 , - 40 , - 1159 , - 358 , - 1733 , - 1188 , - 771 , - 482 , - 321 , - 288 , - 383 , - 606 , - 957 , - 1436 , - 2043 , - 730 , - 1593 , - 536 , - 1655 , - 854 , - 181 , - 1684 , - 1267 , - 978 , - 817 , - 784 , - 879 , - 1102 , - 1453 , - 1932 , - 491 , - 1226 , - 41 , - 1032 , - 103 , - 1350 , - 677 , - 132 , - 1763 , - 1474 , - 1313 , - 1280 , - 1375 , - 1598 , - 1949 , - 380 , - 987 , - 1722 , - 537 , - 1528 , - 599 , - 1846 , - 1173 , - 628 , - 211 , - 1970 , - 1809 , - 1776 , - 1871 , - 46 , - 397 , - 876 , - 1483 , - 170 , - 1033 , - 2024 , - 1095 , - 294 , - 1669 , - 1124 , - 707 , - 418 , - 257 , - 224 , - 319 , - 542 , - 893 , - 1372 , - 1979 , - 666 , - 1529 , - 472 , - 1591 , - 790 , - 117 , - 1620 , - 1203 , - 914 , - 753 , - 720 , - 815 , - 1038 , - 1389 , - 1868 , - 427 , - 1162 , - 2025 , - 968 , - 39 , - 1286 , - 613 , - 68 , - 1699 , - 1410 , - 1249 , - 1216 , - 1311 , - 1534 , - 1885 , - 316 , - 923 , - 1658 , - 473 , - 1464 , - 535 , - 1782 , - 1109 , - 564 , - 147 , - 1906 , - 1745 , - 1712 , - 1807 , - 2030 , - 333 , - 812 , - 1419 , - 106 , - 969 , - 1960 , - 1031 , - 230 , - 1605 , - 1060 , - 643 , - 354 , - 193 , - 160 , - 255 , - 478 , - 829 , - 1308 , - 1915 , - 602 , - 1465 , - 408 , - 1527 , - 726 , - 53 , - 1556 , - 1139 , - 850 , - 689 , - 656 , - 751 , - 974 , - 1325 , - 1804 , - 363 , - 1098 , - 1961 , - 904 , - 2023 , - 1222 , - 549 , - 4 , - 1635 , - 1346 , - 1185 , - 1152 , - 1247 , - 1470 , - 1821 , - 252 , - 859 , - 1594 , - 409 , - 1400 , - 471 , - 1718 , - 1045 , - 500 , - 83 , - 1842 , - 1681 , - 1648 , - 1743 , - 1966 , - 269 , - 748 , - 1355 , - 42 , - 905 , - 1896 , - 967 , - 166 , - 1541 , - 996 , - 579 , - 290 , - 129 , - 96 , - 191 , - 414 , - 765 , - 1244 , - 1851 , - 538 , - 1401 , - 344 , - 1463 , - 662 , - 2037 , - 1492 , - 1075 , - 786 , - 625 , - 592 , - 687 , - 910 , - 1261 , - 1740 , - 299 , - 1034 , - 1897 , - 840 , - 1959 , - 1158 , - 485 , - 1988 , - 1571 , - 1282 , - 1121 , - 1088 , - 1183 , - 1406 , - 1757 , - 188 , - 795 , - 1530 , - 345 , - 1336 , - 407 , - 1654 , - 981 , - 436 , - 19 , - 1778 , - 1617 , - 1584 , - 1679 , - 1902 , - 205 , - 684 , - 1291 , - 2026 , - 841 , - 1832 , - 903 , - 102 , - 1477 , - 932 , - 515 , - 226 , - 65 , - 32 , - 127 , - 350 , - 701 , - 1180 , - 1787 , - 474 , - 1337 , - 280 , - 1399 , - 598 , - 1973 , - 1428 , - 1011 , - 722 , - 561 , - 528 , - 623 , - 846 , - 1197 , - 1676 , - 235 , - 970 , - 1833 , - 776 , - 1895 , - 1094 , - 421 , - 1924 , - 1507 , - 1218 , - 1057 , - 1024 , - 1119 , - 1342 , - 1693 , - 124 , - 731 , - 1466 , - 281 , - 1272 , - 343 , - 1590 , - 917 , - 372 , - 2003 , - 1714 , - 1553 , - 1520 , - 1615 , - 1838 , - 141 , - 620 , - 1227 , - 1962 , - 777 , - 1768 , - 839 , - 38 , - 1413 , - 868 , - 451 , - 162 , - 1 , - 2016 , - 63 , - 286 , - 637 , - 1116 , - 1723 , - 410 , - 1273 , - 216 , - 1335 , - 534 , - 1909 , - 1364 , - 947 , - 658 , - 497 , - 464 , - 559 , - 782 , - 1133 , - 1612 , - 171 , - 906 , - 1769 , - 712 , - 1831 , - 1030 , - 357 , - 1860 , - 1443 , - 1154 , - 993 , - 960 , - 1055 , - 1278 , - 1629 , - 60 , - 667 , - 1402 , - 217 , - 1208 , - 279 , - 1526 , - 853 , - 308 , - 1939 , - 1650 , - 1489 , - 1456 , - 1551 , - 1774 , - 77 , - 556 , - 1163 , - 1898 , - 713 , - 1704 , - 775 , - 2022 , - 1349 , - 804 , - 387 , - 98 , - 1985 , - 1952 , - 2047 , - 222 , - 573 , - 1052 , - 1659 , - 346 , - 1209 , - 152 , - 1271 , - 470 , - 1845 , - 1300 , - 883 , - 594 , - 433 , - 400 , - 495 , - 718 , - 1069 , - 1548 , - 107 , - 842 , - 1705 , - 648 , - 1767 , - 966 , - 293 , - 1796 , - 1379 , - 1090 , - 929 , - 896 , - 991 , - 1214 , - 1565 , - 2044 , - 603 , - 1338 , - 153 , - 1144 , - 215 , - 1462 , - 789 , - 244 , - 1875 , - 1586 , - 1425 , - 1392 , - 1487 , - 1710 , - 13 , - 492 , - 1099 , - 1834 , - 649 , - 1640 , - 711 , - 1958 , - 1285 , - 740 , - 323 , - 34 , - 1921 , - 1888 , - 1983 , - 158 , - 509 , - 988 , - 1595 , - 282 , - 1145 , - 88 , - 1207 , - 406 , - 1781 , - 1236 , - 819 , - 530 , - 369 , - 336 , - 431 , - 654 , - 1005 , - 1484 , - 43 , - 778 , - 1641 , - 584 , - 1703 , - 902 , - 229 , - 1732 , - 1315 , - 1026 , - 865 , - 832 , - 927 , - 1150 , - 1501 , - 1980 , - 539 , - 1274 , - 89 , - 1080 , - 151 , - 1398 , - 725 , - 180 , - 1811 , - 1522 , - 1361 , - 1328 , - 1423 , - 1646 , - 1997 , - 428 , - 1035 , - 1770 , - 585 , - 1576 , - 647 , - 1894 , - 1221 , - 676 , - 259 , - 2018 , - 1857 , - 1824 , - 1919 , - 94 , - 445 , - 924 , - 1531 , - 218 , - 1081 , - 24 , - 1143 , - 342 , - 1717 , - 1172 , - 755 , - 466 , - 305 , - 272 , - 367 , - 590 , - 941 , - 1420 , - 2027 , - 714 , - 1577 , - 520 , - 1639 , - 838 , - 165 , - 1668 , - 1251 , - 962 , - 801 , - 768 , - 863 , - 1086 , - 1437 , - 1916 , - 475 , - 1210 , - 25 , - 1016 , - 87 , - 1334 , - 661 , - 116 , - 1747 , - 1458 , - 1297 , - 1264 , - 1359 , - 1582 , - 1933 , - 364 , - 971 , - 1706 , - 521 , - 1512 , - 583 , - 1830 , - 1157 , - 612 , - 195 , - 1954 , - 1793 , - 1760 , - 1855 , - 30 , - 381 , - 860 , - 1467 , - 154 , - 1017 , - 2008 , - 1079 , - 278 , - 1653 , - 1108 , - 691 , - 402 , - 241 , - 208 , - 303 , - 526 , - 877 , - 1356 , - 1963 , - 650 , - 1513 , - 456 , - 1575 , - 774 , - 101 , - 1604 , - 1187 , - 898 , - 737 , - 704 , - 799 , - 1022 , - 1373 , - 1852 , - 411 , - 1146 , - 2009 , - 952 , - 23 , - 1270 , - 597 , - 52 , - 1683 , - 1394 , - 1233 , - 1200 , - 1295 , - 1518 , - 1869 , - 300 , - 907 , - 1642 , - 457 , - 1448 , - 519 , - 1766 , - 1093 , - 548 , - 131 , - 1890 , - 1729 , - 1696 , - 1791 , - 2014 , - 317 , - 796 , - 1403 , - 90 , - 953 , - 1944 , - 1015 , - 214 , - 1589 , - 1044 , - 627 , - 338 , - 177 , - 144 , - 239 , - 462 , - 813 , - 1292 , - 1899 , - 586 , - 1449 , - 392 , - 1511 , - 710 , - 37 , - 1540 , - 1123 , - 834 , - 673 , - 640 , - 735 , - 958 , - 1309 , - 1788 , - 347 , - 1082 , - 1945 , - 888 , - 2007 , - 1206 , - 533 , - 2036 , - 1619 , - 1330 , - 1169 , - 1136 , - 1231 , - 1454 , - 1805 , - 236 , - 843 , - 1578 , - 393 , - 1384 , - 455 , - 1702 , - 1029 , - 484 , - 67 , - 1826 , - 1665 , - 1632 , - 1727 , - 1950 , - 253 , - 732 , - 1339 , - 26 , - 889 , - 1880 , - 951 , - 150 , - 1525 , - 980 , - 563 , - 274 , - 113 , - 80 , - 175 , - 398 , - 749 , - 1228 , - 1835 , - 522 , - 1385 , - 328 , - 1447 , - 646 , - 2021 , - 1476 , - 1059 , - 770 , - 609 , - 576 , - 671 , - 894 , - 1245 , - 1724 , - 283 , - 1018 , - 1881 , - 824 , - 1943 , - 1142 , - 469 , - 1972 , - 1555 , - 1266 , - 1105 , - 1072 , - 1167 , - 1390 , - 1741 , - 172 , - 779 , - 1514 , - 329 , - 1320 , - 391 , - 1638 , - 965 , - 420 , - 3 , - 1762 , - 1601 , - 1568 , - 1663 , - 1886 , - 189 , - 668 , - 1275 , - 2010 , - 825 , - 1816 , - 887 , - 86 , - 1461 , - 916 , - 499 , - 210 , - 49 , - 16 , - 111 , - 334 , - 685 , - 1164 , - 1771 , - 458 , - 1321 , - 264 , - 1383 , - 582 , - 1957 , - 1412 , - 995 , - 706 , - 545 , - 512 , - 607 , - 830 , - 1181 , - 1660 , - 219 , - 954 , - 1817 , - 760 , - 1879 , - 1078 , - 405 , - 1908 , - 1491 , - 1202 , - 1041 , - 1008 , - 1103 , - 1326 , - 1677 , - 108 , - 715 , - 1450 , - 265 , - 1256 , - 327 , - 1574 , - 901 , - 356 , - 1987 , - 1698 , - 1537 , - 1504 , - 1599 , - 1822 , - 125 , - 604 , - 1211 , - 1946 , - 761 , - 1752 , - 823 , - 22 , - 1397 , - 852 , - 435 , - 146 , - 2033 , - 2000 , - 47 , - 270 , - 621 , - 1100 , - 1707 , - 394 , - 1257 , - 200 , - 1319 , - 518 , - 1893 , - 1348 , - 931 , - 642 , - 481 , - 448 , - 543 , - 766 , - 1117 , - 1596 , - 155 , - 890 , - 1753 , - 696 , - 1815 , - 1014 , - 341 , - 1844 , - 1427 , - 1138 , - 977 , - 944 , - 1039 , - 1262 , - 1613 , - 44 , - 651 , - 1386 , - 201 , - 1192 , - 263 , - 1510 , - 837 , - 292 , - 1923 , - 1634 , - 1473 , - 1440 , - 1535 , - 1758 , - 61 , - 540 , - 1147 , - 1882 , - 697 , - 1688 , - 759 , - 2006 , - 1333 , - 788 , - 371 , - 82 , - 1969 , - 1936 , - 2031 , - 206 , - 557 , - 1036 , - 1643 , - 330 , - 1193 , - 136 , - 1255 , - 454 , - 1829 , - 1284 , - 867 , - 578 , - 417 , - 384 , - 479 , - 702 , - 1053 , - 1532 , - 91 , - 826 , - 1689 , - 632 , - 1751 , - 950 , - 277 , - 1780 , - 1363 , - 1074 , - 913 , - 880 , - 975 , - 1198 , - 1549 , - 2028 , - 587 , - 1322 , - 137 , - 1128 , - 199 , - 1446 , - 773 , - 228 , - 1859 , - 1570 , - 1409 , - 1376 , - 1471 , - 1694 , - 2045 , - 476 , - 1083 , - 1818 , - 633 , - 1624 , - 695 , - 1942 , - 1269 , - 724 , - 307 , - 18 , - 1905 , - 1872 , - 1967 , - 142 , - 493 , - 972 , - 1579 , - 266 , - 1129 , - 72 , - 1191 , - 390 , - 1765 , - 1220 , - 803 , - 514 , - 353 , - 320 , - 415 , - 638 , - 989 , - 1468 , - 27 , - 762 , - 1625 , - 568 , - 1687 , - 886 , - 213 , - 1716 , - 1299 , - 1010 , - 849 , - 816 , - 911 , - 1134 , - 1485 , - 1964 , - 523 , - 1258 , - 73 , - 1064 , - 135 , - 1382 , - 709 , - 164 , - 1795 , - 1506 , - 1345 , - 1312 , - 1407 , - 1630 , - 1981 , - 412 , - 1019 , - 1754 , - 569 , - 1560 , - 631 , - 1878 , - 1205 , - 660 , - 243 , - 2002 , - 1841 , - 1808 , - 1903 , - 78 , - 429 , - 908 , - 1515 , - 202 , - 1065 , - 8 , - 1127 , - 326 , - 1701 , - 1156 , - 739 , - 450 , - 289 , - 256 , - 351 , - 574 , - 925 , - 1404 , - 2011 , - 698 , - 1561 , - 504 , - 1623 , - 822 , - 149 , - 1652 , - 1235 , - 946 , - 785 , - 752 , - 847 , - 1070 , - 1421 , - 1900 , - 459 , - 1194 , - 9 , - 1000 , - 71 , - 1318 , - 645 , - 100 , - 1731 , - 1442 , - 1281 , - 1248 , - 1343 , - 1566 , - 1917 , - 348 , - 955 , - 1690 , - 505 , - 1496 , - 567 , - 1814 , - 1141 , - 596 , - 179 , - 1938 , - 1777 , - 1744 , - 1839 , - 14 , - 365 , - 844 , - 1451 , - 138 , - 1001 , - 1992 , - 1063 , - 262 , - 1637 , - 1092 , - 675 , - 386 , - 225 , - 192 , - 287 , - 510 , - 861 , - 1340 , - 1947 , - 634 , - 1497 , - 440 , - 1559 , - 758 , - 85 , - 1588 , - 1171 , - 882 , - 721 , - 688 , - 783 , - 1006 , - 1357 , - 1836 , - 395 , - 1130 , - 1993 , - 936 , - 7 , - 1254 , - 581 , - 36 , - 1667 , - 1378 , - 1217 , - 1184 , - 1279 , - 1502 , - 1853 , - 284 , - 891 , - 1626 , - 441 , - 1432 , - 503 , - 1750 , - 1077 , - 532 , - 115 , - 1874 , - 1713 , - 1680 , - 1775 , - 1998 , - 301 , - 780 , - 1387 , - 74 , - 937 , - 1928 , - 999 , - 198 , - 1573 , - 1028 , - 611 , - 322 , - 161 , - 128 , - 223 , - 446 , - 797 , - 1276 , - 1883 , - 570 , - 1433 , - 376 , - 1495 , - 694 , - 21 , - 1524 , - 1107 , - 818 , - 657 , - 624 , - 719 , - 942 , - 1293 , - 1772 , - 331 , - 1066 , - 1929 , - 872 , - 1991 , - 1190 , - 517 , - 2020 , - 1603 , - 1314 , - 1153 , - 1120 , - 1215 , - 1438 , - 1789 , - 220 , - 827 , - 1562 , - 377 , - 1368 , - 439 , - 1686 , - 1013 , - 468 , - 51 , - 1810 , - 1649 , - 1616 , - 1711 , - 1934 , - 237 , - 716 , - 1323 , - 10 , - 873 , - 1864 , - 935 , - 134 , - 1509 , - 964 , - 547 , - 258 , - 97 , - 64 , - 159 , - 382 , - 733 , - 1212 , - 1819 , - 506 , - 1369 , - 312 , - 1431 , - 630 , - 2005 , - 1460 , - 1043 , - 754 , - 593 , - 560 , - 655 , - 878 , - 1229 , - 1708 , - 267 , - 1002 , - 1865 , - 808 , - 1927 , - 1126 , - 453 , - 1956 , - 1539 , - 1250 , - 1089 , - 1056 , - 1151 , - 1374 , - 1725 , - 156 , - 763 , - 1498 , - 313 , - 1304 , - 375 , - 1622 , - 949 , - 404 , - 2035 , - 1746 , - 1585 , - 1552 , - 1647 , - 1870 , - 173 , - 652 , - 1259 , - 1994 , - 809 , - 1800 , - 871 , - 70 , - 1445 , - 900 , - 483 , - 194 , - 33 , - 0 , - 83 , - 298 , - 645 , - 1124 , - 1735 , - 366 , - 1241 , - 136 , - 1275 , - 434 , - 1837 , - 1260 , - 815 , - 502 , - 321 , - 272 , - 355 , - 570 , - 917 , - 1396 , - 2007 , - 638 , - 1513 , - 408 , - 1547 , - 706 , - 2109 , - 1532 , - 1087 , - 774 , - 593 , - 544 , - 627 , - 842 , - 1189 , - 1668 , - 167 , - 910 , - 1785 , - 680 , - 1819 , - 978 , - 269 , - 1804 , - 1359 , - 1046 , - 865 , - 816 , - 899 , - 1114 , - 1461 , - 1940 , - 439 , - 1182 , - 2057 , - 952 , - 2091 , - 1250 , - 541 , - 2076 , - 1631 , - 1318 , - 1137 , - 1088 , - 1171 , - 1386 , - 1733 , - 100 , - 711 , - 1454 , - 217 , - 1224 , - 251 , - 1522 , - 813 , - 236 , - 1903 , - 1590 , - 1409 , - 1360 , - 1443 , - 1658 , - 2005 , - 372 , - 983 , - 1726 , - 489 , - 1496 , - 523 , - 1794 , - 1085 , - 508 , - 63 , - 1862 , - 1681 , - 1632 , - 1715 , - 1930 , - 165 , - 644 , - 1255 , - 1998 , - 761 , - 1768 , - 795 , - 2066 , - 1357 , - 780 , - 335 , - 22 , - 1953 , - 1904 , - 1987 , - 90 , - 437 , - 916 , - 1527 , - 158 , - 1033 , - 2040 , - 1067 , - 226 , - 1629 , - 1052 , - 607 , - 294 , - 113 , - 64 , - 147 , - 362 , - 709 , - 1188 , - 1799 , - 430 , - 1305 , - 200 , - 1339 , - 498 , - 1901 , - 1324 , - 879 , - 566 , - 385 , - 336 , - 419 , - 634 , - 981 , - 1460 , - 2071 , - 702 , - 1577 , - 472 , - 1611 , - 770 , - 61 , - 1596 , - 1151 , - 838 , - 657 , - 608 , - 691 , - 906 , - 1253 , - 1732 , - 231 , - 974 , - 1849 , - 744 , - 1883 , - 1042 , - 333 , - 1868 , - 1423 , - 1110 , - 929 , - 880 , - 963 , - 1178 , - 1525 , - 2004 , - 503 , - 1246 , - 9 , - 1016 , - 43 , - 1314 , - 605 , - 28 , - 1695 , - 1382 , - 1201 , - 1152 , - 1235 , - 1450 , - 1797 , - 164 , - 775 , - 1518 , - 281 , - 1288 , - 315 , - 1586 , - 877 , - 300 , - 1967 , - 1654 , - 1473 , - 1424 , - 1507 , - 1722 , - 2069 , - 436 , - 1047 , - 1790 , - 553 , - 1560 , - 587 , - 1858 , - 1149 , - 572 , - 127 , - 1926 , - 1745 , - 1696 , - 1779 , - 1994 , - 229 , - 708 , - 1319 , - 2062 , - 825 , - 1832 , - 859 , - 18 , - 1421 , - 844 , - 399 , - 86 , - 2017 , - 1968 , - 2051 , - 154 , - 501 , - 980 , - 1591 , - 222 , - 1097 , - 2104 , - 1131 , - 290 , - 1693 , - 1116 , - 671 , - 358 , - 177 , - 128 , - 211 , - 426 , - 773 , - 1252 , - 1863 , - 494 , - 1369 , - 264 , - 1403 , - 562 , - 1965 , - 1388 , - 943 , - 630 , - 449 , - 400 , - 483 , - 698 , - 1045 , - 1524 , - 23 , - 766 , - 1641 , - 536 , - 1675 , - 834 , - 125 , - 1660 , - 1215 , - 902 , - 721 , - 672 , - 755 , - 970 , - 1317 , - 1796 , - 295 , - 1038 , - 1913 , - 808 , - 1947 , - 1106 , - 397 , - 1932 , - 1487 , - 1174 , - 993 , - 944 , - 1027 , - 1242 , - 1589 , - 2068 , - 567 , - 1310 , - 73 , - 1080 , - 107 , - 1378 , - 669 , - 92 , - 1759 , - 1446 , - 1265 , - 1216 , - 1299 , - 1514 , - 1861 , - 228 , - 839 , - 1582 , - 345 , - 1352 , - 379 , - 1650 , - 941 , - 364 , - 2031 , - 1718 , - 1537 , - 1488 , - 1571 , - 1786 , - 21 , - 500 , - 1111 , - 1854 , - 617 , - 1624 , - 651 , - 1922 , - 1213 , - 636 , - 191 , - 1990 , - 1809 , - 1760 , - 1843 , - 2058 , - 293 , - 772 , - 1383 , - 14 , - 889 , - 1896 , - 923 , - 82 , - 1485 , - 908 , - 463 , - 150 , - 2081 , - 2032 , - 3 , - 218 , - 565 , - 1044 , - 1655 , - 286 , - 1161 , - 56 , - 1195 , - 354 , - 1757 , - 1180 , - 735 , - 422 , - 241 , - 192 , - 275 , - 490 , - 837 , - 1316 , - 1927 , - 558 , - 1433 , - 328 , - 1467 , - 626 , - 2029 , - 1452 , - 1007 , - 694 , - 513 , - 464 , - 547 , - 762 , - 1109 , - 1588 , - 87 , - 830 , - 1705 , - 600 , - 1739 , - 898 , - 189 , - 1724 , - 1279 , - 966 , - 785 , - 736 , - 819 , - 1034 , - 1381 , - 1860 , - 359 , - 1102 , - 1977 , - 872 , - 2011 , - 1170 , - 461 , - 1996 , - 1551 , - 1238 , - 1057 , - 1008 , - 1091 , - 1306 , - 1653 , - 20 , - 631 , - 1374 , - 137 , - 1144 , - 171 , - 1442 , - 733 , - 156 , - 1823 , - 1510 , - 1329 , - 1280 , - 1363 , - 1578 , - 1925 , - 292 , - 903 , - 1646 , - 409 , - 1416 , - 443 , - 1714 , - 1005 , - 428 , - 2095 , - 1782 , - 1601 , - 1552 , - 1635 , - 1850 , - 85 , - 564 , - 1175 , - 1918 , - 681 , - 1688 , - 715 , - 1986 , - 1277 , - 700 , - 255 , - 2054 , - 1873 , - 1824 , - 1907 , - 10 , - 357 , - 836 , - 1447 , - 78 , - 953 , - 1960 , - 987 , - 146 , - 1549 , - 972 , - 527 , - 214 , - 33 , - 2096 , - 67 , - 282 , - 629 , - 1108 , - 1719 , - 350 , - 1225 , - 120 , - 1259 , - 418 , - 1821 , - 1244 , - 799 , - 486 , - 305 , - 256 , - 339 , - 554 , - 901 , - 1380 , - 1991 , - 622 , - 1497 , - 392 , - 1531 , - 690 , - 2093 , - 1516 , - 1071 , - 758 , - 577 , - 528 , - 611 , - 826 , - 1173 , - 1652 , - 151 , - 894 , - 1769 , - 664 , - 1803 , - 962 , - 253 , - 1788 , - 1343 , - 1030 , - 849 , - 800 , - 883 , - 1098 , - 1445 , - 1924 , - 423 , - 1166 , - 2041 , - 936 , - 2075 , - 1234 , - 525 , - 2060 , - 1615 , - 1302 , - 1121 , - 1072 , - 1155 , - 1370 , - 1717 , - 84 , - 695 , - 1438 , - 201 , - 1208 , - 235 , - 1506 , - 797 , - 220 , - 1887 , - 1574 , - 1393 , - 1344 , - 1427 , - 1642 , - 1989 , - 356 , - 967 , - 1710 , - 473 , - 1480 , - 507 , - 1778 , - 1069 , - 492 , - 47 , - 1846 , - 1665 , - 1616 , - 1699 , - 1914 , - 149 , - 628 , - 1239 , - 1982 , - 745 , - 1752 , - 779 , - 2050 , - 1341 , - 764 , - 319 , - 6 , - 1937 , - 1888 , - 1971 , - 74 , - 421 , - 900 , - 1511 , - 142 , - 1017 , - 2024 , - 1051 , - 210 , - 1613 , - 1036 , - 591 , - 278 , - 97 , - 48 , - 131 , - 346 , - 693 , - 1172 , - 1783 , - 414 , - 1289 , - 184 , - 1323 , - 482 , - 1885 , - 1308 , - 863 , - 550 , - 369 , - 320 , - 403 , - 618 , - 965 , - 1444 , - 2055 , - 686 , - 1561 , - 456 , - 1595 , - 754 , - 45 , - 1580 , - 1135 , - 822 , - 641 , - 592 , - 675 , - 890 , - 1237 , - 1716 , - 215 , - 958 , - 1833 , - 728 , - 1867 , - 1026 , - 317 , - 1852 , - 1407 , - 1094 , - 913 , - 864 , - 947 , - 1162 , - 1509 , - 1988 , - 487 , - 1230 , - 2105 , - 1000 , - 27 , - 1298 , - 589 , - 12 , - 1679 , - 1366 , - 1185 , - 1136 , - 1219 , - 1434 , - 1781 , - 148 , - 759 , - 1502 , - 265 , - 1272 , - 299 , - 1570 , - 861 , - 284 , - 1951 , - 1638 , - 1457 , - 1408 , - 1491 , - 1706 , - 2053 , - 420 , - 1031 , - 1774 , - 537 , - 1544 , - 571 , - 1842 , - 1133 , - 556 , - 111 , - 1910 , - 1729 , - 1680 , - 1763 , - 1978 , - 213 , - 692 , - 1303 , - 2046 , - 809 , - 1816 , - 843 , - 2 , - 1405 , - 828 , - 383 , - 70 , - 2001 , - 1952 , - 2035 , - 138 , - 485 , - 964 , - 1575 , - 206 , - 1081 , - 2088 , - 1115 , - 274 , - 1677 , - 1100 , - 655 , - 342 , - 161 , - 112 , - 195 , - 410 , - 757 , - 1236 , - 1847 , - 478 , - 1353 , - 248 , - 1387 , - 546 , - 1949 , - 1372 , - 927 , - 614 , - 433 , - 384 , - 467 , - 682 , - 1029 , - 1508 , - 7 , - 750 , - 1625 , - 520 , - 1659 , - 818 , - 109 , - 1644 , - 1199 , - 886 , - 705 , - 656 , - 739 , - 954 , - 1301 , - 1780 , - 279 , - 1022 , - 1897 , - 792 , - 1931 , - 1090 , - 381 , - 1916 , - 1471 , - 1158 , - 977 , - 928 , - 1011 , - 1226 , - 1573 , - 2052 , - 551 , - 1294 , - 57 , - 1064 , - 91 , - 1362 , - 653 , - 76 , - 1743 , - 1430 , - 1249 , - 1200 , - 1283 , - 1498 , - 1845 , - 212 , - 823 , - 1566 , - 329 , - 1336 , - 363 , - 1634 , - 925 , - 348 , - 2015 , - 1702 , - 1521 , - 1472 , - 1555 , - 1770 , - 5 , - 484 , - 1095 , - 1838 , - 601 , - 1608 , - 635 , - 1906 , - 1197 , - 620 , - 175 , - 1974 , - 1793 , - 1744 , - 1827 , - 2042 , - 277 , - 756 , - 1367 , - 2110 , - 873 , - 1880 , - 907 , - 66 , - 1469 , - 892 , - 447 , - 134 , - 2065 , - 2016 , - 2099 , - 202 , - 549 , - 1028 , - 1639 , - 270 , - 1145 , - 40 , - 1179 , - 338 , - 1741 , - 1164 , - 719 , - 406 , - 225 , - 176 , - 259 , - 474 , - 821 , - 1300 , - 1911 , - 542 , - 1417 , - 312 , - 1451 , - 610 , - 2013 , - 1436 , - 991 , - 678 , - 497 , - 448 , - 531 , - 746 , - 1093 , - 1572 , - 71 , - 814 , - 1689 , - 584 , - 1723 , - 882 , - 173 , - 1708 , - 1263 , - 950 , - 769 , - 720 , - 803 , - 1018 , - 1365 , - 1844 , - 343 , - 1086 , - 1961 , - 856 , - 1995 , - 1154 , - 445 , - 1980 , - 1535 , - 1222 , - 1041 , - 992 , - 1075 , - 1290 , - 1637 , - 4 , - 615 , - 1358 , - 121 , - 1128 , - 155 , - 1426 , - 717 , - 140 , - 1807 , - 1494 , - 1313 , - 1264 , - 1347 , - 1562 , - 1909 , - 276 , - 887 , - 1630 , - 393 , - 1400 , - 427 , - 1698 , - 989 , - 412 , - 2079 , - 1766 , - 1585 , - 1536 , - 1619 , - 1834 , - 69 , - 548 , - 1159 , - 1902 , - 665 , - 1672 , - 699 , - 1970 , - 1261 , - 684 , - 239 , - 2038 , - 1857 , - 1808 , - 1891 , - 2106 , - 341 , - 820 , - 1431 , - 62 , - 937 , - 1944 , - 971 , - 130 , - 1533 , - 956 , - 511 , - 198 , - 17 , - 2080 , - 51 , - 266 , - 613 , - 1092 , - 1703 , - 334 , - 1209 , - 104 , - 1243 , - 402 , - 1805 , - 1228 , - 783 , - 470 , - 289 , - 240 , - 323 , - 538 , - 885 , - 1364 , - 1975 , - 606 , - 1481 , - 376 , - 1515 , - 674 , - 2077 , - 1500 , - 1055 , - 742 , - 561 , - 512 , - 595 , - 810 , - 1157 , - 1636 , - 135 , - 878 , - 1753 , - 648 , - 1787 , - 946 , - 237 , - 1772 , - 1327 , - 1014 , - 833 , - 784 , - 867 , - 1082 , - 1429 , - 1908 , - 407 , - 1150 , - 2025 , - 920 , - 2059 , - 1218 , - 509 , - 2044 , - 1599 , - 1286 , - 1105 , - 1056 , - 1139 , - 1354 , - 1701 , - 68 , - 679 , - 1422 , - 185 , - 1192 , - 219 , - 1490 , - 781 , - 204 , - 1871 , - 1558 , - 1377 , - 1328 , - 1411 , - 1626 , - 1973 , - 340 , - 951 , - 1694 , - 457 , - 1464 , - 491 , - 1762 , - 1053 , - 476 , - 31 , - 1830 , - 1649 , - 1600 , - 1683 , - 1898 , - 133 , - 612 , - 1223 , - 1966 , - 729 , - 1736 , - 763 , - 2034 , - 1325 , - 748 , - 303 , - 2102 , - 1921 , - 1872 , - 1955 , - 58 , - 405 , - 884 , - 1495 , - 126 , - 1001 , - 2008 , - 1035 , - 194 , - 1597 , - 1020 , - 575 , - 262 , - 81 , - 32 , - 115 , - 330 , - 677 , - 1156 , - 1767 , - 398 , - 1273 , - 168 , - 1307 , - 466 , - 1869 , - 1292 , - 847 , - 534 , - 353 , - 304 , - 387 , - 602 , - 949 , - 1428 , - 2039 , - 670 , - 1545 , - 440 , - 1579 , - 738 , - 29 , - 1564 , - 1119 , - 806 , - 625 , - 576 , - 659 , - 874 , - 1221 , - 1700 , - 199 , - 942 , - 1817 , - 712 , - 1851 , - 1010 , - 301 , - 1836 , - 1391 , - 1078 , - 897 , - 848 , - 931 , - 1146 , - 1493 , - 1972 , - 471 , - 1214 , - 2089 , - 984 , - 11 , - 1282 , - 573 , - 2108 , - 1663 , - 1350 , - 1169 , - 1120 , - 1203 , - 1418 , - 1765 , - 132 , - 743 , - 1486 , - 249 , - 1256 , - 283 , - 1554 , - 845 , - 268 , - 1935 , - 1622 , - 1441 , - 1392 , - 1475 , - 1690 , - 2037 , - 404 , - 1015 , - 1758 , - 521 , - 1528 , - 555 , - 1826 , - 1117 , - 540 , - 95 , - 1894 , - 1713 , - 1664 , - 1747 , - 1962 , - 197 , - 676 , - 1287 , - 2030 , - 793 , - 1800 , - 827 , - 2098 , - 1389 , - 812 , - 367 , - 54 , - 1985 , - 1936 , - 2019 , - 122 , - 469 , - 948 , - 1559 , - 190 , - 1065 , - 2072 , - 1099 , - 258 , - 1661 , - 1084 , - 639 , - 326 , - 145 , - 96 , - 179 , - 394 , - 741 , - 1220 , - 1831 , - 462 , - 1337 , - 232 , - 1371 , - 530 , - 1933 , - 1356 , - 911 , - 598 , - 417 , - 368 , - 451 , - 666 , - 1013 , - 1492 , - 2103 , - 734 , - 1609 , - 504 , - 1643 , - 802 , - 93 , - 1628 , - 1183 , - 870 , - 689 , - 640 , - 723 , - 938 , - 1285 , - 1764 , - 263 , - 1006 , - 1881 , - 776 , - 1915 , - 1074 , - 365 , - 1900 , - 1455 , - 1142 , - 961 , - 912 , - 995 , - 1210 , - 1557 , - 2036 , - 535 , - 1278 , - 41 , - 1048 , - 75 , - 1346 , - 637 , - 60 , - 1727 , - 1414 , - 1233 , - 1184 , - 1267 , - 1482 , - 1829 , - 196 , - 807 , - 1550 , - 313 , - 1320 , - 347 , - 1618 , - 909 , - 332 , - 1999 , - 1686 , - 1505 , - 1456 , - 1539 , - 1754 , - 2101 , - 468 , - 1079 , - 1822 , - 585 , - 1592 , - 619 , - 1890 , - 1181 , - 604 , - 159 , - 1958 , - 1777 , - 1728 , - 1811 , - 2026 , - 261 , - 740 , - 1351 , - 2094 , - 857 , - 1864 , - 891 , - 50 , - 1453 , - 876 , - 431 , - 118 , - 2049 , - 2000 , - 2083 , - 186 , - 533 , - 1012 , - 1623 , - 254 , - 1129 , - 24 , - 1163 , - 322 , - 1725 , - 1148 , - 703 , - 390 , - 209 , - 160 , - 243 , - 458 , - 805 , - 1284 , - 1895 , - 526 , - 1401 , - 296 , - 1435 , - 594 , - 1997 , - 1420 , - 975 , - 662 , - 481 , - 432 , - 515 , - 730 , - 1077 , - 1556 , - 55 , - 798 , - 1673 , - 568 , - 1707 , - 866 , - 157 , - 1692 , - 1247 , - 934 , - 753 , - 704 , - 787 , - 1002 , - 1349 , - 1828 , - 327 , - 1070 , - 1945 , - 840 , - 1979 , - 1138 , - 429 , - 1964 , - 1519 , - 1206 , - 1025 , - 976 , - 1059 , - 1274 , - 1621 , - 2100 , - 599 , - 1342 , - 105 , - 1112 , - 139 , - 1410 , - 701 , - 124 , - 1791 , - 1478 , - 1297 , - 1248 , - 1331 , - 1546 , - 1893 , - 260 , - 871 , - 1614 , - 377 , - 1384 , - 411 , - 1682 , - 973 , - 396 , - 2063 , - 1750 , - 1569 , - 1520 , - 1603 , - 1818 , - 53 , - 532 , - 1143 , - 1886 , - 649 , - 1656 , - 683 , - 1954 , - 1245 , - 668 , - 223 , - 2022 , - 1841 , - 1792 , - 1875 , - 2090 , - 325 , - 804 , - 1415 , - 46 , - 921 , - 1928 , - 955 , - 114 , - 1517 , - 940 , - 495 , - 182 , - 1 , - 2064 , - 35 , - 250 , - 597 , - 1076 , - 1687 , - 318 , - 1193 , - 88 , - 1227 , - 386 , - 1789 , - 1212 , - 767 , - 454 , - 273 , - 224 , - 307 , - 522 , - 869 , - 1348 , - 1959 , - 590 , - 1465 , - 360 , - 1499 , - 658 , - 2061 , - 1484 , - 1039 , - 726 , - 545 , - 496 , - 579 , - 794 , - 1141 , - 1620 , - 119 , - 862 , - 1737 , - 632 , - 1771 , - 930 , - 221 , - 1756 , - 1311 , - 998 , - 817 , - 768 , - 851 , - 1066 , - 1413 , - 1892 , - 391 , - 1134 , - 2009 , - 904 , - 2043 , - 1202 , - 493 , - 2028 , - 1583 , - 1270 , - 1089 , - 1040 , - 1123 , - 1338 , - 1685 , - 52 , - 663 , - 1406 , - 169 , - 1176 , - 203 , - 1474 , - 765 , - 188 , - 1855 , - 1542 , - 1361 , - 1312 , - 1395 , - 1610 , - 1957 , - 324 , - 935 , - 1678 , - 441 , - 1448 , - 475 , - 1746 , - 1037 , - 460 , - 15 , - 1814 , - 1633 , - 1584 , - 1667 , - 1882 , - 117 , - 596 , - 1207 , - 1950 , - 713 , - 1720 , - 747 , - 2018 , - 1309 , - 732 , - 287 , - 2086 , - 1905 , - 1856 , - 1939 , - 42 , - 389 , - 868 , - 1479 , - 110 , - 985 , - 1992 , - 1019 , - 178 , - 1581 , - 1004 , - 559 , - 246 , - 65 , - 16 , - 99 , - 314 , - 661 , - 1140 , - 1751 , - 382 , - 1257 , - 152 , - 1291 , - 450 , - 1853 , - 1276 , - 831 , - 518 , - 337 , - 288 , - 371 , - 586 , - 933 , - 1412 , - 2023 , - 654 , - 1529 , - 424 , - 1563 , - 722 , - 13 , - 1548 , - 1103 , - 790 , - 609 , - 560 , - 643 , - 858 , - 1205 , - 1684 , - 183 , - 926 , - 1801 , - 696 , - 1835 , - 994 , - 285 , - 1820 , - 1375 , - 1062 , - 881 , - 832 , - 915 , - 1130 , - 1477 , - 1956 , - 455 , - 1198 , - 2073 , - 968 , - 2107 , - 1266 , - 557 , - 2092 , - 1647 , - 1334 , - 1153 , - 1104 , - 1187 , - 1402 , - 1749 , - 116 , - 727 , - 1470 , - 233 , - 1240 , - 267 , - 1538 , - 829 , - 252 , - 1919 , - 1606 , - 1425 , - 1376 , - 1459 , - 1674 , - 2021 , - 388 , - 999 , - 1742 , - 505 , - 1512 , - 539 , - 1810 , - 1101 , - 524 , - 79 , - 1878 , - 1697 , - 1648 , - 1731 , - 1946 , - 181 , - 660 , - 1271 , - 2014 , - 777 , - 1784 , - 811 , - 2082 , - 1373 , - 796 , - 351 , - 38 , - 1969 , - 1920 , - 2003 , - 106 , - 453 , - 932 , - 1543 , - 174 , - 1049 , - 2056 , - 1083 , - 242 , - 1645 , - 1068 , - 623 , - 310 , - 129 , - 80 , - 163 , - 378 , - 725 , - 1204 , - 1815 , - 446 , - 1321 , - 216 , - 1355 , - 514 , - 1917 , - 1340 , - 895 , - 582 , - 401 , - 352 , - 435 , - 650 , - 997 , - 1476 , - 2087 , - 718 , - 1593 , - 488 , - 1627 , - 786 , - 77 , - 1612 , - 1167 , - 854 , - 673 , - 624 , - 707 , - 922 , - 1269 , - 1748 , - 247 , - 990 , - 1865 , - 760 , - 1899 , - 1058 , - 349 , - 1884 , - 1439 , - 1126 , - 945 , - 896 , - 979 , - 1194 , - 1541 , - 2020 , - 519 , - 1262 , - 25 , - 1032 , - 59 , - 1330 , - 621 , - 44 , - 1711 , - 1398 , - 1217 , - 1168 , - 1251 , - 1466 , - 1813 , - 180 , - 791 , - 1534 , - 297 , - 1304 , - 331 , - 1602 , - 893 , - 316 , - 1983 , - 1670 , - 1489 , - 1440 , - 1523 , - 1738 , - 2085 , - 452 , - 1063 , - 1806 , - 569 , - 1576 , - 603 , - 1874 , - 1165 , - 588 , - 143 , - 1942 , - 1761 , - 1712 , - 1795 , - 2010 , - 245 , - 724 , - 1335 , - 2078 , - 841 , - 1848 , - 875 , - 34 , - 1437 , - 860 , - 415 , - 102 , - 2033 , - 1984 , - 2067 , - 170 , - 517 , - 996 , - 1607 , - 238 , - 1113 , - 8 , - 1147 , - 306 , - 1709 , - 1132 , - 687 , - 374 , - 193 , - 144 , - 227 , - 442 , - 789 , - 1268 , - 1879 , - 510 , - 1385 , - 280 , - 1419 , - 578 , - 1981 , - 1404 , - 959 , - 646 , - 465 , - 416 , - 499 , - 714 , - 1061 , - 1540 , - 39 , - 782 , - 1657 , - 552 , - 1691 , - 850 , - 141 , - 1676 , - 1231 , - 918 , - 737 , - 688 , - 771 , - 986 , - 1333 , - 1812 , - 311 , - 1054 , - 1929 , - 824 , - 1963 , - 1122 , - 413 , - 1948 , - 1503 , - 1190 , - 1009 , - 960 , - 1043 , - 1258 , - 1605 , - 2084 , - 583 , - 1326 , - 89 , - 1096 , - 123 , - 1394 , - 685 , - 108 , - 1775 , - 1462 , - 1281 , - 1232 , - 1315 , - 1530 , - 1877 , - 244 , - 855 , - 1598 , - 361 , - 1368 , - 395 , - 1666 , - 957 , - 380 , - 2047 , - 1734 , - 1553 , - 1504 , - 1587 , - 1802 , - 37 , - 516 , - 1127 , - 1870 , - 633 , - 1640 , - 667 , - 1938 , - 1229 , - 652 , - 207 , - 2006 , - 1825 , - 1776 , - 1859 , - 2074 , - 309 , - 788 , - 1399 , - 30 , - 905 , - 1912 , - 939 , - 98 , - 1501 , - 924 , - 479 , - 166 , - 2097 , - 2048 , - 19 , - 234 , - 581 , - 1060 , - 1671 , - 302 , - 1177 , - 72 , - 1211 , - 370 , - 1773 , - 1196 , - 751 , - 438 , - 257 , - 208 , - 291 , - 506 , - 853 , - 1332 , - 1943 , - 574 , - 1449 , - 344 , - 1483 , - 642 , - 2045 , - 1468 , - 1023 , - 710 , - 529 , - 480 , - 563 , - 778 , - 1125 , - 1604 , - 103 , - 846 , - 1721 , - 616 , - 1755 , - 914 , - 205 , - 1740 , - 1295 , - 982 , - 801 , - 752 , - 835 , - 1050 , - 1397 , - 1876 , - 375 , - 1118 , - 1993 , - 888 , - 2027 , - 1186 , - 477 , - 2012 , - 1567 , - 1254 , - 1073 , - 1024 , - 1107 , - 1322 , - 1669 , - 36 , - 647 , - 1390 , - 153 , - 1160 , - 187 , - 1458 , - 749 , - 172 , - 1839 , - 1526 , - 1345 , - 1296 , - 1379 , - 1594 , - 1941 , - 308 , - 919 , - 1662 , - 425 , - 1432 , - 459 , - 1730 , - 1021 , - 444 , - 2111 , - 1798 , - 1617 , - 1568 , - 1651 , - 1866 , - 101 , - 580 , - 1191 , - 1934 , - 697 , - 1704 , - 731 , - 2002 , - 1293 , - 716 , - 271 , - 2070 , - 1889 , - 1840 , - 1923 , - 26 , - 373 , - 852 , - 1463 , - 94 , - 969 , - 1976 , - 1003 , - 162 , - 1565 , - 988 , - 543 , - 230 , - 49 , - 0 , - 307 , - 886 , - 1737 , - 684 , - 2079 , - 1570 , - 1333 , - 1368 , - 1675 , - 78 , - 929 , - 2052 , - 1271 , - 762 , - 525 , - 560 , - 867 , - 1446 , - 121 , - 1244 , - 463 , - 2130 , - 1893 , - 1928 , - 59 , - 638 , - 1489 , - 436 , - 1831 , - 1322 , - 1085 , - 1120 , - 1427 , - 2006 , - 681 , - 1804 , - 1023 , - 514 , - 277 , - 312 , - 619 , - 1198 , - 2049 , - 996 , - 215 , - 1882 , - 1645 , - 1680 , - 1987 , - 390 , - 1241 , - 188 , - 1583 , - 1074 , - 837 , - 872 , - 1179 , - 1758 , - 433 , - 1556 , - 775 , - 266 , - 29 , - 64 , - 371 , - 950 , - 1801 , - 748 , - 2143 , - 1634 , - 1397 , - 1432 , - 1739 , - 142 , - 993 , - 2116 , - 1335 , - 826 , - 589 , - 624 , - 931 , - 1510 , - 185 , - 1308 , - 527 , - 18 , - 1957 , - 1992 , - 123 , - 702 , - 1553 , - 500 , - 1895 , - 1386 , - 1149 , - 1184 , - 1491 , - 2070 , - 745 , - 1868 , - 1087 , - 578 , - 341 , - 376 , - 683 , - 1262 , - 2113 , - 1060 , - 279 , - 1946 , - 1709 , - 1744 , - 2051 , - 454 , - 1305 , - 252 , - 1647 , - 1138 , - 901 , - 936 , - 1243 , - 1822 , - 497 , - 1620 , - 839 , - 330 , - 93 , - 128 , - 435 , - 1014 , - 1865 , - 812 , - 31 , - 1698 , - 1461 , - 1496 , - 1803 , - 206 , - 1057 , - 4 , - 1399 , - 890 , - 653 , - 688 , - 995 , - 1574 , - 249 , - 1372 , - 591 , - 82 , - 2021 , - 2056 , - 187 , - 766 , - 1617 , - 564 , - 1959 , - 1450 , - 1213 , - 1248 , - 1555 , - 2134 , - 809 , - 1932 , - 1151 , - 642 , - 405 , - 440 , - 747 , - 1326 , - 1 , - 1124 , - 343 , - 2010 , - 1773 , - 1808 , - 2115 , - 518 , - 1369 , - 316 , - 1711 , - 1202 , - 965 , - 1000 , - 1307 , - 1886 , - 561 , - 1684 , - 903 , - 394 , - 157 , - 192 , - 499 , - 1078 , - 1929 , - 876 , - 95 , - 1762 , - 1525 , - 1560 , - 1867 , - 270 , - 1121 , - 68 , - 1463 , - 954 , - 717 , - 752 , - 1059 , - 1638 , - 313 , - 1436 , - 655 , - 146 , - 2085 , - 2120 , - 251 , - 830 , - 1681 , - 628 , - 2023 , - 1514 , - 1277 , - 1312 , - 1619 , - 22 , - 873 , - 1996 , - 1215 , - 706 , - 469 , - 504 , - 811 , - 1390 , - 65 , - 1188 , - 407 , - 2074 , - 1837 , - 1872 , - 3 , - 582 , - 1433 , - 380 , - 1775 , - 1266 , - 1029 , - 1064 , - 1371 , - 1950 , - 625 , - 1748 , - 967 , - 458 , - 221 , - 256 , - 563 , - 1142 , - 1993 , - 940 , - 159 , - 1826 , - 1589 , - 1624 , - 1931 , - 334 , - 1185 , - 132 , - 1527 , - 1018 , - 781 , - 816 , - 1123 , - 1702 , - 377 , - 1500 , - 719 , - 210 , - 2149 , - 8 , - 315 , - 894 , - 1745 , - 692 , - 2087 , - 1578 , - 1341 , - 1376 , - 1683 , - 86 , - 937 , - 2060 , - 1279 , - 770 , - 533 , - 568 , - 875 , - 1454 , - 129 , - 1252 , - 471 , - 2138 , - 1901 , - 1936 , - 67 , - 646 , - 1497 , - 444 , - 1839 , - 1330 , - 1093 , - 1128 , - 1435 , - 2014 , - 689 , - 1812 , - 1031 , - 522 , - 285 , - 320 , - 627 , - 1206 , - 2057 , - 1004 , - 223 , - 1890 , - 1653 , - 1688 , - 1995 , - 398 , - 1249 , - 196 , - 1591 , - 1082 , - 845 , - 880 , - 1187 , - 1766 , - 441 , - 1564 , - 783 , - 274 , - 37 , - 72 , - 379 , - 958 , - 1809 , - 756 , - 2151 , - 1642 , - 1405 , - 1440 , - 1747 , - 150 , - 1001 , - 2124 , - 1343 , - 834 , - 597 , - 632 , - 939 , - 1518 , - 193 , - 1316 , - 535 , - 26 , - 1965 , - 2000 , - 131 , - 710 , - 1561 , - 508 , - 1903 , - 1394 , - 1157 , - 1192 , - 1499 , - 2078 , - 753 , - 1876 , - 1095 , - 586 , - 349 , - 384 , - 691 , - 1270 , - 2121 , - 1068 , - 287 , - 1954 , - 1717 , - 1752 , - 2059 , - 462 , - 1313 , - 260 , - 1655 , - 1146 , - 909 , - 944 , - 1251 , - 1830 , - 505 , - 1628 , - 847 , - 338 , - 101 , - 136 , - 443 , - 1022 , - 1873 , - 820 , - 39 , - 1706 , - 1469 , - 1504 , - 1811 , - 214 , - 1065 , - 12 , - 1407 , - 898 , - 661 , - 696 , - 1003 , - 1582 , - 257 , - 1380 , - 599 , - 90 , - 2029 , - 2064 , - 195 , - 774 , - 1625 , - 572 , - 1967 , - 1458 , - 1221 , - 1256 , - 1563 , - 2142 , - 817 , - 1940 , - 1159 , - 650 , - 413 , - 448 , - 755 , - 1334 , - 9 , - 1132 , - 351 , - 2018 , - 1781 , - 1816 , - 2123 , - 526 , - 1377 , - 324 , - 1719 , - 1210 , - 973 , - 1008 , - 1315 , - 1894 , - 569 , - 1692 , - 911 , - 402 , - 165 , - 200 , - 507 , - 1086 , - 1937 , - 884 , - 103 , - 1770 , - 1533 , - 1568 , - 1875 , - 278 , - 1129 , - 76 , - 1471 , - 962 , - 725 , - 760 , - 1067 , - 1646 , - 321 , - 1444 , - 663 , - 154 , - 2093 , - 2128 , - 259 , - 838 , - 1689 , - 636 , - 2031 , - 1522 , - 1285 , - 1320 , - 1627 , - 30 , - 881 , - 2004 , - 1223 , - 714 , - 477 , - 512 , - 819 , - 1398 , - 73 , - 1196 , - 415 , - 2082 , - 1845 , - 1880 , - 11 , - 590 , - 1441 , - 388 , - 1783 , - 1274 , - 1037 , - 1072 , - 1379 , - 1958 , - 633 , - 1756 , - 975 , - 466 , - 229 , - 264 , - 571 , - 1150 , - 2001 , - 948 , - 167 , - 1834 , - 1597 , - 1632 , - 1939 , - 342 , - 1193 , - 140 , - 1535 , - 1026 , - 789 , - 824 , - 1131 , - 1710 , - 385 , - 1508 , - 727 , - 218 , - 2157 , - 16 , - 323 , - 902 , - 1753 , - 700 , - 2095 , - 1586 , - 1349 , - 1384 , - 1691 , - 94 , - 945 , - 2068 , - 1287 , - 778 , - 541 , - 576 , - 883 , - 1462 , - 137 , - 1260 , - 479 , - 2146 , - 1909 , - 1944 , - 75 , - 654 , - 1505 , - 452 , - 1847 , - 1338 , - 1101 , - 1136 , - 1443 , - 2022 , - 697 , - 1820 , - 1039 , - 530 , - 293 , - 328 , - 635 , - 1214 , - 2065 , - 1012 , - 231 , - 1898 , - 1661 , - 1696 , - 2003 , - 406 , - 1257 , - 204 , - 1599 , - 1090 , - 853 , - 888 , - 1195 , - 1774 , - 449 , - 1572 , - 791 , - 282 , - 45 , - 80 , - 387 , - 966 , - 1817 , - 764 , - 2159 , - 1650 , - 1413 , - 1448 , - 1755 , - 158 , - 1009 , - 2132 , - 1351 , - 842 , - 605 , - 640 , - 947 , - 1526 , - 201 , - 1324 , - 543 , - 34 , - 1973 , - 2008 , - 139 , - 718 , - 1569 , - 516 , - 1911 , - 1402 , - 1165 , - 1200 , - 1507 , - 2086 , - 761 , - 1884 , - 1103 , - 594 , - 357 , - 392 , - 699 , - 1278 , - 2129 , - 1076 , - 295 , - 1962 , - 1725 , - 1760 , - 2067 , - 470 , - 1321 , - 268 , - 1663 , - 1154 , - 917 , - 952 , - 1259 , - 1838 , - 513 , - 1636 , - 855 , - 346 , - 109 , - 144 , - 451 , - 1030 , - 1881 , - 828 , - 47 , - 1714 , - 1477 , - 1512 , - 1819 , - 222 , - 1073 , - 20 , - 1415 , - 906 , - 669 , - 704 , - 1011 , - 1590 , - 265 , - 1388 , - 607 , - 98 , - 2037 , - 2072 , - 203 , - 782 , - 1633 , - 580 , - 1975 , - 1466 , - 1229 , - 1264 , - 1571 , - 2150 , - 825 , - 1948 , - 1167 , - 658 , - 421 , - 456 , - 763 , - 1342 , - 17 , - 1140 , - 359 , - 2026 , - 1789 , - 1824 , - 2131 , - 534 , - 1385 , - 332 , - 1727 , - 1218 , - 981 , - 1016 , - 1323 , - 1902 , - 577 , - 1700 , - 919 , - 410 , - 173 , - 208 , - 515 , - 1094 , - 1945 , - 892 , - 111 , - 1778 , - 1541 , - 1576 , - 1883 , - 286 , - 1137 , - 84 , - 1479 , - 970 , - 733 , - 768 , - 1075 , - 1654 , - 329 , - 1452 , - 671 , - 162 , - 2101 , - 2136 , - 267 , - 846 , - 1697 , - 644 , - 2039 , - 1530 , - 1293 , - 1328 , - 1635 , - 38 , - 889 , - 2012 , - 1231 , - 722 , - 485 , - 520 , - 827 , - 1406 , - 81 , - 1204 , - 423 , - 2090 , - 1853 , - 1888 , - 19 , - 598 , - 1449 , - 396 , - 1791 , - 1282 , - 1045 , - 1080 , - 1387 , - 1966 , - 641 , - 1764 , - 983 , - 474 , - 237 , - 272 , - 579 , - 1158 , - 2009 , - 956 , - 175 , - 1842 , - 1605 , - 1640 , - 1947 , - 350 , - 1201 , - 148 , - 1543 , - 1034 , - 797 , - 832 , - 1139 , - 1718 , - 393 , - 1516 , - 735 , - 226 , - 2165 , - 24 , - 331 , - 910 , - 1761 , - 708 , - 2103 , - 1594 , - 1357 , - 1392 , - 1699 , - 102 , - 953 , - 2076 , - 1295 , - 786 , - 549 , - 584 , - 891 , - 1470 , - 145 , - 1268 , - 487 , - 2154 , - 1917 , - 1952 , - 83 , - 662 , - 1513 , - 460 , - 1855 , - 1346 , - 1109 , - 1144 , - 1451 , - 2030 , - 705 , - 1828 , - 1047 , - 538 , - 301 , - 336 , - 643 , - 1222 , - 2073 , - 1020 , - 239 , - 1906 , - 1669 , - 1704 , - 2011 , - 414 , - 1265 , - 212 , - 1607 , - 1098 , - 861 , - 896 , - 1203 , - 1782 , - 457 , - 1580 , - 799 , - 290 , - 53 , - 88 , - 395 , - 974 , - 1825 , - 772 , - 2167 , - 1658 , - 1421 , - 1456 , - 1763 , - 166 , - 1017 , - 2140 , - 1359 , - 850 , - 613 , - 648 , - 955 , - 1534 , - 209 , - 1332 , - 551 , - 42 , - 1981 , - 2016 , - 147 , - 726 , - 1577 , - 524 , - 1919 , - 1410 , - 1173 , - 1208 , - 1515 , - 2094 , - 769 , - 1892 , - 1111 , - 602 , - 365 , - 400 , - 707 , - 1286 , - 2137 , - 1084 , - 303 , - 1970 , - 1733 , - 1768 , - 2075 , - 478 , - 1329 , - 276 , - 1671 , - 1162 , - 925 , - 960 , - 1267 , - 1846 , - 521 , - 1644 , - 863 , - 354 , - 117 , - 152 , - 459 , - 1038 , - 1889 , - 836 , - 55 , - 1722 , - 1485 , - 1520 , - 1827 , - 230 , - 1081 , - 28 , - 1423 , - 914 , - 677 , - 712 , - 1019 , - 1598 , - 273 , - 1396 , - 615 , - 106 , - 2045 , - 2080 , - 211 , - 790 , - 1641 , - 588 , - 1983 , - 1474 , - 1237 , - 1272 , - 1579 , - 2158 , - 833 , - 1956 , - 1175 , - 666 , - 429 , - 464 , - 771 , - 1350 , - 25 , - 1148 , - 367 , - 2034 , - 1797 , - 1832 , - 2139 , - 542 , - 1393 , - 340 , - 1735 , - 1226 , - 989 , - 1024 , - 1331 , - 1910 , - 585 , - 1708 , - 927 , - 418 , - 181 , - 216 , - 523 , - 1102 , - 1953 , - 900 , - 119 , - 1786 , - 1549 , - 1584 , - 1891 , - 294 , - 1145 , - 92 , - 1487 , - 978 , - 741 , - 776 , - 1083 , - 1662 , - 337 , - 1460 , - 679 , - 170 , - 2109 , - 2144 , - 275 , - 854 , - 1705 , - 652 , - 2047 , - 1538 , - 1301 , - 1336 , - 1643 , - 46 , - 897 , - 2020 , - 1239 , - 730 , - 493 , - 528 , - 835 , - 1414 , - 89 , - 1212 , - 431 , - 2098 , - 1861 , - 1896 , - 27 , - 606 , - 1457 , - 404 , - 1799 , - 1290 , - 1053 , - 1088 , - 1395 , - 1974 , - 649 , - 1772 , - 991 , - 482 , - 245 , - 280 , - 587 , - 1166 , - 2017 , - 964 , - 183 , - 1850 , - 1613 , - 1648 , - 1955 , - 358 , - 1209 , - 156 , - 1551 , - 1042 , - 805 , - 840 , - 1147 , - 1726 , - 401 , - 1524 , - 743 , - 234 , - 2173 , - 32 , - 339 , - 918 , - 1769 , - 716 , - 2111 , - 1602 , - 1365 , - 1400 , - 1707 , - 110 , - 961 , - 2084 , - 1303 , - 794 , - 557 , - 592 , - 899 , - 1478 , - 153 , - 1276 , - 495 , - 2162 , - 1925 , - 1960 , - 91 , - 670 , - 1521 , - 468 , - 1863 , - 1354 , - 1117 , - 1152 , - 1459 , - 2038 , - 713 , - 1836 , - 1055 , - 546 , - 309 , - 344 , - 651 , - 1230 , - 2081 , - 1028 , - 247 , - 1914 , - 1677 , - 1712 , - 2019 , - 422 , - 1273 , - 220 , - 1615 , - 1106 , - 869 , - 904 , - 1211 , - 1790 , - 465 , - 1588 , - 807 , - 298 , - 61 , - 96 , - 403 , - 982 , - 1833 , - 780 , - 2175 , - 1666 , - 1429 , - 1464 , - 1771 , - 174 , - 1025 , - 2148 , - 1367 , - 858 , - 621 , - 656 , - 963 , - 1542 , - 217 , - 1340 , - 559 , - 50 , - 1989 , - 2024 , - 155 , - 734 , - 1585 , - 532 , - 1927 , - 1418 , - 1181 , - 1216 , - 1523 , - 2102 , - 777 , - 1900 , - 1119 , - 610 , - 373 , - 408 , - 715 , - 1294 , - 2145 , - 1092 , - 311 , - 1978 , - 1741 , - 1776 , - 2083 , - 486 , - 1337 , - 284 , - 1679 , - 1170 , - 933 , - 968 , - 1275 , - 1854 , - 529 , - 1652 , - 871 , - 362 , - 125 , - 160 , - 467 , - 1046 , - 1897 , - 844 , - 63 , - 1730 , - 1493 , - 1528 , - 1835 , - 238 , - 1089 , - 36 , - 1431 , - 922 , - 685 , - 720 , - 1027 , - 1606 , - 281 , - 1404 , - 623 , - 114 , - 2053 , - 2088 , - 219 , - 798 , - 1649 , - 596 , - 1991 , - 1482 , - 1245 , - 1280 , - 1587 , - 2166 , - 841 , - 1964 , - 1183 , - 674 , - 437 , - 472 , - 779 , - 1358 , - 33 , - 1156 , - 375 , - 2042 , - 1805 , - 1840 , - 2147 , - 550 , - 1401 , - 348 , - 1743 , - 1234 , - 997 , - 1032 , - 1339 , - 1918 , - 593 , - 1716 , - 935 , - 426 , - 189 , - 224 , - 531 , - 1110 , - 1961 , - 908 , - 127 , - 1794 , - 1557 , - 1592 , - 1899 , - 302 , - 1153 , - 100 , - 1495 , - 986 , - 749 , - 784 , - 1091 , - 1670 , - 345 , - 1468 , - 687 , - 178 , - 2117 , - 2152 , - 283 , - 862 , - 1713 , - 660 , - 2055 , - 1546 , - 1309 , - 1344 , - 1651 , - 54 , - 905 , - 2028 , - 1247 , - 738 , - 501 , - 536 , - 843 , - 1422 , - 97 , - 1220 , - 439 , - 2106 , - 1869 , - 1904 , - 35 , - 614 , - 1465 , - 412 , - 1807 , - 1298 , - 1061 , - 1096 , - 1403 , - 1982 , - 657 , - 1780 , - 999 , - 490 , - 253 , - 288 , - 595 , - 1174 , - 2025 , - 972 , - 191 , - 1858 , - 1621 , - 1656 , - 1963 , - 366 , - 1217 , - 164 , - 1559 , - 1050 , - 813 , - 848 , - 1155 , - 1734 , - 409 , - 1532 , - 751 , - 242 , - 5 , - 40 , - 347 , - 926 , - 1777 , - 724 , - 2119 , - 1610 , - 1373 , - 1408 , - 1715 , - 118 , - 969 , - 2092 , - 1311 , - 802 , - 565 , - 600 , - 907 , - 1486 , - 161 , - 1284 , - 503 , - 2170 , - 1933 , - 1968 , - 99 , - 678 , - 1529 , - 476 , - 1871 , - 1362 , - 1125 , - 1160 , - 1467 , - 2046 , - 721 , - 1844 , - 1063 , - 554 , - 317 , - 352 , - 659 , - 1238 , - 2089 , - 1036 , - 255 , - 1922 , - 1685 , - 1720 , - 2027 , - 430 , - 1281 , - 228 , - 1623 , - 1114 , - 877 , - 912 , - 1219 , - 1798 , - 473 , - 1596 , - 815 , - 306 , - 69 , - 104 , - 411 , - 990 , - 1841 , - 788 , - 7 , - 1674 , - 1437 , - 1472 , - 1779 , - 182 , - 1033 , - 2156 , - 1375 , - 866 , - 629 , - 664 , - 971 , - 1550 , - 225 , - 1348 , - 567 , - 58 , - 1997 , - 2032 , - 163 , - 742 , - 1593 , - 540 , - 1935 , - 1426 , - 1189 , - 1224 , - 1531 , - 2110 , - 785 , - 1908 , - 1127 , - 618 , - 381 , - 416 , - 723 , - 1302 , - 2153 , - 1100 , - 319 , - 1986 , - 1749 , - 1784 , - 2091 , - 494 , - 1345 , - 292 , - 1687 , - 1178 , - 941 , - 976 , - 1283 , - 1862 , - 537 , - 1660 , - 879 , - 370 , - 133 , - 168 , - 475 , - 1054 , - 1905 , - 852 , - 71 , - 1738 , - 1501 , - 1536 , - 1843 , - 246 , - 1097 , - 44 , - 1439 , - 930 , - 693 , - 728 , - 1035 , - 1614 , - 289 , - 1412 , - 631 , - 122 , - 2061 , - 2096 , - 227 , - 806 , - 1657 , - 604 , - 1999 , - 1490 , - 1253 , - 1288 , - 1595 , - 2174 , - 849 , - 1972 , - 1191 , - 682 , - 445 , - 480 , - 787 , - 1366 , - 41 , - 1164 , - 383 , - 2050 , - 1813 , - 1848 , - 2155 , - 558 , - 1409 , - 356 , - 1751 , - 1242 , - 1005 , - 1040 , - 1347 , - 1926 , - 601 , - 1724 , - 943 , - 434 , - 197 , - 232 , - 539 , - 1118 , - 1969 , - 916 , - 135 , - 1802 , - 1565 , - 1600 , - 1907 , - 310 , - 1161 , - 108 , - 1503 , - 994 , - 757 , - 792 , - 1099 , - 1678 , - 353 , - 1476 , - 695 , - 186 , - 2125 , - 2160 , - 291 , - 870 , - 1721 , - 668 , - 2063 , - 1554 , - 1317 , - 1352 , - 1659 , - 62 , - 913 , - 2036 , - 1255 , - 746 , - 509 , - 544 , - 851 , - 1430 , - 105 , - 1228 , - 447 , - 2114 , - 1877 , - 1912 , - 43 , - 622 , - 1473 , - 420 , - 1815 , - 1306 , - 1069 , - 1104 , - 1411 , - 1990 , - 665 , - 1788 , - 1007 , - 498 , - 261 , - 296 , - 603 , - 1182 , - 2033 , - 980 , - 199 , - 1866 , - 1629 , - 1664 , - 1971 , - 374 , - 1225 , - 172 , - 1567 , - 1058 , - 821 , - 856 , - 1163 , - 1742 , - 417 , - 1540 , - 759 , - 250 , - 13 , - 48 , - 355 , - 934 , - 1785 , - 732 , - 2127 , - 1618 , - 1381 , - 1416 , - 1723 , - 126 , - 977 , - 2100 , - 1319 , - 810 , - 573 , - 608 , - 915 , - 1494 , - 169 , - 1292 , - 511 , - 2 , - 1941 , - 1976 , - 107 , - 686 , - 1537 , - 484 , - 1879 , - 1370 , - 1133 , - 1168 , - 1475 , - 2054 , - 729 , - 1852 , - 1071 , - 562 , - 325 , - 360 , - 667 , - 1246 , - 2097 , - 1044 , - 263 , - 1930 , - 1693 , - 1728 , - 2035 , - 438 , - 1289 , - 236 , - 1631 , - 1122 , - 885 , - 920 , - 1227 , - 1806 , - 481 , - 1604 , - 823 , - 314 , - 77 , - 112 , - 419 , - 998 , - 1849 , - 796 , - 15 , - 1682 , - 1445 , - 1480 , - 1787 , - 190 , - 1041 , - 2164 , - 1383 , - 874 , - 637 , - 672 , - 979 , - 1558 , - 233 , - 1356 , - 575 , - 66 , - 2005 , - 2040 , - 171 , - 750 , - 1601 , - 548 , - 1943 , - 1434 , - 1197 , - 1232 , - 1539 , - 2118 , - 793 , - 1916 , - 1135 , - 626 , - 389 , - 424 , - 731 , - 1310 , - 2161 , - 1108 , - 327 , - 1994 , - 1757 , - 1792 , - 2099 , - 502 , - 1353 , - 300 , - 1695 , - 1186 , - 949 , - 984 , - 1291 , - 1870 , - 545 , - 1668 , - 887 , - 378 , - 141 , - 176 , - 483 , - 1062 , - 1913 , - 860 , - 79 , - 1746 , - 1509 , - 1544 , - 1851 , - 254 , - 1105 , - 52 , - 1447 , - 938 , - 701 , - 736 , - 1043 , - 1622 , - 297 , - 1420 , - 639 , - 130 , - 2069 , - 2104 , - 235 , - 814 , - 1665 , - 612 , - 2007 , - 1498 , - 1261 , - 1296 , - 1603 , - 6 , - 857 , - 1980 , - 1199 , - 690 , - 453 , - 488 , - 795 , - 1374 , - 49 , - 1172 , - 391 , - 2058 , - 1821 , - 1856 , - 2163 , - 566 , - 1417 , - 364 , - 1759 , - 1250 , - 1013 , - 1048 , - 1355 , - 1934 , - 609 , - 1732 , - 951 , - 442 , - 205 , - 240 , - 547 , - 1126 , - 1977 , - 924 , - 143 , - 1810 , - 1573 , - 1608 , - 1915 , - 318 , - 1169 , - 116 , - 1511 , - 1002 , - 765 , - 800 , - 1107 , - 1686 , - 361 , - 1484 , - 703 , - 194 , - 2133 , - 2168 , - 299 , - 878 , - 1729 , - 676 , - 2071 , - 1562 , - 1325 , - 1360 , - 1667 , - 70 , - 921 , - 2044 , - 1263 , - 754 , - 517 , - 552 , - 859 , - 1438 , - 113 , - 1236 , - 455 , - 2122 , - 1885 , - 1920 , - 51 , - 630 , - 1481 , - 428 , - 1823 , - 1314 , - 1077 , - 1112 , - 1419 , - 1998 , - 673 , - 1796 , - 1015 , - 506 , - 269 , - 304 , - 611 , - 1190 , - 2041 , - 988 , - 207 , - 1874 , - 1637 , - 1672 , - 1979 , - 382 , - 1233 , - 180 , - 1575 , - 1066 , - 829 , - 864 , - 1171 , - 1750 , - 425 , - 1548 , - 767 , - 258 , - 21 , - 56 , - 363 , - 942 , - 1793 , - 740 , - 2135 , - 1626 , - 1389 , - 1424 , - 1731 , - 134 , - 985 , - 2108 , - 1327 , - 818 , - 581 , - 616 , - 923 , - 1502 , - 177 , - 1300 , - 519 , - 10 , - 1949 , - 1984 , - 115 , - 694 , - 1545 , - 492 , - 1887 , - 1378 , - 1141 , - 1176 , - 1483 , - 2062 , - 737 , - 1860 , - 1079 , - 570 , - 333 , - 368 , - 675 , - 1254 , - 2105 , - 1052 , - 271 , - 1938 , - 1701 , - 1736 , - 2043 , - 446 , - 1297 , - 244 , - 1639 , - 1130 , - 893 , - 928 , - 1235 , - 1814 , - 489 , - 1612 , - 831 , - 322 , - 85 , - 120 , - 427 , - 1006 , - 1857 , - 804 , - 23 , - 1690 , - 1453 , - 1488 , - 1795 , - 198 , - 1049 , - 2172 , - 1391 , - 882 , - 645 , - 680 , - 987 , - 1566 , - 241 , - 1364 , - 583 , - 74 , - 2013 , - 2048 , - 179 , - 758 , - 1609 , - 556 , - 1951 , - 1442 , - 1205 , - 1240 , - 1547 , - 2126 , - 801 , - 1924 , - 1143 , - 634 , - 397 , - 432 , - 739 , - 1318 , - 2169 , - 1116 , - 335 , - 2002 , - 1765 , - 1800 , - 2107 , - 510 , - 1361 , - 308 , - 1703 , - 1194 , - 957 , - 992 , - 1299 , - 1878 , - 553 , - 1676 , - 895 , - 386 , - 149 , - 184 , - 491 , - 1070 , - 1921 , - 868 , - 87 , - 1754 , - 1517 , - 1552 , - 1859 , - 262 , - 1113 , - 60 , - 1455 , - 946 , - 709 , - 744 , - 1051 , - 1630 , - 305 , - 1428 , - 647 , - 138 , - 2077 , - 2112 , - 243 , - 822 , - 1673 , - 620 , - 2015 , - 1506 , - 1269 , - 1304 , - 1611 , - 14 , - 865 , - 1988 , - 1207 , - 698 , - 461 , - 496 , - 803 , - 1382 , - 57 , - 1180 , - 399 , - 2066 , - 1829 , - 1864 , - 2171 , - 574 , - 1425 , - 372 , - 1767 , - 1258 , - 1021 , - 1056 , - 1363 , - 1942 , - 617 , - 1740 , - 959 , - 450 , - 213 , - 248 , - 555 , - 1134 , - 1985 , - 932 , - 151 , - 1818 , - 1581 , - 1616 , - 1923 , - 326 , - 1177 , - 124 , - 1519 , - 1010 , - 773 , - 808 , - 1115 , - 1694 , - 369 , - 1492 , - 711 , - 202 , - 2141 , - 0 , - 629 , - 2098 , - 2167 , - 836 , - 345 , - 694 , - 1883 , - 1672 , - 61 , - 1530 , - 1599 , - 268 , - 2017 , - 126 , - 1315 , - 1104 , - 1733 , - 962 , - 1031 , - 1940 , - 1449 , - 1798 , - 747 , - 536 , - 1165 , - 394 , - 463 , - 1372 , - 881 , - 1230 , - 179 , - 2208 , - 597 , - 2066 , - 2135 , - 804 , - 313 , - 662 , - 1851 , - 1640 , - 29 , - 1498 , - 1567 , - 236 , - 1985 , - 94 , - 1283 , - 1072 , - 1701 , - 930 , - 999 , - 1908 , - 1417 , - 1766 , - 715 , - 504 , - 1133 , - 362 , - 431 , - 1340 , - 849 , - 1198 , - 147 , - 2176 , - 565 , - 2034 , - 2103 , - 772 , - 281 , - 630 , - 1819 , - 1608 , - 2237 , - 1466 , - 1535 , - 204 , - 1953 , - 62 , - 1251 , - 1040 , - 1669 , - 898 , - 967 , - 1876 , - 1385 , - 1734 , - 683 , - 472 , - 1101 , - 330 , - 399 , - 1308 , - 817 , - 1166 , - 115 , - 2144 , - 533 , - 2002 , - 2071 , - 740 , - 249 , - 598 , - 1787 , - 1576 , - 2205 , - 1434 , - 1503 , - 172 , - 1921 , - 30 , - 1219 , - 1008 , - 1637 , - 866 , - 935 , - 1844 , - 1353 , - 1702 , - 651 , - 440 , - 1069 , - 298 , - 367 , - 1276 , - 785 , - 1134 , - 83 , - 2112 , - 501 , - 1970 , - 2039 , - 708 , - 217 , - 566 , - 1755 , - 1544 , - 2173 , - 1402 , - 1471 , - 140 , - 1889 , - 2238 , - 1187 , - 976 , - 1605 , - 834 , - 903 , - 1812 , - 1321 , - 1670 , - 619 , - 408 , - 1037 , - 266 , - 335 , - 1244 , - 753 , - 1102 , - 51 , - 2080 , - 469 , - 1938 , - 2007 , - 676 , - 185 , - 534 , - 1723 , - 1512 , - 2141 , - 1370 , - 1439 , - 108 , - 1857 , - 2206 , - 1155 , - 944 , - 1573 , - 802 , - 871 , - 1780 , - 1289 , - 1638 , - 587 , - 376 , - 1005 , - 234 , - 303 , - 1212 , - 721 , - 1070 , - 19 , - 2048 , - 437 , - 1906 , - 1975 , - 644 , - 153 , - 502 , - 1691 , - 1480 , - 2109 , - 1338 , - 1407 , - 76 , - 1825 , - 2174 , - 1123 , - 912 , - 1541 , - 770 , - 839 , - 1748 , - 1257 , - 1606 , - 555 , - 344 , - 973 , - 202 , - 271 , - 1180 , - 689 , - 1038 , - 2227 , - 2016 , - 405 , - 1874 , - 1943 , - 612 , - 121 , - 470 , - 1659 , - 1448 , - 2077 , - 1306 , - 1375 , - 44 , - 1793 , - 2142 , - 1091 , - 880 , - 1509 , - 738 , - 807 , - 1716 , - 1225 , - 1574 , - 523 , - 312 , - 941 , - 170 , - 239 , - 1148 , - 657 , - 1006 , - 2195 , - 1984 , - 373 , - 1842 , - 1911 , - 580 , - 89 , - 438 , - 1627 , - 1416 , - 2045 , - 1274 , - 1343 , - 12 , - 1761 , - 2110 , - 1059 , - 848 , - 1477 , - 706 , - 775 , - 1684 , - 1193 , - 1542 , - 491 , - 280 , - 909 , - 138 , - 207 , - 1116 , - 625 , - 974 , - 2163 , - 1952 , - 341 , - 1810 , - 1879 , - 548 , - 57 , - 406 , - 1595 , - 1384 , - 2013 , - 1242 , - 1311 , - 2220 , - 1729 , - 2078 , - 1027 , - 816 , - 1445 , - 674 , - 743 , - 1652 , - 1161 , - 1510 , - 459 , - 248 , - 877 , - 106 , - 175 , - 1084 , - 593 , - 942 , - 2131 , - 1920 , - 309 , - 1778 , - 1847 , - 516 , - 25 , - 374 , - 1563 , - 1352 , - 1981 , - 1210 , - 1279 , - 2188 , - 1697 , - 2046 , - 995 , - 784 , - 1413 , - 642 , - 711 , - 1620 , - 1129 , - 1478 , - 427 , - 216 , - 845 , - 74 , - 143 , - 1052 , - 561 , - 910 , - 2099 , - 1888 , - 277 , - 1746 , - 1815 , - 484 , - 2233 , - 342 , - 1531 , - 1320 , - 1949 , - 1178 , - 1247 , - 2156 , - 1665 , - 2014 , - 963 , - 752 , - 1381 , - 610 , - 679 , - 1588 , - 1097 , - 1446 , - 395 , - 184 , - 813 , - 42 , - 111 , - 1020 , - 529 , - 878 , - 2067 , - 1856 , - 245 , - 1714 , - 1783 , - 452 , - 2201 , - 310 , - 1499 , - 1288 , - 1917 , - 1146 , - 1215 , - 2124 , - 1633 , - 1982 , - 931 , - 720 , - 1349 , - 578 , - 647 , - 1556 , - 1065 , - 1414 , - 363 , - 152 , - 781 , - 10 , - 79 , - 988 , - 497 , - 846 , - 2035 , - 1824 , - 213 , - 1682 , - 1751 , - 420 , - 2169 , - 278 , - 1467 , - 1256 , - 1885 , - 1114 , - 1183 , - 2092 , - 1601 , - 1950 , - 899 , - 688 , - 1317 , - 546 , - 615 , - 1524 , - 1033 , - 1382 , - 331 , - 120 , - 749 , - 2218 , - 47 , - 956 , - 465 , - 814 , - 2003 , - 1792 , - 181 , - 1650 , - 1719 , - 388 , - 2137 , - 246 , - 1435 , - 1224 , - 1853 , - 1082 , - 1151 , - 2060 , - 1569 , - 1918 , - 867 , - 656 , - 1285 , - 514 , - 583 , - 1492 , - 1001 , - 1350 , - 299 , - 88 , - 717 , - 2186 , - 15 , - 924 , - 433 , - 782 , - 1971 , - 1760 , - 149 , - 1618 , - 1687 , - 356 , - 2105 , - 214 , - 1403 , - 1192 , - 1821 , - 1050 , - 1119 , - 2028 , - 1537 , - 1886 , - 835 , - 624 , - 1253 , - 482 , - 551 , - 1460 , - 969 , - 1318 , - 267 , - 56 , - 685 , - 2154 , - 2223 , - 892 , - 401 , - 750 , - 1939 , - 1728 , - 117 , - 1586 , - 1655 , - 324 , - 2073 , - 182 , - 1371 , - 1160 , - 1789 , - 1018 , - 1087 , - 1996 , - 1505 , - 1854 , - 803 , - 592 , - 1221 , - 450 , - 519 , - 1428 , - 937 , - 1286 , - 235 , - 24 , - 653 , - 2122 , - 2191 , - 860 , - 369 , - 718 , - 1907 , - 1696 , - 85 , - 1554 , - 1623 , - 292 , - 2041 , - 150 , - 1339 , - 1128 , - 1757 , - 986 , - 1055 , - 1964 , - 1473 , - 1822 , - 771 , - 560 , - 1189 , - 418 , - 487 , - 1396 , - 905 , - 1254 , - 203 , - 2232 , - 621 , - 2090 , - 2159 , - 828 , - 337 , - 686 , - 1875 , - 1664 , - 53 , - 1522 , - 1591 , - 260 , - 2009 , - 118 , - 1307 , - 1096 , - 1725 , - 954 , - 1023 , - 1932 , - 1441 , - 1790 , - 739 , - 528 , - 1157 , - 386 , - 455 , - 1364 , - 873 , - 1222 , - 171 , - 2200 , - 589 , - 2058 , - 2127 , - 796 , - 305 , - 654 , - 1843 , - 1632 , - 21 , - 1490 , - 1559 , - 228 , - 1977 , - 86 , - 1275 , - 1064 , - 1693 , - 922 , - 991 , - 1900 , - 1409 , - 1758 , - 707 , - 496 , - 1125 , - 354 , - 423 , - 1332 , - 841 , - 1190 , - 139 , - 2168 , - 557 , - 2026 , - 2095 , - 764 , - 273 , - 622 , - 1811 , - 1600 , - 2229 , - 1458 , - 1527 , - 196 , - 1945 , - 54 , - 1243 , - 1032 , - 1661 , - 890 , - 959 , - 1868 , - 1377 , - 1726 , - 675 , - 464 , - 1093 , - 322 , - 391 , - 1300 , - 809 , - 1158 , - 107 , - 2136 , - 525 , - 1994 , - 2063 , - 732 , - 241 , - 590 , - 1779 , - 1568 , - 2197 , - 1426 , - 1495 , - 164 , - 1913 , - 22 , - 1211 , - 1000 , - 1629 , - 858 , - 927 , - 1836 , - 1345 , - 1694 , - 643 , - 432 , - 1061 , - 290 , - 359 , - 1268 , - 777 , - 1126 , - 75 , - 2104 , - 493 , - 1962 , - 2031 , - 700 , - 209 , - 558 , - 1747 , - 1536 , - 2165 , - 1394 , - 1463 , - 132 , - 1881 , - 2230 , - 1179 , - 968 , - 1597 , - 826 , - 895 , - 1804 , - 1313 , - 1662 , - 611 , - 400 , - 1029 , - 258 , - 327 , - 1236 , - 745 , - 1094 , - 43 , - 2072 , - 461 , - 1930 , - 1999 , - 668 , - 177 , - 526 , - 1715 , - 1504 , - 2133 , - 1362 , - 1431 , - 100 , - 1849 , - 2198 , - 1147 , - 936 , - 1565 , - 794 , - 863 , - 1772 , - 1281 , - 1630 , - 579 , - 368 , - 997 , - 226 , - 295 , - 1204 , - 713 , - 1062 , - 11 , - 2040 , - 429 , - 1898 , - 1967 , - 636 , - 145 , - 494 , - 1683 , - 1472 , - 2101 , - 1330 , - 1399 , - 68 , - 1817 , - 2166 , - 1115 , - 904 , - 1533 , - 762 , - 831 , - 1740 , - 1249 , - 1598 , - 547 , - 336 , - 965 , - 194 , - 263 , - 1172 , - 681 , - 1030 , - 2219 , - 2008 , - 397 , - 1866 , - 1935 , - 604 , - 113 , - 462 , - 1651 , - 1440 , - 2069 , - 1298 , - 1367 , - 36 , - 1785 , - 2134 , - 1083 , - 872 , - 1501 , - 730 , - 799 , - 1708 , - 1217 , - 1566 , - 515 , - 304 , - 933 , - 162 , - 231 , - 1140 , - 649 , - 998 , - 2187 , - 1976 , - 365 , - 1834 , - 1903 , - 572 , - 81 , - 430 , - 1619 , - 1408 , - 2037 , - 1266 , - 1335 , - 4 , - 1753 , - 2102 , - 1051 , - 840 , - 1469 , - 698 , - 767 , - 1676 , - 1185 , - 1534 , - 483 , - 272 , - 901 , - 130 , - 199 , - 1108 , - 617 , - 966 , - 2155 , - 1944 , - 333 , - 1802 , - 1871 , - 540 , - 49 , - 398 , - 1587 , - 1376 , - 2005 , - 1234 , - 1303 , - 2212 , - 1721 , - 2070 , - 1019 , - 808 , - 1437 , - 666 , - 735 , - 1644 , - 1153 , - 1502 , - 451 , - 240 , - 869 , - 98 , - 167 , - 1076 , - 585 , - 934 , - 2123 , - 1912 , - 301 , - 1770 , - 1839 , - 508 , - 17 , - 366 , - 1555 , - 1344 , - 1973 , - 1202 , - 1271 , - 2180 , - 1689 , - 2038 , - 987 , - 776 , - 1405 , - 634 , - 703 , - 1612 , - 1121 , - 1470 , - 419 , - 208 , - 837 , - 66 , - 135 , - 1044 , - 553 , - 902 , - 2091 , - 1880 , - 269 , - 1738 , - 1807 , - 476 , - 2225 , - 334 , - 1523 , - 1312 , - 1941 , - 1170 , - 1239 , - 2148 , - 1657 , - 2006 , - 955 , - 744 , - 1373 , - 602 , - 671 , - 1580 , - 1089 , - 1438 , - 387 , - 176 , - 805 , - 34 , - 103 , - 1012 , - 521 , - 870 , - 2059 , - 1848 , - 237 , - 1706 , - 1775 , - 444 , - 2193 , - 302 , - 1491 , - 1280 , - 1909 , - 1138 , - 1207 , - 2116 , - 1625 , - 1974 , - 923 , - 712 , - 1341 , - 570 , - 639 , - 1548 , - 1057 , - 1406 , - 355 , - 144 , - 773 , - 2 , - 71 , - 980 , - 489 , - 838 , - 2027 , - 1816 , - 205 , - 1674 , - 1743 , - 412 , - 2161 , - 270 , - 1459 , - 1248 , - 1877 , - 1106 , - 1175 , - 2084 , - 1593 , - 1942 , - 891 , - 680 , - 1309 , - 538 , - 607 , - 1516 , - 1025 , - 1374 , - 323 , - 112 , - 741 , - 2210 , - 39 , - 948 , - 457 , - 806 , - 1995 , - 1784 , - 173 , - 1642 , - 1711 , - 380 , - 2129 , - 238 , - 1427 , - 1216 , - 1845 , - 1074 , - 1143 , - 2052 , - 1561 , - 1910 , - 859 , - 648 , - 1277 , - 506 , - 575 , - 1484 , - 993 , - 1342 , - 291 , - 80 , - 709 , - 2178 , - 7 , - 916 , - 425 , - 774 , - 1963 , - 1752 , - 141 , - 1610 , - 1679 , - 348 , - 2097 , - 206 , - 1395 , - 1184 , - 1813 , - 1042 , - 1111 , - 2020 , - 1529 , - 1878 , - 827 , - 616 , - 1245 , - 474 , - 543 , - 1452 , - 961 , - 1310 , - 259 , - 48 , - 677 , - 2146 , - 2215 , - 884 , - 393 , - 742 , - 1931 , - 1720 , - 109 , - 1578 , - 1647 , - 316 , - 2065 , - 174 , - 1363 , - 1152 , - 1781 , - 1010 , - 1079 , - 1988 , - 1497 , - 1846 , - 795 , - 584 , - 1213 , - 442 , - 511 , - 1420 , - 929 , - 1278 , - 227 , - 16 , - 645 , - 2114 , - 2183 , - 852 , - 361 , - 710 , - 1899 , - 1688 , - 77 , - 1546 , - 1615 , - 284 , - 2033 , - 142 , - 1331 , - 1120 , - 1749 , - 978 , - 1047 , - 1956 , - 1465 , - 1814 , - 763 , - 552 , - 1181 , - 410 , - 479 , - 1388 , - 897 , - 1246 , - 195 , - 2224 , - 613 , - 2082 , - 2151 , - 820 , - 329 , - 678 , - 1867 , - 1656 , - 45 , - 1514 , - 1583 , - 252 , - 2001 , - 110 , - 1299 , - 1088 , - 1717 , - 946 , - 1015 , - 1924 , - 1433 , - 1782 , - 731 , - 520 , - 1149 , - 378 , - 447 , - 1356 , - 865 , - 1214 , - 163 , - 2192 , - 581 , - 2050 , - 2119 , - 788 , - 297 , - 646 , - 1835 , - 1624 , - 13 , - 1482 , - 1551 , - 220 , - 1969 , - 78 , - 1267 , - 1056 , - 1685 , - 914 , - 983 , - 1892 , - 1401 , - 1750 , - 699 , - 488 , - 1117 , - 346 , - 415 , - 1324 , - 833 , - 1182 , - 131 , - 2160 , - 549 , - 2018 , - 2087 , - 756 , - 265 , - 614 , - 1803 , - 1592 , - 2221 , - 1450 , - 1519 , - 188 , - 1937 , - 46 , - 1235 , - 1024 , - 1653 , - 882 , - 951 , - 1860 , - 1369 , - 1718 , - 667 , - 456 , - 1085 , - 314 , - 383 , - 1292 , - 801 , - 1150 , - 99 , - 2128 , - 517 , - 1986 , - 2055 , - 724 , - 233 , - 582 , - 1771 , - 1560 , - 2189 , - 1418 , - 1487 , - 156 , - 1905 , - 14 , - 1203 , - 992 , - 1621 , - 850 , - 919 , - 1828 , - 1337 , - 1686 , - 635 , - 424 , - 1053 , - 282 , - 351 , - 1260 , - 769 , - 1118 , - 67 , - 2096 , - 485 , - 1954 , - 2023 , - 692 , - 201 , - 550 , - 1739 , - 1528 , - 2157 , - 1386 , - 1455 , - 124 , - 1873 , - 2222 , - 1171 , - 960 , - 1589 , - 818 , - 887 , - 1796 , - 1305 , - 1654 , - 603 , - 392 , - 1021 , - 250 , - 319 , - 1228 , - 737 , - 1086 , - 35 , - 2064 , - 453 , - 1922 , - 1991 , - 660 , - 169 , - 518 , - 1707 , - 1496 , - 2125 , - 1354 , - 1423 , - 92 , - 1841 , - 2190 , - 1139 , - 928 , - 1557 , - 786 , - 855 , - 1764 , - 1273 , - 1622 , - 571 , - 360 , - 989 , - 218 , - 287 , - 1196 , - 705 , - 1054 , - 3 , - 2032 , - 421 , - 1890 , - 1959 , - 628 , - 137 , - 486 , - 1675 , - 1464 , - 2093 , - 1322 , - 1391 , - 60 , - 1809 , - 2158 , - 1107 , - 896 , - 1525 , - 754 , - 823 , - 1732 , - 1241 , - 1590 , - 539 , - 328 , - 957 , - 186 , - 255 , - 1164 , - 673 , - 1022 , - 2211 , - 2000 , - 389 , - 1858 , - 1927 , - 596 , - 105 , - 454 , - 1643 , - 1432 , - 2061 , - 1290 , - 1359 , - 28 , - 1777 , - 2126 , - 1075 , - 864 , - 1493 , - 722 , - 791 , - 1700 , - 1209 , - 1558 , - 507 , - 296 , - 925 , - 154 , - 223 , - 1132 , - 641 , - 990 , - 2179 , - 1968 , - 357 , - 1826 , - 1895 , - 564 , - 73 , - 422 , - 1611 , - 1400 , - 2029 , - 1258 , - 1327 , - 2236 , - 1745 , - 2094 , - 1043 , - 832 , - 1461 , - 690 , - 759 , - 1668 , - 1177 , - 1526 , - 475 , - 264 , - 893 , - 122 , - 191 , - 1100 , - 609 , - 958 , - 2147 , - 1936 , - 325 , - 1794 , - 1863 , - 532 , - 41 , - 390 , - 1579 , - 1368 , - 1997 , - 1226 , - 1295 , - 2204 , - 1713 , - 2062 , - 1011 , - 800 , - 1429 , - 658 , - 727 , - 1636 , - 1145 , - 1494 , - 443 , - 232 , - 861 , - 90 , - 159 , - 1068 , - 577 , - 926 , - 2115 , - 1904 , - 293 , - 1762 , - 1831 , - 500 , - 9 , - 358 , - 1547 , - 1336 , - 1965 , - 1194 , - 1263 , - 2172 , - 1681 , - 2030 , - 979 , - 768 , - 1397 , - 626 , - 695 , - 1604 , - 1113 , - 1462 , - 411 , - 200 , - 829 , - 58 , - 127 , - 1036 , - 545 , - 894 , - 2083 , - 1872 , - 261 , - 1730 , - 1799 , - 468 , - 2217 , - 326 , - 1515 , - 1304 , - 1933 , - 1162 , - 1231 , - 2140 , - 1649 , - 1998 , - 947 , - 736 , - 1365 , - 594 , - 663 , - 1572 , - 1081 , - 1430 , - 379 , - 168 , - 797 , - 26 , - 95 , - 1004 , - 513 , - 862 , - 2051 , - 1840 , - 229 , - 1698 , - 1767 , - 436 , - 2185 , - 294 , - 1483 , - 1272 , - 1901 , - 1130 , - 1199 , - 2108 , - 1617 , - 1966 , - 915 , - 704 , - 1333 , - 562 , - 631 , - 1540 , - 1049 , - 1398 , - 347 , - 136 , - 765 , - 2234 , - 63 , - 972 , - 481 , - 830 , - 2019 , - 1808 , - 197 , - 1666 , - 1735 , - 404 , - 2153 , - 262 , - 1451 , - 1240 , - 1869 , - 1098 , - 1167 , - 2076 , - 1585 , - 1934 , - 883 , - 672 , - 1301 , - 530 , - 599 , - 1508 , - 1017 , - 1366 , - 315 , - 104 , - 733 , - 2202 , - 31 , - 940 , - 449 , - 798 , - 1987 , - 1776 , - 165 , - 1634 , - 1703 , - 372 , - 2121 , - 230 , - 1419 , - 1208 , - 1837 , - 1066 , - 1135 , - 2044 , - 1553 , - 1902 , - 851 , - 640 , - 1269 , - 498 , - 567 , - 1476 , - 985 , - 1334 , - 283 , - 72 , - 701 , - 2170 , - 2239 , - 908 , - 417 , - 766 , - 1955 , - 1744 , - 133 , - 1602 , - 1671 , - 340 , - 2089 , - 198 , - 1387 , - 1176 , - 1805 , - 1034 , - 1103 , - 2012 , - 1521 , - 1870 , - 819 , - 608 , - 1237 , - 466 , - 535 , - 1444 , - 953 , - 1302 , - 251 , - 40 , - 669 , - 2138 , - 2207 , - 876 , - 385 , - 734 , - 1923 , - 1712 , - 101 , - 1570 , - 1639 , - 308 , - 2057 , - 166 , - 1355 , - 1144 , - 1773 , - 1002 , - 1071 , - 1980 , - 1489 , - 1838 , - 787 , - 576 , - 1205 , - 434 , - 503 , - 1412 , - 921 , - 1270 , - 219 , - 8 , - 637 , - 2106 , - 2175 , - 844 , - 353 , - 702 , - 1891 , - 1680 , - 69 , - 1538 , - 1607 , - 276 , - 2025 , - 134 , - 1323 , - 1112 , - 1741 , - 970 , - 1039 , - 1948 , - 1457 , - 1806 , - 755 , - 544 , - 1173 , - 402 , - 471 , - 1380 , - 889 , - 1238 , - 187 , - 2216 , - 605 , - 2074 , - 2143 , - 812 , - 321 , - 670 , - 1859 , - 1648 , - 37 , - 1506 , - 1575 , - 244 , - 1993 , - 102 , - 1291 , - 1080 , - 1709 , - 938 , - 1007 , - 1916 , - 1425 , - 1774 , - 723 , - 512 , - 1141 , - 370 , - 439 , - 1348 , - 857 , - 1206 , - 155 , - 2184 , - 573 , - 2042 , - 2111 , - 780 , - 289 , - 638 , - 1827 , - 1616 , - 5 , - 1474 , - 1543 , - 212 , - 1961 , - 70 , - 1259 , - 1048 , - 1677 , - 906 , - 975 , - 1884 , - 1393 , - 1742 , - 691 , - 480 , - 1109 , - 338 , - 407 , - 1316 , - 825 , - 1174 , - 123 , - 2152 , - 541 , - 2010 , - 2079 , - 748 , - 257 , - 606 , - 1795 , - 1584 , - 2213 , - 1442 , - 1511 , - 180 , - 1929 , - 38 , - 1227 , - 1016 , - 1645 , - 874 , - 943 , - 1852 , - 1361 , - 1710 , - 659 , - 448 , - 1077 , - 306 , - 375 , - 1284 , - 793 , - 1142 , - 91 , - 2120 , - 509 , - 1978 , - 2047 , - 716 , - 225 , - 574 , - 1763 , - 1552 , - 2181 , - 1410 , - 1479 , - 148 , - 1897 , - 6 , - 1195 , - 984 , - 1613 , - 842 , - 911 , - 1820 , - 1329 , - 1678 , - 627 , - 416 , - 1045 , - 274 , - 343 , - 1252 , - 761 , - 1110 , - 59 , - 2088 , - 477 , - 1946 , - 2015 , - 684 , - 193 , - 542 , - 1731 , - 1520 , - 2149 , - 1378 , - 1447 , - 116 , - 1865 , - 2214 , - 1163 , - 952 , - 1581 , - 810 , - 879 , - 1788 , - 1297 , - 1646 , - 595 , - 384 , - 1013 , - 242 , - 311 , - 1220 , - 729 , - 1078 , - 27 , - 2056 , - 445 , - 1914 , - 1983 , - 652 , - 161 , - 510 , - 1699 , - 1488 , - 2117 , - 1346 , - 1415 , - 84 , - 1833 , - 2182 , - 1131 , - 920 , - 1549 , - 778 , - 847 , - 1756 , - 1265 , - 1614 , - 563 , - 352 , - 981 , - 210 , - 279 , - 1188 , - 697 , - 1046 , - 2235 , - 2024 , - 413 , - 1882 , - 1951 , - 620 , - 129 , - 478 , - 1667 , - 1456 , - 2085 , - 1314 , - 1383 , - 52 , - 1801 , - 2150 , - 1099 , - 888 , - 1517 , - 746 , - 815 , - 1724 , - 1233 , - 1582 , - 531 , - 320 , - 949 , - 178 , - 247 , - 1156 , - 665 , - 1014 , - 2203 , - 1992 , - 381 , - 1850 , - 1919 , - 588 , - 97 , - 446 , - 1635 , - 1424 , - 2053 , - 1282 , - 1351 , - 20 , - 1769 , - 2118 , - 1067 , - 856 , - 1485 , - 714 , - 783 , - 1692 , - 1201 , - 1550 , - 499 , - 288 , - 917 , - 146 , - 215 , - 1124 , - 633 , - 982 , - 2171 , - 1960 , - 349 , - 1818 , - 1887 , - 556 , - 65 , - 414 , - 1603 , - 1392 , - 2021 , - 1250 , - 1319 , - 2228 , - 1737 , - 2086 , - 1035 , - 824 , - 1453 , - 682 , - 751 , - 1660 , - 1169 , - 1518 , - 467 , - 256 , - 885 , - 114 , - 183 , - 1092 , - 601 , - 950 , - 2139 , - 1928 , - 317 , - 1786 , - 1855 , - 524 , - 33 , - 382 , - 1571 , - 1360 , - 1989 , - 1218 , - 1287 , - 2196 , - 1705 , - 2054 , - 1003 , - 792 , - 1421 , - 650 , - 719 , - 1628 , - 1137 , - 1486 , - 435 , - 224 , - 853 , - 82 , - 151 , - 1060 , - 569 , - 918 , - 2107 , - 1896 , - 285 , - 1754 , - 1823 , - 492 , - 1 , - 350 , - 1539 , - 1328 , - 1957 , - 1186 , - 1255 , - 2164 , - 1673 , - 2022 , - 971 , - 760 , - 1389 , - 618 , - 687 , - 1596 , - 1105 , - 1454 , - 403 , - 192 , - 821 , - 50 , - 119 , - 1028 , - 537 , - 886 , - 2075 , - 1864 , - 253 , - 1722 , - 1791 , - 460 , - 2209 , - 318 , - 1507 , - 1296 , - 1925 , - 1154 , - 1223 , - 2132 , - 1641 , - 1990 , - 939 , - 728 , - 1357 , - 586 , - 655 , - 1564 , - 1073 , - 1422 , - 371 , - 160 , - 789 , - 18 , - 87 , - 996 , - 505 , - 854 , - 2043 , - 1832 , - 221 , - 1690 , - 1759 , - 428 , - 2177 , - 286 , - 1475 , - 1264 , - 1893 , - 1122 , - 1191 , - 2100 , - 1609 , - 1958 , - 907 , - 696 , - 1325 , - 554 , - 623 , - 1532 , - 1041 , - 1390 , - 339 , - 128 , - 757 , - 2226 , - 55 , - 964 , - 473 , - 822 , - 2011 , - 1800 , - 189 , - 1658 , - 1727 , - 396 , - 2145 , - 254 , - 1443 , - 1232 , - 1861 , - 1090 , - 1159 , - 2068 , - 1577 , - 1926 , - 875 , - 664 , - 1293 , - 522 , - 591 , - 1500 , - 1009 , - 1358 , - 307 , - 96 , - 725 , - 2194 , - 23 , - 932 , - 441 , - 790 , - 1979 , - 1768 , - 157 , - 1626 , - 1695 , - 364 , - 2113 , - 222 , - 1411 , - 1200 , - 1829 , - 1058 , - 1127 , - 2036 , - 1545 , - 1894 , - 843 , - 632 , - 1261 , - 490 , - 559 , - 1468 , - 977 , - 1326 , - 275 , - 64 , - 693 , - 2162 , - 2231 , - 900 , - 409 , - 758 , - 1947 , - 1736 , - 125 , - 1594 , - 1663 , - 332 , - 2081 , - 190 , - 1379 , - 1168 , - 1797 , - 1026 , - 1095 , - 2004 , - 1513 , - 1862 , - 811 , - 600 , - 1229 , - 458 , - 527 , - 1436 , - 945 , - 1294 , - 243 , - 32 , - 661 , - 2130 , - 2199 , - 868 , - 377 , - 726 , - 1915 , - 1704 , - 93 , - 1562 , - 1631 , - 300 , - 2049 , - 158 , - 1347 , - 1136 , - 1765 , - 994 , - 1063 , - 1972 , - 1481 , - 1830 , - 779 , - 568 , - 1197 , - 426 , - 495 , - 1404 , - 913 , - 1262 , - 211 , - 0 , - 469 , - 1370 , - 399 , - 2164 , - 2057 , - 78 , - 835 , - 2024 , - 1341 , - 1090 , - 1271 , - 1884 , - 625 , - 2102 , - 1707 , - 1744 , - 2213 , - 810 , - 2143 , - 1604 , - 1497 , - 1822 , - 275 , - 1464 , - 781 , - 530 , - 711 , - 1324 , - 65 , - 1542 , - 1147 , - 1184 , - 1653 , - 250 , - 1583 , - 1044 , - 937 , - 1262 , - 2019 , - 904 , - 221 , - 2274 , - 151 , - 764 , - 1809 , - 982 , - 587 , - 624 , - 1093 , - 1994 , - 1023 , - 484 , - 377 , - 702 , - 1459 , - 344 , - 1965 , - 1714 , - 1895 , - 204 , - 1249 , - 422 , - 27 , - 64 , - 533 , - 1434 , - 463 , - 2228 , - 2121 , - 142 , - 899 , - 2088 , - 1405 , - 1154 , - 1335 , - 1948 , - 689 , - 2166 , - 1771 , - 1808 , - 2277 , - 874 , - 2207 , - 1668 , - 1561 , - 1886 , - 339 , - 1528 , - 845 , - 594 , - 775 , - 1388 , - 129 , - 1606 , - 1211 , - 1248 , - 1717 , - 314 , - 1647 , - 1108 , - 1001 , - 1326 , - 2083 , - 968 , - 285 , - 34 , - 215 , - 828 , - 1873 , - 1046 , - 651 , - 688 , - 1157 , - 2058 , - 1087 , - 548 , - 441 , - 766 , - 1523 , - 408 , - 2029 , - 1778 , - 1959 , - 268 , - 1313 , - 486 , - 91 , - 128 , - 597 , - 1498 , - 527 , - 2292 , - 2185 , - 206 , - 963 , - 2152 , - 1469 , - 1218 , - 1399 , - 2012 , - 753 , - 2230 , - 1835 , - 1872 , - 37 , - 938 , - 2271 , - 1732 , - 1625 , - 1950 , - 403 , - 1592 , - 909 , - 658 , - 839 , - 1452 , - 193 , - 1670 , - 1275 , - 1312 , - 1781 , - 378 , - 1711 , - 1172 , - 1065 , - 1390 , - 2147 , - 1032 , - 349 , - 98 , - 279 , - 892 , - 1937 , - 1110 , - 715 , - 752 , - 1221 , - 2122 , - 1151 , - 612 , - 505 , - 830 , - 1587 , - 472 , - 2093 , - 1842 , - 2023 , - 332 , - 1377 , - 550 , - 155 , - 192 , - 661 , - 1562 , - 591 , - 52 , - 2249 , - 270 , - 1027 , - 2216 , - 1533 , - 1282 , - 1463 , - 2076 , - 817 , - 2294 , - 1899 , - 1936 , - 101 , - 1002 , - 31 , - 1796 , - 1689 , - 2014 , - 467 , - 1656 , - 973 , - 722 , - 903 , - 1516 , - 257 , - 1734 , - 1339 , - 1376 , - 1845 , - 442 , - 1775 , - 1236 , - 1129 , - 1454 , - 2211 , - 1096 , - 413 , - 162 , - 343 , - 956 , - 2001 , - 1174 , - 779 , - 816 , - 1285 , - 2186 , - 1215 , - 676 , - 569 , - 894 , - 1651 , - 536 , - 2157 , - 1906 , - 2087 , - 396 , - 1441 , - 614 , - 219 , - 256 , - 725 , - 1626 , - 655 , - 116 , - 9 , - 334 , - 1091 , - 2280 , - 1597 , - 1346 , - 1527 , - 2140 , - 881 , - 54 , - 1963 , - 2000 , - 165 , - 1066 , - 95 , - 1860 , - 1753 , - 2078 , - 531 , - 1720 , - 1037 , - 786 , - 967 , - 1580 , - 321 , - 1798 , - 1403 , - 1440 , - 1909 , - 506 , - 1839 , - 1300 , - 1193 , - 1518 , - 2275 , - 1160 , - 477 , - 226 , - 407 , - 1020 , - 2065 , - 1238 , - 843 , - 880 , - 1349 , - 2250 , - 1279 , - 740 , - 633 , - 958 , - 1715 , - 600 , - 2221 , - 1970 , - 2151 , - 460 , - 1505 , - 678 , - 283 , - 320 , - 789 , - 1690 , - 719 , - 180 , - 73 , - 398 , - 1155 , - 40 , - 1661 , - 1410 , - 1591 , - 2204 , - 945 , - 118 , - 2027 , - 2064 , - 229 , - 1130 , - 159 , - 1924 , - 1817 , - 2142 , - 595 , - 1784 , - 1101 , - 850 , - 1031 , - 1644 , - 385 , - 1862 , - 1467 , - 1504 , - 1973 , - 570 , - 1903 , - 1364 , - 1257 , - 1582 , - 35 , - 1224 , - 541 , - 290 , - 471 , - 1084 , - 2129 , - 1302 , - 907 , - 944 , - 1413 , - 10 , - 1343 , - 804 , - 697 , - 1022 , - 1779 , - 664 , - 2285 , - 2034 , - 2215 , - 524 , - 1569 , - 742 , - 347 , - 384 , - 853 , - 1754 , - 783 , - 244 , - 137 , - 462 , - 1219 , - 104 , - 1725 , - 1474 , - 1655 , - 2268 , - 1009 , - 182 , - 2091 , - 2128 , - 293 , - 1194 , - 223 , - 1988 , - 1881 , - 2206 , - 659 , - 1848 , - 1165 , - 914 , - 1095 , - 1708 , - 449 , - 1926 , - 1531 , - 1568 , - 2037 , - 634 , - 1967 , - 1428 , - 1321 , - 1646 , - 99 , - 1288 , - 605 , - 354 , - 535 , - 1148 , - 2193 , - 1366 , - 971 , - 1008 , - 1477 , - 74 , - 1407 , - 868 , - 761 , - 1086 , - 1843 , - 728 , - 45 , - 2098 , - 2279 , - 588 , - 1633 , - 806 , - 411 , - 448 , - 917 , - 1818 , - 847 , - 308 , - 201 , - 526 , - 1283 , - 168 , - 1789 , - 1538 , - 1719 , - 28 , - 1073 , - 246 , - 2155 , - 2192 , - 357 , - 1258 , - 287 , - 2052 , - 1945 , - 2270 , - 723 , - 1912 , - 1229 , - 978 , - 1159 , - 1772 , - 513 , - 1990 , - 1595 , - 1632 , - 2101 , - 698 , - 2031 , - 1492 , - 1385 , - 1710 , - 163 , - 1352 , - 669 , - 418 , - 599 , - 1212 , - 2257 , - 1430 , - 1035 , - 1072 , - 1541 , - 138 , - 1471 , - 932 , - 825 , - 1150 , - 1907 , - 792 , - 109 , - 2162 , - 39 , - 652 , - 1697 , - 870 , - 475 , - 512 , - 981 , - 1882 , - 911 , - 372 , - 265 , - 590 , - 1347 , - 232 , - 1853 , - 1602 , - 1783 , - 92 , - 1137 , - 310 , - 2219 , - 2256 , - 421 , - 1322 , - 351 , - 2116 , - 2009 , - 30 , - 787 , - 1976 , - 1293 , - 1042 , - 1223 , - 1836 , - 577 , - 2054 , - 1659 , - 1696 , - 2165 , - 762 , - 2095 , - 1556 , - 1449 , - 1774 , - 227 , - 1416 , - 733 , - 482 , - 663 , - 1276 , - 17 , - 1494 , - 1099 , - 1136 , - 1605 , - 202 , - 1535 , - 996 , - 889 , - 1214 , - 1971 , - 856 , - 173 , - 2226 , - 103 , - 716 , - 1761 , - 934 , - 539 , - 576 , - 1045 , - 1946 , - 975 , - 436 , - 329 , - 654 , - 1411 , - 296 , - 1917 , - 1666 , - 1847 , - 156 , - 1201 , - 374 , - 2283 , - 16 , - 485 , - 1386 , - 415 , - 2180 , - 2073 , - 94 , - 851 , - 2040 , - 1357 , - 1106 , - 1287 , - 1900 , - 641 , - 2118 , - 1723 , - 1760 , - 2229 , - 826 , - 2159 , - 1620 , - 1513 , - 1838 , - 291 , - 1480 , - 797 , - 546 , - 727 , - 1340 , - 81 , - 1558 , - 1163 , - 1200 , - 1669 , - 266 , - 1599 , - 1060 , - 953 , - 1278 , - 2035 , - 920 , - 237 , - 2290 , - 167 , - 780 , - 1825 , - 998 , - 603 , - 640 , - 1109 , - 2010 , - 1039 , - 500 , - 393 , - 718 , - 1475 , - 360 , - 1981 , - 1730 , - 1911 , - 220 , - 1265 , - 438 , - 43 , - 80 , - 549 , - 1450 , - 479 , - 2244 , - 2137 , - 158 , - 915 , - 2104 , - 1421 , - 1170 , - 1351 , - 1964 , - 705 , - 2182 , - 1787 , - 1824 , - 2293 , - 890 , - 2223 , - 1684 , - 1577 , - 1902 , - 355 , - 1544 , - 861 , - 610 , - 791 , - 1404 , - 145 , - 1622 , - 1227 , - 1264 , - 1733 , - 330 , - 1663 , - 1124 , - 1017 , - 1342 , - 2099 , - 984 , - 301 , - 50 , - 231 , - 844 , - 1889 , - 1062 , - 667 , - 704 , - 1173 , - 2074 , - 1103 , - 564 , - 457 , - 782 , - 1539 , - 424 , - 2045 , - 1794 , - 1975 , - 284 , - 1329 , - 502 , - 107 , - 144 , - 613 , - 1514 , - 543 , - 4 , - 2201 , - 222 , - 979 , - 2168 , - 1485 , - 1234 , - 1415 , - 2028 , - 769 , - 2246 , - 1851 , - 1888 , - 53 , - 954 , - 2287 , - 1748 , - 1641 , - 1966 , - 419 , - 1608 , - 925 , - 674 , - 855 , - 1468 , - 209 , - 1686 , - 1291 , - 1328 , - 1797 , - 394 , - 1727 , - 1188 , - 1081 , - 1406 , - 2163 , - 1048 , - 365 , - 114 , - 295 , - 908 , - 1953 , - 1126 , - 731 , - 768 , - 1237 , - 2138 , - 1167 , - 628 , - 521 , - 846 , - 1603 , - 488 , - 2109 , - 1858 , - 2039 , - 348 , - 1393 , - 566 , - 171 , - 208 , - 677 , - 1578 , - 607 , - 68 , - 2265 , - 286 , - 1043 , - 2232 , - 1549 , - 1298 , - 1479 , - 2092 , - 833 , - 6 , - 1915 , - 1952 , - 117 , - 1018 , - 47 , - 1812 , - 1705 , - 2030 , - 483 , - 1672 , - 989 , - 738 , - 919 , - 1532 , - 273 , - 1750 , - 1355 , - 1392 , - 1861 , - 458 , - 1791 , - 1252 , - 1145 , - 1470 , - 2227 , - 1112 , - 429 , - 178 , - 359 , - 972 , - 2017 , - 1190 , - 795 , - 832 , - 1301 , - 2202 , - 1231 , - 692 , - 585 , - 910 , - 1667 , - 552 , - 2173 , - 1922 , - 2103 , - 412 , - 1457 , - 630 , - 235 , - 272 , - 741 , - 1642 , - 671 , - 132 , - 25 , - 350 , - 1107 , - 2296 , - 1613 , - 1362 , - 1543 , - 2156 , - 897 , - 70 , - 1979 , - 2016 , - 181 , - 1082 , - 111 , - 1876 , - 1769 , - 2094 , - 547 , - 1736 , - 1053 , - 802 , - 983 , - 1596 , - 337 , - 1814 , - 1419 , - 1456 , - 1925 , - 522 , - 1855 , - 1316 , - 1209 , - 1534 , - 2291 , - 1176 , - 493 , - 242 , - 423 , - 1036 , - 2081 , - 1254 , - 859 , - 896 , - 1365 , - 2266 , - 1295 , - 756 , - 649 , - 974 , - 1731 , - 616 , - 2237 , - 1986 , - 2167 , - 476 , - 1521 , - 694 , - 299 , - 336 , - 805 , - 1706 , - 735 , - 196 , - 89 , - 414 , - 1171 , - 56 , - 1677 , - 1426 , - 1607 , - 2220 , - 961 , - 134 , - 2043 , - 2080 , - 245 , - 1146 , - 175 , - 1940 , - 1833 , - 2158 , - 611 , - 1800 , - 1117 , - 866 , - 1047 , - 1660 , - 401 , - 1878 , - 1483 , - 1520 , - 1989 , - 586 , - 1919 , - 1380 , - 1273 , - 1598 , - 51 , - 1240 , - 557 , - 306 , - 487 , - 1100 , - 2145 , - 1318 , - 923 , - 960 , - 1429 , - 26 , - 1359 , - 820 , - 713 , - 1038 , - 1795 , - 680 , - 2301 , - 2050 , - 2231 , - 540 , - 1585 , - 758 , - 363 , - 400 , - 869 , - 1770 , - 799 , - 260 , - 153 , - 478 , - 1235 , - 120 , - 1741 , - 1490 , - 1671 , - 2284 , - 1025 , - 198 , - 2107 , - 2144 , - 309 , - 1210 , - 239 , - 2004 , - 1897 , - 2222 , - 675 , - 1864 , - 1181 , - 930 , - 1111 , - 1724 , - 465 , - 1942 , - 1547 , - 1584 , - 2053 , - 650 , - 1983 , - 1444 , - 1337 , - 1662 , - 115 , - 1304 , - 621 , - 370 , - 551 , - 1164 , - 2209 , - 1382 , - 987 , - 1024 , - 1493 , - 90 , - 1423 , - 884 , - 777 , - 1102 , - 1859 , - 744 , - 61 , - 2114 , - 2295 , - 604 , - 1649 , - 822 , - 427 , - 464 , - 933 , - 1834 , - 863 , - 324 , - 217 , - 542 , - 1299 , - 184 , - 1805 , - 1554 , - 1735 , - 44 , - 1089 , - 262 , - 2171 , - 2208 , - 373 , - 1274 , - 303 , - 2068 , - 1961 , - 2286 , - 739 , - 1928 , - 1245 , - 994 , - 1175 , - 1788 , - 529 , - 2006 , - 1611 , - 1648 , - 2117 , - 714 , - 2047 , - 1508 , - 1401 , - 1726 , - 179 , - 1368 , - 685 , - 434 , - 615 , - 1228 , - 2273 , - 1446 , - 1051 , - 1088 , - 1557 , - 154 , - 1487 , - 948 , - 841 , - 1166 , - 1923 , - 808 , - 125 , - 2178 , - 55 , - 668 , - 1713 , - 886 , - 491 , - 528 , - 997 , - 1898 , - 927 , - 388 , - 281 , - 606 , - 1363 , - 248 , - 1869 , - 1618 , - 1799 , - 108 , - 1153 , - 326 , - 2235 , - 2272 , - 437 , - 1338 , - 367 , - 2132 , - 2025 , - 46 , - 803 , - 1992 , - 1309 , - 1058 , - 1239 , - 1852 , - 593 , - 2070 , - 1675 , - 1712 , - 2181 , - 778 , - 2111 , - 1572 , - 1465 , - 1790 , - 243 , - 1432 , - 749 , - 498 , - 679 , - 1292 , - 33 , - 1510 , - 1115 , - 1152 , - 1621 , - 218 , - 1551 , - 1012 , - 905 , - 1230 , - 1987 , - 872 , - 189 , - 2242 , - 119 , - 732 , - 1777 , - 950 , - 555 , - 592 , - 1061 , - 1962 , - 991 , - 452 , - 345 , - 670 , - 1427 , - 312 , - 1933 , - 1682 , - 1863 , - 172 , - 1217 , - 390 , - 2299 , - 32 , - 501 , - 1402 , - 431 , - 2196 , - 2089 , - 110 , - 867 , - 2056 , - 1373 , - 1122 , - 1303 , - 1916 , - 657 , - 2134 , - 1739 , - 1776 , - 2245 , - 842 , - 2175 , - 1636 , - 1529 , - 1854 , - 307 , - 1496 , - 813 , - 562 , - 743 , - 1356 , - 97 , - 1574 , - 1179 , - 1216 , - 1685 , - 282 , - 1615 , - 1076 , - 969 , - 1294 , - 2051 , - 936 , - 253 , - 2 , - 183 , - 796 , - 1841 , - 1014 , - 619 , - 656 , - 1125 , - 2026 , - 1055 , - 516 , - 409 , - 734 , - 1491 , - 376 , - 1997 , - 1746 , - 1927 , - 236 , - 1281 , - 454 , - 59 , - 96 , - 565 , - 1466 , - 495 , - 2260 , - 2153 , - 174 , - 931 , - 2120 , - 1437 , - 1186 , - 1367 , - 1980 , - 721 , - 2198 , - 1803 , - 1840 , - 5 , - 906 , - 2239 , - 1700 , - 1593 , - 1918 , - 371 , - 1560 , - 877 , - 626 , - 807 , - 1420 , - 161 , - 1638 , - 1243 , - 1280 , - 1749 , - 346 , - 1679 , - 1140 , - 1033 , - 1358 , - 2115 , - 1000 , - 317 , - 66 , - 247 , - 860 , - 1905 , - 1078 , - 683 , - 720 , - 1189 , - 2090 , - 1119 , - 580 , - 473 , - 798 , - 1555 , - 440 , - 2061 , - 1810 , - 1991 , - 300 , - 1345 , - 518 , - 123 , - 160 , - 629 , - 1530 , - 559 , - 20 , - 2217 , - 238 , - 995 , - 2184 , - 1501 , - 1250 , - 1431 , - 2044 , - 785 , - 2262 , - 1867 , - 1904 , - 69 , - 970 , - 2303 , - 1764 , - 1657 , - 1982 , - 435 , - 1624 , - 941 , - 690 , - 871 , - 1484 , - 225 , - 1702 , - 1307 , - 1344 , - 1813 , - 410 , - 1743 , - 1204 , - 1097 , - 1422 , - 2179 , - 1064 , - 381 , - 130 , - 311 , - 924 , - 1969 , - 1142 , - 747 , - 784 , - 1253 , - 2154 , - 1183 , - 644 , - 537 , - 862 , - 1619 , - 504 , - 2125 , - 1874 , - 2055 , - 364 , - 1409 , - 582 , - 187 , - 224 , - 693 , - 1594 , - 623 , - 84 , - 2281 , - 302 , - 1059 , - 2248 , - 1565 , - 1314 , - 1495 , - 2108 , - 849 , - 22 , - 1931 , - 1968 , - 133 , - 1034 , - 63 , - 1828 , - 1721 , - 2046 , - 499 , - 1688 , - 1005 , - 754 , - 935 , - 1548 , - 289 , - 1766 , - 1371 , - 1408 , - 1877 , - 474 , - 1807 , - 1268 , - 1161 , - 1486 , - 2243 , - 1128 , - 445 , - 194 , - 375 , - 988 , - 2033 , - 1206 , - 811 , - 848 , - 1317 , - 2218 , - 1247 , - 708 , - 601 , - 926 , - 1683 , - 568 , - 2189 , - 1938 , - 2119 , - 428 , - 1473 , - 646 , - 251 , - 288 , - 757 , - 1658 , - 687 , - 148 , - 41 , - 366 , - 1123 , - 8 , - 1629 , - 1378 , - 1559 , - 2172 , - 913 , - 86 , - 1995 , - 2032 , - 197 , - 1098 , - 127 , - 1892 , - 1785 , - 2110 , - 563 , - 1752 , - 1069 , - 818 , - 999 , - 1612 , - 353 , - 1830 , - 1435 , - 1472 , - 1941 , - 538 , - 1871 , - 1332 , - 1225 , - 1550 , - 3 , - 1192 , - 509 , - 258 , - 439 , - 1052 , - 2097 , - 1270 , - 875 , - 912 , - 1381 , - 2282 , - 1311 , - 772 , - 665 , - 990 , - 1747 , - 632 , - 2253 , - 2002 , - 2183 , - 492 , - 1537 , - 710 , - 315 , - 352 , - 821 , - 1722 , - 751 , - 212 , - 105 , - 430 , - 1187 , - 72 , - 1693 , - 1442 , - 1623 , - 2236 , - 977 , - 150 , - 2059 , - 2096 , - 261 , - 1162 , - 191 , - 1956 , - 1849 , - 2174 , - 627 , - 1816 , - 1133 , - 882 , - 1063 , - 1676 , - 417 , - 1894 , - 1499 , - 1536 , - 2005 , - 602 , - 1935 , - 1396 , - 1289 , - 1614 , - 67 , - 1256 , - 573 , - 322 , - 503 , - 1116 , - 2161 , - 1334 , - 939 , - 976 , - 1445 , - 42 , - 1375 , - 836 , - 729 , - 1054 , - 1811 , - 696 , - 13 , - 2066 , - 2247 , - 556 , - 1601 , - 774 , - 379 , - 416 , - 885 , - 1786 , - 815 , - 276 , - 169 , - 494 , - 1251 , - 136 , - 1757 , - 1506 , - 1687 , - 2300 , - 1041 , - 214 , - 2123 , - 2160 , - 325 , - 1226 , - 255 , - 2020 , - 1913 , - 2238 , - 691 , - 1880 , - 1197 , - 946 , - 1127 , - 1740 , - 481 , - 1958 , - 1563 , - 1600 , - 2069 , - 666 , - 1999 , - 1460 , - 1353 , - 1678 , - 131 , - 1320 , - 637 , - 386 , - 567 , - 1180 , - 2225 , - 1398 , - 1003 , - 1040 , - 1509 , - 106 , - 1439 , - 900 , - 793 , - 1118 , - 1875 , - 760 , - 77 , - 2130 , - 7 , - 620 , - 1665 , - 838 , - 443 , - 480 , - 949 , - 1850 , - 879 , - 340 , - 233 , - 558 , - 1315 , - 200 , - 1821 , - 1570 , - 1751 , - 60 , - 1105 , - 278 , - 2187 , - 2224 , - 389 , - 1290 , - 319 , - 2084 , - 1977 , - 2302 , - 755 , - 1944 , - 1261 , - 1010 , - 1191 , - 1804 , - 545 , - 2022 , - 1627 , - 1664 , - 2133 , - 730 , - 2063 , - 1524 , - 1417 , - 1742 , - 195 , - 1384 , - 701 , - 450 , - 631 , - 1244 , - 2289 , - 1462 , - 1067 , - 1104 , - 1573 , - 170 , - 1503 , - 964 , - 857 , - 1182 , - 1939 , - 824 , - 141 , - 2194 , - 71 , - 684 , - 1729 , - 902 , - 507 , - 544 , - 1013 , - 1914 , - 943 , - 404 , - 297 , - 622 , - 1379 , - 264 , - 1885 , - 1634 , - 1815 , - 124 , - 1169 , - 342 , - 2251 , - 2288 , - 453 , - 1354 , - 383 , - 2148 , - 2041 , - 62 , - 819 , - 2008 , - 1325 , - 1074 , - 1255 , - 1868 , - 609 , - 2086 , - 1691 , - 1728 , - 2197 , - 794 , - 2127 , - 1588 , - 1481 , - 1806 , - 259 , - 1448 , - 765 , - 514 , - 695 , - 1308 , - 49 , - 1526 , - 1131 , - 1168 , - 1637 , - 234 , - 1567 , - 1028 , - 921 , - 1246 , - 2003 , - 888 , - 205 , - 2258 , - 135 , - 748 , - 1793 , - 966 , - 571 , - 608 , - 1077 , - 1978 , - 1007 , - 468 , - 361 , - 686 , - 1443 , - 328 , - 1949 , - 1698 , - 1879 , - 188 , - 1233 , - 406 , - 11 , - 48 , - 517 , - 1418 , - 447 , - 2212 , - 2105 , - 126 , - 883 , - 2072 , - 1389 , - 1138 , - 1319 , - 1932 , - 673 , - 2150 , - 1755 , - 1792 , - 2261 , - 858 , - 2191 , - 1652 , - 1545 , - 1870 , - 323 , - 1512 , - 829 , - 578 , - 759 , - 1372 , - 113 , - 1590 , - 1195 , - 1232 , - 1701 , - 298 , - 1631 , - 1092 , - 985 , - 1310 , - 2067 , - 952 , - 269 , - 18 , - 199 , - 812 , - 1857 , - 1030 , - 635 , - 672 , - 1141 , - 2042 , - 1071 , - 532 , - 425 , - 750 , - 1507 , - 392 , - 2013 , - 1762 , - 1943 , - 252 , - 1297 , - 470 , - 75 , - 112 , - 581 , - 1482 , - 511 , - 2276 , - 2169 , - 190 , - 947 , - 2136 , - 1453 , - 1202 , - 1383 , - 1996 , - 737 , - 2214 , - 1819 , - 1856 , - 21 , - 922 , - 2255 , - 1716 , - 1609 , - 1934 , - 387 , - 1576 , - 893 , - 642 , - 823 , - 1436 , - 177 , - 1654 , - 1259 , - 1296 , - 1765 , - 362 , - 1695 , - 1156 , - 1049 , - 1374 , - 2131 , - 1016 , - 333 , - 82 , - 263 , - 876 , - 1921 , - 1094 , - 699 , - 736 , - 1205 , - 2106 , - 1135 , - 596 , - 489 , - 814 , - 1571 , - 456 , - 2077 , - 1826 , - 2007 , - 316 , - 1361 , - 534 , - 139 , - 176 , - 645 , - 1546 , - 575 , - 36 , - 2233 , - 254 , - 1011 , - 2200 , - 1517 , - 1266 , - 1447 , - 2060 , - 801 , - 2278 , - 1883 , - 1920 , - 85 , - 986 , - 15 , - 1780 , - 1673 , - 1998 , - 451 , - 1640 , - 957 , - 706 , - 887 , - 1500 , - 241 , - 1718 , - 1323 , - 1360 , - 1829 , - 426 , - 1759 , - 1220 , - 1113 , - 1438 , - 2195 , - 1080 , - 397 , - 146 , - 327 , - 940 , - 1985 , - 1158 , - 763 , - 800 , - 1269 , - 2170 , - 1199 , - 660 , - 553 , - 878 , - 1635 , - 520 , - 2141 , - 1890 , - 2071 , - 380 , - 1425 , - 598 , - 203 , - 240 , - 709 , - 1610 , - 639 , - 100 , - 2297 , - 318 , - 1075 , - 2264 , - 1581 , - 1330 , - 1511 , - 2124 , - 865 , - 38 , - 1947 , - 1984 , - 149 , - 1050 , - 79 , - 1844 , - 1737 , - 2062 , - 515 , - 1704 , - 1021 , - 770 , - 951 , - 1564 , - 305 , - 1782 , - 1387 , - 1424 , - 1893 , - 490 , - 1823 , - 1284 , - 1177 , - 1502 , - 2259 , - 1144 , - 461 , - 210 , - 391 , - 1004 , - 2049 , - 1222 , - 827 , - 864 , - 1333 , - 2234 , - 1263 , - 724 , - 617 , - 942 , - 1699 , - 584 , - 2205 , - 1954 , - 2135 , - 444 , - 1489 , - 662 , - 267 , - 304 , - 773 , - 1674 , - 703 , - 164 , - 57 , - 382 , - 1139 , - 24 , - 1645 , - 1394 , - 1575 , - 2188 , - 929 , - 102 , - 2011 , - 2048 , - 213 , - 1114 , - 143 , - 1908 , - 1801 , - 2126 , - 579 , - 1768 , - 1085 , - 834 , - 1015 , - 1628 , - 369 , - 1846 , - 1451 , - 1488 , - 1957 , - 554 , - 1887 , - 1348 , - 1241 , - 1566 , - 19 , - 1208 , - 525 , - 274 , - 455 , - 1068 , - 2113 , - 1286 , - 891 , - 928 , - 1397 , - 2298 , - 1327 , - 788 , - 681 , - 1006 , - 1763 , - 648 , - 2269 , - 2018 , - 2199 , - 508 , - 1553 , - 726 , - 331 , - 368 , - 837 , - 1738 , - 767 , - 228 , - 121 , - 446 , - 1203 , - 88 , - 1709 , - 1458 , - 1639 , - 2252 , - 993 , - 166 , - 2075 , - 2112 , - 277 , - 1178 , - 207 , - 1972 , - 1865 , - 2190 , - 643 , - 1832 , - 1149 , - 898 , - 1079 , - 1692 , - 433 , - 1910 , - 1515 , - 1552 , - 2021 , - 618 , - 1951 , - 1412 , - 1305 , - 1630 , - 83 , - 1272 , - 589 , - 338 , - 519 , - 1132 , - 2177 , - 1350 , - 955 , - 992 , - 1461 , - 58 , - 1391 , - 852 , - 745 , - 1070 , - 1827 , - 712 , - 29 , - 2082 , - 2263 , - 572 , - 1617 , - 790 , - 395 , - 432 , - 901 , - 1802 , - 831 , - 292 , - 185 , - 510 , - 1267 , - 152 , - 1773 , - 1522 , - 1703 , - 12 , - 1057 , - 230 , - 2139 , - 2176 , - 341 , - 1242 , - 271 , - 2036 , - 1929 , - 2254 , - 707 , - 1896 , - 1213 , - 962 , - 1143 , - 1756 , - 497 , - 1974 , - 1579 , - 1616 , - 2085 , - 682 , - 2015 , - 1476 , - 1369 , - 1694 , - 147 , - 1336 , - 653 , - 402 , - 583 , - 1196 , - 2241 , - 1414 , - 1019 , - 1056 , - 1525 , - 122 , - 1455 , - 916 , - 809 , - 1134 , - 1891 , - 776 , - 93 , - 2146 , - 23 , - 636 , - 1681 , - 854 , - 459 , - 496 , - 965 , - 1866 , - 895 , - 356 , - 249 , - 574 , - 1331 , - 216 , - 1837 , - 1586 , - 1767 , - 76 , - 1121 , - 294 , - 2203 , - 2240 , - 405 , - 1306 , - 335 , - 2100 , - 1993 , - 14 , - 771 , - 1960 , - 1277 , - 1026 , - 1207 , - 1820 , - 561 , - 2038 , - 1643 , - 1680 , - 2149 , - 746 , - 2079 , - 1540 , - 1433 , - 1758 , - 211 , - 1400 , - 717 , - 466 , - 647 , - 1260 , - 1 , - 1478 , - 1083 , - 1120 , - 1589 , - 186 , - 1519 , - 980 , - 873 , - 1198 , - 1955 , - 840 , - 157 , - 2210 , - 87 , - 700 , - 1745 , - 918 , - 523 , - 560 , - 1029 , - 1930 , - 959 , - 420 , - 313 , - 638 , - 1395 , - 280 , - 1901 , - 1650 , - 1831 , - 140 , - 1185 , - 358 , - 2267 , - 0 , - 811 , - 142 , - 361 , - 1468 , - 1095 , - 1610 , - 645 , - 568 , - 1379 , - 710 , - 929 , - 2036 , - 1663 , - 2178 , - 1213 , - 1136 , - 1947 , - 1278 , - 1497 , - 236 , - 2231 , - 378 , - 1781 , - 1704 , - 147 , - 1846 , - 2065 , - 804 , - 431 , - 946 , - 2349 , - 2272 , - 715 , - 46 , - 265 , - 1372 , - 999 , - 1514 , - 549 , - 472 , - 1283 , - 614 , - 833 , - 1940 , - 1567 , - 2082 , - 1117 , - 1040 , - 1851 , - 1182 , - 1401 , - 140 , - 2135 , - 282 , - 1685 , - 1608 , - 51 , - 1750 , - 1969 , - 708 , - 335 , - 850 , - 2253 , - 2176 , - 619 , - 2318 , - 169 , - 1276 , - 903 , - 1418 , - 453 , - 376 , - 1187 , - 518 , - 737 , - 1844 , - 1471 , - 1986 , - 1021 , - 944 , - 1755 , - 1086 , - 1305 , - 44 , - 2039 , - 186 , - 1589 , - 1512 , - 2323 , - 1654 , - 1873 , - 612 , - 239 , - 754 , - 2157 , - 2080 , - 523 , - 2222 , - 73 , - 1180 , - 807 , - 1322 , - 357 , - 280 , - 1091 , - 422 , - 641 , - 1748 , - 1375 , - 1890 , - 925 , - 848 , - 1659 , - 990 , - 1209 , - 2316 , - 1943 , - 90 , - 1493 , - 1416 , - 2227 , - 1558 , - 1777 , - 516 , - 143 , - 658 , - 2061 , - 1984 , - 427 , - 2126 , - 2345 , - 1084 , - 711 , - 1226 , - 261 , - 184 , - 995 , - 326 , - 545 , - 1652 , - 1279 , - 1794 , - 829 , - 752 , - 1563 , - 894 , - 1113 , - 2220 , - 1847 , - 2362 , - 1397 , - 1320 , - 2131 , - 1462 , - 1681 , - 420 , - 47 , - 562 , - 1965 , - 1888 , - 331 , - 2030 , - 2249 , - 988 , - 615 , - 1130 , - 165 , - 88 , - 899 , - 230 , - 449 , - 1556 , - 1183 , - 1698 , - 733 , - 656 , - 1467 , - 798 , - 1017 , - 2124 , - 1751 , - 2266 , - 1301 , - 1224 , - 2035 , - 1366 , - 1585 , - 324 , - 2319 , - 466 , - 1869 , - 1792 , - 235 , - 1934 , - 2153 , - 892 , - 519 , - 1034 , - 69 , - 2360 , - 803 , - 134 , - 353 , - 1460 , - 1087 , - 1602 , - 637 , - 560 , - 1371 , - 702 , - 921 , - 2028 , - 1655 , - 2170 , - 1205 , - 1128 , - 1939 , - 1270 , - 1489 , - 228 , - 2223 , - 370 , - 1773 , - 1696 , - 139 , - 1838 , - 2057 , - 796 , - 423 , - 938 , - 2341 , - 2264 , - 707 , - 38 , - 257 , - 1364 , - 991 , - 1506 , - 541 , - 464 , - 1275 , - 606 , - 825 , - 1932 , - 1559 , - 2074 , - 1109 , - 1032 , - 1843 , - 1174 , - 1393 , - 132 , - 2127 , - 274 , - 1677 , - 1600 , - 43 , - 1742 , - 1961 , - 700 , - 327 , - 842 , - 2245 , - 2168 , - 611 , - 2310 , - 161 , - 1268 , - 895 , - 1410 , - 445 , - 368 , - 1179 , - 510 , - 729 , - 1836 , - 1463 , - 1978 , - 1013 , - 936 , - 1747 , - 1078 , - 1297 , - 36 , - 2031 , - 178 , - 1581 , - 1504 , - 2315 , - 1646 , - 1865 , - 604 , - 231 , - 746 , - 2149 , - 2072 , - 515 , - 2214 , - 65 , - 1172 , - 799 , - 1314 , - 349 , - 272 , - 1083 , - 414 , - 633 , - 1740 , - 1367 , - 1882 , - 917 , - 840 , - 1651 , - 982 , - 1201 , - 2308 , - 1935 , - 82 , - 1485 , - 1408 , - 2219 , - 1550 , - 1769 , - 508 , - 135 , - 650 , - 2053 , - 1976 , - 419 , - 2118 , - 2337 , - 1076 , - 703 , - 1218 , - 253 , - 176 , - 987 , - 318 , - 537 , - 1644 , - 1271 , - 1786 , - 821 , - 744 , - 1555 , - 886 , - 1105 , - 2212 , - 1839 , - 2354 , - 1389 , - 1312 , - 2123 , - 1454 , - 1673 , - 412 , - 39 , - 554 , - 1957 , - 1880 , - 323 , - 2022 , - 2241 , - 980 , - 607 , - 1122 , - 157 , - 80 , - 891 , - 222 , - 441 , - 1548 , - 1175 , - 1690 , - 725 , - 648 , - 1459 , - 790 , - 1009 , - 2116 , - 1743 , - 2258 , - 1293 , - 1216 , - 2027 , - 1358 , - 1577 , - 316 , - 2311 , - 458 , - 1861 , - 1784 , - 227 , - 1926 , - 2145 , - 884 , - 511 , - 1026 , - 61 , - 2352 , - 795 , - 126 , - 345 , - 1452 , - 1079 , - 1594 , - 629 , - 552 , - 1363 , - 694 , - 913 , - 2020 , - 1647 , - 2162 , - 1197 , - 1120 , - 1931 , - 1262 , - 1481 , - 220 , - 2215 , - 362 , - 1765 , - 1688 , - 131 , - 1830 , - 2049 , - 788 , - 415 , - 930 , - 2333 , - 2256 , - 699 , - 30 , - 249 , - 1356 , - 983 , - 1498 , - 533 , - 456 , - 1267 , - 598 , - 817 , - 1924 , - 1551 , - 2066 , - 1101 , - 1024 , - 1835 , - 1166 , - 1385 , - 124 , - 2119 , - 266 , - 1669 , - 1592 , - 35 , - 1734 , - 1953 , - 692 , - 319 , - 834 , - 2237 , - 2160 , - 603 , - 2302 , - 153 , - 1260 , - 887 , - 1402 , - 437 , - 360 , - 1171 , - 502 , - 721 , - 1828 , - 1455 , - 1970 , - 1005 , - 928 , - 1739 , - 1070 , - 1289 , - 28 , - 2023 , - 170 , - 1573 , - 1496 , - 2307 , - 1638 , - 1857 , - 596 , - 223 , - 738 , - 2141 , - 2064 , - 507 , - 2206 , - 57 , - 1164 , - 791 , - 1306 , - 341 , - 264 , - 1075 , - 406 , - 625 , - 1732 , - 1359 , - 1874 , - 909 , - 832 , - 1643 , - 974 , - 1193 , - 2300 , - 1927 , - 74 , - 1477 , - 1400 , - 2211 , - 1542 , - 1761 , - 500 , - 127 , - 642 , - 2045 , - 1968 , - 411 , - 2110 , - 2329 , - 1068 , - 695 , - 1210 , - 245 , - 168 , - 979 , - 310 , - 529 , - 1636 , - 1263 , - 1778 , - 813 , - 736 , - 1547 , - 878 , - 1097 , - 2204 , - 1831 , - 2346 , - 1381 , - 1304 , - 2115 , - 1446 , - 1665 , - 404 , - 31 , - 546 , - 1949 , - 1872 , - 315 , - 2014 , - 2233 , - 972 , - 599 , - 1114 , - 149 , - 72 , - 883 , - 214 , - 433 , - 1540 , - 1167 , - 1682 , - 717 , - 640 , - 1451 , - 782 , - 1001 , - 2108 , - 1735 , - 2250 , - 1285 , - 1208 , - 2019 , - 1350 , - 1569 , - 308 , - 2303 , - 450 , - 1853 , - 1776 , - 219 , - 1918 , - 2137 , - 876 , - 503 , - 1018 , - 53 , - 2344 , - 787 , - 118 , - 337 , - 1444 , - 1071 , - 1586 , - 621 , - 544 , - 1355 , - 686 , - 905 , - 2012 , - 1639 , - 2154 , - 1189 , - 1112 , - 1923 , - 1254 , - 1473 , - 212 , - 2207 , - 354 , - 1757 , - 1680 , - 123 , - 1822 , - 2041 , - 780 , - 407 , - 922 , - 2325 , - 2248 , - 691 , - 22 , - 241 , - 1348 , - 975 , - 1490 , - 525 , - 448 , - 1259 , - 590 , - 809 , - 1916 , - 1543 , - 2058 , - 1093 , - 1016 , - 1827 , - 1158 , - 1377 , - 116 , - 2111 , - 258 , - 1661 , - 1584 , - 27 , - 1726 , - 1945 , - 684 , - 311 , - 826 , - 2229 , - 2152 , - 595 , - 2294 , - 145 , - 1252 , - 879 , - 1394 , - 429 , - 352 , - 1163 , - 494 , - 713 , - 1820 , - 1447 , - 1962 , - 997 , - 920 , - 1731 , - 1062 , - 1281 , - 20 , - 2015 , - 162 , - 1565 , - 1488 , - 2299 , - 1630 , - 1849 , - 588 , - 215 , - 730 , - 2133 , - 2056 , - 499 , - 2198 , - 49 , - 1156 , - 783 , - 1298 , - 333 , - 256 , - 1067 , - 398 , - 617 , - 1724 , - 1351 , - 1866 , - 901 , - 824 , - 1635 , - 966 , - 1185 , - 2292 , - 1919 , - 66 , - 1469 , - 1392 , - 2203 , - 1534 , - 1753 , - 492 , - 119 , - 634 , - 2037 , - 1960 , - 403 , - 2102 , - 2321 , - 1060 , - 687 , - 1202 , - 237 , - 160 , - 971 , - 302 , - 521 , - 1628 , - 1255 , - 1770 , - 805 , - 728 , - 1539 , - 870 , - 1089 , - 2196 , - 1823 , - 2338 , - 1373 , - 1296 , - 2107 , - 1438 , - 1657 , - 396 , - 23 , - 538 , - 1941 , - 1864 , - 307 , - 2006 , - 2225 , - 964 , - 591 , - 1106 , - 141 , - 64 , - 875 , - 206 , - 425 , - 1532 , - 1159 , - 1674 , - 709 , - 632 , - 1443 , - 774 , - 993 , - 2100 , - 1727 , - 2242 , - 1277 , - 1200 , - 2011 , - 1342 , - 1561 , - 300 , - 2295 , - 442 , - 1845 , - 1768 , - 211 , - 1910 , - 2129 , - 868 , - 495 , - 1010 , - 45 , - 2336 , - 779 , - 110 , - 329 , - 1436 , - 1063 , - 1578 , - 613 , - 536 , - 1347 , - 678 , - 897 , - 2004 , - 1631 , - 2146 , - 1181 , - 1104 , - 1915 , - 1246 , - 1465 , - 204 , - 2199 , - 346 , - 1749 , - 1672 , - 115 , - 1814 , - 2033 , - 772 , - 399 , - 914 , - 2317 , - 2240 , - 683 , - 14 , - 233 , - 1340 , - 967 , - 1482 , - 517 , - 440 , - 1251 , - 582 , - 801 , - 1908 , - 1535 , - 2050 , - 1085 , - 1008 , - 1819 , - 1150 , - 1369 , - 108 , - 2103 , - 250 , - 1653 , - 1576 , - 19 , - 1718 , - 1937 , - 676 , - 303 , - 818 , - 2221 , - 2144 , - 587 , - 2286 , - 137 , - 1244 , - 871 , - 1386 , - 421 , - 344 , - 1155 , - 486 , - 705 , - 1812 , - 1439 , - 1954 , - 989 , - 912 , - 1723 , - 1054 , - 1273 , - 12 , - 2007 , - 154 , - 1557 , - 1480 , - 2291 , - 1622 , - 1841 , - 580 , - 207 , - 722 , - 2125 , - 2048 , - 491 , - 2190 , - 41 , - 1148 , - 775 , - 1290 , - 325 , - 248 , - 1059 , - 390 , - 609 , - 1716 , - 1343 , - 1858 , - 893 , - 816 , - 1627 , - 958 , - 1177 , - 2284 , - 1911 , - 58 , - 1461 , - 1384 , - 2195 , - 1526 , - 1745 , - 484 , - 111 , - 626 , - 2029 , - 1952 , - 395 , - 2094 , - 2313 , - 1052 , - 679 , - 1194 , - 229 , - 152 , - 963 , - 294 , - 513 , - 1620 , - 1247 , - 1762 , - 797 , - 720 , - 1531 , - 862 , - 1081 , - 2188 , - 1815 , - 2330 , - 1365 , - 1288 , - 2099 , - 1430 , - 1649 , - 388 , - 15 , - 530 , - 1933 , - 1856 , - 299 , - 1998 , - 2217 , - 956 , - 583 , - 1098 , - 133 , - 56 , - 867 , - 198 , - 417 , - 1524 , - 1151 , - 1666 , - 701 , - 624 , - 1435 , - 766 , - 985 , - 2092 , - 1719 , - 2234 , - 1269 , - 1192 , - 2003 , - 1334 , - 1553 , - 292 , - 2287 , - 434 , - 1837 , - 1760 , - 203 , - 1902 , - 2121 , - 860 , - 487 , - 1002 , - 37 , - 2328 , - 771 , - 102 , - 321 , - 1428 , - 1055 , - 1570 , - 605 , - 528 , - 1339 , - 670 , - 889 , - 1996 , - 1623 , - 2138 , - 1173 , - 1096 , - 1907 , - 1238 , - 1457 , - 196 , - 2191 , - 338 , - 1741 , - 1664 , - 107 , - 1806 , - 2025 , - 764 , - 391 , - 906 , - 2309 , - 2232 , - 675 , - 6 , - 225 , - 1332 , - 959 , - 1474 , - 509 , - 432 , - 1243 , - 574 , - 793 , - 1900 , - 1527 , - 2042 , - 1077 , - 1000 , - 1811 , - 1142 , - 1361 , - 100 , - 2095 , - 242 , - 1645 , - 1568 , - 11 , - 1710 , - 1929 , - 668 , - 295 , - 810 , - 2213 , - 2136 , - 579 , - 2278 , - 129 , - 1236 , - 863 , - 1378 , - 413 , - 336 , - 1147 , - 478 , - 697 , - 1804 , - 1431 , - 1946 , - 981 , - 904 , - 1715 , - 1046 , - 1265 , - 4 , - 1999 , - 146 , - 1549 , - 1472 , - 2283 , - 1614 , - 1833 , - 572 , - 199 , - 714 , - 2117 , - 2040 , - 483 , - 2182 , - 33 , - 1140 , - 767 , - 1282 , - 317 , - 240 , - 1051 , - 382 , - 601 , - 1708 , - 1335 , - 1850 , - 885 , - 808 , - 1619 , - 950 , - 1169 , - 2276 , - 1903 , - 50 , - 1453 , - 1376 , - 2187 , - 1518 , - 1737 , - 476 , - 103 , - 618 , - 2021 , - 1944 , - 387 , - 2086 , - 2305 , - 1044 , - 671 , - 1186 , - 221 , - 144 , - 955 , - 286 , - 505 , - 1612 , - 1239 , - 1754 , - 789 , - 712 , - 1523 , - 854 , - 1073 , - 2180 , - 1807 , - 2322 , - 1357 , - 1280 , - 2091 , - 1422 , - 1641 , - 380 , - 7 , - 522 , - 1925 , - 1848 , - 291 , - 1990 , - 2209 , - 948 , - 575 , - 1090 , - 125 , - 48 , - 859 , - 190 , - 409 , - 1516 , - 1143 , - 1658 , - 693 , - 616 , - 1427 , - 758 , - 977 , - 2084 , - 1711 , - 2226 , - 1261 , - 1184 , - 1995 , - 1326 , - 1545 , - 284 , - 2279 , - 426 , - 1829 , - 1752 , - 195 , - 1894 , - 2113 , - 852 , - 479 , - 994 , - 29 , - 2320 , - 763 , - 94 , - 313 , - 1420 , - 1047 , - 1562 , - 597 , - 520 , - 1331 , - 662 , - 881 , - 1988 , - 1615 , - 2130 , - 1165 , - 1088 , - 1899 , - 1230 , - 1449 , - 188 , - 2183 , - 330 , - 1733 , - 1656 , - 99 , - 1798 , - 2017 , - 756 , - 383 , - 898 , - 2301 , - 2224 , - 667 , - 2366 , - 217 , - 1324 , - 951 , - 1466 , - 501 , - 424 , - 1235 , - 566 , - 785 , - 1892 , - 1519 , - 2034 , - 1069 , - 992 , - 1803 , - 1134 , - 1353 , - 92 , - 2087 , - 234 , - 1637 , - 1560 , - 3 , - 1702 , - 1921 , - 660 , - 287 , - 802 , - 2205 , - 2128 , - 571 , - 2270 , - 121 , - 1228 , - 855 , - 1370 , - 405 , - 328 , - 1139 , - 470 , - 689 , - 1796 , - 1423 , - 1938 , - 973 , - 896 , - 1707 , - 1038 , - 1257 , - 2364 , - 1991 , - 138 , - 1541 , - 1464 , - 2275 , - 1606 , - 1825 , - 564 , - 191 , - 706 , - 2109 , - 2032 , - 475 , - 2174 , - 25 , - 1132 , - 759 , - 1274 , - 309 , - 232 , - 1043 , - 374 , - 593 , - 1700 , - 1327 , - 1842 , - 877 , - 800 , - 1611 , - 942 , - 1161 , - 2268 , - 1895 , - 42 , - 1445 , - 1368 , - 2179 , - 1510 , - 1729 , - 468 , - 95 , - 610 , - 2013 , - 1936 , - 379 , - 2078 , - 2297 , - 1036 , - 663 , - 1178 , - 213 , - 136 , - 947 , - 278 , - 497 , - 1604 , - 1231 , - 1746 , - 781 , - 704 , - 1515 , - 846 , - 1065 , - 2172 , - 1799 , - 2314 , - 1349 , - 1272 , - 2083 , - 1414 , - 1633 , - 372 , - 2367 , - 514 , - 1917 , - 1840 , - 283 , - 1982 , - 2201 , - 940 , - 567 , - 1082 , - 117 , - 40 , - 851 , - 182 , - 401 , - 1508 , - 1135 , - 1650 , - 685 , - 608 , - 1419 , - 750 , - 969 , - 2076 , - 1703 , - 2218 , - 1253 , - 1176 , - 1987 , - 1318 , - 1537 , - 276 , - 2271 , - 418 , - 1821 , - 1744 , - 187 , - 1886 , - 2105 , - 844 , - 471 , - 986 , - 21 , - 2312 , - 755 , - 86 , - 305 , - 1412 , - 1039 , - 1554 , - 589 , - 512 , - 1323 , - 654 , - 873 , - 1980 , - 1607 , - 2122 , - 1157 , - 1080 , - 1891 , - 1222 , - 1441 , - 180 , - 2175 , - 322 , - 1725 , - 1648 , - 91 , - 1790 , - 2009 , - 748 , - 375 , - 890 , - 2293 , - 2216 , - 659 , - 2358 , - 209 , - 1316 , - 943 , - 1458 , - 493 , - 416 , - 1227 , - 558 , - 777 , - 1884 , - 1511 , - 2026 , - 1061 , - 984 , - 1795 , - 1126 , - 1345 , - 84 , - 2079 , - 226 , - 1629 , - 1552 , - 2363 , - 1694 , - 1913 , - 652 , - 279 , - 794 , - 2197 , - 2120 , - 563 , - 2262 , - 113 , - 1220 , - 847 , - 1362 , - 397 , - 320 , - 1131 , - 462 , - 681 , - 1788 , - 1415 , - 1930 , - 965 , - 888 , - 1699 , - 1030 , - 1249 , - 2356 , - 1983 , - 130 , - 1533 , - 1456 , - 2267 , - 1598 , - 1817 , - 556 , - 183 , - 698 , - 2101 , - 2024 , - 467 , - 2166 , - 17 , - 1124 , - 751 , - 1266 , - 301 , - 224 , - 1035 , - 366 , - 585 , - 1692 , - 1319 , - 1834 , - 869 , - 792 , - 1603 , - 934 , - 1153 , - 2260 , - 1887 , - 34 , - 1437 , - 1360 , - 2171 , - 1502 , - 1721 , - 460 , - 87 , - 602 , - 2005 , - 1928 , - 371 , - 2070 , - 2289 , - 1028 , - 655 , - 1170 , - 205 , - 128 , - 939 , - 270 , - 489 , - 1596 , - 1223 , - 1738 , - 773 , - 696 , - 1507 , - 838 , - 1057 , - 2164 , - 1791 , - 2306 , - 1341 , - 1264 , - 2075 , - 1406 , - 1625 , - 364 , - 2359 , - 506 , - 1909 , - 1832 , - 275 , - 1974 , - 2193 , - 932 , - 559 , - 1074 , - 109 , - 32 , - 843 , - 174 , - 393 , - 1500 , - 1127 , - 1642 , - 677 , - 600 , - 1411 , - 742 , - 961 , - 2068 , - 1695 , - 2210 , - 1245 , - 1168 , - 1979 , - 1310 , - 1529 , - 268 , - 2263 , - 410 , - 1813 , - 1736 , - 179 , - 1878 , - 2097 , - 836 , - 463 , - 978 , - 13 , - 2304 , - 747 , - 78 , - 297 , - 1404 , - 1031 , - 1546 , - 581 , - 504 , - 1315 , - 646 , - 865 , - 1972 , - 1599 , - 2114 , - 1149 , - 1072 , - 1883 , - 1214 , - 1433 , - 172 , - 2167 , - 314 , - 1717 , - 1640 , - 83 , - 1782 , - 2001 , - 740 , - 367 , - 882 , - 2285 , - 2208 , - 651 , - 2350 , - 201 , - 1308 , - 935 , - 1450 , - 485 , - 408 , - 1219 , - 550 , - 769 , - 1876 , - 1503 , - 2018 , - 1053 , - 976 , - 1787 , - 1118 , - 1337 , - 76 , - 2071 , - 218 , - 1621 , - 1544 , - 2355 , - 1686 , - 1905 , - 644 , - 271 , - 786 , - 2189 , - 2112 , - 555 , - 2254 , - 105 , - 1212 , - 839 , - 1354 , - 389 , - 312 , - 1123 , - 454 , - 673 , - 1780 , - 1407 , - 1922 , - 957 , - 880 , - 1691 , - 1022 , - 1241 , - 2348 , - 1975 , - 122 , - 1525 , - 1448 , - 2259 , - 1590 , - 1809 , - 548 , - 175 , - 690 , - 2093 , - 2016 , - 459 , - 2158 , - 9 , - 1116 , - 743 , - 1258 , - 293 , - 216 , - 1027 , - 358 , - 577 , - 1684 , - 1311 , - 1826 , - 861 , - 784 , - 1595 , - 926 , - 1145 , - 2252 , - 1879 , - 26 , - 1429 , - 1352 , - 2163 , - 1494 , - 1713 , - 452 , - 79 , - 594 , - 1997 , - 1920 , - 363 , - 2062 , - 2281 , - 1020 , - 647 , - 1162 , - 197 , - 120 , - 931 , - 262 , - 481 , - 1588 , - 1215 , - 1730 , - 765 , - 688 , - 1499 , - 830 , - 1049 , - 2156 , - 1783 , - 2298 , - 1333 , - 1256 , - 2067 , - 1398 , - 1617 , - 356 , - 2351 , - 498 , - 1901 , - 1824 , - 267 , - 1966 , - 2185 , - 924 , - 551 , - 1066 , - 101 , - 24 , - 835 , - 166 , - 385 , - 1492 , - 1119 , - 1634 , - 669 , - 592 , - 1403 , - 734 , - 953 , - 2060 , - 1687 , - 2202 , - 1237 , - 1160 , - 1971 , - 1302 , - 1521 , - 260 , - 2255 , - 402 , - 1805 , - 1728 , - 171 , - 1870 , - 2089 , - 828 , - 455 , - 970 , - 5 , - 2296 , - 739 , - 70 , - 289 , - 1396 , - 1023 , - 1538 , - 573 , - 496 , - 1307 , - 638 , - 857 , - 1964 , - 1591 , - 2106 , - 1141 , - 1064 , - 1875 , - 1206 , - 1425 , - 164 , - 2159 , - 306 , - 1709 , - 1632 , - 75 , - 1774 , - 1993 , - 732 , - 359 , - 874 , - 2277 , - 2200 , - 643 , - 2342 , - 193 , - 1300 , - 927 , - 1442 , - 477 , - 400 , - 1211 , - 542 , - 761 , - 1868 , - 1495 , - 2010 , - 1045 , - 968 , - 1779 , - 1110 , - 1329 , - 68 , - 2063 , - 210 , - 1613 , - 1536 , - 2347 , - 1678 , - 1897 , - 636 , - 263 , - 778 , - 2181 , - 2104 , - 547 , - 2246 , - 97 , - 1204 , - 831 , - 1346 , - 381 , - 304 , - 1115 , - 446 , - 665 , - 1772 , - 1399 , - 1914 , - 949 , - 872 , - 1683 , - 1014 , - 1233 , - 2340 , - 1967 , - 114 , - 1517 , - 1440 , - 2251 , - 1582 , - 1801 , - 540 , - 167 , - 682 , - 2085 , - 2008 , - 451 , - 2150 , - 1 , - 1108 , - 735 , - 1250 , - 285 , - 208 , - 1019 , - 350 , - 569 , - 1676 , - 1303 , - 1818 , - 853 , - 776 , - 1587 , - 918 , - 1137 , - 2244 , - 1871 , - 18 , - 1421 , - 1344 , - 2155 , - 1486 , - 1705 , - 444 , - 71 , - 586 , - 1989 , - 1912 , - 355 , - 2054 , - 2273 , - 1012 , - 639 , - 1154 , - 189 , - 112 , - 923 , - 254 , - 473 , - 1580 , - 1207 , - 1722 , - 757 , - 680 , - 1491 , - 822 , - 1041 , - 2148 , - 1775 , - 2290 , - 1325 , - 1248 , - 2059 , - 1390 , - 1609 , - 348 , - 2343 , - 490 , - 1893 , - 1816 , - 259 , - 1958 , - 2177 , - 916 , - 543 , - 1058 , - 93 , - 16 , - 827 , - 158 , - 377 , - 1484 , - 1111 , - 1626 , - 661 , - 584 , - 1395 , - 726 , - 945 , - 2052 , - 1679 , - 2194 , - 1229 , - 1152 , - 1963 , - 1294 , - 1513 , - 252 , - 2247 , - 394 , - 1797 , - 1720 , - 163 , - 1862 , - 2081 , - 820 , - 447 , - 962 , - 2365 , - 2288 , - 731 , - 62 , - 281 , - 1388 , - 1015 , - 1530 , - 565 , - 488 , - 1299 , - 630 , - 849 , - 1956 , - 1583 , - 2098 , - 1133 , - 1056 , - 1867 , - 1198 , - 1417 , - 156 , - 2151 , - 298 , - 1701 , - 1624 , - 67 , - 1766 , - 1985 , - 724 , - 351 , - 866 , - 2269 , - 2192 , - 635 , - 2334 , - 185 , - 1292 , - 919 , - 1434 , - 469 , - 392 , - 1203 , - 534 , - 753 , - 1860 , - 1487 , - 2002 , - 1037 , - 960 , - 1771 , - 1102 , - 1321 , - 60 , - 2055 , - 202 , - 1605 , - 1528 , - 2339 , - 1670 , - 1889 , - 628 , - 255 , - 770 , - 2173 , - 2096 , - 539 , - 2238 , - 89 , - 1196 , - 823 , - 1338 , - 373 , - 296 , - 1107 , - 438 , - 657 , - 1764 , - 1391 , - 1906 , - 941 , - 864 , - 1675 , - 1006 , - 1225 , - 2332 , - 1959 , - 106 , - 1509 , - 1432 , - 2243 , - 1574 , - 1793 , - 532 , - 159 , - 674 , - 2077 , - 2000 , - 443 , - 2142 , - 2361 , - 1100 , - 727 , - 1242 , - 277 , - 200 , - 1011 , - 342 , - 561 , - 1668 , - 1295 , - 1810 , - 845 , - 768 , - 1579 , - 910 , - 1129 , - 2236 , - 1863 , - 10 , - 1413 , - 1336 , - 2147 , - 1478 , - 1697 , - 436 , - 63 , - 578 , - 1981 , - 1904 , - 347 , - 2046 , - 2265 , - 1004 , - 631 , - 1146 , - 181 , - 104 , - 915 , - 246 , - 465 , - 1572 , - 1199 , - 1714 , - 749 , - 672 , - 1483 , - 814 , - 1033 , - 2140 , - 1767 , - 2282 , - 1317 , - 1240 , - 2051 , - 1382 , - 1601 , - 340 , - 2335 , - 482 , - 1885 , - 1808 , - 251 , - 1950 , - 2169 , - 908 , - 535 , - 1050 , - 85 , - 8 , - 819 , - 150 , - 369 , - 1476 , - 1103 , - 1618 , - 653 , - 576 , - 1387 , - 718 , - 937 , - 2044 , - 1671 , - 2186 , - 1221 , - 1144 , - 1955 , - 1286 , - 1505 , - 244 , - 2239 , - 386 , - 1789 , - 1712 , - 155 , - 1854 , - 2073 , - 812 , - 439 , - 954 , - 2357 , - 2280 , - 723 , - 54 , - 273 , - 1380 , - 1007 , - 1522 , - 557 , - 480 , - 1291 , - 622 , - 841 , - 1948 , - 1575 , - 2090 , - 1125 , - 1048 , - 1859 , - 1190 , - 1409 , - 148 , - 2143 , - 290 , - 1693 , - 1616 , - 59 , - 1758 , - 1977 , - 716 , - 343 , - 858 , - 2261 , - 2184 , - 627 , - 2326 , - 177 , - 1284 , - 911 , - 1426 , - 461 , - 384 , - 1195 , - 526 , - 745 , - 1852 , - 1479 , - 1994 , - 1029 , - 952 , - 1763 , - 1094 , - 1313 , - 52 , - 2047 , - 194 , - 1597 , - 1520 , - 2331 , - 1662 , - 1881 , - 620 , - 247 , - 762 , - 2165 , - 2088 , - 531 , - 2230 , - 81 , - 1188 , - 815 , - 1330 , - 365 , - 288 , - 1099 , - 430 , - 649 , - 1756 , - 1383 , - 1898 , - 933 , - 856 , - 1667 , - 998 , - 1217 , - 2324 , - 1951 , - 98 , - 1501 , - 1424 , - 2235 , - 1566 , - 1785 , - 524 , - 151 , - 666 , - 2069 , - 1992 , - 435 , - 2134 , - 2353 , - 1092 , - 719 , - 1234 , - 269 , - 192 , - 1003 , - 334 , - 553 , - 1660 , - 1287 , - 1802 , - 837 , - 760 , - 1571 , - 902 , - 1121 , - 2228 , - 1855 , - 2 , - 1405 , - 1328 , - 2139 , - 1470 , - 1689 , - 428 , - 55 , - 570 , - 1973 , - 1896 , - 339 , - 2038 , - 2257 , - 996 , - 623 , - 1138 , - 173 , - 96 , - 907 , - 238 , - 457 , - 1564 , - 1191 , - 1706 , - 741 , - 664 , - 1475 , - 806 , - 1025 , - 2132 , - 1759 , - 2274 , - 1309 , - 1232 , - 2043 , - 1374 , - 1593 , - 332 , - 2327 , - 474 , - 1877 , - 1800 , - 243 , - 1942 , - 2161 , - 900 , - 527 , - 1042 , - 77 , - 0 , - 721 , - 2354 , - 35 , - 1060 , - 565 , - 982 , - 2311 , - 2120 , - 409 , - 2042 , - 2155 , - 748 , - 253 , - 670 , - 1999 , - 1808 , - 97 , - 1730 , - 1843 , - 436 , - 2373 , - 358 , - 1687 , - 1496 , - 2217 , - 1418 , - 1531 , - 124 , - 2061 , - 46 , - 1375 , - 1184 , - 1905 , - 1106 , - 1219 , - 2244 , - 1749 , - 2166 , - 1063 , - 872 , - 1593 , - 794 , - 907 , - 1932 , - 1437 , - 1854 , - 751 , - 560 , - 1281 , - 482 , - 595 , - 1620 , - 1125 , - 1542 , - 439 , - 248 , - 969 , - 170 , - 283 , - 1308 , - 813 , - 1230 , - 127 , - 2368 , - 657 , - 2290 , - 2403 , - 996 , - 501 , - 918 , - 2247 , - 2056 , - 345 , - 1978 , - 2091 , - 684 , - 189 , - 606 , - 1935 , - 1744 , - 33 , - 1666 , - 1779 , - 372 , - 2309 , - 294 , - 1623 , - 1432 , - 2153 , - 1354 , - 1467 , - 60 , - 1997 , - 2414 , - 1311 , - 1120 , - 1841 , - 1042 , - 1155 , - 2180 , - 1685 , - 2102 , - 999 , - 808 , - 1529 , - 730 , - 843 , - 1868 , - 1373 , - 1790 , - 687 , - 496 , - 1217 , - 418 , - 531 , - 1556 , - 1061 , - 1478 , - 375 , - 184 , - 905 , - 106 , - 219 , - 1244 , - 749 , - 1166 , - 63 , - 2304 , - 593 , - 2226 , - 2339 , - 932 , - 437 , - 854 , - 2183 , - 1992 , - 281 , - 1914 , - 2027 , - 620 , - 125 , - 542 , - 1871 , - 1680 , - 2401 , - 1602 , - 1715 , - 308 , - 2245 , - 230 , - 1559 , - 1368 , - 2089 , - 1290 , - 1403 , - 2428 , - 1933 , - 2350 , - 1247 , - 1056 , - 1777 , - 978 , - 1091 , - 2116 , - 1621 , - 2038 , - 935 , - 744 , - 1465 , - 666 , - 779 , - 1804 , - 1309 , - 1726 , - 623 , - 432 , - 1153 , - 354 , - 467 , - 1492 , - 997 , - 1414 , - 311 , - 120 , - 841 , - 42 , - 155 , - 1180 , - 685 , - 1102 , - 2431 , - 2240 , - 529 , - 2162 , - 2275 , - 868 , - 373 , - 790 , - 2119 , - 1928 , - 217 , - 1850 , - 1963 , - 556 , - 61 , - 478 , - 1807 , - 1616 , - 2337 , - 1538 , - 1651 , - 244 , - 2181 , - 166 , - 1495 , - 1304 , - 2025 , - 1226 , - 1339 , - 2364 , - 1869 , - 2286 , - 1183 , - 992 , - 1713 , - 914 , - 1027 , - 2052 , - 1557 , - 1974 , - 871 , - 680 , - 1401 , - 602 , - 715 , - 1740 , - 1245 , - 1662 , - 559 , - 368 , - 1089 , - 290 , - 403 , - 1428 , - 933 , - 1350 , - 247 , - 56 , - 777 , - 2410 , - 91 , - 1116 , - 621 , - 1038 , - 2367 , - 2176 , - 465 , - 2098 , - 2211 , - 804 , - 309 , - 726 , - 2055 , - 1864 , - 153 , - 1786 , - 1899 , - 492 , - 2429 , - 414 , - 1743 , - 1552 , - 2273 , - 1474 , - 1587 , - 180 , - 2117 , - 102 , - 1431 , - 1240 , - 1961 , - 1162 , - 1275 , - 2300 , - 1805 , - 2222 , - 1119 , - 928 , - 1649 , - 850 , - 963 , - 1988 , - 1493 , - 1910 , - 807 , - 616 , - 1337 , - 538 , - 651 , - 1676 , - 1181 , - 1598 , - 495 , - 304 , - 1025 , - 226 , - 339 , - 1364 , - 869 , - 1286 , - 183 , - 2424 , - 713 , - 2346 , - 27 , - 1052 , - 557 , - 974 , - 2303 , - 2112 , - 401 , - 2034 , - 2147 , - 740 , - 245 , - 662 , - 1991 , - 1800 , - 89 , - 1722 , - 1835 , - 428 , - 2365 , - 350 , - 1679 , - 1488 , - 2209 , - 1410 , - 1523 , - 116 , - 2053 , - 38 , - 1367 , - 1176 , - 1897 , - 1098 , - 1211 , - 2236 , - 1741 , - 2158 , - 1055 , - 864 , - 1585 , - 786 , - 899 , - 1924 , - 1429 , - 1846 , - 743 , - 552 , - 1273 , - 474 , - 587 , - 1612 , - 1117 , - 1534 , - 431 , - 240 , - 961 , - 162 , - 275 , - 1300 , - 805 , - 1222 , - 119 , - 2360 , - 649 , - 2282 , - 2395 , - 988 , - 493 , - 910 , - 2239 , - 2048 , - 337 , - 1970 , - 2083 , - 676 , - 181 , - 598 , - 1927 , - 1736 , - 25 , - 1658 , - 1771 , - 364 , - 2301 , - 286 , - 1615 , - 1424 , - 2145 , - 1346 , - 1459 , - 52 , - 1989 , - 2406 , - 1303 , - 1112 , - 1833 , - 1034 , - 1147 , - 2172 , - 1677 , - 2094 , - 991 , - 800 , - 1521 , - 722 , - 835 , - 1860 , - 1365 , - 1782 , - 679 , - 488 , - 1209 , - 410 , - 523 , - 1548 , - 1053 , - 1470 , - 367 , - 176 , - 897 , - 98 , - 211 , - 1236 , - 741 , - 1158 , - 55 , - 2296 , - 585 , - 2218 , - 2331 , - 924 , - 429 , - 846 , - 2175 , - 1984 , - 273 , - 1906 , - 2019 , - 612 , - 117 , - 534 , - 1863 , - 1672 , - 2393 , - 1594 , - 1707 , - 300 , - 2237 , - 222 , - 1551 , - 1360 , - 2081 , - 1282 , - 1395 , - 2420 , - 1925 , - 2342 , - 1239 , - 1048 , - 1769 , - 970 , - 1083 , - 2108 , - 1613 , - 2030 , - 927 , - 736 , - 1457 , - 658 , - 771 , - 1796 , - 1301 , - 1718 , - 615 , - 424 , - 1145 , - 346 , - 459 , - 1484 , - 989 , - 1406 , - 303 , - 112 , - 833 , - 34 , - 147 , - 1172 , - 677 , - 1094 , - 2423 , - 2232 , - 521 , - 2154 , - 2267 , - 860 , - 365 , - 782 , - 2111 , - 1920 , - 209 , - 1842 , - 1955 , - 548 , - 53 , - 470 , - 1799 , - 1608 , - 2329 , - 1530 , - 1643 , - 236 , - 2173 , - 158 , - 1487 , - 1296 , - 2017 , - 1218 , - 1331 , - 2356 , - 1861 , - 2278 , - 1175 , - 984 , - 1705 , - 906 , - 1019 , - 2044 , - 1549 , - 1966 , - 863 , - 672 , - 1393 , - 594 , - 707 , - 1732 , - 1237 , - 1654 , - 551 , - 360 , - 1081 , - 282 , - 395 , - 1420 , - 925 , - 1342 , - 239 , - 48 , - 769 , - 2402 , - 83 , - 1108 , - 613 , - 1030 , - 2359 , - 2168 , - 457 , - 2090 , - 2203 , - 796 , - 301 , - 718 , - 2047 , - 1856 , - 145 , - 1778 , - 1891 , - 484 , - 2421 , - 406 , - 1735 , - 1544 , - 2265 , - 1466 , - 1579 , - 172 , - 2109 , - 94 , - 1423 , - 1232 , - 1953 , - 1154 , - 1267 , - 2292 , - 1797 , - 2214 , - 1111 , - 920 , - 1641 , - 842 , - 955 , - 1980 , - 1485 , - 1902 , - 799 , - 608 , - 1329 , - 530 , - 643 , - 1668 , - 1173 , - 1590 , - 487 , - 296 , - 1017 , - 218 , - 331 , - 1356 , - 861 , - 1278 , - 175 , - 2416 , - 705 , - 2338 , - 19 , - 1044 , - 549 , - 966 , - 2295 , - 2104 , - 393 , - 2026 , - 2139 , - 732 , - 237 , - 654 , - 1983 , - 1792 , - 81 , - 1714 , - 1827 , - 420 , - 2357 , - 342 , - 1671 , - 1480 , - 2201 , - 1402 , - 1515 , - 108 , - 2045 , - 30 , - 1359 , - 1168 , - 1889 , - 1090 , - 1203 , - 2228 , - 1733 , - 2150 , - 1047 , - 856 , - 1577 , - 778 , - 891 , - 1916 , - 1421 , - 1838 , - 735 , - 544 , - 1265 , - 466 , - 579 , - 1604 , - 1109 , - 1526 , - 423 , - 232 , - 953 , - 154 , - 267 , - 1292 , - 797 , - 1214 , - 111 , - 2352 , - 641 , - 2274 , - 2387 , - 980 , - 485 , - 902 , - 2231 , - 2040 , - 329 , - 1962 , - 2075 , - 668 , - 173 , - 590 , - 1919 , - 1728 , - 17 , - 1650 , - 1763 , - 356 , - 2293 , - 278 , - 1607 , - 1416 , - 2137 , - 1338 , - 1451 , - 44 , - 1981 , - 2398 , - 1295 , - 1104 , - 1825 , - 1026 , - 1139 , - 2164 , - 1669 , - 2086 , - 983 , - 792 , - 1513 , - 714 , - 827 , - 1852 , - 1357 , - 1774 , - 671 , - 480 , - 1201 , - 402 , - 515 , - 1540 , - 1045 , - 1462 , - 359 , - 168 , - 889 , - 90 , - 203 , - 1228 , - 733 , - 1150 , - 47 , - 2288 , - 577 , - 2210 , - 2323 , - 916 , - 421 , - 838 , - 2167 , - 1976 , - 265 , - 1898 , - 2011 , - 604 , - 109 , - 526 , - 1855 , - 1664 , - 2385 , - 1586 , - 1699 , - 292 , - 2229 , - 214 , - 1543 , - 1352 , - 2073 , - 1274 , - 1387 , - 2412 , - 1917 , - 2334 , - 1231 , - 1040 , - 1761 , - 962 , - 1075 , - 2100 , - 1605 , - 2022 , - 919 , - 728 , - 1449 , - 650 , - 763 , - 1788 , - 1293 , - 1710 , - 607 , - 416 , - 1137 , - 338 , - 451 , - 1476 , - 981 , - 1398 , - 295 , - 104 , - 825 , - 26 , - 139 , - 1164 , - 669 , - 1086 , - 2415 , - 2224 , - 513 , - 2146 , - 2259 , - 852 , - 357 , - 774 , - 2103 , - 1912 , - 201 , - 1834 , - 1947 , - 540 , - 45 , - 462 , - 1791 , - 1600 , - 2321 , - 1522 , - 1635 , - 228 , - 2165 , - 150 , - 1479 , - 1288 , - 2009 , - 1210 , - 1323 , - 2348 , - 1853 , - 2270 , - 1167 , - 976 , - 1697 , - 898 , - 1011 , - 2036 , - 1541 , - 1958 , - 855 , - 664 , - 1385 , - 586 , - 699 , - 1724 , - 1229 , - 1646 , - 543 , - 352 , - 1073 , - 274 , - 387 , - 1412 , - 917 , - 1334 , - 231 , - 40 , - 761 , - 2394 , - 75 , - 1100 , - 605 , - 1022 , - 2351 , - 2160 , - 449 , - 2082 , - 2195 , - 788 , - 293 , - 710 , - 2039 , - 1848 , - 137 , - 1770 , - 1883 , - 476 , - 2413 , - 398 , - 1727 , - 1536 , - 2257 , - 1458 , - 1571 , - 164 , - 2101 , - 86 , - 1415 , - 1224 , - 1945 , - 1146 , - 1259 , - 2284 , - 1789 , - 2206 , - 1103 , - 912 , - 1633 , - 834 , - 947 , - 1972 , - 1477 , - 1894 , - 791 , - 600 , - 1321 , - 522 , - 635 , - 1660 , - 1165 , - 1582 , - 479 , - 288 , - 1009 , - 210 , - 323 , - 1348 , - 853 , - 1270 , - 167 , - 2408 , - 697 , - 2330 , - 11 , - 1036 , - 541 , - 958 , - 2287 , - 2096 , - 385 , - 2018 , - 2131 , - 724 , - 229 , - 646 , - 1975 , - 1784 , - 73 , - 1706 , - 1819 , - 412 , - 2349 , - 334 , - 1663 , - 1472 , - 2193 , - 1394 , - 1507 , - 100 , - 2037 , - 22 , - 1351 , - 1160 , - 1881 , - 1082 , - 1195 , - 2220 , - 1725 , - 2142 , - 1039 , - 848 , - 1569 , - 770 , - 883 , - 1908 , - 1413 , - 1830 , - 727 , - 536 , - 1257 , - 458 , - 571 , - 1596 , - 1101 , - 1518 , - 415 , - 224 , - 945 , - 146 , - 259 , - 1284 , - 789 , - 1206 , - 103 , - 2344 , - 633 , - 2266 , - 2379 , - 972 , - 477 , - 894 , - 2223 , - 2032 , - 321 , - 1954 , - 2067 , - 660 , - 165 , - 582 , - 1911 , - 1720 , - 9 , - 1642 , - 1755 , - 348 , - 2285 , - 270 , - 1599 , - 1408 , - 2129 , - 1330 , - 1443 , - 36 , - 1973 , - 2390 , - 1287 , - 1096 , - 1817 , - 1018 , - 1131 , - 2156 , - 1661 , - 2078 , - 975 , - 784 , - 1505 , - 706 , - 819 , - 1844 , - 1349 , - 1766 , - 663 , - 472 , - 1193 , - 394 , - 507 , - 1532 , - 1037 , - 1454 , - 351 , - 160 , - 881 , - 82 , - 195 , - 1220 , - 725 , - 1142 , - 39 , - 2280 , - 569 , - 2202 , - 2315 , - 908 , - 413 , - 830 , - 2159 , - 1968 , - 257 , - 1890 , - 2003 , - 596 , - 101 , - 518 , - 1847 , - 1656 , - 2377 , - 1578 , - 1691 , - 284 , - 2221 , - 206 , - 1535 , - 1344 , - 2065 , - 1266 , - 1379 , - 2404 , - 1909 , - 2326 , - 1223 , - 1032 , - 1753 , - 954 , - 1067 , - 2092 , - 1597 , - 2014 , - 911 , - 720 , - 1441 , - 642 , - 755 , - 1780 , - 1285 , - 1702 , - 599 , - 408 , - 1129 , - 330 , - 443 , - 1468 , - 973 , - 1390 , - 287 , - 96 , - 817 , - 18 , - 131 , - 1156 , - 661 , - 1078 , - 2407 , - 2216 , - 505 , - 2138 , - 2251 , - 844 , - 349 , - 766 , - 2095 , - 1904 , - 193 , - 1826 , - 1939 , - 532 , - 37 , - 454 , - 1783 , - 1592 , - 2313 , - 1514 , - 1627 , - 220 , - 2157 , - 142 , - 1471 , - 1280 , - 2001 , - 1202 , - 1315 , - 2340 , - 1845 , - 2262 , - 1159 , - 968 , - 1689 , - 890 , - 1003 , - 2028 , - 1533 , - 1950 , - 847 , - 656 , - 1377 , - 578 , - 691 , - 1716 , - 1221 , - 1638 , - 535 , - 344 , - 1065 , - 266 , - 379 , - 1404 , - 909 , - 1326 , - 223 , - 32 , - 753 , - 2386 , - 67 , - 1092 , - 597 , - 1014 , - 2343 , - 2152 , - 441 , - 2074 , - 2187 , - 780 , - 285 , - 702 , - 2031 , - 1840 , - 129 , - 1762 , - 1875 , - 468 , - 2405 , - 390 , - 1719 , - 1528 , - 2249 , - 1450 , - 1563 , - 156 , - 2093 , - 78 , - 1407 , - 1216 , - 1937 , - 1138 , - 1251 , - 2276 , - 1781 , - 2198 , - 1095 , - 904 , - 1625 , - 826 , - 939 , - 1964 , - 1469 , - 1886 , - 783 , - 592 , - 1313 , - 514 , - 627 , - 1652 , - 1157 , - 1574 , - 471 , - 280 , - 1001 , - 202 , - 315 , - 1340 , - 845 , - 1262 , - 159 , - 2400 , - 689 , - 2322 , - 3 , - 1028 , - 533 , - 950 , - 2279 , - 2088 , - 377 , - 2010 , - 2123 , - 716 , - 221 , - 638 , - 1967 , - 1776 , - 65 , - 1698 , - 1811 , - 404 , - 2341 , - 326 , - 1655 , - 1464 , - 2185 , - 1386 , - 1499 , - 92 , - 2029 , - 14 , - 1343 , - 1152 , - 1873 , - 1074 , - 1187 , - 2212 , - 1717 , - 2134 , - 1031 , - 840 , - 1561 , - 762 , - 875 , - 1900 , - 1405 , - 1822 , - 719 , - 528 , - 1249 , - 450 , - 563 , - 1588 , - 1093 , - 1510 , - 407 , - 216 , - 937 , - 138 , - 251 , - 1276 , - 781 , - 1198 , - 95 , - 2336 , - 625 , - 2258 , - 2371 , - 964 , - 469 , - 886 , - 2215 , - 2024 , - 313 , - 1946 , - 2059 , - 652 , - 157 , - 574 , - 1903 , - 1712 , - 1 , - 1634 , - 1747 , - 340 , - 2277 , - 262 , - 1591 , - 1400 , - 2121 , - 1322 , - 1435 , - 28 , - 1965 , - 2382 , - 1279 , - 1088 , - 1809 , - 1010 , - 1123 , - 2148 , - 1653 , - 2070 , - 967 , - 776 , - 1497 , - 698 , - 811 , - 1836 , - 1341 , - 1758 , - 655 , - 464 , - 1185 , - 386 , - 499 , - 1524 , - 1029 , - 1446 , - 343 , - 152 , - 873 , - 74 , - 187 , - 1212 , - 717 , - 1134 , - 31 , - 2272 , - 561 , - 2194 , - 2307 , - 900 , - 405 , - 822 , - 2151 , - 1960 , - 249 , - 1882 , - 1995 , - 588 , - 93 , - 510 , - 1839 , - 1648 , - 2369 , - 1570 , - 1683 , - 276 , - 2213 , - 198 , - 1527 , - 1336 , - 2057 , - 1258 , - 1371 , - 2396 , - 1901 , - 2318 , - 1215 , - 1024 , - 1745 , - 946 , - 1059 , - 2084 , - 1589 , - 2006 , - 903 , - 712 , - 1433 , - 634 , - 747 , - 1772 , - 1277 , - 1694 , - 591 , - 400 , - 1121 , - 322 , - 435 , - 1460 , - 965 , - 1382 , - 279 , - 88 , - 809 , - 10 , - 123 , - 1148 , - 653 , - 1070 , - 2399 , - 2208 , - 497 , - 2130 , - 2243 , - 836 , - 341 , - 758 , - 2087 , - 1896 , - 185 , - 1818 , - 1931 , - 524 , - 29 , - 446 , - 1775 , - 1584 , - 2305 , - 1506 , - 1619 , - 212 , - 2149 , - 134 , - 1463 , - 1272 , - 1993 , - 1194 , - 1307 , - 2332 , - 1837 , - 2254 , - 1151 , - 960 , - 1681 , - 882 , - 995 , - 2020 , - 1525 , - 1942 , - 839 , - 648 , - 1369 , - 570 , - 683 , - 1708 , - 1213 , - 1630 , - 527 , - 336 , - 1057 , - 258 , - 371 , - 1396 , - 901 , - 1318 , - 215 , - 24 , - 745 , - 2378 , - 59 , - 1084 , - 589 , - 1006 , - 2335 , - 2144 , - 433 , - 2066 , - 2179 , - 772 , - 277 , - 694 , - 2023 , - 1832 , - 121 , - 1754 , - 1867 , - 460 , - 2397 , - 382 , - 1711 , - 1520 , - 2241 , - 1442 , - 1555 , - 148 , - 2085 , - 70 , - 1399 , - 1208 , - 1929 , - 1130 , - 1243 , - 2268 , - 1773 , - 2190 , - 1087 , - 896 , - 1617 , - 818 , - 931 , - 1956 , - 1461 , - 1878 , - 775 , - 584 , - 1305 , - 506 , - 619 , - 1644 , - 1149 , - 1566 , - 463 , - 272 , - 993 , - 194 , - 307 , - 1332 , - 837 , - 1254 , - 151 , - 2392 , - 681 , - 2314 , - 2427 , - 1020 , - 525 , - 942 , - 2271 , - 2080 , - 369 , - 2002 , - 2115 , - 708 , - 213 , - 630 , - 1959 , - 1768 , - 57 , - 1690 , - 1803 , - 396 , - 2333 , - 318 , - 1647 , - 1456 , - 2177 , - 1378 , - 1491 , - 84 , - 2021 , - 6 , - 1335 , - 1144 , - 1865 , - 1066 , - 1179 , - 2204 , - 1709 , - 2126 , - 1023 , - 832 , - 1553 , - 754 , - 867 , - 1892 , - 1397 , - 1814 , - 711 , - 520 , - 1241 , - 442 , - 555 , - 1580 , - 1085 , - 1502 , - 399 , - 208 , - 929 , - 130 , - 243 , - 1268 , - 773 , - 1190 , - 87 , - 2328 , - 617 , - 2250 , - 2363 , - 956 , - 461 , - 878 , - 2207 , - 2016 , - 305 , - 1938 , - 2051 , - 644 , - 149 , - 566 , - 1895 , - 1704 , - 2425 , - 1626 , - 1739 , - 332 , - 2269 , - 254 , - 1583 , - 1392 , - 2113 , - 1314 , - 1427 , - 20 , - 1957 , - 2374 , - 1271 , - 1080 , - 1801 , - 1002 , - 1115 , - 2140 , - 1645 , - 2062 , - 959 , - 768 , - 1489 , - 690 , - 803 , - 1828 , - 1333 , - 1750 , - 647 , - 456 , - 1177 , - 378 , - 491 , - 1516 , - 1021 , - 1438 , - 335 , - 144 , - 865 , - 66 , - 179 , - 1204 , - 709 , - 1126 , - 23 , - 2264 , - 553 , - 2186 , - 2299 , - 892 , - 397 , - 814 , - 2143 , - 1952 , - 241 , - 1874 , - 1987 , - 580 , - 85 , - 502 , - 1831 , - 1640 , - 2361 , - 1562 , - 1675 , - 268 , - 2205 , - 190 , - 1519 , - 1328 , - 2049 , - 1250 , - 1363 , - 2388 , - 1893 , - 2310 , - 1207 , - 1016 , - 1737 , - 938 , - 1051 , - 2076 , - 1581 , - 1998 , - 895 , - 704 , - 1425 , - 626 , - 739 , - 1764 , - 1269 , - 1686 , - 583 , - 392 , - 1113 , - 314 , - 427 , - 1452 , - 957 , - 1374 , - 271 , - 80 , - 801 , - 2 , - 115 , - 1140 , - 645 , - 1062 , - 2391 , - 2200 , - 489 , - 2122 , - 2235 , - 828 , - 333 , - 750 , - 2079 , - 1888 , - 177 , - 1810 , - 1923 , - 516 , - 21 , - 438 , - 1767 , - 1576 , - 2297 , - 1498 , - 1611 , - 204 , - 2141 , - 126 , - 1455 , - 1264 , - 1985 , - 1186 , - 1299 , - 2324 , - 1829 , - 2246 , - 1143 , - 952 , - 1673 , - 874 , - 987 , - 2012 , - 1517 , - 1934 , - 831 , - 640 , - 1361 , - 562 , - 675 , - 1700 , - 1205 , - 1622 , - 519 , - 328 , - 1049 , - 250 , - 363 , - 1388 , - 893 , - 1310 , - 207 , - 16 , - 737 , - 2370 , - 51 , - 1076 , - 581 , - 998 , - 2327 , - 2136 , - 425 , - 2058 , - 2171 , - 764 , - 269 , - 686 , - 2015 , - 1824 , - 113 , - 1746 , - 1859 , - 452 , - 2389 , - 374 , - 1703 , - 1512 , - 2233 , - 1434 , - 1547 , - 140 , - 2077 , - 62 , - 1391 , - 1200 , - 1921 , - 1122 , - 1235 , - 2260 , - 1765 , - 2182 , - 1079 , - 888 , - 1609 , - 810 , - 923 , - 1948 , - 1453 , - 1870 , - 767 , - 576 , - 1297 , - 498 , - 611 , - 1636 , - 1141 , - 1558 , - 455 , - 264 , - 985 , - 186 , - 299 , - 1324 , - 829 , - 1246 , - 143 , - 2384 , - 673 , - 2306 , - 2419 , - 1012 , - 517 , - 934 , - 2263 , - 2072 , - 361 , - 1994 , - 2107 , - 700 , - 205 , - 622 , - 1951 , - 1760 , - 49 , - 1682 , - 1795 , - 388 , - 2325 , - 310 , - 1639 , - 1448 , - 2169 , - 1370 , - 1483 , - 76 , - 2013 , - 2430 , - 1327 , - 1136 , - 1857 , - 1058 , - 1171 , - 2196 , - 1701 , - 2118 , - 1015 , - 824 , - 1545 , - 746 , - 859 , - 1884 , - 1389 , - 1806 , - 703 , - 512 , - 1233 , - 434 , - 547 , - 1572 , - 1077 , - 1494 , - 391 , - 200 , - 921 , - 122 , - 235 , - 1260 , - 765 , - 1182 , - 79 , - 2320 , - 609 , - 2242 , - 2355 , - 948 , - 453 , - 870 , - 2199 , - 2008 , - 297 , - 1930 , - 2043 , - 636 , - 141 , - 558 , - 1887 , - 1696 , - 2417 , - 1618 , - 1731 , - 324 , - 2261 , - 246 , - 1575 , - 1384 , - 2105 , - 1306 , - 1419 , - 12 , - 1949 , - 2366 , - 1263 , - 1072 , - 1793 , - 994 , - 1107 , - 2132 , - 1637 , - 2054 , - 951 , - 760 , - 1481 , - 682 , - 795 , - 1820 , - 1325 , - 1742 , - 639 , - 448 , - 1169 , - 370 , - 483 , - 1508 , - 1013 , - 1430 , - 327 , - 136 , - 857 , - 58 , - 171 , - 1196 , - 701 , - 1118 , - 15 , - 2256 , - 545 , - 2178 , - 2291 , - 884 , - 389 , - 806 , - 2135 , - 1944 , - 233 , - 1866 , - 1979 , - 572 , - 77 , - 494 , - 1823 , - 1632 , - 2353 , - 1554 , - 1667 , - 260 , - 2197 , - 182 , - 1511 , - 1320 , - 2041 , - 1242 , - 1355 , - 2380 , - 1885 , - 2302 , - 1199 , - 1008 , - 1729 , - 930 , - 1043 , - 2068 , - 1573 , - 1990 , - 887 , - 696 , - 1417 , - 618 , - 731 , - 1756 , - 1261 , - 1678 , - 575 , - 384 , - 1105 , - 306 , - 419 , - 1444 , - 949 , - 1366 , - 263 , - 72 , - 793 , - 2426 , - 107 , - 1132 , - 637 , - 1054 , - 2383 , - 2192 , - 481 , - 2114 , - 2227 , - 820 , - 325 , - 742 , - 2071 , - 1880 , - 169 , - 1802 , - 1915 , - 508 , - 13 , - 430 , - 1759 , - 1568 , - 2289 , - 1490 , - 1603 , - 196 , - 2133 , - 118 , - 1447 , - 1256 , - 1977 , - 1178 , - 1291 , - 2316 , - 1821 , - 2238 , - 1135 , - 944 , - 1665 , - 866 , - 979 , - 2004 , - 1509 , - 1926 , - 823 , - 632 , - 1353 , - 554 , - 667 , - 1692 , - 1197 , - 1614 , - 511 , - 320 , - 1041 , - 242 , - 355 , - 1380 , - 885 , - 1302 , - 199 , - 8 , - 729 , - 2362 , - 43 , - 1068 , - 573 , - 990 , - 2319 , - 2128 , - 417 , - 2050 , - 2163 , - 756 , - 261 , - 678 , - 2007 , - 1816 , - 105 , - 1738 , - 1851 , - 444 , - 2381 , - 366 , - 1695 , - 1504 , - 2225 , - 1426 , - 1539 , - 132 , - 2069 , - 54 , - 1383 , - 1192 , - 1913 , - 1114 , - 1227 , - 2252 , - 1757 , - 2174 , - 1071 , - 880 , - 1601 , - 802 , - 915 , - 1940 , - 1445 , - 1862 , - 759 , - 568 , - 1289 , - 490 , - 603 , - 1628 , - 1133 , - 1550 , - 447 , - 256 , - 977 , - 178 , - 291 , - 1316 , - 821 , - 1238 , - 135 , - 2376 , - 665 , - 2298 , - 2411 , - 1004 , - 509 , - 926 , - 2255 , - 2064 , - 353 , - 1986 , - 2099 , - 692 , - 197 , - 614 , - 1943 , - 1752 , - 41 , - 1674 , - 1787 , - 380 , - 2317 , - 302 , - 1631 , - 1440 , - 2161 , - 1362 , - 1475 , - 68 , - 2005 , - 2422 , - 1319 , - 1128 , - 1849 , - 1050 , - 1163 , - 2188 , - 1693 , - 2110 , - 1007 , - 816 , - 1537 , - 738 , - 851 , - 1876 , - 1381 , - 1798 , - 695 , - 504 , - 1225 , - 426 , - 539 , - 1564 , - 1069 , - 1486 , - 383 , - 192 , - 913 , - 114 , - 227 , - 1252 , - 757 , - 1174 , - 71 , - 2312 , - 601 , - 2234 , - 2347 , - 940 , - 445 , - 862 , - 2191 , - 2000 , - 289 , - 1922 , - 2035 , - 628 , - 133 , - 550 , - 1879 , - 1688 , - 2409 , - 1610 , - 1723 , - 316 , - 2253 , - 238 , - 1567 , - 1376 , - 2097 , - 1298 , - 1411 , - 4 , - 1941 , - 2358 , - 1255 , - 1064 , - 1785 , - 986 , - 1099 , - 2124 , - 1629 , - 2046 , - 943 , - 752 , - 1473 , - 674 , - 787 , - 1812 , - 1317 , - 1734 , - 631 , - 440 , - 1161 , - 362 , - 475 , - 1500 , - 1005 , - 1422 , - 319 , - 128 , - 849 , - 50 , - 163 , - 1188 , - 693 , - 1110 , - 7 , - 2248 , - 537 , - 2170 , - 2283 , - 876 , - 381 , - 798 , - 2127 , - 1936 , - 225 , - 1858 , - 1971 , - 564 , - 69 , - 486 , - 1815 , - 1624 , - 2345 , - 1546 , - 1659 , - 252 , - 2189 , - 174 , - 1503 , - 1312 , - 2033 , - 1234 , - 1347 , - 2372 , - 1877 , - 2294 , - 1191 , - 1000 , - 1721 , - 922 , - 1035 , - 2060 , - 1565 , - 1982 , - 879 , - 688 , - 1409 , - 610 , - 723 , - 1748 , - 1253 , - 1670 , - 567 , - 376 , - 1097 , - 298 , - 411 , - 1436 , - 941 , - 1358 , - 255 , - 64 , - 785 , - 2418 , - 99 , - 1124 , - 629 , - 1046 , - 2375 , - 2184 , - 473 , - 2106 , - 2219 , - 812 , - 317 , - 734 , - 2063 , - 1872 , - 161 , - 1794 , - 1907 , - 500 , - 5 , - 422 , - 1751 , - 1560 , - 2281 , - 1482 , - 1595 , - 188 , - 2125 , - 110 , - 1439 , - 1248 , - 1969 , - 1170 , - 1283 , - 2308 , - 1813 , - 2230 , - 1127 , - 936 , - 1657 , - 858 , - 971 , - 1996 , - 1501 , - 1918 , - 815 , - 624 , - 1345 , - 546 , - 659 , - 1684 , - 1189 , - 1606 , - 503 , - 312 , - 1033 , - 234 , - 347 , - 1372 , - 877 , - 1294 , - 191 , - 0 , - 649 , - 2234 , - 2259 , - 724 , - 125 , - 462 , - 1735 , - 1448 , - 2097 , - 1186 , - 1211 , - 2172 , - 1573 , - 1910 , - 687 , - 400 , - 1049 , - 138 , - 163 , - 1124 , - 525 , - 862 , - 2135 , - 1848 , - 1 , - 1586 , - 1611 , - 76 , - 1973 , - 2310 , - 1087 , - 800 , - 1449 , - 538 , - 563 , - 1524 , - 925 , - 1262 , - 39 , - 2248 , - 401 , - 1986 , - 2011 , - 476 , - 2373 , - 214 , - 1487 , - 1200 , - 1849 , - 938 , - 963 , - 1924 , - 1325 , - 1662 , - 439 , - 152 , - 801 , - 2386 , - 2411 , - 876 , - 277 , - 614 , - 1887 , - 1600 , - 2249 , - 1338 , - 1363 , - 2324 , - 1725 , - 2062 , - 839 , - 552 , - 1201 , - 290 , - 315 , - 1276 , - 677 , - 1014 , - 2287 , - 2000 , - 153 , - 1738 , - 1763 , - 228 , - 2125 , - 2462 , - 1239 , - 952 , - 1601 , - 690 , - 715 , - 1676 , - 1077 , - 1414 , - 191 , - 2400 , - 553 , - 2138 , - 2163 , - 628 , - 29 , - 366 , - 1639 , - 1352 , - 2001 , - 1090 , - 1115 , - 2076 , - 1477 , - 1814 , - 591 , - 304 , - 953 , - 42 , - 67 , - 1028 , - 429 , - 766 , - 2039 , - 1752 , - 2401 , - 1490 , - 1515 , - 2476 , - 1877 , - 2214 , - 991 , - 704 , - 1353 , - 442 , - 467 , - 1428 , - 829 , - 1166 , - 2439 , - 2152 , - 305 , - 1890 , - 1915 , - 380 , - 2277 , - 118 , - 1391 , - 1104 , - 1753 , - 842 , - 867 , - 1828 , - 1229 , - 1566 , - 343 , - 56 , - 705 , - 2290 , - 2315 , - 780 , - 181 , - 518 , - 1791 , - 1504 , - 2153 , - 1242 , - 1267 , - 2228 , - 1629 , - 1966 , - 743 , - 456 , - 1105 , - 194 , - 219 , - 1180 , - 581 , - 918 , - 2191 , - 1904 , - 57 , - 1642 , - 1667 , - 132 , - 2029 , - 2366 , - 1143 , - 856 , - 1505 , - 594 , - 619 , - 1580 , - 981 , - 1318 , - 95 , - 2304 , - 457 , - 2042 , - 2067 , - 532 , - 2429 , - 270 , - 1543 , - 1256 , - 1905 , - 994 , - 1019 , - 1980 , - 1381 , - 1718 , - 495 , - 208 , - 857 , - 2442 , - 2467 , - 932 , - 333 , - 670 , - 1943 , - 1656 , - 2305 , - 1394 , - 1419 , - 2380 , - 1781 , - 2118 , - 895 , - 608 , - 1257 , - 346 , - 371 , - 1332 , - 733 , - 1070 , - 2343 , - 2056 , - 209 , - 1794 , - 1819 , - 284 , - 2181 , - 22 , - 1295 , - 1008 , - 1657 , - 746 , - 771 , - 1732 , - 1133 , - 1470 , - 247 , - 2456 , - 609 , - 2194 , - 2219 , - 684 , - 85 , - 422 , - 1695 , - 1408 , - 2057 , - 1146 , - 1171 , - 2132 , - 1533 , - 1870 , - 647 , - 360 , - 1009 , - 98 , - 123 , - 1084 , - 485 , - 822 , - 2095 , - 1808 , - 2457 , - 1546 , - 1571 , - 36 , - 1933 , - 2270 , - 1047 , - 760 , - 1409 , - 498 , - 523 , - 1484 , - 885 , - 1222 , - 2495 , - 2208 , - 361 , - 1946 , - 1971 , - 436 , - 2333 , - 174 , - 1447 , - 1160 , - 1809 , - 898 , - 923 , - 1884 , - 1285 , - 1622 , - 399 , - 112 , - 761 , - 2346 , - 2371 , - 836 , - 237 , - 574 , - 1847 , - 1560 , - 2209 , - 1298 , - 1323 , - 2284 , - 1685 , - 2022 , - 799 , - 512 , - 1161 , - 250 , - 275 , - 1236 , - 637 , - 974 , - 2247 , - 1960 , - 113 , - 1698 , - 1723 , - 188 , - 2085 , - 2422 , - 1199 , - 912 , - 1561 , - 650 , - 675 , - 1636 , - 1037 , - 1374 , - 151 , - 2360 , - 513 , - 2098 , - 2123 , - 588 , - 2485 , - 326 , - 1599 , - 1312 , - 1961 , - 1050 , - 1075 , - 2036 , - 1437 , - 1774 , - 551 , - 264 , - 913 , - 2 , - 27 , - 988 , - 389 , - 726 , - 1999 , - 1712 , - 2361 , - 1450 , - 1475 , - 2436 , - 1837 , - 2174 , - 951 , - 664 , - 1313 , - 402 , - 427 , - 1388 , - 789 , - 1126 , - 2399 , - 2112 , - 265 , - 1850 , - 1875 , - 340 , - 2237 , - 78 , - 1351 , - 1064 , - 1713 , - 802 , - 827 , - 1788 , - 1189 , - 1526 , - 303 , - 16 , - 665 , - 2250 , - 2275 , - 740 , - 141 , - 478 , - 1751 , - 1464 , - 2113 , - 1202 , - 1227 , - 2188 , - 1589 , - 1926 , - 703 , - 416 , - 1065 , - 154 , - 179 , - 1140 , - 541 , - 878 , - 2151 , - 1864 , - 17 , - 1602 , - 1627 , - 92 , - 1989 , - 2326 , - 1103 , - 816 , - 1465 , - 554 , - 579 , - 1540 , - 941 , - 1278 , - 55 , - 2264 , - 417 , - 2002 , - 2027 , - 492 , - 2389 , - 230 , - 1503 , - 1216 , - 1865 , - 954 , - 979 , - 1940 , - 1341 , - 1678 , - 455 , - 168 , - 817 , - 2402 , - 2427 , - 892 , - 293 , - 630 , - 1903 , - 1616 , - 2265 , - 1354 , - 1379 , - 2340 , - 1741 , - 2078 , - 855 , - 568 , - 1217 , - 306 , - 331 , - 1292 , - 693 , - 1030 , - 2303 , - 2016 , - 169 , - 1754 , - 1779 , - 244 , - 2141 , - 2478 , - 1255 , - 968 , - 1617 , - 706 , - 731 , - 1692 , - 1093 , - 1430 , - 207 , - 2416 , - 569 , - 2154 , - 2179 , - 644 , - 45 , - 382 , - 1655 , - 1368 , - 2017 , - 1106 , - 1131 , - 2092 , - 1493 , - 1830 , - 607 , - 320 , - 969 , - 58 , - 83 , - 1044 , - 445 , - 782 , - 2055 , - 1768 , - 2417 , - 1506 , - 1531 , - 2492 , - 1893 , - 2230 , - 1007 , - 720 , - 1369 , - 458 , - 483 , - 1444 , - 845 , - 1182 , - 2455 , - 2168 , - 321 , - 1906 , - 1931 , - 396 , - 2293 , - 134 , - 1407 , - 1120 , - 1769 , - 858 , - 883 , - 1844 , - 1245 , - 1582 , - 359 , - 72 , - 721 , - 2306 , - 2331 , - 796 , - 197 , - 534 , - 1807 , - 1520 , - 2169 , - 1258 , - 1283 , - 2244 , - 1645 , - 1982 , - 759 , - 472 , - 1121 , - 210 , - 235 , - 1196 , - 597 , - 934 , - 2207 , - 1920 , - 73 , - 1658 , - 1683 , - 148 , - 2045 , - 2382 , - 1159 , - 872 , - 1521 , - 610 , - 635 , - 1596 , - 997 , - 1334 , - 111 , - 2320 , - 473 , - 2058 , - 2083 , - 548 , - 2445 , - 286 , - 1559 , - 1272 , - 1921 , - 1010 , - 1035 , - 1996 , - 1397 , - 1734 , - 511 , - 224 , - 873 , - 2458 , - 2483 , - 948 , - 349 , - 686 , - 1959 , - 1672 , - 2321 , - 1410 , - 1435 , - 2396 , - 1797 , - 2134 , - 911 , - 624 , - 1273 , - 362 , - 387 , - 1348 , - 749 , - 1086 , - 2359 , - 2072 , - 225 , - 1810 , - 1835 , - 300 , - 2197 , - 38 , - 1311 , - 1024 , - 1673 , - 762 , - 787 , - 1748 , - 1149 , - 1486 , - 263 , - 2472 , - 625 , - 2210 , - 2235 , - 700 , - 101 , - 438 , - 1711 , - 1424 , - 2073 , - 1162 , - 1187 , - 2148 , - 1549 , - 1886 , - 663 , - 376 , - 1025 , - 114 , - 139 , - 1100 , - 501 , - 838 , - 2111 , - 1824 , - 2473 , - 1562 , - 1587 , - 52 , - 1949 , - 2286 , - 1063 , - 776 , - 1425 , - 514 , - 539 , - 1500 , - 901 , - 1238 , - 15 , - 2224 , - 377 , - 1962 , - 1987 , - 452 , - 2349 , - 190 , - 1463 , - 1176 , - 1825 , - 914 , - 939 , - 1900 , - 1301 , - 1638 , - 415 , - 128 , - 777 , - 2362 , - 2387 , - 852 , - 253 , - 590 , - 1863 , - 1576 , - 2225 , - 1314 , - 1339 , - 2300 , - 1701 , - 2038 , - 815 , - 528 , - 1177 , - 266 , - 291 , - 1252 , - 653 , - 990 , - 2263 , - 1976 , - 129 , - 1714 , - 1739 , - 204 , - 2101 , - 2438 , - 1215 , - 928 , - 1577 , - 666 , - 691 , - 1652 , - 1053 , - 1390 , - 167 , - 2376 , - 529 , - 2114 , - 2139 , - 604 , - 5 , - 342 , - 1615 , - 1328 , - 1977 , - 1066 , - 1091 , - 2052 , - 1453 , - 1790 , - 567 , - 280 , - 929 , - 18 , - 43 , - 1004 , - 405 , - 742 , - 2015 , - 1728 , - 2377 , - 1466 , - 1491 , - 2452 , - 1853 , - 2190 , - 967 , - 680 , - 1329 , - 418 , - 443 , - 1404 , - 805 , - 1142 , - 2415 , - 2128 , - 281 , - 1866 , - 1891 , - 356 , - 2253 , - 94 , - 1367 , - 1080 , - 1729 , - 818 , - 843 , - 1804 , - 1205 , - 1542 , - 319 , - 32 , - 681 , - 2266 , - 2291 , - 756 , - 157 , - 494 , - 1767 , - 1480 , - 2129 , - 1218 , - 1243 , - 2204 , - 1605 , - 1942 , - 719 , - 432 , - 1081 , - 170 , - 195 , - 1156 , - 557 , - 894 , - 2167 , - 1880 , - 33 , - 1618 , - 1643 , - 108 , - 2005 , - 2342 , - 1119 , - 832 , - 1481 , - 570 , - 595 , - 1556 , - 957 , - 1294 , - 71 , - 2280 , - 433 , - 2018 , - 2043 , - 508 , - 2405 , - 246 , - 1519 , - 1232 , - 1881 , - 970 , - 995 , - 1956 , - 1357 , - 1694 , - 471 , - 184 , - 833 , - 2418 , - 2443 , - 908 , - 309 , - 646 , - 1919 , - 1632 , - 2281 , - 1370 , - 1395 , - 2356 , - 1757 , - 2094 , - 871 , - 584 , - 1233 , - 322 , - 347 , - 1308 , - 709 , - 1046 , - 2319 , - 2032 , - 185 , - 1770 , - 1795 , - 260 , - 2157 , - 2494 , - 1271 , - 984 , - 1633 , - 722 , - 747 , - 1708 , - 1109 , - 1446 , - 223 , - 2432 , - 585 , - 2170 , - 2195 , - 660 , - 61 , - 398 , - 1671 , - 1384 , - 2033 , - 1122 , - 1147 , - 2108 , - 1509 , - 1846 , - 623 , - 336 , - 985 , - 74 , - 99 , - 1060 , - 461 , - 798 , - 2071 , - 1784 , - 2433 , - 1522 , - 1547 , - 12 , - 1909 , - 2246 , - 1023 , - 736 , - 1385 , - 474 , - 499 , - 1460 , - 861 , - 1198 , - 2471 , - 2184 , - 337 , - 1922 , - 1947 , - 412 , - 2309 , - 150 , - 1423 , - 1136 , - 1785 , - 874 , - 899 , - 1860 , - 1261 , - 1598 , - 375 , - 88 , - 737 , - 2322 , - 2347 , - 812 , - 213 , - 550 , - 1823 , - 1536 , - 2185 , - 1274 , - 1299 , - 2260 , - 1661 , - 1998 , - 775 , - 488 , - 1137 , - 226 , - 251 , - 1212 , - 613 , - 950 , - 2223 , - 1936 , - 89 , - 1674 , - 1699 , - 164 , - 2061 , - 2398 , - 1175 , - 888 , - 1537 , - 626 , - 651 , - 1612 , - 1013 , - 1350 , - 127 , - 2336 , - 489 , - 2074 , - 2099 , - 564 , - 2461 , - 302 , - 1575 , - 1288 , - 1937 , - 1026 , - 1051 , - 2012 , - 1413 , - 1750 , - 527 , - 240 , - 889 , - 2474 , - 3 , - 964 , - 365 , - 702 , - 1975 , - 1688 , - 2337 , - 1426 , - 1451 , - 2412 , - 1813 , - 2150 , - 927 , - 640 , - 1289 , - 378 , - 403 , - 1364 , - 765 , - 1102 , - 2375 , - 2088 , - 241 , - 1826 , - 1851 , - 316 , - 2213 , - 54 , - 1327 , - 1040 , - 1689 , - 778 , - 803 , - 1764 , - 1165 , - 1502 , - 279 , - 2488 , - 641 , - 2226 , - 2251 , - 716 , - 117 , - 454 , - 1727 , - 1440 , - 2089 , - 1178 , - 1203 , - 2164 , - 1565 , - 1902 , - 679 , - 392 , - 1041 , - 130 , - 155 , - 1116 , - 517 , - 854 , - 2127 , - 1840 , - 2489 , - 1578 , - 1603 , - 68 , - 1965 , - 2302 , - 1079 , - 792 , - 1441 , - 530 , - 555 , - 1516 , - 917 , - 1254 , - 31 , - 2240 , - 393 , - 1978 , - 2003 , - 468 , - 2365 , - 206 , - 1479 , - 1192 , - 1841 , - 930 , - 955 , - 1916 , - 1317 , - 1654 , - 431 , - 144 , - 793 , - 2378 , - 2403 , - 868 , - 269 , - 606 , - 1879 , - 1592 , - 2241 , - 1330 , - 1355 , - 2316 , - 1717 , - 2054 , - 831 , - 544 , - 1193 , - 282 , - 307 , - 1268 , - 669 , - 1006 , - 2279 , - 1992 , - 145 , - 1730 , - 1755 , - 220 , - 2117 , - 2454 , - 1231 , - 944 , - 1593 , - 682 , - 707 , - 1668 , - 1069 , - 1406 , - 183 , - 2392 , - 545 , - 2130 , - 2155 , - 620 , - 21 , - 358 , - 1631 , - 1344 , - 1993 , - 1082 , - 1107 , - 2068 , - 1469 , - 1806 , - 583 , - 296 , - 945 , - 34 , - 59 , - 1020 , - 421 , - 758 , - 2031 , - 1744 , - 2393 , - 1482 , - 1507 , - 2468 , - 1869 , - 2206 , - 983 , - 696 , - 1345 , - 434 , - 459 , - 1420 , - 821 , - 1158 , - 2431 , - 2144 , - 297 , - 1882 , - 1907 , - 372 , - 2269 , - 110 , - 1383 , - 1096 , - 1745 , - 834 , - 859 , - 1820 , - 1221 , - 1558 , - 335 , - 48 , - 697 , - 2282 , - 2307 , - 772 , - 173 , - 510 , - 1783 , - 1496 , - 2145 , - 1234 , - 1259 , - 2220 , - 1621 , - 1958 , - 735 , - 448 , - 1097 , - 186 , - 211 , - 1172 , - 573 , - 910 , - 2183 , - 1896 , - 49 , - 1634 , - 1659 , - 124 , - 2021 , - 2358 , - 1135 , - 848 , - 1497 , - 586 , - 611 , - 1572 , - 973 , - 1310 , - 87 , - 2296 , - 449 , - 2034 , - 2059 , - 524 , - 2421 , - 262 , - 1535 , - 1248 , - 1897 , - 986 , - 1011 , - 1972 , - 1373 , - 1710 , - 487 , - 200 , - 849 , - 2434 , - 2459 , - 924 , - 325 , - 662 , - 1935 , - 1648 , - 2297 , - 1386 , - 1411 , - 2372 , - 1773 , - 2110 , - 887 , - 600 , - 1249 , - 338 , - 363 , - 1324 , - 725 , - 1062 , - 2335 , - 2048 , - 201 , - 1786 , - 1811 , - 276 , - 2173 , - 14 , - 1287 , - 1000 , - 1649 , - 738 , - 763 , - 1724 , - 1125 , - 1462 , - 239 , - 2448 , - 601 , - 2186 , - 2211 , - 676 , - 77 , - 414 , - 1687 , - 1400 , - 2049 , - 1138 , - 1163 , - 2124 , - 1525 , - 1862 , - 639 , - 352 , - 1001 , - 90 , - 115 , - 1076 , - 477 , - 814 , - 2087 , - 1800 , - 2449 , - 1538 , - 1563 , - 28 , - 1925 , - 2262 , - 1039 , - 752 , - 1401 , - 490 , - 515 , - 1476 , - 877 , - 1214 , - 2487 , - 2200 , - 353 , - 1938 , - 1963 , - 428 , - 2325 , - 166 , - 1439 , - 1152 , - 1801 , - 890 , - 915 , - 1876 , - 1277 , - 1614 , - 391 , - 104 , - 753 , - 2338 , - 2363 , - 828 , - 229 , - 566 , - 1839 , - 1552 , - 2201 , - 1290 , - 1315 , - 2276 , - 1677 , - 2014 , - 791 , - 504 , - 1153 , - 242 , - 267 , - 1228 , - 629 , - 966 , - 2239 , - 1952 , - 105 , - 1690 , - 1715 , - 180 , - 2077 , - 2414 , - 1191 , - 904 , - 1553 , - 642 , - 667 , - 1628 , - 1029 , - 1366 , - 143 , - 2352 , - 505 , - 2090 , - 2115 , - 580 , - 2477 , - 318 , - 1591 , - 1304 , - 1953 , - 1042 , - 1067 , - 2028 , - 1429 , - 1766 , - 543 , - 256 , - 905 , - 2490 , - 19 , - 980 , - 381 , - 718 , - 1991 , - 1704 , - 2353 , - 1442 , - 1467 , - 2428 , - 1829 , - 2166 , - 943 , - 656 , - 1305 , - 394 , - 419 , - 1380 , - 781 , - 1118 , - 2391 , - 2104 , - 257 , - 1842 , - 1867 , - 332 , - 2229 , - 70 , - 1343 , - 1056 , - 1705 , - 794 , - 819 , - 1780 , - 1181 , - 1518 , - 295 , - 8 , - 657 , - 2242 , - 2267 , - 732 , - 133 , - 470 , - 1743 , - 1456 , - 2105 , - 1194 , - 1219 , - 2180 , - 1581 , - 1918 , - 695 , - 408 , - 1057 , - 146 , - 171 , - 1132 , - 533 , - 870 , - 2143 , - 1856 , - 9 , - 1594 , - 1619 , - 84 , - 1981 , - 2318 , - 1095 , - 808 , - 1457 , - 546 , - 571 , - 1532 , - 933 , - 1270 , - 47 , - 2256 , - 409 , - 1994 , - 2019 , - 484 , - 2381 , - 222 , - 1495 , - 1208 , - 1857 , - 946 , - 971 , - 1932 , - 1333 , - 1670 , - 447 , - 160 , - 809 , - 2394 , - 2419 , - 884 , - 285 , - 622 , - 1895 , - 1608 , - 2257 , - 1346 , - 1371 , - 2332 , - 1733 , - 2070 , - 847 , - 560 , - 1209 , - 298 , - 323 , - 1284 , - 685 , - 1022 , - 2295 , - 2008 , - 161 , - 1746 , - 1771 , - 236 , - 2133 , - 2470 , - 1247 , - 960 , - 1609 , - 698 , - 723 , - 1684 , - 1085 , - 1422 , - 199 , - 2408 , - 561 , - 2146 , - 2171 , - 636 , - 37 , - 374 , - 1647 , - 1360 , - 2009 , - 1098 , - 1123 , - 2084 , - 1485 , - 1822 , - 599 , - 312 , - 961 , - 50 , - 75 , - 1036 , - 437 , - 774 , - 2047 , - 1760 , - 2409 , - 1498 , - 1523 , - 2484 , - 1885 , - 2222 , - 999 , - 712 , - 1361 , - 450 , - 475 , - 1436 , - 837 , - 1174 , - 2447 , - 2160 , - 313 , - 1898 , - 1923 , - 388 , - 2285 , - 126 , - 1399 , - 1112 , - 1761 , - 850 , - 875 , - 1836 , - 1237 , - 1574 , - 351 , - 64 , - 713 , - 2298 , - 2323 , - 788 , - 189 , - 526 , - 1799 , - 1512 , - 2161 , - 1250 , - 1275 , - 2236 , - 1637 , - 1974 , - 751 , - 464 , - 1113 , - 202 , - 227 , - 1188 , - 589 , - 926 , - 2199 , - 1912 , - 65 , - 1650 , - 1675 , - 140 , - 2037 , - 2374 , - 1151 , - 864 , - 1513 , - 602 , - 627 , - 1588 , - 989 , - 1326 , - 103 , - 2312 , - 465 , - 2050 , - 2075 , - 540 , - 2437 , - 278 , - 1551 , - 1264 , - 1913 , - 1002 , - 1027 , - 1988 , - 1389 , - 1726 , - 503 , - 216 , - 865 , - 2450 , - 2475 , - 940 , - 341 , - 678 , - 1951 , - 1664 , - 2313 , - 1402 , - 1427 , - 2388 , - 1789 , - 2126 , - 903 , - 616 , - 1265 , - 354 , - 379 , - 1340 , - 741 , - 1078 , - 2351 , - 2064 , - 217 , - 1802 , - 1827 , - 292 , - 2189 , - 30 , - 1303 , - 1016 , - 1665 , - 754 , - 779 , - 1740 , - 1141 , - 1478 , - 255 , - 2464 , - 617 , - 2202 , - 2227 , - 692 , - 93 , - 430 , - 1703 , - 1416 , - 2065 , - 1154 , - 1179 , - 2140 , - 1541 , - 1878 , - 655 , - 368 , - 1017 , - 106 , - 131 , - 1092 , - 493 , - 830 , - 2103 , - 1816 , - 2465 , - 1554 , - 1579 , - 44 , - 1941 , - 2278 , - 1055 , - 768 , - 1417 , - 506 , - 531 , - 1492 , - 893 , - 1230 , - 7 , - 2216 , - 369 , - 1954 , - 1979 , - 444 , - 2341 , - 182 , - 1455 , - 1168 , - 1817 , - 906 , - 931 , - 1892 , - 1293 , - 1630 , - 407 , - 120 , - 769 , - 2354 , - 2379 , - 844 , - 245 , - 582 , - 1855 , - 1568 , - 2217 , - 1306 , - 1331 , - 2292 , - 1693 , - 2030 , - 807 , - 520 , - 1169 , - 258 , - 283 , - 1244 , - 645 , - 982 , - 2255 , - 1968 , - 121 , - 1706 , - 1731 , - 196 , - 2093 , - 2430 , - 1207 , - 920 , - 1569 , - 658 , - 683 , - 1644 , - 1045 , - 1382 , - 159 , - 2368 , - 521 , - 2106 , - 2131 , - 596 , - 2493 , - 334 , - 1607 , - 1320 , - 1969 , - 1058 , - 1083 , - 2044 , - 1445 , - 1782 , - 559 , - 272 , - 921 , - 10 , - 35 , - 996 , - 397 , - 734 , - 2007 , - 1720 , - 2369 , - 1458 , - 1483 , - 2444 , - 1845 , - 2182 , - 959 , - 672 , - 1321 , - 410 , - 435 , - 1396 , - 797 , - 1134 , - 2407 , - 2120 , - 273 , - 1858 , - 1883 , - 348 , - 2245 , - 86 , - 1359 , - 1072 , - 1721 , - 810 , - 835 , - 1796 , - 1197 , - 1534 , - 311 , - 24 , - 673 , - 2258 , - 2283 , - 748 , - 149 , - 486 , - 1759 , - 1472 , - 2121 , - 1210 , - 1235 , - 2196 , - 1597 , - 1934 , - 711 , - 424 , - 1073 , - 162 , - 187 , - 1148 , - 549 , - 886 , - 2159 , - 1872 , - 25 , - 1610 , - 1635 , - 100 , - 1997 , - 2334 , - 1111 , - 824 , - 1473 , - 562 , - 587 , - 1548 , - 949 , - 1286 , - 63 , - 2272 , - 425 , - 2010 , - 2035 , - 500 , - 2397 , - 238 , - 1511 , - 1224 , - 1873 , - 962 , - 987 , - 1948 , - 1349 , - 1686 , - 463 , - 176 , - 825 , - 2410 , - 2435 , - 900 , - 301 , - 638 , - 1911 , - 1624 , - 2273 , - 1362 , - 1387 , - 2348 , - 1749 , - 2086 , - 863 , - 576 , - 1225 , - 314 , - 339 , - 1300 , - 701 , - 1038 , - 2311 , - 2024 , - 177 , - 1762 , - 1787 , - 252 , - 2149 , - 2486 , - 1263 , - 976 , - 1625 , - 714 , - 739 , - 1700 , - 1101 , - 1438 , - 215 , - 2424 , - 577 , - 2162 , - 2187 , - 652 , - 53 , - 390 , - 1663 , - 1376 , - 2025 , - 1114 , - 1139 , - 2100 , - 1501 , - 1838 , - 615 , - 328 , - 977 , - 66 , - 91 , - 1052 , - 453 , - 790 , - 2063 , - 1776 , - 2425 , - 1514 , - 1539 , - 4 , - 1901 , - 2238 , - 1015 , - 728 , - 1377 , - 466 , - 491 , - 1452 , - 853 , - 1190 , - 2463 , - 2176 , - 329 , - 1914 , - 1939 , - 404 , - 2301 , - 142 , - 1415 , - 1128 , - 1777 , - 866 , - 891 , - 1852 , - 1253 , - 1590 , - 367 , - 80 , - 729 , - 2314 , - 2339 , - 804 , - 205 , - 542 , - 1815 , - 1528 , - 2177 , - 1266 , - 1291 , - 2252 , - 1653 , - 1990 , - 767 , - 480 , - 1129 , - 218 , - 243 , - 1204 , - 605 , - 942 , - 2215 , - 1928 , - 81 , - 1666 , - 1691 , - 156 , - 2053 , - 2390 , - 1167 , - 880 , - 1529 , - 618 , - 643 , - 1604 , - 1005 , - 1342 , - 119 , - 2328 , - 481 , - 2066 , - 2091 , - 556 , - 2453 , - 294 , - 1567 , - 1280 , - 1929 , - 1018 , - 1043 , - 2004 , - 1405 , - 1742 , - 519 , - 232 , - 881 , - 2466 , - 2491 , - 956 , - 357 , - 694 , - 1967 , - 1680 , - 2329 , - 1418 , - 1443 , - 2404 , - 1805 , - 2142 , - 919 , - 632 , - 1281 , - 370 , - 395 , - 1356 , - 757 , - 1094 , - 2367 , - 2080 , - 233 , - 1818 , - 1843 , - 308 , - 2205 , - 46 , - 1319 , - 1032 , - 1681 , - 770 , - 795 , - 1756 , - 1157 , - 1494 , - 271 , - 2480 , - 633 , - 2218 , - 2243 , - 708 , - 109 , - 446 , - 1719 , - 1432 , - 2081 , - 1170 , - 1195 , - 2156 , - 1557 , - 1894 , - 671 , - 384 , - 1033 , - 122 , - 147 , - 1108 , - 509 , - 846 , - 2119 , - 1832 , - 2481 , - 1570 , - 1595 , - 60 , - 1957 , - 2294 , - 1071 , - 784 , - 1433 , - 522 , - 547 , - 1508 , - 909 , - 1246 , - 23 , - 2232 , - 385 , - 1970 , - 1995 , - 460 , - 2357 , - 198 , - 1471 , - 1184 , - 1833 , - 922 , - 947 , - 1908 , - 1309 , - 1646 , - 423 , - 136 , - 785 , - 2370 , - 2395 , - 860 , - 261 , - 598 , - 1871 , - 1584 , - 2233 , - 1322 , - 1347 , - 2308 , - 1709 , - 2046 , - 823 , - 536 , - 1185 , - 274 , - 299 , - 1260 , - 661 , - 998 , - 2271 , - 1984 , - 137 , - 1722 , - 1747 , - 212 , - 2109 , - 2446 , - 1223 , - 936 , - 1585 , - 674 , - 699 , - 1660 , - 1061 , - 1398 , - 175 , - 2384 , - 537 , - 2122 , - 2147 , - 612 , - 13 , - 350 , - 1623 , - 1336 , - 1985 , - 1074 , - 1099 , - 2060 , - 1461 , - 1798 , - 575 , - 288 , - 937 , - 26 , - 51 , - 1012 , - 413 , - 750 , - 2023 , - 1736 , - 2385 , - 1474 , - 1499 , - 2460 , - 1861 , - 2198 , - 975 , - 688 , - 1337 , - 426 , - 451 , - 1412 , - 813 , - 1150 , - 2423 , - 2136 , - 289 , - 1874 , - 1899 , - 364 , - 2261 , - 102 , - 1375 , - 1088 , - 1737 , - 826 , - 851 , - 1812 , - 1213 , - 1550 , - 327 , - 40 , - 689 , - 2274 , - 2299 , - 764 , - 165 , - 502 , - 1775 , - 1488 , - 2137 , - 1226 , - 1251 , - 2212 , - 1613 , - 1950 , - 727 , - 440 , - 1089 , - 178 , - 203 , - 1164 , - 565 , - 902 , - 2175 , - 1888 , - 41 , - 1626 , - 1651 , - 116 , - 2013 , - 2350 , - 1127 , - 840 , - 1489 , - 578 , - 603 , - 1564 , - 965 , - 1302 , - 79 , - 2288 , - 441 , - 2026 , - 2051 , - 516 , - 2413 , - 254 , - 1527 , - 1240 , - 1889 , - 978 , - 1003 , - 1964 , - 1365 , - 1702 , - 479 , - 192 , - 841 , - 2426 , - 2451 , - 916 , - 317 , - 654 , - 1927 , - 1640 , - 2289 , - 1378 , - 1403 , - 2364 , - 1765 , - 2102 , - 879 , - 592 , - 1241 , - 330 , - 355 , - 1316 , - 717 , - 1054 , - 2327 , - 2040 , - 193 , - 1778 , - 1803 , - 268 , - 2165 , - 6 , - 1279 , - 992 , - 1641 , - 730 , - 755 , - 1716 , - 1117 , - 1454 , - 231 , - 2440 , - 593 , - 2178 , - 2203 , - 668 , - 69 , - 406 , - 1679 , - 1392 , - 2041 , - 1130 , - 1155 , - 2116 , - 1517 , - 1854 , - 631 , - 344 , - 993 , - 82 , - 107 , - 1068 , - 469 , - 806 , - 2079 , - 1792 , - 2441 , - 1530 , - 1555 , - 20 , - 1917 , - 2254 , - 1031 , - 744 , - 1393 , - 482 , - 507 , - 1468 , - 869 , - 1206 , - 2479 , - 2192 , - 345 , - 1930 , - 1955 , - 420 , - 2317 , - 158 , - 1431 , - 1144 , - 1793 , - 882 , - 907 , - 1868 , - 1269 , - 1606 , - 383 , - 96 , - 745 , - 2330 , - 2355 , - 820 , - 221 , - 558 , - 1831 , - 1544 , - 2193 , - 1282 , - 1307 , - 2268 , - 1669 , - 2006 , - 783 , - 496 , - 1145 , - 234 , - 259 , - 1220 , - 621 , - 958 , - 2231 , - 1944 , - 97 , - 1682 , - 1707 , - 172 , - 2069 , - 2406 , - 1183 , - 896 , - 1545 , - 634 , - 659 , - 1620 , - 1021 , - 1358 , - 135 , - 2344 , - 497 , - 2082 , - 2107 , - 572 , - 2469 , - 310 , - 1583 , - 1296 , - 1945 , - 1034 , - 1059 , - 2020 , - 1421 , - 1758 , - 535 , - 248 , - 897 , - 2482 , - 11 , - 972 , - 373 , - 710 , - 1983 , - 1696 , - 2345 , - 1434 , - 1459 , - 2420 , - 1821 , - 2158 , - 935 , - 648 , - 1297 , - 386 , - 411 , - 1372 , - 773 , - 1110 , - 2383 , - 2096 , - 249 , - 1834 , - 1859 , - 324 , - 2221 , - 62 , - 1335 , - 1048 , - 1697 , - 786 , - 811 , - 1772 , - 1173 , - 1510 , - 287 , - 0 , - 119 , - 398 , - 837 , - 1436 , - 2195 , - 554 , - 1633 , - 312 , - 1711 , - 710 , - 2429 , - 1748 , - 1227 , - 866 , - 665 , - 624 , - 743 , - 1022 , - 1461 , - 2060 , - 259 , - 1178 , - 2257 , - 936 , - 2335 , - 1334 , - 493 , - 2372 , - 1851 , - 1490 , - 1289 , - 1248 , - 1367 , - 1646 , - 2085 , - 124 , - 883 , - 1802 , - 321 , - 1560 , - 399 , - 1958 , - 1117 , - 436 , - 2475 , - 2114 , - 1913 , - 1872 , - 1991 , - 2270 , - 149 , - 748 , - 1507 , - 2426 , - 945 , - 2184 , - 1023 , - 22 , - 1741 , - 1060 , - 539 , - 178 , - 2537 , - 2496 , - 55 , - 334 , - 773 , - 1372 , - 2131 , - 490 , - 1569 , - 248 , - 1647 , - 646 , - 2365 , - 1684 , - 1163 , - 802 , - 601 , - 560 , - 679 , - 958 , - 1397 , - 1996 , - 195 , - 1114 , - 2193 , - 872 , - 2271 , - 1270 , - 429 , - 2308 , - 1787 , - 1426 , - 1225 , - 1184 , - 1303 , - 1582 , - 2021 , - 60 , - 819 , - 1738 , - 257 , - 1496 , - 335 , - 1894 , - 1053 , - 372 , - 2411 , - 2050 , - 1849 , - 1808 , - 1927 , - 2206 , - 85 , - 684 , - 1443 , - 2362 , - 881 , - 2120 , - 959 , - 2518 , - 1677 , - 996 , - 475 , - 114 , - 2473 , - 2432 , - 2551 , - 270 , - 709 , - 1308 , - 2067 , - 426 , - 1505 , - 184 , - 1583 , - 582 , - 2301 , - 1620 , - 1099 , - 738 , - 537 , - 496 , - 615 , - 894 , - 1333 , - 1932 , - 131 , - 1050 , - 2129 , - 808 , - 2207 , - 1206 , - 365 , - 2244 , - 1723 , - 1362 , - 1161 , - 1120 , - 1239 , - 1518 , - 1957 , - 2556 , - 755 , - 1674 , - 193 , - 1432 , - 271 , - 1830 , - 989 , - 308 , - 2347 , - 1986 , - 1785 , - 1744 , - 1863 , - 2142 , - 21 , - 620 , - 1379 , - 2298 , - 817 , - 2056 , - 895 , - 2454 , - 1613 , - 932 , - 411 , - 50 , - 2409 , - 2368 , - 2487 , - 206 , - 645 , - 1244 , - 2003 , - 362 , - 1441 , - 120 , - 1519 , - 518 , - 2237 , - 1556 , - 1035 , - 674 , - 473 , - 432 , - 551 , - 830 , - 1269 , - 1868 , - 67 , - 986 , - 2065 , - 744 , - 2143 , - 1142 , - 301 , - 2180 , - 1659 , - 1298 , - 1097 , - 1056 , - 1175 , - 1454 , - 1893 , - 2492 , - 691 , - 1610 , - 129 , - 1368 , - 207 , - 1766 , - 925 , - 244 , - 2283 , - 1922 , - 1721 , - 1680 , - 1799 , - 2078 , - 2517 , - 556 , - 1315 , - 2234 , - 753 , - 1992 , - 831 , - 2390 , - 1549 , - 868 , - 347 , - 2546 , - 2345 , - 2304 , - 2423 , - 142 , - 581 , - 1180 , - 1939 , - 298 , - 1377 , - 56 , - 1455 , - 454 , - 2173 , - 1492 , - 971 , - 610 , - 409 , - 368 , - 487 , - 766 , - 1205 , - 1804 , - 3 , - 922 , - 2001 , - 680 , - 2079 , - 1078 , - 237 , - 2116 , - 1595 , - 1234 , - 1033 , - 992 , - 1111 , - 1390 , - 1829 , - 2428 , - 627 , - 1546 , - 65 , - 1304 , - 143 , - 1702 , - 861 , - 180 , - 2219 , - 1858 , - 1657 , - 1616 , - 1735 , - 2014 , - 2453 , - 492 , - 1251 , - 2170 , - 689 , - 1928 , - 767 , - 2326 , - 1485 , - 804 , - 283 , - 2482 , - 2281 , - 2240 , - 2359 , - 78 , - 517 , - 1116 , - 1875 , - 234 , - 1313 , - 2552 , - 1391 , - 390 , - 2109 , - 1428 , - 907 , - 546 , - 345 , - 304 , - 423 , - 702 , - 1141 , - 1740 , - 2499 , - 858 , - 1937 , - 616 , - 2015 , - 1014 , - 173 , - 2052 , - 1531 , - 1170 , - 969 , - 928 , - 1047 , - 1326 , - 1765 , - 2364 , - 563 , - 1482 , - 1 , - 1240 , - 79 , - 1638 , - 797 , - 116 , - 2155 , - 1794 , - 1593 , - 1552 , - 1671 , - 1950 , - 2389 , - 428 , - 1187 , - 2106 , - 625 , - 1864 , - 703 , - 2262 , - 1421 , - 740 , - 219 , - 2418 , - 2217 , - 2176 , - 2295 , - 14 , - 453 , - 1052 , - 1811 , - 170 , - 1249 , - 2488 , - 1327 , - 326 , - 2045 , - 1364 , - 843 , - 482 , - 281 , - 240 , - 359 , - 638 , - 1077 , - 1676 , - 2435 , - 794 , - 1873 , - 552 , - 1951 , - 950 , - 109 , - 1988 , - 1467 , - 1106 , - 905 , - 864 , - 983 , - 1262 , - 1701 , - 2300 , - 499 , - 1418 , - 2497 , - 1176 , - 15 , - 1574 , - 733 , - 52 , - 2091 , - 1730 , - 1529 , - 1488 , - 1607 , - 1886 , - 2325 , - 364 , - 1123 , - 2042 , - 561 , - 1800 , - 639 , - 2198 , - 1357 , - 676 , - 155 , - 2354 , - 2153 , - 2112 , - 2231 , - 2510 , - 389 , - 988 , - 1747 , - 106 , - 1185 , - 2424 , - 1263 , - 262 , - 1981 , - 1300 , - 779 , - 418 , - 217 , - 176 , - 295 , - 574 , - 1013 , - 1612 , - 2371 , - 730 , - 1809 , - 488 , - 1887 , - 886 , - 45 , - 1924 , - 1403 , - 1042 , - 841 , - 800 , - 919 , - 1198 , - 1637 , - 2236 , - 435 , - 1354 , - 2433 , - 1112 , - 2511 , - 1510 , - 669 , - 2548 , - 2027 , - 1666 , - 1465 , - 1424 , - 1543 , - 1822 , - 2261 , - 300 , - 1059 , - 1978 , - 497 , - 1736 , - 575 , - 2134 , - 1293 , - 612 , - 91 , - 2290 , - 2089 , - 2048 , - 2167 , - 2446 , - 325 , - 924 , - 1683 , - 42 , - 1121 , - 2360 , - 1199 , - 198 , - 1917 , - 1236 , - 715 , - 354 , - 153 , - 112 , - 231 , - 510 , - 949 , - 1548 , - 2307 , - 666 , - 1745 , - 424 , - 1823 , - 822 , - 2541 , - 1860 , - 1339 , - 978 , - 777 , - 736 , - 855 , - 1134 , - 1573 , - 2172 , - 371 , - 1290 , - 2369 , - 1048 , - 2447 , - 1446 , - 605 , - 2484 , - 1963 , - 1602 , - 1401 , - 1360 , - 1479 , - 1758 , - 2197 , - 236 , - 995 , - 1914 , - 433 , - 1672 , - 511 , - 2070 , - 1229 , - 548 , - 27 , - 2226 , - 2025 , - 1984 , - 2103 , - 2382 , - 261 , - 860 , - 1619 , - 2538 , - 1057 , - 2296 , - 1135 , - 134 , - 1853 , - 1172 , - 651 , - 290 , - 89 , - 48 , - 167 , - 446 , - 885 , - 1484 , - 2243 , - 602 , - 1681 , - 360 , - 1759 , - 758 , - 2477 , - 1796 , - 1275 , - 914 , - 713 , - 672 , - 791 , - 1070 , - 1509 , - 2108 , - 307 , - 1226 , - 2305 , - 984 , - 2383 , - 1382 , - 541 , - 2420 , - 1899 , - 1538 , - 1337 , - 1296 , - 1415 , - 1694 , - 2133 , - 172 , - 931 , - 1850 , - 369 , - 1608 , - 447 , - 2006 , - 1165 , - 484 , - 2523 , - 2162 , - 1961 , - 1920 , - 2039 , - 2318 , - 197 , - 796 , - 1555 , - 2474 , - 993 , - 2232 , - 1071 , - 70 , - 1789 , - 1108 , - 587 , - 226 , - 25 , - 2544 , - 103 , - 382 , - 821 , - 1420 , - 2179 , - 538 , - 1617 , - 296 , - 1695 , - 694 , - 2413 , - 1732 , - 1211 , - 850 , - 649 , - 608 , - 727 , - 1006 , - 1445 , - 2044 , - 243 , - 1162 , - 2241 , - 920 , - 2319 , - 1318 , - 477 , - 2356 , - 1835 , - 1474 , - 1273 , - 1232 , - 1351 , - 1630 , - 2069 , - 108 , - 867 , - 1786 , - 305 , - 1544 , - 383 , - 1942 , - 1101 , - 420 , - 2459 , - 2098 , - 1897 , - 1856 , - 1975 , - 2254 , - 133 , - 732 , - 1491 , - 2410 , - 929 , - 2168 , - 1007 , - 6 , - 1725 , - 1044 , - 523 , - 162 , - 2521 , - 2480 , - 39 , - 318 , - 757 , - 1356 , - 2115 , - 474 , - 1553 , - 232 , - 1631 , - 630 , - 2349 , - 1668 , - 1147 , - 786 , - 585 , - 544 , - 663 , - 942 , - 1381 , - 1980 , - 179 , - 1098 , - 2177 , - 856 , - 2255 , - 1254 , - 413 , - 2292 , - 1771 , - 1410 , - 1209 , - 1168 , - 1287 , - 1566 , - 2005 , - 44 , - 803 , - 1722 , - 241 , - 1480 , - 319 , - 1878 , - 1037 , - 356 , - 2395 , - 2034 , - 1833 , - 1792 , - 1911 , - 2190 , - 69 , - 668 , - 1427 , - 2346 , - 865 , - 2104 , - 943 , - 2502 , - 1661 , - 980 , - 459 , - 98 , - 2457 , - 2416 , - 2535 , - 254 , - 693 , - 1292 , - 2051 , - 410 , - 1489 , - 168 , - 1567 , - 566 , - 2285 , - 1604 , - 1083 , - 722 , - 521 , - 480 , - 599 , - 878 , - 1317 , - 1916 , - 115 , - 1034 , - 2113 , - 792 , - 2191 , - 1190 , - 349 , - 2228 , - 1707 , - 1346 , - 1145 , - 1104 , - 1223 , - 1502 , - 1941 , - 2540 , - 739 , - 1658 , - 177 , - 1416 , - 255 , - 1814 , - 973 , - 292 , - 2331 , - 1970 , - 1769 , - 1728 , - 1847 , - 2126 , - 5 , - 604 , - 1363 , - 2282 , - 801 , - 2040 , - 879 , - 2438 , - 1597 , - 916 , - 395 , - 34 , - 2393 , - 2352 , - 2471 , - 190 , - 629 , - 1228 , - 1987 , - 346 , - 1425 , - 104 , - 1503 , - 502 , - 2221 , - 1540 , - 1019 , - 658 , - 457 , - 416 , - 535 , - 814 , - 1253 , - 1852 , - 51 , - 970 , - 2049 , - 728 , - 2127 , - 1126 , - 285 , - 2164 , - 1643 , - 1282 , - 1081 , - 1040 , - 1159 , - 1438 , - 1877 , - 2476 , - 675 , - 1594 , - 113 , - 1352 , - 191 , - 1750 , - 909 , - 228 , - 2267 , - 1906 , - 1705 , - 1664 , - 1783 , - 2062 , - 2501 , - 540 , - 1299 , - 2218 , - 737 , - 1976 , - 815 , - 2374 , - 1533 , - 852 , - 331 , - 2530 , - 2329 , - 2288 , - 2407 , - 126 , - 565 , - 1164 , - 1923 , - 282 , - 1361 , - 40 , - 1439 , - 438 , - 2157 , - 1476 , - 955 , - 594 , - 393 , - 352 , - 471 , - 750 , - 1189 , - 1788 , - 2547 , - 906 , - 1985 , - 664 , - 2063 , - 1062 , - 221 , - 2100 , - 1579 , - 1218 , - 1017 , - 976 , - 1095 , - 1374 , - 1813 , - 2412 , - 611 , - 1530 , - 49 , - 1288 , - 127 , - 1686 , - 845 , - 164 , - 2203 , - 1842 , - 1641 , - 1600 , - 1719 , - 1998 , - 2437 , - 476 , - 1235 , - 2154 , - 673 , - 1912 , - 751 , - 2310 , - 1469 , - 788 , - 267 , - 2466 , - 2265 , - 2224 , - 2343 , - 62 , - 501 , - 1100 , - 1859 , - 218 , - 1297 , - 2536 , - 1375 , - 374 , - 2093 , - 1412 , - 891 , - 530 , - 329 , - 288 , - 407 , - 686 , - 1125 , - 1724 , - 2483 , - 842 , - 1921 , - 600 , - 1999 , - 998 , - 157 , - 2036 , - 1515 , - 1154 , - 953 , - 912 , - 1031 , - 1310 , - 1749 , - 2348 , - 547 , - 1466 , - 2545 , - 1224 , - 63 , - 1622 , - 781 , - 100 , - 2139 , - 1778 , - 1577 , - 1536 , - 1655 , - 1934 , - 2373 , - 412 , - 1171 , - 2090 , - 609 , - 1848 , - 687 , - 2246 , - 1405 , - 724 , - 203 , - 2402 , - 2201 , - 2160 , - 2279 , - 2558 , - 437 , - 1036 , - 1795 , - 154 , - 1233 , - 2472 , - 1311 , - 310 , - 2029 , - 1348 , - 827 , - 466 , - 265 , - 224 , - 343 , - 622 , - 1061 , - 1660 , - 2419 , - 778 , - 1857 , - 536 , - 1935 , - 934 , - 93 , - 1972 , - 1451 , - 1090 , - 889 , - 848 , - 967 , - 1246 , - 1685 , - 2284 , - 483 , - 1402 , - 2481 , - 1160 , - 2559 , - 1558 , - 717 , - 36 , - 2075 , - 1714 , - 1513 , - 1472 , - 1591 , - 1870 , - 2309 , - 348 , - 1107 , - 2026 , - 545 , - 1784 , - 623 , - 2182 , - 1341 , - 660 , - 139 , - 2338 , - 2137 , - 2096 , - 2215 , - 2494 , - 373 , - 972 , - 1731 , - 90 , - 1169 , - 2408 , - 1247 , - 246 , - 1965 , - 1284 , - 763 , - 402 , - 201 , - 160 , - 279 , - 558 , - 997 , - 1596 , - 2355 , - 714 , - 1793 , - 472 , - 1871 , - 870 , - 29 , - 1908 , - 1387 , - 1026 , - 825 , - 784 , - 903 , - 1182 , - 1621 , - 2220 , - 419 , - 1338 , - 2417 , - 1096 , - 2495 , - 1494 , - 653 , - 2532 , - 2011 , - 1650 , - 1449 , - 1408 , - 1527 , - 1806 , - 2245 , - 284 , - 1043 , - 1962 , - 481 , - 1720 , - 559 , - 2118 , - 1277 , - 596 , - 75 , - 2274 , - 2073 , - 2032 , - 2151 , - 2430 , - 309 , - 908 , - 1667 , - 26 , - 1105 , - 2344 , - 1183 , - 182 , - 1901 , - 1220 , - 699 , - 338 , - 137 , - 96 , - 215 , - 494 , - 933 , - 1532 , - 2291 , - 650 , - 1729 , - 408 , - 1807 , - 806 , - 2525 , - 1844 , - 1323 , - 962 , - 761 , - 720 , - 839 , - 1118 , - 1557 , - 2156 , - 355 , - 1274 , - 2353 , - 1032 , - 2431 , - 1430 , - 589 , - 2468 , - 1947 , - 1586 , - 1385 , - 1344 , - 1463 , - 1742 , - 2181 , - 220 , - 979 , - 1898 , - 417 , - 1656 , - 495 , - 2054 , - 1213 , - 532 , - 11 , - 2210 , - 2009 , - 1968 , - 2087 , - 2366 , - 245 , - 844 , - 1603 , - 2522 , - 1041 , - 2280 , - 1119 , - 118 , - 1837 , - 1156 , - 635 , - 274 , - 73 , - 32 , - 151 , - 430 , - 869 , - 1468 , - 2227 , - 586 , - 1665 , - 344 , - 1743 , - 742 , - 2461 , - 1780 , - 1259 , - 898 , - 697 , - 656 , - 775 , - 1054 , - 1493 , - 2092 , - 291 , - 1210 , - 2289 , - 968 , - 2367 , - 1366 , - 525 , - 2404 , - 1883 , - 1522 , - 1321 , - 1280 , - 1399 , - 1678 , - 2117 , - 156 , - 915 , - 1834 , - 353 , - 1592 , - 431 , - 1990 , - 1149 , - 468 , - 2507 , - 2146 , - 1945 , - 1904 , - 2023 , - 2302 , - 181 , - 780 , - 1539 , - 2458 , - 977 , - 2216 , - 1055 , - 54 , - 1773 , - 1092 , - 571 , - 210 , - 9 , - 2528 , - 87 , - 366 , - 805 , - 1404 , - 2163 , - 522 , - 1601 , - 280 , - 1679 , - 678 , - 2397 , - 1716 , - 1195 , - 834 , - 633 , - 592 , - 711 , - 990 , - 1429 , - 2028 , - 227 , - 1146 , - 2225 , - 904 , - 2303 , - 1302 , - 461 , - 2340 , - 1819 , - 1458 , - 1257 , - 1216 , - 1335 , - 1614 , - 2053 , - 92 , - 851 , - 1770 , - 289 , - 1528 , - 367 , - 1926 , - 1085 , - 404 , - 2443 , - 2082 , - 1881 , - 1840 , - 1959 , - 2238 , - 117 , - 716 , - 1475 , - 2394 , - 913 , - 2152 , - 991 , - 2550 , - 1709 , - 1028 , - 507 , - 146 , - 2505 , - 2464 , - 23 , - 302 , - 741 , - 1340 , - 2099 , - 458 , - 1537 , - 216 , - 1615 , - 614 , - 2333 , - 1652 , - 1131 , - 770 , - 569 , - 528 , - 647 , - 926 , - 1365 , - 1964 , - 163 , - 1082 , - 2161 , - 840 , - 2239 , - 1238 , - 397 , - 2276 , - 1755 , - 1394 , - 1193 , - 1152 , - 1271 , - 1550 , - 1989 , - 28 , - 787 , - 1706 , - 225 , - 1464 , - 303 , - 1862 , - 1021 , - 340 , - 2379 , - 2018 , - 1817 , - 1776 , - 1895 , - 2174 , - 53 , - 652 , - 1411 , - 2330 , - 849 , - 2088 , - 927 , - 2486 , - 1645 , - 964 , - 443 , - 82 , - 2441 , - 2400 , - 2519 , - 238 , - 677 , - 1276 , - 2035 , - 394 , - 1473 , - 152 , - 1551 , - 550 , - 2269 , - 1588 , - 1067 , - 706 , - 505 , - 464 , - 583 , - 862 , - 1301 , - 1900 , - 99 , - 1018 , - 2097 , - 776 , - 2175 , - 1174 , - 333 , - 2212 , - 1691 , - 1330 , - 1129 , - 1088 , - 1207 , - 1486 , - 1925 , - 2524 , - 723 , - 1642 , - 161 , - 1400 , - 239 , - 1798 , - 957 , - 276 , - 2315 , - 1954 , - 1753 , - 1712 , - 1831 , - 2110 , - 2549 , - 588 , - 1347 , - 2266 , - 785 , - 2024 , - 863 , - 2422 , - 1581 , - 900 , - 379 , - 18 , - 2377 , - 2336 , - 2455 , - 174 , - 613 , - 1212 , - 1971 , - 330 , - 1409 , - 88 , - 1487 , - 486 , - 2205 , - 1524 , - 1003 , - 642 , - 441 , - 400 , - 519 , - 798 , - 1237 , - 1836 , - 35 , - 954 , - 2033 , - 712 , - 2111 , - 1110 , - 269 , - 2148 , - 1627 , - 1266 , - 1065 , - 1024 , - 1143 , - 1422 , - 1861 , - 2460 , - 659 , - 1578 , - 97 , - 1336 , - 175 , - 1734 , - 893 , - 212 , - 2251 , - 1890 , - 1689 , - 1648 , - 1767 , - 2046 , - 2485 , - 524 , - 1283 , - 2202 , - 721 , - 1960 , - 799 , - 2358 , - 1517 , - 836 , - 315 , - 2514 , - 2313 , - 2272 , - 2391 , - 110 , - 549 , - 1148 , - 1907 , - 266 , - 1345 , - 24 , - 1423 , - 422 , - 2141 , - 1460 , - 939 , - 578 , - 377 , - 336 , - 455 , - 734 , - 1173 , - 1772 , - 2531 , - 890 , - 1969 , - 648 , - 2047 , - 1046 , - 205 , - 2084 , - 1563 , - 1202 , - 1001 , - 960 , - 1079 , - 1358 , - 1797 , - 2396 , - 595 , - 1514 , - 33 , - 1272 , - 111 , - 1670 , - 829 , - 148 , - 2187 , - 1826 , - 1625 , - 1584 , - 1703 , - 1982 , - 2421 , - 460 , - 1219 , - 2138 , - 657 , - 1896 , - 735 , - 2294 , - 1453 , - 772 , - 251 , - 2450 , - 2249 , - 2208 , - 2327 , - 46 , - 485 , - 1084 , - 1843 , - 202 , - 1281 , - 2520 , - 1359 , - 358 , - 2077 , - 1396 , - 875 , - 514 , - 313 , - 272 , - 391 , - 670 , - 1109 , - 1708 , - 2467 , - 826 , - 1905 , - 584 , - 1983 , - 982 , - 141 , - 2020 , - 1499 , - 1138 , - 937 , - 896 , - 1015 , - 1294 , - 1733 , - 2332 , - 531 , - 1450 , - 2529 , - 1208 , - 47 , - 1606 , - 765 , - 84 , - 2123 , - 1762 , - 1561 , - 1520 , - 1639 , - 1918 , - 2357 , - 396 , - 1155 , - 2074 , - 593 , - 1832 , - 671 , - 2230 , - 1389 , - 708 , - 187 , - 2386 , - 2185 , - 2144 , - 2263 , - 2542 , - 421 , - 1020 , - 1779 , - 138 , - 1217 , - 2456 , - 1295 , - 294 , - 2013 , - 1332 , - 811 , - 450 , - 249 , - 208 , - 327 , - 606 , - 1045 , - 1644 , - 2403 , - 762 , - 1841 , - 520 , - 1919 , - 918 , - 77 , - 1956 , - 1435 , - 1074 , - 873 , - 832 , - 951 , - 1230 , - 1669 , - 2268 , - 467 , - 1386 , - 2465 , - 1144 , - 2543 , - 1542 , - 701 , - 20 , - 2059 , - 1698 , - 1497 , - 1456 , - 1575 , - 1854 , - 2293 , - 332 , - 1091 , - 2010 , - 529 , - 1768 , - 607 , - 2166 , - 1325 , - 644 , - 123 , - 2322 , - 2121 , - 2080 , - 2199 , - 2478 , - 357 , - 956 , - 1715 , - 74 , - 1153 , - 2392 , - 1231 , - 230 , - 1949 , - 1268 , - 747 , - 386 , - 185 , - 144 , - 263 , - 542 , - 981 , - 1580 , - 2339 , - 698 , - 1777 , - 456 , - 1855 , - 854 , - 13 , - 1892 , - 1371 , - 1010 , - 809 , - 768 , - 887 , - 1166 , - 1605 , - 2204 , - 403 , - 1322 , - 2401 , - 1080 , - 2479 , - 1478 , - 637 , - 2516 , - 1995 , - 1634 , - 1433 , - 1392 , - 1511 , - 1790 , - 2229 , - 268 , - 1027 , - 1946 , - 465 , - 1704 , - 543 , - 2102 , - 1261 , - 580 , - 59 , - 2258 , - 2057 , - 2016 , - 2135 , - 2414 , - 293 , - 892 , - 1651 , - 10 , - 1089 , - 2328 , - 1167 , - 166 , - 1885 , - 1204 , - 683 , - 322 , - 121 , - 80 , - 199 , - 478 , - 917 , - 1516 , - 2275 , - 634 , - 1713 , - 392 , - 1791 , - 790 , - 2509 , - 1828 , - 1307 , - 946 , - 745 , - 704 , - 823 , - 1102 , - 1541 , - 2140 , - 339 , - 1258 , - 2337 , - 1016 , - 2415 , - 1414 , - 573 , - 2452 , - 1931 , - 1570 , - 1369 , - 1328 , - 1447 , - 1726 , - 2165 , - 204 , - 963 , - 1882 , - 401 , - 1640 , - 479 , - 2038 , - 1197 , - 516 , - 2555 , - 2194 , - 1993 , - 1952 , - 2071 , - 2350 , - 229 , - 828 , - 1587 , - 2506 , - 1025 , - 2264 , - 1103 , - 102 , - 1821 , - 1140 , - 619 , - 258 , - 57 , - 16 , - 135 , - 414 , - 853 , - 1452 , - 2211 , - 570 , - 1649 , - 328 , - 1727 , - 726 , - 2445 , - 1764 , - 1243 , - 882 , - 681 , - 640 , - 759 , - 1038 , - 1477 , - 2076 , - 275 , - 1194 , - 2273 , - 952 , - 2351 , - 1350 , - 509 , - 2388 , - 1867 , - 1506 , - 1305 , - 1264 , - 1383 , - 1662 , - 2101 , - 140 , - 899 , - 1818 , - 337 , - 1576 , - 415 , - 1974 , - 1133 , - 452 , - 2491 , - 2130 , - 1929 , - 1888 , - 2007 , - 2286 , - 165 , - 764 , - 1523 , - 2442 , - 961 , - 2200 , - 1039 , - 38 , - 1757 , - 1076 , - 555 , - 194 , - 2553 , - 2512 , - 71 , - 350 , - 789 , - 1388 , - 2147 , - 506 , - 1585 , - 264 , - 1663 , - 662 , - 2381 , - 1700 , - 1179 , - 818 , - 617 , - 576 , - 695 , - 974 , - 1413 , - 2012 , - 211 , - 1130 , - 2209 , - 888 , - 2287 , - 1286 , - 445 , - 2324 , - 1803 , - 1442 , - 1241 , - 1200 , - 1319 , - 1598 , - 2037 , - 76 , - 835 , - 1754 , - 273 , - 1512 , - 351 , - 1910 , - 1069 , - 388 , - 2427 , - 2066 , - 1865 , - 1824 , - 1943 , - 2222 , - 101 , - 700 , - 1459 , - 2378 , - 897 , - 2136 , - 975 , - 2534 , - 1693 , - 1012 , - 491 , - 130 , - 2489 , - 2448 , - 7 , - 286 , - 725 , - 1324 , - 2083 , - 442 , - 1521 , - 200 , - 1599 , - 598 , - 2317 , - 1636 , - 1115 , - 754 , - 553 , - 512 , - 631 , - 910 , - 1349 , - 1948 , - 147 , - 1066 , - 2145 , - 824 , - 2223 , - 1222 , - 381 , - 2260 , - 1739 , - 1378 , - 1177 , - 1136 , - 1255 , - 1534 , - 1973 , - 12 , - 771 , - 1690 , - 209 , - 1448 , - 287 , - 1846 , - 1005 , - 324 , - 2363 , - 2002 , - 1801 , - 1760 , - 1879 , - 2158 , - 37 , - 636 , - 1395 , - 2314 , - 833 , - 2072 , - 911 , - 2470 , - 1629 , - 948 , - 427 , - 66 , - 2425 , - 2384 , - 2503 , - 222 , - 661 , - 1260 , - 2019 , - 378 , - 1457 , - 136 , - 1535 , - 534 , - 2253 , - 1572 , - 1051 , - 690 , - 489 , - 448 , - 567 , - 846 , - 1285 , - 1884 , - 83 , - 1002 , - 2081 , - 760 , - 2159 , - 1158 , - 317 , - 2196 , - 1675 , - 1314 , - 1113 , - 1072 , - 1191 , - 1470 , - 1909 , - 2508 , - 707 , - 1626 , - 145 , - 1384 , - 223 , - 1782 , - 941 , - 260 , - 2299 , - 1938 , - 1737 , - 1696 , - 1815 , - 2094 , - 2533 , - 572 , - 1331 , - 2250 , - 769 , - 2008 , - 847 , - 2406 , - 1565 , - 884 , - 363 , - 2 , - 2361 , - 2320 , - 2439 , - 158 , - 597 , - 1196 , - 1955 , - 314 , - 1393 , - 72 , - 1471 , - 470 , - 2189 , - 1508 , - 987 , - 626 , - 425 , - 384 , - 503 , - 782 , - 1221 , - 1820 , - 19 , - 938 , - 2017 , - 696 , - 2095 , - 1094 , - 253 , - 2132 , - 1611 , - 1250 , - 1049 , - 1008 , - 1127 , - 1406 , - 1845 , - 2444 , - 643 , - 1562 , - 81 , - 1320 , - 159 , - 1718 , - 877 , - 196 , - 2235 , - 1874 , - 1673 , - 1632 , - 1751 , - 2030 , - 2469 , - 508 , - 1267 , - 2186 , - 705 , - 1944 , - 783 , - 2342 , - 1501 , - 820 , - 299 , - 2498 , - 2297 , - 2256 , - 2375 , - 94 , - 533 , - 1132 , - 1891 , - 250 , - 1329 , - 8 , - 1407 , - 406 , - 2125 , - 1444 , - 923 , - 562 , - 361 , - 320 , - 439 , - 718 , - 1157 , - 1756 , - 2515 , - 874 , - 1953 , - 632 , - 2031 , - 1030 , - 189 , - 2068 , - 1547 , - 1186 , - 985 , - 944 , - 1063 , - 1342 , - 1781 , - 2380 , - 579 , - 1498 , - 17 , - 1256 , - 95 , - 1654 , - 813 , - 132 , - 2171 , - 1810 , - 1609 , - 1568 , - 1687 , - 1966 , - 2405 , - 444 , - 1203 , - 2122 , - 641 , - 1880 , - 719 , - 2278 , - 1437 , - 756 , - 235 , - 2434 , - 2233 , - 2192 , - 2311 , - 30 , - 469 , - 1068 , - 1827 , - 186 , - 1265 , - 2504 , - 1343 , - 342 , - 2061 , - 1380 , - 859 , - 498 , - 297 , - 256 , - 375 , - 654 , - 1093 , - 1692 , - 2451 , - 810 , - 1889 , - 568 , - 1967 , - 966 , - 125 , - 2004 , - 1483 , - 1122 , - 921 , - 880 , - 999 , - 1278 , - 1717 , - 2316 , - 515 , - 1434 , - 2513 , - 1192 , - 31 , - 1590 , - 749 , - 68 , - 2107 , - 1746 , - 1545 , - 1504 , - 1623 , - 1902 , - 2341 , - 380 , - 1139 , - 2058 , - 577 , - 1816 , - 655 , - 2214 , - 1373 , - 692 , - 171 , - 2370 , - 2169 , - 2128 , - 2247 , - 2526 , - 405 , - 1004 , - 1763 , - 122 , - 1201 , - 2440 , - 1279 , - 278 , - 1997 , - 1316 , - 795 , - 434 , - 233 , - 192 , - 311 , - 590 , - 1029 , - 1628 , - 2387 , - 746 , - 1825 , - 504 , - 1903 , - 902 , - 61 , - 1940 , - 1419 , - 1058 , - 857 , - 816 , - 935 , - 1214 , - 1653 , - 2252 , - 451 , - 1370 , - 2449 , - 1128 , - 2527 , - 1526 , - 685 , - 4 , - 2043 , - 1682 , - 1481 , - 1440 , - 1559 , - 1838 , - 2277 , - 316 , - 1075 , - 1994 , - 513 , - 1752 , - 591 , - 2150 , - 1309 , - 628 , - 107 , - 2306 , - 2105 , - 2064 , - 2183 , - 2462 , - 341 , - 940 , - 1699 , - 58 , - 1137 , - 2376 , - 1215 , - 214 , - 1933 , - 1252 , - 731 , - 370 , - 169 , - 128 , - 247 , - 526 , - 965 , - 1564 , - 2323 , - 682 , - 1761 , - 440 , - 1839 , - 838 , - 2557 , - 1876 , - 1355 , - 994 , - 793 , - 752 , - 871 , - 1150 , - 1589 , - 2188 , - 387 , - 1306 , - 2385 , - 1064 , - 2463 , - 1462 , - 621 , - 2500 , - 1979 , - 1618 , - 1417 , - 1376 , - 1495 , - 1774 , - 2213 , - 252 , - 1011 , - 1930 , - 449 , - 1688 , - 527 , - 2086 , - 1245 , - 564 , - 43 , - 2242 , - 2041 , - 2000 , - 2119 , - 2398 , - 277 , - 876 , - 1635 , - 2554 , - 1073 , - 2312 , - 1151 , - 150 , - 1869 , - 1188 , - 667 , - 306 , - 105 , - 64 , - 183 , - 462 , - 901 , - 1500 , - 2259 , - 618 , - 1697 , - 376 , - 1775 , - 774 , - 2493 , - 1812 , - 1291 , - 930 , - 729 , - 688 , - 807 , - 1086 , - 1525 , - 2124 , - 323 , - 1242 , - 2321 , - 1000 , - 2399 , - 1398 , - 557 , - 2436 , - 1915 , - 1554 , - 1353 , - 1312 , - 1431 , - 1710 , - 2149 , - 188 , - 947 , - 1866 , - 385 , - 1624 , - 463 , - 2022 , - 1181 , - 500 , - 2539 , - 2178 , - 1977 , - 1936 , - 2055 , - 2334 , - 213 , - 812 , - 1571 , - 2490 , - 1009 , - 2248 , - 1087 , - 86 , - 1805 , - 1124 , - 603 , - 242 , - 41 , - 0 , - 191 , - 710 , - 1557 , - 108 , - 1611 , - 818 , - 353 , - 216 , - 407 , - 926 , - 1773 , - 324 , - 1827 , - 1034 , - 569 , - 432 , - 623 , - 1142 , - 1989 , - 540 , - 2043 , - 1250 , - 785 , - 648 , - 839 , - 1358 , - 2205 , - 756 , - 2259 , - 1466 , - 1001 , - 864 , - 1055 , - 1574 , - 2421 , - 972 , - 2475 , - 1682 , - 1217 , - 1080 , - 1271 , - 1790 , - 13 , - 1188 , - 67 , - 1898 , - 1433 , - 1296 , - 1487 , - 2006 , - 229 , - 1404 , - 283 , - 2114 , - 1649 , - 1512 , - 1703 , - 2222 , - 445 , - 1620 , - 499 , - 2330 , - 1865 , - 1728 , - 1919 , - 2438 , - 661 , - 1836 , - 715 , - 2546 , - 2081 , - 1944 , - 2135 , - 30 , - 877 , - 2052 , - 931 , - 138 , - 2297 , - 2160 , - 2351 , - 246 , - 1093 , - 2268 , - 1147 , - 354 , - 2513 , - 2376 , - 2567 , - 462 , - 1309 , - 2484 , - 1363 , - 570 , - 105 , - 2592 , - 159 , - 678 , - 1525 , - 76 , - 1579 , - 786 , - 321 , - 184 , - 375 , - 894 , - 1741 , - 292 , - 1795 , - 1002 , - 537 , - 400 , - 591 , - 1110 , - 1957 , - 508 , - 2011 , - 1218 , - 753 , - 616 , - 807 , - 1326 , - 2173 , - 724 , - 2227 , - 1434 , - 969 , - 832 , - 1023 , - 1542 , - 2389 , - 940 , - 2443 , - 1650 , - 1185 , - 1048 , - 1239 , - 1758 , - 2605 , - 1156 , - 35 , - 1866 , - 1401 , - 1264 , - 1455 , - 1974 , - 197 , - 1372 , - 251 , - 2082 , - 1617 , - 1480 , - 1671 , - 2190 , - 413 , - 1588 , - 467 , - 2298 , - 1833 , - 1696 , - 1887 , - 2406 , - 629 , - 1804 , - 683 , - 2514 , - 2049 , - 1912 , - 2103 , - 2622 , - 845 , - 2020 , - 899 , - 106 , - 2265 , - 2128 , - 2319 , - 214 , - 1061 , - 2236 , - 1115 , - 322 , - 2481 , - 2344 , - 2535 , - 430 , - 1277 , - 2452 , - 1331 , - 538 , - 73 , - 2560 , - 127 , - 646 , - 1493 , - 44 , - 1547 , - 754 , - 289 , - 152 , - 343 , - 862 , - 1709 , - 260 , - 1763 , - 970 , - 505 , - 368 , - 559 , - 1078 , - 1925 , - 476 , - 1979 , - 1186 , - 721 , - 584 , - 775 , - 1294 , - 2141 , - 692 , - 2195 , - 1402 , - 937 , - 800 , - 991 , - 1510 , - 2357 , - 908 , - 2411 , - 1618 , - 1153 , - 1016 , - 1207 , - 1726 , - 2573 , - 1124 , - 3 , - 1834 , - 1369 , - 1232 , - 1423 , - 1942 , - 165 , - 1340 , - 219 , - 2050 , - 1585 , - 1448 , - 1639 , - 2158 , - 381 , - 1556 , - 435 , - 2266 , - 1801 , - 1664 , - 1855 , - 2374 , - 597 , - 1772 , - 651 , - 2482 , - 2017 , - 1880 , - 2071 , - 2590 , - 813 , - 1988 , - 867 , - 74 , - 2233 , - 2096 , - 2287 , - 182 , - 1029 , - 2204 , - 1083 , - 290 , - 2449 , - 2312 , - 2503 , - 398 , - 1245 , - 2420 , - 1299 , - 506 , - 41 , - 2528 , - 95 , - 614 , - 1461 , - 12 , - 1515 , - 722 , - 257 , - 120 , - 311 , - 830 , - 1677 , - 228 , - 1731 , - 938 , - 473 , - 336 , - 527 , - 1046 , - 1893 , - 444 , - 1947 , - 1154 , - 689 , - 552 , - 743 , - 1262 , - 2109 , - 660 , - 2163 , - 1370 , - 905 , - 768 , - 959 , - 1478 , - 2325 , - 876 , - 2379 , - 1586 , - 1121 , - 984 , - 1175 , - 1694 , - 2541 , - 1092 , - 2595 , - 1802 , - 1337 , - 1200 , - 1391 , - 1910 , - 133 , - 1308 , - 187 , - 2018 , - 1553 , - 1416 , - 1607 , - 2126 , - 349 , - 1524 , - 403 , - 2234 , - 1769 , - 1632 , - 1823 , - 2342 , - 565 , - 1740 , - 619 , - 2450 , - 1985 , - 1848 , - 2039 , - 2558 , - 781 , - 1956 , - 835 , - 42 , - 2201 , - 2064 , - 2255 , - 150 , - 997 , - 2172 , - 1051 , - 258 , - 2417 , - 2280 , - 2471 , - 366 , - 1213 , - 2388 , - 1267 , - 474 , - 9 , - 2496 , - 63 , - 582 , - 1429 , - 2604 , - 1483 , - 690 , - 225 , - 88 , - 279 , - 798 , - 1645 , - 196 , - 1699 , - 906 , - 441 , - 304 , - 495 , - 1014 , - 1861 , - 412 , - 1915 , - 1122 , - 657 , - 520 , - 711 , - 1230 , - 2077 , - 628 , - 2131 , - 1338 , - 873 , - 736 , - 927 , - 1446 , - 2293 , - 844 , - 2347 , - 1554 , - 1089 , - 952 , - 1143 , - 1662 , - 2509 , - 1060 , - 2563 , - 1770 , - 1305 , - 1168 , - 1359 , - 1878 , - 101 , - 1276 , - 155 , - 1986 , - 1521 , - 1384 , - 1575 , - 2094 , - 317 , - 1492 , - 371 , - 2202 , - 1737 , - 1600 , - 1791 , - 2310 , - 533 , - 1708 , - 587 , - 2418 , - 1953 , - 1816 , - 2007 , - 2526 , - 749 , - 1924 , - 803 , - 10 , - 2169 , - 2032 , - 2223 , - 118 , - 965 , - 2140 , - 1019 , - 226 , - 2385 , - 2248 , - 2439 , - 334 , - 1181 , - 2356 , - 1235 , - 442 , - 2601 , - 2464 , - 31 , - 550 , - 1397 , - 2572 , - 1451 , - 658 , - 193 , - 56 , - 247 , - 766 , - 1613 , - 164 , - 1667 , - 874 , - 409 , - 272 , - 463 , - 982 , - 1829 , - 380 , - 1883 , - 1090 , - 625 , - 488 , - 679 , - 1198 , - 2045 , - 596 , - 2099 , - 1306 , - 841 , - 704 , - 895 , - 1414 , - 2261 , - 812 , - 2315 , - 1522 , - 1057 , - 920 , - 1111 , - 1630 , - 2477 , - 1028 , - 2531 , - 1738 , - 1273 , - 1136 , - 1327 , - 1846 , - 69 , - 1244 , - 123 , - 1954 , - 1489 , - 1352 , - 1543 , - 2062 , - 285 , - 1460 , - 339 , - 2170 , - 1705 , - 1568 , - 1759 , - 2278 , - 501 , - 1676 , - 555 , - 2386 , - 1921 , - 1784 , - 1975 , - 2494 , - 717 , - 1892 , - 771 , - 2602 , - 2137 , - 2000 , - 2191 , - 86 , - 933 , - 2108 , - 987 , - 194 , - 2353 , - 2216 , - 2407 , - 302 , - 1149 , - 2324 , - 1203 , - 410 , - 2569 , - 2432 , - 2623 , - 518 , - 1365 , - 2540 , - 1419 , - 626 , - 161 , - 24 , - 215 , - 734 , - 1581 , - 132 , - 1635 , - 842 , - 377 , - 240 , - 431 , - 950 , - 1797 , - 348 , - 1851 , - 1058 , - 593 , - 456 , - 647 , - 1166 , - 2013 , - 564 , - 2067 , - 1274 , - 809 , - 672 , - 863 , - 1382 , - 2229 , - 780 , - 2283 , - 1490 , - 1025 , - 888 , - 1079 , - 1598 , - 2445 , - 996 , - 2499 , - 1706 , - 1241 , - 1104 , - 1295 , - 1814 , - 37 , - 1212 , - 91 , - 1922 , - 1457 , - 1320 , - 1511 , - 2030 , - 253 , - 1428 , - 307 , - 2138 , - 1673 , - 1536 , - 1727 , - 2246 , - 469 , - 1644 , - 523 , - 2354 , - 1889 , - 1752 , - 1943 , - 2462 , - 685 , - 1860 , - 739 , - 2570 , - 2105 , - 1968 , - 2159 , - 54 , - 901 , - 2076 , - 955 , - 162 , - 2321 , - 2184 , - 2375 , - 270 , - 1117 , - 2292 , - 1171 , - 378 , - 2537 , - 2400 , - 2591 , - 486 , - 1333 , - 2508 , - 1387 , - 594 , - 129 , - 2616 , - 183 , - 702 , - 1549 , - 100 , - 1603 , - 810 , - 345 , - 208 , - 399 , - 918 , - 1765 , - 316 , - 1819 , - 1026 , - 561 , - 424 , - 615 , - 1134 , - 1981 , - 532 , - 2035 , - 1242 , - 777 , - 640 , - 831 , - 1350 , - 2197 , - 748 , - 2251 , - 1458 , - 993 , - 856 , - 1047 , - 1566 , - 2413 , - 964 , - 2467 , - 1674 , - 1209 , - 1072 , - 1263 , - 1782 , - 5 , - 1180 , - 59 , - 1890 , - 1425 , - 1288 , - 1479 , - 1998 , - 221 , - 1396 , - 275 , - 2106 , - 1641 , - 1504 , - 1695 , - 2214 , - 437 , - 1612 , - 491 , - 2322 , - 1857 , - 1720 , - 1911 , - 2430 , - 653 , - 1828 , - 707 , - 2538 , - 2073 , - 1936 , - 2127 , - 22 , - 869 , - 2044 , - 923 , - 130 , - 2289 , - 2152 , - 2343 , - 238 , - 1085 , - 2260 , - 1139 , - 346 , - 2505 , - 2368 , - 2559 , - 454 , - 1301 , - 2476 , - 1355 , - 562 , - 97 , - 2584 , - 151 , - 670 , - 1517 , - 68 , - 1571 , - 778 , - 313 , - 176 , - 367 , - 886 , - 1733 , - 284 , - 1787 , - 994 , - 529 , - 392 , - 583 , - 1102 , - 1949 , - 500 , - 2003 , - 1210 , - 745 , - 608 , - 799 , - 1318 , - 2165 , - 716 , - 2219 , - 1426 , - 961 , - 824 , - 1015 , - 1534 , - 2381 , - 932 , - 2435 , - 1642 , - 1177 , - 1040 , - 1231 , - 1750 , - 2597 , - 1148 , - 27 , - 1858 , - 1393 , - 1256 , - 1447 , - 1966 , - 189 , - 1364 , - 243 , - 2074 , - 1609 , - 1472 , - 1663 , - 2182 , - 405 , - 1580 , - 459 , - 2290 , - 1825 , - 1688 , - 1879 , - 2398 , - 621 , - 1796 , - 675 , - 2506 , - 2041 , - 1904 , - 2095 , - 2614 , - 837 , - 2012 , - 891 , - 98 , - 2257 , - 2120 , - 2311 , - 206 , - 1053 , - 2228 , - 1107 , - 314 , - 2473 , - 2336 , - 2527 , - 422 , - 1269 , - 2444 , - 1323 , - 530 , - 65 , - 2552 , - 119 , - 638 , - 1485 , - 36 , - 1539 , - 746 , - 281 , - 144 , - 335 , - 854 , - 1701 , - 252 , - 1755 , - 962 , - 497 , - 360 , - 551 , - 1070 , - 1917 , - 468 , - 1971 , - 1178 , - 713 , - 576 , - 767 , - 1286 , - 2133 , - 684 , - 2187 , - 1394 , - 929 , - 792 , - 983 , - 1502 , - 2349 , - 900 , - 2403 , - 1610 , - 1145 , - 1008 , - 1199 , - 1718 , - 2565 , - 1116 , - 2619 , - 1826 , - 1361 , - 1224 , - 1415 , - 1934 , - 157 , - 1332 , - 211 , - 2042 , - 1577 , - 1440 , - 1631 , - 2150 , - 373 , - 1548 , - 427 , - 2258 , - 1793 , - 1656 , - 1847 , - 2366 , - 589 , - 1764 , - 643 , - 2474 , - 2009 , - 1872 , - 2063 , - 2582 , - 805 , - 1980 , - 859 , - 66 , - 2225 , - 2088 , - 2279 , - 174 , - 1021 , - 2196 , - 1075 , - 282 , - 2441 , - 2304 , - 2495 , - 390 , - 1237 , - 2412 , - 1291 , - 498 , - 33 , - 2520 , - 87 , - 606 , - 1453 , - 4 , - 1507 , - 714 , - 249 , - 112 , - 303 , - 822 , - 1669 , - 220 , - 1723 , - 930 , - 465 , - 328 , - 519 , - 1038 , - 1885 , - 436 , - 1939 , - 1146 , - 681 , - 544 , - 735 , - 1254 , - 2101 , - 652 , - 2155 , - 1362 , - 897 , - 760 , - 951 , - 1470 , - 2317 , - 868 , - 2371 , - 1578 , - 1113 , - 976 , - 1167 , - 1686 , - 2533 , - 1084 , - 2587 , - 1794 , - 1329 , - 1192 , - 1383 , - 1902 , - 125 , - 1300 , - 179 , - 2010 , - 1545 , - 1408 , - 1599 , - 2118 , - 341 , - 1516 , - 395 , - 2226 , - 1761 , - 1624 , - 1815 , - 2334 , - 557 , - 1732 , - 611 , - 2442 , - 1977 , - 1840 , - 2031 , - 2550 , - 773 , - 1948 , - 827 , - 34 , - 2193 , - 2056 , - 2247 , - 142 , - 989 , - 2164 , - 1043 , - 250 , - 2409 , - 2272 , - 2463 , - 358 , - 1205 , - 2380 , - 1259 , - 466 , - 1 , - 2488 , - 55 , - 574 , - 1421 , - 2596 , - 1475 , - 682 , - 217 , - 80 , - 271 , - 790 , - 1637 , - 188 , - 1691 , - 898 , - 433 , - 296 , - 487 , - 1006 , - 1853 , - 404 , - 1907 , - 1114 , - 649 , - 512 , - 703 , - 1222 , - 2069 , - 620 , - 2123 , - 1330 , - 865 , - 728 , - 919 , - 1438 , - 2285 , - 836 , - 2339 , - 1546 , - 1081 , - 944 , - 1135 , - 1654 , - 2501 , - 1052 , - 2555 , - 1762 , - 1297 , - 1160 , - 1351 , - 1870 , - 93 , - 1268 , - 147 , - 1978 , - 1513 , - 1376 , - 1567 , - 2086 , - 309 , - 1484 , - 363 , - 2194 , - 1729 , - 1592 , - 1783 , - 2302 , - 525 , - 1700 , - 579 , - 2410 , - 1945 , - 1808 , - 1999 , - 2518 , - 741 , - 1916 , - 795 , - 2 , - 2161 , - 2024 , - 2215 , - 110 , - 957 , - 2132 , - 1011 , - 218 , - 2377 , - 2240 , - 2431 , - 326 , - 1173 , - 2348 , - 1227 , - 434 , - 2593 , - 2456 , - 23 , - 542 , - 1389 , - 2564 , - 1443 , - 650 , - 185 , - 48 , - 239 , - 758 , - 1605 , - 156 , - 1659 , - 866 , - 401 , - 264 , - 455 , - 974 , - 1821 , - 372 , - 1875 , - 1082 , - 617 , - 480 , - 671 , - 1190 , - 2037 , - 588 , - 2091 , - 1298 , - 833 , - 696 , - 887 , - 1406 , - 2253 , - 804 , - 2307 , - 1514 , - 1049 , - 912 , - 1103 , - 1622 , - 2469 , - 1020 , - 2523 , - 1730 , - 1265 , - 1128 , - 1319 , - 1838 , - 61 , - 1236 , - 115 , - 1946 , - 1481 , - 1344 , - 1535 , - 2054 , - 277 , - 1452 , - 331 , - 2162 , - 1697 , - 1560 , - 1751 , - 2270 , - 493 , - 1668 , - 547 , - 2378 , - 1913 , - 1776 , - 1967 , - 2486 , - 709 , - 1884 , - 763 , - 2594 , - 2129 , - 1992 , - 2183 , - 78 , - 925 , - 2100 , - 979 , - 186 , - 2345 , - 2208 , - 2399 , - 294 , - 1141 , - 2316 , - 1195 , - 402 , - 2561 , - 2424 , - 2615 , - 510 , - 1357 , - 2532 , - 1411 , - 618 , - 153 , - 16 , - 207 , - 726 , - 1573 , - 124 , - 1627 , - 834 , - 369 , - 232 , - 423 , - 942 , - 1789 , - 340 , - 1843 , - 1050 , - 585 , - 448 , - 639 , - 1158 , - 2005 , - 556 , - 2059 , - 1266 , - 801 , - 664 , - 855 , - 1374 , - 2221 , - 772 , - 2275 , - 1482 , - 1017 , - 880 , - 1071 , - 1590 , - 2437 , - 988 , - 2491 , - 1698 , - 1233 , - 1096 , - 1287 , - 1806 , - 29 , - 1204 , - 83 , - 1914 , - 1449 , - 1312 , - 1503 , - 2022 , - 245 , - 1420 , - 299 , - 2130 , - 1665 , - 1528 , - 1719 , - 2238 , - 461 , - 1636 , - 515 , - 2346 , - 1881 , - 1744 , - 1935 , - 2454 , - 677 , - 1852 , - 731 , - 2562 , - 2097 , - 1960 , - 2151 , - 46 , - 893 , - 2068 , - 947 , - 154 , - 2313 , - 2176 , - 2367 , - 262 , - 1109 , - 2284 , - 1163 , - 370 , - 2529 , - 2392 , - 2583 , - 478 , - 1325 , - 2500 , - 1379 , - 586 , - 121 , - 2608 , - 175 , - 694 , - 1541 , - 92 , - 1595 , - 802 , - 337 , - 200 , - 391 , - 910 , - 1757 , - 308 , - 1811 , - 1018 , - 553 , - 416 , - 607 , - 1126 , - 1973 , - 524 , - 2027 , - 1234 , - 769 , - 632 , - 823 , - 1342 , - 2189 , - 740 , - 2243 , - 1450 , - 985 , - 848 , - 1039 , - 1558 , - 2405 , - 956 , - 2459 , - 1666 , - 1201 , - 1064 , - 1255 , - 1774 , - 2621 , - 1172 , - 51 , - 1882 , - 1417 , - 1280 , - 1471 , - 1990 , - 213 , - 1388 , - 267 , - 2098 , - 1633 , - 1496 , - 1687 , - 2206 , - 429 , - 1604 , - 483 , - 2314 , - 1849 , - 1712 , - 1903 , - 2422 , - 645 , - 1820 , - 699 , - 2530 , - 2065 , - 1928 , - 2119 , - 14 , - 861 , - 2036 , - 915 , - 122 , - 2281 , - 2144 , - 2335 , - 230 , - 1077 , - 2252 , - 1131 , - 338 , - 2497 , - 2360 , - 2551 , - 446 , - 1293 , - 2468 , - 1347 , - 554 , - 89 , - 2576 , - 143 , - 662 , - 1509 , - 60 , - 1563 , - 770 , - 305 , - 168 , - 359 , - 878 , - 1725 , - 276 , - 1779 , - 986 , - 521 , - 384 , - 575 , - 1094 , - 1941 , - 492 , - 1995 , - 1202 , - 737 , - 600 , - 791 , - 1310 , - 2157 , - 708 , - 2211 , - 1418 , - 953 , - 816 , - 1007 , - 1526 , - 2373 , - 924 , - 2427 , - 1634 , - 1169 , - 1032 , - 1223 , - 1742 , - 2589 , - 1140 , - 19 , - 1850 , - 1385 , - 1248 , - 1439 , - 1958 , - 181 , - 1356 , - 235 , - 2066 , - 1601 , - 1464 , - 1655 , - 2174 , - 397 , - 1572 , - 451 , - 2282 , - 1817 , - 1680 , - 1871 , - 2390 , - 613 , - 1788 , - 667 , - 2498 , - 2033 , - 1896 , - 2087 , - 2606 , - 829 , - 2004 , - 883 , - 90 , - 2249 , - 2112 , - 2303 , - 198 , - 1045 , - 2220 , - 1099 , - 306 , - 2465 , - 2328 , - 2519 , - 414 , - 1261 , - 2436 , - 1315 , - 522 , - 57 , - 2544 , - 111 , - 630 , - 1477 , - 28 , - 1531 , - 738 , - 273 , - 136 , - 327 , - 846 , - 1693 , - 244 , - 1747 , - 954 , - 489 , - 352 , - 543 , - 1062 , - 1909 , - 460 , - 1963 , - 1170 , - 705 , - 568 , - 759 , - 1278 , - 2125 , - 676 , - 2179 , - 1386 , - 921 , - 784 , - 975 , - 1494 , - 2341 , - 892 , - 2395 , - 1602 , - 1137 , - 1000 , - 1191 , - 1710 , - 2557 , - 1108 , - 2611 , - 1818 , - 1353 , - 1216 , - 1407 , - 1926 , - 149 , - 1324 , - 203 , - 2034 , - 1569 , - 1432 , - 1623 , - 2142 , - 365 , - 1540 , - 419 , - 2250 , - 1785 , - 1648 , - 1839 , - 2358 , - 581 , - 1756 , - 635 , - 2466 , - 2001 , - 1864 , - 2055 , - 2574 , - 797 , - 1972 , - 851 , - 58 , - 2217 , - 2080 , - 2271 , - 166 , - 1013 , - 2188 , - 1067 , - 274 , - 2433 , - 2296 , - 2487 , - 382 , - 1229 , - 2404 , - 1283 , - 490 , - 25 , - 2512 , - 79 , - 598 , - 1445 , - 2620 , - 1499 , - 706 , - 241 , - 104 , - 295 , - 814 , - 1661 , - 212 , - 1715 , - 922 , - 457 , - 320 , - 511 , - 1030 , - 1877 , - 428 , - 1931 , - 1138 , - 673 , - 536 , - 727 , - 1246 , - 2093 , - 644 , - 2147 , - 1354 , - 889 , - 752 , - 943 , - 1462 , - 2309 , - 860 , - 2363 , - 1570 , - 1105 , - 968 , - 1159 , - 1678 , - 2525 , - 1076 , - 2579 , - 1786 , - 1321 , - 1184 , - 1375 , - 1894 , - 117 , - 1292 , - 171 , - 2002 , - 1537 , - 1400 , - 1591 , - 2110 , - 333 , - 1508 , - 387 , - 2218 , - 1753 , - 1616 , - 1807 , - 2326 , - 549 , - 1724 , - 603 , - 2434 , - 1969 , - 1832 , - 2023 , - 2542 , - 765 , - 1940 , - 819 , - 26 , - 2185 , - 2048 , - 2239 , - 134 , - 981 , - 2156 , - 1035 , - 242 , - 2401 , - 2264 , - 2455 , - 350 , - 1197 , - 2372 , - 1251 , - 458 , - 2617 , - 2480 , - 47 , - 566 , - 1413 , - 2588 , - 1467 , - 674 , - 209 , - 72 , - 263 , - 782 , - 1629 , - 180 , - 1683 , - 890 , - 425 , - 288 , - 479 , - 998 , - 1845 , - 396 , - 1899 , - 1106 , - 641 , - 504 , - 695 , - 1214 , - 2061 , - 612 , - 2115 , - 1322 , - 857 , - 720 , - 911 , - 1430 , - 2277 , - 828 , - 2331 , - 1538 , - 1073 , - 936 , - 1127 , - 1646 , - 2493 , - 1044 , - 2547 , - 1754 , - 1289 , - 1152 , - 1343 , - 1862 , - 85 , - 1260 , - 139 , - 1970 , - 1505 , - 1368 , - 1559 , - 2078 , - 301 , - 1476 , - 355 , - 2186 , - 1721 , - 1584 , - 1775 , - 2294 , - 517 , - 1692 , - 571 , - 2402 , - 1937 , - 1800 , - 1991 , - 2510 , - 733 , - 1908 , - 787 , - 2618 , - 2153 , - 2016 , - 2207 , - 102 , - 949 , - 2124 , - 1003 , - 210 , - 2369 , - 2232 , - 2423 , - 318 , - 1165 , - 2340 , - 1219 , - 426 , - 2585 , - 2448 , - 15 , - 534 , - 1381 , - 2556 , - 1435 , - 642 , - 177 , - 40 , - 231 , - 750 , - 1597 , - 148 , - 1651 , - 858 , - 393 , - 256 , - 447 , - 966 , - 1813 , - 364 , - 1867 , - 1074 , - 609 , - 472 , - 663 , - 1182 , - 2029 , - 580 , - 2083 , - 1290 , - 825 , - 688 , - 879 , - 1398 , - 2245 , - 796 , - 2299 , - 1506 , - 1041 , - 904 , - 1095 , - 1614 , - 2461 , - 1012 , - 2515 , - 1722 , - 1257 , - 1120 , - 1311 , - 1830 , - 53 , - 1228 , - 107 , - 1938 , - 1473 , - 1336 , - 1527 , - 2046 , - 269 , - 1444 , - 323 , - 2154 , - 1689 , - 1552 , - 1743 , - 2262 , - 485 , - 1660 , - 539 , - 2370 , - 1905 , - 1768 , - 1959 , - 2478 , - 701 , - 1876 , - 755 , - 2586 , - 2121 , - 1984 , - 2175 , - 70 , - 917 , - 2092 , - 971 , - 178 , - 2337 , - 2200 , - 2391 , - 286 , - 1133 , - 2308 , - 1187 , - 394 , - 2553 , - 2416 , - 2607 , - 502 , - 1349 , - 2524 , - 1403 , - 610 , - 145 , - 8 , - 199 , - 718 , - 1565 , - 116 , - 1619 , - 826 , - 361 , - 224 , - 415 , - 934 , - 1781 , - 332 , - 1835 , - 1042 , - 577 , - 440 , - 631 , - 1150 , - 1997 , - 548 , - 2051 , - 1258 , - 793 , - 656 , - 847 , - 1366 , - 2213 , - 764 , - 2267 , - 1474 , - 1009 , - 872 , - 1063 , - 1582 , - 2429 , - 980 , - 2483 , - 1690 , - 1225 , - 1088 , - 1279 , - 1798 , - 21 , - 1196 , - 75 , - 1906 , - 1441 , - 1304 , - 1495 , - 2014 , - 237 , - 1412 , - 291 , - 2122 , - 1657 , - 1520 , - 1711 , - 2230 , - 453 , - 1628 , - 507 , - 2338 , - 1873 , - 1736 , - 1927 , - 2446 , - 669 , - 1844 , - 723 , - 2554 , - 2089 , - 1952 , - 2143 , - 38 , - 885 , - 2060 , - 939 , - 146 , - 2305 , - 2168 , - 2359 , - 254 , - 1101 , - 2276 , - 1155 , - 362 , - 2521 , - 2384 , - 2575 , - 470 , - 1317 , - 2492 , - 1371 , - 578 , - 113 , - 2600 , - 167 , - 686 , - 1533 , - 84 , - 1587 , - 794 , - 329 , - 192 , - 383 , - 902 , - 1749 , - 300 , - 1803 , - 1010 , - 545 , - 408 , - 599 , - 1118 , - 1965 , - 516 , - 2019 , - 1226 , - 761 , - 624 , - 815 , - 1334 , - 2181 , - 732 , - 2235 , - 1442 , - 977 , - 840 , - 1031 , - 1550 , - 2397 , - 948 , - 2451 , - 1658 , - 1193 , - 1056 , - 1247 , - 1766 , - 2613 , - 1164 , - 43 , - 1874 , - 1409 , - 1272 , - 1463 , - 1982 , - 205 , - 1380 , - 259 , - 2090 , - 1625 , - 1488 , - 1679 , - 2198 , - 421 , - 1596 , - 475 , - 2306 , - 1841 , - 1704 , - 1895 , - 2414 , - 637 , - 1812 , - 691 , - 2522 , - 2057 , - 1920 , - 2111 , - 6 , - 853 , - 2028 , - 907 , - 114 , - 2273 , - 2136 , - 2327 , - 222 , - 1069 , - 2244 , - 1123 , - 330 , - 2489 , - 2352 , - 2543 , - 438 , - 1285 , - 2460 , - 1339 , - 546 , - 81 , - 2568 , - 135 , - 654 , - 1501 , - 52 , - 1555 , - 762 , - 297 , - 160 , - 351 , - 870 , - 1717 , - 268 , - 1771 , - 978 , - 513 , - 376 , - 567 , - 1086 , - 1933 , - 484 , - 1987 , - 1194 , - 729 , - 592 , - 783 , - 1302 , - 2149 , - 700 , - 2203 , - 1410 , - 945 , - 808 , - 999 , - 1518 , - 2365 , - 916 , - 2419 , - 1626 , - 1161 , - 1024 , - 1215 , - 1734 , - 2581 , - 1132 , - 11 , - 1842 , - 1377 , - 1240 , - 1431 , - 1950 , - 173 , - 1348 , - 227 , - 2058 , - 1593 , - 1456 , - 1647 , - 2166 , - 389 , - 1564 , - 443 , - 2274 , - 1809 , - 1672 , - 1863 , - 2382 , - 605 , - 1780 , - 659 , - 2490 , - 2025 , - 1888 , - 2079 , - 2598 , - 821 , - 1996 , - 875 , - 82 , - 2241 , - 2104 , - 2295 , - 190 , - 1037 , - 2212 , - 1091 , - 298 , - 2457 , - 2320 , - 2511 , - 406 , - 1253 , - 2428 , - 1307 , - 514 , - 49 , - 2536 , - 103 , - 622 , - 1469 , - 20 , - 1523 , - 730 , - 265 , - 128 , - 319 , - 838 , - 1685 , - 236 , - 1739 , - 946 , - 481 , - 344 , - 535 , - 1054 , - 1901 , - 452 , - 1955 , - 1162 , - 697 , - 560 , - 751 , - 1270 , - 2117 , - 668 , - 2171 , - 1378 , - 913 , - 776 , - 967 , - 1486 , - 2333 , - 884 , - 2387 , - 1594 , - 1129 , - 992 , - 1183 , - 1702 , - 2549 , - 1100 , - 2603 , - 1810 , - 1345 , - 1208 , - 1399 , - 1918 , - 141 , - 1316 , - 195 , - 2026 , - 1561 , - 1424 , - 1615 , - 2134 , - 357 , - 1532 , - 411 , - 2242 , - 1777 , - 1640 , - 1831 , - 2350 , - 573 , - 1748 , - 627 , - 2458 , - 1993 , - 1856 , - 2047 , - 2566 , - 789 , - 1964 , - 843 , - 50 , - 2209 , - 2072 , - 2263 , - 158 , - 1005 , - 2180 , - 1059 , - 266 , - 2425 , - 2288 , - 2479 , - 374 , - 1221 , - 2396 , - 1275 , - 482 , - 17 , - 2504 , - 71 , - 590 , - 1437 , - 2612 , - 1491 , - 698 , - 233 , - 96 , - 287 , - 806 , - 1653 , - 204 , - 1707 , - 914 , - 449 , - 312 , - 503 , - 1022 , - 1869 , - 420 , - 1923 , - 1130 , - 665 , - 528 , - 719 , - 1238 , - 2085 , - 636 , - 2139 , - 1346 , - 881 , - 744 , - 935 , - 1454 , - 2301 , - 852 , - 2355 , - 1562 , - 1097 , - 960 , - 1151 , - 1670 , - 2517 , - 1068 , - 2571 , - 1778 , - 1313 , - 1176 , - 1367 , - 1886 , - 109 , - 1284 , - 163 , - 1994 , - 1529 , - 1392 , - 1583 , - 2102 , - 325 , - 1500 , - 379 , - 2210 , - 1745 , - 1608 , - 1799 , - 2318 , - 541 , - 1716 , - 595 , - 2426 , - 1961 , - 1824 , - 2015 , - 2534 , - 757 , - 1932 , - 811 , - 18 , - 2177 , - 2040 , - 2231 , - 126 , - 973 , - 2148 , - 1027 , - 234 , - 2393 , - 2256 , - 2447 , - 342 , - 1189 , - 2364 , - 1243 , - 450 , - 2609 , - 2472 , - 39 , - 558 , - 1405 , - 2580 , - 1459 , - 666 , - 201 , - 64 , - 255 , - 774 , - 1621 , - 172 , - 1675 , - 882 , - 417 , - 280 , - 471 , - 990 , - 1837 , - 388 , - 1891 , - 1098 , - 633 , - 496 , - 687 , - 1206 , - 2053 , - 604 , - 2107 , - 1314 , - 849 , - 712 , - 903 , - 1422 , - 2269 , - 820 , - 2323 , - 1530 , - 1065 , - 928 , - 1119 , - 1638 , - 2485 , - 1036 , - 2539 , - 1746 , - 1281 , - 1144 , - 1335 , - 1854 , - 77 , - 1252 , - 131 , - 1962 , - 1497 , - 1360 , - 1551 , - 2070 , - 293 , - 1468 , - 347 , - 2178 , - 1713 , - 1576 , - 1767 , - 2286 , - 509 , - 1684 , - 563 , - 2394 , - 1929 , - 1792 , - 1983 , - 2502 , - 725 , - 1900 , - 779 , - 2610 , - 2145 , - 2008 , - 2199 , - 94 , - 941 , - 2116 , - 995 , - 202 , - 2361 , - 2224 , - 2415 , - 310 , - 1157 , - 2332 , - 1211 , - 418 , - 2577 , - 2440 , - 7 , - 526 , - 1373 , - 2548 , - 1427 , - 634 , - 169 , - 32 , - 223 , - 742 , - 1589 , - 140 , - 1643 , - 850 , - 385 , - 248 , - 439 , - 958 , - 1805 , - 356 , - 1859 , - 1066 , - 601 , - 464 , - 655 , - 1174 , - 2021 , - 572 , - 2075 , - 1282 , - 817 , - 680 , - 871 , - 1390 , - 2237 , - 788 , - 2291 , - 1498 , - 1033 , - 896 , - 1087 , - 1606 , - 2453 , - 1004 , - 2507 , - 1714 , - 1249 , - 1112 , - 1303 , - 1822 , - 45 , - 1220 , - 99 , - 1930 , - 1465 , - 1328 , - 1519 , - 2038 , - 261 , - 1436 , - 315 , - 2146 , - 1681 , - 1544 , - 1735 , - 2254 , - 477 , - 1652 , - 531 , - 2362 , - 1897 , - 1760 , - 1951 , - 2470 , - 693 , - 1868 , - 747 , - 2578 , - 2113 , - 1976 , - 2167 , - 62 , - 909 , - 2084 , - 963 , - 170 , - 2329 , - 2192 , - 2383 , - 278 , - 1125 , - 2300 , - 1179 , - 386 , - 2545 , - 2408 , - 2599 , - 494 , - 1341 , - 2516 , - 1395 , - 602 , - 137 , - 0 , - 631 , - 2270 , - 2229 , - 508 , - 2483 , - 90 , - 1393 , - 1016 , - 1647 , - 598 , - 557 , - 1524 , - 811 , - 1106 , - 2409 , - 2032 , - 2663 , - 1614 , - 1573 , - 2540 , - 1827 , - 2122 , - 737 , - 360 , - 991 , - 2630 , - 2589 , - 868 , - 155 , - 450 , - 1753 , - 1376 , - 2007 , - 958 , - 917 , - 1884 , - 1171 , - 1466 , - 81 , - 2392 , - 335 , - 1974 , - 1933 , - 212 , - 2187 , - 2482 , - 1097 , - 720 , - 1351 , - 302 , - 261 , - 1228 , - 515 , - 810 , - 2113 , - 1736 , - 2367 , - 1318 , - 1277 , - 2244 , - 1531 , - 1826 , - 441 , - 64 , - 695 , - 2334 , - 2293 , - 572 , - 2547 , - 154 , - 1457 , - 1080 , - 1711 , - 662 , - 621 , - 1588 , - 875 , - 1170 , - 2473 , - 2096 , - 39 , - 1678 , - 1637 , - 2604 , - 1891 , - 2186 , - 801 , - 424 , - 1055 , - 6 , - 2653 , - 932 , - 219 , - 514 , - 1817 , - 1440 , - 2071 , - 1022 , - 981 , - 1948 , - 1235 , - 1530 , - 145 , - 2456 , - 399 , - 2038 , - 1997 , - 276 , - 2251 , - 2546 , - 1161 , - 784 , - 1415 , - 366 , - 325 , - 1292 , - 579 , - 874 , - 2177 , - 1800 , - 2431 , - 1382 , - 1341 , - 2308 , - 1595 , - 1890 , - 505 , - 128 , - 759 , - 2398 , - 2357 , - 636 , - 2611 , - 218 , - 1521 , - 1144 , - 1775 , - 726 , - 685 , - 1652 , - 939 , - 1234 , - 2537 , - 2160 , - 103 , - 1742 , - 1701 , - 2668 , - 1955 , - 2250 , - 865 , - 488 , - 1119 , - 70 , - 29 , - 996 , - 283 , - 578 , - 1881 , - 1504 , - 2135 , - 1086 , - 1045 , - 2012 , - 1299 , - 1594 , - 209 , - 2520 , - 463 , - 2102 , - 2061 , - 340 , - 2315 , - 2610 , - 1225 , - 848 , - 1479 , - 430 , - 389 , - 1356 , - 643 , - 938 , - 2241 , - 1864 , - 2495 , - 1446 , - 1405 , - 2372 , - 1659 , - 1954 , - 569 , - 192 , - 823 , - 2462 , - 2421 , - 700 , - 2675 , - 282 , - 1585 , - 1208 , - 1839 , - 790 , - 749 , - 1716 , - 1003 , - 1298 , - 2601 , - 2224 , - 167 , - 1806 , - 1765 , - 44 , - 2019 , - 2314 , - 929 , - 552 , - 1183 , - 134 , - 93 , - 1060 , - 347 , - 642 , - 1945 , - 1568 , - 2199 , - 1150 , - 1109 , - 2076 , - 1363 , - 1658 , - 273 , - 2584 , - 527 , - 2166 , - 2125 , - 404 , - 2379 , - 2674 , - 1289 , - 912 , - 1543 , - 494 , - 453 , - 1420 , - 707 , - 1002 , - 2305 , - 1928 , - 2559 , - 1510 , - 1469 , - 2436 , - 1723 , - 2018 , - 633 , - 256 , - 887 , - 2526 , - 2485 , - 764 , - 51 , - 346 , - 1649 , - 1272 , - 1903 , - 854 , - 813 , - 1780 , - 1067 , - 1362 , - 2665 , - 2288 , - 231 , - 1870 , - 1829 , - 108 , - 2083 , - 2378 , - 993 , - 616 , - 1247 , - 198 , - 157 , - 1124 , - 411 , - 706 , - 2009 , - 1632 , - 2263 , - 1214 , - 1173 , - 2140 , - 1427 , - 1722 , - 337 , - 2648 , - 591 , - 2230 , - 2189 , - 468 , - 2443 , - 50 , - 1353 , - 976 , - 1607 , - 558 , - 517 , - 1484 , - 771 , - 1066 , - 2369 , - 1992 , - 2623 , - 1574 , - 1533 , - 2500 , - 1787 , - 2082 , - 697 , - 320 , - 951 , - 2590 , - 2549 , - 828 , - 115 , - 410 , - 1713 , - 1336 , - 1967 , - 918 , - 877 , - 1844 , - 1131 , - 1426 , - 41 , - 2352 , - 295 , - 1934 , - 1893 , - 172 , - 2147 , - 2442 , - 1057 , - 680 , - 1311 , - 262 , - 221 , - 1188 , - 475 , - 770 , - 2073 , - 1696 , - 2327 , - 1278 , - 1237 , - 2204 , - 1491 , - 1786 , - 401 , - 24 , - 655 , - 2294 , - 2253 , - 532 , - 2507 , - 114 , - 1417 , - 1040 , - 1671 , - 622 , - 581 , - 1548 , - 835 , - 1130 , - 2433 , - 2056 , - 2687 , - 1638 , - 1597 , - 2564 , - 1851 , - 2146 , - 761 , - 384 , - 1015 , - 2654 , - 2613 , - 892 , - 179 , - 474 , - 1777 , - 1400 , - 2031 , - 982 , - 941 , - 1908 , - 1195 , - 1490 , - 105 , - 2416 , - 359 , - 1998 , - 1957 , - 236 , - 2211 , - 2506 , - 1121 , - 744 , - 1375 , - 326 , - 285 , - 1252 , - 539 , - 834 , - 2137 , - 1760 , - 2391 , - 1342 , - 1301 , - 2268 , - 1555 , - 1850 , - 465 , - 88 , - 719 , - 2358 , - 2317 , - 596 , - 2571 , - 178 , - 1481 , - 1104 , - 1735 , - 686 , - 645 , - 1612 , - 899 , - 1194 , - 2497 , - 2120 , - 63 , - 1702 , - 1661 , - 2628 , - 1915 , - 2210 , - 825 , - 448 , - 1079 , - 30 , - 2677 , - 956 , - 243 , - 538 , - 1841 , - 1464 , - 2095 , - 1046 , - 1005 , - 1972 , - 1259 , - 1554 , - 169 , - 2480 , - 423 , - 2062 , - 2021 , - 300 , - 2275 , - 2570 , - 1185 , - 808 , - 1439 , - 390 , - 349 , - 1316 , - 603 , - 898 , - 2201 , - 1824 , - 2455 , - 1406 , - 1365 , - 2332 , - 1619 , - 1914 , - 529 , - 152 , - 783 , - 2422 , - 2381 , - 660 , - 2635 , - 242 , - 1545 , - 1168 , - 1799 , - 750 , - 709 , - 1676 , - 963 , - 1258 , - 2561 , - 2184 , - 127 , - 1766 , - 1725 , - 4 , - 1979 , - 2274 , - 889 , - 512 , - 1143 , - 94 , - 53 , - 1020 , - 307 , - 602 , - 1905 , - 1528 , - 2159 , - 1110 , - 1069 , - 2036 , - 1323 , - 1618 , - 233 , - 2544 , - 487 , - 2126 , - 2085 , - 364 , - 2339 , - 2634 , - 1249 , - 872 , - 1503 , - 454 , - 413 , - 1380 , - 667 , - 962 , - 2265 , - 1888 , - 2519 , - 1470 , - 1429 , - 2396 , - 1683 , - 1978 , - 593 , - 216 , - 847 , - 2486 , - 2445 , - 724 , - 11 , - 306 , - 1609 , - 1232 , - 1863 , - 814 , - 773 , - 1740 , - 1027 , - 1322 , - 2625 , - 2248 , - 191 , - 1830 , - 1789 , - 68 , - 2043 , - 2338 , - 953 , - 576 , - 1207 , - 158 , - 117 , - 1084 , - 371 , - 666 , - 1969 , - 1592 , - 2223 , - 1174 , - 1133 , - 2100 , - 1387 , - 1682 , - 297 , - 2608 , - 551 , - 2190 , - 2149 , - 428 , - 2403 , - 10 , - 1313 , - 936 , - 1567 , - 518 , - 477 , - 1444 , - 731 , - 1026 , - 2329 , - 1952 , - 2583 , - 1534 , - 1493 , - 2460 , - 1747 , - 2042 , - 657 , - 280 , - 911 , - 2550 , - 2509 , - 788 , - 75 , - 370 , - 1673 , - 1296 , - 1927 , - 878 , - 837 , - 1804 , - 1091 , - 1386 , - 1 , - 2312 , - 255 , - 1894 , - 1853 , - 132 , - 2107 , - 2402 , - 1017 , - 640 , - 1271 , - 222 , - 181 , - 1148 , - 435 , - 730 , - 2033 , - 1656 , - 2287 , - 1238 , - 1197 , - 2164 , - 1451 , - 1746 , - 361 , - 2672 , - 615 , - 2254 , - 2213 , - 492 , - 2467 , - 74 , - 1377 , - 1000 , - 1631 , - 582 , - 541 , - 1508 , - 795 , - 1090 , - 2393 , - 2016 , - 2647 , - 1598 , - 1557 , - 2524 , - 1811 , - 2106 , - 721 , - 344 , - 975 , - 2614 , - 2573 , - 852 , - 139 , - 434 , - 1737 , - 1360 , - 1991 , - 942 , - 901 , - 1868 , - 1155 , - 1450 , - 65 , - 2376 , - 319 , - 1958 , - 1917 , - 196 , - 2171 , - 2466 , - 1081 , - 704 , - 1335 , - 286 , - 245 , - 1212 , - 499 , - 794 , - 2097 , - 1720 , - 2351 , - 1302 , - 1261 , - 2228 , - 1515 , - 1810 , - 425 , - 48 , - 679 , - 2318 , - 2277 , - 556 , - 2531 , - 138 , - 1441 , - 1064 , - 1695 , - 646 , - 605 , - 1572 , - 859 , - 1154 , - 2457 , - 2080 , - 23 , - 1662 , - 1621 , - 2588 , - 1875 , - 2170 , - 785 , - 408 , - 1039 , - 2678 , - 2637 , - 916 , - 203 , - 498 , - 1801 , - 1424 , - 2055 , - 1006 , - 965 , - 1932 , - 1219 , - 1514 , - 129 , - 2440 , - 383 , - 2022 , - 1981 , - 260 , - 2235 , - 2530 , - 1145 , - 768 , - 1399 , - 350 , - 309 , - 1276 , - 563 , - 858 , - 2161 , - 1784 , - 2415 , - 1366 , - 1325 , - 2292 , - 1579 , - 1874 , - 489 , - 112 , - 743 , - 2382 , - 2341 , - 620 , - 2595 , - 202 , - 1505 , - 1128 , - 1759 , - 710 , - 669 , - 1636 , - 923 , - 1218 , - 2521 , - 2144 , - 87 , - 1726 , - 1685 , - 2652 , - 1939 , - 2234 , - 849 , - 472 , - 1103 , - 54 , - 13 , - 980 , - 267 , - 562 , - 1865 , - 1488 , - 2119 , - 1070 , - 1029 , - 1996 , - 1283 , - 1578 , - 193 , - 2504 , - 447 , - 2086 , - 2045 , - 324 , - 2299 , - 2594 , - 1209 , - 832 , - 1463 , - 414 , - 373 , - 1340 , - 627 , - 922 , - 2225 , - 1848 , - 2479 , - 1430 , - 1389 , - 2356 , - 1643 , - 1938 , - 553 , - 176 , - 807 , - 2446 , - 2405 , - 684 , - 2659 , - 266 , - 1569 , - 1192 , - 1823 , - 774 , - 733 , - 1700 , - 987 , - 1282 , - 2585 , - 2208 , - 151 , - 1790 , - 1749 , - 28 , - 2003 , - 2298 , - 913 , - 536 , - 1167 , - 118 , - 77 , - 1044 , - 331 , - 626 , - 1929 , - 1552 , - 2183 , - 1134 , - 1093 , - 2060 , - 1347 , - 1642 , - 257 , - 2568 , - 511 , - 2150 , - 2109 , - 388 , - 2363 , - 2658 , - 1273 , - 896 , - 1527 , - 478 , - 437 , - 1404 , - 691 , - 986 , - 2289 , - 1912 , - 2543 , - 1494 , - 1453 , - 2420 , - 1707 , - 2002 , - 617 , - 240 , - 871 , - 2510 , - 2469 , - 748 , - 35 , - 330 , - 1633 , - 1256 , - 1887 , - 838 , - 797 , - 1764 , - 1051 , - 1346 , - 2649 , - 2272 , - 215 , - 1854 , - 1813 , - 92 , - 2067 , - 2362 , - 977 , - 600 , - 1231 , - 182 , - 141 , - 1108 , - 395 , - 690 , - 1993 , - 1616 , - 2247 , - 1198 , - 1157 , - 2124 , - 1411 , - 1706 , - 321 , - 2632 , - 575 , - 2214 , - 2173 , - 452 , - 2427 , - 34 , - 1337 , - 960 , - 1591 , - 542 , - 501 , - 1468 , - 755 , - 1050 , - 2353 , - 1976 , - 2607 , - 1558 , - 1517 , - 2484 , - 1771 , - 2066 , - 681 , - 304 , - 935 , - 2574 , - 2533 , - 812 , - 99 , - 394 , - 1697 , - 1320 , - 1951 , - 902 , - 861 , - 1828 , - 1115 , - 1410 , - 25 , - 2336 , - 279 , - 1918 , - 1877 , - 156 , - 2131 , - 2426 , - 1041 , - 664 , - 1295 , - 246 , - 205 , - 1172 , - 459 , - 754 , - 2057 , - 1680 , - 2311 , - 1262 , - 1221 , - 2188 , - 1475 , - 1770 , - 385 , - 8 , - 639 , - 2278 , - 2237 , - 516 , - 2491 , - 98 , - 1401 , - 1024 , - 1655 , - 606 , - 565 , - 1532 , - 819 , - 1114 , - 2417 , - 2040 , - 2671 , - 1622 , - 1581 , - 2548 , - 1835 , - 2130 , - 745 , - 368 , - 999 , - 2638 , - 2597 , - 876 , - 163 , - 458 , - 1761 , - 1384 , - 2015 , - 966 , - 925 , - 1892 , - 1179 , - 1474 , - 89 , - 2400 , - 343 , - 1982 , - 1941 , - 220 , - 2195 , - 2490 , - 1105 , - 728 , - 1359 , - 310 , - 269 , - 1236 , - 523 , - 818 , - 2121 , - 1744 , - 2375 , - 1326 , - 1285 , - 2252 , - 1539 , - 1834 , - 449 , - 72 , - 703 , - 2342 , - 2301 , - 580 , - 2555 , - 162 , - 1465 , - 1088 , - 1719 , - 670 , - 629 , - 1596 , - 883 , - 1178 , - 2481 , - 2104 , - 47 , - 1686 , - 1645 , - 2612 , - 1899 , - 2194 , - 809 , - 432 , - 1063 , - 14 , - 2661 , - 940 , - 227 , - 522 , - 1825 , - 1448 , - 2079 , - 1030 , - 989 , - 1956 , - 1243 , - 1538 , - 153 , - 2464 , - 407 , - 2046 , - 2005 , - 284 , - 2259 , - 2554 , - 1169 , - 792 , - 1423 , - 374 , - 333 , - 1300 , - 587 , - 882 , - 2185 , - 1808 , - 2439 , - 1390 , - 1349 , - 2316 , - 1603 , - 1898 , - 513 , - 136 , - 767 , - 2406 , - 2365 , - 644 , - 2619 , - 226 , - 1529 , - 1152 , - 1783 , - 734 , - 693 , - 1660 , - 947 , - 1242 , - 2545 , - 2168 , - 111 , - 1750 , - 1709 , - 2676 , - 1963 , - 2258 , - 873 , - 496 , - 1127 , - 78 , - 37 , - 1004 , - 291 , - 586 , - 1889 , - 1512 , - 2143 , - 1094 , - 1053 , - 2020 , - 1307 , - 1602 , - 217 , - 2528 , - 471 , - 2110 , - 2069 , - 348 , - 2323 , - 2618 , - 1233 , - 856 , - 1487 , - 438 , - 397 , - 1364 , - 651 , - 946 , - 2249 , - 1872 , - 2503 , - 1454 , - 1413 , - 2380 , - 1667 , - 1962 , - 577 , - 200 , - 831 , - 2470 , - 2429 , - 708 , - 2683 , - 290 , - 1593 , - 1216 , - 1847 , - 798 , - 757 , - 1724 , - 1011 , - 1306 , - 2609 , - 2232 , - 175 , - 1814 , - 1773 , - 52 , - 2027 , - 2322 , - 937 , - 560 , - 1191 , - 142 , - 101 , - 1068 , - 355 , - 650 , - 1953 , - 1576 , - 2207 , - 1158 , - 1117 , - 2084 , - 1371 , - 1666 , - 281 , - 2592 , - 535 , - 2174 , - 2133 , - 412 , - 2387 , - 2682 , - 1297 , - 920 , - 1551 , - 502 , - 461 , - 1428 , - 715 , - 1010 , - 2313 , - 1936 , - 2567 , - 1518 , - 1477 , - 2444 , - 1731 , - 2026 , - 641 , - 264 , - 895 , - 2534 , - 2493 , - 772 , - 59 , - 354 , - 1657 , - 1280 , - 1911 , - 862 , - 821 , - 1788 , - 1075 , - 1370 , - 2673 , - 2296 , - 239 , - 1878 , - 1837 , - 116 , - 2091 , - 2386 , - 1001 , - 624 , - 1255 , - 206 , - 165 , - 1132 , - 419 , - 714 , - 2017 , - 1640 , - 2271 , - 1222 , - 1181 , - 2148 , - 1435 , - 1730 , - 345 , - 2656 , - 599 , - 2238 , - 2197 , - 476 , - 2451 , - 58 , - 1361 , - 984 , - 1615 , - 566 , - 525 , - 1492 , - 779 , - 1074 , - 2377 , - 2000 , - 2631 , - 1582 , - 1541 , - 2508 , - 1795 , - 2090 , - 705 , - 328 , - 959 , - 2598 , - 2557 , - 836 , - 123 , - 418 , - 1721 , - 1344 , - 1975 , - 926 , - 885 , - 1852 , - 1139 , - 1434 , - 49 , - 2360 , - 303 , - 1942 , - 1901 , - 180 , - 2155 , - 2450 , - 1065 , - 688 , - 1319 , - 270 , - 229 , - 1196 , - 483 , - 778 , - 2081 , - 1704 , - 2335 , - 1286 , - 1245 , - 2212 , - 1499 , - 1794 , - 409 , - 32 , - 663 , - 2302 , - 2261 , - 540 , - 2515 , - 122 , - 1425 , - 1048 , - 1679 , - 630 , - 589 , - 1556 , - 843 , - 1138 , - 2441 , - 2064 , - 7 , - 1646 , - 1605 , - 2572 , - 1859 , - 2154 , - 769 , - 392 , - 1023 , - 2662 , - 2621 , - 900 , - 187 , - 482 , - 1785 , - 1408 , - 2039 , - 990 , - 949 , - 1916 , - 1203 , - 1498 , - 113 , - 2424 , - 367 , - 2006 , - 1965 , - 244 , - 2219 , - 2514 , - 1129 , - 752 , - 1383 , - 334 , - 293 , - 1260 , - 547 , - 842 , - 2145 , - 1768 , - 2399 , - 1350 , - 1309 , - 2276 , - 1563 , - 1858 , - 473 , - 96 , - 727 , - 2366 , - 2325 , - 604 , - 2579 , - 186 , - 1489 , - 1112 , - 1743 , - 694 , - 653 , - 1620 , - 907 , - 1202 , - 2505 , - 2128 , - 71 , - 1710 , - 1669 , - 2636 , - 1923 , - 2218 , - 833 , - 456 , - 1087 , - 38 , - 2685 , - 964 , - 251 , - 546 , - 1849 , - 1472 , - 2103 , - 1054 , - 1013 , - 1980 , - 1267 , - 1562 , - 177 , - 2488 , - 431 , - 2070 , - 2029 , - 308 , - 2283 , - 2578 , - 1193 , - 816 , - 1447 , - 398 , - 357 , - 1324 , - 611 , - 906 , - 2209 , - 1832 , - 2463 , - 1414 , - 1373 , - 2340 , - 1627 , - 1922 , - 537 , - 160 , - 791 , - 2430 , - 2389 , - 668 , - 2643 , - 250 , - 1553 , - 1176 , - 1807 , - 758 , - 717 , - 1684 , - 971 , - 1266 , - 2569 , - 2192 , - 135 , - 1774 , - 1733 , - 12 , - 1987 , - 2282 , - 897 , - 520 , - 1151 , - 102 , - 61 , - 1028 , - 315 , - 610 , - 1913 , - 1536 , - 2167 , - 1118 , - 1077 , - 2044 , - 1331 , - 1626 , - 241 , - 2552 , - 495 , - 2134 , - 2093 , - 372 , - 2347 , - 2642 , - 1257 , - 880 , - 1511 , - 462 , - 421 , - 1388 , - 675 , - 970 , - 2273 , - 1896 , - 2527 , - 1478 , - 1437 , - 2404 , - 1691 , - 1986 , - 601 , - 224 , - 855 , - 2494 , - 2453 , - 732 , - 19 , - 314 , - 1617 , - 1240 , - 1871 , - 822 , - 781 , - 1748 , - 1035 , - 1330 , - 2633 , - 2256 , - 199 , - 1838 , - 1797 , - 76 , - 2051 , - 2346 , - 961 , - 584 , - 1215 , - 166 , - 125 , - 1092 , - 379 , - 674 , - 1977 , - 1600 , - 2231 , - 1182 , - 1141 , - 2108 , - 1395 , - 1690 , - 305 , - 2616 , - 559 , - 2198 , - 2157 , - 436 , - 2411 , - 18 , - 1321 , - 944 , - 1575 , - 526 , - 485 , - 1452 , - 739 , - 1034 , - 2337 , - 1960 , - 2591 , - 1542 , - 1501 , - 2468 , - 1755 , - 2050 , - 665 , - 288 , - 919 , - 2558 , - 2517 , - 796 , - 83 , - 378 , - 1681 , - 1304 , - 1935 , - 886 , - 845 , - 1812 , - 1099 , - 1394 , - 9 , - 2320 , - 263 , - 1902 , - 1861 , - 140 , - 2115 , - 2410 , - 1025 , - 648 , - 1279 , - 230 , - 189 , - 1156 , - 443 , - 738 , - 2041 , - 1664 , - 2295 , - 1246 , - 1205 , - 2172 , - 1459 , - 1754 , - 369 , - 2680 , - 623 , - 2262 , - 2221 , - 500 , - 2475 , - 82 , - 1385 , - 1008 , - 1639 , - 590 , - 549 , - 1516 , - 803 , - 1098 , - 2401 , - 2024 , - 2655 , - 1606 , - 1565 , - 2532 , - 1819 , - 2114 , - 729 , - 352 , - 983 , - 2622 , - 2581 , - 860 , - 147 , - 442 , - 1745 , - 1368 , - 1999 , - 950 , - 909 , - 1876 , - 1163 , - 1458 , - 73 , - 2384 , - 327 , - 1966 , - 1925 , - 204 , - 2179 , - 2474 , - 1089 , - 712 , - 1343 , - 294 , - 253 , - 1220 , - 507 , - 802 , - 2105 , - 1728 , - 2359 , - 1310 , - 1269 , - 2236 , - 1523 , - 1818 , - 433 , - 56 , - 687 , - 2326 , - 2285 , - 564 , - 2539 , - 146 , - 1449 , - 1072 , - 1703 , - 654 , - 613 , - 1580 , - 867 , - 1162 , - 2465 , - 2088 , - 31 , - 1670 , - 1629 , - 2596 , - 1883 , - 2178 , - 793 , - 416 , - 1047 , - 2686 , - 2645 , - 924 , - 211 , - 506 , - 1809 , - 1432 , - 2063 , - 1014 , - 973 , - 1940 , - 1227 , - 1522 , - 137 , - 2448 , - 391 , - 2030 , - 1989 , - 268 , - 2243 , - 2538 , - 1153 , - 776 , - 1407 , - 358 , - 317 , - 1284 , - 571 , - 866 , - 2169 , - 1792 , - 2423 , - 1374 , - 1333 , - 2300 , - 1587 , - 1882 , - 497 , - 120 , - 751 , - 2390 , - 2349 , - 628 , - 2603 , - 210 , - 1513 , - 1136 , - 1767 , - 718 , - 677 , - 1644 , - 931 , - 1226 , - 2529 , - 2152 , - 95 , - 1734 , - 1693 , - 2660 , - 1947 , - 2242 , - 857 , - 480 , - 1111 , - 62 , - 21 , - 988 , - 275 , - 570 , - 1873 , - 1496 , - 2127 , - 1078 , - 1037 , - 2004 , - 1291 , - 1586 , - 201 , - 2512 , - 455 , - 2094 , - 2053 , - 332 , - 2307 , - 2602 , - 1217 , - 840 , - 1471 , - 422 , - 381 , - 1348 , - 635 , - 930 , - 2233 , - 1856 , - 2487 , - 1438 , - 1397 , - 2364 , - 1651 , - 1946 , - 561 , - 184 , - 815 , - 2454 , - 2413 , - 692 , - 2667 , - 274 , - 1577 , - 1200 , - 1831 , - 782 , - 741 , - 1708 , - 995 , - 1290 , - 2593 , - 2216 , - 159 , - 1798 , - 1757 , - 36 , - 2011 , - 2306 , - 921 , - 544 , - 1175 , - 126 , - 85 , - 1052 , - 339 , - 634 , - 1937 , - 1560 , - 2191 , - 1142 , - 1101 , - 2068 , - 1355 , - 1650 , - 265 , - 2576 , - 519 , - 2158 , - 2117 , - 396 , - 2371 , - 2666 , - 1281 , - 904 , - 1535 , - 486 , - 445 , - 1412 , - 699 , - 994 , - 2297 , - 1920 , - 2551 , - 1502 , - 1461 , - 2428 , - 1715 , - 2010 , - 625 , - 248 , - 879 , - 2518 , - 2477 , - 756 , - 43 , - 338 , - 1641 , - 1264 , - 1895 , - 846 , - 805 , - 1772 , - 1059 , - 1354 , - 2657 , - 2280 , - 223 , - 1862 , - 1821 , - 100 , - 2075 , - 2370 , - 985 , - 608 , - 1239 , - 190 , - 149 , - 1116 , - 403 , - 698 , - 2001 , - 1624 , - 2255 , - 1206 , - 1165 , - 2132 , - 1419 , - 1714 , - 329 , - 2640 , - 583 , - 2222 , - 2181 , - 460 , - 2435 , - 42 , - 1345 , - 968 , - 1599 , - 550 , - 509 , - 1476 , - 763 , - 1058 , - 2361 , - 1984 , - 2615 , - 1566 , - 1525 , - 2492 , - 1779 , - 2074 , - 689 , - 312 , - 943 , - 2582 , - 2541 , - 820 , - 107 , - 402 , - 1705 , - 1328 , - 1959 , - 910 , - 869 , - 1836 , - 1123 , - 1418 , - 33 , - 2344 , - 287 , - 1926 , - 1885 , - 164 , - 2139 , - 2434 , - 1049 , - 672 , - 1303 , - 254 , - 213 , - 1180 , - 467 , - 762 , - 2065 , - 1688 , - 2319 , - 1270 , - 1229 , - 2196 , - 1483 , - 1778 , - 393 , - 16 , - 647 , - 2286 , - 2245 , - 524 , - 2499 , - 106 , - 1409 , - 1032 , - 1663 , - 614 , - 573 , - 1540 , - 827 , - 1122 , - 2425 , - 2048 , - 2679 , - 1630 , - 1589 , - 2556 , - 1843 , - 2138 , - 753 , - 376 , - 1007 , - 2646 , - 2605 , - 884 , - 171 , - 466 , - 1769 , - 1392 , - 2023 , - 974 , - 933 , - 1900 , - 1187 , - 1482 , - 97 , - 2408 , - 351 , - 1990 , - 1949 , - 228 , - 2203 , - 2498 , - 1113 , - 736 , - 1367 , - 318 , - 277 , - 1244 , - 531 , - 826 , - 2129 , - 1752 , - 2383 , - 1334 , - 1293 , - 2260 , - 1547 , - 1842 , - 457 , - 80 , - 711 , - 2350 , - 2309 , - 588 , - 2563 , - 170 , - 1473 , - 1096 , - 1727 , - 678 , - 637 , - 1604 , - 891 , - 1186 , - 2489 , - 2112 , - 55 , - 1694 , - 1653 , - 2620 , - 1907 , - 2202 , - 817 , - 440 , - 1071 , - 22 , - 2669 , - 948 , - 235 , - 530 , - 1833 , - 1456 , - 2087 , - 1038 , - 997 , - 1964 , - 1251 , - 1546 , - 161 , - 2472 , - 415 , - 2054 , - 2013 , - 292 , - 2267 , - 2562 , - 1177 , - 800 , - 1431 , - 382 , - 341 , - 1308 , - 595 , - 890 , - 2193 , - 1816 , - 2447 , - 1398 , - 1357 , - 2324 , - 1611 , - 1906 , - 521 , - 144 , - 775 , - 2414 , - 2373 , - 652 , - 2627 , - 234 , - 1537 , - 1160 , - 1791 , - 742 , - 701 , - 1668 , - 955 , - 1250 , - 2553 , - 2176 , - 119 , - 1758 , - 1717 , - 2684 , - 1971 , - 2266 , - 881 , - 504 , - 1135 , - 86 , - 45 , - 1012 , - 299 , - 594 , - 1897 , - 1520 , - 2151 , - 1102 , - 1061 , - 2028 , - 1315 , - 1610 , - 225 , - 2536 , - 479 , - 2118 , - 2077 , - 356 , - 2331 , - 2626 , - 1241 , - 864 , - 1495 , - 446 , - 405 , - 1372 , - 659 , - 954 , - 2257 , - 1880 , - 2511 , - 1462 , - 1421 , - 2388 , - 1675 , - 1970 , - 585 , - 208 , - 839 , - 2478 , - 2437 , - 716 , - 3 , - 298 , - 1601 , - 1224 , - 1855 , - 806 , - 765 , - 1732 , - 1019 , - 1314 , - 2617 , - 2240 , - 183 , - 1822 , - 1781 , - 60 , - 2035 , - 2330 , - 945 , - 568 , - 1199 , - 150 , - 109 , - 1076 , - 363 , - 658 , - 1961 , - 1584 , - 2215 , - 1166 , - 1125 , - 2092 , - 1379 , - 1674 , - 289 , - 2600 , - 543 , - 2182 , - 2141 , - 420 , - 2395 , - 2 , - 1305 , - 928 , - 1559 , - 510 , - 469 , - 1436 , - 723 , - 1018 , - 2321 , - 1944 , - 2575 , - 1526 , - 1485 , - 2452 , - 1739 , - 2034 , - 649 , - 272 , - 903 , - 2542 , - 2501 , - 780 , - 67 , - 362 , - 1665 , - 1288 , - 1919 , - 870 , - 829 , - 1796 , - 1083 , - 1378 , - 2681 , - 2304 , - 247 , - 1886 , - 1845 , - 124 , - 2099 , - 2394 , - 1009 , - 632 , - 1263 , - 214 , - 173 , - 1140 , - 427 , - 722 , - 2025 , - 1648 , - 2279 , - 1230 , - 1189 , - 2156 , - 1443 , - 1738 , - 353 , - 2664 , - 607 , - 2246 , - 2205 , - 484 , - 2459 , - 66 , - 1369 , - 992 , - 1623 , - 574 , - 533 , - 1500 , - 787 , - 1082 , - 2385 , - 2008 , - 2639 , - 1590 , - 1549 , - 2516 , - 1803 , - 2098 , - 713 , - 336 , - 967 , - 2606 , - 2565 , - 844 , - 131 , - 426 , - 1729 , - 1352 , - 1983 , - 934 , - 893 , - 1860 , - 1147 , - 1442 , - 57 , - 2368 , - 311 , - 1950 , - 1909 , - 188 , - 2163 , - 2458 , - 1073 , - 696 , - 1327 , - 278 , - 237 , - 1204 , - 491 , - 786 , - 2089 , - 1712 , - 2343 , - 1294 , - 1253 , - 2220 , - 1507 , - 1802 , - 417 , - 40 , - 671 , - 2310 , - 2269 , - 548 , - 2523 , - 130 , - 1433 , - 1056 , - 1687 , - 638 , - 597 , - 1564 , - 851 , - 1146 , - 2449 , - 2072 , - 15 , - 1654 , - 1613 , - 2580 , - 1867 , - 2162 , - 777 , - 400 , - 1031 , - 2670 , - 2629 , - 908 , - 195 , - 490 , - 1793 , - 1416 , - 2047 , - 998 , - 957 , - 1924 , - 1211 , - 1506 , - 121 , - 2432 , - 375 , - 2014 , - 1973 , - 252 , - 2227 , - 2522 , - 1137 , - 760 , - 1391 , - 342 , - 301 , - 1268 , - 555 , - 850 , - 2153 , - 1776 , - 2407 , - 1358 , - 1317 , - 2284 , - 1571 , - 1866 , - 481 , - 104 , - 735 , - 2374 , - 2333 , - 612 , - 2587 , - 194 , - 1497 , - 1120 , - 1751 , - 702 , - 661 , - 1628 , - 915 , - 1210 , - 2513 , - 2136 , - 79 , - 1718 , - 1677 , - 2644 , - 1931 , - 2226 , - 841 , - 464 , - 1095 , - 46 , - 5 , - 972 , - 259 , - 554 , - 1857 , - 1480 , - 2111 , - 1062 , - 1021 , - 1988 , - 1275 , - 1570 , - 185 , - 2496 , - 439 , - 2078 , - 2037 , - 316 , - 2291 , - 2586 , - 1201 , - 824 , - 1455 , - 406 , - 365 , - 1332 , - 619 , - 914 , - 2217 , - 1840 , - 2471 , - 1422 , - 1381 , - 2348 , - 1635 , - 1930 , - 545 , - 168 , - 799 , - 2438 , - 2397 , - 676 , - 2651 , - 258 , - 1561 , - 1184 , - 1815 , - 766 , - 725 , - 1692 , - 979 , - 1274 , - 2577 , - 2200 , - 143 , - 1782 , - 1741 , - 20 , - 1995 , - 2290 , - 905 , - 528 , - 1159 , - 110 , - 69 , - 1036 , - 323 , - 618 , - 1921 , - 1544 , - 2175 , - 1126 , - 1085 , - 2052 , - 1339 , - 1634 , - 249 , - 2560 , - 503 , - 2142 , - 2101 , - 380 , - 2355 , - 2650 , - 1265 , - 888 , - 1519 , - 470 , - 429 , - 1396 , - 683 , - 978 , - 2281 , - 1904 , - 2535 , - 1486 , - 1445 , - 2412 , - 1699 , - 1994 , - 609 , - 232 , - 863 , - 2502 , - 2461 , - 740 , - 27 , - 322 , - 1625 , - 1248 , - 1879 , - 830 , - 789 , - 1756 , - 1043 , - 1338 , - 2641 , - 2264 , - 207 , - 1846 , - 1805 , - 84 , - 2059 , - 2354 , - 969 , - 592 , - 1223 , - 174 , - 133 , - 1100 , - 387 , - 682 , - 1985 , - 1608 , - 2239 , - 1190 , - 1149 , - 2116 , - 1403 , - 1698 , - 313 , - 2624 , - 567 , - 2206 , - 2165 , - 444 , - 2419 , - 26 , - 1329 , - 952 , - 1583 , - 534 , - 493 , - 1460 , - 747 , - 1042 , - 2345 , - 1968 , - 2599 , - 1550 , - 1509 , - 2476 , - 1763 , - 2058 , - 673 , - 296 , - 927 , - 2566 , - 2525 , - 804 , - 91 , - 386 , - 1689 , - 1312 , - 1943 , - 894 , - 853 , - 1820 , - 1107 , - 1402 , - 17 , - 2328 , - 271 , - 1910 , - 1869 , - 148 , - 2123 , - 2418 , - 1033 , - 656 , - 1287 , - 238 , - 197 , - 1164 , - 451 , - 746 , - 2049 , - 1672 , - 2303 , - 1254 , - 1213 , - 2180 , - 1467 , - 1762 , - 377 , - 0 , - 315 , - 974 , - 1977 , - 572 , - 2263 , - 1546 , - 1173 , - 1144 , - 1459 , - 2118 , - 369 , - 1716 , - 655 , - 2690 , - 2317 , - 2288 , - 2603 , - 510 , - 1513 , - 108 , - 1799 , - 1082 , - 709 , - 680 , - 995 , - 1654 , - 2657 , - 1252 , - 191 , - 2226 , - 1853 , - 1824 , - 2139 , - 46 , - 1049 , - 2396 , - 1335 , - 618 , - 245 , - 216 , - 531 , - 1190 , - 2193 , - 788 , - 2479 , - 1762 , - 1389 , - 1360 , - 1675 , - 2334 , - 585 , - 1932 , - 871 , - 154 , - 2533 , - 2504 , - 67 , - 726 , - 1729 , - 324 , - 2015 , - 1298 , - 925 , - 896 , - 1211 , - 1870 , - 121 , - 1468 , - 407 , - 2442 , - 2069 , - 2040 , - 2355 , - 262 , - 1265 , - 2612 , - 1551 , - 834 , - 461 , - 432 , - 747 , - 1406 , - 2409 , - 1004 , - 2695 , - 1978 , - 1605 , - 1576 , - 1891 , - 2550 , - 801 , - 2148 , - 1087 , - 370 , - 2749 , - 2720 , - 283 , - 942 , - 1945 , - 540 , - 2231 , - 1514 , - 1141 , - 1112 , - 1427 , - 2086 , - 337 , - 1684 , - 623 , - 2658 , - 2285 , - 2256 , - 2571 , - 478 , - 1481 , - 76 , - 1767 , - 1050 , - 677 , - 648 , - 963 , - 1622 , - 2625 , - 1220 , - 159 , - 2194 , - 1821 , - 1792 , - 2107 , - 14 , - 1017 , - 2364 , - 1303 , - 586 , - 213 , - 184 , - 499 , - 1158 , - 2161 , - 756 , - 2447 , - 1730 , - 1357 , - 1328 , - 1643 , - 2302 , - 553 , - 1900 , - 839 , - 122 , - 2501 , - 2472 , - 35 , - 694 , - 1697 , - 292 , - 1983 , - 1266 , - 893 , - 864 , - 1179 , - 1838 , - 89 , - 1436 , - 375 , - 2410 , - 2037 , - 2008 , - 2323 , - 230 , - 1233 , - 2580 , - 1519 , - 802 , - 429 , - 400 , - 715 , - 1374 , - 2377 , - 972 , - 2663 , - 1946 , - 1573 , - 1544 , - 1859 , - 2518 , - 769 , - 2116 , - 1055 , - 338 , - 2717 , - 2688 , - 251 , - 910 , - 1913 , - 508 , - 2199 , - 1482 , - 1109 , - 1080 , - 1395 , - 2054 , - 305 , - 1652 , - 591 , - 2626 , - 2253 , - 2224 , - 2539 , - 446 , - 1449 , - 44 , - 1735 , - 1018 , - 645 , - 616 , - 931 , - 1590 , - 2593 , - 1188 , - 127 , - 2162 , - 1789 , - 1760 , - 2075 , - 2734 , - 985 , - 2332 , - 1271 , - 554 , - 181 , - 152 , - 467 , - 1126 , - 2129 , - 724 , - 2415 , - 1698 , - 1325 , - 1296 , - 1611 , - 2270 , - 521 , - 1868 , - 807 , - 90 , - 2469 , - 2440 , - 3 , - 662 , - 1665 , - 260 , - 1951 , - 1234 , - 861 , - 832 , - 1147 , - 1806 , - 57 , - 1404 , - 343 , - 2378 , - 2005 , - 1976 , - 2291 , - 198 , - 1201 , - 2548 , - 1487 , - 770 , - 397 , - 368 , - 683 , - 1342 , - 2345 , - 940 , - 2631 , - 1914 , - 1541 , - 1512 , - 1827 , - 2486 , - 737 , - 2084 , - 1023 , - 306 , - 2685 , - 2656 , - 219 , - 878 , - 1881 , - 476 , - 2167 , - 1450 , - 1077 , - 1048 , - 1363 , - 2022 , - 273 , - 1620 , - 559 , - 2594 , - 2221 , - 2192 , - 2507 , - 414 , - 1417 , - 12 , - 1703 , - 986 , - 613 , - 584 , - 899 , - 1558 , - 2561 , - 1156 , - 95 , - 2130 , - 1757 , - 1728 , - 2043 , - 2702 , - 953 , - 2300 , - 1239 , - 522 , - 149 , - 120 , - 435 , - 1094 , - 2097 , - 692 , - 2383 , - 1666 , - 1293 , - 1264 , - 1579 , - 2238 , - 489 , - 1836 , - 775 , - 58 , - 2437 , - 2408 , - 2723 , - 630 , - 1633 , - 228 , - 1919 , - 1202 , - 829 , - 800 , - 1115 , - 1774 , - 25 , - 1372 , - 311 , - 2346 , - 1973 , - 1944 , - 2259 , - 166 , - 1169 , - 2516 , - 1455 , - 738 , - 365 , - 336 , - 651 , - 1310 , - 2313 , - 908 , - 2599 , - 1882 , - 1509 , - 1480 , - 1795 , - 2454 , - 705 , - 2052 , - 991 , - 274 , - 2653 , - 2624 , - 187 , - 846 , - 1849 , - 444 , - 2135 , - 1418 , - 1045 , - 1016 , - 1331 , - 1990 , - 241 , - 1588 , - 527 , - 2562 , - 2189 , - 2160 , - 2475 , - 382 , - 1385 , - 2732 , - 1671 , - 954 , - 581 , - 552 , - 867 , - 1526 , - 2529 , - 1124 , - 63 , - 2098 , - 1725 , - 1696 , - 2011 , - 2670 , - 921 , - 2268 , - 1207 , - 490 , - 117 , - 88 , - 403 , - 1062 , - 2065 , - 660 , - 2351 , - 1634 , - 1261 , - 1232 , - 1547 , - 2206 , - 457 , - 1804 , - 743 , - 26 , - 2405 , - 2376 , - 2691 , - 598 , - 1601 , - 196 , - 1887 , - 1170 , - 797 , - 768 , - 1083 , - 1742 , - 2745 , - 1340 , - 279 , - 2314 , - 1941 , - 1912 , - 2227 , - 134 , - 1137 , - 2484 , - 1423 , - 706 , - 333 , - 304 , - 619 , - 1278 , - 2281 , - 876 , - 2567 , - 1850 , - 1477 , - 1448 , - 1763 , - 2422 , - 673 , - 2020 , - 959 , - 242 , - 2621 , - 2592 , - 155 , - 814 , - 1817 , - 412 , - 2103 , - 1386 , - 1013 , - 984 , - 1299 , - 1958 , - 209 , - 1556 , - 495 , - 2530 , - 2157 , - 2128 , - 2443 , - 350 , - 1353 , - 2700 , - 1639 , - 922 , - 549 , - 520 , - 835 , - 1494 , - 2497 , - 1092 , - 31 , - 2066 , - 1693 , - 1664 , - 1979 , - 2638 , - 889 , - 2236 , - 1175 , - 458 , - 85 , - 56 , - 371 , - 1030 , - 2033 , - 628 , - 2319 , - 1602 , - 1229 , - 1200 , - 1515 , - 2174 , - 425 , - 1772 , - 711 , - 2746 , - 2373 , - 2344 , - 2659 , - 566 , - 1569 , - 164 , - 1855 , - 1138 , - 765 , - 736 , - 1051 , - 1710 , - 2713 , - 1308 , - 247 , - 2282 , - 1909 , - 1880 , - 2195 , - 102 , - 1105 , - 2452 , - 1391 , - 674 , - 301 , - 272 , - 587 , - 1246 , - 2249 , - 844 , - 2535 , - 1818 , - 1445 , - 1416 , - 1731 , - 2390 , - 641 , - 1988 , - 927 , - 210 , - 2589 , - 2560 , - 123 , - 782 , - 1785 , - 380 , - 2071 , - 1354 , - 981 , - 952 , - 1267 , - 1926 , - 177 , - 1524 , - 463 , - 2498 , - 2125 , - 2096 , - 2411 , - 318 , - 1321 , - 2668 , - 1607 , - 890 , - 517 , - 488 , - 803 , - 1462 , - 2465 , - 1060 , - 2751 , - 2034 , - 1661 , - 1632 , - 1947 , - 2606 , - 857 , - 2204 , - 1143 , - 426 , - 53 , - 24 , - 339 , - 998 , - 2001 , - 596 , - 2287 , - 1570 , - 1197 , - 1168 , - 1483 , - 2142 , - 393 , - 1740 , - 679 , - 2714 , - 2341 , - 2312 , - 2627 , - 534 , - 1537 , - 132 , - 1823 , - 1106 , - 733 , - 704 , - 1019 , - 1678 , - 2681 , - 1276 , - 215 , - 2250 , - 1877 , - 1848 , - 2163 , - 70 , - 1073 , - 2420 , - 1359 , - 642 , - 269 , - 240 , - 555 , - 1214 , - 2217 , - 812 , - 2503 , - 1786 , - 1413 , - 1384 , - 1699 , - 2358 , - 609 , - 1956 , - 895 , - 178 , - 2557 , - 2528 , - 91 , - 750 , - 1753 , - 348 , - 2039 , - 1322 , - 949 , - 920 , - 1235 , - 1894 , - 145 , - 1492 , - 431 , - 2466 , - 2093 , - 2064 , - 2379 , - 286 , - 1289 , - 2636 , - 1575 , - 858 , - 485 , - 456 , - 771 , - 1430 , - 2433 , - 1028 , - 2719 , - 2002 , - 1629 , - 1600 , - 1915 , - 2574 , - 825 , - 2172 , - 1111 , - 394 , - 21 , - 2744 , - 307 , - 966 , - 1969 , - 564 , - 2255 , - 1538 , - 1165 , - 1136 , - 1451 , - 2110 , - 361 , - 1708 , - 647 , - 2682 , - 2309 , - 2280 , - 2595 , - 502 , - 1505 , - 100 , - 1791 , - 1074 , - 701 , - 672 , - 987 , - 1646 , - 2649 , - 1244 , - 183 , - 2218 , - 1845 , - 1816 , - 2131 , - 38 , - 1041 , - 2388 , - 1327 , - 610 , - 237 , - 208 , - 523 , - 1182 , - 2185 , - 780 , - 2471 , - 1754 , - 1381 , - 1352 , - 1667 , - 2326 , - 577 , - 1924 , - 863 , - 146 , - 2525 , - 2496 , - 59 , - 718 , - 1721 , - 316 , - 2007 , - 1290 , - 917 , - 888 , - 1203 , - 1862 , - 113 , - 1460 , - 399 , - 2434 , - 2061 , - 2032 , - 2347 , - 254 , - 1257 , - 2604 , - 1543 , - 826 , - 453 , - 424 , - 739 , - 1398 , - 2401 , - 996 , - 2687 , - 1970 , - 1597 , - 1568 , - 1883 , - 2542 , - 793 , - 2140 , - 1079 , - 362 , - 2741 , - 2712 , - 275 , - 934 , - 1937 , - 532 , - 2223 , - 1506 , - 1133 , - 1104 , - 1419 , - 2078 , - 329 , - 1676 , - 615 , - 2650 , - 2277 , - 2248 , - 2563 , - 470 , - 1473 , - 68 , - 1759 , - 1042 , - 669 , - 640 , - 955 , - 1614 , - 2617 , - 1212 , - 151 , - 2186 , - 1813 , - 1784 , - 2099 , - 6 , - 1009 , - 2356 , - 1295 , - 578 , - 205 , - 176 , - 491 , - 1150 , - 2153 , - 748 , - 2439 , - 1722 , - 1349 , - 1320 , - 1635 , - 2294 , - 545 , - 1892 , - 831 , - 114 , - 2493 , - 2464 , - 27 , - 686 , - 1689 , - 284 , - 1975 , - 1258 , - 885 , - 856 , - 1171 , - 1830 , - 81 , - 1428 , - 367 , - 2402 , - 2029 , - 2000 , - 2315 , - 222 , - 1225 , - 2572 , - 1511 , - 794 , - 421 , - 392 , - 707 , - 1366 , - 2369 , - 964 , - 2655 , - 1938 , - 1565 , - 1536 , - 1851 , - 2510 , - 761 , - 2108 , - 1047 , - 330 , - 2709 , - 2680 , - 243 , - 902 , - 1905 , - 500 , - 2191 , - 1474 , - 1101 , - 1072 , - 1387 , - 2046 , - 297 , - 1644 , - 583 , - 2618 , - 2245 , - 2216 , - 2531 , - 438 , - 1441 , - 36 , - 1727 , - 1010 , - 637 , - 608 , - 923 , - 1582 , - 2585 , - 1180 , - 119 , - 2154 , - 1781 , - 1752 , - 2067 , - 2726 , - 977 , - 2324 , - 1263 , - 546 , - 173 , - 144 , - 459 , - 1118 , - 2121 , - 716 , - 2407 , - 1690 , - 1317 , - 1288 , - 1603 , - 2262 , - 513 , - 1860 , - 799 , - 82 , - 2461 , - 2432 , - 2747 , - 654 , - 1657 , - 252 , - 1943 , - 1226 , - 853 , - 824 , - 1139 , - 1798 , - 49 , - 1396 , - 335 , - 2370 , - 1997 , - 1968 , - 2283 , - 190 , - 1193 , - 2540 , - 1479 , - 762 , - 389 , - 360 , - 675 , - 1334 , - 2337 , - 932 , - 2623 , - 1906 , - 1533 , - 1504 , - 1819 , - 2478 , - 729 , - 2076 , - 1015 , - 298 , - 2677 , - 2648 , - 211 , - 870 , - 1873 , - 468 , - 2159 , - 1442 , - 1069 , - 1040 , - 1355 , - 2014 , - 265 , - 1612 , - 551 , - 2586 , - 2213 , - 2184 , - 2499 , - 406 , - 1409 , - 4 , - 1695 , - 978 , - 605 , - 576 , - 891 , - 1550 , - 2553 , - 1148 , - 87 , - 2122 , - 1749 , - 1720 , - 2035 , - 2694 , - 945 , - 2292 , - 1231 , - 514 , - 141 , - 112 , - 427 , - 1086 , - 2089 , - 684 , - 2375 , - 1658 , - 1285 , - 1256 , - 1571 , - 2230 , - 481 , - 1828 , - 767 , - 50 , - 2429 , - 2400 , - 2715 , - 622 , - 1625 , - 220 , - 1911 , - 1194 , - 821 , - 792 , - 1107 , - 1766 , - 17 , - 1364 , - 303 , - 2338 , - 1965 , - 1936 , - 2251 , - 158 , - 1161 , - 2508 , - 1447 , - 730 , - 357 , - 328 , - 643 , - 1302 , - 2305 , - 900 , - 2591 , - 1874 , - 1501 , - 1472 , - 1787 , - 2446 , - 697 , - 2044 , - 983 , - 266 , - 2645 , - 2616 , - 179 , - 838 , - 1841 , - 436 , - 2127 , - 1410 , - 1037 , - 1008 , - 1323 , - 1982 , - 233 , - 1580 , - 519 , - 2554 , - 2181 , - 2152 , - 2467 , - 374 , - 1377 , - 2724 , - 1663 , - 946 , - 573 , - 544 , - 859 , - 1518 , - 2521 , - 1116 , - 55 , - 2090 , - 1717 , - 1688 , - 2003 , - 2662 , - 913 , - 2260 , - 1199 , - 482 , - 109 , - 80 , - 395 , - 1054 , - 2057 , - 652 , - 2343 , - 1626 , - 1253 , - 1224 , - 1539 , - 2198 , - 449 , - 1796 , - 735 , - 18 , - 2397 , - 2368 , - 2683 , - 590 , - 1593 , - 188 , - 1879 , - 1162 , - 789 , - 760 , - 1075 , - 1734 , - 2737 , - 1332 , - 271 , - 2306 , - 1933 , - 1904 , - 2219 , - 126 , - 1129 , - 2476 , - 1415 , - 698 , - 325 , - 296 , - 611 , - 1270 , - 2273 , - 868 , - 2559 , - 1842 , - 1469 , - 1440 , - 1755 , - 2414 , - 665 , - 2012 , - 951 , - 234 , - 2613 , - 2584 , - 147 , - 806 , - 1809 , - 404 , - 2095 , - 1378 , - 1005 , - 976 , - 1291 , - 1950 , - 201 , - 1548 , - 487 , - 2522 , - 2149 , - 2120 , - 2435 , - 342 , - 1345 , - 2692 , - 1631 , - 914 , - 541 , - 512 , - 827 , - 1486 , - 2489 , - 1084 , - 23 , - 2058 , - 1685 , - 1656 , - 1971 , - 2630 , - 881 , - 2228 , - 1167 , - 450 , - 77 , - 48 , - 363 , - 1022 , - 2025 , - 620 , - 2311 , - 1594 , - 1221 , - 1192 , - 1507 , - 2166 , - 417 , - 1764 , - 703 , - 2738 , - 2365 , - 2336 , - 2651 , - 558 , - 1561 , - 156 , - 1847 , - 1130 , - 757 , - 728 , - 1043 , - 1702 , - 2705 , - 1300 , - 239 , - 2274 , - 1901 , - 1872 , - 2187 , - 94 , - 1097 , - 2444 , - 1383 , - 666 , - 293 , - 264 , - 579 , - 1238 , - 2241 , - 836 , - 2527 , - 1810 , - 1437 , - 1408 , - 1723 , - 2382 , - 633 , - 1980 , - 919 , - 202 , - 2581 , - 2552 , - 115 , - 774 , - 1777 , - 372 , - 2063 , - 1346 , - 973 , - 944 , - 1259 , - 1918 , - 169 , - 1516 , - 455 , - 2490 , - 2117 , - 2088 , - 2403 , - 310 , - 1313 , - 2660 , - 1599 , - 882 , - 509 , - 480 , - 795 , - 1454 , - 2457 , - 1052 , - 2743 , - 2026 , - 1653 , - 1624 , - 1939 , - 2598 , - 849 , - 2196 , - 1135 , - 418 , - 45 , - 16 , - 331 , - 990 , - 1993 , - 588 , - 2279 , - 1562 , - 1189 , - 1160 , - 1475 , - 2134 , - 385 , - 1732 , - 671 , - 2706 , - 2333 , - 2304 , - 2619 , - 526 , - 1529 , - 124 , - 1815 , - 1098 , - 725 , - 696 , - 1011 , - 1670 , - 2673 , - 1268 , - 207 , - 2242 , - 1869 , - 1840 , - 2155 , - 62 , - 1065 , - 2412 , - 1351 , - 634 , - 261 , - 232 , - 547 , - 1206 , - 2209 , - 804 , - 2495 , - 1778 , - 1405 , - 1376 , - 1691 , - 2350 , - 601 , - 1948 , - 887 , - 170 , - 2549 , - 2520 , - 83 , - 742 , - 1745 , - 340 , - 2031 , - 1314 , - 941 , - 912 , - 1227 , - 1886 , - 137 , - 1484 , - 423 , - 2458 , - 2085 , - 2056 , - 2371 , - 278 , - 1281 , - 2628 , - 1567 , - 850 , - 477 , - 448 , - 763 , - 1422 , - 2425 , - 1020 , - 2711 , - 1994 , - 1621 , - 1592 , - 1907 , - 2566 , - 817 , - 2164 , - 1103 , - 386 , - 13 , - 2736 , - 299 , - 958 , - 1961 , - 556 , - 2247 , - 1530 , - 1157 , - 1128 , - 1443 , - 2102 , - 353 , - 1700 , - 639 , - 2674 , - 2301 , - 2272 , - 2587 , - 494 , - 1497 , - 92 , - 1783 , - 1066 , - 693 , - 664 , - 979 , - 1638 , - 2641 , - 1236 , - 175 , - 2210 , - 1837 , - 1808 , - 2123 , - 30 , - 1033 , - 2380 , - 1319 , - 602 , - 229 , - 200 , - 515 , - 1174 , - 2177 , - 772 , - 2463 , - 1746 , - 1373 , - 1344 , - 1659 , - 2318 , - 569 , - 1916 , - 855 , - 138 , - 2517 , - 2488 , - 51 , - 710 , - 1713 , - 308 , - 1999 , - 1282 , - 909 , - 880 , - 1195 , - 1854 , - 105 , - 1452 , - 391 , - 2426 , - 2053 , - 2024 , - 2339 , - 246 , - 1249 , - 2596 , - 1535 , - 818 , - 445 , - 416 , - 731 , - 1390 , - 2393 , - 988 , - 2679 , - 1962 , - 1589 , - 1560 , - 1875 , - 2534 , - 785 , - 2132 , - 1071 , - 354 , - 2733 , - 2704 , - 267 , - 926 , - 1929 , - 524 , - 2215 , - 1498 , - 1125 , - 1096 , - 1411 , - 2070 , - 321 , - 1668 , - 607 , - 2642 , - 2269 , - 2240 , - 2555 , - 462 , - 1465 , - 60 , - 1751 , - 1034 , - 661 , - 632 , - 947 , - 1606 , - 2609 , - 1204 , - 143 , - 2178 , - 1805 , - 1776 , - 2091 , - 2750 , - 1001 , - 2348 , - 1287 , - 570 , - 197 , - 168 , - 483 , - 1142 , - 2145 , - 740 , - 2431 , - 1714 , - 1341 , - 1312 , - 1627 , - 2286 , - 537 , - 1884 , - 823 , - 106 , - 2485 , - 2456 , - 19 , - 678 , - 1681 , - 276 , - 1967 , - 1250 , - 877 , - 848 , - 1163 , - 1822 , - 73 , - 1420 , - 359 , - 2394 , - 2021 , - 1992 , - 2307 , - 214 , - 1217 , - 2564 , - 1503 , - 786 , - 413 , - 384 , - 699 , - 1358 , - 2361 , - 956 , - 2647 , - 1930 , - 1557 , - 1528 , - 1843 , - 2502 , - 753 , - 2100 , - 1039 , - 322 , - 2701 , - 2672 , - 235 , - 894 , - 1897 , - 492 , - 2183 , - 1466 , - 1093 , - 1064 , - 1379 , - 2038 , - 289 , - 1636 , - 575 , - 2610 , - 2237 , - 2208 , - 2523 , - 430 , - 1433 , - 28 , - 1719 , - 1002 , - 629 , - 600 , - 915 , - 1574 , - 2577 , - 1172 , - 111 , - 2146 , - 1773 , - 1744 , - 2059 , - 2718 , - 969 , - 2316 , - 1255 , - 538 , - 165 , - 136 , - 451 , - 1110 , - 2113 , - 708 , - 2399 , - 1682 , - 1309 , - 1280 , - 1595 , - 2254 , - 505 , - 1852 , - 791 , - 74 , - 2453 , - 2424 , - 2739 , - 646 , - 1649 , - 244 , - 1935 , - 1218 , - 845 , - 816 , - 1131 , - 1790 , - 41 , - 1388 , - 327 , - 2362 , - 1989 , - 1960 , - 2275 , - 182 , - 1185 , - 2532 , - 1471 , - 754 , - 381 , - 352 , - 667 , - 1326 , - 2329 , - 924 , - 2615 , - 1898 , - 1525 , - 1496 , - 1811 , - 2470 , - 721 , - 2068 , - 1007 , - 290 , - 2669 , - 2640 , - 203 , - 862 , - 1865 , - 460 , - 2151 , - 1434 , - 1061 , - 1032 , - 1347 , - 2006 , - 257 , - 1604 , - 543 , - 2578 , - 2205 , - 2176 , - 2491 , - 398 , - 1401 , - 2748 , - 1687 , - 970 , - 597 , - 568 , - 883 , - 1542 , - 2545 , - 1140 , - 79 , - 2114 , - 1741 , - 1712 , - 2027 , - 2686 , - 937 , - 2284 , - 1223 , - 506 , - 133 , - 104 , - 419 , - 1078 , - 2081 , - 676 , - 2367 , - 1650 , - 1277 , - 1248 , - 1563 , - 2222 , - 473 , - 1820 , - 759 , - 42 , - 2421 , - 2392 , - 2707 , - 614 , - 1617 , - 212 , - 1903 , - 1186 , - 813 , - 784 , - 1099 , - 1758 , - 9 , - 1356 , - 295 , - 2330 , - 1957 , - 1928 , - 2243 , - 150 , - 1153 , - 2500 , - 1439 , - 722 , - 349 , - 320 , - 635 , - 1294 , - 2297 , - 892 , - 2583 , - 1866 , - 1493 , - 1464 , - 1779 , - 2438 , - 689 , - 2036 , - 975 , - 258 , - 2637 , - 2608 , - 171 , - 830 , - 1833 , - 428 , - 2119 , - 1402 , - 1029 , - 1000 , - 1315 , - 1974 , - 225 , - 1572 , - 511 , - 2546 , - 2173 , - 2144 , - 2459 , - 366 , - 1369 , - 2716 , - 1655 , - 938 , - 565 , - 536 , - 851 , - 1510 , - 2513 , - 1108 , - 47 , - 2082 , - 1709 , - 1680 , - 1995 , - 2654 , - 905 , - 2252 , - 1191 , - 474 , - 101 , - 72 , - 387 , - 1046 , - 2049 , - 644 , - 2335 , - 1618 , - 1245 , - 1216 , - 1531 , - 2190 , - 441 , - 1788 , - 727 , - 10 , - 2389 , - 2360 , - 2675 , - 582 , - 1585 , - 180 , - 1871 , - 1154 , - 781 , - 752 , - 1067 , - 1726 , - 2729 , - 1324 , - 263 , - 2298 , - 1925 , - 1896 , - 2211 , - 118 , - 1121 , - 2468 , - 1407 , - 690 , - 317 , - 288 , - 603 , - 1262 , - 2265 , - 860 , - 2551 , - 1834 , - 1461 , - 1432 , - 1747 , - 2406 , - 657 , - 2004 , - 943 , - 226 , - 2605 , - 2576 , - 139 , - 798 , - 1801 , - 396 , - 2087 , - 1370 , - 997 , - 968 , - 1283 , - 1942 , - 193 , - 1540 , - 479 , - 2514 , - 2141 , - 2112 , - 2427 , - 334 , - 1337 , - 2684 , - 1623 , - 906 , - 533 , - 504 , - 819 , - 1478 , - 2481 , - 1076 , - 15 , - 2050 , - 1677 , - 1648 , - 1963 , - 2622 , - 873 , - 2220 , - 1159 , - 442 , - 69 , - 40 , - 355 , - 1014 , - 2017 , - 612 , - 2303 , - 1586 , - 1213 , - 1184 , - 1499 , - 2158 , - 409 , - 1756 , - 695 , - 2730 , - 2357 , - 2328 , - 2643 , - 550 , - 1553 , - 148 , - 1839 , - 1122 , - 749 , - 720 , - 1035 , - 1694 , - 2697 , - 1292 , - 231 , - 2266 , - 1893 , - 1864 , - 2179 , - 86 , - 1089 , - 2436 , - 1375 , - 658 , - 285 , - 256 , - 571 , - 1230 , - 2233 , - 828 , - 2519 , - 1802 , - 1429 , - 1400 , - 1715 , - 2374 , - 625 , - 1972 , - 911 , - 194 , - 2573 , - 2544 , - 107 , - 766 , - 1769 , - 364 , - 2055 , - 1338 , - 965 , - 936 , - 1251 , - 1910 , - 161 , - 1508 , - 447 , - 2482 , - 2109 , - 2080 , - 2395 , - 302 , - 1305 , - 2652 , - 1591 , - 874 , - 501 , - 472 , - 787 , - 1446 , - 2449 , - 1044 , - 2735 , - 2018 , - 1645 , - 1616 , - 1931 , - 2590 , - 841 , - 2188 , - 1127 , - 410 , - 37 , - 8 , - 323 , - 982 , - 1985 , - 580 , - 2271 , - 1554 , - 1181 , - 1152 , - 1467 , - 2126 , - 377 , - 1724 , - 663 , - 2698 , - 2325 , - 2296 , - 2611 , - 518 , - 1521 , - 116 , - 1807 , - 1090 , - 717 , - 688 , - 1003 , - 1662 , - 2665 , - 1260 , - 199 , - 2234 , - 1861 , - 1832 , - 2147 , - 54 , - 1057 , - 2404 , - 1343 , - 626 , - 253 , - 224 , - 539 , - 1198 , - 2201 , - 796 , - 2487 , - 1770 , - 1397 , - 1368 , - 1683 , - 2342 , - 593 , - 1940 , - 879 , - 162 , - 2541 , - 2512 , - 75 , - 734 , - 1737 , - 332 , - 2023 , - 1306 , - 933 , - 904 , - 1219 , - 1878 , - 129 , - 1476 , - 415 , - 2450 , - 2077 , - 2048 , - 2363 , - 270 , - 1273 , - 2620 , - 1559 , - 842 , - 469 , - 440 , - 755 , - 1414 , - 2417 , - 1012 , - 2703 , - 1986 , - 1613 , - 1584 , - 1899 , - 2558 , - 809 , - 2156 , - 1095 , - 378 , - 5 , - 2728 , - 291 , - 950 , - 1953 , - 548 , - 2239 , - 1522 , - 1149 , - 1120 , - 1435 , - 2094 , - 345 , - 1692 , - 631 , - 2666 , - 2293 , - 2264 , - 2579 , - 486 , - 1489 , - 84 , - 1775 , - 1058 , - 685 , - 656 , - 971 , - 1630 , - 2633 , - 1228 , - 167 , - 2202 , - 1829 , - 1800 , - 2115 , - 22 , - 1025 , - 2372 , - 1311 , - 594 , - 221 , - 192 , - 507 , - 1166 , - 2169 , - 764 , - 2455 , - 1738 , - 1365 , - 1336 , - 1651 , - 2310 , - 561 , - 1908 , - 847 , - 130 , - 2509 , - 2480 , - 43 , - 702 , - 1705 , - 300 , - 1991 , - 1274 , - 901 , - 872 , - 1187 , - 1846 , - 97 , - 1444 , - 383 , - 2418 , - 2045 , - 2016 , - 2331 , - 238 , - 1241 , - 2588 , - 1527 , - 810 , - 437 , - 408 , - 723 , - 1382 , - 2385 , - 980 , - 2671 , - 1954 , - 1581 , - 1552 , - 1867 , - 2526 , - 777 , - 2124 , - 1063 , - 346 , - 2725 , - 2696 , - 259 , - 918 , - 1921 , - 516 , - 2207 , - 1490 , - 1117 , - 1088 , - 1403 , - 2062 , - 313 , - 1660 , - 599 , - 2634 , - 2261 , - 2232 , - 2547 , - 454 , - 1457 , - 52 , - 1743 , - 1026 , - 653 , - 624 , - 939 , - 1598 , - 2601 , - 1196 , - 135 , - 2170 , - 1797 , - 1768 , - 2083 , - 2742 , - 993 , - 2340 , - 1279 , - 562 , - 189 , - 160 , - 475 , - 1134 , - 2137 , - 732 , - 2423 , - 1706 , - 1333 , - 1304 , - 1619 , - 2278 , - 529 , - 1876 , - 815 , - 98 , - 2477 , - 2448 , - 11 , - 670 , - 1673 , - 268 , - 1959 , - 1242 , - 869 , - 840 , - 1155 , - 1814 , - 65 , - 1412 , - 351 , - 2386 , - 2013 , - 1984 , - 2299 , - 206 , - 1209 , - 2556 , - 1495 , - 778 , - 405 , - 376 , - 691 , - 1350 , - 2353 , - 948 , - 2639 , - 1922 , - 1549 , - 1520 , - 1835 , - 2494 , - 745 , - 2092 , - 1031 , - 314 , - 2693 , - 2664 , - 227 , - 886 , - 1889 , - 484 , - 2175 , - 1458 , - 1085 , - 1056 , - 1371 , - 2030 , - 281 , - 1628 , - 567 , - 2602 , - 2229 , - 2200 , - 2515 , - 422 , - 1425 , - 20 , - 1711 , - 994 , - 621 , - 592 , - 907 , - 1566 , - 2569 , - 1164 , - 103 , - 2138 , - 1765 , - 1736 , - 2051 , - 2710 , - 961 , - 2308 , - 1247 , - 530 , - 157 , - 128 , - 443 , - 1102 , - 2105 , - 700 , - 2391 , - 1674 , - 1301 , - 1272 , - 1587 , - 2246 , - 497 , - 1844 , - 783 , - 66 , - 2445 , - 2416 , - 2731 , - 638 , - 1641 , - 236 , - 1927 , - 1210 , - 837 , - 808 , - 1123 , - 1782 , - 33 , - 1380 , - 319 , - 2354 , - 1981 , - 1952 , - 2267 , - 174 , - 1177 , - 2524 , - 1463 , - 746 , - 373 , - 344 , - 659 , - 1318 , - 2321 , - 916 , - 2607 , - 1890 , - 1517 , - 1488 , - 1803 , - 2462 , - 713 , - 2060 , - 999 , - 282 , - 2661 , - 2632 , - 195 , - 854 , - 1857 , - 452 , - 2143 , - 1426 , - 1053 , - 1024 , - 1339 , - 1998 , - 249 , - 1596 , - 535 , - 2570 , - 2197 , - 2168 , - 2483 , - 390 , - 1393 , - 2740 , - 1679 , - 962 , - 589 , - 560 , - 875 , - 1534 , - 2537 , - 1132 , - 71 , - 2106 , - 1733 , - 1704 , - 2019 , - 2678 , - 929 , - 2276 , - 1215 , - 498 , - 125 , - 96 , - 411 , - 1070 , - 2073 , - 668 , - 2359 , - 1642 , - 1269 , - 1240 , - 1555 , - 2214 , - 465 , - 1812 , - 751 , - 34 , - 2413 , - 2384 , - 2699 , - 606 , - 1609 , - 204 , - 1895 , - 1178 , - 805 , - 776 , - 1091 , - 1750 , - 1 , - 1348 , - 287 , - 2322 , - 1949 , - 1920 , - 2235 , - 142 , - 1145 , - 2492 , - 1431 , - 714 , - 341 , - 312 , - 627 , - 1286 , - 2289 , - 884 , - 2575 , - 1858 , - 1485 , - 1456 , - 1771 , - 2430 , - 681 , - 2028 , - 967 , - 250 , - 2629 , - 2600 , - 163 , - 822 , - 1825 , - 420 , - 2111 , - 1394 , - 1021 , - 992 , - 1307 , - 1966 , - 217 , - 1564 , - 503 , - 2538 , - 2165 , - 2136 , - 2451 , - 358 , - 1361 , - 2708 , - 1647 , - 930 , - 557 , - 528 , - 843 , - 1502 , - 2505 , - 1100 , - 39 , - 2074 , - 1701 , - 1672 , - 1987 , - 2646 , - 897 , - 2244 , - 1183 , - 466 , - 93 , - 64 , - 379 , - 1038 , - 2041 , - 636 , - 2327 , - 1610 , - 1237 , - 1208 , - 1523 , - 2182 , - 433 , - 1780 , - 719 , - 2 , - 2381 , - 2352 , - 2667 , - 574 , - 1577 , - 172 , - 1863 , - 1146 , - 773 , - 744 , - 1059 , - 1718 , - 2721 , - 1316 , - 255 , - 2290 , - 1917 , - 1888 , - 2203 , - 110 , - 1113 , - 2460 , - 1399 , - 682 , - 309 , - 280 , - 595 , - 1254 , - 2257 , - 852 , - 2543 , - 1826 , - 1453 , - 1424 , - 1739 , - 2398 , - 649 , - 1996 , - 935 , - 218 , - 2597 , - 2568 , - 131 , - 790 , - 1793 , - 388 , - 2079 , - 1362 , - 989 , - 960 , - 1275 , - 1934 , - 185 , - 1532 , - 471 , - 2506 , - 2133 , - 2104 , - 2419 , - 326 , - 1329 , - 2676 , - 1615 , - 898 , - 525 , - 496 , - 811 , - 1470 , - 2473 , - 1068 , - 7 , - 2042 , - 1669 , - 1640 , - 1955 , - 2614 , - 865 , - 2212 , - 1151 , - 434 , - 61 , - 32 , - 347 , - 1006 , - 2009 , - 604 , - 2295 , - 1578 , - 1205 , - 1176 , - 1491 , - 2150 , - 401 , - 1748 , - 687 , - 2722 , - 2349 , - 2320 , - 2635 , - 542 , - 1545 , - 140 , - 1831 , - 1114 , - 741 , - 712 , - 1027 , - 1686 , - 2689 , - 1284 , - 223 , - 2258 , - 1885 , - 1856 , - 2171 , - 78 , - 1081 , - 2428 , - 1367 , - 650 , - 277 , - 248 , - 563 , - 1222 , - 2225 , - 820 , - 2511 , - 1794 , - 1421 , - 1392 , - 1707 , - 2366 , - 617 , - 1964 , - 903 , - 186 , - 2565 , - 2536 , - 99 , - 758 , - 1761 , - 356 , - 2047 , - 1330 , - 957 , - 928 , - 1243 , - 1902 , - 153 , - 1500 , - 439 , - 2474 , - 2101 , - 2072 , - 2387 , - 294 , - 1297 , - 2644 , - 1583 , - 866 , - 493 , - 464 , - 779 , - 1438 , - 2441 , - 1036 , - 2727 , - 2010 , - 1637 , - 1608 , - 1923 , - 2582 , - 833 , - 2180 , - 1119 , - 402 , - 29 , - 0 , - 131 , - 438 , - 921 , - 1580 , - 2415 , - 610 , - 1797 , - 344 , - 1883 , - 782 , - 2673 , - 1924 , - 1351 , - 954 , - 733 , - 688 , - 819 , - 1126 , - 1609 , - 2268 , - 287 , - 1298 , - 2485 , - 1032 , - 2571 , - 1470 , - 545 , - 2612 , - 2039 , - 1642 , - 1421 , - 1376 , - 1507 , - 1814 , - 2297 , - 140 , - 975 , - 1986 , - 357 , - 1720 , - 443 , - 2158 , - 1233 , - 484 , - 2727 , - 2330 , - 2109 , - 2064 , - 2195 , - 2502 , - 169 , - 828 , - 1663 , - 2674 , - 1045 , - 2408 , - 1131 , - 30 , - 1921 , - 1172 , - 599 , - 202 , - 2797 , - 2752 , - 67 , - 374 , - 857 , - 1516 , - 2351 , - 546 , - 1733 , - 280 , - 1819 , - 718 , - 2609 , - 1860 , - 1287 , - 890 , - 669 , - 624 , - 755 , - 1062 , - 1545 , - 2204 , - 223 , - 1234 , - 2421 , - 968 , - 2507 , - 1406 , - 481 , - 2548 , - 1975 , - 1578 , - 1357 , - 1312 , - 1443 , - 1750 , - 2233 , - 76 , - 911 , - 1922 , - 293 , - 1656 , - 379 , - 2094 , - 1169 , - 420 , - 2663 , - 2266 , - 2045 , - 2000 , - 2131 , - 2438 , - 105 , - 764 , - 1599 , - 2610 , - 981 , - 2344 , - 1067 , - 2782 , - 1857 , - 1108 , - 535 , - 138 , - 2733 , - 2688 , - 3 , - 310 , - 793 , - 1452 , - 2287 , - 482 , - 1669 , - 216 , - 1755 , - 654 , - 2545 , - 1796 , - 1223 , - 826 , - 605 , - 560 , - 691 , - 998 , - 1481 , - 2140 , - 159 , - 1170 , - 2357 , - 904 , - 2443 , - 1342 , - 417 , - 2484 , - 1911 , - 1514 , - 1293 , - 1248 , - 1379 , - 1686 , - 2169 , - 12 , - 847 , - 1858 , - 229 , - 1592 , - 315 , - 2030 , - 1105 , - 356 , - 2599 , - 2202 , - 1981 , - 1936 , - 2067 , - 2374 , - 41 , - 700 , - 1535 , - 2546 , - 917 , - 2280 , - 1003 , - 2718 , - 1793 , - 1044 , - 471 , - 74 , - 2669 , - 2624 , - 2755 , - 246 , - 729 , - 1388 , - 2223 , - 418 , - 1605 , - 152 , - 1691 , - 590 , - 2481 , - 1732 , - 1159 , - 762 , - 541 , - 496 , - 627 , - 934 , - 1417 , - 2076 , - 95 , - 1106 , - 2293 , - 840 , - 2379 , - 1278 , - 353 , - 2420 , - 1847 , - 1450 , - 1229 , - 1184 , - 1315 , - 1622 , - 2105 , - 2764 , - 783 , - 1794 , - 165 , - 1528 , - 251 , - 1966 , - 1041 , - 292 , - 2535 , - 2138 , - 1917 , - 1872 , - 2003 , - 2310 , - 2793 , - 636 , - 1471 , - 2482 , - 853 , - 2216 , - 939 , - 2654 , - 1729 , - 980 , - 407 , - 10 , - 2605 , - 2560 , - 2691 , - 182 , - 665 , - 1324 , - 2159 , - 354 , - 1541 , - 88 , - 1627 , - 526 , - 2417 , - 1668 , - 1095 , - 698 , - 477 , - 432 , - 563 , - 870 , - 1353 , - 2012 , - 31 , - 1042 , - 2229 , - 776 , - 2315 , - 1214 , - 289 , - 2356 , - 1783 , - 1386 , - 1165 , - 1120 , - 1251 , - 1558 , - 2041 , - 2700 , - 719 , - 1730 , - 101 , - 1464 , - 187 , - 1902 , - 977 , - 228 , - 2471 , - 2074 , - 1853 , - 1808 , - 1939 , - 2246 , - 2729 , - 572 , - 1407 , - 2418 , - 789 , - 2152 , - 875 , - 2590 , - 1665 , - 916 , - 343 , - 2762 , - 2541 , - 2496 , - 2627 , - 118 , - 601 , - 1260 , - 2095 , - 290 , - 1477 , - 24 , - 1563 , - 462 , - 2353 , - 1604 , - 1031 , - 634 , - 413 , - 368 , - 499 , - 806 , - 1289 , - 1948 , - 2783 , - 978 , - 2165 , - 712 , - 2251 , - 1150 , - 225 , - 2292 , - 1719 , - 1322 , - 1101 , - 1056 , - 1187 , - 1494 , - 1977 , - 2636 , - 655 , - 1666 , - 37 , - 1400 , - 123 , - 1838 , - 913 , - 164 , - 2407 , - 2010 , - 1789 , - 1744 , - 1875 , - 2182 , - 2665 , - 508 , - 1343 , - 2354 , - 725 , - 2088 , - 811 , - 2526 , - 1601 , - 852 , - 279 , - 2698 , - 2477 , - 2432 , - 2563 , - 54 , - 537 , - 1196 , - 2031 , - 226 , - 1413 , - 2776 , - 1499 , - 398 , - 2289 , - 1540 , - 967 , - 570 , - 349 , - 304 , - 435 , - 742 , - 1225 , - 1884 , - 2719 , - 914 , - 2101 , - 648 , - 2187 , - 1086 , - 161 , - 2228 , - 1655 , - 1258 , - 1037 , - 992 , - 1123 , - 1430 , - 1913 , - 2572 , - 591 , - 1602 , - 2789 , - 1336 , - 59 , - 1774 , - 849 , - 100 , - 2343 , - 1946 , - 1725 , - 1680 , - 1811 , - 2118 , - 2601 , - 444 , - 1279 , - 2290 , - 661 , - 2024 , - 747 , - 2462 , - 1537 , - 788 , - 215 , - 2634 , - 2413 , - 2368 , - 2499 , - 2806 , - 473 , - 1132 , - 1967 , - 162 , - 1349 , - 2712 , - 1435 , - 334 , - 2225 , - 1476 , - 903 , - 506 , - 285 , - 240 , - 371 , - 678 , - 1161 , - 1820 , - 2655 , - 850 , - 2037 , - 584 , - 2123 , - 1022 , - 97 , - 2164 , - 1591 , - 1194 , - 973 , - 928 , - 1059 , - 1366 , - 1849 , - 2508 , - 527 , - 1538 , - 2725 , - 1272 , - 2811 , - 1710 , - 785 , - 36 , - 2279 , - 1882 , - 1661 , - 1616 , - 1747 , - 2054 , - 2537 , - 380 , - 1215 , - 2226 , - 597 , - 1960 , - 683 , - 2398 , - 1473 , - 724 , - 151 , - 2570 , - 2349 , - 2304 , - 2435 , - 2742 , - 409 , - 1068 , - 1903 , - 98 , - 1285 , - 2648 , - 1371 , - 270 , - 2161 , - 1412 , - 839 , - 442 , - 221 , - 176 , - 307 , - 614 , - 1097 , - 1756 , - 2591 , - 786 , - 1973 , - 520 , - 2059 , - 958 , - 33 , - 2100 , - 1527 , - 1130 , - 909 , - 864 , - 995 , - 1302 , - 1785 , - 2444 , - 463 , - 1474 , - 2661 , - 1208 , - 2747 , - 1646 , - 721 , - 2788 , - 2215 , - 1818 , - 1597 , - 1552 , - 1683 , - 1990 , - 2473 , - 316 , - 1151 , - 2162 , - 533 , - 1896 , - 619 , - 2334 , - 1409 , - 660 , - 87 , - 2506 , - 2285 , - 2240 , - 2371 , - 2678 , - 345 , - 1004 , - 1839 , - 34 , - 1221 , - 2584 , - 1307 , - 206 , - 2097 , - 1348 , - 775 , - 378 , - 157 , - 112 , - 243 , - 550 , - 1033 , - 1692 , - 2527 , - 722 , - 1909 , - 456 , - 1995 , - 894 , - 2785 , - 2036 , - 1463 , - 1066 , - 845 , - 800 , - 931 , - 1238 , - 1721 , - 2380 , - 399 , - 1410 , - 2597 , - 1144 , - 2683 , - 1582 , - 657 , - 2724 , - 2151 , - 1754 , - 1533 , - 1488 , - 1619 , - 1926 , - 2409 , - 252 , - 1087 , - 2098 , - 469 , - 1832 , - 555 , - 2270 , - 1345 , - 596 , - 23 , - 2442 , - 2221 , - 2176 , - 2307 , - 2614 , - 281 , - 940 , - 1775 , - 2786 , - 1157 , - 2520 , - 1243 , - 142 , - 2033 , - 1284 , - 711 , - 314 , - 93 , - 48 , - 179 , - 486 , - 969 , - 1628 , - 2463 , - 658 , - 1845 , - 392 , - 1931 , - 830 , - 2721 , - 1972 , - 1399 , - 1002 , - 781 , - 736 , - 867 , - 1174 , - 1657 , - 2316 , - 335 , - 1346 , - 2533 , - 1080 , - 2619 , - 1518 , - 593 , - 2660 , - 2087 , - 1690 , - 1469 , - 1424 , - 1555 , - 1862 , - 2345 , - 188 , - 1023 , - 2034 , - 405 , - 1768 , - 491 , - 2206 , - 1281 , - 532 , - 2775 , - 2378 , - 2157 , - 2112 , - 2243 , - 2550 , - 217 , - 876 , - 1711 , - 2722 , - 1093 , - 2456 , - 1179 , - 78 , - 1969 , - 1220 , - 647 , - 250 , - 29 , - 2800 , - 115 , - 422 , - 905 , - 1564 , - 2399 , - 594 , - 1781 , - 328 , - 1867 , - 766 , - 2657 , - 1908 , - 1335 , - 938 , - 717 , - 672 , - 803 , - 1110 , - 1593 , - 2252 , - 271 , - 1282 , - 2469 , - 1016 , - 2555 , - 1454 , - 529 , - 2596 , - 2023 , - 1626 , - 1405 , - 1360 , - 1491 , - 1798 , - 2281 , - 124 , - 959 , - 1970 , - 341 , - 1704 , - 427 , - 2142 , - 1217 , - 468 , - 2711 , - 2314 , - 2093 , - 2048 , - 2179 , - 2486 , - 153 , - 812 , - 1647 , - 2658 , - 1029 , - 2392 , - 1115 , - 14 , - 1905 , - 1156 , - 583 , - 186 , - 2781 , - 2736 , - 51 , - 358 , - 841 , - 1500 , - 2335 , - 530 , - 1717 , - 264 , - 1803 , - 702 , - 2593 , - 1844 , - 1271 , - 874 , - 653 , - 608 , - 739 , - 1046 , - 1529 , - 2188 , - 207 , - 1218 , - 2405 , - 952 , - 2491 , - 1390 , - 465 , - 2532 , - 1959 , - 1562 , - 1341 , - 1296 , - 1427 , - 1734 , - 2217 , - 60 , - 895 , - 1906 , - 277 , - 1640 , - 363 , - 2078 , - 1153 , - 404 , - 2647 , - 2250 , - 2029 , - 1984 , - 2115 , - 2422 , - 89 , - 748 , - 1583 , - 2594 , - 965 , - 2328 , - 1051 , - 2766 , - 1841 , - 1092 , - 519 , - 122 , - 2717 , - 2672 , - 2803 , - 294 , - 777 , - 1436 , - 2271 , - 466 , - 1653 , - 200 , - 1739 , - 638 , - 2529 , - 1780 , - 1207 , - 810 , - 589 , - 544 , - 675 , - 982 , - 1465 , - 2124 , - 143 , - 1154 , - 2341 , - 888 , - 2427 , - 1326 , - 401 , - 2468 , - 1895 , - 1498 , - 1277 , - 1232 , - 1363 , - 1670 , - 2153 , - 2812 , - 831 , - 1842 , - 213 , - 1576 , - 299 , - 2014 , - 1089 , - 340 , - 2583 , - 2186 , - 1965 , - 1920 , - 2051 , - 2358 , - 25 , - 684 , - 1519 , - 2530 , - 901 , - 2264 , - 987 , - 2702 , - 1777 , - 1028 , - 455 , - 58 , - 2653 , - 2608 , - 2739 , - 230 , - 713 , - 1372 , - 2207 , - 402 , - 1589 , - 136 , - 1675 , - 574 , - 2465 , - 1716 , - 1143 , - 746 , - 525 , - 480 , - 611 , - 918 , - 1401 , - 2060 , - 79 , - 1090 , - 2277 , - 824 , - 2363 , - 1262 , - 337 , - 2404 , - 1831 , - 1434 , - 1213 , - 1168 , - 1299 , - 1606 , - 2089 , - 2748 , - 767 , - 1778 , - 149 , - 1512 , - 235 , - 1950 , - 1025 , - 276 , - 2519 , - 2122 , - 1901 , - 1856 , - 1987 , - 2294 , - 2777 , - 620 , - 1455 , - 2466 , - 837 , - 2200 , - 923 , - 2638 , - 1713 , - 964 , - 391 , - 2810 , - 2589 , - 2544 , - 2675 , - 166 , - 649 , - 1308 , - 2143 , - 338 , - 1525 , - 72 , - 1611 , - 510 , - 2401 , - 1652 , - 1079 , - 682 , - 461 , - 416 , - 547 , - 854 , - 1337 , - 1996 , - 15 , - 1026 , - 2213 , - 760 , - 2299 , - 1198 , - 273 , - 2340 , - 1767 , - 1370 , - 1149 , - 1104 , - 1235 , - 1542 , - 2025 , - 2684 , - 703 , - 1714 , - 85 , - 1448 , - 171 , - 1886 , - 961 , - 212 , - 2455 , - 2058 , - 1837 , - 1792 , - 1923 , - 2230 , - 2713 , - 556 , - 1391 , - 2402 , - 773 , - 2136 , - 859 , - 2574 , - 1649 , - 900 , - 327 , - 2746 , - 2525 , - 2480 , - 2611 , - 102 , - 585 , - 1244 , - 2079 , - 274 , - 1461 , - 8 , - 1547 , - 446 , - 2337 , - 1588 , - 1015 , - 618 , - 397 , - 352 , - 483 , - 790 , - 1273 , - 1932 , - 2767 , - 962 , - 2149 , - 696 , - 2235 , - 1134 , - 209 , - 2276 , - 1703 , - 1306 , - 1085 , - 1040 , - 1171 , - 1478 , - 1961 , - 2620 , - 639 , - 1650 , - 21 , - 1384 , - 107 , - 1822 , - 897 , - 148 , - 2391 , - 1994 , - 1773 , - 1728 , - 1859 , - 2166 , - 2649 , - 492 , - 1327 , - 2338 , - 709 , - 2072 , - 795 , - 2510 , - 1585 , - 836 , - 263 , - 2682 , - 2461 , - 2416 , - 2547 , - 38 , - 521 , - 1180 , - 2015 , - 210 , - 1397 , - 2760 , - 1483 , - 382 , - 2273 , - 1524 , - 951 , - 554 , - 333 , - 288 , - 419 , - 726 , - 1209 , - 1868 , - 2703 , - 898 , - 2085 , - 632 , - 2171 , - 1070 , - 145 , - 2212 , - 1639 , - 1242 , - 1021 , - 976 , - 1107 , - 1414 , - 1897 , - 2556 , - 575 , - 1586 , - 2773 , - 1320 , - 43 , - 1758 , - 833 , - 84 , - 2327 , - 1930 , - 1709 , - 1664 , - 1795 , - 2102 , - 2585 , - 428 , - 1263 , - 2274 , - 645 , - 2008 , - 731 , - 2446 , - 1521 , - 772 , - 199 , - 2618 , - 2397 , - 2352 , - 2483 , - 2790 , - 457 , - 1116 , - 1951 , - 146 , - 1333 , - 2696 , - 1419 , - 318 , - 2209 , - 1460 , - 887 , - 490 , - 269 , - 224 , - 355 , - 662 , - 1145 , - 1804 , - 2639 , - 834 , - 2021 , - 568 , - 2107 , - 1006 , - 81 , - 2148 , - 1575 , - 1178 , - 957 , - 912 , - 1043 , - 1350 , - 1833 , - 2492 , - 511 , - 1522 , - 2709 , - 1256 , - 2795 , - 1694 , - 769 , - 20 , - 2263 , - 1866 , - 1645 , - 1600 , - 1731 , - 2038 , - 2521 , - 364 , - 1199 , - 2210 , - 581 , - 1944 , - 667 , - 2382 , - 1457 , - 708 , - 135 , - 2554 , - 2333 , - 2288 , - 2419 , - 2726 , - 393 , - 1052 , - 1887 , - 82 , - 1269 , - 2632 , - 1355 , - 254 , - 2145 , - 1396 , - 823 , - 426 , - 205 , - 160 , - 291 , - 598 , - 1081 , - 1740 , - 2575 , - 770 , - 1957 , - 504 , - 2043 , - 942 , - 17 , - 2084 , - 1511 , - 1114 , - 893 , - 848 , - 979 , - 1286 , - 1769 , - 2428 , - 447 , - 1458 , - 2645 , - 1192 , - 2731 , - 1630 , - 705 , - 2772 , - 2199 , - 1802 , - 1581 , - 1536 , - 1667 , - 1974 , - 2457 , - 300 , - 1135 , - 2146 , - 517 , - 1880 , - 603 , - 2318 , - 1393 , - 644 , - 71 , - 2490 , - 2269 , - 2224 , - 2355 , - 2662 , - 329 , - 988 , - 1823 , - 18 , - 1205 , - 2568 , - 1291 , - 190 , - 2081 , - 1332 , - 759 , - 362 , - 141 , - 96 , - 227 , - 534 , - 1017 , - 1676 , - 2511 , - 706 , - 1893 , - 440 , - 1979 , - 878 , - 2769 , - 2020 , - 1447 , - 1050 , - 829 , - 784 , - 915 , - 1222 , - 1705 , - 2364 , - 383 , - 1394 , - 2581 , - 1128 , - 2667 , - 1566 , - 641 , - 2708 , - 2135 , - 1738 , - 1517 , - 1472 , - 1603 , - 1910 , - 2393 , - 236 , - 1071 , - 2082 , - 453 , - 1816 , - 539 , - 2254 , - 1329 , - 580 , - 7 , - 2426 , - 2205 , - 2160 , - 2291 , - 2598 , - 265 , - 924 , - 1759 , - 2770 , - 1141 , - 2504 , - 1227 , - 126 , - 2017 , - 1268 , - 695 , - 298 , - 77 , - 32 , - 163 , - 470 , - 953 , - 1612 , - 2447 , - 642 , - 1829 , - 376 , - 1915 , - 814 , - 2705 , - 1956 , - 1383 , - 986 , - 765 , - 720 , - 851 , - 1158 , - 1641 , - 2300 , - 319 , - 1330 , - 2517 , - 1064 , - 2603 , - 1502 , - 577 , - 2644 , - 2071 , - 1674 , - 1453 , - 1408 , - 1539 , - 1846 , - 2329 , - 172 , - 1007 , - 2018 , - 389 , - 1752 , - 475 , - 2190 , - 1265 , - 516 , - 2759 , - 2362 , - 2141 , - 2096 , - 2227 , - 2534 , - 201 , - 860 , - 1695 , - 2706 , - 1077 , - 2440 , - 1163 , - 62 , - 1953 , - 1204 , - 631 , - 234 , - 13 , - 2784 , - 99 , - 406 , - 889 , - 1548 , - 2383 , - 578 , - 1765 , - 312 , - 1851 , - 750 , - 2641 , - 1892 , - 1319 , - 922 , - 701 , - 656 , - 787 , - 1094 , - 1577 , - 2236 , - 255 , - 1266 , - 2453 , - 1000 , - 2539 , - 1438 , - 513 , - 2580 , - 2007 , - 1610 , - 1389 , - 1344 , - 1475 , - 1782 , - 2265 , - 108 , - 943 , - 1954 , - 325 , - 1688 , - 411 , - 2126 , - 1201 , - 452 , - 2695 , - 2298 , - 2077 , - 2032 , - 2163 , - 2470 , - 137 , - 796 , - 1631 , - 2642 , - 1013 , - 2376 , - 1099 , - 2814 , - 1889 , - 1140 , - 567 , - 170 , - 2765 , - 2720 , - 35 , - 342 , - 825 , - 1484 , - 2319 , - 514 , - 1701 , - 248 , - 1787 , - 686 , - 2577 , - 1828 , - 1255 , - 858 , - 637 , - 592 , - 723 , - 1030 , - 1513 , - 2172 , - 191 , - 1202 , - 2389 , - 936 , - 2475 , - 1374 , - 449 , - 2516 , - 1943 , - 1546 , - 1325 , - 1280 , - 1411 , - 1718 , - 2201 , - 44 , - 879 , - 1890 , - 261 , - 1624 , - 347 , - 2062 , - 1137 , - 388 , - 2631 , - 2234 , - 2013 , - 1968 , - 2099 , - 2406 , - 73 , - 732 , - 1567 , - 2578 , - 949 , - 2312 , - 1035 , - 2750 , - 1825 , - 1076 , - 503 , - 106 , - 2701 , - 2656 , - 2787 , - 278 , - 761 , - 1420 , - 2255 , - 450 , - 1637 , - 184 , - 1723 , - 622 , - 2513 , - 1764 , - 1191 , - 794 , - 573 , - 528 , - 659 , - 966 , - 1449 , - 2108 , - 127 , - 1138 , - 2325 , - 872 , - 2411 , - 1310 , - 385 , - 2452 , - 1879 , - 1482 , - 1261 , - 1216 , - 1347 , - 1654 , - 2137 , - 2796 , - 815 , - 1826 , - 197 , - 1560 , - 283 , - 1998 , - 1073 , - 324 , - 2567 , - 2170 , - 1949 , - 1904 , - 2035 , - 2342 , - 9 , - 668 , - 1503 , - 2514 , - 885 , - 2248 , - 971 , - 2686 , - 1761 , - 1012 , - 439 , - 42 , - 2637 , - 2592 , - 2723 , - 214 , - 697 , - 1356 , - 2191 , - 386 , - 1573 , - 120 , - 1659 , - 558 , - 2449 , - 1700 , - 1127 , - 730 , - 509 , - 464 , - 595 , - 902 , - 1385 , - 2044 , - 63 , - 1074 , - 2261 , - 808 , - 2347 , - 1246 , - 321 , - 2388 , - 1815 , - 1418 , - 1197 , - 1152 , - 1283 , - 1590 , - 2073 , - 2732 , - 751 , - 1762 , - 133 , - 1496 , - 219 , - 1934 , - 1009 , - 260 , - 2503 , - 2106 , - 1885 , - 1840 , - 1971 , - 2278 , - 2761 , - 604 , - 1439 , - 2450 , - 821 , - 2184 , - 907 , - 2622 , - 1697 , - 948 , - 375 , - 2794 , - 2573 , - 2528 , - 2659 , - 150 , - 633 , - 1292 , - 2127 , - 322 , - 1509 , - 56 , - 1595 , - 494 , - 2385 , - 1636 , - 1063 , - 666 , - 445 , - 400 , - 531 , - 838 , - 1321 , - 1980 , - 2815 , - 1010 , - 2197 , - 744 , - 2283 , - 1182 , - 257 , - 2324 , - 1751 , - 1354 , - 1133 , - 1088 , - 1219 , - 1526 , - 2009 , - 2668 , - 687 , - 1698 , - 69 , - 1432 , - 155 , - 1870 , - 945 , - 196 , - 2439 , - 2042 , - 1821 , - 1776 , - 1907 , - 2214 , - 2697 , - 540 , - 1375 , - 2386 , - 757 , - 2120 , - 843 , - 2558 , - 1633 , - 884 , - 311 , - 2730 , - 2509 , - 2464 , - 2595 , - 86 , - 569 , - 1228 , - 2063 , - 258 , - 1445 , - 2808 , - 1531 , - 430 , - 2321 , - 1572 , - 999 , - 602 , - 381 , - 336 , - 467 , - 774 , - 1257 , - 1916 , - 2751 , - 946 , - 2133 , - 680 , - 2219 , - 1118 , - 193 , - 2260 , - 1687 , - 1290 , - 1069 , - 1024 , - 1155 , - 1462 , - 1945 , - 2604 , - 623 , - 1634 , - 5 , - 1368 , - 91 , - 1806 , - 881 , - 132 , - 2375 , - 1978 , - 1757 , - 1712 , - 1843 , - 2150 , - 2633 , - 476 , - 1311 , - 2322 , - 693 , - 2056 , - 779 , - 2494 , - 1569 , - 820 , - 247 , - 2666 , - 2445 , - 2400 , - 2531 , - 22 , - 505 , - 1164 , - 1999 , - 194 , - 1381 , - 2744 , - 1467 , - 366 , - 2257 , - 1508 , - 935 , - 538 , - 317 , - 272 , - 403 , - 710 , - 1193 , - 1852 , - 2687 , - 882 , - 2069 , - 616 , - 2155 , - 1054 , - 129 , - 2196 , - 1623 , - 1226 , - 1005 , - 960 , - 1091 , - 1398 , - 1881 , - 2540 , - 559 , - 1570 , - 2757 , - 1304 , - 27 , - 1742 , - 817 , - 68 , - 2311 , - 1914 , - 1693 , - 1648 , - 1779 , - 2086 , - 2569 , - 412 , - 1247 , - 2258 , - 629 , - 1992 , - 715 , - 2430 , - 1505 , - 756 , - 183 , - 2602 , - 2381 , - 2336 , - 2467 , - 2774 , - 441 , - 1100 , - 1935 , - 130 , - 1317 , - 2680 , - 1403 , - 302 , - 2193 , - 1444 , - 871 , - 474 , - 253 , - 208 , - 339 , - 646 , - 1129 , - 1788 , - 2623 , - 818 , - 2005 , - 552 , - 2091 , - 990 , - 65 , - 2132 , - 1559 , - 1162 , - 941 , - 896 , - 1027 , - 1334 , - 1817 , - 2476 , - 495 , - 1506 , - 2693 , - 1240 , - 2779 , - 1678 , - 753 , - 4 , - 2247 , - 1850 , - 1629 , - 1584 , - 1715 , - 2022 , - 2505 , - 348 , - 1183 , - 2194 , - 565 , - 1928 , - 651 , - 2366 , - 1441 , - 692 , - 119 , - 2538 , - 2317 , - 2272 , - 2403 , - 2710 , - 377 , - 1036 , - 1871 , - 66 , - 1253 , - 2616 , - 1339 , - 238 , - 2129 , - 1380 , - 807 , - 410 , - 189 , - 144 , - 275 , - 582 , - 1065 , - 1724 , - 2559 , - 754 , - 1941 , - 488 , - 2027 , - 926 , - 1 , - 2068 , - 1495 , - 1098 , - 877 , - 832 , - 963 , - 1270 , - 1753 , - 2412 , - 431 , - 1442 , - 2629 , - 1176 , - 2715 , - 1614 , - 689 , - 2756 , - 2183 , - 1786 , - 1565 , - 1520 , - 1651 , - 1958 , - 2441 , - 284 , - 1119 , - 2130 , - 501 , - 1864 , - 587 , - 2302 , - 1377 , - 628 , - 55 , - 2474 , - 2253 , - 2208 , - 2339 , - 2646 , - 313 , - 972 , - 1807 , - 2 , - 1189 , - 2552 , - 1275 , - 174 , - 2065 , - 1316 , - 743 , - 346 , - 125 , - 80 , - 211 , - 518 , - 1001 , - 1660 , - 2495 , - 690 , - 1877 , - 424 , - 1963 , - 862 , - 2753 , - 2004 , - 1431 , - 1034 , - 813 , - 768 , - 899 , - 1206 , - 1689 , - 2348 , - 367 , - 1378 , - 2565 , - 1112 , - 2651 , - 1550 , - 625 , - 2692 , - 2119 , - 1722 , - 1501 , - 1456 , - 1587 , - 1894 , - 2377 , - 220 , - 1055 , - 2066 , - 437 , - 1800 , - 523 , - 2238 , - 1313 , - 564 , - 2807 , - 2410 , - 2189 , - 2144 , - 2275 , - 2582 , - 249 , - 908 , - 1743 , - 2754 , - 1125 , - 2488 , - 1211 , - 110 , - 2001 , - 1252 , - 679 , - 282 , - 61 , - 16 , - 147 , - 454 , - 937 , - 1596 , - 2431 , - 626 , - 1813 , - 360 , - 1899 , - 798 , - 2689 , - 1940 , - 1367 , - 970 , - 749 , - 704 , - 835 , - 1142 , - 1625 , - 2284 , - 303 , - 1314 , - 2501 , - 1048 , - 2587 , - 1486 , - 561 , - 2628 , - 2055 , - 1658 , - 1437 , - 1392 , - 1523 , - 1830 , - 2313 , - 156 , - 991 , - 2002 , - 373 , - 1736 , - 459 , - 2174 , - 1249 , - 500 , - 2743 , - 2346 , - 2125 , - 2080 , - 2211 , - 2518 , - 185 , - 844 , - 1679 , - 2690 , - 1061 , - 2424 , - 1147 , - 46 , - 1937 , - 1188 , - 615 , - 218 , - 2813 , - 2768 , - 83 , - 390 , - 873 , - 1532 , - 2367 , - 562 , - 1749 , - 296 , - 1835 , - 734 , - 2625 , - 1876 , - 1303 , - 906 , - 685 , - 640 , - 771 , - 1078 , - 1561 , - 2220 , - 239 , - 1250 , - 2437 , - 984 , - 2523 , - 1422 , - 497 , - 2564 , - 1991 , - 1594 , - 1373 , - 1328 , - 1459 , - 1766 , - 2249 , - 92 , - 927 , - 1938 , - 309 , - 1672 , - 395 , - 2110 , - 1185 , - 436 , - 2679 , - 2282 , - 2061 , - 2016 , - 2147 , - 2454 , - 121 , - 780 , - 1615 , - 2626 , - 997 , - 2360 , - 1083 , - 2798 , - 1873 , - 1124 , - 551 , - 154 , - 2749 , - 2704 , - 19 , - 326 , - 809 , - 1468 , - 2303 , - 498 , - 1685 , - 232 , - 1771 , - 670 , - 2561 , - 1812 , - 1239 , - 842 , - 621 , - 576 , - 707 , - 1014 , - 1497 , - 2156 , - 175 , - 1186 , - 2373 , - 920 , - 2459 , - 1358 , - 433 , - 2500 , - 1927 , - 1530 , - 1309 , - 1264 , - 1395 , - 1702 , - 2185 , - 28 , - 863 , - 1874 , - 245 , - 1608 , - 331 , - 2046 , - 1121 , - 372 , - 2615 , - 2218 , - 1997 , - 1952 , - 2083 , - 2390 , - 57 , - 716 , - 1551 , - 2562 , - 933 , - 2296 , - 1019 , - 2734 , - 1809 , - 1060 , - 487 , - 90 , - 2685 , - 2640 , - 2771 , - 262 , - 745 , - 1404 , - 2239 , - 434 , - 1621 , - 168 , - 1707 , - 606 , - 2497 , - 1748 , - 1175 , - 778 , - 557 , - 512 , - 643 , - 950 , - 1433 , - 2092 , - 111 , - 1122 , - 2309 , - 856 , - 2395 , - 1294 , - 369 , - 2436 , - 1863 , - 1466 , - 1245 , - 1200 , - 1331 , - 1638 , - 2121 , - 2780 , - 799 , - 1810 , - 181 , - 1544 , - 267 , - 1982 , - 1057 , - 308 , - 2551 , - 2154 , - 1933 , - 1888 , - 2019 , - 2326 , - 2809 , - 652 , - 1487 , - 2498 , - 869 , - 2232 , - 955 , - 2670 , - 1745 , - 996 , - 423 , - 26 , - 2621 , - 2576 , - 2707 , - 198 , - 681 , - 1340 , - 2175 , - 370 , - 1557 , - 104 , - 1643 , - 542 , - 2433 , - 1684 , - 1111 , - 714 , - 493 , - 448 , - 579 , - 886 , - 1369 , - 2028 , - 47 , - 1058 , - 2245 , - 792 , - 2331 , - 1230 , - 305 , - 2372 , - 1799 , - 1402 , - 1181 , - 1136 , - 1267 , - 1574 , - 2057 , - 2716 , - 735 , - 1746 , - 117 , - 1480 , - 203 , - 1918 , - 993 , - 244 , - 2487 , - 2090 , - 1869 , - 1824 , - 1955 , - 2262 , - 2745 , - 588 , - 1423 , - 2434 , - 805 , - 2168 , - 891 , - 2606 , - 1681 , - 932 , - 359 , - 2778 , - 2557 , - 2512 , - 2643 , - 134 , - 617 , - 1276 , - 2111 , - 306 , - 1493 , - 40 , - 1579 , - 478 , - 2369 , - 1620 , - 1047 , - 650 , - 429 , - 384 , - 515 , - 822 , - 1305 , - 1964 , - 2799 , - 994 , - 2181 , - 728 , - 2267 , - 1166 , - 241 , - 2308 , - 1735 , - 1338 , - 1117 , - 1072 , - 1203 , - 1510 , - 1993 , - 2652 , - 671 , - 1682 , - 53 , - 1416 , - 139 , - 1854 , - 929 , - 180 , - 2423 , - 2026 , - 1805 , - 1760 , - 1891 , - 2198 , - 2681 , - 524 , - 1359 , - 2370 , - 741 , - 2104 , - 827 , - 2542 , - 1617 , - 868 , - 295 , - 2714 , - 2493 , - 2448 , - 2579 , - 70 , - 553 , - 1212 , - 2047 , - 242 , - 1429 , - 2792 , - 1515 , - 414 , - 2305 , - 1556 , - 983 , - 586 , - 365 , - 320 , - 451 , - 758 , - 1241 , - 1900 , - 2735 , - 930 , - 2117 , - 664 , - 2203 , - 1102 , - 177 , - 2244 , - 1671 , - 1274 , - 1053 , - 1008 , - 1139 , - 1446 , - 1929 , - 2588 , - 607 , - 1618 , - 2805 , - 1352 , - 75 , - 1790 , - 865 , - 116 , - 2359 , - 1962 , - 1741 , - 1696 , - 1827 , - 2134 , - 2617 , - 460 , - 1295 , - 2306 , - 677 , - 2040 , - 763 , - 2478 , - 1553 , - 804 , - 231 , - 2650 , - 2429 , - 2384 , - 2515 , - 6 , - 489 , - 1148 , - 1983 , - 178 , - 1365 , - 2728 , - 1451 , - 350 , - 2241 , - 1492 , - 919 , - 522 , - 301 , - 256 , - 387 , - 694 , - 1177 , - 1836 , - 2671 , - 866 , - 2053 , - 600 , - 2139 , - 1038 , - 113 , - 2180 , - 1607 , - 1210 , - 989 , - 944 , - 1075 , - 1382 , - 1865 , - 2524 , - 543 , - 1554 , - 2741 , - 1288 , - 11 , - 1726 , - 801 , - 52 , - 2295 , - 1898 , - 1677 , - 1632 , - 1763 , - 2070 , - 2553 , - 396 , - 1231 , - 2242 , - 613 , - 1976 , - 699 , - 2414 , - 1489 , - 740 , - 167 , - 2586 , - 2365 , - 2320 , - 2451 , - 2758 , - 425 , - 1084 , - 1919 , - 114 , - 1301 , - 2664 , - 1387 , - 286 , - 2177 , - 1428 , - 855 , - 458 , - 237 , - 192 , - 323 , - 630 , - 1113 , - 1772 , - 2607 , - 802 , - 1989 , - 536 , - 2075 , - 974 , - 49 , - 2116 , - 1543 , - 1146 , - 925 , - 880 , - 1011 , - 1318 , - 1801 , - 2460 , - 479 , - 1490 , - 2677 , - 1224 , - 2763 , - 1662 , - 737 , - 2804 , - 2231 , - 1834 , - 1613 , - 1568 , - 1699 , - 2006 , - 2489 , - 332 , - 1167 , - 2178 , - 549 , - 1912 , - 635 , - 2350 , - 1425 , - 676 , - 103 , - 2522 , - 2301 , - 2256 , - 2387 , - 2694 , - 361 , - 1020 , - 1855 , - 50 , - 1237 , - 2600 , - 1323 , - 222 , - 2113 , - 1364 , - 791 , - 394 , - 173 , - 128 , - 259 , - 566 , - 1049 , - 1708 , - 2543 , - 738 , - 1925 , - 472 , - 2011 , - 910 , - 2801 , - 2052 , - 1479 , - 1082 , - 861 , - 816 , - 947 , - 1254 , - 1737 , - 2396 , - 415 , - 1426 , - 2613 , - 1160 , - 2699 , - 1598 , - 673 , - 2740 , - 2167 , - 1770 , - 1549 , - 1504 , - 1635 , - 1942 , - 2425 , - 268 , - 1103 , - 2114 , - 485 , - 1848 , - 571 , - 2286 , - 1361 , - 612 , - 39 , - 2458 , - 2237 , - 2192 , - 2323 , - 2630 , - 297 , - 956 , - 1791 , - 2802 , - 1173 , - 2536 , - 1259 , - 158 , - 2049 , - 1300 , - 727 , - 330 , - 109 , - 64 , - 195 , - 502 , - 985 , - 1644 , - 2479 , - 674 , - 1861 , - 408 , - 1947 , - 846 , - 2737 , - 1988 , - 1415 , - 1018 , - 797 , - 752 , - 883 , - 1190 , - 1673 , - 2332 , - 351 , - 1362 , - 2549 , - 1096 , - 2635 , - 1534 , - 609 , - 2676 , - 2103 , - 1706 , - 1485 , - 1440 , - 1571 , - 1878 , - 2361 , - 204 , - 1039 , - 2050 , - 421 , - 1784 , - 507 , - 2222 , - 1297 , - 548 , - 2791 , - 2394 , - 2173 , - 2128 , - 2259 , - 2566 , - 233 , - 892 , - 1727 , - 2738 , - 1109 , - 2472 , - 1195 , - 94 , - 1985 , - 1236 , - 663 , - 266 , - 45 , - 0 , - 329 , - 1258 , - 2787 , - 2036 , - 1885 , - 2334 , - 503 , - 2152 , - 1521 , - 1490 , - 2059 , - 348 , - 2117 , - 1606 , - 1695 , - 2384 , - 793 , - 2682 , - 2291 , - 2500 , - 429 , - 1838 , - 967 , - 696 , - 1025 , - 1954 , - 603 , - 2732 , - 2581 , - 150 , - 1199 , - 2848 , - 2217 , - 2186 , - 2755 , - 1044 , - 2813 , - 2302 , - 2391 , - 200 , - 1489 , - 498 , - 107 , - 316 , - 1125 , - 2534 , - 1663 , - 1392 , - 1721 , - 2650 , - 1299 , - 548 , - 397 , - 846 , - 1895 , - 664 , - 33 , - 2 , - 571 , - 1740 , - 629 , - 118 , - 207 , - 896 , - 2185 , - 1194 , - 803 , - 1012 , - 1821 , - 350 , - 2359 , - 2088 , - 2417 , - 466 , - 1995 , - 1244 , - 1093 , - 1542 , - 2591 , - 1360 , - 729 , - 698 , - 1267 , - 2436 , - 1325 , - 814 , - 903 , - 1592 , - 1 , - 1890 , - 1499 , - 1708 , - 2517 , - 1046 , - 175 , - 2784 , - 233 , - 1162 , - 2691 , - 1940 , - 1789 , - 2238 , - 407 , - 2056 , - 1425 , - 1394 , - 1963 , - 252 , - 2021 , - 1510 , - 1599 , - 2288 , - 697 , - 2586 , - 2195 , - 2404 , - 333 , - 1742 , - 871 , - 600 , - 929 , - 1858 , - 507 , - 2636 , - 2485 , - 54 , - 1103 , - 2752 , - 2121 , - 2090 , - 2659 , - 948 , - 2717 , - 2206 , - 2295 , - 104 , - 1393 , - 402 , - 11 , - 220 , - 1029 , - 2438 , - 1567 , - 1296 , - 1625 , - 2554 , - 1203 , - 452 , - 301 , - 750 , - 1799 , - 568 , - 2817 , - 2786 , - 475 , - 1644 , - 533 , - 22 , - 111 , - 800 , - 2089 , - 1098 , - 707 , - 916 , - 1725 , - 254 , - 2263 , - 1992 , - 2321 , - 370 , - 1899 , - 1148 , - 997 , - 1446 , - 2495 , - 1264 , - 633 , - 602 , - 1171 , - 2340 , - 1229 , - 718 , - 807 , - 1496 , - 2785 , - 1794 , - 1403 , - 1612 , - 2421 , - 950 , - 79 , - 2688 , - 137 , - 1066 , - 2595 , - 1844 , - 1693 , - 2142 , - 311 , - 1960 , - 1329 , - 1298 , - 1867 , - 156 , - 1925 , - 1414 , - 1503 , - 2192 , - 601 , - 2490 , - 2099 , - 2308 , - 237 , - 1646 , - 775 , - 504 , - 833 , - 1762 , - 411 , - 2540 , - 2389 , - 2838 , - 1007 , - 2656 , - 2025 , - 1994 , - 2563 , - 852 , - 2621 , - 2110 , - 2199 , - 8 , - 1297 , - 306 , - 2795 , - 124 , - 933 , - 2342 , - 1471 , - 1200 , - 1529 , - 2458 , - 1107 , - 356 , - 205 , - 654 , - 1703 , - 472 , - 2721 , - 2690 , - 379 , - 1548 , - 437 , - 2806 , - 15 , - 704 , - 1993 , - 1002 , - 611 , - 820 , - 1629 , - 158 , - 2167 , - 1896 , - 2225 , - 274 , - 1803 , - 1052 , - 901 , - 1350 , - 2399 , - 1168 , - 537 , - 506 , - 1075 , - 2244 , - 1133 , - 622 , - 711 , - 1400 , - 2689 , - 1698 , - 1307 , - 1516 , - 2325 , - 854 , - 2863 , - 2592 , - 41 , - 970 , - 2499 , - 1748 , - 1597 , - 2046 , - 215 , - 1864 , - 1233 , - 1202 , - 1771 , - 60 , - 1829 , - 1318 , - 1407 , - 2096 , - 505 , - 2394 , - 2003 , - 2212 , - 141 , - 1550 , - 679 , - 408 , - 737 , - 1666 , - 315 , - 2444 , - 2293 , - 2742 , - 911 , - 2560 , - 1929 , - 1898 , - 2467 , - 756 , - 2525 , - 2014 , - 2103 , - 2792 , - 1201 , - 210 , - 2699 , - 28 , - 837 , - 2246 , - 1375 , - 1104 , - 1433 , - 2362 , - 1011 , - 260 , - 109 , - 558 , - 1607 , - 376 , - 2625 , - 2594 , - 283 , - 1452 , - 341 , - 2710 , - 2799 , - 608 , - 1897 , - 906 , - 515 , - 724 , - 1533 , - 62 , - 2071 , - 1800 , - 2129 , - 178 , - 1707 , - 956 , - 805 , - 1254 , - 2303 , - 1072 , - 441 , - 410 , - 979 , - 2148 , - 1037 , - 526 , - 615 , - 1304 , - 2593 , - 1602 , - 1211 , - 1420 , - 2229 , - 758 , - 2767 , - 2496 , - 2825 , - 874 , - 2403 , - 1652 , - 1501 , - 1950 , - 119 , - 1768 , - 1137 , - 1106 , - 1675 , - 2844 , - 1733 , - 1222 , - 1311 , - 2000 , - 409 , - 2298 , - 1907 , - 2116 , - 45 , - 1454 , - 583 , - 312 , - 641 , - 1570 , - 219 , - 2348 , - 2197 , - 2646 , - 815 , - 2464 , - 1833 , - 1802 , - 2371 , - 660 , - 2429 , - 1918 , - 2007 , - 2696 , - 1105 , - 114 , - 2603 , - 2812 , - 741 , - 2150 , - 1279 , - 1008 , - 1337 , - 2266 , - 915 , - 164 , - 13 , - 462 , - 1511 , - 280 , - 2529 , - 2498 , - 187 , - 1356 , - 245 , - 2614 , - 2703 , - 512 , - 1801 , - 810 , - 419 , - 628 , - 1437 , - 2846 , - 1975 , - 1704 , - 2033 , - 82 , - 1611 , - 860 , - 709 , - 1158 , - 2207 , - 976 , - 345 , - 314 , - 883 , - 2052 , - 941 , - 430 , - 519 , - 1208 , - 2497 , - 1506 , - 1115 , - 1324 , - 2133 , - 662 , - 2671 , - 2400 , - 2729 , - 778 , - 2307 , - 1556 , - 1405 , - 1854 , - 23 , - 1672 , - 1041 , - 1010 , - 1579 , - 2748 , - 1637 , - 1126 , - 1215 , - 1904 , - 313 , - 2202 , - 1811 , - 2020 , - 2829 , - 1358 , - 487 , - 216 , - 545 , - 1474 , - 123 , - 2252 , - 2101 , - 2550 , - 719 , - 2368 , - 1737 , - 1706 , - 2275 , - 564 , - 2333 , - 1822 , - 1911 , - 2600 , - 1009 , - 18 , - 2507 , - 2716 , - 645 , - 2054 , - 1183 , - 912 , - 1241 , - 2170 , - 819 , - 68 , - 2797 , - 366 , - 1415 , - 184 , - 2433 , - 2402 , - 91 , - 1260 , - 149 , - 2518 , - 2607 , - 416 , - 1705 , - 714 , - 323 , - 532 , - 1341 , - 2750 , - 1879 , - 1608 , - 1937 , - 2866 , - 1515 , - 764 , - 613 , - 1062 , - 2111 , - 880 , - 249 , - 218 , - 787 , - 1956 , - 845 , - 334 , - 423 , - 1112 , - 2401 , - 1410 , - 1019 , - 1228 , - 2037 , - 566 , - 2575 , - 2304 , - 2633 , - 682 , - 2211 , - 1460 , - 1309 , - 1758 , - 2807 , - 1576 , - 945 , - 914 , - 1483 , - 2652 , - 1541 , - 1030 , - 1119 , - 1808 , - 217 , - 2106 , - 1715 , - 1924 , - 2733 , - 1262 , - 391 , - 120 , - 449 , - 1378 , - 27 , - 2156 , - 2005 , - 2454 , - 623 , - 2272 , - 1641 , - 1610 , - 2179 , - 468 , - 2237 , - 1726 , - 1815 , - 2504 , - 913 , - 2802 , - 2411 , - 2620 , - 549 , - 1958 , - 1087 , - 816 , - 1145 , - 2074 , - 723 , - 2852 , - 2701 , - 270 , - 1319 , - 88 , - 2337 , - 2306 , - 2875 , - 1164 , - 53 , - 2422 , - 2511 , - 320 , - 1609 , - 618 , - 227 , - 436 , - 1245 , - 2654 , - 1783 , - 1512 , - 1841 , - 2770 , - 1419 , - 668 , - 517 , - 966 , - 2015 , - 784 , - 153 , - 122 , - 691 , - 1860 , - 749 , - 238 , - 327 , - 1016 , - 2305 , - 1314 , - 923 , - 1132 , - 1941 , - 470 , - 2479 , - 2208 , - 2537 , - 586 , - 2115 , - 1364 , - 1213 , - 1662 , - 2711 , - 1480 , - 849 , - 818 , - 1387 , - 2556 , - 1445 , - 934 , - 1023 , - 1712 , - 121 , - 2010 , - 1619 , - 1828 , - 2637 , - 1166 , - 295 , - 24 , - 353 , - 1282 , - 2811 , - 2060 , - 1909 , - 2358 , - 527 , - 2176 , - 1545 , - 1514 , - 2083 , - 372 , - 2141 , - 1630 , - 1719 , - 2408 , - 817 , - 2706 , - 2315 , - 2524 , - 453 , - 1862 , - 991 , - 720 , - 1049 , - 1978 , - 627 , - 2756 , - 2605 , - 174 , - 1223 , - 2872 , - 2241 , - 2210 , - 2779 , - 1068 , - 2837 , - 2326 , - 2415 , - 224 , - 1513 , - 522 , - 131 , - 340 , - 1149 , - 2558 , - 1687 , - 1416 , - 1745 , - 2674 , - 1323 , - 572 , - 421 , - 870 , - 1919 , - 688 , - 57 , - 26 , - 595 , - 1764 , - 653 , - 142 , - 231 , - 920 , - 2209 , - 1218 , - 827 , - 1036 , - 1845 , - 374 , - 2383 , - 2112 , - 2441 , - 490 , - 2019 , - 1268 , - 1117 , - 1566 , - 2615 , - 1384 , - 753 , - 722 , - 1291 , - 2460 , - 1349 , - 838 , - 927 , - 1616 , - 25 , - 1914 , - 1523 , - 1732 , - 2541 , - 1070 , - 199 , - 2808 , - 257 , - 1186 , - 2715 , - 1964 , - 1813 , - 2262 , - 431 , - 2080 , - 1449 , - 1418 , - 1987 , - 276 , - 2045 , - 1534 , - 1623 , - 2312 , - 721 , - 2610 , - 2219 , - 2428 , - 357 , - 1766 , - 895 , - 624 , - 953 , - 1882 , - 531 , - 2660 , - 2509 , - 78 , - 1127 , - 2776 , - 2145 , - 2114 , - 2683 , - 972 , - 2741 , - 2230 , - 2319 , - 128 , - 1417 , - 426 , - 35 , - 244 , - 1053 , - 2462 , - 1591 , - 1320 , - 1649 , - 2578 , - 1227 , - 476 , - 325 , - 774 , - 1823 , - 592 , - 2841 , - 2810 , - 499 , - 1668 , - 557 , - 46 , - 135 , - 824 , - 2113 , - 1122 , - 731 , - 940 , - 1749 , - 278 , - 2287 , - 2016 , - 2345 , - 394 , - 1923 , - 1172 , - 1021 , - 1470 , - 2519 , - 1288 , - 657 , - 626 , - 1195 , - 2364 , - 1253 , - 742 , - 831 , - 1520 , - 2809 , - 1818 , - 1427 , - 1636 , - 2445 , - 974 , - 103 , - 2712 , - 161 , - 1090 , - 2619 , - 1868 , - 1717 , - 2166 , - 335 , - 1984 , - 1353 , - 1322 , - 1891 , - 180 , - 1949 , - 1438 , - 1527 , - 2216 , - 625 , - 2514 , - 2123 , - 2332 , - 261 , - 1670 , - 799 , - 528 , - 857 , - 1786 , - 435 , - 2564 , - 2413 , - 2862 , - 1031 , - 2680 , - 2049 , - 2018 , - 2587 , - 876 , - 2645 , - 2134 , - 2223 , - 32 , - 1321 , - 330 , - 2819 , - 148 , - 957 , - 2366 , - 1495 , - 1224 , - 1553 , - 2482 , - 1131 , - 380 , - 229 , - 678 , - 1727 , - 496 , - 2745 , - 2714 , - 403 , - 1572 , - 461 , - 2830 , - 39 , - 728 , - 2017 , - 1026 , - 635 , - 844 , - 1653 , - 182 , - 2191 , - 1920 , - 2249 , - 298 , - 1827 , - 1076 , - 925 , - 1374 , - 2423 , - 1192 , - 561 , - 530 , - 1099 , - 2268 , - 1157 , - 646 , - 735 , - 1424 , - 2713 , - 1722 , - 1331 , - 1540 , - 2349 , - 878 , - 7 , - 2616 , - 65 , - 994 , - 2523 , - 1772 , - 1621 , - 2070 , - 239 , - 1888 , - 1257 , - 1226 , - 1795 , - 84 , - 1853 , - 1342 , - 1431 , - 2120 , - 529 , - 2418 , - 2027 , - 2236 , - 165 , - 1574 , - 703 , - 432 , - 761 , - 1690 , - 339 , - 2468 , - 2317 , - 2766 , - 935 , - 2584 , - 1953 , - 1922 , - 2491 , - 780 , - 2549 , - 2038 , - 2127 , - 2816 , - 1225 , - 234 , - 2723 , - 52 , - 861 , - 2270 , - 1399 , - 1128 , - 1457 , - 2386 , - 1035 , - 284 , - 133 , - 582 , - 1631 , - 400 , - 2649 , - 2618 , - 307 , - 1476 , - 365 , - 2734 , - 2823 , - 632 , - 1921 , - 930 , - 539 , - 748 , - 1557 , - 86 , - 2095 , - 1824 , - 2153 , - 202 , - 1731 , - 980 , - 829 , - 1278 , - 2327 , - 1096 , - 465 , - 434 , - 1003 , - 2172 , - 1061 , - 550 , - 639 , - 1328 , - 2617 , - 1626 , - 1235 , - 1444 , - 2253 , - 782 , - 2791 , - 2520 , - 2849 , - 898 , - 2427 , - 1676 , - 1525 , - 1974 , - 143 , - 1792 , - 1161 , - 1130 , - 1699 , - 2868 , - 1757 , - 1246 , - 1335 , - 2024 , - 433 , - 2322 , - 1931 , - 2140 , - 69 , - 1478 , - 607 , - 336 , - 665 , - 1594 , - 243 , - 2372 , - 2221 , - 2670 , - 839 , - 2488 , - 1857 , - 1826 , - 2395 , - 684 , - 2453 , - 1942 , - 2031 , - 2720 , - 1129 , - 138 , - 2627 , - 2836 , - 765 , - 2174 , - 1303 , - 1032 , - 1361 , - 2290 , - 939 , - 188 , - 37 , - 486 , - 1535 , - 304 , - 2553 , - 2522 , - 211 , - 1380 , - 269 , - 2638 , - 2727 , - 536 , - 1825 , - 834 , - 443 , - 652 , - 1461 , - 2870 , - 1999 , - 1728 , - 2057 , - 106 , - 1635 , - 884 , - 733 , - 1182 , - 2231 , - 1000 , - 369 , - 338 , - 907 , - 2076 , - 965 , - 454 , - 543 , - 1232 , - 2521 , - 1530 , - 1139 , - 1348 , - 2157 , - 686 , - 2695 , - 2424 , - 2753 , - 802 , - 2331 , - 1580 , - 1429 , - 1878 , - 47 , - 1696 , - 1065 , - 1034 , - 1603 , - 2772 , - 1661 , - 1150 , - 1239 , - 1928 , - 337 , - 2226 , - 1835 , - 2044 , - 2853 , - 1382 , - 511 , - 240 , - 569 , - 1498 , - 147 , - 2276 , - 2125 , - 2574 , - 743 , - 2392 , - 1761 , - 1730 , - 2299 , - 588 , - 2357 , - 1846 , - 1935 , - 2624 , - 1033 , - 42 , - 2531 , - 2740 , - 669 , - 2078 , - 1207 , - 936 , - 1265 , - 2194 , - 843 , - 92 , - 2821 , - 390 , - 1439 , - 208 , - 2457 , - 2426 , - 115 , - 1284 , - 173 , - 2542 , - 2631 , - 440 , - 1729 , - 738 , - 347 , - 556 , - 1365 , - 2774 , - 1903 , - 1632 , - 1961 , - 10 , - 1539 , - 788 , - 637 , - 1086 , - 2135 , - 904 , - 273 , - 242 , - 811 , - 1980 , - 869 , - 358 , - 447 , - 1136 , - 2425 , - 1434 , - 1043 , - 1252 , - 2061 , - 590 , - 2599 , - 2328 , - 2657 , - 706 , - 2235 , - 1484 , - 1333 , - 1782 , - 2831 , - 1600 , - 969 , - 938 , - 1507 , - 2676 , - 1565 , - 1054 , - 1143 , - 1832 , - 241 , - 2130 , - 1739 , - 1948 , - 2757 , - 1286 , - 415 , - 144 , - 473 , - 1402 , - 51 , - 2180 , - 2029 , - 2478 , - 647 , - 2296 , - 1665 , - 1634 , - 2203 , - 492 , - 2261 , - 1750 , - 1839 , - 2528 , - 937 , - 2826 , - 2435 , - 2644 , - 573 , - 1982 , - 1111 , - 840 , - 1169 , - 2098 , - 747 , - 2876 , - 2725 , - 294 , - 1343 , - 112 , - 2361 , - 2330 , - 19 , - 1188 , - 77 , - 2446 , - 2535 , - 344 , - 1633 , - 642 , - 251 , - 460 , - 1269 , - 2678 , - 1807 , - 1536 , - 1865 , - 2794 , - 1443 , - 692 , - 541 , - 990 , - 2039 , - 808 , - 177 , - 146 , - 715 , - 1884 , - 773 , - 262 , - 351 , - 1040 , - 2329 , - 1338 , - 947 , - 1156 , - 1965 , - 494 , - 2503 , - 2232 , - 2561 , - 610 , - 2139 , - 1388 , - 1237 , - 1686 , - 2735 , - 1504 , - 873 , - 842 , - 1411 , - 2580 , - 1469 , - 958 , - 1047 , - 1736 , - 145 , - 2034 , - 1643 , - 1852 , - 2661 , - 1190 , - 319 , - 48 , - 377 , - 1306 , - 2835 , - 2084 , - 1933 , - 2382 , - 551 , - 2200 , - 1569 , - 1538 , - 2107 , - 396 , - 2165 , - 1654 , - 1743 , - 2432 , - 841 , - 2730 , - 2339 , - 2548 , - 477 , - 1886 , - 1015 , - 744 , - 1073 , - 2002 , - 651 , - 2780 , - 2629 , - 198 , - 1247 , - 16 , - 2265 , - 2234 , - 2803 , - 1092 , - 2861 , - 2350 , - 2439 , - 248 , - 1537 , - 546 , - 155 , - 364 , - 1173 , - 2582 , - 1711 , - 1440 , - 1769 , - 2698 , - 1347 , - 596 , - 445 , - 894 , - 1943 , - 712 , - 81 , - 50 , - 619 , - 1788 , - 677 , - 166 , - 255 , - 944 , - 2233 , - 1242 , - 851 , - 1060 , - 1869 , - 398 , - 2407 , - 2136 , - 2465 , - 514 , - 2043 , - 1292 , - 1141 , - 1590 , - 2639 , - 1408 , - 777 , - 746 , - 1315 , - 2484 , - 1373 , - 862 , - 951 , - 1640 , - 49 , - 1938 , - 1547 , - 1756 , - 2565 , - 1094 , - 223 , - 2832 , - 281 , - 1210 , - 2739 , - 1988 , - 1837 , - 2286 , - 455 , - 2104 , - 1473 , - 1442 , - 2011 , - 300 , - 2069 , - 1558 , - 1647 , - 2336 , - 745 , - 2634 , - 2243 , - 2452 , - 381 , - 1790 , - 919 , - 648 , - 977 , - 1906 , - 555 , - 2684 , - 2533 , - 102 , - 1151 , - 2800 , - 2169 , - 2138 , - 2707 , - 996 , - 2765 , - 2254 , - 2343 , - 152 , - 1441 , - 450 , - 59 , - 268 , - 1077 , - 2486 , - 1615 , - 1344 , - 1673 , - 2602 , - 1251 , - 500 , - 349 , - 798 , - 1847 , - 616 , - 2865 , - 2834 , - 523 , - 1692 , - 581 , - 70 , - 159 , - 848 , - 2137 , - 1146 , - 755 , - 964 , - 1773 , - 302 , - 2311 , - 2040 , - 2369 , - 418 , - 1947 , - 1196 , - 1045 , - 1494 , - 2543 , - 1312 , - 681 , - 650 , - 1219 , - 2388 , - 1277 , - 766 , - 855 , - 1544 , - 2833 , - 1842 , - 1451 , - 1660 , - 2469 , - 998 , - 127 , - 2736 , - 185 , - 1114 , - 2643 , - 1892 , - 1741 , - 2190 , - 359 , - 2008 , - 1377 , - 1346 , - 1915 , - 204 , - 1973 , - 1462 , - 1551 , - 2240 , - 649 , - 2538 , - 2147 , - 2356 , - 285 , - 1694 , - 823 , - 552 , - 881 , - 1810 , - 459 , - 2588 , - 2437 , - 6 , - 1055 , - 2704 , - 2073 , - 2042 , - 2611 , - 900 , - 2669 , - 2158 , - 2247 , - 56 , - 1345 , - 354 , - 2843 , - 172 , - 981 , - 2390 , - 1519 , - 1248 , - 1577 , - 2506 , - 1155 , - 404 , - 253 , - 702 , - 1751 , - 520 , - 2769 , - 2738 , - 427 , - 1596 , - 485 , - 2854 , - 63 , - 752 , - 2041 , - 1050 , - 659 , - 868 , - 1677 , - 206 , - 2215 , - 1944 , - 2273 , - 322 , - 1851 , - 1100 , - 949 , - 1398 , - 2447 , - 1216 , - 585 , - 554 , - 1123 , - 2292 , - 1181 , - 670 , - 759 , - 1448 , - 2737 , - 1746 , - 1355 , - 1564 , - 2373 , - 902 , - 31 , - 2640 , - 89 , - 1018 , - 2547 , - 1796 , - 1645 , - 2094 , - 263 , - 1912 , - 1281 , - 1250 , - 1819 , - 108 , - 1877 , - 1366 , - 1455 , - 2144 , - 553 , - 2442 , - 2051 , - 2260 , - 189 , - 1598 , - 727 , - 456 , - 785 , - 1714 , - 363 , - 2492 , - 2341 , - 2790 , - 959 , - 2608 , - 1977 , - 1946 , - 2515 , - 804 , - 2573 , - 2062 , - 2151 , - 2840 , - 1249 , - 258 , - 2747 , - 76 , - 885 , - 2294 , - 1423 , - 1152 , - 1481 , - 2410 , - 1059 , - 308 , - 157 , - 606 , - 1655 , - 424 , - 2673 , - 2642 , - 331 , - 1500 , - 389 , - 2758 , - 2847 , - 656 , - 1945 , - 954 , - 563 , - 772 , - 1581 , - 110 , - 2119 , - 1848 , - 2177 , - 226 , - 1755 , - 1004 , - 853 , - 1302 , - 2351 , - 1120 , - 489 , - 458 , - 1027 , - 2196 , - 1085 , - 574 , - 663 , - 1352 , - 2641 , - 1650 , - 1259 , - 1468 , - 2277 , - 806 , - 2815 , - 2544 , - 2873 , - 922 , - 2451 , - 1700 , - 1549 , - 1998 , - 167 , - 1816 , - 1185 , - 1154 , - 1723 , - 12 , - 1781 , - 1270 , - 1359 , - 2048 , - 457 , - 2346 , - 1955 , - 2164 , - 93 , - 1502 , - 631 , - 360 , - 689 , - 1618 , - 267 , - 2396 , - 2245 , - 2694 , - 863 , - 2512 , - 1881 , - 1850 , - 2419 , - 708 , - 2477 , - 1966 , - 2055 , - 2744 , - 1153 , - 162 , - 2651 , - 2860 , - 789 , - 2198 , - 1327 , - 1056 , - 1385 , - 2314 , - 963 , - 212 , - 61 , - 510 , - 1559 , - 328 , - 2577 , - 2546 , - 235 , - 1404 , - 293 , - 2662 , - 2751 , - 560 , - 1849 , - 858 , - 467 , - 676 , - 1485 , - 14 , - 2023 , - 1752 , - 2081 , - 130 , - 1659 , - 908 , - 757 , - 1206 , - 2255 , - 1024 , - 393 , - 362 , - 931 , - 2100 , - 989 , - 478 , - 567 , - 1256 , - 2545 , - 1554 , - 1163 , - 1372 , - 2181 , - 710 , - 2719 , - 2448 , - 2777 , - 826 , - 2355 , - 1604 , - 1453 , - 1902 , - 71 , - 1720 , - 1089 , - 1058 , - 1627 , - 2796 , - 1685 , - 1174 , - 1263 , - 1952 , - 361 , - 2250 , - 1859 , - 2068 , - 2877 , - 1406 , - 535 , - 264 , - 593 , - 1522 , - 171 , - 2300 , - 2149 , - 2598 , - 767 , - 2416 , - 1785 , - 1754 , - 2323 , - 612 , - 2381 , - 1870 , - 1959 , - 2648 , - 1057 , - 66 , - 2555 , - 2764 , - 693 , - 2102 , - 1231 , - 960 , - 1289 , - 2218 , - 867 , - 116 , - 2845 , - 414 , - 1463 , - 232 , - 2481 , - 2450 , - 139 , - 1308 , - 197 , - 2566 , - 2655 , - 464 , - 1753 , - 762 , - 371 , - 580 , - 1389 , - 2798 , - 1927 , - 1656 , - 1985 , - 34 , - 1563 , - 812 , - 661 , - 1110 , - 2159 , - 928 , - 297 , - 266 , - 835 , - 2004 , - 893 , - 382 , - 471 , - 1160 , - 2449 , - 1458 , - 1067 , - 1276 , - 2085 , - 614 , - 2623 , - 2352 , - 2681 , - 730 , - 2259 , - 1508 , - 1357 , - 1806 , - 2855 , - 1624 , - 993 , - 962 , - 1531 , - 2700 , - 1589 , - 1078 , - 1167 , - 1856 , - 265 , - 2154 , - 1763 , - 1972 , - 2781 , - 1310 , - 439 , - 168 , - 497 , - 1426 , - 75 , - 2204 , - 2053 , - 2502 , - 671 , - 2320 , - 1689 , - 1658 , - 2227 , - 516 , - 2285 , - 1774 , - 1863 , - 2552 , - 961 , - 2850 , - 2459 , - 2668 , - 597 , - 2006 , - 1135 , - 864 , - 1193 , - 2122 , - 771 , - 20 , - 2749 , - 318 , - 1367 , - 136 , - 2385 , - 2354 , - 43 , - 1212 , - 101 , - 2470 , - 2559 , - 368 , - 1657 , - 666 , - 275 , - 484 , - 1293 , - 2702 , - 1831 , - 1560 , - 1889 , - 2818 , - 1467 , - 716 , - 565 , - 1014 , - 2063 , - 832 , - 201 , - 170 , - 739 , - 1908 , - 797 , - 286 , - 375 , - 1064 , - 2353 , - 1362 , - 971 , - 1180 , - 1989 , - 518 , - 2527 , - 2256 , - 2585 , - 634 , - 2163 , - 1412 , - 1261 , - 1710 , - 2759 , - 1528 , - 897 , - 866 , - 1435 , - 2604 , - 1493 , - 982 , - 1071 , - 1760 , - 169 , - 2058 , - 1667 , - 1876 , - 2685 , - 1214 , - 343 , - 72 , - 401 , - 1330 , - 2859 , - 2108 , - 1957 , - 2406 , - 575 , - 2224 , - 1593 , - 1562 , - 2131 , - 420 , - 2189 , - 1678 , - 1767 , - 2456 , - 865 , - 2754 , - 2363 , - 2572 , - 501 , - 1910 , - 1039 , - 768 , - 1097 , - 2026 , - 675 , - 2804 , - 2653 , - 222 , - 1271 , - 40 , - 2289 , - 2258 , - 2827 , - 1116 , - 5 , - 2374 , - 2463 , - 272 , - 1561 , - 570 , - 179 , - 388 , - 1197 , - 2606 , - 1735 , - 1464 , - 1793 , - 2722 , - 1371 , - 620 , - 469 , - 918 , - 1967 , - 736 , - 105 , - 74 , - 643 , - 1812 , - 701 , - 190 , - 279 , - 968 , - 2257 , - 1266 , - 875 , - 1084 , - 1893 , - 422 , - 2431 , - 2160 , - 2489 , - 538 , - 2067 , - 1316 , - 1165 , - 1614 , - 2663 , - 1432 , - 801 , - 770 , - 1339 , - 2508 , - 1397 , - 886 , - 975 , - 1664 , - 73 , - 1962 , - 1571 , - 1780 , - 2589 , - 1118 , - 247 , - 2856 , - 305 , - 1234 , - 2763 , - 2012 , - 1861 , - 2310 , - 479 , - 2128 , - 1497 , - 1466 , - 2035 , - 324 , - 2093 , - 1582 , - 1671 , - 2360 , - 769 , - 2658 , - 2267 , - 2476 , - 405 , - 1814 , - 943 , - 672 , - 1001 , - 1930 , - 579 , - 2708 , - 2557 , - 126 , - 1175 , - 2824 , - 2193 , - 2162 , - 2731 , - 1020 , - 2789 , - 2278 , - 2367 , - 176 , - 1465 , - 474 , - 83 , - 292 , - 1101 , - 2510 , - 1639 , - 1368 , - 1697 , - 2626 , - 1275 , - 524 , - 373 , - 822 , - 1871 , - 640 , - 9 , - 2858 , - 547 , - 1716 , - 605 , - 94 , - 183 , - 872 , - 2161 , - 1170 , - 779 , - 988 , - 1797 , - 326 , - 2335 , - 2064 , - 2393 , - 442 , - 1971 , - 1220 , - 1069 , - 1518 , - 2567 , - 1336 , - 705 , - 674 , - 1243 , - 2412 , - 1301 , - 790 , - 879 , - 1568 , - 2857 , - 1866 , - 1475 , - 1684 , - 2493 , - 1022 , - 151 , - 2760 , - 209 , - 1138 , - 2667 , - 1916 , - 1765 , - 2214 , - 383 , - 2032 , - 1401 , - 1370 , - 1939 , - 228 , - 1997 , - 1486 , - 1575 , - 2264 , - 673 , - 2562 , - 2171 , - 2380 , - 309 , - 1718 , - 847 , - 576 , - 905 , - 1834 , - 483 , - 2612 , - 2461 , - 30 , - 1079 , - 2728 , - 2097 , - 2066 , - 2635 , - 924 , - 2693 , - 2182 , - 2271 , - 80 , - 1369 , - 378 , - 2867 , - 196 , - 1005 , - 2414 , - 1543 , - 1272 , - 1601 , - 2530 , - 1179 , - 428 , - 277 , - 726 , - 1775 , - 544 , - 2793 , - 2762 , - 451 , - 1620 , - 509 , - 2878 , - 87 , - 776 , - 2065 , - 1074 , - 683 , - 892 , - 1701 , - 230 , - 2239 , - 1968 , - 2297 , - 346 , - 1875 , - 1124 , - 973 , - 1422 , - 2471 , - 1240 , - 609 , - 578 , - 1147 , - 2316 , - 1205 , - 694 , - 783 , - 1472 , - 2761 , - 1770 , - 1379 , - 1588 , - 2397 , - 926 , - 55 , - 2664 , - 113 , - 1042 , - 2571 , - 1820 , - 1669 , - 2118 , - 287 , - 1936 , - 1305 , - 1274 , - 1843 , - 132 , - 1901 , - 1390 , - 1479 , - 2168 , - 577 , - 2466 , - 2075 , - 2284 , - 213 , - 1622 , - 751 , - 480 , - 809 , - 1738 , - 387 , - 2516 , - 2365 , - 2814 , - 983 , - 2632 , - 2001 , - 1970 , - 2539 , - 828 , - 2597 , - 2086 , - 2175 , - 2864 , - 1273 , - 282 , - 2771 , - 100 , - 909 , - 2318 , - 1447 , - 1176 , - 1505 , - 2434 , - 1083 , - 332 , - 181 , - 630 , - 1679 , - 448 , - 2697 , - 2666 , - 355 , - 1524 , - 413 , - 2782 , - 2871 , - 680 , - 1969 , - 978 , - 587 , - 796 , - 1605 , - 134 , - 2143 , - 1872 , - 2201 , - 250 , - 1779 , - 1028 , - 877 , - 1326 , - 2375 , - 1144 , - 513 , - 482 , - 1051 , - 2220 , - 1109 , - 598 , - 687 , - 1376 , - 2665 , - 1674 , - 1283 , - 1492 , - 2301 , - 830 , - 2839 , - 2568 , - 17 , - 946 , - 2475 , - 1724 , - 1573 , - 2022 , - 191 , - 1840 , - 1209 , - 1178 , - 1747 , - 36 , - 1805 , - 1294 , - 1383 , - 2072 , - 481 , - 2370 , - 1979 , - 2188 , - 117 , - 1526 , - 655 , - 384 , - 713 , - 1642 , - 291 , - 2420 , - 2269 , - 2718 , - 887 , - 2536 , - 1905 , - 1874 , - 2443 , - 732 , - 2501 , - 1990 , - 2079 , - 2768 , - 1177 , - 186 , - 2675 , - 4 , - 813 , - 2222 , - 1351 , - 1080 , - 1409 , - 2338 , - 987 , - 236 , - 85 , - 534 , - 1583 , - 352 , - 2601 , - 2570 , - 259 , - 1428 , - 317 , - 2686 , - 2775 , - 584 , - 1873 , - 882 , - 491 , - 700 , - 1509 , - 38 , - 2047 , - 1776 , - 2105 , - 154 , - 1683 , - 932 , - 781 , - 1230 , - 2279 , - 1048 , - 417 , - 386 , - 955 , - 2124 , - 1013 , - 502 , - 591 , - 1280 , - 2569 , - 1578 , - 1187 , - 1396 , - 2205 , - 734 , - 2743 , - 2472 , - 2801 , - 850 , - 2379 , - 1628 , - 1477 , - 1926 , - 95 , - 1744 , - 1113 , - 1082 , - 1651 , - 2820 , - 1709 , - 1198 , - 1287 , - 1976 , - 385 , - 2274 , - 1883 , - 2092 , - 21 , - 1430 , - 559 , - 288 , - 617 , - 1546 , - 195 , - 2324 , - 2173 , - 2622 , - 791 , - 2440 , - 1809 , - 1778 , - 2347 , - 636 , - 2405 , - 1894 , - 1983 , - 2672 , - 1081 , - 90 , - 2579 , - 2788 , - 717 , - 2126 , - 1255 , - 984 , - 1313 , - 2242 , - 891 , - 140 , - 2869 , - 438 , - 1487 , - 256 , - 2505 , - 2474 , - 163 , - 1332 , - 221 , - 2590 , - 2679 , - 488 , - 1777 , - 786 , - 395 , - 604 , - 1413 , - 2822 , - 1951 , - 1680 , - 2009 , - 58 , - 1587 , - 836 , - 685 , - 1134 , - 2183 , - 952 , - 321 , - 290 , - 859 , - 2028 , - 917 , - 406 , - 495 , - 1184 , - 2473 , - 1482 , - 1091 , - 1300 , - 2109 , - 638 , - 2647 , - 2376 , - 2705 , - 754 , - 2283 , - 1532 , - 1381 , - 1830 , - 2879 , - 1648 , - 1017 , - 986 , - 1555 , - 2724 , - 1613 , - 1102 , - 1191 , - 1880 , - 289 , - 2178 , - 1787 , - 1996 , - 2805 , - 1334 , - 463 , - 192 , - 521 , - 1450 , - 99 , - 2228 , - 2077 , - 2526 , - 695 , - 2344 , - 1713 , - 1682 , - 2251 , - 540 , - 2309 , - 1798 , - 1887 , - 2576 , - 985 , - 2874 , - 2483 , - 2692 , - 621 , - 2030 , - 1159 , - 888 , - 1217 , - 2146 , - 795 , - 44 , - 2773 , - 342 , - 1391 , - 160 , - 2409 , - 2378 , - 67 , - 1236 , - 125 , - 2494 , - 2583 , - 392 , - 1681 , - 690 , - 299 , - 508 , - 1317 , - 2726 , - 1855 , - 1584 , - 1913 , - 2842 , - 1491 , - 740 , - 589 , - 1038 , - 2087 , - 856 , - 225 , - 194 , - 763 , - 1932 , - 821 , - 310 , - 399 , - 1088 , - 2377 , - 1386 , - 995 , - 1204 , - 2013 , - 542 , - 2551 , - 2280 , - 2609 , - 658 , - 2187 , - 1436 , - 1285 , - 1734 , - 2783 , - 1552 , - 921 , - 890 , - 1459 , - 2628 , - 1517 , - 1006 , - 1095 , - 1784 , - 193 , - 2082 , - 1691 , - 1900 , - 2709 , - 1238 , - 367 , - 96 , - 425 , - 1354 , - 3 , - 2132 , - 1981 , - 2430 , - 599 , - 2248 , - 1617 , - 1586 , - 2155 , - 444 , - 2213 , - 1702 , - 1791 , - 2480 , - 889 , - 2778 , - 2387 , - 2596 , - 525 , - 1934 , - 1063 , - 792 , - 1121 , - 2050 , - 699 , - 2828 , - 2677 , - 246 , - 1295 , - 64 , - 2313 , - 2282 , - 2851 , - 1140 , - 29 , - 2398 , - 2487 , - 296 , - 1585 , - 594 , - 203 , - 412 , - 1221 , - 2630 , - 1759 , - 1488 , - 1817 , - 2746 , - 1395 , - 644 , - 493 , - 942 , - 1991 , - 760 , - 129 , - 98 , - 667 , - 1836 , - 725 , - 214 , - 303 , - 992 , - 2281 , - 1290 , - 899 , - 1108 , - 1917 , - 446 , - 2455 , - 2184 , - 2513 , - 562 , - 2091 , - 1340 , - 1189 , - 1638 , - 2687 , - 1456 , - 825 , - 794 , - 1363 , - 2532 , - 1421 , - 910 , - 999 , - 1688 , - 97 , - 1986 , - 1595 , - 1804 , - 2613 , - 1142 , - 271 , - 0 , - 137 , - 458 , - 963 , - 1652 , - 2525 , - 638 , - 1879 , - 360 , - 1969 , - 818 , - 2795 , - 2012 , - 1413 , - 998 , - 767 , - 720 , - 857 , - 1178 , - 1683 , - 2372 , - 301 , - 1358 , - 2599 , - 1080 , - 2689 , - 1538 , - 571 , - 2732 , - 2133 , - 1718 , - 1487 , - 1440 , - 1577 , - 1898 , - 2403 , - 148 , - 1021 , - 2078 , - 375 , - 1800 , - 465 , - 2258 , - 1291 , - 508 , - 2853 , - 2438 , - 2207 , - 2160 , - 2297 , - 2618 , - 179 , - 868 , - 1741 , - 2798 , - 1095 , - 2520 , - 1185 , - 34 , - 2011 , - 1228 , - 629 , - 214 , - 2927 , - 2880 , - 73 , - 394 , - 899 , - 1588 , - 2461 , - 574 , - 1815 , - 296 , - 1905 , - 754 , - 2731 , - 1948 , - 1349 , - 934 , - 703 , - 656 , - 793 , - 1114 , - 1619 , - 2308 , - 237 , - 1294 , - 2535 , - 1016 , - 2625 , - 1474 , - 507 , - 2668 , - 2069 , - 1654 , - 1423 , - 1376 , - 1513 , - 1834 , - 2339 , - 84 , - 957 , - 2014 , - 311 , - 1736 , - 401 , - 2194 , - 1227 , - 444 , - 2789 , - 2374 , - 2143 , - 2096 , - 2233 , - 2554 , - 115 , - 804 , - 1677 , - 2734 , - 1031 , - 2456 , - 1121 , - 2914 , - 1947 , - 1164 , - 565 , - 150 , - 2863 , - 2816 , - 9 , - 330 , - 835 , - 1524 , - 2397 , - 510 , - 1751 , - 232 , - 1841 , - 690 , - 2667 , - 1884 , - 1285 , - 870 , - 639 , - 592 , - 729 , - 1050 , - 1555 , - 2244 , - 173 , - 1230 , - 2471 , - 952 , - 2561 , - 1410 , - 443 , - 2604 , - 2005 , - 1590 , - 1359 , - 1312 , - 1449 , - 1770 , - 2275 , - 20 , - 893 , - 1950 , - 247 , - 1672 , - 337 , - 2130 , - 1163 , - 380 , - 2725 , - 2310 , - 2079 , - 2032 , - 2169 , - 2490 , - 51 , - 740 , - 1613 , - 2670 , - 967 , - 2392 , - 1057 , - 2850 , - 1883 , - 1100 , - 501 , - 86 , - 2799 , - 2752 , - 2889 , - 266 , - 771 , - 1460 , - 2333 , - 446 , - 1687 , - 168 , - 1777 , - 626 , - 2603 , - 1820 , - 1221 , - 806 , - 575 , - 528 , - 665 , - 986 , - 1491 , - 2180 , - 109 , - 1166 , - 2407 , - 888 , - 2497 , - 1346 , - 379 , - 2540 , - 1941 , - 1526 , - 1295 , - 1248 , - 1385 , - 1706 , - 2211 , - 2900 , - 829 , - 1886 , - 183 , - 1608 , - 273 , - 2066 , - 1099 , - 316 , - 2661 , - 2246 , - 2015 , - 1968 , - 2105 , - 2426 , - 2931 , - 676 , - 1549 , - 2606 , - 903 , - 2328 , - 993 , - 2786 , - 1819 , - 1036 , - 437 , - 22 , - 2735 , - 2688 , - 2825 , - 202 , - 707 , - 1396 , - 2269 , - 382 , - 1623 , - 104 , - 1713 , - 562 , - 2539 , - 1756 , - 1157 , - 742 , - 511 , - 464 , - 601 , - 922 , - 1427 , - 2116 , - 45 , - 1102 , - 2343 , - 824 , - 2433 , - 1282 , - 315 , - 2476 , - 1877 , - 1462 , - 1231 , - 1184 , - 1321 , - 1642 , - 2147 , - 2836 , - 765 , - 1822 , - 119 , - 1544 , - 209 , - 2002 , - 1035 , - 252 , - 2597 , - 2182 , - 1951 , - 1904 , - 2041 , - 2362 , - 2867 , - 612 , - 1485 , - 2542 , - 839 , - 2264 , - 929 , - 2722 , - 1755 , - 972 , - 373 , - 2902 , - 2671 , - 2624 , - 2761 , - 138 , - 643 , - 1332 , - 2205 , - 318 , - 1559 , - 40 , - 1649 , - 498 , - 2475 , - 1692 , - 1093 , - 678 , - 447 , - 400 , - 537 , - 858 , - 1363 , - 2052 , - 2925 , - 1038 , - 2279 , - 760 , - 2369 , - 1218 , - 251 , - 2412 , - 1813 , - 1398 , - 1167 , - 1120 , - 1257 , - 1578 , - 2083 , - 2772 , - 701 , - 1758 , - 55 , - 1480 , - 145 , - 1938 , - 971 , - 188 , - 2533 , - 2118 , - 1887 , - 1840 , - 1977 , - 2298 , - 2803 , - 548 , - 1421 , - 2478 , - 775 , - 2200 , - 865 , - 2658 , - 1691 , - 908 , - 309 , - 2838 , - 2607 , - 2560 , - 2697 , - 74 , - 579 , - 1268 , - 2141 , - 254 , - 1495 , - 2920 , - 1585 , - 434 , - 2411 , - 1628 , - 1029 , - 614 , - 383 , - 336 , - 473 , - 794 , - 1299 , - 1988 , - 2861 , - 974 , - 2215 , - 696 , - 2305 , - 1154 , - 187 , - 2348 , - 1749 , - 1334 , - 1103 , - 1056 , - 1193 , - 1514 , - 2019 , - 2708 , - 637 , - 1694 , - 2935 , - 1416 , - 81 , - 1874 , - 907 , - 124 , - 2469 , - 2054 , - 1823 , - 1776 , - 1913 , - 2234 , - 2739 , - 484 , - 1357 , - 2414 , - 711 , - 2136 , - 801 , - 2594 , - 1627 , - 844 , - 245 , - 2774 , - 2543 , - 2496 , - 2633 , - 10 , - 515 , - 1204 , - 2077 , - 190 , - 1431 , - 2856 , - 1521 , - 370 , - 2347 , - 1564 , - 965 , - 550 , - 319 , - 272 , - 409 , - 730 , - 1235 , - 1924 , - 2797 , - 910 , - 2151 , - 632 , - 2241 , - 1090 , - 123 , - 2284 , - 1685 , - 1270 , - 1039 , - 992 , - 1129 , - 1450 , - 1955 , - 2644 , - 573 , - 1630 , - 2871 , - 1352 , - 17 , - 1810 , - 843 , - 60 , - 2405 , - 1990 , - 1759 , - 1712 , - 1849 , - 2170 , - 2675 , - 420 , - 1293 , - 2350 , - 647 , - 2072 , - 737 , - 2530 , - 1563 , - 780 , - 181 , - 2710 , - 2479 , - 2432 , - 2569 , - 2890 , - 451 , - 1140 , - 2013 , - 126 , - 1367 , - 2792 , - 1457 , - 306 , - 2283 , - 1500 , - 901 , - 486 , - 255 , - 208 , - 345 , - 666 , - 1171 , - 1860 , - 2733 , - 846 , - 2087 , - 568 , - 2177 , - 1026 , - 59 , - 2220 , - 1621 , - 1206 , - 975 , - 928 , - 1065 , - 1386 , - 1891 , - 2580 , - 509 , - 1566 , - 2807 , - 1288 , - 2897 , - 1746 , - 779 , - 2940 , - 2341 , - 1926 , - 1695 , - 1648 , - 1785 , - 2106 , - 2611 , - 356 , - 1229 , - 2286 , - 583 , - 2008 , - 673 , - 2466 , - 1499 , - 716 , - 117 , - 2646 , - 2415 , - 2368 , - 2505 , - 2826 , - 387 , - 1076 , - 1949 , - 62 , - 1303 , - 2728 , - 1393 , - 242 , - 2219 , - 1436 , - 837 , - 422 , - 191 , - 144 , - 281 , - 602 , - 1107 , - 1796 , - 2669 , - 782 , - 2023 , - 504 , - 2113 , - 962 , - 2939 , - 2156 , - 1557 , - 1142 , - 911 , - 864 , - 1001 , - 1322 , - 1827 , - 2516 , - 445 , - 1502 , - 2743 , - 1224 , - 2833 , - 1682 , - 715 , - 2876 , - 2277 , - 1862 , - 1631 , - 1584 , - 1721 , - 2042 , - 2547 , - 292 , - 1165 , - 2222 , - 519 , - 1944 , - 609 , - 2402 , - 1435 , - 652 , - 53 , - 2582 , - 2351 , - 2304 , - 2441 , - 2762 , - 323 , - 1012 , - 1885 , - 2942 , - 1239 , - 2664 , - 1329 , - 178 , - 2155 , - 1372 , - 773 , - 358 , - 127 , - 80 , - 217 , - 538 , - 1043 , - 1732 , - 2605 , - 718 , - 1959 , - 440 , - 2049 , - 898 , - 2875 , - 2092 , - 1493 , - 1078 , - 847 , - 800 , - 937 , - 1258 , - 1763 , - 2452 , - 381 , - 1438 , - 2679 , - 1160 , - 2769 , - 1618 , - 651 , - 2812 , - 2213 , - 1798 , - 1567 , - 1520 , - 1657 , - 1978 , - 2483 , - 228 , - 1101 , - 2158 , - 455 , - 1880 , - 545 , - 2338 , - 1371 , - 588 , - 2933 , - 2518 , - 2287 , - 2240 , - 2377 , - 2698 , - 259 , - 948 , - 1821 , - 2878 , - 1175 , - 2600 , - 1265 , - 114 , - 2091 , - 1308 , - 709 , - 294 , - 63 , - 16 , - 153 , - 474 , - 979 , - 1668 , - 2541 , - 654 , - 1895 , - 376 , - 1985 , - 834 , - 2811 , - 2028 , - 1429 , - 1014 , - 783 , - 736 , - 873 , - 1194 , - 1699 , - 2388 , - 317 , - 1374 , - 2615 , - 1096 , - 2705 , - 1554 , - 587 , - 2748 , - 2149 , - 1734 , - 1503 , - 1456 , - 1593 , - 1914 , - 2419 , - 164 , - 1037 , - 2094 , - 391 , - 1816 , - 481 , - 2274 , - 1307 , - 524 , - 2869 , - 2454 , - 2223 , - 2176 , - 2313 , - 2634 , - 195 , - 884 , - 1757 , - 2814 , - 1111 , - 2536 , - 1201 , - 50 , - 2027 , - 1244 , - 645 , - 230 , - 2943 , - 2896 , - 89 , - 410 , - 915 , - 1604 , - 2477 , - 590 , - 1831 , - 312 , - 1921 , - 770 , - 2747 , - 1964 , - 1365 , - 950 , - 719 , - 672 , - 809 , - 1130 , - 1635 , - 2324 , - 253 , - 1310 , - 2551 , - 1032 , - 2641 , - 1490 , - 523 , - 2684 , - 2085 , - 1670 , - 1439 , - 1392 , - 1529 , - 1850 , - 2355 , - 100 , - 973 , - 2030 , - 327 , - 1752 , - 417 , - 2210 , - 1243 , - 460 , - 2805 , - 2390 , - 2159 , - 2112 , - 2249 , - 2570 , - 131 , - 820 , - 1693 , - 2750 , - 1047 , - 2472 , - 1137 , - 2930 , - 1963 , - 1180 , - 581 , - 166 , - 2879 , - 2832 , - 25 , - 346 , - 851 , - 1540 , - 2413 , - 526 , - 1767 , - 248 , - 1857 , - 706 , - 2683 , - 1900 , - 1301 , - 886 , - 655 , - 608 , - 745 , - 1066 , - 1571 , - 2260 , - 189 , - 1246 , - 2487 , - 968 , - 2577 , - 1426 , - 459 , - 2620 , - 2021 , - 1606 , - 1375 , - 1328 , - 1465 , - 1786 , - 2291 , - 36 , - 909 , - 1966 , - 263 , - 1688 , - 353 , - 2146 , - 1179 , - 396 , - 2741 , - 2326 , - 2095 , - 2048 , - 2185 , - 2506 , - 67 , - 756 , - 1629 , - 2686 , - 983 , - 2408 , - 1073 , - 2866 , - 1899 , - 1116 , - 517 , - 102 , - 2815 , - 2768 , - 2905 , - 282 , - 787 , - 1476 , - 2349 , - 462 , - 1703 , - 184 , - 1793 , - 642 , - 2619 , - 1836 , - 1237 , - 822 , - 591 , - 544 , - 681 , - 1002 , - 1507 , - 2196 , - 125 , - 1182 , - 2423 , - 904 , - 2513 , - 1362 , - 395 , - 2556 , - 1957 , - 1542 , - 1311 , - 1264 , - 1401 , - 1722 , - 2227 , - 2916 , - 845 , - 1902 , - 199 , - 1624 , - 289 , - 2082 , - 1115 , - 332 , - 2677 , - 2262 , - 2031 , - 1984 , - 2121 , - 2442 , - 3 , - 692 , - 1565 , - 2622 , - 919 , - 2344 , - 1009 , - 2802 , - 1835 , - 1052 , - 453 , - 38 , - 2751 , - 2704 , - 2841 , - 218 , - 723 , - 1412 , - 2285 , - 398 , - 1639 , - 120 , - 1729 , - 578 , - 2555 , - 1772 , - 1173 , - 758 , - 527 , - 480 , - 617 , - 938 , - 1443 , - 2132 , - 61 , - 1118 , - 2359 , - 840 , - 2449 , - 1298 , - 331 , - 2492 , - 1893 , - 1478 , - 1247 , - 1200 , - 1337 , - 1658 , - 2163 , - 2852 , - 781 , - 1838 , - 135 , - 1560 , - 225 , - 2018 , - 1051 , - 268 , - 2613 , - 2198 , - 1967 , - 1920 , - 2057 , - 2378 , - 2883 , - 628 , - 1501 , - 2558 , - 855 , - 2280 , - 945 , - 2738 , - 1771 , - 988 , - 389 , - 2918 , - 2687 , - 2640 , - 2777 , - 154 , - 659 , - 1348 , - 2221 , - 334 , - 1575 , - 56 , - 1665 , - 514 , - 2491 , - 1708 , - 1109 , - 694 , - 463 , - 416 , - 553 , - 874 , - 1379 , - 2068 , - 2941 , - 1054 , - 2295 , - 776 , - 2385 , - 1234 , - 267 , - 2428 , - 1829 , - 1414 , - 1183 , - 1136 , - 1273 , - 1594 , - 2099 , - 2788 , - 717 , - 1774 , - 71 , - 1496 , - 161 , - 1954 , - 987 , - 204 , - 2549 , - 2134 , - 1903 , - 1856 , - 1993 , - 2314 , - 2819 , - 564 , - 1437 , - 2494 , - 791 , - 2216 , - 881 , - 2674 , - 1707 , - 924 , - 325 , - 2854 , - 2623 , - 2576 , - 2713 , - 90 , - 595 , - 1284 , - 2157 , - 270 , - 1511 , - 2936 , - 1601 , - 450 , - 2427 , - 1644 , - 1045 , - 630 , - 399 , - 352 , - 489 , - 810 , - 1315 , - 2004 , - 2877 , - 990 , - 2231 , - 712 , - 2321 , - 1170 , - 203 , - 2364 , - 1765 , - 1350 , - 1119 , - 1072 , - 1209 , - 1530 , - 2035 , - 2724 , - 653 , - 1710 , - 7 , - 1432 , - 97 , - 1890 , - 923 , - 140 , - 2485 , - 2070 , - 1839 , - 1792 , - 1929 , - 2250 , - 2755 , - 500 , - 1373 , - 2430 , - 727 , - 2152 , - 817 , - 2610 , - 1643 , - 860 , - 261 , - 2790 , - 2559 , - 2512 , - 2649 , - 26 , - 531 , - 1220 , - 2093 , - 206 , - 1447 , - 2872 , - 1537 , - 386 , - 2363 , - 1580 , - 981 , - 566 , - 335 , - 288 , - 425 , - 746 , - 1251 , - 1940 , - 2813 , - 926 , - 2167 , - 648 , - 2257 , - 1106 , - 139 , - 2300 , - 1701 , - 1286 , - 1055 , - 1008 , - 1145 , - 1466 , - 1971 , - 2660 , - 589 , - 1646 , - 2887 , - 1368 , - 33 , - 1826 , - 859 , - 76 , - 2421 , - 2006 , - 1775 , - 1728 , - 1865 , - 2186 , - 2691 , - 436 , - 1309 , - 2366 , - 663 , - 2088 , - 753 , - 2546 , - 1579 , - 796 , - 197 , - 2726 , - 2495 , - 2448 , - 2585 , - 2906 , - 467 , - 1156 , - 2029 , - 142 , - 1383 , - 2808 , - 1473 , - 322 , - 2299 , - 1516 , - 917 , - 502 , - 271 , - 224 , - 361 , - 682 , - 1187 , - 1876 , - 2749 , - 862 , - 2103 , - 584 , - 2193 , - 1042 , - 75 , - 2236 , - 1637 , - 1222 , - 991 , - 944 , - 1081 , - 1402 , - 1907 , - 2596 , - 525 , - 1582 , - 2823 , - 1304 , - 2913 , - 1762 , - 795 , - 12 , - 2357 , - 1942 , - 1711 , - 1664 , - 1801 , - 2122 , - 2627 , - 372 , - 1245 , - 2302 , - 599 , - 2024 , - 689 , - 2482 , - 1515 , - 732 , - 133 , - 2662 , - 2431 , - 2384 , - 2521 , - 2842 , - 403 , - 1092 , - 1965 , - 78 , - 1319 , - 2744 , - 1409 , - 258 , - 2235 , - 1452 , - 853 , - 438 , - 207 , - 160 , - 297 , - 618 , - 1123 , - 1812 , - 2685 , - 798 , - 2039 , - 520 , - 2129 , - 978 , - 11 , - 2172 , - 1573 , - 1158 , - 927 , - 880 , - 1017 , - 1338 , - 1843 , - 2532 , - 461 , - 1518 , - 2759 , - 1240 , - 2849 , - 1698 , - 731 , - 2892 , - 2293 , - 1878 , - 1647 , - 1600 , - 1737 , - 2058 , - 2563 , - 308 , - 1181 , - 2238 , - 535 , - 1960 , - 625 , - 2418 , - 1451 , - 668 , - 69 , - 2598 , - 2367 , - 2320 , - 2457 , - 2778 , - 339 , - 1028 , - 1901 , - 14 , - 1255 , - 2680 , - 1345 , - 194 , - 2171 , - 1388 , - 789 , - 374 , - 143 , - 96 , - 233 , - 554 , - 1059 , - 1748 , - 2621 , - 734 , - 1975 , - 456 , - 2065 , - 914 , - 2891 , - 2108 , - 1509 , - 1094 , - 863 , - 816 , - 953 , - 1274 , - 1779 , - 2468 , - 397 , - 1454 , - 2695 , - 1176 , - 2785 , - 1634 , - 667 , - 2828 , - 2229 , - 1814 , - 1583 , - 1536 , - 1673 , - 1994 , - 2499 , - 244 , - 1117 , - 2174 , - 471 , - 1896 , - 561 , - 2354 , - 1387 , - 604 , - 5 , - 2534 , - 2303 , - 2256 , - 2393 , - 2714 , - 275 , - 964 , - 1837 , - 2894 , - 1191 , - 2616 , - 1281 , - 130 , - 2107 , - 1324 , - 725 , - 310 , - 79 , - 32 , - 169 , - 490 , - 995 , - 1684 , - 2557 , - 670 , - 1911 , - 392 , - 2001 , - 850 , - 2827 , - 2044 , - 1445 , - 1030 , - 799 , - 752 , - 889 , - 1210 , - 1715 , - 2404 , - 333 , - 1390 , - 2631 , - 1112 , - 2721 , - 1570 , - 603 , - 2764 , - 2165 , - 1750 , - 1519 , - 1472 , - 1609 , - 1930 , - 2435 , - 180 , - 1053 , - 2110 , - 407 , - 1832 , - 497 , - 2290 , - 1323 , - 540 , - 2885 , - 2470 , - 2239 , - 2192 , - 2329 , - 2650 , - 211 , - 900 , - 1773 , - 2830 , - 1127 , - 2552 , - 1217 , - 66 , - 2043 , - 1260 , - 661 , - 246 , - 15 , - 2912 , - 105 , - 426 , - 931 , - 1620 , - 2493 , - 606 , - 1847 , - 328 , - 1937 , - 786 , - 2763 , - 1980 , - 1381 , - 966 , - 735 , - 688 , - 825 , - 1146 , - 1651 , - 2340 , - 269 , - 1326 , - 2567 , - 1048 , - 2657 , - 1506 , - 539 , - 2700 , - 2101 , - 1686 , - 1455 , - 1408 , - 1545 , - 1866 , - 2371 , - 116 , - 989 , - 2046 , - 343 , - 1768 , - 433 , - 2226 , - 1259 , - 476 , - 2821 , - 2406 , - 2175 , - 2128 , - 2265 , - 2586 , - 147 , - 836 , - 1709 , - 2766 , - 1063 , - 2488 , - 1153 , - 2 , - 1979 , - 1196 , - 597 , - 182 , - 2895 , - 2848 , - 41 , - 362 , - 867 , - 1556 , - 2429 , - 542 , - 1783 , - 264 , - 1873 , - 722 , - 2699 , - 1916 , - 1317 , - 902 , - 671 , - 624 , - 761 , - 1082 , - 1587 , - 2276 , - 205 , - 1262 , - 2503 , - 984 , - 2593 , - 1442 , - 475 , - 2636 , - 2037 , - 1622 , - 1391 , - 1344 , - 1481 , - 1802 , - 2307 , - 52 , - 925 , - 1982 , - 279 , - 1704 , - 369 , - 2162 , - 1195 , - 412 , - 2757 , - 2342 , - 2111 , - 2064 , - 2201 , - 2522 , - 83 , - 772 , - 1645 , - 2702 , - 999 , - 2424 , - 1089 , - 2882 , - 1915 , - 1132 , - 533 , - 118 , - 2831 , - 2784 , - 2921 , - 298 , - 803 , - 1492 , - 2365 , - 478 , - 1719 , - 200 , - 1809 , - 658 , - 2635 , - 1852 , - 1253 , - 838 , - 607 , - 560 , - 697 , - 1018 , - 1523 , - 2212 , - 141 , - 1198 , - 2439 , - 920 , - 2529 , - 1378 , - 411 , - 2572 , - 1973 , - 1558 , - 1327 , - 1280 , - 1417 , - 1738 , - 2243 , - 2932 , - 861 , - 1918 , - 215 , - 1640 , - 305 , - 2098 , - 1131 , - 348 , - 2693 , - 2278 , - 2047 , - 2000 , - 2137 , - 2458 , - 19 , - 708 , - 1581 , - 2638 , - 935 , - 2360 , - 1025 , - 2818 , - 1851 , - 1068 , - 469 , - 54 , - 2767 , - 2720 , - 2857 , - 234 , - 739 , - 1428 , - 2301 , - 414 , - 1655 , - 136 , - 1745 , - 594 , - 2571 , - 1788 , - 1189 , - 774 , - 543 , - 496 , - 633 , - 954 , - 1459 , - 2148 , - 77 , - 1134 , - 2375 , - 856 , - 2465 , - 1314 , - 347 , - 2508 , - 1909 , - 1494 , - 1263 , - 1216 , - 1353 , - 1674 , - 2179 , - 2868 , - 797 , - 1854 , - 151 , - 1576 , - 241 , - 2034 , - 1067 , - 284 , - 2629 , - 2214 , - 1983 , - 1936 , - 2073 , - 2394 , - 2899 , - 644 , - 1517 , - 2574 , - 871 , - 2296 , - 961 , - 2754 , - 1787 , - 1004 , - 405 , - 2934 , - 2703 , - 2656 , - 2793 , - 170 , - 675 , - 1364 , - 2237 , - 350 , - 1591 , - 72 , - 1681 , - 530 , - 2507 , - 1724 , - 1125 , - 710 , - 479 , - 432 , - 569 , - 890 , - 1395 , - 2084 , - 13 , - 1070 , - 2311 , - 792 , - 2401 , - 1250 , - 283 , - 2444 , - 1845 , - 1430 , - 1199 , - 1152 , - 1289 , - 1610 , - 2115 , - 2804 , - 733 , - 1790 , - 87 , - 1512 , - 177 , - 1970 , - 1003 , - 220 , - 2565 , - 2150 , - 1919 , - 1872 , - 2009 , - 2330 , - 2835 , - 580 , - 1453 , - 2510 , - 807 , - 2232 , - 897 , - 2690 , - 1723 , - 940 , - 341 , - 2870 , - 2639 , - 2592 , - 2729 , - 106 , - 611 , - 1300 , - 2173 , - 286 , - 1527 , - 8 , - 1617 , - 466 , - 2443 , - 1660 , - 1061 , - 646 , - 415 , - 368 , - 505 , - 826 , - 1331 , - 2020 , - 2893 , - 1006 , - 2247 , - 728 , - 2337 , - 1186 , - 219 , - 2380 , - 1781 , - 1366 , - 1135 , - 1088 , - 1225 , - 1546 , - 2051 , - 2740 , - 669 , - 1726 , - 23 , - 1448 , - 113 , - 1906 , - 939 , - 156 , - 2501 , - 2086 , - 1855 , - 1808 , - 1945 , - 2266 , - 2771 , - 516 , - 1389 , - 2446 , - 743 , - 2168 , - 833 , - 2626 , - 1659 , - 876 , - 277 , - 2806 , - 2575 , - 2528 , - 2665 , - 42 , - 547 , - 1236 , - 2109 , - 222 , - 1463 , - 2888 , - 1553 , - 402 , - 2379 , - 1596 , - 997 , - 582 , - 351 , - 304 , - 441 , - 762 , - 1267 , - 1956 , - 2829 , - 942 , - 2183 , - 664 , - 2273 , - 1122 , - 155 , - 2316 , - 1717 , - 1302 , - 1071 , - 1024 , - 1161 , - 1482 , - 1987 , - 2676 , - 605 , - 1662 , - 2903 , - 1384 , - 49 , - 1842 , - 875 , - 92 , - 2437 , - 2022 , - 1791 , - 1744 , - 1881 , - 2202 , - 2707 , - 452 , - 1325 , - 2382 , - 679 , - 2104 , - 769 , - 2562 , - 1595 , - 812 , - 213 , - 2742 , - 2511 , - 2464 , - 2601 , - 2922 , - 483 , - 1172 , - 2045 , - 158 , - 1399 , - 2824 , - 1489 , - 338 , - 2315 , - 1532 , - 933 , - 518 , - 287 , - 240 , - 377 , - 698 , - 1203 , - 1892 , - 2765 , - 878 , - 2119 , - 600 , - 2209 , - 1058 , - 91 , - 2252 , - 1653 , - 1238 , - 1007 , - 960 , - 1097 , - 1418 , - 1923 , - 2612 , - 541 , - 1598 , - 2839 , - 1320 , - 2929 , - 1778 , - 811 , - 28 , - 2373 , - 1958 , - 1727 , - 1680 , - 1817 , - 2138 , - 2643 , - 388 , - 1261 , - 2318 , - 615 , - 2040 , - 705 , - 2498 , - 1531 , - 748 , - 149 , - 2678 , - 2447 , - 2400 , - 2537 , - 2858 , - 419 , - 1108 , - 1981 , - 94 , - 1335 , - 2760 , - 1425 , - 274 , - 2251 , - 1468 , - 869 , - 454 , - 223 , - 176 , - 313 , - 634 , - 1139 , - 1828 , - 2701 , - 814 , - 2055 , - 536 , - 2145 , - 994 , - 27 , - 2188 , - 1589 , - 1174 , - 943 , - 896 , - 1033 , - 1354 , - 1859 , - 2548 , - 477 , - 1534 , - 2775 , - 1256 , - 2865 , - 1714 , - 747 , - 2908 , - 2309 , - 1894 , - 1663 , - 1616 , - 1753 , - 2074 , - 2579 , - 324 , - 1197 , - 2254 , - 551 , - 1976 , - 641 , - 2434 , - 1467 , - 684 , - 85 , - 2614 , - 2383 , - 2336 , - 2473 , - 2794 , - 355 , - 1044 , - 1917 , - 30 , - 1271 , - 2696 , - 1361 , - 210 , - 2187 , - 1404 , - 805 , - 390 , - 159 , - 112 , - 249 , - 570 , - 1075 , - 1764 , - 2637 , - 750 , - 1991 , - 472 , - 2081 , - 930 , - 2907 , - 2124 , - 1525 , - 1110 , - 879 , - 832 , - 969 , - 1290 , - 1795 , - 2484 , - 413 , - 1470 , - 2711 , - 1192 , - 2801 , - 1650 , - 683 , - 2844 , - 2245 , - 1830 , - 1599 , - 1552 , - 1689 , - 2010 , - 2515 , - 260 , - 1133 , - 2190 , - 487 , - 1912 , - 577 , - 2370 , - 1403 , - 620 , - 21 , - 2550 , - 2319 , - 2272 , - 2409 , - 2730 , - 291 , - 980 , - 1853 , - 2910 , - 1207 , - 2632 , - 1297 , - 146 , - 2123 , - 1340 , - 741 , - 326 , - 95 , - 48 , - 185 , - 506 , - 1011 , - 1700 , - 2573 , - 686 , - 1927 , - 408 , - 2017 , - 866 , - 2843 , - 2060 , - 1461 , - 1046 , - 815 , - 768 , - 905 , - 1226 , - 1731 , - 2420 , - 349 , - 1406 , - 2647 , - 1128 , - 2737 , - 1586 , - 619 , - 2780 , - 2181 , - 1766 , - 1535 , - 1488 , - 1625 , - 1946 , - 2451 , - 196 , - 1069 , - 2126 , - 423 , - 1848 , - 513 , - 2306 , - 1339 , - 556 , - 2901 , - 2486 , - 2255 , - 2208 , - 2345 , - 2666 , - 227 , - 916 , - 1789 , - 2846 , - 1143 , - 2568 , - 1233 , - 82 , - 2059 , - 1276 , - 677 , - 262 , - 31 , - 2928 , - 121 , - 442 , - 947 , - 1636 , - 2509 , - 622 , - 1863 , - 344 , - 1953 , - 802 , - 2779 , - 1996 , - 1397 , - 982 , - 751 , - 704 , - 841 , - 1162 , - 1667 , - 2356 , - 285 , - 1342 , - 2583 , - 1064 , - 2673 , - 1522 , - 555 , - 2716 , - 2117 , - 1702 , - 1471 , - 1424 , - 1561 , - 1882 , - 2387 , - 132 , - 1005 , - 2062 , - 359 , - 1784 , - 449 , - 2242 , - 1275 , - 492 , - 2837 , - 2422 , - 2191 , - 2144 , - 2281 , - 2602 , - 163 , - 852 , - 1725 , - 2782 , - 1079 , - 2504 , - 1169 , - 18 , - 1995 , - 1212 , - 613 , - 198 , - 2911 , - 2864 , - 57 , - 378 , - 883 , - 1572 , - 2445 , - 558 , - 1799 , - 280 , - 1889 , - 738 , - 2715 , - 1932 , - 1333 , - 918 , - 687 , - 640 , - 777 , - 1098 , - 1603 , - 2292 , - 221 , - 1278 , - 2519 , - 1000 , - 2609 , - 1458 , - 491 , - 2652 , - 2053 , - 1638 , - 1407 , - 1360 , - 1497 , - 1818 , - 2323 , - 68 , - 941 , - 1998 , - 295 , - 1720 , - 385 , - 2178 , - 1211 , - 428 , - 2773 , - 2358 , - 2127 , - 2080 , - 2217 , - 2538 , - 99 , - 788 , - 1661 , - 2718 , - 1015 , - 2440 , - 1105 , - 2898 , - 1931 , - 1148 , - 549 , - 134 , - 2847 , - 2800 , - 2937 , - 314 , - 819 , - 1508 , - 2381 , - 494 , - 1735 , - 216 , - 1825 , - 674 , - 2651 , - 1868 , - 1269 , - 854 , - 623 , - 576 , - 713 , - 1034 , - 1539 , - 2228 , - 157 , - 1214 , - 2455 , - 936 , - 2545 , - 1394 , - 427 , - 2588 , - 1989 , - 1574 , - 1343 , - 1296 , - 1433 , - 1754 , - 2259 , - 4 , - 877 , - 1934 , - 231 , - 1656 , - 321 , - 2114 , - 1147 , - 364 , - 2709 , - 2294 , - 2063 , - 2016 , - 2153 , - 2474 , - 35 , - 724 , - 1597 , - 2654 , - 951 , - 2376 , - 1041 , - 2834 , - 1867 , - 1084 , - 485 , - 70 , - 2783 , - 2736 , - 2873 , - 250 , - 755 , - 1444 , - 2317 , - 430 , - 1671 , - 152 , - 1761 , - 610 , - 2587 , - 1804 , - 1205 , - 790 , - 559 , - 512 , - 649 , - 970 , - 1475 , - 2164 , - 93 , - 1150 , - 2391 , - 872 , - 2481 , - 1330 , - 363 , - 2524 , - 1925 , - 1510 , - 1279 , - 1232 , - 1369 , - 1690 , - 2195 , - 2884 , - 813 , - 1870 , - 167 , - 1592 , - 257 , - 2050 , - 1083 , - 300 , - 2645 , - 2230 , - 1999 , - 1952 , - 2089 , - 2410 , - 2915 , - 660 , - 1533 , - 2590 , - 887 , - 2312 , - 977 , - 2770 , - 1803 , - 1020 , - 421 , - 6 , - 2719 , - 2672 , - 2809 , - 186 , - 691 , - 1380 , - 2253 , - 366 , - 1607 , - 88 , - 1697 , - 546 , - 2523 , - 1740 , - 1141 , - 726 , - 495 , - 448 , - 585 , - 906 , - 1411 , - 2100 , - 29 , - 1086 , - 2327 , - 808 , - 2417 , - 1266 , - 299 , - 2460 , - 1861 , - 1446 , - 1215 , - 1168 , - 1305 , - 1626 , - 2131 , - 2820 , - 749 , - 1806 , - 103 , - 1528 , - 193 , - 1986 , - 1019 , - 236 , - 2581 , - 2166 , - 1935 , - 1888 , - 2025 , - 2346 , - 2851 , - 596 , - 1469 , - 2526 , - 823 , - 2248 , - 913 , - 2706 , - 1739 , - 956 , - 357 , - 2886 , - 2655 , - 2608 , - 2745 , - 122 , - 627 , - 1316 , - 2189 , - 302 , - 1543 , - 24 , - 1633 , - 482 , - 2459 , - 1676 , - 1077 , - 662 , - 431 , - 384 , - 521 , - 842 , - 1347 , - 2036 , - 2909 , - 1022 , - 2263 , - 744 , - 2353 , - 1202 , - 235 , - 2396 , - 1797 , - 1382 , - 1151 , - 1104 , - 1241 , - 1562 , - 2067 , - 2756 , - 685 , - 1742 , - 39 , - 1464 , - 129 , - 1922 , - 955 , - 172 , - 2517 , - 2102 , - 1871 , - 1824 , - 1961 , - 2282 , - 2787 , - 532 , - 1405 , - 2462 , - 759 , - 2184 , - 849 , - 2642 , - 1675 , - 892 , - 293 , - 2822 , - 2591 , - 2544 , - 2681 , - 58 , - 563 , - 1252 , - 2125 , - 238 , - 1479 , - 2904 , - 1569 , - 418 , - 2395 , - 1612 , - 1013 , - 598 , - 367 , - 320 , - 457 , - 778 , - 1283 , - 1972 , - 2845 , - 958 , - 2199 , - 680 , - 2289 , - 1138 , - 171 , - 2332 , - 1733 , - 1318 , - 1087 , - 1040 , - 1177 , - 1498 , - 2003 , - 2692 , - 621 , - 1678 , - 2919 , - 1400 , - 65 , - 1858 , - 891 , - 108 , - 2453 , - 2038 , - 1807 , - 1760 , - 1897 , - 2218 , - 2723 , - 468 , - 1341 , - 2398 , - 695 , - 2120 , - 785 , - 2578 , - 1611 , - 828 , - 229 , - 2758 , - 2527 , - 2480 , - 2617 , - 2938 , - 499 , - 1188 , - 2061 , - 174 , - 1415 , - 2840 , - 1505 , - 354 , - 2331 , - 1548 , - 949 , - 534 , - 303 , - 256 , - 393 , - 714 , - 1219 , - 1908 , - 2781 , - 894 , - 2135 , - 616 , - 2225 , - 1074 , - 107 , - 2268 , - 1669 , - 1254 , - 1023 , - 976 , - 1113 , - 1434 , - 1939 , - 2628 , - 557 , - 1614 , - 2855 , - 1336 , - 1 , - 1794 , - 827 , - 44 , - 2389 , - 1974 , - 1743 , - 1696 , - 1833 , - 2154 , - 2659 , - 404 , - 1277 , - 2334 , - 631 , - 2056 , - 721 , - 2514 , - 1547 , - 764 , - 165 , - 2694 , - 2463 , - 2416 , - 2553 , - 2874 , - 435 , - 1124 , - 1997 , - 110 , - 1351 , - 2776 , - 1441 , - 290 , - 2267 , - 1484 , - 885 , - 470 , - 239 , - 192 , - 329 , - 650 , - 1155 , - 1844 , - 2717 , - 830 , - 2071 , - 552 , - 2161 , - 1010 , - 43 , - 2204 , - 1605 , - 1190 , - 959 , - 912 , - 1049 , - 1370 , - 1875 , - 2564 , - 493 , - 1550 , - 2791 , - 1272 , - 2881 , - 1730 , - 763 , - 2924 , - 2325 , - 1910 , - 1679 , - 1632 , - 1769 , - 2090 , - 2595 , - 340 , - 1213 , - 2270 , - 567 , - 1992 , - 657 , - 2450 , - 1483 , - 700 , - 101 , - 2630 , - 2399 , - 2352 , - 2489 , - 2810 , - 371 , - 1060 , - 1933 , - 46 , - 1287 , - 2712 , - 1377 , - 226 , - 2203 , - 1420 , - 821 , - 406 , - 175 , - 128 , - 265 , - 586 , - 1091 , - 1780 , - 2653 , - 766 , - 2007 , - 488 , - 2097 , - 946 , - 2923 , - 2140 , - 1541 , - 1126 , - 895 , - 848 , - 985 , - 1306 , - 1811 , - 2500 , - 429 , - 1486 , - 2727 , - 1208 , - 2817 , - 1666 , - 699 , - 2860 , - 2261 , - 1846 , - 1615 , - 1568 , - 1705 , - 2026 , - 2531 , - 276 , - 1149 , - 2206 , - 503 , - 1928 , - 593 , - 2386 , - 1419 , - 636 , - 37 , - 2566 , - 2335 , - 2288 , - 2425 , - 2746 , - 307 , - 996 , - 1869 , - 2926 , - 1223 , - 2648 , - 1313 , - 162 , - 2139 , - 1356 , - 757 , - 342 , - 111 , - 64 , - 201 , - 522 , - 1027 , - 1716 , - 2589 , - 702 , - 1943 , - 424 , - 2033 , - 882 , - 2859 , - 2076 , - 1477 , - 1062 , - 831 , - 784 , - 921 , - 1242 , - 1747 , - 2436 , - 365 , - 1422 , - 2663 , - 1144 , - 2753 , - 1602 , - 635 , - 2796 , - 2197 , - 1782 , - 1551 , - 1504 , - 1641 , - 1962 , - 2467 , - 212 , - 1085 , - 2142 , - 439 , - 1864 , - 529 , - 2322 , - 1355 , - 572 , - 2917 , - 2502 , - 2271 , - 2224 , - 2361 , - 2682 , - 243 , - 932 , - 1805 , - 2862 , - 1159 , - 2584 , - 1249 , - 98 , - 2075 , - 1292 , - 693 , - 278 , - 47 , - 0 , - 345 , - 1066 , - 2163 , - 628 , - 2477 , - 1694 , - 1287 , - 1256 , - 1601 , - 2322 , - 411 , - 1884 , - 725 , - 2950 , - 2543 , - 2512 , - 2857 , - 570 , - 1667 , - 132 , - 1981 , - 1198 , - 791 , - 760 , - 1105 , - 1826 , - 2923 , - 1388 , - 229 , - 2454 , - 2047 , - 2016 , - 2361 , - 74 , - 1171 , - 2644 , - 1485 , - 702 , - 295 , - 264 , - 609 , - 1330 , - 2427 , - 892 , - 2741 , - 1958 , - 1551 , - 1520 , - 1865 , - 2586 , - 675 , - 2148 , - 989 , - 206 , - 2807 , - 2776 , - 113 , - 834 , - 1931 , - 396 , - 2245 , - 1462 , - 1055 , - 1024 , - 1369 , - 2090 , - 179 , - 1652 , - 493 , - 2718 , - 2311 , - 2280 , - 2625 , - 338 , - 1435 , - 2908 , - 1749 , - 966 , - 559 , - 528 , - 873 , - 1594 , - 2691 , - 1156 , - 3005 , - 2222 , - 1815 , - 1784 , - 2129 , - 2850 , - 939 , - 2412 , - 1253 , - 470 , - 63 , - 32 , - 377 , - 1098 , - 2195 , - 660 , - 2509 , - 1726 , - 1319 , - 1288 , - 1633 , - 2354 , - 443 , - 1916 , - 757 , - 2982 , - 2575 , - 2544 , - 2889 , - 602 , - 1699 , - 164 , - 2013 , - 1230 , - 823 , - 792 , - 1137 , - 1858 , - 2955 , - 1420 , - 261 , - 2486 , - 2079 , - 2048 , - 2393 , - 106 , - 1203 , - 2676 , - 1517 , - 734 , - 327 , - 296 , - 641 , - 1362 , - 2459 , - 924 , - 2773 , - 1990 , - 1583 , - 1552 , - 1897 , - 2618 , - 707 , - 2180 , - 1021 , - 238 , - 2839 , - 2808 , - 145 , - 866 , - 1963 , - 428 , - 2277 , - 1494 , - 1087 , - 1056 , - 1401 , - 2122 , - 211 , - 1684 , - 525 , - 2750 , - 2343 , - 2312 , - 2657 , - 370 , - 1467 , - 2940 , - 1781 , - 998 , - 591 , - 560 , - 905 , - 1626 , - 2723 , - 1188 , - 29 , - 2254 , - 1847 , - 1816 , - 2161 , - 2882 , - 971 , - 2444 , - 1285 , - 502 , - 95 , - 64 , - 409 , - 1130 , - 2227 , - 692 , - 2541 , - 1758 , - 1351 , - 1320 , - 1665 , - 2386 , - 475 , - 1948 , - 789 , - 6 , - 2607 , - 2576 , - 2921 , - 634 , - 1731 , - 196 , - 2045 , - 1262 , - 855 , - 824 , - 1169 , - 1890 , - 2987 , - 1452 , - 293 , - 2518 , - 2111 , - 2080 , - 2425 , - 138 , - 1235 , - 2708 , - 1549 , - 766 , - 359 , - 328 , - 673 , - 1394 , - 2491 , - 956 , - 2805 , - 2022 , - 1615 , - 1584 , - 1929 , - 2650 , - 739 , - 2212 , - 1053 , - 270 , - 2871 , - 2840 , - 177 , - 898 , - 1995 , - 460 , - 2309 , - 1526 , - 1119 , - 1088 , - 1433 , - 2154 , - 243 , - 1716 , - 557 , - 2782 , - 2375 , - 2344 , - 2689 , - 402 , - 1499 , - 2972 , - 1813 , - 1030 , - 623 , - 592 , - 937 , - 1658 , - 2755 , - 1220 , - 61 , - 2286 , - 1879 , - 1848 , - 2193 , - 2914 , - 1003 , - 2476 , - 1317 , - 534 , - 127 , - 96 , - 441 , - 1162 , - 2259 , - 724 , - 2573 , - 1790 , - 1383 , - 1352 , - 1697 , - 2418 , - 507 , - 1980 , - 821 , - 38 , - 2639 , - 2608 , - 2953 , - 666 , - 1763 , - 228 , - 2077 , - 1294 , - 887 , - 856 , - 1201 , - 1922 , - 11 , - 1484 , - 325 , - 2550 , - 2143 , - 2112 , - 2457 , - 170 , - 1267 , - 2740 , - 1581 , - 798 , - 391 , - 360 , - 705 , - 1426 , - 2523 , - 988 , - 2837 , - 2054 , - 1647 , - 1616 , - 1961 , - 2682 , - 771 , - 2244 , - 1085 , - 302 , - 2903 , - 2872 , - 209 , - 930 , - 2027 , - 492 , - 2341 , - 1558 , - 1151 , - 1120 , - 1465 , - 2186 , - 275 , - 1748 , - 589 , - 2814 , - 2407 , - 2376 , - 2721 , - 434 , - 1531 , - 3004 , - 1845 , - 1062 , - 655 , - 624 , - 969 , - 1690 , - 2787 , - 1252 , - 93 , - 2318 , - 1911 , - 1880 , - 2225 , - 2946 , - 1035 , - 2508 , - 1349 , - 566 , - 159 , - 128 , - 473 , - 1194 , - 2291 , - 756 , - 2605 , - 1822 , - 1415 , - 1384 , - 1729 , - 2450 , - 539 , - 2012 , - 853 , - 70 , - 2671 , - 2640 , - 2985 , - 698 , - 1795 , - 260 , - 2109 , - 1326 , - 919 , - 888 , - 1233 , - 1954 , - 43 , - 1516 , - 357 , - 2582 , - 2175 , - 2144 , - 2489 , - 202 , - 1299 , - 2772 , - 1613 , - 830 , - 423 , - 392 , - 737 , - 1458 , - 2555 , - 1020 , - 2869 , - 2086 , - 1679 , - 1648 , - 1993 , - 2714 , - 803 , - 2276 , - 1117 , - 334 , - 2935 , - 2904 , - 241 , - 962 , - 2059 , - 524 , - 2373 , - 1590 , - 1183 , - 1152 , - 1497 , - 2218 , - 307 , - 1780 , - 621 , - 2846 , - 2439 , - 2408 , - 2753 , - 466 , - 1563 , - 28 , - 1877 , - 1094 , - 687 , - 656 , - 1001 , - 1722 , - 2819 , - 1284 , - 125 , - 2350 , - 1943 , - 1912 , - 2257 , - 2978 , - 1067 , - 2540 , - 1381 , - 598 , - 191 , - 160 , - 505 , - 1226 , - 2323 , - 788 , - 2637 , - 1854 , - 1447 , - 1416 , - 1761 , - 2482 , - 571 , - 2044 , - 885 , - 102 , - 2703 , - 2672 , - 9 , - 730 , - 1827 , - 292 , - 2141 , - 1358 , - 951 , - 920 , - 1265 , - 1986 , - 75 , - 1548 , - 389 , - 2614 , - 2207 , - 2176 , - 2521 , - 234 , - 1331 , - 2804 , - 1645 , - 862 , - 455 , - 424 , - 769 , - 1490 , - 2587 , - 1052 , - 2901 , - 2118 , - 1711 , - 1680 , - 2025 , - 2746 , - 835 , - 2308 , - 1149 , - 366 , - 2967 , - 2936 , - 273 , - 994 , - 2091 , - 556 , - 2405 , - 1622 , - 1215 , - 1184 , - 1529 , - 2250 , - 339 , - 1812 , - 653 , - 2878 , - 2471 , - 2440 , - 2785 , - 498 , - 1595 , - 60 , - 1909 , - 1126 , - 719 , - 688 , - 1033 , - 1754 , - 2851 , - 1316 , - 157 , - 2382 , - 1975 , - 1944 , - 2289 , - 2 , - 1099 , - 2572 , - 1413 , - 630 , - 223 , - 192 , - 537 , - 1258 , - 2355 , - 820 , - 2669 , - 1886 , - 1479 , - 1448 , - 1793 , - 2514 , - 603 , - 2076 , - 917 , - 134 , - 2735 , - 2704 , - 41 , - 762 , - 1859 , - 324 , - 2173 , - 1390 , - 983 , - 952 , - 1297 , - 2018 , - 107 , - 1580 , - 421 , - 2646 , - 2239 , - 2208 , - 2553 , - 266 , - 1363 , - 2836 , - 1677 , - 894 , - 487 , - 456 , - 801 , - 1522 , - 2619 , - 1084 , - 2933 , - 2150 , - 1743 , - 1712 , - 2057 , - 2778 , - 867 , - 2340 , - 1181 , - 398 , - 2999 , - 2968 , - 305 , - 1026 , - 2123 , - 588 , - 2437 , - 1654 , - 1247 , - 1216 , - 1561 , - 2282 , - 371 , - 1844 , - 685 , - 2910 , - 2503 , - 2472 , - 2817 , - 530 , - 1627 , - 92 , - 1941 , - 1158 , - 751 , - 720 , - 1065 , - 1786 , - 2883 , - 1348 , - 189 , - 2414 , - 2007 , - 1976 , - 2321 , - 34 , - 1131 , - 2604 , - 1445 , - 662 , - 255 , - 224 , - 569 , - 1290 , - 2387 , - 852 , - 2701 , - 1918 , - 1511 , - 1480 , - 1825 , - 2546 , - 635 , - 2108 , - 949 , - 166 , - 2767 , - 2736 , - 73 , - 794 , - 1891 , - 356 , - 2205 , - 1422 , - 1015 , - 984 , - 1329 , - 2050 , - 139 , - 1612 , - 453 , - 2678 , - 2271 , - 2240 , - 2585 , - 298 , - 1395 , - 2868 , - 1709 , - 926 , - 519 , - 488 , - 833 , - 1554 , - 2651 , - 1116 , - 2965 , - 2182 , - 1775 , - 1744 , - 2089 , - 2810 , - 899 , - 2372 , - 1213 , - 430 , - 23 , - 3000 , - 337 , - 1058 , - 2155 , - 620 , - 2469 , - 1686 , - 1279 , - 1248 , - 1593 , - 2314 , - 403 , - 1876 , - 717 , - 2942 , - 2535 , - 2504 , - 2849 , - 562 , - 1659 , - 124 , - 1973 , - 1190 , - 783 , - 752 , - 1097 , - 1818 , - 2915 , - 1380 , - 221 , - 2446 , - 2039 , - 2008 , - 2353 , - 66 , - 1163 , - 2636 , - 1477 , - 694 , - 287 , - 256 , - 601 , - 1322 , - 2419 , - 884 , - 2733 , - 1950 , - 1543 , - 1512 , - 1857 , - 2578 , - 667 , - 2140 , - 981 , - 198 , - 2799 , - 2768 , - 105 , - 826 , - 1923 , - 388 , - 2237 , - 1454 , - 1047 , - 1016 , - 1361 , - 2082 , - 171 , - 1644 , - 485 , - 2710 , - 2303 , - 2272 , - 2617 , - 330 , - 1427 , - 2900 , - 1741 , - 958 , - 551 , - 520 , - 865 , - 1586 , - 2683 , - 1148 , - 2997 , - 2214 , - 1807 , - 1776 , - 2121 , - 2842 , - 931 , - 2404 , - 1245 , - 462 , - 55 , - 24 , - 369 , - 1090 , - 2187 , - 652 , - 2501 , - 1718 , - 1311 , - 1280 , - 1625 , - 2346 , - 435 , - 1908 , - 749 , - 2974 , - 2567 , - 2536 , - 2881 , - 594 , - 1691 , - 156 , - 2005 , - 1222 , - 815 , - 784 , - 1129 , - 1850 , - 2947 , - 1412 , - 253 , - 2478 , - 2071 , - 2040 , - 2385 , - 98 , - 1195 , - 2668 , - 1509 , - 726 , - 319 , - 288 , - 633 , - 1354 , - 2451 , - 916 , - 2765 , - 1982 , - 1575 , - 1544 , - 1889 , - 2610 , - 699 , - 2172 , - 1013 , - 230 , - 2831 , - 2800 , - 137 , - 858 , - 1955 , - 420 , - 2269 , - 1486 , - 1079 , - 1048 , - 1393 , - 2114 , - 203 , - 1676 , - 517 , - 2742 , - 2335 , - 2304 , - 2649 , - 362 , - 1459 , - 2932 , - 1773 , - 990 , - 583 , - 552 , - 897 , - 1618 , - 2715 , - 1180 , - 21 , - 2246 , - 1839 , - 1808 , - 2153 , - 2874 , - 963 , - 2436 , - 1277 , - 494 , - 87 , - 56 , - 401 , - 1122 , - 2219 , - 684 , - 2533 , - 1750 , - 1343 , - 1312 , - 1657 , - 2378 , - 467 , - 1940 , - 781 , - 3006 , - 2599 , - 2568 , - 2913 , - 626 , - 1723 , - 188 , - 2037 , - 1254 , - 847 , - 816 , - 1161 , - 1882 , - 2979 , - 1444 , - 285 , - 2510 , - 2103 , - 2072 , - 2417 , - 130 , - 1227 , - 2700 , - 1541 , - 758 , - 351 , - 320 , - 665 , - 1386 , - 2483 , - 948 , - 2797 , - 2014 , - 1607 , - 1576 , - 1921 , - 2642 , - 731 , - 2204 , - 1045 , - 262 , - 2863 , - 2832 , - 169 , - 890 , - 1987 , - 452 , - 2301 , - 1518 , - 1111 , - 1080 , - 1425 , - 2146 , - 235 , - 1708 , - 549 , - 2774 , - 2367 , - 2336 , - 2681 , - 394 , - 1491 , - 2964 , - 1805 , - 1022 , - 615 , - 584 , - 929 , - 1650 , - 2747 , - 1212 , - 53 , - 2278 , - 1871 , - 1840 , - 2185 , - 2906 , - 995 , - 2468 , - 1309 , - 526 , - 119 , - 88 , - 433 , - 1154 , - 2251 , - 716 , - 2565 , - 1782 , - 1375 , - 1344 , - 1689 , - 2410 , - 499 , - 1972 , - 813 , - 30 , - 2631 , - 2600 , - 2945 , - 658 , - 1755 , - 220 , - 2069 , - 1286 , - 879 , - 848 , - 1193 , - 1914 , - 3 , - 1476 , - 317 , - 2542 , - 2135 , - 2104 , - 2449 , - 162 , - 1259 , - 2732 , - 1573 , - 790 , - 383 , - 352 , - 697 , - 1418 , - 2515 , - 980 , - 2829 , - 2046 , - 1639 , - 1608 , - 1953 , - 2674 , - 763 , - 2236 , - 1077 , - 294 , - 2895 , - 2864 , - 201 , - 922 , - 2019 , - 484 , - 2333 , - 1550 , - 1143 , - 1112 , - 1457 , - 2178 , - 267 , - 1740 , - 581 , - 2806 , - 2399 , - 2368 , - 2713 , - 426 , - 1523 , - 2996 , - 1837 , - 1054 , - 647 , - 616 , - 961 , - 1682 , - 2779 , - 1244 , - 85 , - 2310 , - 1903 , - 1872 , - 2217 , - 2938 , - 1027 , - 2500 , - 1341 , - 558 , - 151 , - 120 , - 465 , - 1186 , - 2283 , - 748 , - 2597 , - 1814 , - 1407 , - 1376 , - 1721 , - 2442 , - 531 , - 2004 , - 845 , - 62 , - 2663 , - 2632 , - 2977 , - 690 , - 1787 , - 252 , - 2101 , - 1318 , - 911 , - 880 , - 1225 , - 1946 , - 35 , - 1508 , - 349 , - 2574 , - 2167 , - 2136 , - 2481 , - 194 , - 1291 , - 2764 , - 1605 , - 822 , - 415 , - 384 , - 729 , - 1450 , - 2547 , - 1012 , - 2861 , - 2078 , - 1671 , - 1640 , - 1985 , - 2706 , - 795 , - 2268 , - 1109 , - 326 , - 2927 , - 2896 , - 233 , - 954 , - 2051 , - 516 , - 2365 , - 1582 , - 1175 , - 1144 , - 1489 , - 2210 , - 299 , - 1772 , - 613 , - 2838 , - 2431 , - 2400 , - 2745 , - 458 , - 1555 , - 20 , - 1869 , - 1086 , - 679 , - 648 , - 993 , - 1714 , - 2811 , - 1276 , - 117 , - 2342 , - 1935 , - 1904 , - 2249 , - 2970 , - 1059 , - 2532 , - 1373 , - 590 , - 183 , - 152 , - 497 , - 1218 , - 2315 , - 780 , - 2629 , - 1846 , - 1439 , - 1408 , - 1753 , - 2474 , - 563 , - 2036 , - 877 , - 94 , - 2695 , - 2664 , - 1 , - 722 , - 1819 , - 284 , - 2133 , - 1350 , - 943 , - 912 , - 1257 , - 1978 , - 67 , - 1540 , - 381 , - 2606 , - 2199 , - 2168 , - 2513 , - 226 , - 1323 , - 2796 , - 1637 , - 854 , - 447 , - 416 , - 761 , - 1482 , - 2579 , - 1044 , - 2893 , - 2110 , - 1703 , - 1672 , - 2017 , - 2738 , - 827 , - 2300 , - 1141 , - 358 , - 2959 , - 2928 , - 265 , - 986 , - 2083 , - 548 , - 2397 , - 1614 , - 1207 , - 1176 , - 1521 , - 2242 , - 331 , - 1804 , - 645 , - 2870 , - 2463 , - 2432 , - 2777 , - 490 , - 1587 , - 52 , - 1901 , - 1118 , - 711 , - 680 , - 1025 , - 1746 , - 2843 , - 1308 , - 149 , - 2374 , - 1967 , - 1936 , - 2281 , - 3002 , - 1091 , - 2564 , - 1405 , - 622 , - 215 , - 184 , - 529 , - 1250 , - 2347 , - 812 , - 2661 , - 1878 , - 1471 , - 1440 , - 1785 , - 2506 , - 595 , - 2068 , - 909 , - 126 , - 2727 , - 2696 , - 33 , - 754 , - 1851 , - 316 , - 2165 , - 1382 , - 975 , - 944 , - 1289 , - 2010 , - 99 , - 1572 , - 413 , - 2638 , - 2231 , - 2200 , - 2545 , - 258 , - 1355 , - 2828 , - 1669 , - 886 , - 479 , - 448 , - 793 , - 1514 , - 2611 , - 1076 , - 2925 , - 2142 , - 1735 , - 1704 , - 2049 , - 2770 , - 859 , - 2332 , - 1173 , - 390 , - 2991 , - 2960 , - 297 , - 1018 , - 2115 , - 580 , - 2429 , - 1646 , - 1239 , - 1208 , - 1553 , - 2274 , - 363 , - 1836 , - 677 , - 2902 , - 2495 , - 2464 , - 2809 , - 522 , - 1619 , - 84 , - 1933 , - 1150 , - 743 , - 712 , - 1057 , - 1778 , - 2875 , - 1340 , - 181 , - 2406 , - 1999 , - 1968 , - 2313 , - 26 , - 1123 , - 2596 , - 1437 , - 654 , - 247 , - 216 , - 561 , - 1282 , - 2379 , - 844 , - 2693 , - 1910 , - 1503 , - 1472 , - 1817 , - 2538 , - 627 , - 2100 , - 941 , - 158 , - 2759 , - 2728 , - 65 , - 786 , - 1883 , - 348 , - 2197 , - 1414 , - 1007 , - 976 , - 1321 , - 2042 , - 131 , - 1604 , - 445 , - 2670 , - 2263 , - 2232 , - 2577 , - 290 , - 1387 , - 2860 , - 1701 , - 918 , - 511 , - 480 , - 825 , - 1546 , - 2643 , - 1108 , - 2957 , - 2174 , - 1767 , - 1736 , - 2081 , - 2802 , - 891 , - 2364 , - 1205 , - 422 , - 15 , - 2992 , - 329 , - 1050 , - 2147 , - 612 , - 2461 , - 1678 , - 1271 , - 1240 , - 1585 , - 2306 , - 395 , - 1868 , - 709 , - 2934 , - 2527 , - 2496 , - 2841 , - 554 , - 1651 , - 116 , - 1965 , - 1182 , - 775 , - 744 , - 1089 , - 1810 , - 2907 , - 1372 , - 213 , - 2438 , - 2031 , - 2000 , - 2345 , - 58 , - 1155 , - 2628 , - 1469 , - 686 , - 279 , - 248 , - 593 , - 1314 , - 2411 , - 876 , - 2725 , - 1942 , - 1535 , - 1504 , - 1849 , - 2570 , - 659 , - 2132 , - 973 , - 190 , - 2791 , - 2760 , - 97 , - 818 , - 1915 , - 380 , - 2229 , - 1446 , - 1039 , - 1008 , - 1353 , - 2074 , - 163 , - 1636 , - 477 , - 2702 , - 2295 , - 2264 , - 2609 , - 322 , - 1419 , - 2892 , - 1733 , - 950 , - 543 , - 512 , - 857 , - 1578 , - 2675 , - 1140 , - 2989 , - 2206 , - 1799 , - 1768 , - 2113 , - 2834 , - 923 , - 2396 , - 1237 , - 454 , - 47 , - 16 , - 361 , - 1082 , - 2179 , - 644 , - 2493 , - 1710 , - 1303 , - 1272 , - 1617 , - 2338 , - 427 , - 1900 , - 741 , - 2966 , - 2559 , - 2528 , - 2873 , - 586 , - 1683 , - 148 , - 1997 , - 1214 , - 807 , - 776 , - 1121 , - 1842 , - 2939 , - 1404 , - 245 , - 2470 , - 2063 , - 2032 , - 2377 , - 90 , - 1187 , - 2660 , - 1501 , - 718 , - 311 , - 280 , - 625 , - 1346 , - 2443 , - 908 , - 2757 , - 1974 , - 1567 , - 1536 , - 1881 , - 2602 , - 691 , - 2164 , - 1005 , - 222 , - 2823 , - 2792 , - 129 , - 850 , - 1947 , - 412 , - 2261 , - 1478 , - 1071 , - 1040 , - 1385 , - 2106 , - 195 , - 1668 , - 509 , - 2734 , - 2327 , - 2296 , - 2641 , - 354 , - 1451 , - 2924 , - 1765 , - 982 , - 575 , - 544 , - 889 , - 1610 , - 2707 , - 1172 , - 13 , - 2238 , - 1831 , - 1800 , - 2145 , - 2866 , - 955 , - 2428 , - 1269 , - 486 , - 79 , - 48 , - 393 , - 1114 , - 2211 , - 676 , - 2525 , - 1742 , - 1335 , - 1304 , - 1649 , - 2370 , - 459 , - 1932 , - 773 , - 2998 , - 2591 , - 2560 , - 2905 , - 618 , - 1715 , - 180 , - 2029 , - 1246 , - 839 , - 808 , - 1153 , - 1874 , - 2971 , - 1436 , - 277 , - 2502 , - 2095 , - 2064 , - 2409 , - 122 , - 1219 , - 2692 , - 1533 , - 750 , - 343 , - 312 , - 657 , - 1378 , - 2475 , - 940 , - 2789 , - 2006 , - 1599 , - 1568 , - 1913 , - 2634 , - 723 , - 2196 , - 1037 , - 254 , - 2855 , - 2824 , - 161 , - 882 , - 1979 , - 444 , - 2293 , - 1510 , - 1103 , - 1072 , - 1417 , - 2138 , - 227 , - 1700 , - 541 , - 2766 , - 2359 , - 2328 , - 2673 , - 386 , - 1483 , - 2956 , - 1797 , - 1014 , - 607 , - 576 , - 921 , - 1642 , - 2739 , - 1204 , - 45 , - 2270 , - 1863 , - 1832 , - 2177 , - 2898 , - 987 , - 2460 , - 1301 , - 518 , - 111 , - 80 , - 425 , - 1146 , - 2243 , - 708 , - 2557 , - 1774 , - 1367 , - 1336 , - 1681 , - 2402 , - 491 , - 1964 , - 805 , - 22 , - 2623 , - 2592 , - 2937 , - 650 , - 1747 , - 212 , - 2061 , - 1278 , - 871 , - 840 , - 1185 , - 1906 , - 3003 , - 1468 , - 309 , - 2534 , - 2127 , - 2096 , - 2441 , - 154 , - 1251 , - 2724 , - 1565 , - 782 , - 375 , - 344 , - 689 , - 1410 , - 2507 , - 972 , - 2821 , - 2038 , - 1631 , - 1600 , - 1945 , - 2666 , - 755 , - 2228 , - 1069 , - 286 , - 2887 , - 2856 , - 193 , - 914 , - 2011 , - 476 , - 2325 , - 1542 , - 1135 , - 1104 , - 1449 , - 2170 , - 259 , - 1732 , - 573 , - 2798 , - 2391 , - 2360 , - 2705 , - 418 , - 1515 , - 2988 , - 1829 , - 1046 , - 639 , - 608 , - 953 , - 1674 , - 2771 , - 1236 , - 77 , - 2302 , - 1895 , - 1864 , - 2209 , - 2930 , - 1019 , - 2492 , - 1333 , - 550 , - 143 , - 112 , - 457 , - 1178 , - 2275 , - 740 , - 2589 , - 1806 , - 1399 , - 1368 , - 1713 , - 2434 , - 523 , - 1996 , - 837 , - 54 , - 2655 , - 2624 , - 2969 , - 682 , - 1779 , - 244 , - 2093 , - 1310 , - 903 , - 872 , - 1217 , - 1938 , - 27 , - 1500 , - 341 , - 2566 , - 2159 , - 2128 , - 2473 , - 186 , - 1283 , - 2756 , - 1597 , - 814 , - 407 , - 376 , - 721 , - 1442 , - 2539 , - 1004 , - 2853 , - 2070 , - 1663 , - 1632 , - 1977 , - 2698 , - 787 , - 2260 , - 1101 , - 318 , - 2919 , - 2888 , - 225 , - 946 , - 2043 , - 508 , - 2357 , - 1574 , - 1167 , - 1136 , - 1481 , - 2202 , - 291 , - 1764 , - 605 , - 2830 , - 2423 , - 2392 , - 2737 , - 450 , - 1547 , - 12 , - 1861 , - 1078 , - 671 , - 640 , - 985 , - 1706 , - 2803 , - 1268 , - 109 , - 2334 , - 1927 , - 1896 , - 2241 , - 2962 , - 1051 , - 2524 , - 1365 , - 582 , - 175 , - 144 , - 489 , - 1210 , - 2307 , - 772 , - 2621 , - 1838 , - 1431 , - 1400 , - 1745 , - 2466 , - 555 , - 2028 , - 869 , - 86 , - 2687 , - 2656 , - 3001 , - 714 , - 1811 , - 276 , - 2125 , - 1342 , - 935 , - 904 , - 1249 , - 1970 , - 59 , - 1532 , - 373 , - 2598 , - 2191 , - 2160 , - 2505 , - 218 , - 1315 , - 2788 , - 1629 , - 846 , - 439 , - 408 , - 753 , - 1474 , - 2571 , - 1036 , - 2885 , - 2102 , - 1695 , - 1664 , - 2009 , - 2730 , - 819 , - 2292 , - 1133 , - 350 , - 2951 , - 2920 , - 257 , - 978 , - 2075 , - 540 , - 2389 , - 1606 , - 1199 , - 1168 , - 1513 , - 2234 , - 323 , - 1796 , - 637 , - 2862 , - 2455 , - 2424 , - 2769 , - 482 , - 1579 , - 44 , - 1893 , - 1110 , - 703 , - 672 , - 1017 , - 1738 , - 2835 , - 1300 , - 141 , - 2366 , - 1959 , - 1928 , - 2273 , - 2994 , - 1083 , - 2556 , - 1397 , - 614 , - 207 , - 176 , - 521 , - 1242 , - 2339 , - 804 , - 2653 , - 1870 , - 1463 , - 1432 , - 1777 , - 2498 , - 587 , - 2060 , - 901 , - 118 , - 2719 , - 2688 , - 25 , - 746 , - 1843 , - 308 , - 2157 , - 1374 , - 967 , - 936 , - 1281 , - 2002 , - 91 , - 1564 , - 405 , - 2630 , - 2223 , - 2192 , - 2537 , - 250 , - 1347 , - 2820 , - 1661 , - 878 , - 471 , - 440 , - 785 , - 1506 , - 2603 , - 1068 , - 2917 , - 2134 , - 1727 , - 1696 , - 2041 , - 2762 , - 851 , - 2324 , - 1165 , - 382 , - 2983 , - 2952 , - 289 , - 1010 , - 2107 , - 572 , - 2421 , - 1638 , - 1231 , - 1200 , - 1545 , - 2266 , - 355 , - 1828 , - 669 , - 2894 , - 2487 , - 2456 , - 2801 , - 514 , - 1611 , - 76 , - 1925 , - 1142 , - 735 , - 704 , - 1049 , - 1770 , - 2867 , - 1332 , - 173 , - 2398 , - 1991 , - 1960 , - 2305 , - 18 , - 1115 , - 2588 , - 1429 , - 646 , - 239 , - 208 , - 553 , - 1274 , - 2371 , - 836 , - 2685 , - 1902 , - 1495 , - 1464 , - 1809 , - 2530 , - 619 , - 2092 , - 933 , - 150 , - 2751 , - 2720 , - 57 , - 778 , - 1875 , - 340 , - 2189 , - 1406 , - 999 , - 968 , - 1313 , - 2034 , - 123 , - 1596 , - 437 , - 2662 , - 2255 , - 2224 , - 2569 , - 282 , - 1379 , - 2852 , - 1693 , - 910 , - 503 , - 472 , - 817 , - 1538 , - 2635 , - 1100 , - 2949 , - 2166 , - 1759 , - 1728 , - 2073 , - 2794 , - 883 , - 2356 , - 1197 , - 414 , - 7 , - 2984 , - 321 , - 1042 , - 2139 , - 604 , - 2453 , - 1670 , - 1263 , - 1232 , - 1577 , - 2298 , - 387 , - 1860 , - 701 , - 2926 , - 2519 , - 2488 , - 2833 , - 546 , - 1643 , - 108 , - 1957 , - 1174 , - 767 , - 736 , - 1081 , - 1802 , - 2899 , - 1364 , - 205 , - 2430 , - 2023 , - 1992 , - 2337 , - 50 , - 1147 , - 2620 , - 1461 , - 678 , - 271 , - 240 , - 585 , - 1306 , - 2403 , - 868 , - 2717 , - 1934 , - 1527 , - 1496 , - 1841 , - 2562 , - 651 , - 2124 , - 965 , - 182 , - 2783 , - 2752 , - 89 , - 810 , - 1907 , - 372 , - 2221 , - 1438 , - 1031 , - 1000 , - 1345 , - 2066 , - 155 , - 1628 , - 469 , - 2694 , - 2287 , - 2256 , - 2601 , - 314 , - 1411 , - 2884 , - 1725 , - 942 , - 535 , - 504 , - 849 , - 1570 , - 2667 , - 1132 , - 2981 , - 2198 , - 1791 , - 1760 , - 2105 , - 2826 , - 915 , - 2388 , - 1229 , - 446 , - 39 , - 8 , - 353 , - 1074 , - 2171 , - 636 , - 2485 , - 1702 , - 1295 , - 1264 , - 1609 , - 2330 , - 419 , - 1892 , - 733 , - 2958 , - 2551 , - 2520 , - 2865 , - 578 , - 1675 , - 140 , - 1989 , - 1206 , - 799 , - 768 , - 1113 , - 1834 , - 2931 , - 1396 , - 237 , - 2462 , - 2055 , - 2024 , - 2369 , - 82 , - 1179 , - 2652 , - 1493 , - 710 , - 303 , - 272 , - 617 , - 1338 , - 2435 , - 900 , - 2749 , - 1966 , - 1559 , - 1528 , - 1873 , - 2594 , - 683 , - 2156 , - 997 , - 214 , - 2815 , - 2784 , - 121 , - 842 , - 1939 , - 404 , - 2253 , - 1470 , - 1063 , - 1032 , - 1377 , - 2098 , - 187 , - 1660 , - 501 , - 2726 , - 2319 , - 2288 , - 2633 , - 346 , - 1443 , - 2916 , - 1757 , - 974 , - 567 , - 536 , - 881 , - 1602 , - 2699 , - 1164 , - 5 , - 2230 , - 1823 , - 1792 , - 2137 , - 2858 , - 947 , - 2420 , - 1261 , - 478 , - 71 , - 40 , - 385 , - 1106 , - 2203 , - 668 , - 2517 , - 1734 , - 1327 , - 1296 , - 1641 , - 2362 , - 451 , - 1924 , - 765 , - 2990 , - 2583 , - 2552 , - 2897 , - 610 , - 1707 , - 172 , - 2021 , - 1238 , - 831 , - 800 , - 1145 , - 1866 , - 2963 , - 1428 , - 269 , - 2494 , - 2087 , - 2056 , - 2401 , - 114 , - 1211 , - 2684 , - 1525 , - 742 , - 335 , - 304 , - 649 , - 1370 , - 2467 , - 932 , - 2781 , - 1998 , - 1591 , - 1560 , - 1905 , - 2626 , - 715 , - 2188 , - 1029 , - 246 , - 2847 , - 2816 , - 153 , - 874 , - 1971 , - 436 , - 2285 , - 1502 , - 1095 , - 1064 , - 1409 , - 2130 , - 219 , - 1692 , - 533 , - 2758 , - 2351 , - 2320 , - 2665 , - 378 , - 1475 , - 2948 , - 1789 , - 1006 , - 599 , - 568 , - 913 , - 1634 , - 2731 , - 1196 , - 37 , - 2262 , - 1855 , - 1824 , - 2169 , - 2890 , - 979 , - 2452 , - 1293 , - 510 , - 103 , - 72 , - 417 , - 1138 , - 2235 , - 700 , - 2549 , - 1766 , - 1359 , - 1328 , - 1673 , - 2394 , - 483 , - 1956 , - 797 , - 14 , - 2615 , - 2584 , - 2929 , - 642 , - 1739 , - 204 , - 2053 , - 1270 , - 863 , - 832 , - 1177 , - 1898 , - 2995 , - 1460 , - 301 , - 2526 , - 2119 , - 2088 , - 2433 , - 146 , - 1243 , - 2716 , - 1557 , - 774 , - 367 , - 336 , - 681 , - 1402 , - 2499 , - 964 , - 2813 , - 2030 , - 1623 , - 1592 , - 1937 , - 2658 , - 747 , - 2220 , - 1061 , - 278 , - 2879 , - 2848 , - 185 , - 906 , - 2003 , - 468 , - 2317 , - 1534 , - 1127 , - 1096 , - 1441 , - 2162 , - 251 , - 1724 , - 565 , - 2790 , - 2383 , - 2352 , - 2697 , - 410 , - 1507 , - 2980 , - 1821 , - 1038 , - 631 , - 600 , - 945 , - 1666 , - 2763 , - 1228 , - 69 , - 2294 , - 1887 , - 1856 , - 2201 , - 2922 , - 1011 , - 2484 , - 1325 , - 542 , - 135 , - 104 , - 449 , - 1170 , - 2267 , - 732 , - 2581 , - 1798 , - 1391 , - 1360 , - 1705 , - 2426 , - 515 , - 1988 , - 829 , - 46 , - 2647 , - 2616 , - 2961 , - 674 , - 1771 , - 236 , - 2085 , - 1302 , - 895 , - 864 , - 1209 , - 1930 , - 19 , - 1492 , - 333 , - 2558 , - 2151 , - 2120 , - 2465 , - 178 , - 1275 , - 2748 , - 1589 , - 806 , - 399 , - 368 , - 713 , - 1434 , - 2531 , - 996 , - 2845 , - 2062 , - 1655 , - 1624 , - 1969 , - 2690 , - 779 , - 2252 , - 1093 , - 310 , - 2911 , - 2880 , - 217 , - 938 , - 2035 , - 500 , - 2349 , - 1566 , - 1159 , - 1128 , - 1473 , - 2194 , - 283 , - 1756 , - 597 , - 2822 , - 2415 , - 2384 , - 2729 , - 442 , - 1539 , - 4 , - 1853 , - 1070 , - 663 , - 632 , - 977 , - 1698 , - 2795 , - 1260 , - 101 , - 2326 , - 1919 , - 1888 , - 2233 , - 2954 , - 1043 , - 2516 , - 1357 , - 574 , - 167 , - 136 , - 481 , - 1202 , - 2299 , - 764 , - 2613 , - 1830 , - 1423 , - 1392 , - 1737 , - 2458 , - 547 , - 2020 , - 861 , - 78 , - 2679 , - 2648 , - 2993 , - 706 , - 1803 , - 268 , - 2117 , - 1334 , - 927 , - 896 , - 1241 , - 1962 , - 51 , - 1524 , - 365 , - 2590 , - 2183 , - 2152 , - 2497 , - 210 , - 1307 , - 2780 , - 1621 , - 838 , - 431 , - 400 , - 745 , - 1466 , - 2563 , - 1028 , - 2877 , - 2094 , - 1687 , - 1656 , - 2001 , - 2722 , - 811 , - 2284 , - 1125 , - 342 , - 2943 , - 2912 , - 249 , - 970 , - 2067 , - 532 , - 2381 , - 1598 , - 1191 , - 1160 , - 1505 , - 2226 , - 315 , - 1788 , - 629 , - 2854 , - 2447 , - 2416 , - 2761 , - 474 , - 1571 , - 36 , - 1885 , - 1102 , - 695 , - 664 , - 1009 , - 1730 , - 2827 , - 1292 , - 133 , - 2358 , - 1951 , - 1920 , - 2265 , - 2986 , - 1075 , - 2548 , - 1389 , - 606 , - 199 , - 168 , - 513 , - 1234 , - 2331 , - 796 , - 2645 , - 1862 , - 1455 , - 1424 , - 1769 , - 2490 , - 579 , - 2052 , - 893 , - 110 , - 2711 , - 2680 , - 17 , - 738 , - 1835 , - 300 , - 2149 , - 1366 , - 959 , - 928 , - 1273 , - 1994 , - 83 , - 1556 , - 397 , - 2622 , - 2215 , - 2184 , - 2529 , - 242 , - 1339 , - 2812 , - 1653 , - 870 , - 463 , - 432 , - 777 , - 1498 , - 2595 , - 1060 , - 2909 , - 2126 , - 1719 , - 1688 , - 2033 , - 2754 , - 843 , - 2316 , - 1157 , - 374 , - 2975 , - 2944 , - 281 , - 1002 , - 2099 , - 564 , - 2413 , - 1630 , - 1223 , - 1192 , - 1537 , - 2258 , - 347 , - 1820 , - 661 , - 2886 , - 2479 , - 2448 , - 2793 , - 506 , - 1603 , - 68 , - 1917 , - 1134 , - 727 , - 696 , - 1041 , - 1762 , - 2859 , - 1324 , - 165 , - 2390 , - 1983 , - 1952 , - 2297 , - 10 , - 1107 , - 2580 , - 1421 , - 638 , - 231 , - 200 , - 545 , - 1266 , - 2363 , - 828 , - 2677 , - 1894 , - 1487 , - 1456 , - 1801 , - 2522 , - 611 , - 2084 , - 925 , - 142 , - 2743 , - 2712 , - 49 , - 770 , - 1867 , - 332 , - 2181 , - 1398 , - 991 , - 960 , - 1305 , - 2026 , - 115 , - 1588 , - 429 , - 2654 , - 2247 , - 2216 , - 2561 , - 274 , - 1371 , - 2844 , - 1685 , - 902 , - 495 , - 464 , - 809 , - 1530 , - 2627 , - 1092 , - 2941 , - 2158 , - 1751 , - 1720 , - 2065 , - 2786 , - 875 , - 2348 , - 1189 , - 406 , - 3007 , - 2976 , - 313 , - 1034 , - 2131 , - 596 , - 2445 , - 1662 , - 1255 , - 1224 , - 1569 , - 2290 , - 379 , - 1852 , - 693 , - 2918 , - 2511 , - 2480 , - 2825 , - 538 , - 1635 , - 100 , - 1949 , - 1166 , - 759 , - 728 , - 1073 , - 1794 , - 2891 , - 1356 , - 197 , - 2422 , - 2015 , - 1984 , - 2329 , - 42 , - 1139 , - 2612 , - 1453 , - 670 , - 263 , - 232 , - 577 , - 1298 , - 2395 , - 860 , - 2709 , - 1926 , - 1519 , - 1488 , - 1833 , - 2554 , - 643 , - 2116 , - 957 , - 174 , - 2775 , - 2744 , - 81 , - 802 , - 1899 , - 364 , - 2213 , - 1430 , - 1023 , - 992 , - 1337 , - 2058 , - 147 , - 1620 , - 461 , - 2686 , - 2279 , - 2248 , - 2593 , - 306 , - 1403 , - 2876 , - 1717 , - 934 , - 527 , - 496 , - 841 , - 1562 , - 2659 , - 1124 , - 2973 , - 2190 , - 1783 , - 1752 , - 2097 , - 2818 , - 907 , - 2380 , - 1221 , - 438 , - 31 , - 0 , - 143 , - 478 , - 1005 , - 1724 , - 2635 , - 666 , - 1961 , - 376 , - 2055 , - 854 , - 2917 , - 2100 , - 1475 , - 1042 , - 801 , - 752 , - 895 , - 1230 , - 1757 , - 2476 , - 315 , - 1418 , - 2713 , - 1128 , - 2807 , - 1606 , - 597 , - 2852 , - 2227 , - 1794 , - 1553 , - 1504 , - 1647 , - 1982 , - 2509 , - 156 , - 1067 , - 2170 , - 393 , - 1880 , - 487 , - 2358 , - 1349 , - 532 , - 2979 , - 2546 , - 2305 , - 2256 , - 2399 , - 2734 , - 189 , - 908 , - 1819 , - 2922 , - 1145 , - 2632 , - 1239 , - 38 , - 2101 , - 1284 , - 659 , - 226 , - 3057 , - 3008 , - 79 , - 414 , - 941 , - 1660 , - 2571 , - 602 , - 1897 , - 312 , - 1991 , - 790 , - 2853 , - 2036 , - 1411 , - 978 , - 737 , - 688 , - 831 , - 1166 , - 1693 , - 2412 , - 251 , - 1354 , - 2649 , - 1064 , - 2743 , - 1542 , - 533 , - 2788 , - 2163 , - 1730 , - 1489 , - 1440 , - 1583 , - 1918 , - 2445 , - 92 , - 1003 , - 2106 , - 329 , - 1816 , - 423 , - 2294 , - 1285 , - 468 , - 2915 , - 2482 , - 2241 , - 2192 , - 2335 , - 2670 , - 125 , - 844 , - 1755 , - 2858 , - 1081 , - 2568 , - 1175 , - 3046 , - 2037 , - 1220 , - 595 , - 162 , - 2993 , - 2944 , - 15 , - 350 , - 877 , - 1596 , - 2507 , - 538 , - 1833 , - 248 , - 1927 , - 726 , - 2789 , - 1972 , - 1347 , - 914 , - 673 , - 624 , - 767 , - 1102 , - 1629 , - 2348 , - 187 , - 1290 , - 2585 , - 1000 , - 2679 , - 1478 , - 469 , - 2724 , - 2099 , - 1666 , - 1425 , - 1376 , - 1519 , - 1854 , - 2381 , - 28 , - 939 , - 2042 , - 265 , - 1752 , - 359 , - 2230 , - 1221 , - 404 , - 2851 , - 2418 , - 2177 , - 2128 , - 2271 , - 2606 , - 61 , - 780 , - 1691 , - 2794 , - 1017 , - 2504 , - 1111 , - 2982 , - 1973 , - 1156 , - 531 , - 98 , - 2929 , - 2880 , - 3023 , - 286 , - 813 , - 1532 , - 2443 , - 474 , - 1769 , - 184 , - 1863 , - 662 , - 2725 , - 1908 , - 1283 , - 850 , - 609 , - 560 , - 703 , - 1038 , - 1565 , - 2284 , - 123 , - 1226 , - 2521 , - 936 , - 2615 , - 1414 , - 405 , - 2660 , - 2035 , - 1602 , - 1361 , - 1312 , - 1455 , - 1790 , - 2317 , - 3036 , - 875 , - 1978 , - 201 , - 1688 , - 295 , - 2166 , - 1157 , - 340 , - 2787 , - 2354 , - 2113 , - 2064 , - 2207 , - 2542 , - 3069 , - 716 , - 1627 , - 2730 , - 953 , - 2440 , - 1047 , - 2918 , - 1909 , - 1092 , - 467 , - 34 , - 2865 , - 2816 , - 2959 , - 222 , - 749 , - 1468 , - 2379 , - 410 , - 1705 , - 120 , - 1799 , - 598 , - 2661 , - 1844 , - 1219 , - 786 , - 545 , - 496 , - 639 , - 974 , - 1501 , - 2220 , - 59 , - 1162 , - 2457 , - 872 , - 2551 , - 1350 , - 341 , - 2596 , - 1971 , - 1538 , - 1297 , - 1248 , - 1391 , - 1726 , - 2253 , - 2972 , - 811 , - 1914 , - 137 , - 1624 , - 231 , - 2102 , - 1093 , - 276 , - 2723 , - 2290 , - 2049 , - 2000 , - 2143 , - 2478 , - 3005 , - 652 , - 1563 , - 2666 , - 889 , - 2376 , - 983 , - 2854 , - 1845 , - 1028 , - 403 , - 3042 , - 2801 , - 2752 , - 2895 , - 158 , - 685 , - 1404 , - 2315 , - 346 , - 1641 , - 56 , - 1735 , - 534 , - 2597 , - 1780 , - 1155 , - 722 , - 481 , - 432 , - 575 , - 910 , - 1437 , - 2156 , - 3067 , - 1098 , - 2393 , - 808 , - 2487 , - 1286 , - 277 , - 2532 , - 1907 , - 1474 , - 1233 , - 1184 , - 1327 , - 1662 , - 2189 , - 2908 , - 747 , - 1850 , - 73 , - 1560 , - 167 , - 2038 , - 1029 , - 212 , - 2659 , - 2226 , - 1985 , - 1936 , - 2079 , - 2414 , - 2941 , - 588 , - 1499 , - 2602 , - 825 , - 2312 , - 919 , - 2790 , - 1781 , - 964 , - 339 , - 2978 , - 2737 , - 2688 , - 2831 , - 94 , - 621 , - 1340 , - 2251 , - 282 , - 1577 , - 3064 , - 1671 , - 470 , - 2533 , - 1716 , - 1091 , - 658 , - 417 , - 368 , - 511 , - 846 , - 1373 , - 2092 , - 3003 , - 1034 , - 2329 , - 744 , - 2423 , - 1222 , - 213 , - 2468 , - 1843 , - 1410 , - 1169 , - 1120 , - 1263 , - 1598 , - 2125 , - 2844 , - 683 , - 1786 , - 9 , - 1496 , - 103 , - 1974 , - 965 , - 148 , - 2595 , - 2162 , - 1921 , - 1872 , - 2015 , - 2350 , - 2877 , - 524 , - 1435 , - 2538 , - 761 , - 2248 , - 855 , - 2726 , - 1717 , - 900 , - 275 , - 2914 , - 2673 , - 2624 , - 2767 , - 30 , - 557 , - 1276 , - 2187 , - 218 , - 1513 , - 3000 , - 1607 , - 406 , - 2469 , - 1652 , - 1027 , - 594 , - 353 , - 304 , - 447 , - 782 , - 1309 , - 2028 , - 2939 , - 970 , - 2265 , - 680 , - 2359 , - 1158 , - 149 , - 2404 , - 1779 , - 1346 , - 1105 , - 1056 , - 1199 , - 1534 , - 2061 , - 2780 , - 619 , - 1722 , - 3017 , - 1432 , - 39 , - 1910 , - 901 , - 84 , - 2531 , - 2098 , - 1857 , - 1808 , - 1951 , - 2286 , - 2813 , - 460 , - 1371 , - 2474 , - 697 , - 2184 , - 791 , - 2662 , - 1653 , - 836 , - 211 , - 2850 , - 2609 , - 2560 , - 2703 , - 3038 , - 493 , - 1212 , - 2123 , - 154 , - 1449 , - 2936 , - 1543 , - 342 , - 2405 , - 1588 , - 963 , - 530 , - 289 , - 240 , - 383 , - 718 , - 1245 , - 1964 , - 2875 , - 906 , - 2201 , - 616 , - 2295 , - 1094 , - 85 , - 2340 , - 1715 , - 1282 , - 1041 , - 992 , - 1135 , - 1470 , - 1997 , - 2716 , - 555 , - 1658 , - 2953 , - 1368 , - 3047 , - 1846 , - 837 , - 20 , - 2467 , - 2034 , - 1793 , - 1744 , - 1887 , - 2222 , - 2749 , - 396 , - 1307 , - 2410 , - 633 , - 2120 , - 727 , - 2598 , - 1589 , - 772 , - 147 , - 2786 , - 2545 , - 2496 , - 2639 , - 2974 , - 429 , - 1148 , - 2059 , - 90 , - 1385 , - 2872 , - 1479 , - 278 , - 2341 , - 1524 , - 899 , - 466 , - 225 , - 176 , - 319 , - 654 , - 1181 , - 1900 , - 2811 , - 842 , - 2137 , - 552 , - 2231 , - 1030 , - 21 , - 2276 , - 1651 , - 1218 , - 977 , - 928 , - 1071 , - 1406 , - 1933 , - 2652 , - 491 , - 1594 , - 2889 , - 1304 , - 2983 , - 1782 , - 773 , - 3028 , - 2403 , - 1970 , - 1729 , - 1680 , - 1823 , - 2158 , - 2685 , - 332 , - 1243 , - 2346 , - 569 , - 2056 , - 663 , - 2534 , - 1525 , - 708 , - 83 , - 2722 , - 2481 , - 2432 , - 2575 , - 2910 , - 365 , - 1084 , - 1995 , - 26 , - 1321 , - 2808 , - 1415 , - 214 , - 2277 , - 1460 , - 835 , - 402 , - 161 , - 112 , - 255 , - 590 , - 1117 , - 1836 , - 2747 , - 778 , - 2073 , - 488 , - 2167 , - 966 , - 3029 , - 2212 , - 1587 , - 1154 , - 913 , - 864 , - 1007 , - 1342 , - 1869 , - 2588 , - 427 , - 1530 , - 2825 , - 1240 , - 2919 , - 1718 , - 709 , - 2964 , - 2339 , - 1906 , - 1665 , - 1616 , - 1759 , - 2094 , - 2621 , - 268 , - 1179 , - 2282 , - 505 , - 1992 , - 599 , - 2470 , - 1461 , - 644 , - 19 , - 2658 , - 2417 , - 2368 , - 2511 , - 2846 , - 301 , - 1020 , - 1931 , - 3034 , - 1257 , - 2744 , - 1351 , - 150 , - 2213 , - 1396 , - 771 , - 338 , - 97 , - 48 , - 191 , - 526 , - 1053 , - 1772 , - 2683 , - 714 , - 2009 , - 424 , - 2103 , - 902 , - 2965 , - 2148 , - 1523 , - 1090 , - 849 , - 800 , - 943 , - 1278 , - 1805 , - 2524 , - 363 , - 1466 , - 2761 , - 1176 , - 2855 , - 1654 , - 645 , - 2900 , - 2275 , - 1842 , - 1601 , - 1552 , - 1695 , - 2030 , - 2557 , - 204 , - 1115 , - 2218 , - 441 , - 1928 , - 535 , - 2406 , - 1397 , - 580 , - 3027 , - 2594 , - 2353 , - 2304 , - 2447 , - 2782 , - 237 , - 956 , - 1867 , - 2970 , - 1193 , - 2680 , - 1287 , - 86 , - 2149 , - 1332 , - 707 , - 274 , - 33 , - 3056 , - 127 , - 462 , - 989 , - 1708 , - 2619 , - 650 , - 1945 , - 360 , - 2039 , - 838 , - 2901 , - 2084 , - 1459 , - 1026 , - 785 , - 736 , - 879 , - 1214 , - 1741 , - 2460 , - 299 , - 1402 , - 2697 , - 1112 , - 2791 , - 1590 , - 581 , - 2836 , - 2211 , - 1778 , - 1537 , - 1488 , - 1631 , - 1966 , - 2493 , - 140 , - 1051 , - 2154 , - 377 , - 1864 , - 471 , - 2342 , - 1333 , - 516 , - 2963 , - 2530 , - 2289 , - 2240 , - 2383 , - 2718 , - 173 , - 892 , - 1803 , - 2906 , - 1129 , - 2616 , - 1223 , - 22 , - 2085 , - 1268 , - 643 , - 210 , - 3041 , - 2992 , - 63 , - 398 , - 925 , - 1644 , - 2555 , - 586 , - 1881 , - 296 , - 1975 , - 774 , - 2837 , - 2020 , - 1395 , - 962 , - 721 , - 672 , - 815 , - 1150 , - 1677 , - 2396 , - 235 , - 1338 , - 2633 , - 1048 , - 2727 , - 1526 , - 517 , - 2772 , - 2147 , - 1714 , - 1473 , - 1424 , - 1567 , - 1902 , - 2429 , - 76 , - 987 , - 2090 , - 313 , - 1800 , - 407 , - 2278 , - 1269 , - 452 , - 2899 , - 2466 , - 2225 , - 2176 , - 2319 , - 2654 , - 109 , - 828 , - 1739 , - 2842 , - 1065 , - 2552 , - 1159 , - 3030 , - 2021 , - 1204 , - 579 , - 146 , - 2977 , - 2928 , - 3071 , - 334 , - 861 , - 1580 , - 2491 , - 522 , - 1817 , - 232 , - 1911 , - 710 , - 2773 , - 1956 , - 1331 , - 898 , - 657 , - 608 , - 751 , - 1086 , - 1613 , - 2332 , - 171 , - 1274 , - 2569 , - 984 , - 2663 , - 1462 , - 453 , - 2708 , - 2083 , - 1650 , - 1409 , - 1360 , - 1503 , - 1838 , - 2365 , - 12 , - 923 , - 2026 , - 249 , - 1736 , - 343 , - 2214 , - 1205 , - 388 , - 2835 , - 2402 , - 2161 , - 2112 , - 2255 , - 2590 , - 45 , - 764 , - 1675 , - 2778 , - 1001 , - 2488 , - 1095 , - 2966 , - 1957 , - 1140 , - 515 , - 82 , - 2913 , - 2864 , - 3007 , - 270 , - 797 , - 1516 , - 2427 , - 458 , - 1753 , - 168 , - 1847 , - 646 , - 2709 , - 1892 , - 1267 , - 834 , - 593 , - 544 , - 687 , - 1022 , - 1549 , - 2268 , - 107 , - 1210 , - 2505 , - 920 , - 2599 , - 1398 , - 389 , - 2644 , - 2019 , - 1586 , - 1345 , - 1296 , - 1439 , - 1774 , - 2301 , - 3020 , - 859 , - 1962 , - 185 , - 1672 , - 279 , - 2150 , - 1141 , - 324 , - 2771 , - 2338 , - 2097 , - 2048 , - 2191 , - 2526 , - 3053 , - 700 , - 1611 , - 2714 , - 937 , - 2424 , - 1031 , - 2902 , - 1893 , - 1076 , - 451 , - 18 , - 2849 , - 2800 , - 2943 , - 206 , - 733 , - 1452 , - 2363 , - 394 , - 1689 , - 104 , - 1783 , - 582 , - 2645 , - 1828 , - 1203 , - 770 , - 529 , - 480 , - 623 , - 958 , - 1485 , - 2204 , - 43 , - 1146 , - 2441 , - 856 , - 2535 , - 1334 , - 325 , - 2580 , - 1955 , - 1522 , - 1281 , - 1232 , - 1375 , - 1710 , - 2237 , - 2956 , - 795 , - 1898 , - 121 , - 1608 , - 215 , - 2086 , - 1077 , - 260 , - 2707 , - 2274 , - 2033 , - 1984 , - 2127 , - 2462 , - 2989 , - 636 , - 1547 , - 2650 , - 873 , - 2360 , - 967 , - 2838 , - 1829 , - 1012 , - 387 , - 3026 , - 2785 , - 2736 , - 2879 , - 142 , - 669 , - 1388 , - 2299 , - 330 , - 1625 , - 40 , - 1719 , - 518 , - 2581 , - 1764 , - 1139 , - 706 , - 465 , - 416 , - 559 , - 894 , - 1421 , - 2140 , - 3051 , - 1082 , - 2377 , - 792 , - 2471 , - 1270 , - 261 , - 2516 , - 1891 , - 1458 , - 1217 , - 1168 , - 1311 , - 1646 , - 2173 , - 2892 , - 731 , - 1834 , - 57 , - 1544 , - 151 , - 2022 , - 1013 , - 196 , - 2643 , - 2210 , - 1969 , - 1920 , - 2063 , - 2398 , - 2925 , - 572 , - 1483 , - 2586 , - 809 , - 2296 , - 903 , - 2774 , - 1765 , - 948 , - 323 , - 2962 , - 2721 , - 2672 , - 2815 , - 78 , - 605 , - 1324 , - 2235 , - 266 , - 1561 , - 3048 , - 1655 , - 454 , - 2517 , - 1700 , - 1075 , - 642 , - 401 , - 352 , - 495 , - 830 , - 1357 , - 2076 , - 2987 , - 1018 , - 2313 , - 728 , - 2407 , - 1206 , - 197 , - 2452 , - 1827 , - 1394 , - 1153 , - 1104 , - 1247 , - 1582 , - 2109 , - 2828 , - 667 , - 1770 , - 3065 , - 1480 , - 87 , - 1958 , - 949 , - 132 , - 2579 , - 2146 , - 1905 , - 1856 , - 1999 , - 2334 , - 2861 , - 508 , - 1419 , - 2522 , - 745 , - 2232 , - 839 , - 2710 , - 1701 , - 884 , - 259 , - 2898 , - 2657 , - 2608 , - 2751 , - 14 , - 541 , - 1260 , - 2171 , - 202 , - 1497 , - 2984 , - 1591 , - 390 , - 2453 , - 1636 , - 1011 , - 578 , - 337 , - 288 , - 431 , - 766 , - 1293 , - 2012 , - 2923 , - 954 , - 2249 , - 664 , - 2343 , - 1142 , - 133 , - 2388 , - 1763 , - 1330 , - 1089 , - 1040 , - 1183 , - 1518 , - 2045 , - 2764 , - 603 , - 1706 , - 3001 , - 1416 , - 23 , - 1894 , - 885 , - 68 , - 2515 , - 2082 , - 1841 , - 1792 , - 1935 , - 2270 , - 2797 , - 444 , - 1355 , - 2458 , - 681 , - 2168 , - 775 , - 2646 , - 1637 , - 820 , - 195 , - 2834 , - 2593 , - 2544 , - 2687 , - 3022 , - 477 , - 1196 , - 2107 , - 138 , - 1433 , - 2920 , - 1527 , - 326 , - 2389 , - 1572 , - 947 , - 514 , - 273 , - 224 , - 367 , - 702 , - 1229 , - 1948 , - 2859 , - 890 , - 2185 , - 600 , - 2279 , - 1078 , - 69 , - 2324 , - 1699 , - 1266 , - 1025 , - 976 , - 1119 , - 1454 , - 1981 , - 2700 , - 539 , - 1642 , - 2937 , - 1352 , - 3031 , - 1830 , - 821 , - 4 , - 2451 , - 2018 , - 1777 , - 1728 , - 1871 , - 2206 , - 2733 , - 380 , - 1291 , - 2394 , - 617 , - 2104 , - 711 , - 2582 , - 1573 , - 756 , - 131 , - 2770 , - 2529 , - 2480 , - 2623 , - 2958 , - 413 , - 1132 , - 2043 , - 74 , - 1369 , - 2856 , - 1463 , - 262 , - 2325 , - 1508 , - 883 , - 450 , - 209 , - 160 , - 303 , - 638 , - 1165 , - 1884 , - 2795 , - 826 , - 2121 , - 536 , - 2215 , - 1014 , - 5 , - 2260 , - 1635 , - 1202 , - 961 , - 912 , - 1055 , - 1390 , - 1917 , - 2636 , - 475 , - 1578 , - 2873 , - 1288 , - 2967 , - 1766 , - 757 , - 3012 , - 2387 , - 1954 , - 1713 , - 1664 , - 1807 , - 2142 , - 2669 , - 316 , - 1227 , - 2330 , - 553 , - 2040 , - 647 , - 2518 , - 1509 , - 692 , - 67 , - 2706 , - 2465 , - 2416 , - 2559 , - 2894 , - 349 , - 1068 , - 1979 , - 10 , - 1305 , - 2792 , - 1399 , - 198 , - 2261 , - 1444 , - 819 , - 386 , - 145 , - 96 , - 239 , - 574 , - 1101 , - 1820 , - 2731 , - 762 , - 2057 , - 472 , - 2151 , - 950 , - 3013 , - 2196 , - 1571 , - 1138 , - 897 , - 848 , - 991 , - 1326 , - 1853 , - 2572 , - 411 , - 1514 , - 2809 , - 1224 , - 2903 , - 1702 , - 693 , - 2948 , - 2323 , - 1890 , - 1649 , - 1600 , - 1743 , - 2078 , - 2605 , - 252 , - 1163 , - 2266 , - 489 , - 1976 , - 583 , - 2454 , - 1445 , - 628 , - 3 , - 2642 , - 2401 , - 2352 , - 2495 , - 2830 , - 285 , - 1004 , - 1915 , - 3018 , - 1241 , - 2728 , - 1335 , - 134 , - 2197 , - 1380 , - 755 , - 322 , - 81 , - 32 , - 175 , - 510 , - 1037 , - 1756 , - 2667 , - 698 , - 1993 , - 408 , - 2087 , - 886 , - 2949 , - 2132 , - 1507 , - 1074 , - 833 , - 784 , - 927 , - 1262 , - 1789 , - 2508 , - 347 , - 1450 , - 2745 , - 1160 , - 2839 , - 1638 , - 629 , - 2884 , - 2259 , - 1826 , - 1585 , - 1536 , - 1679 , - 2014 , - 2541 , - 188 , - 1099 , - 2202 , - 425 , - 1912 , - 519 , - 2390 , - 1381 , - 564 , - 3011 , - 2578 , - 2337 , - 2288 , - 2431 , - 2766 , - 221 , - 940 , - 1851 , - 2954 , - 1177 , - 2664 , - 1271 , - 70 , - 2133 , - 1316 , - 691 , - 258 , - 17 , - 3040 , - 111 , - 446 , - 973 , - 1692 , - 2603 , - 634 , - 1929 , - 344 , - 2023 , - 822 , - 2885 , - 2068 , - 1443 , - 1010 , - 769 , - 720 , - 863 , - 1198 , - 1725 , - 2444 , - 283 , - 1386 , - 2681 , - 1096 , - 2775 , - 1574 , - 565 , - 2820 , - 2195 , - 1762 , - 1521 , - 1472 , - 1615 , - 1950 , - 2477 , - 124 , - 1035 , - 2138 , - 361 , - 1848 , - 455 , - 2326 , - 1317 , - 500 , - 2947 , - 2514 , - 2273 , - 2224 , - 2367 , - 2702 , - 157 , - 876 , - 1787 , - 2890 , - 1113 , - 2600 , - 1207 , - 6 , - 2069 , - 1252 , - 627 , - 194 , - 3025 , - 2976 , - 47 , - 382 , - 909 , - 1628 , - 2539 , - 570 , - 1865 , - 280 , - 1959 , - 758 , - 2821 , - 2004 , - 1379 , - 946 , - 705 , - 656 , - 799 , - 1134 , - 1661 , - 2380 , - 219 , - 1322 , - 2617 , - 1032 , - 2711 , - 1510 , - 501 , - 2756 , - 2131 , - 1698 , - 1457 , - 1408 , - 1551 , - 1886 , - 2413 , - 60 , - 971 , - 2074 , - 297 , - 1784 , - 391 , - 2262 , - 1253 , - 436 , - 2883 , - 2450 , - 2209 , - 2160 , - 2303 , - 2638 , - 93 , - 812 , - 1723 , - 2826 , - 1049 , - 2536 , - 1143 , - 3014 , - 2005 , - 1188 , - 563 , - 130 , - 2961 , - 2912 , - 3055 , - 318 , - 845 , - 1564 , - 2475 , - 506 , - 1801 , - 216 , - 1895 , - 694 , - 2757 , - 1940 , - 1315 , - 882 , - 641 , - 592 , - 735 , - 1070 , - 1597 , - 2316 , - 155 , - 1258 , - 2553 , - 968 , - 2647 , - 1446 , - 437 , - 2692 , - 2067 , - 1634 , - 1393 , - 1344 , - 1487 , - 1822 , - 2349 , - 3068 , - 907 , - 2010 , - 233 , - 1720 , - 327 , - 2198 , - 1189 , - 372 , - 2819 , - 2386 , - 2145 , - 2096 , - 2239 , - 2574 , - 29 , - 748 , - 1659 , - 2762 , - 985 , - 2472 , - 1079 , - 2950 , - 1941 , - 1124 , - 499 , - 66 , - 2897 , - 2848 , - 2991 , - 254 , - 781 , - 1500 , - 2411 , - 442 , - 1737 , - 152 , - 1831 , - 630 , - 2693 , - 1876 , - 1251 , - 818 , - 577 , - 528 , - 671 , - 1006 , - 1533 , - 2252 , - 91 , - 1194 , - 2489 , - 904 , - 2583 , - 1382 , - 373 , - 2628 , - 2003 , - 1570 , - 1329 , - 1280 , - 1423 , - 1758 , - 2285 , - 3004 , - 843 , - 1946 , - 169 , - 1656 , - 263 , - 2134 , - 1125 , - 308 , - 2755 , - 2322 , - 2081 , - 2032 , - 2175 , - 2510 , - 3037 , - 684 , - 1595 , - 2698 , - 921 , - 2408 , - 1015 , - 2886 , - 1877 , - 1060 , - 435 , - 2 , - 2833 , - 2784 , - 2927 , - 190 , - 717 , - 1436 , - 2347 , - 378 , - 1673 , - 88 , - 1767 , - 566 , - 2629 , - 1812 , - 1187 , - 754 , - 513 , - 464 , - 607 , - 942 , - 1469 , - 2188 , - 27 , - 1130 , - 2425 , - 840 , - 2519 , - 1318 , - 309 , - 2564 , - 1939 , - 1506 , - 1265 , - 1216 , - 1359 , - 1694 , - 2221 , - 2940 , - 779 , - 1882 , - 105 , - 1592 , - 199 , - 2070 , - 1061 , - 244 , - 2691 , - 2258 , - 2017 , - 1968 , - 2111 , - 2446 , - 2973 , - 620 , - 1531 , - 2634 , - 857 , - 2344 , - 951 , - 2822 , - 1813 , - 996 , - 371 , - 3010 , - 2769 , - 2720 , - 2863 , - 126 , - 653 , - 1372 , - 2283 , - 314 , - 1609 , - 24 , - 1703 , - 502 , - 2565 , - 1748 , - 1123 , - 690 , - 449 , - 400 , - 543 , - 878 , - 1405 , - 2124 , - 3035 , - 1066 , - 2361 , - 776 , - 2455 , - 1254 , - 245 , - 2500 , - 1875 , - 1442 , - 1201 , - 1152 , - 1295 , - 1630 , - 2157 , - 2876 , - 715 , - 1818 , - 41 , - 1528 , - 135 , - 2006 , - 997 , - 180 , - 2627 , - 2194 , - 1953 , - 1904 , - 2047 , - 2382 , - 2909 , - 556 , - 1467 , - 2570 , - 793 , - 2280 , - 887 , - 2758 , - 1749 , - 932 , - 307 , - 2946 , - 2705 , - 2656 , - 2799 , - 62 , - 589 , - 1308 , - 2219 , - 250 , - 1545 , - 3032 , - 1639 , - 438 , - 2501 , - 1684 , - 1059 , - 626 , - 385 , - 336 , - 479 , - 814 , - 1341 , - 2060 , - 2971 , - 1002 , - 2297 , - 712 , - 2391 , - 1190 , - 181 , - 2436 , - 1811 , - 1378 , - 1137 , - 1088 , - 1231 , - 1566 , - 2093 , - 2812 , - 651 , - 1754 , - 3049 , - 1464 , - 71 , - 1942 , - 933 , - 116 , - 2563 , - 2130 , - 1889 , - 1840 , - 1983 , - 2318 , - 2845 , - 492 , - 1403 , - 2506 , - 729 , - 2216 , - 823 , - 2694 , - 1685 , - 868 , - 243 , - 2882 , - 2641 , - 2592 , - 2735 , - 3070 , - 525 , - 1244 , - 2155 , - 186 , - 1481 , - 2968 , - 1575 , - 374 , - 2437 , - 1620 , - 995 , - 562 , - 321 , - 272 , - 415 , - 750 , - 1277 , - 1996 , - 2907 , - 938 , - 2233 , - 648 , - 2327 , - 1126 , - 117 , - 2372 , - 1747 , - 1314 , - 1073 , - 1024 , - 1167 , - 1502 , - 2029 , - 2748 , - 587 , - 1690 , - 2985 , - 1400 , - 7 , - 1878 , - 869 , - 52 , - 2499 , - 2066 , - 1825 , - 1776 , - 1919 , - 2254 , - 2781 , - 428 , - 1339 , - 2442 , - 665 , - 2152 , - 759 , - 2630 , - 1621 , - 804 , - 179 , - 2818 , - 2577 , - 2528 , - 2671 , - 3006 , - 461 , - 1180 , - 2091 , - 122 , - 1417 , - 2904 , - 1511 , - 310 , - 2373 , - 1556 , - 931 , - 498 , - 257 , - 208 , - 351 , - 686 , - 1213 , - 1932 , - 2843 , - 874 , - 2169 , - 584 , - 2263 , - 1062 , - 53 , - 2308 , - 1683 , - 1250 , - 1009 , - 960 , - 1103 , - 1438 , - 1965 , - 2684 , - 523 , - 1626 , - 2921 , - 1336 , - 3015 , - 1814 , - 805 , - 3060 , - 2435 , - 2002 , - 1761 , - 1712 , - 1855 , - 2190 , - 2717 , - 364 , - 1275 , - 2378 , - 601 , - 2088 , - 695 , - 2566 , - 1557 , - 740 , - 115 , - 2754 , - 2513 , - 2464 , - 2607 , - 2942 , - 397 , - 1116 , - 2027 , - 58 , - 1353 , - 2840 , - 1447 , - 246 , - 2309 , - 1492 , - 867 , - 434 , - 193 , - 144 , - 287 , - 622 , - 1149 , - 1868 , - 2779 , - 810 , - 2105 , - 520 , - 2199 , - 998 , - 3061 , - 2244 , - 1619 , - 1186 , - 945 , - 896 , - 1039 , - 1374 , - 1901 , - 2620 , - 459 , - 1562 , - 2857 , - 1272 , - 2951 , - 1750 , - 741 , - 2996 , - 2371 , - 1938 , - 1697 , - 1648 , - 1791 , - 2126 , - 2653 , - 300 , - 1211 , - 2314 , - 537 , - 2024 , - 631 , - 2502 , - 1493 , - 676 , - 51 , - 2690 , - 2449 , - 2400 , - 2543 , - 2878 , - 333 , - 1052 , - 1963 , - 3066 , - 1289 , - 2776 , - 1383 , - 182 , - 2245 , - 1428 , - 803 , - 370 , - 129 , - 80 , - 223 , - 558 , - 1085 , - 1804 , - 2715 , - 746 , - 2041 , - 456 , - 2135 , - 934 , - 2997 , - 2180 , - 1555 , - 1122 , - 881 , - 832 , - 975 , - 1310 , - 1837 , - 2556 , - 395 , - 1498 , - 2793 , - 1208 , - 2887 , - 1686 , - 677 , - 2932 , - 2307 , - 1874 , - 1633 , - 1584 , - 1727 , - 2062 , - 2589 , - 236 , - 1147 , - 2250 , - 473 , - 1960 , - 567 , - 2438 , - 1429 , - 612 , - 3059 , - 2626 , - 2385 , - 2336 , - 2479 , - 2814 , - 269 , - 988 , - 1899 , - 3002 , - 1225 , - 2712 , - 1319 , - 118 , - 2181 , - 1364 , - 739 , - 306 , - 65 , - 16 , - 159 , - 494 , - 1021 , - 1740 , - 2651 , - 682 , - 1977 , - 392 , - 2071 , - 870 , - 2933 , - 2116 , - 1491 , - 1058 , - 817 , - 768 , - 911 , - 1246 , - 1773 , - 2492 , - 331 , - 1434 , - 2729 , - 1144 , - 2823 , - 1622 , - 613 , - 2868 , - 2243 , - 1810 , - 1569 , - 1520 , - 1663 , - 1998 , - 2525 , - 172 , - 1083 , - 2186 , - 409 , - 1896 , - 503 , - 2374 , - 1365 , - 548 , - 2995 , - 2562 , - 2321 , - 2272 , - 2415 , - 2750 , - 205 , - 924 , - 1835 , - 2938 , - 1161 , - 2648 , - 1255 , - 54 , - 2117 , - 1300 , - 675 , - 242 , - 1 , - 3024 , - 95 , - 430 , - 957 , - 1676 , - 2587 , - 618 , - 1913 , - 328 , - 2007 , - 806 , - 2869 , - 2052 , - 1427 , - 994 , - 753 , - 704 , - 847 , - 1182 , - 1709 , - 2428 , - 267 , - 1370 , - 2665 , - 1080 , - 2759 , - 1558 , - 549 , - 2804 , - 2179 , - 1746 , - 1505 , - 1456 , - 1599 , - 1934 , - 2461 , - 108 , - 1019 , - 2122 , - 345 , - 1832 , - 439 , - 2310 , - 1301 , - 484 , - 2931 , - 2498 , - 2257 , - 2208 , - 2351 , - 2686 , - 141 , - 860 , - 1771 , - 2874 , - 1097 , - 2584 , - 1191 , - 3062 , - 2053 , - 1236 , - 611 , - 178 , - 3009 , - 2960 , - 31 , - 366 , - 893 , - 1612 , - 2523 , - 554 , - 1849 , - 264 , - 1943 , - 742 , - 2805 , - 1988 , - 1363 , - 930 , - 689 , - 640 , - 783 , - 1118 , - 1645 , - 2364 , - 203 , - 1306 , - 2601 , - 1016 , - 2695 , - 1494 , - 485 , - 2740 , - 2115 , - 1682 , - 1441 , - 1392 , - 1535 , - 1870 , - 2397 , - 44 , - 955 , - 2058 , - 281 , - 1768 , - 375 , - 2246 , - 1237 , - 420 , - 2867 , - 2434 , - 2193 , - 2144 , - 2287 , - 2622 , - 77 , - 796 , - 1707 , - 2810 , - 1033 , - 2520 , - 1127 , - 2998 , - 1989 , - 1172 , - 547 , - 114 , - 2945 , - 2896 , - 3039 , - 302 , - 829 , - 1548 , - 2459 , - 490 , - 1785 , - 200 , - 1879 , - 678 , - 2741 , - 1924 , - 1299 , - 866 , - 625 , - 576 , - 719 , - 1054 , - 1581 , - 2300 , - 139 , - 1242 , - 2537 , - 952 , - 2631 , - 1430 , - 421 , - 2676 , - 2051 , - 1618 , - 1377 , - 1328 , - 1471 , - 1806 , - 2333 , - 3052 , - 891 , - 1994 , - 217 , - 1704 , - 311 , - 2182 , - 1173 , - 356 , - 2803 , - 2370 , - 2129 , - 2080 , - 2223 , - 2558 , - 13 , - 732 , - 1643 , - 2746 , - 969 , - 2456 , - 1063 , - 2934 , - 1925 , - 1108 , - 483 , - 50 , - 2881 , - 2832 , - 2975 , - 238 , - 765 , - 1484 , - 2395 , - 426 , - 1721 , - 136 , - 1815 , - 614 , - 2677 , - 1860 , - 1235 , - 802 , - 561 , - 512 , - 655 , - 990 , - 1517 , - 2236 , - 75 , - 1178 , - 2473 , - 888 , - 2567 , - 1366 , - 357 , - 2612 , - 1987 , - 1554 , - 1313 , - 1264 , - 1407 , - 1742 , - 2269 , - 2988 , - 827 , - 1930 , - 153 , - 1640 , - 247 , - 2118 , - 1109 , - 292 , - 2739 , - 2306 , - 2065 , - 2016 , - 2159 , - 2494 , - 3021 , - 668 , - 1579 , - 2682 , - 905 , - 2392 , - 999 , - 2870 , - 1861 , - 1044 , - 419 , - 3058 , - 2817 , - 2768 , - 2911 , - 174 , - 701 , - 1420 , - 2331 , - 362 , - 1657 , - 72 , - 1751 , - 550 , - 2613 , - 1796 , - 1171 , - 738 , - 497 , - 448 , - 591 , - 926 , - 1453 , - 2172 , - 11 , - 1114 , - 2409 , - 824 , - 2503 , - 1302 , - 293 , - 2548 , - 1923 , - 1490 , - 1249 , - 1200 , - 1343 , - 1678 , - 2205 , - 2924 , - 763 , - 1866 , - 89 , - 1576 , - 183 , - 2054 , - 1045 , - 228 , - 2675 , - 2242 , - 2001 , - 1952 , - 2095 , - 2430 , - 2957 , - 604 , - 1515 , - 2618 , - 841 , - 2328 , - 935 , - 2806 , - 1797 , - 980 , - 355 , - 2994 , - 2753 , - 2704 , - 2847 , - 110 , - 637 , - 1356 , - 2267 , - 298 , - 1593 , - 8 , - 1687 , - 486 , - 2549 , - 1732 , - 1107 , - 674 , - 433 , - 384 , - 527 , - 862 , - 1389 , - 2108 , - 3019 , - 1050 , - 2345 , - 760 , - 2439 , - 1238 , - 229 , - 2484 , - 1859 , - 1426 , - 1185 , - 1136 , - 1279 , - 1614 , - 2141 , - 2860 , - 699 , - 1802 , - 25 , - 1512 , - 119 , - 1990 , - 981 , - 164 , - 2611 , - 2178 , - 1937 , - 1888 , - 2031 , - 2366 , - 2893 , - 540 , - 1451 , - 2554 , - 777 , - 2264 , - 871 , - 2742 , - 1733 , - 916 , - 291 , - 2930 , - 2689 , - 2640 , - 2783 , - 46 , - 573 , - 1292 , - 2203 , - 234 , - 1529 , - 3016 , - 1623 , - 422 , - 2485 , - 1668 , - 1043 , - 610 , - 369 , - 320 , - 463 , - 798 , - 1325 , - 2044 , - 2955 , - 986 , - 2281 , - 696 , - 2375 , - 1174 , - 165 , - 2420 , - 1795 , - 1362 , - 1121 , - 1072 , - 1215 , - 1550 , - 2077 , - 2796 , - 635 , - 1738 , - 3033 , - 1448 , - 55 , - 1926 , - 917 , - 100 , - 2547 , - 2114 , - 1873 , - 1824 , - 1967 , - 2302 , - 2829 , - 476 , - 1387 , - 2490 , - 713 , - 2200 , - 807 , - 2678 , - 1669 , - 852 , - 227 , - 2866 , - 2625 , - 2576 , - 2719 , - 3054 , - 509 , - 1228 , - 2139 , - 170 , - 1465 , - 2952 , - 1559 , - 358 , - 2421 , - 1604 , - 979 , - 546 , - 305 , - 256 , - 399 , - 734 , - 1261 , - 1980 , - 2891 , - 922 , - 2217 , - 632 , - 2311 , - 1110 , - 101 , - 2356 , - 1731 , - 1298 , - 1057 , - 1008 , - 1151 , - 1486 , - 2013 , - 2732 , - 571 , - 1674 , - 2969 , - 1384 , - 3063 , - 1862 , - 853 , - 36 , - 2483 , - 2050 , - 1809 , - 1760 , - 1903 , - 2238 , - 2765 , - 412 , - 1323 , - 2426 , - 649 , - 2136 , - 743 , - 2614 , - 1605 , - 788 , - 163 , - 2802 , - 2561 , - 2512 , - 2655 , - 2990 , - 445 , - 1164 , - 2075 , - 106 , - 1401 , - 2888 , - 1495 , - 294 , - 2357 , - 1540 , - 915 , - 482 , - 241 , - 192 , - 335 , - 670 , - 1197 , - 1916 , - 2827 , - 858 , - 2153 , - 568 , - 2247 , - 1046 , - 37 , - 2292 , - 1667 , - 1234 , - 993 , - 944 , - 1087 , - 1422 , - 1949 , - 2668 , - 507 , - 1610 , - 2905 , - 1320 , - 2999 , - 1798 , - 789 , - 3044 , - 2419 , - 1986 , - 1745 , - 1696 , - 1839 , - 2174 , - 2701 , - 348 , - 1259 , - 2362 , - 585 , - 2072 , - 679 , - 2550 , - 1541 , - 724 , - 99 , - 2738 , - 2497 , - 2448 , - 2591 , - 2926 , - 381 , - 1100 , - 2011 , - 42 , - 1337 , - 2824 , - 1431 , - 230 , - 2293 , - 1476 , - 851 , - 418 , - 177 , - 128 , - 271 , - 606 , - 1133 , - 1852 , - 2763 , - 794 , - 2089 , - 504 , - 2183 , - 982 , - 3045 , - 2228 , - 1603 , - 1170 , - 929 , - 880 , - 1023 , - 1358 , - 1885 , - 2604 , - 443 , - 1546 , - 2841 , - 1256 , - 2935 , - 1734 , - 725 , - 2980 , - 2355 , - 1922 , - 1681 , - 1632 , - 1775 , - 2110 , - 2637 , - 284 , - 1195 , - 2298 , - 521 , - 2008 , - 615 , - 2486 , - 1477 , - 660 , - 35 , - 2674 , - 2433 , - 2384 , - 2527 , - 2862 , - 317 , - 1036 , - 1947 , - 3050 , - 1273 , - 2760 , - 1367 , - 166 , - 2229 , - 1412 , - 787 , - 354 , - 113 , - 64 , - 207 , - 542 , - 1069 , - 1788 , - 2699 , - 730 , - 2025 , - 440 , - 2119 , - 918 , - 2981 , - 2164 , - 1539 , - 1106 , - 865 , - 816 , - 959 , - 1294 , - 1821 , - 2540 , - 379 , - 1482 , - 2777 , - 1192 , - 2871 , - 1670 , - 661 , - 2916 , - 2291 , - 1858 , - 1617 , - 1568 , - 1711 , - 2046 , - 2573 , - 220 , - 1131 , - 2234 , - 457 , - 1944 , - 551 , - 2422 , - 1413 , - 596 , - 3043 , - 2610 , - 2369 , - 2320 , - 2463 , - 2798 , - 253 , - 972 , - 1883 , - 2986 , - 1209 , - 2696 , - 1303 , - 102 , - 2165 , - 1348 , - 723 , - 290 , - 49 , - 0 , - 41 , - 138 , - 291 , - 500 , - 765 , - 1086 , - 1463 , - 1896 , - 2385 , - 2930 , - 395 , - 1052 , - 1765 , - 2534 , - 223 , - 1104 , - 2041 , - 3034 , - 947 , - 2052 , - 77 , - 1294 , - 2567 , - 760 , - 2145 , - 450 , - 1947 , - 364 , - 1973 , - 502 , - 2223 , - 864 , - 2697 , - 1450 , - 259 , - 2260 , - 1181 , - 158 , - 2327 , - 1416 , - 561 , - 2898 , - 2155 , - 1468 , - 837 , - 262 , - 2879 , - 2416 , - 2009 , - 1658 , - 1363 , - 1124 , - 941 , - 814 , - 743 , - 728 , - 769 , - 866 , - 1019 , - 1228 , - 1493 , - 1814 , - 2191 , - 2624 , - 3113 , - 522 , - 1123 , - 1780 , - 2493 , - 126 , - 951 , - 1832 , - 2769 , - 626 , - 1675 , - 2780 , - 805 , - 2022 , - 159 , - 1488 , - 2873 , - 1178 , - 2675 , - 1092 , - 2701 , - 1230 , - 2951 , - 1592 , - 289 , - 2178 , - 987 , - 2988 , - 1909 , - 886 , - 3055 , - 2144 , - 1289 , - 490 , - 2883 , - 2196 , - 1565 , - 990 , - 471 , - 8 , - 2737 , - 2386 , - 2091 , - 1852 , - 1669 , - 1542 , - 1471 , - 1456 , - 1497 , - 1594 , - 1747 , - 1956 , - 2221 , - 2542 , - 2919 , - 216 , - 705 , - 1250 , - 1851 , - 2508 , - 85 , - 854 , - 1679 , - 2560 , - 361 , - 1354 , - 2403 , - 372 , - 1533 , - 2750 , - 887 , - 2216 , - 465 , - 1906 , - 267 , - 1820 , - 293 , - 1958 , - 543 , - 2320 , - 1017 , - 2906 , - 1715 , - 580 , - 2637 , - 1614 , - 647 , - 2872 , - 2017 , - 1218 , - 475 , - 2924 , - 2293 , - 1718 , - 1199 , - 736 , - 329 , - 3114 , - 2819 , - 2580 , - 2397 , - 2270 , - 2199 , - 2184 , - 2225 , - 2322 , - 2475 , - 2684 , - 2949 , - 134 , - 511 , - 944 , - 1433 , - 1978 , - 2579 , - 100 , - 813 , - 1582 , - 2407 , - 152 , - 1089 , - 2082 , - 3131 , - 1100 , - 2261 , - 342 , - 1615 , - 2944 , - 1193 , - 2634 , - 995 , - 2548 , - 1021 , - 2686 , - 1271 , - 3048 , - 1745 , - 498 , - 2443 , - 1308 , - 229 , - 2342 , - 1375 , - 464 , - 2745 , - 1946 , - 1203 , - 516 , - 3021 , - 2446 , - 1927 , - 1464 , - 1057 , - 706 , - 411 , - 172 , - 3125 , - 2998 , - 2927 , - 2912 , - 2953 , - 3050 , - 67 , - 276 , - 541 , - 862 , - 1239 , - 1672 , - 2161 , - 2706 , - 171 , - 828 , - 1541 , - 2310 , - 3135 , - 880 , - 1817 , - 2810 , - 723 , - 1828 , - 2989 , - 1070 , - 2343 , - 536 , - 1921 , - 226 , - 1723 , - 140 , - 1749 , - 278 , - 1999 , - 640 , - 2473 , - 1226 , - 35 , - 2036 , - 957 , - 3070 , - 2103 , - 1192 , - 337 , - 2674 , - 1931 , - 1244 , - 613 , - 38 , - 2655 , - 2192 , - 1785 , - 1434 , - 1139 , - 900 , - 717 , - 590 , - 519 , - 504 , - 545 , - 642 , - 795 , - 1004 , - 1269 , - 1590 , - 1967 , - 2400 , - 2889 , - 298 , - 899 , - 1556 , - 2269 , - 3038 , - 727 , - 1608 , - 2545 , - 402 , - 1451 , - 2556 , - 581 , - 1798 , - 3071 , - 1264 , - 2649 , - 954 , - 2451 , - 868 , - 2477 , - 1006 , - 2727 , - 1368 , - 65 , - 1954 , - 763 , - 2764 , - 1685 , - 662 , - 2831 , - 1920 , - 1065 , - 266 , - 2659 , - 1972 , - 1341 , - 766 , - 247 , - 2920 , - 2513 , - 2162 , - 1867 , - 1628 , - 1445 , - 1318 , - 1247 , - 1232 , - 1273 , - 1370 , - 1523 , - 1732 , - 1997 , - 2318 , - 2695 , - 3128 , - 481 , - 1026 , - 1627 , - 2284 , - 2997 , - 630 , - 1455 , - 2336 , - 137 , - 1130 , - 2179 , - 148 , - 1309 , - 2526 , - 663 , - 1992 , - 241 , - 1682 , - 43 , - 1596 , - 69 , - 1734 , - 319 , - 2096 , - 793 , - 2682 , - 1491 , - 356 , - 2413 , - 1390 , - 423 , - 2648 , - 1793 , - 994 , - 251 , - 2700 , - 2069 , - 1494 , - 975 , - 512 , - 105 , - 2890 , - 2595 , - 2356 , - 2173 , - 2046 , - 1975 , - 1960 , - 2001 , - 2098 , - 2251 , - 2460 , - 2725 , - 3046 , - 287 , - 720 , - 1209 , - 1754 , - 2355 , - 3012 , - 589 , - 1358 , - 2183 , - 3064 , - 865 , - 1858 , - 2907 , - 876 , - 2037 , - 118 , - 1391 , - 2720 , - 969 , - 2410 , - 771 , - 2324 , - 797 , - 2462 , - 1047 , - 2824 , - 1521 , - 274 , - 2219 , - 1084 , - 5 , - 2118 , - 1151 , - 240 , - 2521 , - 1722 , - 979 , - 292 , - 2797 , - 2222 , - 1703 , - 1240 , - 833 , - 482 , - 187 , - 3084 , - 2901 , - 2774 , - 2703 , - 2688 , - 2729 , - 2826 , - 2979 , - 52 , - 317 , - 638 , - 1015 , - 1448 , - 1937 , - 2482 , - 3083 , - 604 , - 1317 , - 2086 , - 2911 , - 656 , - 1593 , - 2586 , - 499 , - 1604 , - 2765 , - 846 , - 2119 , - 312 , - 1697 , - 2 , - 1499 , - 3052 , - 1525 , - 54 , - 1775 , - 416 , - 2249 , - 1002 , - 2947 , - 1812 , - 733 , - 2846 , - 1879 , - 968 , - 113 , - 2450 , - 1707 , - 1020 , - 389 , - 2950 , - 2431 , - 1968 , - 1561 , - 1210 , - 915 , - 676 , - 493 , - 366 , - 295 , - 280 , - 321 , - 418 , - 571 , - 780 , - 1045 , - 1366 , - 1743 , - 2176 , - 2665 , - 74 , - 675 , - 1332 , - 2045 , - 2814 , - 503 , - 1384 , - 2321 , - 178 , - 1227 , - 2332 , - 357 , - 1574 , - 2847 , - 1040 , - 2425 , - 730 , - 2227 , - 644 , - 2253 , - 782 , - 2503 , - 1144 , - 2977 , - 1730 , - 539 , - 2540 , - 1461 , - 438 , - 2607 , - 1696 , - 841 , - 42 , - 2435 , - 1748 , - 1117 , - 542 , - 23 , - 2696 , - 2289 , - 1938 , - 1643 , - 1404 , - 1221 , - 1094 , - 1023 , - 1008 , - 1049 , - 1146 , - 1299 , - 1508 , - 1773 , - 2094 , - 2471 , - 2904 , - 257 , - 802 , - 1403 , - 2060 , - 2773 , - 406 , - 1231 , - 2112 , - 3049 , - 906 , - 1955 , - 3060 , - 1085 , - 2302 , - 439 , - 1768 , - 17 , - 1458 , - 2955 , - 1372 , - 2981 , - 1510 , - 95 , - 1872 , - 569 , - 2458 , - 1267 , - 132 , - 2189 , - 1166 , - 199 , - 2424 , - 1569 , - 770 , - 27 , - 2476 , - 1845 , - 1270 , - 751 , - 288 , - 3017 , - 2666 , - 2371 , - 2132 , - 1949 , - 1822 , - 1751 , - 1736 , - 1777 , - 1874 , - 2027 , - 2236 , - 2501 , - 2822 , - 63 , - 496 , - 985 , - 1530 , - 2131 , - 2788 , - 365 , - 1134 , - 1959 , - 2840 , - 641 , - 1634 , - 2683 , - 652 , - 1813 , - 3030 , - 1167 , - 2496 , - 745 , - 2186 , - 547 , - 2100 , - 573 , - 2238 , - 823 , - 2600 , - 1297 , - 50 , - 1995 , - 860 , - 2917 , - 1894 , - 927 , - 16 , - 2297 , - 1498 , - 755 , - 68 , - 2573 , - 1998 , - 1479 , - 1016 , - 609 , - 258 , - 3099 , - 2860 , - 2677 , - 2550 , - 2479 , - 2464 , - 2505 , - 2602 , - 2755 , - 2964 , - 93 , - 414 , - 791 , - 1224 , - 1713 , - 2258 , - 2859 , - 380 , - 1093 , - 1862 , - 2687 , - 432 , - 1369 , - 2362 , - 275 , - 1380 , - 2541 , - 622 , - 1895 , - 88 , - 1473 , - 2914 , - 1275 , - 2828 , - 1301 , - 2966 , - 1551 , - 192 , - 2025 , - 778 , - 2723 , - 1588 , - 509 , - 2622 , - 1655 , - 744 , - 3025 , - 2226 , - 1483 , - 796 , - 165 , - 2726 , - 2207 , - 1744 , - 1337 , - 986 , - 691 , - 452 , - 269 , - 142 , - 71 , - 56 , - 97 , - 194 , - 347 , - 556 , - 821 , - 1142 , - 1519 , - 1952 , - 2441 , - 2986 , - 451 , - 1108 , - 1821 , - 2590 , - 279 , - 1160 , - 2097 , - 3090 , - 1003 , - 2108 , - 133 , - 1350 , - 2623 , - 816 , - 2201 , - 506 , - 2003 , - 420 , - 2029 , - 558 , - 2279 , - 920 , - 2753 , - 1506 , - 315 , - 2316 , - 1237 , - 214 , - 2383 , - 1472 , - 617 , - 2954 , - 2211 , - 1524 , - 893 , - 318 , - 2935 , - 2472 , - 2065 , - 1714 , - 1419 , - 1180 , - 997 , - 870 , - 799 , - 784 , - 825 , - 922 , - 1075 , - 1284 , - 1549 , - 1870 , - 2247 , - 2680 , - 33 , - 578 , - 1179 , - 1836 , - 2549 , - 182 , - 1007 , - 1888 , - 2825 , - 682 , - 1731 , - 2836 , - 861 , - 2078 , - 215 , - 1544 , - 2929 , - 1234 , - 2731 , - 1148 , - 2757 , - 1286 , - 3007 , - 1648 , - 345 , - 2234 , - 1043 , - 3044 , - 1965 , - 942 , - 3111 , - 2200 , - 1345 , - 546 , - 2939 , - 2252 , - 1621 , - 1046 , - 527 , - 64 , - 2793 , - 2442 , - 2147 , - 1908 , - 1725 , - 1598 , - 1527 , - 1512 , - 1553 , - 1650 , - 1803 , - 2012 , - 2277 , - 2598 , - 2975 , - 272 , - 761 , - 1306 , - 1907 , - 2564 , - 141 , - 910 , - 1735 , - 2616 , - 417 , - 1410 , - 2459 , - 428 , - 1589 , - 2806 , - 943 , - 2272 , - 521 , - 1962 , - 323 , - 1876 , - 349 , - 2014 , - 599 , - 2376 , - 1073 , - 2962 , - 1771 , - 636 , - 2693 , - 1670 , - 703 , - 2928 , - 2073 , - 1274 , - 531 , - 2980 , - 2349 , - 1774 , - 1255 , - 792 , - 385 , - 34 , - 2875 , - 2636 , - 2453 , - 2326 , - 2255 , - 2240 , - 2281 , - 2378 , - 2531 , - 2740 , - 3005 , - 190 , - 567 , - 1000 , - 1489 , - 2034 , - 2635 , - 156 , - 869 , - 1638 , - 2463 , - 208 , - 1145 , - 2138 , - 51 , - 1156 , - 2317 , - 398 , - 1671 , - 3000 , - 1249 , - 2690 , - 1051 , - 2604 , - 1077 , - 2742 , - 1327 , - 3104 , - 1801 , - 554 , - 2499 , - 1364 , - 285 , - 2398 , - 1431 , - 520 , - 2801 , - 2002 , - 1259 , - 572 , - 3077 , - 2502 , - 1983 , - 1520 , - 1113 , - 762 , - 467 , - 228 , - 45 , - 3054 , - 2983 , - 2968 , - 3009 , - 3106 , - 123 , - 332 , - 597 , - 918 , - 1295 , - 1728 , - 2217 , - 2762 , - 227 , - 884 , - 1597 , - 2366 , - 55 , - 936 , - 1873 , - 2866 , - 779 , - 1884 , - 3045 , - 1126 , - 2399 , - 592 , - 1977 , - 282 , - 1779 , - 196 , - 1805 , - 334 , - 2055 , - 696 , - 2529 , - 1282 , - 91 , - 2092 , - 1013 , - 3126 , - 2159 , - 1248 , - 393 , - 2730 , - 1987 , - 1300 , - 669 , - 94 , - 2711 , - 2248 , - 1841 , - 1490 , - 1195 , - 956 , - 773 , - 646 , - 575 , - 560 , - 601 , - 698 , - 851 , - 1060 , - 1325 , - 1646 , - 2023 , - 2456 , - 2945 , - 354 , - 955 , - 1612 , - 2325 , - 3094 , - 783 , - 1664 , - 2601 , - 458 , - 1507 , - 2612 , - 637 , - 1854 , - 3127 , - 1320 , - 2705 , - 1010 , - 2507 , - 924 , - 2533 , - 1062 , - 2783 , - 1424 , - 121 , - 2010 , - 819 , - 2820 , - 1741 , - 718 , - 2887 , - 1976 , - 1121 , - 322 , - 2715 , - 2028 , - 1397 , - 822 , - 303 , - 2976 , - 2569 , - 2218 , - 1923 , - 1684 , - 1501 , - 1374 , - 1303 , - 1288 , - 1329 , - 1426 , - 1579 , - 1788 , - 2053 , - 2374 , - 2751 , - 48 , - 537 , - 1082 , - 1683 , - 2340 , - 3053 , - 686 , - 1511 , - 2392 , - 193 , - 1186 , - 2235 , - 204 , - 1365 , - 2582 , - 719 , - 2048 , - 297 , - 1738 , - 99 , - 1652 , - 125 , - 1790 , - 375 , - 2152 , - 849 , - 2738 , - 1547 , - 412 , - 2469 , - 1446 , - 479 , - 2704 , - 1849 , - 1050 , - 307 , - 2756 , - 2125 , - 1550 , - 1031 , - 568 , - 161 , - 2946 , - 2651 , - 2412 , - 2229 , - 2102 , - 2031 , - 2016 , - 2057 , - 2154 , - 2307 , - 2516 , - 2781 , - 3102 , - 343 , - 776 , - 1265 , - 1810 , - 2411 , - 3068 , - 645 , - 1414 , - 2239 , - 3120 , - 921 , - 1914 , - 2963 , - 932 , - 2093 , - 174 , - 1447 , - 2776 , - 1025 , - 2466 , - 827 , - 2380 , - 853 , - 2518 , - 1103 , - 2880 , - 1577 , - 330 , - 2275 , - 1140 , - 61 , - 2174 , - 1207 , - 296 , - 2577 , - 1778 , - 1035 , - 348 , - 2853 , - 2278 , - 1759 , - 1296 , - 889 , - 538 , - 243 , - 4 , - 2957 , - 2830 , - 2759 , - 2744 , - 2785 , - 2882 , - 3035 , - 108 , - 373 , - 694 , - 1071 , - 1504 , - 1993 , - 2538 , - 3 , - 660 , - 1373 , - 2142 , - 2967 , - 712 , - 1649 , - 2642 , - 555 , - 1660 , - 2821 , - 902 , - 2175 , - 368 , - 1753 , - 58 , - 1555 , - 3108 , - 1581 , - 110 , - 1831 , - 472 , - 2305 , - 1058 , - 3003 , - 1868 , - 789 , - 2902 , - 1935 , - 1024 , - 169 , - 2506 , - 1763 , - 1076 , - 445 , - 3006 , - 2487 , - 2024 , - 1617 , - 1266 , - 971 , - 732 , - 549 , - 422 , - 351 , - 336 , - 377 , - 474 , - 627 , - 836 , - 1101 , - 1422 , - 1799 , - 2232 , - 2721 , - 130 , - 731 , - 1388 , - 2101 , - 2870 , - 559 , - 1440 , - 2377 , - 234 , - 1283 , - 2388 , - 413 , - 1630 , - 2903 , - 1096 , - 2481 , - 786 , - 2283 , - 700 , - 2309 , - 838 , - 2559 , - 1200 , - 3033 , - 1786 , - 595 , - 2596 , - 1517 , - 494 , - 2663 , - 1752 , - 897 , - 98 , - 2491 , - 1804 , - 1173 , - 598 , - 79 , - 2752 , - 2345 , - 1994 , - 1699 , - 1460 , - 1277 , - 1150 , - 1079 , - 1064 , - 1105 , - 1202 , - 1355 , - 1564 , - 1829 , - 2150 , - 2527 , - 2960 , - 313 , - 858 , - 1459 , - 2116 , - 2829 , - 462 , - 1287 , - 2168 , - 3105 , - 962 , - 2011 , - 3116 , - 1141 , - 2358 , - 495 , - 1824 , - 73 , - 1514 , - 3011 , - 1428 , - 3037 , - 1566 , - 151 , - 1928 , - 625 , - 2514 , - 1323 , - 188 , - 2245 , - 1222 , - 255 , - 2480 , - 1625 , - 826 , - 83 , - 2532 , - 1901 , - 1326 , - 807 , - 344 , - 3073 , - 2722 , - 2427 , - 2188 , - 2005 , - 1878 , - 1807 , - 1792 , - 1833 , - 1930 , - 2083 , - 2292 , - 2557 , - 2878 , - 119 , - 552 , - 1041 , - 1586 , - 2187 , - 2844 , - 421 , - 1190 , - 2015 , - 2896 , - 697 , - 1690 , - 2739 , - 708 , - 1869 , - 3086 , - 1223 , - 2552 , - 801 , - 2242 , - 603 , - 2156 , - 629 , - 2294 , - 879 , - 2656 , - 1353 , - 106 , - 2051 , - 916 , - 2973 , - 1950 , - 983 , - 72 , - 2353 , - 1554 , - 811 , - 124 , - 2629 , - 2054 , - 1535 , - 1072 , - 665 , - 314 , - 19 , - 2916 , - 2733 , - 2606 , - 2535 , - 2520 , - 2561 , - 2658 , - 2811 , - 3020 , - 149 , - 470 , - 847 , - 1280 , - 1769 , - 2314 , - 2915 , - 436 , - 1149 , - 1918 , - 2743 , - 488 , - 1425 , - 2418 , - 331 , - 1436 , - 2597 , - 678 , - 1951 , - 144 , - 1529 , - 2970 , - 1331 , - 2884 , - 1357 , - 3022 , - 1607 , - 248 , - 2081 , - 834 , - 2779 , - 1644 , - 565 , - 2678 , - 1711 , - 800 , - 3081 , - 2282 , - 1539 , - 852 , - 221 , - 2782 , - 2263 , - 1800 , - 1393 , - 1042 , - 747 , - 508 , - 325 , - 198 , - 127 , - 112 , - 153 , - 250 , - 403 , - 612 , - 877 , - 1198 , - 1575 , - 2008 , - 2497 , - 3042 , - 507 , - 1164 , - 1877 , - 2646 , - 335 , - 1216 , - 2153 , - 10 , - 1059 , - 2164 , - 189 , - 1406 , - 2679 , - 872 , - 2257 , - 562 , - 2059 , - 476 , - 2085 , - 614 , - 2335 , - 976 , - 2809 , - 1562 , - 371 , - 2372 , - 1293 , - 270 , - 2439 , - 1528 , - 673 , - 3010 , - 2267 , - 1580 , - 949 , - 374 , - 2991 , - 2528 , - 2121 , - 1770 , - 1475 , - 1236 , - 1053 , - 926 , - 855 , - 840 , - 881 , - 978 , - 1131 , - 1340 , - 1605 , - 1926 , - 2303 , - 2736 , - 89 , - 634 , - 1235 , - 1892 , - 2605 , - 238 , - 1063 , - 1944 , - 2881 , - 738 , - 1787 , - 2892 , - 917 , - 2134 , - 271 , - 1600 , - 2985 , - 1290 , - 2787 , - 1204 , - 2813 , - 1342 , - 3063 , - 1704 , - 401 , - 2290 , - 1099 , - 3100 , - 2021 , - 998 , - 31 , - 2256 , - 1401 , - 602 , - 2995 , - 2308 , - 1677 , - 1102 , - 583 , - 120 , - 2849 , - 2498 , - 2203 , - 1964 , - 1781 , - 1654 , - 1583 , - 1568 , - 1609 , - 1706 , - 1859 , - 2068 , - 2333 , - 2654 , - 3031 , - 328 , - 817 , - 1362 , - 1963 , - 2620 , - 197 , - 966 , - 1791 , - 2672 , - 473 , - 1466 , - 2515 , - 484 , - 1645 , - 2862 , - 999 , - 2328 , - 577 , - 2018 , - 379 , - 1932 , - 405 , - 2070 , - 655 , - 2432 , - 1129 , - 3018 , - 1827 , - 692 , - 2749 , - 1726 , - 759 , - 2984 , - 2129 , - 1330 , - 587 , - 3036 , - 2405 , - 1830 , - 1311 , - 848 , - 441 , - 90 , - 2931 , - 2692 , - 2509 , - 2382 , - 2311 , - 2296 , - 2337 , - 2434 , - 2587 , - 2796 , - 3061 , - 246 , - 623 , - 1056 , - 1545 , - 2090 , - 2691 , - 212 , - 925 , - 1694 , - 2519 , - 264 , - 1201 , - 2194 , - 107 , - 1212 , - 2373 , - 454 , - 1727 , - 3056 , - 1305 , - 2746 , - 1107 , - 2660 , - 1133 , - 2798 , - 1383 , - 24 , - 1857 , - 610 , - 2555 , - 1420 , - 341 , - 2454 , - 1487 , - 576 , - 2857 , - 2058 , - 1315 , - 628 , - 3133 , - 2558 , - 2039 , - 1576 , - 1169 , - 818 , - 523 , - 284 , - 101 , - 3110 , - 3039 , - 3024 , - 3065 , - 26 , - 179 , - 388 , - 653 , - 974 , - 1351 , - 1784 , - 2273 , - 2818 , - 283 , - 940 , - 1653 , - 2422 , - 111 , - 992 , - 1929 , - 2922 , - 835 , - 1940 , - 3101 , - 1182 , - 2455 , - 648 , - 2033 , - 338 , - 1835 , - 252 , - 1861 , - 390 , - 2111 , - 752 , - 2585 , - 1338 , - 147 , - 2148 , - 1069 , - 46 , - 2215 , - 1304 , - 449 , - 2786 , - 2043 , - 1356 , - 725 , - 150 , - 2767 , - 2304 , - 1897 , - 1546 , - 1251 , - 1012 , - 829 , - 702 , - 631 , - 616 , - 657 , - 754 , - 907 , - 1116 , - 1381 , - 1702 , - 2079 , - 2512 , - 3001 , - 410 , - 1011 , - 1668 , - 2381 , - 14 , - 839 , - 1720 , - 2657 , - 514 , - 1563 , - 2668 , - 693 , - 1910 , - 47 , - 1376 , - 2761 , - 1066 , - 2563 , - 980 , - 2589 , - 1118 , - 2839 , - 1480 , - 177 , - 2066 , - 875 , - 2876 , - 1797 , - 774 , - 2943 , - 2032 , - 1177 , - 378 , - 2771 , - 2084 , - 1453 , - 878 , - 359 , - 3032 , - 2625 , - 2274 , - 1979 , - 1740 , - 1557 , - 1430 , - 1359 , - 1344 , - 1385 , - 1482 , - 1635 , - 1844 , - 2109 , - 2430 , - 2807 , - 104 , - 593 , - 1138 , - 1739 , - 2396 , - 3109 , - 742 , - 1567 , - 2448 , - 249 , - 1242 , - 2291 , - 260 , - 1421 , - 2638 , - 775 , - 2104 , - 353 , - 1794 , - 155 , - 1708 , - 181 , - 1846 , - 431 , - 2208 , - 905 , - 2794 , - 1603 , - 468 , - 2525 , - 1502 , - 535 , - 2760 , - 1905 , - 1106 , - 363 , - 2812 , - 2181 , - 1606 , - 1087 , - 624 , - 217 , - 3002 , - 2707 , - 2468 , - 2285 , - 2158 , - 2087 , - 2072 , - 2113 , - 2210 , - 2363 , - 2572 , - 2837 , - 22 , - 399 , - 832 , - 1321 , - 1866 , - 2467 , - 3124 , - 701 , - 1470 , - 2295 , - 40 , - 977 , - 1970 , - 3019 , - 988 , - 2149 , - 230 , - 1503 , - 2832 , - 1081 , - 2522 , - 883 , - 2436 , - 909 , - 2574 , - 1159 , - 2936 , - 1633 , - 386 , - 2331 , - 1196 , - 117 , - 2230 , - 1263 , - 352 , - 2633 , - 1834 , - 1091 , - 404 , - 2909 , - 2334 , - 1815 , - 1352 , - 945 , - 594 , - 299 , - 60 , - 3013 , - 2886 , - 2815 , - 2800 , - 2841 , - 2938 , - 3091 , - 164 , - 429 , - 750 , - 1127 , - 1560 , - 2049 , - 2594 , - 59 , - 716 , - 1429 , - 2198 , - 3023 , - 768 , - 1705 , - 2698 , - 611 , - 1716 , - 2877 , - 958 , - 2231 , - 424 , - 1809 , - 114 , - 1611 , - 28 , - 1637 , - 166 , - 1887 , - 528 , - 2361 , - 1114 , - 3059 , - 1924 , - 845 , - 2958 , - 1991 , - 1080 , - 225 , - 2562 , - 1819 , - 1132 , - 501 , - 3062 , - 2543 , - 2080 , - 1673 , - 1322 , - 1027 , - 788 , - 605 , - 478 , - 407 , - 392 , - 433 , - 530 , - 683 , - 892 , - 1157 , - 1478 , - 1855 , - 2288 , - 2777 , - 186 , - 787 , - 1444 , - 2157 , - 2926 , - 615 , - 1496 , - 2433 , - 290 , - 1339 , - 2444 , - 469 , - 1686 , - 2959 , - 1152 , - 2537 , - 842 , - 2339 , - 756 , - 2365 , - 894 , - 2615 , - 1256 , - 3089 , - 1842 , - 651 , - 2652 , - 1573 , - 550 , - 2719 , - 1808 , - 953 , - 154 , - 2547 , - 1860 , - 1229 , - 654 , - 135 , - 2808 , - 2401 , - 2050 , - 1755 , - 1516 , - 1333 , - 1206 , - 1135 , - 1120 , - 1161 , - 1258 , - 1411 , - 1620 , - 1885 , - 2206 , - 2583 , - 3016 , - 369 , - 914 , - 1515 , - 2172 , - 2885 , - 518 , - 1343 , - 2224 , - 25 , - 1018 , - 2067 , - 36 , - 1197 , - 2414 , - 551 , - 1880 , - 129 , - 1570 , - 3067 , - 1484 , - 3093 , - 1622 , - 207 , - 1984 , - 681 , - 2570 , - 1379 , - 244 , - 2301 , - 1278 , - 311 , - 2536 , - 1681 , - 882 , - 139 , - 2588 , - 1957 , - 1382 , - 863 , - 400 , - 3129 , - 2778 , - 2483 , - 2244 , - 2061 , - 1934 , - 1863 , - 1848 , - 1889 , - 1986 , - 2139 , - 2348 , - 2613 , - 2934 , - 175 , - 608 , - 1097 , - 1642 , - 2243 , - 2900 , - 477 , - 1246 , - 2071 , - 2952 , - 753 , - 1746 , - 2795 , - 764 , - 1925 , - 6 , - 1279 , - 2608 , - 857 , - 2298 , - 659 , - 2212 , - 685 , - 2350 , - 935 , - 2712 , - 1409 , - 162 , - 2107 , - 972 , - 3029 , - 2006 , - 1039 , - 128 , - 2409 , - 1610 , - 867 , - 180 , - 2685 , - 2110 , - 1591 , - 1128 , - 721 , - 370 , - 75 , - 2972 , - 2789 , - 2662 , - 2591 , - 2576 , - 2617 , - 2714 , - 2867 , - 3076 , - 205 , - 526 , - 903 , - 1336 , - 1825 , - 2370 , - 2971 , - 492 , - 1205 , - 1974 , - 2799 , - 544 , - 1481 , - 2474 , - 387 , - 1492 , - 2653 , - 734 , - 2007 , - 200 , - 1585 , - 3026 , - 1387 , - 2940 , - 1413 , - 3078 , - 1663 , - 304 , - 2137 , - 890 , - 2835 , - 1700 , - 621 , - 2734 , - 1767 , - 856 , - 1 , - 2338 , - 1595 , - 908 , - 277 , - 2838 , - 2319 , - 1856 , - 1449 , - 1098 , - 803 , - 564 , - 381 , - 254 , - 183 , - 168 , - 209 , - 306 , - 459 , - 668 , - 933 , - 1254 , - 1631 , - 2064 , - 2553 , - 3098 , - 563 , - 1220 , - 1933 , - 2702 , - 391 , - 1272 , - 2209 , - 66 , - 1115 , - 2220 , - 245 , - 1462 , - 2735 , - 928 , - 2313 , - 618 , - 2115 , - 532 , - 2141 , - 670 , - 2391 , - 1032 , - 2865 , - 1618 , - 427 , - 2428 , - 1349 , - 326 , - 2495 , - 1584 , - 729 , - 3066 , - 2323 , - 1636 , - 1005 , - 430 , - 3047 , - 2584 , - 2177 , - 1826 , - 1531 , - 1292 , - 1109 , - 982 , - 911 , - 896 , - 937 , - 1034 , - 1187 , - 1396 , - 1661 , - 1982 , - 2359 , - 2792 , - 145 , - 690 , - 1291 , - 1948 , - 2661 , - 294 , - 1119 , - 2000 , - 2937 , - 794 , - 1843 , - 2948 , - 973 , - 2190 , - 327 , - 1656 , - 3041 , - 1346 , - 2843 , - 1260 , - 2869 , - 1398 , - 3119 , - 1760 , - 457 , - 2346 , - 1155 , - 20 , - 2077 , - 1054 , - 87 , - 2312 , - 1457 , - 658 , - 3051 , - 2364 , - 1733 , - 1158 , - 639 , - 176 , - 2905 , - 2554 , - 2259 , - 2020 , - 1837 , - 1710 , - 1639 , - 1624 , - 1665 , - 1762 , - 1915 , - 2124 , - 2389 , - 2710 , - 3087 , - 384 , - 873 , - 1418 , - 2019 , - 2676 , - 253 , - 1022 , - 1847 , - 2728 , - 529 , - 1522 , - 2571 , - 540 , - 1701 , - 2918 , - 1055 , - 2384 , - 633 , - 2074 , - 435 , - 1988 , - 461 , - 2126 , - 711 , - 2488 , - 1185 , - 3074 , - 1883 , - 748 , - 2805 , - 1782 , - 815 , - 3040 , - 2185 , - 1386 , - 643 , - 3092 , - 2461 , - 1886 , - 1367 , - 904 , - 497 , - 146 , - 2987 , - 2748 , - 2565 , - 2438 , - 2367 , - 2352 , - 2393 , - 2490 , - 2643 , - 2852 , - 3117 , - 302 , - 679 , - 1112 , - 1601 , - 2146 , - 2747 , - 268 , - 981 , - 1750 , - 2575 , - 320 , - 1257 , - 2250 , - 163 , - 1268 , - 2429 , - 510 , - 1783 , - 3112 , - 1361 , - 2802 , - 1163 , - 2716 , - 1189 , - 2854 , - 1439 , - 80 , - 1913 , - 666 , - 2611 , - 1476 , - 397 , - 2510 , - 1543 , - 632 , - 2913 , - 2114 , - 1371 , - 684 , - 53 , - 2614 , - 2095 , - 1632 , - 1225 , - 874 , - 579 , - 340 , - 157 , - 30 , - 3095 , - 3080 , - 3121 , - 82 , - 235 , - 444 , - 709 , - 1030 , - 1407 , - 1840 , - 2329 , - 2874 , - 339 , - 996 , - 1709 , - 2478 , - 167 , - 1048 , - 1985 , - 2978 , - 891 , - 1996 , - 21 , - 1238 , - 2511 , - 704 , - 2089 , - 394 , - 1891 , - 308 , - 1917 , - 446 , - 2167 , - 808 , - 2641 , - 1394 , - 203 , - 2204 , - 1125 , - 102 , - 2271 , - 1360 , - 505 , - 2842 , - 2099 , - 1412 , - 781 , - 206 , - 2823 , - 2360 , - 1953 , - 1602 , - 1307 , - 1068 , - 885 , - 758 , - 687 , - 672 , - 713 , - 810 , - 963 , - 1172 , - 1437 , - 1758 , - 2135 , - 2568 , - 3057 , - 466 , - 1067 , - 1724 , - 2437 , - 70 , - 895 , - 1776 , - 2713 , - 570 , - 1619 , - 2724 , - 749 , - 1966 , - 103 , - 1432 , - 2817 , - 1122 , - 2619 , - 1036 , - 2645 , - 1174 , - 2895 , - 1536 , - 233 , - 2122 , - 931 , - 2932 , - 1853 , - 830 , - 2999 , - 2088 , - 1233 , - 434 , - 2827 , - 2140 , - 1509 , - 934 , - 415 , - 3088 , - 2681 , - 2330 , - 2035 , - 1796 , - 1613 , - 1486 , - 1415 , - 1400 , - 1441 , - 1538 , - 1691 , - 1900 , - 2165 , - 2486 , - 2863 , - 160 , - 649 , - 1194 , - 1795 , - 2452 , - 29 , - 798 , - 1623 , - 2504 , - 305 , - 1298 , - 2347 , - 316 , - 1477 , - 2694 , - 831 , - 2160 , - 409 , - 1850 , - 211 , - 1764 , - 237 , - 1902 , - 487 , - 2264 , - 961 , - 2850 , - 1659 , - 524 , - 2581 , - 1558 , - 591 , - 2816 , - 1961 , - 1162 , - 419 , - 2868 , - 2237 , - 1662 , - 1143 , - 680 , - 273 , - 3058 , - 2763 , - 2524 , - 2341 , - 2214 , - 2143 , - 2128 , - 2169 , - 2266 , - 2419 , - 2628 , - 2893 , - 78 , - 455 , - 888 , - 1377 , - 1922 , - 2523 , - 44 , - 757 , - 1526 , - 2351 , - 96 , - 1033 , - 2026 , - 3075 , - 1044 , - 2205 , - 286 , - 1559 , - 2888 , - 1137 , - 2578 , - 939 , - 2492 , - 965 , - 2630 , - 1215 , - 2992 , - 1689 , - 442 , - 2387 , - 1252 , - 173 , - 2286 , - 1319 , - 408 , - 2689 , - 1890 , - 1147 , - 460 , - 2965 , - 2390 , - 1871 , - 1408 , - 1001 , - 650 , - 355 , - 116 , - 3069 , - 2942 , - 2871 , - 2856 , - 2897 , - 2994 , - 11 , - 220 , - 485 , - 806 , - 1183 , - 1616 , - 2105 , - 2650 , - 115 , - 772 , - 1485 , - 2254 , - 3079 , - 824 , - 1761 , - 2754 , - 667 , - 1772 , - 2933 , - 1014 , - 2287 , - 480 , - 1865 , - 170 , - 1667 , - 84 , - 1693 , - 222 , - 1943 , - 584 , - 2417 , - 1170 , - 3115 , - 1980 , - 901 , - 3014 , - 2047 , - 1136 , - 281 , - 2618 , - 1875 , - 1188 , - 557 , - 3118 , - 2599 , - 2136 , - 1729 , - 1378 , - 1083 , - 844 , - 661 , - 534 , - 463 , - 448 , - 489 , - 586 , - 739 , - 948 , - 1213 , - 1534 , - 1911 , - 2344 , - 2833 , - 242 , - 843 , - 1500 , - 2213 , - 2982 , - 671 , - 1552 , - 2489 , - 346 , - 1395 , - 2500 , - 525 , - 1742 , - 3015 , - 1208 , - 2593 , - 898 , - 2395 , - 812 , - 2421 , - 950 , - 2671 , - 1312 , - 9 , - 1898 , - 707 , - 2708 , - 1629 , - 606 , - 2775 , - 1864 , - 1009 , - 210 , - 2603 , - 1916 , - 1285 , - 710 , - 191 , - 2864 , - 2457 , - 2106 , - 1811 , - 1572 , - 1389 , - 1262 , - 1191 , - 1176 , - 1217 , - 1314 , - 1467 , - 1676 , - 1941 , - 2262 , - 2639 , - 3072 , - 425 , - 970 , - 1571 , - 2228 , - 2941 , - 574 , - 1399 , - 2280 , - 81 , - 1074 , - 2123 , - 92 , - 1253 , - 2470 , - 607 , - 1936 , - 185 , - 1626 , - 3123 , - 1540 , - 13 , - 1678 , - 263 , - 2040 , - 737 , - 2626 , - 1435 , - 300 , - 2357 , - 1334 , - 367 , - 2592 , - 1737 , - 938 , - 195 , - 2644 , - 2013 , - 1438 , - 919 , - 456 , - 49 , - 2834 , - 2539 , - 2300 , - 2117 , - 1990 , - 1919 , - 1904 , - 1945 , - 2042 , - 2195 , - 2404 , - 2669 , - 2990 , - 231 , - 664 , - 1153 , - 1698 , - 2299 , - 2956 , - 533 , - 1302 , - 2127 , - 3008 , - 809 , - 1802 , - 2851 , - 820 , - 1981 , - 62 , - 1335 , - 2664 , - 913 , - 2354 , - 715 , - 2268 , - 741 , - 2406 , - 991 , - 2768 , - 1465 , - 218 , - 2163 , - 1028 , - 3085 , - 2062 , - 1095 , - 184 , - 2465 , - 1666 , - 923 , - 236 , - 2741 , - 2166 , - 1647 , - 1184 , - 777 , - 426 , - 131 , - 3028 , - 2845 , - 2718 , - 2647 , - 2632 , - 2673 , - 2770 , - 2923 , - 3132 , - 261 , - 582 , - 959 , - 1392 , - 1881 , - 2426 , - 3027 , - 548 , - 1261 , - 2030 , - 2855 , - 600 , - 1537 , - 2530 , - 443 , - 1548 , - 2709 , - 790 , - 2063 , - 256 , - 1641 , - 3082 , - 1443 , - 2996 , - 1469 , - 3134 , - 1719 , - 360 , - 2193 , - 946 , - 2891 , - 1756 , - 677 , - 2790 , - 1823 , - 912 , - 57 , - 2394 , - 1651 , - 964 , - 333 , - 2894 , - 2375 , - 1912 , - 1505 , - 1154 , - 859 , - 620 , - 437 , - 310 , - 239 , - 224 , - 265 , - 362 , - 515 , - 724 , - 989 , - 1310 , - 1687 , - 2120 , - 2609 , - 18 , - 619 , - 1276 , - 1989 , - 2758 , - 447 , - 1328 , - 2265 , - 122 , - 1171 , - 2276 , - 301 , - 1518 , - 2791 , - 984 , - 2369 , - 674 , - 2171 , - 588 , - 2197 , - 726 , - 2447 , - 1088 , - 2921 , - 1674 , - 483 , - 2484 , - 1405 , - 382 , - 2551 , - 1640 , - 785 , - 3122 , - 2379 , - 1692 , - 1061 , - 486 , - 3103 , - 2640 , - 2233 , - 1882 , - 1587 , - 1348 , - 1165 , - 1038 , - 967 , - 952 , - 993 , - 1090 , - 1243 , - 1452 , - 1717 , - 2038 , - 2415 , - 2848 , - 201 , - 746 , - 1347 , - 2004 , - 2717 , - 350 , - 1175 , - 2056 , - 2993 , - 850 , - 1899 , - 3004 , - 1029 , - 2246 , - 383 , - 1712 , - 3097 , - 1402 , - 2899 , - 1316 , - 2925 , - 1454 , - 39 , - 1816 , - 513 , - 2402 , - 1211 , - 76 , - 2133 , - 1110 , - 143 , - 2368 , - 1513 , - 714 , - 3107 , - 2420 , - 1789 , - 1214 , - 695 , - 232 , - 2961 , - 2610 , - 2315 , - 2076 , - 1893 , - 1766 , - 1695 , - 1680 , - 1721 , - 1818 , - 1971 , - 2180 , - 2445 , - 2766 , - 7 , - 440 , - 929 , - 1474 , - 2075 , - 2732 , - 309 , - 1078 , - 1903 , - 2784 , - 585 , - 1578 , - 2627 , - 596 , - 1757 , - 2974 , - 1111 , - 2440 , - 689 , - 2130 , - 491 , - 2044 , - 517 , - 2182 , - 767 , - 2544 , - 1241 , - 3130 , - 1939 , - 804 , - 2861 , - 1838 , - 871 , - 3096 , - 2241 , - 1442 , - 699 , - 12 , - 2517 , - 1942 , - 1423 , - 960 , - 553 , - 202 , - 3043 , - 2804 , - 2621 , - 2494 , - 2423 , - 2408 , - 2449 , - 2546 , - 2699 , - 2908 , - 37 , - 358 , - 735 , - 1168 , - 1657 , - 2202 , - 2803 , - 324 , - 1037 , - 1806 , - 2631 , - 376 , - 1313 , - 2306 , - 219 , - 1324 , - 2485 , - 566 , - 1839 , - 32 , - 1417 , - 2858 , - 1219 , - 2772 , - 1245 , - 2910 , - 1495 , - 136 , - 1969 , - 722 , - 2667 , - 1532 , - 453 , - 2566 , - 1599 , - 688 , - 2969 , - 2170 , - 1427 , - 740 , - 109 , - 2670 , - 2151 , - 1688 , - 1281 , - 930 , - 635 , - 396 , - 213 , - 86 , - 15 , - 0 , - 351 , - 1182 , - 2493 , - 1084 , - 155 , - 2906 , - 2937 , - 248 , - 1239 , - 2710 , - 1461 , - 692 , - 403 , - 594 , - 1265 , - 2416 , - 847 , - 2958 , - 2349 , - 2220 , - 2571 , - 202 , - 1513 , - 104 , - 2375 , - 1926 , - 1957 , - 2468 , - 259 , - 1730 , - 481 , - 2912 , - 2623 , - 2814 , - 285 , - 1436 , - 3067 , - 1978 , - 1369 , - 1240 , - 1591 , - 2422 , - 533 , - 2324 , - 1395 , - 946 , - 977 , - 1488 , - 2479 , - 750 , - 2701 , - 1932 , - 1643 , - 1834 , - 2505 , - 456 , - 2087 , - 998 , - 389 , - 260 , - 611 , - 1442 , - 2753 , - 1344 , - 415 , - 3166 , - 3197 , - 508 , - 1499 , - 2970 , - 1721 , - 952 , - 663 , - 854 , - 1525 , - 2676 , - 1107 , - 18 , - 2609 , - 2480 , - 2831 , - 462 , - 1773 , - 364 , - 2635 , - 2186 , - 2217 , - 2728 , - 519 , - 1990 , - 741 , - 3172 , - 2883 , - 3074 , - 545 , - 1696 , - 127 , - 2238 , - 1629 , - 1500 , - 1851 , - 2682 , - 793 , - 2584 , - 1655 , - 1206 , - 1237 , - 1748 , - 2739 , - 1010 , - 2961 , - 2192 , - 1903 , - 2094 , - 2765 , - 716 , - 2347 , - 1258 , - 649 , - 520 , - 871 , - 1702 , - 3013 , - 1604 , - 675 , - 226 , - 257 , - 768 , - 1759 , - 30 , - 1981 , - 1212 , - 923 , - 1114 , - 1785 , - 2936 , - 1367 , - 278 , - 2869 , - 2740 , - 3091 , - 722 , - 2033 , - 624 , - 2895 , - 2446 , - 2477 , - 2988 , - 779 , - 2250 , - 1001 , - 232 , - 3143 , - 134 , - 805 , - 1956 , - 387 , - 2498 , - 1889 , - 1760 , - 2111 , - 2942 , - 1053 , - 2844 , - 1915 , - 1466 , - 1497 , - 2008 , - 2999 , - 1270 , - 21 , - 2452 , - 2163 , - 2354 , - 3025 , - 976 , - 2607 , - 1518 , - 909 , - 780 , - 1131 , - 1962 , - 73 , - 1864 , - 935 , - 486 , - 517 , - 1028 , - 2019 , - 290 , - 2241 , - 1472 , - 1183 , - 1374 , - 2045 , - 3196 , - 1627 , - 538 , - 3129 , - 3000 , - 151 , - 982 , - 2293 , - 884 , - 3155 , - 2706 , - 2737 , - 48 , - 1039 , - 2510 , - 1261 , - 492 , - 203 , - 394 , - 1065 , - 2216 , - 647 , - 2758 , - 2149 , - 2020 , - 2371 , - 2 , - 1313 , - 3104 , - 2175 , - 1726 , - 1757 , - 2268 , - 59 , - 1530 , - 281 , - 2712 , - 2423 , - 2614 , - 85 , - 1236 , - 2867 , - 1778 , - 1169 , - 1040 , - 1391 , - 2222 , - 333 , - 2124 , - 1195 , - 746 , - 777 , - 1288 , - 2279 , - 550 , - 2501 , - 1732 , - 1443 , - 1634 , - 2305 , - 256 , - 1887 , - 798 , - 189 , - 60 , - 411 , - 1242 , - 2553 , - 1144 , - 215 , - 2966 , - 2997 , - 308 , - 1299 , - 2770 , - 1521 , - 752 , - 463 , - 654 , - 1325 , - 2476 , - 907 , - 3018 , - 2409 , - 2280 , - 2631 , - 262 , - 1573 , - 164 , - 2435 , - 1986 , - 2017 , - 2528 , - 319 , - 1790 , - 541 , - 2972 , - 2683 , - 2874 , - 345 , - 1496 , - 3127 , - 2038 , - 1429 , - 1300 , - 1651 , - 2482 , - 593 , - 2384 , - 1455 , - 1006 , - 1037 , - 1548 , - 2539 , - 810 , - 2761 , - 1992 , - 1703 , - 1894 , - 2565 , - 516 , - 2147 , - 1058 , - 449 , - 320 , - 671 , - 1502 , - 2813 , - 1404 , - 475 , - 26 , - 57 , - 568 , - 1559 , - 3030 , - 1781 , - 1012 , - 723 , - 914 , - 1585 , - 2736 , - 1167 , - 78 , - 2669 , - 2540 , - 2891 , - 522 , - 1833 , - 424 , - 2695 , - 2246 , - 2277 , - 2788 , - 579 , - 2050 , - 801 , - 32 , - 2943 , - 3134 , - 605 , - 1756 , - 187 , - 2298 , - 1689 , - 1560 , - 1911 , - 2742 , - 853 , - 2644 , - 1715 , - 1266 , - 1297 , - 1808 , - 2799 , - 1070 , - 3021 , - 2252 , - 1963 , - 2154 , - 2825 , - 776 , - 2407 , - 1318 , - 709 , - 580 , - 931 , - 1762 , - 3073 , - 1664 , - 735 , - 286 , - 317 , - 828 , - 1819 , - 90 , - 2041 , - 1272 , - 983 , - 1174 , - 1845 , - 2996 , - 1427 , - 338 , - 2929 , - 2800 , - 3151 , - 782 , - 2093 , - 684 , - 2955 , - 2506 , - 2537 , - 3048 , - 839 , - 2310 , - 1061 , - 292 , - 3 , - 194 , - 865 , - 2016 , - 447 , - 2558 , - 1949 , - 1820 , - 2171 , - 3002 , - 1113 , - 2904 , - 1975 , - 1526 , - 1557 , - 2068 , - 3059 , - 1330 , - 81 , - 2512 , - 2223 , - 2414 , - 3085 , - 1036 , - 2667 , - 1578 , - 969 , - 840 , - 1191 , - 2022 , - 133 , - 1924 , - 995 , - 546 , - 577 , - 1088 , - 2079 , - 350 , - 2301 , - 1532 , - 1243 , - 1434 , - 2105 , - 56 , - 1687 , - 598 , - 3189 , - 3060 , - 211 , - 1042 , - 2353 , - 944 , - 15 , - 2766 , - 2797 , - 108 , - 1099 , - 2570 , - 1321 , - 552 , - 263 , - 454 , - 1125 , - 2276 , - 707 , - 2818 , - 2209 , - 2080 , - 2431 , - 62 , - 1373 , - 3164 , - 2235 , - 1786 , - 1817 , - 2328 , - 119 , - 1590 , - 341 , - 2772 , - 2483 , - 2674 , - 145 , - 1296 , - 2927 , - 1838 , - 1229 , - 1100 , - 1451 , - 2282 , - 393 , - 2184 , - 1255 , - 806 , - 837 , - 1348 , - 2339 , - 610 , - 2561 , - 1792 , - 1503 , - 1694 , - 2365 , - 316 , - 1947 , - 858 , - 249 , - 120 , - 471 , - 1302 , - 2613 , - 1204 , - 275 , - 3026 , - 3057 , - 368 , - 1359 , - 2830 , - 1581 , - 812 , - 523 , - 714 , - 1385 , - 2536 , - 967 , - 3078 , - 2469 , - 2340 , - 2691 , - 322 , - 1633 , - 224 , - 2495 , - 2046 , - 2077 , - 2588 , - 379 , - 1850 , - 601 , - 3032 , - 2743 , - 2934 , - 405 , - 1556 , - 3187 , - 2098 , - 1489 , - 1360 , - 1711 , - 2542 , - 653 , - 2444 , - 1515 , - 1066 , - 1097 , - 1608 , - 2599 , - 870 , - 2821 , - 2052 , - 1763 , - 1954 , - 2625 , - 576 , - 2207 , - 1118 , - 509 , - 380 , - 731 , - 1562 , - 2873 , - 1464 , - 535 , - 86 , - 117 , - 628 , - 1619 , - 3090 , - 1841 , - 1072 , - 783 , - 974 , - 1645 , - 2796 , - 1227 , - 138 , - 2729 , - 2600 , - 2951 , - 582 , - 1893 , - 484 , - 2755 , - 2306 , - 2337 , - 2848 , - 639 , - 2110 , - 861 , - 92 , - 3003 , - 3194 , - 665 , - 1816 , - 247 , - 2358 , - 1749 , - 1620 , - 1971 , - 2802 , - 913 , - 2704 , - 1775 , - 1326 , - 1357 , - 1868 , - 2859 , - 1130 , - 3081 , - 2312 , - 2023 , - 2214 , - 2885 , - 836 , - 2467 , - 1378 , - 769 , - 640 , - 991 , - 1822 , - 3133 , - 1724 , - 795 , - 346 , - 377 , - 888 , - 1879 , - 150 , - 2101 , - 1332 , - 1043 , - 1234 , - 1905 , - 3056 , - 1487 , - 398 , - 2989 , - 2860 , - 11 , - 842 , - 2153 , - 744 , - 3015 , - 2566 , - 2597 , - 3108 , - 899 , - 2370 , - 1121 , - 352 , - 63 , - 254 , - 925 , - 2076 , - 507 , - 2618 , - 2009 , - 1880 , - 2231 , - 3062 , - 1173 , - 2964 , - 2035 , - 1586 , - 1617 , - 2128 , - 3119 , - 1390 , - 141 , - 2572 , - 2283 , - 2474 , - 3145 , - 1096 , - 2727 , - 1638 , - 1029 , - 900 , - 1251 , - 2082 , - 193 , - 1984 , - 1055 , - 606 , - 637 , - 1148 , - 2139 , - 410 , - 2361 , - 1592 , - 1303 , - 1494 , - 2165 , - 116 , - 1747 , - 658 , - 49 , - 3120 , - 271 , - 1102 , - 2413 , - 1004 , - 75 , - 2826 , - 2857 , - 168 , - 1159 , - 2630 , - 1381 , - 612 , - 323 , - 514 , - 1185 , - 2336 , - 767 , - 2878 , - 2269 , - 2140 , - 2491 , - 122 , - 1433 , - 24 , - 2295 , - 1846 , - 1877 , - 2388 , - 179 , - 1650 , - 401 , - 2832 , - 2543 , - 2734 , - 205 , - 1356 , - 2987 , - 1898 , - 1289 , - 1160 , - 1511 , - 2342 , - 453 , - 2244 , - 1315 , - 866 , - 897 , - 1408 , - 2399 , - 670 , - 2621 , - 1852 , - 1563 , - 1754 , - 2425 , - 376 , - 2007 , - 918 , - 309 , - 180 , - 531 , - 1362 , - 2673 , - 1264 , - 335 , - 3086 , - 3117 , - 428 , - 1419 , - 2890 , - 1641 , - 872 , - 583 , - 774 , - 1445 , - 2596 , - 1027 , - 3138 , - 2529 , - 2400 , - 2751 , - 382 , - 1693 , - 284 , - 2555 , - 2106 , - 2137 , - 2648 , - 439 , - 1910 , - 661 , - 3092 , - 2803 , - 2994 , - 465 , - 1616 , - 47 , - 2158 , - 1549 , - 1420 , - 1771 , - 2602 , - 713 , - 2504 , - 1575 , - 1126 , - 1157 , - 1668 , - 2659 , - 930 , - 2881 , - 2112 , - 1823 , - 2014 , - 2685 , - 636 , - 2267 , - 1178 , - 569 , - 440 , - 791 , - 1622 , - 2933 , - 1524 , - 595 , - 146 , - 177 , - 688 , - 1679 , - 3150 , - 1901 , - 1132 , - 843 , - 1034 , - 1705 , - 2856 , - 1287 , - 198 , - 2789 , - 2660 , - 3011 , - 642 , - 1953 , - 544 , - 2815 , - 2366 , - 2397 , - 2908 , - 699 , - 2170 , - 921 , - 152 , - 3063 , - 54 , - 725 , - 1876 , - 307 , - 2418 , - 1809 , - 1680 , - 2031 , - 2862 , - 973 , - 2764 , - 1835 , - 1386 , - 1417 , - 1928 , - 2919 , - 1190 , - 3141 , - 2372 , - 2083 , - 2274 , - 2945 , - 896 , - 2527 , - 1438 , - 829 , - 700 , - 1051 , - 1882 , - 3193 , - 1784 , - 855 , - 406 , - 437 , - 948 , - 1939 , - 210 , - 2161 , - 1392 , - 1103 , - 1294 , - 1965 , - 3116 , - 1547 , - 458 , - 3049 , - 2920 , - 71 , - 902 , - 2213 , - 804 , - 3075 , - 2626 , - 2657 , - 3168 , - 959 , - 2430 , - 1181 , - 412 , - 123 , - 314 , - 985 , - 2136 , - 567 , - 2678 , - 2069 , - 1940 , - 2291 , - 3122 , - 1233 , - 3024 , - 2095 , - 1646 , - 1677 , - 2188 , - 3179 , - 1450 , - 201 , - 2632 , - 2343 , - 2534 , - 5 , - 1156 , - 2787 , - 1698 , - 1089 , - 960 , - 1311 , - 2142 , - 253 , - 2044 , - 1115 , - 666 , - 697 , - 1208 , - 2199 , - 470 , - 2421 , - 1652 , - 1363 , - 1554 , - 2225 , - 176 , - 1807 , - 718 , - 109 , - 3180 , - 331 , - 1162 , - 2473 , - 1064 , - 135 , - 2886 , - 2917 , - 228 , - 1219 , - 2690 , - 1441 , - 672 , - 383 , - 574 , - 1245 , - 2396 , - 827 , - 2938 , - 2329 , - 2200 , - 2551 , - 182 , - 1493 , - 84 , - 2355 , - 1906 , - 1937 , - 2448 , - 239 , - 1710 , - 461 , - 2892 , - 2603 , - 2794 , - 265 , - 1416 , - 3047 , - 1958 , - 1349 , - 1220 , - 1571 , - 2402 , - 513 , - 2304 , - 1375 , - 926 , - 957 , - 1468 , - 2459 , - 730 , - 2681 , - 1912 , - 1623 , - 1814 , - 2485 , - 436 , - 2067 , - 978 , - 369 , - 240 , - 591 , - 1422 , - 2733 , - 1324 , - 395 , - 3146 , - 3177 , - 488 , - 1479 , - 2950 , - 1701 , - 932 , - 643 , - 834 , - 1505 , - 2656 , - 1087 , - 3198 , - 2589 , - 2460 , - 2811 , - 442 , - 1753 , - 344 , - 2615 , - 2166 , - 2197 , - 2708 , - 499 , - 1970 , - 721 , - 3152 , - 2863 , - 3054 , - 525 , - 1676 , - 107 , - 2218 , - 1609 , - 1480 , - 1831 , - 2662 , - 773 , - 2564 , - 1635 , - 1186 , - 1217 , - 1728 , - 2719 , - 990 , - 2941 , - 2172 , - 1883 , - 2074 , - 2745 , - 696 , - 2327 , - 1238 , - 629 , - 500 , - 851 , - 1682 , - 2993 , - 1584 , - 655 , - 206 , - 237 , - 748 , - 1739 , - 10 , - 1961 , - 1192 , - 903 , - 1094 , - 1765 , - 2916 , - 1347 , - 258 , - 2849 , - 2720 , - 3071 , - 702 , - 2013 , - 604 , - 2875 , - 2426 , - 2457 , - 2968 , - 759 , - 2230 , - 981 , - 212 , - 3123 , - 114 , - 785 , - 1936 , - 367 , - 2478 , - 1869 , - 1740 , - 2091 , - 2922 , - 1033 , - 2824 , - 1895 , - 1446 , - 1477 , - 1988 , - 2979 , - 1250 , - 1 , - 2432 , - 2143 , - 2334 , - 3005 , - 956 , - 2587 , - 1498 , - 889 , - 760 , - 1111 , - 1942 , - 53 , - 1844 , - 915 , - 466 , - 497 , - 1008 , - 1999 , - 270 , - 2221 , - 1452 , - 1163 , - 1354 , - 2025 , - 3176 , - 1607 , - 518 , - 3109 , - 2980 , - 131 , - 962 , - 2273 , - 864 , - 3135 , - 2686 , - 2717 , - 28 , - 1019 , - 2490 , - 1241 , - 472 , - 183 , - 374 , - 1045 , - 2196 , - 627 , - 2738 , - 2129 , - 2000 , - 2351 , - 3182 , - 1293 , - 3084 , - 2155 , - 1706 , - 1737 , - 2248 , - 39 , - 1510 , - 261 , - 2692 , - 2403 , - 2594 , - 65 , - 1216 , - 2847 , - 1758 , - 1149 , - 1020 , - 1371 , - 2202 , - 313 , - 2104 , - 1175 , - 726 , - 757 , - 1268 , - 2259 , - 530 , - 2481 , - 1712 , - 1423 , - 1614 , - 2285 , - 236 , - 1867 , - 778 , - 169 , - 40 , - 391 , - 1222 , - 2533 , - 1124 , - 195 , - 2946 , - 2977 , - 288 , - 1279 , - 2750 , - 1501 , - 732 , - 443 , - 634 , - 1305 , - 2456 , - 887 , - 2998 , - 2389 , - 2260 , - 2611 , - 242 , - 1553 , - 144 , - 2415 , - 1966 , - 1997 , - 2508 , - 299 , - 1770 , - 521 , - 2952 , - 2663 , - 2854 , - 325 , - 1476 , - 3107 , - 2018 , - 1409 , - 1280 , - 1631 , - 2462 , - 573 , - 2364 , - 1435 , - 986 , - 1017 , - 1528 , - 2519 , - 790 , - 2741 , - 1972 , - 1683 , - 1874 , - 2545 , - 496 , - 2127 , - 1038 , - 429 , - 300 , - 651 , - 1482 , - 2793 , - 1384 , - 455 , - 6 , - 37 , - 548 , - 1539 , - 3010 , - 1761 , - 992 , - 703 , - 894 , - 1565 , - 2716 , - 1147 , - 58 , - 2649 , - 2520 , - 2871 , - 502 , - 1813 , - 404 , - 2675 , - 2226 , - 2257 , - 2768 , - 559 , - 2030 , - 781 , - 12 , - 2923 , - 3114 , - 585 , - 1736 , - 167 , - 2278 , - 1669 , - 1540 , - 1891 , - 2722 , - 833 , - 2624 , - 1695 , - 1246 , - 1277 , - 1788 , - 2779 , - 1050 , - 3001 , - 2232 , - 1943 , - 2134 , - 2805 , - 756 , - 2387 , - 1298 , - 689 , - 560 , - 911 , - 1742 , - 3053 , - 1644 , - 715 , - 266 , - 297 , - 808 , - 1799 , - 70 , - 2021 , - 1252 , - 963 , - 1154 , - 1825 , - 2976 , - 1407 , - 318 , - 2909 , - 2780 , - 3131 , - 762 , - 2073 , - 664 , - 2935 , - 2486 , - 2517 , - 3028 , - 819 , - 2290 , - 1041 , - 272 , - 3183 , - 174 , - 845 , - 1996 , - 427 , - 2538 , - 1929 , - 1800 , - 2151 , - 2982 , - 1093 , - 2884 , - 1955 , - 1506 , - 1537 , - 2048 , - 3039 , - 1310 , - 61 , - 2492 , - 2203 , - 2394 , - 3065 , - 1016 , - 2647 , - 1558 , - 949 , - 820 , - 1171 , - 2002 , - 113 , - 1904 , - 975 , - 526 , - 557 , - 1068 , - 2059 , - 330 , - 2281 , - 1512 , - 1223 , - 1414 , - 2085 , - 36 , - 1667 , - 578 , - 3169 , - 3040 , - 191 , - 1022 , - 2333 , - 924 , - 3195 , - 2746 , - 2777 , - 88 , - 1079 , - 2550 , - 1301 , - 532 , - 243 , - 434 , - 1105 , - 2256 , - 687 , - 2798 , - 2189 , - 2060 , - 2411 , - 42 , - 1353 , - 3144 , - 2215 , - 1766 , - 1797 , - 2308 , - 99 , - 1570 , - 321 , - 2752 , - 2463 , - 2654 , - 125 , - 1276 , - 2907 , - 1818 , - 1209 , - 1080 , - 1431 , - 2262 , - 373 , - 2164 , - 1235 , - 786 , - 817 , - 1328 , - 2319 , - 590 , - 2541 , - 1772 , - 1483 , - 1674 , - 2345 , - 296 , - 1927 , - 838 , - 229 , - 100 , - 451 , - 1282 , - 2593 , - 1184 , - 255 , - 3006 , - 3037 , - 348 , - 1339 , - 2810 , - 1561 , - 792 , - 503 , - 694 , - 1365 , - 2516 , - 947 , - 3058 , - 2449 , - 2320 , - 2671 , - 302 , - 1613 , - 204 , - 2475 , - 2026 , - 2057 , - 2568 , - 359 , - 1830 , - 581 , - 3012 , - 2723 , - 2914 , - 385 , - 1536 , - 3167 , - 2078 , - 1469 , - 1340 , - 1691 , - 2522 , - 633 , - 2424 , - 1495 , - 1046 , - 1077 , - 1588 , - 2579 , - 850 , - 2801 , - 2032 , - 1743 , - 1934 , - 2605 , - 556 , - 2187 , - 1098 , - 489 , - 360 , - 711 , - 1542 , - 2853 , - 1444 , - 515 , - 66 , - 97 , - 608 , - 1599 , - 3070 , - 1821 , - 1052 , - 763 , - 954 , - 1625 , - 2776 , - 1207 , - 118 , - 2709 , - 2580 , - 2931 , - 562 , - 1873 , - 464 , - 2735 , - 2286 , - 2317 , - 2828 , - 619 , - 2090 , - 841 , - 72 , - 2983 , - 3174 , - 645 , - 1796 , - 227 , - 2338 , - 1729 , - 1600 , - 1951 , - 2782 , - 893 , - 2684 , - 1755 , - 1306 , - 1337 , - 1848 , - 2839 , - 1110 , - 3061 , - 2292 , - 2003 , - 2194 , - 2865 , - 816 , - 2447 , - 1358 , - 749 , - 620 , - 971 , - 1802 , - 3113 , - 1704 , - 775 , - 326 , - 357 , - 868 , - 1859 , - 130 , - 2081 , - 1312 , - 1023 , - 1214 , - 1885 , - 3036 , - 1467 , - 378 , - 2969 , - 2840 , - 3191 , - 822 , - 2133 , - 724 , - 2995 , - 2546 , - 2577 , - 3088 , - 879 , - 2350 , - 1101 , - 332 , - 43 , - 234 , - 905 , - 2056 , - 487 , - 2598 , - 1989 , - 1860 , - 2211 , - 3042 , - 1153 , - 2944 , - 2015 , - 1566 , - 1597 , - 2108 , - 3099 , - 1370 , - 121 , - 2552 , - 2263 , - 2454 , - 3125 , - 1076 , - 2707 , - 1618 , - 1009 , - 880 , - 1231 , - 2062 , - 173 , - 1964 , - 1035 , - 586 , - 617 , - 1128 , - 2119 , - 390 , - 2341 , - 1572 , - 1283 , - 1474 , - 2145 , - 96 , - 1727 , - 638 , - 29 , - 3100 , - 251 , - 1082 , - 2393 , - 984 , - 55 , - 2806 , - 2837 , - 148 , - 1139 , - 2610 , - 1361 , - 592 , - 303 , - 494 , - 1165 , - 2316 , - 747 , - 2858 , - 2249 , - 2120 , - 2471 , - 102 , - 1413 , - 4 , - 2275 , - 1826 , - 1857 , - 2368 , - 159 , - 1630 , - 381 , - 2812 , - 2523 , - 2714 , - 185 , - 1336 , - 2967 , - 1878 , - 1269 , - 1140 , - 1491 , - 2322 , - 433 , - 2224 , - 1295 , - 846 , - 877 , - 1388 , - 2379 , - 650 , - 2601 , - 1832 , - 1543 , - 1734 , - 2405 , - 356 , - 1987 , - 898 , - 289 , - 160 , - 511 , - 1342 , - 2653 , - 1244 , - 315 , - 3066 , - 3097 , - 408 , - 1399 , - 2870 , - 1621 , - 852 , - 563 , - 754 , - 1425 , - 2576 , - 1007 , - 3118 , - 2509 , - 2380 , - 2731 , - 362 , - 1673 , - 264 , - 2535 , - 2086 , - 2117 , - 2628 , - 419 , - 1890 , - 641 , - 3072 , - 2783 , - 2974 , - 445 , - 1596 , - 27 , - 2138 , - 1529 , - 1400 , - 1751 , - 2582 , - 693 , - 2484 , - 1555 , - 1106 , - 1137 , - 1648 , - 2639 , - 910 , - 2861 , - 2092 , - 1803 , - 1994 , - 2665 , - 616 , - 2247 , - 1158 , - 549 , - 420 , - 771 , - 1602 , - 2913 , - 1504 , - 575 , - 126 , - 157 , - 668 , - 1659 , - 3130 , - 1881 , - 1112 , - 823 , - 1014 , - 1685 , - 2836 , - 1267 , - 178 , - 2769 , - 2640 , - 2991 , - 622 , - 1933 , - 524 , - 2795 , - 2346 , - 2377 , - 2888 , - 679 , - 2150 , - 901 , - 132 , - 3043 , - 34 , - 705 , - 1856 , - 287 , - 2398 , - 1789 , - 1660 , - 2011 , - 2842 , - 953 , - 2744 , - 1815 , - 1366 , - 1397 , - 1908 , - 2899 , - 1170 , - 3121 , - 2352 , - 2063 , - 2254 , - 2925 , - 876 , - 2507 , - 1418 , - 809 , - 680 , - 1031 , - 1862 , - 3173 , - 1764 , - 835 , - 386 , - 417 , - 928 , - 1919 , - 190 , - 2141 , - 1372 , - 1083 , - 1274 , - 1945 , - 3096 , - 1527 , - 438 , - 3029 , - 2900 , - 51 , - 882 , - 2193 , - 784 , - 3055 , - 2606 , - 2637 , - 3148 , - 939 , - 2410 , - 1161 , - 392 , - 103 , - 294 , - 965 , - 2116 , - 547 , - 2658 , - 2049 , - 1920 , - 2271 , - 3102 , - 1213 , - 3004 , - 2075 , - 1626 , - 1657 , - 2168 , - 3159 , - 1430 , - 181 , - 2612 , - 2323 , - 2514 , - 3185 , - 1136 , - 2767 , - 1678 , - 1069 , - 940 , - 1291 , - 2122 , - 233 , - 2024 , - 1095 , - 646 , - 677 , - 1188 , - 2179 , - 450 , - 2401 , - 1632 , - 1343 , - 1534 , - 2205 , - 156 , - 1787 , - 698 , - 89 , - 3160 , - 311 , - 1142 , - 2453 , - 1044 , - 115 , - 2866 , - 2897 , - 208 , - 1199 , - 2670 , - 1421 , - 652 , - 363 , - 554 , - 1225 , - 2376 , - 807 , - 2918 , - 2309 , - 2180 , - 2531 , - 162 , - 1473 , - 64 , - 2335 , - 1886 , - 1917 , - 2428 , - 219 , - 1690 , - 441 , - 2872 , - 2583 , - 2774 , - 245 , - 1396 , - 3027 , - 1938 , - 1329 , - 1200 , - 1551 , - 2382 , - 493 , - 2284 , - 1355 , - 906 , - 937 , - 1448 , - 2439 , - 710 , - 2661 , - 1892 , - 1603 , - 1794 , - 2465 , - 416 , - 2047 , - 958 , - 349 , - 220 , - 571 , - 1402 , - 2713 , - 1304 , - 375 , - 3126 , - 3157 , - 468 , - 1459 , - 2930 , - 1681 , - 912 , - 623 , - 814 , - 1485 , - 2636 , - 1067 , - 3178 , - 2569 , - 2440 , - 2791 , - 422 , - 1733 , - 324 , - 2595 , - 2146 , - 2177 , - 2688 , - 479 , - 1950 , - 701 , - 3132 , - 2843 , - 3034 , - 505 , - 1656 , - 87 , - 2198 , - 1589 , - 1460 , - 1811 , - 2642 , - 753 , - 2544 , - 1615 , - 1166 , - 1197 , - 1708 , - 2699 , - 970 , - 2921 , - 2152 , - 1863 , - 2054 , - 2725 , - 676 , - 2307 , - 1218 , - 609 , - 480 , - 831 , - 1662 , - 2973 , - 1564 , - 635 , - 186 , - 217 , - 728 , - 1719 , - 3190 , - 1941 , - 1172 , - 883 , - 1074 , - 1745 , - 2896 , - 1327 , - 238 , - 2829 , - 2700 , - 3051 , - 682 , - 1993 , - 584 , - 2855 , - 2406 , - 2437 , - 2948 , - 739 , - 2210 , - 961 , - 192 , - 3103 , - 94 , - 765 , - 1916 , - 347 , - 2458 , - 1849 , - 1720 , - 2071 , - 2902 , - 1013 , - 2804 , - 1875 , - 1426 , - 1457 , - 1968 , - 2959 , - 1230 , - 3181 , - 2412 , - 2123 , - 2314 , - 2985 , - 936 , - 2567 , - 1478 , - 869 , - 740 , - 1091 , - 1922 , - 33 , - 1824 , - 895 , - 446 , - 477 , - 988 , - 1979 , - 250 , - 2201 , - 1432 , - 1143 , - 1334 , - 2005 , - 3156 , - 1587 , - 498 , - 3089 , - 2960 , - 111 , - 942 , - 2253 , - 844 , - 3115 , - 2666 , - 2697 , - 8 , - 999 , - 2470 , - 1221 , - 452 , - 163 , - 354 , - 1025 , - 2176 , - 607 , - 2718 , - 2109 , - 1980 , - 2331 , - 3162 , - 1273 , - 3064 , - 2135 , - 1686 , - 1717 , - 2228 , - 19 , - 1490 , - 241 , - 2672 , - 2383 , - 2574 , - 45 , - 1196 , - 2827 , - 1738 , - 1129 , - 1000 , - 1351 , - 2182 , - 293 , - 2084 , - 1155 , - 706 , - 737 , - 1248 , - 2239 , - 510 , - 2461 , - 1692 , - 1403 , - 1594 , - 2265 , - 216 , - 1847 , - 758 , - 149 , - 20 , - 371 , - 1202 , - 2513 , - 1104 , - 175 , - 2926 , - 2957 , - 268 , - 1259 , - 2730 , - 1481 , - 712 , - 423 , - 614 , - 1285 , - 2436 , - 867 , - 2978 , - 2369 , - 2240 , - 2591 , - 222 , - 1533 , - 124 , - 2395 , - 1946 , - 1977 , - 2488 , - 279 , - 1750 , - 501 , - 2932 , - 2643 , - 2834 , - 305 , - 1456 , - 3087 , - 1998 , - 1389 , - 1260 , - 1611 , - 2442 , - 553 , - 2344 , - 1415 , - 966 , - 997 , - 1508 , - 2499 , - 770 , - 2721 , - 1952 , - 1663 , - 1854 , - 2525 , - 476 , - 2107 , - 1018 , - 409 , - 280 , - 631 , - 1462 , - 2773 , - 1364 , - 435 , - 3186 , - 17 , - 528 , - 1519 , - 2990 , - 1741 , - 972 , - 683 , - 874 , - 1545 , - 2696 , - 1127 , - 38 , - 2629 , - 2500 , - 2851 , - 482 , - 1793 , - 384 , - 2655 , - 2206 , - 2237 , - 2748 , - 539 , - 2010 , - 761 , - 3192 , - 2903 , - 3094 , - 565 , - 1716 , - 147 , - 2258 , - 1649 , - 1520 , - 1871 , - 2702 , - 813 , - 2604 , - 1675 , - 1226 , - 1257 , - 1768 , - 2759 , - 1030 , - 2981 , - 2212 , - 1923 , - 2114 , - 2785 , - 736 , - 2367 , - 1278 , - 669 , - 540 , - 891 , - 1722 , - 3033 , - 1624 , - 695 , - 246 , - 277 , - 788 , - 1779 , - 50 , - 2001 , - 1232 , - 943 , - 1134 , - 1805 , - 2956 , - 1387 , - 298 , - 2889 , - 2760 , - 3111 , - 742 , - 2053 , - 644 , - 2915 , - 2466 , - 2497 , - 3008 , - 799 , - 2270 , - 1021 , - 252 , - 3163 , - 154 , - 825 , - 1976 , - 407 , - 2518 , - 1909 , - 1780 , - 2131 , - 2962 , - 1073 , - 2864 , - 1935 , - 1486 , - 1517 , - 2028 , - 3019 , - 1290 , - 41 , - 2472 , - 2183 , - 2374 , - 3045 , - 996 , - 2627 , - 1538 , - 929 , - 800 , - 1151 , - 1982 , - 93 , - 1884 , - 955 , - 506 , - 537 , - 1048 , - 2039 , - 310 , - 2261 , - 1492 , - 1203 , - 1394 , - 2065 , - 16 , - 1647 , - 558 , - 3149 , - 3020 , - 171 , - 1002 , - 2313 , - 904 , - 3175 , - 2726 , - 2757 , - 68 , - 1059 , - 2530 , - 1281 , - 512 , - 223 , - 414 , - 1085 , - 2236 , - 667 , - 2778 , - 2169 , - 2040 , - 2391 , - 22 , - 1333 , - 3124 , - 2195 , - 1746 , - 1777 , - 2288 , - 79 , - 1550 , - 301 , - 2732 , - 2443 , - 2634 , - 105 , - 1256 , - 2887 , - 1798 , - 1189 , - 1060 , - 1411 , - 2242 , - 353 , - 2144 , - 1215 , - 766 , - 797 , - 1308 , - 2299 , - 570 , - 2521 , - 1752 , - 1463 , - 1654 , - 2325 , - 276 , - 1907 , - 818 , - 209 , - 80 , - 431 , - 1262 , - 2573 , - 1164 , - 235 , - 2986 , - 3017 , - 328 , - 1319 , - 2790 , - 1541 , - 772 , - 483 , - 674 , - 1345 , - 2496 , - 927 , - 3038 , - 2429 , - 2300 , - 2651 , - 282 , - 1593 , - 184 , - 2455 , - 2006 , - 2037 , - 2548 , - 339 , - 1810 , - 561 , - 2992 , - 2703 , - 2894 , - 365 , - 1516 , - 3147 , - 2058 , - 1449 , - 1320 , - 1671 , - 2502 , - 613 , - 2404 , - 1475 , - 1026 , - 1057 , - 1568 , - 2559 , - 830 , - 2781 , - 2012 , - 1723 , - 1914 , - 2585 , - 536 , - 2167 , - 1078 , - 469 , - 340 , - 691 , - 1522 , - 2833 , - 1424 , - 495 , - 46 , - 77 , - 588 , - 1579 , - 3050 , - 1801 , - 1032 , - 743 , - 934 , - 1605 , - 2756 , - 1187 , - 98 , - 2689 , - 2560 , - 2911 , - 542 , - 1853 , - 444 , - 2715 , - 2266 , - 2297 , - 2808 , - 599 , - 2070 , - 821 , - 52 , - 2963 , - 3154 , - 625 , - 1776 , - 207 , - 2318 , - 1709 , - 1580 , - 1931 , - 2762 , - 873 , - 2664 , - 1735 , - 1286 , - 1317 , - 1828 , - 2819 , - 1090 , - 3041 , - 2272 , - 1983 , - 2174 , - 2845 , - 796 , - 2427 , - 1338 , - 729 , - 600 , - 951 , - 1782 , - 3093 , - 1684 , - 755 , - 306 , - 337 , - 848 , - 1839 , - 110 , - 2061 , - 1292 , - 1003 , - 1194 , - 1865 , - 3016 , - 1447 , - 358 , - 2949 , - 2820 , - 3171 , - 802 , - 2113 , - 704 , - 2975 , - 2526 , - 2557 , - 3068 , - 859 , - 2330 , - 1081 , - 312 , - 23 , - 214 , - 885 , - 2036 , - 467 , - 2578 , - 1969 , - 1840 , - 2191 , - 3022 , - 1133 , - 2924 , - 1995 , - 1546 , - 1577 , - 2088 , - 3079 , - 1350 , - 101 , - 2532 , - 2243 , - 2434 , - 3105 , - 1056 , - 2687 , - 1598 , - 989 , - 860 , - 1211 , - 2042 , - 153 , - 1944 , - 1015 , - 566 , - 597 , - 1108 , - 2099 , - 370 , - 2321 , - 1552 , - 1263 , - 1454 , - 2125 , - 76 , - 1707 , - 618 , - 9 , - 3080 , - 231 , - 1062 , - 2373 , - 964 , - 35 , - 2786 , - 2817 , - 128 , - 1119 , - 2590 , - 1341 , - 572 , - 283 , - 474 , - 1145 , - 2296 , - 727 , - 2838 , - 2229 , - 2100 , - 2451 , - 82 , - 1393 , - 3184 , - 2255 , - 1806 , - 1837 , - 2348 , - 139 , - 1610 , - 361 , - 2792 , - 2503 , - 2694 , - 165 , - 1316 , - 2947 , - 1858 , - 1249 , - 1120 , - 1471 , - 2302 , - 413 , - 2204 , - 1275 , - 826 , - 857 , - 1368 , - 2359 , - 630 , - 2581 , - 1812 , - 1523 , - 1714 , - 2385 , - 336 , - 1967 , - 878 , - 269 , - 140 , - 491 , - 1322 , - 2633 , - 1224 , - 295 , - 3046 , - 3077 , - 388 , - 1379 , - 2850 , - 1601 , - 832 , - 543 , - 734 , - 1405 , - 2556 , - 987 , - 3098 , - 2489 , - 2360 , - 2711 , - 342 , - 1653 , - 244 , - 2515 , - 2066 , - 2097 , - 2608 , - 399 , - 1870 , - 621 , - 3052 , - 2763 , - 2954 , - 425 , - 1576 , - 7 , - 2118 , - 1509 , - 1380 , - 1731 , - 2562 , - 673 , - 2464 , - 1535 , - 1086 , - 1117 , - 1628 , - 2619 , - 890 , - 2841 , - 2072 , - 1783 , - 1974 , - 2645 , - 596 , - 2227 , - 1138 , - 529 , - 400 , - 751 , - 1582 , - 2893 , - 1484 , - 555 , - 106 , - 137 , - 648 , - 1639 , - 3110 , - 1861 , - 1092 , - 803 , - 994 , - 1665 , - 2816 , - 1247 , - 158 , - 2749 , - 2620 , - 2971 , - 602 , - 1913 , - 504 , - 2775 , - 2326 , - 2357 , - 2868 , - 659 , - 2130 , - 881 , - 112 , - 3023 , - 14 , - 685 , - 1836 , - 267 , - 2378 , - 1769 , - 1640 , - 1991 , - 2822 , - 933 , - 2724 , - 1795 , - 1346 , - 1377 , - 1888 , - 2879 , - 1150 , - 3101 , - 2332 , - 2043 , - 2234 , - 2905 , - 856 , - 2487 , - 1398 , - 789 , - 660 , - 1011 , - 1842 , - 3153 , - 1744 , - 815 , - 366 , - 397 , - 908 , - 1899 , - 170 , - 2121 , - 1352 , - 1063 , - 1254 , - 1925 , - 3076 , - 1507 , - 418 , - 3009 , - 2880 , - 31 , - 862 , - 2173 , - 764 , - 3035 , - 2586 , - 2617 , - 3128 , - 919 , - 2390 , - 1141 , - 372 , - 83 , - 274 , - 945 , - 2096 , - 527 , - 2638 , - 2029 , - 1900 , - 2251 , - 3082 , - 1193 , - 2984 , - 2055 , - 1606 , - 1637 , - 2148 , - 3139 , - 1410 , - 161 , - 2592 , - 2303 , - 2494 , - 3165 , - 1116 , - 2747 , - 1658 , - 1049 , - 920 , - 1271 , - 2102 , - 213 , - 2004 , - 1075 , - 626 , - 657 , - 1168 , - 2159 , - 430 , - 2381 , - 1612 , - 1323 , - 1514 , - 2185 , - 136 , - 1767 , - 678 , - 69 , - 3140 , - 291 , - 1122 , - 2433 , - 1024 , - 95 , - 2846 , - 2877 , - 188 , - 1179 , - 2650 , - 1401 , - 632 , - 343 , - 534 , - 1205 , - 2356 , - 787 , - 2898 , - 2289 , - 2160 , - 2511 , - 142 , - 1453 , - 44 , - 2315 , - 1866 , - 1897 , - 2408 , - 199 , - 1670 , - 421 , - 2852 , - 2563 , - 2754 , - 225 , - 1376 , - 3007 , - 1918 , - 1309 , - 1180 , - 1531 , - 2362 , - 473 , - 2264 , - 1335 , - 886 , - 917 , - 1428 , - 2419 , - 690 , - 2641 , - 1872 , - 1583 , - 1774 , - 2445 , - 396 , - 2027 , - 938 , - 329 , - 200 , - 551 , - 1382 , - 2693 , - 1284 , - 355 , - 3106 , - 3137 , - 448 , - 1439 , - 2910 , - 1661 , - 892 , - 603 , - 794 , - 1465 , - 2616 , - 1047 , - 3158 , - 2549 , - 2420 , - 2771 , - 402 , - 1713 , - 304 , - 2575 , - 2126 , - 2157 , - 2668 , - 459 , - 1930 , - 681 , - 3112 , - 2823 , - 3014 , - 485 , - 1636 , - 67 , - 2178 , - 1569 , - 1440 , - 1791 , - 2622 , - 733 , - 2524 , - 1595 , - 1146 , - 1177 , - 1688 , - 2679 , - 950 , - 2901 , - 2132 , - 1843 , - 2034 , - 2705 , - 656 , - 2287 , - 1198 , - 589 , - 460 , - 811 , - 1642 , - 2953 , - 1544 , - 615 , - 166 , - 197 , - 708 , - 1699 , - 3170 , - 1921 , - 1152 , - 863 , - 1054 , - 1725 , - 2876 , - 1307 , - 218 , - 2809 , - 2680 , - 3031 , - 662 , - 1973 , - 564 , - 2835 , - 2386 , - 2417 , - 2928 , - 719 , - 2190 , - 941 , - 172 , - 3083 , - 74 , - 745 , - 1896 , - 327 , - 2438 , - 1829 , - 1700 , - 2051 , - 2882 , - 993 , - 2784 , - 1855 , - 1406 , - 1437 , - 1948 , - 2939 , - 1210 , - 3161 , - 2392 , - 2103 , - 2294 , - 2965 , - 916 , - 2547 , - 1458 , - 849 , - 720 , - 1071 , - 1902 , - 13 , - 1804 , - 875 , - 426 , - 457 , - 968 , - 1959 , - 230 , - 2181 , - 1412 , - 1123 , - 1314 , - 1985 , - 3136 , - 1567 , - 478 , - 3069 , - 2940 , - 91 , - 922 , - 2233 , - 824 , - 3095 , - 2646 , - 2677 , - 3188 , - 979 , - 2450 , - 1201 , - 432 , - 143 , - 334 , - 1005 , - 2156 , - 587 , - 2698 , - 2089 , - 1960 , - 2311 , - 3142 , - 1253 , - 3044 , - 2115 , - 1666 , - 1697 , - 2208 , - 3199 , - 1470 , - 221 , - 2652 , - 2363 , - 2554 , - 25 , - 1176 , - 2807 , - 1718 , - 1109 , - 980 , - 1331 , - 2162 , - 273 , - 2064 , - 1135 , - 686 , - 717 , - 1228 , - 2219 , - 490 , - 2441 , - 1672 , - 1383 , - 1574 , - 2245 , - 196 , - 1827 , - 738 , - 129 , - 0 , - 647 , - 1702 , - 3165 , - 1772 , - 787 , - 210 , - 41 , - 280 , - 927 , - 1982 , - 181 , - 2052 , - 1067 , - 490 , - 321 , - 560 , - 1207 , - 2262 , - 461 , - 2332 , - 1347 , - 770 , - 601 , - 840 , - 1487 , - 2542 , - 741 , - 2612 , - 1627 , - 1050 , - 881 , - 1120 , - 1767 , - 2822 , - 1021 , - 2892 , - 1907 , - 1330 , - 1161 , - 1400 , - 2047 , - 3102 , - 1301 , - 3172 , - 2187 , - 1610 , - 1441 , - 1680 , - 2327 , - 118 , - 1581 , - 188 , - 2467 , - 1890 , - 1721 , - 1960 , - 2607 , - 398 , - 1861 , - 468 , - 2747 , - 2170 , - 2001 , - 2240 , - 2887 , - 678 , - 2141 , - 748 , - 3027 , - 2450 , - 2281 , - 2520 , - 3167 , - 958 , - 2421 , - 1028 , - 43 , - 2730 , - 2561 , - 2800 , - 183 , - 1238 , - 2701 , - 1308 , - 323 , - 3010 , - 2841 , - 3080 , - 463 , - 1518 , - 2981 , - 1588 , - 603 , - 26 , - 3121 , - 96 , - 743 , - 1798 , - 3261 , - 1868 , - 883 , - 306 , - 137 , - 376 , - 1023 , - 2078 , - 277 , - 2148 , - 1163 , - 586 , - 417 , - 656 , - 1303 , - 2358 , - 557 , - 2428 , - 1443 , - 866 , - 697 , - 936 , - 1583 , - 2638 , - 837 , - 2708 , - 1723 , - 1146 , - 977 , - 1216 , - 1863 , - 2918 , - 1117 , - 2988 , - 2003 , - 1426 , - 1257 , - 1496 , - 2143 , - 3198 , - 1397 , - 4 , - 2283 , - 1706 , - 1537 , - 1776 , - 2423 , - 214 , - 1677 , - 284 , - 2563 , - 1986 , - 1817 , - 2056 , - 2703 , - 494 , - 1957 , - 564 , - 2843 , - 2266 , - 2097 , - 2336 , - 2983 , - 774 , - 2237 , - 844 , - 3123 , - 2546 , - 2377 , - 2616 , - 3263 , - 1054 , - 2517 , - 1124 , - 139 , - 2826 , - 2657 , - 2896 , - 279 , - 1334 , - 2797 , - 1404 , - 419 , - 3106 , - 2937 , - 3176 , - 559 , - 1614 , - 3077 , - 1684 , - 699 , - 122 , - 3217 , - 192 , - 839 , - 1894 , - 93 , - 1964 , - 979 , - 402 , - 233 , - 472 , - 1119 , - 2174 , - 373 , - 2244 , - 1259 , - 682 , - 513 , - 752 , - 1399 , - 2454 , - 653 , - 2524 , - 1539 , - 962 , - 793 , - 1032 , - 1679 , - 2734 , - 933 , - 2804 , - 1819 , - 1242 , - 1073 , - 1312 , - 1959 , - 3014 , - 1213 , - 3084 , - 2099 , - 1522 , - 1353 , - 1592 , - 2239 , - 30 , - 1493 , - 100 , - 2379 , - 1802 , - 1633 , - 1872 , - 2519 , - 310 , - 1773 , - 380 , - 2659 , - 2082 , - 1913 , - 2152 , - 2799 , - 590 , - 2053 , - 660 , - 2939 , - 2362 , - 2193 , - 2432 , - 3079 , - 870 , - 2333 , - 940 , - 3219 , - 2642 , - 2473 , - 2712 , - 95 , - 1150 , - 2613 , - 1220 , - 235 , - 2922 , - 2753 , - 2992 , - 375 , - 1430 , - 2893 , - 1500 , - 515 , - 3202 , - 3033 , - 8 , - 655 , - 1710 , - 3173 , - 1780 , - 795 , - 218 , - 49 , - 288 , - 935 , - 1990 , - 189 , - 2060 , - 1075 , - 498 , - 329 , - 568 , - 1215 , - 2270 , - 469 , - 2340 , - 1355 , - 778 , - 609 , - 848 , - 1495 , - 2550 , - 749 , - 2620 , - 1635 , - 1058 , - 889 , - 1128 , - 1775 , - 2830 , - 1029 , - 2900 , - 1915 , - 1338 , - 1169 , - 1408 , - 2055 , - 3110 , - 1309 , - 3180 , - 2195 , - 1618 , - 1449 , - 1688 , - 2335 , - 126 , - 1589 , - 196 , - 2475 , - 1898 , - 1729 , - 1968 , - 2615 , - 406 , - 1869 , - 476 , - 2755 , - 2178 , - 2009 , - 2248 , - 2895 , - 686 , - 2149 , - 756 , - 3035 , - 2458 , - 2289 , - 2528 , - 3175 , - 966 , - 2429 , - 1036 , - 51 , - 2738 , - 2569 , - 2808 , - 191 , - 1246 , - 2709 , - 1316 , - 331 , - 3018 , - 2849 , - 3088 , - 471 , - 1526 , - 2989 , - 1596 , - 611 , - 34 , - 3129 , - 104 , - 751 , - 1806 , - 5 , - 1876 , - 891 , - 314 , - 145 , - 384 , - 1031 , - 2086 , - 285 , - 2156 , - 1171 , - 594 , - 425 , - 664 , - 1311 , - 2366 , - 565 , - 2436 , - 1451 , - 874 , - 705 , - 944 , - 1591 , - 2646 , - 845 , - 2716 , - 1731 , - 1154 , - 985 , - 1224 , - 1871 , - 2926 , - 1125 , - 2996 , - 2011 , - 1434 , - 1265 , - 1504 , - 2151 , - 3206 , - 1405 , - 12 , - 2291 , - 1714 , - 1545 , - 1784 , - 2431 , - 222 , - 1685 , - 292 , - 2571 , - 1994 , - 1825 , - 2064 , - 2711 , - 502 , - 1965 , - 572 , - 2851 , - 2274 , - 2105 , - 2344 , - 2991 , - 782 , - 2245 , - 852 , - 3131 , - 2554 , - 2385 , - 2624 , - 7 , - 1062 , - 2525 , - 1132 , - 147 , - 2834 , - 2665 , - 2904 , - 287 , - 1342 , - 2805 , - 1412 , - 427 , - 3114 , - 2945 , - 3184 , - 567 , - 1622 , - 3085 , - 1692 , - 707 , - 130 , - 3225 , - 200 , - 847 , - 1902 , - 101 , - 1972 , - 987 , - 410 , - 241 , - 480 , - 1127 , - 2182 , - 381 , - 2252 , - 1267 , - 690 , - 521 , - 760 , - 1407 , - 2462 , - 661 , - 2532 , - 1547 , - 970 , - 801 , - 1040 , - 1687 , - 2742 , - 941 , - 2812 , - 1827 , - 1250 , - 1081 , - 1320 , - 1967 , - 3022 , - 1221 , - 3092 , - 2107 , - 1530 , - 1361 , - 1600 , - 2247 , - 38 , - 1501 , - 108 , - 2387 , - 1810 , - 1641 , - 1880 , - 2527 , - 318 , - 1781 , - 388 , - 2667 , - 2090 , - 1921 , - 2160 , - 2807 , - 598 , - 2061 , - 668 , - 2947 , - 2370 , - 2201 , - 2440 , - 3087 , - 878 , - 2341 , - 948 , - 3227 , - 2650 , - 2481 , - 2720 , - 103 , - 1158 , - 2621 , - 1228 , - 243 , - 2930 , - 2761 , - 3000 , - 383 , - 1438 , - 2901 , - 1508 , - 523 , - 3210 , - 3041 , - 16 , - 663 , - 1718 , - 3181 , - 1788 , - 803 , - 226 , - 57 , - 296 , - 943 , - 1998 , - 197 , - 2068 , - 1083 , - 506 , - 337 , - 576 , - 1223 , - 2278 , - 477 , - 2348 , - 1363 , - 786 , - 617 , - 856 , - 1503 , - 2558 , - 757 , - 2628 , - 1643 , - 1066 , - 897 , - 1136 , - 1783 , - 2838 , - 1037 , - 2908 , - 1923 , - 1346 , - 1177 , - 1416 , - 2063 , - 3118 , - 1317 , - 3188 , - 2203 , - 1626 , - 1457 , - 1696 , - 2343 , - 134 , - 1597 , - 204 , - 2483 , - 1906 , - 1737 , - 1976 , - 2623 , - 414 , - 1877 , - 484 , - 2763 , - 2186 , - 2017 , - 2256 , - 2903 , - 694 , - 2157 , - 764 , - 3043 , - 2466 , - 2297 , - 2536 , - 3183 , - 974 , - 2437 , - 1044 , - 59 , - 2746 , - 2577 , - 2816 , - 199 , - 1254 , - 2717 , - 1324 , - 339 , - 3026 , - 2857 , - 3096 , - 479 , - 1534 , - 2997 , - 1604 , - 619 , - 42 , - 3137 , - 112 , - 759 , - 1814 , - 13 , - 1884 , - 899 , - 322 , - 153 , - 392 , - 1039 , - 2094 , - 293 , - 2164 , - 1179 , - 602 , - 433 , - 672 , - 1319 , - 2374 , - 573 , - 2444 , - 1459 , - 882 , - 713 , - 952 , - 1599 , - 2654 , - 853 , - 2724 , - 1739 , - 1162 , - 993 , - 1232 , - 1879 , - 2934 , - 1133 , - 3004 , - 2019 , - 1442 , - 1273 , - 1512 , - 2159 , - 3214 , - 1413 , - 20 , - 2299 , - 1722 , - 1553 , - 1792 , - 2439 , - 230 , - 1693 , - 300 , - 2579 , - 2002 , - 1833 , - 2072 , - 2719 , - 510 , - 1973 , - 580 , - 2859 , - 2282 , - 2113 , - 2352 , - 2999 , - 790 , - 2253 , - 860 , - 3139 , - 2562 , - 2393 , - 2632 , - 15 , - 1070 , - 2533 , - 1140 , - 155 , - 2842 , - 2673 , - 2912 , - 295 , - 1350 , - 2813 , - 1420 , - 435 , - 3122 , - 2953 , - 3192 , - 575 , - 1630 , - 3093 , - 1700 , - 715 , - 138 , - 3233 , - 208 , - 855 , - 1910 , - 109 , - 1980 , - 995 , - 418 , - 249 , - 488 , - 1135 , - 2190 , - 389 , - 2260 , - 1275 , - 698 , - 529 , - 768 , - 1415 , - 2470 , - 669 , - 2540 , - 1555 , - 978 , - 809 , - 1048 , - 1695 , - 2750 , - 949 , - 2820 , - 1835 , - 1258 , - 1089 , - 1328 , - 1975 , - 3030 , - 1229 , - 3100 , - 2115 , - 1538 , - 1369 , - 1608 , - 2255 , - 46 , - 1509 , - 116 , - 2395 , - 1818 , - 1649 , - 1888 , - 2535 , - 326 , - 1789 , - 396 , - 2675 , - 2098 , - 1929 , - 2168 , - 2815 , - 606 , - 2069 , - 676 , - 2955 , - 2378 , - 2209 , - 2448 , - 3095 , - 886 , - 2349 , - 956 , - 3235 , - 2658 , - 2489 , - 2728 , - 111 , - 1166 , - 2629 , - 1236 , - 251 , - 2938 , - 2769 , - 3008 , - 391 , - 1446 , - 2909 , - 1516 , - 531 , - 3218 , - 3049 , - 24 , - 671 , - 1726 , - 3189 , - 1796 , - 811 , - 234 , - 65 , - 304 , - 951 , - 2006 , - 205 , - 2076 , - 1091 , - 514 , - 345 , - 584 , - 1231 , - 2286 , - 485 , - 2356 , - 1371 , - 794 , - 625 , - 864 , - 1511 , - 2566 , - 765 , - 2636 , - 1651 , - 1074 , - 905 , - 1144 , - 1791 , - 2846 , - 1045 , - 2916 , - 1931 , - 1354 , - 1185 , - 1424 , - 2071 , - 3126 , - 1325 , - 3196 , - 2211 , - 1634 , - 1465 , - 1704 , - 2351 , - 142 , - 1605 , - 212 , - 2491 , - 1914 , - 1745 , - 1984 , - 2631 , - 422 , - 1885 , - 492 , - 2771 , - 2194 , - 2025 , - 2264 , - 2911 , - 702 , - 2165 , - 772 , - 3051 , - 2474 , - 2305 , - 2544 , - 3191 , - 982 , - 2445 , - 1052 , - 67 , - 2754 , - 2585 , - 2824 , - 207 , - 1262 , - 2725 , - 1332 , - 347 , - 3034 , - 2865 , - 3104 , - 487 , - 1542 , - 3005 , - 1612 , - 627 , - 50 , - 3145 , - 120 , - 767 , - 1822 , - 21 , - 1892 , - 907 , - 330 , - 161 , - 400 , - 1047 , - 2102 , - 301 , - 2172 , - 1187 , - 610 , - 441 , - 680 , - 1327 , - 2382 , - 581 , - 2452 , - 1467 , - 890 , - 721 , - 960 , - 1607 , - 2662 , - 861 , - 2732 , - 1747 , - 1170 , - 1001 , - 1240 , - 1887 , - 2942 , - 1141 , - 3012 , - 2027 , - 1450 , - 1281 , - 1520 , - 2167 , - 3222 , - 1421 , - 28 , - 2307 , - 1730 , - 1561 , - 1800 , - 2447 , - 238 , - 1701 , - 308 , - 2587 , - 2010 , - 1841 , - 2080 , - 2727 , - 518 , - 1981 , - 588 , - 2867 , - 2290 , - 2121 , - 2360 , - 3007 , - 798 , - 2261 , - 868 , - 3147 , - 2570 , - 2401 , - 2640 , - 23 , - 1078 , - 2541 , - 1148 , - 163 , - 2850 , - 2681 , - 2920 , - 303 , - 1358 , - 2821 , - 1428 , - 443 , - 3130 , - 2961 , - 3200 , - 583 , - 1638 , - 3101 , - 1708 , - 723 , - 146 , - 3241 , - 216 , - 863 , - 1918 , - 117 , - 1988 , - 1003 , - 426 , - 257 , - 496 , - 1143 , - 2198 , - 397 , - 2268 , - 1283 , - 706 , - 537 , - 776 , - 1423 , - 2478 , - 677 , - 2548 , - 1563 , - 986 , - 817 , - 1056 , - 1703 , - 2758 , - 957 , - 2828 , - 1843 , - 1266 , - 1097 , - 1336 , - 1983 , - 3038 , - 1237 , - 3108 , - 2123 , - 1546 , - 1377 , - 1616 , - 2263 , - 54 , - 1517 , - 124 , - 2403 , - 1826 , - 1657 , - 1896 , - 2543 , - 334 , - 1797 , - 404 , - 2683 , - 2106 , - 1937 , - 2176 , - 2823 , - 614 , - 2077 , - 684 , - 2963 , - 2386 , - 2217 , - 2456 , - 3103 , - 894 , - 2357 , - 964 , - 3243 , - 2666 , - 2497 , - 2736 , - 119 , - 1174 , - 2637 , - 1244 , - 259 , - 2946 , - 2777 , - 3016 , - 399 , - 1454 , - 2917 , - 1524 , - 539 , - 3226 , - 3057 , - 32 , - 679 , - 1734 , - 3197 , - 1804 , - 819 , - 242 , - 73 , - 312 , - 959 , - 2014 , - 213 , - 2084 , - 1099 , - 522 , - 353 , - 592 , - 1239 , - 2294 , - 493 , - 2364 , - 1379 , - 802 , - 633 , - 872 , - 1519 , - 2574 , - 773 , - 2644 , - 1659 , - 1082 , - 913 , - 1152 , - 1799 , - 2854 , - 1053 , - 2924 , - 1939 , - 1362 , - 1193 , - 1432 , - 2079 , - 3134 , - 1333 , - 3204 , - 2219 , - 1642 , - 1473 , - 1712 , - 2359 , - 150 , - 1613 , - 220 , - 2499 , - 1922 , - 1753 , - 1992 , - 2639 , - 430 , - 1893 , - 500 , - 2779 , - 2202 , - 2033 , - 2272 , - 2919 , - 710 , - 2173 , - 780 , - 3059 , - 2482 , - 2313 , - 2552 , - 3199 , - 990 , - 2453 , - 1060 , - 75 , - 2762 , - 2593 , - 2832 , - 215 , - 1270 , - 2733 , - 1340 , - 355 , - 3042 , - 2873 , - 3112 , - 495 , - 1550 , - 3013 , - 1620 , - 635 , - 58 , - 3153 , - 128 , - 775 , - 1830 , - 29 , - 1900 , - 915 , - 338 , - 169 , - 408 , - 1055 , - 2110 , - 309 , - 2180 , - 1195 , - 618 , - 449 , - 688 , - 1335 , - 2390 , - 589 , - 2460 , - 1475 , - 898 , - 729 , - 968 , - 1615 , - 2670 , - 869 , - 2740 , - 1755 , - 1178 , - 1009 , - 1248 , - 1895 , - 2950 , - 1149 , - 3020 , - 2035 , - 1458 , - 1289 , - 1528 , - 2175 , - 3230 , - 1429 , - 36 , - 2315 , - 1738 , - 1569 , - 1808 , - 2455 , - 246 , - 1709 , - 316 , - 2595 , - 2018 , - 1849 , - 2088 , - 2735 , - 526 , - 1989 , - 596 , - 2875 , - 2298 , - 2129 , - 2368 , - 3015 , - 806 , - 2269 , - 876 , - 3155 , - 2578 , - 2409 , - 2648 , - 31 , - 1086 , - 2549 , - 1156 , - 171 , - 2858 , - 2689 , - 2928 , - 311 , - 1366 , - 2829 , - 1436 , - 451 , - 3138 , - 2969 , - 3208 , - 591 , - 1646 , - 3109 , - 1716 , - 731 , - 154 , - 3249 , - 224 , - 871 , - 1926 , - 125 , - 1996 , - 1011 , - 434 , - 265 , - 504 , - 1151 , - 2206 , - 405 , - 2276 , - 1291 , - 714 , - 545 , - 784 , - 1431 , - 2486 , - 685 , - 2556 , - 1571 , - 994 , - 825 , - 1064 , - 1711 , - 2766 , - 965 , - 2836 , - 1851 , - 1274 , - 1105 , - 1344 , - 1991 , - 3046 , - 1245 , - 3116 , - 2131 , - 1554 , - 1385 , - 1624 , - 2271 , - 62 , - 1525 , - 132 , - 2411 , - 1834 , - 1665 , - 1904 , - 2551 , - 342 , - 1805 , - 412 , - 2691 , - 2114 , - 1945 , - 2184 , - 2831 , - 622 , - 2085 , - 692 , - 2971 , - 2394 , - 2225 , - 2464 , - 3111 , - 902 , - 2365 , - 972 , - 3251 , - 2674 , - 2505 , - 2744 , - 127 , - 1182 , - 2645 , - 1252 , - 267 , - 2954 , - 2785 , - 3024 , - 407 , - 1462 , - 2925 , - 1532 , - 547 , - 3234 , - 3065 , - 40 , - 687 , - 1742 , - 3205 , - 1812 , - 827 , - 250 , - 81 , - 320 , - 967 , - 2022 , - 221 , - 2092 , - 1107 , - 530 , - 361 , - 600 , - 1247 , - 2302 , - 501 , - 2372 , - 1387 , - 810 , - 641 , - 880 , - 1527 , - 2582 , - 781 , - 2652 , - 1667 , - 1090 , - 921 , - 1160 , - 1807 , - 2862 , - 1061 , - 2932 , - 1947 , - 1370 , - 1201 , - 1440 , - 2087 , - 3142 , - 1341 , - 3212 , - 2227 , - 1650 , - 1481 , - 1720 , - 2367 , - 158 , - 1621 , - 228 , - 2507 , - 1930 , - 1761 , - 2000 , - 2647 , - 438 , - 1901 , - 508 , - 2787 , - 2210 , - 2041 , - 2280 , - 2927 , - 718 , - 2181 , - 788 , - 3067 , - 2490 , - 2321 , - 2560 , - 3207 , - 998 , - 2461 , - 1068 , - 83 , - 2770 , - 2601 , - 2840 , - 223 , - 1278 , - 2741 , - 1348 , - 363 , - 3050 , - 2881 , - 3120 , - 503 , - 1558 , - 3021 , - 1628 , - 643 , - 66 , - 3161 , - 136 , - 783 , - 1838 , - 37 , - 1908 , - 923 , - 346 , - 177 , - 416 , - 1063 , - 2118 , - 317 , - 2188 , - 1203 , - 626 , - 457 , - 696 , - 1343 , - 2398 , - 597 , - 2468 , - 1483 , - 906 , - 737 , - 976 , - 1623 , - 2678 , - 877 , - 2748 , - 1763 , - 1186 , - 1017 , - 1256 , - 1903 , - 2958 , - 1157 , - 3028 , - 2043 , - 1466 , - 1297 , - 1536 , - 2183 , - 3238 , - 1437 , - 44 , - 2323 , - 1746 , - 1577 , - 1816 , - 2463 , - 254 , - 1717 , - 324 , - 2603 , - 2026 , - 1857 , - 2096 , - 2743 , - 534 , - 1997 , - 604 , - 2883 , - 2306 , - 2137 , - 2376 , - 3023 , - 814 , - 2277 , - 884 , - 3163 , - 2586 , - 2417 , - 2656 , - 39 , - 1094 , - 2557 , - 1164 , - 179 , - 2866 , - 2697 , - 2936 , - 319 , - 1374 , - 2837 , - 1444 , - 459 , - 3146 , - 2977 , - 3216 , - 599 , - 1654 , - 3117 , - 1724 , - 739 , - 162 , - 3257 , - 232 , - 879 , - 1934 , - 133 , - 2004 , - 1019 , - 442 , - 273 , - 512 , - 1159 , - 2214 , - 413 , - 2284 , - 1299 , - 722 , - 553 , - 792 , - 1439 , - 2494 , - 693 , - 2564 , - 1579 , - 1002 , - 833 , - 1072 , - 1719 , - 2774 , - 973 , - 2844 , - 1859 , - 1282 , - 1113 , - 1352 , - 1999 , - 3054 , - 1253 , - 3124 , - 2139 , - 1562 , - 1393 , - 1632 , - 2279 , - 70 , - 1533 , - 140 , - 2419 , - 1842 , - 1673 , - 1912 , - 2559 , - 350 , - 1813 , - 420 , - 2699 , - 2122 , - 1953 , - 2192 , - 2839 , - 630 , - 2093 , - 700 , - 2979 , - 2402 , - 2233 , - 2472 , - 3119 , - 910 , - 2373 , - 980 , - 3259 , - 2682 , - 2513 , - 2752 , - 135 , - 1190 , - 2653 , - 1260 , - 275 , - 2962 , - 2793 , - 3032 , - 415 , - 1470 , - 2933 , - 1540 , - 555 , - 3242 , - 3073 , - 48 , - 695 , - 1750 , - 3213 , - 1820 , - 835 , - 258 , - 89 , - 328 , - 975 , - 2030 , - 229 , - 2100 , - 1115 , - 538 , - 369 , - 608 , - 1255 , - 2310 , - 509 , - 2380 , - 1395 , - 818 , - 649 , - 888 , - 1535 , - 2590 , - 789 , - 2660 , - 1675 , - 1098 , - 929 , - 1168 , - 1815 , - 2870 , - 1069 , - 2940 , - 1955 , - 1378 , - 1209 , - 1448 , - 2095 , - 3150 , - 1349 , - 3220 , - 2235 , - 1658 , - 1489 , - 1728 , - 2375 , - 166 , - 1629 , - 236 , - 2515 , - 1938 , - 1769 , - 2008 , - 2655 , - 446 , - 1909 , - 516 , - 2795 , - 2218 , - 2049 , - 2288 , - 2935 , - 726 , - 2189 , - 796 , - 3075 , - 2498 , - 2329 , - 2568 , - 3215 , - 1006 , - 2469 , - 1076 , - 91 , - 2778 , - 2609 , - 2848 , - 231 , - 1286 , - 2749 , - 1356 , - 371 , - 3058 , - 2889 , - 3128 , - 511 , - 1566 , - 3029 , - 1636 , - 651 , - 74 , - 3169 , - 144 , - 791 , - 1846 , - 45 , - 1916 , - 931 , - 354 , - 185 , - 424 , - 1071 , - 2126 , - 325 , - 2196 , - 1211 , - 634 , - 465 , - 704 , - 1351 , - 2406 , - 605 , - 2476 , - 1491 , - 914 , - 745 , - 984 , - 1631 , - 2686 , - 885 , - 2756 , - 1771 , - 1194 , - 1025 , - 1264 , - 1911 , - 2966 , - 1165 , - 3036 , - 2051 , - 1474 , - 1305 , - 1544 , - 2191 , - 3246 , - 1445 , - 52 , - 2331 , - 1754 , - 1585 , - 1824 , - 2471 , - 262 , - 1725 , - 332 , - 2611 , - 2034 , - 1865 , - 2104 , - 2751 , - 542 , - 2005 , - 612 , - 2891 , - 2314 , - 2145 , - 2384 , - 3031 , - 822 , - 2285 , - 892 , - 3171 , - 2594 , - 2425 , - 2664 , - 47 , - 1102 , - 2565 , - 1172 , - 187 , - 2874 , - 2705 , - 2944 , - 327 , - 1382 , - 2845 , - 1452 , - 467 , - 3154 , - 2985 , - 3224 , - 607 , - 1662 , - 3125 , - 1732 , - 747 , - 170 , - 1 , - 240 , - 887 , - 1942 , - 141 , - 2012 , - 1027 , - 450 , - 281 , - 520 , - 1167 , - 2222 , - 421 , - 2292 , - 1307 , - 730 , - 561 , - 800 , - 1447 , - 2502 , - 701 , - 2572 , - 1587 , - 1010 , - 841 , - 1080 , - 1727 , - 2782 , - 981 , - 2852 , - 1867 , - 1290 , - 1121 , - 1360 , - 2007 , - 3062 , - 1261 , - 3132 , - 2147 , - 1570 , - 1401 , - 1640 , - 2287 , - 78 , - 1541 , - 148 , - 2427 , - 1850 , - 1681 , - 1920 , - 2567 , - 358 , - 1821 , - 428 , - 2707 , - 2130 , - 1961 , - 2200 , - 2847 , - 638 , - 2101 , - 708 , - 2987 , - 2410 , - 2241 , - 2480 , - 3127 , - 918 , - 2381 , - 988 , - 3 , - 2690 , - 2521 , - 2760 , - 143 , - 1198 , - 2661 , - 1268 , - 283 , - 2970 , - 2801 , - 3040 , - 423 , - 1478 , - 2941 , - 1548 , - 563 , - 3250 , - 3081 , - 56 , - 703 , - 1758 , - 3221 , - 1828 , - 843 , - 266 , - 97 , - 336 , - 983 , - 2038 , - 237 , - 2108 , - 1123 , - 546 , - 377 , - 616 , - 1263 , - 2318 , - 517 , - 2388 , - 1403 , - 826 , - 657 , - 896 , - 1543 , - 2598 , - 797 , - 2668 , - 1683 , - 1106 , - 937 , - 1176 , - 1823 , - 2878 , - 1077 , - 2948 , - 1963 , - 1386 , - 1217 , - 1456 , - 2103 , - 3158 , - 1357 , - 3228 , - 2243 , - 1666 , - 1497 , - 1736 , - 2383 , - 174 , - 1637 , - 244 , - 2523 , - 1946 , - 1777 , - 2016 , - 2663 , - 454 , - 1917 , - 524 , - 2803 , - 2226 , - 2057 , - 2296 , - 2943 , - 734 , - 2197 , - 804 , - 3083 , - 2506 , - 2337 , - 2576 , - 3223 , - 1014 , - 2477 , - 1084 , - 99 , - 2786 , - 2617 , - 2856 , - 239 , - 1294 , - 2757 , - 1364 , - 379 , - 3066 , - 2897 , - 3136 , - 519 , - 1574 , - 3037 , - 1644 , - 659 , - 82 , - 3177 , - 152 , - 799 , - 1854 , - 53 , - 1924 , - 939 , - 362 , - 193 , - 432 , - 1079 , - 2134 , - 333 , - 2204 , - 1219 , - 642 , - 473 , - 712 , - 1359 , - 2414 , - 613 , - 2484 , - 1499 , - 922 , - 753 , - 992 , - 1639 , - 2694 , - 893 , - 2764 , - 1779 , - 1202 , - 1033 , - 1272 , - 1919 , - 2974 , - 1173 , - 3044 , - 2059 , - 1482 , - 1313 , - 1552 , - 2199 , - 3254 , - 1453 , - 60 , - 2339 , - 1762 , - 1593 , - 1832 , - 2479 , - 270 , - 1733 , - 340 , - 2619 , - 2042 , - 1873 , - 2112 , - 2759 , - 550 , - 2013 , - 620 , - 2899 , - 2322 , - 2153 , - 2392 , - 3039 , - 830 , - 2293 , - 900 , - 3179 , - 2602 , - 2433 , - 2672 , - 55 , - 1110 , - 2573 , - 1180 , - 195 , - 2882 , - 2713 , - 2952 , - 335 , - 1390 , - 2853 , - 1460 , - 475 , - 3162 , - 2993 , - 3232 , - 615 , - 1670 , - 3133 , - 1740 , - 755 , - 178 , - 9 , - 248 , - 895 , - 1950 , - 149 , - 2020 , - 1035 , - 458 , - 289 , - 528 , - 1175 , - 2230 , - 429 , - 2300 , - 1315 , - 738 , - 569 , - 808 , - 1455 , - 2510 , - 709 , - 2580 , - 1595 , - 1018 , - 849 , - 1088 , - 1735 , - 2790 , - 989 , - 2860 , - 1875 , - 1298 , - 1129 , - 1368 , - 2015 , - 3070 , - 1269 , - 3140 , - 2155 , - 1578 , - 1409 , - 1648 , - 2295 , - 86 , - 1549 , - 156 , - 2435 , - 1858 , - 1689 , - 1928 , - 2575 , - 366 , - 1829 , - 436 , - 2715 , - 2138 , - 1969 , - 2208 , - 2855 , - 646 , - 2109 , - 716 , - 2995 , - 2418 , - 2249 , - 2488 , - 3135 , - 926 , - 2389 , - 996 , - 11 , - 2698 , - 2529 , - 2768 , - 151 , - 1206 , - 2669 , - 1276 , - 291 , - 2978 , - 2809 , - 3048 , - 431 , - 1486 , - 2949 , - 1556 , - 571 , - 3258 , - 3089 , - 64 , - 711 , - 1766 , - 3229 , - 1836 , - 851 , - 274 , - 105 , - 344 , - 991 , - 2046 , - 245 , - 2116 , - 1131 , - 554 , - 385 , - 624 , - 1271 , - 2326 , - 525 , - 2396 , - 1411 , - 834 , - 665 , - 904 , - 1551 , - 2606 , - 805 , - 2676 , - 1691 , - 1114 , - 945 , - 1184 , - 1831 , - 2886 , - 1085 , - 2956 , - 1971 , - 1394 , - 1225 , - 1464 , - 2111 , - 3166 , - 1365 , - 3236 , - 2251 , - 1674 , - 1505 , - 1744 , - 2391 , - 182 , - 1645 , - 252 , - 2531 , - 1954 , - 1785 , - 2024 , - 2671 , - 462 , - 1925 , - 532 , - 2811 , - 2234 , - 2065 , - 2304 , - 2951 , - 742 , - 2205 , - 812 , - 3091 , - 2514 , - 2345 , - 2584 , - 3231 , - 1022 , - 2485 , - 1092 , - 107 , - 2794 , - 2625 , - 2864 , - 247 , - 1302 , - 2765 , - 1372 , - 387 , - 3074 , - 2905 , - 3144 , - 527 , - 1582 , - 3045 , - 1652 , - 667 , - 90 , - 3185 , - 160 , - 807 , - 1862 , - 61 , - 1932 , - 947 , - 370 , - 201 , - 440 , - 1087 , - 2142 , - 341 , - 2212 , - 1227 , - 650 , - 481 , - 720 , - 1367 , - 2422 , - 621 , - 2492 , - 1507 , - 930 , - 761 , - 1000 , - 1647 , - 2702 , - 901 , - 2772 , - 1787 , - 1210 , - 1041 , - 1280 , - 1927 , - 2982 , - 1181 , - 3052 , - 2067 , - 1490 , - 1321 , - 1560 , - 2207 , - 3262 , - 1461 , - 68 , - 2347 , - 1770 , - 1601 , - 1840 , - 2487 , - 278 , - 1741 , - 348 , - 2627 , - 2050 , - 1881 , - 2120 , - 2767 , - 558 , - 2021 , - 628 , - 2907 , - 2330 , - 2161 , - 2400 , - 3047 , - 838 , - 2301 , - 908 , - 3187 , - 2610 , - 2441 , - 2680 , - 63 , - 1118 , - 2581 , - 1188 , - 203 , - 2890 , - 2721 , - 2960 , - 343 , - 1398 , - 2861 , - 1468 , - 483 , - 3170 , - 3001 , - 3240 , - 623 , - 1678 , - 3141 , - 1748 , - 763 , - 186 , - 17 , - 256 , - 903 , - 1958 , - 157 , - 2028 , - 1043 , - 466 , - 297 , - 536 , - 1183 , - 2238 , - 437 , - 2308 , - 1323 , - 746 , - 577 , - 816 , - 1463 , - 2518 , - 717 , - 2588 , - 1603 , - 1026 , - 857 , - 1096 , - 1743 , - 2798 , - 997 , - 2868 , - 1883 , - 1306 , - 1137 , - 1376 , - 2023 , - 3078 , - 1277 , - 3148 , - 2163 , - 1586 , - 1417 , - 1656 , - 2303 , - 94 , - 1557 , - 164 , - 2443 , - 1866 , - 1697 , - 1936 , - 2583 , - 374 , - 1837 , - 444 , - 2723 , - 2146 , - 1977 , - 2216 , - 2863 , - 654 , - 2117 , - 724 , - 3003 , - 2426 , - 2257 , - 2496 , - 3143 , - 934 , - 2397 , - 1004 , - 19 , - 2706 , - 2537 , - 2776 , - 159 , - 1214 , - 2677 , - 1284 , - 299 , - 2986 , - 2817 , - 3056 , - 439 , - 1494 , - 2957 , - 1564 , - 579 , - 2 , - 3097 , - 72 , - 719 , - 1774 , - 3237 , - 1844 , - 859 , - 282 , - 113 , - 352 , - 999 , - 2054 , - 253 , - 2124 , - 1139 , - 562 , - 393 , - 632 , - 1279 , - 2334 , - 533 , - 2404 , - 1419 , - 842 , - 673 , - 912 , - 1559 , - 2614 , - 813 , - 2684 , - 1699 , - 1122 , - 953 , - 1192 , - 1839 , - 2894 , - 1093 , - 2964 , - 1979 , - 1402 , - 1233 , - 1472 , - 2119 , - 3174 , - 1373 , - 3244 , - 2259 , - 1682 , - 1513 , - 1752 , - 2399 , - 190 , - 1653 , - 260 , - 2539 , - 1962 , - 1793 , - 2032 , - 2679 , - 470 , - 1933 , - 540 , - 2819 , - 2242 , - 2073 , - 2312 , - 2959 , - 750 , - 2213 , - 820 , - 3099 , - 2522 , - 2353 , - 2592 , - 3239 , - 1030 , - 2493 , - 1100 , - 115 , - 2802 , - 2633 , - 2872 , - 255 , - 1310 , - 2773 , - 1380 , - 395 , - 3082 , - 2913 , - 3152 , - 535 , - 1590 , - 3053 , - 1660 , - 675 , - 98 , - 3193 , - 168 , - 815 , - 1870 , - 69 , - 1940 , - 955 , - 378 , - 209 , - 448 , - 1095 , - 2150 , - 349 , - 2220 , - 1235 , - 658 , - 489 , - 728 , - 1375 , - 2430 , - 629 , - 2500 , - 1515 , - 938 , - 769 , - 1008 , - 1655 , - 2710 , - 909 , - 2780 , - 1795 , - 1218 , - 1049 , - 1288 , - 1935 , - 2990 , - 1189 , - 3060 , - 2075 , - 1498 , - 1329 , - 1568 , - 2215 , - 6 , - 1469 , - 76 , - 2355 , - 1778 , - 1609 , - 1848 , - 2495 , - 286 , - 1749 , - 356 , - 2635 , - 2058 , - 1889 , - 2128 , - 2775 , - 566 , - 2029 , - 636 , - 2915 , - 2338 , - 2169 , - 2408 , - 3055 , - 846 , - 2309 , - 916 , - 3195 , - 2618 , - 2449 , - 2688 , - 71 , - 1126 , - 2589 , - 1196 , - 211 , - 2898 , - 2729 , - 2968 , - 351 , - 1406 , - 2869 , - 1476 , - 491 , - 3178 , - 3009 , - 3248 , - 631 , - 1686 , - 3149 , - 1756 , - 771 , - 194 , - 25 , - 264 , - 911 , - 1966 , - 165 , - 2036 , - 1051 , - 474 , - 305 , - 544 , - 1191 , - 2246 , - 445 , - 2316 , - 1331 , - 754 , - 585 , - 824 , - 1471 , - 2526 , - 725 , - 2596 , - 1611 , - 1034 , - 865 , - 1104 , - 1751 , - 2806 , - 1005 , - 2876 , - 1891 , - 1314 , - 1145 , - 1384 , - 2031 , - 3086 , - 1285 , - 3156 , - 2171 , - 1594 , - 1425 , - 1664 , - 2311 , - 102 , - 1565 , - 172 , - 2451 , - 1874 , - 1705 , - 1944 , - 2591 , - 382 , - 1845 , - 452 , - 2731 , - 2154 , - 1985 , - 2224 , - 2871 , - 662 , - 2125 , - 732 , - 3011 , - 2434 , - 2265 , - 2504 , - 3151 , - 942 , - 2405 , - 1012 , - 27 , - 2714 , - 2545 , - 2784 , - 167 , - 1222 , - 2685 , - 1292 , - 307 , - 2994 , - 2825 , - 3064 , - 447 , - 1502 , - 2965 , - 1572 , - 587 , - 10 , - 3105 , - 80 , - 727 , - 1782 , - 3245 , - 1852 , - 867 , - 290 , - 121 , - 360 , - 1007 , - 2062 , - 261 , - 2132 , - 1147 , - 570 , - 401 , - 640 , - 1287 , - 2342 , - 541 , - 2412 , - 1427 , - 850 , - 681 , - 920 , - 1567 , - 2622 , - 821 , - 2692 , - 1707 , - 1130 , - 961 , - 1200 , - 1847 , - 2902 , - 1101 , - 2972 , - 1987 , - 1410 , - 1241 , - 1480 , - 2127 , - 3182 , - 1381 , - 3252 , - 2267 , - 1690 , - 1521 , - 1760 , - 2407 , - 198 , - 1661 , - 268 , - 2547 , - 1970 , - 1801 , - 2040 , - 2687 , - 478 , - 1941 , - 548 , - 2827 , - 2250 , - 2081 , - 2320 , - 2967 , - 758 , - 2221 , - 828 , - 3107 , - 2530 , - 2361 , - 2600 , - 3247 , - 1038 , - 2501 , - 1108 , - 123 , - 2810 , - 2641 , - 2880 , - 263 , - 1318 , - 2781 , - 1388 , - 403 , - 3090 , - 2921 , - 3160 , - 543 , - 1598 , - 3061 , - 1668 , - 683 , - 106 , - 3201 , - 176 , - 823 , - 1878 , - 77 , - 1948 , - 963 , - 386 , - 217 , - 456 , - 1103 , - 2158 , - 357 , - 2228 , - 1243 , - 666 , - 497 , - 736 , - 1383 , - 2438 , - 637 , - 2508 , - 1523 , - 946 , - 777 , - 1016 , - 1663 , - 2718 , - 917 , - 2788 , - 1803 , - 1226 , - 1057 , - 1296 , - 1943 , - 2998 , - 1197 , - 3068 , - 2083 , - 1506 , - 1337 , - 1576 , - 2223 , - 14 , - 1477 , - 84 , - 2363 , - 1786 , - 1617 , - 1856 , - 2503 , - 294 , - 1757 , - 364 , - 2643 , - 2066 , - 1897 , - 2136 , - 2783 , - 574 , - 2037 , - 644 , - 2923 , - 2346 , - 2177 , - 2416 , - 3063 , - 854 , - 2317 , - 924 , - 3203 , - 2626 , - 2457 , - 2696 , - 79 , - 1134 , - 2597 , - 1204 , - 219 , - 2906 , - 2737 , - 2976 , - 359 , - 1414 , - 2877 , - 1484 , - 499 , - 3186 , - 3017 , - 3256 , - 639 , - 1694 , - 3157 , - 1764 , - 779 , - 202 , - 33 , - 272 , - 919 , - 1974 , - 173 , - 2044 , - 1059 , - 482 , - 313 , - 552 , - 1199 , - 2254 , - 453 , - 2324 , - 1339 , - 762 , - 593 , - 832 , - 1479 , - 2534 , - 733 , - 2604 , - 1619 , - 1042 , - 873 , - 1112 , - 1759 , - 2814 , - 1013 , - 2884 , - 1899 , - 1322 , - 1153 , - 1392 , - 2039 , - 3094 , - 1293 , - 3164 , - 2179 , - 1602 , - 1433 , - 1672 , - 2319 , - 110 , - 1573 , - 180 , - 2459 , - 1882 , - 1713 , - 1952 , - 2599 , - 390 , - 1853 , - 460 , - 2739 , - 2162 , - 1993 , - 2232 , - 2879 , - 670 , - 2133 , - 740 , - 3019 , - 2442 , - 2273 , - 2512 , - 3159 , - 950 , - 2413 , - 1020 , - 35 , - 2722 , - 2553 , - 2792 , - 175 , - 1230 , - 2693 , - 1300 , - 315 , - 3002 , - 2833 , - 3072 , - 455 , - 1510 , - 2973 , - 1580 , - 595 , - 18 , - 3113 , - 88 , - 735 , - 1790 , - 3253 , - 1860 , - 875 , - 298 , - 129 , - 368 , - 1015 , - 2070 , - 269 , - 2140 , - 1155 , - 578 , - 409 , - 648 , - 1295 , - 2350 , - 549 , - 2420 , - 1435 , - 858 , - 689 , - 928 , - 1575 , - 2630 , - 829 , - 2700 , - 1715 , - 1138 , - 969 , - 1208 , - 1855 , - 2910 , - 1109 , - 2980 , - 1995 , - 1418 , - 1249 , - 1488 , - 2135 , - 3190 , - 1389 , - 3260 , - 2275 , - 1698 , - 1529 , - 1768 , - 2415 , - 206 , - 1669 , - 276 , - 2555 , - 1978 , - 1809 , - 2048 , - 2695 , - 486 , - 1949 , - 556 , - 2835 , - 2258 , - 2089 , - 2328 , - 2975 , - 766 , - 2229 , - 836 , - 3115 , - 2538 , - 2369 , - 2608 , - 3255 , - 1046 , - 2509 , - 1116 , - 131 , - 2818 , - 2649 , - 2888 , - 271 , - 1326 , - 2789 , - 1396 , - 411 , - 3098 , - 2929 , - 3168 , - 551 , - 1606 , - 3069 , - 1676 , - 691 , - 114 , - 3209 , - 184 , - 831 , - 1886 , - 85 , - 1956 , - 971 , - 394 , - 225 , - 464 , - 1111 , - 2166 , - 365 , - 2236 , - 1251 , - 674 , - 505 , - 744 , - 1391 , - 2446 , - 645 , - 2516 , - 1531 , - 954 , - 785 , - 1024 , - 1671 , - 2726 , - 925 , - 2796 , - 1811 , - 1234 , - 1065 , - 1304 , - 1951 , - 3006 , - 1205 , - 3076 , - 2091 , - 1514 , - 1345 , - 1584 , - 2231 , - 22 , - 1485 , - 92 , - 2371 , - 1794 , - 1625 , - 1864 , - 2511 , - 302 , - 1765 , - 372 , - 2651 , - 2074 , - 1905 , - 2144 , - 2791 , - 582 , - 2045 , - 652 , - 2931 , - 2354 , - 2185 , - 2424 , - 3071 , - 862 , - 2325 , - 932 , - 3211 , - 2634 , - 2465 , - 2704 , - 87 , - 1142 , - 2605 , - 1212 , - 227 , - 2914 , - 2745 , - 2984 , - 367 , - 1422 , - 2885 , - 1492 , - 507 , - 3194 , - 3025 , - 0 , - 155 , - 518 , - 1089 , - 1868 , - 2855 , - 722 , - 2125 , - 408 , - 2227 , - 926 , - 3161 , - 2276 , - 1599 , - 1130 , - 869 , - 816 , - 971 , - 1334 , - 1905 , - 2684 , - 343 , - 1538 , - 2941 , - 1224 , - 3043 , - 1742 , - 649 , - 3092 , - 2415 , - 1946 , - 1685 , - 1632 , - 1787 , - 2150 , - 2721 , - 172 , - 1159 , - 2354 , - 429 , - 2040 , - 531 , - 2558 , - 1465 , - 580 , - 3231 , - 2762 , - 2501 , - 2448 , - 2603 , - 2966 , - 209 , - 988 , - 1975 , - 3170 , - 1245 , - 2856 , - 1347 , - 46 , - 2281 , - 1396 , - 719 , - 250 , - 3317 , - 3264 , - 91 , - 454 , - 1025 , - 1804 , - 2791 , - 658 , - 2061 , - 344 , - 2163 , - 862 , - 3097 , - 2212 , - 1535 , - 1066 , - 805 , - 752 , - 907 , - 1270 , - 1841 , - 2620 , - 279 , - 1474 , - 2877 , - 1160 , - 2979 , - 1678 , - 585 , - 3028 , - 2351 , - 1882 , - 1621 , - 1568 , - 1723 , - 2086 , - 2657 , - 108 , - 1095 , - 2290 , - 365 , - 1976 , - 467 , - 2494 , - 1401 , - 516 , - 3167 , - 2698 , - 2437 , - 2384 , - 2539 , - 2902 , - 145 , - 924 , - 1911 , - 3106 , - 1181 , - 2792 , - 1283 , - 3310 , - 2217 , - 1332 , - 655 , - 186 , - 3253 , - 3200 , - 27 , - 390 , - 961 , - 1740 , - 2727 , - 594 , - 1997 , - 280 , - 2099 , - 798 , - 3033 , - 2148 , - 1471 , - 1002 , - 741 , - 688 , - 843 , - 1206 , - 1777 , - 2556 , - 215 , - 1410 , - 2813 , - 1096 , - 2915 , - 1614 , - 521 , - 2964 , - 2287 , - 1818 , - 1557 , - 1504 , - 1659 , - 2022 , - 2593 , - 44 , - 1031 , - 2226 , - 301 , - 1912 , - 403 , - 2430 , - 1337 , - 452 , - 3103 , - 2634 , - 2373 , - 2320 , - 2475 , - 2838 , - 81 , - 860 , - 1847 , - 3042 , - 1117 , - 2728 , - 1219 , - 3246 , - 2153 , - 1268 , - 591 , - 122 , - 3189 , - 3136 , - 3291 , - 326 , - 897 , - 1676 , - 2663 , - 530 , - 1933 , - 216 , - 2035 , - 734 , - 2969 , - 2084 , - 1407 , - 938 , - 677 , - 624 , - 779 , - 1142 , - 1713 , - 2492 , - 151 , - 1346 , - 2749 , - 1032 , - 2851 , - 1550 , - 457 , - 2900 , - 2223 , - 1754 , - 1493 , - 1440 , - 1595 , - 1958 , - 2529 , - 3308 , - 967 , - 2162 , - 237 , - 1848 , - 339 , - 2366 , - 1273 , - 388 , - 3039 , - 2570 , - 2309 , - 2256 , - 2411 , - 2774 , - 17 , - 796 , - 1783 , - 2978 , - 1053 , - 2664 , - 1155 , - 3182 , - 2089 , - 1204 , - 527 , - 58 , - 3125 , - 3072 , - 3227 , - 262 , - 833 , - 1612 , - 2599 , - 466 , - 1869 , - 152 , - 1971 , - 670 , - 2905 , - 2020 , - 1343 , - 874 , - 613 , - 560 , - 715 , - 1078 , - 1649 , - 2428 , - 87 , - 1282 , - 2685 , - 968 , - 2787 , - 1486 , - 393 , - 2836 , - 2159 , - 1690 , - 1429 , - 1376 , - 1531 , - 1894 , - 2465 , - 3244 , - 903 , - 2098 , - 173 , - 1784 , - 275 , - 2302 , - 1209 , - 324 , - 2975 , - 2506 , - 2245 , - 2192 , - 2347 , - 2710 , - 3281 , - 732 , - 1719 , - 2914 , - 989 , - 2600 , - 1091 , - 3118 , - 2025 , - 1140 , - 463 , - 3322 , - 3061 , - 3008 , - 3163 , - 198 , - 769 , - 1548 , - 2535 , - 402 , - 1805 , - 88 , - 1907 , - 606 , - 2841 , - 1956 , - 1279 , - 810 , - 549 , - 496 , - 651 , - 1014 , - 1585 , - 2364 , - 23 , - 1218 , - 2621 , - 904 , - 2723 , - 1422 , - 329 , - 2772 , - 2095 , - 1626 , - 1365 , - 1312 , - 1467 , - 1830 , - 2401 , - 3180 , - 839 , - 2034 , - 109 , - 1720 , - 211 , - 2238 , - 1145 , - 260 , - 2911 , - 2442 , - 2181 , - 2128 , - 2283 , - 2646 , - 3217 , - 668 , - 1655 , - 2850 , - 925 , - 2536 , - 1027 , - 3054 , - 1961 , - 1076 , - 399 , - 3258 , - 2997 , - 2944 , - 3099 , - 134 , - 705 , - 1484 , - 2471 , - 338 , - 1741 , - 24 , - 1843 , - 542 , - 2777 , - 1892 , - 1215 , - 746 , - 485 , - 432 , - 587 , - 950 , - 1521 , - 2300 , - 3287 , - 1154 , - 2557 , - 840 , - 2659 , - 1358 , - 265 , - 2708 , - 2031 , - 1562 , - 1301 , - 1248 , - 1403 , - 1766 , - 2337 , - 3116 , - 775 , - 1970 , - 45 , - 1656 , - 147 , - 2174 , - 1081 , - 196 , - 2847 , - 2378 , - 2117 , - 2064 , - 2219 , - 2582 , - 3153 , - 604 , - 1591 , - 2786 , - 861 , - 2472 , - 963 , - 2990 , - 1897 , - 1012 , - 335 , - 3194 , - 2933 , - 2880 , - 3035 , - 70 , - 641 , - 1420 , - 2407 , - 274 , - 1677 , - 3288 , - 1779 , - 478 , - 2713 , - 1828 , - 1151 , - 682 , - 421 , - 368 , - 523 , - 886 , - 1457 , - 2236 , - 3223 , - 1090 , - 2493 , - 776 , - 2595 , - 1294 , - 201 , - 2644 , - 1967 , - 1498 , - 1237 , - 1184 , - 1339 , - 1702 , - 2273 , - 3052 , - 711 , - 1906 , - 3309 , - 1592 , - 83 , - 2110 , - 1017 , - 132 , - 2783 , - 2314 , - 2053 , - 2000 , - 2155 , - 2518 , - 3089 , - 540 , - 1527 , - 2722 , - 797 , - 2408 , - 899 , - 2926 , - 1833 , - 948 , - 271 , - 3130 , - 2869 , - 2816 , - 2971 , - 6 , - 577 , - 1356 , - 2343 , - 210 , - 1613 , - 3224 , - 1715 , - 414 , - 2649 , - 1764 , - 1087 , - 618 , - 357 , - 304 , - 459 , - 822 , - 1393 , - 2172 , - 3159 , - 1026 , - 2429 , - 712 , - 2531 , - 1230 , - 137 , - 2580 , - 1903 , - 1434 , - 1173 , - 1120 , - 1275 , - 1638 , - 2209 , - 2988 , - 647 , - 1842 , - 3245 , - 1528 , - 19 , - 2046 , - 953 , - 68 , - 2719 , - 2250 , - 1989 , - 1936 , - 2091 , - 2454 , - 3025 , - 476 , - 1463 , - 2658 , - 733 , - 2344 , - 835 , - 2862 , - 1769 , - 884 , - 207 , - 3066 , - 2805 , - 2752 , - 2907 , - 3270 , - 513 , - 1292 , - 2279 , - 146 , - 1549 , - 3160 , - 1651 , - 350 , - 2585 , - 1700 , - 1023 , - 554 , - 293 , - 240 , - 395 , - 758 , - 1329 , - 2108 , - 3095 , - 962 , - 2365 , - 648 , - 2467 , - 1166 , - 73 , - 2516 , - 1839 , - 1370 , - 1109 , - 1056 , - 1211 , - 1574 , - 2145 , - 2924 , - 583 , - 1778 , - 3181 , - 1464 , - 3283 , - 1982 , - 889 , - 4 , - 2655 , - 2186 , - 1925 , - 1872 , - 2027 , - 2390 , - 2961 , - 412 , - 1399 , - 2594 , - 669 , - 2280 , - 771 , - 2798 , - 1705 , - 820 , - 143 , - 3002 , - 2741 , - 2688 , - 2843 , - 3206 , - 449 , - 1228 , - 2215 , - 82 , - 1485 , - 3096 , - 1587 , - 286 , - 2521 , - 1636 , - 959 , - 490 , - 229 , - 176 , - 331 , - 694 , - 1265 , - 2044 , - 3031 , - 898 , - 2301 , - 584 , - 2403 , - 1102 , - 9 , - 2452 , - 1775 , - 1306 , - 1045 , - 992 , - 1147 , - 1510 , - 2081 , - 2860 , - 519 , - 1714 , - 3117 , - 1400 , - 3219 , - 1918 , - 825 , - 3268 , - 2591 , - 2122 , - 1861 , - 1808 , - 1963 , - 2326 , - 2897 , - 348 , - 1335 , - 2530 , - 605 , - 2216 , - 707 , - 2734 , - 1641 , - 756 , - 79 , - 2938 , - 2677 , - 2624 , - 2779 , - 3142 , - 385 , - 1164 , - 2151 , - 18 , - 1421 , - 3032 , - 1523 , - 222 , - 2457 , - 1572 , - 895 , - 426 , - 165 , - 112 , - 267 , - 630 , - 1201 , - 1980 , - 2967 , - 834 , - 2237 , - 520 , - 2339 , - 1038 , - 3273 , - 2388 , - 1711 , - 1242 , - 981 , - 928 , - 1083 , - 1446 , - 2017 , - 2796 , - 455 , - 1650 , - 3053 , - 1336 , - 3155 , - 1854 , - 761 , - 3204 , - 2527 , - 2058 , - 1797 , - 1744 , - 1899 , - 2262 , - 2833 , - 284 , - 1271 , - 2466 , - 541 , - 2152 , - 643 , - 2670 , - 1577 , - 692 , - 15 , - 2874 , - 2613 , - 2560 , - 2715 , - 3078 , - 321 , - 1100 , - 2087 , - 3282 , - 1357 , - 2968 , - 1459 , - 158 , - 2393 , - 1508 , - 831 , - 362 , - 101 , - 48 , - 203 , - 566 , - 1137 , - 1916 , - 2903 , - 770 , - 2173 , - 456 , - 2275 , - 974 , - 3209 , - 2324 , - 1647 , - 1178 , - 917 , - 864 , - 1019 , - 1382 , - 1953 , - 2732 , - 391 , - 1586 , - 2989 , - 1272 , - 3091 , - 1790 , - 697 , - 3140 , - 2463 , - 1994 , - 1733 , - 1680 , - 1835 , - 2198 , - 2769 , - 220 , - 1207 , - 2402 , - 477 , - 2088 , - 579 , - 2606 , - 1513 , - 628 , - 3279 , - 2810 , - 2549 , - 2496 , - 2651 , - 3014 , - 257 , - 1036 , - 2023 , - 3218 , - 1293 , - 2904 , - 1395 , - 94 , - 2329 , - 1444 , - 767 , - 298 , - 37 , - 3312 , - 139 , - 502 , - 1073 , - 1852 , - 2839 , - 706 , - 2109 , - 392 , - 2211 , - 910 , - 3145 , - 2260 , - 1583 , - 1114 , - 853 , - 800 , - 955 , - 1318 , - 1889 , - 2668 , - 327 , - 1522 , - 2925 , - 1208 , - 3027 , - 1726 , - 633 , - 3076 , - 2399 , - 1930 , - 1669 , - 1616 , - 1771 , - 2134 , - 2705 , - 156 , - 1143 , - 2338 , - 413 , - 2024 , - 515 , - 2542 , - 1449 , - 564 , - 3215 , - 2746 , - 2485 , - 2432 , - 2587 , - 2950 , - 193 , - 972 , - 1959 , - 3154 , - 1229 , - 2840 , - 1331 , - 30 , - 2265 , - 1380 , - 703 , - 234 , - 3301 , - 3248 , - 75 , - 438 , - 1009 , - 1788 , - 2775 , - 642 , - 2045 , - 328 , - 2147 , - 846 , - 3081 , - 2196 , - 1519 , - 1050 , - 789 , - 736 , - 891 , - 1254 , - 1825 , - 2604 , - 263 , - 1458 , - 2861 , - 1144 , - 2963 , - 1662 , - 569 , - 3012 , - 2335 , - 1866 , - 1605 , - 1552 , - 1707 , - 2070 , - 2641 , - 92 , - 1079 , - 2274 , - 349 , - 1960 , - 451 , - 2478 , - 1385 , - 500 , - 3151 , - 2682 , - 2421 , - 2368 , - 2523 , - 2886 , - 129 , - 908 , - 1895 , - 3090 , - 1165 , - 2776 , - 1267 , - 3294 , - 2201 , - 1316 , - 639 , - 170 , - 3237 , - 3184 , - 11 , - 374 , - 945 , - 1724 , - 2711 , - 578 , - 1981 , - 264 , - 2083 , - 782 , - 3017 , - 2132 , - 1455 , - 986 , - 725 , - 672 , - 827 , - 1190 , - 1761 , - 2540 , - 199 , - 1394 , - 2797 , - 1080 , - 2899 , - 1598 , - 505 , - 2948 , - 2271 , - 1802 , - 1541 , - 1488 , - 1643 , - 2006 , - 2577 , - 28 , - 1015 , - 2210 , - 285 , - 1896 , - 387 , - 2414 , - 1321 , - 436 , - 3087 , - 2618 , - 2357 , - 2304 , - 2459 , - 2822 , - 65 , - 844 , - 1831 , - 3026 , - 1101 , - 2712 , - 1203 , - 3230 , - 2137 , - 1252 , - 575 , - 106 , - 3173 , - 3120 , - 3275 , - 310 , - 881 , - 1660 , - 2647 , - 514 , - 1917 , - 200 , - 2019 , - 718 , - 2953 , - 2068 , - 1391 , - 922 , - 661 , - 608 , - 763 , - 1126 , - 1697 , - 2476 , - 135 , - 1330 , - 2733 , - 1016 , - 2835 , - 1534 , - 441 , - 2884 , - 2207 , - 1738 , - 1477 , - 1424 , - 1579 , - 1942 , - 2513 , - 3292 , - 951 , - 2146 , - 221 , - 1832 , - 323 , - 2350 , - 1257 , - 372 , - 3023 , - 2554 , - 2293 , - 2240 , - 2395 , - 2758 , - 1 , - 780 , - 1767 , - 2962 , - 1037 , - 2648 , - 1139 , - 3166 , - 2073 , - 1188 , - 511 , - 42 , - 3109 , - 3056 , - 3211 , - 246 , - 817 , - 1596 , - 2583 , - 450 , - 1853 , - 136 , - 1955 , - 654 , - 2889 , - 2004 , - 1327 , - 858 , - 597 , - 544 , - 699 , - 1062 , - 1633 , - 2412 , - 71 , - 1266 , - 2669 , - 952 , - 2771 , - 1470 , - 377 , - 2820 , - 2143 , - 1674 , - 1413 , - 1360 , - 1515 , - 1878 , - 2449 , - 3228 , - 887 , - 2082 , - 157 , - 1768 , - 259 , - 2286 , - 1193 , - 308 , - 2959 , - 2490 , - 2229 , - 2176 , - 2331 , - 2694 , - 3265 , - 716 , - 1703 , - 2898 , - 973 , - 2584 , - 1075 , - 3102 , - 2009 , - 1124 , - 447 , - 3306 , - 3045 , - 2992 , - 3147 , - 182 , - 753 , - 1532 , - 2519 , - 386 , - 1789 , - 72 , - 1891 , - 590 , - 2825 , - 1940 , - 1263 , - 794 , - 533 , - 480 , - 635 , - 998 , - 1569 , - 2348 , - 7 , - 1202 , - 2605 , - 888 , - 2707 , - 1406 , - 313 , - 2756 , - 2079 , - 1610 , - 1349 , - 1296 , - 1451 , - 1814 , - 2385 , - 3164 , - 823 , - 2018 , - 93 , - 1704 , - 195 , - 2222 , - 1129 , - 244 , - 2895 , - 2426 , - 2165 , - 2112 , - 2267 , - 2630 , - 3201 , - 652 , - 1639 , - 2834 , - 909 , - 2520 , - 1011 , - 3038 , - 1945 , - 1060 , - 383 , - 3242 , - 2981 , - 2928 , - 3083 , - 118 , - 689 , - 1468 , - 2455 , - 322 , - 1725 , - 8 , - 1827 , - 526 , - 2761 , - 1876 , - 1199 , - 730 , - 469 , - 416 , - 571 , - 934 , - 1505 , - 2284 , - 3271 , - 1138 , - 2541 , - 824 , - 2643 , - 1342 , - 249 , - 2692 , - 2015 , - 1546 , - 1285 , - 1232 , - 1387 , - 1750 , - 2321 , - 3100 , - 759 , - 1954 , - 29 , - 1640 , - 131 , - 2158 , - 1065 , - 180 , - 2831 , - 2362 , - 2101 , - 2048 , - 2203 , - 2566 , - 3137 , - 588 , - 1575 , - 2770 , - 845 , - 2456 , - 947 , - 2974 , - 1881 , - 996 , - 319 , - 3178 , - 2917 , - 2864 , - 3019 , - 54 , - 625 , - 1404 , - 2391 , - 258 , - 1661 , - 3272 , - 1763 , - 462 , - 2697 , - 1812 , - 1135 , - 666 , - 405 , - 352 , - 507 , - 870 , - 1441 , - 2220 , - 3207 , - 1074 , - 2477 , - 760 , - 2579 , - 1278 , - 185 , - 2628 , - 1951 , - 1482 , - 1221 , - 1168 , - 1323 , - 1686 , - 2257 , - 3036 , - 695 , - 1890 , - 3293 , - 1576 , - 67 , - 2094 , - 1001 , - 116 , - 2767 , - 2298 , - 2037 , - 1984 , - 2139 , - 2502 , - 3073 , - 524 , - 1511 , - 2706 , - 781 , - 2392 , - 883 , - 2910 , - 1817 , - 932 , - 255 , - 3114 , - 2853 , - 2800 , - 2955 , - 3318 , - 561 , - 1340 , - 2327 , - 194 , - 1597 , - 3208 , - 1699 , - 398 , - 2633 , - 1748 , - 1071 , - 602 , - 341 , - 288 , - 443 , - 806 , - 1377 , - 2156 , - 3143 , - 1010 , - 2413 , - 696 , - 2515 , - 1214 , - 121 , - 2564 , - 1887 , - 1418 , - 1157 , - 1104 , - 1259 , - 1622 , - 2193 , - 2972 , - 631 , - 1826 , - 3229 , - 1512 , - 3 , - 2030 , - 937 , - 52 , - 2703 , - 2234 , - 1973 , - 1920 , - 2075 , - 2438 , - 3009 , - 460 , - 1447 , - 2642 , - 717 , - 2328 , - 819 , - 2846 , - 1753 , - 868 , - 191 , - 3050 , - 2789 , - 2736 , - 2891 , - 3254 , - 497 , - 1276 , - 2263 , - 130 , - 1533 , - 3144 , - 1635 , - 334 , - 2569 , - 1684 , - 1007 , - 538 , - 277 , - 224 , - 379 , - 742 , - 1313 , - 2092 , - 3079 , - 946 , - 2349 , - 632 , - 2451 , - 1150 , - 57 , - 2500 , - 1823 , - 1354 , - 1093 , - 1040 , - 1195 , - 1558 , - 2129 , - 2908 , - 567 , - 1762 , - 3165 , - 1448 , - 3267 , - 1966 , - 873 , - 3316 , - 2639 , - 2170 , - 1909 , - 1856 , - 2011 , - 2374 , - 2945 , - 396 , - 1383 , - 2578 , - 653 , - 2264 , - 755 , - 2782 , - 1689 , - 804 , - 127 , - 2986 , - 2725 , - 2672 , - 2827 , - 3190 , - 433 , - 1212 , - 2199 , - 66 , - 1469 , - 3080 , - 1571 , - 270 , - 2505 , - 1620 , - 943 , - 474 , - 213 , - 160 , - 315 , - 678 , - 1249 , - 2028 , - 3015 , - 882 , - 2285 , - 568 , - 2387 , - 1086 , - 3321 , - 2436 , - 1759 , - 1290 , - 1029 , - 976 , - 1131 , - 1494 , - 2065 , - 2844 , - 503 , - 1698 , - 3101 , - 1384 , - 3203 , - 1902 , - 809 , - 3252 , - 2575 , - 2106 , - 1845 , - 1792 , - 1947 , - 2310 , - 2881 , - 332 , - 1319 , - 2514 , - 589 , - 2200 , - 691 , - 2718 , - 1625 , - 740 , - 63 , - 2922 , - 2661 , - 2608 , - 2763 , - 3126 , - 369 , - 1148 , - 2135 , - 2 , - 1405 , - 3016 , - 1507 , - 206 , - 2441 , - 1556 , - 879 , - 410 , - 149 , - 96 , - 251 , - 614 , - 1185 , - 1964 , - 2951 , - 818 , - 2221 , - 504 , - 2323 , - 1022 , - 3257 , - 2372 , - 1695 , - 1226 , - 965 , - 912 , - 1067 , - 1430 , - 2001 , - 2780 , - 439 , - 1634 , - 3037 , - 1320 , - 3139 , - 1838 , - 745 , - 3188 , - 2511 , - 2042 , - 1781 , - 1728 , - 1883 , - 2246 , - 2817 , - 268 , - 1255 , - 2450 , - 525 , - 2136 , - 627 , - 2654 , - 1561 , - 676 , - 3327 , - 2858 , - 2597 , - 2544 , - 2699 , - 3062 , - 305 , - 1084 , - 2071 , - 3266 , - 1341 , - 2952 , - 1443 , - 142 , - 2377 , - 1492 , - 815 , - 346 , - 85 , - 32 , - 187 , - 550 , - 1121 , - 1900 , - 2887 , - 754 , - 2157 , - 440 , - 2259 , - 958 , - 3193 , - 2308 , - 1631 , - 1162 , - 901 , - 848 , - 1003 , - 1366 , - 1937 , - 2716 , - 375 , - 1570 , - 2973 , - 1256 , - 3075 , - 1774 , - 681 , - 3124 , - 2447 , - 1978 , - 1717 , - 1664 , - 1819 , - 2182 , - 2753 , - 204 , - 1191 , - 2386 , - 461 , - 2072 , - 563 , - 2590 , - 1497 , - 612 , - 3263 , - 2794 , - 2533 , - 2480 , - 2635 , - 2998 , - 241 , - 1020 , - 2007 , - 3202 , - 1277 , - 2888 , - 1379 , - 78 , - 2313 , - 1428 , - 751 , - 282 , - 21 , - 3296 , - 123 , - 486 , - 1057 , - 1836 , - 2823 , - 690 , - 2093 , - 376 , - 2195 , - 894 , - 3129 , - 2244 , - 1567 , - 1098 , - 837 , - 784 , - 939 , - 1302 , - 1873 , - 2652 , - 311 , - 1506 , - 2909 , - 1192 , - 3011 , - 1710 , - 617 , - 3060 , - 2383 , - 1914 , - 1653 , - 1600 , - 1755 , - 2118 , - 2689 , - 140 , - 1127 , - 2322 , - 397 , - 2008 , - 499 , - 2526 , - 1433 , - 548 , - 3199 , - 2730 , - 2469 , - 2416 , - 2571 , - 2934 , - 177 , - 956 , - 1943 , - 3138 , - 1213 , - 2824 , - 1315 , - 14 , - 2249 , - 1364 , - 687 , - 218 , - 3285 , - 3232 , - 59 , - 422 , - 993 , - 1772 , - 2759 , - 626 , - 2029 , - 312 , - 2131 , - 830 , - 3065 , - 2180 , - 1503 , - 1034 , - 773 , - 720 , - 875 , - 1238 , - 1809 , - 2588 , - 247 , - 1442 , - 2845 , - 1128 , - 2947 , - 1646 , - 553 , - 2996 , - 2319 , - 1850 , - 1589 , - 1536 , - 1691 , - 2054 , - 2625 , - 76 , - 1063 , - 2258 , - 333 , - 1944 , - 435 , - 2462 , - 1369 , - 484 , - 3135 , - 2666 , - 2405 , - 2352 , - 2507 , - 2870 , - 113 , - 892 , - 1879 , - 3074 , - 1149 , - 2760 , - 1251 , - 3278 , - 2185 , - 1300 , - 623 , - 154 , - 3221 , - 3168 , - 3323 , - 358 , - 929 , - 1708 , - 2695 , - 562 , - 1965 , - 248 , - 2067 , - 766 , - 3001 , - 2116 , - 1439 , - 970 , - 709 , - 656 , - 811 , - 1174 , - 1745 , - 2524 , - 183 , - 1378 , - 2781 , - 1064 , - 2883 , - 1582 , - 489 , - 2932 , - 2255 , - 1786 , - 1525 , - 1472 , - 1627 , - 1990 , - 2561 , - 12 , - 999 , - 2194 , - 269 , - 1880 , - 371 , - 2398 , - 1305 , - 420 , - 3071 , - 2602 , - 2341 , - 2288 , - 2443 , - 2806 , - 49 , - 828 , - 1815 , - 3010 , - 1085 , - 2696 , - 1187 , - 3214 , - 2121 , - 1236 , - 559 , - 90 , - 3157 , - 3104 , - 3259 , - 294 , - 865 , - 1644 , - 2631 , - 498 , - 1901 , - 184 , - 2003 , - 702 , - 2937 , - 2052 , - 1375 , - 906 , - 645 , - 592 , - 747 , - 1110 , - 1681 , - 2460 , - 119 , - 1314 , - 2717 , - 1000 , - 2819 , - 1518 , - 425 , - 2868 , - 2191 , - 1722 , - 1461 , - 1408 , - 1563 , - 1926 , - 2497 , - 3276 , - 935 , - 2130 , - 205 , - 1816 , - 307 , - 2334 , - 1241 , - 356 , - 3007 , - 2538 , - 2277 , - 2224 , - 2379 , - 2742 , - 3313 , - 764 , - 1751 , - 2946 , - 1021 , - 2632 , - 1123 , - 3150 , - 2057 , - 1172 , - 495 , - 26 , - 3093 , - 3040 , - 3195 , - 230 , - 801 , - 1580 , - 2567 , - 434 , - 1837 , - 120 , - 1939 , - 638 , - 2873 , - 1988 , - 1311 , - 842 , - 581 , - 528 , - 683 , - 1046 , - 1617 , - 2396 , - 55 , - 1250 , - 2653 , - 936 , - 2755 , - 1454 , - 361 , - 2804 , - 2127 , - 1658 , - 1397 , - 1344 , - 1499 , - 1862 , - 2433 , - 3212 , - 871 , - 2066 , - 141 , - 1752 , - 243 , - 2270 , - 1177 , - 292 , - 2943 , - 2474 , - 2213 , - 2160 , - 2315 , - 2678 , - 3249 , - 700 , - 1687 , - 2882 , - 957 , - 2568 , - 1059 , - 3086 , - 1993 , - 1108 , - 431 , - 3290 , - 3029 , - 2976 , - 3131 , - 166 , - 737 , - 1516 , - 2503 , - 370 , - 1773 , - 56 , - 1875 , - 574 , - 2809 , - 1924 , - 1247 , - 778 , - 517 , - 464 , - 619 , - 982 , - 1553 , - 2332 , - 3319 , - 1186 , - 2589 , - 872 , - 2691 , - 1390 , - 297 , - 2740 , - 2063 , - 1594 , - 1333 , - 1280 , - 1435 , - 1798 , - 2369 , - 3148 , - 807 , - 2002 , - 77 , - 1688 , - 179 , - 2206 , - 1113 , - 228 , - 2879 , - 2410 , - 2149 , - 2096 , - 2251 , - 2614 , - 3185 , - 636 , - 1623 , - 2818 , - 893 , - 2504 , - 995 , - 3022 , - 1929 , - 1044 , - 367 , - 3226 , - 2965 , - 2912 , - 3067 , - 102 , - 673 , - 1452 , - 2439 , - 306 , - 1709 , - 3320 , - 1811 , - 510 , - 2745 , - 1860 , - 1183 , - 714 , - 453 , - 400 , - 555 , - 918 , - 1489 , - 2268 , - 3255 , - 1122 , - 2525 , - 808 , - 2627 , - 1326 , - 233 , - 2676 , - 1999 , - 1530 , - 1269 , - 1216 , - 1371 , - 1734 , - 2305 , - 3084 , - 743 , - 1938 , - 13 , - 1624 , - 115 , - 2142 , - 1049 , - 164 , - 2815 , - 2346 , - 2085 , - 2032 , - 2187 , - 2550 , - 3121 , - 572 , - 1559 , - 2754 , - 829 , - 2440 , - 931 , - 2958 , - 1865 , - 980 , - 303 , - 3162 , - 2901 , - 2848 , - 3003 , - 38 , - 609 , - 1388 , - 2375 , - 242 , - 1645 , - 3256 , - 1747 , - 446 , - 2681 , - 1796 , - 1119 , - 650 , - 389 , - 336 , - 491 , - 854 , - 1425 , - 2204 , - 3191 , - 1058 , - 2461 , - 744 , - 2563 , - 1262 , - 169 , - 2612 , - 1935 , - 1466 , - 1205 , - 1152 , - 1307 , - 1670 , - 2241 , - 3020 , - 679 , - 1874 , - 3277 , - 1560 , - 51 , - 2078 , - 985 , - 100 , - 2751 , - 2282 , - 2021 , - 1968 , - 2123 , - 2486 , - 3057 , - 508 , - 1495 , - 2690 , - 765 , - 2376 , - 867 , - 2894 , - 1801 , - 916 , - 239 , - 3098 , - 2837 , - 2784 , - 2939 , - 3302 , - 545 , - 1324 , - 2311 , - 178 , - 1581 , - 3192 , - 1683 , - 382 , - 2617 , - 1732 , - 1055 , - 586 , - 325 , - 272 , - 427 , - 790 , - 1361 , - 2140 , - 3127 , - 994 , - 2397 , - 680 , - 2499 , - 1198 , - 105 , - 2548 , - 1871 , - 1402 , - 1141 , - 1088 , - 1243 , - 1606 , - 2177 , - 2956 , - 615 , - 1810 , - 3213 , - 1496 , - 3315 , - 2014 , - 921 , - 36 , - 2687 , - 2218 , - 1957 , - 1904 , - 2059 , - 2422 , - 2993 , - 444 , - 1431 , - 2626 , - 701 , - 2312 , - 803 , - 2830 , - 1737 , - 852 , - 175 , - 3034 , - 2773 , - 2720 , - 2875 , - 3238 , - 481 , - 1260 , - 2247 , - 114 , - 1517 , - 3128 , - 1619 , - 318 , - 2553 , - 1668 , - 991 , - 522 , - 261 , - 208 , - 363 , - 726 , - 1297 , - 2076 , - 3063 , - 930 , - 2333 , - 616 , - 2435 , - 1134 , - 41 , - 2484 , - 1807 , - 1338 , - 1077 , - 1024 , - 1179 , - 1542 , - 2113 , - 2892 , - 551 , - 1746 , - 3149 , - 1432 , - 3251 , - 1950 , - 857 , - 3300 , - 2623 , - 2154 , - 1893 , - 1840 , - 1995 , - 2358 , - 2929 , - 380 , - 1367 , - 2562 , - 637 , - 2248 , - 739 , - 2766 , - 1673 , - 788 , - 111 , - 2970 , - 2709 , - 2656 , - 2811 , - 3174 , - 417 , - 1196 , - 2183 , - 50 , - 1453 , - 3064 , - 1555 , - 254 , - 2489 , - 1604 , - 927 , - 458 , - 197 , - 144 , - 299 , - 662 , - 1233 , - 2012 , - 2999 , - 866 , - 2269 , - 552 , - 2371 , - 1070 , - 3305 , - 2420 , - 1743 , - 1274 , - 1013 , - 960 , - 1115 , - 1478 , - 2049 , - 2828 , - 487 , - 1682 , - 3085 , - 1368 , - 3187 , - 1886 , - 793 , - 3236 , - 2559 , - 2090 , - 1829 , - 1776 , - 1931 , - 2294 , - 2865 , - 316 , - 1303 , - 2498 , - 573 , - 2184 , - 675 , - 2702 , - 1609 , - 724 , - 47 , - 2906 , - 2645 , - 2592 , - 2747 , - 3110 , - 353 , - 1132 , - 2119 , - 3314 , - 1389 , - 3000 , - 1491 , - 190 , - 2425 , - 1540 , - 863 , - 394 , - 133 , - 80 , - 235 , - 598 , - 1169 , - 1948 , - 2935 , - 802 , - 2205 , - 488 , - 2307 , - 1006 , - 3241 , - 2356 , - 1679 , - 1210 , - 949 , - 896 , - 1051 , - 1414 , - 1985 , - 2764 , - 423 , - 1618 , - 3021 , - 1304 , - 3123 , - 1822 , - 729 , - 3172 , - 2495 , - 2026 , - 1765 , - 1712 , - 1867 , - 2230 , - 2801 , - 252 , - 1239 , - 2434 , - 509 , - 2120 , - 611 , - 2638 , - 1545 , - 660 , - 3311 , - 2842 , - 2581 , - 2528 , - 2683 , - 3046 , - 289 , - 1068 , - 2055 , - 3250 , - 1325 , - 2936 , - 1427 , - 126 , - 2361 , - 1476 , - 799 , - 330 , - 69 , - 16 , - 171 , - 534 , - 1105 , - 1884 , - 2871 , - 738 , - 2141 , - 424 , - 2243 , - 942 , - 3177 , - 2292 , - 1615 , - 1146 , - 885 , - 832 , - 987 , - 1350 , - 1921 , - 2700 , - 359 , - 1554 , - 2957 , - 1240 , - 3059 , - 1758 , - 665 , - 3108 , - 2431 , - 1962 , - 1701 , - 1648 , - 1803 , - 2166 , - 2737 , - 188 , - 1175 , - 2370 , - 445 , - 2056 , - 547 , - 2574 , - 1481 , - 596 , - 3247 , - 2778 , - 2517 , - 2464 , - 2619 , - 2982 , - 225 , - 1004 , - 1991 , - 3186 , - 1261 , - 2872 , - 1363 , - 62 , - 2297 , - 1412 , - 735 , - 266 , - 5 , - 3280 , - 107 , - 470 , - 1041 , - 1820 , - 2807 , - 674 , - 2077 , - 360 , - 2179 , - 878 , - 3113 , - 2228 , - 1551 , - 1082 , - 821 , - 768 , - 923 , - 1286 , - 1857 , - 2636 , - 295 , - 1490 , - 2893 , - 1176 , - 2995 , - 1694 , - 601 , - 3044 , - 2367 , - 1898 , - 1637 , - 1584 , - 1739 , - 2102 , - 2673 , - 124 , - 1111 , - 2306 , - 381 , - 1992 , - 483 , - 2510 , - 1417 , - 532 , - 3183 , - 2714 , - 2453 , - 2400 , - 2555 , - 2918 , - 161 , - 940 , - 1927 , - 3122 , - 1197 , - 2808 , - 1299 , - 3326 , - 2233 , - 1348 , - 671 , - 202 , - 3269 , - 3216 , - 43 , - 406 , - 977 , - 1756 , - 2743 , - 610 , - 2013 , - 296 , - 2115 , - 814 , - 3049 , - 2164 , - 1487 , - 1018 , - 757 , - 704 , - 859 , - 1222 , - 1793 , - 2572 , - 231 , - 1426 , - 2829 , - 1112 , - 2931 , - 1630 , - 537 , - 2980 , - 2303 , - 1834 , - 1573 , - 1520 , - 1675 , - 2038 , - 2609 , - 60 , - 1047 , - 2242 , - 317 , - 1928 , - 419 , - 2446 , - 1353 , - 468 , - 3119 , - 2650 , - 2389 , - 2336 , - 2491 , - 2854 , - 97 , - 876 , - 1863 , - 3058 , - 1133 , - 2744 , - 1235 , - 3262 , - 2169 , - 1284 , - 607 , - 138 , - 3205 , - 3152 , - 3307 , - 342 , - 913 , - 1692 , - 2679 , - 546 , - 1949 , - 232 , - 2051 , - 750 , - 2985 , - 2100 , - 1423 , - 954 , - 693 , - 640 , - 795 , - 1158 , - 1729 , - 2508 , - 167 , - 1362 , - 2765 , - 1048 , - 2867 , - 1566 , - 473 , - 2916 , - 2239 , - 1770 , - 1509 , - 1456 , - 1611 , - 1974 , - 2545 , - 3324 , - 983 , - 2178 , - 253 , - 1864 , - 355 , - 2382 , - 1289 , - 404 , - 3055 , - 2586 , - 2325 , - 2272 , - 2427 , - 2790 , - 33 , - 812 , - 1799 , - 2994 , - 1069 , - 2680 , - 1171 , - 3198 , - 2105 , - 1220 , - 543 , - 74 , - 3141 , - 3088 , - 3243 , - 278 , - 849 , - 1628 , - 2615 , - 482 , - 1885 , - 168 , - 1987 , - 686 , - 2921 , - 2036 , - 1359 , - 890 , - 629 , - 576 , - 731 , - 1094 , - 1665 , - 2444 , - 103 , - 1298 , - 2701 , - 984 , - 2803 , - 1502 , - 409 , - 2852 , - 2175 , - 1706 , - 1445 , - 1392 , - 1547 , - 1910 , - 2481 , - 3260 , - 919 , - 2114 , - 189 , - 1800 , - 291 , - 2318 , - 1225 , - 340 , - 2991 , - 2522 , - 2261 , - 2208 , - 2363 , - 2726 , - 3297 , - 748 , - 1735 , - 2930 , - 1005 , - 2616 , - 1107 , - 3134 , - 2041 , - 1156 , - 479 , - 10 , - 3077 , - 3024 , - 3179 , - 214 , - 785 , - 1564 , - 2551 , - 418 , - 1821 , - 104 , - 1923 , - 622 , - 2857 , - 1972 , - 1295 , - 826 , - 565 , - 512 , - 667 , - 1030 , - 1601 , - 2380 , - 39 , - 1234 , - 2637 , - 920 , - 2739 , - 1438 , - 345 , - 2788 , - 2111 , - 1642 , - 1381 , - 1328 , - 1483 , - 1846 , - 2417 , - 3196 , - 855 , - 2050 , - 125 , - 1736 , - 227 , - 2254 , - 1161 , - 276 , - 2927 , - 2458 , - 2197 , - 2144 , - 2299 , - 2662 , - 3233 , - 684 , - 1671 , - 2866 , - 941 , - 2552 , - 1043 , - 3070 , - 1977 , - 1092 , - 415 , - 3274 , - 3013 , - 2960 , - 3115 , - 150 , - 721 , - 1500 , - 2487 , - 354 , - 1757 , - 40 , - 1859 , - 558 , - 2793 , - 1908 , - 1231 , - 762 , - 501 , - 448 , - 603 , - 966 , - 1537 , - 2316 , - 3303 , - 1170 , - 2573 , - 856 , - 2675 , - 1374 , - 281 , - 2724 , - 2047 , - 1578 , - 1317 , - 1264 , - 1419 , - 1782 , - 2353 , - 3132 , - 791 , - 1986 , - 61 , - 1672 , - 163 , - 2190 , - 1097 , - 212 , - 2863 , - 2394 , - 2133 , - 2080 , - 2235 , - 2598 , - 3169 , - 620 , - 1607 , - 2802 , - 877 , - 2488 , - 979 , - 3006 , - 1913 , - 1028 , - 351 , - 3210 , - 2949 , - 2896 , - 3051 , - 86 , - 657 , - 1436 , - 2423 , - 290 , - 1693 , - 3304 , - 1795 , - 494 , - 2729 , - 1844 , - 1167 , - 698 , - 437 , - 384 , - 539 , - 902 , - 1473 , - 2252 , - 3239 , - 1106 , - 2509 , - 792 , - 2611 , - 1310 , - 217 , - 2660 , - 1983 , - 1514 , - 1253 , - 1200 , - 1355 , - 1718 , - 2289 , - 3068 , - 727 , - 1922 , - 3325 , - 1608 , - 99 , - 2126 , - 1033 , - 148 , - 2799 , - 2330 , - 2069 , - 2016 , - 2171 , - 2534 , - 3105 , - 556 , - 1543 , - 2738 , - 813 , - 2424 , - 915 , - 2942 , - 1849 , - 964 , - 287 , - 3146 , - 2885 , - 2832 , - 2987 , - 22 , - 593 , - 1372 , - 2359 , - 226 , - 1629 , - 3240 , - 1731 , - 430 , - 2665 , - 1780 , - 1103 , - 634 , - 373 , - 320 , - 475 , - 838 , - 1409 , - 2188 , - 3175 , - 1042 , - 2445 , - 728 , - 2547 , - 1246 , - 153 , - 2596 , - 1919 , - 1450 , - 1189 , - 1136 , - 1291 , - 1654 , - 2225 , - 3004 , - 663 , - 1858 , - 3261 , - 1544 , - 35 , - 2062 , - 969 , - 84 , - 2735 , - 2266 , - 2005 , - 1952 , - 2107 , - 2470 , - 3041 , - 492 , - 1479 , - 2674 , - 749 , - 2360 , - 851 , - 2878 , - 1785 , - 900 , - 223 , - 3082 , - 2821 , - 2768 , - 2923 , - 3286 , - 529 , - 1308 , - 2295 , - 162 , - 1565 , - 3176 , - 1667 , - 366 , - 2601 , - 1716 , - 1039 , - 570 , - 309 , - 256 , - 411 , - 774 , - 1345 , - 2124 , - 3111 , - 978 , - 2381 , - 664 , - 2483 , - 1182 , - 89 , - 2532 , - 1855 , - 1386 , - 1125 , - 1072 , - 1227 , - 1590 , - 2161 , - 2940 , - 599 , - 1794 , - 3197 , - 1480 , - 3299 , - 1998 , - 905 , - 20 , - 2671 , - 2202 , - 1941 , - 1888 , - 2043 , - 2406 , - 2977 , - 428 , - 1415 , - 2610 , - 685 , - 2296 , - 787 , - 2814 , - 1721 , - 836 , - 159 , - 3018 , - 2757 , - 2704 , - 2859 , - 3222 , - 465 , - 1244 , - 2231 , - 98 , - 1501 , - 3112 , - 1603 , - 302 , - 2537 , - 1652 , - 975 , - 506 , - 245 , - 192 , - 347 , - 710 , - 1281 , - 2060 , - 3047 , - 914 , - 2317 , - 600 , - 2419 , - 1118 , - 25 , - 2468 , - 1791 , - 1322 , - 1061 , - 1008 , - 1163 , - 1526 , - 2097 , - 2876 , - 535 , - 1730 , - 3133 , - 1416 , - 3235 , - 1934 , - 841 , - 3284 , - 2607 , - 2138 , - 1877 , - 1824 , - 1979 , - 2342 , - 2913 , - 364 , - 1351 , - 2546 , - 621 , - 2232 , - 723 , - 2750 , - 1657 , - 772 , - 95 , - 2954 , - 2693 , - 2640 , - 2795 , - 3158 , - 401 , - 1180 , - 2167 , - 34 , - 1437 , - 3048 , - 1539 , - 238 , - 2473 , - 1588 , - 911 , - 442 , - 181 , - 128 , - 283 , - 646 , - 1217 , - 1996 , - 2983 , - 850 , - 2253 , - 536 , - 2355 , - 1054 , - 3289 , - 2404 , - 1727 , - 1258 , - 997 , - 944 , - 1099 , - 1462 , - 2033 , - 2812 , - 471 , - 1666 , - 3069 , - 1352 , - 3171 , - 1870 , - 777 , - 3220 , - 2543 , - 2074 , - 1813 , - 1760 , - 1915 , - 2278 , - 2849 , - 300 , - 1287 , - 2482 , - 557 , - 2168 , - 659 , - 2686 , - 1593 , - 708 , - 31 , - 2890 , - 2629 , - 2576 , - 2731 , - 3094 , - 337 , - 1116 , - 2103 , - 3298 , - 1373 , - 2984 , - 1475 , - 174 , - 2409 , - 1524 , - 847 , - 378 , - 117 , - 64 , - 219 , - 582 , - 1153 , - 1932 , - 2919 , - 786 , - 2189 , - 472 , - 2291 , - 990 , - 3225 , - 2340 , - 1663 , - 1194 , - 933 , - 880 , - 1035 , - 1398 , - 1969 , - 2748 , - 407 , - 1602 , - 3005 , - 1288 , - 3107 , - 1806 , - 713 , - 3156 , - 2479 , - 2010 , - 1749 , - 1696 , - 1851 , - 2214 , - 2785 , - 236 , - 1223 , - 2418 , - 493 , - 2104 , - 595 , - 2622 , - 1529 , - 644 , - 3295 , - 2826 , - 2565 , - 2512 , - 2667 , - 3030 , - 273 , - 1052 , - 2039 , - 3234 , - 1309 , - 2920 , - 1411 , - 110 , - 2345 , - 1460 , - 783 , - 314 , - 53 , - 0 , - 263 , - 950 , - 2061 , - 204 , - 2163 , - 1154 , - 569 , - 408 , - 671 , - 1358 , - 2469 , - 612 , - 2571 , - 1562 , - 977 , - 816 , - 1079 , - 1766 , - 2877 , - 1020 , - 2979 , - 1970 , - 1385 , - 1224 , - 1487 , - 2174 , - 3285 , - 1428 , - 3387 , - 2378 , - 1793 , - 1632 , - 1895 , - 2582 , - 301 , - 1836 , - 403 , - 2786 , - 2201 , - 2040 , - 2303 , - 2990 , - 709 , - 2244 , - 811 , - 3194 , - 2609 , - 2448 , - 2711 , - 6 , - 1117 , - 2652 , - 1219 , - 210 , - 3017 , - 2856 , - 3119 , - 414 , - 1525 , - 3060 , - 1627 , - 618 , - 33 , - 3264 , - 135 , - 822 , - 1933 , - 76 , - 2035 , - 1026 , - 441 , - 280 , - 543 , - 1230 , - 2341 , - 484 , - 2443 , - 1434 , - 849 , - 688 , - 951 , - 1638 , - 2749 , - 892 , - 2851 , - 1842 , - 1257 , - 1096 , - 1359 , - 2046 , - 3157 , - 1300 , - 3259 , - 2250 , - 1665 , - 1504 , - 1767 , - 2454 , - 173 , - 1708 , - 275 , - 2658 , - 2073 , - 1912 , - 2175 , - 2862 , - 581 , - 2116 , - 683 , - 3066 , - 2481 , - 2320 , - 2583 , - 3270 , - 989 , - 2524 , - 1091 , - 82 , - 2889 , - 2728 , - 2991 , - 286 , - 1397 , - 2932 , - 1499 , - 490 , - 3297 , - 3136 , - 7 , - 694 , - 1805 , - 3340 , - 1907 , - 898 , - 313 , - 152 , - 415 , - 1102 , - 2213 , - 356 , - 2315 , - 1306 , - 721 , - 560 , - 823 , - 1510 , - 2621 , - 764 , - 2723 , - 1714 , - 1129 , - 968 , - 1231 , - 1918 , - 3029 , - 1172 , - 3131 , - 2122 , - 1537 , - 1376 , - 1639 , - 2326 , - 45 , - 1580 , - 147 , - 2530 , - 1945 , - 1784 , - 2047 , - 2734 , - 453 , - 1988 , - 555 , - 2938 , - 2353 , - 2192 , - 2455 , - 3142 , - 861 , - 2396 , - 963 , - 3346 , - 2761 , - 2600 , - 2863 , - 158 , - 1269 , - 2804 , - 1371 , - 362 , - 3169 , - 3008 , - 3271 , - 566 , - 1677 , - 3212 , - 1779 , - 770 , - 185 , - 24 , - 287 , - 974 , - 2085 , - 228 , - 2187 , - 1178 , - 593 , - 432 , - 695 , - 1382 , - 2493 , - 636 , - 2595 , - 1586 , - 1001 , - 840 , - 1103 , - 1790 , - 2901 , - 1044 , - 3003 , - 1994 , - 1409 , - 1248 , - 1511 , - 2198 , - 3309 , - 1452 , - 19 , - 2402 , - 1817 , - 1656 , - 1919 , - 2606 , - 325 , - 1860 , - 427 , - 2810 , - 2225 , - 2064 , - 2327 , - 3014 , - 733 , - 2268 , - 835 , - 3218 , - 2633 , - 2472 , - 2735 , - 30 , - 1141 , - 2676 , - 1243 , - 234 , - 3041 , - 2880 , - 3143 , - 438 , - 1549 , - 3084 , - 1651 , - 642 , - 57 , - 3288 , - 159 , - 846 , - 1957 , - 100 , - 2059 , - 1050 , - 465 , - 304 , - 567 , - 1254 , - 2365 , - 508 , - 2467 , - 1458 , - 873 , - 712 , - 975 , - 1662 , - 2773 , - 916 , - 2875 , - 1866 , - 1281 , - 1120 , - 1383 , - 2070 , - 3181 , - 1324 , - 3283 , - 2274 , - 1689 , - 1528 , - 1791 , - 2478 , - 197 , - 1732 , - 299 , - 2682 , - 2097 , - 1936 , - 2199 , - 2886 , - 605 , - 2140 , - 707 , - 3090 , - 2505 , - 2344 , - 2607 , - 3294 , - 1013 , - 2548 , - 1115 , - 106 , - 2913 , - 2752 , - 3015 , - 310 , - 1421 , - 2956 , - 1523 , - 514 , - 3321 , - 3160 , - 31 , - 718 , - 1829 , - 3364 , - 1931 , - 922 , - 337 , - 176 , - 439 , - 1126 , - 2237 , - 380 , - 2339 , - 1330 , - 745 , - 584 , - 847 , - 1534 , - 2645 , - 788 , - 2747 , - 1738 , - 1153 , - 992 , - 1255 , - 1942 , - 3053 , - 1196 , - 3155 , - 2146 , - 1561 , - 1400 , - 1663 , - 2350 , - 69 , - 1604 , - 171 , - 2554 , - 1969 , - 1808 , - 2071 , - 2758 , - 477 , - 2012 , - 579 , - 2962 , - 2377 , - 2216 , - 2479 , - 3166 , - 885 , - 2420 , - 987 , - 3370 , - 2785 , - 2624 , - 2887 , - 182 , - 1293 , - 2828 , - 1395 , - 386 , - 3193 , - 3032 , - 3295 , - 590 , - 1701 , - 3236 , - 1803 , - 794 , - 209 , - 48 , - 311 , - 998 , - 2109 , - 252 , - 2211 , - 1202 , - 617 , - 456 , - 719 , - 1406 , - 2517 , - 660 , - 2619 , - 1610 , - 1025 , - 864 , - 1127 , - 1814 , - 2925 , - 1068 , - 3027 , - 2018 , - 1433 , - 1272 , - 1535 , - 2222 , - 3333 , - 1476 , - 43 , - 2426 , - 1841 , - 1680 , - 1943 , - 2630 , - 349 , - 1884 , - 451 , - 2834 , - 2249 , - 2088 , - 2351 , - 3038 , - 757 , - 2292 , - 859 , - 3242 , - 2657 , - 2496 , - 2759 , - 54 , - 1165 , - 2700 , - 1267 , - 258 , - 3065 , - 2904 , - 3167 , - 462 , - 1573 , - 3108 , - 1675 , - 666 , - 81 , - 3312 , - 183 , - 870 , - 1981 , - 124 , - 2083 , - 1074 , - 489 , - 328 , - 591 , - 1278 , - 2389 , - 532 , - 2491 , - 1482 , - 897 , - 736 , - 999 , - 1686 , - 2797 , - 940 , - 2899 , - 1890 , - 1305 , - 1144 , - 1407 , - 2094 , - 3205 , - 1348 , - 3307 , - 2298 , - 1713 , - 1552 , - 1815 , - 2502 , - 221 , - 1756 , - 323 , - 2706 , - 2121 , - 1960 , - 2223 , - 2910 , - 629 , - 2164 , - 731 , - 3114 , - 2529 , - 2368 , - 2631 , - 3318 , - 1037 , - 2572 , - 1139 , - 130 , - 2937 , - 2776 , - 3039 , - 334 , - 1445 , - 2980 , - 1547 , - 538 , - 3345 , - 3184 , - 55 , - 742 , - 1853 , - 3388 , - 1955 , - 946 , - 361 , - 200 , - 463 , - 1150 , - 2261 , - 404 , - 2363 , - 1354 , - 769 , - 608 , - 871 , - 1558 , - 2669 , - 812 , - 2771 , - 1762 , - 1177 , - 1016 , - 1279 , - 1966 , - 3077 , - 1220 , - 3179 , - 2170 , - 1585 , - 1424 , - 1687 , - 2374 , - 93 , - 1628 , - 195 , - 2578 , - 1993 , - 1832 , - 2095 , - 2782 , - 501 , - 2036 , - 603 , - 2986 , - 2401 , - 2240 , - 2503 , - 3190 , - 909 , - 2444 , - 1011 , - 2 , - 2809 , - 2648 , - 2911 , - 206 , - 1317 , - 2852 , - 1419 , - 410 , - 3217 , - 3056 , - 3319 , - 614 , - 1725 , - 3260 , - 1827 , - 818 , - 233 , - 72 , - 335 , - 1022 , - 2133 , - 276 , - 2235 , - 1226 , - 641 , - 480 , - 743 , - 1430 , - 2541 , - 684 , - 2643 , - 1634 , - 1049 , - 888 , - 1151 , - 1838 , - 2949 , - 1092 , - 3051 , - 2042 , - 1457 , - 1296 , - 1559 , - 2246 , - 3357 , - 1500 , - 67 , - 2450 , - 1865 , - 1704 , - 1967 , - 2654 , - 373 , - 1908 , - 475 , - 2858 , - 2273 , - 2112 , - 2375 , - 3062 , - 781 , - 2316 , - 883 , - 3266 , - 2681 , - 2520 , - 2783 , - 78 , - 1189 , - 2724 , - 1291 , - 282 , - 3089 , - 2928 , - 3191 , - 486 , - 1597 , - 3132 , - 1699 , - 690 , - 105 , - 3336 , - 207 , - 894 , - 2005 , - 148 , - 2107 , - 1098 , - 513 , - 352 , - 615 , - 1302 , - 2413 , - 556 , - 2515 , - 1506 , - 921 , - 760 , - 1023 , - 1710 , - 2821 , - 964 , - 2923 , - 1914 , - 1329 , - 1168 , - 1431 , - 2118 , - 3229 , - 1372 , - 3331 , - 2322 , - 1737 , - 1576 , - 1839 , - 2526 , - 245 , - 1780 , - 347 , - 2730 , - 2145 , - 1984 , - 2247 , - 2934 , - 653 , - 2188 , - 755 , - 3138 , - 2553 , - 2392 , - 2655 , - 3342 , - 1061 , - 2596 , - 1163 , - 154 , - 2961 , - 2800 , - 3063 , - 358 , - 1469 , - 3004 , - 1571 , - 562 , - 3369 , - 3208 , - 79 , - 766 , - 1877 , - 20 , - 1979 , - 970 , - 385 , - 224 , - 487 , - 1174 , - 2285 , - 428 , - 2387 , - 1378 , - 793 , - 632 , - 895 , - 1582 , - 2693 , - 836 , - 2795 , - 1786 , - 1201 , - 1040 , - 1303 , - 1990 , - 3101 , - 1244 , - 3203 , - 2194 , - 1609 , - 1448 , - 1711 , - 2398 , - 117 , - 1652 , - 219 , - 2602 , - 2017 , - 1856 , - 2119 , - 2806 , - 525 , - 2060 , - 627 , - 3010 , - 2425 , - 2264 , - 2527 , - 3214 , - 933 , - 2468 , - 1035 , - 26 , - 2833 , - 2672 , - 2935 , - 230 , - 1341 , - 2876 , - 1443 , - 434 , - 3241 , - 3080 , - 3343 , - 638 , - 1749 , - 3284 , - 1851 , - 842 , - 257 , - 96 , - 359 , - 1046 , - 2157 , - 300 , - 2259 , - 1250 , - 665 , - 504 , - 767 , - 1454 , - 2565 , - 708 , - 2667 , - 1658 , - 1073 , - 912 , - 1175 , - 1862 , - 2973 , - 1116 , - 3075 , - 2066 , - 1481 , - 1320 , - 1583 , - 2270 , - 3381 , - 1524 , - 91 , - 2474 , - 1889 , - 1728 , - 1991 , - 2678 , - 397 , - 1932 , - 499 , - 2882 , - 2297 , - 2136 , - 2399 , - 3086 , - 805 , - 2340 , - 907 , - 3290 , - 2705 , - 2544 , - 2807 , - 102 , - 1213 , - 2748 , - 1315 , - 306 , - 3113 , - 2952 , - 3215 , - 510 , - 1621 , - 3156 , - 1723 , - 714 , - 129 , - 3360 , - 231 , - 918 , - 2029 , - 172 , - 2131 , - 1122 , - 537 , - 376 , - 639 , - 1326 , - 2437 , - 580 , - 2539 , - 1530 , - 945 , - 784 , - 1047 , - 1734 , - 2845 , - 988 , - 2947 , - 1938 , - 1353 , - 1192 , - 1455 , - 2142 , - 3253 , - 1396 , - 3355 , - 2346 , - 1761 , - 1600 , - 1863 , - 2550 , - 269 , - 1804 , - 371 , - 2754 , - 2169 , - 2008 , - 2271 , - 2958 , - 677 , - 2212 , - 779 , - 3162 , - 2577 , - 2416 , - 2679 , - 3366 , - 1085 , - 2620 , - 1187 , - 178 , - 2985 , - 2824 , - 3087 , - 382 , - 1493 , - 3028 , - 1595 , - 586 , - 1 , - 3232 , - 103 , - 790 , - 1901 , - 44 , - 2003 , - 994 , - 409 , - 248 , - 511 , - 1198 , - 2309 , - 452 , - 2411 , - 1402 , - 817 , - 656 , - 919 , - 1606 , - 2717 , - 860 , - 2819 , - 1810 , - 1225 , - 1064 , - 1327 , - 2014 , - 3125 , - 1268 , - 3227 , - 2218 , - 1633 , - 1472 , - 1735 , - 2422 , - 141 , - 1676 , - 243 , - 2626 , - 2041 , - 1880 , - 2143 , - 2830 , - 549 , - 2084 , - 651 , - 3034 , - 2449 , - 2288 , - 2551 , - 3238 , - 957 , - 2492 , - 1059 , - 50 , - 2857 , - 2696 , - 2959 , - 254 , - 1365 , - 2900 , - 1467 , - 458 , - 3265 , - 3104 , - 3367 , - 662 , - 1773 , - 3308 , - 1875 , - 866 , - 281 , - 120 , - 383 , - 1070 , - 2181 , - 324 , - 2283 , - 1274 , - 689 , - 528 , - 791 , - 1478 , - 2589 , - 732 , - 2691 , - 1682 , - 1097 , - 936 , - 1199 , - 1886 , - 2997 , - 1140 , - 3099 , - 2090 , - 1505 , - 1344 , - 1607 , - 2294 , - 13 , - 1548 , - 115 , - 2498 , - 1913 , - 1752 , - 2015 , - 2702 , - 421 , - 1956 , - 523 , - 2906 , - 2321 , - 2160 , - 2423 , - 3110 , - 829 , - 2364 , - 931 , - 3314 , - 2729 , - 2568 , - 2831 , - 126 , - 1237 , - 2772 , - 1339 , - 330 , - 3137 , - 2976 , - 3239 , - 534 , - 1645 , - 3180 , - 1747 , - 738 , - 153 , - 3384 , - 255 , - 942 , - 2053 , - 196 , - 2155 , - 1146 , - 561 , - 400 , - 663 , - 1350 , - 2461 , - 604 , - 2563 , - 1554 , - 969 , - 808 , - 1071 , - 1758 , - 2869 , - 1012 , - 2971 , - 1962 , - 1377 , - 1216 , - 1479 , - 2166 , - 3277 , - 1420 , - 3379 , - 2370 , - 1785 , - 1624 , - 1887 , - 2574 , - 293 , - 1828 , - 395 , - 2778 , - 2193 , - 2032 , - 2295 , - 2982 , - 701 , - 2236 , - 803 , - 3186 , - 2601 , - 2440 , - 2703 , - 3390 , - 1109 , - 2644 , - 1211 , - 202 , - 3009 , - 2848 , - 3111 , - 406 , - 1517 , - 3052 , - 1619 , - 610 , - 25 , - 3256 , - 127 , - 814 , - 1925 , - 68 , - 2027 , - 1018 , - 433 , - 272 , - 535 , - 1222 , - 2333 , - 476 , - 2435 , - 1426 , - 841 , - 680 , - 943 , - 1630 , - 2741 , - 884 , - 2843 , - 1834 , - 1249 , - 1088 , - 1351 , - 2038 , - 3149 , - 1292 , - 3251 , - 2242 , - 1657 , - 1496 , - 1759 , - 2446 , - 165 , - 1700 , - 267 , - 2650 , - 2065 , - 1904 , - 2167 , - 2854 , - 573 , - 2108 , - 675 , - 3058 , - 2473 , - 2312 , - 2575 , - 3262 , - 981 , - 2516 , - 1083 , - 74 , - 2881 , - 2720 , - 2983 , - 278 , - 1389 , - 2924 , - 1491 , - 482 , - 3289 , - 3128 , - 3391 , - 686 , - 1797 , - 3332 , - 1899 , - 890 , - 305 , - 144 , - 407 , - 1094 , - 2205 , - 348 , - 2307 , - 1298 , - 713 , - 552 , - 815 , - 1502 , - 2613 , - 756 , - 2715 , - 1706 , - 1121 , - 960 , - 1223 , - 1910 , - 3021 , - 1164 , - 3123 , - 2114 , - 1529 , - 1368 , - 1631 , - 2318 , - 37 , - 1572 , - 139 , - 2522 , - 1937 , - 1776 , - 2039 , - 2726 , - 445 , - 1980 , - 547 , - 2930 , - 2345 , - 2184 , - 2447 , - 3134 , - 853 , - 2388 , - 955 , - 3338 , - 2753 , - 2592 , - 2855 , - 150 , - 1261 , - 2796 , - 1363 , - 354 , - 3161 , - 3000 , - 3263 , - 558 , - 1669 , - 3204 , - 1771 , - 762 , - 177 , - 16 , - 279 , - 966 , - 2077 , - 220 , - 2179 , - 1170 , - 585 , - 424 , - 687 , - 1374 , - 2485 , - 628 , - 2587 , - 1578 , - 993 , - 832 , - 1095 , - 1782 , - 2893 , - 1036 , - 2995 , - 1986 , - 1401 , - 1240 , - 1503 , - 2190 , - 3301 , - 1444 , - 11 , - 2394 , - 1809 , - 1648 , - 1911 , - 2598 , - 317 , - 1852 , - 419 , - 2802 , - 2217 , - 2056 , - 2319 , - 3006 , - 725 , - 2260 , - 827 , - 3210 , - 2625 , - 2464 , - 2727 , - 22 , - 1133 , - 2668 , - 1235 , - 226 , - 3033 , - 2872 , - 3135 , - 430 , - 1541 , - 3076 , - 1643 , - 634 , - 49 , - 3280 , - 151 , - 838 , - 1949 , - 92 , - 2051 , - 1042 , - 457 , - 296 , - 559 , - 1246 , - 2357 , - 500 , - 2459 , - 1450 , - 865 , - 704 , - 967 , - 1654 , - 2765 , - 908 , - 2867 , - 1858 , - 1273 , - 1112 , - 1375 , - 2062 , - 3173 , - 1316 , - 3275 , - 2266 , - 1681 , - 1520 , - 1783 , - 2470 , - 189 , - 1724 , - 291 , - 2674 , - 2089 , - 1928 , - 2191 , - 2878 , - 597 , - 2132 , - 699 , - 3082 , - 2497 , - 2336 , - 2599 , - 3286 , - 1005 , - 2540 , - 1107 , - 98 , - 2905 , - 2744 , - 3007 , - 302 , - 1413 , - 2948 , - 1515 , - 506 , - 3313 , - 3152 , - 23 , - 710 , - 1821 , - 3356 , - 1923 , - 914 , - 329 , - 168 , - 431 , - 1118 , - 2229 , - 372 , - 2331 , - 1322 , - 737 , - 576 , - 839 , - 1526 , - 2637 , - 780 , - 2739 , - 1730 , - 1145 , - 984 , - 1247 , - 1934 , - 3045 , - 1188 , - 3147 , - 2138 , - 1553 , - 1392 , - 1655 , - 2342 , - 61 , - 1596 , - 163 , - 2546 , - 1961 , - 1800 , - 2063 , - 2750 , - 469 , - 2004 , - 571 , - 2954 , - 2369 , - 2208 , - 2471 , - 3158 , - 877 , - 2412 , - 979 , - 3362 , - 2777 , - 2616 , - 2879 , - 174 , - 1285 , - 2820 , - 1387 , - 378 , - 3185 , - 3024 , - 3287 , - 582 , - 1693 , - 3228 , - 1795 , - 786 , - 201 , - 40 , - 303 , - 990 , - 2101 , - 244 , - 2203 , - 1194 , - 609 , - 448 , - 711 , - 1398 , - 2509 , - 652 , - 2611 , - 1602 , - 1017 , - 856 , - 1119 , - 1806 , - 2917 , - 1060 , - 3019 , - 2010 , - 1425 , - 1264 , - 1527 , - 2214 , - 3325 , - 1468 , - 35 , - 2418 , - 1833 , - 1672 , - 1935 , - 2622 , - 341 , - 1876 , - 443 , - 2826 , - 2241 , - 2080 , - 2343 , - 3030 , - 749 , - 2284 , - 851 , - 3234 , - 2649 , - 2488 , - 2751 , - 46 , - 1157 , - 2692 , - 1259 , - 250 , - 3057 , - 2896 , - 3159 , - 454 , - 1565 , - 3100 , - 1667 , - 658 , - 73 , - 3304 , - 175 , - 862 , - 1973 , - 116 , - 2075 , - 1066 , - 481 , - 320 , - 583 , - 1270 , - 2381 , - 524 , - 2483 , - 1474 , - 889 , - 728 , - 991 , - 1678 , - 2789 , - 932 , - 2891 , - 1882 , - 1297 , - 1136 , - 1399 , - 2086 , - 3197 , - 1340 , - 3299 , - 2290 , - 1705 , - 1544 , - 1807 , - 2494 , - 213 , - 1748 , - 315 , - 2698 , - 2113 , - 1952 , - 2215 , - 2902 , - 621 , - 2156 , - 723 , - 3106 , - 2521 , - 2360 , - 2623 , - 3310 , - 1029 , - 2564 , - 1131 , - 122 , - 2929 , - 2768 , - 3031 , - 326 , - 1437 , - 2972 , - 1539 , - 530 , - 3337 , - 3176 , - 47 , - 734 , - 1845 , - 3380 , - 1947 , - 938 , - 353 , - 192 , - 455 , - 1142 , - 2253 , - 396 , - 2355 , - 1346 , - 761 , - 600 , - 863 , - 1550 , - 2661 , - 804 , - 2763 , - 1754 , - 1169 , - 1008 , - 1271 , - 1958 , - 3069 , - 1212 , - 3171 , - 2162 , - 1577 , - 1416 , - 1679 , - 2366 , - 85 , - 1620 , - 187 , - 2570 , - 1985 , - 1824 , - 2087 , - 2774 , - 493 , - 2028 , - 595 , - 2978 , - 2393 , - 2232 , - 2495 , - 3182 , - 901 , - 2436 , - 1003 , - 3386 , - 2801 , - 2640 , - 2903 , - 198 , - 1309 , - 2844 , - 1411 , - 402 , - 3209 , - 3048 , - 3311 , - 606 , - 1717 , - 3252 , - 1819 , - 810 , - 225 , - 64 , - 327 , - 1014 , - 2125 , - 268 , - 2227 , - 1218 , - 633 , - 472 , - 735 , - 1422 , - 2533 , - 676 , - 2635 , - 1626 , - 1041 , - 880 , - 1143 , - 1830 , - 2941 , - 1084 , - 3043 , - 2034 , - 1449 , - 1288 , - 1551 , - 2238 , - 3349 , - 1492 , - 59 , - 2442 , - 1857 , - 1696 , - 1959 , - 2646 , - 365 , - 1900 , - 467 , - 2850 , - 2265 , - 2104 , - 2367 , - 3054 , - 773 , - 2308 , - 875 , - 3258 , - 2673 , - 2512 , - 2775 , - 70 , - 1181 , - 2716 , - 1283 , - 274 , - 3081 , - 2920 , - 3183 , - 478 , - 1589 , - 3124 , - 1691 , - 682 , - 97 , - 3328 , - 199 , - 886 , - 1997 , - 140 , - 2099 , - 1090 , - 505 , - 344 , - 607 , - 1294 , - 2405 , - 548 , - 2507 , - 1498 , - 913 , - 752 , - 1015 , - 1702 , - 2813 , - 956 , - 2915 , - 1906 , - 1321 , - 1160 , - 1423 , - 2110 , - 3221 , - 1364 , - 3323 , - 2314 , - 1729 , - 1568 , - 1831 , - 2518 , - 237 , - 1772 , - 339 , - 2722 , - 2137 , - 1976 , - 2239 , - 2926 , - 645 , - 2180 , - 747 , - 3130 , - 2545 , - 2384 , - 2647 , - 3334 , - 1053 , - 2588 , - 1155 , - 146 , - 2953 , - 2792 , - 3055 , - 350 , - 1461 , - 2996 , - 1563 , - 554 , - 3361 , - 3200 , - 71 , - 758 , - 1869 , - 12 , - 1971 , - 962 , - 377 , - 216 , - 479 , - 1166 , - 2277 , - 420 , - 2379 , - 1370 , - 785 , - 624 , - 887 , - 1574 , - 2685 , - 828 , - 2787 , - 1778 , - 1193 , - 1032 , - 1295 , - 1982 , - 3093 , - 1236 , - 3195 , - 2186 , - 1601 , - 1440 , - 1703 , - 2390 , - 109 , - 1644 , - 211 , - 2594 , - 2009 , - 1848 , - 2111 , - 2798 , - 517 , - 2052 , - 619 , - 3002 , - 2417 , - 2256 , - 2519 , - 3206 , - 925 , - 2460 , - 1027 , - 18 , - 2825 , - 2664 , - 2927 , - 222 , - 1333 , - 2868 , - 1435 , - 426 , - 3233 , - 3072 , - 3335 , - 630 , - 1741 , - 3276 , - 1843 , - 834 , - 249 , - 88 , - 351 , - 1038 , - 2149 , - 292 , - 2251 , - 1242 , - 657 , - 496 , - 759 , - 1446 , - 2557 , - 700 , - 2659 , - 1650 , - 1065 , - 904 , - 1167 , - 1854 , - 2965 , - 1108 , - 3067 , - 2058 , - 1473 , - 1312 , - 1575 , - 2262 , - 3373 , - 1516 , - 83 , - 2466 , - 1881 , - 1720 , - 1983 , - 2670 , - 389 , - 1924 , - 491 , - 2874 , - 2289 , - 2128 , - 2391 , - 3078 , - 797 , - 2332 , - 899 , - 3282 , - 2697 , - 2536 , - 2799 , - 94 , - 1205 , - 2740 , - 1307 , - 298 , - 3105 , - 2944 , - 3207 , - 502 , - 1613 , - 3148 , - 1715 , - 706 , - 121 , - 3352 , - 223 , - 910 , - 2021 , - 164 , - 2123 , - 1114 , - 529 , - 368 , - 631 , - 1318 , - 2429 , - 572 , - 2531 , - 1522 , - 937 , - 776 , - 1039 , - 1726 , - 2837 , - 980 , - 2939 , - 1930 , - 1345 , - 1184 , - 1447 , - 2134 , - 3245 , - 1388 , - 3347 , - 2338 , - 1753 , - 1592 , - 1855 , - 2542 , - 261 , - 1796 , - 363 , - 2746 , - 2161 , - 2000 , - 2263 , - 2950 , - 669 , - 2204 , - 771 , - 3154 , - 2569 , - 2408 , - 2671 , - 3358 , - 1077 , - 2612 , - 1179 , - 170 , - 2977 , - 2816 , - 3079 , - 374 , - 1485 , - 3020 , - 1587 , - 578 , - 3385 , - 3224 , - 95 , - 782 , - 1893 , - 36 , - 1995 , - 986 , - 401 , - 240 , - 503 , - 1190 , - 2301 , - 444 , - 2403 , - 1394 , - 809 , - 648 , - 911 , - 1598 , - 2709 , - 852 , - 2811 , - 1802 , - 1217 , - 1056 , - 1319 , - 2006 , - 3117 , - 1260 , - 3219 , - 2210 , - 1625 , - 1464 , - 1727 , - 2414 , - 133 , - 1668 , - 235 , - 2618 , - 2033 , - 1872 , - 2135 , - 2822 , - 541 , - 2076 , - 643 , - 3026 , - 2441 , - 2280 , - 2543 , - 3230 , - 949 , - 2484 , - 1051 , - 42 , - 2849 , - 2688 , - 2951 , - 246 , - 1357 , - 2892 , - 1459 , - 450 , - 3257 , - 3096 , - 3359 , - 654 , - 1765 , - 3300 , - 1867 , - 858 , - 273 , - 112 , - 375 , - 1062 , - 2173 , - 316 , - 2275 , - 1266 , - 681 , - 520 , - 783 , - 1470 , - 2581 , - 724 , - 2683 , - 1674 , - 1089 , - 928 , - 1191 , - 1878 , - 2989 , - 1132 , - 3091 , - 2082 , - 1497 , - 1336 , - 1599 , - 2286 , - 5 , - 1540 , - 107 , - 2490 , - 1905 , - 1744 , - 2007 , - 2694 , - 413 , - 1948 , - 515 , - 2898 , - 2313 , - 2152 , - 2415 , - 3102 , - 821 , - 2356 , - 923 , - 3306 , - 2721 , - 2560 , - 2823 , - 118 , - 1229 , - 2764 , - 1331 , - 322 , - 3129 , - 2968 , - 3231 , - 526 , - 1637 , - 3172 , - 1739 , - 730 , - 145 , - 3376 , - 247 , - 934 , - 2045 , - 188 , - 2147 , - 1138 , - 553 , - 392 , - 655 , - 1342 , - 2453 , - 596 , - 2555 , - 1546 , - 961 , - 800 , - 1063 , - 1750 , - 2861 , - 1004 , - 2963 , - 1954 , - 1369 , - 1208 , - 1471 , - 2158 , - 3269 , - 1412 , - 3371 , - 2362 , - 1777 , - 1616 , - 1879 , - 2566 , - 285 , - 1820 , - 387 , - 2770 , - 2185 , - 2024 , - 2287 , - 2974 , - 693 , - 2228 , - 795 , - 3178 , - 2593 , - 2432 , - 2695 , - 3382 , - 1101 , - 2636 , - 1203 , - 194 , - 3001 , - 2840 , - 3103 , - 398 , - 1509 , - 3044 , - 1611 , - 602 , - 17 , - 3248 , - 119 , - 806 , - 1917 , - 60 , - 2019 , - 1010 , - 425 , - 264 , - 527 , - 1214 , - 2325 , - 468 , - 2427 , - 1418 , - 833 , - 672 , - 935 , - 1622 , - 2733 , - 876 , - 2835 , - 1826 , - 1241 , - 1080 , - 1343 , - 2030 , - 3141 , - 1284 , - 3243 , - 2234 , - 1649 , - 1488 , - 1751 , - 2438 , - 157 , - 1692 , - 259 , - 2642 , - 2057 , - 1896 , - 2159 , - 2846 , - 565 , - 2100 , - 667 , - 3050 , - 2465 , - 2304 , - 2567 , - 3254 , - 973 , - 2508 , - 1075 , - 66 , - 2873 , - 2712 , - 2975 , - 270 , - 1381 , - 2916 , - 1483 , - 474 , - 3281 , - 3120 , - 3383 , - 678 , - 1789 , - 3324 , - 1891 , - 882 , - 297 , - 136 , - 399 , - 1086 , - 2197 , - 340 , - 2299 , - 1290 , - 705 , - 544 , - 807 , - 1494 , - 2605 , - 748 , - 2707 , - 1698 , - 1113 , - 952 , - 1215 , - 1902 , - 3013 , - 1156 , - 3115 , - 2106 , - 1521 , - 1360 , - 1623 , - 2310 , - 29 , - 1564 , - 131 , - 2514 , - 1929 , - 1768 , - 2031 , - 2718 , - 437 , - 1972 , - 539 , - 2922 , - 2337 , - 2176 , - 2439 , - 3126 , - 845 , - 2380 , - 947 , - 3330 , - 2745 , - 2584 , - 2847 , - 142 , - 1253 , - 2788 , - 1355 , - 346 , - 3153 , - 2992 , - 3255 , - 550 , - 1661 , - 3196 , - 1763 , - 754 , - 169 , - 8 , - 271 , - 958 , - 2069 , - 212 , - 2171 , - 1162 , - 577 , - 416 , - 679 , - 1366 , - 2477 , - 620 , - 2579 , - 1570 , - 985 , - 824 , - 1087 , - 1774 , - 2885 , - 1028 , - 2987 , - 1978 , - 1393 , - 1232 , - 1495 , - 2182 , - 3293 , - 1436 , - 3 , - 2386 , - 1801 , - 1640 , - 1903 , - 2590 , - 309 , - 1844 , - 411 , - 2794 , - 2209 , - 2048 , - 2311 , - 2998 , - 717 , - 2252 , - 819 , - 3202 , - 2617 , - 2456 , - 2719 , - 14 , - 1125 , - 2660 , - 1227 , - 218 , - 3025 , - 2864 , - 3127 , - 422 , - 1533 , - 3068 , - 1635 , - 626 , - 41 , - 3272 , - 143 , - 830 , - 1941 , - 84 , - 2043 , - 1034 , - 449 , - 288 , - 551 , - 1238 , - 2349 , - 492 , - 2451 , - 1442 , - 857 , - 696 , - 959 , - 1646 , - 2757 , - 900 , - 2859 , - 1850 , - 1265 , - 1104 , - 1367 , - 2054 , - 3165 , - 1308 , - 3267 , - 2258 , - 1673 , - 1512 , - 1775 , - 2462 , - 181 , - 1716 , - 283 , - 2666 , - 2081 , - 1920 , - 2183 , - 2870 , - 589 , - 2124 , - 691 , - 3074 , - 2489 , - 2328 , - 2591 , - 3278 , - 997 , - 2532 , - 1099 , - 90 , - 2897 , - 2736 , - 2999 , - 294 , - 1405 , - 2940 , - 1507 , - 498 , - 3305 , - 3144 , - 15 , - 702 , - 1813 , - 3348 , - 1915 , - 906 , - 321 , - 160 , - 423 , - 1110 , - 2221 , - 364 , - 2323 , - 1314 , - 729 , - 568 , - 831 , - 1518 , - 2629 , - 772 , - 2731 , - 1722 , - 1137 , - 976 , - 1239 , - 1926 , - 3037 , - 1180 , - 3139 , - 2130 , - 1545 , - 1384 , - 1647 , - 2334 , - 53 , - 1588 , - 155 , - 2538 , - 1953 , - 1792 , - 2055 , - 2742 , - 461 , - 1996 , - 563 , - 2946 , - 2361 , - 2200 , - 2463 , - 3150 , - 869 , - 2404 , - 971 , - 3354 , - 2769 , - 2608 , - 2871 , - 166 , - 1277 , - 2812 , - 1379 , - 370 , - 3177 , - 3016 , - 3279 , - 574 , - 1685 , - 3220 , - 1787 , - 778 , - 193 , - 32 , - 295 , - 982 , - 2093 , - 236 , - 2195 , - 1186 , - 601 , - 440 , - 703 , - 1390 , - 2501 , - 644 , - 2603 , - 1594 , - 1009 , - 848 , - 1111 , - 1798 , - 2909 , - 1052 , - 3011 , - 2002 , - 1417 , - 1256 , - 1519 , - 2206 , - 3317 , - 1460 , - 27 , - 2410 , - 1825 , - 1664 , - 1927 , - 2614 , - 333 , - 1868 , - 435 , - 2818 , - 2233 , - 2072 , - 2335 , - 3022 , - 741 , - 2276 , - 843 , - 3226 , - 2641 , - 2480 , - 2743 , - 38 , - 1149 , - 2684 , - 1251 , - 242 , - 3049 , - 2888 , - 3151 , - 446 , - 1557 , - 3092 , - 1659 , - 650 , - 65 , - 3296 , - 167 , - 854 , - 1965 , - 108 , - 2067 , - 1058 , - 473 , - 312 , - 575 , - 1262 , - 2373 , - 516 , - 2475 , - 1466 , - 881 , - 720 , - 983 , - 1670 , - 2781 , - 924 , - 2883 , - 1874 , - 1289 , - 1128 , - 1391 , - 2078 , - 3189 , - 1332 , - 3291 , - 2282 , - 1697 , - 1536 , - 1799 , - 2486 , - 205 , - 1740 , - 307 , - 2690 , - 2105 , - 1944 , - 2207 , - 2894 , - 613 , - 2148 , - 715 , - 3098 , - 2513 , - 2352 , - 2615 , - 3302 , - 1021 , - 2556 , - 1123 , - 114 , - 2921 , - 2760 , - 3023 , - 318 , - 1429 , - 2964 , - 1531 , - 522 , - 3329 , - 3168 , - 39 , - 726 , - 1837 , - 3372 , - 1939 , - 930 , - 345 , - 184 , - 447 , - 1134 , - 2245 , - 388 , - 2347 , - 1338 , - 753 , - 592 , - 855 , - 1542 , - 2653 , - 796 , - 2755 , - 1746 , - 1161 , - 1000 , - 1263 , - 1950 , - 3061 , - 1204 , - 3163 , - 2154 , - 1569 , - 1408 , - 1671 , - 2358 , - 77 , - 1612 , - 179 , - 2562 , - 1977 , - 1816 , - 2079 , - 2766 , - 485 , - 2020 , - 587 , - 2970 , - 2385 , - 2224 , - 2487 , - 3174 , - 893 , - 2428 , - 995 , - 3378 , - 2793 , - 2632 , - 2895 , - 190 , - 1301 , - 2836 , - 1403 , - 394 , - 3201 , - 3040 , - 3303 , - 598 , - 1709 , - 3244 , - 1811 , - 802 , - 217 , - 56 , - 319 , - 1006 , - 2117 , - 260 , - 2219 , - 1210 , - 625 , - 464 , - 727 , - 1414 , - 2525 , - 668 , - 2627 , - 1618 , - 1033 , - 872 , - 1135 , - 1822 , - 2933 , - 1076 , - 3035 , - 2026 , - 1441 , - 1280 , - 1543 , - 2230 , - 3341 , - 1484 , - 51 , - 2434 , - 1849 , - 1688 , - 1951 , - 2638 , - 357 , - 1892 , - 459 , - 2842 , - 2257 , - 2096 , - 2359 , - 3046 , - 765 , - 2300 , - 867 , - 3250 , - 2665 , - 2504 , - 2767 , - 62 , - 1173 , - 2708 , - 1275 , - 266 , - 3073 , - 2912 , - 3175 , - 470 , - 1581 , - 3116 , - 1683 , - 674 , - 89 , - 3320 , - 191 , - 878 , - 1989 , - 132 , - 2091 , - 1082 , - 497 , - 336 , - 599 , - 1286 , - 2397 , - 540 , - 2499 , - 1490 , - 905 , - 744 , - 1007 , - 1694 , - 2805 , - 948 , - 2907 , - 1898 , - 1313 , - 1152 , - 1415 , - 2102 , - 3213 , - 1356 , - 3315 , - 2306 , - 1721 , - 1560 , - 1823 , - 2510 , - 229 , - 1764 , - 331 , - 2714 , - 2129 , - 1968 , - 2231 , - 2918 , - 637 , - 2172 , - 739 , - 3122 , - 2537 , - 2376 , - 2639 , - 3326 , - 1045 , - 2580 , - 1147 , - 138 , - 2945 , - 2784 , - 3047 , - 342 , - 1453 , - 2988 , - 1555 , - 546 , - 3353 , - 3192 , - 63 , - 750 , - 1861 , - 4 , - 1963 , - 954 , - 369 , - 208 , - 471 , - 1158 , - 2269 , - 412 , - 2371 , - 1362 , - 777 , - 616 , - 879 , - 1566 , - 2677 , - 820 , - 2779 , - 1770 , - 1185 , - 1024 , - 1287 , - 1974 , - 3085 , - 1228 , - 3187 , - 2178 , - 1593 , - 1432 , - 1695 , - 2382 , - 101 , - 1636 , - 203 , - 2586 , - 2001 , - 1840 , - 2103 , - 2790 , - 509 , - 2044 , - 611 , - 2994 , - 2409 , - 2248 , - 2511 , - 3198 , - 917 , - 2452 , - 1019 , - 10 , - 2817 , - 2656 , - 2919 , - 214 , - 1325 , - 2860 , - 1427 , - 418 , - 3225 , - 3064 , - 3327 , - 622 , - 1733 , - 3268 , - 1835 , - 826 , - 241 , - 80 , - 343 , - 1030 , - 2141 , - 284 , - 2243 , - 1234 , - 649 , - 488 , - 751 , - 1438 , - 2549 , - 692 , - 2651 , - 1642 , - 1057 , - 896 , - 1159 , - 1846 , - 2957 , - 1100 , - 3059 , - 2050 , - 1465 , - 1304 , - 1567 , - 2254 , - 3365 , - 1508 , - 75 , - 2458 , - 1873 , - 1712 , - 1975 , - 2662 , - 381 , - 1916 , - 483 , - 2866 , - 2281 , - 2120 , - 2383 , - 3070 , - 789 , - 2324 , - 891 , - 3274 , - 2689 , - 2528 , - 2791 , - 86 , - 1197 , - 2732 , - 1299 , - 290 , - 3097 , - 2936 , - 3199 , - 494 , - 1605 , - 3140 , - 1707 , - 698 , - 113 , - 3344 , - 215 , - 902 , - 2013 , - 156 , - 2115 , - 1106 , - 521 , - 360 , - 623 , - 1310 , - 2421 , - 564 , - 2523 , - 1514 , - 929 , - 768 , - 1031 , - 1718 , - 2829 , - 972 , - 2931 , - 1922 , - 1337 , - 1176 , - 1439 , - 2126 , - 3237 , - 1380 , - 3339 , - 2330 , - 1745 , - 1584 , - 1847 , - 2534 , - 253 , - 1788 , - 355 , - 2738 , - 2153 , - 1992 , - 2255 , - 2942 , - 661 , - 2196 , - 763 , - 3146 , - 2561 , - 2400 , - 2663 , - 3350 , - 1069 , - 2604 , - 1171 , - 162 , - 2969 , - 2808 , - 3071 , - 366 , - 1477 , - 3012 , - 1579 , - 570 , - 3377 , - 3216 , - 87 , - 774 , - 1885 , - 28 , - 1987 , - 978 , - 393 , - 232 , - 495 , - 1182 , - 2293 , - 436 , - 2395 , - 1386 , - 801 , - 640 , - 903 , - 1590 , - 2701 , - 844 , - 2803 , - 1794 , - 1209 , - 1048 , - 1311 , - 1998 , - 3109 , - 1252 , - 3211 , - 2202 , - 1617 , - 1456 , - 1719 , - 2406 , - 125 , - 1660 , - 227 , - 2610 , - 2025 , - 1864 , - 2127 , - 2814 , - 533 , - 2068 , - 635 , - 3018 , - 2433 , - 2272 , - 2535 , - 3222 , - 941 , - 2476 , - 1043 , - 34 , - 2841 , - 2680 , - 2943 , - 238 , - 1349 , - 2884 , - 1451 , - 442 , - 3249 , - 3088 , - 3351 , - 646 , - 1757 , - 3292 , - 1859 , - 850 , - 265 , - 104 , - 367 , - 1054 , - 2165 , - 308 , - 2267 , - 1258 , - 673 , - 512 , - 775 , - 1462 , - 2573 , - 716 , - 2675 , - 1666 , - 1081 , - 920 , - 1183 , - 1870 , - 2981 , - 1124 , - 3083 , - 2074 , - 1489 , - 1328 , - 1591 , - 2278 , - 3389 , - 1532 , - 99 , - 2482 , - 1897 , - 1736 , - 1999 , - 2686 , - 405 , - 1940 , - 507 , - 2890 , - 2305 , - 2144 , - 2407 , - 3094 , - 813 , - 2348 , - 915 , - 3298 , - 2713 , - 2552 , - 2815 , - 110 , - 1221 , - 2756 , - 1323 , - 314 , - 3121 , - 2960 , - 3223 , - 518 , - 1629 , - 3164 , - 1731 , - 722 , - 137 , - 3368 , - 239 , - 926 , - 2037 , - 180 , - 2139 , - 1130 , - 545 , - 384 , - 647 , - 1334 , - 2445 , - 588 , - 2547 , - 1538 , - 953 , - 792 , - 1055 , - 1742 , - 2853 , - 996 , - 2955 , - 1946 , - 1361 , - 1200 , - 1463 , - 2150 , - 3261 , - 1404 , - 3363 , - 2354 , - 1769 , - 1608 , - 1871 , - 2558 , - 277 , - 1812 , - 379 , - 2762 , - 2177 , - 2016 , - 2279 , - 2966 , - 685 , - 2220 , - 787 , - 3170 , - 2585 , - 2424 , - 2687 , - 3374 , - 1093 , - 2628 , - 1195 , - 186 , - 2993 , - 2832 , - 3095 , - 390 , - 1501 , - 3036 , - 1603 , - 594 , - 9 , - 3240 , - 111 , - 798 , - 1909 , - 52 , - 2011 , - 1002 , - 417 , - 256 , - 519 , - 1206 , - 2317 , - 460 , - 2419 , - 1410 , - 825 , - 664 , - 927 , - 1614 , - 2725 , - 868 , - 2827 , - 1818 , - 1233 , - 1072 , - 1335 , - 2022 , - 3133 , - 1276 , - 3235 , - 2226 , - 1641 , - 1480 , - 1743 , - 2430 , - 149 , - 1684 , - 251 , - 2634 , - 2049 , - 1888 , - 2151 , - 2838 , - 557 , - 2092 , - 659 , - 3042 , - 2457 , - 2296 , - 2559 , - 3246 , - 965 , - 2500 , - 1067 , - 58 , - 2865 , - 2704 , - 2967 , - 262 , - 1373 , - 2908 , - 1475 , - 466 , - 3273 , - 3112 , - 3375 , - 670 , - 1781 , - 3316 , - 1883 , - 874 , - 289 , - 128 , - 391 , - 1078 , - 2189 , - 332 , - 2291 , - 1282 , - 697 , - 536 , - 799 , - 1486 , - 2597 , - 740 , - 2699 , - 1690 , - 1105 , - 944 , - 1207 , - 1894 , - 3005 , - 1148 , - 3107 , - 2098 , - 1513 , - 1352 , - 1615 , - 2302 , - 21 , - 1556 , - 123 , - 2506 , - 1921 , - 1760 , - 2023 , - 2710 , - 429 , - 1964 , - 531 , - 2914 , - 2329 , - 2168 , - 2431 , - 3118 , - 837 , - 2372 , - 939 , - 3322 , - 2737 , - 2576 , - 2839 , - 134 , - 1245 , - 2780 , - 1347 , - 338 , - 3145 , - 2984 , - 3247 , - 542 , - 1653 , - 3188 , - 1755 , - 746 , - 161 , - 0 , - 643 , - 1670 , - 3081 , - 1420 , - 143 , - 2706 , - 2197 , - 2072 , - 2331 , - 2974 , - 545 , - 1956 , - 295 , - 2474 , - 1581 , - 1072 , - 947 , - 1206 , - 1849 , - 2876 , - 831 , - 2626 , - 1349 , - 456 , - 3403 , - 3278 , - 81 , - 724 , - 1751 , - 3162 , - 1501 , - 224 , - 2787 , - 2278 , - 2153 , - 2412 , - 3055 , - 626 , - 2037 , - 376 , - 2555 , - 1662 , - 1153 , - 1028 , - 1287 , - 1930 , - 2957 , - 912 , - 2707 , - 1430 , - 537 , - 28 , - 3359 , - 162 , - 805 , - 1832 , - 3243 , - 1582 , - 305 , - 2868 , - 2359 , - 2234 , - 2493 , - 3136 , - 707 , - 2118 , - 457 , - 2636 , - 1743 , - 1234 , - 1109 , - 1368 , - 2011 , - 3038 , - 993 , - 2788 , - 1511 , - 618 , - 109 , - 3440 , - 243 , - 886 , - 1913 , - 3324 , - 1663 , - 386 , - 2949 , - 2440 , - 2315 , - 2574 , - 3217 , - 788 , - 2199 , - 538 , - 2717 , - 1824 , - 1315 , - 1190 , - 1449 , - 2092 , - 3119 , - 1074 , - 2869 , - 1592 , - 699 , - 190 , - 65 , - 324 , - 967 , - 1994 , - 3405 , - 1744 , - 467 , - 3030 , - 2521 , - 2396 , - 2655 , - 3298 , - 869 , - 2280 , - 619 , - 2798 , - 1905 , - 1396 , - 1271 , - 1530 , - 2173 , - 3200 , - 1155 , - 2950 , - 1673 , - 780 , - 271 , - 146 , - 405 , - 1048 , - 2075 , - 30 , - 1825 , - 548 , - 3111 , - 2602 , - 2477 , - 2736 , - 3379 , - 950 , - 2361 , - 700 , - 2879 , - 1986 , - 1477 , - 1352 , - 1611 , - 2254 , - 3281 , - 1236 , - 3031 , - 1754 , - 861 , - 352 , - 227 , - 486 , - 1129 , - 2156 , - 111 , - 1906 , - 629 , - 3192 , - 2683 , - 2558 , - 2817 , - 4 , - 1031 , - 2442 , - 781 , - 2960 , - 2067 , - 1558 , - 1433 , - 1692 , - 2335 , - 3362 , - 1317 , - 3112 , - 1835 , - 942 , - 433 , - 308 , - 567 , - 1210 , - 2237 , - 192 , - 1987 , - 710 , - 3273 , - 2764 , - 2639 , - 2898 , - 85 , - 1112 , - 2523 , - 862 , - 3041 , - 2148 , - 1639 , - 1514 , - 1773 , - 2416 , - 3443 , - 1398 , - 3193 , - 1916 , - 1023 , - 514 , - 389 , - 648 , - 1291 , - 2318 , - 273 , - 2068 , - 791 , - 3354 , - 2845 , - 2720 , - 2979 , - 166 , - 1193 , - 2604 , - 943 , - 3122 , - 2229 , - 1720 , - 1595 , - 1854 , - 2497 , - 68 , - 1479 , - 3274 , - 1997 , - 1104 , - 595 , - 470 , - 729 , - 1372 , - 2399 , - 354 , - 2149 , - 872 , - 3435 , - 2926 , - 2801 , - 3060 , - 247 , - 1274 , - 2685 , - 1024 , - 3203 , - 2310 , - 1801 , - 1676 , - 1935 , - 2578 , - 149 , - 1560 , - 3355 , - 2078 , - 1185 , - 676 , - 551 , - 810 , - 1453 , - 2480 , - 435 , - 2230 , - 953 , - 60 , - 3007 , - 2882 , - 3141 , - 328 , - 1355 , - 2766 , - 1105 , - 3284 , - 2391 , - 1882 , - 1757 , - 2016 , - 2659 , - 230 , - 1641 , - 3436 , - 2159 , - 1266 , - 757 , - 632 , - 891 , - 1534 , - 2561 , - 516 , - 2311 , - 1034 , - 141 , - 3088 , - 2963 , - 3222 , - 409 , - 1436 , - 2847 , - 1186 , - 3365 , - 2472 , - 1963 , - 1838 , - 2097 , - 2740 , - 311 , - 1722 , - 61 , - 2240 , - 1347 , - 838 , - 713 , - 972 , - 1615 , - 2642 , - 597 , - 2392 , - 1115 , - 222 , - 3169 , - 3044 , - 3303 , - 490 , - 1517 , - 2928 , - 1267 , - 3446 , - 2553 , - 2044 , - 1919 , - 2178 , - 2821 , - 392 , - 1803 , - 142 , - 2321 , - 1428 , - 919 , - 794 , - 1053 , - 1696 , - 2723 , - 678 , - 2473 , - 1196 , - 303 , - 3250 , - 3125 , - 3384 , - 571 , - 1598 , - 3009 , - 1348 , - 71 , - 2634 , - 2125 , - 2000 , - 2259 , - 2902 , - 473 , - 1884 , - 223 , - 2402 , - 1509 , - 1000 , - 875 , - 1134 , - 1777 , - 2804 , - 759 , - 2554 , - 1277 , - 384 , - 3331 , - 3206 , - 9 , - 652 , - 1679 , - 3090 , - 1429 , - 152 , - 2715 , - 2206 , - 2081 , - 2340 , - 2983 , - 554 , - 1965 , - 304 , - 2483 , - 1590 , - 1081 , - 956 , - 1215 , - 1858 , - 2885 , - 840 , - 2635 , - 1358 , - 465 , - 3412 , - 3287 , - 90 , - 733 , - 1760 , - 3171 , - 1510 , - 233 , - 2796 , - 2287 , - 2162 , - 2421 , - 3064 , - 635 , - 2046 , - 385 , - 2564 , - 1671 , - 1162 , - 1037 , - 1296 , - 1939 , - 2966 , - 921 , - 2716 , - 1439 , - 546 , - 37 , - 3368 , - 171 , - 814 , - 1841 , - 3252 , - 1591 , - 314 , - 2877 , - 2368 , - 2243 , - 2502 , - 3145 , - 716 , - 2127 , - 466 , - 2645 , - 1752 , - 1243 , - 1118 , - 1377 , - 2020 , - 3047 , - 1002 , - 2797 , - 1520 , - 627 , - 118 , - 3449 , - 252 , - 895 , - 1922 , - 3333 , - 1672 , - 395 , - 2958 , - 2449 , - 2324 , - 2583 , - 3226 , - 797 , - 2208 , - 547 , - 2726 , - 1833 , - 1324 , - 1199 , - 1458 , - 2101 , - 3128 , - 1083 , - 2878 , - 1601 , - 708 , - 199 , - 74 , - 333 , - 976 , - 2003 , - 3414 , - 1753 , - 476 , - 3039 , - 2530 , - 2405 , - 2664 , - 3307 , - 878 , - 2289 , - 628 , - 2807 , - 1914 , - 1405 , - 1280 , - 1539 , - 2182 , - 3209 , - 1164 , - 2959 , - 1682 , - 789 , - 280 , - 155 , - 414 , - 1057 , - 2084 , - 39 , - 1834 , - 557 , - 3120 , - 2611 , - 2486 , - 2745 , - 3388 , - 959 , - 2370 , - 709 , - 2888 , - 1995 , - 1486 , - 1361 , - 1620 , - 2263 , - 3290 , - 1245 , - 3040 , - 1763 , - 870 , - 361 , - 236 , - 495 , - 1138 , - 2165 , - 120 , - 1915 , - 638 , - 3201 , - 2692 , - 2567 , - 2826 , - 13 , - 1040 , - 2451 , - 790 , - 2969 , - 2076 , - 1567 , - 1442 , - 1701 , - 2344 , - 3371 , - 1326 , - 3121 , - 1844 , - 951 , - 442 , - 317 , - 576 , - 1219 , - 2246 , - 201 , - 1996 , - 719 , - 3282 , - 2773 , - 2648 , - 2907 , - 94 , - 1121 , - 2532 , - 871 , - 3050 , - 2157 , - 1648 , - 1523 , - 1782 , - 2425 , - 3452 , - 1407 , - 3202 , - 1925 , - 1032 , - 523 , - 398 , - 657 , - 1300 , - 2327 , - 282 , - 2077 , - 800 , - 3363 , - 2854 , - 2729 , - 2988 , - 175 , - 1202 , - 2613 , - 952 , - 3131 , - 2238 , - 1729 , - 1604 , - 1863 , - 2506 , - 77 , - 1488 , - 3283 , - 2006 , - 1113 , - 604 , - 479 , - 738 , - 1381 , - 2408 , - 363 , - 2158 , - 881 , - 3444 , - 2935 , - 2810 , - 3069 , - 256 , - 1283 , - 2694 , - 1033 , - 3212 , - 2319 , - 1810 , - 1685 , - 1944 , - 2587 , - 158 , - 1569 , - 3364 , - 2087 , - 1194 , - 685 , - 560 , - 819 , - 1462 , - 2489 , - 444 , - 2239 , - 962 , - 69 , - 3016 , - 2891 , - 3150 , - 337 , - 1364 , - 2775 , - 1114 , - 3293 , - 2400 , - 1891 , - 1766 , - 2025 , - 2668 , - 239 , - 1650 , - 3445 , - 2168 , - 1275 , - 766 , - 641 , - 900 , - 1543 , - 2570 , - 525 , - 2320 , - 1043 , - 150 , - 3097 , - 2972 , - 3231 , - 418 , - 1445 , - 2856 , - 1195 , - 3374 , - 2481 , - 1972 , - 1847 , - 2106 , - 2749 , - 320 , - 1731 , - 70 , - 2249 , - 1356 , - 847 , - 722 , - 981 , - 1624 , - 2651 , - 606 , - 2401 , - 1124 , - 231 , - 3178 , - 3053 , - 3312 , - 499 , - 1526 , - 2937 , - 1276 , - 3455 , - 2562 , - 2053 , - 1928 , - 2187 , - 2830 , - 401 , - 1812 , - 151 , - 2330 , - 1437 , - 928 , - 803 , - 1062 , - 1705 , - 2732 , - 687 , - 2482 , - 1205 , - 312 , - 3259 , - 3134 , - 3393 , - 580 , - 1607 , - 3018 , - 1357 , - 80 , - 2643 , - 2134 , - 2009 , - 2268 , - 2911 , - 482 , - 1893 , - 232 , - 2411 , - 1518 , - 1009 , - 884 , - 1143 , - 1786 , - 2813 , - 768 , - 2563 , - 1286 , - 393 , - 3340 , - 3215 , - 18 , - 661 , - 1688 , - 3099 , - 1438 , - 161 , - 2724 , - 2215 , - 2090 , - 2349 , - 2992 , - 563 , - 1974 , - 313 , - 2492 , - 1599 , - 1090 , - 965 , - 1224 , - 1867 , - 2894 , - 849 , - 2644 , - 1367 , - 474 , - 3421 , - 3296 , - 99 , - 742 , - 1769 , - 3180 , - 1519 , - 242 , - 2805 , - 2296 , - 2171 , - 2430 , - 3073 , - 644 , - 2055 , - 394 , - 2573 , - 1680 , - 1171 , - 1046 , - 1305 , - 1948 , - 2975 , - 930 , - 2725 , - 1448 , - 555 , - 46 , - 3377 , - 180 , - 823 , - 1850 , - 3261 , - 1600 , - 323 , - 2886 , - 2377 , - 2252 , - 2511 , - 3154 , - 725 , - 2136 , - 475 , - 2654 , - 1761 , - 1252 , - 1127 , - 1386 , - 2029 , - 3056 , - 1011 , - 2806 , - 1529 , - 636 , - 127 , - 2 , - 261 , - 904 , - 1931 , - 3342 , - 1681 , - 404 , - 2967 , - 2458 , - 2333 , - 2592 , - 3235 , - 806 , - 2217 , - 556 , - 2735 , - 1842 , - 1333 , - 1208 , - 1467 , - 2110 , - 3137 , - 1092 , - 2887 , - 1610 , - 717 , - 208 , - 83 , - 342 , - 985 , - 2012 , - 3423 , - 1762 , - 485 , - 3048 , - 2539 , - 2414 , - 2673 , - 3316 , - 887 , - 2298 , - 637 , - 2816 , - 1923 , - 1414 , - 1289 , - 1548 , - 2191 , - 3218 , - 1173 , - 2968 , - 1691 , - 798 , - 289 , - 164 , - 423 , - 1066 , - 2093 , - 48 , - 1843 , - 566 , - 3129 , - 2620 , - 2495 , - 2754 , - 3397 , - 968 , - 2379 , - 718 , - 2897 , - 2004 , - 1495 , - 1370 , - 1629 , - 2272 , - 3299 , - 1254 , - 3049 , - 1772 , - 879 , - 370 , - 245 , - 504 , - 1147 , - 2174 , - 129 , - 1924 , - 647 , - 3210 , - 2701 , - 2576 , - 2835 , - 22 , - 1049 , - 2460 , - 799 , - 2978 , - 2085 , - 1576 , - 1451 , - 1710 , - 2353 , - 3380 , - 1335 , - 3130 , - 1853 , - 960 , - 451 , - 326 , - 585 , - 1228 , - 2255 , - 210 , - 2005 , - 728 , - 3291 , - 2782 , - 2657 , - 2916 , - 103 , - 1130 , - 2541 , - 880 , - 3059 , - 2166 , - 1657 , - 1532 , - 1791 , - 2434 , - 5 , - 1416 , - 3211 , - 1934 , - 1041 , - 532 , - 407 , - 666 , - 1309 , - 2336 , - 291 , - 2086 , - 809 , - 3372 , - 2863 , - 2738 , - 2997 , - 184 , - 1211 , - 2622 , - 961 , - 3140 , - 2247 , - 1738 , - 1613 , - 1872 , - 2515 , - 86 , - 1497 , - 3292 , - 2015 , - 1122 , - 613 , - 488 , - 747 , - 1390 , - 2417 , - 372 , - 2167 , - 890 , - 3453 , - 2944 , - 2819 , - 3078 , - 265 , - 1292 , - 2703 , - 1042 , - 3221 , - 2328 , - 1819 , - 1694 , - 1953 , - 2596 , - 167 , - 1578 , - 3373 , - 2096 , - 1203 , - 694 , - 569 , - 828 , - 1471 , - 2498 , - 453 , - 2248 , - 971 , - 78 , - 3025 , - 2900 , - 3159 , - 346 , - 1373 , - 2784 , - 1123 , - 3302 , - 2409 , - 1900 , - 1775 , - 2034 , - 2677 , - 248 , - 1659 , - 3454 , - 2177 , - 1284 , - 775 , - 650 , - 909 , - 1552 , - 2579 , - 534 , - 2329 , - 1052 , - 159 , - 3106 , - 2981 , - 3240 , - 427 , - 1454 , - 2865 , - 1204 , - 3383 , - 2490 , - 1981 , - 1856 , - 2115 , - 2758 , - 329 , - 1740 , - 79 , - 2258 , - 1365 , - 856 , - 731 , - 990 , - 1633 , - 2660 , - 615 , - 2410 , - 1133 , - 240 , - 3187 , - 3062 , - 3321 , - 508 , - 1535 , - 2946 , - 1285 , - 8 , - 2571 , - 2062 , - 1937 , - 2196 , - 2839 , - 410 , - 1821 , - 160 , - 2339 , - 1446 , - 937 , - 812 , - 1071 , - 1714 , - 2741 , - 696 , - 2491 , - 1214 , - 321 , - 3268 , - 3143 , - 3402 , - 589 , - 1616 , - 3027 , - 1366 , - 89 , - 2652 , - 2143 , - 2018 , - 2277 , - 2920 , - 491 , - 1902 , - 241 , - 2420 , - 1527 , - 1018 , - 893 , - 1152 , - 1795 , - 2822 , - 777 , - 2572 , - 1295 , - 402 , - 3349 , - 3224 , - 27 , - 670 , - 1697 , - 3108 , - 1447 , - 170 , - 2733 , - 2224 , - 2099 , - 2358 , - 3001 , - 572 , - 1983 , - 322 , - 2501 , - 1608 , - 1099 , - 974 , - 1233 , - 1876 , - 2903 , - 858 , - 2653 , - 1376 , - 483 , - 3430 , - 3305 , - 108 , - 751 , - 1778 , - 3189 , - 1528 , - 251 , - 2814 , - 2305 , - 2180 , - 2439 , - 3082 , - 653 , - 2064 , - 403 , - 2582 , - 1689 , - 1180 , - 1055 , - 1314 , - 1957 , - 2984 , - 939 , - 2734 , - 1457 , - 564 , - 55 , - 3386 , - 189 , - 832 , - 1859 , - 3270 , - 1609 , - 332 , - 2895 , - 2386 , - 2261 , - 2520 , - 3163 , - 734 , - 2145 , - 484 , - 2663 , - 1770 , - 1261 , - 1136 , - 1395 , - 2038 , - 3065 , - 1020 , - 2815 , - 1538 , - 645 , - 136 , - 11 , - 270 , - 913 , - 1940 , - 3351 , - 1690 , - 413 , - 2976 , - 2467 , - 2342 , - 2601 , - 3244 , - 815 , - 2226 , - 565 , - 2744 , - 1851 , - 1342 , - 1217 , - 1476 , - 2119 , - 3146 , - 1101 , - 2896 , - 1619 , - 726 , - 217 , - 92 , - 351 , - 994 , - 2021 , - 3432 , - 1771 , - 494 , - 3057 , - 2548 , - 2423 , - 2682 , - 3325 , - 896 , - 2307 , - 646 , - 2825 , - 1932 , - 1423 , - 1298 , - 1557 , - 2200 , - 3227 , - 1182 , - 2977 , - 1700 , - 807 , - 298 , - 173 , - 432 , - 1075 , - 2102 , - 57 , - 1852 , - 575 , - 3138 , - 2629 , - 2504 , - 2763 , - 3406 , - 977 , - 2388 , - 727 , - 2906 , - 2013 , - 1504 , - 1379 , - 1638 , - 2281 , - 3308 , - 1263 , - 3058 , - 1781 , - 888 , - 379 , - 254 , - 513 , - 1156 , - 2183 , - 138 , - 1933 , - 656 , - 3219 , - 2710 , - 2585 , - 2844 , - 31 , - 1058 , - 2469 , - 808 , - 2987 , - 2094 , - 1585 , - 1460 , - 1719 , - 2362 , - 3389 , - 1344 , - 3139 , - 1862 , - 969 , - 460 , - 335 , - 594 , - 1237 , - 2264 , - 219 , - 2014 , - 737 , - 3300 , - 2791 , - 2666 , - 2925 , - 112 , - 1139 , - 2550 , - 889 , - 3068 , - 2175 , - 1666 , - 1541 , - 1800 , - 2443 , - 14 , - 1425 , - 3220 , - 1943 , - 1050 , - 541 , - 416 , - 675 , - 1318 , - 2345 , - 300 , - 2095 , - 818 , - 3381 , - 2872 , - 2747 , - 3006 , - 193 , - 1220 , - 2631 , - 970 , - 3149 , - 2256 , - 1747 , - 1622 , - 1881 , - 2524 , - 95 , - 1506 , - 3301 , - 2024 , - 1131 , - 622 , - 497 , - 756 , - 1399 , - 2426 , - 381 , - 2176 , - 899 , - 6 , - 2953 , - 2828 , - 3087 , - 274 , - 1301 , - 2712 , - 1051 , - 3230 , - 2337 , - 1828 , - 1703 , - 1962 , - 2605 , - 176 , - 1587 , - 3382 , - 2105 , - 1212 , - 703 , - 578 , - 837 , - 1480 , - 2507 , - 462 , - 2257 , - 980 , - 87 , - 3034 , - 2909 , - 3168 , - 355 , - 1382 , - 2793 , - 1132 , - 3311 , - 2418 , - 1909 , - 1784 , - 2043 , - 2686 , - 257 , - 1668 , - 7 , - 2186 , - 1293 , - 784 , - 659 , - 918 , - 1561 , - 2588 , - 543 , - 2338 , - 1061 , - 168 , - 3115 , - 2990 , - 3249 , - 436 , - 1463 , - 2874 , - 1213 , - 3392 , - 2499 , - 1990 , - 1865 , - 2124 , - 2767 , - 338 , - 1749 , - 88 , - 2267 , - 1374 , - 865 , - 740 , - 999 , - 1642 , - 2669 , - 624 , - 2419 , - 1142 , - 249 , - 3196 , - 3071 , - 3330 , - 517 , - 1544 , - 2955 , - 1294 , - 17 , - 2580 , - 2071 , - 1946 , - 2205 , - 2848 , - 419 , - 1830 , - 169 , - 2348 , - 1455 , - 946 , - 821 , - 1080 , - 1723 , - 2750 , - 705 , - 2500 , - 1223 , - 330 , - 3277 , - 3152 , - 3411 , - 598 , - 1625 , - 3036 , - 1375 , - 98 , - 2661 , - 2152 , - 2027 , - 2286 , - 2929 , - 500 , - 1911 , - 250 , - 2429 , - 1536 , - 1027 , - 902 , - 1161 , - 1804 , - 2831 , - 786 , - 2581 , - 1304 , - 411 , - 3358 , - 3233 , - 36 , - 679 , - 1706 , - 3117 , - 1456 , - 179 , - 2742 , - 2233 , - 2108 , - 2367 , - 3010 , - 581 , - 1992 , - 331 , - 2510 , - 1617 , - 1108 , - 983 , - 1242 , - 1885 , - 2912 , - 867 , - 2662 , - 1385 , - 492 , - 3439 , - 3314 , - 117 , - 760 , - 1787 , - 3198 , - 1537 , - 260 , - 2823 , - 2314 , - 2189 , - 2448 , - 3091 , - 662 , - 2073 , - 412 , - 2591 , - 1698 , - 1189 , - 1064 , - 1323 , - 1966 , - 2993 , - 948 , - 2743 , - 1466 , - 573 , - 64 , - 3395 , - 198 , - 841 , - 1868 , - 3279 , - 1618 , - 341 , - 2904 , - 2395 , - 2270 , - 2529 , - 3172 , - 743 , - 2154 , - 493 , - 2672 , - 1779 , - 1270 , - 1145 , - 1404 , - 2047 , - 3074 , - 1029 , - 2824 , - 1547 , - 654 , - 145 , - 20 , - 279 , - 922 , - 1949 , - 3360 , - 1699 , - 422 , - 2985 , - 2476 , - 2351 , - 2610 , - 3253 , - 824 , - 2235 , - 574 , - 2753 , - 1860 , - 1351 , - 1226 , - 1485 , - 2128 , - 3155 , - 1110 , - 2905 , - 1628 , - 735 , - 226 , - 101 , - 360 , - 1003 , - 2030 , - 3441 , - 1780 , - 503 , - 3066 , - 2557 , - 2432 , - 2691 , - 3334 , - 905 , - 2316 , - 655 , - 2834 , - 1941 , - 1432 , - 1307 , - 1566 , - 2209 , - 3236 , - 1191 , - 2986 , - 1709 , - 816 , - 307 , - 182 , - 441 , - 1084 , - 2111 , - 66 , - 1861 , - 584 , - 3147 , - 2638 , - 2513 , - 2772 , - 3415 , - 986 , - 2397 , - 736 , - 2915 , - 2022 , - 1513 , - 1388 , - 1647 , - 2290 , - 3317 , - 1272 , - 3067 , - 1790 , - 897 , - 388 , - 263 , - 522 , - 1165 , - 2192 , - 147 , - 1942 , - 665 , - 3228 , - 2719 , - 2594 , - 2853 , - 40 , - 1067 , - 2478 , - 817 , - 2996 , - 2103 , - 1594 , - 1469 , - 1728 , - 2371 , - 3398 , - 1353 , - 3148 , - 1871 , - 978 , - 469 , - 344 , - 603 , - 1246 , - 2273 , - 228 , - 2023 , - 746 , - 3309 , - 2800 , - 2675 , - 2934 , - 121 , - 1148 , - 2559 , - 898 , - 3077 , - 2184 , - 1675 , - 1550 , - 1809 , - 2452 , - 23 , - 1434 , - 3229 , - 1952 , - 1059 , - 550 , - 425 , - 684 , - 1327 , - 2354 , - 309 , - 2104 , - 827 , - 3390 , - 2881 , - 2756 , - 3015 , - 202 , - 1229 , - 2640 , - 979 , - 3158 , - 2265 , - 1756 , - 1631 , - 1890 , - 2533 , - 104 , - 1515 , - 3310 , - 2033 , - 1140 , - 631 , - 506 , - 765 , - 1408 , - 2435 , - 390 , - 2185 , - 908 , - 15 , - 2962 , - 2837 , - 3096 , - 283 , - 1310 , - 2721 , - 1060 , - 3239 , - 2346 , - 1837 , - 1712 , - 1971 , - 2614 , - 185 , - 1596 , - 3391 , - 2114 , - 1221 , - 712 , - 587 , - 846 , - 1489 , - 2516 , - 471 , - 2266 , - 989 , - 96 , - 3043 , - 2918 , - 3177 , - 364 , - 1391 , - 2802 , - 1141 , - 3320 , - 2427 , - 1918 , - 1793 , - 2052 , - 2695 , - 266 , - 1677 , - 16 , - 2195 , - 1302 , - 793 , - 668 , - 927 , - 1570 , - 2597 , - 552 , - 2347 , - 1070 , - 177 , - 3124 , - 2999 , - 3258 , - 445 , - 1472 , - 2883 , - 1222 , - 3401 , - 2508 , - 1999 , - 1874 , - 2133 , - 2776 , - 347 , - 1758 , - 97 , - 2276 , - 1383 , - 874 , - 749 , - 1008 , - 1651 , - 2678 , - 633 , - 2428 , - 1151 , - 258 , - 3205 , - 3080 , - 3339 , - 526 , - 1553 , - 2964 , - 1303 , - 26 , - 2589 , - 2080 , - 1955 , - 2214 , - 2857 , - 428 , - 1839 , - 178 , - 2357 , - 1464 , - 955 , - 830 , - 1089 , - 1732 , - 2759 , - 714 , - 2509 , - 1232 , - 339 , - 3286 , - 3161 , - 3420 , - 607 , - 1634 , - 3045 , - 1384 , - 107 , - 2670 , - 2161 , - 2036 , - 2295 , - 2938 , - 509 , - 1920 , - 259 , - 2438 , - 1545 , - 1036 , - 911 , - 1170 , - 1813 , - 2840 , - 795 , - 2590 , - 1313 , - 420 , - 3367 , - 3242 , - 45 , - 688 , - 1715 , - 3126 , - 1465 , - 188 , - 2751 , - 2242 , - 2117 , - 2376 , - 3019 , - 590 , - 2001 , - 340 , - 2519 , - 1626 , - 1117 , - 992 , - 1251 , - 1894 , - 2921 , - 876 , - 2671 , - 1394 , - 501 , - 3448 , - 3323 , - 126 , - 769 , - 1796 , - 3207 , - 1546 , - 269 , - 2832 , - 2323 , - 2198 , - 2457 , - 3100 , - 671 , - 2082 , - 421 , - 2600 , - 1707 , - 1198 , - 1073 , - 1332 , - 1975 , - 3002 , - 957 , - 2752 , - 1475 , - 582 , - 73 , - 3404 , - 207 , - 850 , - 1877 , - 3288 , - 1627 , - 350 , - 2913 , - 2404 , - 2279 , - 2538 , - 3181 , - 752 , - 2163 , - 502 , - 2681 , - 1788 , - 1279 , - 1154 , - 1413 , - 2056 , - 3083 , - 1038 , - 2833 , - 1556 , - 663 , - 154 , - 29 , - 288 , - 931 , - 1958 , - 3369 , - 1708 , - 431 , - 2994 , - 2485 , - 2360 , - 2619 , - 3262 , - 833 , - 2244 , - 583 , - 2762 , - 1869 , - 1360 , - 1235 , - 1494 , - 2137 , - 3164 , - 1119 , - 2914 , - 1637 , - 744 , - 235 , - 110 , - 369 , - 1012 , - 2039 , - 3450 , - 1789 , - 512 , - 3075 , - 2566 , - 2441 , - 2700 , - 3343 , - 914 , - 2325 , - 664 , - 2843 , - 1950 , - 1441 , - 1316 , - 1575 , - 2218 , - 3245 , - 1200 , - 2995 , - 1718 , - 825 , - 316 , - 191 , - 450 , - 1093 , - 2120 , - 75 , - 1870 , - 593 , - 3156 , - 2647 , - 2522 , - 2781 , - 3424 , - 995 , - 2406 , - 745 , - 2924 , - 2031 , - 1522 , - 1397 , - 1656 , - 2299 , - 3326 , - 1281 , - 3076 , - 1799 , - 906 , - 397 , - 272 , - 531 , - 1174 , - 2201 , - 156 , - 1951 , - 674 , - 3237 , - 2728 , - 2603 , - 2862 , - 49 , - 1076 , - 2487 , - 826 , - 3005 , - 2112 , - 1603 , - 1478 , - 1737 , - 2380 , - 3407 , - 1362 , - 3157 , - 1880 , - 987 , - 478 , - 353 , - 612 , - 1255 , - 2282 , - 237 , - 2032 , - 755 , - 3318 , - 2809 , - 2684 , - 2943 , - 130 , - 1157 , - 2568 , - 907 , - 3086 , - 2193 , - 1684 , - 1559 , - 1818 , - 2461 , - 32 , - 1443 , - 3238 , - 1961 , - 1068 , - 559 , - 434 , - 693 , - 1336 , - 2363 , - 318 , - 2113 , - 836 , - 3399 , - 2890 , - 2765 , - 3024 , - 211 , - 1238 , - 2649 , - 988 , - 3167 , - 2274 , - 1765 , - 1640 , - 1899 , - 2542 , - 113 , - 1524 , - 3319 , - 2042 , - 1149 , - 640 , - 515 , - 774 , - 1417 , - 2444 , - 399 , - 2194 , - 917 , - 24 , - 2971 , - 2846 , - 3105 , - 292 , - 1319 , - 2730 , - 1069 , - 3248 , - 2355 , - 1846 , - 1721 , - 1980 , - 2623 , - 194 , - 1605 , - 3400 , - 2123 , - 1230 , - 721 , - 596 , - 855 , - 1498 , - 2525 , - 480 , - 2275 , - 998 , - 105 , - 3052 , - 2927 , - 3186 , - 373 , - 1400 , - 2811 , - 1150 , - 3329 , - 2436 , - 1927 , - 1802 , - 2061 , - 2704 , - 275 , - 1686 , - 25 , - 2204 , - 1311 , - 802 , - 677 , - 936 , - 1579 , - 2606 , - 561 , - 2356 , - 1079 , - 186 , - 3133 , - 3008 , - 3267 , - 454 , - 1481 , - 2892 , - 1231 , - 3410 , - 2517 , - 2008 , - 1883 , - 2142 , - 2785 , - 356 , - 1767 , - 106 , - 2285 , - 1392 , - 883 , - 758 , - 1017 , - 1660 , - 2687 , - 642 , - 2437 , - 1160 , - 267 , - 3214 , - 3089 , - 3348 , - 535 , - 1562 , - 2973 , - 1312 , - 35 , - 2598 , - 2089 , - 1964 , - 2223 , - 2866 , - 437 , - 1848 , - 187 , - 2366 , - 1473 , - 964 , - 839 , - 1098 , - 1741 , - 2768 , - 723 , - 2518 , - 1241 , - 348 , - 3295 , - 3170 , - 3429 , - 616 , - 1643 , - 3054 , - 1393 , - 116 , - 2679 , - 2170 , - 2045 , - 2304 , - 2947 , - 518 , - 1929 , - 268 , - 2447 , - 1554 , - 1045 , - 920 , - 1179 , - 1822 , - 2849 , - 804 , - 2599 , - 1322 , - 429 , - 3376 , - 3251 , - 54 , - 697 , - 1724 , - 3135 , - 1474 , - 197 , - 2760 , - 2251 , - 2126 , - 2385 , - 3028 , - 599 , - 2010 , - 349 , - 2528 , - 1635 , - 1126 , - 1001 , - 1260 , - 1903 , - 2930 , - 885 , - 2680 , - 1403 , - 510 , - 1 , - 3332 , - 135 , - 778 , - 1805 , - 3216 , - 1555 , - 278 , - 2841 , - 2332 , - 2207 , - 2466 , - 3109 , - 680 , - 2091 , - 430 , - 2609 , - 1716 , - 1207 , - 1082 , - 1341 , - 1984 , - 3011 , - 966 , - 2761 , - 1484 , - 591 , - 82 , - 3413 , - 216 , - 859 , - 1886 , - 3297 , - 1636 , - 359 , - 2922 , - 2413 , - 2288 , - 2547 , - 3190 , - 761 , - 2172 , - 511 , - 2690 , - 1797 , - 1288 , - 1163 , - 1422 , - 2065 , - 3092 , - 1047 , - 2842 , - 1565 , - 672 , - 163 , - 38 , - 297 , - 940 , - 1967 , - 3378 , - 1717 , - 440 , - 3003 , - 2494 , - 2369 , - 2628 , - 3271 , - 842 , - 2253 , - 592 , - 2771 , - 1878 , - 1369 , - 1244 , - 1503 , - 2146 , - 3173 , - 1128 , - 2923 , - 1646 , - 753 , - 244 , - 119 , - 378 , - 1021 , - 2048 , - 3 , - 1798 , - 521 , - 3084 , - 2575 , - 2450 , - 2709 , - 3352 , - 923 , - 2334 , - 673 , - 2852 , - 1959 , - 1450 , - 1325 , - 1584 , - 2227 , - 3254 , - 1209 , - 3004 , - 1727 , - 834 , - 325 , - 200 , - 459 , - 1102 , - 2129 , - 84 , - 1879 , - 602 , - 3165 , - 2656 , - 2531 , - 2790 , - 3433 , - 1004 , - 2415 , - 754 , - 2933 , - 2040 , - 1531 , - 1406 , - 1665 , - 2308 , - 3335 , - 1290 , - 3085 , - 1808 , - 915 , - 406 , - 281 , - 540 , - 1183 , - 2210 , - 165 , - 1960 , - 683 , - 3246 , - 2737 , - 2612 , - 2871 , - 58 , - 1085 , - 2496 , - 835 , - 3014 , - 2121 , - 1612 , - 1487 , - 1746 , - 2389 , - 3416 , - 1371 , - 3166 , - 1889 , - 996 , - 487 , - 362 , - 621 , - 1264 , - 2291 , - 246 , - 2041 , - 764 , - 3327 , - 2818 , - 2693 , - 2952 , - 139 , - 1166 , - 2577 , - 916 , - 3095 , - 2202 , - 1693 , - 1568 , - 1827 , - 2470 , - 41 , - 1452 , - 3247 , - 1970 , - 1077 , - 568 , - 443 , - 702 , - 1345 , - 2372 , - 327 , - 2122 , - 845 , - 3408 , - 2899 , - 2774 , - 3033 , - 220 , - 1247 , - 2658 , - 997 , - 3176 , - 2283 , - 1774 , - 1649 , - 1908 , - 2551 , - 122 , - 1533 , - 3328 , - 2051 , - 1158 , - 649 , - 524 , - 783 , - 1426 , - 2453 , - 408 , - 2203 , - 926 , - 33 , - 2980 , - 2855 , - 3114 , - 301 , - 1328 , - 2739 , - 1078 , - 3257 , - 2364 , - 1855 , - 1730 , - 1989 , - 2632 , - 203 , - 1614 , - 3409 , - 2132 , - 1239 , - 730 , - 605 , - 864 , - 1507 , - 2534 , - 489 , - 2284 , - 1007 , - 114 , - 3061 , - 2936 , - 3195 , - 382 , - 1409 , - 2820 , - 1159 , - 3338 , - 2445 , - 1936 , - 1811 , - 2070 , - 2713 , - 284 , - 1695 , - 34 , - 2213 , - 1320 , - 811 , - 686 , - 945 , - 1588 , - 2615 , - 570 , - 2365 , - 1088 , - 195 , - 3142 , - 3017 , - 3276 , - 463 , - 1490 , - 2901 , - 1240 , - 3419 , - 2526 , - 2017 , - 1892 , - 2151 , - 2794 , - 365 , - 1776 , - 115 , - 2294 , - 1401 , - 892 , - 767 , - 1026 , - 1669 , - 2696 , - 651 , - 2446 , - 1169 , - 276 , - 3223 , - 3098 , - 3357 , - 544 , - 1571 , - 2982 , - 1321 , - 44 , - 2607 , - 2098 , - 1973 , - 2232 , - 2875 , - 446 , - 1857 , - 196 , - 2375 , - 1482 , - 973 , - 848 , - 1107 , - 1750 , - 2777 , - 732 , - 2527 , - 1250 , - 357 , - 3304 , - 3179 , - 3438 , - 625 , - 1652 , - 3063 , - 1402 , - 125 , - 2688 , - 2179 , - 2054 , - 2313 , - 2956 , - 527 , - 1938 , - 277 , - 2456 , - 1563 , - 1054 , - 929 , - 1188 , - 1831 , - 2858 , - 813 , - 2608 , - 1331 , - 438 , - 3385 , - 3260 , - 63 , - 706 , - 1733 , - 3144 , - 1483 , - 206 , - 2769 , - 2260 , - 2135 , - 2394 , - 3037 , - 608 , - 2019 , - 358 , - 2537 , - 1644 , - 1135 , - 1010 , - 1269 , - 1912 , - 2939 , - 894 , - 2689 , - 1412 , - 519 , - 10 , - 3341 , - 144 , - 787 , - 1814 , - 3225 , - 1564 , - 287 , - 2850 , - 2341 , - 2216 , - 2475 , - 3118 , - 689 , - 2100 , - 439 , - 2618 , - 1725 , - 1216 , - 1091 , - 1350 , - 1993 , - 3020 , - 975 , - 2770 , - 1493 , - 600 , - 91 , - 3422 , - 225 , - 868 , - 1895 , - 3306 , - 1645 , - 368 , - 2931 , - 2422 , - 2297 , - 2556 , - 3199 , - 770 , - 2181 , - 520 , - 2699 , - 1806 , - 1297 , - 1172 , - 1431 , - 2074 , - 3101 , - 1056 , - 2851 , - 1574 , - 681 , - 172 , - 47 , - 306 , - 949 , - 1976 , - 3387 , - 1726 , - 449 , - 3012 , - 2503 , - 2378 , - 2637 , - 3280 , - 851 , - 2262 , - 601 , - 2780 , - 1887 , - 1378 , - 1253 , - 1512 , - 2155 , - 3182 , - 1137 , - 2932 , - 1655 , - 762 , - 253 , - 128 , - 387 , - 1030 , - 2057 , - 12 , - 1807 , - 530 , - 3093 , - 2584 , - 2459 , - 2718 , - 3361 , - 932 , - 2343 , - 682 , - 2861 , - 1968 , - 1459 , - 1334 , - 1593 , - 2236 , - 3263 , - 1218 , - 3013 , - 1736 , - 843 , - 334 , - 209 , - 468 , - 1111 , - 2138 , - 93 , - 1888 , - 611 , - 3174 , - 2665 , - 2540 , - 2799 , - 3442 , - 1013 , - 2424 , - 763 , - 2942 , - 2049 , - 1540 , - 1415 , - 1674 , - 2317 , - 3344 , - 1299 , - 3094 , - 1817 , - 924 , - 415 , - 290 , - 549 , - 1192 , - 2219 , - 174 , - 1969 , - 692 , - 3255 , - 2746 , - 2621 , - 2880 , - 67 , - 1094 , - 2505 , - 844 , - 3023 , - 2130 , - 1621 , - 1496 , - 1755 , - 2398 , - 3425 , - 1380 , - 3175 , - 1898 , - 1005 , - 496 , - 371 , - 630 , - 1273 , - 2300 , - 255 , - 2050 , - 773 , - 3336 , - 2827 , - 2702 , - 2961 , - 148 , - 1175 , - 2586 , - 925 , - 3104 , - 2211 , - 1702 , - 1577 , - 1836 , - 2479 , - 50 , - 1461 , - 3256 , - 1979 , - 1086 , - 577 , - 452 , - 711 , - 1354 , - 2381 , - 336 , - 2131 , - 854 , - 3417 , - 2908 , - 2783 , - 3042 , - 229 , - 1256 , - 2667 , - 1006 , - 3185 , - 2292 , - 1783 , - 1658 , - 1917 , - 2560 , - 131 , - 1542 , - 3337 , - 2060 , - 1167 , - 658 , - 533 , - 792 , - 1435 , - 2462 , - 417 , - 2212 , - 935 , - 42 , - 2989 , - 2864 , - 3123 , - 310 , - 1337 , - 2748 , - 1087 , - 3266 , - 2373 , - 1864 , - 1739 , - 1998 , - 2641 , - 212 , - 1623 , - 3418 , - 2141 , - 1248 , - 739 , - 614 , - 873 , - 1516 , - 2543 , - 498 , - 2293 , - 1016 , - 123 , - 3070 , - 2945 , - 3204 , - 391 , - 1418 , - 2829 , - 1168 , - 3347 , - 2454 , - 1945 , - 1820 , - 2079 , - 2722 , - 293 , - 1704 , - 43 , - 2222 , - 1329 , - 820 , - 695 , - 954 , - 1597 , - 2624 , - 579 , - 2374 , - 1097 , - 204 , - 3151 , - 3026 , - 3285 , - 472 , - 1499 , - 2910 , - 1249 , - 3428 , - 2535 , - 2026 , - 1901 , - 2160 , - 2803 , - 374 , - 1785 , - 124 , - 2303 , - 1410 , - 901 , - 776 , - 1035 , - 1678 , - 2705 , - 660 , - 2455 , - 1178 , - 285 , - 3232 , - 3107 , - 3366 , - 553 , - 1580 , - 2991 , - 1330 , - 53 , - 2616 , - 2107 , - 1982 , - 2241 , - 2884 , - 455 , - 1866 , - 205 , - 2384 , - 1491 , - 982 , - 857 , - 1116 , - 1759 , - 2786 , - 741 , - 2536 , - 1259 , - 366 , - 3313 , - 3188 , - 3447 , - 634 , - 1661 , - 3072 , - 1411 , - 134 , - 2697 , - 2188 , - 2063 , - 2322 , - 2965 , - 536 , - 1947 , - 286 , - 2465 , - 1572 , - 1063 , - 938 , - 1197 , - 1840 , - 2867 , - 822 , - 2617 , - 1340 , - 447 , - 3394 , - 3269 , - 72 , - 715 , - 1742 , - 3153 , - 1492 , - 215 , - 2778 , - 2269 , - 2144 , - 2403 , - 3046 , - 617 , - 2028 , - 367 , - 2546 , - 1653 , - 1144 , - 1019 , - 1278 , - 1921 , - 2948 , - 903 , - 2698 , - 1421 , - 528 , - 19 , - 3350 , - 153 , - 796 , - 1823 , - 3234 , - 1573 , - 296 , - 2859 , - 2350 , - 2225 , - 2484 , - 3127 , - 698 , - 2109 , - 448 , - 2627 , - 1734 , - 1225 , - 1100 , - 1359 , - 2002 , - 3029 , - 984 , - 2779 , - 1502 , - 609 , - 100 , - 3431 , - 234 , - 877 , - 1904 , - 3315 , - 1654 , - 377 , - 2940 , - 2431 , - 2306 , - 2565 , - 3208 , - 779 , - 2190 , - 529 , - 2708 , - 1815 , - 1306 , - 1181 , - 1440 , - 2083 , - 3110 , - 1065 , - 2860 , - 1583 , - 690 , - 181 , - 56 , - 315 , - 958 , - 1985 , - 3396 , - 1735 , - 458 , - 3021 , - 2512 , - 2387 , - 2646 , - 3289 , - 860 , - 2271 , - 610 , - 2789 , - 1896 , - 1387 , - 1262 , - 1521 , - 2164 , - 3191 , - 1146 , - 2941 , - 1664 , - 771 , - 262 , - 137 , - 396 , - 1039 , - 2066 , - 21 , - 1816 , - 539 , - 3102 , - 2593 , - 2468 , - 2727 , - 3370 , - 941 , - 2352 , - 691 , - 2870 , - 1977 , - 1468 , - 1343 , - 1602 , - 2245 , - 3272 , - 1227 , - 3022 , - 1745 , - 852 , - 343 , - 218 , - 477 , - 1120 , - 2147 , - 102 , - 1897 , - 620 , - 3183 , - 2674 , - 2549 , - 2808 , - 3451 , - 1022 , - 2433 , - 772 , - 2951 , - 2058 , - 1549 , - 1424 , - 1683 , - 2326 , - 3353 , - 1308 , - 3103 , - 1826 , - 933 , - 424 , - 299 , - 558 , - 1201 , - 2228 , - 183 , - 1978 , - 701 , - 3264 , - 2755 , - 2630 , - 2889 , - 76 , - 1103 , - 2514 , - 853 , - 3032 , - 2139 , - 1630 , - 1505 , - 1764 , - 2407 , - 3434 , - 1389 , - 3184 , - 1907 , - 1014 , - 505 , - 380 , - 639 , - 1282 , - 2309 , - 264 , - 2059 , - 782 , - 3345 , - 2836 , - 2711 , - 2970 , - 157 , - 1184 , - 2595 , - 934 , - 3113 , - 2220 , - 1711 , - 1586 , - 1845 , - 2488 , - 59 , - 1470 , - 3265 , - 1988 , - 1095 , - 586 , - 461 , - 720 , - 1363 , - 2390 , - 345 , - 2140 , - 863 , - 3426 , - 2917 , - 2792 , - 3051 , - 238 , - 1265 , - 2676 , - 1015 , - 3194 , - 2301 , - 1792 , - 1667 , - 1926 , - 2569 , - 140 , - 1551 , - 3346 , - 2069 , - 1176 , - 667 , - 542 , - 801 , - 1444 , - 2471 , - 426 , - 2221 , - 944 , - 51 , - 2998 , - 2873 , - 3132 , - 319 , - 1346 , - 2757 , - 1096 , - 3275 , - 2382 , - 1873 , - 1748 , - 2007 , - 2650 , - 221 , - 1632 , - 3427 , - 2150 , - 1257 , - 748 , - 623 , - 882 , - 1525 , - 2552 , - 507 , - 2302 , - 1025 , - 132 , - 3079 , - 2954 , - 3213 , - 400 , - 1427 , - 2838 , - 1177 , - 3356 , - 2463 , - 1954 , - 1829 , - 2088 , - 2731 , - 302 , - 1713 , - 52 , - 2231 , - 1338 , - 829 , - 704 , - 963 , - 1606 , - 2633 , - 588 , - 2383 , - 1106 , - 213 , - 3160 , - 3035 , - 3294 , - 481 , - 1508 , - 2919 , - 1258 , - 3437 , - 2544 , - 2035 , - 1910 , - 2169 , - 2812 , - 383 , - 1794 , - 133 , - 2312 , - 1419 , - 910 , - 785 , - 1044 , - 1687 , - 2714 , - 669 , - 2464 , - 1187 , - 294 , - 3241 , - 3116 , - 3375 , - 562 , - 1589 , - 3000 , - 1339 , - 62 , - 2625 , - 2116 , - 1991 , - 2250 , - 2893 , - 464 , - 1875 , - 214 , - 2393 , - 1500 , - 991 , - 866 , - 1125 , - 1768 , - 2795 , - 750 , - 2545 , - 1268 , - 375 , - 3322 , - 3197 , - 0 , - 477 , - 1394 , - 2751 , - 1028 , - 3265 , - 2422 , - 2019 , - 2056 , - 2533 , - 3450 , - 1287 , - 3084 , - 1801 , - 958 , - 555 , - 592 , - 1069 , - 1986 , - 3343 , - 1620 , - 337 , - 3014 , - 2611 , - 2648 , - 3125 , - 522 , - 1879 , - 156 , - 2393 , - 1550 , - 1147 , - 1184 , - 1661 , - 2578 , - 415 , - 2212 , - 929 , - 86 , - 3203 , - 3240 , - 197 , - 1114 , - 2471 , - 748 , - 2985 , - 2142 , - 1739 , - 1776 , - 2253 , - 3170 , - 1007 , - 2804 , - 1521 , - 678 , - 275 , - 312 , - 789 , - 1706 , - 3063 , - 1340 , - 57 , - 2734 , - 2331 , - 2368 , - 2845 , - 242 , - 1599 , - 3396 , - 2113 , - 1270 , - 867 , - 904 , - 1381 , - 2298 , - 135 , - 1932 , - 649 , - 3326 , - 2923 , - 2960 , - 3437 , - 834 , - 2191 , - 468 , - 2705 , - 1862 , - 1459 , - 1496 , - 1973 , - 2890 , - 727 , - 2524 , - 1241 , - 398 , - 3515 , - 32 , - 509 , - 1426 , - 2783 , - 1060 , - 3297 , - 2454 , - 2051 , - 2088 , - 2565 , - 3482 , - 1319 , - 3116 , - 1833 , - 990 , - 587 , - 624 , - 1101 , - 2018 , - 3375 , - 1652 , - 369 , - 3046 , - 2643 , - 2680 , - 3157 , - 554 , - 1911 , - 188 , - 2425 , - 1582 , - 1179 , - 1216 , - 1693 , - 2610 , - 447 , - 2244 , - 961 , - 118 , - 3235 , - 3272 , - 229 , - 1146 , - 2503 , - 780 , - 3017 , - 2174 , - 1771 , - 1808 , - 2285 , - 3202 , - 1039 , - 2836 , - 1553 , - 710 , - 307 , - 344 , - 821 , - 1738 , - 3095 , - 1372 , - 89 , - 2766 , - 2363 , - 2400 , - 2877 , - 274 , - 1631 , - 3428 , - 2145 , - 1302 , - 899 , - 936 , - 1413 , - 2330 , - 167 , - 1964 , - 681 , - 3358 , - 2955 , - 2992 , - 3469 , - 866 , - 2223 , - 500 , - 2737 , - 1894 , - 1491 , - 1528 , - 2005 , - 2922 , - 759 , - 2556 , - 1273 , - 430 , - 27 , - 64 , - 541 , - 1458 , - 2815 , - 1092 , - 3329 , - 2486 , - 2083 , - 2120 , - 2597 , - 3514 , - 1351 , - 3148 , - 1865 , - 1022 , - 619 , - 656 , - 1133 , - 2050 , - 3407 , - 1684 , - 401 , - 3078 , - 2675 , - 2712 , - 3189 , - 586 , - 1943 , - 220 , - 2457 , - 1614 , - 1211 , - 1248 , - 1725 , - 2642 , - 479 , - 2276 , - 993 , - 150 , - 3267 , - 3304 , - 261 , - 1178 , - 2535 , - 812 , - 3049 , - 2206 , - 1803 , - 1840 , - 2317 , - 3234 , - 1071 , - 2868 , - 1585 , - 742 , - 339 , - 376 , - 853 , - 1770 , - 3127 , - 1404 , - 121 , - 2798 , - 2395 , - 2432 , - 2909 , - 306 , - 1663 , - 3460 , - 2177 , - 1334 , - 931 , - 968 , - 1445 , - 2362 , - 199 , - 1996 , - 713 , - 3390 , - 2987 , - 3024 , - 3501 , - 898 , - 2255 , - 532 , - 2769 , - 1926 , - 1523 , - 1560 , - 2037 , - 2954 , - 791 , - 2588 , - 1305 , - 462 , - 59 , - 96 , - 573 , - 1490 , - 2847 , - 1124 , - 3361 , - 2518 , - 2115 , - 2152 , - 2629 , - 26 , - 1383 , - 3180 , - 1897 , - 1054 , - 651 , - 688 , - 1165 , - 2082 , - 3439 , - 1716 , - 433 , - 3110 , - 2707 , - 2744 , - 3221 , - 618 , - 1975 , - 252 , - 2489 , - 1646 , - 1243 , - 1280 , - 1757 , - 2674 , - 511 , - 2308 , - 1025 , - 182 , - 3299 , - 3336 , - 293 , - 1210 , - 2567 , - 844 , - 3081 , - 2238 , - 1835 , - 1872 , - 2349 , - 3266 , - 1103 , - 2900 , - 1617 , - 774 , - 371 , - 408 , - 885 , - 1802 , - 3159 , - 1436 , - 153 , - 2830 , - 2427 , - 2464 , - 2941 , - 338 , - 1695 , - 3492 , - 2209 , - 1366 , - 963 , - 1000 , - 1477 , - 2394 , - 231 , - 2028 , - 745 , - 3422 , - 3019 , - 3056 , - 13 , - 930 , - 2287 , - 564 , - 2801 , - 1958 , - 1555 , - 1592 , - 2069 , - 2986 , - 823 , - 2620 , - 1337 , - 494 , - 91 , - 128 , - 605 , - 1522 , - 2879 , - 1156 , - 3393 , - 2550 , - 2147 , - 2184 , - 2661 , - 58 , - 1415 , - 3212 , - 1929 , - 1086 , - 683 , - 720 , - 1197 , - 2114 , - 3471 , - 1748 , - 465 , - 3142 , - 2739 , - 2776 , - 3253 , - 650 , - 2007 , - 284 , - 2521 , - 1678 , - 1275 , - 1312 , - 1789 , - 2706 , - 543 , - 2340 , - 1057 , - 214 , - 3331 , - 3368 , - 325 , - 1242 , - 2599 , - 876 , - 3113 , - 2270 , - 1867 , - 1904 , - 2381 , - 3298 , - 1135 , - 2932 , - 1649 , - 806 , - 403 , - 440 , - 917 , - 1834 , - 3191 , - 1468 , - 185 , - 2862 , - 2459 , - 2496 , - 2973 , - 370 , - 1727 , - 4 , - 2241 , - 1398 , - 995 , - 1032 , - 1509 , - 2426 , - 263 , - 2060 , - 777 , - 3454 , - 3051 , - 3088 , - 45 , - 962 , - 2319 , - 596 , - 2833 , - 1990 , - 1587 , - 1624 , - 2101 , - 3018 , - 855 , - 2652 , - 1369 , - 526 , - 123 , - 160 , - 637 , - 1554 , - 2911 , - 1188 , - 3425 , - 2582 , - 2179 , - 2216 , - 2693 , - 90 , - 1447 , - 3244 , - 1961 , - 1118 , - 715 , - 752 , - 1229 , - 2146 , - 3503 , - 1780 , - 497 , - 3174 , - 2771 , - 2808 , - 3285 , - 682 , - 2039 , - 316 , - 2553 , - 1710 , - 1307 , - 1344 , - 1821 , - 2738 , - 575 , - 2372 , - 1089 , - 246 , - 3363 , - 3400 , - 357 , - 1274 , - 2631 , - 908 , - 3145 , - 2302 , - 1899 , - 1936 , - 2413 , - 3330 , - 1167 , - 2964 , - 1681 , - 838 , - 435 , - 472 , - 949 , - 1866 , - 3223 , - 1500 , - 217 , - 2894 , - 2491 , - 2528 , - 3005 , - 402 , - 1759 , - 36 , - 2273 , - 1430 , - 1027 , - 1064 , - 1541 , - 2458 , - 295 , - 2092 , - 809 , - 3486 , - 3083 , - 3120 , - 77 , - 994 , - 2351 , - 628 , - 2865 , - 2022 , - 1619 , - 1656 , - 2133 , - 3050 , - 887 , - 2684 , - 1401 , - 558 , - 155 , - 192 , - 669 , - 1586 , - 2943 , - 1220 , - 3457 , - 2614 , - 2211 , - 2248 , - 2725 , - 122 , - 1479 , - 3276 , - 1993 , - 1150 , - 747 , - 784 , - 1261 , - 2178 , - 15 , - 1812 , - 529 , - 3206 , - 2803 , - 2840 , - 3317 , - 714 , - 2071 , - 348 , - 2585 , - 1742 , - 1339 , - 1376 , - 1853 , - 2770 , - 607 , - 2404 , - 1121 , - 278 , - 3395 , - 3432 , - 389 , - 1306 , - 2663 , - 940 , - 3177 , - 2334 , - 1931 , - 1968 , - 2445 , - 3362 , - 1199 , - 2996 , - 1713 , - 870 , - 467 , - 504 , - 981 , - 1898 , - 3255 , - 1532 , - 249 , - 2926 , - 2523 , - 2560 , - 3037 , - 434 , - 1791 , - 68 , - 2305 , - 1462 , - 1059 , - 1096 , - 1573 , - 2490 , - 327 , - 2124 , - 841 , - 3518 , - 3115 , - 3152 , - 109 , - 1026 , - 2383 , - 660 , - 2897 , - 2054 , - 1651 , - 1688 , - 2165 , - 3082 , - 919 , - 2716 , - 1433 , - 590 , - 187 , - 224 , - 701 , - 1618 , - 2975 , - 1252 , - 3489 , - 2646 , - 2243 , - 2280 , - 2757 , - 154 , - 1511 , - 3308 , - 2025 , - 1182 , - 779 , - 816 , - 1293 , - 2210 , - 47 , - 1844 , - 561 , - 3238 , - 2835 , - 2872 , - 3349 , - 746 , - 2103 , - 380 , - 2617 , - 1774 , - 1371 , - 1408 , - 1885 , - 2802 , - 639 , - 2436 , - 1153 , - 310 , - 3427 , - 3464 , - 421 , - 1338 , - 2695 , - 972 , - 3209 , - 2366 , - 1963 , - 2000 , - 2477 , - 3394 , - 1231 , - 3028 , - 1745 , - 902 , - 499 , - 536 , - 1013 , - 1930 , - 3287 , - 1564 , - 281 , - 2958 , - 2555 , - 2592 , - 3069 , - 466 , - 1823 , - 100 , - 2337 , - 1494 , - 1091 , - 1128 , - 1605 , - 2522 , - 359 , - 2156 , - 873 , - 30 , - 3147 , - 3184 , - 141 , - 1058 , - 2415 , - 692 , - 2929 , - 2086 , - 1683 , - 1720 , - 2197 , - 3114 , - 951 , - 2748 , - 1465 , - 622 , - 219 , - 256 , - 733 , - 1650 , - 3007 , - 1284 , - 1 , - 2678 , - 2275 , - 2312 , - 2789 , - 186 , - 1543 , - 3340 , - 2057 , - 1214 , - 811 , - 848 , - 1325 , - 2242 , - 79 , - 1876 , - 593 , - 3270 , - 2867 , - 2904 , - 3381 , - 778 , - 2135 , - 412 , - 2649 , - 1806 , - 1403 , - 1440 , - 1917 , - 2834 , - 671 , - 2468 , - 1185 , - 342 , - 3459 , - 3496 , - 453 , - 1370 , - 2727 , - 1004 , - 3241 , - 2398 , - 1995 , - 2032 , - 2509 , - 3426 , - 1263 , - 3060 , - 1777 , - 934 , - 531 , - 568 , - 1045 , - 1962 , - 3319 , - 1596 , - 313 , - 2990 , - 2587 , - 2624 , - 3101 , - 498 , - 1855 , - 132 , - 2369 , - 1526 , - 1123 , - 1160 , - 1637 , - 2554 , - 391 , - 2188 , - 905 , - 62 , - 3179 , - 3216 , - 173 , - 1090 , - 2447 , - 724 , - 2961 , - 2118 , - 1715 , - 1752 , - 2229 , - 3146 , - 983 , - 2780 , - 1497 , - 654 , - 251 , - 288 , - 765 , - 1682 , - 3039 , - 1316 , - 33 , - 2710 , - 2307 , - 2344 , - 2821 , - 218 , - 1575 , - 3372 , - 2089 , - 1246 , - 843 , - 880 , - 1357 , - 2274 , - 111 , - 1908 , - 625 , - 3302 , - 2899 , - 2936 , - 3413 , - 810 , - 2167 , - 444 , - 2681 , - 1838 , - 1435 , - 1472 , - 1949 , - 2866 , - 703 , - 2500 , - 1217 , - 374 , - 3491 , - 8 , - 485 , - 1402 , - 2759 , - 1036 , - 3273 , - 2430 , - 2027 , - 2064 , - 2541 , - 3458 , - 1295 , - 3092 , - 1809 , - 966 , - 563 , - 600 , - 1077 , - 1994 , - 3351 , - 1628 , - 345 , - 3022 , - 2619 , - 2656 , - 3133 , - 530 , - 1887 , - 164 , - 2401 , - 1558 , - 1155 , - 1192 , - 1669 , - 2586 , - 423 , - 2220 , - 937 , - 94 , - 3211 , - 3248 , - 205 , - 1122 , - 2479 , - 756 , - 2993 , - 2150 , - 1747 , - 1784 , - 2261 , - 3178 , - 1015 , - 2812 , - 1529 , - 686 , - 283 , - 320 , - 797 , - 1714 , - 3071 , - 1348 , - 65 , - 2742 , - 2339 , - 2376 , - 2853 , - 250 , - 1607 , - 3404 , - 2121 , - 1278 , - 875 , - 912 , - 1389 , - 2306 , - 143 , - 1940 , - 657 , - 3334 , - 2931 , - 2968 , - 3445 , - 842 , - 2199 , - 476 , - 2713 , - 1870 , - 1467 , - 1504 , - 1981 , - 2898 , - 735 , - 2532 , - 1249 , - 406 , - 3 , - 40 , - 517 , - 1434 , - 2791 , - 1068 , - 3305 , - 2462 , - 2059 , - 2096 , - 2573 , - 3490 , - 1327 , - 3124 , - 1841 , - 998 , - 595 , - 632 , - 1109 , - 2026 , - 3383 , - 1660 , - 377 , - 3054 , - 2651 , - 2688 , - 3165 , - 562 , - 1919 , - 196 , - 2433 , - 1590 , - 1187 , - 1224 , - 1701 , - 2618 , - 455 , - 2252 , - 969 , - 126 , - 3243 , - 3280 , - 237 , - 1154 , - 2511 , - 788 , - 3025 , - 2182 , - 1779 , - 1816 , - 2293 , - 3210 , - 1047 , - 2844 , - 1561 , - 718 , - 315 , - 352 , - 829 , - 1746 , - 3103 , - 1380 , - 97 , - 2774 , - 2371 , - 2408 , - 2885 , - 282 , - 1639 , - 3436 , - 2153 , - 1310 , - 907 , - 944 , - 1421 , - 2338 , - 175 , - 1972 , - 689 , - 3366 , - 2963 , - 3000 , - 3477 , - 874 , - 2231 , - 508 , - 2745 , - 1902 , - 1499 , - 1536 , - 2013 , - 2930 , - 767 , - 2564 , - 1281 , - 438 , - 35 , - 72 , - 549 , - 1466 , - 2823 , - 1100 , - 3337 , - 2494 , - 2091 , - 2128 , - 2605 , - 2 , - 1359 , - 3156 , - 1873 , - 1030 , - 627 , - 664 , - 1141 , - 2058 , - 3415 , - 1692 , - 409 , - 3086 , - 2683 , - 2720 , - 3197 , - 594 , - 1951 , - 228 , - 2465 , - 1622 , - 1219 , - 1256 , - 1733 , - 2650 , - 487 , - 2284 , - 1001 , - 158 , - 3275 , - 3312 , - 269 , - 1186 , - 2543 , - 820 , - 3057 , - 2214 , - 1811 , - 1848 , - 2325 , - 3242 , - 1079 , - 2876 , - 1593 , - 750 , - 347 , - 384 , - 861 , - 1778 , - 3135 , - 1412 , - 129 , - 2806 , - 2403 , - 2440 , - 2917 , - 314 , - 1671 , - 3468 , - 2185 , - 1342 , - 939 , - 976 , - 1453 , - 2370 , - 207 , - 2004 , - 721 , - 3398 , - 2995 , - 3032 , - 3509 , - 906 , - 2263 , - 540 , - 2777 , - 1934 , - 1531 , - 1568 , - 2045 , - 2962 , - 799 , - 2596 , - 1313 , - 470 , - 67 , - 104 , - 581 , - 1498 , - 2855 , - 1132 , - 3369 , - 2526 , - 2123 , - 2160 , - 2637 , - 34 , - 1391 , - 3188 , - 1905 , - 1062 , - 659 , - 696 , - 1173 , - 2090 , - 3447 , - 1724 , - 441 , - 3118 , - 2715 , - 2752 , - 3229 , - 626 , - 1983 , - 260 , - 2497 , - 1654 , - 1251 , - 1288 , - 1765 , - 2682 , - 519 , - 2316 , - 1033 , - 190 , - 3307 , - 3344 , - 301 , - 1218 , - 2575 , - 852 , - 3089 , - 2246 , - 1843 , - 1880 , - 2357 , - 3274 , - 1111 , - 2908 , - 1625 , - 782 , - 379 , - 416 , - 893 , - 1810 , - 3167 , - 1444 , - 161 , - 2838 , - 2435 , - 2472 , - 2949 , - 346 , - 1703 , - 3500 , - 2217 , - 1374 , - 971 , - 1008 , - 1485 , - 2402 , - 239 , - 2036 , - 753 , - 3430 , - 3027 , - 3064 , - 21 , - 938 , - 2295 , - 572 , - 2809 , - 1966 , - 1563 , - 1600 , - 2077 , - 2994 , - 831 , - 2628 , - 1345 , - 502 , - 99 , - 136 , - 613 , - 1530 , - 2887 , - 1164 , - 3401 , - 2558 , - 2155 , - 2192 , - 2669 , - 66 , - 1423 , - 3220 , - 1937 , - 1094 , - 691 , - 728 , - 1205 , - 2122 , - 3479 , - 1756 , - 473 , - 3150 , - 2747 , - 2784 , - 3261 , - 658 , - 2015 , - 292 , - 2529 , - 1686 , - 1283 , - 1320 , - 1797 , - 2714 , - 551 , - 2348 , - 1065 , - 222 , - 3339 , - 3376 , - 333 , - 1250 , - 2607 , - 884 , - 3121 , - 2278 , - 1875 , - 1912 , - 2389 , - 3306 , - 1143 , - 2940 , - 1657 , - 814 , - 411 , - 448 , - 925 , - 1842 , - 3199 , - 1476 , - 193 , - 2870 , - 2467 , - 2504 , - 2981 , - 378 , - 1735 , - 12 , - 2249 , - 1406 , - 1003 , - 1040 , - 1517 , - 2434 , - 271 , - 2068 , - 785 , - 3462 , - 3059 , - 3096 , - 53 , - 970 , - 2327 , - 604 , - 2841 , - 1998 , - 1595 , - 1632 , - 2109 , - 3026 , - 863 , - 2660 , - 1377 , - 534 , - 131 , - 168 , - 645 , - 1562 , - 2919 , - 1196 , - 3433 , - 2590 , - 2187 , - 2224 , - 2701 , - 98 , - 1455 , - 3252 , - 1969 , - 1126 , - 723 , - 760 , - 1237 , - 2154 , - 3511 , - 1788 , - 505 , - 3182 , - 2779 , - 2816 , - 3293 , - 690 , - 2047 , - 324 , - 2561 , - 1718 , - 1315 , - 1352 , - 1829 , - 2746 , - 583 , - 2380 , - 1097 , - 254 , - 3371 , - 3408 , - 365 , - 1282 , - 2639 , - 916 , - 3153 , - 2310 , - 1907 , - 1944 , - 2421 , - 3338 , - 1175 , - 2972 , - 1689 , - 846 , - 443 , - 480 , - 957 , - 1874 , - 3231 , - 1508 , - 225 , - 2902 , - 2499 , - 2536 , - 3013 , - 410 , - 1767 , - 44 , - 2281 , - 1438 , - 1035 , - 1072 , - 1549 , - 2466 , - 303 , - 2100 , - 817 , - 3494 , - 3091 , - 3128 , - 85 , - 1002 , - 2359 , - 636 , - 2873 , - 2030 , - 1627 , - 1664 , - 2141 , - 3058 , - 895 , - 2692 , - 1409 , - 566 , - 163 , - 200 , - 677 , - 1594 , - 2951 , - 1228 , - 3465 , - 2622 , - 2219 , - 2256 , - 2733 , - 130 , - 1487 , - 3284 , - 2001 , - 1158 , - 755 , - 792 , - 1269 , - 2186 , - 23 , - 1820 , - 537 , - 3214 , - 2811 , - 2848 , - 3325 , - 722 , - 2079 , - 356 , - 2593 , - 1750 , - 1347 , - 1384 , - 1861 , - 2778 , - 615 , - 2412 , - 1129 , - 286 , - 3403 , - 3440 , - 397 , - 1314 , - 2671 , - 948 , - 3185 , - 2342 , - 1939 , - 1976 , - 2453 , - 3370 , - 1207 , - 3004 , - 1721 , - 878 , - 475 , - 512 , - 989 , - 1906 , - 3263 , - 1540 , - 257 , - 2934 , - 2531 , - 2568 , - 3045 , - 442 , - 1799 , - 76 , - 2313 , - 1470 , - 1067 , - 1104 , - 1581 , - 2498 , - 335 , - 2132 , - 849 , - 6 , - 3123 , - 3160 , - 117 , - 1034 , - 2391 , - 668 , - 2905 , - 2062 , - 1659 , - 1696 , - 2173 , - 3090 , - 927 , - 2724 , - 1441 , - 598 , - 195 , - 232 , - 709 , - 1626 , - 2983 , - 1260 , - 3497 , - 2654 , - 2251 , - 2288 , - 2765 , - 162 , - 1519 , - 3316 , - 2033 , - 1190 , - 787 , - 824 , - 1301 , - 2218 , - 55 , - 1852 , - 569 , - 3246 , - 2843 , - 2880 , - 3357 , - 754 , - 2111 , - 388 , - 2625 , - 1782 , - 1379 , - 1416 , - 1893 , - 2810 , - 647 , - 2444 , - 1161 , - 318 , - 3435 , - 3472 , - 429 , - 1346 , - 2703 , - 980 , - 3217 , - 2374 , - 1971 , - 2008 , - 2485 , - 3402 , - 1239 , - 3036 , - 1753 , - 910 , - 507 , - 544 , - 1021 , - 1938 , - 3295 , - 1572 , - 289 , - 2966 , - 2563 , - 2600 , - 3077 , - 474 , - 1831 , - 108 , - 2345 , - 1502 , - 1099 , - 1136 , - 1613 , - 2530 , - 367 , - 2164 , - 881 , - 38 , - 3155 , - 3192 , - 149 , - 1066 , - 2423 , - 700 , - 2937 , - 2094 , - 1691 , - 1728 , - 2205 , - 3122 , - 959 , - 2756 , - 1473 , - 630 , - 227 , - 264 , - 741 , - 1658 , - 3015 , - 1292 , - 9 , - 2686 , - 2283 , - 2320 , - 2797 , - 194 , - 1551 , - 3348 , - 2065 , - 1222 , - 819 , - 856 , - 1333 , - 2250 , - 87 , - 1884 , - 601 , - 3278 , - 2875 , - 2912 , - 3389 , - 786 , - 2143 , - 420 , - 2657 , - 1814 , - 1411 , - 1448 , - 1925 , - 2842 , - 679 , - 2476 , - 1193 , - 350 , - 3467 , - 3504 , - 461 , - 1378 , - 2735 , - 1012 , - 3249 , - 2406 , - 2003 , - 2040 , - 2517 , - 3434 , - 1271 , - 3068 , - 1785 , - 942 , - 539 , - 576 , - 1053 , - 1970 , - 3327 , - 1604 , - 321 , - 2998 , - 2595 , - 2632 , - 3109 , - 506 , - 1863 , - 140 , - 2377 , - 1534 , - 1131 , - 1168 , - 1645 , - 2562 , - 399 , - 2196 , - 913 , - 70 , - 3187 , - 3224 , - 181 , - 1098 , - 2455 , - 732 , - 2969 , - 2126 , - 1723 , - 1760 , - 2237 , - 3154 , - 991 , - 2788 , - 1505 , - 662 , - 259 , - 296 , - 773 , - 1690 , - 3047 , - 1324 , - 41 , - 2718 , - 2315 , - 2352 , - 2829 , - 226 , - 1583 , - 3380 , - 2097 , - 1254 , - 851 , - 888 , - 1365 , - 2282 , - 119 , - 1916 , - 633 , - 3310 , - 2907 , - 2944 , - 3421 , - 818 , - 2175 , - 452 , - 2689 , - 1846 , - 1443 , - 1480 , - 1957 , - 2874 , - 711 , - 2508 , - 1225 , - 382 , - 3499 , - 16 , - 493 , - 1410 , - 2767 , - 1044 , - 3281 , - 2438 , - 2035 , - 2072 , - 2549 , - 3466 , - 1303 , - 3100 , - 1817 , - 974 , - 571 , - 608 , - 1085 , - 2002 , - 3359 , - 1636 , - 353 , - 3030 , - 2627 , - 2664 , - 3141 , - 538 , - 1895 , - 172 , - 2409 , - 1566 , - 1163 , - 1200 , - 1677 , - 2594 , - 431 , - 2228 , - 945 , - 102 , - 3219 , - 3256 , - 213 , - 1130 , - 2487 , - 764 , - 3001 , - 2158 , - 1755 , - 1792 , - 2269 , - 3186 , - 1023 , - 2820 , - 1537 , - 694 , - 291 , - 328 , - 805 , - 1722 , - 3079 , - 1356 , - 73 , - 2750 , - 2347 , - 2384 , - 2861 , - 258 , - 1615 , - 3412 , - 2129 , - 1286 , - 883 , - 920 , - 1397 , - 2314 , - 151 , - 1948 , - 665 , - 3342 , - 2939 , - 2976 , - 3453 , - 850 , - 2207 , - 484 , - 2721 , - 1878 , - 1475 , - 1512 , - 1989 , - 2906 , - 743 , - 2540 , - 1257 , - 414 , - 11 , - 48 , - 525 , - 1442 , - 2799 , - 1076 , - 3313 , - 2470 , - 2067 , - 2104 , - 2581 , - 3498 , - 1335 , - 3132 , - 1849 , - 1006 , - 603 , - 640 , - 1117 , - 2034 , - 3391 , - 1668 , - 385 , - 3062 , - 2659 , - 2696 , - 3173 , - 570 , - 1927 , - 204 , - 2441 , - 1598 , - 1195 , - 1232 , - 1709 , - 2626 , - 463 , - 2260 , - 977 , - 134 , - 3251 , - 3288 , - 245 , - 1162 , - 2519 , - 796 , - 3033 , - 2190 , - 1787 , - 1824 , - 2301 , - 3218 , - 1055 , - 2852 , - 1569 , - 726 , - 323 , - 360 , - 837 , - 1754 , - 3111 , - 1388 , - 105 , - 2782 , - 2379 , - 2416 , - 2893 , - 290 , - 1647 , - 3444 , - 2161 , - 1318 , - 915 , - 952 , - 1429 , - 2346 , - 183 , - 1980 , - 697 , - 3374 , - 2971 , - 3008 , - 3485 , - 882 , - 2239 , - 516 , - 2753 , - 1910 , - 1507 , - 1544 , - 2021 , - 2938 , - 775 , - 2572 , - 1289 , - 446 , - 43 , - 80 , - 557 , - 1474 , - 2831 , - 1108 , - 3345 , - 2502 , - 2099 , - 2136 , - 2613 , - 10 , - 1367 , - 3164 , - 1881 , - 1038 , - 635 , - 672 , - 1149 , - 2066 , - 3423 , - 1700 , - 417 , - 3094 , - 2691 , - 2728 , - 3205 , - 602 , - 1959 , - 236 , - 2473 , - 1630 , - 1227 , - 1264 , - 1741 , - 2658 , - 495 , - 2292 , - 1009 , - 166 , - 3283 , - 3320 , - 277 , - 1194 , - 2551 , - 828 , - 3065 , - 2222 , - 1819 , - 1856 , - 2333 , - 3250 , - 1087 , - 2884 , - 1601 , - 758 , - 355 , - 392 , - 869 , - 1786 , - 3143 , - 1420 , - 137 , - 2814 , - 2411 , - 2448 , - 2925 , - 322 , - 1679 , - 3476 , - 2193 , - 1350 , - 947 , - 984 , - 1461 , - 2378 , - 215 , - 2012 , - 729 , - 3406 , - 3003 , - 3040 , - 3517 , - 914 , - 2271 , - 548 , - 2785 , - 1942 , - 1539 , - 1576 , - 2053 , - 2970 , - 807 , - 2604 , - 1321 , - 478 , - 75 , - 112 , - 589 , - 1506 , - 2863 , - 1140 , - 3377 , - 2534 , - 2131 , - 2168 , - 2645 , - 42 , - 1399 , - 3196 , - 1913 , - 1070 , - 667 , - 704 , - 1181 , - 2098 , - 3455 , - 1732 , - 449 , - 3126 , - 2723 , - 2760 , - 3237 , - 634 , - 1991 , - 268 , - 2505 , - 1662 , - 1259 , - 1296 , - 1773 , - 2690 , - 527 , - 2324 , - 1041 , - 198 , - 3315 , - 3352 , - 309 , - 1226 , - 2583 , - 860 , - 3097 , - 2254 , - 1851 , - 1888 , - 2365 , - 3282 , - 1119 , - 2916 , - 1633 , - 790 , - 387 , - 424 , - 901 , - 1818 , - 3175 , - 1452 , - 169 , - 2846 , - 2443 , - 2480 , - 2957 , - 354 , - 1711 , - 3508 , - 2225 , - 1382 , - 979 , - 1016 , - 1493 , - 2410 , - 247 , - 2044 , - 761 , - 3438 , - 3035 , - 3072 , - 29 , - 946 , - 2303 , - 580 , - 2817 , - 1974 , - 1571 , - 1608 , - 2085 , - 3002 , - 839 , - 2636 , - 1353 , - 510 , - 107 , - 144 , - 621 , - 1538 , - 2895 , - 1172 , - 3409 , - 2566 , - 2163 , - 2200 , - 2677 , - 74 , - 1431 , - 3228 , - 1945 , - 1102 , - 699 , - 736 , - 1213 , - 2130 , - 3487 , - 1764 , - 481 , - 3158 , - 2755 , - 2792 , - 3269 , - 666 , - 2023 , - 300 , - 2537 , - 1694 , - 1291 , - 1328 , - 1805 , - 2722 , - 559 , - 2356 , - 1073 , - 230 , - 3347 , - 3384 , - 341 , - 1258 , - 2615 , - 892 , - 3129 , - 2286 , - 1883 , - 1920 , - 2397 , - 3314 , - 1151 , - 2948 , - 1665 , - 822 , - 419 , - 456 , - 933 , - 1850 , - 3207 , - 1484 , - 201 , - 2878 , - 2475 , - 2512 , - 2989 , - 386 , - 1743 , - 20 , - 2257 , - 1414 , - 1011 , - 1048 , - 1525 , - 2442 , - 279 , - 2076 , - 793 , - 3470 , - 3067 , - 3104 , - 61 , - 978 , - 2335 , - 612 , - 2849 , - 2006 , - 1603 , - 1640 , - 2117 , - 3034 , - 871 , - 2668 , - 1385 , - 542 , - 139 , - 176 , - 653 , - 1570 , - 2927 , - 1204 , - 3441 , - 2598 , - 2195 , - 2232 , - 2709 , - 106 , - 1463 , - 3260 , - 1977 , - 1134 , - 731 , - 768 , - 1245 , - 2162 , - 3519 , - 1796 , - 513 , - 3190 , - 2787 , - 2824 , - 3301 , - 698 , - 2055 , - 332 , - 2569 , - 1726 , - 1323 , - 1360 , - 1837 , - 2754 , - 591 , - 2388 , - 1105 , - 262 , - 3379 , - 3416 , - 373 , - 1290 , - 2647 , - 924 , - 3161 , - 2318 , - 1915 , - 1952 , - 2429 , - 3346 , - 1183 , - 2980 , - 1697 , - 854 , - 451 , - 488 , - 965 , - 1882 , - 3239 , - 1516 , - 233 , - 2910 , - 2507 , - 2544 , - 3021 , - 418 , - 1775 , - 52 , - 2289 , - 1446 , - 1043 , - 1080 , - 1557 , - 2474 , - 311 , - 2108 , - 825 , - 3502 , - 3099 , - 3136 , - 93 , - 1010 , - 2367 , - 644 , - 2881 , - 2038 , - 1635 , - 1672 , - 2149 , - 3066 , - 903 , - 2700 , - 1417 , - 574 , - 171 , - 208 , - 685 , - 1602 , - 2959 , - 1236 , - 3473 , - 2630 , - 2227 , - 2264 , - 2741 , - 138 , - 1495 , - 3292 , - 2009 , - 1166 , - 763 , - 800 , - 1277 , - 2194 , - 31 , - 1828 , - 545 , - 3222 , - 2819 , - 2856 , - 3333 , - 730 , - 2087 , - 364 , - 2601 , - 1758 , - 1355 , - 1392 , - 1869 , - 2786 , - 623 , - 2420 , - 1137 , - 294 , - 3411 , - 3448 , - 405 , - 1322 , - 2679 , - 956 , - 3193 , - 2350 , - 1947 , - 1984 , - 2461 , - 3378 , - 1215 , - 3012 , - 1729 , - 886 , - 483 , - 520 , - 997 , - 1914 , - 3271 , - 1548 , - 265 , - 2942 , - 2539 , - 2576 , - 3053 , - 450 , - 1807 , - 84 , - 2321 , - 1478 , - 1075 , - 1112 , - 1589 , - 2506 , - 343 , - 2140 , - 857 , - 14 , - 3131 , - 3168 , - 125 , - 1042 , - 2399 , - 676 , - 2913 , - 2070 , - 1667 , - 1704 , - 2181 , - 3098 , - 935 , - 2732 , - 1449 , - 606 , - 203 , - 240 , - 717 , - 1634 , - 2991 , - 1268 , - 3505 , - 2662 , - 2259 , - 2296 , - 2773 , - 170 , - 1527 , - 3324 , - 2041 , - 1198 , - 795 , - 832 , - 1309 , - 2226 , - 63 , - 1860 , - 577 , - 3254 , - 2851 , - 2888 , - 3365 , - 762 , - 2119 , - 396 , - 2633 , - 1790 , - 1387 , - 1424 , - 1901 , - 2818 , - 655 , - 2452 , - 1169 , - 326 , - 3443 , - 3480 , - 437 , - 1354 , - 2711 , - 988 , - 3225 , - 2382 , - 1979 , - 2016 , - 2493 , - 3410 , - 1247 , - 3044 , - 1761 , - 918 , - 515 , - 552 , - 1029 , - 1946 , - 3303 , - 1580 , - 297 , - 2974 , - 2571 , - 2608 , - 3085 , - 482 , - 1839 , - 116 , - 2353 , - 1510 , - 1107 , - 1144 , - 1621 , - 2538 , - 375 , - 2172 , - 889 , - 46 , - 3163 , - 3200 , - 157 , - 1074 , - 2431 , - 708 , - 2945 , - 2102 , - 1699 , - 1736 , - 2213 , - 3130 , - 967 , - 2764 , - 1481 , - 638 , - 235 , - 272 , - 749 , - 1666 , - 3023 , - 1300 , - 17 , - 2694 , - 2291 , - 2328 , - 2805 , - 202 , - 1559 , - 3356 , - 2073 , - 1230 , - 827 , - 864 , - 1341 , - 2258 , - 95 , - 1892 , - 609 , - 3286 , - 2883 , - 2920 , - 3397 , - 794 , - 2151 , - 428 , - 2665 , - 1822 , - 1419 , - 1456 , - 1933 , - 2850 , - 687 , - 2484 , - 1201 , - 358 , - 3475 , - 3512 , - 469 , - 1386 , - 2743 , - 1020 , - 3257 , - 2414 , - 2011 , - 2048 , - 2525 , - 3442 , - 1279 , - 3076 , - 1793 , - 950 , - 547 , - 584 , - 1061 , - 1978 , - 3335 , - 1612 , - 329 , - 3006 , - 2603 , - 2640 , - 3117 , - 514 , - 1871 , - 148 , - 2385 , - 1542 , - 1139 , - 1176 , - 1653 , - 2570 , - 407 , - 2204 , - 921 , - 78 , - 3195 , - 3232 , - 189 , - 1106 , - 2463 , - 740 , - 2977 , - 2134 , - 1731 , - 1768 , - 2245 , - 3162 , - 999 , - 2796 , - 1513 , - 670 , - 267 , - 304 , - 781 , - 1698 , - 3055 , - 1332 , - 49 , - 2726 , - 2323 , - 2360 , - 2837 , - 234 , - 1591 , - 3388 , - 2105 , - 1262 , - 859 , - 896 , - 1373 , - 2290 , - 127 , - 1924 , - 641 , - 3318 , - 2915 , - 2952 , - 3429 , - 826 , - 2183 , - 460 , - 2697 , - 1854 , - 1451 , - 1488 , - 1965 , - 2882 , - 719 , - 2516 , - 1233 , - 390 , - 3507 , - 24 , - 501 , - 1418 , - 2775 , - 1052 , - 3289 , - 2446 , - 2043 , - 2080 , - 2557 , - 3474 , - 1311 , - 3108 , - 1825 , - 982 , - 579 , - 616 , - 1093 , - 2010 , - 3367 , - 1644 , - 361 , - 3038 , - 2635 , - 2672 , - 3149 , - 546 , - 1903 , - 180 , - 2417 , - 1574 , - 1171 , - 1208 , - 1685 , - 2602 , - 439 , - 2236 , - 953 , - 110 , - 3227 , - 3264 , - 221 , - 1138 , - 2495 , - 772 , - 3009 , - 2166 , - 1763 , - 1800 , - 2277 , - 3194 , - 1031 , - 2828 , - 1545 , - 702 , - 299 , - 336 , - 813 , - 1730 , - 3087 , - 1364 , - 81 , - 2758 , - 2355 , - 2392 , - 2869 , - 266 , - 1623 , - 3420 , - 2137 , - 1294 , - 891 , - 928 , - 1405 , - 2322 , - 159 , - 1956 , - 673 , - 3350 , - 2947 , - 2984 , - 3461 , - 858 , - 2215 , - 492 , - 2729 , - 1886 , - 1483 , - 1520 , - 1997 , - 2914 , - 751 , - 2548 , - 1265 , - 422 , - 19 , - 56 , - 533 , - 1450 , - 2807 , - 1084 , - 3321 , - 2478 , - 2075 , - 2112 , - 2589 , - 3506 , - 1343 , - 3140 , - 1857 , - 1014 , - 611 , - 648 , - 1125 , - 2042 , - 3399 , - 1676 , - 393 , - 3070 , - 2667 , - 2704 , - 3181 , - 578 , - 1935 , - 212 , - 2449 , - 1606 , - 1203 , - 1240 , - 1717 , - 2634 , - 471 , - 2268 , - 985 , - 142 , - 3259 , - 3296 , - 253 , - 1170 , - 2527 , - 804 , - 3041 , - 2198 , - 1795 , - 1832 , - 2309 , - 3226 , - 1063 , - 2860 , - 1577 , - 734 , - 331 , - 368 , - 845 , - 1762 , - 3119 , - 1396 , - 113 , - 2790 , - 2387 , - 2424 , - 2901 , - 298 , - 1655 , - 3452 , - 2169 , - 1326 , - 923 , - 960 , - 1437 , - 2354 , - 191 , - 1988 , - 705 , - 3382 , - 2979 , - 3016 , - 3493 , - 890 , - 2247 , - 524 , - 2761 , - 1918 , - 1515 , - 1552 , - 2029 , - 2946 , - 783 , - 2580 , - 1297 , - 454 , - 51 , - 88 , - 565 , - 1482 , - 2839 , - 1116 , - 3353 , - 2510 , - 2107 , - 2144 , - 2621 , - 18 , - 1375 , - 3172 , - 1889 , - 1046 , - 643 , - 680 , - 1157 , - 2074 , - 3431 , - 1708 , - 425 , - 3102 , - 2699 , - 2736 , - 3213 , - 610 , - 1967 , - 244 , - 2481 , - 1638 , - 1235 , - 1272 , - 1749 , - 2666 , - 503 , - 2300 , - 1017 , - 174 , - 3291 , - 3328 , - 285 , - 1202 , - 2559 , - 836 , - 3073 , - 2230 , - 1827 , - 1864 , - 2341 , - 3258 , - 1095 , - 2892 , - 1609 , - 766 , - 363 , - 400 , - 877 , - 1794 , - 3151 , - 1428 , - 145 , - 2822 , - 2419 , - 2456 , - 2933 , - 330 , - 1687 , - 3484 , - 2201 , - 1358 , - 955 , - 992 , - 1469 , - 2386 , - 223 , - 2020 , - 737 , - 3414 , - 3011 , - 3048 , - 5 , - 922 , - 2279 , - 556 , - 2793 , - 1950 , - 1547 , - 1584 , - 2061 , - 2978 , - 815 , - 2612 , - 1329 , - 486 , - 83 , - 120 , - 597 , - 1514 , - 2871 , - 1148 , - 3385 , - 2542 , - 2139 , - 2176 , - 2653 , - 50 , - 1407 , - 3204 , - 1921 , - 1078 , - 675 , - 712 , - 1189 , - 2106 , - 3463 , - 1740 , - 457 , - 3134 , - 2731 , - 2768 , - 3245 , - 642 , - 1999 , - 276 , - 2513 , - 1670 , - 1267 , - 1304 , - 1781 , - 2698 , - 535 , - 2332 , - 1049 , - 206 , - 3323 , - 3360 , - 317 , - 1234 , - 2591 , - 868 , - 3105 , - 2262 , - 1859 , - 1896 , - 2373 , - 3290 , - 1127 , - 2924 , - 1641 , - 798 , - 395 , - 432 , - 909 , - 1826 , - 3183 , - 1460 , - 177 , - 2854 , - 2451 , - 2488 , - 2965 , - 362 , - 1719 , - 3516 , - 2233 , - 1390 , - 987 , - 1024 , - 1501 , - 2418 , - 255 , - 2052 , - 769 , - 3446 , - 3043 , - 3080 , - 37 , - 954 , - 2311 , - 588 , - 2825 , - 1982 , - 1579 , - 1616 , - 2093 , - 3010 , - 847 , - 2644 , - 1361 , - 518 , - 115 , - 152 , - 629 , - 1546 , - 2903 , - 1180 , - 3417 , - 2574 , - 2171 , - 2208 , - 2685 , - 82 , - 1439 , - 3236 , - 1953 , - 1110 , - 707 , - 744 , - 1221 , - 2138 , - 3495 , - 1772 , - 489 , - 3166 , - 2763 , - 2800 , - 3277 , - 674 , - 2031 , - 308 , - 2545 , - 1702 , - 1299 , - 1336 , - 1813 , - 2730 , - 567 , - 2364 , - 1081 , - 238 , - 3355 , - 3392 , - 349 , - 1266 , - 2623 , - 900 , - 3137 , - 2294 , - 1891 , - 1928 , - 2405 , - 3322 , - 1159 , - 2956 , - 1673 , - 830 , - 427 , - 464 , - 941 , - 1858 , - 3215 , - 1492 , - 209 , - 2886 , - 2483 , - 2520 , - 2997 , - 394 , - 1751 , - 28 , - 2265 , - 1422 , - 1019 , - 1056 , - 1533 , - 2450 , - 287 , - 2084 , - 801 , - 3478 , - 3075 , - 3112 , - 69 , - 986 , - 2343 , - 620 , - 2857 , - 2014 , - 1611 , - 1648 , - 2125 , - 3042 , - 879 , - 2676 , - 1393 , - 550 , - 147 , - 184 , - 661 , - 1578 , - 2935 , - 1212 , - 3449 , - 2606 , - 2203 , - 2240 , - 2717 , - 114 , - 1471 , - 3268 , - 1985 , - 1142 , - 739 , - 776 , - 1253 , - 2170 , - 7 , - 1804 , - 521 , - 3198 , - 2795 , - 2832 , - 3309 , - 706 , - 2063 , - 340 , - 2577 , - 1734 , - 1331 , - 1368 , - 1845 , - 2762 , - 599 , - 2396 , - 1113 , - 270 , - 3387 , - 3424 , - 381 , - 1298 , - 2655 , - 932 , - 3169 , - 2326 , - 1923 , - 1960 , - 2437 , - 3354 , - 1191 , - 2988 , - 1705 , - 862 , - 459 , - 496 , - 973 , - 1890 , - 3247 , - 1524 , - 241 , - 2918 , - 2515 , - 2552 , - 3029 , - 426 , - 1783 , - 60 , - 2297 , - 1454 , - 1051 , - 1088 , - 1565 , - 2482 , - 319 , - 2116 , - 833 , - 3510 , - 3107 , - 3144 , - 101 , - 1018 , - 2375 , - 652 , - 2889 , - 2046 , - 1643 , - 1680 , - 2157 , - 3074 , - 911 , - 2708 , - 1425 , - 582 , - 179 , - 216 , - 693 , - 1610 , - 2967 , - 1244 , - 3481 , - 2638 , - 2235 , - 2272 , - 2749 , - 146 , - 1503 , - 3300 , - 2017 , - 1174 , - 771 , - 808 , - 1285 , - 2202 , - 39 , - 1836 , - 553 , - 3230 , - 2827 , - 2864 , - 3341 , - 738 , - 2095 , - 372 , - 2609 , - 1766 , - 1363 , - 1400 , - 1877 , - 2794 , - 631 , - 2428 , - 1145 , - 302 , - 3419 , - 3456 , - 413 , - 1330 , - 2687 , - 964 , - 3201 , - 2358 , - 1955 , - 1992 , - 2469 , - 3386 , - 1223 , - 3020 , - 1737 , - 894 , - 491 , - 528 , - 1005 , - 1922 , - 3279 , - 1556 , - 273 , - 2950 , - 2547 , - 2584 , - 3061 , - 458 , - 1815 , - 92 , - 2329 , - 1486 , - 1083 , - 1120 , - 1597 , - 2514 , - 351 , - 2148 , - 865 , - 22 , - 3139 , - 3176 , - 133 , - 1050 , - 2407 , - 684 , - 2921 , - 2078 , - 1675 , - 1712 , - 2189 , - 3106 , - 943 , - 2740 , - 1457 , - 614 , - 211 , - 248 , - 725 , - 1642 , - 2999 , - 1276 , - 3513 , - 2670 , - 2267 , - 2304 , - 2781 , - 178 , - 1535 , - 3332 , - 2049 , - 1206 , - 803 , - 840 , - 1317 , - 2234 , - 71 , - 1868 , - 585 , - 3262 , - 2859 , - 2896 , - 3373 , - 770 , - 2127 , - 404 , - 2641 , - 1798 , - 1395 , - 1432 , - 1909 , - 2826 , - 663 , - 2460 , - 1177 , - 334 , - 3451 , - 3488 , - 445 , - 1362 , - 2719 , - 996 , - 3233 , - 2390 , - 1987 , - 2024 , - 2501 , - 3418 , - 1255 , - 3052 , - 1769 , - 926 , - 523 , - 560 , - 1037 , - 1954 , - 3311 , - 1588 , - 305 , - 2982 , - 2579 , - 2616 , - 3093 , - 490 , - 1847 , - 124 , - 2361 , - 1518 , - 1115 , - 1152 , - 1629 , - 2546 , - 383 , - 2180 , - 897 , - 54 , - 3171 , - 3208 , - 165 , - 1082 , - 2439 , - 716 , - 2953 , - 2110 , - 1707 , - 1744 , - 2221 , - 3138 , - 975 , - 2772 , - 1489 , - 646 , - 243 , - 280 , - 757 , - 1674 , - 3031 , - 1308 , - 25 , - 2702 , - 2299 , - 2336 , - 2813 , - 210 , - 1567 , - 3364 , - 2081 , - 1238 , - 835 , - 872 , - 1349 , - 2266 , - 103 , - 1900 , - 617 , - 3294 , - 2891 , - 2928 , - 3405 , - 802 , - 2159 , - 436 , - 2673 , - 1830 , - 1427 , - 1464 , - 1941 , - 2858 , - 695 , - 2492 , - 1209 , - 366 , - 3483 , - 0 , - 393 , - 1458 , - 3195 , - 2020 , - 1517 , - 1686 , - 2527 , - 456 , - 2641 , - 1914 , - 1859 , - 2476 , - 181 , - 2142 , - 1191 , - 912 , - 1305 , - 2370 , - 523 , - 2932 , - 2429 , - 2598 , - 3439 , - 1368 , - 3553 , - 2826 , - 2771 , - 3388 , - 1093 , - 3054 , - 2103 , - 1824 , - 2217 , - 3282 , - 1435 , - 260 , - 3341 , - 3510 , - 767 , - 2280 , - 881 , - 154 , - 99 , - 716 , - 2005 , - 382 , - 3015 , - 2736 , - 3129 , - 610 , - 2347 , - 1172 , - 669 , - 838 , - 1679 , - 3192 , - 1793 , - 1066 , - 1011 , - 1628 , - 2917 , - 1294 , - 343 , - 64 , - 457 , - 1522 , - 3259 , - 2084 , - 1581 , - 1750 , - 2591 , - 520 , - 2705 , - 1978 , - 1923 , - 2540 , - 245 , - 2206 , - 1255 , - 976 , - 1369 , - 2434 , - 587 , - 2996 , - 2493 , - 2662 , - 3503 , - 1432 , - 33 , - 2890 , - 2835 , - 3452 , - 1157 , - 3118 , - 2167 , - 1888 , - 2281 , - 3346 , - 1499 , - 324 , - 3405 , - 3574 , - 831 , - 2344 , - 945 , - 218 , - 163 , - 780 , - 2069 , - 446 , - 3079 , - 2800 , - 3193 , - 674 , - 2411 , - 1236 , - 733 , - 902 , - 1743 , - 3256 , - 1857 , - 1130 , - 1075 , - 1692 , - 2981 , - 1358 , - 407 , - 128 , - 521 , - 1586 , - 3323 , - 2148 , - 1645 , - 1814 , - 2655 , - 584 , - 2769 , - 2042 , - 1987 , - 2604 , - 309 , - 2270 , - 1319 , - 1040 , - 1433 , - 2498 , - 651 , - 3060 , - 2557 , - 2726 , - 3567 , - 1496 , - 97 , - 2954 , - 2899 , - 3516 , - 1221 , - 3182 , - 2231 , - 1952 , - 2345 , - 3410 , - 1563 , - 388 , - 3469 , - 54 , - 895 , - 2408 , - 1009 , - 282 , - 227 , - 844 , - 2133 , - 510 , - 3143 , - 2864 , - 3257 , - 738 , - 2475 , - 1300 , - 797 , - 966 , - 1807 , - 3320 , - 1921 , - 1194 , - 1139 , - 1756 , - 3045 , - 1422 , - 471 , - 192 , - 585 , - 1650 , - 3387 , - 2212 , - 1709 , - 1878 , - 2719 , - 648 , - 2833 , - 2106 , - 2051 , - 2668 , - 373 , - 2334 , - 1383 , - 1104 , - 1497 , - 2562 , - 715 , - 3124 , - 2621 , - 2790 , - 47 , - 1560 , - 161 , - 3018 , - 2963 , - 3580 , - 1285 , - 3246 , - 2295 , - 2016 , - 2409 , - 3474 , - 1627 , - 452 , - 3533 , - 118 , - 959 , - 2472 , - 1073 , - 346 , - 291 , - 908 , - 2197 , - 574 , - 3207 , - 2928 , - 3321 , - 802 , - 2539 , - 1364 , - 861 , - 1030 , - 1871 , - 3384 , - 1985 , - 1258 , - 1203 , - 1820 , - 3109 , - 1486 , - 535 , - 256 , - 649 , - 1714 , - 3451 , - 2276 , - 1773 , - 1942 , - 2783 , - 712 , - 2897 , - 2170 , - 2115 , - 2732 , - 437 , - 2398 , - 1447 , - 1168 , - 1561 , - 2626 , - 779 , - 3188 , - 2685 , - 2854 , - 111 , - 1624 , - 225 , - 3082 , - 3027 , - 60 , - 1349 , - 3310 , - 2359 , - 2080 , - 2473 , - 3538 , - 1691 , - 516 , - 13 , - 182 , - 1023 , - 2536 , - 1137 , - 410 , - 355 , - 972 , - 2261 , - 638 , - 3271 , - 2992 , - 3385 , - 866 , - 2603 , - 1428 , - 925 , - 1094 , - 1935 , - 3448 , - 2049 , - 1322 , - 1267 , - 1884 , - 3173 , - 1550 , - 599 , - 320 , - 713 , - 1778 , - 3515 , - 2340 , - 1837 , - 2006 , - 2847 , - 776 , - 2961 , - 2234 , - 2179 , - 2796 , - 501 , - 2462 , - 1511 , - 1232 , - 1625 , - 2690 , - 843 , - 3252 , - 2749 , - 2918 , - 175 , - 1688 , - 289 , - 3146 , - 3091 , - 124 , - 1413 , - 3374 , - 2423 , - 2144 , - 2537 , - 18 , - 1755 , - 580 , - 77 , - 246 , - 1087 , - 2600 , - 1201 , - 474 , - 419 , - 1036 , - 2325 , - 702 , - 3335 , - 3056 , - 3449 , - 930 , - 2667 , - 1492 , - 989 , - 1158 , - 1999 , - 3512 , - 2113 , - 1386 , - 1331 , - 1948 , - 3237 , - 1614 , - 663 , - 384 , - 777 , - 1842 , - 3579 , - 2404 , - 1901 , - 2070 , - 2911 , - 840 , - 3025 , - 2298 , - 2243 , - 2860 , - 565 , - 2526 , - 1575 , - 1296 , - 1689 , - 2754 , - 907 , - 3316 , - 2813 , - 2982 , - 239 , - 1752 , - 353 , - 3210 , - 3155 , - 188 , - 1477 , - 3438 , - 2487 , - 2208 , - 2601 , - 82 , - 1819 , - 644 , - 141 , - 310 , - 1151 , - 2664 , - 1265 , - 538 , - 483 , - 1100 , - 2389 , - 766 , - 3399 , - 3120 , - 3513 , - 994 , - 2731 , - 1556 , - 1053 , - 1222 , - 2063 , - 3576 , - 2177 , - 1450 , - 1395 , - 2012 , - 3301 , - 1678 , - 727 , - 448 , - 841 , - 1906 , - 59 , - 2468 , - 1965 , - 2134 , - 2975 , - 904 , - 3089 , - 2362 , - 2307 , - 2924 , - 629 , - 2590 , - 1639 , - 1360 , - 1753 , - 2818 , - 971 , - 3380 , - 2877 , - 3046 , - 303 , - 1816 , - 417 , - 3274 , - 3219 , - 252 , - 1541 , - 3502 , - 2551 , - 2272 , - 2665 , - 146 , - 1883 , - 708 , - 205 , - 374 , - 1215 , - 2728 , - 1329 , - 602 , - 547 , - 1164 , - 2453 , - 830 , - 3463 , - 3184 , - 3577 , - 1058 , - 2795 , - 1620 , - 1117 , - 1286 , - 2127 , - 56 , - 2241 , - 1514 , - 1459 , - 2076 , - 3365 , - 1742 , - 791 , - 512 , - 905 , - 1970 , - 123 , - 2532 , - 2029 , - 2198 , - 3039 , - 968 , - 3153 , - 2426 , - 2371 , - 2988 , - 693 , - 2654 , - 1703 , - 1424 , - 1817 , - 2882 , - 1035 , - 3444 , - 2941 , - 3110 , - 367 , - 1880 , - 481 , - 3338 , - 3283 , - 316 , - 1605 , - 3566 , - 2615 , - 2336 , - 2729 , - 210 , - 1947 , - 772 , - 269 , - 438 , - 1279 , - 2792 , - 1393 , - 666 , - 611 , - 1228 , - 2517 , - 894 , - 3527 , - 3248 , - 57 , - 1122 , - 2859 , - 1684 , - 1181 , - 1350 , - 2191 , - 120 , - 2305 , - 1578 , - 1523 , - 2140 , - 3429 , - 1806 , - 855 , - 576 , - 969 , - 2034 , - 187 , - 2596 , - 2093 , - 2262 , - 3103 , - 1032 , - 3217 , - 2490 , - 2435 , - 3052 , - 757 , - 2718 , - 1767 , - 1488 , - 1881 , - 2946 , - 1099 , - 3508 , - 3005 , - 3174 , - 431 , - 1944 , - 545 , - 3402 , - 3347 , - 380 , - 1669 , - 46 , - 2679 , - 2400 , - 2793 , - 274 , - 2011 , - 836 , - 333 , - 502 , - 1343 , - 2856 , - 1457 , - 730 , - 675 , - 1292 , - 2581 , - 958 , - 7 , - 3312 , - 121 , - 1186 , - 2923 , - 1748 , - 1245 , - 1414 , - 2255 , - 184 , - 2369 , - 1642 , - 1587 , - 2204 , - 3493 , - 1870 , - 919 , - 640 , - 1033 , - 2098 , - 251 , - 2660 , - 2157 , - 2326 , - 3167 , - 1096 , - 3281 , - 2554 , - 2499 , - 3116 , - 821 , - 2782 , - 1831 , - 1552 , - 1945 , - 3010 , - 1163 , - 3572 , - 3069 , - 3238 , - 495 , - 2008 , - 609 , - 3466 , - 3411 , - 444 , - 1733 , - 110 , - 2743 , - 2464 , - 2857 , - 338 , - 2075 , - 900 , - 397 , - 566 , - 1407 , - 2920 , - 1521 , - 794 , - 739 , - 1356 , - 2645 , - 1022 , - 71 , - 3376 , - 185 , - 1250 , - 2987 , - 1812 , - 1309 , - 1478 , - 2319 , - 248 , - 2433 , - 1706 , - 1651 , - 2268 , - 3557 , - 1934 , - 983 , - 704 , - 1097 , - 2162 , - 315 , - 2724 , - 2221 , - 2390 , - 3231 , - 1160 , - 3345 , - 2618 , - 2563 , - 3180 , - 885 , - 2846 , - 1895 , - 1616 , - 2009 , - 3074 , - 1227 , - 52 , - 3133 , - 3302 , - 559 , - 2072 , - 673 , - 3530 , - 3475 , - 508 , - 1797 , - 174 , - 2807 , - 2528 , - 2921 , - 402 , - 2139 , - 964 , - 461 , - 630 , - 1471 , - 2984 , - 1585 , - 858 , - 803 , - 1420 , - 2709 , - 1086 , - 135 , - 3440 , - 249 , - 1314 , - 3051 , - 1876 , - 1373 , - 1542 , - 2383 , - 312 , - 2497 , - 1770 , - 1715 , - 2332 , - 37 , - 1998 , - 1047 , - 768 , - 1161 , - 2226 , - 379 , - 2788 , - 2285 , - 2454 , - 3295 , - 1224 , - 3409 , - 2682 , - 2627 , - 3244 , - 949 , - 2910 , - 1959 , - 1680 , - 2073 , - 3138 , - 1291 , - 116 , - 3197 , - 3366 , - 623 , - 2136 , - 737 , - 10 , - 3539 , - 572 , - 1861 , - 238 , - 2871 , - 2592 , - 2985 , - 466 , - 2203 , - 1028 , - 525 , - 694 , - 1535 , - 3048 , - 1649 , - 922 , - 867 , - 1484 , - 2773 , - 1150 , - 199 , - 3504 , - 313 , - 1378 , - 3115 , - 1940 , - 1437 , - 1606 , - 2447 , - 376 , - 2561 , - 1834 , - 1779 , - 2396 , - 101 , - 2062 , - 1111 , - 832 , - 1225 , - 2290 , - 443 , - 2852 , - 2349 , - 2518 , - 3359 , - 1288 , - 3473 , - 2746 , - 2691 , - 3308 , - 1013 , - 2974 , - 2023 , - 1744 , - 2137 , - 3202 , - 1355 , - 180 , - 3261 , - 3430 , - 687 , - 2200 , - 801 , - 74 , - 19 , - 636 , - 1925 , - 302 , - 2935 , - 2656 , - 3049 , - 530 , - 2267 , - 1092 , - 589 , - 758 , - 1599 , - 3112 , - 1713 , - 986 , - 931 , - 1548 , - 2837 , - 1214 , - 263 , - 3568 , - 377 , - 1442 , - 3179 , - 2004 , - 1501 , - 1670 , - 2511 , - 440 , - 2625 , - 1898 , - 1843 , - 2460 , - 165 , - 2126 , - 1175 , - 896 , - 1289 , - 2354 , - 507 , - 2916 , - 2413 , - 2582 , - 3423 , - 1352 , - 3537 , - 2810 , - 2755 , - 3372 , - 1077 , - 3038 , - 2087 , - 1808 , - 2201 , - 3266 , - 1419 , - 244 , - 3325 , - 3494 , - 751 , - 2264 , - 865 , - 138 , - 83 , - 700 , - 1989 , - 366 , - 2999 , - 2720 , - 3113 , - 594 , - 2331 , - 1156 , - 653 , - 822 , - 1663 , - 3176 , - 1777 , - 1050 , - 995 , - 1612 , - 2901 , - 1278 , - 327 , - 48 , - 441 , - 1506 , - 3243 , - 2068 , - 1565 , - 1734 , - 2575 , - 504 , - 2689 , - 1962 , - 1907 , - 2524 , - 229 , - 2190 , - 1239 , - 960 , - 1353 , - 2418 , - 571 , - 2980 , - 2477 , - 2646 , - 3487 , - 1416 , - 17 , - 2874 , - 2819 , - 3436 , - 1141 , - 3102 , - 2151 , - 1872 , - 2265 , - 3330 , - 1483 , - 308 , - 3389 , - 3558 , - 815 , - 2328 , - 929 , - 202 , - 147 , - 764 , - 2053 , - 430 , - 3063 , - 2784 , - 3177 , - 658 , - 2395 , - 1220 , - 717 , - 886 , - 1727 , - 3240 , - 1841 , - 1114 , - 1059 , - 1676 , - 2965 , - 1342 , - 391 , - 112 , - 505 , - 1570 , - 3307 , - 2132 , - 1629 , - 1798 , - 2639 , - 568 , - 2753 , - 2026 , - 1971 , - 2588 , - 293 , - 2254 , - 1303 , - 1024 , - 1417 , - 2482 , - 635 , - 3044 , - 2541 , - 2710 , - 3551 , - 1480 , - 81 , - 2938 , - 2883 , - 3500 , - 1205 , - 3166 , - 2215 , - 1936 , - 2329 , - 3394 , - 1547 , - 372 , - 3453 , - 38 , - 879 , - 2392 , - 993 , - 266 , - 211 , - 828 , - 2117 , - 494 , - 3127 , - 2848 , - 3241 , - 722 , - 2459 , - 1284 , - 781 , - 950 , - 1791 , - 3304 , - 1905 , - 1178 , - 1123 , - 1740 , - 3029 , - 1406 , - 455 , - 176 , - 569 , - 1634 , - 3371 , - 2196 , - 1693 , - 1862 , - 2703 , - 632 , - 2817 , - 2090 , - 2035 , - 2652 , - 357 , - 2318 , - 1367 , - 1088 , - 1481 , - 2546 , - 699 , - 3108 , - 2605 , - 2774 , - 31 , - 1544 , - 145 , - 3002 , - 2947 , - 3564 , - 1269 , - 3230 , - 2279 , - 2000 , - 2393 , - 3458 , - 1611 , - 436 , - 3517 , - 102 , - 943 , - 2456 , - 1057 , - 330 , - 275 , - 892 , - 2181 , - 558 , - 3191 , - 2912 , - 3305 , - 786 , - 2523 , - 1348 , - 845 , - 1014 , - 1855 , - 3368 , - 1969 , - 1242 , - 1187 , - 1804 , - 3093 , - 1470 , - 519 , - 240 , - 633 , - 1698 , - 3435 , - 2260 , - 1757 , - 1926 , - 2767 , - 696 , - 2881 , - 2154 , - 2099 , - 2716 , - 421 , - 2382 , - 1431 , - 1152 , - 1545 , - 2610 , - 763 , - 3172 , - 2669 , - 2838 , - 95 , - 1608 , - 209 , - 3066 , - 3011 , - 44 , - 1333 , - 3294 , - 2343 , - 2064 , - 2457 , - 3522 , - 1675 , - 500 , - 3581 , - 166 , - 1007 , - 2520 , - 1121 , - 394 , - 339 , - 956 , - 2245 , - 622 , - 3255 , - 2976 , - 3369 , - 850 , - 2587 , - 1412 , - 909 , - 1078 , - 1919 , - 3432 , - 2033 , - 1306 , - 1251 , - 1868 , - 3157 , - 1534 , - 583 , - 304 , - 697 , - 1762 , - 3499 , - 2324 , - 1821 , - 1990 , - 2831 , - 760 , - 2945 , - 2218 , - 2163 , - 2780 , - 485 , - 2446 , - 1495 , - 1216 , - 1609 , - 2674 , - 827 , - 3236 , - 2733 , - 2902 , - 159 , - 1672 , - 273 , - 3130 , - 3075 , - 108 , - 1397 , - 3358 , - 2407 , - 2128 , - 2521 , - 2 , - 1739 , - 564 , - 61 , - 230 , - 1071 , - 2584 , - 1185 , - 458 , - 403 , - 1020 , - 2309 , - 686 , - 3319 , - 3040 , - 3433 , - 914 , - 2651 , - 1476 , - 973 , - 1142 , - 1983 , - 3496 , - 2097 , - 1370 , - 1315 , - 1932 , - 3221 , - 1598 , - 647 , - 368 , - 761 , - 1826 , - 3563 , - 2388 , - 1885 , - 2054 , - 2895 , - 824 , - 3009 , - 2282 , - 2227 , - 2844 , - 549 , - 2510 , - 1559 , - 1280 , - 1673 , - 2738 , - 891 , - 3300 , - 2797 , - 2966 , - 223 , - 1736 , - 337 , - 3194 , - 3139 , - 172 , - 1461 , - 3422 , - 2471 , - 2192 , - 2585 , - 66 , - 1803 , - 628 , - 125 , - 294 , - 1135 , - 2648 , - 1249 , - 522 , - 467 , - 1084 , - 2373 , - 750 , - 3383 , - 3104 , - 3497 , - 978 , - 2715 , - 1540 , - 1037 , - 1206 , - 2047 , - 3560 , - 2161 , - 1434 , - 1379 , - 1996 , - 3285 , - 1662 , - 711 , - 432 , - 825 , - 1890 , - 43 , - 2452 , - 1949 , - 2118 , - 2959 , - 888 , - 3073 , - 2346 , - 2291 , - 2908 , - 613 , - 2574 , - 1623 , - 1344 , - 1737 , - 2802 , - 955 , - 3364 , - 2861 , - 3030 , - 287 , - 1800 , - 401 , - 3258 , - 3203 , - 236 , - 1525 , - 3486 , - 2535 , - 2256 , - 2649 , - 130 , - 1867 , - 692 , - 189 , - 358 , - 1199 , - 2712 , - 1313 , - 586 , - 531 , - 1148 , - 2437 , - 814 , - 3447 , - 3168 , - 3561 , - 1042 , - 2779 , - 1604 , - 1101 , - 1270 , - 2111 , - 40 , - 2225 , - 1498 , - 1443 , - 2060 , - 3349 , - 1726 , - 775 , - 496 , - 889 , - 1954 , - 107 , - 2516 , - 2013 , - 2182 , - 3023 , - 952 , - 3137 , - 2410 , - 2355 , - 2972 , - 677 , - 2638 , - 1687 , - 1408 , - 1801 , - 2866 , - 1019 , - 3428 , - 2925 , - 3094 , - 351 , - 1864 , - 465 , - 3322 , - 3267 , - 300 , - 1589 , - 3550 , - 2599 , - 2320 , - 2713 , - 194 , - 1931 , - 756 , - 253 , - 422 , - 1263 , - 2776 , - 1377 , - 650 , - 595 , - 1212 , - 2501 , - 878 , - 3511 , - 3232 , - 41 , - 1106 , - 2843 , - 1668 , - 1165 , - 1334 , - 2175 , - 104 , - 2289 , - 1562 , - 1507 , - 2124 , - 3413 , - 1790 , - 839 , - 560 , - 953 , - 2018 , - 171 , - 2580 , - 2077 , - 2246 , - 3087 , - 1016 , - 3201 , - 2474 , - 2419 , - 3036 , - 741 , - 2702 , - 1751 , - 1472 , - 1865 , - 2930 , - 1083 , - 3492 , - 2989 , - 3158 , - 415 , - 1928 , - 529 , - 3386 , - 3331 , - 364 , - 1653 , - 30 , - 2663 , - 2384 , - 2777 , - 258 , - 1995 , - 820 , - 317 , - 486 , - 1327 , - 2840 , - 1441 , - 714 , - 659 , - 1276 , - 2565 , - 942 , - 3575 , - 3296 , - 105 , - 1170 , - 2907 , - 1732 , - 1229 , - 1398 , - 2239 , - 168 , - 2353 , - 1626 , - 1571 , - 2188 , - 3477 , - 1854 , - 903 , - 624 , - 1017 , - 2082 , - 235 , - 2644 , - 2141 , - 2310 , - 3151 , - 1080 , - 3265 , - 2538 , - 2483 , - 3100 , - 805 , - 2766 , - 1815 , - 1536 , - 1929 , - 2994 , - 1147 , - 3556 , - 3053 , - 3222 , - 479 , - 1992 , - 593 , - 3450 , - 3395 , - 428 , - 1717 , - 94 , - 2727 , - 2448 , - 2841 , - 322 , - 2059 , - 884 , - 381 , - 550 , - 1391 , - 2904 , - 1505 , - 778 , - 723 , - 1340 , - 2629 , - 1006 , - 55 , - 3360 , - 169 , - 1234 , - 2971 , - 1796 , - 1293 , - 1462 , - 2303 , - 232 , - 2417 , - 1690 , - 1635 , - 2252 , - 3541 , - 1918 , - 967 , - 688 , - 1081 , - 2146 , - 299 , - 2708 , - 2205 , - 2374 , - 3215 , - 1144 , - 3329 , - 2602 , - 2547 , - 3164 , - 869 , - 2830 , - 1879 , - 1600 , - 1993 , - 3058 , - 1211 , - 36 , - 3117 , - 3286 , - 543 , - 2056 , - 657 , - 3514 , - 3459 , - 492 , - 1781 , - 158 , - 2791 , - 2512 , - 2905 , - 386 , - 2123 , - 948 , - 445 , - 614 , - 1455 , - 2968 , - 1569 , - 842 , - 787 , - 1404 , - 2693 , - 1070 , - 119 , - 3424 , - 233 , - 1298 , - 3035 , - 1860 , - 1357 , - 1526 , - 2367 , - 296 , - 2481 , - 1754 , - 1699 , - 2316 , - 21 , - 1982 , - 1031 , - 752 , - 1145 , - 2210 , - 363 , - 2772 , - 2269 , - 2438 , - 3279 , - 1208 , - 3393 , - 2666 , - 2611 , - 3228 , - 933 , - 2894 , - 1943 , - 1664 , - 2057 , - 3122 , - 1275 , - 100 , - 3181 , - 3350 , - 607 , - 2120 , - 721 , - 3578 , - 3523 , - 556 , - 1845 , - 222 , - 2855 , - 2576 , - 2969 , - 450 , - 2187 , - 1012 , - 509 , - 678 , - 1519 , - 3032 , - 1633 , - 906 , - 851 , - 1468 , - 2757 , - 1134 , - 183 , - 3488 , - 297 , - 1362 , - 3099 , - 1924 , - 1421 , - 1590 , - 2431 , - 360 , - 2545 , - 1818 , - 1763 , - 2380 , - 85 , - 2046 , - 1095 , - 816 , - 1209 , - 2274 , - 427 , - 2836 , - 2333 , - 2502 , - 3343 , - 1272 , - 3457 , - 2730 , - 2675 , - 3292 , - 997 , - 2958 , - 2007 , - 1728 , - 2121 , - 3186 , - 1339 , - 164 , - 3245 , - 3414 , - 671 , - 2184 , - 785 , - 58 , - 3 , - 620 , - 1909 , - 286 , - 2919 , - 2640 , - 3033 , - 514 , - 2251 , - 1076 , - 573 , - 742 , - 1583 , - 3096 , - 1697 , - 970 , - 915 , - 1532 , - 2821 , - 1198 , - 247 , - 3552 , - 361 , - 1426 , - 3163 , - 1988 , - 1485 , - 1654 , - 2495 , - 424 , - 2609 , - 1882 , - 1827 , - 2444 , - 149 , - 2110 , - 1159 , - 880 , - 1273 , - 2338 , - 491 , - 2900 , - 2397 , - 2566 , - 3407 , - 1336 , - 3521 , - 2794 , - 2739 , - 3356 , - 1061 , - 3022 , - 2071 , - 1792 , - 2185 , - 3250 , - 1403 , - 228 , - 3309 , - 3478 , - 735 , - 2248 , - 849 , - 122 , - 67 , - 684 , - 1973 , - 350 , - 2983 , - 2704 , - 3097 , - 578 , - 2315 , - 1140 , - 637 , - 806 , - 1647 , - 3160 , - 1761 , - 1034 , - 979 , - 1596 , - 2885 , - 1262 , - 311 , - 32 , - 425 , - 1490 , - 3227 , - 2052 , - 1549 , - 1718 , - 2559 , - 488 , - 2673 , - 1946 , - 1891 , - 2508 , - 213 , - 2174 , - 1223 , - 944 , - 1337 , - 2402 , - 555 , - 2964 , - 2461 , - 2630 , - 3471 , - 1400 , - 1 , - 2858 , - 2803 , - 3420 , - 1125 , - 3086 , - 2135 , - 1856 , - 2249 , - 3314 , - 1467 , - 292 , - 3373 , - 3542 , - 799 , - 2312 , - 913 , - 186 , - 131 , - 748 , - 2037 , - 414 , - 3047 , - 2768 , - 3161 , - 642 , - 2379 , - 1204 , - 701 , - 870 , - 1711 , - 3224 , - 1825 , - 1098 , - 1043 , - 1660 , - 2949 , - 1326 , - 375 , - 96 , - 489 , - 1554 , - 3291 , - 2116 , - 1613 , - 1782 , - 2623 , - 552 , - 2737 , - 2010 , - 1955 , - 2572 , - 277 , - 2238 , - 1287 , - 1008 , - 1401 , - 2466 , - 619 , - 3028 , - 2525 , - 2694 , - 3535 , - 1464 , - 65 , - 2922 , - 2867 , - 3484 , - 1189 , - 3150 , - 2199 , - 1920 , - 2313 , - 3378 , - 1531 , - 356 , - 3437 , - 22 , - 863 , - 2376 , - 977 , - 250 , - 195 , - 812 , - 2101 , - 478 , - 3111 , - 2832 , - 3225 , - 706 , - 2443 , - 1268 , - 765 , - 934 , - 1775 , - 3288 , - 1889 , - 1162 , - 1107 , - 1724 , - 3013 , - 1390 , - 439 , - 160 , - 553 , - 1618 , - 3355 , - 2180 , - 1677 , - 1846 , - 2687 , - 616 , - 2801 , - 2074 , - 2019 , - 2636 , - 341 , - 2302 , - 1351 , - 1072 , - 1465 , - 2530 , - 683 , - 3092 , - 2589 , - 2758 , - 15 , - 1528 , - 129 , - 2986 , - 2931 , - 3548 , - 1253 , - 3214 , - 2263 , - 1984 , - 2377 , - 3442 , - 1595 , - 420 , - 3501 , - 86 , - 927 , - 2440 , - 1041 , - 314 , - 259 , - 876 , - 2165 , - 542 , - 3175 , - 2896 , - 3289 , - 770 , - 2507 , - 1332 , - 829 , - 998 , - 1839 , - 3352 , - 1953 , - 1226 , - 1171 , - 1788 , - 3077 , - 1454 , - 503 , - 224 , - 617 , - 1682 , - 3419 , - 2244 , - 1741 , - 1910 , - 2751 , - 680 , - 2865 , - 2138 , - 2083 , - 2700 , - 405 , - 2366 , - 1415 , - 1136 , - 1529 , - 2594 , - 747 , - 3156 , - 2653 , - 2822 , - 79 , - 1592 , - 193 , - 3050 , - 2995 , - 28 , - 1317 , - 3278 , - 2327 , - 2048 , - 2441 , - 3506 , - 1659 , - 484 , - 3565 , - 150 , - 991 , - 2504 , - 1105 , - 378 , - 323 , - 940 , - 2229 , - 606 , - 3239 , - 2960 , - 3353 , - 834 , - 2571 , - 1396 , - 893 , - 1062 , - 1903 , - 3416 , - 2017 , - 1290 , - 1235 , - 1852 , - 3141 , - 1518 , - 567 , - 288 , - 681 , - 1746 , - 3483 , - 2308 , - 1805 , - 1974 , - 2815 , - 744 , - 2929 , - 2202 , - 2147 , - 2764 , - 469 , - 2430 , - 1479 , - 1200 , - 1593 , - 2658 , - 811 , - 3220 , - 2717 , - 2886 , - 143 , - 1656 , - 257 , - 3114 , - 3059 , - 92 , - 1381 , - 3342 , - 2391 , - 2112 , - 2505 , - 3570 , - 1723 , - 548 , - 45 , - 214 , - 1055 , - 2568 , - 1169 , - 442 , - 387 , - 1004 , - 2293 , - 670 , - 3303 , - 3024 , - 3417 , - 898 , - 2635 , - 1460 , - 957 , - 1126 , - 1967 , - 3480 , - 2081 , - 1354 , - 1299 , - 1916 , - 3205 , - 1582 , - 631 , - 352 , - 745 , - 1810 , - 3547 , - 2372 , - 1869 , - 2038 , - 2879 , - 808 , - 2993 , - 2266 , - 2211 , - 2828 , - 533 , - 2494 , - 1543 , - 1264 , - 1657 , - 2722 , - 875 , - 3284 , - 2781 , - 2950 , - 207 , - 1720 , - 321 , - 3178 , - 3123 , - 156 , - 1445 , - 3406 , - 2455 , - 2176 , - 2569 , - 50 , - 1787 , - 612 , - 109 , - 278 , - 1119 , - 2632 , - 1233 , - 506 , - 451 , - 1068 , - 2357 , - 734 , - 3367 , - 3088 , - 3481 , - 962 , - 2699 , - 1524 , - 1021 , - 1190 , - 2031 , - 3544 , - 2145 , - 1418 , - 1363 , - 1980 , - 3269 , - 1646 , - 695 , - 416 , - 809 , - 1874 , - 27 , - 2436 , - 1933 , - 2102 , - 2943 , - 872 , - 3057 , - 2330 , - 2275 , - 2892 , - 597 , - 2558 , - 1607 , - 1328 , - 1721 , - 2786 , - 939 , - 3348 , - 2845 , - 3014 , - 271 , - 1784 , - 385 , - 3242 , - 3187 , - 220 , - 1509 , - 3470 , - 2519 , - 2240 , - 2633 , - 114 , - 1851 , - 676 , - 173 , - 342 , - 1183 , - 2696 , - 1297 , - 570 , - 515 , - 1132 , - 2421 , - 798 , - 3431 , - 3152 , - 3545 , - 1026 , - 2763 , - 1588 , - 1085 , - 1254 , - 2095 , - 24 , - 2209 , - 1482 , - 1427 , - 2044 , - 3333 , - 1710 , - 759 , - 480 , - 873 , - 1938 , - 91 , - 2500 , - 1997 , - 2166 , - 3007 , - 936 , - 3121 , - 2394 , - 2339 , - 2956 , - 661 , - 2622 , - 1671 , - 1392 , - 1785 , - 2850 , - 1003 , - 3412 , - 2909 , - 3078 , - 335 , - 1848 , - 449 , - 3306 , - 3251 , - 284 , - 1573 , - 3534 , - 2583 , - 2304 , - 2697 , - 178 , - 1915 , - 740 , - 237 , - 406 , - 1247 , - 2760 , - 1361 , - 634 , - 579 , - 1196 , - 2485 , - 862 , - 3495 , - 3216 , - 25 , - 1090 , - 2827 , - 1652 , - 1149 , - 1318 , - 2159 , - 88 , - 2273 , - 1546 , - 1491 , - 2108 , - 3397 , - 1774 , - 823 , - 544 , - 937 , - 2002 , - 155 , - 2564 , - 2061 , - 2230 , - 3071 , - 1000 , - 3185 , - 2458 , - 2403 , - 3020 , - 725 , - 2686 , - 1735 , - 1456 , - 1849 , - 2914 , - 1067 , - 3476 , - 2973 , - 3142 , - 399 , - 1912 , - 513 , - 3370 , - 3315 , - 348 , - 1637 , - 14 , - 2647 , - 2368 , - 2761 , - 242 , - 1979 , - 804 , - 301 , - 470 , - 1311 , - 2824 , - 1425 , - 698 , - 643 , - 1260 , - 2549 , - 926 , - 3559 , - 3280 , - 89 , - 1154 , - 2891 , - 1716 , - 1213 , - 1382 , - 2223 , - 152 , - 2337 , - 1610 , - 1555 , - 2172 , - 3461 , - 1838 , - 887 , - 608 , - 1001 , - 2066 , - 219 , - 2628 , - 2125 , - 2294 , - 3135 , - 1064 , - 3249 , - 2522 , - 2467 , - 3084 , - 789 , - 2750 , - 1799 , - 1520 , - 1913 , - 2978 , - 1131 , - 3540 , - 3037 , - 3206 , - 463 , - 1976 , - 577 , - 3434 , - 3379 , - 412 , - 1701 , - 78 , - 2711 , - 2432 , - 2825 , - 306 , - 2043 , - 868 , - 365 , - 534 , - 1375 , - 2888 , - 1489 , - 762 , - 707 , - 1324 , - 2613 , - 990 , - 39 , - 3344 , - 153 , - 1218 , - 2955 , - 1780 , - 1277 , - 1446 , - 2287 , - 216 , - 2401 , - 1674 , - 1619 , - 2236 , - 3525 , - 1902 , - 951 , - 672 , - 1065 , - 2130 , - 283 , - 2692 , - 2189 , - 2358 , - 3199 , - 1128 , - 3313 , - 2586 , - 2531 , - 3148 , - 853 , - 2814 , - 1863 , - 1584 , - 1977 , - 3042 , - 1195 , - 20 , - 3101 , - 3270 , - 527 , - 2040 , - 641 , - 3498 , - 3443 , - 476 , - 1765 , - 142 , - 2775 , - 2496 , - 2889 , - 370 , - 2107 , - 932 , - 429 , - 598 , - 1439 , - 2952 , - 1553 , - 826 , - 771 , - 1388 , - 2677 , - 1054 , - 103 , - 3408 , - 217 , - 1282 , - 3019 , - 1844 , - 1341 , - 1510 , - 2351 , - 280 , - 2465 , - 1738 , - 1683 , - 2300 , - 5 , - 1966 , - 1015 , - 736 , - 1129 , - 2194 , - 347 , - 2756 , - 2253 , - 2422 , - 3263 , - 1192 , - 3377 , - 2650 , - 2595 , - 3212 , - 917 , - 2878 , - 1927 , - 1648 , - 2041 , - 3106 , - 1259 , - 84 , - 3165 , - 3334 , - 591 , - 2104 , - 705 , - 3562 , - 3507 , - 540 , - 1829 , - 206 , - 2839 , - 2560 , - 2953 , - 434 , - 2171 , - 996 , - 493 , - 662 , - 1503 , - 3016 , - 1617 , - 890 , - 835 , - 1452 , - 2741 , - 1118 , - 167 , - 3472 , - 281 , - 1346 , - 3083 , - 1908 , - 1405 , - 1574 , - 2415 , - 344 , - 2529 , - 1802 , - 1747 , - 2364 , - 69 , - 2030 , - 1079 , - 800 , - 1193 , - 2258 , - 411 , - 2820 , - 2317 , - 2486 , - 3327 , - 1256 , - 3441 , - 2714 , - 2659 , - 3276 , - 981 , - 2942 , - 1991 , - 1712 , - 2105 , - 3170 , - 1323 , - 148 , - 3229 , - 3398 , - 655 , - 2168 , - 769 , - 42 , - 3571 , - 604 , - 1893 , - 270 , - 2903 , - 2624 , - 3017 , - 498 , - 2235 , - 1060 , - 557 , - 726 , - 1567 , - 3080 , - 1681 , - 954 , - 899 , - 1516 , - 2805 , - 1182 , - 231 , - 3536 , - 345 , - 1410 , - 3147 , - 1972 , - 1469 , - 1638 , - 2479 , - 408 , - 2593 , - 1866 , - 1811 , - 2428 , - 133 , - 2094 , - 1143 , - 864 , - 1257 , - 2322 , - 475 , - 2884 , - 2381 , - 2550 , - 3391 , - 1320 , - 3505 , - 2778 , - 2723 , - 3340 , - 1045 , - 3006 , - 2055 , - 1776 , - 2169 , - 3234 , - 1387 , - 212 , - 3293 , - 3462 , - 719 , - 2232 , - 833 , - 106 , - 51 , - 668 , - 1957 , - 334 , - 2967 , - 2688 , - 3081 , - 562 , - 2299 , - 1124 , - 621 , - 790 , - 1631 , - 3144 , - 1745 , - 1018 , - 963 , - 1580 , - 2869 , - 1246 , - 295 , - 16 , - 409 , - 1474 , - 3211 , - 2036 , - 1533 , - 1702 , - 2543 , - 472 , - 2657 , - 1930 , - 1875 , - 2492 , - 197 , - 2158 , - 1207 , - 928 , - 1321 , - 2386 , - 539 , - 2948 , - 2445 , - 2614 , - 3455 , - 1384 , - 3569 , - 2842 , - 2787 , - 3404 , - 1109 , - 3070 , - 2119 , - 1840 , - 2233 , - 3298 , - 1451 , - 276 , - 3357 , - 3526 , - 783 , - 2296 , - 897 , - 170 , - 115 , - 732 , - 2021 , - 398 , - 3031 , - 2752 , - 3145 , - 626 , - 2363 , - 1188 , - 685 , - 854 , - 1695 , - 3208 , - 1809 , - 1082 , - 1027 , - 1644 , - 2933 , - 1310 , - 359 , - 80 , - 473 , - 1538 , - 3275 , - 2100 , - 1597 , - 1766 , - 2607 , - 536 , - 2721 , - 1994 , - 1939 , - 2556 , - 261 , - 2222 , - 1271 , - 992 , - 1385 , - 2450 , - 603 , - 3012 , - 2509 , - 2678 , - 3519 , - 1448 , - 49 , - 2906 , - 2851 , - 3468 , - 1173 , - 3134 , - 2183 , - 1904 , - 2297 , - 3362 , - 1515 , - 340 , - 3421 , - 6 , - 847 , - 2360 , - 961 , - 234 , - 179 , - 796 , - 2085 , - 462 , - 3095 , - 2816 , - 3209 , - 690 , - 2427 , - 1252 , - 749 , - 918 , - 1759 , - 3272 , - 1873 , - 1146 , - 1091 , - 1708 , - 2997 , - 1374 , - 423 , - 144 , - 537 , - 1602 , - 3339 , - 2164 , - 1661 , - 1830 , - 2671 , - 600 , - 2785 , - 2058 , - 2003 , - 2620 , - 325 , - 2286 , - 1335 , - 1056 , - 1449 , - 2514 , - 667 , - 3076 , - 2573 , - 2742 , - 3583 , - 1512 , - 113 , - 2970 , - 2915 , - 3532 , - 1237 , - 3198 , - 2247 , - 1968 , - 2361 , - 3426 , - 1579 , - 404 , - 3485 , - 70 , - 911 , - 2424 , - 1025 , - 298 , - 243 , - 860 , - 2149 , - 526 , - 3159 , - 2880 , - 3273 , - 754 , - 2491 , - 1316 , - 813 , - 982 , - 1823 , - 3336 , - 1937 , - 1210 , - 1155 , - 1772 , - 3061 , - 1438 , - 487 , - 208 , - 601 , - 1666 , - 3403 , - 2228 , - 1725 , - 1894 , - 2735 , - 664 , - 2849 , - 2122 , - 2067 , - 2684 , - 389 , - 2350 , - 1399 , - 1120 , - 1513 , - 2578 , - 731 , - 3140 , - 2637 , - 2806 , - 63 , - 1576 , - 177 , - 3034 , - 2979 , - 12 , - 1301 , - 3262 , - 2311 , - 2032 , - 2425 , - 3490 , - 1643 , - 468 , - 3549 , - 134 , - 975 , - 2488 , - 1089 , - 362 , - 307 , - 924 , - 2213 , - 590 , - 3223 , - 2944 , - 3337 , - 818 , - 2555 , - 1380 , - 877 , - 1046 , - 1887 , - 3400 , - 2001 , - 1274 , - 1219 , - 1836 , - 3125 , - 1502 , - 551 , - 272 , - 665 , - 1730 , - 3467 , - 2292 , - 1789 , - 1958 , - 2799 , - 728 , - 2913 , - 2186 , - 2131 , - 2748 , - 453 , - 2414 , - 1463 , - 1184 , - 1577 , - 2642 , - 795 , - 3204 , - 2701 , - 2870 , - 127 , - 1640 , - 241 , - 3098 , - 3043 , - 76 , - 1365 , - 3326 , - 2375 , - 2096 , - 2489 , - 3554 , - 1707 , - 532 , - 29 , - 198 , - 1039 , - 2552 , - 1153 , - 426 , - 371 , - 988 , - 2277 , - 654 , - 3287 , - 3008 , - 3401 , - 882 , - 2619 , - 1444 , - 941 , - 1110 , - 1951 , - 3464 , - 2065 , - 1338 , - 1283 , - 1900 , - 3189 , - 1566 , - 615 , - 336 , - 729 , - 1794 , - 3531 , - 2356 , - 1853 , - 2022 , - 2863 , - 792 , - 2977 , - 2250 , - 2195 , - 2812 , - 517 , - 2478 , - 1527 , - 1248 , - 1641 , - 2706 , - 859 , - 3268 , - 2765 , - 2934 , - 191 , - 1704 , - 305 , - 3162 , - 3107 , - 140 , - 1429 , - 3390 , - 2439 , - 2160 , - 2553 , - 34 , - 1771 , - 596 , - 93 , - 262 , - 1103 , - 2616 , - 1217 , - 490 , - 435 , - 1052 , - 2341 , - 718 , - 3351 , - 3072 , - 3465 , - 946 , - 2683 , - 1508 , - 1005 , - 1174 , - 2015 , - 3528 , - 2129 , - 1402 , - 1347 , - 1964 , - 3253 , - 1630 , - 679 , - 400 , - 793 , - 1858 , - 11 , - 2420 , - 1917 , - 2086 , - 2927 , - 856 , - 3041 , - 2314 , - 2259 , - 2876 , - 581 , - 2542 , - 1591 , - 1312 , - 1705 , - 2770 , - 923 , - 3332 , - 2829 , - 2998 , - 255 , - 1768 , - 369 , - 3226 , - 3171 , - 204 , - 1493 , - 3454 , - 2503 , - 2224 , - 2617 , - 98 , - 1835 , - 660 , - 157 , - 326 , - 1167 , - 2680 , - 1281 , - 554 , - 499 , - 1116 , - 2405 , - 782 , - 3415 , - 3136 , - 3529 , - 1010 , - 2747 , - 1572 , - 1069 , - 1238 , - 2079 , - 8 , - 2193 , - 1466 , - 1411 , - 2028 , - 3317 , - 1694 , - 743 , - 464 , - 857 , - 1922 , - 75 , - 2484 , - 1981 , - 2150 , - 2991 , - 920 , - 3105 , - 2378 , - 2323 , - 2940 , - 645 , - 2606 , - 1655 , - 1376 , - 1769 , - 2834 , - 987 , - 3396 , - 2893 , - 3062 , - 319 , - 1832 , - 433 , - 3290 , - 3235 , - 268 , - 1557 , - 3518 , - 2567 , - 2288 , - 2681 , - 162 , - 1899 , - 724 , - 221 , - 390 , - 1231 , - 2744 , - 1345 , - 618 , - 563 , - 1180 , - 2469 , - 846 , - 3479 , - 3200 , - 9 , - 1074 , - 2811 , - 1636 , - 1133 , - 1302 , - 2143 , - 72 , - 2257 , - 1530 , - 1475 , - 2092 , - 3381 , - 1758 , - 807 , - 528 , - 921 , - 1986 , - 139 , - 2548 , - 2045 , - 2214 , - 3055 , - 984 , - 3169 , - 2442 , - 2387 , - 3004 , - 709 , - 2670 , - 1719 , - 1440 , - 1833 , - 2898 , - 1051 , - 3460 , - 2957 , - 3126 , - 383 , - 1896 , - 497 , - 3354 , - 3299 , - 332 , - 1621 , - 3582 , - 2631 , - 2352 , - 2745 , - 226 , - 1963 , - 788 , - 285 , - 454 , - 1295 , - 2808 , - 1409 , - 682 , - 627 , - 1244 , - 2533 , - 910 , - 3543 , - 3264 , - 73 , - 1138 , - 2875 , - 1700 , - 1197 , - 1366 , - 2207 , - 136 , - 2321 , - 1594 , - 1539 , - 2156 , - 3445 , - 1822 , - 871 , - 592 , - 985 , - 2050 , - 203 , - 2612 , - 2109 , - 2278 , - 3119 , - 1048 , - 3233 , - 2506 , - 2451 , - 3068 , - 773 , - 2734 , - 1783 , - 1504 , - 1897 , - 2962 , - 1115 , - 3524 , - 3021 , - 3190 , - 447 , - 1960 , - 561 , - 3418 , - 3363 , - 396 , - 1685 , - 62 , - 2695 , - 2416 , - 2809 , - 290 , - 2027 , - 852 , - 349 , - 518 , - 1359 , - 2872 , - 1473 , - 746 , - 691 , - 1308 , - 2597 , - 974 , - 23 , - 3328 , - 137 , - 1202 , - 2939 , - 1764 , - 1261 , - 1430 , - 2271 , - 200 , - 2385 , - 1658 , - 1603 , - 2220 , - 3509 , - 1886 , - 935 , - 656 , - 1049 , - 2114 , - 267 , - 2676 , - 2173 , - 2342 , - 3183 , - 1112 , - 3297 , - 2570 , - 2515 , - 3132 , - 837 , - 2798 , - 1847 , - 1568 , - 1961 , - 3026 , - 1179 , - 4 , - 3085 , - 3254 , - 511 , - 2024 , - 625 , - 3482 , - 3427 , - 460 , - 1749 , - 126 , - 2759 , - 2480 , - 2873 , - 354 , - 2091 , - 916 , - 413 , - 582 , - 1423 , - 2936 , - 1537 , - 810 , - 755 , - 1372 , - 2661 , - 1038 , - 87 , - 3392 , - 201 , - 1266 , - 3003 , - 1828 , - 1325 , - 1494 , - 2335 , - 264 , - 2449 , - 1722 , - 1667 , - 2284 , - 3573 , - 1950 , - 999 , - 720 , - 1113 , - 2178 , - 331 , - 2740 , - 2237 , - 2406 , - 3247 , - 1176 , - 3361 , - 2634 , - 2579 , - 3196 , - 901 , - 2862 , - 1911 , - 1632 , - 2025 , - 3090 , - 1243 , - 68 , - 3149 , - 3318 , - 575 , - 2088 , - 689 , - 3546 , - 3491 , - 524 , - 1813 , - 190 , - 2823 , - 2544 , - 2937 , - 418 , - 2155 , - 980 , - 477 , - 646 , - 1487 , - 3000 , - 1601 , - 874 , - 819 , - 1436 , - 2725 , - 1102 , - 151 , - 3456 , - 265 , - 1330 , - 3067 , - 1892 , - 1389 , - 1558 , - 2399 , - 328 , - 2513 , - 1786 , - 1731 , - 2348 , - 53 , - 2014 , - 1063 , - 784 , - 1177 , - 2242 , - 395 , - 2804 , - 2301 , - 2470 , - 3311 , - 1240 , - 3425 , - 2698 , - 2643 , - 3260 , - 965 , - 2926 , - 1975 , - 1696 , - 2089 , - 3154 , - 1307 , - 132 , - 3213 , - 3382 , - 639 , - 2152 , - 753 , - 26 , - 3555 , - 588 , - 1877 , - 254 , - 2887 , - 2608 , - 3001 , - 482 , - 2219 , - 1044 , - 541 , - 710 , - 1551 , - 3064 , - 1665 , - 938 , - 883 , - 1500 , - 2789 , - 1166 , - 215 , - 3520 , - 329 , - 1394 , - 3131 , - 1956 , - 1453 , - 1622 , - 2463 , - 392 , - 2577 , - 1850 , - 1795 , - 2412 , - 117 , - 2078 , - 1127 , - 848 , - 1241 , - 2306 , - 459 , - 2868 , - 2365 , - 2534 , - 3375 , - 1304 , - 3489 , - 2762 , - 2707 , - 3324 , - 1029 , - 2990 , - 2039 , - 1760 , - 2153 , - 3218 , - 1371 , - 196 , - 3277 , - 3446 , - 703 , - 2216 , - 817 , - 90 , - 35 , - 652 , - 1941 , - 318 , - 2951 , - 2672 , - 3065 , - 546 , - 2283 , - 1108 , - 605 , - 774 , - 1615 , - 3128 , - 1729 , - 1002 , - 947 , - 1564 , - 2853 , - 1230 , - 279 , - 0 , - 541 , - 1538 , - 2991 , - 1252 , - 3617 , - 2790 , - 2419 , - 2504 , - 3045 , - 394 , - 1847 , - 108 , - 2473 , - 1646 , - 1275 , - 1360 , - 1901 , - 2898 , - 703 , - 2612 , - 1329 , - 502 , - 131 , - 216 , - 757 , - 1754 , - 3207 , - 1468 , - 185 , - 3006 , - 2635 , - 2720 , - 3261 , - 610 , - 2063 , - 324 , - 2689 , - 1862 , - 1491 , - 1576 , - 2117 , - 3114 , - 919 , - 2828 , - 1545 , - 718 , - 347 , - 432 , - 973 , - 1970 , - 3423 , - 1684 , - 401 , - 3222 , - 2851 , - 2936 , - 3477 , - 826 , - 2279 , - 540 , - 2905 , - 2078 , - 1707 , - 1792 , - 2333 , - 3330 , - 1135 , - 3044 , - 1761 , - 934 , - 563 , - 648 , - 1189 , - 2186 , - 3639 , - 1900 , - 617 , - 3438 , - 3067 , - 3152 , - 45 , - 1042 , - 2495 , - 756 , - 3121 , - 2294 , - 1923 , - 2008 , - 2549 , - 3546 , - 1351 , - 3260 , - 1977 , - 1150 , - 779 , - 864 , - 1405 , - 2402 , - 207 , - 2116 , - 833 , - 6 , - 3283 , - 3368 , - 261 , - 1258 , - 2711 , - 972 , - 3337 , - 2510 , - 2139 , - 2224 , - 2765 , - 114 , - 1567 , - 3476 , - 2193 , - 1366 , - 995 , - 1080 , - 1621 , - 2618 , - 423 , - 2332 , - 1049 , - 222 , - 3499 , - 3584 , - 477 , - 1474 , - 2927 , - 1188 , - 3553 , - 2726 , - 2355 , - 2440 , - 2981 , - 330 , - 1783 , - 44 , - 2409 , - 1582 , - 1211 , - 1296 , - 1837 , - 2834 , - 639 , - 2548 , - 1265 , - 438 , - 67 , - 152 , - 693 , - 1690 , - 3143 , - 1404 , - 121 , - 2942 , - 2571 , - 2656 , - 3197 , - 546 , - 1999 , - 260 , - 2625 , - 1798 , - 1427 , - 1512 , - 2053 , - 3050 , - 855 , - 2764 , - 1481 , - 654 , - 283 , - 368 , - 909 , - 1906 , - 3359 , - 1620 , - 337 , - 3158 , - 2787 , - 2872 , - 3413 , - 762 , - 2215 , - 476 , - 2841 , - 2014 , - 1643 , - 1728 , - 2269 , - 3266 , - 1071 , - 2980 , - 1697 , - 870 , - 499 , - 584 , - 1125 , - 2122 , - 3575 , - 1836 , - 553 , - 3374 , - 3003 , - 3088 , - 3629 , - 978 , - 2431 , - 692 , - 3057 , - 2230 , - 1859 , - 1944 , - 2485 , - 3482 , - 1287 , - 3196 , - 1913 , - 1086 , - 715 , - 800 , - 1341 , - 2338 , - 143 , - 2052 , - 769 , - 3590 , - 3219 , - 3304 , - 197 , - 1194 , - 2647 , - 908 , - 3273 , - 2446 , - 2075 , - 2160 , - 2701 , - 50 , - 1503 , - 3412 , - 2129 , - 1302 , - 931 , - 1016 , - 1557 , - 2554 , - 359 , - 2268 , - 985 , - 158 , - 3435 , - 3520 , - 413 , - 1410 , - 2863 , - 1124 , - 3489 , - 2662 , - 2291 , - 2376 , - 2917 , - 266 , - 1719 , - 3628 , - 2345 , - 1518 , - 1147 , - 1232 , - 1773 , - 2770 , - 575 , - 2484 , - 1201 , - 374 , - 3 , - 88 , - 629 , - 1626 , - 3079 , - 1340 , - 57 , - 2878 , - 2507 , - 2592 , - 3133 , - 482 , - 1935 , - 196 , - 2561 , - 1734 , - 1363 , - 1448 , - 1989 , - 2986 , - 791 , - 2700 , - 1417 , - 590 , - 219 , - 304 , - 845 , - 1842 , - 3295 , - 1556 , - 273 , - 3094 , - 2723 , - 2808 , - 3349 , - 698 , - 2151 , - 412 , - 2777 , - 1950 , - 1579 , - 1664 , - 2205 , - 3202 , - 1007 , - 2916 , - 1633 , - 806 , - 435 , - 520 , - 1061 , - 2058 , - 3511 , - 1772 , - 489 , - 3310 , - 2939 , - 3024 , - 3565 , - 914 , - 2367 , - 628 , - 2993 , - 2166 , - 1795 , - 1880 , - 2421 , - 3418 , - 1223 , - 3132 , - 1849 , - 1022 , - 651 , - 736 , - 1277 , - 2274 , - 79 , - 1988 , - 705 , - 3526 , - 3155 , - 3240 , - 133 , - 1130 , - 2583 , - 844 , - 3209 , - 2382 , - 2011 , - 2096 , - 2637 , - 3634 , - 1439 , - 3348 , - 2065 , - 1238 , - 867 , - 952 , - 1493 , - 2490 , - 295 , - 2204 , - 921 , - 94 , - 3371 , - 3456 , - 349 , - 1346 , - 2799 , - 1060 , - 3425 , - 2598 , - 2227 , - 2312 , - 2853 , - 202 , - 1655 , - 3564 , - 2281 , - 1454 , - 1083 , - 1168 , - 1709 , - 2706 , - 511 , - 2420 , - 1137 , - 310 , - 3587 , - 24 , - 565 , - 1562 , - 3015 , - 1276 , - 3641 , - 2814 , - 2443 , - 2528 , - 3069 , - 418 , - 1871 , - 132 , - 2497 , - 1670 , - 1299 , - 1384 , - 1925 , - 2922 , - 727 , - 2636 , - 1353 , - 526 , - 155 , - 240 , - 781 , - 1778 , - 3231 , - 1492 , - 209 , - 3030 , - 2659 , - 2744 , - 3285 , - 634 , - 2087 , - 348 , - 2713 , - 1886 , - 1515 , - 1600 , - 2141 , - 3138 , - 943 , - 2852 , - 1569 , - 742 , - 371 , - 456 , - 997 , - 1994 , - 3447 , - 1708 , - 425 , - 3246 , - 2875 , - 2960 , - 3501 , - 850 , - 2303 , - 564 , - 2929 , - 2102 , - 1731 , - 1816 , - 2357 , - 3354 , - 1159 , - 3068 , - 1785 , - 958 , - 587 , - 672 , - 1213 , - 2210 , - 15 , - 1924 , - 641 , - 3462 , - 3091 , - 3176 , - 69 , - 1066 , - 2519 , - 780 , - 3145 , - 2318 , - 1947 , - 2032 , - 2573 , - 3570 , - 1375 , - 3284 , - 2001 , - 1174 , - 803 , - 888 , - 1429 , - 2426 , - 231 , - 2140 , - 857 , - 30 , - 3307 , - 3392 , - 285 , - 1282 , - 2735 , - 996 , - 3361 , - 2534 , - 2163 , - 2248 , - 2789 , - 138 , - 1591 , - 3500 , - 2217 , - 1390 , - 1019 , - 1104 , - 1645 , - 2642 , - 447 , - 2356 , - 1073 , - 246 , - 3523 , - 3608 , - 501 , - 1498 , - 2951 , - 1212 , - 3577 , - 2750 , - 2379 , - 2464 , - 3005 , - 354 , - 1807 , - 68 , - 2433 , - 1606 , - 1235 , - 1320 , - 1861 , - 2858 , - 663 , - 2572 , - 1289 , - 462 , - 91 , - 176 , - 717 , - 1714 , - 3167 , - 1428 , - 145 , - 2966 , - 2595 , - 2680 , - 3221 , - 570 , - 2023 , - 284 , - 2649 , - 1822 , - 1451 , - 1536 , - 2077 , - 3074 , - 879 , - 2788 , - 1505 , - 678 , - 307 , - 392 , - 933 , - 1930 , - 3383 , - 1644 , - 361 , - 3182 , - 2811 , - 2896 , - 3437 , - 786 , - 2239 , - 500 , - 2865 , - 2038 , - 1667 , - 1752 , - 2293 , - 3290 , - 1095 , - 3004 , - 1721 , - 894 , - 523 , - 608 , - 1149 , - 2146 , - 3599 , - 1860 , - 577 , - 3398 , - 3027 , - 3112 , - 5 , - 1002 , - 2455 , - 716 , - 3081 , - 2254 , - 1883 , - 1968 , - 2509 , - 3506 , - 1311 , - 3220 , - 1937 , - 1110 , - 739 , - 824 , - 1365 , - 2362 , - 167 , - 2076 , - 793 , - 3614 , - 3243 , - 3328 , - 221 , - 1218 , - 2671 , - 932 , - 3297 , - 2470 , - 2099 , - 2184 , - 2725 , - 74 , - 1527 , - 3436 , - 2153 , - 1326 , - 955 , - 1040 , - 1581 , - 2578 , - 383 , - 2292 , - 1009 , - 182 , - 3459 , - 3544 , - 437 , - 1434 , - 2887 , - 1148 , - 3513 , - 2686 , - 2315 , - 2400 , - 2941 , - 290 , - 1743 , - 4 , - 2369 , - 1542 , - 1171 , - 1256 , - 1797 , - 2794 , - 599 , - 2508 , - 1225 , - 398 , - 27 , - 112 , - 653 , - 1650 , - 3103 , - 1364 , - 81 , - 2902 , - 2531 , - 2616 , - 3157 , - 506 , - 1959 , - 220 , - 2585 , - 1758 , - 1387 , - 1472 , - 2013 , - 3010 , - 815 , - 2724 , - 1441 , - 614 , - 243 , - 328 , - 869 , - 1866 , - 3319 , - 1580 , - 297 , - 3118 , - 2747 , - 2832 , - 3373 , - 722 , - 2175 , - 436 , - 2801 , - 1974 , - 1603 , - 1688 , - 2229 , - 3226 , - 1031 , - 2940 , - 1657 , - 830 , - 459 , - 544 , - 1085 , - 2082 , - 3535 , - 1796 , - 513 , - 3334 , - 2963 , - 3048 , - 3589 , - 938 , - 2391 , - 652 , - 3017 , - 2190 , - 1819 , - 1904 , - 2445 , - 3442 , - 1247 , - 3156 , - 1873 , - 1046 , - 675 , - 760 , - 1301 , - 2298 , - 103 , - 2012 , - 729 , - 3550 , - 3179 , - 3264 , - 157 , - 1154 , - 2607 , - 868 , - 3233 , - 2406 , - 2035 , - 2120 , - 2661 , - 10 , - 1463 , - 3372 , - 2089 , - 1262 , - 891 , - 976 , - 1517 , - 2514 , - 319 , - 2228 , - 945 , - 118 , - 3395 , - 3480 , - 373 , - 1370 , - 2823 , - 1084 , - 3449 , - 2622 , - 2251 , - 2336 , - 2877 , - 226 , - 1679 , - 3588 , - 2305 , - 1478 , - 1107 , - 1192 , - 1733 , - 2730 , - 535 , - 2444 , - 1161 , - 334 , - 3611 , - 48 , - 589 , - 1586 , - 3039 , - 1300 , - 17 , - 2838 , - 2467 , - 2552 , - 3093 , - 442 , - 1895 , - 156 , - 2521 , - 1694 , - 1323 , - 1408 , - 1949 , - 2946 , - 751 , - 2660 , - 1377 , - 550 , - 179 , - 264 , - 805 , - 1802 , - 3255 , - 1516 , - 233 , - 3054 , - 2683 , - 2768 , - 3309 , - 658 , - 2111 , - 372 , - 2737 , - 1910 , - 1539 , - 1624 , - 2165 , - 3162 , - 967 , - 2876 , - 1593 , - 766 , - 395 , - 480 , - 1021 , - 2018 , - 3471 , - 1732 , - 449 , - 3270 , - 2899 , - 2984 , - 3525 , - 874 , - 2327 , - 588 , - 2953 , - 2126 , - 1755 , - 1840 , - 2381 , - 3378 , - 1183 , - 3092 , - 1809 , - 982 , - 611 , - 696 , - 1237 , - 2234 , - 39 , - 1948 , - 665 , - 3486 , - 3115 , - 3200 , - 93 , - 1090 , - 2543 , - 804 , - 3169 , - 2342 , - 1971 , - 2056 , - 2597 , - 3594 , - 1399 , - 3308 , - 2025 , - 1198 , - 827 , - 912 , - 1453 , - 2450 , - 255 , - 2164 , - 881 , - 54 , - 3331 , - 3416 , - 309 , - 1306 , - 2759 , - 1020 , - 3385 , - 2558 , - 2187 , - 2272 , - 2813 , - 162 , - 1615 , - 3524 , - 2241 , - 1414 , - 1043 , - 1128 , - 1669 , - 2666 , - 471 , - 2380 , - 1097 , - 270 , - 3547 , - 3632 , - 525 , - 1522 , - 2975 , - 1236 , - 3601 , - 2774 , - 2403 , - 2488 , - 3029 , - 378 , - 1831 , - 92 , - 2457 , - 1630 , - 1259 , - 1344 , - 1885 , - 2882 , - 687 , - 2596 , - 1313 , - 486 , - 115 , - 200 , - 741 , - 1738 , - 3191 , - 1452 , - 169 , - 2990 , - 2619 , - 2704 , - 3245 , - 594 , - 2047 , - 308 , - 2673 , - 1846 , - 1475 , - 1560 , - 2101 , - 3098 , - 903 , - 2812 , - 1529 , - 702 , - 331 , - 416 , - 957 , - 1954 , - 3407 , - 1668 , - 385 , - 3206 , - 2835 , - 2920 , - 3461 , - 810 , - 2263 , - 524 , - 2889 , - 2062 , - 1691 , - 1776 , - 2317 , - 3314 , - 1119 , - 3028 , - 1745 , - 918 , - 547 , - 632 , - 1173 , - 2170 , - 3623 , - 1884 , - 601 , - 3422 , - 3051 , - 3136 , - 29 , - 1026 , - 2479 , - 740 , - 3105 , - 2278 , - 1907 , - 1992 , - 2533 , - 3530 , - 1335 , - 3244 , - 1961 , - 1134 , - 763 , - 848 , - 1389 , - 2386 , - 191 , - 2100 , - 817 , - 3638 , - 3267 , - 3352 , - 245 , - 1242 , - 2695 , - 956 , - 3321 , - 2494 , - 2123 , - 2208 , - 2749 , - 98 , - 1551 , - 3460 , - 2177 , - 1350 , - 979 , - 1064 , - 1605 , - 2602 , - 407 , - 2316 , - 1033 , - 206 , - 3483 , - 3568 , - 461 , - 1458 , - 2911 , - 1172 , - 3537 , - 2710 , - 2339 , - 2424 , - 2965 , - 314 , - 1767 , - 28 , - 2393 , - 1566 , - 1195 , - 1280 , - 1821 , - 2818 , - 623 , - 2532 , - 1249 , - 422 , - 51 , - 136 , - 677 , - 1674 , - 3127 , - 1388 , - 105 , - 2926 , - 2555 , - 2640 , - 3181 , - 530 , - 1983 , - 244 , - 2609 , - 1782 , - 1411 , - 1496 , - 2037 , - 3034 , - 839 , - 2748 , - 1465 , - 638 , - 267 , - 352 , - 893 , - 1890 , - 3343 , - 1604 , - 321 , - 3142 , - 2771 , - 2856 , - 3397 , - 746 , - 2199 , - 460 , - 2825 , - 1998 , - 1627 , - 1712 , - 2253 , - 3250 , - 1055 , - 2964 , - 1681 , - 854 , - 483 , - 568 , - 1109 , - 2106 , - 3559 , - 1820 , - 537 , - 3358 , - 2987 , - 3072 , - 3613 , - 962 , - 2415 , - 676 , - 3041 , - 2214 , - 1843 , - 1928 , - 2469 , - 3466 , - 1271 , - 3180 , - 1897 , - 1070 , - 699 , - 784 , - 1325 , - 2322 , - 127 , - 2036 , - 753 , - 3574 , - 3203 , - 3288 , - 181 , - 1178 , - 2631 , - 892 , - 3257 , - 2430 , - 2059 , - 2144 , - 2685 , - 34 , - 1487 , - 3396 , - 2113 , - 1286 , - 915 , - 1000 , - 1541 , - 2538 , - 343 , - 2252 , - 969 , - 142 , - 3419 , - 3504 , - 397 , - 1394 , - 2847 , - 1108 , - 3473 , - 2646 , - 2275 , - 2360 , - 2901 , - 250 , - 1703 , - 3612 , - 2329 , - 1502 , - 1131 , - 1216 , - 1757 , - 2754 , - 559 , - 2468 , - 1185 , - 358 , - 3635 , - 72 , - 613 , - 1610 , - 3063 , - 1324 , - 41 , - 2862 , - 2491 , - 2576 , - 3117 , - 466 , - 1919 , - 180 , - 2545 , - 1718 , - 1347 , - 1432 , - 1973 , - 2970 , - 775 , - 2684 , - 1401 , - 574 , - 203 , - 288 , - 829 , - 1826 , - 3279 , - 1540 , - 257 , - 3078 , - 2707 , - 2792 , - 3333 , - 682 , - 2135 , - 396 , - 2761 , - 1934 , - 1563 , - 1648 , - 2189 , - 3186 , - 991 , - 2900 , - 1617 , - 790 , - 419 , - 504 , - 1045 , - 2042 , - 3495 , - 1756 , - 473 , - 3294 , - 2923 , - 3008 , - 3549 , - 898 , - 2351 , - 612 , - 2977 , - 2150 , - 1779 , - 1864 , - 2405 , - 3402 , - 1207 , - 3116 , - 1833 , - 1006 , - 635 , - 720 , - 1261 , - 2258 , - 63 , - 1972 , - 689 , - 3510 , - 3139 , - 3224 , - 117 , - 1114 , - 2567 , - 828 , - 3193 , - 2366 , - 1995 , - 2080 , - 2621 , - 3618 , - 1423 , - 3332 , - 2049 , - 1222 , - 851 , - 936 , - 1477 , - 2474 , - 279 , - 2188 , - 905 , - 78 , - 3355 , - 3440 , - 333 , - 1330 , - 2783 , - 1044 , - 3409 , - 2582 , - 2211 , - 2296 , - 2837 , - 186 , - 1639 , - 3548 , - 2265 , - 1438 , - 1067 , - 1152 , - 1693 , - 2690 , - 495 , - 2404 , - 1121 , - 294 , - 3571 , - 8 , - 549 , - 1546 , - 2999 , - 1260 , - 3625 , - 2798 , - 2427 , - 2512 , - 3053 , - 402 , - 1855 , - 116 , - 2481 , - 1654 , - 1283 , - 1368 , - 1909 , - 2906 , - 711 , - 2620 , - 1337 , - 510 , - 139 , - 224 , - 765 , - 1762 , - 3215 , - 1476 , - 193 , - 3014 , - 2643 , - 2728 , - 3269 , - 618 , - 2071 , - 332 , - 2697 , - 1870 , - 1499 , - 1584 , - 2125 , - 3122 , - 927 , - 2836 , - 1553 , - 726 , - 355 , - 440 , - 981 , - 1978 , - 3431 , - 1692 , - 409 , - 3230 , - 2859 , - 2944 , - 3485 , - 834 , - 2287 , - 548 , - 2913 , - 2086 , - 1715 , - 1800 , - 2341 , - 3338 , - 1143 , - 3052 , - 1769 , - 942 , - 571 , - 656 , - 1197 , - 2194 , - 3647 , - 1908 , - 625 , - 3446 , - 3075 , - 3160 , - 53 , - 1050 , - 2503 , - 764 , - 3129 , - 2302 , - 1931 , - 2016 , - 2557 , - 3554 , - 1359 , - 3268 , - 1985 , - 1158 , - 787 , - 872 , - 1413 , - 2410 , - 215 , - 2124 , - 841 , - 14 , - 3291 , - 3376 , - 269 , - 1266 , - 2719 , - 980 , - 3345 , - 2518 , - 2147 , - 2232 , - 2773 , - 122 , - 1575 , - 3484 , - 2201 , - 1374 , - 1003 , - 1088 , - 1629 , - 2626 , - 431 , - 2340 , - 1057 , - 230 , - 3507 , - 3592 , - 485 , - 1482 , - 2935 , - 1196 , - 3561 , - 2734 , - 2363 , - 2448 , - 2989 , - 338 , - 1791 , - 52 , - 2417 , - 1590 , - 1219 , - 1304 , - 1845 , - 2842 , - 647 , - 2556 , - 1273 , - 446 , - 75 , - 160 , - 701 , - 1698 , - 3151 , - 1412 , - 129 , - 2950 , - 2579 , - 2664 , - 3205 , - 554 , - 2007 , - 268 , - 2633 , - 1806 , - 1435 , - 1520 , - 2061 , - 3058 , - 863 , - 2772 , - 1489 , - 662 , - 291 , - 376 , - 917 , - 1914 , - 3367 , - 1628 , - 345 , - 3166 , - 2795 , - 2880 , - 3421 , - 770 , - 2223 , - 484 , - 2849 , - 2022 , - 1651 , - 1736 , - 2277 , - 3274 , - 1079 , - 2988 , - 1705 , - 878 , - 507 , - 592 , - 1133 , - 2130 , - 3583 , - 1844 , - 561 , - 3382 , - 3011 , - 3096 , - 3637 , - 986 , - 2439 , - 700 , - 3065 , - 2238 , - 1867 , - 1952 , - 2493 , - 3490 , - 1295 , - 3204 , - 1921 , - 1094 , - 723 , - 808 , - 1349 , - 2346 , - 151 , - 2060 , - 777 , - 3598 , - 3227 , - 3312 , - 205 , - 1202 , - 2655 , - 916 , - 3281 , - 2454 , - 2083 , - 2168 , - 2709 , - 58 , - 1511 , - 3420 , - 2137 , - 1310 , - 939 , - 1024 , - 1565 , - 2562 , - 367 , - 2276 , - 993 , - 166 , - 3443 , - 3528 , - 421 , - 1418 , - 2871 , - 1132 , - 3497 , - 2670 , - 2299 , - 2384 , - 2925 , - 274 , - 1727 , - 3636 , - 2353 , - 1526 , - 1155 , - 1240 , - 1781 , - 2778 , - 583 , - 2492 , - 1209 , - 382 , - 11 , - 96 , - 637 , - 1634 , - 3087 , - 1348 , - 65 , - 2886 , - 2515 , - 2600 , - 3141 , - 490 , - 1943 , - 204 , - 2569 , - 1742 , - 1371 , - 1456 , - 1997 , - 2994 , - 799 , - 2708 , - 1425 , - 598 , - 227 , - 312 , - 853 , - 1850 , - 3303 , - 1564 , - 281 , - 3102 , - 2731 , - 2816 , - 3357 , - 706 , - 2159 , - 420 , - 2785 , - 1958 , - 1587 , - 1672 , - 2213 , - 3210 , - 1015 , - 2924 , - 1641 , - 814 , - 443 , - 528 , - 1069 , - 2066 , - 3519 , - 1780 , - 497 , - 3318 , - 2947 , - 3032 , - 3573 , - 922 , - 2375 , - 636 , - 3001 , - 2174 , - 1803 , - 1888 , - 2429 , - 3426 , - 1231 , - 3140 , - 1857 , - 1030 , - 659 , - 744 , - 1285 , - 2282 , - 87 , - 1996 , - 713 , - 3534 , - 3163 , - 3248 , - 141 , - 1138 , - 2591 , - 852 , - 3217 , - 2390 , - 2019 , - 2104 , - 2645 , - 3642 , - 1447 , - 3356 , - 2073 , - 1246 , - 875 , - 960 , - 1501 , - 2498 , - 303 , - 2212 , - 929 , - 102 , - 3379 , - 3464 , - 357 , - 1354 , - 2807 , - 1068 , - 3433 , - 2606 , - 2235 , - 2320 , - 2861 , - 210 , - 1663 , - 3572 , - 2289 , - 1462 , - 1091 , - 1176 , - 1717 , - 2714 , - 519 , - 2428 , - 1145 , - 318 , - 3595 , - 32 , - 573 , - 1570 , - 3023 , - 1284 , - 1 , - 2822 , - 2451 , - 2536 , - 3077 , - 426 , - 1879 , - 140 , - 2505 , - 1678 , - 1307 , - 1392 , - 1933 , - 2930 , - 735 , - 2644 , - 1361 , - 534 , - 163 , - 248 , - 789 , - 1786 , - 3239 , - 1500 , - 217 , - 3038 , - 2667 , - 2752 , - 3293 , - 642 , - 2095 , - 356 , - 2721 , - 1894 , - 1523 , - 1608 , - 2149 , - 3146 , - 951 , - 2860 , - 1577 , - 750 , - 379 , - 464 , - 1005 , - 2002 , - 3455 , - 1716 , - 433 , - 3254 , - 2883 , - 2968 , - 3509 , - 858 , - 2311 , - 572 , - 2937 , - 2110 , - 1739 , - 1824 , - 2365 , - 3362 , - 1167 , - 3076 , - 1793 , - 966 , - 595 , - 680 , - 1221 , - 2218 , - 23 , - 1932 , - 649 , - 3470 , - 3099 , - 3184 , - 77 , - 1074 , - 2527 , - 788 , - 3153 , - 2326 , - 1955 , - 2040 , - 2581 , - 3578 , - 1383 , - 3292 , - 2009 , - 1182 , - 811 , - 896 , - 1437 , - 2434 , - 239 , - 2148 , - 865 , - 38 , - 3315 , - 3400 , - 293 , - 1290 , - 2743 , - 1004 , - 3369 , - 2542 , - 2171 , - 2256 , - 2797 , - 146 , - 1599 , - 3508 , - 2225 , - 1398 , - 1027 , - 1112 , - 1653 , - 2650 , - 455 , - 2364 , - 1081 , - 254 , - 3531 , - 3616 , - 509 , - 1506 , - 2959 , - 1220 , - 3585 , - 2758 , - 2387 , - 2472 , - 3013 , - 362 , - 1815 , - 76 , - 2441 , - 1614 , - 1243 , - 1328 , - 1869 , - 2866 , - 671 , - 2580 , - 1297 , - 470 , - 99 , - 184 , - 725 , - 1722 , - 3175 , - 1436 , - 153 , - 2974 , - 2603 , - 2688 , - 3229 , - 578 , - 2031 , - 292 , - 2657 , - 1830 , - 1459 , - 1544 , - 2085 , - 3082 , - 887 , - 2796 , - 1513 , - 686 , - 315 , - 400 , - 941 , - 1938 , - 3391 , - 1652 , - 369 , - 3190 , - 2819 , - 2904 , - 3445 , - 794 , - 2247 , - 508 , - 2873 , - 2046 , - 1675 , - 1760 , - 2301 , - 3298 , - 1103 , - 3012 , - 1729 , - 902 , - 531 , - 616 , - 1157 , - 2154 , - 3607 , - 1868 , - 585 , - 3406 , - 3035 , - 3120 , - 13 , - 1010 , - 2463 , - 724 , - 3089 , - 2262 , - 1891 , - 1976 , - 2517 , - 3514 , - 1319 , - 3228 , - 1945 , - 1118 , - 747 , - 832 , - 1373 , - 2370 , - 175 , - 2084 , - 801 , - 3622 , - 3251 , - 3336 , - 229 , - 1226 , - 2679 , - 940 , - 3305 , - 2478 , - 2107 , - 2192 , - 2733 , - 82 , - 1535 , - 3444 , - 2161 , - 1334 , - 963 , - 1048 , - 1589 , - 2586 , - 391 , - 2300 , - 1017 , - 190 , - 3467 , - 3552 , - 445 , - 1442 , - 2895 , - 1156 , - 3521 , - 2694 , - 2323 , - 2408 , - 2949 , - 298 , - 1751 , - 12 , - 2377 , - 1550 , - 1179 , - 1264 , - 1805 , - 2802 , - 607 , - 2516 , - 1233 , - 406 , - 35 , - 120 , - 661 , - 1658 , - 3111 , - 1372 , - 89 , - 2910 , - 2539 , - 2624 , - 3165 , - 514 , - 1967 , - 228 , - 2593 , - 1766 , - 1395 , - 1480 , - 2021 , - 3018 , - 823 , - 2732 , - 1449 , - 622 , - 251 , - 336 , - 877 , - 1874 , - 3327 , - 1588 , - 305 , - 3126 , - 2755 , - 2840 , - 3381 , - 730 , - 2183 , - 444 , - 2809 , - 1982 , - 1611 , - 1696 , - 2237 , - 3234 , - 1039 , - 2948 , - 1665 , - 838 , - 467 , - 552 , - 1093 , - 2090 , - 3543 , - 1804 , - 521 , - 3342 , - 2971 , - 3056 , - 3597 , - 946 , - 2399 , - 660 , - 3025 , - 2198 , - 1827 , - 1912 , - 2453 , - 3450 , - 1255 , - 3164 , - 1881 , - 1054 , - 683 , - 768 , - 1309 , - 2306 , - 111 , - 2020 , - 737 , - 3558 , - 3187 , - 3272 , - 165 , - 1162 , - 2615 , - 876 , - 3241 , - 2414 , - 2043 , - 2128 , - 2669 , - 18 , - 1471 , - 3380 , - 2097 , - 1270 , - 899 , - 984 , - 1525 , - 2522 , - 327 , - 2236 , - 953 , - 126 , - 3403 , - 3488 , - 381 , - 1378 , - 2831 , - 1092 , - 3457 , - 2630 , - 2259 , - 2344 , - 2885 , - 234 , - 1687 , - 3596 , - 2313 , - 1486 , - 1115 , - 1200 , - 1741 , - 2738 , - 543 , - 2452 , - 1169 , - 342 , - 3619 , - 56 , - 597 , - 1594 , - 3047 , - 1308 , - 25 , - 2846 , - 2475 , - 2560 , - 3101 , - 450 , - 1903 , - 164 , - 2529 , - 1702 , - 1331 , - 1416 , - 1957 , - 2954 , - 759 , - 2668 , - 1385 , - 558 , - 187 , - 272 , - 813 , - 1810 , - 3263 , - 1524 , - 241 , - 3062 , - 2691 , - 2776 , - 3317 , - 666 , - 2119 , - 380 , - 2745 , - 1918 , - 1547 , - 1632 , - 2173 , - 3170 , - 975 , - 2884 , - 1601 , - 774 , - 403 , - 488 , - 1029 , - 2026 , - 3479 , - 1740 , - 457 , - 3278 , - 2907 , - 2992 , - 3533 , - 882 , - 2335 , - 596 , - 2961 , - 2134 , - 1763 , - 1848 , - 2389 , - 3386 , - 1191 , - 3100 , - 1817 , - 990 , - 619 , - 704 , - 1245 , - 2242 , - 47 , - 1956 , - 673 , - 3494 , - 3123 , - 3208 , - 101 , - 1098 , - 2551 , - 812 , - 3177 , - 2350 , - 1979 , - 2064 , - 2605 , - 3602 , - 1407 , - 3316 , - 2033 , - 1206 , - 835 , - 920 , - 1461 , - 2458 , - 263 , - 2172 , - 889 , - 62 , - 3339 , - 3424 , - 317 , - 1314 , - 2767 , - 1028 , - 3393 , - 2566 , - 2195 , - 2280 , - 2821 , - 170 , - 1623 , - 3532 , - 2249 , - 1422 , - 1051 , - 1136 , - 1677 , - 2674 , - 479 , - 2388 , - 1105 , - 278 , - 3555 , - 3640 , - 533 , - 1530 , - 2983 , - 1244 , - 3609 , - 2782 , - 2411 , - 2496 , - 3037 , - 386 , - 1839 , - 100 , - 2465 , - 1638 , - 1267 , - 1352 , - 1893 , - 2890 , - 695 , - 2604 , - 1321 , - 494 , - 123 , - 208 , - 749 , - 1746 , - 3199 , - 1460 , - 177 , - 2998 , - 2627 , - 2712 , - 3253 , - 602 , - 2055 , - 316 , - 2681 , - 1854 , - 1483 , - 1568 , - 2109 , - 3106 , - 911 , - 2820 , - 1537 , - 710 , - 339 , - 424 , - 965 , - 1962 , - 3415 , - 1676 , - 393 , - 3214 , - 2843 , - 2928 , - 3469 , - 818 , - 2271 , - 532 , - 2897 , - 2070 , - 1699 , - 1784 , - 2325 , - 3322 , - 1127 , - 3036 , - 1753 , - 926 , - 555 , - 640 , - 1181 , - 2178 , - 3631 , - 1892 , - 609 , - 3430 , - 3059 , - 3144 , - 37 , - 1034 , - 2487 , - 748 , - 3113 , - 2286 , - 1915 , - 2000 , - 2541 , - 3538 , - 1343 , - 3252 , - 1969 , - 1142 , - 771 , - 856 , - 1397 , - 2394 , - 199 , - 2108 , - 825 , - 3646 , - 3275 , - 3360 , - 253 , - 1250 , - 2703 , - 964 , - 3329 , - 2502 , - 2131 , - 2216 , - 2757 , - 106 , - 1559 , - 3468 , - 2185 , - 1358 , - 987 , - 1072 , - 1613 , - 2610 , - 415 , - 2324 , - 1041 , - 214 , - 3491 , - 3576 , - 469 , - 1466 , - 2919 , - 1180 , - 3545 , - 2718 , - 2347 , - 2432 , - 2973 , - 322 , - 1775 , - 36 , - 2401 , - 1574 , - 1203 , - 1288 , - 1829 , - 2826 , - 631 , - 2540 , - 1257 , - 430 , - 59 , - 144 , - 685 , - 1682 , - 3135 , - 1396 , - 113 , - 2934 , - 2563 , - 2648 , - 3189 , - 538 , - 1991 , - 252 , - 2617 , - 1790 , - 1419 , - 1504 , - 2045 , - 3042 , - 847 , - 2756 , - 1473 , - 646 , - 275 , - 360 , - 901 , - 1898 , - 3351 , - 1612 , - 329 , - 3150 , - 2779 , - 2864 , - 3405 , - 754 , - 2207 , - 468 , - 2833 , - 2006 , - 1635 , - 1720 , - 2261 , - 3258 , - 1063 , - 2972 , - 1689 , - 862 , - 491 , - 576 , - 1117 , - 2114 , - 3567 , - 1828 , - 545 , - 3366 , - 2995 , - 3080 , - 3621 , - 970 , - 2423 , - 684 , - 3049 , - 2222 , - 1851 , - 1936 , - 2477 , - 3474 , - 1279 , - 3188 , - 1905 , - 1078 , - 707 , - 792 , - 1333 , - 2330 , - 135 , - 2044 , - 761 , - 3582 , - 3211 , - 3296 , - 189 , - 1186 , - 2639 , - 900 , - 3265 , - 2438 , - 2067 , - 2152 , - 2693 , - 42 , - 1495 , - 3404 , - 2121 , - 1294 , - 923 , - 1008 , - 1549 , - 2546 , - 351 , - 2260 , - 977 , - 150 , - 3427 , - 3512 , - 405 , - 1402 , - 2855 , - 1116 , - 3481 , - 2654 , - 2283 , - 2368 , - 2909 , - 258 , - 1711 , - 3620 , - 2337 , - 1510 , - 1139 , - 1224 , - 1765 , - 2762 , - 567 , - 2476 , - 1193 , - 366 , - 3643 , - 80 , - 621 , - 1618 , - 3071 , - 1332 , - 49 , - 2870 , - 2499 , - 2584 , - 3125 , - 474 , - 1927 , - 188 , - 2553 , - 1726 , - 1355 , - 1440 , - 1981 , - 2978 , - 783 , - 2692 , - 1409 , - 582 , - 211 , - 296 , - 837 , - 1834 , - 3287 , - 1548 , - 265 , - 3086 , - 2715 , - 2800 , - 3341 , - 690 , - 2143 , - 404 , - 2769 , - 1942 , - 1571 , - 1656 , - 2197 , - 3194 , - 999 , - 2908 , - 1625 , - 798 , - 427 , - 512 , - 1053 , - 2050 , - 3503 , - 1764 , - 481 , - 3302 , - 2931 , - 3016 , - 3557 , - 906 , - 2359 , - 620 , - 2985 , - 2158 , - 1787 , - 1872 , - 2413 , - 3410 , - 1215 , - 3124 , - 1841 , - 1014 , - 643 , - 728 , - 1269 , - 2266 , - 71 , - 1980 , - 697 , - 3518 , - 3147 , - 3232 , - 125 , - 1122 , - 2575 , - 836 , - 3201 , - 2374 , - 2003 , - 2088 , - 2629 , - 3626 , - 1431 , - 3340 , - 2057 , - 1230 , - 859 , - 944 , - 1485 , - 2482 , - 287 , - 2196 , - 913 , - 86 , - 3363 , - 3448 , - 341 , - 1338 , - 2791 , - 1052 , - 3417 , - 2590 , - 2219 , - 2304 , - 2845 , - 194 , - 1647 , - 3556 , - 2273 , - 1446 , - 1075 , - 1160 , - 1701 , - 2698 , - 503 , - 2412 , - 1129 , - 302 , - 3579 , - 16 , - 557 , - 1554 , - 3007 , - 1268 , - 3633 , - 2806 , - 2435 , - 2520 , - 3061 , - 410 , - 1863 , - 124 , - 2489 , - 1662 , - 1291 , - 1376 , - 1917 , - 2914 , - 719 , - 2628 , - 1345 , - 518 , - 147 , - 232 , - 773 , - 1770 , - 3223 , - 1484 , - 201 , - 3022 , - 2651 , - 2736 , - 3277 , - 626 , - 2079 , - 340 , - 2705 , - 1878 , - 1507 , - 1592 , - 2133 , - 3130 , - 935 , - 2844 , - 1561 , - 734 , - 363 , - 448 , - 989 , - 1986 , - 3439 , - 1700 , - 417 , - 3238 , - 2867 , - 2952 , - 3493 , - 842 , - 2295 , - 556 , - 2921 , - 2094 , - 1723 , - 1808 , - 2349 , - 3346 , - 1151 , - 3060 , - 1777 , - 950 , - 579 , - 664 , - 1205 , - 2202 , - 7 , - 1916 , - 633 , - 3454 , - 3083 , - 3168 , - 61 , - 1058 , - 2511 , - 772 , - 3137 , - 2310 , - 1939 , - 2024 , - 2565 , - 3562 , - 1367 , - 3276 , - 1993 , - 1166 , - 795 , - 880 , - 1421 , - 2418 , - 223 , - 2132 , - 849 , - 22 , - 3299 , - 3384 , - 277 , - 1274 , - 2727 , - 988 , - 3353 , - 2526 , - 2155 , - 2240 , - 2781 , - 130 , - 1583 , - 3492 , - 2209 , - 1382 , - 1011 , - 1096 , - 1637 , - 2634 , - 439 , - 2348 , - 1065 , - 238 , - 3515 , - 3600 , - 493 , - 1490 , - 2943 , - 1204 , - 3569 , - 2742 , - 2371 , - 2456 , - 2997 , - 346 , - 1799 , - 60 , - 2425 , - 1598 , - 1227 , - 1312 , - 1853 , - 2850 , - 655 , - 2564 , - 1281 , - 454 , - 83 , - 168 , - 709 , - 1706 , - 3159 , - 1420 , - 137 , - 2958 , - 2587 , - 2672 , - 3213 , - 562 , - 2015 , - 276 , - 2641 , - 1814 , - 1443 , - 1528 , - 2069 , - 3066 , - 871 , - 2780 , - 1497 , - 670 , - 299 , - 384 , - 925 , - 1922 , - 3375 , - 1636 , - 353 , - 3174 , - 2803 , - 2888 , - 3429 , - 778 , - 2231 , - 492 , - 2857 , - 2030 , - 1659 , - 1744 , - 2285 , - 3282 , - 1087 , - 2996 , - 1713 , - 886 , - 515 , - 600 , - 1141 , - 2138 , - 3591 , - 1852 , - 569 , - 3390 , - 3019 , - 3104 , - 3645 , - 994 , - 2447 , - 708 , - 3073 , - 2246 , - 1875 , - 1960 , - 2501 , - 3498 , - 1303 , - 3212 , - 1929 , - 1102 , - 731 , - 816 , - 1357 , - 2354 , - 159 , - 2068 , - 785 , - 3606 , - 3235 , - 3320 , - 213 , - 1210 , - 2663 , - 924 , - 3289 , - 2462 , - 2091 , - 2176 , - 2717 , - 66 , - 1519 , - 3428 , - 2145 , - 1318 , - 947 , - 1032 , - 1573 , - 2570 , - 375 , - 2284 , - 1001 , - 174 , - 3451 , - 3536 , - 429 , - 1426 , - 2879 , - 1140 , - 3505 , - 2678 , - 2307 , - 2392 , - 2933 , - 282 , - 1735 , - 3644 , - 2361 , - 1534 , - 1163 , - 1248 , - 1789 , - 2786 , - 591 , - 2500 , - 1217 , - 390 , - 19 , - 104 , - 645 , - 1642 , - 3095 , - 1356 , - 73 , - 2894 , - 2523 , - 2608 , - 3149 , - 498 , - 1951 , - 212 , - 2577 , - 1750 , - 1379 , - 1464 , - 2005 , - 3002 , - 807 , - 2716 , - 1433 , - 606 , - 235 , - 320 , - 861 , - 1858 , - 3311 , - 1572 , - 289 , - 3110 , - 2739 , - 2824 , - 3365 , - 714 , - 2167 , - 428 , - 2793 , - 1966 , - 1595 , - 1680 , - 2221 , - 3218 , - 1023 , - 2932 , - 1649 , - 822 , - 451 , - 536 , - 1077 , - 2074 , - 3527 , - 1788 , - 505 , - 3326 , - 2955 , - 3040 , - 3581 , - 930 , - 2383 , - 644 , - 3009 , - 2182 , - 1811 , - 1896 , - 2437 , - 3434 , - 1239 , - 3148 , - 1865 , - 1038 , - 667 , - 752 , - 1293 , - 2290 , - 95 , - 2004 , - 721 , - 3542 , - 3171 , - 3256 , - 149 , - 1146 , - 2599 , - 860 , - 3225 , - 2398 , - 2027 , - 2112 , - 2653 , - 2 , - 1455 , - 3364 , - 2081 , - 1254 , - 883 , - 968 , - 1509 , - 2506 , - 311 , - 2220 , - 937 , - 110 , - 3387 , - 3472 , - 365 , - 1362 , - 2815 , - 1076 , - 3441 , - 2614 , - 2243 , - 2328 , - 2869 , - 218 , - 1671 , - 3580 , - 2297 , - 1470 , - 1099 , - 1184 , - 1725 , - 2722 , - 527 , - 2436 , - 1153 , - 326 , - 3603 , - 40 , - 581 , - 1578 , - 3031 , - 1292 , - 9 , - 2830 , - 2459 , - 2544 , - 3085 , - 434 , - 1887 , - 148 , - 2513 , - 1686 , - 1315 , - 1400 , - 1941 , - 2938 , - 743 , - 2652 , - 1369 , - 542 , - 171 , - 256 , - 797 , - 1794 , - 3247 , - 1508 , - 225 , - 3046 , - 2675 , - 2760 , - 3301 , - 650 , - 2103 , - 364 , - 2729 , - 1902 , - 1531 , - 1616 , - 2157 , - 3154 , - 959 , - 2868 , - 1585 , - 758 , - 387 , - 472 , - 1013 , - 2010 , - 3463 , - 1724 , - 441 , - 3262 , - 2891 , - 2976 , - 3517 , - 866 , - 2319 , - 580 , - 2945 , - 2118 , - 1747 , - 1832 , - 2373 , - 3370 , - 1175 , - 3084 , - 1801 , - 974 , - 603 , - 688 , - 1229 , - 2226 , - 31 , - 1940 , - 657 , - 3478 , - 3107 , - 3192 , - 85 , - 1082 , - 2535 , - 796 , - 3161 , - 2334 , - 1963 , - 2048 , - 2589 , - 3586 , - 1391 , - 3300 , - 2017 , - 1190 , - 819 , - 904 , - 1445 , - 2442 , - 247 , - 2156 , - 873 , - 46 , - 3323 , - 3408 , - 301 , - 1298 , - 2751 , - 1012 , - 3377 , - 2550 , - 2179 , - 2264 , - 2805 , - 154 , - 1607 , - 3516 , - 2233 , - 1406 , - 1035 , - 1120 , - 1661 , - 2658 , - 463 , - 2372 , - 1089 , - 262 , - 3539 , - 3624 , - 517 , - 1514 , - 2967 , - 1228 , - 3593 , - 2766 , - 2395 , - 2480 , - 3021 , - 370 , - 1823 , - 84 , - 2449 , - 1622 , - 1251 , - 1336 , - 1877 , - 2874 , - 679 , - 2588 , - 1305 , - 478 , - 107 , - 192 , - 733 , - 1730 , - 3183 , - 1444 , - 161 , - 2982 , - 2611 , - 2696 , - 3237 , - 586 , - 2039 , - 300 , - 2665 , - 1838 , - 1467 , - 1552 , - 2093 , - 3090 , - 895 , - 2804 , - 1521 , - 694 , - 323 , - 408 , - 949 , - 1946 , - 3399 , - 1660 , - 377 , - 3198 , - 2827 , - 2912 , - 3453 , - 802 , - 2255 , - 516 , - 2881 , - 2054 , - 1683 , - 1768 , - 2309 , - 3306 , - 1111 , - 3020 , - 1737 , - 910 , - 539 , - 624 , - 1165 , - 2162 , - 3615 , - 1876 , - 593 , - 3414 , - 3043 , - 3128 , - 21 , - 1018 , - 2471 , - 732 , - 3097 , - 2270 , - 1899 , - 1984 , - 2525 , - 3522 , - 1327 , - 3236 , - 1953 , - 1126 , - 755 , - 840 , - 1381 , - 2378 , - 183 , - 2092 , - 809 , - 3630 , - 3259 , - 3344 , - 237 , - 1234 , - 2687 , - 948 , - 3313 , - 2486 , - 2115 , - 2200 , - 2741 , - 90 , - 1543 , - 3452 , - 2169 , - 1342 , - 971 , - 1056 , - 1597 , - 2594 , - 399 , - 2308 , - 1025 , - 198 , - 3475 , - 3560 , - 453 , - 1450 , - 2903 , - 1164 , - 3529 , - 2702 , - 2331 , - 2416 , - 2957 , - 306 , - 1759 , - 20 , - 2385 , - 1558 , - 1187 , - 1272 , - 1813 , - 2810 , - 615 , - 2524 , - 1241 , - 414 , - 43 , - 128 , - 669 , - 1666 , - 3119 , - 1380 , - 97 , - 2918 , - 2547 , - 2632 , - 3173 , - 522 , - 1975 , - 236 , - 2601 , - 1774 , - 1403 , - 1488 , - 2029 , - 3026 , - 831 , - 2740 , - 1457 , - 630 , - 259 , - 344 , - 885 , - 1882 , - 3335 , - 1596 , - 313 , - 3134 , - 2763 , - 2848 , - 3389 , - 738 , - 2191 , - 452 , - 2817 , - 1990 , - 1619 , - 1704 , - 2245 , - 3242 , - 1047 , - 2956 , - 1673 , - 846 , - 475 , - 560 , - 1101 , - 2098 , - 3551 , - 1812 , - 529 , - 3350 , - 2979 , - 3064 , - 3605 , - 954 , - 2407 , - 668 , - 3033 , - 2206 , - 1835 , - 1920 , - 2461 , - 3458 , - 1263 , - 3172 , - 1889 , - 1062 , - 691 , - 776 , - 1317 , - 2314 , - 119 , - 2028 , - 745 , - 3566 , - 3195 , - 3280 , - 173 , - 1170 , - 2623 , - 884 , - 3249 , - 2422 , - 2051 , - 2136 , - 2677 , - 26 , - 1479 , - 3388 , - 2105 , - 1278 , - 907 , - 992 , - 1533 , - 2530 , - 335 , - 2244 , - 961 , - 134 , - 3411 , - 3496 , - 389 , - 1386 , - 2839 , - 1100 , - 3465 , - 2638 , - 2267 , - 2352 , - 2893 , - 242 , - 1695 , - 3604 , - 2321 , - 1494 , - 1123 , - 1208 , - 1749 , - 2746 , - 551 , - 2460 , - 1177 , - 350 , - 3627 , - 64 , - 605 , - 1602 , - 3055 , - 1316 , - 33 , - 2854 , - 2483 , - 2568 , - 3109 , - 458 , - 1911 , - 172 , - 2537 , - 1710 , - 1339 , - 1424 , - 1965 , - 2962 , - 767 , - 2676 , - 1393 , - 566 , - 195 , - 280 , - 821 , - 1818 , - 3271 , - 1532 , - 249 , - 3070 , - 2699 , - 2784 , - 3325 , - 674 , - 2127 , - 388 , - 2753 , - 1926 , - 1555 , - 1640 , - 2181 , - 3178 , - 983 , - 2892 , - 1609 , - 782 , - 411 , - 496 , - 1037 , - 2034 , - 3487 , - 1748 , - 465 , - 3286 , - 2915 , - 3000 , - 3541 , - 890 , - 2343 , - 604 , - 2969 , - 2142 , - 1771 , - 1856 , - 2397 , - 3394 , - 1199 , - 3108 , - 1825 , - 998 , - 627 , - 712 , - 1253 , - 2250 , - 55 , - 1964 , - 681 , - 3502 , - 3131 , - 3216 , - 109 , - 1106 , - 2559 , - 820 , - 3185 , - 2358 , - 1987 , - 2072 , - 2613 , - 3610 , - 1415 , - 3324 , - 2041 , - 1214 , - 843 , - 928 , - 1469 , - 2466 , - 271 , - 2180 , - 897 , - 70 , - 3347 , - 3432 , - 325 , - 1322 , - 2775 , - 1036 , - 3401 , - 2574 , - 2203 , - 2288 , - 2829 , - 178 , - 1631 , - 3540 , - 2257 , - 1430 , - 1059 , - 1144 , - 1685 , - 2682 , - 487 , - 2396 , - 1113 , - 286 , - 3563 , - 0 , - 503 , - 1470 , - 2901 , - 1084 , - 3443 , - 2554 , - 2129 , - 2168 , - 2671 , - 3638 , - 1357 , - 3252 , - 1899 , - 1010 , - 585 , - 624 , - 1127 , - 2094 , - 3525 , - 1708 , - 355 , - 3178 , - 2753 , - 2792 , - 3295 , - 550 , - 1981 , - 164 , - 2523 , - 1634 , - 1209 , - 1248 , - 1751 , - 2718 , - 437 , - 2332 , - 979 , - 90 , - 3377 , - 3416 , - 207 , - 1174 , - 2605 , - 788 , - 3147 , - 2258 , - 1833 , - 1872 , - 2375 , - 3342 , - 1061 , - 2956 , - 1603 , - 714 , - 289 , - 328 , - 831 , - 1798 , - 3229 , - 1412 , - 59 , - 2882 , - 2457 , - 2496 , - 2999 , - 254 , - 1685 , - 3580 , - 2227 , - 1338 , - 913 , - 952 , - 1455 , - 2422 , - 141 , - 2036 , - 683 , - 3506 , - 3081 , - 3120 , - 3623 , - 878 , - 2309 , - 492 , - 2851 , - 1962 , - 1537 , - 1576 , - 2079 , - 3046 , - 765 , - 2660 , - 1307 , - 418 , - 3705 , - 32 , - 535 , - 1502 , - 2933 , - 1116 , - 3475 , - 2586 , - 2161 , - 2200 , - 2703 , - 3670 , - 1389 , - 3284 , - 1931 , - 1042 , - 617 , - 656 , - 1159 , - 2126 , - 3557 , - 1740 , - 387 , - 3210 , - 2785 , - 2824 , - 3327 , - 582 , - 2013 , - 196 , - 2555 , - 1666 , - 1241 , - 1280 , - 1783 , - 2750 , - 469 , - 2364 , - 1011 , - 122 , - 3409 , - 3448 , - 239 , - 1206 , - 2637 , - 820 , - 3179 , - 2290 , - 1865 , - 1904 , - 2407 , - 3374 , - 1093 , - 2988 , - 1635 , - 746 , - 321 , - 360 , - 863 , - 1830 , - 3261 , - 1444 , - 91 , - 2914 , - 2489 , - 2528 , - 3031 , - 286 , - 1717 , - 3612 , - 2259 , - 1370 , - 945 , - 984 , - 1487 , - 2454 , - 173 , - 2068 , - 715 , - 3538 , - 3113 , - 3152 , - 3655 , - 910 , - 2341 , - 524 , - 2883 , - 1994 , - 1569 , - 1608 , - 2111 , - 3078 , - 797 , - 2692 , - 1339 , - 450 , - 25 , - 64 , - 567 , - 1534 , - 2965 , - 1148 , - 3507 , - 2618 , - 2193 , - 2232 , - 2735 , - 3702 , - 1421 , - 3316 , - 1963 , - 1074 , - 649 , - 688 , - 1191 , - 2158 , - 3589 , - 1772 , - 419 , - 3242 , - 2817 , - 2856 , - 3359 , - 614 , - 2045 , - 228 , - 2587 , - 1698 , - 1273 , - 1312 , - 1815 , - 2782 , - 501 , - 2396 , - 1043 , - 154 , - 3441 , - 3480 , - 271 , - 1238 , - 2669 , - 852 , - 3211 , - 2322 , - 1897 , - 1936 , - 2439 , - 3406 , - 1125 , - 3020 , - 1667 , - 778 , - 353 , - 392 , - 895 , - 1862 , - 3293 , - 1476 , - 123 , - 2946 , - 2521 , - 2560 , - 3063 , - 318 , - 1749 , - 3644 , - 2291 , - 1402 , - 977 , - 1016 , - 1519 , - 2486 , - 205 , - 2100 , - 747 , - 3570 , - 3145 , - 3184 , - 3687 , - 942 , - 2373 , - 556 , - 2915 , - 2026 , - 1601 , - 1640 , - 2143 , - 3110 , - 829 , - 2724 , - 1371 , - 482 , - 57 , - 96 , - 599 , - 1566 , - 2997 , - 1180 , - 3539 , - 2650 , - 2225 , - 2264 , - 2767 , - 22 , - 1453 , - 3348 , - 1995 , - 1106 , - 681 , - 720 , - 1223 , - 2190 , - 3621 , - 1804 , - 451 , - 3274 , - 2849 , - 2888 , - 3391 , - 646 , - 2077 , - 260 , - 2619 , - 1730 , - 1305 , - 1344 , - 1847 , - 2814 , - 533 , - 2428 , - 1075 , - 186 , - 3473 , - 3512 , - 303 , - 1270 , - 2701 , - 884 , - 3243 , - 2354 , - 1929 , - 1968 , - 2471 , - 3438 , - 1157 , - 3052 , - 1699 , - 810 , - 385 , - 424 , - 927 , - 1894 , - 3325 , - 1508 , - 155 , - 2978 , - 2553 , - 2592 , - 3095 , - 350 , - 1781 , - 3676 , - 2323 , - 1434 , - 1009 , - 1048 , - 1551 , - 2518 , - 237 , - 2132 , - 779 , - 3602 , - 3177 , - 3216 , - 7 , - 974 , - 2405 , - 588 , - 2947 , - 2058 , - 1633 , - 1672 , - 2175 , - 3142 , - 861 , - 2756 , - 1403 , - 514 , - 89 , - 128 , - 631 , - 1598 , - 3029 , - 1212 , - 3571 , - 2682 , - 2257 , - 2296 , - 2799 , - 54 , - 1485 , - 3380 , - 2027 , - 1138 , - 713 , - 752 , - 1255 , - 2222 , - 3653 , - 1836 , - 483 , - 3306 , - 2881 , - 2920 , - 3423 , - 678 , - 2109 , - 292 , - 2651 , - 1762 , - 1337 , - 1376 , - 1879 , - 2846 , - 565 , - 2460 , - 1107 , - 218 , - 3505 , - 3544 , - 335 , - 1302 , - 2733 , - 916 , - 3275 , - 2386 , - 1961 , - 2000 , - 2503 , - 3470 , - 1189 , - 3084 , - 1731 , - 842 , - 417 , - 456 , - 959 , - 1926 , - 3357 , - 1540 , - 187 , - 3010 , - 2585 , - 2624 , - 3127 , - 382 , - 1813 , - 3708 , - 2355 , - 1466 , - 1041 , - 1080 , - 1583 , - 2550 , - 269 , - 2164 , - 811 , - 3634 , - 3209 , - 3248 , - 39 , - 1006 , - 2437 , - 620 , - 2979 , - 2090 , - 1665 , - 1704 , - 2207 , - 3174 , - 893 , - 2788 , - 1435 , - 546 , - 121 , - 160 , - 663 , - 1630 , - 3061 , - 1244 , - 3603 , - 2714 , - 2289 , - 2328 , - 2831 , - 86 , - 1517 , - 3412 , - 2059 , - 1170 , - 745 , - 784 , - 1287 , - 2254 , - 3685 , - 1868 , - 515 , - 3338 , - 2913 , - 2952 , - 3455 , - 710 , - 2141 , - 324 , - 2683 , - 1794 , - 1369 , - 1408 , - 1911 , - 2878 , - 597 , - 2492 , - 1139 , - 250 , - 3537 , - 3576 , - 367 , - 1334 , - 2765 , - 948 , - 3307 , - 2418 , - 1993 , - 2032 , - 2535 , - 3502 , - 1221 , - 3116 , - 1763 , - 874 , - 449 , - 488 , - 991 , - 1958 , - 3389 , - 1572 , - 219 , - 3042 , - 2617 , - 2656 , - 3159 , - 414 , - 1845 , - 28 , - 2387 , - 1498 , - 1073 , - 1112 , - 1615 , - 2582 , - 301 , - 2196 , - 843 , - 3666 , - 3241 , - 3280 , - 71 , - 1038 , - 2469 , - 652 , - 3011 , - 2122 , - 1697 , - 1736 , - 2239 , - 3206 , - 925 , - 2820 , - 1467 , - 578 , - 153 , - 192 , - 695 , - 1662 , - 3093 , - 1276 , - 3635 , - 2746 , - 2321 , - 2360 , - 2863 , - 118 , - 1549 , - 3444 , - 2091 , - 1202 , - 777 , - 816 , - 1319 , - 2286 , - 5 , - 1900 , - 547 , - 3370 , - 2945 , - 2984 , - 3487 , - 742 , - 2173 , - 356 , - 2715 , - 1826 , - 1401 , - 1440 , - 1943 , - 2910 , - 629 , - 2524 , - 1171 , - 282 , - 3569 , - 3608 , - 399 , - 1366 , - 2797 , - 980 , - 3339 , - 2450 , - 2025 , - 2064 , - 2567 , - 3534 , - 1253 , - 3148 , - 1795 , - 906 , - 481 , - 520 , - 1023 , - 1990 , - 3421 , - 1604 , - 251 , - 3074 , - 2649 , - 2688 , - 3191 , - 446 , - 1877 , - 60 , - 2419 , - 1530 , - 1105 , - 1144 , - 1647 , - 2614 , - 333 , - 2228 , - 875 , - 3698 , - 3273 , - 3312 , - 103 , - 1070 , - 2501 , - 684 , - 3043 , - 2154 , - 1729 , - 1768 , - 2271 , - 3238 , - 957 , - 2852 , - 1499 , - 610 , - 185 , - 224 , - 727 , - 1694 , - 3125 , - 1308 , - 3667 , - 2778 , - 2353 , - 2392 , - 2895 , - 150 , - 1581 , - 3476 , - 2123 , - 1234 , - 809 , - 848 , - 1351 , - 2318 , - 37 , - 1932 , - 579 , - 3402 , - 2977 , - 3016 , - 3519 , - 774 , - 2205 , - 388 , - 2747 , - 1858 , - 1433 , - 1472 , - 1975 , - 2942 , - 661 , - 2556 , - 1203 , - 314 , - 3601 , - 3640 , - 431 , - 1398 , - 2829 , - 1012 , - 3371 , - 2482 , - 2057 , - 2096 , - 2599 , - 3566 , - 1285 , - 3180 , - 1827 , - 938 , - 513 , - 552 , - 1055 , - 2022 , - 3453 , - 1636 , - 283 , - 3106 , - 2681 , - 2720 , - 3223 , - 478 , - 1909 , - 92 , - 2451 , - 1562 , - 1137 , - 1176 , - 1679 , - 2646 , - 365 , - 2260 , - 907 , - 18 , - 3305 , - 3344 , - 135 , - 1102 , - 2533 , - 716 , - 3075 , - 2186 , - 1761 , - 1800 , - 2303 , - 3270 , - 989 , - 2884 , - 1531 , - 642 , - 217 , - 256 , - 759 , - 1726 , - 3157 , - 1340 , - 3699 , - 2810 , - 2385 , - 2424 , - 2927 , - 182 , - 1613 , - 3508 , - 2155 , - 1266 , - 841 , - 880 , - 1383 , - 2350 , - 69 , - 1964 , - 611 , - 3434 , - 3009 , - 3048 , - 3551 , - 806 , - 2237 , - 420 , - 2779 , - 1890 , - 1465 , - 1504 , - 2007 , - 2974 , - 693 , - 2588 , - 1235 , - 346 , - 3633 , - 3672 , - 463 , - 1430 , - 2861 , - 1044 , - 3403 , - 2514 , - 2089 , - 2128 , - 2631 , - 3598 , - 1317 , - 3212 , - 1859 , - 970 , - 545 , - 584 , - 1087 , - 2054 , - 3485 , - 1668 , - 315 , - 3138 , - 2713 , - 2752 , - 3255 , - 510 , - 1941 , - 124 , - 2483 , - 1594 , - 1169 , - 1208 , - 1711 , - 2678 , - 397 , - 2292 , - 939 , - 50 , - 3337 , - 3376 , - 167 , - 1134 , - 2565 , - 748 , - 3107 , - 2218 , - 1793 , - 1832 , - 2335 , - 3302 , - 1021 , - 2916 , - 1563 , - 674 , - 249 , - 288 , - 791 , - 1758 , - 3189 , - 1372 , - 19 , - 2842 , - 2417 , - 2456 , - 2959 , - 214 , - 1645 , - 3540 , - 2187 , - 1298 , - 873 , - 912 , - 1415 , - 2382 , - 101 , - 1996 , - 643 , - 3466 , - 3041 , - 3080 , - 3583 , - 838 , - 2269 , - 452 , - 2811 , - 1922 , - 1497 , - 1536 , - 2039 , - 3006 , - 725 , - 2620 , - 1267 , - 378 , - 3665 , - 3704 , - 495 , - 1462 , - 2893 , - 1076 , - 3435 , - 2546 , - 2121 , - 2160 , - 2663 , - 3630 , - 1349 , - 3244 , - 1891 , - 1002 , - 577 , - 616 , - 1119 , - 2086 , - 3517 , - 1700 , - 347 , - 3170 , - 2745 , - 2784 , - 3287 , - 542 , - 1973 , - 156 , - 2515 , - 1626 , - 1201 , - 1240 , - 1743 , - 2710 , - 429 , - 2324 , - 971 , - 82 , - 3369 , - 3408 , - 199 , - 1166 , - 2597 , - 780 , - 3139 , - 2250 , - 1825 , - 1864 , - 2367 , - 3334 , - 1053 , - 2948 , - 1595 , - 706 , - 281 , - 320 , - 823 , - 1790 , - 3221 , - 1404 , - 51 , - 2874 , - 2449 , - 2488 , - 2991 , - 246 , - 1677 , - 3572 , - 2219 , - 1330 , - 905 , - 944 , - 1447 , - 2414 , - 133 , - 2028 , - 675 , - 3498 , - 3073 , - 3112 , - 3615 , - 870 , - 2301 , - 484 , - 2843 , - 1954 , - 1529 , - 1568 , - 2071 , - 3038 , - 757 , - 2652 , - 1299 , - 410 , - 3697 , - 24 , - 527 , - 1494 , - 2925 , - 1108 , - 3467 , - 2578 , - 2153 , - 2192 , - 2695 , - 3662 , - 1381 , - 3276 , - 1923 , - 1034 , - 609 , - 648 , - 1151 , - 2118 , - 3549 , - 1732 , - 379 , - 3202 , - 2777 , - 2816 , - 3319 , - 574 , - 2005 , - 188 , - 2547 , - 1658 , - 1233 , - 1272 , - 1775 , - 2742 , - 461 , - 2356 , - 1003 , - 114 , - 3401 , - 3440 , - 231 , - 1198 , - 2629 , - 812 , - 3171 , - 2282 , - 1857 , - 1896 , - 2399 , - 3366 , - 1085 , - 2980 , - 1627 , - 738 , - 313 , - 352 , - 855 , - 1822 , - 3253 , - 1436 , - 83 , - 2906 , - 2481 , - 2520 , - 3023 , - 278 , - 1709 , - 3604 , - 2251 , - 1362 , - 937 , - 976 , - 1479 , - 2446 , - 165 , - 2060 , - 707 , - 3530 , - 3105 , - 3144 , - 3647 , - 902 , - 2333 , - 516 , - 2875 , - 1986 , - 1561 , - 1600 , - 2103 , - 3070 , - 789 , - 2684 , - 1331 , - 442 , - 17 , - 56 , - 559 , - 1526 , - 2957 , - 1140 , - 3499 , - 2610 , - 2185 , - 2224 , - 2727 , - 3694 , - 1413 , - 3308 , - 1955 , - 1066 , - 641 , - 680 , - 1183 , - 2150 , - 3581 , - 1764 , - 411 , - 3234 , - 2809 , - 2848 , - 3351 , - 606 , - 2037 , - 220 , - 2579 , - 1690 , - 1265 , - 1304 , - 1807 , - 2774 , - 493 , - 2388 , - 1035 , - 146 , - 3433 , - 3472 , - 263 , - 1230 , - 2661 , - 844 , - 3203 , - 2314 , - 1889 , - 1928 , - 2431 , - 3398 , - 1117 , - 3012 , - 1659 , - 770 , - 345 , - 384 , - 887 , - 1854 , - 3285 , - 1468 , - 115 , - 2938 , - 2513 , - 2552 , - 3055 , - 310 , - 1741 , - 3636 , - 2283 , - 1394 , - 969 , - 1008 , - 1511 , - 2478 , - 197 , - 2092 , - 739 , - 3562 , - 3137 , - 3176 , - 3679 , - 934 , - 2365 , - 548 , - 2907 , - 2018 , - 1593 , - 1632 , - 2135 , - 3102 , - 821 , - 2716 , - 1363 , - 474 , - 49 , - 88 , - 591 , - 1558 , - 2989 , - 1172 , - 3531 , - 2642 , - 2217 , - 2256 , - 2759 , - 14 , - 1445 , - 3340 , - 1987 , - 1098 , - 673 , - 712 , - 1215 , - 2182 , - 3613 , - 1796 , - 443 , - 3266 , - 2841 , - 2880 , - 3383 , - 638 , - 2069 , - 252 , - 2611 , - 1722 , - 1297 , - 1336 , - 1839 , - 2806 , - 525 , - 2420 , - 1067 , - 178 , - 3465 , - 3504 , - 295 , - 1262 , - 2693 , - 876 , - 3235 , - 2346 , - 1921 , - 1960 , - 2463 , - 3430 , - 1149 , - 3044 , - 1691 , - 802 , - 377 , - 416 , - 919 , - 1886 , - 3317 , - 1500 , - 147 , - 2970 , - 2545 , - 2584 , - 3087 , - 342 , - 1773 , - 3668 , - 2315 , - 1426 , - 1001 , - 1040 , - 1543 , - 2510 , - 229 , - 2124 , - 771 , - 3594 , - 3169 , - 3208 , - 3711 , - 966 , - 2397 , - 580 , - 2939 , - 2050 , - 1625 , - 1664 , - 2167 , - 3134 , - 853 , - 2748 , - 1395 , - 506 , - 81 , - 120 , - 623 , - 1590 , - 3021 , - 1204 , - 3563 , - 2674 , - 2249 , - 2288 , - 2791 , - 46 , - 1477 , - 3372 , - 2019 , - 1130 , - 705 , - 744 , - 1247 , - 2214 , - 3645 , - 1828 , - 475 , - 3298 , - 2873 , - 2912 , - 3415 , - 670 , - 2101 , - 284 , - 2643 , - 1754 , - 1329 , - 1368 , - 1871 , - 2838 , - 557 , - 2452 , - 1099 , - 210 , - 3497 , - 3536 , - 327 , - 1294 , - 2725 , - 908 , - 3267 , - 2378 , - 1953 , - 1992 , - 2495 , - 3462 , - 1181 , - 3076 , - 1723 , - 834 , - 409 , - 448 , - 951 , - 1918 , - 3349 , - 1532 , - 179 , - 3002 , - 2577 , - 2616 , - 3119 , - 374 , - 1805 , - 3700 , - 2347 , - 1458 , - 1033 , - 1072 , - 1575 , - 2542 , - 261 , - 2156 , - 803 , - 3626 , - 3201 , - 3240 , - 31 , - 998 , - 2429 , - 612 , - 2971 , - 2082 , - 1657 , - 1696 , - 2199 , - 3166 , - 885 , - 2780 , - 1427 , - 538 , - 113 , - 152 , - 655 , - 1622 , - 3053 , - 1236 , - 3595 , - 2706 , - 2281 , - 2320 , - 2823 , - 78 , - 1509 , - 3404 , - 2051 , - 1162 , - 737 , - 776 , - 1279 , - 2246 , - 3677 , - 1860 , - 507 , - 3330 , - 2905 , - 2944 , - 3447 , - 702 , - 2133 , - 316 , - 2675 , - 1786 , - 1361 , - 1400 , - 1903 , - 2870 , - 589 , - 2484 , - 1131 , - 242 , - 3529 , - 3568 , - 359 , - 1326 , - 2757 , - 940 , - 3299 , - 2410 , - 1985 , - 2024 , - 2527 , - 3494 , - 1213 , - 3108 , - 1755 , - 866 , - 441 , - 480 , - 983 , - 1950 , - 3381 , - 1564 , - 211 , - 3034 , - 2609 , - 2648 , - 3151 , - 406 , - 1837 , - 20 , - 2379 , - 1490 , - 1065 , - 1104 , - 1607 , - 2574 , - 293 , - 2188 , - 835 , - 3658 , - 3233 , - 3272 , - 63 , - 1030 , - 2461 , - 644 , - 3003 , - 2114 , - 1689 , - 1728 , - 2231 , - 3198 , - 917 , - 2812 , - 1459 , - 570 , - 145 , - 184 , - 687 , - 1654 , - 3085 , - 1268 , - 3627 , - 2738 , - 2313 , - 2352 , - 2855 , - 110 , - 1541 , - 3436 , - 2083 , - 1194 , - 769 , - 808 , - 1311 , - 2278 , - 3709 , - 1892 , - 539 , - 3362 , - 2937 , - 2976 , - 3479 , - 734 , - 2165 , - 348 , - 2707 , - 1818 , - 1393 , - 1432 , - 1935 , - 2902 , - 621 , - 2516 , - 1163 , - 274 , - 3561 , - 3600 , - 391 , - 1358 , - 2789 , - 972 , - 3331 , - 2442 , - 2017 , - 2056 , - 2559 , - 3526 , - 1245 , - 3140 , - 1787 , - 898 , - 473 , - 512 , - 1015 , - 1982 , - 3413 , - 1596 , - 243 , - 3066 , - 2641 , - 2680 , - 3183 , - 438 , - 1869 , - 52 , - 2411 , - 1522 , - 1097 , - 1136 , - 1639 , - 2606 , - 325 , - 2220 , - 867 , - 3690 , - 3265 , - 3304 , - 95 , - 1062 , - 2493 , - 676 , - 3035 , - 2146 , - 1721 , - 1760 , - 2263 , - 3230 , - 949 , - 2844 , - 1491 , - 602 , - 177 , - 216 , - 719 , - 1686 , - 3117 , - 1300 , - 3659 , - 2770 , - 2345 , - 2384 , - 2887 , - 142 , - 1573 , - 3468 , - 2115 , - 1226 , - 801 , - 840 , - 1343 , - 2310 , - 29 , - 1924 , - 571 , - 3394 , - 2969 , - 3008 , - 3511 , - 766 , - 2197 , - 380 , - 2739 , - 1850 , - 1425 , - 1464 , - 1967 , - 2934 , - 653 , - 2548 , - 1195 , - 306 , - 3593 , - 3632 , - 423 , - 1390 , - 2821 , - 1004 , - 3363 , - 2474 , - 2049 , - 2088 , - 2591 , - 3558 , - 1277 , - 3172 , - 1819 , - 930 , - 505 , - 544 , - 1047 , - 2014 , - 3445 , - 1628 , - 275 , - 3098 , - 2673 , - 2712 , - 3215 , - 470 , - 1901 , - 84 , - 2443 , - 1554 , - 1129 , - 1168 , - 1671 , - 2638 , - 357 , - 2252 , - 899 , - 10 , - 3297 , - 3336 , - 127 , - 1094 , - 2525 , - 708 , - 3067 , - 2178 , - 1753 , - 1792 , - 2295 , - 3262 , - 981 , - 2876 , - 1523 , - 634 , - 209 , - 248 , - 751 , - 1718 , - 3149 , - 1332 , - 3691 , - 2802 , - 2377 , - 2416 , - 2919 , - 174 , - 1605 , - 3500 , - 2147 , - 1258 , - 833 , - 872 , - 1375 , - 2342 , - 61 , - 1956 , - 603 , - 3426 , - 3001 , - 3040 , - 3543 , - 798 , - 2229 , - 412 , - 2771 , - 1882 , - 1457 , - 1496 , - 1999 , - 2966 , - 685 , - 2580 , - 1227 , - 338 , - 3625 , - 3664 , - 455 , - 1422 , - 2853 , - 1036 , - 3395 , - 2506 , - 2081 , - 2120 , - 2623 , - 3590 , - 1309 , - 3204 , - 1851 , - 962 , - 537 , - 576 , - 1079 , - 2046 , - 3477 , - 1660 , - 307 , - 3130 , - 2705 , - 2744 , - 3247 , - 502 , - 1933 , - 116 , - 2475 , - 1586 , - 1161 , - 1200 , - 1703 , - 2670 , - 389 , - 2284 , - 931 , - 42 , - 3329 , - 3368 , - 159 , - 1126 , - 2557 , - 740 , - 3099 , - 2210 , - 1785 , - 1824 , - 2327 , - 3294 , - 1013 , - 2908 , - 1555 , - 666 , - 241 , - 280 , - 783 , - 1750 , - 3181 , - 1364 , - 11 , - 2834 , - 2409 , - 2448 , - 2951 , - 206 , - 1637 , - 3532 , - 2179 , - 1290 , - 865 , - 904 , - 1407 , - 2374 , - 93 , - 1988 , - 635 , - 3458 , - 3033 , - 3072 , - 3575 , - 830 , - 2261 , - 444 , - 2803 , - 1914 , - 1489 , - 1528 , - 2031 , - 2998 , - 717 , - 2612 , - 1259 , - 370 , - 3657 , - 3696 , - 487 , - 1454 , - 2885 , - 1068 , - 3427 , - 2538 , - 2113 , - 2152 , - 2655 , - 3622 , - 1341 , - 3236 , - 1883 , - 994 , - 569 , - 608 , - 1111 , - 2078 , - 3509 , - 1692 , - 339 , - 3162 , - 2737 , - 2776 , - 3279 , - 534 , - 1965 , - 148 , - 2507 , - 1618 , - 1193 , - 1232 , - 1735 , - 2702 , - 421 , - 2316 , - 963 , - 74 , - 3361 , - 3400 , - 191 , - 1158 , - 2589 , - 772 , - 3131 , - 2242 , - 1817 , - 1856 , - 2359 , - 3326 , - 1045 , - 2940 , - 1587 , - 698 , - 273 , - 312 , - 815 , - 1782 , - 3213 , - 1396 , - 43 , - 2866 , - 2441 , - 2480 , - 2983 , - 238 , - 1669 , - 3564 , - 2211 , - 1322 , - 897 , - 936 , - 1439 , - 2406 , - 125 , - 2020 , - 667 , - 3490 , - 3065 , - 3104 , - 3607 , - 862 , - 2293 , - 476 , - 2835 , - 1946 , - 1521 , - 1560 , - 2063 , - 3030 , - 749 , - 2644 , - 1291 , - 402 , - 3689 , - 16 , - 519 , - 1486 , - 2917 , - 1100 , - 3459 , - 2570 , - 2145 , - 2184 , - 2687 , - 3654 , - 1373 , - 3268 , - 1915 , - 1026 , - 601 , - 640 , - 1143 , - 2110 , - 3541 , - 1724 , - 371 , - 3194 , - 2769 , - 2808 , - 3311 , - 566 , - 1997 , - 180 , - 2539 , - 1650 , - 1225 , - 1264 , - 1767 , - 2734 , - 453 , - 2348 , - 995 , - 106 , - 3393 , - 3432 , - 223 , - 1190 , - 2621 , - 804 , - 3163 , - 2274 , - 1849 , - 1888 , - 2391 , - 3358 , - 1077 , - 2972 , - 1619 , - 730 , - 305 , - 344 , - 847 , - 1814 , - 3245 , - 1428 , - 75 , - 2898 , - 2473 , - 2512 , - 3015 , - 270 , - 1701 , - 3596 , - 2243 , - 1354 , - 929 , - 968 , - 1471 , - 2438 , - 157 , - 2052 , - 699 , - 3522 , - 3097 , - 3136 , - 3639 , - 894 , - 2325 , - 508 , - 2867 , - 1978 , - 1553 , - 1592 , - 2095 , - 3062 , - 781 , - 2676 , - 1323 , - 434 , - 9 , - 48 , - 551 , - 1518 , - 2949 , - 1132 , - 3491 , - 2602 , - 2177 , - 2216 , - 2719 , - 3686 , - 1405 , - 3300 , - 1947 , - 1058 , - 633 , - 672 , - 1175 , - 2142 , - 3573 , - 1756 , - 403 , - 3226 , - 2801 , - 2840 , - 3343 , - 598 , - 2029 , - 212 , - 2571 , - 1682 , - 1257 , - 1296 , - 1799 , - 2766 , - 485 , - 2380 , - 1027 , - 138 , - 3425 , - 3464 , - 255 , - 1222 , - 2653 , - 836 , - 3195 , - 2306 , - 1881 , - 1920 , - 2423 , - 3390 , - 1109 , - 3004 , - 1651 , - 762 , - 337 , - 376 , - 879 , - 1846 , - 3277 , - 1460 , - 107 , - 2930 , - 2505 , - 2544 , - 3047 , - 302 , - 1733 , - 3628 , - 2275 , - 1386 , - 961 , - 1000 , - 1503 , - 2470 , - 189 , - 2084 , - 731 , - 3554 , - 3129 , - 3168 , - 3671 , - 926 , - 2357 , - 540 , - 2899 , - 2010 , - 1585 , - 1624 , - 2127 , - 3094 , - 813 , - 2708 , - 1355 , - 466 , - 41 , - 80 , - 583 , - 1550 , - 2981 , - 1164 , - 3523 , - 2634 , - 2209 , - 2248 , - 2751 , - 6 , - 1437 , - 3332 , - 1979 , - 1090 , - 665 , - 704 , - 1207 , - 2174 , - 3605 , - 1788 , - 435 , - 3258 , - 2833 , - 2872 , - 3375 , - 630 , - 2061 , - 244 , - 2603 , - 1714 , - 1289 , - 1328 , - 1831 , - 2798 , - 517 , - 2412 , - 1059 , - 170 , - 3457 , - 3496 , - 287 , - 1254 , - 2685 , - 868 , - 3227 , - 2338 , - 1913 , - 1952 , - 2455 , - 3422 , - 1141 , - 3036 , - 1683 , - 794 , - 369 , - 408 , - 911 , - 1878 , - 3309 , - 1492 , - 139 , - 2962 , - 2537 , - 2576 , - 3079 , - 334 , - 1765 , - 3660 , - 2307 , - 1418 , - 993 , - 1032 , - 1535 , - 2502 , - 221 , - 2116 , - 763 , - 3586 , - 3161 , - 3200 , - 3703 , - 958 , - 2389 , - 572 , - 2931 , - 2042 , - 1617 , - 1656 , - 2159 , - 3126 , - 845 , - 2740 , - 1387 , - 498 , - 73 , - 112 , - 615 , - 1582 , - 3013 , - 1196 , - 3555 , - 2666 , - 2241 , - 2280 , - 2783 , - 38 , - 1469 , - 3364 , - 2011 , - 1122 , - 697 , - 736 , - 1239 , - 2206 , - 3637 , - 1820 , - 467 , - 3290 , - 2865 , - 2904 , - 3407 , - 662 , - 2093 , - 276 , - 2635 , - 1746 , - 1321 , - 1360 , - 1863 , - 2830 , - 549 , - 2444 , - 1091 , - 202 , - 3489 , - 3528 , - 319 , - 1286 , - 2717 , - 900 , - 3259 , - 2370 , - 1945 , - 1984 , - 2487 , - 3454 , - 1173 , - 3068 , - 1715 , - 826 , - 401 , - 440 , - 943 , - 1910 , - 3341 , - 1524 , - 171 , - 2994 , - 2569 , - 2608 , - 3111 , - 366 , - 1797 , - 3692 , - 2339 , - 1450 , - 1025 , - 1064 , - 1567 , - 2534 , - 253 , - 2148 , - 795 , - 3618 , - 3193 , - 3232 , - 23 , - 990 , - 2421 , - 604 , - 2963 , - 2074 , - 1649 , - 1688 , - 2191 , - 3158 , - 877 , - 2772 , - 1419 , - 530 , - 105 , - 144 , - 647 , - 1614 , - 3045 , - 1228 , - 3587 , - 2698 , - 2273 , - 2312 , - 2815 , - 70 , - 1501 , - 3396 , - 2043 , - 1154 , - 729 , - 768 , - 1271 , - 2238 , - 3669 , - 1852 , - 499 , - 3322 , - 2897 , - 2936 , - 3439 , - 694 , - 2125 , - 308 , - 2667 , - 1778 , - 1353 , - 1392 , - 1895 , - 2862 , - 581 , - 2476 , - 1123 , - 234 , - 3521 , - 3560 , - 351 , - 1318 , - 2749 , - 932 , - 3291 , - 2402 , - 1977 , - 2016 , - 2519 , - 3486 , - 1205 , - 3100 , - 1747 , - 858 , - 433 , - 472 , - 975 , - 1942 , - 3373 , - 1556 , - 203 , - 3026 , - 2601 , - 2640 , - 3143 , - 398 , - 1829 , - 12 , - 2371 , - 1482 , - 1057 , - 1096 , - 1599 , - 2566 , - 285 , - 2180 , - 827 , - 3650 , - 3225 , - 3264 , - 55 , - 1022 , - 2453 , - 636 , - 2995 , - 2106 , - 1681 , - 1720 , - 2223 , - 3190 , - 909 , - 2804 , - 1451 , - 562 , - 137 , - 176 , - 679 , - 1646 , - 3077 , - 1260 , - 3619 , - 2730 , - 2305 , - 2344 , - 2847 , - 102 , - 1533 , - 3428 , - 2075 , - 1186 , - 761 , - 800 , - 1303 , - 2270 , - 3701 , - 1884 , - 531 , - 3354 , - 2929 , - 2968 , - 3471 , - 726 , - 2157 , - 340 , - 2699 , - 1810 , - 1385 , - 1424 , - 1927 , - 2894 , - 613 , - 2508 , - 1155 , - 266 , - 3553 , - 3592 , - 383 , - 1350 , - 2781 , - 964 , - 3323 , - 2434 , - 2009 , - 2048 , - 2551 , - 3518 , - 1237 , - 3132 , - 1779 , - 890 , - 465 , - 504 , - 1007 , - 1974 , - 3405 , - 1588 , - 235 , - 3058 , - 2633 , - 2672 , - 3175 , - 430 , - 1861 , - 44 , - 2403 , - 1514 , - 1089 , - 1128 , - 1631 , - 2598 , - 317 , - 2212 , - 859 , - 3682 , - 3257 , - 3296 , - 87 , - 1054 , - 2485 , - 668 , - 3027 , - 2138 , - 1713 , - 1752 , - 2255 , - 3222 , - 941 , - 2836 , - 1483 , - 594 , - 169 , - 208 , - 711 , - 1678 , - 3109 , - 1292 , - 3651 , - 2762 , - 2337 , - 2376 , - 2879 , - 134 , - 1565 , - 3460 , - 2107 , - 1218 , - 793 , - 832 , - 1335 , - 2302 , - 21 , - 1916 , - 563 , - 3386 , - 2961 , - 3000 , - 3503 , - 758 , - 2189 , - 372 , - 2731 , - 1842 , - 1417 , - 1456 , - 1959 , - 2926 , - 645 , - 2540 , - 1187 , - 298 , - 3585 , - 3624 , - 415 , - 1382 , - 2813 , - 996 , - 3355 , - 2466 , - 2041 , - 2080 , - 2583 , - 3550 , - 1269 , - 3164 , - 1811 , - 922 , - 497 , - 536 , - 1039 , - 2006 , - 3437 , - 1620 , - 267 , - 3090 , - 2665 , - 2704 , - 3207 , - 462 , - 1893 , - 76 , - 2435 , - 1546 , - 1121 , - 1160 , - 1663 , - 2630 , - 349 , - 2244 , - 891 , - 2 , - 3289 , - 3328 , - 119 , - 1086 , - 2517 , - 700 , - 3059 , - 2170 , - 1745 , - 1784 , - 2287 , - 3254 , - 973 , - 2868 , - 1515 , - 626 , - 201 , - 240 , - 743 , - 1710 , - 3141 , - 1324 , - 3683 , - 2794 , - 2369 , - 2408 , - 2911 , - 166 , - 1597 , - 3492 , - 2139 , - 1250 , - 825 , - 864 , - 1367 , - 2334 , - 53 , - 1948 , - 595 , - 3418 , - 2993 , - 3032 , - 3535 , - 790 , - 2221 , - 404 , - 2763 , - 1874 , - 1449 , - 1488 , - 1991 , - 2958 , - 677 , - 2572 , - 1219 , - 330 , - 3617 , - 3656 , - 447 , - 1414 , - 2845 , - 1028 , - 3387 , - 2498 , - 2073 , - 2112 , - 2615 , - 3582 , - 1301 , - 3196 , - 1843 , - 954 , - 529 , - 568 , - 1071 , - 2038 , - 3469 , - 1652 , - 299 , - 3122 , - 2697 , - 2736 , - 3239 , - 494 , - 1925 , - 108 , - 2467 , - 1578 , - 1153 , - 1192 , - 1695 , - 2662 , - 381 , - 2276 , - 923 , - 34 , - 3321 , - 3360 , - 151 , - 1118 , - 2549 , - 732 , - 3091 , - 2202 , - 1777 , - 1816 , - 2319 , - 3286 , - 1005 , - 2900 , - 1547 , - 658 , - 233 , - 272 , - 775 , - 1742 , - 3173 , - 1356 , - 3 , - 2826 , - 2401 , - 2440 , - 2943 , - 198 , - 1629 , - 3524 , - 2171 , - 1282 , - 857 , - 896 , - 1399 , - 2366 , - 85 , - 1980 , - 627 , - 3450 , - 3025 , - 3064 , - 3567 , - 822 , - 2253 , - 436 , - 2795 , - 1906 , - 1481 , - 1520 , - 2023 , - 2990 , - 709 , - 2604 , - 1251 , - 362 , - 3649 , - 3688 , - 479 , - 1446 , - 2877 , - 1060 , - 3419 , - 2530 , - 2105 , - 2144 , - 2647 , - 3614 , - 1333 , - 3228 , - 1875 , - 986 , - 561 , - 600 , - 1103 , - 2070 , - 3501 , - 1684 , - 331 , - 3154 , - 2729 , - 2768 , - 3271 , - 526 , - 1957 , - 140 , - 2499 , - 1610 , - 1185 , - 1224 , - 1727 , - 2694 , - 413 , - 2308 , - 955 , - 66 , - 3353 , - 3392 , - 183 , - 1150 , - 2581 , - 764 , - 3123 , - 2234 , - 1809 , - 1848 , - 2351 , - 3318 , - 1037 , - 2932 , - 1579 , - 690 , - 265 , - 304 , - 807 , - 1774 , - 3205 , - 1388 , - 35 , - 2858 , - 2433 , - 2472 , - 2975 , - 230 , - 1661 , - 3556 , - 2203 , - 1314 , - 889 , - 928 , - 1431 , - 2398 , - 117 , - 2012 , - 659 , - 3482 , - 3057 , - 3096 , - 3599 , - 854 , - 2285 , - 468 , - 2827 , - 1938 , - 1513 , - 1552 , - 2055 , - 3022 , - 741 , - 2636 , - 1283 , - 394 , - 3681 , - 8 , - 511 , - 1478 , - 2909 , - 1092 , - 3451 , - 2562 , - 2137 , - 2176 , - 2679 , - 3646 , - 1365 , - 3260 , - 1907 , - 1018 , - 593 , - 632 , - 1135 , - 2102 , - 3533 , - 1716 , - 363 , - 3186 , - 2761 , - 2800 , - 3303 , - 558 , - 1989 , - 172 , - 2531 , - 1642 , - 1217 , - 1256 , - 1759 , - 2726 , - 445 , - 2340 , - 987 , - 98 , - 3385 , - 3424 , - 215 , - 1182 , - 2613 , - 796 , - 3155 , - 2266 , - 1841 , - 1880 , - 2383 , - 3350 , - 1069 , - 2964 , - 1611 , - 722 , - 297 , - 336 , - 839 , - 1806 , - 3237 , - 1420 , - 67 , - 2890 , - 2465 , - 2504 , - 3007 , - 262 , - 1693 , - 3588 , - 2235 , - 1346 , - 921 , - 960 , - 1463 , - 2430 , - 149 , - 2044 , - 691 , - 3514 , - 3089 , - 3128 , - 3631 , - 886 , - 2317 , - 500 , - 2859 , - 1970 , - 1545 , - 1584 , - 2087 , - 3054 , - 773 , - 2668 , - 1315 , - 426 , - 1 , - 40 , - 543 , - 1510 , - 2941 , - 1124 , - 3483 , - 2594 , - 2169 , - 2208 , - 2711 , - 3678 , - 1397 , - 3292 , - 1939 , - 1050 , - 625 , - 664 , - 1167 , - 2134 , - 3565 , - 1748 , - 395 , - 3218 , - 2793 , - 2832 , - 3335 , - 590 , - 2021 , - 204 , - 2563 , - 1674 , - 1249 , - 1288 , - 1791 , - 2758 , - 477 , - 2372 , - 1019 , - 130 , - 3417 , - 3456 , - 247 , - 1214 , - 2645 , - 828 , - 3187 , - 2298 , - 1873 , - 1912 , - 2415 , - 3382 , - 1101 , - 2996 , - 1643 , - 754 , - 329 , - 368 , - 871 , - 1838 , - 3269 , - 1452 , - 99 , - 2922 , - 2497 , - 2536 , - 3039 , - 294 , - 1725 , - 3620 , - 2267 , - 1378 , - 953 , - 992 , - 1495 , - 2462 , - 181 , - 2076 , - 723 , - 3546 , - 3121 , - 3160 , - 3663 , - 918 , - 2349 , - 532 , - 2891 , - 2002 , - 1577 , - 1616 , - 2119 , - 3086 , - 805 , - 2700 , - 1347 , - 458 , - 33 , - 72 , - 575 , - 1542 , - 2973 , - 1156 , - 3515 , - 2626 , - 2201 , - 2240 , - 2743 , - 3710 , - 1429 , - 3324 , - 1971 , - 1082 , - 657 , - 696 , - 1199 , - 2166 , - 3597 , - 1780 , - 427 , - 3250 , - 2825 , - 2864 , - 3367 , - 622 , - 2053 , - 236 , - 2595 , - 1706 , - 1281 , - 1320 , - 1823 , - 2790 , - 509 , - 2404 , - 1051 , - 162 , - 3449 , - 3488 , - 279 , - 1246 , - 2677 , - 860 , - 3219 , - 2330 , - 1905 , - 1944 , - 2447 , - 3414 , - 1133 , - 3028 , - 1675 , - 786 , - 361 , - 400 , - 903 , - 1870 , - 3301 , - 1484 , - 131 , - 2954 , - 2529 , - 2568 , - 3071 , - 326 , - 1757 , - 3652 , - 2299 , - 1410 , - 985 , - 1024 , - 1527 , - 2494 , - 213 , - 2108 , - 755 , - 3578 , - 3153 , - 3192 , - 3695 , - 950 , - 2381 , - 564 , - 2923 , - 2034 , - 1609 , - 1648 , - 2151 , - 3118 , - 837 , - 2732 , - 1379 , - 490 , - 65 , - 104 , - 607 , - 1574 , - 3005 , - 1188 , - 3547 , - 2658 , - 2233 , - 2272 , - 2775 , - 30 , - 1461 , - 3356 , - 2003 , - 1114 , - 689 , - 728 , - 1231 , - 2198 , - 3629 , - 1812 , - 459 , - 3282 , - 2857 , - 2896 , - 3399 , - 654 , - 2085 , - 268 , - 2627 , - 1738 , - 1313 , - 1352 , - 1855 , - 2822 , - 541 , - 2436 , - 1083 , - 194 , - 3481 , - 3520 , - 311 , - 1278 , - 2709 , - 892 , - 3251 , - 2362 , - 1937 , - 1976 , - 2479 , - 3446 , - 1165 , - 3060 , - 1707 , - 818 , - 393 , - 432 , - 935 , - 1902 , - 3333 , - 1516 , - 163 , - 2986 , - 2561 , - 2600 , - 3103 , - 358 , - 1789 , - 3684 , - 2331 , - 1442 , - 1017 , - 1056 , - 1559 , - 2526 , - 245 , - 2140 , - 787 , - 3610 , - 3185 , - 3224 , - 15 , - 982 , - 2413 , - 596 , - 2955 , - 2066 , - 1641 , - 1680 , - 2183 , - 3150 , - 869 , - 2764 , - 1411 , - 522 , - 97 , - 136 , - 639 , - 1606 , - 3037 , - 1220 , - 3579 , - 2690 , - 2265 , - 2304 , - 2807 , - 62 , - 1493 , - 3388 , - 2035 , - 1146 , - 721 , - 760 , - 1263 , - 2230 , - 3661 , - 1844 , - 491 , - 3314 , - 2889 , - 2928 , - 3431 , - 686 , - 2117 , - 300 , - 2659 , - 1770 , - 1345 , - 1384 , - 1887 , - 2854 , - 573 , - 2468 , - 1115 , - 226 , - 3513 , - 3552 , - 343 , - 1310 , - 2741 , - 924 , - 3283 , - 2394 , - 1969 , - 2008 , - 2511 , - 3478 , - 1197 , - 3092 , - 1739 , - 850 , - 425 , - 464 , - 967 , - 1934 , - 3365 , - 1548 , - 195 , - 3018 , - 2593 , - 2632 , - 3135 , - 390 , - 1821 , - 4 , - 2363 , - 1474 , - 1049 , - 1088 , - 1591 , - 2558 , - 277 , - 2172 , - 819 , - 3642 , - 3217 , - 3256 , - 47 , - 1014 , - 2445 , - 628 , - 2987 , - 2098 , - 1673 , - 1712 , - 2215 , - 3182 , - 901 , - 2796 , - 1443 , - 554 , - 129 , - 168 , - 671 , - 1638 , - 3069 , - 1252 , - 3611 , - 2722 , - 2297 , - 2336 , - 2839 , - 94 , - 1525 , - 3420 , - 2067 , - 1178 , - 753 , - 792 , - 1295 , - 2262 , - 3693 , - 1876 , - 523 , - 3346 , - 2921 , - 2960 , - 3463 , - 718 , - 2149 , - 332 , - 2691 , - 1802 , - 1377 , - 1416 , - 1919 , - 2886 , - 605 , - 2500 , - 1147 , - 258 , - 3545 , - 3584 , - 375 , - 1342 , - 2773 , - 956 , - 3315 , - 2426 , - 2001 , - 2040 , - 2543 , - 3510 , - 1229 , - 3124 , - 1771 , - 882 , - 457 , - 496 , - 999 , - 1966 , - 3397 , - 1580 , - 227 , - 3050 , - 2625 , - 2664 , - 3167 , - 422 , - 1853 , - 36 , - 2395 , - 1506 , - 1081 , - 1120 , - 1623 , - 2590 , - 309 , - 2204 , - 851 , - 3674 , - 3249 , - 3288 , - 79 , - 1046 , - 2477 , - 660 , - 3019 , - 2130 , - 1705 , - 1744 , - 2247 , - 3214 , - 933 , - 2828 , - 1475 , - 586 , - 161 , - 200 , - 703 , - 1670 , - 3101 , - 1284 , - 3643 , - 2754 , - 2329 , - 2368 , - 2871 , - 126 , - 1557 , - 3452 , - 2099 , - 1210 , - 785 , - 824 , - 1327 , - 2294 , - 13 , - 1908 , - 555 , - 3378 , - 2953 , - 2992 , - 3495 , - 750 , - 2181 , - 364 , - 2723 , - 1834 , - 1409 , - 1448 , - 1951 , - 2918 , - 637 , - 2532 , - 1179 , - 290 , - 3577 , - 3616 , - 407 , - 1374 , - 2805 , - 988 , - 3347 , - 2458 , - 2033 , - 2072 , - 2575 , - 3542 , - 1261 , - 3156 , - 1803 , - 914 , - 489 , - 528 , - 1031 , - 1998 , - 3429 , - 1612 , - 259 , - 3082 , - 2657 , - 2696 , - 3199 , - 454 , - 1885 , - 68 , - 2427 , - 1538 , - 1113 , - 1152 , - 1655 , - 2622 , - 341 , - 2236 , - 883 , - 3706 , - 3281 , - 3320 , - 111 , - 1078 , - 2509 , - 692 , - 3051 , - 2162 , - 1737 , - 1776 , - 2279 , - 3246 , - 965 , - 2860 , - 1507 , - 618 , - 193 , - 232 , - 735 , - 1702 , - 3133 , - 1316 , - 3675 , - 2786 , - 2361 , - 2400 , - 2903 , - 158 , - 1589 , - 3484 , - 2131 , - 1242 , - 817 , - 856 , - 1359 , - 2326 , - 45 , - 1940 , - 587 , - 3410 , - 2985 , - 3024 , - 3527 , - 782 , - 2213 , - 396 , - 2755 , - 1866 , - 1441 , - 1480 , - 1983 , - 2950 , - 669 , - 2564 , - 1211 , - 322 , - 3609 , - 3648 , - 439 , - 1406 , - 2837 , - 1020 , - 3379 , - 2490 , - 2065 , - 2104 , - 2607 , - 3574 , - 1293 , - 3188 , - 1835 , - 946 , - 521 , - 560 , - 1063 , - 2030 , - 3461 , - 1644 , - 291 , - 3114 , - 2689 , - 2728 , - 3231 , - 486 , - 1917 , - 100 , - 2459 , - 1570 , - 1145 , - 1184 , - 1687 , - 2654 , - 373 , - 2268 , - 915 , - 26 , - 3313 , - 3352 , - 143 , - 1110 , - 2541 , - 724 , - 3083 , - 2194 , - 1769 , - 1808 , - 2311 , - 3278 , - 997 , - 2892 , - 1539 , - 650 , - 225 , - 264 , - 767 , - 1734 , - 3165 , - 1348 , - 3707 , - 2818 , - 2393 , - 2432 , - 2935 , - 190 , - 1621 , - 3516 , - 2163 , - 1274 , - 849 , - 888 , - 1391 , - 2358 , - 77 , - 1972 , - 619 , - 3442 , - 3017 , - 3056 , - 3559 , - 814 , - 2245 , - 428 , - 2787 , - 1898 , - 1473 , - 1512 , - 2015 , - 2982 , - 701 , - 2596 , - 1243 , - 354 , - 3641 , - 3680 , - 471 , - 1438 , - 2869 , - 1052 , - 3411 , - 2522 , - 2097 , - 2136 , - 2639 , - 3606 , - 1325 , - 3220 , - 1867 , - 978 , - 553 , - 592 , - 1095 , - 2062 , - 3493 , - 1676 , - 323 , - 3146 , - 2721 , - 2760 , - 3263 , - 518 , - 1949 , - 132 , - 2491 , - 1602 , - 1177 , - 1216 , - 1719 , - 2686 , - 405 , - 2300 , - 947 , - 58 , - 3345 , - 3384 , - 175 , - 1142 , - 2573 , - 756 , - 3115 , - 2226 , - 1801 , - 1840 , - 2343 , - 3310 , - 1029 , - 2924 , - 1571 , - 682 , - 257 , - 296 , - 799 , - 1766 , - 3197 , - 1380 , - 27 , - 2850 , - 2425 , - 2464 , - 2967 , - 222 , - 1653 , - 3548 , - 2195 , - 1306 , - 881 , - 920 , - 1423 , - 2390 , - 109 , - 2004 , - 651 , - 3474 , - 3049 , - 3088 , - 3591 , - 846 , - 2277 , - 460 , - 2819 , - 1930 , - 1505 , - 1544 , - 2047 , - 3014 , - 733 , - 2628 , - 1275 , - 386 , - 3673 , - 0 , - 415 , - 1302 , - 2661 , - 716 , - 3019 , - 2018 , - 1489 , - 1432 , - 1847 , - 2734 , - 317 , - 2148 , - 675 , - 3450 , - 2921 , - 2864 , - 3279 , - 390 , - 1749 , - 3580 , - 2107 , - 1106 , - 577 , - 520 , - 935 , - 1822 , - 3181 , - 1236 , - 3539 , - 2538 , - 2009 , - 1952 , - 2367 , - 3254 , - 837 , - 2668 , - 1195 , - 194 , - 3441 , - 3384 , - 23 , - 910 , - 2269 , - 324 , - 2627 , - 1626 , - 1097 , - 1040 , - 1455 , - 2342 , - 3701 , - 1756 , - 283 , - 3058 , - 2529 , - 2472 , - 2887 , - 3774 , - 1357 , - 3188 , - 1715 , - 714 , - 185 , - 128 , - 543 , - 1430 , - 2789 , - 844 , - 3147 , - 2146 , - 1617 , - 1560 , - 1975 , - 2862 , - 445 , - 2276 , - 803 , - 3578 , - 3049 , - 2992 , - 3407 , - 518 , - 1877 , - 3708 , - 2235 , - 1234 , - 705 , - 648 , - 1063 , - 1950 , - 3309 , - 1364 , - 3667 , - 2666 , - 2137 , - 2080 , - 2495 , - 3382 , - 965 , - 2796 , - 1323 , - 322 , - 3569 , - 3512 , - 151 , - 1038 , - 2397 , - 452 , - 2755 , - 1754 , - 1225 , - 1168 , - 1583 , - 2470 , - 53 , - 1884 , - 411 , - 3186 , - 2657 , - 2600 , - 3015 , - 126 , - 1485 , - 3316 , - 1843 , - 842 , - 313 , - 256 , - 671 , - 1558 , - 2917 , - 972 , - 3275 , - 2274 , - 1745 , - 1688 , - 2103 , - 2990 , - 573 , - 2404 , - 931 , - 3706 , - 3177 , - 3120 , - 3535 , - 646 , - 2005 , - 60 , - 2363 , - 1362 , - 833 , - 776 , - 1191 , - 2078 , - 3437 , - 1492 , - 19 , - 2794 , - 2265 , - 2208 , - 2623 , - 3510 , - 1093 , - 2924 , - 1451 , - 450 , - 3697 , - 3640 , - 279 , - 1166 , - 2525 , - 580 , - 2883 , - 1882 , - 1353 , - 1296 , - 1711 , - 2598 , - 181 , - 2012 , - 539 , - 3314 , - 2785 , - 2728 , - 3143 , - 254 , - 1613 , - 3444 , - 1971 , - 970 , - 441 , - 384 , - 799 , - 1686 , - 3045 , - 1100 , - 3403 , - 2402 , - 1873 , - 1816 , - 2231 , - 3118 , - 701 , - 2532 , - 1059 , - 58 , - 3305 , - 3248 , - 3663 , - 774 , - 2133 , - 188 , - 2491 , - 1490 , - 961 , - 904 , - 1319 , - 2206 , - 3565 , - 1620 , - 147 , - 2922 , - 2393 , - 2336 , - 2751 , - 3638 , - 1221 , - 3052 , - 1579 , - 578 , - 49 , - 3768 , - 407 , - 1294 , - 2653 , - 708 , - 3011 , - 2010 , - 1481 , - 1424 , - 1839 , - 2726 , - 309 , - 2140 , - 667 , - 3442 , - 2913 , - 2856 , - 3271 , - 382 , - 1741 , - 3572 , - 2099 , - 1098 , - 569 , - 512 , - 927 , - 1814 , - 3173 , - 1228 , - 3531 , - 2530 , - 2001 , - 1944 , - 2359 , - 3246 , - 829 , - 2660 , - 1187 , - 186 , - 3433 , - 3376 , - 15 , - 902 , - 2261 , - 316 , - 2619 , - 1618 , - 1089 , - 1032 , - 1447 , - 2334 , - 3693 , - 1748 , - 275 , - 3050 , - 2521 , - 2464 , - 2879 , - 3766 , - 1349 , - 3180 , - 1707 , - 706 , - 177 , - 120 , - 535 , - 1422 , - 2781 , - 836 , - 3139 , - 2138 , - 1609 , - 1552 , - 1967 , - 2854 , - 437 , - 2268 , - 795 , - 3570 , - 3041 , - 2984 , - 3399 , - 510 , - 1869 , - 3700 , - 2227 , - 1226 , - 697 , - 640 , - 1055 , - 1942 , - 3301 , - 1356 , - 3659 , - 2658 , - 2129 , - 2072 , - 2487 , - 3374 , - 957 , - 2788 , - 1315 , - 314 , - 3561 , - 3504 , - 143 , - 1030 , - 2389 , - 444 , - 2747 , - 1746 , - 1217 , - 1160 , - 1575 , - 2462 , - 45 , - 1876 , - 403 , - 3178 , - 2649 , - 2592 , - 3007 , - 118 , - 1477 , - 3308 , - 1835 , - 834 , - 305 , - 248 , - 663 , - 1550 , - 2909 , - 964 , - 3267 , - 2266 , - 1737 , - 1680 , - 2095 , - 2982 , - 565 , - 2396 , - 923 , - 3698 , - 3169 , - 3112 , - 3527 , - 638 , - 1997 , - 52 , - 2355 , - 1354 , - 825 , - 768 , - 1183 , - 2070 , - 3429 , - 1484 , - 11 , - 2786 , - 2257 , - 2200 , - 2615 , - 3502 , - 1085 , - 2916 , - 1443 , - 442 , - 3689 , - 3632 , - 271 , - 1158 , - 2517 , - 572 , - 2875 , - 1874 , - 1345 , - 1288 , - 1703 , - 2590 , - 173 , - 2004 , - 531 , - 3306 , - 2777 , - 2720 , - 3135 , - 246 , - 1605 , - 3436 , - 1963 , - 962 , - 433 , - 376 , - 791 , - 1678 , - 3037 , - 1092 , - 3395 , - 2394 , - 1865 , - 1808 , - 2223 , - 3110 , - 693 , - 2524 , - 1051 , - 50 , - 3297 , - 3240 , - 3655 , - 766 , - 2125 , - 180 , - 2483 , - 1482 , - 953 , - 896 , - 1311 , - 2198 , - 3557 , - 1612 , - 139 , - 2914 , - 2385 , - 2328 , - 2743 , - 3630 , - 1213 , - 3044 , - 1571 , - 570 , - 41 , - 3760 , - 399 , - 1286 , - 2645 , - 700 , - 3003 , - 2002 , - 1473 , - 1416 , - 1831 , - 2718 , - 301 , - 2132 , - 659 , - 3434 , - 2905 , - 2848 , - 3263 , - 374 , - 1733 , - 3564 , - 2091 , - 1090 , - 561 , - 504 , - 919 , - 1806 , - 3165 , - 1220 , - 3523 , - 2522 , - 1993 , - 1936 , - 2351 , - 3238 , - 821 , - 2652 , - 1179 , - 178 , - 3425 , - 3368 , - 7 , - 894 , - 2253 , - 308 , - 2611 , - 1610 , - 1081 , - 1024 , - 1439 , - 2326 , - 3685 , - 1740 , - 267 , - 3042 , - 2513 , - 2456 , - 2871 , - 3758 , - 1341 , - 3172 , - 1699 , - 698 , - 169 , - 112 , - 527 , - 1414 , - 2773 , - 828 , - 3131 , - 2130 , - 1601 , - 1544 , - 1959 , - 2846 , - 429 , - 2260 , - 787 , - 3562 , - 3033 , - 2976 , - 3391 , - 502 , - 1861 , - 3692 , - 2219 , - 1218 , - 689 , - 632 , - 1047 , - 1934 , - 3293 , - 1348 , - 3651 , - 2650 , - 2121 , - 2064 , - 2479 , - 3366 , - 949 , - 2780 , - 1307 , - 306 , - 3553 , - 3496 , - 135 , - 1022 , - 2381 , - 436 , - 2739 , - 1738 , - 1209 , - 1152 , - 1567 , - 2454 , - 37 , - 1868 , - 395 , - 3170 , - 2641 , - 2584 , - 2999 , - 110 , - 1469 , - 3300 , - 1827 , - 826 , - 297 , - 240 , - 655 , - 1542 , - 2901 , - 956 , - 3259 , - 2258 , - 1729 , - 1672 , - 2087 , - 2974 , - 557 , - 2388 , - 915 , - 3690 , - 3161 , - 3104 , - 3519 , - 630 , - 1989 , - 44 , - 2347 , - 1346 , - 817 , - 760 , - 1175 , - 2062 , - 3421 , - 1476 , - 3 , - 2778 , - 2249 , - 2192 , - 2607 , - 3494 , - 1077 , - 2908 , - 1435 , - 434 , - 3681 , - 3624 , - 263 , - 1150 , - 2509 , - 564 , - 2867 , - 1866 , - 1337 , - 1280 , - 1695 , - 2582 , - 165 , - 1996 , - 523 , - 3298 , - 2769 , - 2712 , - 3127 , - 238 , - 1597 , - 3428 , - 1955 , - 954 , - 425 , - 368 , - 783 , - 1670 , - 3029 , - 1084 , - 3387 , - 2386 , - 1857 , - 1800 , - 2215 , - 3102 , - 685 , - 2516 , - 1043 , - 42 , - 3289 , - 3232 , - 3647 , - 758 , - 2117 , - 172 , - 2475 , - 1474 , - 945 , - 888 , - 1303 , - 2190 , - 3549 , - 1604 , - 131 , - 2906 , - 2377 , - 2320 , - 2735 , - 3622 , - 1205 , - 3036 , - 1563 , - 562 , - 33 , - 3752 , - 391 , - 1278 , - 2637 , - 692 , - 2995 , - 1994 , - 1465 , - 1408 , - 1823 , - 2710 , - 293 , - 2124 , - 651 , - 3426 , - 2897 , - 2840 , - 3255 , - 366 , - 1725 , - 3556 , - 2083 , - 1082 , - 553 , - 496 , - 911 , - 1798 , - 3157 , - 1212 , - 3515 , - 2514 , - 1985 , - 1928 , - 2343 , - 3230 , - 813 , - 2644 , - 1171 , - 170 , - 3417 , - 3360 , - 3775 , - 886 , - 2245 , - 300 , - 2603 , - 1602 , - 1073 , - 1016 , - 1431 , - 2318 , - 3677 , - 1732 , - 259 , - 3034 , - 2505 , - 2448 , - 2863 , - 3750 , - 1333 , - 3164 , - 1691 , - 690 , - 161 , - 104 , - 519 , - 1406 , - 2765 , - 820 , - 3123 , - 2122 , - 1593 , - 1536 , - 1951 , - 2838 , - 421 , - 2252 , - 779 , - 3554 , - 3025 , - 2968 , - 3383 , - 494 , - 1853 , - 3684 , - 2211 , - 1210 , - 681 , - 624 , - 1039 , - 1926 , - 3285 , - 1340 , - 3643 , - 2642 , - 2113 , - 2056 , - 2471 , - 3358 , - 941 , - 2772 , - 1299 , - 298 , - 3545 , - 3488 , - 127 , - 1014 , - 2373 , - 428 , - 2731 , - 1730 , - 1201 , - 1144 , - 1559 , - 2446 , - 29 , - 1860 , - 387 , - 3162 , - 2633 , - 2576 , - 2991 , - 102 , - 1461 , - 3292 , - 1819 , - 818 , - 289 , - 232 , - 647 , - 1534 , - 2893 , - 948 , - 3251 , - 2250 , - 1721 , - 1664 , - 2079 , - 2966 , - 549 , - 2380 , - 907 , - 3682 , - 3153 , - 3096 , - 3511 , - 622 , - 1981 , - 36 , - 2339 , - 1338 , - 809 , - 752 , - 1167 , - 2054 , - 3413 , - 1468 , - 3771 , - 2770 , - 2241 , - 2184 , - 2599 , - 3486 , - 1069 , - 2900 , - 1427 , - 426 , - 3673 , - 3616 , - 255 , - 1142 , - 2501 , - 556 , - 2859 , - 1858 , - 1329 , - 1272 , - 1687 , - 2574 , - 157 , - 1988 , - 515 , - 3290 , - 2761 , - 2704 , - 3119 , - 230 , - 1589 , - 3420 , - 1947 , - 946 , - 417 , - 360 , - 775 , - 1662 , - 3021 , - 1076 , - 3379 , - 2378 , - 1849 , - 1792 , - 2207 , - 3094 , - 677 , - 2508 , - 1035 , - 34 , - 3281 , - 3224 , - 3639 , - 750 , - 2109 , - 164 , - 2467 , - 1466 , - 937 , - 880 , - 1295 , - 2182 , - 3541 , - 1596 , - 123 , - 2898 , - 2369 , - 2312 , - 2727 , - 3614 , - 1197 , - 3028 , - 1555 , - 554 , - 25 , - 3744 , - 383 , - 1270 , - 2629 , - 684 , - 2987 , - 1986 , - 1457 , - 1400 , - 1815 , - 2702 , - 285 , - 2116 , - 643 , - 3418 , - 2889 , - 2832 , - 3247 , - 358 , - 1717 , - 3548 , - 2075 , - 1074 , - 545 , - 488 , - 903 , - 1790 , - 3149 , - 1204 , - 3507 , - 2506 , - 1977 , - 1920 , - 2335 , - 3222 , - 805 , - 2636 , - 1163 , - 162 , - 3409 , - 3352 , - 3767 , - 878 , - 2237 , - 292 , - 2595 , - 1594 , - 1065 , - 1008 , - 1423 , - 2310 , - 3669 , - 1724 , - 251 , - 3026 , - 2497 , - 2440 , - 2855 , - 3742 , - 1325 , - 3156 , - 1683 , - 682 , - 153 , - 96 , - 511 , - 1398 , - 2757 , - 812 , - 3115 , - 2114 , - 1585 , - 1528 , - 1943 , - 2830 , - 413 , - 2244 , - 771 , - 3546 , - 3017 , - 2960 , - 3375 , - 486 , - 1845 , - 3676 , - 2203 , - 1202 , - 673 , - 616 , - 1031 , - 1918 , - 3277 , - 1332 , - 3635 , - 2634 , - 2105 , - 2048 , - 2463 , - 3350 , - 933 , - 2764 , - 1291 , - 290 , - 3537 , - 3480 , - 119 , - 1006 , - 2365 , - 420 , - 2723 , - 1722 , - 1193 , - 1136 , - 1551 , - 2438 , - 21 , - 1852 , - 379 , - 3154 , - 2625 , - 2568 , - 2983 , - 94 , - 1453 , - 3284 , - 1811 , - 810 , - 281 , - 224 , - 639 , - 1526 , - 2885 , - 940 , - 3243 , - 2242 , - 1713 , - 1656 , - 2071 , - 2958 , - 541 , - 2372 , - 899 , - 3674 , - 3145 , - 3088 , - 3503 , - 614 , - 1973 , - 28 , - 2331 , - 1330 , - 801 , - 744 , - 1159 , - 2046 , - 3405 , - 1460 , - 3763 , - 2762 , - 2233 , - 2176 , - 2591 , - 3478 , - 1061 , - 2892 , - 1419 , - 418 , - 3665 , - 3608 , - 247 , - 1134 , - 2493 , - 548 , - 2851 , - 1850 , - 1321 , - 1264 , - 1679 , - 2566 , - 149 , - 1980 , - 507 , - 3282 , - 2753 , - 2696 , - 3111 , - 222 , - 1581 , - 3412 , - 1939 , - 938 , - 409 , - 352 , - 767 , - 1654 , - 3013 , - 1068 , - 3371 , - 2370 , - 1841 , - 1784 , - 2199 , - 3086 , - 669 , - 2500 , - 1027 , - 26 , - 3273 , - 3216 , - 3631 , - 742 , - 2101 , - 156 , - 2459 , - 1458 , - 929 , - 872 , - 1287 , - 2174 , - 3533 , - 1588 , - 115 , - 2890 , - 2361 , - 2304 , - 2719 , - 3606 , - 1189 , - 3020 , - 1547 , - 546 , - 17 , - 3736 , - 375 , - 1262 , - 2621 , - 676 , - 2979 , - 1978 , - 1449 , - 1392 , - 1807 , - 2694 , - 277 , - 2108 , - 635 , - 3410 , - 2881 , - 2824 , - 3239 , - 350 , - 1709 , - 3540 , - 2067 , - 1066 , - 537 , - 480 , - 895 , - 1782 , - 3141 , - 1196 , - 3499 , - 2498 , - 1969 , - 1912 , - 2327 , - 3214 , - 797 , - 2628 , - 1155 , - 154 , - 3401 , - 3344 , - 3759 , - 870 , - 2229 , - 284 , - 2587 , - 1586 , - 1057 , - 1000 , - 1415 , - 2302 , - 3661 , - 1716 , - 243 , - 3018 , - 2489 , - 2432 , - 2847 , - 3734 , - 1317 , - 3148 , - 1675 , - 674 , - 145 , - 88 , - 503 , - 1390 , - 2749 , - 804 , - 3107 , - 2106 , - 1577 , - 1520 , - 1935 , - 2822 , - 405 , - 2236 , - 763 , - 3538 , - 3009 , - 2952 , - 3367 , - 478 , - 1837 , - 3668 , - 2195 , - 1194 , - 665 , - 608 , - 1023 , - 1910 , - 3269 , - 1324 , - 3627 , - 2626 , - 2097 , - 2040 , - 2455 , - 3342 , - 925 , - 2756 , - 1283 , - 282 , - 3529 , - 3472 , - 111 , - 998 , - 2357 , - 412 , - 2715 , - 1714 , - 1185 , - 1128 , - 1543 , - 2430 , - 13 , - 1844 , - 371 , - 3146 , - 2617 , - 2560 , - 2975 , - 86 , - 1445 , - 3276 , - 1803 , - 802 , - 273 , - 216 , - 631 , - 1518 , - 2877 , - 932 , - 3235 , - 2234 , - 1705 , - 1648 , - 2063 , - 2950 , - 533 , - 2364 , - 891 , - 3666 , - 3137 , - 3080 , - 3495 , - 606 , - 1965 , - 20 , - 2323 , - 1322 , - 793 , - 736 , - 1151 , - 2038 , - 3397 , - 1452 , - 3755 , - 2754 , - 2225 , - 2168 , - 2583 , - 3470 , - 1053 , - 2884 , - 1411 , - 410 , - 3657 , - 3600 , - 239 , - 1126 , - 2485 , - 540 , - 2843 , - 1842 , - 1313 , - 1256 , - 1671 , - 2558 , - 141 , - 1972 , - 499 , - 3274 , - 2745 , - 2688 , - 3103 , - 214 , - 1573 , - 3404 , - 1931 , - 930 , - 401 , - 344 , - 759 , - 1646 , - 3005 , - 1060 , - 3363 , - 2362 , - 1833 , - 1776 , - 2191 , - 3078 , - 661 , - 2492 , - 1019 , - 18 , - 3265 , - 3208 , - 3623 , - 734 , - 2093 , - 148 , - 2451 , - 1450 , - 921 , - 864 , - 1279 , - 2166 , - 3525 , - 1580 , - 107 , - 2882 , - 2353 , - 2296 , - 2711 , - 3598 , - 1181 , - 3012 , - 1539 , - 538 , - 9 , - 3728 , - 367 , - 1254 , - 2613 , - 668 , - 2971 , - 1970 , - 1441 , - 1384 , - 1799 , - 2686 , - 269 , - 2100 , - 627 , - 3402 , - 2873 , - 2816 , - 3231 , - 342 , - 1701 , - 3532 , - 2059 , - 1058 , - 529 , - 472 , - 887 , - 1774 , - 3133 , - 1188 , - 3491 , - 2490 , - 1961 , - 1904 , - 2319 , - 3206 , - 789 , - 2620 , - 1147 , - 146 , - 3393 , - 3336 , - 3751 , - 862 , - 2221 , - 276 , - 2579 , - 1578 , - 1049 , - 992 , - 1407 , - 2294 , - 3653 , - 1708 , - 235 , - 3010 , - 2481 , - 2424 , - 2839 , - 3726 , - 1309 , - 3140 , - 1667 , - 666 , - 137 , - 80 , - 495 , - 1382 , - 2741 , - 796 , - 3099 , - 2098 , - 1569 , - 1512 , - 1927 , - 2814 , - 397 , - 2228 , - 755 , - 3530 , - 3001 , - 2944 , - 3359 , - 470 , - 1829 , - 3660 , - 2187 , - 1186 , - 657 , - 600 , - 1015 , - 1902 , - 3261 , - 1316 , - 3619 , - 2618 , - 2089 , - 2032 , - 2447 , - 3334 , - 917 , - 2748 , - 1275 , - 274 , - 3521 , - 3464 , - 103 , - 990 , - 2349 , - 404 , - 2707 , - 1706 , - 1177 , - 1120 , - 1535 , - 2422 , - 5 , - 1836 , - 363 , - 3138 , - 2609 , - 2552 , - 2967 , - 78 , - 1437 , - 3268 , - 1795 , - 794 , - 265 , - 208 , - 623 , - 1510 , - 2869 , - 924 , - 3227 , - 2226 , - 1697 , - 1640 , - 2055 , - 2942 , - 525 , - 2356 , - 883 , - 3658 , - 3129 , - 3072 , - 3487 , - 598 , - 1957 , - 12 , - 2315 , - 1314 , - 785 , - 728 , - 1143 , - 2030 , - 3389 , - 1444 , - 3747 , - 2746 , - 2217 , - 2160 , - 2575 , - 3462 , - 1045 , - 2876 , - 1403 , - 402 , - 3649 , - 3592 , - 231 , - 1118 , - 2477 , - 532 , - 2835 , - 1834 , - 1305 , - 1248 , - 1663 , - 2550 , - 133 , - 1964 , - 491 , - 3266 , - 2737 , - 2680 , - 3095 , - 206 , - 1565 , - 3396 , - 1923 , - 922 , - 393 , - 336 , - 751 , - 1638 , - 2997 , - 1052 , - 3355 , - 2354 , - 1825 , - 1768 , - 2183 , - 3070 , - 653 , - 2484 , - 1011 , - 10 , - 3257 , - 3200 , - 3615 , - 726 , - 2085 , - 140 , - 2443 , - 1442 , - 913 , - 856 , - 1271 , - 2158 , - 3517 , - 1572 , - 99 , - 2874 , - 2345 , - 2288 , - 2703 , - 3590 , - 1173 , - 3004 , - 1531 , - 530 , - 1 , - 3720 , - 359 , - 1246 , - 2605 , - 660 , - 2963 , - 1962 , - 1433 , - 1376 , - 1791 , - 2678 , - 261 , - 2092 , - 619 , - 3394 , - 2865 , - 2808 , - 3223 , - 334 , - 1693 , - 3524 , - 2051 , - 1050 , - 521 , - 464 , - 879 , - 1766 , - 3125 , - 1180 , - 3483 , - 2482 , - 1953 , - 1896 , - 2311 , - 3198 , - 781 , - 2612 , - 1139 , - 138 , - 3385 , - 3328 , - 3743 , - 854 , - 2213 , - 268 , - 2571 , - 1570 , - 1041 , - 984 , - 1399 , - 2286 , - 3645 , - 1700 , - 227 , - 3002 , - 2473 , - 2416 , - 2831 , - 3718 , - 1301 , - 3132 , - 1659 , - 658 , - 129 , - 72 , - 487 , - 1374 , - 2733 , - 788 , - 3091 , - 2090 , - 1561 , - 1504 , - 1919 , - 2806 , - 389 , - 2220 , - 747 , - 3522 , - 2993 , - 2936 , - 3351 , - 462 , - 1821 , - 3652 , - 2179 , - 1178 , - 649 , - 592 , - 1007 , - 1894 , - 3253 , - 1308 , - 3611 , - 2610 , - 2081 , - 2024 , - 2439 , - 3326 , - 909 , - 2740 , - 1267 , - 266 , - 3513 , - 3456 , - 95 , - 982 , - 2341 , - 396 , - 2699 , - 1698 , - 1169 , - 1112 , - 1527 , - 2414 , - 3773 , - 1828 , - 355 , - 3130 , - 2601 , - 2544 , - 2959 , - 70 , - 1429 , - 3260 , - 1787 , - 786 , - 257 , - 200 , - 615 , - 1502 , - 2861 , - 916 , - 3219 , - 2218 , - 1689 , - 1632 , - 2047 , - 2934 , - 517 , - 2348 , - 875 , - 3650 , - 3121 , - 3064 , - 3479 , - 590 , - 1949 , - 4 , - 2307 , - 1306 , - 777 , - 720 , - 1135 , - 2022 , - 3381 , - 1436 , - 3739 , - 2738 , - 2209 , - 2152 , - 2567 , - 3454 , - 1037 , - 2868 , - 1395 , - 394 , - 3641 , - 3584 , - 223 , - 1110 , - 2469 , - 524 , - 2827 , - 1826 , - 1297 , - 1240 , - 1655 , - 2542 , - 125 , - 1956 , - 483 , - 3258 , - 2729 , - 2672 , - 3087 , - 198 , - 1557 , - 3388 , - 1915 , - 914 , - 385 , - 328 , - 743 , - 1630 , - 2989 , - 1044 , - 3347 , - 2346 , - 1817 , - 1760 , - 2175 , - 3062 , - 645 , - 2476 , - 1003 , - 2 , - 3249 , - 3192 , - 3607 , - 718 , - 2077 , - 132 , - 2435 , - 1434 , - 905 , - 848 , - 1263 , - 2150 , - 3509 , - 1564 , - 91 , - 2866 , - 2337 , - 2280 , - 2695 , - 3582 , - 1165 , - 2996 , - 1523 , - 522 , - 3769 , - 3712 , - 351 , - 1238 , - 2597 , - 652 , - 2955 , - 1954 , - 1425 , - 1368 , - 1783 , - 2670 , - 253 , - 2084 , - 611 , - 3386 , - 2857 , - 2800 , - 3215 , - 326 , - 1685 , - 3516 , - 2043 , - 1042 , - 513 , - 456 , - 871 , - 1758 , - 3117 , - 1172 , - 3475 , - 2474 , - 1945 , - 1888 , - 2303 , - 3190 , - 773 , - 2604 , - 1131 , - 130 , - 3377 , - 3320 , - 3735 , - 846 , - 2205 , - 260 , - 2563 , - 1562 , - 1033 , - 976 , - 1391 , - 2278 , - 3637 , - 1692 , - 219 , - 2994 , - 2465 , - 2408 , - 2823 , - 3710 , - 1293 , - 3124 , - 1651 , - 650 , - 121 , - 64 , - 479 , - 1366 , - 2725 , - 780 , - 3083 , - 2082 , - 1553 , - 1496 , - 1911 , - 2798 , - 381 , - 2212 , - 739 , - 3514 , - 2985 , - 2928 , - 3343 , - 454 , - 1813 , - 3644 , - 2171 , - 1170 , - 641 , - 584 , - 999 , - 1886 , - 3245 , - 1300 , - 3603 , - 2602 , - 2073 , - 2016 , - 2431 , - 3318 , - 901 , - 2732 , - 1259 , - 258 , - 3505 , - 3448 , - 87 , - 974 , - 2333 , - 388 , - 2691 , - 1690 , - 1161 , - 1104 , - 1519 , - 2406 , - 3765 , - 1820 , - 347 , - 3122 , - 2593 , - 2536 , - 2951 , - 62 , - 1421 , - 3252 , - 1779 , - 778 , - 249 , - 192 , - 607 , - 1494 , - 2853 , - 908 , - 3211 , - 2210 , - 1681 , - 1624 , - 2039 , - 2926 , - 509 , - 2340 , - 867 , - 3642 , - 3113 , - 3056 , - 3471 , - 582 , - 1941 , - 3772 , - 2299 , - 1298 , - 769 , - 712 , - 1127 , - 2014 , - 3373 , - 1428 , - 3731 , - 2730 , - 2201 , - 2144 , - 2559 , - 3446 , - 1029 , - 2860 , - 1387 , - 386 , - 3633 , - 3576 , - 215 , - 1102 , - 2461 , - 516 , - 2819 , - 1818 , - 1289 , - 1232 , - 1647 , - 2534 , - 117 , - 1948 , - 475 , - 3250 , - 2721 , - 2664 , - 3079 , - 190 , - 1549 , - 3380 , - 1907 , - 906 , - 377 , - 320 , - 735 , - 1622 , - 2981 , - 1036 , - 3339 , - 2338 , - 1809 , - 1752 , - 2167 , - 3054 , - 637 , - 2468 , - 995 , - 3770 , - 3241 , - 3184 , - 3599 , - 710 , - 2069 , - 124 , - 2427 , - 1426 , - 897 , - 840 , - 1255 , - 2142 , - 3501 , - 1556 , - 83 , - 2858 , - 2329 , - 2272 , - 2687 , - 3574 , - 1157 , - 2988 , - 1515 , - 514 , - 3761 , - 3704 , - 343 , - 1230 , - 2589 , - 644 , - 2947 , - 1946 , - 1417 , - 1360 , - 1775 , - 2662 , - 245 , - 2076 , - 603 , - 3378 , - 2849 , - 2792 , - 3207 , - 318 , - 1677 , - 3508 , - 2035 , - 1034 , - 505 , - 448 , - 863 , - 1750 , - 3109 , - 1164 , - 3467 , - 2466 , - 1937 , - 1880 , - 2295 , - 3182 , - 765 , - 2596 , - 1123 , - 122 , - 3369 , - 3312 , - 3727 , - 838 , - 2197 , - 252 , - 2555 , - 1554 , - 1025 , - 968 , - 1383 , - 2270 , - 3629 , - 1684 , - 211 , - 2986 , - 2457 , - 2400 , - 2815 , - 3702 , - 1285 , - 3116 , - 1643 , - 642 , - 113 , - 56 , - 471 , - 1358 , - 2717 , - 772 , - 3075 , - 2074 , - 1545 , - 1488 , - 1903 , - 2790 , - 373 , - 2204 , - 731 , - 3506 , - 2977 , - 2920 , - 3335 , - 446 , - 1805 , - 3636 , - 2163 , - 1162 , - 633 , - 576 , - 991 , - 1878 , - 3237 , - 1292 , - 3595 , - 2594 , - 2065 , - 2008 , - 2423 , - 3310 , - 893 , - 2724 , - 1251 , - 250 , - 3497 , - 3440 , - 79 , - 966 , - 2325 , - 380 , - 2683 , - 1682 , - 1153 , - 1096 , - 1511 , - 2398 , - 3757 , - 1812 , - 339 , - 3114 , - 2585 , - 2528 , - 2943 , - 54 , - 1413 , - 3244 , - 1771 , - 770 , - 241 , - 184 , - 599 , - 1486 , - 2845 , - 900 , - 3203 , - 2202 , - 1673 , - 1616 , - 2031 , - 2918 , - 501 , - 2332 , - 859 , - 3634 , - 3105 , - 3048 , - 3463 , - 574 , - 1933 , - 3764 , - 2291 , - 1290 , - 761 , - 704 , - 1119 , - 2006 , - 3365 , - 1420 , - 3723 , - 2722 , - 2193 , - 2136 , - 2551 , - 3438 , - 1021 , - 2852 , - 1379 , - 378 , - 3625 , - 3568 , - 207 , - 1094 , - 2453 , - 508 , - 2811 , - 1810 , - 1281 , - 1224 , - 1639 , - 2526 , - 109 , - 1940 , - 467 , - 3242 , - 2713 , - 2656 , - 3071 , - 182 , - 1541 , - 3372 , - 1899 , - 898 , - 369 , - 312 , - 727 , - 1614 , - 2973 , - 1028 , - 3331 , - 2330 , - 1801 , - 1744 , - 2159 , - 3046 , - 629 , - 2460 , - 987 , - 3762 , - 3233 , - 3176 , - 3591 , - 702 , - 2061 , - 116 , - 2419 , - 1418 , - 889 , - 832 , - 1247 , - 2134 , - 3493 , - 1548 , - 75 , - 2850 , - 2321 , - 2264 , - 2679 , - 3566 , - 1149 , - 2980 , - 1507 , - 506 , - 3753 , - 3696 , - 335 , - 1222 , - 2581 , - 636 , - 2939 , - 1938 , - 1409 , - 1352 , - 1767 , - 2654 , - 237 , - 2068 , - 595 , - 3370 , - 2841 , - 2784 , - 3199 , - 310 , - 1669 , - 3500 , - 2027 , - 1026 , - 497 , - 440 , - 855 , - 1742 , - 3101 , - 1156 , - 3459 , - 2458 , - 1929 , - 1872 , - 2287 , - 3174 , - 757 , - 2588 , - 1115 , - 114 , - 3361 , - 3304 , - 3719 , - 830 , - 2189 , - 244 , - 2547 , - 1546 , - 1017 , - 960 , - 1375 , - 2262 , - 3621 , - 1676 , - 203 , - 2978 , - 2449 , - 2392 , - 2807 , - 3694 , - 1277 , - 3108 , - 1635 , - 634 , - 105 , - 48 , - 463 , - 1350 , - 2709 , - 764 , - 3067 , - 2066 , - 1537 , - 1480 , - 1895 , - 2782 , - 365 , - 2196 , - 723 , - 3498 , - 2969 , - 2912 , - 3327 , - 438 , - 1797 , - 3628 , - 2155 , - 1154 , - 625 , - 568 , - 983 , - 1870 , - 3229 , - 1284 , - 3587 , - 2586 , - 2057 , - 2000 , - 2415 , - 3302 , - 885 , - 2716 , - 1243 , - 242 , - 3489 , - 3432 , - 71 , - 958 , - 2317 , - 372 , - 2675 , - 1674 , - 1145 , - 1088 , - 1503 , - 2390 , - 3749 , - 1804 , - 331 , - 3106 , - 2577 , - 2520 , - 2935 , - 46 , - 1405 , - 3236 , - 1763 , - 762 , - 233 , - 176 , - 591 , - 1478 , - 2837 , - 892 , - 3195 , - 2194 , - 1665 , - 1608 , - 2023 , - 2910 , - 493 , - 2324 , - 851 , - 3626 , - 3097 , - 3040 , - 3455 , - 566 , - 1925 , - 3756 , - 2283 , - 1282 , - 753 , - 696 , - 1111 , - 1998 , - 3357 , - 1412 , - 3715 , - 2714 , - 2185 , - 2128 , - 2543 , - 3430 , - 1013 , - 2844 , - 1371 , - 370 , - 3617 , - 3560 , - 199 , - 1086 , - 2445 , - 500 , - 2803 , - 1802 , - 1273 , - 1216 , - 1631 , - 2518 , - 101 , - 1932 , - 459 , - 3234 , - 2705 , - 2648 , - 3063 , - 174 , - 1533 , - 3364 , - 1891 , - 890 , - 361 , - 304 , - 719 , - 1606 , - 2965 , - 1020 , - 3323 , - 2322 , - 1793 , - 1736 , - 2151 , - 3038 , - 621 , - 2452 , - 979 , - 3754 , - 3225 , - 3168 , - 3583 , - 694 , - 2053 , - 108 , - 2411 , - 1410 , - 881 , - 824 , - 1239 , - 2126 , - 3485 , - 1540 , - 67 , - 2842 , - 2313 , - 2256 , - 2671 , - 3558 , - 1141 , - 2972 , - 1499 , - 498 , - 3745 , - 3688 , - 327 , - 1214 , - 2573 , - 628 , - 2931 , - 1930 , - 1401 , - 1344 , - 1759 , - 2646 , - 229 , - 2060 , - 587 , - 3362 , - 2833 , - 2776 , - 3191 , - 302 , - 1661 , - 3492 , - 2019 , - 1018 , - 489 , - 432 , - 847 , - 1734 , - 3093 , - 1148 , - 3451 , - 2450 , - 1921 , - 1864 , - 2279 , - 3166 , - 749 , - 2580 , - 1107 , - 106 , - 3353 , - 3296 , - 3711 , - 822 , - 2181 , - 236 , - 2539 , - 1538 , - 1009 , - 952 , - 1367 , - 2254 , - 3613 , - 1668 , - 195 , - 2970 , - 2441 , - 2384 , - 2799 , - 3686 , - 1269 , - 3100 , - 1627 , - 626 , - 97 , - 40 , - 455 , - 1342 , - 2701 , - 756 , - 3059 , - 2058 , - 1529 , - 1472 , - 1887 , - 2774 , - 357 , - 2188 , - 715 , - 3490 , - 2961 , - 2904 , - 3319 , - 430 , - 1789 , - 3620 , - 2147 , - 1146 , - 617 , - 560 , - 975 , - 1862 , - 3221 , - 1276 , - 3579 , - 2578 , - 2049 , - 1992 , - 2407 , - 3294 , - 877 , - 2708 , - 1235 , - 234 , - 3481 , - 3424 , - 63 , - 950 , - 2309 , - 364 , - 2667 , - 1666 , - 1137 , - 1080 , - 1495 , - 2382 , - 3741 , - 1796 , - 323 , - 3098 , - 2569 , - 2512 , - 2927 , - 38 , - 1397 , - 3228 , - 1755 , - 754 , - 225 , - 168 , - 583 , - 1470 , - 2829 , - 884 , - 3187 , - 2186 , - 1657 , - 1600 , - 2015 , - 2902 , - 485 , - 2316 , - 843 , - 3618 , - 3089 , - 3032 , - 3447 , - 558 , - 1917 , - 3748 , - 2275 , - 1274 , - 745 , - 688 , - 1103 , - 1990 , - 3349 , - 1404 , - 3707 , - 2706 , - 2177 , - 2120 , - 2535 , - 3422 , - 1005 , - 2836 , - 1363 , - 362 , - 3609 , - 3552 , - 191 , - 1078 , - 2437 , - 492 , - 2795 , - 1794 , - 1265 , - 1208 , - 1623 , - 2510 , - 93 , - 1924 , - 451 , - 3226 , - 2697 , - 2640 , - 3055 , - 166 , - 1525 , - 3356 , - 1883 , - 882 , - 353 , - 296 , - 711 , - 1598 , - 2957 , - 1012 , - 3315 , - 2314 , - 1785 , - 1728 , - 2143 , - 3030 , - 613 , - 2444 , - 971 , - 3746 , - 3217 , - 3160 , - 3575 , - 686 , - 2045 , - 100 , - 2403 , - 1402 , - 873 , - 816 , - 1231 , - 2118 , - 3477 , - 1532 , - 59 , - 2834 , - 2305 , - 2248 , - 2663 , - 3550 , - 1133 , - 2964 , - 1491 , - 490 , - 3737 , - 3680 , - 319 , - 1206 , - 2565 , - 620 , - 2923 , - 1922 , - 1393 , - 1336 , - 1751 , - 2638 , - 221 , - 2052 , - 579 , - 3354 , - 2825 , - 2768 , - 3183 , - 294 , - 1653 , - 3484 , - 2011 , - 1010 , - 481 , - 424 , - 839 , - 1726 , - 3085 , - 1140 , - 3443 , - 2442 , - 1913 , - 1856 , - 2271 , - 3158 , - 741 , - 2572 , - 1099 , - 98 , - 3345 , - 3288 , - 3703 , - 814 , - 2173 , - 228 , - 2531 , - 1530 , - 1001 , - 944 , - 1359 , - 2246 , - 3605 , - 1660 , - 187 , - 2962 , - 2433 , - 2376 , - 2791 , - 3678 , - 1261 , - 3092 , - 1619 , - 618 , - 89 , - 32 , - 447 , - 1334 , - 2693 , - 748 , - 3051 , - 2050 , - 1521 , - 1464 , - 1879 , - 2766 , - 349 , - 2180 , - 707 , - 3482 , - 2953 , - 2896 , - 3311 , - 422 , - 1781 , - 3612 , - 2139 , - 1138 , - 609 , - 552 , - 967 , - 1854 , - 3213 , - 1268 , - 3571 , - 2570 , - 2041 , - 1984 , - 2399 , - 3286 , - 869 , - 2700 , - 1227 , - 226 , - 3473 , - 3416 , - 55 , - 942 , - 2301 , - 356 , - 2659 , - 1658 , - 1129 , - 1072 , - 1487 , - 2374 , - 3733 , - 1788 , - 315 , - 3090 , - 2561 , - 2504 , - 2919 , - 30 , - 1389 , - 3220 , - 1747 , - 746 , - 217 , - 160 , - 575 , - 1462 , - 2821 , - 876 , - 3179 , - 2178 , - 1649 , - 1592 , - 2007 , - 2894 , - 477 , - 2308 , - 835 , - 3610 , - 3081 , - 3024 , - 3439 , - 550 , - 1909 , - 3740 , - 2267 , - 1266 , - 737 , - 680 , - 1095 , - 1982 , - 3341 , - 1396 , - 3699 , - 2698 , - 2169 , - 2112 , - 2527 , - 3414 , - 997 , - 2828 , - 1355 , - 354 , - 3601 , - 3544 , - 183 , - 1070 , - 2429 , - 484 , - 2787 , - 1786 , - 1257 , - 1200 , - 1615 , - 2502 , - 85 , - 1916 , - 443 , - 3218 , - 2689 , - 2632 , - 3047 , - 158 , - 1517 , - 3348 , - 1875 , - 874 , - 345 , - 288 , - 703 , - 1590 , - 2949 , - 1004 , - 3307 , - 2306 , - 1777 , - 1720 , - 2135 , - 3022 , - 605 , - 2436 , - 963 , - 3738 , - 3209 , - 3152 , - 3567 , - 678 , - 2037 , - 92 , - 2395 , - 1394 , - 865 , - 808 , - 1223 , - 2110 , - 3469 , - 1524 , - 51 , - 2826 , - 2297 , - 2240 , - 2655 , - 3542 , - 1125 , - 2956 , - 1483 , - 482 , - 3729 , - 3672 , - 311 , - 1198 , - 2557 , - 612 , - 2915 , - 1914 , - 1385 , - 1328 , - 1743 , - 2630 , - 213 , - 2044 , - 571 , - 3346 , - 2817 , - 2760 , - 3175 , - 286 , - 1645 , - 3476 , - 2003 , - 1002 , - 473 , - 416 , - 831 , - 1718 , - 3077 , - 1132 , - 3435 , - 2434 , - 1905 , - 1848 , - 2263 , - 3150 , - 733 , - 2564 , - 1091 , - 90 , - 3337 , - 3280 , - 3695 , - 806 , - 2165 , - 220 , - 2523 , - 1522 , - 993 , - 936 , - 1351 , - 2238 , - 3597 , - 1652 , - 179 , - 2954 , - 2425 , - 2368 , - 2783 , - 3670 , - 1253 , - 3084 , - 1611 , - 610 , - 81 , - 24 , - 439 , - 1326 , - 2685 , - 740 , - 3043 , - 2042 , - 1513 , - 1456 , - 1871 , - 2758 , - 341 , - 2172 , - 699 , - 3474 , - 2945 , - 2888 , - 3303 , - 414 , - 1773 , - 3604 , - 2131 , - 1130 , - 601 , - 544 , - 959 , - 1846 , - 3205 , - 1260 , - 3563 , - 2562 , - 2033 , - 1976 , - 2391 , - 3278 , - 861 , - 2692 , - 1219 , - 218 , - 3465 , - 3408 , - 47 , - 934 , - 2293 , - 348 , - 2651 , - 1650 , - 1121 , - 1064 , - 1479 , - 2366 , - 3725 , - 1780 , - 307 , - 3082 , - 2553 , - 2496 , - 2911 , - 22 , - 1381 , - 3212 , - 1739 , - 738 , - 209 , - 152 , - 567 , - 1454 , - 2813 , - 868 , - 3171 , - 2170 , - 1641 , - 1584 , - 1999 , - 2886 , - 469 , - 2300 , - 827 , - 3602 , - 3073 , - 3016 , - 3431 , - 542 , - 1901 , - 3732 , - 2259 , - 1258 , - 729 , - 672 , - 1087 , - 1974 , - 3333 , - 1388 , - 3691 , - 2690 , - 2161 , - 2104 , - 2519 , - 3406 , - 989 , - 2820 , - 1347 , - 346 , - 3593 , - 3536 , - 175 , - 1062 , - 2421 , - 476 , - 2779 , - 1778 , - 1249 , - 1192 , - 1607 , - 2494 , - 77 , - 1908 , - 435 , - 3210 , - 2681 , - 2624 , - 3039 , - 150 , - 1509 , - 3340 , - 1867 , - 866 , - 337 , - 280 , - 695 , - 1582 , - 2941 , - 996 , - 3299 , - 2298 , - 1769 , - 1712 , - 2127 , - 3014 , - 597 , - 2428 , - 955 , - 3730 , - 3201 , - 3144 , - 3559 , - 670 , - 2029 , - 84 , - 2387 , - 1386 , - 857 , - 800 , - 1215 , - 2102 , - 3461 , - 1516 , - 43 , - 2818 , - 2289 , - 2232 , - 2647 , - 3534 , - 1117 , - 2948 , - 1475 , - 474 , - 3721 , - 3664 , - 303 , - 1190 , - 2549 , - 604 , - 2907 , - 1906 , - 1377 , - 1320 , - 1735 , - 2622 , - 205 , - 2036 , - 563 , - 3338 , - 2809 , - 2752 , - 3167 , - 278 , - 1637 , - 3468 , - 1995 , - 994 , - 465 , - 408 , - 823 , - 1710 , - 3069 , - 1124 , - 3427 , - 2426 , - 1897 , - 1840 , - 2255 , - 3142 , - 725 , - 2556 , - 1083 , - 82 , - 3329 , - 3272 , - 3687 , - 798 , - 2157 , - 212 , - 2515 , - 1514 , - 985 , - 928 , - 1343 , - 2230 , - 3589 , - 1644 , - 171 , - 2946 , - 2417 , - 2360 , - 2775 , - 3662 , - 1245 , - 3076 , - 1603 , - 602 , - 73 , - 16 , - 431 , - 1318 , - 2677 , - 732 , - 3035 , - 2034 , - 1505 , - 1448 , - 1863 , - 2750 , - 333 , - 2164 , - 691 , - 3466 , - 2937 , - 2880 , - 3295 , - 406 , - 1765 , - 3596 , - 2123 , - 1122 , - 593 , - 536 , - 951 , - 1838 , - 3197 , - 1252 , - 3555 , - 2554 , - 2025 , - 1968 , - 2383 , - 3270 , - 853 , - 2684 , - 1211 , - 210 , - 3457 , - 3400 , - 39 , - 926 , - 2285 , - 340 , - 2643 , - 1642 , - 1113 , - 1056 , - 1471 , - 2358 , - 3717 , - 1772 , - 299 , - 3074 , - 2545 , - 2488 , - 2903 , - 14 , - 1373 , - 3204 , - 1731 , - 730 , - 201 , - 144 , - 559 , - 1446 , - 2805 , - 860 , - 3163 , - 2162 , - 1633 , - 1576 , - 1991 , - 2878 , - 461 , - 2292 , - 819 , - 3594 , - 3065 , - 3008 , - 3423 , - 534 , - 1893 , - 3724 , - 2251 , - 1250 , - 721 , - 664 , - 1079 , - 1966 , - 3325 , - 1380 , - 3683 , - 2682 , - 2153 , - 2096 , - 2511 , - 3398 , - 981 , - 2812 , - 1339 , - 338 , - 3585 , - 3528 , - 167 , - 1054 , - 2413 , - 468 , - 2771 , - 1770 , - 1241 , - 1184 , - 1599 , - 2486 , - 69 , - 1900 , - 427 , - 3202 , - 2673 , - 2616 , - 3031 , - 142 , - 1501 , - 3332 , - 1859 , - 858 , - 329 , - 272 , - 687 , - 1574 , - 2933 , - 988 , - 3291 , - 2290 , - 1761 , - 1704 , - 2119 , - 3006 , - 589 , - 2420 , - 947 , - 3722 , - 3193 , - 3136 , - 3551 , - 662 , - 2021 , - 76 , - 2379 , - 1378 , - 849 , - 792 , - 1207 , - 2094 , - 3453 , - 1508 , - 35 , - 2810 , - 2281 , - 2224 , - 2639 , - 3526 , - 1109 , - 2940 , - 1467 , - 466 , - 3713 , - 3656 , - 295 , - 1182 , - 2541 , - 596 , - 2899 , - 1898 , - 1369 , - 1312 , - 1727 , - 2614 , - 197 , - 2028 , - 555 , - 3330 , - 2801 , - 2744 , - 3159 , - 270 , - 1629 , - 3460 , - 1987 , - 986 , - 457 , - 400 , - 815 , - 1702 , - 3061 , - 1116 , - 3419 , - 2418 , - 1889 , - 1832 , - 2247 , - 3134 , - 717 , - 2548 , - 1075 , - 74 , - 3321 , - 3264 , - 3679 , - 790 , - 2149 , - 204 , - 2507 , - 1506 , - 977 , - 920 , - 1335 , - 2222 , - 3581 , - 1636 , - 163 , - 2938 , - 2409 , - 2352 , - 2767 , - 3654 , - 1237 , - 3068 , - 1595 , - 594 , - 65 , - 8 , - 423 , - 1310 , - 2669 , - 724 , - 3027 , - 2026 , - 1497 , - 1440 , - 1855 , - 2742 , - 325 , - 2156 , - 683 , - 3458 , - 2929 , - 2872 , - 3287 , - 398 , - 1757 , - 3588 , - 2115 , - 1114 , - 585 , - 528 , - 943 , - 1830 , - 3189 , - 1244 , - 3547 , - 2546 , - 2017 , - 1960 , - 2375 , - 3262 , - 845 , - 2676 , - 1203 , - 202 , - 3449 , - 3392 , - 31 , - 918 , - 2277 , - 332 , - 2635 , - 1634 , - 1105 , - 1048 , - 1463 , - 2350 , - 3709 , - 1764 , - 291 , - 3066 , - 2537 , - 2480 , - 2895 , - 6 , - 1365 , - 3196 , - 1723 , - 722 , - 193 , - 136 , - 551 , - 1438 , - 2797 , - 852 , - 3155 , - 2154 , - 1625 , - 1568 , - 1983 , - 2870 , - 453 , - 2284 , - 811 , - 3586 , - 3057 , - 3000 , - 3415 , - 526 , - 1885 , - 3716 , - 2243 , - 1242 , - 713 , - 656 , - 1071 , - 1958 , - 3317 , - 1372 , - 3675 , - 2674 , - 2145 , - 2088 , - 2503 , - 3390 , - 973 , - 2804 , - 1331 , - 330 , - 3577 , - 3520 , - 159 , - 1046 , - 2405 , - 460 , - 2763 , - 1762 , - 1233 , - 1176 , - 1591 , - 2478 , - 61 , - 1892 , - 419 , - 3194 , - 2665 , - 2608 , - 3023 , - 134 , - 1493 , - 3324 , - 1851 , - 850 , - 321 , - 264 , - 679 , - 1566 , - 2925 , - 980 , - 3283 , - 2282 , - 1753 , - 1696 , - 2111 , - 2998 , - 581 , - 2412 , - 939 , - 3714 , - 3185 , - 3128 , - 3543 , - 654 , - 2013 , - 68 , - 2371 , - 1370 , - 841 , - 784 , - 1199 , - 2086 , - 3445 , - 1500 , - 27 , - 2802 , - 2273 , - 2216 , - 2631 , - 3518 , - 1101 , - 2932 , - 1459 , - 458 , - 3705 , - 3648 , - 287 , - 1174 , - 2533 , - 588 , - 2891 , - 1890 , - 1361 , - 1304 , - 1719 , - 2606 , - 189 , - 2020 , - 547 , - 3322 , - 2793 , - 2736 , - 3151 , - 262 , - 1621 , - 3452 , - 1979 , - 978 , - 449 , - 392 , - 807 , - 1694 , - 3053 , - 1108 , - 3411 , - 2410 , - 1881 , - 1824 , - 2239 , - 3126 , - 709 , - 2540 , - 1067 , - 66 , - 3313 , - 3256 , - 3671 , - 782 , - 2141 , - 196 , - 2499 , - 1498 , - 969 , - 912 , - 1327 , - 2214 , - 3573 , - 1628 , - 155 , - 2930 , - 2401 , - 2344 , - 2759 , - 3646 , - 1229 , - 3060 , - 1587 , - 586 , - 57 , - 0 , - 451 , - 1142 , - 2073 , - 3244 , - 815 , - 2466 , - 517 , - 2648 , - 1179 , - 3790 , - 2801 , - 2052 , - 1543 , - 1274 , - 1245 , - 1456 , - 1907 , - 2598 , - 3529 , - 860 , - 2271 , - 82 , - 1973 , - 264 , - 2635 , - 1406 , - 417 , - 3508 , - 2999 , - 2730 , - 2701 , - 2912 , - 3363 , - 214 , - 1145 , - 2316 , - 3727 , - 1538 , - 3429 , - 1720 , - 251 , - 2862 , - 1873 , - 1124 , - 615 , - 346 , - 317 , - 528 , - 979 , - 1670 , - 2601 , - 3772 , - 1343 , - 2994 , - 1045 , - 3176 , - 1707 , - 478 , - 3329 , - 2580 , - 2071 , - 1802 , - 1773 , - 1984 , - 2435 , - 3126 , - 217 , - 1388 , - 2799 , - 610 , - 2501 , - 792 , - 3163 , - 1934 , - 945 , - 196 , - 3527 , - 3258 , - 3229 , - 3440 , - 51 , - 742 , - 1673 , - 2844 , - 415 , - 2066 , - 117 , - 2248 , - 779 , - 3390 , - 2401 , - 1652 , - 1143 , - 874 , - 845 , - 1056 , - 1507 , - 2198 , - 3129 , - 460 , - 1871 , - 3522 , - 1573 , - 3704 , - 2235 , - 1006 , - 17 , - 3108 , - 2599 , - 2330 , - 2301 , - 2512 , - 2963 , - 3654 , - 745 , - 1916 , - 3327 , - 1138 , - 3029 , - 1320 , - 3691 , - 2462 , - 1473 , - 724 , - 215 , - 3786 , - 3757 , - 128 , - 579 , - 1270 , - 2201 , - 3372 , - 943 , - 2594 , - 645 , - 2776 , - 1307 , - 78 , - 2929 , - 2180 , - 1671 , - 1402 , - 1373 , - 1584 , - 2035 , - 2726 , - 3657 , - 988 , - 2399 , - 210 , - 2101 , - 392 , - 2763 , - 1534 , - 545 , - 3636 , - 3127 , - 2858 , - 2829 , - 3040 , - 3491 , - 342 , - 1273 , - 2444 , - 15 , - 1666 , - 3557 , - 1848 , - 379 , - 2990 , - 2001 , - 1252 , - 743 , - 474 , - 445 , - 656 , - 1107 , - 1798 , - 2729 , - 60 , - 1471 , - 3122 , - 1173 , - 3304 , - 1835 , - 606 , - 3457 , - 2708 , - 2199 , - 1930 , - 1901 , - 2112 , - 2563 , - 3254 , - 345 , - 1516 , - 2927 , - 738 , - 2629 , - 920 , - 3291 , - 2062 , - 1073 , - 324 , - 3655 , - 3386 , - 3357 , - 3568 , - 179 , - 870 , - 1801 , - 2972 , - 543 , - 2194 , - 245 , - 2376 , - 907 , - 3518 , - 2529 , - 1780 , - 1271 , - 1002 , - 973 , - 1184 , - 1635 , - 2326 , - 3257 , - 588 , - 1999 , - 3650 , - 1701 , - 3832 , - 2363 , - 1134 , - 145 , - 3236 , - 2727 , - 2458 , - 2429 , - 2640 , - 3091 , - 3782 , - 873 , - 2044 , - 3455 , - 1266 , - 3157 , - 1448 , - 3819 , - 2590 , - 1601 , - 852 , - 343 , - 74 , - 45 , - 256 , - 707 , - 1398 , - 2329 , - 3500 , - 1071 , - 2722 , - 773 , - 2904 , - 1435 , - 206 , - 3057 , - 2308 , - 1799 , - 1530 , - 1501 , - 1712 , - 2163 , - 2854 , - 3785 , - 1116 , - 2527 , - 338 , - 2229 , - 520 , - 2891 , - 1662 , - 673 , - 3764 , - 3255 , - 2986 , - 2957 , - 3168 , - 3619 , - 470 , - 1401 , - 2572 , - 143 , - 1794 , - 3685 , - 1976 , - 507 , - 3118 , - 2129 , - 1380 , - 871 , - 602 , - 573 , - 784 , - 1235 , - 1926 , - 2857 , - 188 , - 1599 , - 3250 , - 1301 , - 3432 , - 1963 , - 734 , - 3585 , - 2836 , - 2327 , - 2058 , - 2029 , - 2240 , - 2691 , - 3382 , - 473 , - 1644 , - 3055 , - 866 , - 2757 , - 1048 , - 3419 , - 2190 , - 1201 , - 452 , - 3783 , - 3514 , - 3485 , - 3696 , - 307 , - 998 , - 1929 , - 3100 , - 671 , - 2322 , - 373 , - 2504 , - 1035 , - 3646 , - 2657 , - 1908 , - 1399 , - 1130 , - 1101 , - 1312 , - 1763 , - 2454 , - 3385 , - 716 , - 2127 , - 3778 , - 1829 , - 120 , - 2491 , - 1262 , - 273 , - 3364 , - 2855 , - 2586 , - 2557 , - 2768 , - 3219 , - 70 , - 1001 , - 2172 , - 3583 , - 1394 , - 3285 , - 1576 , - 107 , - 2718 , - 1729 , - 980 , - 471 , - 202 , - 173 , - 384 , - 835 , - 1526 , - 2457 , - 3628 , - 1199 , - 2850 , - 901 , - 3032 , - 1563 , - 334 , - 3185 , - 2436 , - 1927 , - 1658 , - 1629 , - 1840 , - 2291 , - 2982 , - 73 , - 1244 , - 2655 , - 466 , - 2357 , - 648 , - 3019 , - 1790 , - 801 , - 52 , - 3383 , - 3114 , - 3085 , - 3296 , - 3747 , - 598 , - 1529 , - 2700 , - 271 , - 1922 , - 3813 , - 2104 , - 635 , - 3246 , - 2257 , - 1508 , - 999 , - 730 , - 701 , - 912 , - 1363 , - 2054 , - 2985 , - 316 , - 1727 , - 3378 , - 1429 , - 3560 , - 2091 , - 862 , - 3713 , - 2964 , - 2455 , - 2186 , - 2157 , - 2368 , - 2819 , - 3510 , - 601 , - 1772 , - 3183 , - 994 , - 2885 , - 1176 , - 3547 , - 2318 , - 1329 , - 580 , - 71 , - 3642 , - 3613 , - 3824 , - 435 , - 1126 , - 2057 , - 3228 , - 799 , - 2450 , - 501 , - 2632 , - 1163 , - 3774 , - 2785 , - 2036 , - 1527 , - 1258 , - 1229 , - 1440 , - 1891 , - 2582 , - 3513 , - 844 , - 2255 , - 66 , - 1957 , - 248 , - 2619 , - 1390 , - 401 , - 3492 , - 2983 , - 2714 , - 2685 , - 2896 , - 3347 , - 198 , - 1129 , - 2300 , - 3711 , - 1522 , - 3413 , - 1704 , - 235 , - 2846 , - 1857 , - 1108 , - 599 , - 330 , - 301 , - 512 , - 963 , - 1654 , - 2585 , - 3756 , - 1327 , - 2978 , - 1029 , - 3160 , - 1691 , - 462 , - 3313 , - 2564 , - 2055 , - 1786 , - 1757 , - 1968 , - 2419 , - 3110 , - 201 , - 1372 , - 2783 , - 594 , - 2485 , - 776 , - 3147 , - 1918 , - 929 , - 180 , - 3511 , - 3242 , - 3213 , - 3424 , - 35 , - 726 , - 1657 , - 2828 , - 399 , - 2050 , - 101 , - 2232 , - 763 , - 3374 , - 2385 , - 1636 , - 1127 , - 858 , - 829 , - 1040 , - 1491 , - 2182 , - 3113 , - 444 , - 1855 , - 3506 , - 1557 , - 3688 , - 2219 , - 990 , - 1 , - 3092 , - 2583 , - 2314 , - 2285 , - 2496 , - 2947 , - 3638 , - 729 , - 1900 , - 3311 , - 1122 , - 3013 , - 1304 , - 3675 , - 2446 , - 1457 , - 708 , - 199 , - 3770 , - 3741 , - 112 , - 563 , - 1254 , - 2185 , - 3356 , - 927 , - 2578 , - 629 , - 2760 , - 1291 , - 62 , - 2913 , - 2164 , - 1655 , - 1386 , - 1357 , - 1568 , - 2019 , - 2710 , - 3641 , - 972 , - 2383 , - 194 , - 2085 , - 376 , - 2747 , - 1518 , - 529 , - 3620 , - 3111 , - 2842 , - 2813 , - 3024 , - 3475 , - 326 , - 1257 , - 2428 , - 3839 , - 1650 , - 3541 , - 1832 , - 363 , - 2974 , - 1985 , - 1236 , - 727 , - 458 , - 429 , - 640 , - 1091 , - 1782 , - 2713 , - 44 , - 1455 , - 3106 , - 1157 , - 3288 , - 1819 , - 590 , - 3441 , - 2692 , - 2183 , - 1914 , - 1885 , - 2096 , - 2547 , - 3238 , - 329 , - 1500 , - 2911 , - 722 , - 2613 , - 904 , - 3275 , - 2046 , - 1057 , - 308 , - 3639 , - 3370 , - 3341 , - 3552 , - 163 , - 854 , - 1785 , - 2956 , - 527 , - 2178 , - 229 , - 2360 , - 891 , - 3502 , - 2513 , - 1764 , - 1255 , - 986 , - 957 , - 1168 , - 1619 , - 2310 , - 3241 , - 572 , - 1983 , - 3634 , - 1685 , - 3816 , - 2347 , - 1118 , - 129 , - 3220 , - 2711 , - 2442 , - 2413 , - 2624 , - 3075 , - 3766 , - 857 , - 2028 , - 3439 , - 1250 , - 3141 , - 1432 , - 3803 , - 2574 , - 1585 , - 836 , - 327 , - 58 , - 29 , - 240 , - 691 , - 1382 , - 2313 , - 3484 , - 1055 , - 2706 , - 757 , - 2888 , - 1419 , - 190 , - 3041 , - 2292 , - 1783 , - 1514 , - 1485 , - 1696 , - 2147 , - 2838 , - 3769 , - 1100 , - 2511 , - 322 , - 2213 , - 504 , - 2875 , - 1646 , - 657 , - 3748 , - 3239 , - 2970 , - 2941 , - 3152 , - 3603 , - 454 , - 1385 , - 2556 , - 127 , - 1778 , - 3669 , - 1960 , - 491 , - 3102 , - 2113 , - 1364 , - 855 , - 586 , - 557 , - 768 , - 1219 , - 1910 , - 2841 , - 172 , - 1583 , - 3234 , - 1285 , - 3416 , - 1947 , - 718 , - 3569 , - 2820 , - 2311 , - 2042 , - 2013 , - 2224 , - 2675 , - 3366 , - 457 , - 1628 , - 3039 , - 850 , - 2741 , - 1032 , - 3403 , - 2174 , - 1185 , - 436 , - 3767 , - 3498 , - 3469 , - 3680 , - 291 , - 982 , - 1913 , - 3084 , - 655 , - 2306 , - 357 , - 2488 , - 1019 , - 3630 , - 2641 , - 1892 , - 1383 , - 1114 , - 1085 , - 1296 , - 1747 , - 2438 , - 3369 , - 700 , - 2111 , - 3762 , - 1813 , - 104 , - 2475 , - 1246 , - 257 , - 3348 , - 2839 , - 2570 , - 2541 , - 2752 , - 3203 , - 54 , - 985 , - 2156 , - 3567 , - 1378 , - 3269 , - 1560 , - 91 , - 2702 , - 1713 , - 964 , - 455 , - 186 , - 157 , - 368 , - 819 , - 1510 , - 2441 , - 3612 , - 1183 , - 2834 , - 885 , - 3016 , - 1547 , - 318 , - 3169 , - 2420 , - 1911 , - 1642 , - 1613 , - 1824 , - 2275 , - 2966 , - 57 , - 1228 , - 2639 , - 450 , - 2341 , - 632 , - 3003 , - 1774 , - 785 , - 36 , - 3367 , - 3098 , - 3069 , - 3280 , - 3731 , - 582 , - 1513 , - 2684 , - 255 , - 1906 , - 3797 , - 2088 , - 619 , - 3230 , - 2241 , - 1492 , - 983 , - 714 , - 685 , - 896 , - 1347 , - 2038 , - 2969 , - 300 , - 1711 , - 3362 , - 1413 , - 3544 , - 2075 , - 846 , - 3697 , - 2948 , - 2439 , - 2170 , - 2141 , - 2352 , - 2803 , - 3494 , - 585 , - 1756 , - 3167 , - 978 , - 2869 , - 1160 , - 3531 , - 2302 , - 1313 , - 564 , - 55 , - 3626 , - 3597 , - 3808 , - 419 , - 1110 , - 2041 , - 3212 , - 783 , - 2434 , - 485 , - 2616 , - 1147 , - 3758 , - 2769 , - 2020 , - 1511 , - 1242 , - 1213 , - 1424 , - 1875 , - 2566 , - 3497 , - 828 , - 2239 , - 50 , - 1941 , - 232 , - 2603 , - 1374 , - 385 , - 3476 , - 2967 , - 2698 , - 2669 , - 2880 , - 3331 , - 182 , - 1113 , - 2284 , - 3695 , - 1506 , - 3397 , - 1688 , - 219 , - 2830 , - 1841 , - 1092 , - 583 , - 314 , - 285 , - 496 , - 947 , - 1638 , - 2569 , - 3740 , - 1311 , - 2962 , - 1013 , - 3144 , - 1675 , - 446 , - 3297 , - 2548 , - 2039 , - 1770 , - 1741 , - 1952 , - 2403 , - 3094 , - 185 , - 1356 , - 2767 , - 578 , - 2469 , - 760 , - 3131 , - 1902 , - 913 , - 164 , - 3495 , - 3226 , - 3197 , - 3408 , - 19 , - 710 , - 1641 , - 2812 , - 383 , - 2034 , - 85 , - 2216 , - 747 , - 3358 , - 2369 , - 1620 , - 1111 , - 842 , - 813 , - 1024 , - 1475 , - 2166 , - 3097 , - 428 , - 1839 , - 3490 , - 1541 , - 3672 , - 2203 , - 974 , - 3825 , - 3076 , - 2567 , - 2298 , - 2269 , - 2480 , - 2931 , - 3622 , - 713 , - 1884 , - 3295 , - 1106 , - 2997 , - 1288 , - 3659 , - 2430 , - 1441 , - 692 , - 183 , - 3754 , - 3725 , - 96 , - 547 , - 1238 , - 2169 , - 3340 , - 911 , - 2562 , - 613 , - 2744 , - 1275 , - 46 , - 2897 , - 2148 , - 1639 , - 1370 , - 1341 , - 1552 , - 2003 , - 2694 , - 3625 , - 956 , - 2367 , - 178 , - 2069 , - 360 , - 2731 , - 1502 , - 513 , - 3604 , - 3095 , - 2826 , - 2797 , - 3008 , - 3459 , - 310 , - 1241 , - 2412 , - 3823 , - 1634 , - 3525 , - 1816 , - 347 , - 2958 , - 1969 , - 1220 , - 711 , - 442 , - 413 , - 624 , - 1075 , - 1766 , - 2697 , - 28 , - 1439 , - 3090 , - 1141 , - 3272 , - 1803 , - 574 , - 3425 , - 2676 , - 2167 , - 1898 , - 1869 , - 2080 , - 2531 , - 3222 , - 313 , - 1484 , - 2895 , - 706 , - 2597 , - 888 , - 3259 , - 2030 , - 1041 , - 292 , - 3623 , - 3354 , - 3325 , - 3536 , - 147 , - 838 , - 1769 , - 2940 , - 511 , - 2162 , - 213 , - 2344 , - 875 , - 3486 , - 2497 , - 1748 , - 1239 , - 970 , - 941 , - 1152 , - 1603 , - 2294 , - 3225 , - 556 , - 1967 , - 3618 , - 1669 , - 3800 , - 2331 , - 1102 , - 113 , - 3204 , - 2695 , - 2426 , - 2397 , - 2608 , - 3059 , - 3750 , - 841 , - 2012 , - 3423 , - 1234 , - 3125 , - 1416 , - 3787 , - 2558 , - 1569 , - 820 , - 311 , - 42 , - 13 , - 224 , - 675 , - 1366 , - 2297 , - 3468 , - 1039 , - 2690 , - 741 , - 2872 , - 1403 , - 174 , - 3025 , - 2276 , - 1767 , - 1498 , - 1469 , - 1680 , - 2131 , - 2822 , - 3753 , - 1084 , - 2495 , - 306 , - 2197 , - 488 , - 2859 , - 1630 , - 641 , - 3732 , - 3223 , - 2954 , - 2925 , - 3136 , - 3587 , - 438 , - 1369 , - 2540 , - 111 , - 1762 , - 3653 , - 1944 , - 475 , - 3086 , - 2097 , - 1348 , - 839 , - 570 , - 541 , - 752 , - 1203 , - 1894 , - 2825 , - 156 , - 1567 , - 3218 , - 1269 , - 3400 , - 1931 , - 702 , - 3553 , - 2804 , - 2295 , - 2026 , - 1997 , - 2208 , - 2659 , - 3350 , - 441 , - 1612 , - 3023 , - 834 , - 2725 , - 1016 , - 3387 , - 2158 , - 1169 , - 420 , - 3751 , - 3482 , - 3453 , - 3664 , - 275 , - 966 , - 1897 , - 3068 , - 639 , - 2290 , - 341 , - 2472 , - 1003 , - 3614 , - 2625 , - 1876 , - 1367 , - 1098 , - 1069 , - 1280 , - 1731 , - 2422 , - 3353 , - 684 , - 2095 , - 3746 , - 1797 , - 88 , - 2459 , - 1230 , - 241 , - 3332 , - 2823 , - 2554 , - 2525 , - 2736 , - 3187 , - 38 , - 969 , - 2140 , - 3551 , - 1362 , - 3253 , - 1544 , - 75 , - 2686 , - 1697 , - 948 , - 439 , - 170 , - 141 , - 352 , - 803 , - 1494 , - 2425 , - 3596 , - 1167 , - 2818 , - 869 , - 3000 , - 1531 , - 302 , - 3153 , - 2404 , - 1895 , - 1626 , - 1597 , - 1808 , - 2259 , - 2950 , - 41 , - 1212 , - 2623 , - 434 , - 2325 , - 616 , - 2987 , - 1758 , - 769 , - 20 , - 3351 , - 3082 , - 3053 , - 3264 , - 3715 , - 566 , - 1497 , - 2668 , - 239 , - 1890 , - 3781 , - 2072 , - 603 , - 3214 , - 2225 , - 1476 , - 967 , - 698 , - 669 , - 880 , - 1331 , - 2022 , - 2953 , - 284 , - 1695 , - 3346 , - 1397 , - 3528 , - 2059 , - 830 , - 3681 , - 2932 , - 2423 , - 2154 , - 2125 , - 2336 , - 2787 , - 3478 , - 569 , - 1740 , - 3151 , - 962 , - 2853 , - 1144 , - 3515 , - 2286 , - 1297 , - 548 , - 39 , - 3610 , - 3581 , - 3792 , - 403 , - 1094 , - 2025 , - 3196 , - 767 , - 2418 , - 469 , - 2600 , - 1131 , - 3742 , - 2753 , - 2004 , - 1495 , - 1226 , - 1197 , - 1408 , - 1859 , - 2550 , - 3481 , - 812 , - 2223 , - 34 , - 1925 , - 216 , - 2587 , - 1358 , - 369 , - 3460 , - 2951 , - 2682 , - 2653 , - 2864 , - 3315 , - 166 , - 1097 , - 2268 , - 3679 , - 1490 , - 3381 , - 1672 , - 203 , - 2814 , - 1825 , - 1076 , - 567 , - 298 , - 269 , - 480 , - 931 , - 1622 , - 2553 , - 3724 , - 1295 , - 2946 , - 997 , - 3128 , - 1659 , - 430 , - 3281 , - 2532 , - 2023 , - 1754 , - 1725 , - 1936 , - 2387 , - 3078 , - 169 , - 1340 , - 2751 , - 562 , - 2453 , - 744 , - 3115 , - 1886 , - 897 , - 148 , - 3479 , - 3210 , - 3181 , - 3392 , - 3 , - 694 , - 1625 , - 2796 , - 367 , - 2018 , - 69 , - 2200 , - 731 , - 3342 , - 2353 , - 1604 , - 1095 , - 826 , - 797 , - 1008 , - 1459 , - 2150 , - 3081 , - 412 , - 1823 , - 3474 , - 1525 , - 3656 , - 2187 , - 958 , - 3809 , - 3060 , - 2551 , - 2282 , - 2253 , - 2464 , - 2915 , - 3606 , - 697 , - 1868 , - 3279 , - 1090 , - 2981 , - 1272 , - 3643 , - 2414 , - 1425 , - 676 , - 167 , - 3738 , - 3709 , - 80 , - 531 , - 1222 , - 2153 , - 3324 , - 895 , - 2546 , - 597 , - 2728 , - 1259 , - 30 , - 2881 , - 2132 , - 1623 , - 1354 , - 1325 , - 1536 , - 1987 , - 2678 , - 3609 , - 940 , - 2351 , - 162 , - 2053 , - 344 , - 2715 , - 1486 , - 497 , - 3588 , - 3079 , - 2810 , - 2781 , - 2992 , - 3443 , - 294 , - 1225 , - 2396 , - 3807 , - 1618 , - 3509 , - 1800 , - 331 , - 2942 , - 1953 , - 1204 , - 695 , - 426 , - 397 , - 608 , - 1059 , - 1750 , - 2681 , - 12 , - 1423 , - 3074 , - 1125 , - 3256 , - 1787 , - 558 , - 3409 , - 2660 , - 2151 , - 1882 , - 1853 , - 2064 , - 2515 , - 3206 , - 297 , - 1468 , - 2879 , - 690 , - 2581 , - 872 , - 3243 , - 2014 , - 1025 , - 276 , - 3607 , - 3338 , - 3309 , - 3520 , - 131 , - 822 , - 1753 , - 2924 , - 495 , - 2146 , - 197 , - 2328 , - 859 , - 3470 , - 2481 , - 1732 , - 1223 , - 954 , - 925 , - 1136 , - 1587 , - 2278 , - 3209 , - 540 , - 1951 , - 3602 , - 1653 , - 3784 , - 2315 , - 1086 , - 97 , - 3188 , - 2679 , - 2410 , - 2381 , - 2592 , - 3043 , - 3734 , - 825 , - 1996 , - 3407 , - 1218 , - 3109 , - 1400 , - 3771 , - 2542 , - 1553 , - 804 , - 295 , - 26 , - 3837 , - 208 , - 659 , - 1350 , - 2281 , - 3452 , - 1023 , - 2674 , - 725 , - 2856 , - 1387 , - 158 , - 3009 , - 2260 , - 1751 , - 1482 , - 1453 , - 1664 , - 2115 , - 2806 , - 3737 , - 1068 , - 2479 , - 290 , - 2181 , - 472 , - 2843 , - 1614 , - 625 , - 3716 , - 3207 , - 2938 , - 2909 , - 3120 , - 3571 , - 422 , - 1353 , - 2524 , - 95 , - 1746 , - 3637 , - 1928 , - 459 , - 3070 , - 2081 , - 1332 , - 823 , - 554 , - 525 , - 736 , - 1187 , - 1878 , - 2809 , - 140 , - 1551 , - 3202 , - 1253 , - 3384 , - 1915 , - 686 , - 3537 , - 2788 , - 2279 , - 2010 , - 1981 , - 2192 , - 2643 , - 3334 , - 425 , - 1596 , - 3007 , - 818 , - 2709 , - 1000 , - 3371 , - 2142 , - 1153 , - 404 , - 3735 , - 3466 , - 3437 , - 3648 , - 259 , - 950 , - 1881 , - 3052 , - 623 , - 2274 , - 325 , - 2456 , - 987 , - 3598 , - 2609 , - 1860 , - 1351 , - 1082 , - 1053 , - 1264 , - 1715 , - 2406 , - 3337 , - 668 , - 2079 , - 3730 , - 1781 , - 72 , - 2443 , - 1214 , - 225 , - 3316 , - 2807 , - 2538 , - 2509 , - 2720 , - 3171 , - 22 , - 953 , - 2124 , - 3535 , - 1346 , - 3237 , - 1528 , - 59 , - 2670 , - 1681 , - 932 , - 423 , - 154 , - 125 , - 336 , - 787 , - 1478 , - 2409 , - 3580 , - 1151 , - 2802 , - 853 , - 2984 , - 1515 , - 286 , - 3137 , - 2388 , - 1879 , - 1610 , - 1581 , - 1792 , - 2243 , - 2934 , - 25 , - 1196 , - 2607 , - 418 , - 2309 , - 600 , - 2971 , - 1742 , - 753 , - 4 , - 3335 , - 3066 , - 3037 , - 3248 , - 3699 , - 550 , - 1481 , - 2652 , - 223 , - 1874 , - 3765 , - 2056 , - 587 , - 3198 , - 2209 , - 1460 , - 951 , - 682 , - 653 , - 864 , - 1315 , - 2006 , - 2937 , - 268 , - 1679 , - 3330 , - 1381 , - 3512 , - 2043 , - 814 , - 3665 , - 2916 , - 2407 , - 2138 , - 2109 , - 2320 , - 2771 , - 3462 , - 553 , - 1724 , - 3135 , - 946 , - 2837 , - 1128 , - 3499 , - 2270 , - 1281 , - 532 , - 23 , - 3594 , - 3565 , - 3776 , - 387 , - 1078 , - 2009 , - 3180 , - 751 , - 2402 , - 453 , - 2584 , - 1115 , - 3726 , - 2737 , - 1988 , - 1479 , - 1210 , - 1181 , - 1392 , - 1843 , - 2534 , - 3465 , - 796 , - 2207 , - 18 , - 1909 , - 200 , - 2571 , - 1342 , - 353 , - 3444 , - 2935 , - 2666 , - 2637 , - 2848 , - 3299 , - 150 , - 1081 , - 2252 , - 3663 , - 1474 , - 3365 , - 1656 , - 187 , - 2798 , - 1809 , - 1060 , - 551 , - 282 , - 253 , - 464 , - 915 , - 1606 , - 2537 , - 3708 , - 1279 , - 2930 , - 981 , - 3112 , - 1643 , - 414 , - 3265 , - 2516 , - 2007 , - 1738 , - 1709 , - 1920 , - 2371 , - 3062 , - 153 , - 1324 , - 2735 , - 546 , - 2437 , - 728 , - 3099 , - 1870 , - 881 , - 132 , - 3463 , - 3194 , - 3165 , - 3376 , - 3827 , - 678 , - 1609 , - 2780 , - 351 , - 2002 , - 53 , - 2184 , - 715 , - 3326 , - 2337 , - 1588 , - 1079 , - 810 , - 781 , - 992 , - 1443 , - 2134 , - 3065 , - 396 , - 1807 , - 3458 , - 1509 , - 3640 , - 2171 , - 942 , - 3793 , - 3044 , - 2535 , - 2266 , - 2237 , - 2448 , - 2899 , - 3590 , - 681 , - 1852 , - 3263 , - 1074 , - 2965 , - 1256 , - 3627 , - 2398 , - 1409 , - 660 , - 151 , - 3722 , - 3693 , - 64 , - 515 , - 1206 , - 2137 , - 3308 , - 879 , - 2530 , - 581 , - 2712 , - 1243 , - 14 , - 2865 , - 2116 , - 1607 , - 1338 , - 1309 , - 1520 , - 1971 , - 2662 , - 3593 , - 924 , - 2335 , - 146 , - 2037 , - 328 , - 2699 , - 1470 , - 481 , - 3572 , - 3063 , - 2794 , - 2765 , - 2976 , - 3427 , - 278 , - 1209 , - 2380 , - 3791 , - 1602 , - 3493 , - 1784 , - 315 , - 2926 , - 1937 , - 1188 , - 679 , - 410 , - 381 , - 592 , - 1043 , - 1734 , - 2665 , - 3836 , - 1407 , - 3058 , - 1109 , - 3240 , - 1771 , - 542 , - 3393 , - 2644 , - 2135 , - 1866 , - 1837 , - 2048 , - 2499 , - 3190 , - 281 , - 1452 , - 2863 , - 674 , - 2565 , - 856 , - 3227 , - 1998 , - 1009 , - 260 , - 3591 , - 3322 , - 3293 , - 3504 , - 115 , - 806 , - 1737 , - 2908 , - 479 , - 2130 , - 181 , - 2312 , - 843 , - 3454 , - 2465 , - 1716 , - 1207 , - 938 , - 909 , - 1120 , - 1571 , - 2262 , - 3193 , - 524 , - 1935 , - 3586 , - 1637 , - 3768 , - 2299 , - 1070 , - 81 , - 3172 , - 2663 , - 2394 , - 2365 , - 2576 , - 3027 , - 3718 , - 809 , - 1980 , - 3391 , - 1202 , - 3093 , - 1384 , - 3755 , - 2526 , - 1537 , - 788 , - 279 , - 10 , - 3821 , - 192 , - 643 , - 1334 , - 2265 , - 3436 , - 1007 , - 2658 , - 709 , - 2840 , - 1371 , - 142 , - 2993 , - 2244 , - 1735 , - 1466 , - 1437 , - 1648 , - 2099 , - 2790 , - 3721 , - 1052 , - 2463 , - 274 , - 2165 , - 456 , - 2827 , - 1598 , - 609 , - 3700 , - 3191 , - 2922 , - 2893 , - 3104 , - 3555 , - 406 , - 1337 , - 2508 , - 79 , - 1730 , - 3621 , - 1912 , - 443 , - 3054 , - 2065 , - 1316 , - 807 , - 538 , - 509 , - 720 , - 1171 , - 1862 , - 2793 , - 124 , - 1535 , - 3186 , - 1237 , - 3368 , - 1899 , - 670 , - 3521 , - 2772 , - 2263 , - 1994 , - 1965 , - 2176 , - 2627 , - 3318 , - 409 , - 1580 , - 2991 , - 802 , - 2693 , - 984 , - 3355 , - 2126 , - 1137 , - 388 , - 3719 , - 3450 , - 3421 , - 3632 , - 243 , - 934 , - 1865 , - 3036 , - 607 , - 2258 , - 309 , - 2440 , - 971 , - 3582 , - 2593 , - 1844 , - 1335 , - 1066 , - 1037 , - 1248 , - 1699 , - 2390 , - 3321 , - 652 , - 2063 , - 3714 , - 1765 , - 56 , - 2427 , - 1198 , - 209 , - 3300 , - 2791 , - 2522 , - 2493 , - 2704 , - 3155 , - 6 , - 937 , - 2108 , - 3519 , - 1330 , - 3221 , - 1512 , - 43 , - 2654 , - 1665 , - 916 , - 407 , - 138 , - 109 , - 320 , - 771 , - 1462 , - 2393 , - 3564 , - 1135 , - 2786 , - 837 , - 2968 , - 1499 , - 270 , - 3121 , - 2372 , - 1863 , - 1594 , - 1565 , - 1776 , - 2227 , - 2918 , - 9 , - 1180 , - 2591 , - 402 , - 2293 , - 584 , - 2955 , - 1726 , - 737 , - 3828 , - 3319 , - 3050 , - 3021 , - 3232 , - 3683 , - 534 , - 1465 , - 2636 , - 207 , - 1858 , - 3749 , - 2040 , - 571 , - 3182 , - 2193 , - 1444 , - 935 , - 666 , - 637 , - 848 , - 1299 , - 1990 , - 2921 , - 252 , - 1663 , - 3314 , - 1365 , - 3496 , - 2027 , - 798 , - 3649 , - 2900 , - 2391 , - 2122 , - 2093 , - 2304 , - 2755 , - 3446 , - 537 , - 1708 , - 3119 , - 930 , - 2821 , - 1112 , - 3483 , - 2254 , - 1265 , - 516 , - 7 , - 3578 , - 3549 , - 3760 , - 371 , - 1062 , - 1993 , - 3164 , - 735 , - 2386 , - 437 , - 2568 , - 1099 , - 3710 , - 2721 , - 1972 , - 1463 , - 1194 , - 1165 , - 1376 , - 1827 , - 2518 , - 3449 , - 780 , - 2191 , - 2 , - 1893 , - 184 , - 2555 , - 1326 , - 337 , - 3428 , - 2919 , - 2650 , - 2621 , - 2832 , - 3283 , - 134 , - 1065 , - 2236 , - 3647 , - 1458 , - 3349 , - 1640 , - 171 , - 2782 , - 1793 , - 1044 , - 535 , - 266 , - 237 , - 448 , - 899 , - 1590 , - 2521 , - 3692 , - 1263 , - 2914 , - 965 , - 3096 , - 1627 , - 398 , - 3249 , - 2500 , - 1991 , - 1722 , - 1693 , - 1904 , - 2355 , - 3046 , - 137 , - 1308 , - 2719 , - 530 , - 2421 , - 712 , - 3083 , - 1854 , - 865 , - 116 , - 3447 , - 3178 , - 3149 , - 3360 , - 3811 , - 662 , - 1593 , - 2764 , - 335 , - 1986 , - 37 , - 2168 , - 699 , - 3310 , - 2321 , - 1572 , - 1063 , - 794 , - 765 , - 976 , - 1427 , - 2118 , - 3049 , - 380 , - 1791 , - 3442 , - 1493 , - 3624 , - 2155 , - 926 , - 3777 , - 3028 , - 2519 , - 2250 , - 2221 , - 2432 , - 2883 , - 3574 , - 665 , - 1836 , - 3247 , - 1058 , - 2949 , - 1240 , - 3611 , - 2382 , - 1393 , - 644 , - 135 , - 3706 , - 3677 , - 48 , - 499 , - 1190 , - 2121 , - 3292 , - 863 , - 2514 , - 565 , - 2696 , - 1227 , - 3838 , - 2849 , - 2100 , - 1591 , - 1322 , - 1293 , - 1504 , - 1955 , - 2646 , - 3577 , - 908 , - 2319 , - 130 , - 2021 , - 312 , - 2683 , - 1454 , - 465 , - 3556 , - 3047 , - 2778 , - 2749 , - 2960 , - 3411 , - 262 , - 1193 , - 2364 , - 3775 , - 1586 , - 3477 , - 1768 , - 299 , - 2910 , - 1921 , - 1172 , - 663 , - 394 , - 365 , - 576 , - 1027 , - 1718 , - 2649 , - 3820 , - 1391 , - 3042 , - 1093 , - 3224 , - 1755 , - 526 , - 3377 , - 2628 , - 2119 , - 1850 , - 1821 , - 2032 , - 2483 , - 3174 , - 265 , - 1436 , - 2847 , - 658 , - 2549 , - 840 , - 3211 , - 1982 , - 993 , - 244 , - 3575 , - 3306 , - 3277 , - 3488 , - 99 , - 790 , - 1721 , - 2892 , - 463 , - 2114 , - 165 , - 2296 , - 827 , - 3438 , - 2449 , - 1700 , - 1191 , - 922 , - 893 , - 1104 , - 1555 , - 2246 , - 3177 , - 508 , - 1919 , - 3570 , - 1621 , - 3752 , - 2283 , - 1054 , - 65 , - 3156 , - 2647 , - 2378 , - 2349 , - 2560 , - 3011 , - 3702 , - 793 , - 1964 , - 3375 , - 1186 , - 3077 , - 1368 , - 3739 , - 2510 , - 1521 , - 772 , - 263 , - 3834 , - 3805 , - 176 , - 627 , - 1318 , - 2249 , - 3420 , - 991 , - 2642 , - 693 , - 2824 , - 1355 , - 126 , - 2977 , - 2228 , - 1719 , - 1450 , - 1421 , - 1632 , - 2083 , - 2774 , - 3705 , - 1036 , - 2447 , - 258 , - 2149 , - 440 , - 2811 , - 1582 , - 593 , - 3684 , - 3175 , - 2906 , - 2877 , - 3088 , - 3539 , - 390 , - 1321 , - 2492 , - 63 , - 1714 , - 3605 , - 1896 , - 427 , - 3038 , - 2049 , - 1300 , - 791 , - 522 , - 493 , - 704 , - 1155 , - 1846 , - 2777 , - 108 , - 1519 , - 3170 , - 1221 , - 3352 , - 1883 , - 654 , - 3505 , - 2756 , - 2247 , - 1978 , - 1949 , - 2160 , - 2611 , - 3302 , - 393 , - 1564 , - 2975 , - 786 , - 2677 , - 968 , - 3339 , - 2110 , - 1121 , - 372 , - 3703 , - 3434 , - 3405 , - 3616 , - 227 , - 918 , - 1849 , - 3020 , - 591 , - 2242 , - 293 , - 2424 , - 955 , - 3566 , - 2577 , - 1828 , - 1319 , - 1050 , - 1021 , - 1232 , - 1683 , - 2374 , - 3305 , - 636 , - 2047 , - 3698 , - 1749 , - 40 , - 2411 , - 1182 , - 193 , - 3284 , - 2775 , - 2506 , - 2477 , - 2688 , - 3139 , - 3830 , - 921 , - 2092 , - 3503 , - 1314 , - 3205 , - 1496 , - 27 , - 2638 , - 1649 , - 900 , - 391 , - 122 , - 93 , - 304 , - 755 , - 1446 , - 2377 , - 3548 , - 1119 , - 2770 , - 821 , - 2952 , - 1483 , - 254 , - 3105 , - 2356 , - 1847 , - 1578 , - 1549 , - 1760 , - 2211 , - 2902 , - 3833 , - 1164 , - 2575 , - 386 , - 2277 , - 568 , - 2939 , - 1710 , - 721 , - 3812 , - 3303 , - 3034 , - 3005 , - 3216 , - 3667 , - 518 , - 1449 , - 2620 , - 191 , - 1842 , - 3733 , - 2024 , - 555 , - 3166 , - 2177 , - 1428 , - 919 , - 650 , - 621 , - 832 , - 1283 , - 1974 , - 2905 , - 236 , - 1647 , - 3298 , - 1349 , - 3480 , - 2011 , - 782 , - 3633 , - 2884 , - 2375 , - 2106 , - 2077 , - 2288 , - 2739 , - 3430 , - 521 , - 1692 , - 3103 , - 914 , - 2805 , - 1096 , - 3467 , - 2238 , - 1249 , - 500 , - 3831 , - 3562 , - 3533 , - 3744 , - 355 , - 1046 , - 1977 , - 3148 , - 719 , - 2370 , - 421 , - 2552 , - 1083 , - 3694 , - 2705 , - 1956 , - 1447 , - 1178 , - 1149 , - 1360 , - 1811 , - 2502 , - 3433 , - 764 , - 2175 , - 3826 , - 1877 , - 168 , - 2539 , - 1310 , - 321 , - 3412 , - 2903 , - 2634 , - 2605 , - 2816 , - 3267 , - 118 , - 1049 , - 2220 , - 3631 , - 1442 , - 3333 , - 1624 , - 155 , - 2766 , - 1777 , - 1028 , - 519 , - 250 , - 221 , - 432 , - 883 , - 1574 , - 2505 , - 3676 , - 1247 , - 2898 , - 949 , - 3080 , - 1611 , - 382 , - 3233 , - 2484 , - 1975 , - 1706 , - 1677 , - 1888 , - 2339 , - 3030 , - 121 , - 1292 , - 2703 , - 514 , - 2405 , - 696 , - 3067 , - 1838 , - 849 , - 100 , - 3431 , - 3162 , - 3133 , - 3344 , - 3795 , - 646 , - 1577 , - 2748 , - 319 , - 1970 , - 21 , - 2152 , - 683 , - 3294 , - 2305 , - 1556 , - 1047 , - 778 , - 749 , - 960 , - 1411 , - 2102 , - 3033 , - 364 , - 1775 , - 3426 , - 1477 , - 3608 , - 2139 , - 910 , - 3761 , - 3012 , - 2503 , - 2234 , - 2205 , - 2416 , - 2867 , - 3558 , - 649 , - 1820 , - 3231 , - 1042 , - 2933 , - 1224 , - 3595 , - 2366 , - 1377 , - 628 , - 119 , - 3690 , - 3661 , - 32 , - 483 , - 1174 , - 2105 , - 3276 , - 847 , - 2498 , - 549 , - 2680 , - 1211 , - 3822 , - 2833 , - 2084 , - 1575 , - 1306 , - 1277 , - 1488 , - 1939 , - 2630 , - 3561 , - 892 , - 2303 , - 114 , - 2005 , - 296 , - 2667 , - 1438 , - 449 , - 3540 , - 3031 , - 2762 , - 2733 , - 2944 , - 3395 , - 246 , - 1177 , - 2348 , - 3759 , - 1570 , - 3461 , - 1752 , - 283 , - 2894 , - 1905 , - 1156 , - 647 , - 378 , - 349 , - 560 , - 1011 , - 1702 , - 2633 , - 3804 , - 1375 , - 3026 , - 1077 , - 3208 , - 1739 , - 510 , - 3361 , - 2612 , - 2103 , - 1834 , - 1805 , - 2016 , - 2467 , - 3158 , - 249 , - 1420 , - 2831 , - 642 , - 2533 , - 824 , - 3195 , - 1966 , - 977 , - 228 , - 3559 , - 3290 , - 3261 , - 3472 , - 83 , - 774 , - 1705 , - 2876 , - 447 , - 2098 , - 149 , - 2280 , - 811 , - 3422 , - 2433 , - 1684 , - 1175 , - 906 , - 877 , - 1088 , - 1539 , - 2230 , - 3161 , - 492 , - 1903 , - 3554 , - 1605 , - 3736 , - 2267 , - 1038 , - 49 , - 3140 , - 2631 , - 2362 , - 2333 , - 2544 , - 2995 , - 3686 , - 777 , - 1948 , - 3359 , - 1170 , - 3061 , - 1352 , - 3723 , - 2494 , - 1505 , - 756 , - 247 , - 3818 , - 3789 , - 160 , - 611 , - 1302 , - 2233 , - 3404 , - 975 , - 2626 , - 677 , - 2808 , - 1339 , - 110 , - 2961 , - 2212 , - 1703 , - 1434 , - 1405 , - 1616 , - 2067 , - 2758 , - 3689 , - 1020 , - 2431 , - 242 , - 2133 , - 424 , - 2795 , - 1566 , - 577 , - 3668 , - 3159 , - 2890 , - 2861 , - 3072 , - 3523 , - 374 , - 1305 , - 2476 , - 47 , - 1698 , - 3589 , - 1880 , - 411 , - 3022 , - 2033 , - 1284 , - 775 , - 506 , - 477 , - 688 , - 1139 , - 1830 , - 2761 , - 92 , - 1503 , - 3154 , - 1205 , - 3336 , - 1867 , - 638 , - 3489 , - 2740 , - 2231 , - 1962 , - 1933 , - 2144 , - 2595 , - 3286 , - 377 , - 1548 , - 2959 , - 770 , - 2661 , - 952 , - 3323 , - 2094 , - 1105 , - 356 , - 3687 , - 3418 , - 3389 , - 3600 , - 211 , - 902 , - 1833 , - 3004 , - 575 , - 2226 , - 277 , - 2408 , - 939 , - 3550 , - 2561 , - 1812 , - 1303 , - 1034 , - 1005 , - 1216 , - 1667 , - 2358 , - 3289 , - 620 , - 2031 , - 3682 , - 1733 , - 24 , - 2395 , - 1166 , - 177 , - 3268 , - 2759 , - 2490 , - 2461 , - 2672 , - 3123 , - 3814 , - 905 , - 2076 , - 3487 , - 1298 , - 3189 , - 1480 , - 11 , - 2622 , - 1633 , - 884 , - 375 , - 106 , - 77 , - 288 , - 739 , - 1430 , - 2361 , - 3532 , - 1103 , - 2754 , - 805 , - 2936 , - 1467 , - 238 , - 3089 , - 2340 , - 1831 , - 1562 , - 1533 , - 1744 , - 2195 , - 2886 , - 3817 , - 1148 , - 2559 , - 370 , - 2261 , - 552 , - 2923 , - 1694 , - 705 , - 3796 , - 3287 , - 3018 , - 2989 , - 3200 , - 3651 , - 502 , - 1433 , - 2604 , - 175 , - 1826 , - 3717 , - 2008 , - 539 , - 3150 , - 2161 , - 1412 , - 903 , - 634 , - 605 , - 816 , - 1267 , - 1958 , - 2889 , - 220 , - 1631 , - 3282 , - 1333 , - 3464 , - 1995 , - 766 , - 3617 , - 2868 , - 2359 , - 2090 , - 2061 , - 2272 , - 2723 , - 3414 , - 505 , - 1676 , - 3087 , - 898 , - 2789 , - 1080 , - 3451 , - 2222 , - 1233 , - 484 , - 3815 , - 3546 , - 3517 , - 3728 , - 339 , - 1030 , - 1961 , - 3132 , - 703 , - 2354 , - 405 , - 2536 , - 1067 , - 3678 , - 2689 , - 1940 , - 1431 , - 1162 , - 1133 , - 1344 , - 1795 , - 2486 , - 3417 , - 748 , - 2159 , - 3810 , - 1861 , - 152 , - 2523 , - 1294 , - 305 , - 3396 , - 2887 , - 2618 , - 2589 , - 2800 , - 3251 , - 102 , - 1033 , - 2204 , - 3615 , - 1426 , - 3317 , - 1608 , - 139 , - 2750 , - 1761 , - 1012 , - 503 , - 234 , - 205 , - 416 , - 867 , - 1558 , - 2489 , - 3660 , - 1231 , - 2882 , - 933 , - 3064 , - 1595 , - 366 , - 3217 , - 2468 , - 1959 , - 1690 , - 1661 , - 1872 , - 2323 , - 3014 , - 105 , - 1276 , - 2687 , - 498 , - 2389 , - 680 , - 3051 , - 1822 , - 833 , - 84 , - 3415 , - 3146 , - 3117 , - 3328 , - 3779 , - 630 , - 1561 , - 2732 , - 303 , - 1954 , - 5 , - 2136 , - 667 , - 3278 , - 2289 , - 1540 , - 1031 , - 762 , - 733 , - 944 , - 1395 , - 2086 , - 3017 , - 348 , - 1759 , - 3410 , - 1461 , - 3592 , - 2123 , - 894 , - 3745 , - 2996 , - 2487 , - 2218 , - 2189 , - 2400 , - 2851 , - 3542 , - 633 , - 1804 , - 3215 , - 1026 , - 2917 , - 1208 , - 3579 , - 2350 , - 1361 , - 612 , - 103 , - 3674 , - 3645 , - 16 , - 467 , - 1158 , - 2089 , - 3260 , - 831 , - 2482 , - 533 , - 2664 , - 1195 , - 3806 , - 2817 , - 2068 , - 1559 , - 1290 , - 1261 , - 1472 , - 1923 , - 2614 , - 3545 , - 876 , - 2287 , - 98 , - 1989 , - 280 , - 2651 , - 1422 , - 433 , - 3524 , - 3015 , - 2746 , - 2717 , - 2928 , - 3379 , - 230 , - 1161 , - 2332 , - 3743 , - 1554 , - 3445 , - 1736 , - 267 , - 2878 , - 1889 , - 1140 , - 631 , - 362 , - 333 , - 544 , - 995 , - 1686 , - 2617 , - 3788 , - 1359 , - 3010 , - 1061 , - 3192 , - 1723 , - 494 , - 3345 , - 2596 , - 2087 , - 1818 , - 1789 , - 2000 , - 2451 , - 3142 , - 233 , - 1404 , - 2815 , - 626 , - 2517 , - 808 , - 3179 , - 1950 , - 961 , - 212 , - 3543 , - 3274 , - 3245 , - 3456 , - 67 , - 758 , - 1689 , - 2860 , - 431 , - 2082 , - 133 , - 2264 , - 795 , - 3406 , - 2417 , - 1668 , - 1159 , - 890 , - 861 , - 1072 , - 1523 , - 2214 , - 3145 , - 476 , - 1887 , - 3538 , - 1589 , - 3720 , - 2251 , - 1022 , - 33 , - 3124 , - 2615 , - 2346 , - 2317 , - 2528 , - 2979 , - 3670 , - 761 , - 1932 , - 3343 , - 1154 , - 3045 , - 1336 , - 3707 , - 2478 , - 1489 , - 740 , - 231 , - 3802 , - 3773 , - 144 , - 595 , - 1286 , - 2217 , - 3388 , - 959 , - 2610 , - 661 , - 2792 , - 1323 , - 94 , - 2945 , - 2196 , - 1687 , - 1418 , - 1389 , - 1600 , - 2051 , - 2742 , - 3673 , - 1004 , - 2415 , - 226 , - 2117 , - 408 , - 2779 , - 1550 , - 561 , - 3652 , - 3143 , - 2874 , - 2845 , - 3056 , - 3507 , - 358 , - 1289 , - 2460 , - 31 , - 1682 , - 3573 , - 1864 , - 395 , - 3006 , - 2017 , - 1268 , - 759 , - 490 , - 461 , - 672 , - 1123 , - 1814 , - 2745 , - 76 , - 1487 , - 3138 , - 1189 , - 3320 , - 1851 , - 622 , - 3473 , - 2724 , - 2215 , - 1946 , - 1917 , - 2128 , - 2579 , - 3270 , - 361 , - 1532 , - 2943 , - 754 , - 2645 , - 936 , - 3307 , - 2078 , - 1089 , - 340 , - 3671 , - 3402 , - 3373 , - 3584 , - 195 , - 886 , - 1817 , - 2988 , - 559 , - 2210 , - 261 , - 2392 , - 923 , - 3534 , - 2545 , - 1796 , - 1287 , - 1018 , - 989 , - 1200 , - 1651 , - 2342 , - 3273 , - 604 , - 2015 , - 3666 , - 1717 , - 8 , - 2379 , - 1150 , - 161 , - 3252 , - 2743 , - 2474 , - 2445 , - 2656 , - 3107 , - 3798 , - 889 , - 2060 , - 3471 , - 1282 , - 3173 , - 1464 , - 3835 , - 2606 , - 1617 , - 868 , - 359 , - 90 , - 61 , - 272 , - 723 , - 1414 , - 2345 , - 3516 , - 1087 , - 2738 , - 789 , - 2920 , - 1451 , - 222 , - 3073 , - 2324 , - 1815 , - 1546 , - 1517 , - 1728 , - 2179 , - 2870 , - 3801 , - 1132 , - 2543 , - 354 , - 2245 , - 536 , - 2907 , - 1678 , - 689 , - 3780 , - 3271 , - 3002 , - 2973 , - 3184 , - 3635 , - 486 , - 1417 , - 2588 , - 159 , - 1810 , - 3701 , - 1992 , - 523 , - 3134 , - 2145 , - 1396 , - 887 , - 618 , - 589 , - 800 , - 1251 , - 1942 , - 2873 , - 204 , - 1615 , - 3266 , - 1317 , - 3448 , - 1979 , - 750 , - 3601 , - 2852 , - 2343 , - 2074 , - 2045 , - 2256 , - 2707 , - 3398 , - 489 , - 1660 , - 3071 , - 882 , - 2773 , - 1064 , - 3435 , - 2206 , - 1217 , - 468 , - 3799 , - 3530 , - 3501 , - 3712 , - 323 , - 1014 , - 1945 , - 3116 , - 687 , - 2338 , - 389 , - 2520 , - 1051 , - 3662 , - 2673 , - 1924 , - 1415 , - 1146 , - 1117 , - 1328 , - 1779 , - 2470 , - 3401 , - 732 , - 2143 , - 3794 , - 1845 , - 136 , - 2507 , - 1278 , - 289 , - 3380 , - 2871 , - 2602 , - 2573 , - 2784 , - 3235 , - 86 , - 1017 , - 2188 , - 3599 , - 1410 , - 3301 , - 1592 , - 123 , - 2734 , - 1745 , - 996 , - 487 , - 218 , - 189 , - 400 , - 851 , - 1542 , - 2473 , - 3644 , - 1215 , - 2866 , - 917 , - 3048 , - 1579 , - 350 , - 3201 , - 2452 , - 1943 , - 1674 , - 1645 , - 1856 , - 2307 , - 2998 , - 89 , - 1260 , - 2671 , - 482 , - 2373 , - 664 , - 3035 , - 1806 , - 817 , - 68 , - 3399 , - 3130 , - 3101 , - 3312 , - 3763 , - 614 , - 1545 , - 2716 , - 287 , - 1938 , - 3829 , - 2120 , - 651 , - 3262 , - 2273 , - 1524 , - 1015 , - 746 , - 717 , - 928 , - 1379 , - 2070 , - 3001 , - 332 , - 1743 , - 3394 , - 1445 , - 3576 , - 2107 , - 878 , - 3729 , - 2980 , - 2471 , - 2202 , - 2173 , - 2384 , - 2835 , - 3526 , - 617 , - 1788 , - 3199 , - 1010 , - 2901 , - 1192 , - 3563 , - 2334 , - 1345 , - 596 , - 87 , - 3658 , - 3629 , - 0 , - 607 , - 1702 , - 3285 , - 1452 , - 107 , - 3154 , - 2785 , - 2904 , - 3511 , - 702 , - 2285 , - 452 , - 3011 , - 2154 , - 1785 , - 1904 , - 2511 , - 3606 , - 1285 , - 3356 , - 2011 , - 1154 , - 785 , - 904 , - 1511 , - 2606 , - 285 , - 2356 , - 1011 , - 154 , - 3689 , - 3808 , - 511 , - 1606 , - 3189 , - 1356 , - 11 , - 3058 , - 2689 , - 2808 , - 3415 , - 606 , - 2189 , - 356 , - 2915 , - 2058 , - 1689 , - 1808 , - 2415 , - 3510 , - 1189 , - 3260 , - 1915 , - 1058 , - 689 , - 808 , - 1415 , - 2510 , - 189 , - 2260 , - 915 , - 58 , - 3593 , - 3712 , - 415 , - 1510 , - 3093 , - 1260 , - 3819 , - 2962 , - 2593 , - 2712 , - 3319 , - 510 , - 2093 , - 260 , - 2819 , - 1962 , - 1593 , - 1712 , - 2319 , - 3414 , - 1093 , - 3164 , - 1819 , - 962 , - 593 , - 712 , - 1319 , - 2414 , - 93 , - 2164 , - 819 , - 3866 , - 3497 , - 3616 , - 319 , - 1414 , - 2997 , - 1164 , - 3723 , - 2866 , - 2497 , - 2616 , - 3223 , - 414 , - 1997 , - 164 , - 2723 , - 1866 , - 1497 , - 1616 , - 2223 , - 3318 , - 997 , - 3068 , - 1723 , - 866 , - 497 , - 616 , - 1223 , - 2318 , - 3901 , - 2068 , - 723 , - 3770 , - 3401 , - 3520 , - 223 , - 1318 , - 2901 , - 1068 , - 3627 , - 2770 , - 2401 , - 2520 , - 3127 , - 318 , - 1901 , - 68 , - 2627 , - 1770 , - 1401 , - 1520 , - 2127 , - 3222 , - 901 , - 2972 , - 1627 , - 770 , - 401 , - 520 , - 1127 , - 2222 , - 3805 , - 1972 , - 627 , - 3674 , - 3305 , - 3424 , - 127 , - 1222 , - 2805 , - 972 , - 3531 , - 2674 , - 2305 , - 2424 , - 3031 , - 222 , - 1805 , - 3876 , - 2531 , - 1674 , - 1305 , - 1424 , - 2031 , - 3126 , - 805 , - 2876 , - 1531 , - 674 , - 305 , - 424 , - 1031 , - 2126 , - 3709 , - 1876 , - 531 , - 3578 , - 3209 , - 3328 , - 31 , - 1126 , - 2709 , - 876 , - 3435 , - 2578 , - 2209 , - 2328 , - 2935 , - 126 , - 1709 , - 3780 , - 2435 , - 1578 , - 1209 , - 1328 , - 1935 , - 3030 , - 709 , - 2780 , - 1435 , - 578 , - 209 , - 328 , - 935 , - 2030 , - 3613 , - 1780 , - 435 , - 3482 , - 3113 , - 3232 , - 3839 , - 1030 , - 2613 , - 780 , - 3339 , - 2482 , - 2113 , - 2232 , - 2839 , - 30 , - 1613 , - 3684 , - 2339 , - 1482 , - 1113 , - 1232 , - 1839 , - 2934 , - 613 , - 2684 , - 1339 , - 482 , - 113 , - 232 , - 839 , - 1934 , - 3517 , - 1684 , - 339 , - 3386 , - 3017 , - 3136 , - 3743 , - 934 , - 2517 , - 684 , - 3243 , - 2386 , - 2017 , - 2136 , - 2743 , - 3838 , - 1517 , - 3588 , - 2243 , - 1386 , - 1017 , - 1136 , - 1743 , - 2838 , - 517 , - 2588 , - 1243 , - 386 , - 17 , - 136 , - 743 , - 1838 , - 3421 , - 1588 , - 243 , - 3290 , - 2921 , - 3040 , - 3647 , - 838 , - 2421 , - 588 , - 3147 , - 2290 , - 1921 , - 2040 , - 2647 , - 3742 , - 1421 , - 3492 , - 2147 , - 1290 , - 921 , - 1040 , - 1647 , - 2742 , - 421 , - 2492 , - 1147 , - 290 , - 3825 , - 40 , - 647 , - 1742 , - 3325 , - 1492 , - 147 , - 3194 , - 2825 , - 2944 , - 3551 , - 742 , - 2325 , - 492 , - 3051 , - 2194 , - 1825 , - 1944 , - 2551 , - 3646 , - 1325 , - 3396 , - 2051 , - 1194 , - 825 , - 944 , - 1551 , - 2646 , - 325 , - 2396 , - 1051 , - 194 , - 3729 , - 3848 , - 551 , - 1646 , - 3229 , - 1396 , - 51 , - 3098 , - 2729 , - 2848 , - 3455 , - 646 , - 2229 , - 396 , - 2955 , - 2098 , - 1729 , - 1848 , - 2455 , - 3550 , - 1229 , - 3300 , - 1955 , - 1098 , - 729 , - 848 , - 1455 , - 2550 , - 229 , - 2300 , - 955 , - 98 , - 3633 , - 3752 , - 455 , - 1550 , - 3133 , - 1300 , - 3859 , - 3002 , - 2633 , - 2752 , - 3359 , - 550 , - 2133 , - 300 , - 2859 , - 2002 , - 1633 , - 1752 , - 2359 , - 3454 , - 1133 , - 3204 , - 1859 , - 1002 , - 633 , - 752 , - 1359 , - 2454 , - 133 , - 2204 , - 859 , - 2 , - 3537 , - 3656 , - 359 , - 1454 , - 3037 , - 1204 , - 3763 , - 2906 , - 2537 , - 2656 , - 3263 , - 454 , - 2037 , - 204 , - 2763 , - 1906 , - 1537 , - 1656 , - 2263 , - 3358 , - 1037 , - 3108 , - 1763 , - 906 , - 537 , - 656 , - 1263 , - 2358 , - 37 , - 2108 , - 763 , - 3810 , - 3441 , - 3560 , - 263 , - 1358 , - 2941 , - 1108 , - 3667 , - 2810 , - 2441 , - 2560 , - 3167 , - 358 , - 1941 , - 108 , - 2667 , - 1810 , - 1441 , - 1560 , - 2167 , - 3262 , - 941 , - 3012 , - 1667 , - 810 , - 441 , - 560 , - 1167 , - 2262 , - 3845 , - 2012 , - 667 , - 3714 , - 3345 , - 3464 , - 167 , - 1262 , - 2845 , - 1012 , - 3571 , - 2714 , - 2345 , - 2464 , - 3071 , - 262 , - 1845 , - 12 , - 2571 , - 1714 , - 1345 , - 1464 , - 2071 , - 3166 , - 845 , - 2916 , - 1571 , - 714 , - 345 , - 464 , - 1071 , - 2166 , - 3749 , - 1916 , - 571 , - 3618 , - 3249 , - 3368 , - 71 , - 1166 , - 2749 , - 916 , - 3475 , - 2618 , - 2249 , - 2368 , - 2975 , - 166 , - 1749 , - 3820 , - 2475 , - 1618 , - 1249 , - 1368 , - 1975 , - 3070 , - 749 , - 2820 , - 1475 , - 618 , - 249 , - 368 , - 975 , - 2070 , - 3653 , - 1820 , - 475 , - 3522 , - 3153 , - 3272 , - 3879 , - 1070 , - 2653 , - 820 , - 3379 , - 2522 , - 2153 , - 2272 , - 2879 , - 70 , - 1653 , - 3724 , - 2379 , - 1522 , - 1153 , - 1272 , - 1879 , - 2974 , - 653 , - 2724 , - 1379 , - 522 , - 153 , - 272 , - 879 , - 1974 , - 3557 , - 1724 , - 379 , - 3426 , - 3057 , - 3176 , - 3783 , - 974 , - 2557 , - 724 , - 3283 , - 2426 , - 2057 , - 2176 , - 2783 , - 3878 , - 1557 , - 3628 , - 2283 , - 1426 , - 1057 , - 1176 , - 1783 , - 2878 , - 557 , - 2628 , - 1283 , - 426 , - 57 , - 176 , - 783 , - 1878 , - 3461 , - 1628 , - 283 , - 3330 , - 2961 , - 3080 , - 3687 , - 878 , - 2461 , - 628 , - 3187 , - 2330 , - 1961 , - 2080 , - 2687 , - 3782 , - 1461 , - 3532 , - 2187 , - 1330 , - 961 , - 1080 , - 1687 , - 2782 , - 461 , - 2532 , - 1187 , - 330 , - 3865 , - 80 , - 687 , - 1782 , - 3365 , - 1532 , - 187 , - 3234 , - 2865 , - 2984 , - 3591 , - 782 , - 2365 , - 532 , - 3091 , - 2234 , - 1865 , - 1984 , - 2591 , - 3686 , - 1365 , - 3436 , - 2091 , - 1234 , - 865 , - 984 , - 1591 , - 2686 , - 365 , - 2436 , - 1091 , - 234 , - 3769 , - 3888 , - 591 , - 1686 , - 3269 , - 1436 , - 91 , - 3138 , - 2769 , - 2888 , - 3495 , - 686 , - 2269 , - 436 , - 2995 , - 2138 , - 1769 , - 1888 , - 2495 , - 3590 , - 1269 , - 3340 , - 1995 , - 1138 , - 769 , - 888 , - 1495 , - 2590 , - 269 , - 2340 , - 995 , - 138 , - 3673 , - 3792 , - 495 , - 1590 , - 3173 , - 1340 , - 3899 , - 3042 , - 2673 , - 2792 , - 3399 , - 590 , - 2173 , - 340 , - 2899 , - 2042 , - 1673 , - 1792 , - 2399 , - 3494 , - 1173 , - 3244 , - 1899 , - 1042 , - 673 , - 792 , - 1399 , - 2494 , - 173 , - 2244 , - 899 , - 42 , - 3577 , - 3696 , - 399 , - 1494 , - 3077 , - 1244 , - 3803 , - 2946 , - 2577 , - 2696 , - 3303 , - 494 , - 2077 , - 244 , - 2803 , - 1946 , - 1577 , - 1696 , - 2303 , - 3398 , - 1077 , - 3148 , - 1803 , - 946 , - 577 , - 696 , - 1303 , - 2398 , - 77 , - 2148 , - 803 , - 3850 , - 3481 , - 3600 , - 303 , - 1398 , - 2981 , - 1148 , - 3707 , - 2850 , - 2481 , - 2600 , - 3207 , - 398 , - 1981 , - 148 , - 2707 , - 1850 , - 1481 , - 1600 , - 2207 , - 3302 , - 981 , - 3052 , - 1707 , - 850 , - 481 , - 600 , - 1207 , - 2302 , - 3885 , - 2052 , - 707 , - 3754 , - 3385 , - 3504 , - 207 , - 1302 , - 2885 , - 1052 , - 3611 , - 2754 , - 2385 , - 2504 , - 3111 , - 302 , - 1885 , - 52 , - 2611 , - 1754 , - 1385 , - 1504 , - 2111 , - 3206 , - 885 , - 2956 , - 1611 , - 754 , - 385 , - 504 , - 1111 , - 2206 , - 3789 , - 1956 , - 611 , - 3658 , - 3289 , - 3408 , - 111 , - 1206 , - 2789 , - 956 , - 3515 , - 2658 , - 2289 , - 2408 , - 3015 , - 206 , - 1789 , - 3860 , - 2515 , - 1658 , - 1289 , - 1408 , - 2015 , - 3110 , - 789 , - 2860 , - 1515 , - 658 , - 289 , - 408 , - 1015 , - 2110 , - 3693 , - 1860 , - 515 , - 3562 , - 3193 , - 3312 , - 15 , - 1110 , - 2693 , - 860 , - 3419 , - 2562 , - 2193 , - 2312 , - 2919 , - 110 , - 1693 , - 3764 , - 2419 , - 1562 , - 1193 , - 1312 , - 1919 , - 3014 , - 693 , - 2764 , - 1419 , - 562 , - 193 , - 312 , - 919 , - 2014 , - 3597 , - 1764 , - 419 , - 3466 , - 3097 , - 3216 , - 3823 , - 1014 , - 2597 , - 764 , - 3323 , - 2466 , - 2097 , - 2216 , - 2823 , - 14 , - 1597 , - 3668 , - 2323 , - 1466 , - 1097 , - 1216 , - 1823 , - 2918 , - 597 , - 2668 , - 1323 , - 466 , - 97 , - 216 , - 823 , - 1918 , - 3501 , - 1668 , - 323 , - 3370 , - 3001 , - 3120 , - 3727 , - 918 , - 2501 , - 668 , - 3227 , - 2370 , - 2001 , - 2120 , - 2727 , - 3822 , - 1501 , - 3572 , - 2227 , - 1370 , - 1001 , - 1120 , - 1727 , - 2822 , - 501 , - 2572 , - 1227 , - 370 , - 1 , - 120 , - 727 , - 1822 , - 3405 , - 1572 , - 227 , - 3274 , - 2905 , - 3024 , - 3631 , - 822 , - 2405 , - 572 , - 3131 , - 2274 , - 1905 , - 2024 , - 2631 , - 3726 , - 1405 , - 3476 , - 2131 , - 1274 , - 905 , - 1024 , - 1631 , - 2726 , - 405 , - 2476 , - 1131 , - 274 , - 3809 , - 24 , - 631 , - 1726 , - 3309 , - 1476 , - 131 , - 3178 , - 2809 , - 2928 , - 3535 , - 726 , - 2309 , - 476 , - 3035 , - 2178 , - 1809 , - 1928 , - 2535 , - 3630 , - 1309 , - 3380 , - 2035 , - 1178 , - 809 , - 928 , - 1535 , - 2630 , - 309 , - 2380 , - 1035 , - 178 , - 3713 , - 3832 , - 535 , - 1630 , - 3213 , - 1380 , - 35 , - 3082 , - 2713 , - 2832 , - 3439 , - 630 , - 2213 , - 380 , - 2939 , - 2082 , - 1713 , - 1832 , - 2439 , - 3534 , - 1213 , - 3284 , - 1939 , - 1082 , - 713 , - 832 , - 1439 , - 2534 , - 213 , - 2284 , - 939 , - 82 , - 3617 , - 3736 , - 439 , - 1534 , - 3117 , - 1284 , - 3843 , - 2986 , - 2617 , - 2736 , - 3343 , - 534 , - 2117 , - 284 , - 2843 , - 1986 , - 1617 , - 1736 , - 2343 , - 3438 , - 1117 , - 3188 , - 1843 , - 986 , - 617 , - 736 , - 1343 , - 2438 , - 117 , - 2188 , - 843 , - 3890 , - 3521 , - 3640 , - 343 , - 1438 , - 3021 , - 1188 , - 3747 , - 2890 , - 2521 , - 2640 , - 3247 , - 438 , - 2021 , - 188 , - 2747 , - 1890 , - 1521 , - 1640 , - 2247 , - 3342 , - 1021 , - 3092 , - 1747 , - 890 , - 521 , - 640 , - 1247 , - 2342 , - 21 , - 2092 , - 747 , - 3794 , - 3425 , - 3544 , - 247 , - 1342 , - 2925 , - 1092 , - 3651 , - 2794 , - 2425 , - 2544 , - 3151 , - 342 , - 1925 , - 92 , - 2651 , - 1794 , - 1425 , - 1544 , - 2151 , - 3246 , - 925 , - 2996 , - 1651 , - 794 , - 425 , - 544 , - 1151 , - 2246 , - 3829 , - 1996 , - 651 , - 3698 , - 3329 , - 3448 , - 151 , - 1246 , - 2829 , - 996 , - 3555 , - 2698 , - 2329 , - 2448 , - 3055 , - 246 , - 1829 , - 3900 , - 2555 , - 1698 , - 1329 , - 1448 , - 2055 , - 3150 , - 829 , - 2900 , - 1555 , - 698 , - 329 , - 448 , - 1055 , - 2150 , - 3733 , - 1900 , - 555 , - 3602 , - 3233 , - 3352 , - 55 , - 1150 , - 2733 , - 900 , - 3459 , - 2602 , - 2233 , - 2352 , - 2959 , - 150 , - 1733 , - 3804 , - 2459 , - 1602 , - 1233 , - 1352 , - 1959 , - 3054 , - 733 , - 2804 , - 1459 , - 602 , - 233 , - 352 , - 959 , - 2054 , - 3637 , - 1804 , - 459 , - 3506 , - 3137 , - 3256 , - 3863 , - 1054 , - 2637 , - 804 , - 3363 , - 2506 , - 2137 , - 2256 , - 2863 , - 54 , - 1637 , - 3708 , - 2363 , - 1506 , - 1137 , - 1256 , - 1863 , - 2958 , - 637 , - 2708 , - 1363 , - 506 , - 137 , - 256 , - 863 , - 1958 , - 3541 , - 1708 , - 363 , - 3410 , - 3041 , - 3160 , - 3767 , - 958 , - 2541 , - 708 , - 3267 , - 2410 , - 2041 , - 2160 , - 2767 , - 3862 , - 1541 , - 3612 , - 2267 , - 1410 , - 1041 , - 1160 , - 1767 , - 2862 , - 541 , - 2612 , - 1267 , - 410 , - 41 , - 160 , - 767 , - 1862 , - 3445 , - 1612 , - 267 , - 3314 , - 2945 , - 3064 , - 3671 , - 862 , - 2445 , - 612 , - 3171 , - 2314 , - 1945 , - 2064 , - 2671 , - 3766 , - 1445 , - 3516 , - 2171 , - 1314 , - 945 , - 1064 , - 1671 , - 2766 , - 445 , - 2516 , - 1171 , - 314 , - 3849 , - 64 , - 671 , - 1766 , - 3349 , - 1516 , - 171 , - 3218 , - 2849 , - 2968 , - 3575 , - 766 , - 2349 , - 516 , - 3075 , - 2218 , - 1849 , - 1968 , - 2575 , - 3670 , - 1349 , - 3420 , - 2075 , - 1218 , - 849 , - 968 , - 1575 , - 2670 , - 349 , - 2420 , - 1075 , - 218 , - 3753 , - 3872 , - 575 , - 1670 , - 3253 , - 1420 , - 75 , - 3122 , - 2753 , - 2872 , - 3479 , - 670 , - 2253 , - 420 , - 2979 , - 2122 , - 1753 , - 1872 , - 2479 , - 3574 , - 1253 , - 3324 , - 1979 , - 1122 , - 753 , - 872 , - 1479 , - 2574 , - 253 , - 2324 , - 979 , - 122 , - 3657 , - 3776 , - 479 , - 1574 , - 3157 , - 1324 , - 3883 , - 3026 , - 2657 , - 2776 , - 3383 , - 574 , - 2157 , - 324 , - 2883 , - 2026 , - 1657 , - 1776 , - 2383 , - 3478 , - 1157 , - 3228 , - 1883 , - 1026 , - 657 , - 776 , - 1383 , - 2478 , - 157 , - 2228 , - 883 , - 26 , - 3561 , - 3680 , - 383 , - 1478 , - 3061 , - 1228 , - 3787 , - 2930 , - 2561 , - 2680 , - 3287 , - 478 , - 2061 , - 228 , - 2787 , - 1930 , - 1561 , - 1680 , - 2287 , - 3382 , - 1061 , - 3132 , - 1787 , - 930 , - 561 , - 680 , - 1287 , - 2382 , - 61 , - 2132 , - 787 , - 3834 , - 3465 , - 3584 , - 287 , - 1382 , - 2965 , - 1132 , - 3691 , - 2834 , - 2465 , - 2584 , - 3191 , - 382 , - 1965 , - 132 , - 2691 , - 1834 , - 1465 , - 1584 , - 2191 , - 3286 , - 965 , - 3036 , - 1691 , - 834 , - 465 , - 584 , - 1191 , - 2286 , - 3869 , - 2036 , - 691 , - 3738 , - 3369 , - 3488 , - 191 , - 1286 , - 2869 , - 1036 , - 3595 , - 2738 , - 2369 , - 2488 , - 3095 , - 286 , - 1869 , - 36 , - 2595 , - 1738 , - 1369 , - 1488 , - 2095 , - 3190 , - 869 , - 2940 , - 1595 , - 738 , - 369 , - 488 , - 1095 , - 2190 , - 3773 , - 1940 , - 595 , - 3642 , - 3273 , - 3392 , - 95 , - 1190 , - 2773 , - 940 , - 3499 , - 2642 , - 2273 , - 2392 , - 2999 , - 190 , - 1773 , - 3844 , - 2499 , - 1642 , - 1273 , - 1392 , - 1999 , - 3094 , - 773 , - 2844 , - 1499 , - 642 , - 273 , - 392 , - 999 , - 2094 , - 3677 , - 1844 , - 499 , - 3546 , - 3177 , - 3296 , - 3903 , - 1094 , - 2677 , - 844 , - 3403 , - 2546 , - 2177 , - 2296 , - 2903 , - 94 , - 1677 , - 3748 , - 2403 , - 1546 , - 1177 , - 1296 , - 1903 , - 2998 , - 677 , - 2748 , - 1403 , - 546 , - 177 , - 296 , - 903 , - 1998 , - 3581 , - 1748 , - 403 , - 3450 , - 3081 , - 3200 , - 3807 , - 998 , - 2581 , - 748 , - 3307 , - 2450 , - 2081 , - 2200 , - 2807 , - 3902 , - 1581 , - 3652 , - 2307 , - 1450 , - 1081 , - 1200 , - 1807 , - 2902 , - 581 , - 2652 , - 1307 , - 450 , - 81 , - 200 , - 807 , - 1902 , - 3485 , - 1652 , - 307 , - 3354 , - 2985 , - 3104 , - 3711 , - 902 , - 2485 , - 652 , - 3211 , - 2354 , - 1985 , - 2104 , - 2711 , - 3806 , - 1485 , - 3556 , - 2211 , - 1354 , - 985 , - 1104 , - 1711 , - 2806 , - 485 , - 2556 , - 1211 , - 354 , - 3889 , - 104 , - 711 , - 1806 , - 3389 , - 1556 , - 211 , - 3258 , - 2889 , - 3008 , - 3615 , - 806 , - 2389 , - 556 , - 3115 , - 2258 , - 1889 , - 2008 , - 2615 , - 3710 , - 1389 , - 3460 , - 2115 , - 1258 , - 889 , - 1008 , - 1615 , - 2710 , - 389 , - 2460 , - 1115 , - 258 , - 3793 , - 8 , - 615 , - 1710 , - 3293 , - 1460 , - 115 , - 3162 , - 2793 , - 2912 , - 3519 , - 710 , - 2293 , - 460 , - 3019 , - 2162 , - 1793 , - 1912 , - 2519 , - 3614 , - 1293 , - 3364 , - 2019 , - 1162 , - 793 , - 912 , - 1519 , - 2614 , - 293 , - 2364 , - 1019 , - 162 , - 3697 , - 3816 , - 519 , - 1614 , - 3197 , - 1364 , - 19 , - 3066 , - 2697 , - 2816 , - 3423 , - 614 , - 2197 , - 364 , - 2923 , - 2066 , - 1697 , - 1816 , - 2423 , - 3518 , - 1197 , - 3268 , - 1923 , - 1066 , - 697 , - 816 , - 1423 , - 2518 , - 197 , - 2268 , - 923 , - 66 , - 3601 , - 3720 , - 423 , - 1518 , - 3101 , - 1268 , - 3827 , - 2970 , - 2601 , - 2720 , - 3327 , - 518 , - 2101 , - 268 , - 2827 , - 1970 , - 1601 , - 1720 , - 2327 , - 3422 , - 1101 , - 3172 , - 1827 , - 970 , - 601 , - 720 , - 1327 , - 2422 , - 101 , - 2172 , - 827 , - 3874 , - 3505 , - 3624 , - 327 , - 1422 , - 3005 , - 1172 , - 3731 , - 2874 , - 2505 , - 2624 , - 3231 , - 422 , - 2005 , - 172 , - 2731 , - 1874 , - 1505 , - 1624 , - 2231 , - 3326 , - 1005 , - 3076 , - 1731 , - 874 , - 505 , - 624 , - 1231 , - 2326 , - 5 , - 2076 , - 731 , - 3778 , - 3409 , - 3528 , - 231 , - 1326 , - 2909 , - 1076 , - 3635 , - 2778 , - 2409 , - 2528 , - 3135 , - 326 , - 1909 , - 76 , - 2635 , - 1778 , - 1409 , - 1528 , - 2135 , - 3230 , - 909 , - 2980 , - 1635 , - 778 , - 409 , - 528 , - 1135 , - 2230 , - 3813 , - 1980 , - 635 , - 3682 , - 3313 , - 3432 , - 135 , - 1230 , - 2813 , - 980 , - 3539 , - 2682 , - 2313 , - 2432 , - 3039 , - 230 , - 1813 , - 3884 , - 2539 , - 1682 , - 1313 , - 1432 , - 2039 , - 3134 , - 813 , - 2884 , - 1539 , - 682 , - 313 , - 432 , - 1039 , - 2134 , - 3717 , - 1884 , - 539 , - 3586 , - 3217 , - 3336 , - 39 , - 1134 , - 2717 , - 884 , - 3443 , - 2586 , - 2217 , - 2336 , - 2943 , - 134 , - 1717 , - 3788 , - 2443 , - 1586 , - 1217 , - 1336 , - 1943 , - 3038 , - 717 , - 2788 , - 1443 , - 586 , - 217 , - 336 , - 943 , - 2038 , - 3621 , - 1788 , - 443 , - 3490 , - 3121 , - 3240 , - 3847 , - 1038 , - 2621 , - 788 , - 3347 , - 2490 , - 2121 , - 2240 , - 2847 , - 38 , - 1621 , - 3692 , - 2347 , - 1490 , - 1121 , - 1240 , - 1847 , - 2942 , - 621 , - 2692 , - 1347 , - 490 , - 121 , - 240 , - 847 , - 1942 , - 3525 , - 1692 , - 347 , - 3394 , - 3025 , - 3144 , - 3751 , - 942 , - 2525 , - 692 , - 3251 , - 2394 , - 2025 , - 2144 , - 2751 , - 3846 , - 1525 , - 3596 , - 2251 , - 1394 , - 1025 , - 1144 , - 1751 , - 2846 , - 525 , - 2596 , - 1251 , - 394 , - 25 , - 144 , - 751 , - 1846 , - 3429 , - 1596 , - 251 , - 3298 , - 2929 , - 3048 , - 3655 , - 846 , - 2429 , - 596 , - 3155 , - 2298 , - 1929 , - 2048 , - 2655 , - 3750 , - 1429 , - 3500 , - 2155 , - 1298 , - 929 , - 1048 , - 1655 , - 2750 , - 429 , - 2500 , - 1155 , - 298 , - 3833 , - 48 , - 655 , - 1750 , - 3333 , - 1500 , - 155 , - 3202 , - 2833 , - 2952 , - 3559 , - 750 , - 2333 , - 500 , - 3059 , - 2202 , - 1833 , - 1952 , - 2559 , - 3654 , - 1333 , - 3404 , - 2059 , - 1202 , - 833 , - 952 , - 1559 , - 2654 , - 333 , - 2404 , - 1059 , - 202 , - 3737 , - 3856 , - 559 , - 1654 , - 3237 , - 1404 , - 59 , - 3106 , - 2737 , - 2856 , - 3463 , - 654 , - 2237 , - 404 , - 2963 , - 2106 , - 1737 , - 1856 , - 2463 , - 3558 , - 1237 , - 3308 , - 1963 , - 1106 , - 737 , - 856 , - 1463 , - 2558 , - 237 , - 2308 , - 963 , - 106 , - 3641 , - 3760 , - 463 , - 1558 , - 3141 , - 1308 , - 3867 , - 3010 , - 2641 , - 2760 , - 3367 , - 558 , - 2141 , - 308 , - 2867 , - 2010 , - 1641 , - 1760 , - 2367 , - 3462 , - 1141 , - 3212 , - 1867 , - 1010 , - 641 , - 760 , - 1367 , - 2462 , - 141 , - 2212 , - 867 , - 10 , - 3545 , - 3664 , - 367 , - 1462 , - 3045 , - 1212 , - 3771 , - 2914 , - 2545 , - 2664 , - 3271 , - 462 , - 2045 , - 212 , - 2771 , - 1914 , - 1545 , - 1664 , - 2271 , - 3366 , - 1045 , - 3116 , - 1771 , - 914 , - 545 , - 664 , - 1271 , - 2366 , - 45 , - 2116 , - 771 , - 3818 , - 3449 , - 3568 , - 271 , - 1366 , - 2949 , - 1116 , - 3675 , - 2818 , - 2449 , - 2568 , - 3175 , - 366 , - 1949 , - 116 , - 2675 , - 1818 , - 1449 , - 1568 , - 2175 , - 3270 , - 949 , - 3020 , - 1675 , - 818 , - 449 , - 568 , - 1175 , - 2270 , - 3853 , - 2020 , - 675 , - 3722 , - 3353 , - 3472 , - 175 , - 1270 , - 2853 , - 1020 , - 3579 , - 2722 , - 2353 , - 2472 , - 3079 , - 270 , - 1853 , - 20 , - 2579 , - 1722 , - 1353 , - 1472 , - 2079 , - 3174 , - 853 , - 2924 , - 1579 , - 722 , - 353 , - 472 , - 1079 , - 2174 , - 3757 , - 1924 , - 579 , - 3626 , - 3257 , - 3376 , - 79 , - 1174 , - 2757 , - 924 , - 3483 , - 2626 , - 2257 , - 2376 , - 2983 , - 174 , - 1757 , - 3828 , - 2483 , - 1626 , - 1257 , - 1376 , - 1983 , - 3078 , - 757 , - 2828 , - 1483 , - 626 , - 257 , - 376 , - 983 , - 2078 , - 3661 , - 1828 , - 483 , - 3530 , - 3161 , - 3280 , - 3887 , - 1078 , - 2661 , - 828 , - 3387 , - 2530 , - 2161 , - 2280 , - 2887 , - 78 , - 1661 , - 3732 , - 2387 , - 1530 , - 1161 , - 1280 , - 1887 , - 2982 , - 661 , - 2732 , - 1387 , - 530 , - 161 , - 280 , - 887 , - 1982 , - 3565 , - 1732 , - 387 , - 3434 , - 3065 , - 3184 , - 3791 , - 982 , - 2565 , - 732 , - 3291 , - 2434 , - 2065 , - 2184 , - 2791 , - 3886 , - 1565 , - 3636 , - 2291 , - 1434 , - 1065 , - 1184 , - 1791 , - 2886 , - 565 , - 2636 , - 1291 , - 434 , - 65 , - 184 , - 791 , - 1886 , - 3469 , - 1636 , - 291 , - 3338 , - 2969 , - 3088 , - 3695 , - 886 , - 2469 , - 636 , - 3195 , - 2338 , - 1969 , - 2088 , - 2695 , - 3790 , - 1469 , - 3540 , - 2195 , - 1338 , - 969 , - 1088 , - 1695 , - 2790 , - 469 , - 2540 , - 1195 , - 338 , - 3873 , - 88 , - 695 , - 1790 , - 3373 , - 1540 , - 195 , - 3242 , - 2873 , - 2992 , - 3599 , - 790 , - 2373 , - 540 , - 3099 , - 2242 , - 1873 , - 1992 , - 2599 , - 3694 , - 1373 , - 3444 , - 2099 , - 1242 , - 873 , - 992 , - 1599 , - 2694 , - 373 , - 2444 , - 1099 , - 242 , - 3777 , - 3896 , - 599 , - 1694 , - 3277 , - 1444 , - 99 , - 3146 , - 2777 , - 2896 , - 3503 , - 694 , - 2277 , - 444 , - 3003 , - 2146 , - 1777 , - 1896 , - 2503 , - 3598 , - 1277 , - 3348 , - 2003 , - 1146 , - 777 , - 896 , - 1503 , - 2598 , - 277 , - 2348 , - 1003 , - 146 , - 3681 , - 3800 , - 503 , - 1598 , - 3181 , - 1348 , - 3 , - 3050 , - 2681 , - 2800 , - 3407 , - 598 , - 2181 , - 348 , - 2907 , - 2050 , - 1681 , - 1800 , - 2407 , - 3502 , - 1181 , - 3252 , - 1907 , - 1050 , - 681 , - 800 , - 1407 , - 2502 , - 181 , - 2252 , - 907 , - 50 , - 3585 , - 3704 , - 407 , - 1502 , - 3085 , - 1252 , - 3811 , - 2954 , - 2585 , - 2704 , - 3311 , - 502 , - 2085 , - 252 , - 2811 , - 1954 , - 1585 , - 1704 , - 2311 , - 3406 , - 1085 , - 3156 , - 1811 , - 954 , - 585 , - 704 , - 1311 , - 2406 , - 85 , - 2156 , - 811 , - 3858 , - 3489 , - 3608 , - 311 , - 1406 , - 2989 , - 1156 , - 3715 , - 2858 , - 2489 , - 2608 , - 3215 , - 406 , - 1989 , - 156 , - 2715 , - 1858 , - 1489 , - 1608 , - 2215 , - 3310 , - 989 , - 3060 , - 1715 , - 858 , - 489 , - 608 , - 1215 , - 2310 , - 3893 , - 2060 , - 715 , - 3762 , - 3393 , - 3512 , - 215 , - 1310 , - 2893 , - 1060 , - 3619 , - 2762 , - 2393 , - 2512 , - 3119 , - 310 , - 1893 , - 60 , - 2619 , - 1762 , - 1393 , - 1512 , - 2119 , - 3214 , - 893 , - 2964 , - 1619 , - 762 , - 393 , - 512 , - 1119 , - 2214 , - 3797 , - 1964 , - 619 , - 3666 , - 3297 , - 3416 , - 119 , - 1214 , - 2797 , - 964 , - 3523 , - 2666 , - 2297 , - 2416 , - 3023 , - 214 , - 1797 , - 3868 , - 2523 , - 1666 , - 1297 , - 1416 , - 2023 , - 3118 , - 797 , - 2868 , - 1523 , - 666 , - 297 , - 416 , - 1023 , - 2118 , - 3701 , - 1868 , - 523 , - 3570 , - 3201 , - 3320 , - 23 , - 1118 , - 2701 , - 868 , - 3427 , - 2570 , - 2201 , - 2320 , - 2927 , - 118 , - 1701 , - 3772 , - 2427 , - 1570 , - 1201 , - 1320 , - 1927 , - 3022 , - 701 , - 2772 , - 1427 , - 570 , - 201 , - 320 , - 927 , - 2022 , - 3605 , - 1772 , - 427 , - 3474 , - 3105 , - 3224 , - 3831 , - 1022 , - 2605 , - 772 , - 3331 , - 2474 , - 2105 , - 2224 , - 2831 , - 22 , - 1605 , - 3676 , - 2331 , - 1474 , - 1105 , - 1224 , - 1831 , - 2926 , - 605 , - 2676 , - 1331 , - 474 , - 105 , - 224 , - 831 , - 1926 , - 3509 , - 1676 , - 331 , - 3378 , - 3009 , - 3128 , - 3735 , - 926 , - 2509 , - 676 , - 3235 , - 2378 , - 2009 , - 2128 , - 2735 , - 3830 , - 1509 , - 3580 , - 2235 , - 1378 , - 1009 , - 1128 , - 1735 , - 2830 , - 509 , - 2580 , - 1235 , - 378 , - 9 , - 128 , - 735 , - 1830 , - 3413 , - 1580 , - 235 , - 3282 , - 2913 , - 3032 , - 3639 , - 830 , - 2413 , - 580 , - 3139 , - 2282 , - 1913 , - 2032 , - 2639 , - 3734 , - 1413 , - 3484 , - 2139 , - 1282 , - 913 , - 1032 , - 1639 , - 2734 , - 413 , - 2484 , - 1139 , - 282 , - 3817 , - 32 , - 639 , - 1734 , - 3317 , - 1484 , - 139 , - 3186 , - 2817 , - 2936 , - 3543 , - 734 , - 2317 , - 484 , - 3043 , - 2186 , - 1817 , - 1936 , - 2543 , - 3638 , - 1317 , - 3388 , - 2043 , - 1186 , - 817 , - 936 , - 1543 , - 2638 , - 317 , - 2388 , - 1043 , - 186 , - 3721 , - 3840 , - 543 , - 1638 , - 3221 , - 1388 , - 43 , - 3090 , - 2721 , - 2840 , - 3447 , - 638 , - 2221 , - 388 , - 2947 , - 2090 , - 1721 , - 1840 , - 2447 , - 3542 , - 1221 , - 3292 , - 1947 , - 1090 , - 721 , - 840 , - 1447 , - 2542 , - 221 , - 2292 , - 947 , - 90 , - 3625 , - 3744 , - 447 , - 1542 , - 3125 , - 1292 , - 3851 , - 2994 , - 2625 , - 2744 , - 3351 , - 542 , - 2125 , - 292 , - 2851 , - 1994 , - 1625 , - 1744 , - 2351 , - 3446 , - 1125 , - 3196 , - 1851 , - 994 , - 625 , - 744 , - 1351 , - 2446 , - 125 , - 2196 , - 851 , - 3898 , - 3529 , - 3648 , - 351 , - 1446 , - 3029 , - 1196 , - 3755 , - 2898 , - 2529 , - 2648 , - 3255 , - 446 , - 2029 , - 196 , - 2755 , - 1898 , - 1529 , - 1648 , - 2255 , - 3350 , - 1029 , - 3100 , - 1755 , - 898 , - 529 , - 648 , - 1255 , - 2350 , - 29 , - 2100 , - 755 , - 3802 , - 3433 , - 3552 , - 255 , - 1350 , - 2933 , - 1100 , - 3659 , - 2802 , - 2433 , - 2552 , - 3159 , - 350 , - 1933 , - 100 , - 2659 , - 1802 , - 1433 , - 1552 , - 2159 , - 3254 , - 933 , - 3004 , - 1659 , - 802 , - 433 , - 552 , - 1159 , - 2254 , - 3837 , - 2004 , - 659 , - 3706 , - 3337 , - 3456 , - 159 , - 1254 , - 2837 , - 1004 , - 3563 , - 2706 , - 2337 , - 2456 , - 3063 , - 254 , - 1837 , - 4 , - 2563 , - 1706 , - 1337 , - 1456 , - 2063 , - 3158 , - 837 , - 2908 , - 1563 , - 706 , - 337 , - 456 , - 1063 , - 2158 , - 3741 , - 1908 , - 563 , - 3610 , - 3241 , - 3360 , - 63 , - 1158 , - 2741 , - 908 , - 3467 , - 2610 , - 2241 , - 2360 , - 2967 , - 158 , - 1741 , - 3812 , - 2467 , - 1610 , - 1241 , - 1360 , - 1967 , - 3062 , - 741 , - 2812 , - 1467 , - 610 , - 241 , - 360 , - 967 , - 2062 , - 3645 , - 1812 , - 467 , - 3514 , - 3145 , - 3264 , - 3871 , - 1062 , - 2645 , - 812 , - 3371 , - 2514 , - 2145 , - 2264 , - 2871 , - 62 , - 1645 , - 3716 , - 2371 , - 1514 , - 1145 , - 1264 , - 1871 , - 2966 , - 645 , - 2716 , - 1371 , - 514 , - 145 , - 264 , - 871 , - 1966 , - 3549 , - 1716 , - 371 , - 3418 , - 3049 , - 3168 , - 3775 , - 966 , - 2549 , - 716 , - 3275 , - 2418 , - 2049 , - 2168 , - 2775 , - 3870 , - 1549 , - 3620 , - 2275 , - 1418 , - 1049 , - 1168 , - 1775 , - 2870 , - 549 , - 2620 , - 1275 , - 418 , - 49 , - 168 , - 775 , - 1870 , - 3453 , - 1620 , - 275 , - 3322 , - 2953 , - 3072 , - 3679 , - 870 , - 2453 , - 620 , - 3179 , - 2322 , - 1953 , - 2072 , - 2679 , - 3774 , - 1453 , - 3524 , - 2179 , - 1322 , - 953 , - 1072 , - 1679 , - 2774 , - 453 , - 2524 , - 1179 , - 322 , - 3857 , - 72 , - 679 , - 1774 , - 3357 , - 1524 , - 179 , - 3226 , - 2857 , - 2976 , - 3583 , - 774 , - 2357 , - 524 , - 3083 , - 2226 , - 1857 , - 1976 , - 2583 , - 3678 , - 1357 , - 3428 , - 2083 , - 1226 , - 857 , - 976 , - 1583 , - 2678 , - 357 , - 2428 , - 1083 , - 226 , - 3761 , - 3880 , - 583 , - 1678 , - 3261 , - 1428 , - 83 , - 3130 , - 2761 , - 2880 , - 3487 , - 678 , - 2261 , - 428 , - 2987 , - 2130 , - 1761 , - 1880 , - 2487 , - 3582 , - 1261 , - 3332 , - 1987 , - 1130 , - 761 , - 880 , - 1487 , - 2582 , - 261 , - 2332 , - 987 , - 130 , - 3665 , - 3784 , - 487 , - 1582 , - 3165 , - 1332 , - 3891 , - 3034 , - 2665 , - 2784 , - 3391 , - 582 , - 2165 , - 332 , - 2891 , - 2034 , - 1665 , - 1784 , - 2391 , - 3486 , - 1165 , - 3236 , - 1891 , - 1034 , - 665 , - 784 , - 1391 , - 2486 , - 165 , - 2236 , - 891 , - 34 , - 3569 , - 3688 , - 391 , - 1486 , - 3069 , - 1236 , - 3795 , - 2938 , - 2569 , - 2688 , - 3295 , - 486 , - 2069 , - 236 , - 2795 , - 1938 , - 1569 , - 1688 , - 2295 , - 3390 , - 1069 , - 3140 , - 1795 , - 938 , - 569 , - 688 , - 1295 , - 2390 , - 69 , - 2140 , - 795 , - 3842 , - 3473 , - 3592 , - 295 , - 1390 , - 2973 , - 1140 , - 3699 , - 2842 , - 2473 , - 2592 , - 3199 , - 390 , - 1973 , - 140 , - 2699 , - 1842 , - 1473 , - 1592 , - 2199 , - 3294 , - 973 , - 3044 , - 1699 , - 842 , - 473 , - 592 , - 1199 , - 2294 , - 3877 , - 2044 , - 699 , - 3746 , - 3377 , - 3496 , - 199 , - 1294 , - 2877 , - 1044 , - 3603 , - 2746 , - 2377 , - 2496 , - 3103 , - 294 , - 1877 , - 44 , - 2603 , - 1746 , - 1377 , - 1496 , - 2103 , - 3198 , - 877 , - 2948 , - 1603 , - 746 , - 377 , - 496 , - 1103 , - 2198 , - 3781 , - 1948 , - 603 , - 3650 , - 3281 , - 3400 , - 103 , - 1198 , - 2781 , - 948 , - 3507 , - 2650 , - 2281 , - 2400 , - 3007 , - 198 , - 1781 , - 3852 , - 2507 , - 1650 , - 1281 , - 1400 , - 2007 , - 3102 , - 781 , - 2852 , - 1507 , - 650 , - 281 , - 400 , - 1007 , - 2102 , - 3685 , - 1852 , - 507 , - 3554 , - 3185 , - 3304 , - 7 , - 1102 , - 2685 , - 852 , - 3411 , - 2554 , - 2185 , - 2304 , - 2911 , - 102 , - 1685 , - 3756 , - 2411 , - 1554 , - 1185 , - 1304 , - 1911 , - 3006 , - 685 , - 2756 , - 1411 , - 554 , - 185 , - 304 , - 911 , - 2006 , - 3589 , - 1756 , - 411 , - 3458 , - 3089 , - 3208 , - 3815 , - 1006 , - 2589 , - 756 , - 3315 , - 2458 , - 2089 , - 2208 , - 2815 , - 6 , - 1589 , - 3660 , - 2315 , - 1458 , - 1089 , - 1208 , - 1815 , - 2910 , - 589 , - 2660 , - 1315 , - 458 , - 89 , - 208 , - 815 , - 1910 , - 3493 , - 1660 , - 315 , - 3362 , - 2993 , - 3112 , - 3719 , - 910 , - 2493 , - 660 , - 3219 , - 2362 , - 1993 , - 2112 , - 2719 , - 3814 , - 1493 , - 3564 , - 2219 , - 1362 , - 993 , - 1112 , - 1719 , - 2814 , - 493 , - 2564 , - 1219 , - 362 , - 3897 , - 112 , - 719 , - 1814 , - 3397 , - 1564 , - 219 , - 3266 , - 2897 , - 3016 , - 3623 , - 814 , - 2397 , - 564 , - 3123 , - 2266 , - 1897 , - 2016 , - 2623 , - 3718 , - 1397 , - 3468 , - 2123 , - 1266 , - 897 , - 1016 , - 1623 , - 2718 , - 397 , - 2468 , - 1123 , - 266 , - 3801 , - 16 , - 623 , - 1718 , - 3301 , - 1468 , - 123 , - 3170 , - 2801 , - 2920 , - 3527 , - 718 , - 2301 , - 468 , - 3027 , - 2170 , - 1801 , - 1920 , - 2527 , - 3622 , - 1301 , - 3372 , - 2027 , - 1170 , - 801 , - 920 , - 1527 , - 2622 , - 301 , - 2372 , - 1027 , - 170 , - 3705 , - 3824 , - 527 , - 1622 , - 3205 , - 1372 , - 27 , - 3074 , - 2705 , - 2824 , - 3431 , - 622 , - 2205 , - 372 , - 2931 , - 2074 , - 1705 , - 1824 , - 2431 , - 3526 , - 1205 , - 3276 , - 1931 , - 1074 , - 705 , - 824 , - 1431 , - 2526 , - 205 , - 2276 , - 931 , - 74 , - 3609 , - 3728 , - 431 , - 1526 , - 3109 , - 1276 , - 3835 , - 2978 , - 2609 , - 2728 , - 3335 , - 526 , - 2109 , - 276 , - 2835 , - 1978 , - 1609 , - 1728 , - 2335 , - 3430 , - 1109 , - 3180 , - 1835 , - 978 , - 609 , - 728 , - 1335 , - 2430 , - 109 , - 2180 , - 835 , - 3882 , - 3513 , - 3632 , - 335 , - 1430 , - 3013 , - 1180 , - 3739 , - 2882 , - 2513 , - 2632 , - 3239 , - 430 , - 2013 , - 180 , - 2739 , - 1882 , - 1513 , - 1632 , - 2239 , - 3334 , - 1013 , - 3084 , - 1739 , - 882 , - 513 , - 632 , - 1239 , - 2334 , - 13 , - 2084 , - 739 , - 3786 , - 3417 , - 3536 , - 239 , - 1334 , - 2917 , - 1084 , - 3643 , - 2786 , - 2417 , - 2536 , - 3143 , - 334 , - 1917 , - 84 , - 2643 , - 1786 , - 1417 , - 1536 , - 2143 , - 3238 , - 917 , - 2988 , - 1643 , - 786 , - 417 , - 536 , - 1143 , - 2238 , - 3821 , - 1988 , - 643 , - 3690 , - 3321 , - 3440 , - 143 , - 1238 , - 2821 , - 988 , - 3547 , - 2690 , - 2321 , - 2440 , - 3047 , - 238 , - 1821 , - 3892 , - 2547 , - 1690 , - 1321 , - 1440 , - 2047 , - 3142 , - 821 , - 2892 , - 1547 , - 690 , - 321 , - 440 , - 1047 , - 2142 , - 3725 , - 1892 , - 547 , - 3594 , - 3225 , - 3344 , - 47 , - 1142 , - 2725 , - 892 , - 3451 , - 2594 , - 2225 , - 2344 , - 2951 , - 142 , - 1725 , - 3796 , - 2451 , - 1594 , - 1225 , - 1344 , - 1951 , - 3046 , - 725 , - 2796 , - 1451 , - 594 , - 225 , - 344 , - 951 , - 2046 , - 3629 , - 1796 , - 451 , - 3498 , - 3129 , - 3248 , - 3855 , - 1046 , - 2629 , - 796 , - 3355 , - 2498 , - 2129 , - 2248 , - 2855 , - 46 , - 1629 , - 3700 , - 2355 , - 1498 , - 1129 , - 1248 , - 1855 , - 2950 , - 629 , - 2700 , - 1355 , - 498 , - 129 , - 248 , - 855 , - 1950 , - 3533 , - 1700 , - 355 , - 3402 , - 3033 , - 3152 , - 3759 , - 950 , - 2533 , - 700 , - 3259 , - 2402 , - 2033 , - 2152 , - 2759 , - 3854 , - 1533 , - 3604 , - 2259 , - 1402 , - 1033 , - 1152 , - 1759 , - 2854 , - 533 , - 2604 , - 1259 , - 402 , - 33 , - 152 , - 759 , - 1854 , - 3437 , - 1604 , - 259 , - 3306 , - 2937 , - 3056 , - 3663 , - 854 , - 2437 , - 604 , - 3163 , - 2306 , - 1937 , - 2056 , - 2663 , - 3758 , - 1437 , - 3508 , - 2163 , - 1306 , - 937 , - 1056 , - 1663 , - 2758 , - 437 , - 2508 , - 1163 , - 306 , - 3841 , - 56 , - 663 , - 1758 , - 3341 , - 1508 , - 163 , - 3210 , - 2841 , - 2960 , - 3567 , - 758 , - 2341 , - 508 , - 3067 , - 2210 , - 1841 , - 1960 , - 2567 , - 3662 , - 1341 , - 3412 , - 2067 , - 1210 , - 841 , - 960 , - 1567 , - 2662 , - 341 , - 2412 , - 1067 , - 210 , - 3745 , - 3864 , - 567 , - 1662 , - 3245 , - 1412 , - 67 , - 3114 , - 2745 , - 2864 , - 3471 , - 662 , - 2245 , - 412 , - 2971 , - 2114 , - 1745 , - 1864 , - 2471 , - 3566 , - 1245 , - 3316 , - 1971 , - 1114 , - 745 , - 864 , - 1471 , - 2566 , - 245 , - 2316 , - 971 , - 114 , - 3649 , - 3768 , - 471 , - 1566 , - 3149 , - 1316 , - 3875 , - 3018 , - 2649 , - 2768 , - 3375 , - 566 , - 2149 , - 316 , - 2875 , - 2018 , - 1649 , - 1768 , - 2375 , - 3470 , - 1149 , - 3220 , - 1875 , - 1018 , - 649 , - 768 , - 1375 , - 2470 , - 149 , - 2220 , - 875 , - 18 , - 3553 , - 3672 , - 375 , - 1470 , - 3053 , - 1220 , - 3779 , - 2922 , - 2553 , - 2672 , - 3279 , - 470 , - 2053 , - 220 , - 2779 , - 1922 , - 1553 , - 1672 , - 2279 , - 3374 , - 1053 , - 3124 , - 1779 , - 922 , - 553 , - 672 , - 1279 , - 2374 , - 53 , - 2124 , - 779 , - 3826 , - 3457 , - 3576 , - 279 , - 1374 , - 2957 , - 1124 , - 3683 , - 2826 , - 2457 , - 2576 , - 3183 , - 374 , - 1957 , - 124 , - 2683 , - 1826 , - 1457 , - 1576 , - 2183 , - 3278 , - 957 , - 3028 , - 1683 , - 826 , - 457 , - 576 , - 1183 , - 2278 , - 3861 , - 2028 , - 683 , - 3730 , - 3361 , - 3480 , - 183 , - 1278 , - 2861 , - 1028 , - 3587 , - 2730 , - 2361 , - 2480 , - 3087 , - 278 , - 1861 , - 28 , - 2587 , - 1730 , - 1361 , - 1480 , - 2087 , - 3182 , - 861 , - 2932 , - 1587 , - 730 , - 361 , - 480 , - 1087 , - 2182 , - 3765 , - 1932 , - 587 , - 3634 , - 3265 , - 3384 , - 87 , - 1182 , - 2765 , - 932 , - 3491 , - 2634 , - 2265 , - 2384 , - 2991 , - 182 , - 1765 , - 3836 , - 2491 , - 1634 , - 1265 , - 1384 , - 1991 , - 3086 , - 765 , - 2836 , - 1491 , - 634 , - 265 , - 384 , - 991 , - 2086 , - 3669 , - 1836 , - 491 , - 3538 , - 3169 , - 3288 , - 3895 , - 1086 , - 2669 , - 836 , - 3395 , - 2538 , - 2169 , - 2288 , - 2895 , - 86 , - 1669 , - 3740 , - 2395 , - 1538 , - 1169 , - 1288 , - 1895 , - 2990 , - 669 , - 2740 , - 1395 , - 538 , - 169 , - 288 , - 895 , - 1990 , - 3573 , - 1740 , - 395 , - 3442 , - 3073 , - 3192 , - 3799 , - 990 , - 2573 , - 740 , - 3299 , - 2442 , - 2073 , - 2192 , - 2799 , - 3894 , - 1573 , - 3644 , - 2299 , - 1442 , - 1073 , - 1192 , - 1799 , - 2894 , - 573 , - 2644 , - 1299 , - 442 , - 73 , - 192 , - 799 , - 1894 , - 3477 , - 1644 , - 299 , - 3346 , - 2977 , - 3096 , - 3703 , - 894 , - 2477 , - 644 , - 3203 , - 2346 , - 1977 , - 2096 , - 2703 , - 3798 , - 1477 , - 3548 , - 2203 , - 1346 , - 977 , - 1096 , - 1703 , - 2798 , - 477 , - 2548 , - 1203 , - 346 , - 3881 , - 96 , - 703 , - 1798 , - 3381 , - 1548 , - 203 , - 3250 , - 2881 , - 3000 , - 3607 , - 798 , - 2381 , - 548 , - 3107 , - 2250 , - 1881 , - 2000 , - 2607 , - 3702 , - 1381 , - 3452 , - 2107 , - 1250 , - 881 , - 1000 , - 1607 , - 2702 , - 381 , - 2452 , - 1107 , - 250 , - 3785 , - 0 , - 623 , - 1742 , - 3357 , - 1500 , - 139 , - 3242 , - 2873 , - 3000 , - 3623 , - 774 , - 2389 , - 532 , - 3139 , - 2274 , - 1905 , - 2032 , - 2655 , - 3774 , - 1421 , - 3532 , - 2171 , - 1306 , - 937 , - 1064 , - 1687 , - 2806 , - 453 , - 2564 , - 1203 , - 338 , - 3937 , - 96 , - 719 , - 1838 , - 3453 , - 1596 , - 235 , - 3338 , - 2969 , - 3096 , - 3719 , - 870 , - 2485 , - 628 , - 3235 , - 2370 , - 2001 , - 2128 , - 2751 , - 3870 , - 1517 , - 3628 , - 2267 , - 1402 , - 1033 , - 1160 , - 1783 , - 2902 , - 549 , - 2660 , - 1299 , - 434 , - 65 , - 192 , - 815 , - 1934 , - 3549 , - 1692 , - 331 , - 3434 , - 3065 , - 3192 , - 3815 , - 966 , - 2581 , - 724 , - 3331 , - 2466 , - 2097 , - 2224 , - 2847 , - 3966 , - 1613 , - 3724 , - 2363 , - 1498 , - 1129 , - 1256 , - 1879 , - 2998 , - 645 , - 2756 , - 1395 , - 530 , - 161 , - 288 , - 911 , - 2030 , - 3645 , - 1788 , - 427 , - 3530 , - 3161 , - 3288 , - 3911 , - 1062 , - 2677 , - 820 , - 3427 , - 2562 , - 2193 , - 2320 , - 2943 , - 94 , - 1709 , - 3820 , - 2459 , - 1594 , - 1225 , - 1352 , - 1975 , - 3094 , - 741 , - 2852 , - 1491 , - 626 , - 257 , - 384 , - 1007 , - 2126 , - 3741 , - 1884 , - 523 , - 3626 , - 3257 , - 3384 , - 39 , - 1158 , - 2773 , - 916 , - 3523 , - 2658 , - 2289 , - 2416 , - 3039 , - 190 , - 1805 , - 3916 , - 2555 , - 1690 , - 1321 , - 1448 , - 2071 , - 3190 , - 837 , - 2948 , - 1587 , - 722 , - 353 , - 480 , - 1103 , - 2222 , - 3837 , - 1980 , - 619 , - 3722 , - 3353 , - 3480 , - 135 , - 1254 , - 2869 , - 1012 , - 3619 , - 2754 , - 2385 , - 2512 , - 3135 , - 286 , - 1901 , - 44 , - 2651 , - 1786 , - 1417 , - 1544 , - 2167 , - 3286 , - 933 , - 3044 , - 1683 , - 818 , - 449 , - 576 , - 1199 , - 2318 , - 3933 , - 2076 , - 715 , - 3818 , - 3449 , - 3576 , - 231 , - 1350 , - 2965 , - 1108 , - 3715 , - 2850 , - 2481 , - 2608 , - 3231 , - 382 , - 1997 , - 140 , - 2747 , - 1882 , - 1513 , - 1640 , - 2263 , - 3382 , - 1029 , - 3140 , - 1779 , - 914 , - 545 , - 672 , - 1295 , - 2414 , - 61 , - 2172 , - 811 , - 3914 , - 3545 , - 3672 , - 327 , - 1446 , - 3061 , - 1204 , - 3811 , - 2946 , - 2577 , - 2704 , - 3327 , - 478 , - 2093 , - 236 , - 2843 , - 1978 , - 1609 , - 1736 , - 2359 , - 3478 , - 1125 , - 3236 , - 1875 , - 1010 , - 641 , - 768 , - 1391 , - 2510 , - 157 , - 2268 , - 907 , - 42 , - 3641 , - 3768 , - 423 , - 1542 , - 3157 , - 1300 , - 3907 , - 3042 , - 2673 , - 2800 , - 3423 , - 574 , - 2189 , - 332 , - 2939 , - 2074 , - 1705 , - 1832 , - 2455 , - 3574 , - 1221 , - 3332 , - 1971 , - 1106 , - 737 , - 864 , - 1487 , - 2606 , - 253 , - 2364 , - 1003 , - 138 , - 3737 , - 3864 , - 519 , - 1638 , - 3253 , - 1396 , - 35 , - 3138 , - 2769 , - 2896 , - 3519 , - 670 , - 2285 , - 428 , - 3035 , - 2170 , - 1801 , - 1928 , - 2551 , - 3670 , - 1317 , - 3428 , - 2067 , - 1202 , - 833 , - 960 , - 1583 , - 2702 , - 349 , - 2460 , - 1099 , - 234 , - 3833 , - 3960 , - 615 , - 1734 , - 3349 , - 1492 , - 131 , - 3234 , - 2865 , - 2992 , - 3615 , - 766 , - 2381 , - 524 , - 3131 , - 2266 , - 1897 , - 2024 , - 2647 , - 3766 , - 1413 , - 3524 , - 2163 , - 1298 , - 929 , - 1056 , - 1679 , - 2798 , - 445 , - 2556 , - 1195 , - 330 , - 3929 , - 88 , - 711 , - 1830 , - 3445 , - 1588 , - 227 , - 3330 , - 2961 , - 3088 , - 3711 , - 862 , - 2477 , - 620 , - 3227 , - 2362 , - 1993 , - 2120 , - 2743 , - 3862 , - 1509 , - 3620 , - 2259 , - 1394 , - 1025 , - 1152 , - 1775 , - 2894 , - 541 , - 2652 , - 1291 , - 426 , - 57 , - 184 , - 807 , - 1926 , - 3541 , - 1684 , - 323 , - 3426 , - 3057 , - 3184 , - 3807 , - 958 , - 2573 , - 716 , - 3323 , - 2458 , - 2089 , - 2216 , - 2839 , - 3958 , - 1605 , - 3716 , - 2355 , - 1490 , - 1121 , - 1248 , - 1871 , - 2990 , - 637 , - 2748 , - 1387 , - 522 , - 153 , - 280 , - 903 , - 2022 , - 3637 , - 1780 , - 419 , - 3522 , - 3153 , - 3280 , - 3903 , - 1054 , - 2669 , - 812 , - 3419 , - 2554 , - 2185 , - 2312 , - 2935 , - 86 , - 1701 , - 3812 , - 2451 , - 1586 , - 1217 , - 1344 , - 1967 , - 3086 , - 733 , - 2844 , - 1483 , - 618 , - 249 , - 376 , - 999 , - 2118 , - 3733 , - 1876 , - 515 , - 3618 , - 3249 , - 3376 , - 31 , - 1150 , - 2765 , - 908 , - 3515 , - 2650 , - 2281 , - 2408 , - 3031 , - 182 , - 1797 , - 3908 , - 2547 , - 1682 , - 1313 , - 1440 , - 2063 , - 3182 , - 829 , - 2940 , - 1579 , - 714 , - 345 , - 472 , - 1095 , - 2214 , - 3829 , - 1972 , - 611 , - 3714 , - 3345 , - 3472 , - 127 , - 1246 , - 2861 , - 1004 , - 3611 , - 2746 , - 2377 , - 2504 , - 3127 , - 278 , - 1893 , - 36 , - 2643 , - 1778 , - 1409 , - 1536 , - 2159 , - 3278 , - 925 , - 3036 , - 1675 , - 810 , - 441 , - 568 , - 1191 , - 2310 , - 3925 , - 2068 , - 707 , - 3810 , - 3441 , - 3568 , - 223 , - 1342 , - 2957 , - 1100 , - 3707 , - 2842 , - 2473 , - 2600 , - 3223 , - 374 , - 1989 , - 132 , - 2739 , - 1874 , - 1505 , - 1632 , - 2255 , - 3374 , - 1021 , - 3132 , - 1771 , - 906 , - 537 , - 664 , - 1287 , - 2406 , - 53 , - 2164 , - 803 , - 3906 , - 3537 , - 3664 , - 319 , - 1438 , - 3053 , - 1196 , - 3803 , - 2938 , - 2569 , - 2696 , - 3319 , - 470 , - 2085 , - 228 , - 2835 , - 1970 , - 1601 , - 1728 , - 2351 , - 3470 , - 1117 , - 3228 , - 1867 , - 1002 , - 633 , - 760 , - 1383 , - 2502 , - 149 , - 2260 , - 899 , - 34 , - 3633 , - 3760 , - 415 , - 1534 , - 3149 , - 1292 , - 3899 , - 3034 , - 2665 , - 2792 , - 3415 , - 566 , - 2181 , - 324 , - 2931 , - 2066 , - 1697 , - 1824 , - 2447 , - 3566 , - 1213 , - 3324 , - 1963 , - 1098 , - 729 , - 856 , - 1479 , - 2598 , - 245 , - 2356 , - 995 , - 130 , - 3729 , - 3856 , - 511 , - 1630 , - 3245 , - 1388 , - 27 , - 3130 , - 2761 , - 2888 , - 3511 , - 662 , - 2277 , - 420 , - 3027 , - 2162 , - 1793 , - 1920 , - 2543 , - 3662 , - 1309 , - 3420 , - 2059 , - 1194 , - 825 , - 952 , - 1575 , - 2694 , - 341 , - 2452 , - 1091 , - 226 , - 3825 , - 3952 , - 607 , - 1726 , - 3341 , - 1484 , - 123 , - 3226 , - 2857 , - 2984 , - 3607 , - 758 , - 2373 , - 516 , - 3123 , - 2258 , - 1889 , - 2016 , - 2639 , - 3758 , - 1405 , - 3516 , - 2155 , - 1290 , - 921 , - 1048 , - 1671 , - 2790 , - 437 , - 2548 , - 1187 , - 322 , - 3921 , - 80 , - 703 , - 1822 , - 3437 , - 1580 , - 219 , - 3322 , - 2953 , - 3080 , - 3703 , - 854 , - 2469 , - 612 , - 3219 , - 2354 , - 1985 , - 2112 , - 2735 , - 3854 , - 1501 , - 3612 , - 2251 , - 1386 , - 1017 , - 1144 , - 1767 , - 2886 , - 533 , - 2644 , - 1283 , - 418 , - 49 , - 176 , - 799 , - 1918 , - 3533 , - 1676 , - 315 , - 3418 , - 3049 , - 3176 , - 3799 , - 950 , - 2565 , - 708 , - 3315 , - 2450 , - 2081 , - 2208 , - 2831 , - 3950 , - 1597 , - 3708 , - 2347 , - 1482 , - 1113 , - 1240 , - 1863 , - 2982 , - 629 , - 2740 , - 1379 , - 514 , - 145 , - 272 , - 895 , - 2014 , - 3629 , - 1772 , - 411 , - 3514 , - 3145 , - 3272 , - 3895 , - 1046 , - 2661 , - 804 , - 3411 , - 2546 , - 2177 , - 2304 , - 2927 , - 78 , - 1693 , - 3804 , - 2443 , - 1578 , - 1209 , - 1336 , - 1959 , - 3078 , - 725 , - 2836 , - 1475 , - 610 , - 241 , - 368 , - 991 , - 2110 , - 3725 , - 1868 , - 507 , - 3610 , - 3241 , - 3368 , - 23 , - 1142 , - 2757 , - 900 , - 3507 , - 2642 , - 2273 , - 2400 , - 3023 , - 174 , - 1789 , - 3900 , - 2539 , - 1674 , - 1305 , - 1432 , - 2055 , - 3174 , - 821 , - 2932 , - 1571 , - 706 , - 337 , - 464 , - 1087 , - 2206 , - 3821 , - 1964 , - 603 , - 3706 , - 3337 , - 3464 , - 119 , - 1238 , - 2853 , - 996 , - 3603 , - 2738 , - 2369 , - 2496 , - 3119 , - 270 , - 1885 , - 28 , - 2635 , - 1770 , - 1401 , - 1528 , - 2151 , - 3270 , - 917 , - 3028 , - 1667 , - 802 , - 433 , - 560 , - 1183 , - 2302 , - 3917 , - 2060 , - 699 , - 3802 , - 3433 , - 3560 , - 215 , - 1334 , - 2949 , - 1092 , - 3699 , - 2834 , - 2465 , - 2592 , - 3215 , - 366 , - 1981 , - 124 , - 2731 , - 1866 , - 1497 , - 1624 , - 2247 , - 3366 , - 1013 , - 3124 , - 1763 , - 898 , - 529 , - 656 , - 1279 , - 2398 , - 45 , - 2156 , - 795 , - 3898 , - 3529 , - 3656 , - 311 , - 1430 , - 3045 , - 1188 , - 3795 , - 2930 , - 2561 , - 2688 , - 3311 , - 462 , - 2077 , - 220 , - 2827 , - 1962 , - 1593 , - 1720 , - 2343 , - 3462 , - 1109 , - 3220 , - 1859 , - 994 , - 625 , - 752 , - 1375 , - 2494 , - 141 , - 2252 , - 891 , - 26 , - 3625 , - 3752 , - 407 , - 1526 , - 3141 , - 1284 , - 3891 , - 3026 , - 2657 , - 2784 , - 3407 , - 558 , - 2173 , - 316 , - 2923 , - 2058 , - 1689 , - 1816 , - 2439 , - 3558 , - 1205 , - 3316 , - 1955 , - 1090 , - 721 , - 848 , - 1471 , - 2590 , - 237 , - 2348 , - 987 , - 122 , - 3721 , - 3848 , - 503 , - 1622 , - 3237 , - 1380 , - 19 , - 3122 , - 2753 , - 2880 , - 3503 , - 654 , - 2269 , - 412 , - 3019 , - 2154 , - 1785 , - 1912 , - 2535 , - 3654 , - 1301 , - 3412 , - 2051 , - 1186 , - 817 , - 944 , - 1567 , - 2686 , - 333 , - 2444 , - 1083 , - 218 , - 3817 , - 3944 , - 599 , - 1718 , - 3333 , - 1476 , - 115 , - 3218 , - 2849 , - 2976 , - 3599 , - 750 , - 2365 , - 508 , - 3115 , - 2250 , - 1881 , - 2008 , - 2631 , - 3750 , - 1397 , - 3508 , - 2147 , - 1282 , - 913 , - 1040 , - 1663 , - 2782 , - 429 , - 2540 , - 1179 , - 314 , - 3913 , - 72 , - 695 , - 1814 , - 3429 , - 1572 , - 211 , - 3314 , - 2945 , - 3072 , - 3695 , - 846 , - 2461 , - 604 , - 3211 , - 2346 , - 1977 , - 2104 , - 2727 , - 3846 , - 1493 , - 3604 , - 2243 , - 1378 , - 1009 , - 1136 , - 1759 , - 2878 , - 525 , - 2636 , - 1275 , - 410 , - 41 , - 168 , - 791 , - 1910 , - 3525 , - 1668 , - 307 , - 3410 , - 3041 , - 3168 , - 3791 , - 942 , - 2557 , - 700 , - 3307 , - 2442 , - 2073 , - 2200 , - 2823 , - 3942 , - 1589 , - 3700 , - 2339 , - 1474 , - 1105 , - 1232 , - 1855 , - 2974 , - 621 , - 2732 , - 1371 , - 506 , - 137 , - 264 , - 887 , - 2006 , - 3621 , - 1764 , - 403 , - 3506 , - 3137 , - 3264 , - 3887 , - 1038 , - 2653 , - 796 , - 3403 , - 2538 , - 2169 , - 2296 , - 2919 , - 70 , - 1685 , - 3796 , - 2435 , - 1570 , - 1201 , - 1328 , - 1951 , - 3070 , - 717 , - 2828 , - 1467 , - 602 , - 233 , - 360 , - 983 , - 2102 , - 3717 , - 1860 , - 499 , - 3602 , - 3233 , - 3360 , - 15 , - 1134 , - 2749 , - 892 , - 3499 , - 2634 , - 2265 , - 2392 , - 3015 , - 166 , - 1781 , - 3892 , - 2531 , - 1666 , - 1297 , - 1424 , - 2047 , - 3166 , - 813 , - 2924 , - 1563 , - 698 , - 329 , - 456 , - 1079 , - 2198 , - 3813 , - 1956 , - 595 , - 3698 , - 3329 , - 3456 , - 111 , - 1230 , - 2845 , - 988 , - 3595 , - 2730 , - 2361 , - 2488 , - 3111 , - 262 , - 1877 , - 20 , - 2627 , - 1762 , - 1393 , - 1520 , - 2143 , - 3262 , - 909 , - 3020 , - 1659 , - 794 , - 425 , - 552 , - 1175 , - 2294 , - 3909 , - 2052 , - 691 , - 3794 , - 3425 , - 3552 , - 207 , - 1326 , - 2941 , - 1084 , - 3691 , - 2826 , - 2457 , - 2584 , - 3207 , - 358 , - 1973 , - 116 , - 2723 , - 1858 , - 1489 , - 1616 , - 2239 , - 3358 , - 1005 , - 3116 , - 1755 , - 890 , - 521 , - 648 , - 1271 , - 2390 , - 37 , - 2148 , - 787 , - 3890 , - 3521 , - 3648 , - 303 , - 1422 , - 3037 , - 1180 , - 3787 , - 2922 , - 2553 , - 2680 , - 3303 , - 454 , - 2069 , - 212 , - 2819 , - 1954 , - 1585 , - 1712 , - 2335 , - 3454 , - 1101 , - 3212 , - 1851 , - 986 , - 617 , - 744 , - 1367 , - 2486 , - 133 , - 2244 , - 883 , - 18 , - 3617 , - 3744 , - 399 , - 1518 , - 3133 , - 1276 , - 3883 , - 3018 , - 2649 , - 2776 , - 3399 , - 550 , - 2165 , - 308 , - 2915 , - 2050 , - 1681 , - 1808 , - 2431 , - 3550 , - 1197 , - 3308 , - 1947 , - 1082 , - 713 , - 840 , - 1463 , - 2582 , - 229 , - 2340 , - 979 , - 114 , - 3713 , - 3840 , - 495 , - 1614 , - 3229 , - 1372 , - 11 , - 3114 , - 2745 , - 2872 , - 3495 , - 646 , - 2261 , - 404 , - 3011 , - 2146 , - 1777 , - 1904 , - 2527 , - 3646 , - 1293 , - 3404 , - 2043 , - 1178 , - 809 , - 936 , - 1559 , - 2678 , - 325 , - 2436 , - 1075 , - 210 , - 3809 , - 3936 , - 591 , - 1710 , - 3325 , - 1468 , - 107 , - 3210 , - 2841 , - 2968 , - 3591 , - 742 , - 2357 , - 500 , - 3107 , - 2242 , - 1873 , - 2000 , - 2623 , - 3742 , - 1389 , - 3500 , - 2139 , - 1274 , - 905 , - 1032 , - 1655 , - 2774 , - 421 , - 2532 , - 1171 , - 306 , - 3905 , - 64 , - 687 , - 1806 , - 3421 , - 1564 , - 203 , - 3306 , - 2937 , - 3064 , - 3687 , - 838 , - 2453 , - 596 , - 3203 , - 2338 , - 1969 , - 2096 , - 2719 , - 3838 , - 1485 , - 3596 , - 2235 , - 1370 , - 1001 , - 1128 , - 1751 , - 2870 , - 517 , - 2628 , - 1267 , - 402 , - 33 , - 160 , - 783 , - 1902 , - 3517 , - 1660 , - 299 , - 3402 , - 3033 , - 3160 , - 3783 , - 934 , - 2549 , - 692 , - 3299 , - 2434 , - 2065 , - 2192 , - 2815 , - 3934 , - 1581 , - 3692 , - 2331 , - 1466 , - 1097 , - 1224 , - 1847 , - 2966 , - 613 , - 2724 , - 1363 , - 498 , - 129 , - 256 , - 879 , - 1998 , - 3613 , - 1756 , - 395 , - 3498 , - 3129 , - 3256 , - 3879 , - 1030 , - 2645 , - 788 , - 3395 , - 2530 , - 2161 , - 2288 , - 2911 , - 62 , - 1677 , - 3788 , - 2427 , - 1562 , - 1193 , - 1320 , - 1943 , - 3062 , - 709 , - 2820 , - 1459 , - 594 , - 225 , - 352 , - 975 , - 2094 , - 3709 , - 1852 , - 491 , - 3594 , - 3225 , - 3352 , - 7 , - 1126 , - 2741 , - 884 , - 3491 , - 2626 , - 2257 , - 2384 , - 3007 , - 158 , - 1773 , - 3884 , - 2523 , - 1658 , - 1289 , - 1416 , - 2039 , - 3158 , - 805 , - 2916 , - 1555 , - 690 , - 321 , - 448 , - 1071 , - 2190 , - 3805 , - 1948 , - 587 , - 3690 , - 3321 , - 3448 , - 103 , - 1222 , - 2837 , - 980 , - 3587 , - 2722 , - 2353 , - 2480 , - 3103 , - 254 , - 1869 , - 12 , - 2619 , - 1754 , - 1385 , - 1512 , - 2135 , - 3254 , - 901 , - 3012 , - 1651 , - 786 , - 417 , - 544 , - 1167 , - 2286 , - 3901 , - 2044 , - 683 , - 3786 , - 3417 , - 3544 , - 199 , - 1318 , - 2933 , - 1076 , - 3683 , - 2818 , - 2449 , - 2576 , - 3199 , - 350 , - 1965 , - 108 , - 2715 , - 1850 , - 1481 , - 1608 , - 2231 , - 3350 , - 997 , - 3108 , - 1747 , - 882 , - 513 , - 640 , - 1263 , - 2382 , - 29 , - 2140 , - 779 , - 3882 , - 3513 , - 3640 , - 295 , - 1414 , - 3029 , - 1172 , - 3779 , - 2914 , - 2545 , - 2672 , - 3295 , - 446 , - 2061 , - 204 , - 2811 , - 1946 , - 1577 , - 1704 , - 2327 , - 3446 , - 1093 , - 3204 , - 1843 , - 978 , - 609 , - 736 , - 1359 , - 2478 , - 125 , - 2236 , - 875 , - 10 , - 3609 , - 3736 , - 391 , - 1510 , - 3125 , - 1268 , - 3875 , - 3010 , - 2641 , - 2768 , - 3391 , - 542 , - 2157 , - 300 , - 2907 , - 2042 , - 1673 , - 1800 , - 2423 , - 3542 , - 1189 , - 3300 , - 1939 , - 1074 , - 705 , - 832 , - 1455 , - 2574 , - 221 , - 2332 , - 971 , - 106 , - 3705 , - 3832 , - 487 , - 1606 , - 3221 , - 1364 , - 3 , - 3106 , - 2737 , - 2864 , - 3487 , - 638 , - 2253 , - 396 , - 3003 , - 2138 , - 1769 , - 1896 , - 2519 , - 3638 , - 1285 , - 3396 , - 2035 , - 1170 , - 801 , - 928 , - 1551 , - 2670 , - 317 , - 2428 , - 1067 , - 202 , - 3801 , - 3928 , - 583 , - 1702 , - 3317 , - 1460 , - 99 , - 3202 , - 2833 , - 2960 , - 3583 , - 734 , - 2349 , - 492 , - 3099 , - 2234 , - 1865 , - 1992 , - 2615 , - 3734 , - 1381 , - 3492 , - 2131 , - 1266 , - 897 , - 1024 , - 1647 , - 2766 , - 413 , - 2524 , - 1163 , - 298 , - 3897 , - 56 , - 679 , - 1798 , - 3413 , - 1556 , - 195 , - 3298 , - 2929 , - 3056 , - 3679 , - 830 , - 2445 , - 588 , - 3195 , - 2330 , - 1961 , - 2088 , - 2711 , - 3830 , - 1477 , - 3588 , - 2227 , - 1362 , - 993 , - 1120 , - 1743 , - 2862 , - 509 , - 2620 , - 1259 , - 394 , - 25 , - 152 , - 775 , - 1894 , - 3509 , - 1652 , - 291 , - 3394 , - 3025 , - 3152 , - 3775 , - 926 , - 2541 , - 684 , - 3291 , - 2426 , - 2057 , - 2184 , - 2807 , - 3926 , - 1573 , - 3684 , - 2323 , - 1458 , - 1089 , - 1216 , - 1839 , - 2958 , - 605 , - 2716 , - 1355 , - 490 , - 121 , - 248 , - 871 , - 1990 , - 3605 , - 1748 , - 387 , - 3490 , - 3121 , - 3248 , - 3871 , - 1022 , - 2637 , - 780 , - 3387 , - 2522 , - 2153 , - 2280 , - 2903 , - 54 , - 1669 , - 3780 , - 2419 , - 1554 , - 1185 , - 1312 , - 1935 , - 3054 , - 701 , - 2812 , - 1451 , - 586 , - 217 , - 344 , - 967 , - 2086 , - 3701 , - 1844 , - 483 , - 3586 , - 3217 , - 3344 , - 3967 , - 1118 , - 2733 , - 876 , - 3483 , - 2618 , - 2249 , - 2376 , - 2999 , - 150 , - 1765 , - 3876 , - 2515 , - 1650 , - 1281 , - 1408 , - 2031 , - 3150 , - 797 , - 2908 , - 1547 , - 682 , - 313 , - 440 , - 1063 , - 2182 , - 3797 , - 1940 , - 579 , - 3682 , - 3313 , - 3440 , - 95 , - 1214 , - 2829 , - 972 , - 3579 , - 2714 , - 2345 , - 2472 , - 3095 , - 246 , - 1861 , - 4 , - 2611 , - 1746 , - 1377 , - 1504 , - 2127 , - 3246 , - 893 , - 3004 , - 1643 , - 778 , - 409 , - 536 , - 1159 , - 2278 , - 3893 , - 2036 , - 675 , - 3778 , - 3409 , - 3536 , - 191 , - 1310 , - 2925 , - 1068 , - 3675 , - 2810 , - 2441 , - 2568 , - 3191 , - 342 , - 1957 , - 100 , - 2707 , - 1842 , - 1473 , - 1600 , - 2223 , - 3342 , - 989 , - 3100 , - 1739 , - 874 , - 505 , - 632 , - 1255 , - 2374 , - 21 , - 2132 , - 771 , - 3874 , - 3505 , - 3632 , - 287 , - 1406 , - 3021 , - 1164 , - 3771 , - 2906 , - 2537 , - 2664 , - 3287 , - 438 , - 2053 , - 196 , - 2803 , - 1938 , - 1569 , - 1696 , - 2319 , - 3438 , - 1085 , - 3196 , - 1835 , - 970 , - 601 , - 728 , - 1351 , - 2470 , - 117 , - 2228 , - 867 , - 2 , - 3601 , - 3728 , - 383 , - 1502 , - 3117 , - 1260 , - 3867 , - 3002 , - 2633 , - 2760 , - 3383 , - 534 , - 2149 , - 292 , - 2899 , - 2034 , - 1665 , - 1792 , - 2415 , - 3534 , - 1181 , - 3292 , - 1931 , - 1066 , - 697 , - 824 , - 1447 , - 2566 , - 213 , - 2324 , - 963 , - 98 , - 3697 , - 3824 , - 479 , - 1598 , - 3213 , - 1356 , - 3963 , - 3098 , - 2729 , - 2856 , - 3479 , - 630 , - 2245 , - 388 , - 2995 , - 2130 , - 1761 , - 1888 , - 2511 , - 3630 , - 1277 , - 3388 , - 2027 , - 1162 , - 793 , - 920 , - 1543 , - 2662 , - 309 , - 2420 , - 1059 , - 194 , - 3793 , - 3920 , - 575 , - 1694 , - 3309 , - 1452 , - 91 , - 3194 , - 2825 , - 2952 , - 3575 , - 726 , - 2341 , - 484 , - 3091 , - 2226 , - 1857 , - 1984 , - 2607 , - 3726 , - 1373 , - 3484 , - 2123 , - 1258 , - 889 , - 1016 , - 1639 , - 2758 , - 405 , - 2516 , - 1155 , - 290 , - 3889 , - 48 , - 671 , - 1790 , - 3405 , - 1548 , - 187 , - 3290 , - 2921 , - 3048 , - 3671 , - 822 , - 2437 , - 580 , - 3187 , - 2322 , - 1953 , - 2080 , - 2703 , - 3822 , - 1469 , - 3580 , - 2219 , - 1354 , - 985 , - 1112 , - 1735 , - 2854 , - 501 , - 2612 , - 1251 , - 386 , - 17 , - 144 , - 767 , - 1886 , - 3501 , - 1644 , - 283 , - 3386 , - 3017 , - 3144 , - 3767 , - 918 , - 2533 , - 676 , - 3283 , - 2418 , - 2049 , - 2176 , - 2799 , - 3918 , - 1565 , - 3676 , - 2315 , - 1450 , - 1081 , - 1208 , - 1831 , - 2950 , - 597 , - 2708 , - 1347 , - 482 , - 113 , - 240 , - 863 , - 1982 , - 3597 , - 1740 , - 379 , - 3482 , - 3113 , - 3240 , - 3863 , - 1014 , - 2629 , - 772 , - 3379 , - 2514 , - 2145 , - 2272 , - 2895 , - 46 , - 1661 , - 3772 , - 2411 , - 1546 , - 1177 , - 1304 , - 1927 , - 3046 , - 693 , - 2804 , - 1443 , - 578 , - 209 , - 336 , - 959 , - 2078 , - 3693 , - 1836 , - 475 , - 3578 , - 3209 , - 3336 , - 3959 , - 1110 , - 2725 , - 868 , - 3475 , - 2610 , - 2241 , - 2368 , - 2991 , - 142 , - 1757 , - 3868 , - 2507 , - 1642 , - 1273 , - 1400 , - 2023 , - 3142 , - 789 , - 2900 , - 1539 , - 674 , - 305 , - 432 , - 1055 , - 2174 , - 3789 , - 1932 , - 571 , - 3674 , - 3305 , - 3432 , - 87 , - 1206 , - 2821 , - 964 , - 3571 , - 2706 , - 2337 , - 2464 , - 3087 , - 238 , - 1853 , - 3964 , - 2603 , - 1738 , - 1369 , - 1496 , - 2119 , - 3238 , - 885 , - 2996 , - 1635 , - 770 , - 401 , - 528 , - 1151 , - 2270 , - 3885 , - 2028 , - 667 , - 3770 , - 3401 , - 3528 , - 183 , - 1302 , - 2917 , - 1060 , - 3667 , - 2802 , - 2433 , - 2560 , - 3183 , - 334 , - 1949 , - 92 , - 2699 , - 1834 , - 1465 , - 1592 , - 2215 , - 3334 , - 981 , - 3092 , - 1731 , - 866 , - 497 , - 624 , - 1247 , - 2366 , - 13 , - 2124 , - 763 , - 3866 , - 3497 , - 3624 , - 279 , - 1398 , - 3013 , - 1156 , - 3763 , - 2898 , - 2529 , - 2656 , - 3279 , - 430 , - 2045 , - 188 , - 2795 , - 1930 , - 1561 , - 1688 , - 2311 , - 3430 , - 1077 , - 3188 , - 1827 , - 962 , - 593 , - 720 , - 1343 , - 2462 , - 109 , - 2220 , - 859 , - 3962 , - 3593 , - 3720 , - 375 , - 1494 , - 3109 , - 1252 , - 3859 , - 2994 , - 2625 , - 2752 , - 3375 , - 526 , - 2141 , - 284 , - 2891 , - 2026 , - 1657 , - 1784 , - 2407 , - 3526 , - 1173 , - 3284 , - 1923 , - 1058 , - 689 , - 816 , - 1439 , - 2558 , - 205 , - 2316 , - 955 , - 90 , - 3689 , - 3816 , - 471 , - 1590 , - 3205 , - 1348 , - 3955 , - 3090 , - 2721 , - 2848 , - 3471 , - 622 , - 2237 , - 380 , - 2987 , - 2122 , - 1753 , - 1880 , - 2503 , - 3622 , - 1269 , - 3380 , - 2019 , - 1154 , - 785 , - 912 , - 1535 , - 2654 , - 301 , - 2412 , - 1051 , - 186 , - 3785 , - 3912 , - 567 , - 1686 , - 3301 , - 1444 , - 83 , - 3186 , - 2817 , - 2944 , - 3567 , - 718 , - 2333 , - 476 , - 3083 , - 2218 , - 1849 , - 1976 , - 2599 , - 3718 , - 1365 , - 3476 , - 2115 , - 1250 , - 881 , - 1008 , - 1631 , - 2750 , - 397 , - 2508 , - 1147 , - 282 , - 3881 , - 40 , - 663 , - 1782 , - 3397 , - 1540 , - 179 , - 3282 , - 2913 , - 3040 , - 3663 , - 814 , - 2429 , - 572 , - 3179 , - 2314 , - 1945 , - 2072 , - 2695 , - 3814 , - 1461 , - 3572 , - 2211 , - 1346 , - 977 , - 1104 , - 1727 , - 2846 , - 493 , - 2604 , - 1243 , - 378 , - 9 , - 136 , - 759 , - 1878 , - 3493 , - 1636 , - 275 , - 3378 , - 3009 , - 3136 , - 3759 , - 910 , - 2525 , - 668 , - 3275 , - 2410 , - 2041 , - 2168 , - 2791 , - 3910 , - 1557 , - 3668 , - 2307 , - 1442 , - 1073 , - 1200 , - 1823 , - 2942 , - 589 , - 2700 , - 1339 , - 474 , - 105 , - 232 , - 855 , - 1974 , - 3589 , - 1732 , - 371 , - 3474 , - 3105 , - 3232 , - 3855 , - 1006 , - 2621 , - 764 , - 3371 , - 2506 , - 2137 , - 2264 , - 2887 , - 38 , - 1653 , - 3764 , - 2403 , - 1538 , - 1169 , - 1296 , - 1919 , - 3038 , - 685 , - 2796 , - 1435 , - 570 , - 201 , - 328 , - 951 , - 2070 , - 3685 , - 1828 , - 467 , - 3570 , - 3201 , - 3328 , - 3951 , - 1102 , - 2717 , - 860 , - 3467 , - 2602 , - 2233 , - 2360 , - 2983 , - 134 , - 1749 , - 3860 , - 2499 , - 1634 , - 1265 , - 1392 , - 2015 , - 3134 , - 781 , - 2892 , - 1531 , - 666 , - 297 , - 424 , - 1047 , - 2166 , - 3781 , - 1924 , - 563 , - 3666 , - 3297 , - 3424 , - 79 , - 1198 , - 2813 , - 956 , - 3563 , - 2698 , - 2329 , - 2456 , - 3079 , - 230 , - 1845 , - 3956 , - 2595 , - 1730 , - 1361 , - 1488 , - 2111 , - 3230 , - 877 , - 2988 , - 1627 , - 762 , - 393 , - 520 , - 1143 , - 2262 , - 3877 , - 2020 , - 659 , - 3762 , - 3393 , - 3520 , - 175 , - 1294 , - 2909 , - 1052 , - 3659 , - 2794 , - 2425 , - 2552 , - 3175 , - 326 , - 1941 , - 84 , - 2691 , - 1826 , - 1457 , - 1584 , - 2207 , - 3326 , - 973 , - 3084 , - 1723 , - 858 , - 489 , - 616 , - 1239 , - 2358 , - 5 , - 2116 , - 755 , - 3858 , - 3489 , - 3616 , - 271 , - 1390 , - 3005 , - 1148 , - 3755 , - 2890 , - 2521 , - 2648 , - 3271 , - 422 , - 2037 , - 180 , - 2787 , - 1922 , - 1553 , - 1680 , - 2303 , - 3422 , - 1069 , - 3180 , - 1819 , - 954 , - 585 , - 712 , - 1335 , - 2454 , - 101 , - 2212 , - 851 , - 3954 , - 3585 , - 3712 , - 367 , - 1486 , - 3101 , - 1244 , - 3851 , - 2986 , - 2617 , - 2744 , - 3367 , - 518 , - 2133 , - 276 , - 2883 , - 2018 , - 1649 , - 1776 , - 2399 , - 3518 , - 1165 , - 3276 , - 1915 , - 1050 , - 681 , - 808 , - 1431 , - 2550 , - 197 , - 2308 , - 947 , - 82 , - 3681 , - 3808 , - 463 , - 1582 , - 3197 , - 1340 , - 3947 , - 3082 , - 2713 , - 2840 , - 3463 , - 614 , - 2229 , - 372 , - 2979 , - 2114 , - 1745 , - 1872 , - 2495 , - 3614 , - 1261 , - 3372 , - 2011 , - 1146 , - 777 , - 904 , - 1527 , - 2646 , - 293 , - 2404 , - 1043 , - 178 , - 3777 , - 3904 , - 559 , - 1678 , - 3293 , - 1436 , - 75 , - 3178 , - 2809 , - 2936 , - 3559 , - 710 , - 2325 , - 468 , - 3075 , - 2210 , - 1841 , - 1968 , - 2591 , - 3710 , - 1357 , - 3468 , - 2107 , - 1242 , - 873 , - 1000 , - 1623 , - 2742 , - 389 , - 2500 , - 1139 , - 274 , - 3873 , - 32 , - 655 , - 1774 , - 3389 , - 1532 , - 171 , - 3274 , - 2905 , - 3032 , - 3655 , - 806 , - 2421 , - 564 , - 3171 , - 2306 , - 1937 , - 2064 , - 2687 , - 3806 , - 1453 , - 3564 , - 2203 , - 1338 , - 969 , - 1096 , - 1719 , - 2838 , - 485 , - 2596 , - 1235 , - 370 , - 1 , - 128 , - 751 , - 1870 , - 3485 , - 1628 , - 267 , - 3370 , - 3001 , - 3128 , - 3751 , - 902 , - 2517 , - 660 , - 3267 , - 2402 , - 2033 , - 2160 , - 2783 , - 3902 , - 1549 , - 3660 , - 2299 , - 1434 , - 1065 , - 1192 , - 1815 , - 2934 , - 581 , - 2692 , - 1331 , - 466 , - 97 , - 224 , - 847 , - 1966 , - 3581 , - 1724 , - 363 , - 3466 , - 3097 , - 3224 , - 3847 , - 998 , - 2613 , - 756 , - 3363 , - 2498 , - 2129 , - 2256 , - 2879 , - 30 , - 1645 , - 3756 , - 2395 , - 1530 , - 1161 , - 1288 , - 1911 , - 3030 , - 677 , - 2788 , - 1427 , - 562 , - 193 , - 320 , - 943 , - 2062 , - 3677 , - 1820 , - 459 , - 3562 , - 3193 , - 3320 , - 3943 , - 1094 , - 2709 , - 852 , - 3459 , - 2594 , - 2225 , - 2352 , - 2975 , - 126 , - 1741 , - 3852 , - 2491 , - 1626 , - 1257 , - 1384 , - 2007 , - 3126 , - 773 , - 2884 , - 1523 , - 658 , - 289 , - 416 , - 1039 , - 2158 , - 3773 , - 1916 , - 555 , - 3658 , - 3289 , - 3416 , - 71 , - 1190 , - 2805 , - 948 , - 3555 , - 2690 , - 2321 , - 2448 , - 3071 , - 222 , - 1837 , - 3948 , - 2587 , - 1722 , - 1353 , - 1480 , - 2103 , - 3222 , - 869 , - 2980 , - 1619 , - 754 , - 385 , - 512 , - 1135 , - 2254 , - 3869 , - 2012 , - 651 , - 3754 , - 3385 , - 3512 , - 167 , - 1286 , - 2901 , - 1044 , - 3651 , - 2786 , - 2417 , - 2544 , - 3167 , - 318 , - 1933 , - 76 , - 2683 , - 1818 , - 1449 , - 1576 , - 2199 , - 3318 , - 965 , - 3076 , - 1715 , - 850 , - 481 , - 608 , - 1231 , - 2350 , - 3965 , - 2108 , - 747 , - 3850 , - 3481 , - 3608 , - 263 , - 1382 , - 2997 , - 1140 , - 3747 , - 2882 , - 2513 , - 2640 , - 3263 , - 414 , - 2029 , - 172 , - 2779 , - 1914 , - 1545 , - 1672 , - 2295 , - 3414 , - 1061 , - 3172 , - 1811 , - 946 , - 577 , - 704 , - 1327 , - 2446 , - 93 , - 2204 , - 843 , - 3946 , - 3577 , - 3704 , - 359 , - 1478 , - 3093 , - 1236 , - 3843 , - 2978 , - 2609 , - 2736 , - 3359 , - 510 , - 2125 , - 268 , - 2875 , - 2010 , - 1641 , - 1768 , - 2391 , - 3510 , - 1157 , - 3268 , - 1907 , - 1042 , - 673 , - 800 , - 1423 , - 2542 , - 189 , - 2300 , - 939 , - 74 , - 3673 , - 3800 , - 455 , - 1574 , - 3189 , - 1332 , - 3939 , - 3074 , - 2705 , - 2832 , - 3455 , - 606 , - 2221 , - 364 , - 2971 , - 2106 , - 1737 , - 1864 , - 2487 , - 3606 , - 1253 , - 3364 , - 2003 , - 1138 , - 769 , - 896 , - 1519 , - 2638 , - 285 , - 2396 , - 1035 , - 170 , - 3769 , - 3896 , - 551 , - 1670 , - 3285 , - 1428 , - 67 , - 3170 , - 2801 , - 2928 , - 3551 , - 702 , - 2317 , - 460 , - 3067 , - 2202 , - 1833 , - 1960 , - 2583 , - 3702 , - 1349 , - 3460 , - 2099 , - 1234 , - 865 , - 992 , - 1615 , - 2734 , - 381 , - 2492 , - 1131 , - 266 , - 3865 , - 24 , - 647 , - 1766 , - 3381 , - 1524 , - 163 , - 3266 , - 2897 , - 3024 , - 3647 , - 798 , - 2413 , - 556 , - 3163 , - 2298 , - 1929 , - 2056 , - 2679 , - 3798 , - 1445 , - 3556 , - 2195 , - 1330 , - 961 , - 1088 , - 1711 , - 2830 , - 477 , - 2588 , - 1227 , - 362 , - 3961 , - 120 , - 743 , - 1862 , - 3477 , - 1620 , - 259 , - 3362 , - 2993 , - 3120 , - 3743 , - 894 , - 2509 , - 652 , - 3259 , - 2394 , - 2025 , - 2152 , - 2775 , - 3894 , - 1541 , - 3652 , - 2291 , - 1426 , - 1057 , - 1184 , - 1807 , - 2926 , - 573 , - 2684 , - 1323 , - 458 , - 89 , - 216 , - 839 , - 1958 , - 3573 , - 1716 , - 355 , - 3458 , - 3089 , - 3216 , - 3839 , - 990 , - 2605 , - 748 , - 3355 , - 2490 , - 2121 , - 2248 , - 2871 , - 22 , - 1637 , - 3748 , - 2387 , - 1522 , - 1153 , - 1280 , - 1903 , - 3022 , - 669 , - 2780 , - 1419 , - 554 , - 185 , - 312 , - 935 , - 2054 , - 3669 , - 1812 , - 451 , - 3554 , - 3185 , - 3312 , - 3935 , - 1086 , - 2701 , - 844 , - 3451 , - 2586 , - 2217 , - 2344 , - 2967 , - 118 , - 1733 , - 3844 , - 2483 , - 1618 , - 1249 , - 1376 , - 1999 , - 3118 , - 765 , - 2876 , - 1515 , - 650 , - 281 , - 408 , - 1031 , - 2150 , - 3765 , - 1908 , - 547 , - 3650 , - 3281 , - 3408 , - 63 , - 1182 , - 2797 , - 940 , - 3547 , - 2682 , - 2313 , - 2440 , - 3063 , - 214 , - 1829 , - 3940 , - 2579 , - 1714 , - 1345 , - 1472 , - 2095 , - 3214 , - 861 , - 2972 , - 1611 , - 746 , - 377 , - 504 , - 1127 , - 2246 , - 3861 , - 2004 , - 643 , - 3746 , - 3377 , - 3504 , - 159 , - 1278 , - 2893 , - 1036 , - 3643 , - 2778 , - 2409 , - 2536 , - 3159 , - 310 , - 1925 , - 68 , - 2675 , - 1810 , - 1441 , - 1568 , - 2191 , - 3310 , - 957 , - 3068 , - 1707 , - 842 , - 473 , - 600 , - 1223 , - 2342 , - 3957 , - 2100 , - 739 , - 3842 , - 3473 , - 3600 , - 255 , - 1374 , - 2989 , - 1132 , - 3739 , - 2874 , - 2505 , - 2632 , - 3255 , - 406 , - 2021 , - 164 , - 2771 , - 1906 , - 1537 , - 1664 , - 2287 , - 3406 , - 1053 , - 3164 , - 1803 , - 938 , - 569 , - 696 , - 1319 , - 2438 , - 85 , - 2196 , - 835 , - 3938 , - 3569 , - 3696 , - 351 , - 1470 , - 3085 , - 1228 , - 3835 , - 2970 , - 2601 , - 2728 , - 3351 , - 502 , - 2117 , - 260 , - 2867 , - 2002 , - 1633 , - 1760 , - 2383 , - 3502 , - 1149 , - 3260 , - 1899 , - 1034 , - 665 , - 792 , - 1415 , - 2534 , - 181 , - 2292 , - 931 , - 66 , - 3665 , - 3792 , - 447 , - 1566 , - 3181 , - 1324 , - 3931 , - 3066 , - 2697 , - 2824 , - 3447 , - 598 , - 2213 , - 356 , - 2963 , - 2098 , - 1729 , - 1856 , - 2479 , - 3598 , - 1245 , - 3356 , - 1995 , - 1130 , - 761 , - 888 , - 1511 , - 2630 , - 277 , - 2388 , - 1027 , - 162 , - 3761 , - 3888 , - 543 , - 1662 , - 3277 , - 1420 , - 59 , - 3162 , - 2793 , - 2920 , - 3543 , - 694 , - 2309 , - 452 , - 3059 , - 2194 , - 1825 , - 1952 , - 2575 , - 3694 , - 1341 , - 3452 , - 2091 , - 1226 , - 857 , - 984 , - 1607 , - 2726 , - 373 , - 2484 , - 1123 , - 258 , - 3857 , - 16 , - 639 , - 1758 , - 3373 , - 1516 , - 155 , - 3258 , - 2889 , - 3016 , - 3639 , - 790 , - 2405 , - 548 , - 3155 , - 2290 , - 1921 , - 2048 , - 2671 , - 3790 , - 1437 , - 3548 , - 2187 , - 1322 , - 953 , - 1080 , - 1703 , - 2822 , - 469 , - 2580 , - 1219 , - 354 , - 3953 , - 112 , - 735 , - 1854 , - 3469 , - 1612 , - 251 , - 3354 , - 2985 , - 3112 , - 3735 , - 886 , - 2501 , - 644 , - 3251 , - 2386 , - 2017 , - 2144 , - 2767 , - 3886 , - 1533 , - 3644 , - 2283 , - 1418 , - 1049 , - 1176 , - 1799 , - 2918 , - 565 , - 2676 , - 1315 , - 450 , - 81 , - 208 , - 831 , - 1950 , - 3565 , - 1708 , - 347 , - 3450 , - 3081 , - 3208 , - 3831 , - 982 , - 2597 , - 740 , - 3347 , - 2482 , - 2113 , - 2240 , - 2863 , - 14 , - 1629 , - 3740 , - 2379 , - 1514 , - 1145 , - 1272 , - 1895 , - 3014 , - 661 , - 2772 , - 1411 , - 546 , - 177 , - 304 , - 927 , - 2046 , - 3661 , - 1804 , - 443 , - 3546 , - 3177 , - 3304 , - 3927 , - 1078 , - 2693 , - 836 , - 3443 , - 2578 , - 2209 , - 2336 , - 2959 , - 110 , - 1725 , - 3836 , - 2475 , - 1610 , - 1241 , - 1368 , - 1991 , - 3110 , - 757 , - 2868 , - 1507 , - 642 , - 273 , - 400 , - 1023 , - 2142 , - 3757 , - 1900 , - 539 , - 3642 , - 3273 , - 3400 , - 55 , - 1174 , - 2789 , - 932 , - 3539 , - 2674 , - 2305 , - 2432 , - 3055 , - 206 , - 1821 , - 3932 , - 2571 , - 1706 , - 1337 , - 1464 , - 2087 , - 3206 , - 853 , - 2964 , - 1603 , - 738 , - 369 , - 496 , - 1119 , - 2238 , - 3853 , - 1996 , - 635 , - 3738 , - 3369 , - 3496 , - 151 , - 1270 , - 2885 , - 1028 , - 3635 , - 2770 , - 2401 , - 2528 , - 3151 , - 302 , - 1917 , - 60 , - 2667 , - 1802 , - 1433 , - 1560 , - 2183 , - 3302 , - 949 , - 3060 , - 1699 , - 834 , - 465 , - 592 , - 1215 , - 2334 , - 3949 , - 2092 , - 731 , - 3834 , - 3465 , - 3592 , - 247 , - 1366 , - 2981 , - 1124 , - 3731 , - 2866 , - 2497 , - 2624 , - 3247 , - 398 , - 2013 , - 156 , - 2763 , - 1898 , - 1529 , - 1656 , - 2279 , - 3398 , - 1045 , - 3156 , - 1795 , - 930 , - 561 , - 688 , - 1311 , - 2430 , - 77 , - 2188 , - 827 , - 3930 , - 3561 , - 3688 , - 343 , - 1462 , - 3077 , - 1220 , - 3827 , - 2962 , - 2593 , - 2720 , - 3343 , - 494 , - 2109 , - 252 , - 2859 , - 1994 , - 1625 , - 1752 , - 2375 , - 3494 , - 1141 , - 3252 , - 1891 , - 1026 , - 657 , - 784 , - 1407 , - 2526 , - 173 , - 2284 , - 923 , - 58 , - 3657 , - 3784 , - 439 , - 1558 , - 3173 , - 1316 , - 3923 , - 3058 , - 2689 , - 2816 , - 3439 , - 590 , - 2205 , - 348 , - 2955 , - 2090 , - 1721 , - 1848 , - 2471 , - 3590 , - 1237 , - 3348 , - 1987 , - 1122 , - 753 , - 880 , - 1503 , - 2622 , - 269 , - 2380 , - 1019 , - 154 , - 3753 , - 3880 , - 535 , - 1654 , - 3269 , - 1412 , - 51 , - 3154 , - 2785 , - 2912 , - 3535 , - 686 , - 2301 , - 444 , - 3051 , - 2186 , - 1817 , - 1944 , - 2567 , - 3686 , - 1333 , - 3444 , - 2083 , - 1218 , - 849 , - 976 , - 1599 , - 2718 , - 365 , - 2476 , - 1115 , - 250 , - 3849 , - 8 , - 631 , - 1750 , - 3365 , - 1508 , - 147 , - 3250 , - 2881 , - 3008 , - 3631 , - 782 , - 2397 , - 540 , - 3147 , - 2282 , - 1913 , - 2040 , - 2663 , - 3782 , - 1429 , - 3540 , - 2179 , - 1314 , - 945 , - 1072 , - 1695 , - 2814 , - 461 , - 2572 , - 1211 , - 346 , - 3945 , - 104 , - 727 , - 1846 , - 3461 , - 1604 , - 243 , - 3346 , - 2977 , - 3104 , - 3727 , - 878 , - 2493 , - 636 , - 3243 , - 2378 , - 2009 , - 2136 , - 2759 , - 3878 , - 1525 , - 3636 , - 2275 , - 1410 , - 1041 , - 1168 , - 1791 , - 2910 , - 557 , - 2668 , - 1307 , - 442 , - 73 , - 200 , - 823 , - 1942 , - 3557 , - 1700 , - 339 , - 3442 , - 3073 , - 3200 , - 3823 , - 974 , - 2589 , - 732 , - 3339 , - 2474 , - 2105 , - 2232 , - 2855 , - 6 , - 1621 , - 3732 , - 2371 , - 1506 , - 1137 , - 1264 , - 1887 , - 3006 , - 653 , - 2764 , - 1403 , - 538 , - 169 , - 296 , - 919 , - 2038 , - 3653 , - 1796 , - 435 , - 3538 , - 3169 , - 3296 , - 3919 , - 1070 , - 2685 , - 828 , - 3435 , - 2570 , - 2201 , - 2328 , - 2951 , - 102 , - 1717 , - 3828 , - 2467 , - 1602 , - 1233 , - 1360 , - 1983 , - 3102 , - 749 , - 2860 , - 1499 , - 634 , - 265 , - 392 , - 1015 , - 2134 , - 3749 , - 1892 , - 531 , - 3634 , - 3265 , - 3392 , - 47 , - 1166 , - 2781 , - 924 , - 3531 , - 2666 , - 2297 , - 2424 , - 3047 , - 198 , - 1813 , - 3924 , - 2563 , - 1698 , - 1329 , - 1456 , - 2079 , - 3198 , - 845 , - 2956 , - 1595 , - 730 , - 361 , - 488 , - 1111 , - 2230 , - 3845 , - 1988 , - 627 , - 3730 , - 3361 , - 3488 , - 143 , - 1262 , - 2877 , - 1020 , - 3627 , - 2762 , - 2393 , - 2520 , - 3143 , - 294 , - 1909 , - 52 , - 2659 , - 1794 , - 1425 , - 1552 , - 2175 , - 3294 , - 941 , - 3052 , - 1691 , - 826 , - 457 , - 584 , - 1207 , - 2326 , - 3941 , - 2084 , - 723 , - 3826 , - 3457 , - 3584 , - 239 , - 1358 , - 2973 , - 1116 , - 3723 , - 2858 , - 2489 , - 2616 , - 3239 , - 390 , - 2005 , - 148 , - 2755 , - 1890 , - 1521 , - 1648 , - 2271 , - 3390 , - 1037 , - 3148 , - 1787 , - 922 , - 553 , - 680 , - 1303 , - 2422 , - 69 , - 2180 , - 819 , - 3922 , - 3553 , - 3680 , - 335 , - 1454 , - 3069 , - 1212 , - 3819 , - 2954 , - 2585 , - 2712 , - 3335 , - 486 , - 2101 , - 244 , - 2851 , - 1986 , - 1617 , - 1744 , - 2367 , - 3486 , - 1133 , - 3244 , - 1883 , - 1018 , - 649 , - 776 , - 1399 , - 2518 , - 165 , - 2276 , - 915 , - 50 , - 3649 , - 3776 , - 431 , - 1550 , - 3165 , - 1308 , - 3915 , - 3050 , - 2681 , - 2808 , - 3431 , - 582 , - 2197 , - 340 , - 2947 , - 2082 , - 1713 , - 1840 , - 2463 , - 3582 , - 1229 , - 3340 , - 1979 , - 1114 , - 745 , - 872 , - 1495 , - 2614 , - 261 , - 2372 , - 1011 , - 146 , - 3745 , - 3872 , - 527 , - 1646 , - 3261 , - 1404 , - 43 , - 3146 , - 2777 , - 2904 , - 3527 , - 678 , - 2293 , - 436 , - 3043 , - 2178 , - 1809 , - 1936 , - 2559 , - 3678 , - 1325 , - 3436 , - 2075 , - 1210 , - 841 , - 968 , - 1591 , - 2710 , - 357 , - 2468 , - 1107 , - 242 , - 3841 , - 0 , - 295 , - 926 , - 1893 , - 3196 , - 803 , - 2778 , - 1057 , - 3704 , - 2655 , - 1942 , - 1565 , - 1524 , - 1819 , - 2450 , - 3417 , - 688 , - 2327 , - 270 , - 2581 , - 1196 , - 147 , - 3466 , - 3089 , - 3048 , - 3343 , - 3974 , - 909 , - 2212 , - 3851 , - 1794 , - 73 , - 2720 , - 1671 , - 958 , - 581 , - 540 , - 835 , - 1466 , - 2433 , - 3736 , - 1343 , - 3318 , - 1597 , - 212 , - 3195 , - 2482 , - 2105 , - 2064 , - 2359 , - 2990 , - 3957 , - 1228 , - 2867 , - 810 , - 3121 , - 1736 , - 687 , - 4006 , - 3629 , - 3588 , - 3883 , - 482 , - 1449 , - 2752 , - 359 , - 2334 , - 613 , - 3260 , - 2211 , - 1498 , - 1121 , - 1080 , - 1375 , - 2006 , - 2973 , - 244 , - 1883 , - 3858 , - 2137 , - 752 , - 3735 , - 3022 , - 2645 , - 2604 , - 2899 , - 3530 , - 465 , - 1768 , - 3407 , - 1350 , - 3661 , - 2276 , - 1227 , - 514 , - 137 , - 96 , - 391 , - 1022 , - 1989 , - 3292 , - 899 , - 2874 , - 1153 , - 3800 , - 2751 , - 2038 , - 1661 , - 1620 , - 1915 , - 2546 , - 3513 , - 784 , - 2423 , - 366 , - 2677 , - 1292 , - 243 , - 3562 , - 3185 , - 3144 , - 3439 , - 38 , - 1005 , - 2308 , - 3947 , - 1890 , - 169 , - 2816 , - 1767 , - 1054 , - 677 , - 636 , - 931 , - 1562 , - 2529 , - 3832 , - 1439 , - 3414 , - 1693 , - 308 , - 3291 , - 2578 , - 2201 , - 2160 , - 2455 , - 3086 , - 21 , - 1324 , - 2963 , - 906 , - 3217 , - 1832 , - 783 , - 70 , - 3725 , - 3684 , - 3979 , - 578 , - 1545 , - 2848 , - 455 , - 2430 , - 709 , - 3356 , - 2307 , - 1594 , - 1217 , - 1176 , - 1471 , - 2102 , - 3069 , - 340 , - 1979 , - 3954 , - 2233 , - 848 , - 3831 , - 3118 , - 2741 , - 2700 , - 2995 , - 3626 , - 561 , - 1864 , - 3503 , - 1446 , - 3757 , - 2372 , - 1323 , - 610 , - 233 , - 192 , - 487 , - 1118 , - 2085 , - 3388 , - 995 , - 2970 , - 1249 , - 3896 , - 2847 , - 2134 , - 1757 , - 1716 , - 2011 , - 2642 , - 3609 , - 880 , - 2519 , - 462 , - 2773 , - 1388 , - 339 , - 3658 , - 3281 , - 3240 , - 3535 , - 134 , - 1101 , - 2404 , - 11 , - 1986 , - 265 , - 2912 , - 1863 , - 1150 , - 773 , - 732 , - 1027 , - 1658 , - 2625 , - 3928 , - 1535 , - 3510 , - 1789 , - 404 , - 3387 , - 2674 , - 2297 , - 2256 , - 2551 , - 3182 , - 117 , - 1420 , - 3059 , - 1002 , - 3313 , - 1928 , - 879 , - 166 , - 3821 , - 3780 , - 43 , - 674 , - 1641 , - 2944 , - 551 , - 2526 , - 805 , - 3452 , - 2403 , - 1690 , - 1313 , - 1272 , - 1567 , - 2198 , - 3165 , - 436 , - 2075 , - 18 , - 2329 , - 944 , - 3927 , - 3214 , - 2837 , - 2796 , - 3091 , - 3722 , - 657 , - 1960 , - 3599 , - 1542 , - 3853 , - 2468 , - 1419 , - 706 , - 329 , - 288 , - 583 , - 1214 , - 2181 , - 3484 , - 1091 , - 3066 , - 1345 , - 3992 , - 2943 , - 2230 , - 1853 , - 1812 , - 2107 , - 2738 , - 3705 , - 976 , - 2615 , - 558 , - 2869 , - 1484 , - 435 , - 3754 , - 3377 , - 3336 , - 3631 , - 230 , - 1197 , - 2500 , - 107 , - 2082 , - 361 , - 3008 , - 1959 , - 1246 , - 869 , - 828 , - 1123 , - 1754 , - 2721 , - 4024 , - 1631 , - 3606 , - 1885 , - 500 , - 3483 , - 2770 , - 2393 , - 2352 , - 2647 , - 3278 , - 213 , - 1516 , - 3155 , - 1098 , - 3409 , - 2024 , - 975 , - 262 , - 3917 , - 3876 , - 139 , - 770 , - 1737 , - 3040 , - 647 , - 2622 , - 901 , - 3548 , - 2499 , - 1786 , - 1409 , - 1368 , - 1663 , - 2294 , - 3261 , - 532 , - 2171 , - 114 , - 2425 , - 1040 , - 4023 , - 3310 , - 2933 , - 2892 , - 3187 , - 3818 , - 753 , - 2056 , - 3695 , - 1638 , - 3949 , - 2564 , - 1515 , - 802 , - 425 , - 384 , - 679 , - 1310 , - 2277 , - 3580 , - 1187 , - 3162 , - 1441 , - 56 , - 3039 , - 2326 , - 1949 , - 1908 , - 2203 , - 2834 , - 3801 , - 1072 , - 2711 , - 654 , - 2965 , - 1580 , - 531 , - 3850 , - 3473 , - 3432 , - 3727 , - 326 , - 1293 , - 2596 , - 203 , - 2178 , - 457 , - 3104 , - 2055 , - 1342 , - 965 , - 924 , - 1219 , - 1850 , - 2817 , - 88 , - 1727 , - 3702 , - 1981 , - 596 , - 3579 , - 2866 , - 2489 , - 2448 , - 2743 , - 3374 , - 309 , - 1612 , - 3251 , - 1194 , - 3505 , - 2120 , - 1071 , - 358 , - 4013 , - 3972 , - 235 , - 866 , - 1833 , - 3136 , - 743 , - 2718 , - 997 , - 3644 , - 2595 , - 1882 , - 1505 , - 1464 , - 1759 , - 2390 , - 3357 , - 628 , - 2267 , - 210 , - 2521 , - 1136 , - 87 , - 3406 , - 3029 , - 2988 , - 3283 , - 3914 , - 849 , - 2152 , - 3791 , - 1734 , - 13 , - 2660 , - 1611 , - 898 , - 521 , - 480 , - 775 , - 1406 , - 2373 , - 3676 , - 1283 , - 3258 , - 1537 , - 152 , - 3135 , - 2422 , - 2045 , - 2004 , - 2299 , - 2930 , - 3897 , - 1168 , - 2807 , - 750 , - 3061 , - 1676 , - 627 , - 3946 , - 3569 , - 3528 , - 3823 , - 422 , - 1389 , - 2692 , - 299 , - 2274 , - 553 , - 3200 , - 2151 , - 1438 , - 1061 , - 1020 , - 1315 , - 1946 , - 2913 , - 184 , - 1823 , - 3798 , - 2077 , - 692 , - 3675 , - 2962 , - 2585 , - 2544 , - 2839 , - 3470 , - 405 , - 1708 , - 3347 , - 1290 , - 3601 , - 2216 , - 1167 , - 454 , - 77 , - 36 , - 331 , - 962 , - 1929 , - 3232 , - 839 , - 2814 , - 1093 , - 3740 , - 2691 , - 1978 , - 1601 , - 1560 , - 1855 , - 2486 , - 3453 , - 724 , - 2363 , - 306 , - 2617 , - 1232 , - 183 , - 3502 , - 3125 , - 3084 , - 3379 , - 4010 , - 945 , - 2248 , - 3887 , - 1830 , - 109 , - 2756 , - 1707 , - 994 , - 617 , - 576 , - 871 , - 1502 , - 2469 , - 3772 , - 1379 , - 3354 , - 1633 , - 248 , - 3231 , - 2518 , - 2141 , - 2100 , - 2395 , - 3026 , - 3993 , - 1264 , - 2903 , - 846 , - 3157 , - 1772 , - 723 , - 10 , - 3665 , - 3624 , - 3919 , - 518 , - 1485 , - 2788 , - 395 , - 2370 , - 649 , - 3296 , - 2247 , - 1534 , - 1157 , - 1116 , - 1411 , - 2042 , - 3009 , - 280 , - 1919 , - 3894 , - 2173 , - 788 , - 3771 , - 3058 , - 2681 , - 2640 , - 2935 , - 3566 , - 501 , - 1804 , - 3443 , - 1386 , - 3697 , - 2312 , - 1263 , - 550 , - 173 , - 132 , - 427 , - 1058 , - 2025 , - 3328 , - 935 , - 2910 , - 1189 , - 3836 , - 2787 , - 2074 , - 1697 , - 1656 , - 1951 , - 2582 , - 3549 , - 820 , - 2459 , - 402 , - 2713 , - 1328 , - 279 , - 3598 , - 3221 , - 3180 , - 3475 , - 74 , - 1041 , - 2344 , - 3983 , - 1926 , - 205 , - 2852 , - 1803 , - 1090 , - 713 , - 672 , - 967 , - 1598 , - 2565 , - 3868 , - 1475 , - 3450 , - 1729 , - 344 , - 3327 , - 2614 , - 2237 , - 2196 , - 2491 , - 3122 , - 57 , - 1360 , - 2999 , - 942 , - 3253 , - 1868 , - 819 , - 106 , - 3761 , - 3720 , - 4015 , - 614 , - 1581 , - 2884 , - 491 , - 2466 , - 745 , - 3392 , - 2343 , - 1630 , - 1253 , - 1212 , - 1507 , - 2138 , - 3105 , - 376 , - 2015 , - 3990 , - 2269 , - 884 , - 3867 , - 3154 , - 2777 , - 2736 , - 3031 , - 3662 , - 597 , - 1900 , - 3539 , - 1482 , - 3793 , - 2408 , - 1359 , - 646 , - 269 , - 228 , - 523 , - 1154 , - 2121 , - 3424 , - 1031 , - 3006 , - 1285 , - 3932 , - 2883 , - 2170 , - 1793 , - 1752 , - 2047 , - 2678 , - 3645 , - 916 , - 2555 , - 498 , - 2809 , - 1424 , - 375 , - 3694 , - 3317 , - 3276 , - 3571 , - 170 , - 1137 , - 2440 , - 47 , - 2022 , - 301 , - 2948 , - 1899 , - 1186 , - 809 , - 768 , - 1063 , - 1694 , - 2661 , - 3964 , - 1571 , - 3546 , - 1825 , - 440 , - 3423 , - 2710 , - 2333 , - 2292 , - 2587 , - 3218 , - 153 , - 1456 , - 3095 , - 1038 , - 3349 , - 1964 , - 915 , - 202 , - 3857 , - 3816 , - 79 , - 710 , - 1677 , - 2980 , - 587 , - 2562 , - 841 , - 3488 , - 2439 , - 1726 , - 1349 , - 1308 , - 1603 , - 2234 , - 3201 , - 472 , - 2111 , - 54 , - 2365 , - 980 , - 3963 , - 3250 , - 2873 , - 2832 , - 3127 , - 3758 , - 693 , - 1996 , - 3635 , - 1578 , - 3889 , - 2504 , - 1455 , - 742 , - 365 , - 324 , - 619 , - 1250 , - 2217 , - 3520 , - 1127 , - 3102 , - 1381 , - 4028 , - 2979 , - 2266 , - 1889 , - 1848 , - 2143 , - 2774 , - 3741 , - 1012 , - 2651 , - 594 , - 2905 , - 1520 , - 471 , - 3790 , - 3413 , - 3372 , - 3667 , - 266 , - 1233 , - 2536 , - 143 , - 2118 , - 397 , - 3044 , - 1995 , - 1282 , - 905 , - 864 , - 1159 , - 1790 , - 2757 , - 28 , - 1667 , - 3642 , - 1921 , - 536 , - 3519 , - 2806 , - 2429 , - 2388 , - 2683 , - 3314 , - 249 , - 1552 , - 3191 , - 1134 , - 3445 , - 2060 , - 1011 , - 298 , - 3953 , - 3912 , - 175 , - 806 , - 1773 , - 3076 , - 683 , - 2658 , - 937 , - 3584 , - 2535 , - 1822 , - 1445 , - 1404 , - 1699 , - 2330 , - 3297 , - 568 , - 2207 , - 150 , - 2461 , - 1076 , - 27 , - 3346 , - 2969 , - 2928 , - 3223 , - 3854 , - 789 , - 2092 , - 3731 , - 1674 , - 3985 , - 2600 , - 1551 , - 838 , - 461 , - 420 , - 715 , - 1346 , - 2313 , - 3616 , - 1223 , - 3198 , - 1477 , - 92 , - 3075 , - 2362 , - 1985 , - 1944 , - 2239 , - 2870 , - 3837 , - 1108 , - 2747 , - 690 , - 3001 , - 1616 , - 567 , - 3886 , - 3509 , - 3468 , - 3763 , - 362 , - 1329 , - 2632 , - 239 , - 2214 , - 493 , - 3140 , - 2091 , - 1378 , - 1001 , - 960 , - 1255 , - 1886 , - 2853 , - 124 , - 1763 , - 3738 , - 2017 , - 632 , - 3615 , - 2902 , - 2525 , - 2484 , - 2779 , - 3410 , - 345 , - 1648 , - 3287 , - 1230 , - 3541 , - 2156 , - 1107 , - 394 , - 17 , - 4008 , - 271 , - 902 , - 1869 , - 3172 , - 779 , - 2754 , - 1033 , - 3680 , - 2631 , - 1918 , - 1541 , - 1500 , - 1795 , - 2426 , - 3393 , - 664 , - 2303 , - 246 , - 2557 , - 1172 , - 123 , - 3442 , - 3065 , - 3024 , - 3319 , - 3950 , - 885 , - 2188 , - 3827 , - 1770 , - 49 , - 2696 , - 1647 , - 934 , - 557 , - 516 , - 811 , - 1442 , - 2409 , - 3712 , - 1319 , - 3294 , - 1573 , - 188 , - 3171 , - 2458 , - 2081 , - 2040 , - 2335 , - 2966 , - 3933 , - 1204 , - 2843 , - 786 , - 3097 , - 1712 , - 663 , - 3982 , - 3605 , - 3564 , - 3859 , - 458 , - 1425 , - 2728 , - 335 , - 2310 , - 589 , - 3236 , - 2187 , - 1474 , - 1097 , - 1056 , - 1351 , - 1982 , - 2949 , - 220 , - 1859 , - 3834 , - 2113 , - 728 , - 3711 , - 2998 , - 2621 , - 2580 , - 2875 , - 3506 , - 441 , - 1744 , - 3383 , - 1326 , - 3637 , - 2252 , - 1203 , - 490 , - 113 , - 72 , - 367 , - 998 , - 1965 , - 3268 , - 875 , - 2850 , - 1129 , - 3776 , - 2727 , - 2014 , - 1637 , - 1596 , - 1891 , - 2522 , - 3489 , - 760 , - 2399 , - 342 , - 2653 , - 1268 , - 219 , - 3538 , - 3161 , - 3120 , - 3415 , - 14 , - 981 , - 2284 , - 3923 , - 1866 , - 145 , - 2792 , - 1743 , - 1030 , - 653 , - 612 , - 907 , - 1538 , - 2505 , - 3808 , - 1415 , - 3390 , - 1669 , - 284 , - 3267 , - 2554 , - 2177 , - 2136 , - 2431 , - 3062 , - 4029 , - 1300 , - 2939 , - 882 , - 3193 , - 1808 , - 759 , - 46 , - 3701 , - 3660 , - 3955 , - 554 , - 1521 , - 2824 , - 431 , - 2406 , - 685 , - 3332 , - 2283 , - 1570 , - 1193 , - 1152 , - 1447 , - 2078 , - 3045 , - 316 , - 1955 , - 3930 , - 2209 , - 824 , - 3807 , - 3094 , - 2717 , - 2676 , - 2971 , - 3602 , - 537 , - 1840 , - 3479 , - 1422 , - 3733 , - 2348 , - 1299 , - 586 , - 209 , - 168 , - 463 , - 1094 , - 2061 , - 3364 , - 971 , - 2946 , - 1225 , - 3872 , - 2823 , - 2110 , - 1733 , - 1692 , - 1987 , - 2618 , - 3585 , - 856 , - 2495 , - 438 , - 2749 , - 1364 , - 315 , - 3634 , - 3257 , - 3216 , - 3511 , - 110 , - 1077 , - 2380 , - 4019 , - 1962 , - 241 , - 2888 , - 1839 , - 1126 , - 749 , - 708 , - 1003 , - 1634 , - 2601 , - 3904 , - 1511 , - 3486 , - 1765 , - 380 , - 3363 , - 2650 , - 2273 , - 2232 , - 2527 , - 3158 , - 93 , - 1396 , - 3035 , - 978 , - 3289 , - 1904 , - 855 , - 142 , - 3797 , - 3756 , - 19 , - 650 , - 1617 , - 2920 , - 527 , - 2502 , - 781 , - 3428 , - 2379 , - 1666 , - 1289 , - 1248 , - 1543 , - 2174 , - 3141 , - 412 , - 2051 , - 4026 , - 2305 , - 920 , - 3903 , - 3190 , - 2813 , - 2772 , - 3067 , - 3698 , - 633 , - 1936 , - 3575 , - 1518 , - 3829 , - 2444 , - 1395 , - 682 , - 305 , - 264 , - 559 , - 1190 , - 2157 , - 3460 , - 1067 , - 3042 , - 1321 , - 3968 , - 2919 , - 2206 , - 1829 , - 1788 , - 2083 , - 2714 , - 3681 , - 952 , - 2591 , - 534 , - 2845 , - 1460 , - 411 , - 3730 , - 3353 , - 3312 , - 3607 , - 206 , - 1173 , - 2476 , - 83 , - 2058 , - 337 , - 2984 , - 1935 , - 1222 , - 845 , - 804 , - 1099 , - 1730 , - 2697 , - 4000 , - 1607 , - 3582 , - 1861 , - 476 , - 3459 , - 2746 , - 2369 , - 2328 , - 2623 , - 3254 , - 189 , - 1492 , - 3131 , - 1074 , - 3385 , - 2000 , - 951 , - 238 , - 3893 , - 3852 , - 115 , - 746 , - 1713 , - 3016 , - 623 , - 2598 , - 877 , - 3524 , - 2475 , - 1762 , - 1385 , - 1344 , - 1639 , - 2270 , - 3237 , - 508 , - 2147 , - 90 , - 2401 , - 1016 , - 3999 , - 3286 , - 2909 , - 2868 , - 3163 , - 3794 , - 729 , - 2032 , - 3671 , - 1614 , - 3925 , - 2540 , - 1491 , - 778 , - 401 , - 360 , - 655 , - 1286 , - 2253 , - 3556 , - 1163 , - 3138 , - 1417 , - 32 , - 3015 , - 2302 , - 1925 , - 1884 , - 2179 , - 2810 , - 3777 , - 1048 , - 2687 , - 630 , - 2941 , - 1556 , - 507 , - 3826 , - 3449 , - 3408 , - 3703 , - 302 , - 1269 , - 2572 , - 179 , - 2154 , - 433 , - 3080 , - 2031 , - 1318 , - 941 , - 900 , - 1195 , - 1826 , - 2793 , - 64 , - 1703 , - 3678 , - 1957 , - 572 , - 3555 , - 2842 , - 2465 , - 2424 , - 2719 , - 3350 , - 285 , - 1588 , - 3227 , - 1170 , - 3481 , - 2096 , - 1047 , - 334 , - 3989 , - 3948 , - 211 , - 842 , - 1809 , - 3112 , - 719 , - 2694 , - 973 , - 3620 , - 2571 , - 1858 , - 1481 , - 1440 , - 1735 , - 2366 , - 3333 , - 604 , - 2243 , - 186 , - 2497 , - 1112 , - 63 , - 3382 , - 3005 , - 2964 , - 3259 , - 3890 , - 825 , - 2128 , - 3767 , - 1710 , - 4021 , - 2636 , - 1587 , - 874 , - 497 , - 456 , - 751 , - 1382 , - 2349 , - 3652 , - 1259 , - 3234 , - 1513 , - 128 , - 3111 , - 2398 , - 2021 , - 1980 , - 2275 , - 2906 , - 3873 , - 1144 , - 2783 , - 726 , - 3037 , - 1652 , - 603 , - 3922 , - 3545 , - 3504 , - 3799 , - 398 , - 1365 , - 2668 , - 275 , - 2250 , - 529 , - 3176 , - 2127 , - 1414 , - 1037 , - 996 , - 1291 , - 1922 , - 2889 , - 160 , - 1799 , - 3774 , - 2053 , - 668 , - 3651 , - 2938 , - 2561 , - 2520 , - 2815 , - 3446 , - 381 , - 1684 , - 3323 , - 1266 , - 3577 , - 2192 , - 1143 , - 430 , - 53 , - 12 , - 307 , - 938 , - 1905 , - 3208 , - 815 , - 2790 , - 1069 , - 3716 , - 2667 , - 1954 , - 1577 , - 1536 , - 1831 , - 2462 , - 3429 , - 700 , - 2339 , - 282 , - 2593 , - 1208 , - 159 , - 3478 , - 3101 , - 3060 , - 3355 , - 3986 , - 921 , - 2224 , - 3863 , - 1806 , - 85 , - 2732 , - 1683 , - 970 , - 593 , - 552 , - 847 , - 1478 , - 2445 , - 3748 , - 1355 , - 3330 , - 1609 , - 224 , - 3207 , - 2494 , - 2117 , - 2076 , - 2371 , - 3002 , - 3969 , - 1240 , - 2879 , - 822 , - 3133 , - 1748 , - 699 , - 4018 , - 3641 , - 3600 , - 3895 , - 494 , - 1461 , - 2764 , - 371 , - 2346 , - 625 , - 3272 , - 2223 , - 1510 , - 1133 , - 1092 , - 1387 , - 2018 , - 2985 , - 256 , - 1895 , - 3870 , - 2149 , - 764 , - 3747 , - 3034 , - 2657 , - 2616 , - 2911 , - 3542 , - 477 , - 1780 , - 3419 , - 1362 , - 3673 , - 2288 , - 1239 , - 526 , - 149 , - 108 , - 403 , - 1034 , - 2001 , - 3304 , - 911 , - 2886 , - 1165 , - 3812 , - 2763 , - 2050 , - 1673 , - 1632 , - 1927 , - 2558 , - 3525 , - 796 , - 2435 , - 378 , - 2689 , - 1304 , - 255 , - 3574 , - 3197 , - 3156 , - 3451 , - 50 , - 1017 , - 2320 , - 3959 , - 1902 , - 181 , - 2828 , - 1779 , - 1066 , - 689 , - 648 , - 943 , - 1574 , - 2541 , - 3844 , - 1451 , - 3426 , - 1705 , - 320 , - 3303 , - 2590 , - 2213 , - 2172 , - 2467 , - 3098 , - 33 , - 1336 , - 2975 , - 918 , - 3229 , - 1844 , - 795 , - 82 , - 3737 , - 3696 , - 3991 , - 590 , - 1557 , - 2860 , - 467 , - 2442 , - 721 , - 3368 , - 2319 , - 1606 , - 1229 , - 1188 , - 1483 , - 2114 , - 3081 , - 352 , - 1991 , - 3966 , - 2245 , - 860 , - 3843 , - 3130 , - 2753 , - 2712 , - 3007 , - 3638 , - 573 , - 1876 , - 3515 , - 1458 , - 3769 , - 2384 , - 1335 , - 622 , - 245 , - 204 , - 499 , - 1130 , - 2097 , - 3400 , - 1007 , - 2982 , - 1261 , - 3908 , - 2859 , - 2146 , - 1769 , - 1728 , - 2023 , - 2654 , - 3621 , - 892 , - 2531 , - 474 , - 2785 , - 1400 , - 351 , - 3670 , - 3293 , - 3252 , - 3547 , - 146 , - 1113 , - 2416 , - 23 , - 1998 , - 277 , - 2924 , - 1875 , - 1162 , - 785 , - 744 , - 1039 , - 1670 , - 2637 , - 3940 , - 1547 , - 3522 , - 1801 , - 416 , - 3399 , - 2686 , - 2309 , - 2268 , - 2563 , - 3194 , - 129 , - 1432 , - 3071 , - 1014 , - 3325 , - 1940 , - 891 , - 178 , - 3833 , - 3792 , - 55 , - 686 , - 1653 , - 2956 , - 563 , - 2538 , - 817 , - 3464 , - 2415 , - 1702 , - 1325 , - 1284 , - 1579 , - 2210 , - 3177 , - 448 , - 2087 , - 30 , - 2341 , - 956 , - 3939 , - 3226 , - 2849 , - 2808 , - 3103 , - 3734 , - 669 , - 1972 , - 3611 , - 1554 , - 3865 , - 2480 , - 1431 , - 718 , - 341 , - 300 , - 595 , - 1226 , - 2193 , - 3496 , - 1103 , - 3078 , - 1357 , - 4004 , - 2955 , - 2242 , - 1865 , - 1824 , - 2119 , - 2750 , - 3717 , - 988 , - 2627 , - 570 , - 2881 , - 1496 , - 447 , - 3766 , - 3389 , - 3348 , - 3643 , - 242 , - 1209 , - 2512 , - 119 , - 2094 , - 373 , - 3020 , - 1971 , - 1258 , - 881 , - 840 , - 1135 , - 1766 , - 2733 , - 4 , - 1643 , - 3618 , - 1897 , - 512 , - 3495 , - 2782 , - 2405 , - 2364 , - 2659 , - 3290 , - 225 , - 1528 , - 3167 , - 1110 , - 3421 , - 2036 , - 987 , - 274 , - 3929 , - 3888 , - 151 , - 782 , - 1749 , - 3052 , - 659 , - 2634 , - 913 , - 3560 , - 2511 , - 1798 , - 1421 , - 1380 , - 1675 , - 2306 , - 3273 , - 544 , - 2183 , - 126 , - 2437 , - 1052 , - 3 , - 3322 , - 2945 , - 2904 , - 3199 , - 3830 , - 765 , - 2068 , - 3707 , - 1650 , - 3961 , - 2576 , - 1527 , - 814 , - 437 , - 396 , - 691 , - 1322 , - 2289 , - 3592 , - 1199 , - 3174 , - 1453 , - 68 , - 3051 , - 2338 , - 1961 , - 1920 , - 2215 , - 2846 , - 3813 , - 1084 , - 2723 , - 666 , - 2977 , - 1592 , - 543 , - 3862 , - 3485 , - 3444 , - 3739 , - 338 , - 1305 , - 2608 , - 215 , - 2190 , - 469 , - 3116 , - 2067 , - 1354 , - 977 , - 936 , - 1231 , - 1862 , - 2829 , - 100 , - 1739 , - 3714 , - 1993 , - 608 , - 3591 , - 2878 , - 2501 , - 2460 , - 2755 , - 3386 , - 321 , - 1624 , - 3263 , - 1206 , - 3517 , - 2132 , - 1083 , - 370 , - 4025 , - 3984 , - 247 , - 878 , - 1845 , - 3148 , - 755 , - 2730 , - 1009 , - 3656 , - 2607 , - 1894 , - 1517 , - 1476 , - 1771 , - 2402 , - 3369 , - 640 , - 2279 , - 222 , - 2533 , - 1148 , - 99 , - 3418 , - 3041 , - 3000 , - 3295 , - 3926 , - 861 , - 2164 , - 3803 , - 1746 , - 25 , - 2672 , - 1623 , - 910 , - 533 , - 492 , - 787 , - 1418 , - 2385 , - 3688 , - 1295 , - 3270 , - 1549 , - 164 , - 3147 , - 2434 , - 2057 , - 2016 , - 2311 , - 2942 , - 3909 , - 1180 , - 2819 , - 762 , - 3073 , - 1688 , - 639 , - 3958 , - 3581 , - 3540 , - 3835 , - 434 , - 1401 , - 2704 , - 311 , - 2286 , - 565 , - 3212 , - 2163 , - 1450 , - 1073 , - 1032 , - 1327 , - 1958 , - 2925 , - 196 , - 1835 , - 3810 , - 2089 , - 704 , - 3687 , - 2974 , - 2597 , - 2556 , - 2851 , - 3482 , - 417 , - 1720 , - 3359 , - 1302 , - 3613 , - 2228 , - 1179 , - 466 , - 89 , - 48 , - 343 , - 974 , - 1941 , - 3244 , - 851 , - 2826 , - 1105 , - 3752 , - 2703 , - 1990 , - 1613 , - 1572 , - 1867 , - 2498 , - 3465 , - 736 , - 2375 , - 318 , - 2629 , - 1244 , - 195 , - 3514 , - 3137 , - 3096 , - 3391 , - 4022 , - 957 , - 2260 , - 3899 , - 1842 , - 121 , - 2768 , - 1719 , - 1006 , - 629 , - 588 , - 883 , - 1514 , - 2481 , - 3784 , - 1391 , - 3366 , - 1645 , - 260 , - 3243 , - 2530 , - 2153 , - 2112 , - 2407 , - 3038 , - 4005 , - 1276 , - 2915 , - 858 , - 3169 , - 1784 , - 735 , - 22 , - 3677 , - 3636 , - 3931 , - 530 , - 1497 , - 2800 , - 407 , - 2382 , - 661 , - 3308 , - 2259 , - 1546 , - 1169 , - 1128 , - 1423 , - 2054 , - 3021 , - 292 , - 1931 , - 3906 , - 2185 , - 800 , - 3783 , - 3070 , - 2693 , - 2652 , - 2947 , - 3578 , - 513 , - 1816 , - 3455 , - 1398 , - 3709 , - 2324 , - 1275 , - 562 , - 185 , - 144 , - 439 , - 1070 , - 2037 , - 3340 , - 947 , - 2922 , - 1201 , - 3848 , - 2799 , - 2086 , - 1709 , - 1668 , - 1963 , - 2594 , - 3561 , - 832 , - 2471 , - 414 , - 2725 , - 1340 , - 291 , - 3610 , - 3233 , - 3192 , - 3487 , - 86 , - 1053 , - 2356 , - 3995 , - 1938 , - 217 , - 2864 , - 1815 , - 1102 , - 725 , - 684 , - 979 , - 1610 , - 2577 , - 3880 , - 1487 , - 3462 , - 1741 , - 356 , - 3339 , - 2626 , - 2249 , - 2208 , - 2503 , - 3134 , - 69 , - 1372 , - 3011 , - 954 , - 3265 , - 1880 , - 831 , - 118 , - 3773 , - 3732 , - 4027 , - 626 , - 1593 , - 2896 , - 503 , - 2478 , - 757 , - 3404 , - 2355 , - 1642 , - 1265 , - 1224 , - 1519 , - 2150 , - 3117 , - 388 , - 2027 , - 4002 , - 2281 , - 896 , - 3879 , - 3166 , - 2789 , - 2748 , - 3043 , - 3674 , - 609 , - 1912 , - 3551 , - 1494 , - 3805 , - 2420 , - 1371 , - 658 , - 281 , - 240 , - 535 , - 1166 , - 2133 , - 3436 , - 1043 , - 3018 , - 1297 , - 3944 , - 2895 , - 2182 , - 1805 , - 1764 , - 2059 , - 2690 , - 3657 , - 928 , - 2567 , - 510 , - 2821 , - 1436 , - 387 , - 3706 , - 3329 , - 3288 , - 3583 , - 182 , - 1149 , - 2452 , - 59 , - 2034 , - 313 , - 2960 , - 1911 , - 1198 , - 821 , - 780 , - 1075 , - 1706 , - 2673 , - 3976 , - 1583 , - 3558 , - 1837 , - 452 , - 3435 , - 2722 , - 2345 , - 2304 , - 2599 , - 3230 , - 165 , - 1468 , - 3107 , - 1050 , - 3361 , - 1976 , - 927 , - 214 , - 3869 , - 3828 , - 91 , - 722 , - 1689 , - 2992 , - 599 , - 2574 , - 853 , - 3500 , - 2451 , - 1738 , - 1361 , - 1320 , - 1615 , - 2246 , - 3213 , - 484 , - 2123 , - 66 , - 2377 , - 992 , - 3975 , - 3262 , - 2885 , - 2844 , - 3139 , - 3770 , - 705 , - 2008 , - 3647 , - 1590 , - 3901 , - 2516 , - 1467 , - 754 , - 377 , - 336 , - 631 , - 1262 , - 2229 , - 3532 , - 1139 , - 3114 , - 1393 , - 8 , - 2991 , - 2278 , - 1901 , - 1860 , - 2155 , - 2786 , - 3753 , - 1024 , - 2663 , - 606 , - 2917 , - 1532 , - 483 , - 3802 , - 3425 , - 3384 , - 3679 , - 278 , - 1245 , - 2548 , - 155 , - 2130 , - 409 , - 3056 , - 2007 , - 1294 , - 917 , - 876 , - 1171 , - 1802 , - 2769 , - 40 , - 1679 , - 3654 , - 1933 , - 548 , - 3531 , - 2818 , - 2441 , - 2400 , - 2695 , - 3326 , - 261 , - 1564 , - 3203 , - 1146 , - 3457 , - 2072 , - 1023 , - 310 , - 3965 , - 3924 , - 187 , - 818 , - 1785 , - 3088 , - 695 , - 2670 , - 949 , - 3596 , - 2547 , - 1834 , - 1457 , - 1416 , - 1711 , - 2342 , - 3309 , - 580 , - 2219 , - 162 , - 2473 , - 1088 , - 39 , - 3358 , - 2981 , - 2940 , - 3235 , - 3866 , - 801 , - 2104 , - 3743 , - 1686 , - 3997 , - 2612 , - 1563 , - 850 , - 473 , - 432 , - 727 , - 1358 , - 2325 , - 3628 , - 1235 , - 3210 , - 1489 , - 104 , - 3087 , - 2374 , - 1997 , - 1956 , - 2251 , - 2882 , - 3849 , - 1120 , - 2759 , - 702 , - 3013 , - 1628 , - 579 , - 3898 , - 3521 , - 3480 , - 3775 , - 374 , - 1341 , - 2644 , - 251 , - 2226 , - 505 , - 3152 , - 2103 , - 1390 , - 1013 , - 972 , - 1267 , - 1898 , - 2865 , - 136 , - 1775 , - 3750 , - 2029 , - 644 , - 3627 , - 2914 , - 2537 , - 2496 , - 2791 , - 3422 , - 357 , - 1660 , - 3299 , - 1242 , - 3553 , - 2168 , - 1119 , - 406 , - 29 , - 4020 , - 283 , - 914 , - 1881 , - 3184 , - 791 , - 2766 , - 1045 , - 3692 , - 2643 , - 1930 , - 1553 , - 1512 , - 1807 , - 2438 , - 3405 , - 676 , - 2315 , - 258 , - 2569 , - 1184 , - 135 , - 3454 , - 3077 , - 3036 , - 3331 , - 3962 , - 897 , - 2200 , - 3839 , - 1782 , - 61 , - 2708 , - 1659 , - 946 , - 569 , - 528 , - 823 , - 1454 , - 2421 , - 3724 , - 1331 , - 3306 , - 1585 , - 200 , - 3183 , - 2470 , - 2093 , - 2052 , - 2347 , - 2978 , - 3945 , - 1216 , - 2855 , - 798 , - 3109 , - 1724 , - 675 , - 3994 , - 3617 , - 3576 , - 3871 , - 470 , - 1437 , - 2740 , - 347 , - 2322 , - 601 , - 3248 , - 2199 , - 1486 , - 1109 , - 1068 , - 1363 , - 1994 , - 2961 , - 232 , - 1871 , - 3846 , - 2125 , - 740 , - 3723 , - 3010 , - 2633 , - 2592 , - 2887 , - 3518 , - 453 , - 1756 , - 3395 , - 1338 , - 3649 , - 2264 , - 1215 , - 502 , - 125 , - 84 , - 379 , - 1010 , - 1977 , - 3280 , - 887 , - 2862 , - 1141 , - 3788 , - 2739 , - 2026 , - 1649 , - 1608 , - 1903 , - 2534 , - 3501 , - 772 , - 2411 , - 354 , - 2665 , - 1280 , - 231 , - 3550 , - 3173 , - 3132 , - 3427 , - 26 , - 993 , - 2296 , - 3935 , - 1878 , - 157 , - 2804 , - 1755 , - 1042 , - 665 , - 624 , - 919 , - 1550 , - 2517 , - 3820 , - 1427 , - 3402 , - 1681 , - 296 , - 3279 , - 2566 , - 2189 , - 2148 , - 2443 , - 3074 , - 9 , - 1312 , - 2951 , - 894 , - 3205 , - 1820 , - 771 , - 58 , - 3713 , - 3672 , - 3967 , - 566 , - 1533 , - 2836 , - 443 , - 2418 , - 697 , - 3344 , - 2295 , - 1582 , - 1205 , - 1164 , - 1459 , - 2090 , - 3057 , - 328 , - 1967 , - 3942 , - 2221 , - 836 , - 3819 , - 3106 , - 2729 , - 2688 , - 2983 , - 3614 , - 549 , - 1852 , - 3491 , - 1434 , - 3745 , - 2360 , - 1311 , - 598 , - 221 , - 180 , - 475 , - 1106 , - 2073 , - 3376 , - 983 , - 2958 , - 1237 , - 3884 , - 2835 , - 2122 , - 1745 , - 1704 , - 1999 , - 2630 , - 3597 , - 868 , - 2507 , - 450 , - 2761 , - 1376 , - 327 , - 3646 , - 3269 , - 3228 , - 3523 , - 122 , - 1089 , - 2392 , - 4031 , - 1974 , - 253 , - 2900 , - 1851 , - 1138 , - 761 , - 720 , - 1015 , - 1646 , - 2613 , - 3916 , - 1523 , - 3498 , - 1777 , - 392 , - 3375 , - 2662 , - 2285 , - 2244 , - 2539 , - 3170 , - 105 , - 1408 , - 3047 , - 990 , - 3301 , - 1916 , - 867 , - 154 , - 3809 , - 3768 , - 31 , - 662 , - 1629 , - 2932 , - 539 , - 2514 , - 793 , - 3440 , - 2391 , - 1678 , - 1301 , - 1260 , - 1555 , - 2186 , - 3153 , - 424 , - 2063 , - 6 , - 2317 , - 932 , - 3915 , - 3202 , - 2825 , - 2784 , - 3079 , - 3710 , - 645 , - 1948 , - 3587 , - 1530 , - 3841 , - 2456 , - 1407 , - 694 , - 317 , - 276 , - 571 , - 1202 , - 2169 , - 3472 , - 1079 , - 3054 , - 1333 , - 3980 , - 2931 , - 2218 , - 1841 , - 1800 , - 2095 , - 2726 , - 3693 , - 964 , - 2603 , - 546 , - 2857 , - 1472 , - 423 , - 3742 , - 3365 , - 3324 , - 3619 , - 218 , - 1185 , - 2488 , - 95 , - 2070 , - 349 , - 2996 , - 1947 , - 1234 , - 857 , - 816 , - 1111 , - 1742 , - 2709 , - 4012 , - 1619 , - 3594 , - 1873 , - 488 , - 3471 , - 2758 , - 2381 , - 2340 , - 2635 , - 3266 , - 201 , - 1504 , - 3143 , - 1086 , - 3397 , - 2012 , - 963 , - 250 , - 3905 , - 3864 , - 127 , - 758 , - 1725 , - 3028 , - 635 , - 2610 , - 889 , - 3536 , - 2487 , - 1774 , - 1397 , - 1356 , - 1651 , - 2282 , - 3249 , - 520 , - 2159 , - 102 , - 2413 , - 1028 , - 4011 , - 3298 , - 2921 , - 2880 , - 3175 , - 3806 , - 741 , - 2044 , - 3683 , - 1626 , - 3937 , - 2552 , - 1503 , - 790 , - 413 , - 372 , - 667 , - 1298 , - 2265 , - 3568 , - 1175 , - 3150 , - 1429 , - 44 , - 3027 , - 2314 , - 1937 , - 1896 , - 2191 , - 2822 , - 3789 , - 1060 , - 2699 , - 642 , - 2953 , - 1568 , - 519 , - 3838 , - 3461 , - 3420 , - 3715 , - 314 , - 1281 , - 2584 , - 191 , - 2166 , - 445 , - 3092 , - 2043 , - 1330 , - 953 , - 912 , - 1207 , - 1838 , - 2805 , - 76 , - 1715 , - 3690 , - 1969 , - 584 , - 3567 , - 2854 , - 2477 , - 2436 , - 2731 , - 3362 , - 297 , - 1600 , - 3239 , - 1182 , - 3493 , - 2108 , - 1059 , - 346 , - 4001 , - 3960 , - 223 , - 854 , - 1821 , - 3124 , - 731 , - 2706 , - 985 , - 3632 , - 2583 , - 1870 , - 1493 , - 1452 , - 1747 , - 2378 , - 3345 , - 616 , - 2255 , - 198 , - 2509 , - 1124 , - 75 , - 3394 , - 3017 , - 2976 , - 3271 , - 3902 , - 837 , - 2140 , - 3779 , - 1722 , - 1 , - 2648 , - 1599 , - 886 , - 509 , - 468 , - 763 , - 1394 , - 2361 , - 3664 , - 1271 , - 3246 , - 1525 , - 140 , - 3123 , - 2410 , - 2033 , - 1992 , - 2287 , - 2918 , - 3885 , - 1156 , - 2795 , - 738 , - 3049 , - 1664 , - 615 , - 3934 , - 3557 , - 3516 , - 3811 , - 410 , - 1377 , - 2680 , - 287 , - 2262 , - 541 , - 3188 , - 2139 , - 1426 , - 1049 , - 1008 , - 1303 , - 1934 , - 2901 , - 172 , - 1811 , - 3786 , - 2065 , - 680 , - 3663 , - 2950 , - 2573 , - 2532 , - 2827 , - 3458 , - 393 , - 1696 , - 3335 , - 1278 , - 3589 , - 2204 , - 1155 , - 442 , - 65 , - 24 , - 319 , - 950 , - 1917 , - 3220 , - 827 , - 2802 , - 1081 , - 3728 , - 2679 , - 1966 , - 1589 , - 1548 , - 1843 , - 2474 , - 3441 , - 712 , - 2351 , - 294 , - 2605 , - 1220 , - 171 , - 3490 , - 3113 , - 3072 , - 3367 , - 3998 , - 933 , - 2236 , - 3875 , - 1818 , - 97 , - 2744 , - 1695 , - 982 , - 605 , - 564 , - 859 , - 1490 , - 2457 , - 3760 , - 1367 , - 3342 , - 1621 , - 236 , - 3219 , - 2506 , - 2129 , - 2088 , - 2383 , - 3014 , - 3981 , - 1252 , - 2891 , - 834 , - 3145 , - 1760 , - 711 , - 4030 , - 3653 , - 3612 , - 3907 , - 506 , - 1473 , - 2776 , - 383 , - 2358 , - 637 , - 3284 , - 2235 , - 1522 , - 1145 , - 1104 , - 1399 , - 2030 , - 2997 , - 268 , - 1907 , - 3882 , - 2161 , - 776 , - 3759 , - 3046 , - 2669 , - 2628 , - 2923 , - 3554 , - 489 , - 1792 , - 3431 , - 1374 , - 3685 , - 2300 , - 1251 , - 538 , - 161 , - 120 , - 415 , - 1046 , - 2013 , - 3316 , - 923 , - 2898 , - 1177 , - 3824 , - 2775 , - 2062 , - 1685 , - 1644 , - 1939 , - 2570 , - 3537 , - 808 , - 2447 , - 390 , - 2701 , - 1316 , - 267 , - 3586 , - 3209 , - 3168 , - 3463 , - 62 , - 1029 , - 2332 , - 3971 , - 1914 , - 193 , - 2840 , - 1791 , - 1078 , - 701 , - 660 , - 955 , - 1586 , - 2553 , - 3856 , - 1463 , - 3438 , - 1717 , - 332 , - 3315 , - 2602 , - 2225 , - 2184 , - 2479 , - 3110 , - 45 , - 1348 , - 2987 , - 930 , - 3241 , - 1856 , - 807 , - 94 , - 3749 , - 3708 , - 4003 , - 602 , - 1569 , - 2872 , - 479 , - 2454 , - 733 , - 3380 , - 2331 , - 1618 , - 1241 , - 1200 , - 1495 , - 2126 , - 3093 , - 364 , - 2003 , - 3978 , - 2257 , - 872 , - 3855 , - 3142 , - 2765 , - 2724 , - 3019 , - 3650 , - 585 , - 1888 , - 3527 , - 1470 , - 3781 , - 2396 , - 1347 , - 634 , - 257 , - 216 , - 511 , - 1142 , - 2109 , - 3412 , - 1019 , - 2994 , - 1273 , - 3920 , - 2871 , - 2158 , - 1781 , - 1740 , - 2035 , - 2666 , - 3633 , - 904 , - 2543 , - 486 , - 2797 , - 1412 , - 363 , - 3682 , - 3305 , - 3264 , - 3559 , - 158 , - 1125 , - 2428 , - 35 , - 2010 , - 289 , - 2936 , - 1887 , - 1174 , - 797 , - 756 , - 1051 , - 1682 , - 2649 , - 3952 , - 1559 , - 3534 , - 1813 , - 428 , - 3411 , - 2698 , - 2321 , - 2280 , - 2575 , - 3206 , - 141 , - 1444 , - 3083 , - 1026 , - 3337 , - 1952 , - 903 , - 190 , - 3845 , - 3804 , - 67 , - 698 , - 1665 , - 2968 , - 575 , - 2550 , - 829 , - 3476 , - 2427 , - 1714 , - 1337 , - 1296 , - 1591 , - 2222 , - 3189 , - 460 , - 2099 , - 42 , - 2353 , - 968 , - 3951 , - 3238 , - 2861 , - 2820 , - 3115 , - 3746 , - 681 , - 1984 , - 3623 , - 1566 , - 3877 , - 2492 , - 1443 , - 730 , - 353 , - 312 , - 607 , - 1238 , - 2205 , - 3508 , - 1115 , - 3090 , - 1369 , - 4016 , - 2967 , - 2254 , - 1877 , - 1836 , - 2131 , - 2762 , - 3729 , - 1000 , - 2639 , - 582 , - 2893 , - 1508 , - 459 , - 3778 , - 3401 , - 3360 , - 3655 , - 254 , - 1221 , - 2524 , - 131 , - 2106 , - 385 , - 3032 , - 1983 , - 1270 , - 893 , - 852 , - 1147 , - 1778 , - 2745 , - 16 , - 1655 , - 3630 , - 1909 , - 524 , - 3507 , - 2794 , - 2417 , - 2376 , - 2671 , - 3302 , - 237 , - 1540 , - 3179 , - 1122 , - 3433 , - 2048 , - 999 , - 286 , - 3941 , - 3900 , - 163 , - 794 , - 1761 , - 3064 , - 671 , - 2646 , - 925 , - 3572 , - 2523 , - 1810 , - 1433 , - 1392 , - 1687 , - 2318 , - 3285 , - 556 , - 2195 , - 138 , - 2449 , - 1064 , - 15 , - 3334 , - 2957 , - 2916 , - 3211 , - 3842 , - 777 , - 2080 , - 3719 , - 1662 , - 3973 , - 2588 , - 1539 , - 826 , - 449 , - 408 , - 703 , - 1334 , - 2301 , - 3604 , - 1211 , - 3186 , - 1465 , - 80 , - 3063 , - 2350 , - 1973 , - 1932 , - 2227 , - 2858 , - 3825 , - 1096 , - 2735 , - 678 , - 2989 , - 1604 , - 555 , - 3874 , - 3497 , - 3456 , - 3751 , - 350 , - 1317 , - 2620 , - 227 , - 2202 , - 481 , - 3128 , - 2079 , - 1366 , - 989 , - 948 , - 1243 , - 1874 , - 2841 , - 112 , - 1751 , - 3726 , - 2005 , - 620 , - 3603 , - 2890 , - 2513 , - 2472 , - 2767 , - 3398 , - 333 , - 1636 , - 3275 , - 1218 , - 3529 , - 2144 , - 1095 , - 382 , - 5 , - 3996 , - 259 , - 890 , - 1857 , - 3160 , - 767 , - 2742 , - 1021 , - 3668 , - 2619 , - 1906 , - 1529 , - 1488 , - 1783 , - 2414 , - 3381 , - 652 , - 2291 , - 234 , - 2545 , - 1160 , - 111 , - 3430 , - 3053 , - 3012 , - 3307 , - 3938 , - 873 , - 2176 , - 3815 , - 1758 , - 37 , - 2684 , - 1635 , - 922 , - 545 , - 504 , - 799 , - 1430 , - 2397 , - 3700 , - 1307 , - 3282 , - 1561 , - 176 , - 3159 , - 2446 , - 2069 , - 2028 , - 2323 , - 2954 , - 3921 , - 1192 , - 2831 , - 774 , - 3085 , - 1700 , - 651 , - 3970 , - 3593 , - 3552 , - 3847 , - 446 , - 1413 , - 2716 , - 323 , - 2298 , - 577 , - 3224 , - 2175 , - 1462 , - 1085 , - 1044 , - 1339 , - 1970 , - 2937 , - 208 , - 1847 , - 3822 , - 2101 , - 716 , - 3699 , - 2986 , - 2609 , - 2568 , - 2863 , - 3494 , - 429 , - 1732 , - 3371 , - 1314 , - 3625 , - 2240 , - 1191 , - 478 , - 101 , - 60 , - 355 , - 986 , - 1953 , - 3256 , - 863 , - 2838 , - 1117 , - 3764 , - 2715 , - 2002 , - 1625 , - 1584 , - 1879 , - 2510 , - 3477 , - 748 , - 2387 , - 330 , - 2641 , - 1256 , - 207 , - 3526 , - 3149 , - 3108 , - 3403 , - 2 , - 969 , - 2272 , - 3911 , - 1854 , - 133 , - 2780 , - 1731 , - 1018 , - 641 , - 600 , - 895 , - 1526 , - 2493 , - 3796 , - 1403 , - 3378 , - 1657 , - 272 , - 3255 , - 2542 , - 2165 , - 2124 , - 2419 , - 3050 , - 4017 , - 1288 , - 2927 , - 870 , - 3181 , - 1796 , - 747 , - 34 , - 3689 , - 3648 , - 3943 , - 542 , - 1509 , - 2812 , - 419 , - 2394 , - 673 , - 3320 , - 2271 , - 1558 , - 1181 , - 1140 , - 1435 , - 2066 , - 3033 , - 304 , - 1943 , - 3918 , - 2197 , - 812 , - 3795 , - 3082 , - 2705 , - 2664 , - 2959 , - 3590 , - 525 , - 1828 , - 3467 , - 1410 , - 3721 , - 2336 , - 1287 , - 574 , - 197 , - 156 , - 451 , - 1082 , - 2049 , - 3352 , - 959 , - 2934 , - 1213 , - 3860 , - 2811 , - 2098 , - 1721 , - 1680 , - 1975 , - 2606 , - 3573 , - 844 , - 2483 , - 426 , - 2737 , - 1352 , - 303 , - 3622 , - 3245 , - 3204 , - 3499 , - 98 , - 1065 , - 2368 , - 4007 , - 1950 , - 229 , - 2876 , - 1827 , - 1114 , - 737 , - 696 , - 991 , - 1622 , - 2589 , - 3892 , - 1499 , - 3474 , - 1753 , - 368 , - 3351 , - 2638 , - 2261 , - 2220 , - 2515 , - 3146 , - 81 , - 1384 , - 3023 , - 966 , - 3277 , - 1892 , - 843 , - 130 , - 3785 , - 3744 , - 7 , - 638 , - 1605 , - 2908 , - 515 , - 2490 , - 769 , - 3416 , - 2367 , - 1654 , - 1277 , - 1236 , - 1531 , - 2162 , - 3129 , - 400 , - 2039 , - 4014 , - 2293 , - 908 , - 3891 , - 3178 , - 2801 , - 2760 , - 3055 , - 3686 , - 621 , - 1924 , - 3563 , - 1506 , - 3817 , - 2432 , - 1383 , - 670 , - 293 , - 252 , - 547 , - 1178 , - 2145 , - 3448 , - 1055 , - 3030 , - 1309 , - 3956 , - 2907 , - 2194 , - 1817 , - 1776 , - 2071 , - 2702 , - 3669 , - 940 , - 2579 , - 522 , - 2833 , - 1448 , - 399 , - 3718 , - 3341 , - 3300 , - 3595 , - 194 , - 1161 , - 2464 , - 71 , - 2046 , - 325 , - 2972 , - 1923 , - 1210 , - 833 , - 792 , - 1087 , - 1718 , - 2685 , - 3988 , - 1595 , - 3570 , - 1849 , - 464 , - 3447 , - 2734 , - 2357 , - 2316 , - 2611 , - 3242 , - 177 , - 1480 , - 3119 , - 1062 , - 3373 , - 1988 , - 939 , - 226 , - 3881 , - 3840 , - 103 , - 734 , - 1701 , - 3004 , - 611 , - 2586 , - 865 , - 3512 , - 2463 , - 1750 , - 1373 , - 1332 , - 1627 , - 2258 , - 3225 , - 496 , - 2135 , - 78 , - 2389 , - 1004 , - 3987 , - 3274 , - 2897 , - 2856 , - 3151 , - 3782 , - 717 , - 2020 , - 3659 , - 1602 , - 3913 , - 2528 , - 1479 , - 766 , - 389 , - 348 , - 643 , - 1274 , - 2241 , - 3544 , - 1151 , - 3126 , - 1405 , - 20 , - 3003 , - 2290 , - 1913 , - 1872 , - 2167 , - 2798 , - 3765 , - 1036 , - 2675 , - 618 , - 2929 , - 1544 , - 495 , - 3814 , - 3437 , - 3396 , - 3691 , - 290 , - 1257 , - 2560 , - 167 , - 2142 , - 421 , - 3068 , - 2019 , - 1306 , - 929 , - 888 , - 1183 , - 1814 , - 2781 , - 52 , - 1691 , - 3666 , - 1945 , - 560 , - 3543 , - 2830 , - 2453 , - 2412 , - 2707 , - 3338 , - 273 , - 1576 , - 3215 , - 1158 , - 3469 , - 2084 , - 1035 , - 322 , - 3977 , - 3936 , - 199 , - 830 , - 1797 , - 3100 , - 707 , - 2682 , - 961 , - 3608 , - 2559 , - 1846 , - 1469 , - 1428 , - 1723 , - 2354 , - 3321 , - 592 , - 2231 , - 174 , - 2485 , - 1100 , - 51 , - 3370 , - 2993 , - 2952 , - 3247 , - 3878 , - 813 , - 2116 , - 3755 , - 1698 , - 4009 , - 2624 , - 1575 , - 862 , - 485 , - 444 , - 739 , - 1370 , - 2337 , - 3640 , - 1247 , - 3222 , - 1501 , - 116 , - 3099 , - 2386 , - 2009 , - 1968 , - 2263 , - 2894 , - 3861 , - 1132 , - 2771 , - 714 , - 3025 , - 1640 , - 591 , - 3910 , - 3533 , - 3492 , - 3787 , - 386 , - 1353 , - 2656 , - 263 , - 2238 , - 517 , - 3164 , - 2115 , - 1402 , - 1025 , - 984 , - 1279 , - 1910 , - 2877 , - 148 , - 1787 , - 3762 , - 2041 , - 656 , - 3639 , - 2926 , - 2549 , - 2508 , - 2803 , - 3434 , - 369 , - 1672 , - 3311 , - 1254 , - 3565 , - 2180 , - 1131 , - 418 , - 41 , - 0 , - 95 , - 318 , - 669 , - 1148 , - 1755 , - 2490 , - 3353 , - 248 , - 1367 , - 2614 , - 3989 , - 1396 , - 3027 , - 690 , - 2577 , - 496 , - 2639 , - 814 , - 3213 , - 1644 , - 203 , - 2986 , - 1801 , - 744 , - 3911 , - 3110 , - 2437 , - 1892 , - 1475 , - 1186 , - 1025 , - 992 , - 1087 , - 1310 , - 1661 , - 2140 , - 2747 , - 3482 , - 249 , - 1240 , - 2359 , - 3606 , - 885 , - 2388 , - 4019 , - 1682 , - 3569 , - 1488 , - 3631 , - 1806 , - 109 , - 2636 , - 1195 , - 3978 , - 2793 , - 1736 , - 807 , - 6 , - 3429 , - 2884 , - 2467 , - 2178 , - 2017 , - 1984 , - 2079 , - 2302 , - 2653 , - 3132 , - 3739 , - 378 , - 1241 , - 2232 , - 3351 , - 502 , - 1877 , - 3380 , - 915 , - 2674 , - 465 , - 2480 , - 527 , - 2798 , - 1101 , - 3628 , - 2187 , - 874 , - 3785 , - 2728 , - 1799 , - 998 , - 325 , - 3876 , - 3459 , - 3170 , - 3009 , - 2976 , - 3071 , - 3294 , - 3645 , - 28 , - 635 , - 1370 , - 2233 , - 3224 , - 247 , - 1494 , - 2869 , - 276 , - 1907 , - 3666 , - 1457 , - 3472 , - 1519 , - 3790 , - 2093 , - 524 , - 3179 , - 1866 , - 681 , - 3720 , - 2791 , - 1990 , - 1317 , - 772 , - 355 , - 66 , - 4001 , - 3968 , - 4063 , - 190 , - 541 , - 1020 , - 1627 , - 2362 , - 3225 , - 120 , - 1239 , - 2486 , - 3861 , - 1268 , - 2899 , - 562 , - 2449 , - 368 , - 2511 , - 686 , - 3085 , - 1516 , - 75 , - 2858 , - 1673 , - 616 , - 3783 , - 2982 , - 2309 , - 1764 , - 1347 , - 1058 , - 897 , - 864 , - 959 , - 1182 , - 1533 , - 2012 , - 2619 , - 3354 , - 121 , - 1112 , - 2231 , - 3478 , - 757 , - 2260 , - 3891 , - 1554 , - 3441 , - 1360 , - 3503 , - 1678 , - 4077 , - 2508 , - 1067 , - 3850 , - 2665 , - 1608 , - 679 , - 3974 , - 3301 , - 2756 , - 2339 , - 2050 , - 1889 , - 1856 , - 1951 , - 2174 , - 2525 , - 3004 , - 3611 , - 250 , - 1113 , - 2104 , - 3223 , - 374 , - 1749 , - 3252 , - 787 , - 2546 , - 337 , - 2352 , - 399 , - 2670 , - 973 , - 3500 , - 2059 , - 746 , - 3657 , - 2600 , - 1671 , - 870 , - 197 , - 3748 , - 3331 , - 3042 , - 2881 , - 2848 , - 2943 , - 3166 , - 3517 , - 3996 , - 507 , - 1242 , - 2105 , - 3096 , - 119 , - 1366 , - 2741 , - 148 , - 1779 , - 3538 , - 1329 , - 3344 , - 1391 , - 3662 , - 1965 , - 396 , - 3051 , - 1738 , - 553 , - 3592 , - 2663 , - 1862 , - 1189 , - 644 , - 227 , - 4034 , - 3873 , - 3840 , - 3935 , - 62 , - 413 , - 892 , - 1499 , - 2234 , - 3097 , - 4088 , - 1111 , - 2358 , - 3733 , - 1140 , - 2771 , - 434 , - 2321 , - 240 , - 2383 , - 558 , - 2957 , - 1388 , - 4043 , - 2730 , - 1545 , - 488 , - 3655 , - 2854 , - 2181 , - 1636 , - 1219 , - 930 , - 769 , - 736 , - 831 , - 1054 , - 1405 , - 1884 , - 2491 , - 3226 , - 4089 , - 984 , - 2103 , - 3350 , - 629 , - 2132 , - 3763 , - 1426 , - 3313 , - 1232 , - 3375 , - 1550 , - 3949 , - 2380 , - 939 , - 3722 , - 2537 , - 1480 , - 551 , - 3846 , - 3173 , - 2628 , - 2211 , - 1922 , - 1761 , - 1728 , - 1823 , - 2046 , - 2397 , - 2876 , - 3483 , - 122 , - 985 , - 1976 , - 3095 , - 246 , - 1621 , - 3124 , - 659 , - 2418 , - 209 , - 2224 , - 271 , - 2542 , - 845 , - 3372 , - 1931 , - 618 , - 3529 , - 2472 , - 1543 , - 742 , - 69 , - 3620 , - 3203 , - 2914 , - 2753 , - 2720 , - 2815 , - 3038 , - 3389 , - 3868 , - 379 , - 1114 , - 1977 , - 2968 , - 4087 , - 1238 , - 2613 , - 20 , - 1651 , - 3410 , - 1201 , - 3216 , - 1263 , - 3534 , - 1837 , - 268 , - 2923 , - 1610 , - 425 , - 3464 , - 2535 , - 1734 , - 1061 , - 516 , - 99 , - 3906 , - 3745 , - 3712 , - 3807 , - 4030 , - 285 , - 764 , - 1371 , - 2106 , - 2969 , - 3960 , - 983 , - 2230 , - 3605 , - 1012 , - 2643 , - 306 , - 2193 , - 112 , - 2255 , - 430 , - 2829 , - 1260 , - 3915 , - 2602 , - 1417 , - 360 , - 3527 , - 2726 , - 2053 , - 1508 , - 1091 , - 802 , - 641 , - 608 , - 703 , - 926 , - 1277 , - 1756 , - 2363 , - 3098 , - 3961 , - 856 , - 1975 , - 3222 , - 501 , - 2004 , - 3635 , - 1298 , - 3185 , - 1104 , - 3247 , - 1422 , - 3821 , - 2252 , - 811 , - 3594 , - 2409 , - 1352 , - 423 , - 3718 , - 3045 , - 2500 , - 2083 , - 1794 , - 1633 , - 1600 , - 1695 , - 1918 , - 2269 , - 2748 , - 3355 , - 4090 , - 857 , - 1848 , - 2967 , - 118 , - 1493 , - 2996 , - 531 , - 2290 , - 81 , - 2096 , - 143 , - 2414 , - 717 , - 3244 , - 1803 , - 490 , - 3401 , - 2344 , - 1415 , - 614 , - 4037 , - 3492 , - 3075 , - 2786 , - 2625 , - 2592 , - 2687 , - 2910 , - 3261 , - 3740 , - 251 , - 986 , - 1849 , - 2840 , - 3959 , - 1110 , - 2485 , - 3988 , - 1523 , - 3282 , - 1073 , - 3088 , - 1135 , - 3406 , - 1709 , - 140 , - 2795 , - 1482 , - 297 , - 3336 , - 2407 , - 1606 , - 933 , - 388 , - 4067 , - 3778 , - 3617 , - 3584 , - 3679 , - 3902 , - 157 , - 636 , - 1243 , - 1978 , - 2841 , - 3832 , - 855 , - 2102 , - 3477 , - 884 , - 2515 , - 178 , - 2065 , - 4080 , - 2127 , - 302 , - 2701 , - 1132 , - 3787 , - 2474 , - 1289 , - 232 , - 3399 , - 2598 , - 1925 , - 1380 , - 963 , - 674 , - 513 , - 480 , - 575 , - 798 , - 1149 , - 1628 , - 2235 , - 2970 , - 3833 , - 728 , - 1847 , - 3094 , - 373 , - 1876 , - 3507 , - 1170 , - 3057 , - 976 , - 3119 , - 1294 , - 3693 , - 2124 , - 683 , - 3466 , - 2281 , - 1224 , - 295 , - 3590 , - 2917 , - 2372 , - 1955 , - 1666 , - 1505 , - 1472 , - 1567 , - 1790 , - 2141 , - 2620 , - 3227 , - 3962 , - 729 , - 1720 , - 2839 , - 4086 , - 1365 , - 2868 , - 403 , - 2162 , - 4049 , - 1968 , - 15 , - 2286 , - 589 , - 3116 , - 1675 , - 362 , - 3273 , - 2216 , - 1287 , - 486 , - 3909 , - 3364 , - 2947 , - 2658 , - 2497 , - 2464 , - 2559 , - 2782 , - 3133 , - 3612 , - 123 , - 858 , - 1721 , - 2712 , - 3831 , - 982 , - 2357 , - 3860 , - 1395 , - 3154 , - 945 , - 2960 , - 1007 , - 3278 , - 1581 , - 12 , - 2667 , - 1354 , - 169 , - 3208 , - 2279 , - 1478 , - 805 , - 260 , - 3939 , - 3650 , - 3489 , - 3456 , - 3551 , - 3774 , - 29 , - 508 , - 1115 , - 1850 , - 2713 , - 3704 , - 727 , - 1974 , - 3349 , - 756 , - 2387 , - 50 , - 1937 , - 3952 , - 1999 , - 174 , - 2573 , - 1004 , - 3659 , - 2346 , - 1161 , - 104 , - 3271 , - 2470 , - 1797 , - 1252 , - 835 , - 546 , - 385 , - 352 , - 447 , - 670 , - 1021 , - 1500 , - 2107 , - 2842 , - 3705 , - 600 , - 1719 , - 2966 , - 245 , - 1748 , - 3379 , - 1042 , - 2929 , - 848 , - 2991 , - 1166 , - 3565 , - 1996 , - 555 , - 3338 , - 2153 , - 1096 , - 167 , - 3462 , - 2789 , - 2244 , - 1827 , - 1538 , - 1377 , - 1344 , - 1439 , - 1662 , - 2013 , - 2492 , - 3099 , - 3834 , - 601 , - 1592 , - 2711 , - 3958 , - 1237 , - 2740 , - 275 , - 2034 , - 3921 , - 1840 , - 3983 , - 2158 , - 461 , - 2988 , - 1547 , - 234 , - 3145 , - 2088 , - 1159 , - 358 , - 3781 , - 3236 , - 2819 , - 2530 , - 2369 , - 2336 , - 2431 , - 2654 , - 3005 , - 3484 , - 4091 , - 730 , - 1593 , - 2584 , - 3703 , - 854 , - 2229 , - 3732 , - 1267 , - 3026 , - 817 , - 2832 , - 879 , - 3150 , - 1453 , - 3980 , - 2539 , - 1226 , - 41 , - 3080 , - 2151 , - 1350 , - 677 , - 132 , - 3811 , - 3522 , - 3361 , - 3328 , - 3423 , - 3646 , - 3997 , - 380 , - 987 , - 1722 , - 2585 , - 3576 , - 599 , - 1846 , - 3221 , - 628 , - 2259 , - 4018 , - 1809 , - 3824 , - 1871 , - 46 , - 2445 , - 876 , - 3531 , - 2218 , - 1033 , - 4072 , - 3143 , - 2342 , - 1669 , - 1124 , - 707 , - 418 , - 257 , - 224 , - 319 , - 542 , - 893 , - 1372 , - 1979 , - 2714 , - 3577 , - 472 , - 1591 , - 2838 , - 117 , - 1620 , - 3251 , - 914 , - 2801 , - 720 , - 2863 , - 1038 , - 3437 , - 1868 , - 427 , - 3210 , - 2025 , - 968 , - 39 , - 3334 , - 2661 , - 2116 , - 1699 , - 1410 , - 1249 , - 1216 , - 1311 , - 1534 , - 1885 , - 2364 , - 2971 , - 3706 , - 473 , - 1464 , - 2583 , - 3830 , - 1109 , - 2612 , - 147 , - 1906 , - 3793 , - 1712 , - 3855 , - 2030 , - 333 , - 2860 , - 1419 , - 106 , - 3017 , - 1960 , - 1031 , - 230 , - 3653 , - 3108 , - 2691 , - 2402 , - 2241 , - 2208 , - 2303 , - 2526 , - 2877 , - 3356 , - 3963 , - 602 , - 1465 , - 2456 , - 3575 , - 726 , - 2101 , - 3604 , - 1139 , - 2898 , - 689 , - 2704 , - 751 , - 3022 , - 1325 , - 3852 , - 2411 , - 1098 , - 4009 , - 2952 , - 2023 , - 1222 , - 549 , - 4 , - 3683 , - 3394 , - 3233 , - 3200 , - 3295 , - 3518 , - 3869 , - 252 , - 859 , - 1594 , - 2457 , - 3448 , - 471 , - 1718 , - 3093 , - 500 , - 2131 , - 3890 , - 1681 , - 3696 , - 1743 , - 4014 , - 2317 , - 748 , - 3403 , - 2090 , - 905 , - 3944 , - 3015 , - 2214 , - 1541 , - 996 , - 579 , - 290 , - 129 , - 96 , - 191 , - 414 , - 765 , - 1244 , - 1851 , - 2586 , - 3449 , - 344 , - 1463 , - 2710 , - 4085 , - 1492 , - 3123 , - 786 , - 2673 , - 592 , - 2735 , - 910 , - 3309 , - 1740 , - 299 , - 3082 , - 1897 , - 840 , - 4007 , - 3206 , - 2533 , - 1988 , - 1571 , - 1282 , - 1121 , - 1088 , - 1183 , - 1406 , - 1757 , - 2236 , - 2843 , - 3578 , - 345 , - 1336 , - 2455 , - 3702 , - 981 , - 2484 , - 19 , - 1778 , - 3665 , - 1584 , - 3727 , - 1902 , - 205 , - 2732 , - 1291 , - 4074 , - 2889 , - 1832 , - 903 , - 102 , - 3525 , - 2980 , - 2563 , - 2274 , - 2113 , - 2080 , - 2175 , - 2398 , - 2749 , - 3228 , - 3835 , - 474 , - 1337 , - 2328 , - 3447 , - 598 , - 1973 , - 3476 , - 1011 , - 2770 , - 561 , - 2576 , - 623 , - 2894 , - 1197 , - 3724 , - 2283 , - 970 , - 3881 , - 2824 , - 1895 , - 1094 , - 421 , - 3972 , - 3555 , - 3266 , - 3105 , - 3072 , - 3167 , - 3390 , - 3741 , - 124 , - 731 , - 1466 , - 2329 , - 3320 , - 343 , - 1590 , - 2965 , - 372 , - 2003 , - 3762 , - 1553 , - 3568 , - 1615 , - 3886 , - 2189 , - 620 , - 3275 , - 1962 , - 777 , - 3816 , - 2887 , - 2086 , - 1413 , - 868 , - 451 , - 162 , - 1 , - 4064 , - 63 , - 286 , - 637 , - 1116 , - 1723 , - 2458 , - 3321 , - 216 , - 1335 , - 2582 , - 3957 , - 1364 , - 2995 , - 658 , - 2545 , - 464 , - 2607 , - 782 , - 3181 , - 1612 , - 171 , - 2954 , - 1769 , - 712 , - 3879 , - 3078 , - 2405 , - 1860 , - 1443 , - 1154 , - 993 , - 960 , - 1055 , - 1278 , - 1629 , - 2108 , - 2715 , - 3450 , - 217 , - 1208 , - 2327 , - 3574 , - 853 , - 2356 , - 3987 , - 1650 , - 3537 , - 1456 , - 3599 , - 1774 , - 77 , - 2604 , - 1163 , - 3946 , - 2761 , - 1704 , - 775 , - 4070 , - 3397 , - 2852 , - 2435 , - 2146 , - 1985 , - 1952 , - 2047 , - 2270 , - 2621 , - 3100 , - 3707 , - 346 , - 1209 , - 2200 , - 3319 , - 470 , - 1845 , - 3348 , - 883 , - 2642 , - 433 , - 2448 , - 495 , - 2766 , - 1069 , - 3596 , - 2155 , - 842 , - 3753 , - 2696 , - 1767 , - 966 , - 293 , - 3844 , - 3427 , - 3138 , - 2977 , - 2944 , - 3039 , - 3262 , - 3613 , - 4092 , - 603 , - 1338 , - 2201 , - 3192 , - 215 , - 1462 , - 2837 , - 244 , - 1875 , - 3634 , - 1425 , - 3440 , - 1487 , - 3758 , - 2061 , - 492 , - 3147 , - 1834 , - 649 , - 3688 , - 2759 , - 1958 , - 1285 , - 740 , - 323 , - 34 , - 3969 , - 3936 , - 4031 , - 158 , - 509 , - 988 , - 1595 , - 2330 , - 3193 , - 88 , - 1207 , - 2454 , - 3829 , - 1236 , - 2867 , - 530 , - 2417 , - 336 , - 2479 , - 654 , - 3053 , - 1484 , - 43 , - 2826 , - 1641 , - 584 , - 3751 , - 2950 , - 2277 , - 1732 , - 1315 , - 1026 , - 865 , - 832 , - 927 , - 1150 , - 1501 , - 1980 , - 2587 , - 3322 , - 89 , - 1080 , - 2199 , - 3446 , - 725 , - 2228 , - 3859 , - 1522 , - 3409 , - 1328 , - 3471 , - 1646 , - 4045 , - 2476 , - 1035 , - 3818 , - 2633 , - 1576 , - 647 , - 3942 , - 3269 , - 2724 , - 2307 , - 2018 , - 1857 , - 1824 , - 1919 , - 2142 , - 2493 , - 2972 , - 3579 , - 218 , - 1081 , - 2072 , - 3191 , - 342 , - 1717 , - 3220 , - 755 , - 2514 , - 305 , - 2320 , - 367 , - 2638 , - 941 , - 3468 , - 2027 , - 714 , - 3625 , - 2568 , - 1639 , - 838 , - 165 , - 3716 , - 3299 , - 3010 , - 2849 , - 2816 , - 2911 , - 3134 , - 3485 , - 3964 , - 475 , - 1210 , - 2073 , - 3064 , - 87 , - 1334 , - 2709 , - 116 , - 1747 , - 3506 , - 1297 , - 3312 , - 1359 , - 3630 , - 1933 , - 364 , - 3019 , - 1706 , - 521 , - 3560 , - 2631 , - 1830 , - 1157 , - 612 , - 195 , - 4002 , - 3841 , - 3808 , - 3903 , - 30 , - 381 , - 860 , - 1467 , - 2202 , - 3065 , - 4056 , - 1079 , - 2326 , - 3701 , - 1108 , - 2739 , - 402 , - 2289 , - 208 , - 2351 , - 526 , - 2925 , - 1356 , - 4011 , - 2698 , - 1513 , - 456 , - 3623 , - 2822 , - 2149 , - 1604 , - 1187 , - 898 , - 737 , - 704 , - 799 , - 1022 , - 1373 , - 1852 , - 2459 , - 3194 , - 4057 , - 952 , - 2071 , - 3318 , - 597 , - 2100 , - 3731 , - 1394 , - 3281 , - 1200 , - 3343 , - 1518 , - 3917 , - 2348 , - 907 , - 3690 , - 2505 , - 1448 , - 519 , - 3814 , - 3141 , - 2596 , - 2179 , - 1890 , - 1729 , - 1696 , - 1791 , - 2014 , - 2365 , - 2844 , - 3451 , - 90 , - 953 , - 1944 , - 3063 , - 214 , - 1589 , - 3092 , - 627 , - 2386 , - 177 , - 2192 , - 239 , - 2510 , - 813 , - 3340 , - 1899 , - 586 , - 3497 , - 2440 , - 1511 , - 710 , - 37 , - 3588 , - 3171 , - 2882 , - 2721 , - 2688 , - 2783 , - 3006 , - 3357 , - 3836 , - 347 , - 1082 , - 1945 , - 2936 , - 4055 , - 1206 , - 2581 , - 4084 , - 1619 , - 3378 , - 1169 , - 3184 , - 1231 , - 3502 , - 1805 , - 236 , - 2891 , - 1578 , - 393 , - 3432 , - 2503 , - 1702 , - 1029 , - 484 , - 67 , - 3874 , - 3713 , - 3680 , - 3775 , - 3998 , - 253 , - 732 , - 1339 , - 2074 , - 2937 , - 3928 , - 951 , - 2198 , - 3573 , - 980 , - 2611 , - 274 , - 2161 , - 80 , - 2223 , - 398 , - 2797 , - 1228 , - 3883 , - 2570 , - 1385 , - 328 , - 3495 , - 2694 , - 2021 , - 1476 , - 1059 , - 770 , - 609 , - 576 , - 671 , - 894 , - 1245 , - 1724 , - 2331 , - 3066 , - 3929 , - 824 , - 1943 , - 3190 , - 469 , - 1972 , - 3603 , - 1266 , - 3153 , - 1072 , - 3215 , - 1390 , - 3789 , - 2220 , - 779 , - 3562 , - 2377 , - 1320 , - 391 , - 3686 , - 3013 , - 2468 , - 2051 , - 1762 , - 1601 , - 1568 , - 1663 , - 1886 , - 2237 , - 2716 , - 3323 , - 4058 , - 825 , - 1816 , - 2935 , - 86 , - 1461 , - 2964 , - 499 , - 2258 , - 49 , - 2064 , - 111 , - 2382 , - 685 , - 3212 , - 1771 , - 458 , - 3369 , - 2312 , - 1383 , - 582 , - 4005 , - 3460 , - 3043 , - 2754 , - 2593 , - 2560 , - 2655 , - 2878 , - 3229 , - 3708 , - 219 , - 954 , - 1817 , - 2808 , - 3927 , - 1078 , - 2453 , - 3956 , - 1491 , - 3250 , - 1041 , - 3056 , - 1103 , - 3374 , - 1677 , - 108 , - 2763 , - 1450 , - 265 , - 3304 , - 2375 , - 1574 , - 901 , - 356 , - 4035 , - 3746 , - 3585 , - 3552 , - 3647 , - 3870 , - 125 , - 604 , - 1211 , - 1946 , - 2809 , - 3800 , - 823 , - 2070 , - 3445 , - 852 , - 2483 , - 146 , - 2033 , - 4048 , - 2095 , - 270 , - 2669 , - 1100 , - 3755 , - 2442 , - 1257 , - 200 , - 3367 , - 2566 , - 1893 , - 1348 , - 931 , - 642 , - 481 , - 448 , - 543 , - 766 , - 1117 , - 1596 , - 2203 , - 2938 , - 3801 , - 696 , - 1815 , - 3062 , - 341 , - 1844 , - 3475 , - 1138 , - 3025 , - 944 , - 3087 , - 1262 , - 3661 , - 2092 , - 651 , - 3434 , - 2249 , - 1192 , - 263 , - 3558 , - 2885 , - 2340 , - 1923 , - 1634 , - 1473 , - 1440 , - 1535 , - 1758 , - 2109 , - 2588 , - 3195 , - 3930 , - 697 , - 1688 , - 2807 , - 4054 , - 1333 , - 2836 , - 371 , - 2130 , - 4017 , - 1936 , - 4079 , - 2254 , - 557 , - 3084 , - 1643 , - 330 , - 3241 , - 2184 , - 1255 , - 454 , - 3877 , - 3332 , - 2915 , - 2626 , - 2465 , - 2432 , - 2527 , - 2750 , - 3101 , - 3580 , - 91 , - 826 , - 1689 , - 2680 , - 3799 , - 950 , - 2325 , - 3828 , - 1363 , - 3122 , - 913 , - 2928 , - 975 , - 3246 , - 1549 , - 4076 , - 2635 , - 1322 , - 137 , - 3176 , - 2247 , - 1446 , - 773 , - 228 , - 3907 , - 3618 , - 3457 , - 3424 , - 3519 , - 3742 , - 4093 , - 476 , - 1083 , - 1818 , - 2681 , - 3672 , - 695 , - 1942 , - 3317 , - 724 , - 2355 , - 18 , - 1905 , - 3920 , - 1967 , - 142 , - 2541 , - 972 , - 3627 , - 2314 , - 1129 , - 72 , - 3239 , - 2438 , - 1765 , - 1220 , - 803 , - 514 , - 353 , - 320 , - 415 , - 638 , - 989 , - 1468 , - 2075 , - 2810 , - 3673 , - 568 , - 1687 , - 2934 , - 213 , - 1716 , - 3347 , - 1010 , - 2897 , - 816 , - 2959 , - 1134 , - 3533 , - 1964 , - 523 , - 3306 , - 2121 , - 1064 , - 135 , - 3430 , - 2757 , - 2212 , - 1795 , - 1506 , - 1345 , - 1312 , - 1407 , - 1630 , - 1981 , - 2460 , - 3067 , - 3802 , - 569 , - 1560 , - 2679 , - 3926 , - 1205 , - 2708 , - 243 , - 2002 , - 3889 , - 1808 , - 3951 , - 2126 , - 429 , - 2956 , - 1515 , - 202 , - 3113 , - 2056 , - 1127 , - 326 , - 3749 , - 3204 , - 2787 , - 2498 , - 2337 , - 2304 , - 2399 , - 2622 , - 2973 , - 3452 , - 4059 , - 698 , - 1561 , - 2552 , - 3671 , - 822 , - 2197 , - 3700 , - 1235 , - 2994 , - 785 , - 2800 , - 847 , - 3118 , - 1421 , - 3948 , - 2507 , - 1194 , - 9 , - 3048 , - 2119 , - 1318 , - 645 , - 100 , - 3779 , - 3490 , - 3329 , - 3296 , - 3391 , - 3614 , - 3965 , - 348 , - 955 , - 1690 , - 2553 , - 3544 , - 567 , - 1814 , - 3189 , - 596 , - 2227 , - 3986 , - 1777 , - 3792 , - 1839 , - 14 , - 2413 , - 844 , - 3499 , - 2186 , - 1001 , - 4040 , - 3111 , - 2310 , - 1637 , - 1092 , - 675 , - 386 , - 225 , - 192 , - 287 , - 510 , - 861 , - 1340 , - 1947 , - 2682 , - 3545 , - 440 , - 1559 , - 2806 , - 85 , - 1588 , - 3219 , - 882 , - 2769 , - 688 , - 2831 , - 1006 , - 3405 , - 1836 , - 395 , - 3178 , - 1993 , - 936 , - 7 , - 3302 , - 2629 , - 2084 , - 1667 , - 1378 , - 1217 , - 1184 , - 1279 , - 1502 , - 1853 , - 2332 , - 2939 , - 3674 , - 441 , - 1432 , - 2551 , - 3798 , - 1077 , - 2580 , - 115 , - 1874 , - 3761 , - 1680 , - 3823 , - 1998 , - 301 , - 2828 , - 1387 , - 74 , - 2985 , - 1928 , - 999 , - 198 , - 3621 , - 3076 , - 2659 , - 2370 , - 2209 , - 2176 , - 2271 , - 2494 , - 2845 , - 3324 , - 3931 , - 570 , - 1433 , - 2424 , - 3543 , - 694 , - 2069 , - 3572 , - 1107 , - 2866 , - 657 , - 2672 , - 719 , - 2990 , - 1293 , - 3820 , - 2379 , - 1066 , - 3977 , - 2920 , - 1991 , - 1190 , - 517 , - 4068 , - 3651 , - 3362 , - 3201 , - 3168 , - 3263 , - 3486 , - 3837 , - 220 , - 827 , - 1562 , - 2425 , - 3416 , - 439 , - 1686 , - 3061 , - 468 , - 2099 , - 3858 , - 1649 , - 3664 , - 1711 , - 3982 , - 2285 , - 716 , - 3371 , - 2058 , - 873 , - 3912 , - 2983 , - 2182 , - 1509 , - 964 , - 547 , - 258 , - 97 , - 64 , - 159 , - 382 , - 733 , - 1212 , - 1819 , - 2554 , - 3417 , - 312 , - 1431 , - 2678 , - 4053 , - 1460 , - 3091 , - 754 , - 2641 , - 560 , - 2703 , - 878 , - 3277 , - 1708 , - 267 , - 3050 , - 1865 , - 808 , - 3975 , - 3174 , - 2501 , - 1956 , - 1539 , - 1250 , - 1089 , - 1056 , - 1151 , - 1374 , - 1725 , - 2204 , - 2811 , - 3546 , - 313 , - 1304 , - 2423 , - 3670 , - 949 , - 2452 , - 4083 , - 1746 , - 3633 , - 1552 , - 3695 , - 1870 , - 173 , - 2700 , - 1259 , - 4042 , - 2857 , - 1800 , - 871 , - 70 , - 3493 , - 2948 , - 2531 , - 2242 , - 2081 , - 2048 , - 2143 , - 2366 , - 2717 , - 3196 , - 3803 , - 442 , - 1305 , - 2296 , - 3415 , - 566 , - 1941 , - 3444 , - 979 , - 2738 , - 529 , - 2544 , - 591 , - 2862 , - 1165 , - 3692 , - 2251 , - 938 , - 3849 , - 2792 , - 1863 , - 1062 , - 389 , - 3940 , - 3523 , - 3234 , - 3073 , - 3040 , - 3135 , - 3358 , - 3709 , - 92 , - 699 , - 1434 , - 2297 , - 3288 , - 311 , - 1558 , - 2933 , - 340 , - 1971 , - 3730 , - 1521 , - 3536 , - 1583 , - 3854 , - 2157 , - 588 , - 3243 , - 1930 , - 745 , - 3784 , - 2855 , - 2054 , - 1381 , - 836 , - 419 , - 130 , - 4065 , - 4032 , - 31 , - 254 , - 605 , - 1084 , - 1691 , - 2426 , - 3289 , - 184 , - 1303 , - 2550 , - 3925 , - 1332 , - 2963 , - 626 , - 2513 , - 432 , - 2575 , - 750 , - 3149 , - 1580 , - 139 , - 2922 , - 1737 , - 680 , - 3847 , - 3046 , - 2373 , - 1828 , - 1411 , - 1122 , - 961 , - 928 , - 1023 , - 1246 , - 1597 , - 2076 , - 2683 , - 3418 , - 185 , - 1176 , - 2295 , - 3542 , - 821 , - 2324 , - 3955 , - 1618 , - 3505 , - 1424 , - 3567 , - 1742 , - 45 , - 2572 , - 1131 , - 3914 , - 2729 , - 1672 , - 743 , - 4038 , - 3365 , - 2820 , - 2403 , - 2114 , - 1953 , - 1920 , - 2015 , - 2238 , - 2589 , - 3068 , - 3675 , - 314 , - 1177 , - 2168 , - 3287 , - 438 , - 1813 , - 3316 , - 851 , - 2610 , - 401 , - 2416 , - 463 , - 2734 , - 1037 , - 3564 , - 2123 , - 810 , - 3721 , - 2664 , - 1735 , - 934 , - 261 , - 3812 , - 3395 , - 3106 , - 2945 , - 2912 , - 3007 , - 3230 , - 3581 , - 4060 , - 571 , - 1306 , - 2169 , - 3160 , - 183 , - 1430 , - 2805 , - 212 , - 1843 , - 3602 , - 1393 , - 3408 , - 1455 , - 3726 , - 2029 , - 460 , - 3115 , - 1802 , - 617 , - 3656 , - 2727 , - 1926 , - 1253 , - 708 , - 291 , - 2 , - 3937 , - 3904 , - 3999 , - 126 , - 477 , - 956 , - 1563 , - 2298 , - 3161 , - 56 , - 1175 , - 2422 , - 3797 , - 1204 , - 2835 , - 498 , - 2385 , - 304 , - 2447 , - 622 , - 3021 , - 1452 , - 11 , - 2794 , - 1609 , - 552 , - 3719 , - 2918 , - 2245 , - 1700 , - 1283 , - 994 , - 833 , - 800 , - 895 , - 1118 , - 1469 , - 1948 , - 2555 , - 3290 , - 57 , - 1048 , - 2167 , - 3414 , - 693 , - 2196 , - 3827 , - 1490 , - 3377 , - 1296 , - 3439 , - 1614 , - 4013 , - 2444 , - 1003 , - 3786 , - 2601 , - 1544 , - 615 , - 3910 , - 3237 , - 2692 , - 2275 , - 1986 , - 1825 , - 1792 , - 1887 , - 2110 , - 2461 , - 2940 , - 3547 , - 186 , - 1049 , - 2040 , - 3159 , - 310 , - 1685 , - 3188 , - 723 , - 2482 , - 273 , - 2288 , - 335 , - 2606 , - 909 , - 3436 , - 1995 , - 682 , - 3593 , - 2536 , - 1607 , - 806 , - 133 , - 3684 , - 3267 , - 2978 , - 2817 , - 2784 , - 2879 , - 3102 , - 3453 , - 3932 , - 443 , - 1178 , - 2041 , - 3032 , - 55 , - 1302 , - 2677 , - 84 , - 1715 , - 3474 , - 1265 , - 3280 , - 1327 , - 3598 , - 1901 , - 332 , - 2987 , - 1674 , - 489 , - 3528 , - 2599 , - 1798 , - 1125 , - 580 , - 163 , - 3970 , - 3809 , - 3776 , - 3871 , - 4094 , - 349 , - 828 , - 1435 , - 2170 , - 3033 , - 4024 , - 1047 , - 2294 , - 3669 , - 1076 , - 2707 , - 370 , - 2257 , - 176 , - 2319 , - 494 , - 2893 , - 1324 , - 3979 , - 2666 , - 1481 , - 424 , - 3591 , - 2790 , - 2117 , - 1572 , - 1155 , - 866 , - 705 , - 672 , - 767 , - 990 , - 1341 , - 1820 , - 2427 , - 3162 , - 4025 , - 920 , - 2039 , - 3286 , - 565 , - 2068 , - 3699 , - 1362 , - 3249 , - 1168 , - 3311 , - 1486 , - 3885 , - 2316 , - 875 , - 3658 , - 2473 , - 1416 , - 487 , - 3782 , - 3109 , - 2564 , - 2147 , - 1858 , - 1697 , - 1664 , - 1759 , - 1982 , - 2333 , - 2812 , - 3419 , - 58 , - 921 , - 1912 , - 3031 , - 182 , - 1557 , - 3060 , - 595 , - 2354 , - 145 , - 2160 , - 207 , - 2478 , - 781 , - 3308 , - 1867 , - 554 , - 3465 , - 2408 , - 1479 , - 678 , - 5 , - 3556 , - 3139 , - 2850 , - 2689 , - 2656 , - 2751 , - 2974 , - 3325 , - 3804 , - 315 , - 1050 , - 1913 , - 2904 , - 4023 , - 1174 , - 2549 , - 4052 , - 1587 , - 3346 , - 1137 , - 3152 , - 1199 , - 3470 , - 1773 , - 204 , - 2859 , - 1546 , - 361 , - 3400 , - 2471 , - 1670 , - 997 , - 452 , - 35 , - 3842 , - 3681 , - 3648 , - 3743 , - 3966 , - 221 , - 700 , - 1307 , - 2042 , - 2905 , - 3896 , - 919 , - 2166 , - 3541 , - 948 , - 2579 , - 242 , - 2129 , - 48 , - 2191 , - 366 , - 2765 , - 1196 , - 3851 , - 2538 , - 1353 , - 296 , - 3463 , - 2662 , - 1989 , - 1444 , - 1027 , - 738 , - 577 , - 544 , - 639 , - 862 , - 1213 , - 1692 , - 2299 , - 3034 , - 3897 , - 792 , - 1911 , - 3158 , - 437 , - 1940 , - 3571 , - 1234 , - 3121 , - 1040 , - 3183 , - 1358 , - 3757 , - 2188 , - 747 , - 3530 , - 2345 , - 1288 , - 359 , - 3654 , - 2981 , - 2436 , - 2019 , - 1730 , - 1569 , - 1536 , - 1631 , - 1854 , - 2205 , - 2684 , - 3291 , - 4026 , - 793 , - 1784 , - 2903 , - 54 , - 1429 , - 2932 , - 467 , - 2226 , - 17 , - 2032 , - 79 , - 2350 , - 653 , - 3180 , - 1739 , - 426 , - 3337 , - 2280 , - 1351 , - 550 , - 3973 , - 3428 , - 3011 , - 2722 , - 2561 , - 2528 , - 2623 , - 2846 , - 3197 , - 3676 , - 187 , - 922 , - 1785 , - 2776 , - 3895 , - 1046 , - 2421 , - 3924 , - 1459 , - 3218 , - 1009 , - 3024 , - 1071 , - 3342 , - 1645 , - 76 , - 2731 , - 1418 , - 233 , - 3272 , - 2343 , - 1542 , - 869 , - 324 , - 4003 , - 3714 , - 3553 , - 3520 , - 3615 , - 3838 , - 93 , - 572 , - 1179 , - 1914 , - 2777 , - 3768 , - 791 , - 2038 , - 3413 , - 820 , - 2451 , - 114 , - 2001 , - 4016 , - 2063 , - 238 , - 2637 , - 1068 , - 3723 , - 2410 , - 1225 , - 168 , - 3335 , - 2534 , - 1861 , - 1316 , - 899 , - 610 , - 449 , - 416 , - 511 , - 734 , - 1085 , - 1564 , - 2171 , - 2906 , - 3769 , - 664 , - 1783 , - 3030 , - 309 , - 1812 , - 3443 , - 1106 , - 2993 , - 912 , - 3055 , - 1230 , - 3629 , - 2060 , - 619 , - 3402 , - 2217 , - 1160 , - 231 , - 3526 , - 2853 , - 2308 , - 1891 , - 1602 , - 1441 , - 1408 , - 1503 , - 1726 , - 2077 , - 2556 , - 3163 , - 3898 , - 665 , - 1656 , - 2775 , - 4022 , - 1301 , - 2804 , - 339 , - 2098 , - 3985 , - 1904 , - 4047 , - 2222 , - 525 , - 3052 , - 1611 , - 298 , - 3209 , - 2152 , - 1223 , - 422 , - 3845 , - 3300 , - 2883 , - 2594 , - 2433 , - 2400 , - 2495 , - 2718 , - 3069 , - 3548 , - 59 , - 794 , - 1657 , - 2648 , - 3767 , - 918 , - 2293 , - 3796 , - 1331 , - 3090 , - 881 , - 2896 , - 943 , - 3214 , - 1517 , - 4044 , - 2603 , - 1290 , - 105 , - 3144 , - 2215 , - 1414 , - 741 , - 196 , - 3875 , - 3586 , - 3425 , - 3392 , - 3487 , - 3710 , - 4061 , - 444 , - 1051 , - 1786 , - 2649 , - 3640 , - 663 , - 1910 , - 3285 , - 692 , - 2323 , - 4082 , - 1873 , - 3888 , - 1935 , - 110 , - 2509 , - 940 , - 3595 , - 2282 , - 1097 , - 40 , - 3207 , - 2406 , - 1733 , - 1188 , - 771 , - 482 , - 321 , - 288 , - 383 , - 606 , - 957 , - 1436 , - 2043 , - 2778 , - 3641 , - 536 , - 1655 , - 2902 , - 181 , - 1684 , - 3315 , - 978 , - 2865 , - 784 , - 2927 , - 1102 , - 3501 , - 1932 , - 491 , - 3274 , - 2089 , - 1032 , - 103 , - 3398 , - 2725 , - 2180 , - 1763 , - 1474 , - 1313 , - 1280 , - 1375 , - 1598 , - 1949 , - 2428 , - 3035 , - 3770 , - 537 , - 1528 , - 2647 , - 3894 , - 1173 , - 2676 , - 211 , - 1970 , - 3857 , - 1776 , - 3919 , - 2094 , - 397 , - 2924 , - 1483 , - 170 , - 3081 , - 2024 , - 1095 , - 294 , - 3717 , - 3172 , - 2755 , - 2466 , - 2305 , - 2272 , - 2367 , - 2590 , - 2941 , - 3420 , - 4027 , - 666 , - 1529 , - 2520 , - 3639 , - 790 , - 2165 , - 3668 , - 1203 , - 2962 , - 753 , - 2768 , - 815 , - 3086 , - 1389 , - 3916 , - 2475 , - 1162 , - 4073 , - 3016 , - 2087 , - 1286 , - 613 , - 68 , - 3747 , - 3458 , - 3297 , - 3264 , - 3359 , - 3582 , - 3933 , - 316 , - 923 , - 1658 , - 2521 , - 3512 , - 535 , - 1782 , - 3157 , - 564 , - 2195 , - 3954 , - 1745 , - 3760 , - 1807 , - 4078 , - 2381 , - 812 , - 3467 , - 2154 , - 969 , - 4008 , - 3079 , - 2278 , - 1605 , - 1060 , - 643 , - 354 , - 193 , - 160 , - 255 , - 478 , - 829 , - 1308 , - 1915 , - 2650 , - 3513 , - 408 , - 1527 , - 2774 , - 53 , - 1556 , - 3187 , - 850 , - 2737 , - 656 , - 2799 , - 974 , - 3373 , - 1804 , - 363 , - 3146 , - 1961 , - 904 , - 4071 , - 3270 , - 2597 , - 2052 , - 1635 , - 1346 , - 1185 , - 1152 , - 1247 , - 1470 , - 1821 , - 2300 , - 2907 , - 3642 , - 409 , - 1400 , - 2519 , - 3766 , - 1045 , - 2548 , - 83 , - 1842 , - 3729 , - 1648 , - 3791 , - 1966 , - 269 , - 2796 , - 1355 , - 42 , - 2953 , - 1896 , - 967 , - 166 , - 3589 , - 3044 , - 2627 , - 2338 , - 2177 , - 2144 , - 2239 , - 2462 , - 2813 , - 3292 , - 3899 , - 538 , - 1401 , - 2392 , - 3511 , - 662 , - 2037 , - 3540 , - 1075 , - 2834 , - 625 , - 2640 , - 687 , - 2958 , - 1261 , - 3788 , - 2347 , - 1034 , - 3945 , - 2888 , - 1959 , - 1158 , - 485 , - 4036 , - 3619 , - 3330 , - 3169 , - 3136 , - 3231 , - 3454 , - 3805 , - 188 , - 795 , - 1530 , - 2393 , - 3384 , - 407 , - 1654 , - 3029 , - 436 , - 2067 , - 3826 , - 1617 , - 3632 , - 1679 , - 3950 , - 2253 , - 684 , - 3339 , - 2026 , - 841 , - 3880 , - 2951 , - 2150 , - 1477 , - 932 , - 515 , - 226 , - 65 , - 32 , - 127 , - 350 , - 701 , - 1180 , - 1787 , - 2522 , - 3385 , - 280 , - 1399 , - 2646 , - 4021 , - 1428 , - 3059 , - 722 , - 2609 , - 528 , - 2671 , - 846 , - 3245 , - 1676 , - 235 , - 3018 , - 1833 , - 776 , - 3943 , - 3142 , - 2469 , - 1924 , - 1507 , - 1218 , - 1057 , - 1024 , - 1119 , - 1342 , - 1693 , - 2172 , - 2779 , - 3514 , - 281 , - 1272 , - 2391 , - 3638 , - 917 , - 2420 , - 4051 , - 1714 , - 3601 , - 1520 , - 3663 , - 1838 , - 141 , - 2668 , - 1227 , - 4010 , - 2825 , - 1768 , - 839 , - 38 , - 3461 , - 2916 , - 2499 , - 2210 , - 2049 , - 2016 , - 2111 , - 2334 , - 2685 , - 3164 , - 3771 , - 410 , - 1273 , - 2264 , - 3383 , - 534 , - 1909 , - 3412 , - 947 , - 2706 , - 497 , - 2512 , - 559 , - 2830 , - 1133 , - 3660 , - 2219 , - 906 , - 3817 , - 2760 , - 1831 , - 1030 , - 357 , - 3908 , - 3491 , - 3202 , - 3041 , - 3008 , - 3103 , - 3326 , - 3677 , - 60 , - 667 , - 1402 , - 2265 , - 3256 , - 279 , - 1526 , - 2901 , - 308 , - 1939 , - 3698 , - 1489 , - 3504 , - 1551 , - 3822 , - 2125 , - 556 , - 3211 , - 1898 , - 713 , - 3752 , - 2823 , - 2022 , - 1349 , - 804 , - 387 , - 98 , - 4033 , - 4000 , - 4095 , - 222 , - 573 , - 1052 , - 1659 , - 2394 , - 3257 , - 152 , - 1271 , - 2518 , - 3893 , - 1300 , - 2931 , - 594 , - 2481 , - 400 , - 2543 , - 718 , - 3117 , - 1548 , - 107 , - 2890 , - 1705 , - 648 , - 3815 , - 3014 , - 2341 , - 1796 , - 1379 , - 1090 , - 929 , - 896 , - 991 , - 1214 , - 1565 , - 2044 , - 2651 , - 3386 , - 153 , - 1144 , - 2263 , - 3510 , - 789 , - 2292 , - 3923 , - 1586 , - 3473 , - 1392 , - 3535 , - 1710 , - 13 , - 2540 , - 1099 , - 3882 , - 2697 , - 1640 , - 711 , - 4006 , - 3333 , - 2788 , - 2371 , - 2082 , - 1921 , - 1888 , - 1983 , - 2206 , - 2557 , - 3036 , - 3643 , - 282 , - 1145 , - 2136 , - 3255 , - 406 , - 1781 , - 3284 , - 819 , - 2578 , - 369 , - 2384 , - 431 , - 2702 , - 1005 , - 3532 , - 2091 , - 778 , - 3689 , - 2632 , - 1703 , - 902 , - 229 , - 3780 , - 3363 , - 3074 , - 2913 , - 2880 , - 2975 , - 3198 , - 3549 , - 4028 , - 539 , - 1274 , - 2137 , - 3128 , - 151 , - 1398 , - 2773 , - 180 , - 1811 , - 3570 , - 1361 , - 3376 , - 1423 , - 3694 , - 1997 , - 428 , - 3083 , - 1770 , - 585 , - 3624 , - 2695 , - 1894 , - 1221 , - 676 , - 259 , - 4066 , - 3905 , - 3872 , - 3967 , - 94 , - 445 , - 924 , - 1531 , - 2266 , - 3129 , - 24 , - 1143 , - 2390 , - 3765 , - 1172 , - 2803 , - 466 , - 2353 , - 272 , - 2415 , - 590 , - 2989 , - 1420 , - 4075 , - 2762 , - 1577 , - 520 , - 3687 , - 2886 , - 2213 , - 1668 , - 1251 , - 962 , - 801 , - 768 , - 863 , - 1086 , - 1437 , - 1916 , - 2523 , - 3258 , - 25 , - 1016 , - 2135 , - 3382 , - 661 , - 2164 , - 3795 , - 1458 , - 3345 , - 1264 , - 3407 , - 1582 , - 3981 , - 2412 , - 971 , - 3754 , - 2569 , - 1512 , - 583 , - 3878 , - 3205 , - 2660 , - 2243 , - 1954 , - 1793 , - 1760 , - 1855 , - 2078 , - 2429 , - 2908 , - 3515 , - 154 , - 1017 , - 2008 , - 3127 , - 278 , - 1653 , - 3156 , - 691 , - 2450 , - 241 , - 2256 , - 303 , - 2574 , - 877 , - 3404 , - 1963 , - 650 , - 3561 , - 2504 , - 1575 , - 774 , - 101 , - 3652 , - 3235 , - 2946 , - 2785 , - 2752 , - 2847 , - 3070 , - 3421 , - 3900 , - 411 , - 1146 , - 2009 , - 3000 , - 23 , - 1270 , - 2645 , - 52 , - 1683 , - 3442 , - 1233 , - 3248 , - 1295 , - 3566 , - 1869 , - 300 , - 2955 , - 1642 , - 457 , - 3496 , - 2567 , - 1766 , - 1093 , - 548 , - 131 , - 3938 , - 3777 , - 3744 , - 3839 , - 4062 , - 317 , - 796 , - 1403 , - 2138 , - 3001 , - 3992 , - 1015 , - 2262 , - 3637 , - 1044 , - 2675 , - 338 , - 2225 , - 144 , - 2287 , - 462 , - 2861 , - 1292 , - 3947 , - 2634 , - 1449 , - 392 , - 3559 , - 2758 , - 2085 , - 1540 , - 1123 , - 834 , - 673 , - 640 , - 735 , - 958 , - 1309 , - 1788 , - 2395 , - 3130 , - 3993 , - 888 , - 2007 , - 3254 , - 533 , - 2036 , - 3667 , - 1330 , - 3217 , - 1136 , - 3279 , - 1454 , - 3853 , - 2284 , - 843 , - 3626 , - 2441 , - 1384 , - 455 , - 3750 , - 3077 , - 2532 , - 2115 , - 1826 , - 1665 , - 1632 , - 1727 , - 1950 , - 2301 , - 2780 , - 3387 , - 26 , - 889 , - 1880 , - 2999 , - 150 , - 1525 , - 3028 , - 563 , - 2322 , - 113 , - 2128 , - 175 , - 2446 , - 749 , - 3276 , - 1835 , - 522 , - 3433 , - 2376 , - 1447 , - 646 , - 4069 , - 3524 , - 3107 , - 2818 , - 2657 , - 2624 , - 2719 , - 2942 , - 3293 , - 3772 , - 283 , - 1018 , - 1881 , - 2872 , - 3991 , - 1142 , - 2517 , - 4020 , - 1555 , - 3314 , - 1105 , - 3120 , - 1167 , - 3438 , - 1741 , - 172 , - 2827 , - 1514 , - 329 , - 3368 , - 2439 , - 1638 , - 965 , - 420 , - 3 , - 3810 , - 3649 , - 3616 , - 3711 , - 3934 , - 189 , - 668 , - 1275 , - 2010 , - 2873 , - 3864 , - 887 , - 2134 , - 3509 , - 916 , - 2547 , - 210 , - 2097 , - 16 , - 2159 , - 334 , - 2733 , - 1164 , - 3819 , - 2506 , - 1321 , - 264 , - 3431 , - 2630 , - 1957 , - 1412 , - 995 , - 706 , - 545 , - 512 , - 607 , - 830 , - 1181 , - 1660 , - 2267 , - 3002 , - 3865 , - 760 , - 1879 , - 3126 , - 405 , - 1908 , - 3539 , - 1202 , - 3089 , - 1008 , - 3151 , - 1326 , - 3725 , - 2156 , - 715 , - 3498 , - 2313 , - 1256 , - 327 , - 3622 , - 2949 , - 2404 , - 1987 , - 1698 , - 1537 , - 1504 , - 1599 , - 1822 , - 2173 , - 2652 , - 3259 , - 3994 , - 761 , - 1752 , - 2871 , - 22 , - 1397 , - 2900 , - 435 , - 2194 , - 4081 , - 2000 , - 47 , - 2318 , - 621 , - 3148 , - 1707 , - 394 , - 3305 , - 2248 , - 1319 , - 518 , - 3941 , - 3396 , - 2979 , - 2690 , - 2529 , - 2496 , - 2591 , - 2814 , - 3165 , - 3644 , - 155 , - 890 , - 1753 , - 2744 , - 3863 , - 1014 , - 2389 , - 3892 , - 1427 , - 3186 , - 977 , - 2992 , - 1039 , - 3310 , - 1613 , - 44 , - 2699 , - 1386 , - 201 , - 3240 , - 2311 , - 1510 , - 837 , - 292 , - 3971 , - 3682 , - 3521 , - 3488 , - 3583 , - 3806 , - 61 , - 540 , - 1147 , - 1882 , - 2745 , - 3736 , - 759 , - 2006 , - 3381 , - 788 , - 2419 , - 82 , - 1969 , - 3984 , - 2031 , - 206 , - 2605 , - 1036 , - 3691 , - 2378 , - 1193 , - 136 , - 3303 , - 2502 , - 1829 , - 1284 , - 867 , - 578 , - 417 , - 384 , - 479 , - 702 , - 1053 , - 1532 , - 2139 , - 2874 , - 3737 , - 632 , - 1751 , - 2998 , - 277 , - 1780 , - 3411 , - 1074 , - 2961 , - 880 , - 3023 , - 1198 , - 3597 , - 2028 , - 587 , - 3370 , - 2185 , - 1128 , - 199 , - 3494 , - 2821 , - 2276 , - 1859 , - 1570 , - 1409 , - 1376 , - 1471 , - 1694 , - 2045 , - 2524 , - 3131 , - 3866 , - 633 , - 1624 , - 2743 , - 3990 , - 1269 , - 2772 , - 307 , - 2066 , - 3953 , - 1872 , - 4015 , - 2190 , - 493 , - 3020 , - 1579 , - 266 , - 3177 , - 2120 , - 1191 , - 390 , - 3813 , - 3268 , - 2851 , - 2562 , - 2401 , - 2368 , - 2463 , - 2686 , - 3037 , - 3516 , - 27 , - 762 , - 1625 , - 2616 , - 3735 , - 886 , - 2261 , - 3764 , - 1299 , - 3058 , - 849 , - 2864 , - 911 , - 3182 , - 1485 , - 4012 , - 2571 , - 1258 , - 73 , - 3112 , - 2183 , - 1382 , - 709 , - 164 , - 3843 , - 3554 , - 3393 , - 3360 , - 3455 , - 3678 , - 4029 , - 412 , - 1019 , - 1754 , - 2617 , - 3608 , - 631 , - 1878 , - 3253 , - 660 , - 2291 , - 4050 , - 1841 , - 3856 , - 1903 , - 78 , - 2477 , - 908 , - 3563 , - 2250 , - 1065 , - 8 , - 3175 , - 2374 , - 1701 , - 1156 , - 739 , - 450 , - 289 , - 256 , - 351 , - 574 , - 925 , - 1404 , - 2011 , - 2746 , - 3609 , - 504 , - 1623 , - 2870 , - 149 , - 1652 , - 3283 , - 946 , - 2833 , - 752 , - 2895 , - 1070 , - 3469 , - 1900 , - 459 , - 3242 , - 2057 , - 1000 , - 71 , - 3366 , - 2693 , - 2148 , - 1731 , - 1442 , - 1281 , - 1248 , - 1343 , - 1566 , - 1917 , - 2396 , - 3003 , - 3738 , - 505 , - 1496 , - 2615 , - 3862 , - 1141 , - 2644 , - 179 , - 1938 , - 3825 , - 1744 , - 3887 , - 2062 , - 365 , - 2892 , - 1451 , - 138 , - 3049 , - 1992 , - 1063 , - 262 , - 3685 , - 3140 , - 2723 , - 2434 , - 2273 , - 2240 , - 2335 , - 2558 , - 2909 , - 3388 , - 3995 , - 634 , - 1497 , - 2488 , - 3607 , - 758 , - 2133 , - 3636 , - 1171 , - 2930 , - 721 , - 2736 , - 783 , - 3054 , - 1357 , - 3884 , - 2443 , - 1130 , - 4041 , - 2984 , - 2055 , - 1254 , - 581 , - 36 , - 3715 , - 3426 , - 3265 , - 3232 , - 3327 , - 3550 , - 3901 , - 284 , - 891 , - 1626 , - 2489 , - 3480 , - 503 , - 1750 , - 3125 , - 532 , - 2163 , - 3922 , - 1713 , - 3728 , - 1775 , - 4046 , - 2349 , - 780 , - 3435 , - 2122 , - 937 , - 3976 , - 3047 , - 2246 , - 1573 , - 1028 , - 611 , - 322 , - 161 , - 128 , - 223 , - 446 , - 797 , - 1276 , - 1883 , - 2618 , - 3481 , - 376 , - 1495 , - 2742 , - 21 , - 1524 , - 3155 , - 818 , - 2705 , - 624 , - 2767 , - 942 , - 3341 , - 1772 , - 331 , - 3114 , - 1929 , - 872 , - 4039 , - 3238 , - 2565 , - 2020 , - 1603 , - 1314 , - 1153 , - 1120 , - 1215 , - 1438 , - 1789 , - 2268 , - 2875 , - 3610 , - 377 , - 1368 , - 2487 , - 3734 , - 1013 , - 2516 , - 51 , - 1810 , - 3697 , - 1616 , - 3759 , - 1934 , - 237 , - 2764 , - 1323 , - 10 , - 2921 , - 1864 , - 935 , - 134 , - 3557 , - 3012 , - 2595 , - 2306 , - 2145 , - 2112 , - 2207 , - 2430 , - 2781 , - 3260 , - 3867 , - 506 , - 1369 , - 2360 , - 3479 , - 630 , - 2005 , - 3508 , - 1043 , - 2802 , - 593 , - 2608 , - 655 , - 2926 , - 1229 , - 3756 , - 2315 , - 1002 , - 3913 , - 2856 , - 1927 , - 1126 , - 453 , - 4004 , - 3587 , - 3298 , - 3137 , - 3104 , - 3199 , - 3422 , - 3773 , - 156 , - 763 , - 1498 , - 2361 , - 3352 , - 375 , - 1622 , - 2997 , - 404 , - 2035 , - 3794 , - 1585 , - 3600 , - 1647 , - 3918 , - 2221 , - 652 , - 3307 , - 1994 , - 809 , - 3848 , - 2919 , - 2118 , - 1445 , - 900 , - 483 , - 194 , - 33 , - 0 , - 163 , - 586 , - 1269 , - 2212 , - 3415 , - 718 , - 2441 , - 264 , - 2507 , - 850 , - 3613 , - 2476 , - 1599 , - 982 , - 625 , - 528 , - 691 , - 1114 , - 1797 , - 2740 , - 3943 , - 1246 , - 2969 , - 792 , - 3035 , - 1378 , - 4141 , - 3004 , - 2127 , - 1510 , - 1153 , - 1056 , - 1219 , - 1642 , - 2325 , - 3268 , - 311 , - 1774 , - 3497 , - 1320 , - 3563 , - 1906 , - 509 , - 3532 , - 2655 , - 2038 , - 1681 , - 1584 , - 1747 , - 2170 , - 2853 , - 3796 , - 839 , - 2302 , - 4025 , - 1848 , - 4091 , - 2434 , - 1037 , - 4060 , - 3183 , - 2566 , - 2209 , - 2112 , - 2275 , - 2698 , - 3381 , - 164 , - 1367 , - 2830 , - 393 , - 2376 , - 459 , - 2962 , - 1565 , - 428 , - 3711 , - 3094 , - 2737 , - 2640 , - 2803 , - 3226 , - 3909 , - 692 , - 1895 , - 3358 , - 921 , - 2904 , - 987 , - 3490 , - 2093 , - 956 , - 79 , - 3622 , - 3265 , - 3168 , - 3331 , - 3754 , - 277 , - 1220 , - 2423 , - 3886 , - 1449 , - 3432 , - 1515 , - 4018 , - 2621 , - 1484 , - 607 , - 4150 , - 3793 , - 3696 , - 3859 , - 122 , - 805 , - 1748 , - 2951 , - 254 , - 1977 , - 3960 , - 2043 , - 386 , - 3149 , - 2012 , - 1135 , - 518 , - 161 , - 64 , - 227 , - 650 , - 1333 , - 2276 , - 3479 , - 782 , - 2505 , - 328 , - 2571 , - 914 , - 3677 , - 2540 , - 1663 , - 1046 , - 689 , - 592 , - 755 , - 1178 , - 1861 , - 2804 , - 4007 , - 1310 , - 3033 , - 856 , - 3099 , - 1442 , - 45 , - 3068 , - 2191 , - 1574 , - 1217 , - 1120 , - 1283 , - 1706 , - 2389 , - 3332 , - 375 , - 1838 , - 3561 , - 1384 , - 3627 , - 1970 , - 573 , - 3596 , - 2719 , - 2102 , - 1745 , - 1648 , - 1811 , - 2234 , - 2917 , - 3860 , - 903 , - 2366 , - 4089 , - 1912 , - 4155 , - 2498 , - 1101 , - 4124 , - 3247 , - 2630 , - 2273 , - 2176 , - 2339 , - 2762 , - 3445 , - 228 , - 1431 , - 2894 , - 457 , - 2440 , - 523 , - 3026 , - 1629 , - 492 , - 3775 , - 3158 , - 2801 , - 2704 , - 2867 , - 3290 , - 3973 , - 756 , - 1959 , - 3422 , - 985 , - 2968 , - 1051 , - 3554 , - 2157 , - 1020 , - 143 , - 3686 , - 3329 , - 3232 , - 3395 , - 3818 , - 341 , - 1284 , - 2487 , - 3950 , - 1513 , - 3496 , - 1579 , - 4082 , - 2685 , - 1548 , - 671 , - 54 , - 3857 , - 3760 , - 3923 , - 186 , - 869 , - 1812 , - 3015 , - 318 , - 2041 , - 4024 , - 2107 , - 450 , - 3213 , - 2076 , - 1199 , - 582 , - 225 , - 128 , - 291 , - 714 , - 1397 , - 2340 , - 3543 , - 846 , - 2569 , - 392 , - 2635 , - 978 , - 3741 , - 2604 , - 1727 , - 1110 , - 753 , - 656 , - 819 , - 1242 , - 1925 , - 2868 , - 4071 , - 1374 , - 3097 , - 920 , - 3163 , - 1506 , - 109 , - 3132 , - 2255 , - 1638 , - 1281 , - 1184 , - 1347 , - 1770 , - 2453 , - 3396 , - 439 , - 1902 , - 3625 , - 1448 , - 3691 , - 2034 , - 637 , - 3660 , - 2783 , - 2166 , - 1809 , - 1712 , - 1875 , - 2298 , - 2981 , - 3924 , - 967 , - 2430 , - 4153 , - 1976 , - 59 , - 2562 , - 1165 , - 28 , - 3311 , - 2694 , - 2337 , - 2240 , - 2403 , - 2826 , - 3509 , - 292 , - 1495 , - 2958 , - 521 , - 2504 , - 587 , - 3090 , - 1693 , - 556 , - 3839 , - 3222 , - 2865 , - 2768 , - 2931 , - 3354 , - 4037 , - 820 , - 2023 , - 3486 , - 1049 , - 3032 , - 1115 , - 3618 , - 2221 , - 1084 , - 207 , - 3750 , - 3393 , - 3296 , - 3459 , - 3882 , - 405 , - 1348 , - 2551 , - 4014 , - 1577 , - 3560 , - 1643 , - 4146 , - 2749 , - 1612 , - 735 , - 118 , - 3921 , - 3824 , - 3987 , - 250 , - 933 , - 1876 , - 3079 , - 382 , - 2105 , - 4088 , - 2171 , - 514 , - 3277 , - 2140 , - 1263 , - 646 , - 289 , - 192 , - 355 , - 778 , - 1461 , - 2404 , - 3607 , - 910 , - 2633 , - 456 , - 2699 , - 1042 , - 3805 , - 2668 , - 1791 , - 1174 , - 817 , - 720 , - 883 , - 1306 , - 1989 , - 2932 , - 4135 , - 1438 , - 3161 , - 984 , - 3227 , - 1570 , - 173 , - 3196 , - 2319 , - 1702 , - 1345 , - 1248 , - 1411 , - 1834 , - 2517 , - 3460 , - 503 , - 1966 , - 3689 , - 1512 , - 3755 , - 2098 , - 701 , - 3724 , - 2847 , - 2230 , - 1873 , - 1776 , - 1939 , - 2362 , - 3045 , - 3988 , - 1031 , - 2494 , - 57 , - 2040 , - 123 , - 2626 , - 1229 , - 92 , - 3375 , - 2758 , - 2401 , - 2304 , - 2467 , - 2890 , - 3573 , - 356 , - 1559 , - 3022 , - 585 , - 2568 , - 651 , - 3154 , - 1757 , - 620 , - 3903 , - 3286 , - 2929 , - 2832 , - 2995 , - 3418 , - 4101 , - 884 , - 2087 , - 3550 , - 1113 , - 3096 , - 1179 , - 3682 , - 2285 , - 1148 , - 271 , - 3814 , - 3457 , - 3360 , - 3523 , - 3946 , - 469 , - 1412 , - 2615 , - 4078 , - 1641 , - 3624 , - 1707 , - 50 , - 2813 , - 1676 , - 799 , - 182 , - 3985 , - 3888 , - 4051 , - 314 , - 997 , - 1940 , - 3143 , - 446 , - 2169 , - 4152 , - 2235 , - 578 , - 3341 , - 2204 , - 1327 , - 710 , - 353 , - 256 , - 419 , - 842 , - 1525 , - 2468 , - 3671 , - 974 , - 2697 , - 520 , - 2763 , - 1106 , - 3869 , - 2732 , - 1855 , - 1238 , - 881 , - 784 , - 947 , - 1370 , - 2053 , - 2996 , - 39 , - 1502 , - 3225 , - 1048 , - 3291 , - 1634 , - 237 , - 3260 , - 2383 , - 1766 , - 1409 , - 1312 , - 1475 , - 1898 , - 2581 , - 3524 , - 567 , - 2030 , - 3753 , - 1576 , - 3819 , - 2162 , - 765 , - 3788 , - 2911 , - 2294 , - 1937 , - 1840 , - 2003 , - 2426 , - 3109 , - 4052 , - 1095 , - 2558 , - 121 , - 2104 , - 187 , - 2690 , - 1293 , - 156 , - 3439 , - 2822 , - 2465 , - 2368 , - 2531 , - 2954 , - 3637 , - 420 , - 1623 , - 3086 , - 649 , - 2632 , - 715 , - 3218 , - 1821 , - 684 , - 3967 , - 3350 , - 2993 , - 2896 , - 3059 , - 3482 , - 5 , - 948 , - 2151 , - 3614 , - 1177 , - 3160 , - 1243 , - 3746 , - 2349 , - 1212 , - 335 , - 3878 , - 3521 , - 3424 , - 3587 , - 4010 , - 533 , - 1476 , - 2679 , - 4142 , - 1705 , - 3688 , - 1771 , - 114 , - 2877 , - 1740 , - 863 , - 246 , - 4049 , - 3952 , - 4115 , - 378 , - 1061 , - 2004 , - 3207 , - 510 , - 2233 , - 56 , - 2299 , - 642 , - 3405 , - 2268 , - 1391 , - 774 , - 417 , - 320 , - 483 , - 906 , - 1589 , - 2532 , - 3735 , - 1038 , - 2761 , - 584 , - 2827 , - 1170 , - 3933 , - 2796 , - 1919 , - 1302 , - 945 , - 848 , - 1011 , - 1434 , - 2117 , - 3060 , - 103 , - 1566 , - 3289 , - 1112 , - 3355 , - 1698 , - 301 , - 3324 , - 2447 , - 1830 , - 1473 , - 1376 , - 1539 , - 1962 , - 2645 , - 3588 , - 631 , - 2094 , - 3817 , - 1640 , - 3883 , - 2226 , - 829 , - 3852 , - 2975 , - 2358 , - 2001 , - 1904 , - 2067 , - 2490 , - 3173 , - 4116 , - 1159 , - 2622 , - 185 , - 2168 , - 251 , - 2754 , - 1357 , - 220 , - 3503 , - 2886 , - 2529 , - 2432 , - 2595 , - 3018 , - 3701 , - 484 , - 1687 , - 3150 , - 713 , - 2696 , - 779 , - 3282 , - 1885 , - 748 , - 4031 , - 3414 , - 3057 , - 2960 , - 3123 , - 3546 , - 69 , - 1012 , - 2215 , - 3678 , - 1241 , - 3224 , - 1307 , - 3810 , - 2413 , - 1276 , - 399 , - 3942 , - 3585 , - 3488 , - 3651 , - 4074 , - 597 , - 1540 , - 2743 , - 46 , - 1769 , - 3752 , - 1835 , - 178 , - 2941 , - 1804 , - 927 , - 310 , - 4113 , - 4016 , - 19 , - 442 , - 1125 , - 2068 , - 3271 , - 574 , - 2297 , - 120 , - 2363 , - 706 , - 3469 , - 2332 , - 1455 , - 838 , - 481 , - 384 , - 547 , - 970 , - 1653 , - 2596 , - 3799 , - 1102 , - 2825 , - 648 , - 2891 , - 1234 , - 3997 , - 2860 , - 1983 , - 1366 , - 1009 , - 912 , - 1075 , - 1498 , - 2181 , - 3124 , - 167 , - 1630 , - 3353 , - 1176 , - 3419 , - 1762 , - 365 , - 3388 , - 2511 , - 1894 , - 1537 , - 1440 , - 1603 , - 2026 , - 2709 , - 3652 , - 695 , - 2158 , - 3881 , - 1704 , - 3947 , - 2290 , - 893 , - 3916 , - 3039 , - 2422 , - 2065 , - 1968 , - 2131 , - 2554 , - 3237 , - 20 , - 1223 , - 2686 , - 249 , - 2232 , - 315 , - 2818 , - 1421 , - 284 , - 3567 , - 2950 , - 2593 , - 2496 , - 2659 , - 3082 , - 3765 , - 548 , - 1751 , - 3214 , - 777 , - 2760 , - 843 , - 3346 , - 1949 , - 812 , - 4095 , - 3478 , - 3121 , - 3024 , - 3187 , - 3610 , - 133 , - 1076 , - 2279 , - 3742 , - 1305 , - 3288 , - 1371 , - 3874 , - 2477 , - 1340 , - 463 , - 4006 , - 3649 , - 3552 , - 3715 , - 4138 , - 661 , - 1604 , - 2807 , - 110 , - 1833 , - 3816 , - 1899 , - 242 , - 3005 , - 1868 , - 991 , - 374 , - 17 , - 4080 , - 83 , - 506 , - 1189 , - 2132 , - 3335 , - 638 , - 2361 , - 184 , - 2427 , - 770 , - 3533 , - 2396 , - 1519 , - 902 , - 545 , - 448 , - 611 , - 1034 , - 1717 , - 2660 , - 3863 , - 1166 , - 2889 , - 712 , - 2955 , - 1298 , - 4061 , - 2924 , - 2047 , - 1430 , - 1073 , - 976 , - 1139 , - 1562 , - 2245 , - 3188 , - 231 , - 1694 , - 3417 , - 1240 , - 3483 , - 1826 , - 429 , - 3452 , - 2575 , - 1958 , - 1601 , - 1504 , - 1667 , - 2090 , - 2773 , - 3716 , - 759 , - 2222 , - 3945 , - 1768 , - 4011 , - 2354 , - 957 , - 3980 , - 3103 , - 2486 , - 2129 , - 2032 , - 2195 , - 2618 , - 3301 , - 84 , - 1287 , - 2750 , - 313 , - 2296 , - 379 , - 2882 , - 1485 , - 348 , - 3631 , - 3014 , - 2657 , - 2560 , - 2723 , - 3146 , - 3829 , - 612 , - 1815 , - 3278 , - 841 , - 2824 , - 907 , - 3410 , - 2013 , - 876 , - 4159 , - 3542 , - 3185 , - 3088 , - 3251 , - 3674 , - 197 , - 1140 , - 2343 , - 3806 , - 1369 , - 3352 , - 1435 , - 3938 , - 2541 , - 1404 , - 527 , - 4070 , - 3713 , - 3616 , - 3779 , - 42 , - 725 , - 1668 , - 2871 , - 174 , - 1897 , - 3880 , - 1963 , - 306 , - 3069 , - 1932 , - 1055 , - 438 , - 81 , - 4144 , - 147 , - 570 , - 1253 , - 2196 , - 3399 , - 702 , - 2425 , - 248 , - 2491 , - 834 , - 3597 , - 2460 , - 1583 , - 966 , - 609 , - 512 , - 675 , - 1098 , - 1781 , - 2724 , - 3927 , - 1230 , - 2953 , - 776 , - 3019 , - 1362 , - 4125 , - 2988 , - 2111 , - 1494 , - 1137 , - 1040 , - 1203 , - 1626 , - 2309 , - 3252 , - 295 , - 1758 , - 3481 , - 1304 , - 3547 , - 1890 , - 493 , - 3516 , - 2639 , - 2022 , - 1665 , - 1568 , - 1731 , - 2154 , - 2837 , - 3780 , - 823 , - 2286 , - 4009 , - 1832 , - 4075 , - 2418 , - 1021 , - 4044 , - 3167 , - 2550 , - 2193 , - 2096 , - 2259 , - 2682 , - 3365 , - 148 , - 1351 , - 2814 , - 377 , - 2360 , - 443 , - 2946 , - 1549 , - 412 , - 3695 , - 3078 , - 2721 , - 2624 , - 2787 , - 3210 , - 3893 , - 676 , - 1879 , - 3342 , - 905 , - 2888 , - 971 , - 3474 , - 2077 , - 940 , - 63 , - 3606 , - 3249 , - 3152 , - 3315 , - 3738 , - 261 , - 1204 , - 2407 , - 3870 , - 1433 , - 3416 , - 1499 , - 4002 , - 2605 , - 1468 , - 591 , - 4134 , - 3777 , - 3680 , - 3843 , - 106 , - 789 , - 1732 , - 2935 , - 238 , - 1961 , - 3944 , - 2027 , - 370 , - 3133 , - 1996 , - 1119 , - 502 , - 145 , - 48 , - 211 , - 634 , - 1317 , - 2260 , - 3463 , - 766 , - 2489 , - 312 , - 2555 , - 898 , - 3661 , - 2524 , - 1647 , - 1030 , - 673 , - 576 , - 739 , - 1162 , - 1845 , - 2788 , - 3991 , - 1294 , - 3017 , - 840 , - 3083 , - 1426 , - 29 , - 3052 , - 2175 , - 1558 , - 1201 , - 1104 , - 1267 , - 1690 , - 2373 , - 3316 , - 359 , - 1822 , - 3545 , - 1368 , - 3611 , - 1954 , - 557 , - 3580 , - 2703 , - 2086 , - 1729 , - 1632 , - 1795 , - 2218 , - 2901 , - 3844 , - 887 , - 2350 , - 4073 , - 1896 , - 4139 , - 2482 , - 1085 , - 4108 , - 3231 , - 2614 , - 2257 , - 2160 , - 2323 , - 2746 , - 3429 , - 212 , - 1415 , - 2878 , - 441 , - 2424 , - 507 , - 3010 , - 1613 , - 476 , - 3759 , - 3142 , - 2785 , - 2688 , - 2851 , - 3274 , - 3957 , - 740 , - 1943 , - 3406 , - 969 , - 2952 , - 1035 , - 3538 , - 2141 , - 1004 , - 127 , - 3670 , - 3313 , - 3216 , - 3379 , - 3802 , - 325 , - 1268 , - 2471 , - 3934 , - 1497 , - 3480 , - 1563 , - 4066 , - 2669 , - 1532 , - 655 , - 38 , - 3841 , - 3744 , - 3907 , - 170 , - 853 , - 1796 , - 2999 , - 302 , - 2025 , - 4008 , - 2091 , - 434 , - 3197 , - 2060 , - 1183 , - 566 , - 209 , - 112 , - 275 , - 698 , - 1381 , - 2324 , - 3527 , - 830 , - 2553 , - 376 , - 2619 , - 962 , - 3725 , - 2588 , - 1711 , - 1094 , - 737 , - 640 , - 803 , - 1226 , - 1909 , - 2852 , - 4055 , - 1358 , - 3081 , - 904 , - 3147 , - 1490 , - 93 , - 3116 , - 2239 , - 1622 , - 1265 , - 1168 , - 1331 , - 1754 , - 2437 , - 3380 , - 423 , - 1886 , - 3609 , - 1432 , - 3675 , - 2018 , - 621 , - 3644 , - 2767 , - 2150 , - 1793 , - 1696 , - 1859 , - 2282 , - 2965 , - 3908 , - 951 , - 2414 , - 4137 , - 1960 , - 43 , - 2546 , - 1149 , - 12 , - 3295 , - 2678 , - 2321 , - 2224 , - 2387 , - 2810 , - 3493 , - 276 , - 1479 , - 2942 , - 505 , - 2488 , - 571 , - 3074 , - 1677 , - 540 , - 3823 , - 3206 , - 2849 , - 2752 , - 2915 , - 3338 , - 4021 , - 804 , - 2007 , - 3470 , - 1033 , - 3016 , - 1099 , - 3602 , - 2205 , - 1068 , - 191 , - 3734 , - 3377 , - 3280 , - 3443 , - 3866 , - 389 , - 1332 , - 2535 , - 3998 , - 1561 , - 3544 , - 1627 , - 4130 , - 2733 , - 1596 , - 719 , - 102 , - 3905 , - 3808 , - 3971 , - 234 , - 917 , - 1860 , - 3063 , - 366 , - 2089 , - 4072 , - 2155 , - 498 , - 3261 , - 2124 , - 1247 , - 630 , - 273 , - 176 , - 339 , - 762 , - 1445 , - 2388 , - 3591 , - 894 , - 2617 , - 440 , - 2683 , - 1026 , - 3789 , - 2652 , - 1775 , - 1158 , - 801 , - 704 , - 867 , - 1290 , - 1973 , - 2916 , - 4119 , - 1422 , - 3145 , - 968 , - 3211 , - 1554 , - 157 , - 3180 , - 2303 , - 1686 , - 1329 , - 1232 , - 1395 , - 1818 , - 2501 , - 3444 , - 487 , - 1950 , - 3673 , - 1496 , - 3739 , - 2082 , - 685 , - 3708 , - 2831 , - 2214 , - 1857 , - 1760 , - 1923 , - 2346 , - 3029 , - 3972 , - 1015 , - 2478 , - 41 , - 2024 , - 107 , - 2610 , - 1213 , - 76 , - 3359 , - 2742 , - 2385 , - 2288 , - 2451 , - 2874 , - 3557 , - 340 , - 1543 , - 3006 , - 569 , - 2552 , - 635 , - 3138 , - 1741 , - 604 , - 3887 , - 3270 , - 2913 , - 2816 , - 2979 , - 3402 , - 4085 , - 868 , - 2071 , - 3534 , - 1097 , - 3080 , - 1163 , - 3666 , - 2269 , - 1132 , - 255 , - 3798 , - 3441 , - 3344 , - 3507 , - 3930 , - 453 , - 1396 , - 2599 , - 4062 , - 1625 , - 3608 , - 1691 , - 34 , - 2797 , - 1660 , - 783 , - 166 , - 3969 , - 3872 , - 4035 , - 298 , - 981 , - 1924 , - 3127 , - 430 , - 2153 , - 4136 , - 2219 , - 562 , - 3325 , - 2188 , - 1311 , - 694 , - 337 , - 240 , - 403 , - 826 , - 1509 , - 2452 , - 3655 , - 958 , - 2681 , - 504 , - 2747 , - 1090 , - 3853 , - 2716 , - 1839 , - 1222 , - 865 , - 768 , - 931 , - 1354 , - 2037 , - 2980 , - 23 , - 1486 , - 3209 , - 1032 , - 3275 , - 1618 , - 221 , - 3244 , - 2367 , - 1750 , - 1393 , - 1296 , - 1459 , - 1882 , - 2565 , - 3508 , - 551 , - 2014 , - 3737 , - 1560 , - 3803 , - 2146 , - 749 , - 3772 , - 2895 , - 2278 , - 1921 , - 1824 , - 1987 , - 2410 , - 3093 , - 4036 , - 1079 , - 2542 , - 105 , - 2088 , - 171 , - 2674 , - 1277 , - 140 , - 3423 , - 2806 , - 2449 , - 2352 , - 2515 , - 2938 , - 3621 , - 404 , - 1607 , - 3070 , - 633 , - 2616 , - 699 , - 3202 , - 1805 , - 668 , - 3951 , - 3334 , - 2977 , - 2880 , - 3043 , - 3466 , - 4149 , - 932 , - 2135 , - 3598 , - 1161 , - 3144 , - 1227 , - 3730 , - 2333 , - 1196 , - 319 , - 3862 , - 3505 , - 3408 , - 3571 , - 3994 , - 517 , - 1460 , - 2663 , - 4126 , - 1689 , - 3672 , - 1755 , - 98 , - 2861 , - 1724 , - 847 , - 230 , - 4033 , - 3936 , - 4099 , - 362 , - 1045 , - 1988 , - 3191 , - 494 , - 2217 , - 40 , - 2283 , - 626 , - 3389 , - 2252 , - 1375 , - 758 , - 401 , - 304 , - 467 , - 890 , - 1573 , - 2516 , - 3719 , - 1022 , - 2745 , - 568 , - 2811 , - 1154 , - 3917 , - 2780 , - 1903 , - 1286 , - 929 , - 832 , - 995 , - 1418 , - 2101 , - 3044 , - 87 , - 1550 , - 3273 , - 1096 , - 3339 , - 1682 , - 285 , - 3308 , - 2431 , - 1814 , - 1457 , - 1360 , - 1523 , - 1946 , - 2629 , - 3572 , - 615 , - 2078 , - 3801 , - 1624 , - 3867 , - 2210 , - 813 , - 3836 , - 2959 , - 2342 , - 1985 , - 1888 , - 2051 , - 2474 , - 3157 , - 4100 , - 1143 , - 2606 , - 169 , - 2152 , - 235 , - 2738 , - 1341 , - 204 , - 3487 , - 2870 , - 2513 , - 2416 , - 2579 , - 3002 , - 3685 , - 468 , - 1671 , - 3134 , - 697 , - 2680 , - 763 , - 3266 , - 1869 , - 732 , - 4015 , - 3398 , - 3041 , - 2944 , - 3107 , - 3530 , - 53 , - 996 , - 2199 , - 3662 , - 1225 , - 3208 , - 1291 , - 3794 , - 2397 , - 1260 , - 383 , - 3926 , - 3569 , - 3472 , - 3635 , - 4058 , - 581 , - 1524 , - 2727 , - 30 , - 1753 , - 3736 , - 1819 , - 162 , - 2925 , - 1788 , - 911 , - 294 , - 4097 , - 4000 , - 3 , - 426 , - 1109 , - 2052 , - 3255 , - 558 , - 2281 , - 104 , - 2347 , - 690 , - 3453 , - 2316 , - 1439 , - 822 , - 465 , - 368 , - 531 , - 954 , - 1637 , - 2580 , - 3783 , - 1086 , - 2809 , - 632 , - 2875 , - 1218 , - 3981 , - 2844 , - 1967 , - 1350 , - 993 , - 896 , - 1059 , - 1482 , - 2165 , - 3108 , - 151 , - 1614 , - 3337 , - 1160 , - 3403 , - 1746 , - 349 , - 3372 , - 2495 , - 1878 , - 1521 , - 1424 , - 1587 , - 2010 , - 2693 , - 3636 , - 679 , - 2142 , - 3865 , - 1688 , - 3931 , - 2274 , - 877 , - 3900 , - 3023 , - 2406 , - 2049 , - 1952 , - 2115 , - 2538 , - 3221 , - 4 , - 1207 , - 2670 , - 233 , - 2216 , - 299 , - 2802 , - 1405 , - 268 , - 3551 , - 2934 , - 2577 , - 2480 , - 2643 , - 3066 , - 3749 , - 532 , - 1735 , - 3198 , - 761 , - 2744 , - 827 , - 3330 , - 1933 , - 796 , - 4079 , - 3462 , - 3105 , - 3008 , - 3171 , - 3594 , - 117 , - 1060 , - 2263 , - 3726 , - 1289 , - 3272 , - 1355 , - 3858 , - 2461 , - 1324 , - 447 , - 3990 , - 3633 , - 3536 , - 3699 , - 4122 , - 645 , - 1588 , - 2791 , - 94 , - 1817 , - 3800 , - 1883 , - 226 , - 2989 , - 1852 , - 975 , - 358 , - 1 , - 4064 , - 67 , - 490 , - 1173 , - 2116 , - 3319 , - 622 , - 2345 , - 168 , - 2411 , - 754 , - 3517 , - 2380 , - 1503 , - 886 , - 529 , - 432 , - 595 , - 1018 , - 1701 , - 2644 , - 3847 , - 1150 , - 2873 , - 696 , - 2939 , - 1282 , - 4045 , - 2908 , - 2031 , - 1414 , - 1057 , - 960 , - 1123 , - 1546 , - 2229 , - 3172 , - 215 , - 1678 , - 3401 , - 1224 , - 3467 , - 1810 , - 413 , - 3436 , - 2559 , - 1942 , - 1585 , - 1488 , - 1651 , - 2074 , - 2757 , - 3700 , - 743 , - 2206 , - 3929 , - 1752 , - 3995 , - 2338 , - 941 , - 3964 , - 3087 , - 2470 , - 2113 , - 2016 , - 2179 , - 2602 , - 3285 , - 68 , - 1271 , - 2734 , - 297 , - 2280 , - 363 , - 2866 , - 1469 , - 332 , - 3615 , - 2998 , - 2641 , - 2544 , - 2707 , - 3130 , - 3813 , - 596 , - 1799 , - 3262 , - 825 , - 2808 , - 891 , - 3394 , - 1997 , - 860 , - 4143 , - 3526 , - 3169 , - 3072 , - 3235 , - 3658 , - 181 , - 1124 , - 2327 , - 3790 , - 1353 , - 3336 , - 1419 , - 3922 , - 2525 , - 1388 , - 511 , - 4054 , - 3697 , - 3600 , - 3763 , - 26 , - 709 , - 1652 , - 2855 , - 158 , - 1881 , - 3864 , - 1947 , - 290 , - 3053 , - 1916 , - 1039 , - 422 , - 65 , - 4128 , - 131 , - 554 , - 1237 , - 2180 , - 3383 , - 686 , - 2409 , - 232 , - 2475 , - 818 , - 3581 , - 2444 , - 1567 , - 950 , - 593 , - 496 , - 659 , - 1082 , - 1765 , - 2708 , - 3911 , - 1214 , - 2937 , - 760 , - 3003 , - 1346 , - 4109 , - 2972 , - 2095 , - 1478 , - 1121 , - 1024 , - 1187 , - 1610 , - 2293 , - 3236 , - 279 , - 1742 , - 3465 , - 1288 , - 3531 , - 1874 , - 477 , - 3500 , - 2623 , - 2006 , - 1649 , - 1552 , - 1715 , - 2138 , - 2821 , - 3764 , - 807 , - 2270 , - 3993 , - 1816 , - 4059 , - 2402 , - 1005 , - 4028 , - 3151 , - 2534 , - 2177 , - 2080 , - 2243 , - 2666 , - 3349 , - 132 , - 1335 , - 2798 , - 361 , - 2344 , - 427 , - 2930 , - 1533 , - 396 , - 3679 , - 3062 , - 2705 , - 2608 , - 2771 , - 3194 , - 3877 , - 660 , - 1863 , - 3326 , - 889 , - 2872 , - 955 , - 3458 , - 2061 , - 924 , - 47 , - 3590 , - 3233 , - 3136 , - 3299 , - 3722 , - 245 , - 1188 , - 2391 , - 3854 , - 1417 , - 3400 , - 1483 , - 3986 , - 2589 , - 1452 , - 575 , - 4118 , - 3761 , - 3664 , - 3827 , - 90 , - 773 , - 1716 , - 2919 , - 222 , - 1945 , - 3928 , - 2011 , - 354 , - 3117 , - 1980 , - 1103 , - 486 , - 129 , - 32 , - 195 , - 618 , - 1301 , - 2244 , - 3447 , - 750 , - 2473 , - 296 , - 2539 , - 882 , - 3645 , - 2508 , - 1631 , - 1014 , - 657 , - 560 , - 723 , - 1146 , - 1829 , - 2772 , - 3975 , - 1278 , - 3001 , - 824 , - 3067 , - 1410 , - 13 , - 3036 , - 2159 , - 1542 , - 1185 , - 1088 , - 1251 , - 1674 , - 2357 , - 3300 , - 343 , - 1806 , - 3529 , - 1352 , - 3595 , - 1938 , - 541 , - 3564 , - 2687 , - 2070 , - 1713 , - 1616 , - 1779 , - 2202 , - 2885 , - 3828 , - 871 , - 2334 , - 4057 , - 1880 , - 4123 , - 2466 , - 1069 , - 4092 , - 3215 , - 2598 , - 2241 , - 2144 , - 2307 , - 2730 , - 3413 , - 196 , - 1399 , - 2862 , - 425 , - 2408 , - 491 , - 2994 , - 1597 , - 460 , - 3743 , - 3126 , - 2769 , - 2672 , - 2835 , - 3258 , - 3941 , - 724 , - 1927 , - 3390 , - 953 , - 2936 , - 1019 , - 3522 , - 2125 , - 988 , - 111 , - 3654 , - 3297 , - 3200 , - 3363 , - 3786 , - 309 , - 1252 , - 2455 , - 3918 , - 1481 , - 3464 , - 1547 , - 4050 , - 2653 , - 1516 , - 639 , - 22 , - 3825 , - 3728 , - 3891 , - 154 , - 837 , - 1780 , - 2983 , - 286 , - 2009 , - 3992 , - 2075 , - 418 , - 3181 , - 2044 , - 1167 , - 550 , - 193 , - 96 , - 259 , - 682 , - 1365 , - 2308 , - 3511 , - 814 , - 2537 , - 360 , - 2603 , - 946 , - 3709 , - 2572 , - 1695 , - 1078 , - 721 , - 624 , - 787 , - 1210 , - 1893 , - 2836 , - 4039 , - 1342 , - 3065 , - 888 , - 3131 , - 1474 , - 77 , - 3100 , - 2223 , - 1606 , - 1249 , - 1152 , - 1315 , - 1738 , - 2421 , - 3364 , - 407 , - 1870 , - 3593 , - 1416 , - 3659 , - 2002 , - 605 , - 3628 , - 2751 , - 2134 , - 1777 , - 1680 , - 1843 , - 2266 , - 2949 , - 3892 , - 935 , - 2398 , - 4121 , - 1944 , - 27 , - 2530 , - 1133 , - 4156 , - 3279 , - 2662 , - 2305 , - 2208 , - 2371 , - 2794 , - 3477 , - 260 , - 1463 , - 2926 , - 489 , - 2472 , - 555 , - 3058 , - 1661 , - 524 , - 3807 , - 3190 , - 2833 , - 2736 , - 2899 , - 3322 , - 4005 , - 788 , - 1991 , - 3454 , - 1017 , - 3000 , - 1083 , - 3586 , - 2189 , - 1052 , - 175 , - 3718 , - 3361 , - 3264 , - 3427 , - 3850 , - 373 , - 1316 , - 2519 , - 3982 , - 1545 , - 3528 , - 1611 , - 4114 , - 2717 , - 1580 , - 703 , - 86 , - 3889 , - 3792 , - 3955 , - 218 , - 901 , - 1844 , - 3047 , - 350 , - 2073 , - 4056 , - 2139 , - 482 , - 3245 , - 2108 , - 1231 , - 614 , - 257 , - 160 , - 323 , - 746 , - 1429 , - 2372 , - 3575 , - 878 , - 2601 , - 424 , - 2667 , - 1010 , - 3773 , - 2636 , - 1759 , - 1142 , - 785 , - 688 , - 851 , - 1274 , - 1957 , - 2900 , - 4103 , - 1406 , - 3129 , - 952 , - 3195 , - 1538 , - 141 , - 3164 , - 2287 , - 1670 , - 1313 , - 1216 , - 1379 , - 1802 , - 2485 , - 3428 , - 471 , - 1934 , - 3657 , - 1480 , - 3723 , - 2066 , - 669 , - 3692 , - 2815 , - 2198 , - 1841 , - 1744 , - 1907 , - 2330 , - 3013 , - 3956 , - 999 , - 2462 , - 25 , - 2008 , - 91 , - 2594 , - 1197 , - 60 , - 3343 , - 2726 , - 2369 , - 2272 , - 2435 , - 2858 , - 3541 , - 324 , - 1527 , - 2990 , - 553 , - 2536 , - 619 , - 3122 , - 1725 , - 588 , - 3871 , - 3254 , - 2897 , - 2800 , - 2963 , - 3386 , - 4069 , - 852 , - 2055 , - 3518 , - 1081 , - 3064 , - 1147 , - 3650 , - 2253 , - 1116 , - 239 , - 3782 , - 3425 , - 3328 , - 3491 , - 3914 , - 437 , - 1380 , - 2583 , - 4046 , - 1609 , - 3592 , - 1675 , - 18 , - 2781 , - 1644 , - 767 , - 150 , - 3953 , - 3856 , - 4019 , - 282 , - 965 , - 1908 , - 3111 , - 414 , - 2137 , - 4120 , - 2203 , - 546 , - 3309 , - 2172 , - 1295 , - 678 , - 321 , - 224 , - 387 , - 810 , - 1493 , - 2436 , - 3639 , - 942 , - 2665 , - 488 , - 2731 , - 1074 , - 3837 , - 2700 , - 1823 , - 1206 , - 849 , - 752 , - 915 , - 1338 , - 2021 , - 2964 , - 7 , - 1470 , - 3193 , - 1016 , - 3259 , - 1602 , - 205 , - 3228 , - 2351 , - 1734 , - 1377 , - 1280 , - 1443 , - 1866 , - 2549 , - 3492 , - 535 , - 1998 , - 3721 , - 1544 , - 3787 , - 2130 , - 733 , - 3756 , - 2879 , - 2262 , - 1905 , - 1808 , - 1971 , - 2394 , - 3077 , - 4020 , - 1063 , - 2526 , - 89 , - 2072 , - 155 , - 2658 , - 1261 , - 124 , - 3407 , - 2790 , - 2433 , - 2336 , - 2499 , - 2922 , - 3605 , - 388 , - 1591 , - 3054 , - 617 , - 2600 , - 683 , - 3186 , - 1789 , - 652 , - 3935 , - 3318 , - 2961 , - 2864 , - 3027 , - 3450 , - 4133 , - 916 , - 2119 , - 3582 , - 1145 , - 3128 , - 1211 , - 3714 , - 2317 , - 1180 , - 303 , - 3846 , - 3489 , - 3392 , - 3555 , - 3978 , - 501 , - 1444 , - 2647 , - 4110 , - 1673 , - 3656 , - 1739 , - 82 , - 2845 , - 1708 , - 831 , - 214 , - 4017 , - 3920 , - 4083 , - 346 , - 1029 , - 1972 , - 3175 , - 478 , - 2201 , - 24 , - 2267 , - 610 , - 3373 , - 2236 , - 1359 , - 742 , - 385 , - 288 , - 451 , - 874 , - 1557 , - 2500 , - 3703 , - 1006 , - 2729 , - 552 , - 2795 , - 1138 , - 3901 , - 2764 , - 1887 , - 1270 , - 913 , - 816 , - 979 , - 1402 , - 2085 , - 3028 , - 71 , - 1534 , - 3257 , - 1080 , - 3323 , - 1666 , - 269 , - 3292 , - 2415 , - 1798 , - 1441 , - 1344 , - 1507 , - 1930 , - 2613 , - 3556 , - 599 , - 2062 , - 3785 , - 1608 , - 3851 , - 2194 , - 797 , - 3820 , - 2943 , - 2326 , - 1969 , - 1872 , - 2035 , - 2458 , - 3141 , - 4084 , - 1127 , - 2590 , - 153 , - 2136 , - 219 , - 2722 , - 1325 , - 188 , - 3471 , - 2854 , - 2497 , - 2400 , - 2563 , - 2986 , - 3669 , - 452 , - 1655 , - 3118 , - 681 , - 2664 , - 747 , - 3250 , - 1853 , - 716 , - 3999 , - 3382 , - 3025 , - 2928 , - 3091 , - 3514 , - 37 , - 980 , - 2183 , - 3646 , - 1209 , - 3192 , - 1275 , - 3778 , - 2381 , - 1244 , - 367 , - 3910 , - 3553 , - 3456 , - 3619 , - 4042 , - 565 , - 1508 , - 2711 , - 14 , - 1737 , - 3720 , - 1803 , - 146 , - 2909 , - 1772 , - 895 , - 278 , - 4081 , - 3984 , - 4147 , - 410 , - 1093 , - 2036 , - 3239 , - 542 , - 2265 , - 88 , - 2331 , - 674 , - 3437 , - 2300 , - 1423 , - 806 , - 449 , - 352 , - 515 , - 938 , - 1621 , - 2564 , - 3767 , - 1070 , - 2793 , - 616 , - 2859 , - 1202 , - 3965 , - 2828 , - 1951 , - 1334 , - 977 , - 880 , - 1043 , - 1466 , - 2149 , - 3092 , - 135 , - 1598 , - 3321 , - 1144 , - 3387 , - 1730 , - 333 , - 3356 , - 2479 , - 1862 , - 1505 , - 1408 , - 1571 , - 1994 , - 2677 , - 3620 , - 663 , - 2126 , - 3849 , - 1672 , - 3915 , - 2258 , - 861 , - 3884 , - 3007 , - 2390 , - 2033 , - 1936 , - 2099 , - 2522 , - 3205 , - 4148 , - 1191 , - 2654 , - 217 , - 2200 , - 283 , - 2786 , - 1389 , - 252 , - 3535 , - 2918 , - 2561 , - 2464 , - 2627 , - 3050 , - 3733 , - 516 , - 1719 , - 3182 , - 745 , - 2728 , - 811 , - 3314 , - 1917 , - 780 , - 4063 , - 3446 , - 3089 , - 2992 , - 3155 , - 3578 , - 101 , - 1044 , - 2247 , - 3710 , - 1273 , - 3256 , - 1339 , - 3842 , - 2445 , - 1308 , - 431 , - 3974 , - 3617 , - 3520 , - 3683 , - 4106 , - 629 , - 1572 , - 2775 , - 78 , - 1801 , - 3784 , - 1867 , - 210 , - 2973 , - 1836 , - 959 , - 342 , - 4145 , - 4048 , - 51 , - 474 , - 1157 , - 2100 , - 3303 , - 606 , - 2329 , - 152 , - 2395 , - 738 , - 3501 , - 2364 , - 1487 , - 870 , - 513 , - 416 , - 579 , - 1002 , - 1685 , - 2628 , - 3831 , - 1134 , - 2857 , - 680 , - 2923 , - 1266 , - 4029 , - 2892 , - 2015 , - 1398 , - 1041 , - 944 , - 1107 , - 1530 , - 2213 , - 3156 , - 199 , - 1662 , - 3385 , - 1208 , - 3451 , - 1794 , - 397 , - 3420 , - 2543 , - 1926 , - 1569 , - 1472 , - 1635 , - 2058 , - 2741 , - 3684 , - 727 , - 2190 , - 3913 , - 1736 , - 3979 , - 2322 , - 925 , - 3948 , - 3071 , - 2454 , - 2097 , - 2000 , - 2163 , - 2586 , - 3269 , - 52 , - 1255 , - 2718 , - 281 , - 2264 , - 347 , - 2850 , - 1453 , - 316 , - 3599 , - 2982 , - 2625 , - 2528 , - 2691 , - 3114 , - 3797 , - 580 , - 1783 , - 3246 , - 809 , - 2792 , - 875 , - 3378 , - 1981 , - 844 , - 4127 , - 3510 , - 3153 , - 3056 , - 3219 , - 3642 , - 165 , - 1108 , - 2311 , - 3774 , - 1337 , - 3320 , - 1403 , - 3906 , - 2509 , - 1372 , - 495 , - 4038 , - 3681 , - 3584 , - 3747 , - 10 , - 693 , - 1636 , - 2839 , - 142 , - 1865 , - 3848 , - 1931 , - 274 , - 3037 , - 1900 , - 1023 , - 406 , - 49 , - 4112 , - 115 , - 538 , - 1221 , - 2164 , - 3367 , - 670 , - 2393 , - 216 , - 2459 , - 802 , - 3565 , - 2428 , - 1551 , - 934 , - 577 , - 480 , - 643 , - 1066 , - 1749 , - 2692 , - 3895 , - 1198 , - 2921 , - 744 , - 2987 , - 1330 , - 4093 , - 2956 , - 2079 , - 1462 , - 1105 , - 1008 , - 1171 , - 1594 , - 2277 , - 3220 , - 263 , - 1726 , - 3449 , - 1272 , - 3515 , - 1858 , - 461 , - 3484 , - 2607 , - 1990 , - 1633 , - 1536 , - 1699 , - 2122 , - 2805 , - 3748 , - 791 , - 2254 , - 3977 , - 1800 , - 4043 , - 2386 , - 989 , - 4012 , - 3135 , - 2518 , - 2161 , - 2064 , - 2227 , - 2650 , - 3333 , - 116 , - 1319 , - 2782 , - 345 , - 2328 , - 411 , - 2914 , - 1517 , - 380 , - 3663 , - 3046 , - 2689 , - 2592 , - 2755 , - 3178 , - 3861 , - 644 , - 1847 , - 3310 , - 873 , - 2856 , - 939 , - 3442 , - 2045 , - 908 , - 31 , - 3574 , - 3217 , - 3120 , - 3283 , - 3706 , - 229 , - 1172 , - 2375 , - 3838 , - 1401 , - 3384 , - 1467 , - 3970 , - 2573 , - 1436 , - 559 , - 4102 , - 3745 , - 3648 , - 3811 , - 74 , - 757 , - 1700 , - 2903 , - 206 , - 1929 , - 3912 , - 1995 , - 338 , - 3101 , - 1964 , - 1087 , - 470 , - 113 , - 16 , - 179 , - 602 , - 1285 , - 2228 , - 3431 , - 734 , - 2457 , - 280 , - 2523 , - 866 , - 3629 , - 2492 , - 1615 , - 998 , - 641 , - 544 , - 707 , - 1130 , - 1813 , - 2756 , - 3959 , - 1262 , - 2985 , - 808 , - 3051 , - 1394 , - 4157 , - 3020 , - 2143 , - 1526 , - 1169 , - 1072 , - 1235 , - 1658 , - 2341 , - 3284 , - 327 , - 1790 , - 3513 , - 1336 , - 3579 , - 1922 , - 525 , - 3548 , - 2671 , - 2054 , - 1697 , - 1600 , - 1763 , - 2186 , - 2869 , - 3812 , - 855 , - 2318 , - 4041 , - 1864 , - 4107 , - 2450 , - 1053 , - 4076 , - 3199 , - 2582 , - 2225 , - 2128 , - 2291 , - 2714 , - 3397 , - 180 , - 1383 , - 2846 , - 409 , - 2392 , - 475 , - 2978 , - 1581 , - 444 , - 3727 , - 3110 , - 2753 , - 2656 , - 2819 , - 3242 , - 3925 , - 708 , - 1911 , - 3374 , - 937 , - 2920 , - 1003 , - 3506 , - 2109 , - 972 , - 95 , - 3638 , - 3281 , - 3184 , - 3347 , - 3770 , - 293 , - 1236 , - 2439 , - 3902 , - 1465 , - 3448 , - 1531 , - 4034 , - 2637 , - 1500 , - 623 , - 6 , - 3809 , - 3712 , - 3875 , - 138 , - 821 , - 1764 , - 2967 , - 270 , - 1993 , - 3976 , - 2059 , - 402 , - 3165 , - 2028 , - 1151 , - 534 , - 177 , - 80 , - 243 , - 666 , - 1349 , - 2292 , - 3495 , - 798 , - 2521 , - 344 , - 2587 , - 930 , - 3693 , - 2556 , - 1679 , - 1062 , - 705 , - 608 , - 771 , - 1194 , - 1877 , - 2820 , - 4023 , - 1326 , - 3049 , - 872 , - 3115 , - 1458 , - 61 , - 3084 , - 2207 , - 1590 , - 1233 , - 1136 , - 1299 , - 1722 , - 2405 , - 3348 , - 391 , - 1854 , - 3577 , - 1400 , - 3643 , - 1986 , - 589 , - 3612 , - 2735 , - 2118 , - 1761 , - 1664 , - 1827 , - 2250 , - 2933 , - 3876 , - 919 , - 2382 , - 4105 , - 1928 , - 11 , - 2514 , - 1117 , - 4140 , - 3263 , - 2646 , - 2289 , - 2192 , - 2355 , - 2778 , - 3461 , - 244 , - 1447 , - 2910 , - 473 , - 2456 , - 539 , - 3042 , - 1645 , - 508 , - 3791 , - 3174 , - 2817 , - 2720 , - 2883 , - 3306 , - 3989 , - 772 , - 1975 , - 3438 , - 1001 , - 2984 , - 1067 , - 3570 , - 2173 , - 1036 , - 159 , - 3702 , - 3345 , - 3248 , - 3411 , - 3834 , - 357 , - 1300 , - 2503 , - 3966 , - 1529 , - 3512 , - 1595 , - 4098 , - 2701 , - 1564 , - 687 , - 70 , - 3873 , - 3776 , - 3939 , - 202 , - 885 , - 1828 , - 3031 , - 334 , - 2057 , - 4040 , - 2123 , - 466 , - 3229 , - 2092 , - 1215 , - 598 , - 241 , - 144 , - 307 , - 730 , - 1413 , - 2356 , - 3559 , - 862 , - 2585 , - 408 , - 2651 , - 994 , - 3757 , - 2620 , - 1743 , - 1126 , - 769 , - 672 , - 835 , - 1258 , - 1941 , - 2884 , - 4087 , - 1390 , - 3113 , - 936 , - 3179 , - 1522 , - 125 , - 3148 , - 2271 , - 1654 , - 1297 , - 1200 , - 1363 , - 1786 , - 2469 , - 3412 , - 455 , - 1918 , - 3641 , - 1464 , - 3707 , - 2050 , - 653 , - 3676 , - 2799 , - 2182 , - 1825 , - 1728 , - 1891 , - 2314 , - 2997 , - 3940 , - 983 , - 2446 , - 9 , - 1992 , - 75 , - 2578 , - 1181 , - 44 , - 3327 , - 2710 , - 2353 , - 2256 , - 2419 , - 2842 , - 3525 , - 308 , - 1511 , - 2974 , - 537 , - 2520 , - 603 , - 3106 , - 1709 , - 572 , - 3855 , - 3238 , - 2881 , - 2784 , - 2947 , - 3370 , - 4053 , - 836 , - 2039 , - 3502 , - 1065 , - 3048 , - 1131 , - 3634 , - 2237 , - 1100 , - 223 , - 3766 , - 3409 , - 3312 , - 3475 , - 3898 , - 421 , - 1364 , - 2567 , - 4030 , - 1593 , - 3576 , - 1659 , - 2 , - 2765 , - 1628 , - 751 , - 134 , - 3937 , - 3840 , - 4003 , - 266 , - 949 , - 1892 , - 3095 , - 398 , - 2121 , - 4104 , - 2187 , - 530 , - 3293 , - 2156 , - 1279 , - 662 , - 305 , - 208 , - 371 , - 794 , - 1477 , - 2420 , - 3623 , - 926 , - 2649 , - 472 , - 2715 , - 1058 , - 3821 , - 2684 , - 1807 , - 1190 , - 833 , - 736 , - 899 , - 1322 , - 2005 , - 2948 , - 4151 , - 1454 , - 3177 , - 1000 , - 3243 , - 1586 , - 189 , - 3212 , - 2335 , - 1718 , - 1361 , - 1264 , - 1427 , - 1850 , - 2533 , - 3476 , - 519 , - 1982 , - 3705 , - 1528 , - 3771 , - 2114 , - 717 , - 3740 , - 2863 , - 2246 , - 1889 , - 1792 , - 1955 , - 2378 , - 3061 , - 4004 , - 1047 , - 2510 , - 73 , - 2056 , - 139 , - 2642 , - 1245 , - 108 , - 3391 , - 2774 , - 2417 , - 2320 , - 2483 , - 2906 , - 3589 , - 372 , - 1575 , - 3038 , - 601 , - 2584 , - 667 , - 3170 , - 1773 , - 636 , - 3919 , - 3302 , - 2945 , - 2848 , - 3011 , - 3434 , - 4117 , - 900 , - 2103 , - 3566 , - 1129 , - 3112 , - 1195 , - 3698 , - 2301 , - 1164 , - 287 , - 3830 , - 3473 , - 3376 , - 3539 , - 3962 , - 485 , - 1428 , - 2631 , - 4094 , - 1657 , - 3640 , - 1723 , - 66 , - 2829 , - 1692 , - 815 , - 198 , - 4001 , - 3904 , - 4067 , - 330 , - 1013 , - 1956 , - 3159 , - 462 , - 2185 , - 8 , - 2251 , - 594 , - 3357 , - 2220 , - 1343 , - 726 , - 369 , - 272 , - 435 , - 858 , - 1541 , - 2484 , - 3687 , - 990 , - 2713 , - 536 , - 2779 , - 1122 , - 3885 , - 2748 , - 1871 , - 1254 , - 897 , - 800 , - 963 , - 1386 , - 2069 , - 3012 , - 55 , - 1518 , - 3241 , - 1064 , - 3307 , - 1650 , - 253 , - 3276 , - 2399 , - 1782 , - 1425 , - 1328 , - 1491 , - 1914 , - 2597 , - 3540 , - 583 , - 2046 , - 3769 , - 1592 , - 3835 , - 2178 , - 781 , - 3804 , - 2927 , - 2310 , - 1953 , - 1856 , - 2019 , - 2442 , - 3125 , - 4068 , - 1111 , - 2574 , - 137 , - 2120 , - 203 , - 2706 , - 1309 , - 172 , - 3455 , - 2838 , - 2481 , - 2384 , - 2547 , - 2970 , - 3653 , - 436 , - 1639 , - 3102 , - 665 , - 2648 , - 731 , - 3234 , - 1837 , - 700 , - 3983 , - 3366 , - 3009 , - 2912 , - 3075 , - 3498 , - 21 , - 964 , - 2167 , - 3630 , - 1193 , - 3176 , - 1259 , - 3762 , - 2365 , - 1228 , - 351 , - 3894 , - 3537 , - 3440 , - 3603 , - 4026 , - 549 , - 1492 , - 2695 , - 4158 , - 1721 , - 3704 , - 1787 , - 130 , - 2893 , - 1756 , - 879 , - 262 , - 4065 , - 3968 , - 4131 , - 394 , - 1077 , - 2020 , - 3223 , - 526 , - 2249 , - 72 , - 2315 , - 658 , - 3421 , - 2284 , - 1407 , - 790 , - 433 , - 336 , - 499 , - 922 , - 1605 , - 2548 , - 3751 , - 1054 , - 2777 , - 600 , - 2843 , - 1186 , - 3949 , - 2812 , - 1935 , - 1318 , - 961 , - 864 , - 1027 , - 1450 , - 2133 , - 3076 , - 119 , - 1582 , - 3305 , - 1128 , - 3371 , - 1714 , - 317 , - 3340 , - 2463 , - 1846 , - 1489 , - 1392 , - 1555 , - 1978 , - 2661 , - 3604 , - 647 , - 2110 , - 3833 , - 1656 , - 3899 , - 2242 , - 845 , - 3868 , - 2991 , - 2374 , - 2017 , - 1920 , - 2083 , - 2506 , - 3189 , - 4132 , - 1175 , - 2638 , - 201 , - 2184 , - 267 , - 2770 , - 1373 , - 236 , - 3519 , - 2902 , - 2545 , - 2448 , - 2611 , - 3034 , - 3717 , - 500 , - 1703 , - 3166 , - 729 , - 2712 , - 795 , - 3298 , - 1901 , - 764 , - 4047 , - 3430 , - 3073 , - 2976 , - 3139 , - 3562 , - 85 , - 1028 , - 2231 , - 3694 , - 1257 , - 3240 , - 1323 , - 3826 , - 2429 , - 1292 , - 415 , - 3958 , - 3601 , - 3504 , - 3667 , - 4090 , - 613 , - 1556 , - 2759 , - 62 , - 1785 , - 3768 , - 1851 , - 194 , - 2957 , - 1820 , - 943 , - 326 , - 4129 , - 4032 , - 35 , - 458 , - 1141 , - 2084 , - 3287 , - 590 , - 2313 , - 136 , - 2379 , - 722 , - 3485 , - 2348 , - 1471 , - 854 , - 497 , - 400 , - 563 , - 986 , - 1669 , - 2612 , - 3815 , - 1118 , - 2841 , - 664 , - 2907 , - 1250 , - 4013 , - 2876 , - 1999 , - 1382 , - 1025 , - 928 , - 1091 , - 1514 , - 2197 , - 3140 , - 183 , - 1646 , - 3369 , - 1192 , - 3435 , - 1778 , - 381 , - 3404 , - 2527 , - 1910 , - 1553 , - 1456 , - 1619 , - 2042 , - 2725 , - 3668 , - 711 , - 2174 , - 3897 , - 1720 , - 3963 , - 2306 , - 909 , - 3932 , - 3055 , - 2438 , - 2081 , - 1984 , - 2147 , - 2570 , - 3253 , - 36 , - 1239 , - 2702 , - 265 , - 2248 , - 331 , - 2834 , - 1437 , - 300 , - 3583 , - 2966 , - 2609 , - 2512 , - 2675 , - 3098 , - 3781 , - 564 , - 1767 , - 3230 , - 793 , - 2776 , - 859 , - 3362 , - 1965 , - 828 , - 4111 , - 3494 , - 3137 , - 3040 , - 3203 , - 3626 , - 149 , - 1092 , - 2295 , - 3758 , - 1321 , - 3304 , - 1387 , - 3890 , - 2493 , - 1356 , - 479 , - 4022 , - 3665 , - 3568 , - 3731 , - 4154 , - 677 , - 1620 , - 2823 , - 126 , - 1849 , - 3832 , - 1915 , - 258 , - 3021 , - 1884 , - 1007 , - 390 , - 33 , - 4096 , - 99 , - 522 , - 1205 , - 2148 , - 3351 , - 654 , - 2377 , - 200 , - 2443 , - 786 , - 3549 , - 2412 , - 1535 , - 918 , - 561 , - 464 , - 627 , - 1050 , - 1733 , - 2676 , - 3879 , - 1182 , - 2905 , - 728 , - 2971 , - 1314 , - 4077 , - 2940 , - 2063 , - 1446 , - 1089 , - 992 , - 1155 , - 1578 , - 2261 , - 3204 , - 247 , - 1710 , - 3433 , - 1256 , - 3499 , - 1842 , - 445 , - 3468 , - 2591 , - 1974 , - 1617 , - 1520 , - 1683 , - 2106 , - 2789 , - 3732 , - 775 , - 2238 , - 3961 , - 1784 , - 4027 , - 2370 , - 973 , - 3996 , - 3119 , - 2502 , - 2145 , - 2048 , - 2211 , - 2634 , - 3317 , - 100 , - 1303 , - 2766 , - 329 , - 2312 , - 395 , - 2898 , - 1501 , - 364 , - 3647 , - 3030 , - 2673 , - 2576 , - 2739 , - 3162 , - 3845 , - 628 , - 1831 , - 3294 , - 857 , - 2840 , - 923 , - 3426 , - 2029 , - 892 , - 15 , - 3558 , - 3201 , - 3104 , - 3267 , - 3690 , - 213 , - 1156 , - 2359 , - 3822 , - 1385 , - 3368 , - 1451 , - 3954 , - 2557 , - 1420 , - 543 , - 4086 , - 3729 , - 3632 , - 3795 , - 58 , - 741 , - 1684 , - 2887 , - 190 , - 1913 , - 3896 , - 1979 , - 322 , - 3085 , - 1948 , - 1071 , - 454 , - 97 , - 0 , - 307 , - 1142 , - 2505 , - 172 , - 2591 , - 1314 , - 565 , - 344 , - 651 , - 1486 , - 2849 , - 516 , - 2935 , - 1658 , - 909 , - 688 , - 995 , - 1830 , - 3193 , - 860 , - 3279 , - 2002 , - 1253 , - 1032 , - 1339 , - 2174 , - 3537 , - 1204 , - 3623 , - 2346 , - 1597 , - 1376 , - 1683 , - 2518 , - 3881 , - 1548 , - 3967 , - 2690 , - 1941 , - 1720 , - 2027 , - 2862 , - 1 , - 1892 , - 87 , - 3034 , - 2285 , - 2064 , - 2371 , - 3206 , - 345 , - 2236 , - 431 , - 3378 , - 2629 , - 2408 , - 2715 , - 3550 , - 689 , - 2580 , - 775 , - 3722 , - 2973 , - 2752 , - 3059 , - 3894 , - 1033 , - 2924 , - 1119 , - 4066 , - 3317 , - 3096 , - 3403 , - 14 , - 1377 , - 3268 , - 1463 , - 186 , - 3661 , - 3440 , - 3747 , - 358 , - 1721 , - 3612 , - 1807 , - 530 , - 4005 , - 3784 , - 4091 , - 702 , - 2065 , - 3956 , - 2151 , - 874 , - 125 , - 4128 , - 211 , - 1046 , - 2409 , - 76 , - 2495 , - 1218 , - 469 , - 248 , - 555 , - 1390 , - 2753 , - 420 , - 2839 , - 1562 , - 813 , - 592 , - 899 , - 1734 , - 3097 , - 764 , - 3183 , - 1906 , - 1157 , - 936 , - 1243 , - 2078 , - 3441 , - 1108 , - 3527 , - 2250 , - 1501 , - 1280 , - 1587 , - 2422 , - 3785 , - 1452 , - 3871 , - 2594 , - 1845 , - 1624 , - 1931 , - 2766 , - 4129 , - 1796 , - 4215 , - 2938 , - 2189 , - 1968 , - 2275 , - 3110 , - 249 , - 2140 , - 335 , - 3282 , - 2533 , - 2312 , - 2619 , - 3454 , - 593 , - 2484 , - 679 , - 3626 , - 2877 , - 2656 , - 2963 , - 3798 , - 937 , - 2828 , - 1023 , - 3970 , - 3221 , - 3000 , - 3307 , - 4142 , - 1281 , - 3172 , - 1367 , - 90 , - 3565 , - 3344 , - 3651 , - 262 , - 1625 , - 3516 , - 1711 , - 434 , - 3909 , - 3688 , - 3995 , - 606 , - 1969 , - 3860 , - 2055 , - 778 , - 29 , - 4032 , - 115 , - 950 , - 2313 , - 4204 , - 2399 , - 1122 , - 373 , - 152 , - 459 , - 1294 , - 2657 , - 324 , - 2743 , - 1466 , - 717 , - 496 , - 803 , - 1638 , - 3001 , - 668 , - 3087 , - 1810 , - 1061 , - 840 , - 1147 , - 1982 , - 3345 , - 1012 , - 3431 , - 2154 , - 1405 , - 1184 , - 1491 , - 2326 , - 3689 , - 1356 , - 3775 , - 2498 , - 1749 , - 1528 , - 1835 , - 2670 , - 4033 , - 1700 , - 4119 , - 2842 , - 2093 , - 1872 , - 2179 , - 3014 , - 153 , - 2044 , - 239 , - 3186 , - 2437 , - 2216 , - 2523 , - 3358 , - 497 , - 2388 , - 583 , - 3530 , - 2781 , - 2560 , - 2867 , - 3702 , - 841 , - 2732 , - 927 , - 3874 , - 3125 , - 2904 , - 3211 , - 4046 , - 1185 , - 3076 , - 1271 , - 4218 , - 3469 , - 3248 , - 3555 , - 166 , - 1529 , - 3420 , - 1615 , - 338 , - 3813 , - 3592 , - 3899 , - 510 , - 1873 , - 3764 , - 1959 , - 682 , - 4157 , - 3936 , - 19 , - 854 , - 2217 , - 4108 , - 2303 , - 1026 , - 277 , - 56 , - 363 , - 1198 , - 2561 , - 228 , - 2647 , - 1370 , - 621 , - 400 , - 707 , - 1542 , - 2905 , - 572 , - 2991 , - 1714 , - 965 , - 744 , - 1051 , - 1886 , - 3249 , - 916 , - 3335 , - 2058 , - 1309 , - 1088 , - 1395 , - 2230 , - 3593 , - 1260 , - 3679 , - 2402 , - 1653 , - 1432 , - 1739 , - 2574 , - 3937 , - 1604 , - 4023 , - 2746 , - 1997 , - 1776 , - 2083 , - 2918 , - 57 , - 1948 , - 143 , - 3090 , - 2341 , - 2120 , - 2427 , - 3262 , - 401 , - 2292 , - 487 , - 3434 , - 2685 , - 2464 , - 2771 , - 3606 , - 745 , - 2636 , - 831 , - 3778 , - 3029 , - 2808 , - 3115 , - 3950 , - 1089 , - 2980 , - 1175 , - 4122 , - 3373 , - 3152 , - 3459 , - 70 , - 1433 , - 3324 , - 1519 , - 242 , - 3717 , - 3496 , - 3803 , - 414 , - 1777 , - 3668 , - 1863 , - 586 , - 4061 , - 3840 , - 4147 , - 758 , - 2121 , - 4012 , - 2207 , - 930 , - 181 , - 4184 , - 267 , - 1102 , - 2465 , - 132 , - 2551 , - 1274 , - 525 , - 304 , - 611 , - 1446 , - 2809 , - 476 , - 2895 , - 1618 , - 869 , - 648 , - 955 , - 1790 , - 3153 , - 820 , - 3239 , - 1962 , - 1213 , - 992 , - 1299 , - 2134 , - 3497 , - 1164 , - 3583 , - 2306 , - 1557 , - 1336 , - 1643 , - 2478 , - 3841 , - 1508 , - 3927 , - 2650 , - 1901 , - 1680 , - 1987 , - 2822 , - 4185 , - 1852 , - 47 , - 2994 , - 2245 , - 2024 , - 2331 , - 3166 , - 305 , - 2196 , - 391 , - 3338 , - 2589 , - 2368 , - 2675 , - 3510 , - 649 , - 2540 , - 735 , - 3682 , - 2933 , - 2712 , - 3019 , - 3854 , - 993 , - 2884 , - 1079 , - 4026 , - 3277 , - 3056 , - 3363 , - 4198 , - 1337 , - 3228 , - 1423 , - 146 , - 3621 , - 3400 , - 3707 , - 318 , - 1681 , - 3572 , - 1767 , - 490 , - 3965 , - 3744 , - 4051 , - 662 , - 2025 , - 3916 , - 2111 , - 834 , - 85 , - 4088 , - 171 , - 1006 , - 2369 , - 36 , - 2455 , - 1178 , - 429 , - 208 , - 515 , - 1350 , - 2713 , - 380 , - 2799 , - 1522 , - 773 , - 552 , - 859 , - 1694 , - 3057 , - 724 , - 3143 , - 1866 , - 1117 , - 896 , - 1203 , - 2038 , - 3401 , - 1068 , - 3487 , - 2210 , - 1461 , - 1240 , - 1547 , - 2382 , - 3745 , - 1412 , - 3831 , - 2554 , - 1805 , - 1584 , - 1891 , - 2726 , - 4089 , - 1756 , - 4175 , - 2898 , - 2149 , - 1928 , - 2235 , - 3070 , - 209 , - 2100 , - 295 , - 3242 , - 2493 , - 2272 , - 2579 , - 3414 , - 553 , - 2444 , - 639 , - 3586 , - 2837 , - 2616 , - 2923 , - 3758 , - 897 , - 2788 , - 983 , - 3930 , - 3181 , - 2960 , - 3267 , - 4102 , - 1241 , - 3132 , - 1327 , - 50 , - 3525 , - 3304 , - 3611 , - 222 , - 1585 , - 3476 , - 1671 , - 394 , - 3869 , - 3648 , - 3955 , - 566 , - 1929 , - 3820 , - 2015 , - 738 , - 4213 , - 3992 , - 75 , - 910 , - 2273 , - 4164 , - 2359 , - 1082 , - 333 , - 112 , - 419 , - 1254 , - 2617 , - 284 , - 2703 , - 1426 , - 677 , - 456 , - 763 , - 1598 , - 2961 , - 628 , - 3047 , - 1770 , - 1021 , - 800 , - 1107 , - 1942 , - 3305 , - 972 , - 3391 , - 2114 , - 1365 , - 1144 , - 1451 , - 2286 , - 3649 , - 1316 , - 3735 , - 2458 , - 1709 , - 1488 , - 1795 , - 2630 , - 3993 , - 1660 , - 4079 , - 2802 , - 2053 , - 1832 , - 2139 , - 2974 , - 113 , - 2004 , - 199 , - 3146 , - 2397 , - 2176 , - 2483 , - 3318 , - 457 , - 2348 , - 543 , - 3490 , - 2741 , - 2520 , - 2827 , - 3662 , - 801 , - 2692 , - 887 , - 3834 , - 3085 , - 2864 , - 3171 , - 4006 , - 1145 , - 3036 , - 1231 , - 4178 , - 3429 , - 3208 , - 3515 , - 126 , - 1489 , - 3380 , - 1575 , - 298 , - 3773 , - 3552 , - 3859 , - 470 , - 1833 , - 3724 , - 1919 , - 642 , - 4117 , - 3896 , - 4203 , - 814 , - 2177 , - 4068 , - 2263 , - 986 , - 237 , - 16 , - 323 , - 1158 , - 2521 , - 188 , - 2607 , - 1330 , - 581 , - 360 , - 667 , - 1502 , - 2865 , - 532 , - 2951 , - 1674 , - 925 , - 704 , - 1011 , - 1846 , - 3209 , - 876 , - 3295 , - 2018 , - 1269 , - 1048 , - 1355 , - 2190 , - 3553 , - 1220 , - 3639 , - 2362 , - 1613 , - 1392 , - 1699 , - 2534 , - 3897 , - 1564 , - 3983 , - 2706 , - 1957 , - 1736 , - 2043 , - 2878 , - 17 , - 1908 , - 103 , - 3050 , - 2301 , - 2080 , - 2387 , - 3222 , - 361 , - 2252 , - 447 , - 3394 , - 2645 , - 2424 , - 2731 , - 3566 , - 705 , - 2596 , - 791 , - 3738 , - 2989 , - 2768 , - 3075 , - 3910 , - 1049 , - 2940 , - 1135 , - 4082 , - 3333 , - 3112 , - 3419 , - 30 , - 1393 , - 3284 , - 1479 , - 202 , - 3677 , - 3456 , - 3763 , - 374 , - 1737 , - 3628 , - 1823 , - 546 , - 4021 , - 3800 , - 4107 , - 718 , - 2081 , - 3972 , - 2167 , - 890 , - 141 , - 4144 , - 227 , - 1062 , - 2425 , - 92 , - 2511 , - 1234 , - 485 , - 264 , - 571 , - 1406 , - 2769 , - 436 , - 2855 , - 1578 , - 829 , - 608 , - 915 , - 1750 , - 3113 , - 780 , - 3199 , - 1922 , - 1173 , - 952 , - 1259 , - 2094 , - 3457 , - 1124 , - 3543 , - 2266 , - 1517 , - 1296 , - 1603 , - 2438 , - 3801 , - 1468 , - 3887 , - 2610 , - 1861 , - 1640 , - 1947 , - 2782 , - 4145 , - 1812 , - 7 , - 2954 , - 2205 , - 1984 , - 2291 , - 3126 , - 265 , - 2156 , - 351 , - 3298 , - 2549 , - 2328 , - 2635 , - 3470 , - 609 , - 2500 , - 695 , - 3642 , - 2893 , - 2672 , - 2979 , - 3814 , - 953 , - 2844 , - 1039 , - 3986 , - 3237 , - 3016 , - 3323 , - 4158 , - 1297 , - 3188 , - 1383 , - 106 , - 3581 , - 3360 , - 3667 , - 278 , - 1641 , - 3532 , - 1727 , - 450 , - 3925 , - 3704 , - 4011 , - 622 , - 1985 , - 3876 , - 2071 , - 794 , - 45 , - 4048 , - 131 , - 966 , - 2329 , - 4220 , - 2415 , - 1138 , - 389 , - 168 , - 475 , - 1310 , - 2673 , - 340 , - 2759 , - 1482 , - 733 , - 512 , - 819 , - 1654 , - 3017 , - 684 , - 3103 , - 1826 , - 1077 , - 856 , - 1163 , - 1998 , - 3361 , - 1028 , - 3447 , - 2170 , - 1421 , - 1200 , - 1507 , - 2342 , - 3705 , - 1372 , - 3791 , - 2514 , - 1765 , - 1544 , - 1851 , - 2686 , - 4049 , - 1716 , - 4135 , - 2858 , - 2109 , - 1888 , - 2195 , - 3030 , - 169 , - 2060 , - 255 , - 3202 , - 2453 , - 2232 , - 2539 , - 3374 , - 513 , - 2404 , - 599 , - 3546 , - 2797 , - 2576 , - 2883 , - 3718 , - 857 , - 2748 , - 943 , - 3890 , - 3141 , - 2920 , - 3227 , - 4062 , - 1201 , - 3092 , - 1287 , - 10 , - 3485 , - 3264 , - 3571 , - 182 , - 1545 , - 3436 , - 1631 , - 354 , - 3829 , - 3608 , - 3915 , - 526 , - 1889 , - 3780 , - 1975 , - 698 , - 4173 , - 3952 , - 35 , - 870 , - 2233 , - 4124 , - 2319 , - 1042 , - 293 , - 72 , - 379 , - 1214 , - 2577 , - 244 , - 2663 , - 1386 , - 637 , - 416 , - 723 , - 1558 , - 2921 , - 588 , - 3007 , - 1730 , - 981 , - 760 , - 1067 , - 1902 , - 3265 , - 932 , - 3351 , - 2074 , - 1325 , - 1104 , - 1411 , - 2246 , - 3609 , - 1276 , - 3695 , - 2418 , - 1669 , - 1448 , - 1755 , - 2590 , - 3953 , - 1620 , - 4039 , - 2762 , - 2013 , - 1792 , - 2099 , - 2934 , - 73 , - 1964 , - 159 , - 3106 , - 2357 , - 2136 , - 2443 , - 3278 , - 417 , - 2308 , - 503 , - 3450 , - 2701 , - 2480 , - 2787 , - 3622 , - 761 , - 2652 , - 847 , - 3794 , - 3045 , - 2824 , - 3131 , - 3966 , - 1105 , - 2996 , - 1191 , - 4138 , - 3389 , - 3168 , - 3475 , - 86 , - 1449 , - 3340 , - 1535 , - 258 , - 3733 , - 3512 , - 3819 , - 430 , - 1793 , - 3684 , - 1879 , - 602 , - 4077 , - 3856 , - 4163 , - 774 , - 2137 , - 4028 , - 2223 , - 946 , - 197 , - 4200 , - 283 , - 1118 , - 2481 , - 148 , - 2567 , - 1290 , - 541 , - 320 , - 627 , - 1462 , - 2825 , - 492 , - 2911 , - 1634 , - 885 , - 664 , - 971 , - 1806 , - 3169 , - 836 , - 3255 , - 1978 , - 1229 , - 1008 , - 1315 , - 2150 , - 3513 , - 1180 , - 3599 , - 2322 , - 1573 , - 1352 , - 1659 , - 2494 , - 3857 , - 1524 , - 3943 , - 2666 , - 1917 , - 1696 , - 2003 , - 2838 , - 4201 , - 1868 , - 63 , - 3010 , - 2261 , - 2040 , - 2347 , - 3182 , - 321 , - 2212 , - 407 , - 3354 , - 2605 , - 2384 , - 2691 , - 3526 , - 665 , - 2556 , - 751 , - 3698 , - 2949 , - 2728 , - 3035 , - 3870 , - 1009 , - 2900 , - 1095 , - 4042 , - 3293 , - 3072 , - 3379 , - 4214 , - 1353 , - 3244 , - 1439 , - 162 , - 3637 , - 3416 , - 3723 , - 334 , - 1697 , - 3588 , - 1783 , - 506 , - 3981 , - 3760 , - 4067 , - 678 , - 2041 , - 3932 , - 2127 , - 850 , - 101 , - 4104 , - 187 , - 1022 , - 2385 , - 52 , - 2471 , - 1194 , - 445 , - 224 , - 531 , - 1366 , - 2729 , - 396 , - 2815 , - 1538 , - 789 , - 568 , - 875 , - 1710 , - 3073 , - 740 , - 3159 , - 1882 , - 1133 , - 912 , - 1219 , - 2054 , - 3417 , - 1084 , - 3503 , - 2226 , - 1477 , - 1256 , - 1563 , - 2398 , - 3761 , - 1428 , - 3847 , - 2570 , - 1821 , - 1600 , - 1907 , - 2742 , - 4105 , - 1772 , - 4191 , - 2914 , - 2165 , - 1944 , - 2251 , - 3086 , - 225 , - 2116 , - 311 , - 3258 , - 2509 , - 2288 , - 2595 , - 3430 , - 569 , - 2460 , - 655 , - 3602 , - 2853 , - 2632 , - 2939 , - 3774 , - 913 , - 2804 , - 999 , - 3946 , - 3197 , - 2976 , - 3283 , - 4118 , - 1257 , - 3148 , - 1343 , - 66 , - 3541 , - 3320 , - 3627 , - 238 , - 1601 , - 3492 , - 1687 , - 410 , - 3885 , - 3664 , - 3971 , - 582 , - 1945 , - 3836 , - 2031 , - 754 , - 5 , - 4008 , - 91 , - 926 , - 2289 , - 4180 , - 2375 , - 1098 , - 349 , - 128 , - 435 , - 1270 , - 2633 , - 300 , - 2719 , - 1442 , - 693 , - 472 , - 779 , - 1614 , - 2977 , - 644 , - 3063 , - 1786 , - 1037 , - 816 , - 1123 , - 1958 , - 3321 , - 988 , - 3407 , - 2130 , - 1381 , - 1160 , - 1467 , - 2302 , - 3665 , - 1332 , - 3751 , - 2474 , - 1725 , - 1504 , - 1811 , - 2646 , - 4009 , - 1676 , - 4095 , - 2818 , - 2069 , - 1848 , - 2155 , - 2990 , - 129 , - 2020 , - 215 , - 3162 , - 2413 , - 2192 , - 2499 , - 3334 , - 473 , - 2364 , - 559 , - 3506 , - 2757 , - 2536 , - 2843 , - 3678 , - 817 , - 2708 , - 903 , - 3850 , - 3101 , - 2880 , - 3187 , - 4022 , - 1161 , - 3052 , - 1247 , - 4194 , - 3445 , - 3224 , - 3531 , - 142 , - 1505 , - 3396 , - 1591 , - 314 , - 3789 , - 3568 , - 3875 , - 486 , - 1849 , - 3740 , - 1935 , - 658 , - 4133 , - 3912 , - 4219 , - 830 , - 2193 , - 4084 , - 2279 , - 1002 , - 253 , - 32 , - 339 , - 1174 , - 2537 , - 204 , - 2623 , - 1346 , - 597 , - 376 , - 683 , - 1518 , - 2881 , - 548 , - 2967 , - 1690 , - 941 , - 720 , - 1027 , - 1862 , - 3225 , - 892 , - 3311 , - 2034 , - 1285 , - 1064 , - 1371 , - 2206 , - 3569 , - 1236 , - 3655 , - 2378 , - 1629 , - 1408 , - 1715 , - 2550 , - 3913 , - 1580 , - 3999 , - 2722 , - 1973 , - 1752 , - 2059 , - 2894 , - 33 , - 1924 , - 119 , - 3066 , - 2317 , - 2096 , - 2403 , - 3238 , - 377 , - 2268 , - 463 , - 3410 , - 2661 , - 2440 , - 2747 , - 3582 , - 721 , - 2612 , - 807 , - 3754 , - 3005 , - 2784 , - 3091 , - 3926 , - 1065 , - 2956 , - 1151 , - 4098 , - 3349 , - 3128 , - 3435 , - 46 , - 1409 , - 3300 , - 1495 , - 218 , - 3693 , - 3472 , - 3779 , - 390 , - 1753 , - 3644 , - 1839 , - 562 , - 4037 , - 3816 , - 4123 , - 734 , - 2097 , - 3988 , - 2183 , - 906 , - 157 , - 4160 , - 243 , - 1078 , - 2441 , - 108 , - 2527 , - 1250 , - 501 , - 280 , - 587 , - 1422 , - 2785 , - 452 , - 2871 , - 1594 , - 845 , - 624 , - 931 , - 1766 , - 3129 , - 796 , - 3215 , - 1938 , - 1189 , - 968 , - 1275 , - 2110 , - 3473 , - 1140 , - 3559 , - 2282 , - 1533 , - 1312 , - 1619 , - 2454 , - 3817 , - 1484 , - 3903 , - 2626 , - 1877 , - 1656 , - 1963 , - 2798 , - 4161 , - 1828 , - 23 , - 2970 , - 2221 , - 2000 , - 2307 , - 3142 , - 281 , - 2172 , - 367 , - 3314 , - 2565 , - 2344 , - 2651 , - 3486 , - 625 , - 2516 , - 711 , - 3658 , - 2909 , - 2688 , - 2995 , - 3830 , - 969 , - 2860 , - 1055 , - 4002 , - 3253 , - 3032 , - 3339 , - 4174 , - 1313 , - 3204 , - 1399 , - 122 , - 3597 , - 3376 , - 3683 , - 294 , - 1657 , - 3548 , - 1743 , - 466 , - 3941 , - 3720 , - 4027 , - 638 , - 2001 , - 3892 , - 2087 , - 810 , - 61 , - 4064 , - 147 , - 982 , - 2345 , - 12 , - 2431 , - 1154 , - 405 , - 184 , - 491 , - 1326 , - 2689 , - 356 , - 2775 , - 1498 , - 749 , - 528 , - 835 , - 1670 , - 3033 , - 700 , - 3119 , - 1842 , - 1093 , - 872 , - 1179 , - 2014 , - 3377 , - 1044 , - 3463 , - 2186 , - 1437 , - 1216 , - 1523 , - 2358 , - 3721 , - 1388 , - 3807 , - 2530 , - 1781 , - 1560 , - 1867 , - 2702 , - 4065 , - 1732 , - 4151 , - 2874 , - 2125 , - 1904 , - 2211 , - 3046 , - 185 , - 2076 , - 271 , - 3218 , - 2469 , - 2248 , - 2555 , - 3390 , - 529 , - 2420 , - 615 , - 3562 , - 2813 , - 2592 , - 2899 , - 3734 , - 873 , - 2764 , - 959 , - 3906 , - 3157 , - 2936 , - 3243 , - 4078 , - 1217 , - 3108 , - 1303 , - 26 , - 3501 , - 3280 , - 3587 , - 198 , - 1561 , - 3452 , - 1647 , - 370 , - 3845 , - 3624 , - 3931 , - 542 , - 1905 , - 3796 , - 1991 , - 714 , - 4189 , - 3968 , - 51 , - 886 , - 2249 , - 4140 , - 2335 , - 1058 , - 309 , - 88 , - 395 , - 1230 , - 2593 , - 260 , - 2679 , - 1402 , - 653 , - 432 , - 739 , - 1574 , - 2937 , - 604 , - 3023 , - 1746 , - 997 , - 776 , - 1083 , - 1918 , - 3281 , - 948 , - 3367 , - 2090 , - 1341 , - 1120 , - 1427 , - 2262 , - 3625 , - 1292 , - 3711 , - 2434 , - 1685 , - 1464 , - 1771 , - 2606 , - 3969 , - 1636 , - 4055 , - 2778 , - 2029 , - 1808 , - 2115 , - 2950 , - 89 , - 1980 , - 175 , - 3122 , - 2373 , - 2152 , - 2459 , - 3294 , - 433 , - 2324 , - 519 , - 3466 , - 2717 , - 2496 , - 2803 , - 3638 , - 777 , - 2668 , - 863 , - 3810 , - 3061 , - 2840 , - 3147 , - 3982 , - 1121 , - 3012 , - 1207 , - 4154 , - 3405 , - 3184 , - 3491 , - 102 , - 1465 , - 3356 , - 1551 , - 274 , - 3749 , - 3528 , - 3835 , - 446 , - 1809 , - 3700 , - 1895 , - 618 , - 4093 , - 3872 , - 4179 , - 790 , - 2153 , - 4044 , - 2239 , - 962 , - 213 , - 4216 , - 299 , - 1134 , - 2497 , - 164 , - 2583 , - 1306 , - 557 , - 336 , - 643 , - 1478 , - 2841 , - 508 , - 2927 , - 1650 , - 901 , - 680 , - 987 , - 1822 , - 3185 , - 852 , - 3271 , - 1994 , - 1245 , - 1024 , - 1331 , - 2166 , - 3529 , - 1196 , - 3615 , - 2338 , - 1589 , - 1368 , - 1675 , - 2510 , - 3873 , - 1540 , - 3959 , - 2682 , - 1933 , - 1712 , - 2019 , - 2854 , - 4217 , - 1884 , - 79 , - 3026 , - 2277 , - 2056 , - 2363 , - 3198 , - 337 , - 2228 , - 423 , - 3370 , - 2621 , - 2400 , - 2707 , - 3542 , - 681 , - 2572 , - 767 , - 3714 , - 2965 , - 2744 , - 3051 , - 3886 , - 1025 , - 2916 , - 1111 , - 4058 , - 3309 , - 3088 , - 3395 , - 6 , - 1369 , - 3260 , - 1455 , - 178 , - 3653 , - 3432 , - 3739 , - 350 , - 1713 , - 3604 , - 1799 , - 522 , - 3997 , - 3776 , - 4083 , - 694 , - 2057 , - 3948 , - 2143 , - 866 , - 117 , - 4120 , - 203 , - 1038 , - 2401 , - 68 , - 2487 , - 1210 , - 461 , - 240 , - 547 , - 1382 , - 2745 , - 412 , - 2831 , - 1554 , - 805 , - 584 , - 891 , - 1726 , - 3089 , - 756 , - 3175 , - 1898 , - 1149 , - 928 , - 1235 , - 2070 , - 3433 , - 1100 , - 3519 , - 2242 , - 1493 , - 1272 , - 1579 , - 2414 , - 3777 , - 1444 , - 3863 , - 2586 , - 1837 , - 1616 , - 1923 , - 2758 , - 4121 , - 1788 , - 4207 , - 2930 , - 2181 , - 1960 , - 2267 , - 3102 , - 241 , - 2132 , - 327 , - 3274 , - 2525 , - 2304 , - 2611 , - 3446 , - 585 , - 2476 , - 671 , - 3618 , - 2869 , - 2648 , - 2955 , - 3790 , - 929 , - 2820 , - 1015 , - 3962 , - 3213 , - 2992 , - 3299 , - 4134 , - 1273 , - 3164 , - 1359 , - 82 , - 3557 , - 3336 , - 3643 , - 254 , - 1617 , - 3508 , - 1703 , - 426 , - 3901 , - 3680 , - 3987 , - 598 , - 1961 , - 3852 , - 2047 , - 770 , - 21 , - 4024 , - 107 , - 942 , - 2305 , - 4196 , - 2391 , - 1114 , - 365 , - 144 , - 451 , - 1286 , - 2649 , - 316 , - 2735 , - 1458 , - 709 , - 488 , - 795 , - 1630 , - 2993 , - 660 , - 3079 , - 1802 , - 1053 , - 832 , - 1139 , - 1974 , - 3337 , - 1004 , - 3423 , - 2146 , - 1397 , - 1176 , - 1483 , - 2318 , - 3681 , - 1348 , - 3767 , - 2490 , - 1741 , - 1520 , - 1827 , - 2662 , - 4025 , - 1692 , - 4111 , - 2834 , - 2085 , - 1864 , - 2171 , - 3006 , - 145 , - 2036 , - 231 , - 3178 , - 2429 , - 2208 , - 2515 , - 3350 , - 489 , - 2380 , - 575 , - 3522 , - 2773 , - 2552 , - 2859 , - 3694 , - 833 , - 2724 , - 919 , - 3866 , - 3117 , - 2896 , - 3203 , - 4038 , - 1177 , - 3068 , - 1263 , - 4210 , - 3461 , - 3240 , - 3547 , - 158 , - 1521 , - 3412 , - 1607 , - 330 , - 3805 , - 3584 , - 3891 , - 502 , - 1865 , - 3756 , - 1951 , - 674 , - 4149 , - 3928 , - 11 , - 846 , - 2209 , - 4100 , - 2295 , - 1018 , - 269 , - 48 , - 355 , - 1190 , - 2553 , - 220 , - 2639 , - 1362 , - 613 , - 392 , - 699 , - 1534 , - 2897 , - 564 , - 2983 , - 1706 , - 957 , - 736 , - 1043 , - 1878 , - 3241 , - 908 , - 3327 , - 2050 , - 1301 , - 1080 , - 1387 , - 2222 , - 3585 , - 1252 , - 3671 , - 2394 , - 1645 , - 1424 , - 1731 , - 2566 , - 3929 , - 1596 , - 4015 , - 2738 , - 1989 , - 1768 , - 2075 , - 2910 , - 49 , - 1940 , - 135 , - 3082 , - 2333 , - 2112 , - 2419 , - 3254 , - 393 , - 2284 , - 479 , - 3426 , - 2677 , - 2456 , - 2763 , - 3598 , - 737 , - 2628 , - 823 , - 3770 , - 3021 , - 2800 , - 3107 , - 3942 , - 1081 , - 2972 , - 1167 , - 4114 , - 3365 , - 3144 , - 3451 , - 62 , - 1425 , - 3316 , - 1511 , - 234 , - 3709 , - 3488 , - 3795 , - 406 , - 1769 , - 3660 , - 1855 , - 578 , - 4053 , - 3832 , - 4139 , - 750 , - 2113 , - 4004 , - 2199 , - 922 , - 173 , - 4176 , - 259 , - 1094 , - 2457 , - 124 , - 2543 , - 1266 , - 517 , - 296 , - 603 , - 1438 , - 2801 , - 468 , - 2887 , - 1610 , - 861 , - 640 , - 947 , - 1782 , - 3145 , - 812 , - 3231 , - 1954 , - 1205 , - 984 , - 1291 , - 2126 , - 3489 , - 1156 , - 3575 , - 2298 , - 1549 , - 1328 , - 1635 , - 2470 , - 3833 , - 1500 , - 3919 , - 2642 , - 1893 , - 1672 , - 1979 , - 2814 , - 4177 , - 1844 , - 39 , - 2986 , - 2237 , - 2016 , - 2323 , - 3158 , - 297 , - 2188 , - 383 , - 3330 , - 2581 , - 2360 , - 2667 , - 3502 , - 641 , - 2532 , - 727 , - 3674 , - 2925 , - 2704 , - 3011 , - 3846 , - 985 , - 2876 , - 1071 , - 4018 , - 3269 , - 3048 , - 3355 , - 4190 , - 1329 , - 3220 , - 1415 , - 138 , - 3613 , - 3392 , - 3699 , - 310 , - 1673 , - 3564 , - 1759 , - 482 , - 3957 , - 3736 , - 4043 , - 654 , - 2017 , - 3908 , - 2103 , - 826 , - 77 , - 4080 , - 163 , - 998 , - 2361 , - 28 , - 2447 , - 1170 , - 421 , - 200 , - 507 , - 1342 , - 2705 , - 372 , - 2791 , - 1514 , - 765 , - 544 , - 851 , - 1686 , - 3049 , - 716 , - 3135 , - 1858 , - 1109 , - 888 , - 1195 , - 2030 , - 3393 , - 1060 , - 3479 , - 2202 , - 1453 , - 1232 , - 1539 , - 2374 , - 3737 , - 1404 , - 3823 , - 2546 , - 1797 , - 1576 , - 1883 , - 2718 , - 4081 , - 1748 , - 4167 , - 2890 , - 2141 , - 1920 , - 2227 , - 3062 , - 201 , - 2092 , - 287 , - 3234 , - 2485 , - 2264 , - 2571 , - 3406 , - 545 , - 2436 , - 631 , - 3578 , - 2829 , - 2608 , - 2915 , - 3750 , - 889 , - 2780 , - 975 , - 3922 , - 3173 , - 2952 , - 3259 , - 4094 , - 1233 , - 3124 , - 1319 , - 42 , - 3517 , - 3296 , - 3603 , - 214 , - 1577 , - 3468 , - 1663 , - 386 , - 3861 , - 3640 , - 3947 , - 558 , - 1921 , - 3812 , - 2007 , - 730 , - 4205 , - 3984 , - 67 , - 902 , - 2265 , - 4156 , - 2351 , - 1074 , - 325 , - 104 , - 411 , - 1246 , - 2609 , - 276 , - 2695 , - 1418 , - 669 , - 448 , - 755 , - 1590 , - 2953 , - 620 , - 3039 , - 1762 , - 1013 , - 792 , - 1099 , - 1934 , - 3297 , - 964 , - 3383 , - 2106 , - 1357 , - 1136 , - 1443 , - 2278 , - 3641 , - 1308 , - 3727 , - 2450 , - 1701 , - 1480 , - 1787 , - 2622 , - 3985 , - 1652 , - 4071 , - 2794 , - 2045 , - 1824 , - 2131 , - 2966 , - 105 , - 1996 , - 191 , - 3138 , - 2389 , - 2168 , - 2475 , - 3310 , - 449 , - 2340 , - 535 , - 3482 , - 2733 , - 2512 , - 2819 , - 3654 , - 793 , - 2684 , - 879 , - 3826 , - 3077 , - 2856 , - 3163 , - 3998 , - 1137 , - 3028 , - 1223 , - 4170 , - 3421 , - 3200 , - 3507 , - 118 , - 1481 , - 3372 , - 1567 , - 290 , - 3765 , - 3544 , - 3851 , - 462 , - 1825 , - 3716 , - 1911 , - 634 , - 4109 , - 3888 , - 4195 , - 806 , - 2169 , - 4060 , - 2255 , - 978 , - 229 , - 8 , - 315 , - 1150 , - 2513 , - 180 , - 2599 , - 1322 , - 573 , - 352 , - 659 , - 1494 , - 2857 , - 524 , - 2943 , - 1666 , - 917 , - 696 , - 1003 , - 1838 , - 3201 , - 868 , - 3287 , - 2010 , - 1261 , - 1040 , - 1347 , - 2182 , - 3545 , - 1212 , - 3631 , - 2354 , - 1605 , - 1384 , - 1691 , - 2526 , - 3889 , - 1556 , - 3975 , - 2698 , - 1949 , - 1728 , - 2035 , - 2870 , - 9 , - 1900 , - 95 , - 3042 , - 2293 , - 2072 , - 2379 , - 3214 , - 353 , - 2244 , - 439 , - 3386 , - 2637 , - 2416 , - 2723 , - 3558 , - 697 , - 2588 , - 783 , - 3730 , - 2981 , - 2760 , - 3067 , - 3902 , - 1041 , - 2932 , - 1127 , - 4074 , - 3325 , - 3104 , - 3411 , - 22 , - 1385 , - 3276 , - 1471 , - 194 , - 3669 , - 3448 , - 3755 , - 366 , - 1729 , - 3620 , - 1815 , - 538 , - 4013 , - 3792 , - 4099 , - 710 , - 2073 , - 3964 , - 2159 , - 882 , - 133 , - 4136 , - 219 , - 1054 , - 2417 , - 84 , - 2503 , - 1226 , - 477 , - 256 , - 563 , - 1398 , - 2761 , - 428 , - 2847 , - 1570 , - 821 , - 600 , - 907 , - 1742 , - 3105 , - 772 , - 3191 , - 1914 , - 1165 , - 944 , - 1251 , - 2086 , - 3449 , - 1116 , - 3535 , - 2258 , - 1509 , - 1288 , - 1595 , - 2430 , - 3793 , - 1460 , - 3879 , - 2602 , - 1853 , - 1632 , - 1939 , - 2774 , - 4137 , - 1804 , - 4223 , - 2946 , - 2197 , - 1976 , - 2283 , - 3118 , - 257 , - 2148 , - 343 , - 3290 , - 2541 , - 2320 , - 2627 , - 3462 , - 601 , - 2492 , - 687 , - 3634 , - 2885 , - 2664 , - 2971 , - 3806 , - 945 , - 2836 , - 1031 , - 3978 , - 3229 , - 3008 , - 3315 , - 4150 , - 1289 , - 3180 , - 1375 , - 98 , - 3573 , - 3352 , - 3659 , - 270 , - 1633 , - 3524 , - 1719 , - 442 , - 3917 , - 3696 , - 4003 , - 614 , - 1977 , - 3868 , - 2063 , - 786 , - 37 , - 4040 , - 123 , - 958 , - 2321 , - 4212 , - 2407 , - 1130 , - 381 , - 160 , - 467 , - 1302 , - 2665 , - 332 , - 2751 , - 1474 , - 725 , - 504 , - 811 , - 1646 , - 3009 , - 676 , - 3095 , - 1818 , - 1069 , - 848 , - 1155 , - 1990 , - 3353 , - 1020 , - 3439 , - 2162 , - 1413 , - 1192 , - 1499 , - 2334 , - 3697 , - 1364 , - 3783 , - 2506 , - 1757 , - 1536 , - 1843 , - 2678 , - 4041 , - 1708 , - 4127 , - 2850 , - 2101 , - 1880 , - 2187 , - 3022 , - 161 , - 2052 , - 247 , - 3194 , - 2445 , - 2224 , - 2531 , - 3366 , - 505 , - 2396 , - 591 , - 3538 , - 2789 , - 2568 , - 2875 , - 3710 , - 849 , - 2740 , - 935 , - 3882 , - 3133 , - 2912 , - 3219 , - 4054 , - 1193 , - 3084 , - 1279 , - 2 , - 3477 , - 3256 , - 3563 , - 174 , - 1537 , - 3428 , - 1623 , - 346 , - 3821 , - 3600 , - 3907 , - 518 , - 1881 , - 3772 , - 1967 , - 690 , - 4165 , - 3944 , - 27 , - 862 , - 2225 , - 4116 , - 2311 , - 1034 , - 285 , - 64 , - 371 , - 1206 , - 2569 , - 236 , - 2655 , - 1378 , - 629 , - 408 , - 715 , - 1550 , - 2913 , - 580 , - 2999 , - 1722 , - 973 , - 752 , - 1059 , - 1894 , - 3257 , - 924 , - 3343 , - 2066 , - 1317 , - 1096 , - 1403 , - 2238 , - 3601 , - 1268 , - 3687 , - 2410 , - 1661 , - 1440 , - 1747 , - 2582 , - 3945 , - 1612 , - 4031 , - 2754 , - 2005 , - 1784 , - 2091 , - 2926 , - 65 , - 1956 , - 151 , - 3098 , - 2349 , - 2128 , - 2435 , - 3270 , - 409 , - 2300 , - 495 , - 3442 , - 2693 , - 2472 , - 2779 , - 3614 , - 753 , - 2644 , - 839 , - 3786 , - 3037 , - 2816 , - 3123 , - 3958 , - 1097 , - 2988 , - 1183 , - 4130 , - 3381 , - 3160 , - 3467 , - 78 , - 1441 , - 3332 , - 1527 , - 250 , - 3725 , - 3504 , - 3811 , - 422 , - 1785 , - 3676 , - 1871 , - 594 , - 4069 , - 3848 , - 4155 , - 766 , - 2129 , - 4020 , - 2215 , - 938 , - 189 , - 4192 , - 275 , - 1110 , - 2473 , - 140 , - 2559 , - 1282 , - 533 , - 312 , - 619 , - 1454 , - 2817 , - 484 , - 2903 , - 1626 , - 877 , - 656 , - 963 , - 1798 , - 3161 , - 828 , - 3247 , - 1970 , - 1221 , - 1000 , - 1307 , - 2142 , - 3505 , - 1172 , - 3591 , - 2314 , - 1565 , - 1344 , - 1651 , - 2486 , - 3849 , - 1516 , - 3935 , - 2658 , - 1909 , - 1688 , - 1995 , - 2830 , - 4193 , - 1860 , - 55 , - 3002 , - 2253 , - 2032 , - 2339 , - 3174 , - 313 , - 2204 , - 399 , - 3346 , - 2597 , - 2376 , - 2683 , - 3518 , - 657 , - 2548 , - 743 , - 3690 , - 2941 , - 2720 , - 3027 , - 3862 , - 1001 , - 2892 , - 1087 , - 4034 , - 3285 , - 3064 , - 3371 , - 4206 , - 1345 , - 3236 , - 1431 , - 154 , - 3629 , - 3408 , - 3715 , - 326 , - 1689 , - 3580 , - 1775 , - 498 , - 3973 , - 3752 , - 4059 , - 670 , - 2033 , - 3924 , - 2119 , - 842 , - 93 , - 4096 , - 179 , - 1014 , - 2377 , - 44 , - 2463 , - 1186 , - 437 , - 216 , - 523 , - 1358 , - 2721 , - 388 , - 2807 , - 1530 , - 781 , - 560 , - 867 , - 1702 , - 3065 , - 732 , - 3151 , - 1874 , - 1125 , - 904 , - 1211 , - 2046 , - 3409 , - 1076 , - 3495 , - 2218 , - 1469 , - 1248 , - 1555 , - 2390 , - 3753 , - 1420 , - 3839 , - 2562 , - 1813 , - 1592 , - 1899 , - 2734 , - 4097 , - 1764 , - 4183 , - 2906 , - 2157 , - 1936 , - 2243 , - 3078 , - 217 , - 2108 , - 303 , - 3250 , - 2501 , - 2280 , - 2587 , - 3422 , - 561 , - 2452 , - 647 , - 3594 , - 2845 , - 2624 , - 2931 , - 3766 , - 905 , - 2796 , - 991 , - 3938 , - 3189 , - 2968 , - 3275 , - 4110 , - 1249 , - 3140 , - 1335 , - 58 , - 3533 , - 3312 , - 3619 , - 230 , - 1593 , - 3484 , - 1679 , - 402 , - 3877 , - 3656 , - 3963 , - 574 , - 1937 , - 3828 , - 2023 , - 746 , - 4221 , - 4000 , - 83 , - 918 , - 2281 , - 4172 , - 2367 , - 1090 , - 341 , - 120 , - 427 , - 1262 , - 2625 , - 292 , - 2711 , - 1434 , - 685 , - 464 , - 771 , - 1606 , - 2969 , - 636 , - 3055 , - 1778 , - 1029 , - 808 , - 1115 , - 1950 , - 3313 , - 980 , - 3399 , - 2122 , - 1373 , - 1152 , - 1459 , - 2294 , - 3657 , - 1324 , - 3743 , - 2466 , - 1717 , - 1496 , - 1803 , - 2638 , - 4001 , - 1668 , - 4087 , - 2810 , - 2061 , - 1840 , - 2147 , - 2982 , - 121 , - 2012 , - 207 , - 3154 , - 2405 , - 2184 , - 2491 , - 3326 , - 465 , - 2356 , - 551 , - 3498 , - 2749 , - 2528 , - 2835 , - 3670 , - 809 , - 2700 , - 895 , - 3842 , - 3093 , - 2872 , - 3179 , - 4014 , - 1153 , - 3044 , - 1239 , - 4186 , - 3437 , - 3216 , - 3523 , - 134 , - 1497 , - 3388 , - 1583 , - 306 , - 3781 , - 3560 , - 3867 , - 478 , - 1841 , - 3732 , - 1927 , - 650 , - 4125 , - 3904 , - 4211 , - 822 , - 2185 , - 4076 , - 2271 , - 994 , - 245 , - 24 , - 331 , - 1166 , - 2529 , - 196 , - 2615 , - 1338 , - 589 , - 368 , - 675 , - 1510 , - 2873 , - 540 , - 2959 , - 1682 , - 933 , - 712 , - 1019 , - 1854 , - 3217 , - 884 , - 3303 , - 2026 , - 1277 , - 1056 , - 1363 , - 2198 , - 3561 , - 1228 , - 3647 , - 2370 , - 1621 , - 1400 , - 1707 , - 2542 , - 3905 , - 1572 , - 3991 , - 2714 , - 1965 , - 1744 , - 2051 , - 2886 , - 25 , - 1916 , - 111 , - 3058 , - 2309 , - 2088 , - 2395 , - 3230 , - 369 , - 2260 , - 455 , - 3402 , - 2653 , - 2432 , - 2739 , - 3574 , - 713 , - 2604 , - 799 , - 3746 , - 2997 , - 2776 , - 3083 , - 3918 , - 1057 , - 2948 , - 1143 , - 4090 , - 3341 , - 3120 , - 3427 , - 38 , - 1401 , - 3292 , - 1487 , - 210 , - 3685 , - 3464 , - 3771 , - 382 , - 1745 , - 3636 , - 1831 , - 554 , - 4029 , - 3808 , - 4115 , - 726 , - 2089 , - 3980 , - 2175 , - 898 , - 149 , - 4152 , - 235 , - 1070 , - 2433 , - 100 , - 2519 , - 1242 , - 493 , - 272 , - 579 , - 1414 , - 2777 , - 444 , - 2863 , - 1586 , - 837 , - 616 , - 923 , - 1758 , - 3121 , - 788 , - 3207 , - 1930 , - 1181 , - 960 , - 1267 , - 2102 , - 3465 , - 1132 , - 3551 , - 2274 , - 1525 , - 1304 , - 1611 , - 2446 , - 3809 , - 1476 , - 3895 , - 2618 , - 1869 , - 1648 , - 1955 , - 2790 , - 4153 , - 1820 , - 15 , - 2962 , - 2213 , - 1992 , - 2299 , - 3134 , - 273 , - 2164 , - 359 , - 3306 , - 2557 , - 2336 , - 2643 , - 3478 , - 617 , - 2508 , - 703 , - 3650 , - 2901 , - 2680 , - 2987 , - 3822 , - 961 , - 2852 , - 1047 , - 3994 , - 3245 , - 3024 , - 3331 , - 4166 , - 1305 , - 3196 , - 1391 , - 114 , - 3589 , - 3368 , - 3675 , - 286 , - 1649 , - 3540 , - 1735 , - 458 , - 3933 , - 3712 , - 4019 , - 630 , - 1993 , - 3884 , - 2079 , - 802 , - 53 , - 4056 , - 139 , - 974 , - 2337 , - 4 , - 2423 , - 1146 , - 397 , - 176 , - 483 , - 1318 , - 2681 , - 348 , - 2767 , - 1490 , - 741 , - 520 , - 827 , - 1662 , - 3025 , - 692 , - 3111 , - 1834 , - 1085 , - 864 , - 1171 , - 2006 , - 3369 , - 1036 , - 3455 , - 2178 , - 1429 , - 1208 , - 1515 , - 2350 , - 3713 , - 1380 , - 3799 , - 2522 , - 1773 , - 1552 , - 1859 , - 2694 , - 4057 , - 1724 , - 4143 , - 2866 , - 2117 , - 1896 , - 2203 , - 3038 , - 177 , - 2068 , - 263 , - 3210 , - 2461 , - 2240 , - 2547 , - 3382 , - 521 , - 2412 , - 607 , - 3554 , - 2805 , - 2584 , - 2891 , - 3726 , - 865 , - 2756 , - 951 , - 3898 , - 3149 , - 2928 , - 3235 , - 4070 , - 1209 , - 3100 , - 1295 , - 18 , - 3493 , - 3272 , - 3579 , - 190 , - 1553 , - 3444 , - 1639 , - 362 , - 3837 , - 3616 , - 3923 , - 534 , - 1897 , - 3788 , - 1983 , - 706 , - 4181 , - 3960 , - 43 , - 878 , - 2241 , - 4132 , - 2327 , - 1050 , - 301 , - 80 , - 387 , - 1222 , - 2585 , - 252 , - 2671 , - 1394 , - 645 , - 424 , - 731 , - 1566 , - 2929 , - 596 , - 3015 , - 1738 , - 989 , - 768 , - 1075 , - 1910 , - 3273 , - 940 , - 3359 , - 2082 , - 1333 , - 1112 , - 1419 , - 2254 , - 3617 , - 1284 , - 3703 , - 2426 , - 1677 , - 1456 , - 1763 , - 2598 , - 3961 , - 1628 , - 4047 , - 2770 , - 2021 , - 1800 , - 2107 , - 2942 , - 81 , - 1972 , - 167 , - 3114 , - 2365 , - 2144 , - 2451 , - 3286 , - 425 , - 2316 , - 511 , - 3458 , - 2709 , - 2488 , - 2795 , - 3630 , - 769 , - 2660 , - 855 , - 3802 , - 3053 , - 2832 , - 3139 , - 3974 , - 1113 , - 3004 , - 1199 , - 4146 , - 3397 , - 3176 , - 3483 , - 94 , - 1457 , - 3348 , - 1543 , - 266 , - 3741 , - 3520 , - 3827 , - 438 , - 1801 , - 3692 , - 1887 , - 610 , - 4085 , - 3864 , - 4171 , - 782 , - 2145 , - 4036 , - 2231 , - 954 , - 205 , - 4208 , - 291 , - 1126 , - 2489 , - 156 , - 2575 , - 1298 , - 549 , - 328 , - 635 , - 1470 , - 2833 , - 500 , - 2919 , - 1642 , - 893 , - 672 , - 979 , - 1814 , - 3177 , - 844 , - 3263 , - 1986 , - 1237 , - 1016 , - 1323 , - 2158 , - 3521 , - 1188 , - 3607 , - 2330 , - 1581 , - 1360 , - 1667 , - 2502 , - 3865 , - 1532 , - 3951 , - 2674 , - 1925 , - 1704 , - 2011 , - 2846 , - 4209 , - 1876 , - 71 , - 3018 , - 2269 , - 2048 , - 2355 , - 3190 , - 329 , - 2220 , - 415 , - 3362 , - 2613 , - 2392 , - 2699 , - 3534 , - 673 , - 2564 , - 759 , - 3706 , - 2957 , - 2736 , - 3043 , - 3878 , - 1017 , - 2908 , - 1103 , - 4050 , - 3301 , - 3080 , - 3387 , - 4222 , - 1361 , - 3252 , - 1447 , - 170 , - 3645 , - 3424 , - 3731 , - 342 , - 1705 , - 3596 , - 1791 , - 514 , - 3989 , - 3768 , - 4075 , - 686 , - 2049 , - 3940 , - 2135 , - 858 , - 109 , - 4112 , - 195 , - 1030 , - 2393 , - 60 , - 2479 , - 1202 , - 453 , - 232 , - 539 , - 1374 , - 2737 , - 404 , - 2823 , - 1546 , - 797 , - 576 , - 883 , - 1718 , - 3081 , - 748 , - 3167 , - 1890 , - 1141 , - 920 , - 1227 , - 2062 , - 3425 , - 1092 , - 3511 , - 2234 , - 1485 , - 1264 , - 1571 , - 2406 , - 3769 , - 1436 , - 3855 , - 2578 , - 1829 , - 1608 , - 1915 , - 2750 , - 4113 , - 1780 , - 4199 , - 2922 , - 2173 , - 1952 , - 2259 , - 3094 , - 233 , - 2124 , - 319 , - 3266 , - 2517 , - 2296 , - 2603 , - 3438 , - 577 , - 2468 , - 663 , - 3610 , - 2861 , - 2640 , - 2947 , - 3782 , - 921 , - 2812 , - 1007 , - 3954 , - 3205 , - 2984 , - 3291 , - 4126 , - 1265 , - 3156 , - 1351 , - 74 , - 3549 , - 3328 , - 3635 , - 246 , - 1609 , - 3500 , - 1695 , - 418 , - 3893 , - 3672 , - 3979 , - 590 , - 1953 , - 3844 , - 2039 , - 762 , - 13 , - 4016 , - 99 , - 934 , - 2297 , - 4188 , - 2383 , - 1106 , - 357 , - 136 , - 443 , - 1278 , - 2641 , - 308 , - 2727 , - 1450 , - 701 , - 480 , - 787 , - 1622 , - 2985 , - 652 , - 3071 , - 1794 , - 1045 , - 824 , - 1131 , - 1966 , - 3329 , - 996 , - 3415 , - 2138 , - 1389 , - 1168 , - 1475 , - 2310 , - 3673 , - 1340 , - 3759 , - 2482 , - 1733 , - 1512 , - 1819 , - 2654 , - 4017 , - 1684 , - 4103 , - 2826 , - 2077 , - 1856 , - 2163 , - 2998 , - 137 , - 2028 , - 223 , - 3170 , - 2421 , - 2200 , - 2507 , - 3342 , - 481 , - 2372 , - 567 , - 3514 , - 2765 , - 2544 , - 2851 , - 3686 , - 825 , - 2716 , - 911 , - 3858 , - 3109 , - 2888 , - 3195 , - 4030 , - 1169 , - 3060 , - 1255 , - 4202 , - 3453 , - 3232 , - 3539 , - 150 , - 1513 , - 3404 , - 1599 , - 322 , - 3797 , - 3576 , - 3883 , - 494 , - 1857 , - 3748 , - 1943 , - 666 , - 4141 , - 3920 , - 3 , - 838 , - 2201 , - 4092 , - 2287 , - 1010 , - 261 , - 40 , - 347 , - 1182 , - 2545 , - 212 , - 2631 , - 1354 , - 605 , - 384 , - 691 , - 1526 , - 2889 , - 556 , - 2975 , - 1698 , - 949 , - 728 , - 1035 , - 1870 , - 3233 , - 900 , - 3319 , - 2042 , - 1293 , - 1072 , - 1379 , - 2214 , - 3577 , - 1244 , - 3663 , - 2386 , - 1637 , - 1416 , - 1723 , - 2558 , - 3921 , - 1588 , - 4007 , - 2730 , - 1981 , - 1760 , - 2067 , - 2902 , - 41 , - 1932 , - 127 , - 3074 , - 2325 , - 2104 , - 2411 , - 3246 , - 385 , - 2276 , - 471 , - 3418 , - 2669 , - 2448 , - 2755 , - 3590 , - 729 , - 2620 , - 815 , - 3762 , - 3013 , - 2792 , - 3099 , - 3934 , - 1073 , - 2964 , - 1159 , - 4106 , - 3357 , - 3136 , - 3443 , - 54 , - 1417 , - 3308 , - 1503 , - 226 , - 3701 , - 3480 , - 3787 , - 398 , - 1761 , - 3652 , - 1847 , - 570 , - 4045 , - 3824 , - 4131 , - 742 , - 2105 , - 3996 , - 2191 , - 914 , - 165 , - 4168 , - 251 , - 1086 , - 2449 , - 116 , - 2535 , - 1258 , - 509 , - 288 , - 595 , - 1430 , - 2793 , - 460 , - 2879 , - 1602 , - 853 , - 632 , - 939 , - 1774 , - 3137 , - 804 , - 3223 , - 1946 , - 1197 , - 976 , - 1283 , - 2118 , - 3481 , - 1148 , - 3567 , - 2290 , - 1541 , - 1320 , - 1627 , - 2462 , - 3825 , - 1492 , - 3911 , - 2634 , - 1885 , - 1664 , - 1971 , - 2806 , - 4169 , - 1836 , - 31 , - 2978 , - 2229 , - 2008 , - 2315 , - 3150 , - 289 , - 2180 , - 375 , - 3322 , - 2573 , - 2352 , - 2659 , - 3494 , - 633 , - 2524 , - 719 , - 3666 , - 2917 , - 2696 , - 3003 , - 3838 , - 977 , - 2868 , - 1063 , - 4010 , - 3261 , - 3040 , - 3347 , - 4182 , - 1321 , - 3212 , - 1407 , - 130 , - 3605 , - 3384 , - 3691 , - 302 , - 1665 , - 3556 , - 1751 , - 474 , - 3949 , - 3728 , - 4035 , - 646 , - 2009 , - 3900 , - 2095 , - 818 , - 69 , - 4072 , - 155 , - 990 , - 2353 , - 20 , - 2439 , - 1162 , - 413 , - 192 , - 499 , - 1334 , - 2697 , - 364 , - 2783 , - 1506 , - 757 , - 536 , - 843 , - 1678 , - 3041 , - 708 , - 3127 , - 1850 , - 1101 , - 880 , - 1187 , - 2022 , - 3385 , - 1052 , - 3471 , - 2194 , - 1445 , - 1224 , - 1531 , - 2366 , - 3729 , - 1396 , - 3815 , - 2538 , - 1789 , - 1568 , - 1875 , - 2710 , - 4073 , - 1740 , - 4159 , - 2882 , - 2133 , - 1912 , - 2219 , - 3054 , - 193 , - 2084 , - 279 , - 3226 , - 2477 , - 2256 , - 2563 , - 3398 , - 537 , - 2428 , - 623 , - 3570 , - 2821 , - 2600 , - 2907 , - 3742 , - 881 , - 2772 , - 967 , - 3914 , - 3165 , - 2944 , - 3251 , - 4086 , - 1225 , - 3116 , - 1311 , - 34 , - 3509 , - 3288 , - 3595 , - 206 , - 1569 , - 3460 , - 1655 , - 378 , - 3853 , - 3632 , - 3939 , - 550 , - 1913 , - 3804 , - 1999 , - 722 , - 4197 , - 3976 , - 59 , - 894 , - 2257 , - 4148 , - 2343 , - 1066 , - 317 , - 96 , - 403 , - 1238 , - 2601 , - 268 , - 2687 , - 1410 , - 661 , - 440 , - 747 , - 1582 , - 2945 , - 612 , - 3031 , - 1754 , - 1005 , - 784 , - 1091 , - 1926 , - 3289 , - 956 , - 3375 , - 2098 , - 1349 , - 1128 , - 1435 , - 2270 , - 3633 , - 1300 , - 3719 , - 2442 , - 1693 , - 1472 , - 1779 , - 2614 , - 3977 , - 1644 , - 4063 , - 2786 , - 2037 , - 1816 , - 2123 , - 2958 , - 97 , - 1988 , - 183 , - 3130 , - 2381 , - 2160 , - 2467 , - 3302 , - 441 , - 2332 , - 527 , - 3474 , - 2725 , - 2504 , - 2811 , - 3646 , - 785 , - 2676 , - 871 , - 3818 , - 3069 , - 2848 , - 3155 , - 3990 , - 1129 , - 3020 , - 1215 , - 4162 , - 3413 , - 3192 , - 3499 , - 110 , - 1473 , - 3364 , - 1559 , - 282 , - 3757 , - 3536 , - 3843 , - 454 , - 1817 , - 3708 , - 1903 , - 626 , - 4101 , - 3880 , - 4187 , - 798 , - 2161 , - 4052 , - 2247 , - 970 , - 221 , - 0 , - 167 , - 602 , - 1305 , - 2276 , - 3515 , - 734 , - 2509 , - 264 , - 2575 , - 866 , - 3713 , - 2540 , - 1635 , - 998 , - 629 , - 528 , - 695 , - 1130 , - 1833 , - 2804 , - 4043 , - 1262 , - 3037 , - 792 , - 3103 , - 1394 , - 4241 , - 3068 , - 2163 , - 1526 , - 1157 , - 1056 , - 1223 , - 1658 , - 2361 , - 3332 , - 283 , - 1790 , - 3565 , - 1320 , - 3631 , - 1922 , - 481 , - 3596 , - 2691 , - 2054 , - 1685 , - 1584 , - 1751 , - 2186 , - 2889 , - 3860 , - 811 , - 2318 , - 4093 , - 1848 , - 4159 , - 2450 , - 1009 , - 4124 , - 3219 , - 2582 , - 2213 , - 2112 , - 2279 , - 2714 , - 3417 , - 100 , - 1339 , - 2846 , - 333 , - 2376 , - 399 , - 2978 , - 1537 , - 364 , - 3747 , - 3110 , - 2741 , - 2640 , - 2807 , - 3242 , - 3945 , - 628 , - 1867 , - 3374 , - 861 , - 2904 , - 927 , - 3506 , - 2065 , - 892 , - 4275 , - 3638 , - 3269 , - 3168 , - 3335 , - 3770 , - 185 , - 1156 , - 2395 , - 3902 , - 1389 , - 3432 , - 1455 , - 4034 , - 2593 , - 1420 , - 515 , - 4166 , - 3797 , - 3696 , - 3863 , - 10 , - 713 , - 1684 , - 2923 , - 142 , - 1917 , - 3960 , - 1983 , - 274 , - 3121 , - 1948 , - 1043 , - 406 , - 37 , - 4224 , - 103 , - 538 , - 1241 , - 2212 , - 3451 , - 670 , - 2445 , - 200 , - 2511 , - 802 , - 3649 , - 2476 , - 1571 , - 934 , - 565 , - 464 , - 631 , - 1066 , - 1769 , - 2740 , - 3979 , - 1198 , - 2973 , - 728 , - 3039 , - 1330 , - 4177 , - 3004 , - 2099 , - 1462 , - 1093 , - 992 , - 1159 , - 1594 , - 2297 , - 3268 , - 219 , - 1726 , - 3501 , - 1256 , - 3567 , - 1858 , - 417 , - 3532 , - 2627 , - 1990 , - 1621 , - 1520 , - 1687 , - 2122 , - 2825 , - 3796 , - 747 , - 2254 , - 4029 , - 1784 , - 4095 , - 2386 , - 945 , - 4060 , - 3155 , - 2518 , - 2149 , - 2048 , - 2215 , - 2650 , - 3353 , - 36 , - 1275 , - 2782 , - 269 , - 2312 , - 335 , - 2914 , - 1473 , - 300 , - 3683 , - 3046 , - 2677 , - 2576 , - 2743 , - 3178 , - 3881 , - 564 , - 1803 , - 3310 , - 797 , - 2840 , - 863 , - 3442 , - 2001 , - 828 , - 4211 , - 3574 , - 3205 , - 3104 , - 3271 , - 3706 , - 121 , - 1092 , - 2331 , - 3838 , - 1325 , - 3368 , - 1391 , - 3970 , - 2529 , - 1356 , - 451 , - 4102 , - 3733 , - 3632 , - 3799 , - 4234 , - 649 , - 1620 , - 2859 , - 78 , - 1853 , - 3896 , - 1919 , - 210 , - 3057 , - 1884 , - 979 , - 342 , - 4261 , - 4160 , - 39 , - 474 , - 1177 , - 2148 , - 3387 , - 606 , - 2381 , - 136 , - 2447 , - 738 , - 3585 , - 2412 , - 1507 , - 870 , - 501 , - 400 , - 567 , - 1002 , - 1705 , - 2676 , - 3915 , - 1134 , - 2909 , - 664 , - 2975 , - 1266 , - 4113 , - 2940 , - 2035 , - 1398 , - 1029 , - 928 , - 1095 , - 1530 , - 2233 , - 3204 , - 155 , - 1662 , - 3437 , - 1192 , - 3503 , - 1794 , - 353 , - 3468 , - 2563 , - 1926 , - 1557 , - 1456 , - 1623 , - 2058 , - 2761 , - 3732 , - 683 , - 2190 , - 3965 , - 1720 , - 4031 , - 2322 , - 881 , - 3996 , - 3091 , - 2454 , - 2085 , - 1984 , - 2151 , - 2586 , - 3289 , - 4260 , - 1211 , - 2718 , - 205 , - 2248 , - 271 , - 2850 , - 1409 , - 236 , - 3619 , - 2982 , - 2613 , - 2512 , - 2679 , - 3114 , - 3817 , - 500 , - 1739 , - 3246 , - 733 , - 2776 , - 799 , - 3378 , - 1937 , - 764 , - 4147 , - 3510 , - 3141 , - 3040 , - 3207 , - 3642 , - 57 , - 1028 , - 2267 , - 3774 , - 1261 , - 3304 , - 1327 , - 3906 , - 2465 , - 1292 , - 387 , - 4038 , - 3669 , - 3568 , - 3735 , - 4170 , - 585 , - 1556 , - 2795 , - 14 , - 1789 , - 3832 , - 1855 , - 146 , - 2993 , - 1820 , - 915 , - 278 , - 4197 , - 4096 , - 4263 , - 410 , - 1113 , - 2084 , - 3323 , - 542 , - 2317 , - 72 , - 2383 , - 674 , - 3521 , - 2348 , - 1443 , - 806 , - 437 , - 336 , - 503 , - 938 , - 1641 , - 2612 , - 3851 , - 1070 , - 2845 , - 600 , - 2911 , - 1202 , - 4049 , - 2876 , - 1971 , - 1334 , - 965 , - 864 , - 1031 , - 1466 , - 2169 , - 3140 , - 91 , - 1598 , - 3373 , - 1128 , - 3439 , - 1730 , - 289 , - 3404 , - 2499 , - 1862 , - 1493 , - 1392 , - 1559 , - 1994 , - 2697 , - 3668 , - 619 , - 2126 , - 3901 , - 1656 , - 3967 , - 2258 , - 817 , - 3932 , - 3027 , - 2390 , - 2021 , - 1920 , - 2087 , - 2522 , - 3225 , - 4196 , - 1147 , - 2654 , - 141 , - 2184 , - 207 , - 2786 , - 1345 , - 172 , - 3555 , - 2918 , - 2549 , - 2448 , - 2615 , - 3050 , - 3753 , - 436 , - 1675 , - 3182 , - 669 , - 2712 , - 735 , - 3314 , - 1873 , - 700 , - 4083 , - 3446 , - 3077 , - 2976 , - 3143 , - 3578 , - 4281 , - 964 , - 2203 , - 3710 , - 1197 , - 3240 , - 1263 , - 3842 , - 2401 , - 1228 , - 323 , - 3974 , - 3605 , - 3504 , - 3671 , - 4106 , - 521 , - 1492 , - 2731 , - 4238 , - 1725 , - 3768 , - 1791 , - 82 , - 2929 , - 1756 , - 851 , - 214 , - 4133 , - 4032 , - 4199 , - 346 , - 1049 , - 2020 , - 3259 , - 478 , - 2253 , - 8 , - 2319 , - 610 , - 3457 , - 2284 , - 1379 , - 742 , - 373 , - 272 , - 439 , - 874 , - 1577 , - 2548 , - 3787 , - 1006 , - 2781 , - 536 , - 2847 , - 1138 , - 3985 , - 2812 , - 1907 , - 1270 , - 901 , - 800 , - 967 , - 1402 , - 2105 , - 3076 , - 27 , - 1534 , - 3309 , - 1064 , - 3375 , - 1666 , - 225 , - 3340 , - 2435 , - 1798 , - 1429 , - 1328 , - 1495 , - 1930 , - 2633 , - 3604 , - 555 , - 2062 , - 3837 , - 1592 , - 3903 , - 2194 , - 753 , - 3868 , - 2963 , - 2326 , - 1957 , - 1856 , - 2023 , - 2458 , - 3161 , - 4132 , - 1083 , - 2590 , - 77 , - 2120 , - 143 , - 2722 , - 1281 , - 108 , - 3491 , - 2854 , - 2485 , - 2384 , - 2551 , - 2986 , - 3689 , - 372 , - 1611 , - 3118 , - 605 , - 2648 , - 671 , - 3250 , - 1809 , - 636 , - 4019 , - 3382 , - 3013 , - 2912 , - 3079 , - 3514 , - 4217 , - 900 , - 2139 , - 3646 , - 1133 , - 3176 , - 1199 , - 3778 , - 2337 , - 1164 , - 259 , - 3910 , - 3541 , - 3440 , - 3607 , - 4042 , - 457 , - 1428 , - 2667 , - 4174 , - 1661 , - 3704 , - 1727 , - 18 , - 2865 , - 1692 , - 787 , - 150 , - 4069 , - 3968 , - 4135 , - 282 , - 985 , - 1956 , - 3195 , - 414 , - 2189 , - 4232 , - 2255 , - 546 , - 3393 , - 2220 , - 1315 , - 678 , - 309 , - 208 , - 375 , - 810 , - 1513 , - 2484 , - 3723 , - 942 , - 2717 , - 472 , - 2783 , - 1074 , - 3921 , - 2748 , - 1843 , - 1206 , - 837 , - 736 , - 903 , - 1338 , - 2041 , - 3012 , - 4251 , - 1470 , - 3245 , - 1000 , - 3311 , - 1602 , - 161 , - 3276 , - 2371 , - 1734 , - 1365 , - 1264 , - 1431 , - 1866 , - 2569 , - 3540 , - 491 , - 1998 , - 3773 , - 1528 , - 3839 , - 2130 , - 689 , - 3804 , - 2899 , - 2262 , - 1893 , - 1792 , - 1959 , - 2394 , - 3097 , - 4068 , - 1019 , - 2526 , - 13 , - 2056 , - 79 , - 2658 , - 1217 , - 44 , - 3427 , - 2790 , - 2421 , - 2320 , - 2487 , - 2922 , - 3625 , - 308 , - 1547 , - 3054 , - 541 , - 2584 , - 607 , - 3186 , - 1745 , - 572 , - 3955 , - 3318 , - 2949 , - 2848 , - 3015 , - 3450 , - 4153 , - 836 , - 2075 , - 3582 , - 1069 , - 3112 , - 1135 , - 3714 , - 2273 , - 1100 , - 195 , - 3846 , - 3477 , - 3376 , - 3543 , - 3978 , - 393 , - 1364 , - 2603 , - 4110 , - 1597 , - 3640 , - 1663 , - 4242 , - 2801 , - 1628 , - 723 , - 86 , - 4005 , - 3904 , - 4071 , - 218 , - 921 , - 1892 , - 3131 , - 350 , - 2125 , - 4168 , - 2191 , - 482 , - 3329 , - 2156 , - 1251 , - 614 , - 245 , - 144 , - 311 , - 746 , - 1449 , - 2420 , - 3659 , - 878 , - 2653 , - 408 , - 2719 , - 1010 , - 3857 , - 2684 , - 1779 , - 1142 , - 773 , - 672 , - 839 , - 1274 , - 1977 , - 2948 , - 4187 , - 1406 , - 3181 , - 936 , - 3247 , - 1538 , - 97 , - 3212 , - 2307 , - 1670 , - 1301 , - 1200 , - 1367 , - 1802 , - 2505 , - 3476 , - 427 , - 1934 , - 3709 , - 1464 , - 3775 , - 2066 , - 625 , - 3740 , - 2835 , - 2198 , - 1829 , - 1728 , - 1895 , - 2330 , - 3033 , - 4004 , - 955 , - 2462 , - 4237 , - 1992 , - 15 , - 2594 , - 1153 , - 4268 , - 3363 , - 2726 , - 2357 , - 2256 , - 2423 , - 2858 , - 3561 , - 244 , - 1483 , - 2990 , - 477 , - 2520 , - 543 , - 3122 , - 1681 , - 508 , - 3891 , - 3254 , - 2885 , - 2784 , - 2951 , - 3386 , - 4089 , - 772 , - 2011 , - 3518 , - 1005 , - 3048 , - 1071 , - 3650 , - 2209 , - 1036 , - 131 , - 3782 , - 3413 , - 3312 , - 3479 , - 3914 , - 329 , - 1300 , - 2539 , - 4046 , - 1533 , - 3576 , - 1599 , - 4178 , - 2737 , - 1564 , - 659 , - 22 , - 3941 , - 3840 , - 4007 , - 154 , - 857 , - 1828 , - 3067 , - 286 , - 2061 , - 4104 , - 2127 , - 418 , - 3265 , - 2092 , - 1187 , - 550 , - 181 , - 80 , - 247 , - 682 , - 1385 , - 2356 , - 3595 , - 814 , - 2589 , - 344 , - 2655 , - 946 , - 3793 , - 2620 , - 1715 , - 1078 , - 709 , - 608 , - 775 , - 1210 , - 1913 , - 2884 , - 4123 , - 1342 , - 3117 , - 872 , - 3183 , - 1474 , - 33 , - 3148 , - 2243 , - 1606 , - 1237 , - 1136 , - 1303 , - 1738 , - 2441 , - 3412 , - 363 , - 1870 , - 3645 , - 1400 , - 3711 , - 2002 , - 561 , - 3676 , - 2771 , - 2134 , - 1765 , - 1664 , - 1831 , - 2266 , - 2969 , - 3940 , - 891 , - 2398 , - 4173 , - 1928 , - 4239 , - 2530 , - 1089 , - 4204 , - 3299 , - 2662 , - 2293 , - 2192 , - 2359 , - 2794 , - 3497 , - 180 , - 1419 , - 2926 , - 413 , - 2456 , - 479 , - 3058 , - 1617 , - 444 , - 3827 , - 3190 , - 2821 , - 2720 , - 2887 , - 3322 , - 4025 , - 708 , - 1947 , - 3454 , - 941 , - 2984 , - 1007 , - 3586 , - 2145 , - 972 , - 67 , - 3718 , - 3349 , - 3248 , - 3415 , - 3850 , - 265 , - 1236 , - 2475 , - 3982 , - 1469 , - 3512 , - 1535 , - 4114 , - 2673 , - 1500 , - 595 , - 4246 , - 3877 , - 3776 , - 3943 , - 90 , - 793 , - 1764 , - 3003 , - 222 , - 1997 , - 4040 , - 2063 , - 354 , - 3201 , - 2028 , - 1123 , - 486 , - 117 , - 16 , - 183 , - 618 , - 1321 , - 2292 , - 3531 , - 750 , - 2525 , - 280 , - 2591 , - 882 , - 3729 , - 2556 , - 1651 , - 1014 , - 645 , - 544 , - 711 , - 1146 , - 1849 , - 2820 , - 4059 , - 1278 , - 3053 , - 808 , - 3119 , - 1410 , - 4257 , - 3084 , - 2179 , - 1542 , - 1173 , - 1072 , - 1239 , - 1674 , - 2377 , - 3348 , - 299 , - 1806 , - 3581 , - 1336 , - 3647 , - 1938 , - 497 , - 3612 , - 2707 , - 2070 , - 1701 , - 1600 , - 1767 , - 2202 , - 2905 , - 3876 , - 827 , - 2334 , - 4109 , - 1864 , - 4175 , - 2466 , - 1025 , - 4140 , - 3235 , - 2598 , - 2229 , - 2128 , - 2295 , - 2730 , - 3433 , - 116 , - 1355 , - 2862 , - 349 , - 2392 , - 415 , - 2994 , - 1553 , - 380 , - 3763 , - 3126 , - 2757 , - 2656 , - 2823 , - 3258 , - 3961 , - 644 , - 1883 , - 3390 , - 877 , - 2920 , - 943 , - 3522 , - 2081 , - 908 , - 3 , - 3654 , - 3285 , - 3184 , - 3351 , - 3786 , - 201 , - 1172 , - 2411 , - 3918 , - 1405 , - 3448 , - 1471 , - 4050 , - 2609 , - 1436 , - 531 , - 4182 , - 3813 , - 3712 , - 3879 , - 26 , - 729 , - 1700 , - 2939 , - 158 , - 1933 , - 3976 , - 1999 , - 290 , - 3137 , - 1964 , - 1059 , - 422 , - 53 , - 4240 , - 119 , - 554 , - 1257 , - 2228 , - 3467 , - 686 , - 2461 , - 216 , - 2527 , - 818 , - 3665 , - 2492 , - 1587 , - 950 , - 581 , - 480 , - 647 , - 1082 , - 1785 , - 2756 , - 3995 , - 1214 , - 2989 , - 744 , - 3055 , - 1346 , - 4193 , - 3020 , - 2115 , - 1478 , - 1109 , - 1008 , - 1175 , - 1610 , - 2313 , - 3284 , - 235 , - 1742 , - 3517 , - 1272 , - 3583 , - 1874 , - 433 , - 3548 , - 2643 , - 2006 , - 1637 , - 1536 , - 1703 , - 2138 , - 2841 , - 3812 , - 763 , - 2270 , - 4045 , - 1800 , - 4111 , - 2402 , - 961 , - 4076 , - 3171 , - 2534 , - 2165 , - 2064 , - 2231 , - 2666 , - 3369 , - 52 , - 1291 , - 2798 , - 285 , - 2328 , - 351 , - 2930 , - 1489 , - 316 , - 3699 , - 3062 , - 2693 , - 2592 , - 2759 , - 3194 , - 3897 , - 580 , - 1819 , - 3326 , - 813 , - 2856 , - 879 , - 3458 , - 2017 , - 844 , - 4227 , - 3590 , - 3221 , - 3120 , - 3287 , - 3722 , - 137 , - 1108 , - 2347 , - 3854 , - 1341 , - 3384 , - 1407 , - 3986 , - 2545 , - 1372 , - 467 , - 4118 , - 3749 , - 3648 , - 3815 , - 4250 , - 665 , - 1636 , - 2875 , - 94 , - 1869 , - 3912 , - 1935 , - 226 , - 3073 , - 1900 , - 995 , - 358 , - 4277 , - 4176 , - 55 , - 490 , - 1193 , - 2164 , - 3403 , - 622 , - 2397 , - 152 , - 2463 , - 754 , - 3601 , - 2428 , - 1523 , - 886 , - 517 , - 416 , - 583 , - 1018 , - 1721 , - 2692 , - 3931 , - 1150 , - 2925 , - 680 , - 2991 , - 1282 , - 4129 , - 2956 , - 2051 , - 1414 , - 1045 , - 944 , - 1111 , - 1546 , - 2249 , - 3220 , - 171 , - 1678 , - 3453 , - 1208 , - 3519 , - 1810 , - 369 , - 3484 , - 2579 , - 1942 , - 1573 , - 1472 , - 1639 , - 2074 , - 2777 , - 3748 , - 699 , - 2206 , - 3981 , - 1736 , - 4047 , - 2338 , - 897 , - 4012 , - 3107 , - 2470 , - 2101 , - 2000 , - 2167 , - 2602 , - 3305 , - 4276 , - 1227 , - 2734 , - 221 , - 2264 , - 287 , - 2866 , - 1425 , - 252 , - 3635 , - 2998 , - 2629 , - 2528 , - 2695 , - 3130 , - 3833 , - 516 , - 1755 , - 3262 , - 749 , - 2792 , - 815 , - 3394 , - 1953 , - 780 , - 4163 , - 3526 , - 3157 , - 3056 , - 3223 , - 3658 , - 73 , - 1044 , - 2283 , - 3790 , - 1277 , - 3320 , - 1343 , - 3922 , - 2481 , - 1308 , - 403 , - 4054 , - 3685 , - 3584 , - 3751 , - 4186 , - 601 , - 1572 , - 2811 , - 30 , - 1805 , - 3848 , - 1871 , - 162 , - 3009 , - 1836 , - 931 , - 294 , - 4213 , - 4112 , - 4279 , - 426 , - 1129 , - 2100 , - 3339 , - 558 , - 2333 , - 88 , - 2399 , - 690 , - 3537 , - 2364 , - 1459 , - 822 , - 453 , - 352 , - 519 , - 954 , - 1657 , - 2628 , - 3867 , - 1086 , - 2861 , - 616 , - 2927 , - 1218 , - 4065 , - 2892 , - 1987 , - 1350 , - 981 , - 880 , - 1047 , - 1482 , - 2185 , - 3156 , - 107 , - 1614 , - 3389 , - 1144 , - 3455 , - 1746 , - 305 , - 3420 , - 2515 , - 1878 , - 1509 , - 1408 , - 1575 , - 2010 , - 2713 , - 3684 , - 635 , - 2142 , - 3917 , - 1672 , - 3983 , - 2274 , - 833 , - 3948 , - 3043 , - 2406 , - 2037 , - 1936 , - 2103 , - 2538 , - 3241 , - 4212 , - 1163 , - 2670 , - 157 , - 2200 , - 223 , - 2802 , - 1361 , - 188 , - 3571 , - 2934 , - 2565 , - 2464 , - 2631 , - 3066 , - 3769 , - 452 , - 1691 , - 3198 , - 685 , - 2728 , - 751 , - 3330 , - 1889 , - 716 , - 4099 , - 3462 , - 3093 , - 2992 , - 3159 , - 3594 , - 9 , - 980 , - 2219 , - 3726 , - 1213 , - 3256 , - 1279 , - 3858 , - 2417 , - 1244 , - 339 , - 3990 , - 3621 , - 3520 , - 3687 , - 4122 , - 537 , - 1508 , - 2747 , - 4254 , - 1741 , - 3784 , - 1807 , - 98 , - 2945 , - 1772 , - 867 , - 230 , - 4149 , - 4048 , - 4215 , - 362 , - 1065 , - 2036 , - 3275 , - 494 , - 2269 , - 24 , - 2335 , - 626 , - 3473 , - 2300 , - 1395 , - 758 , - 389 , - 288 , - 455 , - 890 , - 1593 , - 2564 , - 3803 , - 1022 , - 2797 , - 552 , - 2863 , - 1154 , - 4001 , - 2828 , - 1923 , - 1286 , - 917 , - 816 , - 983 , - 1418 , - 2121 , - 3092 , - 43 , - 1550 , - 3325 , - 1080 , - 3391 , - 1682 , - 241 , - 3356 , - 2451 , - 1814 , - 1445 , - 1344 , - 1511 , - 1946 , - 2649 , - 3620 , - 571 , - 2078 , - 3853 , - 1608 , - 3919 , - 2210 , - 769 , - 3884 , - 2979 , - 2342 , - 1973 , - 1872 , - 2039 , - 2474 , - 3177 , - 4148 , - 1099 , - 2606 , - 93 , - 2136 , - 159 , - 2738 , - 1297 , - 124 , - 3507 , - 2870 , - 2501 , - 2400 , - 2567 , - 3002 , - 3705 , - 388 , - 1627 , - 3134 , - 621 , - 2664 , - 687 , - 3266 , - 1825 , - 652 , - 4035 , - 3398 , - 3029 , - 2928 , - 3095 , - 3530 , - 4233 , - 916 , - 2155 , - 3662 , - 1149 , - 3192 , - 1215 , - 3794 , - 2353 , - 1180 , - 275 , - 3926 , - 3557 , - 3456 , - 3623 , - 4058 , - 473 , - 1444 , - 2683 , - 4190 , - 1677 , - 3720 , - 1743 , - 34 , - 2881 , - 1708 , - 803 , - 166 , - 4085 , - 3984 , - 4151 , - 298 , - 1001 , - 1972 , - 3211 , - 430 , - 2205 , - 4248 , - 2271 , - 562 , - 3409 , - 2236 , - 1331 , - 694 , - 325 , - 224 , - 391 , - 826 , - 1529 , - 2500 , - 3739 , - 958 , - 2733 , - 488 , - 2799 , - 1090 , - 3937 , - 2764 , - 1859 , - 1222 , - 853 , - 752 , - 919 , - 1354 , - 2057 , - 3028 , - 4267 , - 1486 , - 3261 , - 1016 , - 3327 , - 1618 , - 177 , - 3292 , - 2387 , - 1750 , - 1381 , - 1280 , - 1447 , - 1882 , - 2585 , - 3556 , - 507 , - 2014 , - 3789 , - 1544 , - 3855 , - 2146 , - 705 , - 3820 , - 2915 , - 2278 , - 1909 , - 1808 , - 1975 , - 2410 , - 3113 , - 4084 , - 1035 , - 2542 , - 29 , - 2072 , - 95 , - 2674 , - 1233 , - 60 , - 3443 , - 2806 , - 2437 , - 2336 , - 2503 , - 2938 , - 3641 , - 324 , - 1563 , - 3070 , - 557 , - 2600 , - 623 , - 3202 , - 1761 , - 588 , - 3971 , - 3334 , - 2965 , - 2864 , - 3031 , - 3466 , - 4169 , - 852 , - 2091 , - 3598 , - 1085 , - 3128 , - 1151 , - 3730 , - 2289 , - 1116 , - 211 , - 3862 , - 3493 , - 3392 , - 3559 , - 3994 , - 409 , - 1380 , - 2619 , - 4126 , - 1613 , - 3656 , - 1679 , - 4258 , - 2817 , - 1644 , - 739 , - 102 , - 4021 , - 3920 , - 4087 , - 234 , - 937 , - 1908 , - 3147 , - 366 , - 2141 , - 4184 , - 2207 , - 498 , - 3345 , - 2172 , - 1267 , - 630 , - 261 , - 160 , - 327 , - 762 , - 1465 , - 2436 , - 3675 , - 894 , - 2669 , - 424 , - 2735 , - 1026 , - 3873 , - 2700 , - 1795 , - 1158 , - 789 , - 688 , - 855 , - 1290 , - 1993 , - 2964 , - 4203 , - 1422 , - 3197 , - 952 , - 3263 , - 1554 , - 113 , - 3228 , - 2323 , - 1686 , - 1317 , - 1216 , - 1383 , - 1818 , - 2521 , - 3492 , - 443 , - 1950 , - 3725 , - 1480 , - 3791 , - 2082 , - 641 , - 3756 , - 2851 , - 2214 , - 1845 , - 1744 , - 1911 , - 2346 , - 3049 , - 4020 , - 971 , - 2478 , - 4253 , - 2008 , - 31 , - 2610 , - 1169 , - 4284 , - 3379 , - 2742 , - 2373 , - 2272 , - 2439 , - 2874 , - 3577 , - 260 , - 1499 , - 3006 , - 493 , - 2536 , - 559 , - 3138 , - 1697 , - 524 , - 3907 , - 3270 , - 2901 , - 2800 , - 2967 , - 3402 , - 4105 , - 788 , - 2027 , - 3534 , - 1021 , - 3064 , - 1087 , - 3666 , - 2225 , - 1052 , - 147 , - 3798 , - 3429 , - 3328 , - 3495 , - 3930 , - 345 , - 1316 , - 2555 , - 4062 , - 1549 , - 3592 , - 1615 , - 4194 , - 2753 , - 1580 , - 675 , - 38 , - 3957 , - 3856 , - 4023 , - 170 , - 873 , - 1844 , - 3083 , - 302 , - 2077 , - 4120 , - 2143 , - 434 , - 3281 , - 2108 , - 1203 , - 566 , - 197 , - 96 , - 263 , - 698 , - 1401 , - 2372 , - 3611 , - 830 , - 2605 , - 360 , - 2671 , - 962 , - 3809 , - 2636 , - 1731 , - 1094 , - 725 , - 624 , - 791 , - 1226 , - 1929 , - 2900 , - 4139 , - 1358 , - 3133 , - 888 , - 3199 , - 1490 , - 49 , - 3164 , - 2259 , - 1622 , - 1253 , - 1152 , - 1319 , - 1754 , - 2457 , - 3428 , - 379 , - 1886 , - 3661 , - 1416 , - 3727 , - 2018 , - 577 , - 3692 , - 2787 , - 2150 , - 1781 , - 1680 , - 1847 , - 2282 , - 2985 , - 3956 , - 907 , - 2414 , - 4189 , - 1944 , - 4255 , - 2546 , - 1105 , - 4220 , - 3315 , - 2678 , - 2309 , - 2208 , - 2375 , - 2810 , - 3513 , - 196 , - 1435 , - 2942 , - 429 , - 2472 , - 495 , - 3074 , - 1633 , - 460 , - 3843 , - 3206 , - 2837 , - 2736 , - 2903 , - 3338 , - 4041 , - 724 , - 1963 , - 3470 , - 957 , - 3000 , - 1023 , - 3602 , - 2161 , - 988 , - 83 , - 3734 , - 3365 , - 3264 , - 3431 , - 3866 , - 281 , - 1252 , - 2491 , - 3998 , - 1485 , - 3528 , - 1551 , - 4130 , - 2689 , - 1516 , - 611 , - 4262 , - 3893 , - 3792 , - 3959 , - 106 , - 809 , - 1780 , - 3019 , - 238 , - 2013 , - 4056 , - 2079 , - 370 , - 3217 , - 2044 , - 1139 , - 502 , - 133 , - 32 , - 199 , - 634 , - 1337 , - 2308 , - 3547 , - 766 , - 2541 , - 296 , - 2607 , - 898 , - 3745 , - 2572 , - 1667 , - 1030 , - 661 , - 560 , - 727 , - 1162 , - 1865 , - 2836 , - 4075 , - 1294 , - 3069 , - 824 , - 3135 , - 1426 , - 4273 , - 3100 , - 2195 , - 1558 , - 1189 , - 1088 , - 1255 , - 1690 , - 2393 , - 3364 , - 315 , - 1822 , - 3597 , - 1352 , - 3663 , - 1954 , - 513 , - 3628 , - 2723 , - 2086 , - 1717 , - 1616 , - 1783 , - 2218 , - 2921 , - 3892 , - 843 , - 2350 , - 4125 , - 1880 , - 4191 , - 2482 , - 1041 , - 4156 , - 3251 , - 2614 , - 2245 , - 2144 , - 2311 , - 2746 , - 3449 , - 132 , - 1371 , - 2878 , - 365 , - 2408 , - 431 , - 3010 , - 1569 , - 396 , - 3779 , - 3142 , - 2773 , - 2672 , - 2839 , - 3274 , - 3977 , - 660 , - 1899 , - 3406 , - 893 , - 2936 , - 959 , - 3538 , - 2097 , - 924 , - 19 , - 3670 , - 3301 , - 3200 , - 3367 , - 3802 , - 217 , - 1188 , - 2427 , - 3934 , - 1421 , - 3464 , - 1487 , - 4066 , - 2625 , - 1452 , - 547 , - 4198 , - 3829 , - 3728 , - 3895 , - 42 , - 745 , - 1716 , - 2955 , - 174 , - 1949 , - 3992 , - 2015 , - 306 , - 3153 , - 1980 , - 1075 , - 438 , - 69 , - 4256 , - 135 , - 570 , - 1273 , - 2244 , - 3483 , - 702 , - 2477 , - 232 , - 2543 , - 834 , - 3681 , - 2508 , - 1603 , - 966 , - 597 , - 496 , - 663 , - 1098 , - 1801 , - 2772 , - 4011 , - 1230 , - 3005 , - 760 , - 3071 , - 1362 , - 4209 , - 3036 , - 2131 , - 1494 , - 1125 , - 1024 , - 1191 , - 1626 , - 2329 , - 3300 , - 251 , - 1758 , - 3533 , - 1288 , - 3599 , - 1890 , - 449 , - 3564 , - 2659 , - 2022 , - 1653 , - 1552 , - 1719 , - 2154 , - 2857 , - 3828 , - 779 , - 2286 , - 4061 , - 1816 , - 4127 , - 2418 , - 977 , - 4092 , - 3187 , - 2550 , - 2181 , - 2080 , - 2247 , - 2682 , - 3385 , - 68 , - 1307 , - 2814 , - 301 , - 2344 , - 367 , - 2946 , - 1505 , - 332 , - 3715 , - 3078 , - 2709 , - 2608 , - 2775 , - 3210 , - 3913 , - 596 , - 1835 , - 3342 , - 829 , - 2872 , - 895 , - 3474 , - 2033 , - 860 , - 4243 , - 3606 , - 3237 , - 3136 , - 3303 , - 3738 , - 153 , - 1124 , - 2363 , - 3870 , - 1357 , - 3400 , - 1423 , - 4002 , - 2561 , - 1388 , - 483 , - 4134 , - 3765 , - 3664 , - 3831 , - 4266 , - 681 , - 1652 , - 2891 , - 110 , - 1885 , - 3928 , - 1951 , - 242 , - 3089 , - 1916 , - 1011 , - 374 , - 5 , - 4192 , - 71 , - 506 , - 1209 , - 2180 , - 3419 , - 638 , - 2413 , - 168 , - 2479 , - 770 , - 3617 , - 2444 , - 1539 , - 902 , - 533 , - 432 , - 599 , - 1034 , - 1737 , - 2708 , - 3947 , - 1166 , - 2941 , - 696 , - 3007 , - 1298 , - 4145 , - 2972 , - 2067 , - 1430 , - 1061 , - 960 , - 1127 , - 1562 , - 2265 , - 3236 , - 187 , - 1694 , - 3469 , - 1224 , - 3535 , - 1826 , - 385 , - 3500 , - 2595 , - 1958 , - 1589 , - 1488 , - 1655 , - 2090 , - 2793 , - 3764 , - 715 , - 2222 , - 3997 , - 1752 , - 4063 , - 2354 , - 913 , - 4028 , - 3123 , - 2486 , - 2117 , - 2016 , - 2183 , - 2618 , - 3321 , - 4 , - 1243 , - 2750 , - 237 , - 2280 , - 303 , - 2882 , - 1441 , - 268 , - 3651 , - 3014 , - 2645 , - 2544 , - 2711 , - 3146 , - 3849 , - 532 , - 1771 , - 3278 , - 765 , - 2808 , - 831 , - 3410 , - 1969 , - 796 , - 4179 , - 3542 , - 3173 , - 3072 , - 3239 , - 3674 , - 89 , - 1060 , - 2299 , - 3806 , - 1293 , - 3336 , - 1359 , - 3938 , - 2497 , - 1324 , - 419 , - 4070 , - 3701 , - 3600 , - 3767 , - 4202 , - 617 , - 1588 , - 2827 , - 46 , - 1821 , - 3864 , - 1887 , - 178 , - 3025 , - 1852 , - 947 , - 310 , - 4229 , - 4128 , - 7 , - 442 , - 1145 , - 2116 , - 3355 , - 574 , - 2349 , - 104 , - 2415 , - 706 , - 3553 , - 2380 , - 1475 , - 838 , - 469 , - 368 , - 535 , - 970 , - 1673 , - 2644 , - 3883 , - 1102 , - 2877 , - 632 , - 2943 , - 1234 , - 4081 , - 2908 , - 2003 , - 1366 , - 997 , - 896 , - 1063 , - 1498 , - 2201 , - 3172 , - 123 , - 1630 , - 3405 , - 1160 , - 3471 , - 1762 , - 321 , - 3436 , - 2531 , - 1894 , - 1525 , - 1424 , - 1591 , - 2026 , - 2729 , - 3700 , - 651 , - 2158 , - 3933 , - 1688 , - 3999 , - 2290 , - 849 , - 3964 , - 3059 , - 2422 , - 2053 , - 1952 , - 2119 , - 2554 , - 3257 , - 4228 , - 1179 , - 2686 , - 173 , - 2216 , - 239 , - 2818 , - 1377 , - 204 , - 3587 , - 2950 , - 2581 , - 2480 , - 2647 , - 3082 , - 3785 , - 468 , - 1707 , - 3214 , - 701 , - 2744 , - 767 , - 3346 , - 1905 , - 732 , - 4115 , - 3478 , - 3109 , - 3008 , - 3175 , - 3610 , - 25 , - 996 , - 2235 , - 3742 , - 1229 , - 3272 , - 1295 , - 3874 , - 2433 , - 1260 , - 355 , - 4006 , - 3637 , - 3536 , - 3703 , - 4138 , - 553 , - 1524 , - 2763 , - 4270 , - 1757 , - 3800 , - 1823 , - 114 , - 2961 , - 1788 , - 883 , - 246 , - 4165 , - 4064 , - 4231 , - 378 , - 1081 , - 2052 , - 3291 , - 510 , - 2285 , - 40 , - 2351 , - 642 , - 3489 , - 2316 , - 1411 , - 774 , - 405 , - 304 , - 471 , - 906 , - 1609 , - 2580 , - 3819 , - 1038 , - 2813 , - 568 , - 2879 , - 1170 , - 4017 , - 2844 , - 1939 , - 1302 , - 933 , - 832 , - 999 , - 1434 , - 2137 , - 3108 , - 59 , - 1566 , - 3341 , - 1096 , - 3407 , - 1698 , - 257 , - 3372 , - 2467 , - 1830 , - 1461 , - 1360 , - 1527 , - 1962 , - 2665 , - 3636 , - 587 , - 2094 , - 3869 , - 1624 , - 3935 , - 2226 , - 785 , - 3900 , - 2995 , - 2358 , - 1989 , - 1888 , - 2055 , - 2490 , - 3193 , - 4164 , - 1115 , - 2622 , - 109 , - 2152 , - 175 , - 2754 , - 1313 , - 140 , - 3523 , - 2886 , - 2517 , - 2416 , - 2583 , - 3018 , - 3721 , - 404 , - 1643 , - 3150 , - 637 , - 2680 , - 703 , - 3282 , - 1841 , - 668 , - 4051 , - 3414 , - 3045 , - 2944 , - 3111 , - 3546 , - 4249 , - 932 , - 2171 , - 3678 , - 1165 , - 3208 , - 1231 , - 3810 , - 2369 , - 1196 , - 291 , - 3942 , - 3573 , - 3472 , - 3639 , - 4074 , - 489 , - 1460 , - 2699 , - 4206 , - 1693 , - 3736 , - 1759 , - 50 , - 2897 , - 1724 , - 819 , - 182 , - 4101 , - 4000 , - 4167 , - 314 , - 1017 , - 1988 , - 3227 , - 446 , - 2221 , - 4264 , - 2287 , - 578 , - 3425 , - 2252 , - 1347 , - 710 , - 341 , - 240 , - 407 , - 842 , - 1545 , - 2516 , - 3755 , - 974 , - 2749 , - 504 , - 2815 , - 1106 , - 3953 , - 2780 , - 1875 , - 1238 , - 869 , - 768 , - 935 , - 1370 , - 2073 , - 3044 , - 4283 , - 1502 , - 3277 , - 1032 , - 3343 , - 1634 , - 193 , - 3308 , - 2403 , - 1766 , - 1397 , - 1296 , - 1463 , - 1898 , - 2601 , - 3572 , - 523 , - 2030 , - 3805 , - 1560 , - 3871 , - 2162 , - 721 , - 3836 , - 2931 , - 2294 , - 1925 , - 1824 , - 1991 , - 2426 , - 3129 , - 4100 , - 1051 , - 2558 , - 45 , - 2088 , - 111 , - 2690 , - 1249 , - 76 , - 3459 , - 2822 , - 2453 , - 2352 , - 2519 , - 2954 , - 3657 , - 340 , - 1579 , - 3086 , - 573 , - 2616 , - 639 , - 3218 , - 1777 , - 604 , - 3987 , - 3350 , - 2981 , - 2880 , - 3047 , - 3482 , - 4185 , - 868 , - 2107 , - 3614 , - 1101 , - 3144 , - 1167 , - 3746 , - 2305 , - 1132 , - 227 , - 3878 , - 3509 , - 3408 , - 3575 , - 4010 , - 425 , - 1396 , - 2635 , - 4142 , - 1629 , - 3672 , - 1695 , - 4274 , - 2833 , - 1660 , - 755 , - 118 , - 4037 , - 3936 , - 4103 , - 250 , - 953 , - 1924 , - 3163 , - 382 , - 2157 , - 4200 , - 2223 , - 514 , - 3361 , - 2188 , - 1283 , - 646 , - 277 , - 176 , - 343 , - 778 , - 1481 , - 2452 , - 3691 , - 910 , - 2685 , - 440 , - 2751 , - 1042 , - 3889 , - 2716 , - 1811 , - 1174 , - 805 , - 704 , - 871 , - 1306 , - 2009 , - 2980 , - 4219 , - 1438 , - 3213 , - 968 , - 3279 , - 1570 , - 129 , - 3244 , - 2339 , - 1702 , - 1333 , - 1232 , - 1399 , - 1834 , - 2537 , - 3508 , - 459 , - 1966 , - 3741 , - 1496 , - 3807 , - 2098 , - 657 , - 3772 , - 2867 , - 2230 , - 1861 , - 1760 , - 1927 , - 2362 , - 3065 , - 4036 , - 987 , - 2494 , - 4269 , - 2024 , - 47 , - 2626 , - 1185 , - 12 , - 3395 , - 2758 , - 2389 , - 2288 , - 2455 , - 2890 , - 3593 , - 276 , - 1515 , - 3022 , - 509 , - 2552 , - 575 , - 3154 , - 1713 , - 540 , - 3923 , - 3286 , - 2917 , - 2816 , - 2983 , - 3418 , - 4121 , - 804 , - 2043 , - 3550 , - 1037 , - 3080 , - 1103 , - 3682 , - 2241 , - 1068 , - 163 , - 3814 , - 3445 , - 3344 , - 3511 , - 3946 , - 361 , - 1332 , - 2571 , - 4078 , - 1565 , - 3608 , - 1631 , - 4210 , - 2769 , - 1596 , - 691 , - 54 , - 3973 , - 3872 , - 4039 , - 186 , - 889 , - 1860 , - 3099 , - 318 , - 2093 , - 4136 , - 2159 , - 450 , - 3297 , - 2124 , - 1219 , - 582 , - 213 , - 112 , - 279 , - 714 , - 1417 , - 2388 , - 3627 , - 846 , - 2621 , - 376 , - 2687 , - 978 , - 3825 , - 2652 , - 1747 , - 1110 , - 741 , - 640 , - 807 , - 1242 , - 1945 , - 2916 , - 4155 , - 1374 , - 3149 , - 904 , - 3215 , - 1506 , - 65 , - 3180 , - 2275 , - 1638 , - 1269 , - 1168 , - 1335 , - 1770 , - 2473 , - 3444 , - 395 , - 1902 , - 3677 , - 1432 , - 3743 , - 2034 , - 593 , - 3708 , - 2803 , - 2166 , - 1797 , - 1696 , - 1863 , - 2298 , - 3001 , - 3972 , - 923 , - 2430 , - 4205 , - 1960 , - 4271 , - 2562 , - 1121 , - 4236 , - 3331 , - 2694 , - 2325 , - 2224 , - 2391 , - 2826 , - 3529 , - 212 , - 1451 , - 2958 , - 445 , - 2488 , - 511 , - 3090 , - 1649 , - 476 , - 3859 , - 3222 , - 2853 , - 2752 , - 2919 , - 3354 , - 4057 , - 740 , - 1979 , - 3486 , - 973 , - 3016 , - 1039 , - 3618 , - 2177 , - 1004 , - 99 , - 3750 , - 3381 , - 3280 , - 3447 , - 3882 , - 297 , - 1268 , - 2507 , - 4014 , - 1501 , - 3544 , - 1567 , - 4146 , - 2705 , - 1532 , - 627 , - 4278 , - 3909 , - 3808 , - 3975 , - 122 , - 825 , - 1796 , - 3035 , - 254 , - 2029 , - 4072 , - 2095 , - 386 , - 3233 , - 2060 , - 1155 , - 518 , - 149 , - 48 , - 215 , - 650 , - 1353 , - 2324 , - 3563 , - 782 , - 2557 , - 312 , - 2623 , - 914 , - 3761 , - 2588 , - 1683 , - 1046 , - 677 , - 576 , - 743 , - 1178 , - 1881 , - 2852 , - 4091 , - 1310 , - 3085 , - 840 , - 3151 , - 1442 , - 1 , - 3116 , - 2211 , - 1574 , - 1205 , - 1104 , - 1271 , - 1706 , - 2409 , - 3380 , - 331 , - 1838 , - 3613 , - 1368 , - 3679 , - 1970 , - 529 , - 3644 , - 2739 , - 2102 , - 1733 , - 1632 , - 1799 , - 2234 , - 2937 , - 3908 , - 859 , - 2366 , - 4141 , - 1896 , - 4207 , - 2498 , - 1057 , - 4172 , - 3267 , - 2630 , - 2261 , - 2160 , - 2327 , - 2762 , - 3465 , - 148 , - 1387 , - 2894 , - 381 , - 2424 , - 447 , - 3026 , - 1585 , - 412 , - 3795 , - 3158 , - 2789 , - 2688 , - 2855 , - 3290 , - 3993 , - 676 , - 1915 , - 3422 , - 909 , - 2952 , - 975 , - 3554 , - 2113 , - 940 , - 35 , - 3686 , - 3317 , - 3216 , - 3383 , - 3818 , - 233 , - 1204 , - 2443 , - 3950 , - 1437 , - 3480 , - 1503 , - 4082 , - 2641 , - 1468 , - 563 , - 4214 , - 3845 , - 3744 , - 3911 , - 58 , - 761 , - 1732 , - 2971 , - 190 , - 1965 , - 4008 , - 2031 , - 322 , - 3169 , - 1996 , - 1091 , - 454 , - 85 , - 4272 , - 151 , - 586 , - 1289 , - 2260 , - 3499 , - 718 , - 2493 , - 248 , - 2559 , - 850 , - 3697 , - 2524 , - 1619 , - 982 , - 613 , - 512 , - 679 , - 1114 , - 1817 , - 2788 , - 4027 , - 1246 , - 3021 , - 776 , - 3087 , - 1378 , - 4225 , - 3052 , - 2147 , - 1510 , - 1141 , - 1040 , - 1207 , - 1642 , - 2345 , - 3316 , - 267 , - 1774 , - 3549 , - 1304 , - 3615 , - 1906 , - 465 , - 3580 , - 2675 , - 2038 , - 1669 , - 1568 , - 1735 , - 2170 , - 2873 , - 3844 , - 795 , - 2302 , - 4077 , - 1832 , - 4143 , - 2434 , - 993 , - 4108 , - 3203 , - 2566 , - 2197 , - 2096 , - 2263 , - 2698 , - 3401 , - 84 , - 1323 , - 2830 , - 317 , - 2360 , - 383 , - 2962 , - 1521 , - 348 , - 3731 , - 3094 , - 2725 , - 2624 , - 2791 , - 3226 , - 3929 , - 612 , - 1851 , - 3358 , - 845 , - 2888 , - 911 , - 3490 , - 2049 , - 876 , - 4259 , - 3622 , - 3253 , - 3152 , - 3319 , - 3754 , - 169 , - 1140 , - 2379 , - 3886 , - 1373 , - 3416 , - 1439 , - 4018 , - 2577 , - 1404 , - 499 , - 4150 , - 3781 , - 3680 , - 3847 , - 4282 , - 697 , - 1668 , - 2907 , - 126 , - 1901 , - 3944 , - 1967 , - 258 , - 3105 , - 1932 , - 1027 , - 390 , - 21 , - 4208 , - 87 , - 522 , - 1225 , - 2196 , - 3435 , - 654 , - 2429 , - 184 , - 2495 , - 786 , - 3633 , - 2460 , - 1555 , - 918 , - 549 , - 448 , - 615 , - 1050 , - 1753 , - 2724 , - 3963 , - 1182 , - 2957 , - 712 , - 3023 , - 1314 , - 4161 , - 2988 , - 2083 , - 1446 , - 1077 , - 976 , - 1143 , - 1578 , - 2281 , - 3252 , - 203 , - 1710 , - 3485 , - 1240 , - 3551 , - 1842 , - 401 , - 3516 , - 2611 , - 1974 , - 1605 , - 1504 , - 1671 , - 2106 , - 2809 , - 3780 , - 731 , - 2238 , - 4013 , - 1768 , - 4079 , - 2370 , - 929 , - 4044 , - 3139 , - 2502 , - 2133 , - 2032 , - 2199 , - 2634 , - 3337 , - 20 , - 1259 , - 2766 , - 253 , - 2296 , - 319 , - 2898 , - 1457 , - 284 , - 3667 , - 3030 , - 2661 , - 2560 , - 2727 , - 3162 , - 3865 , - 548 , - 1787 , - 3294 , - 781 , - 2824 , - 847 , - 3426 , - 1985 , - 812 , - 4195 , - 3558 , - 3189 , - 3088 , - 3255 , - 3690 , - 105 , - 1076 , - 2315 , - 3822 , - 1309 , - 3352 , - 1375 , - 3954 , - 2513 , - 1340 , - 435 , - 4086 , - 3717 , - 3616 , - 3783 , - 4218 , - 633 , - 1604 , - 2843 , - 62 , - 1837 , - 3880 , - 1903 , - 194 , - 3041 , - 1868 , - 963 , - 326 , - 4245 , - 4144 , - 23 , - 458 , - 1161 , - 2132 , - 3371 , - 590 , - 2365 , - 120 , - 2431 , - 722 , - 3569 , - 2396 , - 1491 , - 854 , - 485 , - 384 , - 551 , - 986 , - 1689 , - 2660 , - 3899 , - 1118 , - 2893 , - 648 , - 2959 , - 1250 , - 4097 , - 2924 , - 2019 , - 1382 , - 1013 , - 912 , - 1079 , - 1514 , - 2217 , - 3188 , - 139 , - 1646 , - 3421 , - 1176 , - 3487 , - 1778 , - 337 , - 3452 , - 2547 , - 1910 , - 1541 , - 1440 , - 1607 , - 2042 , - 2745 , - 3716 , - 667 , - 2174 , - 3949 , - 1704 , - 4015 , - 2306 , - 865 , - 3980 , - 3075 , - 2438 , - 2069 , - 1968 , - 2135 , - 2570 , - 3273 , - 4244 , - 1195 , - 2702 , - 189 , - 2232 , - 255 , - 2834 , - 1393 , - 220 , - 3603 , - 2966 , - 2597 , - 2496 , - 2663 , - 3098 , - 3801 , - 484 , - 1723 , - 3230 , - 717 , - 2760 , - 783 , - 3362 , - 1921 , - 748 , - 4131 , - 3494 , - 3125 , - 3024 , - 3191 , - 3626 , - 41 , - 1012 , - 2251 , - 3758 , - 1245 , - 3288 , - 1311 , - 3890 , - 2449 , - 1276 , - 371 , - 4022 , - 3653 , - 3552 , - 3719 , - 4154 , - 569 , - 1540 , - 2779 , - 4286 , - 1773 , - 3816 , - 1839 , - 130 , - 2977 , - 1804 , - 899 , - 262 , - 4181 , - 4080 , - 4247 , - 394 , - 1097 , - 2068 , - 3307 , - 526 , - 2301 , - 56 , - 2367 , - 658 , - 3505 , - 2332 , - 1427 , - 790 , - 421 , - 320 , - 487 , - 922 , - 1625 , - 2596 , - 3835 , - 1054 , - 2829 , - 584 , - 2895 , - 1186 , - 4033 , - 2860 , - 1955 , - 1318 , - 949 , - 848 , - 1015 , - 1450 , - 2153 , - 3124 , - 75 , - 1582 , - 3357 , - 1112 , - 3423 , - 1714 , - 273 , - 3388 , - 2483 , - 1846 , - 1477 , - 1376 , - 1543 , - 1978 , - 2681 , - 3652 , - 603 , - 2110 , - 3885 , - 1640 , - 3951 , - 2242 , - 801 , - 3916 , - 3011 , - 2374 , - 2005 , - 1904 , - 2071 , - 2506 , - 3209 , - 4180 , - 1131 , - 2638 , - 125 , - 2168 , - 191 , - 2770 , - 1329 , - 156 , - 3539 , - 2902 , - 2533 , - 2432 , - 2599 , - 3034 , - 3737 , - 420 , - 1659 , - 3166 , - 653 , - 2696 , - 719 , - 3298 , - 1857 , - 684 , - 4067 , - 3430 , - 3061 , - 2960 , - 3127 , - 3562 , - 4265 , - 948 , - 2187 , - 3694 , - 1181 , - 3224 , - 1247 , - 3826 , - 2385 , - 1212 , - 307 , - 3958 , - 3589 , - 3488 , - 3655 , - 4090 , - 505 , - 1476 , - 2715 , - 4222 , - 1709 , - 3752 , - 1775 , - 66 , - 2913 , - 1740 , - 835 , - 198 , - 4117 , - 4016 , - 4183 , - 330 , - 1033 , - 2004 , - 3243 , - 462 , - 2237 , - 4280 , - 2303 , - 594 , - 3441 , - 2268 , - 1363 , - 726 , - 357 , - 256 , - 423 , - 858 , - 1561 , - 2532 , - 3771 , - 990 , - 2765 , - 520 , - 2831 , - 1122 , - 3969 , - 2796 , - 1891 , - 1254 , - 885 , - 784 , - 951 , - 1386 , - 2089 , - 3060 , - 11 , - 1518 , - 3293 , - 1048 , - 3359 , - 1650 , - 209 , - 3324 , - 2419 , - 1782 , - 1413 , - 1312 , - 1479 , - 1914 , - 2617 , - 3588 , - 539 , - 2046 , - 3821 , - 1576 , - 3887 , - 2178 , - 737 , - 3852 , - 2947 , - 2310 , - 1941 , - 1840 , - 2007 , - 2442 , - 3145 , - 4116 , - 1067 , - 2574 , - 61 , - 2104 , - 127 , - 2706 , - 1265 , - 92 , - 3475 , - 2838 , - 2469 , - 2368 , - 2535 , - 2970 , - 3673 , - 356 , - 1595 , - 3102 , - 589 , - 2632 , - 655 , - 3234 , - 1793 , - 620 , - 4003 , - 3366 , - 2997 , - 2896 , - 3063 , - 3498 , - 4201 , - 884 , - 2123 , - 3630 , - 1117 , - 3160 , - 1183 , - 3762 , - 2321 , - 1148 , - 243 , - 3894 , - 3525 , - 3424 , - 3591 , - 4026 , - 441 , - 1412 , - 2651 , - 4158 , - 1645 , - 3688 , - 1711 , - 2 , - 2849 , - 1676 , - 771 , - 134 , - 4053 , - 3952 , - 4119 , - 266 , - 969 , - 1940 , - 3179 , - 398 , - 2173 , - 4216 , - 2239 , - 530 , - 3377 , - 2204 , - 1299 , - 662 , - 293 , - 192 , - 359 , - 794 , - 1497 , - 2468 , - 3707 , - 926 , - 2701 , - 456 , - 2767 , - 1058 , - 3905 , - 2732 , - 1827 , - 1190 , - 821 , - 720 , - 887 , - 1322 , - 2025 , - 2996 , - 4235 , - 1454 , - 3229 , - 984 , - 3295 , - 1586 , - 145 , - 3260 , - 2355 , - 1718 , - 1349 , - 1248 , - 1415 , - 1850 , - 2553 , - 3524 , - 475 , - 1982 , - 3757 , - 1512 , - 3823 , - 2114 , - 673 , - 3788 , - 2883 , - 2246 , - 1877 , - 1776 , - 1943 , - 2378 , - 3081 , - 4052 , - 1003 , - 2510 , - 4285 , - 2040 , - 63 , - 2642 , - 1201 , - 28 , - 3411 , - 2774 , - 2405 , - 2304 , - 2471 , - 2906 , - 3609 , - 292 , - 1531 , - 3038 , - 525 , - 2568 , - 591 , - 3170 , - 1729 , - 556 , - 3939 , - 3302 , - 2933 , - 2832 , - 2999 , - 3434 , - 4137 , - 820 , - 2059 , - 3566 , - 1053 , - 3096 , - 1119 , - 3698 , - 2257 , - 1084 , - 179 , - 3830 , - 3461 , - 3360 , - 3527 , - 3962 , - 377 , - 1348 , - 2587 , - 4094 , - 1581 , - 3624 , - 1647 , - 4226 , - 2785 , - 1612 , - 707 , - 70 , - 3989 , - 3888 , - 4055 , - 202 , - 905 , - 1876 , - 3115 , - 334 , - 2109 , - 4152 , - 2175 , - 466 , - 3313 , - 2140 , - 1235 , - 598 , - 229 , - 128 , - 295 , - 730 , - 1433 , - 2404 , - 3643 , - 862 , - 2637 , - 392 , - 2703 , - 994 , - 3841 , - 2668 , - 1763 , - 1126 , - 757 , - 656 , - 823 , - 1258 , - 1961 , - 2932 , - 4171 , - 1390 , - 3165 , - 920 , - 3231 , - 1522 , - 81 , - 3196 , - 2291 , - 1654 , - 1285 , - 1184 , - 1351 , - 1786 , - 2489 , - 3460 , - 411 , - 1918 , - 3693 , - 1448 , - 3759 , - 2050 , - 609 , - 3724 , - 2819 , - 2182 , - 1813 , - 1712 , - 1879 , - 2314 , - 3017 , - 3988 , - 939 , - 2446 , - 4221 , - 1976 , - 4287 , - 2578 , - 1137 , - 4252 , - 3347 , - 2710 , - 2341 , - 2240 , - 2407 , - 2842 , - 3545 , - 228 , - 1467 , - 2974 , - 461 , - 2504 , - 527 , - 3106 , - 1665 , - 492 , - 3875 , - 3238 , - 2869 , - 2768 , - 2935 , - 3370 , - 4073 , - 756 , - 1995 , - 3502 , - 989 , - 3032 , - 1055 , - 3634 , - 2193 , - 1020 , - 115 , - 3766 , - 3397 , - 3296 , - 3463 , - 3898 , - 313 , - 1284 , - 2523 , - 4030 , - 1517 , - 3560 , - 1583 , - 4162 , - 2721 , - 1548 , - 643 , - 6 , - 3925 , - 3824 , - 3991 , - 138 , - 841 , - 1812 , - 3051 , - 270 , - 2045 , - 4088 , - 2111 , - 402 , - 3249 , - 2076 , - 1171 , - 534 , - 165 , - 64 , - 231 , - 666 , - 1369 , - 2340 , - 3579 , - 798 , - 2573 , - 328 , - 2639 , - 930 , - 3777 , - 2604 , - 1699 , - 1062 , - 693 , - 592 , - 759 , - 1194 , - 1897 , - 2868 , - 4107 , - 1326 , - 3101 , - 856 , - 3167 , - 1458 , - 17 , - 3132 , - 2227 , - 1590 , - 1221 , - 1120 , - 1287 , - 1722 , - 2425 , - 3396 , - 347 , - 1854 , - 3629 , - 1384 , - 3695 , - 1986 , - 545 , - 3660 , - 2755 , - 2118 , - 1749 , - 1648 , - 1815 , - 2250 , - 2953 , - 3924 , - 875 , - 2382 , - 4157 , - 1912 , - 4223 , - 2514 , - 1073 , - 4188 , - 3283 , - 2646 , - 2277 , - 2176 , - 2343 , - 2778 , - 3481 , - 164 , - 1403 , - 2910 , - 397 , - 2440 , - 463 , - 3042 , - 1601 , - 428 , - 3811 , - 3174 , - 2805 , - 2704 , - 2871 , - 3306 , - 4009 , - 692 , - 1931 , - 3438 , - 925 , - 2968 , - 991 , - 3570 , - 2129 , - 956 , - 51 , - 3702 , - 3333 , - 3232 , - 3399 , - 3834 , - 249 , - 1220 , - 2459 , - 3966 , - 1453 , - 3496 , - 1519 , - 4098 , - 2657 , - 1484 , - 579 , - 4230 , - 3861 , - 3760 , - 3927 , - 74 , - 777 , - 1748 , - 2987 , - 206 , - 1981 , - 4024 , - 2047 , - 338 , - 3185 , - 2012 , - 1107 , - 470 , - 101 , - 0 , - 885 , - 2586 , - 751 , - 4084 , - 3881 , - 142 , - 1571 , - 3816 , - 2525 , - 2050 , - 2391 , - 3548 , - 1169 , - 3958 , - 3211 , - 3280 , - 4165 , - 1514 , - 4031 , - 3012 , - 2809 , - 3422 , - 499 , - 2744 , - 1453 , - 978 , - 1319 , - 2476 , - 97 , - 2886 , - 2139 , - 2208 , - 3093 , - 442 , - 2959 , - 1940 , - 1737 , - 2350 , - 3779 , - 1672 , - 381 , - 4258 , - 247 , - 1404 , - 3377 , - 1814 , - 1067 , - 1136 , - 2021 , - 3722 , - 1887 , - 868 , - 665 , - 1278 , - 2707 , - 600 , - 3661 , - 3186 , - 3527 , - 332 , - 2305 , - 742 , - 4347 , - 64 , - 949 , - 2650 , - 815 , - 4148 , - 3945 , - 206 , - 1635 , - 3880 , - 2589 , - 2114 , - 2455 , - 3612 , - 1233 , - 4022 , - 3275 , - 3344 , - 4229 , - 1578 , - 4095 , - 3076 , - 2873 , - 3486 , - 563 , - 2808 , - 1517 , - 1042 , - 1383 , - 2540 , - 161 , - 2950 , - 2203 , - 2272 , - 3157 , - 506 , - 3023 , - 2004 , - 1801 , - 2414 , - 3843 , - 1736 , - 445 , - 4322 , - 311 , - 1468 , - 3441 , - 1878 , - 1131 , - 1200 , - 2085 , - 3786 , - 1951 , - 932 , - 729 , - 1342 , - 2771 , - 664 , - 3725 , - 3250 , - 3591 , - 396 , - 2369 , - 806 , - 59 , - 128 , - 1013 , - 2714 , - 879 , - 4212 , - 4009 , - 270 , - 1699 , - 3944 , - 2653 , - 2178 , - 2519 , - 3676 , - 1297 , - 4086 , - 3339 , - 3408 , - 4293 , - 1642 , - 4159 , - 3140 , - 2937 , - 3550 , - 627 , - 2872 , - 1581 , - 1106 , - 1447 , - 2604 , - 225 , - 3014 , - 2267 , - 2336 , - 3221 , - 570 , - 3087 , - 2068 , - 1865 , - 2478 , - 3907 , - 1800 , - 509 , - 34 , - 375 , - 1532 , - 3505 , - 1942 , - 1195 , - 1264 , - 2149 , - 3850 , - 2015 , - 996 , - 793 , - 1406 , - 2835 , - 728 , - 3789 , - 3314 , - 3655 , - 460 , - 2433 , - 870 , - 123 , - 192 , - 1077 , - 2778 , - 943 , - 4276 , - 4073 , - 334 , - 1763 , - 4008 , - 2717 , - 2242 , - 2583 , - 3740 , - 1361 , - 4150 , - 3403 , - 3472 , - 5 , - 1706 , - 4223 , - 3204 , - 3001 , - 3614 , - 691 , - 2936 , - 1645 , - 1170 , - 1511 , - 2668 , - 289 , - 3078 , - 2331 , - 2400 , - 3285 , - 634 , - 3151 , - 2132 , - 1929 , - 2542 , - 3971 , - 1864 , - 573 , - 98 , - 439 , - 1596 , - 3569 , - 2006 , - 1259 , - 1328 , - 2213 , - 3914 , - 2079 , - 1060 , - 857 , - 1470 , - 2899 , - 792 , - 3853 , - 3378 , - 3719 , - 524 , - 2497 , - 934 , - 187 , - 256 , - 1141 , - 2842 , - 1007 , - 4340 , - 4137 , - 398 , - 1827 , - 4072 , - 2781 , - 2306 , - 2647 , - 3804 , - 1425 , - 4214 , - 3467 , - 3536 , - 69 , - 1770 , - 4287 , - 3268 , - 3065 , - 3678 , - 755 , - 3000 , - 1709 , - 1234 , - 1575 , - 2732 , - 353 , - 3142 , - 2395 , - 2464 , - 3349 , - 698 , - 3215 , - 2196 , - 1993 , - 2606 , - 4035 , - 1928 , - 637 , - 162 , - 503 , - 1660 , - 3633 , - 2070 , - 1323 , - 1392 , - 2277 , - 3978 , - 2143 , - 1124 , - 921 , - 1534 , - 2963 , - 856 , - 3917 , - 3442 , - 3783 , - 588 , - 2561 , - 998 , - 251 , - 320 , - 1205 , - 2906 , - 1071 , - 52 , - 4201 , - 462 , - 1891 , - 4136 , - 2845 , - 2370 , - 2711 , - 3868 , - 1489 , - 4278 , - 3531 , - 3600 , - 133 , - 1834 , - 4351 , - 3332 , - 3129 , - 3742 , - 819 , - 3064 , - 1773 , - 1298 , - 1639 , - 2796 , - 417 , - 3206 , - 2459 , - 2528 , - 3413 , - 762 , - 3279 , - 2260 , - 2057 , - 2670 , - 4099 , - 1992 , - 701 , - 226 , - 567 , - 1724 , - 3697 , - 2134 , - 1387 , - 1456 , - 2341 , - 4042 , - 2207 , - 1188 , - 985 , - 1598 , - 3027 , - 920 , - 3981 , - 3506 , - 3847 , - 652 , - 2625 , - 1062 , - 315 , - 384 , - 1269 , - 2970 , - 1135 , - 116 , - 4265 , - 526 , - 1955 , - 4200 , - 2909 , - 2434 , - 2775 , - 3932 , - 1553 , - 4342 , - 3595 , - 3664 , - 197 , - 1898 , - 63 , - 3396 , - 3193 , - 3806 , - 883 , - 3128 , - 1837 , - 1362 , - 1703 , - 2860 , - 481 , - 3270 , - 2523 , - 2592 , - 3477 , - 826 , - 3343 , - 2324 , - 2121 , - 2734 , - 4163 , - 2056 , - 765 , - 290 , - 631 , - 1788 , - 3761 , - 2198 , - 1451 , - 1520 , - 2405 , - 4106 , - 2271 , - 1252 , - 1049 , - 1662 , - 3091 , - 984 , - 4045 , - 3570 , - 3911 , - 716 , - 2689 , - 1126 , - 379 , - 448 , - 1333 , - 3034 , - 1199 , - 180 , - 4329 , - 590 , - 2019 , - 4264 , - 2973 , - 2498 , - 2839 , - 3996 , - 1617 , - 54 , - 3659 , - 3728 , - 261 , - 1962 , - 127 , - 3460 , - 3257 , - 3870 , - 947 , - 3192 , - 1901 , - 1426 , - 1767 , - 2924 , - 545 , - 3334 , - 2587 , - 2656 , - 3541 , - 890 , - 3407 , - 2388 , - 2185 , - 2798 , - 4227 , - 2120 , - 829 , - 354 , - 695 , - 1852 , - 3825 , - 2262 , - 1515 , - 1584 , - 2469 , - 4170 , - 2335 , - 1316 , - 1113 , - 1726 , - 3155 , - 1048 , - 4109 , - 3634 , - 3975 , - 780 , - 2753 , - 1190 , - 443 , - 512 , - 1397 , - 3098 , - 1263 , - 244 , - 41 , - 654 , - 2083 , - 4328 , - 3037 , - 2562 , - 2903 , - 4060 , - 1681 , - 118 , - 3723 , - 3792 , - 325 , - 2026 , - 191 , - 3524 , - 3321 , - 3934 , - 1011 , - 3256 , - 1965 , - 1490 , - 1831 , - 2988 , - 609 , - 3398 , - 2651 , - 2720 , - 3605 , - 954 , - 3471 , - 2452 , - 2249 , - 2862 , - 4291 , - 2184 , - 893 , - 418 , - 759 , - 1916 , - 3889 , - 2326 , - 1579 , - 1648 , - 2533 , - 4234 , - 2399 , - 1380 , - 1177 , - 1790 , - 3219 , - 1112 , - 4173 , - 3698 , - 4039 , - 844 , - 2817 , - 1254 , - 507 , - 576 , - 1461 , - 3162 , - 1327 , - 308 , - 105 , - 718 , - 2147 , - 40 , - 3101 , - 2626 , - 2967 , - 4124 , - 1745 , - 182 , - 3787 , - 3856 , - 389 , - 2090 , - 255 , - 3588 , - 3385 , - 3998 , - 1075 , - 3320 , - 2029 , - 1554 , - 1895 , - 3052 , - 673 , - 3462 , - 2715 , - 2784 , - 3669 , - 1018 , - 3535 , - 2516 , - 2313 , - 2926 , - 3 , - 2248 , - 957 , - 482 , - 823 , - 1980 , - 3953 , - 2390 , - 1643 , - 1712 , - 2597 , - 4298 , - 2463 , - 1444 , - 1241 , - 1854 , - 3283 , - 1176 , - 4237 , - 3762 , - 4103 , - 908 , - 2881 , - 1318 , - 571 , - 640 , - 1525 , - 3226 , - 1391 , - 372 , - 169 , - 782 , - 2211 , - 104 , - 3165 , - 2690 , - 3031 , - 4188 , - 1809 , - 246 , - 3851 , - 3920 , - 453 , - 2154 , - 319 , - 3652 , - 3449 , - 4062 , - 1139 , - 3384 , - 2093 , - 1618 , - 1959 , - 3116 , - 737 , - 3526 , - 2779 , - 2848 , - 3733 , - 1082 , - 3599 , - 2580 , - 2377 , - 2990 , - 67 , - 2312 , - 1021 , - 546 , - 887 , - 2044 , - 4017 , - 2454 , - 1707 , - 1776 , - 2661 , - 10 , - 2527 , - 1508 , - 1305 , - 1918 , - 3347 , - 1240 , - 4301 , - 3826 , - 4167 , - 972 , - 2945 , - 1382 , - 635 , - 704 , - 1589 , - 3290 , - 1455 , - 436 , - 233 , - 846 , - 2275 , - 168 , - 3229 , - 2754 , - 3095 , - 4252 , - 1873 , - 310 , - 3915 , - 3984 , - 517 , - 2218 , - 383 , - 3716 , - 3513 , - 4126 , - 1203 , - 3448 , - 2157 , - 1682 , - 2023 , - 3180 , - 801 , - 3590 , - 2843 , - 2912 , - 3797 , - 1146 , - 3663 , - 2644 , - 2441 , - 3054 , - 131 , - 2376 , - 1085 , - 610 , - 951 , - 2108 , - 4081 , - 2518 , - 1771 , - 1840 , - 2725 , - 74 , - 2591 , - 1572 , - 1369 , - 1982 , - 3411 , - 1304 , - 13 , - 3890 , - 4231 , - 1036 , - 3009 , - 1446 , - 699 , - 768 , - 1653 , - 3354 , - 1519 , - 500 , - 297 , - 910 , - 2339 , - 232 , - 3293 , - 2818 , - 3159 , - 4316 , - 1937 , - 374 , - 3979 , - 4048 , - 581 , - 2282 , - 447 , - 3780 , - 3577 , - 4190 , - 1267 , - 3512 , - 2221 , - 1746 , - 2087 , - 3244 , - 865 , - 3654 , - 2907 , - 2976 , - 3861 , - 1210 , - 3727 , - 2708 , - 2505 , - 3118 , - 195 , - 2440 , - 1149 , - 674 , - 1015 , - 2172 , - 4145 , - 2582 , - 1835 , - 1904 , - 2789 , - 138 , - 2655 , - 1636 , - 1433 , - 2046 , - 3475 , - 1368 , - 77 , - 3954 , - 4295 , - 1100 , - 3073 , - 1510 , - 763 , - 832 , - 1717 , - 3418 , - 1583 , - 564 , - 361 , - 974 , - 2403 , - 296 , - 3357 , - 2882 , - 3223 , - 28 , - 2001 , - 438 , - 4043 , - 4112 , - 645 , - 2346 , - 511 , - 3844 , - 3641 , - 4254 , - 1331 , - 3576 , - 2285 , - 1810 , - 2151 , - 3308 , - 929 , - 3718 , - 2971 , - 3040 , - 3925 , - 1274 , - 3791 , - 2772 , - 2569 , - 3182 , - 259 , - 2504 , - 1213 , - 738 , - 1079 , - 2236 , - 4209 , - 2646 , - 1899 , - 1968 , - 2853 , - 202 , - 2719 , - 1700 , - 1497 , - 2110 , - 3539 , - 1432 , - 141 , - 4018 , - 7 , - 1164 , - 3137 , - 1574 , - 827 , - 896 , - 1781 , - 3482 , - 1647 , - 628 , - 425 , - 1038 , - 2467 , - 360 , - 3421 , - 2946 , - 3287 , - 92 , - 2065 , - 502 , - 4107 , - 4176 , - 709 , - 2410 , - 575 , - 3908 , - 3705 , - 4318 , - 1395 , - 3640 , - 2349 , - 1874 , - 2215 , - 3372 , - 993 , - 3782 , - 3035 , - 3104 , - 3989 , - 1338 , - 3855 , - 2836 , - 2633 , - 3246 , - 323 , - 2568 , - 1277 , - 802 , - 1143 , - 2300 , - 4273 , - 2710 , - 1963 , - 2032 , - 2917 , - 266 , - 2783 , - 1764 , - 1561 , - 2174 , - 3603 , - 1496 , - 205 , - 4082 , - 71 , - 1228 , - 3201 , - 1638 , - 891 , - 960 , - 1845 , - 3546 , - 1711 , - 692 , - 489 , - 1102 , - 2531 , - 424 , - 3485 , - 3010 , - 3351 , - 156 , - 2129 , - 566 , - 4171 , - 4240 , - 773 , - 2474 , - 639 , - 3972 , - 3769 , - 30 , - 1459 , - 3704 , - 2413 , - 1938 , - 2279 , - 3436 , - 1057 , - 3846 , - 3099 , - 3168 , - 4053 , - 1402 , - 3919 , - 2900 , - 2697 , - 3310 , - 387 , - 2632 , - 1341 , - 866 , - 1207 , - 2364 , - 4337 , - 2774 , - 2027 , - 2096 , - 2981 , - 330 , - 2847 , - 1828 , - 1625 , - 2238 , - 3667 , - 1560 , - 269 , - 4146 , - 135 , - 1292 , - 3265 , - 1702 , - 955 , - 1024 , - 1909 , - 3610 , - 1775 , - 756 , - 553 , - 1166 , - 2595 , - 488 , - 3549 , - 3074 , - 3415 , - 220 , - 2193 , - 630 , - 4235 , - 4304 , - 837 , - 2538 , - 703 , - 4036 , - 3833 , - 94 , - 1523 , - 3768 , - 2477 , - 2002 , - 2343 , - 3500 , - 1121 , - 3910 , - 3163 , - 3232 , - 4117 , - 1466 , - 3983 , - 2964 , - 2761 , - 3374 , - 451 , - 2696 , - 1405 , - 930 , - 1271 , - 2428 , - 49 , - 2838 , - 2091 , - 2160 , - 3045 , - 394 , - 2911 , - 1892 , - 1689 , - 2302 , - 3731 , - 1624 , - 333 , - 4210 , - 199 , - 1356 , - 3329 , - 1766 , - 1019 , - 1088 , - 1973 , - 3674 , - 1839 , - 820 , - 617 , - 1230 , - 2659 , - 552 , - 3613 , - 3138 , - 3479 , - 284 , - 2257 , - 694 , - 4299 , - 16 , - 901 , - 2602 , - 767 , - 4100 , - 3897 , - 158 , - 1587 , - 3832 , - 2541 , - 2066 , - 2407 , - 3564 , - 1185 , - 3974 , - 3227 , - 3296 , - 4181 , - 1530 , - 4047 , - 3028 , - 2825 , - 3438 , - 515 , - 2760 , - 1469 , - 994 , - 1335 , - 2492 , - 113 , - 2902 , - 2155 , - 2224 , - 3109 , - 458 , - 2975 , - 1956 , - 1753 , - 2366 , - 3795 , - 1688 , - 397 , - 4274 , - 263 , - 1420 , - 3393 , - 1830 , - 1083 , - 1152 , - 2037 , - 3738 , - 1903 , - 884 , - 681 , - 1294 , - 2723 , - 616 , - 3677 , - 3202 , - 3543 , - 348 , - 2321 , - 758 , - 11 , - 80 , - 965 , - 2666 , - 831 , - 4164 , - 3961 , - 222 , - 1651 , - 3896 , - 2605 , - 2130 , - 2471 , - 3628 , - 1249 , - 4038 , - 3291 , - 3360 , - 4245 , - 1594 , - 4111 , - 3092 , - 2889 , - 3502 , - 579 , - 2824 , - 1533 , - 1058 , - 1399 , - 2556 , - 177 , - 2966 , - 2219 , - 2288 , - 3173 , - 522 , - 3039 , - 2020 , - 1817 , - 2430 , - 3859 , - 1752 , - 461 , - 4338 , - 327 , - 1484 , - 3457 , - 1894 , - 1147 , - 1216 , - 2101 , - 3802 , - 1967 , - 948 , - 745 , - 1358 , - 2787 , - 680 , - 3741 , - 3266 , - 3607 , - 412 , - 2385 , - 822 , - 75 , - 144 , - 1029 , - 2730 , - 895 , - 4228 , - 4025 , - 286 , - 1715 , - 3960 , - 2669 , - 2194 , - 2535 , - 3692 , - 1313 , - 4102 , - 3355 , - 3424 , - 4309 , - 1658 , - 4175 , - 3156 , - 2953 , - 3566 , - 643 , - 2888 , - 1597 , - 1122 , - 1463 , - 2620 , - 241 , - 3030 , - 2283 , - 2352 , - 3237 , - 586 , - 3103 , - 2084 , - 1881 , - 2494 , - 3923 , - 1816 , - 525 , - 50 , - 391 , - 1548 , - 3521 , - 1958 , - 1211 , - 1280 , - 2165 , - 3866 , - 2031 , - 1012 , - 809 , - 1422 , - 2851 , - 744 , - 3805 , - 3330 , - 3671 , - 476 , - 2449 , - 886 , - 139 , - 208 , - 1093 , - 2794 , - 959 , - 4292 , - 4089 , - 350 , - 1779 , - 4024 , - 2733 , - 2258 , - 2599 , - 3756 , - 1377 , - 4166 , - 3419 , - 3488 , - 21 , - 1722 , - 4239 , - 3220 , - 3017 , - 3630 , - 707 , - 2952 , - 1661 , - 1186 , - 1527 , - 2684 , - 305 , - 3094 , - 2347 , - 2416 , - 3301 , - 650 , - 3167 , - 2148 , - 1945 , - 2558 , - 3987 , - 1880 , - 589 , - 114 , - 455 , - 1612 , - 3585 , - 2022 , - 1275 , - 1344 , - 2229 , - 3930 , - 2095 , - 1076 , - 873 , - 1486 , - 2915 , - 808 , - 3869 , - 3394 , - 3735 , - 540 , - 2513 , - 950 , - 203 , - 272 , - 1157 , - 2858 , - 1023 , - 4 , - 4153 , - 414 , - 1843 , - 4088 , - 2797 , - 2322 , - 2663 , - 3820 , - 1441 , - 4230 , - 3483 , - 3552 , - 85 , - 1786 , - 4303 , - 3284 , - 3081 , - 3694 , - 771 , - 3016 , - 1725 , - 1250 , - 1591 , - 2748 , - 369 , - 3158 , - 2411 , - 2480 , - 3365 , - 714 , - 3231 , - 2212 , - 2009 , - 2622 , - 4051 , - 1944 , - 653 , - 178 , - 519 , - 1676 , - 3649 , - 2086 , - 1339 , - 1408 , - 2293 , - 3994 , - 2159 , - 1140 , - 937 , - 1550 , - 2979 , - 872 , - 3933 , - 3458 , - 3799 , - 604 , - 2577 , - 1014 , - 267 , - 336 , - 1221 , - 2922 , - 1087 , - 68 , - 4217 , - 478 , - 1907 , - 4152 , - 2861 , - 2386 , - 2727 , - 3884 , - 1505 , - 4294 , - 3547 , - 3616 , - 149 , - 1850 , - 15 , - 3348 , - 3145 , - 3758 , - 835 , - 3080 , - 1789 , - 1314 , - 1655 , - 2812 , - 433 , - 3222 , - 2475 , - 2544 , - 3429 , - 778 , - 3295 , - 2276 , - 2073 , - 2686 , - 4115 , - 2008 , - 717 , - 242 , - 583 , - 1740 , - 3713 , - 2150 , - 1403 , - 1472 , - 2357 , - 4058 , - 2223 , - 1204 , - 1001 , - 1614 , - 3043 , - 936 , - 3997 , - 3522 , - 3863 , - 668 , - 2641 , - 1078 , - 331 , - 400 , - 1285 , - 2986 , - 1151 , - 132 , - 4281 , - 542 , - 1971 , - 4216 , - 2925 , - 2450 , - 2791 , - 3948 , - 1569 , - 6 , - 3611 , - 3680 , - 213 , - 1914 , - 79 , - 3412 , - 3209 , - 3822 , - 899 , - 3144 , - 1853 , - 1378 , - 1719 , - 2876 , - 497 , - 3286 , - 2539 , - 2608 , - 3493 , - 842 , - 3359 , - 2340 , - 2137 , - 2750 , - 4179 , - 2072 , - 781 , - 306 , - 647 , - 1804 , - 3777 , - 2214 , - 1467 , - 1536 , - 2421 , - 4122 , - 2287 , - 1268 , - 1065 , - 1678 , - 3107 , - 1000 , - 4061 , - 3586 , - 3927 , - 732 , - 2705 , - 1142 , - 395 , - 464 , - 1349 , - 3050 , - 1215 , - 196 , - 4345 , - 606 , - 2035 , - 4280 , - 2989 , - 2514 , - 2855 , - 4012 , - 1633 , - 70 , - 3675 , - 3744 , - 277 , - 1978 , - 143 , - 3476 , - 3273 , - 3886 , - 963 , - 3208 , - 1917 , - 1442 , - 1783 , - 2940 , - 561 , - 3350 , - 2603 , - 2672 , - 3557 , - 906 , - 3423 , - 2404 , - 2201 , - 2814 , - 4243 , - 2136 , - 845 , - 370 , - 711 , - 1868 , - 3841 , - 2278 , - 1531 , - 1600 , - 2485 , - 4186 , - 2351 , - 1332 , - 1129 , - 1742 , - 3171 , - 1064 , - 4125 , - 3650 , - 3991 , - 796 , - 2769 , - 1206 , - 459 , - 528 , - 1413 , - 3114 , - 1279 , - 260 , - 57 , - 670 , - 2099 , - 4344 , - 3053 , - 2578 , - 2919 , - 4076 , - 1697 , - 134 , - 3739 , - 3808 , - 341 , - 2042 , - 207 , - 3540 , - 3337 , - 3950 , - 1027 , - 3272 , - 1981 , - 1506 , - 1847 , - 3004 , - 625 , - 3414 , - 2667 , - 2736 , - 3621 , - 970 , - 3487 , - 2468 , - 2265 , - 2878 , - 4307 , - 2200 , - 909 , - 434 , - 775 , - 1932 , - 3905 , - 2342 , - 1595 , - 1664 , - 2549 , - 4250 , - 2415 , - 1396 , - 1193 , - 1806 , - 3235 , - 1128 , - 4189 , - 3714 , - 4055 , - 860 , - 2833 , - 1270 , - 523 , - 592 , - 1477 , - 3178 , - 1343 , - 324 , - 121 , - 734 , - 2163 , - 56 , - 3117 , - 2642 , - 2983 , - 4140 , - 1761 , - 198 , - 3803 , - 3872 , - 405 , - 2106 , - 271 , - 3604 , - 3401 , - 4014 , - 1091 , - 3336 , - 2045 , - 1570 , - 1911 , - 3068 , - 689 , - 3478 , - 2731 , - 2800 , - 3685 , - 1034 , - 3551 , - 2532 , - 2329 , - 2942 , - 19 , - 2264 , - 973 , - 498 , - 839 , - 1996 , - 3969 , - 2406 , - 1659 , - 1728 , - 2613 , - 4314 , - 2479 , - 1460 , - 1257 , - 1870 , - 3299 , - 1192 , - 4253 , - 3778 , - 4119 , - 924 , - 2897 , - 1334 , - 587 , - 656 , - 1541 , - 3242 , - 1407 , - 388 , - 185 , - 798 , - 2227 , - 120 , - 3181 , - 2706 , - 3047 , - 4204 , - 1825 , - 262 , - 3867 , - 3936 , - 469 , - 2170 , - 335 , - 3668 , - 3465 , - 4078 , - 1155 , - 3400 , - 2109 , - 1634 , - 1975 , - 3132 , - 753 , - 3542 , - 2795 , - 2864 , - 3749 , - 1098 , - 3615 , - 2596 , - 2393 , - 3006 , - 83 , - 2328 , - 1037 , - 562 , - 903 , - 2060 , - 4033 , - 2470 , - 1723 , - 1792 , - 2677 , - 26 , - 2543 , - 1524 , - 1321 , - 1934 , - 3363 , - 1256 , - 4317 , - 3842 , - 4183 , - 988 , - 2961 , - 1398 , - 651 , - 720 , - 1605 , - 3306 , - 1471 , - 452 , - 249 , - 862 , - 2291 , - 184 , - 3245 , - 2770 , - 3111 , - 4268 , - 1889 , - 326 , - 3931 , - 4000 , - 533 , - 2234 , - 399 , - 3732 , - 3529 , - 4142 , - 1219 , - 3464 , - 2173 , - 1698 , - 2039 , - 3196 , - 817 , - 3606 , - 2859 , - 2928 , - 3813 , - 1162 , - 3679 , - 2660 , - 2457 , - 3070 , - 147 , - 2392 , - 1101 , - 626 , - 967 , - 2124 , - 4097 , - 2534 , - 1787 , - 1856 , - 2741 , - 90 , - 2607 , - 1588 , - 1385 , - 1998 , - 3427 , - 1320 , - 29 , - 3906 , - 4247 , - 1052 , - 3025 , - 1462 , - 715 , - 784 , - 1669 , - 3370 , - 1535 , - 516 , - 313 , - 926 , - 2355 , - 248 , - 3309 , - 2834 , - 3175 , - 4332 , - 1953 , - 390 , - 3995 , - 4064 , - 597 , - 2298 , - 463 , - 3796 , - 3593 , - 4206 , - 1283 , - 3528 , - 2237 , - 1762 , - 2103 , - 3260 , - 881 , - 3670 , - 2923 , - 2992 , - 3877 , - 1226 , - 3743 , - 2724 , - 2521 , - 3134 , - 211 , - 2456 , - 1165 , - 690 , - 1031 , - 2188 , - 4161 , - 2598 , - 1851 , - 1920 , - 2805 , - 154 , - 2671 , - 1652 , - 1449 , - 2062 , - 3491 , - 1384 , - 93 , - 3970 , - 4311 , - 1116 , - 3089 , - 1526 , - 779 , - 848 , - 1733 , - 3434 , - 1599 , - 580 , - 377 , - 990 , - 2419 , - 312 , - 3373 , - 2898 , - 3239 , - 44 , - 2017 , - 454 , - 4059 , - 4128 , - 661 , - 2362 , - 527 , - 3860 , - 3657 , - 4270 , - 1347 , - 3592 , - 2301 , - 1826 , - 2167 , - 3324 , - 945 , - 3734 , - 2987 , - 3056 , - 3941 , - 1290 , - 3807 , - 2788 , - 2585 , - 3198 , - 275 , - 2520 , - 1229 , - 754 , - 1095 , - 2252 , - 4225 , - 2662 , - 1915 , - 1984 , - 2869 , - 218 , - 2735 , - 1716 , - 1513 , - 2126 , - 3555 , - 1448 , - 157 , - 4034 , - 23 , - 1180 , - 3153 , - 1590 , - 843 , - 912 , - 1797 , - 3498 , - 1663 , - 644 , - 441 , - 1054 , - 2483 , - 376 , - 3437 , - 2962 , - 3303 , - 108 , - 2081 , - 518 , - 4123 , - 4192 , - 725 , - 2426 , - 591 , - 3924 , - 3721 , - 4334 , - 1411 , - 3656 , - 2365 , - 1890 , - 2231 , - 3388 , - 1009 , - 3798 , - 3051 , - 3120 , - 4005 , - 1354 , - 3871 , - 2852 , - 2649 , - 3262 , - 339 , - 2584 , - 1293 , - 818 , - 1159 , - 2316 , - 4289 , - 2726 , - 1979 , - 2048 , - 2933 , - 282 , - 2799 , - 1780 , - 1577 , - 2190 , - 3619 , - 1512 , - 221 , - 4098 , - 87 , - 1244 , - 3217 , - 1654 , - 907 , - 976 , - 1861 , - 3562 , - 1727 , - 708 , - 505 , - 1118 , - 2547 , - 440 , - 3501 , - 3026 , - 3367 , - 172 , - 2145 , - 582 , - 4187 , - 4256 , - 789 , - 2490 , - 655 , - 3988 , - 3785 , - 46 , - 1475 , - 3720 , - 2429 , - 1954 , - 2295 , - 3452 , - 1073 , - 3862 , - 3115 , - 3184 , - 4069 , - 1418 , - 3935 , - 2916 , - 2713 , - 3326 , - 403 , - 2648 , - 1357 , - 882 , - 1223 , - 2380 , - 1 , - 2790 , - 2043 , - 2112 , - 2997 , - 346 , - 2863 , - 1844 , - 1641 , - 2254 , - 3683 , - 1576 , - 285 , - 4162 , - 151 , - 1308 , - 3281 , - 1718 , - 971 , - 1040 , - 1925 , - 3626 , - 1791 , - 772 , - 569 , - 1182 , - 2611 , - 504 , - 3565 , - 3090 , - 3431 , - 236 , - 2209 , - 646 , - 4251 , - 4320 , - 853 , - 2554 , - 719 , - 4052 , - 3849 , - 110 , - 1539 , - 3784 , - 2493 , - 2018 , - 2359 , - 3516 , - 1137 , - 3926 , - 3179 , - 3248 , - 4133 , - 1482 , - 3999 , - 2980 , - 2777 , - 3390 , - 467 , - 2712 , - 1421 , - 946 , - 1287 , - 2444 , - 65 , - 2854 , - 2107 , - 2176 , - 3061 , - 410 , - 2927 , - 1908 , - 1705 , - 2318 , - 3747 , - 1640 , - 349 , - 4226 , - 215 , - 1372 , - 3345 , - 1782 , - 1035 , - 1104 , - 1989 , - 3690 , - 1855 , - 836 , - 633 , - 1246 , - 2675 , - 568 , - 3629 , - 3154 , - 3495 , - 300 , - 2273 , - 710 , - 4315 , - 32 , - 917 , - 2618 , - 783 , - 4116 , - 3913 , - 174 , - 1603 , - 3848 , - 2557 , - 2082 , - 2423 , - 3580 , - 1201 , - 3990 , - 3243 , - 3312 , - 4197 , - 1546 , - 4063 , - 3044 , - 2841 , - 3454 , - 531 , - 2776 , - 1485 , - 1010 , - 1351 , - 2508 , - 129 , - 2918 , - 2171 , - 2240 , - 3125 , - 474 , - 2991 , - 1972 , - 1769 , - 2382 , - 3811 , - 1704 , - 413 , - 4290 , - 279 , - 1436 , - 3409 , - 1846 , - 1099 , - 1168 , - 2053 , - 3754 , - 1919 , - 900 , - 697 , - 1310 , - 2739 , - 632 , - 3693 , - 3218 , - 3559 , - 364 , - 2337 , - 774 , - 27 , - 96 , - 981 , - 2682 , - 847 , - 4180 , - 3977 , - 238 , - 1667 , - 3912 , - 2621 , - 2146 , - 2487 , - 3644 , - 1265 , - 4054 , - 3307 , - 3376 , - 4261 , - 1610 , - 4127 , - 3108 , - 2905 , - 3518 , - 595 , - 2840 , - 1549 , - 1074 , - 1415 , - 2572 , - 193 , - 2982 , - 2235 , - 2304 , - 3189 , - 538 , - 3055 , - 2036 , - 1833 , - 2446 , - 3875 , - 1768 , - 477 , - 2 , - 343 , - 1500 , - 3473 , - 1910 , - 1163 , - 1232 , - 2117 , - 3818 , - 1983 , - 964 , - 761 , - 1374 , - 2803 , - 696 , - 3757 , - 3282 , - 3623 , - 428 , - 2401 , - 838 , - 91 , - 160 , - 1045 , - 2746 , - 911 , - 4244 , - 4041 , - 302 , - 1731 , - 3976 , - 2685 , - 2210 , - 2551 , - 3708 , - 1329 , - 4118 , - 3371 , - 3440 , - 4325 , - 1674 , - 4191 , - 3172 , - 2969 , - 3582 , - 659 , - 2904 , - 1613 , - 1138 , - 1479 , - 2636 , - 257 , - 3046 , - 2299 , - 2368 , - 3253 , - 602 , - 3119 , - 2100 , - 1897 , - 2510 , - 3939 , - 1832 , - 541 , - 66 , - 407 , - 1564 , - 3537 , - 1974 , - 1227 , - 1296 , - 2181 , - 3882 , - 2047 , - 1028 , - 825 , - 1438 , - 2867 , - 760 , - 3821 , - 3346 , - 3687 , - 492 , - 2465 , - 902 , - 155 , - 224 , - 1109 , - 2810 , - 975 , - 4308 , - 4105 , - 366 , - 1795 , - 4040 , - 2749 , - 2274 , - 2615 , - 3772 , - 1393 , - 4182 , - 3435 , - 3504 , - 37 , - 1738 , - 4255 , - 3236 , - 3033 , - 3646 , - 723 , - 2968 , - 1677 , - 1202 , - 1543 , - 2700 , - 321 , - 3110 , - 2363 , - 2432 , - 3317 , - 666 , - 3183 , - 2164 , - 1961 , - 2574 , - 4003 , - 1896 , - 605 , - 130 , - 471 , - 1628 , - 3601 , - 2038 , - 1291 , - 1360 , - 2245 , - 3946 , - 2111 , - 1092 , - 889 , - 1502 , - 2931 , - 824 , - 3885 , - 3410 , - 3751 , - 556 , - 2529 , - 966 , - 219 , - 288 , - 1173 , - 2874 , - 1039 , - 20 , - 4169 , - 430 , - 1859 , - 4104 , - 2813 , - 2338 , - 2679 , - 3836 , - 1457 , - 4246 , - 3499 , - 3568 , - 101 , - 1802 , - 4319 , - 3300 , - 3097 , - 3710 , - 787 , - 3032 , - 1741 , - 1266 , - 1607 , - 2764 , - 385 , - 3174 , - 2427 , - 2496 , - 3381 , - 730 , - 3247 , - 2228 , - 2025 , - 2638 , - 4067 , - 1960 , - 669 , - 194 , - 535 , - 1692 , - 3665 , - 2102 , - 1355 , - 1424 , - 2309 , - 4010 , - 2175 , - 1156 , - 953 , - 1566 , - 2995 , - 888 , - 3949 , - 3474 , - 3815 , - 620 , - 2593 , - 1030 , - 283 , - 352 , - 1237 , - 2938 , - 1103 , - 84 , - 4233 , - 494 , - 1923 , - 4168 , - 2877 , - 2402 , - 2743 , - 3900 , - 1521 , - 4310 , - 3563 , - 3632 , - 165 , - 1866 , - 31 , - 3364 , - 3161 , - 3774 , - 851 , - 3096 , - 1805 , - 1330 , - 1671 , - 2828 , - 449 , - 3238 , - 2491 , - 2560 , - 3445 , - 794 , - 3311 , - 2292 , - 2089 , - 2702 , - 4131 , - 2024 , - 733 , - 258 , - 599 , - 1756 , - 3729 , - 2166 , - 1419 , - 1488 , - 2373 , - 4074 , - 2239 , - 1220 , - 1017 , - 1630 , - 3059 , - 952 , - 4013 , - 3538 , - 3879 , - 684 , - 2657 , - 1094 , - 347 , - 416 , - 1301 , - 3002 , - 1167 , - 148 , - 4297 , - 558 , - 1987 , - 4232 , - 2941 , - 2466 , - 2807 , - 3964 , - 1585 , - 22 , - 3627 , - 3696 , - 229 , - 1930 , - 95 , - 3428 , - 3225 , - 3838 , - 915 , - 3160 , - 1869 , - 1394 , - 1735 , - 2892 , - 513 , - 3302 , - 2555 , - 2624 , - 3509 , - 858 , - 3375 , - 2356 , - 2153 , - 2766 , - 4195 , - 2088 , - 797 , - 322 , - 663 , - 1820 , - 3793 , - 2230 , - 1483 , - 1552 , - 2437 , - 4138 , - 2303 , - 1284 , - 1081 , - 1694 , - 3123 , - 1016 , - 4077 , - 3602 , - 3943 , - 748 , - 2721 , - 1158 , - 411 , - 480 , - 1365 , - 3066 , - 1231 , - 212 , - 9 , - 622 , - 2051 , - 4296 , - 3005 , - 2530 , - 2871 , - 4028 , - 1649 , - 86 , - 3691 , - 3760 , - 293 , - 1994 , - 159 , - 3492 , - 3289 , - 3902 , - 979 , - 3224 , - 1933 , - 1458 , - 1799 , - 2956 , - 577 , - 3366 , - 2619 , - 2688 , - 3573 , - 922 , - 3439 , - 2420 , - 2217 , - 2830 , - 4259 , - 2152 , - 861 , - 386 , - 727 , - 1884 , - 3857 , - 2294 , - 1547 , - 1616 , - 2501 , - 4202 , - 2367 , - 1348 , - 1145 , - 1758 , - 3187 , - 1080 , - 4141 , - 3666 , - 4007 , - 812 , - 2785 , - 1222 , - 475 , - 544 , - 1429 , - 3130 , - 1295 , - 276 , - 73 , - 686 , - 2115 , - 8 , - 3069 , - 2594 , - 2935 , - 4092 , - 1713 , - 150 , - 3755 , - 3824 , - 357 , - 2058 , - 223 , - 3556 , - 3353 , - 3966 , - 1043 , - 3288 , - 1997 , - 1522 , - 1863 , - 3020 , - 641 , - 3430 , - 2683 , - 2752 , - 3637 , - 986 , - 3503 , - 2484 , - 2281 , - 2894 , - 4323 , - 2216 , - 925 , - 450 , - 791 , - 1948 , - 3921 , - 2358 , - 1611 , - 1680 , - 2565 , - 4266 , - 2431 , - 1412 , - 1209 , - 1822 , - 3251 , - 1144 , - 4205 , - 3730 , - 4071 , - 876 , - 2849 , - 1286 , - 539 , - 608 , - 1493 , - 3194 , - 1359 , - 340 , - 137 , - 750 , - 2179 , - 72 , - 3133 , - 2658 , - 2999 , - 4156 , - 1777 , - 214 , - 3819 , - 3888 , - 421 , - 2122 , - 287 , - 3620 , - 3417 , - 4030 , - 1107 , - 3352 , - 2061 , - 1586 , - 1927 , - 3084 , - 705 , - 3494 , - 2747 , - 2816 , - 3701 , - 1050 , - 3567 , - 2548 , - 2345 , - 2958 , - 35 , - 2280 , - 989 , - 514 , - 855 , - 2012 , - 3985 , - 2422 , - 1675 , - 1744 , - 2629 , - 4330 , - 2495 , - 1476 , - 1273 , - 1886 , - 3315 , - 1208 , - 4269 , - 3794 , - 4135 , - 940 , - 2913 , - 1350 , - 603 , - 672 , - 1557 , - 3258 , - 1423 , - 404 , - 201 , - 814 , - 2243 , - 136 , - 3197 , - 2722 , - 3063 , - 4220 , - 1841 , - 278 , - 3883 , - 3952 , - 485 , - 2186 , - 351 , - 3684 , - 3481 , - 4094 , - 1171 , - 3416 , - 2125 , - 1650 , - 1991 , - 3148 , - 769 , - 3558 , - 2811 , - 2880 , - 3765 , - 1114 , - 3631 , - 2612 , - 2409 , - 3022 , - 99 , - 2344 , - 1053 , - 578 , - 919 , - 2076 , - 4049 , - 2486 , - 1739 , - 1808 , - 2693 , - 42 , - 2559 , - 1540 , - 1337 , - 1950 , - 3379 , - 1272 , - 4333 , - 3858 , - 4199 , - 1004 , - 2977 , - 1414 , - 667 , - 736 , - 1621 , - 3322 , - 1487 , - 468 , - 265 , - 878 , - 2307 , - 200 , - 3261 , - 2786 , - 3127 , - 4284 , - 1905 , - 342 , - 3947 , - 4016 , - 549 , - 2250 , - 415 , - 3748 , - 3545 , - 4158 , - 1235 , - 3480 , - 2189 , - 1714 , - 2055 , - 3212 , - 833 , - 3622 , - 2875 , - 2944 , - 3829 , - 1178 , - 3695 , - 2676 , - 2473 , - 3086 , - 163 , - 2408 , - 1117 , - 642 , - 983 , - 2140 , - 4113 , - 2550 , - 1803 , - 1872 , - 2757 , - 106 , - 2623 , - 1604 , - 1401 , - 2014 , - 3443 , - 1336 , - 45 , - 3922 , - 4263 , - 1068 , - 3041 , - 1478 , - 731 , - 800 , - 1685 , - 3386 , - 1551 , - 532 , - 329 , - 942 , - 2371 , - 264 , - 3325 , - 2850 , - 3191 , - 4348 , - 1969 , - 406 , - 4011 , - 4080 , - 613 , - 2314 , - 479 , - 3812 , - 3609 , - 4222 , - 1299 , - 3544 , - 2253 , - 1778 , - 2119 , - 3276 , - 897 , - 3686 , - 2939 , - 3008 , - 3893 , - 1242 , - 3759 , - 2740 , - 2537 , - 3150 , - 227 , - 2472 , - 1181 , - 706 , - 1047 , - 2204 , - 4177 , - 2614 , - 1867 , - 1936 , - 2821 , - 170 , - 2687 , - 1668 , - 1465 , - 2078 , - 3507 , - 1400 , - 109 , - 3986 , - 4327 , - 1132 , - 3105 , - 1542 , - 795 , - 864 , - 1749 , - 3450 , - 1615 , - 596 , - 393 , - 1006 , - 2435 , - 328 , - 3389 , - 2914 , - 3255 , - 60 , - 2033 , - 470 , - 4075 , - 4144 , - 677 , - 2378 , - 543 , - 3876 , - 3673 , - 4286 , - 1363 , - 3608 , - 2317 , - 1842 , - 2183 , - 3340 , - 961 , - 3750 , - 3003 , - 3072 , - 3957 , - 1306 , - 3823 , - 2804 , - 2601 , - 3214 , - 291 , - 2536 , - 1245 , - 770 , - 1111 , - 2268 , - 4241 , - 2678 , - 1931 , - 2000 , - 2885 , - 234 , - 2751 , - 1732 , - 1529 , - 2142 , - 3571 , - 1464 , - 173 , - 4050 , - 39 , - 1196 , - 3169 , - 1606 , - 859 , - 928 , - 1813 , - 3514 , - 1679 , - 660 , - 457 , - 1070 , - 2499 , - 392 , - 3453 , - 2978 , - 3319 , - 124 , - 2097 , - 534 , - 4139 , - 4208 , - 741 , - 2442 , - 607 , - 3940 , - 3737 , - 4350 , - 1427 , - 3672 , - 2381 , - 1906 , - 2247 , - 3404 , - 1025 , - 3814 , - 3067 , - 3136 , - 4021 , - 1370 , - 3887 , - 2868 , - 2665 , - 3278 , - 355 , - 2600 , - 1309 , - 834 , - 1175 , - 2332 , - 4305 , - 2742 , - 1995 , - 2064 , - 2949 , - 298 , - 2815 , - 1796 , - 1593 , - 2206 , - 3635 , - 1528 , - 237 , - 4114 , - 103 , - 1260 , - 3233 , - 1670 , - 923 , - 992 , - 1877 , - 3578 , - 1743 , - 724 , - 521 , - 1134 , - 2563 , - 456 , - 3517 , - 3042 , - 3383 , - 188 , - 2161 , - 598 , - 4203 , - 4272 , - 805 , - 2506 , - 671 , - 4004 , - 3801 , - 62 , - 1491 , - 3736 , - 2445 , - 1970 , - 2311 , - 3468 , - 1089 , - 3878 , - 3131 , - 3200 , - 4085 , - 1434 , - 3951 , - 2932 , - 2729 , - 3342 , - 419 , - 2664 , - 1373 , - 898 , - 1239 , - 2396 , - 17 , - 2806 , - 2059 , - 2128 , - 3013 , - 362 , - 2879 , - 1860 , - 1657 , - 2270 , - 3699 , - 1592 , - 301 , - 4178 , - 167 , - 1324 , - 3297 , - 1734 , - 987 , - 1056 , - 1941 , - 3642 , - 1807 , - 788 , - 585 , - 1198 , - 2627 , - 520 , - 3581 , - 3106 , - 3447 , - 252 , - 2225 , - 662 , - 4267 , - 4336 , - 869 , - 2570 , - 735 , - 4068 , - 3865 , - 126 , - 1555 , - 3800 , - 2509 , - 2034 , - 2375 , - 3532 , - 1153 , - 3942 , - 3195 , - 3264 , - 4149 , - 1498 , - 4015 , - 2996 , - 2793 , - 3406 , - 483 , - 2728 , - 1437 , - 962 , - 1303 , - 2460 , - 81 , - 2870 , - 2123 , - 2192 , - 3077 , - 426 , - 2943 , - 1924 , - 1721 , - 2334 , - 3763 , - 1656 , - 365 , - 4242 , - 231 , - 1388 , - 3361 , - 1798 , - 1051 , - 1120 , - 2005 , - 3706 , - 1871 , - 852 , - 649 , - 1262 , - 2691 , - 584 , - 3645 , - 3170 , - 3511 , - 316 , - 2289 , - 726 , - 4331 , - 48 , - 933 , - 2634 , - 799 , - 4132 , - 3929 , - 190 , - 1619 , - 3864 , - 2573 , - 2098 , - 2439 , - 3596 , - 1217 , - 4006 , - 3259 , - 3328 , - 4213 , - 1562 , - 4079 , - 3060 , - 2857 , - 3470 , - 547 , - 2792 , - 1501 , - 1026 , - 1367 , - 2524 , - 145 , - 2934 , - 2187 , - 2256 , - 3141 , - 490 , - 3007 , - 1988 , - 1785 , - 2398 , - 3827 , - 1720 , - 429 , - 4306 , - 295 , - 1452 , - 3425 , - 1862 , - 1115 , - 1184 , - 2069 , - 3770 , - 1935 , - 916 , - 713 , - 1326 , - 2755 , - 648 , - 3709 , - 3234 , - 3575 , - 380 , - 2353 , - 790 , - 43 , - 112 , - 997 , - 2698 , - 863 , - 4196 , - 3993 , - 254 , - 1683 , - 3928 , - 2637 , - 2162 , - 2503 , - 3660 , - 1281 , - 4070 , - 3323 , - 3392 , - 4277 , - 1626 , - 4143 , - 3124 , - 2921 , - 3534 , - 611 , - 2856 , - 1565 , - 1090 , - 1431 , - 2588 , - 209 , - 2998 , - 2251 , - 2320 , - 3205 , - 554 , - 3071 , - 2052 , - 1849 , - 2462 , - 3891 , - 1784 , - 493 , - 18 , - 359 , - 1516 , - 3489 , - 1926 , - 1179 , - 1248 , - 2133 , - 3834 , - 1999 , - 980 , - 777 , - 1390 , - 2819 , - 712 , - 3773 , - 3298 , - 3639 , - 444 , - 2417 , - 854 , - 107 , - 176 , - 1061 , - 2762 , - 927 , - 4260 , - 4057 , - 318 , - 1747 , - 3992 , - 2701 , - 2226 , - 2567 , - 3724 , - 1345 , - 4134 , - 3387 , - 3456 , - 4341 , - 1690 , - 4207 , - 3188 , - 2985 , - 3598 , - 675 , - 2920 , - 1629 , - 1154 , - 1495 , - 2652 , - 273 , - 3062 , - 2315 , - 2384 , - 3269 , - 618 , - 3135 , - 2116 , - 1913 , - 2526 , - 3955 , - 1848 , - 557 , - 82 , - 423 , - 1580 , - 3553 , - 1990 , - 1243 , - 1312 , - 2197 , - 3898 , - 2063 , - 1044 , - 841 , - 1454 , - 2883 , - 776 , - 3837 , - 3362 , - 3703 , - 508 , - 2481 , - 918 , - 171 , - 240 , - 1125 , - 2826 , - 991 , - 4324 , - 4121 , - 382 , - 1811 , - 4056 , - 2765 , - 2290 , - 2631 , - 3788 , - 1409 , - 4198 , - 3451 , - 3520 , - 53 , - 1754 , - 4271 , - 3252 , - 3049 , - 3662 , - 739 , - 2984 , - 1693 , - 1218 , - 1559 , - 2716 , - 337 , - 3126 , - 2379 , - 2448 , - 3333 , - 682 , - 3199 , - 2180 , - 1977 , - 2590 , - 4019 , - 1912 , - 621 , - 146 , - 487 , - 1644 , - 3617 , - 2054 , - 1307 , - 1376 , - 2261 , - 3962 , - 2127 , - 1108 , - 905 , - 1518 , - 2947 , - 840 , - 3901 , - 3426 , - 3767 , - 572 , - 2545 , - 982 , - 235 , - 304 , - 1189 , - 2890 , - 1055 , - 36 , - 4185 , - 446 , - 1875 , - 4120 , - 2829 , - 2354 , - 2695 , - 3852 , - 1473 , - 4262 , - 3515 , - 3584 , - 117 , - 1818 , - 4335 , - 3316 , - 3113 , - 3726 , - 803 , - 3048 , - 1757 , - 1282 , - 1623 , - 2780 , - 401 , - 3190 , - 2443 , - 2512 , - 3397 , - 746 , - 3263 , - 2244 , - 2041 , - 2654 , - 4083 , - 1976 , - 685 , - 210 , - 551 , - 1708 , - 3681 , - 2118 , - 1371 , - 1440 , - 2325 , - 4026 , - 2191 , - 1172 , - 969 , - 1582 , - 3011 , - 904 , - 3965 , - 3490 , - 3831 , - 636 , - 2609 , - 1046 , - 299 , - 368 , - 1253 , - 2954 , - 1119 , - 100 , - 4249 , - 510 , - 1939 , - 4184 , - 2893 , - 2418 , - 2759 , - 3916 , - 1537 , - 4326 , - 3579 , - 3648 , - 181 , - 1882 , - 47 , - 3380 , - 3177 , - 3790 , - 867 , - 3112 , - 1821 , - 1346 , - 1687 , - 2844 , - 465 , - 3254 , - 2507 , - 2576 , - 3461 , - 810 , - 3327 , - 2308 , - 2105 , - 2718 , - 4147 , - 2040 , - 749 , - 274 , - 615 , - 1772 , - 3745 , - 2182 , - 1435 , - 1504 , - 2389 , - 4090 , - 2255 , - 1236 , - 1033 , - 1646 , - 3075 , - 968 , - 4029 , - 3554 , - 3895 , - 700 , - 2673 , - 1110 , - 363 , - 432 , - 1317 , - 3018 , - 1183 , - 164 , - 4313 , - 574 , - 2003 , - 4248 , - 2957 , - 2482 , - 2823 , - 3980 , - 1601 , - 38 , - 3643 , - 3712 , - 245 , - 1946 , - 111 , - 3444 , - 3241 , - 3854 , - 931 , - 3176 , - 1885 , - 1410 , - 1751 , - 2908 , - 529 , - 3318 , - 2571 , - 2640 , - 3525 , - 874 , - 3391 , - 2372 , - 2169 , - 2782 , - 4211 , - 2104 , - 813 , - 338 , - 679 , - 1836 , - 3809 , - 2246 , - 1499 , - 1568 , - 2453 , - 4154 , - 2319 , - 1300 , - 1097 , - 1710 , - 3139 , - 1032 , - 4093 , - 3618 , - 3959 , - 764 , - 2737 , - 1174 , - 427 , - 496 , - 1381 , - 3082 , - 1247 , - 228 , - 25 , - 638 , - 2067 , - 4312 , - 3021 , - 2546 , - 2887 , - 4044 , - 1665 , - 102 , - 3707 , - 3776 , - 309 , - 2010 , - 175 , - 3508 , - 3305 , - 3918 , - 995 , - 3240 , - 1949 , - 1474 , - 1815 , - 2972 , - 593 , - 3382 , - 2635 , - 2704 , - 3589 , - 938 , - 3455 , - 2436 , - 2233 , - 2846 , - 4275 , - 2168 , - 877 , - 402 , - 743 , - 1900 , - 3873 , - 2310 , - 1563 , - 1632 , - 2517 , - 4218 , - 2383 , - 1364 , - 1161 , - 1774 , - 3203 , - 1096 , - 4157 , - 3682 , - 4023 , - 828 , - 2801 , - 1238 , - 491 , - 560 , - 1445 , - 3146 , - 1311 , - 292 , - 89 , - 702 , - 2131 , - 24 , - 3085 , - 2610 , - 2951 , - 4108 , - 1729 , - 166 , - 3771 , - 3840 , - 373 , - 2074 , - 239 , - 3572 , - 3369 , - 3982 , - 1059 , - 3304 , - 2013 , - 1538 , - 1879 , - 3036 , - 657 , - 3446 , - 2699 , - 2768 , - 3653 , - 1002 , - 3519 , - 2500 , - 2297 , - 2910 , - 4339 , - 2232 , - 941 , - 466 , - 807 , - 1964 , - 3937 , - 2374 , - 1627 , - 1696 , - 2581 , - 4282 , - 2447 , - 1428 , - 1225 , - 1838 , - 3267 , - 1160 , - 4221 , - 3746 , - 4087 , - 892 , - 2865 , - 1302 , - 555 , - 624 , - 1509 , - 3210 , - 1375 , - 356 , - 153 , - 766 , - 2195 , - 88 , - 3149 , - 2674 , - 3015 , - 4172 , - 1793 , - 230 , - 3835 , - 3904 , - 437 , - 2138 , - 303 , - 3636 , - 3433 , - 4046 , - 1123 , - 3368 , - 2077 , - 1602 , - 1943 , - 3100 , - 721 , - 3510 , - 2763 , - 2832 , - 3717 , - 1066 , - 3583 , - 2564 , - 2361 , - 2974 , - 51 , - 2296 , - 1005 , - 530 , - 871 , - 2028 , - 4001 , - 2438 , - 1691 , - 1760 , - 2645 , - 4346 , - 2511 , - 1492 , - 1289 , - 1902 , - 3331 , - 1224 , - 4285 , - 3810 , - 4151 , - 956 , - 2929 , - 1366 , - 619 , - 688 , - 1573 , - 3274 , - 1439 , - 420 , - 217 , - 830 , - 2259 , - 152 , - 3213 , - 2738 , - 3079 , - 4236 , - 1857 , - 294 , - 3899 , - 3968 , - 501 , - 2202 , - 367 , - 3700 , - 3497 , - 4110 , - 1187 , - 3432 , - 2141 , - 1666 , - 2007 , - 3164 , - 785 , - 3574 , - 2827 , - 2896 , - 3781 , - 1130 , - 3647 , - 2628 , - 2425 , - 3038 , - 115 , - 2360 , - 1069 , - 594 , - 935 , - 2092 , - 4065 , - 2502 , - 1755 , - 1824 , - 2709 , - 58 , - 2575 , - 1556 , - 1353 , - 1966 , - 3395 , - 1288 , - 4349 , - 3874 , - 4215 , - 1020 , - 2993 , - 1430 , - 683 , - 752 , - 1637 , - 3338 , - 1503 , - 484 , - 281 , - 894 , - 2323 , - 216 , - 3277 , - 2802 , - 3143 , - 4300 , - 1921 , - 358 , - 3963 , - 4032 , - 565 , - 2266 , - 431 , - 3764 , - 3561 , - 4174 , - 1251 , - 3496 , - 2205 , - 1730 , - 2071 , - 3228 , - 849 , - 3638 , - 2891 , - 2960 , - 3845 , - 1194 , - 3711 , - 2692 , - 2489 , - 3102 , - 179 , - 2424 , - 1133 , - 658 , - 999 , - 2156 , - 4129 , - 2566 , - 1819 , - 1888 , - 2773 , - 122 , - 2639 , - 1620 , - 1417 , - 2030 , - 3459 , - 1352 , - 61 , - 3938 , - 4279 , - 1084 , - 3057 , - 1494 , - 747 , - 816 , - 1701 , - 3402 , - 1567 , - 548 , - 345 , - 958 , - 2387 , - 280 , - 3341 , - 2866 , - 3207 , - 12 , - 1985 , - 422 , - 4027 , - 4096 , - 629 , - 2330 , - 495 , - 3828 , - 3625 , - 4238 , - 1315 , - 3560 , - 2269 , - 1794 , - 2135 , - 3292 , - 913 , - 3702 , - 2955 , - 3024 , - 3909 , - 1258 , - 3775 , - 2756 , - 2553 , - 3166 , - 243 , - 2488 , - 1197 , - 722 , - 1063 , - 2220 , - 4193 , - 2630 , - 1883 , - 1952 , - 2837 , - 186 , - 2703 , - 1684 , - 1481 , - 2094 , - 3523 , - 1416 , - 125 , - 4002 , - 4343 , - 1148 , - 3121 , - 1558 , - 811 , - 880 , - 1765 , - 3466 , - 1631 , - 612 , - 409 , - 1022 , - 2451 , - 344 , - 3405 , - 2930 , - 3271 , - 76 , - 2049 , - 486 , - 4091 , - 4160 , - 693 , - 2394 , - 559 , - 3892 , - 3689 , - 4302 , - 1379 , - 3624 , - 2333 , - 1858 , - 2199 , - 3356 , - 977 , - 3766 , - 3019 , - 3088 , - 3973 , - 1322 , - 3839 , - 2820 , - 2617 , - 3230 , - 307 , - 2552 , - 1261 , - 786 , - 1127 , - 2284 , - 4257 , - 2694 , - 1947 , - 2016 , - 2901 , - 250 , - 2767 , - 1748 , - 1545 , - 2158 , - 3587 , - 1480 , - 189 , - 4066 , - 55 , - 1212 , - 3185 , - 1622 , - 875 , - 944 , - 1829 , - 3530 , - 1695 , - 676 , - 473 , - 1086 , - 2515 , - 408 , - 3469 , - 2994 , - 3335 , - 140 , - 2113 , - 550 , - 4155 , - 4224 , - 757 , - 2458 , - 623 , - 3956 , - 3753 , - 14 , - 1443 , - 3688 , - 2397 , - 1922 , - 2263 , - 3420 , - 1041 , - 3830 , - 3083 , - 3152 , - 4037 , - 1386 , - 3903 , - 2884 , - 2681 , - 3294 , - 371 , - 2616 , - 1325 , - 850 , - 1191 , - 2348 , - 4321 , - 2758 , - 2011 , - 2080 , - 2965 , - 314 , - 2831 , - 1812 , - 1609 , - 2222 , - 3651 , - 1544 , - 253 , - 4130 , - 119 , - 1276 , - 3249 , - 1686 , - 939 , - 1008 , - 1893 , - 3594 , - 1759 , - 740 , - 537 , - 1150 , - 2579 , - 472 , - 3533 , - 3058 , - 3399 , - 204 , - 2177 , - 614 , - 4219 , - 4288 , - 821 , - 2522 , - 687 , - 4020 , - 3817 , - 78 , - 1507 , - 3752 , - 2461 , - 1986 , - 2327 , - 3484 , - 1105 , - 3894 , - 3147 , - 3216 , - 4101 , - 1450 , - 3967 , - 2948 , - 2745 , - 3358 , - 435 , - 2680 , - 1389 , - 914 , - 1255 , - 2412 , - 33 , - 2822 , - 2075 , - 2144 , - 3029 , - 378 , - 2895 , - 1876 , - 1673 , - 2286 , - 3715 , - 1608 , - 317 , - 4194 , - 183 , - 1340 , - 3313 , - 1750 , - 1003 , - 1072 , - 1957 , - 3658 , - 1823 , - 804 , - 601 , - 1214 , - 2643 , - 536 , - 3597 , - 3122 , - 3463 , - 268 , - 2241 , - 678 , - 4283 , - 0 , - 173 , - 622 , - 1347 , - 2348 , - 3625 , - 762 , - 2591 , - 280 , - 2661 , - 902 , - 3835 , - 2628 , - 1697 , - 1042 , - 663 , - 560 , - 733 , - 1182 , - 1907 , - 2908 , - 4185 , - 1322 , - 3151 , - 840 , - 3221 , - 1462 , - 4395 , - 3188 , - 2257 , - 1602 , - 1223 , - 1120 , - 1293 , - 1742 , - 2467 , - 3468 , - 329 , - 1882 , - 3711 , - 1400 , - 3781 , - 2022 , - 539 , - 3748 , - 2817 , - 2162 , - 1783 , - 1680 , - 1853 , - 2302 , - 3027 , - 4028 , - 889 , - 2442 , - 4271 , - 1960 , - 4341 , - 2582 , - 1099 , - 4308 , - 3377 , - 2722 , - 2343 , - 2240 , - 2413 , - 2862 , - 3587 , - 172 , - 1449 , - 3002 , - 415 , - 2520 , - 485 , - 3142 , - 1659 , - 452 , - 3937 , - 3282 , - 2903 , - 2800 , - 2973 , - 3422 , - 4147 , - 732 , - 2009 , - 3562 , - 975 , - 3080 , - 1045 , - 3702 , - 2219 , - 1012 , - 81 , - 3842 , - 3463 , - 3360 , - 3533 , - 3982 , - 291 , - 1292 , - 2569 , - 4122 , - 1535 , - 3640 , - 1605 , - 4262 , - 2779 , - 1572 , - 641 , - 4402 , - 4023 , - 3920 , - 4093 , - 126 , - 851 , - 1852 , - 3129 , - 266 , - 2095 , - 4200 , - 2165 , - 406 , - 3339 , - 2132 , - 1201 , - 546 , - 167 , - 64 , - 237 , - 686 , - 1411 , - 2412 , - 3689 , - 826 , - 2655 , - 344 , - 2725 , - 966 , - 3899 , - 2692 , - 1761 , - 1106 , - 727 , - 624 , - 797 , - 1246 , - 1971 , - 2972 , - 4249 , - 1386 , - 3215 , - 904 , - 3285 , - 1526 , - 43 , - 3252 , - 2321 , - 1666 , - 1287 , - 1184 , - 1357 , - 1806 , - 2531 , - 3532 , - 393 , - 1946 , - 3775 , - 1464 , - 3845 , - 2086 , - 603 , - 3812 , - 2881 , - 2226 , - 1847 , - 1744 , - 1917 , - 2366 , - 3091 , - 4092 , - 953 , - 2506 , - 4335 , - 2024 , - 4405 , - 2646 , - 1163 , - 4372 , - 3441 , - 2786 , - 2407 , - 2304 , - 2477 , - 2926 , - 3651 , - 236 , - 1513 , - 3066 , - 479 , - 2584 , - 549 , - 3206 , - 1723 , - 516 , - 4001 , - 3346 , - 2967 , - 2864 , - 3037 , - 3486 , - 4211 , - 796 , - 2073 , - 3626 , - 1039 , - 3144 , - 1109 , - 3766 , - 2283 , - 1076 , - 145 , - 3906 , - 3527 , - 3424 , - 3597 , - 4046 , - 355 , - 1356 , - 2633 , - 4186 , - 1599 , - 3704 , - 1669 , - 4326 , - 2843 , - 1636 , - 705 , - 50 , - 4087 , - 3984 , - 4157 , - 190 , - 915 , - 1916 , - 3193 , - 330 , - 2159 , - 4264 , - 2229 , - 470 , - 3403 , - 2196 , - 1265 , - 610 , - 231 , - 128 , - 301 , - 750 , - 1475 , - 2476 , - 3753 , - 890 , - 2719 , - 408 , - 2789 , - 1030 , - 3963 , - 2756 , - 1825 , - 1170 , - 791 , - 688 , - 861 , - 1310 , - 2035 , - 3036 , - 4313 , - 1450 , - 3279 , - 968 , - 3349 , - 1590 , - 107 , - 3316 , - 2385 , - 1730 , - 1351 , - 1248 , - 1421 , - 1870 , - 2595 , - 3596 , - 457 , - 2010 , - 3839 , - 1528 , - 3909 , - 2150 , - 667 , - 3876 , - 2945 , - 2290 , - 1911 , - 1808 , - 1981 , - 2430 , - 3155 , - 4156 , - 1017 , - 2570 , - 4399 , - 2088 , - 53 , - 2710 , - 1227 , - 20 , - 3505 , - 2850 , - 2471 , - 2368 , - 2541 , - 2990 , - 3715 , - 300 , - 1577 , - 3130 , - 543 , - 2648 , - 613 , - 3270 , - 1787 , - 580 , - 4065 , - 3410 , - 3031 , - 2928 , - 3101 , - 3550 , - 4275 , - 860 , - 2137 , - 3690 , - 1103 , - 3208 , - 1173 , - 3830 , - 2347 , - 1140 , - 209 , - 3970 , - 3591 , - 3488 , - 3661 , - 4110 , - 419 , - 1420 , - 2697 , - 4250 , - 1663 , - 3768 , - 1733 , - 4390 , - 2907 , - 1700 , - 769 , - 114 , - 4151 , - 4048 , - 4221 , - 254 , - 979 , - 1980 , - 3257 , - 394 , - 2223 , - 4328 , - 2293 , - 534 , - 3467 , - 2260 , - 1329 , - 674 , - 295 , - 192 , - 365 , - 814 , - 1539 , - 2540 , - 3817 , - 954 , - 2783 , - 472 , - 2853 , - 1094 , - 4027 , - 2820 , - 1889 , - 1234 , - 855 , - 752 , - 925 , - 1374 , - 2099 , - 3100 , - 4377 , - 1514 , - 3343 , - 1032 , - 3413 , - 1654 , - 171 , - 3380 , - 2449 , - 1794 , - 1415 , - 1312 , - 1485 , - 1934 , - 2659 , - 3660 , - 521 , - 2074 , - 3903 , - 1592 , - 3973 , - 2214 , - 731 , - 3940 , - 3009 , - 2354 , - 1975 , - 1872 , - 2045 , - 2494 , - 3219 , - 4220 , - 1081 , - 2634 , - 47 , - 2152 , - 117 , - 2774 , - 1291 , - 84 , - 3569 , - 2914 , - 2535 , - 2432 , - 2605 , - 3054 , - 3779 , - 364 , - 1641 , - 3194 , - 607 , - 2712 , - 677 , - 3334 , - 1851 , - 644 , - 4129 , - 3474 , - 3095 , - 2992 , - 3165 , - 3614 , - 4339 , - 924 , - 2201 , - 3754 , - 1167 , - 3272 , - 1237 , - 3894 , - 2411 , - 1204 , - 273 , - 4034 , - 3655 , - 3552 , - 3725 , - 4174 , - 483 , - 1484 , - 2761 , - 4314 , - 1727 , - 3832 , - 1797 , - 38 , - 2971 , - 1764 , - 833 , - 178 , - 4215 , - 4112 , - 4285 , - 318 , - 1043 , - 2044 , - 3321 , - 458 , - 2287 , - 4392 , - 2357 , - 598 , - 3531 , - 2324 , - 1393 , - 738 , - 359 , - 256 , - 429 , - 878 , - 1603 , - 2604 , - 3881 , - 1018 , - 2847 , - 536 , - 2917 , - 1158 , - 4091 , - 2884 , - 1953 , - 1298 , - 919 , - 816 , - 989 , - 1438 , - 2163 , - 3164 , - 25 , - 1578 , - 3407 , - 1096 , - 3477 , - 1718 , - 235 , - 3444 , - 2513 , - 1858 , - 1479 , - 1376 , - 1549 , - 1998 , - 2723 , - 3724 , - 585 , - 2138 , - 3967 , - 1656 , - 4037 , - 2278 , - 795 , - 4004 , - 3073 , - 2418 , - 2039 , - 1936 , - 2109 , - 2558 , - 3283 , - 4284 , - 1145 , - 2698 , - 111 , - 2216 , - 181 , - 2838 , - 1355 , - 148 , - 3633 , - 2978 , - 2599 , - 2496 , - 2669 , - 3118 , - 3843 , - 428 , - 1705 , - 3258 , - 671 , - 2776 , - 741 , - 3398 , - 1915 , - 708 , - 4193 , - 3538 , - 3159 , - 3056 , - 3229 , - 3678 , - 4403 , - 988 , - 2265 , - 3818 , - 1231 , - 3336 , - 1301 , - 3958 , - 2475 , - 1268 , - 337 , - 4098 , - 3719 , - 3616 , - 3789 , - 4238 , - 547 , - 1548 , - 2825 , - 4378 , - 1791 , - 3896 , - 1861 , - 102 , - 3035 , - 1828 , - 897 , - 242 , - 4279 , - 4176 , - 4349 , - 382 , - 1107 , - 2108 , - 3385 , - 522 , - 2351 , - 40 , - 2421 , - 662 , - 3595 , - 2388 , - 1457 , - 802 , - 423 , - 320 , - 493 , - 942 , - 1667 , - 2668 , - 3945 , - 1082 , - 2911 , - 600 , - 2981 , - 1222 , - 4155 , - 2948 , - 2017 , - 1362 , - 983 , - 880 , - 1053 , - 1502 , - 2227 , - 3228 , - 89 , - 1642 , - 3471 , - 1160 , - 3541 , - 1782 , - 299 , - 3508 , - 2577 , - 1922 , - 1543 , - 1440 , - 1613 , - 2062 , - 2787 , - 3788 , - 649 , - 2202 , - 4031 , - 1720 , - 4101 , - 2342 , - 859 , - 4068 , - 3137 , - 2482 , - 2103 , - 2000 , - 2173 , - 2622 , - 3347 , - 4348 , - 1209 , - 2762 , - 175 , - 2280 , - 245 , - 2902 , - 1419 , - 212 , - 3697 , - 3042 , - 2663 , - 2560 , - 2733 , - 3182 , - 3907 , - 492 , - 1769 , - 3322 , - 735 , - 2840 , - 805 , - 3462 , - 1979 , - 772 , - 4257 , - 3602 , - 3223 , - 3120 , - 3293 , - 3742 , - 51 , - 1052 , - 2329 , - 3882 , - 1295 , - 3400 , - 1365 , - 4022 , - 2539 , - 1332 , - 401 , - 4162 , - 3783 , - 3680 , - 3853 , - 4302 , - 611 , - 1612 , - 2889 , - 26 , - 1855 , - 3960 , - 1925 , - 166 , - 3099 , - 1892 , - 961 , - 306 , - 4343 , - 4240 , - 4413 , - 446 , - 1171 , - 2172 , - 3449 , - 586 , - 2415 , - 104 , - 2485 , - 726 , - 3659 , - 2452 , - 1521 , - 866 , - 487 , - 384 , - 557 , - 1006 , - 1731 , - 2732 , - 4009 , - 1146 , - 2975 , - 664 , - 3045 , - 1286 , - 4219 , - 3012 , - 2081 , - 1426 , - 1047 , - 944 , - 1117 , - 1566 , - 2291 , - 3292 , - 153 , - 1706 , - 3535 , - 1224 , - 3605 , - 1846 , - 363 , - 3572 , - 2641 , - 1986 , - 1607 , - 1504 , - 1677 , - 2126 , - 2851 , - 3852 , - 713 , - 2266 , - 4095 , - 1784 , - 4165 , - 2406 , - 923 , - 4132 , - 3201 , - 2546 , - 2167 , - 2064 , - 2237 , - 2686 , - 3411 , - 4412 , - 1273 , - 2826 , - 239 , - 2344 , - 309 , - 2966 , - 1483 , - 276 , - 3761 , - 3106 , - 2727 , - 2624 , - 2797 , - 3246 , - 3971 , - 556 , - 1833 , - 3386 , - 799 , - 2904 , - 869 , - 3526 , - 2043 , - 836 , - 4321 , - 3666 , - 3287 , - 3184 , - 3357 , - 3806 , - 115 , - 1116 , - 2393 , - 3946 , - 1359 , - 3464 , - 1429 , - 4086 , - 2603 , - 1396 , - 465 , - 4226 , - 3847 , - 3744 , - 3917 , - 4366 , - 675 , - 1676 , - 2953 , - 90 , - 1919 , - 4024 , - 1989 , - 230 , - 3163 , - 1956 , - 1025 , - 370 , - 4407 , - 4304 , - 61 , - 510 , - 1235 , - 2236 , - 3513 , - 650 , - 2479 , - 168 , - 2549 , - 790 , - 3723 , - 2516 , - 1585 , - 930 , - 551 , - 448 , - 621 , - 1070 , - 1795 , - 2796 , - 4073 , - 1210 , - 3039 , - 728 , - 3109 , - 1350 , - 4283 , - 3076 , - 2145 , - 1490 , - 1111 , - 1008 , - 1181 , - 1630 , - 2355 , - 3356 , - 217 , - 1770 , - 3599 , - 1288 , - 3669 , - 1910 , - 427 , - 3636 , - 2705 , - 2050 , - 1671 , - 1568 , - 1741 , - 2190 , - 2915 , - 3916 , - 777 , - 2330 , - 4159 , - 1848 , - 4229 , - 2470 , - 987 , - 4196 , - 3265 , - 2610 , - 2231 , - 2128 , - 2301 , - 2750 , - 3475 , - 60 , - 1337 , - 2890 , - 303 , - 2408 , - 373 , - 3030 , - 1547 , - 340 , - 3825 , - 3170 , - 2791 , - 2688 , - 2861 , - 3310 , - 4035 , - 620 , - 1897 , - 3450 , - 863 , - 2968 , - 933 , - 3590 , - 2107 , - 900 , - 4385 , - 3730 , - 3351 , - 3248 , - 3421 , - 3870 , - 179 , - 1180 , - 2457 , - 4010 , - 1423 , - 3528 , - 1493 , - 4150 , - 2667 , - 1460 , - 529 , - 4290 , - 3911 , - 3808 , - 3981 , - 14 , - 739 , - 1740 , - 3017 , - 154 , - 1983 , - 4088 , - 2053 , - 294 , - 3227 , - 2020 , - 1089 , - 434 , - 55 , - 4368 , - 125 , - 574 , - 1299 , - 2300 , - 3577 , - 714 , - 2543 , - 232 , - 2613 , - 854 , - 3787 , - 2580 , - 1649 , - 994 , - 615 , - 512 , - 685 , - 1134 , - 1859 , - 2860 , - 4137 , - 1274 , - 3103 , - 792 , - 3173 , - 1414 , - 4347 , - 3140 , - 2209 , - 1554 , - 1175 , - 1072 , - 1245 , - 1694 , - 2419 , - 3420 , - 281 , - 1834 , - 3663 , - 1352 , - 3733 , - 1974 , - 491 , - 3700 , - 2769 , - 2114 , - 1735 , - 1632 , - 1805 , - 2254 , - 2979 , - 3980 , - 841 , - 2394 , - 4223 , - 1912 , - 4293 , - 2534 , - 1051 , - 4260 , - 3329 , - 2674 , - 2295 , - 2192 , - 2365 , - 2814 , - 3539 , - 124 , - 1401 , - 2954 , - 367 , - 2472 , - 437 , - 3094 , - 1611 , - 404 , - 3889 , - 3234 , - 2855 , - 2752 , - 2925 , - 3374 , - 4099 , - 684 , - 1961 , - 3514 , - 927 , - 3032 , - 997 , - 3654 , - 2171 , - 964 , - 33 , - 3794 , - 3415 , - 3312 , - 3485 , - 3934 , - 243 , - 1244 , - 2521 , - 4074 , - 1487 , - 3592 , - 1557 , - 4214 , - 2731 , - 1524 , - 593 , - 4354 , - 3975 , - 3872 , - 4045 , - 78 , - 803 , - 1804 , - 3081 , - 218 , - 2047 , - 4152 , - 2117 , - 358 , - 3291 , - 2084 , - 1153 , - 498 , - 119 , - 16 , - 189 , - 638 , - 1363 , - 2364 , - 3641 , - 778 , - 2607 , - 296 , - 2677 , - 918 , - 3851 , - 2644 , - 1713 , - 1058 , - 679 , - 576 , - 749 , - 1198 , - 1923 , - 2924 , - 4201 , - 1338 , - 3167 , - 856 , - 3237 , - 1478 , - 4411 , - 3204 , - 2273 , - 1618 , - 1239 , - 1136 , - 1309 , - 1758 , - 2483 , - 3484 , - 345 , - 1898 , - 3727 , - 1416 , - 3797 , - 2038 , - 555 , - 3764 , - 2833 , - 2178 , - 1799 , - 1696 , - 1869 , - 2318 , - 3043 , - 4044 , - 905 , - 2458 , - 4287 , - 1976 , - 4357 , - 2598 , - 1115 , - 4324 , - 3393 , - 2738 , - 2359 , - 2256 , - 2429 , - 2878 , - 3603 , - 188 , - 1465 , - 3018 , - 431 , - 2536 , - 501 , - 3158 , - 1675 , - 468 , - 3953 , - 3298 , - 2919 , - 2816 , - 2989 , - 3438 , - 4163 , - 748 , - 2025 , - 3578 , - 991 , - 3096 , - 1061 , - 3718 , - 2235 , - 1028 , - 97 , - 3858 , - 3479 , - 3376 , - 3549 , - 3998 , - 307 , - 1308 , - 2585 , - 4138 , - 1551 , - 3656 , - 1621 , - 4278 , - 2795 , - 1588 , - 657 , - 2 , - 4039 , - 3936 , - 4109 , - 142 , - 867 , - 1868 , - 3145 , - 282 , - 2111 , - 4216 , - 2181 , - 422 , - 3355 , - 2148 , - 1217 , - 562 , - 183 , - 80 , - 253 , - 702 , - 1427 , - 2428 , - 3705 , - 842 , - 2671 , - 360 , - 2741 , - 982 , - 3915 , - 2708 , - 1777 , - 1122 , - 743 , - 640 , - 813 , - 1262 , - 1987 , - 2988 , - 4265 , - 1402 , - 3231 , - 920 , - 3301 , - 1542 , - 59 , - 3268 , - 2337 , - 1682 , - 1303 , - 1200 , - 1373 , - 1822 , - 2547 , - 3548 , - 409 , - 1962 , - 3791 , - 1480 , - 3861 , - 2102 , - 619 , - 3828 , - 2897 , - 2242 , - 1863 , - 1760 , - 1933 , - 2382 , - 3107 , - 4108 , - 969 , - 2522 , - 4351 , - 2040 , - 5 , - 2662 , - 1179 , - 4388 , - 3457 , - 2802 , - 2423 , - 2320 , - 2493 , - 2942 , - 3667 , - 252 , - 1529 , - 3082 , - 495 , - 2600 , - 565 , - 3222 , - 1739 , - 532 , - 4017 , - 3362 , - 2983 , - 2880 , - 3053 , - 3502 , - 4227 , - 812 , - 2089 , - 3642 , - 1055 , - 3160 , - 1125 , - 3782 , - 2299 , - 1092 , - 161 , - 3922 , - 3543 , - 3440 , - 3613 , - 4062 , - 371 , - 1372 , - 2649 , - 4202 , - 1615 , - 3720 , - 1685 , - 4342 , - 2859 , - 1652 , - 721 , - 66 , - 4103 , - 4000 , - 4173 , - 206 , - 931 , - 1932 , - 3209 , - 346 , - 2175 , - 4280 , - 2245 , - 486 , - 3419 , - 2212 , - 1281 , - 626 , - 247 , - 144 , - 317 , - 766 , - 1491 , - 2492 , - 3769 , - 906 , - 2735 , - 424 , - 2805 , - 1046 , - 3979 , - 2772 , - 1841 , - 1186 , - 807 , - 704 , - 877 , - 1326 , - 2051 , - 3052 , - 4329 , - 1466 , - 3295 , - 984 , - 3365 , - 1606 , - 123 , - 3332 , - 2401 , - 1746 , - 1367 , - 1264 , - 1437 , - 1886 , - 2611 , - 3612 , - 473 , - 2026 , - 3855 , - 1544 , - 3925 , - 2166 , - 683 , - 3892 , - 2961 , - 2306 , - 1927 , - 1824 , - 1997 , - 2446 , - 3171 , - 4172 , - 1033 , - 2586 , - 4415 , - 2104 , - 69 , - 2726 , - 1243 , - 36 , - 3521 , - 2866 , - 2487 , - 2384 , - 2557 , - 3006 , - 3731 , - 316 , - 1593 , - 3146 , - 559 , - 2664 , - 629 , - 3286 , - 1803 , - 596 , - 4081 , - 3426 , - 3047 , - 2944 , - 3117 , - 3566 , - 4291 , - 876 , - 2153 , - 3706 , - 1119 , - 3224 , - 1189 , - 3846 , - 2363 , - 1156 , - 225 , - 3986 , - 3607 , - 3504 , - 3677 , - 4126 , - 435 , - 1436 , - 2713 , - 4266 , - 1679 , - 3784 , - 1749 , - 4406 , - 2923 , - 1716 , - 785 , - 130 , - 4167 , - 4064 , - 4237 , - 270 , - 995 , - 1996 , - 3273 , - 410 , - 2239 , - 4344 , - 2309 , - 550 , - 3483 , - 2276 , - 1345 , - 690 , - 311 , - 208 , - 381 , - 830 , - 1555 , - 2556 , - 3833 , - 970 , - 2799 , - 488 , - 2869 , - 1110 , - 4043 , - 2836 , - 1905 , - 1250 , - 871 , - 768 , - 941 , - 1390 , - 2115 , - 3116 , - 4393 , - 1530 , - 3359 , - 1048 , - 3429 , - 1670 , - 187 , - 3396 , - 2465 , - 1810 , - 1431 , - 1328 , - 1501 , - 1950 , - 2675 , - 3676 , - 537 , - 2090 , - 3919 , - 1608 , - 3989 , - 2230 , - 747 , - 3956 , - 3025 , - 2370 , - 1991 , - 1888 , - 2061 , - 2510 , - 3235 , - 4236 , - 1097 , - 2650 , - 63 , - 2168 , - 133 , - 2790 , - 1307 , - 100 , - 3585 , - 2930 , - 2551 , - 2448 , - 2621 , - 3070 , - 3795 , - 380 , - 1657 , - 3210 , - 623 , - 2728 , - 693 , - 3350 , - 1867 , - 660 , - 4145 , - 3490 , - 3111 , - 3008 , - 3181 , - 3630 , - 4355 , - 940 , - 2217 , - 3770 , - 1183 , - 3288 , - 1253 , - 3910 , - 2427 , - 1220 , - 289 , - 4050 , - 3671 , - 3568 , - 3741 , - 4190 , - 499 , - 1500 , - 2777 , - 4330 , - 1743 , - 3848 , - 1813 , - 54 , - 2987 , - 1780 , - 849 , - 194 , - 4231 , - 4128 , - 4301 , - 334 , - 1059 , - 2060 , - 3337 , - 474 , - 2303 , - 4408 , - 2373 , - 614 , - 3547 , - 2340 , - 1409 , - 754 , - 375 , - 272 , - 445 , - 894 , - 1619 , - 2620 , - 3897 , - 1034 , - 2863 , - 552 , - 2933 , - 1174 , - 4107 , - 2900 , - 1969 , - 1314 , - 935 , - 832 , - 1005 , - 1454 , - 2179 , - 3180 , - 41 , - 1594 , - 3423 , - 1112 , - 3493 , - 1734 , - 251 , - 3460 , - 2529 , - 1874 , - 1495 , - 1392 , - 1565 , - 2014 , - 2739 , - 3740 , - 601 , - 2154 , - 3983 , - 1672 , - 4053 , - 2294 , - 811 , - 4020 , - 3089 , - 2434 , - 2055 , - 1952 , - 2125 , - 2574 , - 3299 , - 4300 , - 1161 , - 2714 , - 127 , - 2232 , - 197 , - 2854 , - 1371 , - 164 , - 3649 , - 2994 , - 2615 , - 2512 , - 2685 , - 3134 , - 3859 , - 444 , - 1721 , - 3274 , - 687 , - 2792 , - 757 , - 3414 , - 1931 , - 724 , - 4209 , - 3554 , - 3175 , - 3072 , - 3245 , - 3694 , - 3 , - 1004 , - 2281 , - 3834 , - 1247 , - 3352 , - 1317 , - 3974 , - 2491 , - 1284 , - 353 , - 4114 , - 3735 , - 3632 , - 3805 , - 4254 , - 563 , - 1564 , - 2841 , - 4394 , - 1807 , - 3912 , - 1877 , - 118 , - 3051 , - 1844 , - 913 , - 258 , - 4295 , - 4192 , - 4365 , - 398 , - 1123 , - 2124 , - 3401 , - 538 , - 2367 , - 56 , - 2437 , - 678 , - 3611 , - 2404 , - 1473 , - 818 , - 439 , - 336 , - 509 , - 958 , - 1683 , - 2684 , - 3961 , - 1098 , - 2927 , - 616 , - 2997 , - 1238 , - 4171 , - 2964 , - 2033 , - 1378 , - 999 , - 896 , - 1069 , - 1518 , - 2243 , - 3244 , - 105 , - 1658 , - 3487 , - 1176 , - 3557 , - 1798 , - 315 , - 3524 , - 2593 , - 1938 , - 1559 , - 1456 , - 1629 , - 2078 , - 2803 , - 3804 , - 665 , - 2218 , - 4047 , - 1736 , - 4117 , - 2358 , - 875 , - 4084 , - 3153 , - 2498 , - 2119 , - 2016 , - 2189 , - 2638 , - 3363 , - 4364 , - 1225 , - 2778 , - 191 , - 2296 , - 261 , - 2918 , - 1435 , - 228 , - 3713 , - 3058 , - 2679 , - 2576 , - 2749 , - 3198 , - 3923 , - 508 , - 1785 , - 3338 , - 751 , - 2856 , - 821 , - 3478 , - 1995 , - 788 , - 4273 , - 3618 , - 3239 , - 3136 , - 3309 , - 3758 , - 67 , - 1068 , - 2345 , - 3898 , - 1311 , - 3416 , - 1381 , - 4038 , - 2555 , - 1348 , - 417 , - 4178 , - 3799 , - 3696 , - 3869 , - 4318 , - 627 , - 1628 , - 2905 , - 42 , - 1871 , - 3976 , - 1941 , - 182 , - 3115 , - 1908 , - 977 , - 322 , - 4359 , - 4256 , - 13 , - 462 , - 1187 , - 2188 , - 3465 , - 602 , - 2431 , - 120 , - 2501 , - 742 , - 3675 , - 2468 , - 1537 , - 882 , - 503 , - 400 , - 573 , - 1022 , - 1747 , - 2748 , - 4025 , - 1162 , - 2991 , - 680 , - 3061 , - 1302 , - 4235 , - 3028 , - 2097 , - 1442 , - 1063 , - 960 , - 1133 , - 1582 , - 2307 , - 3308 , - 169 , - 1722 , - 3551 , - 1240 , - 3621 , - 1862 , - 379 , - 3588 , - 2657 , - 2002 , - 1623 , - 1520 , - 1693 , - 2142 , - 2867 , - 3868 , - 729 , - 2282 , - 4111 , - 1800 , - 4181 , - 2422 , - 939 , - 4148 , - 3217 , - 2562 , - 2183 , - 2080 , - 2253 , - 2702 , - 3427 , - 12 , - 1289 , - 2842 , - 255 , - 2360 , - 325 , - 2982 , - 1499 , - 292 , - 3777 , - 3122 , - 2743 , - 2640 , - 2813 , - 3262 , - 3987 , - 572 , - 1849 , - 3402 , - 815 , - 2920 , - 885 , - 3542 , - 2059 , - 852 , - 4337 , - 3682 , - 3303 , - 3200 , - 3373 , - 3822 , - 131 , - 1132 , - 2409 , - 3962 , - 1375 , - 3480 , - 1445 , - 4102 , - 2619 , - 1412 , - 481 , - 4242 , - 3863 , - 3760 , - 3933 , - 4382 , - 691 , - 1692 , - 2969 , - 106 , - 1935 , - 4040 , - 2005 , - 246 , - 3179 , - 1972 , - 1041 , - 386 , - 7 , - 4320 , - 77 , - 526 , - 1251 , - 2252 , - 3529 , - 666 , - 2495 , - 184 , - 2565 , - 806 , - 3739 , - 2532 , - 1601 , - 946 , - 567 , - 464 , - 637 , - 1086 , - 1811 , - 2812 , - 4089 , - 1226 , - 3055 , - 744 , - 3125 , - 1366 , - 4299 , - 3092 , - 2161 , - 1506 , - 1127 , - 1024 , - 1197 , - 1646 , - 2371 , - 3372 , - 233 , - 1786 , - 3615 , - 1304 , - 3685 , - 1926 , - 443 , - 3652 , - 2721 , - 2066 , - 1687 , - 1584 , - 1757 , - 2206 , - 2931 , - 3932 , - 793 , - 2346 , - 4175 , - 1864 , - 4245 , - 2486 , - 1003 , - 4212 , - 3281 , - 2626 , - 2247 , - 2144 , - 2317 , - 2766 , - 3491 , - 76 , - 1353 , - 2906 , - 319 , - 2424 , - 389 , - 3046 , - 1563 , - 356 , - 3841 , - 3186 , - 2807 , - 2704 , - 2877 , - 3326 , - 4051 , - 636 , - 1913 , - 3466 , - 879 , - 2984 , - 949 , - 3606 , - 2123 , - 916 , - 4401 , - 3746 , - 3367 , - 3264 , - 3437 , - 3886 , - 195 , - 1196 , - 2473 , - 4026 , - 1439 , - 3544 , - 1509 , - 4166 , - 2683 , - 1476 , - 545 , - 4306 , - 3927 , - 3824 , - 3997 , - 30 , - 755 , - 1756 , - 3033 , - 170 , - 1999 , - 4104 , - 2069 , - 310 , - 3243 , - 2036 , - 1105 , - 450 , - 71 , - 4384 , - 141 , - 590 , - 1315 , - 2316 , - 3593 , - 730 , - 2559 , - 248 , - 2629 , - 870 , - 3803 , - 2596 , - 1665 , - 1010 , - 631 , - 528 , - 701 , - 1150 , - 1875 , - 2876 , - 4153 , - 1290 , - 3119 , - 808 , - 3189 , - 1430 , - 4363 , - 3156 , - 2225 , - 1570 , - 1191 , - 1088 , - 1261 , - 1710 , - 2435 , - 3436 , - 297 , - 1850 , - 3679 , - 1368 , - 3749 , - 1990 , - 507 , - 3716 , - 2785 , - 2130 , - 1751 , - 1648 , - 1821 , - 2270 , - 2995 , - 3996 , - 857 , - 2410 , - 4239 , - 1928 , - 4309 , - 2550 , - 1067 , - 4276 , - 3345 , - 2690 , - 2311 , - 2208 , - 2381 , - 2830 , - 3555 , - 140 , - 1417 , - 2970 , - 383 , - 2488 , - 453 , - 3110 , - 1627 , - 420 , - 3905 , - 3250 , - 2871 , - 2768 , - 2941 , - 3390 , - 4115 , - 700 , - 1977 , - 3530 , - 943 , - 3048 , - 1013 , - 3670 , - 2187 , - 980 , - 49 , - 3810 , - 3431 , - 3328 , - 3501 , - 3950 , - 259 , - 1260 , - 2537 , - 4090 , - 1503 , - 3608 , - 1573 , - 4230 , - 2747 , - 1540 , - 609 , - 4370 , - 3991 , - 3888 , - 4061 , - 94 , - 819 , - 1820 , - 3097 , - 234 , - 2063 , - 4168 , - 2133 , - 374 , - 3307 , - 2100 , - 1169 , - 514 , - 135 , - 32 , - 205 , - 654 , - 1379 , - 2380 , - 3657 , - 794 , - 2623 , - 312 , - 2693 , - 934 , - 3867 , - 2660 , - 1729 , - 1074 , - 695 , - 592 , - 765 , - 1214 , - 1939 , - 2940 , - 4217 , - 1354 , - 3183 , - 872 , - 3253 , - 1494 , - 11 , - 3220 , - 2289 , - 1634 , - 1255 , - 1152 , - 1325 , - 1774 , - 2499 , - 3500 , - 361 , - 1914 , - 3743 , - 1432 , - 3813 , - 2054 , - 571 , - 3780 , - 2849 , - 2194 , - 1815 , - 1712 , - 1885 , - 2334 , - 3059 , - 4060 , - 921 , - 2474 , - 4303 , - 1992 , - 4373 , - 2614 , - 1131 , - 4340 , - 3409 , - 2754 , - 2375 , - 2272 , - 2445 , - 2894 , - 3619 , - 204 , - 1481 , - 3034 , - 447 , - 2552 , - 517 , - 3174 , - 1691 , - 484 , - 3969 , - 3314 , - 2935 , - 2832 , - 3005 , - 3454 , - 4179 , - 764 , - 2041 , - 3594 , - 1007 , - 3112 , - 1077 , - 3734 , - 2251 , - 1044 , - 113 , - 3874 , - 3495 , - 3392 , - 3565 , - 4014 , - 323 , - 1324 , - 2601 , - 4154 , - 1567 , - 3672 , - 1637 , - 4294 , - 2811 , - 1604 , - 673 , - 18 , - 4055 , - 3952 , - 4125 , - 158 , - 883 , - 1884 , - 3161 , - 298 , - 2127 , - 4232 , - 2197 , - 438 , - 3371 , - 2164 , - 1233 , - 578 , - 199 , - 96 , - 269 , - 718 , - 1443 , - 2444 , - 3721 , - 858 , - 2687 , - 376 , - 2757 , - 998 , - 3931 , - 2724 , - 1793 , - 1138 , - 759 , - 656 , - 829 , - 1278 , - 2003 , - 3004 , - 4281 , - 1418 , - 3247 , - 936 , - 3317 , - 1558 , - 75 , - 3284 , - 2353 , - 1698 , - 1319 , - 1216 , - 1389 , - 1838 , - 2563 , - 3564 , - 425 , - 1978 , - 3807 , - 1496 , - 3877 , - 2118 , - 635 , - 3844 , - 2913 , - 2258 , - 1879 , - 1776 , - 1949 , - 2398 , - 3123 , - 4124 , - 985 , - 2538 , - 4367 , - 2056 , - 21 , - 2678 , - 1195 , - 4404 , - 3473 , - 2818 , - 2439 , - 2336 , - 2509 , - 2958 , - 3683 , - 268 , - 1545 , - 3098 , - 511 , - 2616 , - 581 , - 3238 , - 1755 , - 548 , - 4033 , - 3378 , - 2999 , - 2896 , - 3069 , - 3518 , - 4243 , - 828 , - 2105 , - 3658 , - 1071 , - 3176 , - 1141 , - 3798 , - 2315 , - 1108 , - 177 , - 3938 , - 3559 , - 3456 , - 3629 , - 4078 , - 387 , - 1388 , - 2665 , - 4218 , - 1631 , - 3736 , - 1701 , - 4358 , - 2875 , - 1668 , - 737 , - 82 , - 4119 , - 4016 , - 4189 , - 222 , - 947 , - 1948 , - 3225 , - 362 , - 2191 , - 4296 , - 2261 , - 502 , - 3435 , - 2228 , - 1297 , - 642 , - 263 , - 160 , - 333 , - 782 , - 1507 , - 2508 , - 3785 , - 922 , - 2751 , - 440 , - 2821 , - 1062 , - 3995 , - 2788 , - 1857 , - 1202 , - 823 , - 720 , - 893 , - 1342 , - 2067 , - 3068 , - 4345 , - 1482 , - 3311 , - 1000 , - 3381 , - 1622 , - 139 , - 3348 , - 2417 , - 1762 , - 1383 , - 1280 , - 1453 , - 1902 , - 2627 , - 3628 , - 489 , - 2042 , - 3871 , - 1560 , - 3941 , - 2182 , - 699 , - 3908 , - 2977 , - 2322 , - 1943 , - 1840 , - 2013 , - 2462 , - 3187 , - 4188 , - 1049 , - 2602 , - 15 , - 2120 , - 85 , - 2742 , - 1259 , - 52 , - 3537 , - 2882 , - 2503 , - 2400 , - 2573 , - 3022 , - 3747 , - 332 , - 1609 , - 3162 , - 575 , - 2680 , - 645 , - 3302 , - 1819 , - 612 , - 4097 , - 3442 , - 3063 , - 2960 , - 3133 , - 3582 , - 4307 , - 892 , - 2169 , - 3722 , - 1135 , - 3240 , - 1205 , - 3862 , - 2379 , - 1172 , - 241 , - 4002 , - 3623 , - 3520 , - 3693 , - 4142 , - 451 , - 1452 , - 2729 , - 4282 , - 1695 , - 3800 , - 1765 , - 6 , - 2939 , - 1732 , - 801 , - 146 , - 4183 , - 4080 , - 4253 , - 286 , - 1011 , - 2012 , - 3289 , - 426 , - 2255 , - 4360 , - 2325 , - 566 , - 3499 , - 2292 , - 1361 , - 706 , - 327 , - 224 , - 397 , - 846 , - 1571 , - 2572 , - 3849 , - 986 , - 2815 , - 504 , - 2885 , - 1126 , - 4059 , - 2852 , - 1921 , - 1266 , - 887 , - 784 , - 957 , - 1406 , - 2131 , - 3132 , - 4409 , - 1546 , - 3375 , - 1064 , - 3445 , - 1686 , - 203 , - 3412 , - 2481 , - 1826 , - 1447 , - 1344 , - 1517 , - 1966 , - 2691 , - 3692 , - 553 , - 2106 , - 3935 , - 1624 , - 4005 , - 2246 , - 763 , - 3972 , - 3041 , - 2386 , - 2007 , - 1904 , - 2077 , - 2526 , - 3251 , - 4252 , - 1113 , - 2666 , - 79 , - 2184 , - 149 , - 2806 , - 1323 , - 116 , - 3601 , - 2946 , - 2567 , - 2464 , - 2637 , - 3086 , - 3811 , - 396 , - 1673 , - 3226 , - 639 , - 2744 , - 709 , - 3366 , - 1883 , - 676 , - 4161 , - 3506 , - 3127 , - 3024 , - 3197 , - 3646 , - 4371 , - 956 , - 2233 , - 3786 , - 1199 , - 3304 , - 1269 , - 3926 , - 2443 , - 1236 , - 305 , - 4066 , - 3687 , - 3584 , - 3757 , - 4206 , - 515 , - 1516 , - 2793 , - 4346 , - 1759 , - 3864 , - 1829 , - 70 , - 3003 , - 1796 , - 865 , - 210 , - 4247 , - 4144 , - 4317 , - 350 , - 1075 , - 2076 , - 3353 , - 490 , - 2319 , - 8 , - 2389 , - 630 , - 3563 , - 2356 , - 1425 , - 770 , - 391 , - 288 , - 461 , - 910 , - 1635 , - 2636 , - 3913 , - 1050 , - 2879 , - 568 , - 2949 , - 1190 , - 4123 , - 2916 , - 1985 , - 1330 , - 951 , - 848 , - 1021 , - 1470 , - 2195 , - 3196 , - 57 , - 1610 , - 3439 , - 1128 , - 3509 , - 1750 , - 267 , - 3476 , - 2545 , - 1890 , - 1511 , - 1408 , - 1581 , - 2030 , - 2755 , - 3756 , - 617 , - 2170 , - 3999 , - 1688 , - 4069 , - 2310 , - 827 , - 4036 , - 3105 , - 2450 , - 2071 , - 1968 , - 2141 , - 2590 , - 3315 , - 4316 , - 1177 , - 2730 , - 143 , - 2248 , - 213 , - 2870 , - 1387 , - 180 , - 3665 , - 3010 , - 2631 , - 2528 , - 2701 , - 3150 , - 3875 , - 460 , - 1737 , - 3290 , - 703 , - 2808 , - 773 , - 3430 , - 1947 , - 740 , - 4225 , - 3570 , - 3191 , - 3088 , - 3261 , - 3710 , - 19 , - 1020 , - 2297 , - 3850 , - 1263 , - 3368 , - 1333 , - 3990 , - 2507 , - 1300 , - 369 , - 4130 , - 3751 , - 3648 , - 3821 , - 4270 , - 579 , - 1580 , - 2857 , - 4410 , - 1823 , - 3928 , - 1893 , - 134 , - 3067 , - 1860 , - 929 , - 274 , - 4311 , - 4208 , - 4381 , - 414 , - 1139 , - 2140 , - 3417 , - 554 , - 2383 , - 72 , - 2453 , - 694 , - 3627 , - 2420 , - 1489 , - 834 , - 455 , - 352 , - 525 , - 974 , - 1699 , - 2700 , - 3977 , - 1114 , - 2943 , - 632 , - 3013 , - 1254 , - 4187 , - 2980 , - 2049 , - 1394 , - 1015 , - 912 , - 1085 , - 1534 , - 2259 , - 3260 , - 121 , - 1674 , - 3503 , - 1192 , - 3573 , - 1814 , - 331 , - 3540 , - 2609 , - 1954 , - 1575 , - 1472 , - 1645 , - 2094 , - 2819 , - 3820 , - 681 , - 2234 , - 4063 , - 1752 , - 4133 , - 2374 , - 891 , - 4100 , - 3169 , - 2514 , - 2135 , - 2032 , - 2205 , - 2654 , - 3379 , - 4380 , - 1241 , - 2794 , - 207 , - 2312 , - 277 , - 2934 , - 1451 , - 244 , - 3729 , - 3074 , - 2695 , - 2592 , - 2765 , - 3214 , - 3939 , - 524 , - 1801 , - 3354 , - 767 , - 2872 , - 837 , - 3494 , - 2011 , - 804 , - 4289 , - 3634 , - 3255 , - 3152 , - 3325 , - 3774 , - 83 , - 1084 , - 2361 , - 3914 , - 1327 , - 3432 , - 1397 , - 4054 , - 2571 , - 1364 , - 433 , - 4194 , - 3815 , - 3712 , - 3885 , - 4334 , - 643 , - 1644 , - 2921 , - 58 , - 1887 , - 3992 , - 1957 , - 198 , - 3131 , - 1924 , - 993 , - 338 , - 4375 , - 4272 , - 29 , - 478 , - 1203 , - 2204 , - 3481 , - 618 , - 2447 , - 136 , - 2517 , - 758 , - 3691 , - 2484 , - 1553 , - 898 , - 519 , - 416 , - 589 , - 1038 , - 1763 , - 2764 , - 4041 , - 1178 , - 3007 , - 696 , - 3077 , - 1318 , - 4251 , - 3044 , - 2113 , - 1458 , - 1079 , - 976 , - 1149 , - 1598 , - 2323 , - 3324 , - 185 , - 1738 , - 3567 , - 1256 , - 3637 , - 1878 , - 395 , - 3604 , - 2673 , - 2018 , - 1639 , - 1536 , - 1709 , - 2158 , - 2883 , - 3884 , - 745 , - 2298 , - 4127 , - 1816 , - 4197 , - 2438 , - 955 , - 4164 , - 3233 , - 2578 , - 2199 , - 2096 , - 2269 , - 2718 , - 3443 , - 28 , - 1305 , - 2858 , - 271 , - 2376 , - 341 , - 2998 , - 1515 , - 308 , - 3793 , - 3138 , - 2759 , - 2656 , - 2829 , - 3278 , - 4003 , - 588 , - 1865 , - 3418 , - 831 , - 2936 , - 901 , - 3558 , - 2075 , - 868 , - 4353 , - 3698 , - 3319 , - 3216 , - 3389 , - 3838 , - 147 , - 1148 , - 2425 , - 3978 , - 1391 , - 3496 , - 1461 , - 4118 , - 2635 , - 1428 , - 497 , - 4258 , - 3879 , - 3776 , - 3949 , - 4398 , - 707 , - 1708 , - 2985 , - 122 , - 1951 , - 4056 , - 2021 , - 262 , - 3195 , - 1988 , - 1057 , - 402 , - 23 , - 4336 , - 93 , - 542 , - 1267 , - 2268 , - 3545 , - 682 , - 2511 , - 200 , - 2581 , - 822 , - 3755 , - 2548 , - 1617 , - 962 , - 583 , - 480 , - 653 , - 1102 , - 1827 , - 2828 , - 4105 , - 1242 , - 3071 , - 760 , - 3141 , - 1382 , - 4315 , - 3108 , - 2177 , - 1522 , - 1143 , - 1040 , - 1213 , - 1662 , - 2387 , - 3388 , - 249 , - 1802 , - 3631 , - 1320 , - 3701 , - 1942 , - 459 , - 3668 , - 2737 , - 2082 , - 1703 , - 1600 , - 1773 , - 2222 , - 2947 , - 3948 , - 809 , - 2362 , - 4191 , - 1880 , - 4261 , - 2502 , - 1019 , - 4228 , - 3297 , - 2642 , - 2263 , - 2160 , - 2333 , - 2782 , - 3507 , - 92 , - 1369 , - 2922 , - 335 , - 2440 , - 405 , - 3062 , - 1579 , - 372 , - 3857 , - 3202 , - 2823 , - 2720 , - 2893 , - 3342 , - 4067 , - 652 , - 1929 , - 3482 , - 895 , - 3000 , - 965 , - 3622 , - 2139 , - 932 , - 1 , - 3762 , - 3383 , - 3280 , - 3453 , - 3902 , - 211 , - 1212 , - 2489 , - 4042 , - 1455 , - 3560 , - 1525 , - 4182 , - 2699 , - 1492 , - 561 , - 4322 , - 3943 , - 3840 , - 4013 , - 46 , - 771 , - 1772 , - 3049 , - 186 , - 2015 , - 4120 , - 2085 , - 326 , - 3259 , - 2052 , - 1121 , - 466 , - 87 , - 4400 , - 157 , - 606 , - 1331 , - 2332 , - 3609 , - 746 , - 2575 , - 264 , - 2645 , - 886 , - 3819 , - 2612 , - 1681 , - 1026 , - 647 , - 544 , - 717 , - 1166 , - 1891 , - 2892 , - 4169 , - 1306 , - 3135 , - 824 , - 3205 , - 1446 , - 4379 , - 3172 , - 2241 , - 1586 , - 1207 , - 1104 , - 1277 , - 1726 , - 2451 , - 3452 , - 313 , - 1866 , - 3695 , - 1384 , - 3765 , - 2006 , - 523 , - 3732 , - 2801 , - 2146 , - 1767 , - 1664 , - 1837 , - 2286 , - 3011 , - 4012 , - 873 , - 2426 , - 4255 , - 1944 , - 4325 , - 2566 , - 1083 , - 4292 , - 3361 , - 2706 , - 2327 , - 2224 , - 2397 , - 2846 , - 3571 , - 156 , - 1433 , - 2986 , - 399 , - 2504 , - 469 , - 3126 , - 1643 , - 436 , - 3921 , - 3266 , - 2887 , - 2784 , - 2957 , - 3406 , - 4131 , - 716 , - 1993 , - 3546 , - 959 , - 3064 , - 1029 , - 3686 , - 2203 , - 996 , - 65 , - 3826 , - 3447 , - 3344 , - 3517 , - 3966 , - 275 , - 1276 , - 2553 , - 4106 , - 1519 , - 3624 , - 1589 , - 4246 , - 2763 , - 1556 , - 625 , - 4386 , - 4007 , - 3904 , - 4077 , - 110 , - 835 , - 1836 , - 3113 , - 250 , - 2079 , - 4184 , - 2149 , - 390 , - 3323 , - 2116 , - 1185 , - 530 , - 151 , - 48 , - 221 , - 670 , - 1395 , - 2396 , - 3673 , - 810 , - 2639 , - 328 , - 2709 , - 950 , - 3883 , - 2676 , - 1745 , - 1090 , - 711 , - 608 , - 781 , - 1230 , - 1955 , - 2956 , - 4233 , - 1370 , - 3199 , - 888 , - 3269 , - 1510 , - 27 , - 3236 , - 2305 , - 1650 , - 1271 , - 1168 , - 1341 , - 1790 , - 2515 , - 3516 , - 377 , - 1930 , - 3759 , - 1448 , - 3829 , - 2070 , - 587 , - 3796 , - 2865 , - 2210 , - 1831 , - 1728 , - 1901 , - 2350 , - 3075 , - 4076 , - 937 , - 2490 , - 4319 , - 2008 , - 4389 , - 2630 , - 1147 , - 4356 , - 3425 , - 2770 , - 2391 , - 2288 , - 2461 , - 2910 , - 3635 , - 220 , - 1497 , - 3050 , - 463 , - 2568 , - 533 , - 3190 , - 1707 , - 500 , - 3985 , - 3330 , - 2951 , - 2848 , - 3021 , - 3470 , - 4195 , - 780 , - 2057 , - 3610 , - 1023 , - 3128 , - 1093 , - 3750 , - 2267 , - 1060 , - 129 , - 3890 , - 3511 , - 3408 , - 3581 , - 4030 , - 339 , - 1340 , - 2617 , - 4170 , - 1583 , - 3688 , - 1653 , - 4310 , - 2827 , - 1620 , - 689 , - 34 , - 4071 , - 3968 , - 4141 , - 174 , - 899 , - 1900 , - 3177 , - 314 , - 2143 , - 4248 , - 2213 , - 454 , - 3387 , - 2180 , - 1249 , - 594 , - 215 , - 112 , - 285 , - 734 , - 1459 , - 2460 , - 3737 , - 874 , - 2703 , - 392 , - 2773 , - 1014 , - 3947 , - 2740 , - 1809 , - 1154 , - 775 , - 672 , - 845 , - 1294 , - 2019 , - 3020 , - 4297 , - 1434 , - 3263 , - 952 , - 3333 , - 1574 , - 91 , - 3300 , - 2369 , - 1714 , - 1335 , - 1232 , - 1405 , - 1854 , - 2579 , - 3580 , - 441 , - 1994 , - 3823 , - 1512 , - 3893 , - 2134 , - 651 , - 3860 , - 2929 , - 2274 , - 1895 , - 1792 , - 1965 , - 2414 , - 3139 , - 4140 , - 1001 , - 2554 , - 4383 , - 2072 , - 37 , - 2694 , - 1211 , - 4 , - 3489 , - 2834 , - 2455 , - 2352 , - 2525 , - 2974 , - 3699 , - 284 , - 1561 , - 3114 , - 527 , - 2632 , - 597 , - 3254 , - 1771 , - 564 , - 4049 , - 3394 , - 3015 , - 2912 , - 3085 , - 3534 , - 4259 , - 844 , - 2121 , - 3674 , - 1087 , - 3192 , - 1157 , - 3814 , - 2331 , - 1124 , - 193 , - 3954 , - 3575 , - 3472 , - 3645 , - 4094 , - 403 , - 1404 , - 2681 , - 4234 , - 1647 , - 3752 , - 1717 , - 4374 , - 2891 , - 1684 , - 753 , - 98 , - 4135 , - 4032 , - 4205 , - 238 , - 963 , - 1964 , - 3241 , - 378 , - 2207 , - 4312 , - 2277 , - 518 , - 3451 , - 2244 , - 1313 , - 658 , - 279 , - 176 , - 349 , - 798 , - 1523 , - 2524 , - 3801 , - 938 , - 2767 , - 456 , - 2837 , - 1078 , - 4011 , - 2804 , - 1873 , - 1218 , - 839 , - 736 , - 909 , - 1358 , - 2083 , - 3084 , - 4361 , - 1498 , - 3327 , - 1016 , - 3397 , - 1638 , - 155 , - 3364 , - 2433 , - 1778 , - 1399 , - 1296 , - 1469 , - 1918 , - 2643 , - 3644 , - 505 , - 2058 , - 3887 , - 1576 , - 3957 , - 2198 , - 715 , - 3924 , - 2993 , - 2338 , - 1959 , - 1856 , - 2029 , - 2478 , - 3203 , - 4204 , - 1065 , - 2618 , - 31 , - 2136 , - 101 , - 2758 , - 1275 , - 68 , - 3553 , - 2898 , - 2519 , - 2416 , - 2589 , - 3038 , - 3763 , - 348 , - 1625 , - 3178 , - 591 , - 2696 , - 661 , - 3318 , - 1835 , - 628 , - 4113 , - 3458 , - 3079 , - 2976 , - 3149 , - 3598 , - 4323 , - 908 , - 2185 , - 3738 , - 1151 , - 3256 , - 1221 , - 3878 , - 2395 , - 1188 , - 257 , - 4018 , - 3639 , - 3536 , - 3709 , - 4158 , - 467 , - 1468 , - 2745 , - 4298 , - 1711 , - 3816 , - 1781 , - 22 , - 2955 , - 1748 , - 817 , - 162 , - 4199 , - 4096 , - 4269 , - 302 , - 1027 , - 2028 , - 3305 , - 442 , - 2271 , - 4376 , - 2341 , - 582 , - 3515 , - 2308 , - 1377 , - 722 , - 343 , - 240 , - 413 , - 862 , - 1587 , - 2588 , - 3865 , - 1002 , - 2831 , - 520 , - 2901 , - 1142 , - 4075 , - 2868 , - 1937 , - 1282 , - 903 , - 800 , - 973 , - 1422 , - 2147 , - 3148 , - 9 , - 1562 , - 3391 , - 1080 , - 3461 , - 1702 , - 219 , - 3428 , - 2497 , - 1842 , - 1463 , - 1360 , - 1533 , - 1982 , - 2707 , - 3708 , - 569 , - 2122 , - 3951 , - 1640 , - 4021 , - 2262 , - 779 , - 3988 , - 3057 , - 2402 , - 2023 , - 1920 , - 2093 , - 2542 , - 3267 , - 4268 , - 1129 , - 2682 , - 95 , - 2200 , - 165 , - 2822 , - 1339 , - 132 , - 3617 , - 2962 , - 2583 , - 2480 , - 2653 , - 3102 , - 3827 , - 412 , - 1689 , - 3242 , - 655 , - 2760 , - 725 , - 3382 , - 1899 , - 692 , - 4177 , - 3522 , - 3143 , - 3040 , - 3213 , - 3662 , - 4387 , - 972 , - 2249 , - 3802 , - 1215 , - 3320 , - 1285 , - 3942 , - 2459 , - 1252 , - 321 , - 4082 , - 3703 , - 3600 , - 3773 , - 4222 , - 531 , - 1532 , - 2809 , - 4362 , - 1775 , - 3880 , - 1845 , - 86 , - 3019 , - 1812 , - 881 , - 226 , - 4263 , - 4160 , - 4333 , - 366 , - 1091 , - 2092 , - 3369 , - 506 , - 2335 , - 24 , - 2405 , - 646 , - 3579 , - 2372 , - 1441 , - 786 , - 407 , - 304 , - 477 , - 926 , - 1651 , - 2652 , - 3929 , - 1066 , - 2895 , - 584 , - 2965 , - 1206 , - 4139 , - 2932 , - 2001 , - 1346 , - 967 , - 864 , - 1037 , - 1486 , - 2211 , - 3212 , - 73 , - 1626 , - 3455 , - 1144 , - 3525 , - 1766 , - 283 , - 3492 , - 2561 , - 1906 , - 1527 , - 1424 , - 1597 , - 2046 , - 2771 , - 3772 , - 633 , - 2186 , - 4015 , - 1704 , - 4085 , - 2326 , - 843 , - 4052 , - 3121 , - 2466 , - 2087 , - 1984 , - 2157 , - 2606 , - 3331 , - 4332 , - 1193 , - 2746 , - 159 , - 2264 , - 229 , - 2886 , - 1403 , - 196 , - 3681 , - 3026 , - 2647 , - 2544 , - 2717 , - 3166 , - 3891 , - 476 , - 1753 , - 3306 , - 719 , - 2824 , - 789 , - 3446 , - 1963 , - 756 , - 4241 , - 3586 , - 3207 , - 3104 , - 3277 , - 3726 , - 35 , - 1036 , - 2313 , - 3866 , - 1279 , - 3384 , - 1349 , - 4006 , - 2523 , - 1316 , - 385 , - 4146 , - 3767 , - 3664 , - 3837 , - 4286 , - 595 , - 1596 , - 2873 , - 10 , - 1839 , - 3944 , - 1909 , - 150 , - 3083 , - 1876 , - 945 , - 290 , - 4327 , - 4224 , - 4397 , - 430 , - 1155 , - 2156 , - 3433 , - 570 , - 2399 , - 88 , - 2469 , - 710 , - 3643 , - 2436 , - 1505 , - 850 , - 471 , - 368 , - 541 , - 990 , - 1715 , - 2716 , - 3993 , - 1130 , - 2959 , - 648 , - 3029 , - 1270 , - 4203 , - 2996 , - 2065 , - 1410 , - 1031 , - 928 , - 1101 , - 1550 , - 2275 , - 3276 , - 137 , - 1690 , - 3519 , - 1208 , - 3589 , - 1830 , - 347 , - 3556 , - 2625 , - 1970 , - 1591 , - 1488 , - 1661 , - 2110 , - 2835 , - 3836 , - 697 , - 2250 , - 4079 , - 1768 , - 4149 , - 2390 , - 907 , - 4116 , - 3185 , - 2530 , - 2151 , - 2048 , - 2221 , - 2670 , - 3395 , - 4396 , - 1257 , - 2810 , - 223 , - 2328 , - 293 , - 2950 , - 1467 , - 260 , - 3745 , - 3090 , - 2711 , - 2608 , - 2781 , - 3230 , - 3955 , - 540 , - 1817 , - 3370 , - 783 , - 2888 , - 853 , - 3510 , - 2027 , - 820 , - 4305 , - 3650 , - 3271 , - 3168 , - 3341 , - 3790 , - 99 , - 1100 , - 2377 , - 3930 , - 1343 , - 3448 , - 1413 , - 4070 , - 2587 , - 1380 , - 449 , - 4210 , - 3831 , - 3728 , - 3901 , - 4350 , - 659 , - 1660 , - 2937 , - 74 , - 1903 , - 4008 , - 1973 , - 214 , - 3147 , - 1940 , - 1009 , - 354 , - 4391 , - 4288 , - 45 , - 494 , - 1219 , - 2220 , - 3497 , - 634 , - 2463 , - 152 , - 2533 , - 774 , - 3707 , - 2500 , - 1569 , - 914 , - 535 , - 432 , - 605 , - 1054 , - 1779 , - 2780 , - 4057 , - 1194 , - 3023 , - 712 , - 3093 , - 1334 , - 4267 , - 3060 , - 2129 , - 1474 , - 1095 , - 992 , - 1165 , - 1614 , - 2339 , - 3340 , - 201 , - 1754 , - 3583 , - 1272 , - 3653 , - 1894 , - 411 , - 3620 , - 2689 , - 2034 , - 1655 , - 1552 , - 1725 , - 2174 , - 2899 , - 3900 , - 761 , - 2314 , - 4143 , - 1832 , - 4213 , - 2454 , - 971 , - 4180 , - 3249 , - 2594 , - 2215 , - 2112 , - 2285 , - 2734 , - 3459 , - 44 , - 1321 , - 2874 , - 287 , - 2392 , - 357 , - 3014 , - 1531 , - 324 , - 3809 , - 3154 , - 2775 , - 2672 , - 2845 , - 3294 , - 4019 , - 604 , - 1881 , - 3434 , - 847 , - 2952 , - 917 , - 3574 , - 2091 , - 884 , - 4369 , - 3714 , - 3335 , - 3232 , - 3405 , - 3854 , - 163 , - 1164 , - 2441 , - 3994 , - 1407 , - 3512 , - 1477 , - 4134 , - 2651 , - 1444 , - 513 , - 4274 , - 3895 , - 3792 , - 3965 , - 4414 , - 723 , - 1724 , - 3001 , - 138 , - 1967 , - 4072 , - 2037 , - 278 , - 3211 , - 2004 , - 1073 , - 418 , - 39 , - 4352 , - 109 , - 558 , - 1283 , - 2284 , - 3561 , - 698 , - 2527 , - 216 , - 2597 , - 838 , - 3771 , - 2564 , - 1633 , - 978 , - 599 , - 496 , - 669 , - 1118 , - 1843 , - 2844 , - 4121 , - 1258 , - 3087 , - 776 , - 3157 , - 1398 , - 4331 , - 3124 , - 2193 , - 1538 , - 1159 , - 1056 , - 1229 , - 1678 , - 2403 , - 3404 , - 265 , - 1818 , - 3647 , - 1336 , - 3717 , - 1958 , - 475 , - 3684 , - 2753 , - 2098 , - 1719 , - 1616 , - 1789 , - 2238 , - 2963 , - 3964 , - 825 , - 2378 , - 4207 , - 1896 , - 4277 , - 2518 , - 1035 , - 4244 , - 3313 , - 2658 , - 2279 , - 2176 , - 2349 , - 2798 , - 3523 , - 108 , - 1385 , - 2938 , - 351 , - 2456 , - 421 , - 3078 , - 1595 , - 388 , - 3873 , - 3218 , - 2839 , - 2736 , - 2909 , - 3358 , - 4083 , - 668 , - 1945 , - 3498 , - 911 , - 3016 , - 981 , - 3638 , - 2155 , - 948 , - 17 , - 3778 , - 3399 , - 3296 , - 3469 , - 3918 , - 227 , - 1228 , - 2505 , - 4058 , - 1471 , - 3576 , - 1541 , - 4198 , - 2715 , - 1508 , - 577 , - 4338 , - 3959 , - 3856 , - 4029 , - 62 , - 787 , - 1788 , - 3065 , - 202 , - 2031 , - 4136 , - 2101 , - 342 , - 3275 , - 2068 , - 1137 , - 482 , - 103 , - 0 , - 513 , - 1586 , - 3219 , - 932 , - 3685 , - 2518 , - 1911 , - 1864 , - 2377 , - 3450 , - 603 , - 2796 , - 1069 , - 4382 , - 3775 , - 3728 , - 4241 , - 834 , - 2467 , - 180 , - 2933 , - 1766 , - 1159 , - 1112 , - 1625 , - 2698 , - 4331 , - 2044 , - 317 , - 3630 , - 3023 , - 2976 , - 3489 , - 82 , - 1715 , - 3908 , - 2181 , - 1014 , - 407 , - 360 , - 873 , - 1946 , - 3579 , - 1292 , - 4045 , - 2878 , - 2271 , - 2224 , - 2737 , - 3810 , - 963 , - 3156 , - 1429 , - 262 , - 4135 , - 4088 , - 121 , - 1194 , - 2827 , - 540 , - 3293 , - 2126 , - 1519 , - 1472 , - 1985 , - 3058 , - 211 , - 2404 , - 677 , - 3990 , - 3383 , - 3336 , - 3849 , - 442 , - 2075 , - 4268 , - 2541 , - 1374 , - 767 , - 720 , - 1233 , - 2306 , - 3939 , - 1652 , - 4405 , - 3238 , - 2631 , - 2584 , - 3097 , - 4170 , - 1323 , - 3516 , - 1789 , - 622 , - 15 , - 4448 , - 481 , - 1554 , - 3187 , - 900 , - 3653 , - 2486 , - 1879 , - 1832 , - 2345 , - 3418 , - 571 , - 2764 , - 1037 , - 4350 , - 3743 , - 3696 , - 4209 , - 802 , - 2435 , - 148 , - 2901 , - 1734 , - 1127 , - 1080 , - 1593 , - 2666 , - 4299 , - 2012 , - 285 , - 3598 , - 2991 , - 2944 , - 3457 , - 50 , - 1683 , - 3876 , - 2149 , - 982 , - 375 , - 328 , - 841 , - 1914 , - 3547 , - 1260 , - 4013 , - 2846 , - 2239 , - 2192 , - 2705 , - 3778 , - 931 , - 3124 , - 1397 , - 230 , - 4103 , - 4056 , - 89 , - 1162 , - 2795 , - 508 , - 3261 , - 2094 , - 1487 , - 1440 , - 1953 , - 3026 , - 179 , - 2372 , - 645 , - 3958 , - 3351 , - 3304 , - 3817 , - 410 , - 2043 , - 4236 , - 2509 , - 1342 , - 735 , - 688 , - 1201 , - 2274 , - 3907 , - 1620 , - 4373 , - 3206 , - 2599 , - 2552 , - 3065 , - 4138 , - 1291 , - 3484 , - 1757 , - 590 , - 4463 , - 4416 , - 449 , - 1522 , - 3155 , - 868 , - 3621 , - 2454 , - 1847 , - 1800 , - 2313 , - 3386 , - 539 , - 2732 , - 1005 , - 4318 , - 3711 , - 3664 , - 4177 , - 770 , - 2403 , - 116 , - 2869 , - 1702 , - 1095 , - 1048 , - 1561 , - 2634 , - 4267 , - 1980 , - 253 , - 3566 , - 2959 , - 2912 , - 3425 , - 18 , - 1651 , - 3844 , - 2117 , - 950 , - 343 , - 296 , - 809 , - 1882 , - 3515 , - 1228 , - 3981 , - 2814 , - 2207 , - 2160 , - 2673 , - 3746 , - 899 , - 3092 , - 1365 , - 198 , - 4071 , - 4024 , - 57 , - 1130 , - 2763 , - 476 , - 3229 , - 2062 , - 1455 , - 1408 , - 1921 , - 2994 , - 147 , - 2340 , - 613 , - 3926 , - 3319 , - 3272 , - 3785 , - 378 , - 2011 , - 4204 , - 2477 , - 1310 , - 703 , - 656 , - 1169 , - 2242 , - 3875 , - 1588 , - 4341 , - 3174 , - 2567 , - 2520 , - 3033 , - 4106 , - 1259 , - 3452 , - 1725 , - 558 , - 4431 , - 4384 , - 417 , - 1490 , - 3123 , - 836 , - 3589 , - 2422 , - 1815 , - 1768 , - 2281 , - 3354 , - 507 , - 2700 , - 973 , - 4286 , - 3679 , - 3632 , - 4145 , - 738 , - 2371 , - 84 , - 2837 , - 1670 , - 1063 , - 1016 , - 1529 , - 2602 , - 4235 , - 1948 , - 221 , - 3534 , - 2927 , - 2880 , - 3393 , - 4466 , - 1619 , - 3812 , - 2085 , - 918 , - 311 , - 264 , - 777 , - 1850 , - 3483 , - 1196 , - 3949 , - 2782 , - 2175 , - 2128 , - 2641 , - 3714 , - 867 , - 3060 , - 1333 , - 166 , - 4039 , - 3992 , - 25 , - 1098 , - 2731 , - 444 , - 3197 , - 2030 , - 1423 , - 1376 , - 1889 , - 2962 , - 115 , - 2308 , - 581 , - 3894 , - 3287 , - 3240 , - 3753 , - 346 , - 1979 , - 4172 , - 2445 , - 1278 , - 671 , - 624 , - 1137 , - 2210 , - 3843 , - 1556 , - 4309 , - 3142 , - 2535 , - 2488 , - 3001 , - 4074 , - 1227 , - 3420 , - 1693 , - 526 , - 4399 , - 4352 , - 385 , - 1458 , - 3091 , - 804 , - 3557 , - 2390 , - 1783 , - 1736 , - 2249 , - 3322 , - 475 , - 2668 , - 941 , - 4254 , - 3647 , - 3600 , - 4113 , - 706 , - 2339 , - 52 , - 2805 , - 1638 , - 1031 , - 984 , - 1497 , - 2570 , - 4203 , - 1916 , - 189 , - 3502 , - 2895 , - 2848 , - 3361 , - 4434 , - 1587 , - 3780 , - 2053 , - 886 , - 279 , - 232 , - 745 , - 1818 , - 3451 , - 1164 , - 3917 , - 2750 , - 2143 , - 2096 , - 2609 , - 3682 , - 835 , - 3028 , - 1301 , - 134 , - 4007 , - 3960 , - 4473 , - 1066 , - 2699 , - 412 , - 3165 , - 1998 , - 1391 , - 1344 , - 1857 , - 2930 , - 83 , - 2276 , - 549 , - 3862 , - 3255 , - 3208 , - 3721 , - 314 , - 1947 , - 4140 , - 2413 , - 1246 , - 639 , - 592 , - 1105 , - 2178 , - 3811 , - 1524 , - 4277 , - 3110 , - 2503 , - 2456 , - 2969 , - 4042 , - 1195 , - 3388 , - 1661 , - 494 , - 4367 , - 4320 , - 353 , - 1426 , - 3059 , - 772 , - 3525 , - 2358 , - 1751 , - 1704 , - 2217 , - 3290 , - 443 , - 2636 , - 909 , - 4222 , - 3615 , - 3568 , - 4081 , - 674 , - 2307 , - 20 , - 2773 , - 1606 , - 999 , - 952 , - 1465 , - 2538 , - 4171 , - 1884 , - 157 , - 3470 , - 2863 , - 2816 , - 3329 , - 4402 , - 1555 , - 3748 , - 2021 , - 854 , - 247 , - 200 , - 713 , - 1786 , - 3419 , - 1132 , - 3885 , - 2718 , - 2111 , - 2064 , - 2577 , - 3650 , - 803 , - 2996 , - 1269 , - 102 , - 3975 , - 3928 , - 4441 , - 1034 , - 2667 , - 380 , - 3133 , - 1966 , - 1359 , - 1312 , - 1825 , - 2898 , - 51 , - 2244 , - 517 , - 3830 , - 3223 , - 3176 , - 3689 , - 282 , - 1915 , - 4108 , - 2381 , - 1214 , - 607 , - 560 , - 1073 , - 2146 , - 3779 , - 1492 , - 4245 , - 3078 , - 2471 , - 2424 , - 2937 , - 4010 , - 1163 , - 3356 , - 1629 , - 462 , - 4335 , - 4288 , - 321 , - 1394 , - 3027 , - 740 , - 3493 , - 2326 , - 1719 , - 1672 , - 2185 , - 3258 , - 411 , - 2604 , - 877 , - 4190 , - 3583 , - 3536 , - 4049 , - 642 , - 2275 , - 4468 , - 2741 , - 1574 , - 967 , - 920 , - 1433 , - 2506 , - 4139 , - 1852 , - 125 , - 3438 , - 2831 , - 2784 , - 3297 , - 4370 , - 1523 , - 3716 , - 1989 , - 822 , - 215 , - 168 , - 681 , - 1754 , - 3387 , - 1100 , - 3853 , - 2686 , - 2079 , - 2032 , - 2545 , - 3618 , - 771 , - 2964 , - 1237 , - 70 , - 3943 , - 3896 , - 4409 , - 1002 , - 2635 , - 348 , - 3101 , - 1934 , - 1327 , - 1280 , - 1793 , - 2866 , - 19 , - 2212 , - 485 , - 3798 , - 3191 , - 3144 , - 3657 , - 250 , - 1883 , - 4076 , - 2349 , - 1182 , - 575 , - 528 , - 1041 , - 2114 , - 3747 , - 1460 , - 4213 , - 3046 , - 2439 , - 2392 , - 2905 , - 3978 , - 1131 , - 3324 , - 1597 , - 430 , - 4303 , - 4256 , - 289 , - 1362 , - 2995 , - 708 , - 3461 , - 2294 , - 1687 , - 1640 , - 2153 , - 3226 , - 379 , - 2572 , - 845 , - 4158 , - 3551 , - 3504 , - 4017 , - 610 , - 2243 , - 4436 , - 2709 , - 1542 , - 935 , - 888 , - 1401 , - 2474 , - 4107 , - 1820 , - 93 , - 3406 , - 2799 , - 2752 , - 3265 , - 4338 , - 1491 , - 3684 , - 1957 , - 790 , - 183 , - 136 , - 649 , - 1722 , - 3355 , - 1068 , - 3821 , - 2654 , - 2047 , - 2000 , - 2513 , - 3586 , - 739 , - 2932 , - 1205 , - 38 , - 3911 , - 3864 , - 4377 , - 970 , - 2603 , - 316 , - 3069 , - 1902 , - 1295 , - 1248 , - 1761 , - 2834 , - 4467 , - 2180 , - 453 , - 3766 , - 3159 , - 3112 , - 3625 , - 218 , - 1851 , - 4044 , - 2317 , - 1150 , - 543 , - 496 , - 1009 , - 2082 , - 3715 , - 1428 , - 4181 , - 3014 , - 2407 , - 2360 , - 2873 , - 3946 , - 1099 , - 3292 , - 1565 , - 398 , - 4271 , - 4224 , - 257 , - 1330 , - 2963 , - 676 , - 3429 , - 2262 , - 1655 , - 1608 , - 2121 , - 3194 , - 347 , - 2540 , - 813 , - 4126 , - 3519 , - 3472 , - 3985 , - 578 , - 2211 , - 4404 , - 2677 , - 1510 , - 903 , - 856 , - 1369 , - 2442 , - 4075 , - 1788 , - 61 , - 3374 , - 2767 , - 2720 , - 3233 , - 4306 , - 1459 , - 3652 , - 1925 , - 758 , - 151 , - 104 , - 617 , - 1690 , - 3323 , - 1036 , - 3789 , - 2622 , - 2015 , - 1968 , - 2481 , - 3554 , - 707 , - 2900 , - 1173 , - 6 , - 3879 , - 3832 , - 4345 , - 938 , - 2571 , - 284 , - 3037 , - 1870 , - 1263 , - 1216 , - 1729 , - 2802 , - 4435 , - 2148 , - 421 , - 3734 , - 3127 , - 3080 , - 3593 , - 186 , - 1819 , - 4012 , - 2285 , - 1118 , - 511 , - 464 , - 977 , - 2050 , - 3683 , - 1396 , - 4149 , - 2982 , - 2375 , - 2328 , - 2841 , - 3914 , - 1067 , - 3260 , - 1533 , - 366 , - 4239 , - 4192 , - 225 , - 1298 , - 2931 , - 644 , - 3397 , - 2230 , - 1623 , - 1576 , - 2089 , - 3162 , - 315 , - 2508 , - 781 , - 4094 , - 3487 , - 3440 , - 3953 , - 546 , - 2179 , - 4372 , - 2645 , - 1478 , - 871 , - 824 , - 1337 , - 2410 , - 4043 , - 1756 , - 29 , - 3342 , - 2735 , - 2688 , - 3201 , - 4274 , - 1427 , - 3620 , - 1893 , - 726 , - 119 , - 72 , - 585 , - 1658 , - 3291 , - 1004 , - 3757 , - 2590 , - 1983 , - 1936 , - 2449 , - 3522 , - 675 , - 2868 , - 1141 , - 4454 , - 3847 , - 3800 , - 4313 , - 906 , - 2539 , - 252 , - 3005 , - 1838 , - 1231 , - 1184 , - 1697 , - 2770 , - 4403 , - 2116 , - 389 , - 3702 , - 3095 , - 3048 , - 3561 , - 154 , - 1787 , - 3980 , - 2253 , - 1086 , - 479 , - 432 , - 945 , - 2018 , - 3651 , - 1364 , - 4117 , - 2950 , - 2343 , - 2296 , - 2809 , - 3882 , - 1035 , - 3228 , - 1501 , - 334 , - 4207 , - 4160 , - 193 , - 1266 , - 2899 , - 612 , - 3365 , - 2198 , - 1591 , - 1544 , - 2057 , - 3130 , - 283 , - 2476 , - 749 , - 4062 , - 3455 , - 3408 , - 3921 , - 514 , - 2147 , - 4340 , - 2613 , - 1446 , - 839 , - 792 , - 1305 , - 2378 , - 4011 , - 1724 , - 4477 , - 3310 , - 2703 , - 2656 , - 3169 , - 4242 , - 1395 , - 3588 , - 1861 , - 694 , - 87 , - 40 , - 553 , - 1626 , - 3259 , - 972 , - 3725 , - 2558 , - 1951 , - 1904 , - 2417 , - 3490 , - 643 , - 2836 , - 1109 , - 4422 , - 3815 , - 3768 , - 4281 , - 874 , - 2507 , - 220 , - 2973 , - 1806 , - 1199 , - 1152 , - 1665 , - 2738 , - 4371 , - 2084 , - 357 , - 3670 , - 3063 , - 3016 , - 3529 , - 122 , - 1755 , - 3948 , - 2221 , - 1054 , - 447 , - 400 , - 913 , - 1986 , - 3619 , - 1332 , - 4085 , - 2918 , - 2311 , - 2264 , - 2777 , - 3850 , - 1003 , - 3196 , - 1469 , - 302 , - 4175 , - 4128 , - 161 , - 1234 , - 2867 , - 580 , - 3333 , - 2166 , - 1559 , - 1512 , - 2025 , - 3098 , - 251 , - 2444 , - 717 , - 4030 , - 3423 , - 3376 , - 3889 , - 482 , - 2115 , - 4308 , - 2581 , - 1414 , - 807 , - 760 , - 1273 , - 2346 , - 3979 , - 1692 , - 4445 , - 3278 , - 2671 , - 2624 , - 3137 , - 4210 , - 1363 , - 3556 , - 1829 , - 662 , - 55 , - 8 , - 521 , - 1594 , - 3227 , - 940 , - 3693 , - 2526 , - 1919 , - 1872 , - 2385 , - 3458 , - 611 , - 2804 , - 1077 , - 4390 , - 3783 , - 3736 , - 4249 , - 842 , - 2475 , - 188 , - 2941 , - 1774 , - 1167 , - 1120 , - 1633 , - 2706 , - 4339 , - 2052 , - 325 , - 3638 , - 3031 , - 2984 , - 3497 , - 90 , - 1723 , - 3916 , - 2189 , - 1022 , - 415 , - 368 , - 881 , - 1954 , - 3587 , - 1300 , - 4053 , - 2886 , - 2279 , - 2232 , - 2745 , - 3818 , - 971 , - 3164 , - 1437 , - 270 , - 4143 , - 4096 , - 129 , - 1202 , - 2835 , - 548 , - 3301 , - 2134 , - 1527 , - 1480 , - 1993 , - 3066 , - 219 , - 2412 , - 685 , - 3998 , - 3391 , - 3344 , - 3857 , - 450 , - 2083 , - 4276 , - 2549 , - 1382 , - 775 , - 728 , - 1241 , - 2314 , - 3947 , - 1660 , - 4413 , - 3246 , - 2639 , - 2592 , - 3105 , - 4178 , - 1331 , - 3524 , - 1797 , - 630 , - 23 , - 4456 , - 489 , - 1562 , - 3195 , - 908 , - 3661 , - 2494 , - 1887 , - 1840 , - 2353 , - 3426 , - 579 , - 2772 , - 1045 , - 4358 , - 3751 , - 3704 , - 4217 , - 810 , - 2443 , - 156 , - 2909 , - 1742 , - 1135 , - 1088 , - 1601 , - 2674 , - 4307 , - 2020 , - 293 , - 3606 , - 2999 , - 2952 , - 3465 , - 58 , - 1691 , - 3884 , - 2157 , - 990 , - 383 , - 336 , - 849 , - 1922 , - 3555 , - 1268 , - 4021 , - 2854 , - 2247 , - 2200 , - 2713 , - 3786 , - 939 , - 3132 , - 1405 , - 238 , - 4111 , - 4064 , - 97 , - 1170 , - 2803 , - 516 , - 3269 , - 2102 , - 1495 , - 1448 , - 1961 , - 3034 , - 187 , - 2380 , - 653 , - 3966 , - 3359 , - 3312 , - 3825 , - 418 , - 2051 , - 4244 , - 2517 , - 1350 , - 743 , - 696 , - 1209 , - 2282 , - 3915 , - 1628 , - 4381 , - 3214 , - 2607 , - 2560 , - 3073 , - 4146 , - 1299 , - 3492 , - 1765 , - 598 , - 4471 , - 4424 , - 457 , - 1530 , - 3163 , - 876 , - 3629 , - 2462 , - 1855 , - 1808 , - 2321 , - 3394 , - 547 , - 2740 , - 1013 , - 4326 , - 3719 , - 3672 , - 4185 , - 778 , - 2411 , - 124 , - 2877 , - 1710 , - 1103 , - 1056 , - 1569 , - 2642 , - 4275 , - 1988 , - 261 , - 3574 , - 2967 , - 2920 , - 3433 , - 26 , - 1659 , - 3852 , - 2125 , - 958 , - 351 , - 304 , - 817 , - 1890 , - 3523 , - 1236 , - 3989 , - 2822 , - 2215 , - 2168 , - 2681 , - 3754 , - 907 , - 3100 , - 1373 , - 206 , - 4079 , - 4032 , - 65 , - 1138 , - 2771 , - 484 , - 3237 , - 2070 , - 1463 , - 1416 , - 1929 , - 3002 , - 155 , - 2348 , - 621 , - 3934 , - 3327 , - 3280 , - 3793 , - 386 , - 2019 , - 4212 , - 2485 , - 1318 , - 711 , - 664 , - 1177 , - 2250 , - 3883 , - 1596 , - 4349 , - 3182 , - 2575 , - 2528 , - 3041 , - 4114 , - 1267 , - 3460 , - 1733 , - 566 , - 4439 , - 4392 , - 425 , - 1498 , - 3131 , - 844 , - 3597 , - 2430 , - 1823 , - 1776 , - 2289 , - 3362 , - 515 , - 2708 , - 981 , - 4294 , - 3687 , - 3640 , - 4153 , - 746 , - 2379 , - 92 , - 2845 , - 1678 , - 1071 , - 1024 , - 1537 , - 2610 , - 4243 , - 1956 , - 229 , - 3542 , - 2935 , - 2888 , - 3401 , - 4474 , - 1627 , - 3820 , - 2093 , - 926 , - 319 , - 272 , - 785 , - 1858 , - 3491 , - 1204 , - 3957 , - 2790 , - 2183 , - 2136 , - 2649 , - 3722 , - 875 , - 3068 , - 1341 , - 174 , - 4047 , - 4000 , - 33 , - 1106 , - 2739 , - 452 , - 3205 , - 2038 , - 1431 , - 1384 , - 1897 , - 2970 , - 123 , - 2316 , - 589 , - 3902 , - 3295 , - 3248 , - 3761 , - 354 , - 1987 , - 4180 , - 2453 , - 1286 , - 679 , - 632 , - 1145 , - 2218 , - 3851 , - 1564 , - 4317 , - 3150 , - 2543 , - 2496 , - 3009 , - 4082 , - 1235 , - 3428 , - 1701 , - 534 , - 4407 , - 4360 , - 393 , - 1466 , - 3099 , - 812 , - 3565 , - 2398 , - 1791 , - 1744 , - 2257 , - 3330 , - 483 , - 2676 , - 949 , - 4262 , - 3655 , - 3608 , - 4121 , - 714 , - 2347 , - 60 , - 2813 , - 1646 , - 1039 , - 992 , - 1505 , - 2578 , - 4211 , - 1924 , - 197 , - 3510 , - 2903 , - 2856 , - 3369 , - 4442 , - 1595 , - 3788 , - 2061 , - 894 , - 287 , - 240 , - 753 , - 1826 , - 3459 , - 1172 , - 3925 , - 2758 , - 2151 , - 2104 , - 2617 , - 3690 , - 843 , - 3036 , - 1309 , - 142 , - 4015 , - 3968 , - 1 , - 1074 , - 2707 , - 420 , - 3173 , - 2006 , - 1399 , - 1352 , - 1865 , - 2938 , - 91 , - 2284 , - 557 , - 3870 , - 3263 , - 3216 , - 3729 , - 322 , - 1955 , - 4148 , - 2421 , - 1254 , - 647 , - 600 , - 1113 , - 2186 , - 3819 , - 1532 , - 4285 , - 3118 , - 2511 , - 2464 , - 2977 , - 4050 , - 1203 , - 3396 , - 1669 , - 502 , - 4375 , - 4328 , - 361 , - 1434 , - 3067 , - 780 , - 3533 , - 2366 , - 1759 , - 1712 , - 2225 , - 3298 , - 451 , - 2644 , - 917 , - 4230 , - 3623 , - 3576 , - 4089 , - 682 , - 2315 , - 28 , - 2781 , - 1614 , - 1007 , - 960 , - 1473 , - 2546 , - 4179 , - 1892 , - 165 , - 3478 , - 2871 , - 2824 , - 3337 , - 4410 , - 1563 , - 3756 , - 2029 , - 862 , - 255 , - 208 , - 721 , - 1794 , - 3427 , - 1140 , - 3893 , - 2726 , - 2119 , - 2072 , - 2585 , - 3658 , - 811 , - 3004 , - 1277 , - 110 , - 3983 , - 3936 , - 4449 , - 1042 , - 2675 , - 388 , - 3141 , - 1974 , - 1367 , - 1320 , - 1833 , - 2906 , - 59 , - 2252 , - 525 , - 3838 , - 3231 , - 3184 , - 3697 , - 290 , - 1923 , - 4116 , - 2389 , - 1222 , - 615 , - 568 , - 1081 , - 2154 , - 3787 , - 1500 , - 4253 , - 3086 , - 2479 , - 2432 , - 2945 , - 4018 , - 1171 , - 3364 , - 1637 , - 470 , - 4343 , - 4296 , - 329 , - 1402 , - 3035 , - 748 , - 3501 , - 2334 , - 1727 , - 1680 , - 2193 , - 3266 , - 419 , - 2612 , - 885 , - 4198 , - 3591 , - 3544 , - 4057 , - 650 , - 2283 , - 4476 , - 2749 , - 1582 , - 975 , - 928 , - 1441 , - 2514 , - 4147 , - 1860 , - 133 , - 3446 , - 2839 , - 2792 , - 3305 , - 4378 , - 1531 , - 3724 , - 1997 , - 830 , - 223 , - 176 , - 689 , - 1762 , - 3395 , - 1108 , - 3861 , - 2694 , - 2087 , - 2040 , - 2553 , - 3626 , - 779 , - 2972 , - 1245 , - 78 , - 3951 , - 3904 , - 4417 , - 1010 , - 2643 , - 356 , - 3109 , - 1942 , - 1335 , - 1288 , - 1801 , - 2874 , - 27 , - 2220 , - 493 , - 3806 , - 3199 , - 3152 , - 3665 , - 258 , - 1891 , - 4084 , - 2357 , - 1190 , - 583 , - 536 , - 1049 , - 2122 , - 3755 , - 1468 , - 4221 , - 3054 , - 2447 , - 2400 , - 2913 , - 3986 , - 1139 , - 3332 , - 1605 , - 438 , - 4311 , - 4264 , - 297 , - 1370 , - 3003 , - 716 , - 3469 , - 2302 , - 1695 , - 1648 , - 2161 , - 3234 , - 387 , - 2580 , - 853 , - 4166 , - 3559 , - 3512 , - 4025 , - 618 , - 2251 , - 4444 , - 2717 , - 1550 , - 943 , - 896 , - 1409 , - 2482 , - 4115 , - 1828 , - 101 , - 3414 , - 2807 , - 2760 , - 3273 , - 4346 , - 1499 , - 3692 , - 1965 , - 798 , - 191 , - 144 , - 657 , - 1730 , - 3363 , - 1076 , - 3829 , - 2662 , - 2055 , - 2008 , - 2521 , - 3594 , - 747 , - 2940 , - 1213 , - 46 , - 3919 , - 3872 , - 4385 , - 978 , - 2611 , - 324 , - 3077 , - 1910 , - 1303 , - 1256 , - 1769 , - 2842 , - 4475 , - 2188 , - 461 , - 3774 , - 3167 , - 3120 , - 3633 , - 226 , - 1859 , - 4052 , - 2325 , - 1158 , - 551 , - 504 , - 1017 , - 2090 , - 3723 , - 1436 , - 4189 , - 3022 , - 2415 , - 2368 , - 2881 , - 3954 , - 1107 , - 3300 , - 1573 , - 406 , - 4279 , - 4232 , - 265 , - 1338 , - 2971 , - 684 , - 3437 , - 2270 , - 1663 , - 1616 , - 2129 , - 3202 , - 355 , - 2548 , - 821 , - 4134 , - 3527 , - 3480 , - 3993 , - 586 , - 2219 , - 4412 , - 2685 , - 1518 , - 911 , - 864 , - 1377 , - 2450 , - 4083 , - 1796 , - 69 , - 3382 , - 2775 , - 2728 , - 3241 , - 4314 , - 1467 , - 3660 , - 1933 , - 766 , - 159 , - 112 , - 625 , - 1698 , - 3331 , - 1044 , - 3797 , - 2630 , - 2023 , - 1976 , - 2489 , - 3562 , - 715 , - 2908 , - 1181 , - 14 , - 3887 , - 3840 , - 4353 , - 946 , - 2579 , - 292 , - 3045 , - 1878 , - 1271 , - 1224 , - 1737 , - 2810 , - 4443 , - 2156 , - 429 , - 3742 , - 3135 , - 3088 , - 3601 , - 194 , - 1827 , - 4020 , - 2293 , - 1126 , - 519 , - 472 , - 985 , - 2058 , - 3691 , - 1404 , - 4157 , - 2990 , - 2383 , - 2336 , - 2849 , - 3922 , - 1075 , - 3268 , - 1541 , - 374 , - 4247 , - 4200 , - 233 , - 1306 , - 2939 , - 652 , - 3405 , - 2238 , - 1631 , - 1584 , - 2097 , - 3170 , - 323 , - 2516 , - 789 , - 4102 , - 3495 , - 3448 , - 3961 , - 554 , - 2187 , - 4380 , - 2653 , - 1486 , - 879 , - 832 , - 1345 , - 2418 , - 4051 , - 1764 , - 37 , - 3350 , - 2743 , - 2696 , - 3209 , - 4282 , - 1435 , - 3628 , - 1901 , - 734 , - 127 , - 80 , - 593 , - 1666 , - 3299 , - 1012 , - 3765 , - 2598 , - 1991 , - 1944 , - 2457 , - 3530 , - 683 , - 2876 , - 1149 , - 4462 , - 3855 , - 3808 , - 4321 , - 914 , - 2547 , - 260 , - 3013 , - 1846 , - 1239 , - 1192 , - 1705 , - 2778 , - 4411 , - 2124 , - 397 , - 3710 , - 3103 , - 3056 , - 3569 , - 162 , - 1795 , - 3988 , - 2261 , - 1094 , - 487 , - 440 , - 953 , - 2026 , - 3659 , - 1372 , - 4125 , - 2958 , - 2351 , - 2304 , - 2817 , - 3890 , - 1043 , - 3236 , - 1509 , - 342 , - 4215 , - 4168 , - 201 , - 1274 , - 2907 , - 620 , - 3373 , - 2206 , - 1599 , - 1552 , - 2065 , - 3138 , - 291 , - 2484 , - 757 , - 4070 , - 3463 , - 3416 , - 3929 , - 522 , - 2155 , - 4348 , - 2621 , - 1454 , - 847 , - 800 , - 1313 , - 2386 , - 4019 , - 1732 , - 5 , - 3318 , - 2711 , - 2664 , - 3177 , - 4250 , - 1403 , - 3596 , - 1869 , - 702 , - 95 , - 48 , - 561 , - 1634 , - 3267 , - 980 , - 3733 , - 2566 , - 1959 , - 1912 , - 2425 , - 3498 , - 651 , - 2844 , - 1117 , - 4430 , - 3823 , - 3776 , - 4289 , - 882 , - 2515 , - 228 , - 2981 , - 1814 , - 1207 , - 1160 , - 1673 , - 2746 , - 4379 , - 2092 , - 365 , - 3678 , - 3071 , - 3024 , - 3537 , - 130 , - 1763 , - 3956 , - 2229 , - 1062 , - 455 , - 408 , - 921 , - 1994 , - 3627 , - 1340 , - 4093 , - 2926 , - 2319 , - 2272 , - 2785 , - 3858 , - 1011 , - 3204 , - 1477 , - 310 , - 4183 , - 4136 , - 169 , - 1242 , - 2875 , - 588 , - 3341 , - 2174 , - 1567 , - 1520 , - 2033 , - 3106 , - 259 , - 2452 , - 725 , - 4038 , - 3431 , - 3384 , - 3897 , - 490 , - 2123 , - 4316 , - 2589 , - 1422 , - 815 , - 768 , - 1281 , - 2354 , - 3987 , - 1700 , - 4453 , - 3286 , - 2679 , - 2632 , - 3145 , - 4218 , - 1371 , - 3564 , - 1837 , - 670 , - 63 , - 16 , - 529 , - 1602 , - 3235 , - 948 , - 3701 , - 2534 , - 1927 , - 1880 , - 2393 , - 3466 , - 619 , - 2812 , - 1085 , - 4398 , - 3791 , - 3744 , - 4257 , - 850 , - 2483 , - 196 , - 2949 , - 1782 , - 1175 , - 1128 , - 1641 , - 2714 , - 4347 , - 2060 , - 333 , - 3646 , - 3039 , - 2992 , - 3505 , - 98 , - 1731 , - 3924 , - 2197 , - 1030 , - 423 , - 376 , - 889 , - 1962 , - 3595 , - 1308 , - 4061 , - 2894 , - 2287 , - 2240 , - 2753 , - 3826 , - 979 , - 3172 , - 1445 , - 278 , - 4151 , - 4104 , - 137 , - 1210 , - 2843 , - 556 , - 3309 , - 2142 , - 1535 , - 1488 , - 2001 , - 3074 , - 227 , - 2420 , - 693 , - 4006 , - 3399 , - 3352 , - 3865 , - 458 , - 2091 , - 4284 , - 2557 , - 1390 , - 783 , - 736 , - 1249 , - 2322 , - 3955 , - 1668 , - 4421 , - 3254 , - 2647 , - 2600 , - 3113 , - 4186 , - 1339 , - 3532 , - 1805 , - 638 , - 31 , - 4464 , - 497 , - 1570 , - 3203 , - 916 , - 3669 , - 2502 , - 1895 , - 1848 , - 2361 , - 3434 , - 587 , - 2780 , - 1053 , - 4366 , - 3759 , - 3712 , - 4225 , - 818 , - 2451 , - 164 , - 2917 , - 1750 , - 1143 , - 1096 , - 1609 , - 2682 , - 4315 , - 2028 , - 301 , - 3614 , - 3007 , - 2960 , - 3473 , - 66 , - 1699 , - 3892 , - 2165 , - 998 , - 391 , - 344 , - 857 , - 1930 , - 3563 , - 1276 , - 4029 , - 2862 , - 2255 , - 2208 , - 2721 , - 3794 , - 947 , - 3140 , - 1413 , - 246 , - 4119 , - 4072 , - 105 , - 1178 , - 2811 , - 524 , - 3277 , - 2110 , - 1503 , - 1456 , - 1969 , - 3042 , - 195 , - 2388 , - 661 , - 3974 , - 3367 , - 3320 , - 3833 , - 426 , - 2059 , - 4252 , - 2525 , - 1358 , - 751 , - 704 , - 1217 , - 2290 , - 3923 , - 1636 , - 4389 , - 3222 , - 2615 , - 2568 , - 3081 , - 4154 , - 1307 , - 3500 , - 1773 , - 606 , - 4479 , - 4432 , - 465 , - 1538 , - 3171 , - 884 , - 3637 , - 2470 , - 1863 , - 1816 , - 2329 , - 3402 , - 555 , - 2748 , - 1021 , - 4334 , - 3727 , - 3680 , - 4193 , - 786 , - 2419 , - 132 , - 2885 , - 1718 , - 1111 , - 1064 , - 1577 , - 2650 , - 4283 , - 1996 , - 269 , - 3582 , - 2975 , - 2928 , - 3441 , - 34 , - 1667 , - 3860 , - 2133 , - 966 , - 359 , - 312 , - 825 , - 1898 , - 3531 , - 1244 , - 3997 , - 2830 , - 2223 , - 2176 , - 2689 , - 3762 , - 915 , - 3108 , - 1381 , - 214 , - 4087 , - 4040 , - 73 , - 1146 , - 2779 , - 492 , - 3245 , - 2078 , - 1471 , - 1424 , - 1937 , - 3010 , - 163 , - 2356 , - 629 , - 3942 , - 3335 , - 3288 , - 3801 , - 394 , - 2027 , - 4220 , - 2493 , - 1326 , - 719 , - 672 , - 1185 , - 2258 , - 3891 , - 1604 , - 4357 , - 3190 , - 2583 , - 2536 , - 3049 , - 4122 , - 1275 , - 3468 , - 1741 , - 574 , - 4447 , - 4400 , - 433 , - 1506 , - 3139 , - 852 , - 3605 , - 2438 , - 1831 , - 1784 , - 2297 , - 3370 , - 523 , - 2716 , - 989 , - 4302 , - 3695 , - 3648 , - 4161 , - 754 , - 2387 , - 100 , - 2853 , - 1686 , - 1079 , - 1032 , - 1545 , - 2618 , - 4251 , - 1964 , - 237 , - 3550 , - 2943 , - 2896 , - 3409 , - 2 , - 1635 , - 3828 , - 2101 , - 934 , - 327 , - 280 , - 793 , - 1866 , - 3499 , - 1212 , - 3965 , - 2798 , - 2191 , - 2144 , - 2657 , - 3730 , - 883 , - 3076 , - 1349 , - 182 , - 4055 , - 4008 , - 41 , - 1114 , - 2747 , - 460 , - 3213 , - 2046 , - 1439 , - 1392 , - 1905 , - 2978 , - 131 , - 2324 , - 597 , - 3910 , - 3303 , - 3256 , - 3769 , - 362 , - 1995 , - 4188 , - 2461 , - 1294 , - 687 , - 640 , - 1153 , - 2226 , - 3859 , - 1572 , - 4325 , - 3158 , - 2551 , - 2504 , - 3017 , - 4090 , - 1243 , - 3436 , - 1709 , - 542 , - 4415 , - 4368 , - 401 , - 1474 , - 3107 , - 820 , - 3573 , - 2406 , - 1799 , - 1752 , - 2265 , - 3338 , - 491 , - 2684 , - 957 , - 4270 , - 3663 , - 3616 , - 4129 , - 722 , - 2355 , - 68 , - 2821 , - 1654 , - 1047 , - 1000 , - 1513 , - 2586 , - 4219 , - 1932 , - 205 , - 3518 , - 2911 , - 2864 , - 3377 , - 4450 , - 1603 , - 3796 , - 2069 , - 902 , - 295 , - 248 , - 761 , - 1834 , - 3467 , - 1180 , - 3933 , - 2766 , - 2159 , - 2112 , - 2625 , - 3698 , - 851 , - 3044 , - 1317 , - 150 , - 4023 , - 3976 , - 9 , - 1082 , - 2715 , - 428 , - 3181 , - 2014 , - 1407 , - 1360 , - 1873 , - 2946 , - 99 , - 2292 , - 565 , - 3878 , - 3271 , - 3224 , - 3737 , - 330 , - 1963 , - 4156 , - 2429 , - 1262 , - 655 , - 608 , - 1121 , - 2194 , - 3827 , - 1540 , - 4293 , - 3126 , - 2519 , - 2472 , - 2985 , - 4058 , - 1211 , - 3404 , - 1677 , - 510 , - 4383 , - 4336 , - 369 , - 1442 , - 3075 , - 788 , - 3541 , - 2374 , - 1767 , - 1720 , - 2233 , - 3306 , - 459 , - 2652 , - 925 , - 4238 , - 3631 , - 3584 , - 4097 , - 690 , - 2323 , - 36 , - 2789 , - 1622 , - 1015 , - 968 , - 1481 , - 2554 , - 4187 , - 1900 , - 173 , - 3486 , - 2879 , - 2832 , - 3345 , - 4418 , - 1571 , - 3764 , - 2037 , - 870 , - 263 , - 216 , - 729 , - 1802 , - 3435 , - 1148 , - 3901 , - 2734 , - 2127 , - 2080 , - 2593 , - 3666 , - 819 , - 3012 , - 1285 , - 118 , - 3991 , - 3944 , - 4457 , - 1050 , - 2683 , - 396 , - 3149 , - 1982 , - 1375 , - 1328 , - 1841 , - 2914 , - 67 , - 2260 , - 533 , - 3846 , - 3239 , - 3192 , - 3705 , - 298 , - 1931 , - 4124 , - 2397 , - 1230 , - 623 , - 576 , - 1089 , - 2162 , - 3795 , - 1508 , - 4261 , - 3094 , - 2487 , - 2440 , - 2953 , - 4026 , - 1179 , - 3372 , - 1645 , - 478 , - 4351 , - 4304 , - 337 , - 1410 , - 3043 , - 756 , - 3509 , - 2342 , - 1735 , - 1688 , - 2201 , - 3274 , - 427 , - 2620 , - 893 , - 4206 , - 3599 , - 3552 , - 4065 , - 658 , - 2291 , - 4 , - 2757 , - 1590 , - 983 , - 936 , - 1449 , - 2522 , - 4155 , - 1868 , - 141 , - 3454 , - 2847 , - 2800 , - 3313 , - 4386 , - 1539 , - 3732 , - 2005 , - 838 , - 231 , - 184 , - 697 , - 1770 , - 3403 , - 1116 , - 3869 , - 2702 , - 2095 , - 2048 , - 2561 , - 3634 , - 787 , - 2980 , - 1253 , - 86 , - 3959 , - 3912 , - 4425 , - 1018 , - 2651 , - 364 , - 3117 , - 1950 , - 1343 , - 1296 , - 1809 , - 2882 , - 35 , - 2228 , - 501 , - 3814 , - 3207 , - 3160 , - 3673 , - 266 , - 1899 , - 4092 , - 2365 , - 1198 , - 591 , - 544 , - 1057 , - 2130 , - 3763 , - 1476 , - 4229 , - 3062 , - 2455 , - 2408 , - 2921 , - 3994 , - 1147 , - 3340 , - 1613 , - 446 , - 4319 , - 4272 , - 305 , - 1378 , - 3011 , - 724 , - 3477 , - 2310 , - 1703 , - 1656 , - 2169 , - 3242 , - 395 , - 2588 , - 861 , - 4174 , - 3567 , - 3520 , - 4033 , - 626 , - 2259 , - 4452 , - 2725 , - 1558 , - 951 , - 904 , - 1417 , - 2490 , - 4123 , - 1836 , - 109 , - 3422 , - 2815 , - 2768 , - 3281 , - 4354 , - 1507 , - 3700 , - 1973 , - 806 , - 199 , - 152 , - 665 , - 1738 , - 3371 , - 1084 , - 3837 , - 2670 , - 2063 , - 2016 , - 2529 , - 3602 , - 755 , - 2948 , - 1221 , - 54 , - 3927 , - 3880 , - 4393 , - 986 , - 2619 , - 332 , - 3085 , - 1918 , - 1311 , - 1264 , - 1777 , - 2850 , - 3 , - 2196 , - 469 , - 3782 , - 3175 , - 3128 , - 3641 , - 234 , - 1867 , - 4060 , - 2333 , - 1166 , - 559 , - 512 , - 1025 , - 2098 , - 3731 , - 1444 , - 4197 , - 3030 , - 2423 , - 2376 , - 2889 , - 3962 , - 1115 , - 3308 , - 1581 , - 414 , - 4287 , - 4240 , - 273 , - 1346 , - 2979 , - 692 , - 3445 , - 2278 , - 1671 , - 1624 , - 2137 , - 3210 , - 363 , - 2556 , - 829 , - 4142 , - 3535 , - 3488 , - 4001 , - 594 , - 2227 , - 4420 , - 2693 , - 1526 , - 919 , - 872 , - 1385 , - 2458 , - 4091 , - 1804 , - 77 , - 3390 , - 2783 , - 2736 , - 3249 , - 4322 , - 1475 , - 3668 , - 1941 , - 774 , - 167 , - 120 , - 633 , - 1706 , - 3339 , - 1052 , - 3805 , - 2638 , - 2031 , - 1984 , - 2497 , - 3570 , - 723 , - 2916 , - 1189 , - 22 , - 3895 , - 3848 , - 4361 , - 954 , - 2587 , - 300 , - 3053 , - 1886 , - 1279 , - 1232 , - 1745 , - 2818 , - 4451 , - 2164 , - 437 , - 3750 , - 3143 , - 3096 , - 3609 , - 202 , - 1835 , - 4028 , - 2301 , - 1134 , - 527 , - 480 , - 993 , - 2066 , - 3699 , - 1412 , - 4165 , - 2998 , - 2391 , - 2344 , - 2857 , - 3930 , - 1083 , - 3276 , - 1549 , - 382 , - 4255 , - 4208 , - 241 , - 1314 , - 2947 , - 660 , - 3413 , - 2246 , - 1639 , - 1592 , - 2105 , - 3178 , - 331 , - 2524 , - 797 , - 4110 , - 3503 , - 3456 , - 3969 , - 562 , - 2195 , - 4388 , - 2661 , - 1494 , - 887 , - 840 , - 1353 , - 2426 , - 4059 , - 1772 , - 45 , - 3358 , - 2751 , - 2704 , - 3217 , - 4290 , - 1443 , - 3636 , - 1909 , - 742 , - 135 , - 88 , - 601 , - 1674 , - 3307 , - 1020 , - 3773 , - 2606 , - 1999 , - 1952 , - 2465 , - 3538 , - 691 , - 2884 , - 1157 , - 4470 , - 3863 , - 3816 , - 4329 , - 922 , - 2555 , - 268 , - 3021 , - 1854 , - 1247 , - 1200 , - 1713 , - 2786 , - 4419 , - 2132 , - 405 , - 3718 , - 3111 , - 3064 , - 3577 , - 170 , - 1803 , - 3996 , - 2269 , - 1102 , - 495 , - 448 , - 961 , - 2034 , - 3667 , - 1380 , - 4133 , - 2966 , - 2359 , - 2312 , - 2825 , - 3898 , - 1051 , - 3244 , - 1517 , - 350 , - 4223 , - 4176 , - 209 , - 1282 , - 2915 , - 628 , - 3381 , - 2214 , - 1607 , - 1560 , - 2073 , - 3146 , - 299 , - 2492 , - 765 , - 4078 , - 3471 , - 3424 , - 3937 , - 530 , - 2163 , - 4356 , - 2629 , - 1462 , - 855 , - 808 , - 1321 , - 2394 , - 4027 , - 1740 , - 13 , - 3326 , - 2719 , - 2672 , - 3185 , - 4258 , - 1411 , - 3604 , - 1877 , - 710 , - 103 , - 56 , - 569 , - 1642 , - 3275 , - 988 , - 3741 , - 2574 , - 1967 , - 1920 , - 2433 , - 3506 , - 659 , - 2852 , - 1125 , - 4438 , - 3831 , - 3784 , - 4297 , - 890 , - 2523 , - 236 , - 2989 , - 1822 , - 1215 , - 1168 , - 1681 , - 2754 , - 4387 , - 2100 , - 373 , - 3686 , - 3079 , - 3032 , - 3545 , - 138 , - 1771 , - 3964 , - 2237 , - 1070 , - 463 , - 416 , - 929 , - 2002 , - 3635 , - 1348 , - 4101 , - 2934 , - 2327 , - 2280 , - 2793 , - 3866 , - 1019 , - 3212 , - 1485 , - 318 , - 4191 , - 4144 , - 177 , - 1250 , - 2883 , - 596 , - 3349 , - 2182 , - 1575 , - 1528 , - 2041 , - 3114 , - 267 , - 2460 , - 733 , - 4046 , - 3439 , - 3392 , - 3905 , - 498 , - 2131 , - 4324 , - 2597 , - 1430 , - 823 , - 776 , - 1289 , - 2362 , - 3995 , - 1708 , - 4461 , - 3294 , - 2687 , - 2640 , - 3153 , - 4226 , - 1379 , - 3572 , - 1845 , - 678 , - 71 , - 24 , - 537 , - 1610 , - 3243 , - 956 , - 3709 , - 2542 , - 1935 , - 1888 , - 2401 , - 3474 , - 627 , - 2820 , - 1093 , - 4406 , - 3799 , - 3752 , - 4265 , - 858 , - 2491 , - 204 , - 2957 , - 1790 , - 1183 , - 1136 , - 1649 , - 2722 , - 4355 , - 2068 , - 341 , - 3654 , - 3047 , - 3000 , - 3513 , - 106 , - 1739 , - 3932 , - 2205 , - 1038 , - 431 , - 384 , - 897 , - 1970 , - 3603 , - 1316 , - 4069 , - 2902 , - 2295 , - 2248 , - 2761 , - 3834 , - 987 , - 3180 , - 1453 , - 286 , - 4159 , - 4112 , - 145 , - 1218 , - 2851 , - 564 , - 3317 , - 2150 , - 1543 , - 1496 , - 2009 , - 3082 , - 235 , - 2428 , - 701 , - 4014 , - 3407 , - 3360 , - 3873 , - 466 , - 2099 , - 4292 , - 2565 , - 1398 , - 791 , - 744 , - 1257 , - 2330 , - 3963 , - 1676 , - 4429 , - 3262 , - 2655 , - 2608 , - 3121 , - 4194 , - 1347 , - 3540 , - 1813 , - 646 , - 39 , - 4472 , - 505 , - 1578 , - 3211 , - 924 , - 3677 , - 2510 , - 1903 , - 1856 , - 2369 , - 3442 , - 595 , - 2788 , - 1061 , - 4374 , - 3767 , - 3720 , - 4233 , - 826 , - 2459 , - 172 , - 2925 , - 1758 , - 1151 , - 1104 , - 1617 , - 2690 , - 4323 , - 2036 , - 309 , - 3622 , - 3015 , - 2968 , - 3481 , - 74 , - 1707 , - 3900 , - 2173 , - 1006 , - 399 , - 352 , - 865 , - 1938 , - 3571 , - 1284 , - 4037 , - 2870 , - 2263 , - 2216 , - 2729 , - 3802 , - 955 , - 3148 , - 1421 , - 254 , - 4127 , - 4080 , - 113 , - 1186 , - 2819 , - 532 , - 3285 , - 2118 , - 1511 , - 1464 , - 1977 , - 3050 , - 203 , - 2396 , - 669 , - 3982 , - 3375 , - 3328 , - 3841 , - 434 , - 2067 , - 4260 , - 2533 , - 1366 , - 759 , - 712 , - 1225 , - 2298 , - 3931 , - 1644 , - 4397 , - 3230 , - 2623 , - 2576 , - 3089 , - 4162 , - 1315 , - 3508 , - 1781 , - 614 , - 7 , - 4440 , - 473 , - 1546 , - 3179 , - 892 , - 3645 , - 2478 , - 1871 , - 1824 , - 2337 , - 3410 , - 563 , - 2756 , - 1029 , - 4342 , - 3735 , - 3688 , - 4201 , - 794 , - 2427 , - 140 , - 2893 , - 1726 , - 1119 , - 1072 , - 1585 , - 2658 , - 4291 , - 2004 , - 277 , - 3590 , - 2983 , - 2936 , - 3449 , - 42 , - 1675 , - 3868 , - 2141 , - 974 , - 367 , - 320 , - 833 , - 1906 , - 3539 , - 1252 , - 4005 , - 2838 , - 2231 , - 2184 , - 2697 , - 3770 , - 923 , - 3116 , - 1389 , - 222 , - 4095 , - 4048 , - 81 , - 1154 , - 2787 , - 500 , - 3253 , - 2086 , - 1479 , - 1432 , - 1945 , - 3018 , - 171 , - 2364 , - 637 , - 3950 , - 3343 , - 3296 , - 3809 , - 402 , - 2035 , - 4228 , - 2501 , - 1334 , - 727 , - 680 , - 1193 , - 2266 , - 3899 , - 1612 , - 4365 , - 3198 , - 2591 , - 2544 , - 3057 , - 4130 , - 1283 , - 3476 , - 1749 , - 582 , - 4455 , - 4408 , - 441 , - 1514 , - 3147 , - 860 , - 3613 , - 2446 , - 1839 , - 1792 , - 2305 , - 3378 , - 531 , - 2724 , - 997 , - 4310 , - 3703 , - 3656 , - 4169 , - 762 , - 2395 , - 108 , - 2861 , - 1694 , - 1087 , - 1040 , - 1553 , - 2626 , - 4259 , - 1972 , - 245 , - 3558 , - 2951 , - 2904 , - 3417 , - 10 , - 1643 , - 3836 , - 2109 , - 942 , - 335 , - 288 , - 801 , - 1874 , - 3507 , - 1220 , - 3973 , - 2806 , - 2199 , - 2152 , - 2665 , - 3738 , - 891 , - 3084 , - 1357 , - 190 , - 4063 , - 4016 , - 49 , - 1122 , - 2755 , - 468 , - 3221 , - 2054 , - 1447 , - 1400 , - 1913 , - 2986 , - 139 , - 2332 , - 605 , - 3918 , - 3311 , - 3264 , - 3777 , - 370 , - 2003 , - 4196 , - 2469 , - 1302 , - 695 , - 648 , - 1161 , - 2234 , - 3867 , - 1580 , - 4333 , - 3166 , - 2559 , - 2512 , - 3025 , - 4098 , - 1251 , - 3444 , - 1717 , - 550 , - 4423 , - 4376 , - 409 , - 1482 , - 3115 , - 828 , - 3581 , - 2414 , - 1807 , - 1760 , - 2273 , - 3346 , - 499 , - 2692 , - 965 , - 4278 , - 3671 , - 3624 , - 4137 , - 730 , - 2363 , - 76 , - 2829 , - 1662 , - 1055 , - 1008 , - 1521 , - 2594 , - 4227 , - 1940 , - 213 , - 3526 , - 2919 , - 2872 , - 3385 , - 4458 , - 1611 , - 3804 , - 2077 , - 910 , - 303 , - 256 , - 769 , - 1842 , - 3475 , - 1188 , - 3941 , - 2774 , - 2167 , - 2120 , - 2633 , - 3706 , - 859 , - 3052 , - 1325 , - 158 , - 4031 , - 3984 , - 17 , - 1090 , - 2723 , - 436 , - 3189 , - 2022 , - 1415 , - 1368 , - 1881 , - 2954 , - 107 , - 2300 , - 573 , - 3886 , - 3279 , - 3232 , - 3745 , - 338 , - 1971 , - 4164 , - 2437 , - 1270 , - 663 , - 616 , - 1129 , - 2202 , - 3835 , - 1548 , - 4301 , - 3134 , - 2527 , - 2480 , - 2993 , - 4066 , - 1219 , - 3412 , - 1685 , - 518 , - 4391 , - 4344 , - 377 , - 1450 , - 3083 , - 796 , - 3549 , - 2382 , - 1775 , - 1728 , - 2241 , - 3314 , - 467 , - 2660 , - 933 , - 4246 , - 3639 , - 3592 , - 4105 , - 698 , - 2331 , - 44 , - 2797 , - 1630 , - 1023 , - 976 , - 1489 , - 2562 , - 4195 , - 1908 , - 181 , - 3494 , - 2887 , - 2840 , - 3353 , - 4426 , - 1579 , - 3772 , - 2045 , - 878 , - 271 , - 224 , - 737 , - 1810 , - 3443 , - 1156 , - 3909 , - 2742 , - 2135 , - 2088 , - 2601 , - 3674 , - 827 , - 3020 , - 1293 , - 126 , - 3999 , - 3952 , - 4465 , - 1058 , - 2691 , - 404 , - 3157 , - 1990 , - 1383 , - 1336 , - 1849 , - 2922 , - 75 , - 2268 , - 541 , - 3854 , - 3247 , - 3200 , - 3713 , - 306 , - 1939 , - 4132 , - 2405 , - 1238 , - 631 , - 584 , - 1097 , - 2170 , - 3803 , - 1516 , - 4269 , - 3102 , - 2495 , - 2448 , - 2961 , - 4034 , - 1187 , - 3380 , - 1653 , - 486 , - 4359 , - 4312 , - 345 , - 1418 , - 3051 , - 764 , - 3517 , - 2350 , - 1743 , - 1696 , - 2209 , - 3282 , - 435 , - 2628 , - 901 , - 4214 , - 3607 , - 3560 , - 4073 , - 666 , - 2299 , - 12 , - 2765 , - 1598 , - 991 , - 944 , - 1457 , - 2530 , - 4163 , - 1876 , - 149 , - 3462 , - 2855 , - 2808 , - 3321 , - 4394 , - 1547 , - 3740 , - 2013 , - 846 , - 239 , - 192 , - 705 , - 1778 , - 3411 , - 1124 , - 3877 , - 2710 , - 2103 , - 2056 , - 2569 , - 3642 , - 795 , - 2988 , - 1261 , - 94 , - 3967 , - 3920 , - 4433 , - 1026 , - 2659 , - 372 , - 3125 , - 1958 , - 1351 , - 1304 , - 1817 , - 2890 , - 43 , - 2236 , - 509 , - 3822 , - 3215 , - 3168 , - 3681 , - 274 , - 1907 , - 4100 , - 2373 , - 1206 , - 599 , - 552 , - 1065 , - 2138 , - 3771 , - 1484 , - 4237 , - 3070 , - 2463 , - 2416 , - 2929 , - 4002 , - 1155 , - 3348 , - 1621 , - 454 , - 4327 , - 4280 , - 313 , - 1386 , - 3019 , - 732 , - 3485 , - 2318 , - 1711 , - 1664 , - 2177 , - 3250 , - 403 , - 2596 , - 869 , - 4182 , - 3575 , - 3528 , - 4041 , - 634 , - 2267 , - 4460 , - 2733 , - 1566 , - 959 , - 912 , - 1425 , - 2498 , - 4131 , - 1844 , - 117 , - 3430 , - 2823 , - 2776 , - 3289 , - 4362 , - 1515 , - 3708 , - 1981 , - 814 , - 207 , - 160 , - 673 , - 1746 , - 3379 , - 1092 , - 3845 , - 2678 , - 2071 , - 2024 , - 2537 , - 3610 , - 763 , - 2956 , - 1229 , - 62 , - 3935 , - 3888 , - 4401 , - 994 , - 2627 , - 340 , - 3093 , - 1926 , - 1319 , - 1272 , - 1785 , - 2858 , - 11 , - 2204 , - 477 , - 3790 , - 3183 , - 3136 , - 3649 , - 242 , - 1875 , - 4068 , - 2341 , - 1174 , - 567 , - 520 , - 1033 , - 2106 , - 3739 , - 1452 , - 4205 , - 3038 , - 2431 , - 2384 , - 2897 , - 3970 , - 1123 , - 3316 , - 1589 , - 422 , - 4295 , - 4248 , - 281 , - 1354 , - 2987 , - 700 , - 3453 , - 2286 , - 1679 , - 1632 , - 2145 , - 3218 , - 371 , - 2564 , - 837 , - 4150 , - 3543 , - 3496 , - 4009 , - 602 , - 2235 , - 4428 , - 2701 , - 1534 , - 927 , - 880 , - 1393 , - 2466 , - 4099 , - 1812 , - 85 , - 3398 , - 2791 , - 2744 , - 3257 , - 4330 , - 1483 , - 3676 , - 1949 , - 782 , - 175 , - 128 , - 641 , - 1714 , - 3347 , - 1060 , - 3813 , - 2646 , - 2039 , - 1992 , - 2505 , - 3578 , - 731 , - 2924 , - 1197 , - 30 , - 3903 , - 3856 , - 4369 , - 962 , - 2595 , - 308 , - 3061 , - 1894 , - 1287 , - 1240 , - 1753 , - 2826 , - 4459 , - 2172 , - 445 , - 3758 , - 3151 , - 3104 , - 3617 , - 210 , - 1843 , - 4036 , - 2309 , - 1142 , - 535 , - 488 , - 1001 , - 2074 , - 3707 , - 1420 , - 4173 , - 3006 , - 2399 , - 2352 , - 2865 , - 3938 , - 1091 , - 3284 , - 1557 , - 390 , - 4263 , - 4216 , - 249 , - 1322 , - 2955 , - 668 , - 3421 , - 2254 , - 1647 , - 1600 , - 2113 , - 3186 , - 339 , - 2532 , - 805 , - 4118 , - 3511 , - 3464 , - 3977 , - 570 , - 2203 , - 4396 , - 2669 , - 1502 , - 895 , - 848 , - 1361 , - 2434 , - 4067 , - 1780 , - 53 , - 3366 , - 2759 , - 2712 , - 3225 , - 4298 , - 1451 , - 3644 , - 1917 , - 750 , - 143 , - 96 , - 609 , - 1682 , - 3315 , - 1028 , - 3781 , - 2614 , - 2007 , - 1960 , - 2473 , - 3546 , - 699 , - 2892 , - 1165 , - 4478 , - 3871 , - 3824 , - 4337 , - 930 , - 2563 , - 276 , - 3029 , - 1862 , - 1255 , - 1208 , - 1721 , - 2794 , - 4427 , - 2140 , - 413 , - 3726 , - 3119 , - 3072 , - 3585 , - 178 , - 1811 , - 4004 , - 2277 , - 1110 , - 503 , - 456 , - 969 , - 2042 , - 3675 , - 1388 , - 4141 , - 2974 , - 2367 , - 2320 , - 2833 , - 3906 , - 1059 , - 3252 , - 1525 , - 358 , - 4231 , - 4184 , - 217 , - 1290 , - 2923 , - 636 , - 3389 , - 2222 , - 1615 , - 1568 , - 2081 , - 3154 , - 307 , - 2500 , - 773 , - 4086 , - 3479 , - 3432 , - 3945 , - 538 , - 2171 , - 4364 , - 2637 , - 1470 , - 863 , - 816 , - 1329 , - 2402 , - 4035 , - 1748 , - 21 , - 3334 , - 2727 , - 2680 , - 3193 , - 4266 , - 1419 , - 3612 , - 1885 , - 718 , - 111 , - 64 , - 577 , - 1650 , - 3283 , - 996 , - 3749 , - 2582 , - 1975 , - 1928 , - 2441 , - 3514 , - 667 , - 2860 , - 1133 , - 4446 , - 3839 , - 3792 , - 4305 , - 898 , - 2531 , - 244 , - 2997 , - 1830 , - 1223 , - 1176 , - 1689 , - 2762 , - 4395 , - 2108 , - 381 , - 3694 , - 3087 , - 3040 , - 3553 , - 146 , - 1779 , - 3972 , - 2245 , - 1078 , - 471 , - 424 , - 937 , - 2010 , - 3643 , - 1356 , - 4109 , - 2942 , - 2335 , - 2288 , - 2801 , - 3874 , - 1027 , - 3220 , - 1493 , - 326 , - 4199 , - 4152 , - 185 , - 1258 , - 2891 , - 604 , - 3357 , - 2190 , - 1583 , - 1536 , - 2049 , - 3122 , - 275 , - 2468 , - 741 , - 4054 , - 3447 , - 3400 , - 3913 , - 506 , - 2139 , - 4332 , - 2605 , - 1438 , - 831 , - 784 , - 1297 , - 2370 , - 4003 , - 1716 , - 4469 , - 3302 , - 2695 , - 2648 , - 3161 , - 4234 , - 1387 , - 3580 , - 1853 , - 686 , - 79 , - 32 , - 545 , - 1618 , - 3251 , - 964 , - 3717 , - 2550 , - 1943 , - 1896 , - 2409 , - 3482 , - 635 , - 2828 , - 1101 , - 4414 , - 3807 , - 3760 , - 4273 , - 866 , - 2499 , - 212 , - 2965 , - 1798 , - 1191 , - 1144 , - 1657 , - 2730 , - 4363 , - 2076 , - 349 , - 3662 , - 3055 , - 3008 , - 3521 , - 114 , - 1747 , - 3940 , - 2213 , - 1046 , - 439 , - 392 , - 905 , - 1978 , - 3611 , - 1324 , - 4077 , - 2910 , - 2303 , - 2256 , - 2769 , - 3842 , - 995 , - 3188 , - 1461 , - 294 , - 4167 , - 4120 , - 153 , - 1226 , - 2859 , - 572 , - 3325 , - 2158 , - 1551 , - 1504 , - 2017 , - 3090 , - 243 , - 2436 , - 709 , - 4022 , - 3415 , - 3368 , - 3881 , - 474 , - 2107 , - 4300 , - 2573 , - 1406 , - 799 , - 752 , - 1265 , - 2338 , - 3971 , - 1684 , - 4437 , - 3270 , - 2663 , - 2616 , - 3129 , - 4202 , - 1355 , - 3548 , - 1821 , - 654 , - 47 , - 0 , - 499 , - 1282 , - 2349 , - 3700 , - 791 , - 2710 , - 369 , - 2856 , - 1083 , - 4138 , - 2933 , - 2012 , - 1375 , - 1022 , - 953 , - 1168 , - 1667 , - 2450 , - 3517 , - 324 , - 1959 , - 3878 , - 1537 , - 4024 , - 2251 , - 762 , - 4101 , - 3180 , - 2543 , - 2190 , - 2121 , - 2336 , - 2835 , - 3618 , - 141 , - 1492 , - 3127 , - 502 , - 2705 , - 648 , - 3419 , - 1930 , - 725 , - 4348 , - 3711 , - 3358 , - 3289 , - 3504 , - 4003 , - 242 , - 1309 , - 2660 , - 4295 , - 1670 , - 3873 , - 1816 , - 43 , - 3098 , - 1893 , - 972 , - 335 , - 4526 , - 4457 , - 128 , - 627 , - 1410 , - 2477 , - 3828 , - 919 , - 2838 , - 497 , - 2984 , - 1211 , - 4266 , - 3061 , - 2140 , - 1503 , - 1150 , - 1081 , - 1296 , - 1795 , - 2578 , - 3645 , - 452 , - 2087 , - 4006 , - 1665 , - 4152 , - 2379 , - 890 , - 4229 , - 3308 , - 2671 , - 2318 , - 2249 , - 2464 , - 2963 , - 3746 , - 269 , - 1620 , - 3255 , - 630 , - 2833 , - 776 , - 3547 , - 2058 , - 853 , - 4476 , - 3839 , - 3486 , - 3417 , - 3632 , - 4131 , - 370 , - 1437 , - 2788 , - 4423 , - 1798 , - 4001 , - 1944 , - 171 , - 3226 , - 2021 , - 1100 , - 463 , - 110 , - 41 , - 256 , - 755 , - 1538 , - 2605 , - 3956 , - 1047 , - 2966 , - 625 , - 3112 , - 1339 , - 4394 , - 3189 , - 2268 , - 1631 , - 1278 , - 1209 , - 1424 , - 1923 , - 2706 , - 3773 , - 580 , - 2215 , - 4134 , - 1793 , - 4280 , - 2507 , - 1018 , - 4357 , - 3436 , - 2799 , - 2446 , - 2377 , - 2592 , - 3091 , - 3874 , - 397 , - 1748 , - 3383 , - 758 , - 2961 , - 904 , - 3675 , - 2186 , - 981 , - 60 , - 3967 , - 3614 , - 3545 , - 3760 , - 4259 , - 498 , - 1565 , - 2916 , - 7 , - 1926 , - 4129 , - 2072 , - 299 , - 3354 , - 2149 , - 1228 , - 591 , - 238 , - 169 , - 384 , - 883 , - 1666 , - 2733 , - 4084 , - 1175 , - 3094 , - 753 , - 3240 , - 1467 , - 4522 , - 3317 , - 2396 , - 1759 , - 1406 , - 1337 , - 1552 , - 2051 , - 2834 , - 3901 , - 708 , - 2343 , - 4262 , - 1921 , - 4408 , - 2635 , - 1146 , - 4485 , - 3564 , - 2927 , - 2574 , - 2505 , - 2720 , - 3219 , - 4002 , - 525 , - 1876 , - 3511 , - 886 , - 3089 , - 1032 , - 3803 , - 2314 , - 1109 , - 188 , - 4095 , - 3742 , - 3673 , - 3888 , - 4387 , - 626 , - 1693 , - 3044 , - 135 , - 2054 , - 4257 , - 2200 , - 427 , - 3482 , - 2277 , - 1356 , - 719 , - 366 , - 297 , - 512 , - 1011 , - 1794 , - 2861 , - 4212 , - 1303 , - 3222 , - 881 , - 3368 , - 1595 , - 106 , - 3445 , - 2524 , - 1887 , - 1534 , - 1465 , - 1680 , - 2179 , - 2962 , - 4029 , - 836 , - 2471 , - 4390 , - 2049 , - 4536 , - 2763 , - 1274 , - 69 , - 3692 , - 3055 , - 2702 , - 2633 , - 2848 , - 3347 , - 4130 , - 653 , - 2004 , - 3639 , - 1014 , - 3217 , - 1160 , - 3931 , - 2442 , - 1237 , - 316 , - 4223 , - 3870 , - 3801 , - 4016 , - 4515 , - 754 , - 1821 , - 3172 , - 263 , - 2182 , - 4385 , - 2328 , - 555 , - 3610 , - 2405 , - 1484 , - 847 , - 494 , - 425 , - 640 , - 1139 , - 1922 , - 2989 , - 4340 , - 1431 , - 3350 , - 1009 , - 3496 , - 1723 , - 234 , - 3573 , - 2652 , - 2015 , - 1662 , - 1593 , - 1808 , - 2307 , - 3090 , - 4157 , - 964 , - 2599 , - 4518 , - 2177 , - 120 , - 2891 , - 1402 , - 197 , - 3820 , - 3183 , - 2830 , - 2761 , - 2976 , - 3475 , - 4258 , - 781 , - 2132 , - 3767 , - 1142 , - 3345 , - 1288 , - 4059 , - 2570 , - 1365 , - 444 , - 4351 , - 3998 , - 3929 , - 4144 , - 99 , - 882 , - 1949 , - 3300 , - 391 , - 2310 , - 4513 , - 2456 , - 683 , - 3738 , - 2533 , - 1612 , - 975 , - 622 , - 553 , - 768 , - 1267 , - 2050 , - 3117 , - 4468 , - 1559 , - 3478 , - 1137 , - 3624 , - 1851 , - 362 , - 3701 , - 2780 , - 2143 , - 1790 , - 1721 , - 1936 , - 2435 , - 3218 , - 4285 , - 1092 , - 2727 , - 102 , - 2305 , - 248 , - 3019 , - 1530 , - 325 , - 3948 , - 3311 , - 2958 , - 2889 , - 3104 , - 3603 , - 4386 , - 909 , - 2260 , - 3895 , - 1270 , - 3473 , - 1416 , - 4187 , - 2698 , - 1493 , - 572 , - 4479 , - 4126 , - 4057 , - 4272 , - 227 , - 1010 , - 2077 , - 3428 , - 519 , - 2438 , - 97 , - 2584 , - 811 , - 3866 , - 2661 , - 1740 , - 1103 , - 750 , - 681 , - 896 , - 1395 , - 2178 , - 3245 , - 52 , - 1687 , - 3606 , - 1265 , - 3752 , - 1979 , - 490 , - 3829 , - 2908 , - 2271 , - 1918 , - 1849 , - 2064 , - 2563 , - 3346 , - 4413 , - 1220 , - 2855 , - 230 , - 2433 , - 376 , - 3147 , - 1658 , - 453 , - 4076 , - 3439 , - 3086 , - 3017 , - 3232 , - 3731 , - 4514 , - 1037 , - 2388 , - 4023 , - 1398 , - 3601 , - 1544 , - 4315 , - 2826 , - 1621 , - 700 , - 63 , - 4254 , - 4185 , - 4400 , - 355 , - 1138 , - 2205 , - 3556 , - 647 , - 2566 , - 225 , - 2712 , - 939 , - 3994 , - 2789 , - 1868 , - 1231 , - 878 , - 809 , - 1024 , - 1523 , - 2306 , - 3373 , - 180 , - 1815 , - 3734 , - 1393 , - 3880 , - 2107 , - 618 , - 3957 , - 3036 , - 2399 , - 2046 , - 1977 , - 2192 , - 2691 , - 3474 , - 4541 , - 1348 , - 2983 , - 358 , - 2561 , - 504 , - 3275 , - 1786 , - 581 , - 4204 , - 3567 , - 3214 , - 3145 , - 3360 , - 3859 , - 98 , - 1165 , - 2516 , - 4151 , - 1526 , - 3729 , - 1672 , - 4443 , - 2954 , - 1749 , - 828 , - 191 , - 4382 , - 4313 , - 4528 , - 483 , - 1266 , - 2333 , - 3684 , - 775 , - 2694 , - 353 , - 2840 , - 1067 , - 4122 , - 2917 , - 1996 , - 1359 , - 1006 , - 937 , - 1152 , - 1651 , - 2434 , - 3501 , - 308 , - 1943 , - 3862 , - 1521 , - 4008 , - 2235 , - 746 , - 4085 , - 3164 , - 2527 , - 2174 , - 2105 , - 2320 , - 2819 , - 3602 , - 125 , - 1476 , - 3111 , - 486 , - 2689 , - 632 , - 3403 , - 1914 , - 709 , - 4332 , - 3695 , - 3342 , - 3273 , - 3488 , - 3987 , - 226 , - 1293 , - 2644 , - 4279 , - 1654 , - 3857 , - 1800 , - 27 , - 3082 , - 1877 , - 956 , - 319 , - 4510 , - 4441 , - 112 , - 611 , - 1394 , - 2461 , - 3812 , - 903 , - 2822 , - 481 , - 2968 , - 1195 , - 4250 , - 3045 , - 2124 , - 1487 , - 1134 , - 1065 , - 1280 , - 1779 , - 2562 , - 3629 , - 436 , - 2071 , - 3990 , - 1649 , - 4136 , - 2363 , - 874 , - 4213 , - 3292 , - 2655 , - 2302 , - 2233 , - 2448 , - 2947 , - 3730 , - 253 , - 1604 , - 3239 , - 614 , - 2817 , - 760 , - 3531 , - 2042 , - 837 , - 4460 , - 3823 , - 3470 , - 3401 , - 3616 , - 4115 , - 354 , - 1421 , - 2772 , - 4407 , - 1782 , - 3985 , - 1928 , - 155 , - 3210 , - 2005 , - 1084 , - 447 , - 94 , - 25 , - 240 , - 739 , - 1522 , - 2589 , - 3940 , - 1031 , - 2950 , - 609 , - 3096 , - 1323 , - 4378 , - 3173 , - 2252 , - 1615 , - 1262 , - 1193 , - 1408 , - 1907 , - 2690 , - 3757 , - 564 , - 2199 , - 4118 , - 1777 , - 4264 , - 2491 , - 1002 , - 4341 , - 3420 , - 2783 , - 2430 , - 2361 , - 2576 , - 3075 , - 3858 , - 381 , - 1732 , - 3367 , - 742 , - 2945 , - 888 , - 3659 , - 2170 , - 965 , - 44 , - 3951 , - 3598 , - 3529 , - 3744 , - 4243 , - 482 , - 1549 , - 2900 , - 4535 , - 1910 , - 4113 , - 2056 , - 283 , - 3338 , - 2133 , - 1212 , - 575 , - 222 , - 153 , - 368 , - 867 , - 1650 , - 2717 , - 4068 , - 1159 , - 3078 , - 737 , - 3224 , - 1451 , - 4506 , - 3301 , - 2380 , - 1743 , - 1390 , - 1321 , - 1536 , - 2035 , - 2818 , - 3885 , - 692 , - 2327 , - 4246 , - 1905 , - 4392 , - 2619 , - 1130 , - 4469 , - 3548 , - 2911 , - 2558 , - 2489 , - 2704 , - 3203 , - 3986 , - 509 , - 1860 , - 3495 , - 870 , - 3073 , - 1016 , - 3787 , - 2298 , - 1093 , - 172 , - 4079 , - 3726 , - 3657 , - 3872 , - 4371 , - 610 , - 1677 , - 3028 , - 119 , - 2038 , - 4241 , - 2184 , - 411 , - 3466 , - 2261 , - 1340 , - 703 , - 350 , - 281 , - 496 , - 995 , - 1778 , - 2845 , - 4196 , - 1287 , - 3206 , - 865 , - 3352 , - 1579 , - 90 , - 3429 , - 2508 , - 1871 , - 1518 , - 1449 , - 1664 , - 2163 , - 2946 , - 4013 , - 820 , - 2455 , - 4374 , - 2033 , - 4520 , - 2747 , - 1258 , - 53 , - 3676 , - 3039 , - 2686 , - 2617 , - 2832 , - 3331 , - 4114 , - 637 , - 1988 , - 3623 , - 998 , - 3201 , - 1144 , - 3915 , - 2426 , - 1221 , - 300 , - 4207 , - 3854 , - 3785 , - 4000 , - 4499 , - 738 , - 1805 , - 3156 , - 247 , - 2166 , - 4369 , - 2312 , - 539 , - 3594 , - 2389 , - 1468 , - 831 , - 478 , - 409 , - 624 , - 1123 , - 1906 , - 2973 , - 4324 , - 1415 , - 3334 , - 993 , - 3480 , - 1707 , - 218 , - 3557 , - 2636 , - 1999 , - 1646 , - 1577 , - 1792 , - 2291 , - 3074 , - 4141 , - 948 , - 2583 , - 4502 , - 2161 , - 104 , - 2875 , - 1386 , - 181 , - 3804 , - 3167 , - 2814 , - 2745 , - 2960 , - 3459 , - 4242 , - 765 , - 2116 , - 3751 , - 1126 , - 3329 , - 1272 , - 4043 , - 2554 , - 1349 , - 428 , - 4335 , - 3982 , - 3913 , - 4128 , - 83 , - 866 , - 1933 , - 3284 , - 375 , - 2294 , - 4497 , - 2440 , - 667 , - 3722 , - 2517 , - 1596 , - 959 , - 606 , - 537 , - 752 , - 1251 , - 2034 , - 3101 , - 4452 , - 1543 , - 3462 , - 1121 , - 3608 , - 1835 , - 346 , - 3685 , - 2764 , - 2127 , - 1774 , - 1705 , - 1920 , - 2419 , - 3202 , - 4269 , - 1076 , - 2711 , - 86 , - 2289 , - 232 , - 3003 , - 1514 , - 309 , - 3932 , - 3295 , - 2942 , - 2873 , - 3088 , - 3587 , - 4370 , - 893 , - 2244 , - 3879 , - 1254 , - 3457 , - 1400 , - 4171 , - 2682 , - 1477 , - 556 , - 4463 , - 4110 , - 4041 , - 4256 , - 211 , - 994 , - 2061 , - 3412 , - 503 , - 2422 , - 81 , - 2568 , - 795 , - 3850 , - 2645 , - 1724 , - 1087 , - 734 , - 665 , - 880 , - 1379 , - 2162 , - 3229 , - 36 , - 1671 , - 3590 , - 1249 , - 3736 , - 1963 , - 474 , - 3813 , - 2892 , - 2255 , - 1902 , - 1833 , - 2048 , - 2547 , - 3330 , - 4397 , - 1204 , - 2839 , - 214 , - 2417 , - 360 , - 3131 , - 1642 , - 437 , - 4060 , - 3423 , - 3070 , - 3001 , - 3216 , - 3715 , - 4498 , - 1021 , - 2372 , - 4007 , - 1382 , - 3585 , - 1528 , - 4299 , - 2810 , - 1605 , - 684 , - 47 , - 4238 , - 4169 , - 4384 , - 339 , - 1122 , - 2189 , - 3540 , - 631 , - 2550 , - 209 , - 2696 , - 923 , - 3978 , - 2773 , - 1852 , - 1215 , - 862 , - 793 , - 1008 , - 1507 , - 2290 , - 3357 , - 164 , - 1799 , - 3718 , - 1377 , - 3864 , - 2091 , - 602 , - 3941 , - 3020 , - 2383 , - 2030 , - 1961 , - 2176 , - 2675 , - 3458 , - 4525 , - 1332 , - 2967 , - 342 , - 2545 , - 488 , - 3259 , - 1770 , - 565 , - 4188 , - 3551 , - 3198 , - 3129 , - 3344 , - 3843 , - 82 , - 1149 , - 2500 , - 4135 , - 1510 , - 3713 , - 1656 , - 4427 , - 2938 , - 1733 , - 812 , - 175 , - 4366 , - 4297 , - 4512 , - 467 , - 1250 , - 2317 , - 3668 , - 759 , - 2678 , - 337 , - 2824 , - 1051 , - 4106 , - 2901 , - 1980 , - 1343 , - 990 , - 921 , - 1136 , - 1635 , - 2418 , - 3485 , - 292 , - 1927 , - 3846 , - 1505 , - 3992 , - 2219 , - 730 , - 4069 , - 3148 , - 2511 , - 2158 , - 2089 , - 2304 , - 2803 , - 3586 , - 109 , - 1460 , - 3095 , - 470 , - 2673 , - 616 , - 3387 , - 1898 , - 693 , - 4316 , - 3679 , - 3326 , - 3257 , - 3472 , - 3971 , - 210 , - 1277 , - 2628 , - 4263 , - 1638 , - 3841 , - 1784 , - 11 , - 3066 , - 1861 , - 940 , - 303 , - 4494 , - 4425 , - 96 , - 595 , - 1378 , - 2445 , - 3796 , - 887 , - 2806 , - 465 , - 2952 , - 1179 , - 4234 , - 3029 , - 2108 , - 1471 , - 1118 , - 1049 , - 1264 , - 1763 , - 2546 , - 3613 , - 420 , - 2055 , - 3974 , - 1633 , - 4120 , - 2347 , - 858 , - 4197 , - 3276 , - 2639 , - 2286 , - 2217 , - 2432 , - 2931 , - 3714 , - 237 , - 1588 , - 3223 , - 598 , - 2801 , - 744 , - 3515 , - 2026 , - 821 , - 4444 , - 3807 , - 3454 , - 3385 , - 3600 , - 4099 , - 338 , - 1405 , - 2756 , - 4391 , - 1766 , - 3969 , - 1912 , - 139 , - 3194 , - 1989 , - 1068 , - 431 , - 78 , - 9 , - 224 , - 723 , - 1506 , - 2573 , - 3924 , - 1015 , - 2934 , - 593 , - 3080 , - 1307 , - 4362 , - 3157 , - 2236 , - 1599 , - 1246 , - 1177 , - 1392 , - 1891 , - 2674 , - 3741 , - 548 , - 2183 , - 4102 , - 1761 , - 4248 , - 2475 , - 986 , - 4325 , - 3404 , - 2767 , - 2414 , - 2345 , - 2560 , - 3059 , - 3842 , - 365 , - 1716 , - 3351 , - 726 , - 2929 , - 872 , - 3643 , - 2154 , - 949 , - 28 , - 3935 , - 3582 , - 3513 , - 3728 , - 4227 , - 466 , - 1533 , - 2884 , - 4519 , - 1894 , - 4097 , - 2040 , - 267 , - 3322 , - 2117 , - 1196 , - 559 , - 206 , - 137 , - 352 , - 851 , - 1634 , - 2701 , - 4052 , - 1143 , - 3062 , - 721 , - 3208 , - 1435 , - 4490 , - 3285 , - 2364 , - 1727 , - 1374 , - 1305 , - 1520 , - 2019 , - 2802 , - 3869 , - 676 , - 2311 , - 4230 , - 1889 , - 4376 , - 2603 , - 1114 , - 4453 , - 3532 , - 2895 , - 2542 , - 2473 , - 2688 , - 3187 , - 3970 , - 493 , - 1844 , - 3479 , - 854 , - 3057 , - 1000 , - 3771 , - 2282 , - 1077 , - 156 , - 4063 , - 3710 , - 3641 , - 3856 , - 4355 , - 594 , - 1661 , - 3012 , - 103 , - 2022 , - 4225 , - 2168 , - 395 , - 3450 , - 2245 , - 1324 , - 687 , - 334 , - 265 , - 480 , - 979 , - 1762 , - 2829 , - 4180 , - 1271 , - 3190 , - 849 , - 3336 , - 1563 , - 74 , - 3413 , - 2492 , - 1855 , - 1502 , - 1433 , - 1648 , - 2147 , - 2930 , - 3997 , - 804 , - 2439 , - 4358 , - 2017 , - 4504 , - 2731 , - 1242 , - 37 , - 3660 , - 3023 , - 2670 , - 2601 , - 2816 , - 3315 , - 4098 , - 621 , - 1972 , - 3607 , - 982 , - 3185 , - 1128 , - 3899 , - 2410 , - 1205 , - 284 , - 4191 , - 3838 , - 3769 , - 3984 , - 4483 , - 722 , - 1789 , - 3140 , - 231 , - 2150 , - 4353 , - 2296 , - 523 , - 3578 , - 2373 , - 1452 , - 815 , - 462 , - 393 , - 608 , - 1107 , - 1890 , - 2957 , - 4308 , - 1399 , - 3318 , - 977 , - 3464 , - 1691 , - 202 , - 3541 , - 2620 , - 1983 , - 1630 , - 1561 , - 1776 , - 2275 , - 3058 , - 4125 , - 932 , - 2567 , - 4486 , - 2145 , - 88 , - 2859 , - 1370 , - 165 , - 3788 , - 3151 , - 2798 , - 2729 , - 2944 , - 3443 , - 4226 , - 749 , - 2100 , - 3735 , - 1110 , - 3313 , - 1256 , - 4027 , - 2538 , - 1333 , - 412 , - 4319 , - 3966 , - 3897 , - 4112 , - 67 , - 850 , - 1917 , - 3268 , - 359 , - 2278 , - 4481 , - 2424 , - 651 , - 3706 , - 2501 , - 1580 , - 943 , - 590 , - 521 , - 736 , - 1235 , - 2018 , - 3085 , - 4436 , - 1527 , - 3446 , - 1105 , - 3592 , - 1819 , - 330 , - 3669 , - 2748 , - 2111 , - 1758 , - 1689 , - 1904 , - 2403 , - 3186 , - 4253 , - 1060 , - 2695 , - 70 , - 2273 , - 216 , - 2987 , - 1498 , - 293 , - 3916 , - 3279 , - 2926 , - 2857 , - 3072 , - 3571 , - 4354 , - 877 , - 2228 , - 3863 , - 1238 , - 3441 , - 1384 , - 4155 , - 2666 , - 1461 , - 540 , - 4447 , - 4094 , - 4025 , - 4240 , - 195 , - 978 , - 2045 , - 3396 , - 487 , - 2406 , - 65 , - 2552 , - 779 , - 3834 , - 2629 , - 1708 , - 1071 , - 718 , - 649 , - 864 , - 1363 , - 2146 , - 3213 , - 20 , - 1655 , - 3574 , - 1233 , - 3720 , - 1947 , - 458 , - 3797 , - 2876 , - 2239 , - 1886 , - 1817 , - 2032 , - 2531 , - 3314 , - 4381 , - 1188 , - 2823 , - 198 , - 2401 , - 344 , - 3115 , - 1626 , - 421 , - 4044 , - 3407 , - 3054 , - 2985 , - 3200 , - 3699 , - 4482 , - 1005 , - 2356 , - 3991 , - 1366 , - 3569 , - 1512 , - 4283 , - 2794 , - 1589 , - 668 , - 31 , - 4222 , - 4153 , - 4368 , - 323 , - 1106 , - 2173 , - 3524 , - 615 , - 2534 , - 193 , - 2680 , - 907 , - 3962 , - 2757 , - 1836 , - 1199 , - 846 , - 777 , - 992 , - 1491 , - 2274 , - 3341 , - 148 , - 1783 , - 3702 , - 1361 , - 3848 , - 2075 , - 586 , - 3925 , - 3004 , - 2367 , - 2014 , - 1945 , - 2160 , - 2659 , - 3442 , - 4509 , - 1316 , - 2951 , - 326 , - 2529 , - 472 , - 3243 , - 1754 , - 549 , - 4172 , - 3535 , - 3182 , - 3113 , - 3328 , - 3827 , - 66 , - 1133 , - 2484 , - 4119 , - 1494 , - 3697 , - 1640 , - 4411 , - 2922 , - 1717 , - 796 , - 159 , - 4350 , - 4281 , - 4496 , - 451 , - 1234 , - 2301 , - 3652 , - 743 , - 2662 , - 321 , - 2808 , - 1035 , - 4090 , - 2885 , - 1964 , - 1327 , - 974 , - 905 , - 1120 , - 1619 , - 2402 , - 3469 , - 276 , - 1911 , - 3830 , - 1489 , - 3976 , - 2203 , - 714 , - 4053 , - 3132 , - 2495 , - 2142 , - 2073 , - 2288 , - 2787 , - 3570 , - 93 , - 1444 , - 3079 , - 454 , - 2657 , - 600 , - 3371 , - 1882 , - 677 , - 4300 , - 3663 , - 3310 , - 3241 , - 3456 , - 3955 , - 194 , - 1261 , - 2612 , - 4247 , - 1622 , - 3825 , - 1768 , - 4539 , - 3050 , - 1845 , - 924 , - 287 , - 4478 , - 4409 , - 80 , - 579 , - 1362 , - 2429 , - 3780 , - 871 , - 2790 , - 449 , - 2936 , - 1163 , - 4218 , - 3013 , - 2092 , - 1455 , - 1102 , - 1033 , - 1248 , - 1747 , - 2530 , - 3597 , - 404 , - 2039 , - 3958 , - 1617 , - 4104 , - 2331 , - 842 , - 4181 , - 3260 , - 2623 , - 2270 , - 2201 , - 2416 , - 2915 , - 3698 , - 221 , - 1572 , - 3207 , - 582 , - 2785 , - 728 , - 3499 , - 2010 , - 805 , - 4428 , - 3791 , - 3438 , - 3369 , - 3584 , - 4083 , - 322 , - 1389 , - 2740 , - 4375 , - 1750 , - 3953 , - 1896 , - 123 , - 3178 , - 1973 , - 1052 , - 415 , - 62 , - 4537 , - 208 , - 707 , - 1490 , - 2557 , - 3908 , - 999 , - 2918 , - 577 , - 3064 , - 1291 , - 4346 , - 3141 , - 2220 , - 1583 , - 1230 , - 1161 , - 1376 , - 1875 , - 2658 , - 3725 , - 532 , - 2167 , - 4086 , - 1745 , - 4232 , - 2459 , - 970 , - 4309 , - 3388 , - 2751 , - 2398 , - 2329 , - 2544 , - 3043 , - 3826 , - 349 , - 1700 , - 3335 , - 710 , - 2913 , - 856 , - 3627 , - 2138 , - 933 , - 12 , - 3919 , - 3566 , - 3497 , - 3712 , - 4211 , - 450 , - 1517 , - 2868 , - 4503 , - 1878 , - 4081 , - 2024 , - 251 , - 3306 , - 2101 , - 1180 , - 543 , - 190 , - 121 , - 336 , - 835 , - 1618 , - 2685 , - 4036 , - 1127 , - 3046 , - 705 , - 3192 , - 1419 , - 4474 , - 3269 , - 2348 , - 1711 , - 1358 , - 1289 , - 1504 , - 2003 , - 2786 , - 3853 , - 660 , - 2295 , - 4214 , - 1873 , - 4360 , - 2587 , - 1098 , - 4437 , - 3516 , - 2879 , - 2526 , - 2457 , - 2672 , - 3171 , - 3954 , - 477 , - 1828 , - 3463 , - 838 , - 3041 , - 984 , - 3755 , - 2266 , - 1061 , - 140 , - 4047 , - 3694 , - 3625 , - 3840 , - 4339 , - 578 , - 1645 , - 2996 , - 87 , - 2006 , - 4209 , - 2152 , - 379 , - 3434 , - 2229 , - 1308 , - 671 , - 318 , - 249 , - 464 , - 963 , - 1746 , - 2813 , - 4164 , - 1255 , - 3174 , - 833 , - 3320 , - 1547 , - 58 , - 3397 , - 2476 , - 1839 , - 1486 , - 1417 , - 1632 , - 2131 , - 2914 , - 3981 , - 788 , - 2423 , - 4342 , - 2001 , - 4488 , - 2715 , - 1226 , - 21 , - 3644 , - 3007 , - 2654 , - 2585 , - 2800 , - 3299 , - 4082 , - 605 , - 1956 , - 3591 , - 966 , - 3169 , - 1112 , - 3883 , - 2394 , - 1189 , - 268 , - 4175 , - 3822 , - 3753 , - 3968 , - 4467 , - 706 , - 1773 , - 3124 , - 215 , - 2134 , - 4337 , - 2280 , - 507 , - 3562 , - 2357 , - 1436 , - 799 , - 446 , - 377 , - 592 , - 1091 , - 1874 , - 2941 , - 4292 , - 1383 , - 3302 , - 961 , - 3448 , - 1675 , - 186 , - 3525 , - 2604 , - 1967 , - 1614 , - 1545 , - 1760 , - 2259 , - 3042 , - 4109 , - 916 , - 2551 , - 4470 , - 2129 , - 72 , - 2843 , - 1354 , - 149 , - 3772 , - 3135 , - 2782 , - 2713 , - 2928 , - 3427 , - 4210 , - 733 , - 2084 , - 3719 , - 1094 , - 3297 , - 1240 , - 4011 , - 2522 , - 1317 , - 396 , - 4303 , - 3950 , - 3881 , - 4096 , - 51 , - 834 , - 1901 , - 3252 , - 343 , - 2262 , - 4465 , - 2408 , - 635 , - 3690 , - 2485 , - 1564 , - 927 , - 574 , - 505 , - 720 , - 1219 , - 2002 , - 3069 , - 4420 , - 1511 , - 3430 , - 1089 , - 3576 , - 1803 , - 314 , - 3653 , - 2732 , - 2095 , - 1742 , - 1673 , - 1888 , - 2387 , - 3170 , - 4237 , - 1044 , - 2679 , - 54 , - 2257 , - 200 , - 2971 , - 1482 , - 277 , - 3900 , - 3263 , - 2910 , - 2841 , - 3056 , - 3555 , - 4338 , - 861 , - 2212 , - 3847 , - 1222 , - 3425 , - 1368 , - 4139 , - 2650 , - 1445 , - 524 , - 4431 , - 4078 , - 4009 , - 4224 , - 179 , - 962 , - 2029 , - 3380 , - 471 , - 2390 , - 49 , - 2536 , - 763 , - 3818 , - 2613 , - 1692 , - 1055 , - 702 , - 633 , - 848 , - 1347 , - 2130 , - 3197 , - 4 , - 1639 , - 3558 , - 1217 , - 3704 , - 1931 , - 442 , - 3781 , - 2860 , - 2223 , - 1870 , - 1801 , - 2016 , - 2515 , - 3298 , - 4365 , - 1172 , - 2807 , - 182 , - 2385 , - 328 , - 3099 , - 1610 , - 405 , - 4028 , - 3391 , - 3038 , - 2969 , - 3184 , - 3683 , - 4466 , - 989 , - 2340 , - 3975 , - 1350 , - 3553 , - 1496 , - 4267 , - 2778 , - 1573 , - 652 , - 15 , - 4206 , - 4137 , - 4352 , - 307 , - 1090 , - 2157 , - 3508 , - 599 , - 2518 , - 177 , - 2664 , - 891 , - 3946 , - 2741 , - 1820 , - 1183 , - 830 , - 761 , - 976 , - 1475 , - 2258 , - 3325 , - 132 , - 1767 , - 3686 , - 1345 , - 3832 , - 2059 , - 570 , - 3909 , - 2988 , - 2351 , - 1998 , - 1929 , - 2144 , - 2643 , - 3426 , - 4493 , - 1300 , - 2935 , - 310 , - 2513 , - 456 , - 3227 , - 1738 , - 533 , - 4156 , - 3519 , - 3166 , - 3097 , - 3312 , - 3811 , - 50 , - 1117 , - 2468 , - 4103 , - 1478 , - 3681 , - 1624 , - 4395 , - 2906 , - 1701 , - 780 , - 143 , - 4334 , - 4265 , - 4480 , - 435 , - 1218 , - 2285 , - 3636 , - 727 , - 2646 , - 305 , - 2792 , - 1019 , - 4074 , - 2869 , - 1948 , - 1311 , - 958 , - 889 , - 1104 , - 1603 , - 2386 , - 3453 , - 260 , - 1895 , - 3814 , - 1473 , - 3960 , - 2187 , - 698 , - 4037 , - 3116 , - 2479 , - 2126 , - 2057 , - 2272 , - 2771 , - 3554 , - 77 , - 1428 , - 3063 , - 438 , - 2641 , - 584 , - 3355 , - 1866 , - 661 , - 4284 , - 3647 , - 3294 , - 3225 , - 3440 , - 3939 , - 178 , - 1245 , - 2596 , - 4231 , - 1606 , - 3809 , - 1752 , - 4523 , - 3034 , - 1829 , - 908 , - 271 , - 4462 , - 4393 , - 64 , - 563 , - 1346 , - 2413 , - 3764 , - 855 , - 2774 , - 433 , - 2920 , - 1147 , - 4202 , - 2997 , - 2076 , - 1439 , - 1086 , - 1017 , - 1232 , - 1731 , - 2514 , - 3581 , - 388 , - 2023 , - 3942 , - 1601 , - 4088 , - 2315 , - 826 , - 4165 , - 3244 , - 2607 , - 2254 , - 2185 , - 2400 , - 2899 , - 3682 , - 205 , - 1556 , - 3191 , - 566 , - 2769 , - 712 , - 3483 , - 1994 , - 789 , - 4412 , - 3775 , - 3422 , - 3353 , - 3568 , - 4067 , - 306 , - 1373 , - 2724 , - 4359 , - 1734 , - 3937 , - 1880 , - 107 , - 3162 , - 1957 , - 1036 , - 399 , - 46 , - 4521 , - 192 , - 691 , - 1474 , - 2541 , - 3892 , - 983 , - 2902 , - 561 , - 3048 , - 1275 , - 4330 , - 3125 , - 2204 , - 1567 , - 1214 , - 1145 , - 1360 , - 1859 , - 2642 , - 3709 , - 516 , - 2151 , - 4070 , - 1729 , - 4216 , - 2443 , - 954 , - 4293 , - 3372 , - 2735 , - 2382 , - 2313 , - 2528 , - 3027 , - 3810 , - 333 , - 1684 , - 3319 , - 694 , - 2897 , - 840 , - 3611 , - 2122 , - 917 , - 4540 , - 3903 , - 3550 , - 3481 , - 3696 , - 4195 , - 434 , - 1501 , - 2852 , - 4487 , - 1862 , - 4065 , - 2008 , - 235 , - 3290 , - 2085 , - 1164 , - 527 , - 174 , - 105 , - 320 , - 819 , - 1602 , - 2669 , - 4020 , - 1111 , - 3030 , - 689 , - 3176 , - 1403 , - 4458 , - 3253 , - 2332 , - 1695 , - 1342 , - 1273 , - 1488 , - 1987 , - 2770 , - 3837 , - 644 , - 2279 , - 4198 , - 1857 , - 4344 , - 2571 , - 1082 , - 4421 , - 3500 , - 2863 , - 2510 , - 2441 , - 2656 , - 3155 , - 3938 , - 461 , - 1812 , - 3447 , - 822 , - 3025 , - 968 , - 3739 , - 2250 , - 1045 , - 124 , - 4031 , - 3678 , - 3609 , - 3824 , - 4323 , - 562 , - 1629 , - 2980 , - 71 , - 1990 , - 4193 , - 2136 , - 363 , - 3418 , - 2213 , - 1292 , - 655 , - 302 , - 233 , - 448 , - 947 , - 1730 , - 2797 , - 4148 , - 1239 , - 3158 , - 817 , - 3304 , - 1531 , - 42 , - 3381 , - 2460 , - 1823 , - 1470 , - 1401 , - 1616 , - 2115 , - 2898 , - 3965 , - 772 , - 2407 , - 4326 , - 1985 , - 4472 , - 2699 , - 1210 , - 5 , - 3628 , - 2991 , - 2638 , - 2569 , - 2784 , - 3283 , - 4066 , - 589 , - 1940 , - 3575 , - 950 , - 3153 , - 1096 , - 3867 , - 2378 , - 1173 , - 252 , - 4159 , - 3806 , - 3737 , - 3952 , - 4451 , - 690 , - 1757 , - 3108 , - 199 , - 2118 , - 4321 , - 2264 , - 491 , - 3546 , - 2341 , - 1420 , - 783 , - 430 , - 361 , - 576 , - 1075 , - 1858 , - 2925 , - 4276 , - 1367 , - 3286 , - 945 , - 3432 , - 1659 , - 170 , - 3509 , - 2588 , - 1951 , - 1598 , - 1529 , - 1744 , - 2243 , - 3026 , - 4093 , - 900 , - 2535 , - 4454 , - 2113 , - 56 , - 2827 , - 1338 , - 133 , - 3756 , - 3119 , - 2766 , - 2697 , - 2912 , - 3411 , - 4194 , - 717 , - 2068 , - 3703 , - 1078 , - 3281 , - 1224 , - 3995 , - 2506 , - 1301 , - 380 , - 4287 , - 3934 , - 3865 , - 4080 , - 35 , - 818 , - 1885 , - 3236 , - 327 , - 2246 , - 4449 , - 2392 , - 619 , - 3674 , - 2469 , - 1548 , - 911 , - 558 , - 489 , - 704 , - 1203 , - 1986 , - 3053 , - 4404 , - 1495 , - 3414 , - 1073 , - 3560 , - 1787 , - 298 , - 3637 , - 2716 , - 2079 , - 1726 , - 1657 , - 1872 , - 2371 , - 3154 , - 4221 , - 1028 , - 2663 , - 38 , - 2241 , - 184 , - 2955 , - 1466 , - 261 , - 3884 , - 3247 , - 2894 , - 2825 , - 3040 , - 3539 , - 4322 , - 845 , - 2196 , - 3831 , - 1206 , - 3409 , - 1352 , - 4123 , - 2634 , - 1429 , - 508 , - 4415 , - 4062 , - 3993 , - 4208 , - 163 , - 946 , - 2013 , - 3364 , - 455 , - 2374 , - 33 , - 2520 , - 747 , - 3802 , - 2597 , - 1676 , - 1039 , - 686 , - 617 , - 832 , - 1331 , - 2114 , - 3181 , - 4532 , - 1623 , - 3542 , - 1201 , - 3688 , - 1915 , - 426 , - 3765 , - 2844 , - 2207 , - 1854 , - 1785 , - 2000 , - 2499 , - 3282 , - 4349 , - 1156 , - 2791 , - 166 , - 2369 , - 312 , - 3083 , - 1594 , - 389 , - 4012 , - 3375 , - 3022 , - 2953 , - 3168 , - 3667 , - 4450 , - 973 , - 2324 , - 3959 , - 1334 , - 3537 , - 1480 , - 4251 , - 2762 , - 1557 , - 636 , - 4543 , - 4190 , - 4121 , - 4336 , - 291 , - 1074 , - 2141 , - 3492 , - 583 , - 2502 , - 161 , - 2648 , - 875 , - 3930 , - 2725 , - 1804 , - 1167 , - 814 , - 745 , - 960 , - 1459 , - 2242 , - 3309 , - 116 , - 1751 , - 3670 , - 1329 , - 3816 , - 2043 , - 554 , - 3893 , - 2972 , - 2335 , - 1982 , - 1913 , - 2128 , - 2627 , - 3410 , - 4477 , - 1284 , - 2919 , - 294 , - 2497 , - 440 , - 3211 , - 1722 , - 517 , - 4140 , - 3503 , - 3150 , - 3081 , - 3296 , - 3795 , - 34 , - 1101 , - 2452 , - 4087 , - 1462 , - 3665 , - 1608 , - 4379 , - 2890 , - 1685 , - 764 , - 127 , - 4318 , - 4249 , - 4464 , - 419 , - 1202 , - 2269 , - 3620 , - 711 , - 2630 , - 289 , - 2776 , - 1003 , - 4058 , - 2853 , - 1932 , - 1295 , - 942 , - 873 , - 1088 , - 1587 , - 2370 , - 3437 , - 244 , - 1879 , - 3798 , - 1457 , - 3944 , - 2171 , - 682 , - 4021 , - 3100 , - 2463 , - 2110 , - 2041 , - 2256 , - 2755 , - 3538 , - 61 , - 1412 , - 3047 , - 422 , - 2625 , - 568 , - 3339 , - 1850 , - 645 , - 4268 , - 3631 , - 3278 , - 3209 , - 3424 , - 3923 , - 162 , - 1229 , - 2580 , - 4215 , - 1590 , - 3793 , - 1736 , - 4507 , - 3018 , - 1813 , - 892 , - 255 , - 4446 , - 4377 , - 48 , - 547 , - 1330 , - 2397 , - 3748 , - 839 , - 2758 , - 417 , - 2904 , - 1131 , - 4186 , - 2981 , - 2060 , - 1423 , - 1070 , - 1001 , - 1216 , - 1715 , - 2498 , - 3565 , - 372 , - 2007 , - 3926 , - 1585 , - 4072 , - 2299 , - 810 , - 4149 , - 3228 , - 2591 , - 2238 , - 2169 , - 2384 , - 2883 , - 3666 , - 189 , - 1540 , - 3175 , - 550 , - 2753 , - 696 , - 3467 , - 1978 , - 773 , - 4396 , - 3759 , - 3406 , - 3337 , - 3552 , - 4051 , - 290 , - 1357 , - 2708 , - 4343 , - 1718 , - 3921 , - 1864 , - 91 , - 3146 , - 1941 , - 1020 , - 383 , - 30 , - 4505 , - 176 , - 675 , - 1458 , - 2525 , - 3876 , - 967 , - 2886 , - 545 , - 3032 , - 1259 , - 4314 , - 3109 , - 2188 , - 1551 , - 1198 , - 1129 , - 1344 , - 1843 , - 2626 , - 3693 , - 500 , - 2135 , - 4054 , - 1713 , - 4200 , - 2427 , - 938 , - 4277 , - 3356 , - 2719 , - 2366 , - 2297 , - 2512 , - 3011 , - 3794 , - 317 , - 1668 , - 3303 , - 678 , - 2881 , - 824 , - 3595 , - 2106 , - 901 , - 4524 , - 3887 , - 3534 , - 3465 , - 3680 , - 4179 , - 418 , - 1485 , - 2836 , - 4471 , - 1846 , - 4049 , - 1992 , - 219 , - 3274 , - 2069 , - 1148 , - 511 , - 158 , - 89 , - 304 , - 803 , - 1586 , - 2653 , - 4004 , - 1095 , - 3014 , - 673 , - 3160 , - 1387 , - 4442 , - 3237 , - 2316 , - 1679 , - 1326 , - 1257 , - 1472 , - 1971 , - 2754 , - 3821 , - 628 , - 2263 , - 4182 , - 1841 , - 4328 , - 2555 , - 1066 , - 4405 , - 3484 , - 2847 , - 2494 , - 2425 , - 2640 , - 3139 , - 3922 , - 445 , - 1796 , - 3431 , - 806 , - 3009 , - 952 , - 3723 , - 2234 , - 1029 , - 108 , - 4015 , - 3662 , - 3593 , - 3808 , - 4307 , - 546 , - 1613 , - 2964 , - 55 , - 1974 , - 4177 , - 2120 , - 347 , - 3402 , - 2197 , - 1276 , - 639 , - 286 , - 217 , - 432 , - 931 , - 1714 , - 2781 , - 4132 , - 1223 , - 3142 , - 801 , - 3288 , - 1515 , - 26 , - 3365 , - 2444 , - 1807 , - 1454 , - 1385 , - 1600 , - 2099 , - 2882 , - 3949 , - 756 , - 2391 , - 4310 , - 1969 , - 4456 , - 2683 , - 1194 , - 4533 , - 3612 , - 2975 , - 2622 , - 2553 , - 2768 , - 3267 , - 4050 , - 573 , - 1924 , - 3559 , - 934 , - 3137 , - 1080 , - 3851 , - 2362 , - 1157 , - 236 , - 4143 , - 3790 , - 3721 , - 3936 , - 4435 , - 674 , - 1741 , - 3092 , - 183 , - 2102 , - 4305 , - 2248 , - 475 , - 3530 , - 2325 , - 1404 , - 767 , - 414 , - 345 , - 560 , - 1059 , - 1842 , - 2909 , - 4260 , - 1351 , - 3270 , - 929 , - 3416 , - 1643 , - 154 , - 3493 , - 2572 , - 1935 , - 1582 , - 1513 , - 1728 , - 2227 , - 3010 , - 4077 , - 884 , - 2519 , - 4438 , - 2097 , - 40 , - 2811 , - 1322 , - 117 , - 3740 , - 3103 , - 2750 , - 2681 , - 2896 , - 3395 , - 4178 , - 701 , - 2052 , - 3687 , - 1062 , - 3265 , - 1208 , - 3979 , - 2490 , - 1285 , - 364 , - 4271 , - 3918 , - 3849 , - 4064 , - 19 , - 802 , - 1869 , - 3220 , - 311 , - 2230 , - 4433 , - 2376 , - 603 , - 3658 , - 2453 , - 1532 , - 895 , - 542 , - 473 , - 688 , - 1187 , - 1970 , - 3037 , - 4388 , - 1479 , - 3398 , - 1057 , - 3544 , - 1771 , - 282 , - 3621 , - 2700 , - 2063 , - 1710 , - 1641 , - 1856 , - 2355 , - 3138 , - 4205 , - 1012 , - 2647 , - 22 , - 2225 , - 168 , - 2939 , - 1450 , - 245 , - 3868 , - 3231 , - 2878 , - 2809 , - 3024 , - 3523 , - 4306 , - 829 , - 2180 , - 3815 , - 1190 , - 3393 , - 1336 , - 4107 , - 2618 , - 1413 , - 492 , - 4399 , - 4046 , - 3977 , - 4192 , - 147 , - 930 , - 1997 , - 3348 , - 439 , - 2358 , - 17 , - 2504 , - 731 , - 3786 , - 2581 , - 1660 , - 1023 , - 670 , - 601 , - 816 , - 1315 , - 2098 , - 3165 , - 4516 , - 1607 , - 3526 , - 1185 , - 3672 , - 1899 , - 410 , - 3749 , - 2828 , - 2191 , - 1838 , - 1769 , - 1984 , - 2483 , - 3266 , - 4333 , - 1140 , - 2775 , - 150 , - 2353 , - 296 , - 3067 , - 1578 , - 373 , - 3996 , - 3359 , - 3006 , - 2937 , - 3152 , - 3651 , - 4434 , - 957 , - 2308 , - 3943 , - 1318 , - 3521 , - 1464 , - 4235 , - 2746 , - 1541 , - 620 , - 4527 , - 4174 , - 4105 , - 4320 , - 275 , - 1058 , - 2125 , - 3476 , - 567 , - 2486 , - 145 , - 2632 , - 859 , - 3914 , - 2709 , - 1788 , - 1151 , - 798 , - 729 , - 944 , - 1443 , - 2226 , - 3293 , - 100 , - 1735 , - 3654 , - 1313 , - 3800 , - 2027 , - 538 , - 3877 , - 2956 , - 2319 , - 1966 , - 1897 , - 2112 , - 2611 , - 3394 , - 4461 , - 1268 , - 2903 , - 278 , - 2481 , - 424 , - 3195 , - 1706 , - 501 , - 4124 , - 3487 , - 3134 , - 3065 , - 3280 , - 3779 , - 18 , - 1085 , - 2436 , - 4071 , - 1446 , - 3649 , - 1592 , - 4363 , - 2874 , - 1669 , - 748 , - 111 , - 4302 , - 4233 , - 4448 , - 403 , - 1186 , - 2253 , - 3604 , - 695 , - 2614 , - 273 , - 2760 , - 987 , - 4042 , - 2837 , - 1916 , - 1279 , - 926 , - 857 , - 1072 , - 1571 , - 2354 , - 3421 , - 228 , - 1863 , - 3782 , - 1441 , - 3928 , - 2155 , - 666 , - 4005 , - 3084 , - 2447 , - 2094 , - 2025 , - 2240 , - 2739 , - 3522 , - 45 , - 1396 , - 3031 , - 406 , - 2609 , - 552 , - 3323 , - 1834 , - 629 , - 4252 , - 3615 , - 3262 , - 3193 , - 3408 , - 3907 , - 146 , - 1213 , - 2564 , - 4199 , - 1574 , - 3777 , - 1720 , - 4491 , - 3002 , - 1797 , - 876 , - 239 , - 4430 , - 4361 , - 32 , - 531 , - 1314 , - 2381 , - 3732 , - 823 , - 2742 , - 401 , - 2888 , - 1115 , - 4170 , - 2965 , - 2044 , - 1407 , - 1054 , - 985 , - 1200 , - 1699 , - 2482 , - 3549 , - 356 , - 1991 , - 3910 , - 1569 , - 4056 , - 2283 , - 794 , - 4133 , - 3212 , - 2575 , - 2222 , - 2153 , - 2368 , - 2867 , - 3650 , - 173 , - 1524 , - 3159 , - 534 , - 2737 , - 680 , - 3451 , - 1962 , - 757 , - 4380 , - 3743 , - 3390 , - 3321 , - 3536 , - 4035 , - 274 , - 1341 , - 2692 , - 4327 , - 1702 , - 3905 , - 1848 , - 75 , - 3130 , - 1925 , - 1004 , - 367 , - 14 , - 4489 , - 160 , - 659 , - 1442 , - 2509 , - 3860 , - 951 , - 2870 , - 529 , - 3016 , - 1243 , - 4298 , - 3093 , - 2172 , - 1535 , - 1182 , - 1113 , - 1328 , - 1827 , - 2610 , - 3677 , - 484 , - 2119 , - 4038 , - 1697 , - 4184 , - 2411 , - 922 , - 4261 , - 3340 , - 2703 , - 2350 , - 2281 , - 2496 , - 2995 , - 3778 , - 301 , - 1652 , - 3287 , - 662 , - 2865 , - 808 , - 3579 , - 2090 , - 885 , - 4508 , - 3871 , - 3518 , - 3449 , - 3664 , - 4163 , - 402 , - 1469 , - 2820 , - 4455 , - 1830 , - 4033 , - 1976 , - 203 , - 3258 , - 2053 , - 1132 , - 495 , - 142 , - 73 , - 288 , - 787 , - 1570 , - 2637 , - 3988 , - 1079 , - 2998 , - 657 , - 3144 , - 1371 , - 4426 , - 3221 , - 2300 , - 1663 , - 1310 , - 1241 , - 1456 , - 1955 , - 2738 , - 3805 , - 612 , - 2247 , - 4166 , - 1825 , - 4312 , - 2539 , - 1050 , - 4389 , - 3468 , - 2831 , - 2478 , - 2409 , - 2624 , - 3123 , - 3906 , - 429 , - 1780 , - 3415 , - 790 , - 2993 , - 936 , - 3707 , - 2218 , - 1013 , - 92 , - 3999 , - 3646 , - 3577 , - 3792 , - 4291 , - 530 , - 1597 , - 2948 , - 39 , - 1958 , - 4161 , - 2104 , - 331 , - 3386 , - 2181 , - 1260 , - 623 , - 270 , - 201 , - 416 , - 915 , - 1698 , - 2765 , - 4116 , - 1207 , - 3126 , - 785 , - 3272 , - 1499 , - 10 , - 3349 , - 2428 , - 1791 , - 1438 , - 1369 , - 1584 , - 2083 , - 2866 , - 3933 , - 740 , - 2375 , - 4294 , - 1953 , - 4440 , - 2667 , - 1178 , - 4517 , - 3596 , - 2959 , - 2606 , - 2537 , - 2752 , - 3251 , - 4034 , - 557 , - 1908 , - 3543 , - 918 , - 3121 , - 1064 , - 3835 , - 2346 , - 1141 , - 220 , - 4127 , - 3774 , - 3705 , - 3920 , - 4419 , - 658 , - 1725 , - 3076 , - 167 , - 2086 , - 4289 , - 2232 , - 459 , - 3514 , - 2309 , - 1388 , - 751 , - 398 , - 329 , - 544 , - 1043 , - 1826 , - 2893 , - 4244 , - 1335 , - 3254 , - 913 , - 3400 , - 1627 , - 138 , - 3477 , - 2556 , - 1919 , - 1566 , - 1497 , - 1712 , - 2211 , - 2994 , - 4061 , - 868 , - 2503 , - 4422 , - 2081 , - 24 , - 2795 , - 1306 , - 101 , - 3724 , - 3087 , - 2734 , - 2665 , - 2880 , - 3379 , - 4162 , - 685 , - 2036 , - 3671 , - 1046 , - 3249 , - 1192 , - 3963 , - 2474 , - 1269 , - 348 , - 4255 , - 3902 , - 3833 , - 4048 , - 3 , - 786 , - 1853 , - 3204 , - 295 , - 2214 , - 4417 , - 2360 , - 587 , - 3642 , - 2437 , - 1516 , - 879 , - 526 , - 457 , - 672 , - 1171 , - 1954 , - 3021 , - 4372 , - 1463 , - 3382 , - 1041 , - 3528 , - 1755 , - 266 , - 3605 , - 2684 , - 2047 , - 1694 , - 1625 , - 1840 , - 2339 , - 3122 , - 4189 , - 996 , - 2631 , - 6 , - 2209 , - 152 , - 2923 , - 1434 , - 229 , - 3852 , - 3215 , - 2862 , - 2793 , - 3008 , - 3507 , - 4290 , - 813 , - 2164 , - 3799 , - 1174 , - 3377 , - 1320 , - 4091 , - 2602 , - 1397 , - 476 , - 4383 , - 4030 , - 3961 , - 4176 , - 131 , - 914 , - 1981 , - 3332 , - 423 , - 2342 , - 1 , - 2488 , - 715 , - 3770 , - 2565 , - 1644 , - 1007 , - 654 , - 585 , - 800 , - 1299 , - 2082 , - 3149 , - 4500 , - 1591 , - 3510 , - 1169 , - 3656 , - 1883 , - 394 , - 3733 , - 2812 , - 2175 , - 1822 , - 1753 , - 1968 , - 2467 , - 3250 , - 4317 , - 1124 , - 2759 , - 134 , - 2337 , - 280 , - 3051 , - 1562 , - 357 , - 3980 , - 3343 , - 2990 , - 2921 , - 3136 , - 3635 , - 4418 , - 941 , - 2292 , - 3927 , - 1302 , - 3505 , - 1448 , - 4219 , - 2730 , - 1525 , - 604 , - 4511 , - 4158 , - 4089 , - 4304 , - 259 , - 1042 , - 2109 , - 3460 , - 551 , - 2470 , - 129 , - 2616 , - 843 , - 3898 , - 2693 , - 1772 , - 1135 , - 782 , - 713 , - 928 , - 1427 , - 2210 , - 3277 , - 84 , - 1719 , - 3638 , - 1297 , - 3784 , - 2011 , - 522 , - 3861 , - 2940 , - 2303 , - 1950 , - 1881 , - 2096 , - 2595 , - 3378 , - 4445 , - 1252 , - 2887 , - 262 , - 2465 , - 408 , - 3179 , - 1690 , - 485 , - 4108 , - 3471 , - 3118 , - 3049 , - 3264 , - 3763 , - 2 , - 1069 , - 2420 , - 4055 , - 1430 , - 3633 , - 1576 , - 4347 , - 2858 , - 1653 , - 732 , - 95 , - 4286 , - 4217 , - 4432 , - 387 , - 1170 , - 2237 , - 3588 , - 679 , - 2598 , - 257 , - 2744 , - 971 , - 4026 , - 2821 , - 1900 , - 1263 , - 910 , - 841 , - 1056 , - 1555 , - 2338 , - 3405 , - 212 , - 1847 , - 3766 , - 1425 , - 3912 , - 2139 , - 650 , - 3989 , - 3068 , - 2431 , - 2078 , - 2009 , - 2224 , - 2723 , - 3506 , - 29 , - 1380 , - 3015 , - 390 , - 2593 , - 536 , - 3307 , - 1818 , - 613 , - 4236 , - 3599 , - 3246 , - 3177 , - 3392 , - 3891 , - 130 , - 1197 , - 2548 , - 4183 , - 1558 , - 3761 , - 1704 , - 4475 , - 2986 , - 1781 , - 860 , - 223 , - 4414 , - 4345 , - 16 , - 515 , - 1298 , - 2365 , - 3716 , - 807 , - 2726 , - 385 , - 2872 , - 1099 , - 4154 , - 2949 , - 2028 , - 1391 , - 1038 , - 969 , - 1184 , - 1683 , - 2466 , - 3533 , - 340 , - 1975 , - 3894 , - 1553 , - 4040 , - 2267 , - 778 , - 4117 , - 3196 , - 2559 , - 2206 , - 2137 , - 2352 , - 2851 , - 3634 , - 157 , - 1508 , - 3143 , - 518 , - 2721 , - 664 , - 3435 , - 1946 , - 741 , - 4364 , - 3727 , - 3374 , - 3305 , - 3520 , - 4019 , - 258 , - 1325 , - 2676 , - 4311 , - 1686 , - 3889 , - 1832 , - 59 , - 3114 , - 1909 , - 988 , - 351 , - 4542 , - 4473 , - 144 , - 643 , - 1426 , - 2493 , - 3844 , - 935 , - 2854 , - 513 , - 3000 , - 1227 , - 4282 , - 3077 , - 2156 , - 1519 , - 1166 , - 1097 , - 1312 , - 1811 , - 2594 , - 3661 , - 468 , - 2103 , - 4022 , - 1681 , - 4168 , - 2395 , - 906 , - 4245 , - 3324 , - 2687 , - 2334 , - 2265 , - 2480 , - 2979 , - 3762 , - 285 , - 1636 , - 3271 , - 646 , - 2849 , - 792 , - 3563 , - 2074 , - 869 , - 4492 , - 3855 , - 3502 , - 3433 , - 3648 , - 4147 , - 386 , - 1453 , - 2804 , - 4439 , - 1814 , - 4017 , - 1960 , - 187 , - 3242 , - 2037 , - 1116 , - 479 , - 126 , - 57 , - 272 , - 771 , - 1554 , - 2621 , - 3972 , - 1063 , - 2982 , - 641 , - 3128 , - 1355 , - 4410 , - 3205 , - 2284 , - 1647 , - 1294 , - 1225 , - 1440 , - 1939 , - 2722 , - 3789 , - 596 , - 2231 , - 4150 , - 1809 , - 4296 , - 2523 , - 1034 , - 4373 , - 3452 , - 2815 , - 2462 , - 2393 , - 2608 , - 3107 , - 3890 , - 413 , - 1764 , - 3399 , - 774 , - 2977 , - 920 , - 3691 , - 2202 , - 997 , - 76 , - 3983 , - 3630 , - 3561 , - 3776 , - 4275 , - 514 , - 1581 , - 2932 , - 23 , - 1942 , - 4145 , - 2088 , - 315 , - 3370 , - 2165 , - 1244 , - 607 , - 254 , - 185 , - 400 , - 899 , - 1682 , - 2749 , - 4100 , - 1191 , - 3110 , - 769 , - 3256 , - 1483 , - 4538 , - 3333 , - 2412 , - 1775 , - 1422 , - 1353 , - 1568 , - 2067 , - 2850 , - 3917 , - 724 , - 2359 , - 4278 , - 1937 , - 4424 , - 2651 , - 1162 , - 4501 , - 3580 , - 2943 , - 2590 , - 2521 , - 2736 , - 3235 , - 4018 , - 541 , - 1892 , - 3527 , - 902 , - 3105 , - 1048 , - 3819 , - 2330 , - 1125 , - 204 , - 4111 , - 3758 , - 3689 , - 3904 , - 4403 , - 642 , - 1709 , - 3060 , - 151 , - 2070 , - 4273 , - 2216 , - 443 , - 3498 , - 2293 , - 1372 , - 735 , - 382 , - 313 , - 528 , - 1027 , - 1810 , - 2877 , - 4228 , - 1319 , - 3238 , - 897 , - 3384 , - 1611 , - 122 , - 3461 , - 2540 , - 1903 , - 1550 , - 1481 , - 1696 , - 2195 , - 2978 , - 4045 , - 852 , - 2487 , - 4406 , - 2065 , - 8 , - 2779 , - 1290 , - 85 , - 3708 , - 3071 , - 2718 , - 2649 , - 2864 , - 3363 , - 4146 , - 669 , - 2020 , - 3655 , - 1030 , - 3233 , - 1176 , - 3947 , - 2458 , - 1253 , - 332 , - 4239 , - 3886 , - 3817 , - 4032 , - 4531 , - 770 , - 1837 , - 3188 , - 279 , - 2198 , - 4401 , - 2344 , - 571 , - 3626 , - 2421 , - 1500 , - 863 , - 510 , - 441 , - 656 , - 1155 , - 1938 , - 3005 , - 4356 , - 1447 , - 3366 , - 1025 , - 3512 , - 1739 , - 250 , - 3589 , - 2668 , - 2031 , - 1678 , - 1609 , - 1824 , - 2323 , - 3106 , - 4173 , - 980 , - 2615 , - 4534 , - 2193 , - 136 , - 2907 , - 1418 , - 213 , - 3836 , - 3199 , - 2846 , - 2777 , - 2992 , - 3491 , - 4274 , - 797 , - 2148 , - 3783 , - 1158 , - 3361 , - 1304 , - 4075 , - 2586 , - 1381 , - 460 , - 4367 , - 4014 , - 3945 , - 4160 , - 115 , - 898 , - 1965 , - 3316 , - 407 , - 2326 , - 4529 , - 2472 , - 699 , - 3754 , - 2549 , - 1628 , - 991 , - 638 , - 569 , - 784 , - 1283 , - 2066 , - 3133 , - 4484 , - 1575 , - 3494 , - 1153 , - 3640 , - 1867 , - 378 , - 3717 , - 2796 , - 2159 , - 1806 , - 1737 , - 1952 , - 2451 , - 3234 , - 4301 , - 1108 , - 2743 , - 118 , - 2321 , - 264 , - 3035 , - 1546 , - 341 , - 3964 , - 3327 , - 2974 , - 2905 , - 3120 , - 3619 , - 4402 , - 925 , - 2276 , - 3911 , - 1286 , - 3489 , - 1432 , - 4203 , - 2714 , - 1509 , - 588 , - 4495 , - 4142 , - 4073 , - 4288 , - 243 , - 1026 , - 2093 , - 3444 , - 535 , - 2454 , - 113 , - 2600 , - 827 , - 3882 , - 2677 , - 1756 , - 1119 , - 766 , - 697 , - 912 , - 1411 , - 2194 , - 3261 , - 68 , - 1703 , - 3622 , - 1281 , - 3768 , - 1995 , - 506 , - 3845 , - 2924 , - 2287 , - 1934 , - 1865 , - 2080 , - 2579 , - 3362 , - 4429 , - 1236 , - 2871 , - 246 , - 2449 , - 392 , - 3163 , - 1674 , - 469 , - 4092 , - 3455 , - 3102 , - 3033 , - 3248 , - 3747 , - 4530 , - 1053 , - 2404 , - 4039 , - 1414 , - 3617 , - 1560 , - 4331 , - 2842 , - 1637 , - 716 , - 79 , - 4270 , - 4201 , - 4416 , - 371 , - 1154 , - 2221 , - 3572 , - 663 , - 2582 , - 241 , - 2728 , - 955 , - 4010 , - 2805 , - 1884 , - 1247 , - 894 , - 825 , - 1040 , - 1539 , - 2322 , - 3389 , - 196 , - 1831 , - 3750 , - 1409 , - 3896 , - 2123 , - 634 , - 3973 , - 3052 , - 2415 , - 2062 , - 1993 , - 2208 , - 2707 , - 3490 , - 13 , - 1364 , - 2999 , - 374 , - 2577 , - 520 , - 3291 , - 1802 , - 597 , - 4220 , - 3583 , - 3230 , - 3161 , - 3376 , - 3875 , - 114 , - 1181 , - 2532 , - 4167 , - 1542 , - 3745 , - 1688 , - 4459 , - 2970 , - 1765 , - 844 , - 207 , - 4398 , - 4329 , - 0 , - 817 , - 2594 , - 723 , - 4420 , - 4469 , - 870 , - 2839 , - 1160 , - 441 , - 682 , - 1883 , - 4044 , - 2557 , - 2030 , - 2463 , - 3856 , - 1601 , - 306 , - 4579 , - 596 , - 2181 , - 118 , - 3623 , - 3480 , - 4297 , - 1466 , - 4203 , - 3292 , - 3341 , - 4350 , - 1711 , - 32 , - 3921 , - 4162 , - 755 , - 2916 , - 1429 , - 902 , - 1335 , - 2728 , - 473 , - 3786 , - 3451 , - 4076 , - 1053 , - 3598 , - 2495 , - 2352 , - 3169 , - 338 , - 3075 , - 2164 , - 2213 , - 3222 , - 583 , - 3512 , - 2793 , - 3034 , - 4235 , - 1788 , - 301 , - 4382 , - 207 , - 1600 , - 3953 , - 2658 , - 2323 , - 2948 , - 4533 , - 2470 , - 1367 , - 1224 , - 2041 , - 3818 , - 1947 , - 1036 , - 1085 , - 2094 , - 4063 , - 2384 , - 1665 , - 1906 , - 3107 , - 660 , - 3781 , - 3254 , - 3687 , - 472 , - 2825 , - 1530 , - 1195 , - 1820 , - 3405 , - 1342 , - 239 , - 96 , - 913 , - 2690 , - 819 , - 4516 , - 4565 , - 966 , - 2935 , - 1256 , - 537 , - 778 , - 1979 , - 4140 , - 2653 , - 2126 , - 2559 , - 3952 , - 1697 , - 402 , - 67 , - 692 , - 2277 , - 214 , - 3719 , - 3576 , - 4393 , - 1562 , - 4299 , - 3388 , - 3437 , - 4446 , - 1807 , - 128 , - 4017 , - 4258 , - 851 , - 3012 , - 1525 , - 998 , - 1431 , - 2824 , - 569 , - 3882 , - 3547 , - 4172 , - 1149 , - 3694 , - 2591 , - 2448 , - 3265 , - 434 , - 3171 , - 2260 , - 2309 , - 3318 , - 679 , - 3608 , - 2889 , - 3130 , - 4331 , - 1884 , - 397 , - 4478 , - 303 , - 1696 , - 4049 , - 2754 , - 2419 , - 3044 , - 21 , - 2566 , - 1463 , - 1320 , - 2137 , - 3914 , - 2043 , - 1132 , - 1181 , - 2190 , - 4159 , - 2480 , - 1761 , - 2002 , - 3203 , - 756 , - 3877 , - 3350 , - 3783 , - 568 , - 2921 , - 1626 , - 1291 , - 1916 , - 3501 , - 1438 , - 335 , - 192 , - 1009 , - 2786 , - 915 , - 4 , - 53 , - 1062 , - 3031 , - 1352 , - 633 , - 874 , - 2075 , - 4236 , - 2749 , - 2222 , - 2655 , - 4048 , - 1793 , - 498 , - 163 , - 788 , - 2373 , - 310 , - 3815 , - 3672 , - 4489 , - 1658 , - 4395 , - 3484 , - 3533 , - 4542 , - 1903 , - 224 , - 4113 , - 4354 , - 947 , - 3108 , - 1621 , - 1094 , - 1527 , - 2920 , - 665 , - 3978 , - 3643 , - 4268 , - 1245 , - 3790 , - 2687 , - 2544 , - 3361 , - 530 , - 3267 , - 2356 , - 2405 , - 3414 , - 775 , - 3704 , - 2985 , - 3226 , - 4427 , - 1980 , - 493 , - 4574 , - 399 , - 1792 , - 4145 , - 2850 , - 2515 , - 3140 , - 117 , - 2662 , - 1559 , - 1416 , - 2233 , - 4010 , - 2139 , - 1228 , - 1277 , - 2286 , - 4255 , - 2576 , - 1857 , - 2098 , - 3299 , - 852 , - 3973 , - 3446 , - 3879 , - 664 , - 3017 , - 1722 , - 1387 , - 2012 , - 3597 , - 1534 , - 431 , - 288 , - 1105 , - 2882 , - 1011 , - 100 , - 149 , - 1158 , - 3127 , - 1448 , - 729 , - 970 , - 2171 , - 4332 , - 2845 , - 2318 , - 2751 , - 4144 , - 1889 , - 594 , - 259 , - 884 , - 2469 , - 406 , - 3911 , - 3768 , - 4585 , - 1754 , - 4491 , - 3580 , - 3629 , - 30 , - 1999 , - 320 , - 4209 , - 4450 , - 1043 , - 3204 , - 1717 , - 1190 , - 1623 , - 3016 , - 761 , - 4074 , - 3739 , - 4364 , - 1341 , - 3886 , - 2783 , - 2640 , - 3457 , - 626 , - 3363 , - 2452 , - 2501 , - 3510 , - 871 , - 3800 , - 3081 , - 3322 , - 4523 , - 2076 , - 589 , - 62 , - 495 , - 1888 , - 4241 , - 2946 , - 2611 , - 3236 , - 213 , - 2758 , - 1655 , - 1512 , - 2329 , - 4106 , - 2235 , - 1324 , - 1373 , - 2382 , - 4351 , - 2672 , - 1953 , - 2194 , - 3395 , - 948 , - 4069 , - 3542 , - 3975 , - 760 , - 3113 , - 1818 , - 1483 , - 2108 , - 3693 , - 1630 , - 527 , - 384 , - 1201 , - 2978 , - 1107 , - 196 , - 245 , - 1254 , - 3223 , - 1544 , - 825 , - 1066 , - 2267 , - 4428 , - 2941 , - 2414 , - 2847 , - 4240 , - 1985 , - 690 , - 355 , - 980 , - 2565 , - 502 , - 4007 , - 3864 , - 73 , - 1850 , - 4587 , - 3676 , - 3725 , - 126 , - 2095 , - 416 , - 4305 , - 4546 , - 1139 , - 3300 , - 1813 , - 1286 , - 1719 , - 3112 , - 857 , - 4170 , - 3835 , - 4460 , - 1437 , - 3982 , - 2879 , - 2736 , - 3553 , - 722 , - 3459 , - 2548 , - 2597 , - 3606 , - 967 , - 3896 , - 3177 , - 3418 , - 11 , - 2172 , - 685 , - 158 , - 591 , - 1984 , - 4337 , - 3042 , - 2707 , - 3332 , - 309 , - 2854 , - 1751 , - 1608 , - 2425 , - 4202 , - 2331 , - 1420 , - 1469 , - 2478 , - 4447 , - 2768 , - 2049 , - 2290 , - 3491 , - 1044 , - 4165 , - 3638 , - 4071 , - 856 , - 3209 , - 1914 , - 1579 , - 2204 , - 3789 , - 1726 , - 623 , - 480 , - 1297 , - 3074 , - 1203 , - 292 , - 341 , - 1350 , - 3319 , - 1640 , - 921 , - 1162 , - 2363 , - 4524 , - 3037 , - 2510 , - 2943 , - 4336 , - 2081 , - 786 , - 451 , - 1076 , - 2661 , - 598 , - 4103 , - 3960 , - 169 , - 1946 , - 75 , - 3772 , - 3821 , - 222 , - 2191 , - 512 , - 4401 , - 34 , - 1235 , - 3396 , - 1909 , - 1382 , - 1815 , - 3208 , - 953 , - 4266 , - 3931 , - 4556 , - 1533 , - 4078 , - 2975 , - 2832 , - 3649 , - 818 , - 3555 , - 2644 , - 2693 , - 3702 , - 1063 , - 3992 , - 3273 , - 3514 , - 107 , - 2268 , - 781 , - 254 , - 687 , - 2080 , - 4433 , - 3138 , - 2803 , - 3428 , - 405 , - 2950 , - 1847 , - 1704 , - 2521 , - 4298 , - 2427 , - 1516 , - 1565 , - 2574 , - 4543 , - 2864 , - 2145 , - 2386 , - 3587 , - 1140 , - 4261 , - 3734 , - 4167 , - 952 , - 3305 , - 2010 , - 1675 , - 2300 , - 3885 , - 1822 , - 719 , - 576 , - 1393 , - 3170 , - 1299 , - 388 , - 437 , - 1446 , - 3415 , - 1736 , - 1017 , - 1258 , - 2459 , - 12 , - 3133 , - 2606 , - 3039 , - 4432 , - 2177 , - 882 , - 547 , - 1172 , - 2757 , - 694 , - 4199 , - 4056 , - 265 , - 2042 , - 171 , - 3868 , - 3917 , - 318 , - 2287 , - 608 , - 4497 , - 130 , - 1331 , - 3492 , - 2005 , - 1478 , - 1911 , - 3304 , - 1049 , - 4362 , - 4027 , - 44 , - 1629 , - 4174 , - 3071 , - 2928 , - 3745 , - 914 , - 3651 , - 2740 , - 2789 , - 3798 , - 1159 , - 4088 , - 3369 , - 3610 , - 203 , - 2364 , - 877 , - 350 , - 783 , - 2176 , - 4529 , - 3234 , - 2899 , - 3524 , - 501 , - 3046 , - 1943 , - 1800 , - 2617 , - 4394 , - 2523 , - 1612 , - 1661 , - 2670 , - 31 , - 2960 , - 2241 , - 2482 , - 3683 , - 1236 , - 4357 , - 3830 , - 4263 , - 1048 , - 3401 , - 2106 , - 1771 , - 2396 , - 3981 , - 1918 , - 815 , - 672 , - 1489 , - 3266 , - 1395 , - 484 , - 533 , - 1542 , - 3511 , - 1832 , - 1113 , - 1354 , - 2555 , - 108 , - 3229 , - 2702 , - 3135 , - 4528 , - 2273 , - 978 , - 643 , - 1268 , - 2853 , - 790 , - 4295 , - 4152 , - 361 , - 2138 , - 267 , - 3964 , - 4013 , - 414 , - 2383 , - 704 , - 4593 , - 226 , - 1427 , - 3588 , - 2101 , - 1574 , - 2007 , - 3400 , - 1145 , - 4458 , - 4123 , - 140 , - 1725 , - 4270 , - 3167 , - 3024 , - 3841 , - 1010 , - 3747 , - 2836 , - 2885 , - 3894 , - 1255 , - 4184 , - 3465 , - 3706 , - 299 , - 2460 , - 973 , - 446 , - 879 , - 2272 , - 17 , - 3330 , - 2995 , - 3620 , - 597 , - 3142 , - 2039 , - 1896 , - 2713 , - 4490 , - 2619 , - 1708 , - 1757 , - 2766 , - 127 , - 3056 , - 2337 , - 2578 , - 3779 , - 1332 , - 4453 , - 3926 , - 4359 , - 1144 , - 3497 , - 2202 , - 1867 , - 2492 , - 4077 , - 2014 , - 911 , - 768 , - 1585 , - 3362 , - 1491 , - 580 , - 629 , - 1638 , - 3607 , - 1928 , - 1209 , - 1450 , - 2651 , - 204 , - 3325 , - 2798 , - 3231 , - 16 , - 2369 , - 1074 , - 739 , - 1364 , - 2949 , - 886 , - 4391 , - 4248 , - 457 , - 2234 , - 363 , - 4060 , - 4109 , - 510 , - 2479 , - 800 , - 81 , - 322 , - 1523 , - 3684 , - 2197 , - 1670 , - 2103 , - 3496 , - 1241 , - 4554 , - 4219 , - 236 , - 1821 , - 4366 , - 3263 , - 3120 , - 3937 , - 1106 , - 3843 , - 2932 , - 2981 , - 3990 , - 1351 , - 4280 , - 3561 , - 3802 , - 395 , - 2556 , - 1069 , - 542 , - 975 , - 2368 , - 113 , - 3426 , - 3091 , - 3716 , - 693 , - 3238 , - 2135 , - 1992 , - 2809 , - 4586 , - 2715 , - 1804 , - 1853 , - 2862 , - 223 , - 3152 , - 2433 , - 2674 , - 3875 , - 1428 , - 4549 , - 4022 , - 4455 , - 1240 , - 3593 , - 2298 , - 1963 , - 2588 , - 4173 , - 2110 , - 1007 , - 864 , - 1681 , - 3458 , - 1587 , - 676 , - 725 , - 1734 , - 3703 , - 2024 , - 1305 , - 1546 , - 2747 , - 300 , - 3421 , - 2894 , - 3327 , - 112 , - 2465 , - 1170 , - 835 , - 1460 , - 3045 , - 982 , - 4487 , - 4344 , - 553 , - 2330 , - 459 , - 4156 , - 4205 , - 606 , - 2575 , - 896 , - 177 , - 418 , - 1619 , - 3780 , - 2293 , - 1766 , - 2199 , - 3592 , - 1337 , - 42 , - 4315 , - 332 , - 1917 , - 4462 , - 3359 , - 3216 , - 4033 , - 1202 , - 3939 , - 3028 , - 3077 , - 4086 , - 1447 , - 4376 , - 3657 , - 3898 , - 491 , - 2652 , - 1165 , - 638 , - 1071 , - 2464 , - 209 , - 3522 , - 3187 , - 3812 , - 789 , - 3334 , - 2231 , - 2088 , - 2905 , - 74 , - 2811 , - 1900 , - 1949 , - 2958 , - 319 , - 3248 , - 2529 , - 2770 , - 3971 , - 1524 , - 37 , - 4118 , - 4551 , - 1336 , - 3689 , - 2394 , - 2059 , - 2684 , - 4269 , - 2206 , - 1103 , - 960 , - 1777 , - 3554 , - 1683 , - 772 , - 821 , - 1830 , - 3799 , - 2120 , - 1401 , - 1642 , - 2843 , - 396 , - 3517 , - 2990 , - 3423 , - 208 , - 2561 , - 1266 , - 931 , - 1556 , - 3141 , - 1078 , - 4583 , - 4440 , - 649 , - 2426 , - 555 , - 4252 , - 4301 , - 702 , - 2671 , - 992 , - 273 , - 514 , - 1715 , - 3876 , - 2389 , - 1862 , - 2295 , - 3688 , - 1433 , - 138 , - 4411 , - 428 , - 2013 , - 4558 , - 3455 , - 3312 , - 4129 , - 1298 , - 4035 , - 3124 , - 3173 , - 4182 , - 1543 , - 4472 , - 3753 , - 3994 , - 587 , - 2748 , - 1261 , - 734 , - 1167 , - 2560 , - 305 , - 3618 , - 3283 , - 3908 , - 885 , - 3430 , - 2327 , - 2184 , - 3001 , - 170 , - 2907 , - 1996 , - 2045 , - 3054 , - 415 , - 3344 , - 2625 , - 2866 , - 4067 , - 1620 , - 133 , - 4214 , - 39 , - 1432 , - 3785 , - 2490 , - 2155 , - 2780 , - 4365 , - 2302 , - 1199 , - 1056 , - 1873 , - 3650 , - 1779 , - 868 , - 917 , - 1926 , - 3895 , - 2216 , - 1497 , - 1738 , - 2939 , - 492 , - 3613 , - 3086 , - 3519 , - 304 , - 2657 , - 1362 , - 1027 , - 1652 , - 3237 , - 1174 , - 71 , - 4536 , - 745 , - 2522 , - 651 , - 4348 , - 4397 , - 798 , - 2767 , - 1088 , - 369 , - 610 , - 1811 , - 3972 , - 2485 , - 1958 , - 2391 , - 3784 , - 1529 , - 234 , - 4507 , - 524 , - 2109 , - 46 , - 3551 , - 3408 , - 4225 , - 1394 , - 4131 , - 3220 , - 3269 , - 4278 , - 1639 , - 4568 , - 3849 , - 4090 , - 683 , - 2844 , - 1357 , - 830 , - 1263 , - 2656 , - 401 , - 3714 , - 3379 , - 4004 , - 981 , - 3526 , - 2423 , - 2280 , - 3097 , - 266 , - 3003 , - 2092 , - 2141 , - 3150 , - 511 , - 3440 , - 2721 , - 2962 , - 4163 , - 1716 , - 229 , - 4310 , - 135 , - 1528 , - 3881 , - 2586 , - 2251 , - 2876 , - 4461 , - 2398 , - 1295 , - 1152 , - 1969 , - 3746 , - 1875 , - 964 , - 1013 , - 2022 , - 3991 , - 2312 , - 1593 , - 1834 , - 3035 , - 588 , - 3709 , - 3182 , - 3615 , - 400 , - 2753 , - 1458 , - 1123 , - 1748 , - 3333 , - 1270 , - 167 , - 24 , - 841 , - 2618 , - 747 , - 4444 , - 4493 , - 894 , - 2863 , - 1184 , - 465 , - 706 , - 1907 , - 4068 , - 2581 , - 2054 , - 2487 , - 3880 , - 1625 , - 330 , - 4603 , - 620 , - 2205 , - 142 , - 3647 , - 3504 , - 4321 , - 1490 , - 4227 , - 3316 , - 3365 , - 4374 , - 1735 , - 56 , - 3945 , - 4186 , - 779 , - 2940 , - 1453 , - 926 , - 1359 , - 2752 , - 497 , - 3810 , - 3475 , - 4100 , - 1077 , - 3622 , - 2519 , - 2376 , - 3193 , - 362 , - 3099 , - 2188 , - 2237 , - 3246 , - 607 , - 3536 , - 2817 , - 3058 , - 4259 , - 1812 , - 325 , - 4406 , - 231 , - 1624 , - 3977 , - 2682 , - 2347 , - 2972 , - 4557 , - 2494 , - 1391 , - 1248 , - 2065 , - 3842 , - 1971 , - 1060 , - 1109 , - 2118 , - 4087 , - 2408 , - 1689 , - 1930 , - 3131 , - 684 , - 3805 , - 3278 , - 3711 , - 496 , - 2849 , - 1554 , - 1219 , - 1844 , - 3429 , - 1366 , - 263 , - 120 , - 937 , - 2714 , - 843 , - 4540 , - 4589 , - 990 , - 2959 , - 1280 , - 561 , - 802 , - 2003 , - 4164 , - 2677 , - 2150 , - 2583 , - 3976 , - 1721 , - 426 , - 91 , - 716 , - 2301 , - 238 , - 3743 , - 3600 , - 4417 , - 1586 , - 4323 , - 3412 , - 3461 , - 4470 , - 1831 , - 152 , - 4041 , - 4282 , - 875 , - 3036 , - 1549 , - 1022 , - 1455 , - 2848 , - 593 , - 3906 , - 3571 , - 4196 , - 1173 , - 3718 , - 2615 , - 2472 , - 3289 , - 458 , - 3195 , - 2284 , - 2333 , - 3342 , - 703 , - 3632 , - 2913 , - 3154 , - 4355 , - 1908 , - 421 , - 4502 , - 327 , - 1720 , - 4073 , - 2778 , - 2443 , - 3068 , - 45 , - 2590 , - 1487 , - 1344 , - 2161 , - 3938 , - 2067 , - 1156 , - 1205 , - 2214 , - 4183 , - 2504 , - 1785 , - 2026 , - 3227 , - 780 , - 3901 , - 3374 , - 3807 , - 592 , - 2945 , - 1650 , - 1315 , - 1940 , - 3525 , - 1462 , - 359 , - 216 , - 1033 , - 2810 , - 939 , - 28 , - 77 , - 1086 , - 3055 , - 1376 , - 657 , - 898 , - 2099 , - 4260 , - 2773 , - 2246 , - 2679 , - 4072 , - 1817 , - 522 , - 187 , - 812 , - 2397 , - 334 , - 3839 , - 3696 , - 4513 , - 1682 , - 4419 , - 3508 , - 3557 , - 4566 , - 1927 , - 248 , - 4137 , - 4378 , - 971 , - 3132 , - 1645 , - 1118 , - 1551 , - 2944 , - 689 , - 4002 , - 3667 , - 4292 , - 1269 , - 3814 , - 2711 , - 2568 , - 3385 , - 554 , - 3291 , - 2380 , - 2429 , - 3438 , - 799 , - 3728 , - 3009 , - 3250 , - 4451 , - 2004 , - 517 , - 4598 , - 423 , - 1816 , - 4169 , - 2874 , - 2539 , - 3164 , - 141 , - 2686 , - 1583 , - 1440 , - 2257 , - 4034 , - 2163 , - 1252 , - 1301 , - 2310 , - 4279 , - 2600 , - 1881 , - 2122 , - 3323 , - 876 , - 3997 , - 3470 , - 3903 , - 688 , - 3041 , - 1746 , - 1411 , - 2036 , - 3621 , - 1558 , - 455 , - 312 , - 1129 , - 2906 , - 1035 , - 124 , - 173 , - 1182 , - 3151 , - 1472 , - 753 , - 994 , - 2195 , - 4356 , - 2869 , - 2342 , - 2775 , - 4168 , - 1913 , - 618 , - 283 , - 908 , - 2493 , - 430 , - 3935 , - 3792 , - 1 , - 1778 , - 4515 , - 3604 , - 3653 , - 54 , - 2023 , - 344 , - 4233 , - 4474 , - 1067 , - 3228 , - 1741 , - 1214 , - 1647 , - 3040 , - 785 , - 4098 , - 3763 , - 4388 , - 1365 , - 3910 , - 2807 , - 2664 , - 3481 , - 650 , - 3387 , - 2476 , - 2525 , - 3534 , - 895 , - 3824 , - 3105 , - 3346 , - 4547 , - 2100 , - 613 , - 86 , - 519 , - 1912 , - 4265 , - 2970 , - 2635 , - 3260 , - 237 , - 2782 , - 1679 , - 1536 , - 2353 , - 4130 , - 2259 , - 1348 , - 1397 , - 2406 , - 4375 , - 2696 , - 1977 , - 2218 , - 3419 , - 972 , - 4093 , - 3566 , - 3999 , - 784 , - 3137 , - 1842 , - 1507 , - 2132 , - 3717 , - 1654 , - 551 , - 408 , - 1225 , - 3002 , - 1131 , - 220 , - 269 , - 1278 , - 3247 , - 1568 , - 849 , - 1090 , - 2291 , - 4452 , - 2965 , - 2438 , - 2871 , - 4264 , - 2009 , - 714 , - 379 , - 1004 , - 2589 , - 526 , - 4031 , - 3888 , - 97 , - 1874 , - 3 , - 3700 , - 3749 , - 150 , - 2119 , - 440 , - 4329 , - 4570 , - 1163 , - 3324 , - 1837 , - 1310 , - 1743 , - 3136 , - 881 , - 4194 , - 3859 , - 4484 , - 1461 , - 4006 , - 2903 , - 2760 , - 3577 , - 746 , - 3483 , - 2572 , - 2621 , - 3630 , - 991 , - 3920 , - 3201 , - 3442 , - 35 , - 2196 , - 709 , - 182 , - 615 , - 2008 , - 4361 , - 3066 , - 2731 , - 3356 , - 333 , - 2878 , - 1775 , - 1632 , - 2449 , - 4226 , - 2355 , - 1444 , - 1493 , - 2502 , - 4471 , - 2792 , - 2073 , - 2314 , - 3515 , - 1068 , - 4189 , - 3662 , - 4095 , - 880 , - 3233 , - 1938 , - 1603 , - 2228 , - 3813 , - 1750 , - 647 , - 504 , - 1321 , - 3098 , - 1227 , - 316 , - 365 , - 1374 , - 3343 , - 1664 , - 945 , - 1186 , - 2387 , - 4548 , - 3061 , - 2534 , - 2967 , - 4360 , - 2105 , - 810 , - 475 , - 1100 , - 2685 , - 622 , - 4127 , - 3984 , - 193 , - 1970 , - 99 , - 3796 , - 3845 , - 246 , - 2215 , - 536 , - 4425 , - 58 , - 1259 , - 3420 , - 1933 , - 1406 , - 1839 , - 3232 , - 977 , - 4290 , - 3955 , - 4580 , - 1557 , - 4102 , - 2999 , - 2856 , - 3673 , - 842 , - 3579 , - 2668 , - 2717 , - 3726 , - 1087 , - 4016 , - 3297 , - 3538 , - 131 , - 2292 , - 805 , - 278 , - 711 , - 2104 , - 4457 , - 3162 , - 2827 , - 3452 , - 429 , - 2974 , - 1871 , - 1728 , - 2545 , - 4322 , - 2451 , - 1540 , - 1589 , - 2598 , - 4567 , - 2888 , - 2169 , - 2410 , - 3611 , - 1164 , - 4285 , - 3758 , - 4191 , - 976 , - 3329 , - 2034 , - 1699 , - 2324 , - 3909 , - 1846 , - 743 , - 600 , - 1417 , - 3194 , - 1323 , - 412 , - 461 , - 1470 , - 3439 , - 1760 , - 1041 , - 1282 , - 2483 , - 36 , - 3157 , - 2630 , - 3063 , - 4456 , - 2201 , - 906 , - 571 , - 1196 , - 2781 , - 718 , - 4223 , - 4080 , - 289 , - 2066 , - 195 , - 3892 , - 3941 , - 342 , - 2311 , - 632 , - 4521 , - 154 , - 1355 , - 3516 , - 2029 , - 1502 , - 1935 , - 3328 , - 1073 , - 4386 , - 4051 , - 68 , - 1653 , - 4198 , - 3095 , - 2952 , - 3769 , - 938 , - 3675 , - 2764 , - 2813 , - 3822 , - 1183 , - 4112 , - 3393 , - 3634 , - 227 , - 2388 , - 901 , - 374 , - 807 , - 2200 , - 4553 , - 3258 , - 2923 , - 3548 , - 525 , - 3070 , - 1967 , - 1824 , - 2641 , - 4418 , - 2547 , - 1636 , - 1685 , - 2694 , - 55 , - 2984 , - 2265 , - 2506 , - 3707 , - 1260 , - 4381 , - 3854 , - 4287 , - 1072 , - 3425 , - 2130 , - 1795 , - 2420 , - 4005 , - 1942 , - 839 , - 696 , - 1513 , - 3290 , - 1419 , - 508 , - 557 , - 1566 , - 3535 , - 1856 , - 1137 , - 1378 , - 2579 , - 132 , - 3253 , - 2726 , - 3159 , - 4552 , - 2297 , - 1002 , - 667 , - 1292 , - 2877 , - 814 , - 4319 , - 4176 , - 385 , - 2162 , - 291 , - 3988 , - 4037 , - 438 , - 2407 , - 728 , - 9 , - 250 , - 1451 , - 3612 , - 2125 , - 1598 , - 2031 , - 3424 , - 1169 , - 4482 , - 4147 , - 164 , - 1749 , - 4294 , - 3191 , - 3048 , - 3865 , - 1034 , - 3771 , - 2860 , - 2909 , - 3918 , - 1279 , - 4208 , - 3489 , - 3730 , - 323 , - 2484 , - 997 , - 470 , - 903 , - 2296 , - 41 , - 3354 , - 3019 , - 3644 , - 621 , - 3166 , - 2063 , - 1920 , - 2737 , - 4514 , - 2643 , - 1732 , - 1781 , - 2790 , - 151 , - 3080 , - 2361 , - 2602 , - 3803 , - 1356 , - 4477 , - 3950 , - 4383 , - 1168 , - 3521 , - 2226 , - 1891 , - 2516 , - 4101 , - 2038 , - 935 , - 792 , - 1609 , - 3386 , - 1515 , - 604 , - 653 , - 1662 , - 3631 , - 1952 , - 1233 , - 1474 , - 2675 , - 228 , - 3349 , - 2822 , - 3255 , - 40 , - 2393 , - 1098 , - 763 , - 1388 , - 2973 , - 910 , - 4415 , - 4272 , - 481 , - 2258 , - 387 , - 4084 , - 4133 , - 534 , - 2503 , - 824 , - 105 , - 346 , - 1547 , - 3708 , - 2221 , - 1694 , - 2127 , - 3520 , - 1265 , - 4578 , - 4243 , - 260 , - 1845 , - 4390 , - 3287 , - 3144 , - 3961 , - 1130 , - 3867 , - 2956 , - 3005 , - 4014 , - 1375 , - 4304 , - 3585 , - 3826 , - 419 , - 2580 , - 1093 , - 566 , - 999 , - 2392 , - 137 , - 3450 , - 3115 , - 3740 , - 717 , - 3262 , - 2159 , - 2016 , - 2833 , - 2 , - 2739 , - 1828 , - 1877 , - 2886 , - 247 , - 3176 , - 2457 , - 2698 , - 3899 , - 1452 , - 4573 , - 4046 , - 4479 , - 1264 , - 3617 , - 2322 , - 1987 , - 2612 , - 4197 , - 2134 , - 1031 , - 888 , - 1705 , - 3482 , - 1611 , - 700 , - 749 , - 1758 , - 3727 , - 2048 , - 1329 , - 1570 , - 2771 , - 324 , - 3445 , - 2918 , - 3351 , - 136 , - 2489 , - 1194 , - 859 , - 1484 , - 3069 , - 1006 , - 4511 , - 4368 , - 577 , - 2354 , - 483 , - 4180 , - 4229 , - 630 , - 2599 , - 920 , - 201 , - 442 , - 1643 , - 3804 , - 2317 , - 1790 , - 2223 , - 3616 , - 1361 , - 66 , - 4339 , - 356 , - 1941 , - 4486 , - 3383 , - 3240 , - 4057 , - 1226 , - 3963 , - 3052 , - 3101 , - 4110 , - 1471 , - 4400 , - 3681 , - 3922 , - 515 , - 2676 , - 1189 , - 662 , - 1095 , - 2488 , - 233 , - 3546 , - 3211 , - 3836 , - 813 , - 3358 , - 2255 , - 2112 , - 2929 , - 98 , - 2835 , - 1924 , - 1973 , - 2982 , - 343 , - 3272 , - 2553 , - 2794 , - 3995 , - 1548 , - 61 , - 4142 , - 4575 , - 1360 , - 3713 , - 2418 , - 2083 , - 2708 , - 4293 , - 2230 , - 1127 , - 984 , - 1801 , - 3578 , - 1707 , - 796 , - 845 , - 1854 , - 3823 , - 2144 , - 1425 , - 1666 , - 2867 , - 420 , - 3541 , - 3014 , - 3447 , - 232 , - 2585 , - 1290 , - 955 , - 1580 , - 3165 , - 1102 , - 4607 , - 4464 , - 673 , - 2450 , - 579 , - 4276 , - 4325 , - 726 , - 2695 , - 1016 , - 297 , - 538 , - 1739 , - 3900 , - 2413 , - 1886 , - 2319 , - 3712 , - 1457 , - 162 , - 4435 , - 452 , - 2037 , - 4582 , - 3479 , - 3336 , - 4153 , - 1322 , - 4059 , - 3148 , - 3197 , - 4206 , - 1567 , - 4496 , - 3777 , - 4018 , - 611 , - 2772 , - 1285 , - 758 , - 1191 , - 2584 , - 329 , - 3642 , - 3307 , - 3932 , - 909 , - 3454 , - 2351 , - 2208 , - 3025 , - 194 , - 2931 , - 2020 , - 2069 , - 3078 , - 439 , - 3368 , - 2649 , - 2890 , - 4091 , - 1644 , - 157 , - 4238 , - 63 , - 1456 , - 3809 , - 2514 , - 2179 , - 2804 , - 4389 , - 2326 , - 1223 , - 1080 , - 1897 , - 3674 , - 1803 , - 892 , - 941 , - 1950 , - 3919 , - 2240 , - 1521 , - 1762 , - 2963 , - 516 , - 3637 , - 3110 , - 3543 , - 328 , - 2681 , - 1386 , - 1051 , - 1676 , - 3261 , - 1198 , - 95 , - 4560 , - 769 , - 2546 , - 675 , - 4372 , - 4421 , - 822 , - 2791 , - 1112 , - 393 , - 634 , - 1835 , - 3996 , - 2509 , - 1982 , - 2415 , - 3808 , - 1553 , - 258 , - 4531 , - 548 , - 2133 , - 70 , - 3575 , - 3432 , - 4249 , - 1418 , - 4155 , - 3244 , - 3293 , - 4302 , - 1663 , - 4592 , - 3873 , - 4114 , - 707 , - 2868 , - 1381 , - 854 , - 1287 , - 2680 , - 425 , - 3738 , - 3403 , - 4028 , - 1005 , - 3550 , - 2447 , - 2304 , - 3121 , - 290 , - 3027 , - 2116 , - 2165 , - 3174 , - 535 , - 3464 , - 2745 , - 2986 , - 4187 , - 1740 , - 253 , - 4334 , - 159 , - 1552 , - 3905 , - 2610 , - 2275 , - 2900 , - 4485 , - 2422 , - 1319 , - 1176 , - 1993 , - 3770 , - 1899 , - 988 , - 1037 , - 2046 , - 4015 , - 2336 , - 1617 , - 1858 , - 3059 , - 612 , - 3733 , - 3206 , - 3639 , - 424 , - 2777 , - 1482 , - 1147 , - 1772 , - 3357 , - 1294 , - 191 , - 48 , - 865 , - 2642 , - 771 , - 4468 , - 4517 , - 918 , - 2887 , - 1208 , - 489 , - 730 , - 1931 , - 4092 , - 2605 , - 2078 , - 2511 , - 3904 , - 1649 , - 354 , - 19 , - 644 , - 2229 , - 166 , - 3671 , - 3528 , - 4345 , - 1514 , - 4251 , - 3340 , - 3389 , - 4398 , - 1759 , - 80 , - 3969 , - 4210 , - 803 , - 2964 , - 1477 , - 950 , - 1383 , - 2776 , - 521 , - 3834 , - 3499 , - 4124 , - 1101 , - 3646 , - 2543 , - 2400 , - 3217 , - 386 , - 3123 , - 2212 , - 2261 , - 3270 , - 631 , - 3560 , - 2841 , - 3082 , - 4283 , - 1836 , - 349 , - 4430 , - 255 , - 1648 , - 4001 , - 2706 , - 2371 , - 2996 , - 4581 , - 2518 , - 1415 , - 1272 , - 2089 , - 3866 , - 1995 , - 1084 , - 1133 , - 2142 , - 4111 , - 2432 , - 1713 , - 1954 , - 3155 , - 708 , - 3829 , - 3302 , - 3735 , - 520 , - 2873 , - 1578 , - 1243 , - 1868 , - 3453 , - 1390 , - 287 , - 144 , - 961 , - 2738 , - 867 , - 4564 , - 5 , - 1014 , - 2983 , - 1304 , - 585 , - 826 , - 2027 , - 4188 , - 2701 , - 2174 , - 2607 , - 4000 , - 1745 , - 450 , - 115 , - 740 , - 2325 , - 262 , - 3767 , - 3624 , - 4441 , - 1610 , - 4347 , - 3436 , - 3485 , - 4494 , - 1855 , - 176 , - 4065 , - 4306 , - 899 , - 3060 , - 1573 , - 1046 , - 1479 , - 2872 , - 617 , - 3930 , - 3595 , - 4220 , - 1197 , - 3742 , - 2639 , - 2496 , - 3313 , - 482 , - 3219 , - 2308 , - 2357 , - 3366 , - 727 , - 3656 , - 2937 , - 3178 , - 4379 , - 1932 , - 445 , - 4526 , - 351 , - 1744 , - 4097 , - 2802 , - 2467 , - 3092 , - 69 , - 2614 , - 1511 , - 1368 , - 2185 , - 3962 , - 2091 , - 1180 , - 1229 , - 2238 , - 4207 , - 2528 , - 1809 , - 2050 , - 3251 , - 804 , - 3925 , - 3398 , - 3831 , - 616 , - 2969 , - 1674 , - 1339 , - 1964 , - 3549 , - 1486 , - 383 , - 240 , - 1057 , - 2834 , - 963 , - 52 , - 101 , - 1110 , - 3079 , - 1400 , - 681 , - 922 , - 2123 , - 4284 , - 2797 , - 2270 , - 2703 , - 4096 , - 1841 , - 546 , - 211 , - 836 , - 2421 , - 358 , - 3863 , - 3720 , - 4537 , - 1706 , - 4443 , - 3532 , - 3581 , - 4590 , - 1951 , - 272 , - 4161 , - 4402 , - 995 , - 3156 , - 1669 , - 1142 , - 1575 , - 2968 , - 713 , - 4026 , - 3691 , - 4316 , - 1293 , - 3838 , - 2735 , - 2592 , - 3409 , - 578 , - 3315 , - 2404 , - 2453 , - 3462 , - 823 , - 3752 , - 3033 , - 3274 , - 4475 , - 2028 , - 541 , - 14 , - 447 , - 1840 , - 4193 , - 2898 , - 2563 , - 3188 , - 165 , - 2710 , - 1607 , - 1464 , - 2281 , - 4058 , - 2187 , - 1276 , - 1325 , - 2334 , - 4303 , - 2624 , - 1905 , - 2146 , - 3347 , - 900 , - 4021 , - 3494 , - 3927 , - 712 , - 3065 , - 1770 , - 1435 , - 2060 , - 3645 , - 1582 , - 479 , - 336 , - 1153 , - 2930 , - 1059 , - 148 , - 197 , - 1206 , - 3175 , - 1496 , - 777 , - 1018 , - 2219 , - 4380 , - 2893 , - 2366 , - 2799 , - 4192 , - 1937 , - 642 , - 307 , - 932 , - 2517 , - 454 , - 3959 , - 3816 , - 25 , - 1802 , - 4539 , - 3628 , - 3677 , - 78 , - 2047 , - 368 , - 4257 , - 4498 , - 1091 , - 3252 , - 1765 , - 1238 , - 1671 , - 3064 , - 809 , - 4122 , - 3787 , - 4412 , - 1389 , - 3934 , - 2831 , - 2688 , - 3505 , - 674 , - 3411 , - 2500 , - 2549 , - 3558 , - 919 , - 3848 , - 3129 , - 3370 , - 4571 , - 2124 , - 637 , - 110 , - 543 , - 1936 , - 4289 , - 2994 , - 2659 , - 3284 , - 261 , - 2806 , - 1703 , - 1560 , - 2377 , - 4154 , - 2283 , - 1372 , - 1421 , - 2430 , - 4399 , - 2720 , - 2001 , - 2242 , - 3443 , - 996 , - 4117 , - 3590 , - 4023 , - 808 , - 3161 , - 1866 , - 1531 , - 2156 , - 3741 , - 1678 , - 575 , - 432 , - 1249 , - 3026 , - 1155 , - 244 , - 293 , - 1302 , - 3271 , - 1592 , - 873 , - 1114 , - 2315 , - 4476 , - 2989 , - 2462 , - 2895 , - 4288 , - 2033 , - 738 , - 403 , - 1028 , - 2613 , - 550 , - 4055 , - 3912 , - 121 , - 1898 , - 27 , - 3724 , - 3773 , - 174 , - 2143 , - 464 , - 4353 , - 4594 , - 1187 , - 3348 , - 1861 , - 1334 , - 1767 , - 3160 , - 905 , - 4218 , - 3883 , - 4508 , - 1485 , - 4030 , - 2927 , - 2784 , - 3601 , - 770 , - 3507 , - 2596 , - 2645 , - 3654 , - 1015 , - 3944 , - 3225 , - 3466 , - 59 , - 2220 , - 733 , - 206 , - 639 , - 2032 , - 4385 , - 3090 , - 2755 , - 3380 , - 357 , - 2902 , - 1799 , - 1656 , - 2473 , - 4250 , - 2379 , - 1468 , - 1517 , - 2526 , - 4495 , - 2816 , - 2097 , - 2338 , - 3539 , - 1092 , - 4213 , - 3686 , - 4119 , - 904 , - 3257 , - 1962 , - 1627 , - 2252 , - 3837 , - 1774 , - 671 , - 528 , - 1345 , - 3122 , - 1251 , - 340 , - 389 , - 1398 , - 3367 , - 1688 , - 969 , - 1210 , - 2411 , - 4572 , - 3085 , - 2558 , - 2991 , - 4384 , - 2129 , - 834 , - 499 , - 1124 , - 2709 , - 646 , - 4151 , - 4008 , - 217 , - 1994 , - 123 , - 3820 , - 3869 , - 270 , - 2239 , - 560 , - 4449 , - 82 , - 1283 , - 3444 , - 1957 , - 1430 , - 1863 , - 3256 , - 1001 , - 4314 , - 3979 , - 4604 , - 1581 , - 4126 , - 3023 , - 2880 , - 3697 , - 866 , - 3603 , - 2692 , - 2741 , - 3750 , - 1111 , - 4040 , - 3321 , - 3562 , - 155 , - 2316 , - 829 , - 302 , - 735 , - 2128 , - 4481 , - 3186 , - 2851 , - 3476 , - 453 , - 2998 , - 1895 , - 1752 , - 2569 , - 4346 , - 2475 , - 1564 , - 1613 , - 2622 , - 4591 , - 2912 , - 2193 , - 2434 , - 3635 , - 1188 , - 4309 , - 3782 , - 4215 , - 1000 , - 3353 , - 2058 , - 1723 , - 2348 , - 3933 , - 1870 , - 767 , - 624 , - 1441 , - 3218 , - 1347 , - 436 , - 485 , - 1494 , - 3463 , - 1784 , - 1065 , - 1306 , - 2507 , - 60 , - 3181 , - 2654 , - 3087 , - 4480 , - 2225 , - 930 , - 595 , - 1220 , - 2805 , - 742 , - 4247 , - 4104 , - 313 , - 2090 , - 219 , - 3916 , - 3965 , - 366 , - 2335 , - 656 , - 4545 , - 178 , - 1379 , - 3540 , - 2053 , - 1526 , - 1959 , - 3352 , - 1097 , - 4410 , - 4075 , - 92 , - 1677 , - 4222 , - 3119 , - 2976 , - 3793 , - 962 , - 3699 , - 2788 , - 2837 , - 3846 , - 1207 , - 4136 , - 3417 , - 3658 , - 251 , - 2412 , - 925 , - 398 , - 831 , - 2224 , - 4577 , - 3282 , - 2947 , - 3572 , - 549 , - 3094 , - 1991 , - 1848 , - 2665 , - 4442 , - 2571 , - 1660 , - 1709 , - 2718 , - 79 , - 3008 , - 2289 , - 2530 , - 3731 , - 1284 , - 4405 , - 3878 , - 4311 , - 1096 , - 3449 , - 2154 , - 1819 , - 2444 , - 4029 , - 1966 , - 863 , - 720 , - 1537 , - 3314 , - 1443 , - 532 , - 581 , - 1590 , - 3559 , - 1880 , - 1161 , - 1402 , - 2603 , - 156 , - 3277 , - 2750 , - 3183 , - 4576 , - 2321 , - 1026 , - 691 , - 1316 , - 2901 , - 838 , - 4343 , - 4200 , - 409 , - 2186 , - 315 , - 4012 , - 4061 , - 462 , - 2431 , - 752 , - 33 , - 274 , - 1475 , - 3636 , - 2149 , - 1622 , - 2055 , - 3448 , - 1193 , - 4506 , - 4171 , - 188 , - 1773 , - 4318 , - 3215 , - 3072 , - 3889 , - 1058 , - 3795 , - 2884 , - 2933 , - 3942 , - 1303 , - 4232 , - 3513 , - 3754 , - 347 , - 2508 , - 1021 , - 494 , - 927 , - 2320 , - 65 , - 3378 , - 3043 , - 3668 , - 645 , - 3190 , - 2087 , - 1944 , - 2761 , - 4538 , - 2667 , - 1756 , - 1805 , - 2814 , - 175 , - 3104 , - 2385 , - 2626 , - 3827 , - 1380 , - 4501 , - 3974 , - 4407 , - 1192 , - 3545 , - 2250 , - 1915 , - 2540 , - 4125 , - 2062 , - 959 , - 816 , - 1633 , - 3410 , - 1539 , - 628 , - 677 , - 1686 , - 3655 , - 1976 , - 1257 , - 1498 , - 2699 , - 252 , - 3373 , - 2846 , - 3279 , - 64 , - 2417 , - 1122 , - 787 , - 1412 , - 2997 , - 934 , - 4439 , - 4296 , - 505 , - 2282 , - 411 , - 4108 , - 4157 , - 558 , - 2527 , - 848 , - 129 , - 370 , - 1571 , - 3732 , - 2245 , - 1718 , - 2151 , - 3544 , - 1289 , - 4602 , - 4267 , - 284 , - 1869 , - 4414 , - 3311 , - 3168 , - 3985 , - 1154 , - 3891 , - 2980 , - 3029 , - 4038 , - 1399 , - 4328 , - 3609 , - 3850 , - 443 , - 2604 , - 1117 , - 590 , - 1023 , - 2416 , - 161 , - 3474 , - 3139 , - 3764 , - 741 , - 3286 , - 2183 , - 2040 , - 2857 , - 26 , - 2763 , - 1852 , - 1901 , - 2910 , - 271 , - 3200 , - 2481 , - 2722 , - 3923 , - 1476 , - 4597 , - 4070 , - 4503 , - 1288 , - 3641 , - 2346 , - 2011 , - 2636 , - 4221 , - 2158 , - 1055 , - 912 , - 1729 , - 3506 , - 1635 , - 724 , - 773 , - 1782 , - 3751 , - 2072 , - 1353 , - 1594 , - 2795 , - 348 , - 3469 , - 2942 , - 3375 , - 160 , - 2513 , - 1218 , - 883 , - 1508 , - 3093 , - 1030 , - 4535 , - 4392 , - 601 , - 2378 , - 507 , - 4204 , - 4253 , - 654 , - 2623 , - 944 , - 225 , - 466 , - 1667 , - 3828 , - 2341 , - 1814 , - 2247 , - 3640 , - 1385 , - 90 , - 4363 , - 380 , - 1965 , - 4510 , - 3407 , - 3264 , - 4081 , - 1250 , - 3987 , - 3076 , - 3125 , - 4134 , - 1495 , - 4424 , - 3705 , - 3946 , - 539 , - 2700 , - 1213 , - 686 , - 1119 , - 2512 , - 257 , - 3570 , - 3235 , - 3860 , - 837 , - 3382 , - 2279 , - 2136 , - 2953 , - 122 , - 2859 , - 1948 , - 1997 , - 3006 , - 367 , - 3296 , - 2577 , - 2818 , - 4019 , - 1572 , - 85 , - 4166 , - 4599 , - 1384 , - 3737 , - 2442 , - 2107 , - 2732 , - 4317 , - 2254 , - 1151 , - 1008 , - 1825 , - 3602 , - 1731 , - 820 , - 869 , - 1878 , - 3847 , - 2168 , - 1449 , - 1690 , - 2891 , - 444 , - 3565 , - 3038 , - 3471 , - 256 , - 2609 , - 1314 , - 979 , - 1604 , - 3189 , - 1126 , - 23 , - 4488 , - 697 , - 2474 , - 603 , - 4300 , - 4349 , - 750 , - 2719 , - 1040 , - 321 , - 562 , - 1763 , - 3924 , - 2437 , - 1910 , - 2343 , - 3736 , - 1481 , - 186 , - 4459 , - 476 , - 2061 , - 4606 , - 3503 , - 3360 , - 4177 , - 1346 , - 4083 , - 3172 , - 3221 , - 4230 , - 1591 , - 4520 , - 3801 , - 4042 , - 635 , - 2796 , - 1309 , - 782 , - 1215 , - 2608 , - 353 , - 3666 , - 3331 , - 3956 , - 933 , - 3478 , - 2375 , - 2232 , - 3049 , - 218 , - 2955 , - 2044 , - 2093 , - 3102 , - 463 , - 3392 , - 2673 , - 2914 , - 4115 , - 1668 , - 181 , - 4262 , - 87 , - 1480 , - 3833 , - 2538 , - 2203 , - 2828 , - 4413 , - 2350 , - 1247 , - 1104 , - 1921 , - 3698 , - 1827 , - 916 , - 965 , - 1974 , - 3943 , - 2264 , - 1545 , - 1786 , - 2987 , - 540 , - 3661 , - 3134 , - 3567 , - 352 , - 2705 , - 1410 , - 1075 , - 1700 , - 3285 , - 1222 , - 119 , - 4584 , - 793 , - 2570 , - 699 , - 4396 , - 4445 , - 846 , - 2815 , - 1136 , - 417 , - 658 , - 1859 , - 4020 , - 2533 , - 2006 , - 2439 , - 3832 , - 1577 , - 282 , - 4555 , - 572 , - 2157 , - 94 , - 3599 , - 3456 , - 4273 , - 1442 , - 4179 , - 3268 , - 3317 , - 4326 , - 1687 , - 8 , - 3897 , - 4138 , - 731 , - 2892 , - 1405 , - 878 , - 1311 , - 2704 , - 449 , - 3762 , - 3427 , - 4052 , - 1029 , - 3574 , - 2471 , - 2328 , - 3145 , - 314 , - 3051 , - 2140 , - 2189 , - 3198 , - 559 , - 3488 , - 2769 , - 3010 , - 4211 , - 1764 , - 277 , - 4358 , - 183 , - 1576 , - 3929 , - 2634 , - 2299 , - 2924 , - 4509 , - 2446 , - 1343 , - 1200 , - 2017 , - 3794 , - 1923 , - 1012 , - 1061 , - 2070 , - 4039 , - 2360 , - 1641 , - 1882 , - 3083 , - 636 , - 3757 , - 3230 , - 3663 , - 448 , - 2801 , - 1506 , - 1171 , - 1796 , - 3381 , - 1318 , - 215 , - 72 , - 889 , - 2666 , - 795 , - 4492 , - 4541 , - 942 , - 2911 , - 1232 , - 513 , - 754 , - 1955 , - 4116 , - 2629 , - 2102 , - 2535 , - 3928 , - 1673 , - 378 , - 43 , - 668 , - 2253 , - 190 , - 3695 , - 3552 , - 4369 , - 1538 , - 4275 , - 3364 , - 3413 , - 4422 , - 1783 , - 104 , - 3993 , - 4234 , - 827 , - 2988 , - 1501 , - 974 , - 1407 , - 2800 , - 545 , - 3858 , - 3523 , - 4148 , - 1125 , - 3670 , - 2567 , - 2424 , - 3241 , - 410 , - 3147 , - 2236 , - 2285 , - 3294 , - 655 , - 3584 , - 2865 , - 3106 , - 4307 , - 1860 , - 373 , - 4454 , - 279 , - 1672 , - 4025 , - 2730 , - 2395 , - 3020 , - 4605 , - 2542 , - 1439 , - 1296 , - 2113 , - 3890 , - 2019 , - 1108 , - 1157 , - 2166 , - 4135 , - 2456 , - 1737 , - 1978 , - 3179 , - 732 , - 3853 , - 3326 , - 3759 , - 544 , - 2897 , - 1602 , - 1267 , - 1892 , - 3477 , - 1414 , - 311 , - 168 , - 985 , - 2762 , - 891 , - 4588 , - 29 , - 1038 , - 3007 , - 1328 , - 609 , - 850 , - 2051 , - 4212 , - 2725 , - 2198 , - 2631 , - 4024 , - 1769 , - 474 , - 139 , - 764 , - 2349 , - 286 , - 3791 , - 3648 , - 4465 , - 1634 , - 4371 , - 3460 , - 3509 , - 4518 , - 1879 , - 200 , - 4089 , - 4330 , - 923 , - 3084 , - 1597 , - 1070 , - 1503 , - 2896 , - 641 , - 3954 , - 3619 , - 4244 , - 1221 , - 3766 , - 2663 , - 2520 , - 3337 , - 506 , - 3243 , - 2332 , - 2381 , - 3390 , - 751 , - 3680 , - 2961 , - 3202 , - 4403 , - 1956 , - 469 , - 4550 , - 375 , - 1768 , - 4121 , - 2826 , - 2491 , - 3116 , - 93 , - 2638 , - 1535 , - 1392 , - 2209 , - 3986 , - 2115 , - 1204 , - 1253 , - 2262 , - 4231 , - 2552 , - 1833 , - 2074 , - 3275 , - 828 , - 3949 , - 3422 , - 3855 , - 640 , - 2993 , - 1698 , - 1363 , - 1988 , - 3573 , - 1510 , - 407 , - 264 , - 1081 , - 2858 , - 987 , - 76 , - 125 , - 1134 , - 3103 , - 1424 , - 705 , - 946 , - 2147 , - 4308 , - 2821 , - 2294 , - 2727 , - 4120 , - 1865 , - 570 , - 235 , - 860 , - 2445 , - 382 , - 3887 , - 3744 , - 4561 , - 1730 , - 4467 , - 3556 , - 3605 , - 6 , - 1975 , - 296 , - 4185 , - 4426 , - 1019 , - 3180 , - 1693 , - 1166 , - 1599 , - 2992 , - 737 , - 4050 , - 3715 , - 4340 , - 1317 , - 3862 , - 2759 , - 2616 , - 3433 , - 602 , - 3339 , - 2428 , - 2477 , - 3486 , - 847 , - 3776 , - 3057 , - 3298 , - 4499 , - 2052 , - 565 , - 38 , - 471 , - 1864 , - 4217 , - 2922 , - 2587 , - 3212 , - 189 , - 2734 , - 1631 , - 1488 , - 2305 , - 4082 , - 2211 , - 1300 , - 1349 , - 2358 , - 4327 , - 2648 , - 1929 , - 2170 , - 3371 , - 924 , - 4045 , - 3518 , - 3951 , - 736 , - 3089 , - 1794 , - 1459 , - 2084 , - 3669 , - 1606 , - 503 , - 360 , - 1177 , - 2954 , - 1083 , - 172 , - 221 , - 1230 , - 3199 , - 1520 , - 801 , - 1042 , - 2243 , - 4404 , - 2917 , - 2390 , - 2823 , - 4216 , - 1961 , - 666 , - 331 , - 956 , - 2541 , - 478 , - 3983 , - 3840 , - 49 , - 1826 , - 4563 , - 3652 , - 3701 , - 102 , - 2071 , - 392 , - 4281 , - 4522 , - 1115 , - 3276 , - 1789 , - 1262 , - 1695 , - 3088 , - 833 , - 4146 , - 3811 , - 4436 , - 1413 , - 3958 , - 2855 , - 2712 , - 3529 , - 698 , - 3435 , - 2524 , - 2573 , - 3582 , - 943 , - 3872 , - 3153 , - 3394 , - 4595 , - 2148 , - 661 , - 134 , - 567 , - 1960 , - 4313 , - 3018 , - 2683 , - 3308 , - 285 , - 2830 , - 1727 , - 1584 , - 2401 , - 4178 , - 2307 , - 1396 , - 1445 , - 2454 , - 4423 , - 2744 , - 2025 , - 2266 , - 3467 , - 1020 , - 4141 , - 3614 , - 4047 , - 832 , - 3185 , - 1890 , - 1555 , - 2180 , - 3765 , - 1702 , - 599 , - 456 , - 1273 , - 3050 , - 1179 , - 268 , - 317 , - 1326 , - 3295 , - 1616 , - 897 , - 1138 , - 2339 , - 4500 , - 3013 , - 2486 , - 2919 , - 4312 , - 2057 , - 762 , - 427 , - 1052 , - 2637 , - 574 , - 4079 , - 3936 , - 145 , - 1922 , - 51 , - 3748 , - 3797 , - 198 , - 2167 , - 488 , - 4377 , - 10 , - 1211 , - 3372 , - 1885 , - 1358 , - 1791 , - 3184 , - 929 , - 4242 , - 3907 , - 4532 , - 1509 , - 4054 , - 2951 , - 2808 , - 3625 , - 794 , - 3531 , - 2620 , - 2669 , - 3678 , - 1039 , - 3968 , - 3249 , - 3490 , - 83 , - 2244 , - 757 , - 230 , - 663 , - 2056 , - 4409 , - 3114 , - 2779 , - 3404 , - 381 , - 2926 , - 1823 , - 1680 , - 2497 , - 4274 , - 2403 , - 1492 , - 1541 , - 2550 , - 4519 , - 2840 , - 2121 , - 2362 , - 3563 , - 1116 , - 4237 , - 3710 , - 4143 , - 928 , - 3281 , - 1986 , - 1651 , - 2276 , - 3861 , - 1798 , - 695 , - 552 , - 1369 , - 3146 , - 1275 , - 364 , - 413 , - 1422 , - 3391 , - 1712 , - 993 , - 1234 , - 2435 , - 4596 , - 3109 , - 2582 , - 3015 , - 4408 , - 2153 , - 858 , - 523 , - 1148 , - 2733 , - 670 , - 4175 , - 4032 , - 241 , - 2018 , - 147 , - 3844 , - 3893 , - 294 , - 2263 , - 584 , - 4473 , - 106 , - 1307 , - 3468 , - 1981 , - 1454 , - 1887 , - 3280 , - 1025 , - 4338 , - 4003 , - 20 , - 1605 , - 4150 , - 3047 , - 2904 , - 3721 , - 890 , - 3627 , - 2716 , - 2765 , - 3774 , - 1135 , - 4064 , - 3345 , - 3586 , - 179 , - 2340 , - 853 , - 326 , - 759 , - 2152 , - 4505 , - 3210 , - 2875 , - 3500 , - 477 , - 3022 , - 1919 , - 1776 , - 2593 , - 4370 , - 2499 , - 1588 , - 1637 , - 2646 , - 7 , - 2936 , - 2217 , - 2458 , - 3659 , - 1212 , - 4333 , - 3806 , - 4239 , - 1024 , - 3377 , - 2082 , - 1747 , - 2372 , - 3957 , - 1894 , - 791 , - 648 , - 1465 , - 3242 , - 1371 , - 460 , - 509 , - 1518 , - 3487 , - 1808 , - 1089 , - 1330 , - 2531 , - 84 , - 3205 , - 2678 , - 3111 , - 4504 , - 2249 , - 954 , - 619 , - 1244 , - 2829 , - 766 , - 4271 , - 4128 , - 337 , - 2114 , - 243 , - 3940 , - 3989 , - 390 , - 2359 , - 680 , - 4569 , - 202 , - 1403 , - 3564 , - 2077 , - 1550 , - 1983 , - 3376 , - 1121 , - 4434 , - 4099 , - 116 , - 1701 , - 4246 , - 3143 , - 3000 , - 3817 , - 986 , - 3723 , - 2812 , - 2861 , - 3870 , - 1231 , - 4160 , - 3441 , - 3682 , - 275 , - 2436 , - 949 , - 422 , - 855 , - 2248 , - 4601 , - 3306 , - 2971 , - 3596 , - 573 , - 3118 , - 2015 , - 1872 , - 2689 , - 4466 , - 2595 , - 1684 , - 1733 , - 2742 , - 103 , - 3032 , - 2313 , - 2554 , - 3755 , - 1308 , - 4429 , - 3902 , - 4335 , - 1120 , - 3473 , - 2178 , - 1843 , - 2468 , - 4053 , - 1990 , - 887 , - 744 , - 1561 , - 3338 , - 1467 , - 556 , - 605 , - 1614 , - 3583 , - 1904 , - 1185 , - 1426 , - 2627 , - 180 , - 3301 , - 2774 , - 3207 , - 4600 , - 2345 , - 1050 , - 715 , - 1340 , - 2925 , - 862 , - 4367 , - 4224 , - 433 , - 2210 , - 339 , - 4036 , - 4085 , - 486 , - 2455 , - 776 , - 57 , - 298 , - 1499 , - 3660 , - 2173 , - 1646 , - 2079 , - 3472 , - 1217 , - 4530 , - 4195 , - 212 , - 1797 , - 4342 , - 3239 , - 3096 , - 3913 , - 1082 , - 3819 , - 2908 , - 2957 , - 3966 , - 1327 , - 4256 , - 3537 , - 3778 , - 371 , - 2532 , - 1045 , - 518 , - 951 , - 2344 , - 89 , - 3402 , - 3067 , - 3692 , - 669 , - 3214 , - 2111 , - 1968 , - 2785 , - 4562 , - 2691 , - 1780 , - 1829 , - 2838 , - 199 , - 3128 , - 2409 , - 2650 , - 3851 , - 1404 , - 4525 , - 3998 , - 4431 , - 1216 , - 3569 , - 2274 , - 1939 , - 2564 , - 4149 , - 2086 , - 983 , - 840 , - 1657 , - 3434 , - 1563 , - 652 , - 701 , - 1710 , - 3679 , - 2000 , - 1281 , - 1522 , - 2723 , - 276 , - 3397 , - 2870 , - 3303 , - 88 , - 2441 , - 1146 , - 811 , - 1436 , - 3021 , - 958 , - 4463 , - 4320 , - 529 , - 2306 , - 435 , - 4132 , - 4181 , - 582 , - 2551 , - 872 , - 153 , - 394 , - 1595 , - 3756 , - 2269 , - 1742 , - 2175 , - 3568 , - 1313 , - 18 , - 4291 , - 308 , - 1893 , - 4438 , - 3335 , - 3192 , - 4009 , - 1178 , - 3915 , - 3004 , - 3053 , - 4062 , - 1423 , - 4352 , - 3633 , - 3874 , - 467 , - 2628 , - 1141 , - 614 , - 1047 , - 2440 , - 185 , - 3498 , - 3163 , - 3788 , - 765 , - 3310 , - 2207 , - 2064 , - 2881 , - 50 , - 2787 , - 1876 , - 1925 , - 2934 , - 295 , - 3224 , - 2505 , - 2746 , - 3947 , - 1500 , - 13 , - 4094 , - 4527 , - 1312 , - 3665 , - 2370 , - 2035 , - 2660 , - 4245 , - 2182 , - 1079 , - 936 , - 1753 , - 3530 , - 1659 , - 748 , - 797 , - 1806 , - 3775 , - 2096 , - 1377 , - 1618 , - 2819 , - 372 , - 3493 , - 2966 , - 3399 , - 184 , - 2537 , - 1242 , - 907 , - 1532 , - 3117 , - 1054 , - 4559 , - 4416 , - 625 , - 2402 , - 531 , - 4228 , - 4277 , - 678 , - 2647 , - 968 , - 249 , - 490 , - 1691 , - 3852 , - 2365 , - 1838 , - 2271 , - 3664 , - 1409 , - 114 , - 4387 , - 404 , - 1989 , - 4534 , - 3431 , - 3288 , - 4105 , - 1274 , - 4011 , - 3100 , - 3149 , - 4158 , - 1519 , - 4448 , - 3729 , - 3970 , - 563 , - 2724 , - 1237 , - 710 , - 1143 , - 2536 , - 281 , - 3594 , - 3259 , - 3884 , - 861 , - 3406 , - 2303 , - 2160 , - 2977 , - 146 , - 2883 , - 1972 , - 2021 , - 3030 , - 391 , - 3320 , - 2601 , - 2842 , - 4043 , - 1596 , - 109 , - 4190 , - 15 , - 1408 , - 3761 , - 2466 , - 2131 , - 2756 , - 4341 , - 2278 , - 1175 , - 1032 , - 1849 , - 3626 , - 1755 , - 844 , - 893 , - 1902 , - 3871 , - 2192 , - 1473 , - 1714 , - 2915 , - 468 , - 3589 , - 3062 , - 3495 , - 280 , - 2633 , - 1338 , - 1003 , - 1628 , - 3213 , - 1150 , - 47 , - 4512 , - 721 , - 2498 , - 627 , - 4324 , - 4373 , - 774 , - 2743 , - 1064 , - 345 , - 586 , - 1787 , - 3948 , - 2461 , - 1934 , - 2367 , - 3760 , - 1505 , - 210 , - 4483 , - 500 , - 2085 , - 22 , - 3527 , - 3384 , - 4201 , - 1370 , - 4107 , - 3196 , - 3245 , - 4254 , - 1615 , - 4544 , - 3825 , - 4066 , - 659 , - 2820 , - 1333 , - 806 , - 1239 , - 2632 , - 377 , - 3690 , - 3355 , - 3980 , - 957 , - 3502 , - 2399 , - 2256 , - 3073 , - 242 , - 2979 , - 2068 , - 2117 , - 3126 , - 487 , - 3416 , - 2697 , - 2938 , - 4139 , - 1692 , - 205 , - 4286 , - 111 , - 1504 , - 3857 , - 2562 , - 2227 , - 2852 , - 4437 , - 2374 , - 1271 , - 1128 , - 1945 , - 3722 , - 1851 , - 940 , - 989 , - 1998 , - 3967 , - 2288 , - 1569 , - 1810 , - 3011 , - 564 , - 3685 , - 3158 , - 3591 , - 376 , - 2729 , - 1434 , - 1099 , - 1724 , - 3309 , - 1246 , - 143 , - 0 , - 183 , - 658 , - 1425 , - 2484 , - 3835 , - 806 , - 2741 , - 296 , - 2815 , - 954 , - 4057 , - 2780 , - 1795 , - 1102 , - 701 , - 592 , - 775 , - 1250 , - 2017 , - 3076 , - 4427 , - 1398 , - 3333 , - 888 , - 3407 , - 1546 , - 4649 , - 3372 , - 2387 , - 1694 , - 1293 , - 1184 , - 1367 , - 1842 , - 2609 , - 3668 , - 347 , - 1990 , - 3925 , - 1480 , - 3999 , - 2138 , - 569 , - 3964 , - 2979 , - 2286 , - 1885 , - 1776 , - 1959 , - 2434 , - 3201 , - 4260 , - 939 , - 2582 , - 4517 , - 2072 , - 4591 , - 2730 , - 1161 , - 4556 , - 3571 , - 2878 , - 2477 , - 2368 , - 2551 , - 3026 , - 3793 , - 180 , - 1531 , - 3174 , - 437 , - 2664 , - 511 , - 3322 , - 1753 , - 476 , - 4163 , - 3470 , - 3069 , - 2960 , - 3143 , - 3618 , - 4385 , - 772 , - 2123 , - 3766 , - 1029 , - 3256 , - 1103 , - 3914 , - 2345 , - 1068 , - 83 , - 4062 , - 3661 , - 3552 , - 3735 , - 4210 , - 305 , - 1364 , - 2715 , - 4358 , - 1621 , - 3848 , - 1695 , - 4506 , - 2937 , - 1660 , - 675 , - 4654 , - 4253 , - 4144 , - 4327 , - 130 , - 897 , - 1956 , - 3307 , - 278 , - 2213 , - 4440 , - 2287 , - 426 , - 3529 , - 2252 , - 1267 , - 574 , - 173 , - 64 , - 247 , - 722 , - 1489 , - 2548 , - 3899 , - 870 , - 2805 , - 360 , - 2879 , - 1018 , - 4121 , - 2844 , - 1859 , - 1166 , - 765 , - 656 , - 839 , - 1314 , - 2081 , - 3140 , - 4491 , - 1462 , - 3397 , - 952 , - 3471 , - 1610 , - 41 , - 3436 , - 2451 , - 1758 , - 1357 , - 1248 , - 1431 , - 1906 , - 2673 , - 3732 , - 411 , - 2054 , - 3989 , - 1544 , - 4063 , - 2202 , - 633 , - 4028 , - 3043 , - 2350 , - 1949 , - 1840 , - 2023 , - 2498 , - 3265 , - 4324 , - 1003 , - 2646 , - 4581 , - 2136 , - 4655 , - 2794 , - 1225 , - 4620 , - 3635 , - 2942 , - 2541 , - 2432 , - 2615 , - 3090 , - 3857 , - 244 , - 1595 , - 3238 , - 501 , - 2728 , - 575 , - 3386 , - 1817 , - 540 , - 4227 , - 3534 , - 3133 , - 3024 , - 3207 , - 3682 , - 4449 , - 836 , - 2187 , - 3830 , - 1093 , - 3320 , - 1167 , - 3978 , - 2409 , - 1132 , - 147 , - 4126 , - 3725 , - 3616 , - 3799 , - 4274 , - 369 , - 1428 , - 2779 , - 4422 , - 1685 , - 3912 , - 1759 , - 4570 , - 3001 , - 1724 , - 739 , - 46 , - 4317 , - 4208 , - 4391 , - 194 , - 961 , - 2020 , - 3371 , - 342 , - 2277 , - 4504 , - 2351 , - 490 , - 3593 , - 2316 , - 1331 , - 638 , - 237 , - 128 , - 311 , - 786 , - 1553 , - 2612 , - 3963 , - 934 , - 2869 , - 424 , - 2943 , - 1082 , - 4185 , - 2908 , - 1923 , - 1230 , - 829 , - 720 , - 903 , - 1378 , - 2145 , - 3204 , - 4555 , - 1526 , - 3461 , - 1016 , - 3535 , - 1674 , - 105 , - 3500 , - 2515 , - 1822 , - 1421 , - 1312 , - 1495 , - 1970 , - 2737 , - 3796 , - 475 , - 2118 , - 4053 , - 1608 , - 4127 , - 2266 , - 697 , - 4092 , - 3107 , - 2414 , - 2013 , - 1904 , - 2087 , - 2562 , - 3329 , - 4388 , - 1067 , - 2710 , - 4645 , - 2200 , - 47 , - 2858 , - 1289 , - 12 , - 3699 , - 3006 , - 2605 , - 2496 , - 2679 , - 3154 , - 3921 , - 308 , - 1659 , - 3302 , - 565 , - 2792 , - 639 , - 3450 , - 1881 , - 604 , - 4291 , - 3598 , - 3197 , - 3088 , - 3271 , - 3746 , - 4513 , - 900 , - 2251 , - 3894 , - 1157 , - 3384 , - 1231 , - 4042 , - 2473 , - 1196 , - 211 , - 4190 , - 3789 , - 3680 , - 3863 , - 4338 , - 433 , - 1492 , - 2843 , - 4486 , - 1749 , - 3976 , - 1823 , - 4634 , - 3065 , - 1788 , - 803 , - 110 , - 4381 , - 4272 , - 4455 , - 258 , - 1025 , - 2084 , - 3435 , - 406 , - 2341 , - 4568 , - 2415 , - 554 , - 3657 , - 2380 , - 1395 , - 702 , - 301 , - 192 , - 375 , - 850 , - 1617 , - 2676 , - 4027 , - 998 , - 2933 , - 488 , - 3007 , - 1146 , - 4249 , - 2972 , - 1987 , - 1294 , - 893 , - 784 , - 967 , - 1442 , - 2209 , - 3268 , - 4619 , - 1590 , - 3525 , - 1080 , - 3599 , - 1738 , - 169 , - 3564 , - 2579 , - 1886 , - 1485 , - 1376 , - 1559 , - 2034 , - 2801 , - 3860 , - 539 , - 2182 , - 4117 , - 1672 , - 4191 , - 2330 , - 761 , - 4156 , - 3171 , - 2478 , - 2077 , - 1968 , - 2151 , - 2626 , - 3393 , - 4452 , - 1131 , - 2774 , - 37 , - 2264 , - 111 , - 2922 , - 1353 , - 76 , - 3763 , - 3070 , - 2669 , - 2560 , - 2743 , - 3218 , - 3985 , - 372 , - 1723 , - 3366 , - 629 , - 2856 , - 703 , - 3514 , - 1945 , - 668 , - 4355 , - 3662 , - 3261 , - 3152 , - 3335 , - 3810 , - 4577 , - 964 , - 2315 , - 3958 , - 1221 , - 3448 , - 1295 , - 4106 , - 2537 , - 1260 , - 275 , - 4254 , - 3853 , - 3744 , - 3927 , - 4402 , - 497 , - 1556 , - 2907 , - 4550 , - 1813 , - 4040 , - 1887 , - 26 , - 3129 , - 1852 , - 867 , - 174 , - 4445 , - 4336 , - 4519 , - 322 , - 1089 , - 2148 , - 3499 , - 470 , - 2405 , - 4632 , - 2479 , - 618 , - 3721 , - 2444 , - 1459 , - 766 , - 365 , - 256 , - 439 , - 914 , - 1681 , - 2740 , - 4091 , - 1062 , - 2997 , - 552 , - 3071 , - 1210 , - 4313 , - 3036 , - 2051 , - 1358 , - 957 , - 848 , - 1031 , - 1506 , - 2273 , - 3332 , - 11 , - 1654 , - 3589 , - 1144 , - 3663 , - 1802 , - 233 , - 3628 , - 2643 , - 1950 , - 1549 , - 1440 , - 1623 , - 2098 , - 2865 , - 3924 , - 603 , - 2246 , - 4181 , - 1736 , - 4255 , - 2394 , - 825 , - 4220 , - 3235 , - 2542 , - 2141 , - 2032 , - 2215 , - 2690 , - 3457 , - 4516 , - 1195 , - 2838 , - 101 , - 2328 , - 175 , - 2986 , - 1417 , - 140 , - 3827 , - 3134 , - 2733 , - 2624 , - 2807 , - 3282 , - 4049 , - 436 , - 1787 , - 3430 , - 693 , - 2920 , - 767 , - 3578 , - 2009 , - 732 , - 4419 , - 3726 , - 3325 , - 3216 , - 3399 , - 3874 , - 4641 , - 1028 , - 2379 , - 4022 , - 1285 , - 3512 , - 1359 , - 4170 , - 2601 , - 1324 , - 339 , - 4318 , - 3917 , - 3808 , - 3991 , - 4466 , - 561 , - 1620 , - 2971 , - 4614 , - 1877 , - 4104 , - 1951 , - 90 , - 3193 , - 1916 , - 931 , - 238 , - 4509 , - 4400 , - 4583 , - 386 , - 1153 , - 2212 , - 3563 , - 534 , - 2469 , - 24 , - 2543 , - 682 , - 3785 , - 2508 , - 1523 , - 830 , - 429 , - 320 , - 503 , - 978 , - 1745 , - 2804 , - 4155 , - 1126 , - 3061 , - 616 , - 3135 , - 1274 , - 4377 , - 3100 , - 2115 , - 1422 , - 1021 , - 912 , - 1095 , - 1570 , - 2337 , - 3396 , - 75 , - 1718 , - 3653 , - 1208 , - 3727 , - 1866 , - 297 , - 3692 , - 2707 , - 2014 , - 1613 , - 1504 , - 1687 , - 2162 , - 2929 , - 3988 , - 667 , - 2310 , - 4245 , - 1800 , - 4319 , - 2458 , - 889 , - 4284 , - 3299 , - 2606 , - 2205 , - 2096 , - 2279 , - 2754 , - 3521 , - 4580 , - 1259 , - 2902 , - 165 , - 2392 , - 239 , - 3050 , - 1481 , - 204 , - 3891 , - 3198 , - 2797 , - 2688 , - 2871 , - 3346 , - 4113 , - 500 , - 1851 , - 3494 , - 757 , - 2984 , - 831 , - 3642 , - 2073 , - 796 , - 4483 , - 3790 , - 3389 , - 3280 , - 3463 , - 3938 , - 33 , - 1092 , - 2443 , - 4086 , - 1349 , - 3576 , - 1423 , - 4234 , - 2665 , - 1388 , - 403 , - 4382 , - 3981 , - 3872 , - 4055 , - 4530 , - 625 , - 1684 , - 3035 , - 6 , - 1941 , - 4168 , - 2015 , - 154 , - 3257 , - 1980 , - 995 , - 302 , - 4573 , - 4464 , - 4647 , - 450 , - 1217 , - 2276 , - 3627 , - 598 , - 2533 , - 88 , - 2607 , - 746 , - 3849 , - 2572 , - 1587 , - 894 , - 493 , - 384 , - 567 , - 1042 , - 1809 , - 2868 , - 4219 , - 1190 , - 3125 , - 680 , - 3199 , - 1338 , - 4441 , - 3164 , - 2179 , - 1486 , - 1085 , - 976 , - 1159 , - 1634 , - 2401 , - 3460 , - 139 , - 1782 , - 3717 , - 1272 , - 3791 , - 1930 , - 361 , - 3756 , - 2771 , - 2078 , - 1677 , - 1568 , - 1751 , - 2226 , - 2993 , - 4052 , - 731 , - 2374 , - 4309 , - 1864 , - 4383 , - 2522 , - 953 , - 4348 , - 3363 , - 2670 , - 2269 , - 2160 , - 2343 , - 2818 , - 3585 , - 4644 , - 1323 , - 2966 , - 229 , - 2456 , - 303 , - 3114 , - 1545 , - 268 , - 3955 , - 3262 , - 2861 , - 2752 , - 2935 , - 3410 , - 4177 , - 564 , - 1915 , - 3558 , - 821 , - 3048 , - 895 , - 3706 , - 2137 , - 860 , - 4547 , - 3854 , - 3453 , - 3344 , - 3527 , - 4002 , - 97 , - 1156 , - 2507 , - 4150 , - 1413 , - 3640 , - 1487 , - 4298 , - 2729 , - 1452 , - 467 , - 4446 , - 4045 , - 3936 , - 4119 , - 4594 , - 689 , - 1748 , - 3099 , - 70 , - 2005 , - 4232 , - 2079 , - 218 , - 3321 , - 2044 , - 1059 , - 366 , - 4637 , - 4528 , - 39 , - 514 , - 1281 , - 2340 , - 3691 , - 662 , - 2597 , - 152 , - 2671 , - 810 , - 3913 , - 2636 , - 1651 , - 958 , - 557 , - 448 , - 631 , - 1106 , - 1873 , - 2932 , - 4283 , - 1254 , - 3189 , - 744 , - 3263 , - 1402 , - 4505 , - 3228 , - 2243 , - 1550 , - 1149 , - 1040 , - 1223 , - 1698 , - 2465 , - 3524 , - 203 , - 1846 , - 3781 , - 1336 , - 3855 , - 1994 , - 425 , - 3820 , - 2835 , - 2142 , - 1741 , - 1632 , - 1815 , - 2290 , - 3057 , - 4116 , - 795 , - 2438 , - 4373 , - 1928 , - 4447 , - 2586 , - 1017 , - 4412 , - 3427 , - 2734 , - 2333 , - 2224 , - 2407 , - 2882 , - 3649 , - 36 , - 1387 , - 3030 , - 293 , - 2520 , - 367 , - 3178 , - 1609 , - 332 , - 4019 , - 3326 , - 2925 , - 2816 , - 2999 , - 3474 , - 4241 , - 628 , - 1979 , - 3622 , - 885 , - 3112 , - 959 , - 3770 , - 2201 , - 924 , - 4611 , - 3918 , - 3517 , - 3408 , - 3591 , - 4066 , - 161 , - 1220 , - 2571 , - 4214 , - 1477 , - 3704 , - 1551 , - 4362 , - 2793 , - 1516 , - 531 , - 4510 , - 4109 , - 4000 , - 4183 , - 4658 , - 753 , - 1812 , - 3163 , - 134 , - 2069 , - 4296 , - 2143 , - 282 , - 3385 , - 2108 , - 1123 , - 430 , - 29 , - 4592 , - 103 , - 578 , - 1345 , - 2404 , - 3755 , - 726 , - 2661 , - 216 , - 2735 , - 874 , - 3977 , - 2700 , - 1715 , - 1022 , - 621 , - 512 , - 695 , - 1170 , - 1937 , - 2996 , - 4347 , - 1318 , - 3253 , - 808 , - 3327 , - 1466 , - 4569 , - 3292 , - 2307 , - 1614 , - 1213 , - 1104 , - 1287 , - 1762 , - 2529 , - 3588 , - 267 , - 1910 , - 3845 , - 1400 , - 3919 , - 2058 , - 489 , - 3884 , - 2899 , - 2206 , - 1805 , - 1696 , - 1879 , - 2354 , - 3121 , - 4180 , - 859 , - 2502 , - 4437 , - 1992 , - 4511 , - 2650 , - 1081 , - 4476 , - 3491 , - 2798 , - 2397 , - 2288 , - 2471 , - 2946 , - 3713 , - 100 , - 1451 , - 3094 , - 357 , - 2584 , - 431 , - 3242 , - 1673 , - 396 , - 4083 , - 3390 , - 2989 , - 2880 , - 3063 , - 3538 , - 4305 , - 692 , - 2043 , - 3686 , - 949 , - 3176 , - 1023 , - 3834 , - 2265 , - 988 , - 3 , - 3982 , - 3581 , - 3472 , - 3655 , - 4130 , - 225 , - 1284 , - 2635 , - 4278 , - 1541 , - 3768 , - 1615 , - 4426 , - 2857 , - 1580 , - 595 , - 4574 , - 4173 , - 4064 , - 4247 , - 50 , - 817 , - 1876 , - 3227 , - 198 , - 2133 , - 4360 , - 2207 , - 346 , - 3449 , - 2172 , - 1187 , - 494 , - 93 , - 4656 , - 167 , - 642 , - 1409 , - 2468 , - 3819 , - 790 , - 2725 , - 280 , - 2799 , - 938 , - 4041 , - 2764 , - 1779 , - 1086 , - 685 , - 576 , - 759 , - 1234 , - 2001 , - 3060 , - 4411 , - 1382 , - 3317 , - 872 , - 3391 , - 1530 , - 4633 , - 3356 , - 2371 , - 1678 , - 1277 , - 1168 , - 1351 , - 1826 , - 2593 , - 3652 , - 331 , - 1974 , - 3909 , - 1464 , - 3983 , - 2122 , - 553 , - 3948 , - 2963 , - 2270 , - 1869 , - 1760 , - 1943 , - 2418 , - 3185 , - 4244 , - 923 , - 2566 , - 4501 , - 2056 , - 4575 , - 2714 , - 1145 , - 4540 , - 3555 , - 2862 , - 2461 , - 2352 , - 2535 , - 3010 , - 3777 , - 164 , - 1515 , - 3158 , - 421 , - 2648 , - 495 , - 3306 , - 1737 , - 460 , - 4147 , - 3454 , - 3053 , - 2944 , - 3127 , - 3602 , - 4369 , - 756 , - 2107 , - 3750 , - 1013 , - 3240 , - 1087 , - 3898 , - 2329 , - 1052 , - 67 , - 4046 , - 3645 , - 3536 , - 3719 , - 4194 , - 289 , - 1348 , - 2699 , - 4342 , - 1605 , - 3832 , - 1679 , - 4490 , - 2921 , - 1644 , - 659 , - 4638 , - 4237 , - 4128 , - 4311 , - 114 , - 881 , - 1940 , - 3291 , - 262 , - 2197 , - 4424 , - 2271 , - 410 , - 3513 , - 2236 , - 1251 , - 558 , - 157 , - 48 , - 231 , - 706 , - 1473 , - 2532 , - 3883 , - 854 , - 2789 , - 344 , - 2863 , - 1002 , - 4105 , - 2828 , - 1843 , - 1150 , - 749 , - 640 , - 823 , - 1298 , - 2065 , - 3124 , - 4475 , - 1446 , - 3381 , - 936 , - 3455 , - 1594 , - 25 , - 3420 , - 2435 , - 1742 , - 1341 , - 1232 , - 1415 , - 1890 , - 2657 , - 3716 , - 395 , - 2038 , - 3973 , - 1528 , - 4047 , - 2186 , - 617 , - 4012 , - 3027 , - 2334 , - 1933 , - 1824 , - 2007 , - 2482 , - 3249 , - 4308 , - 987 , - 2630 , - 4565 , - 2120 , - 4639 , - 2778 , - 1209 , - 4604 , - 3619 , - 2926 , - 2525 , - 2416 , - 2599 , - 3074 , - 3841 , - 228 , - 1579 , - 3222 , - 485 , - 2712 , - 559 , - 3370 , - 1801 , - 524 , - 4211 , - 3518 , - 3117 , - 3008 , - 3191 , - 3666 , - 4433 , - 820 , - 2171 , - 3814 , - 1077 , - 3304 , - 1151 , - 3962 , - 2393 , - 1116 , - 131 , - 4110 , - 3709 , - 3600 , - 3783 , - 4258 , - 353 , - 1412 , - 2763 , - 4406 , - 1669 , - 3896 , - 1743 , - 4554 , - 2985 , - 1708 , - 723 , - 30 , - 4301 , - 4192 , - 4375 , - 178 , - 945 , - 2004 , - 3355 , - 326 , - 2261 , - 4488 , - 2335 , - 474 , - 3577 , - 2300 , - 1315 , - 622 , - 221 , - 112 , - 295 , - 770 , - 1537 , - 2596 , - 3947 , - 918 , - 2853 , - 408 , - 2927 , - 1066 , - 4169 , - 2892 , - 1907 , - 1214 , - 813 , - 704 , - 887 , - 1362 , - 2129 , - 3188 , - 4539 , - 1510 , - 3445 , - 1000 , - 3519 , - 1658 , - 89 , - 3484 , - 2499 , - 1806 , - 1405 , - 1296 , - 1479 , - 1954 , - 2721 , - 3780 , - 459 , - 2102 , - 4037 , - 1592 , - 4111 , - 2250 , - 681 , - 4076 , - 3091 , - 2398 , - 1997 , - 1888 , - 2071 , - 2546 , - 3313 , - 4372 , - 1051 , - 2694 , - 4629 , - 2184 , - 31 , - 2842 , - 1273 , - 4668 , - 3683 , - 2990 , - 2589 , - 2480 , - 2663 , - 3138 , - 3905 , - 292 , - 1643 , - 3286 , - 549 , - 2776 , - 623 , - 3434 , - 1865 , - 588 , - 4275 , - 3582 , - 3181 , - 3072 , - 3255 , - 3730 , - 4497 , - 884 , - 2235 , - 3878 , - 1141 , - 3368 , - 1215 , - 4026 , - 2457 , - 1180 , - 195 , - 4174 , - 3773 , - 3664 , - 3847 , - 4322 , - 417 , - 1476 , - 2827 , - 4470 , - 1733 , - 3960 , - 1807 , - 4618 , - 3049 , - 1772 , - 787 , - 94 , - 4365 , - 4256 , - 4439 , - 242 , - 1009 , - 2068 , - 3419 , - 390 , - 2325 , - 4552 , - 2399 , - 538 , - 3641 , - 2364 , - 1379 , - 686 , - 285 , - 176 , - 359 , - 834 , - 1601 , - 2660 , - 4011 , - 982 , - 2917 , - 472 , - 2991 , - 1130 , - 4233 , - 2956 , - 1971 , - 1278 , - 877 , - 768 , - 951 , - 1426 , - 2193 , - 3252 , - 4603 , - 1574 , - 3509 , - 1064 , - 3583 , - 1722 , - 153 , - 3548 , - 2563 , - 1870 , - 1469 , - 1360 , - 1543 , - 2018 , - 2785 , - 3844 , - 523 , - 2166 , - 4101 , - 1656 , - 4175 , - 2314 , - 745 , - 4140 , - 3155 , - 2462 , - 2061 , - 1952 , - 2135 , - 2610 , - 3377 , - 4436 , - 1115 , - 2758 , - 21 , - 2248 , - 95 , - 2906 , - 1337 , - 60 , - 3747 , - 3054 , - 2653 , - 2544 , - 2727 , - 3202 , - 3969 , - 356 , - 1707 , - 3350 , - 613 , - 2840 , - 687 , - 3498 , - 1929 , - 652 , - 4339 , - 3646 , - 3245 , - 3136 , - 3319 , - 3794 , - 4561 , - 948 , - 2299 , - 3942 , - 1205 , - 3432 , - 1279 , - 4090 , - 2521 , - 1244 , - 259 , - 4238 , - 3837 , - 3728 , - 3911 , - 4386 , - 481 , - 1540 , - 2891 , - 4534 , - 1797 , - 4024 , - 1871 , - 10 , - 3113 , - 1836 , - 851 , - 158 , - 4429 , - 4320 , - 4503 , - 306 , - 1073 , - 2132 , - 3483 , - 454 , - 2389 , - 4616 , - 2463 , - 602 , - 3705 , - 2428 , - 1443 , - 750 , - 349 , - 240 , - 423 , - 898 , - 1665 , - 2724 , - 4075 , - 1046 , - 2981 , - 536 , - 3055 , - 1194 , - 4297 , - 3020 , - 2035 , - 1342 , - 941 , - 832 , - 1015 , - 1490 , - 2257 , - 3316 , - 4667 , - 1638 , - 3573 , - 1128 , - 3647 , - 1786 , - 217 , - 3612 , - 2627 , - 1934 , - 1533 , - 1424 , - 1607 , - 2082 , - 2849 , - 3908 , - 587 , - 2230 , - 4165 , - 1720 , - 4239 , - 2378 , - 809 , - 4204 , - 3219 , - 2526 , - 2125 , - 2016 , - 2199 , - 2674 , - 3441 , - 4500 , - 1179 , - 2822 , - 85 , - 2312 , - 159 , - 2970 , - 1401 , - 124 , - 3811 , - 3118 , - 2717 , - 2608 , - 2791 , - 3266 , - 4033 , - 420 , - 1771 , - 3414 , - 677 , - 2904 , - 751 , - 3562 , - 1993 , - 716 , - 4403 , - 3710 , - 3309 , - 3200 , - 3383 , - 3858 , - 4625 , - 1012 , - 2363 , - 4006 , - 1269 , - 3496 , - 1343 , - 4154 , - 2585 , - 1308 , - 323 , - 4302 , - 3901 , - 3792 , - 3975 , - 4450 , - 545 , - 1604 , - 2955 , - 4598 , - 1861 , - 4088 , - 1935 , - 74 , - 3177 , - 1900 , - 915 , - 222 , - 4493 , - 4384 , - 4567 , - 370 , - 1137 , - 2196 , - 3547 , - 518 , - 2453 , - 8 , - 2527 , - 666 , - 3769 , - 2492 , - 1507 , - 814 , - 413 , - 304 , - 487 , - 962 , - 1729 , - 2788 , - 4139 , - 1110 , - 3045 , - 600 , - 3119 , - 1258 , - 4361 , - 3084 , - 2099 , - 1406 , - 1005 , - 896 , - 1079 , - 1554 , - 2321 , - 3380 , - 59 , - 1702 , - 3637 , - 1192 , - 3711 , - 1850 , - 281 , - 3676 , - 2691 , - 1998 , - 1597 , - 1488 , - 1671 , - 2146 , - 2913 , - 3972 , - 651 , - 2294 , - 4229 , - 1784 , - 4303 , - 2442 , - 873 , - 4268 , - 3283 , - 2590 , - 2189 , - 2080 , - 2263 , - 2738 , - 3505 , - 4564 , - 1243 , - 2886 , - 149 , - 2376 , - 223 , - 3034 , - 1465 , - 188 , - 3875 , - 3182 , - 2781 , - 2672 , - 2855 , - 3330 , - 4097 , - 484 , - 1835 , - 3478 , - 741 , - 2968 , - 815 , - 3626 , - 2057 , - 780 , - 4467 , - 3774 , - 3373 , - 3264 , - 3447 , - 3922 , - 17 , - 1076 , - 2427 , - 4070 , - 1333 , - 3560 , - 1407 , - 4218 , - 2649 , - 1372 , - 387 , - 4366 , - 3965 , - 3856 , - 4039 , - 4514 , - 609 , - 1668 , - 3019 , - 4662 , - 1925 , - 4152 , - 1999 , - 138 , - 3241 , - 1964 , - 979 , - 286 , - 4557 , - 4448 , - 4631 , - 434 , - 1201 , - 2260 , - 3611 , - 582 , - 2517 , - 72 , - 2591 , - 730 , - 3833 , - 2556 , - 1571 , - 878 , - 477 , - 368 , - 551 , - 1026 , - 1793 , - 2852 , - 4203 , - 1174 , - 3109 , - 664 , - 3183 , - 1322 , - 4425 , - 3148 , - 2163 , - 1470 , - 1069 , - 960 , - 1143 , - 1618 , - 2385 , - 3444 , - 123 , - 1766 , - 3701 , - 1256 , - 3775 , - 1914 , - 345 , - 3740 , - 2755 , - 2062 , - 1661 , - 1552 , - 1735 , - 2210 , - 2977 , - 4036 , - 715 , - 2358 , - 4293 , - 1848 , - 4367 , - 2506 , - 937 , - 4332 , - 3347 , - 2654 , - 2253 , - 2144 , - 2327 , - 2802 , - 3569 , - 4628 , - 1307 , - 2950 , - 213 , - 2440 , - 287 , - 3098 , - 1529 , - 252 , - 3939 , - 3246 , - 2845 , - 2736 , - 2919 , - 3394 , - 4161 , - 548 , - 1899 , - 3542 , - 805 , - 3032 , - 879 , - 3690 , - 2121 , - 844 , - 4531 , - 3838 , - 3437 , - 3328 , - 3511 , - 3986 , - 81 , - 1140 , - 2491 , - 4134 , - 1397 , - 3624 , - 1471 , - 4282 , - 2713 , - 1436 , - 451 , - 4430 , - 4029 , - 3920 , - 4103 , - 4578 , - 673 , - 1732 , - 3083 , - 54 , - 1989 , - 4216 , - 2063 , - 202 , - 3305 , - 2028 , - 1043 , - 350 , - 4621 , - 4512 , - 23 , - 498 , - 1265 , - 2324 , - 3675 , - 646 , - 2581 , - 136 , - 2655 , - 794 , - 3897 , - 2620 , - 1635 , - 942 , - 541 , - 432 , - 615 , - 1090 , - 1857 , - 2916 , - 4267 , - 1238 , - 3173 , - 728 , - 3247 , - 1386 , - 4489 , - 3212 , - 2227 , - 1534 , - 1133 , - 1024 , - 1207 , - 1682 , - 2449 , - 3508 , - 187 , - 1830 , - 3765 , - 1320 , - 3839 , - 1978 , - 409 , - 3804 , - 2819 , - 2126 , - 1725 , - 1616 , - 1799 , - 2274 , - 3041 , - 4100 , - 779 , - 2422 , - 4357 , - 1912 , - 4431 , - 2570 , - 1001 , - 4396 , - 3411 , - 2718 , - 2317 , - 2208 , - 2391 , - 2866 , - 3633 , - 20 , - 1371 , - 3014 , - 277 , - 2504 , - 351 , - 3162 , - 1593 , - 316 , - 4003 , - 3310 , - 2909 , - 2800 , - 2983 , - 3458 , - 4225 , - 612 , - 1963 , - 3606 , - 869 , - 3096 , - 943 , - 3754 , - 2185 , - 908 , - 4595 , - 3902 , - 3501 , - 3392 , - 3575 , - 4050 , - 145 , - 1204 , - 2555 , - 4198 , - 1461 , - 3688 , - 1535 , - 4346 , - 2777 , - 1500 , - 515 , - 4494 , - 4093 , - 3984 , - 4167 , - 4642 , - 737 , - 1796 , - 3147 , - 118 , - 2053 , - 4280 , - 2127 , - 266 , - 3369 , - 2092 , - 1107 , - 414 , - 13 , - 4576 , - 87 , - 562 , - 1329 , - 2388 , - 3739 , - 710 , - 2645 , - 200 , - 2719 , - 858 , - 3961 , - 2684 , - 1699 , - 1006 , - 605 , - 496 , - 679 , - 1154 , - 1921 , - 2980 , - 4331 , - 1302 , - 3237 , - 792 , - 3311 , - 1450 , - 4553 , - 3276 , - 2291 , - 1598 , - 1197 , - 1088 , - 1271 , - 1746 , - 2513 , - 3572 , - 251 , - 1894 , - 3829 , - 1384 , - 3903 , - 2042 , - 473 , - 3868 , - 2883 , - 2190 , - 1789 , - 1680 , - 1863 , - 2338 , - 3105 , - 4164 , - 843 , - 2486 , - 4421 , - 1976 , - 4495 , - 2634 , - 1065 , - 4460 , - 3475 , - 2782 , - 2381 , - 2272 , - 2455 , - 2930 , - 3697 , - 84 , - 1435 , - 3078 , - 341 , - 2568 , - 415 , - 3226 , - 1657 , - 380 , - 4067 , - 3374 , - 2973 , - 2864 , - 3047 , - 3522 , - 4289 , - 676 , - 2027 , - 3670 , - 933 , - 3160 , - 1007 , - 3818 , - 2249 , - 972 , - 4659 , - 3966 , - 3565 , - 3456 , - 3639 , - 4114 , - 209 , - 1268 , - 2619 , - 4262 , - 1525 , - 3752 , - 1599 , - 4410 , - 2841 , - 1564 , - 579 , - 4558 , - 4157 , - 4048 , - 4231 , - 34 , - 801 , - 1860 , - 3211 , - 182 , - 2117 , - 4344 , - 2191 , - 330 , - 3433 , - 2156 , - 1171 , - 478 , - 77 , - 4640 , - 151 , - 626 , - 1393 , - 2452 , - 3803 , - 774 , - 2709 , - 264 , - 2783 , - 922 , - 4025 , - 2748 , - 1763 , - 1070 , - 669 , - 560 , - 743 , - 1218 , - 1985 , - 3044 , - 4395 , - 1366 , - 3301 , - 856 , - 3375 , - 1514 , - 4617 , - 3340 , - 2355 , - 1662 , - 1261 , - 1152 , - 1335 , - 1810 , - 2577 , - 3636 , - 315 , - 1958 , - 3893 , - 1448 , - 3967 , - 2106 , - 537 , - 3932 , - 2947 , - 2254 , - 1853 , - 1744 , - 1927 , - 2402 , - 3169 , - 4228 , - 907 , - 2550 , - 4485 , - 2040 , - 4559 , - 2698 , - 1129 , - 4524 , - 3539 , - 2846 , - 2445 , - 2336 , - 2519 , - 2994 , - 3761 , - 148 , - 1499 , - 3142 , - 405 , - 2632 , - 479 , - 3290 , - 1721 , - 444 , - 4131 , - 3438 , - 3037 , - 2928 , - 3111 , - 3586 , - 4353 , - 740 , - 2091 , - 3734 , - 997 , - 3224 , - 1071 , - 3882 , - 2313 , - 1036 , - 51 , - 4030 , - 3629 , - 3520 , - 3703 , - 4178 , - 273 , - 1332 , - 2683 , - 4326 , - 1589 , - 3816 , - 1663 , - 4474 , - 2905 , - 1628 , - 643 , - 4622 , - 4221 , - 4112 , - 4295 , - 98 , - 865 , - 1924 , - 3275 , - 246 , - 2181 , - 4408 , - 2255 , - 394 , - 3497 , - 2220 , - 1235 , - 542 , - 141 , - 32 , - 215 , - 690 , - 1457 , - 2516 , - 3867 , - 838 , - 2773 , - 328 , - 2847 , - 986 , - 4089 , - 2812 , - 1827 , - 1134 , - 733 , - 624 , - 807 , - 1282 , - 2049 , - 3108 , - 4459 , - 1430 , - 3365 , - 920 , - 3439 , - 1578 , - 9 , - 3404 , - 2419 , - 1726 , - 1325 , - 1216 , - 1399 , - 1874 , - 2641 , - 3700 , - 379 , - 2022 , - 3957 , - 1512 , - 4031 , - 2170 , - 601 , - 3996 , - 3011 , - 2318 , - 1917 , - 1808 , - 1991 , - 2466 , - 3233 , - 4292 , - 971 , - 2614 , - 4549 , - 2104 , - 4623 , - 2762 , - 1193 , - 4588 , - 3603 , - 2910 , - 2509 , - 2400 , - 2583 , - 3058 , - 3825 , - 212 , - 1563 , - 3206 , - 469 , - 2696 , - 543 , - 3354 , - 1785 , - 508 , - 4195 , - 3502 , - 3101 , - 2992 , - 3175 , - 3650 , - 4417 , - 804 , - 2155 , - 3798 , - 1061 , - 3288 , - 1135 , - 3946 , - 2377 , - 1100 , - 115 , - 4094 , - 3693 , - 3584 , - 3767 , - 4242 , - 337 , - 1396 , - 2747 , - 4390 , - 1653 , - 3880 , - 1727 , - 4538 , - 2969 , - 1692 , - 707 , - 14 , - 4285 , - 4176 , - 4359 , - 162 , - 929 , - 1988 , - 3339 , - 310 , - 2245 , - 4472 , - 2319 , - 458 , - 3561 , - 2284 , - 1299 , - 606 , - 205 , - 96 , - 279 , - 754 , - 1521 , - 2580 , - 3931 , - 902 , - 2837 , - 392 , - 2911 , - 1050 , - 4153 , - 2876 , - 1891 , - 1198 , - 797 , - 688 , - 871 , - 1346 , - 2113 , - 3172 , - 4523 , - 1494 , - 3429 , - 984 , - 3503 , - 1642 , - 73 , - 3468 , - 2483 , - 1790 , - 1389 , - 1280 , - 1463 , - 1938 , - 2705 , - 3764 , - 443 , - 2086 , - 4021 , - 1576 , - 4095 , - 2234 , - 665 , - 4060 , - 3075 , - 2382 , - 1981 , - 1872 , - 2055 , - 2530 , - 3297 , - 4356 , - 1035 , - 2678 , - 4613 , - 2168 , - 15 , - 2826 , - 1257 , - 4652 , - 3667 , - 2974 , - 2573 , - 2464 , - 2647 , - 3122 , - 3889 , - 276 , - 1627 , - 3270 , - 533 , - 2760 , - 607 , - 3418 , - 1849 , - 572 , - 4259 , - 3566 , - 3165 , - 3056 , - 3239 , - 3714 , - 4481 , - 868 , - 2219 , - 3862 , - 1125 , - 3352 , - 1199 , - 4010 , - 2441 , - 1164 , - 179 , - 4158 , - 3757 , - 3648 , - 3831 , - 4306 , - 401 , - 1460 , - 2811 , - 4454 , - 1717 , - 3944 , - 1791 , - 4602 , - 3033 , - 1756 , - 771 , - 78 , - 4349 , - 4240 , - 4423 , - 226 , - 993 , - 2052 , - 3403 , - 374 , - 2309 , - 4536 , - 2383 , - 522 , - 3625 , - 2348 , - 1363 , - 670 , - 269 , - 160 , - 343 , - 818 , - 1585 , - 2644 , - 3995 , - 966 , - 2901 , - 456 , - 2975 , - 1114 , - 4217 , - 2940 , - 1955 , - 1262 , - 861 , - 752 , - 935 , - 1410 , - 2177 , - 3236 , - 4587 , - 1558 , - 3493 , - 1048 , - 3567 , - 1706 , - 137 , - 3532 , - 2547 , - 1854 , - 1453 , - 1344 , - 1527 , - 2002 , - 2769 , - 3828 , - 507 , - 2150 , - 4085 , - 1640 , - 4159 , - 2298 , - 729 , - 4124 , - 3139 , - 2446 , - 2045 , - 1936 , - 2119 , - 2594 , - 3361 , - 4420 , - 1099 , - 2742 , - 5 , - 2232 , - 79 , - 2890 , - 1321 , - 44 , - 3731 , - 3038 , - 2637 , - 2528 , - 2711 , - 3186 , - 3953 , - 340 , - 1691 , - 3334 , - 597 , - 2824 , - 671 , - 3482 , - 1913 , - 636 , - 4323 , - 3630 , - 3229 , - 3120 , - 3303 , - 3778 , - 4545 , - 932 , - 2283 , - 3926 , - 1189 , - 3416 , - 1263 , - 4074 , - 2505 , - 1228 , - 243 , - 4222 , - 3821 , - 3712 , - 3895 , - 4370 , - 465 , - 1524 , - 2875 , - 4518 , - 1781 , - 4008 , - 1855 , - 4666 , - 3097 , - 1820 , - 835 , - 142 , - 4413 , - 4304 , - 4487 , - 290 , - 1057 , - 2116 , - 3467 , - 438 , - 2373 , - 4600 , - 2447 , - 586 , - 3689 , - 2412 , - 1427 , - 734 , - 333 , - 224 , - 407 , - 882 , - 1649 , - 2708 , - 4059 , - 1030 , - 2965 , - 520 , - 3039 , - 1178 , - 4281 , - 3004 , - 2019 , - 1326 , - 925 , - 816 , - 999 , - 1474 , - 2241 , - 3300 , - 4651 , - 1622 , - 3557 , - 1112 , - 3631 , - 1770 , - 201 , - 3596 , - 2611 , - 1918 , - 1517 , - 1408 , - 1591 , - 2066 , - 2833 , - 3892 , - 571 , - 2214 , - 4149 , - 1704 , - 4223 , - 2362 , - 793 , - 4188 , - 3203 , - 2510 , - 2109 , - 2000 , - 2183 , - 2658 , - 3425 , - 4484 , - 1163 , - 2806 , - 69 , - 2296 , - 143 , - 2954 , - 1385 , - 108 , - 3795 , - 3102 , - 2701 , - 2592 , - 2775 , - 3250 , - 4017 , - 404 , - 1755 , - 3398 , - 661 , - 2888 , - 735 , - 3546 , - 1977 , - 700 , - 4387 , - 3694 , - 3293 , - 3184 , - 3367 , - 3842 , - 4609 , - 996 , - 2347 , - 3990 , - 1253 , - 3480 , - 1327 , - 4138 , - 2569 , - 1292 , - 307 , - 4286 , - 3885 , - 3776 , - 3959 , - 4434 , - 529 , - 1588 , - 2939 , - 4582 , - 1845 , - 4072 , - 1919 , - 58 , - 3161 , - 1884 , - 899 , - 206 , - 4477 , - 4368 , - 4551 , - 354 , - 1121 , - 2180 , - 3531 , - 502 , - 2437 , - 4664 , - 2511 , - 650 , - 3753 , - 2476 , - 1491 , - 798 , - 397 , - 288 , - 471 , - 946 , - 1713 , - 2772 , - 4123 , - 1094 , - 3029 , - 584 , - 3103 , - 1242 , - 4345 , - 3068 , - 2083 , - 1390 , - 989 , - 880 , - 1063 , - 1538 , - 2305 , - 3364 , - 43 , - 1686 , - 3621 , - 1176 , - 3695 , - 1834 , - 265 , - 3660 , - 2675 , - 1982 , - 1581 , - 1472 , - 1655 , - 2130 , - 2897 , - 3956 , - 635 , - 2278 , - 4213 , - 1768 , - 4287 , - 2426 , - 857 , - 4252 , - 3267 , - 2574 , - 2173 , - 2064 , - 2247 , - 2722 , - 3489 , - 4548 , - 1227 , - 2870 , - 133 , - 2360 , - 207 , - 3018 , - 1449 , - 172 , - 3859 , - 3166 , - 2765 , - 2656 , - 2839 , - 3314 , - 4081 , - 468 , - 1819 , - 3462 , - 725 , - 2952 , - 799 , - 3610 , - 2041 , - 764 , - 4451 , - 3758 , - 3357 , - 3248 , - 3431 , - 3906 , - 1 , - 1060 , - 2411 , - 4054 , - 1317 , - 3544 , - 1391 , - 4202 , - 2633 , - 1356 , - 371 , - 4350 , - 3949 , - 3840 , - 4023 , - 4498 , - 593 , - 1652 , - 3003 , - 4646 , - 1909 , - 4136 , - 1983 , - 122 , - 3225 , - 1948 , - 963 , - 270 , - 4541 , - 4432 , - 4615 , - 418 , - 1185 , - 2244 , - 3595 , - 566 , - 2501 , - 56 , - 2575 , - 714 , - 3817 , - 2540 , - 1555 , - 862 , - 461 , - 352 , - 535 , - 1010 , - 1777 , - 2836 , - 4187 , - 1158 , - 3093 , - 648 , - 3167 , - 1306 , - 4409 , - 3132 , - 2147 , - 1454 , - 1053 , - 944 , - 1127 , - 1602 , - 2369 , - 3428 , - 107 , - 1750 , - 3685 , - 1240 , - 3759 , - 1898 , - 329 , - 3724 , - 2739 , - 2046 , - 1645 , - 1536 , - 1719 , - 2194 , - 2961 , - 4020 , - 699 , - 2342 , - 4277 , - 1832 , - 4351 , - 2490 , - 921 , - 4316 , - 3331 , - 2638 , - 2237 , - 2128 , - 2311 , - 2786 , - 3553 , - 4612 , - 1291 , - 2934 , - 197 , - 2424 , - 271 , - 3082 , - 1513 , - 236 , - 3923 , - 3230 , - 2829 , - 2720 , - 2903 , - 3378 , - 4145 , - 532 , - 1883 , - 3526 , - 789 , - 3016 , - 863 , - 3674 , - 2105 , - 828 , - 4515 , - 3822 , - 3421 , - 3312 , - 3495 , - 3970 , - 65 , - 1124 , - 2475 , - 4118 , - 1381 , - 3608 , - 1455 , - 4266 , - 2697 , - 1420 , - 435 , - 4414 , - 4013 , - 3904 , - 4087 , - 4562 , - 657 , - 1716 , - 3067 , - 38 , - 1973 , - 4200 , - 2047 , - 186 , - 3289 , - 2012 , - 1027 , - 334 , - 4605 , - 4496 , - 7 , - 482 , - 1249 , - 2308 , - 3659 , - 630 , - 2565 , - 120 , - 2639 , - 778 , - 3881 , - 2604 , - 1619 , - 926 , - 525 , - 416 , - 599 , - 1074 , - 1841 , - 2900 , - 4251 , - 1222 , - 3157 , - 712 , - 3231 , - 1370 , - 4473 , - 3196 , - 2211 , - 1518 , - 1117 , - 1008 , - 1191 , - 1666 , - 2433 , - 3492 , - 171 , - 1814 , - 3749 , - 1304 , - 3823 , - 1962 , - 393 , - 3788 , - 2803 , - 2110 , - 1709 , - 1600 , - 1783 , - 2258 , - 3025 , - 4084 , - 763 , - 2406 , - 4341 , - 1896 , - 4415 , - 2554 , - 985 , - 4380 , - 3395 , - 2702 , - 2301 , - 2192 , - 2375 , - 2850 , - 3617 , - 4 , - 1355 , - 2998 , - 261 , - 2488 , - 335 , - 3146 , - 1577 , - 300 , - 3987 , - 3294 , - 2893 , - 2784 , - 2967 , - 3442 , - 4209 , - 596 , - 1947 , - 3590 , - 853 , - 3080 , - 927 , - 3738 , - 2169 , - 892 , - 4579 , - 3886 , - 3485 , - 3376 , - 3559 , - 4034 , - 129 , - 1188 , - 2539 , - 4182 , - 1445 , - 3672 , - 1519 , - 4330 , - 2761 , - 1484 , - 499 , - 4478 , - 4077 , - 3968 , - 4151 , - 4626 , - 721 , - 1780 , - 3131 , - 102 , - 2037 , - 4264 , - 2111 , - 250 , - 3353 , - 2076 , - 1091 , - 398 , - 4669 , - 4560 , - 71 , - 546 , - 1313 , - 2372 , - 3723 , - 694 , - 2629 , - 184 , - 2703 , - 842 , - 3945 , - 2668 , - 1683 , - 990 , - 589 , - 480 , - 663 , - 1138 , - 1905 , - 2964 , - 4315 , - 1286 , - 3221 , - 776 , - 3295 , - 1434 , - 4537 , - 3260 , - 2275 , - 1582 , - 1181 , - 1072 , - 1255 , - 1730 , - 2497 , - 3556 , - 235 , - 1878 , - 3813 , - 1368 , - 3887 , - 2026 , - 457 , - 3852 , - 2867 , - 2174 , - 1773 , - 1664 , - 1847 , - 2322 , - 3089 , - 4148 , - 827 , - 2470 , - 4405 , - 1960 , - 4479 , - 2618 , - 1049 , - 4444 , - 3459 , - 2766 , - 2365 , - 2256 , - 2439 , - 2914 , - 3681 , - 68 , - 1419 , - 3062 , - 325 , - 2552 , - 399 , - 3210 , - 1641 , - 364 , - 4051 , - 3358 , - 2957 , - 2848 , - 3031 , - 3506 , - 4273 , - 660 , - 2011 , - 3654 , - 917 , - 3144 , - 991 , - 3802 , - 2233 , - 956 , - 4643 , - 3950 , - 3549 , - 3440 , - 3623 , - 4098 , - 193 , - 1252 , - 2603 , - 4246 , - 1509 , - 3736 , - 1583 , - 4394 , - 2825 , - 1548 , - 563 , - 4542 , - 4141 , - 4032 , - 4215 , - 18 , - 785 , - 1844 , - 3195 , - 166 , - 2101 , - 4328 , - 2175 , - 314 , - 3417 , - 2140 , - 1155 , - 462 , - 61 , - 4624 , - 135 , - 610 , - 1377 , - 2436 , - 3787 , - 758 , - 2693 , - 248 , - 2767 , - 906 , - 4009 , - 2732 , - 1747 , - 1054 , - 653 , - 544 , - 727 , - 1202 , - 1969 , - 3028 , - 4379 , - 1350 , - 3285 , - 840 , - 3359 , - 1498 , - 4601 , - 3324 , - 2339 , - 1646 , - 1245 , - 1136 , - 1319 , - 1794 , - 2561 , - 3620 , - 299 , - 1942 , - 3877 , - 1432 , - 3951 , - 2090 , - 521 , - 3916 , - 2931 , - 2238 , - 1837 , - 1728 , - 1911 , - 2386 , - 3153 , - 4212 , - 891 , - 2534 , - 4469 , - 2024 , - 4543 , - 2682 , - 1113 , - 4508 , - 3523 , - 2830 , - 2429 , - 2320 , - 2503 , - 2978 , - 3745 , - 132 , - 1483 , - 3126 , - 389 , - 2616 , - 463 , - 3274 , - 1705 , - 428 , - 4115 , - 3422 , - 3021 , - 2912 , - 3095 , - 3570 , - 4337 , - 724 , - 2075 , - 3718 , - 981 , - 3208 , - 1055 , - 3866 , - 2297 , - 1020 , - 35 , - 4014 , - 3613 , - 3504 , - 3687 , - 4162 , - 257 , - 1316 , - 2667 , - 4310 , - 1573 , - 3800 , - 1647 , - 4458 , - 2889 , - 1612 , - 627 , - 4606 , - 4205 , - 4096 , - 4279 , - 82 , - 849 , - 1908 , - 3259 , - 230 , - 2165 , - 4392 , - 2239 , - 378 , - 3481 , - 2204 , - 1219 , - 526 , - 125 , - 16 , - 199 , - 674 , - 1441 , - 2500 , - 3851 , - 822 , - 2757 , - 312 , - 2831 , - 970 , - 4073 , - 2796 , - 1811 , - 1118 , - 717 , - 608 , - 791 , - 1266 , - 2033 , - 3092 , - 4443 , - 1414 , - 3349 , - 904 , - 3423 , - 1562 , - 4665 , - 3388 , - 2403 , - 1710 , - 1309 , - 1200 , - 1383 , - 1858 , - 2625 , - 3684 , - 363 , - 2006 , - 3941 , - 1496 , - 4015 , - 2154 , - 585 , - 3980 , - 2995 , - 2302 , - 1901 , - 1792 , - 1975 , - 2450 , - 3217 , - 4276 , - 955 , - 2598 , - 4533 , - 2088 , - 4607 , - 2746 , - 1177 , - 4572 , - 3587 , - 2894 , - 2493 , - 2384 , - 2567 , - 3042 , - 3809 , - 196 , - 1547 , - 3190 , - 453 , - 2680 , - 527 , - 3338 , - 1769 , - 492 , - 4179 , - 3486 , - 3085 , - 2976 , - 3159 , - 3634 , - 4401 , - 788 , - 2139 , - 3782 , - 1045 , - 3272 , - 1119 , - 3930 , - 2361 , - 1084 , - 99 , - 4078 , - 3677 , - 3568 , - 3751 , - 4226 , - 321 , - 1380 , - 2731 , - 4374 , - 1637 , - 3864 , - 1711 , - 4522 , - 2953 , - 1676 , - 691 , - 4670 , - 4269 , - 4160 , - 4343 , - 146 , - 913 , - 1972 , - 3323 , - 294 , - 2229 , - 4456 , - 2303 , - 442 , - 3545 , - 2268 , - 1283 , - 590 , - 189 , - 80 , - 263 , - 738 , - 1505 , - 2564 , - 3915 , - 886 , - 2821 , - 376 , - 2895 , - 1034 , - 4137 , - 2860 , - 1875 , - 1182 , - 781 , - 672 , - 855 , - 1330 , - 2097 , - 3156 , - 4507 , - 1478 , - 3413 , - 968 , - 3487 , - 1626 , - 57 , - 3452 , - 2467 , - 1774 , - 1373 , - 1264 , - 1447 , - 1922 , - 2689 , - 3748 , - 427 , - 2070 , - 4005 , - 1560 , - 4079 , - 2218 , - 649 , - 4044 , - 3059 , - 2366 , - 1965 , - 1856 , - 2039 , - 2514 , - 3281 , - 4340 , - 1019 , - 2662 , - 4597 , - 2152 , - 4671 , - 2810 , - 1241 , - 4636 , - 3651 , - 2958 , - 2557 , - 2448 , - 2631 , - 3106 , - 3873 , - 260 , - 1611 , - 3254 , - 517 , - 2744 , - 591 , - 3402 , - 1833 , - 556 , - 4243 , - 3550 , - 3149 , - 3040 , - 3223 , - 3698 , - 4465 , - 852 , - 2203 , - 3846 , - 1109 , - 3336 , - 1183 , - 3994 , - 2425 , - 1148 , - 163 , - 4142 , - 3741 , - 3632 , - 3815 , - 4290 , - 385 , - 1444 , - 2795 , - 4438 , - 1701 , - 3928 , - 1775 , - 4586 , - 3017 , - 1740 , - 755 , - 62 , - 4333 , - 4224 , - 4407 , - 210 , - 977 , - 2036 , - 3387 , - 358 , - 2293 , - 4520 , - 2367 , - 506 , - 3609 , - 2332 , - 1347 , - 654 , - 253 , - 144 , - 327 , - 802 , - 1569 , - 2628 , - 3979 , - 950 , - 2885 , - 440 , - 2959 , - 1098 , - 4201 , - 2924 , - 1939 , - 1246 , - 845 , - 736 , - 919 , - 1394 , - 2161 , - 3220 , - 4571 , - 1542 , - 3477 , - 1032 , - 3551 , - 1690 , - 121 , - 3516 , - 2531 , - 1838 , - 1437 , - 1328 , - 1511 , - 1986 , - 2753 , - 3812 , - 491 , - 2134 , - 4069 , - 1624 , - 4143 , - 2282 , - 713 , - 4108 , - 3123 , - 2430 , - 2029 , - 1920 , - 2103 , - 2578 , - 3345 , - 4404 , - 1083 , - 2726 , - 4661 , - 2216 , - 63 , - 2874 , - 1305 , - 28 , - 3715 , - 3022 , - 2621 , - 2512 , - 2695 , - 3170 , - 3937 , - 324 , - 1675 , - 3318 , - 581 , - 2808 , - 655 , - 3466 , - 1897 , - 620 , - 4307 , - 3614 , - 3213 , - 3104 , - 3287 , - 3762 , - 4529 , - 916 , - 2267 , - 3910 , - 1173 , - 3400 , - 1247 , - 4058 , - 2489 , - 1212 , - 227 , - 4206 , - 3805 , - 3696 , - 3879 , - 4354 , - 449 , - 1508 , - 2859 , - 4502 , - 1765 , - 3992 , - 1839 , - 4650 , - 3081 , - 1804 , - 819 , - 126 , - 4397 , - 4288 , - 4471 , - 274 , - 1041 , - 2100 , - 3451 , - 422 , - 2357 , - 4584 , - 2431 , - 570 , - 3673 , - 2396 , - 1411 , - 718 , - 317 , - 208 , - 391 , - 866 , - 1633 , - 2692 , - 4043 , - 1014 , - 2949 , - 504 , - 3023 , - 1162 , - 4265 , - 2988 , - 2003 , - 1310 , - 909 , - 800 , - 983 , - 1458 , - 2225 , - 3284 , - 4635 , - 1606 , - 3541 , - 1096 , - 3615 , - 1754 , - 185 , - 3580 , - 2595 , - 1902 , - 1501 , - 1392 , - 1575 , - 2050 , - 2817 , - 3876 , - 555 , - 2198 , - 4133 , - 1688 , - 4207 , - 2346 , - 777 , - 4172 , - 3187 , - 2494 , - 2093 , - 1984 , - 2167 , - 2642 , - 3409 , - 4468 , - 1147 , - 2790 , - 53 , - 2280 , - 127 , - 2938 , - 1369 , - 92 , - 3779 , - 3086 , - 2685 , - 2576 , - 2759 , - 3234 , - 4001 , - 388 , - 1739 , - 3382 , - 645 , - 2872 , - 719 , - 3530 , - 1961 , - 684 , - 4371 , - 3678 , - 3277 , - 3168 , - 3351 , - 3826 , - 4593 , - 980 , - 2331 , - 3974 , - 1237 , - 3464 , - 1311 , - 4122 , - 2553 , - 1276 , - 291 , - 4270 , - 3869 , - 3760 , - 3943 , - 4418 , - 513 , - 1572 , - 2923 , - 4566 , - 1829 , - 4056 , - 1903 , - 42 , - 3145 , - 1868 , - 883 , - 190 , - 4461 , - 4352 , - 4535 , - 338 , - 1105 , - 2164 , - 3515 , - 486 , - 2421 , - 4648 , - 2495 , - 634 , - 3737 , - 2460 , - 1475 , - 782 , - 381 , - 272 , - 455 , - 930 , - 1697 , - 2756 , - 4107 , - 1078 , - 3013 , - 568 , - 3087 , - 1226 , - 4329 , - 3052 , - 2067 , - 1374 , - 973 , - 864 , - 1047 , - 1522 , - 2289 , - 3348 , - 27 , - 1670 , - 3605 , - 1160 , - 3679 , - 1818 , - 249 , - 3644 , - 2659 , - 1966 , - 1565 , - 1456 , - 1639 , - 2114 , - 2881 , - 3940 , - 619 , - 2262 , - 4197 , - 1752 , - 4271 , - 2410 , - 841 , - 4236 , - 3251 , - 2558 , - 2157 , - 2048 , - 2231 , - 2706 , - 3473 , - 4532 , - 1211 , - 2854 , - 117 , - 2344 , - 191 , - 3002 , - 1433 , - 156 , - 3843 , - 3150 , - 2749 , - 2640 , - 2823 , - 3298 , - 4065 , - 452 , - 1803 , - 3446 , - 709 , - 2936 , - 783 , - 3594 , - 2025 , - 748 , - 4435 , - 3742 , - 3341 , - 3232 , - 3415 , - 3890 , - 4657 , - 1044 , - 2395 , - 4038 , - 1301 , - 3528 , - 1375 , - 4186 , - 2617 , - 1340 , - 355 , - 4334 , - 3933 , - 3824 , - 4007 , - 4482 , - 577 , - 1636 , - 2987 , - 4630 , - 1893 , - 4120 , - 1967 , - 106 , - 3209 , - 1932 , - 947 , - 254 , - 4525 , - 4416 , - 4599 , - 402 , - 1169 , - 2228 , - 3579 , - 550 , - 2485 , - 40 , - 2559 , - 698 , - 3801 , - 2524 , - 1539 , - 846 , - 445 , - 336 , - 519 , - 994 , - 1761 , - 2820 , - 4171 , - 1142 , - 3077 , - 632 , - 3151 , - 1290 , - 4393 , - 3116 , - 2131 , - 1438 , - 1037 , - 928 , - 1111 , - 1586 , - 2353 , - 3412 , - 91 , - 1734 , - 3669 , - 1224 , - 3743 , - 1882 , - 313 , - 3708 , - 2723 , - 2030 , - 1629 , - 1520 , - 1703 , - 2178 , - 2945 , - 4004 , - 683 , - 2326 , - 4261 , - 1816 , - 4335 , - 2474 , - 905 , - 4300 , - 3315 , - 2622 , - 2221 , - 2112 , - 2295 , - 2770 , - 3537 , - 4596 , - 1275 , - 2918 , - 181 , - 2408 , - 255 , - 3066 , - 1497 , - 220 , - 3907 , - 3214 , - 2813 , - 2704 , - 2887 , - 3362 , - 4129 , - 516 , - 1867 , - 3510 , - 773 , - 3000 , - 847 , - 3658 , - 2089 , - 812 , - 4499 , - 3806 , - 3405 , - 3296 , - 3479 , - 3954 , - 49 , - 1108 , - 2459 , - 4102 , - 1365 , - 3592 , - 1439 , - 4250 , - 2681 , - 1404 , - 419 , - 4398 , - 3997 , - 3888 , - 4071 , - 4546 , - 641 , - 1700 , - 3051 , - 22 , - 1957 , - 4184 , - 2031 , - 170 , - 3273 , - 1996 , - 1011 , - 318 , - 4589 , - 4480 , - 4663 , - 466 , - 1233 , - 2292 , - 3643 , - 614 , - 2549 , - 104 , - 2623 , - 762 , - 3865 , - 2588 , - 1603 , - 910 , - 509 , - 400 , - 583 , - 1058 , - 1825 , - 2884 , - 4235 , - 1206 , - 3141 , - 696 , - 3215 , - 1354 , - 4457 , - 3180 , - 2195 , - 1502 , - 1101 , - 992 , - 1175 , - 1650 , - 2417 , - 3476 , - 155 , - 1798 , - 3733 , - 1288 , - 3807 , - 1946 , - 377 , - 3772 , - 2787 , - 2094 , - 1693 , - 1584 , - 1767 , - 2242 , - 3009 , - 4068 , - 747 , - 2390 , - 4325 , - 1880 , - 4399 , - 2538 , - 969 , - 4364 , - 3379 , - 2686 , - 2285 , - 2176 , - 2359 , - 2834 , - 3601 , - 4660 , - 1339 , - 2982 , - 245 , - 2472 , - 319 , - 3130 , - 1561 , - 284 , - 3971 , - 3278 , - 2877 , - 2768 , - 2951 , - 3426 , - 4193 , - 580 , - 1931 , - 3574 , - 837 , - 3064 , - 911 , - 3722 , - 2153 , - 876 , - 4563 , - 3870 , - 3469 , - 3360 , - 3543 , - 4018 , - 113 , - 1172 , - 2523 , - 4166 , - 1429 , - 3656 , - 1503 , - 4314 , - 2745 , - 1468 , - 483 , - 4462 , - 4061 , - 3952 , - 4135 , - 4610 , - 705 , - 1764 , - 3115 , - 86 , - 2021 , - 4248 , - 2095 , - 234 , - 3337 , - 2060 , - 1075 , - 382 , - 4653 , - 4544 , - 55 , - 530 , - 1297 , - 2356 , - 3707 , - 678 , - 2613 , - 168 , - 2687 , - 826 , - 3929 , - 2652 , - 1667 , - 974 , - 573 , - 464 , - 647 , - 1122 , - 1889 , - 2948 , - 4299 , - 1270 , - 3205 , - 760 , - 3279 , - 1418 , - 4521 , - 3244 , - 2259 , - 1566 , - 1165 , - 1056 , - 1239 , - 1714 , - 2481 , - 3540 , - 219 , - 1862 , - 3797 , - 1352 , - 3871 , - 2010 , - 441 , - 3836 , - 2851 , - 2158 , - 1757 , - 1648 , - 1831 , - 2306 , - 3073 , - 4132 , - 811 , - 2454 , - 4389 , - 1944 , - 4463 , - 2602 , - 1033 , - 4428 , - 3443 , - 2750 , - 2349 , - 2240 , - 2423 , - 2898 , - 3665 , - 52 , - 1403 , - 3046 , - 309 , - 2536 , - 383 , - 3194 , - 1625 , - 348 , - 4035 , - 3342 , - 2941 , - 2832 , - 3015 , - 3490 , - 4257 , - 644 , - 1995 , - 3638 , - 901 , - 3128 , - 975 , - 3786 , - 2217 , - 940 , - 4627 , - 3934 , - 3533 , - 3424 , - 3607 , - 4082 , - 177 , - 1236 , - 2587 , - 4230 , - 1493 , - 3720 , - 1567 , - 4378 , - 2809 , - 1532 , - 547 , - 4526 , - 4125 , - 4016 , - 4199 , - 2 , - 769 , - 1828 , - 3179 , - 150 , - 2085 , - 4312 , - 2159 , - 298 , - 3401 , - 2124 , - 1139 , - 446 , - 45 , - 4608 , - 119 , - 594 , - 1361 , - 2420 , - 3771 , - 742 , - 2677 , - 232 , - 2751 , - 890 , - 3993 , - 2716 , - 1731 , - 1038 , - 637 , - 528 , - 711 , - 1186 , - 1953 , - 3012 , - 4363 , - 1334 , - 3269 , - 824 , - 3343 , - 1482 , - 4585 , - 3308 , - 2323 , - 1630 , - 1229 , - 1120 , - 1303 , - 1778 , - 2545 , - 3604 , - 283 , - 1926 , - 3861 , - 1416 , - 3935 , - 2074 , - 505 , - 3900 , - 2915 , - 2222 , - 1821 , - 1712 , - 1895 , - 2370 , - 3137 , - 4196 , - 875 , - 2518 , - 4453 , - 2008 , - 4527 , - 2666 , - 1097 , - 4492 , - 3507 , - 2814 , - 2413 , - 2304 , - 2487 , - 2962 , - 3729 , - 116 , - 1467 , - 3110 , - 373 , - 2600 , - 447 , - 3258 , - 1689 , - 412 , - 4099 , - 3406 , - 3005 , - 2896 , - 3079 , - 3554 , - 4321 , - 708 , - 2059 , - 3702 , - 965 , - 3192 , - 1039 , - 3850 , - 2281 , - 1004 , - 19 , - 3998 , - 3597 , - 3488 , - 3671 , - 4146 , - 241 , - 1300 , - 2651 , - 4294 , - 1557 , - 3784 , - 1631 , - 4442 , - 2873 , - 1596 , - 611 , - 4590 , - 4189 , - 4080 , - 4263 , - 66 , - 833 , - 1892 , - 3243 , - 214 , - 2149 , - 4376 , - 2223 , - 362 , - 3465 , - 2188 , - 1203 , - 510 , - 109 , - 0 , - 515 , - 1918 , - 4209 , - 2652 , - 1983 , - 2202 , - 3309 , - 568 , - 3451 , - 2486 , - 2409 , - 3220 , - 183 , - 2770 , - 1509 , - 1136 , - 1651 , - 3054 , - 609 , - 3788 , - 3119 , - 3338 , - 4445 , - 1704 , - 4587 , - 3622 , - 3545 , - 4356 , - 1319 , - 3906 , - 2645 , - 2272 , - 2787 , - 4190 , - 1745 , - 188 , - 4255 , - 4474 , - 845 , - 2840 , - 987 , - 22 , - 4681 , - 756 , - 2455 , - 306 , - 3781 , - 3408 , - 3923 , - 590 , - 2881 , - 1324 , - 655 , - 874 , - 1981 , - 3976 , - 2123 , - 1158 , - 1081 , - 1892 , - 3591 , - 1442 , - 181 , - 4544 , - 323 , - 1726 , - 4017 , - 2460 , - 1791 , - 2010 , - 3117 , - 376 , - 3259 , - 2294 , - 2217 , - 3028 , - 4727 , - 2578 , - 1317 , - 944 , - 1459 , - 2862 , - 417 , - 3596 , - 2927 , - 3146 , - 4253 , - 1512 , - 4395 , - 3430 , - 3353 , - 4164 , - 1127 , - 3714 , - 2453 , - 2080 , - 2595 , - 3998 , - 1553 , - 4732 , - 4063 , - 4282 , - 653 , - 2648 , - 795 , - 4566 , - 4489 , - 564 , - 2263 , - 114 , - 3589 , - 3216 , - 3731 , - 398 , - 2689 , - 1132 , - 463 , - 682 , - 1789 , - 3784 , - 1931 , - 966 , - 889 , - 1700 , - 3399 , - 1250 , - 4725 , - 4352 , - 131 , - 1534 , - 3825 , - 2268 , - 1599 , - 1818 , - 2925 , - 184 , - 3067 , - 2102 , - 2025 , - 2836 , - 4535 , - 2386 , - 1125 , - 752 , - 1267 , - 2670 , - 225 , - 3404 , - 2735 , - 2954 , - 4061 , - 1320 , - 4203 , - 3238 , - 3161 , - 3972 , - 935 , - 3522 , - 2261 , - 1888 , - 2403 , - 3806 , - 1361 , - 4540 , - 3871 , - 4090 , - 461 , - 2456 , - 603 , - 4374 , - 4297 , - 372 , - 2071 , - 4658 , - 3397 , - 3024 , - 3539 , - 206 , - 2497 , - 940 , - 271 , - 490 , - 1597 , - 3592 , - 1739 , - 774 , - 697 , - 1508 , - 3207 , - 1058 , - 4533 , - 4160 , - 4675 , - 1342 , - 3633 , - 2076 , - 1407 , - 1626 , - 2733 , - 4728 , - 2875 , - 1910 , - 1833 , - 2644 , - 4343 , - 2194 , - 933 , - 560 , - 1075 , - 2478 , - 33 , - 3212 , - 2543 , - 2762 , - 3869 , - 1128 , - 4011 , - 3046 , - 2969 , - 3780 , - 743 , - 3330 , - 2069 , - 1696 , - 2211 , - 3614 , - 1169 , - 4348 , - 3679 , - 3898 , - 269 , - 2264 , - 411 , - 4182 , - 4105 , - 180 , - 1879 , - 4466 , - 3205 , - 2832 , - 3347 , - 14 , - 2305 , - 748 , - 79 , - 298 , - 1405 , - 3400 , - 1547 , - 582 , - 505 , - 1316 , - 3015 , - 866 , - 4341 , - 3968 , - 4483 , - 1150 , - 3441 , - 1884 , - 1215 , - 1434 , - 2541 , - 4536 , - 2683 , - 1718 , - 1641 , - 2452 , - 4151 , - 2002 , - 741 , - 368 , - 883 , - 2286 , - 4577 , - 3020 , - 2351 , - 2570 , - 3677 , - 936 , - 3819 , - 2854 , - 2777 , - 3588 , - 551 , - 3138 , - 1877 , - 1504 , - 2019 , - 3422 , - 977 , - 4156 , - 3487 , - 3706 , - 77 , - 2072 , - 219 , - 3990 , - 3913 , - 4724 , - 1687 , - 4274 , - 3013 , - 2640 , - 3155 , - 4558 , - 2113 , - 556 , - 4623 , - 106 , - 1213 , - 3208 , - 1355 , - 390 , - 313 , - 1124 , - 2823 , - 674 , - 4149 , - 3776 , - 4291 , - 958 , - 3249 , - 1692 , - 1023 , - 1242 , - 2349 , - 4344 , - 2491 , - 1526 , - 1449 , - 2260 , - 3959 , - 1810 , - 549 , - 176 , - 691 , - 2094 , - 4385 , - 2828 , - 2159 , - 2378 , - 3485 , - 744 , - 3627 , - 2662 , - 2585 , - 3396 , - 359 , - 2946 , - 1685 , - 1312 , - 1827 , - 3230 , - 785 , - 3964 , - 3295 , - 3514 , - 4621 , - 1880 , - 27 , - 3798 , - 3721 , - 4532 , - 1495 , - 4082 , - 2821 , - 2448 , - 2963 , - 4366 , - 1921 , - 364 , - 4431 , - 4650 , - 1021 , - 3016 , - 1163 , - 198 , - 121 , - 932 , - 2631 , - 482 , - 3957 , - 3584 , - 4099 , - 766 , - 3057 , - 1500 , - 831 , - 1050 , - 2157 , - 4152 , - 2299 , - 1334 , - 1257 , - 2068 , - 3767 , - 1618 , - 357 , - 4720 , - 499 , - 1902 , - 4193 , - 2636 , - 1967 , - 2186 , - 3293 , - 552 , - 3435 , - 2470 , - 2393 , - 3204 , - 167 , - 2754 , - 1493 , - 1120 , - 1635 , - 3038 , - 593 , - 3772 , - 3103 , - 3322 , - 4429 , - 1688 , - 4571 , - 3606 , - 3529 , - 4340 , - 1303 , - 3890 , - 2629 , - 2256 , - 2771 , - 4174 , - 1729 , - 172 , - 4239 , - 4458 , - 829 , - 2824 , - 971 , - 6 , - 4665 , - 740 , - 2439 , - 290 , - 3765 , - 3392 , - 3907 , - 574 , - 2865 , - 1308 , - 639 , - 858 , - 1965 , - 3960 , - 2107 , - 1142 , - 1065 , - 1876 , - 3575 , - 1426 , - 165 , - 4528 , - 307 , - 1710 , - 4001 , - 2444 , - 1775 , - 1994 , - 3101 , - 360 , - 3243 , - 2278 , - 2201 , - 3012 , - 4711 , - 2562 , - 1301 , - 928 , - 1443 , - 2846 , - 401 , - 3580 , - 2911 , - 3130 , - 4237 , - 1496 , - 4379 , - 3414 , - 3337 , - 4148 , - 1111 , - 3698 , - 2437 , - 2064 , - 2579 , - 3982 , - 1537 , - 4716 , - 4047 , - 4266 , - 637 , - 2632 , - 779 , - 4550 , - 4473 , - 548 , - 2247 , - 98 , - 3573 , - 3200 , - 3715 , - 382 , - 2673 , - 1116 , - 447 , - 666 , - 1773 , - 3768 , - 1915 , - 950 , - 873 , - 1684 , - 3383 , - 1234 , - 4709 , - 4336 , - 115 , - 1518 , - 3809 , - 2252 , - 1583 , - 1802 , - 2909 , - 168 , - 3051 , - 2086 , - 2009 , - 2820 , - 4519 , - 2370 , - 1109 , - 736 , - 1251 , - 2654 , - 209 , - 3388 , - 2719 , - 2938 , - 4045 , - 1304 , - 4187 , - 3222 , - 3145 , - 3956 , - 919 , - 3506 , - 2245 , - 1872 , - 2387 , - 3790 , - 1345 , - 4524 , - 3855 , - 4074 , - 445 , - 2440 , - 587 , - 4358 , - 4281 , - 356 , - 2055 , - 4642 , - 3381 , - 3008 , - 3523 , - 190 , - 2481 , - 924 , - 255 , - 474 , - 1581 , - 3576 , - 1723 , - 758 , - 681 , - 1492 , - 3191 , - 1042 , - 4517 , - 4144 , - 4659 , - 1326 , - 3617 , - 2060 , - 1391 , - 1610 , - 2717 , - 4712 , - 2859 , - 1894 , - 1817 , - 2628 , - 4327 , - 2178 , - 917 , - 544 , - 1059 , - 2462 , - 17 , - 3196 , - 2527 , - 2746 , - 3853 , - 1112 , - 3995 , - 3030 , - 2953 , - 3764 , - 727 , - 3314 , - 2053 , - 1680 , - 2195 , - 3598 , - 1153 , - 4332 , - 3663 , - 3882 , - 253 , - 2248 , - 395 , - 4166 , - 4089 , - 164 , - 1863 , - 4450 , - 3189 , - 2816 , - 3331 , - 4734 , - 2289 , - 732 , - 63 , - 282 , - 1389 , - 3384 , - 1531 , - 566 , - 489 , - 1300 , - 2999 , - 850 , - 4325 , - 3952 , - 4467 , - 1134 , - 3425 , - 1868 , - 1199 , - 1418 , - 2525 , - 4520 , - 2667 , - 1702 , - 1625 , - 2436 , - 4135 , - 1986 , - 725 , - 352 , - 867 , - 2270 , - 4561 , - 3004 , - 2335 , - 2554 , - 3661 , - 920 , - 3803 , - 2838 , - 2761 , - 3572 , - 535 , - 3122 , - 1861 , - 1488 , - 2003 , - 3406 , - 961 , - 4140 , - 3471 , - 3690 , - 61 , - 2056 , - 203 , - 3974 , - 3897 , - 4708 , - 1671 , - 4258 , - 2997 , - 2624 , - 3139 , - 4542 , - 2097 , - 540 , - 4607 , - 90 , - 1197 , - 3192 , - 1339 , - 374 , - 297 , - 1108 , - 2807 , - 658 , - 4133 , - 3760 , - 4275 , - 942 , - 3233 , - 1676 , - 1007 , - 1226 , - 2333 , - 4328 , - 2475 , - 1510 , - 1433 , - 2244 , - 3943 , - 1794 , - 533 , - 160 , - 675 , - 2078 , - 4369 , - 2812 , - 2143 , - 2362 , - 3469 , - 728 , - 3611 , - 2646 , - 2569 , - 3380 , - 343 , - 2930 , - 1669 , - 1296 , - 1811 , - 3214 , - 769 , - 3948 , - 3279 , - 3498 , - 4605 , - 1864 , - 11 , - 3782 , - 3705 , - 4516 , - 1479 , - 4066 , - 2805 , - 2432 , - 2947 , - 4350 , - 1905 , - 348 , - 4415 , - 4634 , - 1005 , - 3000 , - 1147 , - 182 , - 105 , - 916 , - 2615 , - 466 , - 3941 , - 3568 , - 4083 , - 750 , - 3041 , - 1484 , - 815 , - 1034 , - 2141 , - 4136 , - 2283 , - 1318 , - 1241 , - 2052 , - 3751 , - 1602 , - 341 , - 4704 , - 483 , - 1886 , - 4177 , - 2620 , - 1951 , - 2170 , - 3277 , - 536 , - 3419 , - 2454 , - 2377 , - 3188 , - 151 , - 2738 , - 1477 , - 1104 , - 1619 , - 3022 , - 577 , - 3756 , - 3087 , - 3306 , - 4413 , - 1672 , - 4555 , - 3590 , - 3513 , - 4324 , - 1287 , - 3874 , - 2613 , - 2240 , - 2755 , - 4158 , - 1713 , - 156 , - 4223 , - 4442 , - 813 , - 2808 , - 955 , - 4726 , - 4649 , - 724 , - 2423 , - 274 , - 3749 , - 3376 , - 3891 , - 558 , - 2849 , - 1292 , - 623 , - 842 , - 1949 , - 3944 , - 2091 , - 1126 , - 1049 , - 1860 , - 3559 , - 1410 , - 149 , - 4512 , - 291 , - 1694 , - 3985 , - 2428 , - 1759 , - 1978 , - 3085 , - 344 , - 3227 , - 2262 , - 2185 , - 2996 , - 4695 , - 2546 , - 1285 , - 912 , - 1427 , - 2830 , - 385 , - 3564 , - 2895 , - 3114 , - 4221 , - 1480 , - 4363 , - 3398 , - 3321 , - 4132 , - 1095 , - 3682 , - 2421 , - 2048 , - 2563 , - 3966 , - 1521 , - 4700 , - 4031 , - 4250 , - 621 , - 2616 , - 763 , - 4534 , - 4457 , - 532 , - 2231 , - 82 , - 3557 , - 3184 , - 3699 , - 366 , - 2657 , - 1100 , - 431 , - 650 , - 1757 , - 3752 , - 1899 , - 934 , - 857 , - 1668 , - 3367 , - 1218 , - 4693 , - 4320 , - 99 , - 1502 , - 3793 , - 2236 , - 1567 , - 1786 , - 2893 , - 152 , - 3035 , - 2070 , - 1993 , - 2804 , - 4503 , - 2354 , - 1093 , - 720 , - 1235 , - 2638 , - 193 , - 3372 , - 2703 , - 2922 , - 4029 , - 1288 , - 4171 , - 3206 , - 3129 , - 3940 , - 903 , - 3490 , - 2229 , - 1856 , - 2371 , - 3774 , - 1329 , - 4508 , - 3839 , - 4058 , - 429 , - 2424 , - 571 , - 4342 , - 4265 , - 340 , - 2039 , - 4626 , - 3365 , - 2992 , - 3507 , - 174 , - 2465 , - 908 , - 239 , - 458 , - 1565 , - 3560 , - 1707 , - 742 , - 665 , - 1476 , - 3175 , - 1026 , - 4501 , - 4128 , - 4643 , - 1310 , - 3601 , - 2044 , - 1375 , - 1594 , - 2701 , - 4696 , - 2843 , - 1878 , - 1801 , - 2612 , - 4311 , - 2162 , - 901 , - 528 , - 1043 , - 2446 , - 1 , - 3180 , - 2511 , - 2730 , - 3837 , - 1096 , - 3979 , - 3014 , - 2937 , - 3748 , - 711 , - 3298 , - 2037 , - 1664 , - 2179 , - 3582 , - 1137 , - 4316 , - 3647 , - 3866 , - 237 , - 2232 , - 379 , - 4150 , - 4073 , - 148 , - 1847 , - 4434 , - 3173 , - 2800 , - 3315 , - 4718 , - 2273 , - 716 , - 47 , - 266 , - 1373 , - 3368 , - 1515 , - 550 , - 473 , - 1284 , - 2983 , - 834 , - 4309 , - 3936 , - 4451 , - 1118 , - 3409 , - 1852 , - 1183 , - 1402 , - 2509 , - 4504 , - 2651 , - 1686 , - 1609 , - 2420 , - 4119 , - 1970 , - 709 , - 336 , - 851 , - 2254 , - 4545 , - 2988 , - 2319 , - 2538 , - 3645 , - 904 , - 3787 , - 2822 , - 2745 , - 3556 , - 519 , - 3106 , - 1845 , - 1472 , - 1987 , - 3390 , - 945 , - 4124 , - 3455 , - 3674 , - 45 , - 2040 , - 187 , - 3958 , - 3881 , - 4692 , - 1655 , - 4242 , - 2981 , - 2608 , - 3123 , - 4526 , - 2081 , - 524 , - 4591 , - 74 , - 1181 , - 3176 , - 1323 , - 358 , - 281 , - 1092 , - 2791 , - 642 , - 4117 , - 3744 , - 4259 , - 926 , - 3217 , - 1660 , - 991 , - 1210 , - 2317 , - 4312 , - 2459 , - 1494 , - 1417 , - 2228 , - 3927 , - 1778 , - 517 , - 144 , - 659 , - 2062 , - 4353 , - 2796 , - 2127 , - 2346 , - 3453 , - 712 , - 3595 , - 2630 , - 2553 , - 3364 , - 327 , - 2914 , - 1653 , - 1280 , - 1795 , - 3198 , - 753 , - 3932 , - 3263 , - 3482 , - 4589 , - 1848 , - 4731 , - 3766 , - 3689 , - 4500 , - 1463 , - 4050 , - 2789 , - 2416 , - 2931 , - 4334 , - 1889 , - 332 , - 4399 , - 4618 , - 989 , - 2984 , - 1131 , - 166 , - 89 , - 900 , - 2599 , - 450 , - 3925 , - 3552 , - 4067 , - 734 , - 3025 , - 1468 , - 799 , - 1018 , - 2125 , - 4120 , - 2267 , - 1302 , - 1225 , - 2036 , - 3735 , - 1586 , - 325 , - 4688 , - 467 , - 1870 , - 4161 , - 2604 , - 1935 , - 2154 , - 3261 , - 520 , - 3403 , - 2438 , - 2361 , - 3172 , - 135 , - 2722 , - 1461 , - 1088 , - 1603 , - 3006 , - 561 , - 3740 , - 3071 , - 3290 , - 4397 , - 1656 , - 4539 , - 3574 , - 3497 , - 4308 , - 1271 , - 3858 , - 2597 , - 2224 , - 2739 , - 4142 , - 1697 , - 140 , - 4207 , - 4426 , - 797 , - 2792 , - 939 , - 4710 , - 4633 , - 708 , - 2407 , - 258 , - 3733 , - 3360 , - 3875 , - 542 , - 2833 , - 1276 , - 607 , - 826 , - 1933 , - 3928 , - 2075 , - 1110 , - 1033 , - 1844 , - 3543 , - 1394 , - 133 , - 4496 , - 275 , - 1678 , - 3969 , - 2412 , - 1743 , - 1962 , - 3069 , - 328 , - 3211 , - 2246 , - 2169 , - 2980 , - 4679 , - 2530 , - 1269 , - 896 , - 1411 , - 2814 , - 369 , - 3548 , - 2879 , - 3098 , - 4205 , - 1464 , - 4347 , - 3382 , - 3305 , - 4116 , - 1079 , - 3666 , - 2405 , - 2032 , - 2547 , - 3950 , - 1505 , - 4684 , - 4015 , - 4234 , - 605 , - 2600 , - 747 , - 4518 , - 4441 , - 516 , - 2215 , - 66 , - 3541 , - 3168 , - 3683 , - 350 , - 2641 , - 1084 , - 415 , - 634 , - 1741 , - 3736 , - 1883 , - 918 , - 841 , - 1652 , - 3351 , - 1202 , - 4677 , - 4304 , - 83 , - 1486 , - 3777 , - 2220 , - 1551 , - 1770 , - 2877 , - 136 , - 3019 , - 2054 , - 1977 , - 2788 , - 4487 , - 2338 , - 1077 , - 704 , - 1219 , - 2622 , - 177 , - 3356 , - 2687 , - 2906 , - 4013 , - 1272 , - 4155 , - 3190 , - 3113 , - 3924 , - 887 , - 3474 , - 2213 , - 1840 , - 2355 , - 3758 , - 1313 , - 4492 , - 3823 , - 4042 , - 413 , - 2408 , - 555 , - 4326 , - 4249 , - 324 , - 2023 , - 4610 , - 3349 , - 2976 , - 3491 , - 158 , - 2449 , - 892 , - 223 , - 442 , - 1549 , - 3544 , - 1691 , - 726 , - 649 , - 1460 , - 3159 , - 1010 , - 4485 , - 4112 , - 4627 , - 1294 , - 3585 , - 2028 , - 1359 , - 1578 , - 2685 , - 4680 , - 2827 , - 1862 , - 1785 , - 2596 , - 4295 , - 2146 , - 885 , - 512 , - 1027 , - 2430 , - 4721 , - 3164 , - 2495 , - 2714 , - 3821 , - 1080 , - 3963 , - 2998 , - 2921 , - 3732 , - 695 , - 3282 , - 2021 , - 1648 , - 2163 , - 3566 , - 1121 , - 4300 , - 3631 , - 3850 , - 221 , - 2216 , - 363 , - 4134 , - 4057 , - 132 , - 1831 , - 4418 , - 3157 , - 2784 , - 3299 , - 4702 , - 2257 , - 700 , - 31 , - 250 , - 1357 , - 3352 , - 1499 , - 534 , - 457 , - 1268 , - 2967 , - 818 , - 4293 , - 3920 , - 4435 , - 1102 , - 3393 , - 1836 , - 1167 , - 1386 , - 2493 , - 4488 , - 2635 , - 1670 , - 1593 , - 2404 , - 4103 , - 1954 , - 693 , - 320 , - 835 , - 2238 , - 4529 , - 2972 , - 2303 , - 2522 , - 3629 , - 888 , - 3771 , - 2806 , - 2729 , - 3540 , - 503 , - 3090 , - 1829 , - 1456 , - 1971 , - 3374 , - 929 , - 4108 , - 3439 , - 3658 , - 29 , - 2024 , - 171 , - 3942 , - 3865 , - 4676 , - 1639 , - 4226 , - 2965 , - 2592 , - 3107 , - 4510 , - 2065 , - 508 , - 4575 , - 58 , - 1165 , - 3160 , - 1307 , - 342 , - 265 , - 1076 , - 2775 , - 626 , - 4101 , - 3728 , - 4243 , - 910 , - 3201 , - 1644 , - 975 , - 1194 , - 2301 , - 4296 , - 2443 , - 1478 , - 1401 , - 2212 , - 3911 , - 1762 , - 501 , - 128 , - 643 , - 2046 , - 4337 , - 2780 , - 2111 , - 2330 , - 3437 , - 696 , - 3579 , - 2614 , - 2537 , - 3348 , - 311 , - 2898 , - 1637 , - 1264 , - 1779 , - 3182 , - 737 , - 3916 , - 3247 , - 3466 , - 4573 , - 1832 , - 4715 , - 3750 , - 3673 , - 4484 , - 1447 , - 4034 , - 2773 , - 2400 , - 2915 , - 4318 , - 1873 , - 316 , - 4383 , - 4602 , - 973 , - 2968 , - 1115 , - 150 , - 73 , - 884 , - 2583 , - 434 , - 3909 , - 3536 , - 4051 , - 718 , - 3009 , - 1452 , - 783 , - 1002 , - 2109 , - 4104 , - 2251 , - 1286 , - 1209 , - 2020 , - 3719 , - 1570 , - 309 , - 4672 , - 451 , - 1854 , - 4145 , - 2588 , - 1919 , - 2138 , - 3245 , - 504 , - 3387 , - 2422 , - 2345 , - 3156 , - 119 , - 2706 , - 1445 , - 1072 , - 1587 , - 2990 , - 545 , - 3724 , - 3055 , - 3274 , - 4381 , - 1640 , - 4523 , - 3558 , - 3481 , - 4292 , - 1255 , - 3842 , - 2581 , - 2208 , - 2723 , - 4126 , - 1681 , - 124 , - 4191 , - 4410 , - 781 , - 2776 , - 923 , - 4694 , - 4617 , - 692 , - 2391 , - 242 , - 3717 , - 3344 , - 3859 , - 526 , - 2817 , - 1260 , - 591 , - 810 , - 1917 , - 3912 , - 2059 , - 1094 , - 1017 , - 1828 , - 3527 , - 1378 , - 117 , - 4480 , - 259 , - 1662 , - 3953 , - 2396 , - 1727 , - 1946 , - 3053 , - 312 , - 3195 , - 2230 , - 2153 , - 2964 , - 4663 , - 2514 , - 1253 , - 880 , - 1395 , - 2798 , - 353 , - 3532 , - 2863 , - 3082 , - 4189 , - 1448 , - 4331 , - 3366 , - 3289 , - 4100 , - 1063 , - 3650 , - 2389 , - 2016 , - 2531 , - 3934 , - 1489 , - 4668 , - 3999 , - 4218 , - 589 , - 2584 , - 731 , - 4502 , - 4425 , - 500 , - 2199 , - 50 , - 3525 , - 3152 , - 3667 , - 334 , - 2625 , - 1068 , - 399 , - 618 , - 1725 , - 3720 , - 1867 , - 902 , - 825 , - 1636 , - 3335 , - 1186 , - 4661 , - 4288 , - 67 , - 1470 , - 3761 , - 2204 , - 1535 , - 1754 , - 2861 , - 120 , - 3003 , - 2038 , - 1961 , - 2772 , - 4471 , - 2322 , - 1061 , - 688 , - 1203 , - 2606 , - 161 , - 3340 , - 2671 , - 2890 , - 3997 , - 1256 , - 4139 , - 3174 , - 3097 , - 3908 , - 871 , - 3458 , - 2197 , - 1824 , - 2339 , - 3742 , - 1297 , - 4476 , - 3807 , - 4026 , - 397 , - 2392 , - 539 , - 4310 , - 4233 , - 308 , - 2007 , - 4594 , - 3333 , - 2960 , - 3475 , - 142 , - 2433 , - 876 , - 207 , - 426 , - 1533 , - 3528 , - 1675 , - 710 , - 633 , - 1444 , - 3143 , - 994 , - 4469 , - 4096 , - 4611 , - 1278 , - 3569 , - 2012 , - 1343 , - 1562 , - 2669 , - 4664 , - 2811 , - 1846 , - 1769 , - 2580 , - 4279 , - 2130 , - 869 , - 496 , - 1011 , - 2414 , - 4705 , - 3148 , - 2479 , - 2698 , - 3805 , - 1064 , - 3947 , - 2982 , - 2905 , - 3716 , - 679 , - 3266 , - 2005 , - 1632 , - 2147 , - 3550 , - 1105 , - 4284 , - 3615 , - 3834 , - 205 , - 2200 , - 347 , - 4118 , - 4041 , - 116 , - 1815 , - 4402 , - 3141 , - 2768 , - 3283 , - 4686 , - 2241 , - 684 , - 15 , - 234 , - 1341 , - 3336 , - 1483 , - 518 , - 441 , - 1252 , - 2951 , - 802 , - 4277 , - 3904 , - 4419 , - 1086 , - 3377 , - 1820 , - 1151 , - 1370 , - 2477 , - 4472 , - 2619 , - 1654 , - 1577 , - 2388 , - 4087 , - 1938 , - 677 , - 304 , - 819 , - 2222 , - 4513 , - 2956 , - 2287 , - 2506 , - 3613 , - 872 , - 3755 , - 2790 , - 2713 , - 3524 , - 487 , - 3074 , - 1813 , - 1440 , - 1955 , - 3358 , - 913 , - 4092 , - 3423 , - 3642 , - 13 , - 2008 , - 155 , - 3926 , - 3849 , - 4660 , - 1623 , - 4210 , - 2949 , - 2576 , - 3091 , - 4494 , - 2049 , - 492 , - 4559 , - 42 , - 1149 , - 3144 , - 1291 , - 326 , - 249 , - 1060 , - 2759 , - 610 , - 4085 , - 3712 , - 4227 , - 894 , - 3185 , - 1628 , - 959 , - 1178 , - 2285 , - 4280 , - 2427 , - 1462 , - 1385 , - 2196 , - 3895 , - 1746 , - 485 , - 112 , - 627 , - 2030 , - 4321 , - 2764 , - 2095 , - 2314 , - 3421 , - 680 , - 3563 , - 2598 , - 2521 , - 3332 , - 295 , - 2882 , - 1621 , - 1248 , - 1763 , - 3166 , - 721 , - 3900 , - 3231 , - 3450 , - 4557 , - 1816 , - 4699 , - 3734 , - 3657 , - 4468 , - 1431 , - 4018 , - 2757 , - 2384 , - 2899 , - 4302 , - 1857 , - 300 , - 4367 , - 4586 , - 957 , - 2952 , - 1099 , - 134 , - 57 , - 868 , - 2567 , - 418 , - 3893 , - 3520 , - 4035 , - 702 , - 2993 , - 1436 , - 767 , - 986 , - 2093 , - 4088 , - 2235 , - 1270 , - 1193 , - 2004 , - 3703 , - 1554 , - 293 , - 4656 , - 435 , - 1838 , - 4129 , - 2572 , - 1903 , - 2122 , - 3229 , - 488 , - 3371 , - 2406 , - 2329 , - 3140 , - 103 , - 2690 , - 1429 , - 1056 , - 1571 , - 2974 , - 529 , - 3708 , - 3039 , - 3258 , - 4365 , - 1624 , - 4507 , - 3542 , - 3465 , - 4276 , - 1239 , - 3826 , - 2565 , - 2192 , - 2707 , - 4110 , - 1665 , - 108 , - 4175 , - 4394 , - 765 , - 2760 , - 907 , - 4678 , - 4601 , - 676 , - 2375 , - 226 , - 3701 , - 3328 , - 3843 , - 510 , - 2801 , - 1244 , - 575 , - 794 , - 1901 , - 3896 , - 2043 , - 1078 , - 1001 , - 1812 , - 3511 , - 1362 , - 101 , - 4464 , - 243 , - 1646 , - 3937 , - 2380 , - 1711 , - 1930 , - 3037 , - 296 , - 3179 , - 2214 , - 2137 , - 2948 , - 4647 , - 2498 , - 1237 , - 864 , - 1379 , - 2782 , - 337 , - 3516 , - 2847 , - 3066 , - 4173 , - 1432 , - 4315 , - 3350 , - 3273 , - 4084 , - 1047 , - 3634 , - 2373 , - 2000 , - 2515 , - 3918 , - 1473 , - 4652 , - 3983 , - 4202 , - 573 , - 2568 , - 715 , - 4486 , - 4409 , - 484 , - 2183 , - 34 , - 3509 , - 3136 , - 3651 , - 318 , - 2609 , - 1052 , - 383 , - 602 , - 1709 , - 3704 , - 1851 , - 886 , - 809 , - 1620 , - 3319 , - 1170 , - 4645 , - 4272 , - 51 , - 1454 , - 3745 , - 2188 , - 1519 , - 1738 , - 2845 , - 104 , - 2987 , - 2022 , - 1945 , - 2756 , - 4455 , - 2306 , - 1045 , - 672 , - 1187 , - 2590 , - 145 , - 3324 , - 2655 , - 2874 , - 3981 , - 1240 , - 4123 , - 3158 , - 3081 , - 3892 , - 855 , - 3442 , - 2181 , - 1808 , - 2323 , - 3726 , - 1281 , - 4460 , - 3791 , - 4010 , - 381 , - 2376 , - 523 , - 4294 , - 4217 , - 292 , - 1991 , - 4578 , - 3317 , - 2944 , - 3459 , - 126 , - 2417 , - 860 , - 191 , - 410 , - 1517 , - 3512 , - 1659 , - 694 , - 617 , - 1428 , - 3127 , - 978 , - 4453 , - 4080 , - 4595 , - 1262 , - 3553 , - 1996 , - 1327 , - 1546 , - 2653 , - 4648 , - 2795 , - 1830 , - 1753 , - 2564 , - 4263 , - 2114 , - 853 , - 480 , - 995 , - 2398 , - 4689 , - 3132 , - 2463 , - 2682 , - 3789 , - 1048 , - 3931 , - 2966 , - 2889 , - 3700 , - 663 , - 3250 , - 1989 , - 1616 , - 2131 , - 3534 , - 1089 , - 4268 , - 3599 , - 3818 , - 189 , - 2184 , - 331 , - 4102 , - 4025 , - 100 , - 1799 , - 4386 , - 3125 , - 2752 , - 3267 , - 4670 , - 2225 , - 668 , - 4735 , - 218 , - 1325 , - 3320 , - 1467 , - 502 , - 425 , - 1236 , - 2935 , - 786 , - 4261 , - 3888 , - 4403 , - 1070 , - 3361 , - 1804 , - 1135 , - 1354 , - 2461 , - 4456 , - 2603 , - 1638 , - 1561 , - 2372 , - 4071 , - 1922 , - 661 , - 288 , - 803 , - 2206 , - 4497 , - 2940 , - 2271 , - 2490 , - 3597 , - 856 , - 3739 , - 2774 , - 2697 , - 3508 , - 471 , - 3058 , - 1797 , - 1424 , - 1939 , - 3342 , - 897 , - 4076 , - 3407 , - 3626 , - 4733 , - 1992 , - 139 , - 3910 , - 3833 , - 4644 , - 1607 , - 4194 , - 2933 , - 2560 , - 3075 , - 4478 , - 2033 , - 476 , - 4543 , - 26 , - 1133 , - 3128 , - 1275 , - 310 , - 233 , - 1044 , - 2743 , - 594 , - 4069 , - 3696 , - 4211 , - 878 , - 3169 , - 1612 , - 943 , - 1162 , - 2269 , - 4264 , - 2411 , - 1446 , - 1369 , - 2180 , - 3879 , - 1730 , - 469 , - 96 , - 611 , - 2014 , - 4305 , - 2748 , - 2079 , - 2298 , - 3405 , - 664 , - 3547 , - 2582 , - 2505 , - 3316 , - 279 , - 2866 , - 1605 , - 1232 , - 1747 , - 3150 , - 705 , - 3884 , - 3215 , - 3434 , - 4541 , - 1800 , - 4683 , - 3718 , - 3641 , - 4452 , - 1415 , - 4002 , - 2741 , - 2368 , - 2883 , - 4286 , - 1841 , - 284 , - 4351 , - 4570 , - 941 , - 2936 , - 1083 , - 118 , - 41 , - 852 , - 2551 , - 402 , - 3877 , - 3504 , - 4019 , - 686 , - 2977 , - 1420 , - 751 , - 970 , - 2077 , - 4072 , - 2219 , - 1254 , - 1177 , - 1988 , - 3687 , - 1538 , - 277 , - 4640 , - 419 , - 1822 , - 4113 , - 2556 , - 1887 , - 2106 , - 3213 , - 472 , - 3355 , - 2390 , - 2313 , - 3124 , - 87 , - 2674 , - 1413 , - 1040 , - 1555 , - 2958 , - 513 , - 3692 , - 3023 , - 3242 , - 4349 , - 1608 , - 4491 , - 3526 , - 3449 , - 4260 , - 1223 , - 3810 , - 2549 , - 2176 , - 2691 , - 4094 , - 1649 , - 92 , - 4159 , - 4378 , - 749 , - 2744 , - 891 , - 4662 , - 4585 , - 660 , - 2359 , - 210 , - 3685 , - 3312 , - 3827 , - 494 , - 2785 , - 1228 , - 559 , - 778 , - 1885 , - 3880 , - 2027 , - 1062 , - 985 , - 1796 , - 3495 , - 1346 , - 85 , - 4448 , - 227 , - 1630 , - 3921 , - 2364 , - 1695 , - 1914 , - 3021 , - 280 , - 3163 , - 2198 , - 2121 , - 2932 , - 4631 , - 2482 , - 1221 , - 848 , - 1363 , - 2766 , - 321 , - 3500 , - 2831 , - 3050 , - 4157 , - 1416 , - 4299 , - 3334 , - 3257 , - 4068 , - 1031 , - 3618 , - 2357 , - 1984 , - 2499 , - 3902 , - 1457 , - 4636 , - 3967 , - 4186 , - 557 , - 2552 , - 699 , - 4470 , - 4393 , - 468 , - 2167 , - 18 , - 3493 , - 3120 , - 3635 , - 302 , - 2593 , - 1036 , - 367 , - 586 , - 1693 , - 3688 , - 1835 , - 870 , - 793 , - 1604 , - 3303 , - 1154 , - 4629 , - 4256 , - 35 , - 1438 , - 3729 , - 2172 , - 1503 , - 1722 , - 2829 , - 88 , - 2971 , - 2006 , - 1929 , - 2740 , - 4439 , - 2290 , - 1029 , - 656 , - 1171 , - 2574 , - 129 , - 3308 , - 2639 , - 2858 , - 3965 , - 1224 , - 4107 , - 3142 , - 3065 , - 3876 , - 839 , - 3426 , - 2165 , - 1792 , - 2307 , - 3710 , - 1265 , - 4444 , - 3775 , - 3994 , - 365 , - 2360 , - 507 , - 4278 , - 4201 , - 276 , - 1975 , - 4562 , - 3301 , - 2928 , - 3443 , - 110 , - 2401 , - 844 , - 175 , - 394 , - 1501 , - 3496 , - 1643 , - 678 , - 601 , - 1412 , - 3111 , - 962 , - 4437 , - 4064 , - 4579 , - 1246 , - 3537 , - 1980 , - 1311 , - 1530 , - 2637 , - 4632 , - 2779 , - 1814 , - 1737 , - 2548 , - 4247 , - 2098 , - 837 , - 464 , - 979 , - 2382 , - 4673 , - 3116 , - 2447 , - 2666 , - 3773 , - 1032 , - 3915 , - 2950 , - 2873 , - 3684 , - 647 , - 3234 , - 1973 , - 1600 , - 2115 , - 3518 , - 1073 , - 4252 , - 3583 , - 3802 , - 173 , - 2168 , - 315 , - 4086 , - 4009 , - 84 , - 1783 , - 4370 , - 3109 , - 2736 , - 3251 , - 4654 , - 2209 , - 652 , - 4719 , - 202 , - 1309 , - 3304 , - 1451 , - 486 , - 409 , - 1220 , - 2919 , - 770 , - 4245 , - 3872 , - 4387 , - 1054 , - 3345 , - 1788 , - 1119 , - 1338 , - 2445 , - 4440 , - 2587 , - 1622 , - 1545 , - 2356 , - 4055 , - 1906 , - 645 , - 272 , - 787 , - 2190 , - 4481 , - 2924 , - 2255 , - 2474 , - 3581 , - 840 , - 3723 , - 2758 , - 2681 , - 3492 , - 455 , - 3042 , - 1781 , - 1408 , - 1923 , - 3326 , - 881 , - 4060 , - 3391 , - 3610 , - 4717 , - 1976 , - 123 , - 3894 , - 3817 , - 4628 , - 1591 , - 4178 , - 2917 , - 2544 , - 3059 , - 4462 , - 2017 , - 460 , - 4527 , - 10 , - 1117 , - 3112 , - 1259 , - 294 , - 217 , - 1028 , - 2727 , - 578 , - 4053 , - 3680 , - 4195 , - 862 , - 3153 , - 1596 , - 927 , - 1146 , - 2253 , - 4248 , - 2395 , - 1430 , - 1353 , - 2164 , - 3863 , - 1714 , - 453 , - 80 , - 595 , - 1998 , - 4289 , - 2732 , - 2063 , - 2282 , - 3389 , - 648 , - 3531 , - 2566 , - 2489 , - 3300 , - 263 , - 2850 , - 1589 , - 1216 , - 1731 , - 3134 , - 689 , - 3868 , - 3199 , - 3418 , - 4525 , - 1784 , - 4667 , - 3702 , - 3625 , - 4436 , - 1399 , - 3986 , - 2725 , - 2352 , - 2867 , - 4270 , - 1825 , - 268 , - 4335 , - 4554 , - 925 , - 2920 , - 1067 , - 102 , - 25 , - 836 , - 2535 , - 386 , - 3861 , - 3488 , - 4003 , - 670 , - 2961 , - 1404 , - 735 , - 954 , - 2061 , - 4056 , - 2203 , - 1238 , - 1161 , - 1972 , - 3671 , - 1522 , - 261 , - 4624 , - 403 , - 1806 , - 4097 , - 2540 , - 1871 , - 2090 , - 3197 , - 456 , - 3339 , - 2374 , - 2297 , - 3108 , - 71 , - 2658 , - 1397 , - 1024 , - 1539 , - 2942 , - 497 , - 3676 , - 3007 , - 3226 , - 4333 , - 1592 , - 4475 , - 3510 , - 3433 , - 4244 , - 1207 , - 3794 , - 2533 , - 2160 , - 2675 , - 4078 , - 1633 , - 76 , - 4143 , - 4362 , - 733 , - 2728 , - 875 , - 4646 , - 4569 , - 644 , - 2343 , - 194 , - 3669 , - 3296 , - 3811 , - 478 , - 2769 , - 1212 , - 543 , - 762 , - 1869 , - 3864 , - 2011 , - 1046 , - 969 , - 1780 , - 3479 , - 1330 , - 69 , - 4432 , - 211 , - 1614 , - 3905 , - 2348 , - 1679 , - 1898 , - 3005 , - 264 , - 3147 , - 2182 , - 2105 , - 2916 , - 4615 , - 2466 , - 1205 , - 832 , - 1347 , - 2750 , - 305 , - 3484 , - 2815 , - 3034 , - 4141 , - 1400 , - 4283 , - 3318 , - 3241 , - 4052 , - 1015 , - 3602 , - 2341 , - 1968 , - 2483 , - 3886 , - 1441 , - 4620 , - 3951 , - 4170 , - 541 , - 2536 , - 683 , - 4454 , - 4377 , - 452 , - 2151 , - 2 , - 3477 , - 3104 , - 3619 , - 286 , - 2577 , - 1020 , - 351 , - 570 , - 1677 , - 3672 , - 1819 , - 854 , - 777 , - 1588 , - 3287 , - 1138 , - 4613 , - 4240 , - 19 , - 1422 , - 3713 , - 2156 , - 1487 , - 1706 , - 2813 , - 72 , - 2955 , - 1990 , - 1913 , - 2724 , - 4423 , - 2274 , - 1013 , - 640 , - 1155 , - 2558 , - 113 , - 3292 , - 2623 , - 2842 , - 3949 , - 1208 , - 4091 , - 3126 , - 3049 , - 3860 , - 823 , - 3410 , - 2149 , - 1776 , - 2291 , - 3694 , - 1249 , - 4428 , - 3759 , - 3978 , - 349 , - 2344 , - 491 , - 4262 , - 4185 , - 260 , - 1959 , - 4546 , - 3285 , - 2912 , - 3427 , - 94 , - 2385 , - 828 , - 159 , - 378 , - 1485 , - 3480 , - 1627 , - 662 , - 585 , - 1396 , - 3095 , - 946 , - 4421 , - 4048 , - 4563 , - 1230 , - 3521 , - 1964 , - 1295 , - 1514 , - 2621 , - 4616 , - 2763 , - 1798 , - 1721 , - 2532 , - 4231 , - 2082 , - 821 , - 448 , - 963 , - 2366 , - 4657 , - 3100 , - 2431 , - 2650 , - 3757 , - 1016 , - 3899 , - 2934 , - 2857 , - 3668 , - 631 , - 3218 , - 1957 , - 1584 , - 2099 , - 3502 , - 1057 , - 4236 , - 3567 , - 3786 , - 157 , - 2152 , - 299 , - 4070 , - 3993 , - 68 , - 1767 , - 4354 , - 3093 , - 2720 , - 3235 , - 4638 , - 2193 , - 636 , - 4703 , - 186 , - 1293 , - 3288 , - 1435 , - 470 , - 393 , - 1204 , - 2903 , - 754 , - 4229 , - 3856 , - 4371 , - 1038 , - 3329 , - 1772 , - 1103 , - 1322 , - 2429 , - 4424 , - 2571 , - 1606 , - 1529 , - 2340 , - 4039 , - 1890 , - 629 , - 256 , - 771 , - 2174 , - 4465 , - 2908 , - 2239 , - 2458 , - 3565 , - 824 , - 3707 , - 2742 , - 2665 , - 3476 , - 439 , - 3026 , - 1765 , - 1392 , - 1907 , - 3310 , - 865 , - 4044 , - 3375 , - 3594 , - 4701 , - 1960 , - 107 , - 3878 , - 3801 , - 4612 , - 1575 , - 4162 , - 2901 , - 2528 , - 3043 , - 4446 , - 2001 , - 444 , - 4511 , - 4730 , - 1101 , - 3096 , - 1243 , - 278 , - 201 , - 1012 , - 2711 , - 562 , - 4037 , - 3664 , - 4179 , - 846 , - 3137 , - 1580 , - 911 , - 1130 , - 2237 , - 4232 , - 2379 , - 1414 , - 1337 , - 2148 , - 3847 , - 1698 , - 437 , - 64 , - 579 , - 1982 , - 4273 , - 2716 , - 2047 , - 2266 , - 3373 , - 632 , - 3515 , - 2550 , - 2473 , - 3284 , - 247 , - 2834 , - 1573 , - 1200 , - 1715 , - 3118 , - 673 , - 3852 , - 3183 , - 3402 , - 4509 , - 1768 , - 4651 , - 3686 , - 3609 , - 4420 , - 1383 , - 3970 , - 2709 , - 2336 , - 2851 , - 4254 , - 1809 , - 252 , - 4319 , - 4538 , - 909 , - 2904 , - 1051 , - 86 , - 9 , - 820 , - 2519 , - 370 , - 3845 , - 3472 , - 3987 , - 654 , - 2945 , - 1388 , - 719 , - 938 , - 2045 , - 4040 , - 2187 , - 1222 , - 1145 , - 1956 , - 3655 , - 1506 , - 245 , - 4608 , - 387 , - 1790 , - 4081 , - 2524 , - 1855 , - 2074 , - 3181 , - 440 , - 3323 , - 2358 , - 2281 , - 3092 , - 55 , - 2642 , - 1381 , - 1008 , - 1523 , - 2926 , - 481 , - 3660 , - 2991 , - 3210 , - 4317 , - 1576 , - 4459 , - 3494 , - 3417 , - 4228 , - 1191 , - 3778 , - 2517 , - 2144 , - 2659 , - 4062 , - 1617 , - 60 , - 4127 , - 4346 , - 717 , - 2712 , - 859 , - 4630 , - 4553 , - 628 , - 2327 , - 178 , - 3653 , - 3280 , - 3795 , - 462 , - 2753 , - 1196 , - 527 , - 746 , - 1853 , - 3848 , - 1995 , - 1030 , - 953 , - 1764 , - 3463 , - 1314 , - 53 , - 4416 , - 195 , - 1598 , - 3889 , - 2332 , - 1663 , - 1882 , - 2989 , - 248 , - 3131 , - 2166 , - 2089 , - 2900 , - 4599 , - 2450 , - 1189 , - 816 , - 1331 , - 2734 , - 289 , - 3468 , - 2799 , - 3018 , - 4125 , - 1384 , - 4267 , - 3302 , - 3225 , - 4036 , - 999 , - 3586 , - 2325 , - 1952 , - 2467 , - 3870 , - 1425 , - 4604 , - 3935 , - 4154 , - 525 , - 2520 , - 667 , - 4438 , - 4361 , - 436 , - 2135 , - 4722 , - 3461 , - 3088 , - 3603 , - 270 , - 2561 , - 1004 , - 335 , - 554 , - 1661 , - 3656 , - 1803 , - 838 , - 761 , - 1572 , - 3271 , - 1122 , - 4597 , - 4224 , - 3 , - 1406 , - 3697 , - 2140 , - 1471 , - 1690 , - 2797 , - 56 , - 2939 , - 1974 , - 1897 , - 2708 , - 4407 , - 2258 , - 997 , - 624 , - 1139 , - 2542 , - 97 , - 3276 , - 2607 , - 2826 , - 3933 , - 1192 , - 4075 , - 3110 , - 3033 , - 3844 , - 807 , - 3394 , - 2133 , - 1760 , - 2275 , - 3678 , - 1233 , - 4412 , - 3743 , - 3962 , - 333 , - 2328 , - 475 , - 4246 , - 4169 , - 244 , - 1943 , - 4530 , - 3269 , - 2896 , - 3411 , - 78 , - 2369 , - 812 , - 143 , - 362 , - 1469 , - 3464 , - 1611 , - 646 , - 569 , - 1380 , - 3079 , - 930 , - 4405 , - 4032 , - 4547 , - 1214 , - 3505 , - 1948 , - 1279 , - 1498 , - 2605 , - 4600 , - 2747 , - 1782 , - 1705 , - 2516 , - 4215 , - 2066 , - 805 , - 432 , - 947 , - 2350 , - 4641 , - 3084 , - 2415 , - 2634 , - 3741 , - 1000 , - 3883 , - 2918 , - 2841 , - 3652 , - 615 , - 3202 , - 1941 , - 1568 , - 2083 , - 3486 , - 1041 , - 4220 , - 3551 , - 3770 , - 141 , - 2136 , - 283 , - 4054 , - 3977 , - 52 , - 1751 , - 4338 , - 3077 , - 2704 , - 3219 , - 4622 , - 2177 , - 620 , - 4687 , - 170 , - 1277 , - 3272 , - 1419 , - 454 , - 377 , - 1188 , - 2887 , - 738 , - 4213 , - 3840 , - 4355 , - 1022 , - 3313 , - 1756 , - 1087 , - 1306 , - 2413 , - 4408 , - 2555 , - 1590 , - 1513 , - 2324 , - 4023 , - 1874 , - 613 , - 240 , - 755 , - 2158 , - 4449 , - 2892 , - 2223 , - 2442 , - 3549 , - 808 , - 3691 , - 2726 , - 2649 , - 3460 , - 423 , - 3010 , - 1749 , - 1376 , - 1891 , - 3294 , - 849 , - 4028 , - 3359 , - 3578 , - 4685 , - 1944 , - 91 , - 3862 , - 3785 , - 4596 , - 1559 , - 4146 , - 2885 , - 2512 , - 3027 , - 4430 , - 1985 , - 428 , - 4495 , - 4714 , - 1085 , - 3080 , - 1227 , - 262 , - 185 , - 996 , - 2695 , - 546 , - 4021 , - 3648 , - 4163 , - 830 , - 3121 , - 1564 , - 895 , - 1114 , - 2221 , - 4216 , - 2363 , - 1398 , - 1321 , - 2132 , - 3831 , - 1682 , - 421 , - 48 , - 563 , - 1966 , - 4257 , - 2700 , - 2031 , - 2250 , - 3357 , - 616 , - 3499 , - 2534 , - 2457 , - 3268 , - 231 , - 2818 , - 1557 , - 1184 , - 1699 , - 3102 , - 657 , - 3836 , - 3167 , - 3386 , - 4493 , - 1752 , - 4635 , - 3670 , - 3593 , - 4404 , - 1367 , - 3954 , - 2693 , - 2320 , - 2835 , - 4238 , - 1793 , - 236 , - 4303 , - 4522 , - 893 , - 2888 , - 1035 , - 70 , - 4729 , - 804 , - 2503 , - 354 , - 3829 , - 3456 , - 3971 , - 638 , - 2929 , - 1372 , - 703 , - 922 , - 2029 , - 4024 , - 2171 , - 1206 , - 1129 , - 1940 , - 3639 , - 1490 , - 229 , - 4592 , - 371 , - 1774 , - 4065 , - 2508 , - 1839 , - 2058 , - 3165 , - 424 , - 3307 , - 2342 , - 2265 , - 3076 , - 39 , - 2626 , - 1365 , - 992 , - 1507 , - 2910 , - 465 , - 3644 , - 2975 , - 3194 , - 4301 , - 1560 , - 4443 , - 3478 , - 3401 , - 4212 , - 1175 , - 3762 , - 2501 , - 2128 , - 2643 , - 4046 , - 1601 , - 44 , - 4111 , - 4330 , - 701 , - 2696 , - 843 , - 4614 , - 4537 , - 612 , - 2311 , - 162 , - 3637 , - 3264 , - 3779 , - 446 , - 2737 , - 1180 , - 511 , - 730 , - 1837 , - 3832 , - 1979 , - 1014 , - 937 , - 1748 , - 3447 , - 1298 , - 37 , - 4400 , - 179 , - 1582 , - 3873 , - 2316 , - 1647 , - 1866 , - 2973 , - 232 , - 3115 , - 2150 , - 2073 , - 2884 , - 4583 , - 2434 , - 1173 , - 800 , - 1315 , - 2718 , - 273 , - 3452 , - 2783 , - 3002 , - 4109 , - 1368 , - 4251 , - 3286 , - 3209 , - 4020 , - 983 , - 3570 , - 2309 , - 1936 , - 2451 , - 3854 , - 1409 , - 4588 , - 3919 , - 4138 , - 509 , - 2504 , - 651 , - 4422 , - 4345 , - 420 , - 2119 , - 4706 , - 3445 , - 3072 , - 3587 , - 254 , - 2545 , - 988 , - 319 , - 538 , - 1645 , - 3640 , - 1787 , - 822 , - 745 , - 1556 , - 3255 , - 1106 , - 4581 , - 4208 , - 4723 , - 1390 , - 3681 , - 2124 , - 1455 , - 1674 , - 2781 , - 40 , - 2923 , - 1958 , - 1881 , - 2692 , - 4391 , - 2242 , - 981 , - 608 , - 1123 , - 2526 , - 81 , - 3260 , - 2591 , - 2810 , - 3917 , - 1176 , - 4059 , - 3094 , - 3017 , - 3828 , - 791 , - 3378 , - 2117 , - 1744 , - 2259 , - 3662 , - 1217 , - 4396 , - 3727 , - 3946 , - 317 , - 2312 , - 459 , - 4230 , - 4153 , - 228 , - 1927 , - 4514 , - 3253 , - 2880 , - 3395 , - 62 , - 2353 , - 796 , - 127 , - 346 , - 1453 , - 3448 , - 1595 , - 630 , - 553 , - 1364 , - 3063 , - 914 , - 4389 , - 4016 , - 4531 , - 1198 , - 3489 , - 1932 , - 1263 , - 1482 , - 2589 , - 4584 , - 2731 , - 1766 , - 1689 , - 2500 , - 4199 , - 2050 , - 789 , - 416 , - 931 , - 2334 , - 4625 , - 3068 , - 2399 , - 2618 , - 3725 , - 984 , - 3867 , - 2902 , - 2825 , - 3636 , - 599 , - 3186 , - 1925 , - 1552 , - 2067 , - 3470 , - 1025 , - 4204 , - 3535 , - 3754 , - 125 , - 2120 , - 267 , - 4038 , - 3961 , - 36 , - 1735 , - 4322 , - 3061 , - 2688 , - 3203 , - 4606 , - 2161 , - 604 , - 4671 , - 154 , - 1261 , - 3256 , - 1403 , - 438 , - 361 , - 1172 , - 2871 , - 722 , - 4197 , - 3824 , - 4339 , - 1006 , - 3297 , - 1740 , - 1071 , - 1290 , - 2397 , - 4392 , - 2539 , - 1574 , - 1497 , - 2308 , - 4007 , - 1858 , - 597 , - 224 , - 739 , - 2142 , - 4433 , - 2876 , - 2207 , - 2426 , - 3533 , - 792 , - 3675 , - 2710 , - 2633 , - 3444 , - 407 , - 2994 , - 1733 , - 1360 , - 1875 , - 3278 , - 833 , - 4012 , - 3343 , - 3562 , - 4669 , - 1928 , - 75 , - 3846 , - 3769 , - 4580 , - 1543 , - 4130 , - 2869 , - 2496 , - 3011 , - 4414 , - 1969 , - 412 , - 4479 , - 4698 , - 1069 , - 3064 , - 1211 , - 246 , - 169 , - 980 , - 2679 , - 530 , - 4005 , - 3632 , - 4147 , - 814 , - 3105 , - 1548 , - 879 , - 1098 , - 2205 , - 4200 , - 2347 , - 1382 , - 1305 , - 2116 , - 3815 , - 1666 , - 405 , - 32 , - 547 , - 1950 , - 4241 , - 2684 , - 2015 , - 2234 , - 3341 , - 600 , - 3483 , - 2518 , - 2441 , - 3252 , - 215 , - 2802 , - 1541 , - 1168 , - 1683 , - 3086 , - 641 , - 3820 , - 3151 , - 3370 , - 4477 , - 1736 , - 4619 , - 3654 , - 3577 , - 4388 , - 1351 , - 3938 , - 2677 , - 2304 , - 2819 , - 4222 , - 1777 , - 220 , - 4287 , - 4506 , - 877 , - 2872 , - 1019 , - 54 , - 4713 , - 788 , - 2487 , - 338 , - 3813 , - 3440 , - 3955 , - 622 , - 2913 , - 1356 , - 687 , - 906 , - 2013 , - 4008 , - 2155 , - 1190 , - 1113 , - 1924 , - 3623 , - 1474 , - 213 , - 4576 , - 355 , - 1758 , - 4049 , - 2492 , - 1823 , - 2042 , - 3149 , - 408 , - 3291 , - 2326 , - 2249 , - 3060 , - 23 , - 2610 , - 1349 , - 976 , - 1491 , - 2894 , - 449 , - 3628 , - 2959 , - 3178 , - 4285 , - 1544 , - 4427 , - 3462 , - 3385 , - 4196 , - 1159 , - 3746 , - 2485 , - 2112 , - 2627 , - 4030 , - 1585 , - 28 , - 4095 , - 4314 , - 685 , - 2680 , - 827 , - 4598 , - 4521 , - 596 , - 2295 , - 146 , - 3621 , - 3248 , - 3763 , - 430 , - 2721 , - 1164 , - 495 , - 714 , - 1821 , - 3816 , - 1963 , - 998 , - 921 , - 1732 , - 3431 , - 1282 , - 21 , - 4384 , - 163 , - 1566 , - 3857 , - 2300 , - 1631 , - 1850 , - 2957 , - 216 , - 3099 , - 2134 , - 2057 , - 2868 , - 4567 , - 2418 , - 1157 , - 784 , - 1299 , - 2702 , - 257 , - 3436 , - 2767 , - 2986 , - 4093 , - 1352 , - 4235 , - 3270 , - 3193 , - 4004 , - 967 , - 3554 , - 2293 , - 1920 , - 2435 , - 3838 , - 1393 , - 4572 , - 3903 , - 4122 , - 493 , - 2488 , - 635 , - 4406 , - 4329 , - 404 , - 2103 , - 4690 , - 3429 , - 3056 , - 3571 , - 238 , - 2529 , - 972 , - 303 , - 522 , - 1629 , - 3624 , - 1771 , - 806 , - 729 , - 1540 , - 3239 , - 1090 , - 4565 , - 4192 , - 4707 , - 1374 , - 3665 , - 2108 , - 1439 , - 1658 , - 2765 , - 24 , - 2907 , - 1942 , - 1865 , - 2676 , - 4375 , - 2226 , - 965 , - 592 , - 1107 , - 2510 , - 65 , - 3244 , - 2575 , - 2794 , - 3901 , - 1160 , - 4043 , - 3078 , - 3001 , - 3812 , - 775 , - 3362 , - 2101 , - 1728 , - 2243 , - 3646 , - 1201 , - 4380 , - 3711 , - 3930 , - 301 , - 2296 , - 443 , - 4214 , - 4137 , - 212 , - 1911 , - 4498 , - 3237 , - 2864 , - 3379 , - 46 , - 2337 , - 780 , - 111 , - 330 , - 1437 , - 3432 , - 1579 , - 614 , - 537 , - 1348 , - 3047 , - 898 , - 4373 , - 4000 , - 4515 , - 1182 , - 3473 , - 1916 , - 1247 , - 1466 , - 2573 , - 4568 , - 2715 , - 1750 , - 1673 , - 2484 , - 4183 , - 2034 , - 773 , - 400 , - 915 , - 2318 , - 4609 , - 3052 , - 2383 , - 2602 , - 3709 , - 968 , - 3851 , - 2886 , - 2809 , - 3620 , - 583 , - 3170 , - 1909 , - 1536 , - 2051 , - 3454 , - 1009 , - 4188 , - 3519 , - 3738 , - 109 , - 2104 , - 251 , - 4022 , - 3945 , - 20 , - 1719 , - 4306 , - 3045 , - 2672 , - 3187 , - 4590 , - 2145 , - 588 , - 4655 , - 138 , - 1245 , - 3240 , - 1387 , - 422 , - 345 , - 1156 , - 2855 , - 706 , - 4181 , - 3808 , - 4323 , - 990 , - 3281 , - 1724 , - 1055 , - 1274 , - 2381 , - 4376 , - 2523 , - 1558 , - 1481 , - 2292 , - 3991 , - 1842 , - 581 , - 208 , - 723 , - 2126 , - 4417 , - 2860 , - 2191 , - 2410 , - 3517 , - 776 , - 3659 , - 2694 , - 2617 , - 3428 , - 391 , - 2978 , - 1717 , - 1344 , - 1859 , - 3262 , - 817 , - 3996 , - 3327 , - 3546 , - 4653 , - 1912 , - 59 , - 3830 , - 3753 , - 4564 , - 1527 , - 4114 , - 2853 , - 2480 , - 2995 , - 4398 , - 1953 , - 396 , - 4463 , - 4682 , - 1053 , - 3048 , - 1195 , - 230 , - 153 , - 964 , - 2663 , - 514 , - 3989 , - 3616 , - 4131 , - 798 , - 3089 , - 1532 , - 863 , - 1082 , - 2189 , - 4184 , - 2331 , - 1366 , - 1289 , - 2100 , - 3799 , - 1650 , - 389 , - 16 , - 531 , - 1934 , - 4225 , - 2668 , - 1999 , - 2218 , - 3325 , - 584 , - 3467 , - 2502 , - 2425 , - 3236 , - 199 , - 2786 , - 1525 , - 1152 , - 1667 , - 3070 , - 625 , - 3804 , - 3135 , - 3354 , - 4461 , - 1720 , - 4603 , - 3638 , - 3561 , - 4372 , - 1335 , - 3922 , - 2661 , - 2288 , - 2803 , - 4206 , - 1761 , - 204 , - 4271 , - 4490 , - 861 , - 2856 , - 1003 , - 38 , - 4697 , - 772 , - 2471 , - 322 , - 3797 , - 3424 , - 3939 , - 606 , - 2897 , - 1340 , - 671 , - 890 , - 1997 , - 3992 , - 2139 , - 1174 , - 1097 , - 1908 , - 3607 , - 1458 , - 197 , - 4560 , - 339 , - 1742 , - 4033 , - 2476 , - 1807 , - 2026 , - 3133 , - 392 , - 3275 , - 2310 , - 2233 , - 3044 , - 7 , - 2594 , - 1333 , - 960 , - 1475 , - 2878 , - 433 , - 3612 , - 2943 , - 3162 , - 4269 , - 1528 , - 4411 , - 3446 , - 3369 , - 4180 , - 1143 , - 3730 , - 2469 , - 2096 , - 2611 , - 4014 , - 1569 , - 12 , - 4079 , - 4298 , - 669 , - 2664 , - 811 , - 4582 , - 4505 , - 580 , - 2279 , - 130 , - 3605 , - 3232 , - 3747 , - 414 , - 2705 , - 1148 , - 479 , - 698 , - 1805 , - 3800 , - 1947 , - 982 , - 905 , - 1716 , - 3415 , - 1266 , - 5 , - 4368 , - 147 , - 1550 , - 3841 , - 2284 , - 1615 , - 1834 , - 2941 , - 200 , - 3083 , - 2118 , - 2041 , - 2852 , - 4551 , - 2402 , - 1141 , - 768 , - 1283 , - 2686 , - 241 , - 3420 , - 2751 , - 2970 , - 4077 , - 1336 , - 4219 , - 3254 , - 3177 , - 3988 , - 951 , - 3538 , - 2277 , - 1904 , - 2419 , - 3822 , - 1377 , - 4556 , - 3887 , - 4106 , - 477 , - 2472 , - 619 , - 4390 , - 4313 , - 388 , - 2087 , - 4674 , - 3413 , - 3040 , - 3555 , - 222 , - 2513 , - 956 , - 287 , - 506 , - 1613 , - 3608 , - 1755 , - 790 , - 713 , - 1524 , - 3223 , - 1074 , - 4549 , - 4176 , - 4691 , - 1358 , - 3649 , - 2092 , - 1423 , - 1642 , - 2749 , - 8 , - 2891 , - 1926 , - 1849 , - 2660 , - 4359 , - 2210 , - 949 , - 576 , - 1091 , - 2494 , - 49 , - 3228 , - 2559 , - 2778 , - 3885 , - 1144 , - 4027 , - 3062 , - 2985 , - 3796 , - 759 , - 3346 , - 2085 , - 1712 , - 2227 , - 3630 , - 1185 , - 4364 , - 3695 , - 3914 , - 285 , - 2280 , - 427 , - 4198 , - 4121 , - 196 , - 1895 , - 4482 , - 3221 , - 2848 , - 3363 , - 30 , - 2321 , - 764 , - 95 , - 314 , - 1421 , - 3416 , - 1563 , - 598 , - 521 , - 1332 , - 3031 , - 882 , - 4357 , - 3984 , - 4499 , - 1166 , - 3457 , - 1900 , - 1231 , - 1450 , - 2557 , - 4552 , - 2699 , - 1734 , - 1657 , - 2468 , - 4167 , - 2018 , - 757 , - 384 , - 899 , - 2302 , - 4593 , - 3036 , - 2367 , - 2586 , - 3693 , - 952 , - 3835 , - 2870 , - 2793 , - 3604 , - 567 , - 3154 , - 1893 , - 1520 , - 2035 , - 3438 , - 993 , - 4172 , - 3503 , - 3722 , - 93 , - 2088 , - 235 , - 4006 , - 3929 , - 4 , - 1703 , - 4290 , - 3029 , - 2656 , - 3171 , - 4574 , - 2129 , - 572 , - 4639 , - 122 , - 1229 , - 3224 , - 1371 , - 406 , - 329 , - 1140 , - 2839 , - 690 , - 4165 , - 3792 , - 4307 , - 974 , - 3265 , - 1708 , - 1039 , - 1258 , - 2365 , - 4360 , - 2507 , - 1542 , - 1465 , - 2276 , - 3975 , - 1826 , - 565 , - 192 , - 707 , - 2110 , - 4401 , - 2844 , - 2175 , - 2394 , - 3501 , - 760 , - 3643 , - 2678 , - 2601 , - 3412 , - 375 , - 2962 , - 1701 , - 1328 , - 1843 , - 3246 , - 801 , - 3980 , - 3311 , - 3530 , - 4637 , - 1896 , - 43 , - 3814 , - 3737 , - 4548 , - 1511 , - 4098 , - 2837 , - 2464 , - 2979 , - 4382 , - 1937 , - 380 , - 4447 , - 4666 , - 1037 , - 3032 , - 1179 , - 214 , - 137 , - 948 , - 2647 , - 498 , - 3973 , - 3600 , - 4115 , - 782 , - 3073 , - 1516 , - 847 , - 1066 , - 2173 , - 4168 , - 2315 , - 1350 , - 1273 , - 2084 , - 3783 , - 1634 , - 373 , - 0 , - 191 , - 622 , - 1293 , - 2204 , - 3355 , - 4746 , - 1577 , - 3448 , - 759 , - 3110 , - 901 , - 3732 , - 2003 , - 514 , - 4065 , - 3056 , - 2287 , - 1758 , - 1469 , - 1420 , - 1611 , - 2042 , - 2713 , - 3624 , - 4775 , - 1366 , - 2997 , - 68 , - 2179 , - 4530 , - 2321 , - 352 , - 3423 , - 1934 , - 685 , - 4476 , - 3707 , - 3178 , - 2889 , - 2840 , - 3031 , - 3462 , - 4133 , - 244 , - 1395 , - 2786 , - 4417 , - 1488 , - 3599 , - 1150 , - 3741 , - 1772 , - 43 , - 3354 , - 2105 , - 1096 , - 327 , - 4598 , - 4309 , - 4260 , - 4451 , - 82 , - 753 , - 1664 , - 2815 , - 4206 , - 1037 , - 2908 , - 219 , - 2570 , - 361 , - 3192 , - 1463 , - 4774 , - 3525 , - 2516 , - 1747 , - 1218 , - 929 , - 880 , - 1071 , - 1502 , - 2173 , - 3084 , - 4235 , - 826 , - 2457 , - 4328 , - 1639 , - 3990 , - 1781 , - 4612 , - 2883 , - 1394 , - 145 , - 3936 , - 3167 , - 2638 , - 2349 , - 2300 , - 2491 , - 2922 , - 3593 , - 4504 , - 855 , - 2246 , - 3877 , - 948 , - 3059 , - 610 , - 3201 , - 1232 , - 4303 , - 2814 , - 1565 , - 556 , - 4587 , - 4058 , - 3769 , - 3720 , - 3911 , - 4342 , - 213 , - 1124 , - 2275 , - 3666 , - 497 , - 2368 , - 4479 , - 2030 , - 4621 , - 2652 , - 923 , - 4234 , - 2985 , - 1976 , - 1207 , - 678 , - 389 , - 340 , - 531 , - 962 , - 1633 , - 2544 , - 3695 , - 286 , - 1917 , - 3788 , - 1099 , - 3450 , - 1241 , - 4072 , - 2343 , - 854 , - 4405 , - 3396 , - 2627 , - 2098 , - 1809 , - 1760 , - 1951 , - 2382 , - 3053 , - 3964 , - 315 , - 1706 , - 3337 , - 408 , - 2519 , - 70 , - 2661 , - 692 , - 3763 , - 2274 , - 1025 , - 16 , - 4047 , - 3518 , - 3229 , - 3180 , - 3371 , - 3802 , - 4473 , - 584 , - 1735 , - 3126 , - 4757 , - 1828 , - 3939 , - 1490 , - 4081 , - 2112 , - 383 , - 3694 , - 2445 , - 1436 , - 667 , - 138 , - 4649 , - 4600 , - 4791 , - 422 , - 1093 , - 2004 , - 3155 , - 4546 , - 1377 , - 3248 , - 559 , - 2910 , - 701 , - 3532 , - 1803 , - 314 , - 3865 , - 2856 , - 2087 , - 1558 , - 1269 , - 1220 , - 1411 , - 1842 , - 2513 , - 3424 , - 4575 , - 1166 , - 2797 , - 4668 , - 1979 , - 4330 , - 2121 , - 152 , - 3223 , - 1734 , - 485 , - 4276 , - 3507 , - 2978 , - 2689 , - 2640 , - 2831 , - 3262 , - 3933 , - 44 , - 1195 , - 2586 , - 4217 , - 1288 , - 3399 , - 950 , - 3541 , - 1572 , - 4643 , - 3154 , - 1905 , - 896 , - 127 , - 4398 , - 4109 , - 4060 , - 4251 , - 4682 , - 553 , - 1464 , - 2615 , - 4006 , - 837 , - 2708 , - 19 , - 2370 , - 161 , - 2992 , - 1263 , - 4574 , - 3325 , - 2316 , - 1547 , - 1018 , - 729 , - 680 , - 871 , - 1302 , - 1973 , - 2884 , - 4035 , - 626 , - 2257 , - 4128 , - 1439 , - 3790 , - 1581 , - 4412 , - 2683 , - 1194 , - 4745 , - 3736 , - 2967 , - 2438 , - 2149 , - 2100 , - 2291 , - 2722 , - 3393 , - 4304 , - 655 , - 2046 , - 3677 , - 748 , - 2859 , - 410 , - 3001 , - 1032 , - 4103 , - 2614 , - 1365 , - 356 , - 4387 , - 3858 , - 3569 , - 3520 , - 3711 , - 4142 , - 13 , - 924 , - 2075 , - 3466 , - 297 , - 2168 , - 4279 , - 1830 , - 4421 , - 2452 , - 723 , - 4034 , - 2785 , - 1776 , - 1007 , - 478 , - 189 , - 140 , - 331 , - 762 , - 1433 , - 2344 , - 3495 , - 86 , - 1717 , - 3588 , - 899 , - 3250 , - 1041 , - 3872 , - 2143 , - 654 , - 4205 , - 3196 , - 2427 , - 1898 , - 1609 , - 1560 , - 1751 , - 2182 , - 2853 , - 3764 , - 115 , - 1506 , - 3137 , - 208 , - 2319 , - 4670 , - 2461 , - 492 , - 3563 , - 2074 , - 825 , - 4616 , - 3847 , - 3318 , - 3029 , - 2980 , - 3171 , - 3602 , - 4273 , - 384 , - 1535 , - 2926 , - 4557 , - 1628 , - 3739 , - 1290 , - 3881 , - 1912 , - 183 , - 3494 , - 2245 , - 1236 , - 467 , - 4738 , - 4449 , - 4400 , - 4591 , - 222 , - 893 , - 1804 , - 2955 , - 4346 , - 1177 , - 3048 , - 359 , - 2710 , - 501 , - 3332 , - 1603 , - 114 , - 3665 , - 2656 , - 1887 , - 1358 , - 1069 , - 1020 , - 1211 , - 1642 , - 2313 , - 3224 , - 4375 , - 966 , - 2597 , - 4468 , - 1779 , - 4130 , - 1921 , - 4752 , - 3023 , - 1534 , - 285 , - 4076 , - 3307 , - 2778 , - 2489 , - 2440 , - 2631 , - 3062 , - 3733 , - 4644 , - 995 , - 2386 , - 4017 , - 1088 , - 3199 , - 750 , - 3341 , - 1372 , - 4443 , - 2954 , - 1705 , - 696 , - 4727 , - 4198 , - 3909 , - 3860 , - 4051 , - 4482 , - 353 , - 1264 , - 2415 , - 3806 , - 637 , - 2508 , - 4619 , - 2170 , - 4761 , - 2792 , - 1063 , - 4374 , - 3125 , - 2116 , - 1347 , - 818 , - 529 , - 480 , - 671 , - 1102 , - 1773 , - 2684 , - 3835 , - 426 , - 2057 , - 3928 , - 1239 , - 3590 , - 1381 , - 4212 , - 2483 , - 994 , - 4545 , - 3536 , - 2767 , - 2238 , - 1949 , - 1900 , - 2091 , - 2522 , - 3193 , - 4104 , - 455 , - 1846 , - 3477 , - 548 , - 2659 , - 210 , - 2801 , - 832 , - 3903 , - 2414 , - 1165 , - 156 , - 4187 , - 3658 , - 3369 , - 3320 , - 3511 , - 3942 , - 4613 , - 724 , - 1875 , - 3266 , - 97 , - 1968 , - 4079 , - 1630 , - 4221 , - 2252 , - 523 , - 3834 , - 2585 , - 1576 , - 807 , - 278 , - 4789 , - 4740 , - 131 , - 562 , - 1233 , - 2144 , - 3295 , - 4686 , - 1517 , - 3388 , - 699 , - 3050 , - 841 , - 3672 , - 1943 , - 454 , - 4005 , - 2996 , - 2227 , - 1698 , - 1409 , - 1360 , - 1551 , - 1982 , - 2653 , - 3564 , - 4715 , - 1306 , - 2937 , - 8 , - 2119 , - 4470 , - 2261 , - 292 , - 3363 , - 1874 , - 625 , - 4416 , - 3647 , - 3118 , - 2829 , - 2780 , - 2971 , - 3402 , - 4073 , - 184 , - 1335 , - 2726 , - 4357 , - 1428 , - 3539 , - 1090 , - 3681 , - 1712 , - 4783 , - 3294 , - 2045 , - 1036 , - 267 , - 4538 , - 4249 , - 4200 , - 4391 , - 22 , - 693 , - 1604 , - 2755 , - 4146 , - 977 , - 2848 , - 159 , - 2510 , - 301 , - 3132 , - 1403 , - 4714 , - 3465 , - 2456 , - 1687 , - 1158 , - 869 , - 820 , - 1011 , - 1442 , - 2113 , - 3024 , - 4175 , - 766 , - 2397 , - 4268 , - 1579 , - 3930 , - 1721 , - 4552 , - 2823 , - 1334 , - 85 , - 3876 , - 3107 , - 2578 , - 2289 , - 2240 , - 2431 , - 2862 , - 3533 , - 4444 , - 795 , - 2186 , - 3817 , - 888 , - 2999 , - 550 , - 3141 , - 1172 , - 4243 , - 2754 , - 1505 , - 496 , - 4527 , - 3998 , - 3709 , - 3660 , - 3851 , - 4282 , - 153 , - 1064 , - 2215 , - 3606 , - 437 , - 2308 , - 4419 , - 1970 , - 4561 , - 2592 , - 863 , - 4174 , - 2925 , - 1916 , - 1147 , - 618 , - 329 , - 280 , - 471 , - 902 , - 1573 , - 2484 , - 3635 , - 226 , - 1857 , - 3728 , - 1039 , - 3390 , - 1181 , - 4012 , - 2283 , - 794 , - 4345 , - 3336 , - 2567 , - 2038 , - 1749 , - 1700 , - 1891 , - 2322 , - 2993 , - 3904 , - 255 , - 1646 , - 3277 , - 348 , - 2459 , - 10 , - 2601 , - 632 , - 3703 , - 2214 , - 965 , - 4756 , - 3987 , - 3458 , - 3169 , - 3120 , - 3311 , - 3742 , - 4413 , - 524 , - 1675 , - 3066 , - 4697 , - 1768 , - 3879 , - 1430 , - 4021 , - 2052 , - 323 , - 3634 , - 2385 , - 1376 , - 607 , - 78 , - 4589 , - 4540 , - 4731 , - 362 , - 1033 , - 1944 , - 3095 , - 4486 , - 1317 , - 3188 , - 499 , - 2850 , - 641 , - 3472 , - 1743 , - 254 , - 3805 , - 2796 , - 2027 , - 1498 , - 1209 , - 1160 , - 1351 , - 1782 , - 2453 , - 3364 , - 4515 , - 1106 , - 2737 , - 4608 , - 1919 , - 4270 , - 2061 , - 92 , - 3163 , - 1674 , - 425 , - 4216 , - 3447 , - 2918 , - 2629 , - 2580 , - 2771 , - 3202 , - 3873 , - 4784 , - 1135 , - 2526 , - 4157 , - 1228 , - 3339 , - 890 , - 3481 , - 1512 , - 4583 , - 3094 , - 1845 , - 836 , - 67 , - 4338 , - 4049 , - 4000 , - 4191 , - 4622 , - 493 , - 1404 , - 2555 , - 3946 , - 777 , - 2648 , - 4759 , - 2310 , - 101 , - 2932 , - 1203 , - 4514 , - 3265 , - 2256 , - 1487 , - 958 , - 669 , - 620 , - 811 , - 1242 , - 1913 , - 2824 , - 3975 , - 566 , - 2197 , - 4068 , - 1379 , - 3730 , - 1521 , - 4352 , - 2623 , - 1134 , - 4685 , - 3676 , - 2907 , - 2378 , - 2089 , - 2040 , - 2231 , - 2662 , - 3333 , - 4244 , - 595 , - 1986 , - 3617 , - 688 , - 2799 , - 350 , - 2941 , - 972 , - 4043 , - 2554 , - 1305 , - 296 , - 4327 , - 3798 , - 3509 , - 3460 , - 3651 , - 4082 , - 4753 , - 864 , - 2015 , - 3406 , - 237 , - 2108 , - 4219 , - 1770 , - 4361 , - 2392 , - 663 , - 3974 , - 2725 , - 1716 , - 947 , - 418 , - 129 , - 80 , - 271 , - 702 , - 1373 , - 2284 , - 3435 , - 26 , - 1657 , - 3528 , - 839 , - 3190 , - 981 , - 3812 , - 2083 , - 594 , - 4145 , - 3136 , - 2367 , - 1838 , - 1549 , - 1500 , - 1691 , - 2122 , - 2793 , - 3704 , - 55 , - 1446 , - 3077 , - 148 , - 2259 , - 4610 , - 2401 , - 432 , - 3503 , - 2014 , - 765 , - 4556 , - 3787 , - 3258 , - 2969 , - 2920 , - 3111 , - 3542 , - 4213 , - 324 , - 1475 , - 2866 , - 4497 , - 1568 , - 3679 , - 1230 , - 3821 , - 1852 , - 123 , - 3434 , - 2185 , - 1176 , - 407 , - 4678 , - 4389 , - 4340 , - 4531 , - 162 , - 833 , - 1744 , - 2895 , - 4286 , - 1117 , - 2988 , - 299 , - 2650 , - 441 , - 3272 , - 1543 , - 54 , - 3605 , - 2596 , - 1827 , - 1298 , - 1009 , - 960 , - 1151 , - 1582 , - 2253 , - 3164 , - 4315 , - 906 , - 2537 , - 4408 , - 1719 , - 4070 , - 1861 , - 4692 , - 2963 , - 1474 , - 225 , - 4016 , - 3247 , - 2718 , - 2429 , - 2380 , - 2571 , - 3002 , - 3673 , - 4584 , - 935 , - 2326 , - 3957 , - 1028 , - 3139 , - 690 , - 3281 , - 1312 , - 4383 , - 2894 , - 1645 , - 636 , - 4667 , - 4138 , - 3849 , - 3800 , - 3991 , - 4422 , - 293 , - 1204 , - 2355 , - 3746 , - 577 , - 2448 , - 4559 , - 2110 , - 4701 , - 2732 , - 1003 , - 4314 , - 3065 , - 2056 , - 1287 , - 758 , - 469 , - 420 , - 611 , - 1042 , - 1713 , - 2624 , - 3775 , - 366 , - 1997 , - 3868 , - 1179 , - 3530 , - 1321 , - 4152 , - 2423 , - 934 , - 4485 , - 3476 , - 2707 , - 2178 , - 1889 , - 1840 , - 2031 , - 2462 , - 3133 , - 4044 , - 395 , - 1786 , - 3417 , - 488 , - 2599 , - 150 , - 2741 , - 772 , - 3843 , - 2354 , - 1105 , - 96 , - 4127 , - 3598 , - 3309 , - 3260 , - 3451 , - 3882 , - 4553 , - 664 , - 1815 , - 3206 , - 37 , - 1908 , - 4019 , - 1570 , - 4161 , - 2192 , - 463 , - 3774 , - 2525 , - 1516 , - 747 , - 218 , - 4729 , - 4680 , - 71 , - 502 , - 1173 , - 2084 , - 3235 , - 4626 , - 1457 , - 3328 , - 639 , - 2990 , - 781 , - 3612 , - 1883 , - 394 , - 3945 , - 2936 , - 2167 , - 1638 , - 1349 , - 1300 , - 1491 , - 1922 , - 2593 , - 3504 , - 4655 , - 1246 , - 2877 , - 4748 , - 2059 , - 4410 , - 2201 , - 232 , - 3303 , - 1814 , - 565 , - 4356 , - 3587 , - 3058 , - 2769 , - 2720 , - 2911 , - 3342 , - 4013 , - 124 , - 1275 , - 2666 , - 4297 , - 1368 , - 3479 , - 1030 , - 3621 , - 1652 , - 4723 , - 3234 , - 1985 , - 976 , - 207 , - 4478 , - 4189 , - 4140 , - 4331 , - 4762 , - 633 , - 1544 , - 2695 , - 4086 , - 917 , - 2788 , - 99 , - 2450 , - 241 , - 3072 , - 1343 , - 4654 , - 3405 , - 2396 , - 1627 , - 1098 , - 809 , - 760 , - 951 , - 1382 , - 2053 , - 2964 , - 4115 , - 706 , - 2337 , - 4208 , - 1519 , - 3870 , - 1661 , - 4492 , - 2763 , - 1274 , - 25 , - 3816 , - 3047 , - 2518 , - 2229 , - 2180 , - 2371 , - 2802 , - 3473 , - 4384 , - 735 , - 2126 , - 3757 , - 828 , - 2939 , - 490 , - 3081 , - 1112 , - 4183 , - 2694 , - 1445 , - 436 , - 4467 , - 3938 , - 3649 , - 3600 , - 3791 , - 4222 , - 93 , - 1004 , - 2155 , - 3546 , - 377 , - 2248 , - 4359 , - 1910 , - 4501 , - 2532 , - 803 , - 4114 , - 2865 , - 1856 , - 1087 , - 558 , - 269 , - 220 , - 411 , - 842 , - 1513 , - 2424 , - 3575 , - 166 , - 1797 , - 3668 , - 979 , - 3330 , - 1121 , - 3952 , - 2223 , - 734 , - 4285 , - 3276 , - 2507 , - 1978 , - 1689 , - 1640 , - 1831 , - 2262 , - 2933 , - 3844 , - 195 , - 1586 , - 3217 , - 288 , - 2399 , - 4750 , - 2541 , - 572 , - 3643 , - 2154 , - 905 , - 4696 , - 3927 , - 3398 , - 3109 , - 3060 , - 3251 , - 3682 , - 4353 , - 464 , - 1615 , - 3006 , - 4637 , - 1708 , - 3819 , - 1370 , - 3961 , - 1992 , - 263 , - 3574 , - 2325 , - 1316 , - 547 , - 18 , - 4529 , - 4480 , - 4671 , - 302 , - 973 , - 1884 , - 3035 , - 4426 , - 1257 , - 3128 , - 439 , - 2790 , - 581 , - 3412 , - 1683 , - 194 , - 3745 , - 2736 , - 1967 , - 1438 , - 1149 , - 1100 , - 1291 , - 1722 , - 2393 , - 3304 , - 4455 , - 1046 , - 2677 , - 4548 , - 1859 , - 4210 , - 2001 , - 32 , - 3103 , - 1614 , - 365 , - 4156 , - 3387 , - 2858 , - 2569 , - 2520 , - 2711 , - 3142 , - 3813 , - 4724 , - 1075 , - 2466 , - 4097 , - 1168 , - 3279 , - 830 , - 3421 , - 1452 , - 4523 , - 3034 , - 1785 , - 776 , - 7 , - 4278 , - 3989 , - 3940 , - 4131 , - 4562 , - 433 , - 1344 , - 2495 , - 3886 , - 717 , - 2588 , - 4699 , - 2250 , - 41 , - 2872 , - 1143 , - 4454 , - 3205 , - 2196 , - 1427 , - 898 , - 609 , - 560 , - 751 , - 1182 , - 1853 , - 2764 , - 3915 , - 506 , - 2137 , - 4008 , - 1319 , - 3670 , - 1461 , - 4292 , - 2563 , - 1074 , - 4625 , - 3616 , - 2847 , - 2318 , - 2029 , - 1980 , - 2171 , - 2602 , - 3273 , - 4184 , - 535 , - 1926 , - 3557 , - 628 , - 2739 , - 290 , - 2881 , - 912 , - 3983 , - 2494 , - 1245 , - 236 , - 4267 , - 3738 , - 3449 , - 3400 , - 3591 , - 4022 , - 4693 , - 804 , - 1955 , - 3346 , - 177 , - 2048 , - 4159 , - 1710 , - 4301 , - 2332 , - 603 , - 3914 , - 2665 , - 1656 , - 887 , - 358 , - 69 , - 20 , - 211 , - 642 , - 1313 , - 2224 , - 3375 , - 4766 , - 1597 , - 3468 , - 779 , - 3130 , - 921 , - 3752 , - 2023 , - 534 , - 4085 , - 3076 , - 2307 , - 1778 , - 1489 , - 1440 , - 1631 , - 2062 , - 2733 , - 3644 , - 4795 , - 1386 , - 3017 , - 88 , - 2199 , - 4550 , - 2341 , - 372 , - 3443 , - 1954 , - 705 , - 4496 , - 3727 , - 3198 , - 2909 , - 2860 , - 3051 , - 3482 , - 4153 , - 264 , - 1415 , - 2806 , - 4437 , - 1508 , - 3619 , - 1170 , - 3761 , - 1792 , - 63 , - 3374 , - 2125 , - 1116 , - 347 , - 4618 , - 4329 , - 4280 , - 4471 , - 102 , - 773 , - 1684 , - 2835 , - 4226 , - 1057 , - 2928 , - 239 , - 2590 , - 381 , - 3212 , - 1483 , - 4794 , - 3545 , - 2536 , - 1767 , - 1238 , - 949 , - 900 , - 1091 , - 1522 , - 2193 , - 3104 , - 4255 , - 846 , - 2477 , - 4348 , - 1659 , - 4010 , - 1801 , - 4632 , - 2903 , - 1414 , - 165 , - 3956 , - 3187 , - 2658 , - 2369 , - 2320 , - 2511 , - 2942 , - 3613 , - 4524 , - 875 , - 2266 , - 3897 , - 968 , - 3079 , - 630 , - 3221 , - 1252 , - 4323 , - 2834 , - 1585 , - 576 , - 4607 , - 4078 , - 3789 , - 3740 , - 3931 , - 4362 , - 233 , - 1144 , - 2295 , - 3686 , - 517 , - 2388 , - 4499 , - 2050 , - 4641 , - 2672 , - 943 , - 4254 , - 3005 , - 1996 , - 1227 , - 698 , - 409 , - 360 , - 551 , - 982 , - 1653 , - 2564 , - 3715 , - 306 , - 1937 , - 3808 , - 1119 , - 3470 , - 1261 , - 4092 , - 2363 , - 874 , - 4425 , - 3416 , - 2647 , - 2118 , - 1829 , - 1780 , - 1971 , - 2402 , - 3073 , - 3984 , - 335 , - 1726 , - 3357 , - 428 , - 2539 , - 90 , - 2681 , - 712 , - 3783 , - 2294 , - 1045 , - 36 , - 4067 , - 3538 , - 3249 , - 3200 , - 3391 , - 3822 , - 4493 , - 604 , - 1755 , - 3146 , - 4777 , - 1848 , - 3959 , - 1510 , - 4101 , - 2132 , - 403 , - 3714 , - 2465 , - 1456 , - 687 , - 158 , - 4669 , - 4620 , - 11 , - 442 , - 1113 , - 2024 , - 3175 , - 4566 , - 1397 , - 3268 , - 579 , - 2930 , - 721 , - 3552 , - 1823 , - 334 , - 3885 , - 2876 , - 2107 , - 1578 , - 1289 , - 1240 , - 1431 , - 1862 , - 2533 , - 3444 , - 4595 , - 1186 , - 2817 , - 4688 , - 1999 , - 4350 , - 2141 , - 172 , - 3243 , - 1754 , - 505 , - 4296 , - 3527 , - 2998 , - 2709 , - 2660 , - 2851 , - 3282 , - 3953 , - 64 , - 1215 , - 2606 , - 4237 , - 1308 , - 3419 , - 970 , - 3561 , - 1592 , - 4663 , - 3174 , - 1925 , - 916 , - 147 , - 4418 , - 4129 , - 4080 , - 4271 , - 4702 , - 573 , - 1484 , - 2635 , - 4026 , - 857 , - 2728 , - 39 , - 2390 , - 181 , - 3012 , - 1283 , - 4594 , - 3345 , - 2336 , - 1567 , - 1038 , - 749 , - 700 , - 891 , - 1322 , - 1993 , - 2904 , - 4055 , - 646 , - 2277 , - 4148 , - 1459 , - 3810 , - 1601 , - 4432 , - 2703 , - 1214 , - 4765 , - 3756 , - 2987 , - 2458 , - 2169 , - 2120 , - 2311 , - 2742 , - 3413 , - 4324 , - 675 , - 2066 , - 3697 , - 768 , - 2879 , - 430 , - 3021 , - 1052 , - 4123 , - 2634 , - 1385 , - 376 , - 4407 , - 3878 , - 3589 , - 3540 , - 3731 , - 4162 , - 33 , - 944 , - 2095 , - 3486 , - 317 , - 2188 , - 4299 , - 1850 , - 4441 , - 2472 , - 743 , - 4054 , - 2805 , - 1796 , - 1027 , - 498 , - 209 , - 160 , - 351 , - 782 , - 1453 , - 2364 , - 3515 , - 106 , - 1737 , - 3608 , - 919 , - 3270 , - 1061 , - 3892 , - 2163 , - 674 , - 4225 , - 3216 , - 2447 , - 1918 , - 1629 , - 1580 , - 1771 , - 2202 , - 2873 , - 3784 , - 135 , - 1526 , - 3157 , - 228 , - 2339 , - 4690 , - 2481 , - 512 , - 3583 , - 2094 , - 845 , - 4636 , - 3867 , - 3338 , - 3049 , - 3000 , - 3191 , - 3622 , - 4293 , - 404 , - 1555 , - 2946 , - 4577 , - 1648 , - 3759 , - 1310 , - 3901 , - 1932 , - 203 , - 3514 , - 2265 , - 1256 , - 487 , - 4758 , - 4469 , - 4420 , - 4611 , - 242 , - 913 , - 1824 , - 2975 , - 4366 , - 1197 , - 3068 , - 379 , - 2730 , - 521 , - 3352 , - 1623 , - 134 , - 3685 , - 2676 , - 1907 , - 1378 , - 1089 , - 1040 , - 1231 , - 1662 , - 2333 , - 3244 , - 4395 , - 986 , - 2617 , - 4488 , - 1799 , - 4150 , - 1941 , - 4772 , - 3043 , - 1554 , - 305 , - 4096 , - 3327 , - 2798 , - 2509 , - 2460 , - 2651 , - 3082 , - 3753 , - 4664 , - 1015 , - 2406 , - 4037 , - 1108 , - 3219 , - 770 , - 3361 , - 1392 , - 4463 , - 2974 , - 1725 , - 716 , - 4747 , - 4218 , - 3929 , - 3880 , - 4071 , - 4502 , - 373 , - 1284 , - 2435 , - 3826 , - 657 , - 2528 , - 4639 , - 2190 , - 4781 , - 2812 , - 1083 , - 4394 , - 3145 , - 2136 , - 1367 , - 838 , - 549 , - 500 , - 691 , - 1122 , - 1793 , - 2704 , - 3855 , - 446 , - 2077 , - 3948 , - 1259 , - 3610 , - 1401 , - 4232 , - 2503 , - 1014 , - 4565 , - 3556 , - 2787 , - 2258 , - 1969 , - 1920 , - 2111 , - 2542 , - 3213 , - 4124 , - 475 , - 1866 , - 3497 , - 568 , - 2679 , - 230 , - 2821 , - 852 , - 3923 , - 2434 , - 1185 , - 176 , - 4207 , - 3678 , - 3389 , - 3340 , - 3531 , - 3962 , - 4633 , - 744 , - 1895 , - 3286 , - 117 , - 1988 , - 4099 , - 1650 , - 4241 , - 2272 , - 543 , - 3854 , - 2605 , - 1596 , - 827 , - 298 , - 9 , - 4760 , - 151 , - 582 , - 1253 , - 2164 , - 3315 , - 4706 , - 1537 , - 3408 , - 719 , - 3070 , - 861 , - 3692 , - 1963 , - 474 , - 4025 , - 3016 , - 2247 , - 1718 , - 1429 , - 1380 , - 1571 , - 2002 , - 2673 , - 3584 , - 4735 , - 1326 , - 2957 , - 28 , - 2139 , - 4490 , - 2281 , - 312 , - 3383 , - 1894 , - 645 , - 4436 , - 3667 , - 3138 , - 2849 , - 2800 , - 2991 , - 3422 , - 4093 , - 204 , - 1355 , - 2746 , - 4377 , - 1448 , - 3559 , - 1110 , - 3701 , - 1732 , - 3 , - 3314 , - 2065 , - 1056 , - 287 , - 4558 , - 4269 , - 4220 , - 4411 , - 42 , - 713 , - 1624 , - 2775 , - 4166 , - 997 , - 2868 , - 179 , - 2530 , - 321 , - 3152 , - 1423 , - 4734 , - 3485 , - 2476 , - 1707 , - 1178 , - 889 , - 840 , - 1031 , - 1462 , - 2133 , - 3044 , - 4195 , - 786 , - 2417 , - 4288 , - 1599 , - 3950 , - 1741 , - 4572 , - 2843 , - 1354 , - 105 , - 3896 , - 3127 , - 2598 , - 2309 , - 2260 , - 2451 , - 2882 , - 3553 , - 4464 , - 815 , - 2206 , - 3837 , - 908 , - 3019 , - 570 , - 3161 , - 1192 , - 4263 , - 2774 , - 1525 , - 516 , - 4547 , - 4018 , - 3729 , - 3680 , - 3871 , - 4302 , - 173 , - 1084 , - 2235 , - 3626 , - 457 , - 2328 , - 4439 , - 1990 , - 4581 , - 2612 , - 883 , - 4194 , - 2945 , - 1936 , - 1167 , - 638 , - 349 , - 300 , - 491 , - 922 , - 1593 , - 2504 , - 3655 , - 246 , - 1877 , - 3748 , - 1059 , - 3410 , - 1201 , - 4032 , - 2303 , - 814 , - 4365 , - 3356 , - 2587 , - 2058 , - 1769 , - 1720 , - 1911 , - 2342 , - 3013 , - 3924 , - 275 , - 1666 , - 3297 , - 368 , - 2479 , - 30 , - 2621 , - 652 , - 3723 , - 2234 , - 985 , - 4776 , - 4007 , - 3478 , - 3189 , - 3140 , - 3331 , - 3762 , - 4433 , - 544 , - 1695 , - 3086 , - 4717 , - 1788 , - 3899 , - 1450 , - 4041 , - 2072 , - 343 , - 3654 , - 2405 , - 1396 , - 627 , - 98 , - 4609 , - 4560 , - 4751 , - 382 , - 1053 , - 1964 , - 3115 , - 4506 , - 1337 , - 3208 , - 519 , - 2870 , - 661 , - 3492 , - 1763 , - 274 , - 3825 , - 2816 , - 2047 , - 1518 , - 1229 , - 1180 , - 1371 , - 1802 , - 2473 , - 3384 , - 4535 , - 1126 , - 2757 , - 4628 , - 1939 , - 4290 , - 2081 , - 112 , - 3183 , - 1694 , - 445 , - 4236 , - 3467 , - 2938 , - 2649 , - 2600 , - 2791 , - 3222 , - 3893 , - 4 , - 1155 , - 2546 , - 4177 , - 1248 , - 3359 , - 910 , - 3501 , - 1532 , - 4603 , - 3114 , - 1865 , - 856 , - 87 , - 4358 , - 4069 , - 4020 , - 4211 , - 4642 , - 513 , - 1424 , - 2575 , - 3966 , - 797 , - 2668 , - 4779 , - 2330 , - 121 , - 2952 , - 1223 , - 4534 , - 3285 , - 2276 , - 1507 , - 978 , - 689 , - 640 , - 831 , - 1262 , - 1933 , - 2844 , - 3995 , - 586 , - 2217 , - 4088 , - 1399 , - 3750 , - 1541 , - 4372 , - 2643 , - 1154 , - 4705 , - 3696 , - 2927 , - 2398 , - 2109 , - 2060 , - 2251 , - 2682 , - 3353 , - 4264 , - 615 , - 2006 , - 3637 , - 708 , - 2819 , - 370 , - 2961 , - 992 , - 4063 , - 2574 , - 1325 , - 316 , - 4347 , - 3818 , - 3529 , - 3480 , - 3671 , - 4102 , - 4773 , - 884 , - 2035 , - 3426 , - 257 , - 2128 , - 4239 , - 1790 , - 4381 , - 2412 , - 683 , - 3994 , - 2745 , - 1736 , - 967 , - 438 , - 149 , - 100 , - 291 , - 722 , - 1393 , - 2304 , - 3455 , - 46 , - 1677 , - 3548 , - 859 , - 3210 , - 1001 , - 3832 , - 2103 , - 614 , - 4165 , - 3156 , - 2387 , - 1858 , - 1569 , - 1520 , - 1711 , - 2142 , - 2813 , - 3724 , - 75 , - 1466 , - 3097 , - 168 , - 2279 , - 4630 , - 2421 , - 452 , - 3523 , - 2034 , - 785 , - 4576 , - 3807 , - 3278 , - 2989 , - 2940 , - 3131 , - 3562 , - 4233 , - 344 , - 1495 , - 2886 , - 4517 , - 1588 , - 3699 , - 1250 , - 3841 , - 1872 , - 143 , - 3454 , - 2205 , - 1196 , - 427 , - 4698 , - 4409 , - 4360 , - 4551 , - 182 , - 853 , - 1764 , - 2915 , - 4306 , - 1137 , - 3008 , - 319 , - 2670 , - 461 , - 3292 , - 1563 , - 74 , - 3625 , - 2616 , - 1847 , - 1318 , - 1029 , - 980 , - 1171 , - 1602 , - 2273 , - 3184 , - 4335 , - 926 , - 2557 , - 4428 , - 1739 , - 4090 , - 1881 , - 4712 , - 2983 , - 1494 , - 245 , - 4036 , - 3267 , - 2738 , - 2449 , - 2400 , - 2591 , - 3022 , - 3693 , - 4604 , - 955 , - 2346 , - 3977 , - 1048 , - 3159 , - 710 , - 3301 , - 1332 , - 4403 , - 2914 , - 1665 , - 656 , - 4687 , - 4158 , - 3869 , - 3820 , - 4011 , - 4442 , - 313 , - 1224 , - 2375 , - 3766 , - 597 , - 2468 , - 4579 , - 2130 , - 4721 , - 2752 , - 1023 , - 4334 , - 3085 , - 2076 , - 1307 , - 778 , - 489 , - 440 , - 631 , - 1062 , - 1733 , - 2644 , - 3795 , - 386 , - 2017 , - 3888 , - 1199 , - 3550 , - 1341 , - 4172 , - 2443 , - 954 , - 4505 , - 3496 , - 2727 , - 2198 , - 1909 , - 1860 , - 2051 , - 2482 , - 3153 , - 4064 , - 415 , - 1806 , - 3437 , - 508 , - 2619 , - 170 , - 2761 , - 792 , - 3863 , - 2374 , - 1125 , - 116 , - 4147 , - 3618 , - 3329 , - 3280 , - 3471 , - 3902 , - 4573 , - 684 , - 1835 , - 3226 , - 57 , - 1928 , - 4039 , - 1590 , - 4181 , - 2212 , - 483 , - 3794 , - 2545 , - 1536 , - 767 , - 238 , - 4749 , - 4700 , - 91 , - 522 , - 1193 , - 2104 , - 3255 , - 4646 , - 1477 , - 3348 , - 659 , - 3010 , - 801 , - 3632 , - 1903 , - 414 , - 3965 , - 2956 , - 2187 , - 1658 , - 1369 , - 1320 , - 1511 , - 1942 , - 2613 , - 3524 , - 4675 , - 1266 , - 2897 , - 4768 , - 2079 , - 4430 , - 2221 , - 252 , - 3323 , - 1834 , - 585 , - 4376 , - 3607 , - 3078 , - 2789 , - 2740 , - 2931 , - 3362 , - 4033 , - 144 , - 1295 , - 2686 , - 4317 , - 1388 , - 3499 , - 1050 , - 3641 , - 1672 , - 4743 , - 3254 , - 2005 , - 996 , - 227 , - 4498 , - 4209 , - 4160 , - 4351 , - 4782 , - 653 , - 1564 , - 2715 , - 4106 , - 937 , - 2808 , - 119 , - 2470 , - 261 , - 3092 , - 1363 , - 4674 , - 3425 , - 2416 , - 1647 , - 1118 , - 829 , - 780 , - 971 , - 1402 , - 2073 , - 2984 , - 4135 , - 726 , - 2357 , - 4228 , - 1539 , - 3890 , - 1681 , - 4512 , - 2783 , - 1294 , - 45 , - 3836 , - 3067 , - 2538 , - 2249 , - 2200 , - 2391 , - 2822 , - 3493 , - 4404 , - 755 , - 2146 , - 3777 , - 848 , - 2959 , - 510 , - 3101 , - 1132 , - 4203 , - 2714 , - 1465 , - 456 , - 4487 , - 3958 , - 3669 , - 3620 , - 3811 , - 4242 , - 113 , - 1024 , - 2175 , - 3566 , - 397 , - 2268 , - 4379 , - 1930 , - 4521 , - 2552 , - 823 , - 4134 , - 2885 , - 1876 , - 1107 , - 578 , - 289 , - 240 , - 431 , - 862 , - 1533 , - 2444 , - 3595 , - 186 , - 1817 , - 3688 , - 999 , - 3350 , - 1141 , - 3972 , - 2243 , - 754 , - 4305 , - 3296 , - 2527 , - 1998 , - 1709 , - 1660 , - 1851 , - 2282 , - 2953 , - 3864 , - 215 , - 1606 , - 3237 , - 308 , - 2419 , - 4770 , - 2561 , - 592 , - 3663 , - 2174 , - 925 , - 4716 , - 3947 , - 3418 , - 3129 , - 3080 , - 3271 , - 3702 , - 4373 , - 484 , - 1635 , - 3026 , - 4657 , - 1728 , - 3839 , - 1390 , - 3981 , - 2012 , - 283 , - 3594 , - 2345 , - 1336 , - 567 , - 38 , - 4549 , - 4500 , - 4691 , - 322 , - 993 , - 1904 , - 3055 , - 4446 , - 1277 , - 3148 , - 459 , - 2810 , - 601 , - 3432 , - 1703 , - 214 , - 3765 , - 2756 , - 1987 , - 1458 , - 1169 , - 1120 , - 1311 , - 1742 , - 2413 , - 3324 , - 4475 , - 1066 , - 2697 , - 4568 , - 1879 , - 4230 , - 2021 , - 52 , - 3123 , - 1634 , - 385 , - 4176 , - 3407 , - 2878 , - 2589 , - 2540 , - 2731 , - 3162 , - 3833 , - 4744 , - 1095 , - 2486 , - 4117 , - 1188 , - 3299 , - 850 , - 3441 , - 1472 , - 4543 , - 3054 , - 1805 , - 796 , - 27 , - 4298 , - 4009 , - 3960 , - 4151 , - 4582 , - 453 , - 1364 , - 2515 , - 3906 , - 737 , - 2608 , - 4719 , - 2270 , - 61 , - 2892 , - 1163 , - 4474 , - 3225 , - 2216 , - 1447 , - 918 , - 629 , - 580 , - 771 , - 1202 , - 1873 , - 2784 , - 3935 , - 526 , - 2157 , - 4028 , - 1339 , - 3690 , - 1481 , - 4312 , - 2583 , - 1094 , - 4645 , - 3636 , - 2867 , - 2338 , - 2049 , - 2000 , - 2191 , - 2622 , - 3293 , - 4204 , - 555 , - 1946 , - 3577 , - 648 , - 2759 , - 310 , - 2901 , - 932 , - 4003 , - 2514 , - 1265 , - 256 , - 4287 , - 3758 , - 3469 , - 3420 , - 3611 , - 4042 , - 4713 , - 824 , - 1975 , - 3366 , - 197 , - 2068 , - 4179 , - 1730 , - 4321 , - 2352 , - 623 , - 3934 , - 2685 , - 1676 , - 907 , - 378 , - 89 , - 40 , - 231 , - 662 , - 1333 , - 2244 , - 3395 , - 4786 , - 1617 , - 3488 , - 799 , - 3150 , - 941 , - 3772 , - 2043 , - 554 , - 4105 , - 3096 , - 2327 , - 1798 , - 1509 , - 1460 , - 1651 , - 2082 , - 2753 , - 3664 , - 15 , - 1406 , - 3037 , - 108 , - 2219 , - 4570 , - 2361 , - 392 , - 3463 , - 1974 , - 725 , - 4516 , - 3747 , - 3218 , - 2929 , - 2880 , - 3071 , - 3502 , - 4173 , - 284 , - 1435 , - 2826 , - 4457 , - 1528 , - 3639 , - 1190 , - 3781 , - 1812 , - 83 , - 3394 , - 2145 , - 1136 , - 367 , - 4638 , - 4349 , - 4300 , - 4491 , - 122 , - 793 , - 1704 , - 2855 , - 4246 , - 1077 , - 2948 , - 259 , - 2610 , - 401 , - 3232 , - 1503 , - 14 , - 3565 , - 2556 , - 1787 , - 1258 , - 969 , - 920 , - 1111 , - 1542 , - 2213 , - 3124 , - 4275 , - 866 , - 2497 , - 4368 , - 1679 , - 4030 , - 1821 , - 4652 , - 2923 , - 1434 , - 185 , - 3976 , - 3207 , - 2678 , - 2389 , - 2340 , - 2531 , - 2962 , - 3633 , - 4544 , - 895 , - 2286 , - 3917 , - 988 , - 3099 , - 650 , - 3241 , - 1272 , - 4343 , - 2854 , - 1605 , - 596 , - 4627 , - 4098 , - 3809 , - 3760 , - 3951 , - 4382 , - 253 , - 1164 , - 2315 , - 3706 , - 537 , - 2408 , - 4519 , - 2070 , - 4661 , - 2692 , - 963 , - 4274 , - 3025 , - 2016 , - 1247 , - 718 , - 429 , - 380 , - 571 , - 1002 , - 1673 , - 2584 , - 3735 , - 326 , - 1957 , - 3828 , - 1139 , - 3490 , - 1281 , - 4112 , - 2383 , - 894 , - 4445 , - 3436 , - 2667 , - 2138 , - 1849 , - 1800 , - 1991 , - 2422 , - 3093 , - 4004 , - 355 , - 1746 , - 3377 , - 448 , - 2559 , - 110 , - 2701 , - 732 , - 3803 , - 2314 , - 1065 , - 56 , - 4087 , - 3558 , - 3269 , - 3220 , - 3411 , - 3842 , - 4513 , - 624 , - 1775 , - 3166 , - 4797 , - 1868 , - 3979 , - 1530 , - 4121 , - 2152 , - 423 , - 3734 , - 2485 , - 1476 , - 707 , - 178 , - 4689 , - 4640 , - 31 , - 462 , - 1133 , - 2044 , - 3195 , - 4586 , - 1417 , - 3288 , - 599 , - 2950 , - 741 , - 3572 , - 1843 , - 354 , - 3905 , - 2896 , - 2127 , - 1598 , - 1309 , - 1260 , - 1451 , - 1882 , - 2553 , - 3464 , - 4615 , - 1206 , - 2837 , - 4708 , - 2019 , - 4370 , - 2161 , - 192 , - 3263 , - 1774 , - 525 , - 4316 , - 3547 , - 3018 , - 2729 , - 2680 , - 2871 , - 3302 , - 3973 , - 84 , - 1235 , - 2626 , - 4257 , - 1328 , - 3439 , - 990 , - 3581 , - 1612 , - 4683 , - 3194 , - 1945 , - 936 , - 167 , - 4438 , - 4149 , - 4100 , - 4291 , - 4722 , - 593 , - 1504 , - 2655 , - 4046 , - 877 , - 2748 , - 59 , - 2410 , - 201 , - 3032 , - 1303 , - 4614 , - 3365 , - 2356 , - 1587 , - 1058 , - 769 , - 720 , - 911 , - 1342 , - 2013 , - 2924 , - 4075 , - 666 , - 2297 , - 4168 , - 1479 , - 3830 , - 1621 , - 4452 , - 2723 , - 1234 , - 4785 , - 3776 , - 3007 , - 2478 , - 2189 , - 2140 , - 2331 , - 2762 , - 3433 , - 4344 , - 695 , - 2086 , - 3717 , - 788 , - 2899 , - 450 , - 3041 , - 1072 , - 4143 , - 2654 , - 1405 , - 396 , - 4427 , - 3898 , - 3609 , - 3560 , - 3751 , - 4182 , - 53 , - 964 , - 2115 , - 3506 , - 337 , - 2208 , - 4319 , - 1870 , - 4461 , - 2492 , - 763 , - 4074 , - 2825 , - 1816 , - 1047 , - 518 , - 229 , - 180 , - 371 , - 802 , - 1473 , - 2384 , - 3535 , - 126 , - 1757 , - 3628 , - 939 , - 3290 , - 1081 , - 3912 , - 2183 , - 694 , - 4245 , - 3236 , - 2467 , - 1938 , - 1649 , - 1600 , - 1791 , - 2222 , - 2893 , - 3804 , - 155 , - 1546 , - 3177 , - 248 , - 2359 , - 4710 , - 2501 , - 532 , - 3603 , - 2114 , - 865 , - 4656 , - 3887 , - 3358 , - 3069 , - 3020 , - 3211 , - 3642 , - 4313 , - 424 , - 1575 , - 2966 , - 4597 , - 1668 , - 3779 , - 1330 , - 3921 , - 1952 , - 223 , - 3534 , - 2285 , - 1276 , - 507 , - 4778 , - 4489 , - 4440 , - 4631 , - 262 , - 933 , - 1844 , - 2995 , - 4386 , - 1217 , - 3088 , - 399 , - 2750 , - 541 , - 3372 , - 1643 , - 154 , - 3705 , - 2696 , - 1927 , - 1398 , - 1109 , - 1060 , - 1251 , - 1682 , - 2353 , - 3264 , - 4415 , - 1006 , - 2637 , - 4508 , - 1819 , - 4170 , - 1961 , - 4792 , - 3063 , - 1574 , - 325 , - 4116 , - 3347 , - 2818 , - 2529 , - 2480 , - 2671 , - 3102 , - 3773 , - 4684 , - 1035 , - 2426 , - 4057 , - 1128 , - 3239 , - 790 , - 3381 , - 1412 , - 4483 , - 2994 , - 1745 , - 736 , - 4767 , - 4238 , - 3949 , - 3900 , - 4091 , - 4522 , - 393 , - 1304 , - 2455 , - 3846 , - 677 , - 2548 , - 4659 , - 2210 , - 1 , - 2832 , - 1103 , - 4414 , - 3165 , - 2156 , - 1387 , - 858 , - 569 , - 520 , - 711 , - 1142 , - 1813 , - 2724 , - 3875 , - 466 , - 2097 , - 3968 , - 1279 , - 3630 , - 1421 , - 4252 , - 2523 , - 1034 , - 4585 , - 3576 , - 2807 , - 2278 , - 1989 , - 1940 , - 2131 , - 2562 , - 3233 , - 4144 , - 495 , - 1886 , - 3517 , - 588 , - 2699 , - 250 , - 2841 , - 872 , - 3943 , - 2454 , - 1205 , - 196 , - 4227 , - 3698 , - 3409 , - 3360 , - 3551 , - 3982 , - 4653 , - 764 , - 1915 , - 3306 , - 137 , - 2008 , - 4119 , - 1670 , - 4261 , - 2292 , - 563 , - 3874 , - 2625 , - 1616 , - 847 , - 318 , - 29 , - 4780 , - 171 , - 602 , - 1273 , - 2184 , - 3335 , - 4726 , - 1557 , - 3428 , - 739 , - 3090 , - 881 , - 3712 , - 1983 , - 494 , - 4045 , - 3036 , - 2267 , - 1738 , - 1449 , - 1400 , - 1591 , - 2022 , - 2693 , - 3604 , - 4755 , - 1346 , - 2977 , - 48 , - 2159 , - 4510 , - 2301 , - 332 , - 3403 , - 1914 , - 665 , - 4456 , - 3687 , - 3158 , - 2869 , - 2820 , - 3011 , - 3442 , - 4113 , - 224 , - 1375 , - 2766 , - 4397 , - 1468 , - 3579 , - 1130 , - 3721 , - 1752 , - 23 , - 3334 , - 2085 , - 1076 , - 307 , - 4578 , - 4289 , - 4240 , - 4431 , - 62 , - 733 , - 1644 , - 2795 , - 4186 , - 1017 , - 2888 , - 199 , - 2550 , - 341 , - 3172 , - 1443 , - 4754 , - 3505 , - 2496 , - 1727 , - 1198 , - 909 , - 860 , - 1051 , - 1482 , - 2153 , - 3064 , - 4215 , - 806 , - 2437 , - 4308 , - 1619 , - 3970 , - 1761 , - 4592 , - 2863 , - 1374 , - 125 , - 3916 , - 3147 , - 2618 , - 2329 , - 2280 , - 2471 , - 2902 , - 3573 , - 4484 , - 835 , - 2226 , - 3857 , - 928 , - 3039 , - 590 , - 3181 , - 1212 , - 4283 , - 2794 , - 1545 , - 536 , - 4567 , - 4038 , - 3749 , - 3700 , - 3891 , - 4322 , - 193 , - 1104 , - 2255 , - 3646 , - 477 , - 2348 , - 4459 , - 2010 , - 4601 , - 2632 , - 903 , - 4214 , - 2965 , - 1956 , - 1187 , - 658 , - 369 , - 320 , - 511 , - 942 , - 1613 , - 2524 , - 3675 , - 266 , - 1897 , - 3768 , - 1079 , - 3430 , - 1221 , - 4052 , - 2323 , - 834 , - 4385 , - 3376 , - 2607 , - 2078 , - 1789 , - 1740 , - 1931 , - 2362 , - 3033 , - 3944 , - 295 , - 1686 , - 3317 , - 388 , - 2499 , - 50 , - 2641 , - 672 , - 3743 , - 2254 , - 1005 , - 4796 , - 4027 , - 3498 , - 3209 , - 3160 , - 3351 , - 3782 , - 4453 , - 564 , - 1715 , - 3106 , - 4737 , - 1808 , - 3919 , - 1470 , - 4061 , - 2092 , - 363 , - 3674 , - 2425 , - 1416 , - 647 , - 118 , - 4629 , - 4580 , - 4771 , - 402 , - 1073 , - 1984 , - 3135 , - 4526 , - 1357 , - 3228 , - 539 , - 2890 , - 681 , - 3512 , - 1783 , - 294 , - 3845 , - 2836 , - 2067 , - 1538 , - 1249 , - 1200 , - 1391 , - 1822 , - 2493 , - 3404 , - 4555 , - 1146 , - 2777 , - 4648 , - 1959 , - 4310 , - 2101 , - 132 , - 3203 , - 1714 , - 465 , - 4256 , - 3487 , - 2958 , - 2669 , - 2620 , - 2811 , - 3242 , - 3913 , - 24 , - 1175 , - 2566 , - 4197 , - 1268 , - 3379 , - 930 , - 3521 , - 1552 , - 4623 , - 3134 , - 1885 , - 876 , - 107 , - 4378 , - 4089 , - 4040 , - 4231 , - 4662 , - 533 , - 1444 , - 2595 , - 3986 , - 817 , - 2688 , - 4799 , - 2350 , - 141 , - 2972 , - 1243 , - 4554 , - 3305 , - 2296 , - 1527 , - 998 , - 709 , - 660 , - 851 , - 1282 , - 1953 , - 2864 , - 4015 , - 606 , - 2237 , - 4108 , - 1419 , - 3770 , - 1561 , - 4392 , - 2663 , - 1174 , - 4725 , - 3716 , - 2947 , - 2418 , - 2129 , - 2080 , - 2271 , - 2702 , - 3373 , - 4284 , - 635 , - 2026 , - 3657 , - 728 , - 2839 , - 390 , - 2981 , - 1012 , - 4083 , - 2594 , - 1345 , - 336 , - 4367 , - 3838 , - 3549 , - 3500 , - 3691 , - 4122 , - 4793 , - 904 , - 2055 , - 3446 , - 277 , - 2148 , - 4259 , - 1810 , - 4401 , - 2432 , - 703 , - 4014 , - 2765 , - 1756 , - 987 , - 458 , - 169 , - 120 , - 311 , - 742 , - 1413 , - 2324 , - 3475 , - 66 , - 1697 , - 3568 , - 879 , - 3230 , - 1021 , - 3852 , - 2123 , - 634 , - 4185 , - 3176 , - 2407 , - 1878 , - 1589 , - 1540 , - 1731 , - 2162 , - 2833 , - 3744 , - 95 , - 1486 , - 3117 , - 188 , - 2299 , - 4650 , - 2441 , - 472 , - 3543 , - 2054 , - 805 , - 4596 , - 3827 , - 3298 , - 3009 , - 2960 , - 3151 , - 3582 , - 4253 , - 364 , - 1515 , - 2906 , - 4537 , - 1608 , - 3719 , - 1270 , - 3861 , - 1892 , - 163 , - 3474 , - 2225 , - 1216 , - 447 , - 4718 , - 4429 , - 4380 , - 4571 , - 202 , - 873 , - 1784 , - 2935 , - 4326 , - 1157 , - 3028 , - 339 , - 2690 , - 481 , - 3312 , - 1583 , - 94 , - 3645 , - 2636 , - 1867 , - 1338 , - 1049 , - 1000 , - 1191 , - 1622 , - 2293 , - 3204 , - 4355 , - 946 , - 2577 , - 4448 , - 1759 , - 4110 , - 1901 , - 4732 , - 3003 , - 1514 , - 265 , - 4056 , - 3287 , - 2758 , - 2469 , - 2420 , - 2611 , - 3042 , - 3713 , - 4624 , - 975 , - 2366 , - 3997 , - 1068 , - 3179 , - 730 , - 3321 , - 1352 , - 4423 , - 2934 , - 1685 , - 676 , - 4707 , - 4178 , - 3889 , - 3840 , - 4031 , - 4462 , - 333 , - 1244 , - 2395 , - 3786 , - 617 , - 2488 , - 4599 , - 2150 , - 4741 , - 2772 , - 1043 , - 4354 , - 3105 , - 2096 , - 1327 , - 798 , - 509 , - 460 , - 651 , - 1082 , - 1753 , - 2664 , - 3815 , - 406 , - 2037 , - 3908 , - 1219 , - 3570 , - 1361 , - 4192 , - 2463 , - 974 , - 4525 , - 3516 , - 2747 , - 2218 , - 1929 , - 1880 , - 2071 , - 2502 , - 3173 , - 4084 , - 435 , - 1826 , - 3457 , - 528 , - 2639 , - 190 , - 2781 , - 812 , - 3883 , - 2394 , - 1145 , - 136 , - 4167 , - 3638 , - 3349 , - 3300 , - 3491 , - 3922 , - 4593 , - 704 , - 1855 , - 3246 , - 77 , - 1948 , - 4059 , - 1610 , - 4201 , - 2232 , - 503 , - 3814 , - 2565 , - 1556 , - 787 , - 258 , - 4769 , - 4720 , - 111 , - 542 , - 1213 , - 2124 , - 3275 , - 4666 , - 1497 , - 3368 , - 679 , - 3030 , - 821 , - 3652 , - 1923 , - 434 , - 3985 , - 2976 , - 2207 , - 1678 , - 1389 , - 1340 , - 1531 , - 1962 , - 2633 , - 3544 , - 4695 , - 1286 , - 2917 , - 4788 , - 2099 , - 4450 , - 2241 , - 272 , - 3343 , - 1854 , - 605 , - 4396 , - 3627 , - 3098 , - 2809 , - 2760 , - 2951 , - 3382 , - 4053 , - 164 , - 1315 , - 2706 , - 4337 , - 1408 , - 3519 , - 1070 , - 3661 , - 1692 , - 4763 , - 3274 , - 2025 , - 1016 , - 247 , - 4518 , - 4229 , - 4180 , - 4371 , - 2 , - 673 , - 1584 , - 2735 , - 4126 , - 957 , - 2828 , - 139 , - 2490 , - 281 , - 3112 , - 1383 , - 4694 , - 3445 , - 2436 , - 1667 , - 1138 , - 849 , - 800 , - 991 , - 1422 , - 2093 , - 3004 , - 4155 , - 746 , - 2377 , - 4248 , - 1559 , - 3910 , - 1701 , - 4532 , - 2803 , - 1314 , - 65 , - 3856 , - 3087 , - 2558 , - 2269 , - 2220 , - 2411 , - 2842 , - 3513 , - 4424 , - 775 , - 2166 , - 3797 , - 868 , - 2979 , - 530 , - 3121 , - 1152 , - 4223 , - 2734 , - 1485 , - 476 , - 4507 , - 3978 , - 3689 , - 3640 , - 3831 , - 4262 , - 133 , - 1044 , - 2195 , - 3586 , - 417 , - 2288 , - 4399 , - 1950 , - 4541 , - 2572 , - 843 , - 4154 , - 2905 , - 1896 , - 1127 , - 598 , - 309 , - 260 , - 451 , - 882 , - 1553 , - 2464 , - 3615 , - 206 , - 1837 , - 3708 , - 1019 , - 3370 , - 1161 , - 3992 , - 2263 , - 774 , - 4325 , - 3316 , - 2547 , - 2018 , - 1729 , - 1680 , - 1871 , - 2302 , - 2973 , - 3884 , - 235 , - 1626 , - 3257 , - 328 , - 2439 , - 4790 , - 2581 , - 612 , - 3683 , - 2194 , - 945 , - 4736 , - 3967 , - 3438 , - 3149 , - 3100 , - 3291 , - 3722 , - 4393 , - 504 , - 1655 , - 3046 , - 4677 , - 1748 , - 3859 , - 1410 , - 4001 , - 2032 , - 303 , - 3614 , - 2365 , - 1356 , - 587 , - 58 , - 4569 , - 4520 , - 4711 , - 342 , - 1013 , - 1924 , - 3075 , - 4466 , - 1297 , - 3168 , - 479 , - 2830 , - 621 , - 3452 , - 1723 , - 234 , - 3785 , - 2776 , - 2007 , - 1478 , - 1189 , - 1140 , - 1331 , - 1762 , - 2433 , - 3344 , - 4495 , - 1086 , - 2717 , - 4588 , - 1899 , - 4250 , - 2041 , - 72 , - 3143 , - 1654 , - 405 , - 4196 , - 3427 , - 2898 , - 2609 , - 2560 , - 2751 , - 3182 , - 3853 , - 4764 , - 1115 , - 2506 , - 4137 , - 1208 , - 3319 , - 870 , - 3461 , - 1492 , - 4563 , - 3074 , - 1825 , - 816 , - 47 , - 4318 , - 4029 , - 3980 , - 4171 , - 4602 , - 473 , - 1384 , - 2535 , - 3926 , - 757 , - 2628 , - 4739 , - 2290 , - 81 , - 2912 , - 1183 , - 4494 , - 3245 , - 2236 , - 1467 , - 938 , - 649 , - 600 , - 791 , - 1222 , - 1893 , - 2804 , - 3955 , - 546 , - 2177 , - 4048 , - 1359 , - 3710 , - 1501 , - 4332 , - 2603 , - 1114 , - 4665 , - 3656 , - 2887 , - 2358 , - 2069 , - 2020 , - 2211 , - 2642 , - 3313 , - 4224 , - 575 , - 1966 , - 3597 , - 668 , - 2779 , - 330 , - 2921 , - 952 , - 4023 , - 2534 , - 1285 , - 276 , - 4307 , - 3778 , - 3489 , - 3440 , - 3631 , - 4062 , - 4733 , - 844 , - 1995 , - 3386 , - 217 , - 2088 , - 4199 , - 1750 , - 4341 , - 2372 , - 643 , - 3954 , - 2705 , - 1696 , - 927 , - 398 , - 109 , - 60 , - 251 , - 682 , - 1353 , - 2264 , - 3415 , - 6 , - 1637 , - 3508 , - 819 , - 3170 , - 961 , - 3792 , - 2063 , - 574 , - 4125 , - 3116 , - 2347 , - 1818 , - 1529 , - 1480 , - 1671 , - 2102 , - 2773 , - 3684 , - 35 , - 1426 , - 3057 , - 128 , - 2239 , - 4590 , - 2381 , - 412 , - 3483 , - 1994 , - 745 , - 4536 , - 3767 , - 3238 , - 2949 , - 2900 , - 3091 , - 3522 , - 4193 , - 304 , - 1455 , - 2846 , - 4477 , - 1548 , - 3659 , - 1210 , - 3801 , - 1832 , - 103 , - 3414 , - 2165 , - 1156 , - 387 , - 4658 , - 4369 , - 4320 , - 4511 , - 142 , - 813 , - 1724 , - 2875 , - 4266 , - 1097 , - 2968 , - 279 , - 2630 , - 421 , - 3252 , - 1523 , - 34 , - 3585 , - 2576 , - 1807 , - 1278 , - 989 , - 940 , - 1131 , - 1562 , - 2233 , - 3144 , - 4295 , - 886 , - 2517 , - 4388 , - 1699 , - 4050 , - 1841 , - 4672 , - 2943 , - 1454 , - 205 , - 3996 , - 3227 , - 2698 , - 2409 , - 2360 , - 2551 , - 2982 , - 3653 , - 4564 , - 915 , - 2306 , - 3937 , - 1008 , - 3119 , - 670 , - 3261 , - 1292 , - 4363 , - 2874 , - 1625 , - 616 , - 4647 , - 4118 , - 3829 , - 3780 , - 3971 , - 4402 , - 273 , - 1184 , - 2335 , - 3726 , - 557 , - 2428 , - 4539 , - 2090 , - 4681 , - 2712 , - 983 , - 4294 , - 3045 , - 2036 , - 1267 , - 738 , - 449 , - 400 , - 591 , - 1022 , - 1693 , - 2604 , - 3755 , - 346 , - 1977 , - 3848 , - 1159 , - 3510 , - 1301 , - 4132 , - 2403 , - 914 , - 4465 , - 3456 , - 2687 , - 2158 , - 1869 , - 1820 , - 2011 , - 2442 , - 3113 , - 4024 , - 375 , - 1766 , - 3397 , - 468 , - 2579 , - 130 , - 2721 , - 752 , - 3823 , - 2334 , - 1085 , - 76 , - 4107 , - 3578 , - 3289 , - 3240 , - 3431 , - 3862 , - 4533 , - 644 , - 1795 , - 3186 , - 17 , - 1888 , - 3999 , - 1550 , - 4141 , - 2172 , - 443 , - 3754 , - 2505 , - 1496 , - 727 , - 198 , - 4709 , - 4660 , - 51 , - 482 , - 1153 , - 2064 , - 3215 , - 4606 , - 1437 , - 3308 , - 619 , - 2970 , - 761 , - 3592 , - 1863 , - 374 , - 3925 , - 2916 , - 2147 , - 1618 , - 1329 , - 1280 , - 1471 , - 1902 , - 2573 , - 3484 , - 4635 , - 1226 , - 2857 , - 4728 , - 2039 , - 4390 , - 2181 , - 212 , - 3283 , - 1794 , - 545 , - 4336 , - 3567 , - 3038 , - 2749 , - 2700 , - 2891 , - 3322 , - 3993 , - 104 , - 1255 , - 2646 , - 4277 , - 1348 , - 3459 , - 1010 , - 3601 , - 1632 , - 4703 , - 3214 , - 1965 , - 956 , - 187 , - 4458 , - 4169 , - 4120 , - 4311 , - 4742 , - 613 , - 1524 , - 2675 , - 4066 , - 897 , - 2768 , - 79 , - 2430 , - 221 , - 3052 , - 1323 , - 4634 , - 3385 , - 2376 , - 1607 , - 1078 , - 789 , - 740 , - 931 , - 1362 , - 2033 , - 2944 , - 4095 , - 686 , - 2317 , - 4188 , - 1499 , - 3850 , - 1641 , - 4472 , - 2743 , - 1254 , - 5 , - 3796 , - 3027 , - 2498 , - 2209 , - 2160 , - 2351 , - 2782 , - 3453 , - 4364 , - 715 , - 2106 , - 3737 , - 808 , - 2919 , - 470 , - 3061 , - 1092 , - 4163 , - 2674 , - 1425 , - 416 , - 4447 , - 3918 , - 3629 , - 3580 , - 3771 , - 4202 , - 73 , - 984 , - 2135 , - 3526 , - 357 , - 2228 , - 4339 , - 1890 , - 4481 , - 2512 , - 783 , - 4094 , - 2845 , - 1836 , - 1067 , - 538 , - 249 , - 200 , - 391 , - 822 , - 1493 , - 2404 , - 3555 , - 146 , - 1777 , - 3648 , - 959 , - 3310 , - 1101 , - 3932 , - 2203 , - 714 , - 4265 , - 3256 , - 2487 , - 1958 , - 1669 , - 1620 , - 1811 , - 2242 , - 2913 , - 3824 , - 175 , - 1566 , - 3197 , - 268 , - 2379 , - 4730 , - 2521 , - 552 , - 3623 , - 2134 , - 885 , - 4676 , - 3907 , - 3378 , - 3089 , - 3040 , - 3231 , - 3662 , - 4333 , - 444 , - 1595 , - 2986 , - 4617 , - 1688 , - 3799 , - 1350 , - 3941 , - 1972 , - 243 , - 3554 , - 2305 , - 1296 , - 527 , - 4798 , - 4509 , - 4460 , - 4651 , - 282 , - 953 , - 1864 , - 3015 , - 4406 , - 1237 , - 3108 , - 419 , - 2770 , - 561 , - 3392 , - 1663 , - 174 , - 3725 , - 2716 , - 1947 , - 1418 , - 1129 , - 1080 , - 1271 , - 1702 , - 2373 , - 3284 , - 4435 , - 1026 , - 2657 , - 4528 , - 1839 , - 4190 , - 1981 , - 12 , - 3083 , - 1594 , - 345 , - 4136 , - 3367 , - 2838 , - 2549 , - 2500 , - 2691 , - 3122 , - 3793 , - 4704 , - 1055 , - 2446 , - 4077 , - 1148 , - 3259 , - 810 , - 3401 , - 1432 , - 4503 , - 3014 , - 1765 , - 756 , - 4787 , - 4258 , - 3969 , - 3920 , - 4111 , - 4542 , - 413 , - 1324 , - 2475 , - 3866 , - 697 , - 2568 , - 4679 , - 2230 , - 21 , - 2852 , - 1123 , - 4434 , - 3185 , - 2176 , - 1407 , - 878 , - 589 , - 540 , - 731 , - 1162 , - 1833 , - 2744 , - 3895 , - 486 , - 2117 , - 3988 , - 1299 , - 3650 , - 1441 , - 4272 , - 2543 , - 1054 , - 4605 , - 3596 , - 2827 , - 2298 , - 2009 , - 1960 , - 2151 , - 2582 , - 3253 , - 4164 , - 515 , - 1906 , - 3537 , - 608 , - 2719 , - 270 , - 2861 , - 892 , - 3963 , - 2474 , - 1225 , - 216 , - 4247 , - 3718 , - 3429 , - 3380 , - 3571 , - 4002 , - 4673 , - 784 , - 1935 , - 3326 , - 157 , - 2028 , - 4139 , - 1690 , - 4281 , - 2312 , - 583 , - 3894 , - 2645 , - 1636 , - 867 , - 338 , - 49 , - 0 , - 189 , - 682 , - 1479 , - 2580 , - 3985 , - 830 , - 2843 , - 296 , - 2917 , - 978 , - 4207 , - 2876 , - 1849 , - 1126 , - 707 , - 592 , - 781 , - 1274 , - 2071 , - 3172 , - 4577 , - 1422 , - 3435 , - 888 , - 3509 , - 1570 , - 4799 , - 3468 , - 2441 , - 1718 , - 1299 , - 1184 , - 1373 , - 1866 , - 2663 , - 3764 , - 305 , - 2014 , - 4027 , - 1480 , - 4101 , - 2162 , - 527 , - 4060 , - 3033 , - 2310 , - 1891 , - 1776 , - 1965 , - 2458 , - 3255 , - 4356 , - 897 , - 2606 , - 4619 , - 2072 , - 4693 , - 2754 , - 1119 , - 4652 , - 3625 , - 2902 , - 2483 , - 2368 , - 2557 , - 3050 , - 3847 , - 84 , - 1489 , - 3198 , - 347 , - 2664 , - 421 , - 3346 , - 1711 , - 380 , - 4217 , - 3494 , - 3075 , - 2960 , - 3149 , - 3642 , - 4439 , - 676 , - 2081 , - 3790 , - 939 , - 3256 , - 1013 , - 3938 , - 2303 , - 972 , - 4809 , - 4086 , - 3667 , - 3552 , - 3741 , - 4234 , - 167 , - 1268 , - 2673 , - 4382 , - 1531 , - 3848 , - 1605 , - 4530 , - 2895 , - 1564 , - 537 , - 4678 , - 4259 , - 4144 , - 4333 , - 4826 , - 759 , - 1860 , - 3265 , - 110 , - 2123 , - 4440 , - 2197 , - 258 , - 3487 , - 2156 , - 1129 , - 406 , - 4851 , - 4736 , - 61 , - 554 , - 1351 , - 2452 , - 3857 , - 702 , - 2715 , - 168 , - 2789 , - 850 , - 4079 , - 2748 , - 1721 , - 998 , - 579 , - 464 , - 653 , - 1146 , - 1943 , - 3044 , - 4449 , - 1294 , - 3307 , - 760 , - 3381 , - 1442 , - 4671 , - 3340 , - 2313 , - 1590 , - 1171 , - 1056 , - 1245 , - 1738 , - 2535 , - 3636 , - 177 , - 1886 , - 3899 , - 1352 , - 3973 , - 2034 , - 399 , - 3932 , - 2905 , - 2182 , - 1763 , - 1648 , - 1837 , - 2330 , - 3127 , - 4228 , - 769 , - 2478 , - 4491 , - 1944 , - 4565 , - 2626 , - 991 , - 4524 , - 3497 , - 2774 , - 2355 , - 2240 , - 2429 , - 2922 , - 3719 , - 4820 , - 1361 , - 3070 , - 219 , - 2536 , - 293 , - 3218 , - 1583 , - 252 , - 4089 , - 3366 , - 2947 , - 2832 , - 3021 , - 3514 , - 4311 , - 548 , - 1953 , - 3662 , - 811 , - 3128 , - 885 , - 3810 , - 2175 , - 844 , - 4681 , - 3958 , - 3539 , - 3424 , - 3613 , - 4106 , - 39 , - 1140 , - 2545 , - 4254 , - 1403 , - 3720 , - 1477 , - 4402 , - 2767 , - 1436 , - 409 , - 4550 , - 4131 , - 4016 , - 4205 , - 4698 , - 631 , - 1732 , - 3137 , - 4846 , - 1995 , - 4312 , - 2069 , - 130 , - 3359 , - 2028 , - 1001 , - 278 , - 4723 , - 4608 , - 4797 , - 426 , - 1223 , - 2324 , - 3729 , - 574 , - 2587 , - 40 , - 2661 , - 722 , - 3951 , - 2620 , - 1593 , - 870 , - 451 , - 336 , - 525 , - 1018 , - 1815 , - 2916 , - 4321 , - 1166 , - 3179 , - 632 , - 3253 , - 1314 , - 4543 , - 3212 , - 2185 , - 1462 , - 1043 , - 928 , - 1117 , - 1610 , - 2407 , - 3508 , - 49 , - 1758 , - 3771 , - 1224 , - 3845 , - 1906 , - 271 , - 3804 , - 2777 , - 2054 , - 1635 , - 1520 , - 1709 , - 2202 , - 2999 , - 4100 , - 641 , - 2350 , - 4363 , - 1816 , - 4437 , - 2498 , - 863 , - 4396 , - 3369 , - 2646 , - 2227 , - 2112 , - 2301 , - 2794 , - 3591 , - 4692 , - 1233 , - 2942 , - 91 , - 2408 , - 165 , - 3090 , - 1455 , - 124 , - 3961 , - 3238 , - 2819 , - 2704 , - 2893 , - 3386 , - 4183 , - 420 , - 1825 , - 3534 , - 683 , - 3000 , - 757 , - 3682 , - 2047 , - 716 , - 4553 , - 3830 , - 3411 , - 3296 , - 3485 , - 3978 , - 4775 , - 1012 , - 2417 , - 4126 , - 1275 , - 3592 , - 1349 , - 4274 , - 2639 , - 1308 , - 281 , - 4422 , - 4003 , - 3888 , - 4077 , - 4570 , - 503 , - 1604 , - 3009 , - 4718 , - 1867 , - 4184 , - 1941 , - 2 , - 3231 , - 1900 , - 873 , - 150 , - 4595 , - 4480 , - 4669 , - 298 , - 1095 , - 2196 , - 3601 , - 446 , - 2459 , - 4776 , - 2533 , - 594 , - 3823 , - 2492 , - 1465 , - 742 , - 323 , - 208 , - 397 , - 890 , - 1687 , - 2788 , - 4193 , - 1038 , - 3051 , - 504 , - 3125 , - 1186 , - 4415 , - 3084 , - 2057 , - 1334 , - 915 , - 800 , - 989 , - 1482 , - 2279 , - 3380 , - 4785 , - 1630 , - 3643 , - 1096 , - 3717 , - 1778 , - 143 , - 3676 , - 2649 , - 1926 , - 1507 , - 1392 , - 1581 , - 2074 , - 2871 , - 3972 , - 513 , - 2222 , - 4235 , - 1688 , - 4309 , - 2370 , - 735 , - 4268 , - 3241 , - 2518 , - 2099 , - 1984 , - 2173 , - 2666 , - 3463 , - 4564 , - 1105 , - 2814 , - 4827 , - 2280 , - 37 , - 2962 , - 1327 , - 4860 , - 3833 , - 3110 , - 2691 , - 2576 , - 2765 , - 3258 , - 4055 , - 292 , - 1697 , - 3406 , - 555 , - 2872 , - 629 , - 3554 , - 1919 , - 588 , - 4425 , - 3702 , - 3283 , - 3168 , - 3357 , - 3850 , - 4647 , - 884 , - 2289 , - 3998 , - 1147 , - 3464 , - 1221 , - 4146 , - 2511 , - 1180 , - 153 , - 4294 , - 3875 , - 3760 , - 3949 , - 4442 , - 375 , - 1476 , - 2881 , - 4590 , - 1739 , - 4056 , - 1813 , - 4738 , - 3103 , - 1772 , - 745 , - 22 , - 4467 , - 4352 , - 4541 , - 170 , - 967 , - 2068 , - 3473 , - 318 , - 2331 , - 4648 , - 2405 , - 466 , - 3695 , - 2364 , - 1337 , - 614 , - 195 , - 80 , - 269 , - 762 , - 1559 , - 2660 , - 4065 , - 910 , - 2923 , - 376 , - 2997 , - 1058 , - 4287 , - 2956 , - 1929 , - 1206 , - 787 , - 672 , - 861 , - 1354 , - 2151 , - 3252 , - 4657 , - 1502 , - 3515 , - 968 , - 3589 , - 1650 , - 15 , - 3548 , - 2521 , - 1798 , - 1379 , - 1264 , - 1453 , - 1946 , - 2743 , - 3844 , - 385 , - 2094 , - 4107 , - 1560 , - 4181 , - 2242 , - 607 , - 4140 , - 3113 , - 2390 , - 1971 , - 1856 , - 2045 , - 2538 , - 3335 , - 4436 , - 977 , - 2686 , - 4699 , - 2152 , - 4773 , - 2834 , - 1199 , - 4732 , - 3705 , - 2982 , - 2563 , - 2448 , - 2637 , - 3130 , - 3927 , - 164 , - 1569 , - 3278 , - 427 , - 2744 , - 501 , - 3426 , - 1791 , - 460 , - 4297 , - 3574 , - 3155 , - 3040 , - 3229 , - 3722 , - 4519 , - 756 , - 2161 , - 3870 , - 1019 , - 3336 , - 1093 , - 4018 , - 2383 , - 1052 , - 25 , - 4166 , - 3747 , - 3632 , - 3821 , - 4314 , - 247 , - 1348 , - 2753 , - 4462 , - 1611 , - 3928 , - 1685 , - 4610 , - 2975 , - 1644 , - 617 , - 4758 , - 4339 , - 4224 , - 4413 , - 42 , - 839 , - 1940 , - 3345 , - 190 , - 2203 , - 4520 , - 2277 , - 338 , - 3567 , - 2236 , - 1209 , - 486 , - 67 , - 4816 , - 141 , - 634 , - 1431 , - 2532 , - 3937 , - 782 , - 2795 , - 248 , - 2869 , - 930 , - 4159 , - 2828 , - 1801 , - 1078 , - 659 , - 544 , - 733 , - 1226 , - 2023 , - 3124 , - 4529 , - 1374 , - 3387 , - 840 , - 3461 , - 1522 , - 4751 , - 3420 , - 2393 , - 1670 , - 1251 , - 1136 , - 1325 , - 1818 , - 2615 , - 3716 , - 257 , - 1966 , - 3979 , - 1432 , - 4053 , - 2114 , - 479 , - 4012 , - 2985 , - 2262 , - 1843 , - 1728 , - 1917 , - 2410 , - 3207 , - 4308 , - 849 , - 2558 , - 4571 , - 2024 , - 4645 , - 2706 , - 1071 , - 4604 , - 3577 , - 2854 , - 2435 , - 2320 , - 2509 , - 3002 , - 3799 , - 36 , - 1441 , - 3150 , - 299 , - 2616 , - 373 , - 3298 , - 1663 , - 332 , - 4169 , - 3446 , - 3027 , - 2912 , - 3101 , - 3594 , - 4391 , - 628 , - 2033 , - 3742 , - 891 , - 3208 , - 965 , - 3890 , - 2255 , - 924 , - 4761 , - 4038 , - 3619 , - 3504 , - 3693 , - 4186 , - 119 , - 1220 , - 2625 , - 4334 , - 1483 , - 3800 , - 1557 , - 4482 , - 2847 , - 1516 , - 489 , - 4630 , - 4211 , - 4096 , - 4285 , - 4778 , - 711 , - 1812 , - 3217 , - 62 , - 2075 , - 4392 , - 2149 , - 210 , - 3439 , - 2108 , - 1081 , - 358 , - 4803 , - 4688 , - 13 , - 506 , - 1303 , - 2404 , - 3809 , - 654 , - 2667 , - 120 , - 2741 , - 802 , - 4031 , - 2700 , - 1673 , - 950 , - 531 , - 416 , - 605 , - 1098 , - 1895 , - 2996 , - 4401 , - 1246 , - 3259 , - 712 , - 3333 , - 1394 , - 4623 , - 3292 , - 2265 , - 1542 , - 1123 , - 1008 , - 1197 , - 1690 , - 2487 , - 3588 , - 129 , - 1838 , - 3851 , - 1304 , - 3925 , - 1986 , - 351 , - 3884 , - 2857 , - 2134 , - 1715 , - 1600 , - 1789 , - 2282 , - 3079 , - 4180 , - 721 , - 2430 , - 4443 , - 1896 , - 4517 , - 2578 , - 943 , - 4476 , - 3449 , - 2726 , - 2307 , - 2192 , - 2381 , - 2874 , - 3671 , - 4772 , - 1313 , - 3022 , - 171 , - 2488 , - 245 , - 3170 , - 1535 , - 204 , - 4041 , - 3318 , - 2899 , - 2784 , - 2973 , - 3466 , - 4263 , - 500 , - 1905 , - 3614 , - 763 , - 3080 , - 837 , - 3762 , - 2127 , - 796 , - 4633 , - 3910 , - 3491 , - 3376 , - 3565 , - 4058 , - 4855 , - 1092 , - 2497 , - 4206 , - 1355 , - 3672 , - 1429 , - 4354 , - 2719 , - 1388 , - 361 , - 4502 , - 4083 , - 3968 , - 4157 , - 4650 , - 583 , - 1684 , - 3089 , - 4798 , - 1947 , - 4264 , - 2021 , - 82 , - 3311 , - 1980 , - 953 , - 230 , - 4675 , - 4560 , - 4749 , - 378 , - 1175 , - 2276 , - 3681 , - 526 , - 2539 , - 4856 , - 2613 , - 674 , - 3903 , - 2572 , - 1545 , - 822 , - 403 , - 288 , - 477 , - 970 , - 1767 , - 2868 , - 4273 , - 1118 , - 3131 , - 584 , - 3205 , - 1266 , - 4495 , - 3164 , - 2137 , - 1414 , - 995 , - 880 , - 1069 , - 1562 , - 2359 , - 3460 , - 1 , - 1710 , - 3723 , - 1176 , - 3797 , - 1858 , - 223 , - 3756 , - 2729 , - 2006 , - 1587 , - 1472 , - 1661 , - 2154 , - 2951 , - 4052 , - 593 , - 2302 , - 4315 , - 1768 , - 4389 , - 2450 , - 815 , - 4348 , - 3321 , - 2598 , - 2179 , - 2064 , - 2253 , - 2746 , - 3543 , - 4644 , - 1185 , - 2894 , - 43 , - 2360 , - 117 , - 3042 , - 1407 , - 76 , - 3913 , - 3190 , - 2771 , - 2656 , - 2845 , - 3338 , - 4135 , - 372 , - 1777 , - 3486 , - 635 , - 2952 , - 709 , - 3634 , - 1999 , - 668 , - 4505 , - 3782 , - 3363 , - 3248 , - 3437 , - 3930 , - 4727 , - 964 , - 2369 , - 4078 , - 1227 , - 3544 , - 1301 , - 4226 , - 2591 , - 1260 , - 233 , - 4374 , - 3955 , - 3840 , - 4029 , - 4522 , - 455 , - 1556 , - 2961 , - 4670 , - 1819 , - 4136 , - 1893 , - 4818 , - 3183 , - 1852 , - 825 , - 102 , - 4547 , - 4432 , - 4621 , - 250 , - 1047 , - 2148 , - 3553 , - 398 , - 2411 , - 4728 , - 2485 , - 546 , - 3775 , - 2444 , - 1417 , - 694 , - 275 , - 160 , - 349 , - 842 , - 1639 , - 2740 , - 4145 , - 990 , - 3003 , - 456 , - 3077 , - 1138 , - 4367 , - 3036 , - 2009 , - 1286 , - 867 , - 752 , - 941 , - 1434 , - 2231 , - 3332 , - 4737 , - 1582 , - 3595 , - 1048 , - 3669 , - 1730 , - 95 , - 3628 , - 2601 , - 1878 , - 1459 , - 1344 , - 1533 , - 2026 , - 2823 , - 3924 , - 465 , - 2174 , - 4187 , - 1640 , - 4261 , - 2322 , - 687 , - 4220 , - 3193 , - 2470 , - 2051 , - 1936 , - 2125 , - 2618 , - 3415 , - 4516 , - 1057 , - 2766 , - 4779 , - 2232 , - 4853 , - 2914 , - 1279 , - 4812 , - 3785 , - 3062 , - 2643 , - 2528 , - 2717 , - 3210 , - 4007 , - 244 , - 1649 , - 3358 , - 507 , - 2824 , - 581 , - 3506 , - 1871 , - 540 , - 4377 , - 3654 , - 3235 , - 3120 , - 3309 , - 3802 , - 4599 , - 836 , - 2241 , - 3950 , - 1099 , - 3416 , - 1173 , - 4098 , - 2463 , - 1132 , - 105 , - 4246 , - 3827 , - 3712 , - 3901 , - 4394 , - 327 , - 1428 , - 2833 , - 4542 , - 1691 , - 4008 , - 1765 , - 4690 , - 3055 , - 1724 , - 697 , - 4838 , - 4419 , - 4304 , - 4493 , - 122 , - 919 , - 2020 , - 3425 , - 270 , - 2283 , - 4600 , - 2357 , - 418 , - 3647 , - 2316 , - 1289 , - 566 , - 147 , - 32 , - 221 , - 714 , - 1511 , - 2612 , - 4017 , - 862 , - 2875 , - 328 , - 2949 , - 1010 , - 4239 , - 2908 , - 1881 , - 1158 , - 739 , - 624 , - 813 , - 1306 , - 2103 , - 3204 , - 4609 , - 1454 , - 3467 , - 920 , - 3541 , - 1602 , - 4831 , - 3500 , - 2473 , - 1750 , - 1331 , - 1216 , - 1405 , - 1898 , - 2695 , - 3796 , - 337 , - 2046 , - 4059 , - 1512 , - 4133 , - 2194 , - 559 , - 4092 , - 3065 , - 2342 , - 1923 , - 1808 , - 1997 , - 2490 , - 3287 , - 4388 , - 929 , - 2638 , - 4651 , - 2104 , - 4725 , - 2786 , - 1151 , - 4684 , - 3657 , - 2934 , - 2515 , - 2400 , - 2589 , - 3082 , - 3879 , - 116 , - 1521 , - 3230 , - 379 , - 2696 , - 453 , - 3378 , - 1743 , - 412 , - 4249 , - 3526 , - 3107 , - 2992 , - 3181 , - 3674 , - 4471 , - 708 , - 2113 , - 3822 , - 971 , - 3288 , - 1045 , - 3970 , - 2335 , - 1004 , - 4841 , - 4118 , - 3699 , - 3584 , - 3773 , - 4266 , - 199 , - 1300 , - 2705 , - 4414 , - 1563 , - 3880 , - 1637 , - 4562 , - 2927 , - 1596 , - 569 , - 4710 , - 4291 , - 4176 , - 4365 , - 4858 , - 791 , - 1892 , - 3297 , - 142 , - 2155 , - 4472 , - 2229 , - 290 , - 3519 , - 2188 , - 1161 , - 438 , - 19 , - 4768 , - 93 , - 586 , - 1383 , - 2484 , - 3889 , - 734 , - 2747 , - 200 , - 2821 , - 882 , - 4111 , - 2780 , - 1753 , - 1030 , - 611 , - 496 , - 685 , - 1178 , - 1975 , - 3076 , - 4481 , - 1326 , - 3339 , - 792 , - 3413 , - 1474 , - 4703 , - 3372 , - 2345 , - 1622 , - 1203 , - 1088 , - 1277 , - 1770 , - 2567 , - 3668 , - 209 , - 1918 , - 3931 , - 1384 , - 4005 , - 2066 , - 431 , - 3964 , - 2937 , - 2214 , - 1795 , - 1680 , - 1869 , - 2362 , - 3159 , - 4260 , - 801 , - 2510 , - 4523 , - 1976 , - 4597 , - 2658 , - 1023 , - 4556 , - 3529 , - 2806 , - 2387 , - 2272 , - 2461 , - 2954 , - 3751 , - 4852 , - 1393 , - 3102 , - 251 , - 2568 , - 325 , - 3250 , - 1615 , - 284 , - 4121 , - 3398 , - 2979 , - 2864 , - 3053 , - 3546 , - 4343 , - 580 , - 1985 , - 3694 , - 843 , - 3160 , - 917 , - 3842 , - 2207 , - 876 , - 4713 , - 3990 , - 3571 , - 3456 , - 3645 , - 4138 , - 71 , - 1172 , - 2577 , - 4286 , - 1435 , - 3752 , - 1509 , - 4434 , - 2799 , - 1468 , - 441 , - 4582 , - 4163 , - 4048 , - 4237 , - 4730 , - 663 , - 1764 , - 3169 , - 14 , - 2027 , - 4344 , - 2101 , - 162 , - 3391 , - 2060 , - 1033 , - 310 , - 4755 , - 4640 , - 4829 , - 458 , - 1255 , - 2356 , - 3761 , - 606 , - 2619 , - 72 , - 2693 , - 754 , - 3983 , - 2652 , - 1625 , - 902 , - 483 , - 368 , - 557 , - 1050 , - 1847 , - 2948 , - 4353 , - 1198 , - 3211 , - 664 , - 3285 , - 1346 , - 4575 , - 3244 , - 2217 , - 1494 , - 1075 , - 960 , - 1149 , - 1642 , - 2439 , - 3540 , - 81 , - 1790 , - 3803 , - 1256 , - 3877 , - 1938 , - 303 , - 3836 , - 2809 , - 2086 , - 1667 , - 1552 , - 1741 , - 2234 , - 3031 , - 4132 , - 673 , - 2382 , - 4395 , - 1848 , - 4469 , - 2530 , - 895 , - 4428 , - 3401 , - 2678 , - 2259 , - 2144 , - 2333 , - 2826 , - 3623 , - 4724 , - 1265 , - 2974 , - 123 , - 2440 , - 197 , - 3122 , - 1487 , - 156 , - 3993 , - 3270 , - 2851 , - 2736 , - 2925 , - 3418 , - 4215 , - 452 , - 1857 , - 3566 , - 715 , - 3032 , - 789 , - 3714 , - 2079 , - 748 , - 4585 , - 3862 , - 3443 , - 3328 , - 3517 , - 4010 , - 4807 , - 1044 , - 2449 , - 4158 , - 1307 , - 3624 , - 1381 , - 4306 , - 2671 , - 1340 , - 313 , - 4454 , - 4035 , - 3920 , - 4109 , - 4602 , - 535 , - 1636 , - 3041 , - 4750 , - 1899 , - 4216 , - 1973 , - 34 , - 3263 , - 1932 , - 905 , - 182 , - 4627 , - 4512 , - 4701 , - 330 , - 1127 , - 2228 , - 3633 , - 478 , - 2491 , - 4808 , - 2565 , - 626 , - 3855 , - 2524 , - 1497 , - 774 , - 355 , - 240 , - 429 , - 922 , - 1719 , - 2820 , - 4225 , - 1070 , - 3083 , - 536 , - 3157 , - 1218 , - 4447 , - 3116 , - 2089 , - 1366 , - 947 , - 832 , - 1021 , - 1514 , - 2311 , - 3412 , - 4817 , - 1662 , - 3675 , - 1128 , - 3749 , - 1810 , - 175 , - 3708 , - 2681 , - 1958 , - 1539 , - 1424 , - 1613 , - 2106 , - 2903 , - 4004 , - 545 , - 2254 , - 4267 , - 1720 , - 4341 , - 2402 , - 767 , - 4300 , - 3273 , - 2550 , - 2131 , - 2016 , - 2205 , - 2698 , - 3495 , - 4596 , - 1137 , - 2846 , - 4859 , - 2312 , - 69 , - 2994 , - 1359 , - 28 , - 3865 , - 3142 , - 2723 , - 2608 , - 2797 , - 3290 , - 4087 , - 324 , - 1729 , - 3438 , - 587 , - 2904 , - 661 , - 3586 , - 1951 , - 620 , - 4457 , - 3734 , - 3315 , - 3200 , - 3389 , - 3882 , - 4679 , - 916 , - 2321 , - 4030 , - 1179 , - 3496 , - 1253 , - 4178 , - 2543 , - 1212 , - 185 , - 4326 , - 3907 , - 3792 , - 3981 , - 4474 , - 407 , - 1508 , - 2913 , - 4622 , - 1771 , - 4088 , - 1845 , - 4770 , - 3135 , - 1804 , - 777 , - 54 , - 4499 , - 4384 , - 4573 , - 202 , - 999 , - 2100 , - 3505 , - 350 , - 2363 , - 4680 , - 2437 , - 498 , - 3727 , - 2396 , - 1369 , - 646 , - 227 , - 112 , - 301 , - 794 , - 1591 , - 2692 , - 4097 , - 942 , - 2955 , - 408 , - 3029 , - 1090 , - 4319 , - 2988 , - 1961 , - 1238 , - 819 , - 704 , - 893 , - 1386 , - 2183 , - 3284 , - 4689 , - 1534 , - 3547 , - 1000 , - 3621 , - 1682 , - 47 , - 3580 , - 2553 , - 1830 , - 1411 , - 1296 , - 1485 , - 1978 , - 2775 , - 3876 , - 417 , - 2126 , - 4139 , - 1592 , - 4213 , - 2274 , - 639 , - 4172 , - 3145 , - 2422 , - 2003 , - 1888 , - 2077 , - 2570 , - 3367 , - 4468 , - 1009 , - 2718 , - 4731 , - 2184 , - 4805 , - 2866 , - 1231 , - 4764 , - 3737 , - 3014 , - 2595 , - 2480 , - 2669 , - 3162 , - 3959 , - 196 , - 1601 , - 3310 , - 459 , - 2776 , - 533 , - 3458 , - 1823 , - 492 , - 4329 , - 3606 , - 3187 , - 3072 , - 3261 , - 3754 , - 4551 , - 788 , - 2193 , - 3902 , - 1051 , - 3368 , - 1125 , - 4050 , - 2415 , - 1084 , - 57 , - 4198 , - 3779 , - 3664 , - 3853 , - 4346 , - 279 , - 1380 , - 2785 , - 4494 , - 1643 , - 3960 , - 1717 , - 4642 , - 3007 , - 1676 , - 649 , - 4790 , - 4371 , - 4256 , - 4445 , - 74 , - 871 , - 1972 , - 3377 , - 222 , - 2235 , - 4552 , - 2309 , - 370 , - 3599 , - 2268 , - 1241 , - 518 , - 99 , - 4848 , - 173 , - 666 , - 1463 , - 2564 , - 3969 , - 814 , - 2827 , - 280 , - 2901 , - 962 , - 4191 , - 2860 , - 1833 , - 1110 , - 691 , - 576 , - 765 , - 1258 , - 2055 , - 3156 , - 4561 , - 1406 , - 3419 , - 872 , - 3493 , - 1554 , - 4783 , - 3452 , - 2425 , - 1702 , - 1283 , - 1168 , - 1357 , - 1850 , - 2647 , - 3748 , - 289 , - 1998 , - 4011 , - 1464 , - 4085 , - 2146 , - 511 , - 4044 , - 3017 , - 2294 , - 1875 , - 1760 , - 1949 , - 2442 , - 3239 , - 4340 , - 881 , - 2590 , - 4603 , - 2056 , - 4677 , - 2738 , - 1103 , - 4636 , - 3609 , - 2886 , - 2467 , - 2352 , - 2541 , - 3034 , - 3831 , - 68 , - 1473 , - 3182 , - 331 , - 2648 , - 405 , - 3330 , - 1695 , - 364 , - 4201 , - 3478 , - 3059 , - 2944 , - 3133 , - 3626 , - 4423 , - 660 , - 2065 , - 3774 , - 923 , - 3240 , - 997 , - 3922 , - 2287 , - 956 , - 4793 , - 4070 , - 3651 , - 3536 , - 3725 , - 4218 , - 151 , - 1252 , - 2657 , - 4366 , - 1515 , - 3832 , - 1589 , - 4514 , - 2879 , - 1548 , - 521 , - 4662 , - 4243 , - 4128 , - 4317 , - 4810 , - 743 , - 1844 , - 3249 , - 94 , - 2107 , - 4424 , - 2181 , - 242 , - 3471 , - 2140 , - 1113 , - 390 , - 4835 , - 4720 , - 45 , - 538 , - 1335 , - 2436 , - 3841 , - 686 , - 2699 , - 152 , - 2773 , - 834 , - 4063 , - 2732 , - 1705 , - 982 , - 563 , - 448 , - 637 , - 1130 , - 1927 , - 3028 , - 4433 , - 1278 , - 3291 , - 744 , - 3365 , - 1426 , - 4655 , - 3324 , - 2297 , - 1574 , - 1155 , - 1040 , - 1229 , - 1722 , - 2519 , - 3620 , - 161 , - 1870 , - 3883 , - 1336 , - 3957 , - 2018 , - 383 , - 3916 , - 2889 , - 2166 , - 1747 , - 1632 , - 1821 , - 2314 , - 3111 , - 4212 , - 753 , - 2462 , - 4475 , - 1928 , - 4549 , - 2610 , - 975 , - 4508 , - 3481 , - 2758 , - 2339 , - 2224 , - 2413 , - 2906 , - 3703 , - 4804 , - 1345 , - 3054 , - 203 , - 2520 , - 277 , - 3202 , - 1567 , - 236 , - 4073 , - 3350 , - 2931 , - 2816 , - 3005 , - 3498 , - 4295 , - 532 , - 1937 , - 3646 , - 795 , - 3112 , - 869 , - 3794 , - 2159 , - 828 , - 4665 , - 3942 , - 3523 , - 3408 , - 3597 , - 4090 , - 23 , - 1124 , - 2529 , - 4238 , - 1387 , - 3704 , - 1461 , - 4386 , - 2751 , - 1420 , - 393 , - 4534 , - 4115 , - 4000 , - 4189 , - 4682 , - 615 , - 1716 , - 3121 , - 4830 , - 1979 , - 4296 , - 2053 , - 114 , - 3343 , - 2012 , - 985 , - 262 , - 4707 , - 4592 , - 4781 , - 410 , - 1207 , - 2308 , - 3713 , - 558 , - 2571 , - 24 , - 2645 , - 706 , - 3935 , - 2604 , - 1577 , - 854 , - 435 , - 320 , - 509 , - 1002 , - 1799 , - 2900 , - 4305 , - 1150 , - 3163 , - 616 , - 3237 , - 1298 , - 4527 , - 3196 , - 2169 , - 1446 , - 1027 , - 912 , - 1101 , - 1594 , - 2391 , - 3492 , - 33 , - 1742 , - 3755 , - 1208 , - 3829 , - 1890 , - 255 , - 3788 , - 2761 , - 2038 , - 1619 , - 1504 , - 1693 , - 2186 , - 2983 , - 4084 , - 625 , - 2334 , - 4347 , - 1800 , - 4421 , - 2482 , - 847 , - 4380 , - 3353 , - 2630 , - 2211 , - 2096 , - 2285 , - 2778 , - 3575 , - 4676 , - 1217 , - 2926 , - 75 , - 2392 , - 149 , - 3074 , - 1439 , - 108 , - 3945 , - 3222 , - 2803 , - 2688 , - 2877 , - 3370 , - 4167 , - 404 , - 1809 , - 3518 , - 667 , - 2984 , - 741 , - 3666 , - 2031 , - 700 , - 4537 , - 3814 , - 3395 , - 3280 , - 3469 , - 3962 , - 4759 , - 996 , - 2401 , - 4110 , - 1259 , - 3576 , - 1333 , - 4258 , - 2623 , - 1292 , - 265 , - 4406 , - 3987 , - 3872 , - 4061 , - 4554 , - 487 , - 1588 , - 2993 , - 4702 , - 1851 , - 4168 , - 1925 , - 4850 , - 3215 , - 1884 , - 857 , - 134 , - 4579 , - 4464 , - 4653 , - 282 , - 1079 , - 2180 , - 3585 , - 430 , - 2443 , - 4760 , - 2517 , - 578 , - 3807 , - 2476 , - 1449 , - 726 , - 307 , - 192 , - 381 , - 874 , - 1671 , - 2772 , - 4177 , - 1022 , - 3035 , - 488 , - 3109 , - 1170 , - 4399 , - 3068 , - 2041 , - 1318 , - 899 , - 784 , - 973 , - 1466 , - 2263 , - 3364 , - 4769 , - 1614 , - 3627 , - 1080 , - 3701 , - 1762 , - 127 , - 3660 , - 2633 , - 1910 , - 1491 , - 1376 , - 1565 , - 2058 , - 2855 , - 3956 , - 497 , - 2206 , - 4219 , - 1672 , - 4293 , - 2354 , - 719 , - 4252 , - 3225 , - 2502 , - 2083 , - 1968 , - 2157 , - 2650 , - 3447 , - 4548 , - 1089 , - 2798 , - 4811 , - 2264 , - 21 , - 2946 , - 1311 , - 4844 , - 3817 , - 3094 , - 2675 , - 2560 , - 2749 , - 3242 , - 4039 , - 276 , - 1681 , - 3390 , - 539 , - 2856 , - 613 , - 3538 , - 1903 , - 572 , - 4409 , - 3686 , - 3267 , - 3152 , - 3341 , - 3834 , - 4631 , - 868 , - 2273 , - 3982 , - 1131 , - 3448 , - 1205 , - 4130 , - 2495 , - 1164 , - 137 , - 4278 , - 3859 , - 3744 , - 3933 , - 4426 , - 359 , - 1460 , - 2865 , - 4574 , - 1723 , - 4040 , - 1797 , - 4722 , - 3087 , - 1756 , - 729 , - 6 , - 4451 , - 4336 , - 4525 , - 154 , - 951 , - 2052 , - 3457 , - 302 , - 2315 , - 4632 , - 2389 , - 450 , - 3679 , - 2348 , - 1321 , - 598 , - 179 , - 64 , - 253 , - 746 , - 1543 , - 2644 , - 4049 , - 894 , - 2907 , - 360 , - 2981 , - 1042 , - 4271 , - 2940 , - 1913 , - 1190 , - 771 , - 656 , - 845 , - 1338 , - 2135 , - 3236 , - 4641 , - 1486 , - 3499 , - 952 , - 3573 , - 1634 , - 4863 , - 3532 , - 2505 , - 1782 , - 1363 , - 1248 , - 1437 , - 1930 , - 2727 , - 3828 , - 369 , - 2078 , - 4091 , - 1544 , - 4165 , - 2226 , - 591 , - 4124 , - 3097 , - 2374 , - 1955 , - 1840 , - 2029 , - 2522 , - 3319 , - 4420 , - 961 , - 2670 , - 4683 , - 2136 , - 4757 , - 2818 , - 1183 , - 4716 , - 3689 , - 2966 , - 2547 , - 2432 , - 2621 , - 3114 , - 3911 , - 148 , - 1553 , - 3262 , - 411 , - 2728 , - 485 , - 3410 , - 1775 , - 444 , - 4281 , - 3558 , - 3139 , - 3024 , - 3213 , - 3706 , - 4503 , - 740 , - 2145 , - 3854 , - 1003 , - 3320 , - 1077 , - 4002 , - 2367 , - 1036 , - 9 , - 4150 , - 3731 , - 3616 , - 3805 , - 4298 , - 231 , - 1332 , - 2737 , - 4446 , - 1595 , - 3912 , - 1669 , - 4594 , - 2959 , - 1628 , - 601 , - 4742 , - 4323 , - 4208 , - 4397 , - 26 , - 823 , - 1924 , - 3329 , - 174 , - 2187 , - 4504 , - 2261 , - 322 , - 3551 , - 2220 , - 1193 , - 470 , - 51 , - 4800 , - 125 , - 618 , - 1415 , - 2516 , - 3921 , - 766 , - 2779 , - 232 , - 2853 , - 914 , - 4143 , - 2812 , - 1785 , - 1062 , - 643 , - 528 , - 717 , - 1210 , - 2007 , - 3108 , - 4513 , - 1358 , - 3371 , - 824 , - 3445 , - 1506 , - 4735 , - 3404 , - 2377 , - 1654 , - 1235 , - 1120 , - 1309 , - 1802 , - 2599 , - 3700 , - 241 , - 1950 , - 3963 , - 1416 , - 4037 , - 2098 , - 463 , - 3996 , - 2969 , - 2246 , - 1827 , - 1712 , - 1901 , - 2394 , - 3191 , - 4292 , - 833 , - 2542 , - 4555 , - 2008 , - 4629 , - 2690 , - 1055 , - 4588 , - 3561 , - 2838 , - 2419 , - 2304 , - 2493 , - 2986 , - 3783 , - 20 , - 1425 , - 3134 , - 283 , - 2600 , - 357 , - 3282 , - 1647 , - 316 , - 4153 , - 3430 , - 3011 , - 2896 , - 3085 , - 3578 , - 4375 , - 612 , - 2017 , - 3726 , - 875 , - 3192 , - 949 , - 3874 , - 2239 , - 908 , - 4745 , - 4022 , - 3603 , - 3488 , - 3677 , - 4170 , - 103 , - 1204 , - 2609 , - 4318 , - 1467 , - 3784 , - 1541 , - 4466 , - 2831 , - 1500 , - 473 , - 4614 , - 4195 , - 4080 , - 4269 , - 4762 , - 695 , - 1796 , - 3201 , - 46 , - 2059 , - 4376 , - 2133 , - 194 , - 3423 , - 2092 , - 1065 , - 342 , - 4787 , - 4672 , - 4861 , - 490 , - 1287 , - 2388 , - 3793 , - 638 , - 2651 , - 104 , - 2725 , - 786 , - 4015 , - 2684 , - 1657 , - 934 , - 515 , - 400 , - 589 , - 1082 , - 1879 , - 2980 , - 4385 , - 1230 , - 3243 , - 696 , - 3317 , - 1378 , - 4607 , - 3276 , - 2249 , - 1526 , - 1107 , - 992 , - 1181 , - 1674 , - 2471 , - 3572 , - 113 , - 1822 , - 3835 , - 1288 , - 3909 , - 1970 , - 335 , - 3868 , - 2841 , - 2118 , - 1699 , - 1584 , - 1773 , - 2266 , - 3063 , - 4164 , - 705 , - 2414 , - 4427 , - 1880 , - 4501 , - 2562 , - 927 , - 4460 , - 3433 , - 2710 , - 2291 , - 2176 , - 2365 , - 2858 , - 3655 , - 4756 , - 1297 , - 3006 , - 155 , - 2472 , - 229 , - 3154 , - 1519 , - 188 , - 4025 , - 3302 , - 2883 , - 2768 , - 2957 , - 3450 , - 4247 , - 484 , - 1889 , - 3598 , - 747 , - 3064 , - 821 , - 3746 , - 2111 , - 780 , - 4617 , - 3894 , - 3475 , - 3360 , - 3549 , - 4042 , - 4839 , - 1076 , - 2481 , - 4190 , - 1339 , - 3656 , - 1413 , - 4338 , - 2703 , - 1372 , - 345 , - 4486 , - 4067 , - 3952 , - 4141 , - 4634 , - 567 , - 1668 , - 3073 , - 4782 , - 1931 , - 4248 , - 2005 , - 66 , - 3295 , - 1964 , - 937 , - 214 , - 4659 , - 4544 , - 4733 , - 362 , - 1159 , - 2260 , - 3665 , - 510 , - 2523 , - 4840 , - 2597 , - 658 , - 3887 , - 2556 , - 1529 , - 806 , - 387 , - 272 , - 461 , - 954 , - 1751 , - 2852 , - 4257 , - 1102 , - 3115 , - 568 , - 3189 , - 1250 , - 4479 , - 3148 , - 2121 , - 1398 , - 979 , - 864 , - 1053 , - 1546 , - 2343 , - 3444 , - 4849 , - 1694 , - 3707 , - 1160 , - 3781 , - 1842 , - 207 , - 3740 , - 2713 , - 1990 , - 1571 , - 1456 , - 1645 , - 2138 , - 2935 , - 4036 , - 577 , - 2286 , - 4299 , - 1752 , - 4373 , - 2434 , - 799 , - 4332 , - 3305 , - 2582 , - 2163 , - 2048 , - 2237 , - 2730 , - 3527 , - 4628 , - 1169 , - 2878 , - 27 , - 2344 , - 101 , - 3026 , - 1391 , - 60 , - 3897 , - 3174 , - 2755 , - 2640 , - 2829 , - 3322 , - 4119 , - 356 , - 1761 , - 3470 , - 619 , - 2936 , - 693 , - 3618 , - 1983 , - 652 , - 4489 , - 3766 , - 3347 , - 3232 , - 3421 , - 3914 , - 4711 , - 948 , - 2353 , - 4062 , - 1211 , - 3528 , - 1285 , - 4210 , - 2575 , - 1244 , - 217 , - 4358 , - 3939 , - 3824 , - 4013 , - 4506 , - 439 , - 1540 , - 2945 , - 4654 , - 1803 , - 4120 , - 1877 , - 4802 , - 3167 , - 1836 , - 809 , - 86 , - 4531 , - 4416 , - 4605 , - 234 , - 1031 , - 2132 , - 3537 , - 382 , - 2395 , - 4712 , - 2469 , - 530 , - 3759 , - 2428 , - 1401 , - 678 , - 259 , - 144 , - 333 , - 826 , - 1623 , - 2724 , - 4129 , - 974 , - 2987 , - 440 , - 3061 , - 1122 , - 4351 , - 3020 , - 1993 , - 1270 , - 851 , - 736 , - 925 , - 1418 , - 2215 , - 3316 , - 4721 , - 1566 , - 3579 , - 1032 , - 3653 , - 1714 , - 79 , - 3612 , - 2585 , - 1862 , - 1443 , - 1328 , - 1517 , - 2010 , - 2807 , - 3908 , - 449 , - 2158 , - 4171 , - 1624 , - 4245 , - 2306 , - 671 , - 4204 , - 3177 , - 2454 , - 2035 , - 1920 , - 2109 , - 2602 , - 3399 , - 4500 , - 1041 , - 2750 , - 4763 , - 2216 , - 4837 , - 2898 , - 1263 , - 4796 , - 3769 , - 3046 , - 2627 , - 2512 , - 2701 , - 3194 , - 3991 , - 228 , - 1633 , - 3342 , - 491 , - 2808 , - 565 , - 3490 , - 1855 , - 524 , - 4361 , - 3638 , - 3219 , - 3104 , - 3293 , - 3786 , - 4583 , - 820 , - 2225 , - 3934 , - 1083 , - 3400 , - 1157 , - 4082 , - 2447 , - 1116 , - 89 , - 4230 , - 3811 , - 3696 , - 3885 , - 4378 , - 311 , - 1412 , - 2817 , - 4526 , - 1675 , - 3992 , - 1749 , - 4674 , - 3039 , - 1708 , - 681 , - 4822 , - 4403 , - 4288 , - 4477 , - 106 , - 903 , - 2004 , - 3409 , - 254 , - 2267 , - 4584 , - 2341 , - 402 , - 3631 , - 2300 , - 1273 , - 550 , - 131 , - 16 , - 205 , - 698 , - 1495 , - 2596 , - 4001 , - 846 , - 2859 , - 312 , - 2933 , - 994 , - 4223 , - 2892 , - 1865 , - 1142 , - 723 , - 608 , - 797 , - 1290 , - 2087 , - 3188 , - 4593 , - 1438 , - 3451 , - 904 , - 3525 , - 1586 , - 4815 , - 3484 , - 2457 , - 1734 , - 1315 , - 1200 , - 1389 , - 1882 , - 2679 , - 3780 , - 321 , - 2030 , - 4043 , - 1496 , - 4117 , - 2178 , - 543 , - 4076 , - 3049 , - 2326 , - 1907 , - 1792 , - 1981 , - 2474 , - 3271 , - 4372 , - 913 , - 2622 , - 4635 , - 2088 , - 4709 , - 2770 , - 1135 , - 4668 , - 3641 , - 2918 , - 2499 , - 2384 , - 2573 , - 3066 , - 3863 , - 100 , - 1505 , - 3214 , - 363 , - 2680 , - 437 , - 3362 , - 1727 , - 396 , - 4233 , - 3510 , - 3091 , - 2976 , - 3165 , - 3658 , - 4455 , - 692 , - 2097 , - 3806 , - 955 , - 3272 , - 1029 , - 3954 , - 2319 , - 988 , - 4825 , - 4102 , - 3683 , - 3568 , - 3757 , - 4250 , - 183 , - 1284 , - 2689 , - 4398 , - 1547 , - 3864 , - 1621 , - 4546 , - 2911 , - 1580 , - 553 , - 4694 , - 4275 , - 4160 , - 4349 , - 4842 , - 775 , - 1876 , - 3281 , - 126 , - 2139 , - 4456 , - 2213 , - 274 , - 3503 , - 2172 , - 1145 , - 422 , - 3 , - 4752 , - 77 , - 570 , - 1367 , - 2468 , - 3873 , - 718 , - 2731 , - 184 , - 2805 , - 866 , - 4095 , - 2764 , - 1737 , - 1014 , - 595 , - 480 , - 669 , - 1162 , - 1959 , - 3060 , - 4465 , - 1310 , - 3323 , - 776 , - 3397 , - 1458 , - 4687 , - 3356 , - 2329 , - 1606 , - 1187 , - 1072 , - 1261 , - 1754 , - 2551 , - 3652 , - 193 , - 1902 , - 3915 , - 1368 , - 3989 , - 2050 , - 415 , - 3948 , - 2921 , - 2198 , - 1779 , - 1664 , - 1853 , - 2346 , - 3143 , - 4244 , - 785 , - 2494 , - 4507 , - 1960 , - 4581 , - 2642 , - 1007 , - 4540 , - 3513 , - 2790 , - 2371 , - 2256 , - 2445 , - 2938 , - 3735 , - 4836 , - 1377 , - 3086 , - 235 , - 2552 , - 309 , - 3234 , - 1599 , - 268 , - 4105 , - 3382 , - 2963 , - 2848 , - 3037 , - 3530 , - 4327 , - 564 , - 1969 , - 3678 , - 827 , - 3144 , - 901 , - 3826 , - 2191 , - 860 , - 4697 , - 3974 , - 3555 , - 3440 , - 3629 , - 4122 , - 55 , - 1156 , - 2561 , - 4270 , - 1419 , - 3736 , - 1493 , - 4418 , - 2783 , - 1452 , - 425 , - 4566 , - 4147 , - 4032 , - 4221 , - 4714 , - 647 , - 1748 , - 3153 , - 4862 , - 2011 , - 4328 , - 2085 , - 146 , - 3375 , - 2044 , - 1017 , - 294 , - 4739 , - 4624 , - 4813 , - 442 , - 1239 , - 2340 , - 3745 , - 590 , - 2603 , - 56 , - 2677 , - 738 , - 3967 , - 2636 , - 1609 , - 886 , - 467 , - 352 , - 541 , - 1034 , - 1831 , - 2932 , - 4337 , - 1182 , - 3195 , - 648 , - 3269 , - 1330 , - 4559 , - 3228 , - 2201 , - 1478 , - 1059 , - 944 , - 1133 , - 1626 , - 2423 , - 3524 , - 65 , - 1774 , - 3787 , - 1240 , - 3861 , - 1922 , - 287 , - 3820 , - 2793 , - 2070 , - 1651 , - 1536 , - 1725 , - 2218 , - 3015 , - 4116 , - 657 , - 2366 , - 4379 , - 1832 , - 4453 , - 2514 , - 879 , - 4412 , - 3385 , - 2662 , - 2243 , - 2128 , - 2317 , - 2810 , - 3607 , - 4708 , - 1249 , - 2958 , - 107 , - 2424 , - 181 , - 3106 , - 1471 , - 140 , - 3977 , - 3254 , - 2835 , - 2720 , - 2909 , - 3402 , - 4199 , - 436 , - 1841 , - 3550 , - 699 , - 3016 , - 773 , - 3698 , - 2063 , - 732 , - 4569 , - 3846 , - 3427 , - 3312 , - 3501 , - 3994 , - 4791 , - 1028 , - 2433 , - 4142 , - 1291 , - 3608 , - 1365 , - 4290 , - 2655 , - 1324 , - 297 , - 4438 , - 4019 , - 3904 , - 4093 , - 4586 , - 519 , - 1620 , - 3025 , - 4734 , - 1883 , - 4200 , - 1957 , - 18 , - 3247 , - 1916 , - 889 , - 166 , - 4611 , - 4496 , - 4685 , - 314 , - 1111 , - 2212 , - 3617 , - 462 , - 2475 , - 4792 , - 2549 , - 610 , - 3839 , - 2508 , - 1481 , - 758 , - 339 , - 224 , - 413 , - 906 , - 1703 , - 2804 , - 4209 , - 1054 , - 3067 , - 520 , - 3141 , - 1202 , - 4431 , - 3100 , - 2073 , - 1350 , - 931 , - 816 , - 1005 , - 1498 , - 2295 , - 3396 , - 4801 , - 1646 , - 3659 , - 1112 , - 3733 , - 1794 , - 159 , - 3692 , - 2665 , - 1942 , - 1523 , - 1408 , - 1597 , - 2090 , - 2887 , - 3988 , - 529 , - 2238 , - 4251 , - 1704 , - 4325 , - 2386 , - 751 , - 4284 , - 3257 , - 2534 , - 2115 , - 2000 , - 2189 , - 2682 , - 3479 , - 4580 , - 1121 , - 2830 , - 4843 , - 2296 , - 53 , - 2978 , - 1343 , - 12 , - 3849 , - 3126 , - 2707 , - 2592 , - 2781 , - 3274 , - 4071 , - 308 , - 1713 , - 3422 , - 571 , - 2888 , - 645 , - 3570 , - 1935 , - 604 , - 4441 , - 3718 , - 3299 , - 3184 , - 3373 , - 3866 , - 4663 , - 900 , - 2305 , - 4014 , - 1163 , - 3480 , - 1237 , - 4162 , - 2527 , - 1196 , - 169 , - 4310 , - 3891 , - 3776 , - 3965 , - 4458 , - 391 , - 1492 , - 2897 , - 4606 , - 1755 , - 4072 , - 1829 , - 4754 , - 3119 , - 1788 , - 761 , - 38 , - 4483 , - 4368 , - 4557 , - 186 , - 983 , - 2084 , - 3489 , - 334 , - 2347 , - 4664 , - 2421 , - 482 , - 3711 , - 2380 , - 1353 , - 630 , - 211 , - 96 , - 285 , - 778 , - 1575 , - 2676 , - 4081 , - 926 , - 2939 , - 392 , - 3013 , - 1074 , - 4303 , - 2972 , - 1945 , - 1222 , - 803 , - 688 , - 877 , - 1370 , - 2167 , - 3268 , - 4673 , - 1518 , - 3531 , - 984 , - 3605 , - 1666 , - 31 , - 3564 , - 2537 , - 1814 , - 1395 , - 1280 , - 1469 , - 1962 , - 2759 , - 3860 , - 401 , - 2110 , - 4123 , - 1576 , - 4197 , - 2258 , - 623 , - 4156 , - 3129 , - 2406 , - 1987 , - 1872 , - 2061 , - 2554 , - 3351 , - 4452 , - 993 , - 2702 , - 4715 , - 2168 , - 4789 , - 2850 , - 1215 , - 4748 , - 3721 , - 2998 , - 2579 , - 2464 , - 2653 , - 3146 , - 3943 , - 180 , - 1585 , - 3294 , - 443 , - 2760 , - 517 , - 3442 , - 1807 , - 476 , - 4313 , - 3590 , - 3171 , - 3056 , - 3245 , - 3738 , - 4535 , - 772 , - 2177 , - 3886 , - 1035 , - 3352 , - 1109 , - 4034 , - 2399 , - 1068 , - 41 , - 4182 , - 3763 , - 3648 , - 3837 , - 4330 , - 263 , - 1364 , - 2769 , - 4478 , - 1627 , - 3944 , - 1701 , - 4626 , - 2991 , - 1660 , - 633 , - 4774 , - 4355 , - 4240 , - 4429 , - 58 , - 855 , - 1956 , - 3361 , - 206 , - 2219 , - 4536 , - 2293 , - 354 , - 3583 , - 2252 , - 1225 , - 502 , - 83 , - 4832 , - 157 , - 650 , - 1447 , - 2548 , - 3953 , - 798 , - 2811 , - 264 , - 2885 , - 946 , - 4175 , - 2844 , - 1817 , - 1094 , - 675 , - 560 , - 749 , - 1242 , - 2039 , - 3140 , - 4545 , - 1390 , - 3403 , - 856 , - 3477 , - 1538 , - 4767 , - 3436 , - 2409 , - 1686 , - 1267 , - 1152 , - 1341 , - 1834 , - 2631 , - 3732 , - 273 , - 1982 , - 3995 , - 1448 , - 4069 , - 2130 , - 495 , - 4028 , - 3001 , - 2278 , - 1859 , - 1744 , - 1933 , - 2426 , - 3223 , - 4324 , - 865 , - 2574 , - 4587 , - 2040 , - 4661 , - 2722 , - 1087 , - 4620 , - 3593 , - 2870 , - 2451 , - 2336 , - 2525 , - 3018 , - 3815 , - 52 , - 1457 , - 3166 , - 315 , - 2632 , - 389 , - 3314 , - 1679 , - 348 , - 4185 , - 3462 , - 3043 , - 2928 , - 3117 , - 3610 , - 4407 , - 644 , - 2049 , - 3758 , - 907 , - 3224 , - 981 , - 3906 , - 2271 , - 940 , - 4777 , - 4054 , - 3635 , - 3520 , - 3709 , - 4202 , - 135 , - 1236 , - 2641 , - 4350 , - 1499 , - 3816 , - 1573 , - 4498 , - 2863 , - 1532 , - 505 , - 4646 , - 4227 , - 4112 , - 4301 , - 4794 , - 727 , - 1828 , - 3233 , - 78 , - 2091 , - 4408 , - 2165 , - 226 , - 3455 , - 2124 , - 1097 , - 374 , - 4819 , - 4704 , - 29 , - 522 , - 1319 , - 2420 , - 3825 , - 670 , - 2683 , - 136 , - 2757 , - 818 , - 4047 , - 2716 , - 1689 , - 966 , - 547 , - 432 , - 621 , - 1114 , - 1911 , - 3012 , - 4417 , - 1262 , - 3275 , - 728 , - 3349 , - 1410 , - 4639 , - 3308 , - 2281 , - 1558 , - 1139 , - 1024 , - 1213 , - 1706 , - 2503 , - 3604 , - 145 , - 1854 , - 3867 , - 1320 , - 3941 , - 2002 , - 367 , - 3900 , - 2873 , - 2150 , - 1731 , - 1616 , - 1805 , - 2298 , - 3095 , - 4196 , - 737 , - 2446 , - 4459 , - 1912 , - 4533 , - 2594 , - 959 , - 4492 , - 3465 , - 2742 , - 2323 , - 2208 , - 2397 , - 2890 , - 3687 , - 4788 , - 1329 , - 3038 , - 187 , - 2504 , - 261 , - 3186 , - 1551 , - 220 , - 4057 , - 3334 , - 2915 , - 2800 , - 2989 , - 3482 , - 4279 , - 516 , - 1921 , - 3630 , - 779 , - 3096 , - 853 , - 3778 , - 2143 , - 812 , - 4649 , - 3926 , - 3507 , - 3392 , - 3581 , - 4074 , - 7 , - 1108 , - 2513 , - 4222 , - 1371 , - 3688 , - 1445 , - 4370 , - 2735 , - 1404 , - 377 , - 4518 , - 4099 , - 3984 , - 4173 , - 4666 , - 599 , - 1700 , - 3105 , - 4814 , - 1963 , - 4280 , - 2037 , - 98 , - 3327 , - 1996 , - 969 , - 246 , - 4691 , - 4576 , - 4765 , - 394 , - 1191 , - 2292 , - 3697 , - 542 , - 2555 , - 8 , - 2629 , - 690 , - 3919 , - 2588 , - 1561 , - 838 , - 419 , - 304 , - 493 , - 986 , - 1783 , - 2884 , - 4289 , - 1134 , - 3147 , - 600 , - 3221 , - 1282 , - 4511 , - 3180 , - 2153 , - 1430 , - 1011 , - 896 , - 1085 , - 1578 , - 2375 , - 3476 , - 17 , - 1726 , - 3739 , - 1192 , - 3813 , - 1874 , - 239 , - 3772 , - 2745 , - 2022 , - 1603 , - 1488 , - 1677 , - 2170 , - 2967 , - 4068 , - 609 , - 2318 , - 4331 , - 1784 , - 4405 , - 2466 , - 831 , - 4364 , - 3337 , - 2614 , - 2195 , - 2080 , - 2269 , - 2762 , - 3559 , - 4660 , - 1201 , - 2910 , - 59 , - 2376 , - 133 , - 3058 , - 1423 , - 92 , - 3929 , - 3206 , - 2787 , - 2672 , - 2861 , - 3354 , - 4151 , - 388 , - 1793 , - 3502 , - 651 , - 2968 , - 725 , - 3650 , - 2015 , - 684 , - 4521 , - 3798 , - 3379 , - 3264 , - 3453 , - 3946 , - 4743 , - 980 , - 2385 , - 4094 , - 1243 , - 3560 , - 1317 , - 4242 , - 2607 , - 1276 , - 249 , - 4390 , - 3971 , - 3856 , - 4045 , - 4538 , - 471 , - 1572 , - 2977 , - 4686 , - 1835 , - 4152 , - 1909 , - 4834 , - 3199 , - 1868 , - 841 , - 118 , - 4563 , - 4448 , - 4637 , - 266 , - 1063 , - 2164 , - 3569 , - 414 , - 2427 , - 4744 , - 2501 , - 562 , - 3791 , - 2460 , - 1433 , - 710 , - 291 , - 176 , - 365 , - 858 , - 1655 , - 2756 , - 4161 , - 1006 , - 3019 , - 472 , - 3093 , - 1154 , - 4383 , - 3052 , - 2025 , - 1302 , - 883 , - 768 , - 957 , - 1450 , - 2247 , - 3348 , - 4753 , - 1598 , - 3611 , - 1064 , - 3685 , - 1746 , - 111 , - 3644 , - 2617 , - 1894 , - 1475 , - 1360 , - 1549 , - 2042 , - 2839 , - 3940 , - 481 , - 2190 , - 4203 , - 1656 , - 4277 , - 2338 , - 703 , - 4236 , - 3209 , - 2486 , - 2067 , - 1952 , - 2141 , - 2634 , - 3431 , - 4532 , - 1073 , - 2782 , - 4795 , - 2248 , - 5 , - 2930 , - 1295 , - 4828 , - 3801 , - 3078 , - 2659 , - 2544 , - 2733 , - 3226 , - 4023 , - 260 , - 1665 , - 3374 , - 523 , - 2840 , - 597 , - 3522 , - 1887 , - 556 , - 4393 , - 3670 , - 3251 , - 3136 , - 3325 , - 3818 , - 4615 , - 852 , - 2257 , - 3966 , - 1115 , - 3432 , - 1189 , - 4114 , - 2479 , - 1148 , - 121 , - 4262 , - 3843 , - 3728 , - 3917 , - 4410 , - 343 , - 1444 , - 2849 , - 4558 , - 1707 , - 4024 , - 1781 , - 4706 , - 3071 , - 1740 , - 713 , - 4854 , - 4435 , - 4320 , - 4509 , - 138 , - 935 , - 2036 , - 3441 , - 286 , - 2299 , - 4616 , - 2373 , - 434 , - 3663 , - 2332 , - 1305 , - 582 , - 163 , - 48 , - 237 , - 730 , - 1527 , - 2628 , - 4033 , - 878 , - 2891 , - 344 , - 2965 , - 1026 , - 4255 , - 2924 , - 1897 , - 1174 , - 755 , - 640 , - 829 , - 1322 , - 2119 , - 3220 , - 4625 , - 1470 , - 3483 , - 936 , - 3557 , - 1618 , - 4847 , - 3516 , - 2489 , - 1766 , - 1347 , - 1232 , - 1421 , - 1914 , - 2711 , - 3812 , - 353 , - 2062 , - 4075 , - 1528 , - 4149 , - 2210 , - 575 , - 4108 , - 3081 , - 2358 , - 1939 , - 1824 , - 2013 , - 2506 , - 3303 , - 4404 , - 945 , - 2654 , - 4667 , - 2120 , - 4741 , - 2802 , - 1167 , - 4700 , - 3673 , - 2950 , - 2531 , - 2416 , - 2605 , - 3098 , - 3895 , - 132 , - 1537 , - 3246 , - 395 , - 2712 , - 469 , - 3394 , - 1759 , - 428 , - 4265 , - 3542 , - 3123 , - 3008 , - 3197 , - 3690 , - 4487 , - 724 , - 2129 , - 3838 , - 987 , - 3304 , - 1061 , - 3986 , - 2351 , - 1020 , - 4857 , - 4134 , - 3715 , - 3600 , - 3789 , - 4282 , - 215 , - 1316 , - 2721 , - 4430 , - 1579 , - 3896 , - 1653 , - 4578 , - 2943 , - 1612 , - 585 , - 4726 , - 4307 , - 4192 , - 4381 , - 10 , - 807 , - 1908 , - 3313 , - 158 , - 2171 , - 4488 , - 2245 , - 306 , - 3535 , - 2204 , - 1177 , - 454 , - 35 , - 4784 , - 109 , - 602 , - 1399 , - 2500 , - 3905 , - 750 , - 2763 , - 216 , - 2837 , - 898 , - 4127 , - 2796 , - 1769 , - 1046 , - 627 , - 512 , - 701 , - 1194 , - 1991 , - 3092 , - 4497 , - 1342 , - 3355 , - 808 , - 3429 , - 1490 , - 4719 , - 3388 , - 2361 , - 1638 , - 1219 , - 1104 , - 1293 , - 1786 , - 2583 , - 3684 , - 225 , - 1934 , - 3947 , - 1400 , - 4021 , - 2082 , - 447 , - 3980 , - 2953 , - 2230 , - 1811 , - 1696 , - 1885 , - 2378 , - 3175 , - 4276 , - 817 , - 2526 , - 4539 , - 1992 , - 4613 , - 2674 , - 1039 , - 4572 , - 3545 , - 2822 , - 2403 , - 2288 , - 2477 , - 2970 , - 3767 , - 4 , - 1409 , - 3118 , - 267 , - 2584 , - 341 , - 3266 , - 1631 , - 300 , - 4137 , - 3414 , - 2995 , - 2880 , - 3069 , - 3562 , - 4359 , - 596 , - 2001 , - 3710 , - 859 , - 3176 , - 933 , - 3858 , - 2223 , - 892 , - 4729 , - 4006 , - 3587 , - 3472 , - 3661 , - 4154 , - 87 , - 1188 , - 2593 , - 4302 , - 1451 , - 3768 , - 1525 , - 4450 , - 2815 , - 1484 , - 457 , - 4598 , - 4179 , - 4064 , - 4253 , - 4746 , - 679 , - 1780 , - 3185 , - 30 , - 2043 , - 4360 , - 2117 , - 178 , - 3407 , - 2076 , - 1049 , - 326 , - 4771 , - 4656 , - 4845 , - 474 , - 1271 , - 2372 , - 3777 , - 622 , - 2635 , - 88 , - 2709 , - 770 , - 3999 , - 2668 , - 1641 , - 918 , - 499 , - 384 , - 573 , - 1066 , - 1863 , - 2964 , - 4369 , - 1214 , - 3227 , - 680 , - 3301 , - 1362 , - 4591 , - 3260 , - 2233 , - 1510 , - 1091 , - 976 , - 1165 , - 1658 , - 2455 , - 3556 , - 97 , - 1806 , - 3819 , - 1272 , - 3893 , - 1954 , - 319 , - 3852 , - 2825 , - 2102 , - 1683 , - 1568 , - 1757 , - 2250 , - 3047 , - 4148 , - 689 , - 2398 , - 4411 , - 1864 , - 4485 , - 2546 , - 911 , - 4444 , - 3417 , - 2694 , - 2275 , - 2160 , - 2349 , - 2842 , - 3639 , - 4740 , - 1281 , - 2990 , - 139 , - 2456 , - 213 , - 3138 , - 1503 , - 172 , - 4009 , - 3286 , - 2867 , - 2752 , - 2941 , - 3434 , - 4231 , - 468 , - 1873 , - 3582 , - 731 , - 3048 , - 805 , - 3730 , - 2095 , - 764 , - 4601 , - 3878 , - 3459 , - 3344 , - 3533 , - 4026 , - 4823 , - 1060 , - 2465 , - 4174 , - 1323 , - 3640 , - 1397 , - 4322 , - 2687 , - 1356 , - 329 , - 4470 , - 4051 , - 3936 , - 4125 , - 4618 , - 551 , - 1652 , - 3057 , - 4766 , - 1915 , - 4232 , - 1989 , - 50 , - 3279 , - 1948 , - 921 , - 198 , - 4643 , - 4528 , - 4717 , - 346 , - 1143 , - 2244 , - 3649 , - 494 , - 2507 , - 4824 , - 2581 , - 642 , - 3871 , - 2540 , - 1513 , - 790 , - 371 , - 256 , - 445 , - 938 , - 1735 , - 2836 , - 4241 , - 1086 , - 3099 , - 552 , - 3173 , - 1234 , - 4463 , - 3132 , - 2105 , - 1382 , - 963 , - 848 , - 1037 , - 1530 , - 2327 , - 3428 , - 4833 , - 1678 , - 3691 , - 1144 , - 3765 , - 1826 , - 191 , - 3724 , - 2697 , - 1974 , - 1555 , - 1440 , - 1629 , - 2122 , - 2919 , - 4020 , - 561 , - 2270 , - 4283 , - 1736 , - 4357 , - 2418 , - 783 , - 4316 , - 3289 , - 2566 , - 2147 , - 2032 , - 2221 , - 2714 , - 3511 , - 4612 , - 1153 , - 2862 , - 11 , - 2328 , - 85 , - 3010 , - 1375 , - 44 , - 3881 , - 3158 , - 2739 , - 2624 , - 2813 , - 3306 , - 4103 , - 340 , - 1745 , - 3454 , - 603 , - 2920 , - 677 , - 3602 , - 1967 , - 636 , - 4473 , - 3750 , - 3331 , - 3216 , - 3405 , - 3898 , - 4695 , - 932 , - 2337 , - 4046 , - 1195 , - 3512 , - 1269 , - 4194 , - 2559 , - 1228 , - 201 , - 4342 , - 3923 , - 3808 , - 3997 , - 4490 , - 423 , - 1524 , - 2929 , - 4638 , - 1787 , - 4104 , - 1861 , - 4786 , - 3151 , - 1820 , - 793 , - 70 , - 4515 , - 4400 , - 4589 , - 218 , - 1015 , - 2116 , - 3521 , - 366 , - 2379 , - 4696 , - 2453 , - 514 , - 3743 , - 2412 , - 1385 , - 662 , - 243 , - 128 , - 317 , - 810 , - 1607 , - 2708 , - 4113 , - 958 , - 2971 , - 424 , - 3045 , - 1106 , - 4335 , - 3004 , - 1977 , - 1254 , - 835 , - 720 , - 909 , - 1402 , - 2199 , - 3300 , - 4705 , - 1550 , - 3563 , - 1016 , - 3637 , - 1698 , - 63 , - 3596 , - 2569 , - 1846 , - 1427 , - 1312 , - 1501 , - 1994 , - 2791 , - 3892 , - 433 , - 2142 , - 4155 , - 1608 , - 4229 , - 2290 , - 655 , - 4188 , - 3161 , - 2438 , - 2019 , - 1904 , - 2093 , - 2586 , - 3383 , - 4484 , - 1025 , - 2734 , - 4747 , - 2200 , - 4821 , - 2882 , - 1247 , - 4780 , - 3753 , - 3030 , - 2611 , - 2496 , - 2685 , - 3178 , - 3975 , - 212 , - 1617 , - 3326 , - 475 , - 2792 , - 549 , - 3474 , - 1839 , - 508 , - 4345 , - 3622 , - 3203 , - 3088 , - 3277 , - 3770 , - 4567 , - 804 , - 2209 , - 3918 , - 1067 , - 3384 , - 1141 , - 4066 , - 2431 , - 1100 , - 73 , - 4214 , - 3795 , - 3680 , - 3869 , - 4362 , - 295 , - 1396 , - 2801 , - 4510 , - 1659 , - 3976 , - 1733 , - 4658 , - 3023 , - 1692 , - 665 , - 4806 , - 4387 , - 4272 , - 4461 , - 90 , - 887 , - 1988 , - 3393 , - 238 , - 2251 , - 4568 , - 2325 , - 386 , - 3615 , - 2284 , - 1257 , - 534 , - 115 , - 0 , - 501 , - 1926 , - 4275 , - 2620 , - 1889 , - 2082 , - 3199 , - 312 , - 3277 , - 2238 , - 2123 , - 2932 , - 4665 , - 2394 , - 1047 , - 624 , - 1125 , - 2550 , - 4899 , - 3244 , - 2513 , - 2706 , - 3823 , - 936 , - 3901 , - 2862 , - 2747 , - 3556 , - 361 , - 3018 , - 1671 , - 1248 , - 1749 , - 3174 , - 595 , - 3868 , - 3137 , - 3330 , - 4447 , - 1560 , - 4525 , - 3486 , - 3371 , - 4180 , - 985 , - 3642 , - 2295 , - 1872 , - 2373 , - 3798 , - 1219 , - 4492 , - 3761 , - 3954 , - 143 , - 2184 , - 221 , - 4110 , - 3995 , - 4804 , - 1609 , - 4266 , - 2919 , - 2496 , - 2997 , - 4422 , - 1843 , - 188 , - 4385 , - 4578 , - 767 , - 2808 , - 845 , - 4734 , - 4619 , - 500 , - 2233 , - 4890 , - 3543 , - 3120 , - 3621 , - 118 , - 2467 , - 812 , - 81 , - 274 , - 1391 , - 3432 , - 1469 , - 430 , - 315 , - 1124 , - 2857 , - 586 , - 4167 , - 3744 , - 4245 , - 742 , - 3091 , - 1436 , - 705 , - 898 , - 2015 , - 4056 , - 2093 , - 1054 , - 939 , - 1748 , - 3481 , - 1210 , - 4791 , - 4368 , - 4869 , - 1366 , - 3715 , - 2060 , - 1329 , - 1522 , - 2639 , - 4680 , - 2717 , - 1678 , - 1563 , - 2372 , - 4105 , - 1834 , - 487 , - 64 , - 565 , - 1990 , - 4339 , - 2684 , - 1953 , - 2146 , - 3263 , - 376 , - 3341 , - 2302 , - 2187 , - 2996 , - 4729 , - 2458 , - 1111 , - 688 , - 1189 , - 2614 , - 35 , - 3308 , - 2577 , - 2770 , - 3887 , - 1000 , - 3965 , - 2926 , - 2811 , - 3620 , - 425 , - 3082 , - 1735 , - 1312 , - 1813 , - 3238 , - 659 , - 3932 , - 3201 , - 3394 , - 4511 , - 1624 , - 4589 , - 3550 , - 3435 , - 4244 , - 1049 , - 3706 , - 2359 , - 1936 , - 2437 , - 3862 , - 1283 , - 4556 , - 3825 , - 4018 , - 207 , - 2248 , - 285 , - 4174 , - 4059 , - 4868 , - 1673 , - 4330 , - 2983 , - 2560 , - 3061 , - 4486 , - 1907 , - 252 , - 4449 , - 4642 , - 831 , - 2872 , - 909 , - 4798 , - 4683 , - 564 , - 2297 , - 26 , - 3607 , - 3184 , - 3685 , - 182 , - 2531 , - 876 , - 145 , - 338 , - 1455 , - 3496 , - 1533 , - 494 , - 379 , - 1188 , - 2921 , - 650 , - 4231 , - 3808 , - 4309 , - 806 , - 3155 , - 1500 , - 769 , - 962 , - 2079 , - 4120 , - 2157 , - 1118 , - 1003 , - 1812 , - 3545 , - 1274 , - 4855 , - 4432 , - 5 , - 1430 , - 3779 , - 2124 , - 1393 , - 1586 , - 2703 , - 4744 , - 2781 , - 1742 , - 1627 , - 2436 , - 4169 , - 1898 , - 551 , - 128 , - 629 , - 2054 , - 4403 , - 2748 , - 2017 , - 2210 , - 3327 , - 440 , - 3405 , - 2366 , - 2251 , - 3060 , - 4793 , - 2522 , - 1175 , - 752 , - 1253 , - 2678 , - 99 , - 3372 , - 2641 , - 2834 , - 3951 , - 1064 , - 4029 , - 2990 , - 2875 , - 3684 , - 489 , - 3146 , - 1799 , - 1376 , - 1877 , - 3302 , - 723 , - 3996 , - 3265 , - 3458 , - 4575 , - 1688 , - 4653 , - 3614 , - 3499 , - 4308 , - 1113 , - 3770 , - 2423 , - 2000 , - 2501 , - 3926 , - 1347 , - 4620 , - 3889 , - 4082 , - 271 , - 2312 , - 349 , - 4238 , - 4123 , - 4 , - 1737 , - 4394 , - 3047 , - 2624 , - 3125 , - 4550 , - 1971 , - 316 , - 4513 , - 4706 , - 895 , - 2936 , - 973 , - 4862 , - 4747 , - 628 , - 2361 , - 90 , - 3671 , - 3248 , - 3749 , - 246 , - 2595 , - 940 , - 209 , - 402 , - 1519 , - 3560 , - 1597 , - 558 , - 443 , - 1252 , - 2985 , - 714 , - 4295 , - 3872 , - 4373 , - 870 , - 3219 , - 1564 , - 833 , - 1026 , - 2143 , - 4184 , - 2221 , - 1182 , - 1067 , - 1876 , - 3609 , - 1338 , - 4919 , - 4496 , - 69 , - 1494 , - 3843 , - 2188 , - 1457 , - 1650 , - 2767 , - 4808 , - 2845 , - 1806 , - 1691 , - 2500 , - 4233 , - 1962 , - 615 , - 192 , - 693 , - 2118 , - 4467 , - 2812 , - 2081 , - 2274 , - 3391 , - 504 , - 3469 , - 2430 , - 2315 , - 3124 , - 4857 , - 2586 , - 1239 , - 816 , - 1317 , - 2742 , - 163 , - 3436 , - 2705 , - 2898 , - 4015 , - 1128 , - 4093 , - 3054 , - 2939 , - 3748 , - 553 , - 3210 , - 1863 , - 1440 , - 1941 , - 3366 , - 787 , - 4060 , - 3329 , - 3522 , - 4639 , - 1752 , - 4717 , - 3678 , - 3563 , - 4372 , - 1177 , - 3834 , - 2487 , - 2064 , - 2565 , - 3990 , - 1411 , - 4684 , - 3953 , - 4146 , - 335 , - 2376 , - 413 , - 4302 , - 4187 , - 68 , - 1801 , - 4458 , - 3111 , - 2688 , - 3189 , - 4614 , - 2035 , - 380 , - 4577 , - 4770 , - 959 , - 3000 , - 1037 , - 4926 , - 4811 , - 692 , - 2425 , - 154 , - 3735 , - 3312 , - 3813 , - 310 , - 2659 , - 1004 , - 273 , - 466 , - 1583 , - 3624 , - 1661 , - 622 , - 507 , - 1316 , - 3049 , - 778 , - 4359 , - 3936 , - 4437 , - 934 , - 3283 , - 1628 , - 897 , - 1090 , - 2207 , - 4248 , - 2285 , - 1246 , - 1131 , - 1940 , - 3673 , - 1402 , - 55 , - 4560 , - 133 , - 1558 , - 3907 , - 2252 , - 1521 , - 1714 , - 2831 , - 4872 , - 2909 , - 1870 , - 1755 , - 2564 , - 4297 , - 2026 , - 679 , - 256 , - 757 , - 2182 , - 4531 , - 2876 , - 2145 , - 2338 , - 3455 , - 568 , - 3533 , - 2494 , - 2379 , - 3188 , - 4921 , - 2650 , - 1303 , - 880 , - 1381 , - 2806 , - 227 , - 3500 , - 2769 , - 2962 , - 4079 , - 1192 , - 4157 , - 3118 , - 3003 , - 3812 , - 617 , - 3274 , - 1927 , - 1504 , - 2005 , - 3430 , - 851 , - 4124 , - 3393 , - 3586 , - 4703 , - 1816 , - 4781 , - 3742 , - 3627 , - 4436 , - 1241 , - 3898 , - 2551 , - 2128 , - 2629 , - 4054 , - 1475 , - 4748 , - 4017 , - 4210 , - 399 , - 2440 , - 477 , - 4366 , - 4251 , - 132 , - 1865 , - 4522 , - 3175 , - 2752 , - 3253 , - 4678 , - 2099 , - 444 , - 4641 , - 4834 , - 1023 , - 3064 , - 1101 , - 62 , - 4875 , - 756 , - 2489 , - 218 , - 3799 , - 3376 , - 3877 , - 374 , - 2723 , - 1068 , - 337 , - 530 , - 1647 , - 3688 , - 1725 , - 686 , - 571 , - 1380 , - 3113 , - 842 , - 4423 , - 4000 , - 4501 , - 998 , - 3347 , - 1692 , - 961 , - 1154 , - 2271 , - 4312 , - 2349 , - 1310 , - 1195 , - 2004 , - 3737 , - 1466 , - 119 , - 4624 , - 197 , - 1622 , - 3971 , - 2316 , - 1585 , - 1778 , - 2895 , - 8 , - 2973 , - 1934 , - 1819 , - 2628 , - 4361 , - 2090 , - 743 , - 320 , - 821 , - 2246 , - 4595 , - 2940 , - 2209 , - 2402 , - 3519 , - 632 , - 3597 , - 2558 , - 2443 , - 3252 , - 57 , - 2714 , - 1367 , - 944 , - 1445 , - 2870 , - 291 , - 3564 , - 2833 , - 3026 , - 4143 , - 1256 , - 4221 , - 3182 , - 3067 , - 3876 , - 681 , - 3338 , - 1991 , - 1568 , - 2069 , - 3494 , - 915 , - 4188 , - 3457 , - 3650 , - 4767 , - 1880 , - 4845 , - 3806 , - 3691 , - 4500 , - 1305 , - 3962 , - 2615 , - 2192 , - 2693 , - 4118 , - 1539 , - 4812 , - 4081 , - 4274 , - 463 , - 2504 , - 541 , - 4430 , - 4315 , - 196 , - 1929 , - 4586 , - 3239 , - 2816 , - 3317 , - 4742 , - 2163 , - 508 , - 4705 , - 4898 , - 1087 , - 3128 , - 1165 , - 126 , - 11 , - 820 , - 2553 , - 282 , - 3863 , - 3440 , - 3941 , - 438 , - 2787 , - 1132 , - 401 , - 594 , - 1711 , - 3752 , - 1789 , - 750 , - 635 , - 1444 , - 3177 , - 906 , - 4487 , - 4064 , - 4565 , - 1062 , - 3411 , - 1756 , - 1025 , - 1218 , - 2335 , - 4376 , - 2413 , - 1374 , - 1259 , - 2068 , - 3801 , - 1530 , - 183 , - 4688 , - 261 , - 1686 , - 4035 , - 2380 , - 1649 , - 1842 , - 2959 , - 72 , - 3037 , - 1998 , - 1883 , - 2692 , - 4425 , - 2154 , - 807 , - 384 , - 885 , - 2310 , - 4659 , - 3004 , - 2273 , - 2466 , - 3583 , - 696 , - 3661 , - 2622 , - 2507 , - 3316 , - 121 , - 2778 , - 1431 , - 1008 , - 1509 , - 2934 , - 355 , - 3628 , - 2897 , - 3090 , - 4207 , - 1320 , - 4285 , - 3246 , - 3131 , - 3940 , - 745 , - 3402 , - 2055 , - 1632 , - 2133 , - 3558 , - 979 , - 4252 , - 3521 , - 3714 , - 4831 , - 1944 , - 4909 , - 3870 , - 3755 , - 4564 , - 1369 , - 4026 , - 2679 , - 2256 , - 2757 , - 4182 , - 1603 , - 4876 , - 4145 , - 4338 , - 527 , - 2568 , - 605 , - 4494 , - 4379 , - 260 , - 1993 , - 4650 , - 3303 , - 2880 , - 3381 , - 4806 , - 2227 , - 572 , - 4769 , - 34 , - 1151 , - 3192 , - 1229 , - 190 , - 75 , - 884 , - 2617 , - 346 , - 3927 , - 3504 , - 4005 , - 502 , - 2851 , - 1196 , - 465 , - 658 , - 1775 , - 3816 , - 1853 , - 814 , - 699 , - 1508 , - 3241 , - 970 , - 4551 , - 4128 , - 4629 , - 1126 , - 3475 , - 1820 , - 1089 , - 1282 , - 2399 , - 4440 , - 2477 , - 1438 , - 1323 , - 2132 , - 3865 , - 1594 , - 247 , - 4752 , - 325 , - 1750 , - 4099 , - 2444 , - 1713 , - 1906 , - 3023 , - 136 , - 3101 , - 2062 , - 1947 , - 2756 , - 4489 , - 2218 , - 871 , - 448 , - 949 , - 2374 , - 4723 , - 3068 , - 2337 , - 2530 , - 3647 , - 760 , - 3725 , - 2686 , - 2571 , - 3380 , - 185 , - 2842 , - 1495 , - 1072 , - 1573 , - 2998 , - 419 , - 3692 , - 2961 , - 3154 , - 4271 , - 1384 , - 4349 , - 3310 , - 3195 , - 4004 , - 809 , - 3466 , - 2119 , - 1696 , - 2197 , - 3622 , - 1043 , - 4316 , - 3585 , - 3778 , - 4895 , - 2008 , - 45 , - 3934 , - 3819 , - 4628 , - 1433 , - 4090 , - 2743 , - 2320 , - 2821 , - 4246 , - 1667 , - 12 , - 4209 , - 4402 , - 591 , - 2632 , - 669 , - 4558 , - 4443 , - 324 , - 2057 , - 4714 , - 3367 , - 2944 , - 3445 , - 4870 , - 2291 , - 636 , - 4833 , - 98 , - 1215 , - 3256 , - 1293 , - 254 , - 139 , - 948 , - 2681 , - 410 , - 3991 , - 3568 , - 4069 , - 566 , - 2915 , - 1260 , - 529 , - 722 , - 1839 , - 3880 , - 1917 , - 878 , - 763 , - 1572 , - 3305 , - 1034 , - 4615 , - 4192 , - 4693 , - 1190 , - 3539 , - 1884 , - 1153 , - 1346 , - 2463 , - 4504 , - 2541 , - 1502 , - 1387 , - 2196 , - 3929 , - 1658 , - 311 , - 4816 , - 389 , - 1814 , - 4163 , - 2508 , - 1777 , - 1970 , - 3087 , - 200 , - 3165 , - 2126 , - 2011 , - 2820 , - 4553 , - 2282 , - 935 , - 512 , - 1013 , - 2438 , - 4787 , - 3132 , - 2401 , - 2594 , - 3711 , - 824 , - 3789 , - 2750 , - 2635 , - 3444 , - 249 , - 2906 , - 1559 , - 1136 , - 1637 , - 3062 , - 483 , - 3756 , - 3025 , - 3218 , - 4335 , - 1448 , - 4413 , - 3374 , - 3259 , - 4068 , - 873 , - 3530 , - 2183 , - 1760 , - 2261 , - 3686 , - 1107 , - 4380 , - 3649 , - 3842 , - 31 , - 2072 , - 109 , - 3998 , - 3883 , - 4692 , - 1497 , - 4154 , - 2807 , - 2384 , - 2885 , - 4310 , - 1731 , - 76 , - 4273 , - 4466 , - 655 , - 2696 , - 733 , - 4622 , - 4507 , - 388 , - 2121 , - 4778 , - 3431 , - 3008 , - 3509 , - 6 , - 2355 , - 700 , - 4897 , - 162 , - 1279 , - 3320 , - 1357 , - 318 , - 203 , - 1012 , - 2745 , - 474 , - 4055 , - 3632 , - 4133 , - 630 , - 2979 , - 1324 , - 593 , - 786 , - 1903 , - 3944 , - 1981 , - 942 , - 827 , - 1636 , - 3369 , - 1098 , - 4679 , - 4256 , - 4757 , - 1254 , - 3603 , - 1948 , - 1217 , - 1410 , - 2527 , - 4568 , - 2605 , - 1566 , - 1451 , - 2260 , - 3993 , - 1722 , - 375 , - 4880 , - 453 , - 1878 , - 4227 , - 2572 , - 1841 , - 2034 , - 3151 , - 264 , - 3229 , - 2190 , - 2075 , - 2884 , - 4617 , - 2346 , - 999 , - 576 , - 1077 , - 2502 , - 4851 , - 3196 , - 2465 , - 2658 , - 3775 , - 888 , - 3853 , - 2814 , - 2699 , - 3508 , - 313 , - 2970 , - 1623 , - 1200 , - 1701 , - 3126 , - 547 , - 3820 , - 3089 , - 3282 , - 4399 , - 1512 , - 4477 , - 3438 , - 3323 , - 4132 , - 937 , - 3594 , - 2247 , - 1824 , - 2325 , - 3750 , - 1171 , - 4444 , - 3713 , - 3906 , - 95 , - 2136 , - 173 , - 4062 , - 3947 , - 4756 , - 1561 , - 4218 , - 2871 , - 2448 , - 2949 , - 4374 , - 1795 , - 140 , - 4337 , - 4530 , - 719 , - 2760 , - 797 , - 4686 , - 4571 , - 452 , - 2185 , - 4842 , - 3495 , - 3072 , - 3573 , - 70 , - 2419 , - 764 , - 33 , - 226 , - 1343 , - 3384 , - 1421 , - 382 , - 267 , - 1076 , - 2809 , - 538 , - 4119 , - 3696 , - 4197 , - 694 , - 3043 , - 1388 , - 657 , - 850 , - 1967 , - 4008 , - 2045 , - 1006 , - 891 , - 1700 , - 3433 , - 1162 , - 4743 , - 4320 , - 4821 , - 1318 , - 3667 , - 2012 , - 1281 , - 1474 , - 2591 , - 4632 , - 2669 , - 1630 , - 1515 , - 2324 , - 4057 , - 1786 , - 439 , - 16 , - 517 , - 1942 , - 4291 , - 2636 , - 1905 , - 2098 , - 3215 , - 328 , - 3293 , - 2254 , - 2139 , - 2948 , - 4681 , - 2410 , - 1063 , - 640 , - 1141 , - 2566 , - 4915 , - 3260 , - 2529 , - 2722 , - 3839 , - 952 , - 3917 , - 2878 , - 2763 , - 3572 , - 377 , - 3034 , - 1687 , - 1264 , - 1765 , - 3190 , - 611 , - 3884 , - 3153 , - 3346 , - 4463 , - 1576 , - 4541 , - 3502 , - 3387 , - 4196 , - 1001 , - 3658 , - 2311 , - 1888 , - 2389 , - 3814 , - 1235 , - 4508 , - 3777 , - 3970 , - 159 , - 2200 , - 237 , - 4126 , - 4011 , - 4820 , - 1625 , - 4282 , - 2935 , - 2512 , - 3013 , - 4438 , - 1859 , - 204 , - 4401 , - 4594 , - 783 , - 2824 , - 861 , - 4750 , - 4635 , - 516 , - 2249 , - 4906 , - 3559 , - 3136 , - 3637 , - 134 , - 2483 , - 828 , - 97 , - 290 , - 1407 , - 3448 , - 1485 , - 446 , - 331 , - 1140 , - 2873 , - 602 , - 4183 , - 3760 , - 4261 , - 758 , - 3107 , - 1452 , - 721 , - 914 , - 2031 , - 4072 , - 2109 , - 1070 , - 955 , - 1764 , - 3497 , - 1226 , - 4807 , - 4384 , - 4885 , - 1382 , - 3731 , - 2076 , - 1345 , - 1538 , - 2655 , - 4696 , - 2733 , - 1694 , - 1579 , - 2388 , - 4121 , - 1850 , - 503 , - 80 , - 581 , - 2006 , - 4355 , - 2700 , - 1969 , - 2162 , - 3279 , - 392 , - 3357 , - 2318 , - 2203 , - 3012 , - 4745 , - 2474 , - 1127 , - 704 , - 1205 , - 2630 , - 51 , - 3324 , - 2593 , - 2786 , - 3903 , - 1016 , - 3981 , - 2942 , - 2827 , - 3636 , - 441 , - 3098 , - 1751 , - 1328 , - 1829 , - 3254 , - 675 , - 3948 , - 3217 , - 3410 , - 4527 , - 1640 , - 4605 , - 3566 , - 3451 , - 4260 , - 1065 , - 3722 , - 2375 , - 1952 , - 2453 , - 3878 , - 1299 , - 4572 , - 3841 , - 4034 , - 223 , - 2264 , - 301 , - 4190 , - 4075 , - 4884 , - 1689 , - 4346 , - 2999 , - 2576 , - 3077 , - 4502 , - 1923 , - 268 , - 4465 , - 4658 , - 847 , - 2888 , - 925 , - 4814 , - 4699 , - 580 , - 2313 , - 42 , - 3623 , - 3200 , - 3701 , - 198 , - 2547 , - 892 , - 161 , - 354 , - 1471 , - 3512 , - 1549 , - 510 , - 395 , - 1204 , - 2937 , - 666 , - 4247 , - 3824 , - 4325 , - 822 , - 3171 , - 1516 , - 785 , - 978 , - 2095 , - 4136 , - 2173 , - 1134 , - 1019 , - 1828 , - 3561 , - 1290 , - 4871 , - 4448 , - 21 , - 1446 , - 3795 , - 2140 , - 1409 , - 1602 , - 2719 , - 4760 , - 2797 , - 1758 , - 1643 , - 2452 , - 4185 , - 1914 , - 567 , - 144 , - 645 , - 2070 , - 4419 , - 2764 , - 2033 , - 2226 , - 3343 , - 456 , - 3421 , - 2382 , - 2267 , - 3076 , - 4809 , - 2538 , - 1191 , - 768 , - 1269 , - 2694 , - 115 , - 3388 , - 2657 , - 2850 , - 3967 , - 1080 , - 4045 , - 3006 , - 2891 , - 3700 , - 505 , - 3162 , - 1815 , - 1392 , - 1893 , - 3318 , - 739 , - 4012 , - 3281 , - 3474 , - 4591 , - 1704 , - 4669 , - 3630 , - 3515 , - 4324 , - 1129 , - 3786 , - 2439 , - 2016 , - 2517 , - 3942 , - 1363 , - 4636 , - 3905 , - 4098 , - 287 , - 2328 , - 365 , - 4254 , - 4139 , - 20 , - 1753 , - 4410 , - 3063 , - 2640 , - 3141 , - 4566 , - 1987 , - 332 , - 4529 , - 4722 , - 911 , - 2952 , - 989 , - 4878 , - 4763 , - 644 , - 2377 , - 106 , - 3687 , - 3264 , - 3765 , - 262 , - 2611 , - 956 , - 225 , - 418 , - 1535 , - 3576 , - 1613 , - 574 , - 459 , - 1268 , - 3001 , - 730 , - 4311 , - 3888 , - 4389 , - 886 , - 3235 , - 1580 , - 849 , - 1042 , - 2159 , - 4200 , - 2237 , - 1198 , - 1083 , - 1892 , - 3625 , - 1354 , - 7 , - 4512 , - 85 , - 1510 , - 3859 , - 2204 , - 1473 , - 1666 , - 2783 , - 4824 , - 2861 , - 1822 , - 1707 , - 2516 , - 4249 , - 1978 , - 631 , - 208 , - 709 , - 2134 , - 4483 , - 2828 , - 2097 , - 2290 , - 3407 , - 520 , - 3485 , - 2446 , - 2331 , - 3140 , - 4873 , - 2602 , - 1255 , - 832 , - 1333 , - 2758 , - 179 , - 3452 , - 2721 , - 2914 , - 4031 , - 1144 , - 4109 , - 3070 , - 2955 , - 3764 , - 569 , - 3226 , - 1879 , - 1456 , - 1957 , - 3382 , - 803 , - 4076 , - 3345 , - 3538 , - 4655 , - 1768 , - 4733 , - 3694 , - 3579 , - 4388 , - 1193 , - 3850 , - 2503 , - 2080 , - 2581 , - 4006 , - 1427 , - 4700 , - 3969 , - 4162 , - 351 , - 2392 , - 429 , - 4318 , - 4203 , - 84 , - 1817 , - 4474 , - 3127 , - 2704 , - 3205 , - 4630 , - 2051 , - 396 , - 4593 , - 4786 , - 975 , - 3016 , - 1053 , - 14 , - 4827 , - 708 , - 2441 , - 170 , - 3751 , - 3328 , - 3829 , - 326 , - 2675 , - 1020 , - 289 , - 482 , - 1599 , - 3640 , - 1677 , - 638 , - 523 , - 1332 , - 3065 , - 794 , - 4375 , - 3952 , - 4453 , - 950 , - 3299 , - 1644 , - 913 , - 1106 , - 2223 , - 4264 , - 2301 , - 1262 , - 1147 , - 1956 , - 3689 , - 1418 , - 71 , - 4576 , - 149 , - 1574 , - 3923 , - 2268 , - 1537 , - 1730 , - 2847 , - 4888 , - 2925 , - 1886 , - 1771 , - 2580 , - 4313 , - 2042 , - 695 , - 272 , - 773 , - 2198 , - 4547 , - 2892 , - 2161 , - 2354 , - 3471 , - 584 , - 3549 , - 2510 , - 2395 , - 3204 , - 9 , - 2666 , - 1319 , - 896 , - 1397 , - 2822 , - 243 , - 3516 , - 2785 , - 2978 , - 4095 , - 1208 , - 4173 , - 3134 , - 3019 , - 3828 , - 633 , - 3290 , - 1943 , - 1520 , - 2021 , - 3446 , - 867 , - 4140 , - 3409 , - 3602 , - 4719 , - 1832 , - 4797 , - 3758 , - 3643 , - 4452 , - 1257 , - 3914 , - 2567 , - 2144 , - 2645 , - 4070 , - 1491 , - 4764 , - 4033 , - 4226 , - 415 , - 2456 , - 493 , - 4382 , - 4267 , - 148 , - 1881 , - 4538 , - 3191 , - 2768 , - 3269 , - 4694 , - 2115 , - 460 , - 4657 , - 4850 , - 1039 , - 3080 , - 1117 , - 78 , - 4891 , - 772 , - 2505 , - 234 , - 3815 , - 3392 , - 3893 , - 390 , - 2739 , - 1084 , - 353 , - 546 , - 1663 , - 3704 , - 1741 , - 702 , - 587 , - 1396 , - 3129 , - 858 , - 4439 , - 4016 , - 4517 , - 1014 , - 3363 , - 1708 , - 977 , - 1170 , - 2287 , - 4328 , - 2365 , - 1326 , - 1211 , - 2020 , - 3753 , - 1482 , - 135 , - 4640 , - 213 , - 1638 , - 3987 , - 2332 , - 1601 , - 1794 , - 2911 , - 24 , - 2989 , - 1950 , - 1835 , - 2644 , - 4377 , - 2106 , - 759 , - 336 , - 837 , - 2262 , - 4611 , - 2956 , - 2225 , - 2418 , - 3535 , - 648 , - 3613 , - 2574 , - 2459 , - 3268 , - 73 , - 2730 , - 1383 , - 960 , - 1461 , - 2886 , - 307 , - 3580 , - 2849 , - 3042 , - 4159 , - 1272 , - 4237 , - 3198 , - 3083 , - 3892 , - 697 , - 3354 , - 2007 , - 1584 , - 2085 , - 3510 , - 931 , - 4204 , - 3473 , - 3666 , - 4783 , - 1896 , - 4861 , - 3822 , - 3707 , - 4516 , - 1321 , - 3978 , - 2631 , - 2208 , - 2709 , - 4134 , - 1555 , - 4828 , - 4097 , - 4290 , - 479 , - 2520 , - 557 , - 4446 , - 4331 , - 212 , - 1945 , - 4602 , - 3255 , - 2832 , - 3333 , - 4758 , - 2179 , - 524 , - 4721 , - 4914 , - 1103 , - 3144 , - 1181 , - 142 , - 27 , - 836 , - 2569 , - 298 , - 3879 , - 3456 , - 3957 , - 454 , - 2803 , - 1148 , - 417 , - 610 , - 1727 , - 3768 , - 1805 , - 766 , - 651 , - 1460 , - 3193 , - 922 , - 4503 , - 4080 , - 4581 , - 1078 , - 3427 , - 1772 , - 1041 , - 1234 , - 2351 , - 4392 , - 2429 , - 1390 , - 1275 , - 2084 , - 3817 , - 1546 , - 199 , - 4704 , - 277 , - 1702 , - 4051 , - 2396 , - 1665 , - 1858 , - 2975 , - 88 , - 3053 , - 2014 , - 1899 , - 2708 , - 4441 , - 2170 , - 823 , - 400 , - 901 , - 2326 , - 4675 , - 3020 , - 2289 , - 2482 , - 3599 , - 712 , - 3677 , - 2638 , - 2523 , - 3332 , - 137 , - 2794 , - 1447 , - 1024 , - 1525 , - 2950 , - 371 , - 3644 , - 2913 , - 3106 , - 4223 , - 1336 , - 4301 , - 3262 , - 3147 , - 3956 , - 761 , - 3418 , - 2071 , - 1648 , - 2149 , - 3574 , - 995 , - 4268 , - 3537 , - 3730 , - 4847 , - 1960 , - 4925 , - 3886 , - 3771 , - 4580 , - 1385 , - 4042 , - 2695 , - 2272 , - 2773 , - 4198 , - 1619 , - 4892 , - 4161 , - 4354 , - 543 , - 2584 , - 621 , - 4510 , - 4395 , - 276 , - 2009 , - 4666 , - 3319 , - 2896 , - 3397 , - 4822 , - 2243 , - 588 , - 4785 , - 50 , - 1167 , - 3208 , - 1245 , - 206 , - 91 , - 900 , - 2633 , - 362 , - 3943 , - 3520 , - 4021 , - 518 , - 2867 , - 1212 , - 481 , - 674 , - 1791 , - 3832 , - 1869 , - 830 , - 715 , - 1524 , - 3257 , - 986 , - 4567 , - 4144 , - 4645 , - 1142 , - 3491 , - 1836 , - 1105 , - 1298 , - 2415 , - 4456 , - 2493 , - 1454 , - 1339 , - 2148 , - 3881 , - 1610 , - 263 , - 4768 , - 341 , - 1766 , - 4115 , - 2460 , - 1729 , - 1922 , - 3039 , - 152 , - 3117 , - 2078 , - 1963 , - 2772 , - 4505 , - 2234 , - 887 , - 464 , - 965 , - 2390 , - 4739 , - 3084 , - 2353 , - 2546 , - 3663 , - 776 , - 3741 , - 2702 , - 2587 , - 3396 , - 201 , - 2858 , - 1511 , - 1088 , - 1589 , - 3014 , - 435 , - 3708 , - 2977 , - 3170 , - 4287 , - 1400 , - 4365 , - 3326 , - 3211 , - 4020 , - 825 , - 3482 , - 2135 , - 1712 , - 2213 , - 3638 , - 1059 , - 4332 , - 3601 , - 3794 , - 4911 , - 2024 , - 61 , - 3950 , - 3835 , - 4644 , - 1449 , - 4106 , - 2759 , - 2336 , - 2837 , - 4262 , - 1683 , - 28 , - 4225 , - 4418 , - 607 , - 2648 , - 685 , - 4574 , - 4459 , - 340 , - 2073 , - 4730 , - 3383 , - 2960 , - 3461 , - 4886 , - 2307 , - 652 , - 4849 , - 114 , - 1231 , - 3272 , - 1309 , - 270 , - 155 , - 964 , - 2697 , - 426 , - 4007 , - 3584 , - 4085 , - 582 , - 2931 , - 1276 , - 545 , - 738 , - 1855 , - 3896 , - 1933 , - 894 , - 779 , - 1588 , - 3321 , - 1050 , - 4631 , - 4208 , - 4709 , - 1206 , - 3555 , - 1900 , - 1169 , - 1362 , - 2479 , - 4520 , - 2557 , - 1518 , - 1403 , - 2212 , - 3945 , - 1674 , - 327 , - 4832 , - 405 , - 1830 , - 4179 , - 2524 , - 1793 , - 1986 , - 3103 , - 216 , - 3181 , - 2142 , - 2027 , - 2836 , - 4569 , - 2298 , - 951 , - 528 , - 1029 , - 2454 , - 4803 , - 3148 , - 2417 , - 2610 , - 3727 , - 840 , - 3805 , - 2766 , - 2651 , - 3460 , - 265 , - 2922 , - 1575 , - 1152 , - 1653 , - 3078 , - 499 , - 3772 , - 3041 , - 3234 , - 4351 , - 1464 , - 4429 , - 3390 , - 3275 , - 4084 , - 889 , - 3546 , - 2199 , - 1776 , - 2277 , - 3702 , - 1123 , - 4396 , - 3665 , - 3858 , - 47 , - 2088 , - 125 , - 4014 , - 3899 , - 4708 , - 1513 , - 4170 , - 2823 , - 2400 , - 2901 , - 4326 , - 1747 , - 92 , - 4289 , - 4482 , - 671 , - 2712 , - 749 , - 4638 , - 4523 , - 404 , - 2137 , - 4794 , - 3447 , - 3024 , - 3525 , - 22 , - 2371 , - 716 , - 4913 , - 178 , - 1295 , - 3336 , - 1373 , - 334 , - 219 , - 1028 , - 2761 , - 490 , - 4071 , - 3648 , - 4149 , - 646 , - 2995 , - 1340 , - 609 , - 802 , - 1919 , - 3960 , - 1997 , - 958 , - 843 , - 1652 , - 3385 , - 1114 , - 4695 , - 4272 , - 4773 , - 1270 , - 3619 , - 1964 , - 1233 , - 1426 , - 2543 , - 4584 , - 2621 , - 1582 , - 1467 , - 2276 , - 4009 , - 1738 , - 391 , - 4896 , - 469 , - 1894 , - 4243 , - 2588 , - 1857 , - 2050 , - 3167 , - 280 , - 3245 , - 2206 , - 2091 , - 2900 , - 4633 , - 2362 , - 1015 , - 592 , - 1093 , - 2518 , - 4867 , - 3212 , - 2481 , - 2674 , - 3791 , - 904 , - 3869 , - 2830 , - 2715 , - 3524 , - 329 , - 2986 , - 1639 , - 1216 , - 1717 , - 3142 , - 563 , - 3836 , - 3105 , - 3298 , - 4415 , - 1528 , - 4493 , - 3454 , - 3339 , - 4148 , - 953 , - 3610 , - 2263 , - 1840 , - 2341 , - 3766 , - 1187 , - 4460 , - 3729 , - 3922 , - 111 , - 2152 , - 189 , - 4078 , - 3963 , - 4772 , - 1577 , - 4234 , - 2887 , - 2464 , - 2965 , - 4390 , - 1811 , - 156 , - 4353 , - 4546 , - 735 , - 2776 , - 813 , - 4702 , - 4587 , - 468 , - 2201 , - 4858 , - 3511 , - 3088 , - 3589 , - 86 , - 2435 , - 780 , - 49 , - 242 , - 1359 , - 3400 , - 1437 , - 398 , - 283 , - 1092 , - 2825 , - 554 , - 4135 , - 3712 , - 4213 , - 710 , - 3059 , - 1404 , - 673 , - 866 , - 1983 , - 4024 , - 2061 , - 1022 , - 907 , - 1716 , - 3449 , - 1178 , - 4759 , - 4336 , - 4837 , - 1334 , - 3683 , - 2028 , - 1297 , - 1490 , - 2607 , - 4648 , - 2685 , - 1646 , - 1531 , - 2340 , - 4073 , - 1802 , - 455 , - 32 , - 533 , - 1958 , - 4307 , - 2652 , - 1921 , - 2114 , - 3231 , - 344 , - 3309 , - 2270 , - 2155 , - 2964 , - 4697 , - 2426 , - 1079 , - 656 , - 1157 , - 2582 , - 3 , - 3276 , - 2545 , - 2738 , - 3855 , - 968 , - 3933 , - 2894 , - 2779 , - 3588 , - 393 , - 3050 , - 1703 , - 1280 , - 1781 , - 3206 , - 627 , - 3900 , - 3169 , - 3362 , - 4479 , - 1592 , - 4557 , - 3518 , - 3403 , - 4212 , - 1017 , - 3674 , - 2327 , - 1904 , - 2405 , - 3830 , - 1251 , - 4524 , - 3793 , - 3986 , - 175 , - 2216 , - 253 , - 4142 , - 4027 , - 4836 , - 1641 , - 4298 , - 2951 , - 2528 , - 3029 , - 4454 , - 1875 , - 220 , - 4417 , - 4610 , - 799 , - 2840 , - 877 , - 4766 , - 4651 , - 532 , - 2265 , - 4922 , - 3575 , - 3152 , - 3653 , - 150 , - 2499 , - 844 , - 113 , - 306 , - 1423 , - 3464 , - 1501 , - 462 , - 347 , - 1156 , - 2889 , - 618 , - 4199 , - 3776 , - 4277 , - 774 , - 3123 , - 1468 , - 737 , - 930 , - 2047 , - 4088 , - 2125 , - 1086 , - 971 , - 1780 , - 3513 , - 1242 , - 4823 , - 4400 , - 4901 , - 1398 , - 3747 , - 2092 , - 1361 , - 1554 , - 2671 , - 4712 , - 2749 , - 1710 , - 1595 , - 2404 , - 4137 , - 1866 , - 519 , - 96 , - 597 , - 2022 , - 4371 , - 2716 , - 1985 , - 2178 , - 3295 , - 408 , - 3373 , - 2334 , - 2219 , - 3028 , - 4761 , - 2490 , - 1143 , - 720 , - 1221 , - 2646 , - 67 , - 3340 , - 2609 , - 2802 , - 3919 , - 1032 , - 3997 , - 2958 , - 2843 , - 3652 , - 457 , - 3114 , - 1767 , - 1344 , - 1845 , - 3270 , - 691 , - 3964 , - 3233 , - 3426 , - 4543 , - 1656 , - 4621 , - 3582 , - 3467 , - 4276 , - 1081 , - 3738 , - 2391 , - 1968 , - 2469 , - 3894 , - 1315 , - 4588 , - 3857 , - 4050 , - 239 , - 2280 , - 317 , - 4206 , - 4091 , - 4900 , - 1705 , - 4362 , - 3015 , - 2592 , - 3093 , - 4518 , - 1939 , - 284 , - 4481 , - 4674 , - 863 , - 2904 , - 941 , - 4830 , - 4715 , - 596 , - 2329 , - 58 , - 3639 , - 3216 , - 3717 , - 214 , - 2563 , - 908 , - 177 , - 370 , - 1487 , - 3528 , - 1565 , - 526 , - 411 , - 1220 , - 2953 , - 682 , - 4263 , - 3840 , - 4341 , - 838 , - 3187 , - 1532 , - 801 , - 994 , - 2111 , - 4152 , - 2189 , - 1150 , - 1035 , - 1844 , - 3577 , - 1306 , - 4887 , - 4464 , - 37 , - 1462 , - 3811 , - 2156 , - 1425 , - 1618 , - 2735 , - 4776 , - 2813 , - 1774 , - 1659 , - 2468 , - 4201 , - 1930 , - 583 , - 160 , - 661 , - 2086 , - 4435 , - 2780 , - 2049 , - 2242 , - 3359 , - 472 , - 3437 , - 2398 , - 2283 , - 3092 , - 4825 , - 2554 , - 1207 , - 784 , - 1285 , - 2710 , - 131 , - 3404 , - 2673 , - 2866 , - 3983 , - 1096 , - 4061 , - 3022 , - 2907 , - 3716 , - 521 , - 3178 , - 1831 , - 1408 , - 1909 , - 3334 , - 755 , - 4028 , - 3297 , - 3490 , - 4607 , - 1720 , - 4685 , - 3646 , - 3531 , - 4340 , - 1145 , - 3802 , - 2455 , - 2032 , - 2533 , - 3958 , - 1379 , - 4652 , - 3921 , - 4114 , - 303 , - 2344 , - 381 , - 4270 , - 4155 , - 36 , - 1769 , - 4426 , - 3079 , - 2656 , - 3157 , - 4582 , - 2003 , - 348 , - 4545 , - 4738 , - 927 , - 2968 , - 1005 , - 4894 , - 4779 , - 660 , - 2393 , - 122 , - 3703 , - 3280 , - 3781 , - 278 , - 2627 , - 972 , - 241 , - 434 , - 1551 , - 3592 , - 1629 , - 590 , - 475 , - 1284 , - 3017 , - 746 , - 4327 , - 3904 , - 4405 , - 902 , - 3251 , - 1596 , - 865 , - 1058 , - 2175 , - 4216 , - 2253 , - 1214 , - 1099 , - 1908 , - 3641 , - 1370 , - 23 , - 4528 , - 101 , - 1526 , - 3875 , - 2220 , - 1489 , - 1682 , - 2799 , - 4840 , - 2877 , - 1838 , - 1723 , - 2532 , - 4265 , - 1994 , - 647 , - 224 , - 725 , - 2150 , - 4499 , - 2844 , - 2113 , - 2306 , - 3423 , - 536 , - 3501 , - 2462 , - 2347 , - 3156 , - 4889 , - 2618 , - 1271 , - 848 , - 1349 , - 2774 , - 195 , - 3468 , - 2737 , - 2930 , - 4047 , - 1160 , - 4125 , - 3086 , - 2971 , - 3780 , - 585 , - 3242 , - 1895 , - 1472 , - 1973 , - 3398 , - 819 , - 4092 , - 3361 , - 3554 , - 4671 , - 1784 , - 4749 , - 3710 , - 3595 , - 4404 , - 1209 , - 3866 , - 2519 , - 2096 , - 2597 , - 4022 , - 1443 , - 4716 , - 3985 , - 4178 , - 367 , - 2408 , - 445 , - 4334 , - 4219 , - 100 , - 1833 , - 4490 , - 3143 , - 2720 , - 3221 , - 4646 , - 2067 , - 412 , - 4609 , - 4802 , - 991 , - 3032 , - 1069 , - 30 , - 4843 , - 724 , - 2457 , - 186 , - 3767 , - 3344 , - 3845 , - 342 , - 2691 , - 1036 , - 305 , - 498 , - 1615 , - 3656 , - 1693 , - 654 , - 539 , - 1348 , - 3081 , - 810 , - 4391 , - 3968 , - 4469 , - 966 , - 3315 , - 1660 , - 929 , - 1122 , - 2239 , - 4280 , - 2317 , - 1278 , - 1163 , - 1972 , - 3705 , - 1434 , - 87 , - 4592 , - 165 , - 1590 , - 3939 , - 2284 , - 1553 , - 1746 , - 2863 , - 4904 , - 2941 , - 1902 , - 1787 , - 2596 , - 4329 , - 2058 , - 711 , - 288 , - 789 , - 2214 , - 4563 , - 2908 , - 2177 , - 2370 , - 3487 , - 600 , - 3565 , - 2526 , - 2411 , - 3220 , - 25 , - 2682 , - 1335 , - 912 , - 1413 , - 2838 , - 259 , - 3532 , - 2801 , - 2994 , - 4111 , - 1224 , - 4189 , - 3150 , - 3035 , - 3844 , - 649 , - 3306 , - 1959 , - 1536 , - 2037 , - 3462 , - 883 , - 4156 , - 3425 , - 3618 , - 4735 , - 1848 , - 4813 , - 3774 , - 3659 , - 4468 , - 1273 , - 3930 , - 2583 , - 2160 , - 2661 , - 4086 , - 1507 , - 4780 , - 4049 , - 4242 , - 431 , - 2472 , - 509 , - 4398 , - 4283 , - 164 , - 1897 , - 4554 , - 3207 , - 2784 , - 3285 , - 4710 , - 2131 , - 476 , - 4673 , - 4866 , - 1055 , - 3096 , - 1133 , - 94 , - 4907 , - 788 , - 2521 , - 250 , - 3831 , - 3408 , - 3909 , - 406 , - 2755 , - 1100 , - 369 , - 562 , - 1679 , - 3720 , - 1757 , - 718 , - 603 , - 1412 , - 3145 , - 874 , - 4455 , - 4032 , - 4533 , - 1030 , - 3379 , - 1724 , - 993 , - 1186 , - 2303 , - 4344 , - 2381 , - 1342 , - 1227 , - 2036 , - 3769 , - 1498 , - 151 , - 4656 , - 229 , - 1654 , - 4003 , - 2348 , - 1617 , - 1810 , - 2927 , - 40 , - 3005 , - 1966 , - 1851 , - 2660 , - 4393 , - 2122 , - 775 , - 352 , - 853 , - 2278 , - 4627 , - 2972 , - 2241 , - 2434 , - 3551 , - 664 , - 3629 , - 2590 , - 2475 , - 3284 , - 89 , - 2746 , - 1399 , - 976 , - 1477 , - 2902 , - 323 , - 3596 , - 2865 , - 3058 , - 4175 , - 1288 , - 4253 , - 3214 , - 3099 , - 3908 , - 713 , - 3370 , - 2023 , - 1600 , - 2101 , - 3526 , - 947 , - 4220 , - 3489 , - 3682 , - 4799 , - 1912 , - 4877 , - 3838 , - 3723 , - 4532 , - 1337 , - 3994 , - 2647 , - 2224 , - 2725 , - 4150 , - 1571 , - 4844 , - 4113 , - 4306 , - 495 , - 2536 , - 573 , - 4462 , - 4347 , - 228 , - 1961 , - 4618 , - 3271 , - 2848 , - 3349 , - 4774 , - 2195 , - 540 , - 4737 , - 2 , - 1119 , - 3160 , - 1197 , - 158 , - 43 , - 852 , - 2585 , - 314 , - 3895 , - 3472 , - 3973 , - 470 , - 2819 , - 1164 , - 433 , - 626 , - 1743 , - 3784 , - 1821 , - 782 , - 667 , - 1476 , - 3209 , - 938 , - 4519 , - 4096 , - 4597 , - 1094 , - 3443 , - 1788 , - 1057 , - 1250 , - 2367 , - 4408 , - 2445 , - 1406 , - 1291 , - 2100 , - 3833 , - 1562 , - 215 , - 4720 , - 293 , - 1718 , - 4067 , - 2412 , - 1681 , - 1874 , - 2991 , - 104 , - 3069 , - 2030 , - 1915 , - 2724 , - 4457 , - 2186 , - 839 , - 416 , - 917 , - 2342 , - 4691 , - 3036 , - 2305 , - 2498 , - 3615 , - 728 , - 3693 , - 2654 , - 2539 , - 3348 , - 153 , - 2810 , - 1463 , - 1040 , - 1541 , - 2966 , - 387 , - 3660 , - 2929 , - 3122 , - 4239 , - 1352 , - 4317 , - 3278 , - 3163 , - 3972 , - 777 , - 3434 , - 2087 , - 1664 , - 2165 , - 3590 , - 1011 , - 4284 , - 3553 , - 3746 , - 4863 , - 1976 , - 13 , - 3902 , - 3787 , - 4596 , - 1401 , - 4058 , - 2711 , - 2288 , - 2789 , - 4214 , - 1635 , - 4908 , - 4177 , - 4370 , - 559 , - 2600 , - 637 , - 4526 , - 4411 , - 292 , - 2025 , - 4682 , - 3335 , - 2912 , - 3413 , - 4838 , - 2259 , - 604 , - 4801 , - 66 , - 1183 , - 3224 , - 1261 , - 222 , - 107 , - 916 , - 2649 , - 378 , - 3959 , - 3536 , - 4037 , - 534 , - 2883 , - 1228 , - 497 , - 690 , - 1807 , - 3848 , - 1885 , - 846 , - 731 , - 1540 , - 3273 , - 1002 , - 4583 , - 4160 , - 4661 , - 1158 , - 3507 , - 1852 , - 1121 , - 1314 , - 2431 , - 4472 , - 2509 , - 1470 , - 1355 , - 2164 , - 3897 , - 1626 , - 279 , - 4784 , - 357 , - 1782 , - 4131 , - 2476 , - 1745 , - 1938 , - 3055 , - 168 , - 3133 , - 2094 , - 1979 , - 2788 , - 4521 , - 2250 , - 903 , - 480 , - 981 , - 2406 , - 4755 , - 3100 , - 2369 , - 2562 , - 3679 , - 792 , - 3757 , - 2718 , - 2603 , - 3412 , - 217 , - 2874 , - 1527 , - 1104 , - 1605 , - 3030 , - 451 , - 3724 , - 2993 , - 3186 , - 4303 , - 1416 , - 4381 , - 3342 , - 3227 , - 4036 , - 841 , - 3498 , - 2151 , - 1728 , - 2229 , - 3654 , - 1075 , - 4348 , - 3617 , - 3810 , - 4927 , - 2040 , - 77 , - 3966 , - 3851 , - 4660 , - 1465 , - 4122 , - 2775 , - 2352 , - 2853 , - 4278 , - 1699 , - 44 , - 4241 , - 4434 , - 623 , - 2664 , - 701 , - 4590 , - 4475 , - 356 , - 2089 , - 4746 , - 3399 , - 2976 , - 3477 , - 4902 , - 2323 , - 668 , - 4865 , - 130 , - 1247 , - 3288 , - 1325 , - 286 , - 171 , - 980 , - 2713 , - 442 , - 4023 , - 3600 , - 4101 , - 598 , - 2947 , - 1292 , - 561 , - 754 , - 1871 , - 3912 , - 1949 , - 910 , - 795 , - 1604 , - 3337 , - 1066 , - 4647 , - 4224 , - 4725 , - 1222 , - 3571 , - 1916 , - 1185 , - 1378 , - 2495 , - 4536 , - 2573 , - 1534 , - 1419 , - 2228 , - 3961 , - 1690 , - 343 , - 4848 , - 421 , - 1846 , - 4195 , - 2540 , - 1809 , - 2002 , - 3119 , - 232 , - 3197 , - 2158 , - 2043 , - 2852 , - 4585 , - 2314 , - 967 , - 544 , - 1045 , - 2470 , - 4819 , - 3164 , - 2433 , - 2626 , - 3743 , - 856 , - 3821 , - 2782 , - 2667 , - 3476 , - 281 , - 2938 , - 1591 , - 1168 , - 1669 , - 3094 , - 515 , - 3788 , - 3057 , - 3250 , - 4367 , - 1480 , - 4445 , - 3406 , - 3291 , - 4100 , - 905 , - 3562 , - 2215 , - 1792 , - 2293 , - 3718 , - 1139 , - 4412 , - 3681 , - 3874 , - 63 , - 2104 , - 141 , - 4030 , - 3915 , - 4724 , - 1529 , - 4186 , - 2839 , - 2416 , - 2917 , - 4342 , - 1763 , - 108 , - 4305 , - 4498 , - 687 , - 2728 , - 765 , - 4654 , - 4539 , - 420 , - 2153 , - 4810 , - 3463 , - 3040 , - 3541 , - 38 , - 2387 , - 732 , - 1 , - 194 , - 1311 , - 3352 , - 1389 , - 350 , - 235 , - 1044 , - 2777 , - 506 , - 4087 , - 3664 , - 4165 , - 662 , - 3011 , - 1356 , - 625 , - 818 , - 1935 , - 3976 , - 2013 , - 974 , - 859 , - 1668 , - 3401 , - 1130 , - 4711 , - 4288 , - 4789 , - 1286 , - 3635 , - 1980 , - 1249 , - 1442 , - 2559 , - 4600 , - 2637 , - 1598 , - 1483 , - 2292 , - 4025 , - 1754 , - 407 , - 4912 , - 485 , - 1910 , - 4259 , - 2604 , - 1873 , - 2066 , - 3183 , - 296 , - 3261 , - 2222 , - 2107 , - 2916 , - 4649 , - 2378 , - 1031 , - 608 , - 1109 , - 2534 , - 4883 , - 3228 , - 2497 , - 2690 , - 3807 , - 920 , - 3885 , - 2846 , - 2731 , - 3540 , - 345 , - 3002 , - 1655 , - 1232 , - 1733 , - 3158 , - 579 , - 3852 , - 3121 , - 3314 , - 4431 , - 1544 , - 4509 , - 3470 , - 3355 , - 4164 , - 969 , - 3626 , - 2279 , - 1856 , - 2357 , - 3782 , - 1203 , - 4476 , - 3745 , - 3938 , - 127 , - 2168 , - 205 , - 4094 , - 3979 , - 4788 , - 1593 , - 4250 , - 2903 , - 2480 , - 2981 , - 4406 , - 1827 , - 172 , - 4369 , - 4562 , - 751 , - 2792 , - 829 , - 4718 , - 4603 , - 484 , - 2217 , - 4874 , - 3527 , - 3104 , - 3605 , - 102 , - 2451 , - 796 , - 65 , - 258 , - 1375 , - 3416 , - 1453 , - 414 , - 299 , - 1108 , - 2841 , - 570 , - 4151 , - 3728 , - 4229 , - 726 , - 3075 , - 1420 , - 689 , - 882 , - 1999 , - 4040 , - 2077 , - 1038 , - 923 , - 1732 , - 3465 , - 1194 , - 4775 , - 4352 , - 4853 , - 1350 , - 3699 , - 2044 , - 1313 , - 1506 , - 2623 , - 4664 , - 2701 , - 1662 , - 1547 , - 2356 , - 4089 , - 1818 , - 471 , - 48 , - 549 , - 1974 , - 4323 , - 2668 , - 1937 , - 2130 , - 3247 , - 360 , - 3325 , - 2286 , - 2171 , - 2980 , - 4713 , - 2442 , - 1095 , - 672 , - 1173 , - 2598 , - 19 , - 3292 , - 2561 , - 2754 , - 3871 , - 984 , - 3949 , - 2910 , - 2795 , - 3604 , - 409 , - 3066 , - 1719 , - 1296 , - 1797 , - 3222 , - 643 , - 3916 , - 3185 , - 3378 , - 4495 , - 1608 , - 4573 , - 3534 , - 3419 , - 4228 , - 1033 , - 3690 , - 2343 , - 1920 , - 2421 , - 3846 , - 1267 , - 4540 , - 3809 , - 4002 , - 191 , - 2232 , - 269 , - 4158 , - 4043 , - 4852 , - 1657 , - 4314 , - 2967 , - 2544 , - 3045 , - 4470 , - 1891 , - 236 , - 4433 , - 4626 , - 815 , - 2856 , - 893 , - 4782 , - 4667 , - 548 , - 2281 , - 10 , - 3591 , - 3168 , - 3669 , - 166 , - 2515 , - 860 , - 129 , - 322 , - 1439 , - 3480 , - 1517 , - 478 , - 363 , - 1172 , - 2905 , - 634 , - 4215 , - 3792 , - 4293 , - 790 , - 3139 , - 1484 , - 753 , - 946 , - 2063 , - 4104 , - 2141 , - 1102 , - 987 , - 1796 , - 3529 , - 1258 , - 4839 , - 4416 , - 4917 , - 1414 , - 3763 , - 2108 , - 1377 , - 1570 , - 2687 , - 4728 , - 2765 , - 1726 , - 1611 , - 2420 , - 4153 , - 1882 , - 535 , - 112 , - 613 , - 2038 , - 4387 , - 2732 , - 2001 , - 2194 , - 3311 , - 424 , - 3389 , - 2350 , - 2235 , - 3044 , - 4777 , - 2506 , - 1159 , - 736 , - 1237 , - 2662 , - 83 , - 3356 , - 2625 , - 2818 , - 3935 , - 1048 , - 4013 , - 2974 , - 2859 , - 3668 , - 473 , - 3130 , - 1783 , - 1360 , - 1861 , - 3286 , - 707 , - 3980 , - 3249 , - 3442 , - 4559 , - 1672 , - 4637 , - 3598 , - 3483 , - 4292 , - 1097 , - 3754 , - 2407 , - 1984 , - 2485 , - 3910 , - 1331 , - 4604 , - 3873 , - 4066 , - 255 , - 2296 , - 333 , - 4222 , - 4107 , - 4916 , - 1721 , - 4378 , - 3031 , - 2608 , - 3109 , - 4534 , - 1955 , - 300 , - 4497 , - 4690 , - 879 , - 2920 , - 957 , - 4846 , - 4731 , - 612 , - 2345 , - 74 , - 3655 , - 3232 , - 3733 , - 230 , - 2579 , - 924 , - 193 , - 386 , - 1503 , - 3544 , - 1581 , - 542 , - 427 , - 1236 , - 2969 , - 698 , - 4279 , - 3856 , - 4357 , - 854 , - 3203 , - 1548 , - 817 , - 1010 , - 2127 , - 4168 , - 2205 , - 1166 , - 1051 , - 1860 , - 3593 , - 1322 , - 4903 , - 4480 , - 53 , - 1478 , - 3827 , - 2172 , - 1441 , - 1634 , - 2751 , - 4792 , - 2829 , - 1790 , - 1675 , - 2484 , - 4217 , - 1946 , - 599 , - 176 , - 677 , - 2102 , - 4451 , - 2796 , - 2065 , - 2258 , - 3375 , - 488 , - 3453 , - 2414 , - 2299 , - 3108 , - 4841 , - 2570 , - 1223 , - 800 , - 1301 , - 2726 , - 147 , - 3420 , - 2689 , - 2882 , - 3999 , - 1112 , - 4077 , - 3038 , - 2923 , - 3732 , - 537 , - 3194 , - 1847 , - 1424 , - 1925 , - 3350 , - 771 , - 4044 , - 3313 , - 3506 , - 4623 , - 1736 , - 4701 , - 3662 , - 3547 , - 4356 , - 1161 , - 3818 , - 2471 , - 2048 , - 2549 , - 3974 , - 1395 , - 4668 , - 3937 , - 4130 , - 319 , - 2360 , - 397 , - 4286 , - 4171 , - 52 , - 1785 , - 4442 , - 3095 , - 2672 , - 3173 , - 4598 , - 2019 , - 364 , - 4561 , - 4754 , - 943 , - 2984 , - 1021 , - 4910 , - 4795 , - 676 , - 2409 , - 138 , - 3719 , - 3296 , - 3797 , - 294 , - 2643 , - 988 , - 257 , - 450 , - 1567 , - 3608 , - 1645 , - 606 , - 491 , - 1300 , - 3033 , - 762 , - 4343 , - 3920 , - 4421 , - 918 , - 3267 , - 1612 , - 881 , - 1074 , - 2191 , - 4232 , - 2269 , - 1230 , - 1115 , - 1924 , - 3657 , - 1386 , - 39 , - 4544 , - 117 , - 1542 , - 3891 , - 2236 , - 1505 , - 1698 , - 2815 , - 4856 , - 2893 , - 1854 , - 1739 , - 2548 , - 4281 , - 2010 , - 663 , - 240 , - 741 , - 2166 , - 4515 , - 2860 , - 2129 , - 2322 , - 3439 , - 552 , - 3517 , - 2478 , - 2363 , - 3172 , - 4905 , - 2634 , - 1287 , - 864 , - 1365 , - 2790 , - 211 , - 3484 , - 2753 , - 2946 , - 4063 , - 1176 , - 4141 , - 3102 , - 2987 , - 3796 , - 601 , - 3258 , - 1911 , - 1488 , - 1989 , - 3414 , - 835 , - 4108 , - 3377 , - 3570 , - 4687 , - 1800 , - 4765 , - 3726 , - 3611 , - 4420 , - 1225 , - 3882 , - 2535 , - 2112 , - 2613 , - 4038 , - 1459 , - 4732 , - 4001 , - 4194 , - 383 , - 2424 , - 461 , - 4350 , - 4235 , - 116 , - 1849 , - 4506 , - 3159 , - 2736 , - 3237 , - 4662 , - 2083 , - 428 , - 4625 , - 4818 , - 1007 , - 3048 , - 1085 , - 46 , - 4859 , - 740 , - 2473 , - 202 , - 3783 , - 3360 , - 3861 , - 358 , - 2707 , - 1052 , - 321 , - 514 , - 1631 , - 3672 , - 1709 , - 670 , - 555 , - 1364 , - 3097 , - 826 , - 4407 , - 3984 , - 4485 , - 982 , - 3331 , - 1676 , - 945 , - 1138 , - 2255 , - 4296 , - 2333 , - 1294 , - 1179 , - 1988 , - 3721 , - 1450 , - 103 , - 4608 , - 181 , - 1606 , - 3955 , - 2300 , - 1569 , - 1762 , - 2879 , - 4920 , - 2957 , - 1918 , - 1803 , - 2612 , - 4345 , - 2074 , - 727 , - 304 , - 805 , - 2230 , - 4579 , - 2924 , - 2193 , - 2386 , - 3503 , - 616 , - 3581 , - 2542 , - 2427 , - 3236 , - 41 , - 2698 , - 1351 , - 928 , - 1429 , - 2854 , - 275 , - 3548 , - 2817 , - 3010 , - 4127 , - 1240 , - 4205 , - 3166 , - 3051 , - 3860 , - 665 , - 3322 , - 1975 , - 1552 , - 2053 , - 3478 , - 899 , - 4172 , - 3441 , - 3634 , - 4751 , - 1864 , - 4829 , - 3790 , - 3675 , - 4484 , - 1289 , - 3946 , - 2599 , - 2176 , - 2677 , - 4102 , - 1523 , - 4796 , - 4065 , - 4258 , - 447 , - 2488 , - 525 , - 4414 , - 4299 , - 180 , - 1913 , - 4570 , - 3223 , - 2800 , - 3301 , - 4726 , - 2147 , - 492 , - 4689 , - 4882 , - 1071 , - 3112 , - 1149 , - 110 , - 4923 , - 804 , - 2537 , - 266 , - 3847 , - 3424 , - 3925 , - 422 , - 2771 , - 1116 , - 385 , - 578 , - 1695 , - 3736 , - 1773 , - 734 , - 619 , - 1428 , - 3161 , - 890 , - 4471 , - 4048 , - 4549 , - 1046 , - 3395 , - 1740 , - 1009 , - 1202 , - 2319 , - 4360 , - 2397 , - 1358 , - 1243 , - 2052 , - 3785 , - 1514 , - 167 , - 4672 , - 245 , - 1670 , - 4019 , - 2364 , - 1633 , - 1826 , - 2943 , - 56 , - 3021 , - 1982 , - 1867 , - 2676 , - 4409 , - 2138 , - 791 , - 368 , - 869 , - 2294 , - 4643 , - 2988 , - 2257 , - 2450 , - 3567 , - 680 , - 3645 , - 2606 , - 2491 , - 3300 , - 105 , - 2762 , - 1415 , - 992 , - 1493 , - 2918 , - 339 , - 3612 , - 2881 , - 3074 , - 4191 , - 1304 , - 4269 , - 3230 , - 3115 , - 3924 , - 729 , - 3386 , - 2039 , - 1616 , - 2117 , - 3542 , - 963 , - 4236 , - 3505 , - 3698 , - 4815 , - 1928 , - 4893 , - 3854 , - 3739 , - 4548 , - 1353 , - 4010 , - 2663 , - 2240 , - 2741 , - 4166 , - 1587 , - 4860 , - 4129 , - 4322 , - 511 , - 2552 , - 589 , - 4478 , - 4363 , - 244 , - 1977 , - 4634 , - 3287 , - 2864 , - 3365 , - 4790 , - 2211 , - 556 , - 4753 , - 18 , - 1135 , - 3176 , - 1213 , - 174 , - 59 , - 868 , - 2601 , - 330 , - 3911 , - 3488 , - 3989 , - 486 , - 2835 , - 1180 , - 449 , - 642 , - 1759 , - 3800 , - 1837 , - 798 , - 683 , - 1492 , - 3225 , - 954 , - 4535 , - 4112 , - 4613 , - 1110 , - 3459 , - 1804 , - 1073 , - 1266 , - 2383 , - 4424 , - 2461 , - 1422 , - 1307 , - 2116 , - 3849 , - 1578 , - 231 , - 4736 , - 309 , - 1734 , - 4083 , - 2428 , - 1697 , - 1890 , - 3007 , - 120 , - 3085 , - 2046 , - 1931 , - 2740 , - 4473 , - 2202 , - 855 , - 432 , - 933 , - 2358 , - 4707 , - 3052 , - 2321 , - 2514 , - 3631 , - 744 , - 3709 , - 2670 , - 2555 , - 3364 , - 169 , - 2826 , - 1479 , - 1056 , - 1557 , - 2982 , - 403 , - 3676 , - 2945 , - 3138 , - 4255 , - 1368 , - 4333 , - 3294 , - 3179 , - 3988 , - 793 , - 3450 , - 2103 , - 1680 , - 2181 , - 3606 , - 1027 , - 4300 , - 3569 , - 3762 , - 4879 , - 1992 , - 29 , - 3918 , - 3803 , - 4612 , - 1417 , - 4074 , - 2727 , - 2304 , - 2805 , - 4230 , - 1651 , - 4924 , - 4193 , - 4386 , - 575 , - 2616 , - 653 , - 4542 , - 4427 , - 308 , - 2041 , - 4698 , - 3351 , - 2928 , - 3429 , - 4854 , - 2275 , - 620 , - 4817 , - 82 , - 1199 , - 3240 , - 1277 , - 238 , - 123 , - 932 , - 2665 , - 394 , - 3975 , - 3552 , - 4053 , - 550 , - 2899 , - 1244 , - 513 , - 706 , - 1823 , - 3864 , - 1901 , - 862 , - 747 , - 1556 , - 3289 , - 1018 , - 4599 , - 4176 , - 4677 , - 1174 , - 3523 , - 1868 , - 1137 , - 1330 , - 2447 , - 4488 , - 2525 , - 1486 , - 1371 , - 2180 , - 3913 , - 1642 , - 295 , - 4800 , - 373 , - 1798 , - 4147 , - 2492 , - 1761 , - 1954 , - 3071 , - 184 , - 3149 , - 2110 , - 1995 , - 2804 , - 4537 , - 2266 , - 919 , - 496 , - 997 , - 2422 , - 4771 , - 3116 , - 2385 , - 2578 , - 3695 , - 808 , - 3773 , - 2734 , - 2619 , - 3428 , - 233 , - 2890 , - 1543 , - 1120 , - 1621 , - 3046 , - 467 , - 3740 , - 3009 , - 3202 , - 4319 , - 1432 , - 4397 , - 3358 , - 3243 , - 4052 , - 857 , - 3514 , - 2167 , - 1744 , - 2245 , - 3670 , - 1091 , - 4364 , - 3633 , - 3826 , - 15 , - 2056 , - 93 , - 3982 , - 3867 , - 4676 , - 1481 , - 4138 , - 2791 , - 2368 , - 2869 , - 4294 , - 1715 , - 60 , - 4257 , - 4450 , - 639 , - 2680 , - 717 , - 4606 , - 4491 , - 372 , - 2105 , - 4762 , - 3415 , - 2992 , - 3493 , - 4918 , - 2339 , - 684 , - 4881 , - 146 , - 1263 , - 3304 , - 1341 , - 302 , - 187 , - 996 , - 2729 , - 458 , - 4039 , - 3616 , - 4117 , - 614 , - 2963 , - 1308 , - 577 , - 770 , - 1887 , - 3928 , - 1965 , - 926 , - 811 , - 1620 , - 3353 , - 1082 , - 4663 , - 4240 , - 4741 , - 1238 , - 3587 , - 1932 , - 1201 , - 1394 , - 2511 , - 4552 , - 2589 , - 1550 , - 1435 , - 2244 , - 3977 , - 1706 , - 359 , - 4864 , - 437 , - 1862 , - 4211 , - 2556 , - 1825 , - 2018 , - 3135 , - 248 , - 3213 , - 2174 , - 2059 , - 2868 , - 4601 , - 2330 , - 983 , - 560 , - 1061 , - 2486 , - 4835 , - 3180 , - 2449 , - 2642 , - 3759 , - 872 , - 3837 , - 2798 , - 2683 , - 3492 , - 297 , - 2954 , - 1607 , - 1184 , - 1685 , - 3110 , - 531 , - 3804 , - 3073 , - 3266 , - 4383 , - 1496 , - 4461 , - 3422 , - 3307 , - 4116 , - 921 , - 3578 , - 2231 , - 1808 , - 2309 , - 3734 , - 1155 , - 4428 , - 3697 , - 3890 , - 79 , - 2120 , - 157 , - 4046 , - 3931 , - 4740 , - 1545 , - 4202 , - 2855 , - 2432 , - 2933 , - 4358 , - 1779 , - 124 , - 4321 , - 4514 , - 703 , - 2744 , - 781 , - 4670 , - 4555 , - 436 , - 2169 , - 4826 , - 3479 , - 3056 , - 3557 , - 54 , - 2403 , - 748 , - 17 , - 210 , - 1327 , - 3368 , - 1405 , - 366 , - 251 , - 1060 , - 2793 , - 522 , - 4103 , - 3680 , - 4181 , - 678 , - 3027 , - 1372 , - 641 , - 834 , - 1951 , - 3992 , - 2029 , - 990 , - 875 , - 1684 , - 3417 , - 1146 , - 4727 , - 4304 , - 4805 , - 1302 , - 3651 , - 1996 , - 1265 , - 1458 , - 2575 , - 4616 , - 2653 , - 1614 , - 1499 , - 2308 , - 4041 , - 1770 , - 423 , - 0 , - 361 , - 1190 , - 2487 , - 4252 , - 1493 , - 4194 , - 2371 , - 1016 , - 129 , - 4702 , - 4751 , - 276 , - 1261 , - 2714 , - 4635 , - 2032 , - 4889 , - 3222 , - 2023 , - 1292 , - 1029 , - 1234 , - 1907 , - 3048 , - 4657 , - 1742 , - 4287 , - 2308 , - 797 , - 4746 , - 4171 , - 4064 , - 4425 , - 262 , - 1559 , - 3324 , - 565 , - 3266 , - 1443 , - 88 , - 4193 , - 3774 , - 3823 , - 4340 , - 333 , - 1786 , - 3707 , - 1104 , - 3961 , - 2294 , - 1095 , - 364 , - 101 , - 306 , - 979 , - 2120 , - 3729 , - 814 , - 3359 , - 1380 , - 4861 , - 3818 , - 3243 , - 3136 , - 3497 , - 4326 , - 631 , - 2396 , - 4629 , - 2338 , - 515 , - 4152 , - 3265 , - 2846 , - 2895 , - 3412 , - 4397 , - 858 , - 2779 , - 176 , - 3033 , - 1366 , - 167 , - 4428 , - 4165 , - 4370 , - 51 , - 1192 , - 2801 , - 4878 , - 2431 , - 452 , - 3933 , - 2890 , - 2315 , - 2208 , - 2569 , - 3398 , - 4695 , - 1468 , - 3701 , - 1410 , - 4579 , - 3224 , - 2337 , - 1918 , - 1967 , - 2484 , - 3469 , - 4922 , - 1851 , - 4240 , - 2105 , - 438 , - 4231 , - 3500 , - 3237 , - 3442 , - 4115 , - 264 , - 1873 , - 3950 , - 1503 , - 4516 , - 3005 , - 1962 , - 1387 , - 1280 , - 1641 , - 2470 , - 3767 , - 540 , - 2773 , - 482 , - 3651 , - 2296 , - 1409 , - 990 , - 1039 , - 1556 , - 2541 , - 3994 , - 923 , - 3312 , - 1177 , - 4502 , - 3303 , - 2572 , - 2309 , - 2514 , - 3187 , - 4328 , - 945 , - 3022 , - 575 , - 3588 , - 2077 , - 1034 , - 459 , - 352 , - 713 , - 1542 , - 2839 , - 4604 , - 1845 , - 4546 , - 2723 , - 1368 , - 481 , - 62 , - 111 , - 628 , - 1613 , - 3066 , - 4987 , - 2384 , - 249 , - 3574 , - 2375 , - 1644 , - 1381 , - 1586 , - 2259 , - 3400 , - 17 , - 2094 , - 4639 , - 2660 , - 1149 , - 106 , - 4523 , - 4416 , - 4777 , - 614 , - 1911 , - 3676 , - 917 , - 3618 , - 1795 , - 440 , - 4545 , - 4126 , - 4175 , - 4692 , - 685 , - 2138 , - 4059 , - 1456 , - 4313 , - 2646 , - 1447 , - 716 , - 453 , - 658 , - 1331 , - 2472 , - 4081 , - 1166 , - 3711 , - 1732 , - 221 , - 4170 , - 3595 , - 3488 , - 3849 , - 4678 , - 983 , - 2748 , - 4981 , - 2690 , - 867 , - 4504 , - 3617 , - 3198 , - 3247 , - 3764 , - 4749 , - 1210 , - 3131 , - 528 , - 3385 , - 1718 , - 519 , - 4780 , - 4517 , - 4722 , - 403 , - 1544 , - 3153 , - 238 , - 2783 , - 804 , - 4285 , - 3242 , - 2667 , - 2560 , - 2921 , - 3750 , - 55 , - 1820 , - 4053 , - 1762 , - 4931 , - 3576 , - 2689 , - 2270 , - 2319 , - 2836 , - 3821 , - 282 , - 2203 , - 4592 , - 2457 , - 790 , - 4583 , - 3852 , - 3589 , - 3794 , - 4467 , - 616 , - 2225 , - 4302 , - 1855 , - 4868 , - 3357 , - 2314 , - 1739 , - 1632 , - 1993 , - 2822 , - 4119 , - 892 , - 3125 , - 834 , - 4003 , - 2648 , - 1761 , - 1342 , - 1391 , - 1908 , - 2893 , - 4346 , - 1275 , - 3664 , - 1529 , - 4854 , - 3655 , - 2924 , - 2661 , - 2866 , - 3539 , - 4680 , - 1297 , - 3374 , - 927 , - 3940 , - 2429 , - 1386 , - 811 , - 704 , - 1065 , - 1894 , - 3191 , - 4956 , - 2197 , - 4898 , - 3075 , - 1720 , - 833 , - 414 , - 463 , - 980 , - 1965 , - 3418 , - 347 , - 2736 , - 601 , - 3926 , - 2727 , - 1996 , - 1733 , - 1938 , - 2611 , - 3752 , - 369 , - 2446 , - 4991 , - 3012 , - 1501 , - 458 , - 4875 , - 4768 , - 137 , - 966 , - 2263 , - 4028 , - 1269 , - 3970 , - 2147 , - 792 , - 4897 , - 4478 , - 4527 , - 52 , - 1037 , - 2490 , - 4411 , - 1808 , - 4665 , - 2998 , - 1799 , - 1068 , - 805 , - 1010 , - 1683 , - 2824 , - 4433 , - 1518 , - 4063 , - 2084 , - 573 , - 4522 , - 3947 , - 3840 , - 4201 , - 38 , - 1335 , - 3100 , - 341 , - 3042 , - 1219 , - 4856 , - 3969 , - 3550 , - 3599 , - 4116 , - 109 , - 1562 , - 3483 , - 880 , - 3737 , - 2070 , - 871 , - 140 , - 4869 , - 82 , - 755 , - 1896 , - 3505 , - 590 , - 3135 , - 1156 , - 4637 , - 3594 , - 3019 , - 2912 , - 3273 , - 4102 , - 407 , - 2172 , - 4405 , - 2114 , - 291 , - 3928 , - 3041 , - 2622 , - 2671 , - 3188 , - 4173 , - 634 , - 2555 , - 4944 , - 2809 , - 1142 , - 4935 , - 4204 , - 3941 , - 4146 , - 4819 , - 968 , - 2577 , - 4654 , - 2207 , - 228 , - 3709 , - 2666 , - 2091 , - 1984 , - 2345 , - 3174 , - 4471 , - 1244 , - 3477 , - 1186 , - 4355 , - 3000 , - 2113 , - 1694 , - 1743 , - 2260 , - 3245 , - 4698 , - 1627 , - 4016 , - 1881 , - 214 , - 4007 , - 3276 , - 3013 , - 3218 , - 3891 , - 40 , - 1649 , - 3726 , - 1279 , - 4292 , - 2781 , - 1738 , - 1163 , - 1056 , - 1417 , - 2246 , - 3543 , - 316 , - 2549 , - 258 , - 3427 , - 2072 , - 1185 , - 766 , - 815 , - 1332 , - 2317 , - 3770 , - 699 , - 3088 , - 953 , - 4278 , - 3079 , - 2348 , - 2085 , - 2290 , - 2963 , - 4104 , - 721 , - 2798 , - 351 , - 3364 , - 1853 , - 810 , - 235 , - 128 , - 489 , - 1318 , - 2615 , - 4380 , - 1621 , - 4322 , - 2499 , - 1144 , - 257 , - 4830 , - 4879 , - 404 , - 1389 , - 2842 , - 4763 , - 2160 , - 25 , - 3350 , - 2151 , - 1420 , - 1157 , - 1362 , - 2035 , - 3176 , - 4785 , - 1870 , - 4415 , - 2436 , - 925 , - 4874 , - 4299 , - 4192 , - 4553 , - 390 , - 1687 , - 3452 , - 693 , - 3394 , - 1571 , - 216 , - 4321 , - 3902 , - 3951 , - 4468 , - 461 , - 1914 , - 3835 , - 1232 , - 4089 , - 2422 , - 1223 , - 492 , - 229 , - 434 , - 1107 , - 2248 , - 3857 , - 942 , - 3487 , - 1508 , - 4989 , - 3946 , - 3371 , - 3264 , - 3625 , - 4454 , - 759 , - 2524 , - 4757 , - 2466 , - 643 , - 4280 , - 3393 , - 2974 , - 3023 , - 3540 , - 4525 , - 986 , - 2907 , - 304 , - 3161 , - 1494 , - 295 , - 4556 , - 4293 , - 4498 , - 179 , - 1320 , - 2929 , - 14 , - 2559 , - 580 , - 4061 , - 3018 , - 2443 , - 2336 , - 2697 , - 3526 , - 4823 , - 1596 , - 3829 , - 1538 , - 4707 , - 3352 , - 2465 , - 2046 , - 2095 , - 2612 , - 3597 , - 58 , - 1979 , - 4368 , - 2233 , - 566 , - 4359 , - 3628 , - 3365 , - 3570 , - 4243 , - 392 , - 2001 , - 4078 , - 1631 , - 4644 , - 3133 , - 2090 , - 1515 , - 1408 , - 1769 , - 2598 , - 3895 , - 668 , - 2901 , - 610 , - 3779 , - 2424 , - 1537 , - 1118 , - 1167 , - 1684 , - 2669 , - 4122 , - 1051 , - 3440 , - 1305 , - 4630 , - 3431 , - 2700 , - 2437 , - 2642 , - 3315 , - 4456 , - 1073 , - 3150 , - 703 , - 3716 , - 2205 , - 1162 , - 587 , - 480 , - 841 , - 1670 , - 2967 , - 4732 , - 1973 , - 4674 , - 2851 , - 1496 , - 609 , - 190 , - 239 , - 756 , - 1741 , - 3194 , - 123 , - 2512 , - 377 , - 3702 , - 2503 , - 1772 , - 1509 , - 1714 , - 2387 , - 3528 , - 145 , - 2222 , - 4767 , - 2788 , - 1277 , - 234 , - 4651 , - 4544 , - 4905 , - 742 , - 2039 , - 3804 , - 1045 , - 3746 , - 1923 , - 568 , - 4673 , - 4254 , - 4303 , - 4820 , - 813 , - 2266 , - 4187 , - 1584 , - 4441 , - 2774 , - 1575 , - 844 , - 581 , - 786 , - 1459 , - 2600 , - 4209 , - 1294 , - 3839 , - 1860 , - 349 , - 4298 , - 3723 , - 3616 , - 3977 , - 4806 , - 1111 , - 2876 , - 117 , - 2818 , - 995 , - 4632 , - 3745 , - 3326 , - 3375 , - 3892 , - 4877 , - 1338 , - 3259 , - 656 , - 3513 , - 1846 , - 647 , - 4908 , - 4645 , - 4850 , - 531 , - 1672 , - 3281 , - 366 , - 2911 , - 932 , - 4413 , - 3370 , - 2795 , - 2688 , - 3049 , - 3878 , - 183 , - 1948 , - 4181 , - 1890 , - 67 , - 3704 , - 2817 , - 2398 , - 2447 , - 2964 , - 3949 , - 410 , - 2331 , - 4720 , - 2585 , - 918 , - 4711 , - 3980 , - 3717 , - 3922 , - 4595 , - 744 , - 2353 , - 4430 , - 1983 , - 4 , - 3485 , - 2442 , - 1867 , - 1760 , - 2121 , - 2950 , - 4247 , - 1020 , - 3253 , - 962 , - 4131 , - 2776 , - 1889 , - 1470 , - 1519 , - 2036 , - 3021 , - 4474 , - 1403 , - 3792 , - 1657 , - 4982 , - 3783 , - 3052 , - 2789 , - 2994 , - 3667 , - 4808 , - 1425 , - 3502 , - 1055 , - 4068 , - 2557 , - 1514 , - 939 , - 832 , - 1193 , - 2022 , - 3319 , - 92 , - 2325 , - 34 , - 3203 , - 1848 , - 961 , - 542 , - 591 , - 1108 , - 2093 , - 3546 , - 475 , - 2864 , - 729 , - 4054 , - 2855 , - 2124 , - 1861 , - 2066 , - 2739 , - 3880 , - 497 , - 2574 , - 127 , - 3140 , - 1629 , - 586 , - 11 , - 4896 , - 265 , - 1094 , - 2391 , - 4156 , - 1397 , - 4098 , - 2275 , - 920 , - 33 , - 4606 , - 4655 , - 180 , - 1165 , - 2618 , - 4539 , - 1936 , - 4793 , - 3126 , - 1927 , - 1196 , - 933 , - 1138 , - 1811 , - 2952 , - 4561 , - 1646 , - 4191 , - 2212 , - 701 , - 4650 , - 4075 , - 3968 , - 4329 , - 166 , - 1463 , - 3228 , - 469 , - 3170 , - 1347 , - 4984 , - 4097 , - 3678 , - 3727 , - 4244 , - 237 , - 1690 , - 3611 , - 1008 , - 3865 , - 2198 , - 999 , - 268 , - 5 , - 210 , - 883 , - 2024 , - 3633 , - 718 , - 3263 , - 1284 , - 4765 , - 3722 , - 3147 , - 3040 , - 3401 , - 4230 , - 535 , - 2300 , - 4533 , - 2242 , - 419 , - 4056 , - 3169 , - 2750 , - 2799 , - 3316 , - 4301 , - 762 , - 2683 , - 80 , - 2937 , - 1270 , - 71 , - 4332 , - 4069 , - 4274 , - 4947 , - 1096 , - 2705 , - 4782 , - 2335 , - 356 , - 3837 , - 2794 , - 2219 , - 2112 , - 2473 , - 3302 , - 4599 , - 1372 , - 3605 , - 1314 , - 4483 , - 3128 , - 2241 , - 1822 , - 1871 , - 2388 , - 3373 , - 4826 , - 1755 , - 4144 , - 2009 , - 342 , - 4135 , - 3404 , - 3141 , - 3346 , - 4019 , - 168 , - 1777 , - 3854 , - 1407 , - 4420 , - 2909 , - 1866 , - 1291 , - 1184 , - 1545 , - 2374 , - 3671 , - 444 , - 2677 , - 386 , - 3555 , - 2200 , - 1313 , - 894 , - 943 , - 1460 , - 2445 , - 3898 , - 827 , - 3216 , - 1081 , - 4406 , - 3207 , - 2476 , - 2213 , - 2418 , - 3091 , - 4232 , - 849 , - 2926 , - 479 , - 3492 , - 1981 , - 938 , - 363 , - 256 , - 617 , - 1446 , - 2743 , - 4508 , - 1749 , - 4450 , - 2627 , - 1272 , - 385 , - 4958 , - 15 , - 532 , - 1517 , - 2970 , - 4891 , - 2288 , - 153 , - 3478 , - 2279 , - 1548 , - 1285 , - 1490 , - 2163 , - 3304 , - 4913 , - 1998 , - 4543 , - 2564 , - 1053 , - 10 , - 4427 , - 4320 , - 4681 , - 518 , - 1815 , - 3580 , - 821 , - 3522 , - 1699 , - 344 , - 4449 , - 4030 , - 4079 , - 4596 , - 589 , - 2042 , - 3963 , - 1360 , - 4217 , - 2550 , - 1351 , - 620 , - 357 , - 562 , - 1235 , - 2376 , - 3985 , - 1070 , - 3615 , - 1636 , - 125 , - 4074 , - 3499 , - 3392 , - 3753 , - 4582 , - 887 , - 2652 , - 4885 , - 2594 , - 771 , - 4408 , - 3521 , - 3102 , - 3151 , - 3668 , - 4653 , - 1114 , - 3035 , - 432 , - 3289 , - 1622 , - 423 , - 4684 , - 4421 , - 4626 , - 307 , - 1448 , - 3057 , - 142 , - 2687 , - 708 , - 4189 , - 3146 , - 2571 , - 2464 , - 2825 , - 3654 , - 4951 , - 1724 , - 3957 , - 1666 , - 4835 , - 3480 , - 2593 , - 2174 , - 2223 , - 2740 , - 3725 , - 186 , - 2107 , - 4496 , - 2361 , - 694 , - 4487 , - 3756 , - 3493 , - 3698 , - 4371 , - 520 , - 2129 , - 4206 , - 1759 , - 4772 , - 3261 , - 2218 , - 1643 , - 1536 , - 1897 , - 2726 , - 4023 , - 796 , - 3029 , - 738 , - 3907 , - 2552 , - 1665 , - 1246 , - 1295 , - 1812 , - 2797 , - 4250 , - 1179 , - 3568 , - 1433 , - 4758 , - 3559 , - 2828 , - 2565 , - 2770 , - 3443 , - 4584 , - 1201 , - 3278 , - 831 , - 3844 , - 2333 , - 1290 , - 715 , - 608 , - 969 , - 1798 , - 3095 , - 4860 , - 2101 , - 4802 , - 2979 , - 1624 , - 737 , - 318 , - 367 , - 884 , - 1869 , - 3322 , - 251 , - 2640 , - 505 , - 3830 , - 2631 , - 1900 , - 1637 , - 1842 , - 2515 , - 3656 , - 273 , - 2350 , - 4895 , - 2916 , - 1405 , - 362 , - 4779 , - 4672 , - 41 , - 870 , - 2167 , - 3932 , - 1173 , - 3874 , - 2051 , - 696 , - 4801 , - 4382 , - 4431 , - 4948 , - 941 , - 2394 , - 4315 , - 1712 , - 4569 , - 2902 , - 1703 , - 972 , - 709 , - 914 , - 1587 , - 2728 , - 4337 , - 1422 , - 3967 , - 1988 , - 477 , - 4426 , - 3851 , - 3744 , - 4105 , - 4934 , - 1239 , - 3004 , - 245 , - 2946 , - 1123 , - 4760 , - 3873 , - 3454 , - 3503 , - 4020 , - 13 , - 1466 , - 3387 , - 784 , - 3641 , - 1974 , - 775 , - 44 , - 4773 , - 4978 , - 659 , - 1800 , - 3409 , - 494 , - 3039 , - 1060 , - 4541 , - 3498 , - 2923 , - 2816 , - 3177 , - 4006 , - 311 , - 2076 , - 4309 , - 2018 , - 195 , - 3832 , - 2945 , - 2526 , - 2575 , - 3092 , - 4077 , - 538 , - 2459 , - 4848 , - 2713 , - 1046 , - 4839 , - 4108 , - 3845 , - 4050 , - 4723 , - 872 , - 2481 , - 4558 , - 2111 , - 132 , - 3613 , - 2570 , - 1995 , - 1888 , - 2249 , - 3078 , - 4375 , - 1148 , - 3381 , - 1090 , - 4259 , - 2904 , - 2017 , - 1598 , - 1647 , - 2164 , - 3149 , - 4602 , - 1531 , - 3920 , - 1785 , - 118 , - 3911 , - 3180 , - 2917 , - 3122 , - 3795 , - 4936 , - 1553 , - 3630 , - 1183 , - 4196 , - 2685 , - 1642 , - 1067 , - 960 , - 1321 , - 2150 , - 3447 , - 220 , - 2453 , - 162 , - 3331 , - 1976 , - 1089 , - 670 , - 719 , - 1236 , - 2221 , - 3674 , - 603 , - 2992 , - 857 , - 4182 , - 2983 , - 2252 , - 1989 , - 2194 , - 2867 , - 4008 , - 625 , - 2702 , - 255 , - 3268 , - 1757 , - 714 , - 139 , - 32 , - 393 , - 1222 , - 2519 , - 4284 , - 1525 , - 4226 , - 2403 , - 1048 , - 161 , - 4734 , - 4783 , - 308 , - 1293 , - 2746 , - 4667 , - 2064 , - 4921 , - 3254 , - 2055 , - 1324 , - 1061 , - 1266 , - 1939 , - 3080 , - 4689 , - 1774 , - 4319 , - 2340 , - 829 , - 4778 , - 4203 , - 4096 , - 4457 , - 294 , - 1591 , - 3356 , - 597 , - 3298 , - 1475 , - 120 , - 4225 , - 3806 , - 3855 , - 4372 , - 365 , - 1818 , - 3739 , - 1136 , - 3993 , - 2326 , - 1127 , - 396 , - 133 , - 338 , - 1011 , - 2152 , - 3761 , - 846 , - 3391 , - 1412 , - 4893 , - 3850 , - 3275 , - 3168 , - 3529 , - 4358 , - 663 , - 2428 , - 4661 , - 2370 , - 547 , - 4184 , - 3297 , - 2878 , - 2927 , - 3444 , - 4429 , - 890 , - 2811 , - 208 , - 3065 , - 1398 , - 199 , - 4460 , - 4197 , - 4402 , - 83 , - 1224 , - 2833 , - 4910 , - 2463 , - 484 , - 3965 , - 2922 , - 2347 , - 2240 , - 2601 , - 3430 , - 4727 , - 1500 , - 3733 , - 1442 , - 4611 , - 3256 , - 2369 , - 1950 , - 1999 , - 2516 , - 3501 , - 4954 , - 1883 , - 4272 , - 2137 , - 470 , - 4263 , - 3532 , - 3269 , - 3474 , - 4147 , - 296 , - 1905 , - 3982 , - 1535 , - 4548 , - 3037 , - 1994 , - 1419 , - 1312 , - 1673 , - 2502 , - 3799 , - 572 , - 2805 , - 514 , - 3683 , - 2328 , - 1441 , - 1022 , - 1071 , - 1588 , - 2573 , - 4026 , - 955 , - 3344 , - 1209 , - 4534 , - 3335 , - 2604 , - 2341 , - 2546 , - 3219 , - 4360 , - 977 , - 3054 , - 607 , - 3620 , - 2109 , - 1066 , - 491 , - 384 , - 745 , - 1574 , - 2871 , - 4636 , - 1877 , - 4578 , - 2755 , - 1400 , - 513 , - 94 , - 143 , - 660 , - 1645 , - 3098 , - 27 , - 2416 , - 281 , - 3606 , - 2407 , - 1676 , - 1413 , - 1618 , - 2291 , - 3432 , - 49 , - 2126 , - 4671 , - 2692 , - 1181 , - 138 , - 4555 , - 4448 , - 4809 , - 646 , - 1943 , - 3708 , - 949 , - 3650 , - 1827 , - 472 , - 4577 , - 4158 , - 4207 , - 4724 , - 717 , - 2170 , - 4091 , - 1488 , - 4345 , - 2678 , - 1479 , - 748 , - 485 , - 690 , - 1363 , - 2504 , - 4113 , - 1198 , - 3743 , - 1764 , - 253 , - 4202 , - 3627 , - 3520 , - 3881 , - 4710 , - 1015 , - 2780 , - 21 , - 2722 , - 899 , - 4536 , - 3649 , - 3230 , - 3279 , - 3796 , - 4781 , - 1242 , - 3163 , - 560 , - 3417 , - 1750 , - 551 , - 4812 , - 4549 , - 4754 , - 435 , - 1576 , - 3185 , - 270 , - 2815 , - 836 , - 4317 , - 3274 , - 2699 , - 2592 , - 2953 , - 3782 , - 87 , - 1852 , - 4085 , - 1794 , - 4963 , - 3608 , - 2721 , - 2302 , - 2351 , - 2868 , - 3853 , - 314 , - 2235 , - 4624 , - 2489 , - 822 , - 4615 , - 3884 , - 3621 , - 3826 , - 4499 , - 648 , - 2257 , - 4334 , - 1887 , - 4900 , - 3389 , - 2346 , - 1771 , - 1664 , - 2025 , - 2854 , - 4151 , - 924 , - 3157 , - 866 , - 4035 , - 2680 , - 1793 , - 1374 , - 1423 , - 1940 , - 2925 , - 4378 , - 1307 , - 3696 , - 1561 , - 4886 , - 3687 , - 2956 , - 2693 , - 2898 , - 3571 , - 4712 , - 1329 , - 3406 , - 959 , - 3972 , - 2461 , - 1418 , - 843 , - 736 , - 1097 , - 1926 , - 3223 , - 4988 , - 2229 , - 4930 , - 3107 , - 1752 , - 865 , - 446 , - 495 , - 1012 , - 1997 , - 3450 , - 379 , - 2768 , - 633 , - 3958 , - 2759 , - 2028 , - 1765 , - 1970 , - 2643 , - 3784 , - 401 , - 2478 , - 31 , - 3044 , - 1533 , - 490 , - 4907 , - 4800 , - 169 , - 998 , - 2295 , - 4060 , - 1301 , - 4002 , - 2179 , - 824 , - 4929 , - 4510 , - 4559 , - 84 , - 1069 , - 2522 , - 4443 , - 1840 , - 4697 , - 3030 , - 1831 , - 1100 , - 837 , - 1042 , - 1715 , - 2856 , - 4465 , - 1550 , - 4095 , - 2116 , - 605 , - 4554 , - 3979 , - 3872 , - 4233 , - 70 , - 1367 , - 3132 , - 373 , - 3074 , - 1251 , - 4888 , - 4001 , - 3582 , - 3631 , - 4148 , - 141 , - 1594 , - 3515 , - 912 , - 3769 , - 2102 , - 903 , - 172 , - 4901 , - 114 , - 787 , - 1928 , - 3537 , - 622 , - 3167 , - 1188 , - 4669 , - 3626 , - 3051 , - 2944 , - 3305 , - 4134 , - 439 , - 2204 , - 4437 , - 2146 , - 323 , - 3960 , - 3073 , - 2654 , - 2703 , - 3220 , - 4205 , - 666 , - 2587 , - 4976 , - 2841 , - 1174 , - 4967 , - 4236 , - 3973 , - 4178 , - 4851 , - 1000 , - 2609 , - 4686 , - 2239 , - 260 , - 3741 , - 2698 , - 2123 , - 2016 , - 2377 , - 3206 , - 4503 , - 1276 , - 3509 , - 1218 , - 4387 , - 3032 , - 2145 , - 1726 , - 1775 , - 2292 , - 3277 , - 4730 , - 1659 , - 4048 , - 1913 , - 246 , - 4039 , - 3308 , - 3045 , - 3250 , - 3923 , - 72 , - 1681 , - 3758 , - 1311 , - 4324 , - 2813 , - 1770 , - 1195 , - 1088 , - 1449 , - 2278 , - 3575 , - 348 , - 2581 , - 290 , - 3459 , - 2104 , - 1217 , - 798 , - 847 , - 1364 , - 2349 , - 3802 , - 731 , - 3120 , - 985 , - 4310 , - 3111 , - 2380 , - 2117 , - 2322 , - 2995 , - 4136 , - 753 , - 2830 , - 383 , - 3396 , - 1885 , - 842 , - 267 , - 160 , - 521 , - 1350 , - 2647 , - 4412 , - 1653 , - 4354 , - 2531 , - 1176 , - 289 , - 4862 , - 4911 , - 436 , - 1421 , - 2874 , - 4795 , - 2192 , - 57 , - 3382 , - 2183 , - 1452 , - 1189 , - 1394 , - 2067 , - 3208 , - 4817 , - 1902 , - 4447 , - 2468 , - 957 , - 4906 , - 4331 , - 4224 , - 4585 , - 422 , - 1719 , - 3484 , - 725 , - 3426 , - 1603 , - 248 , - 4353 , - 3934 , - 3983 , - 4500 , - 493 , - 1946 , - 3867 , - 1264 , - 4121 , - 2454 , - 1255 , - 524 , - 261 , - 466 , - 1139 , - 2280 , - 3889 , - 974 , - 3519 , - 1540 , - 29 , - 3978 , - 3403 , - 3296 , - 3657 , - 4486 , - 791 , - 2556 , - 4789 , - 2498 , - 675 , - 4312 , - 3425 , - 3006 , - 3055 , - 3572 , - 4557 , - 1018 , - 2939 , - 336 , - 3193 , - 1526 , - 327 , - 4588 , - 4325 , - 4530 , - 211 , - 1352 , - 2961 , - 46 , - 2591 , - 612 , - 4093 , - 3050 , - 2475 , - 2368 , - 2729 , - 3558 , - 4855 , - 1628 , - 3861 , - 1570 , - 4739 , - 3384 , - 2497 , - 2078 , - 2127 , - 2644 , - 3629 , - 90 , - 2011 , - 4400 , - 2265 , - 598 , - 4391 , - 3660 , - 3397 , - 3602 , - 4275 , - 424 , - 2033 , - 4110 , - 1663 , - 4676 , - 3165 , - 2122 , - 1547 , - 1440 , - 1801 , - 2630 , - 3927 , - 700 , - 2933 , - 642 , - 3811 , - 2456 , - 1569 , - 1150 , - 1199 , - 1716 , - 2701 , - 4154 , - 1083 , - 3472 , - 1337 , - 4662 , - 3463 , - 2732 , - 2469 , - 2674 , - 3347 , - 4488 , - 1105 , - 3182 , - 735 , - 3748 , - 2237 , - 1194 , - 619 , - 512 , - 873 , - 1702 , - 2999 , - 4764 , - 2005 , - 4706 , - 2883 , - 1528 , - 641 , - 222 , - 271 , - 788 , - 1773 , - 3226 , - 155 , - 2544 , - 409 , - 3734 , - 2535 , - 1804 , - 1541 , - 1746 , - 2419 , - 3560 , - 177 , - 2254 , - 4799 , - 2820 , - 1309 , - 266 , - 4683 , - 4576 , - 4937 , - 774 , - 2071 , - 3836 , - 1077 , - 3778 , - 1955 , - 600 , - 4705 , - 4286 , - 4335 , - 4852 , - 845 , - 2298 , - 4219 , - 1616 , - 4473 , - 2806 , - 1607 , - 876 , - 613 , - 818 , - 1491 , - 2632 , - 4241 , - 1326 , - 3871 , - 1892 , - 381 , - 4330 , - 3755 , - 3648 , - 4009 , - 4838 , - 1143 , - 2908 , - 149 , - 2850 , - 1027 , - 4664 , - 3777 , - 3358 , - 3407 , - 3924 , - 4909 , - 1370 , - 3291 , - 688 , - 3545 , - 1878 , - 679 , - 4940 , - 4677 , - 4882 , - 563 , - 1704 , - 3313 , - 398 , - 2943 , - 964 , - 4445 , - 3402 , - 2827 , - 2720 , - 3081 , - 3910 , - 215 , - 1980 , - 4213 , - 1922 , - 99 , - 3736 , - 2849 , - 2430 , - 2479 , - 2996 , - 3981 , - 442 , - 2363 , - 4752 , - 2617 , - 950 , - 4743 , - 4012 , - 3749 , - 3954 , - 4627 , - 776 , - 2385 , - 4462 , - 2015 , - 36 , - 3517 , - 2474 , - 1899 , - 1792 , - 2153 , - 2982 , - 4279 , - 1052 , - 3285 , - 994 , - 4163 , - 2808 , - 1921 , - 1502 , - 1551 , - 2068 , - 3053 , - 4506 , - 1435 , - 3824 , - 1689 , - 22 , - 3815 , - 3084 , - 2821 , - 3026 , - 3699 , - 4840 , - 1457 , - 3534 , - 1087 , - 4100 , - 2589 , - 1546 , - 971 , - 864 , - 1225 , - 2054 , - 3351 , - 124 , - 2357 , - 66 , - 3235 , - 1880 , - 993 , - 574 , - 623 , - 1140 , - 2125 , - 3578 , - 507 , - 2896 , - 761 , - 4086 , - 2887 , - 2156 , - 1893 , - 2098 , - 2771 , - 3912 , - 529 , - 2606 , - 159 , - 3172 , - 1661 , - 618 , - 43 , - 4928 , - 297 , - 1126 , - 2423 , - 4188 , - 1429 , - 4130 , - 2307 , - 952 , - 65 , - 4638 , - 4687 , - 212 , - 1197 , - 2650 , - 4571 , - 1968 , - 4825 , - 3158 , - 1959 , - 1228 , - 965 , - 1170 , - 1843 , - 2984 , - 4593 , - 1678 , - 4223 , - 2244 , - 733 , - 4682 , - 4107 , - 4000 , - 4361 , - 198 , - 1495 , - 3260 , - 501 , - 3202 , - 1379 , - 24 , - 4129 , - 3710 , - 3759 , - 4276 , - 269 , - 1722 , - 3643 , - 1040 , - 3897 , - 2230 , - 1031 , - 300 , - 37 , - 242 , - 915 , - 2056 , - 3665 , - 750 , - 3295 , - 1316 , - 4797 , - 3754 , - 3179 , - 3072 , - 3433 , - 4262 , - 567 , - 2332 , - 4565 , - 2274 , - 451 , - 4088 , - 3201 , - 2782 , - 2831 , - 3348 , - 4333 , - 794 , - 2715 , - 112 , - 2969 , - 1302 , - 103 , - 4364 , - 4101 , - 4306 , - 4979 , - 1128 , - 2737 , - 4814 , - 2367 , - 388 , - 3869 , - 2826 , - 2251 , - 2144 , - 2505 , - 3334 , - 4631 , - 1404 , - 3637 , - 1346 , - 4515 , - 3160 , - 2273 , - 1854 , - 1903 , - 2420 , - 3405 , - 4858 , - 1787 , - 4176 , - 2041 , - 374 , - 4167 , - 3436 , - 3173 , - 3378 , - 4051 , - 200 , - 1809 , - 3886 , - 1439 , - 4452 , - 2941 , - 1898 , - 1323 , - 1216 , - 1577 , - 2406 , - 3703 , - 476 , - 2709 , - 418 , - 3587 , - 2232 , - 1345 , - 926 , - 975 , - 1492 , - 2477 , - 3930 , - 859 , - 3248 , - 1113 , - 4438 , - 3239 , - 2508 , - 2245 , - 2450 , - 3123 , - 4264 , - 881 , - 2958 , - 511 , - 3524 , - 2013 , - 970 , - 395 , - 288 , - 649 , - 1478 , - 2775 , - 4540 , - 1781 , - 4482 , - 2659 , - 1304 , - 417 , - 4990 , - 47 , - 564 , - 1549 , - 3002 , - 4923 , - 2320 , - 185 , - 3510 , - 2311 , - 1580 , - 1317 , - 1522 , - 2195 , - 3336 , - 4945 , - 2030 , - 4575 , - 2596 , - 1085 , - 42 , - 4459 , - 4352 , - 4713 , - 550 , - 1847 , - 3612 , - 853 , - 3554 , - 1731 , - 376 , - 4481 , - 4062 , - 4111 , - 4628 , - 621 , - 2074 , - 3995 , - 1392 , - 4249 , - 2582 , - 1383 , - 652 , - 389 , - 594 , - 1267 , - 2408 , - 4017 , - 1102 , - 3647 , - 1668 , - 157 , - 4106 , - 3531 , - 3424 , - 3785 , - 4614 , - 919 , - 2684 , - 4917 , - 2626 , - 803 , - 4440 , - 3553 , - 3134 , - 3183 , - 3700 , - 4685 , - 1146 , - 3067 , - 464 , - 3321 , - 1654 , - 455 , - 4716 , - 4453 , - 4658 , - 339 , - 1480 , - 3089 , - 174 , - 2719 , - 740 , - 4221 , - 3178 , - 2603 , - 2496 , - 2857 , - 3686 , - 4983 , - 1756 , - 3989 , - 1698 , - 4867 , - 3512 , - 2625 , - 2206 , - 2255 , - 2772 , - 3757 , - 218 , - 2139 , - 4528 , - 2393 , - 726 , - 4519 , - 3788 , - 3525 , - 3730 , - 4403 , - 552 , - 2161 , - 4238 , - 1791 , - 4804 , - 3293 , - 2250 , - 1675 , - 1568 , - 1929 , - 2758 , - 4055 , - 828 , - 3061 , - 770 , - 3939 , - 2584 , - 1697 , - 1278 , - 1327 , - 1844 , - 2829 , - 4282 , - 1211 , - 3600 , - 1465 , - 4790 , - 3591 , - 2860 , - 2597 , - 2802 , - 3475 , - 4616 , - 1233 , - 3310 , - 863 , - 3876 , - 2365 , - 1322 , - 747 , - 640 , - 1001 , - 1830 , - 3127 , - 4892 , - 2133 , - 4834 , - 3011 , - 1656 , - 769 , - 350 , - 399 , - 916 , - 1901 , - 3354 , - 283 , - 2672 , - 537 , - 3862 , - 2663 , - 1932 , - 1669 , - 1874 , - 2547 , - 3688 , - 305 , - 2382 , - 4927 , - 2948 , - 1437 , - 394 , - 4811 , - 4704 , - 73 , - 902 , - 2199 , - 3964 , - 1205 , - 3906 , - 2083 , - 728 , - 4833 , - 4414 , - 4463 , - 4980 , - 973 , - 2426 , - 4347 , - 1744 , - 4601 , - 2934 , - 1735 , - 1004 , - 741 , - 946 , - 1619 , - 2760 , - 4369 , - 1454 , - 3999 , - 2020 , - 509 , - 4458 , - 3883 , - 3776 , - 4137 , - 4966 , - 1271 , - 3036 , - 277 , - 2978 , - 1155 , - 4792 , - 3905 , - 3486 , - 3535 , - 4052 , - 45 , - 1498 , - 3419 , - 816 , - 3673 , - 2006 , - 807 , - 76 , - 4805 , - 18 , - 691 , - 1832 , - 3441 , - 526 , - 3071 , - 1092 , - 4573 , - 3530 , - 2955 , - 2848 , - 3209 , - 4038 , - 343 , - 2108 , - 4341 , - 2050 , - 227 , - 3864 , - 2977 , - 2558 , - 2607 , - 3124 , - 4109 , - 570 , - 2491 , - 4880 , - 2745 , - 1078 , - 4871 , - 4140 , - 3877 , - 4082 , - 4755 , - 904 , - 2513 , - 4590 , - 2143 , - 164 , - 3645 , - 2602 , - 2027 , - 1920 , - 2281 , - 3110 , - 4407 , - 1180 , - 3413 , - 1122 , - 4291 , - 2936 , - 2049 , - 1630 , - 1679 , - 2196 , - 3181 , - 4634 , - 1563 , - 3952 , - 1817 , - 150 , - 3943 , - 3212 , - 2949 , - 3154 , - 3827 , - 4968 , - 1585 , - 3662 , - 1215 , - 4228 , - 2717 , - 1674 , - 1099 , - 992 , - 1353 , - 2182 , - 3479 , - 252 , - 2485 , - 194 , - 3363 , - 2008 , - 1121 , - 702 , - 751 , - 1268 , - 2253 , - 3706 , - 635 , - 3024 , - 889 , - 4214 , - 3015 , - 2284 , - 2021 , - 2226 , - 2899 , - 4040 , - 657 , - 2734 , - 287 , - 3300 , - 1789 , - 746 , - 171 , - 64 , - 425 , - 1254 , - 2551 , - 4316 , - 1557 , - 4258 , - 2435 , - 1080 , - 193 , - 4766 , - 4815 , - 340 , - 1325 , - 2778 , - 4699 , - 2096 , - 4953 , - 3286 , - 2087 , - 1356 , - 1093 , - 1298 , - 1971 , - 3112 , - 4721 , - 1806 , - 4351 , - 2372 , - 861 , - 4810 , - 4235 , - 4128 , - 4489 , - 326 , - 1623 , - 3388 , - 629 , - 3330 , - 1507 , - 152 , - 4257 , - 3838 , - 3887 , - 4404 , - 397 , - 1850 , - 3771 , - 1168 , - 4025 , - 2358 , - 1159 , - 428 , - 165 , - 370 , - 1043 , - 2184 , - 3793 , - 878 , - 3423 , - 1444 , - 4925 , - 3882 , - 3307 , - 3200 , - 3561 , - 4390 , - 695 , - 2460 , - 4693 , - 2402 , - 579 , - 4216 , - 3329 , - 2910 , - 2959 , - 3476 , - 4461 , - 922 , - 2843 , - 240 , - 3097 , - 1430 , - 231 , - 4492 , - 4229 , - 4434 , - 115 , - 1256 , - 2865 , - 4942 , - 2495 , - 516 , - 3997 , - 2954 , - 2379 , - 2272 , - 2633 , - 3462 , - 4759 , - 1532 , - 3765 , - 1474 , - 4643 , - 3288 , - 2401 , - 1982 , - 2031 , - 2548 , - 3533 , - 4986 , - 1915 , - 4304 , - 2169 , - 502 , - 4295 , - 3564 , - 3301 , - 3506 , - 4179 , - 328 , - 1937 , - 4014 , - 1567 , - 4580 , - 3069 , - 2026 , - 1451 , - 1344 , - 1705 , - 2534 , - 3831 , - 604 , - 2837 , - 546 , - 3715 , - 2360 , - 1473 , - 1054 , - 1103 , - 1620 , - 2605 , - 4058 , - 987 , - 3376 , - 1241 , - 4566 , - 3367 , - 2636 , - 2373 , - 2578 , - 3251 , - 4392 , - 1009 , - 3086 , - 639 , - 3652 , - 2141 , - 1098 , - 523 , - 416 , - 777 , - 1606 , - 2903 , - 4668 , - 1909 , - 4610 , - 2787 , - 1432 , - 545 , - 126 , - 175 , - 692 , - 1677 , - 3130 , - 59 , - 2448 , - 313 , - 3638 , - 2439 , - 1708 , - 1445 , - 1650 , - 2323 , - 3464 , - 81 , - 2158 , - 4703 , - 2724 , - 1213 , - 170 , - 4587 , - 4480 , - 4841 , - 678 , - 1975 , - 3740 , - 981 , - 3682 , - 1859 , - 504 , - 4609 , - 4190 , - 4239 , - 4756 , - 749 , - 2202 , - 4123 , - 1520 , - 4377 , - 2710 , - 1511 , - 780 , - 517 , - 722 , - 1395 , - 2536 , - 4145 , - 1230 , - 3775 , - 1796 , - 285 , - 4234 , - 3659 , - 3552 , - 3913 , - 4742 , - 1047 , - 2812 , - 53 , - 2754 , - 931 , - 4568 , - 3681 , - 3262 , - 3311 , - 3828 , - 4813 , - 1274 , - 3195 , - 592 , - 3449 , - 1782 , - 583 , - 4844 , - 4581 , - 4786 , - 467 , - 1608 , - 3217 , - 302 , - 2847 , - 868 , - 4349 , - 3306 , - 2731 , - 2624 , - 2985 , - 3814 , - 119 , - 1884 , - 4117 , - 1826 , - 3 , - 3640 , - 2753 , - 2334 , - 2383 , - 2900 , - 3885 , - 346 , - 2267 , - 4656 , - 2521 , - 854 , - 4647 , - 3916 , - 3653 , - 3858 , - 4531 , - 680 , - 2289 , - 4366 , - 1919 , - 4932 , - 3421 , - 2378 , - 1803 , - 1696 , - 2057 , - 2886 , - 4183 , - 956 , - 3189 , - 898 , - 4067 , - 2712 , - 1825 , - 1406 , - 1455 , - 1972 , - 2957 , - 4410 , - 1339 , - 3728 , - 1593 , - 4918 , - 3719 , - 2988 , - 2725 , - 2930 , - 3603 , - 4744 , - 1361 , - 3438 , - 991 , - 4004 , - 2493 , - 1450 , - 875 , - 768 , - 1129 , - 1958 , - 3255 , - 28 , - 2261 , - 4962 , - 3139 , - 1784 , - 897 , - 478 , - 527 , - 1044 , - 2029 , - 3482 , - 411 , - 2800 , - 665 , - 3990 , - 2791 , - 2060 , - 1797 , - 2002 , - 2675 , - 3816 , - 433 , - 2510 , - 63 , - 3076 , - 1565 , - 522 , - 4939 , - 4832 , - 201 , - 1030 , - 2327 , - 4092 , - 1333 , - 4034 , - 2211 , - 856 , - 4961 , - 4542 , - 4591 , - 116 , - 1101 , - 2554 , - 4475 , - 1872 , - 4729 , - 3062 , - 1863 , - 1132 , - 869 , - 1074 , - 1747 , - 2888 , - 4497 , - 1582 , - 4127 , - 2148 , - 637 , - 4586 , - 4011 , - 3904 , - 4265 , - 102 , - 1399 , - 3164 , - 405 , - 3106 , - 1283 , - 4920 , - 4033 , - 3614 , - 3663 , - 4180 , - 173 , - 1626 , - 3547 , - 944 , - 3801 , - 2134 , - 935 , - 204 , - 4933 , - 146 , - 819 , - 1960 , - 3569 , - 654 , - 3199 , - 1220 , - 4701 , - 3658 , - 3083 , - 2976 , - 3337 , - 4166 , - 471 , - 2236 , - 4469 , - 2178 , - 355 , - 3992 , - 3105 , - 2686 , - 2735 , - 3252 , - 4237 , - 698 , - 2619 , - 16 , - 2873 , - 1206 , - 7 , - 4268 , - 4005 , - 4210 , - 4883 , - 1032 , - 2641 , - 4718 , - 2271 , - 292 , - 3773 , - 2730 , - 2155 , - 2048 , - 2409 , - 3238 , - 4535 , - 1308 , - 3541 , - 1250 , - 4419 , - 3064 , - 2177 , - 1758 , - 1807 , - 2324 , - 3309 , - 4762 , - 1691 , - 4080 , - 1945 , - 278 , - 4071 , - 3340 , - 3077 , - 3282 , - 3955 , - 104 , - 1713 , - 3790 , - 1343 , - 4356 , - 2845 , - 1802 , - 1227 , - 1120 , - 1481 , - 2310 , - 3607 , - 380 , - 2613 , - 322 , - 3491 , - 2136 , - 1249 , - 830 , - 879 , - 1396 , - 2381 , - 3834 , - 763 , - 3152 , - 1017 , - 4342 , - 3143 , - 2412 , - 2149 , - 2354 , - 3027 , - 4168 , - 785 , - 2862 , - 415 , - 3428 , - 1917 , - 874 , - 299 , - 192 , - 553 , - 1382 , - 2679 , - 4444 , - 1685 , - 4386 , - 2563 , - 1208 , - 321 , - 4894 , - 4943 , - 468 , - 1453 , - 2906 , - 4827 , - 2224 , - 89 , - 3414 , - 2215 , - 1484 , - 1221 , - 1426 , - 2099 , - 3240 , - 4849 , - 1934 , - 4479 , - 2500 , - 989 , - 4938 , - 4363 , - 4256 , - 4617 , - 454 , - 1751 , - 3516 , - 757 , - 3458 , - 1635 , - 280 , - 4385 , - 3966 , - 4015 , - 4532 , - 525 , - 1978 , - 3899 , - 1296 , - 4153 , - 2486 , - 1287 , - 556 , - 293 , - 498 , - 1171 , - 2312 , - 3921 , - 1006 , - 3551 , - 1572 , - 61 , - 4010 , - 3435 , - 3328 , - 3689 , - 4518 , - 823 , - 2588 , - 4821 , - 2530 , - 707 , - 4344 , - 3457 , - 3038 , - 3087 , - 3604 , - 4589 , - 1050 , - 2971 , - 368 , - 3225 , - 1558 , - 359 , - 4620 , - 4357 , - 4562 , - 243 , - 1384 , - 2993 , - 78 , - 2623 , - 644 , - 4125 , - 3082 , - 2507 , - 2400 , - 2761 , - 3590 , - 4887 , - 1660 , - 3893 , - 1602 , - 4771 , - 3416 , - 2529 , - 2110 , - 2159 , - 2676 , - 3661 , - 122 , - 2043 , - 4432 , - 2297 , - 630 , - 4423 , - 3692 , - 3429 , - 3634 , - 4307 , - 456 , - 2065 , - 4142 , - 1695 , - 4708 , - 3197 , - 2154 , - 1579 , - 1472 , - 1833 , - 2662 , - 3959 , - 732 , - 2965 , - 674 , - 3843 , - 2488 , - 1601 , - 1182 , - 1231 , - 1748 , - 2733 , - 4186 , - 1115 , - 3504 , - 1369 , - 4694 , - 3495 , - 2764 , - 2501 , - 2706 , - 3379 , - 4520 , - 1137 , - 3214 , - 767 , - 3780 , - 2269 , - 1226 , - 651 , - 544 , - 905 , - 1734 , - 3031 , - 4796 , - 2037 , - 4738 , - 2915 , - 1560 , - 673 , - 254 , - 303 , - 820 , - 1805 , - 3258 , - 187 , - 2576 , - 441 , - 3766 , - 2567 , - 1836 , - 1573 , - 1778 , - 2451 , - 3592 , - 209 , - 2286 , - 4831 , - 2852 , - 1341 , - 298 , - 4715 , - 4608 , - 4969 , - 806 , - 2103 , - 3868 , - 1109 , - 3810 , - 1987 , - 632 , - 4737 , - 4318 , - 4367 , - 4884 , - 877 , - 2330 , - 4251 , - 1648 , - 4505 , - 2838 , - 1639 , - 908 , - 645 , - 850 , - 1523 , - 2664 , - 4273 , - 1358 , - 3903 , - 1924 , - 413 , - 4362 , - 3787 , - 3680 , - 4041 , - 4870 , - 1175 , - 2940 , - 181 , - 2882 , - 1059 , - 4696 , - 3809 , - 3390 , - 3439 , - 3956 , - 4941 , - 1402 , - 3323 , - 720 , - 3577 , - 1910 , - 711 , - 4972 , - 4709 , - 4914 , - 595 , - 1736 , - 3345 , - 430 , - 2975 , - 996 , - 4477 , - 3434 , - 2859 , - 2752 , - 3113 , - 3942 , - 247 , - 2012 , - 4245 , - 1954 , - 131 , - 3768 , - 2881 , - 2462 , - 2511 , - 3028 , - 4013 , - 474 , - 2395 , - 4784 , - 2649 , - 982 , - 4775 , - 4044 , - 3781 , - 3986 , - 4659 , - 808 , - 2417 , - 4494 , - 2047 , - 68 , - 3549 , - 2506 , - 1931 , - 1824 , - 2185 , - 3014 , - 4311 , - 1084 , - 3317 , - 1026 , - 4195 , - 2840 , - 1953 , - 1534 , - 1583 , - 2100 , - 3085 , - 4538 , - 1467 , - 3856 , - 1721 , - 54 , - 3847 , - 3116 , - 2853 , - 3058 , - 3731 , - 4872 , - 1489 , - 3566 , - 1119 , - 4132 , - 2621 , - 1578 , - 1003 , - 896 , - 1257 , - 2086 , - 3383 , - 156 , - 2389 , - 98 , - 3267 , - 1912 , - 1025 , - 606 , - 655 , - 1172 , - 2157 , - 3610 , - 539 , - 2928 , - 793 , - 4118 , - 2919 , - 2188 , - 1925 , - 2130 , - 2803 , - 3944 , - 561 , - 2638 , - 191 , - 3204 , - 1693 , - 650 , - 75 , - 4960 , - 329 , - 1158 , - 2455 , - 4220 , - 1461 , - 4162 , - 2339 , - 984 , - 97 , - 4670 , - 4719 , - 244 , - 1229 , - 2682 , - 4603 , - 2000 , - 4857 , - 3190 , - 1991 , - 1260 , - 997 , - 1202 , - 1875 , - 3016 , - 4625 , - 1710 , - 4255 , - 2276 , - 765 , - 4714 , - 4139 , - 4032 , - 4393 , - 230 , - 1527 , - 3292 , - 533 , - 3234 , - 1411 , - 56 , - 4161 , - 3742 , - 3791 , - 4308 , - 301 , - 1754 , - 3675 , - 1072 , - 3929 , - 2262 , - 1063 , - 332 , - 69 , - 274 , - 947 , - 2088 , - 3697 , - 782 , - 3327 , - 1348 , - 4829 , - 3786 , - 3211 , - 3104 , - 3465 , - 4294 , - 599 , - 2364 , - 4597 , - 2306 , - 483 , - 4120 , - 3233 , - 2814 , - 2863 , - 3380 , - 4365 , - 826 , - 2747 , - 144 , - 3001 , - 1334 , - 135 , - 4396 , - 4133 , - 4338 , - 19 , - 1160 , - 2769 , - 4846 , - 2399 , - 420 , - 3901 , - 2858 , - 2283 , - 2176 , - 2537 , - 3366 , - 4663 , - 1436 , - 3669 , - 1378 , - 4547 , - 3192 , - 2305 , - 1886 , - 1935 , - 2452 , - 3437 , - 4890 , - 1819 , - 4208 , - 2073 , - 406 , - 4199 , - 3468 , - 3205 , - 3410 , - 4083 , - 232 , - 1841 , - 3918 , - 1471 , - 4484 , - 2973 , - 1930 , - 1355 , - 1248 , - 1609 , - 2438 , - 3735 , - 508 , - 2741 , - 450 , - 3619 , - 2264 , - 1377 , - 958 , - 1007 , - 1524 , - 2509 , - 3962 , - 891 , - 3280 , - 1145 , - 4470 , - 3271 , - 2540 , - 2277 , - 2482 , - 3155 , - 4296 , - 913 , - 2990 , - 543 , - 3556 , - 2045 , - 1002 , - 427 , - 320 , - 681 , - 1510 , - 2807 , - 4572 , - 1813 , - 4514 , - 2691 , - 1336 , - 449 , - 30 , - 79 , - 596 , - 1581 , - 3034 , - 4955 , - 2352 , - 217 , - 3542 , - 2343 , - 1612 , - 1349 , - 1554 , - 2227 , - 3368 , - 4977 , - 2062 , - 4607 , - 2628 , - 1117 , - 74 , - 4491 , - 4384 , - 4745 , - 582 , - 1879 , - 3644 , - 885 , - 3586 , - 1763 , - 408 , - 4513 , - 4094 , - 4143 , - 4660 , - 653 , - 2106 , - 4027 , - 1424 , - 4281 , - 2614 , - 1415 , - 684 , - 421 , - 626 , - 1299 , - 2440 , - 4049 , - 1134 , - 3679 , - 1700 , - 189 , - 4138 , - 3563 , - 3456 , - 3817 , - 4646 , - 951 , - 2716 , - 4949 , - 2658 , - 835 , - 4472 , - 3585 , - 3166 , - 3215 , - 3732 , - 4717 , - 1178 , - 3099 , - 496 , - 3353 , - 1686 , - 487 , - 4748 , - 4485 , - 4690 , - 371 , - 1512 , - 3121 , - 206 , - 2751 , - 772 , - 4253 , - 3210 , - 2635 , - 2528 , - 2889 , - 3718 , - 23 , - 1788 , - 4021 , - 1730 , - 4899 , - 3544 , - 2657 , - 2238 , - 2287 , - 2804 , - 3789 , - 250 , - 2171 , - 4560 , - 2425 , - 758 , - 4551 , - 3820 , - 3557 , - 3762 , - 4435 , - 584 , - 2193 , - 4270 , - 1823 , - 4836 , - 3325 , - 2282 , - 1707 , - 1600 , - 1961 , - 2790 , - 4087 , - 860 , - 3093 , - 802 , - 3971 , - 2616 , - 1729 , - 1310 , - 1359 , - 1876 , - 2861 , - 4314 , - 1243 , - 3632 , - 1497 , - 4822 , - 3623 , - 2892 , - 2629 , - 2834 , - 3507 , - 4648 , - 1265 , - 3342 , - 895 , - 3908 , - 2397 , - 1354 , - 779 , - 672 , - 1033 , - 1862 , - 3159 , - 4924 , - 2165 , - 4866 , - 3043 , - 1688 , - 801 , - 382 , - 431 , - 948 , - 1933 , - 3386 , - 315 , - 2704 , - 569 , - 3894 , - 2695 , - 1964 , - 1701 , - 1906 , - 2579 , - 3720 , - 337 , - 2414 , - 4959 , - 2980 , - 1469 , - 426 , - 4843 , - 4736 , - 105 , - 934 , - 2231 , - 3996 , - 1237 , - 3938 , - 2115 , - 760 , - 4865 , - 4446 , - 4495 , - 20 , - 1005 , - 2458 , - 4379 , - 1776 , - 4633 , - 2966 , - 1767 , - 1036 , - 773 , - 978 , - 1651 , - 2792 , - 4401 , - 1486 , - 4031 , - 2052 , - 541 , - 4490 , - 3915 , - 3808 , - 4169 , - 6 , - 1303 , - 3068 , - 309 , - 3010 , - 1187 , - 4824 , - 3937 , - 3518 , - 3567 , - 4084 , - 77 , - 1530 , - 3451 , - 848 , - 3705 , - 2038 , - 839 , - 108 , - 4837 , - 50 , - 723 , - 1864 , - 3473 , - 558 , - 3103 , - 1124 , - 4605 , - 3562 , - 2987 , - 2880 , - 3241 , - 4070 , - 375 , - 2140 , - 4373 , - 2082 , - 259 , - 3896 , - 3009 , - 2590 , - 2639 , - 3156 , - 4141 , - 602 , - 2523 , - 4912 , - 2777 , - 1110 , - 4903 , - 4172 , - 3909 , - 4114 , - 4787 , - 936 , - 2545 , - 4622 , - 2175 , - 196 , - 3677 , - 2634 , - 2059 , - 1952 , - 2313 , - 3142 , - 4439 , - 1212 , - 3445 , - 1154 , - 4323 , - 2968 , - 2081 , - 1662 , - 1711 , - 2228 , - 3213 , - 4666 , - 1595 , - 3984 , - 1849 , - 182 , - 3975 , - 3244 , - 2981 , - 3186 , - 3859 , - 8 , - 1617 , - 3694 , - 1247 , - 4260 , - 2749 , - 1706 , - 1131 , - 1024 , - 1385 , - 2214 , - 3511 , - 284 , - 2517 , - 226 , - 3395 , - 2040 , - 1153 , - 734 , - 783 , - 1300 , - 2285 , - 3738 , - 667 , - 3056 , - 921 , - 4246 , - 3047 , - 2316 , - 2053 , - 2258 , - 2931 , - 4072 , - 689 , - 2766 , - 319 , - 3332 , - 1821 , - 778 , - 203 , - 96 , - 457 , - 1286 , - 2583 , - 4348 , - 1589 , - 4290 , - 2467 , - 1112 , - 225 , - 4798 , - 4847 , - 372 , - 1357 , - 2810 , - 4731 , - 2128 , - 4985 , - 3318 , - 2119 , - 1388 , - 1125 , - 1330 , - 2003 , - 3144 , - 4753 , - 1838 , - 4383 , - 2404 , - 893 , - 4842 , - 4267 , - 4160 , - 4521 , - 358 , - 1655 , - 3420 , - 661 , - 3362 , - 1539 , - 184 , - 4289 , - 3870 , - 3919 , - 4436 , - 429 , - 1882 , - 3803 , - 1200 , - 4057 , - 2390 , - 1191 , - 460 , - 197 , - 402 , - 1075 , - 2216 , - 3825 , - 910 , - 3455 , - 1476 , - 4957 , - 3914 , - 3339 , - 3232 , - 3593 , - 4422 , - 727 , - 2492 , - 4725 , - 2434 , - 611 , - 4248 , - 3361 , - 2942 , - 2991 , - 3508 , - 4493 , - 954 , - 2875 , - 272 , - 3129 , - 1462 , - 263 , - 4524 , - 4261 , - 4466 , - 147 , - 1288 , - 2897 , - 4974 , - 2527 , - 548 , - 4029 , - 2986 , - 2411 , - 2304 , - 2665 , - 3494 , - 4791 , - 1564 , - 3797 , - 1506 , - 4675 , - 3320 , - 2433 , - 2014 , - 2063 , - 2580 , - 3565 , - 26 , - 1947 , - 4336 , - 2201 , - 534 , - 4327 , - 3596 , - 3333 , - 3538 , - 4211 , - 360 , - 1969 , - 4046 , - 1599 , - 4612 , - 3101 , - 2058 , - 1483 , - 1376 , - 1737 , - 2566 , - 3863 , - 636 , - 2869 , - 578 , - 3747 , - 2392 , - 1505 , - 1086 , - 1135 , - 1652 , - 2637 , - 4090 , - 1019 , - 3408 , - 1273 , - 4598 , - 3399 , - 2668 , - 2405 , - 2610 , - 3283 , - 4424 , - 1041 , - 3118 , - 671 , - 3684 , - 2173 , - 1130 , - 555 , - 448 , - 809 , - 1638 , - 2935 , - 4700 , - 1941 , - 4642 , - 2819 , - 1464 , - 577 , - 158 , - 207 , - 724 , - 1709 , - 3162 , - 91 , - 2480 , - 345 , - 3670 , - 2471 , - 1740 , - 1477 , - 1682 , - 2355 , - 3496 , - 113 , - 2190 , - 4735 , - 2756 , - 1245 , - 202 , - 4619 , - 4512 , - 4873 , - 710 , - 2007 , - 3772 , - 1013 , - 3714 , - 1891 , - 536 , - 4641 , - 4222 , - 4271 , - 4788 , - 781 , - 2234 , - 4155 , - 1552 , - 4409 , - 2742 , - 1543 , - 812 , - 549 , - 754 , - 1427 , - 2568 , - 4177 , - 1262 , - 3807 , - 1828 , - 317 , - 4266 , - 3691 , - 3584 , - 3945 , - 4774 , - 1079 , - 2844 , - 85 , - 2786 , - 963 , - 4600 , - 3713 , - 3294 , - 3343 , - 3860 , - 4845 , - 1306 , - 3227 , - 624 , - 3481 , - 1814 , - 615 , - 4876 , - 4613 , - 4818 , - 499 , - 1640 , - 3249 , - 334 , - 2879 , - 900 , - 4381 , - 3338 , - 2763 , - 2656 , - 3017 , - 3846 , - 151 , - 1916 , - 4149 , - 1858 , - 35 , - 3672 , - 2785 , - 2366 , - 2415 , - 2932 , - 3917 , - 378 , - 2299 , - 4688 , - 2553 , - 886 , - 4679 , - 3948 , - 3685 , - 3890 , - 4563 , - 712 , - 2321 , - 4398 , - 1951 , - 4964 , - 3453 , - 2410 , - 1835 , - 1728 , - 2089 , - 2918 , - 4215 , - 988 , - 3221 , - 930 , - 4099 , - 2744 , - 1857 , - 1438 , - 1487 , - 2004 , - 2989 , - 4442 , - 1371 , - 3760 , - 1625 , - 4950 , - 3751 , - 3020 , - 2757 , - 2962 , - 3635 , - 4776 , - 1393 , - 3470 , - 1023 , - 4036 , - 2525 , - 1482 , - 907 , - 800 , - 1161 , - 1990 , - 3287 , - 60 , - 2293 , - 2 , - 3171 , - 1816 , - 929 , - 510 , - 559 , - 1076 , - 2061 , - 3514 , - 443 , - 2832 , - 697 , - 4022 , - 2823 , - 2092 , - 1829 , - 2034 , - 2707 , - 3848 , - 465 , - 2542 , - 95 , - 3108 , - 1597 , - 554 , - 4971 , - 4864 , - 233 , - 1062 , - 2359 , - 4124 , - 1365 , - 4066 , - 2243 , - 888 , - 1 , - 4574 , - 4623 , - 148 , - 1133 , - 2586 , - 4507 , - 1904 , - 4761 , - 3094 , - 1895 , - 1164 , - 901 , - 1106 , - 1779 , - 2920 , - 4529 , - 1614 , - 4159 , - 2180 , - 669 , - 4618 , - 4043 , - 3936 , - 4297 , - 134 , - 1431 , - 3196 , - 437 , - 3138 , - 1315 , - 4952 , - 4065 , - 3646 , - 3695 , - 4212 , - 205 , - 1658 , - 3579 , - 976 , - 3833 , - 2166 , - 967 , - 236 , - 4965 , - 178 , - 851 , - 1992 , - 3601 , - 686 , - 3231 , - 1252 , - 4733 , - 3690 , - 3115 , - 3008 , - 3369 , - 4198 , - 503 , - 2268 , - 4501 , - 2210 , - 387 , - 4024 , - 3137 , - 2718 , - 2767 , - 3284 , - 4269 , - 730 , - 2651 , - 48 , - 2905 , - 1238 , - 39 , - 4300 , - 4037 , - 4242 , - 4915 , - 1064 , - 2673 , - 4750 , - 2303 , - 324 , - 3805 , - 2762 , - 2187 , - 2080 , - 2441 , - 3270 , - 4567 , - 1340 , - 3573 , - 1282 , - 4451 , - 3096 , - 2209 , - 1790 , - 1839 , - 2356 , - 3341 , - 4794 , - 1723 , - 4112 , - 1977 , - 310 , - 4103 , - 3372 , - 3109 , - 3314 , - 3987 , - 136 , - 1745 , - 3822 , - 1375 , - 4388 , - 2877 , - 1834 , - 1259 , - 1152 , - 1513 , - 2342 , - 3639 , - 412 , - 2645 , - 354 , - 3523 , - 2168 , - 1281 , - 862 , - 911 , - 1428 , - 2413 , - 3866 , - 795 , - 3184 , - 1049 , - 4374 , - 3175 , - 2444 , - 2181 , - 2386 , - 3059 , - 4200 , - 817 , - 2894 , - 447 , - 3460 , - 1949 , - 906 , - 331 , - 224 , - 585 , - 1414 , - 2711 , - 4476 , - 1717 , - 4418 , - 2595 , - 1240 , - 353 , - 4926 , - 4975 , - 500 , - 1485 , - 2938 , - 4859 , - 2256 , - 121 , - 3446 , - 2247 , - 1516 , - 1253 , - 1458 , - 2131 , - 3272 , - 4881 , - 1966 , - 4511 , - 2532 , - 1021 , - 4970 , - 4395 , - 4288 , - 4649 , - 486 , - 1783 , - 3548 , - 789 , - 3490 , - 1667 , - 312 , - 4417 , - 3998 , - 4047 , - 4564 , - 557 , - 2010 , - 3931 , - 1328 , - 4185 , - 2518 , - 1319 , - 588 , - 325 , - 530 , - 1203 , - 2344 , - 3953 , - 1038 , - 3583 , - 1604 , - 93 , - 4042 , - 3467 , - 3360 , - 3721 , - 4550 , - 855 , - 2620 , - 4853 , - 2562 , - 739 , - 4376 , - 3489 , - 3070 , - 3119 , - 3636 , - 4621 , - 1082 , - 3003 , - 400 , - 3257 , - 1590 , - 391 , - 4652 , - 4389 , - 4594 , - 275 , - 1416 , - 3025 , - 110 , - 2655 , - 676 , - 4157 , - 3114 , - 2539 , - 2432 , - 2793 , - 3622 , - 4919 , - 1692 , - 3925 , - 1634 , - 4803 , - 3448 , - 2561 , - 2142 , - 2191 , - 2708 , - 3693 , - 154 , - 2075 , - 4464 , - 2329 , - 662 , - 4455 , - 3724 , - 3461 , - 3666 , - 4339 , - 488 , - 2097 , - 4174 , - 1727 , - 4740 , - 3229 , - 2186 , - 1611 , - 1504 , - 1865 , - 2694 , - 3991 , - 764 , - 2997 , - 706 , - 3875 , - 2520 , - 1633 , - 1214 , - 1263 , - 1780 , - 2765 , - 4218 , - 1147 , - 3536 , - 1401 , - 4726 , - 3527 , - 2796 , - 2533 , - 2738 , - 3411 , - 4552 , - 1169 , - 3246 , - 799 , - 3812 , - 2301 , - 1258 , - 683 , - 576 , - 937 , - 1766 , - 3063 , - 4828 , - 2069 , - 4770 , - 2947 , - 1592 , - 705 , - 286 , - 335 , - 852 , - 1837 , - 3290 , - 219 , - 2608 , - 473 , - 3798 , - 2599 , - 1868 , - 1605 , - 1810 , - 2483 , - 3624 , - 241 , - 2318 , - 4863 , - 2884 , - 1373 , - 330 , - 4747 , - 4640 , - 9 , - 838 , - 2135 , - 3900 , - 1141 , - 3842 , - 2019 , - 664 , - 4769 , - 4350 , - 4399 , - 4916 , - 909 , - 2362 , - 4283 , - 1680 , - 4537 , - 2870 , - 1671 , - 940 , - 677 , - 882 , - 1555 , - 2696 , - 4305 , - 1390 , - 3935 , - 1956 , - 445 , - 4394 , - 3819 , - 3712 , - 4073 , - 4902 , - 1207 , - 2972 , - 213 , - 2914 , - 1091 , - 4728 , - 3841 , - 3422 , - 3471 , - 3988 , - 4973 , - 1434 , - 3355 , - 752 , - 3609 , - 1942 , - 743 , - 12 , - 4741 , - 4946 , - 627 , - 1768 , - 3377 , - 462 , - 3007 , - 1028 , - 4509 , - 3466 , - 2891 , - 2784 , - 3145 , - 3974 , - 279 , - 2044 , - 4277 , - 1986 , - 163 , - 3800 , - 2913 , - 2494 , - 2543 , - 3060 , - 4045 , - 506 , - 2427 , - 4816 , - 2681 , - 1014 , - 4807 , - 4076 , - 3813 , - 4018 , - 4691 , - 840 , - 2449 , - 4526 , - 2079 , - 100 , - 3581 , - 2538 , - 1963 , - 1856 , - 2217 , - 3046 , - 4343 , - 1116 , - 3349 , - 1058 , - 4227 , - 2872 , - 1985 , - 1566 , - 1615 , - 2132 , - 3117 , - 4570 , - 1499 , - 3888 , - 1753 , - 86 , - 3879 , - 3148 , - 2885 , - 3090 , - 3763 , - 4904 , - 1521 , - 3598 , - 1151 , - 4164 , - 2653 , - 1610 , - 1035 , - 928 , - 1289 , - 2118 , - 3415 , - 188 , - 2421 , - 130 , - 3299 , - 1944 , - 1057 , - 638 , - 687 , - 1204 , - 2189 , - 3642 , - 571 , - 2960 , - 825 , - 4150 , - 2951 , - 2220 , - 1957 , - 2162 , - 2835 , - 3976 , - 593 , - 2670 , - 223 , - 3236 , - 1725 , - 682 , - 107 , - 0 , - 197 , - 710 , - 1539 , - 2684 , - 4145 , - 866 , - 2959 , - 312 , - 3037 , - 1022 , - 4379 , - 2996 , - 1929 , - 1178 , - 743 , - 624 , - 821 , - 1334 , - 2163 , - 3308 , - 4769 , - 1490 , - 3583 , - 936 , - 3661 , - 1646 , - 5003 , - 3620 , - 2553 , - 1802 , - 1367 , - 1248 , - 1445 , - 1958 , - 2787 , - 3932 , - 337 , - 2114 , - 4207 , - 1560 , - 4285 , - 2270 , - 571 , - 4244 , - 3177 , - 2426 , - 1991 , - 1872 , - 2069 , - 2582 , - 3411 , - 4556 , - 961 , - 2738 , - 4831 , - 2184 , - 4909 , - 2894 , - 1195 , - 4868 , - 3801 , - 3050 , - 2615 , - 2496 , - 2693 , - 3206 , - 4035 , - 124 , - 1585 , - 3362 , - 399 , - 2808 , - 477 , - 3518 , - 1819 , - 436 , - 4425 , - 3674 , - 3239 , - 3120 , - 3317 , - 3830 , - 4659 , - 748 , - 2209 , - 3986 , - 1023 , - 3432 , - 1101 , - 4142 , - 2443 , - 1060 , - 5049 , - 4298 , - 3863 , - 3744 , - 3941 , - 4454 , - 227 , - 1372 , - 2833 , - 4610 , - 1647 , - 4056 , - 1725 , - 4766 , - 3067 , - 1684 , - 617 , - 4922 , - 4487 , - 4368 , - 4565 , - 22 , - 851 , - 1996 , - 3457 , - 178 , - 2271 , - 4680 , - 2349 , - 334 , - 3691 , - 2308 , - 1241 , - 490 , - 55 , - 4992 , - 133 , - 646 , - 1475 , - 2620 , - 4081 , - 802 , - 2895 , - 248 , - 2973 , - 958 , - 4315 , - 2932 , - 1865 , - 1114 , - 679 , - 560 , - 757 , - 1270 , - 2099 , - 3244 , - 4705 , - 1426 , - 3519 , - 872 , - 3597 , - 1582 , - 4939 , - 3556 , - 2489 , - 1738 , - 1303 , - 1184 , - 1381 , - 1894 , - 2723 , - 3868 , - 273 , - 2050 , - 4143 , - 1496 , - 4221 , - 2206 , - 507 , - 4180 , - 3113 , - 2362 , - 1927 , - 1808 , - 2005 , - 2518 , - 3347 , - 4492 , - 897 , - 2674 , - 4767 , - 2120 , - 4845 , - 2830 , - 1131 , - 4804 , - 3737 , - 2986 , - 2551 , - 2432 , - 2629 , - 3142 , - 3971 , - 60 , - 1521 , - 3298 , - 335 , - 2744 , - 413 , - 3454 , - 1755 , - 372 , - 4361 , - 3610 , - 3175 , - 3056 , - 3253 , - 3766 , - 4595 , - 684 , - 2145 , - 3922 , - 959 , - 3368 , - 1037 , - 4078 , - 2379 , - 996 , - 4985 , - 4234 , - 3799 , - 3680 , - 3877 , - 4390 , - 163 , - 1308 , - 2769 , - 4546 , - 1583 , - 3992 , - 1661 , - 4702 , - 3003 , - 1620 , - 553 , - 4858 , - 4423 , - 4304 , - 4501 , - 5014 , - 787 , - 1932 , - 3393 , - 114 , - 2207 , - 4616 , - 2285 , - 270 , - 3627 , - 2244 , - 1177 , - 426 , - 5047 , - 4928 , - 69 , - 582 , - 1411 , - 2556 , - 4017 , - 738 , - 2831 , - 184 , - 2909 , - 894 , - 4251 , - 2868 , - 1801 , - 1050 , - 615 , - 496 , - 693 , - 1206 , - 2035 , - 3180 , - 4641 , - 1362 , - 3455 , - 808 , - 3533 , - 1518 , - 4875 , - 3492 , - 2425 , - 1674 , - 1239 , - 1120 , - 1317 , - 1830 , - 2659 , - 3804 , - 209 , - 1986 , - 4079 , - 1432 , - 4157 , - 2142 , - 443 , - 4116 , - 3049 , - 2298 , - 1863 , - 1744 , - 1941 , - 2454 , - 3283 , - 4428 , - 833 , - 2610 , - 4703 , - 2056 , - 4781 , - 2766 , - 1067 , - 4740 , - 3673 , - 2922 , - 2487 , - 2368 , - 2565 , - 3078 , - 3907 , - 5052 , - 1457 , - 3234 , - 271 , - 2680 , - 349 , - 3390 , - 1691 , - 308 , - 4297 , - 3546 , - 3111 , - 2992 , - 3189 , - 3702 , - 4531 , - 620 , - 2081 , - 3858 , - 895 , - 3304 , - 973 , - 4014 , - 2315 , - 932 , - 4921 , - 4170 , - 3735 , - 3616 , - 3813 , - 4326 , - 99 , - 1244 , - 2705 , - 4482 , - 1519 , - 3928 , - 1597 , - 4638 , - 2939 , - 1556 , - 489 , - 4794 , - 4359 , - 4240 , - 4437 , - 4950 , - 723 , - 1868 , - 3329 , - 50 , - 2143 , - 4552 , - 2221 , - 206 , - 3563 , - 2180 , - 1113 , - 362 , - 4983 , - 4864 , - 5 , - 518 , - 1347 , - 2492 , - 3953 , - 674 , - 2767 , - 120 , - 2845 , - 830 , - 4187 , - 2804 , - 1737 , - 986 , - 551 , - 432 , - 629 , - 1142 , - 1971 , - 3116 , - 4577 , - 1298 , - 3391 , - 744 , - 3469 , - 1454 , - 4811 , - 3428 , - 2361 , - 1610 , - 1175 , - 1056 , - 1253 , - 1766 , - 2595 , - 3740 , - 145 , - 1922 , - 4015 , - 1368 , - 4093 , - 2078 , - 379 , - 4052 , - 2985 , - 2234 , - 1799 , - 1680 , - 1877 , - 2390 , - 3219 , - 4364 , - 769 , - 2546 , - 4639 , - 1992 , - 4717 , - 2702 , - 1003 , - 4676 , - 3609 , - 2858 , - 2423 , - 2304 , - 2501 , - 3014 , - 3843 , - 4988 , - 1393 , - 3170 , - 207 , - 2616 , - 285 , - 3326 , - 1627 , - 244 , - 4233 , - 3482 , - 3047 , - 2928 , - 3125 , - 3638 , - 4467 , - 556 , - 2017 , - 3794 , - 831 , - 3240 , - 909 , - 3950 , - 2251 , - 868 , - 4857 , - 4106 , - 3671 , - 3552 , - 3749 , - 4262 , - 35 , - 1180 , - 2641 , - 4418 , - 1455 , - 3864 , - 1533 , - 4574 , - 2875 , - 1492 , - 425 , - 4730 , - 4295 , - 4176 , - 4373 , - 4886 , - 659 , - 1804 , - 3265 , - 5042 , - 2079 , - 4488 , - 2157 , - 142 , - 3499 , - 2116 , - 1049 , - 298 , - 4919 , - 4800 , - 4997 , - 454 , - 1283 , - 2428 , - 3889 , - 610 , - 2703 , - 56 , - 2781 , - 766 , - 4123 , - 2740 , - 1673 , - 922 , - 487 , - 368 , - 565 , - 1078 , - 1907 , - 3052 , - 4513 , - 1234 , - 3327 , - 680 , - 3405 , - 1390 , - 4747 , - 3364 , - 2297 , - 1546 , - 1111 , - 992 , - 1189 , - 1702 , - 2531 , - 3676 , - 81 , - 1858 , - 3951 , - 1304 , - 4029 , - 2014 , - 315 , - 3988 , - 2921 , - 2170 , - 1735 , - 1616 , - 1813 , - 2326 , - 3155 , - 4300 , - 705 , - 2482 , - 4575 , - 1928 , - 4653 , - 2638 , - 939 , - 4612 , - 3545 , - 2794 , - 2359 , - 2240 , - 2437 , - 2950 , - 3779 , - 4924 , - 1329 , - 3106 , - 143 , - 2552 , - 221 , - 3262 , - 1563 , - 180 , - 4169 , - 3418 , - 2983 , - 2864 , - 3061 , - 3574 , - 4403 , - 492 , - 1953 , - 3730 , - 767 , - 3176 , - 845 , - 3886 , - 2187 , - 804 , - 4793 , - 4042 , - 3607 , - 3488 , - 3685 , - 4198 , - 5027 , - 1116 , - 2577 , - 4354 , - 1391 , - 3800 , - 1469 , - 4510 , - 2811 , - 1428 , - 361 , - 4666 , - 4231 , - 4112 , - 4309 , - 4822 , - 595 , - 1740 , - 3201 , - 4978 , - 2015 , - 4424 , - 2093 , - 78 , - 3435 , - 2052 , - 985 , - 234 , - 4855 , - 4736 , - 4933 , - 390 , - 1219 , - 2364 , - 3825 , - 546 , - 2639 , - 5048 , - 2717 , - 702 , - 4059 , - 2676 , - 1609 , - 858 , - 423 , - 304 , - 501 , - 1014 , - 1843 , - 2988 , - 4449 , - 1170 , - 3263 , - 616 , - 3341 , - 1326 , - 4683 , - 3300 , - 2233 , - 1482 , - 1047 , - 928 , - 1125 , - 1638 , - 2467 , - 3612 , - 17 , - 1794 , - 3887 , - 1240 , - 3965 , - 1950 , - 251 , - 3924 , - 2857 , - 2106 , - 1671 , - 1552 , - 1749 , - 2262 , - 3091 , - 4236 , - 641 , - 2418 , - 4511 , - 1864 , - 4589 , - 2574 , - 875 , - 4548 , - 3481 , - 2730 , - 2295 , - 2176 , - 2373 , - 2886 , - 3715 , - 4860 , - 1265 , - 3042 , - 79 , - 2488 , - 157 , - 3198 , - 1499 , - 116 , - 4105 , - 3354 , - 2919 , - 2800 , - 2997 , - 3510 , - 4339 , - 428 , - 1889 , - 3666 , - 703 , - 3112 , - 781 , - 3822 , - 2123 , - 740 , - 4729 , - 3978 , - 3543 , - 3424 , - 3621 , - 4134 , - 4963 , - 1052 , - 2513 , - 4290 , - 1327 , - 3736 , - 1405 , - 4446 , - 2747 , - 1364 , - 297 , - 4602 , - 4167 , - 4048 , - 4245 , - 4758 , - 531 , - 1676 , - 3137 , - 4914 , - 1951 , - 4360 , - 2029 , - 14 , - 3371 , - 1988 , - 921 , - 170 , - 4791 , - 4672 , - 4869 , - 326 , - 1155 , - 2300 , - 3761 , - 482 , - 2575 , - 4984 , - 2653 , - 638 , - 3995 , - 2612 , - 1545 , - 794 , - 359 , - 240 , - 437 , - 950 , - 1779 , - 2924 , - 4385 , - 1106 , - 3199 , - 552 , - 3277 , - 1262 , - 4619 , - 3236 , - 2169 , - 1418 , - 983 , - 864 , - 1061 , - 1574 , - 2403 , - 3548 , - 5009 , - 1730 , - 3823 , - 1176 , - 3901 , - 1886 , - 187 , - 3860 , - 2793 , - 2042 , - 1607 , - 1488 , - 1685 , - 2198 , - 3027 , - 4172 , - 577 , - 2354 , - 4447 , - 1800 , - 4525 , - 2510 , - 811 , - 4484 , - 3417 , - 2666 , - 2231 , - 2112 , - 2309 , - 2822 , - 3651 , - 4796 , - 1201 , - 2978 , - 15 , - 2424 , - 93 , - 3134 , - 1435 , - 52 , - 4041 , - 3290 , - 2855 , - 2736 , - 2933 , - 3446 , - 4275 , - 364 , - 1825 , - 3602 , - 639 , - 3048 , - 717 , - 3758 , - 2059 , - 676 , - 4665 , - 3914 , - 3479 , - 3360 , - 3557 , - 4070 , - 4899 , - 988 , - 2449 , - 4226 , - 1263 , - 3672 , - 1341 , - 4382 , - 2683 , - 1300 , - 233 , - 4538 , - 4103 , - 3984 , - 4181 , - 4694 , - 467 , - 1612 , - 3073 , - 4850 , - 1887 , - 4296 , - 1965 , - 5006 , - 3307 , - 1924 , - 857 , - 106 , - 4727 , - 4608 , - 4805 , - 262 , - 1091 , - 2236 , - 3697 , - 418 , - 2511 , - 4920 , - 2589 , - 574 , - 3931 , - 2548 , - 1481 , - 730 , - 295 , - 176 , - 373 , - 886 , - 1715 , - 2860 , - 4321 , - 1042 , - 3135 , - 488 , - 3213 , - 1198 , - 4555 , - 3172 , - 2105 , - 1354 , - 919 , - 800 , - 997 , - 1510 , - 2339 , - 3484 , - 4945 , - 1666 , - 3759 , - 1112 , - 3837 , - 1822 , - 123 , - 3796 , - 2729 , - 1978 , - 1543 , - 1424 , - 1621 , - 2134 , - 2963 , - 4108 , - 513 , - 2290 , - 4383 , - 1736 , - 4461 , - 2446 , - 747 , - 4420 , - 3353 , - 2602 , - 2167 , - 2048 , - 2245 , - 2758 , - 3587 , - 4732 , - 1137 , - 2914 , - 5007 , - 2360 , - 29 , - 3070 , - 1371 , - 5044 , - 3977 , - 3226 , - 2791 , - 2672 , - 2869 , - 3382 , - 4211 , - 300 , - 1761 , - 3538 , - 575 , - 2984 , - 653 , - 3694 , - 1995 , - 612 , - 4601 , - 3850 , - 3415 , - 3296 , - 3493 , - 4006 , - 4835 , - 924 , - 2385 , - 4162 , - 1199 , - 3608 , - 1277 , - 4318 , - 2619 , - 1236 , - 169 , - 4474 , - 4039 , - 3920 , - 4117 , - 4630 , - 403 , - 1548 , - 3009 , - 4786 , - 1823 , - 4232 , - 1901 , - 4942 , - 3243 , - 1860 , - 793 , - 42 , - 4663 , - 4544 , - 4741 , - 198 , - 1027 , - 2172 , - 3633 , - 354 , - 2447 , - 4856 , - 2525 , - 510 , - 3867 , - 2484 , - 1417 , - 666 , - 231 , - 112 , - 309 , - 822 , - 1651 , - 2796 , - 4257 , - 978 , - 3071 , - 424 , - 3149 , - 1134 , - 4491 , - 3108 , - 2041 , - 1290 , - 855 , - 736 , - 933 , - 1446 , - 2275 , - 3420 , - 4881 , - 1602 , - 3695 , - 1048 , - 3773 , - 1758 , - 59 , - 3732 , - 2665 , - 1914 , - 1479 , - 1360 , - 1557 , - 2070 , - 2899 , - 4044 , - 449 , - 2226 , - 4319 , - 1672 , - 4397 , - 2382 , - 683 , - 4356 , - 3289 , - 2538 , - 2103 , - 1984 , - 2181 , - 2694 , - 3523 , - 4668 , - 1073 , - 2850 , - 4943 , - 2296 , - 5021 , - 3006 , - 1307 , - 4980 , - 3913 , - 3162 , - 2727 , - 2608 , - 2805 , - 3318 , - 4147 , - 236 , - 1697 , - 3474 , - 511 , - 2920 , - 589 , - 3630 , - 1931 , - 548 , - 4537 , - 3786 , - 3351 , - 3232 , - 3429 , - 3942 , - 4771 , - 860 , - 2321 , - 4098 , - 1135 , - 3544 , - 1213 , - 4254 , - 2555 , - 1172 , - 105 , - 4410 , - 3975 , - 3856 , - 4053 , - 4566 , - 339 , - 1484 , - 2945 , - 4722 , - 1759 , - 4168 , - 1837 , - 4878 , - 3179 , - 1796 , - 729 , - 5034 , - 4599 , - 4480 , - 4677 , - 134 , - 963 , - 2108 , - 3569 , - 290 , - 2383 , - 4792 , - 2461 , - 446 , - 3803 , - 2420 , - 1353 , - 602 , - 167 , - 48 , - 245 , - 758 , - 1587 , - 2732 , - 4193 , - 914 , - 3007 , - 360 , - 3085 , - 1070 , - 4427 , - 3044 , - 1977 , - 1226 , - 791 , - 672 , - 869 , - 1382 , - 2211 , - 3356 , - 4817 , - 1538 , - 3631 , - 984 , - 3709 , - 1694 , - 5051 , - 3668 , - 2601 , - 1850 , - 1415 , - 1296 , - 1493 , - 2006 , - 2835 , - 3980 , - 385 , - 2162 , - 4255 , - 1608 , - 4333 , - 2318 , - 619 , - 4292 , - 3225 , - 2474 , - 2039 , - 1920 , - 2117 , - 2630 , - 3459 , - 4604 , - 1009 , - 2786 , - 4879 , - 2232 , - 4957 , - 2942 , - 1243 , - 4916 , - 3849 , - 3098 , - 2663 , - 2544 , - 2741 , - 3254 , - 4083 , - 172 , - 1633 , - 3410 , - 447 , - 2856 , - 525 , - 3566 , - 1867 , - 484 , - 4473 , - 3722 , - 3287 , - 3168 , - 3365 , - 3878 , - 4707 , - 796 , - 2257 , - 4034 , - 1071 , - 3480 , - 1149 , - 4190 , - 2491 , - 1108 , - 41 , - 4346 , - 3911 , - 3792 , - 3989 , - 4502 , - 275 , - 1420 , - 2881 , - 4658 , - 1695 , - 4104 , - 1773 , - 4814 , - 3115 , - 1732 , - 665 , - 4970 , - 4535 , - 4416 , - 4613 , - 70 , - 899 , - 2044 , - 3505 , - 226 , - 2319 , - 4728 , - 2397 , - 382 , - 3739 , - 2356 , - 1289 , - 538 , - 103 , - 5040 , - 181 , - 694 , - 1523 , - 2668 , - 4129 , - 850 , - 2943 , - 296 , - 3021 , - 1006 , - 4363 , - 2980 , - 1913 , - 1162 , - 727 , - 608 , - 805 , - 1318 , - 2147 , - 3292 , - 4753 , - 1474 , - 3567 , - 920 , - 3645 , - 1630 , - 4987 , - 3604 , - 2537 , - 1786 , - 1351 , - 1232 , - 1429 , - 1942 , - 2771 , - 3916 , - 321 , - 2098 , - 4191 , - 1544 , - 4269 , - 2254 , - 555 , - 4228 , - 3161 , - 2410 , - 1975 , - 1856 , - 2053 , - 2566 , - 3395 , - 4540 , - 945 , - 2722 , - 4815 , - 2168 , - 4893 , - 2878 , - 1179 , - 4852 , - 3785 , - 3034 , - 2599 , - 2480 , - 2677 , - 3190 , - 4019 , - 108 , - 1569 , - 3346 , - 383 , - 2792 , - 461 , - 3502 , - 1803 , - 420 , - 4409 , - 3658 , - 3223 , - 3104 , - 3301 , - 3814 , - 4643 , - 732 , - 2193 , - 3970 , - 1007 , - 3416 , - 1085 , - 4126 , - 2427 , - 1044 , - 5033 , - 4282 , - 3847 , - 3728 , - 3925 , - 4438 , - 211 , - 1356 , - 2817 , - 4594 , - 1631 , - 4040 , - 1709 , - 4750 , - 3051 , - 1668 , - 601 , - 4906 , - 4471 , - 4352 , - 4549 , - 6 , - 835 , - 1980 , - 3441 , - 162 , - 2255 , - 4664 , - 2333 , - 318 , - 3675 , - 2292 , - 1225 , - 474 , - 39 , - 4976 , - 117 , - 630 , - 1459 , - 2604 , - 4065 , - 786 , - 2879 , - 232 , - 2957 , - 942 , - 4299 , - 2916 , - 1849 , - 1098 , - 663 , - 544 , - 741 , - 1254 , - 2083 , - 3228 , - 4689 , - 1410 , - 3503 , - 856 , - 3581 , - 1566 , - 4923 , - 3540 , - 2473 , - 1722 , - 1287 , - 1168 , - 1365 , - 1878 , - 2707 , - 3852 , - 257 , - 2034 , - 4127 , - 1480 , - 4205 , - 2190 , - 491 , - 4164 , - 3097 , - 2346 , - 1911 , - 1792 , - 1989 , - 2502 , - 3331 , - 4476 , - 881 , - 2658 , - 4751 , - 2104 , - 4829 , - 2814 , - 1115 , - 4788 , - 3721 , - 2970 , - 2535 , - 2416 , - 2613 , - 3126 , - 3955 , - 44 , - 1505 , - 3282 , - 319 , - 2728 , - 397 , - 3438 , - 1739 , - 356 , - 4345 , - 3594 , - 3159 , - 3040 , - 3237 , - 3750 , - 4579 , - 668 , - 2129 , - 3906 , - 943 , - 3352 , - 1021 , - 4062 , - 2363 , - 980 , - 4969 , - 4218 , - 3783 , - 3664 , - 3861 , - 4374 , - 147 , - 1292 , - 2753 , - 4530 , - 1567 , - 3976 , - 1645 , - 4686 , - 2987 , - 1604 , - 537 , - 4842 , - 4407 , - 4288 , - 4485 , - 4998 , - 771 , - 1916 , - 3377 , - 98 , - 2191 , - 4600 , - 2269 , - 254 , - 3611 , - 2228 , - 1161 , - 410 , - 5031 , - 4912 , - 53 , - 566 , - 1395 , - 2540 , - 4001 , - 722 , - 2815 , - 168 , - 2893 , - 878 , - 4235 , - 2852 , - 1785 , - 1034 , - 599 , - 480 , - 677 , - 1190 , - 2019 , - 3164 , - 4625 , - 1346 , - 3439 , - 792 , - 3517 , - 1502 , - 4859 , - 3476 , - 2409 , - 1658 , - 1223 , - 1104 , - 1301 , - 1814 , - 2643 , - 3788 , - 193 , - 1970 , - 4063 , - 1416 , - 4141 , - 2126 , - 427 , - 4100 , - 3033 , - 2282 , - 1847 , - 1728 , - 1925 , - 2438 , - 3267 , - 4412 , - 817 , - 2594 , - 4687 , - 2040 , - 4765 , - 2750 , - 1051 , - 4724 , - 3657 , - 2906 , - 2471 , - 2352 , - 2549 , - 3062 , - 3891 , - 5036 , - 1441 , - 3218 , - 255 , - 2664 , - 333 , - 3374 , - 1675 , - 292 , - 4281 , - 3530 , - 3095 , - 2976 , - 3173 , - 3686 , - 4515 , - 604 , - 2065 , - 3842 , - 879 , - 3288 , - 957 , - 3998 , - 2299 , - 916 , - 4905 , - 4154 , - 3719 , - 3600 , - 3797 , - 4310 , - 83 , - 1228 , - 2689 , - 4466 , - 1503 , - 3912 , - 1581 , - 4622 , - 2923 , - 1540 , - 473 , - 4778 , - 4343 , - 4224 , - 4421 , - 4934 , - 707 , - 1852 , - 3313 , - 34 , - 2127 , - 4536 , - 2205 , - 190 , - 3547 , - 2164 , - 1097 , - 346 , - 4967 , - 4848 , - 5045 , - 502 , - 1331 , - 2476 , - 3937 , - 658 , - 2751 , - 104 , - 2829 , - 814 , - 4171 , - 2788 , - 1721 , - 970 , - 535 , - 416 , - 613 , - 1126 , - 1955 , - 3100 , - 4561 , - 1282 , - 3375 , - 728 , - 3453 , - 1438 , - 4795 , - 3412 , - 2345 , - 1594 , - 1159 , - 1040 , - 1237 , - 1750 , - 2579 , - 3724 , - 129 , - 1906 , - 3999 , - 1352 , - 4077 , - 2062 , - 363 , - 4036 , - 2969 , - 2218 , - 1783 , - 1664 , - 1861 , - 2374 , - 3203 , - 4348 , - 753 , - 2530 , - 4623 , - 1976 , - 4701 , - 2686 , - 987 , - 4660 , - 3593 , - 2842 , - 2407 , - 2288 , - 2485 , - 2998 , - 3827 , - 4972 , - 1377 , - 3154 , - 191 , - 2600 , - 269 , - 3310 , - 1611 , - 228 , - 4217 , - 3466 , - 3031 , - 2912 , - 3109 , - 3622 , - 4451 , - 540 , - 2001 , - 3778 , - 815 , - 3224 , - 893 , - 3934 , - 2235 , - 852 , - 4841 , - 4090 , - 3655 , - 3536 , - 3733 , - 4246 , - 19 , - 1164 , - 2625 , - 4402 , - 1439 , - 3848 , - 1517 , - 4558 , - 2859 , - 1476 , - 409 , - 4714 , - 4279 , - 4160 , - 4357 , - 4870 , - 643 , - 1788 , - 3249 , - 5026 , - 2063 , - 4472 , - 2141 , - 126 , - 3483 , - 2100 , - 1033 , - 282 , - 4903 , - 4784 , - 4981 , - 438 , - 1267 , - 2412 , - 3873 , - 594 , - 2687 , - 40 , - 2765 , - 750 , - 4107 , - 2724 , - 1657 , - 906 , - 471 , - 352 , - 549 , - 1062 , - 1891 , - 3036 , - 4497 , - 1218 , - 3311 , - 664 , - 3389 , - 1374 , - 4731 , - 3348 , - 2281 , - 1530 , - 1095 , - 976 , - 1173 , - 1686 , - 2515 , - 3660 , - 65 , - 1842 , - 3935 , - 1288 , - 4013 , - 1998 , - 299 , - 3972 , - 2905 , - 2154 , - 1719 , - 1600 , - 1797 , - 2310 , - 3139 , - 4284 , - 689 , - 2466 , - 4559 , - 1912 , - 4637 , - 2622 , - 923 , - 4596 , - 3529 , - 2778 , - 2343 , - 2224 , - 2421 , - 2934 , - 3763 , - 4908 , - 1313 , - 3090 , - 127 , - 2536 , - 205 , - 3246 , - 1547 , - 164 , - 4153 , - 3402 , - 2967 , - 2848 , - 3045 , - 3558 , - 4387 , - 476 , - 1937 , - 3714 , - 751 , - 3160 , - 829 , - 3870 , - 2171 , - 788 , - 4777 , - 4026 , - 3591 , - 3472 , - 3669 , - 4182 , - 5011 , - 1100 , - 2561 , - 4338 , - 1375 , - 3784 , - 1453 , - 4494 , - 2795 , - 1412 , - 345 , - 4650 , - 4215 , - 4096 , - 4293 , - 4806 , - 579 , - 1724 , - 3185 , - 4962 , - 1999 , - 4408 , - 2077 , - 62 , - 3419 , - 2036 , - 969 , - 218 , - 4839 , - 4720 , - 4917 , - 374 , - 1203 , - 2348 , - 3809 , - 530 , - 2623 , - 5032 , - 2701 , - 686 , - 4043 , - 2660 , - 1593 , - 842 , - 407 , - 288 , - 485 , - 998 , - 1827 , - 2972 , - 4433 , - 1154 , - 3247 , - 600 , - 3325 , - 1310 , - 4667 , - 3284 , - 2217 , - 1466 , - 1031 , - 912 , - 1109 , - 1622 , - 2451 , - 3596 , - 1 , - 1778 , - 3871 , - 1224 , - 3949 , - 1934 , - 235 , - 3908 , - 2841 , - 2090 , - 1655 , - 1536 , - 1733 , - 2246 , - 3075 , - 4220 , - 625 , - 2402 , - 4495 , - 1848 , - 4573 , - 2558 , - 859 , - 4532 , - 3465 , - 2714 , - 2279 , - 2160 , - 2357 , - 2870 , - 3699 , - 4844 , - 1249 , - 3026 , - 63 , - 2472 , - 141 , - 3182 , - 1483 , - 100 , - 4089 , - 3338 , - 2903 , - 2784 , - 2981 , - 3494 , - 4323 , - 412 , - 1873 , - 3650 , - 687 , - 3096 , - 765 , - 3806 , - 2107 , - 724 , - 4713 , - 3962 , - 3527 , - 3408 , - 3605 , - 4118 , - 4947 , - 1036 , - 2497 , - 4274 , - 1311 , - 3720 , - 1389 , - 4430 , - 2731 , - 1348 , - 281 , - 4586 , - 4151 , - 4032 , - 4229 , - 4742 , - 515 , - 1660 , - 3121 , - 4898 , - 1935 , - 4344 , - 2013 , - 5054 , - 3355 , - 1972 , - 905 , - 154 , - 4775 , - 4656 , - 4853 , - 310 , - 1139 , - 2284 , - 3745 , - 466 , - 2559 , - 4968 , - 2637 , - 622 , - 3979 , - 2596 , - 1529 , - 778 , - 343 , - 224 , - 421 , - 934 , - 1763 , - 2908 , - 4369 , - 1090 , - 3183 , - 536 , - 3261 , - 1246 , - 4603 , - 3220 , - 2153 , - 1402 , - 967 , - 848 , - 1045 , - 1558 , - 2387 , - 3532 , - 4993 , - 1714 , - 3807 , - 1160 , - 3885 , - 1870 , - 171 , - 3844 , - 2777 , - 2026 , - 1591 , - 1472 , - 1669 , - 2182 , - 3011 , - 4156 , - 561 , - 2338 , - 4431 , - 1784 , - 4509 , - 2494 , - 795 , - 4468 , - 3401 , - 2650 , - 2215 , - 2096 , - 2293 , - 2806 , - 3635 , - 4780 , - 1185 , - 2962 , - 5055 , - 2408 , - 77 , - 3118 , - 1419 , - 36 , - 4025 , - 3274 , - 2839 , - 2720 , - 2917 , - 3430 , - 4259 , - 348 , - 1809 , - 3586 , - 623 , - 3032 , - 701 , - 3742 , - 2043 , - 660 , - 4649 , - 3898 , - 3463 , - 3344 , - 3541 , - 4054 , - 4883 , - 972 , - 2433 , - 4210 , - 1247 , - 3656 , - 1325 , - 4366 , - 2667 , - 1284 , - 217 , - 4522 , - 4087 , - 3968 , - 4165 , - 4678 , - 451 , - 1596 , - 3057 , - 4834 , - 1871 , - 4280 , - 1949 , - 4990 , - 3291 , - 1908 , - 841 , - 90 , - 4711 , - 4592 , - 4789 , - 246 , - 1075 , - 2220 , - 3681 , - 402 , - 2495 , - 4904 , - 2573 , - 558 , - 3915 , - 2532 , - 1465 , - 714 , - 279 , - 160 , - 357 , - 870 , - 1699 , - 2844 , - 4305 , - 1026 , - 3119 , - 472 , - 3197 , - 1182 , - 4539 , - 3156 , - 2089 , - 1338 , - 903 , - 784 , - 981 , - 1494 , - 2323 , - 3468 , - 4929 , - 1650 , - 3743 , - 1096 , - 3821 , - 1806 , - 107 , - 3780 , - 2713 , - 1962 , - 1527 , - 1408 , - 1605 , - 2118 , - 2947 , - 4092 , - 497 , - 2274 , - 4367 , - 1720 , - 4445 , - 2430 , - 731 , - 4404 , - 3337 , - 2586 , - 2151 , - 2032 , - 2229 , - 2742 , - 3571 , - 4716 , - 1121 , - 2898 , - 4991 , - 2344 , - 13 , - 3054 , - 1355 , - 5028 , - 3961 , - 3210 , - 2775 , - 2656 , - 2853 , - 3366 , - 4195 , - 284 , - 1745 , - 3522 , - 559 , - 2968 , - 637 , - 3678 , - 1979 , - 596 , - 4585 , - 3834 , - 3399 , - 3280 , - 3477 , - 3990 , - 4819 , - 908 , - 2369 , - 4146 , - 1183 , - 3592 , - 1261 , - 4302 , - 2603 , - 1220 , - 153 , - 4458 , - 4023 , - 3904 , - 4101 , - 4614 , - 387 , - 1532 , - 2993 , - 4770 , - 1807 , - 4216 , - 1885 , - 4926 , - 3227 , - 1844 , - 777 , - 26 , - 4647 , - 4528 , - 4725 , - 182 , - 1011 , - 2156 , - 3617 , - 338 , - 2431 , - 4840 , - 2509 , - 494 , - 3851 , - 2468 , - 1401 , - 650 , - 215 , - 96 , - 293 , - 806 , - 1635 , - 2780 , - 4241 , - 962 , - 3055 , - 408 , - 3133 , - 1118 , - 4475 , - 3092 , - 2025 , - 1274 , - 839 , - 720 , - 917 , - 1430 , - 2259 , - 3404 , - 4865 , - 1586 , - 3679 , - 1032 , - 3757 , - 1742 , - 43 , - 3716 , - 2649 , - 1898 , - 1463 , - 1344 , - 1541 , - 2054 , - 2883 , - 4028 , - 433 , - 2210 , - 4303 , - 1656 , - 4381 , - 2366 , - 667 , - 4340 , - 3273 , - 2522 , - 2087 , - 1968 , - 2165 , - 2678 , - 3507 , - 4652 , - 1057 , - 2834 , - 4927 , - 2280 , - 5005 , - 2990 , - 1291 , - 4964 , - 3897 , - 3146 , - 2711 , - 2592 , - 2789 , - 3302 , - 4131 , - 220 , - 1681 , - 3458 , - 495 , - 2904 , - 573 , - 3614 , - 1915 , - 532 , - 4521 , - 3770 , - 3335 , - 3216 , - 3413 , - 3926 , - 4755 , - 844 , - 2305 , - 4082 , - 1119 , - 3528 , - 1197 , - 4238 , - 2539 , - 1156 , - 89 , - 4394 , - 3959 , - 3840 , - 4037 , - 4550 , - 323 , - 1468 , - 2929 , - 4706 , - 1743 , - 4152 , - 1821 , - 4862 , - 3163 , - 1780 , - 713 , - 5018 , - 4583 , - 4464 , - 4661 , - 118 , - 947 , - 2092 , - 3553 , - 274 , - 2367 , - 4776 , - 2445 , - 430 , - 3787 , - 2404 , - 1337 , - 586 , - 151 , - 32 , - 229 , - 742 , - 1571 , - 2716 , - 4177 , - 898 , - 2991 , - 344 , - 3069 , - 1054 , - 4411 , - 3028 , - 1961 , - 1210 , - 775 , - 656 , - 853 , - 1366 , - 2195 , - 3340 , - 4801 , - 1522 , - 3615 , - 968 , - 3693 , - 1678 , - 5035 , - 3652 , - 2585 , - 1834 , - 1399 , - 1280 , - 1477 , - 1990 , - 2819 , - 3964 , - 369 , - 2146 , - 4239 , - 1592 , - 4317 , - 2302 , - 603 , - 4276 , - 3209 , - 2458 , - 2023 , - 1904 , - 2101 , - 2614 , - 3443 , - 4588 , - 993 , - 2770 , - 4863 , - 2216 , - 4941 , - 2926 , - 1227 , - 4900 , - 3833 , - 3082 , - 2647 , - 2528 , - 2725 , - 3238 , - 4067 , - 156 , - 1617 , - 3394 , - 431 , - 2840 , - 509 , - 3550 , - 1851 , - 468 , - 4457 , - 3706 , - 3271 , - 3152 , - 3349 , - 3862 , - 4691 , - 780 , - 2241 , - 4018 , - 1055 , - 3464 , - 1133 , - 4174 , - 2475 , - 1092 , - 25 , - 4330 , - 3895 , - 3776 , - 3973 , - 4486 , - 259 , - 1404 , - 2865 , - 4642 , - 1679 , - 4088 , - 1757 , - 4798 , - 3099 , - 1716 , - 649 , - 4954 , - 4519 , - 4400 , - 4597 , - 54 , - 883 , - 2028 , - 3489 , - 210 , - 2303 , - 4712 , - 2381 , - 366 , - 3723 , - 2340 , - 1273 , - 522 , - 87 , - 5024 , - 165 , - 678 , - 1507 , - 2652 , - 4113 , - 834 , - 2927 , - 280 , - 3005 , - 990 , - 4347 , - 2964 , - 1897 , - 1146 , - 711 , - 592 , - 789 , - 1302 , - 2131 , - 3276 , - 4737 , - 1458 , - 3551 , - 904 , - 3629 , - 1614 , - 4971 , - 3588 , - 2521 , - 1770 , - 1335 , - 1216 , - 1413 , - 1926 , - 2755 , - 3900 , - 305 , - 2082 , - 4175 , - 1528 , - 4253 , - 2238 , - 539 , - 4212 , - 3145 , - 2394 , - 1959 , - 1840 , - 2037 , - 2550 , - 3379 , - 4524 , - 929 , - 2706 , - 4799 , - 2152 , - 4877 , - 2862 , - 1163 , - 4836 , - 3769 , - 3018 , - 2583 , - 2464 , - 2661 , - 3174 , - 4003 , - 92 , - 1553 , - 3330 , - 367 , - 2776 , - 445 , - 3486 , - 1787 , - 404 , - 4393 , - 3642 , - 3207 , - 3088 , - 3285 , - 3798 , - 4627 , - 716 , - 2177 , - 3954 , - 991 , - 3400 , - 1069 , - 4110 , - 2411 , - 1028 , - 5017 , - 4266 , - 3831 , - 3712 , - 3909 , - 4422 , - 195 , - 1340 , - 2801 , - 4578 , - 1615 , - 4024 , - 1693 , - 4734 , - 3035 , - 1652 , - 585 , - 4890 , - 4455 , - 4336 , - 4533 , - 5046 , - 819 , - 1964 , - 3425 , - 146 , - 2239 , - 4648 , - 2317 , - 302 , - 3659 , - 2276 , - 1209 , - 458 , - 23 , - 4960 , - 101 , - 614 , - 1443 , - 2588 , - 4049 , - 770 , - 2863 , - 216 , - 2941 , - 926 , - 4283 , - 2900 , - 1833 , - 1082 , - 647 , - 528 , - 725 , - 1238 , - 2067 , - 3212 , - 4673 , - 1394 , - 3487 , - 840 , - 3565 , - 1550 , - 4907 , - 3524 , - 2457 , - 1706 , - 1271 , - 1152 , - 1349 , - 1862 , - 2691 , - 3836 , - 241 , - 2018 , - 4111 , - 1464 , - 4189 , - 2174 , - 475 , - 4148 , - 3081 , - 2330 , - 1895 , - 1776 , - 1973 , - 2486 , - 3315 , - 4460 , - 865 , - 2642 , - 4735 , - 2088 , - 4813 , - 2798 , - 1099 , - 4772 , - 3705 , - 2954 , - 2519 , - 2400 , - 2597 , - 3110 , - 3939 , - 28 , - 1489 , - 3266 , - 303 , - 2712 , - 381 , - 3422 , - 1723 , - 340 , - 4329 , - 3578 , - 3143 , - 3024 , - 3221 , - 3734 , - 4563 , - 652 , - 2113 , - 3890 , - 927 , - 3336 , - 1005 , - 4046 , - 2347 , - 964 , - 4953 , - 4202 , - 3767 , - 3648 , - 3845 , - 4358 , - 131 , - 1276 , - 2737 , - 4514 , - 1551 , - 3960 , - 1629 , - 4670 , - 2971 , - 1588 , - 521 , - 4826 , - 4391 , - 4272 , - 4469 , - 4982 , - 755 , - 1900 , - 3361 , - 82 , - 2175 , - 4584 , - 2253 , - 238 , - 3595 , - 2212 , - 1145 , - 394 , - 5015 , - 4896 , - 37 , - 550 , - 1379 , - 2524 , - 3985 , - 706 , - 2799 , - 152 , - 2877 , - 862 , - 4219 , - 2836 , - 1769 , - 1018 , - 583 , - 464 , - 661 , - 1174 , - 2003 , - 3148 , - 4609 , - 1330 , - 3423 , - 776 , - 3501 , - 1486 , - 4843 , - 3460 , - 2393 , - 1642 , - 1207 , - 1088 , - 1285 , - 1798 , - 2627 , - 3772 , - 177 , - 1954 , - 4047 , - 1400 , - 4125 , - 2110 , - 411 , - 4084 , - 3017 , - 2266 , - 1831 , - 1712 , - 1909 , - 2422 , - 3251 , - 4396 , - 801 , - 2578 , - 4671 , - 2024 , - 4749 , - 2734 , - 1035 , - 4708 , - 3641 , - 2890 , - 2455 , - 2336 , - 2533 , - 3046 , - 3875 , - 5020 , - 1425 , - 3202 , - 239 , - 2648 , - 317 , - 3358 , - 1659 , - 276 , - 4265 , - 3514 , - 3079 , - 2960 , - 3157 , - 3670 , - 4499 , - 588 , - 2049 , - 3826 , - 863 , - 3272 , - 941 , - 3982 , - 2283 , - 900 , - 4889 , - 4138 , - 3703 , - 3584 , - 3781 , - 4294 , - 67 , - 1212 , - 2673 , - 4450 , - 1487 , - 3896 , - 1565 , - 4606 , - 2907 , - 1524 , - 457 , - 4762 , - 4327 , - 4208 , - 4405 , - 4918 , - 691 , - 1836 , - 3297 , - 18 , - 2111 , - 4520 , - 2189 , - 174 , - 3531 , - 2148 , - 1081 , - 330 , - 4951 , - 4832 , - 5029 , - 486 , - 1315 , - 2460 , - 3921 , - 642 , - 2735 , - 88 , - 2813 , - 798 , - 4155 , - 2772 , - 1705 , - 954 , - 519 , - 400 , - 597 , - 1110 , - 1939 , - 3084 , - 4545 , - 1266 , - 3359 , - 712 , - 3437 , - 1422 , - 4779 , - 3396 , - 2329 , - 1578 , - 1143 , - 1024 , - 1221 , - 1734 , - 2563 , - 3708 , - 113 , - 1890 , - 3983 , - 1336 , - 4061 , - 2046 , - 347 , - 4020 , - 2953 , - 2202 , - 1767 , - 1648 , - 1845 , - 2358 , - 3187 , - 4332 , - 737 , - 2514 , - 4607 , - 1960 , - 4685 , - 2670 , - 971 , - 4644 , - 3577 , - 2826 , - 2391 , - 2272 , - 2469 , - 2982 , - 3811 , - 4956 , - 1361 , - 3138 , - 175 , - 2584 , - 253 , - 3294 , - 1595 , - 212 , - 4201 , - 3450 , - 3015 , - 2896 , - 3093 , - 3606 , - 4435 , - 524 , - 1985 , - 3762 , - 799 , - 3208 , - 877 , - 3918 , - 2219 , - 836 , - 4825 , - 4074 , - 3639 , - 3520 , - 3717 , - 4230 , - 3 , - 1148 , - 2609 , - 4386 , - 1423 , - 3832 , - 1501 , - 4542 , - 2843 , - 1460 , - 393 , - 4698 , - 4263 , - 4144 , - 4341 , - 4854 , - 627 , - 1772 , - 3233 , - 5010 , - 2047 , - 4456 , - 2125 , - 110 , - 3467 , - 2084 , - 1017 , - 266 , - 4887 , - 4768 , - 4965 , - 422 , - 1251 , - 2396 , - 3857 , - 578 , - 2671 , - 24 , - 2749 , - 734 , - 4091 , - 2708 , - 1641 , - 890 , - 455 , - 336 , - 533 , - 1046 , - 1875 , - 3020 , - 4481 , - 1202 , - 3295 , - 648 , - 3373 , - 1358 , - 4715 , - 3332 , - 2265 , - 1514 , - 1079 , - 960 , - 1157 , - 1670 , - 2499 , - 3644 , - 49 , - 1826 , - 3919 , - 1272 , - 3997 , - 1982 , - 283 , - 3956 , - 2889 , - 2138 , - 1703 , - 1584 , - 1781 , - 2294 , - 3123 , - 4268 , - 673 , - 2450 , - 4543 , - 1896 , - 4621 , - 2606 , - 907 , - 4580 , - 3513 , - 2762 , - 2327 , - 2208 , - 2405 , - 2918 , - 3747 , - 4892 , - 1297 , - 3074 , - 111 , - 2520 , - 189 , - 3230 , - 1531 , - 148 , - 4137 , - 3386 , - 2951 , - 2832 , - 3029 , - 3542 , - 4371 , - 460 , - 1921 , - 3698 , - 735 , - 3144 , - 813 , - 3854 , - 2155 , - 772 , - 4761 , - 4010 , - 3575 , - 3456 , - 3653 , - 4166 , - 4995 , - 1084 , - 2545 , - 4322 , - 1359 , - 3768 , - 1437 , - 4478 , - 2779 , - 1396 , - 329 , - 4634 , - 4199 , - 4080 , - 4277 , - 4790 , - 563 , - 1708 , - 3169 , - 4946 , - 1983 , - 4392 , - 2061 , - 46 , - 3403 , - 2020 , - 953 , - 202 , - 4823 , - 4704 , - 4901 , - 358 , - 1187 , - 2332 , - 3793 , - 514 , - 2607 , - 5016 , - 2685 , - 670 , - 4027 , - 2644 , - 1577 , - 826 , - 391 , - 272 , - 469 , - 982 , - 1811 , - 2956 , - 4417 , - 1138 , - 3231 , - 584 , - 3309 , - 1294 , - 4651 , - 3268 , - 2201 , - 1450 , - 1015 , - 896 , - 1093 , - 1606 , - 2435 , - 3580 , - 5041 , - 1762 , - 3855 , - 1208 , - 3933 , - 1918 , - 219 , - 3892 , - 2825 , - 2074 , - 1639 , - 1520 , - 1717 , - 2230 , - 3059 , - 4204 , - 609 , - 2386 , - 4479 , - 1832 , - 4557 , - 2542 , - 843 , - 4516 , - 3449 , - 2698 , - 2263 , - 2144 , - 2341 , - 2854 , - 3683 , - 4828 , - 1233 , - 3010 , - 47 , - 2456 , - 125 , - 3166 , - 1467 , - 84 , - 4073 , - 3322 , - 2887 , - 2768 , - 2965 , - 3478 , - 4307 , - 396 , - 1857 , - 3634 , - 671 , - 3080 , - 749 , - 3790 , - 2091 , - 708 , - 4697 , - 3946 , - 3511 , - 3392 , - 3589 , - 4102 , - 4931 , - 1020 , - 2481 , - 4258 , - 1295 , - 3704 , - 1373 , - 4414 , - 2715 , - 1332 , - 265 , - 4570 , - 4135 , - 4016 , - 4213 , - 4726 , - 499 , - 1644 , - 3105 , - 4882 , - 1919 , - 4328 , - 1997 , - 5038 , - 3339 , - 1956 , - 889 , - 138 , - 4759 , - 4640 , - 4837 , - 294 , - 1123 , - 2268 , - 3729 , - 450 , - 2543 , - 4952 , - 2621 , - 606 , - 3963 , - 2580 , - 1513 , - 762 , - 327 , - 208 , - 405 , - 918 , - 1747 , - 2892 , - 4353 , - 1074 , - 3167 , - 520 , - 3245 , - 1230 , - 4587 , - 3204 , - 2137 , - 1386 , - 951 , - 832 , - 1029 , - 1542 , - 2371 , - 3516 , - 4977 , - 1698 , - 3791 , - 1144 , - 3869 , - 1854 , - 155 , - 3828 , - 2761 , - 2010 , - 1575 , - 1456 , - 1653 , - 2166 , - 2995 , - 4140 , - 545 , - 2322 , - 4415 , - 1768 , - 4493 , - 2478 , - 779 , - 4452 , - 3385 , - 2634 , - 2199 , - 2080 , - 2277 , - 2790 , - 3619 , - 4764 , - 1169 , - 2946 , - 5039 , - 2392 , - 61 , - 3102 , - 1403 , - 20 , - 4009 , - 3258 , - 2823 , - 2704 , - 2901 , - 3414 , - 4243 , - 332 , - 1793 , - 3570 , - 607 , - 3016 , - 685 , - 3726 , - 2027 , - 644 , - 4633 , - 3882 , - 3447 , - 3328 , - 3525 , - 4038 , - 4867 , - 956 , - 2417 , - 4194 , - 1231 , - 3640 , - 1309 , - 4350 , - 2651 , - 1268 , - 201 , - 4506 , - 4071 , - 3952 , - 4149 , - 4662 , - 435 , - 1580 , - 3041 , - 4818 , - 1855 , - 4264 , - 1933 , - 4974 , - 3275 , - 1892 , - 825 , - 74 , - 4695 , - 4576 , - 4773 , - 230 , - 1059 , - 2204 , - 3665 , - 386 , - 2479 , - 4888 , - 2557 , - 542 , - 3899 , - 2516 , - 1449 , - 698 , - 263 , - 144 , - 341 , - 854 , - 1683 , - 2828 , - 4289 , - 1010 , - 3103 , - 456 , - 3181 , - 1166 , - 4523 , - 3140 , - 2073 , - 1322 , - 887 , - 768 , - 965 , - 1478 , - 2307 , - 3452 , - 4913 , - 1634 , - 3727 , - 1080 , - 3805 , - 1790 , - 91 , - 3764 , - 2697 , - 1946 , - 1511 , - 1392 , - 1589 , - 2102 , - 2931 , - 4076 , - 481 , - 2258 , - 4351 , - 1704 , - 4429 , - 2414 , - 715 , - 4388 , - 3321 , - 2570 , - 2135 , - 2016 , - 2213 , - 2726 , - 3555 , - 4700 , - 1105 , - 2882 , - 4975 , - 2328 , - 5053 , - 3038 , - 1339 , - 5012 , - 3945 , - 3194 , - 2759 , - 2640 , - 2837 , - 3350 , - 4179 , - 268 , - 1729 , - 3506 , - 543 , - 2952 , - 621 , - 3662 , - 1963 , - 580 , - 4569 , - 3818 , - 3383 , - 3264 , - 3461 , - 3974 , - 4803 , - 892 , - 2353 , - 4130 , - 1167 , - 3576 , - 1245 , - 4286 , - 2587 , - 1204 , - 137 , - 4442 , - 4007 , - 3888 , - 4085 , - 4598 , - 371 , - 1516 , - 2977 , - 4754 , - 1791 , - 4200 , - 1869 , - 4910 , - 3211 , - 1828 , - 761 , - 10 , - 4631 , - 4512 , - 4709 , - 166 , - 995 , - 2140 , - 3601 , - 322 , - 2415 , - 4824 , - 2493 , - 478 , - 3835 , - 2452 , - 1385 , - 634 , - 199 , - 80 , - 277 , - 790 , - 1619 , - 2764 , - 4225 , - 946 , - 3039 , - 392 , - 3117 , - 1102 , - 4459 , - 3076 , - 2009 , - 1258 , - 823 , - 704 , - 901 , - 1414 , - 2243 , - 3388 , - 4849 , - 1570 , - 3663 , - 1016 , - 3741 , - 1726 , - 27 , - 3700 , - 2633 , - 1882 , - 1447 , - 1328 , - 1525 , - 2038 , - 2867 , - 4012 , - 417 , - 2194 , - 4287 , - 1640 , - 4365 , - 2350 , - 651 , - 4324 , - 3257 , - 2506 , - 2071 , - 1952 , - 2149 , - 2662 , - 3491 , - 4636 , - 1041 , - 2818 , - 4911 , - 2264 , - 4989 , - 2974 , - 1275 , - 4948 , - 3881 , - 3130 , - 2695 , - 2576 , - 2773 , - 3286 , - 4115 , - 204 , - 1665 , - 3442 , - 479 , - 2888 , - 557 , - 3598 , - 1899 , - 516 , - 4505 , - 3754 , - 3319 , - 3200 , - 3397 , - 3910 , - 4739 , - 828 , - 2289 , - 4066 , - 1103 , - 3512 , - 1181 , - 4222 , - 2523 , - 1140 , - 73 , - 4378 , - 3943 , - 3824 , - 4021 , - 4534 , - 307 , - 1452 , - 2913 , - 4690 , - 1727 , - 4136 , - 1805 , - 4846 , - 3147 , - 1764 , - 697 , - 5002 , - 4567 , - 4448 , - 4645 , - 102 , - 931 , - 2076 , - 3537 , - 258 , - 2351 , - 4760 , - 2429 , - 414 , - 3771 , - 2388 , - 1321 , - 570 , - 135 , - 16 , - 213 , - 726 , - 1555 , - 2700 , - 4161 , - 882 , - 2975 , - 328 , - 3053 , - 1038 , - 4395 , - 3012 , - 1945 , - 1194 , - 759 , - 640 , - 837 , - 1350 , - 2179 , - 3324 , - 4785 , - 1506 , - 3599 , - 952 , - 3677 , - 1662 , - 5019 , - 3636 , - 2569 , - 1818 , - 1383 , - 1264 , - 1461 , - 1974 , - 2803 , - 3948 , - 353 , - 2130 , - 4223 , - 1576 , - 4301 , - 2286 , - 587 , - 4260 , - 3193 , - 2442 , - 2007 , - 1888 , - 2085 , - 2598 , - 3427 , - 4572 , - 977 , - 2754 , - 4847 , - 2200 , - 4925 , - 2910 , - 1211 , - 4884 , - 3817 , - 3066 , - 2631 , - 2512 , - 2709 , - 3222 , - 4051 , - 140 , - 1601 , - 3378 , - 415 , - 2824 , - 493 , - 3534 , - 1835 , - 452 , - 4441 , - 3690 , - 3255 , - 3136 , - 3333 , - 3846 , - 4675 , - 764 , - 2225 , - 4002 , - 1039 , - 3448 , - 1117 , - 4158 , - 2459 , - 1076 , - 9 , - 4314 , - 3879 , - 3760 , - 3957 , - 4470 , - 243 , - 1388 , - 2849 , - 4626 , - 1663 , - 4072 , - 1741 , - 4782 , - 3083 , - 1700 , - 633 , - 4938 , - 4503 , - 4384 , - 4581 , - 38 , - 867 , - 2012 , - 3473 , - 194 , - 2287 , - 4696 , - 2365 , - 350 , - 3707 , - 2324 , - 1257 , - 506 , - 71 , - 5008 , - 149 , - 662 , - 1491 , - 2636 , - 4097 , - 818 , - 2911 , - 264 , - 2989 , - 974 , - 4331 , - 2948 , - 1881 , - 1130 , - 695 , - 576 , - 773 , - 1286 , - 2115 , - 3260 , - 4721 , - 1442 , - 3535 , - 888 , - 3613 , - 1598 , - 4955 , - 3572 , - 2505 , - 1754 , - 1319 , - 1200 , - 1397 , - 1910 , - 2739 , - 3884 , - 289 , - 2066 , - 4159 , - 1512 , - 4237 , - 2222 , - 523 , - 4196 , - 3129 , - 2378 , - 1943 , - 1824 , - 2021 , - 2534 , - 3363 , - 4508 , - 913 , - 2690 , - 4783 , - 2136 , - 4861 , - 2846 , - 1147 , - 4820 , - 3753 , - 3002 , - 2567 , - 2448 , - 2645 , - 3158 , - 3987 , - 76 , - 1537 , - 3314 , - 351 , - 2760 , - 429 , - 3470 , - 1771 , - 388 , - 4377 , - 3626 , - 3191 , - 3072 , - 3269 , - 3782 , - 4611 , - 700 , - 2161 , - 3938 , - 975 , - 3384 , - 1053 , - 4094 , - 2395 , - 1012 , - 5001 , - 4250 , - 3815 , - 3696 , - 3893 , - 4406 , - 179 , - 1324 , - 2785 , - 4562 , - 1599 , - 4008 , - 1677 , - 4718 , - 3019 , - 1636 , - 569 , - 4874 , - 4439 , - 4320 , - 4517 , - 5030 , - 803 , - 1948 , - 3409 , - 130 , - 2223 , - 4632 , - 2301 , - 286 , - 3643 , - 2260 , - 1193 , - 442 , - 7 , - 4944 , - 85 , - 598 , - 1427 , - 2572 , - 4033 , - 754 , - 2847 , - 200 , - 2925 , - 910 , - 4267 , - 2884 , - 1817 , - 1066 , - 631 , - 512 , - 709 , - 1222 , - 2051 , - 3196 , - 4657 , - 1378 , - 3471 , - 824 , - 3549 , - 1534 , - 4891 , - 3508 , - 2441 , - 1690 , - 1255 , - 1136 , - 1333 , - 1846 , - 2675 , - 3820 , - 225 , - 2002 , - 4095 , - 1448 , - 4173 , - 2158 , - 459 , - 4132 , - 3065 , - 2314 , - 1879 , - 1760 , - 1957 , - 2470 , - 3299 , - 4444 , - 849 , - 2626 , - 4719 , - 2072 , - 4797 , - 2782 , - 1083 , - 4756 , - 3689 , - 2938 , - 2503 , - 2384 , - 2581 , - 3094 , - 3923 , - 12 , - 1473 , - 3250 , - 287 , - 2696 , - 365 , - 3406 , - 1707 , - 324 , - 4313 , - 3562 , - 3127 , - 3008 , - 3205 , - 3718 , - 4547 , - 636 , - 2097 , - 3874 , - 911 , - 3320 , - 989 , - 4030 , - 2331 , - 948 , - 4937 , - 4186 , - 3751 , - 3632 , - 3829 , - 4342 , - 115 , - 1260 , - 2721 , - 4498 , - 1535 , - 3944 , - 1613 , - 4654 , - 2955 , - 1572 , - 505 , - 4810 , - 4375 , - 4256 , - 4453 , - 4966 , - 739 , - 1884 , - 3345 , - 66 , - 2159 , - 4568 , - 2237 , - 222 , - 3579 , - 2196 , - 1129 , - 378 , - 4999 , - 4880 , - 21 , - 534 , - 1363 , - 2508 , - 3969 , - 690 , - 2783 , - 136 , - 2861 , - 846 , - 4203 , - 2820 , - 1753 , - 1002 , - 567 , - 448 , - 645 , - 1158 , - 1987 , - 3132 , - 4593 , - 1314 , - 3407 , - 760 , - 3485 , - 1470 , - 4827 , - 3444 , - 2377 , - 1626 , - 1191 , - 1072 , - 1269 , - 1782 , - 2611 , - 3756 , - 161 , - 1938 , - 4031 , - 1384 , - 4109 , - 2094 , - 395 , - 4068 , - 3001 , - 2250 , - 1815 , - 1696 , - 1893 , - 2406 , - 3235 , - 4380 , - 785 , - 2562 , - 4655 , - 2008 , - 4733 , - 2718 , - 1019 , - 4692 , - 3625 , - 2874 , - 2439 , - 2320 , - 2517 , - 3030 , - 3859 , - 5004 , - 1409 , - 3186 , - 223 , - 2632 , - 301 , - 3342 , - 1643 , - 260 , - 4249 , - 3498 , - 3063 , - 2944 , - 3141 , - 3654 , - 4483 , - 572 , - 2033 , - 3810 , - 847 , - 3256 , - 925 , - 3966 , - 2267 , - 884 , - 4873 , - 4122 , - 3687 , - 3568 , - 3765 , - 4278 , - 51 , - 1196 , - 2657 , - 4434 , - 1471 , - 3880 , - 1549 , - 4590 , - 2891 , - 1508 , - 441 , - 4746 , - 4311 , - 4192 , - 4389 , - 4902 , - 675 , - 1820 , - 3281 , - 2 , - 2095 , - 4504 , - 2173 , - 158 , - 3515 , - 2132 , - 1065 , - 314 , - 4935 , - 4816 , - 5013 , - 470 , - 1299 , - 2444 , - 3905 , - 626 , - 2719 , - 72 , - 2797 , - 782 , - 4139 , - 2756 , - 1689 , - 938 , - 503 , - 384 , - 581 , - 1094 , - 1923 , - 3068 , - 4529 , - 1250 , - 3343 , - 696 , - 3421 , - 1406 , - 4763 , - 3380 , - 2313 , - 1562 , - 1127 , - 1008 , - 1205 , - 1718 , - 2547 , - 3692 , - 97 , - 1874 , - 3967 , - 1320 , - 4045 , - 2030 , - 331 , - 4004 , - 2937 , - 2186 , - 1751 , - 1632 , - 1829 , - 2342 , - 3171 , - 4316 , - 721 , - 2498 , - 4591 , - 1944 , - 4669 , - 2654 , - 955 , - 4628 , - 3561 , - 2810 , - 2375 , - 2256 , - 2453 , - 2966 , - 3795 , - 4940 , - 1345 , - 3122 , - 159 , - 2568 , - 237 , - 3278 , - 1579 , - 196 , - 4185 , - 3434 , - 2999 , - 2880 , - 3077 , - 3590 , - 4419 , - 508 , - 1969 , - 3746 , - 783 , - 3192 , - 861 , - 3902 , - 2203 , - 820 , - 4809 , - 4058 , - 3623 , - 3504 , - 3701 , - 4214 , - 5043 , - 1132 , - 2593 , - 4370 , - 1407 , - 3816 , - 1485 , - 4526 , - 2827 , - 1444 , - 377 , - 4682 , - 4247 , - 4128 , - 4325 , - 4838 , - 611 , - 1756 , - 3217 , - 4994 , - 2031 , - 4440 , - 2109 , - 94 , - 3451 , - 2068 , - 1001 , - 250 , - 4871 , - 4752 , - 4949 , - 406 , - 1235 , - 2380 , - 3841 , - 562 , - 2655 , - 8 , - 2733 , - 718 , - 4075 , - 2692 , - 1625 , - 874 , - 439 , - 320 , - 517 , - 1030 , - 1859 , - 3004 , - 4465 , - 1186 , - 3279 , - 632 , - 3357 , - 1342 , - 4699 , - 3316 , - 2249 , - 1498 , - 1063 , - 944 , - 1141 , - 1654 , - 2483 , - 3628 , - 33 , - 1810 , - 3903 , - 1256 , - 3981 , - 1966 , - 267 , - 3940 , - 2873 , - 2122 , - 1687 , - 1568 , - 1765 , - 2278 , - 3107 , - 4252 , - 657 , - 2434 , - 4527 , - 1880 , - 4605 , - 2590 , - 891 , - 4564 , - 3497 , - 2746 , - 2311 , - 2192 , - 2389 , - 2902 , - 3731 , - 4876 , - 1281 , - 3058 , - 95 , - 2504 , - 173 , - 3214 , - 1515 , - 132 , - 4121 , - 3370 , - 2935 , - 2816 , - 3013 , - 3526 , - 4355 , - 444 , - 1905 , - 3682 , - 719 , - 3128 , - 797 , - 3838 , - 2139 , - 756 , - 4745 , - 3994 , - 3559 , - 3440 , - 3637 , - 4150 , - 4979 , - 1068 , - 2529 , - 4306 , - 1343 , - 3752 , - 1421 , - 4462 , - 2763 , - 1380 , - 313 , - 4618 , - 4183 , - 4064 , - 4261 , - 4774 , - 547 , - 1692 , - 3153 , - 4930 , - 1967 , - 4376 , - 2045 , - 30 , - 3387 , - 2004 , - 937 , - 186 , - 4807 , - 4688 , - 4885 , - 342 , - 1171 , - 2316 , - 3777 , - 498 , - 2591 , - 5000 , - 2669 , - 654 , - 4011 , - 2628 , - 1561 , - 810 , - 375 , - 256 , - 453 , - 966 , - 1795 , - 2940 , - 4401 , - 1122 , - 3215 , - 568 , - 3293 , - 1278 , - 4635 , - 3252 , - 2185 , - 1434 , - 999 , - 880 , - 1077 , - 1590 , - 2419 , - 3564 , - 5025 , - 1746 , - 3839 , - 1192 , - 3917 , - 1902 , - 203 , - 3876 , - 2809 , - 2058 , - 1623 , - 1504 , - 1701 , - 2214 , - 3043 , - 4188 , - 593 , - 2370 , - 4463 , - 1816 , - 4541 , - 2526 , - 827 , - 4500 , - 3433 , - 2682 , - 2247 , - 2128 , - 2325 , - 2838 , - 3667 , - 4812 , - 1217 , - 2994 , - 31 , - 2440 , - 109 , - 3150 , - 1451 , - 68 , - 4057 , - 3306 , - 2871 , - 2752 , - 2949 , - 3462 , - 4291 , - 380 , - 1841 , - 3618 , - 655 , - 3064 , - 733 , - 3774 , - 2075 , - 692 , - 4681 , - 3930 , - 3495 , - 3376 , - 3573 , - 4086 , - 4915 , - 1004 , - 2465 , - 4242 , - 1279 , - 3688 , - 1357 , - 4398 , - 2699 , - 1316 , - 249 , - 4554 , - 4119 , - 4000 , - 4197 , - 4710 , - 483 , - 1628 , - 3089 , - 4866 , - 1903 , - 4312 , - 1981 , - 5022 , - 3323 , - 1940 , - 873 , - 122 , - 4743 , - 4624 , - 4821 , - 278 , - 1107 , - 2252 , - 3713 , - 434 , - 2527 , - 4936 , - 2605 , - 590 , - 3947 , - 2564 , - 1497 , - 746 , - 311 , - 192 , - 389 , - 902 , - 1731 , - 2876 , - 4337 , - 1058 , - 3151 , - 504 , - 3229 , - 1214 , - 4571 , - 3188 , - 2121 , - 1370 , - 935 , - 816 , - 1013 , - 1526 , - 2355 , - 3500 , - 4961 , - 1682 , - 3775 , - 1128 , - 3853 , - 1838 , - 139 , - 3812 , - 2745 , - 1994 , - 1559 , - 1440 , - 1637 , - 2150 , - 2979 , - 4124 , - 529 , - 2306 , - 4399 , - 1752 , - 4477 , - 2462 , - 763 , - 4436 , - 3369 , - 2618 , - 2183 , - 2064 , - 2261 , - 2774 , - 3603 , - 4748 , - 1153 , - 2930 , - 5023 , - 2376 , - 45 , - 3086 , - 1387 , - 4 , - 3993 , - 3242 , - 2807 , - 2688 , - 2885 , - 3398 , - 4227 , - 316 , - 1777 , - 3554 , - 591 , - 3000 , - 669 , - 3710 , - 2011 , - 628 , - 4617 , - 3866 , - 3431 , - 3312 , - 3509 , - 4022 , - 4851 , - 940 , - 2401 , - 4178 , - 1215 , - 3624 , - 1293 , - 4334 , - 2635 , - 1252 , - 185 , - 4490 , - 4055 , - 3936 , - 4133 , - 4646 , - 419 , - 1564 , - 3025 , - 4802 , - 1839 , - 4248 , - 1917 , - 4958 , - 3259 , - 1876 , - 809 , - 58 , - 4679 , - 4560 , - 4757 , - 214 , - 1043 , - 2188 , - 3649 , - 370 , - 2463 , - 4872 , - 2541 , - 526 , - 3883 , - 2500 , - 1433 , - 682 , - 247 , - 128 , - 325 , - 838 , - 1667 , - 2812 , - 4273 , - 994 , - 3087 , - 440 , - 3165 , - 1150 , - 4507 , - 3124 , - 2057 , - 1306 , - 871 , - 752 , - 949 , - 1462 , - 2291 , - 3436 , - 4897 , - 1618 , - 3711 , - 1064 , - 3789 , - 1774 , - 75 , - 3748 , - 2681 , - 1930 , - 1495 , - 1376 , - 1573 , - 2086 , - 2915 , - 4060 , - 465 , - 2242 , - 4335 , - 1688 , - 4413 , - 2398 , - 699 , - 4372 , - 3305 , - 2554 , - 2119 , - 2000 , - 2197 , - 2710 , - 3539 , - 4684 , - 1089 , - 2866 , - 4959 , - 2312 , - 5037 , - 3022 , - 1323 , - 4996 , - 3929 , - 3178 , - 2743 , - 2624 , - 2821 , - 3334 , - 4163 , - 252 , - 1713 , - 3490 , - 527 , - 2936 , - 605 , - 3646 , - 1947 , - 564 , - 4553 , - 3802 , - 3367 , - 3248 , - 3445 , - 3958 , - 4787 , - 876 , - 2337 , - 4114 , - 1151 , - 3560 , - 1229 , - 4270 , - 2571 , - 1188 , - 121 , - 4426 , - 3991 , - 3872 , - 4069 , - 4582 , - 355 , - 1500 , - 2961 , - 4738 , - 1775 , - 4184 , - 1853 , - 4894 , - 3195 , - 1812 , - 745 , - 5050 , - 4615 , - 4496 , - 4693 , - 150 , - 979 , - 2124 , - 3585 , - 306 , - 2399 , - 4808 , - 2477 , - 462 , - 3819 , - 2436 , - 1369 , - 618 , - 183 , - 64 , - 261 , - 774 , - 1603 , - 2748 , - 4209 , - 930 , - 3023 , - 376 , - 3101 , - 1086 , - 4443 , - 3060 , - 1993 , - 1242 , - 807 , - 688 , - 885 , - 1398 , - 2227 , - 3372 , - 4833 , - 1554 , - 3647 , - 1000 , - 3725 , - 1710 , - 11 , - 3684 , - 2617 , - 1866 , - 1431 , - 1312 , - 1509 , - 2022 , - 2851 , - 3996 , - 401 , - 2178 , - 4271 , - 1624 , - 4349 , - 2334 , - 635 , - 4308 , - 3241 , - 2490 , - 2055 , - 1936 , - 2133 , - 2646 , - 3475 , - 4620 , - 1025 , - 2802 , - 4895 , - 2248 , - 4973 , - 2958 , - 1259 , - 4932 , - 3865 , - 3114 , - 2679 , - 2560 , - 2757 , - 3270 , - 4099 , - 188 , - 1649 , - 3426 , - 463 , - 2872 , - 541 , - 3582 , - 1883 , - 500 , - 4489 , - 3738 , - 3303 , - 3184 , - 3381 , - 3894 , - 4723 , - 812 , - 2273 , - 4050 , - 1087 , - 3496 , - 1165 , - 4206 , - 2507 , - 1124 , - 57 , - 4362 , - 3927 , - 3808 , - 4005 , - 4518 , - 291 , - 1436 , - 2897 , - 4674 , - 1711 , - 4120 , - 1789 , - 4830 , - 3131 , - 1748 , - 681 , - 4986 , - 4551 , - 4432 , - 4629 , - 86 , - 915 , - 2060 , - 3521 , - 242 , - 2335 , - 4744 , - 2413 , - 398 , - 3755 , - 2372 , - 1305 , - 554 , - 119 , - 0 , - 119 , - 398 , - 837 , - 1436 , - 2195 , - 3114 , - 4193 , - 312 , - 1711 , - 3270 , - 4989 , - 1748 , - 3787 , - 866 , - 3225 , - 624 , - 3303 , - 1022 , - 4021 , - 2060 , - 259 , - 3738 , - 2257 , - 936 , - 4895 , - 3894 , - 3053 , - 2372 , - 1851 , - 1490 , - 1289 , - 1248 , - 1367 , - 1646 , - 2085 , - 2684 , - 3443 , - 4362 , - 321 , - 1560 , - 2959 , - 4518 , - 1117 , - 2996 , - 5035 , - 2114 , - 4473 , - 1872 , - 4551 , - 2270 , - 149 , - 3308 , - 1507 , - 4986 , - 3505 , - 2184 , - 1023 , - 22 , - 4301 , - 3620 , - 3099 , - 2738 , - 2537 , - 2496 , - 2615 , - 2894 , - 3333 , - 3932 , - 4691 , - 490 , - 1569 , - 2808 , - 4207 , - 646 , - 2365 , - 4244 , - 1163 , - 3362 , - 601 , - 3120 , - 679 , - 3518 , - 1397 , - 4556 , - 2755 , - 1114 , - 4753 , - 3432 , - 2271 , - 1270 , - 429 , - 4868 , - 4347 , - 3986 , - 3785 , - 3744 , - 3863 , - 4142 , - 4581 , - 60 , - 819 , - 1738 , - 2817 , - 4056 , - 335 , - 1894 , - 3613 , - 372 , - 2411 , - 4610 , - 1849 , - 4368 , - 1927 , - 4766 , - 2645 , - 684 , - 4003 , - 2362 , - 881 , - 4680 , - 3519 , - 2518 , - 1677 , - 996 , - 475 , - 114 , - 5033 , - 4992 , - 5111 , - 270 , - 709 , - 1308 , - 2067 , - 2986 , - 4065 , - 184 , - 1583 , - 3142 , - 4861 , - 1620 , - 3659 , - 738 , - 3097 , - 496 , - 3175 , - 894 , - 3893 , - 1932 , - 131 , - 3610 , - 2129 , - 808 , - 4767 , - 3766 , - 2925 , - 2244 , - 1723 , - 1362 , - 1161 , - 1120 , - 1239 , - 1518 , - 1957 , - 2556 , - 3315 , - 4234 , - 193 , - 1432 , - 2831 , - 4390 , - 989 , - 2868 , - 4907 , - 1986 , - 4345 , - 1744 , - 4423 , - 2142 , - 21 , - 3180 , - 1379 , - 4858 , - 3377 , - 2056 , - 895 , - 5014 , - 4173 , - 3492 , - 2971 , - 2610 , - 2409 , - 2368 , - 2487 , - 2766 , - 3205 , - 3804 , - 4563 , - 362 , - 1441 , - 2680 , - 4079 , - 518 , - 2237 , - 4116 , - 1035 , - 3234 , - 473 , - 2992 , - 551 , - 3390 , - 1269 , - 4428 , - 2627 , - 986 , - 4625 , - 3304 , - 2143 , - 1142 , - 301 , - 4740 , - 4219 , - 3858 , - 3657 , - 3616 , - 3735 , - 4014 , - 4453 , - 5052 , - 691 , - 1610 , - 2689 , - 3928 , - 207 , - 1766 , - 3485 , - 244 , - 2283 , - 4482 , - 1721 , - 4240 , - 1799 , - 4638 , - 2517 , - 556 , - 3875 , - 2234 , - 753 , - 4552 , - 3391 , - 2390 , - 1549 , - 868 , - 347 , - 5106 , - 4905 , - 4864 , - 4983 , - 142 , - 581 , - 1180 , - 1939 , - 2858 , - 3937 , - 56 , - 1455 , - 3014 , - 4733 , - 1492 , - 3531 , - 610 , - 2969 , - 368 , - 3047 , - 766 , - 3765 , - 1804 , - 3 , - 3482 , - 2001 , - 680 , - 4639 , - 3638 , - 2797 , - 2116 , - 1595 , - 1234 , - 1033 , - 992 , - 1111 , - 1390 , - 1829 , - 2428 , - 3187 , - 4106 , - 65 , - 1304 , - 2703 , - 4262 , - 861 , - 2740 , - 4779 , - 1858 , - 4217 , - 1616 , - 4295 , - 2014 , - 5013 , - 3052 , - 1251 , - 4730 , - 3249 , - 1928 , - 767 , - 4886 , - 4045 , - 3364 , - 2843 , - 2482 , - 2281 , - 2240 , - 2359 , - 2638 , - 3077 , - 3676 , - 4435 , - 234 , - 1313 , - 2552 , - 3951 , - 390 , - 2109 , - 3988 , - 907 , - 3106 , - 345 , - 2864 , - 423 , - 3262 , - 1141 , - 4300 , - 2499 , - 858 , - 4497 , - 3176 , - 2015 , - 1014 , - 173 , - 4612 , - 4091 , - 3730 , - 3529 , - 3488 , - 3607 , - 3886 , - 4325 , - 4924 , - 563 , - 1482 , - 2561 , - 3800 , - 79 , - 1638 , - 3357 , - 116 , - 2155 , - 4354 , - 1593 , - 4112 , - 1671 , - 4510 , - 2389 , - 428 , - 3747 , - 2106 , - 625 , - 4424 , - 3263 , - 2262 , - 1421 , - 740 , - 219 , - 4978 , - 4777 , - 4736 , - 4855 , - 14 , - 453 , - 1052 , - 1811 , - 2730 , - 3809 , - 5048 , - 1327 , - 2886 , - 4605 , - 1364 , - 3403 , - 482 , - 2841 , - 240 , - 2919 , - 638 , - 3637 , - 1676 , - 4995 , - 3354 , - 1873 , - 552 , - 4511 , - 3510 , - 2669 , - 1988 , - 1467 , - 1106 , - 905 , - 864 , - 983 , - 1262 , - 1701 , - 2300 , - 3059 , - 3978 , - 5057 , - 1176 , - 2575 , - 4134 , - 733 , - 2612 , - 4651 , - 1730 , - 4089 , - 1488 , - 4167 , - 1886 , - 4885 , - 2924 , - 1123 , - 4602 , - 3121 , - 1800 , - 639 , - 4758 , - 3917 , - 3236 , - 2715 , - 2354 , - 2153 , - 2112 , - 2231 , - 2510 , - 2949 , - 3548 , - 4307 , - 106 , - 1185 , - 2424 , - 3823 , - 262 , - 1981 , - 3860 , - 779 , - 2978 , - 217 , - 2736 , - 295 , - 3134 , - 1013 , - 4172 , - 2371 , - 730 , - 4369 , - 3048 , - 1887 , - 886 , - 45 , - 4484 , - 3963 , - 3602 , - 3401 , - 3360 , - 3479 , - 3758 , - 4197 , - 4796 , - 435 , - 1354 , - 2433 , - 3672 , - 5071 , - 1510 , - 3229 , - 5108 , - 2027 , - 4226 , - 1465 , - 3984 , - 1543 , - 4382 , - 2261 , - 300 , - 3619 , - 1978 , - 497 , - 4296 , - 3135 , - 2134 , - 1293 , - 612 , - 91 , - 4850 , - 4649 , - 4608 , - 4727 , - 5006 , - 325 , - 924 , - 1683 , - 2602 , - 3681 , - 4920 , - 1199 , - 2758 , - 4477 , - 1236 , - 3275 , - 354 , - 2713 , - 112 , - 2791 , - 510 , - 3509 , - 1548 , - 4867 , - 3226 , - 1745 , - 424 , - 4383 , - 3382 , - 2541 , - 1860 , - 1339 , - 978 , - 777 , - 736 , - 855 , - 1134 , - 1573 , - 2172 , - 2931 , - 3850 , - 4929 , - 1048 , - 2447 , - 4006 , - 605 , - 2484 , - 4523 , - 1602 , - 3961 , - 1360 , - 4039 , - 1758 , - 4757 , - 2796 , - 995 , - 4474 , - 2993 , - 1672 , - 511 , - 4630 , - 3789 , - 3108 , - 2587 , - 2226 , - 2025 , - 1984 , - 2103 , - 2382 , - 2821 , - 3420 , - 4179 , - 5098 , - 1057 , - 2296 , - 3695 , - 134 , - 1853 , - 3732 , - 651 , - 2850 , - 89 , - 2608 , - 167 , - 3006 , - 885 , - 4044 , - 2243 , - 602 , - 4241 , - 2920 , - 1759 , - 758 , - 5037 , - 4356 , - 3835 , - 3474 , - 3273 , - 3232 , - 3351 , - 3630 , - 4069 , - 4668 , - 307 , - 1226 , - 2305 , - 3544 , - 4943 , - 1382 , - 3101 , - 4980 , - 1899 , - 4098 , - 1337 , - 3856 , - 1415 , - 4254 , - 2133 , - 172 , - 3491 , - 1850 , - 369 , - 4168 , - 3007 , - 2006 , - 1165 , - 484 , - 5083 , - 4722 , - 4521 , - 4480 , - 4599 , - 4878 , - 197 , - 796 , - 1555 , - 2474 , - 3553 , - 4792 , - 1071 , - 2630 , - 4349 , - 1108 , - 3147 , - 226 , - 2585 , - 5104 , - 2663 , - 382 , - 3381 , - 1420 , - 4739 , - 3098 , - 1617 , - 296 , - 4255 , - 3254 , - 2413 , - 1732 , - 1211 , - 850 , - 649 , - 608 , - 727 , - 1006 , - 1445 , - 2044 , - 2803 , - 3722 , - 4801 , - 920 , - 2319 , - 3878 , - 477 , - 2356 , - 4395 , - 1474 , - 3833 , - 1232 , - 3911 , - 1630 , - 4629 , - 2668 , - 867 , - 4346 , - 2865 , - 1544 , - 383 , - 4502 , - 3661 , - 2980 , - 2459 , - 2098 , - 1897 , - 1856 , - 1975 , - 2254 , - 2693 , - 3292 , - 4051 , - 4970 , - 929 , - 2168 , - 3567 , - 6 , - 1725 , - 3604 , - 523 , - 2722 , - 5081 , - 2480 , - 39 , - 2878 , - 757 , - 3916 , - 2115 , - 474 , - 4113 , - 2792 , - 1631 , - 630 , - 4909 , - 4228 , - 3707 , - 3346 , - 3145 , - 3104 , - 3223 , - 3502 , - 3941 , - 4540 , - 179 , - 1098 , - 2177 , - 3416 , - 4815 , - 1254 , - 2973 , - 4852 , - 1771 , - 3970 , - 1209 , - 3728 , - 1287 , - 4126 , - 2005 , - 44 , - 3363 , - 1722 , - 241 , - 4040 , - 2879 , - 1878 , - 1037 , - 356 , - 4955 , - 4594 , - 4393 , - 4352 , - 4471 , - 4750 , - 69 , - 668 , - 1427 , - 2346 , - 3425 , - 4664 , - 943 , - 2502 , - 4221 , - 980 , - 3019 , - 98 , - 2457 , - 4976 , - 2535 , - 254 , - 3253 , - 1292 , - 4611 , - 2970 , - 1489 , - 168 , - 4127 , - 3126 , - 2285 , - 1604 , - 1083 , - 722 , - 521 , - 480 , - 599 , - 878 , - 1317 , - 1916 , - 2675 , - 3594 , - 4673 , - 792 , - 2191 , - 3750 , - 349 , - 2228 , - 4267 , - 1346 , - 3705 , - 1104 , - 3783 , - 1502 , - 4501 , - 2540 , - 739 , - 4218 , - 2737 , - 1416 , - 255 , - 4374 , - 3533 , - 2852 , - 2331 , - 1970 , - 1769 , - 1728 , - 1847 , - 2126 , - 2565 , - 3164 , - 3923 , - 4842 , - 801 , - 2040 , - 3439 , - 4998 , - 1597 , - 3476 , - 395 , - 2594 , - 4953 , - 2352 , - 5031 , - 2750 , - 629 , - 3788 , - 1987 , - 346 , - 3985 , - 2664 , - 1503 , - 502 , - 4781 , - 4100 , - 3579 , - 3218 , - 3017 , - 2976 , - 3095 , - 3374 , - 3813 , - 4412 , - 51 , - 970 , - 2049 , - 3288 , - 4687 , - 1126 , - 2845 , - 4724 , - 1643 , - 3842 , - 1081 , - 3600 , - 1159 , - 3998 , - 1877 , - 5036 , - 3235 , - 1594 , - 113 , - 3912 , - 2751 , - 1750 , - 909 , - 228 , - 4827 , - 4466 , - 4265 , - 4224 , - 4343 , - 4622 , - 5061 , - 540 , - 1299 , - 2218 , - 3297 , - 4536 , - 815 , - 2374 , - 4093 , - 852 , - 2891 , - 5090 , - 2329 , - 4848 , - 2407 , - 126 , - 3125 , - 1164 , - 4483 , - 2842 , - 1361 , - 40 , - 3999 , - 2998 , - 2157 , - 1476 , - 955 , - 594 , - 393 , - 352 , - 471 , - 750 , - 1189 , - 1788 , - 2547 , - 3466 , - 4545 , - 664 , - 2063 , - 3622 , - 221 , - 2100 , - 4139 , - 1218 , - 3577 , - 976 , - 3655 , - 1374 , - 4373 , - 2412 , - 611 , - 4090 , - 2609 , - 1288 , - 127 , - 4246 , - 3405 , - 2724 , - 2203 , - 1842 , - 1641 , - 1600 , - 1719 , - 1998 , - 2437 , - 3036 , - 3795 , - 4714 , - 673 , - 1912 , - 3311 , - 4870 , - 1469 , - 3348 , - 267 , - 2466 , - 4825 , - 2224 , - 4903 , - 2622 , - 501 , - 3660 , - 1859 , - 218 , - 3857 , - 2536 , - 1375 , - 374 , - 4653 , - 3972 , - 3451 , - 3090 , - 2889 , - 2848 , - 2967 , - 3246 , - 3685 , - 4284 , - 5043 , - 842 , - 1921 , - 3160 , - 4559 , - 998 , - 2717 , - 4596 , - 1515 , - 3714 , - 953 , - 3472 , - 1031 , - 3870 , - 1749 , - 4908 , - 3107 , - 1466 , - 5105 , - 3784 , - 2623 , - 1622 , - 781 , - 100 , - 4699 , - 4338 , - 4137 , - 4096 , - 4215 , - 4494 , - 4933 , - 412 , - 1171 , - 2090 , - 3169 , - 4408 , - 687 , - 2246 , - 3965 , - 724 , - 2763 , - 4962 , - 2201 , - 4720 , - 2279 , - 5118 , - 2997 , - 1036 , - 4355 , - 2714 , - 1233 , - 5032 , - 3871 , - 2870 , - 2029 , - 1348 , - 827 , - 466 , - 265 , - 224 , - 343 , - 622 , - 1061 , - 1660 , - 2419 , - 3338 , - 4417 , - 536 , - 1935 , - 3494 , - 93 , - 1972 , - 4011 , - 1090 , - 3449 , - 848 , - 3527 , - 1246 , - 4245 , - 2284 , - 483 , - 3962 , - 2481 , - 1160 , - 5119 , - 4118 , - 3277 , - 2596 , - 2075 , - 1714 , - 1513 , - 1472 , - 1591 , - 1870 , - 2309 , - 2908 , - 3667 , - 4586 , - 545 , - 1784 , - 3183 , - 4742 , - 1341 , - 3220 , - 139 , - 2338 , - 4697 , - 2096 , - 4775 , - 2494 , - 373 , - 3532 , - 1731 , - 90 , - 3729 , - 2408 , - 1247 , - 246 , - 4525 , - 3844 , - 3323 , - 2962 , - 2761 , - 2720 , - 2839 , - 3118 , - 3557 , - 4156 , - 4915 , - 714 , - 1793 , - 3032 , - 4431 , - 870 , - 2589 , - 4468 , - 1387 , - 3586 , - 825 , - 3344 , - 903 , - 3742 , - 1621 , - 4780 , - 2979 , - 1338 , - 4977 , - 3656 , - 2495 , - 1494 , - 653 , - 5092 , - 4571 , - 4210 , - 4009 , - 3968 , - 4087 , - 4366 , - 4805 , - 284 , - 1043 , - 1962 , - 3041 , - 4280 , - 559 , - 2118 , - 3837 , - 596 , - 2635 , - 4834 , - 2073 , - 4592 , - 2151 , - 4990 , - 2869 , - 908 , - 4227 , - 2586 , - 1105 , - 4904 , - 3743 , - 2742 , - 1901 , - 1220 , - 699 , - 338 , - 137 , - 96 , - 215 , - 494 , - 933 , - 1532 , - 2291 , - 3210 , - 4289 , - 408 , - 1807 , - 3366 , - 5085 , - 1844 , - 3883 , - 962 , - 3321 , - 720 , - 3399 , - 1118 , - 4117 , - 2156 , - 355 , - 3834 , - 2353 , - 1032 , - 4991 , - 3990 , - 3149 , - 2468 , - 1947 , - 1586 , - 1385 , - 1344 , - 1463 , - 1742 , - 2181 , - 2780 , - 3539 , - 4458 , - 417 , - 1656 , - 3055 , - 4614 , - 1213 , - 3092 , - 11 , - 2210 , - 4569 , - 1968 , - 4647 , - 2366 , - 245 , - 3404 , - 1603 , - 5082 , - 3601 , - 2280 , - 1119 , - 118 , - 4397 , - 3716 , - 3195 , - 2834 , - 2633 , - 2592 , - 2711 , - 2990 , - 3429 , - 4028 , - 4787 , - 586 , - 1665 , - 2904 , - 4303 , - 742 , - 2461 , - 4340 , - 1259 , - 3458 , - 697 , - 3216 , - 775 , - 3614 , - 1493 , - 4652 , - 2851 , - 1210 , - 4849 , - 3528 , - 2367 , - 1366 , - 525 , - 4964 , - 4443 , - 4082 , - 3881 , - 3840 , - 3959 , - 4238 , - 4677 , - 156 , - 915 , - 1834 , - 2913 , - 4152 , - 431 , - 1990 , - 3709 , - 468 , - 2507 , - 4706 , - 1945 , - 4464 , - 2023 , - 4862 , - 2741 , - 780 , - 4099 , - 2458 , - 977 , - 4776 , - 3615 , - 2614 , - 1773 , - 1092 , - 571 , - 210 , - 9 , - 5088 , - 87 , - 366 , - 805 , - 1404 , - 2163 , - 3082 , - 4161 , - 280 , - 1679 , - 3238 , - 4957 , - 1716 , - 3755 , - 834 , - 3193 , - 592 , - 3271 , - 990 , - 3989 , - 2028 , - 227 , - 3706 , - 2225 , - 904 , - 4863 , - 3862 , - 3021 , - 2340 , - 1819 , - 1458 , - 1257 , - 1216 , - 1335 , - 1614 , - 2053 , - 2652 , - 3411 , - 4330 , - 289 , - 1528 , - 2927 , - 4486 , - 1085 , - 2964 , - 5003 , - 2082 , - 4441 , - 1840 , - 4519 , - 2238 , - 117 , - 3276 , - 1475 , - 4954 , - 3473 , - 2152 , - 991 , - 5110 , - 4269 , - 3588 , - 3067 , - 2706 , - 2505 , - 2464 , - 2583 , - 2862 , - 3301 , - 3900 , - 4659 , - 458 , - 1537 , - 2776 , - 4175 , - 614 , - 2333 , - 4212 , - 1131 , - 3330 , - 569 , - 3088 , - 647 , - 3486 , - 1365 , - 4524 , - 2723 , - 1082 , - 4721 , - 3400 , - 2239 , - 1238 , - 397 , - 4836 , - 4315 , - 3954 , - 3753 , - 3712 , - 3831 , - 4110 , - 4549 , - 28 , - 787 , - 1706 , - 2785 , - 4024 , - 303 , - 1862 , - 3581 , - 340 , - 2379 , - 4578 , - 1817 , - 4336 , - 1895 , - 4734 , - 2613 , - 652 , - 3971 , - 2330 , - 849 , - 4648 , - 3487 , - 2486 , - 1645 , - 964 , - 443 , - 82 , - 5001 , - 4960 , - 5079 , - 238 , - 677 , - 1276 , - 2035 , - 2954 , - 4033 , - 152 , - 1551 , - 3110 , - 4829 , - 1588 , - 3627 , - 706 , - 3065 , - 464 , - 3143 , - 862 , - 3861 , - 1900 , - 99 , - 3578 , - 2097 , - 776 , - 4735 , - 3734 , - 2893 , - 2212 , - 1691 , - 1330 , - 1129 , - 1088 , - 1207 , - 1486 , - 1925 , - 2524 , - 3283 , - 4202 , - 161 , - 1400 , - 2799 , - 4358 , - 957 , - 2836 , - 4875 , - 1954 , - 4313 , - 1712 , - 4391 , - 2110 , - 5109 , - 3148 , - 1347 , - 4826 , - 3345 , - 2024 , - 863 , - 4982 , - 4141 , - 3460 , - 2939 , - 2578 , - 2377 , - 2336 , - 2455 , - 2734 , - 3173 , - 3772 , - 4531 , - 330 , - 1409 , - 2648 , - 4047 , - 486 , - 2205 , - 4084 , - 1003 , - 3202 , - 441 , - 2960 , - 519 , - 3358 , - 1237 , - 4396 , - 2595 , - 954 , - 4593 , - 3272 , - 2111 , - 1110 , - 269 , - 4708 , - 4187 , - 3826 , - 3625 , - 3584 , - 3703 , - 3982 , - 4421 , - 5020 , - 659 , - 1578 , - 2657 , - 3896 , - 175 , - 1734 , - 3453 , - 212 , - 2251 , - 4450 , - 1689 , - 4208 , - 1767 , - 4606 , - 2485 , - 524 , - 3843 , - 2202 , - 721 , - 4520 , - 3359 , - 2358 , - 1517 , - 836 , - 315 , - 5074 , - 4873 , - 4832 , - 4951 , - 110 , - 549 , - 1148 , - 1907 , - 2826 , - 3905 , - 24 , - 1423 , - 2982 , - 4701 , - 1460 , - 3499 , - 578 , - 2937 , - 336 , - 3015 , - 734 , - 3733 , - 1772 , - 5091 , - 3450 , - 1969 , - 648 , - 4607 , - 3606 , - 2765 , - 2084 , - 1563 , - 1202 , - 1001 , - 960 , - 1079 , - 1358 , - 1797 , - 2396 , - 3155 , - 4074 , - 33 , - 1272 , - 2671 , - 4230 , - 829 , - 2708 , - 4747 , - 1826 , - 4185 , - 1584 , - 4263 , - 1982 , - 4981 , - 3020 , - 1219 , - 4698 , - 3217 , - 1896 , - 735 , - 4854 , - 4013 , - 3332 , - 2811 , - 2450 , - 2249 , - 2208 , - 2327 , - 2606 , - 3045 , - 3644 , - 4403 , - 202 , - 1281 , - 2520 , - 3919 , - 358 , - 2077 , - 3956 , - 875 , - 3074 , - 313 , - 2832 , - 391 , - 3230 , - 1109 , - 4268 , - 2467 , - 826 , - 4465 , - 3144 , - 1983 , - 982 , - 141 , - 4580 , - 4059 , - 3698 , - 3497 , - 3456 , - 3575 , - 3854 , - 4293 , - 4892 , - 531 , - 1450 , - 2529 , - 3768 , - 47 , - 1606 , - 3325 , - 84 , - 2123 , - 4322 , - 1561 , - 4080 , - 1639 , - 4478 , - 2357 , - 396 , - 3715 , - 2074 , - 593 , - 4392 , - 3231 , - 2230 , - 1389 , - 708 , - 187 , - 4946 , - 4745 , - 4704 , - 4823 , - 5102 , - 421 , - 1020 , - 1779 , - 2698 , - 3777 , - 5016 , - 1295 , - 2854 , - 4573 , - 1332 , - 3371 , - 450 , - 2809 , - 208 , - 2887 , - 606 , - 3605 , - 1644 , - 4963 , - 3322 , - 1841 , - 520 , - 4479 , - 3478 , - 2637 , - 1956 , - 1435 , - 1074 , - 873 , - 832 , - 951 , - 1230 , - 1669 , - 2268 , - 3027 , - 3946 , - 5025 , - 1144 , - 2543 , - 4102 , - 701 , - 2580 , - 4619 , - 1698 , - 4057 , - 1456 , - 4135 , - 1854 , - 4853 , - 2892 , - 1091 , - 4570 , - 3089 , - 1768 , - 607 , - 4726 , - 3885 , - 3204 , - 2683 , - 2322 , - 2121 , - 2080 , - 2199 , - 2478 , - 2917 , - 3516 , - 4275 , - 74 , - 1153 , - 2392 , - 3791 , - 230 , - 1949 , - 3828 , - 747 , - 2946 , - 185 , - 2704 , - 263 , - 3102 , - 981 , - 4140 , - 2339 , - 698 , - 4337 , - 3016 , - 1855 , - 854 , - 13 , - 4452 , - 3931 , - 3570 , - 3369 , - 3328 , - 3447 , - 3726 , - 4165 , - 4764 , - 403 , - 1322 , - 2401 , - 3640 , - 5039 , - 1478 , - 3197 , - 5076 , - 1995 , - 4194 , - 1433 , - 3952 , - 1511 , - 4350 , - 2229 , - 268 , - 3587 , - 1946 , - 465 , - 4264 , - 3103 , - 2102 , - 1261 , - 580 , - 59 , - 4818 , - 4617 , - 4576 , - 4695 , - 4974 , - 293 , - 892 , - 1651 , - 2570 , - 3649 , - 4888 , - 1167 , - 2726 , - 4445 , - 1204 , - 3243 , - 322 , - 2681 , - 80 , - 2759 , - 478 , - 3477 , - 1516 , - 4835 , - 3194 , - 1713 , - 392 , - 4351 , - 3350 , - 2509 , - 1828 , - 1307 , - 946 , - 745 , - 704 , - 823 , - 1102 , - 1541 , - 2140 , - 2899 , - 3818 , - 4897 , - 1016 , - 2415 , - 3974 , - 573 , - 2452 , - 4491 , - 1570 , - 3929 , - 1328 , - 4007 , - 1726 , - 4725 , - 2764 , - 963 , - 4442 , - 2961 , - 1640 , - 479 , - 4598 , - 3757 , - 3076 , - 2555 , - 2194 , - 1993 , - 1952 , - 2071 , - 2350 , - 2789 , - 3388 , - 4147 , - 5066 , - 1025 , - 2264 , - 3663 , - 102 , - 1821 , - 3700 , - 619 , - 2818 , - 57 , - 2576 , - 135 , - 2974 , - 853 , - 4012 , - 2211 , - 570 , - 4209 , - 2888 , - 1727 , - 726 , - 5005 , - 4324 , - 3803 , - 3442 , - 3241 , - 3200 , - 3319 , - 3598 , - 4037 , - 4636 , - 275 , - 1194 , - 2273 , - 3512 , - 4911 , - 1350 , - 3069 , - 4948 , - 1867 , - 4066 , - 1305 , - 3824 , - 1383 , - 4222 , - 2101 , - 140 , - 3459 , - 1818 , - 337 , - 4136 , - 2975 , - 1974 , - 1133 , - 452 , - 5051 , - 4690 , - 4489 , - 4448 , - 4567 , - 4846 , - 165 , - 764 , - 1523 , - 2442 , - 3521 , - 4760 , - 1039 , - 2598 , - 4317 , - 1076 , - 3115 , - 194 , - 2553 , - 5072 , - 2631 , - 350 , - 3349 , - 1388 , - 4707 , - 3066 , - 1585 , - 264 , - 4223 , - 3222 , - 2381 , - 1700 , - 1179 , - 818 , - 617 , - 576 , - 695 , - 974 , - 1413 , - 2012 , - 2771 , - 3690 , - 4769 , - 888 , - 2287 , - 3846 , - 445 , - 2324 , - 4363 , - 1442 , - 3801 , - 1200 , - 3879 , - 1598 , - 4597 , - 2636 , - 835 , - 4314 , - 2833 , - 1512 , - 351 , - 4470 , - 3629 , - 2948 , - 2427 , - 2066 , - 1865 , - 1824 , - 1943 , - 2222 , - 2661 , - 3260 , - 4019 , - 4938 , - 897 , - 2136 , - 3535 , - 5094 , - 1693 , - 3572 , - 491 , - 2690 , - 5049 , - 2448 , - 7 , - 2846 , - 725 , - 3884 , - 2083 , - 442 , - 4081 , - 2760 , - 1599 , - 598 , - 4877 , - 4196 , - 3675 , - 3314 , - 3113 , - 3072 , - 3191 , - 3470 , - 3909 , - 4508 , - 147 , - 1066 , - 2145 , - 3384 , - 4783 , - 1222 , - 2941 , - 4820 , - 1739 , - 3938 , - 1177 , - 3696 , - 1255 , - 4094 , - 1973 , - 12 , - 3331 , - 1690 , - 209 , - 4008 , - 2847 , - 1846 , - 1005 , - 324 , - 4923 , - 4562 , - 4361 , - 4320 , - 4439 , - 4718 , - 37 , - 636 , - 1395 , - 2314 , - 3393 , - 4632 , - 911 , - 2470 , - 4189 , - 948 , - 2987 , - 66 , - 2425 , - 4944 , - 2503 , - 222 , - 3221 , - 1260 , - 4579 , - 2938 , - 1457 , - 136 , - 4095 , - 3094 , - 2253 , - 1572 , - 1051 , - 690 , - 489 , - 448 , - 567 , - 846 , - 1285 , - 1884 , - 2643 , - 3562 , - 4641 , - 760 , - 2159 , - 3718 , - 317 , - 2196 , - 4235 , - 1314 , - 3673 , - 1072 , - 3751 , - 1470 , - 4469 , - 2508 , - 707 , - 4186 , - 2705 , - 1384 , - 223 , - 4342 , - 3501 , - 2820 , - 2299 , - 1938 , - 1737 , - 1696 , - 1815 , - 2094 , - 2533 , - 3132 , - 3891 , - 4810 , - 769 , - 2008 , - 3407 , - 4966 , - 1565 , - 3444 , - 363 , - 2562 , - 4921 , - 2320 , - 4999 , - 2718 , - 597 , - 3756 , - 1955 , - 314 , - 3953 , - 2632 , - 1471 , - 470 , - 4749 , - 4068 , - 3547 , - 3186 , - 2985 , - 2944 , - 3063 , - 3342 , - 3781 , - 4380 , - 19 , - 938 , - 2017 , - 3256 , - 4655 , - 1094 , - 2813 , - 4692 , - 1611 , - 3810 , - 1049 , - 3568 , - 1127 , - 3966 , - 1845 , - 5004 , - 3203 , - 1562 , - 81 , - 3880 , - 2719 , - 1718 , - 877 , - 196 , - 4795 , - 4434 , - 4233 , - 4192 , - 4311 , - 4590 , - 5029 , - 508 , - 1267 , - 2186 , - 3265 , - 4504 , - 783 , - 2342 , - 4061 , - 820 , - 2859 , - 5058 , - 2297 , - 4816 , - 2375 , - 94 , - 3093 , - 1132 , - 4451 , - 2810 , - 1329 , - 8 , - 3967 , - 2966 , - 2125 , - 1444 , - 923 , - 562 , - 361 , - 320 , - 439 , - 718 , - 1157 , - 1756 , - 2515 , - 3434 , - 4513 , - 632 , - 2031 , - 3590 , - 189 , - 2068 , - 4107 , - 1186 , - 3545 , - 944 , - 3623 , - 1342 , - 4341 , - 2380 , - 579 , - 4058 , - 2577 , - 1256 , - 95 , - 4214 , - 3373 , - 2692 , - 2171 , - 1810 , - 1609 , - 1568 , - 1687 , - 1966 , - 2405 , - 3004 , - 3763 , - 4682 , - 641 , - 1880 , - 3279 , - 4838 , - 1437 , - 3316 , - 235 , - 2434 , - 4793 , - 2192 , - 4871 , - 2590 , - 469 , - 3628 , - 1827 , - 186 , - 3825 , - 2504 , - 1343 , - 342 , - 4621 , - 3940 , - 3419 , - 3058 , - 2857 , - 2816 , - 2935 , - 3214 , - 3653 , - 4252 , - 5011 , - 810 , - 1889 , - 3128 , - 4527 , - 966 , - 2685 , - 4564 , - 1483 , - 3682 , - 921 , - 3440 , - 999 , - 3838 , - 1717 , - 4876 , - 3075 , - 1434 , - 5073 , - 3752 , - 2591 , - 1590 , - 749 , - 68 , - 4667 , - 4306 , - 4105 , - 4064 , - 4183 , - 4462 , - 4901 , - 380 , - 1139 , - 2058 , - 3137 , - 4376 , - 655 , - 2214 , - 3933 , - 692 , - 2731 , - 4930 , - 2169 , - 4688 , - 2247 , - 5086 , - 2965 , - 1004 , - 4323 , - 2682 , - 1201 , - 5000 , - 3839 , - 2838 , - 1997 , - 1316 , - 795 , - 434 , - 233 , - 192 , - 311 , - 590 , - 1029 , - 1628 , - 2387 , - 3306 , - 4385 , - 504 , - 1903 , - 3462 , - 61 , - 1940 , - 3979 , - 1058 , - 3417 , - 816 , - 3495 , - 1214 , - 4213 , - 2252 , - 451 , - 3930 , - 2449 , - 1128 , - 5087 , - 4086 , - 3245 , - 2564 , - 2043 , - 1682 , - 1481 , - 1440 , - 1559 , - 1838 , - 2277 , - 2876 , - 3635 , - 4554 , - 513 , - 1752 , - 3151 , - 4710 , - 1309 , - 3188 , - 107 , - 2306 , - 4665 , - 2064 , - 4743 , - 2462 , - 341 , - 3500 , - 1699 , - 58 , - 3697 , - 2376 , - 1215 , - 214 , - 4493 , - 3812 , - 3291 , - 2930 , - 2729 , - 2688 , - 2807 , - 3086 , - 3525 , - 4124 , - 4883 , - 682 , - 1761 , - 3000 , - 4399 , - 838 , - 2557 , - 4436 , - 1355 , - 3554 , - 793 , - 3312 , - 871 , - 3710 , - 1589 , - 4748 , - 2947 , - 1306 , - 4945 , - 3624 , - 2463 , - 1462 , - 621 , - 5060 , - 4539 , - 4178 , - 3977 , - 3936 , - 4055 , - 4334 , - 4773 , - 252 , - 1011 , - 1930 , - 3009 , - 4248 , - 527 , - 2086 , - 3805 , - 564 , - 2603 , - 4802 , - 2041 , - 4560 , - 2119 , - 4958 , - 2837 , - 876 , - 4195 , - 2554 , - 1073 , - 4872 , - 3711 , - 2710 , - 1869 , - 1188 , - 667 , - 306 , - 105 , - 64 , - 183 , - 462 , - 901 , - 1500 , - 2259 , - 3178 , - 4257 , - 376 , - 1775 , - 3334 , - 5053 , - 1812 , - 3851 , - 930 , - 3289 , - 688 , - 3367 , - 1086 , - 4085 , - 2124 , - 323 , - 3802 , - 2321 , - 1000 , - 4959 , - 3958 , - 3117 , - 2436 , - 1915 , - 1554 , - 1353 , - 1312 , - 1431 , - 1710 , - 2149 , - 2748 , - 3507 , - 4426 , - 385 , - 1624 , - 3023 , - 4582 , - 1181 , - 3060 , - 5099 , - 2178 , - 4537 , - 1936 , - 4615 , - 2334 , - 213 , - 3372 , - 1571 , - 5050 , - 3569 , - 2248 , - 1087 , - 86 , - 4365 , - 3684 , - 3163 , - 2802 , - 2601 , - 2560 , - 2679 , - 2958 , - 3397 , - 3996 , - 4755 , - 554 , - 1633 , - 2872 , - 4271 , - 710 , - 2429 , - 4308 , - 1227 , - 3426 , - 665 , - 3184 , - 743 , - 3582 , - 1461 , - 4620 , - 2819 , - 1178 , - 4817 , - 3496 , - 2335 , - 1334 , - 493 , - 4932 , - 4411 , - 4050 , - 3849 , - 3808 , - 3927 , - 4206 , - 4645 , - 124 , - 883 , - 1802 , - 2881 , - 4120 , - 399 , - 1958 , - 3677 , - 436 , - 2475 , - 4674 , - 1913 , - 4432 , - 1991 , - 4830 , - 2709 , - 748 , - 4067 , - 2426 , - 945 , - 4744 , - 3583 , - 2582 , - 1741 , - 1060 , - 539 , - 178 , - 5097 , - 5056 , - 55 , - 334 , - 773 , - 1372 , - 2131 , - 3050 , - 4129 , - 248 , - 1647 , - 3206 , - 4925 , - 1684 , - 3723 , - 802 , - 3161 , - 560 , - 3239 , - 958 , - 3957 , - 1996 , - 195 , - 3674 , - 2193 , - 872 , - 4831 , - 3830 , - 2989 , - 2308 , - 1787 , - 1426 , - 1225 , - 1184 , - 1303 , - 1582 , - 2021 , - 2620 , - 3379 , - 4298 , - 257 , - 1496 , - 2895 , - 4454 , - 1053 , - 2932 , - 4971 , - 2050 , - 4409 , - 1808 , - 4487 , - 2206 , - 85 , - 3244 , - 1443 , - 4922 , - 3441 , - 2120 , - 959 , - 5078 , - 4237 , - 3556 , - 3035 , - 2674 , - 2473 , - 2432 , - 2551 , - 2830 , - 3269 , - 3868 , - 4627 , - 426 , - 1505 , - 2744 , - 4143 , - 582 , - 2301 , - 4180 , - 1099 , - 3298 , - 537 , - 3056 , - 615 , - 3454 , - 1333 , - 4492 , - 2691 , - 1050 , - 4689 , - 3368 , - 2207 , - 1206 , - 365 , - 4804 , - 4283 , - 3922 , - 3721 , - 3680 , - 3799 , - 4078 , - 4517 , - 5116 , - 755 , - 1674 , - 2753 , - 3992 , - 271 , - 1830 , - 3549 , - 308 , - 2347 , - 4546 , - 1785 , - 4304 , - 1863 , - 4702 , - 2581 , - 620 , - 3939 , - 2298 , - 817 , - 4616 , - 3455 , - 2454 , - 1613 , - 932 , - 411 , - 50 , - 4969 , - 4928 , - 5047 , - 206 , - 645 , - 1244 , - 2003 , - 2922 , - 4001 , - 120 , - 1519 , - 3078 , - 4797 , - 1556 , - 3595 , - 674 , - 3033 , - 432 , - 3111 , - 830 , - 3829 , - 1868 , - 67 , - 3546 , - 2065 , - 744 , - 4703 , - 3702 , - 2861 , - 2180 , - 1659 , - 1298 , - 1097 , - 1056 , - 1175 , - 1454 , - 1893 , - 2492 , - 3251 , - 4170 , - 129 , - 1368 , - 2767 , - 4326 , - 925 , - 2804 , - 4843 , - 1922 , - 4281 , - 1680 , - 4359 , - 2078 , - 5077 , - 3116 , - 1315 , - 4794 , - 3313 , - 1992 , - 831 , - 4950 , - 4109 , - 3428 , - 2907 , - 2546 , - 2345 , - 2304 , - 2423 , - 2702 , - 3141 , - 3740 , - 4499 , - 298 , - 1377 , - 2616 , - 4015 , - 454 , - 2173 , - 4052 , - 971 , - 3170 , - 409 , - 2928 , - 487 , - 3326 , - 1205 , - 4364 , - 2563 , - 922 , - 4561 , - 3240 , - 2079 , - 1078 , - 237 , - 4676 , - 4155 , - 3794 , - 3593 , - 3552 , - 3671 , - 3950 , - 4389 , - 4988 , - 627 , - 1546 , - 2625 , - 3864 , - 143 , - 1702 , - 3421 , - 180 , - 2219 , - 4418 , - 1657 , - 4176 , - 1735 , - 4574 , - 2453 , - 492 , - 3811 , - 2170 , - 689 , - 4488 , - 3327 , - 2326 , - 1485 , - 804 , - 283 , - 5042 , - 4841 , - 4800 , - 4919 , - 78 , - 517 , - 1116 , - 1875 , - 2794 , - 3873 , - 5112 , - 1391 , - 2950 , - 4669 , - 1428 , - 3467 , - 546 , - 2905 , - 304 , - 2983 , - 702 , - 3701 , - 1740 , - 5059 , - 3418 , - 1937 , - 616 , - 4575 , - 3574 , - 2733 , - 2052 , - 1531 , - 1170 , - 969 , - 928 , - 1047 , - 1326 , - 1765 , - 2364 , - 3123 , - 4042 , - 1 , - 1240 , - 2639 , - 4198 , - 797 , - 2676 , - 4715 , - 1794 , - 4153 , - 1552 , - 4231 , - 1950 , - 4949 , - 2988 , - 1187 , - 4666 , - 3185 , - 1864 , - 703 , - 4822 , - 3981 , - 3300 , - 2779 , - 2418 , - 2217 , - 2176 , - 2295 , - 2574 , - 3013 , - 3612 , - 4371 , - 170 , - 1249 , - 2488 , - 3887 , - 326 , - 2045 , - 3924 , - 843 , - 3042 , - 281 , - 2800 , - 359 , - 3198 , - 1077 , - 4236 , - 2435 , - 794 , - 4433 , - 3112 , - 1951 , - 950 , - 109 , - 4548 , - 4027 , - 3666 , - 3465 , - 3424 , - 3543 , - 3822 , - 4261 , - 4860 , - 499 , - 1418 , - 2497 , - 3736 , - 15 , - 1574 , - 3293 , - 52 , - 2091 , - 4290 , - 1529 , - 4048 , - 1607 , - 4446 , - 2325 , - 364 , - 3683 , - 2042 , - 561 , - 4360 , - 3199 , - 2198 , - 1357 , - 676 , - 155 , - 4914 , - 4713 , - 4672 , - 4791 , - 5070 , - 389 , - 988 , - 1747 , - 2666 , - 3745 , - 4984 , - 1263 , - 2822 , - 4541 , - 1300 , - 3339 , - 418 , - 2777 , - 176 , - 2855 , - 574 , - 3573 , - 1612 , - 4931 , - 3290 , - 1809 , - 488 , - 4447 , - 3446 , - 2605 , - 1924 , - 1403 , - 1042 , - 841 , - 800 , - 919 , - 1198 , - 1637 , - 2236 , - 2995 , - 3914 , - 4993 , - 1112 , - 2511 , - 4070 , - 669 , - 2548 , - 4587 , - 1666 , - 4025 , - 1424 , - 4103 , - 1822 , - 4821 , - 2860 , - 1059 , - 4538 , - 3057 , - 1736 , - 575 , - 4694 , - 3853 , - 3172 , - 2651 , - 2290 , - 2089 , - 2048 , - 2167 , - 2446 , - 2885 , - 3484 , - 4243 , - 42 , - 1121 , - 2360 , - 3759 , - 198 , - 1917 , - 3796 , - 715 , - 2914 , - 153 , - 2672 , - 231 , - 3070 , - 949 , - 4108 , - 2307 , - 666 , - 4305 , - 2984 , - 1823 , - 822 , - 5101 , - 4420 , - 3899 , - 3538 , - 3337 , - 3296 , - 3415 , - 3694 , - 4133 , - 4732 , - 371 , - 1290 , - 2369 , - 3608 , - 5007 , - 1446 , - 3165 , - 5044 , - 1963 , - 4162 , - 1401 , - 3920 , - 1479 , - 4318 , - 2197 , - 236 , - 3555 , - 1914 , - 433 , - 4232 , - 3071 , - 2070 , - 1229 , - 548 , - 27 , - 4786 , - 4585 , - 4544 , - 4663 , - 4942 , - 261 , - 860 , - 1619 , - 2538 , - 3617 , - 4856 , - 1135 , - 2694 , - 4413 , - 1172 , - 3211 , - 290 , - 2649 , - 48 , - 2727 , - 446 , - 3445 , - 1484 , - 4803 , - 3162 , - 1681 , - 360 , - 4319 , - 3318 , - 2477 , - 1796 , - 1275 , - 914 , - 713 , - 672 , - 791 , - 1070 , - 1509 , - 2108 , - 2867 , - 3786 , - 4865 , - 984 , - 2383 , - 3942 , - 541 , - 2420 , - 4459 , - 1538 , - 3897 , - 1296 , - 3975 , - 1694 , - 4693 , - 2732 , - 931 , - 4410 , - 2929 , - 1608 , - 447 , - 4566 , - 3725 , - 3044 , - 2523 , - 2162 , - 1961 , - 1920 , - 2039 , - 2318 , - 2757 , - 3356 , - 4115 , - 5034 , - 993 , - 2232 , - 3631 , - 70 , - 1789 , - 3668 , - 587 , - 2786 , - 25 , - 2544 , - 103 , - 2942 , - 821 , - 3980 , - 2179 , - 538 , - 4177 , - 2856 , - 1695 , - 694 , - 4973 , - 4292 , - 3771 , - 3410 , - 3209 , - 3168 , - 3287 , - 3566 , - 4005 , - 4604 , - 243 , - 1162 , - 2241 , - 3480 , - 4879 , - 1318 , - 3037 , - 4916 , - 1835 , - 4034 , - 1273 , - 3792 , - 1351 , - 4190 , - 2069 , - 108 , - 3427 , - 1786 , - 305 , - 4104 , - 2943 , - 1942 , - 1101 , - 420 , - 5019 , - 4658 , - 4457 , - 4416 , - 4535 , - 4814 , - 133 , - 732 , - 1491 , - 2410 , - 3489 , - 4728 , - 1007 , - 2566 , - 4285 , - 1044 , - 3083 , - 162 , - 2521 , - 5040 , - 2599 , - 318 , - 3317 , - 1356 , - 4675 , - 3034 , - 1553 , - 232 , - 4191 , - 3190 , - 2349 , - 1668 , - 1147 , - 786 , - 585 , - 544 , - 663 , - 942 , - 1381 , - 1980 , - 2739 , - 3658 , - 4737 , - 856 , - 2255 , - 3814 , - 413 , - 2292 , - 4331 , - 1410 , - 3769 , - 1168 , - 3847 , - 1566 , - 4565 , - 2604 , - 803 , - 4282 , - 2801 , - 1480 , - 319 , - 4438 , - 3597 , - 2916 , - 2395 , - 2034 , - 1833 , - 1792 , - 1911 , - 2190 , - 2629 , - 3228 , - 3987 , - 4906 , - 865 , - 2104 , - 3503 , - 5062 , - 1661 , - 3540 , - 459 , - 2658 , - 5017 , - 2416 , - 5095 , - 2814 , - 693 , - 3852 , - 2051 , - 410 , - 4049 , - 2728 , - 1567 , - 566 , - 4845 , - 4164 , - 3643 , - 3282 , - 3081 , - 3040 , - 3159 , - 3438 , - 3877 , - 4476 , - 115 , - 1034 , - 2113 , - 3352 , - 4751 , - 1190 , - 2909 , - 4788 , - 1707 , - 3906 , - 1145 , - 3664 , - 1223 , - 4062 , - 1941 , - 5100 , - 3299 , - 1658 , - 177 , - 3976 , - 2815 , - 1814 , - 973 , - 292 , - 4891 , - 4530 , - 4329 , - 4288 , - 4407 , - 4686 , - 5 , - 604 , - 1363 , - 2282 , - 3361 , - 4600 , - 879 , - 2438 , - 4157 , - 916 , - 2955 , - 34 , - 2393 , - 4912 , - 2471 , - 190 , - 3189 , - 1228 , - 4547 , - 2906 , - 1425 , - 104 , - 4063 , - 3062 , - 2221 , - 1540 , - 1019 , - 658 , - 457 , - 416 , - 535 , - 814 , - 1253 , - 1852 , - 2611 , - 3530 , - 4609 , - 728 , - 2127 , - 3686 , - 285 , - 2164 , - 4203 , - 1282 , - 3641 , - 1040 , - 3719 , - 1438 , - 4437 , - 2476 , - 675 , - 4154 , - 2673 , - 1352 , - 191 , - 4310 , - 3469 , - 2788 , - 2267 , - 1906 , - 1705 , - 1664 , - 1783 , - 2062 , - 2501 , - 3100 , - 3859 , - 4778 , - 737 , - 1976 , - 3375 , - 4934 , - 1533 , - 3412 , - 331 , - 2530 , - 4889 , - 2288 , - 4967 , - 2686 , - 565 , - 3724 , - 1923 , - 282 , - 3921 , - 2600 , - 1439 , - 438 , - 4717 , - 4036 , - 3515 , - 3154 , - 2953 , - 2912 , - 3031 , - 3310 , - 3749 , - 4348 , - 5107 , - 906 , - 1985 , - 3224 , - 4623 , - 1062 , - 2781 , - 4660 , - 1579 , - 3778 , - 1017 , - 3536 , - 1095 , - 3934 , - 1813 , - 4972 , - 3171 , - 1530 , - 49 , - 3848 , - 2687 , - 1686 , - 845 , - 164 , - 4763 , - 4402 , - 4201 , - 4160 , - 4279 , - 4558 , - 4997 , - 476 , - 1235 , - 2154 , - 3233 , - 4472 , - 751 , - 2310 , - 4029 , - 788 , - 2827 , - 5026 , - 2265 , - 4784 , - 2343 , - 62 , - 3061 , - 1100 , - 4419 , - 2778 , - 1297 , - 5096 , - 3935 , - 2934 , - 2093 , - 1412 , - 891 , - 530 , - 329 , - 288 , - 407 , - 686 , - 1125 , - 1724 , - 2483 , - 3402 , - 4481 , - 600 , - 1999 , - 3558 , - 157 , - 2036 , - 4075 , - 1154 , - 3513 , - 912 , - 3591 , - 1310 , - 4309 , - 2348 , - 547 , - 4026 , - 2545 , - 1224 , - 63 , - 4182 , - 3341 , - 2660 , - 2139 , - 1778 , - 1577 , - 1536 , - 1655 , - 1934 , - 2373 , - 2972 , - 3731 , - 4650 , - 609 , - 1848 , - 3247 , - 4806 , - 1405 , - 3284 , - 203 , - 2402 , - 4761 , - 2160 , - 4839 , - 2558 , - 437 , - 3596 , - 1795 , - 154 , - 3793 , - 2472 , - 1311 , - 310 , - 4589 , - 3908 , - 3387 , - 3026 , - 2825 , - 2784 , - 2903 , - 3182 , - 3621 , - 4220 , - 4979 , - 778 , - 1857 , - 3096 , - 4495 , - 934 , - 2653 , - 4532 , - 1451 , - 3650 , - 889 , - 3408 , - 967 , - 3806 , - 1685 , - 4844 , - 3043 , - 1402 , - 5041 , - 3720 , - 2559 , - 1558 , - 717 , - 36 , - 4635 , - 4274 , - 4073 , - 4032 , - 4151 , - 4430 , - 4869 , - 348 , - 1107 , - 2026 , - 3105 , - 4344 , - 623 , - 2182 , - 3901 , - 660 , - 2699 , - 4898 , - 2137 , - 4656 , - 2215 , - 5054 , - 2933 , - 972 , - 4291 , - 2650 , - 1169 , - 4968 , - 3807 , - 2806 , - 1965 , - 1284 , - 763 , - 402 , - 201 , - 160 , - 279 , - 558 , - 997 , - 1596 , - 2355 , - 3274 , - 4353 , - 472 , - 1871 , - 3430 , - 29 , - 1908 , - 3947 , - 1026 , - 3385 , - 784 , - 3463 , - 1182 , - 4181 , - 2220 , - 419 , - 3898 , - 2417 , - 1096 , - 5055 , - 4054 , - 3213 , - 2532 , - 2011 , - 1650 , - 1449 , - 1408 , - 1527 , - 1806 , - 2245 , - 2844 , - 3603 , - 4522 , - 481 , - 1720 , - 3119 , - 4678 , - 1277 , - 3156 , - 75 , - 2274 , - 4633 , - 2032 , - 4711 , - 2430 , - 309 , - 3468 , - 1667 , - 26 , - 3665 , - 2344 , - 1183 , - 182 , - 4461 , - 3780 , - 3259 , - 2898 , - 2697 , - 2656 , - 2775 , - 3054 , - 3493 , - 4092 , - 4851 , - 650 , - 1729 , - 2968 , - 4367 , - 806 , - 2525 , - 4404 , - 1323 , - 3522 , - 761 , - 3280 , - 839 , - 3678 , - 1557 , - 4716 , - 2915 , - 1274 , - 4913 , - 3592 , - 2431 , - 1430 , - 589 , - 5028 , - 4507 , - 4146 , - 3945 , - 3904 , - 4023 , - 4302 , - 4741 , - 220 , - 979 , - 1898 , - 2977 , - 4216 , - 495 , - 2054 , - 3773 , - 532 , - 2571 , - 4770 , - 2009 , - 4528 , - 2087 , - 4926 , - 2805 , - 844 , - 4163 , - 2522 , - 1041 , - 4840 , - 3679 , - 2678 , - 1837 , - 1156 , - 635 , - 274 , - 73 , - 32 , - 151 , - 430 , - 869 , - 1468 , - 2227 , - 3146 , - 4225 , - 344 , - 1743 , - 3302 , - 5021 , - 1780 , - 3819 , - 898 , - 3257 , - 656 , - 3335 , - 1054 , - 4053 , - 2092 , - 291 , - 3770 , - 2289 , - 968 , - 4927 , - 3926 , - 3085 , - 2404 , - 1883 , - 1522 , - 1321 , - 1280 , - 1399 , - 1678 , - 2117 , - 2716 , - 3475 , - 4394 , - 353 , - 1592 , - 2991 , - 4550 , - 1149 , - 3028 , - 5067 , - 2146 , - 4505 , - 1904 , - 4583 , - 2302 , - 181 , - 3340 , - 1539 , - 5018 , - 3537 , - 2216 , - 1055 , - 54 , - 4333 , - 3652 , - 3131 , - 2770 , - 2569 , - 2528 , - 2647 , - 2926 , - 3365 , - 3964 , - 4723 , - 522 , - 1601 , - 2840 , - 4239 , - 678 , - 2397 , - 4276 , - 1195 , - 3394 , - 633 , - 3152 , - 711 , - 3550 , - 1429 , - 4588 , - 2787 , - 1146 , - 4785 , - 3464 , - 2303 , - 1302 , - 461 , - 4900 , - 4379 , - 4018 , - 3817 , - 3776 , - 3895 , - 4174 , - 4613 , - 92 , - 851 , - 1770 , - 2849 , - 4088 , - 367 , - 1926 , - 3645 , - 404 , - 2443 , - 4642 , - 1881 , - 4400 , - 1959 , - 4798 , - 2677 , - 716 , - 4035 , - 2394 , - 913 , - 4712 , - 3551 , - 2550 , - 1709 , - 1028 , - 507 , - 146 , - 5065 , - 5024 , - 23 , - 302 , - 741 , - 1340 , - 2099 , - 3018 , - 4097 , - 216 , - 1615 , - 3174 , - 4893 , - 1652 , - 3691 , - 770 , - 3129 , - 528 , - 3207 , - 926 , - 3925 , - 1964 , - 163 , - 3642 , - 2161 , - 840 , - 4799 , - 3798 , - 2957 , - 2276 , - 1755 , - 1394 , - 1193 , - 1152 , - 1271 , - 1550 , - 1989 , - 2588 , - 3347 , - 4266 , - 225 , - 1464 , - 2863 , - 4422 , - 1021 , - 2900 , - 4939 , - 2018 , - 4377 , - 1776 , - 4455 , - 2174 , - 53 , - 3212 , - 1411 , - 4890 , - 3409 , - 2088 , - 927 , - 5046 , - 4205 , - 3524 , - 3003 , - 2642 , - 2441 , - 2400 , - 2519 , - 2798 , - 3237 , - 3836 , - 4595 , - 394 , - 1473 , - 2712 , - 4111 , - 550 , - 2269 , - 4148 , - 1067 , - 3266 , - 505 , - 3024 , - 583 , - 3422 , - 1301 , - 4460 , - 2659 , - 1018 , - 4657 , - 3336 , - 2175 , - 1174 , - 333 , - 4772 , - 4251 , - 3890 , - 3689 , - 3648 , - 3767 , - 4046 , - 4485 , - 5084 , - 723 , - 1642 , - 2721 , - 3960 , - 239 , - 1798 , - 3517 , - 276 , - 2315 , - 4514 , - 1753 , - 4272 , - 1831 , - 4670 , - 2549 , - 588 , - 3907 , - 2266 , - 785 , - 4584 , - 3423 , - 2422 , - 1581 , - 900 , - 379 , - 18 , - 4937 , - 4896 , - 5015 , - 174 , - 613 , - 1212 , - 1971 , - 2890 , - 3969 , - 88 , - 1487 , - 3046 , - 4765 , - 1524 , - 3563 , - 642 , - 3001 , - 400 , - 3079 , - 798 , - 3797 , - 1836 , - 35 , - 3514 , - 2033 , - 712 , - 4671 , - 3670 , - 2829 , - 2148 , - 1627 , - 1266 , - 1065 , - 1024 , - 1143 , - 1422 , - 1861 , - 2460 , - 3219 , - 4138 , - 97 , - 1336 , - 2735 , - 4294 , - 893 , - 2772 , - 4811 , - 1890 , - 4249 , - 1648 , - 4327 , - 2046 , - 5045 , - 3084 , - 1283 , - 4762 , - 3281 , - 1960 , - 799 , - 4918 , - 4077 , - 3396 , - 2875 , - 2514 , - 2313 , - 2272 , - 2391 , - 2670 , - 3109 , - 3708 , - 4467 , - 266 , - 1345 , - 2584 , - 3983 , - 422 , - 2141 , - 4020 , - 939 , - 3138 , - 377 , - 2896 , - 455 , - 3294 , - 1173 , - 4332 , - 2531 , - 890 , - 4529 , - 3208 , - 2047 , - 1046 , - 205 , - 4644 , - 4123 , - 3762 , - 3561 , - 3520 , - 3639 , - 3918 , - 4357 , - 4956 , - 595 , - 1514 , - 2593 , - 3832 , - 111 , - 1670 , - 3389 , - 148 , - 2187 , - 4386 , - 1625 , - 4144 , - 1703 , - 4542 , - 2421 , - 460 , - 3779 , - 2138 , - 657 , - 4456 , - 3295 , - 2294 , - 1453 , - 772 , - 251 , - 5010 , - 4809 , - 4768 , - 4887 , - 46 , - 485 , - 1084 , - 1843 , - 2762 , - 3841 , - 5080 , - 1359 , - 2918 , - 4637 , - 1396 , - 3435 , - 514 , - 2873 , - 272 , - 2951 , - 670 , - 3669 , - 1708 , - 5027 , - 3386 , - 1905 , - 584 , - 4543 , - 3542 , - 2701 , - 2020 , - 1499 , - 1138 , - 937 , - 896 , - 1015 , - 1294 , - 1733 , - 2332 , - 3091 , - 4010 , - 5089 , - 1208 , - 2607 , - 4166 , - 765 , - 2644 , - 4683 , - 1762 , - 4121 , - 1520 , - 4199 , - 1918 , - 4917 , - 2956 , - 1155 , - 4634 , - 3153 , - 1832 , - 671 , - 4790 , - 3949 , - 3268 , - 2747 , - 2386 , - 2185 , - 2144 , - 2263 , - 2542 , - 2981 , - 3580 , - 4339 , - 138 , - 1217 , - 2456 , - 3855 , - 294 , - 2013 , - 3892 , - 811 , - 3010 , - 249 , - 2768 , - 327 , - 3166 , - 1045 , - 4204 , - 2403 , - 762 , - 4401 , - 3080 , - 1919 , - 918 , - 77 , - 4516 , - 3995 , - 3634 , - 3433 , - 3392 , - 3511 , - 3790 , - 4229 , - 4828 , - 467 , - 1386 , - 2465 , - 3704 , - 5103 , - 1542 , - 3261 , - 20 , - 2059 , - 4258 , - 1497 , - 4016 , - 1575 , - 4414 , - 2293 , - 332 , - 3651 , - 2010 , - 529 , - 4328 , - 3167 , - 2166 , - 1325 , - 644 , - 123 , - 4882 , - 4681 , - 4640 , - 4759 , - 5038 , - 357 , - 956 , - 1715 , - 2634 , - 3713 , - 4952 , - 1231 , - 2790 , - 4509 , - 1268 , - 3307 , - 386 , - 2745 , - 144 , - 2823 , - 542 , - 3541 , - 1580 , - 4899 , - 3258 , - 1777 , - 456 , - 4415 , - 3414 , - 2573 , - 1892 , - 1371 , - 1010 , - 809 , - 768 , - 887 , - 1166 , - 1605 , - 2204 , - 2963 , - 3882 , - 4961 , - 1080 , - 2479 , - 4038 , - 637 , - 2516 , - 4555 , - 1634 , - 3993 , - 1392 , - 4071 , - 1790 , - 4789 , - 2828 , - 1027 , - 4506 , - 3025 , - 1704 , - 543 , - 4662 , - 3821 , - 3140 , - 2619 , - 2258 , - 2057 , - 2016 , - 2135 , - 2414 , - 2853 , - 3452 , - 4211 , - 10 , - 1089 , - 2328 , - 3727 , - 166 , - 1885 , - 3764 , - 683 , - 2882 , - 121 , - 2640 , - 199 , - 3038 , - 917 , - 4076 , - 2275 , - 634 , - 4273 , - 2952 , - 1791 , - 790 , - 5069 , - 4388 , - 3867 , - 3506 , - 3305 , - 3264 , - 3383 , - 3662 , - 4101 , - 4700 , - 339 , - 1258 , - 2337 , - 3576 , - 4975 , - 1414 , - 3133 , - 5012 , - 1931 , - 4130 , - 1369 , - 3888 , - 1447 , - 4286 , - 2165 , - 204 , - 3523 , - 1882 , - 401 , - 4200 , - 3039 , - 2038 , - 1197 , - 516 , - 5115 , - 4754 , - 4553 , - 4512 , - 4631 , - 4910 , - 229 , - 828 , - 1587 , - 2506 , - 3585 , - 4824 , - 1103 , - 2662 , - 4381 , - 1140 , - 3179 , - 258 , - 2617 , - 16 , - 2695 , - 414 , - 3413 , - 1452 , - 4771 , - 3130 , - 1649 , - 328 , - 4287 , - 3286 , - 2445 , - 1764 , - 1243 , - 882 , - 681 , - 640 , - 759 , - 1038 , - 1477 , - 2076 , - 2835 , - 3754 , - 4833 , - 952 , - 2351 , - 3910 , - 509 , - 2388 , - 4427 , - 1506 , - 3865 , - 1264 , - 3943 , - 1662 , - 4661 , - 2700 , - 899 , - 4378 , - 2897 , - 1576 , - 415 , - 4534 , - 3693 , - 3012 , - 2491 , - 2130 , - 1929 , - 1888 , - 2007 , - 2286 , - 2725 , - 3324 , - 4083 , - 5002 , - 961 , - 2200 , - 3599 , - 38 , - 1757 , - 3636 , - 555 , - 2754 , - 5113 , - 2512 , - 71 , - 2910 , - 789 , - 3948 , - 2147 , - 506 , - 4145 , - 2824 , - 1663 , - 662 , - 4941 , - 4260 , - 3739 , - 3378 , - 3177 , - 3136 , - 3255 , - 3534 , - 3973 , - 4572 , - 211 , - 1130 , - 2209 , - 3448 , - 4847 , - 1286 , - 3005 , - 4884 , - 1803 , - 4002 , - 1241 , - 3760 , - 1319 , - 4158 , - 2037 , - 76 , - 3395 , - 1754 , - 273 , - 4072 , - 2911 , - 1910 , - 1069 , - 388 , - 4987 , - 4626 , - 4425 , - 4384 , - 4503 , - 4782 , - 101 , - 700 , - 1459 , - 2378 , - 3457 , - 4696 , - 975 , - 2534 , - 4253 , - 1012 , - 3051 , - 130 , - 2489 , - 5008 , - 2567 , - 286 , - 3285 , - 1324 , - 4643 , - 3002 , - 1521 , - 200 , - 4159 , - 3158 , - 2317 , - 1636 , - 1115 , - 754 , - 553 , - 512 , - 631 , - 910 , - 1349 , - 1948 , - 2707 , - 3626 , - 4705 , - 824 , - 2223 , - 3782 , - 381 , - 2260 , - 4299 , - 1378 , - 3737 , - 1136 , - 3815 , - 1534 , - 4533 , - 2572 , - 771 , - 4250 , - 2769 , - 1448 , - 287 , - 4406 , - 3565 , - 2884 , - 2363 , - 2002 , - 1801 , - 1760 , - 1879 , - 2158 , - 2597 , - 3196 , - 3955 , - 4874 , - 833 , - 2072 , - 3471 , - 5030 , - 1629 , - 3508 , - 427 , - 2626 , - 4985 , - 2384 , - 5063 , - 2782 , - 661 , - 3820 , - 2019 , - 378 , - 4017 , - 2696 , - 1535 , - 534 , - 4813 , - 4132 , - 3611 , - 3250 , - 3049 , - 3008 , - 3127 , - 3406 , - 3845 , - 4444 , - 83 , - 1002 , - 2081 , - 3320 , - 4719 , - 1158 , - 2877 , - 4756 , - 1675 , - 3874 , - 1113 , - 3632 , - 1191 , - 4030 , - 1909 , - 5068 , - 3267 , - 1626 , - 145 , - 3944 , - 2783 , - 1782 , - 941 , - 260 , - 4859 , - 4498 , - 4297 , - 4256 , - 4375 , - 4654 , - 5093 , - 572 , - 1331 , - 2250 , - 3329 , - 4568 , - 847 , - 2406 , - 4125 , - 884 , - 2923 , - 2 , - 2361 , - 4880 , - 2439 , - 158 , - 3157 , - 1196 , - 4515 , - 2874 , - 1393 , - 72 , - 4031 , - 3030 , - 2189 , - 1508 , - 987 , - 626 , - 425 , - 384 , - 503 , - 782 , - 1221 , - 1820 , - 2579 , - 3498 , - 4577 , - 696 , - 2095 , - 3654 , - 253 , - 2132 , - 4171 , - 1250 , - 3609 , - 1008 , - 3687 , - 1406 , - 4405 , - 2444 , - 643 , - 4122 , - 2641 , - 1320 , - 159 , - 4278 , - 3437 , - 2756 , - 2235 , - 1874 , - 1673 , - 1632 , - 1751 , - 2030 , - 2469 , - 3068 , - 3827 , - 4746 , - 705 , - 1944 , - 3343 , - 4902 , - 1501 , - 3380 , - 299 , - 2498 , - 4857 , - 2256 , - 4935 , - 2654 , - 533 , - 3692 , - 1891 , - 250 , - 3889 , - 2568 , - 1407 , - 406 , - 4685 , - 4004 , - 3483 , - 3122 , - 2921 , - 2880 , - 2999 , - 3278 , - 3717 , - 4316 , - 5075 , - 874 , - 1953 , - 3192 , - 4591 , - 1030 , - 2749 , - 4628 , - 1547 , - 3746 , - 985 , - 3504 , - 1063 , - 3902 , - 1781 , - 4940 , - 3139 , - 1498 , - 17 , - 3816 , - 2655 , - 1654 , - 813 , - 132 , - 4731 , - 4370 , - 4169 , - 4128 , - 4247 , - 4526 , - 4965 , - 444 , - 1203 , - 2122 , - 3201 , - 4440 , - 719 , - 2278 , - 3997 , - 756 , - 2795 , - 4994 , - 2233 , - 4752 , - 2311 , - 30 , - 3029 , - 1068 , - 4387 , - 2746 , - 1265 , - 5064 , - 3903 , - 2902 , - 2061 , - 1380 , - 859 , - 498 , - 297 , - 256 , - 375 , - 654 , - 1093 , - 1692 , - 2451 , - 3370 , - 4449 , - 568 , - 1967 , - 3526 , - 125 , - 2004 , - 4043 , - 1122 , - 3481 , - 880 , - 3559 , - 1278 , - 4277 , - 2316 , - 515 , - 3994 , - 2513 , - 1192 , - 31 , - 4150 , - 3309 , - 2628 , - 2107 , - 1746 , - 1545 , - 1504 , - 1623 , - 1902 , - 2341 , - 2940 , - 3699 , - 4618 , - 577 , - 1816 , - 3215 , - 4774 , - 1373 , - 3252 , - 171 , - 2370 , - 4729 , - 2128 , - 4807 , - 2526 , - 405 , - 3564 , - 1763 , - 122 , - 3761 , - 2440 , - 1279 , - 278 , - 4557 , - 3876 , - 3355 , - 2994 , - 2793 , - 2752 , - 2871 , - 3150 , - 3589 , - 4188 , - 4947 , - 746 , - 1825 , - 3064 , - 4463 , - 902 , - 2621 , - 4500 , - 1419 , - 3618 , - 857 , - 3376 , - 935 , - 3774 , - 1653 , - 4812 , - 3011 , - 1370 , - 5009 , - 3688 , - 2527 , - 1526 , - 685 , - 4 , - 4603 , - 4242 , - 4041 , - 4000 , - 4119 , - 4398 , - 4837 , - 316 , - 1075 , - 1994 , - 3073 , - 4312 , - 591 , - 2150 , - 3869 , - 628 , - 2667 , - 4866 , - 2105 , - 4624 , - 2183 , - 5022 , - 2901 , - 940 , - 4259 , - 2618 , - 1137 , - 4936 , - 3775 , - 2774 , - 1933 , - 1252 , - 731 , - 370 , - 169 , - 128 , - 247 , - 526 , - 965 , - 1564 , - 2323 , - 3242 , - 4321 , - 440 , - 1839 , - 3398 , - 5117 , - 1876 , - 3915 , - 994 , - 3353 , - 752 , - 3431 , - 1150 , - 4149 , - 2188 , - 387 , - 3866 , - 2385 , - 1064 , - 5023 , - 4022 , - 3181 , - 2500 , - 1979 , - 1618 , - 1417 , - 1376 , - 1495 , - 1774 , - 2213 , - 2812 , - 3571 , - 4490 , - 449 , - 1688 , - 3087 , - 4646 , - 1245 , - 3124 , - 43 , - 2242 , - 4601 , - 2000 , - 4679 , - 2398 , - 277 , - 3436 , - 1635 , - 5114 , - 3633 , - 2312 , - 1151 , - 150 , - 4429 , - 3748 , - 3227 , - 2866 , - 2665 , - 2624 , - 2743 , - 3022 , - 3461 , - 4060 , - 4819 , - 618 , - 1697 , - 2936 , - 4335 , - 774 , - 2493 , - 4372 , - 1291 , - 3490 , - 729 , - 3248 , - 807 , - 3646 , - 1525 , - 4684 , - 2883 , - 1242 , - 4881 , - 3560 , - 2399 , - 1398 , - 557 , - 4996 , - 4475 , - 4114 , - 3913 , - 3872 , - 3991 , - 4270 , - 4709 , - 188 , - 947 , - 1866 , - 2945 , - 4184 , - 463 , - 2022 , - 3741 , - 500 , - 2539 , - 4738 , - 1977 , - 4496 , - 2055 , - 4894 , - 2773 , - 812 , - 4131 , - 2490 , - 1009 , - 4808 , - 3647 , - 2646 , - 1805 , - 1124 , - 603 , - 242 , - 41 , - 0 , - 127 , - 446 , - 957 , - 1660 , - 2555 , - 3642 , - 4921 , - 1208 , - 2871 , - 4726 , - 1589 , - 3828 , - 1075 , - 3698 , - 1329 , - 4336 , - 2351 , - 558 , - 4141 , - 2732 , - 1515 , - 490 , - 4841 , - 4200 , - 3751 , - 3494 , - 3429 , - 3556 , - 3875 , - 4386 , - 5089 , - 800 , - 1887 , - 3166 , - 4637 , - 1116 , - 2971 , - 5018 , - 2073 , - 4504 , - 1943 , - 4758 , - 2581 , - 596 , - 3987 , - 2386 , - 977 , - 4944 , - 3919 , - 3086 , - 2445 , - 1996 , - 1739 , - 1674 , - 1801 , - 2120 , - 2631 , - 3334 , - 4229 , - 132 , - 1411 , - 2882 , - 4545 , - 1216 , - 3263 , - 318 , - 2749 , - 188 , - 3003 , - 826 , - 4025 , - 2232 , - 631 , - 4406 , - 3189 , - 2164 , - 1331 , - 690 , - 241 , - 5168 , - 5103 , - 46 , - 365 , - 876 , - 1579 , - 2474 , - 3561 , - 4840 , - 1127 , - 2790 , - 4645 , - 1508 , - 3747 , - 994 , - 3617 , - 1248 , - 4255 , - 2270 , - 477 , - 4060 , - 2651 , - 1434 , - 409 , - 4760 , - 4119 , - 3670 , - 3413 , - 3348 , - 3475 , - 3794 , - 4305 , - 5008 , - 719 , - 1806 , - 3085 , - 4556 , - 1035 , - 2890 , - 4937 , - 1992 , - 4423 , - 1862 , - 4677 , - 2500 , - 515 , - 3906 , - 2305 , - 896 , - 4863 , - 3838 , - 3005 , - 2364 , - 1915 , - 1658 , - 1593 , - 1720 , - 2039 , - 2550 , - 3253 , - 4148 , - 51 , - 1330 , - 2801 , - 4464 , - 1135 , - 3182 , - 237 , - 2668 , - 107 , - 2922 , - 745 , - 3944 , - 2151 , - 550 , - 4325 , - 3108 , - 2083 , - 1250 , - 609 , - 160 , - 5087 , - 5022 , - 5149 , - 284 , - 795 , - 1498 , - 2393 , - 3480 , - 4759 , - 1046 , - 2709 , - 4564 , - 1427 , - 3666 , - 913 , - 3536 , - 1167 , - 4174 , - 2189 , - 396 , - 3979 , - 2570 , - 1353 , - 328 , - 4679 , - 4038 , - 3589 , - 3332 , - 3267 , - 3394 , - 3713 , - 4224 , - 4927 , - 638 , - 1725 , - 3004 , - 4475 , - 954 , - 2809 , - 4856 , - 1911 , - 4342 , - 1781 , - 4596 , - 2419 , - 434 , - 3825 , - 2224 , - 815 , - 4782 , - 3757 , - 2924 , - 2283 , - 1834 , - 1577 , - 1512 , - 1639 , - 1958 , - 2469 , - 3172 , - 4067 , - 5154 , - 1249 , - 2720 , - 4383 , - 1054 , - 3101 , - 156 , - 2587 , - 26 , - 2841 , - 664 , - 3863 , - 2070 , - 469 , - 4244 , - 3027 , - 2002 , - 1169 , - 528 , - 79 , - 5006 , - 4941 , - 5068 , - 203 , - 714 , - 1417 , - 2312 , - 3399 , - 4678 , - 965 , - 2628 , - 4483 , - 1346 , - 3585 , - 832 , - 3455 , - 1086 , - 4093 , - 2108 , - 315 , - 3898 , - 2489 , - 1272 , - 247 , - 4598 , - 3957 , - 3508 , - 3251 , - 3186 , - 3313 , - 3632 , - 4143 , - 4846 , - 557 , - 1644 , - 2923 , - 4394 , - 873 , - 2728 , - 4775 , - 1830 , - 4261 , - 1700 , - 4515 , - 2338 , - 353 , - 3744 , - 2143 , - 734 , - 4701 , - 3676 , - 2843 , - 2202 , - 1753 , - 1496 , - 1431 , - 1558 , - 1877 , - 2388 , - 3091 , - 3986 , - 5073 , - 1168 , - 2639 , - 4302 , - 973 , - 3020 , - 75 , - 2506 , - 5129 , - 2760 , - 583 , - 3782 , - 1989 , - 388 , - 4163 , - 2946 , - 1921 , - 1088 , - 447 , - 5182 , - 4925 , - 4860 , - 4987 , - 122 , - 633 , - 1336 , - 2231 , - 3318 , - 4597 , - 884 , - 2547 , - 4402 , - 1265 , - 3504 , - 751 , - 3374 , - 1005 , - 4012 , - 2027 , - 234 , - 3817 , - 2408 , - 1191 , - 166 , - 4517 , - 3876 , - 3427 , - 3170 , - 3105 , - 3232 , - 3551 , - 4062 , - 4765 , - 476 , - 1563 , - 2842 , - 4313 , - 792 , - 2647 , - 4694 , - 1749 , - 4180 , - 1619 , - 4434 , - 2257 , - 272 , - 3663 , - 2062 , - 653 , - 4620 , - 3595 , - 2762 , - 2121 , - 1672 , - 1415 , - 1350 , - 1477 , - 1796 , - 2307 , - 3010 , - 3905 , - 4992 , - 1087 , - 2558 , - 4221 , - 892 , - 2939 , - 5178 , - 2425 , - 5048 , - 2679 , - 502 , - 3701 , - 1908 , - 307 , - 4082 , - 2865 , - 1840 , - 1007 , - 366 , - 5101 , - 4844 , - 4779 , - 4906 , - 41 , - 552 , - 1255 , - 2150 , - 3237 , - 4516 , - 803 , - 2466 , - 4321 , - 1184 , - 3423 , - 670 , - 3293 , - 924 , - 3931 , - 1946 , - 153 , - 3736 , - 2327 , - 1110 , - 85 , - 4436 , - 3795 , - 3346 , - 3089 , - 3024 , - 3151 , - 3470 , - 3981 , - 4684 , - 395 , - 1482 , - 2761 , - 4232 , - 711 , - 2566 , - 4613 , - 1668 , - 4099 , - 1538 , - 4353 , - 2176 , - 191 , - 3582 , - 1981 , - 572 , - 4539 , - 3514 , - 2681 , - 2040 , - 1591 , - 1334 , - 1269 , - 1396 , - 1715 , - 2226 , - 2929 , - 3824 , - 4911 , - 1006 , - 2477 , - 4140 , - 811 , - 2858 , - 5097 , - 2344 , - 4967 , - 2598 , - 421 , - 3620 , - 1827 , - 226 , - 4001 , - 2784 , - 1759 , - 926 , - 285 , - 5020 , - 4763 , - 4698 , - 4825 , - 5144 , - 471 , - 1174 , - 2069 , - 3156 , - 4435 , - 722 , - 2385 , - 4240 , - 1103 , - 3342 , - 589 , - 3212 , - 843 , - 3850 , - 1865 , - 72 , - 3655 , - 2246 , - 1029 , - 4 , - 4355 , - 3714 , - 3265 , - 3008 , - 2943 , - 3070 , - 3389 , - 3900 , - 4603 , - 314 , - 1401 , - 2680 , - 4151 , - 630 , - 2485 , - 4532 , - 1587 , - 4018 , - 1457 , - 4272 , - 2095 , - 110 , - 3501 , - 1900 , - 491 , - 4458 , - 3433 , - 2600 , - 1959 , - 1510 , - 1253 , - 1188 , - 1315 , - 1634 , - 2145 , - 2848 , - 3743 , - 4830 , - 925 , - 2396 , - 4059 , - 730 , - 2777 , - 5016 , - 2263 , - 4886 , - 2517 , - 340 , - 3539 , - 1746 , - 145 , - 3920 , - 2703 , - 1678 , - 845 , - 204 , - 4939 , - 4682 , - 4617 , - 4744 , - 5063 , - 390 , - 1093 , - 1988 , - 3075 , - 4354 , - 641 , - 2304 , - 4159 , - 1022 , - 3261 , - 508 , - 3131 , - 762 , - 3769 , - 1784 , - 5175 , - 3574 , - 2165 , - 948 , - 5107 , - 4274 , - 3633 , - 3184 , - 2927 , - 2862 , - 2989 , - 3308 , - 3819 , - 4522 , - 233 , - 1320 , - 2599 , - 4070 , - 549 , - 2404 , - 4451 , - 1506 , - 3937 , - 1376 , - 4191 , - 2014 , - 29 , - 3420 , - 1819 , - 410 , - 4377 , - 3352 , - 2519 , - 1878 , - 1429 , - 1172 , - 1107 , - 1234 , - 1553 , - 2064 , - 2767 , - 3662 , - 4749 , - 844 , - 2315 , - 3978 , - 649 , - 2696 , - 4935 , - 2182 , - 4805 , - 2436 , - 259 , - 3458 , - 1665 , - 64 , - 3839 , - 2622 , - 1597 , - 764 , - 123 , - 4858 , - 4601 , - 4536 , - 4663 , - 4982 , - 309 , - 1012 , - 1907 , - 2994 , - 4273 , - 560 , - 2223 , - 4078 , - 941 , - 3180 , - 427 , - 3050 , - 681 , - 3688 , - 1703 , - 5094 , - 3493 , - 2084 , - 867 , - 5026 , - 4193 , - 3552 , - 3103 , - 2846 , - 2781 , - 2908 , - 3227 , - 3738 , - 4441 , - 152 , - 1239 , - 2518 , - 3989 , - 468 , - 2323 , - 4370 , - 1425 , - 3856 , - 1295 , - 4110 , - 1933 , - 5132 , - 3339 , - 1738 , - 329 , - 4296 , - 3271 , - 2438 , - 1797 , - 1348 , - 1091 , - 1026 , - 1153 , - 1472 , - 1983 , - 2686 , - 3581 , - 4668 , - 763 , - 2234 , - 3897 , - 568 , - 2615 , - 4854 , - 2101 , - 4724 , - 2355 , - 178 , - 3377 , - 1584 , - 5167 , - 3758 , - 2541 , - 1516 , - 683 , - 42 , - 4777 , - 4520 , - 4455 , - 4582 , - 4901 , - 228 , - 931 , - 1826 , - 2913 , - 4192 , - 479 , - 2142 , - 3997 , - 860 , - 3099 , - 346 , - 2969 , - 600 , - 3607 , - 1622 , - 5013 , - 3412 , - 2003 , - 786 , - 4945 , - 4112 , - 3471 , - 3022 , - 2765 , - 2700 , - 2827 , - 3146 , - 3657 , - 4360 , - 71 , - 1158 , - 2437 , - 3908 , - 387 , - 2242 , - 4289 , - 1344 , - 3775 , - 1214 , - 4029 , - 1852 , - 5051 , - 3258 , - 1657 , - 248 , - 4215 , - 3190 , - 2357 , - 1716 , - 1267 , - 1010 , - 945 , - 1072 , - 1391 , - 1902 , - 2605 , - 3500 , - 4587 , - 682 , - 2153 , - 3816 , - 487 , - 2534 , - 4773 , - 2020 , - 4643 , - 2274 , - 97 , - 3296 , - 1503 , - 5086 , - 3677 , - 2460 , - 1435 , - 602 , - 5145 , - 4696 , - 4439 , - 4374 , - 4501 , - 4820 , - 147 , - 850 , - 1745 , - 2832 , - 4111 , - 398 , - 2061 , - 3916 , - 779 , - 3018 , - 265 , - 2888 , - 519 , - 3526 , - 1541 , - 4932 , - 3331 , - 1922 , - 705 , - 4864 , - 4031 , - 3390 , - 2941 , - 2684 , - 2619 , - 2746 , - 3065 , - 3576 , - 4279 , - 5174 , - 1077 , - 2356 , - 3827 , - 306 , - 2161 , - 4208 , - 1263 , - 3694 , - 1133 , - 3948 , - 1771 , - 4970 , - 3177 , - 1576 , - 167 , - 4134 , - 3109 , - 2276 , - 1635 , - 1186 , - 929 , - 864 , - 991 , - 1310 , - 1821 , - 2524 , - 3419 , - 4506 , - 601 , - 2072 , - 3735 , - 406 , - 2453 , - 4692 , - 1939 , - 4562 , - 2193 , - 16 , - 3215 , - 1422 , - 5005 , - 3596 , - 2379 , - 1354 , - 521 , - 5064 , - 4615 , - 4358 , - 4293 , - 4420 , - 4739 , - 66 , - 769 , - 1664 , - 2751 , - 4030 , - 317 , - 1980 , - 3835 , - 698 , - 2937 , - 184 , - 2807 , - 438 , - 3445 , - 1460 , - 4851 , - 3250 , - 1841 , - 624 , - 4783 , - 3950 , - 3309 , - 2860 , - 2603 , - 2538 , - 2665 , - 2984 , - 3495 , - 4198 , - 5093 , - 996 , - 2275 , - 3746 , - 225 , - 2080 , - 4127 , - 1182 , - 3613 , - 1052 , - 3867 , - 1690 , - 4889 , - 3096 , - 1495 , - 86 , - 4053 , - 3028 , - 2195 , - 1554 , - 1105 , - 848 , - 783 , - 910 , - 1229 , - 1740 , - 2443 , - 3338 , - 4425 , - 520 , - 1991 , - 3654 , - 325 , - 2372 , - 4611 , - 1858 , - 4481 , - 2112 , - 5119 , - 3134 , - 1341 , - 4924 , - 3515 , - 2298 , - 1273 , - 440 , - 4983 , - 4534 , - 4277 , - 4212 , - 4339 , - 4658 , - 5169 , - 688 , - 1583 , - 2670 , - 3949 , - 236 , - 1899 , - 3754 , - 617 , - 2856 , - 103 , - 2726 , - 357 , - 3364 , - 1379 , - 4770 , - 3169 , - 1760 , - 543 , - 4702 , - 3869 , - 3228 , - 2779 , - 2522 , - 2457 , - 2584 , - 2903 , - 3414 , - 4117 , - 5012 , - 915 , - 2194 , - 3665 , - 144 , - 1999 , - 4046 , - 1101 , - 3532 , - 971 , - 3786 , - 1609 , - 4808 , - 3015 , - 1414 , - 5 , - 3972 , - 2947 , - 2114 , - 1473 , - 1024 , - 767 , - 702 , - 829 , - 1148 , - 1659 , - 2362 , - 3257 , - 4344 , - 439 , - 1910 , - 3573 , - 244 , - 2291 , - 4530 , - 1777 , - 4400 , - 2031 , - 5038 , - 3053 , - 1260 , - 4843 , - 3434 , - 2217 , - 1192 , - 359 , - 4902 , - 4453 , - 4196 , - 4131 , - 4258 , - 4577 , - 5088 , - 607 , - 1502 , - 2589 , - 3868 , - 155 , - 1818 , - 3673 , - 536 , - 2775 , - 22 , - 2645 , - 276 , - 3283 , - 1298 , - 4689 , - 3088 , - 1679 , - 462 , - 4621 , - 3788 , - 3147 , - 2698 , - 2441 , - 2376 , - 2503 , - 2822 , - 3333 , - 4036 , - 4931 , - 834 , - 2113 , - 3584 , - 63 , - 1918 , - 3965 , - 1020 , - 3451 , - 890 , - 3705 , - 1528 , - 4727 , - 2934 , - 1333 , - 5108 , - 3891 , - 2866 , - 2033 , - 1392 , - 943 , - 686 , - 621 , - 748 , - 1067 , - 1578 , - 2281 , - 3176 , - 4263 , - 358 , - 1829 , - 3492 , - 163 , - 2210 , - 4449 , - 1696 , - 4319 , - 1950 , - 4957 , - 2972 , - 1179 , - 4762 , - 3353 , - 2136 , - 1111 , - 278 , - 4821 , - 4372 , - 4115 , - 4050 , - 4177 , - 4496 , - 5007 , - 526 , - 1421 , - 2508 , - 3787 , - 74 , - 1737 , - 3592 , - 455 , - 2694 , - 5125 , - 2564 , - 195 , - 3202 , - 1217 , - 4608 , - 3007 , - 1598 , - 381 , - 4540 , - 3707 , - 3066 , - 2617 , - 2360 , - 2295 , - 2422 , - 2741 , - 3252 , - 3955 , - 4850 , - 753 , - 2032 , - 3503 , - 5166 , - 1837 , - 3884 , - 939 , - 3370 , - 809 , - 3624 , - 1447 , - 4646 , - 2853 , - 1252 , - 5027 , - 3810 , - 2785 , - 1952 , - 1311 , - 862 , - 605 , - 540 , - 667 , - 986 , - 1497 , - 2200 , - 3095 , - 4182 , - 277 , - 1748 , - 3411 , - 82 , - 2129 , - 4368 , - 1615 , - 4238 , - 1869 , - 4876 , - 2891 , - 1098 , - 4681 , - 3272 , - 2055 , - 1030 , - 197 , - 4740 , - 4291 , - 4034 , - 3969 , - 4096 , - 4415 , - 4926 , - 445 , - 1340 , - 2427 , - 3706 , - 5177 , - 1656 , - 3511 , - 374 , - 2613 , - 5044 , - 2483 , - 114 , - 3121 , - 1136 , - 4527 , - 2926 , - 1517 , - 300 , - 4459 , - 3626 , - 2985 , - 2536 , - 2279 , - 2214 , - 2341 , - 2660 , - 3171 , - 3874 , - 4769 , - 672 , - 1951 , - 3422 , - 5085 , - 1756 , - 3803 , - 858 , - 3289 , - 728 , - 3543 , - 1366 , - 4565 , - 2772 , - 1171 , - 4946 , - 3729 , - 2704 , - 1871 , - 1230 , - 781 , - 524 , - 459 , - 586 , - 905 , - 1416 , - 2119 , - 3014 , - 4101 , - 196 , - 1667 , - 3330 , - 1 , - 2048 , - 4287 , - 1534 , - 4157 , - 1788 , - 4795 , - 2810 , - 1017 , - 4600 , - 3191 , - 1974 , - 949 , - 116 , - 4659 , - 4210 , - 3953 , - 3888 , - 4015 , - 4334 , - 4845 , - 364 , - 1259 , - 2346 , - 3625 , - 5096 , - 1575 , - 3430 , - 293 , - 2532 , - 4963 , - 2402 , - 33 , - 3040 , - 1055 , - 4446 , - 2845 , - 1436 , - 219 , - 4378 , - 3545 , - 2904 , - 2455 , - 2198 , - 2133 , - 2260 , - 2579 , - 3090 , - 3793 , - 4688 , - 591 , - 1870 , - 3341 , - 5004 , - 1675 , - 3722 , - 777 , - 3208 , - 647 , - 3462 , - 1285 , - 4484 , - 2691 , - 1090 , - 4865 , - 3648 , - 2623 , - 1790 , - 1149 , - 700 , - 443 , - 378 , - 505 , - 824 , - 1335 , - 2038 , - 2933 , - 4020 , - 115 , - 1586 , - 3249 , - 5104 , - 1967 , - 4206 , - 1453 , - 4076 , - 1707 , - 4714 , - 2729 , - 936 , - 4519 , - 3110 , - 1893 , - 868 , - 35 , - 4578 , - 4129 , - 3872 , - 3807 , - 3934 , - 4253 , - 4764 , - 283 , - 1178 , - 2265 , - 3544 , - 5015 , - 1494 , - 3349 , - 212 , - 2451 , - 4882 , - 2321 , - 5136 , - 2959 , - 974 , - 4365 , - 2764 , - 1355 , - 138 , - 4297 , - 3464 , - 2823 , - 2374 , - 2117 , - 2052 , - 2179 , - 2498 , - 3009 , - 3712 , - 4607 , - 510 , - 1789 , - 3260 , - 4923 , - 1594 , - 3641 , - 696 , - 3127 , - 566 , - 3381 , - 1204 , - 4403 , - 2610 , - 1009 , - 4784 , - 3567 , - 2542 , - 1709 , - 1068 , - 619 , - 362 , - 297 , - 424 , - 743 , - 1254 , - 1957 , - 2852 , - 3939 , - 34 , - 1505 , - 3168 , - 5023 , - 1886 , - 4125 , - 1372 , - 3995 , - 1626 , - 4633 , - 2648 , - 855 , - 4438 , - 3029 , - 1812 , - 787 , - 5138 , - 4497 , - 4048 , - 3791 , - 3726 , - 3853 , - 4172 , - 4683 , - 202 , - 1097 , - 2184 , - 3463 , - 4934 , - 1413 , - 3268 , - 131 , - 2370 , - 4801 , - 2240 , - 5055 , - 2878 , - 893 , - 4284 , - 2683 , - 1274 , - 57 , - 4216 , - 3383 , - 2742 , - 2293 , - 2036 , - 1971 , - 2098 , - 2417 , - 2928 , - 3631 , - 4526 , - 429 , - 1708 , - 3179 , - 4842 , - 1513 , - 3560 , - 615 , - 3046 , - 485 , - 3300 , - 1123 , - 4322 , - 2529 , - 928 , - 4703 , - 3486 , - 2461 , - 1628 , - 987 , - 538 , - 281 , - 216 , - 343 , - 662 , - 1173 , - 1876 , - 2771 , - 3858 , - 5137 , - 1424 , - 3087 , - 4942 , - 1805 , - 4044 , - 1291 , - 3914 , - 1545 , - 4552 , - 2567 , - 774 , - 4357 , - 2948 , - 1731 , - 706 , - 5057 , - 4416 , - 3967 , - 3710 , - 3645 , - 3772 , - 4091 , - 4602 , - 121 , - 1016 , - 2103 , - 3382 , - 4853 , - 1332 , - 3187 , - 50 , - 2289 , - 4720 , - 2159 , - 4974 , - 2797 , - 812 , - 4203 , - 2602 , - 1193 , - 5160 , - 4135 , - 3302 , - 2661 , - 2212 , - 1955 , - 1890 , - 2017 , - 2336 , - 2847 , - 3550 , - 4445 , - 348 , - 1627 , - 3098 , - 4761 , - 1432 , - 3479 , - 534 , - 2965 , - 404 , - 3219 , - 1042 , - 4241 , - 2448 , - 847 , - 4622 , - 3405 , - 2380 , - 1547 , - 906 , - 457 , - 200 , - 135 , - 262 , - 581 , - 1092 , - 1795 , - 2690 , - 3777 , - 5056 , - 1343 , - 3006 , - 4861 , - 1724 , - 3963 , - 1210 , - 3833 , - 1464 , - 4471 , - 2486 , - 693 , - 4276 , - 2867 , - 1650 , - 625 , - 4976 , - 4335 , - 3886 , - 3629 , - 3564 , - 3691 , - 4010 , - 4521 , - 40 , - 935 , - 2022 , - 3301 , - 4772 , - 1251 , - 3106 , - 5153 , - 2208 , - 4639 , - 2078 , - 4893 , - 2716 , - 731 , - 4122 , - 2521 , - 1112 , - 5079 , - 4054 , - 3221 , - 2580 , - 2131 , - 1874 , - 1809 , - 1936 , - 2255 , - 2766 , - 3469 , - 4364 , - 267 , - 1546 , - 3017 , - 4680 , - 1351 , - 3398 , - 453 , - 2884 , - 323 , - 3138 , - 961 , - 4160 , - 2367 , - 766 , - 4541 , - 3324 , - 2299 , - 1466 , - 825 , - 376 , - 119 , - 54 , - 181 , - 500 , - 1011 , - 1714 , - 2609 , - 3696 , - 4975 , - 1262 , - 2925 , - 4780 , - 1643 , - 3882 , - 1129 , - 3752 , - 1383 , - 4390 , - 2405 , - 612 , - 4195 , - 2786 , - 1569 , - 544 , - 4895 , - 4254 , - 3805 , - 3548 , - 3483 , - 3610 , - 3929 , - 4440 , - 5143 , - 854 , - 1941 , - 3220 , - 4691 , - 1170 , - 3025 , - 5072 , - 2127 , - 4558 , - 1997 , - 4812 , - 2635 , - 650 , - 4041 , - 2440 , - 1031 , - 4998 , - 3973 , - 3140 , - 2499 , - 2050 , - 1793 , - 1728 , - 1855 , - 2174 , - 2685 , - 3388 , - 4283 , - 186 , - 1465 , - 2936 , - 4599 , - 1270 , - 3317 , - 372 , - 2803 , - 242 , - 3057 , - 880 , - 4079 , - 2286 , - 685 , - 4460 , - 3243 , - 2218 , - 1385 , - 744 , - 295 , - 38 , - 5157 , - 100 , - 419 , - 930 , - 1633 , - 2528 , - 3615 , - 4894 , - 1181 , - 2844 , - 4699 , - 1562 , - 3801 , - 1048 , - 3671 , - 1302 , - 4309 , - 2324 , - 531 , - 4114 , - 2705 , - 1488 , - 463 , - 4814 , - 4173 , - 3724 , - 3467 , - 3402 , - 3529 , - 3848 , - 4359 , - 5062 , - 773 , - 1860 , - 3139 , - 4610 , - 1089 , - 2944 , - 4991 , - 2046 , - 4477 , - 1916 , - 4731 , - 2554 , - 569 , - 3960 , - 2359 , - 950 , - 4917 , - 3892 , - 3059 , - 2418 , - 1969 , - 1712 , - 1647 , - 1774 , - 2093 , - 2604 , - 3307 , - 4202 , - 105 , - 1384 , - 2855 , - 4518 , - 1189 , - 3236 , - 291 , - 2722 , - 161 , - 2976 , - 799 , - 3998 , - 2205 , - 604 , - 4379 , - 3162 , - 2137 , - 1304 , - 663 , - 214 , - 5141 , - 5076 , - 19 , - 338 , - 849 , - 1552 , - 2447 , - 3534 , - 4813 , - 1100 , - 2763 , - 4618 , - 1481 , - 3720 , - 967 , - 3590 , - 1221 , - 4228 , - 2243 , - 450 , - 4033 , - 2624 , - 1407 , - 382 , - 4733 , - 4092 , - 3643 , - 3386 , - 3321 , - 3448 , - 3767 , - 4278 , - 4981 , - 692 , - 1779 , - 3058 , - 4529 , - 1008 , - 2863 , - 4910 , - 1965 , - 4396 , - 1835 , - 4650 , - 2473 , - 488 , - 3879 , - 2278 , - 869 , - 4836 , - 3811 , - 2978 , - 2337 , - 1888 , - 1631 , - 1566 , - 1693 , - 2012 , - 2523 , - 3226 , - 4121 , - 24 , - 1303 , - 2774 , - 4437 , - 1108 , - 3155 , - 210 , - 2641 , - 80 , - 2895 , - 718 , - 3917 , - 2124 , - 523 , - 4298 , - 3081 , - 2056 , - 1223 , - 582 , - 133 , - 5060 , - 4995 , - 5122 , - 257 , - 768 , - 1471 , - 2366 , - 3453 , - 4732 , - 1019 , - 2682 , - 4537 , - 1400 , - 3639 , - 886 , - 3509 , - 1140 , - 4147 , - 2162 , - 369 , - 3952 , - 2543 , - 1326 , - 301 , - 4652 , - 4011 , - 3562 , - 3305 , - 3240 , - 3367 , - 3686 , - 4197 , - 4900 , - 611 , - 1698 , - 2977 , - 4448 , - 927 , - 2782 , - 4829 , - 1884 , - 4315 , - 1754 , - 4569 , - 2392 , - 407 , - 3798 , - 2197 , - 788 , - 4755 , - 3730 , - 2897 , - 2256 , - 1807 , - 1550 , - 1485 , - 1612 , - 1931 , - 2442 , - 3145 , - 4040 , - 5127 , - 1222 , - 2693 , - 4356 , - 1027 , - 3074 , - 129 , - 2560 , - 5183 , - 2814 , - 637 , - 3836 , - 2043 , - 442 , - 4217 , - 3000 , - 1975 , - 1142 , - 501 , - 52 , - 4979 , - 4914 , - 5041 , - 176 , - 687 , - 1390 , - 2285 , - 3372 , - 4651 , - 938 , - 2601 , - 4456 , - 1319 , - 3558 , - 805 , - 3428 , - 1059 , - 4066 , - 2081 , - 288 , - 3871 , - 2462 , - 1245 , - 220 , - 4571 , - 3930 , - 3481 , - 3224 , - 3159 , - 3286 , - 3605 , - 4116 , - 4819 , - 530 , - 1617 , - 2896 , - 4367 , - 846 , - 2701 , - 4748 , - 1803 , - 4234 , - 1673 , - 4488 , - 2311 , - 326 , - 3717 , - 2116 , - 707 , - 4674 , - 3649 , - 2816 , - 2175 , - 1726 , - 1469 , - 1404 , - 1531 , - 1850 , - 2361 , - 3064 , - 3959 , - 5046 , - 1141 , - 2612 , - 4275 , - 946 , - 2993 , - 48 , - 2479 , - 5102 , - 2733 , - 556 , - 3755 , - 1962 , - 361 , - 4136 , - 2919 , - 1894 , - 1061 , - 420 , - 5155 , - 4898 , - 4833 , - 4960 , - 95 , - 606 , - 1309 , - 2204 , - 3291 , - 4570 , - 857 , - 2520 , - 4375 , - 1238 , - 3477 , - 724 , - 3347 , - 978 , - 3985 , - 2000 , - 207 , - 3790 , - 2381 , - 1164 , - 139 , - 4490 , - 3849 , - 3400 , - 3143 , - 3078 , - 3205 , - 3524 , - 4035 , - 4738 , - 449 , - 1536 , - 2815 , - 4286 , - 765 , - 2620 , - 4667 , - 1722 , - 4153 , - 1592 , - 4407 , - 2230 , - 245 , - 3636 , - 2035 , - 626 , - 4593 , - 3568 , - 2735 , - 2094 , - 1645 , - 1388 , - 1323 , - 1450 , - 1769 , - 2280 , - 2983 , - 3878 , - 4965 , - 1060 , - 2531 , - 4194 , - 865 , - 2912 , - 5151 , - 2398 , - 5021 , - 2652 , - 475 , - 3674 , - 1881 , - 280 , - 4055 , - 2838 , - 1813 , - 980 , - 339 , - 5074 , - 4817 , - 4752 , - 4879 , - 14 , - 525 , - 1228 , - 2123 , - 3210 , - 4489 , - 776 , - 2439 , - 4294 , - 1157 , - 3396 , - 643 , - 3266 , - 897 , - 3904 , - 1919 , - 126 , - 3709 , - 2300 , - 1083 , - 58 , - 4409 , - 3768 , - 3319 , - 3062 , - 2997 , - 3124 , - 3443 , - 3954 , - 4657 , - 368 , - 1455 , - 2734 , - 4205 , - 684 , - 2539 , - 4586 , - 1641 , - 4072 , - 1511 , - 4326 , - 2149 , - 164 , - 3555 , - 1954 , - 545 , - 4512 , - 3487 , - 2654 , - 2013 , - 1564 , - 1307 , - 1242 , - 1369 , - 1688 , - 2199 , - 2902 , - 3797 , - 4884 , - 979 , - 2450 , - 4113 , - 784 , - 2831 , - 5070 , - 2317 , - 4940 , - 2571 , - 394 , - 3593 , - 1800 , - 199 , - 3974 , - 2757 , - 1732 , - 899 , - 258 , - 4993 , - 4736 , - 4671 , - 4798 , - 5117 , - 444 , - 1147 , - 2042 , - 3129 , - 4408 , - 695 , - 2358 , - 4213 , - 1076 , - 3315 , - 562 , - 3185 , - 816 , - 3823 , - 1838 , - 45 , - 3628 , - 2219 , - 1002 , - 5161 , - 4328 , - 3687 , - 3238 , - 2981 , - 2916 , - 3043 , - 3362 , - 3873 , - 4576 , - 287 , - 1374 , - 2653 , - 4124 , - 603 , - 2458 , - 4505 , - 1560 , - 3991 , - 1430 , - 4245 , - 2068 , - 83 , - 3474 , - 1873 , - 464 , - 4431 , - 3406 , - 2573 , - 1932 , - 1483 , - 1226 , - 1161 , - 1288 , - 1607 , - 2118 , - 2821 , - 3716 , - 4803 , - 898 , - 2369 , - 4032 , - 703 , - 2750 , - 4989 , - 2236 , - 4859 , - 2490 , - 313 , - 3512 , - 1719 , - 118 , - 3893 , - 2676 , - 1651 , - 818 , - 177 , - 4912 , - 4655 , - 4590 , - 4717 , - 5036 , - 363 , - 1066 , - 1961 , - 3048 , - 4327 , - 614 , - 2277 , - 4132 , - 995 , - 3234 , - 481 , - 3104 , - 735 , - 3742 , - 1757 , - 5148 , - 3547 , - 2138 , - 921 , - 5080 , - 4247 , - 3606 , - 3157 , - 2900 , - 2835 , - 2962 , - 3281 , - 3792 , - 4495 , - 206 , - 1293 , - 2572 , - 4043 , - 522 , - 2377 , - 4424 , - 1479 , - 3910 , - 1349 , - 4164 , - 1987 , - 2 , - 3393 , - 1792 , - 383 , - 4350 , - 3325 , - 2492 , - 1851 , - 1402 , - 1145 , - 1080 , - 1207 , - 1526 , - 2037 , - 2740 , - 3635 , - 4722 , - 817 , - 2288 , - 3951 , - 622 , - 2669 , - 4908 , - 2155 , - 4778 , - 2409 , - 232 , - 3431 , - 1638 , - 37 , - 3812 , - 2595 , - 1570 , - 737 , - 96 , - 4831 , - 4574 , - 4509 , - 4636 , - 4955 , - 282 , - 985 , - 1880 , - 2967 , - 4246 , - 533 , - 2196 , - 4051 , - 914 , - 3153 , - 400 , - 3023 , - 654 , - 3661 , - 1676 , - 5067 , - 3466 , - 2057 , - 840 , - 4999 , - 4166 , - 3525 , - 3076 , - 2819 , - 2754 , - 2881 , - 3200 , - 3711 , - 4414 , - 125 , - 1212 , - 2491 , - 3962 , - 441 , - 2296 , - 4343 , - 1398 , - 3829 , - 1268 , - 4083 , - 1906 , - 5105 , - 3312 , - 1711 , - 302 , - 4269 , - 3244 , - 2411 , - 1770 , - 1321 , - 1064 , - 999 , - 1126 , - 1445 , - 1956 , - 2659 , - 3554 , - 4641 , - 736 , - 2207 , - 3870 , - 541 , - 2588 , - 4827 , - 2074 , - 4697 , - 2328 , - 151 , - 3350 , - 1557 , - 5140 , - 3731 , - 2514 , - 1489 , - 656 , - 15 , - 4750 , - 4493 , - 4428 , - 4555 , - 4874 , - 201 , - 904 , - 1799 , - 2886 , - 4165 , - 452 , - 2115 , - 3970 , - 833 , - 3072 , - 319 , - 2942 , - 573 , - 3580 , - 1595 , - 4986 , - 3385 , - 1976 , - 759 , - 4918 , - 4085 , - 3444 , - 2995 , - 2738 , - 2673 , - 2800 , - 3119 , - 3630 , - 4333 , - 44 , - 1131 , - 2410 , - 3881 , - 360 , - 2215 , - 4262 , - 1317 , - 3748 , - 1187 , - 4002 , - 1825 , - 5024 , - 3231 , - 1630 , - 221 , - 4188 , - 3163 , - 2330 , - 1689 , - 1240 , - 983 , - 918 , - 1045 , - 1364 , - 1875 , - 2578 , - 3473 , - 4560 , - 655 , - 2126 , - 3789 , - 460 , - 2507 , - 4746 , - 1993 , - 4616 , - 2247 , - 70 , - 3269 , - 1476 , - 5059 , - 3650 , - 2433 , - 1408 , - 575 , - 5118 , - 4669 , - 4412 , - 4347 , - 4474 , - 4793 , - 120 , - 823 , - 1718 , - 2805 , - 4084 , - 371 , - 2034 , - 3889 , - 752 , - 2991 , - 238 , - 2861 , - 492 , - 3499 , - 1514 , - 4905 , - 3304 , - 1895 , - 678 , - 4837 , - 4004 , - 3363 , - 2914 , - 2657 , - 2592 , - 2719 , - 3038 , - 3549 , - 4252 , - 5147 , - 1050 , - 2329 , - 3800 , - 279 , - 2134 , - 4181 , - 1236 , - 3667 , - 1106 , - 3921 , - 1744 , - 4943 , - 3150 , - 1549 , - 140 , - 4107 , - 3082 , - 2249 , - 1608 , - 1159 , - 902 , - 837 , - 964 , - 1283 , - 1794 , - 2497 , - 3392 , - 4479 , - 574 , - 2045 , - 3708 , - 379 , - 2426 , - 4665 , - 1912 , - 4535 , - 2166 , - 5173 , - 3188 , - 1395 , - 4978 , - 3569 , - 2352 , - 1327 , - 494 , - 5037 , - 4588 , - 4331 , - 4266 , - 4393 , - 4712 , - 39 , - 742 , - 1637 , - 2724 , - 4003 , - 290 , - 1953 , - 3808 , - 671 , - 2910 , - 157 , - 2780 , - 411 , - 3418 , - 1433 , - 4824 , - 3223 , - 1814 , - 597 , - 4756 , - 3923 , - 3282 , - 2833 , - 2576 , - 2511 , - 2638 , - 2957 , - 3468 , - 4171 , - 5066 , - 969 , - 2248 , - 3719 , - 198 , - 2053 , - 4100 , - 1155 , - 3586 , - 1025 , - 3840 , - 1663 , - 4862 , - 3069 , - 1468 , - 59 , - 4026 , - 3001 , - 2168 , - 1527 , - 1078 , - 821 , - 756 , - 883 , - 1202 , - 1713 , - 2416 , - 3311 , - 4398 , - 493 , - 1964 , - 3627 , - 298 , - 2345 , - 4584 , - 1831 , - 4454 , - 2085 , - 5092 , - 3107 , - 1314 , - 4897 , - 3488 , - 2271 , - 1246 , - 413 , - 4956 , - 4507 , - 4250 , - 4185 , - 4312 , - 4631 , - 5142 , - 661 , - 1556 , - 2643 , - 3922 , - 209 , - 1872 , - 3727 , - 590 , - 2829 , - 76 , - 2699 , - 330 , - 3337 , - 1352 , - 4743 , - 3142 , - 1733 , - 516 , - 4675 , - 3842 , - 3201 , - 2752 , - 2495 , - 2430 , - 2557 , - 2876 , - 3387 , - 4090 , - 4985 , - 888 , - 2167 , - 3638 , - 117 , - 1972 , - 4019 , - 1074 , - 3505 , - 944 , - 3759 , - 1582 , - 4781 , - 2988 , - 1387 , - 5162 , - 3945 , - 2920 , - 2087 , - 1446 , - 997 , - 740 , - 675 , - 802 , - 1121 , - 1632 , - 2335 , - 3230 , - 4317 , - 412 , - 1883 , - 3546 , - 217 , - 2264 , - 4503 , - 1750 , - 4373 , - 2004 , - 5011 , - 3026 , - 1233 , - 4816 , - 3407 , - 2190 , - 1165 , - 332 , - 4875 , - 4426 , - 4169 , - 4104 , - 4231 , - 4550 , - 5061 , - 580 , - 1475 , - 2562 , - 3841 , - 128 , - 1791 , - 3646 , - 509 , - 2748 , - 5179 , - 2618 , - 249 , - 3256 , - 1271 , - 4662 , - 3061 , - 1652 , - 435 , - 4594 , - 3761 , - 3120 , - 2671 , - 2414 , - 2349 , - 2476 , - 2795 , - 3306 , - 4009 , - 4904 , - 807 , - 2086 , - 3557 , - 36 , - 1891 , - 3938 , - 993 , - 3424 , - 863 , - 3678 , - 1501 , - 4700 , - 2907 , - 1306 , - 5081 , - 3864 , - 2839 , - 2006 , - 1365 , - 916 , - 659 , - 594 , - 721 , - 1040 , - 1551 , - 2254 , - 3149 , - 4236 , - 331 , - 1802 , - 3465 , - 136 , - 2183 , - 4422 , - 1669 , - 4292 , - 1923 , - 4930 , - 2945 , - 1152 , - 4735 , - 3326 , - 2109 , - 1084 , - 251 , - 4794 , - 4345 , - 4088 , - 4023 , - 4150 , - 4469 , - 4980 , - 499 , - 1394 , - 2481 , - 3760 , - 47 , - 1710 , - 3565 , - 428 , - 2667 , - 5098 , - 2537 , - 168 , - 3175 , - 1190 , - 4581 , - 2980 , - 1571 , - 354 , - 4513 , - 3680 , - 3039 , - 2590 , - 2333 , - 2268 , - 2395 , - 2714 , - 3225 , - 3928 , - 4823 , - 726 , - 2005 , - 3476 , - 5139 , - 1810 , - 3857 , - 912 , - 3343 , - 782 , - 3597 , - 1420 , - 4619 , - 2826 , - 1225 , - 5000 , - 3783 , - 2758 , - 1925 , - 1284 , - 835 , - 578 , - 513 , - 640 , - 959 , - 1470 , - 2173 , - 3068 , - 4155 , - 250 , - 1721 , - 3384 , - 55 , - 2102 , - 4341 , - 1588 , - 4211 , - 1842 , - 4849 , - 2864 , - 1071 , - 4654 , - 3245 , - 2028 , - 1003 , - 170 , - 4713 , - 4264 , - 4007 , - 3942 , - 4069 , - 4388 , - 4899 , - 418 , - 1313 , - 2400 , - 3679 , - 5150 , - 1629 , - 3484 , - 347 , - 2586 , - 5017 , - 2456 , - 87 , - 3094 , - 1109 , - 4500 , - 2899 , - 1490 , - 273 , - 4432 , - 3599 , - 2958 , - 2509 , - 2252 , - 2187 , - 2314 , - 2633 , - 3144 , - 3847 , - 4742 , - 645 , - 1924 , - 3395 , - 5058 , - 1729 , - 3776 , - 831 , - 3262 , - 701 , - 3516 , - 1339 , - 4538 , - 2745 , - 1144 , - 4919 , - 3702 , - 2677 , - 1844 , - 1203 , - 754 , - 497 , - 432 , - 559 , - 878 , - 1389 , - 2092 , - 2987 , - 4074 , - 169 , - 1640 , - 3303 , - 5158 , - 2021 , - 4260 , - 1507 , - 4130 , - 1761 , - 4768 , - 2783 , - 990 , - 4573 , - 3164 , - 1947 , - 922 , - 89 , - 4632 , - 4183 , - 3926 , - 3861 , - 3988 , - 4307 , - 4818 , - 337 , - 1232 , - 2319 , - 3598 , - 5069 , - 1548 , - 3403 , - 266 , - 2505 , - 4936 , - 2375 , - 6 , - 3013 , - 1028 , - 4419 , - 2818 , - 1409 , - 192 , - 4351 , - 3518 , - 2877 , - 2428 , - 2171 , - 2106 , - 2233 , - 2552 , - 3063 , - 3766 , - 4661 , - 564 , - 1843 , - 3314 , - 4977 , - 1648 , - 3695 , - 750 , - 3181 , - 620 , - 3435 , - 1258 , - 4457 , - 2664 , - 1063 , - 4838 , - 3621 , - 2596 , - 1763 , - 1122 , - 673 , - 416 , - 351 , - 478 , - 797 , - 1308 , - 2011 , - 2906 , - 3993 , - 88 , - 1559 , - 3222 , - 5077 , - 1940 , - 4179 , - 1426 , - 4049 , - 1680 , - 4687 , - 2702 , - 909 , - 4492 , - 3083 , - 1866 , - 841 , - 8 , - 4551 , - 4102 , - 3845 , - 3780 , - 3907 , - 4226 , - 4737 , - 256 , - 1151 , - 2238 , - 3517 , - 4988 , - 1467 , - 3322 , - 185 , - 2424 , - 4855 , - 2294 , - 5109 , - 2932 , - 947 , - 4338 , - 2737 , - 1328 , - 111 , - 4270 , - 3437 , - 2796 , - 2347 , - 2090 , - 2025 , - 2152 , - 2471 , - 2982 , - 3685 , - 4580 , - 483 , - 1762 , - 3233 , - 4896 , - 1567 , - 3614 , - 669 , - 3100 , - 539 , - 3354 , - 1177 , - 4376 , - 2583 , - 982 , - 4757 , - 3540 , - 2515 , - 1682 , - 1041 , - 592 , - 335 , - 270 , - 397 , - 716 , - 1227 , - 1930 , - 2825 , - 3912 , - 7 , - 1478 , - 3141 , - 4996 , - 1859 , - 4098 , - 1345 , - 3968 , - 1599 , - 4606 , - 2621 , - 828 , - 4411 , - 3002 , - 1785 , - 760 , - 5111 , - 4470 , - 4021 , - 3764 , - 3699 , - 3826 , - 4145 , - 4656 , - 175 , - 1070 , - 2157 , - 3436 , - 4907 , - 1386 , - 3241 , - 104 , - 2343 , - 4774 , - 2213 , - 5028 , - 2851 , - 866 , - 4257 , - 2656 , - 1247 , - 30 , - 4189 , - 3356 , - 2715 , - 2266 , - 2009 , - 1944 , - 2071 , - 2390 , - 2901 , - 3604 , - 4499 , - 402 , - 1681 , - 3152 , - 4815 , - 1486 , - 3533 , - 588 , - 3019 , - 458 , - 3273 , - 1096 , - 4295 , - 2502 , - 901 , - 4676 , - 3459 , - 2434 , - 1601 , - 960 , - 511 , - 254 , - 189 , - 316 , - 635 , - 1146 , - 1849 , - 2744 , - 3831 , - 5110 , - 1397 , - 3060 , - 4915 , - 1778 , - 4017 , - 1264 , - 3887 , - 1518 , - 4525 , - 2540 , - 747 , - 4330 , - 2921 , - 1704 , - 679 , - 5030 , - 4389 , - 3940 , - 3683 , - 3618 , - 3745 , - 4064 , - 4575 , - 94 , - 989 , - 2076 , - 3355 , - 4826 , - 1305 , - 3160 , - 23 , - 2262 , - 4693 , - 2132 , - 4947 , - 2770 , - 785 , - 4176 , - 2575 , - 1166 , - 5133 , - 4108 , - 3275 , - 2634 , - 2185 , - 1928 , - 1863 , - 1990 , - 2309 , - 2820 , - 3523 , - 4418 , - 321 , - 1600 , - 3071 , - 4734 , - 1405 , - 3452 , - 507 , - 2938 , - 377 , - 3192 , - 1015 , - 4214 , - 2421 , - 820 , - 4595 , - 3378 , - 2353 , - 1520 , - 879 , - 430 , - 173 , - 108 , - 235 , - 554 , - 1065 , - 1768 , - 2663 , - 3750 , - 5029 , - 1316 , - 2979 , - 4834 , - 1697 , - 3936 , - 1183 , - 3806 , - 1437 , - 4444 , - 2459 , - 666 , - 4249 , - 2840 , - 1623 , - 598 , - 4949 , - 4308 , - 3859 , - 3602 , - 3537 , - 3664 , - 3983 , - 4494 , - 13 , - 908 , - 1995 , - 3274 , - 4745 , - 1224 , - 3079 , - 5126 , - 2181 , - 4612 , - 2051 , - 4866 , - 2689 , - 704 , - 4095 , - 2494 , - 1085 , - 5052 , - 4027 , - 3194 , - 2553 , - 2104 , - 1847 , - 1782 , - 1909 , - 2228 , - 2739 , - 3442 , - 4337 , - 240 , - 1519 , - 2990 , - 4653 , - 1324 , - 3371 , - 426 , - 2857 , - 296 , - 3111 , - 934 , - 4133 , - 2340 , - 739 , - 4514 , - 3297 , - 2272 , - 1439 , - 798 , - 349 , - 92 , - 27 , - 154 , - 473 , - 984 , - 1687 , - 2582 , - 3669 , - 4948 , - 1235 , - 2898 , - 4753 , - 1616 , - 3855 , - 1102 , - 3725 , - 1356 , - 4363 , - 2378 , - 585 , - 4168 , - 2759 , - 1542 , - 517 , - 4868 , - 4227 , - 3778 , - 3521 , - 3456 , - 3583 , - 3902 , - 4413 , - 5116 , - 827 , - 1914 , - 3193 , - 4664 , - 1143 , - 2998 , - 5045 , - 2100 , - 4531 , - 1970 , - 4785 , - 2608 , - 623 , - 4014 , - 2413 , - 1004 , - 4971 , - 3946 , - 3113 , - 2472 , - 2023 , - 1766 , - 1701 , - 1828 , - 2147 , - 2658 , - 3361 , - 4256 , - 159 , - 1438 , - 2909 , - 4572 , - 1243 , - 3290 , - 345 , - 2776 , - 215 , - 3030 , - 853 , - 4052 , - 2259 , - 658 , - 4433 , - 3216 , - 2191 , - 1358 , - 717 , - 268 , - 11 , - 5130 , - 73 , - 392 , - 903 , - 1606 , - 2501 , - 3588 , - 4867 , - 1154 , - 2817 , - 4672 , - 1535 , - 3774 , - 1021 , - 3644 , - 1275 , - 4282 , - 2297 , - 504 , - 4087 , - 2678 , - 1461 , - 436 , - 4787 , - 4146 , - 3697 , - 3440 , - 3375 , - 3502 , - 3821 , - 4332 , - 5035 , - 746 , - 1833 , - 3112 , - 4583 , - 1062 , - 2917 , - 4964 , - 2019 , - 4450 , - 1889 , - 4704 , - 2527 , - 542 , - 3933 , - 2332 , - 923 , - 4890 , - 3865 , - 3032 , - 2391 , - 1942 , - 1685 , - 1620 , - 1747 , - 2066 , - 2577 , - 3280 , - 4175 , - 78 , - 1357 , - 2828 , - 4491 , - 1162 , - 3209 , - 264 , - 2695 , - 134 , - 2949 , - 772 , - 3971 , - 2178 , - 577 , - 4352 , - 3135 , - 2110 , - 1277 , - 636 , - 187 , - 5114 , - 5049 , - 5176 , - 311 , - 822 , - 1525 , - 2420 , - 3507 , - 4786 , - 1073 , - 2736 , - 4591 , - 1454 , - 3693 , - 940 , - 3563 , - 1194 , - 4201 , - 2216 , - 423 , - 4006 , - 2597 , - 1380 , - 355 , - 4706 , - 4065 , - 3616 , - 3359 , - 3294 , - 3421 , - 3740 , - 4251 , - 4954 , - 665 , - 1752 , - 3031 , - 4502 , - 981 , - 2836 , - 4883 , - 1938 , - 4369 , - 1808 , - 4623 , - 2446 , - 461 , - 3852 , - 2251 , - 842 , - 4809 , - 3784 , - 2951 , - 2310 , - 1861 , - 1604 , - 1539 , - 1666 , - 1985 , - 2496 , - 3199 , - 4094 , - 5181 , - 1276 , - 2747 , - 4410 , - 1081 , - 3128 , - 183 , - 2614 , - 53 , - 2868 , - 691 , - 3890 , - 2097 , - 496 , - 4271 , - 3054 , - 2029 , - 1196 , - 555 , - 106 , - 5033 , - 4968 , - 5095 , - 230 , - 741 , - 1444 , - 2339 , - 3426 , - 4705 , - 992 , - 2655 , - 4510 , - 1373 , - 3612 , - 859 , - 3482 , - 1113 , - 4120 , - 2135 , - 342 , - 3925 , - 2516 , - 1299 , - 274 , - 4625 , - 3984 , - 3535 , - 3278 , - 3213 , - 3340 , - 3659 , - 4170 , - 4873 , - 584 , - 1671 , - 2950 , - 4421 , - 900 , - 2755 , - 4802 , - 1857 , - 4288 , - 1727 , - 4542 , - 2365 , - 380 , - 3771 , - 2170 , - 761 , - 4728 , - 3703 , - 2870 , - 2229 , - 1780 , - 1523 , - 1458 , - 1585 , - 1904 , - 2415 , - 3118 , - 4013 , - 5100 , - 1195 , - 2666 , - 4329 , - 1000 , - 3047 , - 102 , - 2533 , - 5156 , - 2787 , - 610 , - 3809 , - 2016 , - 415 , - 4190 , - 2973 , - 1948 , - 1115 , - 474 , - 25 , - 4952 , - 4887 , - 5014 , - 149 , - 660 , - 1363 , - 2258 , - 3345 , - 4624 , - 911 , - 2574 , - 4429 , - 1292 , - 3531 , - 778 , - 3401 , - 1032 , - 4039 , - 2054 , - 261 , - 3844 , - 2435 , - 1218 , - 193 , - 4544 , - 3903 , - 3454 , - 3197 , - 3132 , - 3259 , - 3578 , - 4089 , - 4792 , - 503 , - 1590 , - 2869 , - 4340 , - 819 , - 2674 , - 4721 , - 1776 , - 4207 , - 1646 , - 4461 , - 2284 , - 299 , - 3690 , - 2089 , - 680 , - 4647 , - 3622 , - 2789 , - 2148 , - 1699 , - 1442 , - 1377 , - 1504 , - 1823 , - 2334 , - 3037 , - 3932 , - 5019 , - 1114 , - 2585 , - 4248 , - 919 , - 2966 , - 21 , - 2452 , - 5075 , - 2706 , - 529 , - 3728 , - 1935 , - 334 , - 4109 , - 2892 , - 1867 , - 1034 , - 393 , - 5128 , - 4871 , - 4806 , - 4933 , - 68 , - 579 , - 1282 , - 2177 , - 3264 , - 4543 , - 830 , - 2493 , - 4348 , - 1211 , - 3450 , - 697 , - 3320 , - 951 , - 3958 , - 1973 , - 180 , - 3763 , - 2354 , - 1137 , - 112 , - 4463 , - 3822 , - 3373 , - 3116 , - 3051 , - 3178 , - 3497 , - 4008 , - 4711 , - 422 , - 1509 , - 2788 , - 4259 , - 738 , - 2593 , - 4640 , - 1695 , - 4126 , - 1565 , - 4380 , - 2203 , - 218 , - 3609 , - 2008 , - 599 , - 4566 , - 3541 , - 2708 , - 2067 , - 1618 , - 1361 , - 1296 , - 1423 , - 1742 , - 2253 , - 2956 , - 3851 , - 4938 , - 1033 , - 2504 , - 4167 , - 838 , - 2885 , - 5124 , - 2371 , - 4994 , - 2625 , - 448 , - 3647 , - 1854 , - 253 , - 4028 , - 2811 , - 1786 , - 953 , - 312 , - 5047 , - 4790 , - 4725 , - 4852 , - 5171 , - 498 , - 1201 , - 2096 , - 3183 , - 4462 , - 749 , - 2412 , - 4267 , - 1130 , - 3369 , - 616 , - 3239 , - 870 , - 3877 , - 1892 , - 99 , - 3682 , - 2273 , - 1056 , - 31 , - 4382 , - 3741 , - 3292 , - 3035 , - 2970 , - 3097 , - 3416 , - 3927 , - 4630 , - 341 , - 1428 , - 2707 , - 4178 , - 657 , - 2512 , - 4559 , - 1614 , - 4045 , - 1484 , - 4299 , - 2122 , - 137 , - 3528 , - 1927 , - 518 , - 4485 , - 3460 , - 2627 , - 1986 , - 1537 , - 1280 , - 1215 , - 1342 , - 1661 , - 2172 , - 2875 , - 3770 , - 4857 , - 952 , - 2423 , - 4086 , - 757 , - 2804 , - 5043 , - 2290 , - 4913 , - 2544 , - 367 , - 3566 , - 1773 , - 172 , - 3947 , - 2730 , - 1705 , - 872 , - 231 , - 4966 , - 4709 , - 4644 , - 4771 , - 5090 , - 417 , - 1120 , - 2015 , - 3102 , - 4381 , - 668 , - 2331 , - 4186 , - 1049 , - 3288 , - 535 , - 3158 , - 789 , - 3796 , - 1811 , - 18 , - 3601 , - 2192 , - 975 , - 5134 , - 4301 , - 3660 , - 3211 , - 2954 , - 2889 , - 3016 , - 3335 , - 3846 , - 4549 , - 260 , - 1347 , - 2626 , - 4097 , - 576 , - 2431 , - 4478 , - 1533 , - 3964 , - 1403 , - 4218 , - 2041 , - 56 , - 3447 , - 1846 , - 437 , - 4404 , - 3379 , - 2546 , - 1905 , - 1456 , - 1199 , - 1134 , - 1261 , - 1580 , - 2091 , - 2794 , - 3689 , - 4776 , - 871 , - 2342 , - 4005 , - 676 , - 2723 , - 4962 , - 2209 , - 4832 , - 2463 , - 286 , - 3485 , - 1692 , - 91 , - 3866 , - 2649 , - 1624 , - 791 , - 150 , - 4885 , - 4628 , - 4563 , - 4690 , - 5009 , - 336 , - 1039 , - 1934 , - 3021 , - 4300 , - 587 , - 2250 , - 4105 , - 968 , - 3207 , - 454 , - 3077 , - 708 , - 3715 , - 1730 , - 5121 , - 3520 , - 2111 , - 894 , - 5053 , - 4220 , - 3579 , - 3130 , - 2873 , - 2808 , - 2935 , - 3254 , - 3765 , - 4468 , - 179 , - 1266 , - 2545 , - 4016 , - 495 , - 2350 , - 4397 , - 1452 , - 3883 , - 1322 , - 4137 , - 1960 , - 5159 , - 3366 , - 1765 , - 356 , - 4323 , - 3298 , - 2465 , - 1824 , - 1375 , - 1118 , - 1053 , - 1180 , - 1499 , - 2010 , - 2713 , - 3608 , - 4695 , - 790 , - 2261 , - 3924 , - 595 , - 2642 , - 4881 , - 2128 , - 4751 , - 2382 , - 205 , - 3404 , - 1611 , - 10 , - 3785 , - 2568 , - 1543 , - 710 , - 69 , - 4804 , - 4547 , - 4482 , - 4609 , - 4928 , - 255 , - 958 , - 1853 , - 2940 , - 4219 , - 506 , - 2169 , - 4024 , - 887 , - 3126 , - 373 , - 2996 , - 627 , - 3634 , - 1649 , - 5040 , - 3439 , - 2030 , - 813 , - 4972 , - 4139 , - 3498 , - 3049 , - 2792 , - 2727 , - 2854 , - 3173 , - 3684 , - 4387 , - 98 , - 1185 , - 2464 , - 3935 , - 414 , - 2269 , - 4316 , - 1371 , - 3802 , - 1241 , - 4056 , - 1879 , - 5078 , - 3285 , - 1684 , - 275 , - 4242 , - 3217 , - 2384 , - 1743 , - 1294 , - 1037 , - 972 , - 1099 , - 1418 , - 1929 , - 2632 , - 3527 , - 4614 , - 709 , - 2180 , - 3843 , - 514 , - 2561 , - 4800 , - 2047 , - 4670 , - 2301 , - 124 , - 3323 , - 1530 , - 5113 , - 3704 , - 2487 , - 1462 , - 629 , - 5172 , - 4723 , - 4466 , - 4401 , - 4528 , - 4847 , - 174 , - 877 , - 1772 , - 2859 , - 4138 , - 425 , - 2088 , - 3943 , - 806 , - 3045 , - 292 , - 2915 , - 546 , - 3553 , - 1568 , - 4959 , - 3358 , - 1949 , - 732 , - 4891 , - 4058 , - 3417 , - 2968 , - 2711 , - 2646 , - 2773 , - 3092 , - 3603 , - 4306 , - 17 , - 1104 , - 2383 , - 3854 , - 333 , - 2188 , - 4235 , - 1290 , - 3721 , - 1160 , - 3975 , - 1798 , - 4997 , - 3204 , - 1603 , - 194 , - 4161 , - 3136 , - 2303 , - 1662 , - 1213 , - 956 , - 891 , - 1018 , - 1337 , - 1848 , - 2551 , - 3446 , - 4533 , - 628 , - 2099 , - 3762 , - 433 , - 2480 , - 4719 , - 1966 , - 4589 , - 2220 , - 43 , - 3242 , - 1449 , - 5032 , - 3623 , - 2406 , - 1381 , - 548 , - 5091 , - 4642 , - 4385 , - 4320 , - 4447 , - 4766 , - 93 , - 796 , - 1691 , - 2778 , - 4057 , - 344 , - 2007 , - 3862 , - 725 , - 2964 , - 211 , - 2834 , - 465 , - 3472 , - 1487 , - 4878 , - 3277 , - 1868 , - 651 , - 4810 , - 3977 , - 3336 , - 2887 , - 2630 , - 2565 , - 2692 , - 3011 , - 3522 , - 4225 , - 5120 , - 1023 , - 2302 , - 3773 , - 252 , - 2107 , - 4154 , - 1209 , - 3640 , - 1079 , - 3894 , - 1717 , - 4916 , - 3123 , - 1522 , - 113 , - 4080 , - 3055 , - 2222 , - 1581 , - 1132 , - 875 , - 810 , - 937 , - 1256 , - 1767 , - 2470 , - 3365 , - 4452 , - 547 , - 2018 , - 3681 , - 352 , - 2399 , - 4638 , - 1885 , - 4508 , - 2139 , - 5146 , - 3161 , - 1368 , - 4951 , - 3542 , - 2325 , - 1300 , - 467 , - 5010 , - 4561 , - 4304 , - 4239 , - 4366 , - 4685 , - 12 , - 715 , - 1610 , - 2697 , - 3976 , - 263 , - 1926 , - 3781 , - 644 , - 2883 , - 130 , - 2753 , - 384 , - 3391 , - 1406 , - 4797 , - 3196 , - 1787 , - 570 , - 4729 , - 3896 , - 3255 , - 2806 , - 2549 , - 2484 , - 2611 , - 2930 , - 3441 , - 4144 , - 5039 , - 942 , - 2221 , - 3692 , - 171 , - 2026 , - 4073 , - 1128 , - 3559 , - 998 , - 3813 , - 1636 , - 4835 , - 3042 , - 1441 , - 32 , - 3999 , - 2974 , - 2141 , - 1500 , - 1051 , - 794 , - 729 , - 856 , - 1175 , - 1686 , - 2389 , - 3284 , - 4371 , - 466 , - 1937 , - 3600 , - 271 , - 2318 , - 4557 , - 1804 , - 4427 , - 2058 , - 5065 , - 3080 , - 1287 , - 4870 , - 3461 , - 2244 , - 1219 , - 386 , - 4929 , - 4480 , - 4223 , - 4158 , - 4285 , - 4604 , - 5115 , - 634 , - 1529 , - 2616 , - 3895 , - 182 , - 1845 , - 3700 , - 563 , - 2802 , - 49 , - 2672 , - 303 , - 3310 , - 1325 , - 4716 , - 3115 , - 1706 , - 489 , - 4648 , - 3815 , - 3174 , - 2725 , - 2468 , - 2403 , - 2530 , - 2849 , - 3360 , - 4063 , - 4958 , - 861 , - 2140 , - 3611 , - 90 , - 1945 , - 3992 , - 1047 , - 3478 , - 917 , - 3732 , - 1555 , - 4754 , - 2961 , - 1360 , - 5135 , - 3918 , - 2893 , - 2060 , - 1419 , - 970 , - 713 , - 648 , - 775 , - 1094 , - 1605 , - 2308 , - 3203 , - 4290 , - 385 , - 1856 , - 3519 , - 190 , - 2237 , - 4476 , - 1723 , - 4346 , - 1977 , - 4984 , - 2999 , - 1206 , - 4789 , - 3380 , - 2163 , - 1138 , - 305 , - 4848 , - 4399 , - 4142 , - 4077 , - 4204 , - 4523 , - 5034 , - 553 , - 1448 , - 2535 , - 3814 , - 101 , - 1764 , - 3619 , - 482 , - 2721 , - 5152 , - 2591 , - 222 , - 3229 , - 1244 , - 4635 , - 3034 , - 1625 , - 408 , - 4567 , - 3734 , - 3093 , - 2644 , - 2387 , - 2322 , - 2449 , - 2768 , - 3279 , - 3982 , - 4877 , - 780 , - 2059 , - 3530 , - 9 , - 1864 , - 3911 , - 966 , - 3397 , - 836 , - 3651 , - 1474 , - 4673 , - 2880 , - 1279 , - 5054 , - 3837 , - 2812 , - 1979 , - 1338 , - 889 , - 632 , - 567 , - 694 , - 1013 , - 1524 , - 2227 , - 3122 , - 4209 , - 304 , - 1775 , - 3438 , - 109 , - 2156 , - 4395 , - 1642 , - 4265 , - 1896 , - 4903 , - 2918 , - 1125 , - 4708 , - 3299 , - 2082 , - 1057 , - 224 , - 4767 , - 4318 , - 4061 , - 3996 , - 4123 , - 4442 , - 4953 , - 472 , - 1367 , - 2454 , - 3733 , - 20 , - 1683 , - 3538 , - 401 , - 2640 , - 5071 , - 2510 , - 141 , - 3148 , - 1163 , - 4554 , - 2953 , - 1544 , - 327 , - 4486 , - 3653 , - 3012 , - 2563 , - 2306 , - 2241 , - 2368 , - 2687 , - 3198 , - 3901 , - 4796 , - 699 , - 1978 , - 3449 , - 5112 , - 1783 , - 3830 , - 885 , - 3316 , - 755 , - 3570 , - 1393 , - 4592 , - 2799 , - 1198 , - 4973 , - 3756 , - 2731 , - 1898 , - 1257 , - 808 , - 551 , - 486 , - 613 , - 932 , - 1443 , - 2146 , - 3041 , - 4128 , - 223 , - 1694 , - 3357 , - 28 , - 2075 , - 4314 , - 1561 , - 4184 , - 1815 , - 4822 , - 2837 , - 1044 , - 4627 , - 3218 , - 2001 , - 976 , - 143 , - 4686 , - 4237 , - 3980 , - 3915 , - 4042 , - 4361 , - 4872 , - 391 , - 1286 , - 2373 , - 3652 , - 5123 , - 1602 , - 3457 , - 320 , - 2559 , - 4990 , - 2429 , - 60 , - 3067 , - 1082 , - 4473 , - 2872 , - 1463 , - 246 , - 4405 , - 3572 , - 2931 , - 2482 , - 2225 , - 2160 , - 2287 , - 2606 , - 3117 , - 3820 , - 4715 , - 618 , - 1897 , - 3368 , - 5031 , - 1702 , - 3749 , - 804 , - 3235 , - 674 , - 3489 , - 1312 , - 4511 , - 2718 , - 1117 , - 4892 , - 3675 , - 2650 , - 1817 , - 1176 , - 727 , - 470 , - 405 , - 532 , - 851 , - 1362 , - 2065 , - 2960 , - 4047 , - 142 , - 1613 , - 3276 , - 5131 , - 1994 , - 4233 , - 1480 , - 4103 , - 1734 , - 4741 , - 2756 , - 963 , - 4546 , - 3137 , - 1920 , - 895 , - 62 , - 4605 , - 4156 , - 3899 , - 3834 , - 3961 , - 4280 , - 4791 , - 310 , - 1205 , - 2292 , - 3571 , - 5042 , - 1521 , - 3376 , - 239 , - 2478 , - 4909 , - 2348 , - 5163 , - 2986 , - 1001 , - 4392 , - 2791 , - 1382 , - 165 , - 4324 , - 3491 , - 2850 , - 2401 , - 2144 , - 2079 , - 2206 , - 2525 , - 3036 , - 3739 , - 4634 , - 537 , - 1816 , - 3287 , - 4950 , - 1621 , - 3668 , - 723 , - 3154 , - 593 , - 3408 , - 1231 , - 4430 , - 2637 , - 1036 , - 4811 , - 3594 , - 2569 , - 1736 , - 1095 , - 646 , - 389 , - 324 , - 451 , - 770 , - 1281 , - 1984 , - 2879 , - 3966 , - 61 , - 1532 , - 3195 , - 5050 , - 1913 , - 4152 , - 1399 , - 4022 , - 1653 , - 4660 , - 2675 , - 882 , - 4465 , - 3056 , - 1839 , - 814 , - 5165 , - 4524 , - 4075 , - 3818 , - 3753 , - 3880 , - 4199 , - 4710 , - 229 , - 1124 , - 2211 , - 3490 , - 4961 , - 1440 , - 3295 , - 158 , - 2397 , - 4828 , - 2267 , - 5082 , - 2905 , - 920 , - 4311 , - 2710 , - 1301 , - 84 , - 4243 , - 3410 , - 2769 , - 2320 , - 2063 , - 1998 , - 2125 , - 2444 , - 2955 , - 3658 , - 4553 , - 456 , - 1735 , - 3206 , - 4869 , - 1540 , - 3587 , - 642 , - 3073 , - 512 , - 3327 , - 1150 , - 4349 , - 2556 , - 955 , - 4730 , - 3513 , - 2488 , - 1655 , - 1014 , - 565 , - 308 , - 243 , - 370 , - 689 , - 1200 , - 1903 , - 2798 , - 3885 , - 5164 , - 1451 , - 3114 , - 4969 , - 1832 , - 4071 , - 1318 , - 3941 , - 1572 , - 4579 , - 2594 , - 801 , - 4384 , - 2975 , - 1758 , - 733 , - 5084 , - 4443 , - 3994 , - 3737 , - 3672 , - 3799 , - 4118 , - 4629 , - 148 , - 1043 , - 2130 , - 3409 , - 4880 , - 1359 , - 3214 , - 77 , - 2316 , - 4747 , - 2186 , - 5001 , - 2824 , - 839 , - 4230 , - 2629 , - 1220 , - 3 , - 4162 , - 3329 , - 2688 , - 2239 , - 1982 , - 1917 , - 2044 , - 2363 , - 2874 , - 3577 , - 4472 , - 375 , - 1654 , - 3125 , - 4788 , - 1459 , - 3506 , - 561 , - 2992 , - 431 , - 3246 , - 1069 , - 4268 , - 2475 , - 874 , - 4649 , - 3432 , - 2407 , - 1574 , - 933 , - 484 , - 227 , - 162 , - 289 , - 608 , - 1119 , - 1822 , - 2717 , - 3804 , - 5083 , - 1370 , - 3033 , - 4888 , - 1751 , - 3990 , - 1237 , - 3860 , - 1491 , - 4498 , - 2513 , - 720 , - 4303 , - 2894 , - 1677 , - 652 , - 5003 , - 4362 , - 3913 , - 3656 , - 3591 , - 3718 , - 4037 , - 4548 , - 67 , - 962 , - 2049 , - 3328 , - 4799 , - 1278 , - 3133 , - 5180 , - 2235 , - 4666 , - 2105 , - 4920 , - 2743 , - 758 , - 4149 , - 2548 , - 1139 , - 5106 , - 4081 , - 3248 , - 2607 , - 2158 , - 1901 , - 1836 , - 1963 , - 2282 , - 2793 , - 3496 , - 4391 , - 294 , - 1573 , - 3044 , - 4707 , - 1378 , - 3425 , - 480 , - 2911 , - 350 , - 3165 , - 988 , - 4187 , - 2394 , - 793 , - 4568 , - 3351 , - 2326 , - 1493 , - 852 , - 403 , - 146 , - 81 , - 208 , - 527 , - 1038 , - 1741 , - 2636 , - 3723 , - 5002 , - 1289 , - 2952 , - 4807 , - 1670 , - 3909 , - 1156 , - 3779 , - 1410 , - 4417 , - 2432 , - 639 , - 4222 , - 2813 , - 1596 , - 571 , - 4922 , - 4281 , - 3832 , - 3575 , - 3510 , - 3637 , - 3956 , - 4467 , - 5170 , - 881 , - 1968 , - 3247 , - 4718 , - 1197 , - 3052 , - 5099 , - 2154 , - 4585 , - 2024 , - 4839 , - 2662 , - 677 , - 4068 , - 2467 , - 1058 , - 5025 , - 4000 , - 3167 , - 2526 , - 2077 , - 1820 , - 1755 , - 1882 , - 2201 , - 2712 , - 3415 , - 4310 , - 213 , - 1492 , - 2963 , - 4626 , - 1297 , - 3344 , - 399 , - 2830 , - 269 , - 3084 , - 907 , - 4106 , - 2313 , - 712 , - 4487 , - 3270 , - 2245 , - 1412 , - 771 , - 322 , - 65 , - 0 , - 1015 , - 3834 , - 3209 , - 4388 , - 2123 , - 1662 , - 3005 , - 904 , - 607 , - 2114 , - 177 , - 44 , - 1715 , - 5190 , - 5221 , - 1808 , - 199 , - 394 , - 2393 , - 948 , - 1307 , - 3470 , - 2189 , - 2712 , - 5039 , - 3922 , - 4609 , - 1852 , - 899 , - 1750 , - 4405 , - 3616 , - 4631 , - 2202 , - 1577 , - 2756 , - 491 , - 30 , - 1373 , - 4520 , - 4223 , - 482 , - 3793 , - 3660 , - 83 , - 3558 , - 3589 , - 176 , - 3815 , - 4010 , - 761 , - 4564 , - 4923 , - 1838 , - 557 , - 1080 , - 3407 , - 2290 , - 2977 , - 220 , - 4515 , - 118 , - 2773 , - 1984 , - 2999 , - 570 , - 5193 , - 1124 , - 4107 , - 3646 , - 4989 , - 2888 , - 2591 , - 4098 , - 2161 , - 2028 , - 3699 , - 1926 , - 1957 , - 3792 , - 2183 , - 2378 , - 4377 , - 2932 , - 3291 , - 206 , - 4173 , - 4696 , - 1775 , - 658 , - 1345 , - 3836 , - 2883 , - 3734 , - 1141 , - 352 , - 1367 , - 4186 , - 3561 , - 4740 , - 2475 , - 2014 , - 3357 , - 1256 , - 959 , - 2466 , - 529 , - 396 , - 2067 , - 294 , - 325 , - 2160 , - 551 , - 746 , - 2745 , - 1300 , - 1659 , - 3822 , - 2541 , - 3064 , - 143 , - 4274 , - 4961 , - 2204 , - 1251 , - 2102 , - 4757 , - 3968 , - 4983 , - 2554 , - 1929 , - 3108 , - 843 , - 382 , - 1725 , - 4872 , - 4575 , - 834 , - 4145 , - 4012 , - 435 , - 3910 , - 3941 , - 528 , - 4167 , - 4362 , - 1113 , - 4916 , - 27 , - 2190 , - 909 , - 1432 , - 3759 , - 2642 , - 3329 , - 572 , - 4867 , - 470 , - 3125 , - 2336 , - 3351 , - 922 , - 297 , - 1476 , - 4459 , - 3998 , - 93 , - 3240 , - 2943 , - 4450 , - 2513 , - 2380 , - 4051 , - 2278 , - 2309 , - 4144 , - 2535 , - 2730 , - 4729 , - 3284 , - 3643 , - 558 , - 4525 , - 5048 , - 2127 , - 1010 , - 1697 , - 4188 , - 3235 , - 4086 , - 1493 , - 704 , - 1719 , - 4538 , - 3913 , - 5092 , - 2827 , - 2366 , - 3709 , - 1608 , - 1311 , - 2818 , - 881 , - 748 , - 2419 , - 646 , - 677 , - 2512 , - 903 , - 1098 , - 3097 , - 1652 , - 2011 , - 4174 , - 2893 , - 3416 , - 495 , - 4626 , - 65 , - 2556 , - 1603 , - 2454 , - 5109 , - 4320 , - 87 , - 2906 , - 2281 , - 3460 , - 1195 , - 734 , - 2077 , - 5224 , - 4927 , - 1186 , - 4497 , - 4364 , - 787 , - 4262 , - 4293 , - 880 , - 4519 , - 4714 , - 1465 , - 20 , - 379 , - 2542 , - 1261 , - 1784 , - 4111 , - 2994 , - 3681 , - 924 , - 5219 , - 822 , - 3477 , - 2688 , - 3703 , - 1274 , - 649 , - 1828 , - 4811 , - 4350 , - 445 , - 3592 , - 3295 , - 4802 , - 2865 , - 2732 , - 4403 , - 2630 , - 2661 , - 4496 , - 2887 , - 3082 , - 5081 , - 3636 , - 3995 , - 910 , - 4877 , - 152 , - 2479 , - 1362 , - 2049 , - 4540 , - 3587 , - 4438 , - 1845 , - 1056 , - 2071 , - 4890 , - 4265 , - 196 , - 3179 , - 2718 , - 4061 , - 1960 , - 1663 , - 3170 , - 1233 , - 1100 , - 2771 , - 998 , - 1029 , - 2864 , - 1255 , - 1450 , - 3449 , - 2004 , - 2363 , - 4526 , - 3245 , - 3768 , - 847 , - 4978 , - 417 , - 2908 , - 1955 , - 2806 , - 213 , - 4672 , - 439 , - 3258 , - 2633 , - 3812 , - 1547 , - 1086 , - 2429 , - 328 , - 31 , - 1538 , - 4849 , - 4716 , - 1139 , - 4614 , - 4645 , - 1232 , - 4871 , - 5066 , - 1817 , - 372 , - 731 , - 2894 , - 1613 , - 2136 , - 4463 , - 3346 , - 4033 , - 1276 , - 323 , - 1174 , - 3829 , - 3040 , - 4055 , - 1626 , - 1001 , - 2180 , - 5163 , - 4702 , - 797 , - 3944 , - 3647 , - 5154 , - 3217 , - 3084 , - 4755 , - 2982 , - 3013 , - 4848 , - 3239 , - 3434 , - 185 , - 3988 , - 4347 , - 1262 , - 5229 , - 504 , - 2831 , - 1714 , - 2401 , - 4892 , - 3939 , - 4790 , - 2197 , - 1408 , - 2423 , - 5242 , - 4617 , - 548 , - 3531 , - 3070 , - 4413 , - 2312 , - 2015 , - 3522 , - 1585 , - 1452 , - 3123 , - 1350 , - 1381 , - 3216 , - 1607 , - 1802 , - 3801 , - 2356 , - 2715 , - 4878 , - 3597 , - 4120 , - 1199 , - 82 , - 769 , - 3260 , - 2307 , - 3158 , - 565 , - 5024 , - 791 , - 3610 , - 2985 , - 4164 , - 1899 , - 1438 , - 2781 , - 680 , - 383 , - 1890 , - 5201 , - 5068 , - 1491 , - 4966 , - 4997 , - 1584 , - 5223 , - 170 , - 2169 , - 724 , - 1083 , - 3246 , - 1965 , - 2488 , - 4815 , - 3698 , - 4385 , - 1628 , - 675 , - 1526 , - 4181 , - 3392 , - 4407 , - 1978 , - 1353 , - 2532 , - 267 , - 5054 , - 1149 , - 4296 , - 3999 , - 258 , - 3569 , - 3436 , - 5107 , - 3334 , - 3365 , - 5200 , - 3591 , - 3786 , - 537 , - 4340 , - 4699 , - 1614 , - 333 , - 856 , - 3183 , - 2066 , - 2753 , - 5244 , - 4291 , - 5142 , - 2549 , - 1760 , - 2775 , - 346 , - 4969 , - 900 , - 3883 , - 3422 , - 4765 , - 2664 , - 2367 , - 3874 , - 1937 , - 1804 , - 3475 , - 1702 , - 1733 , - 3568 , - 1959 , - 2154 , - 4153 , - 2708 , - 3067 , - 5230 , - 3949 , - 4472 , - 1551 , - 434 , - 1121 , - 3612 , - 2659 , - 3510 , - 917 , - 128 , - 1143 , - 3962 , - 3337 , - 4516 , - 2251 , - 1790 , - 3133 , - 1032 , - 735 , - 2242 , - 305 , - 172 , - 1843 , - 70 , - 101 , - 1936 , - 327 , - 522 , - 2521 , - 1076 , - 1435 , - 3598 , - 2317 , - 2840 , - 5167 , - 4050 , - 4737 , - 1980 , - 1027 , - 1878 , - 4533 , - 3744 , - 4759 , - 2330 , - 1705 , - 2884 , - 619 , - 158 , - 1501 , - 4648 , - 4351 , - 610 , - 3921 , - 3788 , - 211 , - 3686 , - 3717 , - 304 , - 3943 , - 4138 , - 889 , - 4692 , - 5051 , - 1966 , - 685 , - 1208 , - 3535 , - 2418 , - 3105 , - 348 , - 4643 , - 246 , - 2901 , - 2112 , - 3127 , - 698 , - 73 , - 1252 , - 4235 , - 3774 , - 5117 , - 3016 , - 2719 , - 4226 , - 2289 , - 2156 , - 3827 , - 2054 , - 2085 , - 3920 , - 2311 , - 2506 , - 4505 , - 3060 , - 3419 , - 334 , - 4301 , - 4824 , - 1903 , - 786 , - 1473 , - 3964 , - 3011 , - 3862 , - 1269 , - 480 , - 1495 , - 4314 , - 3689 , - 4868 , - 2603 , - 2142 , - 3485 , - 1384 , - 1087 , - 2594 , - 657 , - 524 , - 2195 , - 422 , - 453 , - 2288 , - 679 , - 874 , - 2873 , - 1428 , - 1787 , - 3950 , - 2669 , - 3192 , - 271 , - 4402 , - 5089 , - 2332 , - 1379 , - 2230 , - 4885 , - 4096 , - 5111 , - 2682 , - 2057 , - 3236 , - 971 , - 510 , - 1853 , - 5000 , - 4703 , - 962 , - 4273 , - 4140 , - 563 , - 4038 , - 4069 , - 656 , - 4295 , - 4490 , - 1241 , - 5044 , - 155 , - 2318 , - 1037 , - 1560 , - 3887 , - 2770 , - 3457 , - 700 , - 4995 , - 598 , - 3253 , - 2464 , - 3479 , - 1050 , - 425 , - 1604 , - 4587 , - 4126 , - 221 , - 3368 , - 3071 , - 4578 , - 2641 , - 2508 , - 4179 , - 2406 , - 2437 , - 4272 , - 2663 , - 2858 , - 4857 , - 3412 , - 3771 , - 686 , - 4653 , - 5176 , - 2255 , - 1138 , - 1825 , - 4316 , - 3363 , - 4214 , - 1621 , - 832 , - 1847 , - 4666 , - 4041 , - 5220 , - 2955 , - 2494 , - 3837 , - 1736 , - 1439 , - 2946 , - 1009 , - 876 , - 2547 , - 774 , - 805 , - 2640 , - 1031 , - 1226 , - 3225 , - 1780 , - 2139 , - 4302 , - 3021 , - 3544 , - 623 , - 4754 , - 193 , - 2684 , - 1731 , - 2582 , - 5237 , - 4448 , - 215 , - 3034 , - 2409 , - 3588 , - 1323 , - 862 , - 2205 , - 104 , - 5055 , - 1314 , - 4625 , - 4492 , - 915 , - 4390 , - 4421 , - 1008 , - 4647 , - 4842 , - 1593 , - 148 , - 507 , - 2670 , - 1389 , - 1912 , - 4239 , - 3122 , - 3809 , - 1052 , - 99 , - 950 , - 3605 , - 2816 , - 3831 , - 1402 , - 777 , - 1956 , - 4939 , - 4478 , - 573 , - 3720 , - 3423 , - 4930 , - 2993 , - 2860 , - 4531 , - 2758 , - 2789 , - 4624 , - 3015 , - 3210 , - 5209 , - 3764 , - 4123 , - 1038 , - 5005 , - 280 , - 2607 , - 1490 , - 2177 , - 4668 , - 3715 , - 4566 , - 1973 , - 1184 , - 2199 , - 5018 , - 4393 , - 324 , - 3307 , - 2846 , - 4189 , - 2088 , - 1791 , - 3298 , - 1361 , - 1228 , - 2899 , - 1126 , - 1157 , - 2992 , - 1383 , - 1578 , - 3577 , - 2132 , - 2491 , - 4654 , - 3373 , - 3896 , - 975 , - 5106 , - 545 , - 3036 , - 2083 , - 2934 , - 341 , - 4800 , - 567 , - 3386 , - 2761 , - 3940 , - 1675 , - 1214 , - 2557 , - 456 , - 159 , - 1666 , - 4977 , - 4844 , - 1267 , - 4742 , - 4773 , - 1360 , - 4999 , - 5194 , - 1945 , - 500 , - 859 , - 3022 , - 1741 , - 2264 , - 4591 , - 3474 , - 4161 , - 1404 , - 451 , - 1302 , - 3957 , - 3168 , - 4183 , - 1754 , - 1129 , - 2308 , - 43 , - 4830 , - 925 , - 4072 , - 3775 , - 34 , - 3345 , - 3212 , - 4883 , - 3110 , - 3141 , - 4976 , - 3367 , - 3562 , - 313 , - 4116 , - 4475 , - 1390 , - 109 , - 632 , - 2959 , - 1842 , - 2529 , - 5020 , - 4067 , - 4918 , - 2325 , - 1536 , - 2551 , - 122 , - 4745 , - 676 , - 3659 , - 3198 , - 4541 , - 2440 , - 2143 , - 3650 , - 1713 , - 1580 , - 3251 , - 1478 , - 1509 , - 3344 , - 1735 , - 1930 , - 3929 , - 2484 , - 2843 , - 5006 , - 3725 , - 4248 , - 1327 , - 210 , - 897 , - 3388 , - 2435 , - 3286 , - 693 , - 5152 , - 919 , - 3738 , - 3113 , - 4292 , - 2027 , - 1566 , - 2909 , - 808 , - 511 , - 2018 , - 81 , - 5196 , - 1619 , - 5094 , - 5125 , - 1712 , - 103 , - 298 , - 2297 , - 852 , - 1211 , - 3374 , - 2093 , - 2616 , - 4943 , - 3826 , - 4513 , - 1756 , - 803 , - 1654 , - 4309 , - 3520 , - 4535 , - 2106 , - 1481 , - 2660 , - 395 , - 5182 , - 1277 , - 4424 , - 4127 , - 386 , - 3697 , - 3564 , - 5235 , - 3462 , - 3493 , - 80 , - 3719 , - 3914 , - 665 , - 4468 , - 4827 , - 1742 , - 461 , - 984 , - 3311 , - 2194 , - 2881 , - 124 , - 4419 , - 22 , - 2677 , - 1888 , - 2903 , - 474 , - 5097 , - 1028 , - 4011 , - 3550 , - 4893 , - 2792 , - 2495 , - 4002 , - 2065 , - 1932 , - 3603 , - 1830 , - 1861 , - 3696 , - 2087 , - 2282 , - 4281 , - 2836 , - 3195 , - 110 , - 4077 , - 4600 , - 1679 , - 562 , - 1249 , - 3740 , - 2787 , - 3638 , - 1045 , - 256 , - 1271 , - 4090 , - 3465 , - 4644 , - 2379 , - 1918 , - 3261 , - 1160 , - 863 , - 2370 , - 433 , - 300 , - 1971 , - 198 , - 229 , - 2064 , - 455 , - 650 , - 2649 , - 1204 , - 1563 , - 3726 , - 2445 , - 2968 , - 47 , - 4178 , - 4865 , - 2108 , - 1155 , - 2006 , - 4661 , - 3872 , - 4887 , - 2458 , - 1833 , - 3012 , - 747 , - 286 , - 1629 , - 4776 , - 4479 , - 738 , - 4049 , - 3916 , - 339 , - 3814 , - 3845 , - 432 , - 4071 , - 4266 , - 1017 , - 4820 , - 5179 , - 2094 , - 813 , - 1336 , - 3663 , - 2546 , - 3233 , - 476 , - 4771 , - 374 , - 3029 , - 2240 , - 3255 , - 826 , - 201 , - 1380 , - 4363 , - 3902 , - 5245 , - 3144 , - 2847 , - 4354 , - 2417 , - 2284 , - 3955 , - 2182 , - 2213 , - 4048 , - 2439 , - 2634 , - 4633 , - 3188 , - 3547 , - 462 , - 4429 , - 4952 , - 2031 , - 914 , - 1601 , - 4092 , - 3139 , - 3990 , - 1397 , - 608 , - 1623 , - 4442 , - 3817 , - 4996 , - 2731 , - 2270 , - 3613 , - 1512 , - 1215 , - 2722 , - 785 , - 652 , - 2323 , - 550 , - 581 , - 2416 , - 807 , - 1002 , - 3001 , - 1556 , - 1915 , - 4078 , - 2797 , - 3320 , - 399 , - 4530 , - 5217 , - 2460 , - 1507 , - 2358 , - 5013 , - 4224 , - 5239 , - 2810 , - 2185 , - 3364 , - 1099 , - 638 , - 1981 , - 5128 , - 4831 , - 1090 , - 4401 , - 4268 , - 691 , - 4166 , - 4197 , - 784 , - 4423 , - 4618 , - 1369 , - 5172 , - 283 , - 2446 , - 1165 , - 1688 , - 4015 , - 2898 , - 3585 , - 828 , - 5123 , - 726 , - 3381 , - 2592 , - 3607 , - 1178 , - 553 , - 1732 , - 4715 , - 4254 , - 349 , - 3496 , - 3199 , - 4706 , - 2769 , - 2636 , - 4307 , - 2534 , - 2565 , - 4400 , - 2791 , - 2986 , - 4985 , - 3540 , - 3899 , - 814 , - 4781 , - 56 , - 2383 , - 1266 , - 1953 , - 4444 , - 3491 , - 4342 , - 1749 , - 960 , - 1975 , - 4794 , - 4169 , - 100 , - 3083 , - 2622 , - 3965 , - 1864 , - 1567 , - 3074 , - 1137 , - 1004 , - 2675 , - 902 , - 933 , - 2768 , - 1159 , - 1354 , - 3353 , - 1908 , - 2267 , - 4430 , - 3149 , - 3672 , - 751 , - 4882 , - 321 , - 2812 , - 1859 , - 2710 , - 117 , - 4576 , - 343 , - 3162 , - 2537 , - 3716 , - 1451 , - 990 , - 2333 , - 232 , - 5183 , - 1442 , - 4753 , - 4620 , - 1043 , - 4518 , - 4549 , - 1136 , - 4775 , - 4970 , - 1721 , - 276 , - 635 , - 2798 , - 1517 , - 2040 , - 4367 , - 3250 , - 3937 , - 1180 , - 227 , - 1078 , - 3733 , - 2944 , - 3959 , - 1530 , - 905 , - 2084 , - 5067 , - 4606 , - 701 , - 3848 , - 3551 , - 5058 , - 3121 , - 2988 , - 4659 , - 2886 , - 2917 , - 4752 , - 3143 , - 3338 , - 89 , - 3892 , - 4251 , - 1166 , - 5133 , - 408 , - 2735 , - 1618 , - 2305 , - 4796 , - 3843 , - 4694 , - 2101 , - 1312 , - 2327 , - 5146 , - 4521 , - 452 , - 3435 , - 2974 , - 4317 , - 2216 , - 1919 , - 3426 , - 1489 , - 1356 , - 3027 , - 1254 , - 1285 , - 3120 , - 1511 , - 1706 , - 3705 , - 2260 , - 2619 , - 4782 , - 3501 , - 4024 , - 1103 , - 5234 , - 673 , - 3164 , - 2211 , - 3062 , - 469 , - 4928 , - 695 , - 3514 , - 2889 , - 4068 , - 1803 , - 1342 , - 2685 , - 584 , - 287 , - 1794 , - 5105 , - 4972 , - 1395 , - 4870 , - 4901 , - 1488 , - 5127 , - 74 , - 2073 , - 628 , - 987 , - 3150 , - 1869 , - 2392 , - 4719 , - 3602 , - 4289 , - 1532 , - 579 , - 1430 , - 4085 , - 3296 , - 4311 , - 1882 , - 1257 , - 2436 , - 171 , - 4958 , - 1053 , - 4200 , - 3903 , - 162 , - 3473 , - 3340 , - 5011 , - 3238 , - 3269 , - 5104 , - 3495 , - 3690 , - 441 , - 4244 , - 4603 , - 1518 , - 237 , - 760 , - 3087 , - 1970 , - 2657 , - 5148 , - 4195 , - 5046 , - 2453 , - 1664 , - 2679 , - 250 , - 4873 , - 804 , - 3787 , - 3326 , - 4669 , - 2568 , - 2271 , - 3778 , - 1841 , - 1708 , - 3379 , - 1606 , - 1637 , - 3472 , - 1863 , - 2058 , - 4057 , - 2612 , - 2971 , - 5134 , - 3853 , - 4376 , - 1455 , - 338 , - 1025 , - 3516 , - 2563 , - 3414 , - 821 , - 32 , - 1047 , - 3866 , - 3241 , - 4420 , - 2155 , - 1694 , - 3037 , - 936 , - 639 , - 2146 , - 209 , - 76 , - 1747 , - 5222 , - 5 , - 1840 , - 231 , - 426 , - 2425 , - 980 , - 1339 , - 3502 , - 2221 , - 2744 , - 5071 , - 3954 , - 4641 , - 1884 , - 931 , - 1782 , - 4437 , - 3648 , - 4663 , - 2234 , - 1609 , - 2788 , - 523 , - 62 , - 1405 , - 4552 , - 4255 , - 514 , - 3825 , - 3692 , - 115 , - 3590 , - 3621 , - 208 , - 3847 , - 4042 , - 793 , - 4596 , - 4955 , - 1870 , - 589 , - 1112 , - 3439 , - 2322 , - 3009 , - 252 , - 4547 , - 150 , - 2805 , - 2016 , - 3031 , - 602 , - 5225 , - 1156 , - 4139 , - 3678 , - 5021 , - 2920 , - 2623 , - 4130 , - 2193 , - 2060 , - 3731 , - 1958 , - 1989 , - 3824 , - 2215 , - 2410 , - 4409 , - 2964 , - 3323 , - 238 , - 4205 , - 4728 , - 1807 , - 690 , - 1377 , - 3868 , - 2915 , - 3766 , - 1173 , - 384 , - 1399 , - 4218 , - 3593 , - 4772 , - 2507 , - 2046 , - 3389 , - 1288 , - 991 , - 2498 , - 561 , - 428 , - 2099 , - 326 , - 357 , - 2192 , - 583 , - 778 , - 2777 , - 1332 , - 1691 , - 3854 , - 2573 , - 3096 , - 175 , - 4306 , - 4993 , - 2236 , - 1283 , - 2134 , - 4789 , - 4000 , - 5015 , - 2586 , - 1961 , - 3140 , - 875 , - 414 , - 1757 , - 4904 , - 4607 , - 866 , - 4177 , - 4044 , - 467 , - 3942 , - 3973 , - 560 , - 4199 , - 4394 , - 1145 , - 4948 , - 59 , - 2222 , - 941 , - 1464 , - 3791 , - 2674 , - 3361 , - 604 , - 4899 , - 502 , - 3157 , - 2368 , - 3383 , - 954 , - 329 , - 1508 , - 4491 , - 4030 , - 125 , - 3272 , - 2975 , - 4482 , - 2545 , - 2412 , - 4083 , - 2310 , - 2341 , - 4176 , - 2567 , - 2762 , - 4761 , - 3316 , - 3675 , - 590 , - 4557 , - 5080 , - 2159 , - 1042 , - 1729 , - 4220 , - 3267 , - 4118 , - 1525 , - 736 , - 1751 , - 4570 , - 3945 , - 5124 , - 2859 , - 2398 , - 3741 , - 1640 , - 1343 , - 2850 , - 913 , - 780 , - 2451 , - 678 , - 709 , - 2544 , - 935 , - 1130 , - 3129 , - 1684 , - 2043 , - 4206 , - 2925 , - 3448 , - 527 , - 4658 , - 97 , - 2588 , - 1635 , - 2486 , - 5141 , - 4352 , - 119 , - 2938 , - 2313 , - 3492 , - 1227 , - 766 , - 2109 , - 8 , - 4959 , - 1218 , - 4529 , - 4396 , - 819 , - 4294 , - 4325 , - 912 , - 4551 , - 4746 , - 1497 , - 52 , - 411 , - 2574 , - 1293 , - 1816 , - 4143 , - 3026 , - 3713 , - 956 , - 3 , - 854 , - 3509 , - 2720 , - 3735 , - 1306 , - 681 , - 1860 , - 4843 , - 4382 , - 477 , - 3624 , - 3327 , - 4834 , - 2897 , - 2764 , - 4435 , - 2662 , - 2693 , - 4528 , - 2919 , - 3114 , - 5113 , - 3668 , - 4027 , - 942 , - 4909 , - 184 , - 2511 , - 1394 , - 2081 , - 4572 , - 3619 , - 4470 , - 1877 , - 1088 , - 2103 , - 4922 , - 4297 , - 228 , - 3211 , - 2750 , - 4093 , - 1992 , - 1695 , - 3202 , - 1265 , - 1132 , - 2803 , - 1030 , - 1061 , - 2896 , - 1287 , - 1482 , - 3481 , - 2036 , - 2395 , - 4558 , - 3277 , - 3800 , - 879 , - 5010 , - 449 , - 2940 , - 1987 , - 2838 , - 245 , - 4704 , - 471 , - 3290 , - 2665 , - 3844 , - 1579 , - 1118 , - 2461 , - 360 , - 63 , - 1570 , - 4881 , - 4748 , - 1171 , - 4646 , - 4677 , - 1264 , - 4903 , - 5098 , - 1849 , - 404 , - 763 , - 2926 , - 1645 , - 2168 , - 4495 , - 3378 , - 4065 , - 1308 , - 355 , - 1206 , - 3861 , - 3072 , - 4087 , - 1658 , - 1033 , - 2212 , - 5195 , - 4734 , - 829 , - 3976 , - 3679 , - 5186 , - 3249 , - 3116 , - 4787 , - 3014 , - 3045 , - 4880 , - 3271 , - 3466 , - 217 , - 4020 , - 4379 , - 1294 , - 13 , - 536 , - 2863 , - 1746 , - 2433 , - 4924 , - 3971 , - 4822 , - 2229 , - 1440 , - 2455 , - 26 , - 4649 , - 580 , - 3563 , - 3102 , - 4445 , - 2344 , - 2047 , - 3554 , - 1617 , - 1484 , - 3155 , - 1382 , - 1413 , - 3248 , - 1639 , - 1834 , - 3833 , - 2388 , - 2747 , - 4910 , - 3629 , - 4152 , - 1231 , - 114 , - 801 , - 3292 , - 2339 , - 3190 , - 597 , - 5056 , - 823 , - 3642 , - 3017 , - 4196 , - 1931 , - 1470 , - 2813 , - 712 , - 415 , - 1922 , - 5233 , - 5100 , - 1523 , - 4998 , - 5029 , - 1616 , - 7 , - 202 , - 2201 , - 756 , - 1115 , - 3278 , - 1997 , - 2520 , - 4847 , - 3730 , - 4417 , - 1660 , - 707 , - 1558 , - 4213 , - 3424 , - 4439 , - 2010 , - 1385 , - 2564 , - 299 , - 5086 , - 1181 , - 4328 , - 4031 , - 290 , - 3601 , - 3468 , - 5139 , - 3366 , - 3397 , - 5232 , - 3623 , - 3818 , - 569 , - 4372 , - 4731 , - 1646 , - 365 , - 888 , - 3215 , - 2098 , - 2785 , - 28 , - 4323 , - 5174 , - 2581 , - 1792 , - 2807 , - 378 , - 5001 , - 932 , - 3915 , - 3454 , - 4797 , - 2696 , - 2399 , - 3906 , - 1969 , - 1836 , - 3507 , - 1734 , - 1765 , - 3600 , - 1991 , - 2186 , - 4185 , - 2740 , - 3099 , - 14 , - 3981 , - 4504 , - 1583 , - 466 , - 1153 , - 3644 , - 2691 , - 3542 , - 949 , - 160 , - 1175 , - 3994 , - 3369 , - 4548 , - 2283 , - 1822 , - 3165 , - 1064 , - 767 , - 2274 , - 337 , - 204 , - 1875 , - 102 , - 133 , - 1968 , - 359 , - 554 , - 2553 , - 1108 , - 1467 , - 3630 , - 2349 , - 2872 , - 5199 , - 4082 , - 4769 , - 2012 , - 1059 , - 1910 , - 4565 , - 3776 , - 4791 , - 2362 , - 1737 , - 2916 , - 651 , - 190 , - 1533 , - 4680 , - 4383 , - 642 , - 3953 , - 3820 , - 243 , - 3718 , - 3749 , - 336 , - 3975 , - 4170 , - 921 , - 4724 , - 5083 , - 1998 , - 717 , - 1240 , - 3567 , - 2450 , - 3137 , - 380 , - 4675 , - 278 , - 2933 , - 2144 , - 3159 , - 730 , - 105 , - 1284 , - 4267 , - 3806 , - 5149 , - 3048 , - 2751 , - 4258 , - 2321 , - 2188 , - 3859 , - 2086 , - 2117 , - 3952 , - 2343 , - 2538 , - 4537 , - 3092 , - 3451 , - 366 , - 4333 , - 4856 , - 1935 , - 818 , - 1505 , - 3996 , - 3043 , - 3894 , - 1301 , - 512 , - 1527 , - 4346 , - 3721 , - 4900 , - 2635 , - 2174 , - 3517 , - 1416 , - 1119 , - 2626 , - 689 , - 556 , - 2227 , - 454 , - 485 , - 2320 , - 711 , - 906 , - 2905 , - 1460 , - 1819 , - 3982 , - 2701 , - 3224 , - 303 , - 4434 , - 5121 , - 2364 , - 1411 , - 2262 , - 4917 , - 4128 , - 5143 , - 2714 , - 2089 , - 3268 , - 1003 , - 542 , - 1885 , - 5032 , - 4735 , - 994 , - 4305 , - 4172 , - 595 , - 4070 , - 4101 , - 688 , - 4327 , - 4522 , - 1273 , - 5076 , - 187 , - 2350 , - 1069 , - 1592 , - 3919 , - 2802 , - 3489 , - 732 , - 5027 , - 630 , - 3285 , - 2496 , - 3511 , - 1082 , - 457 , - 1636 , - 4619 , - 4158 , - 253 , - 3400 , - 3103 , - 4610 , - 2673 , - 2540 , - 4211 , - 2438 , - 2469 , - 4304 , - 2695 , - 2890 , - 4889 , - 3444 , - 3803 , - 718 , - 4685 , - 5208 , - 2287 , - 1170 , - 1857 , - 4348 , - 3395 , - 4246 , - 1653 , - 864 , - 1879 , - 4698 , - 4073 , - 4 , - 2987 , - 2526 , - 3869 , - 1768 , - 1471 , - 2978 , - 1041 , - 908 , - 2579 , - 806 , - 837 , - 2672 , - 1063 , - 1258 , - 3257 , - 1812 , - 2171 , - 4334 , - 3053 , - 3576 , - 655 , - 4786 , - 225 , - 2716 , - 1763 , - 2614 , - 21 , - 4480 , - 247 , - 3066 , - 2441 , - 3620 , - 1355 , - 894 , - 2237 , - 136 , - 5087 , - 1346 , - 4657 , - 4524 , - 947 , - 4422 , - 4453 , - 1040 , - 4679 , - 4874 , - 1625 , - 180 , - 539 , - 2702 , - 1421 , - 1944 , - 4271 , - 3154 , - 3841 , - 1084 , - 131 , - 982 , - 3637 , - 2848 , - 3863 , - 1434 , - 809 , - 1988 , - 4971 , - 4510 , - 605 , - 3752 , - 3455 , - 4962 , - 3025 , - 2892 , - 4563 , - 2790 , - 2821 , - 4656 , - 3047 , - 3242 , - 5241 , - 3796 , - 4155 , - 1070 , - 5037 , - 312 , - 2639 , - 1522 , - 2209 , - 4700 , - 3747 , - 4598 , - 2005 , - 1216 , - 2231 , - 5050 , - 4425 , - 356 , - 3339 , - 2878 , - 4221 , - 2120 , - 1823 , - 3330 , - 1393 , - 1260 , - 2931 , - 1158 , - 1189 , - 3024 , - 1415 , - 1610 , - 3609 , - 2164 , - 2523 , - 4686 , - 3405 , - 3928 , - 1007 , - 5138 , - 577 , - 3068 , - 2115 , - 2966 , - 373 , - 4832 , - 599 , - 3418 , - 2793 , - 3972 , - 1707 , - 1246 , - 2589 , - 488 , - 191 , - 1698 , - 5009 , - 4876 , - 1299 , - 4774 , - 4805 , - 1392 , - 5031 , - 5226 , - 1977 , - 532 , - 891 , - 3054 , - 1773 , - 2296 , - 4623 , - 3506 , - 4193 , - 1436 , - 483 , - 1334 , - 3989 , - 3200 , - 4215 , - 1786 , - 1161 , - 2340 , - 75 , - 4862 , - 957 , - 4104 , - 3807 , - 66 , - 3377 , - 3244 , - 4915 , - 3142 , - 3173 , - 5008 , - 3399 , - 3594 , - 345 , - 4148 , - 4507 , - 1422 , - 141 , - 664 , - 2991 , - 1874 , - 2561 , - 5052 , - 4099 , - 4950 , - 2357 , - 1568 , - 2583 , - 154 , - 4777 , - 708 , - 3691 , - 3230 , - 4573 , - 2472 , - 2175 , - 3682 , - 1745 , - 1612 , - 3283 , - 1510 , - 1541 , - 3376 , - 1767 , - 1962 , - 3961 , - 2516 , - 2875 , - 5038 , - 3757 , - 4280 , - 1359 , - 242 , - 929 , - 3420 , - 2467 , - 3318 , - 725 , - 5184 , - 951 , - 3770 , - 3145 , - 4324 , - 2059 , - 1598 , - 2941 , - 840 , - 543 , - 2050 , - 113 , - 5228 , - 1651 , - 5126 , - 5157 , - 1744 , - 135 , - 330 , - 2329 , - 884 , - 1243 , - 3406 , - 2125 , - 2648 , - 4975 , - 3858 , - 4545 , - 1788 , - 835 , - 1686 , - 4341 , - 3552 , - 4567 , - 2138 , - 1513 , - 2692 , - 427 , - 5214 , - 1309 , - 4456 , - 4159 , - 418 , - 3729 , - 3596 , - 19 , - 3494 , - 3525 , - 112 , - 3751 , - 3946 , - 697 , - 4500 , - 4859 , - 1774 , - 493 , - 1016 , - 3343 , - 2226 , - 2913 , - 156 , - 4451 , - 54 , - 2709 , - 1920 , - 2935 , - 506 , - 5129 , - 1060 , - 4043 , - 3582 , - 4925 , - 2824 , - 2527 , - 4034 , - 2097 , - 1964 , - 3635 , - 1862 , - 1893 , - 3728 , - 2119 , - 2314 , - 4313 , - 2868 , - 3227 , - 142 , - 4109 , - 4632 , - 1711 , - 594 , - 1281 , - 3772 , - 2819 , - 3670 , - 1077 , - 288 , - 1303 , - 4122 , - 3497 , - 4676 , - 2411 , - 1950 , - 3293 , - 1192 , - 895 , - 2402 , - 465 , - 332 , - 2003 , - 230 , - 261 , - 2096 , - 487 , - 682 , - 2681 , - 1236 , - 1595 , - 3758 , - 2477 , - 3000 , - 79 , - 4210 , - 4897 , - 2140 , - 1187 , - 2038 , - 4693 , - 3904 , - 4919 , - 2490 , - 1865 , - 3044 , - 779 , - 318 , - 1661 , - 4808 , - 4511 , - 770 , - 4081 , - 3948 , - 371 , - 3846 , - 3877 , - 464 , - 4103 , - 4298 , - 1049 , - 4852 , - 5211 , - 2126 , - 845 , - 1368 , - 3695 , - 2578 , - 3265 , - 508 , - 4803 , - 406 , - 3061 , - 2272 , - 3287 , - 858 , - 233 , - 1412 , - 4395 , - 3934 , - 29 , - 3176 , - 2879 , - 4386 , - 2449 , - 2316 , - 3987 , - 2214 , - 2245 , - 4080 , - 2471 , - 2666 , - 4665 , - 3220 , - 3579 , - 494 , - 4461 , - 4984 , - 2063 , - 946 , - 1633 , - 4124 , - 3171 , - 4022 , - 1429 , - 640 , - 1655 , - 4474 , - 3849 , - 5028 , - 2763 , - 2302 , - 3645 , - 1544 , - 1247 , - 2754 , - 817 , - 684 , - 2355 , - 582 , - 613 , - 2448 , - 839 , - 1034 , - 3033 , - 1588 , - 1947 , - 4110 , - 2829 , - 3352 , - 431 , - 4562 , - 1 , - 2492 , - 1539 , - 2390 , - 5045 , - 4256 , - 23 , - 2842 , - 2217 , - 3396 , - 1131 , - 670 , - 2013 , - 5160 , - 4863 , - 1122 , - 4433 , - 4300 , - 723 , - 4198 , - 4229 , - 816 , - 4455 , - 4650 , - 1401 , - 5204 , - 315 , - 2478 , - 1197 , - 1720 , - 4047 , - 2930 , - 3617 , - 860 , - 5155 , - 758 , - 3413 , - 2624 , - 3639 , - 1210 , - 585 , - 1764 , - 4747 , - 4286 , - 381 , - 3528 , - 3231 , - 4738 , - 2801 , - 2668 , - 4339 , - 2566 , - 2597 , - 4432 , - 2823 , - 3018 , - 5017 , - 3572 , - 3931 , - 846 , - 4813 , - 88 , - 2415 , - 1298 , - 1985 , - 4476 , - 3523 , - 4374 , - 1781 , - 992 , - 2007 , - 4826 , - 4201 , - 132 , - 3115 , - 2654 , - 3997 , - 1896 , - 1599 , - 3106 , - 1169 , - 1036 , - 2707 , - 934 , - 965 , - 2800 , - 1191 , - 1386 , - 3385 , - 1940 , - 2299 , - 4462 , - 3181 , - 3704 , - 783 , - 4914 , - 353 , - 2844 , - 1891 , - 2742 , - 149 , - 4608 , - 375 , - 3194 , - 2569 , - 3748 , - 1483 , - 1022 , - 2365 , - 264 , - 5215 , - 1474 , - 4785 , - 4652 , - 1075 , - 4550 , - 4581 , - 1168 , - 4807 , - 5002 , - 1753 , - 308 , - 667 , - 2830 , - 1549 , - 2072 , - 4399 , - 3282 , - 3969 , - 1212 , - 259 , - 1110 , - 3765 , - 2976 , - 3991 , - 1562 , - 937 , - 2116 , - 5099 , - 4638 , - 733 , - 3880 , - 3583 , - 5090 , - 3153 , - 3020 , - 4691 , - 2918 , - 2949 , - 4784 , - 3175 , - 3370 , - 121 , - 3924 , - 4283 , - 1198 , - 5165 , - 440 , - 2767 , - 1650 , - 2337 , - 4828 , - 3875 , - 4726 , - 2133 , - 1344 , - 2359 , - 5178 , - 4553 , - 484 , - 3467 , - 3006 , - 4349 , - 2248 , - 1951 , - 3458 , - 1521 , - 1388 , - 3059 , - 1286 , - 1317 , - 3152 , - 1543 , - 1738 , - 3737 , - 2292 , - 2651 , - 4814 , - 3533 , - 4056 , - 1135 , - 18 , - 705 , - 3196 , - 2243 , - 3094 , - 501 , - 4960 , - 727 , - 3546 , - 2921 , - 4100 , - 1835 , - 1374 , - 2717 , - 616 , - 319 , - 1826 , - 5137 , - 5004 , - 1427 , - 4902 , - 4933 , - 1520 , - 5159 , - 106 , - 2105 , - 660 , - 1019 , - 3182 , - 1901 , - 2424 , - 4751 , - 3634 , - 4321 , - 1564 , - 611 , - 1462 , - 4117 , - 3328 , - 4343 , - 1914 , - 1289 , - 2468 , - 203 , - 4990 , - 1085 , - 4232 , - 3935 , - 194 , - 3505 , - 3372 , - 5043 , - 3270 , - 3301 , - 5136 , - 3527 , - 3722 , - 473 , - 4276 , - 4635 , - 1550 , - 269 , - 792 , - 3119 , - 2002 , - 2689 , - 5180 , - 4227 , - 5078 , - 2485 , - 1696 , - 2711 , - 282 , - 4905 , - 836 , - 3819 , - 3358 , - 4701 , - 2600 , - 2303 , - 3810 , - 1873 , - 1740 , - 3411 , - 1638 , - 1669 , - 3504 , - 1895 , - 2090 , - 4089 , - 2644 , - 3003 , - 5166 , - 3885 , - 4408 , - 1487 , - 370 , - 1057 , - 3548 , - 2595 , - 3446 , - 853 , - 64 , - 1079 , - 3898 , - 3273 , - 4452 , - 2187 , - 1726 , - 3069 , - 968 , - 671 , - 2178 , - 241 , - 108 , - 1779 , - 6 , - 37 , - 1872 , - 263 , - 458 , - 2457 , - 1012 , - 1371 , - 3534 , - 2253 , - 2776 , - 5103 , - 3986 , - 4673 , - 1916 , - 963 , - 1814 , - 4469 , - 3680 , - 4695 , - 2266 , - 1641 , - 2820 , - 555 , - 94 , - 1437 , - 4584 , - 4287 , - 546 , - 3857 , - 3724 , - 147 , - 3622 , - 3653 , - 240 , - 3879 , - 4074 , - 825 , - 4628 , - 4987 , - 1902 , - 621 , - 1144 , - 3471 , - 2354 , - 3041 , - 284 , - 4579 , - 182 , - 2837 , - 2048 , - 3063 , - 634 , - 9 , - 1188 , - 4171 , - 3710 , - 5053 , - 2952 , - 2655 , - 4162 , - 2225 , - 2092 , - 3763 , - 1990 , - 2021 , - 3856 , - 2247 , - 2442 , - 4441 , - 2996 , - 3355 , - 270 , - 4237 , - 4760 , - 1839 , - 722 , - 1409 , - 3900 , - 2947 , - 3798 , - 1205 , - 416 , - 1431 , - 4250 , - 3625 , - 4804 , - 2539 , - 2078 , - 3421 , - 1320 , - 1023 , - 2530 , - 593 , - 460 , - 2131 , - 358 , - 389 , - 2224 , - 615 , - 810 , - 2809 , - 1364 , - 1723 , - 3886 , - 2605 , - 3128 , - 207 , - 4338 , - 5025 , - 2268 , - 1315 , - 2166 , - 4821 , - 4032 , - 5047 , - 2618 , - 1993 , - 3172 , - 907 , - 446 , - 1789 , - 4936 , - 4639 , - 898 , - 4209 , - 4076 , - 499 , - 3974 , - 4005 , - 592 , - 4231 , - 4426 , - 1177 , - 4980 , - 91 , - 2254 , - 973 , - 1496 , - 3823 , - 2706 , - 3393 , - 636 , - 4931 , - 534 , - 3189 , - 2400 , - 3415 , - 986 , - 361 , - 1540 , - 4523 , - 4062 , - 157 , - 3304 , - 3007 , - 4514 , - 2577 , - 2444 , - 4115 , - 2342 , - 2373 , - 4208 , - 2599 , - 2794 , - 4793 , - 3348 , - 3707 , - 622 , - 4589 , - 5112 , - 2191 , - 1074 , - 1761 , - 4252 , - 3299 , - 4150 , - 1557 , - 768 , - 1783 , - 4602 , - 3977 , - 5156 , - 2891 , - 2430 , - 3773 , - 1672 , - 1375 , - 2882 , - 945 , - 812 , - 2483 , - 710 , - 741 , - 2576 , - 967 , - 1162 , - 3161 , - 1716 , - 2075 , - 4238 , - 2957 , - 3480 , - 559 , - 4690 , - 129 , - 2620 , - 1667 , - 2518 , - 5173 , - 4384 , - 151 , - 2970 , - 2345 , - 3524 , - 1259 , - 798 , - 2141 , - 40 , - 4991 , - 1250 , - 4561 , - 4428 , - 851 , - 4326 , - 4357 , - 944 , - 4583 , - 4778 , - 1529 , - 84 , - 443 , - 2606 , - 1325 , - 1848 , - 4175 , - 3058 , - 3745 , - 988 , - 35 , - 886 , - 3541 , - 2752 , - 3767 , - 1338 , - 713 , - 1892 , - 4875 , - 4414 , - 509 , - 3656 , - 3359 , - 4866 , - 2929 , - 2796 , - 4467 , - 2694 , - 2725 , - 4560 , - 2951 , - 3146 , - 5145 , - 3700 , - 4059 , - 974 , - 4941 , - 216 , - 2543 , - 1426 , - 2113 , - 4604 , - 3651 , - 4502 , - 1909 , - 1120 , - 2135 , - 4954 , - 4329 , - 260 , - 3243 , - 2782 , - 4125 , - 2024 , - 1727 , - 3234 , - 1297 , - 1164 , - 2835 , - 1062 , - 1093 , - 2928 , - 1319 , - 1514 , - 3513 , - 2068 , - 2427 , - 4590 , - 3309 , - 3832 , - 911 , - 5042 , - 481 , - 2972 , - 2019 , - 2870 , - 277 , - 4736 , - 503 , - 3322 , - 2697 , - 3876 , - 1611 , - 1150 , - 2493 , - 392 , - 95 , - 1602 , - 4913 , - 4780 , - 1203 , - 4678 , - 4709 , - 1296 , - 4935 , - 5130 , - 1881 , - 436 , - 795 , - 2958 , - 1677 , - 2200 , - 4527 , - 3410 , - 4097 , - 1340 , - 387 , - 1238 , - 3893 , - 3104 , - 4119 , - 1690 , - 1065 , - 2244 , - 5227 , - 4766 , - 861 , - 4008 , - 3711 , - 5218 , - 3281 , - 3148 , - 4819 , - 3046 , - 3077 , - 4912 , - 3303 , - 3498 , - 249 , - 4052 , - 4411 , - 1326 , - 45 , - 568 , - 2895 , - 1778 , - 2465 , - 4956 , - 4003 , - 4854 , - 2261 , - 1472 , - 2487 , - 58 , - 4681 , - 612 , - 3595 , - 3134 , - 4477 , - 2376 , - 2079 , - 3586 , - 1649 , - 1516 , - 3187 , - 1414 , - 1445 , - 3280 , - 1671 , - 1866 , - 3865 , - 2420 , - 2779 , - 4942 , - 3661 , - 4184 , - 1263 , - 146 , - 833 , - 3324 , - 2371 , - 3222 , - 629 , - 5088 , - 855 , - 3674 , - 3049 , - 4228 , - 1963 , - 1502 , - 2845 , - 744 , - 447 , - 1954 , - 17 , - 5132 , - 1555 , - 5030 , - 5061 , - 1648 , - 39 , - 234 , - 2233 , - 788 , - 1147 , - 3310 , - 2029 , - 2552 , - 4879 , - 3762 , - 4449 , - 1692 , - 739 , - 1590 , - 4245 , - 3456 , - 4471 , - 2042 , - 1417 , - 2596 , - 331 , - 5118 , - 1213 , - 4360 , - 4063 , - 322 , - 3633 , - 3500 , - 5171 , - 3398 , - 3429 , - 16 , - 3655 , - 3850 , - 601 , - 4404 , - 4763 , - 1678 , - 397 , - 920 , - 3247 , - 2130 , - 2817 , - 60 , - 4355 , - 5206 , - 2613 , - 1824 , - 2839 , - 410 , - 5033 , - 964 , - 3947 , - 3486 , - 4829 , - 2728 , - 2431 , - 3938 , - 2001 , - 1868 , - 3539 , - 1766 , - 1797 , - 3632 , - 2023 , - 2218 , - 4217 , - 2772 , - 3131 , - 46 , - 4013 , - 4536 , - 1615 , - 498 , - 1185 , - 3676 , - 2723 , - 3574 , - 981 , - 192 , - 1207 , - 4026 , - 3401 , - 4580 , - 2315 , - 1854 , - 3197 , - 1096 , - 799 , - 2306 , - 369 , - 236 , - 1907 , - 134 , - 165 , - 2000 , - 391 , - 586 , - 2585 , - 1140 , - 1499 , - 3662 , - 2381 , - 2904 , - 5231 , - 4114 , - 4801 , - 2044 , - 1091 , - 1942 , - 4597 , - 3808 , - 4823 , - 2394 , - 1769 , - 2948 , - 683 , - 222 , - 1565 , - 4712 , - 4415 , - 674 , - 3985 , - 3852 , - 275 , - 3750 , - 3781 , - 368 , - 4007 , - 4202 , - 953 , - 4756 , - 5115 , - 2030 , - 749 , - 1272 , - 3599 , - 2482 , - 3169 , - 412 , - 4707 , - 310 , - 2965 , - 2176 , - 3191 , - 762 , - 137 , - 1316 , - 4299 , - 3838 , - 5181 , - 3080 , - 2783 , - 4290 , - 2353 , - 2220 , - 3891 , - 2118 , - 2149 , - 3984 , - 2375 , - 2570 , - 4569 , - 3124 , - 3483 , - 398 , - 4365 , - 4888 , - 1967 , - 850 , - 1537 , - 4028 , - 3075 , - 3926 , - 1333 , - 544 , - 1559 , - 4378 , - 3753 , - 4932 , - 2667 , - 2206 , - 3549 , - 1448 , - 1151 , - 2658 , - 721 , - 588 , - 2259 , - 486 , - 517 , - 2352 , - 743 , - 938 , - 2937 , - 1492 , - 1851 , - 4014 , - 2733 , - 3256 , - 335 , - 4466 , - 5153 , - 2396 , - 1443 , - 2294 , - 4949 , - 4160 , - 5175 , - 2746 , - 2121 , - 3300 , - 1035 , - 574 , - 1917 , - 5064 , - 4767 , - 1026 , - 4337 , - 4204 , - 627 , - 4102 , - 4133 , - 720 , - 4359 , - 4554 , - 1305 , - 5108 , - 219 , - 2382 , - 1101 , - 1624 , - 3951 , - 2834 , - 3521 , - 764 , - 5059 , - 662 , - 3317 , - 2528 , - 3543 , - 1114 , - 489 , - 1668 , - 4651 , - 4190 , - 285 , - 3432 , - 3135 , - 4642 , - 2705 , - 2572 , - 4243 , - 2470 , - 2501 , - 4336 , - 2727 , - 2922 , - 4921 , - 3476 , - 3835 , - 750 , - 4717 , - 5240 , - 2319 , - 1202 , - 1889 , - 4380 , - 3427 , - 4278 , - 1685 , - 896 , - 1911 , - 4730 , - 4105 , - 36 , - 3019 , - 2558 , - 3901 , - 1800 , - 1503 , - 3010 , - 1073 , - 940 , - 2611 , - 838 , - 869 , - 2704 , - 1095 , - 1290 , - 3289 , - 1844 , - 2203 , - 4366 , - 3085 , - 3608 , - 687 , - 4818 , - 257 , - 2748 , - 1795 , - 2646 , - 53 , - 4512 , - 279 , - 3098 , - 2473 , - 3652 , - 1387 , - 926 , - 2269 , - 168 , - 5119 , - 1378 , - 4689 , - 4556 , - 979 , - 4454 , - 4485 , - 1072 , - 4711 , - 4906 , - 1657 , - 212 , - 571 , - 2734 , - 1453 , - 1976 , - 4303 , - 3186 , - 3873 , - 1116 , - 163 , - 1014 , - 3669 , - 2880 , - 3895 , - 1466 , - 841 , - 2020 , - 5003 , - 4542 , - 637 , - 3784 , - 3487 , - 4994 , - 3057 , - 2924 , - 4595 , - 2822 , - 2853 , - 4688 , - 3079 , - 3274 , - 25 , - 3828 , - 4187 , - 1102 , - 5069 , - 344 , - 2671 , - 1554 , - 2241 , - 4732 , - 3779 , - 4630 , - 2037 , - 1248 , - 2263 , - 5082 , - 4457 , - 388 , - 3371 , - 2910 , - 4253 , - 2152 , - 1855 , - 3362 , - 1425 , - 1292 , - 2963 , - 1190 , - 1221 , - 3056 , - 1447 , - 1642 , - 3641 , - 2196 , - 2555 , - 4718 , - 3437 , - 3960 , - 1039 , - 5170 , - 609 , - 3100 , - 2147 , - 2998 , - 405 , - 4864 , - 631 , - 3450 , - 2825 , - 4004 , - 1739 , - 1278 , - 2621 , - 520 , - 223 , - 1730 , - 5041 , - 4908 , - 1331 , - 4806 , - 4837 , - 1424 , - 5063 , - 10 , - 2009 , - 564 , - 923 , - 3086 , - 1805 , - 2328 , - 4655 , - 3538 , - 4225 , - 1468 , - 515 , - 1366 , - 4021 , - 3232 , - 4247 , - 1818 , - 1193 , - 2372 , - 107 , - 4894 , - 989 , - 4136 , - 3839 , - 98 , - 3409 , - 3276 , - 4947 , - 3174 , - 3205 , - 5040 , - 3431 , - 3626 , - 377 , - 4180 , - 4539 , - 1454 , - 173 , - 696 , - 3023 , - 1906 , - 2593 , - 5084 , - 4131 , - 4982 , - 2389 , - 1600 , - 2615 , - 186 , - 4809 , - 740 , - 3723 , - 3262 , - 4605 , - 2504 , - 2207 , - 3714 , - 1777 , - 1644 , - 3315 , - 1542 , - 1573 , - 3408 , - 1799 , - 1994 , - 3993 , - 2548 , - 2907 , - 5070 , - 3789 , - 4312 , - 1391 , - 274 , - 961 , - 3452 , - 2499 , - 3350 , - 757 , - 5216 , - 983 , - 3802 , - 3177 , - 4356 , - 2091 , - 1630 , - 2973 , - 872 , - 575 , - 2082 , - 145 , - 12 , - 1683 , - 5158 , - 5189 , - 1776 , - 167 , - 362 , - 2361 , - 916 , - 1275 , - 3438 , - 2157 , - 2680 , - 5007 , - 3890 , - 4577 , - 1820 , - 867 , - 1718 , - 4373 , - 3584 , - 4599 , - 2170 , - 1545 , - 2724 , - 459 , - 5246 , - 1341 , - 4488 , - 4191 , - 450 , - 3761 , - 3628 , - 51 , - 3526 , - 3557 , - 144 , - 3783 , - 3978 , - 729 , - 4532 , - 4891 , - 1806 , - 525 , - 1048 , - 3375 , - 2258 , - 2945 , - 188 , - 4483 , - 86 , - 2741 , - 1952 , - 2967 , - 538 , - 5161 , - 1092 , - 4075 , - 3614 , - 4957 , - 2856 , - 2559 , - 4066 , - 2129 , - 1996 , - 3667 , - 1894 , - 1925 , - 3760 , - 2151 , - 2346 , - 4345 , - 2900 , - 3259 , - 174 , - 4141 , - 4664 , - 1743 , - 626 , - 1313 , - 3804 , - 2851 , - 3702 , - 1109 , - 320 , - 1335 , - 4154 , - 3529 , - 4708 , - 2443 , - 1982 , - 3325 , - 1224 , - 927 , - 2434 , - 497 , - 364 , - 2035 , - 262 , - 293 , - 2128 , - 519 , - 714 , - 2713 , - 1268 , - 1627 , - 3790 , - 2509 , - 3032 , - 111 , - 4242 , - 4929 , - 2172 , - 1219 , - 2070 , - 4725 , - 3936 , - 4951 , - 2522 , - 1897 , - 3076 , - 811 , - 350 , - 1693 , - 4840 , - 4543 , - 802 , - 4113 , - 3980 , - 403 , - 3878 , - 3909 , - 496 , - 4135 , - 4330 , - 1081 , - 4884 , - 5243 , - 2158 , - 877 , - 1400 , - 3727 , - 2610 , - 3297 , - 540 , - 4835 , - 438 , - 3093 , - 2304 , - 3319 , - 890 , - 265 , - 1444 , - 4427 , - 3966 , - 61 , - 3208 , - 2911 , - 4418 , - 2481 , - 2348 , - 4019 , - 2246 , - 2277 , - 4112 , - 2503 , - 2698 , - 4697 , - 3252 , - 3611 , - 526 , - 4493 , - 5016 , - 2095 , - 978 , - 1665 , - 4156 , - 3203 , - 4054 , - 1461 , - 672 , - 1687 , - 4506 , - 3881 , - 5060 , - 2795 , - 2334 , - 3677 , - 1576 , - 1279 , - 2786 , - 849 , - 716 , - 2387 , - 614 , - 645 , - 2480 , - 871 , - 1066 , - 3065 , - 1620 , - 1979 , - 4142 , - 2861 , - 3384 , - 463 , - 4594 , - 33 , - 2524 , - 1571 , - 2422 , - 5077 , - 4288 , - 55 , - 2874 , - 2249 , - 3428 , - 1163 , - 702 , - 2045 , - 5192 , - 4895 , - 1154 , - 4465 , - 4332 , - 755 , - 4230 , - 4261 , - 848 , - 4487 , - 4682 , - 1433 , - 5236 , - 347 , - 2510 , - 1229 , - 1752 , - 4079 , - 2962 , - 3649 , - 892 , - 5187 , - 790 , - 3445 , - 2656 , - 3671 , - 1242 , - 617 , - 1796 , - 4779 , - 4318 , - 413 , - 3560 , - 3263 , - 4770 , - 2833 , - 2700 , - 4371 , - 2598 , - 2629 , - 4464 , - 2855 , - 3050 , - 5049 , - 3604 , - 3963 , - 878 , - 4845 , - 120 , - 2447 , - 1330 , - 2017 , - 4508 , - 3555 , - 4406 , - 1813 , - 1024 , - 2039 , - 4858 , - 4233 , - 164 , - 3147 , - 2686 , - 4029 , - 1928 , - 1631 , - 3138 , - 1201 , - 1068 , - 2739 , - 966 , - 997 , - 2832 , - 1223 , - 1418 , - 3417 , - 1972 , - 2331 , - 4494 , - 3213 , - 3736 , - 815 , - 4946 , - 385 , - 2876 , - 1923 , - 2774 , - 181 , - 4640 , - 407 , - 3226 , - 2601 , - 3780 , - 1515 , - 1054 , - 2397 , - 296 , - 5247 , - 1506 , - 4817 , - 4684 , - 1107 , - 4582 , - 4613 , - 1200 , - 4839 , - 5034 , - 1785 , - 340 , - 699 , - 2862 , - 1581 , - 2104 , - 4431 , - 3314 , - 4001 , - 1244 , - 291 , - 1142 , - 3797 , - 3008 , - 4023 , - 1594 , - 969 , - 2148 , - 5131 , - 4670 , - 765 , - 3912 , - 3615 , - 5122 , - 3185 , - 3052 , - 4723 , - 2950 , - 2981 , - 4816 , - 3207 , - 3402 , - 153 , - 3956 , - 4315 , - 1230 , - 5197 , - 472 , - 2799 , - 1682 , - 2369 , - 4860 , - 3907 , - 4758 , - 2165 , - 1376 , - 2391 , - 5210 , - 4585 , - 516 , - 3499 , - 3038 , - 4381 , - 2280 , - 1983 , - 3490 , - 1553 , - 1420 , - 3091 , - 1318 , - 1349 , - 3184 , - 1575 , - 1770 , - 3769 , - 2324 , - 2683 , - 4846 , - 3565 , - 4088 , - 1167 , - 50 , - 737 , - 3228 , - 2275 , - 3126 , - 533 , - 4992 , - 759 , - 3578 , - 2953 , - 4132 , - 1867 , - 1406 , - 2749 , - 648 , - 351 , - 1858 , - 5169 , - 5036 , - 1459 , - 4934 , - 4965 , - 1552 , - 5191 , - 138 , - 2137 , - 692 , - 1051 , - 3214 , - 1933 , - 2456 , - 4783 , - 3666 , - 4353 , - 1596 , - 643 , - 1494 , - 4149 , - 3360 , - 4375 , - 1946 , - 1321 , - 2500 , - 235 , - 5022 , - 1117 , - 4264 , - 3967 , - 226 , - 3537 , - 3404 , - 5075 , - 3302 , - 3333 , - 5168 , - 3559 , - 3754 , - 505 , - 4308 , - 4667 , - 1582 , - 301 , - 824 , - 3151 , - 2034 , - 2721 , - 5212 , - 4259 , - 5110 , - 2517 , - 1728 , - 2743 , - 314 , - 4937 , - 868 , - 3851 , - 3390 , - 4733 , - 2632 , - 2335 , - 3842 , - 1905 , - 1772 , - 3443 , - 1670 , - 1701 , - 3536 , - 1927 , - 2122 , - 4121 , - 2676 , - 3035 , - 5198 , - 3917 , - 4440 , - 1519 , - 402 , - 1089 , - 3580 , - 2627 , - 3478 , - 885 , - 96 , - 1111 , - 3930 , - 3305 , - 4484 , - 2219 , - 1758 , - 3101 , - 1000 , - 703 , - 2210 , - 273 , - 140 , - 1811 , - 38 , - 69 , - 1904 , - 295 , - 490 , - 2489 , - 1044 , - 1403 , - 3566 , - 2285 , - 2808 , - 5135 , - 4018 , - 4705 , - 1948 , - 995 , - 1846 , - 4501 , - 3712 , - 4727 , - 2298 , - 1673 , - 2852 , - 587 , - 126 , - 1469 , - 4616 , - 4319 , - 578 , - 3889 , - 3756 , - 179 , - 3654 , - 3685 , - 272 , - 3911 , - 4106 , - 857 , - 4660 , - 5019 , - 1934 , - 653 , - 1176 , - 3503 , - 2386 , - 3073 , - 316 , - 4611 , - 214 , - 2869 , - 2080 , - 3095 , - 666 , - 41 , - 1220 , - 4203 , - 3742 , - 5085 , - 2984 , - 2687 , - 4194 , - 2257 , - 2124 , - 3795 , - 2022 , - 2053 , - 3888 , - 2279 , - 2474 , - 4473 , - 3028 , - 3387 , - 302 , - 4269 , - 4792 , - 1871 , - 754 , - 1441 , - 3932 , - 2979 , - 3830 , - 1237 , - 448 , - 1463 , - 4282 , - 3657 , - 4836 , - 2571 , - 2110 , - 3453 , - 1352 , - 1055 , - 2562 , - 625 , - 492 , - 2163 , - 390 , - 421 , - 2256 , - 647 , - 842 , - 2841 , - 1396 , - 1755 , - 3918 , - 2637 , - 3160 , - 239 , - 4370 , - 5057 , - 2300 , - 1347 , - 2198 , - 4853 , - 4064 , - 5079 , - 2650 , - 2025 , - 3204 , - 939 , - 478 , - 1821 , - 4968 , - 4671 , - 930 , - 4241 , - 4108 , - 531 , - 4006 , - 4037 , - 624 , - 4263 , - 4458 , - 1209 , - 5012 , - 123 , - 2286 , - 1005 , - 1528 , - 3855 , - 2738 , - 3425 , - 668 , - 4963 , - 566 , - 3221 , - 2432 , - 3447 , - 1018 , - 393 , - 1572 , - 4555 , - 4094 , - 189 , - 3336 , - 3039 , - 4546 , - 2609 , - 2476 , - 4147 , - 2374 , - 2405 , - 4240 , - 2631 , - 2826 , - 4825 , - 3380 , - 3739 , - 654 , - 4621 , - 5144 , - 2223 , - 1106 , - 1793 , - 4284 , - 3331 , - 4182 , - 1589 , - 800 , - 1815 , - 4634 , - 4009 , - 5188 , - 2923 , - 2462 , - 3805 , - 1704 , - 1407 , - 2914 , - 977 , - 844 , - 2515 , - 742 , - 773 , - 2608 , - 999 , - 1194 , - 3193 , - 1748 , - 2107 , - 4270 , - 2989 , - 3512 , - 591 , - 4722 , - 161 , - 2652 , - 1699 , - 2550 , - 5205 , - 4416 , - 183 , - 3002 , - 2377 , - 3556 , - 1291 , - 830 , - 2173 , - 72 , - 5023 , - 1282 , - 4593 , - 4460 , - 883 , - 4358 , - 4389 , - 976 , - 4615 , - 4810 , - 1561 , - 116 , - 475 , - 2638 , - 1357 , - 1880 , - 4207 , - 3090 , - 3777 , - 1020 , - 67 , - 918 , - 3573 , - 2784 , - 3799 , - 1370 , - 745 , - 1924 , - 4907 , - 4446 , - 541 , - 3688 , - 3391 , - 4898 , - 2961 , - 2828 , - 4499 , - 2726 , - 2757 , - 4592 , - 2983 , - 3178 , - 5177 , - 3732 , - 4091 , - 1006 , - 4973 , - 248 , - 2575 , - 1458 , - 2145 , - 4636 , - 3683 , - 4534 , - 1941 , - 1152 , - 2167 , - 4986 , - 4361 , - 292 , - 3275 , - 2814 , - 4157 , - 2056 , - 1759 , - 3266 , - 1329 , - 1196 , - 2867 , - 1094 , - 1125 , - 2960 , - 1351 , - 1546 , - 3545 , - 2100 , - 2459 , - 4622 , - 3341 , - 3864 , - 943 , - 5074 , - 513 , - 3004 , - 2051 , - 2902 , - 309 , - 4768 , - 535 , - 3354 , - 2729 , - 3908 , - 1643 , - 1182 , - 2525 , - 424 , - 127 , - 1634 , - 4945 , - 4812 , - 1235 , - 4710 , - 4741 , - 1328 , - 4967 , - 5162 , - 1913 , - 468 , - 827 , - 2990 , - 1709 , - 2232 , - 4559 , - 3442 , - 4129 , - 1372 , - 419 , - 1270 , - 3925 , - 3136 , - 4151 , - 1722 , - 1097 , - 2276 , - 11 , - 4798 , - 893 , - 4040 , - 3743 , - 2 , - 3313 , - 3180 , - 4851 , - 3078 , - 3109 , - 4944 , - 3335 , - 3530 , - 281 , - 4084 , - 4443 , - 1358 , - 77 , - 600 , - 2927 , - 1810 , - 2497 , - 4988 , - 4035 , - 4886 , - 2293 , - 1504 , - 2519 , - 90 , - 4713 , - 644 , - 3627 , - 3166 , - 4509 , - 2408 , - 2111 , - 3618 , - 1681 , - 1548 , - 3219 , - 1446 , - 1477 , - 3312 , - 1703 , - 1898 , - 3897 , - 2452 , - 2811 , - 4974 , - 3693 , - 4216 , - 1295 , - 178 , - 865 , - 3356 , - 2403 , - 3254 , - 661 , - 5120 , - 887 , - 3706 , - 3081 , - 4260 , - 1995 , - 1534 , - 2877 , - 776 , - 479 , - 1986 , - 49 , - 5164 , - 1587 , - 5062 , - 5093 , - 1680 , - 71 , - 266 , - 2265 , - 820 , - 1179 , - 3342 , - 2061 , - 2584 , - 4911 , - 3794 , - 4481 , - 1724 , - 771 , - 1622 , - 4277 , - 3488 , - 4503 , - 2074 , - 1449 , - 2628 , - 363 , - 5150 , - 1245 , - 4392 , - 4095 , - 354 , - 3665 , - 3532 , - 5203 , - 3430 , - 3461 , - 48 , - 3687 , - 3882 , - 633 , - 4436 , - 4795 , - 1710 , - 429 , - 952 , - 3279 , - 2162 , - 2849 , - 92 , - 4387 , - 5238 , - 2645 , - 1856 , - 2871 , - 442 , - 5065 , - 996 , - 3979 , - 3518 , - 4861 , - 2760 , - 2463 , - 3970 , - 2033 , - 1900 , - 3571 , - 1798 , - 1829 , - 3664 , - 2055 , - 2250 , - 4249 , - 2804 , - 3163 , - 78 , - 4045 , - 4568 , - 1647 , - 530 , - 1217 , - 3708 , - 2755 , - 3606 , - 1013 , - 224 , - 1239 , - 4058 , - 3433 , - 4612 , - 2347 , - 1886 , - 3229 , - 1128 , - 831 , - 2338 , - 401 , - 268 , - 1939 , - 166 , - 197 , - 2032 , - 423 , - 618 , - 2617 , - 1172 , - 1531 , - 3694 , - 2413 , - 2936 , - 15 , - 4146 , - 4833 , - 2076 , - 1123 , - 1974 , - 4629 , - 3840 , - 4855 , - 2426 , - 1801 , - 2980 , - 715 , - 254 , - 1597 , - 4744 , - 4447 , - 706 , - 4017 , - 3884 , - 307 , - 3782 , - 3813 , - 400 , - 4039 , - 4234 , - 985 , - 4788 , - 5147 , - 2062 , - 781 , - 1304 , - 3631 , - 2514 , - 3201 , - 444 , - 4739 , - 342 , - 2997 , - 2208 , - 3223 , - 794 , - 169 , - 1348 , - 4331 , - 3870 , - 5213 , - 3112 , - 2815 , - 4322 , - 2385 , - 2252 , - 3923 , - 2150 , - 2181 , - 4016 , - 2407 , - 2602 , - 4601 , - 3156 , - 3515 , - 430 , - 4397 , - 4920 , - 1999 , - 882 , - 1569 , - 4060 , - 3107 , - 3958 , - 1365 , - 576 , - 1591 , - 4410 , - 3785 , - 4964 , - 2699 , - 2238 , - 3581 , - 1480 , - 1183 , - 2690 , - 753 , - 620 , - 2291 , - 518 , - 549 , - 2384 , - 775 , - 970 , - 2969 , - 1524 , - 1883 , - 4046 , - 2765 , - 3288 , - 367 , - 4498 , - 5185 , - 2428 , - 1475 , - 2326 , - 4981 , - 4192 , - 5207 , - 2778 , - 2153 , - 3332 , - 1067 , - 606 , - 1949 , - 5096 , - 4799 , - 1058 , - 4369 , - 4236 , - 659 , - 4134 , - 4165 , - 752 , - 4391 , - 4586 , - 1337 , - 5140 , - 251 , - 2414 , - 1133 , - 1656 , - 3983 , - 2866 , - 3553 , - 796 , - 5091 , - 694 , - 3349 , - 2560 , - 3575 , - 1146 , - 521 , - 1700 , - 4683 , - 4222 , - 317 , - 3464 , - 3167 , - 4674 , - 2737 , - 2604 , - 4275 , - 2502 , - 2533 , - 4368 , - 2759 , - 2954 , - 4953 , - 3508 , - 3867 , - 782 , - 4749 , - 24 , - 2351 , - 1234 , - 1921 , - 4412 , - 3459 , - 4310 , - 1717 , - 928 , - 1943 , - 4762 , - 4137 , - 68 , - 3051 , - 2590 , - 3933 , - 1832 , - 1535 , - 3042 , - 1105 , - 972 , - 2643 , - 870 , - 901 , - 2736 , - 1127 , - 1322 , - 3321 , - 1876 , - 2235 , - 4398 , - 3117 , - 3640 , - 719 , - 4850 , - 289 , - 2780 , - 1827 , - 2678 , - 85 , - 4544 , - 311 , - 3130 , - 2505 , - 3684 , - 1419 , - 958 , - 2301 , - 200 , - 5151 , - 1410 , - 4721 , - 4588 , - 1011 , - 4486 , - 4517 , - 1104 , - 4743 , - 4938 , - 1689 , - 244 , - 603 , - 2766 , - 1485 , - 2008 , - 4335 , - 3218 , - 3905 , - 1148 , - 195 , - 1046 , - 3701 , - 2912 , - 3927 , - 1498 , - 873 , - 2052 , - 5035 , - 4574 , - 669 , - 3816 , - 3519 , - 5026 , - 3089 , - 2956 , - 4627 , - 2854 , - 2885 , - 4720 , - 3111 , - 3306 , - 57 , - 3860 , - 4219 , - 1134 , - 5101 , - 376 , - 2703 , - 1586 , - 2273 , - 4764 , - 3811 , - 4662 , - 2069 , - 1280 , - 2295 , - 5114 , - 4489 , - 420 , - 3403 , - 2942 , - 4285 , - 2184 , - 1887 , - 3394 , - 1457 , - 1324 , - 2995 , - 1222 , - 1253 , - 3088 , - 1479 , - 1674 , - 3673 , - 2228 , - 2587 , - 4750 , - 3469 , - 3992 , - 1071 , - 5202 , - 641 , - 3132 , - 2179 , - 3030 , - 437 , - 4896 , - 663 , - 3482 , - 2857 , - 4036 , - 1771 , - 1310 , - 2653 , - 552 , - 255 , - 1762 , - 5073 , - 4940 , - 1363 , - 4838 , - 4869 , - 1456 , - 5095 , - 42 , - 2041 , - 596 , - 955 , - 3118 , - 1837 , - 2360 , - 4687 , - 3570 , - 4257 , - 1500 , - 547 , - 1398 , - 4053 , - 3264 , - 4279 , - 1850 , - 1225 , - 2404 , - 139 , - 4926 , - 1021 , - 4168 , - 3871 , - 130 , - 3441 , - 3308 , - 4979 , - 3206 , - 3237 , - 5072 , - 3463 , - 3658 , - 409 , - 4212 , - 4571 , - 1486 , - 205 , - 728 , - 3055 , - 1938 , - 2625 , - 5116 , - 4163 , - 5014 , - 2421 , - 1632 , - 2647 , - 218 , - 4841 , - 772 , - 3755 , - 3294 , - 4637 , - 2536 , - 2239 , - 3746 , - 1809 , - 1676 , - 3347 , - 1574 , - 1605 , - 3440 , - 1831 , - 2026 , - 4025 , - 2580 , - 2939 , - 5102 , - 3821 , - 4344 , - 1423 , - 306 , - 993 , - 3484 , - 2531 , - 3382 , - 789 , - 0 , - 207 , - 746 , - 1617 , - 2820 , - 4355 , - 910 , - 3109 , - 328 , - 3191 , - 1074 , - 4601 , - 3148 , - 2027 , - 1238 , - 781 , - 656 , - 863 , - 1402 , - 2273 , - 3476 , - 5011 , - 1566 , - 3765 , - 984 , - 3847 , - 1730 , - 5257 , - 3804 , - 2683 , - 1894 , - 1437 , - 1312 , - 1519 , - 2058 , - 2929 , - 4132 , - 355 , - 2222 , - 4421 , - 1640 , - 4503 , - 2386 , - 601 , - 4460 , - 3339 , - 2550 , - 2093 , - 1968 , - 2175 , - 2714 , - 3585 , - 4788 , - 1011 , - 2878 , - 5077 , - 2296 , - 5159 , - 3042 , - 1257 , - 5116 , - 3995 , - 3206 , - 2749 , - 2624 , - 2831 , - 3370 , - 4241 , - 132 , - 1667 , - 3534 , - 421 , - 2952 , - 503 , - 3698 , - 1913 , - 460 , - 4651 , - 3862 , - 3405 , - 3280 , - 3487 , - 4026 , - 4897 , - 788 , - 2323 , - 4190 , - 1077 , - 3608 , - 1159 , - 4354 , - 2569 , - 1116 , - 5307 , - 4518 , - 4061 , - 3936 , - 4143 , - 4682 , - 241 , - 1444 , - 2979 , - 4846 , - 1733 , - 4264 , - 1815 , - 5010 , - 3225 , - 1772 , - 651 , - 5174 , - 4717 , - 4592 , - 4799 , - 26 , - 897 , - 2100 , - 3635 , - 190 , - 2389 , - 4920 , - 2471 , - 354 , - 3881 , - 2428 , - 1307 , - 518 , - 61 , - 5248 , - 143 , - 682 , - 1553 , - 2756 , - 4291 , - 846 , - 3045 , - 264 , - 3127 , - 1010 , - 4537 , - 3084 , - 1963 , - 1174 , - 717 , - 592 , - 799 , - 1338 , - 2209 , - 3412 , - 4947 , - 1502 , - 3701 , - 920 , - 3783 , - 1666 , - 5193 , - 3740 , - 2619 , - 1830 , - 1373 , - 1248 , - 1455 , - 1994 , - 2865 , - 4068 , - 291 , - 2158 , - 4357 , - 1576 , - 4439 , - 2322 , - 537 , - 4396 , - 3275 , - 2486 , - 2029 , - 1904 , - 2111 , - 2650 , - 3521 , - 4724 , - 947 , - 2814 , - 5013 , - 2232 , - 5095 , - 2978 , - 1193 , - 5052 , - 3931 , - 3142 , - 2685 , - 2560 , - 2767 , - 3306 , - 4177 , - 68 , - 1603 , - 3470 , - 357 , - 2888 , - 439 , - 3634 , - 1849 , - 396 , - 4587 , - 3798 , - 3341 , - 3216 , - 3423 , - 3962 , - 4833 , - 724 , - 2259 , - 4126 , - 1013 , - 3544 , - 1095 , - 4290 , - 2505 , - 1052 , - 5243 , - 4454 , - 3997 , - 3872 , - 4079 , - 4618 , - 177 , - 1380 , - 2915 , - 4782 , - 1669 , - 4200 , - 1751 , - 4946 , - 3161 , - 1708 , - 587 , - 5110 , - 4653 , - 4528 , - 4735 , - 5274 , - 833 , - 2036 , - 3571 , - 126 , - 2325 , - 4856 , - 2407 , - 290 , - 3817 , - 2364 , - 1243 , - 454 , - 5309 , - 5184 , - 79 , - 618 , - 1489 , - 2692 , - 4227 , - 782 , - 2981 , - 200 , - 3063 , - 946 , - 4473 , - 3020 , - 1899 , - 1110 , - 653 , - 528 , - 735 , - 1274 , - 2145 , - 3348 , - 4883 , - 1438 , - 3637 , - 856 , - 3719 , - 1602 , - 5129 , - 3676 , - 2555 , - 1766 , - 1309 , - 1184 , - 1391 , - 1930 , - 2801 , - 4004 , - 227 , - 2094 , - 4293 , - 1512 , - 4375 , - 2258 , - 473 , - 4332 , - 3211 , - 2422 , - 1965 , - 1840 , - 2047 , - 2586 , - 3457 , - 4660 , - 883 , - 2750 , - 4949 , - 2168 , - 5031 , - 2914 , - 1129 , - 4988 , - 3867 , - 3078 , - 2621 , - 2496 , - 2703 , - 3242 , - 4113 , - 4 , - 1539 , - 3406 , - 293 , - 2824 , - 375 , - 3570 , - 1785 , - 332 , - 4523 , - 3734 , - 3277 , - 3152 , - 3359 , - 3898 , - 4769 , - 660 , - 2195 , - 4062 , - 949 , - 3480 , - 1031 , - 4226 , - 2441 , - 988 , - 5179 , - 4390 , - 3933 , - 3808 , - 4015 , - 4554 , - 113 , - 1316 , - 2851 , - 4718 , - 1605 , - 4136 , - 1687 , - 4882 , - 3097 , - 1644 , - 523 , - 5046 , - 4589 , - 4464 , - 4671 , - 5210 , - 769 , - 1972 , - 3507 , - 62 , - 2261 , - 4792 , - 2343 , - 226 , - 3753 , - 2300 , - 1179 , - 390 , - 5245 , - 5120 , - 15 , - 554 , - 1425 , - 2628 , - 4163 , - 718 , - 2917 , - 136 , - 2999 , - 882 , - 4409 , - 2956 , - 1835 , - 1046 , - 589 , - 464 , - 671 , - 1210 , - 2081 , - 3284 , - 4819 , - 1374 , - 3573 , - 792 , - 3655 , - 1538 , - 5065 , - 3612 , - 2491 , - 1702 , - 1245 , - 1120 , - 1327 , - 1866 , - 2737 , - 3940 , - 163 , - 2030 , - 4229 , - 1448 , - 4311 , - 2194 , - 409 , - 4268 , - 3147 , - 2358 , - 1901 , - 1776 , - 1983 , - 2522 , - 3393 , - 4596 , - 819 , - 2686 , - 4885 , - 2104 , - 4967 , - 2850 , - 1065 , - 4924 , - 3803 , - 3014 , - 2557 , - 2432 , - 2639 , - 3178 , - 4049 , - 5252 , - 1475 , - 3342 , - 229 , - 2760 , - 311 , - 3506 , - 1721 , - 268 , - 4459 , - 3670 , - 3213 , - 3088 , - 3295 , - 3834 , - 4705 , - 596 , - 2131 , - 3998 , - 885 , - 3416 , - 967 , - 4162 , - 2377 , - 924 , - 5115 , - 4326 , - 3869 , - 3744 , - 3951 , - 4490 , - 49 , - 1252 , - 2787 , - 4654 , - 1541 , - 4072 , - 1623 , - 4818 , - 3033 , - 1580 , - 459 , - 4982 , - 4525 , - 4400 , - 4607 , - 5146 , - 705 , - 1908 , - 3443 , - 5310 , - 2197 , - 4728 , - 2279 , - 162 , - 3689 , - 2236 , - 1115 , - 326 , - 5181 , - 5056 , - 5263 , - 490 , - 1361 , - 2564 , - 4099 , - 654 , - 2853 , - 72 , - 2935 , - 818 , - 4345 , - 2892 , - 1771 , - 982 , - 525 , - 400 , - 607 , - 1146 , - 2017 , - 3220 , - 4755 , - 1310 , - 3509 , - 728 , - 3591 , - 1474 , - 5001 , - 3548 , - 2427 , - 1638 , - 1181 , - 1056 , - 1263 , - 1802 , - 2673 , - 3876 , - 99 , - 1966 , - 4165 , - 1384 , - 4247 , - 2130 , - 345 , - 4204 , - 3083 , - 2294 , - 1837 , - 1712 , - 1919 , - 2458 , - 3329 , - 4532 , - 755 , - 2622 , - 4821 , - 2040 , - 4903 , - 2786 , - 1001 , - 4860 , - 3739 , - 2950 , - 2493 , - 2368 , - 2575 , - 3114 , - 3985 , - 5188 , - 1411 , - 3278 , - 165 , - 2696 , - 247 , - 3442 , - 1657 , - 204 , - 4395 , - 3606 , - 3149 , - 3024 , - 3231 , - 3770 , - 4641 , - 532 , - 2067 , - 3934 , - 821 , - 3352 , - 903 , - 4098 , - 2313 , - 860 , - 5051 , - 4262 , - 3805 , - 3680 , - 3887 , - 4426 , - 5297 , - 1188 , - 2723 , - 4590 , - 1477 , - 4008 , - 1559 , - 4754 , - 2969 , - 1516 , - 395 , - 4918 , - 4461 , - 4336 , - 4543 , - 5082 , - 641 , - 1844 , - 3379 , - 5246 , - 2133 , - 4664 , - 2215 , - 98 , - 3625 , - 2172 , - 1051 , - 262 , - 5117 , - 4992 , - 5199 , - 426 , - 1297 , - 2500 , - 4035 , - 590 , - 2789 , - 8 , - 2871 , - 754 , - 4281 , - 2828 , - 1707 , - 918 , - 461 , - 336 , - 543 , - 1082 , - 1953 , - 3156 , - 4691 , - 1246 , - 3445 , - 664 , - 3527 , - 1410 , - 4937 , - 3484 , - 2363 , - 1574 , - 1117 , - 992 , - 1199 , - 1738 , - 2609 , - 3812 , - 35 , - 1902 , - 4101 , - 1320 , - 4183 , - 2066 , - 281 , - 4140 , - 3019 , - 2230 , - 1773 , - 1648 , - 1855 , - 2394 , - 3265 , - 4468 , - 691 , - 2558 , - 4757 , - 1976 , - 4839 , - 2722 , - 937 , - 4796 , - 3675 , - 2886 , - 2429 , - 2304 , - 2511 , - 3050 , - 3921 , - 5124 , - 1347 , - 3214 , - 101 , - 2632 , - 183 , - 3378 , - 1593 , - 140 , - 4331 , - 3542 , - 3085 , - 2960 , - 3167 , - 3706 , - 4577 , - 468 , - 2003 , - 3870 , - 757 , - 3288 , - 839 , - 4034 , - 2249 , - 796 , - 4987 , - 4198 , - 3741 , - 3616 , - 3823 , - 4362 , - 5233 , - 1124 , - 2659 , - 4526 , - 1413 , - 3944 , - 1495 , - 4690 , - 2905 , - 1452 , - 331 , - 4854 , - 4397 , - 4272 , - 4479 , - 5018 , - 577 , - 1780 , - 3315 , - 5182 , - 2069 , - 4600 , - 2151 , - 34 , - 3561 , - 2108 , - 987 , - 198 , - 5053 , - 4928 , - 5135 , - 362 , - 1233 , - 2436 , - 3971 , - 526 , - 2725 , - 5256 , - 2807 , - 690 , - 4217 , - 2764 , - 1643 , - 854 , - 397 , - 272 , - 479 , - 1018 , - 1889 , - 3092 , - 4627 , - 1182 , - 3381 , - 600 , - 3463 , - 1346 , - 4873 , - 3420 , - 2299 , - 1510 , - 1053 , - 928 , - 1135 , - 1674 , - 2545 , - 3748 , - 5283 , - 1838 , - 4037 , - 1256 , - 4119 , - 2002 , - 217 , - 4076 , - 2955 , - 2166 , - 1709 , - 1584 , - 1791 , - 2330 , - 3201 , - 4404 , - 627 , - 2494 , - 4693 , - 1912 , - 4775 , - 2658 , - 873 , - 4732 , - 3611 , - 2822 , - 2365 , - 2240 , - 2447 , - 2986 , - 3857 , - 5060 , - 1283 , - 3150 , - 37 , - 2568 , - 119 , - 3314 , - 1529 , - 76 , - 4267 , - 3478 , - 3021 , - 2896 , - 3103 , - 3642 , - 4513 , - 404 , - 1939 , - 3806 , - 693 , - 3224 , - 775 , - 3970 , - 2185 , - 732 , - 4923 , - 4134 , - 3677 , - 3552 , - 3759 , - 4298 , - 5169 , - 1060 , - 2595 , - 4462 , - 1349 , - 3880 , - 1431 , - 4626 , - 2841 , - 1388 , - 267 , - 4790 , - 4333 , - 4208 , - 4415 , - 4954 , - 513 , - 1716 , - 3251 , - 5118 , - 2005 , - 4536 , - 2087 , - 5282 , - 3497 , - 2044 , - 923 , - 134 , - 4989 , - 4864 , - 5071 , - 298 , - 1169 , - 2372 , - 3907 , - 462 , - 2661 , - 5192 , - 2743 , - 626 , - 4153 , - 2700 , - 1579 , - 790 , - 333 , - 208 , - 415 , - 954 , - 1825 , - 3028 , - 4563 , - 1118 , - 3317 , - 536 , - 3399 , - 1282 , - 4809 , - 3356 , - 2235 , - 1446 , - 989 , - 864 , - 1071 , - 1610 , - 2481 , - 3684 , - 5219 , - 1774 , - 3973 , - 1192 , - 4055 , - 1938 , - 153 , - 4012 , - 2891 , - 2102 , - 1645 , - 1520 , - 1727 , - 2266 , - 3137 , - 4340 , - 563 , - 2430 , - 4629 , - 1848 , - 4711 , - 2594 , - 809 , - 4668 , - 3547 , - 2758 , - 2301 , - 2176 , - 2383 , - 2922 , - 3793 , - 4996 , - 1219 , - 3086 , - 5285 , - 2504 , - 55 , - 3250 , - 1465 , - 12 , - 4203 , - 3414 , - 2957 , - 2832 , - 3039 , - 3578 , - 4449 , - 340 , - 1875 , - 3742 , - 629 , - 3160 , - 711 , - 3906 , - 2121 , - 668 , - 4859 , - 4070 , - 3613 , - 3488 , - 3695 , - 4234 , - 5105 , - 996 , - 2531 , - 4398 , - 1285 , - 3816 , - 1367 , - 4562 , - 2777 , - 1324 , - 203 , - 4726 , - 4269 , - 4144 , - 4351 , - 4890 , - 449 , - 1652 , - 3187 , - 5054 , - 1941 , - 4472 , - 2023 , - 5218 , - 3433 , - 1980 , - 859 , - 70 , - 4925 , - 4800 , - 5007 , - 234 , - 1105 , - 2308 , - 3843 , - 398 , - 2597 , - 5128 , - 2679 , - 562 , - 4089 , - 2636 , - 1515 , - 726 , - 269 , - 144 , - 351 , - 890 , - 1761 , - 2964 , - 4499 , - 1054 , - 3253 , - 472 , - 3335 , - 1218 , - 4745 , - 3292 , - 2171 , - 1382 , - 925 , - 800 , - 1007 , - 1546 , - 2417 , - 3620 , - 5155 , - 1710 , - 3909 , - 1128 , - 3991 , - 1874 , - 89 , - 3948 , - 2827 , - 2038 , - 1581 , - 1456 , - 1663 , - 2202 , - 3073 , - 4276 , - 499 , - 2366 , - 4565 , - 1784 , - 4647 , - 2530 , - 745 , - 4604 , - 3483 , - 2694 , - 2237 , - 2112 , - 2319 , - 2858 , - 3729 , - 4932 , - 1155 , - 3022 , - 5221 , - 2440 , - 5303 , - 3186 , - 1401 , - 5260 , - 4139 , - 3350 , - 2893 , - 2768 , - 2975 , - 3514 , - 4385 , - 276 , - 1811 , - 3678 , - 565 , - 3096 , - 647 , - 3842 , - 2057 , - 604 , - 4795 , - 4006 , - 3549 , - 3424 , - 3631 , - 4170 , - 5041 , - 932 , - 2467 , - 4334 , - 1221 , - 3752 , - 1303 , - 4498 , - 2713 , - 1260 , - 139 , - 4662 , - 4205 , - 4080 , - 4287 , - 4826 , - 385 , - 1588 , - 3123 , - 4990 , - 1877 , - 4408 , - 1959 , - 5154 , - 3369 , - 1916 , - 795 , - 6 , - 4861 , - 4736 , - 4943 , - 170 , - 1041 , - 2244 , - 3779 , - 334 , - 2533 , - 5064 , - 2615 , - 498 , - 4025 , - 2572 , - 1451 , - 662 , - 205 , - 80 , - 287 , - 826 , - 1697 , - 2900 , - 4435 , - 990 , - 3189 , - 408 , - 3271 , - 1154 , - 4681 , - 3228 , - 2107 , - 1318 , - 861 , - 736 , - 943 , - 1482 , - 2353 , - 3556 , - 5091 , - 1646 , - 3845 , - 1064 , - 3927 , - 1810 , - 25 , - 3884 , - 2763 , - 1974 , - 1517 , - 1392 , - 1599 , - 2138 , - 3009 , - 4212 , - 435 , - 2302 , - 4501 , - 1720 , - 4583 , - 2466 , - 681 , - 4540 , - 3419 , - 2630 , - 2173 , - 2048 , - 2255 , - 2794 , - 3665 , - 4868 , - 1091 , - 2958 , - 5157 , - 2376 , - 5239 , - 3122 , - 1337 , - 5196 , - 4075 , - 3286 , - 2829 , - 2704 , - 2911 , - 3450 , - 4321 , - 212 , - 1747 , - 3614 , - 501 , - 3032 , - 583 , - 3778 , - 1993 , - 540 , - 4731 , - 3942 , - 3485 , - 3360 , - 3567 , - 4106 , - 4977 , - 868 , - 2403 , - 4270 , - 1157 , - 3688 , - 1239 , - 4434 , - 2649 , - 1196 , - 75 , - 4598 , - 4141 , - 4016 , - 4223 , - 4762 , - 321 , - 1524 , - 3059 , - 4926 , - 1813 , - 4344 , - 1895 , - 5090 , - 3305 , - 1852 , - 731 , - 5254 , - 4797 , - 4672 , - 4879 , - 106 , - 977 , - 2180 , - 3715 , - 270 , - 2469 , - 5000 , - 2551 , - 434 , - 3961 , - 2508 , - 1387 , - 598 , - 141 , - 16 , - 223 , - 762 , - 1633 , - 2836 , - 4371 , - 926 , - 3125 , - 344 , - 3207 , - 1090 , - 4617 , - 3164 , - 2043 , - 1254 , - 797 , - 672 , - 879 , - 1418 , - 2289 , - 3492 , - 5027 , - 1582 , - 3781 , - 1000 , - 3863 , - 1746 , - 5273 , - 3820 , - 2699 , - 1910 , - 1453 , - 1328 , - 1535 , - 2074 , - 2945 , - 4148 , - 371 , - 2238 , - 4437 , - 1656 , - 4519 , - 2402 , - 617 , - 4476 , - 3355 , - 2566 , - 2109 , - 1984 , - 2191 , - 2730 , - 3601 , - 4804 , - 1027 , - 2894 , - 5093 , - 2312 , - 5175 , - 3058 , - 1273 , - 5132 , - 4011 , - 3222 , - 2765 , - 2640 , - 2847 , - 3386 , - 4257 , - 148 , - 1683 , - 3550 , - 437 , - 2968 , - 519 , - 3714 , - 1929 , - 476 , - 4667 , - 3878 , - 3421 , - 3296 , - 3503 , - 4042 , - 4913 , - 804 , - 2339 , - 4206 , - 1093 , - 3624 , - 1175 , - 4370 , - 2585 , - 1132 , - 11 , - 4534 , - 4077 , - 3952 , - 4159 , - 4698 , - 257 , - 1460 , - 2995 , - 4862 , - 1749 , - 4280 , - 1831 , - 5026 , - 3241 , - 1788 , - 667 , - 5190 , - 4733 , - 4608 , - 4815 , - 42 , - 913 , - 2116 , - 3651 , - 206 , - 2405 , - 4936 , - 2487 , - 370 , - 3897 , - 2444 , - 1323 , - 534 , - 77 , - 5264 , - 159 , - 698 , - 1569 , - 2772 , - 4307 , - 862 , - 3061 , - 280 , - 3143 , - 1026 , - 4553 , - 3100 , - 1979 , - 1190 , - 733 , - 608 , - 815 , - 1354 , - 2225 , - 3428 , - 4963 , - 1518 , - 3717 , - 936 , - 3799 , - 1682 , - 5209 , - 3756 , - 2635 , - 1846 , - 1389 , - 1264 , - 1471 , - 2010 , - 2881 , - 4084 , - 307 , - 2174 , - 4373 , - 1592 , - 4455 , - 2338 , - 553 , - 4412 , - 3291 , - 2502 , - 2045 , - 1920 , - 2127 , - 2666 , - 3537 , - 4740 , - 963 , - 2830 , - 5029 , - 2248 , - 5111 , - 2994 , - 1209 , - 5068 , - 3947 , - 3158 , - 2701 , - 2576 , - 2783 , - 3322 , - 4193 , - 84 , - 1619 , - 3486 , - 373 , - 2904 , - 455 , - 3650 , - 1865 , - 412 , - 4603 , - 3814 , - 3357 , - 3232 , - 3439 , - 3978 , - 4849 , - 740 , - 2275 , - 4142 , - 1029 , - 3560 , - 1111 , - 4306 , - 2521 , - 1068 , - 5259 , - 4470 , - 4013 , - 3888 , - 4095 , - 4634 , - 193 , - 1396 , - 2931 , - 4798 , - 1685 , - 4216 , - 1767 , - 4962 , - 3177 , - 1724 , - 603 , - 5126 , - 4669 , - 4544 , - 4751 , - 5290 , - 849 , - 2052 , - 3587 , - 142 , - 2341 , - 4872 , - 2423 , - 306 , - 3833 , - 2380 , - 1259 , - 470 , - 13 , - 5200 , - 95 , - 634 , - 1505 , - 2708 , - 4243 , - 798 , - 2997 , - 216 , - 3079 , - 962 , - 4489 , - 3036 , - 1915 , - 1126 , - 669 , - 544 , - 751 , - 1290 , - 2161 , - 3364 , - 4899 , - 1454 , - 3653 , - 872 , - 3735 , - 1618 , - 5145 , - 3692 , - 2571 , - 1782 , - 1325 , - 1200 , - 1407 , - 1946 , - 2817 , - 4020 , - 243 , - 2110 , - 4309 , - 1528 , - 4391 , - 2274 , - 489 , - 4348 , - 3227 , - 2438 , - 1981 , - 1856 , - 2063 , - 2602 , - 3473 , - 4676 , - 899 , - 2766 , - 4965 , - 2184 , - 5047 , - 2930 , - 1145 , - 5004 , - 3883 , - 3094 , - 2637 , - 2512 , - 2719 , - 3258 , - 4129 , - 20 , - 1555 , - 3422 , - 309 , - 2840 , - 391 , - 3586 , - 1801 , - 348 , - 4539 , - 3750 , - 3293 , - 3168 , - 3375 , - 3914 , - 4785 , - 676 , - 2211 , - 4078 , - 965 , - 3496 , - 1047 , - 4242 , - 2457 , - 1004 , - 5195 , - 4406 , - 3949 , - 3824 , - 4031 , - 4570 , - 129 , - 1332 , - 2867 , - 4734 , - 1621 , - 4152 , - 1703 , - 4898 , - 3113 , - 1660 , - 539 , - 5062 , - 4605 , - 4480 , - 4687 , - 5226 , - 785 , - 1988 , - 3523 , - 78 , - 2277 , - 4808 , - 2359 , - 242 , - 3769 , - 2316 , - 1195 , - 406 , - 5261 , - 5136 , - 31 , - 570 , - 1441 , - 2644 , - 4179 , - 734 , - 2933 , - 152 , - 3015 , - 898 , - 4425 , - 2972 , - 1851 , - 1062 , - 605 , - 480 , - 687 , - 1226 , - 2097 , - 3300 , - 4835 , - 1390 , - 3589 , - 808 , - 3671 , - 1554 , - 5081 , - 3628 , - 2507 , - 1718 , - 1261 , - 1136 , - 1343 , - 1882 , - 2753 , - 3956 , - 179 , - 2046 , - 4245 , - 1464 , - 4327 , - 2210 , - 425 , - 4284 , - 3163 , - 2374 , - 1917 , - 1792 , - 1999 , - 2538 , - 3409 , - 4612 , - 835 , - 2702 , - 4901 , - 2120 , - 4983 , - 2866 , - 1081 , - 4940 , - 3819 , - 3030 , - 2573 , - 2448 , - 2655 , - 3194 , - 4065 , - 5268 , - 1491 , - 3358 , - 245 , - 2776 , - 327 , - 3522 , - 1737 , - 284 , - 4475 , - 3686 , - 3229 , - 3104 , - 3311 , - 3850 , - 4721 , - 612 , - 2147 , - 4014 , - 901 , - 3432 , - 983 , - 4178 , - 2393 , - 940 , - 5131 , - 4342 , - 3885 , - 3760 , - 3967 , - 4506 , - 65 , - 1268 , - 2803 , - 4670 , - 1557 , - 4088 , - 1639 , - 4834 , - 3049 , - 1596 , - 475 , - 4998 , - 4541 , - 4416 , - 4623 , - 5162 , - 721 , - 1924 , - 3459 , - 14 , - 2213 , - 4744 , - 2295 , - 178 , - 3705 , - 2252 , - 1131 , - 342 , - 5197 , - 5072 , - 5279 , - 506 , - 1377 , - 2580 , - 4115 , - 670 , - 2869 , - 88 , - 2951 , - 834 , - 4361 , - 2908 , - 1787 , - 998 , - 541 , - 416 , - 623 , - 1162 , - 2033 , - 3236 , - 4771 , - 1326 , - 3525 , - 744 , - 3607 , - 1490 , - 5017 , - 3564 , - 2443 , - 1654 , - 1197 , - 1072 , - 1279 , - 1818 , - 2689 , - 3892 , - 115 , - 1982 , - 4181 , - 1400 , - 4263 , - 2146 , - 361 , - 4220 , - 3099 , - 2310 , - 1853 , - 1728 , - 1935 , - 2474 , - 3345 , - 4548 , - 771 , - 2638 , - 4837 , - 2056 , - 4919 , - 2802 , - 1017 , - 4876 , - 3755 , - 2966 , - 2509 , - 2384 , - 2591 , - 3130 , - 4001 , - 5204 , - 1427 , - 3294 , - 181 , - 2712 , - 263 , - 3458 , - 1673 , - 220 , - 4411 , - 3622 , - 3165 , - 3040 , - 3247 , - 3786 , - 4657 , - 548 , - 2083 , - 3950 , - 837 , - 3368 , - 919 , - 4114 , - 2329 , - 876 , - 5067 , - 4278 , - 3821 , - 3696 , - 3903 , - 4442 , - 1 , - 1204 , - 2739 , - 4606 , - 1493 , - 4024 , - 1575 , - 4770 , - 2985 , - 1532 , - 411 , - 4934 , - 4477 , - 4352 , - 4559 , - 5098 , - 657 , - 1860 , - 3395 , - 5262 , - 2149 , - 4680 , - 2231 , - 114 , - 3641 , - 2188 , - 1067 , - 278 , - 5133 , - 5008 , - 5215 , - 442 , - 1313 , - 2516 , - 4051 , - 606 , - 2805 , - 24 , - 2887 , - 770 , - 4297 , - 2844 , - 1723 , - 934 , - 477 , - 352 , - 559 , - 1098 , - 1969 , - 3172 , - 4707 , - 1262 , - 3461 , - 680 , - 3543 , - 1426 , - 4953 , - 3500 , - 2379 , - 1590 , - 1133 , - 1008 , - 1215 , - 1754 , - 2625 , - 3828 , - 51 , - 1918 , - 4117 , - 1336 , - 4199 , - 2082 , - 297 , - 4156 , - 3035 , - 2246 , - 1789 , - 1664 , - 1871 , - 2410 , - 3281 , - 4484 , - 707 , - 2574 , - 4773 , - 1992 , - 4855 , - 2738 , - 953 , - 4812 , - 3691 , - 2902 , - 2445 , - 2320 , - 2527 , - 3066 , - 3937 , - 5140 , - 1363 , - 3230 , - 117 , - 2648 , - 199 , - 3394 , - 1609 , - 156 , - 4347 , - 3558 , - 3101 , - 2976 , - 3183 , - 3722 , - 4593 , - 484 , - 2019 , - 3886 , - 773 , - 3304 , - 855 , - 4050 , - 2265 , - 812 , - 5003 , - 4214 , - 3757 , - 3632 , - 3839 , - 4378 , - 5249 , - 1140 , - 2675 , - 4542 , - 1429 , - 3960 , - 1511 , - 4706 , - 2921 , - 1468 , - 347 , - 4870 , - 4413 , - 4288 , - 4495 , - 5034 , - 593 , - 1796 , - 3331 , - 5198 , - 2085 , - 4616 , - 2167 , - 50 , - 3577 , - 2124 , - 1003 , - 214 , - 5069 , - 4944 , - 5151 , - 378 , - 1249 , - 2452 , - 3987 , - 542 , - 2741 , - 5272 , - 2823 , - 706 , - 4233 , - 2780 , - 1659 , - 870 , - 413 , - 288 , - 495 , - 1034 , - 1905 , - 3108 , - 4643 , - 1198 , - 3397 , - 616 , - 3479 , - 1362 , - 4889 , - 3436 , - 2315 , - 1526 , - 1069 , - 944 , - 1151 , - 1690 , - 2561 , - 3764 , - 5299 , - 1854 , - 4053 , - 1272 , - 4135 , - 2018 , - 233 , - 4092 , - 2971 , - 2182 , - 1725 , - 1600 , - 1807 , - 2346 , - 3217 , - 4420 , - 643 , - 2510 , - 4709 , - 1928 , - 4791 , - 2674 , - 889 , - 4748 , - 3627 , - 2838 , - 2381 , - 2256 , - 2463 , - 3002 , - 3873 , - 5076 , - 1299 , - 3166 , - 53 , - 2584 , - 135 , - 3330 , - 1545 , - 92 , - 4283 , - 3494 , - 3037 , - 2912 , - 3119 , - 3658 , - 4529 , - 420 , - 1955 , - 3822 , - 709 , - 3240 , - 791 , - 3986 , - 2201 , - 748 , - 4939 , - 4150 , - 3693 , - 3568 , - 3775 , - 4314 , - 5185 , - 1076 , - 2611 , - 4478 , - 1365 , - 3896 , - 1447 , - 4642 , - 2857 , - 1404 , - 283 , - 4806 , - 4349 , - 4224 , - 4431 , - 4970 , - 529 , - 1732 , - 3267 , - 5134 , - 2021 , - 4552 , - 2103 , - 5298 , - 3513 , - 2060 , - 939 , - 150 , - 5005 , - 4880 , - 5087 , - 314 , - 1185 , - 2388 , - 3923 , - 478 , - 2677 , - 5208 , - 2759 , - 642 , - 4169 , - 2716 , - 1595 , - 806 , - 349 , - 224 , - 431 , - 970 , - 1841 , - 3044 , - 4579 , - 1134 , - 3333 , - 552 , - 3415 , - 1298 , - 4825 , - 3372 , - 2251 , - 1462 , - 1005 , - 880 , - 1087 , - 1626 , - 2497 , - 3700 , - 5235 , - 1790 , - 3989 , - 1208 , - 4071 , - 1954 , - 169 , - 4028 , - 2907 , - 2118 , - 1661 , - 1536 , - 1743 , - 2282 , - 3153 , - 4356 , - 579 , - 2446 , - 4645 , - 1864 , - 4727 , - 2610 , - 825 , - 4684 , - 3563 , - 2774 , - 2317 , - 2192 , - 2399 , - 2938 , - 3809 , - 5012 , - 1235 , - 3102 , - 5301 , - 2520 , - 71 , - 3266 , - 1481 , - 28 , - 4219 , - 3430 , - 2973 , - 2848 , - 3055 , - 3594 , - 4465 , - 356 , - 1891 , - 3758 , - 645 , - 3176 , - 727 , - 3922 , - 2137 , - 684 , - 4875 , - 4086 , - 3629 , - 3504 , - 3711 , - 4250 , - 5121 , - 1012 , - 2547 , - 4414 , - 1301 , - 3832 , - 1383 , - 4578 , - 2793 , - 1340 , - 219 , - 4742 , - 4285 , - 4160 , - 4367 , - 4906 , - 465 , - 1668 , - 3203 , - 5070 , - 1957 , - 4488 , - 2039 , - 5234 , - 3449 , - 1996 , - 875 , - 86 , - 4941 , - 4816 , - 5023 , - 250 , - 1121 , - 2324 , - 3859 , - 414 , - 2613 , - 5144 , - 2695 , - 578 , - 4105 , - 2652 , - 1531 , - 742 , - 285 , - 160 , - 367 , - 906 , - 1777 , - 2980 , - 4515 , - 1070 , - 3269 , - 488 , - 3351 , - 1234 , - 4761 , - 3308 , - 2187 , - 1398 , - 941 , - 816 , - 1023 , - 1562 , - 2433 , - 3636 , - 5171 , - 1726 , - 3925 , - 1144 , - 4007 , - 1890 , - 105 , - 3964 , - 2843 , - 2054 , - 1597 , - 1472 , - 1679 , - 2218 , - 3089 , - 4292 , - 515 , - 2382 , - 4581 , - 1800 , - 4663 , - 2546 , - 761 , - 4620 , - 3499 , - 2710 , - 2253 , - 2128 , - 2335 , - 2874 , - 3745 , - 4948 , - 1171 , - 3038 , - 5237 , - 2456 , - 7 , - 3202 , - 1417 , - 5276 , - 4155 , - 3366 , - 2909 , - 2784 , - 2991 , - 3530 , - 4401 , - 292 , - 1827 , - 3694 , - 581 , - 3112 , - 663 , - 3858 , - 2073 , - 620 , - 4811 , - 4022 , - 3565 , - 3440 , - 3647 , - 4186 , - 5057 , - 948 , - 2483 , - 4350 , - 1237 , - 3768 , - 1319 , - 4514 , - 2729 , - 1276 , - 155 , - 4678 , - 4221 , - 4096 , - 4303 , - 4842 , - 401 , - 1604 , - 3139 , - 5006 , - 1893 , - 4424 , - 1975 , - 5170 , - 3385 , - 1932 , - 811 , - 22 , - 4877 , - 4752 , - 4959 , - 186 , - 1057 , - 2260 , - 3795 , - 350 , - 2549 , - 5080 , - 2631 , - 514 , - 4041 , - 2588 , - 1467 , - 678 , - 221 , - 96 , - 303 , - 842 , - 1713 , - 2916 , - 4451 , - 1006 , - 3205 , - 424 , - 3287 , - 1170 , - 4697 , - 3244 , - 2123 , - 1334 , - 877 , - 752 , - 959 , - 1498 , - 2369 , - 3572 , - 5107 , - 1662 , - 3861 , - 1080 , - 3943 , - 1826 , - 41 , - 3900 , - 2779 , - 1990 , - 1533 , - 1408 , - 1615 , - 2154 , - 3025 , - 4228 , - 451 , - 2318 , - 4517 , - 1736 , - 4599 , - 2482 , - 697 , - 4556 , - 3435 , - 2646 , - 2189 , - 2064 , - 2271 , - 2810 , - 3681 , - 4884 , - 1107 , - 2974 , - 5173 , - 2392 , - 5255 , - 3138 , - 1353 , - 5212 , - 4091 , - 3302 , - 2845 , - 2720 , - 2927 , - 3466 , - 4337 , - 228 , - 1763 , - 3630 , - 517 , - 3048 , - 599 , - 3794 , - 2009 , - 556 , - 4747 , - 3958 , - 3501 , - 3376 , - 3583 , - 4122 , - 4993 , - 884 , - 2419 , - 4286 , - 1173 , - 3704 , - 1255 , - 4450 , - 2665 , - 1212 , - 91 , - 4614 , - 4157 , - 4032 , - 4239 , - 4778 , - 337 , - 1540 , - 3075 , - 4942 , - 1829 , - 4360 , - 1911 , - 5106 , - 3321 , - 1868 , - 747 , - 5270 , - 4813 , - 4688 , - 4895 , - 122 , - 993 , - 2196 , - 3731 , - 286 , - 2485 , - 5016 , - 2567 , - 450 , - 3977 , - 2524 , - 1403 , - 614 , - 157 , - 32 , - 239 , - 778 , - 1649 , - 2852 , - 4387 , - 942 , - 3141 , - 360 , - 3223 , - 1106 , - 4633 , - 3180 , - 2059 , - 1270 , - 813 , - 688 , - 895 , - 1434 , - 2305 , - 3508 , - 5043 , - 1598 , - 3797 , - 1016 , - 3879 , - 1762 , - 5289 , - 3836 , - 2715 , - 1926 , - 1469 , - 1344 , - 1551 , - 2090 , - 2961 , - 4164 , - 387 , - 2254 , - 4453 , - 1672 , - 4535 , - 2418 , - 633 , - 4492 , - 3371 , - 2582 , - 2125 , - 2000 , - 2207 , - 2746 , - 3617 , - 4820 , - 1043 , - 2910 , - 5109 , - 2328 , - 5191 , - 3074 , - 1289 , - 5148 , - 4027 , - 3238 , - 2781 , - 2656 , - 2863 , - 3402 , - 4273 , - 164 , - 1699 , - 3566 , - 453 , - 2984 , - 535 , - 3730 , - 1945 , - 492 , - 4683 , - 3894 , - 3437 , - 3312 , - 3519 , - 4058 , - 4929 , - 820 , - 2355 , - 4222 , - 1109 , - 3640 , - 1191 , - 4386 , - 2601 , - 1148 , - 27 , - 4550 , - 4093 , - 3968 , - 4175 , - 4714 , - 273 , - 1476 , - 3011 , - 4878 , - 1765 , - 4296 , - 1847 , - 5042 , - 3257 , - 1804 , - 683 , - 5206 , - 4749 , - 4624 , - 4831 , - 58 , - 929 , - 2132 , - 3667 , - 222 , - 2421 , - 4952 , - 2503 , - 386 , - 3913 , - 2460 , - 1339 , - 550 , - 93 , - 5280 , - 175 , - 714 , - 1585 , - 2788 , - 4323 , - 878 , - 3077 , - 296 , - 3159 , - 1042 , - 4569 , - 3116 , - 1995 , - 1206 , - 749 , - 624 , - 831 , - 1370 , - 2241 , - 3444 , - 4979 , - 1534 , - 3733 , - 952 , - 3815 , - 1698 , - 5225 , - 3772 , - 2651 , - 1862 , - 1405 , - 1280 , - 1487 , - 2026 , - 2897 , - 4100 , - 323 , - 2190 , - 4389 , - 1608 , - 4471 , - 2354 , - 569 , - 4428 , - 3307 , - 2518 , - 2061 , - 1936 , - 2143 , - 2682 , - 3553 , - 4756 , - 979 , - 2846 , - 5045 , - 2264 , - 5127 , - 3010 , - 1225 , - 5084 , - 3963 , - 3174 , - 2717 , - 2592 , - 2799 , - 3338 , - 4209 , - 100 , - 1635 , - 3502 , - 389 , - 2920 , - 471 , - 3666 , - 1881 , - 428 , - 4619 , - 3830 , - 3373 , - 3248 , - 3455 , - 3994 , - 4865 , - 756 , - 2291 , - 4158 , - 1045 , - 3576 , - 1127 , - 4322 , - 2537 , - 1084 , - 5275 , - 4486 , - 4029 , - 3904 , - 4111 , - 4650 , - 209 , - 1412 , - 2947 , - 4814 , - 1701 , - 4232 , - 1783 , - 4978 , - 3193 , - 1740 , - 619 , - 5142 , - 4685 , - 4560 , - 4767 , - 5306 , - 865 , - 2068 , - 3603 , - 158 , - 2357 , - 4888 , - 2439 , - 322 , - 3849 , - 2396 , - 1275 , - 486 , - 29 , - 5216 , - 111 , - 650 , - 1521 , - 2724 , - 4259 , - 814 , - 3013 , - 232 , - 3095 , - 978 , - 4505 , - 3052 , - 1931 , - 1142 , - 685 , - 560 , - 767 , - 1306 , - 2177 , - 3380 , - 4915 , - 1470 , - 3669 , - 888 , - 3751 , - 1634 , - 5161 , - 3708 , - 2587 , - 1798 , - 1341 , - 1216 , - 1423 , - 1962 , - 2833 , - 4036 , - 259 , - 2126 , - 4325 , - 1544 , - 4407 , - 2290 , - 505 , - 4364 , - 3243 , - 2454 , - 1997 , - 1872 , - 2079 , - 2618 , - 3489 , - 4692 , - 915 , - 2782 , - 4981 , - 2200 , - 5063 , - 2946 , - 1161 , - 5020 , - 3899 , - 3110 , - 2653 , - 2528 , - 2735 , - 3274 , - 4145 , - 36 , - 1571 , - 3438 , - 325 , - 2856 , - 407 , - 3602 , - 1817 , - 364 , - 4555 , - 3766 , - 3309 , - 3184 , - 3391 , - 3930 , - 4801 , - 692 , - 2227 , - 4094 , - 981 , - 3512 , - 1063 , - 4258 , - 2473 , - 1020 , - 5211 , - 4422 , - 3965 , - 3840 , - 4047 , - 4586 , - 145 , - 1348 , - 2883 , - 4750 , - 1637 , - 4168 , - 1719 , - 4914 , - 3129 , - 1676 , - 555 , - 5078 , - 4621 , - 4496 , - 4703 , - 5242 , - 801 , - 2004 , - 3539 , - 94 , - 2293 , - 4824 , - 2375 , - 258 , - 3785 , - 2332 , - 1211 , - 422 , - 5277 , - 5152 , - 47 , - 586 , - 1457 , - 2660 , - 4195 , - 750 , - 2949 , - 168 , - 3031 , - 914 , - 4441 , - 2988 , - 1867 , - 1078 , - 621 , - 496 , - 703 , - 1242 , - 2113 , - 3316 , - 4851 , - 1406 , - 3605 , - 824 , - 3687 , - 1570 , - 5097 , - 3644 , - 2523 , - 1734 , - 1277 , - 1152 , - 1359 , - 1898 , - 2769 , - 3972 , - 195 , - 2062 , - 4261 , - 1480 , - 4343 , - 2226 , - 441 , - 4300 , - 3179 , - 2390 , - 1933 , - 1808 , - 2015 , - 2554 , - 3425 , - 4628 , - 851 , - 2718 , - 4917 , - 2136 , - 4999 , - 2882 , - 1097 , - 4956 , - 3835 , - 3046 , - 2589 , - 2464 , - 2671 , - 3210 , - 4081 , - 5284 , - 1507 , - 3374 , - 261 , - 2792 , - 343 , - 3538 , - 1753 , - 300 , - 4491 , - 3702 , - 3245 , - 3120 , - 3327 , - 3866 , - 4737 , - 628 , - 2163 , - 4030 , - 917 , - 3448 , - 999 , - 4194 , - 2409 , - 956 , - 5147 , - 4358 , - 3901 , - 3776 , - 3983 , - 4522 , - 81 , - 1284 , - 2819 , - 4686 , - 1573 , - 4104 , - 1655 , - 4850 , - 3065 , - 1612 , - 491 , - 5014 , - 4557 , - 4432 , - 4639 , - 5178 , - 737 , - 1940 , - 3475 , - 30 , - 2229 , - 4760 , - 2311 , - 194 , - 3721 , - 2268 , - 1147 , - 358 , - 5213 , - 5088 , - 5295 , - 522 , - 1393 , - 2596 , - 4131 , - 686 , - 2885 , - 104 , - 2967 , - 850 , - 4377 , - 2924 , - 1803 , - 1014 , - 557 , - 432 , - 639 , - 1178 , - 2049 , - 3252 , - 4787 , - 1342 , - 3541 , - 760 , - 3623 , - 1506 , - 5033 , - 3580 , - 2459 , - 1670 , - 1213 , - 1088 , - 1295 , - 1834 , - 2705 , - 3908 , - 131 , - 1998 , - 4197 , - 1416 , - 4279 , - 2162 , - 377 , - 4236 , - 3115 , - 2326 , - 1869 , - 1744 , - 1951 , - 2490 , - 3361 , - 4564 , - 787 , - 2654 , - 4853 , - 2072 , - 4935 , - 2818 , - 1033 , - 4892 , - 3771 , - 2982 , - 2525 , - 2400 , - 2607 , - 3146 , - 4017 , - 5220 , - 1443 , - 3310 , - 197 , - 2728 , - 279 , - 3474 , - 1689 , - 236 , - 4427 , - 3638 , - 3181 , - 3056 , - 3263 , - 3802 , - 4673 , - 564 , - 2099 , - 3966 , - 853 , - 3384 , - 935 , - 4130 , - 2345 , - 892 , - 5083 , - 4294 , - 3837 , - 3712 , - 3919 , - 4458 , - 17 , - 1220 , - 2755 , - 4622 , - 1509 , - 4040 , - 1591 , - 4786 , - 3001 , - 1548 , - 427 , - 4950 , - 4493 , - 4368 , - 4575 , - 5114 , - 673 , - 1876 , - 3411 , - 5278 , - 2165 , - 4696 , - 2247 , - 130 , - 3657 , - 2204 , - 1083 , - 294 , - 5149 , - 5024 , - 5231 , - 458 , - 1329 , - 2532 , - 4067 , - 622 , - 2821 , - 40 , - 2903 , - 786 , - 4313 , - 2860 , - 1739 , - 950 , - 493 , - 368 , - 575 , - 1114 , - 1985 , - 3188 , - 4723 , - 1278 , - 3477 , - 696 , - 3559 , - 1442 , - 4969 , - 3516 , - 2395 , - 1606 , - 1149 , - 1024 , - 1231 , - 1770 , - 2641 , - 3844 , - 67 , - 1934 , - 4133 , - 1352 , - 4215 , - 2098 , - 313 , - 4172 , - 3051 , - 2262 , - 1805 , - 1680 , - 1887 , - 2426 , - 3297 , - 4500 , - 723 , - 2590 , - 4789 , - 2008 , - 4871 , - 2754 , - 969 , - 4828 , - 3707 , - 2918 , - 2461 , - 2336 , - 2543 , - 3082 , - 3953 , - 5156 , - 1379 , - 3246 , - 133 , - 2664 , - 215 , - 3410 , - 1625 , - 172 , - 4363 , - 3574 , - 3117 , - 2992 , - 3199 , - 3738 , - 4609 , - 500 , - 2035 , - 3902 , - 789 , - 3320 , - 871 , - 4066 , - 2281 , - 828 , - 5019 , - 4230 , - 3773 , - 3648 , - 3855 , - 4394 , - 5265 , - 1156 , - 2691 , - 4558 , - 1445 , - 3976 , - 1527 , - 4722 , - 2937 , - 1484 , - 363 , - 4886 , - 4429 , - 4304 , - 4511 , - 5050 , - 609 , - 1812 , - 3347 , - 5214 , - 2101 , - 4632 , - 2183 , - 66 , - 3593 , - 2140 , - 1019 , - 230 , - 5085 , - 4960 , - 5167 , - 394 , - 1265 , - 2468 , - 4003 , - 558 , - 2757 , - 5288 , - 2839 , - 722 , - 4249 , - 2796 , - 1675 , - 886 , - 429 , - 304 , - 511 , - 1050 , - 1921 , - 3124 , - 4659 , - 1214 , - 3413 , - 632 , - 3495 , - 1378 , - 4905 , - 3452 , - 2331 , - 1542 , - 1085 , - 960 , - 1167 , - 1706 , - 2577 , - 3780 , - 3 , - 1870 , - 4069 , - 1288 , - 4151 , - 2034 , - 249 , - 4108 , - 2987 , - 2198 , - 1741 , - 1616 , - 1823 , - 2362 , - 3233 , - 4436 , - 659 , - 2526 , - 4725 , - 1944 , - 4807 , - 2690 , - 905 , - 4764 , - 3643 , - 2854 , - 2397 , - 2272 , - 2479 , - 3018 , - 3889 , - 5092 , - 1315 , - 3182 , - 69 , - 2600 , - 151 , - 3346 , - 1561 , - 108 , - 4299 , - 3510 , - 3053 , - 2928 , - 3135 , - 3674 , - 4545 , - 436 , - 1971 , - 3838 , - 725 , - 3256 , - 807 , - 4002 , - 2217 , - 764 , - 4955 , - 4166 , - 3709 , - 3584 , - 3791 , - 4330 , - 5201 , - 1092 , - 2627 , - 4494 , - 1381 , - 3912 , - 1463 , - 4658 , - 2873 , - 1420 , - 299 , - 4822 , - 4365 , - 4240 , - 4447 , - 4986 , - 545 , - 1748 , - 3283 , - 5150 , - 2037 , - 4568 , - 2119 , - 2 , - 3529 , - 2076 , - 955 , - 166 , - 5021 , - 4896 , - 5103 , - 330 , - 1201 , - 2404 , - 3939 , - 494 , - 2693 , - 5224 , - 2775 , - 658 , - 4185 , - 2732 , - 1611 , - 822 , - 365 , - 240 , - 447 , - 986 , - 1857 , - 3060 , - 4595 , - 1150 , - 3349 , - 568 , - 3431 , - 1314 , - 4841 , - 3388 , - 2267 , - 1478 , - 1021 , - 896 , - 1103 , - 1642 , - 2513 , - 3716 , - 5251 , - 1806 , - 4005 , - 1224 , - 4087 , - 1970 , - 185 , - 4044 , - 2923 , - 2134 , - 1677 , - 1552 , - 1759 , - 2298 , - 3169 , - 4372 , - 595 , - 2462 , - 4661 , - 1880 , - 4743 , - 2626 , - 841 , - 4700 , - 3579 , - 2790 , - 2333 , - 2208 , - 2415 , - 2954 , - 3825 , - 5028 , - 1251 , - 3118 , - 5 , - 2536 , - 87 , - 3282 , - 1497 , - 44 , - 4235 , - 3446 , - 2989 , - 2864 , - 3071 , - 3610 , - 4481 , - 372 , - 1907 , - 3774 , - 661 , - 3192 , - 743 , - 3938 , - 2153 , - 700 , - 4891 , - 4102 , - 3645 , - 3520 , - 3727 , - 4266 , - 5137 , - 1028 , - 2563 , - 4430 , - 1317 , - 3848 , - 1399 , - 4594 , - 2809 , - 1356 , - 235 , - 4758 , - 4301 , - 4176 , - 4383 , - 4922 , - 481 , - 1684 , - 3219 , - 5086 , - 1973 , - 4504 , - 2055 , - 5250 , - 3465 , - 2012 , - 891 , - 102 , - 4957 , - 4832 , - 5039 , - 266 , - 1137 , - 2340 , - 3875 , - 430 , - 2629 , - 5160 , - 2711 , - 594 , - 4121 , - 2668 , - 1547 , - 758 , - 301 , - 176 , - 383 , - 922 , - 1793 , - 2996 , - 4531 , - 1086 , - 3285 , - 504 , - 3367 , - 1250 , - 4777 , - 3324 , - 2203 , - 1414 , - 957 , - 832 , - 1039 , - 1578 , - 2449 , - 3652 , - 5187 , - 1742 , - 3941 , - 1160 , - 4023 , - 1906 , - 121 , - 3980 , - 2859 , - 2070 , - 1613 , - 1488 , - 1695 , - 2234 , - 3105 , - 4308 , - 531 , - 2398 , - 4597 , - 1816 , - 4679 , - 2562 , - 777 , - 4636 , - 3515 , - 2726 , - 2269 , - 2144 , - 2351 , - 2890 , - 3761 , - 4964 , - 1187 , - 3054 , - 5253 , - 2472 , - 23 , - 3218 , - 1433 , - 5292 , - 4171 , - 3382 , - 2925 , - 2800 , - 3007 , - 3546 , - 4417 , - 308 , - 1843 , - 3710 , - 597 , - 3128 , - 679 , - 3874 , - 2089 , - 636 , - 4827 , - 4038 , - 3581 , - 3456 , - 3663 , - 4202 , - 5073 , - 964 , - 2499 , - 4366 , - 1253 , - 3784 , - 1335 , - 4530 , - 2745 , - 1292 , - 171 , - 4694 , - 4237 , - 4112 , - 4319 , - 4858 , - 417 , - 1620 , - 3155 , - 5022 , - 1909 , - 4440 , - 1991 , - 5186 , - 3401 , - 1948 , - 827 , - 38 , - 4893 , - 4768 , - 4975 , - 202 , - 1073 , - 2276 , - 3811 , - 366 , - 2565 , - 5096 , - 2647 , - 530 , - 4057 , - 2604 , - 1483 , - 694 , - 237 , - 112 , - 319 , - 858 , - 1729 , - 2932 , - 4467 , - 1022 , - 3221 , - 440 , - 3303 , - 1186 , - 4713 , - 3260 , - 2139 , - 1350 , - 893 , - 768 , - 975 , - 1514 , - 2385 , - 3588 , - 5123 , - 1678 , - 3877 , - 1096 , - 3959 , - 1842 , - 57 , - 3916 , - 2795 , - 2006 , - 1549 , - 1424 , - 1631 , - 2170 , - 3041 , - 4244 , - 467 , - 2334 , - 4533 , - 1752 , - 4615 , - 2498 , - 713 , - 4572 , - 3451 , - 2662 , - 2205 , - 2080 , - 2287 , - 2826 , - 3697 , - 4900 , - 1123 , - 2990 , - 5189 , - 2408 , - 5271 , - 3154 , - 1369 , - 5228 , - 4107 , - 3318 , - 2861 , - 2736 , - 2943 , - 3482 , - 4353 , - 244 , - 1779 , - 3646 , - 533 , - 3064 , - 615 , - 3810 , - 2025 , - 572 , - 4763 , - 3974 , - 3517 , - 3392 , - 3599 , - 4138 , - 5009 , - 900 , - 2435 , - 4302 , - 1189 , - 3720 , - 1271 , - 4466 , - 2681 , - 1228 , - 107 , - 4630 , - 4173 , - 4048 , - 4255 , - 4794 , - 353 , - 1556 , - 3091 , - 4958 , - 1845 , - 4376 , - 1927 , - 5122 , - 3337 , - 1884 , - 763 , - 5286 , - 4829 , - 4704 , - 4911 , - 138 , - 1009 , - 2212 , - 3747 , - 302 , - 2501 , - 5032 , - 2583 , - 466 , - 3993 , - 2540 , - 1419 , - 630 , - 173 , - 48 , - 255 , - 794 , - 1665 , - 2868 , - 4403 , - 958 , - 3157 , - 376 , - 3239 , - 1122 , - 4649 , - 3196 , - 2075 , - 1286 , - 829 , - 704 , - 911 , - 1450 , - 2321 , - 3524 , - 5059 , - 1614 , - 3813 , - 1032 , - 3895 , - 1778 , - 5305 , - 3852 , - 2731 , - 1942 , - 1485 , - 1360 , - 1567 , - 2106 , - 2977 , - 4180 , - 403 , - 2270 , - 4469 , - 1688 , - 4551 , - 2434 , - 649 , - 4508 , - 3387 , - 2598 , - 2141 , - 2016 , - 2223 , - 2762 , - 3633 , - 4836 , - 1059 , - 2926 , - 5125 , - 2344 , - 5207 , - 3090 , - 1305 , - 5164 , - 4043 , - 3254 , - 2797 , - 2672 , - 2879 , - 3418 , - 4289 , - 180 , - 1715 , - 3582 , - 469 , - 3000 , - 551 , - 3746 , - 1961 , - 508 , - 4699 , - 3910 , - 3453 , - 3328 , - 3535 , - 4074 , - 4945 , - 836 , - 2371 , - 4238 , - 1125 , - 3656 , - 1207 , - 4402 , - 2617 , - 1164 , - 43 , - 4566 , - 4109 , - 3984 , - 4191 , - 4730 , - 289 , - 1492 , - 3027 , - 4894 , - 1781 , - 4312 , - 1863 , - 5058 , - 3273 , - 1820 , - 699 , - 5222 , - 4765 , - 4640 , - 4847 , - 74 , - 945 , - 2148 , - 3683 , - 238 , - 2437 , - 4968 , - 2519 , - 402 , - 3929 , - 2476 , - 1355 , - 566 , - 109 , - 5296 , - 191 , - 730 , - 1601 , - 2804 , - 4339 , - 894 , - 3093 , - 312 , - 3175 , - 1058 , - 4585 , - 3132 , - 2011 , - 1222 , - 765 , - 640 , - 847 , - 1386 , - 2257 , - 3460 , - 4995 , - 1550 , - 3749 , - 968 , - 3831 , - 1714 , - 5241 , - 3788 , - 2667 , - 1878 , - 1421 , - 1296 , - 1503 , - 2042 , - 2913 , - 4116 , - 339 , - 2206 , - 4405 , - 1624 , - 4487 , - 2370 , - 585 , - 4444 , - 3323 , - 2534 , - 2077 , - 1952 , - 2159 , - 2698 , - 3569 , - 4772 , - 995 , - 2862 , - 5061 , - 2280 , - 5143 , - 3026 , - 1241 , - 5100 , - 3979 , - 3190 , - 2733 , - 2608 , - 2815 , - 3354 , - 4225 , - 116 , - 1651 , - 3518 , - 405 , - 2936 , - 487 , - 3682 , - 1897 , - 444 , - 4635 , - 3846 , - 3389 , - 3264 , - 3471 , - 4010 , - 4881 , - 772 , - 2307 , - 4174 , - 1061 , - 3592 , - 1143 , - 4338 , - 2553 , - 1100 , - 5291 , - 4502 , - 4045 , - 3920 , - 4127 , - 4666 , - 225 , - 1428 , - 2963 , - 4830 , - 1717 , - 4248 , - 1799 , - 4994 , - 3209 , - 1756 , - 635 , - 5158 , - 4701 , - 4576 , - 4783 , - 10 , - 881 , - 2084 , - 3619 , - 174 , - 2373 , - 4904 , - 2455 , - 338 , - 3865 , - 2412 , - 1291 , - 502 , - 45 , - 5232 , - 127 , - 666 , - 1537 , - 2740 , - 4275 , - 830 , - 3029 , - 248 , - 3111 , - 994 , - 4521 , - 3068 , - 1947 , - 1158 , - 701 , - 576 , - 783 , - 1322 , - 2193 , - 3396 , - 4931 , - 1486 , - 3685 , - 904 , - 3767 , - 1650 , - 5177 , - 3724 , - 2603 , - 1814 , - 1357 , - 1232 , - 1439 , - 1978 , - 2849 , - 4052 , - 275 , - 2142 , - 4341 , - 1560 , - 4423 , - 2306 , - 521 , - 4380 , - 3259 , - 2470 , - 2013 , - 1888 , - 2095 , - 2634 , - 3505 , - 4708 , - 931 , - 2798 , - 4997 , - 2216 , - 5079 , - 2962 , - 1177 , - 5036 , - 3915 , - 3126 , - 2669 , - 2544 , - 2751 , - 3290 , - 4161 , - 52 , - 1587 , - 3454 , - 341 , - 2872 , - 423 , - 3618 , - 1833 , - 380 , - 4571 , - 3782 , - 3325 , - 3200 , - 3407 , - 3946 , - 4817 , - 708 , - 2243 , - 4110 , - 997 , - 3528 , - 1079 , - 4274 , - 2489 , - 1036 , - 5227 , - 4438 , - 3981 , - 3856 , - 4063 , - 4602 , - 161 , - 1364 , - 2899 , - 4766 , - 1653 , - 4184 , - 1735 , - 4930 , - 3145 , - 1692 , - 571 , - 5094 , - 4637 , - 4512 , - 4719 , - 5258 , - 817 , - 2020 , - 3555 , - 110 , - 2309 , - 4840 , - 2391 , - 274 , - 3801 , - 2348 , - 1227 , - 438 , - 5293 , - 5168 , - 63 , - 602 , - 1473 , - 2676 , - 4211 , - 766 , - 2965 , - 184 , - 3047 , - 930 , - 4457 , - 3004 , - 1883 , - 1094 , - 637 , - 512 , - 719 , - 1258 , - 2129 , - 3332 , - 4867 , - 1422 , - 3621 , - 840 , - 3703 , - 1586 , - 5113 , - 3660 , - 2539 , - 1750 , - 1293 , - 1168 , - 1375 , - 1914 , - 2785 , - 3988 , - 211 , - 2078 , - 4277 , - 1496 , - 4359 , - 2242 , - 457 , - 4316 , - 3195 , - 2406 , - 1949 , - 1824 , - 2031 , - 2570 , - 3441 , - 4644 , - 867 , - 2734 , - 4933 , - 2152 , - 5015 , - 2898 , - 1113 , - 4972 , - 3851 , - 3062 , - 2605 , - 2480 , - 2687 , - 3226 , - 4097 , - 5300 , - 1523 , - 3390 , - 277 , - 2808 , - 359 , - 3554 , - 1769 , - 316 , - 4507 , - 3718 , - 3261 , - 3136 , - 3343 , - 3882 , - 4753 , - 644 , - 2179 , - 4046 , - 933 , - 3464 , - 1015 , - 4210 , - 2425 , - 972 , - 5163 , - 4374 , - 3917 , - 3792 , - 3999 , - 4538 , - 97 , - 1300 , - 2835 , - 4702 , - 1589 , - 4120 , - 1671 , - 4866 , - 3081 , - 1628 , - 507 , - 5030 , - 4573 , - 4448 , - 4655 , - 5194 , - 753 , - 1956 , - 3491 , - 46 , - 2245 , - 4776 , - 2327 , - 210 , - 3737 , - 2284 , - 1163 , - 374 , - 5229 , - 5104 , - 5311 , - 538 , - 1409 , - 2612 , - 4147 , - 702 , - 2901 , - 120 , - 2983 , - 866 , - 4393 , - 2940 , - 1819 , - 1030 , - 573 , - 448 , - 655 , - 1194 , - 2065 , - 3268 , - 4803 , - 1358 , - 3557 , - 776 , - 3639 , - 1522 , - 5049 , - 3596 , - 2475 , - 1686 , - 1229 , - 1104 , - 1311 , - 1850 , - 2721 , - 3924 , - 147 , - 2014 , - 4213 , - 1432 , - 4295 , - 2178 , - 393 , - 4252 , - 3131 , - 2342 , - 1885 , - 1760 , - 1967 , - 2506 , - 3377 , - 4580 , - 803 , - 2670 , - 4869 , - 2088 , - 4951 , - 2834 , - 1049 , - 4908 , - 3787 , - 2998 , - 2541 , - 2416 , - 2623 , - 3162 , - 4033 , - 5236 , - 1459 , - 3326 , - 213 , - 2744 , - 295 , - 3490 , - 1705 , - 252 , - 4443 , - 3654 , - 3197 , - 3072 , - 3279 , - 3818 , - 4689 , - 580 , - 2115 , - 3982 , - 869 , - 3400 , - 951 , - 4146 , - 2361 , - 908 , - 5099 , - 4310 , - 3853 , - 3728 , - 3935 , - 4474 , - 33 , - 1236 , - 2771 , - 4638 , - 1525 , - 4056 , - 1607 , - 4802 , - 3017 , - 1564 , - 443 , - 4966 , - 4509 , - 4384 , - 4591 , - 5130 , - 689 , - 1892 , - 3427 , - 5294 , - 2181 , - 4712 , - 2263 , - 146 , - 3673 , - 2220 , - 1099 , - 310 , - 5165 , - 5040 , - 5247 , - 474 , - 1345 , - 2548 , - 4083 , - 638 , - 2837 , - 56 , - 2919 , - 802 , - 4329 , - 2876 , - 1755 , - 966 , - 509 , - 384 , - 591 , - 1130 , - 2001 , - 3204 , - 4739 , - 1294 , - 3493 , - 712 , - 3575 , - 1458 , - 4985 , - 3532 , - 2411 , - 1622 , - 1165 , - 1040 , - 1247 , - 1786 , - 2657 , - 3860 , - 83 , - 1950 , - 4149 , - 1368 , - 4231 , - 2114 , - 329 , - 4188 , - 3067 , - 2278 , - 1821 , - 1696 , - 1903 , - 2442 , - 3313 , - 4516 , - 739 , - 2606 , - 4805 , - 2024 , - 4887 , - 2770 , - 985 , - 4844 , - 3723 , - 2934 , - 2477 , - 2352 , - 2559 , - 3098 , - 3969 , - 5172 , - 1395 , - 3262 , - 149 , - 2680 , - 231 , - 3426 , - 1641 , - 188 , - 4379 , - 3590 , - 3133 , - 3008 , - 3215 , - 3754 , - 4625 , - 516 , - 2051 , - 3918 , - 805 , - 3336 , - 887 , - 4082 , - 2297 , - 844 , - 5035 , - 4246 , - 3789 , - 3664 , - 3871 , - 4410 , - 5281 , - 1172 , - 2707 , - 4574 , - 1461 , - 3992 , - 1543 , - 4738 , - 2953 , - 1500 , - 379 , - 4902 , - 4445 , - 4320 , - 4527 , - 5066 , - 625 , - 1828 , - 3363 , - 5230 , - 2117 , - 4648 , - 2199 , - 82 , - 3609 , - 2156 , - 1035 , - 246 , - 5101 , - 4976 , - 5183 , - 410 , - 1281 , - 2484 , - 4019 , - 574 , - 2773 , - 5304 , - 2855 , - 738 , - 4265 , - 2812 , - 1691 , - 902 , - 445 , - 320 , - 527 , - 1066 , - 1937 , - 3140 , - 4675 , - 1230 , - 3429 , - 648 , - 3511 , - 1394 , - 4921 , - 3468 , - 2347 , - 1558 , - 1101 , - 976 , - 1183 , - 1722 , - 2593 , - 3796 , - 19 , - 1886 , - 4085 , - 1304 , - 4167 , - 2050 , - 265 , - 4124 , - 3003 , - 2214 , - 1757 , - 1632 , - 1839 , - 2378 , - 3249 , - 4452 , - 675 , - 2542 , - 4741 , - 1960 , - 4823 , - 2706 , - 921 , - 4780 , - 3659 , - 2870 , - 2413 , - 2288 , - 2495 , - 3034 , - 3905 , - 5108 , - 1331 , - 3198 , - 85 , - 2616 , - 167 , - 3362 , - 1577 , - 124 , - 4315 , - 3526 , - 3069 , - 2944 , - 3151 , - 3690 , - 4561 , - 452 , - 1987 , - 3854 , - 741 , - 3272 , - 823 , - 4018 , - 2233 , - 780 , - 4971 , - 4182 , - 3725 , - 3600 , - 3807 , - 4346 , - 5217 , - 1108 , - 2643 , - 4510 , - 1397 , - 3928 , - 1479 , - 4674 , - 2889 , - 1436 , - 315 , - 4838 , - 4381 , - 4256 , - 4463 , - 5002 , - 561 , - 1764 , - 3299 , - 5166 , - 2053 , - 4584 , - 2135 , - 18 , - 3545 , - 2092 , - 971 , - 182 , - 5037 , - 4912 , - 5119 , - 346 , - 1217 , - 2420 , - 3955 , - 510 , - 2709 , - 5240 , - 2791 , - 674 , - 4201 , - 2748 , - 1627 , - 838 , - 381 , - 256 , - 463 , - 1002 , - 1873 , - 3076 , - 4611 , - 1166 , - 3365 , - 584 , - 3447 , - 1330 , - 4857 , - 3404 , - 2283 , - 1494 , - 1037 , - 912 , - 1119 , - 1658 , - 2529 , - 3732 , - 5267 , - 1822 , - 4021 , - 1240 , - 4103 , - 1986 , - 201 , - 4060 , - 2939 , - 2150 , - 1693 , - 1568 , - 1775 , - 2314 , - 3185 , - 4388 , - 611 , - 2478 , - 4677 , - 1896 , - 4759 , - 2642 , - 857 , - 4716 , - 3595 , - 2806 , - 2349 , - 2224 , - 2431 , - 2970 , - 3841 , - 5044 , - 1267 , - 3134 , - 21 , - 2552 , - 103 , - 3298 , - 1513 , - 60 , - 4251 , - 3462 , - 3005 , - 2880 , - 3087 , - 3626 , - 4497 , - 388 , - 1923 , - 3790 , - 677 , - 3208 , - 759 , - 3954 , - 2169 , - 716 , - 4907 , - 4118 , - 3661 , - 3536 , - 3743 , - 4282 , - 5153 , - 1044 , - 2579 , - 4446 , - 1333 , - 3864 , - 1415 , - 4610 , - 2825 , - 1372 , - 251 , - 4774 , - 4317 , - 4192 , - 4399 , - 4938 , - 497 , - 1700 , - 3235 , - 5102 , - 1989 , - 4520 , - 2071 , - 5266 , - 3481 , - 2028 , - 907 , - 118 , - 4973 , - 4848 , - 5055 , - 282 , - 1153 , - 2356 , - 3891 , - 446 , - 2645 , - 5176 , - 2727 , - 610 , - 4137 , - 2684 , - 1563 , - 774 , - 317 , - 192 , - 399 , - 938 , - 1809 , - 3012 , - 4547 , - 1102 , - 3301 , - 520 , - 3383 , - 1266 , - 4793 , - 3340 , - 2219 , - 1430 , - 973 , - 848 , - 1055 , - 1594 , - 2465 , - 3668 , - 5203 , - 1758 , - 3957 , - 1176 , - 4039 , - 1922 , - 137 , - 3996 , - 2875 , - 2086 , - 1629 , - 1504 , - 1711 , - 2250 , - 3121 , - 4324 , - 547 , - 2414 , - 4613 , - 1832 , - 4695 , - 2578 , - 793 , - 4652 , - 3531 , - 2742 , - 2285 , - 2160 , - 2367 , - 2906 , - 3777 , - 4980 , - 1203 , - 3070 , - 5269 , - 2488 , - 39 , - 3234 , - 1449 , - 5308 , - 4187 , - 3398 , - 2941 , - 2816 , - 3023 , - 3562 , - 4433 , - 324 , - 1859 , - 3726 , - 613 , - 3144 , - 695 , - 3890 , - 2105 , - 652 , - 4843 , - 4054 , - 3597 , - 3472 , - 3679 , - 4218 , - 5089 , - 980 , - 2515 , - 4382 , - 1269 , - 3800 , - 1351 , - 4546 , - 2761 , - 1308 , - 187 , - 4710 , - 4253 , - 4128 , - 4335 , - 4874 , - 433 , - 1636 , - 3171 , - 5038 , - 1925 , - 4456 , - 2007 , - 5202 , - 3417 , - 1964 , - 843 , - 54 , - 4909 , - 4784 , - 4991 , - 218 , - 1089 , - 2292 , - 3827 , - 382 , - 2581 , - 5112 , - 2663 , - 546 , - 4073 , - 2620 , - 1499 , - 710 , - 253 , - 128 , - 335 , - 874 , - 1745 , - 2948 , - 4483 , - 1038 , - 3237 , - 456 , - 3319 , - 1202 , - 4729 , - 3276 , - 2155 , - 1366 , - 909 , - 784 , - 991 , - 1530 , - 2401 , - 3604 , - 5139 , - 1694 , - 3893 , - 1112 , - 3975 , - 1858 , - 73 , - 3932 , - 2811 , - 2022 , - 1565 , - 1440 , - 1647 , - 2186 , - 3057 , - 4260 , - 483 , - 2350 , - 4549 , - 1768 , - 4631 , - 2514 , - 729 , - 4588 , - 3467 , - 2678 , - 2221 , - 2096 , - 2303 , - 2842 , - 3713 , - 4916 , - 1139 , - 3006 , - 5205 , - 2424 , - 5287 , - 3170 , - 1385 , - 5244 , - 4123 , - 3334 , - 2877 , - 2752 , - 2959 , - 3498 , - 4369 , - 260 , - 1795 , - 3662 , - 549 , - 3080 , - 631 , - 3826 , - 2041 , - 588 , - 4779 , - 3990 , - 3533 , - 3408 , - 3615 , - 4154 , - 5025 , - 916 , - 2451 , - 4318 , - 1205 , - 3736 , - 1287 , - 4482 , - 2697 , - 1244 , - 123 , - 4646 , - 4189 , - 4064 , - 4271 , - 4810 , - 369 , - 1572 , - 3107 , - 4974 , - 1861 , - 4392 , - 1943 , - 5138 , - 3353 , - 1900 , - 779 , - 5302 , - 4845 , - 4720 , - 4927 , - 154 , - 1025 , - 2228 , - 3763 , - 318 , - 2517 , - 5048 , - 2599 , - 482 , - 4009 , - 2556 , - 1435 , - 646 , - 189 , - 64 , - 271 , - 810 , - 1681 , - 2884 , - 4419 , - 974 , - 3173 , - 392 , - 3255 , - 1138 , - 4665 , - 3212 , - 2091 , - 1302 , - 845 , - 720 , - 927 , - 1466 , - 2337 , - 3540 , - 5075 , - 1630 , - 3829 , - 1048 , - 3911 , - 1794 , - 9 , - 3868 , - 2747 , - 1958 , - 1501 , - 1376 , - 1583 , - 2122 , - 2993 , - 4196 , - 419 , - 2286 , - 4485 , - 1704 , - 4567 , - 2450 , - 665 , - 4524 , - 3403 , - 2614 , - 2157 , - 2032 , - 2239 , - 2778 , - 3649 , - 4852 , - 1075 , - 2942 , - 5141 , - 2360 , - 5223 , - 3106 , - 1321 , - 5180 , - 4059 , - 3270 , - 2813 , - 2688 , - 2895 , - 3434 , - 4305 , - 196 , - 1731 , - 3598 , - 485 , - 3016 , - 567 , - 3762 , - 1977 , - 524 , - 4715 , - 3926 , - 3469 , - 3344 , - 3551 , - 4090 , - 4961 , - 852 , - 2387 , - 4254 , - 1141 , - 3672 , - 1223 , - 4418 , - 2633 , - 1180 , - 59 , - 4582 , - 4125 , - 4000 , - 4207 , - 4746 , - 305 , - 1508 , - 3043 , - 4910 , - 1797 , - 4328 , - 1879 , - 5074 , - 3289 , - 1836 , - 715 , - 5238 , - 4781 , - 4656 , - 4863 , - 90 , - 961 , - 2164 , - 3699 , - 254 , - 2453 , - 4984 , - 2535 , - 418 , - 3945 , - 2492 , - 1371 , - 582 , - 125 , - 0 , - 587 , - 1846 , - 3777 , - 1004 , - 4279 , - 2850 , - 2093 , - 2008 , - 2595 , - 3854 , - 409 , - 3012 , - 911 , - 4858 , - 4101 , - 4016 , - 4603 , - 486 , - 2417 , - 5020 , - 2919 , - 1490 , - 733 , - 648 , - 1235 , - 2494 , - 4425 , - 1652 , - 4927 , - 3498 , - 2741 , - 2656 , - 3243 , - 4502 , - 1057 , - 3660 , - 1559 , - 130 , - 4749 , - 4664 , - 5251 , - 1134 , - 3065 , - 292 , - 3567 , - 2138 , - 1381 , - 1296 , - 1883 , - 3142 , - 5073 , - 2300 , - 199 , - 4146 , - 3389 , - 3304 , - 3891 , - 5150 , - 1705 , - 4308 , - 2207 , - 778 , - 21 , - 5312 , - 523 , - 1782 , - 3713 , - 940 , - 4215 , - 2786 , - 2029 , - 1944 , - 2531 , - 3790 , - 345 , - 2948 , - 847 , - 4794 , - 4037 , - 3952 , - 4539 , - 422 , - 2353 , - 4956 , - 2855 , - 1426 , - 669 , - 584 , - 1171 , - 2430 , - 4361 , - 1588 , - 4863 , - 3434 , - 2677 , - 2592 , - 3179 , - 4438 , - 993 , - 3596 , - 1495 , - 66 , - 4685 , - 4600 , - 5187 , - 1070 , - 3001 , - 228 , - 3503 , - 2074 , - 1317 , - 1232 , - 1819 , - 3078 , - 5009 , - 2236 , - 135 , - 4082 , - 3325 , - 3240 , - 3827 , - 5086 , - 1641 , - 4244 , - 2143 , - 714 , - 5333 , - 5248 , - 459 , - 1718 , - 3649 , - 876 , - 4151 , - 2722 , - 1965 , - 1880 , - 2467 , - 3726 , - 281 , - 2884 , - 783 , - 4730 , - 3973 , - 3888 , - 4475 , - 358 , - 2289 , - 4892 , - 2791 , - 1362 , - 605 , - 520 , - 1107 , - 2366 , - 4297 , - 1524 , - 4799 , - 3370 , - 2613 , - 2528 , - 3115 , - 4374 , - 929 , - 3532 , - 1431 , - 2 , - 4621 , - 4536 , - 5123 , - 1006 , - 2937 , - 164 , - 3439 , - 2010 , - 1253 , - 1168 , - 1755 , - 3014 , - 4945 , - 2172 , - 71 , - 4018 , - 3261 , - 3176 , - 3763 , - 5022 , - 1577 , - 4180 , - 2079 , - 650 , - 5269 , - 5184 , - 395 , - 1654 , - 3585 , - 812 , - 4087 , - 2658 , - 1901 , - 1816 , - 2403 , - 3662 , - 217 , - 2820 , - 719 , - 4666 , - 3909 , - 3824 , - 4411 , - 294 , - 2225 , - 4828 , - 2727 , - 1298 , - 541 , - 456 , - 1043 , - 2302 , - 4233 , - 1460 , - 4735 , - 3306 , - 2549 , - 2464 , - 3051 , - 4310 , - 865 , - 3468 , - 1367 , - 5314 , - 4557 , - 4472 , - 5059 , - 942 , - 2873 , - 100 , - 3375 , - 1946 , - 1189 , - 1104 , - 1691 , - 2950 , - 4881 , - 2108 , - 7 , - 3954 , - 3197 , - 3112 , - 3699 , - 4958 , - 1513 , - 4116 , - 2015 , - 586 , - 5205 , - 5120 , - 331 , - 1590 , - 3521 , - 748 , - 4023 , - 2594 , - 1837 , - 1752 , - 2339 , - 3598 , - 153 , - 2756 , - 655 , - 4602 , - 3845 , - 3760 , - 4347 , - 230 , - 2161 , - 4764 , - 2663 , - 1234 , - 477 , - 392 , - 979 , - 2238 , - 4169 , - 1396 , - 4671 , - 3242 , - 2485 , - 2400 , - 2987 , - 4246 , - 801 , - 3404 , - 1303 , - 5250 , - 4493 , - 4408 , - 4995 , - 878 , - 2809 , - 36 , - 3311 , - 1882 , - 1125 , - 1040 , - 1627 , - 2886 , - 4817 , - 2044 , - 5319 , - 3890 , - 3133 , - 3048 , - 3635 , - 4894 , - 1449 , - 4052 , - 1951 , - 522 , - 5141 , - 5056 , - 267 , - 1526 , - 3457 , - 684 , - 3959 , - 2530 , - 1773 , - 1688 , - 2275 , - 3534 , - 89 , - 2692 , - 591 , - 4538 , - 3781 , - 3696 , - 4283 , - 166 , - 2097 , - 4700 , - 2599 , - 1170 , - 413 , - 328 , - 915 , - 2174 , - 4105 , - 1332 , - 4607 , - 3178 , - 2421 , - 2336 , - 2923 , - 4182 , - 737 , - 3340 , - 1239 , - 5186 , - 4429 , - 4344 , - 4931 , - 814 , - 2745 , - 5348 , - 3247 , - 1818 , - 1061 , - 976 , - 1563 , - 2822 , - 4753 , - 1980 , - 5255 , - 3826 , - 3069 , - 2984 , - 3571 , - 4830 , - 1385 , - 3988 , - 1887 , - 458 , - 5077 , - 4992 , - 203 , - 1462 , - 3393 , - 620 , - 3895 , - 2466 , - 1709 , - 1624 , - 2211 , - 3470 , - 25 , - 2628 , - 527 , - 4474 , - 3717 , - 3632 , - 4219 , - 102 , - 2033 , - 4636 , - 2535 , - 1106 , - 349 , - 264 , - 851 , - 2110 , - 4041 , - 1268 , - 4543 , - 3114 , - 2357 , - 2272 , - 2859 , - 4118 , - 673 , - 3276 , - 1175 , - 5122 , - 4365 , - 4280 , - 4867 , - 750 , - 2681 , - 5284 , - 3183 , - 1754 , - 997 , - 912 , - 1499 , - 2758 , - 4689 , - 1916 , - 5191 , - 3762 , - 3005 , - 2920 , - 3507 , - 4766 , - 1321 , - 3924 , - 1823 , - 394 , - 5013 , - 4928 , - 139 , - 1398 , - 3329 , - 556 , - 3831 , - 2402 , - 1645 , - 1560 , - 2147 , - 3406 , - 5337 , - 2564 , - 463 , - 4410 , - 3653 , - 3568 , - 4155 , - 38 , - 1969 , - 4572 , - 2471 , - 1042 , - 285 , - 200 , - 787 , - 2046 , - 3977 , - 1204 , - 4479 , - 3050 , - 2293 , - 2208 , - 2795 , - 4054 , - 609 , - 3212 , - 1111 , - 5058 , - 4301 , - 4216 , - 4803 , - 686 , - 2617 , - 5220 , - 3119 , - 1690 , - 933 , - 848 , - 1435 , - 2694 , - 4625 , - 1852 , - 5127 , - 3698 , - 2941 , - 2856 , - 3443 , - 4702 , - 1257 , - 3860 , - 1759 , - 330 , - 4949 , - 4864 , - 75 , - 1334 , - 3265 , - 492 , - 3767 , - 2338 , - 1581 , - 1496 , - 2083 , - 3342 , - 5273 , - 2500 , - 399 , - 4346 , - 3589 , - 3504 , - 4091 , - 5350 , - 1905 , - 4508 , - 2407 , - 978 , - 221 , - 136 , - 723 , - 1982 , - 3913 , - 1140 , - 4415 , - 2986 , - 2229 , - 2144 , - 2731 , - 3990 , - 545 , - 3148 , - 1047 , - 4994 , - 4237 , - 4152 , - 4739 , - 622 , - 2553 , - 5156 , - 3055 , - 1626 , - 869 , - 784 , - 1371 , - 2630 , - 4561 , - 1788 , - 5063 , - 3634 , - 2877 , - 2792 , - 3379 , - 4638 , - 1193 , - 3796 , - 1695 , - 266 , - 4885 , - 4800 , - 11 , - 1270 , - 3201 , - 428 , - 3703 , - 2274 , - 1517 , - 1432 , - 2019 , - 3278 , - 5209 , - 2436 , - 335 , - 4282 , - 3525 , - 3440 , - 4027 , - 5286 , - 1841 , - 4444 , - 2343 , - 914 , - 157 , - 72 , - 659 , - 1918 , - 3849 , - 1076 , - 4351 , - 2922 , - 2165 , - 2080 , - 2667 , - 3926 , - 481 , - 3084 , - 983 , - 4930 , - 4173 , - 4088 , - 4675 , - 558 , - 2489 , - 5092 , - 2991 , - 1562 , - 805 , - 720 , - 1307 , - 2566 , - 4497 , - 1724 , - 4999 , - 3570 , - 2813 , - 2728 , - 3315 , - 4574 , - 1129 , - 3732 , - 1631 , - 202 , - 4821 , - 4736 , - 5323 , - 1206 , - 3137 , - 364 , - 3639 , - 2210 , - 1453 , - 1368 , - 1955 , - 3214 , - 5145 , - 2372 , - 271 , - 4218 , - 3461 , - 3376 , - 3963 , - 5222 , - 1777 , - 4380 , - 2279 , - 850 , - 93 , - 8 , - 595 , - 1854 , - 3785 , - 1012 , - 4287 , - 2858 , - 2101 , - 2016 , - 2603 , - 3862 , - 417 , - 3020 , - 919 , - 4866 , - 4109 , - 4024 , - 4611 , - 494 , - 2425 , - 5028 , - 2927 , - 1498 , - 741 , - 656 , - 1243 , - 2502 , - 4433 , - 1660 , - 4935 , - 3506 , - 2749 , - 2664 , - 3251 , - 4510 , - 1065 , - 3668 , - 1567 , - 138 , - 4757 , - 4672 , - 5259 , - 1142 , - 3073 , - 300 , - 3575 , - 2146 , - 1389 , - 1304 , - 1891 , - 3150 , - 5081 , - 2308 , - 207 , - 4154 , - 3397 , - 3312 , - 3899 , - 5158 , - 1713 , - 4316 , - 2215 , - 786 , - 29 , - 5320 , - 531 , - 1790 , - 3721 , - 948 , - 4223 , - 2794 , - 2037 , - 1952 , - 2539 , - 3798 , - 353 , - 2956 , - 855 , - 4802 , - 4045 , - 3960 , - 4547 , - 430 , - 2361 , - 4964 , - 2863 , - 1434 , - 677 , - 592 , - 1179 , - 2438 , - 4369 , - 1596 , - 4871 , - 3442 , - 2685 , - 2600 , - 3187 , - 4446 , - 1001 , - 3604 , - 1503 , - 74 , - 4693 , - 4608 , - 5195 , - 1078 , - 3009 , - 236 , - 3511 , - 2082 , - 1325 , - 1240 , - 1827 , - 3086 , - 5017 , - 2244 , - 143 , - 4090 , - 3333 , - 3248 , - 3835 , - 5094 , - 1649 , - 4252 , - 2151 , - 722 , - 5341 , - 5256 , - 467 , - 1726 , - 3657 , - 884 , - 4159 , - 2730 , - 1973 , - 1888 , - 2475 , - 3734 , - 289 , - 2892 , - 791 , - 4738 , - 3981 , - 3896 , - 4483 , - 366 , - 2297 , - 4900 , - 2799 , - 1370 , - 613 , - 528 , - 1115 , - 2374 , - 4305 , - 1532 , - 4807 , - 3378 , - 2621 , - 2536 , - 3123 , - 4382 , - 937 , - 3540 , - 1439 , - 10 , - 4629 , - 4544 , - 5131 , - 1014 , - 2945 , - 172 , - 3447 , - 2018 , - 1261 , - 1176 , - 1763 , - 3022 , - 4953 , - 2180 , - 79 , - 4026 , - 3269 , - 3184 , - 3771 , - 5030 , - 1585 , - 4188 , - 2087 , - 658 , - 5277 , - 5192 , - 403 , - 1662 , - 3593 , - 820 , - 4095 , - 2666 , - 1909 , - 1824 , - 2411 , - 3670 , - 225 , - 2828 , - 727 , - 4674 , - 3917 , - 3832 , - 4419 , - 302 , - 2233 , - 4836 , - 2735 , - 1306 , - 549 , - 464 , - 1051 , - 2310 , - 4241 , - 1468 , - 4743 , - 3314 , - 2557 , - 2472 , - 3059 , - 4318 , - 873 , - 3476 , - 1375 , - 5322 , - 4565 , - 4480 , - 5067 , - 950 , - 2881 , - 108 , - 3383 , - 1954 , - 1197 , - 1112 , - 1699 , - 2958 , - 4889 , - 2116 , - 15 , - 3962 , - 3205 , - 3120 , - 3707 , - 4966 , - 1521 , - 4124 , - 2023 , - 594 , - 5213 , - 5128 , - 339 , - 1598 , - 3529 , - 756 , - 4031 , - 2602 , - 1845 , - 1760 , - 2347 , - 3606 , - 161 , - 2764 , - 663 , - 4610 , - 3853 , - 3768 , - 4355 , - 238 , - 2169 , - 4772 , - 2671 , - 1242 , - 485 , - 400 , - 987 , - 2246 , - 4177 , - 1404 , - 4679 , - 3250 , - 2493 , - 2408 , - 2995 , - 4254 , - 809 , - 3412 , - 1311 , - 5258 , - 4501 , - 4416 , - 5003 , - 886 , - 2817 , - 44 , - 3319 , - 1890 , - 1133 , - 1048 , - 1635 , - 2894 , - 4825 , - 2052 , - 5327 , - 3898 , - 3141 , - 3056 , - 3643 , - 4902 , - 1457 , - 4060 , - 1959 , - 530 , - 5149 , - 5064 , - 275 , - 1534 , - 3465 , - 692 , - 3967 , - 2538 , - 1781 , - 1696 , - 2283 , - 3542 , - 97 , - 2700 , - 599 , - 4546 , - 3789 , - 3704 , - 4291 , - 174 , - 2105 , - 4708 , - 2607 , - 1178 , - 421 , - 336 , - 923 , - 2182 , - 4113 , - 1340 , - 4615 , - 3186 , - 2429 , - 2344 , - 2931 , - 4190 , - 745 , - 3348 , - 1247 , - 5194 , - 4437 , - 4352 , - 4939 , - 822 , - 2753 , - 5356 , - 3255 , - 1826 , - 1069 , - 984 , - 1571 , - 2830 , - 4761 , - 1988 , - 5263 , - 3834 , - 3077 , - 2992 , - 3579 , - 4838 , - 1393 , - 3996 , - 1895 , - 466 , - 5085 , - 5000 , - 211 , - 1470 , - 3401 , - 628 , - 3903 , - 2474 , - 1717 , - 1632 , - 2219 , - 3478 , - 33 , - 2636 , - 535 , - 4482 , - 3725 , - 3640 , - 4227 , - 110 , - 2041 , - 4644 , - 2543 , - 1114 , - 357 , - 272 , - 859 , - 2118 , - 4049 , - 1276 , - 4551 , - 3122 , - 2365 , - 2280 , - 2867 , - 4126 , - 681 , - 3284 , - 1183 , - 5130 , - 4373 , - 4288 , - 4875 , - 758 , - 2689 , - 5292 , - 3191 , - 1762 , - 1005 , - 920 , - 1507 , - 2766 , - 4697 , - 1924 , - 5199 , - 3770 , - 3013 , - 2928 , - 3515 , - 4774 , - 1329 , - 3932 , - 1831 , - 402 , - 5021 , - 4936 , - 147 , - 1406 , - 3337 , - 564 , - 3839 , - 2410 , - 1653 , - 1568 , - 2155 , - 3414 , - 5345 , - 2572 , - 471 , - 4418 , - 3661 , - 3576 , - 4163 , - 46 , - 1977 , - 4580 , - 2479 , - 1050 , - 293 , - 208 , - 795 , - 2054 , - 3985 , - 1212 , - 4487 , - 3058 , - 2301 , - 2216 , - 2803 , - 4062 , - 617 , - 3220 , - 1119 , - 5066 , - 4309 , - 4224 , - 4811 , - 694 , - 2625 , - 5228 , - 3127 , - 1698 , - 941 , - 856 , - 1443 , - 2702 , - 4633 , - 1860 , - 5135 , - 3706 , - 2949 , - 2864 , - 3451 , - 4710 , - 1265 , - 3868 , - 1767 , - 338 , - 4957 , - 4872 , - 83 , - 1342 , - 3273 , - 500 , - 3775 , - 2346 , - 1589 , - 1504 , - 2091 , - 3350 , - 5281 , - 2508 , - 407 , - 4354 , - 3597 , - 3512 , - 4099 , - 5358 , - 1913 , - 4516 , - 2415 , - 986 , - 229 , - 144 , - 731 , - 1990 , - 3921 , - 1148 , - 4423 , - 2994 , - 2237 , - 2152 , - 2739 , - 3998 , - 553 , - 3156 , - 1055 , - 5002 , - 4245 , - 4160 , - 4747 , - 630 , - 2561 , - 5164 , - 3063 , - 1634 , - 877 , - 792 , - 1379 , - 2638 , - 4569 , - 1796 , - 5071 , - 3642 , - 2885 , - 2800 , - 3387 , - 4646 , - 1201 , - 3804 , - 1703 , - 274 , - 4893 , - 4808 , - 19 , - 1278 , - 3209 , - 436 , - 3711 , - 2282 , - 1525 , - 1440 , - 2027 , - 3286 , - 5217 , - 2444 , - 343 , - 4290 , - 3533 , - 3448 , - 4035 , - 5294 , - 1849 , - 4452 , - 2351 , - 922 , - 165 , - 80 , - 667 , - 1926 , - 3857 , - 1084 , - 4359 , - 2930 , - 2173 , - 2088 , - 2675 , - 3934 , - 489 , - 3092 , - 991 , - 4938 , - 4181 , - 4096 , - 4683 , - 566 , - 2497 , - 5100 , - 2999 , - 1570 , - 813 , - 728 , - 1315 , - 2574 , - 4505 , - 1732 , - 5007 , - 3578 , - 2821 , - 2736 , - 3323 , - 4582 , - 1137 , - 3740 , - 1639 , - 210 , - 4829 , - 4744 , - 5331 , - 1214 , - 3145 , - 372 , - 3647 , - 2218 , - 1461 , - 1376 , - 1963 , - 3222 , - 5153 , - 2380 , - 279 , - 4226 , - 3469 , - 3384 , - 3971 , - 5230 , - 1785 , - 4388 , - 2287 , - 858 , - 101 , - 16 , - 603 , - 1862 , - 3793 , - 1020 , - 4295 , - 2866 , - 2109 , - 2024 , - 2611 , - 3870 , - 425 , - 3028 , - 927 , - 4874 , - 4117 , - 4032 , - 4619 , - 502 , - 2433 , - 5036 , - 2935 , - 1506 , - 749 , - 664 , - 1251 , - 2510 , - 4441 , - 1668 , - 4943 , - 3514 , - 2757 , - 2672 , - 3259 , - 4518 , - 1073 , - 3676 , - 1575 , - 146 , - 4765 , - 4680 , - 5267 , - 1150 , - 3081 , - 308 , - 3583 , - 2154 , - 1397 , - 1312 , - 1899 , - 3158 , - 5089 , - 2316 , - 215 , - 4162 , - 3405 , - 3320 , - 3907 , - 5166 , - 1721 , - 4324 , - 2223 , - 794 , - 37 , - 5328 , - 539 , - 1798 , - 3729 , - 956 , - 4231 , - 2802 , - 2045 , - 1960 , - 2547 , - 3806 , - 361 , - 2964 , - 863 , - 4810 , - 4053 , - 3968 , - 4555 , - 438 , - 2369 , - 4972 , - 2871 , - 1442 , - 685 , - 600 , - 1187 , - 2446 , - 4377 , - 1604 , - 4879 , - 3450 , - 2693 , - 2608 , - 3195 , - 4454 , - 1009 , - 3612 , - 1511 , - 82 , - 4701 , - 4616 , - 5203 , - 1086 , - 3017 , - 244 , - 3519 , - 2090 , - 1333 , - 1248 , - 1835 , - 3094 , - 5025 , - 2252 , - 151 , - 4098 , - 3341 , - 3256 , - 3843 , - 5102 , - 1657 , - 4260 , - 2159 , - 730 , - 5349 , - 5264 , - 475 , - 1734 , - 3665 , - 892 , - 4167 , - 2738 , - 1981 , - 1896 , - 2483 , - 3742 , - 297 , - 2900 , - 799 , - 4746 , - 3989 , - 3904 , - 4491 , - 374 , - 2305 , - 4908 , - 2807 , - 1378 , - 621 , - 536 , - 1123 , - 2382 , - 4313 , - 1540 , - 4815 , - 3386 , - 2629 , - 2544 , - 3131 , - 4390 , - 945 , - 3548 , - 1447 , - 18 , - 4637 , - 4552 , - 5139 , - 1022 , - 2953 , - 180 , - 3455 , - 2026 , - 1269 , - 1184 , - 1771 , - 3030 , - 4961 , - 2188 , - 87 , - 4034 , - 3277 , - 3192 , - 3779 , - 5038 , - 1593 , - 4196 , - 2095 , - 666 , - 5285 , - 5200 , - 411 , - 1670 , - 3601 , - 828 , - 4103 , - 2674 , - 1917 , - 1832 , - 2419 , - 3678 , - 233 , - 2836 , - 735 , - 4682 , - 3925 , - 3840 , - 4427 , - 310 , - 2241 , - 4844 , - 2743 , - 1314 , - 557 , - 472 , - 1059 , - 2318 , - 4249 , - 1476 , - 4751 , - 3322 , - 2565 , - 2480 , - 3067 , - 4326 , - 881 , - 3484 , - 1383 , - 5330 , - 4573 , - 4488 , - 5075 , - 958 , - 2889 , - 116 , - 3391 , - 1962 , - 1205 , - 1120 , - 1707 , - 2966 , - 4897 , - 2124 , - 23 , - 3970 , - 3213 , - 3128 , - 3715 , - 4974 , - 1529 , - 4132 , - 2031 , - 602 , - 5221 , - 5136 , - 347 , - 1606 , - 3537 , - 764 , - 4039 , - 2610 , - 1853 , - 1768 , - 2355 , - 3614 , - 169 , - 2772 , - 671 , - 4618 , - 3861 , - 3776 , - 4363 , - 246 , - 2177 , - 4780 , - 2679 , - 1250 , - 493 , - 408 , - 995 , - 2254 , - 4185 , - 1412 , - 4687 , - 3258 , - 2501 , - 2416 , - 3003 , - 4262 , - 817 , - 3420 , - 1319 , - 5266 , - 4509 , - 4424 , - 5011 , - 894 , - 2825 , - 52 , - 3327 , - 1898 , - 1141 , - 1056 , - 1643 , - 2902 , - 4833 , - 2060 , - 5335 , - 3906 , - 3149 , - 3064 , - 3651 , - 4910 , - 1465 , - 4068 , - 1967 , - 538 , - 5157 , - 5072 , - 283 , - 1542 , - 3473 , - 700 , - 3975 , - 2546 , - 1789 , - 1704 , - 2291 , - 3550 , - 105 , - 2708 , - 607 , - 4554 , - 3797 , - 3712 , - 4299 , - 182 , - 2113 , - 4716 , - 2615 , - 1186 , - 429 , - 344 , - 931 , - 2190 , - 4121 , - 1348 , - 4623 , - 3194 , - 2437 , - 2352 , - 2939 , - 4198 , - 753 , - 3356 , - 1255 , - 5202 , - 4445 , - 4360 , - 4947 , - 830 , - 2761 , - 5364 , - 3263 , - 1834 , - 1077 , - 992 , - 1579 , - 2838 , - 4769 , - 1996 , - 5271 , - 3842 , - 3085 , - 3000 , - 3587 , - 4846 , - 1401 , - 4004 , - 1903 , - 474 , - 5093 , - 5008 , - 219 , - 1478 , - 3409 , - 636 , - 3911 , - 2482 , - 1725 , - 1640 , - 2227 , - 3486 , - 41 , - 2644 , - 543 , - 4490 , - 3733 , - 3648 , - 4235 , - 118 , - 2049 , - 4652 , - 2551 , - 1122 , - 365 , - 280 , - 867 , - 2126 , - 4057 , - 1284 , - 4559 , - 3130 , - 2373 , - 2288 , - 2875 , - 4134 , - 689 , - 3292 , - 1191 , - 5138 , - 4381 , - 4296 , - 4883 , - 766 , - 2697 , - 5300 , - 3199 , - 1770 , - 1013 , - 928 , - 1515 , - 2774 , - 4705 , - 1932 , - 5207 , - 3778 , - 3021 , - 2936 , - 3523 , - 4782 , - 1337 , - 3940 , - 1839 , - 410 , - 5029 , - 4944 , - 155 , - 1414 , - 3345 , - 572 , - 3847 , - 2418 , - 1661 , - 1576 , - 2163 , - 3422 , - 5353 , - 2580 , - 479 , - 4426 , - 3669 , - 3584 , - 4171 , - 54 , - 1985 , - 4588 , - 2487 , - 1058 , - 301 , - 216 , - 803 , - 2062 , - 3993 , - 1220 , - 4495 , - 3066 , - 2309 , - 2224 , - 2811 , - 4070 , - 625 , - 3228 , - 1127 , - 5074 , - 4317 , - 4232 , - 4819 , - 702 , - 2633 , - 5236 , - 3135 , - 1706 , - 949 , - 864 , - 1451 , - 2710 , - 4641 , - 1868 , - 5143 , - 3714 , - 2957 , - 2872 , - 3459 , - 4718 , - 1273 , - 3876 , - 1775 , - 346 , - 4965 , - 4880 , - 91 , - 1350 , - 3281 , - 508 , - 3783 , - 2354 , - 1597 , - 1512 , - 2099 , - 3358 , - 5289 , - 2516 , - 415 , - 4362 , - 3605 , - 3520 , - 4107 , - 5366 , - 1921 , - 4524 , - 2423 , - 994 , - 237 , - 152 , - 739 , - 1998 , - 3929 , - 1156 , - 4431 , - 3002 , - 2245 , - 2160 , - 2747 , - 4006 , - 561 , - 3164 , - 1063 , - 5010 , - 4253 , - 4168 , - 4755 , - 638 , - 2569 , - 5172 , - 3071 , - 1642 , - 885 , - 800 , - 1387 , - 2646 , - 4577 , - 1804 , - 5079 , - 3650 , - 2893 , - 2808 , - 3395 , - 4654 , - 1209 , - 3812 , - 1711 , - 282 , - 4901 , - 4816 , - 27 , - 1286 , - 3217 , - 444 , - 3719 , - 2290 , - 1533 , - 1448 , - 2035 , - 3294 , - 5225 , - 2452 , - 351 , - 4298 , - 3541 , - 3456 , - 4043 , - 5302 , - 1857 , - 4460 , - 2359 , - 930 , - 173 , - 88 , - 675 , - 1934 , - 3865 , - 1092 , - 4367 , - 2938 , - 2181 , - 2096 , - 2683 , - 3942 , - 497 , - 3100 , - 999 , - 4946 , - 4189 , - 4104 , - 4691 , - 574 , - 2505 , - 5108 , - 3007 , - 1578 , - 821 , - 736 , - 1323 , - 2582 , - 4513 , - 1740 , - 5015 , - 3586 , - 2829 , - 2744 , - 3331 , - 4590 , - 1145 , - 3748 , - 1647 , - 218 , - 4837 , - 4752 , - 5339 , - 1222 , - 3153 , - 380 , - 3655 , - 2226 , - 1469 , - 1384 , - 1971 , - 3230 , - 5161 , - 2388 , - 287 , - 4234 , - 3477 , - 3392 , - 3979 , - 5238 , - 1793 , - 4396 , - 2295 , - 866 , - 109 , - 24 , - 611 , - 1870 , - 3801 , - 1028 , - 4303 , - 2874 , - 2117 , - 2032 , - 2619 , - 3878 , - 433 , - 3036 , - 935 , - 4882 , - 4125 , - 4040 , - 4627 , - 510 , - 2441 , - 5044 , - 2943 , - 1514 , - 757 , - 672 , - 1259 , - 2518 , - 4449 , - 1676 , - 4951 , - 3522 , - 2765 , - 2680 , - 3267 , - 4526 , - 1081 , - 3684 , - 1583 , - 154 , - 4773 , - 4688 , - 5275 , - 1158 , - 3089 , - 316 , - 3591 , - 2162 , - 1405 , - 1320 , - 1907 , - 3166 , - 5097 , - 2324 , - 223 , - 4170 , - 3413 , - 3328 , - 3915 , - 5174 , - 1729 , - 4332 , - 2231 , - 802 , - 45 , - 5336 , - 547 , - 1806 , - 3737 , - 964 , - 4239 , - 2810 , - 2053 , - 1968 , - 2555 , - 3814 , - 369 , - 2972 , - 871 , - 4818 , - 4061 , - 3976 , - 4563 , - 446 , - 2377 , - 4980 , - 2879 , - 1450 , - 693 , - 608 , - 1195 , - 2454 , - 4385 , - 1612 , - 4887 , - 3458 , - 2701 , - 2616 , - 3203 , - 4462 , - 1017 , - 3620 , - 1519 , - 90 , - 4709 , - 4624 , - 5211 , - 1094 , - 3025 , - 252 , - 3527 , - 2098 , - 1341 , - 1256 , - 1843 , - 3102 , - 5033 , - 2260 , - 159 , - 4106 , - 3349 , - 3264 , - 3851 , - 5110 , - 1665 , - 4268 , - 2167 , - 738 , - 5357 , - 5272 , - 483 , - 1742 , - 3673 , - 900 , - 4175 , - 2746 , - 1989 , - 1904 , - 2491 , - 3750 , - 305 , - 2908 , - 807 , - 4754 , - 3997 , - 3912 , - 4499 , - 382 , - 2313 , - 4916 , - 2815 , - 1386 , - 629 , - 544 , - 1131 , - 2390 , - 4321 , - 1548 , - 4823 , - 3394 , - 2637 , - 2552 , - 3139 , - 4398 , - 953 , - 3556 , - 1455 , - 26 , - 4645 , - 4560 , - 5147 , - 1030 , - 2961 , - 188 , - 3463 , - 2034 , - 1277 , - 1192 , - 1779 , - 3038 , - 4969 , - 2196 , - 95 , - 4042 , - 3285 , - 3200 , - 3787 , - 5046 , - 1601 , - 4204 , - 2103 , - 674 , - 5293 , - 5208 , - 419 , - 1678 , - 3609 , - 836 , - 4111 , - 2682 , - 1925 , - 1840 , - 2427 , - 3686 , - 241 , - 2844 , - 743 , - 4690 , - 3933 , - 3848 , - 4435 , - 318 , - 2249 , - 4852 , - 2751 , - 1322 , - 565 , - 480 , - 1067 , - 2326 , - 4257 , - 1484 , - 4759 , - 3330 , - 2573 , - 2488 , - 3075 , - 4334 , - 889 , - 3492 , - 1391 , - 5338 , - 4581 , - 4496 , - 5083 , - 966 , - 2897 , - 124 , - 3399 , - 1970 , - 1213 , - 1128 , - 1715 , - 2974 , - 4905 , - 2132 , - 31 , - 3978 , - 3221 , - 3136 , - 3723 , - 4982 , - 1537 , - 4140 , - 2039 , - 610 , - 5229 , - 5144 , - 355 , - 1614 , - 3545 , - 772 , - 4047 , - 2618 , - 1861 , - 1776 , - 2363 , - 3622 , - 177 , - 2780 , - 679 , - 4626 , - 3869 , - 3784 , - 4371 , - 254 , - 2185 , - 4788 , - 2687 , - 1258 , - 501 , - 416 , - 1003 , - 2262 , - 4193 , - 1420 , - 4695 , - 3266 , - 2509 , - 2424 , - 3011 , - 4270 , - 825 , - 3428 , - 1327 , - 5274 , - 4517 , - 4432 , - 5019 , - 902 , - 2833 , - 60 , - 3335 , - 1906 , - 1149 , - 1064 , - 1651 , - 2910 , - 4841 , - 2068 , - 5343 , - 3914 , - 3157 , - 3072 , - 3659 , - 4918 , - 1473 , - 4076 , - 1975 , - 546 , - 5165 , - 5080 , - 291 , - 1550 , - 3481 , - 708 , - 3983 , - 2554 , - 1797 , - 1712 , - 2299 , - 3558 , - 113 , - 2716 , - 615 , - 4562 , - 3805 , - 3720 , - 4307 , - 190 , - 2121 , - 4724 , - 2623 , - 1194 , - 437 , - 352 , - 939 , - 2198 , - 4129 , - 1356 , - 4631 , - 3202 , - 2445 , - 2360 , - 2947 , - 4206 , - 761 , - 3364 , - 1263 , - 5210 , - 4453 , - 4368 , - 4955 , - 838 , - 2769 , - 5372 , - 3271 , - 1842 , - 1085 , - 1000 , - 1587 , - 2846 , - 4777 , - 2004 , - 5279 , - 3850 , - 3093 , - 3008 , - 3595 , - 4854 , - 1409 , - 4012 , - 1911 , - 482 , - 5101 , - 5016 , - 227 , - 1486 , - 3417 , - 644 , - 3919 , - 2490 , - 1733 , - 1648 , - 2235 , - 3494 , - 49 , - 2652 , - 551 , - 4498 , - 3741 , - 3656 , - 4243 , - 126 , - 2057 , - 4660 , - 2559 , - 1130 , - 373 , - 288 , - 875 , - 2134 , - 4065 , - 1292 , - 4567 , - 3138 , - 2381 , - 2296 , - 2883 , - 4142 , - 697 , - 3300 , - 1199 , - 5146 , - 4389 , - 4304 , - 4891 , - 774 , - 2705 , - 5308 , - 3207 , - 1778 , - 1021 , - 936 , - 1523 , - 2782 , - 4713 , - 1940 , - 5215 , - 3786 , - 3029 , - 2944 , - 3531 , - 4790 , - 1345 , - 3948 , - 1847 , - 418 , - 5037 , - 4952 , - 163 , - 1422 , - 3353 , - 580 , - 3855 , - 2426 , - 1669 , - 1584 , - 2171 , - 3430 , - 5361 , - 2588 , - 487 , - 4434 , - 3677 , - 3592 , - 4179 , - 62 , - 1993 , - 4596 , - 2495 , - 1066 , - 309 , - 224 , - 811 , - 2070 , - 4001 , - 1228 , - 4503 , - 3074 , - 2317 , - 2232 , - 2819 , - 4078 , - 633 , - 3236 , - 1135 , - 5082 , - 4325 , - 4240 , - 4827 , - 710 , - 2641 , - 5244 , - 3143 , - 1714 , - 957 , - 872 , - 1459 , - 2718 , - 4649 , - 1876 , - 5151 , - 3722 , - 2965 , - 2880 , - 3467 , - 4726 , - 1281 , - 3884 , - 1783 , - 354 , - 4973 , - 4888 , - 99 , - 1358 , - 3289 , - 516 , - 3791 , - 2362 , - 1605 , - 1520 , - 2107 , - 3366 , - 5297 , - 2524 , - 423 , - 4370 , - 3613 , - 3528 , - 4115 , - 5374 , - 1929 , - 4532 , - 2431 , - 1002 , - 245 , - 160 , - 747 , - 2006 , - 3937 , - 1164 , - 4439 , - 3010 , - 2253 , - 2168 , - 2755 , - 4014 , - 569 , - 3172 , - 1071 , - 5018 , - 4261 , - 4176 , - 4763 , - 646 , - 2577 , - 5180 , - 3079 , - 1650 , - 893 , - 808 , - 1395 , - 2654 , - 4585 , - 1812 , - 5087 , - 3658 , - 2901 , - 2816 , - 3403 , - 4662 , - 1217 , - 3820 , - 1719 , - 290 , - 4909 , - 4824 , - 35 , - 1294 , - 3225 , - 452 , - 3727 , - 2298 , - 1541 , - 1456 , - 2043 , - 3302 , - 5233 , - 2460 , - 359 , - 4306 , - 3549 , - 3464 , - 4051 , - 5310 , - 1865 , - 4468 , - 2367 , - 938 , - 181 , - 96 , - 683 , - 1942 , - 3873 , - 1100 , - 4375 , - 2946 , - 2189 , - 2104 , - 2691 , - 3950 , - 505 , - 3108 , - 1007 , - 4954 , - 4197 , - 4112 , - 4699 , - 582 , - 2513 , - 5116 , - 3015 , - 1586 , - 829 , - 744 , - 1331 , - 2590 , - 4521 , - 1748 , - 5023 , - 3594 , - 2837 , - 2752 , - 3339 , - 4598 , - 1153 , - 3756 , - 1655 , - 226 , - 4845 , - 4760 , - 5347 , - 1230 , - 3161 , - 388 , - 3663 , - 2234 , - 1477 , - 1392 , - 1979 , - 3238 , - 5169 , - 2396 , - 295 , - 4242 , - 3485 , - 3400 , - 3987 , - 5246 , - 1801 , - 4404 , - 2303 , - 874 , - 117 , - 32 , - 619 , - 1878 , - 3809 , - 1036 , - 4311 , - 2882 , - 2125 , - 2040 , - 2627 , - 3886 , - 441 , - 3044 , - 943 , - 4890 , - 4133 , - 4048 , - 4635 , - 518 , - 2449 , - 5052 , - 2951 , - 1522 , - 765 , - 680 , - 1267 , - 2526 , - 4457 , - 1684 , - 4959 , - 3530 , - 2773 , - 2688 , - 3275 , - 4534 , - 1089 , - 3692 , - 1591 , - 162 , - 4781 , - 4696 , - 5283 , - 1166 , - 3097 , - 324 , - 3599 , - 2170 , - 1413 , - 1328 , - 1915 , - 3174 , - 5105 , - 2332 , - 231 , - 4178 , - 3421 , - 3336 , - 3923 , - 5182 , - 1737 , - 4340 , - 2239 , - 810 , - 53 , - 5344 , - 555 , - 1814 , - 3745 , - 972 , - 4247 , - 2818 , - 2061 , - 1976 , - 2563 , - 3822 , - 377 , - 2980 , - 879 , - 4826 , - 4069 , - 3984 , - 4571 , - 454 , - 2385 , - 4988 , - 2887 , - 1458 , - 701 , - 616 , - 1203 , - 2462 , - 4393 , - 1620 , - 4895 , - 3466 , - 2709 , - 2624 , - 3211 , - 4470 , - 1025 , - 3628 , - 1527 , - 98 , - 4717 , - 4632 , - 5219 , - 1102 , - 3033 , - 260 , - 3535 , - 2106 , - 1349 , - 1264 , - 1851 , - 3110 , - 5041 , - 2268 , - 167 , - 4114 , - 3357 , - 3272 , - 3859 , - 5118 , - 1673 , - 4276 , - 2175 , - 746 , - 5365 , - 5280 , - 491 , - 1750 , - 3681 , - 908 , - 4183 , - 2754 , - 1997 , - 1912 , - 2499 , - 3758 , - 313 , - 2916 , - 815 , - 4762 , - 4005 , - 3920 , - 4507 , - 390 , - 2321 , - 4924 , - 2823 , - 1394 , - 637 , - 552 , - 1139 , - 2398 , - 4329 , - 1556 , - 4831 , - 3402 , - 2645 , - 2560 , - 3147 , - 4406 , - 961 , - 3564 , - 1463 , - 34 , - 4653 , - 4568 , - 5155 , - 1038 , - 2969 , - 196 , - 3471 , - 2042 , - 1285 , - 1200 , - 1787 , - 3046 , - 4977 , - 2204 , - 103 , - 4050 , - 3293 , - 3208 , - 3795 , - 5054 , - 1609 , - 4212 , - 2111 , - 682 , - 5301 , - 5216 , - 427 , - 1686 , - 3617 , - 844 , - 4119 , - 2690 , - 1933 , - 1848 , - 2435 , - 3694 , - 249 , - 2852 , - 751 , - 4698 , - 3941 , - 3856 , - 4443 , - 326 , - 2257 , - 4860 , - 2759 , - 1330 , - 573 , - 488 , - 1075 , - 2334 , - 4265 , - 1492 , - 4767 , - 3338 , - 2581 , - 2496 , - 3083 , - 4342 , - 897 , - 3500 , - 1399 , - 5346 , - 4589 , - 4504 , - 5091 , - 974 , - 2905 , - 132 , - 3407 , - 1978 , - 1221 , - 1136 , - 1723 , - 2982 , - 4913 , - 2140 , - 39 , - 3986 , - 3229 , - 3144 , - 3731 , - 4990 , - 1545 , - 4148 , - 2047 , - 618 , - 5237 , - 5152 , - 363 , - 1622 , - 3553 , - 780 , - 4055 , - 2626 , - 1869 , - 1784 , - 2371 , - 3630 , - 185 , - 2788 , - 687 , - 4634 , - 3877 , - 3792 , - 4379 , - 262 , - 2193 , - 4796 , - 2695 , - 1266 , - 509 , - 424 , - 1011 , - 2270 , - 4201 , - 1428 , - 4703 , - 3274 , - 2517 , - 2432 , - 3019 , - 4278 , - 833 , - 3436 , - 1335 , - 5282 , - 4525 , - 4440 , - 5027 , - 910 , - 2841 , - 68 , - 3343 , - 1914 , - 1157 , - 1072 , - 1659 , - 2918 , - 4849 , - 2076 , - 5351 , - 3922 , - 3165 , - 3080 , - 3667 , - 4926 , - 1481 , - 4084 , - 1983 , - 554 , - 5173 , - 5088 , - 299 , - 1558 , - 3489 , - 716 , - 3991 , - 2562 , - 1805 , - 1720 , - 2307 , - 3566 , - 121 , - 2724 , - 623 , - 4570 , - 3813 , - 3728 , - 4315 , - 198 , - 2129 , - 4732 , - 2631 , - 1202 , - 445 , - 360 , - 947 , - 2206 , - 4137 , - 1364 , - 4639 , - 3210 , - 2453 , - 2368 , - 2955 , - 4214 , - 769 , - 3372 , - 1271 , - 5218 , - 4461 , - 4376 , - 4963 , - 846 , - 2777 , - 4 , - 3279 , - 1850 , - 1093 , - 1008 , - 1595 , - 2854 , - 4785 , - 2012 , - 5287 , - 3858 , - 3101 , - 3016 , - 3603 , - 4862 , - 1417 , - 4020 , - 1919 , - 490 , - 5109 , - 5024 , - 235 , - 1494 , - 3425 , - 652 , - 3927 , - 2498 , - 1741 , - 1656 , - 2243 , - 3502 , - 57 , - 2660 , - 559 , - 4506 , - 3749 , - 3664 , - 4251 , - 134 , - 2065 , - 4668 , - 2567 , - 1138 , - 381 , - 296 , - 883 , - 2142 , - 4073 , - 1300 , - 4575 , - 3146 , - 2389 , - 2304 , - 2891 , - 4150 , - 705 , - 3308 , - 1207 , - 5154 , - 4397 , - 4312 , - 4899 , - 782 , - 2713 , - 5316 , - 3215 , - 1786 , - 1029 , - 944 , - 1531 , - 2790 , - 4721 , - 1948 , - 5223 , - 3794 , - 3037 , - 2952 , - 3539 , - 4798 , - 1353 , - 3956 , - 1855 , - 426 , - 5045 , - 4960 , - 171 , - 1430 , - 3361 , - 588 , - 3863 , - 2434 , - 1677 , - 1592 , - 2179 , - 3438 , - 5369 , - 2596 , - 495 , - 4442 , - 3685 , - 3600 , - 4187 , - 70 , - 2001 , - 4604 , - 2503 , - 1074 , - 317 , - 232 , - 819 , - 2078 , - 4009 , - 1236 , - 4511 , - 3082 , - 2325 , - 2240 , - 2827 , - 4086 , - 641 , - 3244 , - 1143 , - 5090 , - 4333 , - 4248 , - 4835 , - 718 , - 2649 , - 5252 , - 3151 , - 1722 , - 965 , - 880 , - 1467 , - 2726 , - 4657 , - 1884 , - 5159 , - 3730 , - 2973 , - 2888 , - 3475 , - 4734 , - 1289 , - 3892 , - 1791 , - 362 , - 4981 , - 4896 , - 107 , - 1366 , - 3297 , - 524 , - 3799 , - 2370 , - 1613 , - 1528 , - 2115 , - 3374 , - 5305 , - 2532 , - 431 , - 4378 , - 3621 , - 3536 , - 4123 , - 6 , - 1937 , - 4540 , - 2439 , - 1010 , - 253 , - 168 , - 755 , - 2014 , - 3945 , - 1172 , - 4447 , - 3018 , - 2261 , - 2176 , - 2763 , - 4022 , - 577 , - 3180 , - 1079 , - 5026 , - 4269 , - 4184 , - 4771 , - 654 , - 2585 , - 5188 , - 3087 , - 1658 , - 901 , - 816 , - 1403 , - 2662 , - 4593 , - 1820 , - 5095 , - 3666 , - 2909 , - 2824 , - 3411 , - 4670 , - 1225 , - 3828 , - 1727 , - 298 , - 4917 , - 4832 , - 43 , - 1302 , - 3233 , - 460 , - 3735 , - 2306 , - 1549 , - 1464 , - 2051 , - 3310 , - 5241 , - 2468 , - 367 , - 4314 , - 3557 , - 3472 , - 4059 , - 5318 , - 1873 , - 4476 , - 2375 , - 946 , - 189 , - 104 , - 691 , - 1950 , - 3881 , - 1108 , - 4383 , - 2954 , - 2197 , - 2112 , - 2699 , - 3958 , - 513 , - 3116 , - 1015 , - 4962 , - 4205 , - 4120 , - 4707 , - 590 , - 2521 , - 5124 , - 3023 , - 1594 , - 837 , - 752 , - 1339 , - 2598 , - 4529 , - 1756 , - 5031 , - 3602 , - 2845 , - 2760 , - 3347 , - 4606 , - 1161 , - 3764 , - 1663 , - 234 , - 4853 , - 4768 , - 5355 , - 1238 , - 3169 , - 396 , - 3671 , - 2242 , - 1485 , - 1400 , - 1987 , - 3246 , - 5177 , - 2404 , - 303 , - 4250 , - 3493 , - 3408 , - 3995 , - 5254 , - 1809 , - 4412 , - 2311 , - 882 , - 125 , - 40 , - 627 , - 1886 , - 3817 , - 1044 , - 4319 , - 2890 , - 2133 , - 2048 , - 2635 , - 3894 , - 449 , - 3052 , - 951 , - 4898 , - 4141 , - 4056 , - 4643 , - 526 , - 2457 , - 5060 , - 2959 , - 1530 , - 773 , - 688 , - 1275 , - 2534 , - 4465 , - 1692 , - 4967 , - 3538 , - 2781 , - 2696 , - 3283 , - 4542 , - 1097 , - 3700 , - 1599 , - 170 , - 4789 , - 4704 , - 5291 , - 1174 , - 3105 , - 332 , - 3607 , - 2178 , - 1421 , - 1336 , - 1923 , - 3182 , - 5113 , - 2340 , - 239 , - 4186 , - 3429 , - 3344 , - 3931 , - 5190 , - 1745 , - 4348 , - 2247 , - 818 , - 61 , - 5352 , - 563 , - 1822 , - 3753 , - 980 , - 4255 , - 2826 , - 2069 , - 1984 , - 2571 , - 3830 , - 385 , - 2988 , - 887 , - 4834 , - 4077 , - 3992 , - 4579 , - 462 , - 2393 , - 4996 , - 2895 , - 1466 , - 709 , - 624 , - 1211 , - 2470 , - 4401 , - 1628 , - 4903 , - 3474 , - 2717 , - 2632 , - 3219 , - 4478 , - 1033 , - 3636 , - 1535 , - 106 , - 4725 , - 4640 , - 5227 , - 1110 , - 3041 , - 268 , - 3543 , - 2114 , - 1357 , - 1272 , - 1859 , - 3118 , - 5049 , - 2276 , - 175 , - 4122 , - 3365 , - 3280 , - 3867 , - 5126 , - 1681 , - 4284 , - 2183 , - 754 , - 5373 , - 5288 , - 499 , - 1758 , - 3689 , - 916 , - 4191 , - 2762 , - 2005 , - 1920 , - 2507 , - 3766 , - 321 , - 2924 , - 823 , - 4770 , - 4013 , - 3928 , - 4515 , - 398 , - 2329 , - 4932 , - 2831 , - 1402 , - 645 , - 560 , - 1147 , - 2406 , - 4337 , - 1564 , - 4839 , - 3410 , - 2653 , - 2568 , - 3155 , - 4414 , - 969 , - 3572 , - 1471 , - 42 , - 4661 , - 4576 , - 5163 , - 1046 , - 2977 , - 204 , - 3479 , - 2050 , - 1293 , - 1208 , - 1795 , - 3054 , - 4985 , - 2212 , - 111 , - 4058 , - 3301 , - 3216 , - 3803 , - 5062 , - 1617 , - 4220 , - 2119 , - 690 , - 5309 , - 5224 , - 435 , - 1694 , - 3625 , - 852 , - 4127 , - 2698 , - 1941 , - 1856 , - 2443 , - 3702 , - 257 , - 2860 , - 759 , - 4706 , - 3949 , - 3864 , - 4451 , - 334 , - 2265 , - 4868 , - 2767 , - 1338 , - 581 , - 496 , - 1083 , - 2342 , - 4273 , - 1500 , - 4775 , - 3346 , - 2589 , - 2504 , - 3091 , - 4350 , - 905 , - 3508 , - 1407 , - 5354 , - 4597 , - 4512 , - 5099 , - 982 , - 2913 , - 140 , - 3415 , - 1986 , - 1229 , - 1144 , - 1731 , - 2990 , - 4921 , - 2148 , - 47 , - 3994 , - 3237 , - 3152 , - 3739 , - 4998 , - 1553 , - 4156 , - 2055 , - 626 , - 5245 , - 5160 , - 371 , - 1630 , - 3561 , - 788 , - 4063 , - 2634 , - 1877 , - 1792 , - 2379 , - 3638 , - 193 , - 2796 , - 695 , - 4642 , - 3885 , - 3800 , - 4387 , - 270 , - 2201 , - 4804 , - 2703 , - 1274 , - 517 , - 432 , - 1019 , - 2278 , - 4209 , - 1436 , - 4711 , - 3282 , - 2525 , - 2440 , - 3027 , - 4286 , - 841 , - 3444 , - 1343 , - 5290 , - 4533 , - 4448 , - 5035 , - 918 , - 2849 , - 76 , - 3351 , - 1922 , - 1165 , - 1080 , - 1667 , - 2926 , - 4857 , - 2084 , - 5359 , - 3930 , - 3173 , - 3088 , - 3675 , - 4934 , - 1489 , - 4092 , - 1991 , - 562 , - 5181 , - 5096 , - 307 , - 1566 , - 3497 , - 724 , - 3999 , - 2570 , - 1813 , - 1728 , - 2315 , - 3574 , - 129 , - 2732 , - 631 , - 4578 , - 3821 , - 3736 , - 4323 , - 206 , - 2137 , - 4740 , - 2639 , - 1210 , - 453 , - 368 , - 955 , - 2214 , - 4145 , - 1372 , - 4647 , - 3218 , - 2461 , - 2376 , - 2963 , - 4222 , - 777 , - 3380 , - 1279 , - 5226 , - 4469 , - 4384 , - 4971 , - 854 , - 2785 , - 12 , - 3287 , - 1858 , - 1101 , - 1016 , - 1603 , - 2862 , - 4793 , - 2020 , - 5295 , - 3866 , - 3109 , - 3024 , - 3611 , - 4870 , - 1425 , - 4028 , - 1927 , - 498 , - 5117 , - 5032 , - 243 , - 1502 , - 3433 , - 660 , - 3935 , - 2506 , - 1749 , - 1664 , - 2251 , - 3510 , - 65 , - 2668 , - 567 , - 4514 , - 3757 , - 3672 , - 4259 , - 142 , - 2073 , - 4676 , - 2575 , - 1146 , - 389 , - 304 , - 891 , - 2150 , - 4081 , - 1308 , - 4583 , - 3154 , - 2397 , - 2312 , - 2899 , - 4158 , - 713 , - 3316 , - 1215 , - 5162 , - 4405 , - 4320 , - 4907 , - 790 , - 2721 , - 5324 , - 3223 , - 1794 , - 1037 , - 952 , - 1539 , - 2798 , - 4729 , - 1956 , - 5231 , - 3802 , - 3045 , - 2960 , - 3547 , - 4806 , - 1361 , - 3964 , - 1863 , - 434 , - 5053 , - 4968 , - 179 , - 1438 , - 3369 , - 596 , - 3871 , - 2442 , - 1685 , - 1600 , - 2187 , - 3446 , - 1 , - 2604 , - 503 , - 4450 , - 3693 , - 3608 , - 4195 , - 78 , - 2009 , - 4612 , - 2511 , - 1082 , - 325 , - 240 , - 827 , - 2086 , - 4017 , - 1244 , - 4519 , - 3090 , - 2333 , - 2248 , - 2835 , - 4094 , - 649 , - 3252 , - 1151 , - 5098 , - 4341 , - 4256 , - 4843 , - 726 , - 2657 , - 5260 , - 3159 , - 1730 , - 973 , - 888 , - 1475 , - 2734 , - 4665 , - 1892 , - 5167 , - 3738 , - 2981 , - 2896 , - 3483 , - 4742 , - 1297 , - 3900 , - 1799 , - 370 , - 4989 , - 4904 , - 115 , - 1374 , - 3305 , - 532 , - 3807 , - 2378 , - 1621 , - 1536 , - 2123 , - 3382 , - 5313 , - 2540 , - 439 , - 4386 , - 3629 , - 3544 , - 4131 , - 14 , - 1945 , - 4548 , - 2447 , - 1018 , - 261 , - 176 , - 763 , - 2022 , - 3953 , - 1180 , - 4455 , - 3026 , - 2269 , - 2184 , - 2771 , - 4030 , - 585 , - 3188 , - 1087 , - 5034 , - 4277 , - 4192 , - 4779 , - 662 , - 2593 , - 5196 , - 3095 , - 1666 , - 909 , - 824 , - 1411 , - 2670 , - 4601 , - 1828 , - 5103 , - 3674 , - 2917 , - 2832 , - 3419 , - 4678 , - 1233 , - 3836 , - 1735 , - 306 , - 4925 , - 4840 , - 51 , - 1310 , - 3241 , - 468 , - 3743 , - 2314 , - 1557 , - 1472 , - 2059 , - 3318 , - 5249 , - 2476 , - 375 , - 4322 , - 3565 , - 3480 , - 4067 , - 5326 , - 1881 , - 4484 , - 2383 , - 954 , - 197 , - 112 , - 699 , - 1958 , - 3889 , - 1116 , - 4391 , - 2962 , - 2205 , - 2120 , - 2707 , - 3966 , - 521 , - 3124 , - 1023 , - 4970 , - 4213 , - 4128 , - 4715 , - 598 , - 2529 , - 5132 , - 3031 , - 1602 , - 845 , - 760 , - 1347 , - 2606 , - 4537 , - 1764 , - 5039 , - 3610 , - 2853 , - 2768 , - 3355 , - 4614 , - 1169 , - 3772 , - 1671 , - 242 , - 4861 , - 4776 , - 5363 , - 1246 , - 3177 , - 404 , - 3679 , - 2250 , - 1493 , - 1408 , - 1995 , - 3254 , - 5185 , - 2412 , - 311 , - 4258 , - 3501 , - 3416 , - 4003 , - 5262 , - 1817 , - 4420 , - 2319 , - 890 , - 133 , - 48 , - 635 , - 1894 , - 3825 , - 1052 , - 4327 , - 2898 , - 2141 , - 2056 , - 2643 , - 3902 , - 457 , - 3060 , - 959 , - 4906 , - 4149 , - 4064 , - 4651 , - 534 , - 2465 , - 5068 , - 2967 , - 1538 , - 781 , - 696 , - 1283 , - 2542 , - 4473 , - 1700 , - 4975 , - 3546 , - 2789 , - 2704 , - 3291 , - 4550 , - 1105 , - 3708 , - 1607 , - 178 , - 4797 , - 4712 , - 5299 , - 1182 , - 3113 , - 340 , - 3615 , - 2186 , - 1429 , - 1344 , - 1931 , - 3190 , - 5121 , - 2348 , - 247 , - 4194 , - 3437 , - 3352 , - 3939 , - 5198 , - 1753 , - 4356 , - 2255 , - 826 , - 69 , - 5360 , - 571 , - 1830 , - 3761 , - 988 , - 4263 , - 2834 , - 2077 , - 1992 , - 2579 , - 3838 , - 393 , - 2996 , - 895 , - 4842 , - 4085 , - 4000 , - 4587 , - 470 , - 2401 , - 5004 , - 2903 , - 1474 , - 717 , - 632 , - 1219 , - 2478 , - 4409 , - 1636 , - 4911 , - 3482 , - 2725 , - 2640 , - 3227 , - 4486 , - 1041 , - 3644 , - 1543 , - 114 , - 4733 , - 4648 , - 5235 , - 1118 , - 3049 , - 276 , - 3551 , - 2122 , - 1365 , - 1280 , - 1867 , - 3126 , - 5057 , - 2284 , - 183 , - 4130 , - 3373 , - 3288 , - 3875 , - 5134 , - 1689 , - 4292 , - 2191 , - 762 , - 5 , - 5296 , - 507 , - 1766 , - 3697 , - 924 , - 4199 , - 2770 , - 2013 , - 1928 , - 2515 , - 3774 , - 329 , - 2932 , - 831 , - 4778 , - 4021 , - 3936 , - 4523 , - 406 , - 2337 , - 4940 , - 2839 , - 1410 , - 653 , - 568 , - 1155 , - 2414 , - 4345 , - 1572 , - 4847 , - 3418 , - 2661 , - 2576 , - 3163 , - 4422 , - 977 , - 3580 , - 1479 , - 50 , - 4669 , - 4584 , - 5171 , - 1054 , - 2985 , - 212 , - 3487 , - 2058 , - 1301 , - 1216 , - 1803 , - 3062 , - 4993 , - 2220 , - 119 , - 4066 , - 3309 , - 3224 , - 3811 , - 5070 , - 1625 , - 4228 , - 2127 , - 698 , - 5317 , - 5232 , - 443 , - 1702 , - 3633 , - 860 , - 4135 , - 2706 , - 1949 , - 1864 , - 2451 , - 3710 , - 265 , - 2868 , - 767 , - 4714 , - 3957 , - 3872 , - 4459 , - 342 , - 2273 , - 4876 , - 2775 , - 1346 , - 589 , - 504 , - 1091 , - 2350 , - 4281 , - 1508 , - 4783 , - 3354 , - 2597 , - 2512 , - 3099 , - 4358 , - 913 , - 3516 , - 1415 , - 5362 , - 4605 , - 4520 , - 5107 , - 990 , - 2921 , - 148 , - 3423 , - 1994 , - 1237 , - 1152 , - 1739 , - 2998 , - 4929 , - 2156 , - 55 , - 4002 , - 3245 , - 3160 , - 3747 , - 5006 , - 1561 , - 4164 , - 2063 , - 634 , - 5253 , - 5168 , - 379 , - 1638 , - 3569 , - 796 , - 4071 , - 2642 , - 1885 , - 1800 , - 2387 , - 3646 , - 201 , - 2804 , - 703 , - 4650 , - 3893 , - 3808 , - 4395 , - 278 , - 2209 , - 4812 , - 2711 , - 1282 , - 525 , - 440 , - 1027 , - 2286 , - 4217 , - 1444 , - 4719 , - 3290 , - 2533 , - 2448 , - 3035 , - 4294 , - 849 , - 3452 , - 1351 , - 5298 , - 4541 , - 4456 , - 5043 , - 926 , - 2857 , - 84 , - 3359 , - 1930 , - 1173 , - 1088 , - 1675 , - 2934 , - 4865 , - 2092 , - 5367 , - 3938 , - 3181 , - 3096 , - 3683 , - 4942 , - 1497 , - 4100 , - 1999 , - 570 , - 5189 , - 5104 , - 315 , - 1574 , - 3505 , - 732 , - 4007 , - 2578 , - 1821 , - 1736 , - 2323 , - 3582 , - 137 , - 2740 , - 639 , - 4586 , - 3829 , - 3744 , - 4331 , - 214 , - 2145 , - 4748 , - 2647 , - 1218 , - 461 , - 376 , - 963 , - 2222 , - 4153 , - 1380 , - 4655 , - 3226 , - 2469 , - 2384 , - 2971 , - 4230 , - 785 , - 3388 , - 1287 , - 5234 , - 4477 , - 4392 , - 4979 , - 862 , - 2793 , - 20 , - 3295 , - 1866 , - 1109 , - 1024 , - 1611 , - 2870 , - 4801 , - 2028 , - 5303 , - 3874 , - 3117 , - 3032 , - 3619 , - 4878 , - 1433 , - 4036 , - 1935 , - 506 , - 5125 , - 5040 , - 251 , - 1510 , - 3441 , - 668 , - 3943 , - 2514 , - 1757 , - 1672 , - 2259 , - 3518 , - 73 , - 2676 , - 575 , - 4522 , - 3765 , - 3680 , - 4267 , - 150 , - 2081 , - 4684 , - 2583 , - 1154 , - 397 , - 312 , - 899 , - 2158 , - 4089 , - 1316 , - 4591 , - 3162 , - 2405 , - 2320 , - 2907 , - 4166 , - 721 , - 3324 , - 1223 , - 5170 , - 4413 , - 4328 , - 4915 , - 798 , - 2729 , - 5332 , - 3231 , - 1802 , - 1045 , - 960 , - 1547 , - 2806 , - 4737 , - 1964 , - 5239 , - 3810 , - 3053 , - 2968 , - 3555 , - 4814 , - 1369 , - 3972 , - 1871 , - 442 , - 5061 , - 4976 , - 187 , - 1446 , - 3377 , - 604 , - 3879 , - 2450 , - 1693 , - 1608 , - 2195 , - 3454 , - 9 , - 2612 , - 511 , - 4458 , - 3701 , - 3616 , - 4203 , - 86 , - 2017 , - 4620 , - 2519 , - 1090 , - 333 , - 248 , - 835 , - 2094 , - 4025 , - 1252 , - 4527 , - 3098 , - 2341 , - 2256 , - 2843 , - 4102 , - 657 , - 3260 , - 1159 , - 5106 , - 4349 , - 4264 , - 4851 , - 734 , - 2665 , - 5268 , - 3167 , - 1738 , - 981 , - 896 , - 1483 , - 2742 , - 4673 , - 1900 , - 5175 , - 3746 , - 2989 , - 2904 , - 3491 , - 4750 , - 1305 , - 3908 , - 1807 , - 378 , - 4997 , - 4912 , - 123 , - 1382 , - 3313 , - 540 , - 3815 , - 2386 , - 1629 , - 1544 , - 2131 , - 3390 , - 5321 , - 2548 , - 447 , - 4394 , - 3637 , - 3552 , - 4139 , - 22 , - 1953 , - 4556 , - 2455 , - 1026 , - 269 , - 184 , - 771 , - 2030 , - 3961 , - 1188 , - 4463 , - 3034 , - 2277 , - 2192 , - 2779 , - 4038 , - 593 , - 3196 , - 1095 , - 5042 , - 4285 , - 4200 , - 4787 , - 670 , - 2601 , - 5204 , - 3103 , - 1674 , - 917 , - 832 , - 1419 , - 2678 , - 4609 , - 1836 , - 5111 , - 3682 , - 2925 , - 2840 , - 3427 , - 4686 , - 1241 , - 3844 , - 1743 , - 314 , - 4933 , - 4848 , - 59 , - 1318 , - 3249 , - 476 , - 3751 , - 2322 , - 1565 , - 1480 , - 2067 , - 3326 , - 5257 , - 2484 , - 383 , - 4330 , - 3573 , - 3488 , - 4075 , - 5334 , - 1889 , - 4492 , - 2391 , - 962 , - 205 , - 120 , - 707 , - 1966 , - 3897 , - 1124 , - 4399 , - 2970 , - 2213 , - 2128 , - 2715 , - 3974 , - 529 , - 3132 , - 1031 , - 4978 , - 4221 , - 4136 , - 4723 , - 606 , - 2537 , - 5140 , - 3039 , - 1610 , - 853 , - 768 , - 1355 , - 2614 , - 4545 , - 1772 , - 5047 , - 3618 , - 2861 , - 2776 , - 3363 , - 4622 , - 1177 , - 3780 , - 1679 , - 250 , - 4869 , - 4784 , - 5371 , - 1254 , - 3185 , - 412 , - 3687 , - 2258 , - 1501 , - 1416 , - 2003 , - 3262 , - 5193 , - 2420 , - 319 , - 4266 , - 3509 , - 3424 , - 4011 , - 5270 , - 1825 , - 4428 , - 2327 , - 898 , - 141 , - 56 , - 643 , - 1902 , - 3833 , - 1060 , - 4335 , - 2906 , - 2149 , - 2064 , - 2651 , - 3910 , - 465 , - 3068 , - 967 , - 4914 , - 4157 , - 4072 , - 4659 , - 542 , - 2473 , - 5076 , - 2975 , - 1546 , - 789 , - 704 , - 1291 , - 2550 , - 4481 , - 1708 , - 4983 , - 3554 , - 2797 , - 2712 , - 3299 , - 4558 , - 1113 , - 3716 , - 1615 , - 186 , - 4805 , - 4720 , - 5307 , - 1190 , - 3121 , - 348 , - 3623 , - 2194 , - 1437 , - 1352 , - 1939 , - 3198 , - 5129 , - 2356 , - 255 , - 4202 , - 3445 , - 3360 , - 3947 , - 5206 , - 1761 , - 4364 , - 2263 , - 834 , - 77 , - 5368 , - 579 , - 1838 , - 3769 , - 996 , - 4271 , - 2842 , - 2085 , - 2000 , - 2587 , - 3846 , - 401 , - 3004 , - 903 , - 4850 , - 4093 , - 4008 , - 4595 , - 478 , - 2409 , - 5012 , - 2911 , - 1482 , - 725 , - 640 , - 1227 , - 2486 , - 4417 , - 1644 , - 4919 , - 3490 , - 2733 , - 2648 , - 3235 , - 4494 , - 1049 , - 3652 , - 1551 , - 122 , - 4741 , - 4656 , - 5243 , - 1126 , - 3057 , - 284 , - 3559 , - 2130 , - 1373 , - 1288 , - 1875 , - 3134 , - 5065 , - 2292 , - 191 , - 4138 , - 3381 , - 3296 , - 3883 , - 5142 , - 1697 , - 4300 , - 2199 , - 770 , - 13 , - 5304 , - 515 , - 1774 , - 3705 , - 932 , - 4207 , - 2778 , - 2021 , - 1936 , - 2523 , - 3782 , - 337 , - 2940 , - 839 , - 4786 , - 4029 , - 3944 , - 4531 , - 414 , - 2345 , - 4948 , - 2847 , - 1418 , - 661 , - 576 , - 1163 , - 2422 , - 4353 , - 1580 , - 4855 , - 3426 , - 2669 , - 2584 , - 3171 , - 4430 , - 985 , - 3588 , - 1487 , - 58 , - 4677 , - 4592 , - 5179 , - 1062 , - 2993 , - 220 , - 3495 , - 2066 , - 1309 , - 1224 , - 1811 , - 3070 , - 5001 , - 2228 , - 127 , - 4074 , - 3317 , - 3232 , - 3819 , - 5078 , - 1633 , - 4236 , - 2135 , - 706 , - 5325 , - 5240 , - 451 , - 1710 , - 3641 , - 868 , - 4143 , - 2714 , - 1957 , - 1872 , - 2459 , - 3718 , - 273 , - 2876 , - 775 , - 4722 , - 3965 , - 3880 , - 4467 , - 350 , - 2281 , - 4884 , - 2783 , - 1354 , - 597 , - 512 , - 1099 , - 2358 , - 4289 , - 1516 , - 4791 , - 3362 , - 2605 , - 2520 , - 3107 , - 4366 , - 921 , - 3524 , - 1423 , - 5370 , - 4613 , - 4528 , - 5115 , - 998 , - 2929 , - 156 , - 3431 , - 2002 , - 1245 , - 1160 , - 1747 , - 3006 , - 4937 , - 2164 , - 63 , - 4010 , - 3253 , - 3168 , - 3755 , - 5014 , - 1569 , - 4172 , - 2071 , - 642 , - 5261 , - 5176 , - 387 , - 1646 , - 3577 , - 804 , - 4079 , - 2650 , - 1893 , - 1808 , - 2395 , - 3654 , - 209 , - 2812 , - 711 , - 4658 , - 3901 , - 3816 , - 4403 , - 286 , - 2217 , - 4820 , - 2719 , - 1290 , - 533 , - 448 , - 1035 , - 2294 , - 4225 , - 1452 , - 4727 , - 3298 , - 2541 , - 2456 , - 3043 , - 4302 , - 857 , - 3460 , - 1359 , - 5306 , - 4549 , - 4464 , - 5051 , - 934 , - 2865 , - 92 , - 3367 , - 1938 , - 1181 , - 1096 , - 1683 , - 2942 , - 4873 , - 2100 , - 5375 , - 3946 , - 3189 , - 3104 , - 3691 , - 4950 , - 1505 , - 4108 , - 2007 , - 578 , - 5197 , - 5112 , - 323 , - 1582 , - 3513 , - 740 , - 4015 , - 2586 , - 1829 , - 1744 , - 2331 , - 3590 , - 145 , - 2748 , - 647 , - 4594 , - 3837 , - 3752 , - 4339 , - 222 , - 2153 , - 4756 , - 2655 , - 1226 , - 469 , - 384 , - 971 , - 2230 , - 4161 , - 1388 , - 4663 , - 3234 , - 2477 , - 2392 , - 2979 , - 4238 , - 793 , - 3396 , - 1295 , - 5242 , - 4485 , - 4400 , - 4987 , - 870 , - 2801 , - 28 , - 3303 , - 1874 , - 1117 , - 1032 , - 1619 , - 2878 , - 4809 , - 2036 , - 5311 , - 3882 , - 3125 , - 3040 , - 3627 , - 4886 , - 1441 , - 4044 , - 1943 , - 514 , - 5133 , - 5048 , - 259 , - 1518 , - 3449 , - 676 , - 3951 , - 2522 , - 1765 , - 1680 , - 2267 , - 3526 , - 81 , - 2684 , - 583 , - 4530 , - 3773 , - 3688 , - 4275 , - 158 , - 2089 , - 4692 , - 2591 , - 1162 , - 405 , - 320 , - 907 , - 2166 , - 4097 , - 1324 , - 4599 , - 3170 , - 2413 , - 2328 , - 2915 , - 4174 , - 729 , - 3332 , - 1231 , - 5178 , - 4421 , - 4336 , - 4923 , - 806 , - 2737 , - 5340 , - 3239 , - 1810 , - 1053 , - 968 , - 1555 , - 2814 , - 4745 , - 1972 , - 5247 , - 3818 , - 3061 , - 2976 , - 3563 , - 4822 , - 1377 , - 3980 , - 1879 , - 450 , - 5069 , - 4984 , - 195 , - 1454 , - 3385 , - 612 , - 3887 , - 2458 , - 1701 , - 1616 , - 2203 , - 3462 , - 17 , - 2620 , - 519 , - 4466 , - 3709 , - 3624 , - 4211 , - 94 , - 2025 , - 4628 , - 2527 , - 1098 , - 341 , - 256 , - 843 , - 2102 , - 4033 , - 1260 , - 4535 , - 3106 , - 2349 , - 2264 , - 2851 , - 4110 , - 665 , - 3268 , - 1167 , - 5114 , - 4357 , - 4272 , - 4859 , - 742 , - 2673 , - 5276 , - 3175 , - 1746 , - 989 , - 904 , - 1491 , - 2750 , - 4681 , - 1908 , - 5183 , - 3754 , - 2997 , - 2912 , - 3499 , - 4758 , - 1313 , - 3916 , - 1815 , - 386 , - 5005 , - 4920 , - 131 , - 1390 , - 3321 , - 548 , - 3823 , - 2394 , - 1637 , - 1552 , - 2139 , - 3398 , - 5329 , - 2556 , - 455 , - 4402 , - 3645 , - 3560 , - 4147 , - 30 , - 1961 , - 4564 , - 2463 , - 1034 , - 277 , - 192 , - 779 , - 2038 , - 3969 , - 1196 , - 4471 , - 3042 , - 2285 , - 2200 , - 2787 , - 4046 , - 601 , - 3204 , - 1103 , - 5050 , - 4293 , - 4208 , - 4795 , - 678 , - 2609 , - 5212 , - 3111 , - 1682 , - 925 , - 840 , - 1427 , - 2686 , - 4617 , - 1844 , - 5119 , - 3690 , - 2933 , - 2848 , - 3435 , - 4694 , - 1249 , - 3852 , - 1751 , - 322 , - 4941 , - 4856 , - 67 , - 1326 , - 3257 , - 484 , - 3759 , - 2330 , - 1573 , - 1488 , - 2075 , - 3334 , - 5265 , - 2492 , - 391 , - 4338 , - 3581 , - 3496 , - 4083 , - 5342 , - 1897 , - 4500 , - 2399 , - 970 , - 213 , - 128 , - 715 , - 1974 , - 3905 , - 1132 , - 4407 , - 2978 , - 2221 , - 2136 , - 2723 , - 3982 , - 537 , - 3140 , - 1039 , - 4986 , - 4229 , - 4144 , - 4731 , - 614 , - 2545 , - 5148 , - 3047 , - 1618 , - 861 , - 776 , - 1363 , - 2622 , - 4553 , - 1780 , - 5055 , - 3626 , - 2869 , - 2784 , - 3371 , - 4630 , - 1185 , - 3788 , - 1687 , - 258 , - 4877 , - 4792 , - 3 , - 1262 , - 3193 , - 420 , - 3695 , - 2266 , - 1509 , - 1424 , - 2011 , - 3270 , - 5201 , - 2428 , - 327 , - 4274 , - 3517 , - 3432 , - 4019 , - 5278 , - 1833 , - 4436 , - 2335 , - 906 , - 149 , - 64 , - 651 , - 1910 , - 3841 , - 1068 , - 4343 , - 2914 , - 2157 , - 2072 , - 2659 , - 3918 , - 473 , - 3076 , - 975 , - 4922 , - 4165 , - 4080 , - 4667 , - 550 , - 2481 , - 5084 , - 2983 , - 1554 , - 797 , - 712 , - 1299 , - 2558 , - 4489 , - 1716 , - 4991 , - 3562 , - 2805 , - 2720 , - 3307 , - 4566 , - 1121 , - 3724 , - 1623 , - 194 , - 4813 , - 4728 , - 5315 , - 1198 , - 3129 , - 356 , - 3631 , - 2202 , - 1445 , - 1360 , - 1947 , - 3206 , - 5137 , - 2364 , - 263 , - 4210 , - 3453 , - 3368 , - 3955 , - 5214 , - 1769 , - 4372 , - 2271 , - 842 , - 85 , - 0 , - 213 , - 766 , - 1659 , - 2892 , - 4465 , - 938 , - 3191 , - 344 , - 3277 , - 1110 , - 4723 , - 3236 , - 2089 , - 1282 , - 815 , - 688 , - 901 , - 1454 , - 2347 , - 3580 , - 5153 , - 1626 , - 3879 , - 1032 , - 3965 , - 1798 , - 5411 , - 3924 , - 2777 , - 1970 , - 1503 , - 1376 , - 1589 , - 2142 , - 3035 , - 4268 , - 401 , - 2314 , - 4567 , - 1720 , - 4653 , - 2486 , - 659 , - 4612 , - 3465 , - 2658 , - 2191 , - 2064 , - 2277 , - 2830 , - 3723 , - 4956 , - 1089 , - 3002 , - 5255 , - 2408 , - 5341 , - 3174 , - 1347 , - 5300 , - 4153 , - 3346 , - 2879 , - 2752 , - 2965 , - 3518 , - 4411 , - 204 , - 1777 , - 3690 , - 503 , - 3096 , - 589 , - 3862 , - 2035 , - 548 , - 4841 , - 4034 , - 3567 , - 3440 , - 3653 , - 4206 , - 5099 , - 892 , - 2465 , - 4378 , - 1191 , - 3784 , - 1277 , - 4550 , - 2723 , - 1236 , - 89 , - 4722 , - 4255 , - 4128 , - 4341 , - 4894 , - 347 , - 1580 , - 3153 , - 5066 , - 1879 , - 4472 , - 1965 , - 5238 , - 3411 , - 1924 , - 777 , - 5410 , - 4943 , - 4816 , - 5029 , - 142 , - 1035 , - 2268 , - 3841 , - 314 , - 2567 , - 5160 , - 2653 , - 486 , - 4099 , - 2612 , - 1465 , - 658 , - 191 , - 64 , - 277 , - 830 , - 1723 , - 2956 , - 4529 , - 1002 , - 3255 , - 408 , - 3341 , - 1174 , - 4787 , - 3300 , - 2153 , - 1346 , - 879 , - 752 , - 965 , - 1518 , - 2411 , - 3644 , - 5217 , - 1690 , - 3943 , - 1096 , - 4029 , - 1862 , - 35 , - 3988 , - 2841 , - 2034 , - 1567 , - 1440 , - 1653 , - 2206 , - 3099 , - 4332 , - 465 , - 2378 , - 4631 , - 1784 , - 4717 , - 2550 , - 723 , - 4676 , - 3529 , - 2722 , - 2255 , - 2128 , - 2341 , - 2894 , - 3787 , - 5020 , - 1153 , - 3066 , - 5319 , - 2472 , - 5405 , - 3238 , - 1411 , - 5364 , - 4217 , - 3410 , - 2943 , - 2816 , - 3029 , - 3582 , - 4475 , - 268 , - 1841 , - 3754 , - 567 , - 3160 , - 653 , - 3926 , - 2099 , - 612 , - 4905 , - 4098 , - 3631 , - 3504 , - 3717 , - 4270 , - 5163 , - 956 , - 2529 , - 4442 , - 1255 , - 3848 , - 1341 , - 4614 , - 2787 , - 1300 , - 153 , - 4786 , - 4319 , - 4192 , - 4405 , - 4958 , - 411 , - 1644 , - 3217 , - 5130 , - 1943 , - 4536 , - 2029 , - 5302 , - 3475 , - 1988 , - 841 , - 34 , - 5007 , - 4880 , - 5093 , - 206 , - 1099 , - 2332 , - 3905 , - 378 , - 2631 , - 5224 , - 2717 , - 550 , - 4163 , - 2676 , - 1529 , - 722 , - 255 , - 128 , - 341 , - 894 , - 1787 , - 3020 , - 4593 , - 1066 , - 3319 , - 472 , - 3405 , - 1238 , - 4851 , - 3364 , - 2217 , - 1410 , - 943 , - 816 , - 1029 , - 1582 , - 2475 , - 3708 , - 5281 , - 1754 , - 4007 , - 1160 , - 4093 , - 1926 , - 99 , - 4052 , - 2905 , - 2098 , - 1631 , - 1504 , - 1717 , - 2270 , - 3163 , - 4396 , - 529 , - 2442 , - 4695 , - 1848 , - 4781 , - 2614 , - 787 , - 4740 , - 3593 , - 2786 , - 2319 , - 2192 , - 2405 , - 2958 , - 3851 , - 5084 , - 1217 , - 3130 , - 5383 , - 2536 , - 29 , - 3302 , - 1475 , - 5428 , - 4281 , - 3474 , - 3007 , - 2880 , - 3093 , - 3646 , - 4539 , - 332 , - 1905 , - 3818 , - 631 , - 3224 , - 717 , - 3990 , - 2163 , - 676 , - 4969 , - 4162 , - 3695 , - 3568 , - 3781 , - 4334 , - 5227 , - 1020 , - 2593 , - 4506 , - 1319 , - 3912 , - 1405 , - 4678 , - 2851 , - 1364 , - 217 , - 4850 , - 4383 , - 4256 , - 4469 , - 5022 , - 475 , - 1708 , - 3281 , - 5194 , - 2007 , - 4600 , - 2093 , - 5366 , - 3539 , - 2052 , - 905 , - 98 , - 5071 , - 4944 , - 5157 , - 270 , - 1163 , - 2396 , - 3969 , - 442 , - 2695 , - 5288 , - 2781 , - 614 , - 4227 , - 2740 , - 1593 , - 786 , - 319 , - 192 , - 405 , - 958 , - 1851 , - 3084 , - 4657 , - 1130 , - 3383 , - 536 , - 3469 , - 1302 , - 4915 , - 3428 , - 2281 , - 1474 , - 1007 , - 880 , - 1093 , - 1646 , - 2539 , - 3772 , - 5345 , - 1818 , - 4071 , - 1224 , - 4157 , - 1990 , - 163 , - 4116 , - 2969 , - 2162 , - 1695 , - 1568 , - 1781 , - 2334 , - 3227 , - 4460 , - 593 , - 2506 , - 4759 , - 1912 , - 4845 , - 2678 , - 851 , - 4804 , - 3657 , - 2850 , - 2383 , - 2256 , - 2469 , - 3022 , - 3915 , - 5148 , - 1281 , - 3194 , - 7 , - 2600 , - 93 , - 3366 , - 1539 , - 52 , - 4345 , - 3538 , - 3071 , - 2944 , - 3157 , - 3710 , - 4603 , - 396 , - 1969 , - 3882 , - 695 , - 3288 , - 781 , - 4054 , - 2227 , - 740 , - 5033 , - 4226 , - 3759 , - 3632 , - 3845 , - 4398 , - 5291 , - 1084 , - 2657 , - 4570 , - 1383 , - 3976 , - 1469 , - 4742 , - 2915 , - 1428 , - 281 , - 4914 , - 4447 , - 4320 , - 4533 , - 5086 , - 539 , - 1772 , - 3345 , - 5258 , - 2071 , - 4664 , - 2157 , - 5430 , - 3603 , - 2116 , - 969 , - 162 , - 5135 , - 5008 , - 5221 , - 334 , - 1227 , - 2460 , - 4033 , - 506 , - 2759 , - 5352 , - 2845 , - 678 , - 4291 , - 2804 , - 1657 , - 850 , - 383 , - 256 , - 469 , - 1022 , - 1915 , - 3148 , - 4721 , - 1194 , - 3447 , - 600 , - 3533 , - 1366 , - 4979 , - 3492 , - 2345 , - 1538 , - 1071 , - 944 , - 1157 , - 1710 , - 2603 , - 3836 , - 5409 , - 1882 , - 4135 , - 1288 , - 4221 , - 2054 , - 227 , - 4180 , - 3033 , - 2226 , - 1759 , - 1632 , - 1845 , - 2398 , - 3291 , - 4524 , - 657 , - 2570 , - 4823 , - 1976 , - 4909 , - 2742 , - 915 , - 4868 , - 3721 , - 2914 , - 2447 , - 2320 , - 2533 , - 3086 , - 3979 , - 5212 , - 1345 , - 3258 , - 71 , - 2664 , - 157 , - 3430 , - 1603 , - 116 , - 4409 , - 3602 , - 3135 , - 3008 , - 3221 , - 3774 , - 4667 , - 460 , - 2033 , - 3946 , - 759 , - 3352 , - 845 , - 4118 , - 2291 , - 804 , - 5097 , - 4290 , - 3823 , - 3696 , - 3909 , - 4462 , - 5355 , - 1148 , - 2721 , - 4634 , - 1447 , - 4040 , - 1533 , - 4806 , - 2979 , - 1492 , - 345 , - 4978 , - 4511 , - 4384 , - 4597 , - 5150 , - 603 , - 1836 , - 3409 , - 5322 , - 2135 , - 4728 , - 2221 , - 54 , - 3667 , - 2180 , - 1033 , - 226 , - 5199 , - 5072 , - 5285 , - 398 , - 1291 , - 2524 , - 4097 , - 570 , - 2823 , - 5416 , - 2909 , - 742 , - 4355 , - 2868 , - 1721 , - 914 , - 447 , - 320 , - 533 , - 1086 , - 1979 , - 3212 , - 4785 , - 1258 , - 3511 , - 664 , - 3597 , - 1430 , - 5043 , - 3556 , - 2409 , - 1602 , - 1135 , - 1008 , - 1221 , - 1774 , - 2667 , - 3900 , - 33 , - 1946 , - 4199 , - 1352 , - 4285 , - 2118 , - 291 , - 4244 , - 3097 , - 2290 , - 1823 , - 1696 , - 1909 , - 2462 , - 3355 , - 4588 , - 721 , - 2634 , - 4887 , - 2040 , - 4973 , - 2806 , - 979 , - 4932 , - 3785 , - 2978 , - 2511 , - 2384 , - 2597 , - 3150 , - 4043 , - 5276 , - 1409 , - 3322 , - 135 , - 2728 , - 221 , - 3494 , - 1667 , - 180 , - 4473 , - 3666 , - 3199 , - 3072 , - 3285 , - 3838 , - 4731 , - 524 , - 2097 , - 4010 , - 823 , - 3416 , - 909 , - 4182 , - 2355 , - 868 , - 5161 , - 4354 , - 3887 , - 3760 , - 3973 , - 4526 , - 5419 , - 1212 , - 2785 , - 4698 , - 1511 , - 4104 , - 1597 , - 4870 , - 3043 , - 1556 , - 409 , - 5042 , - 4575 , - 4448 , - 4661 , - 5214 , - 667 , - 1900 , - 3473 , - 5386 , - 2199 , - 4792 , - 2285 , - 118 , - 3731 , - 2244 , - 1097 , - 290 , - 5263 , - 5136 , - 5349 , - 462 , - 1355 , - 2588 , - 4161 , - 634 , - 2887 , - 40 , - 2973 , - 806 , - 4419 , - 2932 , - 1785 , - 978 , - 511 , - 384 , - 597 , - 1150 , - 2043 , - 3276 , - 4849 , - 1322 , - 3575 , - 728 , - 3661 , - 1494 , - 5107 , - 3620 , - 2473 , - 1666 , - 1199 , - 1072 , - 1285 , - 1838 , - 2731 , - 3964 , - 97 , - 2010 , - 4263 , - 1416 , - 4349 , - 2182 , - 355 , - 4308 , - 3161 , - 2354 , - 1887 , - 1760 , - 1973 , - 2526 , - 3419 , - 4652 , - 785 , - 2698 , - 4951 , - 2104 , - 5037 , - 2870 , - 1043 , - 4996 , - 3849 , - 3042 , - 2575 , - 2448 , - 2661 , - 3214 , - 4107 , - 5340 , - 1473 , - 3386 , - 199 , - 2792 , - 285 , - 3558 , - 1731 , - 244 , - 4537 , - 3730 , - 3263 , - 3136 , - 3349 , - 3902 , - 4795 , - 588 , - 2161 , - 4074 , - 887 , - 3480 , - 973 , - 4246 , - 2419 , - 932 , - 5225 , - 4418 , - 3951 , - 3824 , - 4037 , - 4590 , - 43 , - 1276 , - 2849 , - 4762 , - 1575 , - 4168 , - 1661 , - 4934 , - 3107 , - 1620 , - 473 , - 5106 , - 4639 , - 4512 , - 4725 , - 5278 , - 731 , - 1964 , - 3537 , - 10 , - 2263 , - 4856 , - 2349 , - 182 , - 3795 , - 2308 , - 1161 , - 354 , - 5327 , - 5200 , - 5413 , - 526 , - 1419 , - 2652 , - 4225 , - 698 , - 2951 , - 104 , - 3037 , - 870 , - 4483 , - 2996 , - 1849 , - 1042 , - 575 , - 448 , - 661 , - 1214 , - 2107 , - 3340 , - 4913 , - 1386 , - 3639 , - 792 , - 3725 , - 1558 , - 5171 , - 3684 , - 2537 , - 1730 , - 1263 , - 1136 , - 1349 , - 1902 , - 2795 , - 4028 , - 161 , - 2074 , - 4327 , - 1480 , - 4413 , - 2246 , - 419 , - 4372 , - 3225 , - 2418 , - 1951 , - 1824 , - 2037 , - 2590 , - 3483 , - 4716 , - 849 , - 2762 , - 5015 , - 2168 , - 5101 , - 2934 , - 1107 , - 5060 , - 3913 , - 3106 , - 2639 , - 2512 , - 2725 , - 3278 , - 4171 , - 5404 , - 1537 , - 3450 , - 263 , - 2856 , - 349 , - 3622 , - 1795 , - 308 , - 4601 , - 3794 , - 3327 , - 3200 , - 3413 , - 3966 , - 4859 , - 652 , - 2225 , - 4138 , - 951 , - 3544 , - 1037 , - 4310 , - 2483 , - 996 , - 5289 , - 4482 , - 4015 , - 3888 , - 4101 , - 4654 , - 107 , - 1340 , - 2913 , - 4826 , - 1639 , - 4232 , - 1725 , - 4998 , - 3171 , - 1684 , - 537 , - 5170 , - 4703 , - 4576 , - 4789 , - 5342 , - 795 , - 2028 , - 3601 , - 74 , - 2327 , - 4920 , - 2413 , - 246 , - 3859 , - 2372 , - 1225 , - 418 , - 5391 , - 5264 , - 37 , - 590 , - 1483 , - 2716 , - 4289 , - 762 , - 3015 , - 168 , - 3101 , - 934 , - 4547 , - 3060 , - 1913 , - 1106 , - 639 , - 512 , - 725 , - 1278 , - 2171 , - 3404 , - 4977 , - 1450 , - 3703 , - 856 , - 3789 , - 1622 , - 5235 , - 3748 , - 2601 , - 1794 , - 1327 , - 1200 , - 1413 , - 1966 , - 2859 , - 4092 , - 225 , - 2138 , - 4391 , - 1544 , - 4477 , - 2310 , - 483 , - 4436 , - 3289 , - 2482 , - 2015 , - 1888 , - 2101 , - 2654 , - 3547 , - 4780 , - 913 , - 2826 , - 5079 , - 2232 , - 5165 , - 2998 , - 1171 , - 5124 , - 3977 , - 3170 , - 2703 , - 2576 , - 2789 , - 3342 , - 4235 , - 28 , - 1601 , - 3514 , - 327 , - 2920 , - 413 , - 3686 , - 1859 , - 372 , - 4665 , - 3858 , - 3391 , - 3264 , - 3477 , - 4030 , - 4923 , - 716 , - 2289 , - 4202 , - 1015 , - 3608 , - 1101 , - 4374 , - 2547 , - 1060 , - 5353 , - 4546 , - 4079 , - 3952 , - 4165 , - 4718 , - 171 , - 1404 , - 2977 , - 4890 , - 1703 , - 4296 , - 1789 , - 5062 , - 3235 , - 1748 , - 601 , - 5234 , - 4767 , - 4640 , - 4853 , - 5406 , - 859 , - 2092 , - 3665 , - 138 , - 2391 , - 4984 , - 2477 , - 310 , - 3923 , - 2436 , - 1289 , - 482 , - 15 , - 5328 , - 101 , - 654 , - 1547 , - 2780 , - 4353 , - 826 , - 3079 , - 232 , - 3165 , - 998 , - 4611 , - 3124 , - 1977 , - 1170 , - 703 , - 576 , - 789 , - 1342 , - 2235 , - 3468 , - 5041 , - 1514 , - 3767 , - 920 , - 3853 , - 1686 , - 5299 , - 3812 , - 2665 , - 1858 , - 1391 , - 1264 , - 1477 , - 2030 , - 2923 , - 4156 , - 289 , - 2202 , - 4455 , - 1608 , - 4541 , - 2374 , - 547 , - 4500 , - 3353 , - 2546 , - 2079 , - 1952 , - 2165 , - 2718 , - 3611 , - 4844 , - 977 , - 2890 , - 5143 , - 2296 , - 5229 , - 3062 , - 1235 , - 5188 , - 4041 , - 3234 , - 2767 , - 2640 , - 2853 , - 3406 , - 4299 , - 92 , - 1665 , - 3578 , - 391 , - 2984 , - 477 , - 3750 , - 1923 , - 436 , - 4729 , - 3922 , - 3455 , - 3328 , - 3541 , - 4094 , - 4987 , - 780 , - 2353 , - 4266 , - 1079 , - 3672 , - 1165 , - 4438 , - 2611 , - 1124 , - 5417 , - 4610 , - 4143 , - 4016 , - 4229 , - 4782 , - 235 , - 1468 , - 3041 , - 4954 , - 1767 , - 4360 , - 1853 , - 5126 , - 3299 , - 1812 , - 665 , - 5298 , - 4831 , - 4704 , - 4917 , - 30 , - 923 , - 2156 , - 3729 , - 202 , - 2455 , - 5048 , - 2541 , - 374 , - 3987 , - 2500 , - 1353 , - 546 , - 79 , - 5392 , - 165 , - 718 , - 1611 , - 2844 , - 4417 , - 890 , - 3143 , - 296 , - 3229 , - 1062 , - 4675 , - 3188 , - 2041 , - 1234 , - 767 , - 640 , - 853 , - 1406 , - 2299 , - 3532 , - 5105 , - 1578 , - 3831 , - 984 , - 3917 , - 1750 , - 5363 , - 3876 , - 2729 , - 1922 , - 1455 , - 1328 , - 1541 , - 2094 , - 2987 , - 4220 , - 353 , - 2266 , - 4519 , - 1672 , - 4605 , - 2438 , - 611 , - 4564 , - 3417 , - 2610 , - 2143 , - 2016 , - 2229 , - 2782 , - 3675 , - 4908 , - 1041 , - 2954 , - 5207 , - 2360 , - 5293 , - 3126 , - 1299 , - 5252 , - 4105 , - 3298 , - 2831 , - 2704 , - 2917 , - 3470 , - 4363 , - 156 , - 1729 , - 3642 , - 455 , - 3048 , - 541 , - 3814 , - 1987 , - 500 , - 4793 , - 3986 , - 3519 , - 3392 , - 3605 , - 4158 , - 5051 , - 844 , - 2417 , - 4330 , - 1143 , - 3736 , - 1229 , - 4502 , - 2675 , - 1188 , - 41 , - 4674 , - 4207 , - 4080 , - 4293 , - 4846 , - 299 , - 1532 , - 3105 , - 5018 , - 1831 , - 4424 , - 1917 , - 5190 , - 3363 , - 1876 , - 729 , - 5362 , - 4895 , - 4768 , - 4981 , - 94 , - 987 , - 2220 , - 3793 , - 266 , - 2519 , - 5112 , - 2605 , - 438 , - 4051 , - 2564 , - 1417 , - 610 , - 143 , - 16 , - 229 , - 782 , - 1675 , - 2908 , - 4481 , - 954 , - 3207 , - 360 , - 3293 , - 1126 , - 4739 , - 3252 , - 2105 , - 1298 , - 831 , - 704 , - 917 , - 1470 , - 2363 , - 3596 , - 5169 , - 1642 , - 3895 , - 1048 , - 3981 , - 1814 , - 5427 , - 3940 , - 2793 , - 1986 , - 1519 , - 1392 , - 1605 , - 2158 , - 3051 , - 4284 , - 417 , - 2330 , - 4583 , - 1736 , - 4669 , - 2502 , - 675 , - 4628 , - 3481 , - 2674 , - 2207 , - 2080 , - 2293 , - 2846 , - 3739 , - 4972 , - 1105 , - 3018 , - 5271 , - 2424 , - 5357 , - 3190 , - 1363 , - 5316 , - 4169 , - 3362 , - 2895 , - 2768 , - 2981 , - 3534 , - 4427 , - 220 , - 1793 , - 3706 , - 519 , - 3112 , - 605 , - 3878 , - 2051 , - 564 , - 4857 , - 4050 , - 3583 , - 3456 , - 3669 , - 4222 , - 5115 , - 908 , - 2481 , - 4394 , - 1207 , - 3800 , - 1293 , - 4566 , - 2739 , - 1252 , - 105 , - 4738 , - 4271 , - 4144 , - 4357 , - 4910 , - 363 , - 1596 , - 3169 , - 5082 , - 1895 , - 4488 , - 1981 , - 5254 , - 3427 , - 1940 , - 793 , - 5426 , - 4959 , - 4832 , - 5045 , - 158 , - 1051 , - 2284 , - 3857 , - 330 , - 2583 , - 5176 , - 2669 , - 502 , - 4115 , - 2628 , - 1481 , - 674 , - 207 , - 80 , - 293 , - 846 , - 1739 , - 2972 , - 4545 , - 1018 , - 3271 , - 424 , - 3357 , - 1190 , - 4803 , - 3316 , - 2169 , - 1362 , - 895 , - 768 , - 981 , - 1534 , - 2427 , - 3660 , - 5233 , - 1706 , - 3959 , - 1112 , - 4045 , - 1878 , - 51 , - 4004 , - 2857 , - 2050 , - 1583 , - 1456 , - 1669 , - 2222 , - 3115 , - 4348 , - 481 , - 2394 , - 4647 , - 1800 , - 4733 , - 2566 , - 739 , - 4692 , - 3545 , - 2738 , - 2271 , - 2144 , - 2357 , - 2910 , - 3803 , - 5036 , - 1169 , - 3082 , - 5335 , - 2488 , - 5421 , - 3254 , - 1427 , - 5380 , - 4233 , - 3426 , - 2959 , - 2832 , - 3045 , - 3598 , - 4491 , - 284 , - 1857 , - 3770 , - 583 , - 3176 , - 669 , - 3942 , - 2115 , - 628 , - 4921 , - 4114 , - 3647 , - 3520 , - 3733 , - 4286 , - 5179 , - 972 , - 2545 , - 4458 , - 1271 , - 3864 , - 1357 , - 4630 , - 2803 , - 1316 , - 169 , - 4802 , - 4335 , - 4208 , - 4421 , - 4974 , - 427 , - 1660 , - 3233 , - 5146 , - 1959 , - 4552 , - 2045 , - 5318 , - 3491 , - 2004 , - 857 , - 50 , - 5023 , - 4896 , - 5109 , - 222 , - 1115 , - 2348 , - 3921 , - 394 , - 2647 , - 5240 , - 2733 , - 566 , - 4179 , - 2692 , - 1545 , - 738 , - 271 , - 144 , - 357 , - 910 , - 1803 , - 3036 , - 4609 , - 1082 , - 3335 , - 488 , - 3421 , - 1254 , - 4867 , - 3380 , - 2233 , - 1426 , - 959 , - 832 , - 1045 , - 1598 , - 2491 , - 3724 , - 5297 , - 1770 , - 4023 , - 1176 , - 4109 , - 1942 , - 115 , - 4068 , - 2921 , - 2114 , - 1647 , - 1520 , - 1733 , - 2286 , - 3179 , - 4412 , - 545 , - 2458 , - 4711 , - 1864 , - 4797 , - 2630 , - 803 , - 4756 , - 3609 , - 2802 , - 2335 , - 2208 , - 2421 , - 2974 , - 3867 , - 5100 , - 1233 , - 3146 , - 5399 , - 2552 , - 45 , - 3318 , - 1491 , - 4 , - 4297 , - 3490 , - 3023 , - 2896 , - 3109 , - 3662 , - 4555 , - 348 , - 1921 , - 3834 , - 647 , - 3240 , - 733 , - 4006 , - 2179 , - 692 , - 4985 , - 4178 , - 3711 , - 3584 , - 3797 , - 4350 , - 5243 , - 1036 , - 2609 , - 4522 , - 1335 , - 3928 , - 1421 , - 4694 , - 2867 , - 1380 , - 233 , - 4866 , - 4399 , - 4272 , - 4485 , - 5038 , - 491 , - 1724 , - 3297 , - 5210 , - 2023 , - 4616 , - 2109 , - 5382 , - 3555 , - 2068 , - 921 , - 114 , - 5087 , - 4960 , - 5173 , - 286 , - 1179 , - 2412 , - 3985 , - 458 , - 2711 , - 5304 , - 2797 , - 630 , - 4243 , - 2756 , - 1609 , - 802 , - 335 , - 208 , - 421 , - 974 , - 1867 , - 3100 , - 4673 , - 1146 , - 3399 , - 552 , - 3485 , - 1318 , - 4931 , - 3444 , - 2297 , - 1490 , - 1023 , - 896 , - 1109 , - 1662 , - 2555 , - 3788 , - 5361 , - 1834 , - 4087 , - 1240 , - 4173 , - 2006 , - 179 , - 4132 , - 2985 , - 2178 , - 1711 , - 1584 , - 1797 , - 2350 , - 3243 , - 4476 , - 609 , - 2522 , - 4775 , - 1928 , - 4861 , - 2694 , - 867 , - 4820 , - 3673 , - 2866 , - 2399 , - 2272 , - 2485 , - 3038 , - 3931 , - 5164 , - 1297 , - 3210 , - 23 , - 2616 , - 109 , - 3382 , - 1555 , - 68 , - 4361 , - 3554 , - 3087 , - 2960 , - 3173 , - 3726 , - 4619 , - 412 , - 1985 , - 3898 , - 711 , - 3304 , - 797 , - 4070 , - 2243 , - 756 , - 5049 , - 4242 , - 3775 , - 3648 , - 3861 , - 4414 , - 5307 , - 1100 , - 2673 , - 4586 , - 1399 , - 3992 , - 1485 , - 4758 , - 2931 , - 1444 , - 297 , - 4930 , - 4463 , - 4336 , - 4549 , - 5102 , - 555 , - 1788 , - 3361 , - 5274 , - 2087 , - 4680 , - 2173 , - 6 , - 3619 , - 2132 , - 985 , - 178 , - 5151 , - 5024 , - 5237 , - 350 , - 1243 , - 2476 , - 4049 , - 522 , - 2775 , - 5368 , - 2861 , - 694 , - 4307 , - 2820 , - 1673 , - 866 , - 399 , - 272 , - 485 , - 1038 , - 1931 , - 3164 , - 4737 , - 1210 , - 3463 , - 616 , - 3549 , - 1382 , - 4995 , - 3508 , - 2361 , - 1554 , - 1087 , - 960 , - 1173 , - 1726 , - 2619 , - 3852 , - 5425 , - 1898 , - 4151 , - 1304 , - 4237 , - 2070 , - 243 , - 4196 , - 3049 , - 2242 , - 1775 , - 1648 , - 1861 , - 2414 , - 3307 , - 4540 , - 673 , - 2586 , - 4839 , - 1992 , - 4925 , - 2758 , - 931 , - 4884 , - 3737 , - 2930 , - 2463 , - 2336 , - 2549 , - 3102 , - 3995 , - 5228 , - 1361 , - 3274 , - 87 , - 2680 , - 173 , - 3446 , - 1619 , - 132 , - 4425 , - 3618 , - 3151 , - 3024 , - 3237 , - 3790 , - 4683 , - 476 , - 2049 , - 3962 , - 775 , - 3368 , - 861 , - 4134 , - 2307 , - 820 , - 5113 , - 4306 , - 3839 , - 3712 , - 3925 , - 4478 , - 5371 , - 1164 , - 2737 , - 4650 , - 1463 , - 4056 , - 1549 , - 4822 , - 2995 , - 1508 , - 361 , - 4994 , - 4527 , - 4400 , - 4613 , - 5166 , - 619 , - 1852 , - 3425 , - 5338 , - 2151 , - 4744 , - 2237 , - 70 , - 3683 , - 2196 , - 1049 , - 242 , - 5215 , - 5088 , - 5301 , - 414 , - 1307 , - 2540 , - 4113 , - 586 , - 2839 , - 5432 , - 2925 , - 758 , - 4371 , - 2884 , - 1737 , - 930 , - 463 , - 336 , - 549 , - 1102 , - 1995 , - 3228 , - 4801 , - 1274 , - 3527 , - 680 , - 3613 , - 1446 , - 5059 , - 3572 , - 2425 , - 1618 , - 1151 , - 1024 , - 1237 , - 1790 , - 2683 , - 3916 , - 49 , - 1962 , - 4215 , - 1368 , - 4301 , - 2134 , - 307 , - 4260 , - 3113 , - 2306 , - 1839 , - 1712 , - 1925 , - 2478 , - 3371 , - 4604 , - 737 , - 2650 , - 4903 , - 2056 , - 4989 , - 2822 , - 995 , - 4948 , - 3801 , - 2994 , - 2527 , - 2400 , - 2613 , - 3166 , - 4059 , - 5292 , - 1425 , - 3338 , - 151 , - 2744 , - 237 , - 3510 , - 1683 , - 196 , - 4489 , - 3682 , - 3215 , - 3088 , - 3301 , - 3854 , - 4747 , - 540 , - 2113 , - 4026 , - 839 , - 3432 , - 925 , - 4198 , - 2371 , - 884 , - 5177 , - 4370 , - 3903 , - 3776 , - 3989 , - 4542 , - 5435 , - 1228 , - 2801 , - 4714 , - 1527 , - 4120 , - 1613 , - 4886 , - 3059 , - 1572 , - 425 , - 5058 , - 4591 , - 4464 , - 4677 , - 5230 , - 683 , - 1916 , - 3489 , - 5402 , - 2215 , - 4808 , - 2301 , - 134 , - 3747 , - 2260 , - 1113 , - 306 , - 5279 , - 5152 , - 5365 , - 478 , - 1371 , - 2604 , - 4177 , - 650 , - 2903 , - 56 , - 2989 , - 822 , - 4435 , - 2948 , - 1801 , - 994 , - 527 , - 400 , - 613 , - 1166 , - 2059 , - 3292 , - 4865 , - 1338 , - 3591 , - 744 , - 3677 , - 1510 , - 5123 , - 3636 , - 2489 , - 1682 , - 1215 , - 1088 , - 1301 , - 1854 , - 2747 , - 3980 , - 113 , - 2026 , - 4279 , - 1432 , - 4365 , - 2198 , - 371 , - 4324 , - 3177 , - 2370 , - 1903 , - 1776 , - 1989 , - 2542 , - 3435 , - 4668 , - 801 , - 2714 , - 4967 , - 2120 , - 5053 , - 2886 , - 1059 , - 5012 , - 3865 , - 3058 , - 2591 , - 2464 , - 2677 , - 3230 , - 4123 , - 5356 , - 1489 , - 3402 , - 215 , - 2808 , - 301 , - 3574 , - 1747 , - 260 , - 4553 , - 3746 , - 3279 , - 3152 , - 3365 , - 3918 , - 4811 , - 604 , - 2177 , - 4090 , - 903 , - 3496 , - 989 , - 4262 , - 2435 , - 948 , - 5241 , - 4434 , - 3967 , - 3840 , - 4053 , - 4606 , - 59 , - 1292 , - 2865 , - 4778 , - 1591 , - 4184 , - 1677 , - 4950 , - 3123 , - 1636 , - 489 , - 5122 , - 4655 , - 4528 , - 4741 , - 5294 , - 747 , - 1980 , - 3553 , - 26 , - 2279 , - 4872 , - 2365 , - 198 , - 3811 , - 2324 , - 1177 , - 370 , - 5343 , - 5216 , - 5429 , - 542 , - 1435 , - 2668 , - 4241 , - 714 , - 2967 , - 120 , - 3053 , - 886 , - 4499 , - 3012 , - 1865 , - 1058 , - 591 , - 464 , - 677 , - 1230 , - 2123 , - 3356 , - 4929 , - 1402 , - 3655 , - 808 , - 3741 , - 1574 , - 5187 , - 3700 , - 2553 , - 1746 , - 1279 , - 1152 , - 1365 , - 1918 , - 2811 , - 4044 , - 177 , - 2090 , - 4343 , - 1496 , - 4429 , - 2262 , - 435 , - 4388 , - 3241 , - 2434 , - 1967 , - 1840 , - 2053 , - 2606 , - 3499 , - 4732 , - 865 , - 2778 , - 5031 , - 2184 , - 5117 , - 2950 , - 1123 , - 5076 , - 3929 , - 3122 , - 2655 , - 2528 , - 2741 , - 3294 , - 4187 , - 5420 , - 1553 , - 3466 , - 279 , - 2872 , - 365 , - 3638 , - 1811 , - 324 , - 4617 , - 3810 , - 3343 , - 3216 , - 3429 , - 3982 , - 4875 , - 668 , - 2241 , - 4154 , - 967 , - 3560 , - 1053 , - 4326 , - 2499 , - 1012 , - 5305 , - 4498 , - 4031 , - 3904 , - 4117 , - 4670 , - 123 , - 1356 , - 2929 , - 4842 , - 1655 , - 4248 , - 1741 , - 5014 , - 3187 , - 1700 , - 553 , - 5186 , - 4719 , - 4592 , - 4805 , - 5358 , - 811 , - 2044 , - 3617 , - 90 , - 2343 , - 4936 , - 2429 , - 262 , - 3875 , - 2388 , - 1241 , - 434 , - 5407 , - 5280 , - 53 , - 606 , - 1499 , - 2732 , - 4305 , - 778 , - 3031 , - 184 , - 3117 , - 950 , - 4563 , - 3076 , - 1929 , - 1122 , - 655 , - 528 , - 741 , - 1294 , - 2187 , - 3420 , - 4993 , - 1466 , - 3719 , - 872 , - 3805 , - 1638 , - 5251 , - 3764 , - 2617 , - 1810 , - 1343 , - 1216 , - 1429 , - 1982 , - 2875 , - 4108 , - 241 , - 2154 , - 4407 , - 1560 , - 4493 , - 2326 , - 499 , - 4452 , - 3305 , - 2498 , - 2031 , - 1904 , - 2117 , - 2670 , - 3563 , - 4796 , - 929 , - 2842 , - 5095 , - 2248 , - 5181 , - 3014 , - 1187 , - 5140 , - 3993 , - 3186 , - 2719 , - 2592 , - 2805 , - 3358 , - 4251 , - 44 , - 1617 , - 3530 , - 343 , - 2936 , - 429 , - 3702 , - 1875 , - 388 , - 4681 , - 3874 , - 3407 , - 3280 , - 3493 , - 4046 , - 4939 , - 732 , - 2305 , - 4218 , - 1031 , - 3624 , - 1117 , - 4390 , - 2563 , - 1076 , - 5369 , - 4562 , - 4095 , - 3968 , - 4181 , - 4734 , - 187 , - 1420 , - 2993 , - 4906 , - 1719 , - 4312 , - 1805 , - 5078 , - 3251 , - 1764 , - 617 , - 5250 , - 4783 , - 4656 , - 4869 , - 5422 , - 875 , - 2108 , - 3681 , - 154 , - 2407 , - 5000 , - 2493 , - 326 , - 3939 , - 2452 , - 1305 , - 498 , - 31 , - 5344 , - 117 , - 670 , - 1563 , - 2796 , - 4369 , - 842 , - 3095 , - 248 , - 3181 , - 1014 , - 4627 , - 3140 , - 1993 , - 1186 , - 719 , - 592 , - 805 , - 1358 , - 2251 , - 3484 , - 5057 , - 1530 , - 3783 , - 936 , - 3869 , - 1702 , - 5315 , - 3828 , - 2681 , - 1874 , - 1407 , - 1280 , - 1493 , - 2046 , - 2939 , - 4172 , - 305 , - 2218 , - 4471 , - 1624 , - 4557 , - 2390 , - 563 , - 4516 , - 3369 , - 2562 , - 2095 , - 1968 , - 2181 , - 2734 , - 3627 , - 4860 , - 993 , - 2906 , - 5159 , - 2312 , - 5245 , - 3078 , - 1251 , - 5204 , - 4057 , - 3250 , - 2783 , - 2656 , - 2869 , - 3422 , - 4315 , - 108 , - 1681 , - 3594 , - 407 , - 3000 , - 493 , - 3766 , - 1939 , - 452 , - 4745 , - 3938 , - 3471 , - 3344 , - 3557 , - 4110 , - 5003 , - 796 , - 2369 , - 4282 , - 1095 , - 3688 , - 1181 , - 4454 , - 2627 , - 1140 , - 5433 , - 4626 , - 4159 , - 4032 , - 4245 , - 4798 , - 251 , - 1484 , - 3057 , - 4970 , - 1783 , - 4376 , - 1869 , - 5142 , - 3315 , - 1828 , - 681 , - 5314 , - 4847 , - 4720 , - 4933 , - 46 , - 939 , - 2172 , - 3745 , - 218 , - 2471 , - 5064 , - 2557 , - 390 , - 4003 , - 2516 , - 1369 , - 562 , - 95 , - 5408 , - 181 , - 734 , - 1627 , - 2860 , - 4433 , - 906 , - 3159 , - 312 , - 3245 , - 1078 , - 4691 , - 3204 , - 2057 , - 1250 , - 783 , - 656 , - 869 , - 1422 , - 2315 , - 3548 , - 5121 , - 1594 , - 3847 , - 1000 , - 3933 , - 1766 , - 5379 , - 3892 , - 2745 , - 1938 , - 1471 , - 1344 , - 1557 , - 2110 , - 3003 , - 4236 , - 369 , - 2282 , - 4535 , - 1688 , - 4621 , - 2454 , - 627 , - 4580 , - 3433 , - 2626 , - 2159 , - 2032 , - 2245 , - 2798 , - 3691 , - 4924 , - 1057 , - 2970 , - 5223 , - 2376 , - 5309 , - 3142 , - 1315 , - 5268 , - 4121 , - 3314 , - 2847 , - 2720 , - 2933 , - 3486 , - 4379 , - 172 , - 1745 , - 3658 , - 471 , - 3064 , - 557 , - 3830 , - 2003 , - 516 , - 4809 , - 4002 , - 3535 , - 3408 , - 3621 , - 4174 , - 5067 , - 860 , - 2433 , - 4346 , - 1159 , - 3752 , - 1245 , - 4518 , - 2691 , - 1204 , - 57 , - 4690 , - 4223 , - 4096 , - 4309 , - 4862 , - 315 , - 1548 , - 3121 , - 5034 , - 1847 , - 4440 , - 1933 , - 5206 , - 3379 , - 1892 , - 745 , - 5378 , - 4911 , - 4784 , - 4997 , - 110 , - 1003 , - 2236 , - 3809 , - 282 , - 2535 , - 5128 , - 2621 , - 454 , - 4067 , - 2580 , - 1433 , - 626 , - 159 , - 32 , - 245 , - 798 , - 1691 , - 2924 , - 4497 , - 970 , - 3223 , - 376 , - 3309 , - 1142 , - 4755 , - 3268 , - 2121 , - 1314 , - 847 , - 720 , - 933 , - 1486 , - 2379 , - 3612 , - 5185 , - 1658 , - 3911 , - 1064 , - 3997 , - 1830 , - 3 , - 3956 , - 2809 , - 2002 , - 1535 , - 1408 , - 1621 , - 2174 , - 3067 , - 4300 , - 433 , - 2346 , - 4599 , - 1752 , - 4685 , - 2518 , - 691 , - 4644 , - 3497 , - 2690 , - 2223 , - 2096 , - 2309 , - 2862 , - 3755 , - 4988 , - 1121 , - 3034 , - 5287 , - 2440 , - 5373 , - 3206 , - 1379 , - 5332 , - 4185 , - 3378 , - 2911 , - 2784 , - 2997 , - 3550 , - 4443 , - 236 , - 1809 , - 3722 , - 535 , - 3128 , - 621 , - 3894 , - 2067 , - 580 , - 4873 , - 4066 , - 3599 , - 3472 , - 3685 , - 4238 , - 5131 , - 924 , - 2497 , - 4410 , - 1223 , - 3816 , - 1309 , - 4582 , - 2755 , - 1268 , - 121 , - 4754 , - 4287 , - 4160 , - 4373 , - 4926 , - 379 , - 1612 , - 3185 , - 5098 , - 1911 , - 4504 , - 1997 , - 5270 , - 3443 , - 1956 , - 809 , - 2 , - 4975 , - 4848 , - 5061 , - 174 , - 1067 , - 2300 , - 3873 , - 346 , - 2599 , - 5192 , - 2685 , - 518 , - 4131 , - 2644 , - 1497 , - 690 , - 223 , - 96 , - 309 , - 862 , - 1755 , - 2988 , - 4561 , - 1034 , - 3287 , - 440 , - 3373 , - 1206 , - 4819 , - 3332 , - 2185 , - 1378 , - 911 , - 784 , - 997 , - 1550 , - 2443 , - 3676 , - 5249 , - 1722 , - 3975 , - 1128 , - 4061 , - 1894 , - 67 , - 4020 , - 2873 , - 2066 , - 1599 , - 1472 , - 1685 , - 2238 , - 3131 , - 4364 , - 497 , - 2410 , - 4663 , - 1816 , - 4749 , - 2582 , - 755 , - 4708 , - 3561 , - 2754 , - 2287 , - 2160 , - 2373 , - 2926 , - 3819 , - 5052 , - 1185 , - 3098 , - 5351 , - 2504 , - 5437 , - 3270 , - 1443 , - 5396 , - 4249 , - 3442 , - 2975 , - 2848 , - 3061 , - 3614 , - 4507 , - 300 , - 1873 , - 3786 , - 599 , - 3192 , - 685 , - 3958 , - 2131 , - 644 , - 4937 , - 4130 , - 3663 , - 3536 , - 3749 , - 4302 , - 5195 , - 988 , - 2561 , - 4474 , - 1287 , - 3880 , - 1373 , - 4646 , - 2819 , - 1332 , - 185 , - 4818 , - 4351 , - 4224 , - 4437 , - 4990 , - 443 , - 1676 , - 3249 , - 5162 , - 1975 , - 4568 , - 2061 , - 5334 , - 3507 , - 2020 , - 873 , - 66 , - 5039 , - 4912 , - 5125 , - 238 , - 1131 , - 2364 , - 3937 , - 410 , - 2663 , - 5256 , - 2749 , - 582 , - 4195 , - 2708 , - 1561 , - 754 , - 287 , - 160 , - 373 , - 926 , - 1819 , - 3052 , - 4625 , - 1098 , - 3351 , - 504 , - 3437 , - 1270 , - 4883 , - 3396 , - 2249 , - 1442 , - 975 , - 848 , - 1061 , - 1614 , - 2507 , - 3740 , - 5313 , - 1786 , - 4039 , - 1192 , - 4125 , - 1958 , - 131 , - 4084 , - 2937 , - 2130 , - 1663 , - 1536 , - 1749 , - 2302 , - 3195 , - 4428 , - 561 , - 2474 , - 4727 , - 1880 , - 4813 , - 2646 , - 819 , - 4772 , - 3625 , - 2818 , - 2351 , - 2224 , - 2437 , - 2990 , - 3883 , - 5116 , - 1249 , - 3162 , - 5415 , - 2568 , - 61 , - 3334 , - 1507 , - 20 , - 4313 , - 3506 , - 3039 , - 2912 , - 3125 , - 3678 , - 4571 , - 364 , - 1937 , - 3850 , - 663 , - 3256 , - 749 , - 4022 , - 2195 , - 708 , - 5001 , - 4194 , - 3727 , - 3600 , - 3813 , - 4366 , - 5259 , - 1052 , - 2625 , - 4538 , - 1351 , - 3944 , - 1437 , - 4710 , - 2883 , - 1396 , - 249 , - 4882 , - 4415 , - 4288 , - 4501 , - 5054 , - 507 , - 1740 , - 3313 , - 5226 , - 2039 , - 4632 , - 2125 , - 5398 , - 3571 , - 2084 , - 937 , - 130 , - 5103 , - 4976 , - 5189 , - 302 , - 1195 , - 2428 , - 4001 , - 474 , - 2727 , - 5320 , - 2813 , - 646 , - 4259 , - 2772 , - 1625 , - 818 , - 351 , - 224 , - 437 , - 990 , - 1883 , - 3116 , - 4689 , - 1162 , - 3415 , - 568 , - 3501 , - 1334 , - 4947 , - 3460 , - 2313 , - 1506 , - 1039 , - 912 , - 1125 , - 1678 , - 2571 , - 3804 , - 5377 , - 1850 , - 4103 , - 1256 , - 4189 , - 2022 , - 195 , - 4148 , - 3001 , - 2194 , - 1727 , - 1600 , - 1813 , - 2366 , - 3259 , - 4492 , - 625 , - 2538 , - 4791 , - 1944 , - 4877 , - 2710 , - 883 , - 4836 , - 3689 , - 2882 , - 2415 , - 2288 , - 2501 , - 3054 , - 3947 , - 5180 , - 1313 , - 3226 , - 39 , - 2632 , - 125 , - 3398 , - 1571 , - 84 , - 4377 , - 3570 , - 3103 , - 2976 , - 3189 , - 3742 , - 4635 , - 428 , - 2001 , - 3914 , - 727 , - 3320 , - 813 , - 4086 , - 2259 , - 772 , - 5065 , - 4258 , - 3791 , - 3664 , - 3877 , - 4430 , - 5323 , - 1116 , - 2689 , - 4602 , - 1415 , - 4008 , - 1501 , - 4774 , - 2947 , - 1460 , - 313 , - 4946 , - 4479 , - 4352 , - 4565 , - 5118 , - 571 , - 1804 , - 3377 , - 5290 , - 2103 , - 4696 , - 2189 , - 22 , - 3635 , - 2148 , - 1001 , - 194 , - 5167 , - 5040 , - 5253 , - 366 , - 1259 , - 2492 , - 4065 , - 538 , - 2791 , - 5384 , - 2877 , - 710 , - 4323 , - 2836 , - 1689 , - 882 , - 415 , - 288 , - 501 , - 1054 , - 1947 , - 3180 , - 4753 , - 1226 , - 3479 , - 632 , - 3565 , - 1398 , - 5011 , - 3524 , - 2377 , - 1570 , - 1103 , - 976 , - 1189 , - 1742 , - 2635 , - 3868 , - 1 , - 1914 , - 4167 , - 1320 , - 4253 , - 2086 , - 259 , - 4212 , - 3065 , - 2258 , - 1791 , - 1664 , - 1877 , - 2430 , - 3323 , - 4556 , - 689 , - 2602 , - 4855 , - 2008 , - 4941 , - 2774 , - 947 , - 4900 , - 3753 , - 2946 , - 2479 , - 2352 , - 2565 , - 3118 , - 4011 , - 5244 , - 1377 , - 3290 , - 103 , - 2696 , - 189 , - 3462 , - 1635 , - 148 , - 4441 , - 3634 , - 3167 , - 3040 , - 3253 , - 3806 , - 4699 , - 492 , - 2065 , - 3978 , - 791 , - 3384 , - 877 , - 4150 , - 2323 , - 836 , - 5129 , - 4322 , - 3855 , - 3728 , - 3941 , - 4494 , - 5387 , - 1180 , - 2753 , - 4666 , - 1479 , - 4072 , - 1565 , - 4838 , - 3011 , - 1524 , - 377 , - 5010 , - 4543 , - 4416 , - 4629 , - 5182 , - 635 , - 1868 , - 3441 , - 5354 , - 2167 , - 4760 , - 2253 , - 86 , - 3699 , - 2212 , - 1065 , - 258 , - 5231 , - 5104 , - 5317 , - 430 , - 1323 , - 2556 , - 4129 , - 602 , - 2855 , - 8 , - 2941 , - 774 , - 4387 , - 2900 , - 1753 , - 946 , - 479 , - 352 , - 565 , - 1118 , - 2011 , - 3244 , - 4817 , - 1290 , - 3543 , - 696 , - 3629 , - 1462 , - 5075 , - 3588 , - 2441 , - 1634 , - 1167 , - 1040 , - 1253 , - 1806 , - 2699 , - 3932 , - 65 , - 1978 , - 4231 , - 1384 , - 4317 , - 2150 , - 323 , - 4276 , - 3129 , - 2322 , - 1855 , - 1728 , - 1941 , - 2494 , - 3387 , - 4620 , - 753 , - 2666 , - 4919 , - 2072 , - 5005 , - 2838 , - 1011 , - 4964 , - 3817 , - 3010 , - 2543 , - 2416 , - 2629 , - 3182 , - 4075 , - 5308 , - 1441 , - 3354 , - 167 , - 2760 , - 253 , - 3526 , - 1699 , - 212 , - 4505 , - 3698 , - 3231 , - 3104 , - 3317 , - 3870 , - 4763 , - 556 , - 2129 , - 4042 , - 855 , - 3448 , - 941 , - 4214 , - 2387 , - 900 , - 5193 , - 4386 , - 3919 , - 3792 , - 4005 , - 4558 , - 11 , - 1244 , - 2817 , - 4730 , - 1543 , - 4136 , - 1629 , - 4902 , - 3075 , - 1588 , - 441 , - 5074 , - 4607 , - 4480 , - 4693 , - 5246 , - 699 , - 1932 , - 3505 , - 5418 , - 2231 , - 4824 , - 2317 , - 150 , - 3763 , - 2276 , - 1129 , - 322 , - 5295 , - 5168 , - 5381 , - 494 , - 1387 , - 2620 , - 4193 , - 666 , - 2919 , - 72 , - 3005 , - 838 , - 4451 , - 2964 , - 1817 , - 1010 , - 543 , - 416 , - 629 , - 1182 , - 2075 , - 3308 , - 4881 , - 1354 , - 3607 , - 760 , - 3693 , - 1526 , - 5139 , - 3652 , - 2505 , - 1698 , - 1231 , - 1104 , - 1317 , - 1870 , - 2763 , - 3996 , - 129 , - 2042 , - 4295 , - 1448 , - 4381 , - 2214 , - 387 , - 4340 , - 3193 , - 2386 , - 1919 , - 1792 , - 2005 , - 2558 , - 3451 , - 4684 , - 817 , - 2730 , - 4983 , - 2136 , - 5069 , - 2902 , - 1075 , - 5028 , - 3881 , - 3074 , - 2607 , - 2480 , - 2693 , - 3246 , - 4139 , - 5372 , - 1505 , - 3418 , - 231 , - 2824 , - 317 , - 3590 , - 1763 , - 276 , - 4569 , - 3762 , - 3295 , - 3168 , - 3381 , - 3934 , - 4827 , - 620 , - 2193 , - 4106 , - 919 , - 3512 , - 1005 , - 4278 , - 2451 , - 964 , - 5257 , - 4450 , - 3983 , - 3856 , - 4069 , - 4622 , - 75 , - 1308 , - 2881 , - 4794 , - 1607 , - 4200 , - 1693 , - 4966 , - 3139 , - 1652 , - 505 , - 5138 , - 4671 , - 4544 , - 4757 , - 5310 , - 763 , - 1996 , - 3569 , - 42 , - 2295 , - 4888 , - 2381 , - 214 , - 3827 , - 2340 , - 1193 , - 386 , - 5359 , - 5232 , - 5 , - 558 , - 1451 , - 2684 , - 4257 , - 730 , - 2983 , - 136 , - 3069 , - 902 , - 4515 , - 3028 , - 1881 , - 1074 , - 607 , - 480 , - 693 , - 1246 , - 2139 , - 3372 , - 4945 , - 1418 , - 3671 , - 824 , - 3757 , - 1590 , - 5203 , - 3716 , - 2569 , - 1762 , - 1295 , - 1168 , - 1381 , - 1934 , - 2827 , - 4060 , - 193 , - 2106 , - 4359 , - 1512 , - 4445 , - 2278 , - 451 , - 4404 , - 3257 , - 2450 , - 1983 , - 1856 , - 2069 , - 2622 , - 3515 , - 4748 , - 881 , - 2794 , - 5047 , - 2200 , - 5133 , - 2966 , - 1139 , - 5092 , - 3945 , - 3138 , - 2671 , - 2544 , - 2757 , - 3310 , - 4203 , - 5436 , - 1569 , - 3482 , - 295 , - 2888 , - 381 , - 3654 , - 1827 , - 340 , - 4633 , - 3826 , - 3359 , - 3232 , - 3445 , - 3998 , - 4891 , - 684 , - 2257 , - 4170 , - 983 , - 3576 , - 1069 , - 4342 , - 2515 , - 1028 , - 5321 , - 4514 , - 4047 , - 3920 , - 4133 , - 4686 , - 139 , - 1372 , - 2945 , - 4858 , - 1671 , - 4264 , - 1757 , - 5030 , - 3203 , - 1716 , - 569 , - 5202 , - 4735 , - 4608 , - 4821 , - 5374 , - 827 , - 2060 , - 3633 , - 106 , - 2359 , - 4952 , - 2445 , - 278 , - 3891 , - 2404 , - 1257 , - 450 , - 5423 , - 5296 , - 69 , - 622 , - 1515 , - 2748 , - 4321 , - 794 , - 3047 , - 200 , - 3133 , - 966 , - 4579 , - 3092 , - 1945 , - 1138 , - 671 , - 544 , - 757 , - 1310 , - 2203 , - 3436 , - 5009 , - 1482 , - 3735 , - 888 , - 3821 , - 1654 , - 5267 , - 3780 , - 2633 , - 1826 , - 1359 , - 1232 , - 1445 , - 1998 , - 2891 , - 4124 , - 257 , - 2170 , - 4423 , - 1576 , - 4509 , - 2342 , - 515 , - 4468 , - 3321 , - 2514 , - 2047 , - 1920 , - 2133 , - 2686 , - 3579 , - 4812 , - 945 , - 2858 , - 5111 , - 2264 , - 5197 , - 3030 , - 1203 , - 5156 , - 4009 , - 3202 , - 2735 , - 2608 , - 2821 , - 3374 , - 4267 , - 60 , - 1633 , - 3546 , - 359 , - 2952 , - 445 , - 3718 , - 1891 , - 404 , - 4697 , - 3890 , - 3423 , - 3296 , - 3509 , - 4062 , - 4955 , - 748 , - 2321 , - 4234 , - 1047 , - 3640 , - 1133 , - 4406 , - 2579 , - 1092 , - 5385 , - 4578 , - 4111 , - 3984 , - 4197 , - 4750 , - 203 , - 1436 , - 3009 , - 4922 , - 1735 , - 4328 , - 1821 , - 5094 , - 3267 , - 1780 , - 633 , - 5266 , - 4799 , - 4672 , - 4885 , - 5438 , - 891 , - 2124 , - 3697 , - 170 , - 2423 , - 5016 , - 2509 , - 342 , - 3955 , - 2468 , - 1321 , - 514 , - 47 , - 5360 , - 133 , - 686 , - 1579 , - 2812 , - 4385 , - 858 , - 3111 , - 264 , - 3197 , - 1030 , - 4643 , - 3156 , - 2009 , - 1202 , - 735 , - 608 , - 821 , - 1374 , - 2267 , - 3500 , - 5073 , - 1546 , - 3799 , - 952 , - 3885 , - 1718 , - 5331 , - 3844 , - 2697 , - 1890 , - 1423 , - 1296 , - 1509 , - 2062 , - 2955 , - 4188 , - 321 , - 2234 , - 4487 , - 1640 , - 4573 , - 2406 , - 579 , - 4532 , - 3385 , - 2578 , - 2111 , - 1984 , - 2197 , - 2750 , - 3643 , - 4876 , - 1009 , - 2922 , - 5175 , - 2328 , - 5261 , - 3094 , - 1267 , - 5220 , - 4073 , - 3266 , - 2799 , - 2672 , - 2885 , - 3438 , - 4331 , - 124 , - 1697 , - 3610 , - 423 , - 3016 , - 509 , - 3782 , - 1955 , - 468 , - 4761 , - 3954 , - 3487 , - 3360 , - 3573 , - 4126 , - 5019 , - 812 , - 2385 , - 4298 , - 1111 , - 3704 , - 1197 , - 4470 , - 2643 , - 1156 , - 9 , - 4642 , - 4175 , - 4048 , - 4261 , - 4814 , - 267 , - 1500 , - 3073 , - 4986 , - 1799 , - 4392 , - 1885 , - 5158 , - 3331 , - 1844 , - 697 , - 5330 , - 4863 , - 4736 , - 4949 , - 62 , - 955 , - 2188 , - 3761 , - 234 , - 2487 , - 5080 , - 2573 , - 406 , - 4019 , - 2532 , - 1385 , - 578 , - 111 , - 5424 , - 197 , - 750 , - 1643 , - 2876 , - 4449 , - 922 , - 3175 , - 328 , - 3261 , - 1094 , - 4707 , - 3220 , - 2073 , - 1266 , - 799 , - 672 , - 885 , - 1438 , - 2331 , - 3564 , - 5137 , - 1610 , - 3863 , - 1016 , - 3949 , - 1782 , - 5395 , - 3908 , - 2761 , - 1954 , - 1487 , - 1360 , - 1573 , - 2126 , - 3019 , - 4252 , - 385 , - 2298 , - 4551 , - 1704 , - 4637 , - 2470 , - 643 , - 4596 , - 3449 , - 2642 , - 2175 , - 2048 , - 2261 , - 2814 , - 3707 , - 4940 , - 1073 , - 2986 , - 5239 , - 2392 , - 5325 , - 3158 , - 1331 , - 5284 , - 4137 , - 3330 , - 2863 , - 2736 , - 2949 , - 3502 , - 4395 , - 188 , - 1761 , - 3674 , - 487 , - 3080 , - 573 , - 3846 , - 2019 , - 532 , - 4825 , - 4018 , - 3551 , - 3424 , - 3637 , - 4190 , - 5083 , - 876 , - 2449 , - 4362 , - 1175 , - 3768 , - 1261 , - 4534 , - 2707 , - 1220 , - 73 , - 4706 , - 4239 , - 4112 , - 4325 , - 4878 , - 331 , - 1564 , - 3137 , - 5050 , - 1863 , - 4456 , - 1949 , - 5222 , - 3395 , - 1908 , - 761 , - 5394 , - 4927 , - 4800 , - 5013 , - 126 , - 1019 , - 2252 , - 3825 , - 298 , - 2551 , - 5144 , - 2637 , - 470 , - 4083 , - 2596 , - 1449 , - 642 , - 175 , - 48 , - 261 , - 814 , - 1707 , - 2940 , - 4513 , - 986 , - 3239 , - 392 , - 3325 , - 1158 , - 4771 , - 3284 , - 2137 , - 1330 , - 863 , - 736 , - 949 , - 1502 , - 2395 , - 3628 , - 5201 , - 1674 , - 3927 , - 1080 , - 4013 , - 1846 , - 19 , - 3972 , - 2825 , - 2018 , - 1551 , - 1424 , - 1637 , - 2190 , - 3083 , - 4316 , - 449 , - 2362 , - 4615 , - 1768 , - 4701 , - 2534 , - 707 , - 4660 , - 3513 , - 2706 , - 2239 , - 2112 , - 2325 , - 2878 , - 3771 , - 5004 , - 1137 , - 3050 , - 5303 , - 2456 , - 5389 , - 3222 , - 1395 , - 5348 , - 4201 , - 3394 , - 2927 , - 2800 , - 3013 , - 3566 , - 4459 , - 252 , - 1825 , - 3738 , - 551 , - 3144 , - 637 , - 3910 , - 2083 , - 596 , - 4889 , - 4082 , - 3615 , - 3488 , - 3701 , - 4254 , - 5147 , - 940 , - 2513 , - 4426 , - 1239 , - 3832 , - 1325 , - 4598 , - 2771 , - 1284 , - 137 , - 4770 , - 4303 , - 4176 , - 4389 , - 4942 , - 395 , - 1628 , - 3201 , - 5114 , - 1927 , - 4520 , - 2013 , - 5286 , - 3459 , - 1972 , - 825 , - 18 , - 4991 , - 4864 , - 5077 , - 190 , - 1083 , - 2316 , - 3889 , - 362 , - 2615 , - 5208 , - 2701 , - 534 , - 4147 , - 2660 , - 1513 , - 706 , - 239 , - 112 , - 325 , - 878 , - 1771 , - 3004 , - 4577 , - 1050 , - 3303 , - 456 , - 3389 , - 1222 , - 4835 , - 3348 , - 2201 , - 1394 , - 927 , - 800 , - 1013 , - 1566 , - 2459 , - 3692 , - 5265 , - 1738 , - 3991 , - 1144 , - 4077 , - 1910 , - 83 , - 4036 , - 2889 , - 2082 , - 1615 , - 1488 , - 1701 , - 2254 , - 3147 , - 4380 , - 513 , - 2426 , - 4679 , - 1832 , - 4765 , - 2598 , - 771 , - 4724 , - 3577 , - 2770 , - 2303 , - 2176 , - 2389 , - 2942 , - 3835 , - 5068 , - 1201 , - 3114 , - 5367 , - 2520 , - 13 , - 3286 , - 1459 , - 5412 , - 4265 , - 3458 , - 2991 , - 2864 , - 3077 , - 3630 , - 4523 , - 316 , - 1889 , - 3802 , - 615 , - 3208 , - 701 , - 3974 , - 2147 , - 660 , - 4953 , - 4146 , - 3679 , - 3552 , - 3765 , - 4318 , - 5211 , - 1004 , - 2577 , - 4490 , - 1303 , - 3896 , - 1389 , - 4662 , - 2835 , - 1348 , - 201 , - 4834 , - 4367 , - 4240 , - 4453 , - 5006 , - 459 , - 1692 , - 3265 , - 5178 , - 1991 , - 4584 , - 2077 , - 5350 , - 3523 , - 2036 , - 889 , - 82 , - 5055 , - 4928 , - 5141 , - 254 , - 1147 , - 2380 , - 3953 , - 426 , - 2679 , - 5272 , - 2765 , - 598 , - 4211 , - 2724 , - 1577 , - 770 , - 303 , - 176 , - 389 , - 942 , - 1835 , - 3068 , - 4641 , - 1114 , - 3367 , - 520 , - 3453 , - 1286 , - 4899 , - 3412 , - 2265 , - 1458 , - 991 , - 864 , - 1077 , - 1630 , - 2523 , - 3756 , - 5329 , - 1802 , - 4055 , - 1208 , - 4141 , - 1974 , - 147 , - 4100 , - 2953 , - 2146 , - 1679 , - 1552 , - 1765 , - 2318 , - 3211 , - 4444 , - 577 , - 2490 , - 4743 , - 1896 , - 4829 , - 2662 , - 835 , - 4788 , - 3641 , - 2834 , - 2367 , - 2240 , - 2453 , - 3006 , - 3899 , - 5132 , - 1265 , - 3178 , - 5431 , - 2584 , - 77 , - 3350 , - 1523 , - 36 , - 4329 , - 3522 , - 3055 , - 2928 , - 3141 , - 3694 , - 4587 , - 380 , - 1953 , - 3866 , - 679 , - 3272 , - 765 , - 4038 , - 2211 , - 724 , - 5017 , - 4210 , - 3743 , - 3616 , - 3829 , - 4382 , - 5275 , - 1068 , - 2641 , - 4554 , - 1367 , - 3960 , - 1453 , - 4726 , - 2899 , - 1412 , - 265 , - 4898 , - 4431 , - 4304 , - 4517 , - 5070 , - 523 , - 1756 , - 3329 , - 5242 , - 2055 , - 4648 , - 2141 , - 5414 , - 3587 , - 2100 , - 953 , - 146 , - 5119 , - 4992 , - 5205 , - 318 , - 1211 , - 2444 , - 4017 , - 490 , - 2743 , - 5336 , - 2829 , - 662 , - 4275 , - 2788 , - 1641 , - 834 , - 367 , - 240 , - 453 , - 1006 , - 1899 , - 3132 , - 4705 , - 1178 , - 3431 , - 584 , - 3517 , - 1350 , - 4963 , - 3476 , - 2329 , - 1522 , - 1055 , - 928 , - 1141 , - 1694 , - 2587 , - 3820 , - 5393 , - 1866 , - 4119 , - 1272 , - 4205 , - 2038 , - 211 , - 4164 , - 3017 , - 2210 , - 1743 , - 1616 , - 1829 , - 2382 , - 3275 , - 4508 , - 641 , - 2554 , - 4807 , - 1960 , - 4893 , - 2726 , - 899 , - 4852 , - 3705 , - 2898 , - 2431 , - 2304 , - 2517 , - 3070 , - 3963 , - 5196 , - 1329 , - 3242 , - 55 , - 2648 , - 141 , - 3414 , - 1587 , - 100 , - 4393 , - 3586 , - 3119 , - 2992 , - 3205 , - 3758 , - 4651 , - 444 , - 2017 , - 3930 , - 743 , - 3336 , - 829 , - 4102 , - 2275 , - 788 , - 5081 , - 4274 , - 3807 , - 3680 , - 3893 , - 4446 , - 5339 , - 1132 , - 2705 , - 4618 , - 1431 , - 4024 , - 1517 , - 4790 , - 2963 , - 1476 , - 329 , - 4962 , - 4495 , - 4368 , - 4581 , - 5134 , - 587 , - 1820 , - 3393 , - 5306 , - 2119 , - 4712 , - 2205 , - 38 , - 3651 , - 2164 , - 1017 , - 210 , - 5183 , - 5056 , - 5269 , - 382 , - 1275 , - 2508 , - 4081 , - 554 , - 2807 , - 5400 , - 2893 , - 726 , - 4339 , - 2852 , - 1705 , - 898 , - 431 , - 304 , - 517 , - 1070 , - 1963 , - 3196 , - 4769 , - 1242 , - 3495 , - 648 , - 3581 , - 1414 , - 5027 , - 3540 , - 2393 , - 1586 , - 1119 , - 992 , - 1205 , - 1758 , - 2651 , - 3884 , - 17 , - 1930 , - 4183 , - 1336 , - 4269 , - 2102 , - 275 , - 4228 , - 3081 , - 2274 , - 1807 , - 1680 , - 1893 , - 2446 , - 3339 , - 4572 , - 705 , - 2618 , - 4871 , - 2024 , - 4957 , - 2790 , - 963 , - 4916 , - 3769 , - 2962 , - 2495 , - 2368 , - 2581 , - 3134 , - 4027 , - 5260 , - 1393 , - 3306 , - 119 , - 2712 , - 205 , - 3478 , - 1651 , - 164 , - 4457 , - 3650 , - 3183 , - 3056 , - 3269 , - 3822 , - 4715 , - 508 , - 2081 , - 3994 , - 807 , - 3400 , - 893 , - 4166 , - 2339 , - 852 , - 5145 , - 4338 , - 3871 , - 3744 , - 3957 , - 4510 , - 5403 , - 1196 , - 2769 , - 4682 , - 1495 , - 4088 , - 1581 , - 4854 , - 3027 , - 1540 , - 393 , - 5026 , - 4559 , - 4432 , - 4645 , - 5198 , - 651 , - 1884 , - 3457 , - 5370 , - 2183 , - 4776 , - 2269 , - 102 , - 3715 , - 2228 , - 1081 , - 274 , - 5247 , - 5120 , - 5333 , - 446 , - 1339 , - 2572 , - 4145 , - 618 , - 2871 , - 24 , - 2957 , - 790 , - 4403 , - 2916 , - 1769 , - 962 , - 495 , - 368 , - 581 , - 1134 , - 2027 , - 3260 , - 4833 , - 1306 , - 3559 , - 712 , - 3645 , - 1478 , - 5091 , - 3604 , - 2457 , - 1650 , - 1183 , - 1056 , - 1269 , - 1822 , - 2715 , - 3948 , - 81 , - 1994 , - 4247 , - 1400 , - 4333 , - 2166 , - 339 , - 4292 , - 3145 , - 2338 , - 1871 , - 1744 , - 1957 , - 2510 , - 3403 , - 4636 , - 769 , - 2682 , - 4935 , - 2088 , - 5021 , - 2854 , - 1027 , - 4980 , - 3833 , - 3026 , - 2559 , - 2432 , - 2645 , - 3198 , - 4091 , - 5324 , - 1457 , - 3370 , - 183 , - 2776 , - 269 , - 3542 , - 1715 , - 228 , - 4521 , - 3714 , - 3247 , - 3120 , - 3333 , - 3886 , - 4779 , - 572 , - 2145 , - 4058 , - 871 , - 3464 , - 957 , - 4230 , - 2403 , - 916 , - 5209 , - 4402 , - 3935 , - 3808 , - 4021 , - 4574 , - 27 , - 1260 , - 2833 , - 4746 , - 1559 , - 4152 , - 1645 , - 4918 , - 3091 , - 1604 , - 457 , - 5090 , - 4623 , - 4496 , - 4709 , - 5262 , - 715 , - 1948 , - 3521 , - 5434 , - 2247 , - 4840 , - 2333 , - 166 , - 3779 , - 2292 , - 1145 , - 338 , - 5311 , - 5184 , - 5397 , - 510 , - 1403 , - 2636 , - 4209 , - 682 , - 2935 , - 88 , - 3021 , - 854 , - 4467 , - 2980 , - 1833 , - 1026 , - 559 , - 432 , - 645 , - 1198 , - 2091 , - 3324 , - 4897 , - 1370 , - 3623 , - 776 , - 3709 , - 1542 , - 5155 , - 3668 , - 2521 , - 1714 , - 1247 , - 1120 , - 1333 , - 1886 , - 2779 , - 4012 , - 145 , - 2058 , - 4311 , - 1464 , - 4397 , - 2230 , - 403 , - 4356 , - 3209 , - 2402 , - 1935 , - 1808 , - 2021 , - 2574 , - 3467 , - 4700 , - 833 , - 2746 , - 4999 , - 2152 , - 5085 , - 2918 , - 1091 , - 5044 , - 3897 , - 3090 , - 2623 , - 2496 , - 2709 , - 3262 , - 4155 , - 5388 , - 1521 , - 3434 , - 247 , - 2840 , - 333 , - 3606 , - 1779 , - 292 , - 4585 , - 3778 , - 3311 , - 3184 , - 3397 , - 3950 , - 4843 , - 636 , - 2209 , - 4122 , - 935 , - 3528 , - 1021 , - 4294 , - 2467 , - 980 , - 5273 , - 4466 , - 3999 , - 3872 , - 4085 , - 4638 , - 91 , - 1324 , - 2897 , - 4810 , - 1623 , - 4216 , - 1709 , - 4982 , - 3155 , - 1668 , - 521 , - 5154 , - 4687 , - 4560 , - 4773 , - 5326 , - 779 , - 2012 , - 3585 , - 58 , - 2311 , - 4904 , - 2397 , - 230 , - 3843 , - 2356 , - 1209 , - 402 , - 5375 , - 5248 , - 21 , - 574 , - 1467 , - 2700 , - 4273 , - 746 , - 2999 , - 152 , - 3085 , - 918 , - 4531 , - 3044 , - 1897 , - 1090 , - 623 , - 496 , - 709 , - 1262 , - 2155 , - 3388 , - 4961 , - 1434 , - 3687 , - 840 , - 3773 , - 1606 , - 5219 , - 3732 , - 2585 , - 1778 , - 1311 , - 1184 , - 1397 , - 1950 , - 2843 , - 4076 , - 209 , - 2122 , - 4375 , - 1528 , - 4461 , - 2294 , - 467 , - 4420 , - 3273 , - 2466 , - 1999 , - 1872 , - 2085 , - 2638 , - 3531 , - 4764 , - 897 , - 2810 , - 5063 , - 2216 , - 5149 , - 2982 , - 1155 , - 5108 , - 3961 , - 3154 , - 2687 , - 2560 , - 2773 , - 3326 , - 4219 , - 12 , - 1585 , - 3498 , - 311 , - 2904 , - 397 , - 3670 , - 1843 , - 356 , - 4649 , - 3842 , - 3375 , - 3248 , - 3461 , - 4014 , - 4907 , - 700 , - 2273 , - 4186 , - 999 , - 3592 , - 1085 , - 4358 , - 2531 , - 1044 , - 5337 , - 4530 , - 4063 , - 3936 , - 4149 , - 4702 , - 155 , - 1388 , - 2961 , - 4874 , - 1687 , - 4280 , - 1773 , - 5046 , - 3219 , - 1732 , - 585 , - 5218 , - 4751 , - 4624 , - 4837 , - 5390 , - 843 , - 2076 , - 3649 , - 122 , - 2375 , - 4968 , - 2461 , - 294 , - 3907 , - 2420 , - 1273 , - 466 , - 5439 , - 5312 , - 85 , - 638 , - 1531 , - 2764 , - 4337 , - 810 , - 3063 , - 216 , - 3149 , - 982 , - 4595 , - 3108 , - 1961 , - 1154 , - 687 , - 560 , - 773 , - 1326 , - 2219 , - 3452 , - 5025 , - 1498 , - 3751 , - 904 , - 3837 , - 1670 , - 5283 , - 3796 , - 2649 , - 1842 , - 1375 , - 1248 , - 1461 , - 2014 , - 2907 , - 4140 , - 273 , - 2186 , - 4439 , - 1592 , - 4525 , - 2358 , - 531 , - 4484 , - 3337 , - 2530 , - 2063 , - 1936 , - 2149 , - 2702 , - 3595 , - 4828 , - 961 , - 2874 , - 5127 , - 2280 , - 5213 , - 3046 , - 1219 , - 5172 , - 4025 , - 3218 , - 2751 , - 2624 , - 2837 , - 3390 , - 4283 , - 76 , - 1649 , - 3562 , - 375 , - 2968 , - 461 , - 3734 , - 1907 , - 420 , - 4713 , - 3906 , - 3439 , - 3312 , - 3525 , - 4078 , - 4971 , - 764 , - 2337 , - 4250 , - 1063 , - 3656 , - 1149 , - 4422 , - 2595 , - 1108 , - 5401 , - 4594 , - 4127 , - 4000 , - 4213 , - 4766 , - 219 , - 1452 , - 3025 , - 4938 , - 1751 , - 4344 , - 1837 , - 5110 , - 3283 , - 1796 , - 649 , - 5282 , - 4815 , - 4688 , - 4901 , - 14 , - 907 , - 2140 , - 3713 , - 186 , - 2439 , - 5032 , - 2525 , - 358 , - 3971 , - 2484 , - 1337 , - 530 , - 63 , - 5376 , - 149 , - 702 , - 1595 , - 2828 , - 4401 , - 874 , - 3127 , - 280 , - 3213 , - 1046 , - 4659 , - 3172 , - 2025 , - 1218 , - 751 , - 624 , - 837 , - 1390 , - 2283 , - 3516 , - 5089 , - 1562 , - 3815 , - 968 , - 3901 , - 1734 , - 5347 , - 3860 , - 2713 , - 1906 , - 1439 , - 1312 , - 1525 , - 2078 , - 2971 , - 4204 , - 337 , - 2250 , - 4503 , - 1656 , - 4589 , - 2422 , - 595 , - 4548 , - 3401 , - 2594 , - 2127 , - 2000 , - 2213 , - 2766 , - 3659 , - 4892 , - 1025 , - 2938 , - 5191 , - 2344 , - 5277 , - 3110 , - 1283 , - 5236 , - 4089 , - 3282 , - 2815 , - 2688 , - 2901 , - 3454 , - 4347 , - 140 , - 1713 , - 3626 , - 439 , - 3032 , - 525 , - 3798 , - 1971 , - 484 , - 4777 , - 3970 , - 3503 , - 3376 , - 3589 , - 4142 , - 5035 , - 828 , - 2401 , - 4314 , - 1127 , - 3720 , - 1213 , - 4486 , - 2659 , - 1172 , - 25 , - 4658 , - 4191 , - 4064 , - 4277 , - 4830 , - 283 , - 1516 , - 3089 , - 5002 , - 1815 , - 4408 , - 1901 , - 5174 , - 3347 , - 1860 , - 713 , - 5346 , - 4879 , - 4752 , - 4965 , - 78 , - 971 , - 2204 , - 3777 , - 250 , - 2503 , - 5096 , - 2589 , - 422 , - 4035 , - 2548 , - 1401 , - 594 , - 127 , - 0 , - 107 , - 386 , - 837 , - 1460 , - 2255 , - 3222 , - 4361 , - 168 , - 1651 , - 3306 , - 5133 , - 1628 , - 3799 , - 638 , - 3153 , - 336 , - 3195 , - 722 , - 3925 , - 1796 , - 5343 , - 3558 , - 1945 , - 504 , - 4739 , - 3642 , - 2717 , - 1964 , - 1383 , - 974 , - 737 , - 672 , - 779 , - 1058 , - 1509 , - 2132 , - 2927 , - 3894 , - 5033 , - 840 , - 2323 , - 3978 , - 301 , - 2300 , - 4471 , - 1310 , - 3825 , - 1008 , - 3867 , - 1394 , - 4597 , - 2468 , - 511 , - 4230 , - 2617 , - 1176 , - 5411 , - 4314 , - 3389 , - 2636 , - 2055 , - 1646 , - 1409 , - 1344 , - 1451 , - 1730 , - 2181 , - 2804 , - 3599 , - 4566 , - 201 , - 1512 , - 2995 , - 4650 , - 973 , - 2972 , - 5143 , - 1982 , - 4497 , - 1680 , - 4539 , - 2066 , - 5269 , - 3140 , - 1183 , - 4902 , - 3289 , - 1848 , - 579 , - 4986 , - 4061 , - 3308 , - 2727 , - 2318 , - 2081 , - 2016 , - 2123 , - 2402 , - 2853 , - 3476 , - 4271 , - 5238 , - 873 , - 2184 , - 3667 , - 5322 , - 1645 , - 3644 , - 311 , - 2654 , - 5169 , - 2352 , - 5211 , - 2738 , - 437 , - 3812 , - 1855 , - 70 , - 3961 , - 2520 , - 1251 , - 154 , - 4733 , - 3980 , - 3399 , - 2990 , - 2753 , - 2688 , - 2795 , - 3074 , - 3525 , - 4148 , - 4943 , - 406 , - 1545 , - 2856 , - 4339 , - 490 , - 2317 , - 4316 , - 983 , - 3326 , - 337 , - 3024 , - 379 , - 3410 , - 1109 , - 4484 , - 2527 , - 742 , - 4633 , - 3192 , - 1923 , - 826 , - 5405 , - 4652 , - 4071 , - 3662 , - 3425 , - 3360 , - 3467 , - 3746 , - 4197 , - 4820 , - 111 , - 1078 , - 2217 , - 3528 , - 5011 , - 1162 , - 2989 , - 4988 , - 1655 , - 3998 , - 1009 , - 3696 , - 1051 , - 4082 , - 1781 , - 5156 , - 3199 , - 1414 , - 5305 , - 3864 , - 2595 , - 1498 , - 573 , - 5324 , - 4743 , - 4334 , - 4097 , - 4032 , - 4139 , - 4418 , - 4869 , - 5492 , - 783 , - 1750 , - 2889 , - 4200 , - 179 , - 1834 , - 3661 , - 156 , - 2327 , - 4670 , - 1681 , - 4368 , - 1723 , - 4754 , - 2453 , - 324 , - 3871 , - 2086 , - 473 , - 4536 , - 3267 , - 2170 , - 1245 , - 492 , - 5415 , - 5006 , - 4769 , - 4704 , - 4811 , - 5090 , - 37 , - 660 , - 1455 , - 2422 , - 3561 , - 4872 , - 851 , - 2506 , - 4333 , - 828 , - 2999 , - 5342 , - 2353 , - 5040 , - 2395 , - 5426 , - 3125 , - 996 , - 4543 , - 2758 , - 1145 , - 5208 , - 3939 , - 2842 , - 1917 , - 1164 , - 583 , - 174 , - 5441 , - 5376 , - 5483 , - 258 , - 709 , - 1332 , - 2127 , - 3094 , - 4233 , - 40 , - 1523 , - 3178 , - 5005 , - 1500 , - 3671 , - 510 , - 3025 , - 208 , - 3067 , - 594 , - 3797 , - 1668 , - 5215 , - 3430 , - 1817 , - 376 , - 4611 , - 3514 , - 2589 , - 1836 , - 1255 , - 846 , - 609 , - 544 , - 651 , - 930 , - 1381 , - 2004 , - 2799 , - 3766 , - 4905 , - 712 , - 2195 , - 3850 , - 173 , - 2172 , - 4343 , - 1182 , - 3697 , - 880 , - 3739 , - 1266 , - 4469 , - 2340 , - 383 , - 4102 , - 2489 , - 1048 , - 5283 , - 4186 , - 3261 , - 2508 , - 1927 , - 1518 , - 1281 , - 1216 , - 1323 , - 1602 , - 2053 , - 2676 , - 3471 , - 4438 , - 73 , - 1384 , - 2867 , - 4522 , - 845 , - 2844 , - 5015 , - 1854 , - 4369 , - 1552 , - 4411 , - 1938 , - 5141 , - 3012 , - 1055 , - 4774 , - 3161 , - 1720 , - 451 , - 4858 , - 3933 , - 3180 , - 2599 , - 2190 , - 1953 , - 1888 , - 1995 , - 2274 , - 2725 , - 3348 , - 4143 , - 5110 , - 745 , - 2056 , - 3539 , - 5194 , - 1517 , - 3516 , - 183 , - 2526 , - 5041 , - 2224 , - 5083 , - 2610 , - 309 , - 3684 , - 1727 , - 5446 , - 3833 , - 2392 , - 1123 , - 26 , - 4605 , - 3852 , - 3271 , - 2862 , - 2625 , - 2560 , - 2667 , - 2946 , - 3397 , - 4020 , - 4815 , - 278 , - 1417 , - 2728 , - 4211 , - 362 , - 2189 , - 4188 , - 855 , - 3198 , - 209 , - 2896 , - 251 , - 3282 , - 981 , - 4356 , - 2399 , - 614 , - 4505 , - 3064 , - 1795 , - 698 , - 5277 , - 4524 , - 3943 , - 3534 , - 3297 , - 3232 , - 3339 , - 3618 , - 4069 , - 4692 , - 5487 , - 950 , - 2089 , - 3400 , - 4883 , - 1034 , - 2861 , - 4860 , - 1527 , - 3870 , - 881 , - 3568 , - 923 , - 3954 , - 1653 , - 5028 , - 3071 , - 1286 , - 5177 , - 3736 , - 2467 , - 1370 , - 445 , - 5196 , - 4615 , - 4206 , - 3969 , - 3904 , - 4011 , - 4290 , - 4741 , - 5364 , - 655 , - 1622 , - 2761 , - 4072 , - 51 , - 1706 , - 3533 , - 28 , - 2199 , - 4542 , - 1553 , - 4240 , - 1595 , - 4626 , - 2325 , - 196 , - 3743 , - 1958 , - 345 , - 4408 , - 3139 , - 2042 , - 1117 , - 364 , - 5287 , - 4878 , - 4641 , - 4576 , - 4683 , - 4962 , - 5413 , - 532 , - 1327 , - 2294 , - 3433 , - 4744 , - 723 , - 2378 , - 4205 , - 700 , - 2871 , - 5214 , - 2225 , - 4912 , - 2267 , - 5298 , - 2997 , - 868 , - 4415 , - 2630 , - 1017 , - 5080 , - 3811 , - 2714 , - 1789 , - 1036 , - 455 , - 46 , - 5313 , - 5248 , - 5355 , - 130 , - 581 , - 1204 , - 1999 , - 2966 , - 4105 , - 5416 , - 1395 , - 3050 , - 4877 , - 1372 , - 3543 , - 382 , - 2897 , - 80 , - 2939 , - 466 , - 3669 , - 1540 , - 5087 , - 3302 , - 1689 , - 248 , - 4483 , - 3386 , - 2461 , - 1708 , - 1127 , - 718 , - 481 , - 416 , - 523 , - 802 , - 1253 , - 1876 , - 2671 , - 3638 , - 4777 , - 584 , - 2067 , - 3722 , - 45 , - 2044 , - 4215 , - 1054 , - 3569 , - 752 , - 3611 , - 1138 , - 4341 , - 2212 , - 255 , - 3974 , - 2361 , - 920 , - 5155 , - 4058 , - 3133 , - 2380 , - 1799 , - 1390 , - 1153 , - 1088 , - 1195 , - 1474 , - 1925 , - 2548 , - 3343 , - 4310 , - 5449 , - 1256 , - 2739 , - 4394 , - 717 , - 2716 , - 4887 , - 1726 , - 4241 , - 1424 , - 4283 , - 1810 , - 5013 , - 2884 , - 927 , - 4646 , - 3033 , - 1592 , - 323 , - 4730 , - 3805 , - 3052 , - 2471 , - 2062 , - 1825 , - 1760 , - 1867 , - 2146 , - 2597 , - 3220 , - 4015 , - 4982 , - 617 , - 1928 , - 3411 , - 5066 , - 1389 , - 3388 , - 55 , - 2398 , - 4913 , - 2096 , - 4955 , - 2482 , - 181 , - 3556 , - 1599 , - 5318 , - 3705 , - 2264 , - 995 , - 5402 , - 4477 , - 3724 , - 3143 , - 2734 , - 2497 , - 2432 , - 2539 , - 2818 , - 3269 , - 3892 , - 4687 , - 150 , - 1289 , - 2600 , - 4083 , - 234 , - 2061 , - 4060 , - 727 , - 3070 , - 81 , - 2768 , - 123 , - 3154 , - 853 , - 4228 , - 2271 , - 486 , - 4377 , - 2936 , - 1667 , - 570 , - 5149 , - 4396 , - 3815 , - 3406 , - 3169 , - 3104 , - 3211 , - 3490 , - 3941 , - 4564 , - 5359 , - 822 , - 1961 , - 3272 , - 4755 , - 906 , - 2733 , - 4732 , - 1399 , - 3742 , - 753 , - 3440 , - 795 , - 3826 , - 1525 , - 4900 , - 2943 , - 1158 , - 5049 , - 3608 , - 2339 , - 1242 , - 317 , - 5068 , - 4487 , - 4078 , - 3841 , - 3776 , - 3883 , - 4162 , - 4613 , - 5236 , - 527 , - 1494 , - 2633 , - 3944 , - 5427 , - 1578 , - 3405 , - 5404 , - 2071 , - 4414 , - 1425 , - 4112 , - 1467 , - 4498 , - 2197 , - 68 , - 3615 , - 1830 , - 217 , - 4280 , - 3011 , - 1914 , - 989 , - 236 , - 5159 , - 4750 , - 4513 , - 4448 , - 4555 , - 4834 , - 5285 , - 404 , - 1199 , - 2166 , - 3305 , - 4616 , - 595 , - 2250 , - 4077 , - 572 , - 2743 , - 5086 , - 2097 , - 4784 , - 2139 , - 5170 , - 2869 , - 740 , - 4287 , - 2502 , - 889 , - 4952 , - 3683 , - 2586 , - 1661 , - 908 , - 327 , - 5422 , - 5185 , - 5120 , - 5227 , - 2 , - 453 , - 1076 , - 1871 , - 2838 , - 3977 , - 5288 , - 1267 , - 2922 , - 4749 , - 1244 , - 3415 , - 254 , - 2769 , - 5456 , - 2811 , - 338 , - 3541 , - 1412 , - 4959 , - 3174 , - 1561 , - 120 , - 4355 , - 3258 , - 2333 , - 1580 , - 999 , - 590 , - 353 , - 288 , - 395 , - 674 , - 1125 , - 1748 , - 2543 , - 3510 , - 4649 , - 456 , - 1939 , - 3594 , - 5421 , - 1916 , - 4087 , - 926 , - 3441 , - 624 , - 3483 , - 1010 , - 4213 , - 2084 , - 127 , - 3846 , - 2233 , - 792 , - 5027 , - 3930 , - 3005 , - 2252 , - 1671 , - 1262 , - 1025 , - 960 , - 1067 , - 1346 , - 1797 , - 2420 , - 3215 , - 4182 , - 5321 , - 1128 , - 2611 , - 4266 , - 589 , - 2588 , - 4759 , - 1598 , - 4113 , - 1296 , - 4155 , - 1682 , - 4885 , - 2756 , - 799 , - 4518 , - 2905 , - 1464 , - 195 , - 4602 , - 3677 , - 2924 , - 2343 , - 1934 , - 1697 , - 1632 , - 1739 , - 2018 , - 2469 , - 3092 , - 3887 , - 4854 , - 489 , - 1800 , - 3283 , - 4938 , - 1261 , - 3260 , - 5431 , - 2270 , - 4785 , - 1968 , - 4827 , - 2354 , - 53 , - 3428 , - 1471 , - 5190 , - 3577 , - 2136 , - 867 , - 5274 , - 4349 , - 3596 , - 3015 , - 2606 , - 2369 , - 2304 , - 2411 , - 2690 , - 3141 , - 3764 , - 4559 , - 22 , - 1161 , - 2472 , - 3955 , - 106 , - 1933 , - 3932 , - 599 , - 2942 , - 5457 , - 2640 , - 5499 , - 3026 , - 725 , - 4100 , - 2143 , - 358 , - 4249 , - 2808 , - 1539 , - 442 , - 5021 , - 4268 , - 3687 , - 3278 , - 3041 , - 2976 , - 3083 , - 3362 , - 3813 , - 4436 , - 5231 , - 694 , - 1833 , - 3144 , - 4627 , - 778 , - 2605 , - 4604 , - 1271 , - 3614 , - 625 , - 3312 , - 667 , - 3698 , - 1397 , - 4772 , - 2815 , - 1030 , - 4921 , - 3480 , - 2211 , - 1114 , - 189 , - 4940 , - 4359 , - 3950 , - 3713 , - 3648 , - 3755 , - 4034 , - 4485 , - 5108 , - 399 , - 1366 , - 2505 , - 3816 , - 5299 , - 1450 , - 3277 , - 5276 , - 1943 , - 4286 , - 1297 , - 3984 , - 1339 , - 4370 , - 2069 , - 5444 , - 3487 , - 1702 , - 89 , - 4152 , - 2883 , - 1786 , - 861 , - 108 , - 5031 , - 4622 , - 4385 , - 4320 , - 4427 , - 4706 , - 5157 , - 276 , - 1071 , - 2038 , - 3177 , - 4488 , - 467 , - 2122 , - 3949 , - 444 , - 2615 , - 4958 , - 1969 , - 4656 , - 2011 , - 5042 , - 2741 , - 612 , - 4159 , - 2374 , - 761 , - 4824 , - 3555 , - 2458 , - 1533 , - 780 , - 199 , - 5294 , - 5057 , - 4992 , - 5099 , - 5378 , - 325 , - 948 , - 1743 , - 2710 , - 3849 , - 5160 , - 1139 , - 2794 , - 4621 , - 1116 , - 3287 , - 126 , - 2641 , - 5328 , - 2683 , - 210 , - 3413 , - 1284 , - 4831 , - 3046 , - 1433 , - 5496 , - 4227 , - 3130 , - 2205 , - 1452 , - 871 , - 462 , - 225 , - 160 , - 267 , - 546 , - 997 , - 1620 , - 2415 , - 3382 , - 4521 , - 328 , - 1811 , - 3466 , - 5293 , - 1788 , - 3959 , - 798 , - 3313 , - 496 , - 3355 , - 882 , - 4085 , - 1956 , - 5503 , - 3718 , - 2105 , - 664 , - 4899 , - 3802 , - 2877 , - 2124 , - 1543 , - 1134 , - 897 , - 832 , - 939 , - 1218 , - 1669 , - 2292 , - 3087 , - 4054 , - 5193 , - 1000 , - 2483 , - 4138 , - 461 , - 2460 , - 4631 , - 1470 , - 3985 , - 1168 , - 4027 , - 1554 , - 4757 , - 2628 , - 671 , - 4390 , - 2777 , - 1336 , - 67 , - 4474 , - 3549 , - 2796 , - 2215 , - 1806 , - 1569 , - 1504 , - 1611 , - 1890 , - 2341 , - 2964 , - 3759 , - 4726 , - 361 , - 1672 , - 3155 , - 4810 , - 1133 , - 3132 , - 5303 , - 2142 , - 4657 , - 1840 , - 4699 , - 2226 , - 5429 , - 3300 , - 1343 , - 5062 , - 3449 , - 2008 , - 739 , - 5146 , - 4221 , - 3468 , - 2887 , - 2478 , - 2241 , - 2176 , - 2283 , - 2562 , - 3013 , - 3636 , - 4431 , - 5398 , - 1033 , - 2344 , - 3827 , - 5482 , - 1805 , - 3804 , - 471 , - 2814 , - 5329 , - 2512 , - 5371 , - 2898 , - 597 , - 3972 , - 2015 , - 230 , - 4121 , - 2680 , - 1411 , - 314 , - 4893 , - 4140 , - 3559 , - 3150 , - 2913 , - 2848 , - 2955 , - 3234 , - 3685 , - 4308 , - 5103 , - 566 , - 1705 , - 3016 , - 4499 , - 650 , - 2477 , - 4476 , - 1143 , - 3486 , - 497 , - 3184 , - 539 , - 3570 , - 1269 , - 4644 , - 2687 , - 902 , - 4793 , - 3352 , - 2083 , - 986 , - 61 , - 4812 , - 4231 , - 3822 , - 3585 , - 3520 , - 3627 , - 3906 , - 4357 , - 4980 , - 271 , - 1238 , - 2377 , - 3688 , - 5171 , - 1322 , - 3149 , - 5148 , - 1815 , - 4158 , - 1169 , - 3856 , - 1211 , - 4242 , - 1941 , - 5316 , - 3359 , - 1574 , - 5465 , - 4024 , - 2755 , - 1658 , - 733 , - 5484 , - 4903 , - 4494 , - 4257 , - 4192 , - 4299 , - 4578 , - 5029 , - 148 , - 943 , - 1910 , - 3049 , - 4360 , - 339 , - 1994 , - 3821 , - 316 , - 2487 , - 4830 , - 1841 , - 4528 , - 1883 , - 4914 , - 2613 , - 484 , - 4031 , - 2246 , - 633 , - 4696 , - 3427 , - 2330 , - 1405 , - 652 , - 71 , - 5166 , - 4929 , - 4864 , - 4971 , - 5250 , - 197 , - 820 , - 1615 , - 2582 , - 3721 , - 5032 , - 1011 , - 2666 , - 4493 , - 988 , - 3159 , - 5502 , - 2513 , - 5200 , - 2555 , - 82 , - 3285 , - 1156 , - 4703 , - 2918 , - 1305 , - 5368 , - 4099 , - 3002 , - 2077 , - 1324 , - 743 , - 334 , - 97 , - 32 , - 139 , - 418 , - 869 , - 1492 , - 2287 , - 3254 , - 4393 , - 200 , - 1683 , - 3338 , - 5165 , - 1660 , - 3831 , - 670 , - 3185 , - 368 , - 3227 , - 754 , - 3957 , - 1828 , - 5375 , - 3590 , - 1977 , - 536 , - 4771 , - 3674 , - 2749 , - 1996 , - 1415 , - 1006 , - 769 , - 704 , - 811 , - 1090 , - 1541 , - 2164 , - 2959 , - 3926 , - 5065 , - 872 , - 2355 , - 4010 , - 333 , - 2332 , - 4503 , - 1342 , - 3857 , - 1040 , - 3899 , - 1426 , - 4629 , - 2500 , - 543 , - 4262 , - 2649 , - 1208 , - 5443 , - 4346 , - 3421 , - 2668 , - 2087 , - 1678 , - 1441 , - 1376 , - 1483 , - 1762 , - 2213 , - 2836 , - 3631 , - 4598 , - 233 , - 1544 , - 3027 , - 4682 , - 1005 , - 3004 , - 5175 , - 2014 , - 4529 , - 1712 , - 4571 , - 2098 , - 5301 , - 3172 , - 1215 , - 4934 , - 3321 , - 1880 , - 611 , - 5018 , - 4093 , - 3340 , - 2759 , - 2350 , - 2113 , - 2048 , - 2155 , - 2434 , - 2885 , - 3508 , - 4303 , - 5270 , - 905 , - 2216 , - 3699 , - 5354 , - 1677 , - 3676 , - 343 , - 2686 , - 5201 , - 2384 , - 5243 , - 2770 , - 469 , - 3844 , - 1887 , - 102 , - 3993 , - 2552 , - 1283 , - 186 , - 4765 , - 4012 , - 3431 , - 3022 , - 2785 , - 2720 , - 2827 , - 3106 , - 3557 , - 4180 , - 4975 , - 438 , - 1577 , - 2888 , - 4371 , - 522 , - 2349 , - 4348 , - 1015 , - 3358 , - 369 , - 3056 , - 411 , - 3442 , - 1141 , - 4516 , - 2559 , - 774 , - 4665 , - 3224 , - 1955 , - 858 , - 5437 , - 4684 , - 4103 , - 3694 , - 3457 , - 3392 , - 3499 , - 3778 , - 4229 , - 4852 , - 143 , - 1110 , - 2249 , - 3560 , - 5043 , - 1194 , - 3021 , - 5020 , - 1687 , - 4030 , - 1041 , - 3728 , - 1083 , - 4114 , - 1813 , - 5188 , - 3231 , - 1446 , - 5337 , - 3896 , - 2627 , - 1530 , - 605 , - 5356 , - 4775 , - 4366 , - 4129 , - 4064 , - 4171 , - 4450 , - 4901 , - 20 , - 815 , - 1782 , - 2921 , - 4232 , - 211 , - 1866 , - 3693 , - 188 , - 2359 , - 4702 , - 1713 , - 4400 , - 1755 , - 4786 , - 2485 , - 356 , - 3903 , - 2118 , - 505 , - 4568 , - 3299 , - 2202 , - 1277 , - 524 , - 5447 , - 5038 , - 4801 , - 4736 , - 4843 , - 5122 , - 69 , - 692 , - 1487 , - 2454 , - 3593 , - 4904 , - 883 , - 2538 , - 4365 , - 860 , - 3031 , - 5374 , - 2385 , - 5072 , - 2427 , - 5458 , - 3157 , - 1028 , - 4575 , - 2790 , - 1177 , - 5240 , - 3971 , - 2874 , - 1949 , - 1196 , - 615 , - 206 , - 5473 , - 5408 , - 11 , - 290 , - 741 , - 1364 , - 2159 , - 3126 , - 4265 , - 72 , - 1555 , - 3210 , - 5037 , - 1532 , - 3703 , - 542 , - 3057 , - 240 , - 3099 , - 626 , - 3829 , - 1700 , - 5247 , - 3462 , - 1849 , - 408 , - 4643 , - 3546 , - 2621 , - 1868 , - 1287 , - 878 , - 641 , - 576 , - 683 , - 962 , - 1413 , - 2036 , - 2831 , - 3798 , - 4937 , - 744 , - 2227 , - 3882 , - 205 , - 2204 , - 4375 , - 1214 , - 3729 , - 912 , - 3771 , - 1298 , - 4501 , - 2372 , - 415 , - 4134 , - 2521 , - 1080 , - 5315 , - 4218 , - 3293 , - 2540 , - 1959 , - 1550 , - 1313 , - 1248 , - 1355 , - 1634 , - 2085 , - 2708 , - 3503 , - 4470 , - 105 , - 1416 , - 2899 , - 4554 , - 877 , - 2876 , - 5047 , - 1886 , - 4401 , - 1584 , - 4443 , - 1970 , - 5173 , - 3044 , - 1087 , - 4806 , - 3193 , - 1752 , - 483 , - 4890 , - 3965 , - 3212 , - 2631 , - 2222 , - 1985 , - 1920 , - 2027 , - 2306 , - 2757 , - 3380 , - 4175 , - 5142 , - 777 , - 2088 , - 3571 , - 5226 , - 1549 , - 3548 , - 215 , - 2558 , - 5073 , - 2256 , - 5115 , - 2642 , - 341 , - 3716 , - 1759 , - 5478 , - 3865 , - 2424 , - 1155 , - 58 , - 4637 , - 3884 , - 3303 , - 2894 , - 2657 , - 2592 , - 2699 , - 2978 , - 3429 , - 4052 , - 4847 , - 310 , - 1449 , - 2760 , - 4243 , - 394 , - 2221 , - 4220 , - 887 , - 3230 , - 241 , - 2928 , - 283 , - 3314 , - 1013 , - 4388 , - 2431 , - 646 , - 4537 , - 3096 , - 1827 , - 730 , - 5309 , - 4556 , - 3975 , - 3566 , - 3329 , - 3264 , - 3371 , - 3650 , - 4101 , - 4724 , - 15 , - 982 , - 2121 , - 3432 , - 4915 , - 1066 , - 2893 , - 4892 , - 1559 , - 3902 , - 913 , - 3600 , - 955 , - 3986 , - 1685 , - 5060 , - 3103 , - 1318 , - 5209 , - 3768 , - 2499 , - 1402 , - 477 , - 5228 , - 4647 , - 4238 , - 4001 , - 3936 , - 4043 , - 4322 , - 4773 , - 5396 , - 687 , - 1654 , - 2793 , - 4104 , - 83 , - 1738 , - 3565 , - 60 , - 2231 , - 4574 , - 1585 , - 4272 , - 1627 , - 4658 , - 2357 , - 228 , - 3775 , - 1990 , - 377 , - 4440 , - 3171 , - 2074 , - 1149 , - 396 , - 5319 , - 4910 , - 4673 , - 4608 , - 4715 , - 4994 , - 5445 , - 564 , - 1359 , - 2326 , - 3465 , - 4776 , - 755 , - 2410 , - 4237 , - 732 , - 2903 , - 5246 , - 2257 , - 4944 , - 2299 , - 5330 , - 3029 , - 900 , - 4447 , - 2662 , - 1049 , - 5112 , - 3843 , - 2746 , - 1821 , - 1068 , - 487 , - 78 , - 5345 , - 5280 , - 5387 , - 162 , - 613 , - 1236 , - 2031 , - 2998 , - 4137 , - 5448 , - 1427 , - 3082 , - 4909 , - 1404 , - 3575 , - 414 , - 2929 , - 112 , - 2971 , - 498 , - 3701 , - 1572 , - 5119 , - 3334 , - 1721 , - 280 , - 4515 , - 3418 , - 2493 , - 1740 , - 1159 , - 750 , - 513 , - 448 , - 555 , - 834 , - 1285 , - 1908 , - 2703 , - 3670 , - 4809 , - 616 , - 2099 , - 3754 , - 77 , - 2076 , - 4247 , - 1086 , - 3601 , - 784 , - 3643 , - 1170 , - 4373 , - 2244 , - 287 , - 4006 , - 2393 , - 952 , - 5187 , - 4090 , - 3165 , - 2412 , - 1831 , - 1422 , - 1185 , - 1120 , - 1227 , - 1506 , - 1957 , - 2580 , - 3375 , - 4342 , - 5481 , - 1288 , - 2771 , - 4426 , - 749 , - 2748 , - 4919 , - 1758 , - 4273 , - 1456 , - 4315 , - 1842 , - 5045 , - 2916 , - 959 , - 4678 , - 3065 , - 1624 , - 355 , - 4762 , - 3837 , - 3084 , - 2503 , - 2094 , - 1857 , - 1792 , - 1899 , - 2178 , - 2629 , - 3252 , - 4047 , - 5014 , - 649 , - 1960 , - 3443 , - 5098 , - 1421 , - 3420 , - 87 , - 2430 , - 4945 , - 2128 , - 4987 , - 2514 , - 213 , - 3588 , - 1631 , - 5350 , - 3737 , - 2296 , - 1027 , - 5434 , - 4509 , - 3756 , - 3175 , - 2766 , - 2529 , - 2464 , - 2571 , - 2850 , - 3301 , - 3924 , - 4719 , - 182 , - 1321 , - 2632 , - 4115 , - 266 , - 2093 , - 4092 , - 759 , - 3102 , - 113 , - 2800 , - 155 , - 3186 , - 885 , - 4260 , - 2303 , - 518 , - 4409 , - 2968 , - 1699 , - 602 , - 5181 , - 4428 , - 3847 , - 3438 , - 3201 , - 3136 , - 3243 , - 3522 , - 3973 , - 4596 , - 5391 , - 854 , - 1993 , - 3304 , - 4787 , - 938 , - 2765 , - 4764 , - 1431 , - 3774 , - 785 , - 3472 , - 827 , - 3858 , - 1557 , - 4932 , - 2975 , - 1190 , - 5081 , - 3640 , - 2371 , - 1274 , - 349 , - 5100 , - 4519 , - 4110 , - 3873 , - 3808 , - 3915 , - 4194 , - 4645 , - 5268 , - 559 , - 1526 , - 2665 , - 3976 , - 5459 , - 1610 , - 3437 , - 5436 , - 2103 , - 4446 , - 1457 , - 4144 , - 1499 , - 4530 , - 2229 , - 100 , - 3647 , - 1862 , - 249 , - 4312 , - 3043 , - 1946 , - 1021 , - 268 , - 5191 , - 4782 , - 4545 , - 4480 , - 4587 , - 4866 , - 5317 , - 436 , - 1231 , - 2198 , - 3337 , - 4648 , - 627 , - 2282 , - 4109 , - 604 , - 2775 , - 5118 , - 2129 , - 4816 , - 2171 , - 5202 , - 2901 , - 772 , - 4319 , - 2534 , - 921 , - 4984 , - 3715 , - 2618 , - 1693 , - 940 , - 359 , - 5454 , - 5217 , - 5152 , - 5259 , - 34 , - 485 , - 1108 , - 1903 , - 2870 , - 4009 , - 5320 , - 1299 , - 2954 , - 4781 , - 1276 , - 3447 , - 286 , - 2801 , - 5488 , - 2843 , - 370 , - 3573 , - 1444 , - 4991 , - 3206 , - 1593 , - 152 , - 4387 , - 3290 , - 2365 , - 1612 , - 1031 , - 622 , - 385 , - 320 , - 427 , - 706 , - 1157 , - 1780 , - 2575 , - 3542 , - 4681 , - 488 , - 1971 , - 3626 , - 5453 , - 1948 , - 4119 , - 958 , - 3473 , - 656 , - 3515 , - 1042 , - 4245 , - 2116 , - 159 , - 3878 , - 2265 , - 824 , - 5059 , - 3962 , - 3037 , - 2284 , - 1703 , - 1294 , - 1057 , - 992 , - 1099 , - 1378 , - 1829 , - 2452 , - 3247 , - 4214 , - 5353 , - 1160 , - 2643 , - 4298 , - 621 , - 2620 , - 4791 , - 1630 , - 4145 , - 1328 , - 4187 , - 1714 , - 4917 , - 2788 , - 831 , - 4550 , - 2937 , - 1496 , - 227 , - 4634 , - 3709 , - 2956 , - 2375 , - 1966 , - 1729 , - 1664 , - 1771 , - 2050 , - 2501 , - 3124 , - 3919 , - 4886 , - 521 , - 1832 , - 3315 , - 4970 , - 1293 , - 3292 , - 5463 , - 2302 , - 4817 , - 2000 , - 4859 , - 2386 , - 85 , - 3460 , - 1503 , - 5222 , - 3609 , - 2168 , - 899 , - 5306 , - 4381 , - 3628 , - 3047 , - 2638 , - 2401 , - 2336 , - 2443 , - 2722 , - 3173 , - 3796 , - 4591 , - 54 , - 1193 , - 2504 , - 3987 , - 138 , - 1965 , - 3964 , - 631 , - 2974 , - 5489 , - 2672 , - 27 , - 3058 , - 757 , - 4132 , - 2175 , - 390 , - 4281 , - 2840 , - 1571 , - 474 , - 5053 , - 4300 , - 3719 , - 3310 , - 3073 , - 3008 , - 3115 , - 3394 , - 3845 , - 4468 , - 5263 , - 726 , - 1865 , - 3176 , - 4659 , - 810 , - 2637 , - 4636 , - 1303 , - 3646 , - 657 , - 3344 , - 699 , - 3730 , - 1429 , - 4804 , - 2847 , - 1062 , - 4953 , - 3512 , - 2243 , - 1146 , - 221 , - 4972 , - 4391 , - 3982 , - 3745 , - 3680 , - 3787 , - 4066 , - 4517 , - 5140 , - 431 , - 1398 , - 2537 , - 3848 , - 5331 , - 1482 , - 3309 , - 5308 , - 1975 , - 4318 , - 1329 , - 4016 , - 1371 , - 4402 , - 2101 , - 5476 , - 3519 , - 1734 , - 121 , - 4184 , - 2915 , - 1818 , - 893 , - 140 , - 5063 , - 4654 , - 4417 , - 4352 , - 4459 , - 4738 , - 5189 , - 308 , - 1103 , - 2070 , - 3209 , - 4520 , - 499 , - 2154 , - 3981 , - 476 , - 2647 , - 4990 , - 2001 , - 4688 , - 2043 , - 5074 , - 2773 , - 644 , - 4191 , - 2406 , - 793 , - 4856 , - 3587 , - 2490 , - 1565 , - 812 , - 231 , - 5326 , - 5089 , - 5024 , - 5131 , - 5410 , - 357 , - 980 , - 1775 , - 2742 , - 3881 , - 5192 , - 1171 , - 2826 , - 4653 , - 1148 , - 3319 , - 158 , - 2673 , - 5360 , - 2715 , - 242 , - 3445 , - 1316 , - 4863 , - 3078 , - 1465 , - 24 , - 4259 , - 3162 , - 2237 , - 1484 , - 903 , - 494 , - 257 , - 192 , - 299 , - 578 , - 1029 , - 1652 , - 2447 , - 3414 , - 4553 , - 360 , - 1843 , - 3498 , - 5325 , - 1820 , - 3991 , - 830 , - 3345 , - 528 , - 3387 , - 914 , - 4117 , - 1988 , - 31 , - 3750 , - 2137 , - 696 , - 4931 , - 3834 , - 2909 , - 2156 , - 1575 , - 1166 , - 929 , - 864 , - 971 , - 1250 , - 1701 , - 2324 , - 3119 , - 4086 , - 5225 , - 1032 , - 2515 , - 4170 , - 493 , - 2492 , - 4663 , - 1502 , - 4017 , - 1200 , - 4059 , - 1586 , - 4789 , - 2660 , - 703 , - 4422 , - 2809 , - 1368 , - 99 , - 4506 , - 3581 , - 2828 , - 2247 , - 1838 , - 1601 , - 1536 , - 1643 , - 1922 , - 2373 , - 2996 , - 3791 , - 4758 , - 393 , - 1704 , - 3187 , - 4842 , - 1165 , - 3164 , - 5335 , - 2174 , - 4689 , - 1872 , - 4731 , - 2258 , - 5461 , - 3332 , - 1375 , - 5094 , - 3481 , - 2040 , - 771 , - 5178 , - 4253 , - 3500 , - 2919 , - 2510 , - 2273 , - 2208 , - 2315 , - 2594 , - 3045 , - 3668 , - 4463 , - 5430 , - 1065 , - 2376 , - 3859 , - 10 , - 1837 , - 3836 , - 503 , - 2846 , - 5361 , - 2544 , - 5403 , - 2930 , - 629 , - 4004 , - 2047 , - 262 , - 4153 , - 2712 , - 1443 , - 346 , - 4925 , - 4172 , - 3591 , - 3182 , - 2945 , - 2880 , - 2987 , - 3266 , - 3717 , - 4340 , - 5135 , - 598 , - 1737 , - 3048 , - 4531 , - 682 , - 2509 , - 4508 , - 1175 , - 3518 , - 529 , - 3216 , - 571 , - 3602 , - 1301 , - 4676 , - 2719 , - 934 , - 4825 , - 3384 , - 2115 , - 1018 , - 93 , - 4844 , - 4263 , - 3854 , - 3617 , - 3552 , - 3659 , - 3938 , - 4389 , - 5012 , - 303 , - 1270 , - 2409 , - 3720 , - 5203 , - 1354 , - 3181 , - 5180 , - 1847 , - 4190 , - 1201 , - 3888 , - 1243 , - 4274 , - 1973 , - 5348 , - 3391 , - 1606 , - 5497 , - 4056 , - 2787 , - 1690 , - 765 , - 12 , - 4935 , - 4526 , - 4289 , - 4224 , - 4331 , - 4610 , - 5061 , - 180 , - 975 , - 1942 , - 3081 , - 4392 , - 371 , - 2026 , - 3853 , - 348 , - 2519 , - 4862 , - 1873 , - 4560 , - 1915 , - 4946 , - 2645 , - 516 , - 4063 , - 2278 , - 665 , - 4728 , - 3459 , - 2362 , - 1437 , - 684 , - 103 , - 5198 , - 4961 , - 4896 , - 5003 , - 5282 , - 229 , - 852 , - 1647 , - 2614 , - 3753 , - 5064 , - 1043 , - 2698 , - 4525 , - 1020 , - 3191 , - 30 , - 2545 , - 5232 , - 2587 , - 114 , - 3317 , - 1188 , - 4735 , - 2950 , - 1337 , - 5400 , - 4131 , - 3034 , - 2109 , - 1356 , - 775 , - 366 , - 129 , - 64 , - 171 , - 450 , - 901 , - 1524 , - 2319 , - 3286 , - 4425 , - 232 , - 1715 , - 3370 , - 5197 , - 1692 , - 3863 , - 702 , - 3217 , - 400 , - 3259 , - 786 , - 3989 , - 1860 , - 5407 , - 3622 , - 2009 , - 568 , - 4803 , - 3706 , - 2781 , - 2028 , - 1447 , - 1038 , - 801 , - 736 , - 843 , - 1122 , - 1573 , - 2196 , - 2991 , - 3958 , - 5097 , - 904 , - 2387 , - 4042 , - 365 , - 2364 , - 4535 , - 1374 , - 3889 , - 1072 , - 3931 , - 1458 , - 4661 , - 2532 , - 575 , - 4294 , - 2681 , - 1240 , - 5475 , - 4378 , - 3453 , - 2700 , - 2119 , - 1710 , - 1473 , - 1408 , - 1515 , - 1794 , - 2245 , - 2868 , - 3663 , - 4630 , - 265 , - 1576 , - 3059 , - 4714 , - 1037 , - 3036 , - 5207 , - 2046 , - 4561 , - 1744 , - 4603 , - 2130 , - 5333 , - 3204 , - 1247 , - 4966 , - 3353 , - 1912 , - 643 , - 5050 , - 4125 , - 3372 , - 2791 , - 2382 , - 2145 , - 2080 , - 2187 , - 2466 , - 2917 , - 3540 , - 4335 , - 5302 , - 937 , - 2248 , - 3731 , - 5386 , - 1709 , - 3708 , - 375 , - 2718 , - 5233 , - 2416 , - 5275 , - 2802 , - 501 , - 3876 , - 1919 , - 134 , - 4025 , - 2584 , - 1315 , - 218 , - 4797 , - 4044 , - 3463 , - 3054 , - 2817 , - 2752 , - 2859 , - 3138 , - 3589 , - 4212 , - 5007 , - 470 , - 1609 , - 2920 , - 4403 , - 554 , - 2381 , - 4380 , - 1047 , - 3390 , - 401 , - 3088 , - 443 , - 3474 , - 1173 , - 4548 , - 2591 , - 806 , - 4697 , - 3256 , - 1987 , - 890 , - 5469 , - 4716 , - 4135 , - 3726 , - 3489 , - 3424 , - 3531 , - 3810 , - 4261 , - 4884 , - 175 , - 1142 , - 2281 , - 3592 , - 5075 , - 1226 , - 3053 , - 5052 , - 1719 , - 4062 , - 1073 , - 3760 , - 1115 , - 4146 , - 1845 , - 5220 , - 3263 , - 1478 , - 5369 , - 3928 , - 2659 , - 1562 , - 637 , - 5388 , - 4807 , - 4398 , - 4161 , - 4096 , - 4203 , - 4482 , - 4933 , - 52 , - 847 , - 1814 , - 2953 , - 4264 , - 243 , - 1898 , - 3725 , - 220 , - 2391 , - 4734 , - 1745 , - 4432 , - 1787 , - 4818 , - 2517 , - 388 , - 3935 , - 2150 , - 537 , - 4600 , - 3331 , - 2234 , - 1309 , - 556 , - 5479 , - 5070 , - 4833 , - 4768 , - 4875 , - 5154 , - 101 , - 724 , - 1519 , - 2486 , - 3625 , - 4936 , - 915 , - 2570 , - 4397 , - 892 , - 3063 , - 5406 , - 2417 , - 5104 , - 2459 , - 5490 , - 3189 , - 1060 , - 4607 , - 2822 , - 1209 , - 5272 , - 4003 , - 2906 , - 1981 , - 1228 , - 647 , - 238 , - 1 , - 5440 , - 43 , - 322 , - 773 , - 1396 , - 2191 , - 3158 , - 4297 , - 104 , - 1587 , - 3242 , - 5069 , - 1564 , - 3735 , - 574 , - 3089 , - 272 , - 3131 , - 658 , - 3861 , - 1732 , - 5279 , - 3494 , - 1881 , - 440 , - 4675 , - 3578 , - 2653 , - 1900 , - 1319 , - 910 , - 673 , - 608 , - 715 , - 994 , - 1445 , - 2068 , - 2863 , - 3830 , - 4969 , - 776 , - 2259 , - 3914 , - 237 , - 2236 , - 4407 , - 1246 , - 3761 , - 944 , - 3803 , - 1330 , - 4533 , - 2404 , - 447 , - 4166 , - 2553 , - 1112 , - 5347 , - 4250 , - 3325 , - 2572 , - 1991 , - 1582 , - 1345 , - 1280 , - 1387 , - 1666 , - 2117 , - 2740 , - 3535 , - 4502 , - 137 , - 1448 , - 2931 , - 4586 , - 909 , - 2908 , - 5079 , - 1918 , - 4433 , - 1616 , - 4475 , - 2002 , - 5205 , - 3076 , - 1119 , - 4838 , - 3225 , - 1784 , - 515 , - 4922 , - 3997 , - 3244 , - 2663 , - 2254 , - 2017 , - 1952 , - 2059 , - 2338 , - 2789 , - 3412 , - 4207 , - 5174 , - 809 , - 2120 , - 3603 , - 5258 , - 1581 , - 3580 , - 247 , - 2590 , - 5105 , - 2288 , - 5147 , - 2674 , - 373 , - 3748 , - 1791 , - 6 , - 3897 , - 2456 , - 1187 , - 90 , - 4669 , - 3916 , - 3335 , - 2926 , - 2689 , - 2624 , - 2731 , - 3010 , - 3461 , - 4084 , - 4879 , - 342 , - 1481 , - 2792 , - 4275 , - 426 , - 2253 , - 4252 , - 919 , - 3262 , - 273 , - 2960 , - 315 , - 3346 , - 1045 , - 4420 , - 2463 , - 678 , - 4569 , - 3128 , - 1859 , - 762 , - 5341 , - 4588 , - 4007 , - 3598 , - 3361 , - 3296 , - 3403 , - 3682 , - 4133 , - 4756 , - 47 , - 1014 , - 2153 , - 3464 , - 4947 , - 1098 , - 2925 , - 4924 , - 1591 , - 3934 , - 945 , - 3632 , - 987 , - 4018 , - 1717 , - 5092 , - 3135 , - 1350 , - 5241 , - 3800 , - 2531 , - 1434 , - 509 , - 5260 , - 4679 , - 4270 , - 4033 , - 3968 , - 4075 , - 4354 , - 4805 , - 5428 , - 719 , - 1686 , - 2825 , - 4136 , - 115 , - 1770 , - 3597 , - 92 , - 2263 , - 4606 , - 1617 , - 4304 , - 1659 , - 4690 , - 2389 , - 260 , - 3807 , - 2022 , - 409 , - 4472 , - 3203 , - 2106 , - 1181 , - 428 , - 5351 , - 4942 , - 4705 , - 4640 , - 4747 , - 5026 , - 5477 , - 596 , - 1391 , - 2358 , - 3497 , - 4808 , - 787 , - 2442 , - 4269 , - 764 , - 2935 , - 5278 , - 2289 , - 4976 , - 2331 , - 5362 , - 3061 , - 932 , - 4479 , - 2694 , - 1081 , - 5144 , - 3875 , - 2778 , - 1853 , - 1100 , - 519 , - 110 , - 5377 , - 5312 , - 5419 , - 194 , - 645 , - 1268 , - 2063 , - 3030 , - 4169 , - 5480 , - 1459 , - 3114 , - 4941 , - 1436 , - 3607 , - 446 , - 2961 , - 144 , - 3003 , - 530 , - 3733 , - 1604 , - 5151 , - 3366 , - 1753 , - 312 , - 4547 , - 3450 , - 2525 , - 1772 , - 1191 , - 782 , - 545 , - 480 , - 587 , - 866 , - 1317 , - 1940 , - 2735 , - 3702 , - 4841 , - 648 , - 2131 , - 3786 , - 109 , - 2108 , - 4279 , - 1118 , - 3633 , - 816 , - 3675 , - 1202 , - 4405 , - 2276 , - 319 , - 4038 , - 2425 , - 984 , - 5219 , - 4122 , - 3197 , - 2444 , - 1863 , - 1454 , - 1217 , - 1152 , - 1259 , - 1538 , - 1989 , - 2612 , - 3407 , - 4374 , - 9 , - 1320 , - 2803 , - 4458 , - 781 , - 2780 , - 4951 , - 1790 , - 4305 , - 1488 , - 4347 , - 1874 , - 5077 , - 2948 , - 991 , - 4710 , - 3097 , - 1656 , - 387 , - 4794 , - 3869 , - 3116 , - 2535 , - 2126 , - 1889 , - 1824 , - 1931 , - 2210 , - 2661 , - 3284 , - 4079 , - 5046 , - 681 , - 1992 , - 3475 , - 5130 , - 1453 , - 3452 , - 119 , - 2462 , - 4977 , - 2160 , - 5019 , - 2546 , - 245 , - 3620 , - 1663 , - 5382 , - 3769 , - 2328 , - 1059 , - 5466 , - 4541 , - 3788 , - 3207 , - 2798 , - 2561 , - 2496 , - 2603 , - 2882 , - 3333 , - 3956 , - 4751 , - 214 , - 1353 , - 2664 , - 4147 , - 298 , - 2125 , - 4124 , - 791 , - 3134 , - 145 , - 2832 , - 187 , - 3218 , - 917 , - 4292 , - 2335 , - 550 , - 4441 , - 3000 , - 1731 , - 634 , - 5213 , - 4460 , - 3879 , - 3470 , - 3233 , - 3168 , - 3275 , - 3554 , - 4005 , - 4628 , - 5423 , - 886 , - 2025 , - 3336 , - 4819 , - 970 , - 2797 , - 4796 , - 1463 , - 3806 , - 817 , - 3504 , - 859 , - 3890 , - 1589 , - 4964 , - 3007 , - 1222 , - 5113 , - 3672 , - 2403 , - 1306 , - 381 , - 5132 , - 4551 , - 4142 , - 3905 , - 3840 , - 3947 , - 4226 , - 4677 , - 5300 , - 591 , - 1558 , - 2697 , - 4008 , - 5491 , - 1642 , - 3469 , - 5468 , - 2135 , - 4478 , - 1489 , - 4176 , - 1531 , - 4562 , - 2261 , - 132 , - 3679 , - 1894 , - 281 , - 4344 , - 3075 , - 1978 , - 1053 , - 300 , - 5223 , - 4814 , - 4577 , - 4512 , - 4619 , - 4898 , - 5349 , - 468 , - 1263 , - 2230 , - 3369 , - 4680 , - 659 , - 2314 , - 4141 , - 636 , - 2807 , - 5150 , - 2161 , - 4848 , - 2203 , - 5234 , - 2933 , - 804 , - 4351 , - 2566 , - 953 , - 5016 , - 3747 , - 2650 , - 1725 , - 972 , - 391 , - 5486 , - 5249 , - 5184 , - 5291 , - 66 , - 517 , - 1140 , - 1935 , - 2902 , - 4041 , - 5352 , - 1331 , - 2986 , - 4813 , - 1308 , - 3479 , - 318 , - 2833 , - 16 , - 2875 , - 402 , - 3605 , - 1476 , - 5023 , - 3238 , - 1625 , - 184 , - 4419 , - 3322 , - 2397 , - 1644 , - 1063 , - 654 , - 417 , - 352 , - 459 , - 738 , - 1189 , - 1812 , - 2607 , - 3574 , - 4713 , - 520 , - 2003 , - 3658 , - 5485 , - 1980 , - 4151 , - 990 , - 3505 , - 688 , - 3547 , - 1074 , - 4277 , - 2148 , - 191 , - 3910 , - 2297 , - 856 , - 5091 , - 3994 , - 3069 , - 2316 , - 1735 , - 1326 , - 1089 , - 1024 , - 1131 , - 1410 , - 1861 , - 2484 , - 3279 , - 4246 , - 5385 , - 1192 , - 2675 , - 4330 , - 653 , - 2652 , - 4823 , - 1662 , - 4177 , - 1360 , - 4219 , - 1746 , - 4949 , - 2820 , - 863 , - 4582 , - 2969 , - 1528 , - 259 , - 4666 , - 3741 , - 2988 , - 2407 , - 1998 , - 1761 , - 1696 , - 1803 , - 2082 , - 2533 , - 3156 , - 3951 , - 4918 , - 553 , - 1864 , - 3347 , - 5002 , - 1325 , - 3324 , - 5495 , - 2334 , - 4849 , - 2032 , - 4891 , - 2418 , - 117 , - 3492 , - 1535 , - 5254 , - 3641 , - 2200 , - 931 , - 5338 , - 4413 , - 3660 , - 3079 , - 2670 , - 2433 , - 2368 , - 2475 , - 2754 , - 3205 , - 3828 , - 4623 , - 86 , - 1225 , - 2536 , - 4019 , - 170 , - 1997 , - 3996 , - 663 , - 3006 , - 17 , - 2704 , - 59 , - 3090 , - 789 , - 4164 , - 2207 , - 422 , - 4313 , - 2872 , - 1603 , - 506 , - 5085 , - 4332 , - 3751 , - 3342 , - 3105 , - 3040 , - 3147 , - 3426 , - 3877 , - 4500 , - 5295 , - 758 , - 1897 , - 3208 , - 4691 , - 842 , - 2669 , - 4668 , - 1335 , - 3678 , - 689 , - 3376 , - 731 , - 3762 , - 1461 , - 4836 , - 2879 , - 1094 , - 4985 , - 3544 , - 2275 , - 1178 , - 253 , - 5004 , - 4423 , - 4014 , - 3777 , - 3712 , - 3819 , - 4098 , - 4549 , - 5172 , - 463 , - 1430 , - 2569 , - 3880 , - 5363 , - 1514 , - 3341 , - 5340 , - 2007 , - 4350 , - 1361 , - 4048 , - 1403 , - 4434 , - 2133 , - 4 , - 3551 , - 1766 , - 153 , - 4216 , - 2947 , - 1850 , - 925 , - 172 , - 5095 , - 4686 , - 4449 , - 4384 , - 4491 , - 4770 , - 5221 , - 340 , - 1135 , - 2102 , - 3241 , - 4552 , - 531 , - 2186 , - 4013 , - 508 , - 2679 , - 5022 , - 2033 , - 4720 , - 2075 , - 5106 , - 2805 , - 676 , - 4223 , - 2438 , - 825 , - 4888 , - 3619 , - 2522 , - 1597 , - 844 , - 263 , - 5358 , - 5121 , - 5056 , - 5163 , - 5442 , - 389 , - 1012 , - 1807 , - 2774 , - 3913 , - 5224 , - 1203 , - 2858 , - 4685 , - 1180 , - 3351 , - 190 , - 2705 , - 5392 , - 2747 , - 274 , - 3477 , - 1348 , - 4895 , - 3110 , - 1497 , - 56 , - 4291 , - 3194 , - 2269 , - 1516 , - 935 , - 526 , - 289 , - 224 , - 331 , - 610 , - 1061 , - 1684 , - 2479 , - 3446 , - 4585 , - 392 , - 1875 , - 3530 , - 5357 , - 1852 , - 4023 , - 862 , - 3377 , - 560 , - 3419 , - 946 , - 4149 , - 2020 , - 63 , - 3782 , - 2169 , - 728 , - 4963 , - 3866 , - 2941 , - 2188 , - 1607 , - 1198 , - 961 , - 896 , - 1003 , - 1282 , - 1733 , - 2356 , - 3151 , - 4118 , - 5257 , - 1064 , - 2547 , - 4202 , - 525 , - 2524 , - 4695 , - 1534 , - 4049 , - 1232 , - 4091 , - 1618 , - 4821 , - 2692 , - 735 , - 4454 , - 2841 , - 1400 , - 131 , - 4538 , - 3613 , - 2860 , - 2279 , - 1870 , - 1633 , - 1568 , - 1675 , - 1954 , - 2405 , - 3028 , - 3823 , - 4790 , - 425 , - 1736 , - 3219 , - 4874 , - 1197 , - 3196 , - 5367 , - 2206 , - 4721 , - 1904 , - 4763 , - 2290 , - 5493 , - 3364 , - 1407 , - 5126 , - 3513 , - 2072 , - 803 , - 5210 , - 4285 , - 3532 , - 2951 , - 2542 , - 2305 , - 2240 , - 2347 , - 2626 , - 3077 , - 3700 , - 4495 , - 5462 , - 1097 , - 2408 , - 3891 , - 42 , - 1869 , - 3868 , - 535 , - 2878 , - 5393 , - 2576 , - 5435 , - 2962 , - 661 , - 4036 , - 2079 , - 294 , - 4185 , - 2744 , - 1475 , - 378 , - 4957 , - 4204 , - 3623 , - 3214 , - 2977 , - 2912 , - 3019 , - 3298 , - 3749 , - 4372 , - 5167 , - 630 , - 1769 , - 3080 , - 4563 , - 714 , - 2541 , - 4540 , - 1207 , - 3550 , - 561 , - 3248 , - 603 , - 3634 , - 1333 , - 4708 , - 2751 , - 966 , - 4857 , - 3416 , - 2147 , - 1050 , - 125 , - 4876 , - 4295 , - 3886 , - 3649 , - 3584 , - 3691 , - 3970 , - 4421 , - 5044 , - 335 , - 1302 , - 2441 , - 3752 , - 5235 , - 1386 , - 3213 , - 5212 , - 1879 , - 4222 , - 1233 , - 3920 , - 1275 , - 4306 , - 2005 , - 5380 , - 3423 , - 1638 , - 25 , - 4088 , - 2819 , - 1722 , - 797 , - 44 , - 4967 , - 4558 , - 4321 , - 4256 , - 4363 , - 4642 , - 5093 , - 212 , - 1007 , - 1974 , - 3113 , - 4424 , - 403 , - 2058 , - 3885 , - 380 , - 2551 , - 4894 , - 1905 , - 4592 , - 1947 , - 4978 , - 2677 , - 548 , - 4095 , - 2310 , - 697 , - 4760 , - 3491 , - 2394 , - 1469 , - 716 , - 135 , - 5230 , - 4993 , - 4928 , - 5035 , - 5314 , - 261 , - 884 , - 1679 , - 2646 , - 3785 , - 5096 , - 1075 , - 2730 , - 4557 , - 1052 , - 3223 , - 62 , - 2577 , - 5264 , - 2619 , - 146 , - 3349 , - 1220 , - 4767 , - 2982 , - 1369 , - 5432 , - 4163 , - 3066 , - 2141 , - 1388 , - 807 , - 398 , - 161 , - 96 , - 203 , - 482 , - 933 , - 1556 , - 2351 , - 3318 , - 4457 , - 264 , - 1747 , - 3402 , - 5229 , - 1724 , - 3895 , - 734 , - 3249 , - 432 , - 3291 , - 818 , - 4021 , - 1892 , - 5439 , - 3654 , - 2041 , - 600 , - 4835 , - 3738 , - 2813 , - 2060 , - 1479 , - 1070 , - 833 , - 768 , - 875 , - 1154 , - 1605 , - 2228 , - 3023 , - 3990 , - 5129 , - 936 , - 2419 , - 4074 , - 397 , - 2396 , - 4567 , - 1406 , - 3921 , - 1104 , - 3963 , - 1490 , - 4693 , - 2564 , - 607 , - 4326 , - 2713 , - 1272 , - 3 , - 4410 , - 3485 , - 2732 , - 2151 , - 1742 , - 1505 , - 1440 , - 1547 , - 1826 , - 2277 , - 2900 , - 3695 , - 4662 , - 297 , - 1608 , - 3091 , - 4746 , - 1069 , - 3068 , - 5239 , - 2078 , - 4593 , - 1776 , - 4635 , - 2162 , - 5365 , - 3236 , - 1279 , - 4998 , - 3385 , - 1944 , - 675 , - 5082 , - 4157 , - 3404 , - 2823 , - 2414 , - 2177 , - 2112 , - 2219 , - 2498 , - 2949 , - 3572 , - 4367 , - 5334 , - 969 , - 2280 , - 3763 , - 5418 , - 1741 , - 3740 , - 407 , - 2750 , - 5265 , - 2448 , - 5307 , - 2834 , - 533 , - 3908 , - 1951 , - 166 , - 4057 , - 2616 , - 1347 , - 250 , - 4829 , - 4076 , - 3495 , - 3086 , - 2849 , - 2784 , - 2891 , - 3170 , - 3621 , - 4244 , - 5039 , - 502 , - 1641 , - 2952 , - 4435 , - 586 , - 2413 , - 4412 , - 1079 , - 3422 , - 433 , - 3120 , - 475 , - 3506 , - 1205 , - 4580 , - 2623 , - 838 , - 4729 , - 3288 , - 2019 , - 922 , - 5501 , - 4748 , - 4167 , - 3758 , - 3521 , - 3456 , - 3563 , - 3842 , - 4293 , - 4916 , - 207 , - 1174 , - 2313 , - 3624 , - 5107 , - 1258 , - 3085 , - 5084 , - 1751 , - 4094 , - 1105 , - 3792 , - 1147 , - 4178 , - 1877 , - 5252 , - 3295 , - 1510 , - 5401 , - 3960 , - 2691 , - 1594 , - 669 , - 5420 , - 4839 , - 4430 , - 4193 , - 4128 , - 4235 , - 4514 , - 4965 , - 84 , - 879 , - 1846 , - 2985 , - 4296 , - 275 , - 1930 , - 3757 , - 252 , - 2423 , - 4766 , - 1777 , - 4464 , - 1819 , - 4850 , - 2549 , - 420 , - 3967 , - 2182 , - 569 , - 4632 , - 3363 , - 2266 , - 1341 , - 588 , - 7 , - 5102 , - 4865 , - 4800 , - 4907 , - 5186 , - 133 , - 756 , - 1551 , - 2518 , - 3657 , - 4968 , - 947 , - 2602 , - 4429 , - 924 , - 3095 , - 5438 , - 2449 , - 5136 , - 2491 , - 18 , - 3221 , - 1092 , - 4639 , - 2854 , - 1241 , - 5304 , - 4035 , - 2938 , - 2013 , - 1260 , - 679 , - 270 , - 33 , - 5472 , - 75 , - 354 , - 805 , - 1428 , - 2223 , - 3190 , - 4329 , - 136 , - 1619 , - 3274 , - 5101 , - 1596 , - 3767 , - 606 , - 3121 , - 304 , - 3163 , - 690 , - 3893 , - 1764 , - 5311 , - 3526 , - 1913 , - 472 , - 4707 , - 3610 , - 2685 , - 1932 , - 1351 , - 942 , - 705 , - 640 , - 747 , - 1026 , - 1477 , - 2100 , - 2895 , - 3862 , - 5001 , - 808 , - 2291 , - 3946 , - 269 , - 2268 , - 4439 , - 1278 , - 3793 , - 976 , - 3835 , - 1362 , - 4565 , - 2436 , - 479 , - 4198 , - 2585 , - 1144 , - 5379 , - 4282 , - 3357 , - 2604 , - 2023 , - 1614 , - 1377 , - 1312 , - 1419 , - 1698 , - 2149 , - 2772 , - 3567 , - 4534 , - 169 , - 1480 , - 2963 , - 4618 , - 941 , - 2940 , - 5111 , - 1950 , - 4465 , - 1648 , - 4507 , - 2034 , - 5237 , - 3108 , - 1151 , - 4870 , - 3257 , - 1816 , - 547 , - 4954 , - 4029 , - 3276 , - 2695 , - 2286 , - 2049 , - 1984 , - 2091 , - 2370 , - 2821 , - 3444 , - 4239 , - 5206 , - 841 , - 2152 , - 3635 , - 5290 , - 1613 , - 3612 , - 279 , - 2622 , - 5137 , - 2320 , - 5179 , - 2706 , - 405 , - 3780 , - 1823 , - 38 , - 3929 , - 2488 , - 1219 , - 122 , - 4701 , - 3948 , - 3367 , - 2958 , - 2721 , - 2656 , - 2763 , - 3042 , - 3493 , - 4116 , - 4911 , - 374 , - 1513 , - 2824 , - 4307 , - 458 , - 2285 , - 4284 , - 951 , - 3294 , - 305 , - 2992 , - 347 , - 3378 , - 1077 , - 4452 , - 2495 , - 710 , - 4601 , - 3160 , - 1891 , - 794 , - 5373 , - 4620 , - 4039 , - 3630 , - 3393 , - 3328 , - 3435 , - 3714 , - 4165 , - 4788 , - 79 , - 1046 , - 2185 , - 3496 , - 4979 , - 1130 , - 2957 , - 4956 , - 1623 , - 3966 , - 977 , - 3664 , - 1019 , - 4050 , - 1749 , - 5124 , - 3167 , - 1382 , - 5273 , - 3832 , - 2563 , - 1466 , - 541 , - 5292 , - 4711 , - 4302 , - 4065 , - 4000 , - 4107 , - 4386 , - 4837 , - 5460 , - 751 , - 1718 , - 2857 , - 4168 , - 147 , - 1802 , - 3629 , - 124 , - 2295 , - 4638 , - 1649 , - 4336 , - 1691 , - 4722 , - 2421 , - 292 , - 3839 , - 2054 , - 441 , - 4504 , - 3235 , - 2138 , - 1213 , - 460 , - 5383 , - 4974 , - 4737 , - 4672 , - 4779 , - 5058 , - 5 , - 628 , - 1423 , - 2390 , - 3529 , - 4840 , - 819 , - 2474 , - 4301 , - 796 , - 2967 , - 5310 , - 2321 , - 5008 , - 2363 , - 5394 , - 3093 , - 964 , - 4511 , - 2726 , - 1113 , - 5176 , - 3907 , - 2810 , - 1885 , - 1132 , - 551 , - 142 , - 5409 , - 5344 , - 5451 , - 226 , - 677 , - 1300 , - 2095 , - 3062 , - 4201 , - 8 , - 1491 , - 3146 , - 4973 , - 1468 , - 3639 , - 478 , - 2993 , - 176 , - 3035 , - 562 , - 3765 , - 1636 , - 5183 , - 3398 , - 1785 , - 344 , - 4579 , - 3482 , - 2557 , - 1804 , - 1223 , - 814 , - 577 , - 512 , - 619 , - 898 , - 1349 , - 1972 , - 2767 , - 3734 , - 4873 , - 680 , - 2163 , - 3818 , - 141 , - 2140 , - 4311 , - 1150 , - 3665 , - 848 , - 3707 , - 1234 , - 4437 , - 2308 , - 351 , - 4070 , - 2457 , - 1016 , - 5251 , - 4154 , - 3229 , - 2476 , - 1895 , - 1486 , - 1249 , - 1184 , - 1291 , - 1570 , - 2021 , - 2644 , - 3439 , - 4406 , - 41 , - 1352 , - 2835 , - 4490 , - 813 , - 2812 , - 4983 , - 1822 , - 4337 , - 1520 , - 4379 , - 1906 , - 5109 , - 2980 , - 1023 , - 4742 , - 3129 , - 1688 , - 419 , - 4826 , - 3901 , - 3148 , - 2567 , - 2158 , - 1921 , - 1856 , - 1963 , - 2242 , - 2693 , - 3316 , - 4111 , - 5078 , - 713 , - 2024 , - 3507 , - 5162 , - 1485 , - 3484 , - 151 , - 2494 , - 5009 , - 2192 , - 5051 , - 2578 , - 277 , - 3652 , - 1695 , - 5414 , - 3801 , - 2360 , - 1091 , - 5498 , - 4573 , - 3820 , - 3239 , - 2830 , - 2593 , - 2528 , - 2635 , - 2914 , - 3365 , - 3988 , - 4783 , - 246 , - 1385 , - 2696 , - 4179 , - 330 , - 2157 , - 4156 , - 823 , - 3166 , - 177 , - 2864 , - 219 , - 3250 , - 949 , - 4324 , - 2367 , - 582 , - 4473 , - 3032 , - 1763 , - 666 , - 5245 , - 4492 , - 3911 , - 3502 , - 3265 , - 3200 , - 3307 , - 3586 , - 4037 , - 4660 , - 5455 , - 918 , - 2057 , - 3368 , - 4851 , - 1002 , - 2829 , - 4828 , - 1495 , - 3838 , - 849 , - 3536 , - 891 , - 3922 , - 1621 , - 4996 , - 3039 , - 1254 , - 5145 , - 3704 , - 2435 , - 1338 , - 413 , - 5164 , - 4583 , - 4174 , - 3937 , - 3872 , - 3979 , - 4258 , - 4709 , - 5332 , - 623 , - 1590 , - 2729 , - 4040 , - 19 , - 1674 , - 3501 , - 5500 , - 2167 , - 4510 , - 1521 , - 4208 , - 1563 , - 4594 , - 2293 , - 164 , - 3711 , - 1926 , - 313 , - 4376 , - 3107 , - 2010 , - 1085 , - 332 , - 5255 , - 4846 , - 4609 , - 4544 , - 4651 , - 4930 , - 5381 , - 500 , - 1295 , - 2262 , - 3401 , - 4712 , - 691 , - 2346 , - 4173 , - 668 , - 2839 , - 5182 , - 2193 , - 4880 , - 2235 , - 5266 , - 2965 , - 836 , - 4383 , - 2598 , - 985 , - 5048 , - 3779 , - 2682 , - 1757 , - 1004 , - 423 , - 14 , - 5281 , - 5216 , - 5323 , - 98 , - 549 , - 1172 , - 1967 , - 2934 , - 4073 , - 5384 , - 1363 , - 3018 , - 4845 , - 1340 , - 3511 , - 350 , - 2865 , - 48 , - 2907 , - 434 , - 3637 , - 1508 , - 5055 , - 3270 , - 1657 , - 216 , - 4451 , - 3354 , - 2429 , - 1676 , - 1095 , - 686 , - 449 , - 384 , - 491 , - 770 , - 1221 , - 1844 , - 2639 , - 3606 , - 4745 , - 552 , - 2035 , - 3690 , - 13 , - 2012 , - 4183 , - 1022 , - 3537 , - 720 , - 3579 , - 1106 , - 4309 , - 2180 , - 223 , - 3942 , - 2329 , - 888 , - 5123 , - 4026 , - 3101 , - 2348 , - 1767 , - 1358 , - 1121 , - 1056 , - 1163 , - 1442 , - 1893 , - 2516 , - 3311 , - 4278 , - 5417 , - 1224 , - 2707 , - 4362 , - 685 , - 2684 , - 4855 , - 1694 , - 4209 , - 1392 , - 4251 , - 1778 , - 4981 , - 2852 , - 895 , - 4614 , - 3001 , - 1560 , - 291 , - 4698 , - 3773 , - 3020 , - 2439 , - 2030 , - 1793 , - 1728 , - 1835 , - 2114 , - 2565 , - 3188 , - 3983 , - 4950 , - 585 , - 1896 , - 3379 , - 5034 , - 1357 , - 3356 , - 23 , - 2366 , - 4881 , - 2064 , - 4923 , - 2450 , - 149 , - 3524 , - 1567 , - 5286 , - 3673 , - 2232 , - 963 , - 5370 , - 4445 , - 3692 , - 3111 , - 2702 , - 2465 , - 2400 , - 2507 , - 2786 , - 3237 , - 3860 , - 4655 , - 118 , - 1257 , - 2568 , - 4051 , - 202 , - 2029 , - 4028 , - 695 , - 3038 , - 49 , - 2736 , - 91 , - 3122 , - 821 , - 4196 , - 2239 , - 454 , - 4345 , - 2904 , - 1635 , - 538 , - 5117 , - 4364 , - 3783 , - 3374 , - 3137 , - 3072 , - 3179 , - 3458 , - 3909 , - 4532 , - 5327 , - 790 , - 1929 , - 3240 , - 4723 , - 874 , - 2701 , - 4700 , - 1367 , - 3710 , - 721 , - 3408 , - 763 , - 3794 , - 1493 , - 4868 , - 2911 , - 1126 , - 5017 , - 3576 , - 2307 , - 1210 , - 285 , - 5036 , - 4455 , - 4046 , - 3809 , - 3744 , - 3851 , - 4130 , - 4581 , - 5204 , - 495 , - 1462 , - 2601 , - 3912 , - 5395 , - 1546 , - 3373 , - 5372 , - 2039 , - 4382 , - 1393 , - 4080 , - 1435 , - 4466 , - 2165 , - 36 , - 3583 , - 1798 , - 185 , - 4248 , - 2979 , - 1882 , - 957 , - 204 , - 5127 , - 4718 , - 4481 , - 4416 , - 4523 , - 4802 , - 5253 , - 372 , - 1167 , - 2134 , - 3273 , - 4584 , - 563 , - 2218 , - 4045 , - 540 , - 2711 , - 5054 , - 2065 , - 4752 , - 2107 , - 5138 , - 2837 , - 708 , - 4255 , - 2470 , - 857 , - 4920 , - 3651 , - 2554 , - 1629 , - 876 , - 295 , - 5390 , - 5153 , - 5088 , - 5195 , - 5474 , - 421 , - 1044 , - 1839 , - 2806 , - 3945 , - 5256 , - 1235 , - 2890 , - 4717 , - 1212 , - 3383 , - 222 , - 2737 , - 5424 , - 2779 , - 306 , - 3509 , - 1380 , - 4927 , - 3142 , - 1529 , - 88 , - 4323 , - 3226 , - 2301 , - 1548 , - 967 , - 558 , - 321 , - 256 , - 363 , - 642 , - 1093 , - 1716 , - 2511 , - 3478 , - 4617 , - 424 , - 1907 , - 3562 , - 5389 , - 1884 , - 4055 , - 894 , - 3409 , - 592 , - 3451 , - 978 , - 4181 , - 2052 , - 95 , - 3814 , - 2201 , - 760 , - 4995 , - 3898 , - 2973 , - 2220 , - 1639 , - 1230 , - 993 , - 928 , - 1035 , - 1314 , - 1765 , - 2388 , - 3183 , - 4150 , - 5289 , - 1096 , - 2579 , - 4234 , - 557 , - 2556 , - 4727 , - 1566 , - 4081 , - 1264 , - 4123 , - 1650 , - 4853 , - 2724 , - 767 , - 4486 , - 2873 , - 1432 , - 163 , - 4570 , - 3645 , - 2892 , - 2311 , - 1902 , - 1665 , - 1600 , - 1707 , - 1986 , - 2437 , - 3060 , - 3855 , - 4822 , - 457 , - 1768 , - 3251 , - 4906 , - 1229 , - 3228 , - 5399 , - 2238 , - 4753 , - 1936 , - 4795 , - 2322 , - 21 , - 3396 , - 1439 , - 5158 , - 3545 , - 2104 , - 835 , - 5242 , - 4317 , - 3564 , - 2983 , - 2574 , - 2337 , - 2272 , - 2379 , - 2658 , - 3109 , - 3732 , - 4527 , - 5494 , - 1129 , - 2440 , - 3923 , - 74 , - 1901 , - 3900 , - 567 , - 2910 , - 5425 , - 2608 , - 5467 , - 2994 , - 693 , - 4068 , - 2111 , - 326 , - 4217 , - 2776 , - 1507 , - 410 , - 4989 , - 4236 , - 3655 , - 3246 , - 3009 , - 2944 , - 3051 , - 3330 , - 3781 , - 4404 , - 5199 , - 662 , - 1801 , - 3112 , - 4595 , - 746 , - 2573 , - 4572 , - 1239 , - 3582 , - 593 , - 3280 , - 635 , - 3666 , - 1365 , - 4740 , - 2783 , - 998 , - 4889 , - 3448 , - 2179 , - 1082 , - 157 , - 4908 , - 4327 , - 3918 , - 3681 , - 3616 , - 3723 , - 4002 , - 4453 , - 5076 , - 367 , - 1334 , - 2473 , - 3784 , - 5267 , - 1418 , - 3245 , - 5244 , - 1911 , - 4254 , - 1265 , - 3952 , - 1307 , - 4338 , - 2037 , - 5412 , - 3455 , - 1670 , - 57 , - 4120 , - 2851 , - 1754 , - 829 , - 76 , - 4999 , - 4590 , - 4353 , - 4288 , - 4395 , - 4674 , - 5125 , - 244 , - 1039 , - 2006 , - 3145 , - 4456 , - 435 , - 2090 , - 3917 , - 412 , - 2583 , - 4926 , - 1937 , - 4624 , - 1979 , - 5010 , - 2709 , - 580 , - 4127 , - 2342 , - 729 , - 4792 , - 3523 , - 2426 , - 1501 , - 748 , - 167 , - 5262 , - 5025 , - 4960 , - 5067 , - 5346 , - 293 , - 916 , - 1711 , - 2678 , - 3817 , - 5128 , - 1107 , - 2762 , - 4589 , - 1084 , - 3255 , - 94 , - 2609 , - 5296 , - 2651 , - 178 , - 3381 , - 1252 , - 4799 , - 3014 , - 1401 , - 5464 , - 4195 , - 3098 , - 2173 , - 1420 , - 839 , - 430 , - 193 , - 128 , - 235 , - 514 , - 965 , - 1588 , - 2383 , - 3350 , - 4489 , - 296 , - 1779 , - 3434 , - 5261 , - 1756 , - 3927 , - 766 , - 3281 , - 464 , - 3323 , - 850 , - 4053 , - 1924 , - 5471 , - 3686 , - 2073 , - 632 , - 4867 , - 3770 , - 2845 , - 2092 , - 1511 , - 1102 , - 865 , - 800 , - 907 , - 1186 , - 1637 , - 2260 , - 3055 , - 4022 , - 5161 , - 968 , - 2451 , - 4106 , - 429 , - 2428 , - 4599 , - 1438 , - 3953 , - 1136 , - 3995 , - 1522 , - 4725 , - 2596 , - 639 , - 4358 , - 2745 , - 1304 , - 35 , - 4442 , - 3517 , - 2764 , - 2183 , - 1774 , - 1537 , - 1472 , - 1579 , - 1858 , - 2309 , - 2932 , - 3727 , - 4694 , - 329 , - 1640 , - 3123 , - 4778 , - 1101 , - 3100 , - 5271 , - 2110 , - 4625 , - 1808 , - 4667 , - 2194 , - 5397 , - 3268 , - 1311 , - 5030 , - 3417 , - 1976 , - 707 , - 5114 , - 4189 , - 3436 , - 2855 , - 2446 , - 2209 , - 2144 , - 2251 , - 2530 , - 2981 , - 3604 , - 4399 , - 5366 , - 1001 , - 2312 , - 3795 , - 5450 , - 1773 , - 3772 , - 439 , - 2782 , - 5297 , - 2480 , - 5339 , - 2866 , - 565 , - 3940 , - 1983 , - 198 , - 4089 , - 2648 , - 1379 , - 282 , - 4861 , - 4108 , - 3527 , - 3118 , - 2881 , - 2816 , - 2923 , - 3202 , - 3653 , - 4276 , - 5071 , - 534 , - 1673 , - 2984 , - 4467 , - 618 , - 2445 , - 4444 , - 1111 , - 3454 , - 465 , - 3152 , - 507 , - 3538 , - 1237 , - 4612 , - 2655 , - 870 , - 4761 , - 3320 , - 2051 , - 954 , - 29 , - 4780 , - 4199 , - 3790 , - 3553 , - 3488 , - 3595 , - 3874 , - 4325 , - 4948 , - 239 , - 1206 , - 2345 , - 3656 , - 5139 , - 1290 , - 3117 , - 5116 , - 1783 , - 4126 , - 1137 , - 3824 , - 1179 , - 4210 , - 1909 , - 5284 , - 3327 , - 1542 , - 5433 , - 3992 , - 2723 , - 1626 , - 701 , - 5452 , - 4871 , - 4462 , - 4225 , - 4160 , - 4267 , - 4546 , - 4997 , - 116 , - 911 , - 1878 , - 3017 , - 4328 , - 307 , - 1962 , - 3789 , - 284 , - 2455 , - 4798 , - 1809 , - 4496 , - 1851 , - 4882 , - 2581 , - 452 , - 3999 , - 2214 , - 601 , - 4664 , - 3395 , - 2298 , - 1373 , - 620 , - 39 , - 5134 , - 4897 , - 4832 , - 4939 , - 5218 , - 165 , - 788 , - 1583 , - 2550 , - 3689 , - 5000 , - 979 , - 2634 , - 4461 , - 956 , - 3127 , - 5470 , - 2481 , - 5168 , - 2523 , - 50 , - 3253 , - 1124 , - 4671 , - 2886 , - 1273 , - 5336 , - 4067 , - 2970 , - 2045 , - 1292 , - 711 , - 302 , - 65 , - 0 , - 217 , - 782 , - 1695 , - 2956 , - 4565 , - 954 , - 3259 , - 344 , - 3345 , - 1126 , - 4823 , - 3300 , - 2125 , - 1298 , - 819 , - 688 , - 905 , - 1470 , - 2383 , - 3644 , - 5253 , - 1642 , - 3947 , - 1032 , - 4033 , - 1814 , - 5511 , - 3988 , - 2813 , - 1986 , - 1507 , - 1376 , - 1593 , - 2158 , - 3071 , - 4332 , - 373 , - 2330 , - 4635 , - 1720 , - 4721 , - 2502 , - 631 , - 4676 , - 3501 , - 2674 , - 2195 , - 2064 , - 2281 , - 2846 , - 3759 , - 5020 , - 1061 , - 3018 , - 5323 , - 2408 , - 5409 , - 3190 , - 1319 , - 5364 , - 4189 , - 3362 , - 2883 , - 2752 , - 2969 , - 3534 , - 4447 , - 140 , - 1749 , - 3706 , - 443 , - 3096 , - 529 , - 3878 , - 2007 , - 484 , - 4877 , - 4050 , - 3571 , - 3440 , - 3657 , - 4222 , - 5135 , - 828 , - 2437 , - 4394 , - 1131 , - 3784 , - 1217 , - 4566 , - 2695 , - 1172 , - 5565 , - 4738 , - 4259 , - 4128 , - 4345 , - 4910 , - 255 , - 1516 , - 3125 , - 5082 , - 1819 , - 4472 , - 1905 , - 5254 , - 3383 , - 1860 , - 685 , - 5426 , - 4947 , - 4816 , - 5033 , - 30 , - 943 , - 2204 , - 3813 , - 202 , - 2507 , - 5160 , - 2593 , - 374 , - 4071 , - 2548 , - 1373 , - 546 , - 67 , - 5504 , - 153 , - 718 , - 1631 , - 2892 , - 4501 , - 890 , - 3195 , - 280 , - 3281 , - 1062 , - 4759 , - 3236 , - 2061 , - 1234 , - 755 , - 624 , - 841 , - 1406 , - 2319 , - 3580 , - 5189 , - 1578 , - 3883 , - 968 , - 3969 , - 1750 , - 5447 , - 3924 , - 2749 , - 1922 , - 1443 , - 1312 , - 1529 , - 2094 , - 3007 , - 4268 , - 309 , - 2266 , - 4571 , - 1656 , - 4657 , - 2438 , - 567 , - 4612 , - 3437 , - 2610 , - 2131 , - 2000 , - 2217 , - 2782 , - 3695 , - 4956 , - 997 , - 2954 , - 5259 , - 2344 , - 5345 , - 3126 , - 1255 , - 5300 , - 4125 , - 3298 , - 2819 , - 2688 , - 2905 , - 3470 , - 4383 , - 76 , - 1685 , - 3642 , - 379 , - 3032 , - 465 , - 3814 , - 1943 , - 420 , - 4813 , - 3986 , - 3507 , - 3376 , - 3593 , - 4158 , - 5071 , - 764 , - 2373 , - 4330 , - 1067 , - 3720 , - 1153 , - 4502 , - 2631 , - 1108 , - 5501 , - 4674 , - 4195 , - 4064 , - 4281 , - 4846 , - 191 , - 1452 , - 3061 , - 5018 , - 1755 , - 4408 , - 1841 , - 5190 , - 3319 , - 1796 , - 621 , - 5362 , - 4883 , - 4752 , - 4969 , - 5534 , - 879 , - 2140 , - 3749 , - 138 , - 2443 , - 5096 , - 2529 , - 310 , - 4007 , - 2484 , - 1309 , - 482 , - 3 , - 5440 , - 89 , - 654 , - 1567 , - 2828 , - 4437 , - 826 , - 3131 , - 216 , - 3217 , - 998 , - 4695 , - 3172 , - 1997 , - 1170 , - 691 , - 560 , - 777 , - 1342 , - 2255 , - 3516 , - 5125 , - 1514 , - 3819 , - 904 , - 3905 , - 1686 , - 5383 , - 3860 , - 2685 , - 1858 , - 1379 , - 1248 , - 1465 , - 2030 , - 2943 , - 4204 , - 245 , - 2202 , - 4507 , - 1592 , - 4593 , - 2374 , - 503 , - 4548 , - 3373 , - 2546 , - 2067 , - 1936 , - 2153 , - 2718 , - 3631 , - 4892 , - 933 , - 2890 , - 5195 , - 2280 , - 5281 , - 3062 , - 1191 , - 5236 , - 4061 , - 3234 , - 2755 , - 2624 , - 2841 , - 3406 , - 4319 , - 12 , - 1621 , - 3578 , - 315 , - 2968 , - 401 , - 3750 , - 1879 , - 356 , - 4749 , - 3922 , - 3443 , - 3312 , - 3529 , - 4094 , - 5007 , - 700 , - 2309 , - 4266 , - 1003 , - 3656 , - 1089 , - 4438 , - 2567 , - 1044 , - 5437 , - 4610 , - 4131 , - 4000 , - 4217 , - 4782 , - 127 , - 1388 , - 2997 , - 4954 , - 1691 , - 4344 , - 1777 , - 5126 , - 3255 , - 1732 , - 557 , - 5298 , - 4819 , - 4688 , - 4905 , - 5470 , - 815 , - 2076 , - 3685 , - 74 , - 2379 , - 5032 , - 2465 , - 246 , - 3943 , - 2420 , - 1245 , - 418 , - 5507 , - 5376 , - 25 , - 590 , - 1503 , - 2764 , - 4373 , - 762 , - 3067 , - 152 , - 3153 , - 934 , - 4631 , - 3108 , - 1933 , - 1106 , - 627 , - 496 , - 713 , - 1278 , - 2191 , - 3452 , - 5061 , - 1450 , - 3755 , - 840 , - 3841 , - 1622 , - 5319 , - 3796 , - 2621 , - 1794 , - 1315 , - 1184 , - 1401 , - 1966 , - 2879 , - 4140 , - 181 , - 2138 , - 4443 , - 1528 , - 4529 , - 2310 , - 439 , - 4484 , - 3309 , - 2482 , - 2003 , - 1872 , - 2089 , - 2654 , - 3567 , - 4828 , - 869 , - 2826 , - 5131 , - 2216 , - 5217 , - 2998 , - 1127 , - 5172 , - 3997 , - 3170 , - 2691 , - 2560 , - 2777 , - 3342 , - 4255 , - 5516 , - 1557 , - 3514 , - 251 , - 2904 , - 337 , - 3686 , - 1815 , - 292 , - 4685 , - 3858 , - 3379 , - 3248 , - 3465 , - 4030 , - 4943 , - 636 , - 2245 , - 4202 , - 939 , - 3592 , - 1025 , - 4374 , - 2503 , - 980 , - 5373 , - 4546 , - 4067 , - 3936 , - 4153 , - 4718 , - 63 , - 1324 , - 2933 , - 4890 , - 1627 , - 4280 , - 1713 , - 5062 , - 3191 , - 1668 , - 493 , - 5234 , - 4755 , - 4624 , - 4841 , - 5406 , - 751 , - 2012 , - 3621 , - 10 , - 2315 , - 4968 , - 2401 , - 182 , - 3879 , - 2356 , - 1181 , - 354 , - 5443 , - 5312 , - 5529 , - 526 , - 1439 , - 2700 , - 4309 , - 698 , - 3003 , - 88 , - 3089 , - 870 , - 4567 , - 3044 , - 1869 , - 1042 , - 563 , - 432 , - 649 , - 1214 , - 2127 , - 3388 , - 4997 , - 1386 , - 3691 , - 776 , - 3777 , - 1558 , - 5255 , - 3732 , - 2557 , - 1730 , - 1251 , - 1120 , - 1337 , - 1902 , - 2815 , - 4076 , - 117 , - 2074 , - 4379 , - 1464 , - 4465 , - 2246 , - 375 , - 4420 , - 3245 , - 2418 , - 1939 , - 1808 , - 2025 , - 2590 , - 3503 , - 4764 , - 805 , - 2762 , - 5067 , - 2152 , - 5153 , - 2934 , - 1063 , - 5108 , - 3933 , - 3106 , - 2627 , - 2496 , - 2713 , - 3278 , - 4191 , - 5452 , - 1493 , - 3450 , - 187 , - 2840 , - 273 , - 3622 , - 1751 , - 228 , - 4621 , - 3794 , - 3315 , - 3184 , - 3401 , - 3966 , - 4879 , - 572 , - 2181 , - 4138 , - 875 , - 3528 , - 961 , - 4310 , - 2439 , - 916 , - 5309 , - 4482 , - 4003 , - 3872 , - 4089 , - 4654 , - 5567 , - 1260 , - 2869 , - 4826 , - 1563 , - 4216 , - 1649 , - 4998 , - 3127 , - 1604 , - 429 , - 5170 , - 4691 , - 4560 , - 4777 , - 5342 , - 687 , - 1948 , - 3557 , - 5514 , - 2251 , - 4904 , - 2337 , - 118 , - 3815 , - 2292 , - 1117 , - 290 , - 5379 , - 5248 , - 5465 , - 462 , - 1375 , - 2636 , - 4245 , - 634 , - 2939 , - 24 , - 3025 , - 806 , - 4503 , - 2980 , - 1805 , - 978 , - 499 , - 368 , - 585 , - 1150 , - 2063 , - 3324 , - 4933 , - 1322 , - 3627 , - 712 , - 3713 , - 1494 , - 5191 , - 3668 , - 2493 , - 1666 , - 1187 , - 1056 , - 1273 , - 1838 , - 2751 , - 4012 , - 53 , - 2010 , - 4315 , - 1400 , - 4401 , - 2182 , - 311 , - 4356 , - 3181 , - 2354 , - 1875 , - 1744 , - 1961 , - 2526 , - 3439 , - 4700 , - 741 , - 2698 , - 5003 , - 2088 , - 5089 , - 2870 , - 999 , - 5044 , - 3869 , - 3042 , - 2563 , - 2432 , - 2649 , - 3214 , - 4127 , - 5388 , - 1429 , - 3386 , - 123 , - 2776 , - 209 , - 3558 , - 1687 , - 164 , - 4557 , - 3730 , - 3251 , - 3120 , - 3337 , - 3902 , - 4815 , - 508 , - 2117 , - 4074 , - 811 , - 3464 , - 897 , - 4246 , - 2375 , - 852 , - 5245 , - 4418 , - 3939 , - 3808 , - 4025 , - 4590 , - 5503 , - 1196 , - 2805 , - 4762 , - 1499 , - 4152 , - 1585 , - 4934 , - 3063 , - 1540 , - 365 , - 5106 , - 4627 , - 4496 , - 4713 , - 5278 , - 623 , - 1884 , - 3493 , - 5450 , - 2187 , - 4840 , - 2273 , - 54 , - 3751 , - 2228 , - 1053 , - 226 , - 5315 , - 5184 , - 5401 , - 398 , - 1311 , - 2572 , - 4181 , - 570 , - 2875 , - 5528 , - 2961 , - 742 , - 4439 , - 2916 , - 1741 , - 914 , - 435 , - 304 , - 521 , - 1086 , - 1999 , - 3260 , - 4869 , - 1258 , - 3563 , - 648 , - 3649 , - 1430 , - 5127 , - 3604 , - 2429 , - 1602 , - 1123 , - 992 , - 1209 , - 1774 , - 2687 , - 3948 , - 5557 , - 1946 , - 4251 , - 1336 , - 4337 , - 2118 , - 247 , - 4292 , - 3117 , - 2290 , - 1811 , - 1680 , - 1897 , - 2462 , - 3375 , - 4636 , - 677 , - 2634 , - 4939 , - 2024 , - 5025 , - 2806 , - 935 , - 4980 , - 3805 , - 2978 , - 2499 , - 2368 , - 2585 , - 3150 , - 4063 , - 5324 , - 1365 , - 3322 , - 59 , - 2712 , - 145 , - 3494 , - 1623 , - 100 , - 4493 , - 3666 , - 3187 , - 3056 , - 3273 , - 3838 , - 4751 , - 444 , - 2053 , - 4010 , - 747 , - 3400 , - 833 , - 4182 , - 2311 , - 788 , - 5181 , - 4354 , - 3875 , - 3744 , - 3961 , - 4526 , - 5439 , - 1132 , - 2741 , - 4698 , - 1435 , - 4088 , - 1521 , - 4870 , - 2999 , - 1476 , - 301 , - 5042 , - 4563 , - 4432 , - 4649 , - 5214 , - 559 , - 1820 , - 3429 , - 5386 , - 2123 , - 4776 , - 2209 , - 5558 , - 3687 , - 2164 , - 989 , - 162 , - 5251 , - 5120 , - 5337 , - 334 , - 1247 , - 2508 , - 4117 , - 506 , - 2811 , - 5464 , - 2897 , - 678 , - 4375 , - 2852 , - 1677 , - 850 , - 371 , - 240 , - 457 , - 1022 , - 1935 , - 3196 , - 4805 , - 1194 , - 3499 , - 584 , - 3585 , - 1366 , - 5063 , - 3540 , - 2365 , - 1538 , - 1059 , - 928 , - 1145 , - 1710 , - 2623 , - 3884 , - 5493 , - 1882 , - 4187 , - 1272 , - 4273 , - 2054 , - 183 , - 4228 , - 3053 , - 2226 , - 1747 , - 1616 , - 1833 , - 2398 , - 3311 , - 4572 , - 613 , - 2570 , - 4875 , - 1960 , - 4961 , - 2742 , - 871 , - 4916 , - 3741 , - 2914 , - 2435 , - 2304 , - 2521 , - 3086 , - 3999 , - 5260 , - 1301 , - 3258 , - 5563 , - 2648 , - 81 , - 3430 , - 1559 , - 36 , - 4429 , - 3602 , - 3123 , - 2992 , - 3209 , - 3774 , - 4687 , - 380 , - 1989 , - 3946 , - 683 , - 3336 , - 769 , - 4118 , - 2247 , - 724 , - 5117 , - 4290 , - 3811 , - 3680 , - 3897 , - 4462 , - 5375 , - 1068 , - 2677 , - 4634 , - 1371 , - 4024 , - 1457 , - 4806 , - 2935 , - 1412 , - 237 , - 4978 , - 4499 , - 4368 , - 4585 , - 5150 , - 495 , - 1756 , - 3365 , - 5322 , - 2059 , - 4712 , - 2145 , - 5494 , - 3623 , - 2100 , - 925 , - 98 , - 5187 , - 5056 , - 5273 , - 270 , - 1183 , - 2444 , - 4053 , - 442 , - 2747 , - 5400 , - 2833 , - 614 , - 4311 , - 2788 , - 1613 , - 786 , - 307 , - 176 , - 393 , - 958 , - 1871 , - 3132 , - 4741 , - 1130 , - 3435 , - 520 , - 3521 , - 1302 , - 4999 , - 3476 , - 2301 , - 1474 , - 995 , - 864 , - 1081 , - 1646 , - 2559 , - 3820 , - 5429 , - 1818 , - 4123 , - 1208 , - 4209 , - 1990 , - 119 , - 4164 , - 2989 , - 2162 , - 1683 , - 1552 , - 1769 , - 2334 , - 3247 , - 4508 , - 549 , - 2506 , - 4811 , - 1896 , - 4897 , - 2678 , - 807 , - 4852 , - 3677 , - 2850 , - 2371 , - 2240 , - 2457 , - 3022 , - 3935 , - 5196 , - 1237 , - 3194 , - 5499 , - 2584 , - 17 , - 3366 , - 1495 , - 5540 , - 4365 , - 3538 , - 3059 , - 2928 , - 3145 , - 3710 , - 4623 , - 316 , - 1925 , - 3882 , - 619 , - 3272 , - 705 , - 4054 , - 2183 , - 660 , - 5053 , - 4226 , - 3747 , - 3616 , - 3833 , - 4398 , - 5311 , - 1004 , - 2613 , - 4570 , - 1307 , - 3960 , - 1393 , - 4742 , - 2871 , - 1348 , - 173 , - 4914 , - 4435 , - 4304 , - 4521 , - 5086 , - 431 , - 1692 , - 3301 , - 5258 , - 1995 , - 4648 , - 2081 , - 5430 , - 3559 , - 2036 , - 861 , - 34 , - 5123 , - 4992 , - 5209 , - 206 , - 1119 , - 2380 , - 3989 , - 378 , - 2683 , - 5336 , - 2769 , - 550 , - 4247 , - 2724 , - 1549 , - 722 , - 243 , - 112 , - 329 , - 894 , - 1807 , - 3068 , - 4677 , - 1066 , - 3371 , - 456 , - 3457 , - 1238 , - 4935 , - 3412 , - 2237 , - 1410 , - 931 , - 800 , - 1017 , - 1582 , - 2495 , - 3756 , - 5365 , - 1754 , - 4059 , - 1144 , - 4145 , - 1926 , - 55 , - 4100 , - 2925 , - 2098 , - 1619 , - 1488 , - 1705 , - 2270 , - 3183 , - 4444 , - 485 , - 2442 , - 4747 , - 1832 , - 4833 , - 2614 , - 743 , - 4788 , - 3613 , - 2786 , - 2307 , - 2176 , - 2393 , - 2958 , - 3871 , - 5132 , - 1173 , - 3130 , - 5435 , - 2520 , - 5521 , - 3302 , - 1431 , - 5476 , - 4301 , - 3474 , - 2995 , - 2864 , - 3081 , - 3646 , - 4559 , - 252 , - 1861 , - 3818 , - 555 , - 3208 , - 641 , - 3990 , - 2119 , - 596 , - 4989 , - 4162 , - 3683 , - 3552 , - 3769 , - 4334 , - 5247 , - 940 , - 2549 , - 4506 , - 1243 , - 3896 , - 1329 , - 4678 , - 2807 , - 1284 , - 109 , - 4850 , - 4371 , - 4240 , - 4457 , - 5022 , - 367 , - 1628 , - 3237 , - 5194 , - 1931 , - 4584 , - 2017 , - 5366 , - 3495 , - 1972 , - 797 , - 5538 , - 5059 , - 4928 , - 5145 , - 142 , - 1055 , - 2316 , - 3925 , - 314 , - 2619 , - 5272 , - 2705 , - 486 , - 4183 , - 2660 , - 1485 , - 658 , - 179 , - 48 , - 265 , - 830 , - 1743 , - 3004 , - 4613 , - 1002 , - 3307 , - 392 , - 3393 , - 1174 , - 4871 , - 3348 , - 2173 , - 1346 , - 867 , - 736 , - 953 , - 1518 , - 2431 , - 3692 , - 5301 , - 1690 , - 3995 , - 1080 , - 4081 , - 1862 , - 5559 , - 4036 , - 2861 , - 2034 , - 1555 , - 1424 , - 1641 , - 2206 , - 3119 , - 4380 , - 421 , - 2378 , - 4683 , - 1768 , - 4769 , - 2550 , - 679 , - 4724 , - 3549 , - 2722 , - 2243 , - 2112 , - 2329 , - 2894 , - 3807 , - 5068 , - 1109 , - 3066 , - 5371 , - 2456 , - 5457 , - 3238 , - 1367 , - 5412 , - 4237 , - 3410 , - 2931 , - 2800 , - 3017 , - 3582 , - 4495 , - 188 , - 1797 , - 3754 , - 491 , - 3144 , - 577 , - 3926 , - 2055 , - 532 , - 4925 , - 4098 , - 3619 , - 3488 , - 3705 , - 4270 , - 5183 , - 876 , - 2485 , - 4442 , - 1179 , - 3832 , - 1265 , - 4614 , - 2743 , - 1220 , - 45 , - 4786 , - 4307 , - 4176 , - 4393 , - 4958 , - 303 , - 1564 , - 3173 , - 5130 , - 1867 , - 4520 , - 1953 , - 5302 , - 3431 , - 1908 , - 733 , - 5474 , - 4995 , - 4864 , - 5081 , - 78 , - 991 , - 2252 , - 3861 , - 250 , - 2555 , - 5208 , - 2641 , - 422 , - 4119 , - 2596 , - 1421 , - 594 , - 115 , - 5552 , - 201 , - 766 , - 1679 , - 2940 , - 4549 , - 938 , - 3243 , - 328 , - 3329 , - 1110 , - 4807 , - 3284 , - 2109 , - 1282 , - 803 , - 672 , - 889 , - 1454 , - 2367 , - 3628 , - 5237 , - 1626 , - 3931 , - 1016 , - 4017 , - 1798 , - 5495 , - 3972 , - 2797 , - 1970 , - 1491 , - 1360 , - 1577 , - 2142 , - 3055 , - 4316 , - 357 , - 2314 , - 4619 , - 1704 , - 4705 , - 2486 , - 615 , - 4660 , - 3485 , - 2658 , - 2179 , - 2048 , - 2265 , - 2830 , - 3743 , - 5004 , - 1045 , - 3002 , - 5307 , - 2392 , - 5393 , - 3174 , - 1303 , - 5348 , - 4173 , - 3346 , - 2867 , - 2736 , - 2953 , - 3518 , - 4431 , - 124 , - 1733 , - 3690 , - 427 , - 3080 , - 513 , - 3862 , - 1991 , - 468 , - 4861 , - 4034 , - 3555 , - 3424 , - 3641 , - 4206 , - 5119 , - 812 , - 2421 , - 4378 , - 1115 , - 3768 , - 1201 , - 4550 , - 2679 , - 1156 , - 5549 , - 4722 , - 4243 , - 4112 , - 4329 , - 4894 , - 239 , - 1500 , - 3109 , - 5066 , - 1803 , - 4456 , - 1889 , - 5238 , - 3367 , - 1844 , - 669 , - 5410 , - 4931 , - 4800 , - 5017 , - 14 , - 927 , - 2188 , - 3797 , - 186 , - 2491 , - 5144 , - 2577 , - 358 , - 4055 , - 2532 , - 1357 , - 530 , - 51 , - 5488 , - 137 , - 702 , - 1615 , - 2876 , - 4485 , - 874 , - 3179 , - 264 , - 3265 , - 1046 , - 4743 , - 3220 , - 2045 , - 1218 , - 739 , - 608 , - 825 , - 1390 , - 2303 , - 3564 , - 5173 , - 1562 , - 3867 , - 952 , - 3953 , - 1734 , - 5431 , - 3908 , - 2733 , - 1906 , - 1427 , - 1296 , - 1513 , - 2078 , - 2991 , - 4252 , - 293 , - 2250 , - 4555 , - 1640 , - 4641 , - 2422 , - 551 , - 4596 , - 3421 , - 2594 , - 2115 , - 1984 , - 2201 , - 2766 , - 3679 , - 4940 , - 981 , - 2938 , - 5243 , - 2328 , - 5329 , - 3110 , - 1239 , - 5284 , - 4109 , - 3282 , - 2803 , - 2672 , - 2889 , - 3454 , - 4367 , - 60 , - 1669 , - 3626 , - 363 , - 3016 , - 449 , - 3798 , - 1927 , - 404 , - 4797 , - 3970 , - 3491 , - 3360 , - 3577 , - 4142 , - 5055 , - 748 , - 2357 , - 4314 , - 1051 , - 3704 , - 1137 , - 4486 , - 2615 , - 1092 , - 5485 , - 4658 , - 4179 , - 4048 , - 4265 , - 4830 , - 175 , - 1436 , - 3045 , - 5002 , - 1739 , - 4392 , - 1825 , - 5174 , - 3303 , - 1780 , - 605 , - 5346 , - 4867 , - 4736 , - 4953 , - 5518 , - 863 , - 2124 , - 3733 , - 122 , - 2427 , - 5080 , - 2513 , - 294 , - 3991 , - 2468 , - 1293 , - 466 , - 5555 , - 5424 , - 73 , - 638 , - 1551 , - 2812 , - 4421 , - 810 , - 3115 , - 200 , - 3201 , - 982 , - 4679 , - 3156 , - 1981 , - 1154 , - 675 , - 544 , - 761 , - 1326 , - 2239 , - 3500 , - 5109 , - 1498 , - 3803 , - 888 , - 3889 , - 1670 , - 5367 , - 3844 , - 2669 , - 1842 , - 1363 , - 1232 , - 1449 , - 2014 , - 2927 , - 4188 , - 229 , - 2186 , - 4491 , - 1576 , - 4577 , - 2358 , - 487 , - 4532 , - 3357 , - 2530 , - 2051 , - 1920 , - 2137 , - 2702 , - 3615 , - 4876 , - 917 , - 2874 , - 5179 , - 2264 , - 5265 , - 3046 , - 1175 , - 5220 , - 4045 , - 3218 , - 2739 , - 2608 , - 2825 , - 3390 , - 4303 , - 5564 , - 1605 , - 3562 , - 299 , - 2952 , - 385 , - 3734 , - 1863 , - 340 , - 4733 , - 3906 , - 3427 , - 3296 , - 3513 , - 4078 , - 4991 , - 684 , - 2293 , - 4250 , - 987 , - 3640 , - 1073 , - 4422 , - 2551 , - 1028 , - 5421 , - 4594 , - 4115 , - 3984 , - 4201 , - 4766 , - 111 , - 1372 , - 2981 , - 4938 , - 1675 , - 4328 , - 1761 , - 5110 , - 3239 , - 1716 , - 541 , - 5282 , - 4803 , - 4672 , - 4889 , - 5454 , - 799 , - 2060 , - 3669 , - 58 , - 2363 , - 5016 , - 2449 , - 230 , - 3927 , - 2404 , - 1229 , - 402 , - 5491 , - 5360 , - 9 , - 574 , - 1487 , - 2748 , - 4357 , - 746 , - 3051 , - 136 , - 3137 , - 918 , - 4615 , - 3092 , - 1917 , - 1090 , - 611 , - 480 , - 697 , - 1262 , - 2175 , - 3436 , - 5045 , - 1434 , - 3739 , - 824 , - 3825 , - 1606 , - 5303 , - 3780 , - 2605 , - 1778 , - 1299 , - 1168 , - 1385 , - 1950 , - 2863 , - 4124 , - 165 , - 2122 , - 4427 , - 1512 , - 4513 , - 2294 , - 423 , - 4468 , - 3293 , - 2466 , - 1987 , - 1856 , - 2073 , - 2638 , - 3551 , - 4812 , - 853 , - 2810 , - 5115 , - 2200 , - 5201 , - 2982 , - 1111 , - 5156 , - 3981 , - 3154 , - 2675 , - 2544 , - 2761 , - 3326 , - 4239 , - 5500 , - 1541 , - 3498 , - 235 , - 2888 , - 321 , - 3670 , - 1799 , - 276 , - 4669 , - 3842 , - 3363 , - 3232 , - 3449 , - 4014 , - 4927 , - 620 , - 2229 , - 4186 , - 923 , - 3576 , - 1009 , - 4358 , - 2487 , - 964 , - 5357 , - 4530 , - 4051 , - 3920 , - 4137 , - 4702 , - 47 , - 1308 , - 2917 , - 4874 , - 1611 , - 4264 , - 1697 , - 5046 , - 3175 , - 1652 , - 477 , - 5218 , - 4739 , - 4608 , - 4825 , - 5390 , - 735 , - 1996 , - 3605 , - 5562 , - 2299 , - 4952 , - 2385 , - 166 , - 3863 , - 2340 , - 1165 , - 338 , - 5427 , - 5296 , - 5513 , - 510 , - 1423 , - 2684 , - 4293 , - 682 , - 2987 , - 72 , - 3073 , - 854 , - 4551 , - 3028 , - 1853 , - 1026 , - 547 , - 416 , - 633 , - 1198 , - 2111 , - 3372 , - 4981 , - 1370 , - 3675 , - 760 , - 3761 , - 1542 , - 5239 , - 3716 , - 2541 , - 1714 , - 1235 , - 1104 , - 1321 , - 1886 , - 2799 , - 4060 , - 101 , - 2058 , - 4363 , - 1448 , - 4449 , - 2230 , - 359 , - 4404 , - 3229 , - 2402 , - 1923 , - 1792 , - 2009 , - 2574 , - 3487 , - 4748 , - 789 , - 2746 , - 5051 , - 2136 , - 5137 , - 2918 , - 1047 , - 5092 , - 3917 , - 3090 , - 2611 , - 2480 , - 2697 , - 3262 , - 4175 , - 5436 , - 1477 , - 3434 , - 171 , - 2824 , - 257 , - 3606 , - 1735 , - 212 , - 4605 , - 3778 , - 3299 , - 3168 , - 3385 , - 3950 , - 4863 , - 556 , - 2165 , - 4122 , - 859 , - 3512 , - 945 , - 4294 , - 2423 , - 900 , - 5293 , - 4466 , - 3987 , - 3856 , - 4073 , - 4638 , - 5551 , - 1244 , - 2853 , - 4810 , - 1547 , - 4200 , - 1633 , - 4982 , - 3111 , - 1588 , - 413 , - 5154 , - 4675 , - 4544 , - 4761 , - 5326 , - 671 , - 1932 , - 3541 , - 5498 , - 2235 , - 4888 , - 2321 , - 102 , - 3799 , - 2276 , - 1101 , - 274 , - 5363 , - 5232 , - 5449 , - 446 , - 1359 , - 2620 , - 4229 , - 618 , - 2923 , - 8 , - 3009 , - 790 , - 4487 , - 2964 , - 1789 , - 962 , - 483 , - 352 , - 569 , - 1134 , - 2047 , - 3308 , - 4917 , - 1306 , - 3611 , - 696 , - 3697 , - 1478 , - 5175 , - 3652 , - 2477 , - 1650 , - 1171 , - 1040 , - 1257 , - 1822 , - 2735 , - 3996 , - 37 , - 1994 , - 4299 , - 1384 , - 4385 , - 2166 , - 295 , - 4340 , - 3165 , - 2338 , - 1859 , - 1728 , - 1945 , - 2510 , - 3423 , - 4684 , - 725 , - 2682 , - 4987 , - 2072 , - 5073 , - 2854 , - 983 , - 5028 , - 3853 , - 3026 , - 2547 , - 2416 , - 2633 , - 3198 , - 4111 , - 5372 , - 1413 , - 3370 , - 107 , - 2760 , - 193 , - 3542 , - 1671 , - 148 , - 4541 , - 3714 , - 3235 , - 3104 , - 3321 , - 3886 , - 4799 , - 492 , - 2101 , - 4058 , - 795 , - 3448 , - 881 , - 4230 , - 2359 , - 836 , - 5229 , - 4402 , - 3923 , - 3792 , - 4009 , - 4574 , - 5487 , - 1180 , - 2789 , - 4746 , - 1483 , - 4136 , - 1569 , - 4918 , - 3047 , - 1524 , - 349 , - 5090 , - 4611 , - 4480 , - 4697 , - 5262 , - 607 , - 1868 , - 3477 , - 5434 , - 2171 , - 4824 , - 2257 , - 38 , - 3735 , - 2212 , - 1037 , - 210 , - 5299 , - 5168 , - 5385 , - 382 , - 1295 , - 2556 , - 4165 , - 554 , - 2859 , - 5512 , - 2945 , - 726 , - 4423 , - 2900 , - 1725 , - 898 , - 419 , - 288 , - 505 , - 1070 , - 1983 , - 3244 , - 4853 , - 1242 , - 3547 , - 632 , - 3633 , - 1414 , - 5111 , - 3588 , - 2413 , - 1586 , - 1107 , - 976 , - 1193 , - 1758 , - 2671 , - 3932 , - 5541 , - 1930 , - 4235 , - 1320 , - 4321 , - 2102 , - 231 , - 4276 , - 3101 , - 2274 , - 1795 , - 1664 , - 1881 , - 2446 , - 3359 , - 4620 , - 661 , - 2618 , - 4923 , - 2008 , - 5009 , - 2790 , - 919 , - 4964 , - 3789 , - 2962 , - 2483 , - 2352 , - 2569 , - 3134 , - 4047 , - 5308 , - 1349 , - 3306 , - 43 , - 2696 , - 129 , - 3478 , - 1607 , - 84 , - 4477 , - 3650 , - 3171 , - 3040 , - 3257 , - 3822 , - 4735 , - 428 , - 2037 , - 3994 , - 731 , - 3384 , - 817 , - 4166 , - 2295 , - 772 , - 5165 , - 4338 , - 3859 , - 3728 , - 3945 , - 4510 , - 5423 , - 1116 , - 2725 , - 4682 , - 1419 , - 4072 , - 1505 , - 4854 , - 2983 , - 1460 , - 285 , - 5026 , - 4547 , - 4416 , - 4633 , - 5198 , - 543 , - 1804 , - 3413 , - 5370 , - 2107 , - 4760 , - 2193 , - 5542 , - 3671 , - 2148 , - 973 , - 146 , - 5235 , - 5104 , - 5321 , - 318 , - 1231 , - 2492 , - 4101 , - 490 , - 2795 , - 5448 , - 2881 , - 662 , - 4359 , - 2836 , - 1661 , - 834 , - 355 , - 224 , - 441 , - 1006 , - 1919 , - 3180 , - 4789 , - 1178 , - 3483 , - 568 , - 3569 , - 1350 , - 5047 , - 3524 , - 2349 , - 1522 , - 1043 , - 912 , - 1129 , - 1694 , - 2607 , - 3868 , - 5477 , - 1866 , - 4171 , - 1256 , - 4257 , - 2038 , - 167 , - 4212 , - 3037 , - 2210 , - 1731 , - 1600 , - 1817 , - 2382 , - 3295 , - 4556 , - 597 , - 2554 , - 4859 , - 1944 , - 4945 , - 2726 , - 855 , - 4900 , - 3725 , - 2898 , - 2419 , - 2288 , - 2505 , - 3070 , - 3983 , - 5244 , - 1285 , - 3242 , - 5547 , - 2632 , - 65 , - 3414 , - 1543 , - 20 , - 4413 , - 3586 , - 3107 , - 2976 , - 3193 , - 3758 , - 4671 , - 364 , - 1973 , - 3930 , - 667 , - 3320 , - 753 , - 4102 , - 2231 , - 708 , - 5101 , - 4274 , - 3795 , - 3664 , - 3881 , - 4446 , - 5359 , - 1052 , - 2661 , - 4618 , - 1355 , - 4008 , - 1441 , - 4790 , - 2919 , - 1396 , - 221 , - 4962 , - 4483 , - 4352 , - 4569 , - 5134 , - 479 , - 1740 , - 3349 , - 5306 , - 2043 , - 4696 , - 2129 , - 5478 , - 3607 , - 2084 , - 909 , - 82 , - 5171 , - 5040 , - 5257 , - 254 , - 1167 , - 2428 , - 4037 , - 426 , - 2731 , - 5384 , - 2817 , - 598 , - 4295 , - 2772 , - 1597 , - 770 , - 291 , - 160 , - 377 , - 942 , - 1855 , - 3116 , - 4725 , - 1114 , - 3419 , - 504 , - 3505 , - 1286 , - 4983 , - 3460 , - 2285 , - 1458 , - 979 , - 848 , - 1065 , - 1630 , - 2543 , - 3804 , - 5413 , - 1802 , - 4107 , - 1192 , - 4193 , - 1974 , - 103 , - 4148 , - 2973 , - 2146 , - 1667 , - 1536 , - 1753 , - 2318 , - 3231 , - 4492 , - 533 , - 2490 , - 4795 , - 1880 , - 4881 , - 2662 , - 791 , - 4836 , - 3661 , - 2834 , - 2355 , - 2224 , - 2441 , - 3006 , - 3919 , - 5180 , - 1221 , - 3178 , - 5483 , - 2568 , - 1 , - 3350 , - 1479 , - 5524 , - 4349 , - 3522 , - 3043 , - 2912 , - 3129 , - 3694 , - 4607 , - 300 , - 1909 , - 3866 , - 603 , - 3256 , - 689 , - 4038 , - 2167 , - 644 , - 5037 , - 4210 , - 3731 , - 3600 , - 3817 , - 4382 , - 5295 , - 988 , - 2597 , - 4554 , - 1291 , - 3944 , - 1377 , - 4726 , - 2855 , - 1332 , - 157 , - 4898 , - 4419 , - 4288 , - 4505 , - 5070 , - 415 , - 1676 , - 3285 , - 5242 , - 1979 , - 4632 , - 2065 , - 5414 , - 3543 , - 2020 , - 845 , - 18 , - 5107 , - 4976 , - 5193 , - 190 , - 1103 , - 2364 , - 3973 , - 362 , - 2667 , - 5320 , - 2753 , - 534 , - 4231 , - 2708 , - 1533 , - 706 , - 227 , - 96 , - 313 , - 878 , - 1791 , - 3052 , - 4661 , - 1050 , - 3355 , - 440 , - 3441 , - 1222 , - 4919 , - 3396 , - 2221 , - 1394 , - 915 , - 784 , - 1001 , - 1566 , - 2479 , - 3740 , - 5349 , - 1738 , - 4043 , - 1128 , - 4129 , - 1910 , - 39 , - 4084 , - 2909 , - 2082 , - 1603 , - 1472 , - 1689 , - 2254 , - 3167 , - 4428 , - 469 , - 2426 , - 4731 , - 1816 , - 4817 , - 2598 , - 727 , - 4772 , - 3597 , - 2770 , - 2291 , - 2160 , - 2377 , - 2942 , - 3855 , - 5116 , - 1157 , - 3114 , - 5419 , - 2504 , - 5505 , - 3286 , - 1415 , - 5460 , - 4285 , - 3458 , - 2979 , - 2848 , - 3065 , - 3630 , - 4543 , - 236 , - 1845 , - 3802 , - 539 , - 3192 , - 625 , - 3974 , - 2103 , - 580 , - 4973 , - 4146 , - 3667 , - 3536 , - 3753 , - 4318 , - 5231 , - 924 , - 2533 , - 4490 , - 1227 , - 3880 , - 1313 , - 4662 , - 2791 , - 1268 , - 93 , - 4834 , - 4355 , - 4224 , - 4441 , - 5006 , - 351 , - 1612 , - 3221 , - 5178 , - 1915 , - 4568 , - 2001 , - 5350 , - 3479 , - 1956 , - 781 , - 5522 , - 5043 , - 4912 , - 5129 , - 126 , - 1039 , - 2300 , - 3909 , - 298 , - 2603 , - 5256 , - 2689 , - 470 , - 4167 , - 2644 , - 1469 , - 642 , - 163 , - 32 , - 249 , - 814 , - 1727 , - 2988 , - 4597 , - 986 , - 3291 , - 376 , - 3377 , - 1158 , - 4855 , - 3332 , - 2157 , - 1330 , - 851 , - 720 , - 937 , - 1502 , - 2415 , - 3676 , - 5285 , - 1674 , - 3979 , - 1064 , - 4065 , - 1846 , - 5543 , - 4020 , - 2845 , - 2018 , - 1539 , - 1408 , - 1625 , - 2190 , - 3103 , - 4364 , - 405 , - 2362 , - 4667 , - 1752 , - 4753 , - 2534 , - 663 , - 4708 , - 3533 , - 2706 , - 2227 , - 2096 , - 2313 , - 2878 , - 3791 , - 5052 , - 1093 , - 3050 , - 5355 , - 2440 , - 5441 , - 3222 , - 1351 , - 5396 , - 4221 , - 3394 , - 2915 , - 2784 , - 3001 , - 3566 , - 4479 , - 172 , - 1781 , - 3738 , - 475 , - 3128 , - 561 , - 3910 , - 2039 , - 516 , - 4909 , - 4082 , - 3603 , - 3472 , - 3689 , - 4254 , - 5167 , - 860 , - 2469 , - 4426 , - 1163 , - 3816 , - 1249 , - 4598 , - 2727 , - 1204 , - 29 , - 4770 , - 4291 , - 4160 , - 4377 , - 4942 , - 287 , - 1548 , - 3157 , - 5114 , - 1851 , - 4504 , - 1937 , - 5286 , - 3415 , - 1892 , - 717 , - 5458 , - 4979 , - 4848 , - 5065 , - 62 , - 975 , - 2236 , - 3845 , - 234 , - 2539 , - 5192 , - 2625 , - 406 , - 4103 , - 2580 , - 1405 , - 578 , - 99 , - 5536 , - 185 , - 750 , - 1663 , - 2924 , - 4533 , - 922 , - 3227 , - 312 , - 3313 , - 1094 , - 4791 , - 3268 , - 2093 , - 1266 , - 787 , - 656 , - 873 , - 1438 , - 2351 , - 3612 , - 5221 , - 1610 , - 3915 , - 1000 , - 4001 , - 1782 , - 5479 , - 3956 , - 2781 , - 1954 , - 1475 , - 1344 , - 1561 , - 2126 , - 3039 , - 4300 , - 341 , - 2298 , - 4603 , - 1688 , - 4689 , - 2470 , - 599 , - 4644 , - 3469 , - 2642 , - 2163 , - 2032 , - 2249 , - 2814 , - 3727 , - 4988 , - 1029 , - 2986 , - 5291 , - 2376 , - 5377 , - 3158 , - 1287 , - 5332 , - 4157 , - 3330 , - 2851 , - 2720 , - 2937 , - 3502 , - 4415 , - 108 , - 1717 , - 3674 , - 411 , - 3064 , - 497 , - 3846 , - 1975 , - 452 , - 4845 , - 4018 , - 3539 , - 3408 , - 3625 , - 4190 , - 5103 , - 796 , - 2405 , - 4362 , - 1099 , - 3752 , - 1185 , - 4534 , - 2663 , - 1140 , - 5533 , - 4706 , - 4227 , - 4096 , - 4313 , - 4878 , - 223 , - 1484 , - 3093 , - 5050 , - 1787 , - 4440 , - 1873 , - 5222 , - 3351 , - 1828 , - 653 , - 5394 , - 4915 , - 4784 , - 5001 , - 5566 , - 911 , - 2172 , - 3781 , - 170 , - 2475 , - 5128 , - 2561 , - 342 , - 4039 , - 2516 , - 1341 , - 514 , - 35 , - 5472 , - 121 , - 686 , - 1599 , - 2860 , - 4469 , - 858 , - 3163 , - 248 , - 3249 , - 1030 , - 4727 , - 3204 , - 2029 , - 1202 , - 723 , - 592 , - 809 , - 1374 , - 2287 , - 3548 , - 5157 , - 1546 , - 3851 , - 936 , - 3937 , - 1718 , - 5415 , - 3892 , - 2717 , - 1890 , - 1411 , - 1280 , - 1497 , - 2062 , - 2975 , - 4236 , - 277 , - 2234 , - 4539 , - 1624 , - 4625 , - 2406 , - 535 , - 4580 , - 3405 , - 2578 , - 2099 , - 1968 , - 2185 , - 2750 , - 3663 , - 4924 , - 965 , - 2922 , - 5227 , - 2312 , - 5313 , - 3094 , - 1223 , - 5268 , - 4093 , - 3266 , - 2787 , - 2656 , - 2873 , - 3438 , - 4351 , - 44 , - 1653 , - 3610 , - 347 , - 3000 , - 433 , - 3782 , - 1911 , - 388 , - 4781 , - 3954 , - 3475 , - 3344 , - 3561 , - 4126 , - 5039 , - 732 , - 2341 , - 4298 , - 1035 , - 3688 , - 1121 , - 4470 , - 2599 , - 1076 , - 5469 , - 4642 , - 4163 , - 4032 , - 4249 , - 4814 , - 159 , - 1420 , - 3029 , - 4986 , - 1723 , - 4376 , - 1809 , - 5158 , - 3287 , - 1764 , - 589 , - 5330 , - 4851 , - 4720 , - 4937 , - 5502 , - 847 , - 2108 , - 3717 , - 106 , - 2411 , - 5064 , - 2497 , - 278 , - 3975 , - 2452 , - 1277 , - 450 , - 5539 , - 5408 , - 57 , - 622 , - 1535 , - 2796 , - 4405 , - 794 , - 3099 , - 184 , - 3185 , - 966 , - 4663 , - 3140 , - 1965 , - 1138 , - 659 , - 528 , - 745 , - 1310 , - 2223 , - 3484 , - 5093 , - 1482 , - 3787 , - 872 , - 3873 , - 1654 , - 5351 , - 3828 , - 2653 , - 1826 , - 1347 , - 1216 , - 1433 , - 1998 , - 2911 , - 4172 , - 213 , - 2170 , - 4475 , - 1560 , - 4561 , - 2342 , - 471 , - 4516 , - 3341 , - 2514 , - 2035 , - 1904 , - 2121 , - 2686 , - 3599 , - 4860 , - 901 , - 2858 , - 5163 , - 2248 , - 5249 , - 3030 , - 1159 , - 5204 , - 4029 , - 3202 , - 2723 , - 2592 , - 2809 , - 3374 , - 4287 , - 5548 , - 1589 , - 3546 , - 283 , - 2936 , - 369 , - 3718 , - 1847 , - 324 , - 4717 , - 3890 , - 3411 , - 3280 , - 3497 , - 4062 , - 4975 , - 668 , - 2277 , - 4234 , - 971 , - 3624 , - 1057 , - 4406 , - 2535 , - 1012 , - 5405 , - 4578 , - 4099 , - 3968 , - 4185 , - 4750 , - 95 , - 1356 , - 2965 , - 4922 , - 1659 , - 4312 , - 1745 , - 5094 , - 3223 , - 1700 , - 525 , - 5266 , - 4787 , - 4656 , - 4873 , - 5438 , - 783 , - 2044 , - 3653 , - 42 , - 2347 , - 5000 , - 2433 , - 214 , - 3911 , - 2388 , - 1213 , - 386 , - 5475 , - 5344 , - 5561 , - 558 , - 1471 , - 2732 , - 4341 , - 730 , - 3035 , - 120 , - 3121 , - 902 , - 4599 , - 3076 , - 1901 , - 1074 , - 595 , - 464 , - 681 , - 1246 , - 2159 , - 3420 , - 5029 , - 1418 , - 3723 , - 808 , - 3809 , - 1590 , - 5287 , - 3764 , - 2589 , - 1762 , - 1283 , - 1152 , - 1369 , - 1934 , - 2847 , - 4108 , - 149 , - 2106 , - 4411 , - 1496 , - 4497 , - 2278 , - 407 , - 4452 , - 3277 , - 2450 , - 1971 , - 1840 , - 2057 , - 2622 , - 3535 , - 4796 , - 837 , - 2794 , - 5099 , - 2184 , - 5185 , - 2966 , - 1095 , - 5140 , - 3965 , - 3138 , - 2659 , - 2528 , - 2745 , - 3310 , - 4223 , - 5484 , - 1525 , - 3482 , - 219 , - 2872 , - 305 , - 3654 , - 1783 , - 260 , - 4653 , - 3826 , - 3347 , - 3216 , - 3433 , - 3998 , - 4911 , - 604 , - 2213 , - 4170 , - 907 , - 3560 , - 993 , - 4342 , - 2471 , - 948 , - 5341 , - 4514 , - 4035 , - 3904 , - 4121 , - 4686 , - 31 , - 1292 , - 2901 , - 4858 , - 1595 , - 4248 , - 1681 , - 5030 , - 3159 , - 1636 , - 461 , - 5202 , - 4723 , - 4592 , - 4809 , - 5374 , - 719 , - 1980 , - 3589 , - 5546 , - 2283 , - 4936 , - 2369 , - 150 , - 3847 , - 2324 , - 1149 , - 322 , - 5411 , - 5280 , - 5497 , - 494 , - 1407 , - 2668 , - 4277 , - 666 , - 2971 , - 56 , - 3057 , - 838 , - 4535 , - 3012 , - 1837 , - 1010 , - 531 , - 400 , - 617 , - 1182 , - 2095 , - 3356 , - 4965 , - 1354 , - 3659 , - 744 , - 3745 , - 1526 , - 5223 , - 3700 , - 2525 , - 1698 , - 1219 , - 1088 , - 1305 , - 1870 , - 2783 , - 4044 , - 85 , - 2042 , - 4347 , - 1432 , - 4433 , - 2214 , - 343 , - 4388 , - 3213 , - 2386 , - 1907 , - 1776 , - 1993 , - 2558 , - 3471 , - 4732 , - 773 , - 2730 , - 5035 , - 2120 , - 5121 , - 2902 , - 1031 , - 5076 , - 3901 , - 3074 , - 2595 , - 2464 , - 2681 , - 3246 , - 4159 , - 5420 , - 1461 , - 3418 , - 155 , - 2808 , - 241 , - 3590 , - 1719 , - 196 , - 4589 , - 3762 , - 3283 , - 3152 , - 3369 , - 3934 , - 4847 , - 540 , - 2149 , - 4106 , - 843 , - 3496 , - 929 , - 4278 , - 2407 , - 884 , - 5277 , - 4450 , - 3971 , - 3840 , - 4057 , - 4622 , - 5535 , - 1228 , - 2837 , - 4794 , - 1531 , - 4184 , - 1617 , - 4966 , - 3095 , - 1572 , - 397 , - 5138 , - 4659 , - 4528 , - 4745 , - 5310 , - 655 , - 1916 , - 3525 , - 5482 , - 2219 , - 4872 , - 2305 , - 86 , - 3783 , - 2260 , - 1085 , - 258 , - 5347 , - 5216 , - 5433 , - 430 , - 1343 , - 2604 , - 4213 , - 602 , - 2907 , - 5560 , - 2993 , - 774 , - 4471 , - 2948 , - 1773 , - 946 , - 467 , - 336 , - 553 , - 1118 , - 2031 , - 3292 , - 4901 , - 1290 , - 3595 , - 680 , - 3681 , - 1462 , - 5159 , - 3636 , - 2461 , - 1634 , - 1155 , - 1024 , - 1241 , - 1806 , - 2719 , - 3980 , - 21 , - 1978 , - 4283 , - 1368 , - 4369 , - 2150 , - 279 , - 4324 , - 3149 , - 2322 , - 1843 , - 1712 , - 1929 , - 2494 , - 3407 , - 4668 , - 709 , - 2666 , - 4971 , - 2056 , - 5057 , - 2838 , - 967 , - 5012 , - 3837 , - 3010 , - 2531 , - 2400 , - 2617 , - 3182 , - 4095 , - 5356 , - 1397 , - 3354 , - 91 , - 2744 , - 177 , - 3526 , - 1655 , - 132 , - 4525 , - 3698 , - 3219 , - 3088 , - 3305 , - 3870 , - 4783 , - 476 , - 2085 , - 4042 , - 779 , - 3432 , - 865 , - 4214 , - 2343 , - 820 , - 5213 , - 4386 , - 3907 , - 3776 , - 3993 , - 4558 , - 5471 , - 1164 , - 2773 , - 4730 , - 1467 , - 4120 , - 1553 , - 4902 , - 3031 , - 1508 , - 333 , - 5074 , - 4595 , - 4464 , - 4681 , - 5246 , - 591 , - 1852 , - 3461 , - 5418 , - 2155 , - 4808 , - 2241 , - 22 , - 3719 , - 2196 , - 1021 , - 194 , - 5283 , - 5152 , - 5369 , - 366 , - 1279 , - 2540 , - 4149 , - 538 , - 2843 , - 5496 , - 2929 , - 710 , - 4407 , - 2884 , - 1709 , - 882 , - 403 , - 272 , - 489 , - 1054 , - 1967 , - 3228 , - 4837 , - 1226 , - 3531 , - 616 , - 3617 , - 1398 , - 5095 , - 3572 , - 2397 , - 1570 , - 1091 , - 960 , - 1177 , - 1742 , - 2655 , - 3916 , - 5525 , - 1914 , - 4219 , - 1304 , - 4305 , - 2086 , - 215 , - 4260 , - 3085 , - 2258 , - 1779 , - 1648 , - 1865 , - 2430 , - 3343 , - 4604 , - 645 , - 2602 , - 4907 , - 1992 , - 4993 , - 2774 , - 903 , - 4948 , - 3773 , - 2946 , - 2467 , - 2336 , - 2553 , - 3118 , - 4031 , - 5292 , - 1333 , - 3290 , - 27 , - 2680 , - 113 , - 3462 , - 1591 , - 68 , - 4461 , - 3634 , - 3155 , - 3024 , - 3241 , - 3806 , - 4719 , - 412 , - 2021 , - 3978 , - 715 , - 3368 , - 801 , - 4150 , - 2279 , - 756 , - 5149 , - 4322 , - 3843 , - 3712 , - 3929 , - 4494 , - 5407 , - 1100 , - 2709 , - 4666 , - 1403 , - 4056 , - 1489 , - 4838 , - 2967 , - 1444 , - 269 , - 5010 , - 4531 , - 4400 , - 4617 , - 5182 , - 527 , - 1788 , - 3397 , - 5354 , - 2091 , - 4744 , - 2177 , - 5526 , - 3655 , - 2132 , - 957 , - 130 , - 5219 , - 5088 , - 5305 , - 302 , - 1215 , - 2476 , - 4085 , - 474 , - 2779 , - 5432 , - 2865 , - 646 , - 4343 , - 2820 , - 1645 , - 818 , - 339 , - 208 , - 425 , - 990 , - 1903 , - 3164 , - 4773 , - 1162 , - 3467 , - 552 , - 3553 , - 1334 , - 5031 , - 3508 , - 2333 , - 1506 , - 1027 , - 896 , - 1113 , - 1678 , - 2591 , - 3852 , - 5461 , - 1850 , - 4155 , - 1240 , - 4241 , - 2022 , - 151 , - 4196 , - 3021 , - 2194 , - 1715 , - 1584 , - 1801 , - 2366 , - 3279 , - 4540 , - 581 , - 2538 , - 4843 , - 1928 , - 4929 , - 2710 , - 839 , - 4884 , - 3709 , - 2882 , - 2403 , - 2272 , - 2489 , - 3054 , - 3967 , - 5228 , - 1269 , - 3226 , - 5531 , - 2616 , - 49 , - 3398 , - 1527 , - 4 , - 4397 , - 3570 , - 3091 , - 2960 , - 3177 , - 3742 , - 4655 , - 348 , - 1957 , - 3914 , - 651 , - 3304 , - 737 , - 4086 , - 2215 , - 692 , - 5085 , - 4258 , - 3779 , - 3648 , - 3865 , - 4430 , - 5343 , - 1036 , - 2645 , - 4602 , - 1339 , - 3992 , - 1425 , - 4774 , - 2903 , - 1380 , - 205 , - 4946 , - 4467 , - 4336 , - 4553 , - 5118 , - 463 , - 1724 , - 3333 , - 5290 , - 2027 , - 4680 , - 2113 , - 5462 , - 3591 , - 2068 , - 893 , - 66 , - 5155 , - 5024 , - 5241 , - 238 , - 1151 , - 2412 , - 4021 , - 410 , - 2715 , - 5368 , - 2801 , - 582 , - 4279 , - 2756 , - 1581 , - 754 , - 275 , - 144 , - 361 , - 926 , - 1839 , - 3100 , - 4709 , - 1098 , - 3403 , - 488 , - 3489 , - 1270 , - 4967 , - 3444 , - 2269 , - 1442 , - 963 , - 832 , - 1049 , - 1614 , - 2527 , - 3788 , - 5397 , - 1786 , - 4091 , - 1176 , - 4177 , - 1958 , - 87 , - 4132 , - 2957 , - 2130 , - 1651 , - 1520 , - 1737 , - 2302 , - 3215 , - 4476 , - 517 , - 2474 , - 4779 , - 1864 , - 4865 , - 2646 , - 775 , - 4820 , - 3645 , - 2818 , - 2339 , - 2208 , - 2425 , - 2990 , - 3903 , - 5164 , - 1205 , - 3162 , - 5467 , - 2552 , - 5553 , - 3334 , - 1463 , - 5508 , - 4333 , - 3506 , - 3027 , - 2896 , - 3113 , - 3678 , - 4591 , - 284 , - 1893 , - 3850 , - 587 , - 3240 , - 673 , - 4022 , - 2151 , - 628 , - 5021 , - 4194 , - 3715 , - 3584 , - 3801 , - 4366 , - 5279 , - 972 , - 2581 , - 4538 , - 1275 , - 3928 , - 1361 , - 4710 , - 2839 , - 1316 , - 141 , - 4882 , - 4403 , - 4272 , - 4489 , - 5054 , - 399 , - 1660 , - 3269 , - 5226 , - 1963 , - 4616 , - 2049 , - 5398 , - 3527 , - 2004 , - 829 , - 2 , - 5091 , - 4960 , - 5177 , - 174 , - 1087 , - 2348 , - 3957 , - 346 , - 2651 , - 5304 , - 2737 , - 518 , - 4215 , - 2692 , - 1517 , - 690 , - 211 , - 80 , - 297 , - 862 , - 1775 , - 3036 , - 4645 , - 1034 , - 3339 , - 424 , - 3425 , - 1206 , - 4903 , - 3380 , - 2205 , - 1378 , - 899 , - 768 , - 985 , - 1550 , - 2463 , - 3724 , - 5333 , - 1722 , - 4027 , - 1112 , - 4113 , - 1894 , - 23 , - 4068 , - 2893 , - 2066 , - 1587 , - 1456 , - 1673 , - 2238 , - 3151 , - 4412 , - 453 , - 2410 , - 4715 , - 1800 , - 4801 , - 2582 , - 711 , - 4756 , - 3581 , - 2754 , - 2275 , - 2144 , - 2361 , - 2926 , - 3839 , - 5100 , - 1141 , - 3098 , - 5403 , - 2488 , - 5489 , - 3270 , - 1399 , - 5444 , - 4269 , - 3442 , - 2963 , - 2832 , - 3049 , - 3614 , - 4527 , - 220 , - 1829 , - 3786 , - 523 , - 3176 , - 609 , - 3958 , - 2087 , - 564 , - 4957 , - 4130 , - 3651 , - 3520 , - 3737 , - 4302 , - 5215 , - 908 , - 2517 , - 4474 , - 1211 , - 3864 , - 1297 , - 4646 , - 2775 , - 1252 , - 77 , - 4818 , - 4339 , - 4208 , - 4425 , - 4990 , - 335 , - 1596 , - 3205 , - 5162 , - 1899 , - 4552 , - 1985 , - 5334 , - 3463 , - 1940 , - 765 , - 5506 , - 5027 , - 4896 , - 5113 , - 110 , - 1023 , - 2284 , - 3893 , - 282 , - 2587 , - 5240 , - 2673 , - 454 , - 4151 , - 2628 , - 1453 , - 626 , - 147 , - 16 , - 233 , - 798 , - 1711 , - 2972 , - 4581 , - 970 , - 3275 , - 360 , - 3361 , - 1142 , - 4839 , - 3316 , - 2141 , - 1314 , - 835 , - 704 , - 921 , - 1486 , - 2399 , - 3660 , - 5269 , - 1658 , - 3963 , - 1048 , - 4049 , - 1830 , - 5527 , - 4004 , - 2829 , - 2002 , - 1523 , - 1392 , - 1609 , - 2174 , - 3087 , - 4348 , - 389 , - 2346 , - 4651 , - 1736 , - 4737 , - 2518 , - 647 , - 4692 , - 3517 , - 2690 , - 2211 , - 2080 , - 2297 , - 2862 , - 3775 , - 5036 , - 1077 , - 3034 , - 5339 , - 2424 , - 5425 , - 3206 , - 1335 , - 5380 , - 4205 , - 3378 , - 2899 , - 2768 , - 2985 , - 3550 , - 4463 , - 156 , - 1765 , - 3722 , - 459 , - 3112 , - 545 , - 3894 , - 2023 , - 500 , - 4893 , - 4066 , - 3587 , - 3456 , - 3673 , - 4238 , - 5151 , - 844 , - 2453 , - 4410 , - 1147 , - 3800 , - 1233 , - 4582 , - 2711 , - 1188 , - 13 , - 4754 , - 4275 , - 4144 , - 4361 , - 4926 , - 271 , - 1532 , - 3141 , - 5098 , - 1835 , - 4488 , - 1921 , - 5270 , - 3399 , - 1876 , - 701 , - 5442 , - 4963 , - 4832 , - 5049 , - 46 , - 959 , - 2220 , - 3829 , - 218 , - 2523 , - 5176 , - 2609 , - 390 , - 4087 , - 2564 , - 1389 , - 562 , - 83 , - 5520 , - 169 , - 734 , - 1647 , - 2908 , - 4517 , - 906 , - 3211 , - 296 , - 3297 , - 1078 , - 4775 , - 3252 , - 2077 , - 1250 , - 771 , - 640 , - 857 , - 1422 , - 2335 , - 3596 , - 5205 , - 1594 , - 3899 , - 984 , - 3985 , - 1766 , - 5463 , - 3940 , - 2765 , - 1938 , - 1459 , - 1328 , - 1545 , - 2110 , - 3023 , - 4284 , - 325 , - 2282 , - 4587 , - 1672 , - 4673 , - 2454 , - 583 , - 4628 , - 3453 , - 2626 , - 2147 , - 2016 , - 2233 , - 2798 , - 3711 , - 4972 , - 1013 , - 2970 , - 5275 , - 2360 , - 5361 , - 3142 , - 1271 , - 5316 , - 4141 , - 3314 , - 2835 , - 2704 , - 2921 , - 3486 , - 4399 , - 92 , - 1701 , - 3658 , - 395 , - 3048 , - 481 , - 3830 , - 1959 , - 436 , - 4829 , - 4002 , - 3523 , - 3392 , - 3609 , - 4174 , - 5087 , - 780 , - 2389 , - 4346 , - 1083 , - 3736 , - 1169 , - 4518 , - 2647 , - 1124 , - 5517 , - 4690 , - 4211 , - 4080 , - 4297 , - 4862 , - 207 , - 1468 , - 3077 , - 5034 , - 1771 , - 4424 , - 1857 , - 5206 , - 3335 , - 1812 , - 637 , - 5378 , - 4899 , - 4768 , - 4985 , - 5550 , - 895 , - 2156 , - 3765 , - 154 , - 2459 , - 5112 , - 2545 , - 326 , - 4023 , - 2500 , - 1325 , - 498 , - 19 , - 5456 , - 105 , - 670 , - 1583 , - 2844 , - 4453 , - 842 , - 3147 , - 232 , - 3233 , - 1014 , - 4711 , - 3188 , - 2013 , - 1186 , - 707 , - 576 , - 793 , - 1358 , - 2271 , - 3532 , - 5141 , - 1530 , - 3835 , - 920 , - 3921 , - 1702 , - 5399 , - 3876 , - 2701 , - 1874 , - 1395 , - 1264 , - 1481 , - 2046 , - 2959 , - 4220 , - 261 , - 2218 , - 4523 , - 1608 , - 4609 , - 2390 , - 519 , - 4564 , - 3389 , - 2562 , - 2083 , - 1952 , - 2169 , - 2734 , - 3647 , - 4908 , - 949 , - 2906 , - 5211 , - 2296 , - 5297 , - 3078 , - 1207 , - 5252 , - 4077 , - 3250 , - 2771 , - 2640 , - 2857 , - 3422 , - 4335 , - 28 , - 1637 , - 3594 , - 331 , - 2984 , - 417 , - 3766 , - 1895 , - 372 , - 4765 , - 3938 , - 3459 , - 3328 , - 3545 , - 4110 , - 5023 , - 716 , - 2325 , - 4282 , - 1019 , - 3672 , - 1105 , - 4454 , - 2583 , - 1060 , - 5453 , - 4626 , - 4147 , - 4016 , - 4233 , - 4798 , - 143 , - 1404 , - 3013 , - 4970 , - 1707 , - 4360 , - 1793 , - 5142 , - 3271 , - 1748 , - 573 , - 5314 , - 4835 , - 4704 , - 4921 , - 5486 , - 831 , - 2092 , - 3701 , - 90 , - 2395 , - 5048 , - 2481 , - 262 , - 3959 , - 2436 , - 1261 , - 434 , - 5523 , - 5392 , - 41 , - 606 , - 1519 , - 2780 , - 4389 , - 778 , - 3083 , - 168 , - 3169 , - 950 , - 4647 , - 3124 , - 1949 , - 1122 , - 643 , - 512 , - 729 , - 1294 , - 2207 , - 3468 , - 5077 , - 1466 , - 3771 , - 856 , - 3857 , - 1638 , - 5335 , - 3812 , - 2637 , - 1810 , - 1331 , - 1200 , - 1417 , - 1982 , - 2895 , - 4156 , - 197 , - 2154 , - 4459 , - 1544 , - 4545 , - 2326 , - 455 , - 4500 , - 3325 , - 2498 , - 2019 , - 1888 , - 2105 , - 2670 , - 3583 , - 4844 , - 885 , - 2842 , - 5147 , - 2232 , - 5233 , - 3014 , - 1143 , - 5188 , - 4013 , - 3186 , - 2707 , - 2576 , - 2793 , - 3358 , - 4271 , - 5532 , - 1573 , - 3530 , - 267 , - 2920 , - 353 , - 3702 , - 1831 , - 308 , - 4701 , - 3874 , - 3395 , - 3264 , - 3481 , - 4046 , - 4959 , - 652 , - 2261 , - 4218 , - 955 , - 3608 , - 1041 , - 4390 , - 2519 , - 996 , - 5389 , - 4562 , - 4083 , - 3952 , - 4169 , - 4734 , - 79 , - 1340 , - 2949 , - 4906 , - 1643 , - 4296 , - 1729 , - 5078 , - 3207 , - 1684 , - 509 , - 5250 , - 4771 , - 4640 , - 4857 , - 5422 , - 767 , - 2028 , - 3637 , - 26 , - 2331 , - 4984 , - 2417 , - 198 , - 3895 , - 2372 , - 1197 , - 370 , - 5459 , - 5328 , - 5545 , - 542 , - 1455 , - 2716 , - 4325 , - 714 , - 3019 , - 104 , - 3105 , - 886 , - 4583 , - 3060 , - 1885 , - 1058 , - 579 , - 448 , - 665 , - 1230 , - 2143 , - 3404 , - 5013 , - 1402 , - 3707 , - 792 , - 3793 , - 1574 , - 5271 , - 3748 , - 2573 , - 1746 , - 1267 , - 1136 , - 1353 , - 1918 , - 2831 , - 4092 , - 133 , - 2090 , - 4395 , - 1480 , - 4481 , - 2262 , - 391 , - 4436 , - 3261 , - 2434 , - 1955 , - 1824 , - 2041 , - 2606 , - 3519 , - 4780 , - 821 , - 2778 , - 5083 , - 2168 , - 5169 , - 2950 , - 1079 , - 5124 , - 3949 , - 3122 , - 2643 , - 2512 , - 2729 , - 3294 , - 4207 , - 5468 , - 1509 , - 3466 , - 203 , - 2856 , - 289 , - 3638 , - 1767 , - 244 , - 4637 , - 3810 , - 3331 , - 3200 , - 3417 , - 3982 , - 4895 , - 588 , - 2197 , - 4154 , - 891 , - 3544 , - 977 , - 4326 , - 2455 , - 932 , - 5325 , - 4498 , - 4019 , - 3888 , - 4105 , - 4670 , - 15 , - 1276 , - 2885 , - 4842 , - 1579 , - 4232 , - 1665 , - 5014 , - 3143 , - 1620 , - 445 , - 5186 , - 4707 , - 4576 , - 4793 , - 5358 , - 703 , - 1964 , - 3573 , - 5530 , - 2267 , - 4920 , - 2353 , - 134 , - 3831 , - 2308 , - 1133 , - 306 , - 5395 , - 5264 , - 5481 , - 478 , - 1391 , - 2652 , - 4261 , - 650 , - 2955 , - 40 , - 3041 , - 822 , - 4519 , - 2996 , - 1821 , - 994 , - 515 , - 384 , - 601 , - 1166 , - 2079 , - 3340 , - 4949 , - 1338 , - 3643 , - 728 , - 3729 , - 1510 , - 5207 , - 3684 , - 2509 , - 1682 , - 1203 , - 1072 , - 1289 , - 1854 , - 2767 , - 4028 , - 69 , - 2026 , - 4331 , - 1416 , - 4417 , - 2198 , - 327 , - 4372 , - 3197 , - 2370 , - 1891 , - 1760 , - 1977 , - 2542 , - 3455 , - 4716 , - 757 , - 2714 , - 5019 , - 2104 , - 5105 , - 2886 , - 1015 , - 5060 , - 3885 , - 3058 , - 2579 , - 2448 , - 2665 , - 3230 , - 4143 , - 5404 , - 1445 , - 3402 , - 139 , - 2792 , - 225 , - 3574 , - 1703 , - 180 , - 4573 , - 3746 , - 3267 , - 3136 , - 3353 , - 3918 , - 4831 , - 524 , - 2133 , - 4090 , - 827 , - 3480 , - 913 , - 4262 , - 2391 , - 868 , - 5261 , - 4434 , - 3955 , - 3824 , - 4041 , - 4606 , - 5519 , - 1212 , - 2821 , - 4778 , - 1515 , - 4168 , - 1601 , - 4950 , - 3079 , - 1556 , - 381 , - 5122 , - 4643 , - 4512 , - 4729 , - 5294 , - 639 , - 1900 , - 3509 , - 5466 , - 2203 , - 4856 , - 2289 , - 70 , - 3767 , - 2244 , - 1069 , - 242 , - 5331 , - 5200 , - 5417 , - 414 , - 1327 , - 2588 , - 4197 , - 586 , - 2891 , - 5544 , - 2977 , - 758 , - 4455 , - 2932 , - 1757 , - 930 , - 451 , - 320 , - 537 , - 1102 , - 2015 , - 3276 , - 4885 , - 1274 , - 3579 , - 664 , - 3665 , - 1446 , - 5143 , - 3620 , - 2445 , - 1618 , - 1139 , - 1008 , - 1225 , - 1790 , - 2703 , - 3964 , - 5 , - 1962 , - 4267 , - 1352 , - 4353 , - 2134 , - 263 , - 4308 , - 3133 , - 2306 , - 1827 , - 1696 , - 1913 , - 2478 , - 3391 , - 4652 , - 693 , - 2650 , - 4955 , - 2040 , - 5041 , - 2822 , - 951 , - 4996 , - 3821 , - 2994 , - 2515 , - 2384 , - 2601 , - 3166 , - 4079 , - 5340 , - 1381 , - 3338 , - 75 , - 2728 , - 161 , - 3510 , - 1639 , - 116 , - 4509 , - 3682 , - 3203 , - 3072 , - 3289 , - 3854 , - 4767 , - 460 , - 2069 , - 4026 , - 763 , - 3416 , - 849 , - 4198 , - 2327 , - 804 , - 5197 , - 4370 , - 3891 , - 3760 , - 3977 , - 4542 , - 5455 , - 1148 , - 2757 , - 4714 , - 1451 , - 4104 , - 1537 , - 4886 , - 3015 , - 1492 , - 317 , - 5058 , - 4579 , - 4448 , - 4665 , - 5230 , - 575 , - 1836 , - 3445 , - 5402 , - 2139 , - 4792 , - 2225 , - 6 , - 3703 , - 2180 , - 1005 , - 178 , - 5267 , - 5136 , - 5353 , - 350 , - 1263 , - 2524 , - 4133 , - 522 , - 2827 , - 5480 , - 2913 , - 694 , - 4391 , - 2868 , - 1693 , - 866 , - 387 , - 256 , - 473 , - 1038 , - 1951 , - 3212 , - 4821 , - 1210 , - 3515 , - 600 , - 3601 , - 1382 , - 5079 , - 3556 , - 2381 , - 1554 , - 1075 , - 944 , - 1161 , - 1726 , - 2639 , - 3900 , - 5509 , - 1898 , - 4203 , - 1288 , - 4289 , - 2070 , - 199 , - 4244 , - 3069 , - 2242 , - 1763 , - 1632 , - 1849 , - 2414 , - 3327 , - 4588 , - 629 , - 2586 , - 4891 , - 1976 , - 4977 , - 2758 , - 887 , - 4932 , - 3757 , - 2930 , - 2451 , - 2320 , - 2537 , - 3102 , - 4015 , - 5276 , - 1317 , - 3274 , - 11 , - 2664 , - 97 , - 3446 , - 1575 , - 52 , - 4445 , - 3618 , - 3139 , - 3008 , - 3225 , - 3790 , - 4703 , - 396 , - 2005 , - 3962 , - 699 , - 3352 , - 785 , - 4134 , - 2263 , - 740 , - 5133 , - 4306 , - 3827 , - 3696 , - 3913 , - 4478 , - 5391 , - 1084 , - 2693 , - 4650 , - 1387 , - 4040 , - 1473 , - 4822 , - 2951 , - 1428 , - 253 , - 4994 , - 4515 , - 4384 , - 4601 , - 5166 , - 511 , - 1772 , - 3381 , - 5338 , - 2075 , - 4728 , - 2161 , - 5510 , - 3639 , - 2116 , - 941 , - 114 , - 5203 , - 5072 , - 5289 , - 286 , - 1199 , - 2460 , - 4069 , - 458 , - 2763 , - 5416 , - 2849 , - 630 , - 4327 , - 2804 , - 1629 , - 802 , - 323 , - 192 , - 409 , - 974 , - 1887 , - 3148 , - 4757 , - 1146 , - 3451 , - 536 , - 3537 , - 1318 , - 5015 , - 3492 , - 2317 , - 1490 , - 1011 , - 880 , - 1097 , - 1662 , - 2575 , - 3836 , - 5445 , - 1834 , - 4139 , - 1224 , - 4225 , - 2006 , - 135 , - 4180 , - 3005 , - 2178 , - 1699 , - 1568 , - 1785 , - 2350 , - 3263 , - 4524 , - 565 , - 2522 , - 4827 , - 1912 , - 4913 , - 2694 , - 823 , - 4868 , - 3693 , - 2866 , - 2387 , - 2256 , - 2473 , - 3038 , - 3951 , - 5212 , - 1253 , - 3210 , - 5515 , - 2600 , - 33 , - 3382 , - 1511 , - 5556 , - 4381 , - 3554 , - 3075 , - 2944 , - 3161 , - 3726 , - 4639 , - 332 , - 1941 , - 3898 , - 635 , - 3288 , - 721 , - 4070 , - 2199 , - 676 , - 5069 , - 4242 , - 3763 , - 3632 , - 3849 , - 4414 , - 5327 , - 1020 , - 2629 , - 4586 , - 1323 , - 3976 , - 1409 , - 4758 , - 2887 , - 1364 , - 189 , - 4930 , - 4451 , - 4320 , - 4537 , - 5102 , - 447 , - 1708 , - 3317 , - 5274 , - 2011 , - 4664 , - 2097 , - 5446 , - 3575 , - 2052 , - 877 , - 50 , - 5139 , - 5008 , - 5225 , - 222 , - 1135 , - 2396 , - 4005 , - 394 , - 2699 , - 5352 , - 2785 , - 566 , - 4263 , - 2740 , - 1565 , - 738 , - 259 , - 128 , - 345 , - 910 , - 1823 , - 3084 , - 4693 , - 1082 , - 3387 , - 472 , - 3473 , - 1254 , - 4951 , - 3428 , - 2253 , - 1426 , - 947 , - 816 , - 1033 , - 1598 , - 2511 , - 3772 , - 5381 , - 1770 , - 4075 , - 1160 , - 4161 , - 1942 , - 71 , - 4116 , - 2941 , - 2114 , - 1635 , - 1504 , - 1721 , - 2286 , - 3199 , - 4460 , - 501 , - 2458 , - 4763 , - 1848 , - 4849 , - 2630 , - 759 , - 4804 , - 3629 , - 2802 , - 2323 , - 2192 , - 2409 , - 2974 , - 3887 , - 5148 , - 1189 , - 3146 , - 5451 , - 2536 , - 5537 , - 3318 , - 1447 , - 5492 , - 4317 , - 3490 , - 3011 , - 2880 , - 3097 , - 3662 , - 4575 , - 268 , - 1877 , - 3834 , - 571 , - 3224 , - 657 , - 4006 , - 2135 , - 612 , - 5005 , - 4178 , - 3699 , - 3568 , - 3785 , - 4350 , - 5263 , - 956 , - 2565 , - 4522 , - 1259 , - 3912 , - 1345 , - 4694 , - 2823 , - 1300 , - 125 , - 4866 , - 4387 , - 4256 , - 4473 , - 5038 , - 383 , - 1644 , - 3253 , - 5210 , - 1947 , - 4600 , - 2033 , - 5382 , - 3511 , - 1988 , - 813 , - 5554 , - 5075 , - 4944 , - 5161 , - 158 , - 1071 , - 2332 , - 3941 , - 330 , - 2635 , - 5288 , - 2721 , - 502 , - 4199 , - 2676 , - 1501 , - 674 , - 195 , - 64 , - 281 , - 846 , - 1759 , - 3020 , - 4629 , - 1018 , - 3323 , - 408 , - 3409 , - 1190 , - 4887 , - 3364 , - 2189 , - 1362 , - 883 , - 752 , - 969 , - 1534 , - 2447 , - 3708 , - 5317 , - 1706 , - 4011 , - 1096 , - 4097 , - 1878 , - 7 , - 4052 , - 2877 , - 2050 , - 1571 , - 1440 , - 1657 , - 2222 , - 3135 , - 4396 , - 437 , - 2394 , - 4699 , - 1784 , - 4785 , - 2566 , - 695 , - 4740 , - 3565 , - 2738 , - 2259 , - 2128 , - 2345 , - 2910 , - 3823 , - 5084 , - 1125 , - 3082 , - 5387 , - 2472 , - 5473 , - 3254 , - 1383 , - 5428 , - 4253 , - 3426 , - 2947 , - 2816 , - 3033 , - 3598 , - 4511 , - 204 , - 1813 , - 3770 , - 507 , - 3160 , - 593 , - 3942 , - 2071 , - 548 , - 4941 , - 4114 , - 3635 , - 3504 , - 3721 , - 4286 , - 5199 , - 892 , - 2501 , - 4458 , - 1195 , - 3848 , - 1281 , - 4630 , - 2759 , - 1236 , - 61 , - 4802 , - 4323 , - 4192 , - 4409 , - 4974 , - 319 , - 1580 , - 3189 , - 5146 , - 1883 , - 4536 , - 1969 , - 5318 , - 3447 , - 1924 , - 749 , - 5490 , - 5011 , - 4880 , - 5097 , - 94 , - 1007 , - 2268 , - 3877 , - 266 , - 2571 , - 5224 , - 2657 , - 438 , - 4135 , - 2612 , - 1437 , - 610 , - 131 , - 0 , - 221 , - 794 , - 1719 , - 2996 , - 4625 , - 974 , - 3307 , - 360 , - 3397 , - 1154 , - 4895 , - 3356 , - 2169 , - 1334 , - 851 , - 720 , - 941 , - 1514 , - 2439 , - 3716 , - 5345 , - 1694 , - 4027 , - 1080 , - 4117 , - 1874 , - 5615 , - 4076 , - 2889 , - 2054 , - 1571 , - 1440 , - 1661 , - 2234 , - 3159 , - 4436 , - 433 , - 2414 , - 4747 , - 1800 , - 4837 , - 2594 , - 703 , - 4796 , - 3609 , - 2774 , - 2291 , - 2160 , - 2381 , - 2954 , - 3879 , - 5156 , - 1153 , - 3134 , - 5467 , - 2520 , - 5557 , - 3314 , - 1423 , - 5516 , - 4329 , - 3494 , - 3011 , - 2880 , - 3101 , - 3674 , - 4599 , - 244 , - 1873 , - 3854 , - 555 , - 3240 , - 645 , - 4034 , - 2143 , - 604 , - 5049 , - 4214 , - 3731 , - 3600 , - 3821 , - 4394 , - 5319 , - 964 , - 2593 , - 4574 , - 1275 , - 3960 , - 1365 , - 4754 , - 2863 , - 1324 , - 137 , - 4934 , - 4451 , - 4320 , - 4541 , - 5114 , - 407 , - 1684 , - 3313 , - 5294 , - 1995 , - 4680 , - 2085 , - 5474 , - 3583 , - 2044 , - 857 , - 22 , - 5171 , - 5040 , - 5261 , - 202 , - 1127 , - 2404 , - 4033 , - 382 , - 2715 , - 5400 , - 2805 , - 562 , - 4303 , - 2764 , - 1577 , - 742 , - 259 , - 128 , - 349 , - 922 , - 1847 , - 3124 , - 4753 , - 1102 , - 3435 , - 488 , - 3525 , - 1282 , - 5023 , - 3484 , - 2297 , - 1462 , - 979 , - 848 , - 1069 , - 1642 , - 2567 , - 3844 , - 5473 , - 1822 , - 4155 , - 1208 , - 4245 , - 2002 , - 111 , - 4204 , - 3017 , - 2182 , - 1699 , - 1568 , - 1789 , - 2362 , - 3287 , - 4564 , - 561 , - 2542 , - 4875 , - 1928 , - 4965 , - 2722 , - 831 , - 4924 , - 3737 , - 2902 , - 2419 , - 2288 , - 2509 , - 3082 , - 4007 , - 5284 , - 1281 , - 3262 , - 5595 , - 2648 , - 53 , - 3442 , - 1551 , - 12 , - 4457 , - 3622 , - 3139 , - 3008 , - 3229 , - 3802 , - 4727 , - 372 , - 2001 , - 3982 , - 683 , - 3368 , - 773 , - 4162 , - 2271 , - 732 , - 5177 , - 4342 , - 3859 , - 3728 , - 3949 , - 4522 , - 5447 , - 1092 , - 2721 , - 4702 , - 1403 , - 4088 , - 1493 , - 4882 , - 2991 , - 1452 , - 265 , - 5062 , - 4579 , - 4448 , - 4669 , - 5242 , - 535 , - 1812 , - 3441 , - 5422 , - 2123 , - 4808 , - 2213 , - 5602 , - 3711 , - 2172 , - 985 , - 150 , - 5299 , - 5168 , - 5389 , - 330 , - 1255 , - 2532 , - 4161 , - 510 , - 2843 , - 5528 , - 2933 , - 690 , - 4431 , - 2892 , - 1705 , - 870 , - 387 , - 256 , - 477 , - 1050 , - 1975 , - 3252 , - 4881 , - 1230 , - 3563 , - 616 , - 3653 , - 1410 , - 5151 , - 3612 , - 2425 , - 1590 , - 1107 , - 976 , - 1197 , - 1770 , - 2695 , - 3972 , - 5601 , - 1950 , - 4283 , - 1336 , - 4373 , - 2130 , - 239 , - 4332 , - 3145 , - 2310 , - 1827 , - 1696 , - 1917 , - 2490 , - 3415 , - 4692 , - 689 , - 2670 , - 5003 , - 2056 , - 5093 , - 2850 , - 959 , - 5052 , - 3865 , - 3030 , - 2547 , - 2416 , - 2637 , - 3210 , - 4135 , - 5412 , - 1409 , - 3390 , - 91 , - 2776 , - 181 , - 3570 , - 1679 , - 140 , - 4585 , - 3750 , - 3267 , - 3136 , - 3357 , - 3930 , - 4855 , - 500 , - 2129 , - 4110 , - 811 , - 3496 , - 901 , - 4290 , - 2399 , - 860 , - 5305 , - 4470 , - 3987 , - 3856 , - 4077 , - 4650 , - 5575 , - 1220 , - 2849 , - 4830 , - 1531 , - 4216 , - 1621 , - 5010 , - 3119 , - 1580 , - 393 , - 5190 , - 4707 , - 4576 , - 4797 , - 5370 , - 663 , - 1940 , - 3569 , - 5550 , - 2251 , - 4936 , - 2341 , - 98 , - 3839 , - 2300 , - 1113 , - 278 , - 5427 , - 5296 , - 5517 , - 458 , - 1383 , - 2660 , - 4289 , - 638 , - 2971 , - 24 , - 3061 , - 818 , - 4559 , - 3020 , - 1833 , - 998 , - 515 , - 384 , - 605 , - 1178 , - 2103 , - 3380 , - 5009 , - 1358 , - 3691 , - 744 , - 3781 , - 1538 , - 5279 , - 3740 , - 2553 , - 1718 , - 1235 , - 1104 , - 1325 , - 1898 , - 2823 , - 4100 , - 97 , - 2078 , - 4411 , - 1464 , - 4501 , - 2258 , - 367 , - 4460 , - 3273 , - 2438 , - 1955 , - 1824 , - 2045 , - 2618 , - 3543 , - 4820 , - 817 , - 2798 , - 5131 , - 2184 , - 5221 , - 2978 , - 1087 , - 5180 , - 3993 , - 3158 , - 2675 , - 2544 , - 2765 , - 3338 , - 4263 , - 5540 , - 1537 , - 3518 , - 219 , - 2904 , - 309 , - 3698 , - 1807 , - 268 , - 4713 , - 3878 , - 3395 , - 3264 , - 3485 , - 4058 , - 4983 , - 628 , - 2257 , - 4238 , - 939 , - 3624 , - 1029 , - 4418 , - 2527 , - 988 , - 5433 , - 4598 , - 4115 , - 3984 , - 4205 , - 4778 , - 71 , - 1348 , - 2977 , - 4958 , - 1659 , - 4344 , - 1749 , - 5138 , - 3247 , - 1708 , - 521 , - 5318 , - 4835 , - 4704 , - 4925 , - 5498 , - 791 , - 2068 , - 3697 , - 46 , - 2379 , - 5064 , - 2469 , - 226 , - 3967 , - 2428 , - 1241 , - 406 , - 5555 , - 5424 , - 13 , - 586 , - 1511 , - 2788 , - 4417 , - 766 , - 3099 , - 152 , - 3189 , - 946 , - 4687 , - 3148 , - 1961 , - 1126 , - 643 , - 512 , - 733 , - 1306 , - 2231 , - 3508 , - 5137 , - 1486 , - 3819 , - 872 , - 3909 , - 1666 , - 5407 , - 3868 , - 2681 , - 1846 , - 1363 , - 1232 , - 1453 , - 2026 , - 2951 , - 4228 , - 225 , - 2206 , - 4539 , - 1592 , - 4629 , - 2386 , - 495 , - 4588 , - 3401 , - 2566 , - 2083 , - 1952 , - 2173 , - 2746 , - 3671 , - 4948 , - 945 , - 2926 , - 5259 , - 2312 , - 5349 , - 3106 , - 1215 , - 5308 , - 4121 , - 3286 , - 2803 , - 2672 , - 2893 , - 3466 , - 4391 , - 36 , - 1665 , - 3646 , - 347 , - 3032 , - 437 , - 3826 , - 1935 , - 396 , - 4841 , - 4006 , - 3523 , - 3392 , - 3613 , - 4186 , - 5111 , - 756 , - 2385 , - 4366 , - 1067 , - 3752 , - 1157 , - 4546 , - 2655 , - 1116 , - 5561 , - 4726 , - 4243 , - 4112 , - 4333 , - 4906 , - 199 , - 1476 , - 3105 , - 5086 , - 1787 , - 4472 , - 1877 , - 5266 , - 3375 , - 1836 , - 649 , - 5446 , - 4963 , - 4832 , - 5053 , - 5626 , - 919 , - 2196 , - 3825 , - 174 , - 2507 , - 5192 , - 2597 , - 354 , - 4095 , - 2556 , - 1369 , - 534 , - 51 , - 5552 , - 141 , - 714 , - 1639 , - 2916 , - 4545 , - 894 , - 3227 , - 280 , - 3317 , - 1074 , - 4815 , - 3276 , - 2089 , - 1254 , - 771 , - 640 , - 861 , - 1434 , - 2359 , - 3636 , - 5265 , - 1614 , - 3947 , - 1000 , - 4037 , - 1794 , - 5535 , - 3996 , - 2809 , - 1974 , - 1491 , - 1360 , - 1581 , - 2154 , - 3079 , - 4356 , - 353 , - 2334 , - 4667 , - 1720 , - 4757 , - 2514 , - 623 , - 4716 , - 3529 , - 2694 , - 2211 , - 2080 , - 2301 , - 2874 , - 3799 , - 5076 , - 1073 , - 3054 , - 5387 , - 2440 , - 5477 , - 3234 , - 1343 , - 5436 , - 4249 , - 3414 , - 2931 , - 2800 , - 3021 , - 3594 , - 4519 , - 164 , - 1793 , - 3774 , - 475 , - 3160 , - 565 , - 3954 , - 2063 , - 524 , - 4969 , - 4134 , - 3651 , - 3520 , - 3741 , - 4314 , - 5239 , - 884 , - 2513 , - 4494 , - 1195 , - 3880 , - 1285 , - 4674 , - 2783 , - 1244 , - 57 , - 4854 , - 4371 , - 4240 , - 4461 , - 5034 , - 327 , - 1604 , - 3233 , - 5214 , - 1915 , - 4600 , - 2005 , - 5394 , - 3503 , - 1964 , - 777 , - 5574 , - 5091 , - 4960 , - 5181 , - 122 , - 1047 , - 2324 , - 3953 , - 302 , - 2635 , - 5320 , - 2725 , - 482 , - 4223 , - 2684 , - 1497 , - 662 , - 179 , - 48 , - 269 , - 842 , - 1767 , - 3044 , - 4673 , - 1022 , - 3355 , - 408 , - 3445 , - 1202 , - 4943 , - 3404 , - 2217 , - 1382 , - 899 , - 768 , - 989 , - 1562 , - 2487 , - 3764 , - 5393 , - 1742 , - 4075 , - 1128 , - 4165 , - 1922 , - 31 , - 4124 , - 2937 , - 2102 , - 1619 , - 1488 , - 1709 , - 2282 , - 3207 , - 4484 , - 481 , - 2462 , - 4795 , - 1848 , - 4885 , - 2642 , - 751 , - 4844 , - 3657 , - 2822 , - 2339 , - 2208 , - 2429 , - 3002 , - 3927 , - 5204 , - 1201 , - 3182 , - 5515 , - 2568 , - 5605 , - 3362 , - 1471 , - 5564 , - 4377 , - 3542 , - 3059 , - 2928 , - 3149 , - 3722 , - 4647 , - 292 , - 1921 , - 3902 , - 603 , - 3288 , - 693 , - 4082 , - 2191 , - 652 , - 5097 , - 4262 , - 3779 , - 3648 , - 3869 , - 4442 , - 5367 , - 1012 , - 2641 , - 4622 , - 1323 , - 4008 , - 1413 , - 4802 , - 2911 , - 1372 , - 185 , - 4982 , - 4499 , - 4368 , - 4589 , - 5162 , - 455 , - 1732 , - 3361 , - 5342 , - 2043 , - 4728 , - 2133 , - 5522 , - 3631 , - 2092 , - 905 , - 70 , - 5219 , - 5088 , - 5309 , - 250 , - 1175 , - 2452 , - 4081 , - 430 , - 2763 , - 5448 , - 2853 , - 610 , - 4351 , - 2812 , - 1625 , - 790 , - 307 , - 176 , - 397 , - 970 , - 1895 , - 3172 , - 4801 , - 1150 , - 3483 , - 536 , - 3573 , - 1330 , - 5071 , - 3532 , - 2345 , - 1510 , - 1027 , - 896 , - 1117 , - 1690 , - 2615 , - 3892 , - 5521 , - 1870 , - 4203 , - 1256 , - 4293 , - 2050 , - 159 , - 4252 , - 3065 , - 2230 , - 1747 , - 1616 , - 1837 , - 2410 , - 3335 , - 4612 , - 609 , - 2590 , - 4923 , - 1976 , - 5013 , - 2770 , - 879 , - 4972 , - 3785 , - 2950 , - 2467 , - 2336 , - 2557 , - 3130 , - 4055 , - 5332 , - 1329 , - 3310 , - 11 , - 2696 , - 101 , - 3490 , - 1599 , - 60 , - 4505 , - 3670 , - 3187 , - 3056 , - 3277 , - 3850 , - 4775 , - 420 , - 2049 , - 4030 , - 731 , - 3416 , - 821 , - 4210 , - 2319 , - 780 , - 5225 , - 4390 , - 3907 , - 3776 , - 3997 , - 4570 , - 5495 , - 1140 , - 2769 , - 4750 , - 1451 , - 4136 , - 1541 , - 4930 , - 3039 , - 1500 , - 313 , - 5110 , - 4627 , - 4496 , - 4717 , - 5290 , - 583 , - 1860 , - 3489 , - 5470 , - 2171 , - 4856 , - 2261 , - 18 , - 3759 , - 2220 , - 1033 , - 198 , - 5347 , - 5216 , - 5437 , - 378 , - 1303 , - 2580 , - 4209 , - 558 , - 2891 , - 5576 , - 2981 , - 738 , - 4479 , - 2940 , - 1753 , - 918 , - 435 , - 304 , - 525 , - 1098 , - 2023 , - 3300 , - 4929 , - 1278 , - 3611 , - 664 , - 3701 , - 1458 , - 5199 , - 3660 , - 2473 , - 1638 , - 1155 , - 1024 , - 1245 , - 1818 , - 2743 , - 4020 , - 17 , - 1998 , - 4331 , - 1384 , - 4421 , - 2178 , - 287 , - 4380 , - 3193 , - 2358 , - 1875 , - 1744 , - 1965 , - 2538 , - 3463 , - 4740 , - 737 , - 2718 , - 5051 , - 2104 , - 5141 , - 2898 , - 1007 , - 5100 , - 3913 , - 3078 , - 2595 , - 2464 , - 2685 , - 3258 , - 4183 , - 5460 , - 1457 , - 3438 , - 139 , - 2824 , - 229 , - 3618 , - 1727 , - 188 , - 4633 , - 3798 , - 3315 , - 3184 , - 3405 , - 3978 , - 4903 , - 548 , - 2177 , - 4158 , - 859 , - 3544 , - 949 , - 4338 , - 2447 , - 908 , - 5353 , - 4518 , - 4035 , - 3904 , - 4125 , - 4698 , - 5623 , - 1268 , - 2897 , - 4878 , - 1579 , - 4264 , - 1669 , - 5058 , - 3167 , - 1628 , - 441 , - 5238 , - 4755 , - 4624 , - 4845 , - 5418 , - 711 , - 1988 , - 3617 , - 5598 , - 2299 , - 4984 , - 2389 , - 146 , - 3887 , - 2348 , - 1161 , - 326 , - 5475 , - 5344 , - 5565 , - 506 , - 1431 , - 2708 , - 4337 , - 686 , - 3019 , - 72 , - 3109 , - 866 , - 4607 , - 3068 , - 1881 , - 1046 , - 563 , - 432 , - 653 , - 1226 , - 2151 , - 3428 , - 5057 , - 1406 , - 3739 , - 792 , - 3829 , - 1586 , - 5327 , - 3788 , - 2601 , - 1766 , - 1283 , - 1152 , - 1373 , - 1946 , - 2871 , - 4148 , - 145 , - 2126 , - 4459 , - 1512 , - 4549 , - 2306 , - 415 , - 4508 , - 3321 , - 2486 , - 2003 , - 1872 , - 2093 , - 2666 , - 3591 , - 4868 , - 865 , - 2846 , - 5179 , - 2232 , - 5269 , - 3026 , - 1135 , - 5228 , - 4041 , - 3206 , - 2723 , - 2592 , - 2813 , - 3386 , - 4311 , - 5588 , - 1585 , - 3566 , - 267 , - 2952 , - 357 , - 3746 , - 1855 , - 316 , - 4761 , - 3926 , - 3443 , - 3312 , - 3533 , - 4106 , - 5031 , - 676 , - 2305 , - 4286 , - 987 , - 3672 , - 1077 , - 4466 , - 2575 , - 1036 , - 5481 , - 4646 , - 4163 , - 4032 , - 4253 , - 4826 , - 119 , - 1396 , - 3025 , - 5006 , - 1707 , - 4392 , - 1797 , - 5186 , - 3295 , - 1756 , - 569 , - 5366 , - 4883 , - 4752 , - 4973 , - 5546 , - 839 , - 2116 , - 3745 , - 94 , - 2427 , - 5112 , - 2517 , - 274 , - 4015 , - 2476 , - 1289 , - 454 , - 5603 , - 5472 , - 61 , - 634 , - 1559 , - 2836 , - 4465 , - 814 , - 3147 , - 200 , - 3237 , - 994 , - 4735 , - 3196 , - 2009 , - 1174 , - 691 , - 560 , - 781 , - 1354 , - 2279 , - 3556 , - 5185 , - 1534 , - 3867 , - 920 , - 3957 , - 1714 , - 5455 , - 3916 , - 2729 , - 1894 , - 1411 , - 1280 , - 1501 , - 2074 , - 2999 , - 4276 , - 273 , - 2254 , - 4587 , - 1640 , - 4677 , - 2434 , - 543 , - 4636 , - 3449 , - 2614 , - 2131 , - 2000 , - 2221 , - 2794 , - 3719 , - 4996 , - 993 , - 2974 , - 5307 , - 2360 , - 5397 , - 3154 , - 1263 , - 5356 , - 4169 , - 3334 , - 2851 , - 2720 , - 2941 , - 3514 , - 4439 , - 84 , - 1713 , - 3694 , - 395 , - 3080 , - 485 , - 3874 , - 1983 , - 444 , - 4889 , - 4054 , - 3571 , - 3440 , - 3661 , - 4234 , - 5159 , - 804 , - 2433 , - 4414 , - 1115 , - 3800 , - 1205 , - 4594 , - 2703 , - 1164 , - 5609 , - 4774 , - 4291 , - 4160 , - 4381 , - 4954 , - 247 , - 1524 , - 3153 , - 5134 , - 1835 , - 4520 , - 1925 , - 5314 , - 3423 , - 1884 , - 697 , - 5494 , - 5011 , - 4880 , - 5101 , - 42 , - 967 , - 2244 , - 3873 , - 222 , - 2555 , - 5240 , - 2645 , - 402 , - 4143 , - 2604 , - 1417 , - 582 , - 99 , - 5600 , - 189 , - 762 , - 1687 , - 2964 , - 4593 , - 942 , - 3275 , - 328 , - 3365 , - 1122 , - 4863 , - 3324 , - 2137 , - 1302 , - 819 , - 688 , - 909 , - 1482 , - 2407 , - 3684 , - 5313 , - 1662 , - 3995 , - 1048 , - 4085 , - 1842 , - 5583 , - 4044 , - 2857 , - 2022 , - 1539 , - 1408 , - 1629 , - 2202 , - 3127 , - 4404 , - 401 , - 2382 , - 4715 , - 1768 , - 4805 , - 2562 , - 671 , - 4764 , - 3577 , - 2742 , - 2259 , - 2128 , - 2349 , - 2922 , - 3847 , - 5124 , - 1121 , - 3102 , - 5435 , - 2488 , - 5525 , - 3282 , - 1391 , - 5484 , - 4297 , - 3462 , - 2979 , - 2848 , - 3069 , - 3642 , - 4567 , - 212 , - 1841 , - 3822 , - 523 , - 3208 , - 613 , - 4002 , - 2111 , - 572 , - 5017 , - 4182 , - 3699 , - 3568 , - 3789 , - 4362 , - 5287 , - 932 , - 2561 , - 4542 , - 1243 , - 3928 , - 1333 , - 4722 , - 2831 , - 1292 , - 105 , - 4902 , - 4419 , - 4288 , - 4509 , - 5082 , - 375 , - 1652 , - 3281 , - 5262 , - 1963 , - 4648 , - 2053 , - 5442 , - 3551 , - 2012 , - 825 , - 5622 , - 5139 , - 5008 , - 5229 , - 170 , - 1095 , - 2372 , - 4001 , - 350 , - 2683 , - 5368 , - 2773 , - 530 , - 4271 , - 2732 , - 1545 , - 710 , - 227 , - 96 , - 317 , - 890 , - 1815 , - 3092 , - 4721 , - 1070 , - 3403 , - 456 , - 3493 , - 1250 , - 4991 , - 3452 , - 2265 , - 1430 , - 947 , - 816 , - 1037 , - 1610 , - 2535 , - 3812 , - 5441 , - 1790 , - 4123 , - 1176 , - 4213 , - 1970 , - 79 , - 4172 , - 2985 , - 2150 , - 1667 , - 1536 , - 1757 , - 2330 , - 3255 , - 4532 , - 529 , - 2510 , - 4843 , - 1896 , - 4933 , - 2690 , - 799 , - 4892 , - 3705 , - 2870 , - 2387 , - 2256 , - 2477 , - 3050 , - 3975 , - 5252 , - 1249 , - 3230 , - 5563 , - 2616 , - 21 , - 3410 , - 1519 , - 5612 , - 4425 , - 3590 , - 3107 , - 2976 , - 3197 , - 3770 , - 4695 , - 340 , - 1969 , - 3950 , - 651 , - 3336 , - 741 , - 4130 , - 2239 , - 700 , - 5145 , - 4310 , - 3827 , - 3696 , - 3917 , - 4490 , - 5415 , - 1060 , - 2689 , - 4670 , - 1371 , - 4056 , - 1461 , - 4850 , - 2959 , - 1420 , - 233 , - 5030 , - 4547 , - 4416 , - 4637 , - 5210 , - 503 , - 1780 , - 3409 , - 5390 , - 2091 , - 4776 , - 2181 , - 5570 , - 3679 , - 2140 , - 953 , - 118 , - 5267 , - 5136 , - 5357 , - 298 , - 1223 , - 2500 , - 4129 , - 478 , - 2811 , - 5496 , - 2901 , - 658 , - 4399 , - 2860 , - 1673 , - 838 , - 355 , - 224 , - 445 , - 1018 , - 1943 , - 3220 , - 4849 , - 1198 , - 3531 , - 584 , - 3621 , - 1378 , - 5119 , - 3580 , - 2393 , - 1558 , - 1075 , - 944 , - 1165 , - 1738 , - 2663 , - 3940 , - 5569 , - 1918 , - 4251 , - 1304 , - 4341 , - 2098 , - 207 , - 4300 , - 3113 , - 2278 , - 1795 , - 1664 , - 1885 , - 2458 , - 3383 , - 4660 , - 657 , - 2638 , - 4971 , - 2024 , - 5061 , - 2818 , - 927 , - 5020 , - 3833 , - 2998 , - 2515 , - 2384 , - 2605 , - 3178 , - 4103 , - 5380 , - 1377 , - 3358 , - 59 , - 2744 , - 149 , - 3538 , - 1647 , - 108 , - 4553 , - 3718 , - 3235 , - 3104 , - 3325 , - 3898 , - 4823 , - 468 , - 2097 , - 4078 , - 779 , - 3464 , - 869 , - 4258 , - 2367 , - 828 , - 5273 , - 4438 , - 3955 , - 3824 , - 4045 , - 4618 , - 5543 , - 1188 , - 2817 , - 4798 , - 1499 , - 4184 , - 1589 , - 4978 , - 3087 , - 1548 , - 361 , - 5158 , - 4675 , - 4544 , - 4765 , - 5338 , - 631 , - 1908 , - 3537 , - 5518 , - 2219 , - 4904 , - 2309 , - 66 , - 3807 , - 2268 , - 1081 , - 246 , - 5395 , - 5264 , - 5485 , - 426 , - 1351 , - 2628 , - 4257 , - 606 , - 2939 , - 5624 , - 3029 , - 786 , - 4527 , - 2988 , - 1801 , - 966 , - 483 , - 352 , - 573 , - 1146 , - 2071 , - 3348 , - 4977 , - 1326 , - 3659 , - 712 , - 3749 , - 1506 , - 5247 , - 3708 , - 2521 , - 1686 , - 1203 , - 1072 , - 1293 , - 1866 , - 2791 , - 4068 , - 65 , - 2046 , - 4379 , - 1432 , - 4469 , - 2226 , - 335 , - 4428 , - 3241 , - 2406 , - 1923 , - 1792 , - 2013 , - 2586 , - 3511 , - 4788 , - 785 , - 2766 , - 5099 , - 2152 , - 5189 , - 2946 , - 1055 , - 5148 , - 3961 , - 3126 , - 2643 , - 2512 , - 2733 , - 3306 , - 4231 , - 5508 , - 1505 , - 3486 , - 187 , - 2872 , - 277 , - 3666 , - 1775 , - 236 , - 4681 , - 3846 , - 3363 , - 3232 , - 3453 , - 4026 , - 4951 , - 596 , - 2225 , - 4206 , - 907 , - 3592 , - 997 , - 4386 , - 2495 , - 956 , - 5401 , - 4566 , - 4083 , - 3952 , - 4173 , - 4746 , - 39 , - 1316 , - 2945 , - 4926 , - 1627 , - 4312 , - 1717 , - 5106 , - 3215 , - 1676 , - 489 , - 5286 , - 4803 , - 4672 , - 4893 , - 5466 , - 759 , - 2036 , - 3665 , - 14 , - 2347 , - 5032 , - 2437 , - 194 , - 3935 , - 2396 , - 1209 , - 374 , - 5523 , - 5392 , - 5613 , - 554 , - 1479 , - 2756 , - 4385 , - 734 , - 3067 , - 120 , - 3157 , - 914 , - 4655 , - 3116 , - 1929 , - 1094 , - 611 , - 480 , - 701 , - 1274 , - 2199 , - 3476 , - 5105 , - 1454 , - 3787 , - 840 , - 3877 , - 1634 , - 5375 , - 3836 , - 2649 , - 1814 , - 1331 , - 1200 , - 1421 , - 1994 , - 2919 , - 4196 , - 193 , - 2174 , - 4507 , - 1560 , - 4597 , - 2354 , - 463 , - 4556 , - 3369 , - 2534 , - 2051 , - 1920 , - 2141 , - 2714 , - 3639 , - 4916 , - 913 , - 2894 , - 5227 , - 2280 , - 5317 , - 3074 , - 1183 , - 5276 , - 4089 , - 3254 , - 2771 , - 2640 , - 2861 , - 3434 , - 4359 , - 4 , - 1633 , - 3614 , - 315 , - 3000 , - 405 , - 3794 , - 1903 , - 364 , - 4809 , - 3974 , - 3491 , - 3360 , - 3581 , - 4154 , - 5079 , - 724 , - 2353 , - 4334 , - 1035 , - 3720 , - 1125 , - 4514 , - 2623 , - 1084 , - 5529 , - 4694 , - 4211 , - 4080 , - 4301 , - 4874 , - 167 , - 1444 , - 3073 , - 5054 , - 1755 , - 4440 , - 1845 , - 5234 , - 3343 , - 1804 , - 617 , - 5414 , - 4931 , - 4800 , - 5021 , - 5594 , - 887 , - 2164 , - 3793 , - 142 , - 2475 , - 5160 , - 2565 , - 322 , - 4063 , - 2524 , - 1337 , - 502 , - 19 , - 5520 , - 109 , - 682 , - 1607 , - 2884 , - 4513 , - 862 , - 3195 , - 248 , - 3285 , - 1042 , - 4783 , - 3244 , - 2057 , - 1222 , - 739 , - 608 , - 829 , - 1402 , - 2327 , - 3604 , - 5233 , - 1582 , - 3915 , - 968 , - 4005 , - 1762 , - 5503 , - 3964 , - 2777 , - 1942 , - 1459 , - 1328 , - 1549 , - 2122 , - 3047 , - 4324 , - 321 , - 2302 , - 4635 , - 1688 , - 4725 , - 2482 , - 591 , - 4684 , - 3497 , - 2662 , - 2179 , - 2048 , - 2269 , - 2842 , - 3767 , - 5044 , - 1041 , - 3022 , - 5355 , - 2408 , - 5445 , - 3202 , - 1311 , - 5404 , - 4217 , - 3382 , - 2899 , - 2768 , - 2989 , - 3562 , - 4487 , - 132 , - 1761 , - 3742 , - 443 , - 3128 , - 533 , - 3922 , - 2031 , - 492 , - 4937 , - 4102 , - 3619 , - 3488 , - 3709 , - 4282 , - 5207 , - 852 , - 2481 , - 4462 , - 1163 , - 3848 , - 1253 , - 4642 , - 2751 , - 1212 , - 25 , - 4822 , - 4339 , - 4208 , - 4429 , - 5002 , - 295 , - 1572 , - 3201 , - 5182 , - 1883 , - 4568 , - 1973 , - 5362 , - 3471 , - 1932 , - 745 , - 5542 , - 5059 , - 4928 , - 5149 , - 90 , - 1015 , - 2292 , - 3921 , - 270 , - 2603 , - 5288 , - 2693 , - 450 , - 4191 , - 2652 , - 1465 , - 630 , - 147 , - 16 , - 237 , - 810 , - 1735 , - 3012 , - 4641 , - 990 , - 3323 , - 376 , - 3413 , - 1170 , - 4911 , - 3372 , - 2185 , - 1350 , - 867 , - 736 , - 957 , - 1530 , - 2455 , - 3732 , - 5361 , - 1710 , - 4043 , - 1096 , - 4133 , - 1890 , - 5631 , - 4092 , - 2905 , - 2070 , - 1587 , - 1456 , - 1677 , - 2250 , - 3175 , - 4452 , - 449 , - 2430 , - 4763 , - 1816 , - 4853 , - 2610 , - 719 , - 4812 , - 3625 , - 2790 , - 2307 , - 2176 , - 2397 , - 2970 , - 3895 , - 5172 , - 1169 , - 3150 , - 5483 , - 2536 , - 5573 , - 3330 , - 1439 , - 5532 , - 4345 , - 3510 , - 3027 , - 2896 , - 3117 , - 3690 , - 4615 , - 260 , - 1889 , - 3870 , - 571 , - 3256 , - 661 , - 4050 , - 2159 , - 620 , - 5065 , - 4230 , - 3747 , - 3616 , - 3837 , - 4410 , - 5335 , - 980 , - 2609 , - 4590 , - 1291 , - 3976 , - 1381 , - 4770 , - 2879 , - 1340 , - 153 , - 4950 , - 4467 , - 4336 , - 4557 , - 5130 , - 423 , - 1700 , - 3329 , - 5310 , - 2011 , - 4696 , - 2101 , - 5490 , - 3599 , - 2060 , - 873 , - 38 , - 5187 , - 5056 , - 5277 , - 218 , - 1143 , - 2420 , - 4049 , - 398 , - 2731 , - 5416 , - 2821 , - 578 , - 4319 , - 2780 , - 1593 , - 758 , - 275 , - 144 , - 365 , - 938 , - 1863 , - 3140 , - 4769 , - 1118 , - 3451 , - 504 , - 3541 , - 1298 , - 5039 , - 3500 , - 2313 , - 1478 , - 995 , - 864 , - 1085 , - 1658 , - 2583 , - 3860 , - 5489 , - 1838 , - 4171 , - 1224 , - 4261 , - 2018 , - 127 , - 4220 , - 3033 , - 2198 , - 1715 , - 1584 , - 1805 , - 2378 , - 3303 , - 4580 , - 577 , - 2558 , - 4891 , - 1944 , - 4981 , - 2738 , - 847 , - 4940 , - 3753 , - 2918 , - 2435 , - 2304 , - 2525 , - 3098 , - 4023 , - 5300 , - 1297 , - 3278 , - 5611 , - 2664 , - 69 , - 3458 , - 1567 , - 28 , - 4473 , - 3638 , - 3155 , - 3024 , - 3245 , - 3818 , - 4743 , - 388 , - 2017 , - 3998 , - 699 , - 3384 , - 789 , - 4178 , - 2287 , - 748 , - 5193 , - 4358 , - 3875 , - 3744 , - 3965 , - 4538 , - 5463 , - 1108 , - 2737 , - 4718 , - 1419 , - 4104 , - 1509 , - 4898 , - 3007 , - 1468 , - 281 , - 5078 , - 4595 , - 4464 , - 4685 , - 5258 , - 551 , - 1828 , - 3457 , - 5438 , - 2139 , - 4824 , - 2229 , - 5618 , - 3727 , - 2188 , - 1001 , - 166 , - 5315 , - 5184 , - 5405 , - 346 , - 1271 , - 2548 , - 4177 , - 526 , - 2859 , - 5544 , - 2949 , - 706 , - 4447 , - 2908 , - 1721 , - 886 , - 403 , - 272 , - 493 , - 1066 , - 1991 , - 3268 , - 4897 , - 1246 , - 3579 , - 632 , - 3669 , - 1426 , - 5167 , - 3628 , - 2441 , - 1606 , - 1123 , - 992 , - 1213 , - 1786 , - 2711 , - 3988 , - 5617 , - 1966 , - 4299 , - 1352 , - 4389 , - 2146 , - 255 , - 4348 , - 3161 , - 2326 , - 1843 , - 1712 , - 1933 , - 2506 , - 3431 , - 4708 , - 705 , - 2686 , - 5019 , - 2072 , - 5109 , - 2866 , - 975 , - 5068 , - 3881 , - 3046 , - 2563 , - 2432 , - 2653 , - 3226 , - 4151 , - 5428 , - 1425 , - 3406 , - 107 , - 2792 , - 197 , - 3586 , - 1695 , - 156 , - 4601 , - 3766 , - 3283 , - 3152 , - 3373 , - 3946 , - 4871 , - 516 , - 2145 , - 4126 , - 827 , - 3512 , - 917 , - 4306 , - 2415 , - 876 , - 5321 , - 4486 , - 4003 , - 3872 , - 4093 , - 4666 , - 5591 , - 1236 , - 2865 , - 4846 , - 1547 , - 4232 , - 1637 , - 5026 , - 3135 , - 1596 , - 409 , - 5206 , - 4723 , - 4592 , - 4813 , - 5386 , - 679 , - 1956 , - 3585 , - 5566 , - 2267 , - 4952 , - 2357 , - 114 , - 3855 , - 2316 , - 1129 , - 294 , - 5443 , - 5312 , - 5533 , - 474 , - 1399 , - 2676 , - 4305 , - 654 , - 2987 , - 40 , - 3077 , - 834 , - 4575 , - 3036 , - 1849 , - 1014 , - 531 , - 400 , - 621 , - 1194 , - 2119 , - 3396 , - 5025 , - 1374 , - 3707 , - 760 , - 3797 , - 1554 , - 5295 , - 3756 , - 2569 , - 1734 , - 1251 , - 1120 , - 1341 , - 1914 , - 2839 , - 4116 , - 113 , - 2094 , - 4427 , - 1480 , - 4517 , - 2274 , - 383 , - 4476 , - 3289 , - 2454 , - 1971 , - 1840 , - 2061 , - 2634 , - 3559 , - 4836 , - 833 , - 2814 , - 5147 , - 2200 , - 5237 , - 2994 , - 1103 , - 5196 , - 4009 , - 3174 , - 2691 , - 2560 , - 2781 , - 3354 , - 4279 , - 5556 , - 1553 , - 3534 , - 235 , - 2920 , - 325 , - 3714 , - 1823 , - 284 , - 4729 , - 3894 , - 3411 , - 3280 , - 3501 , - 4074 , - 4999 , - 644 , - 2273 , - 4254 , - 955 , - 3640 , - 1045 , - 4434 , - 2543 , - 1004 , - 5449 , - 4614 , - 4131 , - 4000 , - 4221 , - 4794 , - 87 , - 1364 , - 2993 , - 4974 , - 1675 , - 4360 , - 1765 , - 5154 , - 3263 , - 1724 , - 537 , - 5334 , - 4851 , - 4720 , - 4941 , - 5514 , - 807 , - 2084 , - 3713 , - 62 , - 2395 , - 5080 , - 2485 , - 242 , - 3983 , - 2444 , - 1257 , - 422 , - 5571 , - 5440 , - 29 , - 602 , - 1527 , - 2804 , - 4433 , - 782 , - 3115 , - 168 , - 3205 , - 962 , - 4703 , - 3164 , - 1977 , - 1142 , - 659 , - 528 , - 749 , - 1322 , - 2247 , - 3524 , - 5153 , - 1502 , - 3835 , - 888 , - 3925 , - 1682 , - 5423 , - 3884 , - 2697 , - 1862 , - 1379 , - 1248 , - 1469 , - 2042 , - 2967 , - 4244 , - 241 , - 2222 , - 4555 , - 1608 , - 4645 , - 2402 , - 511 , - 4604 , - 3417 , - 2582 , - 2099 , - 1968 , - 2189 , - 2762 , - 3687 , - 4964 , - 961 , - 2942 , - 5275 , - 2328 , - 5365 , - 3122 , - 1231 , - 5324 , - 4137 , - 3302 , - 2819 , - 2688 , - 2909 , - 3482 , - 4407 , - 52 , - 1681 , - 3662 , - 363 , - 3048 , - 453 , - 3842 , - 1951 , - 412 , - 4857 , - 4022 , - 3539 , - 3408 , - 3629 , - 4202 , - 5127 , - 772 , - 2401 , - 4382 , - 1083 , - 3768 , - 1173 , - 4562 , - 2671 , - 1132 , - 5577 , - 4742 , - 4259 , - 4128 , - 4349 , - 4922 , - 215 , - 1492 , - 3121 , - 5102 , - 1803 , - 4488 , - 1893 , - 5282 , - 3391 , - 1852 , - 665 , - 5462 , - 4979 , - 4848 , - 5069 , - 10 , - 935 , - 2212 , - 3841 , - 190 , - 2523 , - 5208 , - 2613 , - 370 , - 4111 , - 2572 , - 1385 , - 550 , - 67 , - 5568 , - 157 , - 730 , - 1655 , - 2932 , - 4561 , - 910 , - 3243 , - 296 , - 3333 , - 1090 , - 4831 , - 3292 , - 2105 , - 1270 , - 787 , - 656 , - 877 , - 1450 , - 2375 , - 3652 , - 5281 , - 1630 , - 3963 , - 1016 , - 4053 , - 1810 , - 5551 , - 4012 , - 2825 , - 1990 , - 1507 , - 1376 , - 1597 , - 2170 , - 3095 , - 4372 , - 369 , - 2350 , - 4683 , - 1736 , - 4773 , - 2530 , - 639 , - 4732 , - 3545 , - 2710 , - 2227 , - 2096 , - 2317 , - 2890 , - 3815 , - 5092 , - 1089 , - 3070 , - 5403 , - 2456 , - 5493 , - 3250 , - 1359 , - 5452 , - 4265 , - 3430 , - 2947 , - 2816 , - 3037 , - 3610 , - 4535 , - 180 , - 1809 , - 3790 , - 491 , - 3176 , - 581 , - 3970 , - 2079 , - 540 , - 4985 , - 4150 , - 3667 , - 3536 , - 3757 , - 4330 , - 5255 , - 900 , - 2529 , - 4510 , - 1211 , - 3896 , - 1301 , - 4690 , - 2799 , - 1260 , - 73 , - 4870 , - 4387 , - 4256 , - 4477 , - 5050 , - 343 , - 1620 , - 3249 , - 5230 , - 1931 , - 4616 , - 2021 , - 5410 , - 3519 , - 1980 , - 793 , - 5590 , - 5107 , - 4976 , - 5197 , - 138 , - 1063 , - 2340 , - 3969 , - 318 , - 2651 , - 5336 , - 2741 , - 498 , - 4239 , - 2700 , - 1513 , - 678 , - 195 , - 64 , - 285 , - 858 , - 1783 , - 3060 , - 4689 , - 1038 , - 3371 , - 424 , - 3461 , - 1218 , - 4959 , - 3420 , - 2233 , - 1398 , - 915 , - 784 , - 1005 , - 1578 , - 2503 , - 3780 , - 5409 , - 1758 , - 4091 , - 1144 , - 4181 , - 1938 , - 47 , - 4140 , - 2953 , - 2118 , - 1635 , - 1504 , - 1725 , - 2298 , - 3223 , - 4500 , - 497 , - 2478 , - 4811 , - 1864 , - 4901 , - 2658 , - 767 , - 4860 , - 3673 , - 2838 , - 2355 , - 2224 , - 2445 , - 3018 , - 3943 , - 5220 , - 1217 , - 3198 , - 5531 , - 2584 , - 5621 , - 3378 , - 1487 , - 5580 , - 4393 , - 3558 , - 3075 , - 2944 , - 3165 , - 3738 , - 4663 , - 308 , - 1937 , - 3918 , - 619 , - 3304 , - 709 , - 4098 , - 2207 , - 668 , - 5113 , - 4278 , - 3795 , - 3664 , - 3885 , - 4458 , - 5383 , - 1028 , - 2657 , - 4638 , - 1339 , - 4024 , - 1429 , - 4818 , - 2927 , - 1388 , - 201 , - 4998 , - 4515 , - 4384 , - 4605 , - 5178 , - 471 , - 1748 , - 3377 , - 5358 , - 2059 , - 4744 , - 2149 , - 5538 , - 3647 , - 2108 , - 921 , - 86 , - 5235 , - 5104 , - 5325 , - 266 , - 1191 , - 2468 , - 4097 , - 446 , - 2779 , - 5464 , - 2869 , - 626 , - 4367 , - 2828 , - 1641 , - 806 , - 323 , - 192 , - 413 , - 986 , - 1911 , - 3188 , - 4817 , - 1166 , - 3499 , - 552 , - 3589 , - 1346 , - 5087 , - 3548 , - 2361 , - 1526 , - 1043 , - 912 , - 1133 , - 1706 , - 2631 , - 3908 , - 5537 , - 1886 , - 4219 , - 1272 , - 4309 , - 2066 , - 175 , - 4268 , - 3081 , - 2246 , - 1763 , - 1632 , - 1853 , - 2426 , - 3351 , - 4628 , - 625 , - 2606 , - 4939 , - 1992 , - 5029 , - 2786 , - 895 , - 4988 , - 3801 , - 2966 , - 2483 , - 2352 , - 2573 , - 3146 , - 4071 , - 5348 , - 1345 , - 3326 , - 27 , - 2712 , - 117 , - 3506 , - 1615 , - 76 , - 4521 , - 3686 , - 3203 , - 3072 , - 3293 , - 3866 , - 4791 , - 436 , - 2065 , - 4046 , - 747 , - 3432 , - 837 , - 4226 , - 2335 , - 796 , - 5241 , - 4406 , - 3923 , - 3792 , - 4013 , - 4586 , - 5511 , - 1156 , - 2785 , - 4766 , - 1467 , - 4152 , - 1557 , - 4946 , - 3055 , - 1516 , - 329 , - 5126 , - 4643 , - 4512 , - 4733 , - 5306 , - 599 , - 1876 , - 3505 , - 5486 , - 2187 , - 4872 , - 2277 , - 34 , - 3775 , - 2236 , - 1049 , - 214 , - 5363 , - 5232 , - 5453 , - 394 , - 1319 , - 2596 , - 4225 , - 574 , - 2907 , - 5592 , - 2997 , - 754 , - 4495 , - 2956 , - 1769 , - 934 , - 451 , - 320 , - 541 , - 1114 , - 2039 , - 3316 , - 4945 , - 1294 , - 3627 , - 680 , - 3717 , - 1474 , - 5215 , - 3676 , - 2489 , - 1654 , - 1171 , - 1040 , - 1261 , - 1834 , - 2759 , - 4036 , - 33 , - 2014 , - 4347 , - 1400 , - 4437 , - 2194 , - 303 , - 4396 , - 3209 , - 2374 , - 1891 , - 1760 , - 1981 , - 2554 , - 3479 , - 4756 , - 753 , - 2734 , - 5067 , - 2120 , - 5157 , - 2914 , - 1023 , - 5116 , - 3929 , - 3094 , - 2611 , - 2480 , - 2701 , - 3274 , - 4199 , - 5476 , - 1473 , - 3454 , - 155 , - 2840 , - 245 , - 3634 , - 1743 , - 204 , - 4649 , - 3814 , - 3331 , - 3200 , - 3421 , - 3994 , - 4919 , - 564 , - 2193 , - 4174 , - 875 , - 3560 , - 965 , - 4354 , - 2463 , - 924 , - 5369 , - 4534 , - 4051 , - 3920 , - 4141 , - 4714 , - 7 , - 1284 , - 2913 , - 4894 , - 1595 , - 4280 , - 1685 , - 5074 , - 3183 , - 1644 , - 457 , - 5254 , - 4771 , - 4640 , - 4861 , - 5434 , - 727 , - 2004 , - 3633 , - 5614 , - 2315 , - 5000 , - 2405 , - 162 , - 3903 , - 2364 , - 1177 , - 342 , - 5491 , - 5360 , - 5581 , - 522 , - 1447 , - 2724 , - 4353 , - 702 , - 3035 , - 88 , - 3125 , - 882 , - 4623 , - 3084 , - 1897 , - 1062 , - 579 , - 448 , - 669 , - 1242 , - 2167 , - 3444 , - 5073 , - 1422 , - 3755 , - 808 , - 3845 , - 1602 , - 5343 , - 3804 , - 2617 , - 1782 , - 1299 , - 1168 , - 1389 , - 1962 , - 2887 , - 4164 , - 161 , - 2142 , - 4475 , - 1528 , - 4565 , - 2322 , - 431 , - 4524 , - 3337 , - 2502 , - 2019 , - 1888 , - 2109 , - 2682 , - 3607 , - 4884 , - 881 , - 2862 , - 5195 , - 2248 , - 5285 , - 3042 , - 1151 , - 5244 , - 4057 , - 3222 , - 2739 , - 2608 , - 2829 , - 3402 , - 4327 , - 5604 , - 1601 , - 3582 , - 283 , - 2968 , - 373 , - 3762 , - 1871 , - 332 , - 4777 , - 3942 , - 3459 , - 3328 , - 3549 , - 4122 , - 5047 , - 692 , - 2321 , - 4302 , - 1003 , - 3688 , - 1093 , - 4482 , - 2591 , - 1052 , - 5497 , - 4662 , - 4179 , - 4048 , - 4269 , - 4842 , - 135 , - 1412 , - 3041 , - 5022 , - 1723 , - 4408 , - 1813 , - 5202 , - 3311 , - 1772 , - 585 , - 5382 , - 4899 , - 4768 , - 4989 , - 5562 , - 855 , - 2132 , - 3761 , - 110 , - 2443 , - 5128 , - 2533 , - 290 , - 4031 , - 2492 , - 1305 , - 470 , - 5619 , - 5488 , - 77 , - 650 , - 1575 , - 2852 , - 4481 , - 830 , - 3163 , - 216 , - 3253 , - 1010 , - 4751 , - 3212 , - 2025 , - 1190 , - 707 , - 576 , - 797 , - 1370 , - 2295 , - 3572 , - 5201 , - 1550 , - 3883 , - 936 , - 3973 , - 1730 , - 5471 , - 3932 , - 2745 , - 1910 , - 1427 , - 1296 , - 1517 , - 2090 , - 3015 , - 4292 , - 289 , - 2270 , - 4603 , - 1656 , - 4693 , - 2450 , - 559 , - 4652 , - 3465 , - 2630 , - 2147 , - 2016 , - 2237 , - 2810 , - 3735 , - 5012 , - 1009 , - 2990 , - 5323 , - 2376 , - 5413 , - 3170 , - 1279 , - 5372 , - 4185 , - 3350 , - 2867 , - 2736 , - 2957 , - 3530 , - 4455 , - 100 , - 1729 , - 3710 , - 411 , - 3096 , - 501 , - 3890 , - 1999 , - 460 , - 4905 , - 4070 , - 3587 , - 3456 , - 3677 , - 4250 , - 5175 , - 820 , - 2449 , - 4430 , - 1131 , - 3816 , - 1221 , - 4610 , - 2719 , - 1180 , - 5625 , - 4790 , - 4307 , - 4176 , - 4397 , - 4970 , - 263 , - 1540 , - 3169 , - 5150 , - 1851 , - 4536 , - 1941 , - 5330 , - 3439 , - 1900 , - 713 , - 5510 , - 5027 , - 4896 , - 5117 , - 58 , - 983 , - 2260 , - 3889 , - 238 , - 2571 , - 5256 , - 2661 , - 418 , - 4159 , - 2620 , - 1433 , - 598 , - 115 , - 5616 , - 205 , - 778 , - 1703 , - 2980 , - 4609 , - 958 , - 3291 , - 344 , - 3381 , - 1138 , - 4879 , - 3340 , - 2153 , - 1318 , - 835 , - 704 , - 925 , - 1498 , - 2423 , - 3700 , - 5329 , - 1678 , - 4011 , - 1064 , - 4101 , - 1858 , - 5599 , - 4060 , - 2873 , - 2038 , - 1555 , - 1424 , - 1645 , - 2218 , - 3143 , - 4420 , - 417 , - 2398 , - 4731 , - 1784 , - 4821 , - 2578 , - 687 , - 4780 , - 3593 , - 2758 , - 2275 , - 2144 , - 2365 , - 2938 , - 3863 , - 5140 , - 1137 , - 3118 , - 5451 , - 2504 , - 5541 , - 3298 , - 1407 , - 5500 , - 4313 , - 3478 , - 2995 , - 2864 , - 3085 , - 3658 , - 4583 , - 228 , - 1857 , - 3838 , - 539 , - 3224 , - 629 , - 4018 , - 2127 , - 588 , - 5033 , - 4198 , - 3715 , - 3584 , - 3805 , - 4378 , - 5303 , - 948 , - 2577 , - 4558 , - 1259 , - 3944 , - 1349 , - 4738 , - 2847 , - 1308 , - 121 , - 4918 , - 4435 , - 4304 , - 4525 , - 5098 , - 391 , - 1668 , - 3297 , - 5278 , - 1979 , - 4664 , - 2069 , - 5458 , - 3567 , - 2028 , - 841 , - 6 , - 5155 , - 5024 , - 5245 , - 186 , - 1111 , - 2388 , - 4017 , - 366 , - 2699 , - 5384 , - 2789 , - 546 , - 4287 , - 2748 , - 1561 , - 726 , - 243 , - 112 , - 333 , - 906 , - 1831 , - 3108 , - 4737 , - 1086 , - 3419 , - 472 , - 3509 , - 1266 , - 5007 , - 3468 , - 2281 , - 1446 , - 963 , - 832 , - 1053 , - 1626 , - 2551 , - 3828 , - 5457 , - 1806 , - 4139 , - 1192 , - 4229 , - 1986 , - 95 , - 4188 , - 3001 , - 2166 , - 1683 , - 1552 , - 1773 , - 2346 , - 3271 , - 4548 , - 545 , - 2526 , - 4859 , - 1912 , - 4949 , - 2706 , - 815 , - 4908 , - 3721 , - 2886 , - 2403 , - 2272 , - 2493 , - 3066 , - 3991 , - 5268 , - 1265 , - 3246 , - 5579 , - 2632 , - 37 , - 3426 , - 1535 , - 5628 , - 4441 , - 3606 , - 3123 , - 2992 , - 3213 , - 3786 , - 4711 , - 356 , - 1985 , - 3966 , - 667 , - 3352 , - 757 , - 4146 , - 2255 , - 716 , - 5161 , - 4326 , - 3843 , - 3712 , - 3933 , - 4506 , - 5431 , - 1076 , - 2705 , - 4686 , - 1387 , - 4072 , - 1477 , - 4866 , - 2975 , - 1436 , - 249 , - 5046 , - 4563 , - 4432 , - 4653 , - 5226 , - 519 , - 1796 , - 3425 , - 5406 , - 2107 , - 4792 , - 2197 , - 5586 , - 3695 , - 2156 , - 969 , - 134 , - 5283 , - 5152 , - 5373 , - 314 , - 1239 , - 2516 , - 4145 , - 494 , - 2827 , - 5512 , - 2917 , - 674 , - 4415 , - 2876 , - 1689 , - 854 , - 371 , - 240 , - 461 , - 1034 , - 1959 , - 3236 , - 4865 , - 1214 , - 3547 , - 600 , - 3637 , - 1394 , - 5135 , - 3596 , - 2409 , - 1574 , - 1091 , - 960 , - 1181 , - 1754 , - 2679 , - 3956 , - 5585 , - 1934 , - 4267 , - 1320 , - 4357 , - 2114 , - 223 , - 4316 , - 3129 , - 2294 , - 1811 , - 1680 , - 1901 , - 2474 , - 3399 , - 4676 , - 673 , - 2654 , - 4987 , - 2040 , - 5077 , - 2834 , - 943 , - 5036 , - 3849 , - 3014 , - 2531 , - 2400 , - 2621 , - 3194 , - 4119 , - 5396 , - 1393 , - 3374 , - 75 , - 2760 , - 165 , - 3554 , - 1663 , - 124 , - 4569 , - 3734 , - 3251 , - 3120 , - 3341 , - 3914 , - 4839 , - 484 , - 2113 , - 4094 , - 795 , - 3480 , - 885 , - 4274 , - 2383 , - 844 , - 5289 , - 4454 , - 3971 , - 3840 , - 4061 , - 4634 , - 5559 , - 1204 , - 2833 , - 4814 , - 1515 , - 4200 , - 1605 , - 4994 , - 3103 , - 1564 , - 377 , - 5174 , - 4691 , - 4560 , - 4781 , - 5354 , - 647 , - 1924 , - 3553 , - 5534 , - 2235 , - 4920 , - 2325 , - 82 , - 3823 , - 2284 , - 1097 , - 262 , - 5411 , - 5280 , - 5501 , - 442 , - 1367 , - 2644 , - 4273 , - 622 , - 2955 , - 8 , - 3045 , - 802 , - 4543 , - 3004 , - 1817 , - 982 , - 499 , - 368 , - 589 , - 1162 , - 2087 , - 3364 , - 4993 , - 1342 , - 3675 , - 728 , - 3765 , - 1522 , - 5263 , - 3724 , - 2537 , - 1702 , - 1219 , - 1088 , - 1309 , - 1882 , - 2807 , - 4084 , - 81 , - 2062 , - 4395 , - 1448 , - 4485 , - 2242 , - 351 , - 4444 , - 3257 , - 2422 , - 1939 , - 1808 , - 2029 , - 2602 , - 3527 , - 4804 , - 801 , - 2782 , - 5115 , - 2168 , - 5205 , - 2962 , - 1071 , - 5164 , - 3977 , - 3142 , - 2659 , - 2528 , - 2749 , - 3322 , - 4247 , - 5524 , - 1521 , - 3502 , - 203 , - 2888 , - 293 , - 3682 , - 1791 , - 252 , - 4697 , - 3862 , - 3379 , - 3248 , - 3469 , - 4042 , - 4967 , - 612 , - 2241 , - 4222 , - 923 , - 3608 , - 1013 , - 4402 , - 2511 , - 972 , - 5417 , - 4582 , - 4099 , - 3968 , - 4189 , - 4762 , - 55 , - 1332 , - 2961 , - 4942 , - 1643 , - 4328 , - 1733 , - 5122 , - 3231 , - 1692 , - 505 , - 5302 , - 4819 , - 4688 , - 4909 , - 5482 , - 775 , - 2052 , - 3681 , - 30 , - 2363 , - 5048 , - 2453 , - 210 , - 3951 , - 2412 , - 1225 , - 390 , - 5539 , - 5408 , - 5629 , - 570 , - 1495 , - 2772 , - 4401 , - 750 , - 3083 , - 136 , - 3173 , - 930 , - 4671 , - 3132 , - 1945 , - 1110 , - 627 , - 496 , - 717 , - 1290 , - 2215 , - 3492 , - 5121 , - 1470 , - 3803 , - 856 , - 3893 , - 1650 , - 5391 , - 3852 , - 2665 , - 1830 , - 1347 , - 1216 , - 1437 , - 2010 , - 2935 , - 4212 , - 209 , - 2190 , - 4523 , - 1576 , - 4613 , - 2370 , - 479 , - 4572 , - 3385 , - 2550 , - 2067 , - 1936 , - 2157 , - 2730 , - 3655 , - 4932 , - 929 , - 2910 , - 5243 , - 2296 , - 5333 , - 3090 , - 1199 , - 5292 , - 4105 , - 3270 , - 2787 , - 2656 , - 2877 , - 3450 , - 4375 , - 20 , - 1649 , - 3630 , - 331 , - 3016 , - 421 , - 3810 , - 1919 , - 380 , - 4825 , - 3990 , - 3507 , - 3376 , - 3597 , - 4170 , - 5095 , - 740 , - 2369 , - 4350 , - 1051 , - 3736 , - 1141 , - 4530 , - 2639 , - 1100 , - 5545 , - 4710 , - 4227 , - 4096 , - 4317 , - 4890 , - 183 , - 1460 , - 3089 , - 5070 , - 1771 , - 4456 , - 1861 , - 5250 , - 3359 , - 1820 , - 633 , - 5430 , - 4947 , - 4816 , - 5037 , - 5610 , - 903 , - 2180 , - 3809 , - 158 , - 2491 , - 5176 , - 2581 , - 338 , - 4079 , - 2540 , - 1353 , - 518 , - 35 , - 5536 , - 125 , - 698 , - 1623 , - 2900 , - 4529 , - 878 , - 3211 , - 264 , - 3301 , - 1058 , - 4799 , - 3260 , - 2073 , - 1238 , - 755 , - 624 , - 845 , - 1418 , - 2343 , - 3620 , - 5249 , - 1598 , - 3931 , - 984 , - 4021 , - 1778 , - 5519 , - 3980 , - 2793 , - 1958 , - 1475 , - 1344 , - 1565 , - 2138 , - 3063 , - 4340 , - 337 , - 2318 , - 4651 , - 1704 , - 4741 , - 2498 , - 607 , - 4700 , - 3513 , - 2678 , - 2195 , - 2064 , - 2285 , - 2858 , - 3783 , - 5060 , - 1057 , - 3038 , - 5371 , - 2424 , - 5461 , - 3218 , - 1327 , - 5420 , - 4233 , - 3398 , - 2915 , - 2784 , - 3005 , - 3578 , - 4503 , - 148 , - 1777 , - 3758 , - 459 , - 3144 , - 549 , - 3938 , - 2047 , - 508 , - 4953 , - 4118 , - 3635 , - 3504 , - 3725 , - 4298 , - 5223 , - 868 , - 2497 , - 4478 , - 1179 , - 3864 , - 1269 , - 4658 , - 2767 , - 1228 , - 41 , - 4838 , - 4355 , - 4224 , - 4445 , - 5018 , - 311 , - 1588 , - 3217 , - 5198 , - 1899 , - 4584 , - 1989 , - 5378 , - 3487 , - 1948 , - 761 , - 5558 , - 5075 , - 4944 , - 5165 , - 106 , - 1031 , - 2308 , - 3937 , - 286 , - 2619 , - 5304 , - 2709 , - 466 , - 4207 , - 2668 , - 1481 , - 646 , - 163 , - 32 , - 253 , - 826 , - 1751 , - 3028 , - 4657 , - 1006 , - 3339 , - 392 , - 3429 , - 1186 , - 4927 , - 3388 , - 2201 , - 1366 , - 883 , - 752 , - 973 , - 1546 , - 2471 , - 3748 , - 5377 , - 1726 , - 4059 , - 1112 , - 4149 , - 1906 , - 15 , - 4108 , - 2921 , - 2086 , - 1603 , - 1472 , - 1693 , - 2266 , - 3191 , - 4468 , - 465 , - 2446 , - 4779 , - 1832 , - 4869 , - 2626 , - 735 , - 4828 , - 3641 , - 2806 , - 2323 , - 2192 , - 2413 , - 2986 , - 3911 , - 5188 , - 1185 , - 3166 , - 5499 , - 2552 , - 5589 , - 3346 , - 1455 , - 5548 , - 4361 , - 3526 , - 3043 , - 2912 , - 3133 , - 3706 , - 4631 , - 276 , - 1905 , - 3886 , - 587 , - 3272 , - 677 , - 4066 , - 2175 , - 636 , - 5081 , - 4246 , - 3763 , - 3632 , - 3853 , - 4426 , - 5351 , - 996 , - 2625 , - 4606 , - 1307 , - 3992 , - 1397 , - 4786 , - 2895 , - 1356 , - 169 , - 4966 , - 4483 , - 4352 , - 4573 , - 5146 , - 439 , - 1716 , - 3345 , - 5326 , - 2027 , - 4712 , - 2117 , - 5506 , - 3615 , - 2076 , - 889 , - 54 , - 5203 , - 5072 , - 5293 , - 234 , - 1159 , - 2436 , - 4065 , - 414 , - 2747 , - 5432 , - 2837 , - 594 , - 4335 , - 2796 , - 1609 , - 774 , - 291 , - 160 , - 381 , - 954 , - 1879 , - 3156 , - 4785 , - 1134 , - 3467 , - 520 , - 3557 , - 1314 , - 5055 , - 3516 , - 2329 , - 1494 , - 1011 , - 880 , - 1101 , - 1674 , - 2599 , - 3876 , - 5505 , - 1854 , - 4187 , - 1240 , - 4277 , - 2034 , - 143 , - 4236 , - 3049 , - 2214 , - 1731 , - 1600 , - 1821 , - 2394 , - 3319 , - 4596 , - 593 , - 2574 , - 4907 , - 1960 , - 4997 , - 2754 , - 863 , - 4956 , - 3769 , - 2934 , - 2451 , - 2320 , - 2541 , - 3114 , - 4039 , - 5316 , - 1313 , - 3294 , - 5627 , - 2680 , - 85 , - 3474 , - 1583 , - 44 , - 4489 , - 3654 , - 3171 , - 3040 , - 3261 , - 3834 , - 4759 , - 404 , - 2033 , - 4014 , - 715 , - 3400 , - 805 , - 4194 , - 2303 , - 764 , - 5209 , - 4374 , - 3891 , - 3760 , - 3981 , - 4554 , - 5479 , - 1124 , - 2753 , - 4734 , - 1435 , - 4120 , - 1525 , - 4914 , - 3023 , - 1484 , - 297 , - 5094 , - 4611 , - 4480 , - 4701 , - 5274 , - 567 , - 1844 , - 3473 , - 5454 , - 2155 , - 4840 , - 2245 , - 2 , - 3743 , - 2204 , - 1017 , - 182 , - 5331 , - 5200 , - 5421 , - 362 , - 1287 , - 2564 , - 4193 , - 542 , - 2875 , - 5560 , - 2965 , - 722 , - 4463 , - 2924 , - 1737 , - 902 , - 419 , - 288 , - 509 , - 1082 , - 2007 , - 3284 , - 4913 , - 1262 , - 3595 , - 648 , - 3685 , - 1442 , - 5183 , - 3644 , - 2457 , - 1622 , - 1139 , - 1008 , - 1229 , - 1802 , - 2727 , - 4004 , - 1 , - 1982 , - 4315 , - 1368 , - 4405 , - 2162 , - 271 , - 4364 , - 3177 , - 2342 , - 1859 , - 1728 , - 1949 , - 2522 , - 3447 , - 4724 , - 721 , - 2702 , - 5035 , - 2088 , - 5125 , - 2882 , - 991 , - 5084 , - 3897 , - 3062 , - 2579 , - 2448 , - 2669 , - 3242 , - 4167 , - 5444 , - 1441 , - 3422 , - 123 , - 2808 , - 213 , - 3602 , - 1711 , - 172 , - 4617 , - 3782 , - 3299 , - 3168 , - 3389 , - 3962 , - 4887 , - 532 , - 2161 , - 4142 , - 843 , - 3528 , - 933 , - 4322 , - 2431 , - 892 , - 5337 , - 4502 , - 4019 , - 3888 , - 4109 , - 4682 , - 5607 , - 1252 , - 2881 , - 4862 , - 1563 , - 4248 , - 1653 , - 5042 , - 3151 , - 1612 , - 425 , - 5222 , - 4739 , - 4608 , - 4829 , - 5402 , - 695 , - 1972 , - 3601 , - 5582 , - 2283 , - 4968 , - 2373 , - 130 , - 3871 , - 2332 , - 1145 , - 310 , - 5459 , - 5328 , - 5549 , - 490 , - 1415 , - 2692 , - 4321 , - 670 , - 3003 , - 56 , - 3093 , - 850 , - 4591 , - 3052 , - 1865 , - 1030 , - 547 , - 416 , - 637 , - 1210 , - 2135 , - 3412 , - 5041 , - 1390 , - 3723 , - 776 , - 3813 , - 1570 , - 5311 , - 3772 , - 2585 , - 1750 , - 1267 , - 1136 , - 1357 , - 1930 , - 2855 , - 4132 , - 129 , - 2110 , - 4443 , - 1496 , - 4533 , - 2290 , - 399 , - 4492 , - 3305 , - 2470 , - 1987 , - 1856 , - 2077 , - 2650 , - 3575 , - 4852 , - 849 , - 2830 , - 5163 , - 2216 , - 5253 , - 3010 , - 1119 , - 5212 , - 4025 , - 3190 , - 2707 , - 2576 , - 2797 , - 3370 , - 4295 , - 5572 , - 1569 , - 3550 , - 251 , - 2936 , - 341 , - 3730 , - 1839 , - 300 , - 4745 , - 3910 , - 3427 , - 3296 , - 3517 , - 4090 , - 5015 , - 660 , - 2289 , - 4270 , - 971 , - 3656 , - 1061 , - 4450 , - 2559 , - 1020 , - 5465 , - 4630 , - 4147 , - 4016 , - 4237 , - 4810 , - 103 , - 1380 , - 3009 , - 4990 , - 1691 , - 4376 , - 1781 , - 5170 , - 3279 , - 1740 , - 553 , - 5350 , - 4867 , - 4736 , - 4957 , - 5530 , - 823 , - 2100 , - 3729 , - 78 , - 2411 , - 5096 , - 2501 , - 258 , - 3999 , - 2460 , - 1273 , - 438 , - 5587 , - 5456 , - 45 , - 618 , - 1543 , - 2820 , - 4449 , - 798 , - 3131 , - 184 , - 3221 , - 978 , - 4719 , - 3180 , - 1993 , - 1158 , - 675 , - 544 , - 765 , - 1338 , - 2263 , - 3540 , - 5169 , - 1518 , - 3851 , - 904 , - 3941 , - 1698 , - 5439 , - 3900 , - 2713 , - 1878 , - 1395 , - 1264 , - 1485 , - 2058 , - 2983 , - 4260 , - 257 , - 2238 , - 4571 , - 1624 , - 4661 , - 2418 , - 527 , - 4620 , - 3433 , - 2598 , - 2115 , - 1984 , - 2205 , - 2778 , - 3703 , - 4980 , - 977 , - 2958 , - 5291 , - 2344 , - 5381 , - 3138 , - 1247 , - 5340 , - 4153 , - 3318 , - 2835 , - 2704 , - 2925 , - 3498 , - 4423 , - 68 , - 1697 , - 3678 , - 379 , - 3064 , - 469 , - 3858 , - 1967 , - 428 , - 4873 , - 4038 , - 3555 , - 3424 , - 3645 , - 4218 , - 5143 , - 788 , - 2417 , - 4398 , - 1099 , - 3784 , - 1189 , - 4578 , - 2687 , - 1148 , - 5593 , - 4758 , - 4275 , - 4144 , - 4365 , - 4938 , - 231 , - 1508 , - 3137 , - 5118 , - 1819 , - 4504 , - 1909 , - 5298 , - 3407 , - 1868 , - 681 , - 5478 , - 4995 , - 4864 , - 5085 , - 26 , - 951 , - 2228 , - 3857 , - 206 , - 2539 , - 5224 , - 2629 , - 386 , - 4127 , - 2588 , - 1401 , - 566 , - 83 , - 5584 , - 173 , - 746 , - 1671 , - 2948 , - 4577 , - 926 , - 3259 , - 312 , - 3349 , - 1106 , - 4847 , - 3308 , - 2121 , - 1286 , - 803 , - 672 , - 893 , - 1466 , - 2391 , - 3668 , - 5297 , - 1646 , - 3979 , - 1032 , - 4069 , - 1826 , - 5567 , - 4028 , - 2841 , - 2006 , - 1523 , - 1392 , - 1613 , - 2186 , - 3111 , - 4388 , - 385 , - 2366 , - 4699 , - 1752 , - 4789 , - 2546 , - 655 , - 4748 , - 3561 , - 2726 , - 2243 , - 2112 , - 2333 , - 2906 , - 3831 , - 5108 , - 1105 , - 3086 , - 5419 , - 2472 , - 5509 , - 3266 , - 1375 , - 5468 , - 4281 , - 3446 , - 2963 , - 2832 , - 3053 , - 3626 , - 4551 , - 196 , - 1825 , - 3806 , - 507 , - 3192 , - 597 , - 3986 , - 2095 , - 556 , - 5001 , - 4166 , - 3683 , - 3552 , - 3773 , - 4346 , - 5271 , - 916 , - 2545 , - 4526 , - 1227 , - 3912 , - 1317 , - 4706 , - 2815 , - 1276 , - 89 , - 4886 , - 4403 , - 4272 , - 4493 , - 5066 , - 359 , - 1636 , - 3265 , - 5246 , - 1947 , - 4632 , - 2037 , - 5426 , - 3535 , - 1996 , - 809 , - 5606 , - 5123 , - 4992 , - 5213 , - 154 , - 1079 , - 2356 , - 3985 , - 334 , - 2667 , - 5352 , - 2757 , - 514 , - 4255 , - 2716 , - 1529 , - 694 , - 211 , - 80 , - 301 , - 874 , - 1799 , - 3076 , - 4705 , - 1054 , - 3387 , - 440 , - 3477 , - 1234 , - 4975 , - 3436 , - 2249 , - 1414 , - 931 , - 800 , - 1021 , - 1594 , - 2519 , - 3796 , - 5425 , - 1774 , - 4107 , - 1160 , - 4197 , - 1954 , - 63 , - 4156 , - 2969 , - 2134 , - 1651 , - 1520 , - 1741 , - 2314 , - 3239 , - 4516 , - 513 , - 2494 , - 4827 , - 1880 , - 4917 , - 2674 , - 783 , - 4876 , - 3689 , - 2854 , - 2371 , - 2240 , - 2461 , - 3034 , - 3959 , - 5236 , - 1233 , - 3214 , - 5547 , - 2600 , - 5 , - 3394 , - 1503 , - 5596 , - 4409 , - 3574 , - 3091 , - 2960 , - 3181 , - 3754 , - 4679 , - 324 , - 1953 , - 3934 , - 635 , - 3320 , - 725 , - 4114 , - 2223 , - 684 , - 5129 , - 4294 , - 3811 , - 3680 , - 3901 , - 4474 , - 5399 , - 1044 , - 2673 , - 4654 , - 1355 , - 4040 , - 1445 , - 4834 , - 2943 , - 1404 , - 217 , - 5014 , - 4531 , - 4400 , - 4621 , - 5194 , - 487 , - 1764 , - 3393 , - 5374 , - 2075 , - 4760 , - 2165 , - 5554 , - 3663 , - 2124 , - 937 , - 102 , - 5251 , - 5120 , - 5341 , - 282 , - 1207 , - 2484 , - 4113 , - 462 , - 2795 , - 5480 , - 2885 , - 642 , - 4383 , - 2844 , - 1657 , - 822 , - 339 , - 208 , - 429 , - 1002 , - 1927 , - 3204 , - 4833 , - 1182 , - 3515 , - 568 , - 3605 , - 1362 , - 5103 , - 3564 , - 2377 , - 1542 , - 1059 , - 928 , - 1149 , - 1722 , - 2647 , - 3924 , - 5553 , - 1902 , - 4235 , - 1288 , - 4325 , - 2082 , - 191 , - 4284 , - 3097 , - 2262 , - 1779 , - 1648 , - 1869 , - 2442 , - 3367 , - 4644 , - 641 , - 2622 , - 4955 , - 2008 , - 5045 , - 2802 , - 911 , - 5004 , - 3817 , - 2982 , - 2499 , - 2368 , - 2589 , - 3162 , - 4087 , - 5364 , - 1361 , - 3342 , - 43 , - 2728 , - 133 , - 3522 , - 1631 , - 92 , - 4537 , - 3702 , - 3219 , - 3088 , - 3309 , - 3882 , - 4807 , - 452 , - 2081 , - 4062 , - 763 , - 3448 , - 853 , - 4242 , - 2351 , - 812 , - 5257 , - 4422 , - 3939 , - 3808 , - 4029 , - 4602 , - 5527 , - 1172 , - 2801 , - 4782 , - 1483 , - 4168 , - 1573 , - 4962 , - 3071 , - 1532 , - 345 , - 5142 , - 4659 , - 4528 , - 4749 , - 5322 , - 615 , - 1892 , - 3521 , - 5502 , - 2203 , - 4888 , - 2293 , - 50 , - 3791 , - 2252 , - 1065 , - 230 , - 5379 , - 5248 , - 5469 , - 410 , - 1335 , - 2612 , - 4241 , - 590 , - 2923 , - 5608 , - 3013 , - 770 , - 4511 , - 2972 , - 1785 , - 950 , - 467 , - 336 , - 557 , - 1130 , - 2055 , - 3332 , - 4961 , - 1310 , - 3643 , - 696 , - 3733 , - 1490 , - 5231 , - 3692 , - 2505 , - 1670 , - 1187 , - 1056 , - 1277 , - 1850 , - 2775 , - 4052 , - 49 , - 2030 , - 4363 , - 1416 , - 4453 , - 2210 , - 319 , - 4412 , - 3225 , - 2390 , - 1907 , - 1776 , - 1997 , - 2570 , - 3495 , - 4772 , - 769 , - 2750 , - 5083 , - 2136 , - 5173 , - 2930 , - 1039 , - 5132 , - 3945 , - 3110 , - 2627 , - 2496 , - 2717 , - 3290 , - 4215 , - 5492 , - 1489 , - 3470 , - 171 , - 2856 , - 261 , - 3650 , - 1759 , - 220 , - 4665 , - 3830 , - 3347 , - 3216 , - 3437 , - 4010 , - 4935 , - 580 , - 2209 , - 4190 , - 891 , - 3576 , - 981 , - 4370 , - 2479 , - 940 , - 5385 , - 4550 , - 4067 , - 3936 , - 4157 , - 4730 , - 23 , - 1300 , - 2929 , - 4910 , - 1611 , - 4296 , - 1701 , - 5090 , - 3199 , - 1660 , - 473 , - 5270 , - 4787 , - 4656 , - 4877 , - 5450 , - 743 , - 2020 , - 3649 , - 5630 , - 2331 , - 5016 , - 2421 , - 178 , - 3919 , - 2380 , - 1193 , - 358 , - 5507 , - 5376 , - 5597 , - 538 , - 1463 , - 2740 , - 4369 , - 718 , - 3051 , - 104 , - 3141 , - 898 , - 4639 , - 3100 , - 1913 , - 1078 , - 595 , - 464 , - 685 , - 1258 , - 2183 , - 3460 , - 5089 , - 1438 , - 3771 , - 824 , - 3861 , - 1618 , - 5359 , - 3820 , - 2633 , - 1798 , - 1315 , - 1184 , - 1405 , - 1978 , - 2903 , - 4180 , - 177 , - 2158 , - 4491 , - 1544 , - 4581 , - 2338 , - 447 , - 4540 , - 3353 , - 2518 , - 2035 , - 1904 , - 2125 , - 2698 , - 3623 , - 4900 , - 897 , - 2878 , - 5211 , - 2264 , - 5301 , - 3058 , - 1167 , - 5260 , - 4073 , - 3238 , - 2755 , - 2624 , - 2845 , - 3418 , - 4343 , - 5620 , - 1617 , - 3598 , - 299 , - 2984 , - 389 , - 3778 , - 1887 , - 348 , - 4793 , - 3958 , - 3475 , - 3344 , - 3565 , - 4138 , - 5063 , - 708 , - 2337 , - 4318 , - 1019 , - 3704 , - 1109 , - 4498 , - 2607 , - 1068 , - 5513 , - 4678 , - 4195 , - 4064 , - 4285 , - 4858 , - 151 , - 1428 , - 3057 , - 5038 , - 1739 , - 4424 , - 1829 , - 5218 , - 3327 , - 1788 , - 601 , - 5398 , - 4915 , - 4784 , - 5005 , - 5578 , - 871 , - 2148 , - 3777 , - 126 , - 2459 , - 5144 , - 2549 , - 306 , - 4047 , - 2508 , - 1321 , - 486 , - 3 , - 5504 , - 93 , - 666 , - 1591 , - 2868 , - 4497 , - 846 , - 3179 , - 232 , - 3269 , - 1026 , - 4767 , - 3228 , - 2041 , - 1206 , - 723 , - 592 , - 813 , - 1386 , - 2311 , - 3588 , - 5217 , - 1566 , - 3899 , - 952 , - 3989 , - 1746 , - 5487 , - 3948 , - 2761 , - 1926 , - 1443 , - 1312 , - 1533 , - 2106 , - 3031 , - 4308 , - 305 , - 2286 , - 4619 , - 1672 , - 4709 , - 2466 , - 575 , - 4668 , - 3481 , - 2646 , - 2163 , - 2032 , - 2253 , - 2826 , - 3751 , - 5028 , - 1025 , - 3006 , - 5339 , - 2392 , - 5429 , - 3186 , - 1295 , - 5388 , - 4201 , - 3366 , - 2883 , - 2752 , - 2973 , - 3546 , - 4471 , - 116 , - 1745 , - 3726 , - 427 , - 3112 , - 517 , - 3906 , - 2015 , - 476 , - 4921 , - 4086 , - 3603 , - 3472 , - 3693 , - 4266 , - 5191 , - 836 , - 2465 , - 4446 , - 1147 , - 3832 , - 1237 , - 4626 , - 2735 , - 1196 , - 9 , - 4806 , - 4323 , - 4192 , - 4413 , - 4986 , - 279 , - 1556 , - 3185 , - 5166 , - 1867 , - 4552 , - 1957 , - 5346 , - 3455 , - 1916 , - 729 , - 5526 , - 5043 , - 4912 , - 5133 , - 74 , - 999 , - 2276 , - 3905 , - 254 , - 2587 , - 5272 , - 2677 , - 434 , - 4175 , - 2636 , - 1449 , - 614 , - 131 , - 0 , - 223 , - 802 , - 1737 , - 3028 , - 4675 , - 982 , - 3341 , - 360 , - 3431 , - 1162 , - 4945 , - 3388 , - 2187 , - 1342 , - 853 , - 720 , - 943 , - 1522 , - 2457 , - 3748 , - 5395 , - 1702 , - 4061 , - 1080 , - 4151 , - 1882 , - 5665 , - 4108 , - 2907 , - 2062 , - 1573 , - 1440 , - 1663 , - 2242 , - 3177 , - 4468 , - 419 , - 2422 , - 4781 , - 1800 , - 4871 , - 2602 , - 689 , - 4828 , - 3627 , - 2782 , - 2293 , - 2160 , - 2383 , - 2962 , - 3897 , - 5188 , - 1139 , - 3142 , - 5501 , - 2520 , - 5591 , - 3322 , - 1409 , - 5548 , - 4347 , - 3502 , - 3013 , - 2880 , - 3103 , - 3682 , - 4617 , - 212 , - 1859 , - 3862 , - 525 , - 3240 , - 615 , - 4042 , - 2129 , - 572 , - 5067 , - 4222 , - 3733 , - 3600 , - 3823 , - 4402 , - 5337 , - 932 , - 2579 , - 4582 , - 1245 , - 3960 , - 1335 , - 4762 , - 2849 , - 1292 , - 91 , - 4942 , - 4453 , - 4320 , - 4543 , - 5122 , - 361 , - 1652 , - 3299 , - 5302 , - 1965 , - 4680 , - 2055 , - 5482 , - 3569 , - 2012 , - 811 , - 5662 , - 5173 , - 5040 , - 5263 , - 146 , - 1081 , - 2372 , - 4019 , - 326 , - 2685 , - 5400 , - 2775 , - 506 , - 4289 , - 2732 , - 1531 , - 686 , - 197 , - 64 , - 287 , - 866 , - 1801 , - 3092 , - 4739 , - 1046 , - 3405 , - 424 , - 3495 , - 1226 , - 5009 , - 3452 , - 2251 , - 1406 , - 917 , - 784 , - 1007 , - 1586 , - 2521 , - 3812 , - 5459 , - 1766 , - 4125 , - 1144 , - 4215 , - 1946 , - 33 , - 4172 , - 2971 , - 2126 , - 1637 , - 1504 , - 1727 , - 2306 , - 3241 , - 4532 , - 483 , - 2486 , - 4845 , - 1864 , - 4935 , - 2666 , - 753 , - 4892 , - 3691 , - 2846 , - 2357 , - 2224 , - 2447 , - 3026 , - 3961 , - 5252 , - 1203 , - 3206 , - 5565 , - 2584 , - 5655 , - 3386 , - 1473 , - 5612 , - 4411 , - 3566 , - 3077 , - 2944 , - 3167 , - 3746 , - 4681 , - 276 , - 1923 , - 3926 , - 589 , - 3304 , - 679 , - 4106 , - 2193 , - 636 , - 5131 , - 4286 , - 3797 , - 3664 , - 3887 , - 4466 , - 5401 , - 996 , - 2643 , - 4646 , - 1309 , - 4024 , - 1399 , - 4826 , - 2913 , - 1356 , - 155 , - 5006 , - 4517 , - 4384 , - 4607 , - 5186 , - 425 , - 1716 , - 3363 , - 5366 , - 2029 , - 4744 , - 2119 , - 5546 , - 3633 , - 2076 , - 875 , - 30 , - 5237 , - 5104 , - 5327 , - 210 , - 1145 , - 2436 , - 4083 , - 390 , - 2749 , - 5464 , - 2839 , - 570 , - 4353 , - 2796 , - 1595 , - 750 , - 261 , - 128 , - 351 , - 930 , - 1865 , - 3156 , - 4803 , - 1110 , - 3469 , - 488 , - 3559 , - 1290 , - 5073 , - 3516 , - 2315 , - 1470 , - 981 , - 848 , - 1071 , - 1650 , - 2585 , - 3876 , - 5523 , - 1830 , - 4189 , - 1208 , - 4279 , - 2010 , - 97 , - 4236 , - 3035 , - 2190 , - 1701 , - 1568 , - 1791 , - 2370 , - 3305 , - 4596 , - 547 , - 2550 , - 4909 , - 1928 , - 4999 , - 2730 , - 817 , - 4956 , - 3755 , - 2910 , - 2421 , - 2288 , - 2511 , - 3090 , - 4025 , - 5316 , - 1267 , - 3270 , - 5629 , - 2648 , - 23 , - 3450 , - 1537 , - 5676 , - 4475 , - 3630 , - 3141 , - 3008 , - 3231 , - 3810 , - 4745 , - 340 , - 1987 , - 3990 , - 653 , - 3368 , - 743 , - 4170 , - 2257 , - 700 , - 5195 , - 4350 , - 3861 , - 3728 , - 3951 , - 4530 , - 5465 , - 1060 , - 2707 , - 4710 , - 1373 , - 4088 , - 1463 , - 4890 , - 2977 , - 1420 , - 219 , - 5070 , - 4581 , - 4448 , - 4671 , - 5250 , - 489 , - 1780 , - 3427 , - 5430 , - 2093 , - 4808 , - 2183 , - 5610 , - 3697 , - 2140 , - 939 , - 94 , - 5301 , - 5168 , - 5391 , - 274 , - 1209 , - 2500 , - 4147 , - 454 , - 2813 , - 5528 , - 2903 , - 634 , - 4417 , - 2860 , - 1659 , - 814 , - 325 , - 192 , - 415 , - 994 , - 1929 , - 3220 , - 4867 , - 1174 , - 3533 , - 552 , - 3623 , - 1354 , - 5137 , - 3580 , - 2379 , - 1534 , - 1045 , - 912 , - 1135 , - 1714 , - 2649 , - 3940 , - 5587 , - 1894 , - 4253 , - 1272 , - 4343 , - 2074 , - 161 , - 4300 , - 3099 , - 2254 , - 1765 , - 1632 , - 1855 , - 2434 , - 3369 , - 4660 , - 611 , - 2614 , - 4973 , - 1992 , - 5063 , - 2794 , - 881 , - 5020 , - 3819 , - 2974 , - 2485 , - 2352 , - 2575 , - 3154 , - 4089 , - 5380 , - 1331 , - 3334 , - 5693 , - 2712 , - 87 , - 3514 , - 1601 , - 44 , - 4539 , - 3694 , - 3205 , - 3072 , - 3295 , - 3874 , - 4809 , - 404 , - 2051 , - 4054 , - 717 , - 3432 , - 807 , - 4234 , - 2321 , - 764 , - 5259 , - 4414 , - 3925 , - 3792 , - 4015 , - 4594 , - 5529 , - 1124 , - 2771 , - 4774 , - 1437 , - 4152 , - 1527 , - 4954 , - 3041 , - 1484 , - 283 , - 5134 , - 4645 , - 4512 , - 4735 , - 5314 , - 553 , - 1844 , - 3491 , - 5494 , - 2157 , - 4872 , - 2247 , - 5674 , - 3761 , - 2204 , - 1003 , - 158 , - 5365 , - 5232 , - 5455 , - 338 , - 1273 , - 2564 , - 4211 , - 518 , - 2877 , - 5592 , - 2967 , - 698 , - 4481 , - 2924 , - 1723 , - 878 , - 389 , - 256 , - 479 , - 1058 , - 1993 , - 3284 , - 4931 , - 1238 , - 3597 , - 616 , - 3687 , - 1418 , - 5201 , - 3644 , - 2443 , - 1598 , - 1109 , - 976 , - 1199 , - 1778 , - 2713 , - 4004 , - 5651 , - 1958 , - 4317 , - 1336 , - 4407 , - 2138 , - 225 , - 4364 , - 3163 , - 2318 , - 1829 , - 1696 , - 1919 , - 2498 , - 3433 , - 4724 , - 675 , - 2678 , - 5037 , - 2056 , - 5127 , - 2858 , - 945 , - 5084 , - 3883 , - 3038 , - 2549 , - 2416 , - 2639 , - 3218 , - 4153 , - 5444 , - 1395 , - 3398 , - 61 , - 2776 , - 151 , - 3578 , - 1665 , - 108 , - 4603 , - 3758 , - 3269 , - 3136 , - 3359 , - 3938 , - 4873 , - 468 , - 2115 , - 4118 , - 781 , - 3496 , - 871 , - 4298 , - 2385 , - 828 , - 5323 , - 4478 , - 3989 , - 3856 , - 4079 , - 4658 , - 5593 , - 1188 , - 2835 , - 4838 , - 1501 , - 4216 , - 1591 , - 5018 , - 3105 , - 1548 , - 347 , - 5198 , - 4709 , - 4576 , - 4799 , - 5378 , - 617 , - 1908 , - 3555 , - 5558 , - 2221 , - 4936 , - 2311 , - 42 , - 3825 , - 2268 , - 1067 , - 222 , - 5429 , - 5296 , - 5519 , - 402 , - 1337 , - 2628 , - 4275 , - 582 , - 2941 , - 5656 , - 3031 , - 762 , - 4545 , - 2988 , - 1787 , - 942 , - 453 , - 320 , - 543 , - 1122 , - 2057 , - 3348 , - 4995 , - 1302 , - 3661 , - 680 , - 3751 , - 1482 , - 5265 , - 3708 , - 2507 , - 1662 , - 1173 , - 1040 , - 1263 , - 1842 , - 2777 , - 4068 , - 19 , - 2022 , - 4381 , - 1400 , - 4471 , - 2202 , - 289 , - 4428 , - 3227 , - 2382 , - 1893 , - 1760 , - 1983 , - 2562 , - 3497 , - 4788 , - 739 , - 2742 , - 5101 , - 2120 , - 5191 , - 2922 , - 1009 , - 5148 , - 3947 , - 3102 , - 2613 , - 2480 , - 2703 , - 3282 , - 4217 , - 5508 , - 1459 , - 3462 , - 125 , - 2840 , - 215 , - 3642 , - 1729 , - 172 , - 4667 , - 3822 , - 3333 , - 3200 , - 3423 , - 4002 , - 4937 , - 532 , - 2179 , - 4182 , - 845 , - 3560 , - 935 , - 4362 , - 2449 , - 892 , - 5387 , - 4542 , - 4053 , - 3920 , - 4143 , - 4722 , - 5657 , - 1252 , - 2899 , - 4902 , - 1565 , - 4280 , - 1655 , - 5082 , - 3169 , - 1612 , - 411 , - 5262 , - 4773 , - 4640 , - 4863 , - 5442 , - 681 , - 1972 , - 3619 , - 5622 , - 2285 , - 5000 , - 2375 , - 106 , - 3889 , - 2332 , - 1131 , - 286 , - 5493 , - 5360 , - 5583 , - 466 , - 1401 , - 2692 , - 4339 , - 646 , - 3005 , - 24 , - 3095 , - 826 , - 4609 , - 3052 , - 1851 , - 1006 , - 517 , - 384 , - 607 , - 1186 , - 2121 , - 3412 , - 5059 , - 1366 , - 3725 , - 744 , - 3815 , - 1546 , - 5329 , - 3772 , - 2571 , - 1726 , - 1237 , - 1104 , - 1327 , - 1906 , - 2841 , - 4132 , - 83 , - 2086 , - 4445 , - 1464 , - 4535 , - 2266 , - 353 , - 4492 , - 3291 , - 2446 , - 1957 , - 1824 , - 2047 , - 2626 , - 3561 , - 4852 , - 803 , - 2806 , - 5165 , - 2184 , - 5255 , - 2986 , - 1073 , - 5212 , - 4011 , - 3166 , - 2677 , - 2544 , - 2767 , - 3346 , - 4281 , - 5572 , - 1523 , - 3526 , - 189 , - 2904 , - 279 , - 3706 , - 1793 , - 236 , - 4731 , - 3886 , - 3397 , - 3264 , - 3487 , - 4066 , - 5001 , - 596 , - 2243 , - 4246 , - 909 , - 3624 , - 999 , - 4426 , - 2513 , - 956 , - 5451 , - 4606 , - 4117 , - 3984 , - 4207 , - 4786 , - 25 , - 1316 , - 2963 , - 4966 , - 1629 , - 4344 , - 1719 , - 5146 , - 3233 , - 1676 , - 475 , - 5326 , - 4837 , - 4704 , - 4927 , - 5506 , - 745 , - 2036 , - 3683 , - 5686 , - 2349 , - 5064 , - 2439 , - 170 , - 3953 , - 2396 , - 1195 , - 350 , - 5557 , - 5424 , - 5647 , - 530 , - 1465 , - 2756 , - 4403 , - 710 , - 3069 , - 88 , - 3159 , - 890 , - 4673 , - 3116 , - 1915 , - 1070 , - 581 , - 448 , - 671 , - 1250 , - 2185 , - 3476 , - 5123 , - 1430 , - 3789 , - 808 , - 3879 , - 1610 , - 5393 , - 3836 , - 2635 , - 1790 , - 1301 , - 1168 , - 1391 , - 1970 , - 2905 , - 4196 , - 147 , - 2150 , - 4509 , - 1528 , - 4599 , - 2330 , - 417 , - 4556 , - 3355 , - 2510 , - 2021 , - 1888 , - 2111 , - 2690 , - 3625 , - 4916 , - 867 , - 2870 , - 5229 , - 2248 , - 5319 , - 3050 , - 1137 , - 5276 , - 4075 , - 3230 , - 2741 , - 2608 , - 2831 , - 3410 , - 4345 , - 5636 , - 1587 , - 3590 , - 253 , - 2968 , - 343 , - 3770 , - 1857 , - 300 , - 4795 , - 3950 , - 3461 , - 3328 , - 3551 , - 4130 , - 5065 , - 660 , - 2307 , - 4310 , - 973 , - 3688 , - 1063 , - 4490 , - 2577 , - 1020 , - 5515 , - 4670 , - 4181 , - 4048 , - 4271 , - 4850 , - 89 , - 1380 , - 3027 , - 5030 , - 1693 , - 4408 , - 1783 , - 5210 , - 3297 , - 1740 , - 539 , - 5390 , - 4901 , - 4768 , - 4991 , - 5570 , - 809 , - 2100 , - 3747 , - 54 , - 2413 , - 5128 , - 2503 , - 234 , - 4017 , - 2460 , - 1259 , - 414 , - 5621 , - 5488 , - 15 , - 594 , - 1529 , - 2820 , - 4467 , - 774 , - 3133 , - 152 , - 3223 , - 954 , - 4737 , - 3180 , - 1979 , - 1134 , - 645 , - 512 , - 735 , - 1314 , - 2249 , - 3540 , - 5187 , - 1494 , - 3853 , - 872 , - 3943 , - 1674 , - 5457 , - 3900 , - 2699 , - 1854 , - 1365 , - 1232 , - 1455 , - 2034 , - 2969 , - 4260 , - 211 , - 2214 , - 4573 , - 1592 , - 4663 , - 2394 , - 481 , - 4620 , - 3419 , - 2574 , - 2085 , - 1952 , - 2175 , - 2754 , - 3689 , - 4980 , - 931 , - 2934 , - 5293 , - 2312 , - 5383 , - 3114 , - 1201 , - 5340 , - 4139 , - 3294 , - 2805 , - 2672 , - 2895 , - 3474 , - 4409 , - 4 , - 1651 , - 3654 , - 317 , - 3032 , - 407 , - 3834 , - 1921 , - 364 , - 4859 , - 4014 , - 3525 , - 3392 , - 3615 , - 4194 , - 5129 , - 724 , - 2371 , - 4374 , - 1037 , - 3752 , - 1127 , - 4554 , - 2641 , - 1084 , - 5579 , - 4734 , - 4245 , - 4112 , - 4335 , - 4914 , - 153 , - 1444 , - 3091 , - 5094 , - 1757 , - 4472 , - 1847 , - 5274 , - 3361 , - 1804 , - 603 , - 5454 , - 4965 , - 4832 , - 5055 , - 5634 , - 873 , - 2164 , - 3811 , - 118 , - 2477 , - 5192 , - 2567 , - 298 , - 4081 , - 2524 , - 1323 , - 478 , - 5685 , - 5552 , - 79 , - 658 , - 1593 , - 2884 , - 4531 , - 838 , - 3197 , - 216 , - 3287 , - 1018 , - 4801 , - 3244 , - 2043 , - 1198 , - 709 , - 576 , - 799 , - 1378 , - 2313 , - 3604 , - 5251 , - 1558 , - 3917 , - 936 , - 4007 , - 1738 , - 5521 , - 3964 , - 2763 , - 1918 , - 1429 , - 1296 , - 1519 , - 2098 , - 3033 , - 4324 , - 275 , - 2278 , - 4637 , - 1656 , - 4727 , - 2458 , - 545 , - 4684 , - 3483 , - 2638 , - 2149 , - 2016 , - 2239 , - 2818 , - 3753 , - 5044 , - 995 , - 2998 , - 5357 , - 2376 , - 5447 , - 3178 , - 1265 , - 5404 , - 4203 , - 3358 , - 2869 , - 2736 , - 2959 , - 3538 , - 4473 , - 68 , - 1715 , - 3718 , - 381 , - 3096 , - 471 , - 3898 , - 1985 , - 428 , - 4923 , - 4078 , - 3589 , - 3456 , - 3679 , - 4258 , - 5193 , - 788 , - 2435 , - 4438 , - 1101 , - 3816 , - 1191 , - 4618 , - 2705 , - 1148 , - 5643 , - 4798 , - 4309 , - 4176 , - 4399 , - 4978 , - 217 , - 1508 , - 3155 , - 5158 , - 1821 , - 4536 , - 1911 , - 5338 , - 3425 , - 1868 , - 667 , - 5518 , - 5029 , - 4896 , - 5119 , - 2 , - 937 , - 2228 , - 3875 , - 182 , - 2541 , - 5256 , - 2631 , - 362 , - 4145 , - 2588 , - 1387 , - 542 , - 53 , - 5616 , - 143 , - 722 , - 1657 , - 2948 , - 4595 , - 902 , - 3261 , - 280 , - 3351 , - 1082 , - 4865 , - 3308 , - 2107 , - 1262 , - 773 , - 640 , - 863 , - 1442 , - 2377 , - 3668 , - 5315 , - 1622 , - 3981 , - 1000 , - 4071 , - 1802 , - 5585 , - 4028 , - 2827 , - 1982 , - 1493 , - 1360 , - 1583 , - 2162 , - 3097 , - 4388 , - 339 , - 2342 , - 4701 , - 1720 , - 4791 , - 2522 , - 609 , - 4748 , - 3547 , - 2702 , - 2213 , - 2080 , - 2303 , - 2882 , - 3817 , - 5108 , - 1059 , - 3062 , - 5421 , - 2440 , - 5511 , - 3242 , - 1329 , - 5468 , - 4267 , - 3422 , - 2933 , - 2800 , - 3023 , - 3602 , - 4537 , - 132 , - 1779 , - 3782 , - 445 , - 3160 , - 535 , - 3962 , - 2049 , - 492 , - 4987 , - 4142 , - 3653 , - 3520 , - 3743 , - 4322 , - 5257 , - 852 , - 2499 , - 4502 , - 1165 , - 3880 , - 1255 , - 4682 , - 2769 , - 1212 , - 11 , - 4862 , - 4373 , - 4240 , - 4463 , - 5042 , - 281 , - 1572 , - 3219 , - 5222 , - 1885 , - 4600 , - 1975 , - 5402 , - 3489 , - 1932 , - 731 , - 5582 , - 5093 , - 4960 , - 5183 , - 66 , - 1001 , - 2292 , - 3939 , - 246 , - 2605 , - 5320 , - 2695 , - 426 , - 4209 , - 2652 , - 1451 , - 606 , - 117 , - 5680 , - 207 , - 786 , - 1721 , - 3012 , - 4659 , - 966 , - 3325 , - 344 , - 3415 , - 1146 , - 4929 , - 3372 , - 2171 , - 1326 , - 837 , - 704 , - 927 , - 1506 , - 2441 , - 3732 , - 5379 , - 1686 , - 4045 , - 1064 , - 4135 , - 1866 , - 5649 , - 4092 , - 2891 , - 2046 , - 1557 , - 1424 , - 1647 , - 2226 , - 3161 , - 4452 , - 403 , - 2406 , - 4765 , - 1784 , - 4855 , - 2586 , - 673 , - 4812 , - 3611 , - 2766 , - 2277 , - 2144 , - 2367 , - 2946 , - 3881 , - 5172 , - 1123 , - 3126 , - 5485 , - 2504 , - 5575 , - 3306 , - 1393 , - 5532 , - 4331 , - 3486 , - 2997 , - 2864 , - 3087 , - 3666 , - 4601 , - 196 , - 1843 , - 3846 , - 509 , - 3224 , - 599 , - 4026 , - 2113 , - 556 , - 5051 , - 4206 , - 3717 , - 3584 , - 3807 , - 4386 , - 5321 , - 916 , - 2563 , - 4566 , - 1229 , - 3944 , - 1319 , - 4746 , - 2833 , - 1276 , - 75 , - 4926 , - 4437 , - 4304 , - 4527 , - 5106 , - 345 , - 1636 , - 3283 , - 5286 , - 1949 , - 4664 , - 2039 , - 5466 , - 3553 , - 1996 , - 795 , - 5646 , - 5157 , - 5024 , - 5247 , - 130 , - 1065 , - 2356 , - 4003 , - 310 , - 2669 , - 5384 , - 2759 , - 490 , - 4273 , - 2716 , - 1515 , - 670 , - 181 , - 48 , - 271 , - 850 , - 1785 , - 3076 , - 4723 , - 1030 , - 3389 , - 408 , - 3479 , - 1210 , - 4993 , - 3436 , - 2235 , - 1390 , - 901 , - 768 , - 991 , - 1570 , - 2505 , - 3796 , - 5443 , - 1750 , - 4109 , - 1128 , - 4199 , - 1930 , - 17 , - 4156 , - 2955 , - 2110 , - 1621 , - 1488 , - 1711 , - 2290 , - 3225 , - 4516 , - 467 , - 2470 , - 4829 , - 1848 , - 4919 , - 2650 , - 737 , - 4876 , - 3675 , - 2830 , - 2341 , - 2208 , - 2431 , - 3010 , - 3945 , - 5236 , - 1187 , - 3190 , - 5549 , - 2568 , - 5639 , - 3370 , - 1457 , - 5596 , - 4395 , - 3550 , - 3061 , - 2928 , - 3151 , - 3730 , - 4665 , - 260 , - 1907 , - 3910 , - 573 , - 3288 , - 663 , - 4090 , - 2177 , - 620 , - 5115 , - 4270 , - 3781 , - 3648 , - 3871 , - 4450 , - 5385 , - 980 , - 2627 , - 4630 , - 1293 , - 4008 , - 1383 , - 4810 , - 2897 , - 1340 , - 139 , - 4990 , - 4501 , - 4368 , - 4591 , - 5170 , - 409 , - 1700 , - 3347 , - 5350 , - 2013 , - 4728 , - 2103 , - 5530 , - 3617 , - 2060 , - 859 , - 14 , - 5221 , - 5088 , - 5311 , - 194 , - 1129 , - 2420 , - 4067 , - 374 , - 2733 , - 5448 , - 2823 , - 554 , - 4337 , - 2780 , - 1579 , - 734 , - 245 , - 112 , - 335 , - 914 , - 1849 , - 3140 , - 4787 , - 1094 , - 3453 , - 472 , - 3543 , - 1274 , - 5057 , - 3500 , - 2299 , - 1454 , - 965 , - 832 , - 1055 , - 1634 , - 2569 , - 3860 , - 5507 , - 1814 , - 4173 , - 1192 , - 4263 , - 1994 , - 81 , - 4220 , - 3019 , - 2174 , - 1685 , - 1552 , - 1775 , - 2354 , - 3289 , - 4580 , - 531 , - 2534 , - 4893 , - 1912 , - 4983 , - 2714 , - 801 , - 4940 , - 3739 , - 2894 , - 2405 , - 2272 , - 2495 , - 3074 , - 4009 , - 5300 , - 1251 , - 3254 , - 5613 , - 2632 , - 7 , - 3434 , - 1521 , - 5660 , - 4459 , - 3614 , - 3125 , - 2992 , - 3215 , - 3794 , - 4729 , - 324 , - 1971 , - 3974 , - 637 , - 3352 , - 727 , - 4154 , - 2241 , - 684 , - 5179 , - 4334 , - 3845 , - 3712 , - 3935 , - 4514 , - 5449 , - 1044 , - 2691 , - 4694 , - 1357 , - 4072 , - 1447 , - 4874 , - 2961 , - 1404 , - 203 , - 5054 , - 4565 , - 4432 , - 4655 , - 5234 , - 473 , - 1764 , - 3411 , - 5414 , - 2077 , - 4792 , - 2167 , - 5594 , - 3681 , - 2124 , - 923 , - 78 , - 5285 , - 5152 , - 5375 , - 258 , - 1193 , - 2484 , - 4131 , - 438 , - 2797 , - 5512 , - 2887 , - 618 , - 4401 , - 2844 , - 1643 , - 798 , - 309 , - 176 , - 399 , - 978 , - 1913 , - 3204 , - 4851 , - 1158 , - 3517 , - 536 , - 3607 , - 1338 , - 5121 , - 3564 , - 2363 , - 1518 , - 1029 , - 896 , - 1119 , - 1698 , - 2633 , - 3924 , - 5571 , - 1878 , - 4237 , - 1256 , - 4327 , - 2058 , - 145 , - 4284 , - 3083 , - 2238 , - 1749 , - 1616 , - 1839 , - 2418 , - 3353 , - 4644 , - 595 , - 2598 , - 4957 , - 1976 , - 5047 , - 2778 , - 865 , - 5004 , - 3803 , - 2958 , - 2469 , - 2336 , - 2559 , - 3138 , - 4073 , - 5364 , - 1315 , - 3318 , - 5677 , - 2696 , - 71 , - 3498 , - 1585 , - 28 , - 4523 , - 3678 , - 3189 , - 3056 , - 3279 , - 3858 , - 4793 , - 388 , - 2035 , - 4038 , - 701 , - 3416 , - 791 , - 4218 , - 2305 , - 748 , - 5243 , - 4398 , - 3909 , - 3776 , - 3999 , - 4578 , - 5513 , - 1108 , - 2755 , - 4758 , - 1421 , - 4136 , - 1511 , - 4938 , - 3025 , - 1468 , - 267 , - 5118 , - 4629 , - 4496 , - 4719 , - 5298 , - 537 , - 1828 , - 3475 , - 5478 , - 2141 , - 4856 , - 2231 , - 5658 , - 3745 , - 2188 , - 987 , - 142 , - 5349 , - 5216 , - 5439 , - 322 , - 1257 , - 2548 , - 4195 , - 502 , - 2861 , - 5576 , - 2951 , - 682 , - 4465 , - 2908 , - 1707 , - 862 , - 373 , - 240 , - 463 , - 1042 , - 1977 , - 3268 , - 4915 , - 1222 , - 3581 , - 600 , - 3671 , - 1402 , - 5185 , - 3628 , - 2427 , - 1582 , - 1093 , - 960 , - 1183 , - 1762 , - 2697 , - 3988 , - 5635 , - 1942 , - 4301 , - 1320 , - 4391 , - 2122 , - 209 , - 4348 , - 3147 , - 2302 , - 1813 , - 1680 , - 1903 , - 2482 , - 3417 , - 4708 , - 659 , - 2662 , - 5021 , - 2040 , - 5111 , - 2842 , - 929 , - 5068 , - 3867 , - 3022 , - 2533 , - 2400 , - 2623 , - 3202 , - 4137 , - 5428 , - 1379 , - 3382 , - 45 , - 2760 , - 135 , - 3562 , - 1649 , - 92 , - 4587 , - 3742 , - 3253 , - 3120 , - 3343 , - 3922 , - 4857 , - 452 , - 2099 , - 4102 , - 765 , - 3480 , - 855 , - 4282 , - 2369 , - 812 , - 5307 , - 4462 , - 3973 , - 3840 , - 4063 , - 4642 , - 5577 , - 1172 , - 2819 , - 4822 , - 1485 , - 4200 , - 1575 , - 5002 , - 3089 , - 1532 , - 331 , - 5182 , - 4693 , - 4560 , - 4783 , - 5362 , - 601 , - 1892 , - 3539 , - 5542 , - 2205 , - 4920 , - 2295 , - 26 , - 3809 , - 2252 , - 1051 , - 206 , - 5413 , - 5280 , - 5503 , - 386 , - 1321 , - 2612 , - 4259 , - 566 , - 2925 , - 5640 , - 3015 , - 746 , - 4529 , - 2972 , - 1771 , - 926 , - 437 , - 304 , - 527 , - 1106 , - 2041 , - 3332 , - 4979 , - 1286 , - 3645 , - 664 , - 3735 , - 1466 , - 5249 , - 3692 , - 2491 , - 1646 , - 1157 , - 1024 , - 1247 , - 1826 , - 2761 , - 4052 , - 3 , - 2006 , - 4365 , - 1384 , - 4455 , - 2186 , - 273 , - 4412 , - 3211 , - 2366 , - 1877 , - 1744 , - 1967 , - 2546 , - 3481 , - 4772 , - 723 , - 2726 , - 5085 , - 2104 , - 5175 , - 2906 , - 993 , - 5132 , - 3931 , - 3086 , - 2597 , - 2464 , - 2687 , - 3266 , - 4201 , - 5492 , - 1443 , - 3446 , - 109 , - 2824 , - 199 , - 3626 , - 1713 , - 156 , - 4651 , - 3806 , - 3317 , - 3184 , - 3407 , - 3986 , - 4921 , - 516 , - 2163 , - 4166 , - 829 , - 3544 , - 919 , - 4346 , - 2433 , - 876 , - 5371 , - 4526 , - 4037 , - 3904 , - 4127 , - 4706 , - 5641 , - 1236 , - 2883 , - 4886 , - 1549 , - 4264 , - 1639 , - 5066 , - 3153 , - 1596 , - 395 , - 5246 , - 4757 , - 4624 , - 4847 , - 5426 , - 665 , - 1956 , - 3603 , - 5606 , - 2269 , - 4984 , - 2359 , - 90 , - 3873 , - 2316 , - 1115 , - 270 , - 5477 , - 5344 , - 5567 , - 450 , - 1385 , - 2676 , - 4323 , - 630 , - 2989 , - 8 , - 3079 , - 810 , - 4593 , - 3036 , - 1835 , - 990 , - 501 , - 368 , - 591 , - 1170 , - 2105 , - 3396 , - 5043 , - 1350 , - 3709 , - 728 , - 3799 , - 1530 , - 5313 , - 3756 , - 2555 , - 1710 , - 1221 , - 1088 , - 1311 , - 1890 , - 2825 , - 4116 , - 67 , - 2070 , - 4429 , - 1448 , - 4519 , - 2250 , - 337 , - 4476 , - 3275 , - 2430 , - 1941 , - 1808 , - 2031 , - 2610 , - 3545 , - 4836 , - 787 , - 2790 , - 5149 , - 2168 , - 5239 , - 2970 , - 1057 , - 5196 , - 3995 , - 3150 , - 2661 , - 2528 , - 2751 , - 3330 , - 4265 , - 5556 , - 1507 , - 3510 , - 173 , - 2888 , - 263 , - 3690 , - 1777 , - 220 , - 4715 , - 3870 , - 3381 , - 3248 , - 3471 , - 4050 , - 4985 , - 580 , - 2227 , - 4230 , - 893 , - 3608 , - 983 , - 4410 , - 2497 , - 940 , - 5435 , - 4590 , - 4101 , - 3968 , - 4191 , - 4770 , - 9 , - 1300 , - 2947 , - 4950 , - 1613 , - 4328 , - 1703 , - 5130 , - 3217 , - 1660 , - 459 , - 5310 , - 4821 , - 4688 , - 4911 , - 5490 , - 729 , - 2020 , - 3667 , - 5670 , - 2333 , - 5048 , - 2423 , - 154 , - 3937 , - 2380 , - 1179 , - 334 , - 5541 , - 5408 , - 5631 , - 514 , - 1449 , - 2740 , - 4387 , - 694 , - 3053 , - 72 , - 3143 , - 874 , - 4657 , - 3100 , - 1899 , - 1054 , - 565 , - 432 , - 655 , - 1234 , - 2169 , - 3460 , - 5107 , - 1414 , - 3773 , - 792 , - 3863 , - 1594 , - 5377 , - 3820 , - 2619 , - 1774 , - 1285 , - 1152 , - 1375 , - 1954 , - 2889 , - 4180 , - 131 , - 2134 , - 4493 , - 1512 , - 4583 , - 2314 , - 401 , - 4540 , - 3339 , - 2494 , - 2005 , - 1872 , - 2095 , - 2674 , - 3609 , - 4900 , - 851 , - 2854 , - 5213 , - 2232 , - 5303 , - 3034 , - 1121 , - 5260 , - 4059 , - 3214 , - 2725 , - 2592 , - 2815 , - 3394 , - 4329 , - 5620 , - 1571 , - 3574 , - 237 , - 2952 , - 327 , - 3754 , - 1841 , - 284 , - 4779 , - 3934 , - 3445 , - 3312 , - 3535 , - 4114 , - 5049 , - 644 , - 2291 , - 4294 , - 957 , - 3672 , - 1047 , - 4474 , - 2561 , - 1004 , - 5499 , - 4654 , - 4165 , - 4032 , - 4255 , - 4834 , - 73 , - 1364 , - 3011 , - 5014 , - 1677 , - 4392 , - 1767 , - 5194 , - 3281 , - 1724 , - 523 , - 5374 , - 4885 , - 4752 , - 4975 , - 5554 , - 793 , - 2084 , - 3731 , - 38 , - 2397 , - 5112 , - 2487 , - 218 , - 4001 , - 2444 , - 1243 , - 398 , - 5605 , - 5472 , - 5695 , - 578 , - 1513 , - 2804 , - 4451 , - 758 , - 3117 , - 136 , - 3207 , - 938 , - 4721 , - 3164 , - 1963 , - 1118 , - 629 , - 496 , - 719 , - 1298 , - 2233 , - 3524 , - 5171 , - 1478 , - 3837 , - 856 , - 3927 , - 1658 , - 5441 , - 3884 , - 2683 , - 1838 , - 1349 , - 1216 , - 1439 , - 2018 , - 2953 , - 4244 , - 195 , - 2198 , - 4557 , - 1576 , - 4647 , - 2378 , - 465 , - 4604 , - 3403 , - 2558 , - 2069 , - 1936 , - 2159 , - 2738 , - 3673 , - 4964 , - 915 , - 2918 , - 5277 , - 2296 , - 5367 , - 3098 , - 1185 , - 5324 , - 4123 , - 3278 , - 2789 , - 2656 , - 2879 , - 3458 , - 4393 , - 5684 , - 1635 , - 3638 , - 301 , - 3016 , - 391 , - 3818 , - 1905 , - 348 , - 4843 , - 3998 , - 3509 , - 3376 , - 3599 , - 4178 , - 5113 , - 708 , - 2355 , - 4358 , - 1021 , - 3736 , - 1111 , - 4538 , - 2625 , - 1068 , - 5563 , - 4718 , - 4229 , - 4096 , - 4319 , - 4898 , - 137 , - 1428 , - 3075 , - 5078 , - 1741 , - 4456 , - 1831 , - 5258 , - 3345 , - 1788 , - 587 , - 5438 , - 4949 , - 4816 , - 5039 , - 5618 , - 857 , - 2148 , - 3795 , - 102 , - 2461 , - 5176 , - 2551 , - 282 , - 4065 , - 2508 , - 1307 , - 462 , - 5669 , - 5536 , - 63 , - 642 , - 1577 , - 2868 , - 4515 , - 822 , - 3181 , - 200 , - 3271 , - 1002 , - 4785 , - 3228 , - 2027 , - 1182 , - 693 , - 560 , - 783 , - 1362 , - 2297 , - 3588 , - 5235 , - 1542 , - 3901 , - 920 , - 3991 , - 1722 , - 5505 , - 3948 , - 2747 , - 1902 , - 1413 , - 1280 , - 1503 , - 2082 , - 3017 , - 4308 , - 259 , - 2262 , - 4621 , - 1640 , - 4711 , - 2442 , - 529 , - 4668 , - 3467 , - 2622 , - 2133 , - 2000 , - 2223 , - 2802 , - 3737 , - 5028 , - 979 , - 2982 , - 5341 , - 2360 , - 5431 , - 3162 , - 1249 , - 5388 , - 4187 , - 3342 , - 2853 , - 2720 , - 2943 , - 3522 , - 4457 , - 52 , - 1699 , - 3702 , - 365 , - 3080 , - 455 , - 3882 , - 1969 , - 412 , - 4907 , - 4062 , - 3573 , - 3440 , - 3663 , - 4242 , - 5177 , - 772 , - 2419 , - 4422 , - 1085 , - 3800 , - 1175 , - 4602 , - 2689 , - 1132 , - 5627 , - 4782 , - 4293 , - 4160 , - 4383 , - 4962 , - 201 , - 1492 , - 3139 , - 5142 , - 1805 , - 4520 , - 1895 , - 5322 , - 3409 , - 1852 , - 651 , - 5502 , - 5013 , - 4880 , - 5103 , - 5682 , - 921 , - 2212 , - 3859 , - 166 , - 2525 , - 5240 , - 2615 , - 346 , - 4129 , - 2572 , - 1371 , - 526 , - 37 , - 5600 , - 127 , - 706 , - 1641 , - 2932 , - 4579 , - 886 , - 3245 , - 264 , - 3335 , - 1066 , - 4849 , - 3292 , - 2091 , - 1246 , - 757 , - 624 , - 847 , - 1426 , - 2361 , - 3652 , - 5299 , - 1606 , - 3965 , - 984 , - 4055 , - 1786 , - 5569 , - 4012 , - 2811 , - 1966 , - 1477 , - 1344 , - 1567 , - 2146 , - 3081 , - 4372 , - 323 , - 2326 , - 4685 , - 1704 , - 4775 , - 2506 , - 593 , - 4732 , - 3531 , - 2686 , - 2197 , - 2064 , - 2287 , - 2866 , - 3801 , - 5092 , - 1043 , - 3046 , - 5405 , - 2424 , - 5495 , - 3226 , - 1313 , - 5452 , - 4251 , - 3406 , - 2917 , - 2784 , - 3007 , - 3586 , - 4521 , - 116 , - 1763 , - 3766 , - 429 , - 3144 , - 519 , - 3946 , - 2033 , - 476 , - 4971 , - 4126 , - 3637 , - 3504 , - 3727 , - 4306 , - 5241 , - 836 , - 2483 , - 4486 , - 1149 , - 3864 , - 1239 , - 4666 , - 2753 , - 1196 , - 5691 , - 4846 , - 4357 , - 4224 , - 4447 , - 5026 , - 265 , - 1556 , - 3203 , - 5206 , - 1869 , - 4584 , - 1959 , - 5386 , - 3473 , - 1916 , - 715 , - 5566 , - 5077 , - 4944 , - 5167 , - 50 , - 985 , - 2276 , - 3923 , - 230 , - 2589 , - 5304 , - 2679 , - 410 , - 4193 , - 2636 , - 1435 , - 590 , - 101 , - 5664 , - 191 , - 770 , - 1705 , - 2996 , - 4643 , - 950 , - 3309 , - 328 , - 3399 , - 1130 , - 4913 , - 3356 , - 2155 , - 1310 , - 821 , - 688 , - 911 , - 1490 , - 2425 , - 3716 , - 5363 , - 1670 , - 4029 , - 1048 , - 4119 , - 1850 , - 5633 , - 4076 , - 2875 , - 2030 , - 1541 , - 1408 , - 1631 , - 2210 , - 3145 , - 4436 , - 387 , - 2390 , - 4749 , - 1768 , - 4839 , - 2570 , - 657 , - 4796 , - 3595 , - 2750 , - 2261 , - 2128 , - 2351 , - 2930 , - 3865 , - 5156 , - 1107 , - 3110 , - 5469 , - 2488 , - 5559 , - 3290 , - 1377 , - 5516 , - 4315 , - 3470 , - 2981 , - 2848 , - 3071 , - 3650 , - 4585 , - 180 , - 1827 , - 3830 , - 493 , - 3208 , - 583 , - 4010 , - 2097 , - 540 , - 5035 , - 4190 , - 3701 , - 3568 , - 3791 , - 4370 , - 5305 , - 900 , - 2547 , - 4550 , - 1213 , - 3928 , - 1303 , - 4730 , - 2817 , - 1260 , - 59 , - 4910 , - 4421 , - 4288 , - 4511 , - 5090 , - 329 , - 1620 , - 3267 , - 5270 , - 1933 , - 4648 , - 2023 , - 5450 , - 3537 , - 1980 , - 779 , - 5630 , - 5141 , - 5008 , - 5231 , - 114 , - 1049 , - 2340 , - 3987 , - 294 , - 2653 , - 5368 , - 2743 , - 474 , - 4257 , - 2700 , - 1499 , - 654 , - 165 , - 32 , - 255 , - 834 , - 1769 , - 3060 , - 4707 , - 1014 , - 3373 , - 392 , - 3463 , - 1194 , - 4977 , - 3420 , - 2219 , - 1374 , - 885 , - 752 , - 975 , - 1554 , - 2489 , - 3780 , - 5427 , - 1734 , - 4093 , - 1112 , - 4183 , - 1914 , - 1 , - 4140 , - 2939 , - 2094 , - 1605 , - 1472 , - 1695 , - 2274 , - 3209 , - 4500 , - 451 , - 2454 , - 4813 , - 1832 , - 4903 , - 2634 , - 721 , - 4860 , - 3659 , - 2814 , - 2325 , - 2192 , - 2415 , - 2994 , - 3929 , - 5220 , - 1171 , - 3174 , - 5533 , - 2552 , - 5623 , - 3354 , - 1441 , - 5580 , - 4379 , - 3534 , - 3045 , - 2912 , - 3135 , - 3714 , - 4649 , - 244 , - 1891 , - 3894 , - 557 , - 3272 , - 647 , - 4074 , - 2161 , - 604 , - 5099 , - 4254 , - 3765 , - 3632 , - 3855 , - 4434 , - 5369 , - 964 , - 2611 , - 4614 , - 1277 , - 3992 , - 1367 , - 4794 , - 2881 , - 1324 , - 123 , - 4974 , - 4485 , - 4352 , - 4575 , - 5154 , - 393 , - 1684 , - 3331 , - 5334 , - 1997 , - 4712 , - 2087 , - 5514 , - 3601 , - 2044 , - 843 , - 5694 , - 5205 , - 5072 , - 5295 , - 178 , - 1113 , - 2404 , - 4051 , - 358 , - 2717 , - 5432 , - 2807 , - 538 , - 4321 , - 2764 , - 1563 , - 718 , - 229 , - 96 , - 319 , - 898 , - 1833 , - 3124 , - 4771 , - 1078 , - 3437 , - 456 , - 3527 , - 1258 , - 5041 , - 3484 , - 2283 , - 1438 , - 949 , - 816 , - 1039 , - 1618 , - 2553 , - 3844 , - 5491 , - 1798 , - 4157 , - 1176 , - 4247 , - 1978 , - 65 , - 4204 , - 3003 , - 2158 , - 1669 , - 1536 , - 1759 , - 2338 , - 3273 , - 4564 , - 515 , - 2518 , - 4877 , - 1896 , - 4967 , - 2698 , - 785 , - 4924 , - 3723 , - 2878 , - 2389 , - 2256 , - 2479 , - 3058 , - 3993 , - 5284 , - 1235 , - 3238 , - 5597 , - 2616 , - 5687 , - 3418 , - 1505 , - 5644 , - 4443 , - 3598 , - 3109 , - 2976 , - 3199 , - 3778 , - 4713 , - 308 , - 1955 , - 3958 , - 621 , - 3336 , - 711 , - 4138 , - 2225 , - 668 , - 5163 , - 4318 , - 3829 , - 3696 , - 3919 , - 4498 , - 5433 , - 1028 , - 2675 , - 4678 , - 1341 , - 4056 , - 1431 , - 4858 , - 2945 , - 1388 , - 187 , - 5038 , - 4549 , - 4416 , - 4639 , - 5218 , - 457 , - 1748 , - 3395 , - 5398 , - 2061 , - 4776 , - 2151 , - 5578 , - 3665 , - 2108 , - 907 , - 62 , - 5269 , - 5136 , - 5359 , - 242 , - 1177 , - 2468 , - 4115 , - 422 , - 2781 , - 5496 , - 2871 , - 602 , - 4385 , - 2828 , - 1627 , - 782 , - 293 , - 160 , - 383 , - 962 , - 1897 , - 3188 , - 4835 , - 1142 , - 3501 , - 520 , - 3591 , - 1322 , - 5105 , - 3548 , - 2347 , - 1502 , - 1013 , - 880 , - 1103 , - 1682 , - 2617 , - 3908 , - 5555 , - 1862 , - 4221 , - 1240 , - 4311 , - 2042 , - 129 , - 4268 , - 3067 , - 2222 , - 1733 , - 1600 , - 1823 , - 2402 , - 3337 , - 4628 , - 579 , - 2582 , - 4941 , - 1960 , - 5031 , - 2762 , - 849 , - 4988 , - 3787 , - 2942 , - 2453 , - 2320 , - 2543 , - 3122 , - 4057 , - 5348 , - 1299 , - 3302 , - 5661 , - 2680 , - 55 , - 3482 , - 1569 , - 12 , - 4507 , - 3662 , - 3173 , - 3040 , - 3263 , - 3842 , - 4777 , - 372 , - 2019 , - 4022 , - 685 , - 3400 , - 775 , - 4202 , - 2289 , - 732 , - 5227 , - 4382 , - 3893 , - 3760 , - 3983 , - 4562 , - 5497 , - 1092 , - 2739 , - 4742 , - 1405 , - 4120 , - 1495 , - 4922 , - 3009 , - 1452 , - 251 , - 5102 , - 4613 , - 4480 , - 4703 , - 5282 , - 521 , - 1812 , - 3459 , - 5462 , - 2125 , - 4840 , - 2215 , - 5642 , - 3729 , - 2172 , - 971 , - 126 , - 5333 , - 5200 , - 5423 , - 306 , - 1241 , - 2532 , - 4179 , - 486 , - 2845 , - 5560 , - 2935 , - 666 , - 4449 , - 2892 , - 1691 , - 846 , - 357 , - 224 , - 447 , - 1026 , - 1961 , - 3252 , - 4899 , - 1206 , - 3565 , - 584 , - 3655 , - 1386 , - 5169 , - 3612 , - 2411 , - 1566 , - 1077 , - 944 , - 1167 , - 1746 , - 2681 , - 3972 , - 5619 , - 1926 , - 4285 , - 1304 , - 4375 , - 2106 , - 193 , - 4332 , - 3131 , - 2286 , - 1797 , - 1664 , - 1887 , - 2466 , - 3401 , - 4692 , - 643 , - 2646 , - 5005 , - 2024 , - 5095 , - 2826 , - 913 , - 5052 , - 3851 , - 3006 , - 2517 , - 2384 , - 2607 , - 3186 , - 4121 , - 5412 , - 1363 , - 3366 , - 29 , - 2744 , - 119 , - 3546 , - 1633 , - 76 , - 4571 , - 3726 , - 3237 , - 3104 , - 3327 , - 3906 , - 4841 , - 436 , - 2083 , - 4086 , - 749 , - 3464 , - 839 , - 4266 , - 2353 , - 796 , - 5291 , - 4446 , - 3957 , - 3824 , - 4047 , - 4626 , - 5561 , - 1156 , - 2803 , - 4806 , - 1469 , - 4184 , - 1559 , - 4986 , - 3073 , - 1516 , - 315 , - 5166 , - 4677 , - 4544 , - 4767 , - 5346 , - 585 , - 1876 , - 3523 , - 5526 , - 2189 , - 4904 , - 2279 , - 10 , - 3793 , - 2236 , - 1035 , - 190 , - 5397 , - 5264 , - 5487 , - 370 , - 1305 , - 2596 , - 4243 , - 550 , - 2909 , - 5624 , - 2999 , - 730 , - 4513 , - 2956 , - 1755 , - 910 , - 421 , - 288 , - 511 , - 1090 , - 2025 , - 3316 , - 4963 , - 1270 , - 3629 , - 648 , - 3719 , - 1450 , - 5233 , - 3676 , - 2475 , - 1630 , - 1141 , - 1008 , - 1231 , - 1810 , - 2745 , - 4036 , - 5683 , - 1990 , - 4349 , - 1368 , - 4439 , - 2170 , - 257 , - 4396 , - 3195 , - 2350 , - 1861 , - 1728 , - 1951 , - 2530 , - 3465 , - 4756 , - 707 , - 2710 , - 5069 , - 2088 , - 5159 , - 2890 , - 977 , - 5116 , - 3915 , - 3070 , - 2581 , - 2448 , - 2671 , - 3250 , - 4185 , - 5476 , - 1427 , - 3430 , - 93 , - 2808 , - 183 , - 3610 , - 1697 , - 140 , - 4635 , - 3790 , - 3301 , - 3168 , - 3391 , - 3970 , - 4905 , - 500 , - 2147 , - 4150 , - 813 , - 3528 , - 903 , - 4330 , - 2417 , - 860 , - 5355 , - 4510 , - 4021 , - 3888 , - 4111 , - 4690 , - 5625 , - 1220 , - 2867 , - 4870 , - 1533 , - 4248 , - 1623 , - 5050 , - 3137 , - 1580 , - 379 , - 5230 , - 4741 , - 4608 , - 4831 , - 5410 , - 649 , - 1940 , - 3587 , - 5590 , - 2253 , - 4968 , - 2343 , - 74 , - 3857 , - 2300 , - 1099 , - 254 , - 5461 , - 5328 , - 5551 , - 434 , - 1369 , - 2660 , - 4307 , - 614 , - 2973 , - 5688 , - 3063 , - 794 , - 4577 , - 3020 , - 1819 , - 974 , - 485 , - 352 , - 575 , - 1154 , - 2089 , - 3380 , - 5027 , - 1334 , - 3693 , - 712 , - 3783 , - 1514 , - 5297 , - 3740 , - 2539 , - 1694 , - 1205 , - 1072 , - 1295 , - 1874 , - 2809 , - 4100 , - 51 , - 2054 , - 4413 , - 1432 , - 4503 , - 2234 , - 321 , - 4460 , - 3259 , - 2414 , - 1925 , - 1792 , - 2015 , - 2594 , - 3529 , - 4820 , - 771 , - 2774 , - 5133 , - 2152 , - 5223 , - 2954 , - 1041 , - 5180 , - 3979 , - 3134 , - 2645 , - 2512 , - 2735 , - 3314 , - 4249 , - 5540 , - 1491 , - 3494 , - 157 , - 2872 , - 247 , - 3674 , - 1761 , - 204 , - 4699 , - 3854 , - 3365 , - 3232 , - 3455 , - 4034 , - 4969 , - 564 , - 2211 , - 4214 , - 877 , - 3592 , - 967 , - 4394 , - 2481 , - 924 , - 5419 , - 4574 , - 4085 , - 3952 , - 4175 , - 4754 , - 5689 , - 1284 , - 2931 , - 4934 , - 1597 , - 4312 , - 1687 , - 5114 , - 3201 , - 1644 , - 443 , - 5294 , - 4805 , - 4672 , - 4895 , - 5474 , - 713 , - 2004 , - 3651 , - 5654 , - 2317 , - 5032 , - 2407 , - 138 , - 3921 , - 2364 , - 1163 , - 318 , - 5525 , - 5392 , - 5615 , - 498 , - 1433 , - 2724 , - 4371 , - 678 , - 3037 , - 56 , - 3127 , - 858 , - 4641 , - 3084 , - 1883 , - 1038 , - 549 , - 416 , - 639 , - 1218 , - 2153 , - 3444 , - 5091 , - 1398 , - 3757 , - 776 , - 3847 , - 1578 , - 5361 , - 3804 , - 2603 , - 1758 , - 1269 , - 1136 , - 1359 , - 1938 , - 2873 , - 4164 , - 115 , - 2118 , - 4477 , - 1496 , - 4567 , - 2298 , - 385 , - 4524 , - 3323 , - 2478 , - 1989 , - 1856 , - 2079 , - 2658 , - 3593 , - 4884 , - 835 , - 2838 , - 5197 , - 2216 , - 5287 , - 3018 , - 1105 , - 5244 , - 4043 , - 3198 , - 2709 , - 2576 , - 2799 , - 3378 , - 4313 , - 5604 , - 1555 , - 3558 , - 221 , - 2936 , - 311 , - 3738 , - 1825 , - 268 , - 4763 , - 3918 , - 3429 , - 3296 , - 3519 , - 4098 , - 5033 , - 628 , - 2275 , - 4278 , - 941 , - 3656 , - 1031 , - 4458 , - 2545 , - 988 , - 5483 , - 4638 , - 4149 , - 4016 , - 4239 , - 4818 , - 57 , - 1348 , - 2995 , - 4998 , - 1661 , - 4376 , - 1751 , - 5178 , - 3265 , - 1708 , - 507 , - 5358 , - 4869 , - 4736 , - 4959 , - 5538 , - 777 , - 2068 , - 3715 , - 22 , - 2381 , - 5096 , - 2471 , - 202 , - 3985 , - 2428 , - 1227 , - 382 , - 5589 , - 5456 , - 5679 , - 562 , - 1497 , - 2788 , - 4435 , - 742 , - 3101 , - 120 , - 3191 , - 922 , - 4705 , - 3148 , - 1947 , - 1102 , - 613 , - 480 , - 703 , - 1282 , - 2217 , - 3508 , - 5155 , - 1462 , - 3821 , - 840 , - 3911 , - 1642 , - 5425 , - 3868 , - 2667 , - 1822 , - 1333 , - 1200 , - 1423 , - 2002 , - 2937 , - 4228 , - 179 , - 2182 , - 4541 , - 1560 , - 4631 , - 2362 , - 449 , - 4588 , - 3387 , - 2542 , - 2053 , - 1920 , - 2143 , - 2722 , - 3657 , - 4948 , - 899 , - 2902 , - 5261 , - 2280 , - 5351 , - 3082 , - 1169 , - 5308 , - 4107 , - 3262 , - 2773 , - 2640 , - 2863 , - 3442 , - 4377 , - 5668 , - 1619 , - 3622 , - 285 , - 3000 , - 375 , - 3802 , - 1889 , - 332 , - 4827 , - 3982 , - 3493 , - 3360 , - 3583 , - 4162 , - 5097 , - 692 , - 2339 , - 4342 , - 1005 , - 3720 , - 1095 , - 4522 , - 2609 , - 1052 , - 5547 , - 4702 , - 4213 , - 4080 , - 4303 , - 4882 , - 121 , - 1412 , - 3059 , - 5062 , - 1725 , - 4440 , - 1815 , - 5242 , - 3329 , - 1772 , - 571 , - 5422 , - 4933 , - 4800 , - 5023 , - 5602 , - 841 , - 2132 , - 3779 , - 86 , - 2445 , - 5160 , - 2535 , - 266 , - 4049 , - 2492 , - 1291 , - 446 , - 5653 , - 5520 , - 47 , - 626 , - 1561 , - 2852 , - 4499 , - 806 , - 3165 , - 184 , - 3255 , - 986 , - 4769 , - 3212 , - 2011 , - 1166 , - 677 , - 544 , - 767 , - 1346 , - 2281 , - 3572 , - 5219 , - 1526 , - 3885 , - 904 , - 3975 , - 1706 , - 5489 , - 3932 , - 2731 , - 1886 , - 1397 , - 1264 , - 1487 , - 2066 , - 3001 , - 4292 , - 243 , - 2246 , - 4605 , - 1624 , - 4695 , - 2426 , - 513 , - 4652 , - 3451 , - 2606 , - 2117 , - 1984 , - 2207 , - 2786 , - 3721 , - 5012 , - 963 , - 2966 , - 5325 , - 2344 , - 5415 , - 3146 , - 1233 , - 5372 , - 4171 , - 3326 , - 2837 , - 2704 , - 2927 , - 3506 , - 4441 , - 36 , - 1683 , - 3686 , - 349 , - 3064 , - 439 , - 3866 , - 1953 , - 396 , - 4891 , - 4046 , - 3557 , - 3424 , - 3647 , - 4226 , - 5161 , - 756 , - 2403 , - 4406 , - 1069 , - 3784 , - 1159 , - 4586 , - 2673 , - 1116 , - 5611 , - 4766 , - 4277 , - 4144 , - 4367 , - 4946 , - 185 , - 1476 , - 3123 , - 5126 , - 1789 , - 4504 , - 1879 , - 5306 , - 3393 , - 1836 , - 635 , - 5486 , - 4997 , - 4864 , - 5087 , - 5666 , - 905 , - 2196 , - 3843 , - 150 , - 2509 , - 5224 , - 2599 , - 330 , - 4113 , - 2556 , - 1355 , - 510 , - 21 , - 5584 , - 111 , - 690 , - 1625 , - 2916 , - 4563 , - 870 , - 3229 , - 248 , - 3319 , - 1050 , - 4833 , - 3276 , - 2075 , - 1230 , - 741 , - 608 , - 831 , - 1410 , - 2345 , - 3636 , - 5283 , - 1590 , - 3949 , - 968 , - 4039 , - 1770 , - 5553 , - 3996 , - 2795 , - 1950 , - 1461 , - 1328 , - 1551 , - 2130 , - 3065 , - 4356 , - 307 , - 2310 , - 4669 , - 1688 , - 4759 , - 2490 , - 577 , - 4716 , - 3515 , - 2670 , - 2181 , - 2048 , - 2271 , - 2850 , - 3785 , - 5076 , - 1027 , - 3030 , - 5389 , - 2408 , - 5479 , - 3210 , - 1297 , - 5436 , - 4235 , - 3390 , - 2901 , - 2768 , - 2991 , - 3570 , - 4505 , - 100 , - 1747 , - 3750 , - 413 , - 3128 , - 503 , - 3930 , - 2017 , - 460 , - 4955 , - 4110 , - 3621 , - 3488 , - 3711 , - 4290 , - 5225 , - 820 , - 2467 , - 4470 , - 1133 , - 3848 , - 1223 , - 4650 , - 2737 , - 1180 , - 5675 , - 4830 , - 4341 , - 4208 , - 4431 , - 5010 , - 249 , - 1540 , - 3187 , - 5190 , - 1853 , - 4568 , - 1943 , - 5370 , - 3457 , - 1900 , - 699 , - 5550 , - 5061 , - 4928 , - 5151 , - 34 , - 969 , - 2260 , - 3907 , - 214 , - 2573 , - 5288 , - 2663 , - 394 , - 4177 , - 2620 , - 1419 , - 574 , - 85 , - 5648 , - 175 , - 754 , - 1689 , - 2980 , - 4627 , - 934 , - 3293 , - 312 , - 3383 , - 1114 , - 4897 , - 3340 , - 2139 , - 1294 , - 805 , - 672 , - 895 , - 1474 , - 2409 , - 3700 , - 5347 , - 1654 , - 4013 , - 1032 , - 4103 , - 1834 , - 5617 , - 4060 , - 2859 , - 2014 , - 1525 , - 1392 , - 1615 , - 2194 , - 3129 , - 4420 , - 371 , - 2374 , - 4733 , - 1752 , - 4823 , - 2554 , - 641 , - 4780 , - 3579 , - 2734 , - 2245 , - 2112 , - 2335 , - 2914 , - 3849 , - 5140 , - 1091 , - 3094 , - 5453 , - 2472 , - 5543 , - 3274 , - 1361 , - 5500 , - 4299 , - 3454 , - 2965 , - 2832 , - 3055 , - 3634 , - 4569 , - 164 , - 1811 , - 3814 , - 477 , - 3192 , - 567 , - 3994 , - 2081 , - 524 , - 5019 , - 4174 , - 3685 , - 3552 , - 3775 , - 4354 , - 5289 , - 884 , - 2531 , - 4534 , - 1197 , - 3912 , - 1287 , - 4714 , - 2801 , - 1244 , - 43 , - 4894 , - 4405 , - 4272 , - 4495 , - 5074 , - 313 , - 1604 , - 3251 , - 5254 , - 1917 , - 4632 , - 2007 , - 5434 , - 3521 , - 1964 , - 763 , - 5614 , - 5125 , - 4992 , - 5215 , - 98 , - 1033 , - 2324 , - 3971 , - 278 , - 2637 , - 5352 , - 2727 , - 458 , - 4241 , - 2684 , - 1483 , - 638 , - 149 , - 16 , - 239 , - 818 , - 1753 , - 3044 , - 4691 , - 998 , - 3357 , - 376 , - 3447 , - 1178 , - 4961 , - 3404 , - 2203 , - 1358 , - 869 , - 736 , - 959 , - 1538 , - 2473 , - 3764 , - 5411 , - 1718 , - 4077 , - 1096 , - 4167 , - 1898 , - 5681 , - 4124 , - 2923 , - 2078 , - 1589 , - 1456 , - 1679 , - 2258 , - 3193 , - 4484 , - 435 , - 2438 , - 4797 , - 1816 , - 4887 , - 2618 , - 705 , - 4844 , - 3643 , - 2798 , - 2309 , - 2176 , - 2399 , - 2978 , - 3913 , - 5204 , - 1155 , - 3158 , - 5517 , - 2536 , - 5607 , - 3338 , - 1425 , - 5564 , - 4363 , - 3518 , - 3029 , - 2896 , - 3119 , - 3698 , - 4633 , - 228 , - 1875 , - 3878 , - 541 , - 3256 , - 631 , - 4058 , - 2145 , - 588 , - 5083 , - 4238 , - 3749 , - 3616 , - 3839 , - 4418 , - 5353 , - 948 , - 2595 , - 4598 , - 1261 , - 3976 , - 1351 , - 4778 , - 2865 , - 1308 , - 107 , - 4958 , - 4469 , - 4336 , - 4559 , - 5138 , - 377 , - 1668 , - 3315 , - 5318 , - 1981 , - 4696 , - 2071 , - 5498 , - 3585 , - 2028 , - 827 , - 5678 , - 5189 , - 5056 , - 5279 , - 162 , - 1097 , - 2388 , - 4035 , - 342 , - 2701 , - 5416 , - 2791 , - 522 , - 4305 , - 2748 , - 1547 , - 702 , - 213 , - 80 , - 303 , - 882 , - 1817 , - 3108 , - 4755 , - 1062 , - 3421 , - 440 , - 3511 , - 1242 , - 5025 , - 3468 , - 2267 , - 1422 , - 933 , - 800 , - 1023 , - 1602 , - 2537 , - 3828 , - 5475 , - 1782 , - 4141 , - 1160 , - 4231 , - 1962 , - 49 , - 4188 , - 2987 , - 2142 , - 1653 , - 1520 , - 1743 , - 2322 , - 3257 , - 4548 , - 499 , - 2502 , - 4861 , - 1880 , - 4951 , - 2682 , - 769 , - 4908 , - 3707 , - 2862 , - 2373 , - 2240 , - 2463 , - 3042 , - 3977 , - 5268 , - 1219 , - 3222 , - 5581 , - 2600 , - 5671 , - 3402 , - 1489 , - 5628 , - 4427 , - 3582 , - 3093 , - 2960 , - 3183 , - 3762 , - 4697 , - 292 , - 1939 , - 3942 , - 605 , - 3320 , - 695 , - 4122 , - 2209 , - 652 , - 5147 , - 4302 , - 3813 , - 3680 , - 3903 , - 4482 , - 5417 , - 1012 , - 2659 , - 4662 , - 1325 , - 4040 , - 1415 , - 4842 , - 2929 , - 1372 , - 171 , - 5022 , - 4533 , - 4400 , - 4623 , - 5202 , - 441 , - 1732 , - 3379 , - 5382 , - 2045 , - 4760 , - 2135 , - 5562 , - 3649 , - 2092 , - 891 , - 46 , - 5253 , - 5120 , - 5343 , - 226 , - 1161 , - 2452 , - 4099 , - 406 , - 2765 , - 5480 , - 2855 , - 586 , - 4369 , - 2812 , - 1611 , - 766 , - 277 , - 144 , - 367 , - 946 , - 1881 , - 3172 , - 4819 , - 1126 , - 3485 , - 504 , - 3575 , - 1306 , - 5089 , - 3532 , - 2331 , - 1486 , - 997 , - 864 , - 1087 , - 1666 , - 2601 , - 3892 , - 5539 , - 1846 , - 4205 , - 1224 , - 4295 , - 2026 , - 113 , - 4252 , - 3051 , - 2206 , - 1717 , - 1584 , - 1807 , - 2386 , - 3321 , - 4612 , - 563 , - 2566 , - 4925 , - 1944 , - 5015 , - 2746 , - 833 , - 4972 , - 3771 , - 2926 , - 2437 , - 2304 , - 2527 , - 3106 , - 4041 , - 5332 , - 1283 , - 3286 , - 5645 , - 2664 , - 39 , - 3466 , - 1553 , - 5692 , - 4491 , - 3646 , - 3157 , - 3024 , - 3247 , - 3826 , - 4761 , - 356 , - 2003 , - 4006 , - 669 , - 3384 , - 759 , - 4186 , - 2273 , - 716 , - 5211 , - 4366 , - 3877 , - 3744 , - 3967 , - 4546 , - 5481 , - 1076 , - 2723 , - 4726 , - 1389 , - 4104 , - 1479 , - 4906 , - 2993 , - 1436 , - 235 , - 5086 , - 4597 , - 4464 , - 4687 , - 5266 , - 505 , - 1796 , - 3443 , - 5446 , - 2109 , - 4824 , - 2199 , - 5626 , - 3713 , - 2156 , - 955 , - 110 , - 5317 , - 5184 , - 5407 , - 290 , - 1225 , - 2516 , - 4163 , - 470 , - 2829 , - 5544 , - 2919 , - 650 , - 4433 , - 2876 , - 1675 , - 830 , - 341 , - 208 , - 431 , - 1010 , - 1945 , - 3236 , - 4883 , - 1190 , - 3549 , - 568 , - 3639 , - 1370 , - 5153 , - 3596 , - 2395 , - 1550 , - 1061 , - 928 , - 1151 , - 1730 , - 2665 , - 3956 , - 5603 , - 1910 , - 4269 , - 1288 , - 4359 , - 2090 , - 177 , - 4316 , - 3115 , - 2270 , - 1781 , - 1648 , - 1871 , - 2450 , - 3385 , - 4676 , - 627 , - 2630 , - 4989 , - 2008 , - 5079 , - 2810 , - 897 , - 5036 , - 3835 , - 2990 , - 2501 , - 2368 , - 2591 , - 3170 , - 4105 , - 5396 , - 1347 , - 3350 , - 13 , - 2728 , - 103 , - 3530 , - 1617 , - 60 , - 4555 , - 3710 , - 3221 , - 3088 , - 3311 , - 3890 , - 4825 , - 420 , - 2067 , - 4070 , - 733 , - 3448 , - 823 , - 4250 , - 2337 , - 780 , - 5275 , - 4430 , - 3941 , - 3808 , - 4031 , - 4610 , - 5545 , - 1140 , - 2787 , - 4790 , - 1453 , - 4168 , - 1543 , - 4970 , - 3057 , - 1500 , - 299 , - 5150 , - 4661 , - 4528 , - 4751 , - 5330 , - 569 , - 1860 , - 3507 , - 5510 , - 2173 , - 4888 , - 2263 , - 5690 , - 3777 , - 2220 , - 1019 , - 174 , - 5381 , - 5248 , - 5471 , - 354 , - 1289 , - 2580 , - 4227 , - 534 , - 2893 , - 5608 , - 2983 , - 714 , - 4497 , - 2940 , - 1739 , - 894 , - 405 , - 272 , - 495 , - 1074 , - 2009 , - 3300 , - 4947 , - 1254 , - 3613 , - 632 , - 3703 , - 1434 , - 5217 , - 3660 , - 2459 , - 1614 , - 1125 , - 992 , - 1215 , - 1794 , - 2729 , - 4020 , - 5667 , - 1974 , - 4333 , - 1352 , - 4423 , - 2154 , - 241 , - 4380 , - 3179 , - 2334 , - 1845 , - 1712 , - 1935 , - 2514 , - 3449 , - 4740 , - 691 , - 2694 , - 5053 , - 2072 , - 5143 , - 2874 , - 961 , - 5100 , - 3899 , - 3054 , - 2565 , - 2432 , - 2655 , - 3234 , - 4169 , - 5460 , - 1411 , - 3414 , - 77 , - 2792 , - 167 , - 3594 , - 1681 , - 124 , - 4619 , - 3774 , - 3285 , - 3152 , - 3375 , - 3954 , - 4889 , - 484 , - 2131 , - 4134 , - 797 , - 3512 , - 887 , - 4314 , - 2401 , - 844 , - 5339 , - 4494 , - 4005 , - 3872 , - 4095 , - 4674 , - 5609 , - 1204 , - 2851 , - 4854 , - 1517 , - 4232 , - 1607 , - 5034 , - 3121 , - 1564 , - 363 , - 5214 , - 4725 , - 4592 , - 4815 , - 5394 , - 633 , - 1924 , - 3571 , - 5574 , - 2237 , - 4952 , - 2327 , - 58 , - 3841 , - 2284 , - 1083 , - 238 , - 5445 , - 5312 , - 5535 , - 418 , - 1353 , - 2644 , - 4291 , - 598 , - 2957 , - 5672 , - 3047 , - 778 , - 4561 , - 3004 , - 1803 , - 958 , - 469 , - 336 , - 559 , - 1138 , - 2073 , - 3364 , - 5011 , - 1318 , - 3677 , - 696 , - 3767 , - 1498 , - 5281 , - 3724 , - 2523 , - 1678 , - 1189 , - 1056 , - 1279 , - 1858 , - 2793 , - 4084 , - 35 , - 2038 , - 4397 , - 1416 , - 4487 , - 2218 , - 305 , - 4444 , - 3243 , - 2398 , - 1909 , - 1776 , - 1999 , - 2578 , - 3513 , - 4804 , - 755 , - 2758 , - 5117 , - 2136 , - 5207 , - 2938 , - 1025 , - 5164 , - 3963 , - 3118 , - 2629 , - 2496 , - 2719 , - 3298 , - 4233 , - 5524 , - 1475 , - 3478 , - 141 , - 2856 , - 231 , - 3658 , - 1745 , - 188 , - 4683 , - 3838 , - 3349 , - 3216 , - 3439 , - 4018 , - 4953 , - 548 , - 2195 , - 4198 , - 861 , - 3576 , - 951 , - 4378 , - 2465 , - 908 , - 5403 , - 4558 , - 4069 , - 3936 , - 4159 , - 4738 , - 5673 , - 1268 , - 2915 , - 4918 , - 1581 , - 4296 , - 1671 , - 5098 , - 3185 , - 1628 , - 427 , - 5278 , - 4789 , - 4656 , - 4879 , - 5458 , - 697 , - 1988 , - 3635 , - 5638 , - 2301 , - 5016 , - 2391 , - 122 , - 3905 , - 2348 , - 1147 , - 302 , - 5509 , - 5376 , - 5599 , - 482 , - 1417 , - 2708 , - 4355 , - 662 , - 3021 , - 40 , - 3111 , - 842 , - 4625 , - 3068 , - 1867 , - 1022 , - 533 , - 400 , - 623 , - 1202 , - 2137 , - 3428 , - 5075 , - 1382 , - 3741 , - 760 , - 3831 , - 1562 , - 5345 , - 3788 , - 2587 , - 1742 , - 1253 , - 1120 , - 1343 , - 1922 , - 2857 , - 4148 , - 99 , - 2102 , - 4461 , - 1480 , - 4551 , - 2282 , - 369 , - 4508 , - 3307 , - 2462 , - 1973 , - 1840 , - 2063 , - 2642 , - 3577 , - 4868 , - 819 , - 2822 , - 5181 , - 2200 , - 5271 , - 3002 , - 1089 , - 5228 , - 4027 , - 3182 , - 2693 , - 2560 , - 2783 , - 3362 , - 4297 , - 5588 , - 1539 , - 3542 , - 205 , - 2920 , - 295 , - 3722 , - 1809 , - 252 , - 4747 , - 3902 , - 3413 , - 3280 , - 3503 , - 4082 , - 5017 , - 612 , - 2259 , - 4262 , - 925 , - 3640 , - 1015 , - 4442 , - 2529 , - 972 , - 5467 , - 4622 , - 4133 , - 4000 , - 4223 , - 4802 , - 41 , - 1332 , - 2979 , - 4982 , - 1645 , - 4360 , - 1735 , - 5162 , - 3249 , - 1692 , - 491 , - 5342 , - 4853 , - 4720 , - 4943 , - 5522 , - 761 , - 2052 , - 3699 , - 6 , - 2365 , - 5080 , - 2455 , - 186 , - 3969 , - 2412 , - 1211 , - 366 , - 5573 , - 5440 , - 5663 , - 546 , - 1481 , - 2772 , - 4419 , - 726 , - 3085 , - 104 , - 3175 , - 906 , - 4689 , - 3132 , - 1931 , - 1086 , - 597 , - 464 , - 687 , - 1266 , - 2201 , - 3492 , - 5139 , - 1446 , - 3805 , - 824 , - 3895 , - 1626 , - 5409 , - 3852 , - 2651 , - 1806 , - 1317 , - 1184 , - 1407 , - 1986 , - 2921 , - 4212 , - 163 , - 2166 , - 4525 , - 1544 , - 4615 , - 2346 , - 433 , - 4572 , - 3371 , - 2526 , - 2037 , - 1904 , - 2127 , - 2706 , - 3641 , - 4932 , - 883 , - 2886 , - 5245 , - 2264 , - 5335 , - 3066 , - 1153 , - 5292 , - 4091 , - 3246 , - 2757 , - 2624 , - 2847 , - 3426 , - 4361 , - 5652 , - 1603 , - 3606 , - 269 , - 2984 , - 359 , - 3786 , - 1873 , - 316 , - 4811 , - 3966 , - 3477 , - 3344 , - 3567 , - 4146 , - 5081 , - 676 , - 2323 , - 4326 , - 989 , - 3704 , - 1079 , - 4506 , - 2593 , - 1036 , - 5531 , - 4686 , - 4197 , - 4064 , - 4287 , - 4866 , - 105 , - 1396 , - 3043 , - 5046 , - 1709 , - 4424 , - 1799 , - 5226 , - 3313 , - 1756 , - 555 , - 5406 , - 4917 , - 4784 , - 5007 , - 5586 , - 825 , - 2116 , - 3763 , - 70 , - 2429 , - 5144 , - 2519 , - 250 , - 4033 , - 2476 , - 1275 , - 430 , - 5637 , - 5504 , - 31 , - 610 , - 1545 , - 2836 , - 4483 , - 790 , - 3149 , - 168 , - 3239 , - 970 , - 4753 , - 3196 , - 1995 , - 1150 , - 661 , - 528 , - 751 , - 1330 , - 2265 , - 3556 , - 5203 , - 1510 , - 3869 , - 888 , - 3959 , - 1690 , - 5473 , - 3916 , - 2715 , - 1870 , - 1381 , - 1248 , - 1471 , - 2050 , - 2985 , - 4276 , - 227 , - 2230 , - 4589 , - 1608 , - 4679 , - 2410 , - 497 , - 4636 , - 3435 , - 2590 , - 2101 , - 1968 , - 2191 , - 2770 , - 3705 , - 4996 , - 947 , - 2950 , - 5309 , - 2328 , - 5399 , - 3130 , - 1217 , - 5356 , - 4155 , - 3310 , - 2821 , - 2688 , - 2911 , - 3490 , - 4425 , - 20 , - 1667 , - 3670 , - 333 , - 3048 , - 423 , - 3850 , - 1937 , - 380 , - 4875 , - 4030 , - 3541 , - 3408 , - 3631 , - 4210 , - 5145 , - 740 , - 2387 , - 4390 , - 1053 , - 3768 , - 1143 , - 4570 , - 2657 , - 1100 , - 5595 , - 4750 , - 4261 , - 4128 , - 4351 , - 4930 , - 169 , - 1460 , - 3107 , - 5110 , - 1773 , - 4488 , - 1863 , - 5290 , - 3377 , - 1820 , - 619 , - 5470 , - 4981 , - 4848 , - 5071 , - 5650 , - 889 , - 2180 , - 3827 , - 134 , - 2493 , - 5208 , - 2583 , - 314 , - 4097 , - 2540 , - 1339 , - 494 , - 5 , - 5568 , - 95 , - 674 , - 1609 , - 2900 , - 4547 , - 854 , - 3213 , - 232 , - 3303 , - 1034 , - 4817 , - 3260 , - 2059 , - 1214 , - 725 , - 592 , - 815 , - 1394 , - 2329 , - 3620 , - 5267 , - 1574 , - 3933 , - 952 , - 4023 , - 1754 , - 5537 , - 3980 , - 2779 , - 1934 , - 1445 , - 1312 , - 1535 , - 2114 , - 3049 , - 4340 , - 291 , - 2294 , - 4653 , - 1672 , - 4743 , - 2474 , - 561 , - 4700 , - 3499 , - 2654 , - 2165 , - 2032 , - 2255 , - 2834 , - 3769 , - 5060 , - 1011 , - 3014 , - 5373 , - 2392 , - 5463 , - 3194 , - 1281 , - 5420 , - 4219 , - 3374 , - 2885 , - 2752 , - 2975 , - 3554 , - 4489 , - 84 , - 1731 , - 3734 , - 397 , - 3112 , - 487 , - 3914 , - 2001 , - 444 , - 4939 , - 4094 , - 3605 , - 3472 , - 3695 , - 4274 , - 5209 , - 804 , - 2451 , - 4454 , - 1117 , - 3832 , - 1207 , - 4634 , - 2721 , - 1164 , - 5659 , - 4814 , - 4325 , - 4192 , - 4415 , - 4994 , - 233 , - 1524 , - 3171 , - 5174 , - 1837 , - 4552 , - 1927 , - 5354 , - 3441 , - 1884 , - 683 , - 5534 , - 5045 , - 4912 , - 5135 , - 18 , - 953 , - 2244 , - 3891 , - 198 , - 2557 , - 5272 , - 2647 , - 378 , - 4161 , - 2604 , - 1403 , - 558 , - 69 , - 5632 , - 159 , - 738 , - 1673 , - 2964 , - 4611 , - 918 , - 3277 , - 296 , - 3367 , - 1098 , - 4881 , - 3324 , - 2123 , - 1278 , - 789 , - 656 , - 879 , - 1458 , - 2393 , - 3684 , - 5331 , - 1638 , - 3997 , - 1016 , - 4087 , - 1818 , - 5601 , - 4044 , - 2843 , - 1998 , - 1509 , - 1376 , - 1599 , - 2178 , - 3113 , - 4404 , - 355 , - 2358 , - 4717 , - 1736 , - 4807 , - 2538 , - 625 , - 4764 , - 3563 , - 2718 , - 2229 , - 2096 , - 2319 , - 2898 , - 3833 , - 5124 , - 1075 , - 3078 , - 5437 , - 2456 , - 5527 , - 3258 , - 1345 , - 5484 , - 4283 , - 3438 , - 2949 , - 2816 , - 3039 , - 3618 , - 4553 , - 148 , - 1795 , - 3798 , - 461 , - 3176 , - 551 , - 3978 , - 2065 , - 508 , - 5003 , - 4158 , - 3669 , - 3536 , - 3759 , - 4338 , - 5273 , - 868 , - 2515 , - 4518 , - 1181 , - 3896 , - 1271 , - 4698 , - 2785 , - 1228 , - 27 , - 4878 , - 4389 , - 4256 , - 4479 , - 5058 , - 297 , - 1588 , - 3235 , - 5238 , - 1901 , - 4616 , - 1991 , - 5418 , - 3505 , - 1948 , - 747 , - 5598 , - 5109 , - 4976 , - 5199 , - 82 , - 1017 , - 2308 , - 3955 , - 262 , - 2621 , - 5336 , - 2711 , - 442 , - 4225 , - 2668 , - 1467 , - 622 , - 133 , - 0 , - 281 , - 802 , - 1563 , - 2564 , - 3805 , - 5286 , - 1247 , - 3208 , - 5409 , - 2090 , - 4771 , - 1932 , - 5093 , - 2734 , - 615 , - 4496 , - 2857 , - 1458 , - 299 , - 5140 , - 4461 , - 4022 , - 3823 , - 3864 , - 4145 , - 4666 , - 5427 , - 668 , - 1909 , - 3390 , - 5111 , - 1312 , - 3513 , - 194 , - 2875 , - 36 , - 3197 , - 838 , - 4479 , - 2600 , - 961 , - 5322 , - 4163 , - 3244 , - 2565 , - 2126 , - 1927 , - 1968 , - 2249 , - 2770 , - 3531 , - 4532 , - 13 , - 1494 , - 3215 , - 5176 , - 1617 , - 4058 , - 979 , - 3900 , - 1301 , - 4702 , - 2583 , - 704 , - 4825 , - 3426 , - 2267 , - 1348 , - 669 , - 230 , - 31 , - 72 , - 353 , - 874 , - 1635 , - 2636 , - 3877 , - 5358 , - 1319 , - 3280 , - 5481 , - 2162 , - 4843 , - 2004 , - 5165 , - 2806 , - 687 , - 4568 , - 2929 , - 1530 , - 371 , - 5212 , - 4533 , - 4094 , - 3895 , - 3936 , - 4217 , - 4738 , - 5499 , - 740 , - 1981 , - 3462 , - 5183 , - 1384 , - 3585 , - 266 , - 2947 , - 108 , - 3269 , - 910 , - 4551 , - 2672 , - 1033 , - 5394 , - 4235 , - 3316 , - 2637 , - 2198 , - 1999 , - 2040 , - 2321 , - 2842 , - 3603 , - 4604 , - 85 , - 1566 , - 3287 , - 5248 , - 1689 , - 4130 , - 1051 , - 3972 , - 1373 , - 4774 , - 2655 , - 776 , - 4897 , - 3498 , - 2339 , - 1420 , - 741 , - 302 , - 103 , - 144 , - 425 , - 946 , - 1707 , - 2708 , - 3949 , - 5430 , - 1391 , - 3352 , - 5553 , - 2234 , - 4915 , - 2076 , - 5237 , - 2878 , - 759 , - 4640 , - 3001 , - 1602 , - 443 , - 5284 , - 4605 , - 4166 , - 3967 , - 4008 , - 4289 , - 4810 , - 5571 , - 812 , - 2053 , - 3534 , - 5255 , - 1456 , - 3657 , - 338 , - 3019 , - 180 , - 3341 , - 982 , - 4623 , - 2744 , - 1105 , - 5466 , - 4307 , - 3388 , - 2709 , - 2270 , - 2071 , - 2112 , - 2393 , - 2914 , - 3675 , - 4676 , - 157 , - 1638 , - 3359 , - 5320 , - 1761 , - 4202 , - 1123 , - 4044 , - 1445 , - 4846 , - 2727 , - 848 , - 4969 , - 3570 , - 2411 , - 1492 , - 813 , - 374 , - 175 , - 216 , - 497 , - 1018 , - 1779 , - 2780 , - 4021 , - 5502 , - 1463 , - 3424 , - 5625 , - 2306 , - 4987 , - 2148 , - 5309 , - 2950 , - 831 , - 4712 , - 3073 , - 1674 , - 515 , - 5356 , - 4677 , - 4238 , - 4039 , - 4080 , - 4361 , - 4882 , - 5643 , - 884 , - 2125 , - 3606 , - 5327 , - 1528 , - 3729 , - 410 , - 3091 , - 252 , - 3413 , - 1054 , - 4695 , - 2816 , - 1177 , - 5538 , - 4379 , - 3460 , - 2781 , - 2342 , - 2143 , - 2184 , - 2465 , - 2986 , - 3747 , - 4748 , - 229 , - 1710 , - 3431 , - 5392 , - 1833 , - 4274 , - 1195 , - 4116 , - 1517 , - 4918 , - 2799 , - 920 , - 5041 , - 3642 , - 2483 , - 1564 , - 885 , - 446 , - 247 , - 288 , - 569 , - 1090 , - 1851 , - 2852 , - 4093 , - 5574 , - 1535 , - 3496 , - 5697 , - 2378 , - 5059 , - 2220 , - 5381 , - 3022 , - 903 , - 4784 , - 3145 , - 1746 , - 587 , - 5428 , - 4749 , - 4310 , - 4111 , - 4152 , - 4433 , - 4954 , - 5715 , - 956 , - 2197 , - 3678 , - 5399 , - 1600 , - 3801 , - 482 , - 3163 , - 324 , - 3485 , - 1126 , - 4767 , - 2888 , - 1249 , - 5610 , - 4451 , - 3532 , - 2853 , - 2414 , - 2215 , - 2256 , - 2537 , - 3058 , - 3819 , - 4820 , - 301 , - 1782 , - 3503 , - 5464 , - 1905 , - 4346 , - 1267 , - 4188 , - 1589 , - 4990 , - 2871 , - 992 , - 5113 , - 3714 , - 2555 , - 1636 , - 957 , - 518 , - 319 , - 360 , - 641 , - 1162 , - 1923 , - 2924 , - 4165 , - 5646 , - 1607 , - 3568 , - 9 , - 2450 , - 5131 , - 2292 , - 5453 , - 3094 , - 975 , - 4856 , - 3217 , - 1818 , - 659 , - 5500 , - 4821 , - 4382 , - 4183 , - 4224 , - 4505 , - 5026 , - 27 , - 1028 , - 2269 , - 3750 , - 5471 , - 1672 , - 3873 , - 554 , - 3235 , - 396 , - 3557 , - 1198 , - 4839 , - 2960 , - 1321 , - 5682 , - 4523 , - 3604 , - 2925 , - 2486 , - 2287 , - 2328 , - 2609 , - 3130 , - 3891 , - 4892 , - 373 , - 1854 , - 3575 , - 5536 , - 1977 , - 4418 , - 1339 , - 4260 , - 1661 , - 5062 , - 2943 , - 1064 , - 5185 , - 3786 , - 2627 , - 1708 , - 1029 , - 590 , - 391 , - 432 , - 713 , - 1234 , - 1995 , - 2996 , - 4237 , - 5718 , - 1679 , - 3640 , - 81 , - 2522 , - 5203 , - 2364 , - 5525 , - 3166 , - 1047 , - 4928 , - 3289 , - 1890 , - 731 , - 5572 , - 4893 , - 4454 , - 4255 , - 4296 , - 4577 , - 5098 , - 99 , - 1100 , - 2341 , - 3822 , - 5543 , - 1744 , - 3945 , - 626 , - 3307 , - 468 , - 3629 , - 1270 , - 4911 , - 3032 , - 1393 , - 5754 , - 4595 , - 3676 , - 2997 , - 2558 , - 2359 , - 2400 , - 2681 , - 3202 , - 3963 , - 4964 , - 445 , - 1926 , - 3647 , - 5608 , - 2049 , - 4490 , - 1411 , - 4332 , - 1733 , - 5134 , - 3015 , - 1136 , - 5257 , - 3858 , - 2699 , - 1780 , - 1101 , - 662 , - 463 , - 504 , - 785 , - 1306 , - 2067 , - 3068 , - 4309 , - 30 , - 1751 , - 3712 , - 153 , - 2594 , - 5275 , - 2436 , - 5597 , - 3238 , - 1119 , - 5000 , - 3361 , - 1962 , - 803 , - 5644 , - 4965 , - 4526 , - 4327 , - 4368 , - 4649 , - 5170 , - 171 , - 1172 , - 2413 , - 3894 , - 5615 , - 1816 , - 4017 , - 698 , - 3379 , - 540 , - 3701 , - 1342 , - 4983 , - 3104 , - 1465 , - 66 , - 4667 , - 3748 , - 3069 , - 2630 , - 2431 , - 2472 , - 2753 , - 3274 , - 4035 , - 5036 , - 517 , - 1998 , - 3719 , - 5680 , - 2121 , - 4562 , - 1483 , - 4404 , - 1805 , - 5206 , - 3087 , - 1208 , - 5329 , - 3930 , - 2771 , - 1852 , - 1173 , - 734 , - 535 , - 576 , - 857 , - 1378 , - 2139 , - 3140 , - 4381 , - 102 , - 1823 , - 3784 , - 225 , - 2666 , - 5347 , - 2508 , - 5669 , - 3310 , - 1191 , - 5072 , - 3433 , - 2034 , - 875 , - 5716 , - 5037 , - 4598 , - 4399 , - 4440 , - 4721 , - 5242 , - 243 , - 1244 , - 2485 , - 3966 , - 5687 , - 1888 , - 4089 , - 770 , - 3451 , - 612 , - 3773 , - 1414 , - 5055 , - 3176 , - 1537 , - 138 , - 4739 , - 3820 , - 3141 , - 2702 , - 2503 , - 2544 , - 2825 , - 3346 , - 4107 , - 5108 , - 589 , - 2070 , - 3791 , - 5752 , - 2193 , - 4634 , - 1555 , - 4476 , - 1877 , - 5278 , - 3159 , - 1280 , - 5401 , - 4002 , - 2843 , - 1924 , - 1245 , - 806 , - 607 , - 648 , - 929 , - 1450 , - 2211 , - 3212 , - 4453 , - 174 , - 1895 , - 3856 , - 297 , - 2738 , - 5419 , - 2580 , - 5741 , - 3382 , - 1263 , - 5144 , - 3505 , - 2106 , - 947 , - 28 , - 5109 , - 4670 , - 4471 , - 4512 , - 4793 , - 5314 , - 315 , - 1316 , - 2557 , - 4038 , - 5759 , - 1960 , - 4161 , - 842 , - 3523 , - 684 , - 3845 , - 1486 , - 5127 , - 3248 , - 1609 , - 210 , - 4811 , - 3892 , - 3213 , - 2774 , - 2575 , - 2616 , - 2897 , - 3418 , - 4179 , - 5180 , - 661 , - 2142 , - 3863 , - 64 , - 2265 , - 4706 , - 1627 , - 4548 , - 1949 , - 5350 , - 3231 , - 1352 , - 5473 , - 4074 , - 2915 , - 1996 , - 1317 , - 878 , - 679 , - 720 , - 1001 , - 1522 , - 2283 , - 3284 , - 4525 , - 246 , - 1967 , - 3928 , - 369 , - 2810 , - 5491 , - 2652 , - 53 , - 3454 , - 1335 , - 5216 , - 3577 , - 2178 , - 1019 , - 100 , - 5181 , - 4742 , - 4543 , - 4584 , - 4865 , - 5386 , - 387 , - 1388 , - 2629 , - 4110 , - 71 , - 2032 , - 4233 , - 914 , - 3595 , - 756 , - 3917 , - 1558 , - 5199 , - 3320 , - 1681 , - 282 , - 4883 , - 3964 , - 3285 , - 2846 , - 2647 , - 2688 , - 2969 , - 3490 , - 4251 , - 5252 , - 733 , - 2214 , - 3935 , - 136 , - 2337 , - 4778 , - 1699 , - 4620 , - 2021 , - 5422 , - 3303 , - 1424 , - 5545 , - 4146 , - 2987 , - 2068 , - 1389 , - 950 , - 751 , - 792 , - 1073 , - 1594 , - 2355 , - 3356 , - 4597 , - 318 , - 2039 , - 4000 , - 441 , - 2882 , - 5563 , - 2724 , - 125 , - 3526 , - 1407 , - 5288 , - 3649 , - 2250 , - 1091 , - 172 , - 5253 , - 4814 , - 4615 , - 4656 , - 4937 , - 5458 , - 459 , - 1460 , - 2701 , - 4182 , - 143 , - 2104 , - 4305 , - 986 , - 3667 , - 828 , - 3989 , - 1630 , - 5271 , - 3392 , - 1753 , - 354 , - 4955 , - 4036 , - 3357 , - 2918 , - 2719 , - 2760 , - 3041 , - 3562 , - 4323 , - 5324 , - 805 , - 2286 , - 4007 , - 208 , - 2409 , - 4850 , - 1771 , - 4692 , - 2093 , - 5494 , - 3375 , - 1496 , - 5617 , - 4218 , - 3059 , - 2140 , - 1461 , - 1022 , - 823 , - 864 , - 1145 , - 1666 , - 2427 , - 3428 , - 4669 , - 390 , - 2111 , - 4072 , - 513 , - 2954 , - 5635 , - 2796 , - 197 , - 3598 , - 1479 , - 5360 , - 3721 , - 2322 , - 1163 , - 244 , - 5325 , - 4886 , - 4687 , - 4728 , - 5009 , - 5530 , - 531 , - 1532 , - 2773 , - 4254 , - 215 , - 2176 , - 4377 , - 1058 , - 3739 , - 900 , - 4061 , - 1702 , - 5343 , - 3464 , - 1825 , - 426 , - 5027 , - 4108 , - 3429 , - 2990 , - 2791 , - 2832 , - 3113 , - 3634 , - 4395 , - 5396 , - 877 , - 2358 , - 4079 , - 280 , - 2481 , - 4922 , - 1843 , - 4764 , - 2165 , - 5566 , - 3447 , - 1568 , - 5689 , - 4290 , - 3131 , - 2212 , - 1533 , - 1094 , - 895 , - 936 , - 1217 , - 1738 , - 2499 , - 3500 , - 4741 , - 462 , - 2183 , - 4144 , - 585 , - 3026 , - 5707 , - 2868 , - 269 , - 3670 , - 1551 , - 5432 , - 3793 , - 2394 , - 1235 , - 316 , - 5397 , - 4958 , - 4759 , - 4800 , - 5081 , - 5602 , - 603 , - 1604 , - 2845 , - 4326 , - 287 , - 2248 , - 4449 , - 1130 , - 3811 , - 972 , - 4133 , - 1774 , - 5415 , - 3536 , - 1897 , - 498 , - 5099 , - 4180 , - 3501 , - 3062 , - 2863 , - 2904 , - 3185 , - 3706 , - 4467 , - 5468 , - 949 , - 2430 , - 4151 , - 352 , - 2553 , - 4994 , - 1915 , - 4836 , - 2237 , - 5638 , - 3519 , - 1640 , - 1 , - 4362 , - 3203 , - 2284 , - 1605 , - 1166 , - 967 , - 1008 , - 1289 , - 1810 , - 2571 , - 3572 , - 4813 , - 534 , - 2255 , - 4216 , - 657 , - 3098 , - 19 , - 2940 , - 341 , - 3742 , - 1623 , - 5504 , - 3865 , - 2466 , - 1307 , - 388 , - 5469 , - 5030 , - 4831 , - 4872 , - 5153 , - 5674 , - 675 , - 1676 , - 2917 , - 4398 , - 359 , - 2320 , - 4521 , - 1202 , - 3883 , - 1044 , - 4205 , - 1846 , - 5487 , - 3608 , - 1969 , - 570 , - 5171 , - 4252 , - 3573 , - 3134 , - 2935 , - 2976 , - 3257 , - 3778 , - 4539 , - 5540 , - 1021 , - 2502 , - 4223 , - 424 , - 2625 , - 5066 , - 1987 , - 4908 , - 2309 , - 5710 , - 3591 , - 1712 , - 73 , - 4434 , - 3275 , - 2356 , - 1677 , - 1238 , - 1039 , - 1080 , - 1361 , - 1882 , - 2643 , - 3644 , - 4885 , - 606 , - 2327 , - 4288 , - 729 , - 3170 , - 91 , - 3012 , - 413 , - 3814 , - 1695 , - 5576 , - 3937 , - 2538 , - 1379 , - 460 , - 5541 , - 5102 , - 4903 , - 4944 , - 5225 , - 5746 , - 747 , - 1748 , - 2989 , - 4470 , - 431 , - 2392 , - 4593 , - 1274 , - 3955 , - 1116 , - 4277 , - 1918 , - 5559 , - 3680 , - 2041 , - 642 , - 5243 , - 4324 , - 3645 , - 3206 , - 3007 , - 3048 , - 3329 , - 3850 , - 4611 , - 5612 , - 1093 , - 2574 , - 4295 , - 496 , - 2697 , - 5138 , - 2059 , - 4980 , - 2381 , - 22 , - 3663 , - 1784 , - 145 , - 4506 , - 3347 , - 2428 , - 1749 , - 1310 , - 1111 , - 1152 , - 1433 , - 1954 , - 2715 , - 3716 , - 4957 , - 678 , - 2399 , - 4360 , - 801 , - 3242 , - 163 , - 3084 , - 485 , - 3886 , - 1767 , - 5648 , - 4009 , - 2610 , - 1451 , - 532 , - 5613 , - 5174 , - 4975 , - 5016 , - 5297 , - 58 , - 819 , - 1820 , - 3061 , - 4542 , - 503 , - 2464 , - 4665 , - 1346 , - 4027 , - 1188 , - 4349 , - 1990 , - 5631 , - 3752 , - 2113 , - 714 , - 5315 , - 4396 , - 3717 , - 3278 , - 3079 , - 3120 , - 3401 , - 3922 , - 4683 , - 5684 , - 1165 , - 2646 , - 4367 , - 568 , - 2769 , - 5210 , - 2131 , - 5052 , - 2453 , - 94 , - 3735 , - 1856 , - 217 , - 4578 , - 3419 , - 2500 , - 1821 , - 1382 , - 1183 , - 1224 , - 1505 , - 2026 , - 2787 , - 3788 , - 5029 , - 750 , - 2471 , - 4432 , - 873 , - 3314 , - 235 , - 3156 , - 557 , - 3958 , - 1839 , - 5720 , - 4081 , - 2682 , - 1523 , - 604 , - 5685 , - 5246 , - 5047 , - 5088 , - 5369 , - 130 , - 891 , - 1892 , - 3133 , - 4614 , - 575 , - 2536 , - 4737 , - 1418 , - 4099 , - 1260 , - 4421 , - 2062 , - 5703 , - 3824 , - 2185 , - 786 , - 5387 , - 4468 , - 3789 , - 3350 , - 3151 , - 3192 , - 3473 , - 3994 , - 4755 , - 5756 , - 1237 , - 2718 , - 4439 , - 640 , - 2841 , - 5282 , - 2203 , - 5124 , - 2525 , - 166 , - 3807 , - 1928 , - 289 , - 4650 , - 3491 , - 2572 , - 1893 , - 1454 , - 1255 , - 1296 , - 1577 , - 2098 , - 2859 , - 3860 , - 5101 , - 822 , - 2543 , - 4504 , - 945 , - 3386 , - 307 , - 3228 , - 629 , - 4030 , - 1911 , - 32 , - 4153 , - 2754 , - 1595 , - 676 , - 5757 , - 5318 , - 5119 , - 5160 , - 5441 , - 202 , - 963 , - 1964 , - 3205 , - 4686 , - 647 , - 2608 , - 4809 , - 1490 , - 4171 , - 1332 , - 4493 , - 2134 , - 15 , - 3896 , - 2257 , - 858 , - 5459 , - 4540 , - 3861 , - 3422 , - 3223 , - 3264 , - 3545 , - 4066 , - 4827 , - 68 , - 1309 , - 2790 , - 4511 , - 712 , - 2913 , - 5354 , - 2275 , - 5196 , - 2597 , - 238 , - 3879 , - 2000 , - 361 , - 4722 , - 3563 , - 2644 , - 1965 , - 1526 , - 1327 , - 1368 , - 1649 , - 2170 , - 2931 , - 3932 , - 5173 , - 894 , - 2615 , - 4576 , - 1017 , - 3458 , - 379 , - 3300 , - 701 , - 4102 , - 1983 , - 104 , - 4225 , - 2826 , - 1667 , - 748 , - 69 , - 5390 , - 5191 , - 5232 , - 5513 , - 274 , - 1035 , - 2036 , - 3277 , - 4758 , - 719 , - 2680 , - 4881 , - 1562 , - 4243 , - 1404 , - 4565 , - 2206 , - 87 , - 3968 , - 2329 , - 930 , - 5531 , - 4612 , - 3933 , - 3494 , - 3295 , - 3336 , - 3617 , - 4138 , - 4899 , - 140 , - 1381 , - 2862 , - 4583 , - 784 , - 2985 , - 5426 , - 2347 , - 5268 , - 2669 , - 310 , - 3951 , - 2072 , - 433 , - 4794 , - 3635 , - 2716 , - 2037 , - 1598 , - 1399 , - 1440 , - 1721 , - 2242 , - 3003 , - 4004 , - 5245 , - 966 , - 2687 , - 4648 , - 1089 , - 3530 , - 451 , - 3372 , - 773 , - 4174 , - 2055 , - 176 , - 4297 , - 2898 , - 1739 , - 820 , - 141 , - 5462 , - 5263 , - 5304 , - 5585 , - 346 , - 1107 , - 2108 , - 3349 , - 4830 , - 791 , - 2752 , - 4953 , - 1634 , - 4315 , - 1476 , - 4637 , - 2278 , - 159 , - 4040 , - 2401 , - 1002 , - 5603 , - 4684 , - 4005 , - 3566 , - 3367 , - 3408 , - 3689 , - 4210 , - 4971 , - 212 , - 1453 , - 2934 , - 4655 , - 856 , - 3057 , - 5498 , - 2419 , - 5340 , - 2741 , - 382 , - 4023 , - 2144 , - 505 , - 4866 , - 3707 , - 2788 , - 2109 , - 1670 , - 1471 , - 1512 , - 1793 , - 2314 , - 3075 , - 4076 , - 5317 , - 1038 , - 2759 , - 4720 , - 1161 , - 3602 , - 523 , - 3444 , - 845 , - 4246 , - 2127 , - 248 , - 4369 , - 2970 , - 1811 , - 892 , - 213 , - 5534 , - 5335 , - 5376 , - 5657 , - 418 , - 1179 , - 2180 , - 3421 , - 4902 , - 863 , - 2824 , - 5025 , - 1706 , - 4387 , - 1548 , - 4709 , - 2350 , - 231 , - 4112 , - 2473 , - 1074 , - 5675 , - 4756 , - 4077 , - 3638 , - 3439 , - 3480 , - 3761 , - 4282 , - 5043 , - 284 , - 1525 , - 3006 , - 4727 , - 928 , - 3129 , - 5570 , - 2491 , - 5412 , - 2813 , - 454 , - 4095 , - 2216 , - 577 , - 4938 , - 3779 , - 2860 , - 2181 , - 1742 , - 1543 , - 1584 , - 1865 , - 2386 , - 3147 , - 4148 , - 5389 , - 1110 , - 2831 , - 4792 , - 1233 , - 3674 , - 595 , - 3516 , - 917 , - 4318 , - 2199 , - 320 , - 4441 , - 3042 , - 1883 , - 964 , - 285 , - 5606 , - 5407 , - 5448 , - 5729 , - 490 , - 1251 , - 2252 , - 3493 , - 4974 , - 935 , - 2896 , - 5097 , - 1778 , - 4459 , - 1620 , - 4781 , - 2422 , - 303 , - 4184 , - 2545 , - 1146 , - 5747 , - 4828 , - 4149 , - 3710 , - 3511 , - 3552 , - 3833 , - 4354 , - 5115 , - 356 , - 1597 , - 3078 , - 4799 , - 1000 , - 3201 , - 5642 , - 2563 , - 5484 , - 2885 , - 526 , - 4167 , - 2288 , - 649 , - 5010 , - 3851 , - 2932 , - 2253 , - 1814 , - 1615 , - 1656 , - 1937 , - 2458 , - 3219 , - 4220 , - 5461 , - 1182 , - 2903 , - 4864 , - 1305 , - 3746 , - 667 , - 3588 , - 989 , - 4390 , - 2271 , - 392 , - 4513 , - 3114 , - 1955 , - 1036 , - 357 , - 5678 , - 5479 , - 5520 , - 41 , - 562 , - 1323 , - 2324 , - 3565 , - 5046 , - 1007 , - 2968 , - 5169 , - 1850 , - 4531 , - 1692 , - 4853 , - 2494 , - 375 , - 4256 , - 2617 , - 1218 , - 59 , - 4900 , - 4221 , - 3782 , - 3583 , - 3624 , - 3905 , - 4426 , - 5187 , - 428 , - 1669 , - 3150 , - 4871 , - 1072 , - 3273 , - 5714 , - 2635 , - 5556 , - 2957 , - 598 , - 4239 , - 2360 , - 721 , - 5082 , - 3923 , - 3004 , - 2325 , - 1886 , - 1687 , - 1728 , - 2009 , - 2530 , - 3291 , - 4292 , - 5533 , - 1254 , - 2975 , - 4936 , - 1377 , - 3818 , - 739 , - 3660 , - 1061 , - 4462 , - 2343 , - 464 , - 4585 , - 3186 , - 2027 , - 1108 , - 429 , - 5750 , - 5551 , - 5592 , - 113 , - 634 , - 1395 , - 2396 , - 3637 , - 5118 , - 1079 , - 3040 , - 5241 , - 1922 , - 4603 , - 1764 , - 4925 , - 2566 , - 447 , - 4328 , - 2689 , - 1290 , - 131 , - 4972 , - 4293 , - 3854 , - 3655 , - 3696 , - 3977 , - 4498 , - 5259 , - 500 , - 1741 , - 3222 , - 4943 , - 1144 , - 3345 , - 26 , - 2707 , - 5628 , - 3029 , - 670 , - 4311 , - 2432 , - 793 , - 5154 , - 3995 , - 3076 , - 2397 , - 1958 , - 1759 , - 1800 , - 2081 , - 2602 , - 3363 , - 4364 , - 5605 , - 1326 , - 3047 , - 5008 , - 1449 , - 3890 , - 811 , - 3732 , - 1133 , - 4534 , - 2415 , - 536 , - 4657 , - 3258 , - 2099 , - 1180 , - 501 , - 62 , - 5623 , - 5664 , - 185 , - 706 , - 1467 , - 2468 , - 3709 , - 5190 , - 1151 , - 3112 , - 5313 , - 1994 , - 4675 , - 1836 , - 4997 , - 2638 , - 519 , - 4400 , - 2761 , - 1362 , - 203 , - 5044 , - 4365 , - 3926 , - 3727 , - 3768 , - 4049 , - 4570 , - 5331 , - 572 , - 1813 , - 3294 , - 5015 , - 1216 , - 3417 , - 98 , - 2779 , - 5700 , - 3101 , - 742 , - 4383 , - 2504 , - 865 , - 5226 , - 4067 , - 3148 , - 2469 , - 2030 , - 1831 , - 1872 , - 2153 , - 2674 , - 3435 , - 4436 , - 5677 , - 1398 , - 3119 , - 5080 , - 1521 , - 3962 , - 883 , - 3804 , - 1205 , - 4606 , - 2487 , - 608 , - 4729 , - 3330 , - 2171 , - 1252 , - 573 , - 134 , - 5695 , - 5736 , - 257 , - 778 , - 1539 , - 2540 , - 3781 , - 5262 , - 1223 , - 3184 , - 5385 , - 2066 , - 4747 , - 1908 , - 5069 , - 2710 , - 591 , - 4472 , - 2833 , - 1434 , - 275 , - 5116 , - 4437 , - 3998 , - 3799 , - 3840 , - 4121 , - 4642 , - 5403 , - 644 , - 1885 , - 3366 , - 5087 , - 1288 , - 3489 , - 170 , - 2851 , - 12 , - 3173 , - 814 , - 4455 , - 2576 , - 937 , - 5298 , - 4139 , - 3220 , - 2541 , - 2102 , - 1903 , - 1944 , - 2225 , - 2746 , - 3507 , - 4508 , - 5749 , - 1470 , - 3191 , - 5152 , - 1593 , - 4034 , - 955 , - 3876 , - 1277 , - 4678 , - 2559 , - 680 , - 4801 , - 3402 , - 2243 , - 1324 , - 645 , - 206 , - 7 , - 48 , - 329 , - 850 , - 1611 , - 2612 , - 3853 , - 5334 , - 1295 , - 3256 , - 5457 , - 2138 , - 4819 , - 1980 , - 5141 , - 2782 , - 663 , - 4544 , - 2905 , - 1506 , - 347 , - 5188 , - 4509 , - 4070 , - 3871 , - 3912 , - 4193 , - 4714 , - 5475 , - 716 , - 1957 , - 3438 , - 5159 , - 1360 , - 3561 , - 242 , - 2923 , - 84 , - 3245 , - 886 , - 4527 , - 2648 , - 1009 , - 5370 , - 4211 , - 3292 , - 2613 , - 2174 , - 1975 , - 2016 , - 2297 , - 2818 , - 3579 , - 4580 , - 61 , - 1542 , - 3263 , - 5224 , - 1665 , - 4106 , - 1027 , - 3948 , - 1349 , - 4750 , - 2631 , - 752 , - 4873 , - 3474 , - 2315 , - 1396 , - 717 , - 278 , - 79 , - 120 , - 401 , - 922 , - 1683 , - 2684 , - 3925 , - 5406 , - 1367 , - 3328 , - 5529 , - 2210 , - 4891 , - 2052 , - 5213 , - 2854 , - 735 , - 4616 , - 2977 , - 1578 , - 419 , - 5260 , - 4581 , - 4142 , - 3943 , - 3984 , - 4265 , - 4786 , - 5547 , - 788 , - 2029 , - 3510 , - 5231 , - 1432 , - 3633 , - 314 , - 2995 , - 156 , - 3317 , - 958 , - 4599 , - 2720 , - 1081 , - 5442 , - 4283 , - 3364 , - 2685 , - 2246 , - 2047 , - 2088 , - 2369 , - 2890 , - 3651 , - 4652 , - 133 , - 1614 , - 3335 , - 5296 , - 1737 , - 4178 , - 1099 , - 4020 , - 1421 , - 4822 , - 2703 , - 824 , - 4945 , - 3546 , - 2387 , - 1468 , - 789 , - 350 , - 151 , - 192 , - 473 , - 994 , - 1755 , - 2756 , - 3997 , - 5478 , - 1439 , - 3400 , - 5601 , - 2282 , - 4963 , - 2124 , - 5285 , - 2926 , - 807 , - 4688 , - 3049 , - 1650 , - 491 , - 5332 , - 4653 , - 4214 , - 4015 , - 4056 , - 4337 , - 4858 , - 5619 , - 860 , - 2101 , - 3582 , - 5303 , - 1504 , - 3705 , - 386 , - 3067 , - 228 , - 3389 , - 1030 , - 4671 , - 2792 , - 1153 , - 5514 , - 4355 , - 3436 , - 2757 , - 2318 , - 2119 , - 2160 , - 2441 , - 2962 , - 3723 , - 4724 , - 205 , - 1686 , - 3407 , - 5368 , - 1809 , - 4250 , - 1171 , - 4092 , - 1493 , - 4894 , - 2775 , - 896 , - 5017 , - 3618 , - 2459 , - 1540 , - 861 , - 422 , - 223 , - 264 , - 545 , - 1066 , - 1827 , - 2828 , - 4069 , - 5550 , - 1511 , - 3472 , - 5673 , - 2354 , - 5035 , - 2196 , - 5357 , - 2998 , - 879 , - 4760 , - 3121 , - 1722 , - 563 , - 5404 , - 4725 , - 4286 , - 4087 , - 4128 , - 4409 , - 4930 , - 5691 , - 932 , - 2173 , - 3654 , - 5375 , - 1576 , - 3777 , - 458 , - 3139 , - 300 , - 3461 , - 1102 , - 4743 , - 2864 , - 1225 , - 5586 , - 4427 , - 3508 , - 2829 , - 2390 , - 2191 , - 2232 , - 2513 , - 3034 , - 3795 , - 4796 , - 277 , - 1758 , - 3479 , - 5440 , - 1881 , - 4322 , - 1243 , - 4164 , - 1565 , - 4966 , - 2847 , - 968 , - 5089 , - 3690 , - 2531 , - 1612 , - 933 , - 494 , - 295 , - 336 , - 617 , - 1138 , - 1899 , - 2900 , - 4141 , - 5622 , - 1583 , - 3544 , - 5745 , - 2426 , - 5107 , - 2268 , - 5429 , - 3070 , - 951 , - 4832 , - 3193 , - 1794 , - 635 , - 5476 , - 4797 , - 4358 , - 4159 , - 4200 , - 4481 , - 5002 , - 3 , - 1004 , - 2245 , - 3726 , - 5447 , - 1648 , - 3849 , - 530 , - 3211 , - 372 , - 3533 , - 1174 , - 4815 , - 2936 , - 1297 , - 5658 , - 4499 , - 3580 , - 2901 , - 2462 , - 2263 , - 2304 , - 2585 , - 3106 , - 3867 , - 4868 , - 349 , - 1830 , - 3551 , - 5512 , - 1953 , - 4394 , - 1315 , - 4236 , - 1637 , - 5038 , - 2919 , - 1040 , - 5161 , - 3762 , - 2603 , - 1684 , - 1005 , - 566 , - 367 , - 408 , - 689 , - 1210 , - 1971 , - 2972 , - 4213 , - 5694 , - 1655 , - 3616 , - 57 , - 2498 , - 5179 , - 2340 , - 5501 , - 3142 , - 1023 , - 4904 , - 3265 , - 1866 , - 707 , - 5548 , - 4869 , - 4430 , - 4231 , - 4272 , - 4553 , - 5074 , - 75 , - 1076 , - 2317 , - 3798 , - 5519 , - 1720 , - 3921 , - 602 , - 3283 , - 444 , - 3605 , - 1246 , - 4887 , - 3008 , - 1369 , - 5730 , - 4571 , - 3652 , - 2973 , - 2534 , - 2335 , - 2376 , - 2657 , - 3178 , - 3939 , - 4940 , - 421 , - 1902 , - 3623 , - 5584 , - 2025 , - 4466 , - 1387 , - 4308 , - 1709 , - 5110 , - 2991 , - 1112 , - 5233 , - 3834 , - 2675 , - 1756 , - 1077 , - 638 , - 439 , - 480 , - 761 , - 1282 , - 2043 , - 3044 , - 4285 , - 6 , - 1727 , - 3688 , - 129 , - 2570 , - 5251 , - 2412 , - 5573 , - 3214 , - 1095 , - 4976 , - 3337 , - 1938 , - 779 , - 5620 , - 4941 , - 4502 , - 4303 , - 4344 , - 4625 , - 5146 , - 147 , - 1148 , - 2389 , - 3870 , - 5591 , - 1792 , - 3993 , - 674 , - 3355 , - 516 , - 3677 , - 1318 , - 4959 , - 3080 , - 1441 , - 42 , - 4643 , - 3724 , - 3045 , - 2606 , - 2407 , - 2448 , - 2729 , - 3250 , - 4011 , - 5012 , - 493 , - 1974 , - 3695 , - 5656 , - 2097 , - 4538 , - 1459 , - 4380 , - 1781 , - 5182 , - 3063 , - 1184 , - 5305 , - 3906 , - 2747 , - 1828 , - 1149 , - 710 , - 511 , - 552 , - 833 , - 1354 , - 2115 , - 3116 , - 4357 , - 78 , - 1799 , - 3760 , - 201 , - 2642 , - 5323 , - 2484 , - 5645 , - 3286 , - 1167 , - 5048 , - 3409 , - 2010 , - 851 , - 5692 , - 5013 , - 4574 , - 4375 , - 4416 , - 4697 , - 5218 , - 219 , - 1220 , - 2461 , - 3942 , - 5663 , - 1864 , - 4065 , - 746 , - 3427 , - 588 , - 3749 , - 1390 , - 5031 , - 3152 , - 1513 , - 114 , - 4715 , - 3796 , - 3117 , - 2678 , - 2479 , - 2520 , - 2801 , - 3322 , - 4083 , - 5084 , - 565 , - 2046 , - 3767 , - 5728 , - 2169 , - 4610 , - 1531 , - 4452 , - 1853 , - 5254 , - 3135 , - 1256 , - 5377 , - 3978 , - 2819 , - 1900 , - 1221 , - 782 , - 583 , - 624 , - 905 , - 1426 , - 2187 , - 3188 , - 4429 , - 150 , - 1871 , - 3832 , - 273 , - 2714 , - 5395 , - 2556 , - 5717 , - 3358 , - 1239 , - 5120 , - 3481 , - 2082 , - 923 , - 4 , - 5085 , - 4646 , - 4447 , - 4488 , - 4769 , - 5290 , - 291 , - 1292 , - 2533 , - 4014 , - 5735 , - 1936 , - 4137 , - 818 , - 3499 , - 660 , - 3821 , - 1462 , - 5103 , - 3224 , - 1585 , - 186 , - 4787 , - 3868 , - 3189 , - 2750 , - 2551 , - 2592 , - 2873 , - 3394 , - 4155 , - 5156 , - 637 , - 2118 , - 3839 , - 40 , - 2241 , - 4682 , - 1603 , - 4524 , - 1925 , - 5326 , - 3207 , - 1328 , - 5449 , - 4050 , - 2891 , - 1972 , - 1293 , - 854 , - 655 , - 696 , - 977 , - 1498 , - 2259 , - 3260 , - 4501 , - 222 , - 1943 , - 3904 , - 345 , - 2786 , - 5467 , - 2628 , - 29 , - 3430 , - 1311 , - 5192 , - 3553 , - 2154 , - 995 , - 76 , - 5157 , - 4718 , - 4519 , - 4560 , - 4841 , - 5362 , - 363 , - 1364 , - 2605 , - 4086 , - 47 , - 2008 , - 4209 , - 890 , - 3571 , - 732 , - 3893 , - 1534 , - 5175 , - 3296 , - 1657 , - 258 , - 4859 , - 3940 , - 3261 , - 2822 , - 2623 , - 2664 , - 2945 , - 3466 , - 4227 , - 5228 , - 709 , - 2190 , - 3911 , - 112 , - 2313 , - 4754 , - 1675 , - 4596 , - 1997 , - 5398 , - 3279 , - 1400 , - 5521 , - 4122 , - 2963 , - 2044 , - 1365 , - 926 , - 727 , - 768 , - 1049 , - 1570 , - 2331 , - 3332 , - 4573 , - 294 , - 2015 , - 3976 , - 417 , - 2858 , - 5539 , - 2700 , - 101 , - 3502 , - 1383 , - 5264 , - 3625 , - 2226 , - 1067 , - 148 , - 5229 , - 4790 , - 4591 , - 4632 , - 4913 , - 5434 , - 435 , - 1436 , - 2677 , - 4158 , - 119 , - 2080 , - 4281 , - 962 , - 3643 , - 804 , - 3965 , - 1606 , - 5247 , - 3368 , - 1729 , - 330 , - 4931 , - 4012 , - 3333 , - 2894 , - 2695 , - 2736 , - 3017 , - 3538 , - 4299 , - 5300 , - 781 , - 2262 , - 3983 , - 184 , - 2385 , - 4826 , - 1747 , - 4668 , - 2069 , - 5470 , - 3351 , - 1472 , - 5593 , - 4194 , - 3035 , - 2116 , - 1437 , - 998 , - 799 , - 840 , - 1121 , - 1642 , - 2403 , - 3404 , - 4645 , - 366 , - 2087 , - 4048 , - 489 , - 2930 , - 5611 , - 2772 , - 173 , - 3574 , - 1455 , - 5336 , - 3697 , - 2298 , - 1139 , - 220 , - 5301 , - 4862 , - 4663 , - 4704 , - 4985 , - 5506 , - 507 , - 1508 , - 2749 , - 4230 , - 191 , - 2152 , - 4353 , - 1034 , - 3715 , - 876 , - 4037 , - 1678 , - 5319 , - 3440 , - 1801 , - 402 , - 5003 , - 4084 , - 3405 , - 2966 , - 2767 , - 2808 , - 3089 , - 3610 , - 4371 , - 5372 , - 853 , - 2334 , - 4055 , - 256 , - 2457 , - 4898 , - 1819 , - 4740 , - 2141 , - 5542 , - 3423 , - 1544 , - 5665 , - 4266 , - 3107 , - 2188 , - 1509 , - 1070 , - 871 , - 912 , - 1193 , - 1714 , - 2475 , - 3476 , - 4717 , - 438 , - 2159 , - 4120 , - 561 , - 3002 , - 5683 , - 2844 , - 245 , - 3646 , - 1527 , - 5408 , - 3769 , - 2370 , - 1211 , - 292 , - 5373 , - 4934 , - 4735 , - 4776 , - 5057 , - 5578 , - 579 , - 1580 , - 2821 , - 4302 , - 263 , - 2224 , - 4425 , - 1106 , - 3787 , - 948 , - 4109 , - 1750 , - 5391 , - 3512 , - 1873 , - 474 , - 5075 , - 4156 , - 3477 , - 3038 , - 2839 , - 2880 , - 3161 , - 3682 , - 4443 , - 5444 , - 925 , - 2406 , - 4127 , - 328 , - 2529 , - 4970 , - 1891 , - 4812 , - 2213 , - 5614 , - 3495 , - 1616 , - 5737 , - 4338 , - 3179 , - 2260 , - 1581 , - 1142 , - 943 , - 984 , - 1265 , - 1786 , - 2547 , - 3548 , - 4789 , - 510 , - 2231 , - 4192 , - 633 , - 3074 , - 5755 , - 2916 , - 317 , - 3718 , - 1599 , - 5480 , - 3841 , - 2442 , - 1283 , - 364 , - 5445 , - 5006 , - 4807 , - 4848 , - 5129 , - 5650 , - 651 , - 1652 , - 2893 , - 4374 , - 335 , - 2296 , - 4497 , - 1178 , - 3859 , - 1020 , - 4181 , - 1822 , - 5463 , - 3584 , - 1945 , - 546 , - 5147 , - 4228 , - 3549 , - 3110 , - 2911 , - 2952 , - 3233 , - 3754 , - 4515 , - 5516 , - 997 , - 2478 , - 4199 , - 400 , - 2601 , - 5042 , - 1963 , - 4884 , - 2285 , - 5686 , - 3567 , - 1688 , - 49 , - 4410 , - 3251 , - 2332 , - 1653 , - 1214 , - 1015 , - 1056 , - 1337 , - 1858 , - 2619 , - 3620 , - 4861 , - 582 , - 2303 , - 4264 , - 705 , - 3146 , - 67 , - 2988 , - 389 , - 3790 , - 1671 , - 5552 , - 3913 , - 2514 , - 1355 , - 436 , - 5517 , - 5078 , - 4879 , - 4920 , - 5201 , - 5722 , - 723 , - 1724 , - 2965 , - 4446 , - 407 , - 2368 , - 4569 , - 1250 , - 3931 , - 1092 , - 4253 , - 1894 , - 5535 , - 3656 , - 2017 , - 618 , - 5219 , - 4300 , - 3621 , - 3182 , - 2983 , - 3024 , - 3305 , - 3826 , - 4587 , - 5588 , - 1069 , - 2550 , - 4271 , - 472 , - 2673 , - 5114 , - 2035 , - 4956 , - 2357 , - 5758 , - 3639 , - 1760 , - 121 , - 4482 , - 3323 , - 2404 , - 1725 , - 1286 , - 1087 , - 1128 , - 1409 , - 1930 , - 2691 , - 3692 , - 4933 , - 654 , - 2375 , - 4336 , - 777 , - 3218 , - 139 , - 3060 , - 461 , - 3862 , - 1743 , - 5624 , - 3985 , - 2586 , - 1427 , - 508 , - 5589 , - 5150 , - 4951 , - 4992 , - 5273 , - 34 , - 795 , - 1796 , - 3037 , - 4518 , - 479 , - 2440 , - 4641 , - 1322 , - 4003 , - 1164 , - 4325 , - 1966 , - 5607 , - 3728 , - 2089 , - 690 , - 5291 , - 4372 , - 3693 , - 3254 , - 3055 , - 3096 , - 3377 , - 3898 , - 4659 , - 5660 , - 1141 , - 2622 , - 4343 , - 544 , - 2745 , - 5186 , - 2107 , - 5028 , - 2429 , - 70 , - 3711 , - 1832 , - 193 , - 4554 , - 3395 , - 2476 , - 1797 , - 1358 , - 1159 , - 1200 , - 1481 , - 2002 , - 2763 , - 3764 , - 5005 , - 726 , - 2447 , - 4408 , - 849 , - 3290 , - 211 , - 3132 , - 533 , - 3934 , - 1815 , - 5696 , - 4057 , - 2658 , - 1499 , - 580 , - 5661 , - 5222 , - 5023 , - 5064 , - 5345 , - 106 , - 867 , - 1868 , - 3109 , - 4590 , - 551 , - 2512 , - 4713 , - 1394 , - 4075 , - 1236 , - 4397 , - 2038 , - 5679 , - 3800 , - 2161 , - 762 , - 5363 , - 4444 , - 3765 , - 3326 , - 3127 , - 3168 , - 3449 , - 3970 , - 4731 , - 5732 , - 1213 , - 2694 , - 4415 , - 616 , - 2817 , - 5258 , - 2179 , - 5100 , - 2501 , - 142 , - 3783 , - 1904 , - 265 , - 4626 , - 3467 , - 2548 , - 1869 , - 1430 , - 1231 , - 1272 , - 1553 , - 2074 , - 2835 , - 3836 , - 5077 , - 798 , - 2519 , - 4480 , - 921 , - 3362 , - 283 , - 3204 , - 605 , - 4006 , - 1887 , - 8 , - 4129 , - 2730 , - 1571 , - 652 , - 5733 , - 5294 , - 5095 , - 5136 , - 5417 , - 178 , - 939 , - 1940 , - 3181 , - 4662 , - 623 , - 2584 , - 4785 , - 1466 , - 4147 , - 1308 , - 4469 , - 2110 , - 5751 , - 3872 , - 2233 , - 834 , - 5435 , - 4516 , - 3837 , - 3398 , - 3199 , - 3240 , - 3521 , - 4042 , - 4803 , - 44 , - 1285 , - 2766 , - 4487 , - 688 , - 2889 , - 5330 , - 2251 , - 5172 , - 2573 , - 214 , - 3855 , - 1976 , - 337 , - 4698 , - 3539 , - 2620 , - 1941 , - 1502 , - 1303 , - 1344 , - 1625 , - 2146 , - 2907 , - 3908 , - 5149 , - 870 , - 2591 , - 4552 , - 993 , - 3434 , - 355 , - 3276 , - 677 , - 4078 , - 1959 , - 80 , - 4201 , - 2802 , - 1643 , - 724 , - 45 , - 5366 , - 5167 , - 5208 , - 5489 , - 250 , - 1011 , - 2012 , - 3253 , - 4734 , - 695 , - 2656 , - 4857 , - 1538 , - 4219 , - 1380 , - 4541 , - 2182 , - 63 , - 3944 , - 2305 , - 906 , - 5507 , - 4588 , - 3909 , - 3470 , - 3271 , - 3312 , - 3593 , - 4114 , - 4875 , - 116 , - 1357 , - 2838 , - 4559 , - 760 , - 2961 , - 5402 , - 2323 , - 5244 , - 2645 , - 286 , - 3927 , - 2048 , - 409 , - 4770 , - 3611 , - 2692 , - 2013 , - 1574 , - 1375 , - 1416 , - 1697 , - 2218 , - 2979 , - 3980 , - 5221 , - 942 , - 2663 , - 4624 , - 1065 , - 3506 , - 427 , - 3348 , - 749 , - 4150 , - 2031 , - 152 , - 4273 , - 2874 , - 1715 , - 796 , - 117 , - 5438 , - 5239 , - 5280 , - 5561 , - 322 , - 1083 , - 2084 , - 3325 , - 4806 , - 767 , - 2728 , - 4929 , - 1610 , - 4291 , - 1452 , - 4613 , - 2254 , - 135 , - 4016 , - 2377 , - 978 , - 5579 , - 4660 , - 3981 , - 3542 , - 3343 , - 3384 , - 3665 , - 4186 , - 4947 , - 188 , - 1429 , - 2910 , - 4631 , - 832 , - 3033 , - 5474 , - 2395 , - 5316 , - 2717 , - 358 , - 3999 , - 2120 , - 481 , - 4842 , - 3683 , - 2764 , - 2085 , - 1646 , - 1447 , - 1488 , - 1769 , - 2290 , - 3051 , - 4052 , - 5293 , - 1014 , - 2735 , - 4696 , - 1137 , - 3578 , - 499 , - 3420 , - 821 , - 4222 , - 2103 , - 224 , - 4345 , - 2946 , - 1787 , - 868 , - 189 , - 5510 , - 5311 , - 5352 , - 5633 , - 394 , - 1155 , - 2156 , - 3397 , - 4878 , - 839 , - 2800 , - 5001 , - 1682 , - 4363 , - 1524 , - 4685 , - 2326 , - 207 , - 4088 , - 2449 , - 1050 , - 5651 , - 4732 , - 4053 , - 3614 , - 3415 , - 3456 , - 3737 , - 4258 , - 5019 , - 260 , - 1501 , - 2982 , - 4703 , - 904 , - 3105 , - 5546 , - 2467 , - 5388 , - 2789 , - 430 , - 4071 , - 2192 , - 553 , - 4914 , - 3755 , - 2836 , - 2157 , - 1718 , - 1519 , - 1560 , - 1841 , - 2362 , - 3123 , - 4124 , - 5365 , - 1086 , - 2807 , - 4768 , - 1209 , - 3650 , - 571 , - 3492 , - 893 , - 4294 , - 2175 , - 296 , - 4417 , - 3018 , - 1859 , - 940 , - 261 , - 5582 , - 5383 , - 5424 , - 5705 , - 466 , - 1227 , - 2228 , - 3469 , - 4950 , - 911 , - 2872 , - 5073 , - 1754 , - 4435 , - 1596 , - 4757 , - 2398 , - 279 , - 4160 , - 2521 , - 1122 , - 5723 , - 4804 , - 4125 , - 3686 , - 3487 , - 3528 , - 3809 , - 4330 , - 5091 , - 332 , - 1573 , - 3054 , - 4775 , - 976 , - 3177 , - 5618 , - 2539 , - 5460 , - 2861 , - 502 , - 4143 , - 2264 , - 625 , - 4986 , - 3827 , - 2908 , - 2229 , - 1790 , - 1591 , - 1632 , - 1913 , - 2434 , - 3195 , - 4196 , - 5437 , - 1158 , - 2879 , - 4840 , - 1281 , - 3722 , - 643 , - 3564 , - 965 , - 4366 , - 2247 , - 368 , - 4489 , - 3090 , - 1931 , - 1012 , - 333 , - 5654 , - 5455 , - 5496 , - 17 , - 538 , - 1299 , - 2300 , - 3541 , - 5022 , - 983 , - 2944 , - 5145 , - 1826 , - 4507 , - 1668 , - 4829 , - 2470 , - 351 , - 4232 , - 2593 , - 1194 , - 35 , - 4876 , - 4197 , - 3758 , - 3559 , - 3600 , - 3881 , - 4402 , - 5163 , - 404 , - 1645 , - 3126 , - 4847 , - 1048 , - 3249 , - 5690 , - 2611 , - 5532 , - 2933 , - 574 , - 4215 , - 2336 , - 697 , - 5058 , - 3899 , - 2980 , - 2301 , - 1862 , - 1663 , - 1704 , - 1985 , - 2506 , - 3267 , - 4268 , - 5509 , - 1230 , - 2951 , - 4912 , - 1353 , - 3794 , - 715 , - 3636 , - 1037 , - 4438 , - 2319 , - 440 , - 4561 , - 3162 , - 2003 , - 1084 , - 405 , - 5726 , - 5527 , - 5568 , - 89 , - 610 , - 1371 , - 2372 , - 3613 , - 5094 , - 1055 , - 3016 , - 5217 , - 1898 , - 4579 , - 1740 , - 4901 , - 2542 , - 423 , - 4304 , - 2665 , - 1266 , - 107 , - 4948 , - 4269 , - 3830 , - 3631 , - 3672 , - 3953 , - 4474 , - 5235 , - 476 , - 1717 , - 3198 , - 4919 , - 1120 , - 3321 , - 2 , - 2683 , - 5604 , - 3005 , - 646 , - 4287 , - 2408 , - 769 , - 5130 , - 3971 , - 3052 , - 2373 , - 1934 , - 1735 , - 1776 , - 2057 , - 2578 , - 3339 , - 4340 , - 5581 , - 1302 , - 3023 , - 4984 , - 1425 , - 3866 , - 787 , - 3708 , - 1109 , - 4510 , - 2391 , - 512 , - 4633 , - 3234 , - 2075 , - 1156 , - 477 , - 38 , - 5599 , - 5640 , - 161 , - 682 , - 1443 , - 2444 , - 3685 , - 5166 , - 1127 , - 3088 , - 5289 , - 1970 , - 4651 , - 1812 , - 4973 , - 2614 , - 495 , - 4376 , - 2737 , - 1338 , - 179 , - 5020 , - 4341 , - 3902 , - 3703 , - 3744 , - 4025 , - 4546 , - 5307 , - 548 , - 1789 , - 3270 , - 4991 , - 1192 , - 3393 , - 74 , - 2755 , - 5676 , - 3077 , - 718 , - 4359 , - 2480 , - 841 , - 5202 , - 4043 , - 3124 , - 2445 , - 2006 , - 1807 , - 1848 , - 2129 , - 2650 , - 3411 , - 4412 , - 5653 , - 1374 , - 3095 , - 5056 , - 1497 , - 3938 , - 859 , - 3780 , - 1181 , - 4582 , - 2463 , - 584 , - 4705 , - 3306 , - 2147 , - 1228 , - 549 , - 110 , - 5671 , - 5712 , - 233 , - 754 , - 1515 , - 2516 , - 3757 , - 5238 , - 1199 , - 3160 , - 5361 , - 2042 , - 4723 , - 1884 , - 5045 , - 2686 , - 567 , - 4448 , - 2809 , - 1410 , - 251 , - 5092 , - 4413 , - 3974 , - 3775 , - 3816 , - 4097 , - 4618 , - 5379 , - 620 , - 1861 , - 3342 , - 5063 , - 1264 , - 3465 , - 146 , - 2827 , - 5748 , - 3149 , - 790 , - 4431 , - 2552 , - 913 , - 5274 , - 4115 , - 3196 , - 2517 , - 2078 , - 1879 , - 1920 , - 2201 , - 2722 , - 3483 , - 4484 , - 5725 , - 1446 , - 3167 , - 5128 , - 1569 , - 4010 , - 931 , - 3852 , - 1253 , - 4654 , - 2535 , - 656 , - 4777 , - 3378 , - 2219 , - 1300 , - 621 , - 182 , - 5743 , - 24 , - 305 , - 826 , - 1587 , - 2588 , - 3829 , - 5310 , - 1271 , - 3232 , - 5433 , - 2114 , - 4795 , - 1956 , - 5117 , - 2758 , - 639 , - 4520 , - 2881 , - 1482 , - 323 , - 5164 , - 4485 , - 4046 , - 3847 , - 3888 , - 4169 , - 4690 , - 5451 , - 692 , - 1933 , - 3414 , - 5135 , - 1336 , - 3537 , - 218 , - 2899 , - 60 , - 3221 , - 862 , - 4503 , - 2624 , - 985 , - 5346 , - 4187 , - 3268 , - 2589 , - 2150 , - 1951 , - 1992 , - 2273 , - 2794 , - 3555 , - 4556 , - 37 , - 1518 , - 3239 , - 5200 , - 1641 , - 4082 , - 1003 , - 3924 , - 1325 , - 4726 , - 2607 , - 728 , - 4849 , - 3450 , - 2291 , - 1372 , - 693 , - 254 , - 55 , - 96 , - 377 , - 898 , - 1659 , - 2660 , - 3901 , - 5382 , - 1343 , - 3304 , - 5505 , - 2186 , - 4867 , - 2028 , - 5189 , - 2830 , - 711 , - 4592 , - 2953 , - 1554 , - 395 , - 5236 , - 4557 , - 4118 , - 3919 , - 3960 , - 4241 , - 4762 , - 5523 , - 764 , - 2005 , - 3486 , - 5207 , - 1408 , - 3609 , - 290 , - 2971 , - 132 , - 3293 , - 934 , - 4575 , - 2696 , - 1057 , - 5418 , - 4259 , - 3340 , - 2661 , - 2222 , - 2023 , - 2064 , - 2345 , - 2866 , - 3627 , - 4628 , - 109 , - 1590 , - 3311 , - 5272 , - 1713 , - 4154 , - 1075 , - 3996 , - 1397 , - 4798 , - 2679 , - 800 , - 4921 , - 3522 , - 2363 , - 1444 , - 765 , - 326 , - 127 , - 168 , - 449 , - 970 , - 1731 , - 2732 , - 3973 , - 5454 , - 1415 , - 3376 , - 5577 , - 2258 , - 4939 , - 2100 , - 5261 , - 2902 , - 783 , - 4664 , - 3025 , - 1626 , - 467 , - 5308 , - 4629 , - 4190 , - 3991 , - 4032 , - 4313 , - 4834 , - 5595 , - 836 , - 2077 , - 3558 , - 5279 , - 1480 , - 3681 , - 362 , - 3043 , - 204 , - 3365 , - 1006 , - 4647 , - 2768 , - 1129 , - 5490 , - 4331 , - 3412 , - 2733 , - 2294 , - 2095 , - 2136 , - 2417 , - 2938 , - 3699 , - 4700 , - 181 , - 1662 , - 3383 , - 5344 , - 1785 , - 4226 , - 1147 , - 4068 , - 1469 , - 4870 , - 2751 , - 872 , - 4993 , - 3594 , - 2435 , - 1516 , - 837 , - 398 , - 199 , - 240 , - 521 , - 1042 , - 1803 , - 2804 , - 4045 , - 5526 , - 1487 , - 3448 , - 5649 , - 2330 , - 5011 , - 2172 , - 5333 , - 2974 , - 855 , - 4736 , - 3097 , - 1698 , - 539 , - 5380 , - 4701 , - 4262 , - 4063 , - 4104 , - 4385 , - 4906 , - 5667 , - 908 , - 2149 , - 3630 , - 5351 , - 1552 , - 3753 , - 434 , - 3115 , - 276 , - 3437 , - 1078 , - 4719 , - 2840 , - 1201 , - 5562 , - 4403 , - 3484 , - 2805 , - 2366 , - 2167 , - 2208 , - 2489 , - 3010 , - 3771 , - 4772 , - 253 , - 1734 , - 3455 , - 5416 , - 1857 , - 4298 , - 1219 , - 4140 , - 1541 , - 4942 , - 2823 , - 944 , - 5065 , - 3666 , - 2507 , - 1588 , - 909 , - 470 , - 271 , - 312 , - 593 , - 1114 , - 1875 , - 2876 , - 4117 , - 5598 , - 1559 , - 3520 , - 5721 , - 2402 , - 5083 , - 2244 , - 5405 , - 3046 , - 927 , - 4808 , - 3169 , - 1770 , - 611 , - 5452 , - 4773 , - 4334 , - 4135 , - 4176 , - 4457 , - 4978 , - 5739 , - 980 , - 2221 , - 3702 , - 5423 , - 1624 , - 3825 , - 506 , - 3187 , - 348 , - 3509 , - 1150 , - 4791 , - 2912 , - 1273 , - 5634 , - 4475 , - 3556 , - 2877 , - 2438 , - 2239 , - 2280 , - 2561 , - 3082 , - 3843 , - 4844 , - 325 , - 1806 , - 3527 , - 5488 , - 1929 , - 4370 , - 1291 , - 4212 , - 1613 , - 5014 , - 2895 , - 1016 , - 5137 , - 3738 , - 2579 , - 1660 , - 981 , - 542 , - 343 , - 384 , - 665 , - 1186 , - 1947 , - 2948 , - 4189 , - 5670 , - 1631 , - 3592 , - 33 , - 2474 , - 5155 , - 2316 , - 5477 , - 3118 , - 999 , - 4880 , - 3241 , - 1842 , - 683 , - 5524 , - 4845 , - 4406 , - 4207 , - 4248 , - 4529 , - 5050 , - 51 , - 1052 , - 2293 , - 3774 , - 5495 , - 1696 , - 3897 , - 578 , - 3259 , - 420 , - 3581 , - 1222 , - 4863 , - 2984 , - 1345 , - 5706 , - 4547 , - 3628 , - 2949 , - 2510 , - 2311 , - 2352 , - 2633 , - 3154 , - 3915 , - 4916 , - 397 , - 1878 , - 3599 , - 5560 , - 2001 , - 4442 , - 1363 , - 4284 , - 1685 , - 5086 , - 2967 , - 1088 , - 5209 , - 3810 , - 2651 , - 1732 , - 1053 , - 614 , - 415 , - 456 , - 737 , - 1258 , - 2019 , - 3020 , - 4261 , - 5742 , - 1703 , - 3664 , - 105 , - 2546 , - 5227 , - 2388 , - 5549 , - 3190 , - 1071 , - 4952 , - 3313 , - 1914 , - 755 , - 5596 , - 4917 , - 4478 , - 4279 , - 4320 , - 4601 , - 5122 , - 123 , - 1124 , - 2365 , - 3846 , - 5567 , - 1768 , - 3969 , - 650 , - 3331 , - 492 , - 3653 , - 1294 , - 4935 , - 3056 , - 1417 , - 18 , - 4619 , - 3700 , - 3021 , - 2582 , - 2383 , - 2424 , - 2705 , - 3226 , - 3987 , - 4988 , - 469 , - 1950 , - 3671 , - 5632 , - 2073 , - 4514 , - 1435 , - 4356 , - 1757 , - 5158 , - 3039 , - 1160 , - 5281 , - 3882 , - 2723 , - 1804 , - 1125 , - 686 , - 487 , - 528 , - 809 , - 1330 , - 2091 , - 3092 , - 4333 , - 54 , - 1775 , - 3736 , - 177 , - 2618 , - 5299 , - 2460 , - 5621 , - 3262 , - 1143 , - 5024 , - 3385 , - 1986 , - 827 , - 5668 , - 4989 , - 4550 , - 4351 , - 4392 , - 4673 , - 5194 , - 195 , - 1196 , - 2437 , - 3918 , - 5639 , - 1840 , - 4041 , - 722 , - 3403 , - 564 , - 3725 , - 1366 , - 5007 , - 3128 , - 1489 , - 90 , - 4691 , - 3772 , - 3093 , - 2654 , - 2455 , - 2496 , - 2777 , - 3298 , - 4059 , - 5060 , - 541 , - 2022 , - 3743 , - 5704 , - 2145 , - 4586 , - 1507 , - 4428 , - 1829 , - 5230 , - 3111 , - 1232 , - 5353 , - 3954 , - 2795 , - 1876 , - 1197 , - 758 , - 559 , - 600 , - 881 , - 1402 , - 2163 , - 3164 , - 4405 , - 126 , - 1847 , - 3808 , - 249 , - 2690 , - 5371 , - 2532 , - 5693 , - 3334 , - 1215 , - 5096 , - 3457 , - 2058 , - 899 , - 5740 , - 5061 , - 4622 , - 4423 , - 4464 , - 4745 , - 5266 , - 267 , - 1268 , - 2509 , - 3990 , - 5711 , - 1912 , - 4113 , - 794 , - 3475 , - 636 , - 3797 , - 1438 , - 5079 , - 3200 , - 1561 , - 162 , - 4763 , - 3844 , - 3165 , - 2726 , - 2527 , - 2568 , - 2849 , - 3370 , - 4131 , - 5132 , - 613 , - 2094 , - 3815 , - 16 , - 2217 , - 4658 , - 1579 , - 4500 , - 1901 , - 5302 , - 3183 , - 1304 , - 5425 , - 4026 , - 2867 , - 1948 , - 1269 , - 830 , - 631 , - 672 , - 953 , - 1474 , - 2235 , - 3236 , - 4477 , - 198 , - 1919 , - 3880 , - 321 , - 2762 , - 5443 , - 2604 , - 5 , - 3406 , - 1287 , - 5168 , - 3529 , - 2130 , - 971 , - 52 , - 5133 , - 4694 , - 4495 , - 4536 , - 4817 , - 5338 , - 339 , - 1340 , - 2581 , - 4062 , - 23 , - 1984 , - 4185 , - 866 , - 3547 , - 708 , - 3869 , - 1510 , - 5151 , - 3272 , - 1633 , - 234 , - 4835 , - 3916 , - 3237 , - 2798 , - 2599 , - 2640 , - 2921 , - 3442 , - 4203 , - 5204 , - 685 , - 2166 , - 3887 , - 88 , - 2289 , - 4730 , - 1651 , - 4572 , - 1973 , - 5374 , - 3255 , - 1376 , - 5497 , - 4098 , - 2939 , - 2020 , - 1341 , - 902 , - 703 , - 744 , - 1025 , - 1546 , - 2307 , - 3308 , - 4549 , - 270 , - 1991 , - 3952 , - 393 , - 2834 , - 5515 , - 2676 , - 77 , - 3478 , - 1359 , - 5240 , - 3601 , - 2202 , - 1043 , - 124 , - 5205 , - 4766 , - 4567 , - 4608 , - 4889 , - 5410 , - 411 , - 1412 , - 2653 , - 4134 , - 95 , - 2056 , - 4257 , - 938 , - 3619 , - 780 , - 3941 , - 1582 , - 5223 , - 3344 , - 1705 , - 306 , - 4907 , - 3988 , - 3309 , - 2870 , - 2671 , - 2712 , - 2993 , - 3514 , - 4275 , - 5276 , - 757 , - 2238 , - 3959 , - 160 , - 2361 , - 4802 , - 1723 , - 4644 , - 2045 , - 5446 , - 3327 , - 1448 , - 5569 , - 4170 , - 3011 , - 2092 , - 1413 , - 974 , - 775 , - 816 , - 1097 , - 1618 , - 2379 , - 3380 , - 4621 , - 342 , - 2063 , - 4024 , - 465 , - 2906 , - 5587 , - 2748 , - 149 , - 3550 , - 1431 , - 5312 , - 3673 , - 2274 , - 1115 , - 196 , - 5277 , - 4838 , - 4639 , - 4680 , - 4961 , - 5482 , - 483 , - 1484 , - 2725 , - 4206 , - 167 , - 2128 , - 4329 , - 1010 , - 3691 , - 852 , - 4013 , - 1654 , - 5295 , - 3416 , - 1777 , - 378 , - 4979 , - 4060 , - 3381 , - 2942 , - 2743 , - 2784 , - 3065 , - 3586 , - 4347 , - 5348 , - 829 , - 2310 , - 4031 , - 232 , - 2433 , - 4874 , - 1795 , - 4716 , - 2117 , - 5518 , - 3399 , - 1520 , - 5641 , - 4242 , - 3083 , - 2164 , - 1485 , - 1046 , - 847 , - 888 , - 1169 , - 1690 , - 2451 , - 3452 , - 4693 , - 414 , - 2135 , - 4096 , - 537 , - 2978 , - 5659 , - 2820 , - 221 , - 3622 , - 1503 , - 5384 , - 3745 , - 2346 , - 1187 , - 268 , - 5349 , - 4910 , - 4711 , - 4752 , - 5033 , - 5554 , - 555 , - 1556 , - 2797 , - 4278 , - 239 , - 2200 , - 4401 , - 1082 , - 3763 , - 924 , - 4085 , - 1726 , - 5367 , - 3488 , - 1849 , - 450 , - 5051 , - 4132 , - 3453 , - 3014 , - 2815 , - 2856 , - 3137 , - 3658 , - 4419 , - 5420 , - 901 , - 2382 , - 4103 , - 304 , - 2505 , - 4946 , - 1867 , - 4788 , - 2189 , - 5590 , - 3471 , - 1592 , - 5713 , - 4314 , - 3155 , - 2236 , - 1557 , - 1118 , - 919 , - 960 , - 1241 , - 1762 , - 2523 , - 3524 , - 4765 , - 486 , - 2207 , - 4168 , - 609 , - 3050 , - 5731 , - 2892 , - 293 , - 3694 , - 1575 , - 5456 , - 3817 , - 2418 , - 1259 , - 340 , - 5421 , - 4982 , - 4783 , - 4824 , - 5105 , - 5626 , - 627 , - 1628 , - 2869 , - 4350 , - 311 , - 2272 , - 4473 , - 1154 , - 3835 , - 996 , - 4157 , - 1798 , - 5439 , - 3560 , - 1921 , - 522 , - 5123 , - 4204 , - 3525 , - 3086 , - 2887 , - 2928 , - 3209 , - 3730 , - 4491 , - 5492 , - 973 , - 2454 , - 4175 , - 376 , - 2577 , - 5018 , - 1939 , - 4860 , - 2261 , - 5662 , - 3543 , - 1664 , - 25 , - 4386 , - 3227 , - 2308 , - 1629 , - 1190 , - 991 , - 1032 , - 1313 , - 1834 , - 2595 , - 3596 , - 4837 , - 558 , - 2279 , - 4240 , - 681 , - 3122 , - 43 , - 2964 , - 365 , - 3766 , - 1647 , - 5528 , - 3889 , - 2490 , - 1331 , - 412 , - 5493 , - 5054 , - 4855 , - 4896 , - 5177 , - 5698 , - 699 , - 1700 , - 2941 , - 4422 , - 383 , - 2344 , - 4545 , - 1226 , - 3907 , - 1068 , - 4229 , - 1870 , - 5511 , - 3632 , - 1993 , - 594 , - 5195 , - 4276 , - 3597 , - 3158 , - 2959 , - 3000 , - 3281 , - 3802 , - 4563 , - 5564 , - 1045 , - 2526 , - 4247 , - 448 , - 2649 , - 5090 , - 2011 , - 4932 , - 2333 , - 5734 , - 3615 , - 1736 , - 97 , - 4458 , - 3299 , - 2380 , - 1701 , - 1262 , - 1063 , - 1104 , - 1385 , - 1906 , - 2667 , - 3668 , - 4909 , - 630 , - 2351 , - 4312 , - 753 , - 3194 , - 115 , - 3036 , - 437 , - 3838 , - 1719 , - 5600 , - 3961 , - 2562 , - 1403 , - 484 , - 5565 , - 5126 , - 4927 , - 4968 , - 5249 , - 10 , - 771 , - 1772 , - 3013 , - 4494 , - 455 , - 2416 , - 4617 , - 1298 , - 3979 , - 1140 , - 4301 , - 1942 , - 5583 , - 3704 , - 2065 , - 666 , - 5267 , - 4348 , - 3669 , - 3230 , - 3031 , - 3072 , - 3353 , - 3874 , - 4635 , - 5636 , - 1117 , - 2598 , - 4319 , - 520 , - 2721 , - 5162 , - 2083 , - 5004 , - 2405 , - 46 , - 3687 , - 1808 , - 169 , - 4530 , - 3371 , - 2452 , - 1773 , - 1334 , - 1135 , - 1176 , - 1457 , - 1978 , - 2739 , - 3740 , - 4981 , - 702 , - 2423 , - 4384 , - 825 , - 3266 , - 187 , - 3108 , - 509 , - 3910 , - 1791 , - 5672 , - 4033 , - 2634 , - 1475 , - 556 , - 5637 , - 5198 , - 4999 , - 5040 , - 5321 , - 82 , - 843 , - 1844 , - 3085 , - 4566 , - 527 , - 2488 , - 4689 , - 1370 , - 4051 , - 1212 , - 4373 , - 2014 , - 5655 , - 3776 , - 2137 , - 738 , - 5339 , - 4420 , - 3741 , - 3302 , - 3103 , - 3144 , - 3425 , - 3946 , - 4707 , - 5708 , - 1189 , - 2670 , - 4391 , - 592 , - 2793 , - 5234 , - 2155 , - 5076 , - 2477 , - 118 , - 3759 , - 1880 , - 241 , - 4602 , - 3443 , - 2524 , - 1845 , - 1406 , - 1207 , - 1248 , - 1529 , - 2050 , - 2811 , - 3812 , - 5053 , - 774 , - 2495 , - 4456 , - 897 , - 3338 , - 259 , - 3180 , - 581 , - 3982 , - 1863 , - 5744 , - 4105 , - 2706 , - 1547 , - 628 , - 5709 , - 5270 , - 5071 , - 5112 , - 5393 , - 154 , - 915 , - 1916 , - 3157 , - 4638 , - 599 , - 2560 , - 4761 , - 1442 , - 4123 , - 1284 , - 4445 , - 2086 , - 5727 , - 3848 , - 2209 , - 810 , - 5411 , - 4492 , - 3813 , - 3374 , - 3175 , - 3216 , - 3497 , - 4018 , - 4779 , - 20 , - 1261 , - 2742 , - 4463 , - 664 , - 2865 , - 5306 , - 2227 , - 5148 , - 2549 , - 190 , - 3831 , - 1952 , - 313 , - 4674 , - 3515 , - 2596 , - 1917 , - 1478 , - 1279 , - 1320 , - 1601 , - 2122 , - 2883 , - 3884 , - 5125 , - 846 , - 2567 , - 4528 , - 969 , - 3410 , - 331 , - 3252 , - 653 , - 4054 , - 1935 , - 56 , - 4177 , - 2778 , - 1619 , - 700 , - 21 , - 5342 , - 5143 , - 5184 , - 5465 , - 226 , - 987 , - 1988 , - 3229 , - 4710 , - 671 , - 2632 , - 4833 , - 1514 , - 4195 , - 1356 , - 4517 , - 2158 , - 39 , - 3920 , - 2281 , - 882 , - 5483 , - 4564 , - 3885 , - 3446 , - 3247 , - 3288 , - 3569 , - 4090 , - 4851 , - 92 , - 1333 , - 2814 , - 4535 , - 736 , - 2937 , - 5378 , - 2299 , - 5220 , - 2621 , - 262 , - 3903 , - 2024 , - 385 , - 4746 , - 3587 , - 2668 , - 1989 , - 1550 , - 1351 , - 1392 , - 1673 , - 2194 , - 2955 , - 3956 , - 5197 , - 918 , - 2639 , - 4600 , - 1041 , - 3482 , - 403 , - 3324 , - 725 , - 4126 , - 2007 , - 128 , - 4249 , - 2850 , - 1691 , - 772 , - 93 , - 5414 , - 5215 , - 5256 , - 5537 , - 298 , - 1059 , - 2060 , - 3301 , - 4782 , - 743 , - 2704 , - 4905 , - 1586 , - 4267 , - 1428 , - 4589 , - 2230 , - 111 , - 3992 , - 2353 , - 954 , - 5555 , - 4636 , - 3957 , - 3518 , - 3319 , - 3360 , - 3641 , - 4162 , - 4923 , - 164 , - 1405 , - 2886 , - 4607 , - 808 , - 3009 , - 5450 , - 2371 , - 5292 , - 2693 , - 334 , - 3975 , - 2096 , - 457 , - 4818 , - 3659 , - 2740 , - 2061 , - 1622 , - 1423 , - 1464 , - 1745 , - 2266 , - 3027 , - 4028 , - 5269 , - 990 , - 2711 , - 4672 , - 1113 , - 3554 , - 475 , - 3396 , - 797 , - 4198 , - 2079 , - 200 , - 4321 , - 2922 , - 1763 , - 844 , - 165 , - 5486 , - 5287 , - 5328 , - 5609 , - 370 , - 1131 , - 2132 , - 3373 , - 4854 , - 815 , - 2776 , - 4977 , - 1658 , - 4339 , - 1500 , - 4661 , - 2302 , - 183 , - 4064 , - 2425 , - 1026 , - 5627 , - 4708 , - 4029 , - 3590 , - 3391 , - 3432 , - 3713 , - 4234 , - 4995 , - 236 , - 1477 , - 2958 , - 4679 , - 880 , - 3081 , - 5522 , - 2443 , - 5364 , - 2765 , - 406 , - 4047 , - 2168 , - 529 , - 4890 , - 3731 , - 2812 , - 2133 , - 1694 , - 1495 , - 1536 , - 1817 , - 2338 , - 3099 , - 4100 , - 5341 , - 1062 , - 2783 , - 4744 , - 1185 , - 3626 , - 547 , - 3468 , - 869 , - 4270 , - 2151 , - 272 , - 4393 , - 2994 , - 1835 , - 916 , - 237 , - 5558 , - 5359 , - 5400 , - 5681 , - 442 , - 1203 , - 2204 , - 3445 , - 4926 , - 887 , - 2848 , - 5049 , - 1730 , - 4411 , - 1572 , - 4733 , - 2374 , - 255 , - 4136 , - 2497 , - 1098 , - 5699 , - 4780 , - 4101 , - 3662 , - 3463 , - 3504 , - 3785 , - 4306 , - 5067 , - 308 , - 1549 , - 3030 , - 4751 , - 952 , - 3153 , - 5594 , - 2515 , - 5436 , - 2837 , - 478 , - 4119 , - 2240 , - 601 , - 4962 , - 3803 , - 2884 , - 2205 , - 1766 , - 1567 , - 1608 , - 1889 , - 2410 , - 3171 , - 4172 , - 5413 , - 1134 , - 2855 , - 4816 , - 1257 , - 3698 , - 619 , - 3540 , - 941 , - 4342 , - 2223 , - 344 , - 4465 , - 3066 , - 1907 , - 988 , - 309 , - 5630 , - 5431 , - 5472 , - 5753 , - 514 , - 1275 , - 2276 , - 3517 , - 4998 , - 959 , - 2920 , - 5121 , - 1802 , - 4483 , - 1644 , - 4805 , - 2446 , - 327 , - 4208 , - 2569 , - 1170 , - 11 , - 4852 , - 4173 , - 3734 , - 3535 , - 3576 , - 3857 , - 4378 , - 5139 , - 380 , - 1621 , - 3102 , - 4823 , - 1024 , - 3225 , - 5666 , - 2587 , - 5508 , - 2909 , - 550 , - 4191 , - 2312 , - 673 , - 5034 , - 3875 , - 2956 , - 2277 , - 1838 , - 1639 , - 1680 , - 1961 , - 2482 , - 3243 , - 4244 , - 5485 , - 1206 , - 2927 , - 4888 , - 1329 , - 3770 , - 691 , - 3612 , - 1013 , - 4414 , - 2295 , - 416 , - 4537 , - 3138 , - 1979 , - 1060 , - 381 , - 5702 , - 5503 , - 5544 , - 65 , - 586 , - 1347 , - 2348 , - 3589 , - 5070 , - 1031 , - 2992 , - 5193 , - 1874 , - 4555 , - 1716 , - 4877 , - 2518 , - 399 , - 4280 , - 2641 , - 1242 , - 83 , - 4924 , - 4245 , - 3806 , - 3607 , - 3648 , - 3929 , - 4450 , - 5211 , - 452 , - 1693 , - 3174 , - 4895 , - 1096 , - 3297 , - 5738 , - 2659 , - 5580 , - 2981 , - 622 , - 4263 , - 2384 , - 745 , - 5106 , - 3947 , - 3028 , - 2349 , - 1910 , - 1711 , - 1752 , - 2033 , - 2554 , - 3315 , - 4316 , - 5557 , - 1278 , - 2999 , - 4960 , - 1401 , - 3842 , - 763 , - 3684 , - 1085 , - 4486 , - 2367 , - 488 , - 4609 , - 3210 , - 2051 , - 1132 , - 453 , - 14 , - 5575 , - 5616 , - 137 , - 658 , - 1419 , - 2420 , - 3661 , - 5142 , - 1103 , - 3064 , - 5265 , - 1946 , - 4627 , - 1788 , - 4949 , - 2590 , - 471 , - 4352 , - 2713 , - 1314 , - 155 , - 4996 , - 4317 , - 3878 , - 3679 , - 3720 , - 4001 , - 4522 , - 5283 , - 524 , - 1765 , - 3246 , - 4967 , - 1168 , - 3369 , - 50 , - 2731 , - 5652 , - 3053 , - 694 , - 4335 , - 2456 , - 817 , - 5178 , - 4019 , - 3100 , - 2421 , - 1982 , - 1783 , - 1824 , - 2105 , - 2626 , - 3387 , - 4388 , - 5629 , - 1350 , - 3071 , - 5032 , - 1473 , - 3914 , - 835 , - 3756 , - 1157 , - 4558 , - 2439 , - 560 , - 4681 , - 3282 , - 2123 , - 1204 , - 525 , - 86 , - 5647 , - 5688 , - 209 , - 730 , - 1491 , - 2492 , - 3733 , - 5214 , - 1175 , - 3136 , - 5337 , - 2018 , - 4699 , - 1860 , - 5021 , - 2662 , - 543 , - 4424 , - 2785 , - 1386 , - 227 , - 5068 , - 4389 , - 3950 , - 3751 , - 3792 , - 4073 , - 4594 , - 5355 , - 596 , - 1837 , - 3318 , - 5039 , - 1240 , - 3441 , - 122 , - 2803 , - 5724 , - 3125 , - 766 , - 4407 , - 2528 , - 889 , - 5250 , - 4091 , - 3172 , - 2493 , - 2054 , - 1855 , - 1896 , - 2177 , - 2698 , - 3459 , - 4460 , - 5701 , - 1422 , - 3143 , - 5104 , - 1545 , - 3986 , - 907 , - 3828 , - 1229 , - 4630 , - 2511 , - 632 , - 4753 , - 3354 , - 2195 , - 1276 , - 597 , - 158 , - 5719 , - 0 , - 271 , - 906 , - 1905 , - 3268 , - 4995 , - 1262 , - 3717 , - 712 , - 3895 , - 1618 , - 5529 , - 3980 , - 2795 , - 1974 , - 1517 , - 1424 , - 1695 , - 2330 , - 3329 , - 4692 , - 595 , - 2686 , - 5141 , - 2136 , - 5319 , - 3042 , - 1129 , - 5404 , - 4219 , - 3398 , - 2941 , - 2848 , - 3119 , - 3754 , - 4753 , - 292 , - 2019 , - 4110 , - 741 , - 3560 , - 919 , - 4466 , - 2553 , - 1004 , - 5643 , - 4822 , - 4365 , - 4272 , - 4543 , - 5178 , - 353 , - 1716 , - 3443 , - 5534 , - 2165 , - 4984 , - 2343 , - 66 , - 3977 , - 2428 , - 1243 , - 422 , - 5789 , - 5696 , - 143 , - 778 , - 1777 , - 3140 , - 4867 , - 1134 , - 3589 , - 584 , - 3767 , - 1490 , - 5401 , - 3852 , - 2667 , - 1846 , - 1389 , - 1296 , - 1567 , - 2202 , - 3201 , - 4564 , - 467 , - 2558 , - 5013 , - 2008 , - 5191 , - 2914 , - 1001 , - 5276 , - 4091 , - 3270 , - 2813 , - 2720 , - 2991 , - 3626 , - 4625 , - 164 , - 1891 , - 3982 , - 613 , - 3432 , - 791 , - 4338 , - 2425 , - 876 , - 5515 , - 4694 , - 4237 , - 4144 , - 4415 , - 5050 , - 225 , - 1588 , - 3315 , - 5406 , - 2037 , - 4856 , - 2215 , - 5762 , - 3849 , - 2300 , - 1115 , - 294 , - 5661 , - 5568 , - 15 , - 650 , - 1649 , - 3012 , - 4739 , - 1006 , - 3461 , - 456 , - 3639 , - 1362 , - 5273 , - 3724 , - 2539 , - 1718 , - 1261 , - 1168 , - 1439 , - 2074 , - 3073 , - 4436 , - 339 , - 2430 , - 4885 , - 1880 , - 5063 , - 2786 , - 873 , - 5148 , - 3963 , - 3142 , - 2685 , - 2592 , - 2863 , - 3498 , - 4497 , - 36 , - 1763 , - 3854 , - 485 , - 3304 , - 663 , - 4210 , - 2297 , - 748 , - 5387 , - 4566 , - 4109 , - 4016 , - 4287 , - 4922 , - 97 , - 1460 , - 3187 , - 5278 , - 1909 , - 4728 , - 2087 , - 5634 , - 3721 , - 2172 , - 987 , - 166 , - 5533 , - 5440 , - 5711 , - 522 , - 1521 , - 2884 , - 4611 , - 878 , - 3333 , - 328 , - 3511 , - 1234 , - 5145 , - 3596 , - 2411 , - 1590 , - 1133 , - 1040 , - 1311 , - 1946 , - 2945 , - 4308 , - 211 , - 2302 , - 4757 , - 1752 , - 4935 , - 2658 , - 745 , - 5020 , - 3835 , - 3014 , - 2557 , - 2464 , - 2735 , - 3370 , - 4369 , - 5732 , - 1635 , - 3726 , - 357 , - 3176 , - 535 , - 4082 , - 2169 , - 620 , - 5259 , - 4438 , - 3981 , - 3888 , - 4159 , - 4794 , - 5793 , - 1332 , - 3059 , - 5150 , - 1781 , - 4600 , - 1959 , - 5506 , - 3593 , - 2044 , - 859 , - 38 , - 5405 , - 5312 , - 5583 , - 394 , - 1393 , - 2756 , - 4483 , - 750 , - 3205 , - 200 , - 3383 , - 1106 , - 5017 , - 3468 , - 2283 , - 1462 , - 1005 , - 912 , - 1183 , - 1818 , - 2817 , - 4180 , - 83 , - 2174 , - 4629 , - 1624 , - 4807 , - 2530 , - 617 , - 4892 , - 3707 , - 2886 , - 2429 , - 2336 , - 2607 , - 3242 , - 4241 , - 5604 , - 1507 , - 3598 , - 229 , - 3048 , - 407 , - 3954 , - 2041 , - 492 , - 5131 , - 4310 , - 3853 , - 3760 , - 4031 , - 4666 , - 5665 , - 1204 , - 2931 , - 5022 , - 1653 , - 4472 , - 1831 , - 5378 , - 3465 , - 1916 , - 731 , - 5734 , - 5277 , - 5184 , - 5455 , - 266 , - 1265 , - 2628 , - 4355 , - 622 , - 3077 , - 72 , - 3255 , - 978 , - 4889 , - 3340 , - 2155 , - 1334 , - 877 , - 784 , - 1055 , - 1690 , - 2689 , - 4052 , - 5779 , - 2046 , - 4501 , - 1496 , - 4679 , - 2402 , - 489 , - 4764 , - 3579 , - 2758 , - 2301 , - 2208 , - 2479 , - 3114 , - 4113 , - 5476 , - 1379 , - 3470 , - 101 , - 2920 , - 279 , - 3826 , - 1913 , - 364 , - 5003 , - 4182 , - 3725 , - 3632 , - 3903 , - 4538 , - 5537 , - 1076 , - 2803 , - 4894 , - 1525 , - 4344 , - 1703 , - 5250 , - 3337 , - 1788 , - 603 , - 5606 , - 5149 , - 5056 , - 5327 , - 138 , - 1137 , - 2500 , - 4227 , - 494 , - 2949 , - 5768 , - 3127 , - 850 , - 4761 , - 3212 , - 2027 , - 1206 , - 749 , - 656 , - 927 , - 1562 , - 2561 , - 3924 , - 5651 , - 1918 , - 4373 , - 1368 , - 4551 , - 2274 , - 361 , - 4636 , - 3451 , - 2630 , - 2173 , - 2080 , - 2351 , - 2986 , - 3985 , - 5348 , - 1251 , - 3342 , - 5797 , - 2792 , - 151 , - 3698 , - 1785 , - 236 , - 4875 , - 4054 , - 3597 , - 3504 , - 3775 , - 4410 , - 5409 , - 948 , - 2675 , - 4766 , - 1397 , - 4216 , - 1575 , - 5122 , - 3209 , - 1660 , - 475 , - 5478 , - 5021 , - 4928 , - 5199 , - 10 , - 1009 , - 2372 , - 4099 , - 366 , - 2821 , - 5640 , - 2999 , - 722 , - 4633 , - 3084 , - 1899 , - 1078 , - 621 , - 528 , - 799 , - 1434 , - 2433 , - 3796 , - 5523 , - 1790 , - 4245 , - 1240 , - 4423 , - 2146 , - 233 , - 4508 , - 3323 , - 2502 , - 2045 , - 1952 , - 2223 , - 2858 , - 3857 , - 5220 , - 1123 , - 3214 , - 5669 , - 2664 , - 23 , - 3570 , - 1657 , - 108 , - 4747 , - 3926 , - 3469 , - 3376 , - 3647 , - 4282 , - 5281 , - 820 , - 2547 , - 4638 , - 1269 , - 4088 , - 1447 , - 4994 , - 3081 , - 1532 , - 347 , - 5350 , - 4893 , - 4800 , - 5071 , - 5706 , - 881 , - 2244 , - 3971 , - 238 , - 2693 , - 5512 , - 2871 , - 594 , - 4505 , - 2956 , - 1771 , - 950 , - 493 , - 400 , - 671 , - 1306 , - 2305 , - 3668 , - 5395 , - 1662 , - 4117 , - 1112 , - 4295 , - 2018 , - 105 , - 4380 , - 3195 , - 2374 , - 1917 , - 1824 , - 2095 , - 2730 , - 3729 , - 5092 , - 995 , - 3086 , - 5541 , - 2536 , - 5719 , - 3442 , - 1529 , - 5804 , - 4619 , - 3798 , - 3341 , - 3248 , - 3519 , - 4154 , - 5153 , - 692 , - 2419 , - 4510 , - 1141 , - 3960 , - 1319 , - 4866 , - 2953 , - 1404 , - 219 , - 5222 , - 4765 , - 4672 , - 4943 , - 5578 , - 753 , - 2116 , - 3843 , - 110 , - 2565 , - 5384 , - 2743 , - 466 , - 4377 , - 2828 , - 1643 , - 822 , - 365 , - 272 , - 543 , - 1178 , - 2177 , - 3540 , - 5267 , - 1534 , - 3989 , - 984 , - 4167 , - 1890 , - 5801 , - 4252 , - 3067 , - 2246 , - 1789 , - 1696 , - 1967 , - 2602 , - 3601 , - 4964 , - 867 , - 2958 , - 5413 , - 2408 , - 5591 , - 3314 , - 1401 , - 5676 , - 4491 , - 3670 , - 3213 , - 3120 , - 3391 , - 4026 , - 5025 , - 564 , - 2291 , - 4382 , - 1013 , - 3832 , - 1191 , - 4738 , - 2825 , - 1276 , - 91 , - 5094 , - 4637 , - 4544 , - 4815 , - 5450 , - 625 , - 1988 , - 3715 , - 5806 , - 2437 , - 5256 , - 2615 , - 338 , - 4249 , - 2700 , - 1515 , - 694 , - 237 , - 144 , - 415 , - 1050 , - 2049 , - 3412 , - 5139 , - 1406 , - 3861 , - 856 , - 4039 , - 1762 , - 5673 , - 4124 , - 2939 , - 2118 , - 1661 , - 1568 , - 1839 , - 2474 , - 3473 , - 4836 , - 739 , - 2830 , - 5285 , - 2280 , - 5463 , - 3186 , - 1273 , - 5548 , - 4363 , - 3542 , - 3085 , - 2992 , - 3263 , - 3898 , - 4897 , - 436 , - 2163 , - 4254 , - 885 , - 3704 , - 1063 , - 4610 , - 2697 , - 1148 , - 5787 , - 4966 , - 4509 , - 4416 , - 4687 , - 5322 , - 497 , - 1860 , - 3587 , - 5678 , - 2309 , - 5128 , - 2487 , - 210 , - 4121 , - 2572 , - 1387 , - 566 , - 109 , - 16 , - 287 , - 922 , - 1921 , - 3284 , - 5011 , - 1278 , - 3733 , - 728 , - 3911 , - 1634 , - 5545 , - 3996 , - 2811 , - 1990 , - 1533 , - 1440 , - 1711 , - 2346 , - 3345 , - 4708 , - 611 , - 2702 , - 5157 , - 2152 , - 5335 , - 3058 , - 1145 , - 5420 , - 4235 , - 3414 , - 2957 , - 2864 , - 3135 , - 3770 , - 4769 , - 308 , - 2035 , - 4126 , - 757 , - 3576 , - 935 , - 4482 , - 2569 , - 1020 , - 5659 , - 4838 , - 4381 , - 4288 , - 4559 , - 5194 , - 369 , - 1732 , - 3459 , - 5550 , - 2181 , - 5000 , - 2359 , - 82 , - 3993 , - 2444 , - 1259 , - 438 , - 5805 , - 5712 , - 159 , - 794 , - 1793 , - 3156 , - 4883 , - 1150 , - 3605 , - 600 , - 3783 , - 1506 , - 5417 , - 3868 , - 2683 , - 1862 , - 1405 , - 1312 , - 1583 , - 2218 , - 3217 , - 4580 , - 483 , - 2574 , - 5029 , - 2024 , - 5207 , - 2930 , - 1017 , - 5292 , - 4107 , - 3286 , - 2829 , - 2736 , - 3007 , - 3642 , - 4641 , - 180 , - 1907 , - 3998 , - 629 , - 3448 , - 807 , - 4354 , - 2441 , - 892 , - 5531 , - 4710 , - 4253 , - 4160 , - 4431 , - 5066 , - 241 , - 1604 , - 3331 , - 5422 , - 2053 , - 4872 , - 2231 , - 5778 , - 3865 , - 2316 , - 1131 , - 310 , - 5677 , - 5584 , - 31 , - 666 , - 1665 , - 3028 , - 4755 , - 1022 , - 3477 , - 472 , - 3655 , - 1378 , - 5289 , - 3740 , - 2555 , - 1734 , - 1277 , - 1184 , - 1455 , - 2090 , - 3089 , - 4452 , - 355 , - 2446 , - 4901 , - 1896 , - 5079 , - 2802 , - 889 , - 5164 , - 3979 , - 3158 , - 2701 , - 2608 , - 2879 , - 3514 , - 4513 , - 52 , - 1779 , - 3870 , - 501 , - 3320 , - 679 , - 4226 , - 2313 , - 764 , - 5403 , - 4582 , - 4125 , - 4032 , - 4303 , - 4938 , - 113 , - 1476 , - 3203 , - 5294 , - 1925 , - 4744 , - 2103 , - 5650 , - 3737 , - 2188 , - 1003 , - 182 , - 5549 , - 5456 , - 5727 , - 538 , - 1537 , - 2900 , - 4627 , - 894 , - 3349 , - 344 , - 3527 , - 1250 , - 5161 , - 3612 , - 2427 , - 1606 , - 1149 , - 1056 , - 1327 , - 1962 , - 2961 , - 4324 , - 227 , - 2318 , - 4773 , - 1768 , - 4951 , - 2674 , - 761 , - 5036 , - 3851 , - 3030 , - 2573 , - 2480 , - 2751 , - 3386 , - 4385 , - 5748 , - 1651 , - 3742 , - 373 , - 3192 , - 551 , - 4098 , - 2185 , - 636 , - 5275 , - 4454 , - 3997 , - 3904 , - 4175 , - 4810 , - 5809 , - 1348 , - 3075 , - 5166 , - 1797 , - 4616 , - 1975 , - 5522 , - 3609 , - 2060 , - 875 , - 54 , - 5421 , - 5328 , - 5599 , - 410 , - 1409 , - 2772 , - 4499 , - 766 , - 3221 , - 216 , - 3399 , - 1122 , - 5033 , - 3484 , - 2299 , - 1478 , - 1021 , - 928 , - 1199 , - 1834 , - 2833 , - 4196 , - 99 , - 2190 , - 4645 , - 1640 , - 4823 , - 2546 , - 633 , - 4908 , - 3723 , - 2902 , - 2445 , - 2352 , - 2623 , - 3258 , - 4257 , - 5620 , - 1523 , - 3614 , - 245 , - 3064 , - 423 , - 3970 , - 2057 , - 508 , - 5147 , - 4326 , - 3869 , - 3776 , - 4047 , - 4682 , - 5681 , - 1220 , - 2947 , - 5038 , - 1669 , - 4488 , - 1847 , - 5394 , - 3481 , - 1932 , - 747 , - 5750 , - 5293 , - 5200 , - 5471 , - 282 , - 1281 , - 2644 , - 4371 , - 638 , - 3093 , - 88 , - 3271 , - 994 , - 4905 , - 3356 , - 2171 , - 1350 , - 893 , - 800 , - 1071 , - 1706 , - 2705 , - 4068 , - 5795 , - 2062 , - 4517 , - 1512 , - 4695 , - 2418 , - 505 , - 4780 , - 3595 , - 2774 , - 2317 , - 2224 , - 2495 , - 3130 , - 4129 , - 5492 , - 1395 , - 3486 , - 117 , - 2936 , - 295 , - 3842 , - 1929 , - 380 , - 5019 , - 4198 , - 3741 , - 3648 , - 3919 , - 4554 , - 5553 , - 1092 , - 2819 , - 4910 , - 1541 , - 4360 , - 1719 , - 5266 , - 3353 , - 1804 , - 619 , - 5622 , - 5165 , - 5072 , - 5343 , - 154 , - 1153 , - 2516 , - 4243 , - 510 , - 2965 , - 5784 , - 3143 , - 866 , - 4777 , - 3228 , - 2043 , - 1222 , - 765 , - 672 , - 943 , - 1578 , - 2577 , - 3940 , - 5667 , - 1934 , - 4389 , - 1384 , - 4567 , - 2290 , - 377 , - 4652 , - 3467 , - 2646 , - 2189 , - 2096 , - 2367 , - 3002 , - 4001 , - 5364 , - 1267 , - 3358 , - 5813 , - 2808 , - 167 , - 3714 , - 1801 , - 252 , - 4891 , - 4070 , - 3613 , - 3520 , - 3791 , - 4426 , - 5425 , - 964 , - 2691 , - 4782 , - 1413 , - 4232 , - 1591 , - 5138 , - 3225 , - 1676 , - 491 , - 5494 , - 5037 , - 4944 , - 5215 , - 26 , - 1025 , - 2388 , - 4115 , - 382 , - 2837 , - 5656 , - 3015 , - 738 , - 4649 , - 3100 , - 1915 , - 1094 , - 637 , - 544 , - 815 , - 1450 , - 2449 , - 3812 , - 5539 , - 1806 , - 4261 , - 1256 , - 4439 , - 2162 , - 249 , - 4524 , - 3339 , - 2518 , - 2061 , - 1968 , - 2239 , - 2874 , - 3873 , - 5236 , - 1139 , - 3230 , - 5685 , - 2680 , - 39 , - 3586 , - 1673 , - 124 , - 4763 , - 3942 , - 3485 , - 3392 , - 3663 , - 4298 , - 5297 , - 836 , - 2563 , - 4654 , - 1285 , - 4104 , - 1463 , - 5010 , - 3097 , - 1548 , - 363 , - 5366 , - 4909 , - 4816 , - 5087 , - 5722 , - 897 , - 2260 , - 3987 , - 254 , - 2709 , - 5528 , - 2887 , - 610 , - 4521 , - 2972 , - 1787 , - 966 , - 509 , - 416 , - 687 , - 1322 , - 2321 , - 3684 , - 5411 , - 1678 , - 4133 , - 1128 , - 4311 , - 2034 , - 121 , - 4396 , - 3211 , - 2390 , - 1933 , - 1840 , - 2111 , - 2746 , - 3745 , - 5108 , - 1011 , - 3102 , - 5557 , - 2552 , - 5735 , - 3458 , - 1545 , - 5820 , - 4635 , - 3814 , - 3357 , - 3264 , - 3535 , - 4170 , - 5169 , - 708 , - 2435 , - 4526 , - 1157 , - 3976 , - 1335 , - 4882 , - 2969 , - 1420 , - 235 , - 5238 , - 4781 , - 4688 , - 4959 , - 5594 , - 769 , - 2132 , - 3859 , - 126 , - 2581 , - 5400 , - 2759 , - 482 , - 4393 , - 2844 , - 1659 , - 838 , - 381 , - 288 , - 559 , - 1194 , - 2193 , - 3556 , - 5283 , - 1550 , - 4005 , - 1000 , - 4183 , - 1906 , - 5817 , - 4268 , - 3083 , - 2262 , - 1805 , - 1712 , - 1983 , - 2618 , - 3617 , - 4980 , - 883 , - 2974 , - 5429 , - 2424 , - 5607 , - 3330 , - 1417 , - 5692 , - 4507 , - 3686 , - 3229 , - 3136 , - 3407 , - 4042 , - 5041 , - 580 , - 2307 , - 4398 , - 1029 , - 3848 , - 1207 , - 4754 , - 2841 , - 1292 , - 107 , - 5110 , - 4653 , - 4560 , - 4831 , - 5466 , - 641 , - 2004 , - 3731 , - 5822 , - 2453 , - 5272 , - 2631 , - 354 , - 4265 , - 2716 , - 1531 , - 710 , - 253 , - 160 , - 431 , - 1066 , - 2065 , - 3428 , - 5155 , - 1422 , - 3877 , - 872 , - 4055 , - 1778 , - 5689 , - 4140 , - 2955 , - 2134 , - 1677 , - 1584 , - 1855 , - 2490 , - 3489 , - 4852 , - 755 , - 2846 , - 5301 , - 2296 , - 5479 , - 3202 , - 1289 , - 5564 , - 4379 , - 3558 , - 3101 , - 3008 , - 3279 , - 3914 , - 4913 , - 452 , - 2179 , - 4270 , - 901 , - 3720 , - 1079 , - 4626 , - 2713 , - 1164 , - 5803 , - 4982 , - 4525 , - 4432 , - 4703 , - 5338 , - 513 , - 1876 , - 3603 , - 5694 , - 2325 , - 5144 , - 2503 , - 226 , - 4137 , - 2588 , - 1403 , - 582 , - 125 , - 32 , - 303 , - 938 , - 1937 , - 3300 , - 5027 , - 1294 , - 3749 , - 744 , - 3927 , - 1650 , - 5561 , - 4012 , - 2827 , - 2006 , - 1549 , - 1456 , - 1727 , - 2362 , - 3361 , - 4724 , - 627 , - 2718 , - 5173 , - 2168 , - 5351 , - 3074 , - 1161 , - 5436 , - 4251 , - 3430 , - 2973 , - 2880 , - 3151 , - 3786 , - 4785 , - 324 , - 2051 , - 4142 , - 773 , - 3592 , - 951 , - 4498 , - 2585 , - 1036 , - 5675 , - 4854 , - 4397 , - 4304 , - 4575 , - 5210 , - 385 , - 1748 , - 3475 , - 5566 , - 2197 , - 5016 , - 2375 , - 98 , - 4009 , - 2460 , - 1275 , - 454 , - 5821 , - 5728 , - 175 , - 810 , - 1809 , - 3172 , - 4899 , - 1166 , - 3621 , - 616 , - 3799 , - 1522 , - 5433 , - 3884 , - 2699 , - 1878 , - 1421 , - 1328 , - 1599 , - 2234 , - 3233 , - 4596 , - 499 , - 2590 , - 5045 , - 2040 , - 5223 , - 2946 , - 1033 , - 5308 , - 4123 , - 3302 , - 2845 , - 2752 , - 3023 , - 3658 , - 4657 , - 196 , - 1923 , - 4014 , - 645 , - 3464 , - 823 , - 4370 , - 2457 , - 908 , - 5547 , - 4726 , - 4269 , - 4176 , - 4447 , - 5082 , - 257 , - 1620 , - 3347 , - 5438 , - 2069 , - 4888 , - 2247 , - 5794 , - 3881 , - 2332 , - 1147 , - 326 , - 5693 , - 5600 , - 47 , - 682 , - 1681 , - 3044 , - 4771 , - 1038 , - 3493 , - 488 , - 3671 , - 1394 , - 5305 , - 3756 , - 2571 , - 1750 , - 1293 , - 1200 , - 1471 , - 2106 , - 3105 , - 4468 , - 371 , - 2462 , - 4917 , - 1912 , - 5095 , - 2818 , - 905 , - 5180 , - 3995 , - 3174 , - 2717 , - 2624 , - 2895 , - 3530 , - 4529 , - 68 , - 1795 , - 3886 , - 517 , - 3336 , - 695 , - 4242 , - 2329 , - 780 , - 5419 , - 4598 , - 4141 , - 4048 , - 4319 , - 4954 , - 129 , - 1492 , - 3219 , - 5310 , - 1941 , - 4760 , - 2119 , - 5666 , - 3753 , - 2204 , - 1019 , - 198 , - 5565 , - 5472 , - 5743 , - 554 , - 1553 , - 2916 , - 4643 , - 910 , - 3365 , - 360 , - 3543 , - 1266 , - 5177 , - 3628 , - 2443 , - 1622 , - 1165 , - 1072 , - 1343 , - 1978 , - 2977 , - 4340 , - 243 , - 2334 , - 4789 , - 1784 , - 4967 , - 2690 , - 777 , - 5052 , - 3867 , - 3046 , - 2589 , - 2496 , - 2767 , - 3402 , - 4401 , - 5764 , - 1667 , - 3758 , - 389 , - 3208 , - 567 , - 4114 , - 2201 , - 652 , - 5291 , - 4470 , - 4013 , - 3920 , - 4191 , - 4826 , - 1 , - 1364 , - 3091 , - 5182 , - 1813 , - 4632 , - 1991 , - 5538 , - 3625 , - 2076 , - 891 , - 70 , - 5437 , - 5344 , - 5615 , - 426 , - 1425 , - 2788 , - 4515 , - 782 , - 3237 , - 232 , - 3415 , - 1138 , - 5049 , - 3500 , - 2315 , - 1494 , - 1037 , - 944 , - 1215 , - 1850 , - 2849 , - 4212 , - 115 , - 2206 , - 4661 , - 1656 , - 4839 , - 2562 , - 649 , - 4924 , - 3739 , - 2918 , - 2461 , - 2368 , - 2639 , - 3274 , - 4273 , - 5636 , - 1539 , - 3630 , - 261 , - 3080 , - 439 , - 3986 , - 2073 , - 524 , - 5163 , - 4342 , - 3885 , - 3792 , - 4063 , - 4698 , - 5697 , - 1236 , - 2963 , - 5054 , - 1685 , - 4504 , - 1863 , - 5410 , - 3497 , - 1948 , - 763 , - 5766 , - 5309 , - 5216 , - 5487 , - 298 , - 1297 , - 2660 , - 4387 , - 654 , - 3109 , - 104 , - 3287 , - 1010 , - 4921 , - 3372 , - 2187 , - 1366 , - 909 , - 816 , - 1087 , - 1722 , - 2721 , - 4084 , - 5811 , - 2078 , - 4533 , - 1528 , - 4711 , - 2434 , - 521 , - 4796 , - 3611 , - 2790 , - 2333 , - 2240 , - 2511 , - 3146 , - 4145 , - 5508 , - 1411 , - 3502 , - 133 , - 2952 , - 311 , - 3858 , - 1945 , - 396 , - 5035 , - 4214 , - 3757 , - 3664 , - 3935 , - 4570 , - 5569 , - 1108 , - 2835 , - 4926 , - 1557 , - 4376 , - 1735 , - 5282 , - 3369 , - 1820 , - 635 , - 5638 , - 5181 , - 5088 , - 5359 , - 170 , - 1169 , - 2532 , - 4259 , - 526 , - 2981 , - 5800 , - 3159 , - 882 , - 4793 , - 3244 , - 2059 , - 1238 , - 781 , - 688 , - 959 , - 1594 , - 2593 , - 3956 , - 5683 , - 1950 , - 4405 , - 1400 , - 4583 , - 2306 , - 393 , - 4668 , - 3483 , - 2662 , - 2205 , - 2112 , - 2383 , - 3018 , - 4017 , - 5380 , - 1283 , - 3374 , - 5 , - 2824 , - 183 , - 3730 , - 1817 , - 268 , - 4907 , - 4086 , - 3629 , - 3536 , - 3807 , - 4442 , - 5441 , - 980 , - 2707 , - 4798 , - 1429 , - 4248 , - 1607 , - 5154 , - 3241 , - 1692 , - 507 , - 5510 , - 5053 , - 4960 , - 5231 , - 42 , - 1041 , - 2404 , - 4131 , - 398 , - 2853 , - 5672 , - 3031 , - 754 , - 4665 , - 3116 , - 1931 , - 1110 , - 653 , - 560 , - 831 , - 1466 , - 2465 , - 3828 , - 5555 , - 1822 , - 4277 , - 1272 , - 4455 , - 2178 , - 265 , - 4540 , - 3355 , - 2534 , - 2077 , - 1984 , - 2255 , - 2890 , - 3889 , - 5252 , - 1155 , - 3246 , - 5701 , - 2696 , - 55 , - 3602 , - 1689 , - 140 , - 4779 , - 3958 , - 3501 , - 3408 , - 3679 , - 4314 , - 5313 , - 852 , - 2579 , - 4670 , - 1301 , - 4120 , - 1479 , - 5026 , - 3113 , - 1564 , - 379 , - 5382 , - 4925 , - 4832 , - 5103 , - 5738 , - 913 , - 2276 , - 4003 , - 270 , - 2725 , - 5544 , - 2903 , - 626 , - 4537 , - 2988 , - 1803 , - 982 , - 525 , - 432 , - 703 , - 1338 , - 2337 , - 3700 , - 5427 , - 1694 , - 4149 , - 1144 , - 4327 , - 2050 , - 137 , - 4412 , - 3227 , - 2406 , - 1949 , - 1856 , - 2127 , - 2762 , - 3761 , - 5124 , - 1027 , - 3118 , - 5573 , - 2568 , - 5751 , - 3474 , - 1561 , - 12 , - 4651 , - 3830 , - 3373 , - 3280 , - 3551 , - 4186 , - 5185 , - 724 , - 2451 , - 4542 , - 1173 , - 3992 , - 1351 , - 4898 , - 2985 , - 1436 , - 251 , - 5254 , - 4797 , - 4704 , - 4975 , - 5610 , - 785 , - 2148 , - 3875 , - 142 , - 2597 , - 5416 , - 2775 , - 498 , - 4409 , - 2860 , - 1675 , - 854 , - 397 , - 304 , - 575 , - 1210 , - 2209 , - 3572 , - 5299 , - 1566 , - 4021 , - 1016 , - 4199 , - 1922 , - 9 , - 4284 , - 3099 , - 2278 , - 1821 , - 1728 , - 1999 , - 2634 , - 3633 , - 4996 , - 899 , - 2990 , - 5445 , - 2440 , - 5623 , - 3346 , - 1433 , - 5708 , - 4523 , - 3702 , - 3245 , - 3152 , - 3423 , - 4058 , - 5057 , - 596 , - 2323 , - 4414 , - 1045 , - 3864 , - 1223 , - 4770 , - 2857 , - 1308 , - 123 , - 5126 , - 4669 , - 4576 , - 4847 , - 5482 , - 657 , - 2020 , - 3747 , - 14 , - 2469 , - 5288 , - 2647 , - 370 , - 4281 , - 2732 , - 1547 , - 726 , - 269 , - 176 , - 447 , - 1082 , - 2081 , - 3444 , - 5171 , - 1438 , - 3893 , - 888 , - 4071 , - 1794 , - 5705 , - 4156 , - 2971 , - 2150 , - 1693 , - 1600 , - 1871 , - 2506 , - 3505 , - 4868 , - 771 , - 2862 , - 5317 , - 2312 , - 5495 , - 3218 , - 1305 , - 5580 , - 4395 , - 3574 , - 3117 , - 3024 , - 3295 , - 3930 , - 4929 , - 468 , - 2195 , - 4286 , - 917 , - 3736 , - 1095 , - 4642 , - 2729 , - 1180 , - 5819 , - 4998 , - 4541 , - 4448 , - 4719 , - 5354 , - 529 , - 1892 , - 3619 , - 5710 , - 2341 , - 5160 , - 2519 , - 242 , - 4153 , - 2604 , - 1419 , - 598 , - 141 , - 48 , - 319 , - 954 , - 1953 , - 3316 , - 5043 , - 1310 , - 3765 , - 760 , - 3943 , - 1666 , - 5577 , - 4028 , - 2843 , - 2022 , - 1565 , - 1472 , - 1743 , - 2378 , - 3377 , - 4740 , - 643 , - 2734 , - 5189 , - 2184 , - 5367 , - 3090 , - 1177 , - 5452 , - 4267 , - 3446 , - 2989 , - 2896 , - 3167 , - 3802 , - 4801 , - 340 , - 2067 , - 4158 , - 789 , - 3608 , - 967 , - 4514 , - 2601 , - 1052 , - 5691 , - 4870 , - 4413 , - 4320 , - 4591 , - 5226 , - 401 , - 1764 , - 3491 , - 5582 , - 2213 , - 5032 , - 2391 , - 114 , - 4025 , - 2476 , - 1291 , - 470 , - 13 , - 5744 , - 191 , - 826 , - 1825 , - 3188 , - 4915 , - 1182 , - 3637 , - 632 , - 3815 , - 1538 , - 5449 , - 3900 , - 2715 , - 1894 , - 1437 , - 1344 , - 1615 , - 2250 , - 3249 , - 4612 , - 515 , - 2606 , - 5061 , - 2056 , - 5239 , - 2962 , - 1049 , - 5324 , - 4139 , - 3318 , - 2861 , - 2768 , - 3039 , - 3674 , - 4673 , - 212 , - 1939 , - 4030 , - 661 , - 3480 , - 839 , - 4386 , - 2473 , - 924 , - 5563 , - 4742 , - 4285 , - 4192 , - 4463 , - 5098 , - 273 , - 1636 , - 3363 , - 5454 , - 2085 , - 4904 , - 2263 , - 5810 , - 3897 , - 2348 , - 1163 , - 342 , - 5709 , - 5616 , - 63 , - 698 , - 1697 , - 3060 , - 4787 , - 1054 , - 3509 , - 504 , - 3687 , - 1410 , - 5321 , - 3772 , - 2587 , - 1766 , - 1309 , - 1216 , - 1487 , - 2122 , - 3121 , - 4484 , - 387 , - 2478 , - 4933 , - 1928 , - 5111 , - 2834 , - 921 , - 5196 , - 4011 , - 3190 , - 2733 , - 2640 , - 2911 , - 3546 , - 4545 , - 84 , - 1811 , - 3902 , - 533 , - 3352 , - 711 , - 4258 , - 2345 , - 796 , - 5435 , - 4614 , - 4157 , - 4064 , - 4335 , - 4970 , - 145 , - 1508 , - 3235 , - 5326 , - 1957 , - 4776 , - 2135 , - 5682 , - 3769 , - 2220 , - 1035 , - 214 , - 5581 , - 5488 , - 5759 , - 570 , - 1569 , - 2932 , - 4659 , - 926 , - 3381 , - 376 , - 3559 , - 1282 , - 5193 , - 3644 , - 2459 , - 1638 , - 1181 , - 1088 , - 1359 , - 1994 , - 2993 , - 4356 , - 259 , - 2350 , - 4805 , - 1800 , - 4983 , - 2706 , - 793 , - 5068 , - 3883 , - 3062 , - 2605 , - 2512 , - 2783 , - 3418 , - 4417 , - 5780 , - 1683 , - 3774 , - 405 , - 3224 , - 583 , - 4130 , - 2217 , - 668 , - 5307 , - 4486 , - 4029 , - 3936 , - 4207 , - 4842 , - 17 , - 1380 , - 3107 , - 5198 , - 1829 , - 4648 , - 2007 , - 5554 , - 3641 , - 2092 , - 907 , - 86 , - 5453 , - 5360 , - 5631 , - 442 , - 1441 , - 2804 , - 4531 , - 798 , - 3253 , - 248 , - 3431 , - 1154 , - 5065 , - 3516 , - 2331 , - 1510 , - 1053 , - 960 , - 1231 , - 1866 , - 2865 , - 4228 , - 131 , - 2222 , - 4677 , - 1672 , - 4855 , - 2578 , - 665 , - 4940 , - 3755 , - 2934 , - 2477 , - 2384 , - 2655 , - 3290 , - 4289 , - 5652 , - 1555 , - 3646 , - 277 , - 3096 , - 455 , - 4002 , - 2089 , - 540 , - 5179 , - 4358 , - 3901 , - 3808 , - 4079 , - 4714 , - 5713 , - 1252 , - 2979 , - 5070 , - 1701 , - 4520 , - 1879 , - 5426 , - 3513 , - 1964 , - 779 , - 5782 , - 5325 , - 5232 , - 5503 , - 314 , - 1313 , - 2676 , - 4403 , - 670 , - 3125 , - 120 , - 3303 , - 1026 , - 4937 , - 3388 , - 2203 , - 1382 , - 925 , - 832 , - 1103 , - 1738 , - 2737 , - 4100 , - 3 , - 2094 , - 4549 , - 1544 , - 4727 , - 2450 , - 537 , - 4812 , - 3627 , - 2806 , - 2349 , - 2256 , - 2527 , - 3162 , - 4161 , - 5524 , - 1427 , - 3518 , - 149 , - 2968 , - 327 , - 3874 , - 1961 , - 412 , - 5051 , - 4230 , - 3773 , - 3680 , - 3951 , - 4586 , - 5585 , - 1124 , - 2851 , - 4942 , - 1573 , - 4392 , - 1751 , - 5298 , - 3385 , - 1836 , - 651 , - 5654 , - 5197 , - 5104 , - 5375 , - 186 , - 1185 , - 2548 , - 4275 , - 542 , - 2997 , - 5816 , - 3175 , - 898 , - 4809 , - 3260 , - 2075 , - 1254 , - 797 , - 704 , - 975 , - 1610 , - 2609 , - 3972 , - 5699 , - 1966 , - 4421 , - 1416 , - 4599 , - 2322 , - 409 , - 4684 , - 3499 , - 2678 , - 2221 , - 2128 , - 2399 , - 3034 , - 4033 , - 5396 , - 1299 , - 3390 , - 21 , - 2840 , - 199 , - 3746 , - 1833 , - 284 , - 4923 , - 4102 , - 3645 , - 3552 , - 3823 , - 4458 , - 5457 , - 996 , - 2723 , - 4814 , - 1445 , - 4264 , - 1623 , - 5170 , - 3257 , - 1708 , - 523 , - 5526 , - 5069 , - 4976 , - 5247 , - 58 , - 1057 , - 2420 , - 4147 , - 414 , - 2869 , - 5688 , - 3047 , - 770 , - 4681 , - 3132 , - 1947 , - 1126 , - 669 , - 576 , - 847 , - 1482 , - 2481 , - 3844 , - 5571 , - 1838 , - 4293 , - 1288 , - 4471 , - 2194 , - 281 , - 4556 , - 3371 , - 2550 , - 2093 , - 2000 , - 2271 , - 2906 , - 3905 , - 5268 , - 1171 , - 3262 , - 5717 , - 2712 , - 71 , - 3618 , - 1705 , - 156 , - 4795 , - 3974 , - 3517 , - 3424 , - 3695 , - 4330 , - 5329 , - 868 , - 2595 , - 4686 , - 1317 , - 4136 , - 1495 , - 5042 , - 3129 , - 1580 , - 395 , - 5398 , - 4941 , - 4848 , - 5119 , - 5754 , - 929 , - 2292 , - 4019 , - 286 , - 2741 , - 5560 , - 2919 , - 642 , - 4553 , - 3004 , - 1819 , - 998 , - 541 , - 448 , - 719 , - 1354 , - 2353 , - 3716 , - 5443 , - 1710 , - 4165 , - 1160 , - 4343 , - 2066 , - 153 , - 4428 , - 3243 , - 2422 , - 1965 , - 1872 , - 2143 , - 2778 , - 3777 , - 5140 , - 1043 , - 3134 , - 5589 , - 2584 , - 5767 , - 3490 , - 1577 , - 28 , - 4667 , - 3846 , - 3389 , - 3296 , - 3567 , - 4202 , - 5201 , - 740 , - 2467 , - 4558 , - 1189 , - 4008 , - 1367 , - 4914 , - 3001 , - 1452 , - 267 , - 5270 , - 4813 , - 4720 , - 4991 , - 5626 , - 801 , - 2164 , - 3891 , - 158 , - 2613 , - 5432 , - 2791 , - 514 , - 4425 , - 2876 , - 1691 , - 870 , - 413 , - 320 , - 591 , - 1226 , - 2225 , - 3588 , - 5315 , - 1582 , - 4037 , - 1032 , - 4215 , - 1938 , - 25 , - 4300 , - 3115 , - 2294 , - 1837 , - 1744 , - 2015 , - 2650 , - 3649 , - 5012 , - 915 , - 3006 , - 5461 , - 2456 , - 5639 , - 3362 , - 1449 , - 5724 , - 4539 , - 3718 , - 3261 , - 3168 , - 3439 , - 4074 , - 5073 , - 612 , - 2339 , - 4430 , - 1061 , - 3880 , - 1239 , - 4786 , - 2873 , - 1324 , - 139 , - 5142 , - 4685 , - 4592 , - 4863 , - 5498 , - 673 , - 2036 , - 3763 , - 30 , - 2485 , - 5304 , - 2663 , - 386 , - 4297 , - 2748 , - 1563 , - 742 , - 285 , - 192 , - 463 , - 1098 , - 2097 , - 3460 , - 5187 , - 1454 , - 3909 , - 904 , - 4087 , - 1810 , - 5721 , - 4172 , - 2987 , - 2166 , - 1709 , - 1616 , - 1887 , - 2522 , - 3521 , - 4884 , - 787 , - 2878 , - 5333 , - 2328 , - 5511 , - 3234 , - 1321 , - 5596 , - 4411 , - 3590 , - 3133 , - 3040 , - 3311 , - 3946 , - 4945 , - 484 , - 2211 , - 4302 , - 933 , - 3752 , - 1111 , - 4658 , - 2745 , - 1196 , - 11 , - 5014 , - 4557 , - 4464 , - 4735 , - 5370 , - 545 , - 1908 , - 3635 , - 5726 , - 2357 , - 5176 , - 2535 , - 258 , - 4169 , - 2620 , - 1435 , - 614 , - 157 , - 64 , - 335 , - 970 , - 1969 , - 3332 , - 5059 , - 1326 , - 3781 , - 776 , - 3959 , - 1682 , - 5593 , - 4044 , - 2859 , - 2038 , - 1581 , - 1488 , - 1759 , - 2394 , - 3393 , - 4756 , - 659 , - 2750 , - 5205 , - 2200 , - 5383 , - 3106 , - 1193 , - 5468 , - 4283 , - 3462 , - 3005 , - 2912 , - 3183 , - 3818 , - 4817 , - 356 , - 2083 , - 4174 , - 805 , - 3624 , - 983 , - 4530 , - 2617 , - 1068 , - 5707 , - 4886 , - 4429 , - 4336 , - 4607 , - 5242 , - 417 , - 1780 , - 3507 , - 5598 , - 2229 , - 5048 , - 2407 , - 130 , - 4041 , - 2492 , - 1307 , - 486 , - 29 , - 5760 , - 207 , - 842 , - 1841 , - 3204 , - 4931 , - 1198 , - 3653 , - 648 , - 3831 , - 1554 , - 5465 , - 3916 , - 2731 , - 1910 , - 1453 , - 1360 , - 1631 , - 2266 , - 3265 , - 4628 , - 531 , - 2622 , - 5077 , - 2072 , - 5255 , - 2978 , - 1065 , - 5340 , - 4155 , - 3334 , - 2877 , - 2784 , - 3055 , - 3690 , - 4689 , - 228 , - 1955 , - 4046 , - 677 , - 3496 , - 855 , - 4402 , - 2489 , - 940 , - 5579 , - 4758 , - 4301 , - 4208 , - 4479 , - 5114 , - 289 , - 1652 , - 3379 , - 5470 , - 2101 , - 4920 , - 2279 , - 2 , - 3913 , - 2364 , - 1179 , - 358 , - 5725 , - 5632 , - 79 , - 714 , - 1713 , - 3076 , - 4803 , - 1070 , - 3525 , - 520 , - 3703 , - 1426 , - 5337 , - 3788 , - 2603 , - 1782 , - 1325 , - 1232 , - 1503 , - 2138 , - 3137 , - 4500 , - 403 , - 2494 , - 4949 , - 1944 , - 5127 , - 2850 , - 937 , - 5212 , - 4027 , - 3206 , - 2749 , - 2656 , - 2927 , - 3562 , - 4561 , - 100 , - 1827 , - 3918 , - 549 , - 3368 , - 727 , - 4274 , - 2361 , - 812 , - 5451 , - 4630 , - 4173 , - 4080 , - 4351 , - 4986 , - 161 , - 1524 , - 3251 , - 5342 , - 1973 , - 4792 , - 2151 , - 5698 , - 3785 , - 2236 , - 1051 , - 230 , - 5597 , - 5504 , - 5775 , - 586 , - 1585 , - 2948 , - 4675 , - 942 , - 3397 , - 392 , - 3575 , - 1298 , - 5209 , - 3660 , - 2475 , - 1654 , - 1197 , - 1104 , - 1375 , - 2010 , - 3009 , - 4372 , - 275 , - 2366 , - 4821 , - 1816 , - 4999 , - 2722 , - 809 , - 5084 , - 3899 , - 3078 , - 2621 , - 2528 , - 2799 , - 3434 , - 4433 , - 5796 , - 1699 , - 3790 , - 421 , - 3240 , - 599 , - 4146 , - 2233 , - 684 , - 5323 , - 4502 , - 4045 , - 3952 , - 4223 , - 4858 , - 33 , - 1396 , - 3123 , - 5214 , - 1845 , - 4664 , - 2023 , - 5570 , - 3657 , - 2108 , - 923 , - 102 , - 5469 , - 5376 , - 5647 , - 458 , - 1457 , - 2820 , - 4547 , - 814 , - 3269 , - 264 , - 3447 , - 1170 , - 5081 , - 3532 , - 2347 , - 1526 , - 1069 , - 976 , - 1247 , - 1882 , - 2881 , - 4244 , - 147 , - 2238 , - 4693 , - 1688 , - 4871 , - 2594 , - 681 , - 4956 , - 3771 , - 2950 , - 2493 , - 2400 , - 2671 , - 3306 , - 4305 , - 5668 , - 1571 , - 3662 , - 293 , - 3112 , - 471 , - 4018 , - 2105 , - 556 , - 5195 , - 4374 , - 3917 , - 3824 , - 4095 , - 4730 , - 5729 , - 1268 , - 2995 , - 5086 , - 1717 , - 4536 , - 1895 , - 5442 , - 3529 , - 1980 , - 795 , - 5798 , - 5341 , - 5248 , - 5519 , - 330 , - 1329 , - 2692 , - 4419 , - 686 , - 3141 , - 136 , - 3319 , - 1042 , - 4953 , - 3404 , - 2219 , - 1398 , - 941 , - 848 , - 1119 , - 1754 , - 2753 , - 4116 , - 19 , - 2110 , - 4565 , - 1560 , - 4743 , - 2466 , - 553 , - 4828 , - 3643 , - 2822 , - 2365 , - 2272 , - 2543 , - 3178 , - 4177 , - 5540 , - 1443 , - 3534 , - 165 , - 2984 , - 343 , - 3890 , - 1977 , - 428 , - 5067 , - 4246 , - 3789 , - 3696 , - 3967 , - 4602 , - 5601 , - 1140 , - 2867 , - 4958 , - 1589 , - 4408 , - 1767 , - 5314 , - 3401 , - 1852 , - 667 , - 5670 , - 5213 , - 5120 , - 5391 , - 202 , - 1201 , - 2564 , - 4291 , - 558 , - 3013 , - 8 , - 3191 , - 914 , - 4825 , - 3276 , - 2091 , - 1270 , - 813 , - 720 , - 991 , - 1626 , - 2625 , - 3988 , - 5715 , - 1982 , - 4437 , - 1432 , - 4615 , - 2338 , - 425 , - 4700 , - 3515 , - 2694 , - 2237 , - 2144 , - 2415 , - 3050 , - 4049 , - 5412 , - 1315 , - 3406 , - 37 , - 2856 , - 215 , - 3762 , - 1849 , - 300 , - 4939 , - 4118 , - 3661 , - 3568 , - 3839 , - 4474 , - 5473 , - 1012 , - 2739 , - 4830 , - 1461 , - 4280 , - 1639 , - 5186 , - 3273 , - 1724 , - 539 , - 5542 , - 5085 , - 4992 , - 5263 , - 74 , - 1073 , - 2436 , - 4163 , - 430 , - 2885 , - 5704 , - 3063 , - 786 , - 4697 , - 3148 , - 1963 , - 1142 , - 685 , - 592 , - 863 , - 1498 , - 2497 , - 3860 , - 5587 , - 1854 , - 4309 , - 1304 , - 4487 , - 2210 , - 297 , - 4572 , - 3387 , - 2566 , - 2109 , - 2016 , - 2287 , - 2922 , - 3921 , - 5284 , - 1187 , - 3278 , - 5733 , - 2728 , - 87 , - 3634 , - 1721 , - 172 , - 4811 , - 3990 , - 3533 , - 3440 , - 3711 , - 4346 , - 5345 , - 884 , - 2611 , - 4702 , - 1333 , - 4152 , - 1511 , - 5058 , - 3145 , - 1596 , - 411 , - 5414 , - 4957 , - 4864 , - 5135 , - 5770 , - 945 , - 2308 , - 4035 , - 302 , - 2757 , - 5576 , - 2935 , - 658 , - 4569 , - 3020 , - 1835 , - 1014 , - 557 , - 464 , - 735 , - 1370 , - 2369 , - 3732 , - 5459 , - 1726 , - 4181 , - 1176 , - 4359 , - 2082 , - 169 , - 4444 , - 3259 , - 2438 , - 1981 , - 1888 , - 2159 , - 2794 , - 3793 , - 5156 , - 1059 , - 3150 , - 5605 , - 2600 , - 5783 , - 3506 , - 1593 , - 44 , - 4683 , - 3862 , - 3405 , - 3312 , - 3583 , - 4218 , - 5217 , - 756 , - 2483 , - 4574 , - 1205 , - 4024 , - 1383 , - 4930 , - 3017 , - 1468 , - 283 , - 5286 , - 4829 , - 4736 , - 5007 , - 5642 , - 817 , - 2180 , - 3907 , - 174 , - 2629 , - 5448 , - 2807 , - 530 , - 4441 , - 2892 , - 1707 , - 886 , - 429 , - 336 , - 607 , - 1242 , - 2241 , - 3604 , - 5331 , - 1598 , - 4053 , - 1048 , - 4231 , - 1954 , - 41 , - 4316 , - 3131 , - 2310 , - 1853 , - 1760 , - 2031 , - 2666 , - 3665 , - 5028 , - 931 , - 3022 , - 5477 , - 2472 , - 5655 , - 3378 , - 1465 , - 5740 , - 4555 , - 3734 , - 3277 , - 3184 , - 3455 , - 4090 , - 5089 , - 628 , - 2355 , - 4446 , - 1077 , - 3896 , - 1255 , - 4802 , - 2889 , - 1340 , - 155 , - 5158 , - 4701 , - 4608 , - 4879 , - 5514 , - 689 , - 2052 , - 3779 , - 46 , - 2501 , - 5320 , - 2679 , - 402 , - 4313 , - 2764 , - 1579 , - 758 , - 301 , - 208 , - 479 , - 1114 , - 2113 , - 3476 , - 5203 , - 1470 , - 3925 , - 920 , - 4103 , - 1826 , - 5737 , - 4188 , - 3003 , - 2182 , - 1725 , - 1632 , - 1903 , - 2538 , - 3537 , - 4900 , - 803 , - 2894 , - 5349 , - 2344 , - 5527 , - 3250 , - 1337 , - 5612 , - 4427 , - 3606 , - 3149 , - 3056 , - 3327 , - 3962 , - 4961 , - 500 , - 2227 , - 4318 , - 949 , - 3768 , - 1127 , - 4674 , - 2761 , - 1212 , - 27 , - 5030 , - 4573 , - 4480 , - 4751 , - 5386 , - 561 , - 1924 , - 3651 , - 5742 , - 2373 , - 5192 , - 2551 , - 274 , - 4185 , - 2636 , - 1451 , - 630 , - 173 , - 80 , - 351 , - 986 , - 1985 , - 3348 , - 5075 , - 1342 , - 3797 , - 792 , - 3975 , - 1698 , - 5609 , - 4060 , - 2875 , - 2054 , - 1597 , - 1504 , - 1775 , - 2410 , - 3409 , - 4772 , - 675 , - 2766 , - 5221 , - 2216 , - 5399 , - 3122 , - 1209 , - 5484 , - 4299 , - 3478 , - 3021 , - 2928 , - 3199 , - 3834 , - 4833 , - 372 , - 2099 , - 4190 , - 821 , - 3640 , - 999 , - 4546 , - 2633 , - 1084 , - 5723 , - 4902 , - 4445 , - 4352 , - 4623 , - 5258 , - 433 , - 1796 , - 3523 , - 5614 , - 2245 , - 5064 , - 2423 , - 146 , - 4057 , - 2508 , - 1323 , - 502 , - 45 , - 5776 , - 223 , - 858 , - 1857 , - 3220 , - 4947 , - 1214 , - 3669 , - 664 , - 3847 , - 1570 , - 5481 , - 3932 , - 2747 , - 1926 , - 1469 , - 1376 , - 1647 , - 2282 , - 3281 , - 4644 , - 547 , - 2638 , - 5093 , - 2088 , - 5271 , - 2994 , - 1081 , - 5356 , - 4171 , - 3350 , - 2893 , - 2800 , - 3071 , - 3706 , - 4705 , - 244 , - 1971 , - 4062 , - 693 , - 3512 , - 871 , - 4418 , - 2505 , - 956 , - 5595 , - 4774 , - 4317 , - 4224 , - 4495 , - 5130 , - 305 , - 1668 , - 3395 , - 5486 , - 2117 , - 4936 , - 2295 , - 18 , - 3929 , - 2380 , - 1195 , - 374 , - 5741 , - 5648 , - 95 , - 730 , - 1729 , - 3092 , - 4819 , - 1086 , - 3541 , - 536 , - 3719 , - 1442 , - 5353 , - 3804 , - 2619 , - 1798 , - 1341 , - 1248 , - 1519 , - 2154 , - 3153 , - 4516 , - 419 , - 2510 , - 4965 , - 1960 , - 5143 , - 2866 , - 953 , - 5228 , - 4043 , - 3222 , - 2765 , - 2672 , - 2943 , - 3578 , - 4577 , - 116 , - 1843 , - 3934 , - 565 , - 3384 , - 743 , - 4290 , - 2377 , - 828 , - 5467 , - 4646 , - 4189 , - 4096 , - 4367 , - 5002 , - 177 , - 1540 , - 3267 , - 5358 , - 1989 , - 4808 , - 2167 , - 5714 , - 3801 , - 2252 , - 1067 , - 246 , - 5613 , - 5520 , - 5791 , - 602 , - 1601 , - 2964 , - 4691 , - 958 , - 3413 , - 408 , - 3591 , - 1314 , - 5225 , - 3676 , - 2491 , - 1670 , - 1213 , - 1120 , - 1391 , - 2026 , - 3025 , - 4388 , - 291 , - 2382 , - 4837 , - 1832 , - 5015 , - 2738 , - 825 , - 5100 , - 3915 , - 3094 , - 2637 , - 2544 , - 2815 , - 3450 , - 4449 , - 5812 , - 1715 , - 3806 , - 437 , - 3256 , - 615 , - 4162 , - 2249 , - 700 , - 5339 , - 4518 , - 4061 , - 3968 , - 4239 , - 4874 , - 49 , - 1412 , - 3139 , - 5230 , - 1861 , - 4680 , - 2039 , - 5586 , - 3673 , - 2124 , - 939 , - 118 , - 5485 , - 5392 , - 5663 , - 474 , - 1473 , - 2836 , - 4563 , - 830 , - 3285 , - 280 , - 3463 , - 1186 , - 5097 , - 3548 , - 2363 , - 1542 , - 1085 , - 992 , - 1263 , - 1898 , - 2897 , - 4260 , - 163 , - 2254 , - 4709 , - 1704 , - 4887 , - 2610 , - 697 , - 4972 , - 3787 , - 2966 , - 2509 , - 2416 , - 2687 , - 3322 , - 4321 , - 5684 , - 1587 , - 3678 , - 309 , - 3128 , - 487 , - 4034 , - 2121 , - 572 , - 5211 , - 4390 , - 3933 , - 3840 , - 4111 , - 4746 , - 5745 , - 1284 , - 3011 , - 5102 , - 1733 , - 4552 , - 1911 , - 5458 , - 3545 , - 1996 , - 811 , - 5814 , - 5357 , - 5264 , - 5535 , - 346 , - 1345 , - 2708 , - 4435 , - 702 , - 3157 , - 152 , - 3335 , - 1058 , - 4969 , - 3420 , - 2235 , - 1414 , - 957 , - 864 , - 1135 , - 1770 , - 2769 , - 4132 , - 35 , - 2126 , - 4581 , - 1576 , - 4759 , - 2482 , - 569 , - 4844 , - 3659 , - 2838 , - 2381 , - 2288 , - 2559 , - 3194 , - 4193 , - 5556 , - 1459 , - 3550 , - 181 , - 3000 , - 359 , - 3906 , - 1993 , - 444 , - 5083 , - 4262 , - 3805 , - 3712 , - 3983 , - 4618 , - 5617 , - 1156 , - 2883 , - 4974 , - 1605 , - 4424 , - 1783 , - 5330 , - 3417 , - 1868 , - 683 , - 5686 , - 5229 , - 5136 , - 5407 , - 218 , - 1217 , - 2580 , - 4307 , - 574 , - 3029 , - 24 , - 3207 , - 930 , - 4841 , - 3292 , - 2107 , - 1286 , - 829 , - 736 , - 1007 , - 1642 , - 2641 , - 4004 , - 5731 , - 1998 , - 4453 , - 1448 , - 4631 , - 2354 , - 441 , - 4716 , - 3531 , - 2710 , - 2253 , - 2160 , - 2431 , - 3066 , - 4065 , - 5428 , - 1331 , - 3422 , - 53 , - 2872 , - 231 , - 3778 , - 1865 , - 316 , - 4955 , - 4134 , - 3677 , - 3584 , - 3855 , - 4490 , - 5489 , - 1028 , - 2755 , - 4846 , - 1477 , - 4296 , - 1655 , - 5202 , - 3289 , - 1740 , - 555 , - 5558 , - 5101 , - 5008 , - 5279 , - 90 , - 1089 , - 2452 , - 4179 , - 446 , - 2901 , - 5720 , - 3079 , - 802 , - 4713 , - 3164 , - 1979 , - 1158 , - 701 , - 608 , - 879 , - 1514 , - 2513 , - 3876 , - 5603 , - 1870 , - 4325 , - 1320 , - 4503 , - 2226 , - 313 , - 4588 , - 3403 , - 2582 , - 2125 , - 2032 , - 2303 , - 2938 , - 3937 , - 5300 , - 1203 , - 3294 , - 5749 , - 2744 , - 103 , - 3650 , - 1737 , - 188 , - 4827 , - 4006 , - 3549 , - 3456 , - 3727 , - 4362 , - 5361 , - 900 , - 2627 , - 4718 , - 1349 , - 4168 , - 1527 , - 5074 , - 3161 , - 1612 , - 427 , - 5430 , - 4973 , - 4880 , - 5151 , - 5786 , - 961 , - 2324 , - 4051 , - 318 , - 2773 , - 5592 , - 2951 , - 674 , - 4585 , - 3036 , - 1851 , - 1030 , - 573 , - 480 , - 751 , - 1386 , - 2385 , - 3748 , - 5475 , - 1742 , - 4197 , - 1192 , - 4375 , - 2098 , - 185 , - 4460 , - 3275 , - 2454 , - 1997 , - 1904 , - 2175 , - 2810 , - 3809 , - 5172 , - 1075 , - 3166 , - 5621 , - 2616 , - 5799 , - 3522 , - 1609 , - 60 , - 4699 , - 3878 , - 3421 , - 3328 , - 3599 , - 4234 , - 5233 , - 772 , - 2499 , - 4590 , - 1221 , - 4040 , - 1399 , - 4946 , - 3033 , - 1484 , - 299 , - 5302 , - 4845 , - 4752 , - 5023 , - 5658 , - 833 , - 2196 , - 3923 , - 190 , - 2645 , - 5464 , - 2823 , - 546 , - 4457 , - 2908 , - 1723 , - 902 , - 445 , - 352 , - 623 , - 1258 , - 2257 , - 3620 , - 5347 , - 1614 , - 4069 , - 1064 , - 4247 , - 1970 , - 57 , - 4332 , - 3147 , - 2326 , - 1869 , - 1776 , - 2047 , - 2682 , - 3681 , - 5044 , - 947 , - 3038 , - 5493 , - 2488 , - 5671 , - 3394 , - 1481 , - 5756 , - 4571 , - 3750 , - 3293 , - 3200 , - 3471 , - 4106 , - 5105 , - 644 , - 2371 , - 4462 , - 1093 , - 3912 , - 1271 , - 4818 , - 2905 , - 1356 , - 171 , - 5174 , - 4717 , - 4624 , - 4895 , - 5530 , - 705 , - 2068 , - 3795 , - 62 , - 2517 , - 5336 , - 2695 , - 418 , - 4329 , - 2780 , - 1595 , - 774 , - 317 , - 224 , - 495 , - 1130 , - 2129 , - 3492 , - 5219 , - 1486 , - 3941 , - 936 , - 4119 , - 1842 , - 5753 , - 4204 , - 3019 , - 2198 , - 1741 , - 1648 , - 1919 , - 2554 , - 3553 , - 4916 , - 819 , - 2910 , - 5365 , - 2360 , - 5543 , - 3266 , - 1353 , - 5628 , - 4443 , - 3622 , - 3165 , - 3072 , - 3343 , - 3978 , - 4977 , - 516 , - 2243 , - 4334 , - 965 , - 3784 , - 1143 , - 4690 , - 2777 , - 1228 , - 43 , - 5046 , - 4589 , - 4496 , - 4767 , - 5402 , - 577 , - 1940 , - 3667 , - 5758 , - 2389 , - 5208 , - 2567 , - 290 , - 4201 , - 2652 , - 1467 , - 646 , - 189 , - 96 , - 367 , - 1002 , - 2001 , - 3364 , - 5091 , - 1358 , - 3813 , - 808 , - 3991 , - 1714 , - 5625 , - 4076 , - 2891 , - 2070 , - 1613 , - 1520 , - 1791 , - 2426 , - 3425 , - 4788 , - 691 , - 2782 , - 5237 , - 2232 , - 5415 , - 3138 , - 1225 , - 5500 , - 4315 , - 3494 , - 3037 , - 2944 , - 3215 , - 3850 , - 4849 , - 388 , - 2115 , - 4206 , - 837 , - 3656 , - 1015 , - 4562 , - 2649 , - 1100 , - 5739 , - 4918 , - 4461 , - 4368 , - 4639 , - 5274 , - 449 , - 1812 , - 3539 , - 5630 , - 2261 , - 5080 , - 2439 , - 162 , - 4073 , - 2524 , - 1339 , - 518 , - 61 , - 5792 , - 239 , - 874 , - 1873 , - 3236 , - 4963 , - 1230 , - 3685 , - 680 , - 3863 , - 1586 , - 5497 , - 3948 , - 2763 , - 1942 , - 1485 , - 1392 , - 1663 , - 2298 , - 3297 , - 4660 , - 563 , - 2654 , - 5109 , - 2104 , - 5287 , - 3010 , - 1097 , - 5372 , - 4187 , - 3366 , - 2909 , - 2816 , - 3087 , - 3722 , - 4721 , - 260 , - 1987 , - 4078 , - 709 , - 3528 , - 887 , - 4434 , - 2521 , - 972 , - 5611 , - 4790 , - 4333 , - 4240 , - 4511 , - 5146 , - 321 , - 1684 , - 3411 , - 5502 , - 2133 , - 4952 , - 2311 , - 34 , - 3945 , - 2396 , - 1211 , - 390 , - 5757 , - 5664 , - 111 , - 746 , - 1745 , - 3108 , - 4835 , - 1102 , - 3557 , - 552 , - 3735 , - 1458 , - 5369 , - 3820 , - 2635 , - 1814 , - 1357 , - 1264 , - 1535 , - 2170 , - 3169 , - 4532 , - 435 , - 2526 , - 4981 , - 1976 , - 5159 , - 2882 , - 969 , - 5244 , - 4059 , - 3238 , - 2781 , - 2688 , - 2959 , - 3594 , - 4593 , - 132 , - 1859 , - 3950 , - 581 , - 3400 , - 759 , - 4306 , - 2393 , - 844 , - 5483 , - 4662 , - 4205 , - 4112 , - 4383 , - 5018 , - 193 , - 1556 , - 3283 , - 5374 , - 2005 , - 4824 , - 2183 , - 5730 , - 3817 , - 2268 , - 1083 , - 262 , - 5629 , - 5536 , - 5807 , - 618 , - 1617 , - 2980 , - 4707 , - 974 , - 3429 , - 424 , - 3607 , - 1330 , - 5241 , - 3692 , - 2507 , - 1686 , - 1229 , - 1136 , - 1407 , - 2042 , - 3041 , - 4404 , - 307 , - 2398 , - 4853 , - 1848 , - 5031 , - 2754 , - 841 , - 5116 , - 3931 , - 3110 , - 2653 , - 2560 , - 2831 , - 3466 , - 4465 , - 4 , - 1731 , - 3822 , - 453 , - 3272 , - 631 , - 4178 , - 2265 , - 716 , - 5355 , - 4534 , - 4077 , - 3984 , - 4255 , - 4890 , - 65 , - 1428 , - 3155 , - 5246 , - 1877 , - 4696 , - 2055 , - 5602 , - 3689 , - 2140 , - 955 , - 134 , - 5501 , - 5408 , - 5679 , - 490 , - 1489 , - 2852 , - 4579 , - 846 , - 3301 , - 296 , - 3479 , - 1202 , - 5113 , - 3564 , - 2379 , - 1558 , - 1101 , - 1008 , - 1279 , - 1914 , - 2913 , - 4276 , - 179 , - 2270 , - 4725 , - 1720 , - 4903 , - 2626 , - 713 , - 4988 , - 3803 , - 2982 , - 2525 , - 2432 , - 2703 , - 3338 , - 4337 , - 5700 , - 1603 , - 3694 , - 325 , - 3144 , - 503 , - 4050 , - 2137 , - 588 , - 5227 , - 4406 , - 3949 , - 3856 , - 4127 , - 4762 , - 5761 , - 1300 , - 3027 , - 5118 , - 1749 , - 4568 , - 1927 , - 5474 , - 3561 , - 2012 , - 827 , - 6 , - 5373 , - 5280 , - 5551 , - 362 , - 1361 , - 2724 , - 4451 , - 718 , - 3173 , - 168 , - 3351 , - 1074 , - 4985 , - 3436 , - 2251 , - 1430 , - 973 , - 880 , - 1151 , - 1786 , - 2785 , - 4148 , - 51 , - 2142 , - 4597 , - 1592 , - 4775 , - 2498 , - 585 , - 4860 , - 3675 , - 2854 , - 2397 , - 2304 , - 2575 , - 3210 , - 4209 , - 5572 , - 1475 , - 3566 , - 197 , - 3016 , - 375 , - 3922 , - 2009 , - 460 , - 5099 , - 4278 , - 3821 , - 3728 , - 3999 , - 4634 , - 5633 , - 1172 , - 2899 , - 4990 , - 1621 , - 4440 , - 1799 , - 5346 , - 3433 , - 1884 , - 699 , - 5702 , - 5245 , - 5152 , - 5423 , - 234 , - 1233 , - 2596 , - 4323 , - 590 , - 3045 , - 40 , - 3223 , - 946 , - 4857 , - 3308 , - 2123 , - 1302 , - 845 , - 752 , - 1023 , - 1658 , - 2657 , - 4020 , - 5747 , - 2014 , - 4469 , - 1464 , - 4647 , - 2370 , - 457 , - 4732 , - 3547 , - 2726 , - 2269 , - 2176 , - 2447 , - 3082 , - 4081 , - 5444 , - 1347 , - 3438 , - 69 , - 2888 , - 247 , - 3794 , - 1881 , - 332 , - 4971 , - 4150 , - 3693 , - 3600 , - 3871 , - 4506 , - 5505 , - 1044 , - 2771 , - 4862 , - 1493 , - 4312 , - 1671 , - 5218 , - 3305 , - 1756 , - 571 , - 5574 , - 5117 , - 5024 , - 5295 , - 106 , - 1105 , - 2468 , - 4195 , - 462 , - 2917 , - 5736 , - 3095 , - 818 , - 4729 , - 3180 , - 1995 , - 1174 , - 717 , - 624 , - 895 , - 1530 , - 2529 , - 3892 , - 5619 , - 1886 , - 4341 , - 1336 , - 4519 , - 2242 , - 329 , - 4604 , - 3419 , - 2598 , - 2141 , - 2048 , - 2319 , - 2954 , - 3953 , - 5316 , - 1219 , - 3310 , - 5765 , - 2760 , - 119 , - 3666 , - 1753 , - 204 , - 4843 , - 4022 , - 3565 , - 3472 , - 3743 , - 4378 , - 5377 , - 916 , - 2643 , - 4734 , - 1365 , - 4184 , - 1543 , - 5090 , - 3177 , - 1628 , - 443 , - 5446 , - 4989 , - 4896 , - 5167 , - 5802 , - 977 , - 2340 , - 4067 , - 334 , - 2789 , - 5608 , - 2967 , - 690 , - 4601 , - 3052 , - 1867 , - 1046 , - 589 , - 496 , - 767 , - 1402 , - 2401 , - 3764 , - 5491 , - 1758 , - 4213 , - 1208 , - 4391 , - 2114 , - 201 , - 4476 , - 3291 , - 2470 , - 2013 , - 1920 , - 2191 , - 2826 , - 3825 , - 5188 , - 1091 , - 3182 , - 5637 , - 2632 , - 5815 , - 3538 , - 1625 , - 76 , - 4715 , - 3894 , - 3437 , - 3344 , - 3615 , - 4250 , - 5249 , - 788 , - 2515 , - 4606 , - 1237 , - 4056 , - 1415 , - 4962 , - 3049 , - 1500 , - 315 , - 5318 , - 4861 , - 4768 , - 5039 , - 5674 , - 849 , - 2212 , - 3939 , - 206 , - 2661 , - 5480 , - 2839 , - 562 , - 4473 , - 2924 , - 1739 , - 918 , - 461 , - 368 , - 639 , - 1274 , - 2273 , - 3636 , - 5363 , - 1630 , - 4085 , - 1080 , - 4263 , - 1986 , - 73 , - 4348 , - 3163 , - 2342 , - 1885 , - 1792 , - 2063 , - 2698 , - 3697 , - 5060 , - 963 , - 3054 , - 5509 , - 2504 , - 5687 , - 3410 , - 1497 , - 5772 , - 4587 , - 3766 , - 3309 , - 3216 , - 3487 , - 4122 , - 5121 , - 660 , - 2387 , - 4478 , - 1109 , - 3928 , - 1287 , - 4834 , - 2921 , - 1372 , - 187 , - 5190 , - 4733 , - 4640 , - 4911 , - 5546 , - 721 , - 2084 , - 3811 , - 78 , - 2533 , - 5352 , - 2711 , - 434 , - 4345 , - 2796 , - 1611 , - 790 , - 333 , - 240 , - 511 , - 1146 , - 2145 , - 3508 , - 5235 , - 1502 , - 3957 , - 952 , - 4135 , - 1858 , - 5769 , - 4220 , - 3035 , - 2214 , - 1757 , - 1664 , - 1935 , - 2570 , - 3569 , - 4932 , - 835 , - 2926 , - 5381 , - 2376 , - 5559 , - 3282 , - 1369 , - 5644 , - 4459 , - 3638 , - 3181 , - 3088 , - 3359 , - 3994 , - 4993 , - 532 , - 2259 , - 4350 , - 981 , - 3800 , - 1159 , - 4706 , - 2793 , - 1244 , - 59 , - 5062 , - 4605 , - 4512 , - 4783 , - 5418 , - 593 , - 1956 , - 3683 , - 5774 , - 2405 , - 5224 , - 2583 , - 306 , - 4217 , - 2668 , - 1483 , - 662 , - 205 , - 112 , - 383 , - 1018 , - 2017 , - 3380 , - 5107 , - 1374 , - 3829 , - 824 , - 4007 , - 1730 , - 5641 , - 4092 , - 2907 , - 2086 , - 1629 , - 1536 , - 1807 , - 2442 , - 3441 , - 4804 , - 707 , - 2798 , - 5253 , - 2248 , - 5431 , - 3154 , - 1241 , - 5516 , - 4331 , - 3510 , - 3053 , - 2960 , - 3231 , - 3866 , - 4865 , - 404 , - 2131 , - 4222 , - 853 , - 3672 , - 1031 , - 4578 , - 2665 , - 1116 , - 5755 , - 4934 , - 4477 , - 4384 , - 4655 , - 5290 , - 465 , - 1828 , - 3555 , - 5646 , - 2277 , - 5096 , - 2455 , - 178 , - 4089 , - 2540 , - 1355 , - 534 , - 77 , - 5808 , - 255 , - 890 , - 1889 , - 3252 , - 4979 , - 1246 , - 3701 , - 696 , - 3879 , - 1602 , - 5513 , - 3964 , - 2779 , - 1958 , - 1501 , - 1408 , - 1679 , - 2314 , - 3313 , - 4676 , - 579 , - 2670 , - 5125 , - 2120 , - 5303 , - 3026 , - 1113 , - 5388 , - 4203 , - 3382 , - 2925 , - 2832 , - 3103 , - 3738 , - 4737 , - 276 , - 2003 , - 4094 , - 725 , - 3544 , - 903 , - 4450 , - 2537 , - 988 , - 5627 , - 4806 , - 4349 , - 4256 , - 4527 , - 5162 , - 337 , - 1700 , - 3427 , - 5518 , - 2149 , - 4968 , - 2327 , - 50 , - 3961 , - 2412 , - 1227 , - 406 , - 5773 , - 5680 , - 127 , - 762 , - 1761 , - 3124 , - 4851 , - 1118 , - 3573 , - 568 , - 3751 , - 1474 , - 5385 , - 3836 , - 2651 , - 1830 , - 1373 , - 1280 , - 1551 , - 2186 , - 3185 , - 4548 , - 451 , - 2542 , - 4997 , - 1992 , - 5175 , - 2898 , - 985 , - 5260 , - 4075 , - 3254 , - 2797 , - 2704 , - 2975 , - 3610 , - 4609 , - 148 , - 1875 , - 3966 , - 597 , - 3416 , - 775 , - 4322 , - 2409 , - 860 , - 5499 , - 4678 , - 4221 , - 4128 , - 4399 , - 5034 , - 209 , - 1572 , - 3299 , - 5390 , - 2021 , - 4840 , - 2199 , - 5746 , - 3833 , - 2284 , - 1099 , - 278 , - 5645 , - 5552 , - 5823 , - 634 , - 1633 , - 2996 , - 4723 , - 990 , - 3445 , - 440 , - 3623 , - 1346 , - 5257 , - 3708 , - 2523 , - 1702 , - 1245 , - 1152 , - 1423 , - 2058 , - 3057 , - 4420 , - 323 , - 2414 , - 4869 , - 1864 , - 5047 , - 2770 , - 857 , - 5132 , - 3947 , - 3126 , - 2669 , - 2576 , - 2847 , - 3482 , - 4481 , - 20 , - 1747 , - 3838 , - 469 , - 3288 , - 647 , - 4194 , - 2281 , - 732 , - 5371 , - 4550 , - 4093 , - 4000 , - 4271 , - 4906 , - 81 , - 1444 , - 3171 , - 5262 , - 1893 , - 4712 , - 2071 , - 5618 , - 3705 , - 2156 , - 971 , - 150 , - 5517 , - 5424 , - 5695 , - 506 , - 1505 , - 2868 , - 4595 , - 862 , - 3317 , - 312 , - 3495 , - 1218 , - 5129 , - 3580 , - 2395 , - 1574 , - 1117 , - 1024 , - 1295 , - 1930 , - 2929 , - 4292 , - 195 , - 2286 , - 4741 , - 1736 , - 4919 , - 2642 , - 729 , - 5004 , - 3819 , - 2998 , - 2541 , - 2448 , - 2719 , - 3354 , - 4353 , - 5716 , - 1619 , - 3710 , - 341 , - 3160 , - 519 , - 4066 , - 2153 , - 604 , - 5243 , - 4422 , - 3965 , - 3872 , - 4143 , - 4778 , - 5777 , - 1316 , - 3043 , - 5134 , - 1765 , - 4584 , - 1943 , - 5490 , - 3577 , - 2028 , - 843 , - 22 , - 5389 , - 5296 , - 5567 , - 378 , - 1377 , - 2740 , - 4467 , - 734 , - 3189 , - 184 , - 3367 , - 1090 , - 5001 , - 3452 , - 2267 , - 1446 , - 989 , - 896 , - 1167 , - 1802 , - 2801 , - 4164 , - 67 , - 2158 , - 4613 , - 1608 , - 4791 , - 2514 , - 601 , - 4876 , - 3691 , - 2870 , - 2413 , - 2320 , - 2591 , - 3226 , - 4225 , - 5588 , - 1491 , - 3582 , - 213 , - 3032 , - 391 , - 3938 , - 2025 , - 476 , - 5115 , - 4294 , - 3837 , - 3744 , - 4015 , - 4650 , - 5649 , - 1188 , - 2915 , - 5006 , - 1637 , - 4456 , - 1815 , - 5362 , - 3449 , - 1900 , - 715 , - 5718 , - 5261 , - 5168 , - 5439 , - 250 , - 1249 , - 2612 , - 4339 , - 606 , - 3061 , - 56 , - 3239 , - 962 , - 4873 , - 3324 , - 2139 , - 1318 , - 861 , - 768 , - 1039 , - 1674 , - 2673 , - 4036 , - 5763 , - 2030 , - 4485 , - 1480 , - 4663 , - 2386 , - 473 , - 4748 , - 3563 , - 2742 , - 2285 , - 2192 , - 2463 , - 3098 , - 4097 , - 5460 , - 1363 , - 3454 , - 85 , - 2904 , - 263 , - 3810 , - 1897 , - 348 , - 4987 , - 4166 , - 3709 , - 3616 , - 3887 , - 4522 , - 5521 , - 1060 , - 2787 , - 4878 , - 1509 , - 4328 , - 1687 , - 5234 , - 3321 , - 1772 , - 587 , - 5590 , - 5133 , - 5040 , - 5311 , - 122 , - 1121 , - 2484 , - 4211 , - 478 , - 2933 , - 5752 , - 3111 , - 834 , - 4745 , - 3196 , - 2011 , - 1190 , - 733 , - 640 , - 911 , - 1546 , - 2545 , - 3908 , - 5635 , - 1902 , - 4357 , - 1352 , - 4535 , - 2258 , - 345 , - 4620 , - 3435 , - 2614 , - 2157 , - 2064 , - 2335 , - 2970 , - 3969 , - 5332 , - 1235 , - 3326 , - 5781 , - 2776 , - 135 , - 3682 , - 1769 , - 220 , - 4859 , - 4038 , - 3581 , - 3488 , - 3759 , - 4394 , - 5393 , - 932 , - 2659 , - 4750 , - 1381 , - 4200 , - 1559 , - 5106 , - 3193 , - 1644 , - 459 , - 5462 , - 5005 , - 4912 , - 5183 , - 5818 , - 993 , - 2356 , - 4083 , - 350 , - 2805 , - 5624 , - 2983 , - 706 , - 4617 , - 3068 , - 1883 , - 1062 , - 605 , - 512 , - 783 , - 1418 , - 2417 , - 3780 , - 5507 , - 1774 , - 4229 , - 1224 , - 4407 , - 2130 , - 217 , - 4492 , - 3307 , - 2486 , - 2029 , - 1936 , - 2207 , - 2842 , - 3841 , - 5204 , - 1107 , - 3198 , - 5653 , - 2648 , - 7 , - 3554 , - 1641 , - 92 , - 4731 , - 3910 , - 3453 , - 3360 , - 3631 , - 4266 , - 5265 , - 804 , - 2531 , - 4622 , - 1253 , - 4072 , - 1431 , - 4978 , - 3065 , - 1516 , - 331 , - 5334 , - 4877 , - 4784 , - 5055 , - 5690 , - 865 , - 2228 , - 3955 , - 222 , - 2677 , - 5496 , - 2855 , - 578 , - 4489 , - 2940 , - 1755 , - 934 , - 477 , - 384 , - 655 , - 1290 , - 2289 , - 3652 , - 5379 , - 1646 , - 4101 , - 1096 , - 4279 , - 2002 , - 89 , - 4364 , - 3179 , - 2358 , - 1901 , - 1808 , - 2079 , - 2714 , - 3713 , - 5076 , - 979 , - 3070 , - 5525 , - 2520 , - 5703 , - 3426 , - 1513 , - 5788 , - 4603 , - 3782 , - 3325 , - 3232 , - 3503 , - 4138 , - 5137 , - 676 , - 2403 , - 4494 , - 1125 , - 3944 , - 1303 , - 4850 , - 2937 , - 1388 , - 203 , - 5206 , - 4749 , - 4656 , - 4927 , - 5562 , - 737 , - 2100 , - 3827 , - 94 , - 2549 , - 5368 , - 2727 , - 450 , - 4361 , - 2812 , - 1627 , - 806 , - 349 , - 256 , - 527 , - 1162 , - 2161 , - 3524 , - 5251 , - 1518 , - 3973 , - 968 , - 4151 , - 1874 , - 5785 , - 4236 , - 3051 , - 2230 , - 1773 , - 1680 , - 1951 , - 2586 , - 3585 , - 4948 , - 851 , - 2942 , - 5397 , - 2392 , - 5575 , - 3298 , - 1385 , - 5660 , - 4475 , - 3654 , - 3197 , - 3104 , - 3375 , - 4010 , - 5009 , - 548 , - 2275 , - 4366 , - 997 , - 3816 , - 1175 , - 4722 , - 2809 , - 1260 , - 75 , - 5078 , - 4621 , - 4528 , - 4799 , - 5434 , - 609 , - 1972 , - 3699 , - 5790 , - 2421 , - 5240 , - 2599 , - 322 , - 4233 , - 2684 , - 1499 , - 678 , - 221 , - 128 , - 399 , - 1034 , - 2033 , - 3396 , - 5123 , - 1390 , - 3845 , - 840 , - 4023 , - 1746 , - 5657 , - 4108 , - 2923 , - 2102 , - 1645 , - 1552 , - 1823 , - 2458 , - 3457 , - 4820 , - 723 , - 2814 , - 5269 , - 2264 , - 5447 , - 3170 , - 1257 , - 5532 , - 4347 , - 3526 , - 3069 , - 2976 , - 3247 , - 3882 , - 4881 , - 420 , - 2147 , - 4238 , - 869 , - 3688 , - 1047 , - 4594 , - 2681 , - 1132 , - 5771 , - 4950 , - 4493 , - 4400 , - 4671 , - 5306 , - 481 , - 1844 , - 3571 , - 5662 , - 2293 , - 5112 , - 2471 , - 194 , - 4105 , - 2556 , - 1371 , - 550 , - 93 , - 0 , - 507 , - 1382 , - 2625 , - 4236 , - 327 , - 2674 , - 5389 , - 2584 , - 147 , - 3966 , - 2265 , - 932 , - 5855 , - 5258 , - 5029 , - 5168 , - 5675 , - 662 , - 1905 , - 3516 , - 5495 , - 1954 , - 4669 , - 1864 , - 5315 , - 3246 , - 1545 , - 212 , - 5135 , - 4538 , - 4309 , - 4448 , - 4955 , - 5830 , - 1185 , - 2796 , - 4775 , - 1234 , - 3949 , - 1144 , - 4595 , - 2526 , - 825 , - 5380 , - 4415 , - 3818 , - 3589 , - 3728 , - 4235 , - 5110 , - 465 , - 2076 , - 4055 , - 514 , - 3229 , - 424 , - 3875 , - 1806 , - 105 , - 4660 , - 3695 , - 3098 , - 2869 , - 3008 , - 3515 , - 4390 , - 5633 , - 1356 , - 3335 , - 5682 , - 2509 , - 5592 , - 3155 , - 1086 , - 5273 , - 3940 , - 2975 , - 2378 , - 2149 , - 2288 , - 2795 , - 3670 , - 4913 , - 636 , - 2615 , - 4962 , - 1789 , - 4872 , - 2435 , - 366 , - 4553 , - 3220 , - 2255 , - 1658 , - 1429 , - 1568 , - 2075 , - 2950 , - 4193 , - 5804 , - 1895 , - 4242 , - 1069 , - 4152 , - 1715 , - 5534 , - 3833 , - 2500 , - 1535 , - 938 , - 709 , - 848 , - 1355 , - 2230 , - 3473 , - 5084 , - 1175 , - 3522 , - 349 , - 3432 , - 995 , - 4814 , - 3113 , - 1780 , - 815 , - 218 , - 5877 , - 128 , - 635 , - 1510 , - 2753 , - 4364 , - 455 , - 2802 , - 5517 , - 2712 , - 275 , - 4094 , - 2393 , - 1060 , - 95 , - 5386 , - 5157 , - 5296 , - 5803 , - 790 , - 2033 , - 3644 , - 5623 , - 2082 , - 4797 , - 1992 , - 5443 , - 3374 , - 1673 , - 340 , - 5263 , - 4666 , - 4437 , - 4576 , - 5083 , - 70 , - 1313 , - 2924 , - 4903 , - 1362 , - 4077 , - 1272 , - 4723 , - 2654 , - 953 , - 5508 , - 4543 , - 3946 , - 3717 , - 3856 , - 4363 , - 5238 , - 593 , - 2204 , - 4183 , - 642 , - 3357 , - 552 , - 4003 , - 1934 , - 233 , - 4788 , - 3823 , - 3226 , - 2997 , - 3136 , - 3643 , - 4518 , - 5761 , - 1484 , - 3463 , - 5810 , - 2637 , - 5720 , - 3283 , - 1214 , - 5401 , - 4068 , - 3103 , - 2506 , - 2277 , - 2416 , - 2923 , - 3798 , - 5041 , - 764 , - 2743 , - 5090 , - 1917 , - 5000 , - 2563 , - 494 , - 4681 , - 3348 , - 2383 , - 1786 , - 1557 , - 1696 , - 2203 , - 3078 , - 4321 , - 44 , - 2023 , - 4370 , - 1197 , - 4280 , - 1843 , - 5662 , - 3961 , - 2628 , - 1663 , - 1066 , - 837 , - 976 , - 1483 , - 2358 , - 3601 , - 5212 , - 1303 , - 3650 , - 477 , - 3560 , - 1123 , - 4942 , - 3241 , - 1908 , - 943 , - 346 , - 117 , - 256 , - 763 , - 1638 , - 2881 , - 4492 , - 583 , - 2930 , - 5645 , - 2840 , - 403 , - 4222 , - 2521 , - 1188 , - 223 , - 5514 , - 5285 , - 5424 , - 43 , - 918 , - 2161 , - 3772 , - 5751 , - 2210 , - 4925 , - 2120 , - 5571 , - 3502 , - 1801 , - 468 , - 5391 , - 4794 , - 4565 , - 4704 , - 5211 , - 198 , - 1441 , - 3052 , - 5031 , - 1490 , - 4205 , - 1400 , - 4851 , - 2782 , - 1081 , - 5636 , - 4671 , - 4074 , - 3845 , - 3984 , - 4491 , - 5366 , - 721 , - 2332 , - 4311 , - 770 , - 3485 , - 680 , - 4131 , - 2062 , - 361 , - 4916 , - 3951 , - 3354 , - 3125 , - 3264 , - 3771 , - 4646 , - 1 , - 1612 , - 3591 , - 50 , - 2765 , - 5848 , - 3411 , - 1342 , - 5529 , - 4196 , - 3231 , - 2634 , - 2405 , - 2544 , - 3051 , - 3926 , - 5169 , - 892 , - 2871 , - 5218 , - 2045 , - 5128 , - 2691 , - 622 , - 4809 , - 3476 , - 2511 , - 1914 , - 1685 , - 1824 , - 2331 , - 3206 , - 4449 , - 172 , - 2151 , - 4498 , - 1325 , - 4408 , - 1971 , - 5790 , - 4089 , - 2756 , - 1791 , - 1194 , - 965 , - 1104 , - 1611 , - 2486 , - 3729 , - 5340 , - 1431 , - 3778 , - 605 , - 3688 , - 1251 , - 5070 , - 3369 , - 2036 , - 1071 , - 474 , - 245 , - 384 , - 891 , - 1766 , - 3009 , - 4620 , - 711 , - 3058 , - 5773 , - 2968 , - 531 , - 4350 , - 2649 , - 1316 , - 351 , - 5642 , - 5413 , - 5552 , - 171 , - 1046 , - 2289 , - 3900 , - 5879 , - 2338 , - 5053 , - 2248 , - 5699 , - 3630 , - 1929 , - 596 , - 5519 , - 4922 , - 4693 , - 4832 , - 5339 , - 326 , - 1569 , - 3180 , - 5159 , - 1618 , - 4333 , - 1528 , - 4979 , - 2910 , - 1209 , - 5764 , - 4799 , - 4202 , - 3973 , - 4112 , - 4619 , - 5494 , - 849 , - 2460 , - 4439 , - 898 , - 3613 , - 808 , - 4259 , - 2190 , - 489 , - 5044 , - 4079 , - 3482 , - 3253 , - 3392 , - 3899 , - 4774 , - 129 , - 1740 , - 3719 , - 178 , - 2893 , - 88 , - 3539 , - 1470 , - 5657 , - 4324 , - 3359 , - 2762 , - 2533 , - 2672 , - 3179 , - 4054 , - 5297 , - 1020 , - 2999 , - 5346 , - 2173 , - 5256 , - 2819 , - 750 , - 4937 , - 3604 , - 2639 , - 2042 , - 1813 , - 1952 , - 2459 , - 3334 , - 4577 , - 300 , - 2279 , - 4626 , - 1453 , - 4536 , - 2099 , - 30 , - 4217 , - 2884 , - 1919 , - 1322 , - 1093 , - 1232 , - 1739 , - 2614 , - 3857 , - 5468 , - 1559 , - 3906 , - 733 , - 3816 , - 1379 , - 5198 , - 3497 , - 2164 , - 1199 , - 602 , - 373 , - 512 , - 1019 , - 1894 , - 3137 , - 4748 , - 839 , - 3186 , - 13 , - 3096 , - 659 , - 4478 , - 2777 , - 1444 , - 479 , - 5770 , - 5541 , - 5680 , - 299 , - 1174 , - 2417 , - 4028 , - 119 , - 2466 , - 5181 , - 2376 , - 5827 , - 3758 , - 2057 , - 724 , - 5647 , - 5050 , - 4821 , - 4960 , - 5467 , - 454 , - 1697 , - 3308 , - 5287 , - 1746 , - 4461 , - 1656 , - 5107 , - 3038 , - 1337 , - 4 , - 4927 , - 4330 , - 4101 , - 4240 , - 4747 , - 5622 , - 977 , - 2588 , - 4567 , - 1026 , - 3741 , - 936 , - 4387 , - 2318 , - 617 , - 5172 , - 4207 , - 3610 , - 3381 , - 3520 , - 4027 , - 4902 , - 257 , - 1868 , - 3847 , - 306 , - 3021 , - 216 , - 3667 , - 1598 , - 5785 , - 4452 , - 3487 , - 2890 , - 2661 , - 2800 , - 3307 , - 4182 , - 5425 , - 1148 , - 3127 , - 5474 , - 2301 , - 5384 , - 2947 , - 878 , - 5065 , - 3732 , - 2767 , - 2170 , - 1941 , - 2080 , - 2587 , - 3462 , - 4705 , - 428 , - 2407 , - 4754 , - 1581 , - 4664 , - 2227 , - 158 , - 4345 , - 3012 , - 2047 , - 1450 , - 1221 , - 1360 , - 1867 , - 2742 , - 3985 , - 5596 , - 1687 , - 4034 , - 861 , - 3944 , - 1507 , - 5326 , - 3625 , - 2292 , - 1327 , - 730 , - 501 , - 640 , - 1147 , - 2022 , - 3265 , - 4876 , - 967 , - 3314 , - 141 , - 3224 , - 787 , - 4606 , - 2905 , - 1572 , - 607 , - 10 , - 5669 , - 5808 , - 427 , - 1302 , - 2545 , - 4156 , - 247 , - 2594 , - 5309 , - 2504 , - 67 , - 3886 , - 2185 , - 852 , - 5775 , - 5178 , - 4949 , - 5088 , - 5595 , - 582 , - 1825 , - 3436 , - 5415 , - 1874 , - 4589 , - 1784 , - 5235 , - 3166 , - 1465 , - 132 , - 5055 , - 4458 , - 4229 , - 4368 , - 4875 , - 5750 , - 1105 , - 2716 , - 4695 , - 1154 , - 3869 , - 1064 , - 4515 , - 2446 , - 745 , - 5300 , - 4335 , - 3738 , - 3509 , - 3648 , - 4155 , - 5030 , - 385 , - 1996 , - 3975 , - 434 , - 3149 , - 344 , - 3795 , - 1726 , - 25 , - 4580 , - 3615 , - 3018 , - 2789 , - 2928 , - 3435 , - 4310 , - 5553 , - 1276 , - 3255 , - 5602 , - 2429 , - 5512 , - 3075 , - 1006 , - 5193 , - 3860 , - 2895 , - 2298 , - 2069 , - 2208 , - 2715 , - 3590 , - 4833 , - 556 , - 2535 , - 4882 , - 1709 , - 4792 , - 2355 , - 286 , - 4473 , - 3140 , - 2175 , - 1578 , - 1349 , - 1488 , - 1995 , - 2870 , - 4113 , - 5724 , - 1815 , - 4162 , - 989 , - 4072 , - 1635 , - 5454 , - 3753 , - 2420 , - 1455 , - 858 , - 629 , - 768 , - 1275 , - 2150 , - 3393 , - 5004 , - 1095 , - 3442 , - 269 , - 3352 , - 915 , - 4734 , - 3033 , - 1700 , - 735 , - 138 , - 5797 , - 48 , - 555 , - 1430 , - 2673 , - 4284 , - 375 , - 2722 , - 5437 , - 2632 , - 195 , - 4014 , - 2313 , - 980 , - 15 , - 5306 , - 5077 , - 5216 , - 5723 , - 710 , - 1953 , - 3564 , - 5543 , - 2002 , - 4717 , - 1912 , - 5363 , - 3294 , - 1593 , - 260 , - 5183 , - 4586 , - 4357 , - 4496 , - 5003 , - 5878 , - 1233 , - 2844 , - 4823 , - 1282 , - 3997 , - 1192 , - 4643 , - 2574 , - 873 , - 5428 , - 4463 , - 3866 , - 3637 , - 3776 , - 4283 , - 5158 , - 513 , - 2124 , - 4103 , - 562 , - 3277 , - 472 , - 3923 , - 1854 , - 153 , - 4708 , - 3743 , - 3146 , - 2917 , - 3056 , - 3563 , - 4438 , - 5681 , - 1404 , - 3383 , - 5730 , - 2557 , - 5640 , - 3203 , - 1134 , - 5321 , - 3988 , - 3023 , - 2426 , - 2197 , - 2336 , - 2843 , - 3718 , - 4961 , - 684 , - 2663 , - 5010 , - 1837 , - 4920 , - 2483 , - 414 , - 4601 , - 3268 , - 2303 , - 1706 , - 1477 , - 1616 , - 2123 , - 2998 , - 4241 , - 5852 , - 1943 , - 4290 , - 1117 , - 4200 , - 1763 , - 5582 , - 3881 , - 2548 , - 1583 , - 986 , - 757 , - 896 , - 1403 , - 2278 , - 3521 , - 5132 , - 1223 , - 3570 , - 397 , - 3480 , - 1043 , - 4862 , - 3161 , - 1828 , - 863 , - 266 , - 37 , - 176 , - 683 , - 1558 , - 2801 , - 4412 , - 503 , - 2850 , - 5565 , - 2760 , - 323 , - 4142 , - 2441 , - 1108 , - 143 , - 5434 , - 5205 , - 5344 , - 5851 , - 838 , - 2081 , - 3692 , - 5671 , - 2130 , - 4845 , - 2040 , - 5491 , - 3422 , - 1721 , - 388 , - 5311 , - 4714 , - 4485 , - 4624 , - 5131 , - 118 , - 1361 , - 2972 , - 4951 , - 1410 , - 4125 , - 1320 , - 4771 , - 2702 , - 1001 , - 5556 , - 4591 , - 3994 , - 3765 , - 3904 , - 4411 , - 5286 , - 641 , - 2252 , - 4231 , - 690 , - 3405 , - 600 , - 4051 , - 1982 , - 281 , - 4836 , - 3871 , - 3274 , - 3045 , - 3184 , - 3691 , - 4566 , - 5809 , - 1532 , - 3511 , - 5858 , - 2685 , - 5768 , - 3331 , - 1262 , - 5449 , - 4116 , - 3151 , - 2554 , - 2325 , - 2464 , - 2971 , - 3846 , - 5089 , - 812 , - 2791 , - 5138 , - 1965 , - 5048 , - 2611 , - 542 , - 4729 , - 3396 , - 2431 , - 1834 , - 1605 , - 1744 , - 2251 , - 3126 , - 4369 , - 92 , - 2071 , - 4418 , - 1245 , - 4328 , - 1891 , - 5710 , - 4009 , - 2676 , - 1711 , - 1114 , - 885 , - 1024 , - 1531 , - 2406 , - 3649 , - 5260 , - 1351 , - 3698 , - 525 , - 3608 , - 1171 , - 4990 , - 3289 , - 1956 , - 991 , - 394 , - 165 , - 304 , - 811 , - 1686 , - 2929 , - 4540 , - 631 , - 2978 , - 5693 , - 2888 , - 451 , - 4270 , - 2569 , - 1236 , - 271 , - 5562 , - 5333 , - 5472 , - 91 , - 966 , - 2209 , - 3820 , - 5799 , - 2258 , - 4973 , - 2168 , - 5619 , - 3550 , - 1849 , - 516 , - 5439 , - 4842 , - 4613 , - 4752 , - 5259 , - 246 , - 1489 , - 3100 , - 5079 , - 1538 , - 4253 , - 1448 , - 4899 , - 2830 , - 1129 , - 5684 , - 4719 , - 4122 , - 3893 , - 4032 , - 4539 , - 5414 , - 769 , - 2380 , - 4359 , - 818 , - 3533 , - 728 , - 4179 , - 2110 , - 409 , - 4964 , - 3999 , - 3402 , - 3173 , - 3312 , - 3819 , - 4694 , - 49 , - 1660 , - 3639 , - 98 , - 2813 , - 8 , - 3459 , - 1390 , - 5577 , - 4244 , - 3279 , - 2682 , - 2453 , - 2592 , - 3099 , - 3974 , - 5217 , - 940 , - 2919 , - 5266 , - 2093 , - 5176 , - 2739 , - 670 , - 4857 , - 3524 , - 2559 , - 1962 , - 1733 , - 1872 , - 2379 , - 3254 , - 4497 , - 220 , - 2199 , - 4546 , - 1373 , - 4456 , - 2019 , - 5838 , - 4137 , - 2804 , - 1839 , - 1242 , - 1013 , - 1152 , - 1659 , - 2534 , - 3777 , - 5388 , - 1479 , - 3826 , - 653 , - 3736 , - 1299 , - 5118 , - 3417 , - 2084 , - 1119 , - 522 , - 293 , - 432 , - 939 , - 1814 , - 3057 , - 4668 , - 759 , - 3106 , - 5821 , - 3016 , - 579 , - 4398 , - 2697 , - 1364 , - 399 , - 5690 , - 5461 , - 5600 , - 219 , - 1094 , - 2337 , - 3948 , - 39 , - 2386 , - 5101 , - 2296 , - 5747 , - 3678 , - 1977 , - 644 , - 5567 , - 4970 , - 4741 , - 4880 , - 5387 , - 374 , - 1617 , - 3228 , - 5207 , - 1666 , - 4381 , - 1576 , - 5027 , - 2958 , - 1257 , - 5812 , - 4847 , - 4250 , - 4021 , - 4160 , - 4667 , - 5542 , - 897 , - 2508 , - 4487 , - 946 , - 3661 , - 856 , - 4307 , - 2238 , - 537 , - 5092 , - 4127 , - 3530 , - 3301 , - 3440 , - 3947 , - 4822 , - 177 , - 1788 , - 3767 , - 226 , - 2941 , - 136 , - 3587 , - 1518 , - 5705 , - 4372 , - 3407 , - 2810 , - 2581 , - 2720 , - 3227 , - 4102 , - 5345 , - 1068 , - 3047 , - 5394 , - 2221 , - 5304 , - 2867 , - 798 , - 4985 , - 3652 , - 2687 , - 2090 , - 1861 , - 2000 , - 2507 , - 3382 , - 4625 , - 348 , - 2327 , - 4674 , - 1501 , - 4584 , - 2147 , - 78 , - 4265 , - 2932 , - 1967 , - 1370 , - 1141 , - 1280 , - 1787 , - 2662 , - 3905 , - 5516 , - 1607 , - 3954 , - 781 , - 3864 , - 1427 , - 5246 , - 3545 , - 2212 , - 1247 , - 650 , - 421 , - 560 , - 1067 , - 1942 , - 3185 , - 4796 , - 887 , - 3234 , - 61 , - 3144 , - 707 , - 4526 , - 2825 , - 1492 , - 527 , - 5818 , - 5589 , - 5728 , - 347 , - 1222 , - 2465 , - 4076 , - 167 , - 2514 , - 5229 , - 2424 , - 5875 , - 3806 , - 2105 , - 772 , - 5695 , - 5098 , - 4869 , - 5008 , - 5515 , - 502 , - 1745 , - 3356 , - 5335 , - 1794 , - 4509 , - 1704 , - 5155 , - 3086 , - 1385 , - 52 , - 4975 , - 4378 , - 4149 , - 4288 , - 4795 , - 5670 , - 1025 , - 2636 , - 4615 , - 1074 , - 3789 , - 984 , - 4435 , - 2366 , - 665 , - 5220 , - 4255 , - 3658 , - 3429 , - 3568 , - 4075 , - 4950 , - 305 , - 1916 , - 3895 , - 354 , - 3069 , - 264 , - 3715 , - 1646 , - 5833 , - 4500 , - 3535 , - 2938 , - 2709 , - 2848 , - 3355 , - 4230 , - 5473 , - 1196 , - 3175 , - 5522 , - 2349 , - 5432 , - 2995 , - 926 , - 5113 , - 3780 , - 2815 , - 2218 , - 1989 , - 2128 , - 2635 , - 3510 , - 4753 , - 476 , - 2455 , - 4802 , - 1629 , - 4712 , - 2275 , - 206 , - 4393 , - 3060 , - 2095 , - 1498 , - 1269 , - 1408 , - 1915 , - 2790 , - 4033 , - 5644 , - 1735 , - 4082 , - 909 , - 3992 , - 1555 , - 5374 , - 3673 , - 2340 , - 1375 , - 778 , - 549 , - 688 , - 1195 , - 2070 , - 3313 , - 4924 , - 1015 , - 3362 , - 189 , - 3272 , - 835 , - 4654 , - 2953 , - 1620 , - 655 , - 58 , - 5717 , - 5856 , - 475 , - 1350 , - 2593 , - 4204 , - 295 , - 2642 , - 5357 , - 2552 , - 115 , - 3934 , - 2233 , - 900 , - 5823 , - 5226 , - 4997 , - 5136 , - 5643 , - 630 , - 1873 , - 3484 , - 5463 , - 1922 , - 4637 , - 1832 , - 5283 , - 3214 , - 1513 , - 180 , - 5103 , - 4506 , - 4277 , - 4416 , - 4923 , - 5798 , - 1153 , - 2764 , - 4743 , - 1202 , - 3917 , - 1112 , - 4563 , - 2494 , - 793 , - 5348 , - 4383 , - 3786 , - 3557 , - 3696 , - 4203 , - 5078 , - 433 , - 2044 , - 4023 , - 482 , - 3197 , - 392 , - 3843 , - 1774 , - 73 , - 4628 , - 3663 , - 3066 , - 2837 , - 2976 , - 3483 , - 4358 , - 5601 , - 1324 , - 3303 , - 5650 , - 2477 , - 5560 , - 3123 , - 1054 , - 5241 , - 3908 , - 2943 , - 2346 , - 2117 , - 2256 , - 2763 , - 3638 , - 4881 , - 604 , - 2583 , - 4930 , - 1757 , - 4840 , - 2403 , - 334 , - 4521 , - 3188 , - 2223 , - 1626 , - 1397 , - 1536 , - 2043 , - 2918 , - 4161 , - 5772 , - 1863 , - 4210 , - 1037 , - 4120 , - 1683 , - 5502 , - 3801 , - 2468 , - 1503 , - 906 , - 677 , - 816 , - 1323 , - 2198 , - 3441 , - 5052 , - 1143 , - 3490 , - 317 , - 3400 , - 963 , - 4782 , - 3081 , - 1748 , - 783 , - 186 , - 5845 , - 96 , - 603 , - 1478 , - 2721 , - 4332 , - 423 , - 2770 , - 5485 , - 2680 , - 243 , - 4062 , - 2361 , - 1028 , - 63 , - 5354 , - 5125 , - 5264 , - 5771 , - 758 , - 2001 , - 3612 , - 5591 , - 2050 , - 4765 , - 1960 , - 5411 , - 3342 , - 1641 , - 308 , - 5231 , - 4634 , - 4405 , - 4544 , - 5051 , - 38 , - 1281 , - 2892 , - 4871 , - 1330 , - 4045 , - 1240 , - 4691 , - 2622 , - 921 , - 5476 , - 4511 , - 3914 , - 3685 , - 3824 , - 4331 , - 5206 , - 561 , - 2172 , - 4151 , - 610 , - 3325 , - 520 , - 3971 , - 1902 , - 201 , - 4756 , - 3791 , - 3194 , - 2965 , - 3104 , - 3611 , - 4486 , - 5729 , - 1452 , - 3431 , - 5778 , - 2605 , - 5688 , - 3251 , - 1182 , - 5369 , - 4036 , - 3071 , - 2474 , - 2245 , - 2384 , - 2891 , - 3766 , - 5009 , - 732 , - 2711 , - 5058 , - 1885 , - 4968 , - 2531 , - 462 , - 4649 , - 3316 , - 2351 , - 1754 , - 1525 , - 1664 , - 2171 , - 3046 , - 4289 , - 12 , - 1991 , - 4338 , - 1165 , - 4248 , - 1811 , - 5630 , - 3929 , - 2596 , - 1631 , - 1034 , - 805 , - 944 , - 1451 , - 2326 , - 3569 , - 5180 , - 1271 , - 3618 , - 445 , - 3528 , - 1091 , - 4910 , - 3209 , - 1876 , - 911 , - 314 , - 85 , - 224 , - 731 , - 1606 , - 2849 , - 4460 , - 551 , - 2898 , - 5613 , - 2808 , - 371 , - 4190 , - 2489 , - 1156 , - 191 , - 5482 , - 5253 , - 5392 , - 11 , - 886 , - 2129 , - 3740 , - 5719 , - 2178 , - 4893 , - 2088 , - 5539 , - 3470 , - 1769 , - 436 , - 5359 , - 4762 , - 4533 , - 4672 , - 5179 , - 166 , - 1409 , - 3020 , - 4999 , - 1458 , - 4173 , - 1368 , - 4819 , - 2750 , - 1049 , - 5604 , - 4639 , - 4042 , - 3813 , - 3952 , - 4459 , - 5334 , - 689 , - 2300 , - 4279 , - 738 , - 3453 , - 648 , - 4099 , - 2030 , - 329 , - 4884 , - 3919 , - 3322 , - 3093 , - 3232 , - 3739 , - 4614 , - 5857 , - 1580 , - 3559 , - 18 , - 2733 , - 5816 , - 3379 , - 1310 , - 5497 , - 4164 , - 3199 , - 2602 , - 2373 , - 2512 , - 3019 , - 3894 , - 5137 , - 860 , - 2839 , - 5186 , - 2013 , - 5096 , - 2659 , - 590 , - 4777 , - 3444 , - 2479 , - 1882 , - 1653 , - 1792 , - 2299 , - 3174 , - 4417 , - 140 , - 2119 , - 4466 , - 1293 , - 4376 , - 1939 , - 5758 , - 4057 , - 2724 , - 1759 , - 1162 , - 933 , - 1072 , - 1579 , - 2454 , - 3697 , - 5308 , - 1399 , - 3746 , - 573 , - 3656 , - 1219 , - 5038 , - 3337 , - 2004 , - 1039 , - 442 , - 213 , - 352 , - 859 , - 1734 , - 2977 , - 4588 , - 679 , - 3026 , - 5741 , - 2936 , - 499 , - 4318 , - 2617 , - 1284 , - 319 , - 5610 , - 5381 , - 5520 , - 139 , - 1014 , - 2257 , - 3868 , - 5847 , - 2306 , - 5021 , - 2216 , - 5667 , - 3598 , - 1897 , - 564 , - 5487 , - 4890 , - 4661 , - 4800 , - 5307 , - 294 , - 1537 , - 3148 , - 5127 , - 1586 , - 4301 , - 1496 , - 4947 , - 2878 , - 1177 , - 5732 , - 4767 , - 4170 , - 3941 , - 4080 , - 4587 , - 5462 , - 817 , - 2428 , - 4407 , - 866 , - 3581 , - 776 , - 4227 , - 2158 , - 457 , - 5012 , - 4047 , - 3450 , - 3221 , - 3360 , - 3867 , - 4742 , - 97 , - 1708 , - 3687 , - 146 , - 2861 , - 56 , - 3507 , - 1438 , - 5625 , - 4292 , - 3327 , - 2730 , - 2501 , - 2640 , - 3147 , - 4022 , - 5265 , - 988 , - 2967 , - 5314 , - 2141 , - 5224 , - 2787 , - 718 , - 4905 , - 3572 , - 2607 , - 2010 , - 1781 , - 1920 , - 2427 , - 3302 , - 4545 , - 268 , - 2247 , - 4594 , - 1421 , - 4504 , - 2067 , - 5886 , - 4185 , - 2852 , - 1887 , - 1290 , - 1061 , - 1200 , - 1707 , - 2582 , - 3825 , - 5436 , - 1527 , - 3874 , - 701 , - 3784 , - 1347 , - 5166 , - 3465 , - 2132 , - 1167 , - 570 , - 341 , - 480 , - 987 , - 1862 , - 3105 , - 4716 , - 807 , - 3154 , - 5869 , - 3064 , - 627 , - 4446 , - 2745 , - 1412 , - 447 , - 5738 , - 5509 , - 5648 , - 267 , - 1142 , - 2385 , - 3996 , - 87 , - 2434 , - 5149 , - 2344 , - 5795 , - 3726 , - 2025 , - 692 , - 5615 , - 5018 , - 4789 , - 4928 , - 5435 , - 422 , - 1665 , - 3276 , - 5255 , - 1714 , - 4429 , - 1624 , - 5075 , - 3006 , - 1305 , - 5860 , - 4895 , - 4298 , - 4069 , - 4208 , - 4715 , - 5590 , - 945 , - 2556 , - 4535 , - 994 , - 3709 , - 904 , - 4355 , - 2286 , - 585 , - 5140 , - 4175 , - 3578 , - 3349 , - 3488 , - 3995 , - 4870 , - 225 , - 1836 , - 3815 , - 274 , - 2989 , - 184 , - 3635 , - 1566 , - 5753 , - 4420 , - 3455 , - 2858 , - 2629 , - 2768 , - 3275 , - 4150 , - 5393 , - 1116 , - 3095 , - 5442 , - 2269 , - 5352 , - 2915 , - 846 , - 5033 , - 3700 , - 2735 , - 2138 , - 1909 , - 2048 , - 2555 , - 3430 , - 4673 , - 396 , - 2375 , - 4722 , - 1549 , - 4632 , - 2195 , - 126 , - 4313 , - 2980 , - 2015 , - 1418 , - 1189 , - 1328 , - 1835 , - 2710 , - 3953 , - 5564 , - 1655 , - 4002 , - 829 , - 3912 , - 1475 , - 5294 , - 3593 , - 2260 , - 1295 , - 698 , - 469 , - 608 , - 1115 , - 1990 , - 3233 , - 4844 , - 935 , - 3282 , - 109 , - 3192 , - 755 , - 4574 , - 2873 , - 1540 , - 575 , - 5866 , - 5637 , - 5776 , - 395 , - 1270 , - 2513 , - 4124 , - 215 , - 2562 , - 5277 , - 2472 , - 35 , - 3854 , - 2153 , - 820 , - 5743 , - 5146 , - 4917 , - 5056 , - 5563 , - 550 , - 1793 , - 3404 , - 5383 , - 1842 , - 4557 , - 1752 , - 5203 , - 3134 , - 1433 , - 100 , - 5023 , - 4426 , - 4197 , - 4336 , - 4843 , - 5718 , - 1073 , - 2684 , - 4663 , - 1122 , - 3837 , - 1032 , - 4483 , - 2414 , - 713 , - 5268 , - 4303 , - 3706 , - 3477 , - 3616 , - 4123 , - 4998 , - 353 , - 1964 , - 3943 , - 402 , - 3117 , - 312 , - 3763 , - 1694 , - 5881 , - 4548 , - 3583 , - 2986 , - 2757 , - 2896 , - 3403 , - 4278 , - 5521 , - 1244 , - 3223 , - 5570 , - 2397 , - 5480 , - 3043 , - 974 , - 5161 , - 3828 , - 2863 , - 2266 , - 2037 , - 2176 , - 2683 , - 3558 , - 4801 , - 524 , - 2503 , - 4850 , - 1677 , - 4760 , - 2323 , - 254 , - 4441 , - 3108 , - 2143 , - 1546 , - 1317 , - 1456 , - 1963 , - 2838 , - 4081 , - 5692 , - 1783 , - 4130 , - 957 , - 4040 , - 1603 , - 5422 , - 3721 , - 2388 , - 1423 , - 826 , - 597 , - 736 , - 1243 , - 2118 , - 3361 , - 4972 , - 1063 , - 3410 , - 237 , - 3320 , - 883 , - 4702 , - 3001 , - 1668 , - 703 , - 106 , - 5765 , - 16 , - 523 , - 1398 , - 2641 , - 4252 , - 343 , - 2690 , - 5405 , - 2600 , - 163 , - 3982 , - 2281 , - 948 , - 5871 , - 5274 , - 5045 , - 5184 , - 5691 , - 678 , - 1921 , - 3532 , - 5511 , - 1970 , - 4685 , - 1880 , - 5331 , - 3262 , - 1561 , - 228 , - 5151 , - 4554 , - 4325 , - 4464 , - 4971 , - 5846 , - 1201 , - 2812 , - 4791 , - 1250 , - 3965 , - 1160 , - 4611 , - 2542 , - 841 , - 5396 , - 4431 , - 3834 , - 3605 , - 3744 , - 4251 , - 5126 , - 481 , - 2092 , - 4071 , - 530 , - 3245 , - 440 , - 3891 , - 1822 , - 121 , - 4676 , - 3711 , - 3114 , - 2885 , - 3024 , - 3531 , - 4406 , - 5649 , - 1372 , - 3351 , - 5698 , - 2525 , - 5608 , - 3171 , - 1102 , - 5289 , - 3956 , - 2991 , - 2394 , - 2165 , - 2304 , - 2811 , - 3686 , - 4929 , - 652 , - 2631 , - 4978 , - 1805 , - 4888 , - 2451 , - 382 , - 4569 , - 3236 , - 2271 , - 1674 , - 1445 , - 1584 , - 2091 , - 2966 , - 4209 , - 5820 , - 1911 , - 4258 , - 1085 , - 4168 , - 1731 , - 5550 , - 3849 , - 2516 , - 1551 , - 954 , - 725 , - 864 , - 1371 , - 2246 , - 3489 , - 5100 , - 1191 , - 3538 , - 365 , - 3448 , - 1011 , - 4830 , - 3129 , - 1796 , - 831 , - 234 , - 5 , - 144 , - 651 , - 1526 , - 2769 , - 4380 , - 471 , - 2818 , - 5533 , - 2728 , - 291 , - 4110 , - 2409 , - 1076 , - 111 , - 5402 , - 5173 , - 5312 , - 5819 , - 806 , - 2049 , - 3660 , - 5639 , - 2098 , - 4813 , - 2008 , - 5459 , - 3390 , - 1689 , - 356 , - 5279 , - 4682 , - 4453 , - 4592 , - 5099 , - 86 , - 1329 , - 2940 , - 4919 , - 1378 , - 4093 , - 1288 , - 4739 , - 2670 , - 969 , - 5524 , - 4559 , - 3962 , - 3733 , - 3872 , - 4379 , - 5254 , - 609 , - 2220 , - 4199 , - 658 , - 3373 , - 568 , - 4019 , - 1950 , - 249 , - 4804 , - 3839 , - 3242 , - 3013 , - 3152 , - 3659 , - 4534 , - 5777 , - 1500 , - 3479 , - 5826 , - 2653 , - 5736 , - 3299 , - 1230 , - 5417 , - 4084 , - 3119 , - 2522 , - 2293 , - 2432 , - 2939 , - 3814 , - 5057 , - 780 , - 2759 , - 5106 , - 1933 , - 5016 , - 2579 , - 510 , - 4697 , - 3364 , - 2399 , - 1802 , - 1573 , - 1712 , - 2219 , - 3094 , - 4337 , - 60 , - 2039 , - 4386 , - 1213 , - 4296 , - 1859 , - 5678 , - 3977 , - 2644 , - 1679 , - 1082 , - 853 , - 992 , - 1499 , - 2374 , - 3617 , - 5228 , - 1319 , - 3666 , - 493 , - 3576 , - 1139 , - 4958 , - 3257 , - 1924 , - 959 , - 362 , - 133 , - 272 , - 779 , - 1654 , - 2897 , - 4508 , - 599 , - 2946 , - 5661 , - 2856 , - 419 , - 4238 , - 2537 , - 1204 , - 239 , - 5530 , - 5301 , - 5440 , - 59 , - 934 , - 2177 , - 3788 , - 5767 , - 2226 , - 4941 , - 2136 , - 5587 , - 3518 , - 1817 , - 484 , - 5407 , - 4810 , - 4581 , - 4720 , - 5227 , - 214 , - 1457 , - 3068 , - 5047 , - 1506 , - 4221 , - 1416 , - 4867 , - 2798 , - 1097 , - 5652 , - 4687 , - 4090 , - 3861 , - 4000 , - 4507 , - 5382 , - 737 , - 2348 , - 4327 , - 786 , - 3501 , - 696 , - 4147 , - 2078 , - 377 , - 4932 , - 3967 , - 3370 , - 3141 , - 3280 , - 3787 , - 4662 , - 17 , - 1628 , - 3607 , - 66 , - 2781 , - 5864 , - 3427 , - 1358 , - 5545 , - 4212 , - 3247 , - 2650 , - 2421 , - 2560 , - 3067 , - 3942 , - 5185 , - 908 , - 2887 , - 5234 , - 2061 , - 5144 , - 2707 , - 638 , - 4825 , - 3492 , - 2527 , - 1930 , - 1701 , - 1840 , - 2347 , - 3222 , - 4465 , - 188 , - 2167 , - 4514 , - 1341 , - 4424 , - 1987 , - 5806 , - 4105 , - 2772 , - 1807 , - 1210 , - 981 , - 1120 , - 1627 , - 2502 , - 3745 , - 5356 , - 1447 , - 3794 , - 621 , - 3704 , - 1267 , - 5086 , - 3385 , - 2052 , - 1087 , - 490 , - 261 , - 400 , - 907 , - 1782 , - 3025 , - 4636 , - 727 , - 3074 , - 5789 , - 2984 , - 547 , - 4366 , - 2665 , - 1332 , - 367 , - 5658 , - 5429 , - 5568 , - 187 , - 1062 , - 2305 , - 3916 , - 7 , - 2354 , - 5069 , - 2264 , - 5715 , - 3646 , - 1945 , - 612 , - 5535 , - 4938 , - 4709 , - 4848 , - 5355 , - 342 , - 1585 , - 3196 , - 5175 , - 1634 , - 4349 , - 1544 , - 4995 , - 2926 , - 1225 , - 5780 , - 4815 , - 4218 , - 3989 , - 4128 , - 4635 , - 5510 , - 865 , - 2476 , - 4455 , - 914 , - 3629 , - 824 , - 4275 , - 2206 , - 505 , - 5060 , - 4095 , - 3498 , - 3269 , - 3408 , - 3915 , - 4790 , - 145 , - 1756 , - 3735 , - 194 , - 2909 , - 104 , - 3555 , - 1486 , - 5673 , - 4340 , - 3375 , - 2778 , - 2549 , - 2688 , - 3195 , - 4070 , - 5313 , - 1036 , - 3015 , - 5362 , - 2189 , - 5272 , - 2835 , - 766 , - 4953 , - 3620 , - 2655 , - 2058 , - 1829 , - 1968 , - 2475 , - 3350 , - 4593 , - 316 , - 2295 , - 4642 , - 1469 , - 4552 , - 2115 , - 46 , - 4233 , - 2900 , - 1935 , - 1338 , - 1109 , - 1248 , - 1755 , - 2630 , - 3873 , - 5484 , - 1575 , - 3922 , - 749 , - 3832 , - 1395 , - 5214 , - 3513 , - 2180 , - 1215 , - 618 , - 389 , - 528 , - 1035 , - 1910 , - 3153 , - 4764 , - 855 , - 3202 , - 29 , - 3112 , - 675 , - 4494 , - 2793 , - 1460 , - 495 , - 5786 , - 5557 , - 5696 , - 315 , - 1190 , - 2433 , - 4044 , - 135 , - 2482 , - 5197 , - 2392 , - 5843 , - 3774 , - 2073 , - 740 , - 5663 , - 5066 , - 4837 , - 4976 , - 5483 , - 470 , - 1713 , - 3324 , - 5303 , - 1762 , - 4477 , - 1672 , - 5123 , - 3054 , - 1353 , - 20 , - 4943 , - 4346 , - 4117 , - 4256 , - 4763 , - 5638 , - 993 , - 2604 , - 4583 , - 1042 , - 3757 , - 952 , - 4403 , - 2334 , - 633 , - 5188 , - 4223 , - 3626 , - 3397 , - 3536 , - 4043 , - 4918 , - 273 , - 1884 , - 3863 , - 322 , - 3037 , - 232 , - 3683 , - 1614 , - 5801 , - 4468 , - 3503 , - 2906 , - 2677 , - 2816 , - 3323 , - 4198 , - 5441 , - 1164 , - 3143 , - 5490 , - 2317 , - 5400 , - 2963 , - 894 , - 5081 , - 3748 , - 2783 , - 2186 , - 1957 , - 2096 , - 2603 , - 3478 , - 4721 , - 444 , - 2423 , - 4770 , - 1597 , - 4680 , - 2243 , - 174 , - 4361 , - 3028 , - 2063 , - 1466 , - 1237 , - 1376 , - 1883 , - 2758 , - 4001 , - 5612 , - 1703 , - 4050 , - 877 , - 3960 , - 1523 , - 5342 , - 3641 , - 2308 , - 1343 , - 746 , - 517 , - 656 , - 1163 , - 2038 , - 3281 , - 4892 , - 983 , - 3330 , - 157 , - 3240 , - 803 , - 4622 , - 2921 , - 1588 , - 623 , - 26 , - 5685 , - 5824 , - 443 , - 1318 , - 2561 , - 4172 , - 263 , - 2610 , - 5325 , - 2520 , - 83 , - 3902 , - 2201 , - 868 , - 5791 , - 5194 , - 4965 , - 5104 , - 5611 , - 598 , - 1841 , - 3452 , - 5431 , - 1890 , - 4605 , - 1800 , - 5251 , - 3182 , - 1481 , - 148 , - 5071 , - 4474 , - 4245 , - 4384 , - 4891 , - 5766 , - 1121 , - 2732 , - 4711 , - 1170 , - 3885 , - 1080 , - 4531 , - 2462 , - 761 , - 5316 , - 4351 , - 3754 , - 3525 , - 3664 , - 4171 , - 5046 , - 401 , - 2012 , - 3991 , - 450 , - 3165 , - 360 , - 3811 , - 1742 , - 41 , - 4596 , - 3631 , - 3034 , - 2805 , - 2944 , - 3451 , - 4326 , - 5569 , - 1292 , - 3271 , - 5618 , - 2445 , - 5528 , - 3091 , - 1022 , - 5209 , - 3876 , - 2911 , - 2314 , - 2085 , - 2224 , - 2731 , - 3606 , - 4849 , - 572 , - 2551 , - 4898 , - 1725 , - 4808 , - 2371 , - 302 , - 4489 , - 3156 , - 2191 , - 1594 , - 1365 , - 1504 , - 2011 , - 2886 , - 4129 , - 5740 , - 1831 , - 4178 , - 1005 , - 4088 , - 1651 , - 5470 , - 3769 , - 2436 , - 1471 , - 874 , - 645 , - 784 , - 1291 , - 2166 , - 3409 , - 5020 , - 1111 , - 3458 , - 285 , - 3368 , - 931 , - 4750 , - 3049 , - 1716 , - 751 , - 154 , - 5813 , - 64 , - 571 , - 1446 , - 2689 , - 4300 , - 391 , - 2738 , - 5453 , - 2648 , - 211 , - 4030 , - 2329 , - 996 , - 31 , - 5322 , - 5093 , - 5232 , - 5739 , - 726 , - 1969 , - 3580 , - 5559 , - 2018 , - 4733 , - 1928 , - 5379 , - 3310 , - 1609 , - 276 , - 5199 , - 4602 , - 4373 , - 4512 , - 5019 , - 6 , - 1249 , - 2860 , - 4839 , - 1298 , - 4013 , - 1208 , - 4659 , - 2590 , - 889 , - 5444 , - 4479 , - 3882 , - 3653 , - 3792 , - 4299 , - 5174 , - 529 , - 2140 , - 4119 , - 578 , - 3293 , - 488 , - 3939 , - 1870 , - 169 , - 4724 , - 3759 , - 3162 , - 2933 , - 3072 , - 3579 , - 4454 , - 5697 , - 1420 , - 3399 , - 5746 , - 2573 , - 5656 , - 3219 , - 1150 , - 5337 , - 4004 , - 3039 , - 2442 , - 2213 , - 2352 , - 2859 , - 3734 , - 4977 , - 700 , - 2679 , - 5026 , - 1853 , - 4936 , - 2499 , - 430 , - 4617 , - 3284 , - 2319 , - 1722 , - 1493 , - 1632 , - 2139 , - 3014 , - 4257 , - 5868 , - 1959 , - 4306 , - 1133 , - 4216 , - 1779 , - 5598 , - 3897 , - 2564 , - 1599 , - 1002 , - 773 , - 912 , - 1419 , - 2294 , - 3537 , - 5148 , - 1239 , - 3586 , - 413 , - 3496 , - 1059 , - 4878 , - 3177 , - 1844 , - 879 , - 282 , - 53 , - 192 , - 699 , - 1574 , - 2817 , - 4428 , - 519 , - 2866 , - 5581 , - 2776 , - 339 , - 4158 , - 2457 , - 1124 , - 159 , - 5450 , - 5221 , - 5360 , - 5867 , - 854 , - 2097 , - 3708 , - 5687 , - 2146 , - 4861 , - 2056 , - 5507 , - 3438 , - 1737 , - 404 , - 5327 , - 4730 , - 4501 , - 4640 , - 5147 , - 134 , - 1377 , - 2988 , - 4967 , - 1426 , - 4141 , - 1336 , - 4787 , - 2718 , - 1017 , - 5572 , - 4607 , - 4010 , - 3781 , - 3920 , - 4427 , - 5302 , - 657 , - 2268 , - 4247 , - 706 , - 3421 , - 616 , - 4067 , - 1998 , - 297 , - 4852 , - 3887 , - 3290 , - 3061 , - 3200 , - 3707 , - 4582 , - 5825 , - 1548 , - 3527 , - 5874 , - 2701 , - 5784 , - 3347 , - 1278 , - 5465 , - 4132 , - 3167 , - 2570 , - 2341 , - 2480 , - 2987 , - 3862 , - 5105 , - 828 , - 2807 , - 5154 , - 1981 , - 5064 , - 2627 , - 558 , - 4745 , - 3412 , - 2447 , - 1850 , - 1621 , - 1760 , - 2267 , - 3142 , - 4385 , - 108 , - 2087 , - 4434 , - 1261 , - 4344 , - 1907 , - 5726 , - 4025 , - 2692 , - 1727 , - 1130 , - 901 , - 1040 , - 1547 , - 2422 , - 3665 , - 5276 , - 1367 , - 3714 , - 541 , - 3624 , - 1187 , - 5006 , - 3305 , - 1972 , - 1007 , - 410 , - 181 , - 320 , - 827 , - 1702 , - 2945 , - 4556 , - 647 , - 2994 , - 5709 , - 2904 , - 467 , - 4286 , - 2585 , - 1252 , - 287 , - 5578 , - 5349 , - 5488 , - 107 , - 982 , - 2225 , - 3836 , - 5815 , - 2274 , - 4989 , - 2184 , - 5635 , - 3566 , - 1865 , - 532 , - 5455 , - 4858 , - 4629 , - 4768 , - 5275 , - 262 , - 1505 , - 3116 , - 5095 , - 1554 , - 4269 , - 1464 , - 4915 , - 2846 , - 1145 , - 5700 , - 4735 , - 4138 , - 3909 , - 4048 , - 4555 , - 5430 , - 785 , - 2396 , - 4375 , - 834 , - 3549 , - 744 , - 4195 , - 2126 , - 425 , - 4980 , - 4015 , - 3418 , - 3189 , - 3328 , - 3835 , - 4710 , - 65 , - 1676 , - 3655 , - 114 , - 2829 , - 24 , - 3475 , - 1406 , - 5593 , - 4260 , - 3295 , - 2698 , - 2469 , - 2608 , - 3115 , - 3990 , - 5233 , - 956 , - 2935 , - 5282 , - 2109 , - 5192 , - 2755 , - 686 , - 4873 , - 3540 , - 2575 , - 1978 , - 1749 , - 1888 , - 2395 , - 3270 , - 4513 , - 236 , - 2215 , - 4562 , - 1389 , - 4472 , - 2035 , - 5854 , - 4153 , - 2820 , - 1855 , - 1258 , - 1029 , - 1168 , - 1675 , - 2550 , - 3793 , - 5404 , - 1495 , - 3842 , - 669 , - 3752 , - 1315 , - 5134 , - 3433 , - 2100 , - 1135 , - 538 , - 309 , - 448 , - 955 , - 1830 , - 3073 , - 4684 , - 775 , - 3122 , - 5837 , - 3032 , - 595 , - 4414 , - 2713 , - 1380 , - 415 , - 5706 , - 5477 , - 5616 , - 235 , - 1110 , - 2353 , - 3964 , - 55 , - 2402 , - 5117 , - 2312 , - 5763 , - 3694 , - 1993 , - 660 , - 5583 , - 4986 , - 4757 , - 4896 , - 5403 , - 390 , - 1633 , - 3244 , - 5223 , - 1682 , - 4397 , - 1592 , - 5043 , - 2974 , - 1273 , - 5828 , - 4863 , - 4266 , - 4037 , - 4176 , - 4683 , - 5558 , - 913 , - 2524 , - 4503 , - 962 , - 3677 , - 872 , - 4323 , - 2254 , - 553 , - 5108 , - 4143 , - 3546 , - 3317 , - 3456 , - 3963 , - 4838 , - 193 , - 1804 , - 3783 , - 242 , - 2957 , - 152 , - 3603 , - 1534 , - 5721 , - 4388 , - 3423 , - 2826 , - 2597 , - 2736 , - 3243 , - 4118 , - 5361 , - 1084 , - 3063 , - 5410 , - 2237 , - 5320 , - 2883 , - 814 , - 5001 , - 3668 , - 2703 , - 2106 , - 1877 , - 2016 , - 2523 , - 3398 , - 4641 , - 364 , - 2343 , - 4690 , - 1517 , - 4600 , - 2163 , - 94 , - 4281 , - 2948 , - 1983 , - 1386 , - 1157 , - 1296 , - 1803 , - 2678 , - 3921 , - 5532 , - 1623 , - 3970 , - 797 , - 3880 , - 1443 , - 5262 , - 3561 , - 2228 , - 1263 , - 666 , - 437 , - 576 , - 1083 , - 1958 , - 3201 , - 4812 , - 903 , - 3250 , - 77 , - 3160 , - 723 , - 4542 , - 2841 , - 1508 , - 543 , - 5834 , - 5605 , - 5744 , - 363 , - 1238 , - 2481 , - 4092 , - 183 , - 2530 , - 5245 , - 2440 , - 3 , - 3822 , - 2121 , - 788 , - 5711 , - 5114 , - 4885 , - 5024 , - 5531 , - 518 , - 1761 , - 3372 , - 5351 , - 1810 , - 4525 , - 1720 , - 5171 , - 3102 , - 1401 , - 68 , - 4991 , - 4394 , - 4165 , - 4304 , - 4811 , - 5686 , - 1041 , - 2652 , - 4631 , - 1090 , - 3805 , - 1000 , - 4451 , - 2382 , - 681 , - 5236 , - 4271 , - 3674 , - 3445 , - 3584 , - 4091 , - 4966 , - 321 , - 1932 , - 3911 , - 370 , - 3085 , - 280 , - 3731 , - 1662 , - 5849 , - 4516 , - 3551 , - 2954 , - 2725 , - 2864 , - 3371 , - 4246 , - 5489 , - 1212 , - 3191 , - 5538 , - 2365 , - 5448 , - 3011 , - 942 , - 5129 , - 3796 , - 2831 , - 2234 , - 2005 , - 2144 , - 2651 , - 3526 , - 4769 , - 492 , - 2471 , - 4818 , - 1645 , - 4728 , - 2291 , - 222 , - 4409 , - 3076 , - 2111 , - 1514 , - 1285 , - 1424 , - 1931 , - 2806 , - 4049 , - 5660 , - 1751 , - 4098 , - 925 , - 4008 , - 1571 , - 5390 , - 3689 , - 2356 , - 1391 , - 794 , - 565 , - 704 , - 1211 , - 2086 , - 3329 , - 4940 , - 1031 , - 3378 , - 205 , - 3288 , - 851 , - 4670 , - 2969 , - 1636 , - 671 , - 74 , - 5733 , - 5872 , - 491 , - 1366 , - 2609 , - 4220 , - 311 , - 2658 , - 5373 , - 2568 , - 131 , - 3950 , - 2249 , - 916 , - 5839 , - 5242 , - 5013 , - 5152 , - 5659 , - 646 , - 1889 , - 3500 , - 5479 , - 1938 , - 4653 , - 1848 , - 5299 , - 3230 , - 1529 , - 196 , - 5119 , - 4522 , - 4293 , - 4432 , - 4939 , - 5814 , - 1169 , - 2780 , - 4759 , - 1218 , - 3933 , - 1128 , - 4579 , - 2510 , - 809 , - 5364 , - 4399 , - 3802 , - 3573 , - 3712 , - 4219 , - 5094 , - 449 , - 2060 , - 4039 , - 498 , - 3213 , - 408 , - 3859 , - 1790 , - 89 , - 4644 , - 3679 , - 3082 , - 2853 , - 2992 , - 3499 , - 4374 , - 5617 , - 1340 , - 3319 , - 5666 , - 2493 , - 5576 , - 3139 , - 1070 , - 5257 , - 3924 , - 2959 , - 2362 , - 2133 , - 2272 , - 2779 , - 3654 , - 4897 , - 620 , - 2599 , - 4946 , - 1773 , - 4856 , - 2419 , - 350 , - 4537 , - 3204 , - 2239 , - 1642 , - 1413 , - 1552 , - 2059 , - 2934 , - 4177 , - 5788 , - 1879 , - 4226 , - 1053 , - 4136 , - 1699 , - 5518 , - 3817 , - 2484 , - 1519 , - 922 , - 693 , - 832 , - 1339 , - 2214 , - 3457 , - 5068 , - 1159 , - 3506 , - 333 , - 3416 , - 979 , - 4798 , - 3097 , - 1764 , - 799 , - 202 , - 5861 , - 112 , - 619 , - 1494 , - 2737 , - 4348 , - 439 , - 2786 , - 5501 , - 2696 , - 259 , - 4078 , - 2377 , - 1044 , - 79 , - 5370 , - 5141 , - 5280 , - 5787 , - 774 , - 2017 , - 3628 , - 5607 , - 2066 , - 4781 , - 1976 , - 5427 , - 3358 , - 1657 , - 324 , - 5247 , - 4650 , - 4421 , - 4560 , - 5067 , - 54 , - 1297 , - 2908 , - 4887 , - 1346 , - 4061 , - 1256 , - 4707 , - 2638 , - 937 , - 5492 , - 4527 , - 3930 , - 3701 , - 3840 , - 4347 , - 5222 , - 577 , - 2188 , - 4167 , - 626 , - 3341 , - 536 , - 3987 , - 1918 , - 217 , - 4772 , - 3807 , - 3210 , - 2981 , - 3120 , - 3627 , - 4502 , - 5745 , - 1468 , - 3447 , - 5794 , - 2621 , - 5704 , - 3267 , - 1198 , - 5385 , - 4052 , - 3087 , - 2490 , - 2261 , - 2400 , - 2907 , - 3782 , - 5025 , - 748 , - 2727 , - 5074 , - 1901 , - 4984 , - 2547 , - 478 , - 4665 , - 3332 , - 2367 , - 1770 , - 1541 , - 1680 , - 2187 , - 3062 , - 4305 , - 28 , - 2007 , - 4354 , - 1181 , - 4264 , - 1827 , - 5646 , - 3945 , - 2612 , - 1647 , - 1050 , - 821 , - 960 , - 1467 , - 2342 , - 3585 , - 5196 , - 1287 , - 3634 , - 461 , - 3544 , - 1107 , - 4926 , - 3225 , - 1892 , - 927 , - 330 , - 101 , - 240 , - 747 , - 1622 , - 2865 , - 4476 , - 567 , - 2914 , - 5629 , - 2824 , - 387 , - 4206 , - 2505 , - 1172 , - 207 , - 5498 , - 5269 , - 5408 , - 27 , - 902 , - 2145 , - 3756 , - 5735 , - 2194 , - 4909 , - 2104 , - 5555 , - 3486 , - 1785 , - 452 , - 5375 , - 4778 , - 4549 , - 4688 , - 5195 , - 182 , - 1425 , - 3036 , - 5015 , - 1474 , - 4189 , - 1384 , - 4835 , - 2766 , - 1065 , - 5620 , - 4655 , - 4058 , - 3829 , - 3968 , - 4475 , - 5350 , - 705 , - 2316 , - 4295 , - 754 , - 3469 , - 664 , - 4115 , - 2046 , - 345 , - 4900 , - 3935 , - 3338 , - 3109 , - 3248 , - 3755 , - 4630 , - 5873 , - 1596 , - 3575 , - 34 , - 2749 , - 5832 , - 3395 , - 1326 , - 5513 , - 4180 , - 3215 , - 2618 , - 2389 , - 2528 , - 3035 , - 3910 , - 5153 , - 876 , - 2855 , - 5202 , - 2029 , - 5112 , - 2675 , - 606 , - 4793 , - 3460 , - 2495 , - 1898 , - 1669 , - 1808 , - 2315 , - 3190 , - 4433 , - 156 , - 2135 , - 4482 , - 1309 , - 4392 , - 1955 , - 5774 , - 4073 , - 2740 , - 1775 , - 1178 , - 949 , - 1088 , - 1595 , - 2470 , - 3713 , - 5324 , - 1415 , - 3762 , - 589 , - 3672 , - 1235 , - 5054 , - 3353 , - 2020 , - 1055 , - 458 , - 229 , - 368 , - 875 , - 1750 , - 2993 , - 4604 , - 695 , - 3042 , - 5757 , - 2952 , - 515 , - 4334 , - 2633 , - 1300 , - 335 , - 5626 , - 5397 , - 5536 , - 155 , - 1030 , - 2273 , - 3884 , - 5863 , - 2322 , - 5037 , - 2232 , - 5683 , - 3614 , - 1913 , - 580 , - 5503 , - 4906 , - 4677 , - 4816 , - 5323 , - 310 , - 1553 , - 3164 , - 5143 , - 1602 , - 4317 , - 1512 , - 4963 , - 2894 , - 1193 , - 5748 , - 4783 , - 4186 , - 3957 , - 4096 , - 4603 , - 5478 , - 833 , - 2444 , - 4423 , - 882 , - 3597 , - 792 , - 4243 , - 2174 , - 473 , - 5028 , - 4063 , - 3466 , - 3237 , - 3376 , - 3883 , - 4758 , - 113 , - 1724 , - 3703 , - 162 , - 2877 , - 72 , - 3523 , - 1454 , - 5641 , - 4308 , - 3343 , - 2746 , - 2517 , - 2656 , - 3163 , - 4038 , - 5281 , - 1004 , - 2983 , - 5330 , - 2157 , - 5240 , - 2803 , - 734 , - 4921 , - 3588 , - 2623 , - 2026 , - 1797 , - 1936 , - 2443 , - 3318 , - 4561 , - 284 , - 2263 , - 4610 , - 1437 , - 4520 , - 2083 , - 14 , - 4201 , - 2868 , - 1903 , - 1306 , - 1077 , - 1216 , - 1723 , - 2598 , - 3841 , - 5452 , - 1543 , - 3890 , - 717 , - 3800 , - 1363 , - 5182 , - 3481 , - 2148 , - 1183 , - 586 , - 357 , - 496 , - 1003 , - 1878 , - 3121 , - 4732 , - 823 , - 3170 , - 5885 , - 3080 , - 643 , - 4462 , - 2761 , - 1428 , - 463 , - 5754 , - 5525 , - 5664 , - 283 , - 1158 , - 2401 , - 4012 , - 103 , - 2450 , - 5165 , - 2360 , - 5811 , - 3742 , - 2041 , - 708 , - 5631 , - 5034 , - 4805 , - 4944 , - 5451 , - 438 , - 1681 , - 3292 , - 5271 , - 1730 , - 4445 , - 1640 , - 5091 , - 3022 , - 1321 , - 5876 , - 4911 , - 4314 , - 4085 , - 4224 , - 4731 , - 5606 , - 961 , - 2572 , - 4551 , - 1010 , - 3725 , - 920 , - 4371 , - 2302 , - 601 , - 5156 , - 4191 , - 3594 , - 3365 , - 3504 , - 4011 , - 4886 , - 241 , - 1852 , - 3831 , - 290 , - 3005 , - 200 , - 3651 , - 1582 , - 5769 , - 4436 , - 3471 , - 2874 , - 2645 , - 2784 , - 3291 , - 4166 , - 5409 , - 1132 , - 3111 , - 5458 , - 2285 , - 5368 , - 2931 , - 862 , - 5049 , - 3716 , - 2751 , - 2154 , - 1925 , - 2064 , - 2571 , - 3446 , - 4689 , - 412 , - 2391 , - 4738 , - 1565 , - 4648 , - 2211 , - 142 , - 4329 , - 2996 , - 2031 , - 1434 , - 1205 , - 1344 , - 1851 , - 2726 , - 3969 , - 5580 , - 1671 , - 4018 , - 845 , - 3928 , - 1491 , - 5310 , - 3609 , - 2276 , - 1311 , - 714 , - 485 , - 624 , - 1131 , - 2006 , - 3249 , - 4860 , - 951 , - 3298 , - 125 , - 3208 , - 771 , - 4590 , - 2889 , - 1556 , - 591 , - 5882 , - 5653 , - 5792 , - 411 , - 1286 , - 2529 , - 4140 , - 231 , - 2578 , - 5293 , - 2488 , - 51 , - 3870 , - 2169 , - 836 , - 5759 , - 5162 , - 4933 , - 5072 , - 5579 , - 566 , - 1809 , - 3420 , - 5399 , - 1858 , - 4573 , - 1768 , - 5219 , - 3150 , - 1449 , - 116 , - 5039 , - 4442 , - 4213 , - 4352 , - 4859 , - 5734 , - 1089 , - 2700 , - 4679 , - 1138 , - 3853 , - 1048 , - 4499 , - 2430 , - 729 , - 5284 , - 4319 , - 3722 , - 3493 , - 3632 , - 4139 , - 5014 , - 369 , - 1980 , - 3959 , - 418 , - 3133 , - 328 , - 3779 , - 1710 , - 9 , - 4564 , - 3599 , - 3002 , - 2773 , - 2912 , - 3419 , - 4294 , - 5537 , - 1260 , - 3239 , - 5586 , - 2413 , - 5496 , - 3059 , - 990 , - 5177 , - 3844 , - 2879 , - 2282 , - 2053 , - 2192 , - 2699 , - 3574 , - 4817 , - 540 , - 2519 , - 4866 , - 1693 , - 4776 , - 2339 , - 270 , - 4457 , - 3124 , - 2159 , - 1562 , - 1333 , - 1472 , - 1979 , - 2854 , - 4097 , - 5708 , - 1799 , - 4146 , - 973 , - 4056 , - 1619 , - 5438 , - 3737 , - 2404 , - 1439 , - 842 , - 613 , - 752 , - 1259 , - 2134 , - 3377 , - 4988 , - 1079 , - 3426 , - 253 , - 3336 , - 899 , - 4718 , - 3017 , - 1684 , - 719 , - 122 , - 5781 , - 32 , - 539 , - 1414 , - 2657 , - 4268 , - 359 , - 2706 , - 5421 , - 2616 , - 179 , - 3998 , - 2297 , - 964 , - 5887 , - 5290 , - 5061 , - 5200 , - 5707 , - 694 , - 1937 , - 3548 , - 5527 , - 1986 , - 4701 , - 1896 , - 5347 , - 3278 , - 1577 , - 244 , - 5167 , - 4570 , - 4341 , - 4480 , - 4987 , - 5862 , - 1217 , - 2828 , - 4807 , - 1266 , - 3981 , - 1176 , - 4627 , - 2558 , - 857 , - 5412 , - 4447 , - 3850 , - 3621 , - 3760 , - 4267 , - 5142 , - 497 , - 2108 , - 4087 , - 546 , - 3261 , - 456 , - 3907 , - 1838 , - 137 , - 4692 , - 3727 , - 3130 , - 2901 , - 3040 , - 3547 , - 4422 , - 5665 , - 1388 , - 3367 , - 5714 , - 2541 , - 5624 , - 3187 , - 1118 , - 5305 , - 3972 , - 3007 , - 2410 , - 2181 , - 2320 , - 2827 , - 3702 , - 4945 , - 668 , - 2647 , - 4994 , - 1821 , - 4904 , - 2467 , - 398 , - 4585 , - 3252 , - 2287 , - 1690 , - 1461 , - 1600 , - 2107 , - 2982 , - 4225 , - 5836 , - 1927 , - 4274 , - 1101 , - 4184 , - 1747 , - 5566 , - 3865 , - 2532 , - 1567 , - 970 , - 741 , - 880 , - 1387 , - 2262 , - 3505 , - 5116 , - 1207 , - 3554 , - 381 , - 3464 , - 1027 , - 4846 , - 3145 , - 1812 , - 847 , - 250 , - 21 , - 160 , - 667 , - 1542 , - 2785 , - 4396 , - 487 , - 2834 , - 5549 , - 2744 , - 307 , - 4126 , - 2425 , - 1092 , - 127 , - 5418 , - 5189 , - 5328 , - 5835 , - 822 , - 2065 , - 3676 , - 5655 , - 2114 , - 4829 , - 2024 , - 5475 , - 3406 , - 1705 , - 372 , - 5295 , - 4698 , - 4469 , - 4608 , - 5115 , - 102 , - 1345 , - 2956 , - 4935 , - 1394 , - 4109 , - 1304 , - 4755 , - 2686 , - 985 , - 5540 , - 4575 , - 3978 , - 3749 , - 3888 , - 4395 , - 5270 , - 625 , - 2236 , - 4215 , - 674 , - 3389 , - 584 , - 4035 , - 1966 , - 265 , - 4820 , - 3855 , - 3258 , - 3029 , - 3168 , - 3675 , - 4550 , - 5793 , - 1516 , - 3495 , - 5842 , - 2669 , - 5752 , - 3315 , - 1246 , - 5433 , - 4100 , - 3135 , - 2538 , - 2309 , - 2448 , - 2955 , - 3830 , - 5073 , - 796 , - 2775 , - 5122 , - 1949 , - 5032 , - 2595 , - 526 , - 4713 , - 3380 , - 2415 , - 1818 , - 1589 , - 1728 , - 2235 , - 3110 , - 4353 , - 76 , - 2055 , - 4402 , - 1229 , - 4312 , - 1875 , - 5694 , - 3993 , - 2660 , - 1695 , - 1098 , - 869 , - 1008 , - 1515 , - 2390 , - 3633 , - 5244 , - 1335 , - 3682 , - 509 , - 3592 , - 1155 , - 4974 , - 3273 , - 1940 , - 975 , - 378 , - 149 , - 288 , - 795 , - 1670 , - 2913 , - 4524 , - 615 , - 2962 , - 5677 , - 2872 , - 435 , - 4254 , - 2553 , - 1220 , - 255 , - 5546 , - 5317 , - 5456 , - 75 , - 950 , - 2193 , - 3804 , - 5783 , - 2242 , - 4957 , - 2152 , - 5603 , - 3534 , - 1833 , - 500 , - 5423 , - 4826 , - 4597 , - 4736 , - 5243 , - 230 , - 1473 , - 3084 , - 5063 , - 1522 , - 4237 , - 1432 , - 4883 , - 2814 , - 1113 , - 5668 , - 4703 , - 4106 , - 3877 , - 4016 , - 4523 , - 5398 , - 753 , - 2364 , - 4343 , - 802 , - 3517 , - 712 , - 4163 , - 2094 , - 393 , - 4948 , - 3983 , - 3386 , - 3157 , - 3296 , - 3803 , - 4678 , - 33 , - 1644 , - 3623 , - 82 , - 2797 , - 5880 , - 3443 , - 1374 , - 5561 , - 4228 , - 3263 , - 2666 , - 2437 , - 2576 , - 3083 , - 3958 , - 5201 , - 924 , - 2903 , - 5250 , - 2077 , - 5160 , - 2723 , - 654 , - 4841 , - 3508 , - 2543 , - 1946 , - 1717 , - 1856 , - 2363 , - 3238 , - 4481 , - 204 , - 2183 , - 4530 , - 1357 , - 4440 , - 2003 , - 5822 , - 4121 , - 2788 , - 1823 , - 1226 , - 997 , - 1136 , - 1643 , - 2518 , - 3761 , - 5372 , - 1463 , - 3810 , - 637 , - 3720 , - 1283 , - 5102 , - 3401 , - 2068 , - 1103 , - 506 , - 277 , - 416 , - 923 , - 1798 , - 3041 , - 4652 , - 743 , - 3090 , - 5805 , - 3000 , - 563 , - 4382 , - 2681 , - 1348 , - 383 , - 5674 , - 5445 , - 5584 , - 203 , - 1078 , - 2321 , - 3932 , - 23 , - 2370 , - 5085 , - 2280 , - 5731 , - 3662 , - 1961 , - 628 , - 5551 , - 4954 , - 4725 , - 4864 , - 5371 , - 358 , - 1601 , - 3212 , - 5191 , - 1650 , - 4365 , - 1560 , - 5011 , - 2942 , - 1241 , - 5796 , - 4831 , - 4234 , - 4005 , - 4144 , - 4651 , - 5526 , - 881 , - 2492 , - 4471 , - 930 , - 3645 , - 840 , - 4291 , - 2222 , - 521 , - 5076 , - 4111 , - 3514 , - 3285 , - 3424 , - 3931 , - 4806 , - 161 , - 1772 , - 3751 , - 210 , - 2925 , - 120 , - 3571 , - 1502 , - 5689 , - 4356 , - 3391 , - 2794 , - 2565 , - 2704 , - 3211 , - 4086 , - 5329 , - 1052 , - 3031 , - 5378 , - 2205 , - 5288 , - 2851 , - 782 , - 4969 , - 3636 , - 2671 , - 2074 , - 1845 , - 1984 , - 2491 , - 3366 , - 4609 , - 332 , - 2311 , - 4658 , - 1485 , - 4568 , - 2131 , - 62 , - 4249 , - 2916 , - 1951 , - 1354 , - 1125 , - 1264 , - 1771 , - 2646 , - 3889 , - 5500 , - 1591 , - 3938 , - 765 , - 3848 , - 1411 , - 5230 , - 3529 , - 2196 , - 1231 , - 634 , - 405 , - 544 , - 1051 , - 1926 , - 3169 , - 4780 , - 871 , - 3218 , - 45 , - 3128 , - 691 , - 4510 , - 2809 , - 1476 , - 511 , - 5802 , - 5573 , - 5712 , - 331 , - 1206 , - 2449 , - 4060 , - 151 , - 2498 , - 5213 , - 2408 , - 5859 , - 3790 , - 2089 , - 756 , - 5679 , - 5082 , - 4853 , - 4992 , - 5499 , - 486 , - 1729 , - 3340 , - 5319 , - 1778 , - 4493 , - 1688 , - 5139 , - 3070 , - 1369 , - 36 , - 4959 , - 4362 , - 4133 , - 4272 , - 4779 , - 5654 , - 1009 , - 2620 , - 4599 , - 1058 , - 3773 , - 968 , - 4419 , - 2350 , - 649 , - 5204 , - 4239 , - 3642 , - 3413 , - 3552 , - 4059 , - 4934 , - 289 , - 1900 , - 3879 , - 338 , - 3053 , - 248 , - 3699 , - 1630 , - 5817 , - 4484 , - 3519 , - 2922 , - 2693 , - 2832 , - 3339 , - 4214 , - 5457 , - 1180 , - 3159 , - 5506 , - 2333 , - 5416 , - 2979 , - 910 , - 5097 , - 3764 , - 2799 , - 2202 , - 1973 , - 2112 , - 2619 , - 3494 , - 4737 , - 460 , - 2439 , - 4786 , - 1613 , - 4696 , - 2259 , - 190 , - 4377 , - 3044 , - 2079 , - 1482 , - 1253 , - 1392 , - 1899 , - 2774 , - 4017 , - 5628 , - 1719 , - 4066 , - 893 , - 3976 , - 1539 , - 5358 , - 3657 , - 2324 , - 1359 , - 762 , - 533 , - 672 , - 1179 , - 2054 , - 3297 , - 4908 , - 999 , - 3346 , - 173 , - 3256 , - 819 , - 4638 , - 2937 , - 1604 , - 639 , - 42 , - 5701 , - 5840 , - 459 , - 1334 , - 2577 , - 4188 , - 279 , - 2626 , - 5341 , - 2536 , - 99 , - 3918 , - 2217 , - 884 , - 5807 , - 5210 , - 4981 , - 5120 , - 5627 , - 614 , - 1857 , - 3468 , - 5447 , - 1906 , - 4621 , - 1816 , - 5267 , - 3198 , - 1497 , - 164 , - 5087 , - 4490 , - 4261 , - 4400 , - 4907 , - 5782 , - 1137 , - 2748 , - 4727 , - 1186 , - 3901 , - 1096 , - 4547 , - 2478 , - 777 , - 5332 , - 4367 , - 3770 , - 3541 , - 3680 , - 4187 , - 5062 , - 417 , - 2028 , - 4007 , - 466 , - 3181 , - 376 , - 3827 , - 1758 , - 57 , - 4612 , - 3647 , - 3050 , - 2821 , - 2960 , - 3467 , - 4342 , - 5585 , - 1308 , - 3287 , - 5634 , - 2461 , - 5544 , - 3107 , - 1038 , - 5225 , - 3892 , - 2927 , - 2330 , - 2101 , - 2240 , - 2747 , - 3622 , - 4865 , - 588 , - 2567 , - 4914 , - 1741 , - 4824 , - 2387 , - 318 , - 4505 , - 3172 , - 2207 , - 1610 , - 1381 , - 1520 , - 2027 , - 2902 , - 4145 , - 5756 , - 1847 , - 4194 , - 1021 , - 4104 , - 1667 , - 5486 , - 3785 , - 2452 , - 1487 , - 890 , - 661 , - 800 , - 1307 , - 2182 , - 3425 , - 5036 , - 1127 , - 3474 , - 301 , - 3384 , - 947 , - 4766 , - 3065 , - 1732 , - 767 , - 170 , - 5829 , - 80 , - 587 , - 1462 , - 2705 , - 4316 , - 407 , - 2754 , - 5469 , - 2664 , - 227 , - 4046 , - 2345 , - 1012 , - 47 , - 5338 , - 5109 , - 5248 , - 5755 , - 742 , - 1985 , - 3596 , - 5575 , - 2034 , - 4749 , - 1944 , - 5395 , - 3326 , - 1625 , - 292 , - 5215 , - 4618 , - 4389 , - 4528 , - 5035 , - 22 , - 1265 , - 2876 , - 4855 , - 1314 , - 4029 , - 1224 , - 4675 , - 2606 , - 905 , - 5460 , - 4495 , - 3898 , - 3669 , - 3808 , - 4315 , - 5190 , - 545 , - 2156 , - 4135 , - 594 , - 3309 , - 504 , - 3955 , - 1886 , - 185 , - 4740 , - 3775 , - 3178 , - 2949 , - 3088 , - 3595 , - 4470 , - 5713 , - 1436 , - 3415 , - 5762 , - 2589 , - 5672 , - 3235 , - 1166 , - 5353 , - 4020 , - 3055 , - 2458 , - 2229 , - 2368 , - 2875 , - 3750 , - 4993 , - 716 , - 2695 , - 5042 , - 1869 , - 4952 , - 2515 , - 446 , - 4633 , - 3300 , - 2335 , - 1738 , - 1509 , - 1648 , - 2155 , - 3030 , - 4273 , - 5884 , - 1975 , - 4322 , - 1149 , - 4232 , - 1795 , - 5614 , - 3913 , - 2580 , - 1615 , - 1018 , - 789 , - 928 , - 1435 , - 2310 , - 3553 , - 5164 , - 1255 , - 3602 , - 429 , - 3512 , - 1075 , - 4894 , - 3193 , - 1860 , - 895 , - 298 , - 69 , - 208 , - 715 , - 1590 , - 2833 , - 4444 , - 535 , - 2882 , - 5597 , - 2792 , - 355 , - 4174 , - 2473 , - 1140 , - 175 , - 5466 , - 5237 , - 5376 , - 5883 , - 870 , - 2113 , - 3724 , - 5703 , - 2162 , - 4877 , - 2072 , - 5523 , - 3454 , - 1753 , - 420 , - 5343 , - 4746 , - 4517 , - 4656 , - 5163 , - 150 , - 1393 , - 3004 , - 4983 , - 1442 , - 4157 , - 1352 , - 4803 , - 2734 , - 1033 , - 5588 , - 4623 , - 4026 , - 3797 , - 3936 , - 4443 , - 5318 , - 673 , - 2284 , - 4263 , - 722 , - 3437 , - 632 , - 4083 , - 2014 , - 313 , - 4868 , - 3903 , - 3306 , - 3077 , - 3216 , - 3723 , - 4598 , - 5841 , - 1564 , - 3543 , - 2 , - 2717 , - 5800 , - 3363 , - 1294 , - 5481 , - 4148 , - 3183 , - 2586 , - 2357 , - 2496 , - 3003 , - 3878 , - 5121 , - 844 , - 2823 , - 5170 , - 1997 , - 5080 , - 2643 , - 574 , - 4761 , - 3428 , - 2463 , - 1866 , - 1637 , - 1776 , - 2283 , - 3158 , - 4401 , - 124 , - 2103 , - 4450 , - 1277 , - 4360 , - 1923 , - 5742 , - 4041 , - 2708 , - 1743 , - 1146 , - 917 , - 1056 , - 1563 , - 2438 , - 3681 , - 5292 , - 1383 , - 3730 , - 557 , - 3640 , - 1203 , - 5022 , - 3321 , - 1988 , - 1023 , - 426 , - 197 , - 336 , - 843 , - 1718 , - 2961 , - 4572 , - 663 , - 3010 , - 5725 , - 2920 , - 483 , - 4302 , - 2601 , - 1268 , - 303 , - 5594 , - 5365 , - 5504 , - 123 , - 998 , - 2241 , - 3852 , - 5831 , - 2290 , - 5005 , - 2200 , - 5651 , - 3582 , - 1881 , - 548 , - 5471 , - 4874 , - 4645 , - 4784 , - 5291 , - 278 , - 1521 , - 3132 , - 5111 , - 1570 , - 4285 , - 1480 , - 4931 , - 2862 , - 1161 , - 5716 , - 4751 , - 4154 , - 3925 , - 4064 , - 4571 , - 5446 , - 801 , - 2412 , - 4391 , - 850 , - 3565 , - 760 , - 4211 , - 2142 , - 441 , - 4996 , - 4031 , - 3434 , - 3205 , - 3344 , - 3851 , - 4726 , - 81 , - 1692 , - 3671 , - 130 , - 2845 , - 40 , - 3491 , - 1422 , - 5609 , - 4276 , - 3311 , - 2714 , - 2485 , - 2624 , - 3131 , - 4006 , - 5249 , - 972 , - 2951 , - 5298 , - 2125 , - 5208 , - 2771 , - 702 , - 4889 , - 3556 , - 2591 , - 1994 , - 1765 , - 1904 , - 2411 , - 3286 , - 4529 , - 252 , - 2231 , - 4578 , - 1405 , - 4488 , - 2051 , - 5870 , - 4169 , - 2836 , - 1871 , - 1274 , - 1045 , - 1184 , - 1691 , - 2566 , - 3809 , - 5420 , - 1511 , - 3858 , - 685 , - 3768 , - 1331 , - 5150 , - 3449 , - 2116 , - 1151 , - 554 , - 325 , - 464 , - 971 , - 1846 , - 3089 , - 4700 , - 791 , - 3138 , - 5853 , - 3048 , - 611 , - 4430 , - 2729 , - 1396 , - 431 , - 5722 , - 5493 , - 5632 , - 251 , - 1126 , - 2369 , - 3980 , - 71 , - 2418 , - 5133 , - 2328 , - 5779 , - 3710 , - 2009 , - 676 , - 5599 , - 5002 , - 4773 , - 4912 , - 5419 , - 406 , - 1649 , - 3260 , - 5239 , - 1698 , - 4413 , - 1608 , - 5059 , - 2990 , - 1289 , - 5844 , - 4879 , - 4282 , - 4053 , - 4192 , - 4699 , - 5574 , - 929 , - 2540 , - 4519 , - 978 , - 3693 , - 888 , - 4339 , - 2270 , - 569 , - 5124 , - 4159 , - 3562 , - 3333 , - 3472 , - 3979 , - 4854 , - 209 , - 1820 , - 3799 , - 258 , - 2973 , - 168 , - 3619 , - 1550 , - 5737 , - 4404 , - 3439 , - 2842 , - 2613 , - 2752 , - 3259 , - 4134 , - 5377 , - 1100 , - 3079 , - 5426 , - 2253 , - 5336 , - 2899 , - 830 , - 5017 , - 3684 , - 2719 , - 2122 , - 1893 , - 2032 , - 2539 , - 3414 , - 4657 , - 380 , - 2359 , - 4706 , - 1533 , - 4616 , - 2179 , - 110 , - 4297 , - 2964 , - 1999 , - 1402 , - 1173 , - 1312 , - 1819 , - 2694 , - 3937 , - 5548 , - 1639 , - 3986 , - 813 , - 3896 , - 1459 , - 5278 , - 3577 , - 2244 , - 1279 , - 682 , - 453 , - 592 , - 1099 , - 1974 , - 3217 , - 4828 , - 919 , - 3266 , - 93 , - 3176 , - 739 , - 4558 , - 2857 , - 1524 , - 559 , - 5850 , - 5621 , - 5760 , - 379 , - 1254 , - 2497 , - 4108 , - 199 , - 2546 , - 5261 , - 2456 , - 19 , - 3838 , - 2137 , - 804 , - 5727 , - 5130 , - 4901 , - 5040 , - 5547 , - 534 , - 1777 , - 3388 , - 5367 , - 1826 , - 4541 , - 1736 , - 5187 , - 3118 , - 1417 , - 84 , - 5007 , - 4410 , - 4181 , - 4320 , - 4827 , - 5702 , - 1057 , - 2668 , - 4647 , - 1106 , - 3821 , - 1016 , - 4467 , - 2398 , - 697 , - 5252 , - 4287 , - 3690 , - 3461 , - 3600 , - 4107 , - 4982 , - 337 , - 1948 , - 3927 , - 386 , - 3101 , - 296 , - 3747 , - 1678 , - 5865 , - 4532 , - 3567 , - 2970 , - 2741 , - 2880 , - 3387 , - 4262 , - 5505 , - 1228 , - 3207 , - 5554 , - 2381 , - 5464 , - 3027 , - 958 , - 5145 , - 3812 , - 2847 , - 2250 , - 2021 , - 2160 , - 2667 , - 3542 , - 4785 , - 508 , - 2487 , - 4834 , - 1661 , - 4744 , - 2307 , - 238 , - 4425 , - 3092 , - 2127 , - 1530 , - 1301 , - 1440 , - 1947 , - 2822 , - 4065 , - 5676 , - 1767 , - 4114 , - 941 , - 4024 , - 1587 , - 5406 , - 3705 , - 2372 , - 1407 , - 810 , - 581 , - 720 , - 1227 , - 2102 , - 3345 , - 4956 , - 1047 , - 3394 , - 221 , - 3304 , - 867 , - 4686 , - 2985 , - 1652 , - 687 , - 90 , - 5749 , - 0 , - 233 , - 838 , - 1815 , - 3164 , - 4885 , - 1026 , - 3491 , - 376 , - 3585 , - 1214 , - 5167 , - 3540 , - 2285 , - 1402 , - 891 , - 752 , - 985 , - 1590 , - 2567 , - 3916 , - 5637 , - 1778 , - 4243 , - 1128 , - 4337 , - 1966 , - 5919 , - 4292 , - 3037 , - 2154 , - 1643 , - 1504 , - 1737 , - 2342 , - 3319 , - 4668 , - 437 , - 2530 , - 4995 , - 1880 , - 5089 , - 2718 , - 719 , - 5044 , - 3789 , - 2906 , - 2395 , - 2256 , - 2489 , - 3094 , - 4071 , - 5420 , - 1189 , - 3282 , - 5747 , - 2632 , - 5841 , - 3470 , - 1471 , - 5796 , - 4541 , - 3658 , - 3147 , - 3008 , - 3241 , - 3846 , - 4823 , - 220 , - 1941 , - 4034 , - 547 , - 3384 , - 641 , - 4222 , - 2223 , - 596 , - 5293 , - 4410 , - 3899 , - 3760 , - 3993 , - 4598 , - 5575 , - 972 , - 2693 , - 4786 , - 1299 , - 4136 , - 1393 , - 4974 , - 2975 , - 1348 , - 93 , - 5162 , - 4651 , - 4512 , - 4745 , - 5350 , - 375 , - 1724 , - 3445 , - 5538 , - 2051 , - 4888 , - 2145 , - 5726 , - 3727 , - 2100 , - 845 , - 5914 , - 5403 , - 5264 , - 5497 , - 150 , - 1127 , - 2476 , - 4197 , - 338 , - 2803 , - 5640 , - 2897 , - 526 , - 4479 , - 2852 , - 1597 , - 714 , - 203 , - 64 , - 297 , - 902 , - 1879 , - 3228 , - 4949 , - 1090 , - 3555 , - 440 , - 3649 , - 1278 , - 5231 , - 3604 , - 2349 , - 1466 , - 955 , - 816 , - 1049 , - 1654 , - 2631 , - 3980 , - 5701 , - 1842 , - 4307 , - 1192 , - 4401 , - 2030 , - 31 , - 4356 , - 3101 , - 2218 , - 1707 , - 1568 , - 1801 , - 2406 , - 3383 , - 4732 , - 501 , - 2594 , - 5059 , - 1944 , - 5153 , - 2782 , - 783 , - 5108 , - 3853 , - 2970 , - 2459 , - 2320 , - 2553 , - 3158 , - 4135 , - 5484 , - 1253 , - 3346 , - 5811 , - 2696 , - 5905 , - 3534 , - 1535 , - 5860 , - 4605 , - 3722 , - 3211 , - 3072 , - 3305 , - 3910 , - 4887 , - 284 , - 2005 , - 4098 , - 611 , - 3448 , - 705 , - 4286 , - 2287 , - 660 , - 5357 , - 4474 , - 3963 , - 3824 , - 4057 , - 4662 , - 5639 , - 1036 , - 2757 , - 4850 , - 1363 , - 4200 , - 1457 , - 5038 , - 3039 , - 1412 , - 157 , - 5226 , - 4715 , - 4576 , - 4809 , - 5414 , - 439 , - 1788 , - 3509 , - 5602 , - 2115 , - 4952 , - 2209 , - 5790 , - 3791 , - 2164 , - 909 , - 26 , - 5467 , - 5328 , - 5561 , - 214 , - 1191 , - 2540 , - 4261 , - 402 , - 2867 , - 5704 , - 2961 , - 590 , - 4543 , - 2916 , - 1661 , - 778 , - 267 , - 128 , - 361 , - 966 , - 1943 , - 3292 , - 5013 , - 1154 , - 3619 , - 504 , - 3713 , - 1342 , - 5295 , - 3668 , - 2413 , - 1530 , - 1019 , - 880 , - 1113 , - 1718 , - 2695 , - 4044 , - 5765 , - 1906 , - 4371 , - 1256 , - 4465 , - 2094 , - 95 , - 4420 , - 3165 , - 2282 , - 1771 , - 1632 , - 1865 , - 2470 , - 3447 , - 4796 , - 565 , - 2658 , - 5123 , - 2008 , - 5217 , - 2846 , - 847 , - 5172 , - 3917 , - 3034 , - 2523 , - 2384 , - 2617 , - 3222 , - 4199 , - 5548 , - 1317 , - 3410 , - 5875 , - 2760 , - 17 , - 3598 , - 1599 , - 5924 , - 4669 , - 3786 , - 3275 , - 3136 , - 3369 , - 3974 , - 4951 , - 348 , - 2069 , - 4162 , - 675 , - 3512 , - 769 , - 4350 , - 2351 , - 724 , - 5421 , - 4538 , - 4027 , - 3888 , - 4121 , - 4726 , - 5703 , - 1100 , - 2821 , - 4914 , - 1427 , - 4264 , - 1521 , - 5102 , - 3103 , - 1476 , - 221 , - 5290 , - 4779 , - 4640 , - 4873 , - 5478 , - 503 , - 1852 , - 3573 , - 5666 , - 2179 , - 5016 , - 2273 , - 5854 , - 3855 , - 2228 , - 973 , - 90 , - 5531 , - 5392 , - 5625 , - 278 , - 1255 , - 2604 , - 4325 , - 466 , - 2931 , - 5768 , - 3025 , - 654 , - 4607 , - 2980 , - 1725 , - 842 , - 331 , - 192 , - 425 , - 1030 , - 2007 , - 3356 , - 5077 , - 1218 , - 3683 , - 568 , - 3777 , - 1406 , - 5359 , - 3732 , - 2477 , - 1594 , - 1083 , - 944 , - 1177 , - 1782 , - 2759 , - 4108 , - 5829 , - 1970 , - 4435 , - 1320 , - 4529 , - 2158 , - 159 , - 4484 , - 3229 , - 2346 , - 1835 , - 1696 , - 1929 , - 2534 , - 3511 , - 4860 , - 629 , - 2722 , - 5187 , - 2072 , - 5281 , - 2910 , - 911 , - 5236 , - 3981 , - 3098 , - 2587 , - 2448 , - 2681 , - 3286 , - 4263 , - 5612 , - 1381 , - 3474 , - 5939 , - 2824 , - 81 , - 3662 , - 1663 , - 36 , - 4733 , - 3850 , - 3339 , - 3200 , - 3433 , - 4038 , - 5015 , - 412 , - 2133 , - 4226 , - 739 , - 3576 , - 833 , - 4414 , - 2415 , - 788 , - 5485 , - 4602 , - 4091 , - 3952 , - 4185 , - 4790 , - 5767 , - 1164 , - 2885 , - 4978 , - 1491 , - 4328 , - 1585 , - 5166 , - 3167 , - 1540 , - 285 , - 5354 , - 4843 , - 4704 , - 4937 , - 5542 , - 567 , - 1916 , - 3637 , - 5730 , - 2243 , - 5080 , - 2337 , - 5918 , - 3919 , - 2292 , - 1037 , - 154 , - 5595 , - 5456 , - 5689 , - 342 , - 1319 , - 2668 , - 4389 , - 530 , - 2995 , - 5832 , - 3089 , - 718 , - 4671 , - 3044 , - 1789 , - 906 , - 395 , - 256 , - 489 , - 1094 , - 2071 , - 3420 , - 5141 , - 1282 , - 3747 , - 632 , - 3841 , - 1470 , - 5423 , - 3796 , - 2541 , - 1658 , - 1147 , - 1008 , - 1241 , - 1846 , - 2823 , - 4172 , - 5893 , - 2034 , - 4499 , - 1384 , - 4593 , - 2222 , - 223 , - 4548 , - 3293 , - 2410 , - 1899 , - 1760 , - 1993 , - 2598 , - 3575 , - 4924 , - 693 , - 2786 , - 5251 , - 2136 , - 5345 , - 2974 , - 975 , - 5300 , - 4045 , - 3162 , - 2651 , - 2512 , - 2745 , - 3350 , - 4327 , - 5676 , - 1445 , - 3538 , - 51 , - 2888 , - 145 , - 3726 , - 1727 , - 100 , - 4797 , - 3914 , - 3403 , - 3264 , - 3497 , - 4102 , - 5079 , - 476 , - 2197 , - 4290 , - 803 , - 3640 , - 897 , - 4478 , - 2479 , - 852 , - 5549 , - 4666 , - 4155 , - 4016 , - 4249 , - 4854 , - 5831 , - 1228 , - 2949 , - 5042 , - 1555 , - 4392 , - 1649 , - 5230 , - 3231 , - 1604 , - 349 , - 5418 , - 4907 , - 4768 , - 5001 , - 5606 , - 631 , - 1980 , - 3701 , - 5794 , - 2307 , - 5144 , - 2401 , - 30 , - 3983 , - 2356 , - 1101 , - 218 , - 5659 , - 5520 , - 5753 , - 406 , - 1383 , - 2732 , - 4453 , - 594 , - 3059 , - 5896 , - 3153 , - 782 , - 4735 , - 3108 , - 1853 , - 970 , - 459 , - 320 , - 553 , - 1158 , - 2135 , - 3484 , - 5205 , - 1346 , - 3811 , - 696 , - 3905 , - 1534 , - 5487 , - 3860 , - 2605 , - 1722 , - 1211 , - 1072 , - 1305 , - 1910 , - 2887 , - 4236 , - 5 , - 2098 , - 4563 , - 1448 , - 4657 , - 2286 , - 287 , - 4612 , - 3357 , - 2474 , - 1963 , - 1824 , - 2057 , - 2662 , - 3639 , - 4988 , - 757 , - 2850 , - 5315 , - 2200 , - 5409 , - 3038 , - 1039 , - 5364 , - 4109 , - 3226 , - 2715 , - 2576 , - 2809 , - 3414 , - 4391 , - 5740 , - 1509 , - 3602 , - 115 , - 2952 , - 209 , - 3790 , - 1791 , - 164 , - 4861 , - 3978 , - 3467 , - 3328 , - 3561 , - 4166 , - 5143 , - 540 , - 2261 , - 4354 , - 867 , - 3704 , - 961 , - 4542 , - 2543 , - 916 , - 5613 , - 4730 , - 4219 , - 4080 , - 4313 , - 4918 , - 5895 , - 1292 , - 3013 , - 5106 , - 1619 , - 4456 , - 1713 , - 5294 , - 3295 , - 1668 , - 413 , - 5482 , - 4971 , - 4832 , - 5065 , - 5670 , - 695 , - 2044 , - 3765 , - 5858 , - 2371 , - 5208 , - 2465 , - 94 , - 4047 , - 2420 , - 1165 , - 282 , - 5723 , - 5584 , - 5817 , - 470 , - 1447 , - 2796 , - 4517 , - 658 , - 3123 , - 8 , - 3217 , - 846 , - 4799 , - 3172 , - 1917 , - 1034 , - 523 , - 384 , - 617 , - 1222 , - 2199 , - 3548 , - 5269 , - 1410 , - 3875 , - 760 , - 3969 , - 1598 , - 5551 , - 3924 , - 2669 , - 1786 , - 1275 , - 1136 , - 1369 , - 1974 , - 2951 , - 4300 , - 69 , - 2162 , - 4627 , - 1512 , - 4721 , - 2350 , - 351 , - 4676 , - 3421 , - 2538 , - 2027 , - 1888 , - 2121 , - 2726 , - 3703 , - 5052 , - 821 , - 2914 , - 5379 , - 2264 , - 5473 , - 3102 , - 1103 , - 5428 , - 4173 , - 3290 , - 2779 , - 2640 , - 2873 , - 3478 , - 4455 , - 5804 , - 1573 , - 3666 , - 179 , - 3016 , - 273 , - 3854 , - 1855 , - 228 , - 4925 , - 4042 , - 3531 , - 3392 , - 3625 , - 4230 , - 5207 , - 604 , - 2325 , - 4418 , - 931 , - 3768 , - 1025 , - 4606 , - 2607 , - 980 , - 5677 , - 4794 , - 4283 , - 4144 , - 4377 , - 4982 , - 7 , - 1356 , - 3077 , - 5170 , - 1683 , - 4520 , - 1777 , - 5358 , - 3359 , - 1732 , - 477 , - 5546 , - 5035 , - 4896 , - 5129 , - 5734 , - 759 , - 2108 , - 3829 , - 5922 , - 2435 , - 5272 , - 2529 , - 158 , - 4111 , - 2484 , - 1229 , - 346 , - 5787 , - 5648 , - 5881 , - 534 , - 1511 , - 2860 , - 4581 , - 722 , - 3187 , - 72 , - 3281 , - 910 , - 4863 , - 3236 , - 1981 , - 1098 , - 587 , - 448 , - 681 , - 1286 , - 2263 , - 3612 , - 5333 , - 1474 , - 3939 , - 824 , - 4033 , - 1662 , - 5615 , - 3988 , - 2733 , - 1850 , - 1339 , - 1200 , - 1433 , - 2038 , - 3015 , - 4364 , - 133 , - 2226 , - 4691 , - 1576 , - 4785 , - 2414 , - 415 , - 4740 , - 3485 , - 2602 , - 2091 , - 1952 , - 2185 , - 2790 , - 3767 , - 5116 , - 885 , - 2978 , - 5443 , - 2328 , - 5537 , - 3166 , - 1167 , - 5492 , - 4237 , - 3354 , - 2843 , - 2704 , - 2937 , - 3542 , - 4519 , - 5868 , - 1637 , - 3730 , - 243 , - 3080 , - 337 , - 3918 , - 1919 , - 292 , - 4989 , - 4106 , - 3595 , - 3456 , - 3689 , - 4294 , - 5271 , - 668 , - 2389 , - 4482 , - 995 , - 3832 , - 1089 , - 4670 , - 2671 , - 1044 , - 5741 , - 4858 , - 4347 , - 4208 , - 4441 , - 5046 , - 71 , - 1420 , - 3141 , - 5234 , - 1747 , - 4584 , - 1841 , - 5422 , - 3423 , - 1796 , - 541 , - 5610 , - 5099 , - 4960 , - 5193 , - 5798 , - 823 , - 2172 , - 3893 , - 34 , - 2499 , - 5336 , - 2593 , - 222 , - 4175 , - 2548 , - 1293 , - 410 , - 5851 , - 5712 , - 5945 , - 598 , - 1575 , - 2924 , - 4645 , - 786 , - 3251 , - 136 , - 3345 , - 974 , - 4927 , - 3300 , - 2045 , - 1162 , - 651 , - 512 , - 745 , - 1350 , - 2327 , - 3676 , - 5397 , - 1538 , - 4003 , - 888 , - 4097 , - 1726 , - 5679 , - 4052 , - 2797 , - 1914 , - 1403 , - 1264 , - 1497 , - 2102 , - 3079 , - 4428 , - 197 , - 2290 , - 4755 , - 1640 , - 4849 , - 2478 , - 479 , - 4804 , - 3549 , - 2666 , - 2155 , - 2016 , - 2249 , - 2854 , - 3831 , - 5180 , - 949 , - 3042 , - 5507 , - 2392 , - 5601 , - 3230 , - 1231 , - 5556 , - 4301 , - 3418 , - 2907 , - 2768 , - 3001 , - 3606 , - 4583 , - 5932 , - 1701 , - 3794 , - 307 , - 3144 , - 401 , - 3982 , - 1983 , - 356 , - 5053 , - 4170 , - 3659 , - 3520 , - 3753 , - 4358 , - 5335 , - 732 , - 2453 , - 4546 , - 1059 , - 3896 , - 1153 , - 4734 , - 2735 , - 1108 , - 5805 , - 4922 , - 4411 , - 4272 , - 4505 , - 5110 , - 135 , - 1484 , - 3205 , - 5298 , - 1811 , - 4648 , - 1905 , - 5486 , - 3487 , - 1860 , - 605 , - 5674 , - 5163 , - 5024 , - 5257 , - 5862 , - 887 , - 2236 , - 3957 , - 98 , - 2563 , - 5400 , - 2657 , - 286 , - 4239 , - 2612 , - 1357 , - 474 , - 5915 , - 5776 , - 57 , - 662 , - 1639 , - 2988 , - 4709 , - 850 , - 3315 , - 200 , - 3409 , - 1038 , - 4991 , - 3364 , - 2109 , - 1226 , - 715 , - 576 , - 809 , - 1414 , - 2391 , - 3740 , - 5461 , - 1602 , - 4067 , - 952 , - 4161 , - 1790 , - 5743 , - 4116 , - 2861 , - 1978 , - 1467 , - 1328 , - 1561 , - 2166 , - 3143 , - 4492 , - 261 , - 2354 , - 4819 , - 1704 , - 4913 , - 2542 , - 543 , - 4868 , - 3613 , - 2730 , - 2219 , - 2080 , - 2313 , - 2918 , - 3895 , - 5244 , - 1013 , - 3106 , - 5571 , - 2456 , - 5665 , - 3294 , - 1295 , - 5620 , - 4365 , - 3482 , - 2971 , - 2832 , - 3065 , - 3670 , - 4647 , - 44 , - 1765 , - 3858 , - 371 , - 3208 , - 465 , - 4046 , - 2047 , - 420 , - 5117 , - 4234 , - 3723 , - 3584 , - 3817 , - 4422 , - 5399 , - 796 , - 2517 , - 4610 , - 1123 , - 3960 , - 1217 , - 4798 , - 2799 , - 1172 , - 5869 , - 4986 , - 4475 , - 4336 , - 4569 , - 5174 , - 199 , - 1548 , - 3269 , - 5362 , - 1875 , - 4712 , - 1969 , - 5550 , - 3551 , - 1924 , - 669 , - 5738 , - 5227 , - 5088 , - 5321 , - 5926 , - 951 , - 2300 , - 4021 , - 162 , - 2627 , - 5464 , - 2721 , - 350 , - 4303 , - 2676 , - 1421 , - 538 , - 27 , - 5840 , - 121 , - 726 , - 1703 , - 3052 , - 4773 , - 914 , - 3379 , - 264 , - 3473 , - 1102 , - 5055 , - 3428 , - 2173 , - 1290 , - 779 , - 640 , - 873 , - 1478 , - 2455 , - 3804 , - 5525 , - 1666 , - 4131 , - 1016 , - 4225 , - 1854 , - 5807 , - 4180 , - 2925 , - 2042 , - 1531 , - 1392 , - 1625 , - 2230 , - 3207 , - 4556 , - 325 , - 2418 , - 4883 , - 1768 , - 4977 , - 2606 , - 607 , - 4932 , - 3677 , - 2794 , - 2283 , - 2144 , - 2377 , - 2982 , - 3959 , - 5308 , - 1077 , - 3170 , - 5635 , - 2520 , - 5729 , - 3358 , - 1359 , - 5684 , - 4429 , - 3546 , - 3035 , - 2896 , - 3129 , - 3734 , - 4711 , - 108 , - 1829 , - 3922 , - 435 , - 3272 , - 529 , - 4110 , - 2111 , - 484 , - 5181 , - 4298 , - 3787 , - 3648 , - 3881 , - 4486 , - 5463 , - 860 , - 2581 , - 4674 , - 1187 , - 4024 , - 1281 , - 4862 , - 2863 , - 1236 , - 5933 , - 5050 , - 4539 , - 4400 , - 4633 , - 5238 , - 263 , - 1612 , - 3333 , - 5426 , - 1939 , - 4776 , - 2033 , - 5614 , - 3615 , - 1988 , - 733 , - 5802 , - 5291 , - 5152 , - 5385 , - 38 , - 1015 , - 2364 , - 4085 , - 226 , - 2691 , - 5528 , - 2785 , - 414 , - 4367 , - 2740 , - 1485 , - 602 , - 91 , - 5904 , - 185 , - 790 , - 1767 , - 3116 , - 4837 , - 978 , - 3443 , - 328 , - 3537 , - 1166 , - 5119 , - 3492 , - 2237 , - 1354 , - 843 , - 704 , - 937 , - 1542 , - 2519 , - 3868 , - 5589 , - 1730 , - 4195 , - 1080 , - 4289 , - 1918 , - 5871 , - 4244 , - 2989 , - 2106 , - 1595 , - 1456 , - 1689 , - 2294 , - 3271 , - 4620 , - 389 , - 2482 , - 4947 , - 1832 , - 5041 , - 2670 , - 671 , - 4996 , - 3741 , - 2858 , - 2347 , - 2208 , - 2441 , - 3046 , - 4023 , - 5372 , - 1141 , - 3234 , - 5699 , - 2584 , - 5793 , - 3422 , - 1423 , - 5748 , - 4493 , - 3610 , - 3099 , - 2960 , - 3193 , - 3798 , - 4775 , - 172 , - 1893 , - 3986 , - 499 , - 3336 , - 593 , - 4174 , - 2175 , - 548 , - 5245 , - 4362 , - 3851 , - 3712 , - 3945 , - 4550 , - 5527 , - 924 , - 2645 , - 4738 , - 1251 , - 4088 , - 1345 , - 4926 , - 2927 , - 1300 , - 45 , - 5114 , - 4603 , - 4464 , - 4697 , - 5302 , - 327 , - 1676 , - 3397 , - 5490 , - 2003 , - 4840 , - 2097 , - 5678 , - 3679 , - 2052 , - 797 , - 5866 , - 5355 , - 5216 , - 5449 , - 102 , - 1079 , - 2428 , - 4149 , - 290 , - 2755 , - 5592 , - 2849 , - 478 , - 4431 , - 2804 , - 1549 , - 666 , - 155 , - 16 , - 249 , - 854 , - 1831 , - 3180 , - 4901 , - 1042 , - 3507 , - 392 , - 3601 , - 1230 , - 5183 , - 3556 , - 2301 , - 1418 , - 907 , - 768 , - 1001 , - 1606 , - 2583 , - 3932 , - 5653 , - 1794 , - 4259 , - 1144 , - 4353 , - 1982 , - 5935 , - 4308 , - 3053 , - 2170 , - 1659 , - 1520 , - 1753 , - 2358 , - 3335 , - 4684 , - 453 , - 2546 , - 5011 , - 1896 , - 5105 , - 2734 , - 735 , - 5060 , - 3805 , - 2922 , - 2411 , - 2272 , - 2505 , - 3110 , - 4087 , - 5436 , - 1205 , - 3298 , - 5763 , - 2648 , - 5857 , - 3486 , - 1487 , - 5812 , - 4557 , - 3674 , - 3163 , - 3024 , - 3257 , - 3862 , - 4839 , - 236 , - 1957 , - 4050 , - 563 , - 3400 , - 657 , - 4238 , - 2239 , - 612 , - 5309 , - 4426 , - 3915 , - 3776 , - 4009 , - 4614 , - 5591 , - 988 , - 2709 , - 4802 , - 1315 , - 4152 , - 1409 , - 4990 , - 2991 , - 1364 , - 109 , - 5178 , - 4667 , - 4528 , - 4761 , - 5366 , - 391 , - 1740 , - 3461 , - 5554 , - 2067 , - 4904 , - 2161 , - 5742 , - 3743 , - 2116 , - 861 , - 5930 , - 5419 , - 5280 , - 5513 , - 166 , - 1143 , - 2492 , - 4213 , - 354 , - 2819 , - 5656 , - 2913 , - 542 , - 4495 , - 2868 , - 1613 , - 730 , - 219 , - 80 , - 313 , - 918 , - 1895 , - 3244 , - 4965 , - 1106 , - 3571 , - 456 , - 3665 , - 1294 , - 5247 , - 3620 , - 2365 , - 1482 , - 971 , - 832 , - 1065 , - 1670 , - 2647 , - 3996 , - 5717 , - 1858 , - 4323 , - 1208 , - 4417 , - 2046 , - 47 , - 4372 , - 3117 , - 2234 , - 1723 , - 1584 , - 1817 , - 2422 , - 3399 , - 4748 , - 517 , - 2610 , - 5075 , - 1960 , - 5169 , - 2798 , - 799 , - 5124 , - 3869 , - 2986 , - 2475 , - 2336 , - 2569 , - 3174 , - 4151 , - 5500 , - 1269 , - 3362 , - 5827 , - 2712 , - 5921 , - 3550 , - 1551 , - 5876 , - 4621 , - 3738 , - 3227 , - 3088 , - 3321 , - 3926 , - 4903 , - 300 , - 2021 , - 4114 , - 627 , - 3464 , - 721 , - 4302 , - 2303 , - 676 , - 5373 , - 4490 , - 3979 , - 3840 , - 4073 , - 4678 , - 5655 , - 1052 , - 2773 , - 4866 , - 1379 , - 4216 , - 1473 , - 5054 , - 3055 , - 1428 , - 173 , - 5242 , - 4731 , - 4592 , - 4825 , - 5430 , - 455 , - 1804 , - 3525 , - 5618 , - 2131 , - 4968 , - 2225 , - 5806 , - 3807 , - 2180 , - 925 , - 42 , - 5483 , - 5344 , - 5577 , - 230 , - 1207 , - 2556 , - 4277 , - 418 , - 2883 , - 5720 , - 2977 , - 606 , - 4559 , - 2932 , - 1677 , - 794 , - 283 , - 144 , - 377 , - 982 , - 1959 , - 3308 , - 5029 , - 1170 , - 3635 , - 520 , - 3729 , - 1358 , - 5311 , - 3684 , - 2429 , - 1546 , - 1035 , - 896 , - 1129 , - 1734 , - 2711 , - 4060 , - 5781 , - 1922 , - 4387 , - 1272 , - 4481 , - 2110 , - 111 , - 4436 , - 3181 , - 2298 , - 1787 , - 1648 , - 1881 , - 2486 , - 3463 , - 4812 , - 581 , - 2674 , - 5139 , - 2024 , - 5233 , - 2862 , - 863 , - 5188 , - 3933 , - 3050 , - 2539 , - 2400 , - 2633 , - 3238 , - 4215 , - 5564 , - 1333 , - 3426 , - 5891 , - 2776 , - 33 , - 3614 , - 1615 , - 5940 , - 4685 , - 3802 , - 3291 , - 3152 , - 3385 , - 3990 , - 4967 , - 364 , - 2085 , - 4178 , - 691 , - 3528 , - 785 , - 4366 , - 2367 , - 740 , - 5437 , - 4554 , - 4043 , - 3904 , - 4137 , - 4742 , - 5719 , - 1116 , - 2837 , - 4930 , - 1443 , - 4280 , - 1537 , - 5118 , - 3119 , - 1492 , - 237 , - 5306 , - 4795 , - 4656 , - 4889 , - 5494 , - 519 , - 1868 , - 3589 , - 5682 , - 2195 , - 5032 , - 2289 , - 5870 , - 3871 , - 2244 , - 989 , - 106 , - 5547 , - 5408 , - 5641 , - 294 , - 1271 , - 2620 , - 4341 , - 482 , - 2947 , - 5784 , - 3041 , - 670 , - 4623 , - 2996 , - 1741 , - 858 , - 347 , - 208 , - 441 , - 1046 , - 2023 , - 3372 , - 5093 , - 1234 , - 3699 , - 584 , - 3793 , - 1422 , - 5375 , - 3748 , - 2493 , - 1610 , - 1099 , - 960 , - 1193 , - 1798 , - 2775 , - 4124 , - 5845 , - 1986 , - 4451 , - 1336 , - 4545 , - 2174 , - 175 , - 4500 , - 3245 , - 2362 , - 1851 , - 1712 , - 1945 , - 2550 , - 3527 , - 4876 , - 645 , - 2738 , - 5203 , - 2088 , - 5297 , - 2926 , - 927 , - 5252 , - 3997 , - 3114 , - 2603 , - 2464 , - 2697 , - 3302 , - 4279 , - 5628 , - 1397 , - 3490 , - 3 , - 2840 , - 97 , - 3678 , - 1679 , - 52 , - 4749 , - 3866 , - 3355 , - 3216 , - 3449 , - 4054 , - 5031 , - 428 , - 2149 , - 4242 , - 755 , - 3592 , - 849 , - 4430 , - 2431 , - 804 , - 5501 , - 4618 , - 4107 , - 3968 , - 4201 , - 4806 , - 5783 , - 1180 , - 2901 , - 4994 , - 1507 , - 4344 , - 1601 , - 5182 , - 3183 , - 1556 , - 301 , - 5370 , - 4859 , - 4720 , - 4953 , - 5558 , - 583 , - 1932 , - 3653 , - 5746 , - 2259 , - 5096 , - 2353 , - 5934 , - 3935 , - 2308 , - 1053 , - 170 , - 5611 , - 5472 , - 5705 , - 358 , - 1335 , - 2684 , - 4405 , - 546 , - 3011 , - 5848 , - 3105 , - 734 , - 4687 , - 3060 , - 1805 , - 922 , - 411 , - 272 , - 505 , - 1110 , - 2087 , - 3436 , - 5157 , - 1298 , - 3763 , - 648 , - 3857 , - 1486 , - 5439 , - 3812 , - 2557 , - 1674 , - 1163 , - 1024 , - 1257 , - 1862 , - 2839 , - 4188 , - 5909 , - 2050 , - 4515 , - 1400 , - 4609 , - 2238 , - 239 , - 4564 , - 3309 , - 2426 , - 1915 , - 1776 , - 2009 , - 2614 , - 3591 , - 4940 , - 709 , - 2802 , - 5267 , - 2152 , - 5361 , - 2990 , - 991 , - 5316 , - 4061 , - 3178 , - 2667 , - 2528 , - 2761 , - 3366 , - 4343 , - 5692 , - 1461 , - 3554 , - 67 , - 2904 , - 161 , - 3742 , - 1743 , - 116 , - 4813 , - 3930 , - 3419 , - 3280 , - 3513 , - 4118 , - 5095 , - 492 , - 2213 , - 4306 , - 819 , - 3656 , - 913 , - 4494 , - 2495 , - 868 , - 5565 , - 4682 , - 4171 , - 4032 , - 4265 , - 4870 , - 5847 , - 1244 , - 2965 , - 5058 , - 1571 , - 4408 , - 1665 , - 5246 , - 3247 , - 1620 , - 365 , - 5434 , - 4923 , - 4784 , - 5017 , - 5622 , - 647 , - 1996 , - 3717 , - 5810 , - 2323 , - 5160 , - 2417 , - 46 , - 3999 , - 2372 , - 1117 , - 234 , - 5675 , - 5536 , - 5769 , - 422 , - 1399 , - 2748 , - 4469 , - 610 , - 3075 , - 5912 , - 3169 , - 798 , - 4751 , - 3124 , - 1869 , - 986 , - 475 , - 336 , - 569 , - 1174 , - 2151 , - 3500 , - 5221 , - 1362 , - 3827 , - 712 , - 3921 , - 1550 , - 5503 , - 3876 , - 2621 , - 1738 , - 1227 , - 1088 , - 1321 , - 1926 , - 2903 , - 4252 , - 21 , - 2114 , - 4579 , - 1464 , - 4673 , - 2302 , - 303 , - 4628 , - 3373 , - 2490 , - 1979 , - 1840 , - 2073 , - 2678 , - 3655 , - 5004 , - 773 , - 2866 , - 5331 , - 2216 , - 5425 , - 3054 , - 1055 , - 5380 , - 4125 , - 3242 , - 2731 , - 2592 , - 2825 , - 3430 , - 4407 , - 5756 , - 1525 , - 3618 , - 131 , - 2968 , - 225 , - 3806 , - 1807 , - 180 , - 4877 , - 3994 , - 3483 , - 3344 , - 3577 , - 4182 , - 5159 , - 556 , - 2277 , - 4370 , - 883 , - 3720 , - 977 , - 4558 , - 2559 , - 932 , - 5629 , - 4746 , - 4235 , - 4096 , - 4329 , - 4934 , - 5911 , - 1308 , - 3029 , - 5122 , - 1635 , - 4472 , - 1729 , - 5310 , - 3311 , - 1684 , - 429 , - 5498 , - 4987 , - 4848 , - 5081 , - 5686 , - 711 , - 2060 , - 3781 , - 5874 , - 2387 , - 5224 , - 2481 , - 110 , - 4063 , - 2436 , - 1181 , - 298 , - 5739 , - 5600 , - 5833 , - 486 , - 1463 , - 2812 , - 4533 , - 674 , - 3139 , - 24 , - 3233 , - 862 , - 4815 , - 3188 , - 1933 , - 1050 , - 539 , - 400 , - 633 , - 1238 , - 2215 , - 3564 , - 5285 , - 1426 , - 3891 , - 776 , - 3985 , - 1614 , - 5567 , - 3940 , - 2685 , - 1802 , - 1291 , - 1152 , - 1385 , - 1990 , - 2967 , - 4316 , - 85 , - 2178 , - 4643 , - 1528 , - 4737 , - 2366 , - 367 , - 4692 , - 3437 , - 2554 , - 2043 , - 1904 , - 2137 , - 2742 , - 3719 , - 5068 , - 837 , - 2930 , - 5395 , - 2280 , - 5489 , - 3118 , - 1119 , - 5444 , - 4189 , - 3306 , - 2795 , - 2656 , - 2889 , - 3494 , - 4471 , - 5820 , - 1589 , - 3682 , - 195 , - 3032 , - 289 , - 3870 , - 1871 , - 244 , - 4941 , - 4058 , - 3547 , - 3408 , - 3641 , - 4246 , - 5223 , - 620 , - 2341 , - 4434 , - 947 , - 3784 , - 1041 , - 4622 , - 2623 , - 996 , - 5693 , - 4810 , - 4299 , - 4160 , - 4393 , - 4998 , - 23 , - 1372 , - 3093 , - 5186 , - 1699 , - 4536 , - 1793 , - 5374 , - 3375 , - 1748 , - 493 , - 5562 , - 5051 , - 4912 , - 5145 , - 5750 , - 775 , - 2124 , - 3845 , - 5938 , - 2451 , - 5288 , - 2545 , - 174 , - 4127 , - 2500 , - 1245 , - 362 , - 5803 , - 5664 , - 5897 , - 550 , - 1527 , - 2876 , - 4597 , - 738 , - 3203 , - 88 , - 3297 , - 926 , - 4879 , - 3252 , - 1997 , - 1114 , - 603 , - 464 , - 697 , - 1302 , - 2279 , - 3628 , - 5349 , - 1490 , - 3955 , - 840 , - 4049 , - 1678 , - 5631 , - 4004 , - 2749 , - 1866 , - 1355 , - 1216 , - 1449 , - 2054 , - 3031 , - 4380 , - 149 , - 2242 , - 4707 , - 1592 , - 4801 , - 2430 , - 431 , - 4756 , - 3501 , - 2618 , - 2107 , - 1968 , - 2201 , - 2806 , - 3783 , - 5132 , - 901 , - 2994 , - 5459 , - 2344 , - 5553 , - 3182 , - 1183 , - 5508 , - 4253 , - 3370 , - 2859 , - 2720 , - 2953 , - 3558 , - 4535 , - 5884 , - 1653 , - 3746 , - 259 , - 3096 , - 353 , - 3934 , - 1935 , - 308 , - 5005 , - 4122 , - 3611 , - 3472 , - 3705 , - 4310 , - 5287 , - 684 , - 2405 , - 4498 , - 1011 , - 3848 , - 1105 , - 4686 , - 2687 , - 1060 , - 5757 , - 4874 , - 4363 , - 4224 , - 4457 , - 5062 , - 87 , - 1436 , - 3157 , - 5250 , - 1763 , - 4600 , - 1857 , - 5438 , - 3439 , - 1812 , - 557 , - 5626 , - 5115 , - 4976 , - 5209 , - 5814 , - 839 , - 2188 , - 3909 , - 50 , - 2515 , - 5352 , - 2609 , - 238 , - 4191 , - 2564 , - 1309 , - 426 , - 5867 , - 5728 , - 9 , - 614 , - 1591 , - 2940 , - 4661 , - 802 , - 3267 , - 152 , - 3361 , - 990 , - 4943 , - 3316 , - 2061 , - 1178 , - 667 , - 528 , - 761 , - 1366 , - 2343 , - 3692 , - 5413 , - 1554 , - 4019 , - 904 , - 4113 , - 1742 , - 5695 , - 4068 , - 2813 , - 1930 , - 1419 , - 1280 , - 1513 , - 2118 , - 3095 , - 4444 , - 213 , - 2306 , - 4771 , - 1656 , - 4865 , - 2494 , - 495 , - 4820 , - 3565 , - 2682 , - 2171 , - 2032 , - 2265 , - 2870 , - 3847 , - 5196 , - 965 , - 3058 , - 5523 , - 2408 , - 5617 , - 3246 , - 1247 , - 5572 , - 4317 , - 3434 , - 2923 , - 2784 , - 3017 , - 3622 , - 4599 , - 5948 , - 1717 , - 3810 , - 323 , - 3160 , - 417 , - 3998 , - 1999 , - 372 , - 5069 , - 4186 , - 3675 , - 3536 , - 3769 , - 4374 , - 5351 , - 748 , - 2469 , - 4562 , - 1075 , - 3912 , - 1169 , - 4750 , - 2751 , - 1124 , - 5821 , - 4938 , - 4427 , - 4288 , - 4521 , - 5126 , - 151 , - 1500 , - 3221 , - 5314 , - 1827 , - 4664 , - 1921 , - 5502 , - 3503 , - 1876 , - 621 , - 5690 , - 5179 , - 5040 , - 5273 , - 5878 , - 903 , - 2252 , - 3973 , - 114 , - 2579 , - 5416 , - 2673 , - 302 , - 4255 , - 2628 , - 1373 , - 490 , - 5931 , - 5792 , - 73 , - 678 , - 1655 , - 3004 , - 4725 , - 866 , - 3331 , - 216 , - 3425 , - 1054 , - 5007 , - 3380 , - 2125 , - 1242 , - 731 , - 592 , - 825 , - 1430 , - 2407 , - 3756 , - 5477 , - 1618 , - 4083 , - 968 , - 4177 , - 1806 , - 5759 , - 4132 , - 2877 , - 1994 , - 1483 , - 1344 , - 1577 , - 2182 , - 3159 , - 4508 , - 277 , - 2370 , - 4835 , - 1720 , - 4929 , - 2558 , - 559 , - 4884 , - 3629 , - 2746 , - 2235 , - 2096 , - 2329 , - 2934 , - 3911 , - 5260 , - 1029 , - 3122 , - 5587 , - 2472 , - 5681 , - 3310 , - 1311 , - 5636 , - 4381 , - 3498 , - 2987 , - 2848 , - 3081 , - 3686 , - 4663 , - 60 , - 1781 , - 3874 , - 387 , - 3224 , - 481 , - 4062 , - 2063 , - 436 , - 5133 , - 4250 , - 3739 , - 3600 , - 3833 , - 4438 , - 5415 , - 812 , - 2533 , - 4626 , - 1139 , - 3976 , - 1233 , - 4814 , - 2815 , - 1188 , - 5885 , - 5002 , - 4491 , - 4352 , - 4585 , - 5190 , - 215 , - 1564 , - 3285 , - 5378 , - 1891 , - 4728 , - 1985 , - 5566 , - 3567 , - 1940 , - 685 , - 5754 , - 5243 , - 5104 , - 5337 , - 5942 , - 967 , - 2316 , - 4037 , - 178 , - 2643 , - 5480 , - 2737 , - 366 , - 4319 , - 2692 , - 1437 , - 554 , - 43 , - 5856 , - 137 , - 742 , - 1719 , - 3068 , - 4789 , - 930 , - 3395 , - 280 , - 3489 , - 1118 , - 5071 , - 3444 , - 2189 , - 1306 , - 795 , - 656 , - 889 , - 1494 , - 2471 , - 3820 , - 5541 , - 1682 , - 4147 , - 1032 , - 4241 , - 1870 , - 5823 , - 4196 , - 2941 , - 2058 , - 1547 , - 1408 , - 1641 , - 2246 , - 3223 , - 4572 , - 341 , - 2434 , - 4899 , - 1784 , - 4993 , - 2622 , - 623 , - 4948 , - 3693 , - 2810 , - 2299 , - 2160 , - 2393 , - 2998 , - 3975 , - 5324 , - 1093 , - 3186 , - 5651 , - 2536 , - 5745 , - 3374 , - 1375 , - 5700 , - 4445 , - 3562 , - 3051 , - 2912 , - 3145 , - 3750 , - 4727 , - 124 , - 1845 , - 3938 , - 451 , - 3288 , - 545 , - 4126 , - 2127 , - 500 , - 5197 , - 4314 , - 3803 , - 3664 , - 3897 , - 4502 , - 5479 , - 876 , - 2597 , - 4690 , - 1203 , - 4040 , - 1297 , - 4878 , - 2879 , - 1252 , - 5949 , - 5066 , - 4555 , - 4416 , - 4649 , - 5254 , - 279 , - 1628 , - 3349 , - 5442 , - 1955 , - 4792 , - 2049 , - 5630 , - 3631 , - 2004 , - 749 , - 5818 , - 5307 , - 5168 , - 5401 , - 54 , - 1031 , - 2380 , - 4101 , - 242 , - 2707 , - 5544 , - 2801 , - 430 , - 4383 , - 2756 , - 1501 , - 618 , - 107 , - 5920 , - 201 , - 806 , - 1783 , - 3132 , - 4853 , - 994 , - 3459 , - 344 , - 3553 , - 1182 , - 5135 , - 3508 , - 2253 , - 1370 , - 859 , - 720 , - 953 , - 1558 , - 2535 , - 3884 , - 5605 , - 1746 , - 4211 , - 1096 , - 4305 , - 1934 , - 5887 , - 4260 , - 3005 , - 2122 , - 1611 , - 1472 , - 1705 , - 2310 , - 3287 , - 4636 , - 405 , - 2498 , - 4963 , - 1848 , - 5057 , - 2686 , - 687 , - 5012 , - 3757 , - 2874 , - 2363 , - 2224 , - 2457 , - 3062 , - 4039 , - 5388 , - 1157 , - 3250 , - 5715 , - 2600 , - 5809 , - 3438 , - 1439 , - 5764 , - 4509 , - 3626 , - 3115 , - 2976 , - 3209 , - 3814 , - 4791 , - 188 , - 1909 , - 4002 , - 515 , - 3352 , - 609 , - 4190 , - 2191 , - 564 , - 5261 , - 4378 , - 3867 , - 3728 , - 3961 , - 4566 , - 5543 , - 940 , - 2661 , - 4754 , - 1267 , - 4104 , - 1361 , - 4942 , - 2943 , - 1316 , - 61 , - 5130 , - 4619 , - 4480 , - 4713 , - 5318 , - 343 , - 1692 , - 3413 , - 5506 , - 2019 , - 4856 , - 2113 , - 5694 , - 3695 , - 2068 , - 813 , - 5882 , - 5371 , - 5232 , - 5465 , - 118 , - 1095 , - 2444 , - 4165 , - 306 , - 2771 , - 5608 , - 2865 , - 494 , - 4447 , - 2820 , - 1565 , - 682 , - 171 , - 32 , - 265 , - 870 , - 1847 , - 3196 , - 4917 , - 1058 , - 3523 , - 408 , - 3617 , - 1246 , - 5199 , - 3572 , - 2317 , - 1434 , - 923 , - 784 , - 1017 , - 1622 , - 2599 , - 3948 , - 5669 , - 1810 , - 4275 , - 1160 , - 4369 , - 1998 , - 5951 , - 4324 , - 3069 , - 2186 , - 1675 , - 1536 , - 1769 , - 2374 , - 3351 , - 4700 , - 469 , - 2562 , - 5027 , - 1912 , - 5121 , - 2750 , - 751 , - 5076 , - 3821 , - 2938 , - 2427 , - 2288 , - 2521 , - 3126 , - 4103 , - 5452 , - 1221 , - 3314 , - 5779 , - 2664 , - 5873 , - 3502 , - 1503 , - 5828 , - 4573 , - 3690 , - 3179 , - 3040 , - 3273 , - 3878 , - 4855 , - 252 , - 1973 , - 4066 , - 579 , - 3416 , - 673 , - 4254 , - 2255 , - 628 , - 5325 , - 4442 , - 3931 , - 3792 , - 4025 , - 4630 , - 5607 , - 1004 , - 2725 , - 4818 , - 1331 , - 4168 , - 1425 , - 5006 , - 3007 , - 1380 , - 125 , - 5194 , - 4683 , - 4544 , - 4777 , - 5382 , - 407 , - 1756 , - 3477 , - 5570 , - 2083 , - 4920 , - 2177 , - 5758 , - 3759 , - 2132 , - 877 , - 5946 , - 5435 , - 5296 , - 5529 , - 182 , - 1159 , - 2508 , - 4229 , - 370 , - 2835 , - 5672 , - 2929 , - 558 , - 4511 , - 2884 , - 1629 , - 746 , - 235 , - 96 , - 329 , - 934 , - 1911 , - 3260 , - 4981 , - 1122 , - 3587 , - 472 , - 3681 , - 1310 , - 5263 , - 3636 , - 2381 , - 1498 , - 987 , - 848 , - 1081 , - 1686 , - 2663 , - 4012 , - 5733 , - 1874 , - 4339 , - 1224 , - 4433 , - 2062 , - 63 , - 4388 , - 3133 , - 2250 , - 1739 , - 1600 , - 1833 , - 2438 , - 3415 , - 4764 , - 533 , - 2626 , - 5091 , - 1976 , - 5185 , - 2814 , - 815 , - 5140 , - 3885 , - 3002 , - 2491 , - 2352 , - 2585 , - 3190 , - 4167 , - 5516 , - 1285 , - 3378 , - 5843 , - 2728 , - 5937 , - 3566 , - 1567 , - 5892 , - 4637 , - 3754 , - 3243 , - 3104 , - 3337 , - 3942 , - 4919 , - 316 , - 2037 , - 4130 , - 643 , - 3480 , - 737 , - 4318 , - 2319 , - 692 , - 5389 , - 4506 , - 3995 , - 3856 , - 4089 , - 4694 , - 5671 , - 1068 , - 2789 , - 4882 , - 1395 , - 4232 , - 1489 , - 5070 , - 3071 , - 1444 , - 189 , - 5258 , - 4747 , - 4608 , - 4841 , - 5446 , - 471 , - 1820 , - 3541 , - 5634 , - 2147 , - 4984 , - 2241 , - 5822 , - 3823 , - 2196 , - 941 , - 58 , - 5499 , - 5360 , - 5593 , - 246 , - 1223 , - 2572 , - 4293 , - 434 , - 2899 , - 5736 , - 2993 , - 622 , - 4575 , - 2948 , - 1693 , - 810 , - 299 , - 160 , - 393 , - 998 , - 1975 , - 3324 , - 5045 , - 1186 , - 3651 , - 536 , - 3745 , - 1374 , - 5327 , - 3700 , - 2445 , - 1562 , - 1051 , - 912 , - 1145 , - 1750 , - 2727 , - 4076 , - 5797 , - 1938 , - 4403 , - 1288 , - 4497 , - 2126 , - 127 , - 4452 , - 3197 , - 2314 , - 1803 , - 1664 , - 1897 , - 2502 , - 3479 , - 4828 , - 597 , - 2690 , - 5155 , - 2040 , - 5249 , - 2878 , - 879 , - 5204 , - 3949 , - 3066 , - 2555 , - 2416 , - 2649 , - 3254 , - 4231 , - 5580 , - 1349 , - 3442 , - 5907 , - 2792 , - 49 , - 3630 , - 1631 , - 4 , - 4701 , - 3818 , - 3307 , - 3168 , - 3401 , - 4006 , - 4983 , - 380 , - 2101 , - 4194 , - 707 , - 3544 , - 801 , - 4382 , - 2383 , - 756 , - 5453 , - 4570 , - 4059 , - 3920 , - 4153 , - 4758 , - 5735 , - 1132 , - 2853 , - 4946 , - 1459 , - 4296 , - 1553 , - 5134 , - 3135 , - 1508 , - 253 , - 5322 , - 4811 , - 4672 , - 4905 , - 5510 , - 535 , - 1884 , - 3605 , - 5698 , - 2211 , - 5048 , - 2305 , - 5886 , - 3887 , - 2260 , - 1005 , - 122 , - 5563 , - 5424 , - 5657 , - 310 , - 1287 , - 2636 , - 4357 , - 498 , - 2963 , - 5800 , - 3057 , - 686 , - 4639 , - 3012 , - 1757 , - 874 , - 363 , - 224 , - 457 , - 1062 , - 2039 , - 3388 , - 5109 , - 1250 , - 3715 , - 600 , - 3809 , - 1438 , - 5391 , - 3764 , - 2509 , - 1626 , - 1115 , - 976 , - 1209 , - 1814 , - 2791 , - 4140 , - 5861 , - 2002 , - 4467 , - 1352 , - 4561 , - 2190 , - 191 , - 4516 , - 3261 , - 2378 , - 1867 , - 1728 , - 1961 , - 2566 , - 3543 , - 4892 , - 661 , - 2754 , - 5219 , - 2104 , - 5313 , - 2942 , - 943 , - 5268 , - 4013 , - 3130 , - 2619 , - 2480 , - 2713 , - 3318 , - 4295 , - 5644 , - 1413 , - 3506 , - 19 , - 2856 , - 113 , - 3694 , - 1695 , - 68 , - 4765 , - 3882 , - 3371 , - 3232 , - 3465 , - 4070 , - 5047 , - 444 , - 2165 , - 4258 , - 771 , - 3608 , - 865 , - 4446 , - 2447 , - 820 , - 5517 , - 4634 , - 4123 , - 3984 , - 4217 , - 4822 , - 5799 , - 1196 , - 2917 , - 5010 , - 1523 , - 4360 , - 1617 , - 5198 , - 3199 , - 1572 , - 317 , - 5386 , - 4875 , - 4736 , - 4969 , - 5574 , - 599 , - 1948 , - 3669 , - 5762 , - 2275 , - 5112 , - 2369 , - 5950 , - 3951 , - 2324 , - 1069 , - 186 , - 5627 , - 5488 , - 5721 , - 374 , - 1351 , - 2700 , - 4421 , - 562 , - 3027 , - 5864 , - 3121 , - 750 , - 4703 , - 3076 , - 1821 , - 938 , - 427 , - 288 , - 521 , - 1126 , - 2103 , - 3452 , - 5173 , - 1314 , - 3779 , - 664 , - 3873 , - 1502 , - 5455 , - 3828 , - 2573 , - 1690 , - 1179 , - 1040 , - 1273 , - 1878 , - 2855 , - 4204 , - 5925 , - 2066 , - 4531 , - 1416 , - 4625 , - 2254 , - 255 , - 4580 , - 3325 , - 2442 , - 1931 , - 1792 , - 2025 , - 2630 , - 3607 , - 4956 , - 725 , - 2818 , - 5283 , - 2168 , - 5377 , - 3006 , - 1007 , - 5332 , - 4077 , - 3194 , - 2683 , - 2544 , - 2777 , - 3382 , - 4359 , - 5708 , - 1477 , - 3570 , - 83 , - 2920 , - 177 , - 3758 , - 1759 , - 132 , - 4829 , - 3946 , - 3435 , - 3296 , - 3529 , - 4134 , - 5111 , - 508 , - 2229 , - 4322 , - 835 , - 3672 , - 929 , - 4510 , - 2511 , - 884 , - 5581 , - 4698 , - 4187 , - 4048 , - 4281 , - 4886 , - 5863 , - 1260 , - 2981 , - 5074 , - 1587 , - 4424 , - 1681 , - 5262 , - 3263 , - 1636 , - 381 , - 5450 , - 4939 , - 4800 , - 5033 , - 5638 , - 663 , - 2012 , - 3733 , - 5826 , - 2339 , - 5176 , - 2433 , - 62 , - 4015 , - 2388 , - 1133 , - 250 , - 5691 , - 5552 , - 5785 , - 438 , - 1415 , - 2764 , - 4485 , - 626 , - 3091 , - 5928 , - 3185 , - 814 , - 4767 , - 3140 , - 1885 , - 1002 , - 491 , - 352 , - 585 , - 1190 , - 2167 , - 3516 , - 5237 , - 1378 , - 3843 , - 728 , - 3937 , - 1566 , - 5519 , - 3892 , - 2637 , - 1754 , - 1243 , - 1104 , - 1337 , - 1942 , - 2919 , - 4268 , - 37 , - 2130 , - 4595 , - 1480 , - 4689 , - 2318 , - 319 , - 4644 , - 3389 , - 2506 , - 1995 , - 1856 , - 2089 , - 2694 , - 3671 , - 5020 , - 789 , - 2882 , - 5347 , - 2232 , - 5441 , - 3070 , - 1071 , - 5396 , - 4141 , - 3258 , - 2747 , - 2608 , - 2841 , - 3446 , - 4423 , - 5772 , - 1541 , - 3634 , - 147 , - 2984 , - 241 , - 3822 , - 1823 , - 196 , - 4893 , - 4010 , - 3499 , - 3360 , - 3593 , - 4198 , - 5175 , - 572 , - 2293 , - 4386 , - 899 , - 3736 , - 993 , - 4574 , - 2575 , - 948 , - 5645 , - 4762 , - 4251 , - 4112 , - 4345 , - 4950 , - 5927 , - 1324 , - 3045 , - 5138 , - 1651 , - 4488 , - 1745 , - 5326 , - 3327 , - 1700 , - 445 , - 5514 , - 5003 , - 4864 , - 5097 , - 5702 , - 727 , - 2076 , - 3797 , - 5890 , - 2403 , - 5240 , - 2497 , - 126 , - 4079 , - 2452 , - 1197 , - 314 , - 5755 , - 5616 , - 5849 , - 502 , - 1479 , - 2828 , - 4549 , - 690 , - 3155 , - 40 , - 3249 , - 878 , - 4831 , - 3204 , - 1949 , - 1066 , - 555 , - 416 , - 649 , - 1254 , - 2231 , - 3580 , - 5301 , - 1442 , - 3907 , - 792 , - 4001 , - 1630 , - 5583 , - 3956 , - 2701 , - 1818 , - 1307 , - 1168 , - 1401 , - 2006 , - 2983 , - 4332 , - 101 , - 2194 , - 4659 , - 1544 , - 4753 , - 2382 , - 383 , - 4708 , - 3453 , - 2570 , - 2059 , - 1920 , - 2153 , - 2758 , - 3735 , - 5084 , - 853 , - 2946 , - 5411 , - 2296 , - 5505 , - 3134 , - 1135 , - 5460 , - 4205 , - 3322 , - 2811 , - 2672 , - 2905 , - 3510 , - 4487 , - 5836 , - 1605 , - 3698 , - 211 , - 3048 , - 305 , - 3886 , - 1887 , - 260 , - 4957 , - 4074 , - 3563 , - 3424 , - 3657 , - 4262 , - 5239 , - 636 , - 2357 , - 4450 , - 963 , - 3800 , - 1057 , - 4638 , - 2639 , - 1012 , - 5709 , - 4826 , - 4315 , - 4176 , - 4409 , - 5014 , - 39 , - 1388 , - 3109 , - 5202 , - 1715 , - 4552 , - 1809 , - 5390 , - 3391 , - 1764 , - 509 , - 5578 , - 5067 , - 4928 , - 5161 , - 5766 , - 791 , - 2140 , - 3861 , - 2 , - 2467 , - 5304 , - 2561 , - 190 , - 4143 , - 2516 , - 1261 , - 378 , - 5819 , - 5680 , - 5913 , - 566 , - 1543 , - 2892 , - 4613 , - 754 , - 3219 , - 104 , - 3313 , - 942 , - 4895 , - 3268 , - 2013 , - 1130 , - 619 , - 480 , - 713 , - 1318 , - 2295 , - 3644 , - 5365 , - 1506 , - 3971 , - 856 , - 4065 , - 1694 , - 5647 , - 4020 , - 2765 , - 1882 , - 1371 , - 1232 , - 1465 , - 2070 , - 3047 , - 4396 , - 165 , - 2258 , - 4723 , - 1608 , - 4817 , - 2446 , - 447 , - 4772 , - 3517 , - 2634 , - 2123 , - 1984 , - 2217 , - 2822 , - 3799 , - 5148 , - 917 , - 3010 , - 5475 , - 2360 , - 5569 , - 3198 , - 1199 , - 5524 , - 4269 , - 3386 , - 2875 , - 2736 , - 2969 , - 3574 , - 4551 , - 5900 , - 1669 , - 3762 , - 275 , - 3112 , - 369 , - 3950 , - 1951 , - 324 , - 5021 , - 4138 , - 3627 , - 3488 , - 3721 , - 4326 , - 5303 , - 700 , - 2421 , - 4514 , - 1027 , - 3864 , - 1121 , - 4702 , - 2703 , - 1076 , - 5773 , - 4890 , - 4379 , - 4240 , - 4473 , - 5078 , - 103 , - 1452 , - 3173 , - 5266 , - 1779 , - 4616 , - 1873 , - 5454 , - 3455 , - 1828 , - 573 , - 5642 , - 5131 , - 4992 , - 5225 , - 5830 , - 855 , - 2204 , - 3925 , - 66 , - 2531 , - 5368 , - 2625 , - 254 , - 4207 , - 2580 , - 1325 , - 442 , - 5883 , - 5744 , - 25 , - 630 , - 1607 , - 2956 , - 4677 , - 818 , - 3283 , - 168 , - 3377 , - 1006 , - 4959 , - 3332 , - 2077 , - 1194 , - 683 , - 544 , - 777 , - 1382 , - 2359 , - 3708 , - 5429 , - 1570 , - 4035 , - 920 , - 4129 , - 1758 , - 5711 , - 4084 , - 2829 , - 1946 , - 1435 , - 1296 , - 1529 , - 2134 , - 3111 , - 4460 , - 229 , - 2322 , - 4787 , - 1672 , - 4881 , - 2510 , - 511 , - 4836 , - 3581 , - 2698 , - 2187 , - 2048 , - 2281 , - 2886 , - 3863 , - 5212 , - 981 , - 3074 , - 5539 , - 2424 , - 5633 , - 3262 , - 1263 , - 5588 , - 4333 , - 3450 , - 2939 , - 2800 , - 3033 , - 3638 , - 4615 , - 12 , - 1733 , - 3826 , - 339 , - 3176 , - 433 , - 4014 , - 2015 , - 388 , - 5085 , - 4202 , - 3691 , - 3552 , - 3785 , - 4390 , - 5367 , - 764 , - 2485 , - 4578 , - 1091 , - 3928 , - 1185 , - 4766 , - 2767 , - 1140 , - 5837 , - 4954 , - 4443 , - 4304 , - 4537 , - 5142 , - 167 , - 1516 , - 3237 , - 5330 , - 1843 , - 4680 , - 1937 , - 5518 , - 3519 , - 1892 , - 637 , - 5706 , - 5195 , - 5056 , - 5289 , - 5894 , - 919 , - 2268 , - 3989 , - 130 , - 2595 , - 5432 , - 2689 , - 318 , - 4271 , - 2644 , - 1389 , - 506 , - 5947 , - 5808 , - 89 , - 694 , - 1671 , - 3020 , - 4741 , - 882 , - 3347 , - 232 , - 3441 , - 1070 , - 5023 , - 3396 , - 2141 , - 1258 , - 747 , - 608 , - 841 , - 1446 , - 2423 , - 3772 , - 5493 , - 1634 , - 4099 , - 984 , - 4193 , - 1822 , - 5775 , - 4148 , - 2893 , - 2010 , - 1499 , - 1360 , - 1593 , - 2198 , - 3175 , - 4524 , - 293 , - 2386 , - 4851 , - 1736 , - 4945 , - 2574 , - 575 , - 4900 , - 3645 , - 2762 , - 2251 , - 2112 , - 2345 , - 2950 , - 3927 , - 5276 , - 1045 , - 3138 , - 5603 , - 2488 , - 5697 , - 3326 , - 1327 , - 5652 , - 4397 , - 3514 , - 3003 , - 2864 , - 3097 , - 3702 , - 4679 , - 76 , - 1797 , - 3890 , - 403 , - 3240 , - 497 , - 4078 , - 2079 , - 452 , - 5149 , - 4266 , - 3755 , - 3616 , - 3849 , - 4454 , - 5431 , - 828 , - 2549 , - 4642 , - 1155 , - 3992 , - 1249 , - 4830 , - 2831 , - 1204 , - 5901 , - 5018 , - 4507 , - 4368 , - 4601 , - 5206 , - 231 , - 1580 , - 3301 , - 5394 , - 1907 , - 4744 , - 2001 , - 5582 , - 3583 , - 1956 , - 701 , - 5770 , - 5259 , - 5120 , - 5353 , - 6 , - 983 , - 2332 , - 4053 , - 194 , - 2659 , - 5496 , - 2753 , - 382 , - 4335 , - 2708 , - 1453 , - 570 , - 59 , - 5872 , - 153 , - 758 , - 1735 , - 3084 , - 4805 , - 946 , - 3411 , - 296 , - 3505 , - 1134 , - 5087 , - 3460 , - 2205 , - 1322 , - 811 , - 672 , - 905 , - 1510 , - 2487 , - 3836 , - 5557 , - 1698 , - 4163 , - 1048 , - 4257 , - 1886 , - 5839 , - 4212 , - 2957 , - 2074 , - 1563 , - 1424 , - 1657 , - 2262 , - 3239 , - 4588 , - 357 , - 2450 , - 4915 , - 1800 , - 5009 , - 2638 , - 639 , - 4964 , - 3709 , - 2826 , - 2315 , - 2176 , - 2409 , - 3014 , - 3991 , - 5340 , - 1109 , - 3202 , - 5667 , - 2552 , - 5761 , - 3390 , - 1391 , - 5716 , - 4461 , - 3578 , - 3067 , - 2928 , - 3161 , - 3766 , - 4743 , - 140 , - 1861 , - 3954 , - 467 , - 3304 , - 561 , - 4142 , - 2143 , - 516 , - 5213 , - 4330 , - 3819 , - 3680 , - 3913 , - 4518 , - 5495 , - 892 , - 2613 , - 4706 , - 1219 , - 4056 , - 1313 , - 4894 , - 2895 , - 1268 , - 13 , - 5082 , - 4571 , - 4432 , - 4665 , - 5270 , - 295 , - 1644 , - 3365 , - 5458 , - 1971 , - 4808 , - 2065 , - 5646 , - 3647 , - 2020 , - 765 , - 5834 , - 5323 , - 5184 , - 5417 , - 70 , - 1047 , - 2396 , - 4117 , - 258 , - 2723 , - 5560 , - 2817 , - 446 , - 4399 , - 2772 , - 1517 , - 634 , - 123 , - 5936 , - 217 , - 822 , - 1799 , - 3148 , - 4869 , - 1010 , - 3475 , - 360 , - 3569 , - 1198 , - 5151 , - 3524 , - 2269 , - 1386 , - 875 , - 736 , - 969 , - 1574 , - 2551 , - 3900 , - 5621 , - 1762 , - 4227 , - 1112 , - 4321 , - 1950 , - 5903 , - 4276 , - 3021 , - 2138 , - 1627 , - 1488 , - 1721 , - 2326 , - 3303 , - 4652 , - 421 , - 2514 , - 4979 , - 1864 , - 5073 , - 2702 , - 703 , - 5028 , - 3773 , - 2890 , - 2379 , - 2240 , - 2473 , - 3078 , - 4055 , - 5404 , - 1173 , - 3266 , - 5731 , - 2616 , - 5825 , - 3454 , - 1455 , - 5780 , - 4525 , - 3642 , - 3131 , - 2992 , - 3225 , - 3830 , - 4807 , - 204 , - 1925 , - 4018 , - 531 , - 3368 , - 625 , - 4206 , - 2207 , - 580 , - 5277 , - 4394 , - 3883 , - 3744 , - 3977 , - 4582 , - 5559 , - 956 , - 2677 , - 4770 , - 1283 , - 4120 , - 1377 , - 4958 , - 2959 , - 1332 , - 77 , - 5146 , - 4635 , - 4496 , - 4729 , - 5334 , - 359 , - 1708 , - 3429 , - 5522 , - 2035 , - 4872 , - 2129 , - 5710 , - 3711 , - 2084 , - 829 , - 5898 , - 5387 , - 5248 , - 5481 , - 134 , - 1111 , - 2460 , - 4181 , - 322 , - 2787 , - 5624 , - 2881 , - 510 , - 4463 , - 2836 , - 1581 , - 698 , - 187 , - 48 , - 281 , - 886 , - 1863 , - 3212 , - 4933 , - 1074 , - 3539 , - 424 , - 3633 , - 1262 , - 5215 , - 3588 , - 2333 , - 1450 , - 939 , - 800 , - 1033 , - 1638 , - 2615 , - 3964 , - 5685 , - 1826 , - 4291 , - 1176 , - 4385 , - 2014 , - 15 , - 4340 , - 3085 , - 2202 , - 1691 , - 1552 , - 1785 , - 2390 , - 3367 , - 4716 , - 485 , - 2578 , - 5043 , - 1928 , - 5137 , - 2766 , - 767 , - 5092 , - 3837 , - 2954 , - 2443 , - 2304 , - 2537 , - 3142 , - 4119 , - 5468 , - 1237 , - 3330 , - 5795 , - 2680 , - 5889 , - 3518 , - 1519 , - 5844 , - 4589 , - 3706 , - 3195 , - 3056 , - 3289 , - 3894 , - 4871 , - 268 , - 1989 , - 4082 , - 595 , - 3432 , - 689 , - 4270 , - 2271 , - 644 , - 5341 , - 4458 , - 3947 , - 3808 , - 4041 , - 4646 , - 5623 , - 1020 , - 2741 , - 4834 , - 1347 , - 4184 , - 1441 , - 5022 , - 3023 , - 1396 , - 141 , - 5210 , - 4699 , - 4560 , - 4793 , - 5398 , - 423 , - 1772 , - 3493 , - 5586 , - 2099 , - 4936 , - 2193 , - 5774 , - 3775 , - 2148 , - 893 , - 10 , - 5451 , - 5312 , - 5545 , - 198 , - 1175 , - 2524 , - 4245 , - 386 , - 2851 , - 5688 , - 2945 , - 574 , - 4527 , - 2900 , - 1645 , - 762 , - 251 , - 112 , - 345 , - 950 , - 1927 , - 3276 , - 4997 , - 1138 , - 3603 , - 488 , - 3697 , - 1326 , - 5279 , - 3652 , - 2397 , - 1514 , - 1003 , - 864 , - 1097 , - 1702 , - 2679 , - 4028 , - 5749 , - 1890 , - 4355 , - 1240 , - 4449 , - 2078 , - 79 , - 4404 , - 3149 , - 2266 , - 1755 , - 1616 , - 1849 , - 2454 , - 3431 , - 4780 , - 549 , - 2642 , - 5107 , - 1992 , - 5201 , - 2830 , - 831 , - 5156 , - 3901 , - 3018 , - 2507 , - 2368 , - 2601 , - 3206 , - 4183 , - 5532 , - 1301 , - 3394 , - 5859 , - 2744 , - 1 , - 3582 , - 1583 , - 5908 , - 4653 , - 3770 , - 3259 , - 3120 , - 3353 , - 3958 , - 4935 , - 332 , - 2053 , - 4146 , - 659 , - 3496 , - 753 , - 4334 , - 2335 , - 708 , - 5405 , - 4522 , - 4011 , - 3872 , - 4105 , - 4710 , - 5687 , - 1084 , - 2805 , - 4898 , - 1411 , - 4248 , - 1505 , - 5086 , - 3087 , - 1460 , - 205 , - 5274 , - 4763 , - 4624 , - 4857 , - 5462 , - 487 , - 1836 , - 3557 , - 5650 , - 2163 , - 5000 , - 2257 , - 5838 , - 3839 , - 2212 , - 957 , - 74 , - 5515 , - 5376 , - 5609 , - 262 , - 1239 , - 2588 , - 4309 , - 450 , - 2915 , - 5752 , - 3009 , - 638 , - 4591 , - 2964 , - 1709 , - 826 , - 315 , - 176 , - 409 , - 1014 , - 1991 , - 3340 , - 5061 , - 1202 , - 3667 , - 552 , - 3761 , - 1390 , - 5343 , - 3716 , - 2461 , - 1578 , - 1067 , - 928 , - 1161 , - 1766 , - 2743 , - 4092 , - 5813 , - 1954 , - 4419 , - 1304 , - 4513 , - 2142 , - 143 , - 4468 , - 3213 , - 2330 , - 1819 , - 1680 , - 1913 , - 2518 , - 3495 , - 4844 , - 613 , - 2706 , - 5171 , - 2056 , - 5265 , - 2894 , - 895 , - 5220 , - 3965 , - 3082 , - 2571 , - 2432 , - 2665 , - 3270 , - 4247 , - 5596 , - 1365 , - 3458 , - 5923 , - 2808 , - 65 , - 3646 , - 1647 , - 20 , - 4717 , - 3834 , - 3323 , - 3184 , - 3417 , - 4022 , - 4999 , - 396 , - 2117 , - 4210 , - 723 , - 3560 , - 817 , - 4398 , - 2399 , - 772 , - 5469 , - 4586 , - 4075 , - 3936 , - 4169 , - 4774 , - 5751 , - 1148 , - 2869 , - 4962 , - 1475 , - 4312 , - 1569 , - 5150 , - 3151 , - 1524 , - 269 , - 5338 , - 4827 , - 4688 , - 4921 , - 5526 , - 551 , - 1900 , - 3621 , - 5714 , - 2227 , - 5064 , - 2321 , - 5902 , - 3903 , - 2276 , - 1021 , - 138 , - 5579 , - 5440 , - 5673 , - 326 , - 1303 , - 2652 , - 4373 , - 514 , - 2979 , - 5816 , - 3073 , - 702 , - 4655 , - 3028 , - 1773 , - 890 , - 379 , - 240 , - 473 , - 1078 , - 2055 , - 3404 , - 5125 , - 1266 , - 3731 , - 616 , - 3825 , - 1454 , - 5407 , - 3780 , - 2525 , - 1642 , - 1131 , - 992 , - 1225 , - 1830 , - 2807 , - 4156 , - 5877 , - 2018 , - 4483 , - 1368 , - 4577 , - 2206 , - 207 , - 4532 , - 3277 , - 2394 , - 1883 , - 1744 , - 1977 , - 2582 , - 3559 , - 4908 , - 677 , - 2770 , - 5235 , - 2120 , - 5329 , - 2958 , - 959 , - 5284 , - 4029 , - 3146 , - 2635 , - 2496 , - 2729 , - 3334 , - 4311 , - 5660 , - 1429 , - 3522 , - 35 , - 2872 , - 129 , - 3710 , - 1711 , - 84 , - 4781 , - 3898 , - 3387 , - 3248 , - 3481 , - 4086 , - 5063 , - 460 , - 2181 , - 4274 , - 787 , - 3624 , - 881 , - 4462 , - 2463 , - 836 , - 5533 , - 4650 , - 4139 , - 4000 , - 4233 , - 4838 , - 5815 , - 1212 , - 2933 , - 5026 , - 1539 , - 4376 , - 1633 , - 5214 , - 3215 , - 1588 , - 333 , - 5402 , - 4891 , - 4752 , - 4985 , - 5590 , - 615 , - 1964 , - 3685 , - 5778 , - 2291 , - 5128 , - 2385 , - 14 , - 3967 , - 2340 , - 1085 , - 202 , - 5643 , - 5504 , - 5737 , - 390 , - 1367 , - 2716 , - 4437 , - 578 , - 3043 , - 5880 , - 3137 , - 766 , - 4719 , - 3092 , - 1837 , - 954 , - 443 , - 304 , - 537 , - 1142 , - 2119 , - 3468 , - 5189 , - 1330 , - 3795 , - 680 , - 3889 , - 1518 , - 5471 , - 3844 , - 2589 , - 1706 , - 1195 , - 1056 , - 1289 , - 1894 , - 2871 , - 4220 , - 5941 , - 2082 , - 4547 , - 1432 , - 4641 , - 2270 , - 271 , - 4596 , - 3341 , - 2458 , - 1947 , - 1808 , - 2041 , - 2646 , - 3623 , - 4972 , - 741 , - 2834 , - 5299 , - 2184 , - 5393 , - 3022 , - 1023 , - 5348 , - 4093 , - 3210 , - 2699 , - 2560 , - 2793 , - 3398 , - 4375 , - 5724 , - 1493 , - 3586 , - 99 , - 2936 , - 193 , - 3774 , - 1775 , - 148 , - 4845 , - 3962 , - 3451 , - 3312 , - 3545 , - 4150 , - 5127 , - 524 , - 2245 , - 4338 , - 851 , - 3688 , - 945 , - 4526 , - 2527 , - 900 , - 5597 , - 4714 , - 4203 , - 4064 , - 4297 , - 4902 , - 5879 , - 1276 , - 2997 , - 5090 , - 1603 , - 4440 , - 1697 , - 5278 , - 3279 , - 1652 , - 397 , - 5466 , - 4955 , - 4816 , - 5049 , - 5654 , - 679 , - 2028 , - 3749 , - 5842 , - 2355 , - 5192 , - 2449 , - 78 , - 4031 , - 2404 , - 1149 , - 266 , - 5707 , - 5568 , - 5801 , - 454 , - 1431 , - 2780 , - 4501 , - 642 , - 3107 , - 5944 , - 3201 , - 830 , - 4783 , - 3156 , - 1901 , - 1018 , - 507 , - 368 , - 601 , - 1206 , - 2183 , - 3532 , - 5253 , - 1394 , - 3859 , - 744 , - 3953 , - 1582 , - 5535 , - 3908 , - 2653 , - 1770 , - 1259 , - 1120 , - 1353 , - 1958 , - 2935 , - 4284 , - 53 , - 2146 , - 4611 , - 1496 , - 4705 , - 2334 , - 335 , - 4660 , - 3405 , - 2522 , - 2011 , - 1872 , - 2105 , - 2710 , - 3687 , - 5036 , - 805 , - 2898 , - 5363 , - 2248 , - 5457 , - 3086 , - 1087 , - 5412 , - 4157 , - 3274 , - 2763 , - 2624 , - 2857 , - 3462 , - 4439 , - 5788 , - 1557 , - 3650 , - 163 , - 3000 , - 257 , - 3838 , - 1839 , - 212 , - 4909 , - 4026 , - 3515 , - 3376 , - 3609 , - 4214 , - 5191 , - 588 , - 2309 , - 4402 , - 915 , - 3752 , - 1009 , - 4590 , - 2591 , - 964 , - 5661 , - 4778 , - 4267 , - 4128 , - 4361 , - 4966 , - 5943 , - 1340 , - 3061 , - 5154 , - 1667 , - 4504 , - 1761 , - 5342 , - 3343 , - 1716 , - 461 , - 5530 , - 5019 , - 4880 , - 5113 , - 5718 , - 743 , - 2092 , - 3813 , - 5906 , - 2419 , - 5256 , - 2513 , - 142 , - 4095 , - 2468 , - 1213 , - 330 , - 5771 , - 5632 , - 5865 , - 518 , - 1495 , - 2844 , - 4565 , - 706 , - 3171 , - 56 , - 3265 , - 894 , - 4847 , - 3220 , - 1965 , - 1082 , - 571 , - 432 , - 665 , - 1270 , - 2247 , - 3596 , - 5317 , - 1458 , - 3923 , - 808 , - 4017 , - 1646 , - 5599 , - 3972 , - 2717 , - 1834 , - 1323 , - 1184 , - 1417 , - 2022 , - 2999 , - 4348 , - 117 , - 2210 , - 4675 , - 1560 , - 4769 , - 2398 , - 399 , - 4724 , - 3469 , - 2586 , - 2075 , - 1936 , - 2169 , - 2774 , - 3751 , - 5100 , - 869 , - 2962 , - 5427 , - 2312 , - 5521 , - 3150 , - 1151 , - 5476 , - 4221 , - 3338 , - 2827 , - 2688 , - 2921 , - 3526 , - 4503 , - 5852 , - 1621 , - 3714 , - 227 , - 3064 , - 321 , - 3902 , - 1903 , - 276 , - 4973 , - 4090 , - 3579 , - 3440 , - 3673 , - 4278 , - 5255 , - 652 , - 2373 , - 4466 , - 979 , - 3816 , - 1073 , - 4654 , - 2655 , - 1028 , - 5725 , - 4842 , - 4331 , - 4192 , - 4425 , - 5030 , - 55 , - 1404 , - 3125 , - 5218 , - 1731 , - 4568 , - 1825 , - 5406 , - 3407 , - 1780 , - 525 , - 5594 , - 5083 , - 4944 , - 5177 , - 5782 , - 807 , - 2156 , - 3877 , - 18 , - 2483 , - 5320 , - 2577 , - 206 , - 4159 , - 2532 , - 1277 , - 394 , - 5835 , - 5696 , - 5929 , - 582 , - 1559 , - 2908 , - 4629 , - 770 , - 3235 , - 120 , - 3329 , - 958 , - 4911 , - 3284 , - 2029 , - 1146 , - 635 , - 496 , - 729 , - 1334 , - 2311 , - 3660 , - 5381 , - 1522 , - 3987 , - 872 , - 4081 , - 1710 , - 5663 , - 4036 , - 2781 , - 1898 , - 1387 , - 1248 , - 1481 , - 2086 , - 3063 , - 4412 , - 181 , - 2274 , - 4739 , - 1624 , - 4833 , - 2462 , - 463 , - 4788 , - 3533 , - 2650 , - 2139 , - 2000 , - 2233 , - 2838 , - 3815 , - 5164 , - 933 , - 3026 , - 5491 , - 2376 , - 5585 , - 3214 , - 1215 , - 5540 , - 4285 , - 3402 , - 2891 , - 2752 , - 2985 , - 3590 , - 4567 , - 5916 , - 1685 , - 3778 , - 291 , - 3128 , - 385 , - 3966 , - 1967 , - 340 , - 5037 , - 4154 , - 3643 , - 3504 , - 3737 , - 4342 , - 5319 , - 716 , - 2437 , - 4530 , - 1043 , - 3880 , - 1137 , - 4718 , - 2719 , - 1092 , - 5789 , - 4906 , - 4395 , - 4256 , - 4489 , - 5094 , - 119 , - 1468 , - 3189 , - 5282 , - 1795 , - 4632 , - 1889 , - 5470 , - 3471 , - 1844 , - 589 , - 5658 , - 5147 , - 5008 , - 5241 , - 5846 , - 871 , - 2220 , - 3941 , - 82 , - 2547 , - 5384 , - 2641 , - 270 , - 4223 , - 2596 , - 1341 , - 458 , - 5899 , - 5760 , - 41 , - 646 , - 1623 , - 2972 , - 4693 , - 834 , - 3299 , - 184 , - 3393 , - 1022 , - 4975 , - 3348 , - 2093 , - 1210 , - 699 , - 560 , - 793 , - 1398 , - 2375 , - 3724 , - 5445 , - 1586 , - 4051 , - 936 , - 4145 , - 1774 , - 5727 , - 4100 , - 2845 , - 1962 , - 1451 , - 1312 , - 1545 , - 2150 , - 3127 , - 4476 , - 245 , - 2338 , - 4803 , - 1688 , - 4897 , - 2526 , - 527 , - 4852 , - 3597 , - 2714 , - 2203 , - 2064 , - 2297 , - 2902 , - 3879 , - 5228 , - 997 , - 3090 , - 5555 , - 2440 , - 5649 , - 3278 , - 1279 , - 5604 , - 4349 , - 3466 , - 2955 , - 2816 , - 3049 , - 3654 , - 4631 , - 28 , - 1749 , - 3842 , - 355 , - 3192 , - 449 , - 4030 , - 2031 , - 404 , - 5101 , - 4218 , - 3707 , - 3568 , - 3801 , - 4406 , - 5383 , - 780 , - 2501 , - 4594 , - 1107 , - 3944 , - 1201 , - 4782 , - 2783 , - 1156 , - 5853 , - 4970 , - 4459 , - 4320 , - 4553 , - 5158 , - 183 , - 1532 , - 3253 , - 5346 , - 1859 , - 4696 , - 1953 , - 5534 , - 3535 , - 1908 , - 653 , - 5722 , - 5211 , - 5072 , - 5305 , - 5910 , - 935 , - 2284 , - 4005 , - 146 , - 2611 , - 5448 , - 2705 , - 334 , - 4287 , - 2660 , - 1405 , - 522 , - 11 , - 5824 , - 105 , - 710 , - 1687 , - 3036 , - 4757 , - 898 , - 3363 , - 248 , - 3457 , - 1086 , - 5039 , - 3412 , - 2157 , - 1274 , - 763 , - 624 , - 857 , - 1462 , - 2439 , - 3788 , - 5509 , - 1650 , - 4115 , - 1000 , - 4209 , - 1838 , - 5791 , - 4164 , - 2909 , - 2026 , - 1515 , - 1376 , - 1609 , - 2214 , - 3191 , - 4540 , - 309 , - 2402 , - 4867 , - 1752 , - 4961 , - 2590 , - 591 , - 4916 , - 3661 , - 2778 , - 2267 , - 2128 , - 2361 , - 2966 , - 3943 , - 5292 , - 1061 , - 3154 , - 5619 , - 2504 , - 5713 , - 3342 , - 1343 , - 5668 , - 4413 , - 3530 , - 3019 , - 2880 , - 3113 , - 3718 , - 4695 , - 92 , - 1813 , - 3906 , - 419 , - 3256 , - 513 , - 4094 , - 2095 , - 468 , - 5165 , - 4282 , - 3771 , - 3632 , - 3865 , - 4470 , - 5447 , - 844 , - 2565 , - 4658 , - 1171 , - 4008 , - 1265 , - 4846 , - 2847 , - 1220 , - 5917 , - 5034 , - 4523 , - 4384 , - 4617 , - 5222 , - 247 , - 1596 , - 3317 , - 5410 , - 1923 , - 4760 , - 2017 , - 5598 , - 3599 , - 1972 , - 717 , - 5786 , - 5275 , - 5136 , - 5369 , - 22 , - 999 , - 2348 , - 4069 , - 210 , - 2675 , - 5512 , - 2769 , - 398 , - 4351 , - 2724 , - 1469 , - 586 , - 75 , - 5888 , - 169 , - 774 , - 1751 , - 3100 , - 4821 , - 962 , - 3427 , - 312 , - 3521 , - 1150 , - 5103 , - 3476 , - 2221 , - 1338 , - 827 , - 688 , - 921 , - 1526 , - 2503 , - 3852 , - 5573 , - 1714 , - 4179 , - 1064 , - 4273 , - 1902 , - 5855 , - 4228 , - 2973 , - 2090 , - 1579 , - 1440 , - 1673 , - 2278 , - 3255 , - 4604 , - 373 , - 2466 , - 4931 , - 1816 , - 5025 , - 2654 , - 655 , - 4980 , - 3725 , - 2842 , - 2331 , - 2192 , - 2425 , - 3030 , - 4007 , - 5356 , - 1125 , - 3218 , - 5683 , - 2568 , - 5777 , - 3406 , - 1407 , - 5732 , - 4477 , - 3594 , - 3083 , - 2944 , - 3177 , - 3782 , - 4759 , - 156 , - 1877 , - 3970 , - 483 , - 3320 , - 577 , - 4158 , - 2159 , - 532 , - 5229 , - 4346 , - 3835 , - 3696 , - 3929 , - 4534 , - 5511 , - 908 , - 2629 , - 4722 , - 1235 , - 4072 , - 1329 , - 4910 , - 2911 , - 1284 , - 29 , - 5098 , - 4587 , - 4448 , - 4681 , - 5286 , - 311 , - 1660 , - 3381 , - 5474 , - 1987 , - 4824 , - 2081 , - 5662 , - 3663 , - 2036 , - 781 , - 5850 , - 5339 , - 5200 , - 5433 , - 86 , - 1063 , - 2412 , - 4133 , - 274 , - 2739 , - 5576 , - 2833 , - 462 , - 4415 , - 2788 , - 1533 , - 650 , - 139 , - 0 , - 117 , - 422 , - 915 , - 1596 , - 2465 , - 3522 , - 4767 , - 184 , - 1805 , - 3614 , - 5611 , - 1780 , - 4153 , - 698 , - 3447 , - 368 , - 3493 , - 790 , - 4291 , - 1964 , - 5841 , - 3890 , - 2127 , - 552 , - 5181 , - 3982 , - 2971 , - 2148 , - 1513 , - 1066 , - 807 , - 736 , - 853 , - 1158 , - 1651 , - 2332 , - 3201 , - 4258 , - 5503 , - 920 , - 2541 , - 4350 , - 331 , - 2516 , - 4889 , - 1434 , - 4183 , - 1104 , - 4229 , - 1526 , - 5027 , - 2700 , - 561 , - 4626 , - 2863 , - 1288 , - 5917 , - 4718 , - 3707 , - 2884 , - 2249 , - 1802 , - 1543 , - 1472 , - 1589 , - 1894 , - 2387 , - 3068 , - 3937 , - 4994 , - 223 , - 1656 , - 3277 , - 5086 , - 1067 , - 3252 , - 5625 , - 2170 , - 4919 , - 1840 , - 4965 , - 2262 , - 5763 , - 3436 , - 1297 , - 5362 , - 3599 , - 2024 , - 637 , - 5454 , - 4443 , - 3620 , - 2985 , - 2538 , - 2279 , - 2208 , - 2325 , - 2630 , - 3123 , - 3804 , - 4673 , - 5730 , - 959 , - 2392 , - 4013 , - 5822 , - 1803 , - 3988 , - 345 , - 2906 , - 5655 , - 2576 , - 5701 , - 2998 , - 483 , - 4172 , - 2033 , - 82 , - 4335 , - 2760 , - 1373 , - 174 , - 5179 , - 4356 , - 3721 , - 3274 , - 3015 , - 2944 , - 3061 , - 3366 , - 3859 , - 4540 , - 5409 , - 450 , - 1695 , - 3128 , - 4749 , - 542 , - 2539 , - 4724 , - 1081 , - 3642 , - 375 , - 3312 , - 421 , - 3734 , - 1219 , - 4908 , - 2769 , - 818 , - 5071 , - 3496 , - 2109 , - 910 , - 5915 , - 5092 , - 4457 , - 4010 , - 3751 , - 3680 , - 3797 , - 4102 , - 4595 , - 5276 , - 129 , - 1186 , - 2431 , - 3864 , - 5485 , - 1278 , - 3275 , - 5460 , - 1817 , - 4378 , - 1111 , - 4048 , - 1157 , - 4470 , - 1955 , - 5644 , - 3505 , - 1554 , - 5807 , - 4232 , - 2845 , - 1646 , - 635 , - 5828 , - 5193 , - 4746 , - 4487 , - 4416 , - 4533 , - 4838 , - 5331 , - 6012 , - 865 , - 1922 , - 3167 , - 4600 , - 205 , - 2014 , - 4011 , - 180 , - 2553 , - 5114 , - 1847 , - 4784 , - 1893 , - 5206 , - 2691 , - 364 , - 4241 , - 2290 , - 527 , - 4968 , - 3581 , - 2382 , - 1371 , - 548 , - 5929 , - 5482 , - 5223 , - 5152 , - 5269 , - 5574 , - 51 , - 732 , - 1601 , - 2658 , - 3903 , - 5336 , - 941 , - 2750 , - 4747 , - 916 , - 3289 , - 5850 , - 2583 , - 5520 , - 2629 , - 5942 , - 3427 , - 1100 , - 4977 , - 3026 , - 1263 , - 5704 , - 4317 , - 3118 , - 2107 , - 1284 , - 649 , - 202 , - 5959 , - 5888 , - 6005 , - 294 , - 787 , - 1468 , - 2337 , - 3394 , - 4639 , - 56 , - 1677 , - 3486 , - 5483 , - 1652 , - 4025 , - 570 , - 3319 , - 240 , - 3365 , - 662 , - 4163 , - 1836 , - 5713 , - 3762 , - 1999 , - 424 , - 5053 , - 3854 , - 2843 , - 2020 , - 1385 , - 938 , - 679 , - 608 , - 725 , - 1030 , - 1523 , - 2204 , - 3073 , - 4130 , - 5375 , - 792 , - 2413 , - 4222 , - 203 , - 2388 , - 4761 , - 1306 , - 4055 , - 976 , - 4101 , - 1398 , - 4899 , - 2572 , - 433 , - 4498 , - 2735 , - 1160 , - 5789 , - 4590 , - 3579 , - 2756 , - 2121 , - 1674 , - 1415 , - 1344 , - 1461 , - 1766 , - 2259 , - 2940 , - 3809 , - 4866 , - 95 , - 1528 , - 3149 , - 4958 , - 939 , - 3124 , - 5497 , - 2042 , - 4791 , - 1712 , - 4837 , - 2134 , - 5635 , - 3308 , - 1169 , - 5234 , - 3471 , - 1896 , - 509 , - 5326 , - 4315 , - 3492 , - 2857 , - 2410 , - 2151 , - 2080 , - 2197 , - 2502 , - 2995 , - 3676 , - 4545 , - 5602 , - 831 , - 2264 , - 3885 , - 5694 , - 1675 , - 3860 , - 217 , - 2778 , - 5527 , - 2448 , - 5573 , - 2870 , - 355 , - 4044 , - 1905 , - 5970 , - 4207 , - 2632 , - 1245 , - 46 , - 5051 , - 4228 , - 3593 , - 3146 , - 2887 , - 2816 , - 2933 , - 3238 , - 3731 , - 4412 , - 5281 , - 322 , - 1567 , - 3000 , - 4621 , - 414 , - 2411 , - 4596 , - 953 , - 3514 , - 247 , - 3184 , - 293 , - 3606 , - 1091 , - 4780 , - 2641 , - 690 , - 4943 , - 3368 , - 1981 , - 782 , - 5787 , - 4964 , - 4329 , - 3882 , - 3623 , - 3552 , - 3669 , - 3974 , - 4467 , - 5148 , - 1 , - 1058 , - 2303 , - 3736 , - 5357 , - 1150 , - 3147 , - 5332 , - 1689 , - 4250 , - 983 , - 3920 , - 1029 , - 4342 , - 1827 , - 5516 , - 3377 , - 1426 , - 5679 , - 4104 , - 2717 , - 1518 , - 507 , - 5700 , - 5065 , - 4618 , - 4359 , - 4288 , - 4405 , - 4710 , - 5203 , - 5884 , - 737 , - 1794 , - 3039 , - 4472 , - 77 , - 1886 , - 3883 , - 52 , - 2425 , - 4986 , - 1719 , - 4656 , - 1765 , - 5078 , - 2563 , - 236 , - 4113 , - 2162 , - 399 , - 4840 , - 3453 , - 2254 , - 1243 , - 420 , - 5801 , - 5354 , - 5095 , - 5024 , - 5141 , - 5446 , - 5939 , - 604 , - 1473 , - 2530 , - 3775 , - 5208 , - 813 , - 2622 , - 4619 , - 788 , - 3161 , - 5722 , - 2455 , - 5392 , - 2501 , - 5814 , - 3299 , - 972 , - 4849 , - 2898 , - 1135 , - 5576 , - 4189 , - 2990 , - 1979 , - 1156 , - 521 , - 74 , - 5831 , - 5760 , - 5877 , - 166 , - 659 , - 1340 , - 2209 , - 3266 , - 4511 , - 5944 , - 1549 , - 3358 , - 5355 , - 1524 , - 3897 , - 442 , - 3191 , - 112 , - 3237 , - 534 , - 4035 , - 1708 , - 5585 , - 3634 , - 1871 , - 296 , - 4925 , - 3726 , - 2715 , - 1892 , - 1257 , - 810 , - 551 , - 480 , - 597 , - 902 , - 1395 , - 2076 , - 2945 , - 4002 , - 5247 , - 664 , - 2285 , - 4094 , - 75 , - 2260 , - 4633 , - 1178 , - 3927 , - 848 , - 3973 , - 1270 , - 4771 , - 2444 , - 305 , - 4370 , - 2607 , - 1032 , - 5661 , - 4462 , - 3451 , - 2628 , - 1993 , - 1546 , - 1287 , - 1216 , - 1333 , - 1638 , - 2131 , - 2812 , - 3681 , - 4738 , - 5983 , - 1400 , - 3021 , - 4830 , - 811 , - 2996 , - 5369 , - 1914 , - 4663 , - 1584 , - 4709 , - 2006 , - 5507 , - 3180 , - 1041 , - 5106 , - 3343 , - 1768 , - 381 , - 5198 , - 4187 , - 3364 , - 2729 , - 2282 , - 2023 , - 1952 , - 2069 , - 2374 , - 2867 , - 3548 , - 4417 , - 5474 , - 703 , - 2136 , - 3757 , - 5566 , - 1547 , - 3732 , - 89 , - 2650 , - 5399 , - 2320 , - 5445 , - 2742 , - 227 , - 3916 , - 1777 , - 5842 , - 4079 , - 2504 , - 1117 , - 5934 , - 4923 , - 4100 , - 3465 , - 3018 , - 2759 , - 2688 , - 2805 , - 3110 , - 3603 , - 4284 , - 5153 , - 194 , - 1439 , - 2872 , - 4493 , - 286 , - 2283 , - 4468 , - 825 , - 3386 , - 119 , - 3056 , - 165 , - 3478 , - 963 , - 4652 , - 2513 , - 562 , - 4815 , - 3240 , - 1853 , - 654 , - 5659 , - 4836 , - 4201 , - 3754 , - 3495 , - 3424 , - 3541 , - 3846 , - 4339 , - 5020 , - 5889 , - 930 , - 2175 , - 3608 , - 5229 , - 1022 , - 3019 , - 5204 , - 1561 , - 4122 , - 855 , - 3792 , - 901 , - 4214 , - 1699 , - 5388 , - 3249 , - 1298 , - 5551 , - 3976 , - 2589 , - 1390 , - 379 , - 5572 , - 4937 , - 4490 , - 4231 , - 4160 , - 4277 , - 4582 , - 5075 , - 5756 , - 609 , - 1666 , - 2911 , - 4344 , - 5965 , - 1758 , - 3755 , - 5940 , - 2297 , - 4858 , - 1591 , - 4528 , - 1637 , - 4950 , - 2435 , - 108 , - 3985 , - 2034 , - 271 , - 4712 , - 3325 , - 2126 , - 1115 , - 292 , - 5673 , - 5226 , - 4967 , - 4896 , - 5013 , - 5318 , - 5811 , - 476 , - 1345 , - 2402 , - 3647 , - 5080 , - 685 , - 2494 , - 4491 , - 660 , - 3033 , - 5594 , - 2327 , - 5264 , - 2373 , - 5686 , - 3171 , - 844 , - 4721 , - 2770 , - 1007 , - 5448 , - 4061 , - 2862 , - 1851 , - 1028 , - 393 , - 5962 , - 5703 , - 5632 , - 5749 , - 38 , - 531 , - 1212 , - 2081 , - 3138 , - 4383 , - 5816 , - 1421 , - 3230 , - 5227 , - 1396 , - 3769 , - 314 , - 3063 , - 6000 , - 3109 , - 406 , - 3907 , - 1580 , - 5457 , - 3506 , - 1743 , - 168 , - 4797 , - 3598 , - 2587 , - 1764 , - 1129 , - 682 , - 423 , - 352 , - 469 , - 774 , - 1267 , - 1948 , - 2817 , - 3874 , - 5119 , - 536 , - 2157 , - 3966 , - 5963 , - 2132 , - 4505 , - 1050 , - 3799 , - 720 , - 3845 , - 1142 , - 4643 , - 2316 , - 177 , - 4242 , - 2479 , - 904 , - 5533 , - 4334 , - 3323 , - 2500 , - 1865 , - 1418 , - 1159 , - 1088 , - 1205 , - 1510 , - 2003 , - 2684 , - 3553 , - 4610 , - 5855 , - 1272 , - 2893 , - 4702 , - 683 , - 2868 , - 5241 , - 1786 , - 4535 , - 1456 , - 4581 , - 1878 , - 5379 , - 3052 , - 913 , - 4978 , - 3215 , - 1640 , - 253 , - 5070 , - 4059 , - 3236 , - 2601 , - 2154 , - 1895 , - 1824 , - 1941 , - 2246 , - 2739 , - 3420 , - 4289 , - 5346 , - 575 , - 2008 , - 3629 , - 5438 , - 1419 , - 3604 , - 5977 , - 2522 , - 5271 , - 2192 , - 5317 , - 2614 , - 99 , - 3788 , - 1649 , - 5714 , - 3951 , - 2376 , - 989 , - 5806 , - 4795 , - 3972 , - 3337 , - 2890 , - 2631 , - 2560 , - 2677 , - 2982 , - 3475 , - 4156 , - 5025 , - 66 , - 1311 , - 2744 , - 4365 , - 158 , - 2155 , - 4340 , - 697 , - 3258 , - 6007 , - 2928 , - 37 , - 3350 , - 835 , - 4524 , - 2385 , - 434 , - 4687 , - 3112 , - 1725 , - 526 , - 5531 , - 4708 , - 4073 , - 3626 , - 3367 , - 3296 , - 3413 , - 3718 , - 4211 , - 4892 , - 5761 , - 802 , - 2047 , - 3480 , - 5101 , - 894 , - 2891 , - 5076 , - 1433 , - 3994 , - 727 , - 3664 , - 773 , - 4086 , - 1571 , - 5260 , - 3121 , - 1170 , - 5423 , - 3848 , - 2461 , - 1262 , - 251 , - 5444 , - 4809 , - 4362 , - 4103 , - 4032 , - 4149 , - 4454 , - 4947 , - 5628 , - 481 , - 1538 , - 2783 , - 4216 , - 5837 , - 1630 , - 3627 , - 5812 , - 2169 , - 4730 , - 1463 , - 4400 , - 1509 , - 4822 , - 2307 , - 5996 , - 3857 , - 1906 , - 143 , - 4584 , - 3197 , - 1998 , - 987 , - 164 , - 5545 , - 5098 , - 4839 , - 4768 , - 4885 , - 5190 , - 5683 , - 348 , - 1217 , - 2274 , - 3519 , - 4952 , - 557 , - 2366 , - 4363 , - 532 , - 2905 , - 5466 , - 2199 , - 5136 , - 2245 , - 5558 , - 3043 , - 716 , - 4593 , - 2642 , - 879 , - 5320 , - 3933 , - 2734 , - 1723 , - 900 , - 265 , - 5834 , - 5575 , - 5504 , - 5621 , - 5926 , - 403 , - 1084 , - 1953 , - 3010 , - 4255 , - 5688 , - 1293 , - 3102 , - 5099 , - 1268 , - 3641 , - 186 , - 2935 , - 5872 , - 2981 , - 278 , - 3779 , - 1452 , - 5329 , - 3378 , - 1615 , - 40 , - 4669 , - 3470 , - 2459 , - 1636 , - 1001 , - 554 , - 295 , - 224 , - 341 , - 646 , - 1139 , - 1820 , - 2689 , - 3746 , - 4991 , - 408 , - 2029 , - 3838 , - 5835 , - 2004 , - 4377 , - 922 , - 3671 , - 592 , - 3717 , - 1014 , - 4515 , - 2188 , - 49 , - 4114 , - 2351 , - 776 , - 5405 , - 4206 , - 3195 , - 2372 , - 1737 , - 1290 , - 1031 , - 960 , - 1077 , - 1382 , - 1875 , - 2556 , - 3425 , - 4482 , - 5727 , - 1144 , - 2765 , - 4574 , - 555 , - 2740 , - 5113 , - 1658 , - 4407 , - 1328 , - 4453 , - 1750 , - 5251 , - 2924 , - 785 , - 4850 , - 3087 , - 1512 , - 125 , - 4942 , - 3931 , - 3108 , - 2473 , - 2026 , - 1767 , - 1696 , - 1813 , - 2118 , - 2611 , - 3292 , - 4161 , - 5218 , - 447 , - 1880 , - 3501 , - 5310 , - 1291 , - 3476 , - 5849 , - 2394 , - 5143 , - 2064 , - 5189 , - 2486 , - 5987 , - 3660 , - 1521 , - 5586 , - 3823 , - 2248 , - 861 , - 5678 , - 4667 , - 3844 , - 3209 , - 2762 , - 2503 , - 2432 , - 2549 , - 2854 , - 3347 , - 4028 , - 4897 , - 5954 , - 1183 , - 2616 , - 4237 , - 30 , - 2027 , - 4212 , - 569 , - 3130 , - 5879 , - 2800 , - 5925 , - 3222 , - 707 , - 4396 , - 2257 , - 306 , - 4559 , - 2984 , - 1597 , - 398 , - 5403 , - 4580 , - 3945 , - 3498 , - 3239 , - 3168 , - 3285 , - 3590 , - 4083 , - 4764 , - 5633 , - 674 , - 1919 , - 3352 , - 4973 , - 766 , - 2763 , - 4948 , - 1305 , - 3866 , - 599 , - 3536 , - 645 , - 3958 , - 1443 , - 5132 , - 2993 , - 1042 , - 5295 , - 3720 , - 2333 , - 1134 , - 123 , - 5316 , - 4681 , - 4234 , - 3975 , - 3904 , - 4021 , - 4326 , - 4819 , - 5500 , - 353 , - 1410 , - 2655 , - 4088 , - 5709 , - 1502 , - 3499 , - 5684 , - 2041 , - 4602 , - 1335 , - 4272 , - 1381 , - 4694 , - 2179 , - 5868 , - 3729 , - 1778 , - 15 , - 4456 , - 3069 , - 1870 , - 859 , - 36 , - 5417 , - 4970 , - 4711 , - 4640 , - 4757 , - 5062 , - 5555 , - 220 , - 1089 , - 2146 , - 3391 , - 4824 , - 429 , - 2238 , - 4235 , - 404 , - 2777 , - 5338 , - 2071 , - 5008 , - 2117 , - 5430 , - 2915 , - 588 , - 4465 , - 2514 , - 751 , - 5192 , - 3805 , - 2606 , - 1595 , - 772 , - 137 , - 5706 , - 5447 , - 5376 , - 5493 , - 5798 , - 275 , - 956 , - 1825 , - 2882 , - 4127 , - 5560 , - 1165 , - 2974 , - 4971 , - 1140 , - 3513 , - 58 , - 2807 , - 5744 , - 2853 , - 150 , - 3651 , - 1324 , - 5201 , - 3250 , - 1487 , - 5928 , - 4541 , - 3342 , - 2331 , - 1508 , - 873 , - 426 , - 167 , - 96 , - 213 , - 518 , - 1011 , - 1692 , - 2561 , - 3618 , - 4863 , - 280 , - 1901 , - 3710 , - 5707 , - 1876 , - 4249 , - 794 , - 3543 , - 464 , - 3589 , - 886 , - 4387 , - 2060 , - 5937 , - 3986 , - 2223 , - 648 , - 5277 , - 4078 , - 3067 , - 2244 , - 1609 , - 1162 , - 903 , - 832 , - 949 , - 1254 , - 1747 , - 2428 , - 3297 , - 4354 , - 5599 , - 1016 , - 2637 , - 4446 , - 427 , - 2612 , - 4985 , - 1530 , - 4279 , - 1200 , - 4325 , - 1622 , - 5123 , - 2796 , - 657 , - 4722 , - 2959 , - 1384 , - 6013 , - 4814 , - 3803 , - 2980 , - 2345 , - 1898 , - 1639 , - 1568 , - 1685 , - 1990 , - 2483 , - 3164 , - 4033 , - 5090 , - 319 , - 1752 , - 3373 , - 5182 , - 1163 , - 3348 , - 5721 , - 2266 , - 5015 , - 1936 , - 5061 , - 2358 , - 5859 , - 3532 , - 1393 , - 5458 , - 3695 , - 2120 , - 733 , - 5550 , - 4539 , - 3716 , - 3081 , - 2634 , - 2375 , - 2304 , - 2421 , - 2726 , - 3219 , - 3900 , - 4769 , - 5826 , - 1055 , - 2488 , - 4109 , - 5918 , - 1899 , - 4084 , - 441 , - 3002 , - 5751 , - 2672 , - 5797 , - 3094 , - 579 , - 4268 , - 2129 , - 178 , - 4431 , - 2856 , - 1469 , - 270 , - 5275 , - 4452 , - 3817 , - 3370 , - 3111 , - 3040 , - 3157 , - 3462 , - 3955 , - 4636 , - 5505 , - 546 , - 1791 , - 3224 , - 4845 , - 638 , - 2635 , - 4820 , - 1177 , - 3738 , - 471 , - 3408 , - 517 , - 3830 , - 1315 , - 5004 , - 2865 , - 914 , - 5167 , - 3592 , - 2205 , - 1006 , - 6011 , - 5188 , - 4553 , - 4106 , - 3847 , - 3776 , - 3893 , - 4198 , - 4691 , - 5372 , - 225 , - 1282 , - 2527 , - 3960 , - 5581 , - 1374 , - 3371 , - 5556 , - 1913 , - 4474 , - 1207 , - 4144 , - 1253 , - 4566 , - 2051 , - 5740 , - 3601 , - 1650 , - 5903 , - 4328 , - 2941 , - 1742 , - 731 , - 5924 , - 5289 , - 4842 , - 4583 , - 4512 , - 4629 , - 4934 , - 5427 , - 92 , - 961 , - 2018 , - 3263 , - 4696 , - 301 , - 2110 , - 4107 , - 276 , - 2649 , - 5210 , - 1943 , - 4880 , - 1989 , - 5302 , - 2787 , - 460 , - 4337 , - 2386 , - 623 , - 5064 , - 3677 , - 2478 , - 1467 , - 644 , - 9 , - 5578 , - 5319 , - 5248 , - 5365 , - 5670 , - 147 , - 828 , - 1697 , - 2754 , - 3999 , - 5432 , - 1037 , - 2846 , - 4843 , - 1012 , - 3385 , - 5946 , - 2679 , - 5616 , - 2725 , - 22 , - 3523 , - 1196 , - 5073 , - 3122 , - 1359 , - 5800 , - 4413 , - 3214 , - 2203 , - 1380 , - 745 , - 298 , - 39 , - 5984 , - 85 , - 390 , - 883 , - 1564 , - 2433 , - 3490 , - 4735 , - 152 , - 1773 , - 3582 , - 5579 , - 1748 , - 4121 , - 666 , - 3415 , - 336 , - 3461 , - 758 , - 4259 , - 1932 , - 5809 , - 3858 , - 2095 , - 520 , - 5149 , - 3950 , - 2939 , - 2116 , - 1481 , - 1034 , - 775 , - 704 , - 821 , - 1126 , - 1619 , - 2300 , - 3169 , - 4226 , - 5471 , - 888 , - 2509 , - 4318 , - 299 , - 2484 , - 4857 , - 1402 , - 4151 , - 1072 , - 4197 , - 1494 , - 4995 , - 2668 , - 529 , - 4594 , - 2831 , - 1256 , - 5885 , - 4686 , - 3675 , - 2852 , - 2217 , - 1770 , - 1511 , - 1440 , - 1557 , - 1862 , - 2355 , - 3036 , - 3905 , - 4962 , - 191 , - 1624 , - 3245 , - 5054 , - 1035 , - 3220 , - 5593 , - 2138 , - 4887 , - 1808 , - 4933 , - 2230 , - 5731 , - 3404 , - 1265 , - 5330 , - 3567 , - 1992 , - 605 , - 5422 , - 4411 , - 3588 , - 2953 , - 2506 , - 2247 , - 2176 , - 2293 , - 2598 , - 3091 , - 3772 , - 4641 , - 5698 , - 927 , - 2360 , - 3981 , - 5790 , - 1771 , - 3956 , - 313 , - 2874 , - 5623 , - 2544 , - 5669 , - 2966 , - 451 , - 4140 , - 2001 , - 50 , - 4303 , - 2728 , - 1341 , - 142 , - 5147 , - 4324 , - 3689 , - 3242 , - 2983 , - 2912 , - 3029 , - 3334 , - 3827 , - 4508 , - 5377 , - 418 , - 1663 , - 3096 , - 4717 , - 510 , - 2507 , - 4692 , - 1049 , - 3610 , - 343 , - 3280 , - 389 , - 3702 , - 1187 , - 4876 , - 2737 , - 786 , - 5039 , - 3464 , - 2077 , - 878 , - 5883 , - 5060 , - 4425 , - 3978 , - 3719 , - 3648 , - 3765 , - 4070 , - 4563 , - 5244 , - 97 , - 1154 , - 2399 , - 3832 , - 5453 , - 1246 , - 3243 , - 5428 , - 1785 , - 4346 , - 1079 , - 4016 , - 1125 , - 4438 , - 1923 , - 5612 , - 3473 , - 1522 , - 5775 , - 4200 , - 2813 , - 1614 , - 603 , - 5796 , - 5161 , - 4714 , - 4455 , - 4384 , - 4501 , - 4806 , - 5299 , - 5980 , - 833 , - 1890 , - 3135 , - 4568 , - 173 , - 1982 , - 3979 , - 148 , - 2521 , - 5082 , - 1815 , - 4752 , - 1861 , - 5174 , - 2659 , - 332 , - 4209 , - 2258 , - 495 , - 4936 , - 3549 , - 2350 , - 1339 , - 516 , - 5897 , - 5450 , - 5191 , - 5120 , - 5237 , - 5542 , - 19 , - 700 , - 1569 , - 2626 , - 3871 , - 5304 , - 909 , - 2718 , - 4715 , - 884 , - 3257 , - 5818 , - 2551 , - 5488 , - 2597 , - 5910 , - 3395 , - 1068 , - 4945 , - 2994 , - 1231 , - 5672 , - 4285 , - 3086 , - 2075 , - 1252 , - 617 , - 170 , - 5927 , - 5856 , - 5973 , - 262 , - 755 , - 1436 , - 2305 , - 3362 , - 4607 , - 24 , - 1645 , - 3454 , - 5451 , - 1620 , - 3993 , - 538 , - 3287 , - 208 , - 3333 , - 630 , - 4131 , - 1804 , - 5681 , - 3730 , - 1967 , - 392 , - 5021 , - 3822 , - 2811 , - 1988 , - 1353 , - 906 , - 647 , - 576 , - 693 , - 998 , - 1491 , - 2172 , - 3041 , - 4098 , - 5343 , - 760 , - 2381 , - 4190 , - 171 , - 2356 , - 4729 , - 1274 , - 4023 , - 944 , - 4069 , - 1366 , - 4867 , - 2540 , - 401 , - 4466 , - 2703 , - 1128 , - 5757 , - 4558 , - 3547 , - 2724 , - 2089 , - 1642 , - 1383 , - 1312 , - 1429 , - 1734 , - 2227 , - 2908 , - 3777 , - 4834 , - 63 , - 1496 , - 3117 , - 4926 , - 907 , - 3092 , - 5465 , - 2010 , - 4759 , - 1680 , - 4805 , - 2102 , - 5603 , - 3276 , - 1137 , - 5202 , - 3439 , - 1864 , - 477 , - 5294 , - 4283 , - 3460 , - 2825 , - 2378 , - 2119 , - 2048 , - 2165 , - 2470 , - 2963 , - 3644 , - 4513 , - 5570 , - 799 , - 2232 , - 3853 , - 5662 , - 1643 , - 3828 , - 185 , - 2746 , - 5495 , - 2416 , - 5541 , - 2838 , - 323 , - 4012 , - 1873 , - 5938 , - 4175 , - 2600 , - 1213 , - 14 , - 5019 , - 4196 , - 3561 , - 3114 , - 2855 , - 2784 , - 2901 , - 3206 , - 3699 , - 4380 , - 5249 , - 290 , - 1535 , - 2968 , - 4589 , - 382 , - 2379 , - 4564 , - 921 , - 3482 , - 215 , - 3152 , - 261 , - 3574 , - 1059 , - 4748 , - 2609 , - 658 , - 4911 , - 3336 , - 1949 , - 750 , - 5755 , - 4932 , - 4297 , - 3850 , - 3591 , - 3520 , - 3637 , - 3942 , - 4435 , - 5116 , - 5985 , - 1026 , - 2271 , - 3704 , - 5325 , - 1118 , - 3115 , - 5300 , - 1657 , - 4218 , - 951 , - 3888 , - 997 , - 4310 , - 1795 , - 5484 , - 3345 , - 1394 , - 5647 , - 4072 , - 2685 , - 1486 , - 475 , - 5668 , - 5033 , - 4586 , - 4327 , - 4256 , - 4373 , - 4678 , - 5171 , - 5852 , - 705 , - 1762 , - 3007 , - 4440 , - 45 , - 1854 , - 3851 , - 20 , - 2393 , - 4954 , - 1687 , - 4624 , - 1733 , - 5046 , - 2531 , - 204 , - 4081 , - 2130 , - 367 , - 4808 , - 3421 , - 2222 , - 1211 , - 388 , - 5769 , - 5322 , - 5063 , - 4992 , - 5109 , - 5414 , - 5907 , - 572 , - 1441 , - 2498 , - 3743 , - 5176 , - 781 , - 2590 , - 4587 , - 756 , - 3129 , - 5690 , - 2423 , - 5360 , - 2469 , - 5782 , - 3267 , - 940 , - 4817 , - 2866 , - 1103 , - 5544 , - 4157 , - 2958 , - 1947 , - 1124 , - 489 , - 42 , - 5799 , - 5728 , - 5845 , - 134 , - 627 , - 1308 , - 2177 , - 3234 , - 4479 , - 5912 , - 1517 , - 3326 , - 5323 , - 1492 , - 3865 , - 410 , - 3159 , - 80 , - 3205 , - 502 , - 4003 , - 1676 , - 5553 , - 3602 , - 1839 , - 264 , - 4893 , - 3694 , - 2683 , - 1860 , - 1225 , - 778 , - 519 , - 448 , - 565 , - 870 , - 1363 , - 2044 , - 2913 , - 3970 , - 5215 , - 632 , - 2253 , - 4062 , - 43 , - 2228 , - 4601 , - 1146 , - 3895 , - 816 , - 3941 , - 1238 , - 4739 , - 2412 , - 273 , - 4338 , - 2575 , - 1000 , - 5629 , - 4430 , - 3419 , - 2596 , - 1961 , - 1514 , - 1255 , - 1184 , - 1301 , - 1606 , - 2099 , - 2780 , - 3649 , - 4706 , - 5951 , - 1368 , - 2989 , - 4798 , - 779 , - 2964 , - 5337 , - 1882 , - 4631 , - 1552 , - 4677 , - 1974 , - 5475 , - 3148 , - 1009 , - 5074 , - 3311 , - 1736 , - 349 , - 5166 , - 4155 , - 3332 , - 2697 , - 2250 , - 1991 , - 1920 , - 2037 , - 2342 , - 2835 , - 3516 , - 4385 , - 5442 , - 671 , - 2104 , - 3725 , - 5534 , - 1515 , - 3700 , - 57 , - 2618 , - 5367 , - 2288 , - 5413 , - 2710 , - 195 , - 3884 , - 1745 , - 5810 , - 4047 , - 2472 , - 1085 , - 5902 , - 4891 , - 4068 , - 3433 , - 2986 , - 2727 , - 2656 , - 2773 , - 3078 , - 3571 , - 4252 , - 5121 , - 162 , - 1407 , - 2840 , - 4461 , - 254 , - 2251 , - 4436 , - 793 , - 3354 , - 87 , - 3024 , - 133 , - 3446 , - 931 , - 4620 , - 2481 , - 530 , - 4783 , - 3208 , - 1821 , - 622 , - 5627 , - 4804 , - 4169 , - 3722 , - 3463 , - 3392 , - 3509 , - 3814 , - 4307 , - 4988 , - 5857 , - 898 , - 2143 , - 3576 , - 5197 , - 990 , - 2987 , - 5172 , - 1529 , - 4090 , - 823 , - 3760 , - 869 , - 4182 , - 1667 , - 5356 , - 3217 , - 1266 , - 5519 , - 3944 , - 2557 , - 1358 , - 347 , - 5540 , - 4905 , - 4458 , - 4199 , - 4128 , - 4245 , - 4550 , - 5043 , - 5724 , - 577 , - 1634 , - 2879 , - 4312 , - 5933 , - 1726 , - 3723 , - 5908 , - 2265 , - 4826 , - 1559 , - 4496 , - 1605 , - 4918 , - 2403 , - 76 , - 3953 , - 2002 , - 239 , - 4680 , - 3293 , - 2094 , - 1083 , - 260 , - 5641 , - 5194 , - 4935 , - 4864 , - 4981 , - 5286 , - 5779 , - 444 , - 1313 , - 2370 , - 3615 , - 5048 , - 653 , - 2462 , - 4459 , - 628 , - 3001 , - 5562 , - 2295 , - 5232 , - 2341 , - 5654 , - 3139 , - 812 , - 4689 , - 2738 , - 975 , - 5416 , - 4029 , - 2830 , - 1819 , - 996 , - 361 , - 5930 , - 5671 , - 5600 , - 5717 , - 6 , - 499 , - 1180 , - 2049 , - 3106 , - 4351 , - 5784 , - 1389 , - 3198 , - 5195 , - 1364 , - 3737 , - 282 , - 3031 , - 5968 , - 3077 , - 374 , - 3875 , - 1548 , - 5425 , - 3474 , - 1711 , - 136 , - 4765 , - 3566 , - 2555 , - 1732 , - 1097 , - 650 , - 391 , - 320 , - 437 , - 742 , - 1235 , - 1916 , - 2785 , - 3842 , - 5087 , - 504 , - 2125 , - 3934 , - 5931 , - 2100 , - 4473 , - 1018 , - 3767 , - 688 , - 3813 , - 1110 , - 4611 , - 2284 , - 145 , - 4210 , - 2447 , - 872 , - 5501 , - 4302 , - 3291 , - 2468 , - 1833 , - 1386 , - 1127 , - 1056 , - 1173 , - 1478 , - 1971 , - 2652 , - 3521 , - 4578 , - 5823 , - 1240 , - 2861 , - 4670 , - 651 , - 2836 , - 5209 , - 1754 , - 4503 , - 1424 , - 4549 , - 1846 , - 5347 , - 3020 , - 881 , - 4946 , - 3183 , - 1608 , - 221 , - 5038 , - 4027 , - 3204 , - 2569 , - 2122 , - 1863 , - 1792 , - 1909 , - 2214 , - 2707 , - 3388 , - 4257 , - 5314 , - 543 , - 1976 , - 3597 , - 5406 , - 1387 , - 3572 , - 5945 , - 2490 , - 5239 , - 2160 , - 5285 , - 2582 , - 67 , - 3756 , - 1617 , - 5682 , - 3919 , - 2344 , - 957 , - 5774 , - 4763 , - 3940 , - 3305 , - 2858 , - 2599 , - 2528 , - 2645 , - 2950 , - 3443 , - 4124 , - 4993 , - 34 , - 1279 , - 2712 , - 4333 , - 126 , - 2123 , - 4308 , - 665 , - 3226 , - 5975 , - 2896 , - 5 , - 3318 , - 803 , - 4492 , - 2353 , - 402 , - 4655 , - 3080 , - 1693 , - 494 , - 5499 , - 4676 , - 4041 , - 3594 , - 3335 , - 3264 , - 3381 , - 3686 , - 4179 , - 4860 , - 5729 , - 770 , - 2015 , - 3448 , - 5069 , - 862 , - 2859 , - 5044 , - 1401 , - 3962 , - 695 , - 3632 , - 741 , - 4054 , - 1539 , - 5228 , - 3089 , - 1138 , - 5391 , - 3816 , - 2429 , - 1230 , - 219 , - 5412 , - 4777 , - 4330 , - 4071 , - 4000 , - 4117 , - 4422 , - 4915 , - 5596 , - 449 , - 1506 , - 2751 , - 4184 , - 5805 , - 1598 , - 3595 , - 5780 , - 2137 , - 4698 , - 1431 , - 4368 , - 1477 , - 4790 , - 2275 , - 5964 , - 3825 , - 1874 , - 111 , - 4552 , - 3165 , - 1966 , - 955 , - 132 , - 5513 , - 5066 , - 4807 , - 4736 , - 4853 , - 5158 , - 5651 , - 316 , - 1185 , - 2242 , - 3487 , - 4920 , - 525 , - 2334 , - 4331 , - 500 , - 2873 , - 5434 , - 2167 , - 5104 , - 2213 , - 5526 , - 3011 , - 684 , - 4561 , - 2610 , - 847 , - 5288 , - 3901 , - 2702 , - 1691 , - 868 , - 233 , - 5802 , - 5543 , - 5472 , - 5589 , - 5894 , - 371 , - 1052 , - 1921 , - 2978 , - 4223 , - 5656 , - 1261 , - 3070 , - 5067 , - 1236 , - 3609 , - 154 , - 2903 , - 5840 , - 2949 , - 246 , - 3747 , - 1420 , - 5297 , - 3346 , - 1583 , - 8 , - 4637 , - 3438 , - 2427 , - 1604 , - 969 , - 522 , - 263 , - 192 , - 309 , - 614 , - 1107 , - 1788 , - 2657 , - 3714 , - 4959 , - 376 , - 1997 , - 3806 , - 5803 , - 1972 , - 4345 , - 890 , - 3639 , - 560 , - 3685 , - 982 , - 4483 , - 2156 , - 17 , - 4082 , - 2319 , - 744 , - 5373 , - 4174 , - 3163 , - 2340 , - 1705 , - 1258 , - 999 , - 928 , - 1045 , - 1350 , - 1843 , - 2524 , - 3393 , - 4450 , - 5695 , - 1112 , - 2733 , - 4542 , - 523 , - 2708 , - 5081 , - 1626 , - 4375 , - 1296 , - 4421 , - 1718 , - 5219 , - 2892 , - 753 , - 4818 , - 3055 , - 1480 , - 93 , - 4910 , - 3899 , - 3076 , - 2441 , - 1994 , - 1735 , - 1664 , - 1781 , - 2086 , - 2579 , - 3260 , - 4129 , - 5186 , - 415 , - 1848 , - 3469 , - 5278 , - 1259 , - 3444 , - 5817 , - 2362 , - 5111 , - 2032 , - 5157 , - 2454 , - 5955 , - 3628 , - 1489 , - 5554 , - 3791 , - 2216 , - 829 , - 5646 , - 4635 , - 3812 , - 3177 , - 2730 , - 2471 , - 2400 , - 2517 , - 2822 , - 3315 , - 3996 , - 4865 , - 5922 , - 1151 , - 2584 , - 4205 , - 6014 , - 1995 , - 4180 , - 537 , - 3098 , - 5847 , - 2768 , - 5893 , - 3190 , - 675 , - 4364 , - 2225 , - 274 , - 4527 , - 2952 , - 1565 , - 366 , - 5371 , - 4548 , - 3913 , - 3466 , - 3207 , - 3136 , - 3253 , - 3558 , - 4051 , - 4732 , - 5601 , - 642 , - 1887 , - 3320 , - 4941 , - 734 , - 2731 , - 4916 , - 1273 , - 3834 , - 567 , - 3504 , - 613 , - 3926 , - 1411 , - 5100 , - 2961 , - 1010 , - 5263 , - 3688 , - 2301 , - 1102 , - 91 , - 5284 , - 4649 , - 4202 , - 3943 , - 3872 , - 3989 , - 4294 , - 4787 , - 5468 , - 321 , - 1378 , - 2623 , - 4056 , - 5677 , - 1470 , - 3467 , - 5652 , - 2009 , - 4570 , - 1303 , - 4240 , - 1349 , - 4662 , - 2147 , - 5836 , - 3697 , - 1746 , - 5999 , - 4424 , - 3037 , - 1838 , - 827 , - 4 , - 5385 , - 4938 , - 4679 , - 4608 , - 4725 , - 5030 , - 5523 , - 188 , - 1057 , - 2114 , - 3359 , - 4792 , - 397 , - 2206 , - 4203 , - 372 , - 2745 , - 5306 , - 2039 , - 4976 , - 2085 , - 5398 , - 2883 , - 556 , - 4433 , - 2482 , - 719 , - 5160 , - 3773 , - 2574 , - 1563 , - 740 , - 105 , - 5674 , - 5415 , - 5344 , - 5461 , - 5766 , - 243 , - 924 , - 1793 , - 2850 , - 4095 , - 5528 , - 1133 , - 2942 , - 4939 , - 1108 , - 3481 , - 26 , - 2775 , - 5712 , - 2821 , - 118 , - 3619 , - 1292 , - 5169 , - 3218 , - 1455 , - 5896 , - 4509 , - 3310 , - 2299 , - 1476 , - 841 , - 394 , - 135 , - 64 , - 181 , - 486 , - 979 , - 1660 , - 2529 , - 3586 , - 4831 , - 248 , - 1869 , - 3678 , - 5675 , - 1844 , - 4217 , - 762 , - 3511 , - 432 , - 3557 , - 854 , - 4355 , - 2028 , - 5905 , - 3954 , - 2191 , - 616 , - 5245 , - 4046 , - 3035 , - 2212 , - 1577 , - 1130 , - 871 , - 800 , - 917 , - 1222 , - 1715 , - 2396 , - 3265 , - 4322 , - 5567 , - 984 , - 2605 , - 4414 , - 395 , - 2580 , - 4953 , - 1498 , - 4247 , - 1168 , - 4293 , - 1590 , - 5091 , - 2764 , - 625 , - 4690 , - 2927 , - 1352 , - 5981 , - 4782 , - 3771 , - 2948 , - 2313 , - 1866 , - 1607 , - 1536 , - 1653 , - 1958 , - 2451 , - 3132 , - 4001 , - 5058 , - 287 , - 1720 , - 3341 , - 5150 , - 1131 , - 3316 , - 5689 , - 2234 , - 4983 , - 1904 , - 5029 , - 2326 , - 5827 , - 3500 , - 1361 , - 5426 , - 3663 , - 2088 , - 701 , - 5518 , - 4507 , - 3684 , - 3049 , - 2602 , - 2343 , - 2272 , - 2389 , - 2694 , - 3187 , - 3868 , - 4737 , - 5794 , - 1023 , - 2456 , - 4077 , - 5886 , - 1867 , - 4052 , - 409 , - 2970 , - 5719 , - 2640 , - 5765 , - 3062 , - 547 , - 4236 , - 2097 , - 146 , - 4399 , - 2824 , - 1437 , - 238 , - 5243 , - 4420 , - 3785 , - 3338 , - 3079 , - 3008 , - 3125 , - 3430 , - 3923 , - 4604 , - 5473 , - 514 , - 1759 , - 3192 , - 4813 , - 606 , - 2603 , - 4788 , - 1145 , - 3706 , - 439 , - 3376 , - 485 , - 3798 , - 1283 , - 4972 , - 2833 , - 882 , - 5135 , - 3560 , - 2173 , - 974 , - 5979 , - 5156 , - 4521 , - 4074 , - 3815 , - 3744 , - 3861 , - 4166 , - 4659 , - 5340 , - 193 , - 1250 , - 2495 , - 3928 , - 5549 , - 1342 , - 3339 , - 5524 , - 1881 , - 4442 , - 1175 , - 4112 , - 1221 , - 4534 , - 2019 , - 5708 , - 3569 , - 1618 , - 5871 , - 4296 , - 2909 , - 1710 , - 699 , - 5892 , - 5257 , - 4810 , - 4551 , - 4480 , - 4597 , - 4902 , - 5395 , - 60 , - 929 , - 1986 , - 3231 , - 4664 , - 269 , - 2078 , - 4075 , - 244 , - 2617 , - 5178 , - 1911 , - 4848 , - 1957 , - 5270 , - 2755 , - 428 , - 4305 , - 2354 , - 591 , - 5032 , - 3645 , - 2446 , - 1435 , - 612 , - 5993 , - 5546 , - 5287 , - 5216 , - 5333 , - 5638 , - 115 , - 796 , - 1665 , - 2722 , - 3967 , - 5400 , - 1005 , - 2814 , - 4811 , - 980 , - 3353 , - 5914 , - 2647 , - 5584 , - 2693 , - 6006 , - 3491 , - 1164 , - 5041 , - 3090 , - 1327 , - 5768 , - 4381 , - 3182 , - 2171 , - 1348 , - 713 , - 266 , - 7 , - 5952 , - 53 , - 358 , - 851 , - 1532 , - 2401 , - 3458 , - 4703 , - 120 , - 1741 , - 3550 , - 5547 , - 1716 , - 4089 , - 634 , - 3383 , - 304 , - 3429 , - 726 , - 4227 , - 1900 , - 5777 , - 3826 , - 2063 , - 488 , - 5117 , - 3918 , - 2907 , - 2084 , - 1449 , - 1002 , - 743 , - 672 , - 789 , - 1094 , - 1587 , - 2268 , - 3137 , - 4194 , - 5439 , - 856 , - 2477 , - 4286 , - 267 , - 2452 , - 4825 , - 1370 , - 4119 , - 1040 , - 4165 , - 1462 , - 4963 , - 2636 , - 497 , - 4562 , - 2799 , - 1224 , - 5853 , - 4654 , - 3643 , - 2820 , - 2185 , - 1738 , - 1479 , - 1408 , - 1525 , - 1830 , - 2323 , - 3004 , - 3873 , - 4930 , - 159 , - 1592 , - 3213 , - 5022 , - 1003 , - 3188 , - 5561 , - 2106 , - 4855 , - 1776 , - 4901 , - 2198 , - 5699 , - 3372 , - 1233 , - 5298 , - 3535 , - 1960 , - 573 , - 5390 , - 4379 , - 3556 , - 2921 , - 2474 , - 2215 , - 2144 , - 2261 , - 2566 , - 3059 , - 3740 , - 4609 , - 5666 , - 895 , - 2328 , - 3949 , - 5758 , - 1739 , - 3924 , - 281 , - 2842 , - 5591 , - 2512 , - 5637 , - 2934 , - 419 , - 4108 , - 1969 , - 18 , - 4271 , - 2696 , - 1309 , - 110 , - 5115 , - 4292 , - 3657 , - 3210 , - 2951 , - 2880 , - 2997 , - 3302 , - 3795 , - 4476 , - 5345 , - 386 , - 1631 , - 3064 , - 4685 , - 478 , - 2475 , - 4660 , - 1017 , - 3578 , - 311 , - 3248 , - 357 , - 3670 , - 1155 , - 4844 , - 2705 , - 754 , - 5007 , - 3432 , - 2045 , - 846 , - 5851 , - 5028 , - 4393 , - 3946 , - 3687 , - 3616 , - 3733 , - 4038 , - 4531 , - 5212 , - 65 , - 1122 , - 2367 , - 3800 , - 5421 , - 1214 , - 3211 , - 5396 , - 1753 , - 4314 , - 1047 , - 3984 , - 1093 , - 4406 , - 1891 , - 5580 , - 3441 , - 1490 , - 5743 , - 4168 , - 2781 , - 1582 , - 571 , - 5764 , - 5129 , - 4682 , - 4423 , - 4352 , - 4469 , - 4774 , - 5267 , - 5948 , - 801 , - 1858 , - 3103 , - 4536 , - 141 , - 1950 , - 3947 , - 116 , - 2489 , - 5050 , - 1783 , - 4720 , - 1829 , - 5142 , - 2627 , - 300 , - 4177 , - 2226 , - 463 , - 4904 , - 3517 , - 2318 , - 1307 , - 484 , - 5865 , - 5418 , - 5159 , - 5088 , - 5205 , - 5510 , - 6003 , - 668 , - 1537 , - 2594 , - 3839 , - 5272 , - 877 , - 2686 , - 4683 , - 852 , - 3225 , - 5786 , - 2519 , - 5456 , - 2565 , - 5878 , - 3363 , - 1036 , - 4913 , - 2962 , - 1199 , - 5640 , - 4253 , - 3054 , - 2043 , - 1220 , - 585 , - 138 , - 5895 , - 5824 , - 5941 , - 230 , - 723 , - 1404 , - 2273 , - 3330 , - 4575 , - 6008 , - 1613 , - 3422 , - 5419 , - 1588 , - 3961 , - 506 , - 3255 , - 176 , - 3301 , - 598 , - 4099 , - 1772 , - 5649 , - 3698 , - 1935 , - 360 , - 4989 , - 3790 , - 2779 , - 1956 , - 1321 , - 874 , - 615 , - 544 , - 661 , - 966 , - 1459 , - 2140 , - 3009 , - 4066 , - 5311 , - 728 , - 2349 , - 4158 , - 139 , - 2324 , - 4697 , - 1242 , - 3991 , - 912 , - 4037 , - 1334 , - 4835 , - 2508 , - 369 , - 4434 , - 2671 , - 1096 , - 5725 , - 4526 , - 3515 , - 2692 , - 2057 , - 1610 , - 1351 , - 1280 , - 1397 , - 1702 , - 2195 , - 2876 , - 3745 , - 4802 , - 31 , - 1464 , - 3085 , - 4894 , - 875 , - 3060 , - 5433 , - 1978 , - 4727 , - 1648 , - 4773 , - 2070 , - 5571 , - 3244 , - 1105 , - 5170 , - 3407 , - 1832 , - 445 , - 5262 , - 4251 , - 3428 , - 2793 , - 2346 , - 2087 , - 2016 , - 2133 , - 2438 , - 2931 , - 3612 , - 4481 , - 5538 , - 767 , - 2200 , - 3821 , - 5630 , - 1611 , - 3796 , - 153 , - 2714 , - 5463 , - 2384 , - 5509 , - 2806 , - 291 , - 3980 , - 1841 , - 5906 , - 4143 , - 2568 , - 1181 , - 5998 , - 4987 , - 4164 , - 3529 , - 3082 , - 2823 , - 2752 , - 2869 , - 3174 , - 3667 , - 4348 , - 5217 , - 258 , - 1503 , - 2936 , - 4557 , - 350 , - 2347 , - 4532 , - 889 , - 3450 , - 183 , - 3120 , - 229 , - 3542 , - 1027 , - 4716 , - 2577 , - 626 , - 4879 , - 3304 , - 1917 , - 718 , - 5723 , - 4900 , - 4265 , - 3818 , - 3559 , - 3488 , - 3605 , - 3910 , - 4403 , - 5084 , - 5953 , - 994 , - 2239 , - 3672 , - 5293 , - 1086 , - 3083 , - 5268 , - 1625 , - 4186 , - 919 , - 3856 , - 965 , - 4278 , - 1763 , - 5452 , - 3313 , - 1362 , - 5615 , - 4040 , - 2653 , - 1454 , - 443 , - 5636 , - 5001 , - 4554 , - 4295 , - 4224 , - 4341 , - 4646 , - 5139 , - 5820 , - 673 , - 1730 , - 2975 , - 4408 , - 13 , - 1822 , - 3819 , - 6004 , - 2361 , - 4922 , - 1655 , - 4592 , - 1701 , - 5014 , - 2499 , - 172 , - 4049 , - 2098 , - 335 , - 4776 , - 3389 , - 2190 , - 1179 , - 356 , - 5737 , - 5290 , - 5031 , - 4960 , - 5077 , - 5382 , - 5875 , - 540 , - 1409 , - 2466 , - 3711 , - 5144 , - 749 , - 2558 , - 4555 , - 724 , - 3097 , - 5658 , - 2391 , - 5328 , - 2437 , - 5750 , - 3235 , - 908 , - 4785 , - 2834 , - 1071 , - 5512 , - 4125 , - 2926 , - 1915 , - 1092 , - 457 , - 10 , - 5767 , - 5696 , - 5813 , - 102 , - 595 , - 1276 , - 2145 , - 3202 , - 4447 , - 5880 , - 1485 , - 3294 , - 5291 , - 1460 , - 3833 , - 378 , - 3127 , - 48 , - 3173 , - 470 , - 3971 , - 1644 , - 5521 , - 3570 , - 1807 , - 232 , - 4861 , - 3662 , - 2651 , - 1828 , - 1193 , - 746 , - 487 , - 416 , - 533 , - 838 , - 1331 , - 2012 , - 2881 , - 3938 , - 5183 , - 600 , - 2221 , - 4030 , - 11 , - 2196 , - 4569 , - 1114 , - 3863 , - 784 , - 3909 , - 1206 , - 4707 , - 2380 , - 241 , - 4306 , - 2543 , - 968 , - 5597 , - 4398 , - 3387 , - 2564 , - 1929 , - 1482 , - 1223 , - 1152 , - 1269 , - 1574 , - 2067 , - 2748 , - 3617 , - 4674 , - 5919 , - 1336 , - 2957 , - 4766 , - 747 , - 2932 , - 5305 , - 1850 , - 4599 , - 1520 , - 4645 , - 1942 , - 5443 , - 3116 , - 977 , - 5042 , - 3279 , - 1704 , - 317 , - 5134 , - 4123 , - 3300 , - 2665 , - 2218 , - 1959 , - 1888 , - 2005 , - 2310 , - 2803 , - 3484 , - 4353 , - 5410 , - 639 , - 2072 , - 3693 , - 5502 , - 1483 , - 3668 , - 25 , - 2586 , - 5335 , - 2256 , - 5381 , - 2678 , - 163 , - 3852 , - 1713 , - 5778 , - 4015 , - 2440 , - 1053 , - 5870 , - 4859 , - 4036 , - 3401 , - 2954 , - 2695 , - 2624 , - 2741 , - 3046 , - 3539 , - 4220 , - 5089 , - 130 , - 1375 , - 2808 , - 4429 , - 222 , - 2219 , - 4404 , - 761 , - 3322 , - 55 , - 2992 , - 101 , - 3414 , - 899 , - 4588 , - 2449 , - 498 , - 4751 , - 3176 , - 1789 , - 590 , - 5595 , - 4772 , - 4137 , - 3690 , - 3431 , - 3360 , - 3477 , - 3782 , - 4275 , - 4956 , - 5825 , - 866 , - 2111 , - 3544 , - 5165 , - 958 , - 2955 , - 5140 , - 1497 , - 4058 , - 791 , - 3728 , - 837 , - 4150 , - 1635 , - 5324 , - 3185 , - 1234 , - 5487 , - 3912 , - 2525 , - 1326 , - 315 , - 5508 , - 4873 , - 4426 , - 4167 , - 4096 , - 4213 , - 4518 , - 5011 , - 5692 , - 545 , - 1602 , - 2847 , - 4280 , - 5901 , - 1694 , - 3691 , - 5876 , - 2233 , - 4794 , - 1527 , - 4464 , - 1573 , - 4886 , - 2371 , - 44 , - 3921 , - 1970 , - 207 , - 4648 , - 3261 , - 2062 , - 1051 , - 228 , - 5609 , - 5162 , - 4903 , - 4832 , - 4949 , - 5254 , - 5747 , - 412 , - 1281 , - 2338 , - 3583 , - 5016 , - 621 , - 2430 , - 4427 , - 596 , - 2969 , - 5530 , - 2263 , - 5200 , - 2309 , - 5622 , - 3107 , - 780 , - 4657 , - 2706 , - 943 , - 5384 , - 3997 , - 2798 , - 1787 , - 964 , - 329 , - 5898 , - 5639 , - 5568 , - 5685 , - 5990 , - 467 , - 1148 , - 2017 , - 3074 , - 4319 , - 5752 , - 1357 , - 3166 , - 5163 , - 1332 , - 3705 , - 250 , - 2999 , - 5936 , - 3045 , - 342 , - 3843 , - 1516 , - 5393 , - 3442 , - 1679 , - 104 , - 4733 , - 3534 , - 2523 , - 1700 , - 1065 , - 618 , - 359 , - 288 , - 405 , - 710 , - 1203 , - 1884 , - 2753 , - 3810 , - 5055 , - 472 , - 2093 , - 3902 , - 5899 , - 2068 , - 4441 , - 986 , - 3735 , - 656 , - 3781 , - 1078 , - 4579 , - 2252 , - 113 , - 4178 , - 2415 , - 840 , - 5469 , - 4270 , - 3259 , - 2436 , - 1801 , - 1354 , - 1095 , - 1024 , - 1141 , - 1446 , - 1939 , - 2620 , - 3489 , - 4546 , - 5791 , - 1208 , - 2829 , - 4638 , - 619 , - 2804 , - 5177 , - 1722 , - 4471 , - 1392 , - 4517 , - 1814 , - 5315 , - 2988 , - 849 , - 4914 , - 3151 , - 1576 , - 189 , - 5006 , - 3995 , - 3172 , - 2537 , - 2090 , - 1831 , - 1760 , - 1877 , - 2182 , - 2675 , - 3356 , - 4225 , - 5282 , - 511 , - 1944 , - 3565 , - 5374 , - 1355 , - 3540 , - 5913 , - 2458 , - 5207 , - 2128 , - 5253 , - 2550 , - 35 , - 3724 , - 1585 , - 5650 , - 3887 , - 2312 , - 925 , - 5742 , - 4731 , - 3908 , - 3273 , - 2826 , - 2567 , - 2496 , - 2613 , - 2918 , - 3411 , - 4092 , - 4961 , - 2 , - 1247 , - 2680 , - 4301 , - 94 , - 2091 , - 4276 , - 633 , - 3194 , - 5943 , - 2864 , - 5989 , - 3286 , - 771 , - 4460 , - 2321 , - 370 , - 4623 , - 3048 , - 1661 , - 462 , - 5467 , - 4644 , - 4009 , - 3562 , - 3303 , - 3232 , - 3349 , - 3654 , - 4147 , - 4828 , - 5697 , - 738 , - 1983 , - 3416 , - 5037 , - 830 , - 2827 , - 5012 , - 1369 , - 3930 , - 663 , - 3600 , - 709 , - 4022 , - 1507 , - 5196 , - 3057 , - 1106 , - 5359 , - 3784 , - 2397 , - 1198 , - 187 , - 5380 , - 4745 , - 4298 , - 4039 , - 3968 , - 4085 , - 4390 , - 4883 , - 5564 , - 417 , - 1474 , - 2719 , - 4152 , - 5773 , - 1566 , - 3563 , - 5748 , - 2105 , - 4666 , - 1399 , - 4336 , - 1445 , - 4758 , - 2243 , - 5932 , - 3793 , - 1842 , - 79 , - 4520 , - 3133 , - 1934 , - 923 , - 100 , - 5481 , - 5034 , - 4775 , - 4704 , - 4821 , - 5126 , - 5619 , - 284 , - 1153 , - 2210 , - 3455 , - 4888 , - 493 , - 2302 , - 4299 , - 468 , - 2841 , - 5402 , - 2135 , - 5072 , - 2181 , - 5494 , - 2979 , - 652 , - 4529 , - 2578 , - 815 , - 5256 , - 3869 , - 2670 , - 1659 , - 836 , - 201 , - 5770 , - 5511 , - 5440 , - 5557 , - 5862 , - 339 , - 1020 , - 1889 , - 2946 , - 4191 , - 5624 , - 1229 , - 3038 , - 5035 , - 1204 , - 3577 , - 122 , - 2871 , - 5808 , - 2917 , - 214 , - 3715 , - 1388 , - 5265 , - 3314 , - 1551 , - 5992 , - 4605 , - 3406 , - 2395 , - 1572 , - 937 , - 490 , - 231 , - 160 , - 277 , - 582 , - 1075 , - 1756 , - 2625 , - 3682 , - 4927 , - 344 , - 1965 , - 3774 , - 5771 , - 1940 , - 4313 , - 858 , - 3607 , - 528 , - 3653 , - 950 , - 4451 , - 2124 , - 6001 , - 4050 , - 2287 , - 712 , - 5341 , - 4142 , - 3131 , - 2308 , - 1673 , - 1226 , - 967 , - 896 , - 1013 , - 1318 , - 1811 , - 2492 , - 3361 , - 4418 , - 5663 , - 1080 , - 2701 , - 4510 , - 491 , - 2676 , - 5049 , - 1594 , - 4343 , - 1264 , - 4389 , - 1686 , - 5187 , - 2860 , - 721 , - 4786 , - 3023 , - 1448 , - 61 , - 4878 , - 3867 , - 3044 , - 2409 , - 1962 , - 1703 , - 1632 , - 1749 , - 2054 , - 2547 , - 3228 , - 4097 , - 5154 , - 383 , - 1816 , - 3437 , - 5246 , - 1227 , - 3412 , - 5785 , - 2330 , - 5079 , - 2000 , - 5125 , - 2422 , - 5923 , - 3596 , - 1457 , - 5522 , - 3759 , - 2184 , - 797 , - 5614 , - 4603 , - 3780 , - 3145 , - 2698 , - 2439 , - 2368 , - 2485 , - 2790 , - 3283 , - 3964 , - 4833 , - 5890 , - 1119 , - 2552 , - 4173 , - 5982 , - 1963 , - 4148 , - 505 , - 3066 , - 5815 , - 2736 , - 5861 , - 3158 , - 643 , - 4332 , - 2193 , - 242 , - 4495 , - 2920 , - 1533 , - 334 , - 5339 , - 4516 , - 3881 , - 3434 , - 3175 , - 3104 , - 3221 , - 3526 , - 4019 , - 4700 , - 5569 , - 610 , - 1855 , - 3288 , - 4909 , - 702 , - 2699 , - 4884 , - 1241 , - 3802 , - 535 , - 3472 , - 581 , - 3894 , - 1379 , - 5068 , - 2929 , - 978 , - 5231 , - 3656 , - 2269 , - 1070 , - 59 , - 5252 , - 4617 , - 4170 , - 3911 , - 3840 , - 3957 , - 4262 , - 4755 , - 5436 , - 289 , - 1346 , - 2591 , - 4024 , - 5645 , - 1438 , - 3435 , - 5620 , - 1977 , - 4538 , - 1271 , - 4208 , - 1317 , - 4630 , - 2115 , - 5804 , - 3665 , - 1714 , - 5967 , - 4392 , - 3005 , - 1806 , - 795 , - 5988 , - 5353 , - 4906 , - 4647 , - 4576 , - 4693 , - 4998 , - 5491 , - 156 , - 1025 , - 2082 , - 3327 , - 4760 , - 365 , - 2174 , - 4171 , - 340 , - 2713 , - 5274 , - 2007 , - 4944 , - 2053 , - 5366 , - 2851 , - 524 , - 4401 , - 2450 , - 687 , - 5128 , - 3741 , - 2542 , - 1531 , - 708 , - 73 , - 5642 , - 5383 , - 5312 , - 5429 , - 5734 , - 211 , - 892 , - 1761 , - 2818 , - 4063 , - 5496 , - 1101 , - 2910 , - 4907 , - 1076 , - 3449 , - 6010 , - 2743 , - 5680 , - 2789 , - 86 , - 3587 , - 1260 , - 5137 , - 3186 , - 1423 , - 5864 , - 4477 , - 3278 , - 2267 , - 1444 , - 809 , - 362 , - 103 , - 32 , - 149 , - 454 , - 947 , - 1628 , - 2497 , - 3554 , - 4799 , - 216 , - 1837 , - 3646 , - 5643 , - 1812 , - 4185 , - 730 , - 3479 , - 400 , - 3525 , - 822 , - 4323 , - 1996 , - 5873 , - 3922 , - 2159 , - 584 , - 5213 , - 4014 , - 3003 , - 2180 , - 1545 , - 1098 , - 839 , - 768 , - 885 , - 1190 , - 1683 , - 2364 , - 3233 , - 4290 , - 5535 , - 952 , - 2573 , - 4382 , - 363 , - 2548 , - 4921 , - 1466 , - 4215 , - 1136 , - 4261 , - 1558 , - 5059 , - 2732 , - 593 , - 4658 , - 2895 , - 1320 , - 5949 , - 4750 , - 3739 , - 2916 , - 2281 , - 1834 , - 1575 , - 1504 , - 1621 , - 1926 , - 2419 , - 3100 , - 3969 , - 5026 , - 255 , - 1688 , - 3309 , - 5118 , - 1099 , - 3284 , - 5657 , - 2202 , - 4951 , - 1872 , - 4997 , - 2294 , - 5795 , - 3468 , - 1329 , - 5394 , - 3631 , - 2056 , - 669 , - 5486 , - 4475 , - 3652 , - 3017 , - 2570 , - 2311 , - 2240 , - 2357 , - 2662 , - 3155 , - 3836 , - 4705 , - 5762 , - 991 , - 2424 , - 4045 , - 5854 , - 1835 , - 4020 , - 377 , - 2938 , - 5687 , - 2608 , - 5733 , - 3030 , - 515 , - 4204 , - 2065 , - 114 , - 4367 , - 2792 , - 1405 , - 206 , - 5211 , - 4388 , - 3753 , - 3306 , - 3047 , - 2976 , - 3093 , - 3398 , - 3891 , - 4572 , - 5441 , - 482 , - 1727 , - 3160 , - 4781 , - 574 , - 2571 , - 4756 , - 1113 , - 3674 , - 407 , - 3344 , - 453 , - 3766 , - 1251 , - 4940 , - 2801 , - 850 , - 5103 , - 3528 , - 2141 , - 942 , - 5947 , - 5124 , - 4489 , - 4042 , - 3783 , - 3712 , - 3829 , - 4134 , - 4627 , - 5308 , - 161 , - 1218 , - 2463 , - 3896 , - 5517 , - 1310 , - 3307 , - 5492 , - 1849 , - 4410 , - 1143 , - 4080 , - 1189 , - 4502 , - 1987 , - 5676 , - 3537 , - 1586 , - 5839 , - 4264 , - 2877 , - 1678 , - 667 , - 5860 , - 5225 , - 4778 , - 4519 , - 4448 , - 4565 , - 4870 , - 5363 , - 28 , - 897 , - 1954 , - 3199 , - 4632 , - 237 , - 2046 , - 4043 , - 212 , - 2585 , - 5146 , - 1879 , - 4816 , - 1925 , - 5238 , - 2723 , - 396 , - 4273 , - 2322 , - 559 , - 5000 , - 3613 , - 2414 , - 1403 , - 580 , - 5961 , - 5514 , - 5255 , - 5184 , - 5301 , - 5606 , - 83 , - 764 , - 1633 , - 2690 , - 3935 , - 5368 , - 973 , - 2782 , - 4779 , - 948 , - 3321 , - 5882 , - 2615 , - 5552 , - 2661 , - 5974 , - 3459 , - 1132 , - 5009 , - 3058 , - 1295 , - 5736 , - 4349 , - 3150 , - 2139 , - 1316 , - 681 , - 234 , - 5991 , - 5920 , - 21 , - 326 , - 819 , - 1500 , - 2369 , - 3426 , - 4671 , - 88 , - 1709 , - 3518 , - 5515 , - 1684 , - 4057 , - 602 , - 3351 , - 272 , - 3397 , - 694 , - 4195 , - 1868 , - 5745 , - 3794 , - 2031 , - 456 , - 5085 , - 3886 , - 2875 , - 2052 , - 1417 , - 970 , - 711 , - 640 , - 757 , - 1062 , - 1555 , - 2236 , - 3105 , - 4162 , - 5407 , - 824 , - 2445 , - 4254 , - 235 , - 2420 , - 4793 , - 1338 , - 4087 , - 1008 , - 4133 , - 1430 , - 4931 , - 2604 , - 465 , - 4530 , - 2767 , - 1192 , - 5821 , - 4622 , - 3611 , - 2788 , - 2153 , - 1706 , - 1447 , - 1376 , - 1493 , - 1798 , - 2291 , - 2972 , - 3841 , - 4898 , - 127 , - 1560 , - 3181 , - 4990 , - 971 , - 3156 , - 5529 , - 2074 , - 4823 , - 1744 , - 4869 , - 2166 , - 5667 , - 3340 , - 1201 , - 5266 , - 3503 , - 1928 , - 541 , - 5358 , - 4347 , - 3524 , - 2889 , - 2442 , - 2183 , - 2112 , - 2229 , - 2534 , - 3027 , - 3708 , - 4577 , - 5634 , - 863 , - 2296 , - 3917 , - 5726 , - 1707 , - 3892 , - 249 , - 2810 , - 5559 , - 2480 , - 5605 , - 2902 , - 387 , - 4076 , - 1937 , - 6002 , - 4239 , - 2664 , - 1277 , - 78 , - 5083 , - 4260 , - 3625 , - 3178 , - 2919 , - 2848 , - 2965 , - 3270 , - 3763 , - 4444 , - 5313 , - 354 , - 1599 , - 3032 , - 4653 , - 446 , - 2443 , - 4628 , - 985 , - 3546 , - 279 , - 3216 , - 325 , - 3638 , - 1123 , - 4812 , - 2673 , - 722 , - 4975 , - 3400 , - 2013 , - 814 , - 5819 , - 4996 , - 4361 , - 3914 , - 3655 , - 3584 , - 3701 , - 4006 , - 4499 , - 5180 , - 33 , - 1090 , - 2335 , - 3768 , - 5389 , - 1182 , - 3179 , - 5364 , - 1721 , - 4282 , - 1015 , - 3952 , - 1061 , - 4374 , - 1859 , - 5548 , - 3409 , - 1458 , - 5711 , - 4136 , - 2749 , - 1550 , - 539 , - 5732 , - 5097 , - 4650 , - 4391 , - 4320 , - 4437 , - 4742 , - 5235 , - 5916 , - 769 , - 1826 , - 3071 , - 4504 , - 109 , - 1918 , - 3915 , - 84 , - 2457 , - 5018 , - 1751 , - 4688 , - 1797 , - 5110 , - 2595 , - 268 , - 4145 , - 2194 , - 431 , - 4872 , - 3485 , - 2286 , - 1275 , - 452 , - 5833 , - 5386 , - 5127 , - 5056 , - 5173 , - 5478 , - 5971 , - 636 , - 1505 , - 2562 , - 3807 , - 5240 , - 845 , - 2654 , - 4651 , - 820 , - 3193 , - 5754 , - 2487 , - 5424 , - 2533 , - 5846 , - 3331 , - 1004 , - 4881 , - 2930 , - 1167 , - 5608 , - 4221 , - 3022 , - 2011 , - 1188 , - 553 , - 106 , - 5863 , - 5792 , - 5909 , - 198 , - 691 , - 1372 , - 2241 , - 3298 , - 4543 , - 5976 , - 1581 , - 3390 , - 5387 , - 1556 , - 3929 , - 474 , - 3223 , - 144 , - 3269 , - 566 , - 4067 , - 1740 , - 5617 , - 3666 , - 1903 , - 328 , - 4957 , - 3758 , - 2747 , - 1924 , - 1289 , - 842 , - 583 , - 512 , - 629 , - 934 , - 1427 , - 2108 , - 2977 , - 4034 , - 5279 , - 696 , - 2317 , - 4126 , - 107 , - 2292 , - 4665 , - 1210 , - 3959 , - 880 , - 4005 , - 1302 , - 4803 , - 2476 , - 337 , - 4402 , - 2639 , - 1064 , - 5693 , - 4494 , - 3483 , - 2660 , - 2025 , - 1578 , - 1319 , - 1248 , - 1365 , - 1670 , - 2163 , - 2844 , - 3713 , - 4770 , - 6015 , - 1432 , - 3053 , - 4862 , - 843 , - 3028 , - 5401 , - 1946 , - 4695 , - 1616 , - 4741 , - 2038 , - 5539 , - 3212 , - 1073 , - 5138 , - 3375 , - 1800 , - 413 , - 5230 , - 4219 , - 3396 , - 2761 , - 2314 , - 2055 , - 1984 , - 2101 , - 2406 , - 2899 , - 3580 , - 4449 , - 5506 , - 735 , - 2168 , - 3789 , - 5598 , - 1579 , - 3764 , - 121 , - 2682 , - 5431 , - 2352 , - 5477 , - 2774 , - 259 , - 3948 , - 1809 , - 5874 , - 4111 , - 2536 , - 1149 , - 5966 , - 4955 , - 4132 , - 3497 , - 3050 , - 2791 , - 2720 , - 2837 , - 3142 , - 3635 , - 4316 , - 5185 , - 226 , - 1471 , - 2904 , - 4525 , - 318 , - 2315 , - 4500 , - 857 , - 3418 , - 151 , - 3088 , - 197 , - 3510 , - 995 , - 4684 , - 2545 , - 594 , - 4847 , - 3272 , - 1885 , - 686 , - 5691 , - 4868 , - 4233 , - 3786 , - 3527 , - 3456 , - 3573 , - 3878 , - 4371 , - 5052 , - 5921 , - 962 , - 2207 , - 3640 , - 5261 , - 1054 , - 3051 , - 5236 , - 1593 , - 4154 , - 887 , - 3824 , - 933 , - 4246 , - 1731 , - 5420 , - 3281 , - 1330 , - 5583 , - 4008 , - 2621 , - 1422 , - 411 , - 5604 , - 4969 , - 4522 , - 4263 , - 4192 , - 4309 , - 4614 , - 5107 , - 5788 , - 641 , - 1698 , - 2943 , - 4376 , - 5997 , - 1790 , - 3787 , - 5972 , - 2329 , - 4890 , - 1623 , - 4560 , - 1669 , - 4982 , - 2467 , - 140 , - 4017 , - 2066 , - 303 , - 4744 , - 3357 , - 2158 , - 1147 , - 324 , - 5705 , - 5258 , - 4999 , - 4928 , - 5045 , - 5350 , - 5843 , - 508 , - 1377 , - 2434 , - 3679 , - 5112 , - 717 , - 2526 , - 4523 , - 692 , - 3065 , - 5626 , - 2359 , - 5296 , - 2405 , - 5718 , - 3203 , - 876 , - 4753 , - 2802 , - 1039 , - 5480 , - 4093 , - 2894 , - 1883 , - 1060 , - 425 , - 5994 , - 5735 , - 5664 , - 5781 , - 70 , - 563 , - 1244 , - 2113 , - 3170 , - 4415 , - 5848 , - 1453 , - 3262 , - 5259 , - 1428 , - 3801 , - 346 , - 3095 , - 16 , - 3141 , - 438 , - 3939 , - 1612 , - 5489 , - 3538 , - 1775 , - 200 , - 4829 , - 3630 , - 2619 , - 1796 , - 1161 , - 714 , - 455 , - 384 , - 501 , - 806 , - 1299 , - 1980 , - 2849 , - 3906 , - 5151 , - 568 , - 2189 , - 3998 , - 5995 , - 2164 , - 4537 , - 1082 , - 3831 , - 752 , - 3877 , - 1174 , - 4675 , - 2348 , - 209 , - 4274 , - 2511 , - 936 , - 5565 , - 4366 , - 3355 , - 2532 , - 1897 , - 1450 , - 1191 , - 1120 , - 1237 , - 1542 , - 2035 , - 2716 , - 3585 , - 4642 , - 5887 , - 1304 , - 2925 , - 4734 , - 715 , - 2900 , - 5273 , - 1818 , - 4567 , - 1488 , - 4613 , - 1910 , - 5411 , - 3084 , - 945 , - 5010 , - 3247 , - 1672 , - 285 , - 5102 , - 4091 , - 3268 , - 2633 , - 2186 , - 1927 , - 1856 , - 1973 , - 2278 , - 2771 , - 3452 , - 4321 , - 5378 , - 607 , - 2040 , - 3661 , - 5470 , - 1451 , - 3636 , - 6009 , - 2554 , - 5303 , - 2224 , - 5349 , - 2646 , - 131 , - 3820 , - 1681 , - 5746 , - 3983 , - 2408 , - 1021 , - 5838 , - 4827 , - 4004 , - 3369 , - 2922 , - 2663 , - 2592 , - 2709 , - 3014 , - 3507 , - 4188 , - 5057 , - 98 , - 1343 , - 2776 , - 4397 , - 190 , - 2187 , - 4372 , - 729 , - 3290 , - 23 , - 2960 , - 69 , - 3382 , - 867 , - 4556 , - 2417 , - 466 , - 4719 , - 3144 , - 1757 , - 558 , - 5563 , - 4740 , - 4105 , - 3658 , - 3399 , - 3328 , - 3445 , - 3750 , - 4243 , - 4924 , - 5793 , - 834 , - 2079 , - 3512 , - 5133 , - 926 , - 2923 , - 5108 , - 1465 , - 4026 , - 759 , - 3696 , - 805 , - 4118 , - 1603 , - 5292 , - 3153 , - 1202 , - 5455 , - 3880 , - 2493 , - 1294 , - 283 , - 5476 , - 4841 , - 4394 , - 4135 , - 4064 , - 4181 , - 4486 , - 4979 , - 5660 , - 513 , - 1570 , - 2815 , - 4248 , - 5869 , - 1662 , - 3659 , - 5844 , - 2201 , - 4762 , - 1495 , - 4432 , - 1541 , - 4854 , - 2339 , - 12 , - 3889 , - 1938 , - 175 , - 4616 , - 3229 , - 2030 , - 1019 , - 196 , - 5577 , - 5130 , - 4871 , - 4800 , - 4917 , - 5222 , - 5715 , - 380 , - 1249 , - 2306 , - 3551 , - 4984 , - 589 , - 2398 , - 4395 , - 564 , - 2937 , - 5498 , - 2231 , - 5168 , - 2277 , - 5590 , - 3075 , - 748 , - 4625 , - 2674 , - 911 , - 5352 , - 3965 , - 2766 , - 1755 , - 932 , - 297 , - 5866 , - 5607 , - 5536 , - 5653 , - 5958 , - 435 , - 1116 , - 1985 , - 3042 , - 4287 , - 5720 , - 1325 , - 3134 , - 5131 , - 1300 , - 3673 , - 218 , - 2967 , - 5904 , - 3013 , - 310 , - 3811 , - 1484 , - 5361 , - 3410 , - 1647 , - 72 , - 4701 , - 3502 , - 2491 , - 1668 , - 1033 , - 586 , - 327 , - 256 , - 373 , - 678 , - 1171 , - 1852 , - 2721 , - 3778 , - 5023 , - 440 , - 2061 , - 3870 , - 5867 , - 2036 , - 4409 , - 954 , - 3703 , - 624 , - 3749 , - 1046 , - 4547 , - 2220 , - 81 , - 4146 , - 2383 , - 808 , - 5437 , - 4238 , - 3227 , - 2404 , - 1769 , - 1322 , - 1063 , - 992 , - 1109 , - 1414 , - 1907 , - 2588 , - 3457 , - 4514 , - 5759 , - 1176 , - 2797 , - 4606 , - 587 , - 2772 , - 5145 , - 1690 , - 4439 , - 1360 , - 4485 , - 1782 , - 5283 , - 2956 , - 817 , - 4882 , - 3119 , - 1544 , - 157 , - 4974 , - 3963 , - 3140 , - 2505 , - 2058 , - 1799 , - 1728 , - 1845 , - 2150 , - 2643 , - 3324 , - 4193 , - 5250 , - 479 , - 1912 , - 3533 , - 5342 , - 1323 , - 3508 , - 5881 , - 2426 , - 5175 , - 2096 , - 5221 , - 2518 , - 3 , - 3692 , - 1553 , - 5618 , - 3855 , - 2280 , - 893 , - 5710 , - 4699 , - 3876 , - 3241 , - 2794 , - 2535 , - 2464 , - 2581 , - 2886 , - 3379 , - 4060 , - 4929 , - 5986 , - 1215 , - 2648 , - 4269 , - 62 , - 2059 , - 4244 , - 601 , - 3162 , - 5911 , - 2832 , - 5957 , - 3254 , - 739 , - 4428 , - 2289 , - 338 , - 4591 , - 3016 , - 1629 , - 430 , - 5435 , - 4612 , - 3977 , - 3530 , - 3271 , - 3200 , - 3317 , - 3622 , - 4115 , - 4796 , - 5665 , - 706 , - 1951 , - 3384 , - 5005 , - 798 , - 2795 , - 4980 , - 1337 , - 3898 , - 631 , - 3568 , - 677 , - 3990 , - 1475 , - 5164 , - 3025 , - 1074 , - 5327 , - 3752 , - 2365 , - 1166 , - 155 , - 5348 , - 4713 , - 4266 , - 4007 , - 3936 , - 4053 , - 4358 , - 4851 , - 5532 , - 385 , - 1442 , - 2687 , - 4120 , - 5741 , - 1534 , - 3531 , - 5716 , - 2073 , - 4634 , - 1367 , - 4304 , - 1413 , - 4726 , - 2211 , - 5900 , - 3761 , - 1810 , - 47 , - 4488 , - 3101 , - 1902 , - 891 , - 68 , - 5449 , - 5002 , - 4743 , - 4672 , - 4789 , - 5094 , - 5587 , - 252 , - 1121 , - 2178 , - 3423 , - 4856 , - 461 , - 2270 , - 4267 , - 436 , - 2809 , - 5370 , - 2103 , - 5040 , - 2149 , - 5462 , - 2947 , - 620 , - 4497 , - 2546 , - 783 , - 5224 , - 3837 , - 2638 , - 1627 , - 804 , - 169 , - 5738 , - 5479 , - 5408 , - 5525 , - 5830 , - 307 , - 988 , - 1857 , - 2914 , - 4159 , - 5592 , - 1197 , - 3006 , - 5003 , - 1172 , - 3545 , - 90 , - 2839 , - 5776 , - 2885 , - 182 , - 3683 , - 1356 , - 5233 , - 3282 , - 1519 , - 5960 , - 4573 , - 3374 , - 2363 , - 1540 , - 905 , - 458 , - 199 , - 128 , - 245 , - 550 , - 1043 , - 1724 , - 2593 , - 3650 , - 4895 , - 312 , - 1933 , - 3742 , - 5739 , - 1908 , - 4281 , - 826 , - 3575 , - 496 , - 3621 , - 918 , - 4419 , - 2092 , - 5969 , - 4018 , - 2255 , - 680 , - 5309 , - 4110 , - 3099 , - 2276 , - 1641 , - 1194 , - 935 , - 864 , - 981 , - 1286 , - 1779 , - 2460 , - 3329 , - 4386 , - 5631 , - 1048 , - 2669 , - 4478 , - 459 , - 2644 , - 5017 , - 1562 , - 4311 , - 1232 , - 4357 , - 1654 , - 5155 , - 2828 , - 689 , - 4754 , - 2991 , - 1416 , - 29 , - 4846 , - 3835 , - 3012 , - 2377 , - 1930 , - 1671 , - 1600 , - 1717 , - 2022 , - 2515 , - 3196 , - 4065 , - 5122 , - 351 , - 1784 , - 3405 , - 5214 , - 1195 , - 3380 , - 5753 , - 2298 , - 5047 , - 1968 , - 5093 , - 2390 , - 5891 , - 3564 , - 1425 , - 5490 , - 3727 , - 2152 , - 765 , - 5582 , - 4571 , - 3748 , - 3113 , - 2666 , - 2407 , - 2336 , - 2453 , - 2758 , - 3251 , - 3932 , - 4801 , - 5858 , - 1087 , - 2520 , - 4141 , - 5950 , - 1931 , - 4116 , - 473 , - 3034 , - 5783 , - 2704 , - 5829 , - 3126 , - 611 , - 4300 , - 2161 , - 210 , - 4463 , - 2888 , - 1501 , - 302 , - 5307 , - 4484 , - 3849 , - 3402 , - 3143 , - 3072 , - 3189 , - 3494 , - 3987 , - 4668 , - 5537 , - 578 , - 1823 , - 3256 , - 4877 , - 670 , - 2667 , - 4852 , - 1209 , - 3770 , - 503 , - 3440 , - 549 , - 3862 , - 1347 , - 5036 , - 2897 , - 946 , - 5199 , - 3624 , - 2237 , - 1038 , - 27 , - 5220 , - 4585 , - 4138 , - 3879 , - 3808 , - 3925 , - 4230 , - 4723 , - 5404 , - 257 , - 1314 , - 2559 , - 3992 , - 5613 , - 1406 , - 3403 , - 5588 , - 1945 , - 4506 , - 1239 , - 4176 , - 1285 , - 4598 , - 2083 , - 5772 , - 3633 , - 1682 , - 5935 , - 4360 , - 2973 , - 1774 , - 763 , - 5956 , - 5321 , - 4874 , - 4615 , - 4544 , - 4661 , - 4966 , - 5459 , - 124 , - 993 , - 2050 , - 3295 , - 4728 , - 333 , - 2142 , - 4139 , - 308 , - 2681 , - 5242 , - 1975 , - 4912 , - 2021 , - 5334 , - 2819 , - 492 , - 4369 , - 2418 , - 655 , - 5096 , - 3709 , - 2510 , - 1499 , - 676 , - 41 , - 5610 , - 5351 , - 5280 , - 5397 , - 5702 , - 179 , - 860 , - 1729 , - 2786 , - 4031 , - 5464 , - 1069 , - 2878 , - 4875 , - 1044 , - 3417 , - 5978 , - 2711 , - 5648 , - 2757 , - 54 , - 3555 , - 1228 , - 5105 , - 3154 , - 1391 , - 5832 , - 4445 , - 3246 , - 2235 , - 1412 , - 777 , - 330 , - 71 , - 0 , - 237 , - 854 , - 1851 , - 3228 , - 4985 , - 1042 , - 3559 , - 376 , - 3653 , - 1230 , - 5267 , - 3604 , - 2321 , - 1418 , - 895 , - 752 , - 989 , - 1606 , - 2603 , - 3980 , - 5737 , - 1794 , - 4311 , - 1128 , - 4405 , - 1982 , - 6019 , - 4356 , - 3073 , - 2170 , - 1647 , - 1504 , - 1741 , - 2358 , - 3355 , - 4732 , - 409 , - 2546 , - 5063 , - 1880 , - 5157 , - 2734 , - 691 , - 5108 , - 3825 , - 2922 , - 2399 , - 2256 , - 2493 , - 3110 , - 4107 , - 5484 , - 1161 , - 3298 , - 5815 , - 2632 , - 5909 , - 3486 , - 1443 , - 5860 , - 4577 , - 3674 , - 3151 , - 3008 , - 3245 , - 3862 , - 4859 , - 156 , - 1913 , - 4050 , - 487 , - 3384 , - 581 , - 4238 , - 2195 , - 532 , - 5329 , - 4426 , - 3903 , - 3760 , - 3997 , - 4614 , - 5611 , - 908 , - 2665 , - 4802 , - 1239 , - 4136 , - 1333 , - 4990 , - 2947 , - 1284 , - 1 , - 5178 , - 4655 , - 4512 , - 4749 , - 5366 , - 283 , - 1660 , - 3417 , - 5554 , - 1991 , - 4888 , - 2085 , - 5742 , - 3699 , - 2036 , - 753 , - 5930 , - 5407 , - 5264 , - 5501 , - 38 , - 1035 , - 2412 , - 4169 , - 226 , - 2743 , - 5640 , - 2837 , - 414 , - 4451 , - 2788 , - 1505 , - 602 , - 79 , - 6016 , - 173 , - 790 , - 1787 , - 3164 , - 4921 , - 978 , - 3495 , - 312 , - 3589 , - 1166 , - 5203 , - 3540 , - 2257 , - 1354 , - 831 , - 688 , - 925 , - 1542 , - 2539 , - 3916 , - 5673 , - 1730 , - 4247 , - 1064 , - 4341 , - 1918 , - 5955 , - 4292 , - 3009 , - 2106 , - 1583 , - 1440 , - 1677 , - 2294 , - 3291 , - 4668 , - 345 , - 2482 , - 4999 , - 1816 , - 5093 , - 2670 , - 627 , - 5044 , - 3761 , - 2858 , - 2335 , - 2192 , - 2429 , - 3046 , - 4043 , - 5420 , - 1097 , - 3234 , - 5751 , - 2568 , - 5845 , - 3422 , - 1379 , - 5796 , - 4513 , - 3610 , - 3087 , - 2944 , - 3181 , - 3798 , - 4795 , - 92 , - 1849 , - 3986 , - 423 , - 3320 , - 517 , - 4174 , - 2131 , - 468 , - 5265 , - 4362 , - 3839 , - 3696 , - 3933 , - 4550 , - 5547 , - 844 , - 2601 , - 4738 , - 1175 , - 4072 , - 1269 , - 4926 , - 2883 , - 1220 , - 6017 , - 5114 , - 4591 , - 4448 , - 4685 , - 5302 , - 219 , - 1596 , - 3353 , - 5490 , - 1927 , - 4824 , - 2021 , - 5678 , - 3635 , - 1972 , - 689 , - 5866 , - 5343 , - 5200 , - 5437 , - 6054 , - 971 , - 2348 , - 4105 , - 162 , - 2679 , - 5576 , - 2773 , - 350 , - 4387 , - 2724 , - 1441 , - 538 , - 15 , - 5952 , - 109 , - 726 , - 1723 , - 3100 , - 4857 , - 914 , - 3431 , - 248 , - 3525 , - 1102 , - 5139 , - 3476 , - 2193 , - 1290 , - 767 , - 624 , - 861 , - 1478 , - 2475 , - 3852 , - 5609 , - 1666 , - 4183 , - 1000 , - 4277 , - 1854 , - 5891 , - 4228 , - 2945 , - 2042 , - 1519 , - 1376 , - 1613 , - 2230 , - 3227 , - 4604 , - 281 , - 2418 , - 4935 , - 1752 , - 5029 , - 2606 , - 563 , - 4980 , - 3697 , - 2794 , - 2271 , - 2128 , - 2365 , - 2982 , - 3979 , - 5356 , - 1033 , - 3170 , - 5687 , - 2504 , - 5781 , - 3358 , - 1315 , - 5732 , - 4449 , - 3546 , - 3023 , - 2880 , - 3117 , - 3734 , - 4731 , - 28 , - 1785 , - 3922 , - 359 , - 3256 , - 453 , - 4110 , - 2067 , - 404 , - 5201 , - 4298 , - 3775 , - 3632 , - 3869 , - 4486 , - 5483 , - 780 , - 2537 , - 4674 , - 1111 , - 4008 , - 1205 , - 4862 , - 2819 , - 1156 , - 5953 , - 5050 , - 4527 , - 4384 , - 4621 , - 5238 , - 155 , - 1532 , - 3289 , - 5426 , - 1863 , - 4760 , - 1957 , - 5614 , - 3571 , - 1908 , - 625 , - 5802 , - 5279 , - 5136 , - 5373 , - 5990 , - 907 , - 2284 , - 4041 , - 98 , - 2615 , - 5512 , - 2709 , - 286 , - 4323 , - 2660 , - 1377 , - 474 , - 6031 , - 5888 , - 45 , - 662 , - 1659 , - 3036 , - 4793 , - 850 , - 3367 , - 184 , - 3461 , - 1038 , - 5075 , - 3412 , - 2129 , - 1226 , - 703 , - 560 , - 797 , - 1414 , - 2411 , - 3788 , - 5545 , - 1602 , - 4119 , - 936 , - 4213 , - 1790 , - 5827 , - 4164 , - 2881 , - 1978 , - 1455 , - 1312 , - 1549 , - 2166 , - 3163 , - 4540 , - 217 , - 2354 , - 4871 , - 1688 , - 4965 , - 2542 , - 499 , - 4916 , - 3633 , - 2730 , - 2207 , - 2064 , - 2301 , - 2918 , - 3915 , - 5292 , - 969 , - 3106 , - 5623 , - 2440 , - 5717 , - 3294 , - 1251 , - 5668 , - 4385 , - 3482 , - 2959 , - 2816 , - 3053 , - 3670 , - 4667 , - 6044 , - 1721 , - 3858 , - 295 , - 3192 , - 389 , - 4046 , - 2003 , - 340 , - 5137 , - 4234 , - 3711 , - 3568 , - 3805 , - 4422 , - 5419 , - 716 , - 2473 , - 4610 , - 1047 , - 3944 , - 1141 , - 4798 , - 2755 , - 1092 , - 5889 , - 4986 , - 4463 , - 4320 , - 4557 , - 5174 , - 91 , - 1468 , - 3225 , - 5362 , - 1799 , - 4696 , - 1893 , - 5550 , - 3507 , - 1844 , - 561 , - 5738 , - 5215 , - 5072 , - 5309 , - 5926 , - 843 , - 2220 , - 3977 , - 34 , - 2551 , - 5448 , - 2645 , - 222 , - 4259 , - 2596 , - 1313 , - 410 , - 5967 , - 5824 , - 6061 , - 598 , - 1595 , - 2972 , - 4729 , - 786 , - 3303 , - 120 , - 3397 , - 974 , - 5011 , - 3348 , - 2065 , - 1162 , - 639 , - 496 , - 733 , - 1350 , - 2347 , - 3724 , - 5481 , - 1538 , - 4055 , - 872 , - 4149 , - 1726 , - 5763 , - 4100 , - 2817 , - 1914 , - 1391 , - 1248 , - 1485 , - 2102 , - 3099 , - 4476 , - 153 , - 2290 , - 4807 , - 1624 , - 4901 , - 2478 , - 435 , - 4852 , - 3569 , - 2666 , - 2143 , - 2000 , - 2237 , - 2854 , - 3851 , - 5228 , - 905 , - 3042 , - 5559 , - 2376 , - 5653 , - 3230 , - 1187 , - 5604 , - 4321 , - 3418 , - 2895 , - 2752 , - 2989 , - 3606 , - 4603 , - 5980 , - 1657 , - 3794 , - 231 , - 3128 , - 325 , - 3982 , - 1939 , - 276 , - 5073 , - 4170 , - 3647 , - 3504 , - 3741 , - 4358 , - 5355 , - 652 , - 2409 , - 4546 , - 983 , - 3880 , - 1077 , - 4734 , - 2691 , - 1028 , - 5825 , - 4922 , - 4399 , - 4256 , - 4493 , - 5110 , - 27 , - 1404 , - 3161 , - 5298 , - 1735 , - 4632 , - 1829 , - 5486 , - 3443 , - 1780 , - 497 , - 5674 , - 5151 , - 5008 , - 5245 , - 5862 , - 779 , - 2156 , - 3913 , - 6050 , - 2487 , - 5384 , - 2581 , - 158 , - 4195 , - 2532 , - 1249 , - 346 , - 5903 , - 5760 , - 5997 , - 534 , - 1531 , - 2908 , - 4665 , - 722 , - 3239 , - 56 , - 3333 , - 910 , - 4947 , - 3284 , - 2001 , - 1098 , - 575 , - 432 , - 669 , - 1286 , - 2283 , - 3660 , - 5417 , - 1474 , - 3991 , - 808 , - 4085 , - 1662 , - 5699 , - 4036 , - 2753 , - 1850 , - 1327 , - 1184 , - 1421 , - 2038 , - 3035 , - 4412 , - 89 , - 2226 , - 4743 , - 1560 , - 4837 , - 2414 , - 371 , - 4788 , - 3505 , - 2602 , - 2079 , - 1936 , - 2173 , - 2790 , - 3787 , - 5164 , - 841 , - 2978 , - 5495 , - 2312 , - 5589 , - 3166 , - 1123 , - 5540 , - 4257 , - 3354 , - 2831 , - 2688 , - 2925 , - 3542 , - 4539 , - 5916 , - 1593 , - 3730 , - 167 , - 3064 , - 261 , - 3918 , - 1875 , - 212 , - 5009 , - 4106 , - 3583 , - 3440 , - 3677 , - 4294 , - 5291 , - 588 , - 2345 , - 4482 , - 919 , - 3816 , - 1013 , - 4670 , - 2627 , - 964 , - 5761 , - 4858 , - 4335 , - 4192 , - 4429 , - 5046 , - 6043 , - 1340 , - 3097 , - 5234 , - 1671 , - 4568 , - 1765 , - 5422 , - 3379 , - 1716 , - 433 , - 5610 , - 5087 , - 4944 , - 5181 , - 5798 , - 715 , - 2092 , - 3849 , - 5986 , - 2423 , - 5320 , - 2517 , - 94 , - 4131 , - 2468 , - 1185 , - 282 , - 5839 , - 5696 , - 5933 , - 470 , - 1467 , - 2844 , - 4601 , - 658 , - 3175 , - 6072 , - 3269 , - 846 , - 4883 , - 3220 , - 1937 , - 1034 , - 511 , - 368 , - 605 , - 1222 , - 2219 , - 3596 , - 5353 , - 1410 , - 3927 , - 744 , - 4021 , - 1598 , - 5635 , - 3972 , - 2689 , - 1786 , - 1263 , - 1120 , - 1357 , - 1974 , - 2971 , - 4348 , - 25 , - 2162 , - 4679 , - 1496 , - 4773 , - 2350 , - 307 , - 4724 , - 3441 , - 2538 , - 2015 , - 1872 , - 2109 , - 2726 , - 3723 , - 5100 , - 777 , - 2914 , - 5431 , - 2248 , - 5525 , - 3102 , - 1059 , - 5476 , - 4193 , - 3290 , - 2767 , - 2624 , - 2861 , - 3478 , - 4475 , - 5852 , - 1529 , - 3666 , - 103 , - 3000 , - 197 , - 3854 , - 1811 , - 148 , - 4945 , - 4042 , - 3519 , - 3376 , - 3613 , - 4230 , - 5227 , - 524 , - 2281 , - 4418 , - 855 , - 3752 , - 949 , - 4606 , - 2563 , - 900 , - 5697 , - 4794 , - 4271 , - 4128 , - 4365 , - 4982 , - 5979 , - 1276 , - 3033 , - 5170 , - 1607 , - 4504 , - 1701 , - 5358 , - 3315 , - 1652 , - 369 , - 5546 , - 5023 , - 4880 , - 5117 , - 5734 , - 651 , - 2028 , - 3785 , - 5922 , - 2359 , - 5256 , - 2453 , - 30 , - 4067 , - 2404 , - 1121 , - 218 , - 5775 , - 5632 , - 5869 , - 406 , - 1403 , - 2780 , - 4537 , - 594 , - 3111 , - 6008 , - 3205 , - 782 , - 4819 , - 3156 , - 1873 , - 970 , - 447 , - 304 , - 541 , - 1158 , - 2155 , - 3532 , - 5289 , - 1346 , - 3863 , - 680 , - 3957 , - 1534 , - 5571 , - 3908 , - 2625 , - 1722 , - 1199 , - 1056 , - 1293 , - 1910 , - 2907 , - 4284 , - 6041 , - 2098 , - 4615 , - 1432 , - 4709 , - 2286 , - 243 , - 4660 , - 3377 , - 2474 , - 1951 , - 1808 , - 2045 , - 2662 , - 3659 , - 5036 , - 713 , - 2850 , - 5367 , - 2184 , - 5461 , - 3038 , - 995 , - 5412 , - 4129 , - 3226 , - 2703 , - 2560 , - 2797 , - 3414 , - 4411 , - 5788 , - 1465 , - 3602 , - 39 , - 2936 , - 133 , - 3790 , - 1747 , - 84 , - 4881 , - 3978 , - 3455 , - 3312 , - 3549 , - 4166 , - 5163 , - 460 , - 2217 , - 4354 , - 791 , - 3688 , - 885 , - 4542 , - 2499 , - 836 , - 5633 , - 4730 , - 4207 , - 4064 , - 4301 , - 4918 , - 5915 , - 1212 , - 2969 , - 5106 , - 1543 , - 4440 , - 1637 , - 5294 , - 3251 , - 1588 , - 305 , - 5482 , - 4959 , - 4816 , - 5053 , - 5670 , - 587 , - 1964 , - 3721 , - 5858 , - 2295 , - 5192 , - 2389 , - 6046 , - 4003 , - 2340 , - 1057 , - 154 , - 5711 , - 5568 , - 5805 , - 342 , - 1339 , - 2716 , - 4473 , - 530 , - 3047 , - 5944 , - 3141 , - 718 , - 4755 , - 3092 , - 1809 , - 906 , - 383 , - 240 , - 477 , - 1094 , - 2091 , - 3468 , - 5225 , - 1282 , - 3799 , - 616 , - 3893 , - 1470 , - 5507 , - 3844 , - 2561 , - 1658 , - 1135 , - 992 , - 1229 , - 1846 , - 2843 , - 4220 , - 5977 , - 2034 , - 4551 , - 1368 , - 4645 , - 2222 , - 179 , - 4596 , - 3313 , - 2410 , - 1887 , - 1744 , - 1981 , - 2598 , - 3595 , - 4972 , - 649 , - 2786 , - 5303 , - 2120 , - 5397 , - 2974 , - 931 , - 5348 , - 4065 , - 3162 , - 2639 , - 2496 , - 2733 , - 3350 , - 4347 , - 5724 , - 1401 , - 3538 , - 6055 , - 2872 , - 69 , - 3726 , - 1683 , - 20 , - 4817 , - 3914 , - 3391 , - 3248 , - 3485 , - 4102 , - 5099 , - 396 , - 2153 , - 4290 , - 727 , - 3624 , - 821 , - 4478 , - 2435 , - 772 , - 5569 , - 4666 , - 4143 , - 4000 , - 4237 , - 4854 , - 5851 , - 1148 , - 2905 , - 5042 , - 1479 , - 4376 , - 1573 , - 5230 , - 3187 , - 1524 , - 241 , - 5418 , - 4895 , - 4752 , - 4989 , - 5606 , - 523 , - 1900 , - 3657 , - 5794 , - 2231 , - 5128 , - 2325 , - 5982 , - 3939 , - 2276 , - 993 , - 90 , - 5647 , - 5504 , - 5741 , - 278 , - 1275 , - 2652 , - 4409 , - 466 , - 2983 , - 5880 , - 3077 , - 654 , - 4691 , - 3028 , - 1745 , - 842 , - 319 , - 176 , - 413 , - 1030 , - 2027 , - 3404 , - 5161 , - 1218 , - 3735 , - 552 , - 3829 , - 1406 , - 5443 , - 3780 , - 2497 , - 1594 , - 1071 , - 928 , - 1165 , - 1782 , - 2779 , - 4156 , - 5913 , - 1970 , - 4487 , - 1304 , - 4581 , - 2158 , - 115 , - 4532 , - 3249 , - 2346 , - 1823 , - 1680 , - 1917 , - 2534 , - 3531 , - 4908 , - 585 , - 2722 , - 5239 , - 2056 , - 5333 , - 2910 , - 867 , - 5284 , - 4001 , - 3098 , - 2575 , - 2432 , - 2669 , - 3286 , - 4283 , - 5660 , - 1337 , - 3474 , - 5991 , - 2808 , - 5 , - 3662 , - 1619 , - 6036 , - 4753 , - 3850 , - 3327 , - 3184 , - 3421 , - 4038 , - 5035 , - 332 , - 2089 , - 4226 , - 663 , - 3560 , - 757 , - 4414 , - 2371 , - 708 , - 5505 , - 4602 , - 4079 , - 3936 , - 4173 , - 4790 , - 5787 , - 1084 , - 2841 , - 4978 , - 1415 , - 4312 , - 1509 , - 5166 , - 3123 , - 1460 , - 177 , - 5354 , - 4831 , - 4688 , - 4925 , - 5542 , - 459 , - 1836 , - 3593 , - 5730 , - 2167 , - 5064 , - 2261 , - 5918 , - 3875 , - 2212 , - 929 , - 26 , - 5583 , - 5440 , - 5677 , - 214 , - 1211 , - 2588 , - 4345 , - 402 , - 2919 , - 5816 , - 3013 , - 590 , - 4627 , - 2964 , - 1681 , - 778 , - 255 , - 112 , - 349 , - 966 , - 1963 , - 3340 , - 5097 , - 1154 , - 3671 , - 488 , - 3765 , - 1342 , - 5379 , - 3716 , - 2433 , - 1530 , - 1007 , - 864 , - 1101 , - 1718 , - 2715 , - 4092 , - 5849 , - 1906 , - 4423 , - 1240 , - 4517 , - 2094 , - 51 , - 4468 , - 3185 , - 2282 , - 1759 , - 1616 , - 1853 , - 2470 , - 3467 , - 4844 , - 521 , - 2658 , - 5175 , - 1992 , - 5269 , - 2846 , - 803 , - 5220 , - 3937 , - 3034 , - 2511 , - 2368 , - 2605 , - 3222 , - 4219 , - 5596 , - 1273 , - 3410 , - 5927 , - 2744 , - 6021 , - 3598 , - 1555 , - 5972 , - 4689 , - 3786 , - 3263 , - 3120 , - 3357 , - 3974 , - 4971 , - 268 , - 2025 , - 4162 , - 599 , - 3496 , - 693 , - 4350 , - 2307 , - 644 , - 5441 , - 4538 , - 4015 , - 3872 , - 4109 , - 4726 , - 5723 , - 1020 , - 2777 , - 4914 , - 1351 , - 4248 , - 1445 , - 5102 , - 3059 , - 1396 , - 113 , - 5290 , - 4767 , - 4624 , - 4861 , - 5478 , - 395 , - 1772 , - 3529 , - 5666 , - 2103 , - 5000 , - 2197 , - 5854 , - 3811 , - 2148 , - 865 , - 6042 , - 5519 , - 5376 , - 5613 , - 150 , - 1147 , - 2524 , - 4281 , - 338 , - 2855 , - 5752 , - 2949 , - 526 , - 4563 , - 2900 , - 1617 , - 714 , - 191 , - 48 , - 285 , - 902 , - 1899 , - 3276 , - 5033 , - 1090 , - 3607 , - 424 , - 3701 , - 1278 , - 5315 , - 3652 , - 2369 , - 1466 , - 943 , - 800 , - 1037 , - 1654 , - 2651 , - 4028 , - 5785 , - 1842 , - 4359 , - 1176 , - 4453 , - 2030 , - 6067 , - 4404 , - 3121 , - 2218 , - 1695 , - 1552 , - 1789 , - 2406 , - 3403 , - 4780 , - 457 , - 2594 , - 5111 , - 1928 , - 5205 , - 2782 , - 739 , - 5156 , - 3873 , - 2970 , - 2447 , - 2304 , - 2541 , - 3158 , - 4155 , - 5532 , - 1209 , - 3346 , - 5863 , - 2680 , - 5957 , - 3534 , - 1491 , - 5908 , - 4625 , - 3722 , - 3199 , - 3056 , - 3293 , - 3910 , - 4907 , - 204 , - 1961 , - 4098 , - 535 , - 3432 , - 629 , - 4286 , - 2243 , - 580 , - 5377 , - 4474 , - 3951 , - 3808 , - 4045 , - 4662 , - 5659 , - 956 , - 2713 , - 4850 , - 1287 , - 4184 , - 1381 , - 5038 , - 2995 , - 1332 , - 49 , - 5226 , - 4703 , - 4560 , - 4797 , - 5414 , - 331 , - 1708 , - 3465 , - 5602 , - 2039 , - 4936 , - 2133 , - 5790 , - 3747 , - 2084 , - 801 , - 5978 , - 5455 , - 5312 , - 5549 , - 86 , - 1083 , - 2460 , - 4217 , - 274 , - 2791 , - 5688 , - 2885 , - 462 , - 4499 , - 2836 , - 1553 , - 650 , - 127 , - 6064 , - 221 , - 838 , - 1835 , - 3212 , - 4969 , - 1026 , - 3543 , - 360 , - 3637 , - 1214 , - 5251 , - 3588 , - 2305 , - 1402 , - 879 , - 736 , - 973 , - 1590 , - 2587 , - 3964 , - 5721 , - 1778 , - 4295 , - 1112 , - 4389 , - 1966 , - 6003 , - 4340 , - 3057 , - 2154 , - 1631 , - 1488 , - 1725 , - 2342 , - 3339 , - 4716 , - 393 , - 2530 , - 5047 , - 1864 , - 5141 , - 2718 , - 675 , - 5092 , - 3809 , - 2906 , - 2383 , - 2240 , - 2477 , - 3094 , - 4091 , - 5468 , - 1145 , - 3282 , - 5799 , - 2616 , - 5893 , - 3470 , - 1427 , - 5844 , - 4561 , - 3658 , - 3135 , - 2992 , - 3229 , - 3846 , - 4843 , - 140 , - 1897 , - 4034 , - 471 , - 3368 , - 565 , - 4222 , - 2179 , - 516 , - 5313 , - 4410 , - 3887 , - 3744 , - 3981 , - 4598 , - 5595 , - 892 , - 2649 , - 4786 , - 1223 , - 4120 , - 1317 , - 4974 , - 2931 , - 1268 , - 6065 , - 5162 , - 4639 , - 4496 , - 4733 , - 5350 , - 267 , - 1644 , - 3401 , - 5538 , - 1975 , - 4872 , - 2069 , - 5726 , - 3683 , - 2020 , - 737 , - 5914 , - 5391 , - 5248 , - 5485 , - 22 , - 1019 , - 2396 , - 4153 , - 210 , - 2727 , - 5624 , - 2821 , - 398 , - 4435 , - 2772 , - 1489 , - 586 , - 63 , - 6000 , - 157 , - 774 , - 1771 , - 3148 , - 4905 , - 962 , - 3479 , - 296 , - 3573 , - 1150 , - 5187 , - 3524 , - 2241 , - 1338 , - 815 , - 672 , - 909 , - 1526 , - 2523 , - 3900 , - 5657 , - 1714 , - 4231 , - 1048 , - 4325 , - 1902 , - 5939 , - 4276 , - 2993 , - 2090 , - 1567 , - 1424 , - 1661 , - 2278 , - 3275 , - 4652 , - 329 , - 2466 , - 4983 , - 1800 , - 5077 , - 2654 , - 611 , - 5028 , - 3745 , - 2842 , - 2319 , - 2176 , - 2413 , - 3030 , - 4027 , - 5404 , - 1081 , - 3218 , - 5735 , - 2552 , - 5829 , - 3406 , - 1363 , - 5780 , - 4497 , - 3594 , - 3071 , - 2928 , - 3165 , - 3782 , - 4779 , - 76 , - 1833 , - 3970 , - 407 , - 3304 , - 501 , - 4158 , - 2115 , - 452 , - 5249 , - 4346 , - 3823 , - 3680 , - 3917 , - 4534 , - 5531 , - 828 , - 2585 , - 4722 , - 1159 , - 4056 , - 1253 , - 4910 , - 2867 , - 1204 , - 6001 , - 5098 , - 4575 , - 4432 , - 4669 , - 5286 , - 203 , - 1580 , - 3337 , - 5474 , - 1911 , - 4808 , - 2005 , - 5662 , - 3619 , - 1956 , - 673 , - 5850 , - 5327 , - 5184 , - 5421 , - 6038 , - 955 , - 2332 , - 4089 , - 146 , - 2663 , - 5560 , - 2757 , - 334 , - 4371 , - 2708 , - 1425 , - 522 , - 6079 , - 5936 , - 93 , - 710 , - 1707 , - 3084 , - 4841 , - 898 , - 3415 , - 232 , - 3509 , - 1086 , - 5123 , - 3460 , - 2177 , - 1274 , - 751 , - 608 , - 845 , - 1462 , - 2459 , - 3836 , - 5593 , - 1650 , - 4167 , - 984 , - 4261 , - 1838 , - 5875 , - 4212 , - 2929 , - 2026 , - 1503 , - 1360 , - 1597 , - 2214 , - 3211 , - 4588 , - 265 , - 2402 , - 4919 , - 1736 , - 5013 , - 2590 , - 547 , - 4964 , - 3681 , - 2778 , - 2255 , - 2112 , - 2349 , - 2966 , - 3963 , - 5340 , - 1017 , - 3154 , - 5671 , - 2488 , - 5765 , - 3342 , - 1299 , - 5716 , - 4433 , - 3530 , - 3007 , - 2864 , - 3101 , - 3718 , - 4715 , - 12 , - 1769 , - 3906 , - 343 , - 3240 , - 437 , - 4094 , - 2051 , - 388 , - 5185 , - 4282 , - 3759 , - 3616 , - 3853 , - 4470 , - 5467 , - 764 , - 2521 , - 4658 , - 1095 , - 3992 , - 1189 , - 4846 , - 2803 , - 1140 , - 5937 , - 5034 , - 4511 , - 4368 , - 4605 , - 5222 , - 139 , - 1516 , - 3273 , - 5410 , - 1847 , - 4744 , - 1941 , - 5598 , - 3555 , - 1892 , - 609 , - 5786 , - 5263 , - 5120 , - 5357 , - 5974 , - 891 , - 2268 , - 4025 , - 82 , - 2599 , - 5496 , - 2693 , - 270 , - 4307 , - 2644 , - 1361 , - 458 , - 6015 , - 5872 , - 29 , - 646 , - 1643 , - 3020 , - 4777 , - 834 , - 3351 , - 168 , - 3445 , - 1022 , - 5059 , - 3396 , - 2113 , - 1210 , - 687 , - 544 , - 781 , - 1398 , - 2395 , - 3772 , - 5529 , - 1586 , - 4103 , - 920 , - 4197 , - 1774 , - 5811 , - 4148 , - 2865 , - 1962 , - 1439 , - 1296 , - 1533 , - 2150 , - 3147 , - 4524 , - 201 , - 2338 , - 4855 , - 1672 , - 4949 , - 2526 , - 483 , - 4900 , - 3617 , - 2714 , - 2191 , - 2048 , - 2285 , - 2902 , - 3899 , - 5276 , - 953 , - 3090 , - 5607 , - 2424 , - 5701 , - 3278 , - 1235 , - 5652 , - 4369 , - 3466 , - 2943 , - 2800 , - 3037 , - 3654 , - 4651 , - 6028 , - 1705 , - 3842 , - 279 , - 3176 , - 373 , - 4030 , - 1987 , - 324 , - 5121 , - 4218 , - 3695 , - 3552 , - 3789 , - 4406 , - 5403 , - 700 , - 2457 , - 4594 , - 1031 , - 3928 , - 1125 , - 4782 , - 2739 , - 1076 , - 5873 , - 4970 , - 4447 , - 4304 , - 4541 , - 5158 , - 75 , - 1452 , - 3209 , - 5346 , - 1783 , - 4680 , - 1877 , - 5534 , - 3491 , - 1828 , - 545 , - 5722 , - 5199 , - 5056 , - 5293 , - 5910 , - 827 , - 2204 , - 3961 , - 18 , - 2535 , - 5432 , - 2629 , - 206 , - 4243 , - 2580 , - 1297 , - 394 , - 5951 , - 5808 , - 6045 , - 582 , - 1579 , - 2956 , - 4713 , - 770 , - 3287 , - 104 , - 3381 , - 958 , - 4995 , - 3332 , - 2049 , - 1146 , - 623 , - 480 , - 717 , - 1334 , - 2331 , - 3708 , - 5465 , - 1522 , - 4039 , - 856 , - 4133 , - 1710 , - 5747 , - 4084 , - 2801 , - 1898 , - 1375 , - 1232 , - 1469 , - 2086 , - 3083 , - 4460 , - 137 , - 2274 , - 4791 , - 1608 , - 4885 , - 2462 , - 419 , - 4836 , - 3553 , - 2650 , - 2127 , - 1984 , - 2221 , - 2838 , - 3835 , - 5212 , - 889 , - 3026 , - 5543 , - 2360 , - 5637 , - 3214 , - 1171 , - 5588 , - 4305 , - 3402 , - 2879 , - 2736 , - 2973 , - 3590 , - 4587 , - 5964 , - 1641 , - 3778 , - 215 , - 3112 , - 309 , - 3966 , - 1923 , - 260 , - 5057 , - 4154 , - 3631 , - 3488 , - 3725 , - 4342 , - 5339 , - 636 , - 2393 , - 4530 , - 967 , - 3864 , - 1061 , - 4718 , - 2675 , - 1012 , - 5809 , - 4906 , - 4383 , - 4240 , - 4477 , - 5094 , - 11 , - 1388 , - 3145 , - 5282 , - 1719 , - 4616 , - 1813 , - 5470 , - 3427 , - 1764 , - 481 , - 5658 , - 5135 , - 4992 , - 5229 , - 5846 , - 763 , - 2140 , - 3897 , - 6034 , - 2471 , - 5368 , - 2565 , - 142 , - 4179 , - 2516 , - 1233 , - 330 , - 5887 , - 5744 , - 5981 , - 518 , - 1515 , - 2892 , - 4649 , - 706 , - 3223 , - 40 , - 3317 , - 894 , - 4931 , - 3268 , - 1985 , - 1082 , - 559 , - 416 , - 653 , - 1270 , - 2267 , - 3644 , - 5401 , - 1458 , - 3975 , - 792 , - 4069 , - 1646 , - 5683 , - 4020 , - 2737 , - 1834 , - 1311 , - 1168 , - 1405 , - 2022 , - 3019 , - 4396 , - 73 , - 2210 , - 4727 , - 1544 , - 4821 , - 2398 , - 355 , - 4772 , - 3489 , - 2586 , - 2063 , - 1920 , - 2157 , - 2774 , - 3771 , - 5148 , - 825 , - 2962 , - 5479 , - 2296 , - 5573 , - 3150 , - 1107 , - 5524 , - 4241 , - 3338 , - 2815 , - 2672 , - 2909 , - 3526 , - 4523 , - 5900 , - 1577 , - 3714 , - 151 , - 3048 , - 245 , - 3902 , - 1859 , - 196 , - 4993 , - 4090 , - 3567 , - 3424 , - 3661 , - 4278 , - 5275 , - 572 , - 2329 , - 4466 , - 903 , - 3800 , - 997 , - 4654 , - 2611 , - 948 , - 5745 , - 4842 , - 4319 , - 4176 , - 4413 , - 5030 , - 6027 , - 1324 , - 3081 , - 5218 , - 1655 , - 4552 , - 1749 , - 5406 , - 3363 , - 1700 , - 417 , - 5594 , - 5071 , - 4928 , - 5165 , - 5782 , - 699 , - 2076 , - 3833 , - 5970 , - 2407 , - 5304 , - 2501 , - 78 , - 4115 , - 2452 , - 1169 , - 266 , - 5823 , - 5680 , - 5917 , - 454 , - 1451 , - 2828 , - 4585 , - 642 , - 3159 , - 6056 , - 3253 , - 830 , - 4867 , - 3204 , - 1921 , - 1018 , - 495 , - 352 , - 589 , - 1206 , - 2203 , - 3580 , - 5337 , - 1394 , - 3911 , - 728 , - 4005 , - 1582 , - 5619 , - 3956 , - 2673 , - 1770 , - 1247 , - 1104 , - 1341 , - 1958 , - 2955 , - 4332 , - 9 , - 2146 , - 4663 , - 1480 , - 4757 , - 2334 , - 291 , - 4708 , - 3425 , - 2522 , - 1999 , - 1856 , - 2093 , - 2710 , - 3707 , - 5084 , - 761 , - 2898 , - 5415 , - 2232 , - 5509 , - 3086 , - 1043 , - 5460 , - 4177 , - 3274 , - 2751 , - 2608 , - 2845 , - 3462 , - 4459 , - 5836 , - 1513 , - 3650 , - 87 , - 2984 , - 181 , - 3838 , - 1795 , - 132 , - 4929 , - 4026 , - 3503 , - 3360 , - 3597 , - 4214 , - 5211 , - 508 , - 2265 , - 4402 , - 839 , - 3736 , - 933 , - 4590 , - 2547 , - 884 , - 5681 , - 4778 , - 4255 , - 4112 , - 4349 , - 4966 , - 5963 , - 1260 , - 3017 , - 5154 , - 1591 , - 4488 , - 1685 , - 5342 , - 3299 , - 1636 , - 353 , - 5530 , - 5007 , - 4864 , - 5101 , - 5718 , - 635 , - 2012 , - 3769 , - 5906 , - 2343 , - 5240 , - 2437 , - 14 , - 4051 , - 2388 , - 1105 , - 202 , - 5759 , - 5616 , - 5853 , - 390 , - 1387 , - 2764 , - 4521 , - 578 , - 3095 , - 5992 , - 3189 , - 766 , - 4803 , - 3140 , - 1857 , - 954 , - 431 , - 288 , - 525 , - 1142 , - 2139 , - 3516 , - 5273 , - 1330 , - 3847 , - 664 , - 3941 , - 1518 , - 5555 , - 3892 , - 2609 , - 1706 , - 1183 , - 1040 , - 1277 , - 1894 , - 2891 , - 4268 , - 6025 , - 2082 , - 4599 , - 1416 , - 4693 , - 2270 , - 227 , - 4644 , - 3361 , - 2458 , - 1935 , - 1792 , - 2029 , - 2646 , - 3643 , - 5020 , - 697 , - 2834 , - 5351 , - 2168 , - 5445 , - 3022 , - 979 , - 5396 , - 4113 , - 3210 , - 2687 , - 2544 , - 2781 , - 3398 , - 4395 , - 5772 , - 1449 , - 3586 , - 23 , - 2920 , - 117 , - 3774 , - 1731 , - 68 , - 4865 , - 3962 , - 3439 , - 3296 , - 3533 , - 4150 , - 5147 , - 444 , - 2201 , - 4338 , - 775 , - 3672 , - 869 , - 4526 , - 2483 , - 820 , - 5617 , - 4714 , - 4191 , - 4048 , - 4285 , - 4902 , - 5899 , - 1196 , - 2953 , - 5090 , - 1527 , - 4424 , - 1621 , - 5278 , - 3235 , - 1572 , - 289 , - 5466 , - 4943 , - 4800 , - 5037 , - 5654 , - 571 , - 1948 , - 3705 , - 5842 , - 2279 , - 5176 , - 2373 , - 6030 , - 3987 , - 2324 , - 1041 , - 138 , - 5695 , - 5552 , - 5789 , - 326 , - 1323 , - 2700 , - 4457 , - 514 , - 3031 , - 5928 , - 3125 , - 702 , - 4739 , - 3076 , - 1793 , - 890 , - 367 , - 224 , - 461 , - 1078 , - 2075 , - 3452 , - 5209 , - 1266 , - 3783 , - 600 , - 3877 , - 1454 , - 5491 , - 3828 , - 2545 , - 1642 , - 1119 , - 976 , - 1213 , - 1830 , - 2827 , - 4204 , - 5961 , - 2018 , - 4535 , - 1352 , - 4629 , - 2206 , - 163 , - 4580 , - 3297 , - 2394 , - 1871 , - 1728 , - 1965 , - 2582 , - 3579 , - 4956 , - 633 , - 2770 , - 5287 , - 2104 , - 5381 , - 2958 , - 915 , - 5332 , - 4049 , - 3146 , - 2623 , - 2480 , - 2717 , - 3334 , - 4331 , - 5708 , - 1385 , - 3522 , - 6039 , - 2856 , - 53 , - 3710 , - 1667 , - 4 , - 4801 , - 3898 , - 3375 , - 3232 , - 3469 , - 4086 , - 5083 , - 380 , - 2137 , - 4274 , - 711 , - 3608 , - 805 , - 4462 , - 2419 , - 756 , - 5553 , - 4650 , - 4127 , - 3984 , - 4221 , - 4838 , - 5835 , - 1132 , - 2889 , - 5026 , - 1463 , - 4360 , - 1557 , - 5214 , - 3171 , - 1508 , - 225 , - 5402 , - 4879 , - 4736 , - 4973 , - 5590 , - 507 , - 1884 , - 3641 , - 5778 , - 2215 , - 5112 , - 2309 , - 5966 , - 3923 , - 2260 , - 977 , - 74 , - 5631 , - 5488 , - 5725 , - 262 , - 1259 , - 2636 , - 4393 , - 450 , - 2967 , - 5864 , - 3061 , - 638 , - 4675 , - 3012 , - 1729 , - 826 , - 303 , - 160 , - 397 , - 1014 , - 2011 , - 3388 , - 5145 , - 1202 , - 3719 , - 536 , - 3813 , - 1390 , - 5427 , - 3764 , - 2481 , - 1578 , - 1055 , - 912 , - 1149 , - 1766 , - 2763 , - 4140 , - 5897 , - 1954 , - 4471 , - 1288 , - 4565 , - 2142 , - 99 , - 4516 , - 3233 , - 2330 , - 1807 , - 1664 , - 1901 , - 2518 , - 3515 , - 4892 , - 569 , - 2706 , - 5223 , - 2040 , - 5317 , - 2894 , - 851 , - 5268 , - 3985 , - 3082 , - 2559 , - 2416 , - 2653 , - 3270 , - 4267 , - 5644 , - 1321 , - 3458 , - 5975 , - 2792 , - 6069 , - 3646 , - 1603 , - 6020 , - 4737 , - 3834 , - 3311 , - 3168 , - 3405 , - 4022 , - 5019 , - 316 , - 2073 , - 4210 , - 647 , - 3544 , - 741 , - 4398 , - 2355 , - 692 , - 5489 , - 4586 , - 4063 , - 3920 , - 4157 , - 4774 , - 5771 , - 1068 , - 2825 , - 4962 , - 1399 , - 4296 , - 1493 , - 5150 , - 3107 , - 1444 , - 161 , - 5338 , - 4815 , - 4672 , - 4909 , - 5526 , - 443 , - 1820 , - 3577 , - 5714 , - 2151 , - 5048 , - 2245 , - 5902 , - 3859 , - 2196 , - 913 , - 10 , - 5567 , - 5424 , - 5661 , - 198 , - 1195 , - 2572 , - 4329 , - 386 , - 2903 , - 5800 , - 2997 , - 574 , - 4611 , - 2948 , - 1665 , - 762 , - 239 , - 96 , - 333 , - 950 , - 1947 , - 3324 , - 5081 , - 1138 , - 3655 , - 472 , - 3749 , - 1326 , - 5363 , - 3700 , - 2417 , - 1514 , - 991 , - 848 , - 1085 , - 1702 , - 2699 , - 4076 , - 5833 , - 1890 , - 4407 , - 1224 , - 4501 , - 2078 , - 35 , - 4452 , - 3169 , - 2266 , - 1743 , - 1600 , - 1837 , - 2454 , - 3451 , - 4828 , - 505 , - 2642 , - 5159 , - 1976 , - 5253 , - 2830 , - 787 , - 5204 , - 3921 , - 3018 , - 2495 , - 2352 , - 2589 , - 3206 , - 4203 , - 5580 , - 1257 , - 3394 , - 5911 , - 2728 , - 6005 , - 3582 , - 1539 , - 5956 , - 4673 , - 3770 , - 3247 , - 3104 , - 3341 , - 3958 , - 4955 , - 252 , - 2009 , - 4146 , - 583 , - 3480 , - 677 , - 4334 , - 2291 , - 628 , - 5425 , - 4522 , - 3999 , - 3856 , - 4093 , - 4710 , - 5707 , - 1004 , - 2761 , - 4898 , - 1335 , - 4232 , - 1429 , - 5086 , - 3043 , - 1380 , - 97 , - 5274 , - 4751 , - 4608 , - 4845 , - 5462 , - 379 , - 1756 , - 3513 , - 5650 , - 2087 , - 4984 , - 2181 , - 5838 , - 3795 , - 2132 , - 849 , - 6026 , - 5503 , - 5360 , - 5597 , - 134 , - 1131 , - 2508 , - 4265 , - 322 , - 2839 , - 5736 , - 2933 , - 510 , - 4547 , - 2884 , - 1601 , - 698 , - 175 , - 32 , - 269 , - 886 , - 1883 , - 3260 , - 5017 , - 1074 , - 3591 , - 408 , - 3685 , - 1262 , - 5299 , - 3636 , - 2353 , - 1450 , - 927 , - 784 , - 1021 , - 1638 , - 2635 , - 4012 , - 5769 , - 1826 , - 4343 , - 1160 , - 4437 , - 2014 , - 6051 , - 4388 , - 3105 , - 2202 , - 1679 , - 1536 , - 1773 , - 2390 , - 3387 , - 4764 , - 441 , - 2578 , - 5095 , - 1912 , - 5189 , - 2766 , - 723 , - 5140 , - 3857 , - 2954 , - 2431 , - 2288 , - 2525 , - 3142 , - 4139 , - 5516 , - 1193 , - 3330 , - 5847 , - 2664 , - 5941 , - 3518 , - 1475 , - 5892 , - 4609 , - 3706 , - 3183 , - 3040 , - 3277 , - 3894 , - 4891 , - 188 , - 1945 , - 4082 , - 519 , - 3416 , - 613 , - 4270 , - 2227 , - 564 , - 5361 , - 4458 , - 3935 , - 3792 , - 4029 , - 4646 , - 5643 , - 940 , - 2697 , - 4834 , - 1271 , - 4168 , - 1365 , - 5022 , - 2979 , - 1316 , - 33 , - 5210 , - 4687 , - 4544 , - 4781 , - 5398 , - 315 , - 1692 , - 3449 , - 5586 , - 2023 , - 4920 , - 2117 , - 5774 , - 3731 , - 2068 , - 785 , - 5962 , - 5439 , - 5296 , - 5533 , - 70 , - 1067 , - 2444 , - 4201 , - 258 , - 2775 , - 5672 , - 2869 , - 446 , - 4483 , - 2820 , - 1537 , - 634 , - 111 , - 6048 , - 205 , - 822 , - 1819 , - 3196 , - 4953 , - 1010 , - 3527 , - 344 , - 3621 , - 1198 , - 5235 , - 3572 , - 2289 , - 1386 , - 863 , - 720 , - 957 , - 1574 , - 2571 , - 3948 , - 5705 , - 1762 , - 4279 , - 1096 , - 4373 , - 1950 , - 5987 , - 4324 , - 3041 , - 2138 , - 1615 , - 1472 , - 1709 , - 2326 , - 3323 , - 4700 , - 377 , - 2514 , - 5031 , - 1848 , - 5125 , - 2702 , - 659 , - 5076 , - 3793 , - 2890 , - 2367 , - 2224 , - 2461 , - 3078 , - 4075 , - 5452 , - 1129 , - 3266 , - 5783 , - 2600 , - 5877 , - 3454 , - 1411 , - 5828 , - 4545 , - 3642 , - 3119 , - 2976 , - 3213 , - 3830 , - 4827 , - 124 , - 1881 , - 4018 , - 455 , - 3352 , - 549 , - 4206 , - 2163 , - 500 , - 5297 , - 4394 , - 3871 , - 3728 , - 3965 , - 4582 , - 5579 , - 876 , - 2633 , - 4770 , - 1207 , - 4104 , - 1301 , - 4958 , - 2915 , - 1252 , - 6049 , - 5146 , - 4623 , - 4480 , - 4717 , - 5334 , - 251 , - 1628 , - 3385 , - 5522 , - 1959 , - 4856 , - 2053 , - 5710 , - 3667 , - 2004 , - 721 , - 5898 , - 5375 , - 5232 , - 5469 , - 6 , - 1003 , - 2380 , - 4137 , - 194 , - 2711 , - 5608 , - 2805 , - 382 , - 4419 , - 2756 , - 1473 , - 570 , - 47 , - 5984 , - 141 , - 758 , - 1755 , - 3132 , - 4889 , - 946 , - 3463 , - 280 , - 3557 , - 1134 , - 5171 , - 3508 , - 2225 , - 1322 , - 799 , - 656 , - 893 , - 1510 , - 2507 , - 3884 , - 5641 , - 1698 , - 4215 , - 1032 , - 4309 , - 1886 , - 5923 , - 4260 , - 2977 , - 2074 , - 1551 , - 1408 , - 1645 , - 2262 , - 3259 , - 4636 , - 313 , - 2450 , - 4967 , - 1784 , - 5061 , - 2638 , - 595 , - 5012 , - 3729 , - 2826 , - 2303 , - 2160 , - 2397 , - 3014 , - 4011 , - 5388 , - 1065 , - 3202 , - 5719 , - 2536 , - 5813 , - 3390 , - 1347 , - 5764 , - 4481 , - 3578 , - 3055 , - 2912 , - 3149 , - 3766 , - 4763 , - 60 , - 1817 , - 3954 , - 391 , - 3288 , - 485 , - 4142 , - 2099 , - 436 , - 5233 , - 4330 , - 3807 , - 3664 , - 3901 , - 4518 , - 5515 , - 812 , - 2569 , - 4706 , - 1143 , - 4040 , - 1237 , - 4894 , - 2851 , - 1188 , - 5985 , - 5082 , - 4559 , - 4416 , - 4653 , - 5270 , - 187 , - 1564 , - 3321 , - 5458 , - 1895 , - 4792 , - 1989 , - 5646 , - 3603 , - 1940 , - 657 , - 5834 , - 5311 , - 5168 , - 5405 , - 6022 , - 939 , - 2316 , - 4073 , - 130 , - 2647 , - 5544 , - 2741 , - 318 , - 4355 , - 2692 , - 1409 , - 506 , - 6063 , - 5920 , - 77 , - 694 , - 1691 , - 3068 , - 4825 , - 882 , - 3399 , - 216 , - 3493 , - 1070 , - 5107 , - 3444 , - 2161 , - 1258 , - 735 , - 592 , - 829 , - 1446 , - 2443 , - 3820 , - 5577 , - 1634 , - 4151 , - 968 , - 4245 , - 1822 , - 5859 , - 4196 , - 2913 , - 2010 , - 1487 , - 1344 , - 1581 , - 2198 , - 3195 , - 4572 , - 249 , - 2386 , - 4903 , - 1720 , - 4997 , - 2574 , - 531 , - 4948 , - 3665 , - 2762 , - 2239 , - 2096 , - 2333 , - 2950 , - 3947 , - 5324 , - 1001 , - 3138 , - 5655 , - 2472 , - 5749 , - 3326 , - 1283 , - 5700 , - 4417 , - 3514 , - 2991 , - 2848 , - 3085 , - 3702 , - 4699 , - 6076 , - 1753 , - 3890 , - 327 , - 3224 , - 421 , - 4078 , - 2035 , - 372 , - 5169 , - 4266 , - 3743 , - 3600 , - 3837 , - 4454 , - 5451 , - 748 , - 2505 , - 4642 , - 1079 , - 3976 , - 1173 , - 4830 , - 2787 , - 1124 , - 5921 , - 5018 , - 4495 , - 4352 , - 4589 , - 5206 , - 123 , - 1500 , - 3257 , - 5394 , - 1831 , - 4728 , - 1925 , - 5582 , - 3539 , - 1876 , - 593 , - 5770 , - 5247 , - 5104 , - 5341 , - 5958 , - 875 , - 2252 , - 4009 , - 66 , - 2583 , - 5480 , - 2677 , - 254 , - 4291 , - 2628 , - 1345 , - 442 , - 5999 , - 5856 , - 13 , - 630 , - 1627 , - 3004 , - 4761 , - 818 , - 3335 , - 152 , - 3429 , - 1006 , - 5043 , - 3380 , - 2097 , - 1194 , - 671 , - 528 , - 765 , - 1382 , - 2379 , - 3756 , - 5513 , - 1570 , - 4087 , - 904 , - 4181 , - 1758 , - 5795 , - 4132 , - 2849 , - 1946 , - 1423 , - 1280 , - 1517 , - 2134 , - 3131 , - 4508 , - 185 , - 2322 , - 4839 , - 1656 , - 4933 , - 2510 , - 467 , - 4884 , - 3601 , - 2698 , - 2175 , - 2032 , - 2269 , - 2886 , - 3883 , - 5260 , - 937 , - 3074 , - 5591 , - 2408 , - 5685 , - 3262 , - 1219 , - 5636 , - 4353 , - 3450 , - 2927 , - 2784 , - 3021 , - 3638 , - 4635 , - 6012 , - 1689 , - 3826 , - 263 , - 3160 , - 357 , - 4014 , - 1971 , - 308 , - 5105 , - 4202 , - 3679 , - 3536 , - 3773 , - 4390 , - 5387 , - 684 , - 2441 , - 4578 , - 1015 , - 3912 , - 1109 , - 4766 , - 2723 , - 1060 , - 5857 , - 4954 , - 4431 , - 4288 , - 4525 , - 5142 , - 59 , - 1436 , - 3193 , - 5330 , - 1767 , - 4664 , - 1861 , - 5518 , - 3475 , - 1812 , - 529 , - 5706 , - 5183 , - 5040 , - 5277 , - 5894 , - 811 , - 2188 , - 3945 , - 2 , - 2519 , - 5416 , - 2613 , - 190 , - 4227 , - 2564 , - 1281 , - 378 , - 5935 , - 5792 , - 6029 , - 566 , - 1563 , - 2940 , - 4697 , - 754 , - 3271 , - 88 , - 3365 , - 942 , - 4979 , - 3316 , - 2033 , - 1130 , - 607 , - 464 , - 701 , - 1318 , - 2315 , - 3692 , - 5449 , - 1506 , - 4023 , - 840 , - 4117 , - 1694 , - 5731 , - 4068 , - 2785 , - 1882 , - 1359 , - 1216 , - 1453 , - 2070 , - 3067 , - 4444 , - 121 , - 2258 , - 4775 , - 1592 , - 4869 , - 2446 , - 403 , - 4820 , - 3537 , - 2634 , - 2111 , - 1968 , - 2205 , - 2822 , - 3819 , - 5196 , - 873 , - 3010 , - 5527 , - 2344 , - 5621 , - 3198 , - 1155 , - 5572 , - 4289 , - 3386 , - 2863 , - 2720 , - 2957 , - 3574 , - 4571 , - 5948 , - 1625 , - 3762 , - 199 , - 3096 , - 293 , - 3950 , - 1907 , - 244 , - 5041 , - 4138 , - 3615 , - 3472 , - 3709 , - 4326 , - 5323 , - 620 , - 2377 , - 4514 , - 951 , - 3848 , - 1045 , - 4702 , - 2659 , - 996 , - 5793 , - 4890 , - 4367 , - 4224 , - 4461 , - 5078 , - 6075 , - 1372 , - 3129 , - 5266 , - 1703 , - 4600 , - 1797 , - 5454 , - 3411 , - 1748 , - 465 , - 5642 , - 5119 , - 4976 , - 5213 , - 5830 , - 747 , - 2124 , - 3881 , - 6018 , - 2455 , - 5352 , - 2549 , - 126 , - 4163 , - 2500 , - 1217 , - 314 , - 5871 , - 5728 , - 5965 , - 502 , - 1499 , - 2876 , - 4633 , - 690 , - 3207 , - 24 , - 3301 , - 878 , - 4915 , - 3252 , - 1969 , - 1066 , - 543 , - 400 , - 637 , - 1254 , - 2251 , - 3628 , - 5385 , - 1442 , - 3959 , - 776 , - 4053 , - 1630 , - 5667 , - 4004 , - 2721 , - 1818 , - 1295 , - 1152 , - 1389 , - 2006 , - 3003 , - 4380 , - 57 , - 2194 , - 4711 , - 1528 , - 4805 , - 2382 , - 339 , - 4756 , - 3473 , - 2570 , - 2047 , - 1904 , - 2141 , - 2758 , - 3755 , - 5132 , - 809 , - 2946 , - 5463 , - 2280 , - 5557 , - 3134 , - 1091 , - 5508 , - 4225 , - 3322 , - 2799 , - 2656 , - 2893 , - 3510 , - 4507 , - 5884 , - 1561 , - 3698 , - 135 , - 3032 , - 229 , - 3886 , - 1843 , - 180 , - 4977 , - 4074 , - 3551 , - 3408 , - 3645 , - 4262 , - 5259 , - 556 , - 2313 , - 4450 , - 887 , - 3784 , - 981 , - 4638 , - 2595 , - 932 , - 5729 , - 4826 , - 4303 , - 4160 , - 4397 , - 5014 , - 6011 , - 1308 , - 3065 , - 5202 , - 1639 , - 4536 , - 1733 , - 5390 , - 3347 , - 1684 , - 401 , - 5578 , - 5055 , - 4912 , - 5149 , - 5766 , - 683 , - 2060 , - 3817 , - 5954 , - 2391 , - 5288 , - 2485 , - 62 , - 4099 , - 2436 , - 1153 , - 250 , - 5807 , - 5664 , - 5901 , - 438 , - 1435 , - 2812 , - 4569 , - 626 , - 3143 , - 6040 , - 3237 , - 814 , - 4851 , - 3188 , - 1905 , - 1002 , - 479 , - 336 , - 573 , - 1190 , - 2187 , - 3564 , - 5321 , - 1378 , - 3895 , - 712 , - 3989 , - 1566 , - 5603 , - 3940 , - 2657 , - 1754 , - 1231 , - 1088 , - 1325 , - 1942 , - 2939 , - 4316 , - 6073 , - 2130 , - 4647 , - 1464 , - 4741 , - 2318 , - 275 , - 4692 , - 3409 , - 2506 , - 1983 , - 1840 , - 2077 , - 2694 , - 3691 , - 5068 , - 745 , - 2882 , - 5399 , - 2216 , - 5493 , - 3070 , - 1027 , - 5444 , - 4161 , - 3258 , - 2735 , - 2592 , - 2829 , - 3446 , - 4443 , - 5820 , - 1497 , - 3634 , - 71 , - 2968 , - 165 , - 3822 , - 1779 , - 116 , - 4913 , - 4010 , - 3487 , - 3344 , - 3581 , - 4198 , - 5195 , - 492 , - 2249 , - 4386 , - 823 , - 3720 , - 917 , - 4574 , - 2531 , - 868 , - 5665 , - 4762 , - 4239 , - 4096 , - 4333 , - 4950 , - 5947 , - 1244 , - 3001 , - 5138 , - 1575 , - 4472 , - 1669 , - 5326 , - 3283 , - 1620 , - 337 , - 5514 , - 4991 , - 4848 , - 5085 , - 5702 , - 619 , - 1996 , - 3753 , - 5890 , - 2327 , - 5224 , - 2421 , - 6078 , - 4035 , - 2372 , - 1089 , - 186 , - 5743 , - 5600 , - 5837 , - 374 , - 1371 , - 2748 , - 4505 , - 562 , - 3079 , - 5976 , - 3173 , - 750 , - 4787 , - 3124 , - 1841 , - 938 , - 415 , - 272 , - 509 , - 1126 , - 2123 , - 3500 , - 5257 , - 1314 , - 3831 , - 648 , - 3925 , - 1502 , - 5539 , - 3876 , - 2593 , - 1690 , - 1167 , - 1024 , - 1261 , - 1878 , - 2875 , - 4252 , - 6009 , - 2066 , - 4583 , - 1400 , - 4677 , - 2254 , - 211 , - 4628 , - 3345 , - 2442 , - 1919 , - 1776 , - 2013 , - 2630 , - 3627 , - 5004 , - 681 , - 2818 , - 5335 , - 2152 , - 5429 , - 3006 , - 963 , - 5380 , - 4097 , - 3194 , - 2671 , - 2528 , - 2765 , - 3382 , - 4379 , - 5756 , - 1433 , - 3570 , - 7 , - 2904 , - 101 , - 3758 , - 1715 , - 52 , - 4849 , - 3946 , - 3423 , - 3280 , - 3517 , - 4134 , - 5131 , - 428 , - 2185 , - 4322 , - 759 , - 3656 , - 853 , - 4510 , - 2467 , - 804 , - 5601 , - 4698 , - 4175 , - 4032 , - 4269 , - 4886 , - 5883 , - 1180 , - 2937 , - 5074 , - 1511 , - 4408 , - 1605 , - 5262 , - 3219 , - 1556 , - 273 , - 5450 , - 4927 , - 4784 , - 5021 , - 5638 , - 555 , - 1932 , - 3689 , - 5826 , - 2263 , - 5160 , - 2357 , - 6014 , - 3971 , - 2308 , - 1025 , - 122 , - 5679 , - 5536 , - 5773 , - 310 , - 1307 , - 2684 , - 4441 , - 498 , - 3015 , - 5912 , - 3109 , - 686 , - 4723 , - 3060 , - 1777 , - 874 , - 351 , - 208 , - 445 , - 1062 , - 2059 , - 3436 , - 5193 , - 1250 , - 3767 , - 584 , - 3861 , - 1438 , - 5475 , - 3812 , - 2529 , - 1626 , - 1103 , - 960 , - 1197 , - 1814 , - 2811 , - 4188 , - 5945 , - 2002 , - 4519 , - 1336 , - 4613 , - 2190 , - 147 , - 4564 , - 3281 , - 2378 , - 1855 , - 1712 , - 1949 , - 2566 , - 3563 , - 4940 , - 617 , - 2754 , - 5271 , - 2088 , - 5365 , - 2942 , - 899 , - 5316 , - 4033 , - 3130 , - 2607 , - 2464 , - 2701 , - 3318 , - 4315 , - 5692 , - 1369 , - 3506 , - 6023 , - 2840 , - 37 , - 3694 , - 1651 , - 6068 , - 4785 , - 3882 , - 3359 , - 3216 , - 3453 , - 4070 , - 5067 , - 364 , - 2121 , - 4258 , - 695 , - 3592 , - 789 , - 4446 , - 2403 , - 740 , - 5537 , - 4634 , - 4111 , - 3968 , - 4205 , - 4822 , - 5819 , - 1116 , - 2873 , - 5010 , - 1447 , - 4344 , - 1541 , - 5198 , - 3155 , - 1492 , - 209 , - 5386 , - 4863 , - 4720 , - 4957 , - 5574 , - 491 , - 1868 , - 3625 , - 5762 , - 2199 , - 5096 , - 2293 , - 5950 , - 3907 , - 2244 , - 961 , - 58 , - 5615 , - 5472 , - 5709 , - 246 , - 1243 , - 2620 , - 4377 , - 434 , - 2951 , - 5848 , - 3045 , - 622 , - 4659 , - 2996 , - 1713 , - 810 , - 287 , - 144 , - 381 , - 998 , - 1995 , - 3372 , - 5129 , - 1186 , - 3703 , - 520 , - 3797 , - 1374 , - 5411 , - 3748 , - 2465 , - 1562 , - 1039 , - 896 , - 1133 , - 1750 , - 2747 , - 4124 , - 5881 , - 1938 , - 4455 , - 1272 , - 4549 , - 2126 , - 83 , - 4500 , - 3217 , - 2314 , - 1791 , - 1648 , - 1885 , - 2502 , - 3499 , - 4876 , - 553 , - 2690 , - 5207 , - 2024 , - 5301 , - 2878 , - 835 , - 5252 , - 3969 , - 3066 , - 2543 , - 2400 , - 2637 , - 3254 , - 4251 , - 5628 , - 1305 , - 3442 , - 5959 , - 2776 , - 6053 , - 3630 , - 1587 , - 6004 , - 4721 , - 3818 , - 3295 , - 3152 , - 3389 , - 4006 , - 5003 , - 300 , - 2057 , - 4194 , - 631 , - 3528 , - 725 , - 4382 , - 2339 , - 676 , - 5473 , - 4570 , - 4047 , - 3904 , - 4141 , - 4758 , - 5755 , - 1052 , - 2809 , - 4946 , - 1383 , - 4280 , - 1477 , - 5134 , - 3091 , - 1428 , - 145 , - 5322 , - 4799 , - 4656 , - 4893 , - 5510 , - 427 , - 1804 , - 3561 , - 5698 , - 2135 , - 5032 , - 2229 , - 5886 , - 3843 , - 2180 , - 897 , - 6074 , - 5551 , - 5408 , - 5645 , - 182 , - 1179 , - 2556 , - 4313 , - 370 , - 2887 , - 5784 , - 2981 , - 558 , - 4595 , - 2932 , - 1649 , - 746 , - 223 , - 80 , - 317 , - 934 , - 1931 , - 3308 , - 5065 , - 1122 , - 3639 , - 456 , - 3733 , - 1310 , - 5347 , - 3684 , - 2401 , - 1498 , - 975 , - 832 , - 1069 , - 1686 , - 2683 , - 4060 , - 5817 , - 1874 , - 4391 , - 1208 , - 4485 , - 2062 , - 19 , - 4436 , - 3153 , - 2250 , - 1727 , - 1584 , - 1821 , - 2438 , - 3435 , - 4812 , - 489 , - 2626 , - 5143 , - 1960 , - 5237 , - 2814 , - 771 , - 5188 , - 3905 , - 3002 , - 2479 , - 2336 , - 2573 , - 3190 , - 4187 , - 5564 , - 1241 , - 3378 , - 5895 , - 2712 , - 5989 , - 3566 , - 1523 , - 5940 , - 4657 , - 3754 , - 3231 , - 3088 , - 3325 , - 3942 , - 4939 , - 236 , - 1993 , - 4130 , - 567 , - 3464 , - 661 , - 4318 , - 2275 , - 612 , - 5409 , - 4506 , - 3983 , - 3840 , - 4077 , - 4694 , - 5691 , - 988 , - 2745 , - 4882 , - 1319 , - 4216 , - 1413 , - 5070 , - 3027 , - 1364 , - 81 , - 5258 , - 4735 , - 4592 , - 4829 , - 5446 , - 363 , - 1740 , - 3497 , - 5634 , - 2071 , - 4968 , - 2165 , - 5822 , - 3779 , - 2116 , - 833 , - 6010 , - 5487 , - 5344 , - 5581 , - 118 , - 1115 , - 2492 , - 4249 , - 306 , - 2823 , - 5720 , - 2917 , - 494 , - 4531 , - 2868 , - 1585 , - 682 , - 159 , - 16 , - 253 , - 870 , - 1867 , - 3244 , - 5001 , - 1058 , - 3575 , - 392 , - 3669 , - 1246 , - 5283 , - 3620 , - 2337 , - 1434 , - 911 , - 768 , - 1005 , - 1622 , - 2619 , - 3996 , - 5753 , - 1810 , - 4327 , - 1144 , - 4421 , - 1998 , - 6035 , - 4372 , - 3089 , - 2186 , - 1663 , - 1520 , - 1757 , - 2374 , - 3371 , - 4748 , - 425 , - 2562 , - 5079 , - 1896 , - 5173 , - 2750 , - 707 , - 5124 , - 3841 , - 2938 , - 2415 , - 2272 , - 2509 , - 3126 , - 4123 , - 5500 , - 1177 , - 3314 , - 5831 , - 2648 , - 5925 , - 3502 , - 1459 , - 5876 , - 4593 , - 3690 , - 3167 , - 3024 , - 3261 , - 3878 , - 4875 , - 172 , - 1929 , - 4066 , - 503 , - 3400 , - 597 , - 4254 , - 2211 , - 548 , - 5345 , - 4442 , - 3919 , - 3776 , - 4013 , - 4630 , - 5627 , - 924 , - 2681 , - 4818 , - 1255 , - 4152 , - 1349 , - 5006 , - 2963 , - 1300 , - 17 , - 5194 , - 4671 , - 4528 , - 4765 , - 5382 , - 299 , - 1676 , - 3433 , - 5570 , - 2007 , - 4904 , - 2101 , - 5758 , - 3715 , - 2052 , - 769 , - 5946 , - 5423 , - 5280 , - 5517 , - 54 , - 1051 , - 2428 , - 4185 , - 242 , - 2759 , - 5656 , - 2853 , - 430 , - 4467 , - 2804 , - 1521 , - 618 , - 95 , - 6032 , - 189 , - 806 , - 1803 , - 3180 , - 4937 , - 994 , - 3511 , - 328 , - 3605 , - 1182 , - 5219 , - 3556 , - 2273 , - 1370 , - 847 , - 704 , - 941 , - 1558 , - 2555 , - 3932 , - 5689 , - 1746 , - 4263 , - 1080 , - 4357 , - 1934 , - 5971 , - 4308 , - 3025 , - 2122 , - 1599 , - 1456 , - 1693 , - 2310 , - 3307 , - 4684 , - 361 , - 2498 , - 5015 , - 1832 , - 5109 , - 2686 , - 643 , - 5060 , - 3777 , - 2874 , - 2351 , - 2208 , - 2445 , - 3062 , - 4059 , - 5436 , - 1113 , - 3250 , - 5767 , - 2584 , - 5861 , - 3438 , - 1395 , - 5812 , - 4529 , - 3626 , - 3103 , - 2960 , - 3197 , - 3814 , - 4811 , - 108 , - 1865 , - 4002 , - 439 , - 3336 , - 533 , - 4190 , - 2147 , - 484 , - 5281 , - 4378 , - 3855 , - 3712 , - 3949 , - 4566 , - 5563 , - 860 , - 2617 , - 4754 , - 1191 , - 4088 , - 1285 , - 4942 , - 2899 , - 1236 , - 6033 , - 5130 , - 4607 , - 4464 , - 4701 , - 5318 , - 235 , - 1612 , - 3369 , - 5506 , - 1943 , - 4840 , - 2037 , - 5694 , - 3651 , - 1988 , - 705 , - 5882 , - 5359 , - 5216 , - 5453 , - 6070 , - 987 , - 2364 , - 4121 , - 178 , - 2695 , - 5592 , - 2789 , - 366 , - 4403 , - 2740 , - 1457 , - 554 , - 31 , - 5968 , - 125 , - 742 , - 1739 , - 3116 , - 4873 , - 930 , - 3447 , - 264 , - 3541 , - 1118 , - 5155 , - 3492 , - 2209 , - 1306 , - 783 , - 640 , - 877 , - 1494 , - 2491 , - 3868 , - 5625 , - 1682 , - 4199 , - 1016 , - 4293 , - 1870 , - 5907 , - 4244 , - 2961 , - 2058 , - 1535 , - 1392 , - 1629 , - 2246 , - 3243 , - 4620 , - 297 , - 2434 , - 4951 , - 1768 , - 5045 , - 2622 , - 579 , - 4996 , - 3713 , - 2810 , - 2287 , - 2144 , - 2381 , - 2998 , - 3995 , - 5372 , - 1049 , - 3186 , - 5703 , - 2520 , - 5797 , - 3374 , - 1331 , - 5748 , - 4465 , - 3562 , - 3039 , - 2896 , - 3133 , - 3750 , - 4747 , - 44 , - 1801 , - 3938 , - 375 , - 3272 , - 469 , - 4126 , - 2083 , - 420 , - 5217 , - 4314 , - 3791 , - 3648 , - 3885 , - 4502 , - 5499 , - 796 , - 2553 , - 4690 , - 1127 , - 4024 , - 1221 , - 4878 , - 2835 , - 1172 , - 5969 , - 5066 , - 4543 , - 4400 , - 4637 , - 5254 , - 171 , - 1548 , - 3305 , - 5442 , - 1879 , - 4776 , - 1973 , - 5630 , - 3587 , - 1924 , - 641 , - 5818 , - 5295 , - 5152 , - 5389 , - 6006 , - 923 , - 2300 , - 4057 , - 114 , - 2631 , - 5528 , - 2725 , - 302 , - 4339 , - 2676 , - 1393 , - 490 , - 6047 , - 5904 , - 61 , - 678 , - 1675 , - 3052 , - 4809 , - 866 , - 3383 , - 200 , - 3477 , - 1054 , - 5091 , - 3428 , - 2145 , - 1242 , - 719 , - 576 , - 813 , - 1430 , - 2427 , - 3804 , - 5561 , - 1618 , - 4135 , - 952 , - 4229 , - 1806 , - 5843 , - 4180 , - 2897 , - 1994 , - 1471 , - 1328 , - 1565 , - 2182 , - 3179 , - 4556 , - 233 , - 2370 , - 4887 , - 1704 , - 4981 , - 2558 , - 515 , - 4932 , - 3649 , - 2746 , - 2223 , - 2080 , - 2317 , - 2934 , - 3931 , - 5308 , - 985 , - 3122 , - 5639 , - 2456 , - 5733 , - 3310 , - 1267 , - 5684 , - 4401 , - 3498 , - 2975 , - 2832 , - 3069 , - 3686 , - 4683 , - 6060 , - 1737 , - 3874 , - 311 , - 3208 , - 405 , - 4062 , - 2019 , - 356 , - 5153 , - 4250 , - 3727 , - 3584 , - 3821 , - 4438 , - 5435 , - 732 , - 2489 , - 4626 , - 1063 , - 3960 , - 1157 , - 4814 , - 2771 , - 1108 , - 5905 , - 5002 , - 4479 , - 4336 , - 4573 , - 5190 , - 107 , - 1484 , - 3241 , - 5378 , - 1815 , - 4712 , - 1909 , - 5566 , - 3523 , - 1860 , - 577 , - 5754 , - 5231 , - 5088 , - 5325 , - 5942 , - 859 , - 2236 , - 3993 , - 50 , - 2567 , - 5464 , - 2661 , - 238 , - 4275 , - 2612 , - 1329 , - 426 , - 5983 , - 5840 , - 6077 , - 614 , - 1611 , - 2988 , - 4745 , - 802 , - 3319 , - 136 , - 3413 , - 990 , - 5027 , - 3364 , - 2081 , - 1178 , - 655 , - 512 , - 749 , - 1366 , - 2363 , - 3740 , - 5497 , - 1554 , - 4071 , - 888 , - 4165 , - 1742 , - 5779 , - 4116 , - 2833 , - 1930 , - 1407 , - 1264 , - 1501 , - 2118 , - 3115 , - 4492 , - 169 , - 2306 , - 4823 , - 1640 , - 4917 , - 2494 , - 451 , - 4868 , - 3585 , - 2682 , - 2159 , - 2016 , - 2253 , - 2870 , - 3867 , - 5244 , - 921 , - 3058 , - 5575 , - 2392 , - 5669 , - 3246 , - 1203 , - 5620 , - 4337 , - 3434 , - 2911 , - 2768 , - 3005 , - 3622 , - 4619 , - 5996 , - 1673 , - 3810 , - 247 , - 3144 , - 341 , - 3998 , - 1955 , - 292 , - 5089 , - 4186 , - 3663 , - 3520 , - 3757 , - 4374 , - 5371 , - 668 , - 2425 , - 4562 , - 999 , - 3896 , - 1093 , - 4750 , - 2707 , - 1044 , - 5841 , - 4938 , - 4415 , - 4272 , - 4509 , - 5126 , - 43 , - 1420 , - 3177 , - 5314 , - 1751 , - 4648 , - 1845 , - 5502 , - 3459 , - 1796 , - 513 , - 5690 , - 5167 , - 5024 , - 5261 , - 5878 , - 795 , - 2172 , - 3929 , - 6066 , - 2503 , - 5400 , - 2597 , - 174 , - 4211 , - 2548 , - 1265 , - 362 , - 5919 , - 5776 , - 6013 , - 550 , - 1547 , - 2924 , - 4681 , - 738 , - 3255 , - 72 , - 3349 , - 926 , - 4963 , - 3300 , - 2017 , - 1114 , - 591 , - 448 , - 685 , - 1302 , - 2299 , - 3676 , - 5433 , - 1490 , - 4007 , - 824 , - 4101 , - 1678 , - 5715 , - 4052 , - 2769 , - 1866 , - 1343 , - 1200 , - 1437 , - 2054 , - 3051 , - 4428 , - 105 , - 2242 , - 4759 , - 1576 , - 4853 , - 2430 , - 387 , - 4804 , - 3521 , - 2618 , - 2095 , - 1952 , - 2189 , - 2806 , - 3803 , - 5180 , - 857 , - 2994 , - 5511 , - 2328 , - 5605 , - 3182 , - 1139 , - 5556 , - 4273 , - 3370 , - 2847 , - 2704 , - 2941 , - 3558 , - 4555 , - 5932 , - 1609 , - 3746 , - 183 , - 3080 , - 277 , - 3934 , - 1891 , - 228 , - 5025 , - 4122 , - 3599 , - 3456 , - 3693 , - 4310 , - 5307 , - 604 , - 2361 , - 4498 , - 935 , - 3832 , - 1029 , - 4686 , - 2643 , - 980 , - 5777 , - 4874 , - 4351 , - 4208 , - 4445 , - 5062 , - 6059 , - 1356 , - 3113 , - 5250 , - 1687 , - 4584 , - 1781 , - 5438 , - 3395 , - 1732 , - 449 , - 5626 , - 5103 , - 4960 , - 5197 , - 5814 , - 731 , - 2108 , - 3865 , - 6002 , - 2439 , - 5336 , - 2533 , - 110 , - 4147 , - 2484 , - 1201 , - 298 , - 5855 , - 5712 , - 5949 , - 486 , - 1483 , - 2860 , - 4617 , - 674 , - 3191 , - 8 , - 3285 , - 862 , - 4899 , - 3236 , - 1953 , - 1050 , - 527 , - 384 , - 621 , - 1238 , - 2235 , - 3612 , - 5369 , - 1426 , - 3943 , - 760 , - 4037 , - 1614 , - 5651 , - 3988 , - 2705 , - 1802 , - 1279 , - 1136 , - 1373 , - 1990 , - 2987 , - 4364 , - 41 , - 2178 , - 4695 , - 1512 , - 4789 , - 2366 , - 323 , - 4740 , - 3457 , - 2554 , - 2031 , - 1888 , - 2125 , - 2742 , - 3739 , - 5116 , - 793 , - 2930 , - 5447 , - 2264 , - 5541 , - 3118 , - 1075 , - 5492 , - 4209 , - 3306 , - 2783 , - 2640 , - 2877 , - 3494 , - 4491 , - 5868 , - 1545 , - 3682 , - 119 , - 3016 , - 213 , - 3870 , - 1827 , - 164 , - 4961 , - 4058 , - 3535 , - 3392 , - 3629 , - 4246 , - 5243 , - 540 , - 2297 , - 4434 , - 871 , - 3768 , - 965 , - 4622 , - 2579 , - 916 , - 5713 , - 4810 , - 4287 , - 4144 , - 4381 , - 4998 , - 5995 , - 1292 , - 3049 , - 5186 , - 1623 , - 4520 , - 1717 , - 5374 , - 3331 , - 1668 , - 385 , - 5562 , - 5039 , - 4896 , - 5133 , - 5750 , - 667 , - 2044 , - 3801 , - 5938 , - 2375 , - 5272 , - 2469 , - 46 , - 4083 , - 2420 , - 1137 , - 234 , - 5791 , - 5648 , - 5885 , - 422 , - 1419 , - 2796 , - 4553 , - 610 , - 3127 , - 6024 , - 3221 , - 798 , - 4835 , - 3172 , - 1889 , - 986 , - 463 , - 320 , - 557 , - 1174 , - 2171 , - 3548 , - 5305 , - 1362 , - 3879 , - 696 , - 3973 , - 1550 , - 5587 , - 3924 , - 2641 , - 1738 , - 1215 , - 1072 , - 1309 , - 1926 , - 2923 , - 4300 , - 6057 , - 2114 , - 4631 , - 1448 , - 4725 , - 2302 , - 259 , - 4676 , - 3393 , - 2490 , - 1967 , - 1824 , - 2061 , - 2678 , - 3675 , - 5052 , - 729 , - 2866 , - 5383 , - 2200 , - 5477 , - 3054 , - 1011 , - 5428 , - 4145 , - 3242 , - 2719 , - 2576 , - 2813 , - 3430 , - 4427 , - 5804 , - 1481 , - 3618 , - 55 , - 2952 , - 149 , - 3806 , - 1763 , - 100 , - 4897 , - 3994 , - 3471 , - 3328 , - 3565 , - 4182 , - 5179 , - 476 , - 2233 , - 4370 , - 807 , - 3704 , - 901 , - 4558 , - 2515 , - 852 , - 5649 , - 4746 , - 4223 , - 4080 , - 4317 , - 4934 , - 5931 , - 1228 , - 2985 , - 5122 , - 1559 , - 4456 , - 1653 , - 5310 , - 3267 , - 1604 , - 321 , - 5498 , - 4975 , - 4832 , - 5069 , - 5686 , - 603 , - 1980 , - 3737 , - 5874 , - 2311 , - 5208 , - 2405 , - 6062 , - 4019 , - 2356 , - 1073 , - 170 , - 5727 , - 5584 , - 5821 , - 358 , - 1355 , - 2732 , - 4489 , - 546 , - 3063 , - 5960 , - 3157 , - 734 , - 4771 , - 3108 , - 1825 , - 922 , - 399 , - 256 , - 493 , - 1110 , - 2107 , - 3484 , - 5241 , - 1298 , - 3815 , - 632 , - 3909 , - 1486 , - 5523 , - 3860 , - 2577 , - 1674 , - 1151 , - 1008 , - 1245 , - 1862 , - 2859 , - 4236 , - 5993 , - 2050 , - 4567 , - 1384 , - 4661 , - 2238 , - 195 , - 4612 , - 3329 , - 2426 , - 1903 , - 1760 , - 1997 , - 2614 , - 3611 , - 4988 , - 665 , - 2802 , - 5319 , - 2136 , - 5413 , - 2990 , - 947 , - 5364 , - 4081 , - 3178 , - 2655 , - 2512 , - 2749 , - 3366 , - 4363 , - 5740 , - 1417 , - 3554 , - 6071 , - 2888 , - 85 , - 3742 , - 1699 , - 36 , - 4833 , - 3930 , - 3407 , - 3264 , - 3501 , - 4118 , - 5115 , - 412 , - 2169 , - 4306 , - 743 , - 3640 , - 837 , - 4494 , - 2451 , - 788 , - 5585 , - 4682 , - 4159 , - 4016 , - 4253 , - 4870 , - 5867 , - 1164 , - 2921 , - 5058 , - 1495 , - 4392 , - 1589 , - 5246 , - 3203 , - 1540 , - 257 , - 5434 , - 4911 , - 4768 , - 5005 , - 5622 , - 539 , - 1916 , - 3673 , - 5810 , - 2247 , - 5144 , - 2341 , - 5998 , - 3955 , - 2292 , - 1009 , - 106 , - 5663 , - 5520 , - 5757 , - 294 , - 1291 , - 2668 , - 4425 , - 482 , - 2999 , - 5896 , - 3093 , - 670 , - 4707 , - 3044 , - 1761 , - 858 , - 335 , - 192 , - 429 , - 1046 , - 2043 , - 3420 , - 5177 , - 1234 , - 3751 , - 568 , - 3845 , - 1422 , - 5459 , - 3796 , - 2513 , - 1610 , - 1087 , - 944 , - 1181 , - 1798 , - 2795 , - 4172 , - 5929 , - 1986 , - 4503 , - 1320 , - 4597 , - 2174 , - 131 , - 4548 , - 3265 , - 2362 , - 1839 , - 1696 , - 1933 , - 2550 , - 3547 , - 4924 , - 601 , - 2738 , - 5255 , - 2072 , - 5349 , - 2926 , - 883 , - 5300 , - 4017 , - 3114 , - 2591 , - 2448 , - 2685 , - 3302 , - 4299 , - 5676 , - 1353 , - 3490 , - 6007 , - 2824 , - 21 , - 3678 , - 1635 , - 6052 , - 4769 , - 3866 , - 3343 , - 3200 , - 3437 , - 4054 , - 5051 , - 348 , - 2105 , - 4242 , - 679 , - 3576 , - 773 , - 4430 , - 2387 , - 724 , - 5521 , - 4618 , - 4095 , - 3952 , - 4189 , - 4806 , - 5803 , - 1100 , - 2857 , - 4994 , - 1431 , - 4328 , - 1525 , - 5182 , - 3139 , - 1476 , - 193 , - 5370 , - 4847 , - 4704 , - 4941 , - 5558 , - 475 , - 1852 , - 3609 , - 5746 , - 2183 , - 5080 , - 2277 , - 5934 , - 3891 , - 2228 , - 945 , - 42 , - 5599 , - 5456 , - 5693 , - 230 , - 1227 , - 2604 , - 4361 , - 418 , - 2935 , - 5832 , - 3029 , - 606 , - 4643 , - 2980 , - 1697 , - 794 , - 271 , - 128 , - 365 , - 982 , - 1979 , - 3356 , - 5113 , - 1170 , - 3687 , - 504 , - 3781 , - 1358 , - 5395 , - 3732 , - 2449 , - 1546 , - 1023 , - 880 , - 1117 , - 1734 , - 2731 , - 4108 , - 5865 , - 1922 , - 4439 , - 1256 , - 4533 , - 2110 , - 67 , - 4484 , - 3201 , - 2298 , - 1775 , - 1632 , - 1869 , - 2486 , - 3483 , - 4860 , - 537 , - 2674 , - 5191 , - 2008 , - 5285 , - 2862 , - 819 , - 5236 , - 3953 , - 3050 , - 2527 , - 2384 , - 2621 , - 3238 , - 4235 , - 5612 , - 1289 , - 3426 , - 5943 , - 2760 , - 6037 , - 3614 , - 1571 , - 5988 , - 4705 , - 3802 , - 3279 , - 3136 , - 3373 , - 3990 , - 4987 , - 284 , - 2041 , - 4178 , - 615 , - 3512 , - 709 , - 4366 , - 2323 , - 660 , - 5457 , - 4554 , - 4031 , - 3888 , - 4125 , - 4742 , - 5739 , - 1036 , - 2793 , - 4930 , - 1367 , - 4264 , - 1461 , - 5118 , - 3075 , - 1412 , - 129 , - 5306 , - 4783 , - 4640 , - 4877 , - 5494 , - 411 , - 1788 , - 3545 , - 5682 , - 2119 , - 5016 , - 2213 , - 5870 , - 3827 , - 2164 , - 881 , - 6058 , - 5535 , - 5392 , - 5629 , - 166 , - 1163 , - 2540 , - 4297 , - 354 , - 2871 , - 5768 , - 2965 , - 542 , - 4579 , - 2916 , - 1633 , - 730 , - 207 , - 64 , - 301 , - 918 , - 1915 , - 3292 , - 5049 , - 1106 , - 3623 , - 440 , - 3717 , - 1294 , - 5331 , - 3668 , - 2385 , - 1482 , - 959 , - 816 , - 1053 , - 1670 , - 2667 , - 4044 , - 5801 , - 1858 , - 4375 , - 1192 , - 4469 , - 2046 , - 3 , - 4420 , - 3137 , - 2234 , - 1711 , - 1568 , - 1805 , - 2422 , - 3419 , - 4796 , - 473 , - 2610 , - 5127 , - 1944 , - 5221 , - 2798 , - 755 , - 5172 , - 3889 , - 2986 , - 2463 , - 2320 , - 2557 , - 3174 , - 4171 , - 5548 , - 1225 , - 3362 , - 5879 , - 2696 , - 5973 , - 3550 , - 1507 , - 5924 , - 4641 , - 3738 , - 3215 , - 3072 , - 3309 , - 3926 , - 4923 , - 220 , - 1977 , - 4114 , - 551 , - 3448 , - 645 , - 4302 , - 2259 , - 596 , - 5393 , - 4490 , - 3967 , - 3824 , - 4061 , - 4678 , - 5675 , - 972 , - 2729 , - 4866 , - 1303 , - 4200 , - 1397 , - 5054 , - 3011 , - 1348 , - 65 , - 5242 , - 4719 , - 4576 , - 4813 , - 5430 , - 347 , - 1724 , - 3481 , - 5618 , - 2055 , - 4952 , - 2149 , - 5806 , - 3763 , - 2100 , - 817 , - 5994 , - 5471 , - 5328 , - 5565 , - 102 , - 1099 , - 2476 , - 4233 , - 290 , - 2807 , - 5704 , - 2901 , - 478 , - 4515 , - 2852 , - 1569 , - 666 , - 143 , - 0 , - 743 , - 2446 , - 5109 , - 2588 , - 1027 , - 426 , - 785 , - 2104 , - 4383 , - 1478 , - 5677 , - 4692 , - 4667 , - 5602 , - 1353 , - 4208 , - 1879 , - 510 , - 101 , - 652 , - 2163 , - 4634 , - 1921 , - 168 , - 5519 , - 5686 , - 669 , - 2756 , - 5803 , - 3666 , - 2489 , - 2272 , - 3015 , - 4718 , - 1237 , - 4860 , - 3299 , - 2698 , - 3057 , - 4376 , - 511 , - 3750 , - 1805 , - 820 , - 795 , - 1730 , - 3625 , - 336 , - 4151 , - 2782 , - 2373 , - 2924 , - 4435 , - 762 , - 4193 , - 2440 , - 1647 , - 1814 , - 2941 , - 5028 , - 1931 , - 5938 , - 4761 , - 4544 , - 5287 , - 846 , - 3509 , - 988 , - 5571 , - 4970 , - 5329 , - 504 , - 2783 , - 6022 , - 4077 , - 3092 , - 3067 , - 4002 , - 5897 , - 2608 , - 279 , - 5054 , - 4645 , - 5196 , - 563 , - 3034 , - 321 , - 4712 , - 3919 , - 4086 , - 5213 , - 1156 , - 4203 , - 2066 , - 889 , - 672 , - 1415 , - 3118 , - 5781 , - 3260 , - 1699 , - 1098 , - 1457 , - 2776 , - 5055 , - 2150 , - 205 , - 5364 , - 5339 , - 130 , - 2025 , - 4880 , - 2551 , - 1182 , - 773 , - 1324 , - 2835 , - 5306 , - 2593 , - 840 , - 47 , - 214 , - 1341 , - 3428 , - 331 , - 4338 , - 3161 , - 2944 , - 3687 , - 5390 , - 1909 , - 5532 , - 3971 , - 3370 , - 3729 , - 5048 , - 1183 , - 4422 , - 2477 , - 1492 , - 1467 , - 2402 , - 4297 , - 1008 , - 4823 , - 3454 , - 3045 , - 3596 , - 5107 , - 1434 , - 4865 , - 3112 , - 2319 , - 2486 , - 3613 , - 5700 , - 2603 , - 466 , - 5433 , - 5216 , - 5959 , - 1518 , - 4181 , - 1660 , - 99 , - 5642 , - 6001 , - 1176 , - 3455 , - 550 , - 4749 , - 3764 , - 3739 , - 4674 , - 425 , - 3280 , - 951 , - 5726 , - 5317 , - 5868 , - 1235 , - 3706 , - 993 , - 5384 , - 4591 , - 4758 , - 5885 , - 1828 , - 4875 , - 2738 , - 1561 , - 1344 , - 2087 , - 3790 , - 309 , - 3932 , - 2371 , - 1770 , - 2129 , - 3448 , - 5727 , - 2822 , - 877 , - 6036 , - 6011 , - 802 , - 2697 , - 5552 , - 3223 , - 1854 , - 1445 , - 1996 , - 3507 , - 5978 , - 3265 , - 1512 , - 719 , - 886 , - 2013 , - 4100 , - 1003 , - 5010 , - 3833 , - 3616 , - 4359 , - 6062 , - 2581 , - 60 , - 4643 , - 4042 , - 4401 , - 5720 , - 1855 , - 5094 , - 3149 , - 2164 , - 2139 , - 3074 , - 4969 , - 1680 , - 5495 , - 4126 , - 3717 , - 4268 , - 5779 , - 2106 , - 5537 , - 3784 , - 2991 , - 3158 , - 4285 , - 228 , - 3275 , - 1138 , - 6105 , - 5888 , - 487 , - 2190 , - 4853 , - 2332 , - 771 , - 170 , - 529 , - 1848 , - 4127 , - 1222 , - 5421 , - 4436 , - 4411 , - 5346 , - 1097 , - 3952 , - 1623 , - 254 , - 5989 , - 396 , - 1907 , - 4378 , - 1665 , - 6056 , - 5263 , - 5430 , - 413 , - 2500 , - 5547 , - 3410 , - 2233 , - 2016 , - 2759 , - 4462 , - 981 , - 4604 , - 3043 , - 2442 , - 2801 , - 4120 , - 255 , - 3494 , - 1549 , - 564 , - 539 , - 1474 , - 3369 , - 80 , - 3895 , - 2526 , - 2117 , - 2668 , - 4179 , - 506 , - 3937 , - 2184 , - 1391 , - 1558 , - 2685 , - 4772 , - 1675 , - 5682 , - 4505 , - 4288 , - 5031 , - 590 , - 3253 , - 732 , - 5315 , - 4714 , - 5073 , - 248 , - 2527 , - 5766 , - 3821 , - 2836 , - 2811 , - 3746 , - 5641 , - 2352 , - 23 , - 4798 , - 4389 , - 4940 , - 307 , - 2778 , - 65 , - 4456 , - 3663 , - 3830 , - 4957 , - 900 , - 3947 , - 1810 , - 633 , - 416 , - 1159 , - 2862 , - 5525 , - 3004 , - 1443 , - 842 , - 1201 , - 2520 , - 4799 , - 1894 , - 6093 , - 5108 , - 5083 , - 6018 , - 1769 , - 4624 , - 2295 , - 926 , - 517 , - 1068 , - 2579 , - 5050 , - 2337 , - 584 , - 5935 , - 6102 , - 1085 , - 3172 , - 75 , - 4082 , - 2905 , - 2688 , - 3431 , - 5134 , - 1653 , - 5276 , - 3715 , - 3114 , - 3473 , - 4792 , - 927 , - 4166 , - 2221 , - 1236 , - 1211 , - 2146 , - 4041 , - 752 , - 4567 , - 3198 , - 2789 , - 3340 , - 4851 , - 1178 , - 4609 , - 2856 , - 2063 , - 2230 , - 3357 , - 5444 , - 2347 , - 210 , - 5177 , - 4960 , - 5703 , - 1262 , - 3925 , - 1404 , - 5987 , - 5386 , - 5745 , - 920 , - 3199 , - 294 , - 4493 , - 3508 , - 3483 , - 4418 , - 169 , - 3024 , - 695 , - 5470 , - 5061 , - 5612 , - 979 , - 3450 , - 737 , - 5128 , - 4335 , - 4502 , - 5629 , - 1572 , - 4619 , - 2482 , - 1305 , - 1088 , - 1831 , - 3534 , - 53 , - 3676 , - 2115 , - 1514 , - 1873 , - 3192 , - 5471 , - 2566 , - 621 , - 5780 , - 5755 , - 546 , - 2441 , - 5296 , - 2967 , - 1598 , - 1189 , - 1740 , - 3251 , - 5722 , - 3009 , - 1256 , - 463 , - 630 , - 1757 , - 3844 , - 747 , - 4754 , - 3577 , - 3360 , - 4103 , - 5806 , - 2325 , - 5948 , - 4387 , - 3786 , - 4145 , - 5464 , - 1599 , - 4838 , - 2893 , - 1908 , - 1883 , - 2818 , - 4713 , - 1424 , - 5239 , - 3870 , - 3461 , - 4012 , - 5523 , - 1850 , - 5281 , - 3528 , - 2735 , - 2902 , - 4029 , - 6116 , - 3019 , - 882 , - 5849 , - 5632 , - 231 , - 1934 , - 4597 , - 2076 , - 515 , - 6058 , - 273 , - 1592 , - 3871 , - 966 , - 5165 , - 4180 , - 4155 , - 5090 , - 841 , - 3696 , - 1367 , - 6142 , - 5733 , - 140 , - 1651 , - 4122 , - 1409 , - 5800 , - 5007 , - 5174 , - 157 , - 2244 , - 5291 , - 3154 , - 1977 , - 1760 , - 2503 , - 4206 , - 725 , - 4348 , - 2787 , - 2186 , - 2545 , - 3864 , - 6143 , - 3238 , - 1293 , - 308 , - 283 , - 1218 , - 3113 , - 5968 , - 3639 , - 2270 , - 1861 , - 2412 , - 3923 , - 250 , - 3681 , - 1928 , - 1135 , - 1302 , - 2429 , - 4516 , - 1419 , - 5426 , - 4249 , - 4032 , - 4775 , - 334 , - 2997 , - 476 , - 5059 , - 4458 , - 4817 , - 6136 , - 2271 , - 5510 , - 3565 , - 2580 , - 2555 , - 3490 , - 5385 , - 2096 , - 5911 , - 4542 , - 4133 , - 4684 , - 51 , - 2522 , - 5953 , - 4200 , - 3407 , - 3574 , - 4701 , - 644 , - 3691 , - 1554 , - 377 , - 160 , - 903 , - 2606 , - 5269 , - 2748 , - 1187 , - 586 , - 945 , - 2264 , - 4543 , - 1638 , - 5837 , - 4852 , - 4827 , - 5762 , - 1513 , - 4368 , - 2039 , - 670 , - 261 , - 812 , - 2323 , - 4794 , - 2081 , - 328 , - 5679 , - 5846 , - 829 , - 2916 , - 5963 , - 3826 , - 2649 , - 2432 , - 3175 , - 4878 , - 1397 , - 5020 , - 3459 , - 2858 , - 3217 , - 4536 , - 671 , - 3910 , - 1965 , - 980 , - 955 , - 1890 , - 3785 , - 496 , - 4311 , - 2942 , - 2533 , - 3084 , - 4595 , - 922 , - 4353 , - 2600 , - 1807 , - 1974 , - 3101 , - 5188 , - 2091 , - 6098 , - 4921 , - 4704 , - 5447 , - 1006 , - 3669 , - 1148 , - 5731 , - 5130 , - 5489 , - 664 , - 2943 , - 38 , - 4237 , - 3252 , - 3227 , - 4162 , - 6057 , - 2768 , - 439 , - 5214 , - 4805 , - 5356 , - 723 , - 3194 , - 481 , - 4872 , - 4079 , - 4246 , - 5373 , - 1316 , - 4363 , - 2226 , - 1049 , - 832 , - 1575 , - 3278 , - 5941 , - 3420 , - 1859 , - 1258 , - 1617 , - 2936 , - 5215 , - 2310 , - 365 , - 5524 , - 5499 , - 290 , - 2185 , - 5040 , - 2711 , - 1342 , - 933 , - 1484 , - 2995 , - 5466 , - 2753 , - 1000 , - 207 , - 374 , - 1501 , - 3588 , - 491 , - 4498 , - 3321 , - 3104 , - 3847 , - 5550 , - 2069 , - 5692 , - 4131 , - 3530 , - 3889 , - 5208 , - 1343 , - 4582 , - 2637 , - 1652 , - 1627 , - 2562 , - 4457 , - 1168 , - 4983 , - 3614 , - 3205 , - 3756 , - 5267 , - 1594 , - 5025 , - 3272 , - 2479 , - 2646 , - 3773 , - 5860 , - 2763 , - 626 , - 5593 , - 5376 , - 6119 , - 1678 , - 4341 , - 1820 , - 259 , - 5802 , - 17 , - 1336 , - 3615 , - 710 , - 4909 , - 3924 , - 3899 , - 4834 , - 585 , - 3440 , - 1111 , - 5886 , - 5477 , - 6028 , - 1395 , - 3866 , - 1153 , - 5544 , - 4751 , - 4918 , - 6045 , - 1988 , - 5035 , - 2898 , - 1721 , - 1504 , - 2247 , - 3950 , - 469 , - 4092 , - 2531 , - 1930 , - 2289 , - 3608 , - 5887 , - 2982 , - 1037 , - 52 , - 27 , - 962 , - 2857 , - 5712 , - 3383 , - 2014 , - 1605 , - 2156 , - 3667 , - 6138 , - 3425 , - 1672 , - 879 , - 1046 , - 2173 , - 4260 , - 1163 , - 5170 , - 3993 , - 3776 , - 4519 , - 78 , - 2741 , - 220 , - 4803 , - 4202 , - 4561 , - 5880 , - 2015 , - 5254 , - 3309 , - 2324 , - 2299 , - 3234 , - 5129 , - 1840 , - 5655 , - 4286 , - 3877 , - 4428 , - 5939 , - 2266 , - 5697 , - 3944 , - 3151 , - 3318 , - 4445 , - 388 , - 3435 , - 1298 , - 121 , - 6048 , - 647 , - 2350 , - 5013 , - 2492 , - 931 , - 330 , - 689 , - 2008 , - 4287 , - 1382 , - 5581 , - 4596 , - 4571 , - 5506 , - 1257 , - 4112 , - 1783 , - 414 , - 5 , - 556 , - 2067 , - 4538 , - 1825 , - 72 , - 5423 , - 5590 , - 573 , - 2660 , - 5707 , - 3570 , - 2393 , - 2176 , - 2919 , - 4622 , - 1141 , - 4764 , - 3203 , - 2602 , - 2961 , - 4280 , - 415 , - 3654 , - 1709 , - 724 , - 699 , - 1634 , - 3529 , - 240 , - 4055 , - 2686 , - 2277 , - 2828 , - 4339 , - 666 , - 4097 , - 2344 , - 1551 , - 1718 , - 2845 , - 4932 , - 1835 , - 5842 , - 4665 , - 4448 , - 5191 , - 750 , - 3413 , - 892 , - 5475 , - 4874 , - 5233 , - 408 , - 2687 , - 5926 , - 3981 , - 2996 , - 2971 , - 3906 , - 5801 , - 2512 , - 183 , - 4958 , - 4549 , - 5100 , - 467 , - 2938 , - 225 , - 4616 , - 3823 , - 3990 , - 5117 , - 1060 , - 4107 , - 1970 , - 793 , - 576 , - 1319 , - 3022 , - 5685 , - 3164 , - 1603 , - 1002 , - 1361 , - 2680 , - 4959 , - 2054 , - 109 , - 5268 , - 5243 , - 34 , - 1929 , - 4784 , - 2455 , - 1086 , - 677 , - 1228 , - 2739 , - 5210 , - 2497 , - 744 , - 6095 , - 118 , - 1245 , - 3332 , - 235 , - 4242 , - 3065 , - 2848 , - 3591 , - 5294 , - 1813 , - 5436 , - 3875 , - 3274 , - 3633 , - 4952 , - 1087 , - 4326 , - 2381 , - 1396 , - 1371 , - 2306 , - 4201 , - 912 , - 4727 , - 3358 , - 2949 , - 3500 , - 5011 , - 1338 , - 4769 , - 3016 , - 2223 , - 2390 , - 3517 , - 5604 , - 2507 , - 370 , - 5337 , - 5120 , - 5863 , - 1422 , - 4085 , - 1564 , - 3 , - 5546 , - 5905 , - 1080 , - 3359 , - 454 , - 4653 , - 3668 , - 3643 , - 4578 , - 329 , - 3184 , - 855 , - 5630 , - 5221 , - 5772 , - 1139 , - 3610 , - 897 , - 5288 , - 4495 , - 4662 , - 5789 , - 1732 , - 4779 , - 2642 , - 1465 , - 1248 , - 1991 , - 3694 , - 213 , - 3836 , - 2275 , - 1674 , - 2033 , - 3352 , - 5631 , - 2726 , - 781 , - 5940 , - 5915 , - 706 , - 2601 , - 5456 , - 3127 , - 1758 , - 1349 , - 1900 , - 3411 , - 5882 , - 3169 , - 1416 , - 623 , - 790 , - 1917 , - 4004 , - 907 , - 4914 , - 3737 , - 3520 , - 4263 , - 5966 , - 2485 , - 6108 , - 4547 , - 3946 , - 4305 , - 5624 , - 1759 , - 4998 , - 3053 , - 2068 , - 2043 , - 2978 , - 4873 , - 1584 , - 5399 , - 4030 , - 3621 , - 4172 , - 5683 , - 2010 , - 5441 , - 3688 , - 2895 , - 3062 , - 4189 , - 132 , - 3179 , - 1042 , - 6009 , - 5792 , - 391 , - 2094 , - 4757 , - 2236 , - 675 , - 74 , - 433 , - 1752 , - 4031 , - 1126 , - 5325 , - 4340 , - 4315 , - 5250 , - 1001 , - 3856 , - 1527 , - 158 , - 5893 , - 300 , - 1811 , - 4282 , - 1569 , - 5960 , - 5167 , - 5334 , - 317 , - 2404 , - 5451 , - 3314 , - 2137 , - 1920 , - 2663 , - 4366 , - 885 , - 4508 , - 2947 , - 2346 , - 2705 , - 4024 , - 159 , - 3398 , - 1453 , - 468 , - 443 , - 1378 , - 3273 , - 6128 , - 3799 , - 2430 , - 2021 , - 2572 , - 4083 , - 410 , - 3841 , - 2088 , - 1295 , - 1462 , - 2589 , - 4676 , - 1579 , - 5586 , - 4409 , - 4192 , - 4935 , - 494 , - 3157 , - 636 , - 5219 , - 4618 , - 4977 , - 152 , - 2431 , - 5670 , - 3725 , - 2740 , - 2715 , - 3650 , - 5545 , - 2256 , - 6071 , - 4702 , - 4293 , - 4844 , - 211 , - 2682 , - 6113 , - 4360 , - 3567 , - 3734 , - 4861 , - 804 , - 3851 , - 1714 , - 537 , - 320 , - 1063 , - 2766 , - 5429 , - 2908 , - 1347 , - 746 , - 1105 , - 2424 , - 4703 , - 1798 , - 5997 , - 5012 , - 4987 , - 5922 , - 1673 , - 4528 , - 2199 , - 830 , - 421 , - 972 , - 2483 , - 4954 , - 2241 , - 488 , - 5839 , - 6006 , - 989 , - 3076 , - 6123 , - 3986 , - 2809 , - 2592 , - 3335 , - 5038 , - 1557 , - 5180 , - 3619 , - 3018 , - 3377 , - 4696 , - 831 , - 4070 , - 2125 , - 1140 , - 1115 , - 2050 , - 3945 , - 656 , - 4471 , - 3102 , - 2693 , - 3244 , - 4755 , - 1082 , - 4513 , - 2760 , - 1967 , - 2134 , - 3261 , - 5348 , - 2251 , - 114 , - 5081 , - 4864 , - 5607 , - 1166 , - 3829 , - 1308 , - 5891 , - 5290 , - 5649 , - 824 , - 3103 , - 198 , - 4397 , - 3412 , - 3387 , - 4322 , - 73 , - 2928 , - 599 , - 5374 , - 4965 , - 5516 , - 883 , - 3354 , - 641 , - 5032 , - 4239 , - 4406 , - 5533 , - 1476 , - 4523 , - 2386 , - 1209 , - 992 , - 1735 , - 3438 , - 6101 , - 3580 , - 2019 , - 1418 , - 1777 , - 3096 , - 5375 , - 2470 , - 525 , - 5684 , - 5659 , - 450 , - 2345 , - 5200 , - 2871 , - 1502 , - 1093 , - 1644 , - 3155 , - 5626 , - 2913 , - 1160 , - 367 , - 534 , - 1661 , - 3748 , - 651 , - 4658 , - 3481 , - 3264 , - 4007 , - 5710 , - 2229 , - 5852 , - 4291 , - 3690 , - 4049 , - 5368 , - 1503 , - 4742 , - 2797 , - 1812 , - 1787 , - 2722 , - 4617 , - 1328 , - 5143 , - 3774 , - 3365 , - 3916 , - 5427 , - 1754 , - 5185 , - 3432 , - 2639 , - 2806 , - 3933 , - 6020 , - 2923 , - 786 , - 5753 , - 5536 , - 135 , - 1838 , - 4501 , - 1980 , - 419 , - 5962 , - 177 , - 1496 , - 3775 , - 870 , - 5069 , - 4084 , - 4059 , - 4994 , - 745 , - 3600 , - 1271 , - 6046 , - 5637 , - 44 , - 1555 , - 4026 , - 1313 , - 5704 , - 4911 , - 5078 , - 61 , - 2148 , - 5195 , - 3058 , - 1881 , - 1664 , - 2407 , - 4110 , - 629 , - 4252 , - 2691 , - 2090 , - 2449 , - 3768 , - 6047 , - 3142 , - 1197 , - 212 , - 187 , - 1122 , - 3017 , - 5872 , - 3543 , - 2174 , - 1765 , - 2316 , - 3827 , - 154 , - 3585 , - 1832 , - 1039 , - 1206 , - 2333 , - 4420 , - 1323 , - 5330 , - 4153 , - 3936 , - 4679 , - 238 , - 2901 , - 380 , - 4963 , - 4362 , - 4721 , - 6040 , - 2175 , - 5414 , - 3469 , - 2484 , - 2459 , - 3394 , - 5289 , - 2000 , - 5815 , - 4446 , - 4037 , - 4588 , - 6099 , - 2426 , - 5857 , - 4104 , - 3311 , - 3478 , - 4605 , - 548 , - 3595 , - 1458 , - 281 , - 64 , - 807 , - 2510 , - 5173 , - 2652 , - 1091 , - 490 , - 849 , - 2168 , - 4447 , - 1542 , - 5741 , - 4756 , - 4731 , - 5666 , - 1417 , - 4272 , - 1943 , - 574 , - 165 , - 716 , - 2227 , - 4698 , - 1985 , - 232 , - 5583 , - 5750 , - 733 , - 2820 , - 5867 , - 3730 , - 2553 , - 2336 , - 3079 , - 4782 , - 1301 , - 4924 , - 3363 , - 2762 , - 3121 , - 4440 , - 575 , - 3814 , - 1869 , - 884 , - 859 , - 1794 , - 3689 , - 400 , - 4215 , - 2846 , - 2437 , - 2988 , - 4499 , - 826 , - 4257 , - 2504 , - 1711 , - 1878 , - 3005 , - 5092 , - 1995 , - 6002 , - 4825 , - 4608 , - 5351 , - 910 , - 3573 , - 1052 , - 5635 , - 5034 , - 5393 , - 568 , - 2847 , - 6086 , - 4141 , - 3156 , - 3131 , - 4066 , - 5961 , - 2672 , - 343 , - 5118 , - 4709 , - 5260 , - 627 , - 3098 , - 385 , - 4776 , - 3983 , - 4150 , - 5277 , - 1220 , - 4267 , - 2130 , - 953 , - 736 , - 1479 , - 3182 , - 5845 , - 3324 , - 1763 , - 1162 , - 1521 , - 2840 , - 5119 , - 2214 , - 269 , - 5428 , - 5403 , - 194 , - 2089 , - 4944 , - 2615 , - 1246 , - 837 , - 1388 , - 2899 , - 5370 , - 2657 , - 904 , - 111 , - 278 , - 1405 , - 3492 , - 395 , - 4402 , - 3225 , - 3008 , - 3751 , - 5454 , - 1973 , - 5596 , - 4035 , - 3434 , - 3793 , - 5112 , - 1247 , - 4486 , - 2541 , - 1556 , - 1531 , - 2466 , - 4361 , - 1072 , - 4887 , - 3518 , - 3109 , - 3660 , - 5171 , - 1498 , - 4929 , - 3176 , - 2383 , - 2550 , - 3677 , - 5764 , - 2667 , - 530 , - 5497 , - 5280 , - 6023 , - 1582 , - 4245 , - 1724 , - 163 , - 5706 , - 6065 , - 1240 , - 3519 , - 614 , - 4813 , - 3828 , - 3803 , - 4738 , - 489 , - 3344 , - 1015 , - 5790 , - 5381 , - 5932 , - 1299 , - 3770 , - 1057 , - 5448 , - 4655 , - 4822 , - 5949 , - 1892 , - 4939 , - 2802 , - 1625 , - 1408 , - 2151 , - 3854 , - 373 , - 3996 , - 2435 , - 1834 , - 2193 , - 3512 , - 5791 , - 2886 , - 941 , - 6100 , - 6075 , - 866 , - 2761 , - 5616 , - 3287 , - 1918 , - 1509 , - 2060 , - 3571 , - 6042 , - 3329 , - 1576 , - 783 , - 950 , - 2077 , - 4164 , - 1067 , - 5074 , - 3897 , - 3680 , - 4423 , - 6126 , - 2645 , - 124 , - 4707 , - 4106 , - 4465 , - 5784 , - 1919 , - 5158 , - 3213 , - 2228 , - 2203 , - 3138 , - 5033 , - 1744 , - 5559 , - 4190 , - 3781 , - 4332 , - 5843 , - 2170 , - 5601 , - 3848 , - 3055 , - 3222 , - 4349 , - 292 , - 3339 , - 1202 , - 25 , - 5952 , - 551 , - 2254 , - 4917 , - 2396 , - 835 , - 234 , - 593 , - 1912 , - 4191 , - 1286 , - 5485 , - 4500 , - 4475 , - 5410 , - 1161 , - 4016 , - 1687 , - 318 , - 6053 , - 460 , - 1971 , - 4442 , - 1729 , - 6120 , - 5327 , - 5494 , - 477 , - 2564 , - 5611 , - 3474 , - 2297 , - 2080 , - 2823 , - 4526 , - 1045 , - 4668 , - 3107 , - 2506 , - 2865 , - 4184 , - 319 , - 3558 , - 1613 , - 628 , - 603 , - 1538 , - 3433 , - 144 , - 3959 , - 2590 , - 2181 , - 2732 , - 4243 , - 570 , - 4001 , - 2248 , - 1455 , - 1622 , - 2749 , - 4836 , - 1739 , - 5746 , - 4569 , - 4352 , - 5095 , - 654 , - 3317 , - 796 , - 5379 , - 4778 , - 5137 , - 312 , - 2591 , - 5830 , - 3885 , - 2900 , - 2875 , - 3810 , - 5705 , - 2416 , - 87 , - 4862 , - 4453 , - 5004 , - 371 , - 2842 , - 129 , - 4520 , - 3727 , - 3894 , - 5021 , - 964 , - 4011 , - 1874 , - 697 , - 480 , - 1223 , - 2926 , - 5589 , - 3068 , - 1507 , - 906 , - 1265 , - 2584 , - 4863 , - 1958 , - 13 , - 5172 , - 5147 , - 6082 , - 1833 , - 4688 , - 2359 , - 990 , - 581 , - 1132 , - 2643 , - 5114 , - 2401 , - 648 , - 5999 , - 22 , - 1149 , - 3236 , - 139 , - 4146 , - 2969 , - 2752 , - 3495 , - 5198 , - 1717 , - 5340 , - 3779 , - 3178 , - 3537 , - 4856 , - 991 , - 4230 , - 2285 , - 1300 , - 1275 , - 2210 , - 4105 , - 816 , - 4631 , - 3262 , - 2853 , - 3404 , - 4915 , - 1242 , - 4673 , - 2920 , - 2127 , - 2294 , - 3421 , - 5508 , - 2411 , - 274 , - 5241 , - 5024 , - 5767 , - 1326 , - 3989 , - 1468 , - 6051 , - 5450 , - 5809 , - 984 , - 3263 , - 358 , - 4557 , - 3572 , - 3547 , - 4482 , - 233 , - 3088 , - 759 , - 5534 , - 5125 , - 5676 , - 1043 , - 3514 , - 801 , - 5192 , - 4399 , - 4566 , - 5693 , - 1636 , - 4683 , - 2546 , - 1369 , - 1152 , - 1895 , - 3598 , - 117 , - 3740 , - 2179 , - 1578 , - 1937 , - 3256 , - 5535 , - 2630 , - 685 , - 5844 , - 5819 , - 610 , - 2505 , - 5360 , - 3031 , - 1662 , - 1253 , - 1804 , - 3315 , - 5786 , - 3073 , - 1320 , - 527 , - 694 , - 1821 , - 3908 , - 811 , - 4818 , - 3641 , - 3424 , - 4167 , - 5870 , - 2389 , - 6012 , - 4451 , - 3850 , - 4209 , - 5528 , - 1663 , - 4902 , - 2957 , - 1972 , - 1947 , - 2882 , - 4777 , - 1488 , - 5303 , - 3934 , - 3525 , - 4076 , - 5587 , - 1914 , - 5345 , - 3592 , - 2799 , - 2966 , - 4093 , - 36 , - 3083 , - 946 , - 5913 , - 5696 , - 295 , - 1998 , - 4661 , - 2140 , - 579 , - 6122 , - 337 , - 1656 , - 3935 , - 1030 , - 5229 , - 4244 , - 4219 , - 5154 , - 905 , - 3760 , - 1431 , - 62 , - 5797 , - 204 , - 1715 , - 4186 , - 1473 , - 5864 , - 5071 , - 5238 , - 221 , - 2308 , - 5355 , - 3218 , - 2041 , - 1824 , - 2567 , - 4270 , - 789 , - 4412 , - 2851 , - 2250 , - 2609 , - 3928 , - 63 , - 3302 , - 1357 , - 372 , - 347 , - 1282 , - 3177 , - 6032 , - 3703 , - 2334 , - 1925 , - 2476 , - 3987 , - 314 , - 3745 , - 1992 , - 1199 , - 1366 , - 2493 , - 4580 , - 1483 , - 5490 , - 4313 , - 4096 , - 4839 , - 398 , - 3061 , - 540 , - 5123 , - 4522 , - 4881 , - 56 , - 2335 , - 5574 , - 3629 , - 2644 , - 2619 , - 3554 , - 5449 , - 2160 , - 5975 , - 4606 , - 4197 , - 4748 , - 115 , - 2586 , - 6017 , - 4264 , - 3471 , - 3638 , - 4765 , - 708 , - 3755 , - 1618 , - 441 , - 224 , - 967 , - 2670 , - 5333 , - 2812 , - 1251 , - 650 , - 1009 , - 2328 , - 4607 , - 1702 , - 5901 , - 4916 , - 4891 , - 5826 , - 1577 , - 4432 , - 2103 , - 734 , - 325 , - 876 , - 2387 , - 4858 , - 2145 , - 392 , - 5743 , - 5910 , - 893 , - 2980 , - 6027 , - 3890 , - 2713 , - 2496 , - 3239 , - 4942 , - 1461 , - 5084 , - 3523 , - 2922 , - 3281 , - 4600 , - 735 , - 3974 , - 2029 , - 1044 , - 1019 , - 1954 , - 3849 , - 560 , - 4375 , - 3006 , - 2597 , - 3148 , - 4659 , - 986 , - 4417 , - 2664 , - 1871 , - 2038 , - 3165 , - 5252 , - 2155 , - 18 , - 4985 , - 4768 , - 5511 , - 1070 , - 3733 , - 1212 , - 5795 , - 5194 , - 5553 , - 728 , - 3007 , - 102 , - 4301 , - 3316 , - 3291 , - 4226 , - 6121 , - 2832 , - 503 , - 5278 , - 4869 , - 5420 , - 787 , - 3258 , - 545 , - 4936 , - 4143 , - 4310 , - 5437 , - 1380 , - 4427 , - 2290 , - 1113 , - 896 , - 1639 , - 3342 , - 6005 , - 3484 , - 1923 , - 1322 , - 1681 , - 3000 , - 5279 , - 2374 , - 429 , - 5588 , - 5563 , - 354 , - 2249 , - 5104 , - 2775 , - 1406 , - 997 , - 1548 , - 3059 , - 5530 , - 2817 , - 1064 , - 271 , - 438 , - 1565 , - 3652 , - 555 , - 4562 , - 3385 , - 3168 , - 3911 , - 5614 , - 2133 , - 5756 , - 4195 , - 3594 , - 3953 , - 5272 , - 1407 , - 4646 , - 2701 , - 1716 , - 1691 , - 2626 , - 4521 , - 1232 , - 5047 , - 3678 , - 3269 , - 3820 , - 5331 , - 1658 , - 5089 , - 3336 , - 2543 , - 2710 , - 3837 , - 5924 , - 2827 , - 690 , - 5657 , - 5440 , - 39 , - 1742 , - 4405 , - 1884 , - 323 , - 5866 , - 81 , - 1400 , - 3679 , - 774 , - 4973 , - 3988 , - 3963 , - 4898 , - 649 , - 3504 , - 1175 , - 5950 , - 5541 , - 6092 , - 1459 , - 3930 , - 1217 , - 5608 , - 4815 , - 4982 , - 6109 , - 2052 , - 5099 , - 2962 , - 1785 , - 1568 , - 2311 , - 4014 , - 533 , - 4156 , - 2595 , - 1994 , - 2353 , - 3672 , - 5951 , - 3046 , - 1101 , - 116 , - 91 , - 1026 , - 2921 , - 5776 , - 3447 , - 2078 , - 1669 , - 2220 , - 3731 , - 58 , - 3489 , - 1736 , - 943 , - 1110 , - 2237 , - 4324 , - 1227 , - 5234 , - 4057 , - 3840 , - 4583 , - 142 , - 2805 , - 284 , - 4867 , - 4266 , - 4625 , - 5944 , - 2079 , - 5318 , - 3373 , - 2388 , - 2363 , - 3298 , - 5193 , - 1904 , - 5719 , - 4350 , - 3941 , - 4492 , - 6003 , - 2330 , - 5761 , - 4008 , - 3215 , - 3382 , - 4509 , - 452 , - 3499 , - 1362 , - 185 , - 6112 , - 711 , - 2414 , - 5077 , - 2556 , - 995 , - 394 , - 753 , - 2072 , - 4351 , - 1446 , - 5645 , - 4660 , - 4635 , - 5570 , - 1321 , - 4176 , - 1847 , - 478 , - 69 , - 620 , - 2131 , - 4602 , - 1889 , - 136 , - 5487 , - 5654 , - 637 , - 2724 , - 5771 , - 3634 , - 2457 , - 2240 , - 2983 , - 4686 , - 1205 , - 4828 , - 3267 , - 2666 , - 3025 , - 4344 , - 479 , - 3718 , - 1773 , - 788 , - 763 , - 1698 , - 3593 , - 304 , - 4119 , - 2750 , - 2341 , - 2892 , - 4403 , - 730 , - 4161 , - 2408 , - 1615 , - 1782 , - 2909 , - 4996 , - 1899 , - 5906 , - 4729 , - 4512 , - 5255 , - 814 , - 3477 , - 956 , - 5539 , - 4938 , - 5297 , - 472 , - 2751 , - 5990 , - 4045 , - 3060 , - 3035 , - 3970 , - 5865 , - 2576 , - 247 , - 5022 , - 4613 , - 5164 , - 531 , - 3002 , - 289 , - 4680 , - 3887 , - 4054 , - 5181 , - 1124 , - 4171 , - 2034 , - 857 , - 640 , - 1383 , - 3086 , - 5749 , - 3228 , - 1667 , - 1066 , - 1425 , - 2744 , - 5023 , - 2118 , - 173 , - 5332 , - 5307 , - 98 , - 1993 , - 4848 , - 2519 , - 1150 , - 741 , - 1292 , - 2803 , - 5274 , - 2561 , - 808 , - 15 , - 182 , - 1309 , - 3396 , - 299 , - 4306 , - 3129 , - 2912 , - 3655 , - 5358 , - 1877 , - 5500 , - 3939 , - 3338 , - 3697 , - 5016 , - 1151 , - 4390 , - 2445 , - 1460 , - 1435 , - 2370 , - 4265 , - 976 , - 4791 , - 3422 , - 3013 , - 3564 , - 5075 , - 1402 , - 4833 , - 3080 , - 2287 , - 2454 , - 3581 , - 5668 , - 2571 , - 434 , - 5401 , - 5184 , - 5927 , - 1486 , - 4149 , - 1628 , - 67 , - 5610 , - 5969 , - 1144 , - 3423 , - 518 , - 4717 , - 3732 , - 3707 , - 4642 , - 393 , - 3248 , - 919 , - 5694 , - 5285 , - 5836 , - 1203 , - 3674 , - 961 , - 5352 , - 4559 , - 4726 , - 5853 , - 1796 , - 4843 , - 2706 , - 1529 , - 1312 , - 2055 , - 3758 , - 277 , - 3900 , - 2339 , - 1738 , - 2097 , - 3416 , - 5695 , - 2790 , - 845 , - 6004 , - 5979 , - 770 , - 2665 , - 5520 , - 3191 , - 1822 , - 1413 , - 1964 , - 3475 , - 5946 , - 3233 , - 1480 , - 687 , - 854 , - 1981 , - 4068 , - 971 , - 4978 , - 3801 , - 3584 , - 4327 , - 6030 , - 2549 , - 28 , - 4611 , - 4010 , - 4369 , - 5688 , - 1823 , - 5062 , - 3117 , - 2132 , - 2107 , - 3042 , - 4937 , - 1648 , - 5463 , - 4094 , - 3685 , - 4236 , - 5747 , - 2074 , - 5505 , - 3752 , - 2959 , - 3126 , - 4253 , - 196 , - 3243 , - 1106 , - 6073 , - 5856 , - 455 , - 2158 , - 4821 , - 2300 , - 739 , - 138 , - 497 , - 1816 , - 4095 , - 1190 , - 5389 , - 4404 , - 4379 , - 5314 , - 1065 , - 3920 , - 1591 , - 222 , - 5957 , - 364 , - 1875 , - 4346 , - 1633 , - 6024 , - 5231 , - 5398 , - 381 , - 2468 , - 5515 , - 3378 , - 2201 , - 1984 , - 2727 , - 4430 , - 949 , - 4572 , - 3011 , - 2410 , - 2769 , - 4088 , - 223 , - 3462 , - 1517 , - 532 , - 507 , - 1442 , - 3337 , - 48 , - 3863 , - 2494 , - 2085 , - 2636 , - 4147 , - 474 , - 3905 , - 2152 , - 1359 , - 1526 , - 2653 , - 4740 , - 1643 , - 5650 , - 4473 , - 4256 , - 4999 , - 558 , - 3221 , - 700 , - 5283 , - 4682 , - 5041 , - 216 , - 2495 , - 5734 , - 3789 , - 2804 , - 2779 , - 3714 , - 5609 , - 2320 , - 6135 , - 4766 , - 4357 , - 4908 , - 275 , - 2746 , - 33 , - 4424 , - 3631 , - 3798 , - 4925 , - 868 , - 3915 , - 1778 , - 601 , - 384 , - 1127 , - 2830 , - 5493 , - 2972 , - 1411 , - 810 , - 1169 , - 2488 , - 4767 , - 1862 , - 6061 , - 5076 , - 5051 , - 5986 , - 1737 , - 4592 , - 2263 , - 894 , - 485 , - 1036 , - 2547 , - 5018 , - 2305 , - 552 , - 5903 , - 6070 , - 1053 , - 3140 , - 43 , - 4050 , - 2873 , - 2656 , - 3399 , - 5102 , - 1621 , - 5244 , - 3683 , - 3082 , - 3441 , - 4760 , - 895 , - 4134 , - 2189 , - 1204 , - 1179 , - 2114 , - 4009 , - 720 , - 4535 , - 3166 , - 2757 , - 3308 , - 4819 , - 1146 , - 4577 , - 2824 , - 2031 , - 2198 , - 3325 , - 5412 , - 2315 , - 178 , - 5145 , - 4928 , - 5671 , - 1230 , - 3893 , - 1372 , - 5955 , - 5354 , - 5713 , - 888 , - 3167 , - 262 , - 4461 , - 3476 , - 3451 , - 4386 , - 137 , - 2992 , - 663 , - 5438 , - 5029 , - 5580 , - 947 , - 3418 , - 705 , - 5096 , - 4303 , - 4470 , - 5597 , - 1540 , - 4587 , - 2450 , - 1273 , - 1056 , - 1799 , - 3502 , - 21 , - 3644 , - 2083 , - 1482 , - 1841 , - 3160 , - 5439 , - 2534 , - 589 , - 5748 , - 5723 , - 514 , - 2409 , - 5264 , - 2935 , - 1566 , - 1157 , - 1708 , - 3219 , - 5690 , - 2977 , - 1224 , - 431 , - 598 , - 1725 , - 3812 , - 715 , - 4722 , - 3545 , - 3328 , - 4071 , - 5774 , - 2293 , - 5916 , - 4355 , - 3754 , - 4113 , - 5432 , - 1567 , - 4806 , - 2861 , - 1876 , - 1851 , - 2786 , - 4681 , - 1392 , - 5207 , - 3838 , - 3429 , - 3980 , - 5491 , - 1818 , - 5249 , - 3496 , - 2703 , - 2870 , - 3997 , - 6084 , - 2987 , - 850 , - 5817 , - 5600 , - 199 , - 1902 , - 4565 , - 2044 , - 483 , - 6026 , - 241 , - 1560 , - 3839 , - 934 , - 5133 , - 4148 , - 4123 , - 5058 , - 809 , - 3664 , - 1335 , - 6110 , - 5701 , - 108 , - 1619 , - 4090 , - 1377 , - 5768 , - 4975 , - 5142 , - 125 , - 2212 , - 5259 , - 3122 , - 1945 , - 1728 , - 2471 , - 4174 , - 693 , - 4316 , - 2755 , - 2154 , - 2513 , - 3832 , - 6111 , - 3206 , - 1261 , - 276 , - 251 , - 1186 , - 3081 , - 5936 , - 3607 , - 2238 , - 1829 , - 2380 , - 3891 , - 218 , - 3649 , - 1896 , - 1103 , - 1270 , - 2397 , - 4484 , - 1387 , - 5394 , - 4217 , - 4000 , - 4743 , - 302 , - 2965 , - 444 , - 5027 , - 4426 , - 4785 , - 6104 , - 2239 , - 5478 , - 3533 , - 2548 , - 2523 , - 3458 , - 5353 , - 2064 , - 5879 , - 4510 , - 4101 , - 4652 , - 19 , - 2490 , - 5921 , - 4168 , - 3375 , - 3542 , - 4669 , - 612 , - 3659 , - 1522 , - 345 , - 128 , - 871 , - 2574 , - 5237 , - 2716 , - 1155 , - 554 , - 913 , - 2232 , - 4511 , - 1606 , - 5805 , - 4820 , - 4795 , - 5730 , - 1481 , - 4336 , - 2007 , - 638 , - 229 , - 780 , - 2291 , - 4762 , - 2049 , - 296 , - 5647 , - 5814 , - 797 , - 2884 , - 5931 , - 3794 , - 2617 , - 2400 , - 3143 , - 4846 , - 1365 , - 4988 , - 3427 , - 2826 , - 3185 , - 4504 , - 639 , - 3878 , - 1933 , - 948 , - 923 , - 1858 , - 3753 , - 464 , - 4279 , - 2910 , - 2501 , - 3052 , - 4563 , - 890 , - 4321 , - 2568 , - 1775 , - 1942 , - 3069 , - 5156 , - 2059 , - 6066 , - 4889 , - 4672 , - 5415 , - 974 , - 3637 , - 1116 , - 5699 , - 5098 , - 5457 , - 632 , - 2911 , - 6 , - 4205 , - 3220 , - 3195 , - 4130 , - 6025 , - 2736 , - 407 , - 5182 , - 4773 , - 5324 , - 691 , - 3162 , - 449 , - 4840 , - 4047 , - 4214 , - 5341 , - 1284 , - 4331 , - 2194 , - 1017 , - 800 , - 1543 , - 3246 , - 5909 , - 3388 , - 1827 , - 1226 , - 1585 , - 2904 , - 5183 , - 2278 , - 333 , - 5492 , - 5467 , - 258 , - 2153 , - 5008 , - 2679 , - 1310 , - 901 , - 1452 , - 2963 , - 5434 , - 2721 , - 968 , - 175 , - 342 , - 1469 , - 3556 , - 459 , - 4466 , - 3289 , - 3072 , - 3815 , - 5518 , - 2037 , - 5660 , - 4099 , - 3498 , - 3857 , - 5176 , - 1311 , - 4550 , - 2605 , - 1620 , - 1595 , - 2530 , - 4425 , - 1136 , - 4951 , - 3582 , - 3173 , - 3724 , - 5235 , - 1562 , - 4993 , - 3240 , - 2447 , - 2614 , - 3741 , - 5828 , - 2731 , - 594 , - 5561 , - 5344 , - 6087 , - 1646 , - 4309 , - 1788 , - 227 , - 5770 , - 6129 , - 1304 , - 3583 , - 678 , - 4877 , - 3892 , - 3867 , - 4802 , - 553 , - 3408 , - 1079 , - 5854 , - 5445 , - 5996 , - 1363 , - 3834 , - 1121 , - 5512 , - 4719 , - 4886 , - 6013 , - 1956 , - 5003 , - 2866 , - 1689 , - 1472 , - 2215 , - 3918 , - 437 , - 4060 , - 2499 , - 1898 , - 2257 , - 3576 , - 5855 , - 2950 , - 1005 , - 20 , - 6139 , - 930 , - 2825 , - 5680 , - 3351 , - 1982 , - 1573 , - 2124 , - 3635 , - 6106 , - 3393 , - 1640 , - 847 , - 1014 , - 2141 , - 4228 , - 1131 , - 5138 , - 3961 , - 3744 , - 4487 , - 46 , - 2709 , - 188 , - 4771 , - 4170 , - 4529 , - 5848 , - 1983 , - 5222 , - 3277 , - 2292 , - 2267 , - 3202 , - 5097 , - 1808 , - 5623 , - 4254 , - 3845 , - 4396 , - 5907 , - 2234 , - 5665 , - 3912 , - 3119 , - 3286 , - 4413 , - 356 , - 3403 , - 1266 , - 89 , - 6016 , - 615 , - 2318 , - 4981 , - 2460 , - 899 , - 298 , - 657 , - 1976 , - 4255 , - 1350 , - 5549 , - 4564 , - 4539 , - 5474 , - 1225 , - 4080 , - 1751 , - 382 , - 6117 , - 524 , - 2035 , - 4506 , - 1793 , - 40 , - 5391 , - 5558 , - 541 , - 2628 , - 5675 , - 3538 , - 2361 , - 2144 , - 2887 , - 4590 , - 1109 , - 4732 , - 3171 , - 2570 , - 2929 , - 4248 , - 383 , - 3622 , - 1677 , - 692 , - 667 , - 1602 , - 3497 , - 208 , - 4023 , - 2654 , - 2245 , - 2796 , - 4307 , - 634 , - 4065 , - 2312 , - 1519 , - 1686 , - 2813 , - 4900 , - 1803 , - 5810 , - 4633 , - 4416 , - 5159 , - 718 , - 3381 , - 860 , - 5443 , - 4842 , - 5201 , - 376 , - 2655 , - 5894 , - 3949 , - 2964 , - 2939 , - 3874 , - 5769 , - 2480 , - 151 , - 4926 , - 4517 , - 5068 , - 435 , - 2906 , - 193 , - 4584 , - 3791 , - 3958 , - 5085 , - 1028 , - 4075 , - 1938 , - 761 , - 544 , - 1287 , - 2990 , - 5653 , - 3132 , - 1571 , - 970 , - 1329 , - 2648 , - 4927 , - 2022 , - 77 , - 5236 , - 5211 , - 2 , - 1897 , - 4752 , - 2423 , - 1054 , - 645 , - 1196 , - 2707 , - 5178 , - 2465 , - 712 , - 6063 , - 86 , - 1213 , - 3300 , - 203 , - 4210 , - 3033 , - 2816 , - 3559 , - 5262 , - 1781 , - 5404 , - 3843 , - 3242 , - 3601 , - 4920 , - 1055 , - 4294 , - 2349 , - 1364 , - 1339 , - 2274 , - 4169 , - 880 , - 4695 , - 3326 , - 2917 , - 3468 , - 4979 , - 1306 , - 4737 , - 2984 , - 2191 , - 2358 , - 3485 , - 5572 , - 2475 , - 338 , - 5305 , - 5088 , - 5831 , - 1390 , - 4053 , - 1532 , - 6115 , - 5514 , - 5873 , - 1048 , - 3327 , - 422 , - 4621 , - 3636 , - 3611 , - 4546 , - 297 , - 3152 , - 823 , - 5598 , - 5189 , - 5740 , - 1107 , - 3578 , - 865 , - 5256 , - 4463 , - 4630 , - 5757 , - 1700 , - 4747 , - 2610 , - 1433 , - 1216 , - 1959 , - 3662 , - 181 , - 3804 , - 2243 , - 1642 , - 2001 , - 3320 , - 5599 , - 2694 , - 749 , - 5908 , - 5883 , - 674 , - 2569 , - 5424 , - 3095 , - 1726 , - 1317 , - 1868 , - 3379 , - 5850 , - 3137 , - 1384 , - 591 , - 758 , - 1885 , - 3972 , - 875 , - 4882 , - 3705 , - 3488 , - 4231 , - 5934 , - 2453 , - 6076 , - 4515 , - 3914 , - 4273 , - 5592 , - 1727 , - 4966 , - 3021 , - 2036 , - 2011 , - 2946 , - 4841 , - 1552 , - 5367 , - 3998 , - 3589 , - 4140 , - 5651 , - 1978 , - 5409 , - 3656 , - 2863 , - 3030 , - 4157 , - 100 , - 3147 , - 1010 , - 5977 , - 5760 , - 359 , - 2062 , - 4725 , - 2204 , - 643 , - 42 , - 401 , - 1720 , - 3999 , - 1094 , - 5293 , - 4308 , - 4283 , - 5218 , - 969 , - 3824 , - 1495 , - 126 , - 5861 , - 268 , - 1779 , - 4250 , - 1537 , - 5928 , - 5135 , - 5302 , - 285 , - 2372 , - 5419 , - 3282 , - 2105 , - 1888 , - 2631 , - 4334 , - 853 , - 4476 , - 2915 , - 2314 , - 2673 , - 3992 , - 127 , - 3366 , - 1421 , - 436 , - 411 , - 1346 , - 3241 , - 6096 , - 3767 , - 2398 , - 1989 , - 2540 , - 4051 , - 378 , - 3809 , - 2056 , - 1263 , - 1430 , - 2557 , - 4644 , - 1547 , - 5554 , - 4377 , - 4160 , - 4903 , - 462 , - 3125 , - 604 , - 5187 , - 4586 , - 4945 , - 120 , - 2399 , - 5638 , - 3693 , - 2708 , - 2683 , - 3618 , - 5513 , - 2224 , - 6039 , - 4670 , - 4261 , - 4812 , - 179 , - 2650 , - 6081 , - 4328 , - 3535 , - 3702 , - 4829 , - 772 , - 3819 , - 1682 , - 505 , - 288 , - 1031 , - 2734 , - 5397 , - 2876 , - 1315 , - 714 , - 1073 , - 2392 , - 4671 , - 1766 , - 5965 , - 4980 , - 4955 , - 5890 , - 1641 , - 4496 , - 2167 , - 798 , - 389 , - 940 , - 2451 , - 4922 , - 2209 , - 456 , - 5807 , - 5974 , - 957 , - 3044 , - 6091 , - 3954 , - 2777 , - 2560 , - 3303 , - 5006 , - 1525 , - 5148 , - 3587 , - 2986 , - 3345 , - 4664 , - 799 , - 4038 , - 2093 , - 1108 , - 1083 , - 2018 , - 3913 , - 624 , - 4439 , - 3070 , - 2661 , - 3212 , - 4723 , - 1050 , - 4481 , - 2728 , - 1935 , - 2102 , - 3229 , - 5316 , - 2219 , - 82 , - 5049 , - 4832 , - 5575 , - 1134 , - 3797 , - 1276 , - 5859 , - 5258 , - 5617 , - 792 , - 3071 , - 166 , - 4365 , - 3380 , - 3355 , - 4290 , - 41 , - 2896 , - 567 , - 5342 , - 4933 , - 5484 , - 851 , - 3322 , - 609 , - 5000 , - 4207 , - 4374 , - 5501 , - 1444 , - 4491 , - 2354 , - 1177 , - 960 , - 1703 , - 3406 , - 6069 , - 3548 , - 1987 , - 1386 , - 1745 , - 3064 , - 5343 , - 2438 , - 493 , - 5652 , - 5627 , - 418 , - 2313 , - 5168 , - 2839 , - 1470 , - 1061 , - 1612 , - 3123 , - 5594 , - 2881 , - 1128 , - 335 , - 502 , - 1629 , - 3716 , - 619 , - 4626 , - 3449 , - 3232 , - 3975 , - 5678 , - 2197 , - 5820 , - 4259 , - 3658 , - 4017 , - 5336 , - 1471 , - 4710 , - 2765 , - 1780 , - 1755 , - 2690 , - 4585 , - 1296 , - 5111 , - 3742 , - 3333 , - 3884 , - 5395 , - 1722 , - 5153 , - 3400 , - 2607 , - 2774 , - 3901 , - 5988 , - 2891 , - 754 , - 5721 , - 5504 , - 103 , - 1806 , - 4469 , - 1948 , - 387 , - 5930 , - 145 , - 1464 , - 3743 , - 838 , - 5037 , - 4052 , - 4027 , - 4962 , - 713 , - 3568 , - 1239 , - 6014 , - 5605 , - 12 , - 1523 , - 3994 , - 1281 , - 5672 , - 4879 , - 5046 , - 29 , - 2116 , - 5163 , - 3026 , - 1849 , - 1632 , - 2375 , - 4078 , - 597 , - 4220 , - 2659 , - 2058 , - 2417 , - 3736 , - 6015 , - 3110 , - 1165 , - 180 , - 155 , - 1090 , - 2985 , - 5840 , - 3511 , - 2142 , - 1733 , - 2284 , - 3795 , - 122 , - 3553 , - 1800 , - 1007 , - 1174 , - 2301 , - 4388 , - 1291 , - 5298 , - 4121 , - 3904 , - 4647 , - 206 , - 2869 , - 348 , - 4931 , - 4330 , - 4689 , - 6008 , - 2143 , - 5382 , - 3437 , - 2452 , - 2427 , - 3362 , - 5257 , - 1968 , - 5783 , - 4414 , - 4005 , - 4556 , - 6067 , - 2394 , - 5825 , - 4072 , - 3279 , - 3446 , - 4573 , - 516 , - 3563 , - 1426 , - 249 , - 32 , - 775 , - 2478 , - 5141 , - 2620 , - 1059 , - 458 , - 817 , - 2136 , - 4415 , - 1510 , - 5709 , - 4724 , - 4699 , - 5634 , - 1385 , - 4240 , - 1911 , - 542 , - 133 , - 684 , - 2195 , - 4666 , - 1953 , - 200 , - 5551 , - 5718 , - 701 , - 2788 , - 5835 , - 3698 , - 2521 , - 2304 , - 3047 , - 4750 , - 1269 , - 4892 , - 3331 , - 2730 , - 3089 , - 4408 , - 543 , - 3782 , - 1837 , - 852 , - 827 , - 1762 , - 3657 , - 368 , - 4183 , - 2814 , - 2405 , - 2956 , - 4467 , - 794 , - 4225 , - 2472 , - 1679 , - 1846 , - 2973 , - 5060 , - 1963 , - 5970 , - 4793 , - 4576 , - 5319 , - 878 , - 3541 , - 1020 , - 5603 , - 5002 , - 5361 , - 536 , - 2815 , - 6054 , - 4109 , - 3124 , - 3099 , - 4034 , - 5929 , - 2640 , - 311 , - 5086 , - 4677 , - 5228 , - 595 , - 3066 , - 353 , - 4744 , - 3951 , - 4118 , - 5245 , - 1188 , - 4235 , - 2098 , - 921 , - 704 , - 1447 , - 3150 , - 5813 , - 3292 , - 1731 , - 1130 , - 1489 , - 2808 , - 5087 , - 2182 , - 237 , - 5396 , - 5371 , - 162 , - 2057 , - 4912 , - 2583 , - 1214 , - 805 , - 1356 , - 2867 , - 5338 , - 2625 , - 872 , - 79 , - 246 , - 1373 , - 3460 , - 363 , - 4370 , - 3193 , - 2976 , - 3719 , - 5422 , - 1941 , - 5564 , - 4003 , - 3402 , - 3761 , - 5080 , - 1215 , - 4454 , - 2509 , - 1524 , - 1499 , - 2434 , - 4329 , - 1040 , - 4855 , - 3486 , - 3077 , - 3628 , - 5139 , - 1466 , - 4897 , - 3144 , - 2351 , - 2518 , - 3645 , - 5732 , - 2635 , - 498 , - 5465 , - 5248 , - 5991 , - 1550 , - 4213 , - 1692 , - 131 , - 5674 , - 6033 , - 1208 , - 3487 , - 582 , - 4781 , - 3796 , - 3771 , - 4706 , - 457 , - 3312 , - 983 , - 5758 , - 5349 , - 5900 , - 1267 , - 3738 , - 1025 , - 5416 , - 4623 , - 4790 , - 5917 , - 1860 , - 4907 , - 2770 , - 1593 , - 1376 , - 2119 , - 3822 , - 341 , - 3964 , - 2403 , - 1802 , - 2161 , - 3480 , - 5759 , - 2854 , - 909 , - 6068 , - 6043 , - 834 , - 2729 , - 5584 , - 3255 , - 1886 , - 1477 , - 2028 , - 3539 , - 6010 , - 3297 , - 1544 , - 751 , - 918 , - 2045 , - 4132 , - 1035 , - 5042 , - 3865 , - 3648 , - 4391 , - 6094 , - 2613 , - 92 , - 4675 , - 4074 , - 4433 , - 5752 , - 1887 , - 5126 , - 3181 , - 2196 , - 2171 , - 3106 , - 5001 , - 1712 , - 5527 , - 4158 , - 3749 , - 4300 , - 5811 , - 2138 , - 5569 , - 3816 , - 3023 , - 3190 , - 4317 , - 260 , - 3307 , - 1170 , - 6137 , - 5920 , - 519 , - 2222 , - 4885 , - 2364 , - 803 , - 202 , - 561 , - 1880 , - 4159 , - 1254 , - 5453 , - 4468 , - 4443 , - 5378 , - 1129 , - 3984 , - 1655 , - 286 , - 6021 , - 428 , - 1939 , - 4410 , - 1697 , - 6088 , - 5295 , - 5462 , - 445 , - 2532 , - 5579 , - 3442 , - 2265 , - 2048 , - 2791 , - 4494 , - 1013 , - 4636 , - 3075 , - 2474 , - 2833 , - 4152 , - 287 , - 3526 , - 1581 , - 596 , - 571 , - 1506 , - 3401 , - 112 , - 3927 , - 2558 , - 2149 , - 2700 , - 4211 , - 538 , - 3969 , - 2216 , - 1423 , - 1590 , - 2717 , - 4804 , - 1707 , - 5714 , - 4537 , - 4320 , - 5063 , - 622 , - 3285 , - 764 , - 5347 , - 4746 , - 5105 , - 280 , - 2559 , - 5798 , - 3853 , - 2868 , - 2843 , - 3778 , - 5673 , - 2384 , - 55 , - 4830 , - 4421 , - 4972 , - 339 , - 2810 , - 97 , - 4488 , - 3695 , - 3862 , - 4989 , - 932 , - 3979 , - 1842 , - 665 , - 448 , - 1191 , - 2894 , - 5557 , - 3036 , - 1475 , - 874 , - 1233 , - 2552 , - 4831 , - 1926 , - 6125 , - 5140 , - 5115 , - 6050 , - 1801 , - 4656 , - 2327 , - 958 , - 549 , - 1100 , - 2611 , - 5082 , - 2369 , - 616 , - 5967 , - 6134 , - 1117 , - 3204 , - 107 , - 4114 , - 2937 , - 2720 , - 3463 , - 5166 , - 1685 , - 5308 , - 3747 , - 3146 , - 3505 , - 4824 , - 959 , - 4198 , - 2253 , - 1268 , - 1243 , - 2178 , - 4073 , - 784 , - 4599 , - 3230 , - 2821 , - 3372 , - 4883 , - 1210 , - 4641 , - 2888 , - 2095 , - 2262 , - 3389 , - 5476 , - 2379 , - 242 , - 5209 , - 4992 , - 5735 , - 1294 , - 3957 , - 1436 , - 6019 , - 5418 , - 5777 , - 952 , - 3231 , - 326 , - 4525 , - 3540 , - 3515 , - 4450 , - 201 , - 3056 , - 727 , - 5502 , - 5093 , - 5644 , - 1011 , - 3482 , - 769 , - 5160 , - 4367 , - 4534 , - 5661 , - 1604 , - 4651 , - 2514 , - 1337 , - 1120 , - 1863 , - 3566 , - 85 , - 3708 , - 2147 , - 1546 , - 1905 , - 3224 , - 5503 , - 2598 , - 653 , - 5812 , - 5787 , - 578 , - 2473 , - 5328 , - 2999 , - 1630 , - 1221 , - 1772 , - 3283 , - 5754 , - 3041 , - 1288 , - 495 , - 662 , - 1789 , - 3876 , - 779 , - 4786 , - 3609 , - 3392 , - 4135 , - 5838 , - 2357 , - 5980 , - 4419 , - 3818 , - 4177 , - 5496 , - 1631 , - 4870 , - 2925 , - 1940 , - 1915 , - 2850 , - 4745 , - 1456 , - 5271 , - 3902 , - 3493 , - 4044 , - 5555 , - 1882 , - 5313 , - 3560 , - 2767 , - 2934 , - 4061 , - 4 , - 3051 , - 914 , - 5881 , - 5664 , - 263 , - 1966 , - 4629 , - 2108 , - 547 , - 6090 , - 305 , - 1624 , - 3903 , - 998 , - 5197 , - 4212 , - 4187 , - 5122 , - 873 , - 3728 , - 1399 , - 30 , - 5765 , - 172 , - 1683 , - 4154 , - 1441 , - 5832 , - 5039 , - 5206 , - 189 , - 2276 , - 5323 , - 3186 , - 2009 , - 1792 , - 2535 , - 4238 , - 757 , - 4380 , - 2819 , - 2218 , - 2577 , - 3896 , - 31 , - 3270 , - 1325 , - 340 , - 315 , - 1250 , - 3145 , - 6000 , - 3671 , - 2302 , - 1893 , - 2444 , - 3955 , - 282 , - 3713 , - 1960 , - 1167 , - 1334 , - 2461 , - 4548 , - 1451 , - 5458 , - 4281 , - 4064 , - 4807 , - 366 , - 3029 , - 508 , - 5091 , - 4490 , - 4849 , - 24 , - 2303 , - 5542 , - 3597 , - 2612 , - 2587 , - 3522 , - 5417 , - 2128 , - 5943 , - 4574 , - 4165 , - 4716 , - 83 , - 2554 , - 5985 , - 4232 , - 3439 , - 3606 , - 4733 , - 676 , - 3723 , - 1586 , - 409 , - 192 , - 935 , - 2638 , - 5301 , - 2780 , - 1219 , - 618 , - 977 , - 2296 , - 4575 , - 1670 , - 5869 , - 4884 , - 4859 , - 5794 , - 1545 , - 4400 , - 2071 , - 702 , - 293 , - 844 , - 2355 , - 4826 , - 2113 , - 360 , - 5711 , - 5878 , - 861 , - 2948 , - 5995 , - 3858 , - 2681 , - 2464 , - 3207 , - 4910 , - 1429 , - 5052 , - 3491 , - 2890 , - 3249 , - 4568 , - 703 , - 3942 , - 1997 , - 1012 , - 987 , - 1922 , - 3817 , - 528 , - 4343 , - 2974 , - 2565 , - 3116 , - 4627 , - 954 , - 4385 , - 2632 , - 1839 , - 2006 , - 3133 , - 5220 , - 2123 , - 6130 , - 4953 , - 4736 , - 5479 , - 1038 , - 3701 , - 1180 , - 5763 , - 5162 , - 5521 , - 696 , - 2975 , - 70 , - 4269 , - 3284 , - 3259 , - 4194 , - 6089 , - 2800 , - 471 , - 5246 , - 4837 , - 5388 , - 755 , - 3226 , - 513 , - 4904 , - 4111 , - 4278 , - 5405 , - 1348 , - 4395 , - 2258 , - 1081 , - 864 , - 1607 , - 3310 , - 5973 , - 3452 , - 1891 , - 1290 , - 1649 , - 2968 , - 5247 , - 2342 , - 397 , - 5556 , - 5531 , - 322 , - 2217 , - 5072 , - 2743 , - 1374 , - 965 , - 1516 , - 3027 , - 5498 , - 2785 , - 1032 , - 239 , - 406 , - 1533 , - 3620 , - 523 , - 4530 , - 3353 , - 3136 , - 3879 , - 5582 , - 2101 , - 5724 , - 4163 , - 3562 , - 3921 , - 5240 , - 1375 , - 4614 , - 2669 , - 1684 , - 1659 , - 2594 , - 4489 , - 1200 , - 5015 , - 3646 , - 3237 , - 3788 , - 5299 , - 1626 , - 5057 , - 3304 , - 2511 , - 2678 , - 3805 , - 5892 , - 2795 , - 658 , - 5625 , - 5408 , - 7 , - 1710 , - 4373 , - 1852 , - 291 , - 5834 , - 49 , - 1368 , - 3647 , - 742 , - 4941 , - 3956 , - 3931 , - 4866 , - 617 , - 3472 , - 1143 , - 5918 , - 5509 , - 6060 , - 1427 , - 3898 , - 1185 , - 5576 , - 4783 , - 4950 , - 6077 , - 2020 , - 5067 , - 2930 , - 1753 , - 1536 , - 2279 , - 3982 , - 501 , - 4124 , - 2563 , - 1962 , - 2321 , - 3640 , - 5919 , - 3014 , - 1069 , - 84 , - 59 , - 994 , - 2889 , - 5744 , - 3415 , - 2046 , - 1637 , - 2188 , - 3699 , - 26 , - 3457 , - 1704 , - 911 , - 1078 , - 2205 , - 4292 , - 1195 , - 5202 , - 4025 , - 3808 , - 4551 , - 110 , - 2773 , - 252 , - 4835 , - 4234 , - 4593 , - 5912 , - 2047 , - 5286 , - 3341 , - 2356 , - 2331 , - 3266 , - 5161 , - 1872 , - 5687 , - 4318 , - 3909 , - 4460 , - 5971 , - 2298 , - 5729 , - 3976 , - 3183 , - 3350 , - 4477 , - 420 , - 3467 , - 1330 , - 153 , - 6080 , - 679 , - 2382 , - 5045 , - 2524 , - 963 , - 362 , - 721 , - 2040 , - 4319 , - 1414 , - 5613 , - 4628 , - 4603 , - 5538 , - 1289 , - 4144 , - 1815 , - 446 , - 37 , - 588 , - 2099 , - 4570 , - 1857 , - 104 , - 5455 , - 5622 , - 605 , - 2692 , - 5739 , - 3602 , - 2425 , - 2208 , - 2951 , - 4654 , - 1173 , - 4796 , - 3235 , - 2634 , - 2993 , - 4312 , - 447 , - 3686 , - 1741 , - 756 , - 731 , - 1666 , - 3561 , - 272 , - 4087 , - 2718 , - 2309 , - 2860 , - 4371 , - 698 , - 4129 , - 2376 , - 1583 , - 1750 , - 2877 , - 4964 , - 1867 , - 5874 , - 4697 , - 4480 , - 5223 , - 782 , - 3445 , - 924 , - 5507 , - 4906 , - 5265 , - 440 , - 2719 , - 5958 , - 4013 , - 3028 , - 3003 , - 3938 , - 5833 , - 2544 , - 215 , - 4990 , - 4581 , - 5132 , - 499 , - 2970 , - 257 , - 4648 , - 3855 , - 4022 , - 5149 , - 1092 , - 4139 , - 2002 , - 825 , - 608 , - 1351 , - 3054 , - 5717 , - 3196 , - 1635 , - 1034 , - 1393 , - 2712 , - 4991 , - 2086 , - 141 , - 5300 , - 5275 , - 66 , - 1961 , - 4816 , - 2487 , - 1118 , - 709 , - 1260 , - 2771 , - 5242 , - 2529 , - 776 , - 6127 , - 150 , - 1277 , - 3364 , - 267 , - 4274 , - 3097 , - 2880 , - 3623 , - 5326 , - 1845 , - 5468 , - 3907 , - 3306 , - 3665 , - 4984 , - 1119 , - 4358 , - 2413 , - 1428 , - 1403 , - 2338 , - 4233 , - 944 , - 4759 , - 3390 , - 2981 , - 3532 , - 5043 , - 1370 , - 4801 , - 3048 , - 2255 , - 2422 , - 3549 , - 5636 , - 2539 , - 402 , - 5369 , - 5152 , - 5895 , - 1454 , - 4117 , - 1596 , - 35 , - 5578 , - 5937 , - 1112 , - 3391 , - 486 , - 4685 , - 3700 , - 3675 , - 4610 , - 361 , - 3216 , - 887 , - 5662 , - 5253 , - 5804 , - 1171 , - 3642 , - 929 , - 5320 , - 4527 , - 4694 , - 5821 , - 1764 , - 4811 , - 2674 , - 1497 , - 1280 , - 2023 , - 3726 , - 245 , - 3868 , - 2307 , - 1706 , - 2065 , - 3384 , - 5663 , - 2758 , - 813 , - 5972 , - 5947 , - 738 , - 2633 , - 5488 , - 3159 , - 1790 , - 1381 , - 1932 , - 3443 , - 5914 , - 3201 , - 1448 , - 655 , - 822 , - 1949 , - 4036 , - 939 , - 4946 , - 3769 , - 3552 , - 4295 , - 5998 , - 2517 , - 6140 , - 4579 , - 3978 , - 4337 , - 5656 , - 1791 , - 5030 , - 3085 , - 2100 , - 2075 , - 3010 , - 4905 , - 1616 , - 5431 , - 4062 , - 3653 , - 4204 , - 5715 , - 2042 , - 5473 , - 3720 , - 2927 , - 3094 , - 4221 , - 164 , - 3211 , - 1074 , - 6041 , - 5824 , - 423 , - 2126 , - 4789 , - 2268 , - 707 , - 106 , - 465 , - 1784 , - 4063 , - 1158 , - 5357 , - 4372 , - 4347 , - 5282 , - 1033 , - 3888 , - 1559 , - 190 , - 5925 , - 332 , - 1843 , - 4314 , - 1601 , - 5992 , - 5199 , - 5366 , - 349 , - 2436 , - 5483 , - 3346 , - 2169 , - 1952 , - 2695 , - 4398 , - 917 , - 4540 , - 2979 , - 2378 , - 2737 , - 4056 , - 191 , - 3430 , - 1485 , - 500 , - 475 , - 1410 , - 3305 , - 16 , - 3831 , - 2462 , - 2053 , - 2604 , - 4115 , - 442 , - 3873 , - 2120 , - 1327 , - 1494 , - 2621 , - 4708 , - 1611 , - 5618 , - 4441 , - 4224 , - 4967 , - 526 , - 3189 , - 668 , - 5251 , - 4650 , - 5009 , - 184 , - 2463 , - 5702 , - 3757 , - 2772 , - 2747 , - 3682 , - 5577 , - 2288 , - 6103 , - 4734 , - 4325 , - 4876 , - 243 , - 2714 , - 1 , - 4392 , - 3599 , - 3766 , - 4893 , - 836 , - 3883 , - 1746 , - 569 , - 352 , - 1095 , - 2798 , - 5461 , - 2940 , - 1379 , - 778 , - 1137 , - 2456 , - 4735 , - 1830 , - 6029 , - 5044 , - 5019 , - 5954 , - 1705 , - 4560 , - 2231 , - 862 , - 453 , - 1004 , - 2515 , - 4986 , - 2273 , - 520 , - 5871 , - 6038 , - 1021 , - 3108 , - 11 , - 4018 , - 2841 , - 2624 , - 3367 , - 5070 , - 1589 , - 5212 , - 3651 , - 3050 , - 3409 , - 4728 , - 863 , - 4102 , - 2157 , - 1172 , - 1147 , - 2082 , - 3977 , - 688 , - 4503 , - 3134 , - 2725 , - 3276 , - 4787 , - 1114 , - 4545 , - 2792 , - 1999 , - 2166 , - 3293 , - 5380 , - 2283 , - 146 , - 5113 , - 4896 , - 5639 , - 1198 , - 3861 , - 1340 , - 5923 , - 5322 , - 5681 , - 856 , - 3135 , - 230 , - 4429 , - 3444 , - 3419 , - 4354 , - 105 , - 2960 , - 631 , - 5406 , - 4997 , - 5548 , - 915 , - 3386 , - 673 , - 5064 , - 4271 , - 4438 , - 5565 , - 1508 , - 4555 , - 2418 , - 1241 , - 1024 , - 1767 , - 3470 , - 6133 , - 3612 , - 2051 , - 1450 , - 1809 , - 3128 , - 5407 , - 2502 , - 557 , - 5716 , - 5691 , - 482 , - 2377 , - 5232 , - 2903 , - 1534 , - 1125 , - 1676 , - 3187 , - 5658 , - 2945 , - 1192 , - 399 , - 566 , - 1693 , - 3780 , - 683 , - 4690 , - 3513 , - 3296 , - 4039 , - 5742 , - 2261 , - 5884 , - 4323 , - 3722 , - 4081 , - 5400 , - 1535 , - 4774 , - 2829 , - 1844 , - 1819 , - 2754 , - 4649 , - 1360 , - 5175 , - 3806 , - 3397 , - 3948 , - 5459 , - 1786 , - 5217 , - 3464 , - 2671 , - 2838 , - 3965 , - 6052 , - 2955 , - 818 , - 5785 , - 5568 , - 167 , - 1870 , - 4533 , - 2012 , - 451 , - 5994 , - 209 , - 1528 , - 3807 , - 902 , - 5101 , - 4116 , - 4091 , - 5026 , - 777 , - 3632 , - 1303 , - 6078 , - 5669 , - 76 , - 1587 , - 4058 , - 1345 , - 5736 , - 4943 , - 5110 , - 93 , - 2180 , - 5227 , - 3090 , - 1913 , - 1696 , - 2439 , - 4142 , - 661 , - 4284 , - 2723 , - 2122 , - 2481 , - 3800 , - 6079 , - 3174 , - 1229 , - 244 , - 219 , - 1154 , - 3049 , - 5904 , - 3575 , - 2206 , - 1797 , - 2348 , - 3859 , - 186 , - 3617 , - 1864 , - 1071 , - 1238 , - 2365 , - 4452 , - 1355 , - 5362 , - 4185 , - 3968 , - 4711 , - 270 , - 2933 , - 412 , - 4995 , - 4394 , - 4753 , - 6072 , - 2207 , - 5446 , - 3501 , - 2516 , - 2491 , - 3426 , - 5321 , - 2032 , - 5847 , - 4478 , - 4069 , - 4620 , - 6131 , - 2458 , - 5889 , - 4136 , - 3343 , - 3510 , - 4637 , - 580 , - 3627 , - 1490 , - 313 , - 96 , - 839 , - 2542 , - 5205 , - 2684 , - 1123 , - 522 , - 881 , - 2200 , - 4479 , - 1574 , - 5773 , - 4788 , - 4763 , - 5698 , - 1449 , - 4304 , - 1975 , - 606 , - 197 , - 748 , - 2259 , - 4730 , - 2017 , - 264 , - 5615 , - 5782 , - 765 , - 2852 , - 5899 , - 3762 , - 2585 , - 2368 , - 3111 , - 4814 , - 1333 , - 4956 , - 3395 , - 2794 , - 3153 , - 4472 , - 607 , - 3846 , - 1901 , - 916 , - 891 , - 1826 , - 3721 , - 432 , - 4247 , - 2878 , - 2469 , - 3020 , - 4531 , - 858 , - 4289 , - 2536 , - 1743 , - 1910 , - 3037 , - 5124 , - 2027 , - 6034 , - 4857 , - 4640 , - 5383 , - 942 , - 3605 , - 1084 , - 5667 , - 5066 , - 5425 , - 600 , - 2879 , - 6118 , - 4173 , - 3188 , - 3163 , - 4098 , - 5993 , - 2704 , - 375 , - 5150 , - 4741 , - 5292 , - 659 , - 3130 , - 417 , - 4808 , - 4015 , - 4182 , - 5309 , - 1252 , - 4299 , - 2162 , - 985 , - 768 , - 1511 , - 3214 , - 5877 , - 3356 , - 1795 , - 1194 , - 1553 , - 2872 , - 5151 , - 2246 , - 301 , - 5460 , - 5435 , - 226 , - 2121 , - 4976 , - 2647 , - 1278 , - 869 , - 1420 , - 2931 , - 5402 , - 2689 , - 936 , - 143 , - 310 , - 1437 , - 3524 , - 427 , - 4434 , - 3257 , - 3040 , - 3783 , - 5486 , - 2005 , - 5628 , - 4067 , - 3466 , - 3825 , - 5144 , - 1279 , - 4518 , - 2573 , - 1588 , - 1563 , - 2498 , - 4393 , - 1104 , - 4919 , - 3550 , - 3141 , - 3692 , - 5203 , - 1530 , - 4961 , - 3208 , - 2415 , - 2582 , - 3709 , - 5796 , - 2699 , - 562 , - 5529 , - 5312 , - 6055 , - 1614 , - 4277 , - 1756 , - 195 , - 5738 , - 6097 , - 1272 , - 3551 , - 646 , - 4845 , - 3860 , - 3835 , - 4770 , - 521 , - 3376 , - 1047 , - 5822 , - 5413 , - 5964 , - 1331 , - 3802 , - 1089 , - 5480 , - 4687 , - 4854 , - 5981 , - 1924 , - 4971 , - 2834 , - 1657 , - 1440 , - 2183 , - 3886 , - 405 , - 4028 , - 2467 , - 1866 , - 2225 , - 3544 , - 5823 , - 2918 , - 973 , - 6132 , - 6107 , - 898 , - 2793 , - 5648 , - 3319 , - 1950 , - 1541 , - 2092 , - 3603 , - 6074 , - 3361 , - 1608 , - 815 , - 982 , - 2109 , - 4196 , - 1099 , - 5106 , - 3929 , - 3712 , - 4455 , - 14 , - 2677 , - 156 , - 4739 , - 4138 , - 4497 , - 5816 , - 1951 , - 5190 , - 3245 , - 2260 , - 2235 , - 3170 , - 5065 , - 1776 , - 5591 , - 4222 , - 3813 , - 4364 , - 5875 , - 2202 , - 5633 , - 3880 , - 3087 , - 3254 , - 4381 , - 324 , - 3371 , - 1234 , - 57 , - 5984 , - 583 , - 2286 , - 4949 , - 2428 , - 867 , - 266 , - 625 , - 1944 , - 4223 , - 1318 , - 5517 , - 4532 , - 4507 , - 5442 , - 1193 , - 4048 , - 1719 , - 350 , - 6085 , - 492 , - 2003 , - 4474 , - 1761 , - 8 , - 5359 , - 5526 , - 509 , - 2596 , - 5643 , - 3506 , - 2329 , - 2112 , - 2855 , - 4558 , - 1077 , - 4700 , - 3139 , - 2538 , - 2897 , - 4216 , - 351 , - 3590 , - 1645 , - 660 , - 635 , - 1570 , - 3465 , - 176 , - 3991 , - 2622 , - 2213 , - 2764 , - 4275 , - 602 , - 4033 , - 2280 , - 1487 , - 1654 , - 2781 , - 4868 , - 1771 , - 5778 , - 4601 , - 4384 , - 5127 , - 686 , - 3349 , - 828 , - 5411 , - 4810 , - 5169 , - 344 , - 2623 , - 5862 , - 3917 , - 2932 , - 2907 , - 3842 , - 5737 , - 2448 , - 119 , - 4894 , - 4485 , - 5036 , - 403 , - 2874 , - 161 , - 4552 , - 3759 , - 3926 , - 5053 , - 996 , - 4043 , - 1906 , - 729 , - 512 , - 1255 , - 2958 , - 5621 , - 3100 , - 1539 , - 938 , - 1297 , - 2616 , - 4895 , - 1990 , - 45 , - 5204 , - 5179 , - 6114 , - 1865 , - 4720 , - 2391 , - 1022 , - 613 , - 1164 , - 2675 , - 5146 , - 2433 , - 680 , - 6031 , - 54 , - 1181 , - 3268 , - 171 , - 4178 , - 3001 , - 2784 , - 3527 , - 5230 , - 1749 , - 5372 , - 3811 , - 3210 , - 3569 , - 4888 , - 1023 , - 4262 , - 2317 , - 1332 , - 1307 , - 2242 , - 4137 , - 848 , - 4663 , - 3294 , - 2885 , - 3436 , - 4947 , - 1274 , - 4705 , - 2952 , - 2159 , - 2326 , - 3453 , - 5540 , - 2443 , - 306 , - 5273 , - 5056 , - 5799 , - 1358 , - 4021 , - 1500 , - 6083 , - 5482 , - 5841 , - 1016 , - 3295 , - 390 , - 4589 , - 3604 , - 3579 , - 4514 , - 265 , - 3120 , - 791 , - 5566 , - 5157 , - 5708 , - 1075 , - 3546 , - 833 , - 5224 , - 4431 , - 4598 , - 5725 , - 1668 , - 4715 , - 2578 , - 1401 , - 1184 , - 1927 , - 3630 , - 149 , - 3772 , - 2211 , - 1610 , - 1969 , - 3288 , - 5567 , - 2662 , - 717 , - 5876 , - 5851 , - 642 , - 2537 , - 5392 , - 3063 , - 1694 , - 1285 , - 1836 , - 3347 , - 5818 , - 3105 , - 1352 , - 559 , - 726 , - 1853 , - 3940 , - 843 , - 4850 , - 3673 , - 3456 , - 4199 , - 5902 , - 2421 , - 6044 , - 4483 , - 3882 , - 4241 , - 5560 , - 1695 , - 4934 , - 2989 , - 2004 , - 1979 , - 2914 , - 4809 , - 1520 , - 5335 , - 3966 , - 3557 , - 4108 , - 5619 , - 1946 , - 5377 , - 3624 , - 2831 , - 2998 , - 4125 , - 68 , - 3115 , - 978 , - 5945 , - 5728 , - 327 , - 2030 , - 4693 , - 2172 , - 611 , - 10 , - 369 , - 1688 , - 3967 , - 1062 , - 5261 , - 4276 , - 4251 , - 5186 , - 937 , - 3792 , - 1463 , - 94 , - 5829 , - 236 , - 1747 , - 4218 , - 1505 , - 5896 , - 5103 , - 5270 , - 253 , - 2340 , - 5387 , - 3250 , - 2073 , - 1856 , - 2599 , - 4302 , - 821 , - 4444 , - 2883 , - 2282 , - 2641 , - 3960 , - 95 , - 3334 , - 1389 , - 404 , - 379 , - 1314 , - 3209 , - 6064 , - 3735 , - 2366 , - 1957 , - 2508 , - 4019 , - 346 , - 3777 , - 2024 , - 1231 , - 1398 , - 2525 , - 4612 , - 1515 , - 5522 , - 4345 , - 4128 , - 4871 , - 430 , - 3093 , - 572 , - 5155 , - 4554 , - 4913 , - 88 , - 2367 , - 5606 , - 3661 , - 2676 , - 2651 , - 3586 , - 5481 , - 2192 , - 6007 , - 4638 , - 4229 , - 4780 , - 147 , - 2618 , - 6049 , - 4296 , - 3503 , - 3670 , - 4797 , - 740 , - 3787 , - 1650 , - 473 , - 256 , - 999 , - 2702 , - 5365 , - 2844 , - 1283 , - 682 , - 1041 , - 2360 , - 4639 , - 1734 , - 5933 , - 4948 , - 4923 , - 5858 , - 1609 , - 4464 , - 2135 , - 766 , - 357 , - 908 , - 2419 , - 4890 , - 2177 , - 424 , - 5775 , - 5942 , - 925 , - 3012 , - 6059 , - 3922 , - 2745 , - 2528 , - 3271 , - 4974 , - 1493 , - 5116 , - 3555 , - 2954 , - 3313 , - 4632 , - 767 , - 4006 , - 2061 , - 1076 , - 1051 , - 1986 , - 3881 , - 592 , - 4407 , - 3038 , - 2629 , - 3180 , - 4691 , - 1018 , - 4449 , - 2696 , - 1903 , - 2070 , - 3197 , - 5284 , - 2187 , - 50 , - 5017 , - 4800 , - 5543 , - 1102 , - 3765 , - 1244 , - 5827 , - 5226 , - 5585 , - 760 , - 3039 , - 134 , - 4333 , - 3348 , - 3323 , - 4258 , - 9 , - 2864 , - 535 , - 5310 , - 4901 , - 5452 , - 819 , - 3290 , - 577 , - 4968 , - 4175 , - 4342 , - 5469 , - 1412 , - 4459 , - 2322 , - 1145 , - 928 , - 1671 , - 3374 , - 6037 , - 3516 , - 1955 , - 1354 , - 1713 , - 3032 , - 5311 , - 2406 , - 461 , - 5620 , - 5595 , - 386 , - 2281 , - 5136 , - 2807 , - 1438 , - 1029 , - 1580 , - 3091 , - 5562 , - 2849 , - 1096 , - 303 , - 470 , - 1597 , - 3684 , - 587 , - 4594 , - 3417 , - 3200 , - 3943 , - 5646 , - 2165 , - 5788 , - 4227 , - 3626 , - 3985 , - 5304 , - 1439 , - 4678 , - 2733 , - 1748 , - 1723 , - 2658 , - 4553 , - 1264 , - 5079 , - 3710 , - 3301 , - 3852 , - 5363 , - 1690 , - 5121 , - 3368 , - 2575 , - 2742 , - 3869 , - 5956 , - 2859 , - 722 , - 5689 , - 5472 , - 71 , - 1774 , - 4437 , - 1916 , - 355 , - 5898 , - 113 , - 1432 , - 3711 , - 806 , - 5005 , - 4020 , - 3995 , - 4930 , - 681 , - 3536 , - 1207 , - 5982 , - 5573 , - 6124 , - 1491 , - 3962 , - 1249 , - 5640 , - 4847 , - 5014 , - 6141 , - 2084 , - 5131 , - 2994 , - 1817 , - 1600 , - 2343 , - 4046 , - 565 , - 4188 , - 2627 , - 2026 , - 2385 , - 3704 , - 5983 , - 3078 , - 1133 , - 148 , - 123 , - 1058 , - 2953 , - 5808 , - 3479 , - 2110 , - 1701 , - 2252 , - 3763 , - 90 , - 3521 , - 1768 , - 975 , - 1142 , - 2269 , - 4356 , - 1259 , - 5266 , - 4089 , - 3872 , - 4615 , - 174 , - 2837 , - 316 , - 4899 , - 4298 , - 4657 , - 5976 , - 2111 , - 5350 , - 3405 , - 2420 , - 2395 , - 3330 , - 5225 , - 1936 , - 5751 , - 4382 , - 3973 , - 4524 , - 6035 , - 2362 , - 5793 , - 4040 , - 3247 , - 3414 , - 4541 , - 484 , - 3531 , - 1394 , - 217 , -}; -short reverse_il_tl[ 355248 ] = { - 0 , - 37 , - 14 , - 11 , - 28 , - 25 , - 2 , - 39 , - 16 , - 13 , - 30 , - 27 , - 4 , - 1 , - 18 , - 15 , - 32 , - 29 , - 6 , - 3 , - 20 , - 17 , - 34 , - 31 , - 8 , - 5 , - 22 , - 19 , - 36 , - 33 , - 10 , - 7 , - 24 , - 21 , - 38 , - 35 , - 12 , - 9 , - 26 , - 23 , - 0 , - 19 , - 14 , - 33 , - 28 , - 47 , - 42 , - 13 , - 8 , - 27 , - 22 , - 41 , - 36 , - 7 , - 2 , - 21 , - 16 , - 35 , - 30 , - 1 , - 44 , - 15 , - 10 , - 29 , - 24 , - 43 , - 38 , - 9 , - 4 , - 23 , - 18 , - 37 , - 32 , - 3 , - 46 , - 17 , - 12 , - 31 , - 26 , - 45 , - 40 , - 11 , - 6 , - 25 , - 20 , - 39 , - 34 , - 5 , - 0 , - 45 , - 6 , - 51 , - 12 , - 1 , - 18 , - 7 , - 24 , - 13 , - 30 , - 19 , - 36 , - 25 , - 42 , - 31 , - 48 , - 37 , - 54 , - 43 , - 4 , - 49 , - 10 , - 55 , - 16 , - 5 , - 22 , - 11 , - 28 , - 17 , - 34 , - 23 , - 40 , - 29 , - 46 , - 35 , - 52 , - 41 , - 2 , - 47 , - 8 , - 53 , - 14 , - 3 , - 20 , - 9 , - 26 , - 15 , - 32 , - 21 , - 38 , - 27 , - 44 , - 33 , - 50 , - 39 , - 0 , - 7 , - 46 , - 53 , - 28 , - 35 , - 10 , - 17 , - 56 , - 63 , - 38 , - 45 , - 20 , - 27 , - 2 , - 9 , - 48 , - 55 , - 30 , - 37 , - 12 , - 19 , - 58 , - 1 , - 40 , - 47 , - 22 , - 29 , - 4 , - 11 , - 50 , - 57 , - 32 , - 39 , - 14 , - 21 , - 60 , - 3 , - 42 , - 49 , - 24 , - 31 , - 6 , - 13 , - 52 , - 59 , - 34 , - 41 , - 16 , - 23 , - 62 , - 5 , - 44 , - 51 , - 26 , - 33 , - 8 , - 15 , - 54 , - 61 , - 36 , - 43 , - 18 , - 25 , - 0 , - 49 , - 62 , - 39 , - 52 , - 29 , - 42 , - 19 , - 32 , - 9 , - 22 , - 71 , - 12 , - 61 , - 2 , - 51 , - 64 , - 41 , - 54 , - 31 , - 44 , - 21 , - 34 , - 11 , - 24 , - 1 , - 14 , - 63 , - 4 , - 53 , - 66 , - 43 , - 56 , - 33 , - 46 , - 23 , - 36 , - 13 , - 26 , - 3 , - 16 , - 65 , - 6 , - 55 , - 68 , - 45 , - 58 , - 35 , - 48 , - 25 , - 38 , - 15 , - 28 , - 5 , - 18 , - 67 , - 8 , - 57 , - 70 , - 47 , - 60 , - 37 , - 50 , - 27 , - 40 , - 17 , - 30 , - 7 , - 20 , - 69 , - 10 , - 59 , - 0 , - 71 , - 22 , - 13 , - 44 , - 35 , - 66 , - 57 , - 8 , - 79 , - 30 , - 21 , - 52 , - 43 , - 74 , - 65 , - 16 , - 7 , - 38 , - 29 , - 60 , - 51 , - 2 , - 73 , - 24 , - 15 , - 46 , - 37 , - 68 , - 59 , - 10 , - 1 , - 32 , - 23 , - 54 , - 45 , - 76 , - 67 , - 18 , - 9 , - 40 , - 31 , - 62 , - 53 , - 4 , - 75 , - 26 , - 17 , - 48 , - 39 , - 70 , - 61 , - 12 , - 3 , - 34 , - 25 , - 56 , - 47 , - 78 , - 69 , - 20 , - 11 , - 42 , - 33 , - 64 , - 55 , - 6 , - 77 , - 28 , - 19 , - 50 , - 41 , - 72 , - 63 , - 14 , - 5 , - 36 , - 27 , - 58 , - 49 , - 0 , - 31 , - 18 , - 49 , - 36 , - 67 , - 54 , - 85 , - 72 , - 15 , - 2 , - 33 , - 20 , - 51 , - 38 , - 69 , - 56 , - 87 , - 74 , - 17 , - 4 , - 35 , - 22 , - 53 , - 40 , - 71 , - 58 , - 1 , - 76 , - 19 , - 6 , - 37 , - 24 , - 55 , - 42 , - 73 , - 60 , - 3 , - 78 , - 21 , - 8 , - 39 , - 26 , - 57 , - 44 , - 75 , - 62 , - 5 , - 80 , - 23 , - 10 , - 41 , - 28 , - 59 , - 46 , - 77 , - 64 , - 7 , - 82 , - 25 , - 12 , - 43 , - 30 , - 61 , - 48 , - 79 , - 66 , - 9 , - 84 , - 27 , - 14 , - 45 , - 32 , - 63 , - 50 , - 81 , - 68 , - 11 , - 86 , - 29 , - 16 , - 47 , - 34 , - 65 , - 52 , - 83 , - 70 , - 13 , - 0 , - 59 , - 70 , - 33 , - 44 , - 7 , - 18 , - 77 , - 88 , - 51 , - 62 , - 25 , - 36 , - 95 , - 10 , - 69 , - 80 , - 43 , - 54 , - 17 , - 28 , - 87 , - 2 , - 61 , - 72 , - 35 , - 46 , - 9 , - 20 , - 79 , - 90 , - 53 , - 64 , - 27 , - 38 , - 1 , - 12 , - 71 , - 82 , - 45 , - 56 , - 19 , - 30 , - 89 , - 4 , - 63 , - 74 , - 37 , - 48 , - 11 , - 22 , - 81 , - 92 , - 55 , - 66 , - 29 , - 40 , - 3 , - 14 , - 73 , - 84 , - 47 , - 58 , - 21 , - 32 , - 91 , - 6 , - 65 , - 76 , - 39 , - 50 , - 13 , - 24 , - 83 , - 94 , - 57 , - 68 , - 31 , - 42 , - 5 , - 16 , - 75 , - 86 , - 49 , - 60 , - 23 , - 34 , - 93 , - 8 , - 67 , - 78 , - 41 , - 52 , - 15 , - 26 , - 85 , - 0 , - 41 , - 30 , - 71 , - 60 , - 101 , - 90 , - 27 , - 16 , - 57 , - 46 , - 87 , - 76 , - 13 , - 2 , - 43 , - 32 , - 73 , - 62 , - 103 , - 92 , - 29 , - 18 , - 59 , - 48 , - 89 , - 78 , - 15 , - 4 , - 45 , - 34 , - 75 , - 64 , - 1 , - 94 , - 31 , - 20 , - 61 , - 50 , - 91 , - 80 , - 17 , - 6 , - 47 , - 36 , - 77 , - 66 , - 3 , - 96 , - 33 , - 22 , - 63 , - 52 , - 93 , - 82 , - 19 , - 8 , - 49 , - 38 , - 79 , - 68 , - 5 , - 98 , - 35 , - 24 , - 65 , - 54 , - 95 , - 84 , - 21 , - 10 , - 51 , - 40 , - 81 , - 70 , - 7 , - 100 , - 37 , - 26 , - 67 , - 56 , - 97 , - 86 , - 23 , - 12 , - 53 , - 42 , - 83 , - 72 , - 9 , - 102 , - 39 , - 28 , - 69 , - 58 , - 99 , - 88 , - 25 , - 14 , - 55 , - 44 , - 85 , - 74 , - 11 , - 0 , - 69 , - 82 , - 39 , - 52 , - 9 , - 22 , - 91 , - 104 , - 61 , - 74 , - 31 , - 44 , - 1 , - 14 , - 83 , - 96 , - 53 , - 66 , - 23 , - 36 , - 105 , - 6 , - 75 , - 88 , - 45 , - 58 , - 15 , - 28 , - 97 , - 110 , - 67 , - 80 , - 37 , - 50 , - 7 , - 20 , - 89 , - 102 , - 59 , - 72 , - 29 , - 42 , - 111 , - 12 , - 81 , - 94 , - 51 , - 64 , - 21 , - 34 , - 103 , - 4 , - 73 , - 86 , - 43 , - 56 , - 13 , - 26 , - 95 , - 108 , - 65 , - 78 , - 35 , - 48 , - 5 , - 18 , - 87 , - 100 , - 57 , - 70 , - 27 , - 40 , - 109 , - 10 , - 79 , - 92 , - 49 , - 62 , - 19 , - 32 , - 101 , - 2 , - 71 , - 84 , - 41 , - 54 , - 11 , - 24 , - 93 , - 106 , - 63 , - 76 , - 33 , - 46 , - 3 , - 16 , - 85 , - 98 , - 55 , - 68 , - 25 , - 38 , - 107 , - 8 , - 77 , - 90 , - 47 , - 60 , - 17 , - 30 , - 99 , - 0 , - 97 , - 14 , - 111 , - 28 , - 5 , - 42 , - 19 , - 56 , - 33 , - 70 , - 47 , - 84 , - 61 , - 98 , - 75 , - 112 , - 89 , - 6 , - 103 , - 20 , - 117 , - 34 , - 11 , - 48 , - 25 , - 62 , - 39 , - 76 , - 53 , - 90 , - 67 , - 104 , - 81 , - 118 , - 95 , - 12 , - 109 , - 26 , - 3 , - 40 , - 17 , - 54 , - 31 , - 68 , - 45 , - 82 , - 59 , - 96 , - 73 , - 110 , - 87 , - 4 , - 101 , - 18 , - 115 , - 32 , - 9 , - 46 , - 23 , - 60 , - 37 , - 74 , - 51 , - 88 , - 65 , - 102 , - 79 , - 116 , - 93 , - 10 , - 107 , - 24 , - 1 , - 38 , - 15 , - 52 , - 29 , - 66 , - 43 , - 80 , - 57 , - 94 , - 71 , - 108 , - 85 , - 2 , - 99 , - 16 , - 113 , - 30 , - 7 , - 44 , - 21 , - 58 , - 35 , - 72 , - 49 , - 86 , - 63 , - 100 , - 77 , - 114 , - 91 , - 8 , - 105 , - 22 , - 119 , - 36 , - 13 , - 50 , - 27 , - 64 , - 41 , - 78 , - 55 , - 92 , - 69 , - 106 , - 83 , - 0 , - 15 , - 94 , - 109 , - 60 , - 75 , - 26 , - 41 , - 120 , - 7 , - 86 , - 101 , - 52 , - 67 , - 18 , - 33 , - 112 , - 127 , - 78 , - 93 , - 44 , - 59 , - 10 , - 25 , - 104 , - 119 , - 70 , - 85 , - 36 , - 51 , - 2 , - 17 , - 96 , - 111 , - 62 , - 77 , - 28 , - 43 , - 122 , - 9 , - 88 , - 103 , - 54 , - 69 , - 20 , - 35 , - 114 , - 1 , - 80 , - 95 , - 46 , - 61 , - 12 , - 27 , - 106 , - 121 , - 72 , - 87 , - 38 , - 53 , - 4 , - 19 , - 98 , - 113 , - 64 , - 79 , - 30 , - 45 , - 124 , - 11 , - 90 , - 105 , - 56 , - 71 , - 22 , - 37 , - 116 , - 3 , - 82 , - 97 , - 48 , - 63 , - 14 , - 29 , - 108 , - 123 , - 74 , - 89 , - 40 , - 55 , - 6 , - 21 , - 100 , - 115 , - 66 , - 81 , - 32 , - 47 , - 126 , - 13 , - 92 , - 107 , - 58 , - 73 , - 24 , - 39 , - 118 , - 5 , - 84 , - 99 , - 50 , - 65 , - 16 , - 31 , - 110 , - 125 , - 76 , - 91 , - 42 , - 57 , - 8 , - 23 , - 102 , - 117 , - 68 , - 83 , - 34 , - 49 , - 0 , - 87 , - 106 , - 57 , - 76 , - 27 , - 46 , - 133 , - 16 , - 103 , - 122 , - 73 , - 92 , - 43 , - 62 , - 13 , - 32 , - 119 , - 2 , - 89 , - 108 , - 59 , - 78 , - 29 , - 48 , - 135 , - 18 , - 105 , - 124 , - 75 , - 94 , - 45 , - 64 , - 15 , - 34 , - 121 , - 4 , - 91 , - 110 , - 61 , - 80 , - 31 , - 50 , - 1 , - 20 , - 107 , - 126 , - 77 , - 96 , - 47 , - 66 , - 17 , - 36 , - 123 , - 6 , - 93 , - 112 , - 63 , - 82 , - 33 , - 52 , - 3 , - 22 , - 109 , - 128 , - 79 , - 98 , - 49 , - 68 , - 19 , - 38 , - 125 , - 8 , - 95 , - 114 , - 65 , - 84 , - 35 , - 54 , - 5 , - 24 , - 111 , - 130 , - 81 , - 100 , - 51 , - 70 , - 21 , - 40 , - 127 , - 10 , - 97 , - 116 , - 67 , - 86 , - 37 , - 56 , - 7 , - 26 , - 113 , - 132 , - 83 , - 102 , - 53 , - 72 , - 23 , - 42 , - 129 , - 12 , - 99 , - 118 , - 69 , - 88 , - 39 , - 58 , - 9 , - 28 , - 115 , - 134 , - 85 , - 104 , - 55 , - 74 , - 25 , - 44 , - 131 , - 14 , - 101 , - 120 , - 71 , - 90 , - 41 , - 60 , - 11 , - 30 , - 117 , - 0 , - 53 , - 34 , - 87 , - 68 , - 121 , - 102 , - 11 , - 136 , - 45 , - 26 , - 79 , - 60 , - 113 , - 94 , - 3 , - 128 , - 37 , - 18 , - 71 , - 52 , - 105 , - 86 , - 139 , - 120 , - 29 , - 10 , - 63 , - 44 , - 97 , - 78 , - 131 , - 112 , - 21 , - 2 , - 55 , - 36 , - 89 , - 70 , - 123 , - 104 , - 13 , - 138 , - 47 , - 28 , - 81 , - 62 , - 115 , - 96 , - 5 , - 130 , - 39 , - 20 , - 73 , - 54 , - 107 , - 88 , - 141 , - 122 , - 31 , - 12 , - 65 , - 46 , - 99 , - 80 , - 133 , - 114 , - 23 , - 4 , - 57 , - 38 , - 91 , - 72 , - 125 , - 106 , - 15 , - 140 , - 49 , - 30 , - 83 , - 64 , - 117 , - 98 , - 7 , - 132 , - 41 , - 22 , - 75 , - 56 , - 109 , - 90 , - 143 , - 124 , - 33 , - 14 , - 67 , - 48 , - 101 , - 82 , - 135 , - 116 , - 25 , - 6 , - 59 , - 40 , - 93 , - 74 , - 127 , - 108 , - 17 , - 142 , - 51 , - 32 , - 85 , - 66 , - 119 , - 100 , - 9 , - 134 , - 43 , - 24 , - 77 , - 58 , - 111 , - 92 , - 1 , - 126 , - 35 , - 16 , - 69 , - 50 , - 103 , - 84 , - 137 , - 118 , - 27 , - 8 , - 61 , - 42 , - 95 , - 76 , - 129 , - 110 , - 19 , - 0 , - 131 , - 34 , - 13 , - 68 , - 47 , - 102 , - 81 , - 136 , - 115 , - 18 , - 149 , - 52 , - 31 , - 86 , - 65 , - 120 , - 99 , - 2 , - 133 , - 36 , - 15 , - 70 , - 49 , - 104 , - 83 , - 138 , - 117 , - 20 , - 151 , - 54 , - 33 , - 88 , - 67 , - 122 , - 101 , - 4 , - 135 , - 38 , - 17 , - 72 , - 51 , - 106 , - 85 , - 140 , - 119 , - 22 , - 1 , - 56 , - 35 , - 90 , - 69 , - 124 , - 103 , - 6 , - 137 , - 40 , - 19 , - 74 , - 53 , - 108 , - 87 , - 142 , - 121 , - 24 , - 3 , - 58 , - 37 , - 92 , - 71 , - 126 , - 105 , - 8 , - 139 , - 42 , - 21 , - 76 , - 55 , - 110 , - 89 , - 144 , - 123 , - 26 , - 5 , - 60 , - 39 , - 94 , - 73 , - 128 , - 107 , - 10 , - 141 , - 44 , - 23 , - 78 , - 57 , - 112 , - 91 , - 146 , - 125 , - 28 , - 7 , - 62 , - 41 , - 96 , - 75 , - 130 , - 109 , - 12 , - 143 , - 46 , - 25 , - 80 , - 59 , - 114 , - 93 , - 148 , - 127 , - 30 , - 9 , - 64 , - 43 , - 98 , - 77 , - 132 , - 111 , - 14 , - 145 , - 48 , - 27 , - 82 , - 61 , - 116 , - 95 , - 150 , - 129 , - 32 , - 11 , - 66 , - 45 , - 100 , - 79 , - 134 , - 113 , - 16 , - 147 , - 50 , - 29 , - 84 , - 63 , - 118 , - 97 , - 0 , - 101 , - 122 , - 63 , - 84 , - 25 , - 46 , - 147 , - 8 , - 109 , - 130 , - 71 , - 92 , - 33 , - 54 , - 155 , - 16 , - 117 , - 138 , - 79 , - 100 , - 41 , - 62 , - 3 , - 24 , - 125 , - 146 , - 87 , - 108 , - 49 , - 70 , - 11 , - 32 , - 133 , - 154 , - 95 , - 116 , - 57 , - 78 , - 19 , - 40 , - 141 , - 2 , - 103 , - 124 , - 65 , - 86 , - 27 , - 48 , - 149 , - 10 , - 111 , - 132 , - 73 , - 94 , - 35 , - 56 , - 157 , - 18 , - 119 , - 140 , - 81 , - 102 , - 43 , - 64 , - 5 , - 26 , - 127 , - 148 , - 89 , - 110 , - 51 , - 72 , - 13 , - 34 , - 135 , - 156 , - 97 , - 118 , - 59 , - 80 , - 21 , - 42 , - 143 , - 4 , - 105 , - 126 , - 67 , - 88 , - 29 , - 50 , - 151 , - 12 , - 113 , - 134 , - 75 , - 96 , - 37 , - 58 , - 159 , - 20 , - 121 , - 142 , - 83 , - 104 , - 45 , - 66 , - 7 , - 28 , - 129 , - 150 , - 91 , - 112 , - 53 , - 74 , - 15 , - 36 , - 137 , - 158 , - 99 , - 120 , - 61 , - 82 , - 23 , - 44 , - 145 , - 6 , - 107 , - 128 , - 69 , - 90 , - 31 , - 52 , - 153 , - 14 , - 115 , - 136 , - 77 , - 98 , - 39 , - 60 , - 1 , - 22 , - 123 , - 144 , - 85 , - 106 , - 47 , - 68 , - 9 , - 30 , - 131 , - 152 , - 93 , - 114 , - 55 , - 76 , - 17 , - 38 , - 139 , - 0 , - 89 , - 10 , - 99 , - 20 , - 109 , - 30 , - 119 , - 40 , - 129 , - 50 , - 139 , - 60 , - 149 , - 70 , - 159 , - 80 , - 1 , - 90 , - 11 , - 100 , - 21 , - 110 , - 31 , - 120 , - 41 , - 130 , - 51 , - 140 , - 61 , - 150 , - 71 , - 160 , - 81 , - 2 , - 91 , - 12 , - 101 , - 22 , - 111 , - 32 , - 121 , - 42 , - 131 , - 52 , - 141 , - 62 , - 151 , - 72 , - 161 , - 82 , - 3 , - 92 , - 13 , - 102 , - 23 , - 112 , - 33 , - 122 , - 43 , - 132 , - 53 , - 142 , - 63 , - 152 , - 73 , - 162 , - 83 , - 4 , - 93 , - 14 , - 103 , - 24 , - 113 , - 34 , - 123 , - 44 , - 133 , - 54 , - 143 , - 64 , - 153 , - 74 , - 163 , - 84 , - 5 , - 94 , - 15 , - 104 , - 25 , - 114 , - 35 , - 124 , - 45 , - 134 , - 55 , - 144 , - 65 , - 154 , - 75 , - 164 , - 85 , - 6 , - 95 , - 16 , - 105 , - 26 , - 115 , - 36 , - 125 , - 46 , - 135 , - 56 , - 145 , - 66 , - 155 , - 76 , - 165 , - 86 , - 7 , - 96 , - 17 , - 106 , - 27 , - 116 , - 37 , - 126 , - 47 , - 136 , - 57 , - 146 , - 67 , - 156 , - 77 , - 166 , - 87 , - 8 , - 97 , - 18 , - 107 , - 28 , - 117 , - 38 , - 127 , - 48 , - 137 , - 58 , - 147 , - 68 , - 157 , - 78 , - 167 , - 88 , - 9 , - 98 , - 19 , - 108 , - 29 , - 118 , - 39 , - 128 , - 49 , - 138 , - 59 , - 148 , - 69 , - 158 , - 79 , - 0 , - 65 , - 42 , - 107 , - 84 , - 149 , - 126 , - 15 , - 168 , - 57 , - 34 , - 99 , - 76 , - 141 , - 118 , - 7 , - 160 , - 49 , - 26 , - 91 , - 68 , - 133 , - 110 , - 175 , - 152 , - 41 , - 18 , - 83 , - 60 , - 125 , - 102 , - 167 , - 144 , - 33 , - 10 , - 75 , - 52 , - 117 , - 94 , - 159 , - 136 , - 25 , - 2 , - 67 , - 44 , - 109 , - 86 , - 151 , - 128 , - 17 , - 170 , - 59 , - 36 , - 101 , - 78 , - 143 , - 120 , - 9 , - 162 , - 51 , - 28 , - 93 , - 70 , - 135 , - 112 , - 1 , - 154 , - 43 , - 20 , - 85 , - 62 , - 127 , - 104 , - 169 , - 146 , - 35 , - 12 , - 77 , - 54 , - 119 , - 96 , - 161 , - 138 , - 27 , - 4 , - 69 , - 46 , - 111 , - 88 , - 153 , - 130 , - 19 , - 172 , - 61 , - 38 , - 103 , - 80 , - 145 , - 122 , - 11 , - 164 , - 53 , - 30 , - 95 , - 72 , - 137 , - 114 , - 3 , - 156 , - 45 , - 22 , - 87 , - 64 , - 129 , - 106 , - 171 , - 148 , - 37 , - 14 , - 79 , - 56 , - 121 , - 98 , - 163 , - 140 , - 29 , - 6 , - 71 , - 48 , - 113 , - 90 , - 155 , - 132 , - 21 , - 174 , - 63 , - 40 , - 105 , - 82 , - 147 , - 124 , - 13 , - 166 , - 55 , - 32 , - 97 , - 74 , - 139 , - 116 , - 5 , - 158 , - 47 , - 24 , - 89 , - 66 , - 131 , - 108 , - 173 , - 150 , - 39 , - 16 , - 81 , - 58 , - 123 , - 100 , - 165 , - 142 , - 31 , - 8 , - 73 , - 50 , - 115 , - 92 , - 157 , - 134 , - 23 , - 0 , - 67 , - 42 , - 109 , - 84 , - 151 , - 126 , - 9 , - 168 , - 51 , - 26 , - 93 , - 68 , - 135 , - 110 , - 177 , - 152 , - 35 , - 10 , - 77 , - 52 , - 119 , - 94 , - 161 , - 136 , - 19 , - 178 , - 61 , - 36 , - 103 , - 78 , - 145 , - 120 , - 3 , - 162 , - 45 , - 20 , - 87 , - 62 , - 129 , - 104 , - 171 , - 146 , - 29 , - 4 , - 71 , - 46 , - 113 , - 88 , - 155 , - 130 , - 13 , - 172 , - 55 , - 30 , - 97 , - 72 , - 139 , - 114 , - 181 , - 156 , - 39 , - 14 , - 81 , - 56 , - 123 , - 98 , - 165 , - 140 , - 23 , - 182 , - 65 , - 40 , - 107 , - 82 , - 149 , - 124 , - 7 , - 166 , - 49 , - 24 , - 91 , - 66 , - 133 , - 108 , - 175 , - 150 , - 33 , - 8 , - 75 , - 50 , - 117 , - 92 , - 159 , - 134 , - 17 , - 176 , - 59 , - 34 , - 101 , - 76 , - 143 , - 118 , - 1 , - 160 , - 43 , - 18 , - 85 , - 60 , - 127 , - 102 , - 169 , - 144 , - 27 , - 2 , - 69 , - 44 , - 111 , - 86 , - 153 , - 128 , - 11 , - 170 , - 53 , - 28 , - 95 , - 70 , - 137 , - 112 , - 179 , - 154 , - 37 , - 12 , - 79 , - 54 , - 121 , - 96 , - 163 , - 138 , - 21 , - 180 , - 63 , - 38 , - 105 , - 80 , - 147 , - 122 , - 5 , - 164 , - 47 , - 22 , - 89 , - 64 , - 131 , - 106 , - 173 , - 148 , - 31 , - 6 , - 73 , - 48 , - 115 , - 90 , - 157 , - 132 , - 15 , - 174 , - 57 , - 32 , - 99 , - 74 , - 141 , - 116 , - 183 , - 158 , - 41 , - 16 , - 83 , - 58 , - 125 , - 100 , - 167 , - 142 , - 25 , - 0 , - 23 , - 142 , - 165 , - 92 , - 115 , - 42 , - 65 , - 184 , - 15 , - 134 , - 157 , - 84 , - 107 , - 34 , - 57 , - 176 , - 7 , - 126 , - 149 , - 76 , - 99 , - 26 , - 49 , - 168 , - 191 , - 118 , - 141 , - 68 , - 91 , - 18 , - 41 , - 160 , - 183 , - 110 , - 133 , - 60 , - 83 , - 10 , - 33 , - 152 , - 175 , - 102 , - 125 , - 52 , - 75 , - 2 , - 25 , - 144 , - 167 , - 94 , - 117 , - 44 , - 67 , - 186 , - 17 , - 136 , - 159 , - 86 , - 109 , - 36 , - 59 , - 178 , - 9 , - 128 , - 151 , - 78 , - 101 , - 28 , - 51 , - 170 , - 1 , - 120 , - 143 , - 70 , - 93 , - 20 , - 43 , - 162 , - 185 , - 112 , - 135 , - 62 , - 85 , - 12 , - 35 , - 154 , - 177 , - 104 , - 127 , - 54 , - 77 , - 4 , - 27 , - 146 , - 169 , - 96 , - 119 , - 46 , - 69 , - 188 , - 19 , - 138 , - 161 , - 88 , - 111 , - 38 , - 61 , - 180 , - 11 , - 130 , - 153 , - 80 , - 103 , - 30 , - 53 , - 172 , - 3 , - 122 , - 145 , - 72 , - 95 , - 22 , - 45 , - 164 , - 187 , - 114 , - 137 , - 64 , - 87 , - 14 , - 37 , - 156 , - 179 , - 106 , - 129 , - 56 , - 79 , - 6 , - 29 , - 148 , - 171 , - 98 , - 121 , - 48 , - 71 , - 190 , - 21 , - 140 , - 163 , - 90 , - 113 , - 40 , - 63 , - 182 , - 13 , - 132 , - 155 , - 82 , - 105 , - 32 , - 55 , - 174 , - 5 , - 124 , - 147 , - 74 , - 97 , - 24 , - 47 , - 166 , - 189 , - 116 , - 139 , - 66 , - 89 , - 16 , - 39 , - 158 , - 181 , - 108 , - 131 , - 58 , - 81 , - 8 , - 31 , - 150 , - 173 , - 100 , - 123 , - 50 , - 73 , - 0 , - 27 , - 154 , - 181 , - 108 , - 135 , - 62 , - 89 , - 16 , - 43 , - 170 , - 197 , - 124 , - 151 , - 78 , - 105 , - 32 , - 59 , - 186 , - 13 , - 140 , - 167 , - 94 , - 121 , - 48 , - 75 , - 2 , - 29 , - 156 , - 183 , - 110 , - 137 , - 64 , - 91 , - 18 , - 45 , - 172 , - 199 , - 126 , - 153 , - 80 , - 107 , - 34 , - 61 , - 188 , - 15 , - 142 , - 169 , - 96 , - 123 , - 50 , - 77 , - 4 , - 31 , - 158 , - 185 , - 112 , - 139 , - 66 , - 93 , - 20 , - 47 , - 174 , - 1 , - 128 , - 155 , - 82 , - 109 , - 36 , - 63 , - 190 , - 17 , - 144 , - 171 , - 98 , - 125 , - 52 , - 79 , - 6 , - 33 , - 160 , - 187 , - 114 , - 141 , - 68 , - 95 , - 22 , - 49 , - 176 , - 3 , - 130 , - 157 , - 84 , - 111 , - 38 , - 65 , - 192 , - 19 , - 146 , - 173 , - 100 , - 127 , - 54 , - 81 , - 8 , - 35 , - 162 , - 189 , - 116 , - 143 , - 70 , - 97 , - 24 , - 51 , - 178 , - 5 , - 132 , - 159 , - 86 , - 113 , - 40 , - 67 , - 194 , - 21 , - 148 , - 175 , - 102 , - 129 , - 56 , - 83 , - 10 , - 37 , - 164 , - 191 , - 118 , - 145 , - 72 , - 99 , - 26 , - 53 , - 180 , - 7 , - 134 , - 161 , - 88 , - 115 , - 42 , - 69 , - 196 , - 23 , - 150 , - 177 , - 104 , - 131 , - 58 , - 85 , - 12 , - 39 , - 166 , - 193 , - 120 , - 147 , - 74 , - 101 , - 28 , - 55 , - 182 , - 9 , - 136 , - 163 , - 90 , - 117 , - 44 , - 71 , - 198 , - 25 , - 152 , - 179 , - 106 , - 133 , - 60 , - 87 , - 14 , - 41 , - 168 , - 195 , - 122 , - 149 , - 76 , - 103 , - 30 , - 57 , - 184 , - 11 , - 138 , - 165 , - 92 , - 119 , - 46 , - 73 , - 0 , - 183 , - 54 , - 29 , - 108 , - 83 , - 162 , - 137 , - 8 , - 191 , - 62 , - 37 , - 116 , - 91 , - 170 , - 145 , - 16 , - 199 , - 70 , - 45 , - 124 , - 99 , - 178 , - 153 , - 24 , - 207 , - 78 , - 53 , - 132 , - 107 , - 186 , - 161 , - 32 , - 7 , - 86 , - 61 , - 140 , - 115 , - 194 , - 169 , - 40 , - 15 , - 94 , - 69 , - 148 , - 123 , - 202 , - 177 , - 48 , - 23 , - 102 , - 77 , - 156 , - 131 , - 2 , - 185 , - 56 , - 31 , - 110 , - 85 , - 164 , - 139 , - 10 , - 193 , - 64 , - 39 , - 118 , - 93 , - 172 , - 147 , - 18 , - 201 , - 72 , - 47 , - 126 , - 101 , - 180 , - 155 , - 26 , - 1 , - 80 , - 55 , - 134 , - 109 , - 188 , - 163 , - 34 , - 9 , - 88 , - 63 , - 142 , - 117 , - 196 , - 171 , - 42 , - 17 , - 96 , - 71 , - 150 , - 125 , - 204 , - 179 , - 50 , - 25 , - 104 , - 79 , - 158 , - 133 , - 4 , - 187 , - 58 , - 33 , - 112 , - 87 , - 166 , - 141 , - 12 , - 195 , - 66 , - 41 , - 120 , - 95 , - 174 , - 149 , - 20 , - 203 , - 74 , - 49 , - 128 , - 103 , - 182 , - 157 , - 28 , - 3 , - 82 , - 57 , - 136 , - 111 , - 190 , - 165 , - 36 , - 11 , - 90 , - 65 , - 144 , - 119 , - 198 , - 173 , - 44 , - 19 , - 98 , - 73 , - 152 , - 127 , - 206 , - 181 , - 52 , - 27 , - 106 , - 81 , - 160 , - 135 , - 6 , - 189 , - 60 , - 35 , - 114 , - 89 , - 168 , - 143 , - 14 , - 197 , - 68 , - 43 , - 122 , - 97 , - 176 , - 151 , - 22 , - 205 , - 76 , - 51 , - 130 , - 105 , - 184 , - 159 , - 30 , - 5 , - 84 , - 59 , - 138 , - 113 , - 192 , - 167 , - 38 , - 13 , - 92 , - 67 , - 146 , - 121 , - 200 , - 175 , - 46 , - 21 , - 100 , - 75 , - 154 , - 129 , - 0 , - 95 , - 46 , - 69 , - 164 , - 115 , - 138 , - 17 , - 184 , - 207 , - 86 , - 37 , - 60 , - 155 , - 106 , - 129 , - 8 , - 175 , - 198 , - 77 , - 28 , - 51 , - 146 , - 97 , - 120 , - 215 , - 166 , - 189 , - 68 , - 19 , - 42 , - 137 , - 88 , - 111 , - 206 , - 157 , - 180 , - 59 , - 10 , - 33 , - 128 , - 79 , - 102 , - 197 , - 148 , - 171 , - 50 , - 1 , - 24 , - 119 , - 70 , - 93 , - 188 , - 139 , - 162 , - 41 , - 208 , - 15 , - 110 , - 61 , - 84 , - 179 , - 130 , - 153 , - 32 , - 199 , - 6 , - 101 , - 52 , - 75 , - 170 , - 121 , - 144 , - 23 , - 190 , - 213 , - 92 , - 43 , - 66 , - 161 , - 112 , - 135 , - 14 , - 181 , - 204 , - 83 , - 34 , - 57 , - 152 , - 103 , - 126 , - 5 , - 172 , - 195 , - 74 , - 25 , - 48 , - 143 , - 94 , - 117 , - 212 , - 163 , - 186 , - 65 , - 16 , - 39 , - 134 , - 85 , - 108 , - 203 , - 154 , - 177 , - 56 , - 7 , - 30 , - 125 , - 76 , - 99 , - 194 , - 145 , - 168 , - 47 , - 214 , - 21 , - 116 , - 67 , - 90 , - 185 , - 136 , - 159 , - 38 , - 205 , - 12 , - 107 , - 58 , - 81 , - 176 , - 127 , - 150 , - 29 , - 196 , - 3 , - 98 , - 49 , - 72 , - 167 , - 118 , - 141 , - 20 , - 187 , - 210 , - 89 , - 40 , - 63 , - 158 , - 109 , - 132 , - 11 , - 178 , - 201 , - 80 , - 31 , - 54 , - 149 , - 100 , - 123 , - 2 , - 169 , - 192 , - 71 , - 22 , - 45 , - 140 , - 91 , - 114 , - 209 , - 160 , - 183 , - 62 , - 13 , - 36 , - 131 , - 82 , - 105 , - 200 , - 151 , - 174 , - 53 , - 4 , - 27 , - 122 , - 73 , - 96 , - 191 , - 142 , - 165 , - 44 , - 211 , - 18 , - 113 , - 64 , - 87 , - 182 , - 133 , - 156 , - 35 , - 202 , - 9 , - 104 , - 55 , - 78 , - 173 , - 124 , - 147 , - 26 , - 193 , - 0 , - 139 , - 166 , - 81 , - 108 , - 23 , - 50 , - 189 , - 216 , - 131 , - 158 , - 73 , - 100 , - 15 , - 42 , - 181 , - 208 , - 123 , - 150 , - 65 , - 92 , - 7 , - 34 , - 173 , - 200 , - 115 , - 142 , - 57 , - 84 , - 223 , - 26 , - 165 , - 192 , - 107 , - 134 , - 49 , - 76 , - 215 , - 18 , - 157 , - 184 , - 99 , - 126 , - 41 , - 68 , - 207 , - 10 , - 149 , - 176 , - 91 , - 118 , - 33 , - 60 , - 199 , - 2 , - 141 , - 168 , - 83 , - 110 , - 25 , - 52 , - 191 , - 218 , - 133 , - 160 , - 75 , - 102 , - 17 , - 44 , - 183 , - 210 , - 125 , - 152 , - 67 , - 94 , - 9 , - 36 , - 175 , - 202 , - 117 , - 144 , - 59 , - 86 , - 1 , - 28 , - 167 , - 194 , - 109 , - 136 , - 51 , - 78 , - 217 , - 20 , - 159 , - 186 , - 101 , - 128 , - 43 , - 70 , - 209 , - 12 , - 151 , - 178 , - 93 , - 120 , - 35 , - 62 , - 201 , - 4 , - 143 , - 170 , - 85 , - 112 , - 27 , - 54 , - 193 , - 220 , - 135 , - 162 , - 77 , - 104 , - 19 , - 46 , - 185 , - 212 , - 127 , - 154 , - 69 , - 96 , - 11 , - 38 , - 177 , - 204 , - 119 , - 146 , - 61 , - 88 , - 3 , - 30 , - 169 , - 196 , - 111 , - 138 , - 53 , - 80 , - 219 , - 22 , - 161 , - 188 , - 103 , - 130 , - 45 , - 72 , - 211 , - 14 , - 153 , - 180 , - 95 , - 122 , - 37 , - 64 , - 203 , - 6 , - 145 , - 172 , - 87 , - 114 , - 29 , - 56 , - 195 , - 222 , - 137 , - 164 , - 79 , - 106 , - 21 , - 48 , - 187 , - 214 , - 129 , - 156 , - 71 , - 98 , - 13 , - 40 , - 179 , - 206 , - 121 , - 148 , - 63 , - 90 , - 5 , - 32 , - 171 , - 198 , - 113 , - 140 , - 55 , - 82 , - 221 , - 24 , - 163 , - 190 , - 105 , - 132 , - 47 , - 74 , - 213 , - 16 , - 155 , - 182 , - 97 , - 124 , - 39 , - 66 , - 205 , - 8 , - 147 , - 174 , - 89 , - 116 , - 31 , - 58 , - 197 , - 0 , - 43 , - 202 , - 13 , - 172 , - 215 , - 142 , - 185 , - 112 , - 155 , - 82 , - 125 , - 52 , - 95 , - 22 , - 65 , - 224 , - 35 , - 194 , - 5 , - 164 , - 207 , - 134 , - 177 , - 104 , - 147 , - 74 , - 117 , - 44 , - 87 , - 14 , - 57 , - 216 , - 27 , - 186 , - 229 , - 156 , - 199 , - 126 , - 169 , - 96 , - 139 , - 66 , - 109 , - 36 , - 79 , - 6 , - 49 , - 208 , - 19 , - 178 , - 221 , - 148 , - 191 , - 118 , - 161 , - 88 , - 131 , - 58 , - 101 , - 28 , - 71 , - 230 , - 41 , - 200 , - 11 , - 170 , - 213 , - 140 , - 183 , - 110 , - 153 , - 80 , - 123 , - 50 , - 93 , - 20 , - 63 , - 222 , - 33 , - 192 , - 3 , - 162 , - 205 , - 132 , - 175 , - 102 , - 145 , - 72 , - 115 , - 42 , - 85 , - 12 , - 55 , - 214 , - 25 , - 184 , - 227 , - 154 , - 197 , - 124 , - 167 , - 94 , - 137 , - 64 , - 107 , - 34 , - 77 , - 4 , - 47 , - 206 , - 17 , - 176 , - 219 , - 146 , - 189 , - 116 , - 159 , - 86 , - 129 , - 56 , - 99 , - 26 , - 69 , - 228 , - 39 , - 198 , - 9 , - 168 , - 211 , - 138 , - 181 , - 108 , - 151 , - 78 , - 121 , - 48 , - 91 , - 18 , - 61 , - 220 , - 31 , - 190 , - 1 , - 160 , - 203 , - 130 , - 173 , - 100 , - 143 , - 70 , - 113 , - 40 , - 83 , - 10 , - 53 , - 212 , - 23 , - 182 , - 225 , - 152 , - 195 , - 122 , - 165 , - 92 , - 135 , - 62 , - 105 , - 32 , - 75 , - 2 , - 45 , - 204 , - 15 , - 174 , - 217 , - 144 , - 187 , - 114 , - 157 , - 84 , - 127 , - 54 , - 97 , - 24 , - 67 , - 226 , - 37 , - 196 , - 7 , - 166 , - 209 , - 136 , - 179 , - 106 , - 149 , - 76 , - 119 , - 46 , - 89 , - 16 , - 59 , - 218 , - 29 , - 188 , - 231 , - 158 , - 201 , - 128 , - 171 , - 98 , - 141 , - 68 , - 111 , - 38 , - 81 , - 8 , - 51 , - 210 , - 21 , - 180 , - 223 , - 150 , - 193 , - 120 , - 163 , - 90 , - 133 , - 60 , - 103 , - 30 , - 73 , - 0 , - 89 , - 58 , - 147 , - 116 , - 205 , - 174 , - 23 , - 232 , - 81 , - 50 , - 139 , - 108 , - 197 , - 166 , - 15 , - 224 , - 73 , - 42 , - 131 , - 100 , - 189 , - 158 , - 7 , - 216 , - 65 , - 34 , - 123 , - 92 , - 181 , - 150 , - 239 , - 208 , - 57 , - 26 , - 115 , - 84 , - 173 , - 142 , - 231 , - 200 , - 49 , - 18 , - 107 , - 76 , - 165 , - 134 , - 223 , - 192 , - 41 , - 10 , - 99 , - 68 , - 157 , - 126 , - 215 , - 184 , - 33 , - 2 , - 91 , - 60 , - 149 , - 118 , - 207 , - 176 , - 25 , - 234 , - 83 , - 52 , - 141 , - 110 , - 199 , - 168 , - 17 , - 226 , - 75 , - 44 , - 133 , - 102 , - 191 , - 160 , - 9 , - 218 , - 67 , - 36 , - 125 , - 94 , - 183 , - 152 , - 1 , - 210 , - 59 , - 28 , - 117 , - 86 , - 175 , - 144 , - 233 , - 202 , - 51 , - 20 , - 109 , - 78 , - 167 , - 136 , - 225 , - 194 , - 43 , - 12 , - 101 , - 70 , - 159 , - 128 , - 217 , - 186 , - 35 , - 4 , - 93 , - 62 , - 151 , - 120 , - 209 , - 178 , - 27 , - 236 , - 85 , - 54 , - 143 , - 112 , - 201 , - 170 , - 19 , - 228 , - 77 , - 46 , - 135 , - 104 , - 193 , - 162 , - 11 , - 220 , - 69 , - 38 , - 127 , - 96 , - 185 , - 154 , - 3 , - 212 , - 61 , - 30 , - 119 , - 88 , - 177 , - 146 , - 235 , - 204 , - 53 , - 22 , - 111 , - 80 , - 169 , - 138 , - 227 , - 196 , - 45 , - 14 , - 103 , - 72 , - 161 , - 130 , - 219 , - 188 , - 37 , - 6 , - 95 , - 64 , - 153 , - 122 , - 211 , - 180 , - 29 , - 238 , - 87 , - 56 , - 145 , - 114 , - 203 , - 172 , - 21 , - 230 , - 79 , - 48 , - 137 , - 106 , - 195 , - 164 , - 13 , - 222 , - 71 , - 40 , - 129 , - 98 , - 187 , - 156 , - 5 , - 214 , - 63 , - 32 , - 121 , - 90 , - 179 , - 148 , - 237 , - 206 , - 55 , - 24 , - 113 , - 82 , - 171 , - 140 , - 229 , - 198 , - 47 , - 16 , - 105 , - 74 , - 163 , - 132 , - 221 , - 190 , - 39 , - 8 , - 97 , - 66 , - 155 , - 124 , - 213 , - 182 , - 31 , - 0 , - 171 , - 218 , - 141 , - 188 , - 111 , - 158 , - 81 , - 128 , - 51 , - 98 , - 21 , - 68 , - 239 , - 38 , - 209 , - 8 , - 179 , - 226 , - 149 , - 196 , - 119 , - 166 , - 89 , - 136 , - 59 , - 106 , - 29 , - 76 , - 247 , - 46 , - 217 , - 16 , - 187 , - 234 , - 157 , - 204 , - 127 , - 174 , - 97 , - 144 , - 67 , - 114 , - 37 , - 84 , - 7 , - 54 , - 225 , - 24 , - 195 , - 242 , - 165 , - 212 , - 135 , - 182 , - 105 , - 152 , - 75 , - 122 , - 45 , - 92 , - 15 , - 62 , - 233 , - 32 , - 203 , - 2 , - 173 , - 220 , - 143 , - 190 , - 113 , - 160 , - 83 , - 130 , - 53 , - 100 , - 23 , - 70 , - 241 , - 40 , - 211 , - 10 , - 181 , - 228 , - 151 , - 198 , - 121 , - 168 , - 91 , - 138 , - 61 , - 108 , - 31 , - 78 , - 1 , - 48 , - 219 , - 18 , - 189 , - 236 , - 159 , - 206 , - 129 , - 176 , - 99 , - 146 , - 69 , - 116 , - 39 , - 86 , - 9 , - 56 , - 227 , - 26 , - 197 , - 244 , - 167 , - 214 , - 137 , - 184 , - 107 , - 154 , - 77 , - 124 , - 47 , - 94 , - 17 , - 64 , - 235 , - 34 , - 205 , - 4 , - 175 , - 222 , - 145 , - 192 , - 115 , - 162 , - 85 , - 132 , - 55 , - 102 , - 25 , - 72 , - 243 , - 42 , - 213 , - 12 , - 183 , - 230 , - 153 , - 200 , - 123 , - 170 , - 93 , - 140 , - 63 , - 110 , - 33 , - 80 , - 3 , - 50 , - 221 , - 20 , - 191 , - 238 , - 161 , - 208 , - 131 , - 178 , - 101 , - 148 , - 71 , - 118 , - 41 , - 88 , - 11 , - 58 , - 229 , - 28 , - 199 , - 246 , - 169 , - 216 , - 139 , - 186 , - 109 , - 156 , - 79 , - 126 , - 49 , - 96 , - 19 , - 66 , - 237 , - 36 , - 207 , - 6 , - 177 , - 224 , - 147 , - 194 , - 117 , - 164 , - 87 , - 134 , - 57 , - 104 , - 27 , - 74 , - 245 , - 44 , - 215 , - 14 , - 185 , - 232 , - 155 , - 202 , - 125 , - 172 , - 95 , - 142 , - 65 , - 112 , - 35 , - 82 , - 5 , - 52 , - 223 , - 22 , - 193 , - 240 , - 163 , - 210 , - 133 , - 180 , - 103 , - 150 , - 73 , - 120 , - 43 , - 90 , - 13 , - 60 , - 231 , - 30 , - 201 , - 0 , - 15 , - 94 , - 237 , - 188 , - 203 , - 26 , - 169 , - 120 , - 135 , - 214 , - 101 , - 52 , - 67 , - 146 , - 33 , - 240 , - 255 , - 78 , - 221 , - 172 , - 187 , - 10 , - 153 , - 104 , - 119 , - 198 , - 85 , - 36 , - 51 , - 130 , - 17 , - 224 , - 239 , - 62 , - 205 , - 156 , - 171 , - 250 , - 137 , - 88 , - 103 , - 182 , - 69 , - 20 , - 35 , - 114 , - 1 , - 208 , - 223 , - 46 , - 189 , - 140 , - 155 , - 234 , - 121 , - 72 , - 87 , - 166 , - 53 , - 4 , - 19 , - 98 , - 241 , - 192 , - 207 , - 30 , - 173 , - 124 , - 139 , - 218 , - 105 , - 56 , - 71 , - 150 , - 37 , - 244 , - 3 , - 82 , - 225 , - 176 , - 191 , - 14 , - 157 , - 108 , - 123 , - 202 , - 89 , - 40 , - 55 , - 134 , - 21 , - 228 , - 243 , - 66 , - 209 , - 160 , - 175 , - 254 , - 141 , - 92 , - 107 , - 186 , - 73 , - 24 , - 39 , - 118 , - 5 , - 212 , - 227 , - 50 , - 193 , - 144 , - 159 , - 238 , - 125 , - 76 , - 91 , - 170 , - 57 , - 8 , - 23 , - 102 , - 245 , - 196 , - 211 , - 34 , - 177 , - 128 , - 143 , - 222 , - 109 , - 60 , - 75 , - 154 , - 41 , - 248 , - 7 , - 86 , - 229 , - 180 , - 195 , - 18 , - 161 , - 112 , - 127 , - 206 , - 93 , - 44 , - 59 , - 138 , - 25 , - 232 , - 247 , - 70 , - 213 , - 164 , - 179 , - 2 , - 145 , - 96 , - 111 , - 190 , - 77 , - 28 , - 43 , - 122 , - 9 , - 216 , - 231 , - 54 , - 197 , - 148 , - 163 , - 242 , - 129 , - 80 , - 95 , - 174 , - 61 , - 12 , - 27 , - 106 , - 249 , - 200 , - 215 , - 38 , - 181 , - 132 , - 147 , - 226 , - 113 , - 64 , - 79 , - 158 , - 45 , - 252 , - 11 , - 90 , - 233 , - 184 , - 199 , - 22 , - 165 , - 116 , - 131 , - 210 , - 97 , - 48 , - 63 , - 142 , - 29 , - 236 , - 251 , - 74 , - 217 , - 168 , - 183 , - 6 , - 149 , - 100 , - 115 , - 194 , - 81 , - 32 , - 47 , - 126 , - 13 , - 220 , - 235 , - 58 , - 201 , - 152 , - 167 , - 246 , - 133 , - 84 , - 99 , - 178 , - 65 , - 16 , - 31 , - 110 , - 253 , - 204 , - 219 , - 42 , - 185 , - 136 , - 151 , - 230 , - 117 , - 68 , - 83 , - 162 , - 49 , - 0 , - 35 , - 202 , - 237 , - 140 , - 175 , - 78 , - 113 , - 16 , - 51 , - 218 , - 253 , - 156 , - 191 , - 94 , - 129 , - 32 , - 67 , - 234 , - 5 , - 172 , - 207 , - 110 , - 145 , - 48 , - 83 , - 250 , - 21 , - 188 , - 223 , - 126 , - 161 , - 64 , - 99 , - 2 , - 37 , - 204 , - 239 , - 142 , - 177 , - 80 , - 115 , - 18 , - 53 , - 220 , - 255 , - 158 , - 193 , - 96 , - 131 , - 34 , - 69 , - 236 , - 7 , - 174 , - 209 , - 112 , - 147 , - 50 , - 85 , - 252 , - 23 , - 190 , - 225 , - 128 , - 163 , - 66 , - 101 , - 4 , - 39 , - 206 , - 241 , - 144 , - 179 , - 82 , - 117 , - 20 , - 55 , - 222 , - 257 , - 160 , - 195 , - 98 , - 133 , - 36 , - 71 , - 238 , - 9 , - 176 , - 211 , - 114 , - 149 , - 52 , - 87 , - 254 , - 25 , - 192 , - 227 , - 130 , - 165 , - 68 , - 103 , - 6 , - 41 , - 208 , - 243 , - 146 , - 181 , - 84 , - 119 , - 22 , - 57 , - 224 , - 259 , - 162 , - 197 , - 100 , - 135 , - 38 , - 73 , - 240 , - 11 , - 178 , - 213 , - 116 , - 151 , - 54 , - 89 , - 256 , - 27 , - 194 , - 229 , - 132 , - 167 , - 70 , - 105 , - 8 , - 43 , - 210 , - 245 , - 148 , - 183 , - 86 , - 121 , - 24 , - 59 , - 226 , - 261 , - 164 , - 199 , - 102 , - 137 , - 40 , - 75 , - 242 , - 13 , - 180 , - 215 , - 118 , - 153 , - 56 , - 91 , - 258 , - 29 , - 196 , - 231 , - 134 , - 169 , - 72 , - 107 , - 10 , - 45 , - 212 , - 247 , - 150 , - 185 , - 88 , - 123 , - 26 , - 61 , - 228 , - 263 , - 166 , - 201 , - 104 , - 139 , - 42 , - 77 , - 244 , - 15 , - 182 , - 217 , - 120 , - 155 , - 58 , - 93 , - 260 , - 31 , - 198 , - 233 , - 136 , - 171 , - 74 , - 109 , - 12 , - 47 , - 214 , - 249 , - 152 , - 187 , - 90 , - 125 , - 28 , - 63 , - 230 , - 1 , - 168 , - 203 , - 106 , - 141 , - 44 , - 79 , - 246 , - 17 , - 184 , - 219 , - 122 , - 157 , - 60 , - 95 , - 262 , - 33 , - 200 , - 235 , - 138 , - 173 , - 76 , - 111 , - 14 , - 49 , - 216 , - 251 , - 154 , - 189 , - 92 , - 127 , - 30 , - 65 , - 232 , - 3 , - 170 , - 205 , - 108 , - 143 , - 46 , - 81 , - 248 , - 19 , - 186 , - 221 , - 124 , - 159 , - 62 , - 97 , - 0 , - 237 , - 66 , - 31 , - 132 , - 97 , - 198 , - 163 , - 264 , - 229 , - 58 , - 23 , - 124 , - 89 , - 190 , - 155 , - 256 , - 221 , - 50 , - 15 , - 116 , - 81 , - 182 , - 147 , - 248 , - 213 , - 42 , - 7 , - 108 , - 73 , - 174 , - 139 , - 240 , - 205 , - 34 , - 271 , - 100 , - 65 , - 166 , - 131 , - 232 , - 197 , - 26 , - 263 , - 92 , - 57 , - 158 , - 123 , - 224 , - 189 , - 18 , - 255 , - 84 , - 49 , - 150 , - 115 , - 216 , - 181 , - 10 , - 247 , - 76 , - 41 , - 142 , - 107 , - 208 , - 173 , - 2 , - 239 , - 68 , - 33 , - 134 , - 99 , - 200 , - 165 , - 266 , - 231 , - 60 , - 25 , - 126 , - 91 , - 192 , - 157 , - 258 , - 223 , - 52 , - 17 , - 118 , - 83 , - 184 , - 149 , - 250 , - 215 , - 44 , - 9 , - 110 , - 75 , - 176 , - 141 , - 242 , - 207 , - 36 , - 1 , - 102 , - 67 , - 168 , - 133 , - 234 , - 199 , - 28 , - 265 , - 94 , - 59 , - 160 , - 125 , - 226 , - 191 , - 20 , - 257 , - 86 , - 51 , - 152 , - 117 , - 218 , - 183 , - 12 , - 249 , - 78 , - 43 , - 144 , - 109 , - 210 , - 175 , - 4 , - 241 , - 70 , - 35 , - 136 , - 101 , - 202 , - 167 , - 268 , - 233 , - 62 , - 27 , - 128 , - 93 , - 194 , - 159 , - 260 , - 225 , - 54 , - 19 , - 120 , - 85 , - 186 , - 151 , - 252 , - 217 , - 46 , - 11 , - 112 , - 77 , - 178 , - 143 , - 244 , - 209 , - 38 , - 3 , - 104 , - 69 , - 170 , - 135 , - 236 , - 201 , - 30 , - 267 , - 96 , - 61 , - 162 , - 127 , - 228 , - 193 , - 22 , - 259 , - 88 , - 53 , - 154 , - 119 , - 220 , - 185 , - 14 , - 251 , - 80 , - 45 , - 146 , - 111 , - 212 , - 177 , - 6 , - 243 , - 72 , - 37 , - 138 , - 103 , - 204 , - 169 , - 270 , - 235 , - 64 , - 29 , - 130 , - 95 , - 196 , - 161 , - 262 , - 227 , - 56 , - 21 , - 122 , - 87 , - 188 , - 153 , - 254 , - 219 , - 48 , - 13 , - 114 , - 79 , - 180 , - 145 , - 246 , - 211 , - 40 , - 5 , - 106 , - 71 , - 172 , - 137 , - 238 , - 203 , - 32 , - 269 , - 98 , - 63 , - 164 , - 129 , - 230 , - 195 , - 24 , - 261 , - 90 , - 55 , - 156 , - 121 , - 222 , - 187 , - 16 , - 253 , - 82 , - 47 , - 148 , - 113 , - 214 , - 179 , - 8 , - 245 , - 74 , - 39 , - 140 , - 105 , - 206 , - 171 , - 0 , - 17 , - 174 , - 191 , - 68 , - 85 , - 242 , - 259 , - 136 , - 153 , - 30 , - 47 , - 204 , - 221 , - 98 , - 115 , - 272 , - 9 , - 166 , - 183 , - 60 , - 77 , - 234 , - 251 , - 128 , - 145 , - 22 , - 39 , - 196 , - 213 , - 90 , - 107 , - 264 , - 1 , - 158 , - 175 , - 52 , - 69 , - 226 , - 243 , - 120 , - 137 , - 14 , - 31 , - 188 , - 205 , - 82 , - 99 , - 256 , - 273 , - 150 , - 167 , - 44 , - 61 , - 218 , - 235 , - 112 , - 129 , - 6 , - 23 , - 180 , - 197 , - 74 , - 91 , - 248 , - 265 , - 142 , - 159 , - 36 , - 53 , - 210 , - 227 , - 104 , - 121 , - 278 , - 15 , - 172 , - 189 , - 66 , - 83 , - 240 , - 257 , - 134 , - 151 , - 28 , - 45 , - 202 , - 219 , - 96 , - 113 , - 270 , - 7 , - 164 , - 181 , - 58 , - 75 , - 232 , - 249 , - 126 , - 143 , - 20 , - 37 , - 194 , - 211 , - 88 , - 105 , - 262 , - 279 , - 156 , - 173 , - 50 , - 67 , - 224 , - 241 , - 118 , - 135 , - 12 , - 29 , - 186 , - 203 , - 80 , - 97 , - 254 , - 271 , - 148 , - 165 , - 42 , - 59 , - 216 , - 233 , - 110 , - 127 , - 4 , - 21 , - 178 , - 195 , - 72 , - 89 , - 246 , - 263 , - 140 , - 157 , - 34 , - 51 , - 208 , - 225 , - 102 , - 119 , - 276 , - 13 , - 170 , - 187 , - 64 , - 81 , - 238 , - 255 , - 132 , - 149 , - 26 , - 43 , - 200 , - 217 , - 94 , - 111 , - 268 , - 5 , - 162 , - 179 , - 56 , - 73 , - 230 , - 247 , - 124 , - 141 , - 18 , - 35 , - 192 , - 209 , - 86 , - 103 , - 260 , - 277 , - 154 , - 171 , - 48 , - 65 , - 222 , - 239 , - 116 , - 133 , - 10 , - 27 , - 184 , - 201 , - 78 , - 95 , - 252 , - 269 , - 146 , - 163 , - 40 , - 57 , - 214 , - 231 , - 108 , - 125 , - 2 , - 19 , - 176 , - 193 , - 70 , - 87 , - 244 , - 261 , - 138 , - 155 , - 32 , - 49 , - 206 , - 223 , - 100 , - 117 , - 274 , - 11 , - 168 , - 185 , - 62 , - 79 , - 236 , - 253 , - 130 , - 147 , - 24 , - 41 , - 198 , - 215 , - 92 , - 109 , - 266 , - 3 , - 160 , - 177 , - 54 , - 71 , - 228 , - 245 , - 122 , - 139 , - 16 , - 33 , - 190 , - 207 , - 84 , - 101 , - 258 , - 275 , - 152 , - 169 , - 46 , - 63 , - 220 , - 237 , - 114 , - 131 , - 8 , - 25 , - 182 , - 199 , - 76 , - 93 , - 250 , - 267 , - 144 , - 161 , - 38 , - 55 , - 212 , - 229 , - 106 , - 123 , - 0 , - 271 , - 38 , - 165 , - 76 , - 59 , - 114 , - 241 , - 152 , - 135 , - 190 , - 29 , - 228 , - 211 , - 266 , - 105 , - 16 , - 287 , - 54 , - 181 , - 92 , - 75 , - 130 , - 257 , - 168 , - 151 , - 206 , - 45 , - 244 , - 227 , - 282 , - 121 , - 32 , - 15 , - 70 , - 197 , - 108 , - 91 , - 146 , - 273 , - 184 , - 167 , - 222 , - 61 , - 260 , - 243 , - 10 , - 137 , - 48 , - 31 , - 86 , - 213 , - 124 , - 107 , - 162 , - 1 , - 200 , - 183 , - 238 , - 77 , - 276 , - 259 , - 26 , - 153 , - 64 , - 47 , - 102 , - 229 , - 140 , - 123 , - 178 , - 17 , - 216 , - 199 , - 254 , - 93 , - 4 , - 275 , - 42 , - 169 , - 80 , - 63 , - 118 , - 245 , - 156 , - 139 , - 194 , - 33 , - 232 , - 215 , - 270 , - 109 , - 20 , - 3 , - 58 , - 185 , - 96 , - 79 , - 134 , - 261 , - 172 , - 155 , - 210 , - 49 , - 248 , - 231 , - 286 , - 125 , - 36 , - 19 , - 74 , - 201 , - 112 , - 95 , - 150 , - 277 , - 188 , - 171 , - 226 , - 65 , - 264 , - 247 , - 14 , - 141 , - 52 , - 35 , - 90 , - 217 , - 128 , - 111 , - 166 , - 5 , - 204 , - 187 , - 242 , - 81 , - 280 , - 263 , - 30 , - 157 , - 68 , - 51 , - 106 , - 233 , - 144 , - 127 , - 182 , - 21 , - 220 , - 203 , - 258 , - 97 , - 8 , - 279 , - 46 , - 173 , - 84 , - 67 , - 122 , - 249 , - 160 , - 143 , - 198 , - 37 , - 236 , - 219 , - 274 , - 113 , - 24 , - 7 , - 62 , - 189 , - 100 , - 83 , - 138 , - 265 , - 176 , - 159 , - 214 , - 53 , - 252 , - 235 , - 2 , - 129 , - 40 , - 23 , - 78 , - 205 , - 116 , - 99 , - 154 , - 281 , - 192 , - 175 , - 230 , - 69 , - 268 , - 251 , - 18 , - 145 , - 56 , - 39 , - 94 , - 221 , - 132 , - 115 , - 170 , - 9 , - 208 , - 191 , - 246 , - 85 , - 284 , - 267 , - 34 , - 161 , - 72 , - 55 , - 110 , - 237 , - 148 , - 131 , - 186 , - 25 , - 224 , - 207 , - 262 , - 101 , - 12 , - 283 , - 50 , - 177 , - 88 , - 71 , - 126 , - 253 , - 164 , - 147 , - 202 , - 41 , - 240 , - 223 , - 278 , - 117 , - 28 , - 11 , - 66 , - 193 , - 104 , - 87 , - 142 , - 269 , - 180 , - 163 , - 218 , - 57 , - 256 , - 239 , - 6 , - 133 , - 44 , - 27 , - 82 , - 209 , - 120 , - 103 , - 158 , - 285 , - 196 , - 179 , - 234 , - 73 , - 272 , - 255 , - 22 , - 149 , - 60 , - 43 , - 98 , - 225 , - 136 , - 119 , - 174 , - 13 , - 212 , - 195 , - 250 , - 89 , - 0 , - 261 , - 78 , - 43 , - 156 , - 121 , - 234 , - 199 , - 16 , - 277 , - 94 , - 59 , - 172 , - 137 , - 250 , - 215 , - 32 , - 293 , - 110 , - 75 , - 188 , - 153 , - 266 , - 231 , - 48 , - 13 , - 126 , - 91 , - 204 , - 169 , - 282 , - 247 , - 64 , - 29 , - 142 , - 107 , - 220 , - 185 , - 2 , - 263 , - 80 , - 45 , - 158 , - 123 , - 236 , - 201 , - 18 , - 279 , - 96 , - 61 , - 174 , - 139 , - 252 , - 217 , - 34 , - 295 , - 112 , - 77 , - 190 , - 155 , - 268 , - 233 , - 50 , - 15 , - 128 , - 93 , - 206 , - 171 , - 284 , - 249 , - 66 , - 31 , - 144 , - 109 , - 222 , - 187 , - 4 , - 265 , - 82 , - 47 , - 160 , - 125 , - 238 , - 203 , - 20 , - 281 , - 98 , - 63 , - 176 , - 141 , - 254 , - 219 , - 36 , - 1 , - 114 , - 79 , - 192 , - 157 , - 270 , - 235 , - 52 , - 17 , - 130 , - 95 , - 208 , - 173 , - 286 , - 251 , - 68 , - 33 , - 146 , - 111 , - 224 , - 189 , - 6 , - 267 , - 84 , - 49 , - 162 , - 127 , - 240 , - 205 , - 22 , - 283 , - 100 , - 65 , - 178 , - 143 , - 256 , - 221 , - 38 , - 3 , - 116 , - 81 , - 194 , - 159 , - 272 , - 237 , - 54 , - 19 , - 132 , - 97 , - 210 , - 175 , - 288 , - 253 , - 70 , - 35 , - 148 , - 113 , - 226 , - 191 , - 8 , - 269 , - 86 , - 51 , - 164 , - 129 , - 242 , - 207 , - 24 , - 285 , - 102 , - 67 , - 180 , - 145 , - 258 , - 223 , - 40 , - 5 , - 118 , - 83 , - 196 , - 161 , - 274 , - 239 , - 56 , - 21 , - 134 , - 99 , - 212 , - 177 , - 290 , - 255 , - 72 , - 37 , - 150 , - 115 , - 228 , - 193 , - 10 , - 271 , - 88 , - 53 , - 166 , - 131 , - 244 , - 209 , - 26 , - 287 , - 104 , - 69 , - 182 , - 147 , - 260 , - 225 , - 42 , - 7 , - 120 , - 85 , - 198 , - 163 , - 276 , - 241 , - 58 , - 23 , - 136 , - 101 , - 214 , - 179 , - 292 , - 257 , - 74 , - 39 , - 152 , - 117 , - 230 , - 195 , - 12 , - 273 , - 90 , - 55 , - 168 , - 133 , - 246 , - 211 , - 28 , - 289 , - 106 , - 71 , - 184 , - 149 , - 262 , - 227 , - 44 , - 9 , - 122 , - 87 , - 200 , - 165 , - 278 , - 243 , - 60 , - 25 , - 138 , - 103 , - 216 , - 181 , - 294 , - 259 , - 76 , - 41 , - 154 , - 119 , - 232 , - 197 , - 14 , - 275 , - 92 , - 57 , - 170 , - 135 , - 248 , - 213 , - 30 , - 291 , - 108 , - 73 , - 186 , - 151 , - 264 , - 229 , - 46 , - 11 , - 124 , - 89 , - 202 , - 167 , - 280 , - 245 , - 62 , - 27 , - 140 , - 105 , - 218 , - 183 , - 0 , - 113 , - 74 , - 187 , - 148 , - 261 , - 222 , - 31 , - 296 , - 105 , - 66 , - 179 , - 140 , - 253 , - 214 , - 23 , - 288 , - 97 , - 58 , - 171 , - 132 , - 245 , - 206 , - 15 , - 280 , - 89 , - 50 , - 163 , - 124 , - 237 , - 198 , - 7 , - 272 , - 81 , - 42 , - 155 , - 116 , - 229 , - 190 , - 303 , - 264 , - 73 , - 34 , - 147 , - 108 , - 221 , - 182 , - 295 , - 256 , - 65 , - 26 , - 139 , - 100 , - 213 , - 174 , - 287 , - 248 , - 57 , - 18 , - 131 , - 92 , - 205 , - 166 , - 279 , - 240 , - 49 , - 10 , - 123 , - 84 , - 197 , - 158 , - 271 , - 232 , - 41 , - 2 , - 115 , - 76 , - 189 , - 150 , - 263 , - 224 , - 33 , - 298 , - 107 , - 68 , - 181 , - 142 , - 255 , - 216 , - 25 , - 290 , - 99 , - 60 , - 173 , - 134 , - 247 , - 208 , - 17 , - 282 , - 91 , - 52 , - 165 , - 126 , - 239 , - 200 , - 9 , - 274 , - 83 , - 44 , - 157 , - 118 , - 231 , - 192 , - 1 , - 266 , - 75 , - 36 , - 149 , - 110 , - 223 , - 184 , - 297 , - 258 , - 67 , - 28 , - 141 , - 102 , - 215 , - 176 , - 289 , - 250 , - 59 , - 20 , - 133 , - 94 , - 207 , - 168 , - 281 , - 242 , - 51 , - 12 , - 125 , - 86 , - 199 , - 160 , - 273 , - 234 , - 43 , - 4 , - 117 , - 78 , - 191 , - 152 , - 265 , - 226 , - 35 , - 300 , - 109 , - 70 , - 183 , - 144 , - 257 , - 218 , - 27 , - 292 , - 101 , - 62 , - 175 , - 136 , - 249 , - 210 , - 19 , - 284 , - 93 , - 54 , - 167 , - 128 , - 241 , - 202 , - 11 , - 276 , - 85 , - 46 , - 159 , - 120 , - 233 , - 194 , - 3 , - 268 , - 77 , - 38 , - 151 , - 112 , - 225 , - 186 , - 299 , - 260 , - 69 , - 30 , - 143 , - 104 , - 217 , - 178 , - 291 , - 252 , - 61 , - 22 , - 135 , - 96 , - 209 , - 170 , - 283 , - 244 , - 53 , - 14 , - 127 , - 88 , - 201 , - 162 , - 275 , - 236 , - 45 , - 6 , - 119 , - 80 , - 193 , - 154 , - 267 , - 228 , - 37 , - 302 , - 111 , - 72 , - 185 , - 146 , - 259 , - 220 , - 29 , - 294 , - 103 , - 64 , - 177 , - 138 , - 251 , - 212 , - 21 , - 286 , - 95 , - 56 , - 169 , - 130 , - 243 , - 204 , - 13 , - 278 , - 87 , - 48 , - 161 , - 122 , - 235 , - 196 , - 5 , - 270 , - 79 , - 40 , - 153 , - 114 , - 227 , - 188 , - 301 , - 262 , - 71 , - 32 , - 145 , - 106 , - 219 , - 180 , - 293 , - 254 , - 63 , - 24 , - 137 , - 98 , - 211 , - 172 , - 285 , - 246 , - 55 , - 16 , - 129 , - 90 , - 203 , - 164 , - 277 , - 238 , - 47 , - 8 , - 121 , - 82 , - 195 , - 156 , - 269 , - 230 , - 39 , - 0 , - 193 , - 230 , - 111 , - 148 , - 29 , - 66 , - 259 , - 296 , - 177 , - 214 , - 95 , - 132 , - 13 , - 50 , - 243 , - 280 , - 161 , - 198 , - 79 , - 116 , - 309 , - 34 , - 227 , - 264 , - 145 , - 182 , - 63 , - 100 , - 293 , - 18 , - 211 , - 248 , - 129 , - 166 , - 47 , - 84 , - 277 , - 2 , - 195 , - 232 , - 113 , - 150 , - 31 , - 68 , - 261 , - 298 , - 179 , - 216 , - 97 , - 134 , - 15 , - 52 , - 245 , - 282 , - 163 , - 200 , - 81 , - 118 , - 311 , - 36 , - 229 , - 266 , - 147 , - 184 , - 65 , - 102 , - 295 , - 20 , - 213 , - 250 , - 131 , - 168 , - 49 , - 86 , - 279 , - 4 , - 197 , - 234 , - 115 , - 152 , - 33 , - 70 , - 263 , - 300 , - 181 , - 218 , - 99 , - 136 , - 17 , - 54 , - 247 , - 284 , - 165 , - 202 , - 83 , - 120 , - 1 , - 38 , - 231 , - 268 , - 149 , - 186 , - 67 , - 104 , - 297 , - 22 , - 215 , - 252 , - 133 , - 170 , - 51 , - 88 , - 281 , - 6 , - 199 , - 236 , - 117 , - 154 , - 35 , - 72 , - 265 , - 302 , - 183 , - 220 , - 101 , - 138 , - 19 , - 56 , - 249 , - 286 , - 167 , - 204 , - 85 , - 122 , - 3 , - 40 , - 233 , - 270 , - 151 , - 188 , - 69 , - 106 , - 299 , - 24 , - 217 , - 254 , - 135 , - 172 , - 53 , - 90 , - 283 , - 8 , - 201 , - 238 , - 119 , - 156 , - 37 , - 74 , - 267 , - 304 , - 185 , - 222 , - 103 , - 140 , - 21 , - 58 , - 251 , - 288 , - 169 , - 206 , - 87 , - 124 , - 5 , - 42 , - 235 , - 272 , - 153 , - 190 , - 71 , - 108 , - 301 , - 26 , - 219 , - 256 , - 137 , - 174 , - 55 , - 92 , - 285 , - 10 , - 203 , - 240 , - 121 , - 158 , - 39 , - 76 , - 269 , - 306 , - 187 , - 224 , - 105 , - 142 , - 23 , - 60 , - 253 , - 290 , - 171 , - 208 , - 89 , - 126 , - 7 , - 44 , - 237 , - 274 , - 155 , - 192 , - 73 , - 110 , - 303 , - 28 , - 221 , - 258 , - 139 , - 176 , - 57 , - 94 , - 287 , - 12 , - 205 , - 242 , - 123 , - 160 , - 41 , - 78 , - 271 , - 308 , - 189 , - 226 , - 107 , - 144 , - 25 , - 62 , - 255 , - 292 , - 173 , - 210 , - 91 , - 128 , - 9 , - 46 , - 239 , - 276 , - 157 , - 194 , - 75 , - 112 , - 305 , - 30 , - 223 , - 260 , - 141 , - 178 , - 59 , - 96 , - 289 , - 14 , - 207 , - 244 , - 125 , - 162 , - 43 , - 80 , - 273 , - 310 , - 191 , - 228 , - 109 , - 146 , - 27 , - 64 , - 257 , - 294 , - 175 , - 212 , - 93 , - 130 , - 11 , - 48 , - 241 , - 278 , - 159 , - 196 , - 77 , - 114 , - 307 , - 32 , - 225 , - 262 , - 143 , - 180 , - 61 , - 98 , - 291 , - 16 , - 209 , - 246 , - 127 , - 164 , - 45 , - 82 , - 275 , - 0 , - 101 , - 282 , - 223 , - 244 , - 25 , - 206 , - 147 , - 168 , - 269 , - 130 , - 71 , - 92 , - 193 , - 54 , - 315 , - 16 , - 117 , - 298 , - 239 , - 260 , - 41 , - 222 , - 163 , - 184 , - 285 , - 146 , - 87 , - 108 , - 209 , - 70 , - 11 , - 32 , - 133 , - 314 , - 255 , - 276 , - 57 , - 238 , - 179 , - 200 , - 301 , - 162 , - 103 , - 124 , - 225 , - 86 , - 27 , - 48 , - 149 , - 10 , - 271 , - 292 , - 73 , - 254 , - 195 , - 216 , - 317 , - 178 , - 119 , - 140 , - 241 , - 102 , - 43 , - 64 , - 165 , - 26 , - 287 , - 308 , - 89 , - 270 , - 211 , - 232 , - 13 , - 194 , - 135 , - 156 , - 257 , - 118 , - 59 , - 80 , - 181 , - 42 , - 303 , - 4 , - 105 , - 286 , - 227 , - 248 , - 29 , - 210 , - 151 , - 172 , - 273 , - 134 , - 75 , - 96 , - 197 , - 58 , - 319 , - 20 , - 121 , - 302 , - 243 , - 264 , - 45 , - 226 , - 167 , - 188 , - 289 , - 150 , - 91 , - 112 , - 213 , - 74 , - 15 , - 36 , - 137 , - 318 , - 259 , - 280 , - 61 , - 242 , - 183 , - 204 , - 305 , - 166 , - 107 , - 128 , - 229 , - 90 , - 31 , - 52 , - 153 , - 14 , - 275 , - 296 , - 77 , - 258 , - 199 , - 220 , - 1 , - 182 , - 123 , - 144 , - 245 , - 106 , - 47 , - 68 , - 169 , - 30 , - 291 , - 312 , - 93 , - 274 , - 215 , - 236 , - 17 , - 198 , - 139 , - 160 , - 261 , - 122 , - 63 , - 84 , - 185 , - 46 , - 307 , - 8 , - 109 , - 290 , - 231 , - 252 , - 33 , - 214 , - 155 , - 176 , - 277 , - 138 , - 79 , - 100 , - 201 , - 62 , - 3 , - 24 , - 125 , - 306 , - 247 , - 268 , - 49 , - 230 , - 171 , - 192 , - 293 , - 154 , - 95 , - 116 , - 217 , - 78 , - 19 , - 40 , - 141 , - 2 , - 263 , - 284 , - 65 , - 246 , - 187 , - 208 , - 309 , - 170 , - 111 , - 132 , - 233 , - 94 , - 35 , - 56 , - 157 , - 18 , - 279 , - 300 , - 81 , - 262 , - 203 , - 224 , - 5 , - 186 , - 127 , - 148 , - 249 , - 110 , - 51 , - 72 , - 173 , - 34 , - 295 , - 316 , - 97 , - 278 , - 219 , - 240 , - 21 , - 202 , - 143 , - 164 , - 265 , - 126 , - 67 , - 88 , - 189 , - 50 , - 311 , - 12 , - 113 , - 294 , - 235 , - 256 , - 37 , - 218 , - 159 , - 180 , - 281 , - 142 , - 83 , - 104 , - 205 , - 66 , - 7 , - 28 , - 129 , - 310 , - 251 , - 272 , - 53 , - 234 , - 175 , - 196 , - 297 , - 158 , - 99 , - 120 , - 221 , - 82 , - 23 , - 44 , - 145 , - 6 , - 267 , - 288 , - 69 , - 250 , - 191 , - 212 , - 313 , - 174 , - 115 , - 136 , - 237 , - 98 , - 39 , - 60 , - 161 , - 22 , - 283 , - 304 , - 85 , - 266 , - 207 , - 228 , - 9 , - 190 , - 131 , - 152 , - 253 , - 114 , - 55 , - 76 , - 177 , - 38 , - 299 , - 0 , - 43 , - 250 , - 293 , - 172 , - 215 , - 94 , - 137 , - 16 , - 59 , - 266 , - 309 , - 188 , - 231 , - 110 , - 153 , - 32 , - 75 , - 282 , - 325 , - 204 , - 247 , - 126 , - 169 , - 48 , - 91 , - 298 , - 13 , - 220 , - 263 , - 142 , - 185 , - 64 , - 107 , - 314 , - 29 , - 236 , - 279 , - 158 , - 201 , - 80 , - 123 , - 2 , - 45 , - 252 , - 295 , - 174 , - 217 , - 96 , - 139 , - 18 , - 61 , - 268 , - 311 , - 190 , - 233 , - 112 , - 155 , - 34 , - 77 , - 284 , - 327 , - 206 , - 249 , - 128 , - 171 , - 50 , - 93 , - 300 , - 15 , - 222 , - 265 , - 144 , - 187 , - 66 , - 109 , - 316 , - 31 , - 238 , - 281 , - 160 , - 203 , - 82 , - 125 , - 4 , - 47 , - 254 , - 297 , - 176 , - 219 , - 98 , - 141 , - 20 , - 63 , - 270 , - 313 , - 192 , - 235 , - 114 , - 157 , - 36 , - 79 , - 286 , - 1 , - 208 , - 251 , - 130 , - 173 , - 52 , - 95 , - 302 , - 17 , - 224 , - 267 , - 146 , - 189 , - 68 , - 111 , - 318 , - 33 , - 240 , - 283 , - 162 , - 205 , - 84 , - 127 , - 6 , - 49 , - 256 , - 299 , - 178 , - 221 , - 100 , - 143 , - 22 , - 65 , - 272 , - 315 , - 194 , - 237 , - 116 , - 159 , - 38 , - 81 , - 288 , - 3 , - 210 , - 253 , - 132 , - 175 , - 54 , - 97 , - 304 , - 19 , - 226 , - 269 , - 148 , - 191 , - 70 , - 113 , - 320 , - 35 , - 242 , - 285 , - 164 , - 207 , - 86 , - 129 , - 8 , - 51 , - 258 , - 301 , - 180 , - 223 , - 102 , - 145 , - 24 , - 67 , - 274 , - 317 , - 196 , - 239 , - 118 , - 161 , - 40 , - 83 , - 290 , - 5 , - 212 , - 255 , - 134 , - 177 , - 56 , - 99 , - 306 , - 21 , - 228 , - 271 , - 150 , - 193 , - 72 , - 115 , - 322 , - 37 , - 244 , - 287 , - 166 , - 209 , - 88 , - 131 , - 10 , - 53 , - 260 , - 303 , - 182 , - 225 , - 104 , - 147 , - 26 , - 69 , - 276 , - 319 , - 198 , - 241 , - 120 , - 163 , - 42 , - 85 , - 292 , - 7 , - 214 , - 257 , - 136 , - 179 , - 58 , - 101 , - 308 , - 23 , - 230 , - 273 , - 152 , - 195 , - 74 , - 117 , - 324 , - 39 , - 246 , - 289 , - 168 , - 211 , - 90 , - 133 , - 12 , - 55 , - 262 , - 305 , - 184 , - 227 , - 106 , - 149 , - 28 , - 71 , - 278 , - 321 , - 200 , - 243 , - 122 , - 165 , - 44 , - 87 , - 294 , - 9 , - 216 , - 259 , - 138 , - 181 , - 60 , - 103 , - 310 , - 25 , - 232 , - 275 , - 154 , - 197 , - 76 , - 119 , - 326 , - 41 , - 248 , - 291 , - 170 , - 213 , - 92 , - 135 , - 14 , - 57 , - 264 , - 307 , - 186 , - 229 , - 108 , - 151 , - 30 , - 73 , - 280 , - 323 , - 202 , - 245 , - 124 , - 167 , - 46 , - 89 , - 296 , - 11 , - 218 , - 261 , - 140 , - 183 , - 62 , - 105 , - 312 , - 27 , - 234 , - 277 , - 156 , - 199 , - 78 , - 121 , - 0 , - 271 , - 38 , - 309 , - 76 , - 11 , - 114 , - 49 , - 152 , - 87 , - 190 , - 125 , - 228 , - 163 , - 266 , - 201 , - 304 , - 239 , - 6 , - 277 , - 44 , - 315 , - 82 , - 17 , - 120 , - 55 , - 158 , - 93 , - 196 , - 131 , - 234 , - 169 , - 272 , - 207 , - 310 , - 245 , - 12 , - 283 , - 50 , - 321 , - 88 , - 23 , - 126 , - 61 , - 164 , - 99 , - 202 , - 137 , - 240 , - 175 , - 278 , - 213 , - 316 , - 251 , - 18 , - 289 , - 56 , - 327 , - 94 , - 29 , - 132 , - 67 , - 170 , - 105 , - 208 , - 143 , - 246 , - 181 , - 284 , - 219 , - 322 , - 257 , - 24 , - 295 , - 62 , - 333 , - 100 , - 35 , - 138 , - 73 , - 176 , - 111 , - 214 , - 149 , - 252 , - 187 , - 290 , - 225 , - 328 , - 263 , - 30 , - 301 , - 68 , - 3 , - 106 , - 41 , - 144 , - 79 , - 182 , - 117 , - 220 , - 155 , - 258 , - 193 , - 296 , - 231 , - 334 , - 269 , - 36 , - 307 , - 74 , - 9 , - 112 , - 47 , - 150 , - 85 , - 188 , - 123 , - 226 , - 161 , - 264 , - 199 , - 302 , - 237 , - 4 , - 275 , - 42 , - 313 , - 80 , - 15 , - 118 , - 53 , - 156 , - 91 , - 194 , - 129 , - 232 , - 167 , - 270 , - 205 , - 308 , - 243 , - 10 , - 281 , - 48 , - 319 , - 86 , - 21 , - 124 , - 59 , - 162 , - 97 , - 200 , - 135 , - 238 , - 173 , - 276 , - 211 , - 314 , - 249 , - 16 , - 287 , - 54 , - 325 , - 92 , - 27 , - 130 , - 65 , - 168 , - 103 , - 206 , - 141 , - 244 , - 179 , - 282 , - 217 , - 320 , - 255 , - 22 , - 293 , - 60 , - 331 , - 98 , - 33 , - 136 , - 71 , - 174 , - 109 , - 212 , - 147 , - 250 , - 185 , - 288 , - 223 , - 326 , - 261 , - 28 , - 299 , - 66 , - 1 , - 104 , - 39 , - 142 , - 77 , - 180 , - 115 , - 218 , - 153 , - 256 , - 191 , - 294 , - 229 , - 332 , - 267 , - 34 , - 305 , - 72 , - 7 , - 110 , - 45 , - 148 , - 83 , - 186 , - 121 , - 224 , - 159 , - 262 , - 197 , - 300 , - 235 , - 2 , - 273 , - 40 , - 311 , - 78 , - 13 , - 116 , - 51 , - 154 , - 89 , - 192 , - 127 , - 230 , - 165 , - 268 , - 203 , - 306 , - 241 , - 8 , - 279 , - 46 , - 317 , - 84 , - 19 , - 122 , - 57 , - 160 , - 95 , - 198 , - 133 , - 236 , - 171 , - 274 , - 209 , - 312 , - 247 , - 14 , - 285 , - 52 , - 323 , - 90 , - 25 , - 128 , - 63 , - 166 , - 101 , - 204 , - 139 , - 242 , - 177 , - 280 , - 215 , - 318 , - 253 , - 20 , - 291 , - 58 , - 329 , - 96 , - 31 , - 134 , - 69 , - 172 , - 107 , - 210 , - 145 , - 248 , - 183 , - 286 , - 221 , - 324 , - 259 , - 26 , - 297 , - 64 , - 335 , - 102 , - 37 , - 140 , - 75 , - 178 , - 113 , - 216 , - 151 , - 254 , - 189 , - 292 , - 227 , - 330 , - 265 , - 32 , - 303 , - 70 , - 5 , - 108 , - 43 , - 146 , - 81 , - 184 , - 119 , - 222 , - 157 , - 260 , - 195 , - 298 , - 233 , - 0 , - 299 , - 82 , - 37 , - 164 , - 119 , - 246 , - 201 , - 328 , - 283 , - 66 , - 21 , - 148 , - 103 , - 230 , - 185 , - 312 , - 267 , - 50 , - 5 , - 132 , - 87 , - 214 , - 169 , - 296 , - 251 , - 34 , - 333 , - 116 , - 71 , - 198 , - 153 , - 280 , - 235 , - 18 , - 317 , - 100 , - 55 , - 182 , - 137 , - 264 , - 219 , - 2 , - 301 , - 84 , - 39 , - 166 , - 121 , - 248 , - 203 , - 330 , - 285 , - 68 , - 23 , - 150 , - 105 , - 232 , - 187 , - 314 , - 269 , - 52 , - 7 , - 134 , - 89 , - 216 , - 171 , - 298 , - 253 , - 36 , - 335 , - 118 , - 73 , - 200 , - 155 , - 282 , - 237 , - 20 , - 319 , - 102 , - 57 , - 184 , - 139 , - 266 , - 221 , - 4 , - 303 , - 86 , - 41 , - 168 , - 123 , - 250 , - 205 , - 332 , - 287 , - 70 , - 25 , - 152 , - 107 , - 234 , - 189 , - 316 , - 271 , - 54 , - 9 , - 136 , - 91 , - 218 , - 173 , - 300 , - 255 , - 38 , - 337 , - 120 , - 75 , - 202 , - 157 , - 284 , - 239 , - 22 , - 321 , - 104 , - 59 , - 186 , - 141 , - 268 , - 223 , - 6 , - 305 , - 88 , - 43 , - 170 , - 125 , - 252 , - 207 , - 334 , - 289 , - 72 , - 27 , - 154 , - 109 , - 236 , - 191 , - 318 , - 273 , - 56 , - 11 , - 138 , - 93 , - 220 , - 175 , - 302 , - 257 , - 40 , - 339 , - 122 , - 77 , - 204 , - 159 , - 286 , - 241 , - 24 , - 323 , - 106 , - 61 , - 188 , - 143 , - 270 , - 225 , - 8 , - 307 , - 90 , - 45 , - 172 , - 127 , - 254 , - 209 , - 336 , - 291 , - 74 , - 29 , - 156 , - 111 , - 238 , - 193 , - 320 , - 275 , - 58 , - 13 , - 140 , - 95 , - 222 , - 177 , - 304 , - 259 , - 42 , - 341 , - 124 , - 79 , - 206 , - 161 , - 288 , - 243 , - 26 , - 325 , - 108 , - 63 , - 190 , - 145 , - 272 , - 227 , - 10 , - 309 , - 92 , - 47 , - 174 , - 129 , - 256 , - 211 , - 338 , - 293 , - 76 , - 31 , - 158 , - 113 , - 240 , - 195 , - 322 , - 277 , - 60 , - 15 , - 142 , - 97 , - 224 , - 179 , - 306 , - 261 , - 44 , - 343 , - 126 , - 81 , - 208 , - 163 , - 290 , - 245 , - 28 , - 327 , - 110 , - 65 , - 192 , - 147 , - 274 , - 229 , - 12 , - 311 , - 94 , - 49 , - 176 , - 131 , - 258 , - 213 , - 340 , - 295 , - 78 , - 33 , - 160 , - 115 , - 242 , - 197 , - 324 , - 279 , - 62 , - 17 , - 144 , - 99 , - 226 , - 181 , - 308 , - 263 , - 46 , - 1 , - 128 , - 83 , - 210 , - 165 , - 292 , - 247 , - 30 , - 329 , - 112 , - 67 , - 194 , - 149 , - 276 , - 231 , - 14 , - 313 , - 96 , - 51 , - 178 , - 133 , - 260 , - 215 , - 342 , - 297 , - 80 , - 35 , - 162 , - 117 , - 244 , - 199 , - 326 , - 281 , - 64 , - 19 , - 146 , - 101 , - 228 , - 183 , - 310 , - 265 , - 48 , - 3 , - 130 , - 85 , - 212 , - 167 , - 294 , - 249 , - 32 , - 331 , - 114 , - 69 , - 196 , - 151 , - 278 , - 233 , - 16 , - 315 , - 98 , - 53 , - 180 , - 135 , - 262 , - 217 , - 0 , - 65 , - 42 , - 283 , - 84 , - 149 , - 126 , - 15 , - 168 , - 233 , - 210 , - 99 , - 252 , - 317 , - 294 , - 183 , - 336 , - 49 , - 26 , - 267 , - 68 , - 133 , - 110 , - 351 , - 152 , - 217 , - 194 , - 83 , - 236 , - 301 , - 278 , - 167 , - 320 , - 33 , - 10 , - 251 , - 52 , - 117 , - 94 , - 335 , - 136 , - 201 , - 178 , - 67 , - 220 , - 285 , - 262 , - 151 , - 304 , - 17 , - 346 , - 235 , - 36 , - 101 , - 78 , - 319 , - 120 , - 185 , - 162 , - 51 , - 204 , - 269 , - 246 , - 135 , - 288 , - 1 , - 330 , - 219 , - 20 , - 85 , - 62 , - 303 , - 104 , - 169 , - 146 , - 35 , - 188 , - 253 , - 230 , - 119 , - 272 , - 337 , - 314 , - 203 , - 4 , - 69 , - 46 , - 287 , - 88 , - 153 , - 130 , - 19 , - 172 , - 237 , - 214 , - 103 , - 256 , - 321 , - 298 , - 187 , - 340 , - 53 , - 30 , - 271 , - 72 , - 137 , - 114 , - 3 , - 156 , - 221 , - 198 , - 87 , - 240 , - 305 , - 282 , - 171 , - 324 , - 37 , - 14 , - 255 , - 56 , - 121 , - 98 , - 339 , - 140 , - 205 , - 182 , - 71 , - 224 , - 289 , - 266 , - 155 , - 308 , - 21 , - 350 , - 239 , - 40 , - 105 , - 82 , - 323 , - 124 , - 189 , - 166 , - 55 , - 208 , - 273 , - 250 , - 139 , - 292 , - 5 , - 334 , - 223 , - 24 , - 89 , - 66 , - 307 , - 108 , - 173 , - 150 , - 39 , - 192 , - 257 , - 234 , - 123 , - 276 , - 341 , - 318 , - 207 , - 8 , - 73 , - 50 , - 291 , - 92 , - 157 , - 134 , - 23 , - 176 , - 241 , - 218 , - 107 , - 260 , - 325 , - 302 , - 191 , - 344 , - 57 , - 34 , - 275 , - 76 , - 141 , - 118 , - 7 , - 160 , - 225 , - 202 , - 91 , - 244 , - 309 , - 286 , - 175 , - 328 , - 41 , - 18 , - 259 , - 60 , - 125 , - 102 , - 343 , - 144 , - 209 , - 186 , - 75 , - 228 , - 293 , - 270 , - 159 , - 312 , - 25 , - 2 , - 243 , - 44 , - 109 , - 86 , - 327 , - 128 , - 193 , - 170 , - 59 , - 212 , - 277 , - 254 , - 143 , - 296 , - 9 , - 338 , - 227 , - 28 , - 93 , - 70 , - 311 , - 112 , - 177 , - 154 , - 43 , - 196 , - 261 , - 238 , - 127 , - 280 , - 345 , - 322 , - 211 , - 12 , - 77 , - 54 , - 295 , - 96 , - 161 , - 138 , - 27 , - 180 , - 245 , - 222 , - 111 , - 264 , - 329 , - 306 , - 195 , - 348 , - 61 , - 38 , - 279 , - 80 , - 145 , - 122 , - 11 , - 164 , - 229 , - 206 , - 95 , - 248 , - 313 , - 290 , - 179 , - 332 , - 45 , - 22 , - 263 , - 64 , - 129 , - 106 , - 347 , - 148 , - 213 , - 190 , - 79 , - 232 , - 297 , - 274 , - 163 , - 316 , - 29 , - 6 , - 247 , - 48 , - 113 , - 90 , - 331 , - 132 , - 197 , - 174 , - 63 , - 216 , - 281 , - 258 , - 147 , - 300 , - 13 , - 342 , - 231 , - 32 , - 97 , - 74 , - 315 , - 116 , - 181 , - 158 , - 47 , - 200 , - 265 , - 242 , - 131 , - 284 , - 349 , - 326 , - 215 , - 16 , - 81 , - 58 , - 299 , - 100 , - 165 , - 142 , - 31 , - 184 , - 249 , - 226 , - 115 , - 268 , - 333 , - 310 , - 199 , - 0 , - 67 , - 314 , - 21 , - 268 , - 335 , - 222 , - 289 , - 176 , - 243 , - 130 , - 197 , - 84 , - 151 , - 38 , - 105 , - 352 , - 59 , - 306 , - 13 , - 260 , - 327 , - 214 , - 281 , - 168 , - 235 , - 122 , - 189 , - 76 , - 143 , - 30 , - 97 , - 344 , - 51 , - 298 , - 5 , - 252 , - 319 , - 206 , - 273 , - 160 , - 227 , - 114 , - 181 , - 68 , - 135 , - 22 , - 89 , - 336 , - 43 , - 290 , - 357 , - 244 , - 311 , - 198 , - 265 , - 152 , - 219 , - 106 , - 173 , - 60 , - 127 , - 14 , - 81 , - 328 , - 35 , - 282 , - 349 , - 236 , - 303 , - 190 , - 257 , - 144 , - 211 , - 98 , - 165 , - 52 , - 119 , - 6 , - 73 , - 320 , - 27 , - 274 , - 341 , - 228 , - 295 , - 182 , - 249 , - 136 , - 203 , - 90 , - 157 , - 44 , - 111 , - 358 , - 65 , - 312 , - 19 , - 266 , - 333 , - 220 , - 287 , - 174 , - 241 , - 128 , - 195 , - 82 , - 149 , - 36 , - 103 , - 350 , - 57 , - 304 , - 11 , - 258 , - 325 , - 212 , - 279 , - 166 , - 233 , - 120 , - 187 , - 74 , - 141 , - 28 , - 95 , - 342 , - 49 , - 296 , - 3 , - 250 , - 317 , - 204 , - 271 , - 158 , - 225 , - 112 , - 179 , - 66 , - 133 , - 20 , - 87 , - 334 , - 41 , - 288 , - 355 , - 242 , - 309 , - 196 , - 263 , - 150 , - 217 , - 104 , - 171 , - 58 , - 125 , - 12 , - 79 , - 326 , - 33 , - 280 , - 347 , - 234 , - 301 , - 188 , - 255 , - 142 , - 209 , - 96 , - 163 , - 50 , - 117 , - 4 , - 71 , - 318 , - 25 , - 272 , - 339 , - 226 , - 293 , - 180 , - 247 , - 134 , - 201 , - 88 , - 155 , - 42 , - 109 , - 356 , - 63 , - 310 , - 17 , - 264 , - 331 , - 218 , - 285 , - 172 , - 239 , - 126 , - 193 , - 80 , - 147 , - 34 , - 101 , - 348 , - 55 , - 302 , - 9 , - 256 , - 323 , - 210 , - 277 , - 164 , - 231 , - 118 , - 185 , - 72 , - 139 , - 26 , - 93 , - 340 , - 47 , - 294 , - 1 , - 248 , - 315 , - 202 , - 269 , - 156 , - 223 , - 110 , - 177 , - 64 , - 131 , - 18 , - 85 , - 332 , - 39 , - 286 , - 353 , - 240 , - 307 , - 194 , - 261 , - 148 , - 215 , - 102 , - 169 , - 56 , - 123 , - 10 , - 77 , - 324 , - 31 , - 278 , - 345 , - 232 , - 299 , - 186 , - 253 , - 140 , - 207 , - 94 , - 161 , - 48 , - 115 , - 2 , - 69 , - 316 , - 23 , - 270 , - 337 , - 224 , - 291 , - 178 , - 245 , - 132 , - 199 , - 86 , - 153 , - 40 , - 107 , - 354 , - 61 , - 308 , - 15 , - 262 , - 329 , - 216 , - 283 , - 170 , - 237 , - 124 , - 191 , - 78 , - 145 , - 32 , - 99 , - 346 , - 53 , - 300 , - 7 , - 254 , - 321 , - 208 , - 275 , - 162 , - 229 , - 116 , - 183 , - 70 , - 137 , - 24 , - 91 , - 338 , - 45 , - 292 , - 359 , - 246 , - 313 , - 200 , - 267 , - 154 , - 221 , - 108 , - 175 , - 62 , - 129 , - 16 , - 83 , - 330 , - 37 , - 284 , - 351 , - 238 , - 305 , - 192 , - 259 , - 146 , - 213 , - 100 , - 167 , - 54 , - 121 , - 8 , - 75 , - 322 , - 29 , - 276 , - 343 , - 230 , - 297 , - 184 , - 251 , - 138 , - 205 , - 92 , - 159 , - 46 , - 113 , - 0 , - 163 , - 234 , - 213 , - 100 , - 263 , - 334 , - 313 , - 200 , - 363 , - 66 , - 45 , - 300 , - 95 , - 166 , - 145 , - 32 , - 195 , - 266 , - 245 , - 132 , - 295 , - 366 , - 345 , - 232 , - 27 , - 98 , - 77 , - 332 , - 127 , - 198 , - 177 , - 64 , - 227 , - 298 , - 277 , - 164 , - 327 , - 30 , - 9 , - 264 , - 59 , - 130 , - 109 , - 364 , - 159 , - 230 , - 209 , - 96 , - 259 , - 330 , - 309 , - 196 , - 359 , - 62 , - 41 , - 296 , - 91 , - 162 , - 141 , - 28 , - 191 , - 262 , - 241 , - 128 , - 291 , - 362 , - 341 , - 228 , - 23 , - 94 , - 73 , - 328 , - 123 , - 194 , - 173 , - 60 , - 223 , - 294 , - 273 , - 160 , - 323 , - 26 , - 5 , - 260 , - 55 , - 126 , - 105 , - 360 , - 155 , - 226 , - 205 , - 92 , - 255 , - 326 , - 305 , - 192 , - 355 , - 58 , - 37 , - 292 , - 87 , - 158 , - 137 , - 24 , - 187 , - 258 , - 237 , - 124 , - 287 , - 358 , - 337 , - 224 , - 19 , - 90 , - 69 , - 324 , - 119 , - 190 , - 169 , - 56 , - 219 , - 290 , - 269 , - 156 , - 319 , - 22 , - 1 , - 256 , - 51 , - 122 , - 101 , - 356 , - 151 , - 222 , - 201 , - 88 , - 251 , - 322 , - 301 , - 188 , - 351 , - 54 , - 33 , - 288 , - 83 , - 154 , - 133 , - 20 , - 183 , - 254 , - 233 , - 120 , - 283 , - 354 , - 333 , - 220 , - 15 , - 86 , - 65 , - 320 , - 115 , - 186 , - 165 , - 52 , - 215 , - 286 , - 265 , - 152 , - 315 , - 18 , - 365 , - 252 , - 47 , - 118 , - 97 , - 352 , - 147 , - 218 , - 197 , - 84 , - 247 , - 318 , - 297 , - 184 , - 347 , - 50 , - 29 , - 284 , - 79 , - 150 , - 129 , - 16 , - 179 , - 250 , - 229 , - 116 , - 279 , - 350 , - 329 , - 216 , - 11 , - 82 , - 61 , - 316 , - 111 , - 182 , - 161 , - 48 , - 211 , - 282 , - 261 , - 148 , - 311 , - 14 , - 361 , - 248 , - 43 , - 114 , - 93 , - 348 , - 143 , - 214 , - 193 , - 80 , - 243 , - 314 , - 293 , - 180 , - 343 , - 46 , - 25 , - 280 , - 75 , - 146 , - 125 , - 12 , - 175 , - 246 , - 225 , - 112 , - 275 , - 346 , - 325 , - 212 , - 7 , - 78 , - 57 , - 312 , - 107 , - 178 , - 157 , - 44 , - 207 , - 278 , - 257 , - 144 , - 307 , - 10 , - 357 , - 244 , - 39 , - 110 , - 89 , - 344 , - 139 , - 210 , - 189 , - 76 , - 239 , - 310 , - 289 , - 176 , - 339 , - 42 , - 21 , - 276 , - 71 , - 142 , - 121 , - 8 , - 171 , - 242 , - 221 , - 108 , - 271 , - 342 , - 321 , - 208 , - 3 , - 74 , - 53 , - 308 , - 103 , - 174 , - 153 , - 40 , - 203 , - 274 , - 253 , - 140 , - 303 , - 6 , - 353 , - 240 , - 35 , - 106 , - 85 , - 340 , - 135 , - 206 , - 185 , - 72 , - 235 , - 306 , - 285 , - 172 , - 335 , - 38 , - 17 , - 272 , - 67 , - 138 , - 117 , - 4 , - 167 , - 238 , - 217 , - 104 , - 267 , - 338 , - 317 , - 204 , - 367 , - 70 , - 49 , - 304 , - 99 , - 170 , - 149 , - 36 , - 199 , - 270 , - 249 , - 136 , - 299 , - 2 , - 349 , - 236 , - 31 , - 102 , - 81 , - 336 , - 131 , - 202 , - 181 , - 68 , - 231 , - 302 , - 281 , - 168 , - 331 , - 34 , - 13 , - 268 , - 63 , - 134 , - 113 , - 0 , - 23 , - 234 , - 257 , - 92 , - 115 , - 326 , - 349 , - 184 , - 207 , - 42 , - 65 , - 276 , - 299 , - 134 , - 157 , - 368 , - 15 , - 226 , - 249 , - 84 , - 107 , - 318 , - 341 , - 176 , - 199 , - 34 , - 57 , - 268 , - 291 , - 126 , - 149 , - 360 , - 7 , - 218 , - 241 , - 76 , - 99 , - 310 , - 333 , - 168 , - 191 , - 26 , - 49 , - 260 , - 283 , - 118 , - 141 , - 352 , - 375 , - 210 , - 233 , - 68 , - 91 , - 302 , - 325 , - 160 , - 183 , - 18 , - 41 , - 252 , - 275 , - 110 , - 133 , - 344 , - 367 , - 202 , - 225 , - 60 , - 83 , - 294 , - 317 , - 152 , - 175 , - 10 , - 33 , - 244 , - 267 , - 102 , - 125 , - 336 , - 359 , - 194 , - 217 , - 52 , - 75 , - 286 , - 309 , - 144 , - 167 , - 2 , - 25 , - 236 , - 259 , - 94 , - 117 , - 328 , - 351 , - 186 , - 209 , - 44 , - 67 , - 278 , - 301 , - 136 , - 159 , - 370 , - 17 , - 228 , - 251 , - 86 , - 109 , - 320 , - 343 , - 178 , - 201 , - 36 , - 59 , - 270 , - 293 , - 128 , - 151 , - 362 , - 9 , - 220 , - 243 , - 78 , - 101 , - 312 , - 335 , - 170 , - 193 , - 28 , - 51 , - 262 , - 285 , - 120 , - 143 , - 354 , - 1 , - 212 , - 235 , - 70 , - 93 , - 304 , - 327 , - 162 , - 185 , - 20 , - 43 , - 254 , - 277 , - 112 , - 135 , - 346 , - 369 , - 204 , - 227 , - 62 , - 85 , - 296 , - 319 , - 154 , - 177 , - 12 , - 35 , - 246 , - 269 , - 104 , - 127 , - 338 , - 361 , - 196 , - 219 , - 54 , - 77 , - 288 , - 311 , - 146 , - 169 , - 4 , - 27 , - 238 , - 261 , - 96 , - 119 , - 330 , - 353 , - 188 , - 211 , - 46 , - 69 , - 280 , - 303 , - 138 , - 161 , - 372 , - 19 , - 230 , - 253 , - 88 , - 111 , - 322 , - 345 , - 180 , - 203 , - 38 , - 61 , - 272 , - 295 , - 130 , - 153 , - 364 , - 11 , - 222 , - 245 , - 80 , - 103 , - 314 , - 337 , - 172 , - 195 , - 30 , - 53 , - 264 , - 287 , - 122 , - 145 , - 356 , - 3 , - 214 , - 237 , - 72 , - 95 , - 306 , - 329 , - 164 , - 187 , - 22 , - 45 , - 256 , - 279 , - 114 , - 137 , - 348 , - 371 , - 206 , - 229 , - 64 , - 87 , - 298 , - 321 , - 156 , - 179 , - 14 , - 37 , - 248 , - 271 , - 106 , - 129 , - 340 , - 363 , - 198 , - 221 , - 56 , - 79 , - 290 , - 313 , - 148 , - 171 , - 6 , - 29 , - 240 , - 263 , - 98 , - 121 , - 332 , - 355 , - 190 , - 213 , - 48 , - 71 , - 282 , - 305 , - 140 , - 163 , - 374 , - 21 , - 232 , - 255 , - 90 , - 113 , - 324 , - 347 , - 182 , - 205 , - 40 , - 63 , - 274 , - 297 , - 132 , - 155 , - 366 , - 13 , - 224 , - 247 , - 82 , - 105 , - 316 , - 339 , - 174 , - 197 , - 32 , - 55 , - 266 , - 289 , - 124 , - 147 , - 358 , - 5 , - 216 , - 239 , - 74 , - 97 , - 308 , - 331 , - 166 , - 189 , - 24 , - 47 , - 258 , - 281 , - 116 , - 139 , - 350 , - 373 , - 208 , - 231 , - 66 , - 89 , - 300 , - 323 , - 158 , - 181 , - 16 , - 39 , - 250 , - 273 , - 108 , - 131 , - 342 , - 365 , - 200 , - 223 , - 58 , - 81 , - 292 , - 315 , - 150 , - 173 , - 8 , - 31 , - 242 , - 265 , - 100 , - 123 , - 334 , - 357 , - 192 , - 215 , - 50 , - 73 , - 284 , - 307 , - 142 , - 165 , - 0 , - 215 , - 142 , - 165 , - 284 , - 115 , - 42 , - 65 , - 184 , - 15 , - 326 , - 349 , - 84 , - 299 , - 226 , - 249 , - 368 , - 199 , - 126 , - 149 , - 268 , - 99 , - 26 , - 49 , - 168 , - 383 , - 310 , - 333 , - 68 , - 283 , - 210 , - 233 , - 352 , - 183 , - 110 , - 133 , - 252 , - 83 , - 10 , - 33 , - 152 , - 367 , - 294 , - 317 , - 52 , - 267 , - 194 , - 217 , - 336 , - 167 , - 94 , - 117 , - 236 , - 67 , - 378 , - 17 , - 136 , - 351 , - 278 , - 301 , - 36 , - 251 , - 178 , - 201 , - 320 , - 151 , - 78 , - 101 , - 220 , - 51 , - 362 , - 1 , - 120 , - 335 , - 262 , - 285 , - 20 , - 235 , - 162 , - 185 , - 304 , - 135 , - 62 , - 85 , - 204 , - 35 , - 346 , - 369 , - 104 , - 319 , - 246 , - 269 , - 4 , - 219 , - 146 , - 169 , - 288 , - 119 , - 46 , - 69 , - 188 , - 19 , - 330 , - 353 , - 88 , - 303 , - 230 , - 253 , - 372 , - 203 , - 130 , - 153 , - 272 , - 103 , - 30 , - 53 , - 172 , - 3 , - 314 , - 337 , - 72 , - 287 , - 214 , - 237 , - 356 , - 187 , - 114 , - 137 , - 256 , - 87 , - 14 , - 37 , - 156 , - 371 , - 298 , - 321 , - 56 , - 271 , - 198 , - 221 , - 340 , - 171 , - 98 , - 121 , - 240 , - 71 , - 382 , - 21 , - 140 , - 355 , - 282 , - 305 , - 40 , - 255 , - 182 , - 205 , - 324 , - 155 , - 82 , - 105 , - 224 , - 55 , - 366 , - 5 , - 124 , - 339 , - 266 , - 289 , - 24 , - 239 , - 166 , - 189 , - 308 , - 139 , - 66 , - 89 , - 208 , - 39 , - 350 , - 373 , - 108 , - 323 , - 250 , - 273 , - 8 , - 223 , - 150 , - 173 , - 292 , - 123 , - 50 , - 73 , - 192 , - 23 , - 334 , - 357 , - 92 , - 307 , - 234 , - 257 , - 376 , - 207 , - 134 , - 157 , - 276 , - 107 , - 34 , - 57 , - 176 , - 7 , - 318 , - 341 , - 76 , - 291 , - 218 , - 241 , - 360 , - 191 , - 118 , - 141 , - 260 , - 91 , - 18 , - 41 , - 160 , - 375 , - 302 , - 325 , - 60 , - 275 , - 202 , - 225 , - 344 , - 175 , - 102 , - 125 , - 244 , - 75 , - 2 , - 25 , - 144 , - 359 , - 286 , - 309 , - 44 , - 259 , - 186 , - 209 , - 328 , - 159 , - 86 , - 109 , - 228 , - 59 , - 370 , - 9 , - 128 , - 343 , - 270 , - 293 , - 28 , - 243 , - 170 , - 193 , - 312 , - 143 , - 70 , - 93 , - 212 , - 43 , - 354 , - 377 , - 112 , - 327 , - 254 , - 277 , - 12 , - 227 , - 154 , - 177 , - 296 , - 127 , - 54 , - 77 , - 196 , - 27 , - 338 , - 361 , - 96 , - 311 , - 238 , - 261 , - 380 , - 211 , - 138 , - 161 , - 280 , - 111 , - 38 , - 61 , - 180 , - 11 , - 322 , - 345 , - 80 , - 295 , - 222 , - 245 , - 364 , - 195 , - 122 , - 145 , - 264 , - 95 , - 22 , - 45 , - 164 , - 379 , - 306 , - 329 , - 64 , - 279 , - 206 , - 229 , - 348 , - 179 , - 106 , - 129 , - 248 , - 79 , - 6 , - 29 , - 148 , - 363 , - 290 , - 313 , - 48 , - 263 , - 190 , - 213 , - 332 , - 163 , - 90 , - 113 , - 232 , - 63 , - 374 , - 13 , - 132 , - 347 , - 274 , - 297 , - 32 , - 247 , - 174 , - 197 , - 316 , - 147 , - 74 , - 97 , - 216 , - 47 , - 358 , - 381 , - 116 , - 331 , - 258 , - 281 , - 16 , - 231 , - 158 , - 181 , - 300 , - 131 , - 58 , - 81 , - 200 , - 31 , - 342 , - 365 , - 100 , - 315 , - 242 , - 265 , - 0 , - 269 , - 342 , - 219 , - 292 , - 169 , - 242 , - 119 , - 192 , - 69 , - 142 , - 19 , - 92 , - 361 , - 42 , - 311 , - 384 , - 261 , - 334 , - 211 , - 284 , - 161 , - 234 , - 111 , - 184 , - 61 , - 134 , - 11 , - 84 , - 353 , - 34 , - 303 , - 376 , - 253 , - 326 , - 203 , - 276 , - 153 , - 226 , - 103 , - 176 , - 53 , - 126 , - 3 , - 76 , - 345 , - 26 , - 295 , - 368 , - 245 , - 318 , - 195 , - 268 , - 145 , - 218 , - 95 , - 168 , - 45 , - 118 , - 387 , - 68 , - 337 , - 18 , - 287 , - 360 , - 237 , - 310 , - 187 , - 260 , - 137 , - 210 , - 87 , - 160 , - 37 , - 110 , - 379 , - 60 , - 329 , - 10 , - 279 , - 352 , - 229 , - 302 , - 179 , - 252 , - 129 , - 202 , - 79 , - 152 , - 29 , - 102 , - 371 , - 52 , - 321 , - 2 , - 271 , - 344 , - 221 , - 294 , - 171 , - 244 , - 121 , - 194 , - 71 , - 144 , - 21 , - 94 , - 363 , - 44 , - 313 , - 386 , - 263 , - 336 , - 213 , - 286 , - 163 , - 236 , - 113 , - 186 , - 63 , - 136 , - 13 , - 86 , - 355 , - 36 , - 305 , - 378 , - 255 , - 328 , - 205 , - 278 , - 155 , - 228 , - 105 , - 178 , - 55 , - 128 , - 5 , - 78 , - 347 , - 28 , - 297 , - 370 , - 247 , - 320 , - 197 , - 270 , - 147 , - 220 , - 97 , - 170 , - 47 , - 120 , - 389 , - 70 , - 339 , - 20 , - 289 , - 362 , - 239 , - 312 , - 189 , - 262 , - 139 , - 212 , - 89 , - 162 , - 39 , - 112 , - 381 , - 62 , - 331 , - 12 , - 281 , - 354 , - 231 , - 304 , - 181 , - 254 , - 131 , - 204 , - 81 , - 154 , - 31 , - 104 , - 373 , - 54 , - 323 , - 4 , - 273 , - 346 , - 223 , - 296 , - 173 , - 246 , - 123 , - 196 , - 73 , - 146 , - 23 , - 96 , - 365 , - 46 , - 315 , - 388 , - 265 , - 338 , - 215 , - 288 , - 165 , - 238 , - 115 , - 188 , - 65 , - 138 , - 15 , - 88 , - 357 , - 38 , - 307 , - 380 , - 257 , - 330 , - 207 , - 280 , - 157 , - 230 , - 107 , - 180 , - 57 , - 130 , - 7 , - 80 , - 349 , - 30 , - 299 , - 372 , - 249 , - 322 , - 199 , - 272 , - 149 , - 222 , - 99 , - 172 , - 49 , - 122 , - 391 , - 72 , - 341 , - 22 , - 291 , - 364 , - 241 , - 314 , - 191 , - 264 , - 141 , - 214 , - 91 , - 164 , - 41 , - 114 , - 383 , - 64 , - 333 , - 14 , - 283 , - 356 , - 233 , - 306 , - 183 , - 256 , - 133 , - 206 , - 83 , - 156 , - 33 , - 106 , - 375 , - 56 , - 325 , - 6 , - 275 , - 348 , - 225 , - 298 , - 175 , - 248 , - 125 , - 198 , - 75 , - 148 , - 25 , - 98 , - 367 , - 48 , - 317 , - 390 , - 267 , - 340 , - 217 , - 290 , - 167 , - 240 , - 117 , - 190 , - 67 , - 140 , - 17 , - 90 , - 359 , - 40 , - 309 , - 382 , - 259 , - 332 , - 209 , - 282 , - 159 , - 232 , - 109 , - 182 , - 59 , - 132 , - 9 , - 82 , - 351 , - 32 , - 301 , - 374 , - 251 , - 324 , - 201 , - 274 , - 151 , - 224 , - 101 , - 174 , - 51 , - 124 , - 1 , - 74 , - 343 , - 24 , - 293 , - 366 , - 243 , - 316 , - 193 , - 266 , - 143 , - 216 , - 93 , - 166 , - 43 , - 116 , - 385 , - 66 , - 335 , - 16 , - 285 , - 358 , - 235 , - 308 , - 185 , - 258 , - 135 , - 208 , - 85 , - 158 , - 35 , - 108 , - 377 , - 58 , - 327 , - 8 , - 277 , - 350 , - 227 , - 300 , - 177 , - 250 , - 127 , - 200 , - 77 , - 150 , - 27 , - 100 , - 369 , - 50 , - 319 , - 0 , - 111 , - 142 , - 93 , - 364 , - 155 , - 266 , - 297 , - 248 , - 119 , - 310 , - 21 , - 52 , - 3 , - 274 , - 65 , - 176 , - 207 , - 158 , - 29 , - 220 , - 331 , - 362 , - 313 , - 184 , - 375 , - 86 , - 117 , - 68 , - 339 , - 130 , - 241 , - 272 , - 223 , - 94 , - 285 , - 396 , - 27 , - 378 , - 249 , - 40 , - 151 , - 182 , - 133 , - 4 , - 195 , - 306 , - 337 , - 288 , - 159 , - 350 , - 61 , - 92 , - 43 , - 314 , - 105 , - 216 , - 247 , - 198 , - 69 , - 260 , - 371 , - 2 , - 353 , - 224 , - 15 , - 126 , - 157 , - 108 , - 379 , - 170 , - 281 , - 312 , - 263 , - 134 , - 325 , - 36 , - 67 , - 18 , - 289 , - 80 , - 191 , - 222 , - 173 , - 44 , - 235 , - 346 , - 377 , - 328 , - 199 , - 390 , - 101 , - 132 , - 83 , - 354 , - 145 , - 256 , - 287 , - 238 , - 109 , - 300 , - 11 , - 42 , - 393 , - 264 , - 55 , - 166 , - 197 , - 148 , - 19 , - 210 , - 321 , - 352 , - 303 , - 174 , - 365 , - 76 , - 107 , - 58 , - 329 , - 120 , - 231 , - 262 , - 213 , - 84 , - 275 , - 386 , - 17 , - 368 , - 239 , - 30 , - 141 , - 172 , - 123 , - 394 , - 185 , - 296 , - 327 , - 278 , - 149 , - 340 , - 51 , - 82 , - 33 , - 304 , - 95 , - 206 , - 237 , - 188 , - 59 , - 250 , - 361 , - 392 , - 343 , - 214 , - 5 , - 116 , - 147 , - 98 , - 369 , - 160 , - 271 , - 302 , - 253 , - 124 , - 315 , - 26 , - 57 , - 8 , - 279 , - 70 , - 181 , - 212 , - 163 , - 34 , - 225 , - 336 , - 367 , - 318 , - 189 , - 380 , - 91 , - 122 , - 73 , - 344 , - 135 , - 246 , - 277 , - 228 , - 99 , - 290 , - 1 , - 32 , - 383 , - 254 , - 45 , - 156 , - 187 , - 138 , - 9 , - 200 , - 311 , - 342 , - 293 , - 164 , - 355 , - 66 , - 97 , - 48 , - 319 , - 110 , - 221 , - 252 , - 203 , - 74 , - 265 , - 376 , - 7 , - 358 , - 229 , - 20 , - 131 , - 162 , - 113 , - 384 , - 175 , - 286 , - 317 , - 268 , - 139 , - 330 , - 41 , - 72 , - 23 , - 294 , - 85 , - 196 , - 227 , - 178 , - 49 , - 240 , - 351 , - 382 , - 333 , - 204 , - 395 , - 106 , - 137 , - 88 , - 359 , - 150 , - 261 , - 292 , - 243 , - 114 , - 305 , - 16 , - 47 , - 398 , - 269 , - 60 , - 171 , - 202 , - 153 , - 24 , - 215 , - 326 , - 357 , - 308 , - 179 , - 370 , - 81 , - 112 , - 63 , - 334 , - 125 , - 236 , - 267 , - 218 , - 89 , - 280 , - 391 , - 22 , - 373 , - 244 , - 35 , - 146 , - 177 , - 128 , - 399 , - 190 , - 301 , - 332 , - 283 , - 154 , - 345 , - 56 , - 87 , - 38 , - 309 , - 100 , - 211 , - 242 , - 193 , - 64 , - 255 , - 366 , - 397 , - 348 , - 219 , - 10 , - 121 , - 152 , - 103 , - 374 , - 165 , - 276 , - 307 , - 258 , - 129 , - 320 , - 31 , - 62 , - 13 , - 284 , - 75 , - 186 , - 217 , - 168 , - 39 , - 230 , - 341 , - 372 , - 323 , - 194 , - 385 , - 96 , - 127 , - 78 , - 349 , - 140 , - 251 , - 282 , - 233 , - 104 , - 295 , - 6 , - 37 , - 388 , - 259 , - 50 , - 161 , - 192 , - 143 , - 14 , - 205 , - 316 , - 347 , - 298 , - 169 , - 360 , - 71 , - 102 , - 53 , - 324 , - 115 , - 226 , - 257 , - 208 , - 79 , - 270 , - 381 , - 12 , - 363 , - 234 , - 25 , - 136 , - 167 , - 118 , - 389 , - 180 , - 291 , - 322 , - 273 , - 144 , - 335 , - 46 , - 77 , - 28 , - 299 , - 90 , - 201 , - 232 , - 183 , - 54 , - 245 , - 356 , - 387 , - 338 , - 209 , - 0 , - 281 , - 358 , - 231 , - 308 , - 181 , - 258 , - 131 , - 208 , - 81 , - 158 , - 31 , - 108 , - 389 , - 58 , - 339 , - 8 , - 289 , - 366 , - 239 , - 316 , - 189 , - 266 , - 139 , - 216 , - 89 , - 166 , - 39 , - 116 , - 397 , - 66 , - 347 , - 16 , - 297 , - 374 , - 247 , - 324 , - 197 , - 274 , - 147 , - 224 , - 97 , - 174 , - 47 , - 124 , - 405 , - 74 , - 355 , - 24 , - 305 , - 382 , - 255 , - 332 , - 205 , - 282 , - 155 , - 232 , - 105 , - 182 , - 55 , - 132 , - 5 , - 82 , - 363 , - 32 , - 313 , - 390 , - 263 , - 340 , - 213 , - 290 , - 163 , - 240 , - 113 , - 190 , - 63 , - 140 , - 13 , - 90 , - 371 , - 40 , - 321 , - 398 , - 271 , - 348 , - 221 , - 298 , - 171 , - 248 , - 121 , - 198 , - 71 , - 148 , - 21 , - 98 , - 379 , - 48 , - 329 , - 406 , - 279 , - 356 , - 229 , - 306 , - 179 , - 256 , - 129 , - 206 , - 79 , - 156 , - 29 , - 106 , - 387 , - 56 , - 337 , - 6 , - 287 , - 364 , - 237 , - 314 , - 187 , - 264 , - 137 , - 214 , - 87 , - 164 , - 37 , - 114 , - 395 , - 64 , - 345 , - 14 , - 295 , - 372 , - 245 , - 322 , - 195 , - 272 , - 145 , - 222 , - 95 , - 172 , - 45 , - 122 , - 403 , - 72 , - 353 , - 22 , - 303 , - 380 , - 253 , - 330 , - 203 , - 280 , - 153 , - 230 , - 103 , - 180 , - 53 , - 130 , - 3 , - 80 , - 361 , - 30 , - 311 , - 388 , - 261 , - 338 , - 211 , - 288 , - 161 , - 238 , - 111 , - 188 , - 61 , - 138 , - 11 , - 88 , - 369 , - 38 , - 319 , - 396 , - 269 , - 346 , - 219 , - 296 , - 169 , - 246 , - 119 , - 196 , - 69 , - 146 , - 19 , - 96 , - 377 , - 46 , - 327 , - 404 , - 277 , - 354 , - 227 , - 304 , - 177 , - 254 , - 127 , - 204 , - 77 , - 154 , - 27 , - 104 , - 385 , - 54 , - 335 , - 4 , - 285 , - 362 , - 235 , - 312 , - 185 , - 262 , - 135 , - 212 , - 85 , - 162 , - 35 , - 112 , - 393 , - 62 , - 343 , - 12 , - 293 , - 370 , - 243 , - 320 , - 193 , - 270 , - 143 , - 220 , - 93 , - 170 , - 43 , - 120 , - 401 , - 70 , - 351 , - 20 , - 301 , - 378 , - 251 , - 328 , - 201 , - 278 , - 151 , - 228 , - 101 , - 178 , - 51 , - 128 , - 1 , - 78 , - 359 , - 28 , - 309 , - 386 , - 259 , - 336 , - 209 , - 286 , - 159 , - 236 , - 109 , - 186 , - 59 , - 136 , - 9 , - 86 , - 367 , - 36 , - 317 , - 394 , - 267 , - 344 , - 217 , - 294 , - 167 , - 244 , - 117 , - 194 , - 67 , - 144 , - 17 , - 94 , - 375 , - 44 , - 325 , - 402 , - 275 , - 352 , - 225 , - 302 , - 175 , - 252 , - 125 , - 202 , - 75 , - 152 , - 25 , - 102 , - 383 , - 52 , - 333 , - 2 , - 283 , - 360 , - 233 , - 310 , - 183 , - 260 , - 133 , - 210 , - 83 , - 160 , - 33 , - 110 , - 391 , - 60 , - 341 , - 10 , - 291 , - 368 , - 241 , - 318 , - 191 , - 268 , - 141 , - 218 , - 91 , - 168 , - 41 , - 118 , - 399 , - 68 , - 349 , - 18 , - 299 , - 376 , - 249 , - 326 , - 199 , - 276 , - 149 , - 226 , - 99 , - 176 , - 49 , - 126 , - 407 , - 76 , - 357 , - 26 , - 307 , - 384 , - 257 , - 334 , - 207 , - 284 , - 157 , - 234 , - 107 , - 184 , - 57 , - 134 , - 7 , - 84 , - 365 , - 34 , - 315 , - 392 , - 265 , - 342 , - 215 , - 292 , - 165 , - 242 , - 115 , - 192 , - 65 , - 142 , - 15 , - 92 , - 373 , - 42 , - 323 , - 400 , - 273 , - 350 , - 223 , - 300 , - 173 , - 250 , - 123 , - 200 , - 73 , - 150 , - 23 , - 100 , - 381 , - 50 , - 331 , - 0 , - 181 , - 258 , - 231 , - 100 , - 281 , - 358 , - 331 , - 200 , - 381 , - 42 , - 15 , - 300 , - 65 , - 142 , - 115 , - 400 , - 165 , - 242 , - 215 , - 84 , - 265 , - 342 , - 315 , - 184 , - 365 , - 26 , - 415 , - 284 , - 49 , - 126 , - 99 , - 384 , - 149 , - 226 , - 199 , - 68 , - 249 , - 326 , - 299 , - 168 , - 349 , - 10 , - 399 , - 268 , - 33 , - 110 , - 83 , - 368 , - 133 , - 210 , - 183 , - 52 , - 233 , - 310 , - 283 , - 152 , - 333 , - 410 , - 383 , - 252 , - 17 , - 94 , - 67 , - 352 , - 117 , - 194 , - 167 , - 36 , - 217 , - 294 , - 267 , - 136 , - 317 , - 394 , - 367 , - 236 , - 1 , - 78 , - 51 , - 336 , - 101 , - 178 , - 151 , - 20 , - 201 , - 278 , - 251 , - 120 , - 301 , - 378 , - 351 , - 220 , - 401 , - 62 , - 35 , - 320 , - 85 , - 162 , - 135 , - 4 , - 185 , - 262 , - 235 , - 104 , - 285 , - 362 , - 335 , - 204 , - 385 , - 46 , - 19 , - 304 , - 69 , - 146 , - 119 , - 404 , - 169 , - 246 , - 219 , - 88 , - 269 , - 346 , - 319 , - 188 , - 369 , - 30 , - 3 , - 288 , - 53 , - 130 , - 103 , - 388 , - 153 , - 230 , - 203 , - 72 , - 253 , - 330 , - 303 , - 172 , - 353 , - 14 , - 403 , - 272 , - 37 , - 114 , - 87 , - 372 , - 137 , - 214 , - 187 , - 56 , - 237 , - 314 , - 287 , - 156 , - 337 , - 414 , - 387 , - 256 , - 21 , - 98 , - 71 , - 356 , - 121 , - 198 , - 171 , - 40 , - 221 , - 298 , - 271 , - 140 , - 321 , - 398 , - 371 , - 240 , - 5 , - 82 , - 55 , - 340 , - 105 , - 182 , - 155 , - 24 , - 205 , - 282 , - 255 , - 124 , - 305 , - 382 , - 355 , - 224 , - 405 , - 66 , - 39 , - 324 , - 89 , - 166 , - 139 , - 8 , - 189 , - 266 , - 239 , - 108 , - 289 , - 366 , - 339 , - 208 , - 389 , - 50 , - 23 , - 308 , - 73 , - 150 , - 123 , - 408 , - 173 , - 250 , - 223 , - 92 , - 273 , - 350 , - 323 , - 192 , - 373 , - 34 , - 7 , - 292 , - 57 , - 134 , - 107 , - 392 , - 157 , - 234 , - 207 , - 76 , - 257 , - 334 , - 307 , - 176 , - 357 , - 18 , - 407 , - 276 , - 41 , - 118 , - 91 , - 376 , - 141 , - 218 , - 191 , - 60 , - 241 , - 318 , - 291 , - 160 , - 341 , - 2 , - 391 , - 260 , - 25 , - 102 , - 75 , - 360 , - 125 , - 202 , - 175 , - 44 , - 225 , - 302 , - 275 , - 144 , - 325 , - 402 , - 375 , - 244 , - 9 , - 86 , - 59 , - 344 , - 109 , - 186 , - 159 , - 28 , - 209 , - 286 , - 259 , - 128 , - 309 , - 386 , - 359 , - 228 , - 409 , - 70 , - 43 , - 328 , - 93 , - 170 , - 143 , - 12 , - 193 , - 270 , - 243 , - 112 , - 293 , - 370 , - 343 , - 212 , - 393 , - 54 , - 27 , - 312 , - 77 , - 154 , - 127 , - 412 , - 177 , - 254 , - 227 , - 96 , - 277 , - 354 , - 327 , - 196 , - 377 , - 38 , - 11 , - 296 , - 61 , - 138 , - 111 , - 396 , - 161 , - 238 , - 211 , - 80 , - 261 , - 338 , - 311 , - 180 , - 361 , - 22 , - 411 , - 280 , - 45 , - 122 , - 95 , - 380 , - 145 , - 222 , - 195 , - 64 , - 245 , - 322 , - 295 , - 164 , - 345 , - 6 , - 395 , - 264 , - 29 , - 106 , - 79 , - 364 , - 129 , - 206 , - 179 , - 48 , - 229 , - 306 , - 279 , - 148 , - 329 , - 406 , - 379 , - 248 , - 13 , - 90 , - 63 , - 348 , - 113 , - 190 , - 163 , - 32 , - 213 , - 290 , - 263 , - 132 , - 313 , - 390 , - 363 , - 232 , - 413 , - 74 , - 47 , - 332 , - 97 , - 174 , - 147 , - 16 , - 197 , - 274 , - 247 , - 116 , - 297 , - 374 , - 347 , - 216 , - 397 , - 58 , - 31 , - 316 , - 81 , - 158 , - 131 , - 0 , - 397 , - 158 , - 131 , - 316 , - 289 , - 50 , - 23 , - 208 , - 181 , - 366 , - 339 , - 100 , - 73 , - 258 , - 231 , - 416 , - 389 , - 150 , - 123 , - 308 , - 281 , - 42 , - 15 , - 200 , - 173 , - 358 , - 331 , - 92 , - 65 , - 250 , - 223 , - 408 , - 381 , - 142 , - 115 , - 300 , - 273 , - 34 , - 7 , - 192 , - 165 , - 350 , - 323 , - 84 , - 57 , - 242 , - 215 , - 400 , - 373 , - 134 , - 107 , - 292 , - 265 , - 26 , - 423 , - 184 , - 157 , - 342 , - 315 , - 76 , - 49 , - 234 , - 207 , - 392 , - 365 , - 126 , - 99 , - 284 , - 257 , - 18 , - 415 , - 176 , - 149 , - 334 , - 307 , - 68 , - 41 , - 226 , - 199 , - 384 , - 357 , - 118 , - 91 , - 276 , - 249 , - 10 , - 407 , - 168 , - 141 , - 326 , - 299 , - 60 , - 33 , - 218 , - 191 , - 376 , - 349 , - 110 , - 83 , - 268 , - 241 , - 2 , - 399 , - 160 , - 133 , - 318 , - 291 , - 52 , - 25 , - 210 , - 183 , - 368 , - 341 , - 102 , - 75 , - 260 , - 233 , - 418 , - 391 , - 152 , - 125 , - 310 , - 283 , - 44 , - 17 , - 202 , - 175 , - 360 , - 333 , - 94 , - 67 , - 252 , - 225 , - 410 , - 383 , - 144 , - 117 , - 302 , - 275 , - 36 , - 9 , - 194 , - 167 , - 352 , - 325 , - 86 , - 59 , - 244 , - 217 , - 402 , - 375 , - 136 , - 109 , - 294 , - 267 , - 28 , - 1 , - 186 , - 159 , - 344 , - 317 , - 78 , - 51 , - 236 , - 209 , - 394 , - 367 , - 128 , - 101 , - 286 , - 259 , - 20 , - 417 , - 178 , - 151 , - 336 , - 309 , - 70 , - 43 , - 228 , - 201 , - 386 , - 359 , - 120 , - 93 , - 278 , - 251 , - 12 , - 409 , - 170 , - 143 , - 328 , - 301 , - 62 , - 35 , - 220 , - 193 , - 378 , - 351 , - 112 , - 85 , - 270 , - 243 , - 4 , - 401 , - 162 , - 135 , - 320 , - 293 , - 54 , - 27 , - 212 , - 185 , - 370 , - 343 , - 104 , - 77 , - 262 , - 235 , - 420 , - 393 , - 154 , - 127 , - 312 , - 285 , - 46 , - 19 , - 204 , - 177 , - 362 , - 335 , - 96 , - 69 , - 254 , - 227 , - 412 , - 385 , - 146 , - 119 , - 304 , - 277 , - 38 , - 11 , - 196 , - 169 , - 354 , - 327 , - 88 , - 61 , - 246 , - 219 , - 404 , - 377 , - 138 , - 111 , - 296 , - 269 , - 30 , - 3 , - 188 , - 161 , - 346 , - 319 , - 80 , - 53 , - 238 , - 211 , - 396 , - 369 , - 130 , - 103 , - 288 , - 261 , - 22 , - 419 , - 180 , - 153 , - 338 , - 311 , - 72 , - 45 , - 230 , - 203 , - 388 , - 361 , - 122 , - 95 , - 280 , - 253 , - 14 , - 411 , - 172 , - 145 , - 330 , - 303 , - 64 , - 37 , - 222 , - 195 , - 380 , - 353 , - 114 , - 87 , - 272 , - 245 , - 6 , - 403 , - 164 , - 137 , - 322 , - 295 , - 56 , - 29 , - 214 , - 187 , - 372 , - 345 , - 106 , - 79 , - 264 , - 237 , - 422 , - 395 , - 156 , - 129 , - 314 , - 287 , - 48 , - 21 , - 206 , - 179 , - 364 , - 337 , - 98 , - 71 , - 256 , - 229 , - 414 , - 387 , - 148 , - 121 , - 306 , - 279 , - 40 , - 13 , - 198 , - 171 , - 356 , - 329 , - 90 , - 63 , - 248 , - 221 , - 406 , - 379 , - 140 , - 113 , - 298 , - 271 , - 32 , - 5 , - 190 , - 163 , - 348 , - 321 , - 82 , - 55 , - 240 , - 213 , - 398 , - 371 , - 132 , - 105 , - 290 , - 263 , - 24 , - 421 , - 182 , - 155 , - 340 , - 313 , - 74 , - 47 , - 232 , - 205 , - 390 , - 363 , - 124 , - 97 , - 282 , - 255 , - 16 , - 413 , - 174 , - 147 , - 332 , - 305 , - 66 , - 39 , - 224 , - 197 , - 382 , - 355 , - 116 , - 89 , - 274 , - 247 , - 8 , - 405 , - 166 , - 139 , - 324 , - 297 , - 58 , - 31 , - 216 , - 189 , - 374 , - 347 , - 108 , - 81 , - 266 , - 239 , - 0 , - 311 , - 334 , - 69 , - 380 , - 403 , - 138 , - 17 , - 40 , - 207 , - 86 , - 109 , - 276 , - 155 , - 178 , - 345 , - 224 , - 247 , - 414 , - 293 , - 316 , - 51 , - 362 , - 385 , - 120 , - 431 , - 22 , - 189 , - 68 , - 91 , - 258 , - 137 , - 160 , - 327 , - 206 , - 229 , - 396 , - 275 , - 298 , - 33 , - 344 , - 367 , - 102 , - 413 , - 4 , - 171 , - 50 , - 73 , - 240 , - 119 , - 142 , - 309 , - 188 , - 211 , - 378 , - 257 , - 280 , - 15 , - 326 , - 349 , - 84 , - 395 , - 418 , - 153 , - 32 , - 55 , - 222 , - 101 , - 124 , - 291 , - 170 , - 193 , - 360 , - 239 , - 262 , - 429 , - 308 , - 331 , - 66 , - 377 , - 400 , - 135 , - 14 , - 37 , - 204 , - 83 , - 106 , - 273 , - 152 , - 175 , - 342 , - 221 , - 244 , - 411 , - 290 , - 313 , - 48 , - 359 , - 382 , - 117 , - 428 , - 19 , - 186 , - 65 , - 88 , - 255 , - 134 , - 157 , - 324 , - 203 , - 226 , - 393 , - 272 , - 295 , - 30 , - 341 , - 364 , - 99 , - 410 , - 1 , - 168 , - 47 , - 70 , - 237 , - 116 , - 139 , - 306 , - 185 , - 208 , - 375 , - 254 , - 277 , - 12 , - 323 , - 346 , - 81 , - 392 , - 415 , - 150 , - 29 , - 52 , - 219 , - 98 , - 121 , - 288 , - 167 , - 190 , - 357 , - 236 , - 259 , - 426 , - 305 , - 328 , - 63 , - 374 , - 397 , - 132 , - 11 , - 34 , - 201 , - 80 , - 103 , - 270 , - 149 , - 172 , - 339 , - 218 , - 241 , - 408 , - 287 , - 310 , - 45 , - 356 , - 379 , - 114 , - 425 , - 16 , - 183 , - 62 , - 85 , - 252 , - 131 , - 154 , - 321 , - 200 , - 223 , - 390 , - 269 , - 292 , - 27 , - 338 , - 361 , - 96 , - 407 , - 430 , - 165 , - 44 , - 67 , - 234 , - 113 , - 136 , - 303 , - 182 , - 205 , - 372 , - 251 , - 274 , - 9 , - 320 , - 343 , - 78 , - 389 , - 412 , - 147 , - 26 , - 49 , - 216 , - 95 , - 118 , - 285 , - 164 , - 187 , - 354 , - 233 , - 256 , - 423 , - 302 , - 325 , - 60 , - 371 , - 394 , - 129 , - 8 , - 31 , - 198 , - 77 , - 100 , - 267 , - 146 , - 169 , - 336 , - 215 , - 238 , - 405 , - 284 , - 307 , - 42 , - 353 , - 376 , - 111 , - 422 , - 13 , - 180 , - 59 , - 82 , - 249 , - 128 , - 151 , - 318 , - 197 , - 220 , - 387 , - 266 , - 289 , - 24 , - 335 , - 358 , - 93 , - 404 , - 427 , - 162 , - 41 , - 64 , - 231 , - 110 , - 133 , - 300 , - 179 , - 202 , - 369 , - 248 , - 271 , - 6 , - 317 , - 340 , - 75 , - 386 , - 409 , - 144 , - 23 , - 46 , - 213 , - 92 , - 115 , - 282 , - 161 , - 184 , - 351 , - 230 , - 253 , - 420 , - 299 , - 322 , - 57 , - 368 , - 391 , - 126 , - 5 , - 28 , - 195 , - 74 , - 97 , - 264 , - 143 , - 166 , - 333 , - 212 , - 235 , - 402 , - 281 , - 304 , - 39 , - 350 , - 373 , - 108 , - 419 , - 10 , - 177 , - 56 , - 79 , - 246 , - 125 , - 148 , - 315 , - 194 , - 217 , - 384 , - 263 , - 286 , - 21 , - 332 , - 355 , - 90 , - 401 , - 424 , - 159 , - 38 , - 61 , - 228 , - 107 , - 130 , - 297 , - 176 , - 199 , - 366 , - 245 , - 268 , - 3 , - 314 , - 337 , - 72 , - 383 , - 406 , - 141 , - 20 , - 43 , - 210 , - 89 , - 112 , - 279 , - 158 , - 181 , - 348 , - 227 , - 250 , - 417 , - 296 , - 319 , - 54 , - 365 , - 388 , - 123 , - 2 , - 25 , - 192 , - 71 , - 94 , - 261 , - 140 , - 163 , - 330 , - 209 , - 232 , - 399 , - 278 , - 301 , - 36 , - 347 , - 370 , - 105 , - 416 , - 7 , - 174 , - 53 , - 76 , - 243 , - 122 , - 145 , - 312 , - 191 , - 214 , - 381 , - 260 , - 283 , - 18 , - 329 , - 352 , - 87 , - 398 , - 421 , - 156 , - 35 , - 58 , - 225 , - 104 , - 127 , - 294 , - 173 , - 196 , - 363 , - 242 , - 265 , - 0 , - 81 , - 382 , - 23 , - 324 , - 405 , - 266 , - 347 , - 208 , - 289 , - 150 , - 231 , - 92 , - 173 , - 34 , - 115 , - 416 , - 57 , - 358 , - 439 , - 300 , - 381 , - 242 , - 323 , - 184 , - 265 , - 126 , - 207 , - 68 , - 149 , - 10 , - 91 , - 392 , - 33 , - 334 , - 415 , - 276 , - 357 , - 218 , - 299 , - 160 , - 241 , - 102 , - 183 , - 44 , - 125 , - 426 , - 67 , - 368 , - 9 , - 310 , - 391 , - 252 , - 333 , - 194 , - 275 , - 136 , - 217 , - 78 , - 159 , - 20 , - 101 , - 402 , - 43 , - 344 , - 425 , - 286 , - 367 , - 228 , - 309 , - 170 , - 251 , - 112 , - 193 , - 54 , - 135 , - 436 , - 77 , - 378 , - 19 , - 320 , - 401 , - 262 , - 343 , - 204 , - 285 , - 146 , - 227 , - 88 , - 169 , - 30 , - 111 , - 412 , - 53 , - 354 , - 435 , - 296 , - 377 , - 238 , - 319 , - 180 , - 261 , - 122 , - 203 , - 64 , - 145 , - 6 , - 87 , - 388 , - 29 , - 330 , - 411 , - 272 , - 353 , - 214 , - 295 , - 156 , - 237 , - 98 , - 179 , - 40 , - 121 , - 422 , - 63 , - 364 , - 5 , - 306 , - 387 , - 248 , - 329 , - 190 , - 271 , - 132 , - 213 , - 74 , - 155 , - 16 , - 97 , - 398 , - 39 , - 340 , - 421 , - 282 , - 363 , - 224 , - 305 , - 166 , - 247 , - 108 , - 189 , - 50 , - 131 , - 432 , - 73 , - 374 , - 15 , - 316 , - 397 , - 258 , - 339 , - 200 , - 281 , - 142 , - 223 , - 84 , - 165 , - 26 , - 107 , - 408 , - 49 , - 350 , - 431 , - 292 , - 373 , - 234 , - 315 , - 176 , - 257 , - 118 , - 199 , - 60 , - 141 , - 2 , - 83 , - 384 , - 25 , - 326 , - 407 , - 268 , - 349 , - 210 , - 291 , - 152 , - 233 , - 94 , - 175 , - 36 , - 117 , - 418 , - 59 , - 360 , - 1 , - 302 , - 383 , - 244 , - 325 , - 186 , - 267 , - 128 , - 209 , - 70 , - 151 , - 12 , - 93 , - 394 , - 35 , - 336 , - 417 , - 278 , - 359 , - 220 , - 301 , - 162 , - 243 , - 104 , - 185 , - 46 , - 127 , - 428 , - 69 , - 370 , - 11 , - 312 , - 393 , - 254 , - 335 , - 196 , - 277 , - 138 , - 219 , - 80 , - 161 , - 22 , - 103 , - 404 , - 45 , - 346 , - 427 , - 288 , - 369 , - 230 , - 311 , - 172 , - 253 , - 114 , - 195 , - 56 , - 137 , - 438 , - 79 , - 380 , - 21 , - 322 , - 403 , - 264 , - 345 , - 206 , - 287 , - 148 , - 229 , - 90 , - 171 , - 32 , - 113 , - 414 , - 55 , - 356 , - 437 , - 298 , - 379 , - 240 , - 321 , - 182 , - 263 , - 124 , - 205 , - 66 , - 147 , - 8 , - 89 , - 390 , - 31 , - 332 , - 413 , - 274 , - 355 , - 216 , - 297 , - 158 , - 239 , - 100 , - 181 , - 42 , - 123 , - 424 , - 65 , - 366 , - 7 , - 308 , - 389 , - 250 , - 331 , - 192 , - 273 , - 134 , - 215 , - 76 , - 157 , - 18 , - 99 , - 400 , - 41 , - 342 , - 423 , - 284 , - 365 , - 226 , - 307 , - 168 , - 249 , - 110 , - 191 , - 52 , - 133 , - 434 , - 75 , - 376 , - 17 , - 318 , - 399 , - 260 , - 341 , - 202 , - 283 , - 144 , - 225 , - 86 , - 167 , - 28 , - 109 , - 410 , - 51 , - 352 , - 433 , - 294 , - 375 , - 236 , - 317 , - 178 , - 259 , - 120 , - 201 , - 62 , - 143 , - 4 , - 85 , - 386 , - 27 , - 328 , - 409 , - 270 , - 351 , - 212 , - 293 , - 154 , - 235 , - 96 , - 177 , - 38 , - 119 , - 420 , - 61 , - 362 , - 3 , - 304 , - 385 , - 246 , - 327 , - 188 , - 269 , - 130 , - 211 , - 72 , - 153 , - 14 , - 95 , - 396 , - 37 , - 338 , - 419 , - 280 , - 361 , - 222 , - 303 , - 164 , - 245 , - 106 , - 187 , - 48 , - 129 , - 430 , - 71 , - 372 , - 13 , - 314 , - 395 , - 256 , - 337 , - 198 , - 279 , - 140 , - 221 , - 82 , - 163 , - 24 , - 105 , - 406 , - 47 , - 348 , - 429 , - 290 , - 371 , - 232 , - 313 , - 174 , - 255 , - 116 , - 197 , - 58 , - 139 , - 0 , - 365 , - 394 , - 87 , - 340 , - 257 , - 286 , - 427 , - 232 , - 149 , - 178 , - 319 , - 124 , - 41 , - 70 , - 211 , - 16 , - 381 , - 410 , - 103 , - 356 , - 273 , - 302 , - 443 , - 248 , - 165 , - 194 , - 335 , - 140 , - 57 , - 86 , - 227 , - 32 , - 397 , - 426 , - 119 , - 372 , - 289 , - 318 , - 11 , - 264 , - 181 , - 210 , - 351 , - 156 , - 73 , - 102 , - 243 , - 48 , - 413 , - 442 , - 135 , - 388 , - 305 , - 334 , - 27 , - 280 , - 197 , - 226 , - 367 , - 172 , - 89 , - 118 , - 259 , - 64 , - 429 , - 10 , - 151 , - 404 , - 321 , - 350 , - 43 , - 296 , - 213 , - 242 , - 383 , - 188 , - 105 , - 134 , - 275 , - 80 , - 445 , - 26 , - 167 , - 420 , - 337 , - 366 , - 59 , - 312 , - 229 , - 258 , - 399 , - 204 , - 121 , - 150 , - 291 , - 96 , - 13 , - 42 , - 183 , - 436 , - 353 , - 382 , - 75 , - 328 , - 245 , - 274 , - 415 , - 220 , - 137 , - 166 , - 307 , - 112 , - 29 , - 58 , - 199 , - 4 , - 369 , - 398 , - 91 , - 344 , - 261 , - 290 , - 431 , - 236 , - 153 , - 182 , - 323 , - 128 , - 45 , - 74 , - 215 , - 20 , - 385 , - 414 , - 107 , - 360 , - 277 , - 306 , - 447 , - 252 , - 169 , - 198 , - 339 , - 144 , - 61 , - 90 , - 231 , - 36 , - 401 , - 430 , - 123 , - 376 , - 293 , - 322 , - 15 , - 268 , - 185 , - 214 , - 355 , - 160 , - 77 , - 106 , - 247 , - 52 , - 417 , - 446 , - 139 , - 392 , - 309 , - 338 , - 31 , - 284 , - 201 , - 230 , - 371 , - 176 , - 93 , - 122 , - 263 , - 68 , - 433 , - 14 , - 155 , - 408 , - 325 , - 354 , - 47 , - 300 , - 217 , - 246 , - 387 , - 192 , - 109 , - 138 , - 279 , - 84 , - 1 , - 30 , - 171 , - 424 , - 341 , - 370 , - 63 , - 316 , - 233 , - 262 , - 403 , - 208 , - 125 , - 154 , - 295 , - 100 , - 17 , - 46 , - 187 , - 440 , - 357 , - 386 , - 79 , - 332 , - 249 , - 278 , - 419 , - 224 , - 141 , - 170 , - 311 , - 116 , - 33 , - 62 , - 203 , - 8 , - 373 , - 402 , - 95 , - 348 , - 265 , - 294 , - 435 , - 240 , - 157 , - 186 , - 327 , - 132 , - 49 , - 78 , - 219 , - 24 , - 389 , - 418 , - 111 , - 364 , - 281 , - 310 , - 3 , - 256 , - 173 , - 202 , - 343 , - 148 , - 65 , - 94 , - 235 , - 40 , - 405 , - 434 , - 127 , - 380 , - 297 , - 326 , - 19 , - 272 , - 189 , - 218 , - 359 , - 164 , - 81 , - 110 , - 251 , - 56 , - 421 , - 2 , - 143 , - 396 , - 313 , - 342 , - 35 , - 288 , - 205 , - 234 , - 375 , - 180 , - 97 , - 126 , - 267 , - 72 , - 437 , - 18 , - 159 , - 412 , - 329 , - 358 , - 51 , - 304 , - 221 , - 250 , - 391 , - 196 , - 113 , - 142 , - 283 , - 88 , - 5 , - 34 , - 175 , - 428 , - 345 , - 374 , - 67 , - 320 , - 237 , - 266 , - 407 , - 212 , - 129 , - 158 , - 299 , - 104 , - 21 , - 50 , - 191 , - 444 , - 361 , - 390 , - 83 , - 336 , - 253 , - 282 , - 423 , - 228 , - 145 , - 174 , - 315 , - 120 , - 37 , - 66 , - 207 , - 12 , - 377 , - 406 , - 99 , - 352 , - 269 , - 298 , - 439 , - 244 , - 161 , - 190 , - 331 , - 136 , - 53 , - 82 , - 223 , - 28 , - 393 , - 422 , - 115 , - 368 , - 285 , - 314 , - 7 , - 260 , - 177 , - 206 , - 347 , - 152 , - 69 , - 98 , - 239 , - 44 , - 409 , - 438 , - 131 , - 384 , - 301 , - 330 , - 23 , - 276 , - 193 , - 222 , - 363 , - 168 , - 85 , - 114 , - 255 , - 60 , - 425 , - 6 , - 147 , - 400 , - 317 , - 346 , - 39 , - 292 , - 209 , - 238 , - 379 , - 184 , - 101 , - 130 , - 271 , - 76 , - 441 , - 22 , - 163 , - 416 , - 333 , - 362 , - 55 , - 308 , - 225 , - 254 , - 395 , - 200 , - 117 , - 146 , - 287 , - 92 , - 9 , - 38 , - 179 , - 432 , - 349 , - 378 , - 71 , - 324 , - 241 , - 270 , - 411 , - 216 , - 133 , - 162 , - 303 , - 108 , - 25 , - 54 , - 195 , - 0 , - 59 , - 346 , - 405 , - 236 , - 295 , - 126 , - 185 , - 16 , - 75 , - 362 , - 421 , - 252 , - 311 , - 142 , - 201 , - 32 , - 91 , - 378 , - 437 , - 268 , - 327 , - 158 , - 217 , - 48 , - 107 , - 394 , - 453 , - 284 , - 343 , - 174 , - 233 , - 64 , - 123 , - 410 , - 13 , - 300 , - 359 , - 190 , - 249 , - 80 , - 139 , - 426 , - 29 , - 316 , - 375 , - 206 , - 265 , - 96 , - 155 , - 442 , - 45 , - 332 , - 391 , - 222 , - 281 , - 112 , - 171 , - 2 , - 61 , - 348 , - 407 , - 238 , - 297 , - 128 , - 187 , - 18 , - 77 , - 364 , - 423 , - 254 , - 313 , - 144 , - 203 , - 34 , - 93 , - 380 , - 439 , - 270 , - 329 , - 160 , - 219 , - 50 , - 109 , - 396 , - 455 , - 286 , - 345 , - 176 , - 235 , - 66 , - 125 , - 412 , - 15 , - 302 , - 361 , - 192 , - 251 , - 82 , - 141 , - 428 , - 31 , - 318 , - 377 , - 208 , - 267 , - 98 , - 157 , - 444 , - 47 , - 334 , - 393 , - 224 , - 283 , - 114 , - 173 , - 4 , - 63 , - 350 , - 409 , - 240 , - 299 , - 130 , - 189 , - 20 , - 79 , - 366 , - 425 , - 256 , - 315 , - 146 , - 205 , - 36 , - 95 , - 382 , - 441 , - 272 , - 331 , - 162 , - 221 , - 52 , - 111 , - 398 , - 1 , - 288 , - 347 , - 178 , - 237 , - 68 , - 127 , - 414 , - 17 , - 304 , - 363 , - 194 , - 253 , - 84 , - 143 , - 430 , - 33 , - 320 , - 379 , - 210 , - 269 , - 100 , - 159 , - 446 , - 49 , - 336 , - 395 , - 226 , - 285 , - 116 , - 175 , - 6 , - 65 , - 352 , - 411 , - 242 , - 301 , - 132 , - 191 , - 22 , - 81 , - 368 , - 427 , - 258 , - 317 , - 148 , - 207 , - 38 , - 97 , - 384 , - 443 , - 274 , - 333 , - 164 , - 223 , - 54 , - 113 , - 400 , - 3 , - 290 , - 349 , - 180 , - 239 , - 70 , - 129 , - 416 , - 19 , - 306 , - 365 , - 196 , - 255 , - 86 , - 145 , - 432 , - 35 , - 322 , - 381 , - 212 , - 271 , - 102 , - 161 , - 448 , - 51 , - 338 , - 397 , - 228 , - 287 , - 118 , - 177 , - 8 , - 67 , - 354 , - 413 , - 244 , - 303 , - 134 , - 193 , - 24 , - 83 , - 370 , - 429 , - 260 , - 319 , - 150 , - 209 , - 40 , - 99 , - 386 , - 445 , - 276 , - 335 , - 166 , - 225 , - 56 , - 115 , - 402 , - 5 , - 292 , - 351 , - 182 , - 241 , - 72 , - 131 , - 418 , - 21 , - 308 , - 367 , - 198 , - 257 , - 88 , - 147 , - 434 , - 37 , - 324 , - 383 , - 214 , - 273 , - 104 , - 163 , - 450 , - 53 , - 340 , - 399 , - 230 , - 289 , - 120 , - 179 , - 10 , - 69 , - 356 , - 415 , - 246 , - 305 , - 136 , - 195 , - 26 , - 85 , - 372 , - 431 , - 262 , - 321 , - 152 , - 211 , - 42 , - 101 , - 388 , - 447 , - 278 , - 337 , - 168 , - 227 , - 58 , - 117 , - 404 , - 7 , - 294 , - 353 , - 184 , - 243 , - 74 , - 133 , - 420 , - 23 , - 310 , - 369 , - 200 , - 259 , - 90 , - 149 , - 436 , - 39 , - 326 , - 385 , - 216 , - 275 , - 106 , - 165 , - 452 , - 55 , - 342 , - 401 , - 232 , - 291 , - 122 , - 181 , - 12 , - 71 , - 358 , - 417 , - 248 , - 307 , - 138 , - 197 , - 28 , - 87 , - 374 , - 433 , - 264 , - 323 , - 154 , - 213 , - 44 , - 103 , - 390 , - 449 , - 280 , - 339 , - 170 , - 229 , - 60 , - 119 , - 406 , - 9 , - 296 , - 355 , - 186 , - 245 , - 76 , - 135 , - 422 , - 25 , - 312 , - 371 , - 202 , - 261 , - 92 , - 151 , - 438 , - 41 , - 328 , - 387 , - 218 , - 277 , - 108 , - 167 , - 454 , - 57 , - 344 , - 403 , - 234 , - 293 , - 124 , - 183 , - 14 , - 73 , - 360 , - 419 , - 250 , - 309 , - 140 , - 199 , - 30 , - 89 , - 376 , - 435 , - 266 , - 325 , - 156 , - 215 , - 46 , - 105 , - 392 , - 451 , - 282 , - 341 , - 172 , - 231 , - 62 , - 121 , - 408 , - 11 , - 298 , - 357 , - 188 , - 247 , - 78 , - 137 , - 424 , - 27 , - 314 , - 373 , - 204 , - 263 , - 94 , - 153 , - 440 , - 43 , - 330 , - 389 , - 220 , - 279 , - 110 , - 169 , - 0 , - 321 , - 294 , - 383 , - 124 , - 445 , - 418 , - 43 , - 248 , - 105 , - 78 , - 167 , - 372 , - 229 , - 202 , - 291 , - 32 , - 353 , - 326 , - 415 , - 156 , - 13 , - 450 , - 75 , - 280 , - 137 , - 110 , - 199 , - 404 , - 261 , - 234 , - 323 , - 64 , - 385 , - 358 , - 447 , - 188 , - 45 , - 18 , - 107 , - 312 , - 169 , - 142 , - 231 , - 436 , - 293 , - 266 , - 355 , - 96 , - 417 , - 390 , - 15 , - 220 , - 77 , - 50 , - 139 , - 344 , - 201 , - 174 , - 263 , - 4 , - 325 , - 298 , - 387 , - 128 , - 449 , - 422 , - 47 , - 252 , - 109 , - 82 , - 171 , - 376 , - 233 , - 206 , - 295 , - 36 , - 357 , - 330 , - 419 , - 160 , - 17 , - 454 , - 79 , - 284 , - 141 , - 114 , - 203 , - 408 , - 265 , - 238 , - 327 , - 68 , - 389 , - 362 , - 451 , - 192 , - 49 , - 22 , - 111 , - 316 , - 173 , - 146 , - 235 , - 440 , - 297 , - 270 , - 359 , - 100 , - 421 , - 394 , - 19 , - 224 , - 81 , - 54 , - 143 , - 348 , - 205 , - 178 , - 267 , - 8 , - 329 , - 302 , - 391 , - 132 , - 453 , - 426 , - 51 , - 256 , - 113 , - 86 , - 175 , - 380 , - 237 , - 210 , - 299 , - 40 , - 361 , - 334 , - 423 , - 164 , - 21 , - 458 , - 83 , - 288 , - 145 , - 118 , - 207 , - 412 , - 269 , - 242 , - 331 , - 72 , - 393 , - 366 , - 455 , - 196 , - 53 , - 26 , - 115 , - 320 , - 177 , - 150 , - 239 , - 444 , - 301 , - 274 , - 363 , - 104 , - 425 , - 398 , - 23 , - 228 , - 85 , - 58 , - 147 , - 352 , - 209 , - 182 , - 271 , - 12 , - 333 , - 306 , - 395 , - 136 , - 457 , - 430 , - 55 , - 260 , - 117 , - 90 , - 179 , - 384 , - 241 , - 214 , - 303 , - 44 , - 365 , - 338 , - 427 , - 168 , - 25 , - 462 , - 87 , - 292 , - 149 , - 122 , - 211 , - 416 , - 273 , - 246 , - 335 , - 76 , - 397 , - 370 , - 459 , - 200 , - 57 , - 30 , - 119 , - 324 , - 181 , - 154 , - 243 , - 448 , - 305 , - 278 , - 367 , - 108 , - 429 , - 402 , - 27 , - 232 , - 89 , - 62 , - 151 , - 356 , - 213 , - 186 , - 275 , - 16 , - 337 , - 310 , - 399 , - 140 , - 461 , - 434 , - 59 , - 264 , - 121 , - 94 , - 183 , - 388 , - 245 , - 218 , - 307 , - 48 , - 369 , - 342 , - 431 , - 172 , - 29 , - 2 , - 91 , - 296 , - 153 , - 126 , - 215 , - 420 , - 277 , - 250 , - 339 , - 80 , - 401 , - 374 , - 463 , - 204 , - 61 , - 34 , - 123 , - 328 , - 185 , - 158 , - 247 , - 452 , - 309 , - 282 , - 371 , - 112 , - 433 , - 406 , - 31 , - 236 , - 93 , - 66 , - 155 , - 360 , - 217 , - 190 , - 279 , - 20 , - 341 , - 314 , - 403 , - 144 , - 1 , - 438 , - 63 , - 268 , - 125 , - 98 , - 187 , - 392 , - 249 , - 222 , - 311 , - 52 , - 373 , - 346 , - 435 , - 176 , - 33 , - 6 , - 95 , - 300 , - 157 , - 130 , - 219 , - 424 , - 281 , - 254 , - 343 , - 84 , - 405 , - 378 , - 3 , - 208 , - 65 , - 38 , - 127 , - 332 , - 189 , - 162 , - 251 , - 456 , - 313 , - 286 , - 375 , - 116 , - 437 , - 410 , - 35 , - 240 , - 97 , - 70 , - 159 , - 364 , - 221 , - 194 , - 283 , - 24 , - 345 , - 318 , - 407 , - 148 , - 5 , - 442 , - 67 , - 272 , - 129 , - 102 , - 191 , - 396 , - 253 , - 226 , - 315 , - 56 , - 377 , - 350 , - 439 , - 180 , - 37 , - 10 , - 99 , - 304 , - 161 , - 134 , - 223 , - 428 , - 285 , - 258 , - 347 , - 88 , - 409 , - 382 , - 7 , - 212 , - 69 , - 42 , - 131 , - 336 , - 193 , - 166 , - 255 , - 460 , - 317 , - 290 , - 379 , - 120 , - 441 , - 414 , - 39 , - 244 , - 101 , - 74 , - 163 , - 368 , - 225 , - 198 , - 287 , - 28 , - 349 , - 322 , - 411 , - 152 , - 9 , - 446 , - 71 , - 276 , - 133 , - 106 , - 195 , - 400 , - 257 , - 230 , - 319 , - 60 , - 381 , - 354 , - 443 , - 184 , - 41 , - 14 , - 103 , - 308 , - 165 , - 138 , - 227 , - 432 , - 289 , - 262 , - 351 , - 92 , - 413 , - 386 , - 11 , - 216 , - 73 , - 46 , - 135 , - 340 , - 197 , - 170 , - 259 , - 0 , - 175 , - 114 , - 289 , - 228 , - 403 , - 342 , - 45 , - 456 , - 159 , - 98 , - 273 , - 212 , - 387 , - 326 , - 29 , - 440 , - 143 , - 82 , - 257 , - 196 , - 371 , - 310 , - 13 , - 424 , - 127 , - 66 , - 241 , - 180 , - 355 , - 294 , - 469 , - 408 , - 111 , - 50 , - 225 , - 164 , - 339 , - 278 , - 453 , - 392 , - 95 , - 34 , - 209 , - 148 , - 323 , - 262 , - 437 , - 376 , - 79 , - 18 , - 193 , - 132 , - 307 , - 246 , - 421 , - 360 , - 63 , - 2 , - 177 , - 116 , - 291 , - 230 , - 405 , - 344 , - 47 , - 458 , - 161 , - 100 , - 275 , - 214 , - 389 , - 328 , - 31 , - 442 , - 145 , - 84 , - 259 , - 198 , - 373 , - 312 , - 15 , - 426 , - 129 , - 68 , - 243 , - 182 , - 357 , - 296 , - 471 , - 410 , - 113 , - 52 , - 227 , - 166 , - 341 , - 280 , - 455 , - 394 , - 97 , - 36 , - 211 , - 150 , - 325 , - 264 , - 439 , - 378 , - 81 , - 20 , - 195 , - 134 , - 309 , - 248 , - 423 , - 362 , - 65 , - 4 , - 179 , - 118 , - 293 , - 232 , - 407 , - 346 , - 49 , - 460 , - 163 , - 102 , - 277 , - 216 , - 391 , - 330 , - 33 , - 444 , - 147 , - 86 , - 261 , - 200 , - 375 , - 314 , - 17 , - 428 , - 131 , - 70 , - 245 , - 184 , - 359 , - 298 , - 1 , - 412 , - 115 , - 54 , - 229 , - 168 , - 343 , - 282 , - 457 , - 396 , - 99 , - 38 , - 213 , - 152 , - 327 , - 266 , - 441 , - 380 , - 83 , - 22 , - 197 , - 136 , - 311 , - 250 , - 425 , - 364 , - 67 , - 6 , - 181 , - 120 , - 295 , - 234 , - 409 , - 348 , - 51 , - 462 , - 165 , - 104 , - 279 , - 218 , - 393 , - 332 , - 35 , - 446 , - 149 , - 88 , - 263 , - 202 , - 377 , - 316 , - 19 , - 430 , - 133 , - 72 , - 247 , - 186 , - 361 , - 300 , - 3 , - 414 , - 117 , - 56 , - 231 , - 170 , - 345 , - 284 , - 459 , - 398 , - 101 , - 40 , - 215 , - 154 , - 329 , - 268 , - 443 , - 382 , - 85 , - 24 , - 199 , - 138 , - 313 , - 252 , - 427 , - 366 , - 69 , - 8 , - 183 , - 122 , - 297 , - 236 , - 411 , - 350 , - 53 , - 464 , - 167 , - 106 , - 281 , - 220 , - 395 , - 334 , - 37 , - 448 , - 151 , - 90 , - 265 , - 204 , - 379 , - 318 , - 21 , - 432 , - 135 , - 74 , - 249 , - 188 , - 363 , - 302 , - 5 , - 416 , - 119 , - 58 , - 233 , - 172 , - 347 , - 286 , - 461 , - 400 , - 103 , - 42 , - 217 , - 156 , - 331 , - 270 , - 445 , - 384 , - 87 , - 26 , - 201 , - 140 , - 315 , - 254 , - 429 , - 368 , - 71 , - 10 , - 185 , - 124 , - 299 , - 238 , - 413 , - 352 , - 55 , - 466 , - 169 , - 108 , - 283 , - 222 , - 397 , - 336 , - 39 , - 450 , - 153 , - 92 , - 267 , - 206 , - 381 , - 320 , - 23 , - 434 , - 137 , - 76 , - 251 , - 190 , - 365 , - 304 , - 7 , - 418 , - 121 , - 60 , - 235 , - 174 , - 349 , - 288 , - 463 , - 402 , - 105 , - 44 , - 219 , - 158 , - 333 , - 272 , - 447 , - 386 , - 89 , - 28 , - 203 , - 142 , - 317 , - 256 , - 431 , - 370 , - 73 , - 12 , - 187 , - 126 , - 301 , - 240 , - 415 , - 354 , - 57 , - 468 , - 171 , - 110 , - 285 , - 224 , - 399 , - 338 , - 41 , - 452 , - 155 , - 94 , - 269 , - 208 , - 383 , - 322 , - 25 , - 436 , - 139 , - 78 , - 253 , - 192 , - 367 , - 306 , - 9 , - 420 , - 123 , - 62 , - 237 , - 176 , - 351 , - 290 , - 465 , - 404 , - 107 , - 46 , - 221 , - 160 , - 335 , - 274 , - 449 , - 388 , - 91 , - 30 , - 205 , - 144 , - 319 , - 258 , - 433 , - 372 , - 75 , - 14 , - 189 , - 128 , - 303 , - 242 , - 417 , - 356 , - 59 , - 470 , - 173 , - 112 , - 287 , - 226 , - 401 , - 340 , - 43 , - 454 , - 157 , - 96 , - 271 , - 210 , - 385 , - 324 , - 27 , - 438 , - 141 , - 80 , - 255 , - 194 , - 369 , - 308 , - 11 , - 422 , - 125 , - 64 , - 239 , - 178 , - 353 , - 292 , - 467 , - 406 , - 109 , - 48 , - 223 , - 162 , - 337 , - 276 , - 451 , - 390 , - 93 , - 32 , - 207 , - 146 , - 321 , - 260 , - 435 , - 374 , - 77 , - 16 , - 191 , - 130 , - 305 , - 244 , - 419 , - 358 , - 61 , - 0 , - 149 , - 418 , - 327 , - 356 , - 25 , - 294 , - 203 , - 232 , - 381 , - 170 , - 79 , - 108 , - 257 , - 46 , - 435 , - 464 , - 133 , - 402 , - 311 , - 340 , - 9 , - 278 , - 187 , - 216 , - 365 , - 154 , - 63 , - 92 , - 241 , - 30 , - 419 , - 448 , - 117 , - 386 , - 295 , - 324 , - 473 , - 262 , - 171 , - 200 , - 349 , - 138 , - 47 , - 76 , - 225 , - 14 , - 403 , - 432 , - 101 , - 370 , - 279 , - 308 , - 457 , - 246 , - 155 , - 184 , - 333 , - 122 , - 31 , - 60 , - 209 , - 478 , - 387 , - 416 , - 85 , - 354 , - 263 , - 292 , - 441 , - 230 , - 139 , - 168 , - 317 , - 106 , - 15 , - 44 , - 193 , - 462 , - 371 , - 400 , - 69 , - 338 , - 247 , - 276 , - 425 , - 214 , - 123 , - 152 , - 301 , - 90 , - 479 , - 28 , - 177 , - 446 , - 355 , - 384 , - 53 , - 322 , - 231 , - 260 , - 409 , - 198 , - 107 , - 136 , - 285 , - 74 , - 463 , - 12 , - 161 , - 430 , - 339 , - 368 , - 37 , - 306 , - 215 , - 244 , - 393 , - 182 , - 91 , - 120 , - 269 , - 58 , - 447 , - 476 , - 145 , - 414 , - 323 , - 352 , - 21 , - 290 , - 199 , - 228 , - 377 , - 166 , - 75 , - 104 , - 253 , - 42 , - 431 , - 460 , - 129 , - 398 , - 307 , - 336 , - 5 , - 274 , - 183 , - 212 , - 361 , - 150 , - 59 , - 88 , - 237 , - 26 , - 415 , - 444 , - 113 , - 382 , - 291 , - 320 , - 469 , - 258 , - 167 , - 196 , - 345 , - 134 , - 43 , - 72 , - 221 , - 10 , - 399 , - 428 , - 97 , - 366 , - 275 , - 304 , - 453 , - 242 , - 151 , - 180 , - 329 , - 118 , - 27 , - 56 , - 205 , - 474 , - 383 , - 412 , - 81 , - 350 , - 259 , - 288 , - 437 , - 226 , - 135 , - 164 , - 313 , - 102 , - 11 , - 40 , - 189 , - 458 , - 367 , - 396 , - 65 , - 334 , - 243 , - 272 , - 421 , - 210 , - 119 , - 148 , - 297 , - 86 , - 475 , - 24 , - 173 , - 442 , - 351 , - 380 , - 49 , - 318 , - 227 , - 256 , - 405 , - 194 , - 103 , - 132 , - 281 , - 70 , - 459 , - 8 , - 157 , - 426 , - 335 , - 364 , - 33 , - 302 , - 211 , - 240 , - 389 , - 178 , - 87 , - 116 , - 265 , - 54 , - 443 , - 472 , - 141 , - 410 , - 319 , - 348 , - 17 , - 286 , - 195 , - 224 , - 373 , - 162 , - 71 , - 100 , - 249 , - 38 , - 427 , - 456 , - 125 , - 394 , - 303 , - 332 , - 1 , - 270 , - 179 , - 208 , - 357 , - 146 , - 55 , - 84 , - 233 , - 22 , - 411 , - 440 , - 109 , - 378 , - 287 , - 316 , - 465 , - 254 , - 163 , - 192 , - 341 , - 130 , - 39 , - 68 , - 217 , - 6 , - 395 , - 424 , - 93 , - 362 , - 271 , - 300 , - 449 , - 238 , - 147 , - 176 , - 325 , - 114 , - 23 , - 52 , - 201 , - 470 , - 379 , - 408 , - 77 , - 346 , - 255 , - 284 , - 433 , - 222 , - 131 , - 160 , - 309 , - 98 , - 7 , - 36 , - 185 , - 454 , - 363 , - 392 , - 61 , - 330 , - 239 , - 268 , - 417 , - 206 , - 115 , - 144 , - 293 , - 82 , - 471 , - 20 , - 169 , - 438 , - 347 , - 376 , - 45 , - 314 , - 223 , - 252 , - 401 , - 190 , - 99 , - 128 , - 277 , - 66 , - 455 , - 4 , - 153 , - 422 , - 331 , - 360 , - 29 , - 298 , - 207 , - 236 , - 385 , - 174 , - 83 , - 112 , - 261 , - 50 , - 439 , - 468 , - 137 , - 406 , - 315 , - 344 , - 13 , - 282 , - 191 , - 220 , - 369 , - 158 , - 67 , - 96 , - 245 , - 34 , - 423 , - 452 , - 121 , - 390 , - 299 , - 328 , - 477 , - 266 , - 175 , - 204 , - 353 , - 142 , - 51 , - 80 , - 229 , - 18 , - 407 , - 436 , - 105 , - 374 , - 283 , - 312 , - 461 , - 250 , - 159 , - 188 , - 337 , - 126 , - 35 , - 64 , - 213 , - 2 , - 391 , - 420 , - 89 , - 358 , - 267 , - 296 , - 445 , - 234 , - 143 , - 172 , - 321 , - 110 , - 19 , - 48 , - 197 , - 466 , - 375 , - 404 , - 73 , - 342 , - 251 , - 280 , - 429 , - 218 , - 127 , - 156 , - 305 , - 94 , - 3 , - 32 , - 181 , - 450 , - 359 , - 388 , - 57 , - 326 , - 235 , - 264 , - 413 , - 202 , - 111 , - 140 , - 289 , - 78 , - 467 , - 16 , - 165 , - 434 , - 343 , - 372 , - 41 , - 310 , - 219 , - 248 , - 397 , - 186 , - 95 , - 124 , - 273 , - 62 , - 451 , - 0 , - 181 , - 118 , - 299 , - 236 , - 417 , - 354 , - 47 , - 472 , - 165 , - 102 , - 283 , - 220 , - 401 , - 338 , - 31 , - 456 , - 149 , - 86 , - 267 , - 204 , - 385 , - 322 , - 15 , - 440 , - 133 , - 70 , - 251 , - 188 , - 369 , - 306 , - 487 , - 424 , - 117 , - 54 , - 235 , - 172 , - 353 , - 290 , - 471 , - 408 , - 101 , - 38 , - 219 , - 156 , - 337 , - 274 , - 455 , - 392 , - 85 , - 22 , - 203 , - 140 , - 321 , - 258 , - 439 , - 376 , - 69 , - 6 , - 187 , - 124 , - 305 , - 242 , - 423 , - 360 , - 53 , - 478 , - 171 , - 108 , - 289 , - 226 , - 407 , - 344 , - 37 , - 462 , - 155 , - 92 , - 273 , - 210 , - 391 , - 328 , - 21 , - 446 , - 139 , - 76 , - 257 , - 194 , - 375 , - 312 , - 5 , - 430 , - 123 , - 60 , - 241 , - 178 , - 359 , - 296 , - 477 , - 414 , - 107 , - 44 , - 225 , - 162 , - 343 , - 280 , - 461 , - 398 , - 91 , - 28 , - 209 , - 146 , - 327 , - 264 , - 445 , - 382 , - 75 , - 12 , - 193 , - 130 , - 311 , - 248 , - 429 , - 366 , - 59 , - 484 , - 177 , - 114 , - 295 , - 232 , - 413 , - 350 , - 43 , - 468 , - 161 , - 98 , - 279 , - 216 , - 397 , - 334 , - 27 , - 452 , - 145 , - 82 , - 263 , - 200 , - 381 , - 318 , - 11 , - 436 , - 129 , - 66 , - 247 , - 184 , - 365 , - 302 , - 483 , - 420 , - 113 , - 50 , - 231 , - 168 , - 349 , - 286 , - 467 , - 404 , - 97 , - 34 , - 215 , - 152 , - 333 , - 270 , - 451 , - 388 , - 81 , - 18 , - 199 , - 136 , - 317 , - 254 , - 435 , - 372 , - 65 , - 2 , - 183 , - 120 , - 301 , - 238 , - 419 , - 356 , - 49 , - 474 , - 167 , - 104 , - 285 , - 222 , - 403 , - 340 , - 33 , - 458 , - 151 , - 88 , - 269 , - 206 , - 387 , - 324 , - 17 , - 442 , - 135 , - 72 , - 253 , - 190 , - 371 , - 308 , - 1 , - 426 , - 119 , - 56 , - 237 , - 174 , - 355 , - 292 , - 473 , - 410 , - 103 , - 40 , - 221 , - 158 , - 339 , - 276 , - 457 , - 394 , - 87 , - 24 , - 205 , - 142 , - 323 , - 260 , - 441 , - 378 , - 71 , - 8 , - 189 , - 126 , - 307 , - 244 , - 425 , - 362 , - 55 , - 480 , - 173 , - 110 , - 291 , - 228 , - 409 , - 346 , - 39 , - 464 , - 157 , - 94 , - 275 , - 212 , - 393 , - 330 , - 23 , - 448 , - 141 , - 78 , - 259 , - 196 , - 377 , - 314 , - 7 , - 432 , - 125 , - 62 , - 243 , - 180 , - 361 , - 298 , - 479 , - 416 , - 109 , - 46 , - 227 , - 164 , - 345 , - 282 , - 463 , - 400 , - 93 , - 30 , - 211 , - 148 , - 329 , - 266 , - 447 , - 384 , - 77 , - 14 , - 195 , - 132 , - 313 , - 250 , - 431 , - 368 , - 61 , - 486 , - 179 , - 116 , - 297 , - 234 , - 415 , - 352 , - 45 , - 470 , - 163 , - 100 , - 281 , - 218 , - 399 , - 336 , - 29 , - 454 , - 147 , - 84 , - 265 , - 202 , - 383 , - 320 , - 13 , - 438 , - 131 , - 68 , - 249 , - 186 , - 367 , - 304 , - 485 , - 422 , - 115 , - 52 , - 233 , - 170 , - 351 , - 288 , - 469 , - 406 , - 99 , - 36 , - 217 , - 154 , - 335 , - 272 , - 453 , - 390 , - 83 , - 20 , - 201 , - 138 , - 319 , - 256 , - 437 , - 374 , - 67 , - 4 , - 185 , - 122 , - 303 , - 240 , - 421 , - 358 , - 51 , - 476 , - 169 , - 106 , - 287 , - 224 , - 405 , - 342 , - 35 , - 460 , - 153 , - 90 , - 271 , - 208 , - 389 , - 326 , - 19 , - 444 , - 137 , - 74 , - 255 , - 192 , - 373 , - 310 , - 3 , - 428 , - 121 , - 58 , - 239 , - 176 , - 357 , - 294 , - 475 , - 412 , - 105 , - 42 , - 223 , - 160 , - 341 , - 278 , - 459 , - 396 , - 89 , - 26 , - 207 , - 144 , - 325 , - 262 , - 443 , - 380 , - 73 , - 10 , - 191 , - 128 , - 309 , - 246 , - 427 , - 364 , - 57 , - 482 , - 175 , - 112 , - 293 , - 230 , - 411 , - 348 , - 41 , - 466 , - 159 , - 96 , - 277 , - 214 , - 395 , - 332 , - 25 , - 450 , - 143 , - 80 , - 261 , - 198 , - 379 , - 316 , - 9 , - 434 , - 127 , - 64 , - 245 , - 182 , - 363 , - 300 , - 481 , - 418 , - 111 , - 48 , - 229 , - 166 , - 347 , - 284 , - 465 , - 402 , - 95 , - 32 , - 213 , - 150 , - 331 , - 268 , - 449 , - 386 , - 79 , - 16 , - 197 , - 134 , - 315 , - 252 , - 433 , - 370 , - 63 , - 0 , - 47 , - 466 , - 265 , - 436 , - 483 , - 406 , - 205 , - 376 , - 423 , - 346 , - 145 , - 316 , - 363 , - 286 , - 85 , - 256 , - 303 , - 226 , - 25 , - 196 , - 243 , - 166 , - 461 , - 136 , - 183 , - 106 , - 401 , - 76 , - 123 , - 46 , - 341 , - 16 , - 63 , - 482 , - 281 , - 452 , - 3 , - 422 , - 221 , - 392 , - 439 , - 362 , - 161 , - 332 , - 379 , - 302 , - 101 , - 272 , - 319 , - 242 , - 41 , - 212 , - 259 , - 182 , - 477 , - 152 , - 199 , - 122 , - 417 , - 92 , - 139 , - 62 , - 357 , - 32 , - 79 , - 2 , - 297 , - 468 , - 19 , - 438 , - 237 , - 408 , - 455 , - 378 , - 177 , - 348 , - 395 , - 318 , - 117 , - 288 , - 335 , - 258 , - 57 , - 228 , - 275 , - 198 , - 493 , - 168 , - 215 , - 138 , - 433 , - 108 , - 155 , - 78 , - 373 , - 48 , - 95 , - 18 , - 313 , - 484 , - 35 , - 454 , - 253 , - 424 , - 471 , - 394 , - 193 , - 364 , - 411 , - 334 , - 133 , - 304 , - 351 , - 274 , - 73 , - 244 , - 291 , - 214 , - 13 , - 184 , - 231 , - 154 , - 449 , - 124 , - 171 , - 94 , - 389 , - 64 , - 111 , - 34 , - 329 , - 4 , - 51 , - 470 , - 269 , - 440 , - 487 , - 410 , - 209 , - 380 , - 427 , - 350 , - 149 , - 320 , - 367 , - 290 , - 89 , - 260 , - 307 , - 230 , - 29 , - 200 , - 247 , - 170 , - 465 , - 140 , - 187 , - 110 , - 405 , - 80 , - 127 , - 50 , - 345 , - 20 , - 67 , - 486 , - 285 , - 456 , - 7 , - 426 , - 225 , - 396 , - 443 , - 366 , - 165 , - 336 , - 383 , - 306 , - 105 , - 276 , - 323 , - 246 , - 45 , - 216 , - 263 , - 186 , - 481 , - 156 , - 203 , - 126 , - 421 , - 96 , - 143 , - 66 , - 361 , - 36 , - 83 , - 6 , - 301 , - 472 , - 23 , - 442 , - 241 , - 412 , - 459 , - 382 , - 181 , - 352 , - 399 , - 322 , - 121 , - 292 , - 339 , - 262 , - 61 , - 232 , - 279 , - 202 , - 1 , - 172 , - 219 , - 142 , - 437 , - 112 , - 159 , - 82 , - 377 , - 52 , - 99 , - 22 , - 317 , - 488 , - 39 , - 458 , - 257 , - 428 , - 475 , - 398 , - 197 , - 368 , - 415 , - 338 , - 137 , - 308 , - 355 , - 278 , - 77 , - 248 , - 295 , - 218 , - 17 , - 188 , - 235 , - 158 , - 453 , - 128 , - 175 , - 98 , - 393 , - 68 , - 115 , - 38 , - 333 , - 8 , - 55 , - 474 , - 273 , - 444 , - 491 , - 414 , - 213 , - 384 , - 431 , - 354 , - 153 , - 324 , - 371 , - 294 , - 93 , - 264 , - 311 , - 234 , - 33 , - 204 , - 251 , - 174 , - 469 , - 144 , - 191 , - 114 , - 409 , - 84 , - 131 , - 54 , - 349 , - 24 , - 71 , - 490 , - 289 , - 460 , - 11 , - 430 , - 229 , - 400 , - 447 , - 370 , - 169 , - 340 , - 387 , - 310 , - 109 , - 280 , - 327 , - 250 , - 49 , - 220 , - 267 , - 190 , - 485 , - 160 , - 207 , - 130 , - 425 , - 100 , - 147 , - 70 , - 365 , - 40 , - 87 , - 10 , - 305 , - 476 , - 27 , - 446 , - 245 , - 416 , - 463 , - 386 , - 185 , - 356 , - 403 , - 326 , - 125 , - 296 , - 343 , - 266 , - 65 , - 236 , - 283 , - 206 , - 5 , - 176 , - 223 , - 146 , - 441 , - 116 , - 163 , - 86 , - 381 , - 56 , - 103 , - 26 , - 321 , - 492 , - 43 , - 462 , - 261 , - 432 , - 479 , - 402 , - 201 , - 372 , - 419 , - 342 , - 141 , - 312 , - 359 , - 282 , - 81 , - 252 , - 299 , - 222 , - 21 , - 192 , - 239 , - 162 , - 457 , - 132 , - 179 , - 102 , - 397 , - 72 , - 119 , - 42 , - 337 , - 12 , - 59 , - 478 , - 277 , - 448 , - 495 , - 418 , - 217 , - 388 , - 435 , - 358 , - 157 , - 328 , - 375 , - 298 , - 97 , - 268 , - 315 , - 238 , - 37 , - 208 , - 255 , - 178 , - 473 , - 148 , - 195 , - 118 , - 413 , - 88 , - 135 , - 58 , - 353 , - 28 , - 75 , - 494 , - 293 , - 464 , - 15 , - 434 , - 233 , - 404 , - 451 , - 374 , - 173 , - 344 , - 391 , - 314 , - 113 , - 284 , - 331 , - 254 , - 53 , - 224 , - 271 , - 194 , - 489 , - 164 , - 211 , - 134 , - 429 , - 104 , - 151 , - 74 , - 369 , - 44 , - 91 , - 14 , - 309 , - 480 , - 31 , - 450 , - 249 , - 420 , - 467 , - 390 , - 189 , - 360 , - 407 , - 330 , - 129 , - 300 , - 347 , - 270 , - 69 , - 240 , - 287 , - 210 , - 9 , - 180 , - 227 , - 150 , - 445 , - 120 , - 167 , - 90 , - 385 , - 60 , - 107 , - 30 , - 325 , - 0 , - 475 , - 278 , - 417 , - 388 , - 191 , - 330 , - 301 , - 104 , - 243 , - 214 , - 17 , - 156 , - 127 , - 434 , - 69 , - 40 , - 347 , - 486 , - 457 , - 260 , - 399 , - 370 , - 173 , - 312 , - 283 , - 86 , - 225 , - 196 , - 503 , - 138 , - 109 , - 416 , - 51 , - 22 , - 329 , - 468 , - 439 , - 242 , - 381 , - 352 , - 155 , - 294 , - 265 , - 68 , - 207 , - 178 , - 485 , - 120 , - 91 , - 398 , - 33 , - 4 , - 311 , - 450 , - 421 , - 224 , - 363 , - 334 , - 137 , - 276 , - 247 , - 50 , - 189 , - 160 , - 467 , - 102 , - 73 , - 380 , - 15 , - 490 , - 293 , - 432 , - 403 , - 206 , - 345 , - 316 , - 119 , - 258 , - 229 , - 32 , - 171 , - 142 , - 449 , - 84 , - 55 , - 362 , - 501 , - 472 , - 275 , - 414 , - 385 , - 188 , - 327 , - 298 , - 101 , - 240 , - 211 , - 14 , - 153 , - 124 , - 431 , - 66 , - 37 , - 344 , - 483 , - 454 , - 257 , - 396 , - 367 , - 170 , - 309 , - 280 , - 83 , - 222 , - 193 , - 500 , - 135 , - 106 , - 413 , - 48 , - 19 , - 326 , - 465 , - 436 , - 239 , - 378 , - 349 , - 152 , - 291 , - 262 , - 65 , - 204 , - 175 , - 482 , - 117 , - 88 , - 395 , - 30 , - 1 , - 308 , - 447 , - 418 , - 221 , - 360 , - 331 , - 134 , - 273 , - 244 , - 47 , - 186 , - 157 , - 464 , - 99 , - 70 , - 377 , - 12 , - 487 , - 290 , - 429 , - 400 , - 203 , - 342 , - 313 , - 116 , - 255 , - 226 , - 29 , - 168 , - 139 , - 446 , - 81 , - 52 , - 359 , - 498 , - 469 , - 272 , - 411 , - 382 , - 185 , - 324 , - 295 , - 98 , - 237 , - 208 , - 11 , - 150 , - 121 , - 428 , - 63 , - 34 , - 341 , - 480 , - 451 , - 254 , - 393 , - 364 , - 167 , - 306 , - 277 , - 80 , - 219 , - 190 , - 497 , - 132 , - 103 , - 410 , - 45 , - 16 , - 323 , - 462 , - 433 , - 236 , - 375 , - 346 , - 149 , - 288 , - 259 , - 62 , - 201 , - 172 , - 479 , - 114 , - 85 , - 392 , - 27 , - 502 , - 305 , - 444 , - 415 , - 218 , - 357 , - 328 , - 131 , - 270 , - 241 , - 44 , - 183 , - 154 , - 461 , - 96 , - 67 , - 374 , - 9 , - 484 , - 287 , - 426 , - 397 , - 200 , - 339 , - 310 , - 113 , - 252 , - 223 , - 26 , - 165 , - 136 , - 443 , - 78 , - 49 , - 356 , - 495 , - 466 , - 269 , - 408 , - 379 , - 182 , - 321 , - 292 , - 95 , - 234 , - 205 , - 8 , - 147 , - 118 , - 425 , - 60 , - 31 , - 338 , - 477 , - 448 , - 251 , - 390 , - 361 , - 164 , - 303 , - 274 , - 77 , - 216 , - 187 , - 494 , - 129 , - 100 , - 407 , - 42 , - 13 , - 320 , - 459 , - 430 , - 233 , - 372 , - 343 , - 146 , - 285 , - 256 , - 59 , - 198 , - 169 , - 476 , - 111 , - 82 , - 389 , - 24 , - 499 , - 302 , - 441 , - 412 , - 215 , - 354 , - 325 , - 128 , - 267 , - 238 , - 41 , - 180 , - 151 , - 458 , - 93 , - 64 , - 371 , - 6 , - 481 , - 284 , - 423 , - 394 , - 197 , - 336 , - 307 , - 110 , - 249 , - 220 , - 23 , - 162 , - 133 , - 440 , - 75 , - 46 , - 353 , - 492 , - 463 , - 266 , - 405 , - 376 , - 179 , - 318 , - 289 , - 92 , - 231 , - 202 , - 5 , - 144 , - 115 , - 422 , - 57 , - 28 , - 335 , - 474 , - 445 , - 248 , - 387 , - 358 , - 161 , - 300 , - 271 , - 74 , - 213 , - 184 , - 491 , - 126 , - 97 , - 404 , - 39 , - 10 , - 317 , - 456 , - 427 , - 230 , - 369 , - 340 , - 143 , - 282 , - 253 , - 56 , - 195 , - 166 , - 473 , - 108 , - 79 , - 386 , - 21 , - 496 , - 299 , - 438 , - 409 , - 212 , - 351 , - 322 , - 125 , - 264 , - 235 , - 38 , - 177 , - 148 , - 455 , - 90 , - 61 , - 368 , - 3 , - 478 , - 281 , - 420 , - 391 , - 194 , - 333 , - 304 , - 107 , - 246 , - 217 , - 20 , - 159 , - 130 , - 437 , - 72 , - 43 , - 350 , - 489 , - 460 , - 263 , - 402 , - 373 , - 176 , - 315 , - 286 , - 89 , - 228 , - 199 , - 2 , - 141 , - 112 , - 419 , - 54 , - 25 , - 332 , - 471 , - 442 , - 245 , - 384 , - 355 , - 158 , - 297 , - 268 , - 71 , - 210 , - 181 , - 488 , - 123 , - 94 , - 401 , - 36 , - 7 , - 314 , - 453 , - 424 , - 227 , - 366 , - 337 , - 140 , - 279 , - 250 , - 53 , - 192 , - 163 , - 470 , - 105 , - 76 , - 383 , - 18 , - 493 , - 296 , - 435 , - 406 , - 209 , - 348 , - 319 , - 122 , - 261 , - 232 , - 35 , - 174 , - 145 , - 452 , - 87 , - 58 , - 365 , - 0 , - 31 , - 190 , - 477 , - 380 , - 411 , - 58 , - 345 , - 248 , - 279 , - 438 , - 213 , - 116 , - 147 , - 306 , - 81 , - 496 , - 15 , - 174 , - 461 , - 364 , - 395 , - 42 , - 329 , - 232 , - 263 , - 422 , - 197 , - 100 , - 131 , - 290 , - 65 , - 480 , - 511 , - 158 , - 445 , - 348 , - 379 , - 26 , - 313 , - 216 , - 247 , - 406 , - 181 , - 84 , - 115 , - 274 , - 49 , - 464 , - 495 , - 142 , - 429 , - 332 , - 363 , - 10 , - 297 , - 200 , - 231 , - 390 , - 165 , - 68 , - 99 , - 258 , - 33 , - 448 , - 479 , - 126 , - 413 , - 316 , - 347 , - 506 , - 281 , - 184 , - 215 , - 374 , - 149 , - 52 , - 83 , - 242 , - 17 , - 432 , - 463 , - 110 , - 397 , - 300 , - 331 , - 490 , - 265 , - 168 , - 199 , - 358 , - 133 , - 36 , - 67 , - 226 , - 1 , - 416 , - 447 , - 94 , - 381 , - 284 , - 315 , - 474 , - 249 , - 152 , - 183 , - 342 , - 117 , - 20 , - 51 , - 210 , - 497 , - 400 , - 431 , - 78 , - 365 , - 268 , - 299 , - 458 , - 233 , - 136 , - 167 , - 326 , - 101 , - 4 , - 35 , - 194 , - 481 , - 384 , - 415 , - 62 , - 349 , - 252 , - 283 , - 442 , - 217 , - 120 , - 151 , - 310 , - 85 , - 500 , - 19 , - 178 , - 465 , - 368 , - 399 , - 46 , - 333 , - 236 , - 267 , - 426 , - 201 , - 104 , - 135 , - 294 , - 69 , - 484 , - 3 , - 162 , - 449 , - 352 , - 383 , - 30 , - 317 , - 220 , - 251 , - 410 , - 185 , - 88 , - 119 , - 278 , - 53 , - 468 , - 499 , - 146 , - 433 , - 336 , - 367 , - 14 , - 301 , - 204 , - 235 , - 394 , - 169 , - 72 , - 103 , - 262 , - 37 , - 452 , - 483 , - 130 , - 417 , - 320 , - 351 , - 510 , - 285 , - 188 , - 219 , - 378 , - 153 , - 56 , - 87 , - 246 , - 21 , - 436 , - 467 , - 114 , - 401 , - 304 , - 335 , - 494 , - 269 , - 172 , - 203 , - 362 , - 137 , - 40 , - 71 , - 230 , - 5 , - 420 , - 451 , - 98 , - 385 , - 288 , - 319 , - 478 , - 253 , - 156 , - 187 , - 346 , - 121 , - 24 , - 55 , - 214 , - 501 , - 404 , - 435 , - 82 , - 369 , - 272 , - 303 , - 462 , - 237 , - 140 , - 171 , - 330 , - 105 , - 8 , - 39 , - 198 , - 485 , - 388 , - 419 , - 66 , - 353 , - 256 , - 287 , - 446 , - 221 , - 124 , - 155 , - 314 , - 89 , - 504 , - 23 , - 182 , - 469 , - 372 , - 403 , - 50 , - 337 , - 240 , - 271 , - 430 , - 205 , - 108 , - 139 , - 298 , - 73 , - 488 , - 7 , - 166 , - 453 , - 356 , - 387 , - 34 , - 321 , - 224 , - 255 , - 414 , - 189 , - 92 , - 123 , - 282 , - 57 , - 472 , - 503 , - 150 , - 437 , - 340 , - 371 , - 18 , - 305 , - 208 , - 239 , - 398 , - 173 , - 76 , - 107 , - 266 , - 41 , - 456 , - 487 , - 134 , - 421 , - 324 , - 355 , - 2 , - 289 , - 192 , - 223 , - 382 , - 157 , - 60 , - 91 , - 250 , - 25 , - 440 , - 471 , - 118 , - 405 , - 308 , - 339 , - 498 , - 273 , - 176 , - 207 , - 366 , - 141 , - 44 , - 75 , - 234 , - 9 , - 424 , - 455 , - 102 , - 389 , - 292 , - 323 , - 482 , - 257 , - 160 , - 191 , - 350 , - 125 , - 28 , - 59 , - 218 , - 505 , - 408 , - 439 , - 86 , - 373 , - 276 , - 307 , - 466 , - 241 , - 144 , - 175 , - 334 , - 109 , - 12 , - 43 , - 202 , - 489 , - 392 , - 423 , - 70 , - 357 , - 260 , - 291 , - 450 , - 225 , - 128 , - 159 , - 318 , - 93 , - 508 , - 27 , - 186 , - 473 , - 376 , - 407 , - 54 , - 341 , - 244 , - 275 , - 434 , - 209 , - 112 , - 143 , - 302 , - 77 , - 492 , - 11 , - 170 , - 457 , - 360 , - 391 , - 38 , - 325 , - 228 , - 259 , - 418 , - 193 , - 96 , - 127 , - 286 , - 61 , - 476 , - 507 , - 154 , - 441 , - 344 , - 375 , - 22 , - 309 , - 212 , - 243 , - 402 , - 177 , - 80 , - 111 , - 270 , - 45 , - 460 , - 491 , - 138 , - 425 , - 328 , - 359 , - 6 , - 293 , - 196 , - 227 , - 386 , - 161 , - 64 , - 95 , - 254 , - 29 , - 444 , - 475 , - 122 , - 409 , - 312 , - 343 , - 502 , - 277 , - 180 , - 211 , - 370 , - 145 , - 48 , - 79 , - 238 , - 13 , - 428 , - 459 , - 106 , - 393 , - 296 , - 327 , - 486 , - 261 , - 164 , - 195 , - 354 , - 129 , - 32 , - 63 , - 222 , - 509 , - 412 , - 443 , - 90 , - 377 , - 280 , - 311 , - 470 , - 245 , - 148 , - 179 , - 338 , - 113 , - 16 , - 47 , - 206 , - 493 , - 396 , - 427 , - 74 , - 361 , - 264 , - 295 , - 454 , - 229 , - 132 , - 163 , - 322 , - 97 , - 0 , - 431 , - 202 , - 369 , - 404 , - 307 , - 78 , - 245 , - 280 , - 183 , - 482 , - 121 , - 156 , - 59 , - 358 , - 525 , - 32 , - 463 , - 234 , - 401 , - 436 , - 339 , - 110 , - 277 , - 312 , - 215 , - 514 , - 153 , - 188 , - 91 , - 390 , - 29 , - 64 , - 495 , - 266 , - 433 , - 468 , - 371 , - 142 , - 309 , - 344 , - 247 , - 18 , - 185 , - 220 , - 123 , - 422 , - 61 , - 96 , - 527 , - 298 , - 465 , - 500 , - 403 , - 174 , - 341 , - 376 , - 279 , - 50 , - 217 , - 252 , - 155 , - 454 , - 93 , - 128 , - 31 , - 330 , - 497 , - 4 , - 435 , - 206 , - 373 , - 408 , - 311 , - 82 , - 249 , - 284 , - 187 , - 486 , - 125 , - 160 , - 63 , - 362 , - 1 , - 36 , - 467 , - 238 , - 405 , - 440 , - 343 , - 114 , - 281 , - 316 , - 219 , - 518 , - 157 , - 192 , - 95 , - 394 , - 33 , - 68 , - 499 , - 270 , - 437 , - 472 , - 375 , - 146 , - 313 , - 348 , - 251 , - 22 , - 189 , - 224 , - 127 , - 426 , - 65 , - 100 , - 3 , - 302 , - 469 , - 504 , - 407 , - 178 , - 345 , - 380 , - 283 , - 54 , - 221 , - 256 , - 159 , - 458 , - 97 , - 132 , - 35 , - 334 , - 501 , - 8 , - 439 , - 210 , - 377 , - 412 , - 315 , - 86 , - 253 , - 288 , - 191 , - 490 , - 129 , - 164 , - 67 , - 366 , - 5 , - 40 , - 471 , - 242 , - 409 , - 444 , - 347 , - 118 , - 285 , - 320 , - 223 , - 522 , - 161 , - 196 , - 99 , - 398 , - 37 , - 72 , - 503 , - 274 , - 441 , - 476 , - 379 , - 150 , - 317 , - 352 , - 255 , - 26 , - 193 , - 228 , - 131 , - 430 , - 69 , - 104 , - 7 , - 306 , - 473 , - 508 , - 411 , - 182 , - 349 , - 384 , - 287 , - 58 , - 225 , - 260 , - 163 , - 462 , - 101 , - 136 , - 39 , - 338 , - 505 , - 12 , - 443 , - 214 , - 381 , - 416 , - 319 , - 90 , - 257 , - 292 , - 195 , - 494 , - 133 , - 168 , - 71 , - 370 , - 9 , - 44 , - 475 , - 246 , - 413 , - 448 , - 351 , - 122 , - 289 , - 324 , - 227 , - 526 , - 165 , - 200 , - 103 , - 402 , - 41 , - 76 , - 507 , - 278 , - 445 , - 480 , - 383 , - 154 , - 321 , - 356 , - 259 , - 30 , - 197 , - 232 , - 135 , - 434 , - 73 , - 108 , - 11 , - 310 , - 477 , - 512 , - 415 , - 186 , - 353 , - 388 , - 291 , - 62 , - 229 , - 264 , - 167 , - 466 , - 105 , - 140 , - 43 , - 342 , - 509 , - 16 , - 447 , - 218 , - 385 , - 420 , - 323 , - 94 , - 261 , - 296 , - 199 , - 498 , - 137 , - 172 , - 75 , - 374 , - 13 , - 48 , - 479 , - 250 , - 417 , - 452 , - 355 , - 126 , - 293 , - 328 , - 231 , - 2 , - 169 , - 204 , - 107 , - 406 , - 45 , - 80 , - 511 , - 282 , - 449 , - 484 , - 387 , - 158 , - 325 , - 360 , - 263 , - 34 , - 201 , - 236 , - 139 , - 438 , - 77 , - 112 , - 15 , - 314 , - 481 , - 516 , - 419 , - 190 , - 357 , - 392 , - 295 , - 66 , - 233 , - 268 , - 171 , - 470 , - 109 , - 144 , - 47 , - 346 , - 513 , - 20 , - 451 , - 222 , - 389 , - 424 , - 327 , - 98 , - 265 , - 300 , - 203 , - 502 , - 141 , - 176 , - 79 , - 378 , - 17 , - 52 , - 483 , - 254 , - 421 , - 456 , - 359 , - 130 , - 297 , - 332 , - 235 , - 6 , - 173 , - 208 , - 111 , - 410 , - 49 , - 84 , - 515 , - 286 , - 453 , - 488 , - 391 , - 162 , - 329 , - 364 , - 267 , - 38 , - 205 , - 240 , - 143 , - 442 , - 81 , - 116 , - 19 , - 318 , - 485 , - 520 , - 423 , - 194 , - 361 , - 396 , - 299 , - 70 , - 237 , - 272 , - 175 , - 474 , - 113 , - 148 , - 51 , - 350 , - 517 , - 24 , - 455 , - 226 , - 393 , - 428 , - 331 , - 102 , - 269 , - 304 , - 207 , - 506 , - 145 , - 180 , - 83 , - 382 , - 21 , - 56 , - 487 , - 258 , - 425 , - 460 , - 363 , - 134 , - 301 , - 336 , - 239 , - 10 , - 177 , - 212 , - 115 , - 414 , - 53 , - 88 , - 519 , - 290 , - 457 , - 492 , - 395 , - 166 , - 333 , - 368 , - 271 , - 42 , - 209 , - 244 , - 147 , - 446 , - 85 , - 120 , - 23 , - 322 , - 489 , - 524 , - 427 , - 198 , - 365 , - 400 , - 303 , - 74 , - 241 , - 276 , - 179 , - 478 , - 117 , - 152 , - 55 , - 354 , - 521 , - 28 , - 459 , - 230 , - 397 , - 432 , - 335 , - 106 , - 273 , - 308 , - 211 , - 510 , - 149 , - 184 , - 87 , - 386 , - 25 , - 60 , - 491 , - 262 , - 429 , - 464 , - 367 , - 138 , - 305 , - 340 , - 243 , - 14 , - 181 , - 216 , - 119 , - 418 , - 57 , - 92 , - 523 , - 294 , - 461 , - 496 , - 399 , - 170 , - 337 , - 372 , - 275 , - 46 , - 213 , - 248 , - 151 , - 450 , - 89 , - 124 , - 27 , - 326 , - 493 , - 0 , - 511 , - 70 , - 309 , - 140 , - 107 , - 210 , - 449 , - 280 , - 247 , - 350 , - 45 , - 420 , - 387 , - 490 , - 185 , - 16 , - 527 , - 86 , - 325 , - 156 , - 123 , - 226 , - 465 , - 296 , - 263 , - 366 , - 61 , - 436 , - 403 , - 506 , - 201 , - 32 , - 543 , - 102 , - 341 , - 172 , - 139 , - 242 , - 481 , - 312 , - 279 , - 382 , - 77 , - 452 , - 419 , - 522 , - 217 , - 48 , - 15 , - 118 , - 357 , - 188 , - 155 , - 258 , - 497 , - 328 , - 295 , - 398 , - 93 , - 468 , - 435 , - 538 , - 233 , - 64 , - 31 , - 134 , - 373 , - 204 , - 171 , - 274 , - 513 , - 344 , - 311 , - 414 , - 109 , - 484 , - 451 , - 10 , - 249 , - 80 , - 47 , - 150 , - 389 , - 220 , - 187 , - 290 , - 529 , - 360 , - 327 , - 430 , - 125 , - 500 , - 467 , - 26 , - 265 , - 96 , - 63 , - 166 , - 405 , - 236 , - 203 , - 306 , - 1 , - 376 , - 343 , - 446 , - 141 , - 516 , - 483 , - 42 , - 281 , - 112 , - 79 , - 182 , - 421 , - 252 , - 219 , - 322 , - 17 , - 392 , - 359 , - 462 , - 157 , - 532 , - 499 , - 58 , - 297 , - 128 , - 95 , - 198 , - 437 , - 268 , - 235 , - 338 , - 33 , - 408 , - 375 , - 478 , - 173 , - 4 , - 515 , - 74 , - 313 , - 144 , - 111 , - 214 , - 453 , - 284 , - 251 , - 354 , - 49 , - 424 , - 391 , - 494 , - 189 , - 20 , - 531 , - 90 , - 329 , - 160 , - 127 , - 230 , - 469 , - 300 , - 267 , - 370 , - 65 , - 440 , - 407 , - 510 , - 205 , - 36 , - 3 , - 106 , - 345 , - 176 , - 143 , - 246 , - 485 , - 316 , - 283 , - 386 , - 81 , - 456 , - 423 , - 526 , - 221 , - 52 , - 19 , - 122 , - 361 , - 192 , - 159 , - 262 , - 501 , - 332 , - 299 , - 402 , - 97 , - 472 , - 439 , - 542 , - 237 , - 68 , - 35 , - 138 , - 377 , - 208 , - 175 , - 278 , - 517 , - 348 , - 315 , - 418 , - 113 , - 488 , - 455 , - 14 , - 253 , - 84 , - 51 , - 154 , - 393 , - 224 , - 191 , - 294 , - 533 , - 364 , - 331 , - 434 , - 129 , - 504 , - 471 , - 30 , - 269 , - 100 , - 67 , - 170 , - 409 , - 240 , - 207 , - 310 , - 5 , - 380 , - 347 , - 450 , - 145 , - 520 , - 487 , - 46 , - 285 , - 116 , - 83 , - 186 , - 425 , - 256 , - 223 , - 326 , - 21 , - 396 , - 363 , - 466 , - 161 , - 536 , - 503 , - 62 , - 301 , - 132 , - 99 , - 202 , - 441 , - 272 , - 239 , - 342 , - 37 , - 412 , - 379 , - 482 , - 177 , - 8 , - 519 , - 78 , - 317 , - 148 , - 115 , - 218 , - 457 , - 288 , - 255 , - 358 , - 53 , - 428 , - 395 , - 498 , - 193 , - 24 , - 535 , - 94 , - 333 , - 164 , - 131 , - 234 , - 473 , - 304 , - 271 , - 374 , - 69 , - 444 , - 411 , - 514 , - 209 , - 40 , - 7 , - 110 , - 349 , - 180 , - 147 , - 250 , - 489 , - 320 , - 287 , - 390 , - 85 , - 460 , - 427 , - 530 , - 225 , - 56 , - 23 , - 126 , - 365 , - 196 , - 163 , - 266 , - 505 , - 336 , - 303 , - 406 , - 101 , - 476 , - 443 , - 2 , - 241 , - 72 , - 39 , - 142 , - 381 , - 212 , - 179 , - 282 , - 521 , - 352 , - 319 , - 422 , - 117 , - 492 , - 459 , - 18 , - 257 , - 88 , - 55 , - 158 , - 397 , - 228 , - 195 , - 298 , - 537 , - 368 , - 335 , - 438 , - 133 , - 508 , - 475 , - 34 , - 273 , - 104 , - 71 , - 174 , - 413 , - 244 , - 211 , - 314 , - 9 , - 384 , - 351 , - 454 , - 149 , - 524 , - 491 , - 50 , - 289 , - 120 , - 87 , - 190 , - 429 , - 260 , - 227 , - 330 , - 25 , - 400 , - 367 , - 470 , - 165 , - 540 , - 507 , - 66 , - 305 , - 136 , - 103 , - 206 , - 445 , - 276 , - 243 , - 346 , - 41 , - 416 , - 383 , - 486 , - 181 , - 12 , - 523 , - 82 , - 321 , - 152 , - 119 , - 222 , - 461 , - 292 , - 259 , - 362 , - 57 , - 432 , - 399 , - 502 , - 197 , - 28 , - 539 , - 98 , - 337 , - 168 , - 135 , - 238 , - 477 , - 308 , - 275 , - 378 , - 73 , - 448 , - 415 , - 518 , - 213 , - 44 , - 11 , - 114 , - 353 , - 184 , - 151 , - 254 , - 493 , - 324 , - 291 , - 394 , - 89 , - 464 , - 431 , - 534 , - 229 , - 60 , - 27 , - 130 , - 369 , - 200 , - 167 , - 270 , - 509 , - 340 , - 307 , - 410 , - 105 , - 480 , - 447 , - 6 , - 245 , - 76 , - 43 , - 146 , - 385 , - 216 , - 183 , - 286 , - 525 , - 356 , - 323 , - 426 , - 121 , - 496 , - 463 , - 22 , - 261 , - 92 , - 59 , - 162 , - 401 , - 232 , - 199 , - 302 , - 541 , - 372 , - 339 , - 442 , - 137 , - 512 , - 479 , - 38 , - 277 , - 108 , - 75 , - 178 , - 417 , - 248 , - 215 , - 318 , - 13 , - 388 , - 355 , - 458 , - 153 , - 528 , - 495 , - 54 , - 293 , - 124 , - 91 , - 194 , - 433 , - 264 , - 231 , - 334 , - 29 , - 404 , - 371 , - 474 , - 169 , - 0 , - 383 , - 486 , - 309 , - 412 , - 235 , - 338 , - 161 , - 264 , - 87 , - 190 , - 13 , - 116 , - 499 , - 42 , - 425 , - 528 , - 351 , - 454 , - 277 , - 380 , - 203 , - 306 , - 129 , - 232 , - 55 , - 158 , - 541 , - 84 , - 467 , - 10 , - 393 , - 496 , - 319 , - 422 , - 245 , - 348 , - 171 , - 274 , - 97 , - 200 , - 23 , - 126 , - 509 , - 52 , - 435 , - 538 , - 361 , - 464 , - 287 , - 390 , - 213 , - 316 , - 139 , - 242 , - 65 , - 168 , - 551 , - 94 , - 477 , - 20 , - 403 , - 506 , - 329 , - 432 , - 255 , - 358 , - 181 , - 284 , - 107 , - 210 , - 33 , - 136 , - 519 , - 62 , - 445 , - 548 , - 371 , - 474 , - 297 , - 400 , - 223 , - 326 , - 149 , - 252 , - 75 , - 178 , - 1 , - 104 , - 487 , - 30 , - 413 , - 516 , - 339 , - 442 , - 265 , - 368 , - 191 , - 294 , - 117 , - 220 , - 43 , - 146 , - 529 , - 72 , - 455 , - 558 , - 381 , - 484 , - 307 , - 410 , - 233 , - 336 , - 159 , - 262 , - 85 , - 188 , - 11 , - 114 , - 497 , - 40 , - 423 , - 526 , - 349 , - 452 , - 275 , - 378 , - 201 , - 304 , - 127 , - 230 , - 53 , - 156 , - 539 , - 82 , - 465 , - 8 , - 391 , - 494 , - 317 , - 420 , - 243 , - 346 , - 169 , - 272 , - 95 , - 198 , - 21 , - 124 , - 507 , - 50 , - 433 , - 536 , - 359 , - 462 , - 285 , - 388 , - 211 , - 314 , - 137 , - 240 , - 63 , - 166 , - 549 , - 92 , - 475 , - 18 , - 401 , - 504 , - 327 , - 430 , - 253 , - 356 , - 179 , - 282 , - 105 , - 208 , - 31 , - 134 , - 517 , - 60 , - 443 , - 546 , - 369 , - 472 , - 295 , - 398 , - 221 , - 324 , - 147 , - 250 , - 73 , - 176 , - 559 , - 102 , - 485 , - 28 , - 411 , - 514 , - 337 , - 440 , - 263 , - 366 , - 189 , - 292 , - 115 , - 218 , - 41 , - 144 , - 527 , - 70 , - 453 , - 556 , - 379 , - 482 , - 305 , - 408 , - 231 , - 334 , - 157 , - 260 , - 83 , - 186 , - 9 , - 112 , - 495 , - 38 , - 421 , - 524 , - 347 , - 450 , - 273 , - 376 , - 199 , - 302 , - 125 , - 228 , - 51 , - 154 , - 537 , - 80 , - 463 , - 6 , - 389 , - 492 , - 315 , - 418 , - 241 , - 344 , - 167 , - 270 , - 93 , - 196 , - 19 , - 122 , - 505 , - 48 , - 431 , - 534 , - 357 , - 460 , - 283 , - 386 , - 209 , - 312 , - 135 , - 238 , - 61 , - 164 , - 547 , - 90 , - 473 , - 16 , - 399 , - 502 , - 325 , - 428 , - 251 , - 354 , - 177 , - 280 , - 103 , - 206 , - 29 , - 132 , - 515 , - 58 , - 441 , - 544 , - 367 , - 470 , - 293 , - 396 , - 219 , - 322 , - 145 , - 248 , - 71 , - 174 , - 557 , - 100 , - 483 , - 26 , - 409 , - 512 , - 335 , - 438 , - 261 , - 364 , - 187 , - 290 , - 113 , - 216 , - 39 , - 142 , - 525 , - 68 , - 451 , - 554 , - 377 , - 480 , - 303 , - 406 , - 229 , - 332 , - 155 , - 258 , - 81 , - 184 , - 7 , - 110 , - 493 , - 36 , - 419 , - 522 , - 345 , - 448 , - 271 , - 374 , - 197 , - 300 , - 123 , - 226 , - 49 , - 152 , - 535 , - 78 , - 461 , - 4 , - 387 , - 490 , - 313 , - 416 , - 239 , - 342 , - 165 , - 268 , - 91 , - 194 , - 17 , - 120 , - 503 , - 46 , - 429 , - 532 , - 355 , - 458 , - 281 , - 384 , - 207 , - 310 , - 133 , - 236 , - 59 , - 162 , - 545 , - 88 , - 471 , - 14 , - 397 , - 500 , - 323 , - 426 , - 249 , - 352 , - 175 , - 278 , - 101 , - 204 , - 27 , - 130 , - 513 , - 56 , - 439 , - 542 , - 365 , - 468 , - 291 , - 394 , - 217 , - 320 , - 143 , - 246 , - 69 , - 172 , - 555 , - 98 , - 481 , - 24 , - 407 , - 510 , - 333 , - 436 , - 259 , - 362 , - 185 , - 288 , - 111 , - 214 , - 37 , - 140 , - 523 , - 66 , - 449 , - 552 , - 375 , - 478 , - 301 , - 404 , - 227 , - 330 , - 153 , - 256 , - 79 , - 182 , - 5 , - 108 , - 491 , - 34 , - 417 , - 520 , - 343 , - 446 , - 269 , - 372 , - 195 , - 298 , - 121 , - 224 , - 47 , - 150 , - 533 , - 76 , - 459 , - 2 , - 385 , - 488 , - 311 , - 414 , - 237 , - 340 , - 163 , - 266 , - 89 , - 192 , - 15 , - 118 , - 501 , - 44 , - 427 , - 530 , - 353 , - 456 , - 279 , - 382 , - 205 , - 308 , - 131 , - 234 , - 57 , - 160 , - 543 , - 86 , - 469 , - 12 , - 395 , - 498 , - 321 , - 424 , - 247 , - 350 , - 173 , - 276 , - 99 , - 202 , - 25 , - 128 , - 511 , - 54 , - 437 , - 540 , - 363 , - 466 , - 289 , - 392 , - 215 , - 318 , - 141 , - 244 , - 67 , - 170 , - 553 , - 96 , - 479 , - 22 , - 405 , - 508 , - 331 , - 434 , - 257 , - 360 , - 183 , - 286 , - 109 , - 212 , - 35 , - 138 , - 521 , - 64 , - 447 , - 550 , - 373 , - 476 , - 299 , - 402 , - 225 , - 328 , - 151 , - 254 , - 77 , - 180 , - 3 , - 106 , - 489 , - 32 , - 415 , - 518 , - 341 , - 444 , - 267 , - 370 , - 193 , - 296 , - 119 , - 222 , - 45 , - 148 , - 531 , - 74 , - 457 , - 0 , - 353 , - 322 , - 483 , - 260 , - 229 , - 390 , - 167 , - 136 , - 297 , - 74 , - 43 , - 204 , - 557 , - 526 , - 111 , - 464 , - 433 , - 18 , - 371 , - 340 , - 501 , - 278 , - 247 , - 408 , - 185 , - 154 , - 315 , - 92 , - 61 , - 222 , - 575 , - 544 , - 129 , - 482 , - 451 , - 36 , - 389 , - 358 , - 519 , - 296 , - 265 , - 426 , - 203 , - 172 , - 333 , - 110 , - 79 , - 240 , - 17 , - 562 , - 147 , - 500 , - 469 , - 54 , - 407 , - 376 , - 537 , - 314 , - 283 , - 444 , - 221 , - 190 , - 351 , - 128 , - 97 , - 258 , - 35 , - 4 , - 165 , - 518 , - 487 , - 72 , - 425 , - 394 , - 555 , - 332 , - 301 , - 462 , - 239 , - 208 , - 369 , - 146 , - 115 , - 276 , - 53 , - 22 , - 183 , - 536 , - 505 , - 90 , - 443 , - 412 , - 573 , - 350 , - 319 , - 480 , - 257 , - 226 , - 387 , - 164 , - 133 , - 294 , - 71 , - 40 , - 201 , - 554 , - 523 , - 108 , - 461 , - 430 , - 15 , - 368 , - 337 , - 498 , - 275 , - 244 , - 405 , - 182 , - 151 , - 312 , - 89 , - 58 , - 219 , - 572 , - 541 , - 126 , - 479 , - 448 , - 33 , - 386 , - 355 , - 516 , - 293 , - 262 , - 423 , - 200 , - 169 , - 330 , - 107 , - 76 , - 237 , - 14 , - 559 , - 144 , - 497 , - 466 , - 51 , - 404 , - 373 , - 534 , - 311 , - 280 , - 441 , - 218 , - 187 , - 348 , - 125 , - 94 , - 255 , - 32 , - 1 , - 162 , - 515 , - 484 , - 69 , - 422 , - 391 , - 552 , - 329 , - 298 , - 459 , - 236 , - 205 , - 366 , - 143 , - 112 , - 273 , - 50 , - 19 , - 180 , - 533 , - 502 , - 87 , - 440 , - 409 , - 570 , - 347 , - 316 , - 477 , - 254 , - 223 , - 384 , - 161 , - 130 , - 291 , - 68 , - 37 , - 198 , - 551 , - 520 , - 105 , - 458 , - 427 , - 12 , - 365 , - 334 , - 495 , - 272 , - 241 , - 402 , - 179 , - 148 , - 309 , - 86 , - 55 , - 216 , - 569 , - 538 , - 123 , - 476 , - 445 , - 30 , - 383 , - 352 , - 513 , - 290 , - 259 , - 420 , - 197 , - 166 , - 327 , - 104 , - 73 , - 234 , - 11 , - 556 , - 141 , - 494 , - 463 , - 48 , - 401 , - 370 , - 531 , - 308 , - 277 , - 438 , - 215 , - 184 , - 345 , - 122 , - 91 , - 252 , - 29 , - 574 , - 159 , - 512 , - 481 , - 66 , - 419 , - 388 , - 549 , - 326 , - 295 , - 456 , - 233 , - 202 , - 363 , - 140 , - 109 , - 270 , - 47 , - 16 , - 177 , - 530 , - 499 , - 84 , - 437 , - 406 , - 567 , - 344 , - 313 , - 474 , - 251 , - 220 , - 381 , - 158 , - 127 , - 288 , - 65 , - 34 , - 195 , - 548 , - 517 , - 102 , - 455 , - 424 , - 9 , - 362 , - 331 , - 492 , - 269 , - 238 , - 399 , - 176 , - 145 , - 306 , - 83 , - 52 , - 213 , - 566 , - 535 , - 120 , - 473 , - 442 , - 27 , - 380 , - 349 , - 510 , - 287 , - 256 , - 417 , - 194 , - 163 , - 324 , - 101 , - 70 , - 231 , - 8 , - 553 , - 138 , - 491 , - 460 , - 45 , - 398 , - 367 , - 528 , - 305 , - 274 , - 435 , - 212 , - 181 , - 342 , - 119 , - 88 , - 249 , - 26 , - 571 , - 156 , - 509 , - 478 , - 63 , - 416 , - 385 , - 546 , - 323 , - 292 , - 453 , - 230 , - 199 , - 360 , - 137 , - 106 , - 267 , - 44 , - 13 , - 174 , - 527 , - 496 , - 81 , - 434 , - 403 , - 564 , - 341 , - 310 , - 471 , - 248 , - 217 , - 378 , - 155 , - 124 , - 285 , - 62 , - 31 , - 192 , - 545 , - 514 , - 99 , - 452 , - 421 , - 6 , - 359 , - 328 , - 489 , - 266 , - 235 , - 396 , - 173 , - 142 , - 303 , - 80 , - 49 , - 210 , - 563 , - 532 , - 117 , - 470 , - 439 , - 24 , - 377 , - 346 , - 507 , - 284 , - 253 , - 414 , - 191 , - 160 , - 321 , - 98 , - 67 , - 228 , - 5 , - 550 , - 135 , - 488 , - 457 , - 42 , - 395 , - 364 , - 525 , - 302 , - 271 , - 432 , - 209 , - 178 , - 339 , - 116 , - 85 , - 246 , - 23 , - 568 , - 153 , - 506 , - 475 , - 60 , - 413 , - 382 , - 543 , - 320 , - 289 , - 450 , - 227 , - 196 , - 357 , - 134 , - 103 , - 264 , - 41 , - 10 , - 171 , - 524 , - 493 , - 78 , - 431 , - 400 , - 561 , - 338 , - 307 , - 468 , - 245 , - 214 , - 375 , - 152 , - 121 , - 282 , - 59 , - 28 , - 189 , - 542 , - 511 , - 96 , - 449 , - 418 , - 3 , - 356 , - 325 , - 486 , - 263 , - 232 , - 393 , - 170 , - 139 , - 300 , - 77 , - 46 , - 207 , - 560 , - 529 , - 114 , - 467 , - 436 , - 21 , - 374 , - 343 , - 504 , - 281 , - 250 , - 411 , - 188 , - 157 , - 318 , - 95 , - 64 , - 225 , - 2 , - 547 , - 132 , - 485 , - 454 , - 39 , - 392 , - 361 , - 522 , - 299 , - 268 , - 429 , - 206 , - 175 , - 336 , - 113 , - 82 , - 243 , - 20 , - 565 , - 150 , - 503 , - 472 , - 57 , - 410 , - 379 , - 540 , - 317 , - 286 , - 447 , - 224 , - 193 , - 354 , - 131 , - 100 , - 261 , - 38 , - 7 , - 168 , - 521 , - 490 , - 75 , - 428 , - 397 , - 558 , - 335 , - 304 , - 465 , - 242 , - 211 , - 372 , - 149 , - 118 , - 279 , - 56 , - 25 , - 186 , - 539 , - 508 , - 93 , - 446 , - 415 , - 0 , - 557 , - 78 , - 339 , - 156 , - 121 , - 234 , - 495 , - 312 , - 277 , - 390 , - 59 , - 468 , - 433 , - 546 , - 215 , - 32 , - 589 , - 110 , - 371 , - 188 , - 153 , - 266 , - 527 , - 344 , - 309 , - 422 , - 91 , - 500 , - 465 , - 578 , - 247 , - 64 , - 29 , - 142 , - 403 , - 220 , - 185 , - 298 , - 559 , - 376 , - 341 , - 454 , - 123 , - 532 , - 497 , - 18 , - 279 , - 96 , - 61 , - 174 , - 435 , - 252 , - 217 , - 330 , - 591 , - 408 , - 373 , - 486 , - 155 , - 564 , - 529 , - 50 , - 311 , - 128 , - 93 , - 206 , - 467 , - 284 , - 249 , - 362 , - 31 , - 440 , - 405 , - 518 , - 187 , - 4 , - 561 , - 82 , - 343 , - 160 , - 125 , - 238 , - 499 , - 316 , - 281 , - 394 , - 63 , - 472 , - 437 , - 550 , - 219 , - 36 , - 1 , - 114 , - 375 , - 192 , - 157 , - 270 , - 531 , - 348 , - 313 , - 426 , - 95 , - 504 , - 469 , - 582 , - 251 , - 68 , - 33 , - 146 , - 407 , - 224 , - 189 , - 302 , - 563 , - 380 , - 345 , - 458 , - 127 , - 536 , - 501 , - 22 , - 283 , - 100 , - 65 , - 178 , - 439 , - 256 , - 221 , - 334 , - 3 , - 412 , - 377 , - 490 , - 159 , - 568 , - 533 , - 54 , - 315 , - 132 , - 97 , - 210 , - 471 , - 288 , - 253 , - 366 , - 35 , - 444 , - 409 , - 522 , - 191 , - 8 , - 565 , - 86 , - 347 , - 164 , - 129 , - 242 , - 503 , - 320 , - 285 , - 398 , - 67 , - 476 , - 441 , - 554 , - 223 , - 40 , - 5 , - 118 , - 379 , - 196 , - 161 , - 274 , - 535 , - 352 , - 317 , - 430 , - 99 , - 508 , - 473 , - 586 , - 255 , - 72 , - 37 , - 150 , - 411 , - 228 , - 193 , - 306 , - 567 , - 384 , - 349 , - 462 , - 131 , - 540 , - 505 , - 26 , - 287 , - 104 , - 69 , - 182 , - 443 , - 260 , - 225 , - 338 , - 7 , - 416 , - 381 , - 494 , - 163 , - 572 , - 537 , - 58 , - 319 , - 136 , - 101 , - 214 , - 475 , - 292 , - 257 , - 370 , - 39 , - 448 , - 413 , - 526 , - 195 , - 12 , - 569 , - 90 , - 351 , - 168 , - 133 , - 246 , - 507 , - 324 , - 289 , - 402 , - 71 , - 480 , - 445 , - 558 , - 227 , - 44 , - 9 , - 122 , - 383 , - 200 , - 165 , - 278 , - 539 , - 356 , - 321 , - 434 , - 103 , - 512 , - 477 , - 590 , - 259 , - 76 , - 41 , - 154 , - 415 , - 232 , - 197 , - 310 , - 571 , - 388 , - 353 , - 466 , - 135 , - 544 , - 509 , - 30 , - 291 , - 108 , - 73 , - 186 , - 447 , - 264 , - 229 , - 342 , - 11 , - 420 , - 385 , - 498 , - 167 , - 576 , - 541 , - 62 , - 323 , - 140 , - 105 , - 218 , - 479 , - 296 , - 261 , - 374 , - 43 , - 452 , - 417 , - 530 , - 199 , - 16 , - 573 , - 94 , - 355 , - 172 , - 137 , - 250 , - 511 , - 328 , - 293 , - 406 , - 75 , - 484 , - 449 , - 562 , - 231 , - 48 , - 13 , - 126 , - 387 , - 204 , - 169 , - 282 , - 543 , - 360 , - 325 , - 438 , - 107 , - 516 , - 481 , - 2 , - 263 , - 80 , - 45 , - 158 , - 419 , - 236 , - 201 , - 314 , - 575 , - 392 , - 357 , - 470 , - 139 , - 548 , - 513 , - 34 , - 295 , - 112 , - 77 , - 190 , - 451 , - 268 , - 233 , - 346 , - 15 , - 424 , - 389 , - 502 , - 171 , - 580 , - 545 , - 66 , - 327 , - 144 , - 109 , - 222 , - 483 , - 300 , - 265 , - 378 , - 47 , - 456 , - 421 , - 534 , - 203 , - 20 , - 577 , - 98 , - 359 , - 176 , - 141 , - 254 , - 515 , - 332 , - 297 , - 410 , - 79 , - 488 , - 453 , - 566 , - 235 , - 52 , - 17 , - 130 , - 391 , - 208 , - 173 , - 286 , - 547 , - 364 , - 329 , - 442 , - 111 , - 520 , - 485 , - 6 , - 267 , - 84 , - 49 , - 162 , - 423 , - 240 , - 205 , - 318 , - 579 , - 396 , - 361 , - 474 , - 143 , - 552 , - 517 , - 38 , - 299 , - 116 , - 81 , - 194 , - 455 , - 272 , - 237 , - 350 , - 19 , - 428 , - 393 , - 506 , - 175 , - 584 , - 549 , - 70 , - 331 , - 148 , - 113 , - 226 , - 487 , - 304 , - 269 , - 382 , - 51 , - 460 , - 425 , - 538 , - 207 , - 24 , - 581 , - 102 , - 363 , - 180 , - 145 , - 258 , - 519 , - 336 , - 301 , - 414 , - 83 , - 492 , - 457 , - 570 , - 239 , - 56 , - 21 , - 134 , - 395 , - 212 , - 177 , - 290 , - 551 , - 368 , - 333 , - 446 , - 115 , - 524 , - 489 , - 10 , - 271 , - 88 , - 53 , - 166 , - 427 , - 244 , - 209 , - 322 , - 583 , - 400 , - 365 , - 478 , - 147 , - 556 , - 521 , - 42 , - 303 , - 120 , - 85 , - 198 , - 459 , - 276 , - 241 , - 354 , - 23 , - 432 , - 397 , - 510 , - 179 , - 588 , - 553 , - 74 , - 335 , - 152 , - 117 , - 230 , - 491 , - 308 , - 273 , - 386 , - 55 , - 464 , - 429 , - 542 , - 211 , - 28 , - 585 , - 106 , - 367 , - 184 , - 149 , - 262 , - 523 , - 340 , - 305 , - 418 , - 87 , - 496 , - 461 , - 574 , - 243 , - 60 , - 25 , - 138 , - 399 , - 216 , - 181 , - 294 , - 555 , - 372 , - 337 , - 450 , - 119 , - 528 , - 493 , - 14 , - 275 , - 92 , - 57 , - 170 , - 431 , - 248 , - 213 , - 326 , - 587 , - 404 , - 369 , - 482 , - 151 , - 560 , - 525 , - 46 , - 307 , - 124 , - 89 , - 202 , - 463 , - 280 , - 245 , - 358 , - 27 , - 436 , - 401 , - 514 , - 183 , - 0 , - 113 , - 74 , - 491 , - 148 , - 261 , - 222 , - 31 , - 296 , - 409 , - 370 , - 179 , - 444 , - 557 , - 518 , - 327 , - 592 , - 97 , - 58 , - 475 , - 132 , - 245 , - 206 , - 15 , - 280 , - 393 , - 354 , - 163 , - 428 , - 541 , - 502 , - 311 , - 576 , - 81 , - 42 , - 459 , - 116 , - 229 , - 190 , - 607 , - 264 , - 377 , - 338 , - 147 , - 412 , - 525 , - 486 , - 295 , - 560 , - 65 , - 26 , - 443 , - 100 , - 213 , - 174 , - 591 , - 248 , - 361 , - 322 , - 131 , - 396 , - 509 , - 470 , - 279 , - 544 , - 49 , - 10 , - 427 , - 84 , - 197 , - 158 , - 575 , - 232 , - 345 , - 306 , - 115 , - 380 , - 493 , - 454 , - 263 , - 528 , - 33 , - 602 , - 411 , - 68 , - 181 , - 142 , - 559 , - 216 , - 329 , - 290 , - 99 , - 364 , - 477 , - 438 , - 247 , - 512 , - 17 , - 586 , - 395 , - 52 , - 165 , - 126 , - 543 , - 200 , - 313 , - 274 , - 83 , - 348 , - 461 , - 422 , - 231 , - 496 , - 1 , - 570 , - 379 , - 36 , - 149 , - 110 , - 527 , - 184 , - 297 , - 258 , - 67 , - 332 , - 445 , - 406 , - 215 , - 480 , - 593 , - 554 , - 363 , - 20 , - 133 , - 94 , - 511 , - 168 , - 281 , - 242 , - 51 , - 316 , - 429 , - 390 , - 199 , - 464 , - 577 , - 538 , - 347 , - 4 , - 117 , - 78 , - 495 , - 152 , - 265 , - 226 , - 35 , - 300 , - 413 , - 374 , - 183 , - 448 , - 561 , - 522 , - 331 , - 596 , - 101 , - 62 , - 479 , - 136 , - 249 , - 210 , - 19 , - 284 , - 397 , - 358 , - 167 , - 432 , - 545 , - 506 , - 315 , - 580 , - 85 , - 46 , - 463 , - 120 , - 233 , - 194 , - 3 , - 268 , - 381 , - 342 , - 151 , - 416 , - 529 , - 490 , - 299 , - 564 , - 69 , - 30 , - 447 , - 104 , - 217 , - 178 , - 595 , - 252 , - 365 , - 326 , - 135 , - 400 , - 513 , - 474 , - 283 , - 548 , - 53 , - 14 , - 431 , - 88 , - 201 , - 162 , - 579 , - 236 , - 349 , - 310 , - 119 , - 384 , - 497 , - 458 , - 267 , - 532 , - 37 , - 606 , - 415 , - 72 , - 185 , - 146 , - 563 , - 220 , - 333 , - 294 , - 103 , - 368 , - 481 , - 442 , - 251 , - 516 , - 21 , - 590 , - 399 , - 56 , - 169 , - 130 , - 547 , - 204 , - 317 , - 278 , - 87 , - 352 , - 465 , - 426 , - 235 , - 500 , - 5 , - 574 , - 383 , - 40 , - 153 , - 114 , - 531 , - 188 , - 301 , - 262 , - 71 , - 336 , - 449 , - 410 , - 219 , - 484 , - 597 , - 558 , - 367 , - 24 , - 137 , - 98 , - 515 , - 172 , - 285 , - 246 , - 55 , - 320 , - 433 , - 394 , - 203 , - 468 , - 581 , - 542 , - 351 , - 8 , - 121 , - 82 , - 499 , - 156 , - 269 , - 230 , - 39 , - 304 , - 417 , - 378 , - 187 , - 452 , - 565 , - 526 , - 335 , - 600 , - 105 , - 66 , - 483 , - 140 , - 253 , - 214 , - 23 , - 288 , - 401 , - 362 , - 171 , - 436 , - 549 , - 510 , - 319 , - 584 , - 89 , - 50 , - 467 , - 124 , - 237 , - 198 , - 7 , - 272 , - 385 , - 346 , - 155 , - 420 , - 533 , - 494 , - 303 , - 568 , - 73 , - 34 , - 451 , - 108 , - 221 , - 182 , - 599 , - 256 , - 369 , - 330 , - 139 , - 404 , - 517 , - 478 , - 287 , - 552 , - 57 , - 18 , - 435 , - 92 , - 205 , - 166 , - 583 , - 240 , - 353 , - 314 , - 123 , - 388 , - 501 , - 462 , - 271 , - 536 , - 41 , - 2 , - 419 , - 76 , - 189 , - 150 , - 567 , - 224 , - 337 , - 298 , - 107 , - 372 , - 485 , - 446 , - 255 , - 520 , - 25 , - 594 , - 403 , - 60 , - 173 , - 134 , - 551 , - 208 , - 321 , - 282 , - 91 , - 356 , - 469 , - 430 , - 239 , - 504 , - 9 , - 578 , - 387 , - 44 , - 157 , - 118 , - 535 , - 192 , - 305 , - 266 , - 75 , - 340 , - 453 , - 414 , - 223 , - 488 , - 601 , - 562 , - 371 , - 28 , - 141 , - 102 , - 519 , - 176 , - 289 , - 250 , - 59 , - 324 , - 437 , - 398 , - 207 , - 472 , - 585 , - 546 , - 355 , - 12 , - 125 , - 86 , - 503 , - 160 , - 273 , - 234 , - 43 , - 308 , - 421 , - 382 , - 191 , - 456 , - 569 , - 530 , - 339 , - 604 , - 109 , - 70 , - 487 , - 144 , - 257 , - 218 , - 27 , - 292 , - 405 , - 366 , - 175 , - 440 , - 553 , - 514 , - 323 , - 588 , - 93 , - 54 , - 471 , - 128 , - 241 , - 202 , - 11 , - 276 , - 389 , - 350 , - 159 , - 424 , - 537 , - 498 , - 307 , - 572 , - 77 , - 38 , - 455 , - 112 , - 225 , - 186 , - 603 , - 260 , - 373 , - 334 , - 143 , - 408 , - 521 , - 482 , - 291 , - 556 , - 61 , - 22 , - 439 , - 96 , - 209 , - 170 , - 587 , - 244 , - 357 , - 318 , - 127 , - 392 , - 505 , - 466 , - 275 , - 540 , - 45 , - 6 , - 423 , - 80 , - 193 , - 154 , - 571 , - 228 , - 341 , - 302 , - 111 , - 376 , - 489 , - 450 , - 259 , - 524 , - 29 , - 598 , - 407 , - 64 , - 177 , - 138 , - 555 , - 212 , - 325 , - 286 , - 95 , - 360 , - 473 , - 434 , - 243 , - 508 , - 13 , - 582 , - 391 , - 48 , - 161 , - 122 , - 539 , - 196 , - 309 , - 270 , - 79 , - 344 , - 457 , - 418 , - 227 , - 492 , - 605 , - 566 , - 375 , - 32 , - 145 , - 106 , - 523 , - 180 , - 293 , - 254 , - 63 , - 328 , - 441 , - 402 , - 211 , - 476 , - 589 , - 550 , - 359 , - 16 , - 129 , - 90 , - 507 , - 164 , - 277 , - 238 , - 47 , - 312 , - 425 , - 386 , - 195 , - 460 , - 573 , - 534 , - 343 , - 0 , - 527 , - 586 , - 177 , - 548 , - 451 , - 510 , - 101 , - 472 , - 375 , - 434 , - 25 , - 396 , - 299 , - 358 , - 573 , - 320 , - 223 , - 282 , - 497 , - 244 , - 147 , - 206 , - 421 , - 168 , - 71 , - 130 , - 345 , - 92 , - 619 , - 54 , - 269 , - 16 , - 543 , - 602 , - 193 , - 564 , - 467 , - 526 , - 117 , - 488 , - 391 , - 450 , - 41 , - 412 , - 315 , - 374 , - 589 , - 336 , - 239 , - 298 , - 513 , - 260 , - 163 , - 222 , - 437 , - 184 , - 87 , - 146 , - 361 , - 108 , - 11 , - 70 , - 285 , - 32 , - 559 , - 618 , - 209 , - 580 , - 483 , - 542 , - 133 , - 504 , - 407 , - 466 , - 57 , - 428 , - 331 , - 390 , - 605 , - 352 , - 255 , - 314 , - 529 , - 276 , - 179 , - 238 , - 453 , - 200 , - 103 , - 162 , - 377 , - 124 , - 27 , - 86 , - 301 , - 48 , - 575 , - 10 , - 225 , - 596 , - 499 , - 558 , - 149 , - 520 , - 423 , - 482 , - 73 , - 444 , - 347 , - 406 , - 621 , - 368 , - 271 , - 330 , - 545 , - 292 , - 195 , - 254 , - 469 , - 216 , - 119 , - 178 , - 393 , - 140 , - 43 , - 102 , - 317 , - 64 , - 591 , - 26 , - 241 , - 612 , - 515 , - 574 , - 165 , - 536 , - 439 , - 498 , - 89 , - 460 , - 363 , - 422 , - 13 , - 384 , - 287 , - 346 , - 561 , - 308 , - 211 , - 270 , - 485 , - 232 , - 135 , - 194 , - 409 , - 156 , - 59 , - 118 , - 333 , - 80 , - 607 , - 42 , - 257 , - 4 , - 531 , - 590 , - 181 , - 552 , - 455 , - 514 , - 105 , - 476 , - 379 , - 438 , - 29 , - 400 , - 303 , - 362 , - 577 , - 324 , - 227 , - 286 , - 501 , - 248 , - 151 , - 210 , - 425 , - 172 , - 75 , - 134 , - 349 , - 96 , - 623 , - 58 , - 273 , - 20 , - 547 , - 606 , - 197 , - 568 , - 471 , - 530 , - 121 , - 492 , - 395 , - 454 , - 45 , - 416 , - 319 , - 378 , - 593 , - 340 , - 243 , - 302 , - 517 , - 264 , - 167 , - 226 , - 441 , - 188 , - 91 , - 150 , - 365 , - 112 , - 15 , - 74 , - 289 , - 36 , - 563 , - 622 , - 213 , - 584 , - 487 , - 546 , - 137 , - 508 , - 411 , - 470 , - 61 , - 432 , - 335 , - 394 , - 609 , - 356 , - 259 , - 318 , - 533 , - 280 , - 183 , - 242 , - 457 , - 204 , - 107 , - 166 , - 381 , - 128 , - 31 , - 90 , - 305 , - 52 , - 579 , - 14 , - 229 , - 600 , - 503 , - 562 , - 153 , - 524 , - 427 , - 486 , - 77 , - 448 , - 351 , - 410 , - 1 , - 372 , - 275 , - 334 , - 549 , - 296 , - 199 , - 258 , - 473 , - 220 , - 123 , - 182 , - 397 , - 144 , - 47 , - 106 , - 321 , - 68 , - 595 , - 30 , - 245 , - 616 , - 519 , - 578 , - 169 , - 540 , - 443 , - 502 , - 93 , - 464 , - 367 , - 426 , - 17 , - 388 , - 291 , - 350 , - 565 , - 312 , - 215 , - 274 , - 489 , - 236 , - 139 , - 198 , - 413 , - 160 , - 63 , - 122 , - 337 , - 84 , - 611 , - 46 , - 261 , - 8 , - 535 , - 594 , - 185 , - 556 , - 459 , - 518 , - 109 , - 480 , - 383 , - 442 , - 33 , - 404 , - 307 , - 366 , - 581 , - 328 , - 231 , - 290 , - 505 , - 252 , - 155 , - 214 , - 429 , - 176 , - 79 , - 138 , - 353 , - 100 , - 3 , - 62 , - 277 , - 24 , - 551 , - 610 , - 201 , - 572 , - 475 , - 534 , - 125 , - 496 , - 399 , - 458 , - 49 , - 420 , - 323 , - 382 , - 597 , - 344 , - 247 , - 306 , - 521 , - 268 , - 171 , - 230 , - 445 , - 192 , - 95 , - 154 , - 369 , - 116 , - 19 , - 78 , - 293 , - 40 , - 567 , - 2 , - 217 , - 588 , - 491 , - 550 , - 141 , - 512 , - 415 , - 474 , - 65 , - 436 , - 339 , - 398 , - 613 , - 360 , - 263 , - 322 , - 537 , - 284 , - 187 , - 246 , - 461 , - 208 , - 111 , - 170 , - 385 , - 132 , - 35 , - 94 , - 309 , - 56 , - 583 , - 18 , - 233 , - 604 , - 507 , - 566 , - 157 , - 528 , - 431 , - 490 , - 81 , - 452 , - 355 , - 414 , - 5 , - 376 , - 279 , - 338 , - 553 , - 300 , - 203 , - 262 , - 477 , - 224 , - 127 , - 186 , - 401 , - 148 , - 51 , - 110 , - 325 , - 72 , - 599 , - 34 , - 249 , - 620 , - 523 , - 582 , - 173 , - 544 , - 447 , - 506 , - 97 , - 468 , - 371 , - 430 , - 21 , - 392 , - 295 , - 354 , - 569 , - 316 , - 219 , - 278 , - 493 , - 240 , - 143 , - 202 , - 417 , - 164 , - 67 , - 126 , - 341 , - 88 , - 615 , - 50 , - 265 , - 12 , - 539 , - 598 , - 189 , - 560 , - 463 , - 522 , - 113 , - 484 , - 387 , - 446 , - 37 , - 408 , - 311 , - 370 , - 585 , - 332 , - 235 , - 294 , - 509 , - 256 , - 159 , - 218 , - 433 , - 180 , - 83 , - 142 , - 357 , - 104 , - 7 , - 66 , - 281 , - 28 , - 555 , - 614 , - 205 , - 576 , - 479 , - 538 , - 129 , - 500 , - 403 , - 462 , - 53 , - 424 , - 327 , - 386 , - 601 , - 348 , - 251 , - 310 , - 525 , - 272 , - 175 , - 234 , - 449 , - 196 , - 99 , - 158 , - 373 , - 120 , - 23 , - 82 , - 297 , - 44 , - 571 , - 6 , - 221 , - 592 , - 495 , - 554 , - 145 , - 516 , - 419 , - 478 , - 69 , - 440 , - 343 , - 402 , - 617 , - 364 , - 267 , - 326 , - 541 , - 288 , - 191 , - 250 , - 465 , - 212 , - 115 , - 174 , - 389 , - 136 , - 39 , - 98 , - 313 , - 60 , - 587 , - 22 , - 237 , - 608 , - 511 , - 570 , - 161 , - 532 , - 435 , - 494 , - 85 , - 456 , - 359 , - 418 , - 9 , - 380 , - 283 , - 342 , - 557 , - 304 , - 207 , - 266 , - 481 , - 228 , - 131 , - 190 , - 405 , - 152 , - 55 , - 114 , - 329 , - 76 , - 603 , - 38 , - 253 , - 0 , - 359 , - 238 , - 277 , - 476 , - 195 , - 74 , - 113 , - 312 , - 31 , - 550 , - 589 , - 148 , - 507 , - 386 , - 425 , - 624 , - 343 , - 222 , - 261 , - 460 , - 179 , - 58 , - 97 , - 296 , - 15 , - 534 , - 573 , - 132 , - 491 , - 370 , - 409 , - 608 , - 327 , - 206 , - 245 , - 444 , - 163 , - 42 , - 81 , - 280 , - 639 , - 518 , - 557 , - 116 , - 475 , - 354 , - 393 , - 592 , - 311 , - 190 , - 229 , - 428 , - 147 , - 26 , - 65 , - 264 , - 623 , - 502 , - 541 , - 100 , - 459 , - 338 , - 377 , - 576 , - 295 , - 174 , - 213 , - 412 , - 131 , - 10 , - 49 , - 248 , - 607 , - 486 , - 525 , - 84 , - 443 , - 322 , - 361 , - 560 , - 279 , - 158 , - 197 , - 396 , - 115 , - 634 , - 33 , - 232 , - 591 , - 470 , - 509 , - 68 , - 427 , - 306 , - 345 , - 544 , - 263 , - 142 , - 181 , - 380 , - 99 , - 618 , - 17 , - 216 , - 575 , - 454 , - 493 , - 52 , - 411 , - 290 , - 329 , - 528 , - 247 , - 126 , - 165 , - 364 , - 83 , - 602 , - 1 , - 200 , - 559 , - 438 , - 477 , - 36 , - 395 , - 274 , - 313 , - 512 , - 231 , - 110 , - 149 , - 348 , - 67 , - 586 , - 625 , - 184 , - 543 , - 422 , - 461 , - 20 , - 379 , - 258 , - 297 , - 496 , - 215 , - 94 , - 133 , - 332 , - 51 , - 570 , - 609 , - 168 , - 527 , - 406 , - 445 , - 4 , - 363 , - 242 , - 281 , - 480 , - 199 , - 78 , - 117 , - 316 , - 35 , - 554 , - 593 , - 152 , - 511 , - 390 , - 429 , - 628 , - 347 , - 226 , - 265 , - 464 , - 183 , - 62 , - 101 , - 300 , - 19 , - 538 , - 577 , - 136 , - 495 , - 374 , - 413 , - 612 , - 331 , - 210 , - 249 , - 448 , - 167 , - 46 , - 85 , - 284 , - 3 , - 522 , - 561 , - 120 , - 479 , - 358 , - 397 , - 596 , - 315 , - 194 , - 233 , - 432 , - 151 , - 30 , - 69 , - 268 , - 627 , - 506 , - 545 , - 104 , - 463 , - 342 , - 381 , - 580 , - 299 , - 178 , - 217 , - 416 , - 135 , - 14 , - 53 , - 252 , - 611 , - 490 , - 529 , - 88 , - 447 , - 326 , - 365 , - 564 , - 283 , - 162 , - 201 , - 400 , - 119 , - 638 , - 37 , - 236 , - 595 , - 474 , - 513 , - 72 , - 431 , - 310 , - 349 , - 548 , - 267 , - 146 , - 185 , - 384 , - 103 , - 622 , - 21 , - 220 , - 579 , - 458 , - 497 , - 56 , - 415 , - 294 , - 333 , - 532 , - 251 , - 130 , - 169 , - 368 , - 87 , - 606 , - 5 , - 204 , - 563 , - 442 , - 481 , - 40 , - 399 , - 278 , - 317 , - 516 , - 235 , - 114 , - 153 , - 352 , - 71 , - 590 , - 629 , - 188 , - 547 , - 426 , - 465 , - 24 , - 383 , - 262 , - 301 , - 500 , - 219 , - 98 , - 137 , - 336 , - 55 , - 574 , - 613 , - 172 , - 531 , - 410 , - 449 , - 8 , - 367 , - 246 , - 285 , - 484 , - 203 , - 82 , - 121 , - 320 , - 39 , - 558 , - 597 , - 156 , - 515 , - 394 , - 433 , - 632 , - 351 , - 230 , - 269 , - 468 , - 187 , - 66 , - 105 , - 304 , - 23 , - 542 , - 581 , - 140 , - 499 , - 378 , - 417 , - 616 , - 335 , - 214 , - 253 , - 452 , - 171 , - 50 , - 89 , - 288 , - 7 , - 526 , - 565 , - 124 , - 483 , - 362 , - 401 , - 600 , - 319 , - 198 , - 237 , - 436 , - 155 , - 34 , - 73 , - 272 , - 631 , - 510 , - 549 , - 108 , - 467 , - 346 , - 385 , - 584 , - 303 , - 182 , - 221 , - 420 , - 139 , - 18 , - 57 , - 256 , - 615 , - 494 , - 533 , - 92 , - 451 , - 330 , - 369 , - 568 , - 287 , - 166 , - 205 , - 404 , - 123 , - 2 , - 41 , - 240 , - 599 , - 478 , - 517 , - 76 , - 435 , - 314 , - 353 , - 552 , - 271 , - 150 , - 189 , - 388 , - 107 , - 626 , - 25 , - 224 , - 583 , - 462 , - 501 , - 60 , - 419 , - 298 , - 337 , - 536 , - 255 , - 134 , - 173 , - 372 , - 91 , - 610 , - 9 , - 208 , - 567 , - 446 , - 485 , - 44 , - 403 , - 282 , - 321 , - 520 , - 239 , - 118 , - 157 , - 356 , - 75 , - 594 , - 633 , - 192 , - 551 , - 430 , - 469 , - 28 , - 387 , - 266 , - 305 , - 504 , - 223 , - 102 , - 141 , - 340 , - 59 , - 578 , - 617 , - 176 , - 535 , - 414 , - 453 , - 12 , - 371 , - 250 , - 289 , - 488 , - 207 , - 86 , - 125 , - 324 , - 43 , - 562 , - 601 , - 160 , - 519 , - 398 , - 437 , - 636 , - 355 , - 234 , - 273 , - 472 , - 191 , - 70 , - 109 , - 308 , - 27 , - 546 , - 585 , - 144 , - 503 , - 382 , - 421 , - 620 , - 339 , - 218 , - 257 , - 456 , - 175 , - 54 , - 93 , - 292 , - 11 , - 530 , - 569 , - 128 , - 487 , - 366 , - 405 , - 604 , - 323 , - 202 , - 241 , - 440 , - 159 , - 38 , - 77 , - 276 , - 635 , - 514 , - 553 , - 112 , - 471 , - 350 , - 389 , - 588 , - 307 , - 186 , - 225 , - 424 , - 143 , - 22 , - 61 , - 260 , - 619 , - 498 , - 537 , - 96 , - 455 , - 334 , - 373 , - 572 , - 291 , - 170 , - 209 , - 408 , - 127 , - 6 , - 45 , - 244 , - 603 , - 482 , - 521 , - 80 , - 439 , - 318 , - 357 , - 556 , - 275 , - 154 , - 193 , - 392 , - 111 , - 630 , - 29 , - 228 , - 587 , - 466 , - 505 , - 64 , - 423 , - 302 , - 341 , - 540 , - 259 , - 138 , - 177 , - 376 , - 95 , - 614 , - 13 , - 212 , - 571 , - 450 , - 489 , - 48 , - 407 , - 286 , - 325 , - 524 , - 243 , - 122 , - 161 , - 360 , - 79 , - 598 , - 637 , - 196 , - 555 , - 434 , - 473 , - 32 , - 391 , - 270 , - 309 , - 508 , - 227 , - 106 , - 145 , - 344 , - 63 , - 582 , - 621 , - 180 , - 539 , - 418 , - 457 , - 16 , - 375 , - 254 , - 293 , - 492 , - 211 , - 90 , - 129 , - 328 , - 47 , - 566 , - 605 , - 164 , - 523 , - 402 , - 441 , - 0 , - 535 , - 250 , - 457 , - 500 , - 379 , - 94 , - 301 , - 344 , - 223 , - 594 , - 145 , - 188 , - 67 , - 438 , - 645 , - 32 , - 567 , - 282 , - 489 , - 532 , - 411 , - 126 , - 333 , - 376 , - 255 , - 626 , - 177 , - 220 , - 99 , - 470 , - 21 , - 64 , - 599 , - 314 , - 521 , - 564 , - 443 , - 158 , - 365 , - 408 , - 287 , - 2 , - 209 , - 252 , - 131 , - 502 , - 53 , - 96 , - 631 , - 346 , - 553 , - 596 , - 475 , - 190 , - 397 , - 440 , - 319 , - 34 , - 241 , - 284 , - 163 , - 534 , - 85 , - 128 , - 7 , - 378 , - 585 , - 628 , - 507 , - 222 , - 429 , - 472 , - 351 , - 66 , - 273 , - 316 , - 195 , - 566 , - 117 , - 160 , - 39 , - 410 , - 617 , - 4 , - 539 , - 254 , - 461 , - 504 , - 383 , - 98 , - 305 , - 348 , - 227 , - 598 , - 149 , - 192 , - 71 , - 442 , - 649 , - 36 , - 571 , - 286 , - 493 , - 536 , - 415 , - 130 , - 337 , - 380 , - 259 , - 630 , - 181 , - 224 , - 103 , - 474 , - 25 , - 68 , - 603 , - 318 , - 525 , - 568 , - 447 , - 162 , - 369 , - 412 , - 291 , - 6 , - 213 , - 256 , - 135 , - 506 , - 57 , - 100 , - 635 , - 350 , - 557 , - 600 , - 479 , - 194 , - 401 , - 444 , - 323 , - 38 , - 245 , - 288 , - 167 , - 538 , - 89 , - 132 , - 11 , - 382 , - 589 , - 632 , - 511 , - 226 , - 433 , - 476 , - 355 , - 70 , - 277 , - 320 , - 199 , - 570 , - 121 , - 164 , - 43 , - 414 , - 621 , - 8 , - 543 , - 258 , - 465 , - 508 , - 387 , - 102 , - 309 , - 352 , - 231 , - 602 , - 153 , - 196 , - 75 , - 446 , - 653 , - 40 , - 575 , - 290 , - 497 , - 540 , - 419 , - 134 , - 341 , - 384 , - 263 , - 634 , - 185 , - 228 , - 107 , - 478 , - 29 , - 72 , - 607 , - 322 , - 529 , - 572 , - 451 , - 166 , - 373 , - 416 , - 295 , - 10 , - 217 , - 260 , - 139 , - 510 , - 61 , - 104 , - 639 , - 354 , - 561 , - 604 , - 483 , - 198 , - 405 , - 448 , - 327 , - 42 , - 249 , - 292 , - 171 , - 542 , - 93 , - 136 , - 15 , - 386 , - 593 , - 636 , - 515 , - 230 , - 437 , - 480 , - 359 , - 74 , - 281 , - 324 , - 203 , - 574 , - 125 , - 168 , - 47 , - 418 , - 625 , - 12 , - 547 , - 262 , - 469 , - 512 , - 391 , - 106 , - 313 , - 356 , - 235 , - 606 , - 157 , - 200 , - 79 , - 450 , - 1 , - 44 , - 579 , - 294 , - 501 , - 544 , - 423 , - 138 , - 345 , - 388 , - 267 , - 638 , - 189 , - 232 , - 111 , - 482 , - 33 , - 76 , - 611 , - 326 , - 533 , - 576 , - 455 , - 170 , - 377 , - 420 , - 299 , - 14 , - 221 , - 264 , - 143 , - 514 , - 65 , - 108 , - 643 , - 358 , - 565 , - 608 , - 487 , - 202 , - 409 , - 452 , - 331 , - 46 , - 253 , - 296 , - 175 , - 546 , - 97 , - 140 , - 19 , - 390 , - 597 , - 640 , - 519 , - 234 , - 441 , - 484 , - 363 , - 78 , - 285 , - 328 , - 207 , - 578 , - 129 , - 172 , - 51 , - 422 , - 629 , - 16 , - 551 , - 266 , - 473 , - 516 , - 395 , - 110 , - 317 , - 360 , - 239 , - 610 , - 161 , - 204 , - 83 , - 454 , - 5 , - 48 , - 583 , - 298 , - 505 , - 548 , - 427 , - 142 , - 349 , - 392 , - 271 , - 642 , - 193 , - 236 , - 115 , - 486 , - 37 , - 80 , - 615 , - 330 , - 537 , - 580 , - 459 , - 174 , - 381 , - 424 , - 303 , - 18 , - 225 , - 268 , - 147 , - 518 , - 69 , - 112 , - 647 , - 362 , - 569 , - 612 , - 491 , - 206 , - 413 , - 456 , - 335 , - 50 , - 257 , - 300 , - 179 , - 550 , - 101 , - 144 , - 23 , - 394 , - 601 , - 644 , - 523 , - 238 , - 445 , - 488 , - 367 , - 82 , - 289 , - 332 , - 211 , - 582 , - 133 , - 176 , - 55 , - 426 , - 633 , - 20 , - 555 , - 270 , - 477 , - 520 , - 399 , - 114 , - 321 , - 364 , - 243 , - 614 , - 165 , - 208 , - 87 , - 458 , - 9 , - 52 , - 587 , - 302 , - 509 , - 552 , - 431 , - 146 , - 353 , - 396 , - 275 , - 646 , - 197 , - 240 , - 119 , - 490 , - 41 , - 84 , - 619 , - 334 , - 541 , - 584 , - 463 , - 178 , - 385 , - 428 , - 307 , - 22 , - 229 , - 272 , - 151 , - 522 , - 73 , - 116 , - 651 , - 366 , - 573 , - 616 , - 495 , - 210 , - 417 , - 460 , - 339 , - 54 , - 261 , - 304 , - 183 , - 554 , - 105 , - 148 , - 27 , - 398 , - 605 , - 648 , - 527 , - 242 , - 449 , - 492 , - 371 , - 86 , - 293 , - 336 , - 215 , - 586 , - 137 , - 180 , - 59 , - 430 , - 637 , - 24 , - 559 , - 274 , - 481 , - 524 , - 403 , - 118 , - 325 , - 368 , - 247 , - 618 , - 169 , - 212 , - 91 , - 462 , - 13 , - 56 , - 591 , - 306 , - 513 , - 556 , - 435 , - 150 , - 357 , - 400 , - 279 , - 650 , - 201 , - 244 , - 123 , - 494 , - 45 , - 88 , - 623 , - 338 , - 545 , - 588 , - 467 , - 182 , - 389 , - 432 , - 311 , - 26 , - 233 , - 276 , - 155 , - 526 , - 77 , - 120 , - 655 , - 370 , - 577 , - 620 , - 499 , - 214 , - 421 , - 464 , - 343 , - 58 , - 265 , - 308 , - 187 , - 558 , - 109 , - 152 , - 31 , - 402 , - 609 , - 652 , - 531 , - 246 , - 453 , - 496 , - 375 , - 90 , - 297 , - 340 , - 219 , - 590 , - 141 , - 184 , - 63 , - 434 , - 641 , - 28 , - 563 , - 278 , - 485 , - 528 , - 407 , - 122 , - 329 , - 372 , - 251 , - 622 , - 173 , - 216 , - 95 , - 466 , - 17 , - 60 , - 595 , - 310 , - 517 , - 560 , - 439 , - 154 , - 361 , - 404 , - 283 , - 654 , - 205 , - 248 , - 127 , - 498 , - 49 , - 92 , - 627 , - 342 , - 549 , - 592 , - 471 , - 186 , - 393 , - 436 , - 315 , - 30 , - 237 , - 280 , - 159 , - 530 , - 81 , - 124 , - 3 , - 374 , - 581 , - 624 , - 503 , - 218 , - 425 , - 468 , - 347 , - 62 , - 269 , - 312 , - 191 , - 562 , - 113 , - 156 , - 35 , - 406 , - 613 , - 0 , - 463 , - 86 , - 213 , - 172 , - 635 , - 258 , - 385 , - 344 , - 135 , - 430 , - 557 , - 516 , - 307 , - 602 , - 57 , - 16 , - 479 , - 102 , - 229 , - 188 , - 651 , - 274 , - 401 , - 360 , - 151 , - 446 , - 573 , - 532 , - 323 , - 618 , - 73 , - 32 , - 495 , - 118 , - 245 , - 204 , - 667 , - 290 , - 417 , - 376 , - 167 , - 462 , - 589 , - 548 , - 339 , - 634 , - 89 , - 48 , - 511 , - 134 , - 261 , - 220 , - 11 , - 306 , - 433 , - 392 , - 183 , - 478 , - 605 , - 564 , - 355 , - 650 , - 105 , - 64 , - 527 , - 150 , - 277 , - 236 , - 27 , - 322 , - 449 , - 408 , - 199 , - 494 , - 621 , - 580 , - 371 , - 666 , - 121 , - 80 , - 543 , - 166 , - 293 , - 252 , - 43 , - 338 , - 465 , - 424 , - 215 , - 510 , - 637 , - 596 , - 387 , - 10 , - 137 , - 96 , - 559 , - 182 , - 309 , - 268 , - 59 , - 354 , - 481 , - 440 , - 231 , - 526 , - 653 , - 612 , - 403 , - 26 , - 153 , - 112 , - 575 , - 198 , - 325 , - 284 , - 75 , - 370 , - 497 , - 456 , - 247 , - 542 , - 669 , - 628 , - 419 , - 42 , - 169 , - 128 , - 591 , - 214 , - 341 , - 300 , - 91 , - 386 , - 513 , - 472 , - 263 , - 558 , - 13 , - 644 , - 435 , - 58 , - 185 , - 144 , - 607 , - 230 , - 357 , - 316 , - 107 , - 402 , - 529 , - 488 , - 279 , - 574 , - 29 , - 660 , - 451 , - 74 , - 201 , - 160 , - 623 , - 246 , - 373 , - 332 , - 123 , - 418 , - 545 , - 504 , - 295 , - 590 , - 45 , - 4 , - 467 , - 90 , - 217 , - 176 , - 639 , - 262 , - 389 , - 348 , - 139 , - 434 , - 561 , - 520 , - 311 , - 606 , - 61 , - 20 , - 483 , - 106 , - 233 , - 192 , - 655 , - 278 , - 405 , - 364 , - 155 , - 450 , - 577 , - 536 , - 327 , - 622 , - 77 , - 36 , - 499 , - 122 , - 249 , - 208 , - 671 , - 294 , - 421 , - 380 , - 171 , - 466 , - 593 , - 552 , - 343 , - 638 , - 93 , - 52 , - 515 , - 138 , - 265 , - 224 , - 15 , - 310 , - 437 , - 396 , - 187 , - 482 , - 609 , - 568 , - 359 , - 654 , - 109 , - 68 , - 531 , - 154 , - 281 , - 240 , - 31 , - 326 , - 453 , - 412 , - 203 , - 498 , - 625 , - 584 , - 375 , - 670 , - 125 , - 84 , - 547 , - 170 , - 297 , - 256 , - 47 , - 342 , - 469 , - 428 , - 219 , - 514 , - 641 , - 600 , - 391 , - 14 , - 141 , - 100 , - 563 , - 186 , - 313 , - 272 , - 63 , - 358 , - 485 , - 444 , - 235 , - 530 , - 657 , - 616 , - 407 , - 30 , - 157 , - 116 , - 579 , - 202 , - 329 , - 288 , - 79 , - 374 , - 501 , - 460 , - 251 , - 546 , - 1 , - 632 , - 423 , - 46 , - 173 , - 132 , - 595 , - 218 , - 345 , - 304 , - 95 , - 390 , - 517 , - 476 , - 267 , - 562 , - 17 , - 648 , - 439 , - 62 , - 189 , - 148 , - 611 , - 234 , - 361 , - 320 , - 111 , - 406 , - 533 , - 492 , - 283 , - 578 , - 33 , - 664 , - 455 , - 78 , - 205 , - 164 , - 627 , - 250 , - 377 , - 336 , - 127 , - 422 , - 549 , - 508 , - 299 , - 594 , - 49 , - 8 , - 471 , - 94 , - 221 , - 180 , - 643 , - 266 , - 393 , - 352 , - 143 , - 438 , - 565 , - 524 , - 315 , - 610 , - 65 , - 24 , - 487 , - 110 , - 237 , - 196 , - 659 , - 282 , - 409 , - 368 , - 159 , - 454 , - 581 , - 540 , - 331 , - 626 , - 81 , - 40 , - 503 , - 126 , - 253 , - 212 , - 3 , - 298 , - 425 , - 384 , - 175 , - 470 , - 597 , - 556 , - 347 , - 642 , - 97 , - 56 , - 519 , - 142 , - 269 , - 228 , - 19 , - 314 , - 441 , - 400 , - 191 , - 486 , - 613 , - 572 , - 363 , - 658 , - 113 , - 72 , - 535 , - 158 , - 285 , - 244 , - 35 , - 330 , - 457 , - 416 , - 207 , - 502 , - 629 , - 588 , - 379 , - 2 , - 129 , - 88 , - 551 , - 174 , - 301 , - 260 , - 51 , - 346 , - 473 , - 432 , - 223 , - 518 , - 645 , - 604 , - 395 , - 18 , - 145 , - 104 , - 567 , - 190 , - 317 , - 276 , - 67 , - 362 , - 489 , - 448 , - 239 , - 534 , - 661 , - 620 , - 411 , - 34 , - 161 , - 120 , - 583 , - 206 , - 333 , - 292 , - 83 , - 378 , - 505 , - 464 , - 255 , - 550 , - 5 , - 636 , - 427 , - 50 , - 177 , - 136 , - 599 , - 222 , - 349 , - 308 , - 99 , - 394 , - 521 , - 480 , - 271 , - 566 , - 21 , - 652 , - 443 , - 66 , - 193 , - 152 , - 615 , - 238 , - 365 , - 324 , - 115 , - 410 , - 537 , - 496 , - 287 , - 582 , - 37 , - 668 , - 459 , - 82 , - 209 , - 168 , - 631 , - 254 , - 381 , - 340 , - 131 , - 426 , - 553 , - 512 , - 303 , - 598 , - 53 , - 12 , - 475 , - 98 , - 225 , - 184 , - 647 , - 270 , - 397 , - 356 , - 147 , - 442 , - 569 , - 528 , - 319 , - 614 , - 69 , - 28 , - 491 , - 114 , - 241 , - 200 , - 663 , - 286 , - 413 , - 372 , - 163 , - 458 , - 585 , - 544 , - 335 , - 630 , - 85 , - 44 , - 507 , - 130 , - 257 , - 216 , - 7 , - 302 , - 429 , - 388 , - 179 , - 474 , - 601 , - 560 , - 351 , - 646 , - 101 , - 60 , - 523 , - 146 , - 273 , - 232 , - 23 , - 318 , - 445 , - 404 , - 195 , - 490 , - 617 , - 576 , - 367 , - 662 , - 117 , - 76 , - 539 , - 162 , - 289 , - 248 , - 39 , - 334 , - 461 , - 420 , - 211 , - 506 , - 633 , - 592 , - 383 , - 6 , - 133 , - 92 , - 555 , - 178 , - 305 , - 264 , - 55 , - 350 , - 477 , - 436 , - 227 , - 522 , - 649 , - 608 , - 399 , - 22 , - 149 , - 108 , - 571 , - 194 , - 321 , - 280 , - 71 , - 366 , - 493 , - 452 , - 243 , - 538 , - 665 , - 624 , - 415 , - 38 , - 165 , - 124 , - 587 , - 210 , - 337 , - 296 , - 87 , - 382 , - 509 , - 468 , - 259 , - 554 , - 9 , - 640 , - 431 , - 54 , - 181 , - 140 , - 603 , - 226 , - 353 , - 312 , - 103 , - 398 , - 525 , - 484 , - 275 , - 570 , - 25 , - 656 , - 447 , - 70 , - 197 , - 156 , - 619 , - 242 , - 369 , - 328 , - 119 , - 414 , - 541 , - 500 , - 291 , - 586 , - 41 , - 0 , - 127 , - 82 , - 553 , - 164 , - 291 , - 246 , - 29 , - 328 , - 455 , - 410 , - 193 , - 492 , - 619 , - 574 , - 357 , - 656 , - 95 , - 50 , - 521 , - 132 , - 259 , - 214 , - 685 , - 296 , - 423 , - 378 , - 161 , - 460 , - 587 , - 542 , - 325 , - 624 , - 63 , - 18 , - 489 , - 100 , - 227 , - 182 , - 653 , - 264 , - 391 , - 346 , - 129 , - 428 , - 555 , - 510 , - 293 , - 592 , - 31 , - 674 , - 457 , - 68 , - 195 , - 150 , - 621 , - 232 , - 359 , - 314 , - 97 , - 396 , - 523 , - 478 , - 261 , - 560 , - 687 , - 642 , - 425 , - 36 , - 163 , - 118 , - 589 , - 200 , - 327 , - 282 , - 65 , - 364 , - 491 , - 446 , - 229 , - 528 , - 655 , - 610 , - 393 , - 4 , - 131 , - 86 , - 557 , - 168 , - 295 , - 250 , - 33 , - 332 , - 459 , - 414 , - 197 , - 496 , - 623 , - 578 , - 361 , - 660 , - 99 , - 54 , - 525 , - 136 , - 263 , - 218 , - 1 , - 300 , - 427 , - 382 , - 165 , - 464 , - 591 , - 546 , - 329 , - 628 , - 67 , - 22 , - 493 , - 104 , - 231 , - 186 , - 657 , - 268 , - 395 , - 350 , - 133 , - 432 , - 559 , - 514 , - 297 , - 596 , - 35 , - 678 , - 461 , - 72 , - 199 , - 154 , - 625 , - 236 , - 363 , - 318 , - 101 , - 400 , - 527 , - 482 , - 265 , - 564 , - 3 , - 646 , - 429 , - 40 , - 167 , - 122 , - 593 , - 204 , - 331 , - 286 , - 69 , - 368 , - 495 , - 450 , - 233 , - 532 , - 659 , - 614 , - 397 , - 8 , - 135 , - 90 , - 561 , - 172 , - 299 , - 254 , - 37 , - 336 , - 463 , - 418 , - 201 , - 500 , - 627 , - 582 , - 365 , - 664 , - 103 , - 58 , - 529 , - 140 , - 267 , - 222 , - 5 , - 304 , - 431 , - 386 , - 169 , - 468 , - 595 , - 550 , - 333 , - 632 , - 71 , - 26 , - 497 , - 108 , - 235 , - 190 , - 661 , - 272 , - 399 , - 354 , - 137 , - 436 , - 563 , - 518 , - 301 , - 600 , - 39 , - 682 , - 465 , - 76 , - 203 , - 158 , - 629 , - 240 , - 367 , - 322 , - 105 , - 404 , - 531 , - 486 , - 269 , - 568 , - 7 , - 650 , - 433 , - 44 , - 171 , - 126 , - 597 , - 208 , - 335 , - 290 , - 73 , - 372 , - 499 , - 454 , - 237 , - 536 , - 663 , - 618 , - 401 , - 12 , - 139 , - 94 , - 565 , - 176 , - 303 , - 258 , - 41 , - 340 , - 467 , - 422 , - 205 , - 504 , - 631 , - 586 , - 369 , - 668 , - 107 , - 62 , - 533 , - 144 , - 271 , - 226 , - 9 , - 308 , - 435 , - 390 , - 173 , - 472 , - 599 , - 554 , - 337 , - 636 , - 75 , - 30 , - 501 , - 112 , - 239 , - 194 , - 665 , - 276 , - 403 , - 358 , - 141 , - 440 , - 567 , - 522 , - 305 , - 604 , - 43 , - 686 , - 469 , - 80 , - 207 , - 162 , - 633 , - 244 , - 371 , - 326 , - 109 , - 408 , - 535 , - 490 , - 273 , - 572 , - 11 , - 654 , - 437 , - 48 , - 175 , - 130 , - 601 , - 212 , - 339 , - 294 , - 77 , - 376 , - 503 , - 458 , - 241 , - 540 , - 667 , - 622 , - 405 , - 16 , - 143 , - 98 , - 569 , - 180 , - 307 , - 262 , - 45 , - 344 , - 471 , - 426 , - 209 , - 508 , - 635 , - 590 , - 373 , - 672 , - 111 , - 66 , - 537 , - 148 , - 275 , - 230 , - 13 , - 312 , - 439 , - 394 , - 177 , - 476 , - 603 , - 558 , - 341 , - 640 , - 79 , - 34 , - 505 , - 116 , - 243 , - 198 , - 669 , - 280 , - 407 , - 362 , - 145 , - 444 , - 571 , - 526 , - 309 , - 608 , - 47 , - 2 , - 473 , - 84 , - 211 , - 166 , - 637 , - 248 , - 375 , - 330 , - 113 , - 412 , - 539 , - 494 , - 277 , - 576 , - 15 , - 658 , - 441 , - 52 , - 179 , - 134 , - 605 , - 216 , - 343 , - 298 , - 81 , - 380 , - 507 , - 462 , - 245 , - 544 , - 671 , - 626 , - 409 , - 20 , - 147 , - 102 , - 573 , - 184 , - 311 , - 266 , - 49 , - 348 , - 475 , - 430 , - 213 , - 512 , - 639 , - 594 , - 377 , - 676 , - 115 , - 70 , - 541 , - 152 , - 279 , - 234 , - 17 , - 316 , - 443 , - 398 , - 181 , - 480 , - 607 , - 562 , - 345 , - 644 , - 83 , - 38 , - 509 , - 120 , - 247 , - 202 , - 673 , - 284 , - 411 , - 366 , - 149 , - 448 , - 575 , - 530 , - 313 , - 612 , - 51 , - 6 , - 477 , - 88 , - 215 , - 170 , - 641 , - 252 , - 379 , - 334 , - 117 , - 416 , - 543 , - 498 , - 281 , - 580 , - 19 , - 662 , - 445 , - 56 , - 183 , - 138 , - 609 , - 220 , - 347 , - 302 , - 85 , - 384 , - 511 , - 466 , - 249 , - 548 , - 675 , - 630 , - 413 , - 24 , - 151 , - 106 , - 577 , - 188 , - 315 , - 270 , - 53 , - 352 , - 479 , - 434 , - 217 , - 516 , - 643 , - 598 , - 381 , - 680 , - 119 , - 74 , - 545 , - 156 , - 283 , - 238 , - 21 , - 320 , - 447 , - 402 , - 185 , - 484 , - 611 , - 566 , - 349 , - 648 , - 87 , - 42 , - 513 , - 124 , - 251 , - 206 , - 677 , - 288 , - 415 , - 370 , - 153 , - 452 , - 579 , - 534 , - 317 , - 616 , - 55 , - 10 , - 481 , - 92 , - 219 , - 174 , - 645 , - 256 , - 383 , - 338 , - 121 , - 420 , - 547 , - 502 , - 285 , - 584 , - 23 , - 666 , - 449 , - 60 , - 187 , - 142 , - 613 , - 224 , - 351 , - 306 , - 89 , - 388 , - 515 , - 470 , - 253 , - 552 , - 679 , - 634 , - 417 , - 28 , - 155 , - 110 , - 581 , - 192 , - 319 , - 274 , - 57 , - 356 , - 483 , - 438 , - 221 , - 520 , - 647 , - 602 , - 385 , - 684 , - 123 , - 78 , - 549 , - 160 , - 287 , - 242 , - 25 , - 324 , - 451 , - 406 , - 189 , - 488 , - 615 , - 570 , - 353 , - 652 , - 91 , - 46 , - 517 , - 128 , - 255 , - 210 , - 681 , - 292 , - 419 , - 374 , - 157 , - 456 , - 583 , - 538 , - 321 , - 620 , - 59 , - 14 , - 485 , - 96 , - 223 , - 178 , - 649 , - 260 , - 387 , - 342 , - 125 , - 424 , - 551 , - 506 , - 289 , - 588 , - 27 , - 670 , - 453 , - 64 , - 191 , - 146 , - 617 , - 228 , - 355 , - 310 , - 93 , - 392 , - 519 , - 474 , - 257 , - 556 , - 683 , - 638 , - 421 , - 32 , - 159 , - 114 , - 585 , - 196 , - 323 , - 278 , - 61 , - 360 , - 487 , - 442 , - 225 , - 524 , - 651 , - 606 , - 389 , - 0 , - 463 , - 662 , - 597 , - 268 , - 379 , - 226 , - 513 , - 536 , - 295 , - 494 , - 429 , - 100 , - 211 , - 58 , - 345 , - 368 , - 127 , - 326 , - 261 , - 636 , - 43 , - 594 , - 177 , - 200 , - 663 , - 158 , - 93 , - 468 , - 579 , - 426 , - 9 , - 32 , - 495 , - 694 , - 629 , - 300 , - 411 , - 258 , - 545 , - 568 , - 327 , - 526 , - 461 , - 132 , - 243 , - 90 , - 377 , - 400 , - 159 , - 358 , - 293 , - 668 , - 75 , - 626 , - 209 , - 232 , - 695 , - 190 , - 125 , - 500 , - 611 , - 458 , - 41 , - 64 , - 527 , - 22 , - 661 , - 332 , - 443 , - 290 , - 577 , - 600 , - 359 , - 558 , - 493 , - 164 , - 275 , - 122 , - 409 , - 432 , - 191 , - 390 , - 325 , - 700 , - 107 , - 658 , - 241 , - 264 , - 23 , - 222 , - 157 , - 532 , - 643 , - 490 , - 73 , - 96 , - 559 , - 54 , - 693 , - 364 , - 475 , - 322 , - 609 , - 632 , - 391 , - 590 , - 525 , - 196 , - 307 , - 154 , - 441 , - 464 , - 223 , - 422 , - 357 , - 28 , - 139 , - 690 , - 273 , - 296 , - 55 , - 254 , - 189 , - 564 , - 675 , - 522 , - 105 , - 128 , - 591 , - 86 , - 21 , - 396 , - 507 , - 354 , - 641 , - 664 , - 423 , - 622 , - 557 , - 228 , - 339 , - 186 , - 473 , - 496 , - 255 , - 454 , - 389 , - 60 , - 171 , - 18 , - 305 , - 328 , - 87 , - 286 , - 221 , - 596 , - 3 , - 554 , - 137 , - 160 , - 623 , - 118 , - 53 , - 428 , - 539 , - 386 , - 673 , - 696 , - 455 , - 654 , - 589 , - 260 , - 371 , - 218 , - 505 , - 528 , - 287 , - 486 , - 421 , - 92 , - 203 , - 50 , - 337 , - 360 , - 119 , - 318 , - 253 , - 628 , - 35 , - 586 , - 169 , - 192 , - 655 , - 150 , - 85 , - 460 , - 571 , - 418 , - 1 , - 24 , - 487 , - 686 , - 621 , - 292 , - 403 , - 250 , - 537 , - 560 , - 319 , - 518 , - 453 , - 124 , - 235 , - 82 , - 369 , - 392 , - 151 , - 350 , - 285 , - 660 , - 67 , - 618 , - 201 , - 224 , - 687 , - 182 , - 117 , - 492 , - 603 , - 450 , - 33 , - 56 , - 519 , - 14 , - 653 , - 324 , - 435 , - 282 , - 569 , - 592 , - 351 , - 550 , - 485 , - 156 , - 267 , - 114 , - 401 , - 424 , - 183 , - 382 , - 317 , - 692 , - 99 , - 650 , - 233 , - 256 , - 15 , - 214 , - 149 , - 524 , - 635 , - 482 , - 65 , - 88 , - 551 , - 46 , - 685 , - 356 , - 467 , - 314 , - 601 , - 624 , - 383 , - 582 , - 517 , - 188 , - 299 , - 146 , - 433 , - 456 , - 215 , - 414 , - 349 , - 20 , - 131 , - 682 , - 265 , - 288 , - 47 , - 246 , - 181 , - 556 , - 667 , - 514 , - 97 , - 120 , - 583 , - 78 , - 13 , - 388 , - 499 , - 346 , - 633 , - 656 , - 415 , - 614 , - 549 , - 220 , - 331 , - 178 , - 465 , - 488 , - 247 , - 446 , - 381 , - 52 , - 163 , - 10 , - 297 , - 320 , - 79 , - 278 , - 213 , - 588 , - 699 , - 546 , - 129 , - 152 , - 615 , - 110 , - 45 , - 420 , - 531 , - 378 , - 665 , - 688 , - 447 , - 646 , - 581 , - 252 , - 363 , - 210 , - 497 , - 520 , - 279 , - 478 , - 413 , - 84 , - 195 , - 42 , - 329 , - 352 , - 111 , - 310 , - 245 , - 620 , - 27 , - 578 , - 161 , - 184 , - 647 , - 142 , - 77 , - 452 , - 563 , - 410 , - 697 , - 16 , - 479 , - 678 , - 613 , - 284 , - 395 , - 242 , - 529 , - 552 , - 311 , - 510 , - 445 , - 116 , - 227 , - 74 , - 361 , - 384 , - 143 , - 342 , - 277 , - 652 , - 59 , - 610 , - 193 , - 216 , - 679 , - 174 , - 109 , - 484 , - 595 , - 442 , - 25 , - 48 , - 511 , - 6 , - 645 , - 316 , - 427 , - 274 , - 561 , - 584 , - 343 , - 542 , - 477 , - 148 , - 259 , - 106 , - 393 , - 416 , - 175 , - 374 , - 309 , - 684 , - 91 , - 642 , - 225 , - 248 , - 7 , - 206 , - 141 , - 516 , - 627 , - 474 , - 57 , - 80 , - 543 , - 38 , - 677 , - 348 , - 459 , - 306 , - 593 , - 616 , - 375 , - 574 , - 509 , - 180 , - 291 , - 138 , - 425 , - 448 , - 207 , - 406 , - 341 , - 12 , - 123 , - 674 , - 257 , - 280 , - 39 , - 238 , - 173 , - 548 , - 659 , - 506 , - 89 , - 112 , - 575 , - 70 , - 5 , - 380 , - 491 , - 338 , - 625 , - 648 , - 407 , - 606 , - 541 , - 212 , - 323 , - 170 , - 457 , - 480 , - 239 , - 438 , - 373 , - 44 , - 155 , - 2 , - 289 , - 312 , - 71 , - 270 , - 205 , - 580 , - 691 , - 538 , - 121 , - 144 , - 607 , - 102 , - 37 , - 412 , - 523 , - 370 , - 657 , - 680 , - 439 , - 638 , - 573 , - 244 , - 355 , - 202 , - 489 , - 512 , - 271 , - 470 , - 405 , - 76 , - 187 , - 34 , - 321 , - 344 , - 103 , - 302 , - 237 , - 612 , - 19 , - 570 , - 153 , - 176 , - 639 , - 134 , - 69 , - 444 , - 555 , - 402 , - 689 , - 8 , - 471 , - 670 , - 605 , - 276 , - 387 , - 234 , - 521 , - 544 , - 303 , - 502 , - 437 , - 108 , - 219 , - 66 , - 353 , - 376 , - 135 , - 334 , - 269 , - 644 , - 51 , - 602 , - 185 , - 208 , - 671 , - 166 , - 101 , - 476 , - 587 , - 434 , - 17 , - 40 , - 503 , - 702 , - 637 , - 308 , - 419 , - 266 , - 553 , - 576 , - 335 , - 534 , - 469 , - 140 , - 251 , - 98 , - 385 , - 408 , - 167 , - 366 , - 301 , - 676 , - 83 , - 634 , - 217 , - 240 , - 703 , - 198 , - 133 , - 508 , - 619 , - 466 , - 49 , - 72 , - 535 , - 30 , - 669 , - 340 , - 451 , - 298 , - 585 , - 608 , - 367 , - 566 , - 501 , - 172 , - 283 , - 130 , - 417 , - 440 , - 199 , - 398 , - 333 , - 4 , - 115 , - 666 , - 249 , - 272 , - 31 , - 230 , - 165 , - 540 , - 651 , - 498 , - 81 , - 104 , - 567 , - 62 , - 701 , - 372 , - 483 , - 330 , - 617 , - 640 , - 399 , - 598 , - 533 , - 204 , - 315 , - 162 , - 449 , - 472 , - 231 , - 430 , - 365 , - 36 , - 147 , - 698 , - 281 , - 304 , - 63 , - 262 , - 197 , - 572 , - 683 , - 530 , - 113 , - 136 , - 599 , - 94 , - 29 , - 404 , - 515 , - 362 , - 649 , - 672 , - 431 , - 630 , - 565 , - 236 , - 347 , - 194 , - 481 , - 504 , - 263 , - 462 , - 397 , - 68 , - 179 , - 26 , - 313 , - 336 , - 95 , - 294 , - 229 , - 604 , - 11 , - 562 , - 145 , - 168 , - 631 , - 126 , - 61 , - 436 , - 547 , - 394 , - 681 , - 0 , - 199 , - 158 , - 597 , - 76 , - 35 , - 474 , - 673 , - 632 , - 351 , - 550 , - 509 , - 228 , - 427 , - 386 , - 105 , - 304 , - 263 , - 702 , - 181 , - 140 , - 579 , - 58 , - 17 , - 456 , - 655 , - 614 , - 333 , - 532 , - 491 , - 210 , - 409 , - 368 , - 87 , - 286 , - 245 , - 684 , - 163 , - 122 , - 561 , - 40 , - 719 , - 438 , - 637 , - 596 , - 315 , - 514 , - 473 , - 192 , - 391 , - 350 , - 69 , - 268 , - 227 , - 666 , - 145 , - 104 , - 543 , - 22 , - 701 , - 420 , - 619 , - 578 , - 297 , - 496 , - 455 , - 174 , - 373 , - 332 , - 51 , - 250 , - 209 , - 648 , - 127 , - 86 , - 525 , - 4 , - 683 , - 402 , - 601 , - 560 , - 279 , - 478 , - 437 , - 156 , - 355 , - 314 , - 33 , - 232 , - 191 , - 630 , - 109 , - 68 , - 507 , - 706 , - 665 , - 384 , - 583 , - 542 , - 261 , - 460 , - 419 , - 138 , - 337 , - 296 , - 15 , - 214 , - 173 , - 612 , - 91 , - 50 , - 489 , - 688 , - 647 , - 366 , - 565 , - 524 , - 243 , - 442 , - 401 , - 120 , - 319 , - 278 , - 717 , - 196 , - 155 , - 594 , - 73 , - 32 , - 471 , - 670 , - 629 , - 348 , - 547 , - 506 , - 225 , - 424 , - 383 , - 102 , - 301 , - 260 , - 699 , - 178 , - 137 , - 576 , - 55 , - 14 , - 453 , - 652 , - 611 , - 330 , - 529 , - 488 , - 207 , - 406 , - 365 , - 84 , - 283 , - 242 , - 681 , - 160 , - 119 , - 558 , - 37 , - 716 , - 435 , - 634 , - 593 , - 312 , - 511 , - 470 , - 189 , - 388 , - 347 , - 66 , - 265 , - 224 , - 663 , - 142 , - 101 , - 540 , - 19 , - 698 , - 417 , - 616 , - 575 , - 294 , - 493 , - 452 , - 171 , - 370 , - 329 , - 48 , - 247 , - 206 , - 645 , - 124 , - 83 , - 522 , - 1 , - 680 , - 399 , - 598 , - 557 , - 276 , - 475 , - 434 , - 153 , - 352 , - 311 , - 30 , - 229 , - 188 , - 627 , - 106 , - 65 , - 504 , - 703 , - 662 , - 381 , - 580 , - 539 , - 258 , - 457 , - 416 , - 135 , - 334 , - 293 , - 12 , - 211 , - 170 , - 609 , - 88 , - 47 , - 486 , - 685 , - 644 , - 363 , - 562 , - 521 , - 240 , - 439 , - 398 , - 117 , - 316 , - 275 , - 714 , - 193 , - 152 , - 591 , - 70 , - 29 , - 468 , - 667 , - 626 , - 345 , - 544 , - 503 , - 222 , - 421 , - 380 , - 99 , - 298 , - 257 , - 696 , - 175 , - 134 , - 573 , - 52 , - 11 , - 450 , - 649 , - 608 , - 327 , - 526 , - 485 , - 204 , - 403 , - 362 , - 81 , - 280 , - 239 , - 678 , - 157 , - 116 , - 555 , - 34 , - 713 , - 432 , - 631 , - 590 , - 309 , - 508 , - 467 , - 186 , - 385 , - 344 , - 63 , - 262 , - 221 , - 660 , - 139 , - 98 , - 537 , - 16 , - 695 , - 414 , - 613 , - 572 , - 291 , - 490 , - 449 , - 168 , - 367 , - 326 , - 45 , - 244 , - 203 , - 642 , - 121 , - 80 , - 519 , - 718 , - 677 , - 396 , - 595 , - 554 , - 273 , - 472 , - 431 , - 150 , - 349 , - 308 , - 27 , - 226 , - 185 , - 624 , - 103 , - 62 , - 501 , - 700 , - 659 , - 378 , - 577 , - 536 , - 255 , - 454 , - 413 , - 132 , - 331 , - 290 , - 9 , - 208 , - 167 , - 606 , - 85 , - 44 , - 483 , - 682 , - 641 , - 360 , - 559 , - 518 , - 237 , - 436 , - 395 , - 114 , - 313 , - 272 , - 711 , - 190 , - 149 , - 588 , - 67 , - 26 , - 465 , - 664 , - 623 , - 342 , - 541 , - 500 , - 219 , - 418 , - 377 , - 96 , - 295 , - 254 , - 693 , - 172 , - 131 , - 570 , - 49 , - 8 , - 447 , - 646 , - 605 , - 324 , - 523 , - 482 , - 201 , - 400 , - 359 , - 78 , - 277 , - 236 , - 675 , - 154 , - 113 , - 552 , - 31 , - 710 , - 429 , - 628 , - 587 , - 306 , - 505 , - 464 , - 183 , - 382 , - 341 , - 60 , - 259 , - 218 , - 657 , - 136 , - 95 , - 534 , - 13 , - 692 , - 411 , - 610 , - 569 , - 288 , - 487 , - 446 , - 165 , - 364 , - 323 , - 42 , - 241 , - 200 , - 639 , - 118 , - 77 , - 516 , - 715 , - 674 , - 393 , - 592 , - 551 , - 270 , - 469 , - 428 , - 147 , - 346 , - 305 , - 24 , - 223 , - 182 , - 621 , - 100 , - 59 , - 498 , - 697 , - 656 , - 375 , - 574 , - 533 , - 252 , - 451 , - 410 , - 129 , - 328 , - 287 , - 6 , - 205 , - 164 , - 603 , - 82 , - 41 , - 480 , - 679 , - 638 , - 357 , - 556 , - 515 , - 234 , - 433 , - 392 , - 111 , - 310 , - 269 , - 708 , - 187 , - 146 , - 585 , - 64 , - 23 , - 462 , - 661 , - 620 , - 339 , - 538 , - 497 , - 216 , - 415 , - 374 , - 93 , - 292 , - 251 , - 690 , - 169 , - 128 , - 567 , - 46 , - 5 , - 444 , - 643 , - 602 , - 321 , - 520 , - 479 , - 198 , - 397 , - 356 , - 75 , - 274 , - 233 , - 672 , - 151 , - 110 , - 549 , - 28 , - 707 , - 426 , - 625 , - 584 , - 303 , - 502 , - 461 , - 180 , - 379 , - 338 , - 57 , - 256 , - 215 , - 654 , - 133 , - 92 , - 531 , - 10 , - 689 , - 408 , - 607 , - 566 , - 285 , - 484 , - 443 , - 162 , - 361 , - 320 , - 39 , - 238 , - 197 , - 636 , - 115 , - 74 , - 513 , - 712 , - 671 , - 390 , - 589 , - 548 , - 267 , - 466 , - 425 , - 144 , - 343 , - 302 , - 21 , - 220 , - 179 , - 618 , - 97 , - 56 , - 495 , - 694 , - 653 , - 372 , - 571 , - 530 , - 249 , - 448 , - 407 , - 126 , - 325 , - 284 , - 3 , - 202 , - 161 , - 600 , - 79 , - 38 , - 477 , - 676 , - 635 , - 354 , - 553 , - 512 , - 231 , - 430 , - 389 , - 108 , - 307 , - 266 , - 705 , - 184 , - 143 , - 582 , - 61 , - 20 , - 459 , - 658 , - 617 , - 336 , - 535 , - 494 , - 213 , - 412 , - 371 , - 90 , - 289 , - 248 , - 687 , - 166 , - 125 , - 564 , - 43 , - 2 , - 441 , - 640 , - 599 , - 318 , - 517 , - 476 , - 195 , - 394 , - 353 , - 72 , - 271 , - 230 , - 669 , - 148 , - 107 , - 546 , - 25 , - 704 , - 423 , - 622 , - 581 , - 300 , - 499 , - 458 , - 177 , - 376 , - 335 , - 54 , - 253 , - 212 , - 651 , - 130 , - 89 , - 528 , - 7 , - 686 , - 405 , - 604 , - 563 , - 282 , - 481 , - 440 , - 159 , - 358 , - 317 , - 36 , - 235 , - 194 , - 633 , - 112 , - 71 , - 510 , - 709 , - 668 , - 387 , - 586 , - 545 , - 264 , - 463 , - 422 , - 141 , - 340 , - 299 , - 18 , - 217 , - 176 , - 615 , - 94 , - 53 , - 492 , - 691 , - 650 , - 369 , - 568 , - 527 , - 246 , - 445 , - 404 , - 123 , - 322 , - 281 , - 0 , - 47 , - 278 , - 693 , - 556 , - 603 , - 98 , - 513 , - 376 , - 423 , - 654 , - 333 , - 196 , - 243 , - 474 , - 153 , - 16 , - 63 , - 294 , - 709 , - 572 , - 619 , - 114 , - 529 , - 392 , - 439 , - 670 , - 349 , - 212 , - 259 , - 490 , - 169 , - 32 , - 79 , - 310 , - 725 , - 588 , - 635 , - 130 , - 545 , - 408 , - 455 , - 686 , - 365 , - 228 , - 275 , - 506 , - 185 , - 48 , - 95 , - 326 , - 5 , - 604 , - 651 , - 146 , - 561 , - 424 , - 471 , - 702 , - 381 , - 244 , - 291 , - 522 , - 201 , - 64 , - 111 , - 342 , - 21 , - 620 , - 667 , - 162 , - 577 , - 440 , - 487 , - 718 , - 397 , - 260 , - 307 , - 538 , - 217 , - 80 , - 127 , - 358 , - 37 , - 636 , - 683 , - 178 , - 593 , - 456 , - 503 , - 734 , - 413 , - 276 , - 323 , - 554 , - 233 , - 96 , - 143 , - 374 , - 53 , - 652 , - 699 , - 194 , - 609 , - 472 , - 519 , - 14 , - 429 , - 292 , - 339 , - 570 , - 249 , - 112 , - 159 , - 390 , - 69 , - 668 , - 715 , - 210 , - 625 , - 488 , - 535 , - 30 , - 445 , - 308 , - 355 , - 586 , - 265 , - 128 , - 175 , - 406 , - 85 , - 684 , - 731 , - 226 , - 641 , - 504 , - 551 , - 46 , - 461 , - 324 , - 371 , - 602 , - 281 , - 144 , - 191 , - 422 , - 101 , - 700 , - 11 , - 242 , - 657 , - 520 , - 567 , - 62 , - 477 , - 340 , - 387 , - 618 , - 297 , - 160 , - 207 , - 438 , - 117 , - 716 , - 27 , - 258 , - 673 , - 536 , - 583 , - 78 , - 493 , - 356 , - 403 , - 634 , - 313 , - 176 , - 223 , - 454 , - 133 , - 732 , - 43 , - 274 , - 689 , - 552 , - 599 , - 94 , - 509 , - 372 , - 419 , - 650 , - 329 , - 192 , - 239 , - 470 , - 149 , - 12 , - 59 , - 290 , - 705 , - 568 , - 615 , - 110 , - 525 , - 388 , - 435 , - 666 , - 345 , - 208 , - 255 , - 486 , - 165 , - 28 , - 75 , - 306 , - 721 , - 584 , - 631 , - 126 , - 541 , - 404 , - 451 , - 682 , - 361 , - 224 , - 271 , - 502 , - 181 , - 44 , - 91 , - 322 , - 1 , - 600 , - 647 , - 142 , - 557 , - 420 , - 467 , - 698 , - 377 , - 240 , - 287 , - 518 , - 197 , - 60 , - 107 , - 338 , - 17 , - 616 , - 663 , - 158 , - 573 , - 436 , - 483 , - 714 , - 393 , - 256 , - 303 , - 534 , - 213 , - 76 , - 123 , - 354 , - 33 , - 632 , - 679 , - 174 , - 589 , - 452 , - 499 , - 730 , - 409 , - 272 , - 319 , - 550 , - 229 , - 92 , - 139 , - 370 , - 49 , - 648 , - 695 , - 190 , - 605 , - 468 , - 515 , - 10 , - 425 , - 288 , - 335 , - 566 , - 245 , - 108 , - 155 , - 386 , - 65 , - 664 , - 711 , - 206 , - 621 , - 484 , - 531 , - 26 , - 441 , - 304 , - 351 , - 582 , - 261 , - 124 , - 171 , - 402 , - 81 , - 680 , - 727 , - 222 , - 637 , - 500 , - 547 , - 42 , - 457 , - 320 , - 367 , - 598 , - 277 , - 140 , - 187 , - 418 , - 97 , - 696 , - 7 , - 238 , - 653 , - 516 , - 563 , - 58 , - 473 , - 336 , - 383 , - 614 , - 293 , - 156 , - 203 , - 434 , - 113 , - 712 , - 23 , - 254 , - 669 , - 532 , - 579 , - 74 , - 489 , - 352 , - 399 , - 630 , - 309 , - 172 , - 219 , - 450 , - 129 , - 728 , - 39 , - 270 , - 685 , - 548 , - 595 , - 90 , - 505 , - 368 , - 415 , - 646 , - 325 , - 188 , - 235 , - 466 , - 145 , - 8 , - 55 , - 286 , - 701 , - 564 , - 611 , - 106 , - 521 , - 384 , - 431 , - 662 , - 341 , - 204 , - 251 , - 482 , - 161 , - 24 , - 71 , - 302 , - 717 , - 580 , - 627 , - 122 , - 537 , - 400 , - 447 , - 678 , - 357 , - 220 , - 267 , - 498 , - 177 , - 40 , - 87 , - 318 , - 733 , - 596 , - 643 , - 138 , - 553 , - 416 , - 463 , - 694 , - 373 , - 236 , - 283 , - 514 , - 193 , - 56 , - 103 , - 334 , - 13 , - 612 , - 659 , - 154 , - 569 , - 432 , - 479 , - 710 , - 389 , - 252 , - 299 , - 530 , - 209 , - 72 , - 119 , - 350 , - 29 , - 628 , - 675 , - 170 , - 585 , - 448 , - 495 , - 726 , - 405 , - 268 , - 315 , - 546 , - 225 , - 88 , - 135 , - 366 , - 45 , - 644 , - 691 , - 186 , - 601 , - 464 , - 511 , - 6 , - 421 , - 284 , - 331 , - 562 , - 241 , - 104 , - 151 , - 382 , - 61 , - 660 , - 707 , - 202 , - 617 , - 480 , - 527 , - 22 , - 437 , - 300 , - 347 , - 578 , - 257 , - 120 , - 167 , - 398 , - 77 , - 676 , - 723 , - 218 , - 633 , - 496 , - 543 , - 38 , - 453 , - 316 , - 363 , - 594 , - 273 , - 136 , - 183 , - 414 , - 93 , - 692 , - 3 , - 234 , - 649 , - 512 , - 559 , - 54 , - 469 , - 332 , - 379 , - 610 , - 289 , - 152 , - 199 , - 430 , - 109 , - 708 , - 19 , - 250 , - 665 , - 528 , - 575 , - 70 , - 485 , - 348 , - 395 , - 626 , - 305 , - 168 , - 215 , - 446 , - 125 , - 724 , - 35 , - 266 , - 681 , - 544 , - 591 , - 86 , - 501 , - 364 , - 411 , - 642 , - 321 , - 184 , - 231 , - 462 , - 141 , - 4 , - 51 , - 282 , - 697 , - 560 , - 607 , - 102 , - 517 , - 380 , - 427 , - 658 , - 337 , - 200 , - 247 , - 478 , - 157 , - 20 , - 67 , - 298 , - 713 , - 576 , - 623 , - 118 , - 533 , - 396 , - 443 , - 674 , - 353 , - 216 , - 263 , - 494 , - 173 , - 36 , - 83 , - 314 , - 729 , - 592 , - 639 , - 134 , - 549 , - 412 , - 459 , - 690 , - 369 , - 232 , - 279 , - 510 , - 189 , - 52 , - 99 , - 330 , - 9 , - 608 , - 655 , - 150 , - 565 , - 428 , - 475 , - 706 , - 385 , - 248 , - 295 , - 526 , - 205 , - 68 , - 115 , - 346 , - 25 , - 624 , - 671 , - 166 , - 581 , - 444 , - 491 , - 722 , - 401 , - 264 , - 311 , - 542 , - 221 , - 84 , - 131 , - 362 , - 41 , - 640 , - 687 , - 182 , - 597 , - 460 , - 507 , - 2 , - 417 , - 280 , - 327 , - 558 , - 237 , - 100 , - 147 , - 378 , - 57 , - 656 , - 703 , - 198 , - 613 , - 476 , - 523 , - 18 , - 433 , - 296 , - 343 , - 574 , - 253 , - 116 , - 163 , - 394 , - 73 , - 672 , - 719 , - 214 , - 629 , - 492 , - 539 , - 34 , - 449 , - 312 , - 359 , - 590 , - 269 , - 132 , - 179 , - 410 , - 89 , - 688 , - 735 , - 230 , - 645 , - 508 , - 555 , - 50 , - 465 , - 328 , - 375 , - 606 , - 285 , - 148 , - 195 , - 426 , - 105 , - 704 , - 15 , - 246 , - 661 , - 524 , - 571 , - 66 , - 481 , - 344 , - 391 , - 622 , - 301 , - 164 , - 211 , - 442 , - 121 , - 720 , - 31 , - 262 , - 677 , - 540 , - 587 , - 82 , - 497 , - 360 , - 407 , - 638 , - 317 , - 180 , - 227 , - 458 , - 137 , - 0 , - 421 , - 278 , - 323 , - 556 , - 225 , - 82 , - 127 , - 360 , - 29 , - 638 , - 683 , - 164 , - 585 , - 442 , - 487 , - 720 , - 389 , - 246 , - 291 , - 524 , - 193 , - 50 , - 95 , - 328 , - 749 , - 606 , - 651 , - 132 , - 553 , - 410 , - 455 , - 688 , - 357 , - 214 , - 259 , - 492 , - 161 , - 18 , - 63 , - 296 , - 717 , - 574 , - 619 , - 100 , - 521 , - 378 , - 423 , - 656 , - 325 , - 182 , - 227 , - 460 , - 129 , - 738 , - 31 , - 264 , - 685 , - 542 , - 587 , - 68 , - 489 , - 346 , - 391 , - 624 , - 293 , - 150 , - 195 , - 428 , - 97 , - 706 , - 751 , - 232 , - 653 , - 510 , - 555 , - 36 , - 457 , - 314 , - 359 , - 592 , - 261 , - 118 , - 163 , - 396 , - 65 , - 674 , - 719 , - 200 , - 621 , - 478 , - 523 , - 4 , - 425 , - 282 , - 327 , - 560 , - 229 , - 86 , - 131 , - 364 , - 33 , - 642 , - 687 , - 168 , - 589 , - 446 , - 491 , - 724 , - 393 , - 250 , - 295 , - 528 , - 197 , - 54 , - 99 , - 332 , - 1 , - 610 , - 655 , - 136 , - 557 , - 414 , - 459 , - 692 , - 361 , - 218 , - 263 , - 496 , - 165 , - 22 , - 67 , - 300 , - 721 , - 578 , - 623 , - 104 , - 525 , - 382 , - 427 , - 660 , - 329 , - 186 , - 231 , - 464 , - 133 , - 742 , - 35 , - 268 , - 689 , - 546 , - 591 , - 72 , - 493 , - 350 , - 395 , - 628 , - 297 , - 154 , - 199 , - 432 , - 101 , - 710 , - 3 , - 236 , - 657 , - 514 , - 559 , - 40 , - 461 , - 318 , - 363 , - 596 , - 265 , - 122 , - 167 , - 400 , - 69 , - 678 , - 723 , - 204 , - 625 , - 482 , - 527 , - 8 , - 429 , - 286 , - 331 , - 564 , - 233 , - 90 , - 135 , - 368 , - 37 , - 646 , - 691 , - 172 , - 593 , - 450 , - 495 , - 728 , - 397 , - 254 , - 299 , - 532 , - 201 , - 58 , - 103 , - 336 , - 5 , - 614 , - 659 , - 140 , - 561 , - 418 , - 463 , - 696 , - 365 , - 222 , - 267 , - 500 , - 169 , - 26 , - 71 , - 304 , - 725 , - 582 , - 627 , - 108 , - 529 , - 386 , - 431 , - 664 , - 333 , - 190 , - 235 , - 468 , - 137 , - 746 , - 39 , - 272 , - 693 , - 550 , - 595 , - 76 , - 497 , - 354 , - 399 , - 632 , - 301 , - 158 , - 203 , - 436 , - 105 , - 714 , - 7 , - 240 , - 661 , - 518 , - 563 , - 44 , - 465 , - 322 , - 367 , - 600 , - 269 , - 126 , - 171 , - 404 , - 73 , - 682 , - 727 , - 208 , - 629 , - 486 , - 531 , - 12 , - 433 , - 290 , - 335 , - 568 , - 237 , - 94 , - 139 , - 372 , - 41 , - 650 , - 695 , - 176 , - 597 , - 454 , - 499 , - 732 , - 401 , - 258 , - 303 , - 536 , - 205 , - 62 , - 107 , - 340 , - 9 , - 618 , - 663 , - 144 , - 565 , - 422 , - 467 , - 700 , - 369 , - 226 , - 271 , - 504 , - 173 , - 30 , - 75 , - 308 , - 729 , - 586 , - 631 , - 112 , - 533 , - 390 , - 435 , - 668 , - 337 , - 194 , - 239 , - 472 , - 141 , - 750 , - 43 , - 276 , - 697 , - 554 , - 599 , - 80 , - 501 , - 358 , - 403 , - 636 , - 305 , - 162 , - 207 , - 440 , - 109 , - 718 , - 11 , - 244 , - 665 , - 522 , - 567 , - 48 , - 469 , - 326 , - 371 , - 604 , - 273 , - 130 , - 175 , - 408 , - 77 , - 686 , - 731 , - 212 , - 633 , - 490 , - 535 , - 16 , - 437 , - 294 , - 339 , - 572 , - 241 , - 98 , - 143 , - 376 , - 45 , - 654 , - 699 , - 180 , - 601 , - 458 , - 503 , - 736 , - 405 , - 262 , - 307 , - 540 , - 209 , - 66 , - 111 , - 344 , - 13 , - 622 , - 667 , - 148 , - 569 , - 426 , - 471 , - 704 , - 373 , - 230 , - 275 , - 508 , - 177 , - 34 , - 79 , - 312 , - 733 , - 590 , - 635 , - 116 , - 537 , - 394 , - 439 , - 672 , - 341 , - 198 , - 243 , - 476 , - 145 , - 2 , - 47 , - 280 , - 701 , - 558 , - 603 , - 84 , - 505 , - 362 , - 407 , - 640 , - 309 , - 166 , - 211 , - 444 , - 113 , - 722 , - 15 , - 248 , - 669 , - 526 , - 571 , - 52 , - 473 , - 330 , - 375 , - 608 , - 277 , - 134 , - 179 , - 412 , - 81 , - 690 , - 735 , - 216 , - 637 , - 494 , - 539 , - 20 , - 441 , - 298 , - 343 , - 576 , - 245 , - 102 , - 147 , - 380 , - 49 , - 658 , - 703 , - 184 , - 605 , - 462 , - 507 , - 740 , - 409 , - 266 , - 311 , - 544 , - 213 , - 70 , - 115 , - 348 , - 17 , - 626 , - 671 , - 152 , - 573 , - 430 , - 475 , - 708 , - 377 , - 234 , - 279 , - 512 , - 181 , - 38 , - 83 , - 316 , - 737 , - 594 , - 639 , - 120 , - 541 , - 398 , - 443 , - 676 , - 345 , - 202 , - 247 , - 480 , - 149 , - 6 , - 51 , - 284 , - 705 , - 562 , - 607 , - 88 , - 509 , - 366 , - 411 , - 644 , - 313 , - 170 , - 215 , - 448 , - 117 , - 726 , - 19 , - 252 , - 673 , - 530 , - 575 , - 56 , - 477 , - 334 , - 379 , - 612 , - 281 , - 138 , - 183 , - 416 , - 85 , - 694 , - 739 , - 220 , - 641 , - 498 , - 543 , - 24 , - 445 , - 302 , - 347 , - 580 , - 249 , - 106 , - 151 , - 384 , - 53 , - 662 , - 707 , - 188 , - 609 , - 466 , - 511 , - 744 , - 413 , - 270 , - 315 , - 548 , - 217 , - 74 , - 119 , - 352 , - 21 , - 630 , - 675 , - 156 , - 577 , - 434 , - 479 , - 712 , - 381 , - 238 , - 283 , - 516 , - 185 , - 42 , - 87 , - 320 , - 741 , - 598 , - 643 , - 124 , - 545 , - 402 , - 447 , - 680 , - 349 , - 206 , - 251 , - 484 , - 153 , - 10 , - 55 , - 288 , - 709 , - 566 , - 611 , - 92 , - 513 , - 370 , - 415 , - 648 , - 317 , - 174 , - 219 , - 452 , - 121 , - 730 , - 23 , - 256 , - 677 , - 534 , - 579 , - 60 , - 481 , - 338 , - 383 , - 616 , - 285 , - 142 , - 187 , - 420 , - 89 , - 698 , - 743 , - 224 , - 645 , - 502 , - 547 , - 28 , - 449 , - 306 , - 351 , - 584 , - 253 , - 110 , - 155 , - 388 , - 57 , - 666 , - 711 , - 192 , - 613 , - 470 , - 515 , - 748 , - 417 , - 274 , - 319 , - 552 , - 221 , - 78 , - 123 , - 356 , - 25 , - 634 , - 679 , - 160 , - 581 , - 438 , - 483 , - 716 , - 385 , - 242 , - 287 , - 520 , - 189 , - 46 , - 91 , - 324 , - 745 , - 602 , - 647 , - 128 , - 549 , - 406 , - 451 , - 684 , - 353 , - 210 , - 255 , - 488 , - 157 , - 14 , - 59 , - 292 , - 713 , - 570 , - 615 , - 96 , - 517 , - 374 , - 419 , - 652 , - 321 , - 178 , - 223 , - 456 , - 125 , - 734 , - 27 , - 260 , - 681 , - 538 , - 583 , - 64 , - 485 , - 342 , - 387 , - 620 , - 289 , - 146 , - 191 , - 424 , - 93 , - 702 , - 747 , - 228 , - 649 , - 506 , - 551 , - 32 , - 453 , - 310 , - 355 , - 588 , - 257 , - 114 , - 159 , - 392 , - 61 , - 670 , - 715 , - 196 , - 617 , - 474 , - 519 , - 0 , - 697 , - 530 , - 267 , - 676 , - 221 , - 438 , - 559 , - 584 , - 513 , - 346 , - 83 , - 492 , - 37 , - 254 , - 375 , - 400 , - 329 , - 162 , - 667 , - 308 , - 621 , - 70 , - 191 , - 216 , - 145 , - 746 , - 483 , - 124 , - 437 , - 654 , - 7 , - 32 , - 729 , - 562 , - 299 , - 708 , - 253 , - 470 , - 591 , - 616 , - 545 , - 378 , - 115 , - 524 , - 69 , - 286 , - 407 , - 432 , - 361 , - 194 , - 699 , - 340 , - 653 , - 102 , - 223 , - 248 , - 177 , - 10 , - 515 , - 156 , - 469 , - 686 , - 39 , - 64 , - 761 , - 594 , - 331 , - 740 , - 285 , - 502 , - 623 , - 648 , - 577 , - 410 , - 147 , - 556 , - 101 , - 318 , - 439 , - 464 , - 393 , - 226 , - 731 , - 372 , - 685 , - 134 , - 255 , - 280 , - 209 , - 42 , - 547 , - 188 , - 501 , - 718 , - 71 , - 96 , - 25 , - 626 , - 363 , - 4 , - 317 , - 534 , - 655 , - 680 , - 609 , - 442 , - 179 , - 588 , - 133 , - 350 , - 471 , - 496 , - 425 , - 258 , - 763 , - 404 , - 717 , - 166 , - 287 , - 312 , - 241 , - 74 , - 579 , - 220 , - 533 , - 750 , - 103 , - 128 , - 57 , - 658 , - 395 , - 36 , - 349 , - 566 , - 687 , - 712 , - 641 , - 474 , - 211 , - 620 , - 165 , - 382 , - 503 , - 528 , - 457 , - 290 , - 27 , - 436 , - 749 , - 198 , - 319 , - 344 , - 273 , - 106 , - 611 , - 252 , - 565 , - 14 , - 135 , - 160 , - 89 , - 690 , - 427 , - 68 , - 381 , - 598 , - 719 , - 744 , - 673 , - 506 , - 243 , - 652 , - 197 , - 414 , - 535 , - 560 , - 489 , - 322 , - 59 , - 468 , - 13 , - 230 , - 351 , - 376 , - 305 , - 138 , - 643 , - 284 , - 597 , - 46 , - 167 , - 192 , - 121 , - 722 , - 459 , - 100 , - 413 , - 630 , - 751 , - 8 , - 705 , - 538 , - 275 , - 684 , - 229 , - 446 , - 567 , - 592 , - 521 , - 354 , - 91 , - 500 , - 45 , - 262 , - 383 , - 408 , - 337 , - 170 , - 675 , - 316 , - 629 , - 78 , - 199 , - 224 , - 153 , - 754 , - 491 , - 132 , - 445 , - 662 , - 15 , - 40 , - 737 , - 570 , - 307 , - 716 , - 261 , - 478 , - 599 , - 624 , - 553 , - 386 , - 123 , - 532 , - 77 , - 294 , - 415 , - 440 , - 369 , - 202 , - 707 , - 348 , - 661 , - 110 , - 231 , - 256 , - 185 , - 18 , - 523 , - 164 , - 477 , - 694 , - 47 , - 72 , - 1 , - 602 , - 339 , - 748 , - 293 , - 510 , - 631 , - 656 , - 585 , - 418 , - 155 , - 564 , - 109 , - 326 , - 447 , - 472 , - 401 , - 234 , - 739 , - 380 , - 693 , - 142 , - 263 , - 288 , - 217 , - 50 , - 555 , - 196 , - 509 , - 726 , - 79 , - 104 , - 33 , - 634 , - 371 , - 12 , - 325 , - 542 , - 663 , - 688 , - 617 , - 450 , - 187 , - 596 , - 141 , - 358 , - 479 , - 504 , - 433 , - 266 , - 3 , - 412 , - 725 , - 174 , - 295 , - 320 , - 249 , - 82 , - 587 , - 228 , - 541 , - 758 , - 111 , - 136 , - 65 , - 666 , - 403 , - 44 , - 357 , - 574 , - 695 , - 720 , - 649 , - 482 , - 219 , - 628 , - 173 , - 390 , - 511 , - 536 , - 465 , - 298 , - 35 , - 444 , - 757 , - 206 , - 327 , - 352 , - 281 , - 114 , - 619 , - 260 , - 573 , - 22 , - 143 , - 168 , - 97 , - 698 , - 435 , - 76 , - 389 , - 606 , - 727 , - 752 , - 681 , - 514 , - 251 , - 660 , - 205 , - 422 , - 543 , - 568 , - 497 , - 330 , - 67 , - 476 , - 21 , - 238 , - 359 , - 384 , - 313 , - 146 , - 651 , - 292 , - 605 , - 54 , - 175 , - 200 , - 129 , - 730 , - 467 , - 108 , - 421 , - 638 , - 759 , - 16 , - 713 , - 546 , - 283 , - 692 , - 237 , - 454 , - 575 , - 600 , - 529 , - 362 , - 99 , - 508 , - 53 , - 270 , - 391 , - 416 , - 345 , - 178 , - 683 , - 324 , - 637 , - 86 , - 207 , - 232 , - 161 , - 762 , - 499 , - 140 , - 453 , - 670 , - 23 , - 48 , - 745 , - 578 , - 315 , - 724 , - 269 , - 486 , - 607 , - 632 , - 561 , - 394 , - 131 , - 540 , - 85 , - 302 , - 423 , - 448 , - 377 , - 210 , - 715 , - 356 , - 669 , - 118 , - 239 , - 264 , - 193 , - 26 , - 531 , - 172 , - 485 , - 702 , - 55 , - 80 , - 9 , - 610 , - 347 , - 756 , - 301 , - 518 , - 639 , - 664 , - 593 , - 426 , - 163 , - 572 , - 117 , - 334 , - 455 , - 480 , - 409 , - 242 , - 747 , - 388 , - 701 , - 150 , - 271 , - 296 , - 225 , - 58 , - 563 , - 204 , - 517 , - 734 , - 87 , - 112 , - 41 , - 642 , - 379 , - 20 , - 333 , - 550 , - 671 , - 696 , - 625 , - 458 , - 195 , - 604 , - 149 , - 366 , - 487 , - 512 , - 441 , - 274 , - 11 , - 420 , - 733 , - 182 , - 303 , - 328 , - 257 , - 90 , - 595 , - 236 , - 549 , - 766 , - 119 , - 144 , - 73 , - 674 , - 411 , - 52 , - 365 , - 582 , - 703 , - 728 , - 657 , - 490 , - 227 , - 636 , - 181 , - 398 , - 519 , - 544 , - 473 , - 306 , - 43 , - 452 , - 765 , - 214 , - 335 , - 360 , - 289 , - 122 , - 627 , - 268 , - 581 , - 30 , - 151 , - 176 , - 105 , - 706 , - 443 , - 84 , - 397 , - 614 , - 735 , - 760 , - 689 , - 522 , - 259 , - 668 , - 213 , - 430 , - 551 , - 576 , - 505 , - 338 , - 75 , - 484 , - 29 , - 246 , - 367 , - 392 , - 321 , - 154 , - 659 , - 300 , - 613 , - 62 , - 183 , - 208 , - 137 , - 738 , - 475 , - 116 , - 429 , - 646 , - 767 , - 24 , - 721 , - 554 , - 291 , - 700 , - 245 , - 462 , - 583 , - 608 , - 537 , - 370 , - 107 , - 516 , - 61 , - 278 , - 399 , - 424 , - 353 , - 186 , - 691 , - 332 , - 645 , - 94 , - 215 , - 240 , - 169 , - 2 , - 507 , - 148 , - 461 , - 678 , - 31 , - 56 , - 753 , - 586 , - 323 , - 732 , - 277 , - 494 , - 615 , - 640 , - 569 , - 402 , - 139 , - 548 , - 93 , - 310 , - 431 , - 456 , - 385 , - 218 , - 723 , - 364 , - 677 , - 126 , - 247 , - 272 , - 201 , - 34 , - 539 , - 180 , - 493 , - 710 , - 63 , - 88 , - 17 , - 618 , - 355 , - 764 , - 309 , - 526 , - 647 , - 672 , - 601 , - 434 , - 171 , - 580 , - 125 , - 342 , - 463 , - 488 , - 417 , - 250 , - 755 , - 396 , - 709 , - 158 , - 279 , - 304 , - 233 , - 66 , - 571 , - 212 , - 525 , - 742 , - 95 , - 120 , - 49 , - 650 , - 387 , - 28 , - 341 , - 558 , - 679 , - 704 , - 633 , - 466 , - 203 , - 612 , - 157 , - 374 , - 495 , - 520 , - 449 , - 282 , - 19 , - 428 , - 741 , - 190 , - 311 , - 336 , - 265 , - 98 , - 603 , - 244 , - 557 , - 6 , - 127 , - 152 , - 81 , - 682 , - 419 , - 60 , - 373 , - 590 , - 711 , - 736 , - 665 , - 498 , - 235 , - 644 , - 189 , - 406 , - 527 , - 552 , - 481 , - 314 , - 51 , - 460 , - 5 , - 222 , - 343 , - 368 , - 297 , - 130 , - 635 , - 276 , - 589 , - 38 , - 159 , - 184 , - 113 , - 714 , - 451 , - 92 , - 405 , - 622 , - 743 , - 0 , - 247 , - 298 , - 153 , - 596 , - 59 , - 110 , - 749 , - 408 , - 655 , - 706 , - 561 , - 220 , - 467 , - 518 , - 373 , - 32 , - 279 , - 330 , - 185 , - 628 , - 91 , - 142 , - 781 , - 440 , - 687 , - 738 , - 593 , - 252 , - 499 , - 550 , - 405 , - 64 , - 311 , - 362 , - 217 , - 660 , - 123 , - 174 , - 29 , - 472 , - 719 , - 770 , - 625 , - 284 , - 531 , - 582 , - 437 , - 96 , - 343 , - 394 , - 249 , - 692 , - 155 , - 206 , - 61 , - 504 , - 751 , - 18 , - 657 , - 316 , - 563 , - 614 , - 469 , - 128 , - 375 , - 426 , - 281 , - 724 , - 187 , - 238 , - 93 , - 536 , - 783 , - 50 , - 689 , - 348 , - 595 , - 646 , - 501 , - 160 , - 407 , - 458 , - 313 , - 756 , - 219 , - 270 , - 125 , - 568 , - 31 , - 82 , - 721 , - 380 , - 627 , - 678 , - 533 , - 192 , - 439 , - 490 , - 345 , - 4 , - 251 , - 302 , - 157 , - 600 , - 63 , - 114 , - 753 , - 412 , - 659 , - 710 , - 565 , - 224 , - 471 , - 522 , - 377 , - 36 , - 283 , - 334 , - 189 , - 632 , - 95 , - 146 , - 1 , - 444 , - 691 , - 742 , - 597 , - 256 , - 503 , - 554 , - 409 , - 68 , - 315 , - 366 , - 221 , - 664 , - 127 , - 178 , - 33 , - 476 , - 723 , - 774 , - 629 , - 288 , - 535 , - 586 , - 441 , - 100 , - 347 , - 398 , - 253 , - 696 , - 159 , - 210 , - 65 , - 508 , - 755 , - 22 , - 661 , - 320 , - 567 , - 618 , - 473 , - 132 , - 379 , - 430 , - 285 , - 728 , - 191 , - 242 , - 97 , - 540 , - 3 , - 54 , - 693 , - 352 , - 599 , - 650 , - 505 , - 164 , - 411 , - 462 , - 317 , - 760 , - 223 , - 274 , - 129 , - 572 , - 35 , - 86 , - 725 , - 384 , - 631 , - 682 , - 537 , - 196 , - 443 , - 494 , - 349 , - 8 , - 255 , - 306 , - 161 , - 604 , - 67 , - 118 , - 757 , - 416 , - 663 , - 714 , - 569 , - 228 , - 475 , - 526 , - 381 , - 40 , - 287 , - 338 , - 193 , - 636 , - 99 , - 150 , - 5 , - 448 , - 695 , - 746 , - 601 , - 260 , - 507 , - 558 , - 413 , - 72 , - 319 , - 370 , - 225 , - 668 , - 131 , - 182 , - 37 , - 480 , - 727 , - 778 , - 633 , - 292 , - 539 , - 590 , - 445 , - 104 , - 351 , - 402 , - 257 , - 700 , - 163 , - 214 , - 69 , - 512 , - 759 , - 26 , - 665 , - 324 , - 571 , - 622 , - 477 , - 136 , - 383 , - 434 , - 289 , - 732 , - 195 , - 246 , - 101 , - 544 , - 7 , - 58 , - 697 , - 356 , - 603 , - 654 , - 509 , - 168 , - 415 , - 466 , - 321 , - 764 , - 227 , - 278 , - 133 , - 576 , - 39 , - 90 , - 729 , - 388 , - 635 , - 686 , - 541 , - 200 , - 447 , - 498 , - 353 , - 12 , - 259 , - 310 , - 165 , - 608 , - 71 , - 122 , - 761 , - 420 , - 667 , - 718 , - 573 , - 232 , - 479 , - 530 , - 385 , - 44 , - 291 , - 342 , - 197 , - 640 , - 103 , - 154 , - 9 , - 452 , - 699 , - 750 , - 605 , - 264 , - 511 , - 562 , - 417 , - 76 , - 323 , - 374 , - 229 , - 672 , - 135 , - 186 , - 41 , - 484 , - 731 , - 782 , - 637 , - 296 , - 543 , - 594 , - 449 , - 108 , - 355 , - 406 , - 261 , - 704 , - 167 , - 218 , - 73 , - 516 , - 763 , - 30 , - 669 , - 328 , - 575 , - 626 , - 481 , - 140 , - 387 , - 438 , - 293 , - 736 , - 199 , - 250 , - 105 , - 548 , - 11 , - 62 , - 701 , - 360 , - 607 , - 658 , - 513 , - 172 , - 419 , - 470 , - 325 , - 768 , - 231 , - 282 , - 137 , - 580 , - 43 , - 94 , - 733 , - 392 , - 639 , - 690 , - 545 , - 204 , - 451 , - 502 , - 357 , - 16 , - 263 , - 314 , - 169 , - 612 , - 75 , - 126 , - 765 , - 424 , - 671 , - 722 , - 577 , - 236 , - 483 , - 534 , - 389 , - 48 , - 295 , - 346 , - 201 , - 644 , - 107 , - 158 , - 13 , - 456 , - 703 , - 754 , - 609 , - 268 , - 515 , - 566 , - 421 , - 80 , - 327 , - 378 , - 233 , - 676 , - 139 , - 190 , - 45 , - 488 , - 735 , - 2 , - 641 , - 300 , - 547 , - 598 , - 453 , - 112 , - 359 , - 410 , - 265 , - 708 , - 171 , - 222 , - 77 , - 520 , - 767 , - 34 , - 673 , - 332 , - 579 , - 630 , - 485 , - 144 , - 391 , - 442 , - 297 , - 740 , - 203 , - 254 , - 109 , - 552 , - 15 , - 66 , - 705 , - 364 , - 611 , - 662 , - 517 , - 176 , - 423 , - 474 , - 329 , - 772 , - 235 , - 286 , - 141 , - 584 , - 47 , - 98 , - 737 , - 396 , - 643 , - 694 , - 549 , - 208 , - 455 , - 506 , - 361 , - 20 , - 267 , - 318 , - 173 , - 616 , - 79 , - 130 , - 769 , - 428 , - 675 , - 726 , - 581 , - 240 , - 487 , - 538 , - 393 , - 52 , - 299 , - 350 , - 205 , - 648 , - 111 , - 162 , - 17 , - 460 , - 707 , - 758 , - 613 , - 272 , - 519 , - 570 , - 425 , - 84 , - 331 , - 382 , - 237 , - 680 , - 143 , - 194 , - 49 , - 492 , - 739 , - 6 , - 645 , - 304 , - 551 , - 602 , - 457 , - 116 , - 363 , - 414 , - 269 , - 712 , - 175 , - 226 , - 81 , - 524 , - 771 , - 38 , - 677 , - 336 , - 583 , - 634 , - 489 , - 148 , - 395 , - 446 , - 301 , - 744 , - 207 , - 258 , - 113 , - 556 , - 19 , - 70 , - 709 , - 368 , - 615 , - 666 , - 521 , - 180 , - 427 , - 478 , - 333 , - 776 , - 239 , - 290 , - 145 , - 588 , - 51 , - 102 , - 741 , - 400 , - 647 , - 698 , - 553 , - 212 , - 459 , - 510 , - 365 , - 24 , - 271 , - 322 , - 177 , - 620 , - 83 , - 134 , - 773 , - 432 , - 679 , - 730 , - 585 , - 244 , - 491 , - 542 , - 397 , - 56 , - 303 , - 354 , - 209 , - 652 , - 115 , - 166 , - 21 , - 464 , - 711 , - 762 , - 617 , - 276 , - 523 , - 574 , - 429 , - 88 , - 335 , - 386 , - 241 , - 684 , - 147 , - 198 , - 53 , - 496 , - 743 , - 10 , - 649 , - 308 , - 555 , - 606 , - 461 , - 120 , - 367 , - 418 , - 273 , - 716 , - 179 , - 230 , - 85 , - 528 , - 775 , - 42 , - 681 , - 340 , - 587 , - 638 , - 493 , - 152 , - 399 , - 450 , - 305 , - 748 , - 211 , - 262 , - 117 , - 560 , - 23 , - 74 , - 713 , - 372 , - 619 , - 670 , - 525 , - 184 , - 431 , - 482 , - 337 , - 780 , - 243 , - 294 , - 149 , - 592 , - 55 , - 106 , - 745 , - 404 , - 651 , - 702 , - 557 , - 216 , - 463 , - 514 , - 369 , - 28 , - 275 , - 326 , - 181 , - 624 , - 87 , - 138 , - 777 , - 436 , - 683 , - 734 , - 589 , - 248 , - 495 , - 546 , - 401 , - 60 , - 307 , - 358 , - 213 , - 656 , - 119 , - 170 , - 25 , - 468 , - 715 , - 766 , - 621 , - 280 , - 527 , - 578 , - 433 , - 92 , - 339 , - 390 , - 245 , - 688 , - 151 , - 202 , - 57 , - 500 , - 747 , - 14 , - 653 , - 312 , - 559 , - 610 , - 465 , - 124 , - 371 , - 422 , - 277 , - 720 , - 183 , - 234 , - 89 , - 532 , - 779 , - 46 , - 685 , - 344 , - 591 , - 642 , - 497 , - 156 , - 403 , - 454 , - 309 , - 752 , - 215 , - 266 , - 121 , - 564 , - 27 , - 78 , - 717 , - 376 , - 623 , - 674 , - 529 , - 188 , - 435 , - 486 , - 341 , - 0 , - 193 , - 66 , - 419 , - 452 , - 165 , - 358 , - 231 , - 584 , - 617 , - 330 , - 523 , - 396 , - 749 , - 782 , - 495 , - 688 , - 561 , - 114 , - 147 , - 660 , - 53 , - 726 , - 279 , - 312 , - 25 , - 218 , - 91 , - 444 , - 477 , - 190 , - 383 , - 256 , - 609 , - 642 , - 355 , - 548 , - 421 , - 774 , - 7 , - 520 , - 713 , - 586 , - 139 , - 172 , - 685 , - 78 , - 751 , - 304 , - 337 , - 50 , - 243 , - 116 , - 469 , - 502 , - 215 , - 408 , - 281 , - 634 , - 667 , - 380 , - 573 , - 446 , - 799 , - 32 , - 545 , - 738 , - 611 , - 164 , - 197 , - 710 , - 103 , - 776 , - 329 , - 362 , - 75 , - 268 , - 141 , - 494 , - 527 , - 240 , - 433 , - 306 , - 659 , - 692 , - 405 , - 598 , - 471 , - 24 , - 57 , - 570 , - 763 , - 636 , - 189 , - 222 , - 735 , - 128 , - 1 , - 354 , - 387 , - 100 , - 293 , - 166 , - 519 , - 552 , - 265 , - 458 , - 331 , - 684 , - 717 , - 430 , - 623 , - 496 , - 49 , - 82 , - 595 , - 788 , - 661 , - 214 , - 247 , - 760 , - 153 , - 26 , - 379 , - 412 , - 125 , - 318 , - 191 , - 544 , - 577 , - 290 , - 483 , - 356 , - 709 , - 742 , - 455 , - 648 , - 521 , - 74 , - 107 , - 620 , - 13 , - 686 , - 239 , - 272 , - 785 , - 178 , - 51 , - 404 , - 437 , - 150 , - 343 , - 216 , - 569 , - 602 , - 315 , - 508 , - 381 , - 734 , - 767 , - 480 , - 673 , - 546 , - 99 , - 132 , - 645 , - 38 , - 711 , - 264 , - 297 , - 10 , - 203 , - 76 , - 429 , - 462 , - 175 , - 368 , - 241 , - 594 , - 627 , - 340 , - 533 , - 406 , - 759 , - 792 , - 505 , - 698 , - 571 , - 124 , - 157 , - 670 , - 63 , - 736 , - 289 , - 322 , - 35 , - 228 , - 101 , - 454 , - 487 , - 200 , - 393 , - 266 , - 619 , - 652 , - 365 , - 558 , - 431 , - 784 , - 17 , - 530 , - 723 , - 596 , - 149 , - 182 , - 695 , - 88 , - 761 , - 314 , - 347 , - 60 , - 253 , - 126 , - 479 , - 512 , - 225 , - 418 , - 291 , - 644 , - 677 , - 390 , - 583 , - 456 , - 9 , - 42 , - 555 , - 748 , - 621 , - 174 , - 207 , - 720 , - 113 , - 786 , - 339 , - 372 , - 85 , - 278 , - 151 , - 504 , - 537 , - 250 , - 443 , - 316 , - 669 , - 702 , - 415 , - 608 , - 481 , - 34 , - 67 , - 580 , - 773 , - 646 , - 199 , - 232 , - 745 , - 138 , - 11 , - 364 , - 397 , - 110 , - 303 , - 176 , - 529 , - 562 , - 275 , - 468 , - 341 , - 694 , - 727 , - 440 , - 633 , - 506 , - 59 , - 92 , - 605 , - 798 , - 671 , - 224 , - 257 , - 770 , - 163 , - 36 , - 389 , - 422 , - 135 , - 328 , - 201 , - 554 , - 587 , - 300 , - 493 , - 366 , - 719 , - 752 , - 465 , - 658 , - 531 , - 84 , - 117 , - 630 , - 23 , - 696 , - 249 , - 282 , - 795 , - 188 , - 61 , - 414 , - 447 , - 160 , - 353 , - 226 , - 579 , - 612 , - 325 , - 518 , - 391 , - 744 , - 777 , - 490 , - 683 , - 556 , - 109 , - 142 , - 655 , - 48 , - 721 , - 274 , - 307 , - 20 , - 213 , - 86 , - 439 , - 472 , - 185 , - 378 , - 251 , - 604 , - 637 , - 350 , - 543 , - 416 , - 769 , - 2 , - 515 , - 708 , - 581 , - 134 , - 167 , - 680 , - 73 , - 746 , - 299 , - 332 , - 45 , - 238 , - 111 , - 464 , - 497 , - 210 , - 403 , - 276 , - 629 , - 662 , - 375 , - 568 , - 441 , - 794 , - 27 , - 540 , - 733 , - 606 , - 159 , - 192 , - 705 , - 98 , - 771 , - 324 , - 357 , - 70 , - 263 , - 136 , - 489 , - 522 , - 235 , - 428 , - 301 , - 654 , - 687 , - 400 , - 593 , - 466 , - 19 , - 52 , - 565 , - 758 , - 631 , - 184 , - 217 , - 730 , - 123 , - 796 , - 349 , - 382 , - 95 , - 288 , - 161 , - 514 , - 547 , - 260 , - 453 , - 326 , - 679 , - 712 , - 425 , - 618 , - 491 , - 44 , - 77 , - 590 , - 783 , - 656 , - 209 , - 242 , - 755 , - 148 , - 21 , - 374 , - 407 , - 120 , - 313 , - 186 , - 539 , - 572 , - 285 , - 478 , - 351 , - 704 , - 737 , - 450 , - 643 , - 516 , - 69 , - 102 , - 615 , - 8 , - 681 , - 234 , - 267 , - 780 , - 173 , - 46 , - 399 , - 432 , - 145 , - 338 , - 211 , - 564 , - 597 , - 310 , - 503 , - 376 , - 729 , - 762 , - 475 , - 668 , - 541 , - 94 , - 127 , - 640 , - 33 , - 706 , - 259 , - 292 , - 5 , - 198 , - 71 , - 424 , - 457 , - 170 , - 363 , - 236 , - 589 , - 622 , - 335 , - 528 , - 401 , - 754 , - 787 , - 500 , - 693 , - 566 , - 119 , - 152 , - 665 , - 58 , - 731 , - 284 , - 317 , - 30 , - 223 , - 96 , - 449 , - 482 , - 195 , - 388 , - 261 , - 614 , - 647 , - 360 , - 553 , - 426 , - 779 , - 12 , - 525 , - 718 , - 591 , - 144 , - 177 , - 690 , - 83 , - 756 , - 309 , - 342 , - 55 , - 248 , - 121 , - 474 , - 507 , - 220 , - 413 , - 286 , - 639 , - 672 , - 385 , - 578 , - 451 , - 4 , - 37 , - 550 , - 743 , - 616 , - 169 , - 202 , - 715 , - 108 , - 781 , - 334 , - 367 , - 80 , - 273 , - 146 , - 499 , - 532 , - 245 , - 438 , - 311 , - 664 , - 697 , - 410 , - 603 , - 476 , - 29 , - 62 , - 575 , - 768 , - 641 , - 194 , - 227 , - 740 , - 133 , - 6 , - 359 , - 392 , - 105 , - 298 , - 171 , - 524 , - 557 , - 270 , - 463 , - 336 , - 689 , - 722 , - 435 , - 628 , - 501 , - 54 , - 87 , - 600 , - 793 , - 666 , - 219 , - 252 , - 765 , - 158 , - 31 , - 384 , - 417 , - 130 , - 323 , - 196 , - 549 , - 582 , - 295 , - 488 , - 361 , - 714 , - 747 , - 460 , - 653 , - 526 , - 79 , - 112 , - 625 , - 18 , - 691 , - 244 , - 277 , - 790 , - 183 , - 56 , - 409 , - 442 , - 155 , - 348 , - 221 , - 574 , - 607 , - 320 , - 513 , - 386 , - 739 , - 772 , - 485 , - 678 , - 551 , - 104 , - 137 , - 650 , - 43 , - 716 , - 269 , - 302 , - 15 , - 208 , - 81 , - 434 , - 467 , - 180 , - 373 , - 246 , - 599 , - 632 , - 345 , - 538 , - 411 , - 764 , - 797 , - 510 , - 703 , - 576 , - 129 , - 162 , - 675 , - 68 , - 741 , - 294 , - 327 , - 40 , - 233 , - 106 , - 459 , - 492 , - 205 , - 398 , - 271 , - 624 , - 657 , - 370 , - 563 , - 436 , - 789 , - 22 , - 535 , - 728 , - 601 , - 154 , - 187 , - 700 , - 93 , - 766 , - 319 , - 352 , - 65 , - 258 , - 131 , - 484 , - 517 , - 230 , - 423 , - 296 , - 649 , - 682 , - 395 , - 588 , - 461 , - 14 , - 47 , - 560 , - 753 , - 626 , - 179 , - 212 , - 725 , - 118 , - 791 , - 344 , - 377 , - 90 , - 283 , - 156 , - 509 , - 542 , - 255 , - 448 , - 321 , - 674 , - 707 , - 420 , - 613 , - 486 , - 39 , - 72 , - 585 , - 778 , - 651 , - 204 , - 237 , - 750 , - 143 , - 16 , - 369 , - 402 , - 115 , - 308 , - 181 , - 534 , - 567 , - 280 , - 473 , - 346 , - 699 , - 732 , - 445 , - 638 , - 511 , - 64 , - 97 , - 610 , - 3 , - 676 , - 229 , - 262 , - 775 , - 168 , - 41 , - 394 , - 427 , - 140 , - 333 , - 206 , - 559 , - 592 , - 305 , - 498 , - 371 , - 724 , - 757 , - 470 , - 663 , - 536 , - 89 , - 122 , - 635 , - 28 , - 701 , - 254 , - 287 , - 0 , - 661 , - 710 , - 147 , - 604 , - 449 , - 498 , - 751 , - 392 , - 237 , - 286 , - 539 , - 180 , - 25 , - 74 , - 327 , - 784 , - 629 , - 678 , - 115 , - 572 , - 417 , - 466 , - 719 , - 360 , - 205 , - 254 , - 507 , - 148 , - 809 , - 42 , - 295 , - 752 , - 597 , - 646 , - 83 , - 540 , - 385 , - 434 , - 687 , - 328 , - 173 , - 222 , - 475 , - 116 , - 777 , - 10 , - 263 , - 720 , - 565 , - 614 , - 51 , - 508 , - 353 , - 402 , - 655 , - 296 , - 141 , - 190 , - 443 , - 84 , - 745 , - 794 , - 231 , - 688 , - 533 , - 582 , - 19 , - 476 , - 321 , - 370 , - 623 , - 264 , - 109 , - 158 , - 411 , - 52 , - 713 , - 762 , - 199 , - 656 , - 501 , - 550 , - 803 , - 444 , - 289 , - 338 , - 591 , - 232 , - 77 , - 126 , - 379 , - 20 , - 681 , - 730 , - 167 , - 624 , - 469 , - 518 , - 771 , - 412 , - 257 , - 306 , - 559 , - 200 , - 45 , - 94 , - 347 , - 804 , - 649 , - 698 , - 135 , - 592 , - 437 , - 486 , - 739 , - 380 , - 225 , - 274 , - 527 , - 168 , - 13 , - 62 , - 315 , - 772 , - 617 , - 666 , - 103 , - 560 , - 405 , - 454 , - 707 , - 348 , - 193 , - 242 , - 495 , - 136 , - 797 , - 30 , - 283 , - 740 , - 585 , - 634 , - 71 , - 528 , - 373 , - 422 , - 675 , - 316 , - 161 , - 210 , - 463 , - 104 , - 765 , - 814 , - 251 , - 708 , - 553 , - 602 , - 39 , - 496 , - 341 , - 390 , - 643 , - 284 , - 129 , - 178 , - 431 , - 72 , - 733 , - 782 , - 219 , - 676 , - 521 , - 570 , - 7 , - 464 , - 309 , - 358 , - 611 , - 252 , - 97 , - 146 , - 399 , - 40 , - 701 , - 750 , - 187 , - 644 , - 489 , - 538 , - 791 , - 432 , - 277 , - 326 , - 579 , - 220 , - 65 , - 114 , - 367 , - 8 , - 669 , - 718 , - 155 , - 612 , - 457 , - 506 , - 759 , - 400 , - 245 , - 294 , - 547 , - 188 , - 33 , - 82 , - 335 , - 792 , - 637 , - 686 , - 123 , - 580 , - 425 , - 474 , - 727 , - 368 , - 213 , - 262 , - 515 , - 156 , - 1 , - 50 , - 303 , - 760 , - 605 , - 654 , - 91 , - 548 , - 393 , - 442 , - 695 , - 336 , - 181 , - 230 , - 483 , - 124 , - 785 , - 18 , - 271 , - 728 , - 573 , - 622 , - 59 , - 516 , - 361 , - 410 , - 663 , - 304 , - 149 , - 198 , - 451 , - 92 , - 753 , - 802 , - 239 , - 696 , - 541 , - 590 , - 27 , - 484 , - 329 , - 378 , - 631 , - 272 , - 117 , - 166 , - 419 , - 60 , - 721 , - 770 , - 207 , - 664 , - 509 , - 558 , - 811 , - 452 , - 297 , - 346 , - 599 , - 240 , - 85 , - 134 , - 387 , - 28 , - 689 , - 738 , - 175 , - 632 , - 477 , - 526 , - 779 , - 420 , - 265 , - 314 , - 567 , - 208 , - 53 , - 102 , - 355 , - 812 , - 657 , - 706 , - 143 , - 600 , - 445 , - 494 , - 747 , - 388 , - 233 , - 282 , - 535 , - 176 , - 21 , - 70 , - 323 , - 780 , - 625 , - 674 , - 111 , - 568 , - 413 , - 462 , - 715 , - 356 , - 201 , - 250 , - 503 , - 144 , - 805 , - 38 , - 291 , - 748 , - 593 , - 642 , - 79 , - 536 , - 381 , - 430 , - 683 , - 324 , - 169 , - 218 , - 471 , - 112 , - 773 , - 6 , - 259 , - 716 , - 561 , - 610 , - 47 , - 504 , - 349 , - 398 , - 651 , - 292 , - 137 , - 186 , - 439 , - 80 , - 741 , - 790 , - 227 , - 684 , - 529 , - 578 , - 15 , - 472 , - 317 , - 366 , - 619 , - 260 , - 105 , - 154 , - 407 , - 48 , - 709 , - 758 , - 195 , - 652 , - 497 , - 546 , - 799 , - 440 , - 285 , - 334 , - 587 , - 228 , - 73 , - 122 , - 375 , - 16 , - 677 , - 726 , - 163 , - 620 , - 465 , - 514 , - 767 , - 408 , - 253 , - 302 , - 555 , - 196 , - 41 , - 90 , - 343 , - 800 , - 645 , - 694 , - 131 , - 588 , - 433 , - 482 , - 735 , - 376 , - 221 , - 270 , - 523 , - 164 , - 9 , - 58 , - 311 , - 768 , - 613 , - 662 , - 99 , - 556 , - 401 , - 450 , - 703 , - 344 , - 189 , - 238 , - 491 , - 132 , - 793 , - 26 , - 279 , - 736 , - 581 , - 630 , - 67 , - 524 , - 369 , - 418 , - 671 , - 312 , - 157 , - 206 , - 459 , - 100 , - 761 , - 810 , - 247 , - 704 , - 549 , - 598 , - 35 , - 492 , - 337 , - 386 , - 639 , - 280 , - 125 , - 174 , - 427 , - 68 , - 729 , - 778 , - 215 , - 672 , - 517 , - 566 , - 3 , - 460 , - 305 , - 354 , - 607 , - 248 , - 93 , - 142 , - 395 , - 36 , - 697 , - 746 , - 183 , - 640 , - 485 , - 534 , - 787 , - 428 , - 273 , - 322 , - 575 , - 216 , - 61 , - 110 , - 363 , - 4 , - 665 , - 714 , - 151 , - 608 , - 453 , - 502 , - 755 , - 396 , - 241 , - 290 , - 543 , - 184 , - 29 , - 78 , - 331 , - 788 , - 633 , - 682 , - 119 , - 576 , - 421 , - 470 , - 723 , - 364 , - 209 , - 258 , - 511 , - 152 , - 813 , - 46 , - 299 , - 756 , - 601 , - 650 , - 87 , - 544 , - 389 , - 438 , - 691 , - 332 , - 177 , - 226 , - 479 , - 120 , - 781 , - 14 , - 267 , - 724 , - 569 , - 618 , - 55 , - 512 , - 357 , - 406 , - 659 , - 300 , - 145 , - 194 , - 447 , - 88 , - 749 , - 798 , - 235 , - 692 , - 537 , - 586 , - 23 , - 480 , - 325 , - 374 , - 627 , - 268 , - 113 , - 162 , - 415 , - 56 , - 717 , - 766 , - 203 , - 660 , - 505 , - 554 , - 807 , - 448 , - 293 , - 342 , - 595 , - 236 , - 81 , - 130 , - 383 , - 24 , - 685 , - 734 , - 171 , - 628 , - 473 , - 522 , - 775 , - 416 , - 261 , - 310 , - 563 , - 204 , - 49 , - 98 , - 351 , - 808 , - 653 , - 702 , - 139 , - 596 , - 441 , - 490 , - 743 , - 384 , - 229 , - 278 , - 531 , - 172 , - 17 , - 66 , - 319 , - 776 , - 621 , - 670 , - 107 , - 564 , - 409 , - 458 , - 711 , - 352 , - 197 , - 246 , - 499 , - 140 , - 801 , - 34 , - 287 , - 744 , - 589 , - 638 , - 75 , - 532 , - 377 , - 426 , - 679 , - 320 , - 165 , - 214 , - 467 , - 108 , - 769 , - 2 , - 255 , - 712 , - 557 , - 606 , - 43 , - 500 , - 345 , - 394 , - 647 , - 288 , - 133 , - 182 , - 435 , - 76 , - 737 , - 786 , - 223 , - 680 , - 525 , - 574 , - 11 , - 468 , - 313 , - 362 , - 615 , - 256 , - 101 , - 150 , - 403 , - 44 , - 705 , - 754 , - 191 , - 648 , - 493 , - 542 , - 795 , - 436 , - 281 , - 330 , - 583 , - 224 , - 69 , - 118 , - 371 , - 12 , - 673 , - 722 , - 159 , - 616 , - 461 , - 510 , - 763 , - 404 , - 249 , - 298 , - 551 , - 192 , - 37 , - 86 , - 339 , - 796 , - 641 , - 690 , - 127 , - 584 , - 429 , - 478 , - 731 , - 372 , - 217 , - 266 , - 519 , - 160 , - 5 , - 54 , - 307 , - 764 , - 609 , - 658 , - 95 , - 552 , - 397 , - 446 , - 699 , - 340 , - 185 , - 234 , - 487 , - 128 , - 789 , - 22 , - 275 , - 732 , - 577 , - 626 , - 63 , - 520 , - 365 , - 414 , - 667 , - 308 , - 153 , - 202 , - 455 , - 96 , - 757 , - 806 , - 243 , - 700 , - 545 , - 594 , - 31 , - 488 , - 333 , - 382 , - 635 , - 276 , - 121 , - 170 , - 423 , - 64 , - 725 , - 774 , - 211 , - 668 , - 513 , - 562 , - 815 , - 456 , - 301 , - 350 , - 603 , - 244 , - 89 , - 138 , - 391 , - 32 , - 693 , - 742 , - 179 , - 636 , - 481 , - 530 , - 783 , - 424 , - 269 , - 318 , - 571 , - 212 , - 57 , - 106 , - 359 , - 0 , - 181 , - 258 , - 231 , - 100 , - 697 , - 358 , - 747 , - 200 , - 381 , - 458 , - 431 , - 300 , - 65 , - 558 , - 115 , - 400 , - 581 , - 658 , - 631 , - 500 , - 265 , - 758 , - 315 , - 600 , - 781 , - 26 , - 831 , - 700 , - 465 , - 126 , - 515 , - 800 , - 149 , - 226 , - 199 , - 68 , - 665 , - 326 , - 715 , - 168 , - 349 , - 426 , - 399 , - 268 , - 33 , - 526 , - 83 , - 368 , - 549 , - 626 , - 599 , - 468 , - 233 , - 726 , - 283 , - 568 , - 749 , - 826 , - 799 , - 668 , - 433 , - 94 , - 483 , - 768 , - 117 , - 194 , - 167 , - 36 , - 633 , - 294 , - 683 , - 136 , - 317 , - 394 , - 367 , - 236 , - 1 , - 494 , - 51 , - 336 , - 517 , - 594 , - 567 , - 436 , - 201 , - 694 , - 251 , - 536 , - 717 , - 794 , - 767 , - 636 , - 401 , - 62 , - 451 , - 736 , - 85 , - 162 , - 135 , - 4 , - 601 , - 262 , - 651 , - 104 , - 285 , - 362 , - 335 , - 204 , - 801 , - 462 , - 19 , - 304 , - 485 , - 562 , - 535 , - 404 , - 169 , - 662 , - 219 , - 504 , - 685 , - 762 , - 735 , - 604 , - 369 , - 30 , - 419 , - 704 , - 53 , - 130 , - 103 , - 804 , - 569 , - 230 , - 619 , - 72 , - 253 , - 330 , - 303 , - 172 , - 769 , - 430 , - 819 , - 272 , - 453 , - 530 , - 503 , - 372 , - 137 , - 630 , - 187 , - 472 , - 653 , - 730 , - 703 , - 572 , - 337 , - 830 , - 387 , - 672 , - 21 , - 98 , - 71 , - 772 , - 537 , - 198 , - 587 , - 40 , - 221 , - 298 , - 271 , - 140 , - 737 , - 398 , - 787 , - 240 , - 421 , - 498 , - 471 , - 340 , - 105 , - 598 , - 155 , - 440 , - 621 , - 698 , - 671 , - 540 , - 305 , - 798 , - 355 , - 640 , - 821 , - 66 , - 39 , - 740 , - 505 , - 166 , - 555 , - 8 , - 189 , - 266 , - 239 , - 108 , - 705 , - 366 , - 755 , - 208 , - 389 , - 466 , - 439 , - 308 , - 73 , - 566 , - 123 , - 408 , - 589 , - 666 , - 639 , - 508 , - 273 , - 766 , - 323 , - 608 , - 789 , - 34 , - 7 , - 708 , - 473 , - 134 , - 523 , - 808 , - 157 , - 234 , - 207 , - 76 , - 673 , - 334 , - 723 , - 176 , - 357 , - 434 , - 407 , - 276 , - 41 , - 534 , - 91 , - 376 , - 557 , - 634 , - 607 , - 476 , - 241 , - 734 , - 291 , - 576 , - 757 , - 2 , - 807 , - 676 , - 441 , - 102 , - 491 , - 776 , - 125 , - 202 , - 175 , - 44 , - 641 , - 302 , - 691 , - 144 , - 325 , - 402 , - 375 , - 244 , - 9 , - 502 , - 59 , - 344 , - 525 , - 602 , - 575 , - 444 , - 209 , - 702 , - 259 , - 544 , - 725 , - 802 , - 775 , - 644 , - 409 , - 70 , - 459 , - 744 , - 93 , - 170 , - 143 , - 12 , - 609 , - 270 , - 659 , - 112 , - 293 , - 370 , - 343 , - 212 , - 809 , - 470 , - 27 , - 312 , - 493 , - 570 , - 543 , - 412 , - 177 , - 670 , - 227 , - 512 , - 693 , - 770 , - 743 , - 612 , - 377 , - 38 , - 427 , - 712 , - 61 , - 138 , - 111 , - 812 , - 577 , - 238 , - 627 , - 80 , - 261 , - 338 , - 311 , - 180 , - 777 , - 438 , - 827 , - 280 , - 461 , - 538 , - 511 , - 380 , - 145 , - 638 , - 195 , - 480 , - 661 , - 738 , - 711 , - 580 , - 345 , - 6 , - 395 , - 680 , - 29 , - 106 , - 79 , - 780 , - 545 , - 206 , - 595 , - 48 , - 229 , - 306 , - 279 , - 148 , - 745 , - 406 , - 795 , - 248 , - 429 , - 506 , - 479 , - 348 , - 113 , - 606 , - 163 , - 448 , - 629 , - 706 , - 679 , - 548 , - 313 , - 806 , - 363 , - 648 , - 829 , - 74 , - 47 , - 748 , - 513 , - 174 , - 563 , - 16 , - 197 , - 274 , - 247 , - 116 , - 713 , - 374 , - 763 , - 216 , - 397 , - 474 , - 447 , - 316 , - 81 , - 574 , - 131 , - 416 , - 597 , - 674 , - 647 , - 516 , - 281 , - 774 , - 331 , - 616 , - 797 , - 42 , - 15 , - 716 , - 481 , - 142 , - 531 , - 816 , - 165 , - 242 , - 215 , - 84 , - 681 , - 342 , - 731 , - 184 , - 365 , - 442 , - 415 , - 284 , - 49 , - 542 , - 99 , - 384 , - 565 , - 642 , - 615 , - 484 , - 249 , - 742 , - 299 , - 584 , - 765 , - 10 , - 815 , - 684 , - 449 , - 110 , - 499 , - 784 , - 133 , - 210 , - 183 , - 52 , - 649 , - 310 , - 699 , - 152 , - 333 , - 410 , - 383 , - 252 , - 17 , - 510 , - 67 , - 352 , - 533 , - 610 , - 583 , - 452 , - 217 , - 710 , - 267 , - 552 , - 733 , - 810 , - 783 , - 652 , - 417 , - 78 , - 467 , - 752 , - 101 , - 178 , - 151 , - 20 , - 617 , - 278 , - 667 , - 120 , - 301 , - 378 , - 351 , - 220 , - 817 , - 478 , - 35 , - 320 , - 501 , - 578 , - 551 , - 420 , - 185 , - 678 , - 235 , - 520 , - 701 , - 778 , - 751 , - 620 , - 385 , - 46 , - 435 , - 720 , - 69 , - 146 , - 119 , - 820 , - 585 , - 246 , - 635 , - 88 , - 269 , - 346 , - 319 , - 188 , - 785 , - 446 , - 3 , - 288 , - 469 , - 546 , - 519 , - 388 , - 153 , - 646 , - 203 , - 488 , - 669 , - 746 , - 719 , - 588 , - 353 , - 14 , - 403 , - 688 , - 37 , - 114 , - 87 , - 788 , - 553 , - 214 , - 603 , - 56 , - 237 , - 314 , - 287 , - 156 , - 753 , - 414 , - 803 , - 256 , - 437 , - 514 , - 487 , - 356 , - 121 , - 614 , - 171 , - 456 , - 637 , - 714 , - 687 , - 556 , - 321 , - 814 , - 371 , - 656 , - 5 , - 82 , - 55 , - 756 , - 521 , - 182 , - 571 , - 24 , - 205 , - 282 , - 255 , - 124 , - 721 , - 382 , - 771 , - 224 , - 405 , - 482 , - 455 , - 324 , - 89 , - 582 , - 139 , - 424 , - 605 , - 682 , - 655 , - 524 , - 289 , - 782 , - 339 , - 624 , - 805 , - 50 , - 23 , - 724 , - 489 , - 150 , - 539 , - 824 , - 173 , - 250 , - 223 , - 92 , - 689 , - 350 , - 739 , - 192 , - 373 , - 450 , - 423 , - 292 , - 57 , - 550 , - 107 , - 392 , - 573 , - 650 , - 623 , - 492 , - 257 , - 750 , - 307 , - 592 , - 773 , - 18 , - 823 , - 692 , - 457 , - 118 , - 507 , - 792 , - 141 , - 218 , - 191 , - 60 , - 657 , - 318 , - 707 , - 160 , - 341 , - 418 , - 391 , - 260 , - 25 , - 518 , - 75 , - 360 , - 541 , - 618 , - 591 , - 460 , - 225 , - 718 , - 275 , - 560 , - 741 , - 818 , - 791 , - 660 , - 425 , - 86 , - 475 , - 760 , - 109 , - 186 , - 159 , - 28 , - 625 , - 286 , - 675 , - 128 , - 309 , - 386 , - 359 , - 228 , - 825 , - 486 , - 43 , - 328 , - 509 , - 586 , - 559 , - 428 , - 193 , - 686 , - 243 , - 528 , - 709 , - 786 , - 759 , - 628 , - 393 , - 54 , - 443 , - 728 , - 77 , - 154 , - 127 , - 828 , - 593 , - 254 , - 643 , - 96 , - 277 , - 354 , - 327 , - 196 , - 793 , - 454 , - 11 , - 296 , - 477 , - 554 , - 527 , - 396 , - 161 , - 654 , - 211 , - 496 , - 677 , - 754 , - 727 , - 596 , - 361 , - 22 , - 411 , - 696 , - 45 , - 122 , - 95 , - 796 , - 561 , - 222 , - 611 , - 64 , - 245 , - 322 , - 295 , - 164 , - 761 , - 422 , - 811 , - 264 , - 445 , - 522 , - 495 , - 364 , - 129 , - 622 , - 179 , - 464 , - 645 , - 722 , - 695 , - 564 , - 329 , - 822 , - 379 , - 664 , - 13 , - 90 , - 63 , - 764 , - 529 , - 190 , - 579 , - 32 , - 213 , - 290 , - 263 , - 132 , - 729 , - 390 , - 779 , - 232 , - 413 , - 490 , - 463 , - 332 , - 97 , - 590 , - 147 , - 432 , - 613 , - 690 , - 663 , - 532 , - 297 , - 790 , - 347 , - 632 , - 813 , - 58 , - 31 , - 732 , - 497 , - 158 , - 547 , - 0 , - 585 , - 534 , - 695 , - 220 , - 805 , - 754 , - 67 , - 440 , - 177 , - 126 , - 287 , - 660 , - 397 , - 346 , - 507 , - 32 , - 617 , - 566 , - 727 , - 252 , - 837 , - 786 , - 99 , - 472 , - 209 , - 158 , - 319 , - 692 , - 429 , - 378 , - 539 , - 64 , - 649 , - 598 , - 759 , - 284 , - 21 , - 818 , - 131 , - 504 , - 241 , - 190 , - 351 , - 724 , - 461 , - 410 , - 571 , - 96 , - 681 , - 630 , - 791 , - 316 , - 53 , - 2 , - 163 , - 536 , - 273 , - 222 , - 383 , - 756 , - 493 , - 442 , - 603 , - 128 , - 713 , - 662 , - 823 , - 348 , - 85 , - 34 , - 195 , - 568 , - 305 , - 254 , - 415 , - 788 , - 525 , - 474 , - 635 , - 160 , - 745 , - 694 , - 7 , - 380 , - 117 , - 66 , - 227 , - 600 , - 337 , - 286 , - 447 , - 820 , - 557 , - 506 , - 667 , - 192 , - 777 , - 726 , - 39 , - 412 , - 149 , - 98 , - 259 , - 632 , - 369 , - 318 , - 479 , - 4 , - 589 , - 538 , - 699 , - 224 , - 809 , - 758 , - 71 , - 444 , - 181 , - 130 , - 291 , - 664 , - 401 , - 350 , - 511 , - 36 , - 621 , - 570 , - 731 , - 256 , - 841 , - 790 , - 103 , - 476 , - 213 , - 162 , - 323 , - 696 , - 433 , - 382 , - 543 , - 68 , - 653 , - 602 , - 763 , - 288 , - 25 , - 822 , - 135 , - 508 , - 245 , - 194 , - 355 , - 728 , - 465 , - 414 , - 575 , - 100 , - 685 , - 634 , - 795 , - 320 , - 57 , - 6 , - 167 , - 540 , - 277 , - 226 , - 387 , - 760 , - 497 , - 446 , - 607 , - 132 , - 717 , - 666 , - 827 , - 352 , - 89 , - 38 , - 199 , - 572 , - 309 , - 258 , - 419 , - 792 , - 529 , - 478 , - 639 , - 164 , - 749 , - 698 , - 11 , - 384 , - 121 , - 70 , - 231 , - 604 , - 341 , - 290 , - 451 , - 824 , - 561 , - 510 , - 671 , - 196 , - 781 , - 730 , - 43 , - 416 , - 153 , - 102 , - 263 , - 636 , - 373 , - 322 , - 483 , - 8 , - 593 , - 542 , - 703 , - 228 , - 813 , - 762 , - 75 , - 448 , - 185 , - 134 , - 295 , - 668 , - 405 , - 354 , - 515 , - 40 , - 625 , - 574 , - 735 , - 260 , - 845 , - 794 , - 107 , - 480 , - 217 , - 166 , - 327 , - 700 , - 437 , - 386 , - 547 , - 72 , - 657 , - 606 , - 767 , - 292 , - 29 , - 826 , - 139 , - 512 , - 249 , - 198 , - 359 , - 732 , - 469 , - 418 , - 579 , - 104 , - 689 , - 638 , - 799 , - 324 , - 61 , - 10 , - 171 , - 544 , - 281 , - 230 , - 391 , - 764 , - 501 , - 450 , - 611 , - 136 , - 721 , - 670 , - 831 , - 356 , - 93 , - 42 , - 203 , - 576 , - 313 , - 262 , - 423 , - 796 , - 533 , - 482 , - 643 , - 168 , - 753 , - 702 , - 15 , - 388 , - 125 , - 74 , - 235 , - 608 , - 345 , - 294 , - 455 , - 828 , - 565 , - 514 , - 675 , - 200 , - 785 , - 734 , - 47 , - 420 , - 157 , - 106 , - 267 , - 640 , - 377 , - 326 , - 487 , - 12 , - 597 , - 546 , - 707 , - 232 , - 817 , - 766 , - 79 , - 452 , - 189 , - 138 , - 299 , - 672 , - 409 , - 358 , - 519 , - 44 , - 629 , - 578 , - 739 , - 264 , - 1 , - 798 , - 111 , - 484 , - 221 , - 170 , - 331 , - 704 , - 441 , - 390 , - 551 , - 76 , - 661 , - 610 , - 771 , - 296 , - 33 , - 830 , - 143 , - 516 , - 253 , - 202 , - 363 , - 736 , - 473 , - 422 , - 583 , - 108 , - 693 , - 642 , - 803 , - 328 , - 65 , - 14 , - 175 , - 548 , - 285 , - 234 , - 395 , - 768 , - 505 , - 454 , - 615 , - 140 , - 725 , - 674 , - 835 , - 360 , - 97 , - 46 , - 207 , - 580 , - 317 , - 266 , - 427 , - 800 , - 537 , - 486 , - 647 , - 172 , - 757 , - 706 , - 19 , - 392 , - 129 , - 78 , - 239 , - 612 , - 349 , - 298 , - 459 , - 832 , - 569 , - 518 , - 679 , - 204 , - 789 , - 738 , - 51 , - 424 , - 161 , - 110 , - 271 , - 644 , - 381 , - 330 , - 491 , - 16 , - 601 , - 550 , - 711 , - 236 , - 821 , - 770 , - 83 , - 456 , - 193 , - 142 , - 303 , - 676 , - 413 , - 362 , - 523 , - 48 , - 633 , - 582 , - 743 , - 268 , - 5 , - 802 , - 115 , - 488 , - 225 , - 174 , - 335 , - 708 , - 445 , - 394 , - 555 , - 80 , - 665 , - 614 , - 775 , - 300 , - 37 , - 834 , - 147 , - 520 , - 257 , - 206 , - 367 , - 740 , - 477 , - 426 , - 587 , - 112 , - 697 , - 646 , - 807 , - 332 , - 69 , - 18 , - 179 , - 552 , - 289 , - 238 , - 399 , - 772 , - 509 , - 458 , - 619 , - 144 , - 729 , - 678 , - 839 , - 364 , - 101 , - 50 , - 211 , - 584 , - 321 , - 270 , - 431 , - 804 , - 541 , - 490 , - 651 , - 176 , - 761 , - 710 , - 23 , - 396 , - 133 , - 82 , - 243 , - 616 , - 353 , - 302 , - 463 , - 836 , - 573 , - 522 , - 683 , - 208 , - 793 , - 742 , - 55 , - 428 , - 165 , - 114 , - 275 , - 648 , - 385 , - 334 , - 495 , - 20 , - 605 , - 554 , - 715 , - 240 , - 825 , - 774 , - 87 , - 460 , - 197 , - 146 , - 307 , - 680 , - 417 , - 366 , - 527 , - 52 , - 637 , - 586 , - 747 , - 272 , - 9 , - 806 , - 119 , - 492 , - 229 , - 178 , - 339 , - 712 , - 449 , - 398 , - 559 , - 84 , - 669 , - 618 , - 779 , - 304 , - 41 , - 838 , - 151 , - 524 , - 261 , - 210 , - 371 , - 744 , - 481 , - 430 , - 591 , - 116 , - 701 , - 650 , - 811 , - 336 , - 73 , - 22 , - 183 , - 556 , - 293 , - 242 , - 403 , - 776 , - 513 , - 462 , - 623 , - 148 , - 733 , - 682 , - 843 , - 368 , - 105 , - 54 , - 215 , - 588 , - 325 , - 274 , - 435 , - 808 , - 545 , - 494 , - 655 , - 180 , - 765 , - 714 , - 27 , - 400 , - 137 , - 86 , - 247 , - 620 , - 357 , - 306 , - 467 , - 840 , - 577 , - 526 , - 687 , - 212 , - 797 , - 746 , - 59 , - 432 , - 169 , - 118 , - 279 , - 652 , - 389 , - 338 , - 499 , - 24 , - 609 , - 558 , - 719 , - 244 , - 829 , - 778 , - 91 , - 464 , - 201 , - 150 , - 311 , - 684 , - 421 , - 370 , - 531 , - 56 , - 641 , - 590 , - 751 , - 276 , - 13 , - 810 , - 123 , - 496 , - 233 , - 182 , - 343 , - 716 , - 453 , - 402 , - 563 , - 88 , - 673 , - 622 , - 783 , - 308 , - 45 , - 842 , - 155 , - 528 , - 265 , - 214 , - 375 , - 748 , - 485 , - 434 , - 595 , - 120 , - 705 , - 654 , - 815 , - 340 , - 77 , - 26 , - 187 , - 560 , - 297 , - 246 , - 407 , - 780 , - 517 , - 466 , - 627 , - 152 , - 737 , - 686 , - 847 , - 372 , - 109 , - 58 , - 219 , - 592 , - 329 , - 278 , - 439 , - 812 , - 549 , - 498 , - 659 , - 184 , - 769 , - 718 , - 31 , - 404 , - 141 , - 90 , - 251 , - 624 , - 361 , - 310 , - 471 , - 844 , - 581 , - 530 , - 691 , - 216 , - 801 , - 750 , - 63 , - 436 , - 173 , - 122 , - 283 , - 656 , - 393 , - 342 , - 503 , - 28 , - 613 , - 562 , - 723 , - 248 , - 833 , - 782 , - 95 , - 468 , - 205 , - 154 , - 315 , - 688 , - 425 , - 374 , - 535 , - 60 , - 645 , - 594 , - 755 , - 280 , - 17 , - 814 , - 127 , - 500 , - 237 , - 186 , - 347 , - 720 , - 457 , - 406 , - 567 , - 92 , - 677 , - 626 , - 787 , - 312 , - 49 , - 846 , - 159 , - 532 , - 269 , - 218 , - 379 , - 752 , - 489 , - 438 , - 599 , - 124 , - 709 , - 658 , - 819 , - 344 , - 81 , - 30 , - 191 , - 564 , - 301 , - 250 , - 411 , - 784 , - 521 , - 470 , - 631 , - 156 , - 741 , - 690 , - 3 , - 376 , - 113 , - 62 , - 223 , - 596 , - 333 , - 282 , - 443 , - 816 , - 553 , - 502 , - 663 , - 188 , - 773 , - 722 , - 35 , - 408 , - 145 , - 94 , - 255 , - 628 , - 365 , - 314 , - 475 , - 0 , - 65 , - 226 , - 483 , - 836 , - 421 , - 102 , - 743 , - 616 , - 585 , - 650 , - 811 , - 204 , - 557 , - 142 , - 687 , - 464 , - 337 , - 306 , - 371 , - 532 , - 789 , - 278 , - 727 , - 408 , - 185 , - 58 , - 27 , - 92 , - 253 , - 510 , - 863 , - 448 , - 129 , - 770 , - 643 , - 612 , - 677 , - 838 , - 231 , - 584 , - 169 , - 714 , - 491 , - 364 , - 333 , - 398 , - 559 , - 816 , - 305 , - 754 , - 435 , - 212 , - 85 , - 54 , - 119 , - 280 , - 537 , - 26 , - 475 , - 156 , - 797 , - 670 , - 639 , - 704 , - 1 , - 258 , - 611 , - 196 , - 741 , - 518 , - 391 , - 360 , - 425 , - 586 , - 843 , - 332 , - 781 , - 462 , - 239 , - 112 , - 81 , - 146 , - 307 , - 564 , - 53 , - 502 , - 183 , - 824 , - 697 , - 666 , - 731 , - 28 , - 285 , - 638 , - 223 , - 768 , - 545 , - 418 , - 387 , - 452 , - 613 , - 6 , - 359 , - 808 , - 489 , - 266 , - 139 , - 108 , - 173 , - 334 , - 591 , - 80 , - 529 , - 210 , - 851 , - 724 , - 693 , - 758 , - 55 , - 312 , - 665 , - 250 , - 795 , - 572 , - 445 , - 414 , - 479 , - 640 , - 33 , - 386 , - 835 , - 516 , - 293 , - 166 , - 135 , - 200 , - 361 , - 618 , - 107 , - 556 , - 237 , - 14 , - 751 , - 720 , - 785 , - 82 , - 339 , - 692 , - 277 , - 822 , - 599 , - 472 , - 441 , - 506 , - 667 , - 60 , - 413 , - 862 , - 543 , - 320 , - 193 , - 162 , - 227 , - 388 , - 645 , - 134 , - 583 , - 264 , - 41 , - 778 , - 747 , - 812 , - 109 , - 366 , - 719 , - 304 , - 849 , - 626 , - 499 , - 468 , - 533 , - 694 , - 87 , - 440 , - 25 , - 570 , - 347 , - 220 , - 189 , - 254 , - 415 , - 672 , - 161 , - 610 , - 291 , - 68 , - 805 , - 774 , - 839 , - 136 , - 393 , - 746 , - 331 , - 12 , - 653 , - 526 , - 495 , - 560 , - 721 , - 114 , - 467 , - 52 , - 597 , - 374 , - 247 , - 216 , - 281 , - 442 , - 699 , - 188 , - 637 , - 318 , - 95 , - 832 , - 801 , - 2 , - 163 , - 420 , - 773 , - 358 , - 39 , - 680 , - 553 , - 522 , - 587 , - 748 , - 141 , - 494 , - 79 , - 624 , - 401 , - 274 , - 243 , - 308 , - 469 , - 726 , - 215 , - 664 , - 345 , - 122 , - 859 , - 828 , - 29 , - 190 , - 447 , - 800 , - 385 , - 66 , - 707 , - 580 , - 549 , - 614 , - 775 , - 168 , - 521 , - 106 , - 651 , - 428 , - 301 , - 270 , - 335 , - 496 , - 753 , - 242 , - 691 , - 372 , - 149 , - 22 , - 855 , - 56 , - 217 , - 474 , - 827 , - 412 , - 93 , - 734 , - 607 , - 576 , - 641 , - 802 , - 195 , - 548 , - 133 , - 678 , - 455 , - 328 , - 297 , - 362 , - 523 , - 780 , - 269 , - 718 , - 399 , - 176 , - 49 , - 18 , - 83 , - 244 , - 501 , - 854 , - 439 , - 120 , - 761 , - 634 , - 603 , - 668 , - 829 , - 222 , - 575 , - 160 , - 705 , - 482 , - 355 , - 324 , - 389 , - 550 , - 807 , - 296 , - 745 , - 426 , - 203 , - 76 , - 45 , - 110 , - 271 , - 528 , - 17 , - 466 , - 147 , - 788 , - 661 , - 630 , - 695 , - 856 , - 249 , - 602 , - 187 , - 732 , - 509 , - 382 , - 351 , - 416 , - 577 , - 834 , - 323 , - 772 , - 453 , - 230 , - 103 , - 72 , - 137 , - 298 , - 555 , - 44 , - 493 , - 174 , - 815 , - 688 , - 657 , - 722 , - 19 , - 276 , - 629 , - 214 , - 759 , - 536 , - 409 , - 378 , - 443 , - 604 , - 861 , - 350 , - 799 , - 480 , - 257 , - 130 , - 99 , - 164 , - 325 , - 582 , - 71 , - 520 , - 201 , - 842 , - 715 , - 684 , - 749 , - 46 , - 303 , - 656 , - 241 , - 786 , - 563 , - 436 , - 405 , - 470 , - 631 , - 24 , - 377 , - 826 , - 507 , - 284 , - 157 , - 126 , - 191 , - 352 , - 609 , - 98 , - 547 , - 228 , - 5 , - 742 , - 711 , - 776 , - 73 , - 330 , - 683 , - 268 , - 813 , - 590 , - 463 , - 432 , - 497 , - 658 , - 51 , - 404 , - 853 , - 534 , - 311 , - 184 , - 153 , - 218 , - 379 , - 636 , - 125 , - 574 , - 255 , - 32 , - 769 , - 738 , - 803 , - 100 , - 357 , - 710 , - 295 , - 840 , - 617 , - 490 , - 459 , - 524 , - 685 , - 78 , - 431 , - 16 , - 561 , - 338 , - 211 , - 180 , - 245 , - 406 , - 663 , - 152 , - 601 , - 282 , - 59 , - 796 , - 765 , - 830 , - 127 , - 384 , - 737 , - 322 , - 3 , - 644 , - 517 , - 486 , - 551 , - 712 , - 105 , - 458 , - 43 , - 588 , - 365 , - 238 , - 207 , - 272 , - 433 , - 690 , - 179 , - 628 , - 309 , - 86 , - 823 , - 792 , - 857 , - 154 , - 411 , - 764 , - 349 , - 30 , - 671 , - 544 , - 513 , - 578 , - 739 , - 132 , - 485 , - 70 , - 615 , - 392 , - 265 , - 234 , - 299 , - 460 , - 717 , - 206 , - 655 , - 336 , - 113 , - 850 , - 819 , - 20 , - 181 , - 438 , - 791 , - 376 , - 57 , - 698 , - 571 , - 540 , - 605 , - 766 , - 159 , - 512 , - 97 , - 642 , - 419 , - 292 , - 261 , - 326 , - 487 , - 744 , - 233 , - 682 , - 363 , - 140 , - 13 , - 846 , - 47 , - 208 , - 465 , - 818 , - 403 , - 84 , - 725 , - 598 , - 567 , - 632 , - 793 , - 186 , - 539 , - 124 , - 669 , - 446 , - 319 , - 288 , - 353 , - 514 , - 771 , - 260 , - 709 , - 390 , - 167 , - 40 , - 9 , - 74 , - 235 , - 492 , - 845 , - 430 , - 111 , - 752 , - 625 , - 594 , - 659 , - 820 , - 213 , - 566 , - 151 , - 696 , - 473 , - 346 , - 315 , - 380 , - 541 , - 798 , - 287 , - 736 , - 417 , - 194 , - 67 , - 36 , - 101 , - 262 , - 519 , - 8 , - 457 , - 138 , - 779 , - 652 , - 621 , - 686 , - 847 , - 240 , - 593 , - 178 , - 723 , - 500 , - 373 , - 342 , - 407 , - 568 , - 825 , - 314 , - 763 , - 444 , - 221 , - 94 , - 63 , - 128 , - 289 , - 546 , - 35 , - 484 , - 165 , - 806 , - 679 , - 648 , - 713 , - 10 , - 267 , - 620 , - 205 , - 750 , - 527 , - 400 , - 369 , - 434 , - 595 , - 852 , - 341 , - 790 , - 471 , - 248 , - 121 , - 90 , - 155 , - 316 , - 573 , - 62 , - 511 , - 192 , - 833 , - 706 , - 675 , - 740 , - 37 , - 294 , - 647 , - 232 , - 777 , - 554 , - 427 , - 396 , - 461 , - 622 , - 15 , - 368 , - 817 , - 498 , - 275 , - 148 , - 117 , - 182 , - 343 , - 600 , - 89 , - 538 , - 219 , - 860 , - 733 , - 702 , - 767 , - 64 , - 321 , - 674 , - 259 , - 804 , - 581 , - 454 , - 423 , - 488 , - 649 , - 42 , - 395 , - 844 , - 525 , - 302 , - 175 , - 144 , - 209 , - 370 , - 627 , - 116 , - 565 , - 246 , - 23 , - 760 , - 729 , - 794 , - 91 , - 348 , - 701 , - 286 , - 831 , - 608 , - 481 , - 450 , - 515 , - 676 , - 69 , - 422 , - 7 , - 552 , - 329 , - 202 , - 171 , - 236 , - 397 , - 654 , - 143 , - 592 , - 273 , - 50 , - 787 , - 756 , - 821 , - 118 , - 375 , - 728 , - 313 , - 858 , - 635 , - 508 , - 477 , - 542 , - 703 , - 96 , - 449 , - 34 , - 579 , - 356 , - 229 , - 198 , - 263 , - 424 , - 681 , - 170 , - 619 , - 300 , - 77 , - 814 , - 783 , - 848 , - 145 , - 402 , - 755 , - 340 , - 21 , - 662 , - 535 , - 504 , - 569 , - 730 , - 123 , - 476 , - 61 , - 606 , - 383 , - 256 , - 225 , - 290 , - 451 , - 708 , - 197 , - 646 , - 327 , - 104 , - 841 , - 810 , - 11 , - 172 , - 429 , - 782 , - 367 , - 48 , - 689 , - 562 , - 531 , - 596 , - 757 , - 150 , - 503 , - 88 , - 633 , - 410 , - 283 , - 252 , - 317 , - 478 , - 735 , - 224 , - 673 , - 354 , - 131 , - 4 , - 837 , - 38 , - 199 , - 456 , - 809 , - 394 , - 75 , - 716 , - 589 , - 558 , - 623 , - 784 , - 177 , - 530 , - 115 , - 660 , - 437 , - 310 , - 279 , - 344 , - 505 , - 762 , - 251 , - 700 , - 381 , - 158 , - 31 , - 0 , - 603 , - 106 , - 269 , - 212 , - 815 , - 318 , - 481 , - 424 , - 147 , - 530 , - 693 , - 636 , - 359 , - 742 , - 25 , - 848 , - 571 , - 74 , - 237 , - 180 , - 783 , - 286 , - 449 , - 392 , - 115 , - 498 , - 661 , - 604 , - 327 , - 710 , - 873 , - 816 , - 539 , - 42 , - 205 , - 148 , - 751 , - 254 , - 417 , - 360 , - 83 , - 466 , - 629 , - 572 , - 295 , - 678 , - 841 , - 784 , - 507 , - 10 , - 173 , - 116 , - 719 , - 222 , - 385 , - 328 , - 51 , - 434 , - 597 , - 540 , - 263 , - 646 , - 809 , - 752 , - 475 , - 858 , - 141 , - 84 , - 687 , - 190 , - 353 , - 296 , - 19 , - 402 , - 565 , - 508 , - 231 , - 614 , - 777 , - 720 , - 443 , - 826 , - 109 , - 52 , - 655 , - 158 , - 321 , - 264 , - 867 , - 370 , - 533 , - 476 , - 199 , - 582 , - 745 , - 688 , - 411 , - 794 , - 77 , - 20 , - 623 , - 126 , - 289 , - 232 , - 835 , - 338 , - 501 , - 444 , - 167 , - 550 , - 713 , - 656 , - 379 , - 762 , - 45 , - 868 , - 591 , - 94 , - 257 , - 200 , - 803 , - 306 , - 469 , - 412 , - 135 , - 518 , - 681 , - 624 , - 347 , - 730 , - 13 , - 836 , - 559 , - 62 , - 225 , - 168 , - 771 , - 274 , - 437 , - 380 , - 103 , - 486 , - 649 , - 592 , - 315 , - 698 , - 861 , - 804 , - 527 , - 30 , - 193 , - 136 , - 739 , - 242 , - 405 , - 348 , - 71 , - 454 , - 617 , - 560 , - 283 , - 666 , - 829 , - 772 , - 495 , - 878 , - 161 , - 104 , - 707 , - 210 , - 373 , - 316 , - 39 , - 422 , - 585 , - 528 , - 251 , - 634 , - 797 , - 740 , - 463 , - 846 , - 129 , - 72 , - 675 , - 178 , - 341 , - 284 , - 7 , - 390 , - 553 , - 496 , - 219 , - 602 , - 765 , - 708 , - 431 , - 814 , - 97 , - 40 , - 643 , - 146 , - 309 , - 252 , - 855 , - 358 , - 521 , - 464 , - 187 , - 570 , - 733 , - 676 , - 399 , - 782 , - 65 , - 8 , - 611 , - 114 , - 277 , - 220 , - 823 , - 326 , - 489 , - 432 , - 155 , - 538 , - 701 , - 644 , - 367 , - 750 , - 33 , - 856 , - 579 , - 82 , - 245 , - 188 , - 791 , - 294 , - 457 , - 400 , - 123 , - 506 , - 669 , - 612 , - 335 , - 718 , - 1 , - 824 , - 547 , - 50 , - 213 , - 156 , - 759 , - 262 , - 425 , - 368 , - 91 , - 474 , - 637 , - 580 , - 303 , - 686 , - 849 , - 792 , - 515 , - 18 , - 181 , - 124 , - 727 , - 230 , - 393 , - 336 , - 59 , - 442 , - 605 , - 548 , - 271 , - 654 , - 817 , - 760 , - 483 , - 866 , - 149 , - 92 , - 695 , - 198 , - 361 , - 304 , - 27 , - 410 , - 573 , - 516 , - 239 , - 622 , - 785 , - 728 , - 451 , - 834 , - 117 , - 60 , - 663 , - 166 , - 329 , - 272 , - 875 , - 378 , - 541 , - 484 , - 207 , - 590 , - 753 , - 696 , - 419 , - 802 , - 85 , - 28 , - 631 , - 134 , - 297 , - 240 , - 843 , - 346 , - 509 , - 452 , - 175 , - 558 , - 721 , - 664 , - 387 , - 770 , - 53 , - 876 , - 599 , - 102 , - 265 , - 208 , - 811 , - 314 , - 477 , - 420 , - 143 , - 526 , - 689 , - 632 , - 355 , - 738 , - 21 , - 844 , - 567 , - 70 , - 233 , - 176 , - 779 , - 282 , - 445 , - 388 , - 111 , - 494 , - 657 , - 600 , - 323 , - 706 , - 869 , - 812 , - 535 , - 38 , - 201 , - 144 , - 747 , - 250 , - 413 , - 356 , - 79 , - 462 , - 625 , - 568 , - 291 , - 674 , - 837 , - 780 , - 503 , - 6 , - 169 , - 112 , - 715 , - 218 , - 381 , - 324 , - 47 , - 430 , - 593 , - 536 , - 259 , - 642 , - 805 , - 748 , - 471 , - 854 , - 137 , - 80 , - 683 , - 186 , - 349 , - 292 , - 15 , - 398 , - 561 , - 504 , - 227 , - 610 , - 773 , - 716 , - 439 , - 822 , - 105 , - 48 , - 651 , - 154 , - 317 , - 260 , - 863 , - 366 , - 529 , - 472 , - 195 , - 578 , - 741 , - 684 , - 407 , - 790 , - 73 , - 16 , - 619 , - 122 , - 285 , - 228 , - 831 , - 334 , - 497 , - 440 , - 163 , - 546 , - 709 , - 652 , - 375 , - 758 , - 41 , - 864 , - 587 , - 90 , - 253 , - 196 , - 799 , - 302 , - 465 , - 408 , - 131 , - 514 , - 677 , - 620 , - 343 , - 726 , - 9 , - 832 , - 555 , - 58 , - 221 , - 164 , - 767 , - 270 , - 433 , - 376 , - 99 , - 482 , - 645 , - 588 , - 311 , - 694 , - 857 , - 800 , - 523 , - 26 , - 189 , - 132 , - 735 , - 238 , - 401 , - 344 , - 67 , - 450 , - 613 , - 556 , - 279 , - 662 , - 825 , - 768 , - 491 , - 874 , - 157 , - 100 , - 703 , - 206 , - 369 , - 312 , - 35 , - 418 , - 581 , - 524 , - 247 , - 630 , - 793 , - 736 , - 459 , - 842 , - 125 , - 68 , - 671 , - 174 , - 337 , - 280 , - 3 , - 386 , - 549 , - 492 , - 215 , - 598 , - 761 , - 704 , - 427 , - 810 , - 93 , - 36 , - 639 , - 142 , - 305 , - 248 , - 851 , - 354 , - 517 , - 460 , - 183 , - 566 , - 729 , - 672 , - 395 , - 778 , - 61 , - 4 , - 607 , - 110 , - 273 , - 216 , - 819 , - 322 , - 485 , - 428 , - 151 , - 534 , - 697 , - 640 , - 363 , - 746 , - 29 , - 852 , - 575 , - 78 , - 241 , - 184 , - 787 , - 290 , - 453 , - 396 , - 119 , - 502 , - 665 , - 608 , - 331 , - 714 , - 877 , - 820 , - 543 , - 46 , - 209 , - 152 , - 755 , - 258 , - 421 , - 364 , - 87 , - 470 , - 633 , - 576 , - 299 , - 682 , - 845 , - 788 , - 511 , - 14 , - 177 , - 120 , - 723 , - 226 , - 389 , - 332 , - 55 , - 438 , - 601 , - 544 , - 267 , - 650 , - 813 , - 756 , - 479 , - 862 , - 145 , - 88 , - 691 , - 194 , - 357 , - 300 , - 23 , - 406 , - 569 , - 512 , - 235 , - 618 , - 781 , - 724 , - 447 , - 830 , - 113 , - 56 , - 659 , - 162 , - 325 , - 268 , - 871 , - 374 , - 537 , - 480 , - 203 , - 586 , - 749 , - 692 , - 415 , - 798 , - 81 , - 24 , - 627 , - 130 , - 293 , - 236 , - 839 , - 342 , - 505 , - 448 , - 171 , - 554 , - 717 , - 660 , - 383 , - 766 , - 49 , - 872 , - 595 , - 98 , - 261 , - 204 , - 807 , - 310 , - 473 , - 416 , - 139 , - 522 , - 685 , - 628 , - 351 , - 734 , - 17 , - 840 , - 563 , - 66 , - 229 , - 172 , - 775 , - 278 , - 441 , - 384 , - 107 , - 490 , - 653 , - 596 , - 319 , - 702 , - 865 , - 808 , - 531 , - 34 , - 197 , - 140 , - 743 , - 246 , - 409 , - 352 , - 75 , - 458 , - 621 , - 564 , - 287 , - 670 , - 833 , - 776 , - 499 , - 2 , - 165 , - 108 , - 711 , - 214 , - 377 , - 320 , - 43 , - 426 , - 589 , - 532 , - 255 , - 638 , - 801 , - 744 , - 467 , - 850 , - 133 , - 76 , - 679 , - 182 , - 345 , - 288 , - 11 , - 394 , - 557 , - 500 , - 223 , - 606 , - 769 , - 712 , - 435 , - 818 , - 101 , - 44 , - 647 , - 150 , - 313 , - 256 , - 859 , - 362 , - 525 , - 468 , - 191 , - 574 , - 737 , - 680 , - 403 , - 786 , - 69 , - 12 , - 615 , - 118 , - 281 , - 224 , - 827 , - 330 , - 493 , - 436 , - 159 , - 542 , - 705 , - 648 , - 371 , - 754 , - 37 , - 860 , - 583 , - 86 , - 249 , - 192 , - 795 , - 298 , - 461 , - 404 , - 127 , - 510 , - 673 , - 616 , - 339 , - 722 , - 5 , - 828 , - 551 , - 54 , - 217 , - 160 , - 763 , - 266 , - 429 , - 372 , - 95 , - 478 , - 641 , - 584 , - 307 , - 690 , - 853 , - 796 , - 519 , - 22 , - 185 , - 128 , - 731 , - 234 , - 397 , - 340 , - 63 , - 446 , - 609 , - 552 , - 275 , - 658 , - 821 , - 764 , - 487 , - 870 , - 153 , - 96 , - 699 , - 202 , - 365 , - 308 , - 31 , - 414 , - 577 , - 520 , - 243 , - 626 , - 789 , - 732 , - 455 , - 838 , - 121 , - 64 , - 667 , - 170 , - 333 , - 276 , - 879 , - 382 , - 545 , - 488 , - 211 , - 594 , - 757 , - 700 , - 423 , - 806 , - 89 , - 32 , - 635 , - 138 , - 301 , - 244 , - 847 , - 350 , - 513 , - 456 , - 179 , - 562 , - 725 , - 668 , - 391 , - 774 , - 57 , - 0 , - 87 , - 398 , - 37 , - 796 , - 883 , - 298 , - 833 , - 696 , - 783 , - 198 , - 733 , - 596 , - 683 , - 98 , - 633 , - 496 , - 583 , - 894 , - 533 , - 396 , - 483 , - 794 , - 433 , - 296 , - 383 , - 694 , - 333 , - 196 , - 283 , - 594 , - 233 , - 96 , - 183 , - 494 , - 133 , - 892 , - 83 , - 394 , - 33 , - 792 , - 879 , - 294 , - 829 , - 692 , - 779 , - 194 , - 729 , - 592 , - 679 , - 94 , - 629 , - 492 , - 579 , - 890 , - 529 , - 392 , - 479 , - 790 , - 429 , - 292 , - 379 , - 690 , - 329 , - 192 , - 279 , - 590 , - 229 , - 92 , - 179 , - 490 , - 129 , - 888 , - 79 , - 390 , - 29 , - 788 , - 875 , - 290 , - 825 , - 688 , - 775 , - 190 , - 725 , - 588 , - 675 , - 90 , - 625 , - 488 , - 575 , - 886 , - 525 , - 388 , - 475 , - 786 , - 425 , - 288 , - 375 , - 686 , - 325 , - 188 , - 275 , - 586 , - 225 , - 88 , - 175 , - 486 , - 125 , - 884 , - 75 , - 386 , - 25 , - 784 , - 871 , - 286 , - 821 , - 684 , - 771 , - 186 , - 721 , - 584 , - 671 , - 86 , - 621 , - 484 , - 571 , - 882 , - 521 , - 384 , - 471 , - 782 , - 421 , - 284 , - 371 , - 682 , - 321 , - 184 , - 271 , - 582 , - 221 , - 84 , - 171 , - 482 , - 121 , - 880 , - 71 , - 382 , - 21 , - 780 , - 867 , - 282 , - 817 , - 680 , - 767 , - 182 , - 717 , - 580 , - 667 , - 82 , - 617 , - 480 , - 567 , - 878 , - 517 , - 380 , - 467 , - 778 , - 417 , - 280 , - 367 , - 678 , - 317 , - 180 , - 267 , - 578 , - 217 , - 80 , - 167 , - 478 , - 117 , - 876 , - 67 , - 378 , - 17 , - 776 , - 863 , - 278 , - 813 , - 676 , - 763 , - 178 , - 713 , - 576 , - 663 , - 78 , - 613 , - 476 , - 563 , - 874 , - 513 , - 376 , - 463 , - 774 , - 413 , - 276 , - 363 , - 674 , - 313 , - 176 , - 263 , - 574 , - 213 , - 76 , - 163 , - 474 , - 113 , - 872 , - 63 , - 374 , - 13 , - 772 , - 859 , - 274 , - 809 , - 672 , - 759 , - 174 , - 709 , - 572 , - 659 , - 74 , - 609 , - 472 , - 559 , - 870 , - 509 , - 372 , - 459 , - 770 , - 409 , - 272 , - 359 , - 670 , - 309 , - 172 , - 259 , - 570 , - 209 , - 72 , - 159 , - 470 , - 109 , - 868 , - 59 , - 370 , - 9 , - 768 , - 855 , - 270 , - 805 , - 668 , - 755 , - 170 , - 705 , - 568 , - 655 , - 70 , - 605 , - 468 , - 555 , - 866 , - 505 , - 368 , - 455 , - 766 , - 405 , - 268 , - 355 , - 666 , - 305 , - 168 , - 255 , - 566 , - 205 , - 68 , - 155 , - 466 , - 105 , - 864 , - 55 , - 366 , - 5 , - 764 , - 851 , - 266 , - 801 , - 664 , - 751 , - 166 , - 701 , - 564 , - 651 , - 66 , - 601 , - 464 , - 551 , - 862 , - 501 , - 364 , - 451 , - 762 , - 401 , - 264 , - 351 , - 662 , - 301 , - 164 , - 251 , - 562 , - 201 , - 64 , - 151 , - 462 , - 101 , - 860 , - 51 , - 362 , - 1 , - 760 , - 847 , - 262 , - 797 , - 660 , - 747 , - 162 , - 697 , - 560 , - 647 , - 62 , - 597 , - 460 , - 547 , - 858 , - 497 , - 360 , - 447 , - 758 , - 397 , - 260 , - 347 , - 658 , - 297 , - 160 , - 247 , - 558 , - 197 , - 60 , - 147 , - 458 , - 97 , - 856 , - 47 , - 358 , - 893 , - 756 , - 843 , - 258 , - 793 , - 656 , - 743 , - 158 , - 693 , - 556 , - 643 , - 58 , - 593 , - 456 , - 543 , - 854 , - 493 , - 356 , - 443 , - 754 , - 393 , - 256 , - 343 , - 654 , - 293 , - 156 , - 243 , - 554 , - 193 , - 56 , - 143 , - 454 , - 93 , - 852 , - 43 , - 354 , - 889 , - 752 , - 839 , - 254 , - 789 , - 652 , - 739 , - 154 , - 689 , - 552 , - 639 , - 54 , - 589 , - 452 , - 539 , - 850 , - 489 , - 352 , - 439 , - 750 , - 389 , - 252 , - 339 , - 650 , - 289 , - 152 , - 239 , - 550 , - 189 , - 52 , - 139 , - 450 , - 89 , - 848 , - 39 , - 350 , - 885 , - 748 , - 835 , - 250 , - 785 , - 648 , - 735 , - 150 , - 685 , - 548 , - 635 , - 50 , - 585 , - 448 , - 535 , - 846 , - 485 , - 348 , - 435 , - 746 , - 385 , - 248 , - 335 , - 646 , - 285 , - 148 , - 235 , - 546 , - 185 , - 48 , - 135 , - 446 , - 85 , - 844 , - 35 , - 346 , - 881 , - 744 , - 831 , - 246 , - 781 , - 644 , - 731 , - 146 , - 681 , - 544 , - 631 , - 46 , - 581 , - 444 , - 531 , - 842 , - 481 , - 344 , - 431 , - 742 , - 381 , - 244 , - 331 , - 642 , - 281 , - 144 , - 231 , - 542 , - 181 , - 44 , - 131 , - 442 , - 81 , - 840 , - 31 , - 342 , - 877 , - 740 , - 827 , - 242 , - 777 , - 640 , - 727 , - 142 , - 677 , - 540 , - 627 , - 42 , - 577 , - 440 , - 527 , - 838 , - 477 , - 340 , - 427 , - 738 , - 377 , - 240 , - 327 , - 638 , - 277 , - 140 , - 227 , - 538 , - 177 , - 40 , - 127 , - 438 , - 77 , - 836 , - 27 , - 338 , - 873 , - 736 , - 823 , - 238 , - 773 , - 636 , - 723 , - 138 , - 673 , - 536 , - 623 , - 38 , - 573 , - 436 , - 523 , - 834 , - 473 , - 336 , - 423 , - 734 , - 373 , - 236 , - 323 , - 634 , - 273 , - 136 , - 223 , - 534 , - 173 , - 36 , - 123 , - 434 , - 73 , - 832 , - 23 , - 334 , - 869 , - 732 , - 819 , - 234 , - 769 , - 632 , - 719 , - 134 , - 669 , - 532 , - 619 , - 34 , - 569 , - 432 , - 519 , - 830 , - 469 , - 332 , - 419 , - 730 , - 369 , - 232 , - 319 , - 630 , - 269 , - 132 , - 219 , - 530 , - 169 , - 32 , - 119 , - 430 , - 69 , - 828 , - 19 , - 330 , - 865 , - 728 , - 815 , - 230 , - 765 , - 628 , - 715 , - 130 , - 665 , - 528 , - 615 , - 30 , - 565 , - 428 , - 515 , - 826 , - 465 , - 328 , - 415 , - 726 , - 365 , - 228 , - 315 , - 626 , - 265 , - 128 , - 215 , - 526 , - 165 , - 28 , - 115 , - 426 , - 65 , - 824 , - 15 , - 326 , - 861 , - 724 , - 811 , - 226 , - 761 , - 624 , - 711 , - 126 , - 661 , - 524 , - 611 , - 26 , - 561 , - 424 , - 511 , - 822 , - 461 , - 324 , - 411 , - 722 , - 361 , - 224 , - 311 , - 622 , - 261 , - 124 , - 211 , - 522 , - 161 , - 24 , - 111 , - 422 , - 61 , - 820 , - 11 , - 322 , - 857 , - 720 , - 807 , - 222 , - 757 , - 620 , - 707 , - 122 , - 657 , - 520 , - 607 , - 22 , - 557 , - 420 , - 507 , - 818 , - 457 , - 320 , - 407 , - 718 , - 357 , - 220 , - 307 , - 618 , - 257 , - 120 , - 207 , - 518 , - 157 , - 20 , - 107 , - 418 , - 57 , - 816 , - 7 , - 318 , - 853 , - 716 , - 803 , - 218 , - 753 , - 616 , - 703 , - 118 , - 653 , - 516 , - 603 , - 18 , - 553 , - 416 , - 503 , - 814 , - 453 , - 316 , - 403 , - 714 , - 353 , - 216 , - 303 , - 614 , - 253 , - 116 , - 203 , - 514 , - 153 , - 16 , - 103 , - 414 , - 53 , - 812 , - 3 , - 314 , - 849 , - 712 , - 799 , - 214 , - 749 , - 612 , - 699 , - 114 , - 649 , - 512 , - 599 , - 14 , - 549 , - 412 , - 499 , - 810 , - 449 , - 312 , - 399 , - 710 , - 349 , - 212 , - 299 , - 610 , - 249 , - 112 , - 199 , - 510 , - 149 , - 12 , - 99 , - 410 , - 49 , - 808 , - 895 , - 310 , - 845 , - 708 , - 795 , - 210 , - 745 , - 608 , - 695 , - 110 , - 645 , - 508 , - 595 , - 10 , - 545 , - 408 , - 495 , - 806 , - 445 , - 308 , - 395 , - 706 , - 345 , - 208 , - 295 , - 606 , - 245 , - 108 , - 195 , - 506 , - 145 , - 8 , - 95 , - 406 , - 45 , - 804 , - 891 , - 306 , - 841 , - 704 , - 791 , - 206 , - 741 , - 604 , - 691 , - 106 , - 641 , - 504 , - 591 , - 6 , - 541 , - 404 , - 491 , - 802 , - 441 , - 304 , - 391 , - 702 , - 341 , - 204 , - 291 , - 602 , - 241 , - 104 , - 191 , - 502 , - 141 , - 4 , - 91 , - 402 , - 41 , - 800 , - 887 , - 302 , - 837 , - 700 , - 787 , - 202 , - 737 , - 600 , - 687 , - 102 , - 637 , - 500 , - 587 , - 2 , - 537 , - 400 , - 487 , - 798 , - 437 , - 300 , - 387 , - 698 , - 337 , - 200 , - 287 , - 598 , - 237 , - 100 , - 187 , - 498 , - 137 , - 0 , - 59 , - 802 , - 405 , - 692 , - 751 , - 582 , - 185 , - 472 , - 531 , - 362 , - 877 , - 252 , - 311 , - 142 , - 657 , - 32 , - 91 , - 834 , - 437 , - 724 , - 783 , - 614 , - 217 , - 504 , - 563 , - 394 , - 909 , - 284 , - 343 , - 174 , - 689 , - 64 , - 123 , - 866 , - 469 , - 756 , - 815 , - 646 , - 249 , - 536 , - 595 , - 426 , - 29 , - 316 , - 375 , - 206 , - 721 , - 96 , - 155 , - 898 , - 501 , - 788 , - 847 , - 678 , - 281 , - 568 , - 627 , - 458 , - 61 , - 348 , - 407 , - 238 , - 753 , - 128 , - 187 , - 18 , - 533 , - 820 , - 879 , - 710 , - 313 , - 600 , - 659 , - 490 , - 93 , - 380 , - 439 , - 270 , - 785 , - 160 , - 219 , - 50 , - 565 , - 852 , - 911 , - 742 , - 345 , - 632 , - 691 , - 522 , - 125 , - 412 , - 471 , - 302 , - 817 , - 192 , - 251 , - 82 , - 597 , - 884 , - 31 , - 774 , - 377 , - 664 , - 723 , - 554 , - 157 , - 444 , - 503 , - 334 , - 849 , - 224 , - 283 , - 114 , - 629 , - 4 , - 63 , - 806 , - 409 , - 696 , - 755 , - 586 , - 189 , - 476 , - 535 , - 366 , - 881 , - 256 , - 315 , - 146 , - 661 , - 36 , - 95 , - 838 , - 441 , - 728 , - 787 , - 618 , - 221 , - 508 , - 567 , - 398 , - 1 , - 288 , - 347 , - 178 , - 693 , - 68 , - 127 , - 870 , - 473 , - 760 , - 819 , - 650 , - 253 , - 540 , - 599 , - 430 , - 33 , - 320 , - 379 , - 210 , - 725 , - 100 , - 159 , - 902 , - 505 , - 792 , - 851 , - 682 , - 285 , - 572 , - 631 , - 462 , - 65 , - 352 , - 411 , - 242 , - 757 , - 132 , - 191 , - 22 , - 537 , - 824 , - 883 , - 714 , - 317 , - 604 , - 663 , - 494 , - 97 , - 384 , - 443 , - 274 , - 789 , - 164 , - 223 , - 54 , - 569 , - 856 , - 3 , - 746 , - 349 , - 636 , - 695 , - 526 , - 129 , - 416 , - 475 , - 306 , - 821 , - 196 , - 255 , - 86 , - 601 , - 888 , - 35 , - 778 , - 381 , - 668 , - 727 , - 558 , - 161 , - 448 , - 507 , - 338 , - 853 , - 228 , - 287 , - 118 , - 633 , - 8 , - 67 , - 810 , - 413 , - 700 , - 759 , - 590 , - 193 , - 480 , - 539 , - 370 , - 885 , - 260 , - 319 , - 150 , - 665 , - 40 , - 99 , - 842 , - 445 , - 732 , - 791 , - 622 , - 225 , - 512 , - 571 , - 402 , - 5 , - 292 , - 351 , - 182 , - 697 , - 72 , - 131 , - 874 , - 477 , - 764 , - 823 , - 654 , - 257 , - 544 , - 603 , - 434 , - 37 , - 324 , - 383 , - 214 , - 729 , - 104 , - 163 , - 906 , - 509 , - 796 , - 855 , - 686 , - 289 , - 576 , - 635 , - 466 , - 69 , - 356 , - 415 , - 246 , - 761 , - 136 , - 195 , - 26 , - 541 , - 828 , - 887 , - 718 , - 321 , - 608 , - 667 , - 498 , - 101 , - 388 , - 447 , - 278 , - 793 , - 168 , - 227 , - 58 , - 573 , - 860 , - 7 , - 750 , - 353 , - 640 , - 699 , - 530 , - 133 , - 420 , - 479 , - 310 , - 825 , - 200 , - 259 , - 90 , - 605 , - 892 , - 39 , - 782 , - 385 , - 672 , - 731 , - 562 , - 165 , - 452 , - 511 , - 342 , - 857 , - 232 , - 291 , - 122 , - 637 , - 12 , - 71 , - 814 , - 417 , - 704 , - 763 , - 594 , - 197 , - 484 , - 543 , - 374 , - 889 , - 264 , - 323 , - 154 , - 669 , - 44 , - 103 , - 846 , - 449 , - 736 , - 795 , - 626 , - 229 , - 516 , - 575 , - 406 , - 9 , - 296 , - 355 , - 186 , - 701 , - 76 , - 135 , - 878 , - 481 , - 768 , - 827 , - 658 , - 261 , - 548 , - 607 , - 438 , - 41 , - 328 , - 387 , - 218 , - 733 , - 108 , - 167 , - 910 , - 513 , - 800 , - 859 , - 690 , - 293 , - 580 , - 639 , - 470 , - 73 , - 360 , - 419 , - 250 , - 765 , - 140 , - 199 , - 30 , - 545 , - 832 , - 891 , - 722 , - 325 , - 612 , - 671 , - 502 , - 105 , - 392 , - 451 , - 282 , - 797 , - 172 , - 231 , - 62 , - 577 , - 864 , - 11 , - 754 , - 357 , - 644 , - 703 , - 534 , - 137 , - 424 , - 483 , - 314 , - 829 , - 204 , - 263 , - 94 , - 609 , - 896 , - 43 , - 786 , - 389 , - 676 , - 735 , - 566 , - 169 , - 456 , - 515 , - 346 , - 861 , - 236 , - 295 , - 126 , - 641 , - 16 , - 75 , - 818 , - 421 , - 708 , - 767 , - 598 , - 201 , - 488 , - 547 , - 378 , - 893 , - 268 , - 327 , - 158 , - 673 , - 48 , - 107 , - 850 , - 453 , - 740 , - 799 , - 630 , - 233 , - 520 , - 579 , - 410 , - 13 , - 300 , - 359 , - 190 , - 705 , - 80 , - 139 , - 882 , - 485 , - 772 , - 831 , - 662 , - 265 , - 552 , - 611 , - 442 , - 45 , - 332 , - 391 , - 222 , - 737 , - 112 , - 171 , - 2 , - 517 , - 804 , - 863 , - 694 , - 297 , - 584 , - 643 , - 474 , - 77 , - 364 , - 423 , - 254 , - 769 , - 144 , - 203 , - 34 , - 549 , - 836 , - 895 , - 726 , - 329 , - 616 , - 675 , - 506 , - 109 , - 396 , - 455 , - 286 , - 801 , - 176 , - 235 , - 66 , - 581 , - 868 , - 15 , - 758 , - 361 , - 648 , - 707 , - 538 , - 141 , - 428 , - 487 , - 318 , - 833 , - 208 , - 267 , - 98 , - 613 , - 900 , - 47 , - 790 , - 393 , - 680 , - 739 , - 570 , - 173 , - 460 , - 519 , - 350 , - 865 , - 240 , - 299 , - 130 , - 645 , - 20 , - 79 , - 822 , - 425 , - 712 , - 771 , - 602 , - 205 , - 492 , - 551 , - 382 , - 897 , - 272 , - 331 , - 162 , - 677 , - 52 , - 111 , - 854 , - 457 , - 744 , - 803 , - 634 , - 237 , - 524 , - 583 , - 414 , - 17 , - 304 , - 363 , - 194 , - 709 , - 84 , - 143 , - 886 , - 489 , - 776 , - 835 , - 666 , - 269 , - 556 , - 615 , - 446 , - 49 , - 336 , - 395 , - 226 , - 741 , - 116 , - 175 , - 6 , - 521 , - 808 , - 867 , - 698 , - 301 , - 588 , - 647 , - 478 , - 81 , - 368 , - 427 , - 258 , - 773 , - 148 , - 207 , - 38 , - 553 , - 840 , - 899 , - 730 , - 333 , - 620 , - 679 , - 510 , - 113 , - 400 , - 459 , - 290 , - 805 , - 180 , - 239 , - 70 , - 585 , - 872 , - 19 , - 762 , - 365 , - 652 , - 711 , - 542 , - 145 , - 432 , - 491 , - 322 , - 837 , - 212 , - 271 , - 102 , - 617 , - 904 , - 51 , - 794 , - 397 , - 684 , - 743 , - 574 , - 177 , - 464 , - 523 , - 354 , - 869 , - 244 , - 303 , - 134 , - 649 , - 24 , - 83 , - 826 , - 429 , - 716 , - 775 , - 606 , - 209 , - 496 , - 555 , - 386 , - 901 , - 276 , - 335 , - 166 , - 681 , - 56 , - 115 , - 858 , - 461 , - 748 , - 807 , - 638 , - 241 , - 528 , - 587 , - 418 , - 21 , - 308 , - 367 , - 198 , - 713 , - 88 , - 147 , - 890 , - 493 , - 780 , - 839 , - 670 , - 273 , - 560 , - 619 , - 450 , - 53 , - 340 , - 399 , - 230 , - 745 , - 120 , - 179 , - 10 , - 525 , - 812 , - 871 , - 702 , - 305 , - 592 , - 651 , - 482 , - 85 , - 372 , - 431 , - 262 , - 777 , - 152 , - 211 , - 42 , - 557 , - 844 , - 903 , - 734 , - 337 , - 624 , - 683 , - 514 , - 117 , - 404 , - 463 , - 294 , - 809 , - 184 , - 243 , - 74 , - 589 , - 876 , - 23 , - 766 , - 369 , - 656 , - 715 , - 546 , - 149 , - 436 , - 495 , - 326 , - 841 , - 216 , - 275 , - 106 , - 621 , - 908 , - 55 , - 798 , - 401 , - 688 , - 747 , - 578 , - 181 , - 468 , - 527 , - 358 , - 873 , - 248 , - 307 , - 138 , - 653 , - 28 , - 87 , - 830 , - 433 , - 720 , - 779 , - 610 , - 213 , - 500 , - 559 , - 390 , - 905 , - 280 , - 339 , - 170 , - 685 , - 60 , - 119 , - 862 , - 465 , - 752 , - 811 , - 642 , - 245 , - 532 , - 591 , - 422 , - 25 , - 312 , - 371 , - 202 , - 717 , - 92 , - 151 , - 894 , - 497 , - 784 , - 843 , - 674 , - 277 , - 564 , - 623 , - 454 , - 57 , - 344 , - 403 , - 234 , - 749 , - 124 , - 183 , - 14 , - 529 , - 816 , - 875 , - 706 , - 309 , - 596 , - 655 , - 486 , - 89 , - 376 , - 435 , - 266 , - 781 , - 156 , - 215 , - 46 , - 561 , - 848 , - 907 , - 738 , - 341 , - 628 , - 687 , - 518 , - 121 , - 408 , - 467 , - 298 , - 813 , - 188 , - 247 , - 78 , - 593 , - 880 , - 27 , - 770 , - 373 , - 660 , - 719 , - 550 , - 153 , - 440 , - 499 , - 330 , - 845 , - 220 , - 279 , - 110 , - 625 , - 0 , - 553 , - 294 , - 615 , - 124 , - 213 , - 418 , - 275 , - 248 , - 801 , - 542 , - 863 , - 372 , - 461 , - 666 , - 523 , - 496 , - 121 , - 790 , - 183 , - 620 , - 709 , - 914 , - 771 , - 744 , - 369 , - 110 , - 431 , - 868 , - 29 , - 234 , - 91 , - 64 , - 617 , - 358 , - 679 , - 188 , - 277 , - 482 , - 339 , - 312 , - 865 , - 606 , - 927 , - 436 , - 525 , - 730 , - 587 , - 560 , - 185 , - 854 , - 247 , - 684 , - 773 , - 50 , - 835 , - 808 , - 433 , - 174 , - 495 , - 4 , - 93 , - 298 , - 155 , - 128 , - 681 , - 422 , - 743 , - 252 , - 341 , - 546 , - 403 , - 376 , - 1 , - 670 , - 63 , - 500 , - 589 , - 794 , - 651 , - 624 , - 249 , - 918 , - 311 , - 748 , - 837 , - 114 , - 899 , - 872 , - 497 , - 238 , - 559 , - 68 , - 157 , - 362 , - 219 , - 192 , - 745 , - 486 , - 807 , - 316 , - 405 , - 610 , - 467 , - 440 , - 65 , - 734 , - 127 , - 564 , - 653 , - 858 , - 715 , - 688 , - 313 , - 54 , - 375 , - 812 , - 901 , - 178 , - 35 , - 8 , - 561 , - 302 , - 623 , - 132 , - 221 , - 426 , - 283 , - 256 , - 809 , - 550 , - 871 , - 380 , - 469 , - 674 , - 531 , - 504 , - 129 , - 798 , - 191 , - 628 , - 717 , - 922 , - 779 , - 752 , - 377 , - 118 , - 439 , - 876 , - 37 , - 242 , - 99 , - 72 , - 625 , - 366 , - 687 , - 196 , - 285 , - 490 , - 347 , - 320 , - 873 , - 614 , - 7 , - 444 , - 533 , - 738 , - 595 , - 568 , - 193 , - 862 , - 255 , - 692 , - 781 , - 58 , - 843 , - 816 , - 441 , - 182 , - 503 , - 12 , - 101 , - 306 , - 163 , - 136 , - 689 , - 430 , - 751 , - 260 , - 349 , - 554 , - 411 , - 384 , - 9 , - 678 , - 71 , - 508 , - 597 , - 802 , - 659 , - 632 , - 257 , - 926 , - 319 , - 756 , - 845 , - 122 , - 907 , - 880 , - 505 , - 246 , - 567 , - 76 , - 165 , - 370 , - 227 , - 200 , - 753 , - 494 , - 815 , - 324 , - 413 , - 618 , - 475 , - 448 , - 73 , - 742 , - 135 , - 572 , - 661 , - 866 , - 723 , - 696 , - 321 , - 62 , - 383 , - 820 , - 909 , - 186 , - 43 , - 16 , - 569 , - 310 , - 631 , - 140 , - 229 , - 434 , - 291 , - 264 , - 817 , - 558 , - 879 , - 388 , - 477 , - 682 , - 539 , - 512 , - 137 , - 806 , - 199 , - 636 , - 725 , - 2 , - 787 , - 760 , - 385 , - 126 , - 447 , - 884 , - 45 , - 250 , - 107 , - 80 , - 633 , - 374 , - 695 , - 204 , - 293 , - 498 , - 355 , - 328 , - 881 , - 622 , - 15 , - 452 , - 541 , - 746 , - 603 , - 576 , - 201 , - 870 , - 263 , - 700 , - 789 , - 66 , - 851 , - 824 , - 449 , - 190 , - 511 , - 20 , - 109 , - 314 , - 171 , - 144 , - 697 , - 438 , - 759 , - 268 , - 357 , - 562 , - 419 , - 392 , - 17 , - 686 , - 79 , - 516 , - 605 , - 810 , - 667 , - 640 , - 265 , - 6 , - 327 , - 764 , - 853 , - 130 , - 915 , - 888 , - 513 , - 254 , - 575 , - 84 , - 173 , - 378 , - 235 , - 208 , - 761 , - 502 , - 823 , - 332 , - 421 , - 626 , - 483 , - 456 , - 81 , - 750 , - 143 , - 580 , - 669 , - 874 , - 731 , - 704 , - 329 , - 70 , - 391 , - 828 , - 917 , - 194 , - 51 , - 24 , - 577 , - 318 , - 639 , - 148 , - 237 , - 442 , - 299 , - 272 , - 825 , - 566 , - 887 , - 396 , - 485 , - 690 , - 547 , - 520 , - 145 , - 814 , - 207 , - 644 , - 733 , - 10 , - 795 , - 768 , - 393 , - 134 , - 455 , - 892 , - 53 , - 258 , - 115 , - 88 , - 641 , - 382 , - 703 , - 212 , - 301 , - 506 , - 363 , - 336 , - 889 , - 630 , - 23 , - 460 , - 549 , - 754 , - 611 , - 584 , - 209 , - 878 , - 271 , - 708 , - 797 , - 74 , - 859 , - 832 , - 457 , - 198 , - 519 , - 28 , - 117 , - 322 , - 179 , - 152 , - 705 , - 446 , - 767 , - 276 , - 365 , - 570 , - 427 , - 400 , - 25 , - 694 , - 87 , - 524 , - 613 , - 818 , - 675 , - 648 , - 273 , - 14 , - 335 , - 772 , - 861 , - 138 , - 923 , - 896 , - 521 , - 262 , - 583 , - 92 , - 181 , - 386 , - 243 , - 216 , - 769 , - 510 , - 831 , - 340 , - 429 , - 634 , - 491 , - 464 , - 89 , - 758 , - 151 , - 588 , - 677 , - 882 , - 739 , - 712 , - 337 , - 78 , - 399 , - 836 , - 925 , - 202 , - 59 , - 32 , - 585 , - 326 , - 647 , - 156 , - 245 , - 450 , - 307 , - 280 , - 833 , - 574 , - 895 , - 404 , - 493 , - 698 , - 555 , - 528 , - 153 , - 822 , - 215 , - 652 , - 741 , - 18 , - 803 , - 776 , - 401 , - 142 , - 463 , - 900 , - 61 , - 266 , - 123 , - 96 , - 649 , - 390 , - 711 , - 220 , - 309 , - 514 , - 371 , - 344 , - 897 , - 638 , - 31 , - 468 , - 557 , - 762 , - 619 , - 592 , - 217 , - 886 , - 279 , - 716 , - 805 , - 82 , - 867 , - 840 , - 465 , - 206 , - 527 , - 36 , - 125 , - 330 , - 187 , - 160 , - 713 , - 454 , - 775 , - 284 , - 373 , - 578 , - 435 , - 408 , - 33 , - 702 , - 95 , - 532 , - 621 , - 826 , - 683 , - 656 , - 281 , - 22 , - 343 , - 780 , - 869 , - 146 , - 3 , - 904 , - 529 , - 270 , - 591 , - 100 , - 189 , - 394 , - 251 , - 224 , - 777 , - 518 , - 839 , - 348 , - 437 , - 642 , - 499 , - 472 , - 97 , - 766 , - 159 , - 596 , - 685 , - 890 , - 747 , - 720 , - 345 , - 86 , - 407 , - 844 , - 5 , - 210 , - 67 , - 40 , - 593 , - 334 , - 655 , - 164 , - 253 , - 458 , - 315 , - 288 , - 841 , - 582 , - 903 , - 412 , - 501 , - 706 , - 563 , - 536 , - 161 , - 830 , - 223 , - 660 , - 749 , - 26 , - 811 , - 784 , - 409 , - 150 , - 471 , - 908 , - 69 , - 274 , - 131 , - 104 , - 657 , - 398 , - 719 , - 228 , - 317 , - 522 , - 379 , - 352 , - 905 , - 646 , - 39 , - 476 , - 565 , - 770 , - 627 , - 600 , - 225 , - 894 , - 287 , - 724 , - 813 , - 90 , - 875 , - 848 , - 473 , - 214 , - 535 , - 44 , - 133 , - 338 , - 195 , - 168 , - 721 , - 462 , - 783 , - 292 , - 381 , - 586 , - 443 , - 416 , - 41 , - 710 , - 103 , - 540 , - 629 , - 834 , - 691 , - 664 , - 289 , - 30 , - 351 , - 788 , - 877 , - 154 , - 11 , - 912 , - 537 , - 278 , - 599 , - 108 , - 197 , - 402 , - 259 , - 232 , - 785 , - 526 , - 847 , - 356 , - 445 , - 650 , - 507 , - 480 , - 105 , - 774 , - 167 , - 604 , - 693 , - 898 , - 755 , - 728 , - 353 , - 94 , - 415 , - 852 , - 13 , - 218 , - 75 , - 48 , - 601 , - 342 , - 663 , - 172 , - 261 , - 466 , - 323 , - 296 , - 849 , - 590 , - 911 , - 420 , - 509 , - 714 , - 571 , - 544 , - 169 , - 838 , - 231 , - 668 , - 757 , - 34 , - 819 , - 792 , - 417 , - 158 , - 479 , - 916 , - 77 , - 282 , - 139 , - 112 , - 665 , - 406 , - 727 , - 236 , - 325 , - 530 , - 387 , - 360 , - 913 , - 654 , - 47 , - 484 , - 573 , - 778 , - 635 , - 608 , - 233 , - 902 , - 295 , - 732 , - 821 , - 98 , - 883 , - 856 , - 481 , - 222 , - 543 , - 52 , - 141 , - 346 , - 203 , - 176 , - 729 , - 470 , - 791 , - 300 , - 389 , - 594 , - 451 , - 424 , - 49 , - 718 , - 111 , - 548 , - 637 , - 842 , - 699 , - 672 , - 297 , - 38 , - 359 , - 796 , - 885 , - 162 , - 19 , - 920 , - 545 , - 286 , - 607 , - 116 , - 205 , - 410 , - 267 , - 240 , - 793 , - 534 , - 855 , - 364 , - 453 , - 658 , - 515 , - 488 , - 113 , - 782 , - 175 , - 612 , - 701 , - 906 , - 763 , - 736 , - 361 , - 102 , - 423 , - 860 , - 21 , - 226 , - 83 , - 56 , - 609 , - 350 , - 671 , - 180 , - 269 , - 474 , - 331 , - 304 , - 857 , - 598 , - 919 , - 428 , - 517 , - 722 , - 579 , - 552 , - 177 , - 846 , - 239 , - 676 , - 765 , - 42 , - 827 , - 800 , - 425 , - 166 , - 487 , - 924 , - 85 , - 290 , - 147 , - 120 , - 673 , - 414 , - 735 , - 244 , - 333 , - 538 , - 395 , - 368 , - 921 , - 662 , - 55 , - 492 , - 581 , - 786 , - 643 , - 616 , - 241 , - 910 , - 303 , - 740 , - 829 , - 106 , - 891 , - 864 , - 489 , - 230 , - 551 , - 60 , - 149 , - 354 , - 211 , - 184 , - 737 , - 478 , - 799 , - 308 , - 397 , - 602 , - 459 , - 432 , - 57 , - 726 , - 119 , - 556 , - 645 , - 850 , - 707 , - 680 , - 305 , - 46 , - 367 , - 804 , - 893 , - 170 , - 27 , - 0 , - 57 , - 350 , - 879 , - 700 , - 757 , - 106 , - 635 , - 456 , - 513 , - 806 , - 391 , - 212 , - 269 , - 562 , - 147 , - 912 , - 25 , - 318 , - 847 , - 668 , - 725 , - 74 , - 603 , - 424 , - 481 , - 774 , - 359 , - 180 , - 237 , - 530 , - 115 , - 880 , - 937 , - 286 , - 815 , - 636 , - 693 , - 42 , - 571 , - 392 , - 449 , - 742 , - 327 , - 148 , - 205 , - 498 , - 83 , - 848 , - 905 , - 254 , - 783 , - 604 , - 661 , - 10 , - 539 , - 360 , - 417 , - 710 , - 295 , - 116 , - 173 , - 466 , - 51 , - 816 , - 873 , - 222 , - 751 , - 572 , - 629 , - 922 , - 507 , - 328 , - 385 , - 678 , - 263 , - 84 , - 141 , - 434 , - 19 , - 784 , - 841 , - 190 , - 719 , - 540 , - 597 , - 890 , - 475 , - 296 , - 353 , - 646 , - 231 , - 52 , - 109 , - 402 , - 931 , - 752 , - 809 , - 158 , - 687 , - 508 , - 565 , - 858 , - 443 , - 264 , - 321 , - 614 , - 199 , - 20 , - 77 , - 370 , - 899 , - 720 , - 777 , - 126 , - 655 , - 476 , - 533 , - 826 , - 411 , - 232 , - 289 , - 582 , - 167 , - 932 , - 45 , - 338 , - 867 , - 688 , - 745 , - 94 , - 623 , - 444 , - 501 , - 794 , - 379 , - 200 , - 257 , - 550 , - 135 , - 900 , - 13 , - 306 , - 835 , - 656 , - 713 , - 62 , - 591 , - 412 , - 469 , - 762 , - 347 , - 168 , - 225 , - 518 , - 103 , - 868 , - 925 , - 274 , - 803 , - 624 , - 681 , - 30 , - 559 , - 380 , - 437 , - 730 , - 315 , - 136 , - 193 , - 486 , - 71 , - 836 , - 893 , - 242 , - 771 , - 592 , - 649 , - 942 , - 527 , - 348 , - 405 , - 698 , - 283 , - 104 , - 161 , - 454 , - 39 , - 804 , - 861 , - 210 , - 739 , - 560 , - 617 , - 910 , - 495 , - 316 , - 373 , - 666 , - 251 , - 72 , - 129 , - 422 , - 7 , - 772 , - 829 , - 178 , - 707 , - 528 , - 585 , - 878 , - 463 , - 284 , - 341 , - 634 , - 219 , - 40 , - 97 , - 390 , - 919 , - 740 , - 797 , - 146 , - 675 , - 496 , - 553 , - 846 , - 431 , - 252 , - 309 , - 602 , - 187 , - 8 , - 65 , - 358 , - 887 , - 708 , - 765 , - 114 , - 643 , - 464 , - 521 , - 814 , - 399 , - 220 , - 277 , - 570 , - 155 , - 920 , - 33 , - 326 , - 855 , - 676 , - 733 , - 82 , - 611 , - 432 , - 489 , - 782 , - 367 , - 188 , - 245 , - 538 , - 123 , - 888 , - 1 , - 294 , - 823 , - 644 , - 701 , - 50 , - 579 , - 400 , - 457 , - 750 , - 335 , - 156 , - 213 , - 506 , - 91 , - 856 , - 913 , - 262 , - 791 , - 612 , - 669 , - 18 , - 547 , - 368 , - 425 , - 718 , - 303 , - 124 , - 181 , - 474 , - 59 , - 824 , - 881 , - 230 , - 759 , - 580 , - 637 , - 930 , - 515 , - 336 , - 393 , - 686 , - 271 , - 92 , - 149 , - 442 , - 27 , - 792 , - 849 , - 198 , - 727 , - 548 , - 605 , - 898 , - 483 , - 304 , - 361 , - 654 , - 239 , - 60 , - 117 , - 410 , - 939 , - 760 , - 817 , - 166 , - 695 , - 516 , - 573 , - 866 , - 451 , - 272 , - 329 , - 622 , - 207 , - 28 , - 85 , - 378 , - 907 , - 728 , - 785 , - 134 , - 663 , - 484 , - 541 , - 834 , - 419 , - 240 , - 297 , - 590 , - 175 , - 940 , - 53 , - 346 , - 875 , - 696 , - 753 , - 102 , - 631 , - 452 , - 509 , - 802 , - 387 , - 208 , - 265 , - 558 , - 143 , - 908 , - 21 , - 314 , - 843 , - 664 , - 721 , - 70 , - 599 , - 420 , - 477 , - 770 , - 355 , - 176 , - 233 , - 526 , - 111 , - 876 , - 933 , - 282 , - 811 , - 632 , - 689 , - 38 , - 567 , - 388 , - 445 , - 738 , - 323 , - 144 , - 201 , - 494 , - 79 , - 844 , - 901 , - 250 , - 779 , - 600 , - 657 , - 6 , - 535 , - 356 , - 413 , - 706 , - 291 , - 112 , - 169 , - 462 , - 47 , - 812 , - 869 , - 218 , - 747 , - 568 , - 625 , - 918 , - 503 , - 324 , - 381 , - 674 , - 259 , - 80 , - 137 , - 430 , - 15 , - 780 , - 837 , - 186 , - 715 , - 536 , - 593 , - 886 , - 471 , - 292 , - 349 , - 642 , - 227 , - 48 , - 105 , - 398 , - 927 , - 748 , - 805 , - 154 , - 683 , - 504 , - 561 , - 854 , - 439 , - 260 , - 317 , - 610 , - 195 , - 16 , - 73 , - 366 , - 895 , - 716 , - 773 , - 122 , - 651 , - 472 , - 529 , - 822 , - 407 , - 228 , - 285 , - 578 , - 163 , - 928 , - 41 , - 334 , - 863 , - 684 , - 741 , - 90 , - 619 , - 440 , - 497 , - 790 , - 375 , - 196 , - 253 , - 546 , - 131 , - 896 , - 9 , - 302 , - 831 , - 652 , - 709 , - 58 , - 587 , - 408 , - 465 , - 758 , - 343 , - 164 , - 221 , - 514 , - 99 , - 864 , - 921 , - 270 , - 799 , - 620 , - 677 , - 26 , - 555 , - 376 , - 433 , - 726 , - 311 , - 132 , - 189 , - 482 , - 67 , - 832 , - 889 , - 238 , - 767 , - 588 , - 645 , - 938 , - 523 , - 344 , - 401 , - 694 , - 279 , - 100 , - 157 , - 450 , - 35 , - 800 , - 857 , - 206 , - 735 , - 556 , - 613 , - 906 , - 491 , - 312 , - 369 , - 662 , - 247 , - 68 , - 125 , - 418 , - 3 , - 768 , - 825 , - 174 , - 703 , - 524 , - 581 , - 874 , - 459 , - 280 , - 337 , - 630 , - 215 , - 36 , - 93 , - 386 , - 915 , - 736 , - 793 , - 142 , - 671 , - 492 , - 549 , - 842 , - 427 , - 248 , - 305 , - 598 , - 183 , - 4 , - 61 , - 354 , - 883 , - 704 , - 761 , - 110 , - 639 , - 460 , - 517 , - 810 , - 395 , - 216 , - 273 , - 566 , - 151 , - 916 , - 29 , - 322 , - 851 , - 672 , - 729 , - 78 , - 607 , - 428 , - 485 , - 778 , - 363 , - 184 , - 241 , - 534 , - 119 , - 884 , - 941 , - 290 , - 819 , - 640 , - 697 , - 46 , - 575 , - 396 , - 453 , - 746 , - 331 , - 152 , - 209 , - 502 , - 87 , - 852 , - 909 , - 258 , - 787 , - 608 , - 665 , - 14 , - 543 , - 364 , - 421 , - 714 , - 299 , - 120 , - 177 , - 470 , - 55 , - 820 , - 877 , - 226 , - 755 , - 576 , - 633 , - 926 , - 511 , - 332 , - 389 , - 682 , - 267 , - 88 , - 145 , - 438 , - 23 , - 788 , - 845 , - 194 , - 723 , - 544 , - 601 , - 894 , - 479 , - 300 , - 357 , - 650 , - 235 , - 56 , - 113 , - 406 , - 935 , - 756 , - 813 , - 162 , - 691 , - 512 , - 569 , - 862 , - 447 , - 268 , - 325 , - 618 , - 203 , - 24 , - 81 , - 374 , - 903 , - 724 , - 781 , - 130 , - 659 , - 480 , - 537 , - 830 , - 415 , - 236 , - 293 , - 586 , - 171 , - 936 , - 49 , - 342 , - 871 , - 692 , - 749 , - 98 , - 627 , - 448 , - 505 , - 798 , - 383 , - 204 , - 261 , - 554 , - 139 , - 904 , - 17 , - 310 , - 839 , - 660 , - 717 , - 66 , - 595 , - 416 , - 473 , - 766 , - 351 , - 172 , - 229 , - 522 , - 107 , - 872 , - 929 , - 278 , - 807 , - 628 , - 685 , - 34 , - 563 , - 384 , - 441 , - 734 , - 319 , - 140 , - 197 , - 490 , - 75 , - 840 , - 897 , - 246 , - 775 , - 596 , - 653 , - 2 , - 531 , - 352 , - 409 , - 702 , - 287 , - 108 , - 165 , - 458 , - 43 , - 808 , - 865 , - 214 , - 743 , - 564 , - 621 , - 914 , - 499 , - 320 , - 377 , - 670 , - 255 , - 76 , - 133 , - 426 , - 11 , - 776 , - 833 , - 182 , - 711 , - 532 , - 589 , - 882 , - 467 , - 288 , - 345 , - 638 , - 223 , - 44 , - 101 , - 394 , - 923 , - 744 , - 801 , - 150 , - 679 , - 500 , - 557 , - 850 , - 435 , - 256 , - 313 , - 606 , - 191 , - 12 , - 69 , - 362 , - 891 , - 712 , - 769 , - 118 , - 647 , - 468 , - 525 , - 818 , - 403 , - 224 , - 281 , - 574 , - 159 , - 924 , - 37 , - 330 , - 859 , - 680 , - 737 , - 86 , - 615 , - 436 , - 493 , - 786 , - 371 , - 192 , - 249 , - 542 , - 127 , - 892 , - 5 , - 298 , - 827 , - 648 , - 705 , - 54 , - 583 , - 404 , - 461 , - 754 , - 339 , - 160 , - 217 , - 510 , - 95 , - 860 , - 917 , - 266 , - 795 , - 616 , - 673 , - 22 , - 551 , - 372 , - 429 , - 722 , - 307 , - 128 , - 185 , - 478 , - 63 , - 828 , - 885 , - 234 , - 763 , - 584 , - 641 , - 934 , - 519 , - 340 , - 397 , - 690 , - 275 , - 96 , - 153 , - 446 , - 31 , - 796 , - 853 , - 202 , - 731 , - 552 , - 609 , - 902 , - 487 , - 308 , - 365 , - 658 , - 243 , - 64 , - 121 , - 414 , - 943 , - 764 , - 821 , - 170 , - 699 , - 520 , - 577 , - 870 , - 455 , - 276 , - 333 , - 626 , - 211 , - 32 , - 89 , - 382 , - 911 , - 732 , - 789 , - 138 , - 667 , - 488 , - 545 , - 838 , - 423 , - 244 , - 301 , - 594 , - 179 , - 0 , - 329 , - 58 , - 147 , - 596 , - 445 , - 654 , - 263 , - 232 , - 561 , - 290 , - 379 , - 828 , - 677 , - 886 , - 495 , - 464 , - 793 , - 522 , - 611 , - 100 , - 909 , - 158 , - 727 , - 696 , - 65 , - 754 , - 843 , - 332 , - 181 , - 390 , - 959 , - 928 , - 297 , - 26 , - 115 , - 564 , - 413 , - 622 , - 231 , - 200 , - 529 , - 258 , - 347 , - 796 , - 645 , - 854 , - 463 , - 432 , - 761 , - 490 , - 579 , - 68 , - 877 , - 126 , - 695 , - 664 , - 33 , - 722 , - 811 , - 300 , - 149 , - 358 , - 927 , - 896 , - 265 , - 954 , - 83 , - 532 , - 381 , - 590 , - 199 , - 168 , - 497 , - 226 , - 315 , - 764 , - 613 , - 822 , - 431 , - 400 , - 729 , - 458 , - 547 , - 36 , - 845 , - 94 , - 663 , - 632 , - 1 , - 690 , - 779 , - 268 , - 117 , - 326 , - 895 , - 864 , - 233 , - 922 , - 51 , - 500 , - 349 , - 558 , - 167 , - 136 , - 465 , - 194 , - 283 , - 732 , - 581 , - 790 , - 399 , - 368 , - 697 , - 426 , - 515 , - 4 , - 813 , - 62 , - 631 , - 600 , - 929 , - 658 , - 747 , - 236 , - 85 , - 294 , - 863 , - 832 , - 201 , - 890 , - 19 , - 468 , - 317 , - 526 , - 135 , - 104 , - 433 , - 162 , - 251 , - 700 , - 549 , - 758 , - 367 , - 336 , - 665 , - 394 , - 483 , - 932 , - 781 , - 30 , - 599 , - 568 , - 897 , - 626 , - 715 , - 204 , - 53 , - 262 , - 831 , - 800 , - 169 , - 858 , - 947 , - 436 , - 285 , - 494 , - 103 , - 72 , - 401 , - 130 , - 219 , - 668 , - 517 , - 726 , - 335 , - 304 , - 633 , - 362 , - 451 , - 900 , - 749 , - 958 , - 567 , - 536 , - 865 , - 594 , - 683 , - 172 , - 21 , - 230 , - 799 , - 768 , - 137 , - 826 , - 915 , - 404 , - 253 , - 462 , - 71 , - 40 , - 369 , - 98 , - 187 , - 636 , - 485 , - 694 , - 303 , - 272 , - 601 , - 330 , - 419 , - 868 , - 717 , - 926 , - 535 , - 504 , - 833 , - 562 , - 651 , - 140 , - 949 , - 198 , - 767 , - 736 , - 105 , - 794 , - 883 , - 372 , - 221 , - 430 , - 39 , - 8 , - 337 , - 66 , - 155 , - 604 , - 453 , - 662 , - 271 , - 240 , - 569 , - 298 , - 387 , - 836 , - 685 , - 894 , - 503 , - 472 , - 801 , - 530 , - 619 , - 108 , - 917 , - 166 , - 735 , - 704 , - 73 , - 762 , - 851 , - 340 , - 189 , - 398 , - 7 , - 936 , - 305 , - 34 , - 123 , - 572 , - 421 , - 630 , - 239 , - 208 , - 537 , - 266 , - 355 , - 804 , - 653 , - 862 , - 471 , - 440 , - 769 , - 498 , - 587 , - 76 , - 885 , - 134 , - 703 , - 672 , - 41 , - 730 , - 819 , - 308 , - 157 , - 366 , - 935 , - 904 , - 273 , - 2 , - 91 , - 540 , - 389 , - 598 , - 207 , - 176 , - 505 , - 234 , - 323 , - 772 , - 621 , - 830 , - 439 , - 408 , - 737 , - 466 , - 555 , - 44 , - 853 , - 102 , - 671 , - 640 , - 9 , - 698 , - 787 , - 276 , - 125 , - 334 , - 903 , - 872 , - 241 , - 930 , - 59 , - 508 , - 357 , - 566 , - 175 , - 144 , - 473 , - 202 , - 291 , - 740 , - 589 , - 798 , - 407 , - 376 , - 705 , - 434 , - 523 , - 12 , - 821 , - 70 , - 639 , - 608 , - 937 , - 666 , - 755 , - 244 , - 93 , - 302 , - 871 , - 840 , - 209 , - 898 , - 27 , - 476 , - 325 , - 534 , - 143 , - 112 , - 441 , - 170 , - 259 , - 708 , - 557 , - 766 , - 375 , - 344 , - 673 , - 402 , - 491 , - 940 , - 789 , - 38 , - 607 , - 576 , - 905 , - 634 , - 723 , - 212 , - 61 , - 270 , - 839 , - 808 , - 177 , - 866 , - 955 , - 444 , - 293 , - 502 , - 111 , - 80 , - 409 , - 138 , - 227 , - 676 , - 525 , - 734 , - 343 , - 312 , - 641 , - 370 , - 459 , - 908 , - 757 , - 6 , - 575 , - 544 , - 873 , - 602 , - 691 , - 180 , - 29 , - 238 , - 807 , - 776 , - 145 , - 834 , - 923 , - 412 , - 261 , - 470 , - 79 , - 48 , - 377 , - 106 , - 195 , - 644 , - 493 , - 702 , - 311 , - 280 , - 609 , - 338 , - 427 , - 876 , - 725 , - 934 , - 543 , - 512 , - 841 , - 570 , - 659 , - 148 , - 957 , - 206 , - 775 , - 744 , - 113 , - 802 , - 891 , - 380 , - 229 , - 438 , - 47 , - 16 , - 345 , - 74 , - 163 , - 612 , - 461 , - 670 , - 279 , - 248 , - 577 , - 306 , - 395 , - 844 , - 693 , - 902 , - 511 , - 480 , - 809 , - 538 , - 627 , - 116 , - 925 , - 174 , - 743 , - 712 , - 81 , - 770 , - 859 , - 348 , - 197 , - 406 , - 15 , - 944 , - 313 , - 42 , - 131 , - 580 , - 429 , - 638 , - 247 , - 216 , - 545 , - 274 , - 363 , - 812 , - 661 , - 870 , - 479 , - 448 , - 777 , - 506 , - 595 , - 84 , - 893 , - 142 , - 711 , - 680 , - 49 , - 738 , - 827 , - 316 , - 165 , - 374 , - 943 , - 912 , - 281 , - 10 , - 99 , - 548 , - 397 , - 606 , - 215 , - 184 , - 513 , - 242 , - 331 , - 780 , - 629 , - 838 , - 447 , - 416 , - 745 , - 474 , - 563 , - 52 , - 861 , - 110 , - 679 , - 648 , - 17 , - 706 , - 795 , - 284 , - 133 , - 342 , - 911 , - 880 , - 249 , - 938 , - 67 , - 516 , - 365 , - 574 , - 183 , - 152 , - 481 , - 210 , - 299 , - 748 , - 597 , - 806 , - 415 , - 384 , - 713 , - 442 , - 531 , - 20 , - 829 , - 78 , - 647 , - 616 , - 945 , - 674 , - 763 , - 252 , - 101 , - 310 , - 879 , - 848 , - 217 , - 906 , - 35 , - 484 , - 333 , - 542 , - 151 , - 120 , - 449 , - 178 , - 267 , - 716 , - 565 , - 774 , - 383 , - 352 , - 681 , - 410 , - 499 , - 948 , - 797 , - 46 , - 615 , - 584 , - 913 , - 642 , - 731 , - 220 , - 69 , - 278 , - 847 , - 816 , - 185 , - 874 , - 3 , - 452 , - 301 , - 510 , - 119 , - 88 , - 417 , - 146 , - 235 , - 684 , - 533 , - 742 , - 351 , - 320 , - 649 , - 378 , - 467 , - 916 , - 765 , - 14 , - 583 , - 552 , - 881 , - 610 , - 699 , - 188 , - 37 , - 246 , - 815 , - 784 , - 153 , - 842 , - 931 , - 420 , - 269 , - 478 , - 87 , - 56 , - 385 , - 114 , - 203 , - 652 , - 501 , - 710 , - 319 , - 288 , - 617 , - 346 , - 435 , - 884 , - 733 , - 942 , - 551 , - 520 , - 849 , - 578 , - 667 , - 156 , - 5 , - 214 , - 783 , - 752 , - 121 , - 810 , - 899 , - 388 , - 237 , - 446 , - 55 , - 24 , - 353 , - 82 , - 171 , - 620 , - 469 , - 678 , - 287 , - 256 , - 585 , - 314 , - 403 , - 852 , - 701 , - 910 , - 519 , - 488 , - 817 , - 546 , - 635 , - 124 , - 933 , - 182 , - 751 , - 720 , - 89 , - 778 , - 867 , - 356 , - 205 , - 414 , - 23 , - 952 , - 321 , - 50 , - 139 , - 588 , - 437 , - 646 , - 255 , - 224 , - 553 , - 282 , - 371 , - 820 , - 669 , - 878 , - 487 , - 456 , - 785 , - 514 , - 603 , - 92 , - 901 , - 150 , - 719 , - 688 , - 57 , - 746 , - 835 , - 324 , - 173 , - 382 , - 951 , - 920 , - 289 , - 18 , - 107 , - 556 , - 405 , - 614 , - 223 , - 192 , - 521 , - 250 , - 339 , - 788 , - 637 , - 846 , - 455 , - 424 , - 753 , - 482 , - 571 , - 60 , - 869 , - 118 , - 687 , - 656 , - 25 , - 714 , - 803 , - 292 , - 141 , - 350 , - 919 , - 888 , - 257 , - 946 , - 75 , - 524 , - 373 , - 582 , - 191 , - 160 , - 489 , - 218 , - 307 , - 756 , - 605 , - 814 , - 423 , - 392 , - 721 , - 450 , - 539 , - 28 , - 837 , - 86 , - 655 , - 624 , - 953 , - 682 , - 771 , - 260 , - 109 , - 318 , - 887 , - 856 , - 225 , - 914 , - 43 , - 492 , - 341 , - 550 , - 159 , - 128 , - 457 , - 186 , - 275 , - 724 , - 573 , - 782 , - 391 , - 360 , - 689 , - 418 , - 507 , - 956 , - 805 , - 54 , - 623 , - 592 , - 921 , - 650 , - 739 , - 228 , - 77 , - 286 , - 855 , - 824 , - 193 , - 882 , - 11 , - 460 , - 309 , - 518 , - 127 , - 96 , - 425 , - 154 , - 243 , - 692 , - 541 , - 750 , - 359 , - 328 , - 657 , - 386 , - 475 , - 924 , - 773 , - 22 , - 591 , - 560 , - 889 , - 618 , - 707 , - 196 , - 45 , - 254 , - 823 , - 792 , - 161 , - 850 , - 939 , - 428 , - 277 , - 486 , - 95 , - 64 , - 393 , - 122 , - 211 , - 660 , - 509 , - 718 , - 327 , - 296 , - 625 , - 354 , - 443 , - 892 , - 741 , - 950 , - 559 , - 528 , - 857 , - 586 , - 675 , - 164 , - 13 , - 222 , - 791 , - 760 , - 129 , - 818 , - 907 , - 396 , - 245 , - 454 , - 63 , - 32 , - 361 , - 90 , - 179 , - 628 , - 477 , - 686 , - 295 , - 264 , - 593 , - 322 , - 411 , - 860 , - 709 , - 918 , - 527 , - 496 , - 825 , - 554 , - 643 , - 132 , - 941 , - 190 , - 759 , - 728 , - 97 , - 786 , - 875 , - 364 , - 213 , - 422 , - 31 , - 0 , - 213 , - 670 , - 395 , - 364 , - 577 , - 58 , - 759 , - 728 , - 941 , - 422 , - 147 , - 116 , - 329 , - 786 , - 511 , - 480 , - 693 , - 174 , - 875 , - 844 , - 81 , - 538 , - 263 , - 232 , - 445 , - 902 , - 627 , - 596 , - 809 , - 290 , - 15 , - 960 , - 197 , - 654 , - 379 , - 348 , - 561 , - 42 , - 743 , - 712 , - 925 , - 406 , - 131 , - 100 , - 313 , - 770 , - 495 , - 464 , - 677 , - 158 , - 859 , - 828 , - 65 , - 522 , - 247 , - 216 , - 429 , - 886 , - 611 , - 580 , - 793 , - 274 , - 975 , - 944 , - 181 , - 638 , - 363 , - 332 , - 545 , - 26 , - 727 , - 696 , - 909 , - 390 , - 115 , - 84 , - 297 , - 754 , - 479 , - 448 , - 661 , - 142 , - 843 , - 812 , - 49 , - 506 , - 231 , - 200 , - 413 , - 870 , - 595 , - 564 , - 777 , - 258 , - 959 , - 928 , - 165 , - 622 , - 347 , - 316 , - 529 , - 10 , - 711 , - 680 , - 893 , - 374 , - 99 , - 68 , - 281 , - 738 , - 463 , - 432 , - 645 , - 126 , - 827 , - 796 , - 33 , - 490 , - 215 , - 184 , - 397 , - 854 , - 579 , - 548 , - 761 , - 242 , - 943 , - 912 , - 149 , - 606 , - 331 , - 300 , - 513 , - 970 , - 695 , - 664 , - 877 , - 358 , - 83 , - 52 , - 265 , - 722 , - 447 , - 416 , - 629 , - 110 , - 811 , - 780 , - 17 , - 474 , - 199 , - 168 , - 381 , - 838 , - 563 , - 532 , - 745 , - 226 , - 927 , - 896 , - 133 , - 590 , - 315 , - 284 , - 497 , - 954 , - 679 , - 648 , - 861 , - 342 , - 67 , - 36 , - 249 , - 706 , - 431 , - 400 , - 613 , - 94 , - 795 , - 764 , - 1 , - 458 , - 183 , - 152 , - 365 , - 822 , - 547 , - 516 , - 729 , - 210 , - 911 , - 880 , - 117 , - 574 , - 299 , - 268 , - 481 , - 938 , - 663 , - 632 , - 845 , - 326 , - 51 , - 20 , - 233 , - 690 , - 415 , - 384 , - 597 , - 78 , - 779 , - 748 , - 961 , - 442 , - 167 , - 136 , - 349 , - 806 , - 531 , - 500 , - 713 , - 194 , - 895 , - 864 , - 101 , - 558 , - 283 , - 252 , - 465 , - 922 , - 647 , - 616 , - 829 , - 310 , - 35 , - 4 , - 217 , - 674 , - 399 , - 368 , - 581 , - 62 , - 763 , - 732 , - 945 , - 426 , - 151 , - 120 , - 333 , - 790 , - 515 , - 484 , - 697 , - 178 , - 879 , - 848 , - 85 , - 542 , - 267 , - 236 , - 449 , - 906 , - 631 , - 600 , - 813 , - 294 , - 19 , - 964 , - 201 , - 658 , - 383 , - 352 , - 565 , - 46 , - 747 , - 716 , - 929 , - 410 , - 135 , - 104 , - 317 , - 774 , - 499 , - 468 , - 681 , - 162 , - 863 , - 832 , - 69 , - 526 , - 251 , - 220 , - 433 , - 890 , - 615 , - 584 , - 797 , - 278 , - 3 , - 948 , - 185 , - 642 , - 367 , - 336 , - 549 , - 30 , - 731 , - 700 , - 913 , - 394 , - 119 , - 88 , - 301 , - 758 , - 483 , - 452 , - 665 , - 146 , - 847 , - 816 , - 53 , - 510 , - 235 , - 204 , - 417 , - 874 , - 599 , - 568 , - 781 , - 262 , - 963 , - 932 , - 169 , - 626 , - 351 , - 320 , - 533 , - 14 , - 715 , - 684 , - 897 , - 378 , - 103 , - 72 , - 285 , - 742 , - 467 , - 436 , - 649 , - 130 , - 831 , - 800 , - 37 , - 494 , - 219 , - 188 , - 401 , - 858 , - 583 , - 552 , - 765 , - 246 , - 947 , - 916 , - 153 , - 610 , - 335 , - 304 , - 517 , - 974 , - 699 , - 668 , - 881 , - 362 , - 87 , - 56 , - 269 , - 726 , - 451 , - 420 , - 633 , - 114 , - 815 , - 784 , - 21 , - 478 , - 203 , - 172 , - 385 , - 842 , - 567 , - 536 , - 749 , - 230 , - 931 , - 900 , - 137 , - 594 , - 319 , - 288 , - 501 , - 958 , - 683 , - 652 , - 865 , - 346 , - 71 , - 40 , - 253 , - 710 , - 435 , - 404 , - 617 , - 98 , - 799 , - 768 , - 5 , - 462 , - 187 , - 156 , - 369 , - 826 , - 551 , - 520 , - 733 , - 214 , - 915 , - 884 , - 121 , - 578 , - 303 , - 272 , - 485 , - 942 , - 667 , - 636 , - 849 , - 330 , - 55 , - 24 , - 237 , - 694 , - 419 , - 388 , - 601 , - 82 , - 783 , - 752 , - 965 , - 446 , - 171 , - 140 , - 353 , - 810 , - 535 , - 504 , - 717 , - 198 , - 899 , - 868 , - 105 , - 562 , - 287 , - 256 , - 469 , - 926 , - 651 , - 620 , - 833 , - 314 , - 39 , - 8 , - 221 , - 678 , - 403 , - 372 , - 585 , - 66 , - 767 , - 736 , - 949 , - 430 , - 155 , - 124 , - 337 , - 794 , - 519 , - 488 , - 701 , - 182 , - 883 , - 852 , - 89 , - 546 , - 271 , - 240 , - 453 , - 910 , - 635 , - 604 , - 817 , - 298 , - 23 , - 968 , - 205 , - 662 , - 387 , - 356 , - 569 , - 50 , - 751 , - 720 , - 933 , - 414 , - 139 , - 108 , - 321 , - 778 , - 503 , - 472 , - 685 , - 166 , - 867 , - 836 , - 73 , - 530 , - 255 , - 224 , - 437 , - 894 , - 619 , - 588 , - 801 , - 282 , - 7 , - 952 , - 189 , - 646 , - 371 , - 340 , - 553 , - 34 , - 735 , - 704 , - 917 , - 398 , - 123 , - 92 , - 305 , - 762 , - 487 , - 456 , - 669 , - 150 , - 851 , - 820 , - 57 , - 514 , - 239 , - 208 , - 421 , - 878 , - 603 , - 572 , - 785 , - 266 , - 967 , - 936 , - 173 , - 630 , - 355 , - 324 , - 537 , - 18 , - 719 , - 688 , - 901 , - 382 , - 107 , - 76 , - 289 , - 746 , - 471 , - 440 , - 653 , - 134 , - 835 , - 804 , - 41 , - 498 , - 223 , - 192 , - 405 , - 862 , - 587 , - 556 , - 769 , - 250 , - 951 , - 920 , - 157 , - 614 , - 339 , - 308 , - 521 , - 2 , - 703 , - 672 , - 885 , - 366 , - 91 , - 60 , - 273 , - 730 , - 455 , - 424 , - 637 , - 118 , - 819 , - 788 , - 25 , - 482 , - 207 , - 176 , - 389 , - 846 , - 571 , - 540 , - 753 , - 234 , - 935 , - 904 , - 141 , - 598 , - 323 , - 292 , - 505 , - 962 , - 687 , - 656 , - 869 , - 350 , - 75 , - 44 , - 257 , - 714 , - 439 , - 408 , - 621 , - 102 , - 803 , - 772 , - 9 , - 466 , - 191 , - 160 , - 373 , - 830 , - 555 , - 524 , - 737 , - 218 , - 919 , - 888 , - 125 , - 582 , - 307 , - 276 , - 489 , - 946 , - 671 , - 640 , - 853 , - 334 , - 59 , - 28 , - 241 , - 698 , - 423 , - 392 , - 605 , - 86 , - 787 , - 756 , - 969 , - 450 , - 175 , - 144 , - 357 , - 814 , - 539 , - 508 , - 721 , - 202 , - 903 , - 872 , - 109 , - 566 , - 291 , - 260 , - 473 , - 930 , - 655 , - 624 , - 837 , - 318 , - 43 , - 12 , - 225 , - 682 , - 407 , - 376 , - 589 , - 70 , - 771 , - 740 , - 953 , - 434 , - 159 , - 128 , - 341 , - 798 , - 523 , - 492 , - 705 , - 186 , - 887 , - 856 , - 93 , - 550 , - 275 , - 244 , - 457 , - 914 , - 639 , - 608 , - 821 , - 302 , - 27 , - 972 , - 209 , - 666 , - 391 , - 360 , - 573 , - 54 , - 755 , - 724 , - 937 , - 418 , - 143 , - 112 , - 325 , - 782 , - 507 , - 476 , - 689 , - 170 , - 871 , - 840 , - 77 , - 534 , - 259 , - 228 , - 441 , - 898 , - 623 , - 592 , - 805 , - 286 , - 11 , - 956 , - 193 , - 650 , - 375 , - 344 , - 557 , - 38 , - 739 , - 708 , - 921 , - 402 , - 127 , - 96 , - 309 , - 766 , - 491 , - 460 , - 673 , - 154 , - 855 , - 824 , - 61 , - 518 , - 243 , - 212 , - 425 , - 882 , - 607 , - 576 , - 789 , - 270 , - 971 , - 940 , - 177 , - 634 , - 359 , - 328 , - 541 , - 22 , - 723 , - 692 , - 905 , - 386 , - 111 , - 80 , - 293 , - 750 , - 475 , - 444 , - 657 , - 138 , - 839 , - 808 , - 45 , - 502 , - 227 , - 196 , - 409 , - 866 , - 591 , - 560 , - 773 , - 254 , - 955 , - 924 , - 161 , - 618 , - 343 , - 312 , - 525 , - 6 , - 707 , - 676 , - 889 , - 370 , - 95 , - 64 , - 277 , - 734 , - 459 , - 428 , - 641 , - 122 , - 823 , - 792 , - 29 , - 486 , - 211 , - 180 , - 393 , - 850 , - 575 , - 544 , - 757 , - 238 , - 939 , - 908 , - 145 , - 602 , - 327 , - 296 , - 509 , - 966 , - 691 , - 660 , - 873 , - 354 , - 79 , - 48 , - 261 , - 718 , - 443 , - 412 , - 625 , - 106 , - 807 , - 776 , - 13 , - 470 , - 195 , - 164 , - 377 , - 834 , - 559 , - 528 , - 741 , - 222 , - 923 , - 892 , - 129 , - 586 , - 311 , - 280 , - 493 , - 950 , - 675 , - 644 , - 857 , - 338 , - 63 , - 32 , - 245 , - 702 , - 427 , - 396 , - 609 , - 90 , - 791 , - 760 , - 973 , - 454 , - 179 , - 148 , - 361 , - 818 , - 543 , - 512 , - 725 , - 206 , - 907 , - 876 , - 113 , - 570 , - 295 , - 264 , - 477 , - 934 , - 659 , - 628 , - 841 , - 322 , - 47 , - 16 , - 229 , - 686 , - 411 , - 380 , - 593 , - 74 , - 775 , - 744 , - 957 , - 438 , - 163 , - 132 , - 345 , - 802 , - 527 , - 496 , - 709 , - 190 , - 891 , - 860 , - 97 , - 554 , - 279 , - 248 , - 461 , - 918 , - 643 , - 612 , - 825 , - 306 , - 31 , - 0 , - 517 , - 786 , - 807 , - 580 , - 105 , - 374 , - 395 , - 168 , - 685 , - 954 , - 975 , - 748 , - 273 , - 542 , - 563 , - 336 , - 853 , - 130 , - 151 , - 916 , - 441 , - 710 , - 731 , - 504 , - 29 , - 298 , - 319 , - 92 , - 609 , - 878 , - 899 , - 672 , - 197 , - 466 , - 487 , - 260 , - 777 , - 54 , - 75 , - 840 , - 365 , - 634 , - 655 , - 428 , - 945 , - 222 , - 243 , - 16 , - 533 , - 802 , - 823 , - 596 , - 121 , - 390 , - 411 , - 184 , - 701 , - 970 , - 991 , - 764 , - 289 , - 558 , - 579 , - 352 , - 869 , - 146 , - 167 , - 932 , - 457 , - 726 , - 747 , - 520 , - 45 , - 314 , - 335 , - 108 , - 625 , - 894 , - 915 , - 688 , - 213 , - 482 , - 503 , - 276 , - 793 , - 70 , - 91 , - 856 , - 381 , - 650 , - 671 , - 444 , - 961 , - 238 , - 259 , - 32 , - 549 , - 818 , - 839 , - 612 , - 137 , - 406 , - 427 , - 200 , - 717 , - 986 , - 15 , - 780 , - 305 , - 574 , - 595 , - 368 , - 885 , - 162 , - 183 , - 948 , - 473 , - 742 , - 763 , - 536 , - 61 , - 330 , - 351 , - 124 , - 641 , - 910 , - 931 , - 704 , - 229 , - 498 , - 519 , - 292 , - 809 , - 86 , - 107 , - 872 , - 397 , - 666 , - 687 , - 460 , - 977 , - 254 , - 275 , - 48 , - 565 , - 834 , - 855 , - 628 , - 153 , - 422 , - 443 , - 216 , - 733 , - 10 , - 31 , - 796 , - 321 , - 590 , - 611 , - 384 , - 901 , - 178 , - 199 , - 964 , - 489 , - 758 , - 779 , - 552 , - 77 , - 346 , - 367 , - 140 , - 657 , - 926 , - 947 , - 720 , - 245 , - 514 , - 535 , - 308 , - 825 , - 102 , - 123 , - 888 , - 413 , - 682 , - 703 , - 476 , - 1 , - 270 , - 291 , - 64 , - 581 , - 850 , - 871 , - 644 , - 169 , - 438 , - 459 , - 232 , - 749 , - 26 , - 47 , - 812 , - 337 , - 606 , - 627 , - 400 , - 917 , - 194 , - 215 , - 980 , - 505 , - 774 , - 795 , - 568 , - 93 , - 362 , - 383 , - 156 , - 673 , - 942 , - 963 , - 736 , - 261 , - 530 , - 551 , - 324 , - 841 , - 118 , - 139 , - 904 , - 429 , - 698 , - 719 , - 492 , - 17 , - 286 , - 307 , - 80 , - 597 , - 866 , - 887 , - 660 , - 185 , - 454 , - 475 , - 248 , - 765 , - 42 , - 63 , - 828 , - 353 , - 622 , - 643 , - 416 , - 933 , - 210 , - 231 , - 4 , - 521 , - 790 , - 811 , - 584 , - 109 , - 378 , - 399 , - 172 , - 689 , - 958 , - 979 , - 752 , - 277 , - 546 , - 567 , - 340 , - 857 , - 134 , - 155 , - 920 , - 445 , - 714 , - 735 , - 508 , - 33 , - 302 , - 323 , - 96 , - 613 , - 882 , - 903 , - 676 , - 201 , - 470 , - 491 , - 264 , - 781 , - 58 , - 79 , - 844 , - 369 , - 638 , - 659 , - 432 , - 949 , - 226 , - 247 , - 20 , - 537 , - 806 , - 827 , - 600 , - 125 , - 394 , - 415 , - 188 , - 705 , - 974 , - 3 , - 768 , - 293 , - 562 , - 583 , - 356 , - 873 , - 150 , - 171 , - 936 , - 461 , - 730 , - 751 , - 524 , - 49 , - 318 , - 339 , - 112 , - 629 , - 898 , - 919 , - 692 , - 217 , - 486 , - 507 , - 280 , - 797 , - 74 , - 95 , - 860 , - 385 , - 654 , - 675 , - 448 , - 965 , - 242 , - 263 , - 36 , - 553 , - 822 , - 843 , - 616 , - 141 , - 410 , - 431 , - 204 , - 721 , - 990 , - 19 , - 784 , - 309 , - 578 , - 599 , - 372 , - 889 , - 166 , - 187 , - 952 , - 477 , - 746 , - 767 , - 540 , - 65 , - 334 , - 355 , - 128 , - 645 , - 914 , - 935 , - 708 , - 233 , - 502 , - 523 , - 296 , - 813 , - 90 , - 111 , - 876 , - 401 , - 670 , - 691 , - 464 , - 981 , - 258 , - 279 , - 52 , - 569 , - 838 , - 859 , - 632 , - 157 , - 426 , - 447 , - 220 , - 737 , - 14 , - 35 , - 800 , - 325 , - 594 , - 615 , - 388 , - 905 , - 182 , - 203 , - 968 , - 493 , - 762 , - 783 , - 556 , - 81 , - 350 , - 371 , - 144 , - 661 , - 930 , - 951 , - 724 , - 249 , - 518 , - 539 , - 312 , - 829 , - 106 , - 127 , - 892 , - 417 , - 686 , - 707 , - 480 , - 5 , - 274 , - 295 , - 68 , - 585 , - 854 , - 875 , - 648 , - 173 , - 442 , - 463 , - 236 , - 753 , - 30 , - 51 , - 816 , - 341 , - 610 , - 631 , - 404 , - 921 , - 198 , - 219 , - 984 , - 509 , - 778 , - 799 , - 572 , - 97 , - 366 , - 387 , - 160 , - 677 , - 946 , - 967 , - 740 , - 265 , - 534 , - 555 , - 328 , - 845 , - 122 , - 143 , - 908 , - 433 , - 702 , - 723 , - 496 , - 21 , - 290 , - 311 , - 84 , - 601 , - 870 , - 891 , - 664 , - 189 , - 458 , - 479 , - 252 , - 769 , - 46 , - 67 , - 832 , - 357 , - 626 , - 647 , - 420 , - 937 , - 214 , - 235 , - 8 , - 525 , - 794 , - 815 , - 588 , - 113 , - 382 , - 403 , - 176 , - 693 , - 962 , - 983 , - 756 , - 281 , - 550 , - 571 , - 344 , - 861 , - 138 , - 159 , - 924 , - 449 , - 718 , - 739 , - 512 , - 37 , - 306 , - 327 , - 100 , - 617 , - 886 , - 907 , - 680 , - 205 , - 474 , - 495 , - 268 , - 785 , - 62 , - 83 , - 848 , - 373 , - 642 , - 663 , - 436 , - 953 , - 230 , - 251 , - 24 , - 541 , - 810 , - 831 , - 604 , - 129 , - 398 , - 419 , - 192 , - 709 , - 978 , - 7 , - 772 , - 297 , - 566 , - 587 , - 360 , - 877 , - 154 , - 175 , - 940 , - 465 , - 734 , - 755 , - 528 , - 53 , - 322 , - 343 , - 116 , - 633 , - 902 , - 923 , - 696 , - 221 , - 490 , - 511 , - 284 , - 801 , - 78 , - 99 , - 864 , - 389 , - 658 , - 679 , - 452 , - 969 , - 246 , - 267 , - 40 , - 557 , - 826 , - 847 , - 620 , - 145 , - 414 , - 435 , - 208 , - 725 , - 2 , - 23 , - 788 , - 313 , - 582 , - 603 , - 376 , - 893 , - 170 , - 191 , - 956 , - 481 , - 750 , - 771 , - 544 , - 69 , - 338 , - 359 , - 132 , - 649 , - 918 , - 939 , - 712 , - 237 , - 506 , - 527 , - 300 , - 817 , - 94 , - 115 , - 880 , - 405 , - 674 , - 695 , - 468 , - 985 , - 262 , - 283 , - 56 , - 573 , - 842 , - 863 , - 636 , - 161 , - 430 , - 451 , - 224 , - 741 , - 18 , - 39 , - 804 , - 329 , - 598 , - 619 , - 392 , - 909 , - 186 , - 207 , - 972 , - 497 , - 766 , - 787 , - 560 , - 85 , - 354 , - 375 , - 148 , - 665 , - 934 , - 955 , - 728 , - 253 , - 522 , - 543 , - 316 , - 833 , - 110 , - 131 , - 896 , - 421 , - 690 , - 711 , - 484 , - 9 , - 278 , - 299 , - 72 , - 589 , - 858 , - 879 , - 652 , - 177 , - 446 , - 467 , - 240 , - 757 , - 34 , - 55 , - 820 , - 345 , - 614 , - 635 , - 408 , - 925 , - 202 , - 223 , - 988 , - 513 , - 782 , - 803 , - 576 , - 101 , - 370 , - 391 , - 164 , - 681 , - 950 , - 971 , - 744 , - 269 , - 538 , - 559 , - 332 , - 849 , - 126 , - 147 , - 912 , - 437 , - 706 , - 727 , - 500 , - 25 , - 294 , - 315 , - 88 , - 605 , - 874 , - 895 , - 668 , - 193 , - 462 , - 483 , - 256 , - 773 , - 50 , - 71 , - 836 , - 361 , - 630 , - 651 , - 424 , - 941 , - 218 , - 239 , - 12 , - 529 , - 798 , - 819 , - 592 , - 117 , - 386 , - 407 , - 180 , - 697 , - 966 , - 987 , - 760 , - 285 , - 554 , - 575 , - 348 , - 865 , - 142 , - 163 , - 928 , - 453 , - 722 , - 743 , - 516 , - 41 , - 310 , - 331 , - 104 , - 621 , - 890 , - 911 , - 684 , - 209 , - 478 , - 499 , - 272 , - 789 , - 66 , - 87 , - 852 , - 377 , - 646 , - 667 , - 440 , - 957 , - 234 , - 255 , - 28 , - 545 , - 814 , - 835 , - 608 , - 133 , - 402 , - 423 , - 196 , - 713 , - 982 , - 11 , - 776 , - 301 , - 570 , - 591 , - 364 , - 881 , - 158 , - 179 , - 944 , - 469 , - 738 , - 759 , - 532 , - 57 , - 326 , - 347 , - 120 , - 637 , - 906 , - 927 , - 700 , - 225 , - 494 , - 515 , - 288 , - 805 , - 82 , - 103 , - 868 , - 393 , - 662 , - 683 , - 456 , - 973 , - 250 , - 271 , - 44 , - 561 , - 830 , - 851 , - 624 , - 149 , - 418 , - 439 , - 212 , - 729 , - 6 , - 27 , - 792 , - 317 , - 586 , - 607 , - 380 , - 897 , - 174 , - 195 , - 960 , - 485 , - 754 , - 775 , - 548 , - 73 , - 342 , - 363 , - 136 , - 653 , - 922 , - 943 , - 716 , - 241 , - 510 , - 531 , - 304 , - 821 , - 98 , - 119 , - 884 , - 409 , - 678 , - 699 , - 472 , - 989 , - 266 , - 287 , - 60 , - 577 , - 846 , - 867 , - 640 , - 165 , - 434 , - 455 , - 228 , - 745 , - 22 , - 43 , - 808 , - 333 , - 602 , - 623 , - 396 , - 913 , - 190 , - 211 , - 976 , - 501 , - 770 , - 791 , - 564 , - 89 , - 358 , - 379 , - 152 , - 669 , - 938 , - 959 , - 732 , - 257 , - 526 , - 547 , - 320 , - 837 , - 114 , - 135 , - 900 , - 425 , - 694 , - 715 , - 488 , - 13 , - 282 , - 303 , - 76 , - 593 , - 862 , - 883 , - 656 , - 181 , - 450 , - 471 , - 244 , - 761 , - 38 , - 59 , - 824 , - 349 , - 618 , - 639 , - 412 , - 929 , - 206 , - 227 , - 0 , - 475 , - 782 , - 921 , - 892 , - 695 , - 330 , - 805 , - 104 , - 243 , - 214 , - 17 , - 660 , - 127 , - 434 , - 573 , - 544 , - 347 , - 990 , - 457 , - 764 , - 903 , - 874 , - 677 , - 312 , - 787 , - 86 , - 225 , - 196 , - 1007 , - 642 , - 109 , - 416 , - 555 , - 526 , - 329 , - 972 , - 439 , - 746 , - 885 , - 856 , - 659 , - 294 , - 769 , - 68 , - 207 , - 178 , - 989 , - 624 , - 91 , - 398 , - 537 , - 508 , - 311 , - 954 , - 421 , - 728 , - 867 , - 838 , - 641 , - 276 , - 751 , - 50 , - 189 , - 160 , - 971 , - 606 , - 73 , - 380 , - 519 , - 490 , - 293 , - 936 , - 403 , - 710 , - 849 , - 820 , - 623 , - 258 , - 733 , - 32 , - 171 , - 142 , - 953 , - 588 , - 55 , - 362 , - 501 , - 472 , - 275 , - 918 , - 385 , - 692 , - 831 , - 802 , - 605 , - 240 , - 715 , - 14 , - 153 , - 124 , - 935 , - 570 , - 37 , - 344 , - 483 , - 454 , - 257 , - 900 , - 367 , - 674 , - 813 , - 784 , - 587 , - 222 , - 697 , - 1004 , - 135 , - 106 , - 917 , - 552 , - 19 , - 326 , - 465 , - 436 , - 239 , - 882 , - 349 , - 656 , - 795 , - 766 , - 569 , - 204 , - 679 , - 986 , - 117 , - 88 , - 899 , - 534 , - 1 , - 308 , - 447 , - 418 , - 221 , - 864 , - 331 , - 638 , - 777 , - 748 , - 551 , - 186 , - 661 , - 968 , - 99 , - 70 , - 881 , - 516 , - 991 , - 290 , - 429 , - 400 , - 203 , - 846 , - 313 , - 620 , - 759 , - 730 , - 533 , - 168 , - 643 , - 950 , - 81 , - 52 , - 863 , - 498 , - 973 , - 272 , - 411 , - 382 , - 185 , - 828 , - 295 , - 602 , - 741 , - 712 , - 515 , - 150 , - 625 , - 932 , - 63 , - 34 , - 845 , - 480 , - 955 , - 254 , - 393 , - 364 , - 167 , - 810 , - 277 , - 584 , - 723 , - 694 , - 497 , - 132 , - 607 , - 914 , - 45 , - 16 , - 827 , - 462 , - 937 , - 236 , - 375 , - 346 , - 149 , - 792 , - 259 , - 566 , - 705 , - 676 , - 479 , - 114 , - 589 , - 896 , - 27 , - 1006 , - 809 , - 444 , - 919 , - 218 , - 357 , - 328 , - 131 , - 774 , - 241 , - 548 , - 687 , - 658 , - 461 , - 96 , - 571 , - 878 , - 9 , - 988 , - 791 , - 426 , - 901 , - 200 , - 339 , - 310 , - 113 , - 756 , - 223 , - 530 , - 669 , - 640 , - 443 , - 78 , - 553 , - 860 , - 999 , - 970 , - 773 , - 408 , - 883 , - 182 , - 321 , - 292 , - 95 , - 738 , - 205 , - 512 , - 651 , - 622 , - 425 , - 60 , - 535 , - 842 , - 981 , - 952 , - 755 , - 390 , - 865 , - 164 , - 303 , - 274 , - 77 , - 720 , - 187 , - 494 , - 633 , - 604 , - 407 , - 42 , - 517 , - 824 , - 963 , - 934 , - 737 , - 372 , - 847 , - 146 , - 285 , - 256 , - 59 , - 702 , - 169 , - 476 , - 615 , - 586 , - 389 , - 24 , - 499 , - 806 , - 945 , - 916 , - 719 , - 354 , - 829 , - 128 , - 267 , - 238 , - 41 , - 684 , - 151 , - 458 , - 597 , - 568 , - 371 , - 6 , - 481 , - 788 , - 927 , - 898 , - 701 , - 336 , - 811 , - 110 , - 249 , - 220 , - 23 , - 666 , - 133 , - 440 , - 579 , - 550 , - 353 , - 996 , - 463 , - 770 , - 909 , - 880 , - 683 , - 318 , - 793 , - 92 , - 231 , - 202 , - 5 , - 648 , - 115 , - 422 , - 561 , - 532 , - 335 , - 978 , - 445 , - 752 , - 891 , - 862 , - 665 , - 300 , - 775 , - 74 , - 213 , - 184 , - 995 , - 630 , - 97 , - 404 , - 543 , - 514 , - 317 , - 960 , - 427 , - 734 , - 873 , - 844 , - 647 , - 282 , - 757 , - 56 , - 195 , - 166 , - 977 , - 612 , - 79 , - 386 , - 525 , - 496 , - 299 , - 942 , - 409 , - 716 , - 855 , - 826 , - 629 , - 264 , - 739 , - 38 , - 177 , - 148 , - 959 , - 594 , - 61 , - 368 , - 507 , - 478 , - 281 , - 924 , - 391 , - 698 , - 837 , - 808 , - 611 , - 246 , - 721 , - 20 , - 159 , - 130 , - 941 , - 576 , - 43 , - 350 , - 489 , - 460 , - 263 , - 906 , - 373 , - 680 , - 819 , - 790 , - 593 , - 228 , - 703 , - 2 , - 141 , - 112 , - 923 , - 558 , - 25 , - 332 , - 471 , - 442 , - 245 , - 888 , - 355 , - 662 , - 801 , - 772 , - 575 , - 210 , - 685 , - 992 , - 123 , - 94 , - 905 , - 540 , - 7 , - 314 , - 453 , - 424 , - 227 , - 870 , - 337 , - 644 , - 783 , - 754 , - 557 , - 192 , - 667 , - 974 , - 105 , - 76 , - 887 , - 522 , - 997 , - 296 , - 435 , - 406 , - 209 , - 852 , - 319 , - 626 , - 765 , - 736 , - 539 , - 174 , - 649 , - 956 , - 87 , - 58 , - 869 , - 504 , - 979 , - 278 , - 417 , - 388 , - 191 , - 834 , - 301 , - 608 , - 747 , - 718 , - 521 , - 156 , - 631 , - 938 , - 69 , - 40 , - 851 , - 486 , - 961 , - 260 , - 399 , - 370 , - 173 , - 816 , - 283 , - 590 , - 729 , - 700 , - 503 , - 138 , - 613 , - 920 , - 51 , - 22 , - 833 , - 468 , - 943 , - 242 , - 381 , - 352 , - 155 , - 798 , - 265 , - 572 , - 711 , - 682 , - 485 , - 120 , - 595 , - 902 , - 33 , - 4 , - 815 , - 450 , - 925 , - 224 , - 363 , - 334 , - 137 , - 780 , - 247 , - 554 , - 693 , - 664 , - 467 , - 102 , - 577 , - 884 , - 15 , - 994 , - 797 , - 432 , - 907 , - 206 , - 345 , - 316 , - 119 , - 762 , - 229 , - 536 , - 675 , - 646 , - 449 , - 84 , - 559 , - 866 , - 1005 , - 976 , - 779 , - 414 , - 889 , - 188 , - 327 , - 298 , - 101 , - 744 , - 211 , - 518 , - 657 , - 628 , - 431 , - 66 , - 541 , - 848 , - 987 , - 958 , - 761 , - 396 , - 871 , - 170 , - 309 , - 280 , - 83 , - 726 , - 193 , - 500 , - 639 , - 610 , - 413 , - 48 , - 523 , - 830 , - 969 , - 940 , - 743 , - 378 , - 853 , - 152 , - 291 , - 262 , - 65 , - 708 , - 175 , - 482 , - 621 , - 592 , - 395 , - 30 , - 505 , - 812 , - 951 , - 922 , - 725 , - 360 , - 835 , - 134 , - 273 , - 244 , - 47 , - 690 , - 157 , - 464 , - 603 , - 574 , - 377 , - 12 , - 487 , - 794 , - 933 , - 904 , - 707 , - 342 , - 817 , - 116 , - 255 , - 226 , - 29 , - 672 , - 139 , - 446 , - 585 , - 556 , - 359 , - 1002 , - 469 , - 776 , - 915 , - 886 , - 689 , - 324 , - 799 , - 98 , - 237 , - 208 , - 11 , - 654 , - 121 , - 428 , - 567 , - 538 , - 341 , - 984 , - 451 , - 758 , - 897 , - 868 , - 671 , - 306 , - 781 , - 80 , - 219 , - 190 , - 1001 , - 636 , - 103 , - 410 , - 549 , - 520 , - 323 , - 966 , - 433 , - 740 , - 879 , - 850 , - 653 , - 288 , - 763 , - 62 , - 201 , - 172 , - 983 , - 618 , - 85 , - 392 , - 531 , - 502 , - 305 , - 948 , - 415 , - 722 , - 861 , - 832 , - 635 , - 270 , - 745 , - 44 , - 183 , - 154 , - 965 , - 600 , - 67 , - 374 , - 513 , - 484 , - 287 , - 930 , - 397 , - 704 , - 843 , - 814 , - 617 , - 252 , - 727 , - 26 , - 165 , - 136 , - 947 , - 582 , - 49 , - 356 , - 495 , - 466 , - 269 , - 912 , - 379 , - 686 , - 825 , - 796 , - 599 , - 234 , - 709 , - 8 , - 147 , - 118 , - 929 , - 564 , - 31 , - 338 , - 477 , - 448 , - 251 , - 894 , - 361 , - 668 , - 807 , - 778 , - 581 , - 216 , - 691 , - 998 , - 129 , - 100 , - 911 , - 546 , - 13 , - 320 , - 459 , - 430 , - 233 , - 876 , - 343 , - 650 , - 789 , - 760 , - 563 , - 198 , - 673 , - 980 , - 111 , - 82 , - 893 , - 528 , - 1003 , - 302 , - 441 , - 412 , - 215 , - 858 , - 325 , - 632 , - 771 , - 742 , - 545 , - 180 , - 655 , - 962 , - 93 , - 64 , - 875 , - 510 , - 985 , - 284 , - 423 , - 394 , - 197 , - 840 , - 307 , - 614 , - 753 , - 724 , - 527 , - 162 , - 637 , - 944 , - 75 , - 46 , - 857 , - 492 , - 967 , - 266 , - 405 , - 376 , - 179 , - 822 , - 289 , - 596 , - 735 , - 706 , - 509 , - 144 , - 619 , - 926 , - 57 , - 28 , - 839 , - 474 , - 949 , - 248 , - 387 , - 358 , - 161 , - 804 , - 271 , - 578 , - 717 , - 688 , - 491 , - 126 , - 601 , - 908 , - 39 , - 10 , - 821 , - 456 , - 931 , - 230 , - 369 , - 340 , - 143 , - 786 , - 253 , - 560 , - 699 , - 670 , - 473 , - 108 , - 583 , - 890 , - 21 , - 1000 , - 803 , - 438 , - 913 , - 212 , - 351 , - 322 , - 125 , - 768 , - 235 , - 542 , - 681 , - 652 , - 455 , - 90 , - 565 , - 872 , - 3 , - 982 , - 785 , - 420 , - 895 , - 194 , - 333 , - 304 , - 107 , - 750 , - 217 , - 524 , - 663 , - 634 , - 437 , - 72 , - 547 , - 854 , - 993 , - 964 , - 767 , - 402 , - 877 , - 176 , - 315 , - 286 , - 89 , - 732 , - 199 , - 506 , - 645 , - 616 , - 419 , - 54 , - 529 , - 836 , - 975 , - 946 , - 749 , - 384 , - 859 , - 158 , - 297 , - 268 , - 71 , - 714 , - 181 , - 488 , - 627 , - 598 , - 401 , - 36 , - 511 , - 818 , - 957 , - 928 , - 731 , - 366 , - 841 , - 140 , - 279 , - 250 , - 53 , - 696 , - 163 , - 470 , - 609 , - 580 , - 383 , - 18 , - 493 , - 800 , - 939 , - 910 , - 713 , - 348 , - 823 , - 122 , - 261 , - 232 , - 35 , - 678 , - 145 , - 452 , - 591 , - 562 , - 365 , - 0 , - 31 , - 190 , - 477 , - 892 , - 411 , - 58 , - 857 , - 760 , - 791 , - 950 , - 213 , - 628 , - 147 , - 818 , - 593 , - 496 , - 527 , - 686 , - 973 , - 364 , - 907 , - 554 , - 329 , - 232 , - 263 , - 422 , - 709 , - 100 , - 643 , - 290 , - 65 , - 992 , - 1023 , - 158 , - 445 , - 860 , - 379 , - 26 , - 825 , - 728 , - 759 , - 918 , - 181 , - 596 , - 115 , - 786 , - 561 , - 464 , - 495 , - 654 , - 941 , - 332 , - 875 , - 522 , - 297 , - 200 , - 231 , - 390 , - 677 , - 68 , - 611 , - 258 , - 33 , - 960 , - 991 , - 126 , - 413 , - 828 , - 347 , - 1018 , - 793 , - 696 , - 727 , - 886 , - 149 , - 564 , - 83 , - 754 , - 529 , - 432 , - 463 , - 622 , - 909 , - 300 , - 843 , - 490 , - 265 , - 168 , - 199 , - 358 , - 645 , - 36 , - 579 , - 226 , - 1 , - 928 , - 959 , - 94 , - 381 , - 796 , - 315 , - 986 , - 761 , - 664 , - 695 , - 854 , - 117 , - 532 , - 51 , - 722 , - 497 , - 400 , - 431 , - 590 , - 877 , - 268 , - 811 , - 458 , - 233 , - 136 , - 167 , - 326 , - 613 , - 4 , - 547 , - 194 , - 993 , - 896 , - 927 , - 62 , - 349 , - 764 , - 283 , - 954 , - 729 , - 632 , - 663 , - 822 , - 85 , - 500 , - 19 , - 690 , - 465 , - 368 , - 399 , - 558 , - 845 , - 236 , - 779 , - 426 , - 201 , - 104 , - 135 , - 294 , - 581 , - 996 , - 515 , - 162 , - 961 , - 864 , - 895 , - 30 , - 317 , - 732 , - 251 , - 922 , - 697 , - 600 , - 631 , - 790 , - 53 , - 468 , - 1011 , - 658 , - 433 , - 336 , - 367 , - 526 , - 813 , - 204 , - 747 , - 394 , - 169 , - 72 , - 103 , - 262 , - 549 , - 964 , - 483 , - 130 , - 929 , - 832 , - 863 , - 1022 , - 285 , - 700 , - 219 , - 890 , - 665 , - 568 , - 599 , - 758 , - 21 , - 436 , - 979 , - 626 , - 401 , - 304 , - 335 , - 494 , - 781 , - 172 , - 715 , - 362 , - 137 , - 40 , - 71 , - 230 , - 517 , - 932 , - 451 , - 98 , - 897 , - 800 , - 831 , - 990 , - 253 , - 668 , - 187 , - 858 , - 633 , - 536 , - 567 , - 726 , - 1013 , - 404 , - 947 , - 594 , - 369 , - 272 , - 303 , - 462 , - 749 , - 140 , - 683 , - 330 , - 105 , - 8 , - 39 , - 198 , - 485 , - 900 , - 419 , - 66 , - 865 , - 768 , - 799 , - 958 , - 221 , - 636 , - 155 , - 826 , - 601 , - 504 , - 535 , - 694 , - 981 , - 372 , - 915 , - 562 , - 337 , - 240 , - 271 , - 430 , - 717 , - 108 , - 651 , - 298 , - 73 , - 1000 , - 7 , - 166 , - 453 , - 868 , - 387 , - 34 , - 833 , - 736 , - 767 , - 926 , - 189 , - 604 , - 123 , - 794 , - 569 , - 472 , - 503 , - 662 , - 949 , - 340 , - 883 , - 530 , - 305 , - 208 , - 239 , - 398 , - 685 , - 76 , - 619 , - 266 , - 41 , - 968 , - 999 , - 134 , - 421 , - 836 , - 355 , - 2 , - 801 , - 704 , - 735 , - 894 , - 157 , - 572 , - 91 , - 762 , - 537 , - 440 , - 471 , - 630 , - 917 , - 308 , - 851 , - 498 , - 273 , - 176 , - 207 , - 366 , - 653 , - 44 , - 587 , - 234 , - 9 , - 936 , - 967 , - 102 , - 389 , - 804 , - 323 , - 994 , - 769 , - 672 , - 703 , - 862 , - 125 , - 540 , - 59 , - 730 , - 505 , - 408 , - 439 , - 598 , - 885 , - 276 , - 819 , - 466 , - 241 , - 144 , - 175 , - 334 , - 621 , - 12 , - 555 , - 202 , - 1001 , - 904 , - 935 , - 70 , - 357 , - 772 , - 291 , - 962 , - 737 , - 640 , - 671 , - 830 , - 93 , - 508 , - 27 , - 698 , - 473 , - 376 , - 407 , - 566 , - 853 , - 244 , - 787 , - 434 , - 209 , - 112 , - 143 , - 302 , - 589 , - 1004 , - 523 , - 170 , - 969 , - 872 , - 903 , - 38 , - 325 , - 740 , - 259 , - 930 , - 705 , - 608 , - 639 , - 798 , - 61 , - 476 , - 1019 , - 666 , - 441 , - 344 , - 375 , - 534 , - 821 , - 212 , - 755 , - 402 , - 177 , - 80 , - 111 , - 270 , - 557 , - 972 , - 491 , - 138 , - 937 , - 840 , - 871 , - 6 , - 293 , - 708 , - 227 , - 898 , - 673 , - 576 , - 607 , - 766 , - 29 , - 444 , - 987 , - 634 , - 409 , - 312 , - 343 , - 502 , - 789 , - 180 , - 723 , - 370 , - 145 , - 48 , - 79 , - 238 , - 525 , - 940 , - 459 , - 106 , - 905 , - 808 , - 839 , - 998 , - 261 , - 676 , - 195 , - 866 , - 641 , - 544 , - 575 , - 734 , - 1021 , - 412 , - 955 , - 602 , - 377 , - 280 , - 311 , - 470 , - 757 , - 148 , - 691 , - 338 , - 113 , - 16 , - 47 , - 206 , - 493 , - 908 , - 427 , - 74 , - 873 , - 776 , - 807 , - 966 , - 229 , - 644 , - 163 , - 834 , - 609 , - 512 , - 543 , - 702 , - 989 , - 380 , - 923 , - 570 , - 345 , - 248 , - 279 , - 438 , - 725 , - 116 , - 659 , - 306 , - 81 , - 1008 , - 15 , - 174 , - 461 , - 876 , - 395 , - 42 , - 841 , - 744 , - 775 , - 934 , - 197 , - 612 , - 131 , - 802 , - 577 , - 480 , - 511 , - 670 , - 957 , - 348 , - 891 , - 538 , - 313 , - 216 , - 247 , - 406 , - 693 , - 84 , - 627 , - 274 , - 49 , - 976 , - 1007 , - 142 , - 429 , - 844 , - 363 , - 10 , - 809 , - 712 , - 743 , - 902 , - 165 , - 580 , - 99 , - 770 , - 545 , - 448 , - 479 , - 638 , - 925 , - 316 , - 859 , - 506 , - 281 , - 184 , - 215 , - 374 , - 661 , - 52 , - 595 , - 242 , - 17 , - 944 , - 975 , - 110 , - 397 , - 812 , - 331 , - 1002 , - 777 , - 680 , - 711 , - 870 , - 133 , - 548 , - 67 , - 738 , - 513 , - 416 , - 447 , - 606 , - 893 , - 284 , - 827 , - 474 , - 249 , - 152 , - 183 , - 342 , - 629 , - 20 , - 563 , - 210 , - 1009 , - 912 , - 943 , - 78 , - 365 , - 780 , - 299 , - 970 , - 745 , - 648 , - 679 , - 838 , - 101 , - 516 , - 35 , - 706 , - 481 , - 384 , - 415 , - 574 , - 861 , - 252 , - 795 , - 442 , - 217 , - 120 , - 151 , - 310 , - 597 , - 1012 , - 531 , - 178 , - 977 , - 880 , - 911 , - 46 , - 333 , - 748 , - 267 , - 938 , - 713 , - 616 , - 647 , - 806 , - 69 , - 484 , - 3 , - 674 , - 449 , - 352 , - 383 , - 542 , - 829 , - 220 , - 763 , - 410 , - 185 , - 88 , - 119 , - 278 , - 565 , - 980 , - 499 , - 146 , - 945 , - 848 , - 879 , - 14 , - 301 , - 716 , - 235 , - 906 , - 681 , - 584 , - 615 , - 774 , - 37 , - 452 , - 995 , - 642 , - 417 , - 320 , - 351 , - 510 , - 797 , - 188 , - 731 , - 378 , - 153 , - 56 , - 87 , - 246 , - 533 , - 948 , - 467 , - 114 , - 913 , - 816 , - 847 , - 1006 , - 269 , - 684 , - 203 , - 874 , - 649 , - 552 , - 583 , - 742 , - 5 , - 420 , - 963 , - 610 , - 385 , - 288 , - 319 , - 478 , - 765 , - 156 , - 699 , - 346 , - 121 , - 24 , - 55 , - 214 , - 501 , - 916 , - 435 , - 82 , - 881 , - 784 , - 815 , - 974 , - 237 , - 652 , - 171 , - 842 , - 617 , - 520 , - 551 , - 710 , - 997 , - 388 , - 931 , - 578 , - 353 , - 256 , - 287 , - 446 , - 733 , - 124 , - 667 , - 314 , - 89 , - 1016 , - 23 , - 182 , - 469 , - 884 , - 403 , - 50 , - 849 , - 752 , - 783 , - 942 , - 205 , - 620 , - 139 , - 810 , - 585 , - 488 , - 519 , - 678 , - 965 , - 356 , - 899 , - 546 , - 321 , - 224 , - 255 , - 414 , - 701 , - 92 , - 635 , - 282 , - 57 , - 984 , - 1015 , - 150 , - 437 , - 852 , - 371 , - 18 , - 817 , - 720 , - 751 , - 910 , - 173 , - 588 , - 107 , - 778 , - 553 , - 456 , - 487 , - 646 , - 933 , - 324 , - 867 , - 514 , - 289 , - 192 , - 223 , - 382 , - 669 , - 60 , - 603 , - 250 , - 25 , - 952 , - 983 , - 118 , - 405 , - 820 , - 339 , - 1010 , - 785 , - 688 , - 719 , - 878 , - 141 , - 556 , - 75 , - 746 , - 521 , - 424 , - 455 , - 614 , - 901 , - 292 , - 835 , - 482 , - 257 , - 160 , - 191 , - 350 , - 637 , - 28 , - 571 , - 218 , - 1017 , - 920 , - 951 , - 86 , - 373 , - 788 , - 307 , - 978 , - 753 , - 656 , - 687 , - 846 , - 109 , - 524 , - 43 , - 714 , - 489 , - 392 , - 423 , - 582 , - 869 , - 260 , - 803 , - 450 , - 225 , - 128 , - 159 , - 318 , - 605 , - 1020 , - 539 , - 186 , - 985 , - 888 , - 919 , - 54 , - 341 , - 756 , - 275 , - 946 , - 721 , - 624 , - 655 , - 814 , - 77 , - 492 , - 11 , - 682 , - 457 , - 360 , - 391 , - 550 , - 837 , - 228 , - 771 , - 418 , - 193 , - 96 , - 127 , - 286 , - 573 , - 988 , - 507 , - 154 , - 953 , - 856 , - 887 , - 22 , - 309 , - 724 , - 243 , - 914 , - 689 , - 592 , - 623 , - 782 , - 45 , - 460 , - 1003 , - 650 , - 425 , - 328 , - 359 , - 518 , - 805 , - 196 , - 739 , - 386 , - 161 , - 64 , - 95 , - 254 , - 541 , - 956 , - 475 , - 122 , - 921 , - 824 , - 855 , - 1014 , - 277 , - 692 , - 211 , - 882 , - 657 , - 560 , - 591 , - 750 , - 13 , - 428 , - 971 , - 618 , - 393 , - 296 , - 327 , - 486 , - 773 , - 164 , - 707 , - 354 , - 129 , - 32 , - 63 , - 222 , - 509 , - 924 , - 443 , - 90 , - 889 , - 792 , - 823 , - 982 , - 245 , - 660 , - 179 , - 850 , - 625 , - 528 , - 559 , - 718 , - 1005 , - 396 , - 939 , - 586 , - 361 , - 264 , - 295 , - 454 , - 741 , - 132 , - 675 , - 322 , - 97 , - 0 , - 431 , - 730 , - 369 , - 932 , - 835 , - 606 , - 773 , - 808 , - 183 , - 482 , - 121 , - 684 , - 587 , - 358 , - 525 , - 560 , - 991 , - 234 , - 929 , - 436 , - 339 , - 110 , - 277 , - 312 , - 743 , - 1042 , - 681 , - 188 , - 91 , - 918 , - 29 , - 64 , - 495 , - 794 , - 433 , - 996 , - 899 , - 670 , - 837 , - 872 , - 247 , - 546 , - 185 , - 748 , - 651 , - 422 , - 589 , - 624 , - 1055 , - 298 , - 993 , - 500 , - 403 , - 174 , - 341 , - 376 , - 807 , - 50 , - 745 , - 252 , - 155 , - 982 , - 93 , - 128 , - 559 , - 858 , - 497 , - 4 , - 963 , - 734 , - 901 , - 936 , - 311 , - 610 , - 249 , - 812 , - 715 , - 486 , - 653 , - 688 , - 63 , - 362 , - 1 , - 564 , - 467 , - 238 , - 405 , - 440 , - 871 , - 114 , - 809 , - 316 , - 219 , - 1046 , - 157 , - 192 , - 623 , - 922 , - 561 , - 68 , - 1027 , - 798 , - 965 , - 1000 , - 375 , - 674 , - 313 , - 876 , - 779 , - 550 , - 717 , - 752 , - 127 , - 426 , - 65 , - 628 , - 531 , - 302 , - 469 , - 504 , - 935 , - 178 , - 873 , - 380 , - 283 , - 54 , - 221 , - 256 , - 687 , - 986 , - 625 , - 132 , - 35 , - 862 , - 1029 , - 8 , - 439 , - 738 , - 377 , - 940 , - 843 , - 614 , - 781 , - 816 , - 191 , - 490 , - 129 , - 692 , - 595 , - 366 , - 533 , - 568 , - 999 , - 242 , - 937 , - 444 , - 347 , - 118 , - 285 , - 320 , - 751 , - 1050 , - 689 , - 196 , - 99 , - 926 , - 37 , - 72 , - 503 , - 802 , - 441 , - 1004 , - 907 , - 678 , - 845 , - 880 , - 255 , - 554 , - 193 , - 756 , - 659 , - 430 , - 597 , - 632 , - 7 , - 306 , - 1001 , - 508 , - 411 , - 182 , - 349 , - 384 , - 815 , - 58 , - 753 , - 260 , - 163 , - 990 , - 101 , - 136 , - 567 , - 866 , - 505 , - 12 , - 971 , - 742 , - 909 , - 944 , - 319 , - 618 , - 257 , - 820 , - 723 , - 494 , - 661 , - 696 , - 71 , - 370 , - 9 , - 572 , - 475 , - 246 , - 413 , - 448 , - 879 , - 122 , - 817 , - 324 , - 227 , - 1054 , - 165 , - 200 , - 631 , - 930 , - 569 , - 76 , - 1035 , - 806 , - 973 , - 1008 , - 383 , - 682 , - 321 , - 884 , - 787 , - 558 , - 725 , - 760 , - 135 , - 434 , - 73 , - 636 , - 539 , - 310 , - 477 , - 512 , - 943 , - 186 , - 881 , - 388 , - 291 , - 62 , - 229 , - 264 , - 695 , - 994 , - 633 , - 140 , - 43 , - 870 , - 1037 , - 16 , - 447 , - 746 , - 385 , - 948 , - 851 , - 622 , - 789 , - 824 , - 199 , - 498 , - 137 , - 700 , - 603 , - 374 , - 541 , - 576 , - 1007 , - 250 , - 945 , - 452 , - 355 , - 126 , - 293 , - 328 , - 759 , - 2 , - 697 , - 204 , - 107 , - 934 , - 45 , - 80 , - 511 , - 810 , - 449 , - 1012 , - 915 , - 686 , - 853 , - 888 , - 263 , - 562 , - 201 , - 764 , - 667 , - 438 , - 605 , - 640 , - 15 , - 314 , - 1009 , - 516 , - 419 , - 190 , - 357 , - 392 , - 823 , - 66 , - 761 , - 268 , - 171 , - 998 , - 109 , - 144 , - 575 , - 874 , - 513 , - 20 , - 979 , - 750 , - 917 , - 952 , - 327 , - 626 , - 265 , - 828 , - 731 , - 502 , - 669 , - 704 , - 79 , - 378 , - 17 , - 580 , - 483 , - 254 , - 421 , - 456 , - 887 , - 130 , - 825 , - 332 , - 235 , - 6 , - 173 , - 208 , - 639 , - 938 , - 577 , - 84 , - 1043 , - 814 , - 981 , - 1016 , - 391 , - 690 , - 329 , - 892 , - 795 , - 566 , - 733 , - 768 , - 143 , - 442 , - 81 , - 644 , - 547 , - 318 , - 485 , - 520 , - 951 , - 194 , - 889 , - 396 , - 299 , - 70 , - 237 , - 272 , - 703 , - 1002 , - 641 , - 148 , - 51 , - 878 , - 1045 , - 24 , - 455 , - 754 , - 393 , - 956 , - 859 , - 630 , - 797 , - 832 , - 207 , - 506 , - 145 , - 708 , - 611 , - 382 , - 549 , - 584 , - 1015 , - 258 , - 953 , - 460 , - 363 , - 134 , - 301 , - 336 , - 767 , - 10 , - 705 , - 212 , - 115 , - 942 , - 53 , - 88 , - 519 , - 818 , - 457 , - 1020 , - 923 , - 694 , - 861 , - 896 , - 271 , - 570 , - 209 , - 772 , - 675 , - 446 , - 613 , - 648 , - 23 , - 322 , - 1017 , - 524 , - 427 , - 198 , - 365 , - 400 , - 831 , - 74 , - 769 , - 276 , - 179 , - 1006 , - 117 , - 152 , - 583 , - 882 , - 521 , - 28 , - 987 , - 758 , - 925 , - 960 , - 335 , - 634 , - 273 , - 836 , - 739 , - 510 , - 677 , - 712 , - 87 , - 386 , - 25 , - 588 , - 491 , - 262 , - 429 , - 464 , - 895 , - 138 , - 833 , - 340 , - 243 , - 14 , - 181 , - 216 , - 647 , - 946 , - 585 , - 92 , - 1051 , - 822 , - 989 , - 1024 , - 399 , - 698 , - 337 , - 900 , - 803 , - 574 , - 741 , - 776 , - 151 , - 450 , - 89 , - 652 , - 555 , - 326 , - 493 , - 528 , - 959 , - 202 , - 897 , - 404 , - 307 , - 78 , - 245 , - 280 , - 711 , - 1010 , - 649 , - 156 , - 59 , - 886 , - 1053 , - 32 , - 463 , - 762 , - 401 , - 964 , - 867 , - 638 , - 805 , - 840 , - 215 , - 514 , - 153 , - 716 , - 619 , - 390 , - 557 , - 592 , - 1023 , - 266 , - 961 , - 468 , - 371 , - 142 , - 309 , - 344 , - 775 , - 18 , - 713 , - 220 , - 123 , - 950 , - 61 , - 96 , - 527 , - 826 , - 465 , - 1028 , - 931 , - 702 , - 869 , - 904 , - 279 , - 578 , - 217 , - 780 , - 683 , - 454 , - 621 , - 656 , - 31 , - 330 , - 1025 , - 532 , - 435 , - 206 , - 373 , - 408 , - 839 , - 82 , - 777 , - 284 , - 187 , - 1014 , - 125 , - 160 , - 591 , - 890 , - 529 , - 36 , - 995 , - 766 , - 933 , - 968 , - 343 , - 642 , - 281 , - 844 , - 747 , - 518 , - 685 , - 720 , - 95 , - 394 , - 33 , - 596 , - 499 , - 270 , - 437 , - 472 , - 903 , - 146 , - 841 , - 348 , - 251 , - 22 , - 189 , - 224 , - 655 , - 954 , - 593 , - 100 , - 3 , - 830 , - 997 , - 1032 , - 407 , - 706 , - 345 , - 908 , - 811 , - 582 , - 749 , - 784 , - 159 , - 458 , - 97 , - 660 , - 563 , - 334 , - 501 , - 536 , - 967 , - 210 , - 905 , - 412 , - 315 , - 86 , - 253 , - 288 , - 719 , - 1018 , - 657 , - 164 , - 67 , - 894 , - 5 , - 40 , - 471 , - 770 , - 409 , - 972 , - 875 , - 646 , - 813 , - 848 , - 223 , - 522 , - 161 , - 724 , - 627 , - 398 , - 565 , - 600 , - 1031 , - 274 , - 969 , - 476 , - 379 , - 150 , - 317 , - 352 , - 783 , - 26 , - 721 , - 228 , - 131 , - 958 , - 69 , - 104 , - 535 , - 834 , - 473 , - 1036 , - 939 , - 710 , - 877 , - 912 , - 287 , - 586 , - 225 , - 788 , - 691 , - 462 , - 629 , - 664 , - 39 , - 338 , - 1033 , - 540 , - 443 , - 214 , - 381 , - 416 , - 847 , - 90 , - 785 , - 292 , - 195 , - 1022 , - 133 , - 168 , - 599 , - 898 , - 537 , - 44 , - 1003 , - 774 , - 941 , - 976 , - 351 , - 650 , - 289 , - 852 , - 755 , - 526 , - 693 , - 728 , - 103 , - 402 , - 41 , - 604 , - 507 , - 278 , - 445 , - 480 , - 911 , - 154 , - 849 , - 356 , - 259 , - 30 , - 197 , - 232 , - 663 , - 962 , - 601 , - 108 , - 11 , - 838 , - 1005 , - 1040 , - 415 , - 714 , - 353 , - 916 , - 819 , - 590 , - 757 , - 792 , - 167 , - 466 , - 105 , - 668 , - 571 , - 342 , - 509 , - 544 , - 975 , - 218 , - 913 , - 420 , - 323 , - 94 , - 261 , - 296 , - 727 , - 1026 , - 665 , - 172 , - 75 , - 902 , - 13 , - 48 , - 479 , - 778 , - 417 , - 980 , - 883 , - 654 , - 821 , - 856 , - 231 , - 530 , - 169 , - 732 , - 635 , - 406 , - 573 , - 608 , - 1039 , - 282 , - 977 , - 484 , - 387 , - 158 , - 325 , - 360 , - 791 , - 34 , - 729 , - 236 , - 139 , - 966 , - 77 , - 112 , - 543 , - 842 , - 481 , - 1044 , - 947 , - 718 , - 885 , - 920 , - 295 , - 594 , - 233 , - 796 , - 699 , - 470 , - 637 , - 672 , - 47 , - 346 , - 1041 , - 548 , - 451 , - 222 , - 389 , - 424 , - 855 , - 98 , - 793 , - 300 , - 203 , - 1030 , - 141 , - 176 , - 607 , - 906 , - 545 , - 52 , - 1011 , - 782 , - 949 , - 984 , - 359 , - 658 , - 297 , - 860 , - 763 , - 534 , - 701 , - 736 , - 111 , - 410 , - 49 , - 612 , - 515 , - 286 , - 453 , - 488 , - 919 , - 162 , - 857 , - 364 , - 267 , - 38 , - 205 , - 240 , - 671 , - 970 , - 609 , - 116 , - 19 , - 846 , - 1013 , - 1048 , - 423 , - 722 , - 361 , - 924 , - 827 , - 598 , - 765 , - 800 , - 175 , - 474 , - 113 , - 676 , - 579 , - 350 , - 517 , - 552 , - 983 , - 226 , - 921 , - 428 , - 331 , - 102 , - 269 , - 304 , - 735 , - 1034 , - 673 , - 180 , - 83 , - 910 , - 21 , - 56 , - 487 , - 786 , - 425 , - 988 , - 891 , - 662 , - 829 , - 864 , - 239 , - 538 , - 177 , - 740 , - 643 , - 414 , - 581 , - 616 , - 1047 , - 290 , - 985 , - 492 , - 395 , - 166 , - 333 , - 368 , - 799 , - 42 , - 737 , - 244 , - 147 , - 974 , - 85 , - 120 , - 551 , - 850 , - 489 , - 1052 , - 955 , - 726 , - 893 , - 928 , - 303 , - 602 , - 241 , - 804 , - 707 , - 478 , - 645 , - 680 , - 55 , - 354 , - 1049 , - 556 , - 459 , - 230 , - 397 , - 432 , - 863 , - 106 , - 801 , - 308 , - 211 , - 1038 , - 149 , - 184 , - 615 , - 914 , - 553 , - 60 , - 1019 , - 790 , - 957 , - 992 , - 367 , - 666 , - 305 , - 868 , - 771 , - 542 , - 709 , - 744 , - 119 , - 418 , - 57 , - 620 , - 523 , - 294 , - 461 , - 496 , - 927 , - 170 , - 865 , - 372 , - 275 , - 46 , - 213 , - 248 , - 679 , - 978 , - 617 , - 124 , - 27 , - 854 , - 1021 , - 0 , - 1055 , - 886 , - 581 , - 140 , - 651 , - 1026 , - 177 , - 280 , - 247 , - 78 , - 861 , - 420 , - 931 , - 218 , - 457 , - 560 , - 527 , - 358 , - 53 , - 700 , - 123 , - 498 , - 737 , - 840 , - 807 , - 638 , - 333 , - 980 , - 403 , - 778 , - 1017 , - 32 , - 1087 , - 918 , - 613 , - 172 , - 683 , - 1058 , - 209 , - 312 , - 279 , - 110 , - 893 , - 452 , - 963 , - 250 , - 489 , - 592 , - 559 , - 390 , - 85 , - 732 , - 155 , - 530 , - 769 , - 872 , - 839 , - 670 , - 365 , - 1012 , - 435 , - 810 , - 1049 , - 64 , - 31 , - 950 , - 645 , - 204 , - 715 , - 2 , - 241 , - 344 , - 311 , - 142 , - 925 , - 484 , - 995 , - 282 , - 521 , - 624 , - 591 , - 422 , - 117 , - 764 , - 187 , - 562 , - 801 , - 904 , - 871 , - 702 , - 397 , - 1044 , - 467 , - 842 , - 1081 , - 96 , - 63 , - 982 , - 677 , - 236 , - 747 , - 34 , - 273 , - 376 , - 343 , - 174 , - 957 , - 516 , - 1027 , - 314 , - 553 , - 656 , - 623 , - 454 , - 149 , - 796 , - 219 , - 594 , - 833 , - 936 , - 903 , - 734 , - 429 , - 1076 , - 499 , - 874 , - 25 , - 128 , - 95 , - 1014 , - 709 , - 268 , - 779 , - 66 , - 305 , - 408 , - 375 , - 206 , - 989 , - 548 , - 1059 , - 346 , - 585 , - 688 , - 655 , - 486 , - 181 , - 828 , - 251 , - 626 , - 865 , - 968 , - 935 , - 766 , - 461 , - 20 , - 531 , - 906 , - 57 , - 160 , - 127 , - 1046 , - 741 , - 300 , - 811 , - 98 , - 337 , - 440 , - 407 , - 238 , - 1021 , - 580 , - 3 , - 378 , - 617 , - 720 , - 687 , - 518 , - 213 , - 860 , - 283 , - 658 , - 897 , - 1000 , - 967 , - 798 , - 493 , - 52 , - 563 , - 938 , - 89 , - 192 , - 159 , - 1078 , - 773 , - 332 , - 843 , - 130 , - 369 , - 472 , - 439 , - 270 , - 1053 , - 612 , - 35 , - 410 , - 649 , - 752 , - 719 , - 550 , - 245 , - 892 , - 315 , - 690 , - 929 , - 1032 , - 999 , - 830 , - 525 , - 84 , - 595 , - 970 , - 121 , - 224 , - 191 , - 22 , - 805 , - 364 , - 875 , - 162 , - 401 , - 504 , - 471 , - 302 , - 1085 , - 644 , - 67 , - 442 , - 681 , - 784 , - 751 , - 582 , - 277 , - 924 , - 347 , - 722 , - 961 , - 1064 , - 1031 , - 862 , - 557 , - 116 , - 627 , - 1002 , - 153 , - 256 , - 223 , - 54 , - 837 , - 396 , - 907 , - 194 , - 433 , - 536 , - 503 , - 334 , - 29 , - 676 , - 99 , - 474 , - 713 , - 816 , - 783 , - 614 , - 309 , - 956 , - 379 , - 754 , - 993 , - 8 , - 1063 , - 894 , - 589 , - 148 , - 659 , - 1034 , - 185 , - 288 , - 255 , - 86 , - 869 , - 428 , - 939 , - 226 , - 465 , - 568 , - 535 , - 366 , - 61 , - 708 , - 131 , - 506 , - 745 , - 848 , - 815 , - 646 , - 341 , - 988 , - 411 , - 786 , - 1025 , - 40 , - 7 , - 926 , - 621 , - 180 , - 691 , - 1066 , - 217 , - 320 , - 287 , - 118 , - 901 , - 460 , - 971 , - 258 , - 497 , - 600 , - 567 , - 398 , - 93 , - 740 , - 163 , - 538 , - 777 , - 880 , - 847 , - 678 , - 373 , - 1020 , - 443 , - 818 , - 1057 , - 72 , - 39 , - 958 , - 653 , - 212 , - 723 , - 10 , - 249 , - 352 , - 319 , - 150 , - 933 , - 492 , - 1003 , - 290 , - 529 , - 632 , - 599 , - 430 , - 125 , - 772 , - 195 , - 570 , - 809 , - 912 , - 879 , - 710 , - 405 , - 1052 , - 475 , - 850 , - 1 , - 104 , - 71 , - 990 , - 685 , - 244 , - 755 , - 42 , - 281 , - 384 , - 351 , - 182 , - 965 , - 524 , - 1035 , - 322 , - 561 , - 664 , - 631 , - 462 , - 157 , - 804 , - 227 , - 602 , - 841 , - 944 , - 911 , - 742 , - 437 , - 1084 , - 507 , - 882 , - 33 , - 136 , - 103 , - 1022 , - 717 , - 276 , - 787 , - 74 , - 313 , - 416 , - 383 , - 214 , - 997 , - 556 , - 1067 , - 354 , - 593 , - 696 , - 663 , - 494 , - 189 , - 836 , - 259 , - 634 , - 873 , - 976 , - 943 , - 774 , - 469 , - 28 , - 539 , - 914 , - 65 , - 168 , - 135 , - 1054 , - 749 , - 308 , - 819 , - 106 , - 345 , - 448 , - 415 , - 246 , - 1029 , - 588 , - 11 , - 386 , - 625 , - 728 , - 695 , - 526 , - 221 , - 868 , - 291 , - 666 , - 905 , - 1008 , - 975 , - 806 , - 501 , - 60 , - 571 , - 946 , - 97 , - 200 , - 167 , - 1086 , - 781 , - 340 , - 851 , - 138 , - 377 , - 480 , - 447 , - 278 , - 1061 , - 620 , - 43 , - 418 , - 657 , - 760 , - 727 , - 558 , - 253 , - 900 , - 323 , - 698 , - 937 , - 1040 , - 1007 , - 838 , - 533 , - 92 , - 603 , - 978 , - 129 , - 232 , - 199 , - 30 , - 813 , - 372 , - 883 , - 170 , - 409 , - 512 , - 479 , - 310 , - 5 , - 652 , - 75 , - 450 , - 689 , - 792 , - 759 , - 590 , - 285 , - 932 , - 355 , - 730 , - 969 , - 1072 , - 1039 , - 870 , - 565 , - 124 , - 635 , - 1010 , - 161 , - 264 , - 231 , - 62 , - 845 , - 404 , - 915 , - 202 , - 441 , - 544 , - 511 , - 342 , - 37 , - 684 , - 107 , - 482 , - 721 , - 824 , - 791 , - 622 , - 317 , - 964 , - 387 , - 762 , - 1001 , - 16 , - 1071 , - 902 , - 597 , - 156 , - 667 , - 1042 , - 193 , - 296 , - 263 , - 94 , - 877 , - 436 , - 947 , - 234 , - 473 , - 576 , - 543 , - 374 , - 69 , - 716 , - 139 , - 514 , - 753 , - 856 , - 823 , - 654 , - 349 , - 996 , - 419 , - 794 , - 1033 , - 48 , - 15 , - 934 , - 629 , - 188 , - 699 , - 1074 , - 225 , - 328 , - 295 , - 126 , - 909 , - 468 , - 979 , - 266 , - 505 , - 608 , - 575 , - 406 , - 101 , - 748 , - 171 , - 546 , - 785 , - 888 , - 855 , - 686 , - 381 , - 1028 , - 451 , - 826 , - 1065 , - 80 , - 47 , - 966 , - 661 , - 220 , - 731 , - 18 , - 257 , - 360 , - 327 , - 158 , - 941 , - 500 , - 1011 , - 298 , - 537 , - 640 , - 607 , - 438 , - 133 , - 780 , - 203 , - 578 , - 817 , - 920 , - 887 , - 718 , - 413 , - 1060 , - 483 , - 858 , - 9 , - 112 , - 79 , - 998 , - 693 , - 252 , - 763 , - 50 , - 289 , - 392 , - 359 , - 190 , - 973 , - 532 , - 1043 , - 330 , - 569 , - 672 , - 639 , - 470 , - 165 , - 812 , - 235 , - 610 , - 849 , - 952 , - 919 , - 750 , - 445 , - 4 , - 515 , - 890 , - 41 , - 144 , - 111 , - 1030 , - 725 , - 284 , - 795 , - 82 , - 321 , - 424 , - 391 , - 222 , - 1005 , - 564 , - 1075 , - 362 , - 601 , - 704 , - 671 , - 502 , - 197 , - 844 , - 267 , - 642 , - 881 , - 984 , - 951 , - 782 , - 477 , - 36 , - 547 , - 922 , - 73 , - 176 , - 143 , - 1062 , - 757 , - 316 , - 827 , - 114 , - 353 , - 456 , - 423 , - 254 , - 1037 , - 596 , - 19 , - 394 , - 633 , - 736 , - 703 , - 534 , - 229 , - 876 , - 299 , - 674 , - 913 , - 1016 , - 983 , - 814 , - 509 , - 68 , - 579 , - 954 , - 105 , - 208 , - 175 , - 6 , - 789 , - 348 , - 859 , - 146 , - 385 , - 488 , - 455 , - 286 , - 1069 , - 628 , - 51 , - 426 , - 665 , - 768 , - 735 , - 566 , - 261 , - 908 , - 331 , - 706 , - 945 , - 1048 , - 1015 , - 846 , - 541 , - 100 , - 611 , - 986 , - 137 , - 240 , - 207 , - 38 , - 821 , - 380 , - 891 , - 178 , - 417 , - 520 , - 487 , - 318 , - 13 , - 660 , - 83 , - 458 , - 697 , - 800 , - 767 , - 598 , - 293 , - 940 , - 363 , - 738 , - 977 , - 1080 , - 1047 , - 878 , - 573 , - 132 , - 643 , - 1018 , - 169 , - 272 , - 239 , - 70 , - 853 , - 412 , - 923 , - 210 , - 449 , - 552 , - 519 , - 350 , - 45 , - 692 , - 115 , - 490 , - 729 , - 832 , - 799 , - 630 , - 325 , - 972 , - 395 , - 770 , - 1009 , - 24 , - 1079 , - 910 , - 605 , - 164 , - 675 , - 1050 , - 201 , - 304 , - 271 , - 102 , - 885 , - 444 , - 955 , - 242 , - 481 , - 584 , - 551 , - 382 , - 77 , - 724 , - 147 , - 522 , - 761 , - 864 , - 831 , - 662 , - 357 , - 1004 , - 427 , - 802 , - 1041 , - 56 , - 23 , - 942 , - 637 , - 196 , - 707 , - 1082 , - 233 , - 336 , - 303 , - 134 , - 917 , - 476 , - 987 , - 274 , - 513 , - 616 , - 583 , - 414 , - 109 , - 756 , - 179 , - 554 , - 793 , - 896 , - 863 , - 694 , - 389 , - 1036 , - 459 , - 834 , - 1073 , - 88 , - 55 , - 974 , - 669 , - 228 , - 739 , - 26 , - 265 , - 368 , - 335 , - 166 , - 949 , - 508 , - 1019 , - 306 , - 545 , - 648 , - 615 , - 446 , - 141 , - 788 , - 211 , - 586 , - 825 , - 928 , - 895 , - 726 , - 421 , - 1068 , - 491 , - 866 , - 17 , - 120 , - 87 , - 1006 , - 701 , - 260 , - 771 , - 58 , - 297 , - 400 , - 367 , - 198 , - 981 , - 540 , - 1051 , - 338 , - 577 , - 680 , - 647 , - 478 , - 173 , - 820 , - 243 , - 618 , - 857 , - 960 , - 927 , - 758 , - 453 , - 12 , - 523 , - 898 , - 49 , - 152 , - 119 , - 1038 , - 733 , - 292 , - 803 , - 90 , - 329 , - 432 , - 399 , - 230 , - 1013 , - 572 , - 1083 , - 370 , - 609 , - 712 , - 679 , - 510 , - 205 , - 852 , - 275 , - 650 , - 889 , - 992 , - 959 , - 790 , - 485 , - 44 , - 555 , - 930 , - 81 , - 184 , - 151 , - 1070 , - 765 , - 324 , - 835 , - 122 , - 361 , - 464 , - 431 , - 262 , - 1045 , - 604 , - 27 , - 402 , - 641 , - 744 , - 711 , - 542 , - 237 , - 884 , - 307 , - 682 , - 921 , - 1024 , - 991 , - 822 , - 517 , - 76 , - 587 , - 962 , - 113 , - 216 , - 183 , - 14 , - 797 , - 356 , - 867 , - 154 , - 393 , - 496 , - 463 , - 294 , - 1077 , - 636 , - 59 , - 434 , - 673 , - 776 , - 743 , - 574 , - 269 , - 916 , - 339 , - 714 , - 953 , - 1056 , - 1023 , - 854 , - 549 , - 108 , - 619 , - 994 , - 145 , - 248 , - 215 , - 46 , - 829 , - 388 , - 899 , - 186 , - 425 , - 528 , - 495 , - 326 , - 21 , - 668 , - 91 , - 466 , - 705 , - 808 , - 775 , - 606 , - 301 , - 948 , - 371 , - 746 , - 985 , - 0 , - 583 , - 326 , - 349 , - 652 , - 115 , - 978 , - 1001 , - 184 , - 767 , - 510 , - 533 , - 836 , - 299 , - 42 , - 65 , - 368 , - 951 , - 694 , - 717 , - 1020 , - 483 , - 226 , - 249 , - 552 , - 15 , - 878 , - 901 , - 84 , - 667 , - 410 , - 433 , - 736 , - 199 , - 1062 , - 1085 , - 268 , - 851 , - 594 , - 617 , - 920 , - 383 , - 126 , - 149 , - 452 , - 1035 , - 778 , - 801 , - 1104 , - 567 , - 310 , - 333 , - 636 , - 99 , - 962 , - 985 , - 168 , - 751 , - 494 , - 517 , - 820 , - 283 , - 26 , - 49 , - 352 , - 935 , - 678 , - 701 , - 1004 , - 467 , - 210 , - 233 , - 536 , - 1119 , - 862 , - 885 , - 68 , - 651 , - 394 , - 417 , - 720 , - 183 , - 1046 , - 1069 , - 252 , - 835 , - 578 , - 601 , - 904 , - 367 , - 110 , - 133 , - 436 , - 1019 , - 762 , - 785 , - 1088 , - 551 , - 294 , - 317 , - 620 , - 83 , - 946 , - 969 , - 152 , - 735 , - 478 , - 501 , - 804 , - 267 , - 10 , - 33 , - 336 , - 919 , - 662 , - 685 , - 988 , - 451 , - 194 , - 217 , - 520 , - 1103 , - 846 , - 869 , - 52 , - 635 , - 378 , - 401 , - 704 , - 167 , - 1030 , - 1053 , - 236 , - 819 , - 562 , - 585 , - 888 , - 351 , - 94 , - 117 , - 420 , - 1003 , - 746 , - 769 , - 1072 , - 535 , - 278 , - 301 , - 604 , - 67 , - 930 , - 953 , - 136 , - 719 , - 462 , - 485 , - 788 , - 251 , - 1114 , - 17 , - 320 , - 903 , - 646 , - 669 , - 972 , - 435 , - 178 , - 201 , - 504 , - 1087 , - 830 , - 853 , - 36 , - 619 , - 362 , - 385 , - 688 , - 151 , - 1014 , - 1037 , - 220 , - 803 , - 546 , - 569 , - 872 , - 335 , - 78 , - 101 , - 404 , - 987 , - 730 , - 753 , - 1056 , - 519 , - 262 , - 285 , - 588 , - 51 , - 914 , - 937 , - 120 , - 703 , - 446 , - 469 , - 772 , - 235 , - 1098 , - 1 , - 304 , - 887 , - 630 , - 653 , - 956 , - 419 , - 162 , - 185 , - 488 , - 1071 , - 814 , - 837 , - 20 , - 603 , - 346 , - 369 , - 672 , - 135 , - 998 , - 1021 , - 204 , - 787 , - 530 , - 553 , - 856 , - 319 , - 62 , - 85 , - 388 , - 971 , - 714 , - 737 , - 1040 , - 503 , - 246 , - 269 , - 572 , - 35 , - 898 , - 921 , - 104 , - 687 , - 430 , - 453 , - 756 , - 219 , - 1082 , - 1105 , - 288 , - 871 , - 614 , - 637 , - 940 , - 403 , - 146 , - 169 , - 472 , - 1055 , - 798 , - 821 , - 4 , - 587 , - 330 , - 353 , - 656 , - 119 , - 982 , - 1005 , - 188 , - 771 , - 514 , - 537 , - 840 , - 303 , - 46 , - 69 , - 372 , - 955 , - 698 , - 721 , - 1024 , - 487 , - 230 , - 253 , - 556 , - 19 , - 882 , - 905 , - 88 , - 671 , - 414 , - 437 , - 740 , - 203 , - 1066 , - 1089 , - 272 , - 855 , - 598 , - 621 , - 924 , - 387 , - 130 , - 153 , - 456 , - 1039 , - 782 , - 805 , - 1108 , - 571 , - 314 , - 337 , - 640 , - 103 , - 966 , - 989 , - 172 , - 755 , - 498 , - 521 , - 824 , - 287 , - 30 , - 53 , - 356 , - 939 , - 682 , - 705 , - 1008 , - 471 , - 214 , - 237 , - 540 , - 3 , - 866 , - 889 , - 72 , - 655 , - 398 , - 421 , - 724 , - 187 , - 1050 , - 1073 , - 256 , - 839 , - 582 , - 605 , - 908 , - 371 , - 114 , - 137 , - 440 , - 1023 , - 766 , - 789 , - 1092 , - 555 , - 298 , - 321 , - 624 , - 87 , - 950 , - 973 , - 156 , - 739 , - 482 , - 505 , - 808 , - 271 , - 14 , - 37 , - 340 , - 923 , - 666 , - 689 , - 992 , - 455 , - 198 , - 221 , - 524 , - 1107 , - 850 , - 873 , - 56 , - 639 , - 382 , - 405 , - 708 , - 171 , - 1034 , - 1057 , - 240 , - 823 , - 566 , - 589 , - 892 , - 355 , - 98 , - 121 , - 424 , - 1007 , - 750 , - 773 , - 1076 , - 539 , - 282 , - 305 , - 608 , - 71 , - 934 , - 957 , - 140 , - 723 , - 466 , - 489 , - 792 , - 255 , - 1118 , - 21 , - 324 , - 907 , - 650 , - 673 , - 976 , - 439 , - 182 , - 205 , - 508 , - 1091 , - 834 , - 857 , - 40 , - 623 , - 366 , - 389 , - 692 , - 155 , - 1018 , - 1041 , - 224 , - 807 , - 550 , - 573 , - 876 , - 339 , - 82 , - 105 , - 408 , - 991 , - 734 , - 757 , - 1060 , - 523 , - 266 , - 289 , - 592 , - 55 , - 918 , - 941 , - 124 , - 707 , - 450 , - 473 , - 776 , - 239 , - 1102 , - 5 , - 308 , - 891 , - 634 , - 657 , - 960 , - 423 , - 166 , - 189 , - 492 , - 1075 , - 818 , - 841 , - 24 , - 607 , - 350 , - 373 , - 676 , - 139 , - 1002 , - 1025 , - 208 , - 791 , - 534 , - 557 , - 860 , - 323 , - 66 , - 89 , - 392 , - 975 , - 718 , - 741 , - 1044 , - 507 , - 250 , - 273 , - 576 , - 39 , - 902 , - 925 , - 108 , - 691 , - 434 , - 457 , - 760 , - 223 , - 1086 , - 1109 , - 292 , - 875 , - 618 , - 641 , - 944 , - 407 , - 150 , - 173 , - 476 , - 1059 , - 802 , - 825 , - 8 , - 591 , - 334 , - 357 , - 660 , - 123 , - 986 , - 1009 , - 192 , - 775 , - 518 , - 541 , - 844 , - 307 , - 50 , - 73 , - 376 , - 959 , - 702 , - 725 , - 1028 , - 491 , - 234 , - 257 , - 560 , - 23 , - 886 , - 909 , - 92 , - 675 , - 418 , - 441 , - 744 , - 207 , - 1070 , - 1093 , - 276 , - 859 , - 602 , - 625 , - 928 , - 391 , - 134 , - 157 , - 460 , - 1043 , - 786 , - 809 , - 1112 , - 575 , - 318 , - 341 , - 644 , - 107 , - 970 , - 993 , - 176 , - 759 , - 502 , - 525 , - 828 , - 291 , - 34 , - 57 , - 360 , - 943 , - 686 , - 709 , - 1012 , - 475 , - 218 , - 241 , - 544 , - 7 , - 870 , - 893 , - 76 , - 659 , - 402 , - 425 , - 728 , - 191 , - 1054 , - 1077 , - 260 , - 843 , - 586 , - 609 , - 912 , - 375 , - 118 , - 141 , - 444 , - 1027 , - 770 , - 793 , - 1096 , - 559 , - 302 , - 325 , - 628 , - 91 , - 954 , - 977 , - 160 , - 743 , - 486 , - 509 , - 812 , - 275 , - 18 , - 41 , - 344 , - 927 , - 670 , - 693 , - 996 , - 459 , - 202 , - 225 , - 528 , - 1111 , - 854 , - 877 , - 60 , - 643 , - 386 , - 409 , - 712 , - 175 , - 1038 , - 1061 , - 244 , - 827 , - 570 , - 593 , - 896 , - 359 , - 102 , - 125 , - 428 , - 1011 , - 754 , - 777 , - 1080 , - 543 , - 286 , - 309 , - 612 , - 75 , - 938 , - 961 , - 144 , - 727 , - 470 , - 493 , - 796 , - 259 , - 2 , - 25 , - 328 , - 911 , - 654 , - 677 , - 980 , - 443 , - 186 , - 209 , - 512 , - 1095 , - 838 , - 861 , - 44 , - 627 , - 370 , - 393 , - 696 , - 159 , - 1022 , - 1045 , - 228 , - 811 , - 554 , - 577 , - 880 , - 343 , - 86 , - 109 , - 412 , - 995 , - 738 , - 761 , - 1064 , - 527 , - 270 , - 293 , - 596 , - 59 , - 922 , - 945 , - 128 , - 711 , - 454 , - 477 , - 780 , - 243 , - 1106 , - 9 , - 312 , - 895 , - 638 , - 661 , - 964 , - 427 , - 170 , - 193 , - 496 , - 1079 , - 822 , - 845 , - 28 , - 611 , - 354 , - 377 , - 680 , - 143 , - 1006 , - 1029 , - 212 , - 795 , - 538 , - 561 , - 864 , - 327 , - 70 , - 93 , - 396 , - 979 , - 722 , - 745 , - 1048 , - 511 , - 254 , - 277 , - 580 , - 43 , - 906 , - 929 , - 112 , - 695 , - 438 , - 461 , - 764 , - 227 , - 1090 , - 1113 , - 296 , - 879 , - 622 , - 645 , - 948 , - 411 , - 154 , - 177 , - 480 , - 1063 , - 806 , - 829 , - 12 , - 595 , - 338 , - 361 , - 664 , - 127 , - 990 , - 1013 , - 196 , - 779 , - 522 , - 545 , - 848 , - 311 , - 54 , - 77 , - 380 , - 963 , - 706 , - 729 , - 1032 , - 495 , - 238 , - 261 , - 564 , - 27 , - 890 , - 913 , - 96 , - 679 , - 422 , - 445 , - 748 , - 211 , - 1074 , - 1097 , - 280 , - 863 , - 606 , - 629 , - 932 , - 395 , - 138 , - 161 , - 464 , - 1047 , - 790 , - 813 , - 1116 , - 579 , - 322 , - 345 , - 648 , - 111 , - 974 , - 997 , - 180 , - 763 , - 506 , - 529 , - 832 , - 295 , - 38 , - 61 , - 364 , - 947 , - 690 , - 713 , - 1016 , - 479 , - 222 , - 245 , - 548 , - 11 , - 874 , - 897 , - 80 , - 663 , - 406 , - 429 , - 732 , - 195 , - 1058 , - 1081 , - 264 , - 847 , - 590 , - 613 , - 916 , - 379 , - 122 , - 145 , - 448 , - 1031 , - 774 , - 797 , - 1100 , - 563 , - 306 , - 329 , - 632 , - 95 , - 958 , - 981 , - 164 , - 747 , - 490 , - 513 , - 816 , - 279 , - 22 , - 45 , - 348 , - 931 , - 674 , - 697 , - 1000 , - 463 , - 206 , - 229 , - 532 , - 1115 , - 858 , - 881 , - 64 , - 647 , - 390 , - 413 , - 716 , - 179 , - 1042 , - 1065 , - 248 , - 831 , - 574 , - 597 , - 900 , - 363 , - 106 , - 129 , - 432 , - 1015 , - 758 , - 781 , - 1084 , - 547 , - 290 , - 313 , - 616 , - 79 , - 942 , - 965 , - 148 , - 731 , - 474 , - 497 , - 800 , - 263 , - 6 , - 29 , - 332 , - 915 , - 658 , - 681 , - 984 , - 447 , - 190 , - 213 , - 516 , - 1099 , - 842 , - 865 , - 48 , - 631 , - 374 , - 397 , - 700 , - 163 , - 1026 , - 1049 , - 232 , - 815 , - 558 , - 581 , - 884 , - 347 , - 90 , - 113 , - 416 , - 999 , - 742 , - 765 , - 1068 , - 531 , - 274 , - 297 , - 600 , - 63 , - 926 , - 949 , - 132 , - 715 , - 458 , - 481 , - 784 , - 247 , - 1110 , - 13 , - 316 , - 899 , - 642 , - 665 , - 968 , - 431 , - 174 , - 197 , - 500 , - 1083 , - 826 , - 849 , - 32 , - 615 , - 358 , - 381 , - 684 , - 147 , - 1010 , - 1033 , - 216 , - 799 , - 542 , - 565 , - 868 , - 331 , - 74 , - 97 , - 400 , - 983 , - 726 , - 749 , - 1052 , - 515 , - 258 , - 281 , - 584 , - 47 , - 910 , - 933 , - 116 , - 699 , - 442 , - 465 , - 768 , - 231 , - 1094 , - 1117 , - 300 , - 883 , - 626 , - 649 , - 952 , - 415 , - 158 , - 181 , - 484 , - 1067 , - 810 , - 833 , - 16 , - 599 , - 342 , - 365 , - 668 , - 131 , - 994 , - 1017 , - 200 , - 783 , - 526 , - 549 , - 852 , - 315 , - 58 , - 81 , - 384 , - 967 , - 710 , - 733 , - 1036 , - 499 , - 242 , - 265 , - 568 , - 31 , - 894 , - 917 , - 100 , - 683 , - 426 , - 449 , - 752 , - 215 , - 1078 , - 1101 , - 284 , - 867 , - 610 , - 633 , - 936 , - 399 , - 142 , - 165 , - 468 , - 1051 , - 794 , - 817 , - 0 , - 179 , - 1078 , - 393 , - 428 , - 31 , - 354 , - 245 , - 856 , - 1035 , - 782 , - 97 , - 132 , - 887 , - 58 , - 1101 , - 560 , - 739 , - 486 , - 953 , - 988 , - 591 , - 914 , - 805 , - 264 , - 443 , - 190 , - 657 , - 692 , - 295 , - 618 , - 509 , - 1120 , - 147 , - 1046 , - 361 , - 396 , - 1151 , - 322 , - 213 , - 824 , - 1003 , - 750 , - 65 , - 100 , - 855 , - 26 , - 1069 , - 528 , - 707 , - 454 , - 921 , - 956 , - 559 , - 882 , - 773 , - 232 , - 411 , - 158 , - 625 , - 660 , - 263 , - 586 , - 477 , - 1088 , - 115 , - 1014 , - 329 , - 364 , - 1119 , - 290 , - 181 , - 792 , - 971 , - 718 , - 33 , - 68 , - 823 , - 1146 , - 1037 , - 496 , - 675 , - 422 , - 889 , - 924 , - 527 , - 850 , - 741 , - 200 , - 379 , - 126 , - 593 , - 628 , - 231 , - 554 , - 445 , - 1056 , - 83 , - 982 , - 297 , - 332 , - 1087 , - 258 , - 149 , - 760 , - 939 , - 686 , - 1 , - 36 , - 791 , - 1114 , - 1005 , - 464 , - 643 , - 390 , - 857 , - 892 , - 495 , - 818 , - 709 , - 168 , - 347 , - 94 , - 561 , - 596 , - 199 , - 522 , - 413 , - 1024 , - 51 , - 950 , - 265 , - 300 , - 1055 , - 226 , - 117 , - 728 , - 907 , - 654 , - 1121 , - 4 , - 759 , - 1082 , - 973 , - 432 , - 611 , - 358 , - 825 , - 860 , - 463 , - 786 , - 677 , - 136 , - 315 , - 62 , - 529 , - 564 , - 167 , - 490 , - 381 , - 992 , - 19 , - 918 , - 233 , - 268 , - 1023 , - 194 , - 85 , - 696 , - 875 , - 622 , - 1089 , - 1124 , - 727 , - 1050 , - 941 , - 400 , - 579 , - 326 , - 793 , - 828 , - 431 , - 754 , - 645 , - 104 , - 283 , - 30 , - 497 , - 532 , - 135 , - 458 , - 349 , - 960 , - 1139 , - 886 , - 201 , - 236 , - 991 , - 162 , - 53 , - 664 , - 843 , - 590 , - 1057 , - 1092 , - 695 , - 1018 , - 909 , - 368 , - 547 , - 294 , - 761 , - 796 , - 399 , - 722 , - 613 , - 72 , - 251 , - 1150 , - 465 , - 500 , - 103 , - 426 , - 317 , - 928 , - 1107 , - 854 , - 169 , - 204 , - 959 , - 130 , - 21 , - 632 , - 811 , - 558 , - 1025 , - 1060 , - 663 , - 986 , - 877 , - 336 , - 515 , - 262 , - 729 , - 764 , - 367 , - 690 , - 581 , - 40 , - 219 , - 1118 , - 433 , - 468 , - 71 , - 394 , - 285 , - 896 , - 1075 , - 822 , - 137 , - 172 , - 927 , - 98 , - 1141 , - 600 , - 779 , - 526 , - 993 , - 1028 , - 631 , - 954 , - 845 , - 304 , - 483 , - 230 , - 697 , - 732 , - 335 , - 658 , - 549 , - 8 , - 187 , - 1086 , - 401 , - 436 , - 39 , - 362 , - 253 , - 864 , - 1043 , - 790 , - 105 , - 140 , - 895 , - 66 , - 1109 , - 568 , - 747 , - 494 , - 961 , - 996 , - 599 , - 922 , - 813 , - 272 , - 451 , - 198 , - 665 , - 700 , - 303 , - 626 , - 517 , - 1128 , - 155 , - 1054 , - 369 , - 404 , - 7 , - 330 , - 221 , - 832 , - 1011 , - 758 , - 73 , - 108 , - 863 , - 34 , - 1077 , - 536 , - 715 , - 462 , - 929 , - 964 , - 567 , - 890 , - 781 , - 240 , - 419 , - 166 , - 633 , - 668 , - 271 , - 594 , - 485 , - 1096 , - 123 , - 1022 , - 337 , - 372 , - 1127 , - 298 , - 189 , - 800 , - 979 , - 726 , - 41 , - 76 , - 831 , - 2 , - 1045 , - 504 , - 683 , - 430 , - 897 , - 932 , - 535 , - 858 , - 749 , - 208 , - 387 , - 134 , - 601 , - 636 , - 239 , - 562 , - 453 , - 1064 , - 91 , - 990 , - 305 , - 340 , - 1095 , - 266 , - 157 , - 768 , - 947 , - 694 , - 9 , - 44 , - 799 , - 1122 , - 1013 , - 472 , - 651 , - 398 , - 865 , - 900 , - 503 , - 826 , - 717 , - 176 , - 355 , - 102 , - 569 , - 604 , - 207 , - 530 , - 421 , - 1032 , - 59 , - 958 , - 273 , - 308 , - 1063 , - 234 , - 125 , - 736 , - 915 , - 662 , - 1129 , - 12 , - 767 , - 1090 , - 981 , - 440 , - 619 , - 366 , - 833 , - 868 , - 471 , - 794 , - 685 , - 144 , - 323 , - 70 , - 537 , - 572 , - 175 , - 498 , - 389 , - 1000 , - 27 , - 926 , - 241 , - 276 , - 1031 , - 202 , - 93 , - 704 , - 883 , - 630 , - 1097 , - 1132 , - 735 , - 1058 , - 949 , - 408 , - 587 , - 334 , - 801 , - 836 , - 439 , - 762 , - 653 , - 112 , - 291 , - 38 , - 505 , - 540 , - 143 , - 466 , - 357 , - 968 , - 1147 , - 894 , - 209 , - 244 , - 999 , - 170 , - 61 , - 672 , - 851 , - 598 , - 1065 , - 1100 , - 703 , - 1026 , - 917 , - 376 , - 555 , - 302 , - 769 , - 804 , - 407 , - 730 , - 621 , - 80 , - 259 , - 6 , - 473 , - 508 , - 111 , - 434 , - 325 , - 936 , - 1115 , - 862 , - 177 , - 212 , - 967 , - 138 , - 29 , - 640 , - 819 , - 566 , - 1033 , - 1068 , - 671 , - 994 , - 885 , - 344 , - 523 , - 270 , - 737 , - 772 , - 375 , - 698 , - 589 , - 48 , - 227 , - 1126 , - 441 , - 476 , - 79 , - 402 , - 293 , - 904 , - 1083 , - 830 , - 145 , - 180 , - 935 , - 106 , - 1149 , - 608 , - 787 , - 534 , - 1001 , - 1036 , - 639 , - 962 , - 853 , - 312 , - 491 , - 238 , - 705 , - 740 , - 343 , - 666 , - 557 , - 16 , - 195 , - 1094 , - 409 , - 444 , - 47 , - 370 , - 261 , - 872 , - 1051 , - 798 , - 113 , - 148 , - 903 , - 74 , - 1117 , - 576 , - 755 , - 502 , - 969 , - 1004 , - 607 , - 930 , - 821 , - 280 , - 459 , - 206 , - 673 , - 708 , - 311 , - 634 , - 525 , - 1136 , - 163 , - 1062 , - 377 , - 412 , - 15 , - 338 , - 229 , - 840 , - 1019 , - 766 , - 81 , - 116 , - 871 , - 42 , - 1085 , - 544 , - 723 , - 470 , - 937 , - 972 , - 575 , - 898 , - 789 , - 248 , - 427 , - 174 , - 641 , - 676 , - 279 , - 602 , - 493 , - 1104 , - 131 , - 1030 , - 345 , - 380 , - 1135 , - 306 , - 197 , - 808 , - 987 , - 734 , - 49 , - 84 , - 839 , - 10 , - 1053 , - 512 , - 691 , - 438 , - 905 , - 940 , - 543 , - 866 , - 757 , - 216 , - 395 , - 142 , - 609 , - 644 , - 247 , - 570 , - 461 , - 1072 , - 99 , - 998 , - 313 , - 348 , - 1103 , - 274 , - 165 , - 776 , - 955 , - 702 , - 17 , - 52 , - 807 , - 1130 , - 1021 , - 480 , - 659 , - 406 , - 873 , - 908 , - 511 , - 834 , - 725 , - 184 , - 363 , - 110 , - 577 , - 612 , - 215 , - 538 , - 429 , - 1040 , - 67 , - 966 , - 281 , - 316 , - 1071 , - 242 , - 133 , - 744 , - 923 , - 670 , - 1137 , - 20 , - 775 , - 1098 , - 989 , - 448 , - 627 , - 374 , - 841 , - 876 , - 479 , - 802 , - 693 , - 152 , - 331 , - 78 , - 545 , - 580 , - 183 , - 506 , - 397 , - 1008 , - 35 , - 934 , - 249 , - 284 , - 1039 , - 210 , - 101 , - 712 , - 891 , - 638 , - 1105 , - 1140 , - 743 , - 1066 , - 957 , - 416 , - 595 , - 342 , - 809 , - 844 , - 447 , - 770 , - 661 , - 120 , - 299 , - 46 , - 513 , - 548 , - 151 , - 474 , - 365 , - 976 , - 3 , - 902 , - 217 , - 252 , - 1007 , - 178 , - 69 , - 680 , - 859 , - 606 , - 1073 , - 1108 , - 711 , - 1034 , - 925 , - 384 , - 563 , - 310 , - 777 , - 812 , - 415 , - 738 , - 629 , - 88 , - 267 , - 14 , - 481 , - 516 , - 119 , - 442 , - 333 , - 944 , - 1123 , - 870 , - 185 , - 220 , - 975 , - 146 , - 37 , - 648 , - 827 , - 574 , - 1041 , - 1076 , - 679 , - 1002 , - 893 , - 352 , - 531 , - 278 , - 745 , - 780 , - 383 , - 706 , - 597 , - 56 , - 235 , - 1134 , - 449 , - 484 , - 87 , - 410 , - 301 , - 912 , - 1091 , - 838 , - 153 , - 188 , - 943 , - 114 , - 5 , - 616 , - 795 , - 542 , - 1009 , - 1044 , - 647 , - 970 , - 861 , - 320 , - 499 , - 246 , - 713 , - 748 , - 351 , - 674 , - 565 , - 24 , - 203 , - 1102 , - 417 , - 452 , - 55 , - 378 , - 269 , - 880 , - 1059 , - 806 , - 121 , - 156 , - 911 , - 82 , - 1125 , - 584 , - 763 , - 510 , - 977 , - 1012 , - 615 , - 938 , - 829 , - 288 , - 467 , - 214 , - 681 , - 716 , - 319 , - 642 , - 533 , - 1144 , - 171 , - 1070 , - 385 , - 420 , - 23 , - 346 , - 237 , - 848 , - 1027 , - 774 , - 89 , - 124 , - 879 , - 50 , - 1093 , - 552 , - 731 , - 478 , - 945 , - 980 , - 583 , - 906 , - 797 , - 256 , - 435 , - 182 , - 649 , - 684 , - 287 , - 610 , - 501 , - 1112 , - 139 , - 1038 , - 353 , - 388 , - 1143 , - 314 , - 205 , - 816 , - 995 , - 742 , - 57 , - 92 , - 847 , - 18 , - 1061 , - 520 , - 699 , - 446 , - 913 , - 948 , - 551 , - 874 , - 765 , - 224 , - 403 , - 150 , - 617 , - 652 , - 255 , - 578 , - 469 , - 1080 , - 107 , - 1006 , - 321 , - 356 , - 1111 , - 282 , - 173 , - 784 , - 963 , - 710 , - 25 , - 60 , - 815 , - 1138 , - 1029 , - 488 , - 667 , - 414 , - 881 , - 916 , - 519 , - 842 , - 733 , - 192 , - 371 , - 118 , - 585 , - 620 , - 223 , - 546 , - 437 , - 1048 , - 75 , - 974 , - 289 , - 324 , - 1079 , - 250 , - 141 , - 752 , - 931 , - 678 , - 1145 , - 28 , - 783 , - 1106 , - 997 , - 456 , - 635 , - 382 , - 849 , - 884 , - 487 , - 810 , - 701 , - 160 , - 339 , - 86 , - 553 , - 588 , - 191 , - 514 , - 405 , - 1016 , - 43 , - 942 , - 257 , - 292 , - 1047 , - 218 , - 109 , - 720 , - 899 , - 646 , - 1113 , - 1148 , - 751 , - 1074 , - 965 , - 424 , - 603 , - 350 , - 817 , - 852 , - 455 , - 778 , - 669 , - 128 , - 307 , - 54 , - 521 , - 556 , - 159 , - 482 , - 373 , - 984 , - 11 , - 910 , - 225 , - 260 , - 1015 , - 186 , - 77 , - 688 , - 867 , - 614 , - 1081 , - 1116 , - 719 , - 1042 , - 933 , - 392 , - 571 , - 318 , - 785 , - 820 , - 423 , - 746 , - 637 , - 96 , - 275 , - 22 , - 489 , - 524 , - 127 , - 450 , - 341 , - 952 , - 1131 , - 878 , - 193 , - 228 , - 983 , - 154 , - 45 , - 656 , - 835 , - 582 , - 1049 , - 1084 , - 687 , - 1010 , - 901 , - 360 , - 539 , - 286 , - 753 , - 788 , - 391 , - 714 , - 605 , - 64 , - 243 , - 1142 , - 457 , - 492 , - 95 , - 418 , - 309 , - 920 , - 1099 , - 846 , - 161 , - 196 , - 951 , - 122 , - 13 , - 624 , - 803 , - 550 , - 1017 , - 1052 , - 655 , - 978 , - 869 , - 328 , - 507 , - 254 , - 721 , - 756 , - 359 , - 682 , - 573 , - 32 , - 211 , - 1110 , - 425 , - 460 , - 63 , - 386 , - 277 , - 888 , - 1067 , - 814 , - 129 , - 164 , - 919 , - 90 , - 1133 , - 592 , - 771 , - 518 , - 985 , - 1020 , - 623 , - 946 , - 837 , - 296 , - 475 , - 222 , - 689 , - 724 , - 327 , - 650 , - 541 , - 0 , - 1149 , - 670 , - 339 , - 748 , - 121 , - 234 , - 495 , - 312 , - 277 , - 982 , - 651 , - 1060 , - 433 , - 546 , - 807 , - 624 , - 589 , - 110 , - 963 , - 188 , - 745 , - 858 , - 1119 , - 936 , - 901 , - 422 , - 91 , - 500 , - 1057 , - 1170 , - 247 , - 64 , - 29 , - 734 , - 403 , - 812 , - 185 , - 298 , - 559 , - 376 , - 341 , - 1046 , - 715 , - 1124 , - 497 , - 610 , - 871 , - 688 , - 653 , - 174 , - 1027 , - 252 , - 809 , - 922 , - 1183 , - 1000 , - 965 , - 486 , - 155 , - 564 , - 1121 , - 50 , - 311 , - 128 , - 93 , - 798 , - 467 , - 876 , - 249 , - 362 , - 623 , - 440 , - 405 , - 1110 , - 779 , - 4 , - 561 , - 674 , - 935 , - 752 , - 717 , - 238 , - 1091 , - 316 , - 873 , - 986 , - 63 , - 1064 , - 1029 , - 550 , - 219 , - 628 , - 1 , - 114 , - 375 , - 192 , - 157 , - 862 , - 531 , - 940 , - 313 , - 426 , - 687 , - 504 , - 469 , - 1174 , - 843 , - 68 , - 625 , - 738 , - 999 , - 816 , - 781 , - 302 , - 1155 , - 380 , - 937 , - 1050 , - 127 , - 1128 , - 1093 , - 614 , - 283 , - 692 , - 65 , - 178 , - 439 , - 256 , - 221 , - 926 , - 595 , - 1004 , - 377 , - 490 , - 751 , - 568 , - 533 , - 54 , - 907 , - 132 , - 689 , - 802 , - 1063 , - 880 , - 845 , - 366 , - 35 , - 444 , - 1001 , - 1114 , - 191 , - 8 , - 1157 , - 678 , - 347 , - 756 , - 129 , - 242 , - 503 , - 320 , - 285 , - 990 , - 659 , - 1068 , - 441 , - 554 , - 815 , - 632 , - 597 , - 118 , - 971 , - 196 , - 753 , - 866 , - 1127 , - 944 , - 909 , - 430 , - 99 , - 508 , - 1065 , - 1178 , - 255 , - 72 , - 37 , - 742 , - 411 , - 820 , - 193 , - 306 , - 567 , - 384 , - 349 , - 1054 , - 723 , - 1132 , - 505 , - 618 , - 879 , - 696 , - 661 , - 182 , - 1035 , - 260 , - 817 , - 930 , - 7 , - 1008 , - 973 , - 494 , - 163 , - 572 , - 1129 , - 58 , - 319 , - 136 , - 101 , - 806 , - 475 , - 884 , - 257 , - 370 , - 631 , - 448 , - 413 , - 1118 , - 787 , - 12 , - 569 , - 682 , - 943 , - 760 , - 725 , - 246 , - 1099 , - 324 , - 881 , - 994 , - 71 , - 1072 , - 1037 , - 558 , - 227 , - 636 , - 9 , - 122 , - 383 , - 200 , - 165 , - 870 , - 539 , - 948 , - 321 , - 434 , - 695 , - 512 , - 477 , - 1182 , - 851 , - 76 , - 633 , - 746 , - 1007 , - 824 , - 789 , - 310 , - 1163 , - 388 , - 945 , - 1058 , - 135 , - 1136 , - 1101 , - 622 , - 291 , - 700 , - 73 , - 186 , - 447 , - 264 , - 229 , - 934 , - 603 , - 1012 , - 385 , - 498 , - 759 , - 576 , - 541 , - 62 , - 915 , - 140 , - 697 , - 810 , - 1071 , - 888 , - 853 , - 374 , - 43 , - 452 , - 1009 , - 1122 , - 199 , - 16 , - 1165 , - 686 , - 355 , - 764 , - 137 , - 250 , - 511 , - 328 , - 293 , - 998 , - 667 , - 1076 , - 449 , - 562 , - 823 , - 640 , - 605 , - 126 , - 979 , - 204 , - 761 , - 874 , - 1135 , - 952 , - 917 , - 438 , - 107 , - 516 , - 1073 , - 2 , - 263 , - 80 , - 45 , - 750 , - 419 , - 828 , - 201 , - 314 , - 575 , - 392 , - 357 , - 1062 , - 731 , - 1140 , - 513 , - 626 , - 887 , - 704 , - 669 , - 190 , - 1043 , - 268 , - 825 , - 938 , - 15 , - 1016 , - 981 , - 502 , - 171 , - 580 , - 1137 , - 66 , - 327 , - 144 , - 109 , - 814 , - 483 , - 892 , - 265 , - 378 , - 639 , - 456 , - 421 , - 1126 , - 795 , - 20 , - 577 , - 690 , - 951 , - 768 , - 733 , - 254 , - 1107 , - 332 , - 889 , - 1002 , - 79 , - 1080 , - 1045 , - 566 , - 235 , - 644 , - 17 , - 130 , - 391 , - 208 , - 173 , - 878 , - 547 , - 956 , - 329 , - 442 , - 703 , - 520 , - 485 , - 6 , - 859 , - 84 , - 641 , - 754 , - 1015 , - 832 , - 797 , - 318 , - 1171 , - 396 , - 953 , - 1066 , - 143 , - 1144 , - 1109 , - 630 , - 299 , - 708 , - 81 , - 194 , - 455 , - 272 , - 237 , - 942 , - 611 , - 1020 , - 393 , - 506 , - 767 , - 584 , - 549 , - 70 , - 923 , - 148 , - 705 , - 818 , - 1079 , - 896 , - 861 , - 382 , - 51 , - 460 , - 1017 , - 1130 , - 207 , - 24 , - 1173 , - 694 , - 363 , - 772 , - 145 , - 258 , - 519 , - 336 , - 301 , - 1006 , - 675 , - 1084 , - 457 , - 570 , - 831 , - 648 , - 613 , - 134 , - 987 , - 212 , - 769 , - 882 , - 1143 , - 960 , - 925 , - 446 , - 115 , - 524 , - 1081 , - 10 , - 271 , - 88 , - 53 , - 758 , - 427 , - 836 , - 209 , - 322 , - 583 , - 400 , - 365 , - 1070 , - 739 , - 1148 , - 521 , - 634 , - 895 , - 712 , - 677 , - 198 , - 1051 , - 276 , - 833 , - 946 , - 23 , - 1024 , - 989 , - 510 , - 179 , - 588 , - 1145 , - 74 , - 335 , - 152 , - 117 , - 822 , - 491 , - 900 , - 273 , - 386 , - 647 , - 464 , - 429 , - 1134 , - 803 , - 28 , - 585 , - 698 , - 959 , - 776 , - 741 , - 262 , - 1115 , - 340 , - 897 , - 1010 , - 87 , - 1088 , - 1053 , - 574 , - 243 , - 652 , - 25 , - 138 , - 399 , - 216 , - 181 , - 886 , - 555 , - 964 , - 337 , - 450 , - 711 , - 528 , - 493 , - 14 , - 867 , - 92 , - 649 , - 762 , - 1023 , - 840 , - 805 , - 326 , - 1179 , - 404 , - 961 , - 1074 , - 151 , - 1152 , - 1117 , - 638 , - 307 , - 716 , - 89 , - 202 , - 463 , - 280 , - 245 , - 950 , - 619 , - 1028 , - 401 , - 514 , - 775 , - 592 , - 557 , - 78 , - 931 , - 156 , - 713 , - 826 , - 1087 , - 904 , - 869 , - 390 , - 59 , - 468 , - 1025 , - 1138 , - 215 , - 32 , - 1181 , - 702 , - 371 , - 780 , - 153 , - 266 , - 527 , - 344 , - 309 , - 1014 , - 683 , - 1092 , - 465 , - 578 , - 839 , - 656 , - 621 , - 142 , - 995 , - 220 , - 777 , - 890 , - 1151 , - 968 , - 933 , - 454 , - 123 , - 532 , - 1089 , - 18 , - 279 , - 96 , - 61 , - 766 , - 435 , - 844 , - 217 , - 330 , - 591 , - 408 , - 373 , - 1078 , - 747 , - 1156 , - 529 , - 642 , - 903 , - 720 , - 685 , - 206 , - 1059 , - 284 , - 841 , - 954 , - 31 , - 1032 , - 997 , - 518 , - 187 , - 596 , - 1153 , - 82 , - 343 , - 160 , - 125 , - 830 , - 499 , - 908 , - 281 , - 394 , - 655 , - 472 , - 437 , - 1142 , - 811 , - 36 , - 593 , - 706 , - 967 , - 784 , - 749 , - 270 , - 1123 , - 348 , - 905 , - 1018 , - 95 , - 1096 , - 1061 , - 582 , - 251 , - 660 , - 33 , - 146 , - 407 , - 224 , - 189 , - 894 , - 563 , - 972 , - 345 , - 458 , - 719 , - 536 , - 501 , - 22 , - 875 , - 100 , - 657 , - 770 , - 1031 , - 848 , - 813 , - 334 , - 3 , - 412 , - 969 , - 1082 , - 159 , - 1160 , - 1125 , - 646 , - 315 , - 724 , - 97 , - 210 , - 471 , - 288 , - 253 , - 958 , - 627 , - 1036 , - 409 , - 522 , - 783 , - 600 , - 565 , - 86 , - 939 , - 164 , - 721 , - 834 , - 1095 , - 912 , - 877 , - 398 , - 67 , - 476 , - 1033 , - 1146 , - 223 , - 40 , - 5 , - 710 , - 379 , - 788 , - 161 , - 274 , - 535 , - 352 , - 317 , - 1022 , - 691 , - 1100 , - 473 , - 586 , - 847 , - 664 , - 629 , - 150 , - 1003 , - 228 , - 785 , - 898 , - 1159 , - 976 , - 941 , - 462 , - 131 , - 540 , - 1097 , - 26 , - 287 , - 104 , - 69 , - 774 , - 443 , - 852 , - 225 , - 338 , - 599 , - 416 , - 381 , - 1086 , - 755 , - 1164 , - 537 , - 650 , - 911 , - 728 , - 693 , - 214 , - 1067 , - 292 , - 849 , - 962 , - 39 , - 1040 , - 1005 , - 526 , - 195 , - 604 , - 1161 , - 90 , - 351 , - 168 , - 133 , - 838 , - 507 , - 916 , - 289 , - 402 , - 663 , - 480 , - 445 , - 1150 , - 819 , - 44 , - 601 , - 714 , - 975 , - 792 , - 757 , - 278 , - 1131 , - 356 , - 913 , - 1026 , - 103 , - 1104 , - 1069 , - 590 , - 259 , - 668 , - 41 , - 154 , - 415 , - 232 , - 197 , - 902 , - 571 , - 980 , - 353 , - 466 , - 727 , - 544 , - 509 , - 30 , - 883 , - 108 , - 665 , - 778 , - 1039 , - 856 , - 821 , - 342 , - 11 , - 420 , - 977 , - 1090 , - 167 , - 1168 , - 1133 , - 654 , - 323 , - 732 , - 105 , - 218 , - 479 , - 296 , - 261 , - 966 , - 635 , - 1044 , - 417 , - 530 , - 791 , - 608 , - 573 , - 94 , - 947 , - 172 , - 729 , - 842 , - 1103 , - 920 , - 885 , - 406 , - 75 , - 484 , - 1041 , - 1154 , - 231 , - 48 , - 13 , - 718 , - 387 , - 796 , - 169 , - 282 , - 543 , - 360 , - 325 , - 1030 , - 699 , - 1108 , - 481 , - 594 , - 855 , - 672 , - 637 , - 158 , - 1011 , - 236 , - 793 , - 906 , - 1167 , - 984 , - 949 , - 470 , - 139 , - 548 , - 1105 , - 34 , - 295 , - 112 , - 77 , - 782 , - 451 , - 860 , - 233 , - 346 , - 607 , - 424 , - 389 , - 1094 , - 763 , - 1172 , - 545 , - 658 , - 919 , - 736 , - 701 , - 222 , - 1075 , - 300 , - 857 , - 970 , - 47 , - 1048 , - 1013 , - 534 , - 203 , - 612 , - 1169 , - 98 , - 359 , - 176 , - 141 , - 846 , - 515 , - 924 , - 297 , - 410 , - 671 , - 488 , - 453 , - 1158 , - 827 , - 52 , - 609 , - 722 , - 983 , - 800 , - 765 , - 286 , - 1139 , - 364 , - 921 , - 1034 , - 111 , - 1112 , - 1077 , - 598 , - 267 , - 676 , - 49 , - 162 , - 423 , - 240 , - 205 , - 910 , - 579 , - 988 , - 361 , - 474 , - 735 , - 552 , - 517 , - 38 , - 891 , - 116 , - 673 , - 786 , - 1047 , - 864 , - 829 , - 350 , - 19 , - 428 , - 985 , - 1098 , - 175 , - 1176 , - 1141 , - 662 , - 331 , - 740 , - 113 , - 226 , - 487 , - 304 , - 269 , - 974 , - 643 , - 1052 , - 425 , - 538 , - 799 , - 616 , - 581 , - 102 , - 955 , - 180 , - 737 , - 850 , - 1111 , - 928 , - 893 , - 414 , - 83 , - 492 , - 1049 , - 1162 , - 239 , - 56 , - 21 , - 726 , - 395 , - 804 , - 177 , - 290 , - 551 , - 368 , - 333 , - 1038 , - 707 , - 1116 , - 489 , - 602 , - 863 , - 680 , - 645 , - 166 , - 1019 , - 244 , - 801 , - 914 , - 1175 , - 992 , - 957 , - 478 , - 147 , - 556 , - 1113 , - 42 , - 303 , - 120 , - 85 , - 790 , - 459 , - 868 , - 241 , - 354 , - 615 , - 432 , - 397 , - 1102 , - 771 , - 1180 , - 553 , - 666 , - 927 , - 744 , - 709 , - 230 , - 1083 , - 308 , - 865 , - 978 , - 55 , - 1056 , - 1021 , - 542 , - 211 , - 620 , - 1177 , - 106 , - 367 , - 184 , - 149 , - 854 , - 523 , - 932 , - 305 , - 418 , - 679 , - 496 , - 461 , - 1166 , - 835 , - 60 , - 617 , - 730 , - 991 , - 808 , - 773 , - 294 , - 1147 , - 372 , - 929 , - 1042 , - 119 , - 1120 , - 1085 , - 606 , - 275 , - 684 , - 57 , - 170 , - 431 , - 248 , - 213 , - 918 , - 587 , - 996 , - 369 , - 482 , - 743 , - 560 , - 525 , - 46 , - 899 , - 124 , - 681 , - 794 , - 1055 , - 872 , - 837 , - 358 , - 27 , - 436 , - 993 , - 1106 , - 183 , - 0 , - 419 , - 990 , - 497 , - 156 , - 1183 , - 1146 , - 45 , - 312 , - 731 , - 86 , - 809 , - 468 , - 279 , - 242 , - 357 , - 624 , - 1043 , - 398 , - 1121 , - 780 , - 591 , - 554 , - 669 , - 936 , - 139 , - 710 , - 217 , - 1092 , - 903 , - 866 , - 981 , - 32 , - 451 , - 1022 , - 529 , - 188 , - 1215 , - 1178 , - 77 , - 344 , - 763 , - 118 , - 841 , - 500 , - 311 , - 274 , - 389 , - 656 , - 1075 , - 430 , - 1153 , - 812 , - 623 , - 586 , - 701 , - 968 , - 171 , - 742 , - 249 , - 1124 , - 935 , - 898 , - 1013 , - 64 , - 483 , - 1054 , - 561 , - 220 , - 31 , - 1210 , - 109 , - 376 , - 795 , - 150 , - 873 , - 532 , - 343 , - 306 , - 421 , - 688 , - 1107 , - 462 , - 1185 , - 844 , - 655 , - 618 , - 733 , - 1000 , - 203 , - 774 , - 281 , - 1156 , - 967 , - 930 , - 1045 , - 96 , - 515 , - 1086 , - 593 , - 252 , - 63 , - 26 , - 141 , - 408 , - 827 , - 182 , - 905 , - 564 , - 375 , - 338 , - 453 , - 720 , - 1139 , - 494 , - 1 , - 876 , - 687 , - 650 , - 765 , - 1032 , - 235 , - 806 , - 313 , - 1188 , - 999 , - 962 , - 1077 , - 128 , - 547 , - 1118 , - 625 , - 284 , - 95 , - 58 , - 173 , - 440 , - 859 , - 214 , - 937 , - 596 , - 407 , - 370 , - 485 , - 752 , - 1171 , - 526 , - 33 , - 908 , - 719 , - 682 , - 797 , - 1064 , - 267 , - 838 , - 345 , - 4 , - 1031 , - 994 , - 1109 , - 160 , - 579 , - 1150 , - 657 , - 316 , - 127 , - 90 , - 205 , - 472 , - 891 , - 246 , - 969 , - 628 , - 439 , - 402 , - 517 , - 784 , - 1203 , - 558 , - 65 , - 940 , - 751 , - 714 , - 829 , - 1096 , - 299 , - 870 , - 377 , - 36 , - 1063 , - 1026 , - 1141 , - 192 , - 611 , - 1182 , - 689 , - 348 , - 159 , - 122 , - 237 , - 504 , - 923 , - 278 , - 1001 , - 660 , - 471 , - 434 , - 549 , - 816 , - 19 , - 590 , - 97 , - 972 , - 783 , - 746 , - 861 , - 1128 , - 331 , - 902 , - 409 , - 68 , - 1095 , - 1058 , - 1173 , - 224 , - 643 , - 1214 , - 721 , - 380 , - 191 , - 154 , - 269 , - 536 , - 955 , - 310 , - 1033 , - 692 , - 503 , - 466 , - 581 , - 848 , - 51 , - 622 , - 129 , - 1004 , - 815 , - 778 , - 893 , - 1160 , - 363 , - 934 , - 441 , - 100 , - 1127 , - 1090 , - 1205 , - 256 , - 675 , - 30 , - 753 , - 412 , - 223 , - 186 , - 301 , - 568 , - 987 , - 342 , - 1065 , - 724 , - 535 , - 498 , - 613 , - 880 , - 83 , - 654 , - 161 , - 1036 , - 847 , - 810 , - 925 , - 1192 , - 395 , - 966 , - 473 , - 132 , - 1159 , - 1122 , - 21 , - 288 , - 707 , - 62 , - 785 , - 444 , - 255 , - 218 , - 333 , - 600 , - 1019 , - 374 , - 1097 , - 756 , - 567 , - 530 , - 645 , - 912 , - 115 , - 686 , - 193 , - 1068 , - 879 , - 842 , - 957 , - 8 , - 427 , - 998 , - 505 , - 164 , - 1191 , - 1154 , - 53 , - 320 , - 739 , - 94 , - 817 , - 476 , - 287 , - 250 , - 365 , - 632 , - 1051 , - 406 , - 1129 , - 788 , - 599 , - 562 , - 677 , - 944 , - 147 , - 718 , - 225 , - 1100 , - 911 , - 874 , - 989 , - 40 , - 459 , - 1030 , - 537 , - 196 , - 7 , - 1186 , - 85 , - 352 , - 771 , - 126 , - 849 , - 508 , - 319 , - 282 , - 397 , - 664 , - 1083 , - 438 , - 1161 , - 820 , - 631 , - 594 , - 709 , - 976 , - 179 , - 750 , - 257 , - 1132 , - 943 , - 906 , - 1021 , - 72 , - 491 , - 1062 , - 569 , - 228 , - 39 , - 2 , - 117 , - 384 , - 803 , - 158 , - 881 , - 540 , - 351 , - 314 , - 429 , - 696 , - 1115 , - 470 , - 1193 , - 852 , - 663 , - 626 , - 741 , - 1008 , - 211 , - 782 , - 289 , - 1164 , - 975 , - 938 , - 1053 , - 104 , - 523 , - 1094 , - 601 , - 260 , - 71 , - 34 , - 149 , - 416 , - 835 , - 190 , - 913 , - 572 , - 383 , - 346 , - 461 , - 728 , - 1147 , - 502 , - 9 , - 884 , - 695 , - 658 , - 773 , - 1040 , - 243 , - 814 , - 321 , - 1196 , - 1007 , - 970 , - 1085 , - 136 , - 555 , - 1126 , - 633 , - 292 , - 103 , - 66 , - 181 , - 448 , - 867 , - 222 , - 945 , - 604 , - 415 , - 378 , - 493 , - 760 , - 1179 , - 534 , - 41 , - 916 , - 727 , - 690 , - 805 , - 1072 , - 275 , - 846 , - 353 , - 12 , - 1039 , - 1002 , - 1117 , - 168 , - 587 , - 1158 , - 665 , - 324 , - 135 , - 98 , - 213 , - 480 , - 899 , - 254 , - 977 , - 636 , - 447 , - 410 , - 525 , - 792 , - 1211 , - 566 , - 73 , - 948 , - 759 , - 722 , - 837 , - 1104 , - 307 , - 878 , - 385 , - 44 , - 1071 , - 1034 , - 1149 , - 200 , - 619 , - 1190 , - 697 , - 356 , - 167 , - 130 , - 245 , - 512 , - 931 , - 286 , - 1009 , - 668 , - 479 , - 442 , - 557 , - 824 , - 27 , - 598 , - 105 , - 980 , - 791 , - 754 , - 869 , - 1136 , - 339 , - 910 , - 417 , - 76 , - 1103 , - 1066 , - 1181 , - 232 , - 651 , - 6 , - 729 , - 388 , - 199 , - 162 , - 277 , - 544 , - 963 , - 318 , - 1041 , - 700 , - 511 , - 474 , - 589 , - 856 , - 59 , - 630 , - 137 , - 1012 , - 823 , - 786 , - 901 , - 1168 , - 371 , - 942 , - 449 , - 108 , - 1135 , - 1098 , - 1213 , - 264 , - 683 , - 38 , - 761 , - 420 , - 231 , - 194 , - 309 , - 576 , - 995 , - 350 , - 1073 , - 732 , - 543 , - 506 , - 621 , - 888 , - 91 , - 662 , - 169 , - 1044 , - 855 , - 818 , - 933 , - 1200 , - 403 , - 974 , - 481 , - 140 , - 1167 , - 1130 , - 29 , - 296 , - 715 , - 70 , - 793 , - 452 , - 263 , - 226 , - 341 , - 608 , - 1027 , - 382 , - 1105 , - 764 , - 575 , - 538 , - 653 , - 920 , - 123 , - 694 , - 201 , - 1076 , - 887 , - 850 , - 965 , - 16 , - 435 , - 1006 , - 513 , - 172 , - 1199 , - 1162 , - 61 , - 328 , - 747 , - 102 , - 825 , - 484 , - 295 , - 258 , - 373 , - 640 , - 1059 , - 414 , - 1137 , - 796 , - 607 , - 570 , - 685 , - 952 , - 155 , - 726 , - 233 , - 1108 , - 919 , - 882 , - 997 , - 48 , - 467 , - 1038 , - 545 , - 204 , - 15 , - 1194 , - 93 , - 360 , - 779 , - 134 , - 857 , - 516 , - 327 , - 290 , - 405 , - 672 , - 1091 , - 446 , - 1169 , - 828 , - 639 , - 602 , - 717 , - 984 , - 187 , - 758 , - 265 , - 1140 , - 951 , - 914 , - 1029 , - 80 , - 499 , - 1070 , - 577 , - 236 , - 47 , - 10 , - 125 , - 392 , - 811 , - 166 , - 889 , - 548 , - 359 , - 322 , - 437 , - 704 , - 1123 , - 478 , - 1201 , - 860 , - 671 , - 634 , - 749 , - 1016 , - 219 , - 790 , - 297 , - 1172 , - 983 , - 946 , - 1061 , - 112 , - 531 , - 1102 , - 609 , - 268 , - 79 , - 42 , - 157 , - 424 , - 843 , - 198 , - 921 , - 580 , - 391 , - 354 , - 469 , - 736 , - 1155 , - 510 , - 17 , - 892 , - 703 , - 666 , - 781 , - 1048 , - 251 , - 822 , - 329 , - 1204 , - 1015 , - 978 , - 1093 , - 144 , - 563 , - 1134 , - 641 , - 300 , - 111 , - 74 , - 189 , - 456 , - 875 , - 230 , - 953 , - 612 , - 423 , - 386 , - 501 , - 768 , - 1187 , - 542 , - 49 , - 924 , - 735 , - 698 , - 813 , - 1080 , - 283 , - 854 , - 361 , - 20 , - 1047 , - 1010 , - 1125 , - 176 , - 595 , - 1166 , - 673 , - 332 , - 143 , - 106 , - 221 , - 488 , - 907 , - 262 , - 985 , - 644 , - 455 , - 418 , - 533 , - 800 , - 3 , - 574 , - 81 , - 956 , - 767 , - 730 , - 845 , - 1112 , - 315 , - 886 , - 393 , - 52 , - 1079 , - 1042 , - 1157 , - 208 , - 627 , - 1198 , - 705 , - 364 , - 175 , - 138 , - 253 , - 520 , - 939 , - 294 , - 1017 , - 676 , - 487 , - 450 , - 565 , - 832 , - 35 , - 606 , - 113 , - 988 , - 799 , - 762 , - 877 , - 1144 , - 347 , - 918 , - 425 , - 84 , - 1111 , - 1074 , - 1189 , - 240 , - 659 , - 14 , - 737 , - 396 , - 207 , - 170 , - 285 , - 552 , - 971 , - 326 , - 1049 , - 708 , - 519 , - 482 , - 597 , - 864 , - 67 , - 638 , - 145 , - 1020 , - 831 , - 794 , - 909 , - 1176 , - 379 , - 950 , - 457 , - 116 , - 1143 , - 1106 , - 5 , - 272 , - 691 , - 46 , - 769 , - 428 , - 239 , - 202 , - 317 , - 584 , - 1003 , - 358 , - 1081 , - 740 , - 551 , - 514 , - 629 , - 896 , - 99 , - 670 , - 177 , - 1052 , - 863 , - 826 , - 941 , - 1208 , - 411 , - 982 , - 489 , - 148 , - 1175 , - 1138 , - 37 , - 304 , - 723 , - 78 , - 801 , - 460 , - 271 , - 234 , - 349 , - 616 , - 1035 , - 390 , - 1113 , - 772 , - 583 , - 546 , - 661 , - 928 , - 131 , - 702 , - 209 , - 1084 , - 895 , - 858 , - 973 , - 24 , - 443 , - 1014 , - 521 , - 180 , - 1207 , - 1170 , - 69 , - 336 , - 755 , - 110 , - 833 , - 492 , - 303 , - 266 , - 381 , - 648 , - 1067 , - 422 , - 1145 , - 804 , - 615 , - 578 , - 693 , - 960 , - 163 , - 734 , - 241 , - 1116 , - 927 , - 890 , - 1005 , - 56 , - 475 , - 1046 , - 553 , - 212 , - 23 , - 1202 , - 101 , - 368 , - 787 , - 142 , - 865 , - 524 , - 335 , - 298 , - 413 , - 680 , - 1099 , - 454 , - 1177 , - 836 , - 647 , - 610 , - 725 , - 992 , - 195 , - 766 , - 273 , - 1148 , - 959 , - 922 , - 1037 , - 88 , - 507 , - 1078 , - 585 , - 244 , - 55 , - 18 , - 133 , - 400 , - 819 , - 174 , - 897 , - 556 , - 367 , - 330 , - 445 , - 712 , - 1131 , - 486 , - 1209 , - 868 , - 679 , - 642 , - 757 , - 1024 , - 227 , - 798 , - 305 , - 1180 , - 991 , - 954 , - 1069 , - 120 , - 539 , - 1110 , - 617 , - 276 , - 87 , - 50 , - 165 , - 432 , - 851 , - 206 , - 929 , - 588 , - 399 , - 362 , - 477 , - 744 , - 1163 , - 518 , - 25 , - 900 , - 711 , - 674 , - 789 , - 1056 , - 259 , - 830 , - 337 , - 1212 , - 1023 , - 986 , - 1101 , - 152 , - 571 , - 1142 , - 649 , - 308 , - 119 , - 82 , - 197 , - 464 , - 883 , - 238 , - 961 , - 620 , - 431 , - 394 , - 509 , - 776 , - 1195 , - 550 , - 57 , - 932 , - 743 , - 706 , - 821 , - 1088 , - 291 , - 862 , - 369 , - 28 , - 1055 , - 1018 , - 1133 , - 184 , - 603 , - 1174 , - 681 , - 340 , - 151 , - 114 , - 229 , - 496 , - 915 , - 270 , - 993 , - 652 , - 463 , - 426 , - 541 , - 808 , - 11 , - 582 , - 89 , - 964 , - 775 , - 738 , - 853 , - 1120 , - 323 , - 894 , - 401 , - 60 , - 1087 , - 1050 , - 1165 , - 216 , - 635 , - 1206 , - 713 , - 372 , - 183 , - 146 , - 261 , - 528 , - 947 , - 302 , - 1025 , - 684 , - 495 , - 458 , - 573 , - 840 , - 43 , - 614 , - 121 , - 996 , - 807 , - 770 , - 885 , - 1152 , - 355 , - 926 , - 433 , - 92 , - 1119 , - 1082 , - 1197 , - 248 , - 667 , - 22 , - 745 , - 404 , - 215 , - 178 , - 293 , - 560 , - 979 , - 334 , - 1057 , - 716 , - 527 , - 490 , - 605 , - 872 , - 75 , - 646 , - 153 , - 1028 , - 839 , - 802 , - 917 , - 1184 , - 387 , - 958 , - 465 , - 124 , - 1151 , - 1114 , - 13 , - 280 , - 699 , - 54 , - 777 , - 436 , - 247 , - 210 , - 325 , - 592 , - 1011 , - 366 , - 1089 , - 748 , - 559 , - 522 , - 637 , - 904 , - 107 , - 678 , - 185 , - 1060 , - 871 , - 834 , - 949 , - 0 , - 193 , - 1166 , - 1047 , - 460 , - 29 , - 378 , - 883 , - 920 , - 1113 , - 838 , - 719 , - 132 , - 949 , - 50 , - 555 , - 592 , - 785 , - 510 , - 391 , - 1052 , - 621 , - 970 , - 227 , - 264 , - 457 , - 182 , - 63 , - 724 , - 293 , - 642 , - 1147 , - 1184 , - 129 , - 1102 , - 983 , - 396 , - 1213 , - 314 , - 819 , - 856 , - 1049 , - 774 , - 655 , - 68 , - 885 , - 1234 , - 491 , - 528 , - 721 , - 446 , - 327 , - 988 , - 557 , - 906 , - 163 , - 200 , - 393 , - 118 , - 1247 , - 660 , - 229 , - 578 , - 1083 , - 1120 , - 65 , - 1038 , - 919 , - 332 , - 1149 , - 250 , - 755 , - 792 , - 985 , - 710 , - 591 , - 4 , - 821 , - 1170 , - 427 , - 464 , - 657 , - 382 , - 263 , - 924 , - 493 , - 842 , - 99 , - 136 , - 329 , - 54 , - 1183 , - 596 , - 165 , - 514 , - 1019 , - 1056 , - 1 , - 974 , - 855 , - 268 , - 1085 , - 186 , - 691 , - 728 , - 921 , - 646 , - 527 , - 1188 , - 757 , - 1106 , - 363 , - 400 , - 593 , - 318 , - 199 , - 860 , - 429 , - 778 , - 35 , - 72 , - 265 , - 1238 , - 1119 , - 532 , - 101 , - 450 , - 955 , - 992 , - 1185 , - 910 , - 791 , - 204 , - 1021 , - 122 , - 627 , - 664 , - 857 , - 582 , - 463 , - 1124 , - 693 , - 1042 , - 299 , - 336 , - 529 , - 254 , - 135 , - 796 , - 365 , - 714 , - 1219 , - 8 , - 201 , - 1174 , - 1055 , - 468 , - 37 , - 386 , - 891 , - 928 , - 1121 , - 846 , - 727 , - 140 , - 957 , - 58 , - 563 , - 600 , - 793 , - 518 , - 399 , - 1060 , - 629 , - 978 , - 235 , - 272 , - 465 , - 190 , - 71 , - 732 , - 301 , - 650 , - 1155 , - 1192 , - 137 , - 1110 , - 991 , - 404 , - 1221 , - 322 , - 827 , - 864 , - 1057 , - 782 , - 663 , - 76 , - 893 , - 1242 , - 499 , - 536 , - 729 , - 454 , - 335 , - 996 , - 565 , - 914 , - 171 , - 208 , - 401 , - 126 , - 7 , - 668 , - 237 , - 586 , - 1091 , - 1128 , - 73 , - 1046 , - 927 , - 340 , - 1157 , - 258 , - 763 , - 800 , - 993 , - 718 , - 599 , - 12 , - 829 , - 1178 , - 435 , - 472 , - 665 , - 390 , - 271 , - 932 , - 501 , - 850 , - 107 , - 144 , - 337 , - 62 , - 1191 , - 604 , - 173 , - 522 , - 1027 , - 1064 , - 9 , - 982 , - 863 , - 276 , - 1093 , - 194 , - 699 , - 736 , - 929 , - 654 , - 535 , - 1196 , - 765 , - 1114 , - 371 , - 408 , - 601 , - 326 , - 207 , - 868 , - 437 , - 786 , - 43 , - 80 , - 273 , - 1246 , - 1127 , - 540 , - 109 , - 458 , - 963 , - 1000 , - 1193 , - 918 , - 799 , - 212 , - 1029 , - 130 , - 635 , - 672 , - 865 , - 590 , - 471 , - 1132 , - 701 , - 1050 , - 307 , - 344 , - 537 , - 262 , - 143 , - 804 , - 373 , - 722 , - 1227 , - 16 , - 209 , - 1182 , - 1063 , - 476 , - 45 , - 394 , - 899 , - 936 , - 1129 , - 854 , - 735 , - 148 , - 965 , - 66 , - 571 , - 608 , - 801 , - 526 , - 407 , - 1068 , - 637 , - 986 , - 243 , - 280 , - 473 , - 198 , - 79 , - 740 , - 309 , - 658 , - 1163 , - 1200 , - 145 , - 1118 , - 999 , - 412 , - 1229 , - 330 , - 835 , - 872 , - 1065 , - 790 , - 671 , - 84 , - 901 , - 2 , - 507 , - 544 , - 737 , - 462 , - 343 , - 1004 , - 573 , - 922 , - 179 , - 216 , - 409 , - 134 , - 15 , - 676 , - 245 , - 594 , - 1099 , - 1136 , - 81 , - 1054 , - 935 , - 348 , - 1165 , - 266 , - 771 , - 808 , - 1001 , - 726 , - 607 , - 20 , - 837 , - 1186 , - 443 , - 480 , - 673 , - 398 , - 279 , - 940 , - 509 , - 858 , - 115 , - 152 , - 345 , - 70 , - 1199 , - 612 , - 181 , - 530 , - 1035 , - 1072 , - 17 , - 990 , - 871 , - 284 , - 1101 , - 202 , - 707 , - 744 , - 937 , - 662 , - 543 , - 1204 , - 773 , - 1122 , - 379 , - 416 , - 609 , - 334 , - 215 , - 876 , - 445 , - 794 , - 51 , - 88 , - 281 , - 6 , - 1135 , - 548 , - 117 , - 466 , - 971 , - 1008 , - 1201 , - 926 , - 807 , - 220 , - 1037 , - 138 , - 643 , - 680 , - 873 , - 598 , - 479 , - 1140 , - 709 , - 1058 , - 315 , - 352 , - 545 , - 270 , - 151 , - 812 , - 381 , - 730 , - 1235 , - 24 , - 217 , - 1190 , - 1071 , - 484 , - 53 , - 402 , - 907 , - 944 , - 1137 , - 862 , - 743 , - 156 , - 973 , - 74 , - 579 , - 616 , - 809 , - 534 , - 415 , - 1076 , - 645 , - 994 , - 251 , - 288 , - 481 , - 206 , - 87 , - 748 , - 317 , - 666 , - 1171 , - 1208 , - 153 , - 1126 , - 1007 , - 420 , - 1237 , - 338 , - 843 , - 880 , - 1073 , - 798 , - 679 , - 92 , - 909 , - 10 , - 515 , - 552 , - 745 , - 470 , - 351 , - 1012 , - 581 , - 930 , - 187 , - 224 , - 417 , - 142 , - 23 , - 684 , - 253 , - 602 , - 1107 , - 1144 , - 89 , - 1062 , - 943 , - 356 , - 1173 , - 274 , - 779 , - 816 , - 1009 , - 734 , - 615 , - 28 , - 845 , - 1194 , - 451 , - 488 , - 681 , - 406 , - 287 , - 948 , - 517 , - 866 , - 123 , - 160 , - 353 , - 78 , - 1207 , - 620 , - 189 , - 538 , - 1043 , - 1080 , - 25 , - 998 , - 879 , - 292 , - 1109 , - 210 , - 715 , - 752 , - 945 , - 670 , - 551 , - 1212 , - 781 , - 1130 , - 387 , - 424 , - 617 , - 342 , - 223 , - 884 , - 453 , - 802 , - 59 , - 96 , - 289 , - 14 , - 1143 , - 556 , - 125 , - 474 , - 979 , - 1016 , - 1209 , - 934 , - 815 , - 228 , - 1045 , - 146 , - 651 , - 688 , - 881 , - 606 , - 487 , - 1148 , - 717 , - 1066 , - 323 , - 360 , - 553 , - 278 , - 159 , - 820 , - 389 , - 738 , - 1243 , - 32 , - 225 , - 1198 , - 1079 , - 492 , - 61 , - 410 , - 915 , - 952 , - 1145 , - 870 , - 751 , - 164 , - 981 , - 82 , - 587 , - 624 , - 817 , - 542 , - 423 , - 1084 , - 653 , - 1002 , - 259 , - 296 , - 489 , - 214 , - 95 , - 756 , - 325 , - 674 , - 1179 , - 1216 , - 161 , - 1134 , - 1015 , - 428 , - 1245 , - 346 , - 851 , - 888 , - 1081 , - 806 , - 687 , - 100 , - 917 , - 18 , - 523 , - 560 , - 753 , - 478 , - 359 , - 1020 , - 589 , - 938 , - 195 , - 232 , - 425 , - 150 , - 31 , - 692 , - 261 , - 610 , - 1115 , - 1152 , - 97 , - 1070 , - 951 , - 364 , - 1181 , - 282 , - 787 , - 824 , - 1017 , - 742 , - 623 , - 36 , - 853 , - 1202 , - 459 , - 496 , - 689 , - 414 , - 295 , - 956 , - 525 , - 874 , - 131 , - 168 , - 361 , - 86 , - 1215 , - 628 , - 197 , - 546 , - 1051 , - 1088 , - 33 , - 1006 , - 887 , - 300 , - 1117 , - 218 , - 723 , - 760 , - 953 , - 678 , - 559 , - 1220 , - 789 , - 1138 , - 395 , - 432 , - 625 , - 350 , - 231 , - 892 , - 461 , - 810 , - 67 , - 104 , - 297 , - 22 , - 1151 , - 564 , - 133 , - 482 , - 987 , - 1024 , - 1217 , - 942 , - 823 , - 236 , - 1053 , - 154 , - 659 , - 696 , - 889 , - 614 , - 495 , - 1156 , - 725 , - 1074 , - 331 , - 368 , - 561 , - 286 , - 167 , - 828 , - 397 , - 746 , - 3 , - 40 , - 233 , - 1206 , - 1087 , - 500 , - 69 , - 418 , - 923 , - 960 , - 1153 , - 878 , - 759 , - 172 , - 989 , - 90 , - 595 , - 632 , - 825 , - 550 , - 431 , - 1092 , - 661 , - 1010 , - 267 , - 304 , - 497 , - 222 , - 103 , - 764 , - 333 , - 682 , - 1187 , - 1224 , - 169 , - 1142 , - 1023 , - 436 , - 5 , - 354 , - 859 , - 896 , - 1089 , - 814 , - 695 , - 108 , - 925 , - 26 , - 531 , - 568 , - 761 , - 486 , - 367 , - 1028 , - 597 , - 946 , - 203 , - 240 , - 433 , - 158 , - 39 , - 700 , - 269 , - 618 , - 1123 , - 1160 , - 105 , - 1078 , - 959 , - 372 , - 1189 , - 290 , - 795 , - 832 , - 1025 , - 750 , - 631 , - 44 , - 861 , - 1210 , - 467 , - 504 , - 697 , - 422 , - 303 , - 964 , - 533 , - 882 , - 139 , - 176 , - 369 , - 94 , - 1223 , - 636 , - 205 , - 554 , - 1059 , - 1096 , - 41 , - 1014 , - 895 , - 308 , - 1125 , - 226 , - 731 , - 768 , - 961 , - 686 , - 567 , - 1228 , - 797 , - 1146 , - 403 , - 440 , - 633 , - 358 , - 239 , - 900 , - 469 , - 818 , - 75 , - 112 , - 305 , - 30 , - 1159 , - 572 , - 141 , - 490 , - 995 , - 1032 , - 1225 , - 950 , - 831 , - 244 , - 1061 , - 162 , - 667 , - 704 , - 897 , - 622 , - 503 , - 1164 , - 733 , - 1082 , - 339 , - 376 , - 569 , - 294 , - 175 , - 836 , - 405 , - 754 , - 11 , - 48 , - 241 , - 1214 , - 1095 , - 508 , - 77 , - 426 , - 931 , - 968 , - 1161 , - 886 , - 767 , - 180 , - 997 , - 98 , - 603 , - 640 , - 833 , - 558 , - 439 , - 1100 , - 669 , - 1018 , - 275 , - 312 , - 505 , - 230 , - 111 , - 772 , - 341 , - 690 , - 1195 , - 1232 , - 177 , - 1150 , - 1031 , - 444 , - 13 , - 362 , - 867 , - 904 , - 1097 , - 822 , - 703 , - 116 , - 933 , - 34 , - 539 , - 576 , - 769 , - 494 , - 375 , - 1036 , - 605 , - 954 , - 211 , - 248 , - 441 , - 166 , - 47 , - 708 , - 277 , - 626 , - 1131 , - 1168 , - 113 , - 1086 , - 967 , - 380 , - 1197 , - 298 , - 803 , - 840 , - 1033 , - 758 , - 639 , - 52 , - 869 , - 1218 , - 475 , - 512 , - 705 , - 430 , - 311 , - 972 , - 541 , - 890 , - 147 , - 184 , - 377 , - 102 , - 1231 , - 644 , - 213 , - 562 , - 1067 , - 1104 , - 49 , - 1022 , - 903 , - 316 , - 1133 , - 234 , - 739 , - 776 , - 969 , - 694 , - 575 , - 1236 , - 805 , - 1154 , - 411 , - 448 , - 641 , - 366 , - 247 , - 908 , - 477 , - 826 , - 83 , - 120 , - 313 , - 38 , - 1167 , - 580 , - 149 , - 498 , - 1003 , - 1040 , - 1233 , - 958 , - 839 , - 252 , - 1069 , - 170 , - 675 , - 712 , - 905 , - 630 , - 511 , - 1172 , - 741 , - 1090 , - 347 , - 384 , - 577 , - 302 , - 183 , - 844 , - 413 , - 762 , - 19 , - 56 , - 249 , - 1222 , - 1103 , - 516 , - 85 , - 434 , - 939 , - 976 , - 1169 , - 894 , - 775 , - 188 , - 1005 , - 106 , - 611 , - 648 , - 841 , - 566 , - 447 , - 1108 , - 677 , - 1026 , - 283 , - 320 , - 513 , - 238 , - 119 , - 780 , - 349 , - 698 , - 1203 , - 1240 , - 185 , - 1158 , - 1039 , - 452 , - 21 , - 370 , - 875 , - 912 , - 1105 , - 830 , - 711 , - 124 , - 941 , - 42 , - 547 , - 584 , - 777 , - 502 , - 383 , - 1044 , - 613 , - 962 , - 219 , - 256 , - 449 , - 174 , - 55 , - 716 , - 285 , - 634 , - 1139 , - 1176 , - 121 , - 1094 , - 975 , - 388 , - 1205 , - 306 , - 811 , - 848 , - 1041 , - 766 , - 647 , - 60 , - 877 , - 1226 , - 483 , - 520 , - 713 , - 438 , - 319 , - 980 , - 549 , - 898 , - 155 , - 192 , - 385 , - 110 , - 1239 , - 652 , - 221 , - 570 , - 1075 , - 1112 , - 57 , - 1030 , - 911 , - 324 , - 1141 , - 242 , - 747 , - 784 , - 977 , - 702 , - 583 , - 1244 , - 813 , - 1162 , - 419 , - 456 , - 649 , - 374 , - 255 , - 916 , - 485 , - 834 , - 91 , - 128 , - 321 , - 46 , - 1175 , - 588 , - 157 , - 506 , - 1011 , - 1048 , - 1241 , - 966 , - 847 , - 260 , - 1077 , - 178 , - 683 , - 720 , - 913 , - 638 , - 519 , - 1180 , - 749 , - 1098 , - 355 , - 392 , - 585 , - 310 , - 191 , - 852 , - 421 , - 770 , - 27 , - 64 , - 257 , - 1230 , - 1111 , - 524 , - 93 , - 442 , - 947 , - 984 , - 1177 , - 902 , - 783 , - 196 , - 1013 , - 114 , - 619 , - 656 , - 849 , - 574 , - 455 , - 1116 , - 685 , - 1034 , - 291 , - 328 , - 521 , - 246 , - 127 , - 788 , - 357 , - 706 , - 1211 , - 0 , - 359 , - 1198 , - 1237 , - 476 , - 195 , - 394 , - 1073 , - 952 , - 31 , - 870 , - 909 , - 148 , - 1147 , - 66 , - 745 , - 624 , - 983 , - 542 , - 581 , - 1100 , - 819 , - 1018 , - 417 , - 296 , - 655 , - 214 , - 253 , - 772 , - 491 , - 690 , - 89 , - 1248 , - 327 , - 1166 , - 1205 , - 444 , - 163 , - 362 , - 1041 , - 920 , - 1279 , - 838 , - 877 , - 116 , - 1115 , - 34 , - 713 , - 592 , - 951 , - 510 , - 549 , - 1068 , - 787 , - 986 , - 385 , - 264 , - 623 , - 182 , - 221 , - 740 , - 459 , - 658 , - 57 , - 1216 , - 295 , - 1134 , - 1173 , - 412 , - 131 , - 330 , - 1009 , - 888 , - 1247 , - 806 , - 845 , - 84 , - 1083 , - 2 , - 681 , - 560 , - 919 , - 478 , - 517 , - 1036 , - 755 , - 954 , - 353 , - 232 , - 591 , - 150 , - 189 , - 708 , - 427 , - 626 , - 25 , - 1184 , - 263 , - 1102 , - 1141 , - 380 , - 99 , - 298 , - 977 , - 856 , - 1215 , - 774 , - 813 , - 52 , - 1051 , - 1250 , - 649 , - 528 , - 887 , - 446 , - 485 , - 1004 , - 723 , - 922 , - 321 , - 200 , - 559 , - 118 , - 157 , - 676 , - 395 , - 594 , - 1273 , - 1152 , - 231 , - 1070 , - 1109 , - 348 , - 67 , - 266 , - 945 , - 824 , - 1183 , - 742 , - 781 , - 20 , - 1019 , - 1218 , - 617 , - 496 , - 855 , - 414 , - 453 , - 972 , - 691 , - 890 , - 289 , - 168 , - 527 , - 86 , - 125 , - 644 , - 363 , - 562 , - 1241 , - 1120 , - 199 , - 1038 , - 1077 , - 316 , - 35 , - 234 , - 913 , - 792 , - 1151 , - 710 , - 749 , - 1268 , - 987 , - 1186 , - 585 , - 464 , - 823 , - 382 , - 421 , - 940 , - 659 , - 858 , - 257 , - 136 , - 495 , - 54 , - 93 , - 612 , - 331 , - 530 , - 1209 , - 1088 , - 167 , - 1006 , - 1045 , - 284 , - 3 , - 202 , - 881 , - 760 , - 1119 , - 678 , - 717 , - 1236 , - 955 , - 1154 , - 553 , - 432 , - 791 , - 350 , - 389 , - 908 , - 627 , - 826 , - 225 , - 104 , - 463 , - 22 , - 61 , - 580 , - 299 , - 498 , - 1177 , - 1056 , - 135 , - 974 , - 1013 , - 252 , - 1251 , - 170 , - 849 , - 728 , - 1087 , - 646 , - 685 , - 1204 , - 923 , - 1122 , - 521 , - 400 , - 759 , - 318 , - 357 , - 876 , - 595 , - 794 , - 193 , - 72 , - 431 , - 1270 , - 29 , - 548 , - 267 , - 466 , - 1145 , - 1024 , - 103 , - 942 , - 981 , - 220 , - 1219 , - 138 , - 817 , - 696 , - 1055 , - 614 , - 653 , - 1172 , - 891 , - 1090 , - 489 , - 368 , - 727 , - 286 , - 325 , - 844 , - 563 , - 762 , - 161 , - 40 , - 399 , - 1238 , - 1277 , - 516 , - 235 , - 434 , - 1113 , - 992 , - 71 , - 910 , - 949 , - 188 , - 1187 , - 106 , - 785 , - 664 , - 1023 , - 582 , - 621 , - 1140 , - 859 , - 1058 , - 457 , - 336 , - 695 , - 254 , - 293 , - 812 , - 531 , - 730 , - 129 , - 8 , - 367 , - 1206 , - 1245 , - 484 , - 203 , - 402 , - 1081 , - 960 , - 39 , - 878 , - 917 , - 156 , - 1155 , - 74 , - 753 , - 632 , - 991 , - 550 , - 589 , - 1108 , - 827 , - 1026 , - 425 , - 304 , - 663 , - 222 , - 261 , - 780 , - 499 , - 698 , - 97 , - 1256 , - 335 , - 1174 , - 1213 , - 452 , - 171 , - 370 , - 1049 , - 928 , - 7 , - 846 , - 885 , - 124 , - 1123 , - 42 , - 721 , - 600 , - 959 , - 518 , - 557 , - 1076 , - 795 , - 994 , - 393 , - 272 , - 631 , - 190 , - 229 , - 748 , - 467 , - 666 , - 65 , - 1224 , - 303 , - 1142 , - 1181 , - 420 , - 139 , - 338 , - 1017 , - 896 , - 1255 , - 814 , - 853 , - 92 , - 1091 , - 10 , - 689 , - 568 , - 927 , - 486 , - 525 , - 1044 , - 763 , - 962 , - 361 , - 240 , - 599 , - 158 , - 197 , - 716 , - 435 , - 634 , - 33 , - 1192 , - 271 , - 1110 , - 1149 , - 388 , - 107 , - 306 , - 985 , - 864 , - 1223 , - 782 , - 821 , - 60 , - 1059 , - 1258 , - 657 , - 536 , - 895 , - 454 , - 493 , - 1012 , - 731 , - 930 , - 329 , - 208 , - 567 , - 126 , - 165 , - 684 , - 403 , - 602 , - 1 , - 1160 , - 239 , - 1078 , - 1117 , - 356 , - 75 , - 274 , - 953 , - 832 , - 1191 , - 750 , - 789 , - 28 , - 1027 , - 1226 , - 625 , - 504 , - 863 , - 422 , - 461 , - 980 , - 699 , - 898 , - 297 , - 176 , - 535 , - 94 , - 133 , - 652 , - 371 , - 570 , - 1249 , - 1128 , - 207 , - 1046 , - 1085 , - 324 , - 43 , - 242 , - 921 , - 800 , - 1159 , - 718 , - 757 , - 1276 , - 995 , - 1194 , - 593 , - 472 , - 831 , - 390 , - 429 , - 948 , - 667 , - 866 , - 265 , - 144 , - 503 , - 62 , - 101 , - 620 , - 339 , - 538 , - 1217 , - 1096 , - 175 , - 1014 , - 1053 , - 292 , - 11 , - 210 , - 889 , - 768 , - 1127 , - 686 , - 725 , - 1244 , - 963 , - 1162 , - 561 , - 440 , - 799 , - 358 , - 397 , - 916 , - 635 , - 834 , - 233 , - 112 , - 471 , - 30 , - 69 , - 588 , - 307 , - 506 , - 1185 , - 1064 , - 143 , - 982 , - 1021 , - 260 , - 1259 , - 178 , - 857 , - 736 , - 1095 , - 654 , - 693 , - 1212 , - 931 , - 1130 , - 529 , - 408 , - 767 , - 326 , - 365 , - 884 , - 603 , - 802 , - 201 , - 80 , - 439 , - 1278 , - 37 , - 556 , - 275 , - 474 , - 1153 , - 1032 , - 111 , - 950 , - 989 , - 228 , - 1227 , - 146 , - 825 , - 704 , - 1063 , - 622 , - 661 , - 1180 , - 899 , - 1098 , - 497 , - 376 , - 735 , - 294 , - 333 , - 852 , - 571 , - 770 , - 169 , - 48 , - 407 , - 1246 , - 5 , - 524 , - 243 , - 442 , - 1121 , - 1000 , - 79 , - 918 , - 957 , - 196 , - 1195 , - 114 , - 793 , - 672 , - 1031 , - 590 , - 629 , - 1148 , - 867 , - 1066 , - 465 , - 344 , - 703 , - 262 , - 301 , - 820 , - 539 , - 738 , - 137 , - 16 , - 375 , - 1214 , - 1253 , - 492 , - 211 , - 410 , - 1089 , - 968 , - 47 , - 886 , - 925 , - 164 , - 1163 , - 82 , - 761 , - 640 , - 999 , - 558 , - 597 , - 1116 , - 835 , - 1034 , - 433 , - 312 , - 671 , - 230 , - 269 , - 788 , - 507 , - 706 , - 105 , - 1264 , - 343 , - 1182 , - 1221 , - 460 , - 179 , - 378 , - 1057 , - 936 , - 15 , - 854 , - 893 , - 132 , - 1131 , - 50 , - 729 , - 608 , - 967 , - 526 , - 565 , - 1084 , - 803 , - 1002 , - 401 , - 280 , - 639 , - 198 , - 237 , - 756 , - 475 , - 674 , - 73 , - 1232 , - 311 , - 1150 , - 1189 , - 428 , - 147 , - 346 , - 1025 , - 904 , - 1263 , - 822 , - 861 , - 100 , - 1099 , - 18 , - 697 , - 576 , - 935 , - 494 , - 533 , - 1052 , - 771 , - 970 , - 369 , - 248 , - 607 , - 166 , - 205 , - 724 , - 443 , - 642 , - 41 , - 1200 , - 279 , - 1118 , - 1157 , - 396 , - 115 , - 314 , - 993 , - 872 , - 1231 , - 790 , - 829 , - 68 , - 1067 , - 1266 , - 665 , - 544 , - 903 , - 462 , - 501 , - 1020 , - 739 , - 938 , - 337 , - 216 , - 575 , - 134 , - 173 , - 692 , - 411 , - 610 , - 9 , - 1168 , - 247 , - 1086 , - 1125 , - 364 , - 83 , - 282 , - 961 , - 840 , - 1199 , - 758 , - 797 , - 36 , - 1035 , - 1234 , - 633 , - 512 , - 871 , - 430 , - 469 , - 988 , - 707 , - 906 , - 305 , - 184 , - 543 , - 102 , - 141 , - 660 , - 379 , - 578 , - 1257 , - 1136 , - 215 , - 1054 , - 1093 , - 332 , - 51 , - 250 , - 929 , - 808 , - 1167 , - 726 , - 765 , - 4 , - 1003 , - 1202 , - 601 , - 480 , - 839 , - 398 , - 437 , - 956 , - 675 , - 874 , - 273 , - 152 , - 511 , - 70 , - 109 , - 628 , - 347 , - 546 , - 1225 , - 1104 , - 183 , - 1022 , - 1061 , - 300 , - 19 , - 218 , - 897 , - 776 , - 1135 , - 694 , - 733 , - 1252 , - 971 , - 1170 , - 569 , - 448 , - 807 , - 366 , - 405 , - 924 , - 643 , - 842 , - 241 , - 120 , - 479 , - 38 , - 77 , - 596 , - 315 , - 514 , - 1193 , - 1072 , - 151 , - 990 , - 1029 , - 268 , - 1267 , - 186 , - 865 , - 744 , - 1103 , - 662 , - 701 , - 1220 , - 939 , - 1138 , - 537 , - 416 , - 775 , - 334 , - 373 , - 892 , - 611 , - 810 , - 209 , - 88 , - 447 , - 6 , - 45 , - 564 , - 283 , - 482 , - 1161 , - 1040 , - 119 , - 958 , - 997 , - 236 , - 1235 , - 154 , - 833 , - 712 , - 1071 , - 630 , - 669 , - 1188 , - 907 , - 1106 , - 505 , - 384 , - 743 , - 302 , - 341 , - 860 , - 579 , - 778 , - 177 , - 56 , - 415 , - 1254 , - 13 , - 532 , - 251 , - 450 , - 1129 , - 1008 , - 87 , - 926 , - 965 , - 204 , - 1203 , - 122 , - 801 , - 680 , - 1039 , - 598 , - 637 , - 1156 , - 875 , - 1074 , - 473 , - 352 , - 711 , - 270 , - 309 , - 828 , - 547 , - 746 , - 145 , - 24 , - 383 , - 1222 , - 1261 , - 500 , - 219 , - 418 , - 1097 , - 976 , - 55 , - 894 , - 933 , - 172 , - 1171 , - 90 , - 769 , - 648 , - 1007 , - 566 , - 605 , - 1124 , - 843 , - 1042 , - 441 , - 320 , - 679 , - 238 , - 277 , - 796 , - 515 , - 714 , - 113 , - 1272 , - 351 , - 1190 , - 1229 , - 468 , - 187 , - 386 , - 1065 , - 944 , - 23 , - 862 , - 901 , - 140 , - 1139 , - 58 , - 737 , - 616 , - 975 , - 534 , - 573 , - 1092 , - 811 , - 1010 , - 409 , - 288 , - 647 , - 206 , - 245 , - 764 , - 483 , - 682 , - 81 , - 1240 , - 319 , - 1158 , - 1197 , - 436 , - 155 , - 354 , - 1033 , - 912 , - 1271 , - 830 , - 869 , - 108 , - 1107 , - 26 , - 705 , - 584 , - 943 , - 502 , - 541 , - 1060 , - 779 , - 978 , - 377 , - 256 , - 615 , - 174 , - 213 , - 732 , - 451 , - 650 , - 49 , - 1208 , - 287 , - 1126 , - 1165 , - 404 , - 123 , - 322 , - 1001 , - 880 , - 1239 , - 798 , - 837 , - 76 , - 1075 , - 1274 , - 673 , - 552 , - 911 , - 470 , - 509 , - 1028 , - 747 , - 946 , - 345 , - 224 , - 583 , - 142 , - 181 , - 700 , - 419 , - 618 , - 17 , - 1176 , - 255 , - 1094 , - 1133 , - 372 , - 91 , - 290 , - 969 , - 848 , - 1207 , - 766 , - 805 , - 44 , - 1043 , - 1242 , - 641 , - 520 , - 879 , - 438 , - 477 , - 996 , - 715 , - 914 , - 313 , - 192 , - 551 , - 110 , - 149 , - 668 , - 387 , - 586 , - 1265 , - 1144 , - 223 , - 1062 , - 1101 , - 340 , - 59 , - 258 , - 937 , - 816 , - 1175 , - 734 , - 773 , - 12 , - 1011 , - 1210 , - 609 , - 488 , - 847 , - 406 , - 445 , - 964 , - 683 , - 882 , - 281 , - 160 , - 519 , - 78 , - 117 , - 636 , - 355 , - 554 , - 1233 , - 1112 , - 191 , - 1030 , - 1069 , - 308 , - 27 , - 226 , - 905 , - 784 , - 1143 , - 702 , - 741 , - 1260 , - 979 , - 1178 , - 577 , - 456 , - 815 , - 374 , - 413 , - 932 , - 651 , - 850 , - 249 , - 128 , - 487 , - 46 , - 85 , - 604 , - 323 , - 522 , - 1201 , - 1080 , - 159 , - 998 , - 1037 , - 276 , - 1275 , - 194 , - 873 , - 752 , - 1111 , - 670 , - 709 , - 1228 , - 947 , - 1146 , - 545 , - 424 , - 783 , - 342 , - 381 , - 900 , - 619 , - 818 , - 217 , - 96 , - 455 , - 14 , - 53 , - 572 , - 291 , - 490 , - 1169 , - 1048 , - 127 , - 966 , - 1005 , - 244 , - 1243 , - 162 , - 841 , - 720 , - 1079 , - 638 , - 677 , - 1196 , - 915 , - 1114 , - 513 , - 392 , - 751 , - 310 , - 349 , - 868 , - 587 , - 786 , - 185 , - 64 , - 423 , - 1262 , - 21 , - 540 , - 259 , - 458 , - 1137 , - 1016 , - 95 , - 934 , - 973 , - 212 , - 1211 , - 130 , - 809 , - 688 , - 1047 , - 606 , - 645 , - 1164 , - 883 , - 1082 , - 481 , - 360 , - 719 , - 278 , - 317 , - 836 , - 555 , - 754 , - 153 , - 32 , - 391 , - 1230 , - 1269 , - 508 , - 227 , - 426 , - 1105 , - 984 , - 63 , - 902 , - 941 , - 180 , - 1179 , - 98 , - 777 , - 656 , - 1015 , - 574 , - 613 , - 1132 , - 851 , - 1050 , - 449 , - 328 , - 687 , - 246 , - 285 , - 804 , - 523 , - 722 , - 121 , - 0 , - 1027 , - 1234 , - 1277 , - 500 , - 871 , - 422 , - 1121 , - 1000 , - 715 , - 922 , - 965 , - 188 , - 559 , - 110 , - 809 , - 688 , - 403 , - 610 , - 653 , - 1188 , - 247 , - 1110 , - 497 , - 376 , - 91 , - 298 , - 341 , - 876 , - 1247 , - 798 , - 185 , - 64 , - 1091 , - 1298 , - 29 , - 564 , - 935 , - 486 , - 1185 , - 1064 , - 779 , - 986 , - 1029 , - 252 , - 623 , - 174 , - 873 , - 752 , - 467 , - 674 , - 717 , - 1252 , - 311 , - 1174 , - 561 , - 440 , - 155 , - 362 , - 405 , - 940 , - 1311 , - 862 , - 249 , - 128 , - 1155 , - 50 , - 93 , - 628 , - 999 , - 550 , - 1249 , - 1128 , - 843 , - 1050 , - 1093 , - 316 , - 687 , - 238 , - 937 , - 816 , - 531 , - 738 , - 781 , - 4 , - 375 , - 1238 , - 625 , - 504 , - 219 , - 426 , - 469 , - 1004 , - 63 , - 926 , - 313 , - 192 , - 1219 , - 114 , - 157 , - 692 , - 1063 , - 614 , - 1 , - 1192 , - 907 , - 1114 , - 1157 , - 380 , - 751 , - 302 , - 1001 , - 880 , - 595 , - 802 , - 845 , - 68 , - 439 , - 1302 , - 689 , - 568 , - 283 , - 490 , - 533 , - 1068 , - 127 , - 990 , - 377 , - 256 , - 1283 , - 178 , - 221 , - 756 , - 1127 , - 678 , - 65 , - 1256 , - 971 , - 1178 , - 1221 , - 444 , - 815 , - 366 , - 1065 , - 944 , - 659 , - 866 , - 909 , - 132 , - 503 , - 54 , - 753 , - 632 , - 347 , - 554 , - 597 , - 1132 , - 191 , - 1054 , - 441 , - 320 , - 35 , - 242 , - 285 , - 820 , - 1191 , - 742 , - 129 , - 8 , - 1035 , - 1242 , - 1285 , - 508 , - 879 , - 430 , - 1129 , - 1008 , - 723 , - 930 , - 973 , - 196 , - 567 , - 118 , - 817 , - 696 , - 411 , - 618 , - 661 , - 1196 , - 255 , - 1118 , - 505 , - 384 , - 99 , - 306 , - 349 , - 884 , - 1255 , - 806 , - 193 , - 72 , - 1099 , - 1306 , - 37 , - 572 , - 943 , - 494 , - 1193 , - 1072 , - 787 , - 994 , - 1037 , - 260 , - 631 , - 182 , - 881 , - 760 , - 475 , - 682 , - 725 , - 1260 , - 319 , - 1182 , - 569 , - 448 , - 163 , - 370 , - 413 , - 948 , - 7 , - 870 , - 257 , - 136 , - 1163 , - 58 , - 101 , - 636 , - 1007 , - 558 , - 1257 , - 1136 , - 851 , - 1058 , - 1101 , - 324 , - 695 , - 246 , - 945 , - 824 , - 539 , - 746 , - 789 , - 12 , - 383 , - 1246 , - 633 , - 512 , - 227 , - 434 , - 477 , - 1012 , - 71 , - 934 , - 321 , - 200 , - 1227 , - 122 , - 165 , - 700 , - 1071 , - 622 , - 9 , - 1200 , - 915 , - 1122 , - 1165 , - 388 , - 759 , - 310 , - 1009 , - 888 , - 603 , - 810 , - 853 , - 76 , - 447 , - 1310 , - 697 , - 576 , - 291 , - 498 , - 541 , - 1076 , - 135 , - 998 , - 385 , - 264 , - 1291 , - 186 , - 229 , - 764 , - 1135 , - 686 , - 73 , - 1264 , - 979 , - 1186 , - 1229 , - 452 , - 823 , - 374 , - 1073 , - 952 , - 667 , - 874 , - 917 , - 140 , - 511 , - 62 , - 761 , - 640 , - 355 , - 562 , - 605 , - 1140 , - 199 , - 1062 , - 449 , - 328 , - 43 , - 250 , - 293 , - 828 , - 1199 , - 750 , - 137 , - 16 , - 1043 , - 1250 , - 1293 , - 516 , - 887 , - 438 , - 1137 , - 1016 , - 731 , - 938 , - 981 , - 204 , - 575 , - 126 , - 825 , - 704 , - 419 , - 626 , - 669 , - 1204 , - 263 , - 1126 , - 513 , - 392 , - 107 , - 314 , - 357 , - 892 , - 1263 , - 814 , - 201 , - 80 , - 1107 , - 2 , - 45 , - 580 , - 951 , - 502 , - 1201 , - 1080 , - 795 , - 1002 , - 1045 , - 268 , - 639 , - 190 , - 889 , - 768 , - 483 , - 690 , - 733 , - 1268 , - 327 , - 1190 , - 577 , - 456 , - 171 , - 378 , - 421 , - 956 , - 15 , - 878 , - 265 , - 144 , - 1171 , - 66 , - 109 , - 644 , - 1015 , - 566 , - 1265 , - 1144 , - 859 , - 1066 , - 1109 , - 332 , - 703 , - 254 , - 953 , - 832 , - 547 , - 754 , - 797 , - 20 , - 391 , - 1254 , - 641 , - 520 , - 235 , - 442 , - 485 , - 1020 , - 79 , - 942 , - 329 , - 208 , - 1235 , - 130 , - 173 , - 708 , - 1079 , - 630 , - 17 , - 1208 , - 923 , - 1130 , - 1173 , - 396 , - 767 , - 318 , - 1017 , - 896 , - 611 , - 818 , - 861 , - 84 , - 455 , - 6 , - 705 , - 584 , - 299 , - 506 , - 549 , - 1084 , - 143 , - 1006 , - 393 , - 272 , - 1299 , - 194 , - 237 , - 772 , - 1143 , - 694 , - 81 , - 1272 , - 987 , - 1194 , - 1237 , - 460 , - 831 , - 382 , - 1081 , - 960 , - 675 , - 882 , - 925 , - 148 , - 519 , - 70 , - 769 , - 648 , - 363 , - 570 , - 613 , - 1148 , - 207 , - 1070 , - 457 , - 336 , - 51 , - 258 , - 301 , - 836 , - 1207 , - 758 , - 145 , - 24 , - 1051 , - 1258 , - 1301 , - 524 , - 895 , - 446 , - 1145 , - 1024 , - 739 , - 946 , - 989 , - 212 , - 583 , - 134 , - 833 , - 712 , - 427 , - 634 , - 677 , - 1212 , - 271 , - 1134 , - 521 , - 400 , - 115 , - 322 , - 365 , - 900 , - 1271 , - 822 , - 209 , - 88 , - 1115 , - 10 , - 53 , - 588 , - 959 , - 510 , - 1209 , - 1088 , - 803 , - 1010 , - 1053 , - 276 , - 647 , - 198 , - 897 , - 776 , - 491 , - 698 , - 741 , - 1276 , - 335 , - 1198 , - 585 , - 464 , - 179 , - 386 , - 429 , - 964 , - 23 , - 886 , - 273 , - 152 , - 1179 , - 74 , - 117 , - 652 , - 1023 , - 574 , - 1273 , - 1152 , - 867 , - 1074 , - 1117 , - 340 , - 711 , - 262 , - 961 , - 840 , - 555 , - 762 , - 805 , - 28 , - 399 , - 1262 , - 649 , - 528 , - 243 , - 450 , - 493 , - 1028 , - 87 , - 950 , - 337 , - 216 , - 1243 , - 138 , - 181 , - 716 , - 1087 , - 638 , - 25 , - 1216 , - 931 , - 1138 , - 1181 , - 404 , - 775 , - 326 , - 1025 , - 904 , - 619 , - 826 , - 869 , - 92 , - 463 , - 14 , - 713 , - 592 , - 307 , - 514 , - 557 , - 1092 , - 151 , - 1014 , - 401 , - 280 , - 1307 , - 202 , - 245 , - 780 , - 1151 , - 702 , - 89 , - 1280 , - 995 , - 1202 , - 1245 , - 468 , - 839 , - 390 , - 1089 , - 968 , - 683 , - 890 , - 933 , - 156 , - 527 , - 78 , - 777 , - 656 , - 371 , - 578 , - 621 , - 1156 , - 215 , - 1078 , - 465 , - 344 , - 59 , - 266 , - 309 , - 844 , - 1215 , - 766 , - 153 , - 32 , - 1059 , - 1266 , - 1309 , - 532 , - 903 , - 454 , - 1153 , - 1032 , - 747 , - 954 , - 997 , - 220 , - 591 , - 142 , - 841 , - 720 , - 435 , - 642 , - 685 , - 1220 , - 279 , - 1142 , - 529 , - 408 , - 123 , - 330 , - 373 , - 908 , - 1279 , - 830 , - 217 , - 96 , - 1123 , - 18 , - 61 , - 596 , - 967 , - 518 , - 1217 , - 1096 , - 811 , - 1018 , - 1061 , - 284 , - 655 , - 206 , - 905 , - 784 , - 499 , - 706 , - 749 , - 1284 , - 343 , - 1206 , - 593 , - 472 , - 187 , - 394 , - 437 , - 972 , - 31 , - 894 , - 281 , - 160 , - 1187 , - 82 , - 125 , - 660 , - 1031 , - 582 , - 1281 , - 1160 , - 875 , - 1082 , - 1125 , - 348 , - 719 , - 270 , - 969 , - 848 , - 563 , - 770 , - 813 , - 36 , - 407 , - 1270 , - 657 , - 536 , - 251 , - 458 , - 501 , - 1036 , - 95 , - 958 , - 345 , - 224 , - 1251 , - 146 , - 189 , - 724 , - 1095 , - 646 , - 33 , - 1224 , - 939 , - 1146 , - 1189 , - 412 , - 783 , - 334 , - 1033 , - 912 , - 627 , - 834 , - 877 , - 100 , - 471 , - 22 , - 721 , - 600 , - 315 , - 522 , - 565 , - 1100 , - 159 , - 1022 , - 409 , - 288 , - 3 , - 210 , - 253 , - 788 , - 1159 , - 710 , - 97 , - 1288 , - 1003 , - 1210 , - 1253 , - 476 , - 847 , - 398 , - 1097 , - 976 , - 691 , - 898 , - 941 , - 164 , - 535 , - 86 , - 785 , - 664 , - 379 , - 586 , - 629 , - 1164 , - 223 , - 1086 , - 473 , - 352 , - 67 , - 274 , - 317 , - 852 , - 1223 , - 774 , - 161 , - 40 , - 1067 , - 1274 , - 5 , - 540 , - 911 , - 462 , - 1161 , - 1040 , - 755 , - 962 , - 1005 , - 228 , - 599 , - 150 , - 849 , - 728 , - 443 , - 650 , - 693 , - 1228 , - 287 , - 1150 , - 537 , - 416 , - 131 , - 338 , - 381 , - 916 , - 1287 , - 838 , - 225 , - 104 , - 1131 , - 26 , - 69 , - 604 , - 975 , - 526 , - 1225 , - 1104 , - 819 , - 1026 , - 1069 , - 292 , - 663 , - 214 , - 913 , - 792 , - 507 , - 714 , - 757 , - 1292 , - 351 , - 1214 , - 601 , - 480 , - 195 , - 402 , - 445 , - 980 , - 39 , - 902 , - 289 , - 168 , - 1195 , - 90 , - 133 , - 668 , - 1039 , - 590 , - 1289 , - 1168 , - 883 , - 1090 , - 1133 , - 356 , - 727 , - 278 , - 977 , - 856 , - 571 , - 778 , - 821 , - 44 , - 415 , - 1278 , - 665 , - 544 , - 259 , - 466 , - 509 , - 1044 , - 103 , - 966 , - 353 , - 232 , - 1259 , - 154 , - 197 , - 732 , - 1103 , - 654 , - 41 , - 1232 , - 947 , - 1154 , - 1197 , - 420 , - 791 , - 342 , - 1041 , - 920 , - 635 , - 842 , - 885 , - 108 , - 479 , - 30 , - 729 , - 608 , - 323 , - 530 , - 573 , - 1108 , - 167 , - 1030 , - 417 , - 296 , - 11 , - 218 , - 261 , - 796 , - 1167 , - 718 , - 105 , - 1296 , - 1011 , - 1218 , - 1261 , - 484 , - 855 , - 406 , - 1105 , - 984 , - 699 , - 906 , - 949 , - 172 , - 543 , - 94 , - 793 , - 672 , - 387 , - 594 , - 637 , - 1172 , - 231 , - 1094 , - 481 , - 360 , - 75 , - 282 , - 325 , - 860 , - 1231 , - 782 , - 169 , - 48 , - 1075 , - 1282 , - 13 , - 548 , - 919 , - 470 , - 1169 , - 1048 , - 763 , - 970 , - 1013 , - 236 , - 607 , - 158 , - 857 , - 736 , - 451 , - 658 , - 701 , - 1236 , - 295 , - 1158 , - 545 , - 424 , - 139 , - 346 , - 389 , - 924 , - 1295 , - 846 , - 233 , - 112 , - 1139 , - 34 , - 77 , - 612 , - 983 , - 534 , - 1233 , - 1112 , - 827 , - 1034 , - 1077 , - 300 , - 671 , - 222 , - 921 , - 800 , - 515 , - 722 , - 765 , - 1300 , - 359 , - 1222 , - 609 , - 488 , - 203 , - 410 , - 453 , - 988 , - 47 , - 910 , - 297 , - 176 , - 1203 , - 98 , - 141 , - 676 , - 1047 , - 598 , - 1297 , - 1176 , - 891 , - 1098 , - 1141 , - 364 , - 735 , - 286 , - 985 , - 864 , - 579 , - 786 , - 829 , - 52 , - 423 , - 1286 , - 673 , - 552 , - 267 , - 474 , - 517 , - 1052 , - 111 , - 974 , - 361 , - 240 , - 1267 , - 162 , - 205 , - 740 , - 1111 , - 662 , - 49 , - 1240 , - 955 , - 1162 , - 1205 , - 428 , - 799 , - 350 , - 1049 , - 928 , - 643 , - 850 , - 893 , - 116 , - 487 , - 38 , - 737 , - 616 , - 331 , - 538 , - 581 , - 1116 , - 175 , - 1038 , - 425 , - 304 , - 19 , - 226 , - 269 , - 804 , - 1175 , - 726 , - 113 , - 1304 , - 1019 , - 1226 , - 1269 , - 492 , - 863 , - 414 , - 1113 , - 992 , - 707 , - 914 , - 957 , - 180 , - 551 , - 102 , - 801 , - 680 , - 395 , - 602 , - 645 , - 1180 , - 239 , - 1102 , - 489 , - 368 , - 83 , - 290 , - 333 , - 868 , - 1239 , - 790 , - 177 , - 56 , - 1083 , - 1290 , - 21 , - 556 , - 927 , - 478 , - 1177 , - 1056 , - 771 , - 978 , - 1021 , - 244 , - 615 , - 166 , - 865 , - 744 , - 459 , - 666 , - 709 , - 1244 , - 303 , - 1166 , - 553 , - 432 , - 147 , - 354 , - 397 , - 932 , - 1303 , - 854 , - 241 , - 120 , - 1147 , - 42 , - 85 , - 620 , - 991 , - 542 , - 1241 , - 1120 , - 835 , - 1042 , - 1085 , - 308 , - 679 , - 230 , - 929 , - 808 , - 523 , - 730 , - 773 , - 1308 , - 367 , - 1230 , - 617 , - 496 , - 211 , - 418 , - 461 , - 996 , - 55 , - 918 , - 305 , - 184 , - 1211 , - 106 , - 149 , - 684 , - 1055 , - 606 , - 1305 , - 1184 , - 899 , - 1106 , - 1149 , - 372 , - 743 , - 294 , - 993 , - 872 , - 587 , - 794 , - 837 , - 60 , - 431 , - 1294 , - 681 , - 560 , - 275 , - 482 , - 525 , - 1060 , - 119 , - 982 , - 369 , - 248 , - 1275 , - 170 , - 213 , - 748 , - 1119 , - 670 , - 57 , - 1248 , - 963 , - 1170 , - 1213 , - 436 , - 807 , - 358 , - 1057 , - 936 , - 651 , - 858 , - 901 , - 124 , - 495 , - 46 , - 745 , - 624 , - 339 , - 546 , - 589 , - 1124 , - 183 , - 1046 , - 433 , - 312 , - 27 , - 234 , - 277 , - 812 , - 1183 , - 734 , - 121 , - 0 , - 967 , - 422 , - 1053 , - 172 , - 467 , - 594 , - 553 , - 344 , - 1311 , - 766 , - 53 , - 516 , - 811 , - 938 , - 897 , - 688 , - 311 , - 1110 , - 397 , - 860 , - 1155 , - 1282 , - 1241 , - 1032 , - 655 , - 110 , - 741 , - 1204 , - 155 , - 282 , - 241 , - 32 , - 999 , - 454 , - 1085 , - 204 , - 499 , - 626 , - 585 , - 376 , - 1343 , - 798 , - 85 , - 548 , - 843 , - 970 , - 929 , - 720 , - 343 , - 1142 , - 429 , - 892 , - 1187 , - 1314 , - 1273 , - 1064 , - 687 , - 142 , - 773 , - 1236 , - 187 , - 314 , - 273 , - 64 , - 1031 , - 486 , - 1117 , - 236 , - 531 , - 658 , - 617 , - 408 , - 31 , - 830 , - 117 , - 580 , - 875 , - 1002 , - 961 , - 752 , - 375 , - 1174 , - 461 , - 924 , - 1219 , - 2 , - 1305 , - 1096 , - 719 , - 174 , - 805 , - 1268 , - 219 , - 346 , - 305 , - 96 , - 1063 , - 518 , - 1149 , - 268 , - 563 , - 690 , - 649 , - 440 , - 63 , - 862 , - 149 , - 612 , - 907 , - 1034 , - 993 , - 784 , - 407 , - 1206 , - 493 , - 956 , - 1251 , - 34 , - 1337 , - 1128 , - 751 , - 206 , - 837 , - 1300 , - 251 , - 378 , - 337 , - 128 , - 1095 , - 550 , - 1181 , - 300 , - 595 , - 722 , - 681 , - 472 , - 95 , - 894 , - 181 , - 644 , - 939 , - 1066 , - 1025 , - 816 , - 439 , - 1238 , - 525 , - 988 , - 1283 , - 66 , - 25 , - 1160 , - 783 , - 238 , - 869 , - 1332 , - 283 , - 410 , - 369 , - 160 , - 1127 , - 582 , - 1213 , - 332 , - 627 , - 754 , - 713 , - 504 , - 127 , - 926 , - 213 , - 676 , - 971 , - 1098 , - 1057 , - 848 , - 471 , - 1270 , - 557 , - 1020 , - 1315 , - 98 , - 57 , - 1192 , - 815 , - 270 , - 901 , - 20 , - 315 , - 442 , - 401 , - 192 , - 1159 , - 614 , - 1245 , - 364 , - 659 , - 786 , - 745 , - 536 , - 159 , - 958 , - 245 , - 708 , - 1003 , - 1130 , - 1089 , - 880 , - 503 , - 1302 , - 589 , - 1052 , - 3 , - 130 , - 89 , - 1224 , - 847 , - 302 , - 933 , - 52 , - 347 , - 474 , - 433 , - 224 , - 1191 , - 646 , - 1277 , - 396 , - 691 , - 818 , - 777 , - 568 , - 191 , - 990 , - 277 , - 740 , - 1035 , - 1162 , - 1121 , - 912 , - 535 , - 1334 , - 621 , - 1084 , - 35 , - 162 , - 121 , - 1256 , - 879 , - 334 , - 965 , - 84 , - 379 , - 506 , - 465 , - 256 , - 1223 , - 678 , - 1309 , - 428 , - 723 , - 850 , - 809 , - 600 , - 223 , - 1022 , - 309 , - 772 , - 1067 , - 1194 , - 1153 , - 944 , - 567 , - 22 , - 653 , - 1116 , - 67 , - 194 , - 153 , - 1288 , - 911 , - 366 , - 997 , - 116 , - 411 , - 538 , - 497 , - 288 , - 1255 , - 710 , - 1341 , - 460 , - 755 , - 882 , - 841 , - 632 , - 255 , - 1054 , - 341 , - 804 , - 1099 , - 1226 , - 1185 , - 976 , - 599 , - 54 , - 685 , - 1148 , - 99 , - 226 , - 185 , - 1320 , - 943 , - 398 , - 1029 , - 148 , - 443 , - 570 , - 529 , - 320 , - 1287 , - 742 , - 29 , - 492 , - 787 , - 914 , - 873 , - 664 , - 287 , - 1086 , - 373 , - 836 , - 1131 , - 1258 , - 1217 , - 1008 , - 631 , - 86 , - 717 , - 1180 , - 131 , - 258 , - 217 , - 8 , - 975 , - 430 , - 1061 , - 180 , - 475 , - 602 , - 561 , - 352 , - 1319 , - 774 , - 61 , - 524 , - 819 , - 946 , - 905 , - 696 , - 319 , - 1118 , - 405 , - 868 , - 1163 , - 1290 , - 1249 , - 1040 , - 663 , - 118 , - 749 , - 1212 , - 163 , - 290 , - 249 , - 40 , - 1007 , - 462 , - 1093 , - 212 , - 507 , - 634 , - 593 , - 384 , - 7 , - 806 , - 93 , - 556 , - 851 , - 978 , - 937 , - 728 , - 351 , - 1150 , - 437 , - 900 , - 1195 , - 1322 , - 1281 , - 1072 , - 695 , - 150 , - 781 , - 1244 , - 195 , - 322 , - 281 , - 72 , - 1039 , - 494 , - 1125 , - 244 , - 539 , - 666 , - 625 , - 416 , - 39 , - 838 , - 125 , - 588 , - 883 , - 1010 , - 969 , - 760 , - 383 , - 1182 , - 469 , - 932 , - 1227 , - 10 , - 1313 , - 1104 , - 727 , - 182 , - 813 , - 1276 , - 227 , - 354 , - 313 , - 104 , - 1071 , - 526 , - 1157 , - 276 , - 571 , - 698 , - 657 , - 448 , - 71 , - 870 , - 157 , - 620 , - 915 , - 1042 , - 1001 , - 792 , - 415 , - 1214 , - 501 , - 964 , - 1259 , - 42 , - 1 , - 1136 , - 759 , - 214 , - 845 , - 1308 , - 259 , - 386 , - 345 , - 136 , - 1103 , - 558 , - 1189 , - 308 , - 603 , - 730 , - 689 , - 480 , - 103 , - 902 , - 189 , - 652 , - 947 , - 1074 , - 1033 , - 824 , - 447 , - 1246 , - 533 , - 996 , - 1291 , - 74 , - 33 , - 1168 , - 791 , - 246 , - 877 , - 1340 , - 291 , - 418 , - 377 , - 168 , - 1135 , - 590 , - 1221 , - 340 , - 635 , - 762 , - 721 , - 512 , - 135 , - 934 , - 221 , - 684 , - 979 , - 1106 , - 1065 , - 856 , - 479 , - 1278 , - 565 , - 1028 , - 1323 , - 106 , - 65 , - 1200 , - 823 , - 278 , - 909 , - 28 , - 323 , - 450 , - 409 , - 200 , - 1167 , - 622 , - 1253 , - 372 , - 667 , - 794 , - 753 , - 544 , - 167 , - 966 , - 253 , - 716 , - 1011 , - 1138 , - 1097 , - 888 , - 511 , - 1310 , - 597 , - 1060 , - 11 , - 138 , - 97 , - 1232 , - 855 , - 310 , - 941 , - 60 , - 355 , - 482 , - 441 , - 232 , - 1199 , - 654 , - 1285 , - 404 , - 699 , - 826 , - 785 , - 576 , - 199 , - 998 , - 285 , - 748 , - 1043 , - 1170 , - 1129 , - 920 , - 543 , - 1342 , - 629 , - 1092 , - 43 , - 170 , - 129 , - 1264 , - 887 , - 342 , - 973 , - 92 , - 387 , - 514 , - 473 , - 264 , - 1231 , - 686 , - 1317 , - 436 , - 731 , - 858 , - 817 , - 608 , - 231 , - 1030 , - 317 , - 780 , - 1075 , - 1202 , - 1161 , - 952 , - 575 , - 30 , - 661 , - 1124 , - 75 , - 202 , - 161 , - 1296 , - 919 , - 374 , - 1005 , - 124 , - 419 , - 546 , - 505 , - 296 , - 1263 , - 718 , - 5 , - 468 , - 763 , - 890 , - 849 , - 640 , - 263 , - 1062 , - 349 , - 812 , - 1107 , - 1234 , - 1193 , - 984 , - 607 , - 62 , - 693 , - 1156 , - 107 , - 234 , - 193 , - 1328 , - 951 , - 406 , - 1037 , - 156 , - 451 , - 578 , - 537 , - 328 , - 1295 , - 750 , - 37 , - 500 , - 795 , - 922 , - 881 , - 672 , - 295 , - 1094 , - 381 , - 844 , - 1139 , - 1266 , - 1225 , - 1016 , - 639 , - 94 , - 725 , - 1188 , - 139 , - 266 , - 225 , - 16 , - 983 , - 438 , - 1069 , - 188 , - 483 , - 610 , - 569 , - 360 , - 1327 , - 782 , - 69 , - 532 , - 827 , - 954 , - 913 , - 704 , - 327 , - 1126 , - 413 , - 876 , - 1171 , - 1298 , - 1257 , - 1048 , - 671 , - 126 , - 757 , - 1220 , - 171 , - 298 , - 257 , - 48 , - 1015 , - 470 , - 1101 , - 220 , - 515 , - 642 , - 601 , - 392 , - 15 , - 814 , - 101 , - 564 , - 859 , - 986 , - 945 , - 736 , - 359 , - 1158 , - 445 , - 908 , - 1203 , - 1330 , - 1289 , - 1080 , - 703 , - 158 , - 789 , - 1252 , - 203 , - 330 , - 289 , - 80 , - 1047 , - 502 , - 1133 , - 252 , - 547 , - 674 , - 633 , - 424 , - 47 , - 846 , - 133 , - 596 , - 891 , - 1018 , - 977 , - 768 , - 391 , - 1190 , - 477 , - 940 , - 1235 , - 18 , - 1321 , - 1112 , - 735 , - 190 , - 821 , - 1284 , - 235 , - 362 , - 321 , - 112 , - 1079 , - 534 , - 1165 , - 284 , - 579 , - 706 , - 665 , - 456 , - 79 , - 878 , - 165 , - 628 , - 923 , - 1050 , - 1009 , - 800 , - 423 , - 1222 , - 509 , - 972 , - 1267 , - 50 , - 9 , - 1144 , - 767 , - 222 , - 853 , - 1316 , - 267 , - 394 , - 353 , - 144 , - 1111 , - 566 , - 1197 , - 316 , - 611 , - 738 , - 697 , - 488 , - 111 , - 910 , - 197 , - 660 , - 955 , - 1082 , - 1041 , - 832 , - 455 , - 1254 , - 541 , - 1004 , - 1299 , - 82 , - 41 , - 1176 , - 799 , - 254 , - 885 , - 4 , - 299 , - 426 , - 385 , - 176 , - 1143 , - 598 , - 1229 , - 348 , - 643 , - 770 , - 729 , - 520 , - 143 , - 942 , - 229 , - 692 , - 987 , - 1114 , - 1073 , - 864 , - 487 , - 1286 , - 573 , - 1036 , - 1331 , - 114 , - 73 , - 1208 , - 831 , - 286 , - 917 , - 36 , - 331 , - 458 , - 417 , - 208 , - 1175 , - 630 , - 1261 , - 380 , - 675 , - 802 , - 761 , - 552 , - 175 , - 974 , - 261 , - 724 , - 1019 , - 1146 , - 1105 , - 896 , - 519 , - 1318 , - 605 , - 1068 , - 19 , - 146 , - 105 , - 1240 , - 863 , - 318 , - 949 , - 68 , - 363 , - 490 , - 449 , - 240 , - 1207 , - 662 , - 1293 , - 412 , - 707 , - 834 , - 793 , - 584 , - 207 , - 1006 , - 293 , - 756 , - 1051 , - 1178 , - 1137 , - 928 , - 551 , - 6 , - 637 , - 1100 , - 51 , - 178 , - 137 , - 1272 , - 895 , - 350 , - 981 , - 100 , - 395 , - 522 , - 481 , - 272 , - 1239 , - 694 , - 1325 , - 444 , - 739 , - 866 , - 825 , - 616 , - 239 , - 1038 , - 325 , - 788 , - 1083 , - 1210 , - 1169 , - 960 , - 583 , - 38 , - 669 , - 1132 , - 83 , - 210 , - 169 , - 1304 , - 927 , - 382 , - 1013 , - 132 , - 427 , - 554 , - 513 , - 304 , - 1271 , - 726 , - 13 , - 476 , - 771 , - 898 , - 857 , - 648 , - 271 , - 1070 , - 357 , - 820 , - 1115 , - 1242 , - 1201 , - 992 , - 615 , - 70 , - 701 , - 1164 , - 115 , - 242 , - 201 , - 1336 , - 959 , - 414 , - 1045 , - 164 , - 459 , - 586 , - 545 , - 336 , - 1303 , - 758 , - 45 , - 508 , - 803 , - 930 , - 889 , - 680 , - 303 , - 1102 , - 389 , - 852 , - 1147 , - 1274 , - 1233 , - 1024 , - 647 , - 102 , - 733 , - 1196 , - 147 , - 274 , - 233 , - 24 , - 991 , - 446 , - 1077 , - 196 , - 491 , - 618 , - 577 , - 368 , - 1335 , - 790 , - 77 , - 540 , - 835 , - 962 , - 921 , - 712 , - 335 , - 1134 , - 421 , - 884 , - 1179 , - 1306 , - 1265 , - 1056 , - 679 , - 134 , - 765 , - 1228 , - 179 , - 306 , - 265 , - 56 , - 1023 , - 478 , - 1109 , - 228 , - 523 , - 650 , - 609 , - 400 , - 23 , - 822 , - 109 , - 572 , - 867 , - 994 , - 953 , - 744 , - 367 , - 1166 , - 453 , - 916 , - 1211 , - 1338 , - 1297 , - 1088 , - 711 , - 166 , - 797 , - 1260 , - 211 , - 338 , - 297 , - 88 , - 1055 , - 510 , - 1141 , - 260 , - 555 , - 682 , - 641 , - 432 , - 55 , - 854 , - 141 , - 604 , - 899 , - 1026 , - 985 , - 776 , - 399 , - 1198 , - 485 , - 948 , - 1243 , - 26 , - 1329 , - 1120 , - 743 , - 198 , - 829 , - 1292 , - 243 , - 370 , - 329 , - 120 , - 1087 , - 542 , - 1173 , - 292 , - 587 , - 714 , - 673 , - 464 , - 87 , - 886 , - 173 , - 636 , - 931 , - 1058 , - 1017 , - 808 , - 431 , - 1230 , - 517 , - 980 , - 1275 , - 58 , - 17 , - 1152 , - 775 , - 230 , - 861 , - 1324 , - 275 , - 402 , - 361 , - 152 , - 1119 , - 574 , - 1205 , - 324 , - 619 , - 746 , - 705 , - 496 , - 119 , - 918 , - 205 , - 668 , - 963 , - 1090 , - 1049 , - 840 , - 463 , - 1262 , - 549 , - 1012 , - 1307 , - 90 , - 49 , - 1184 , - 807 , - 262 , - 893 , - 12 , - 307 , - 434 , - 393 , - 184 , - 1151 , - 606 , - 1237 , - 356 , - 651 , - 778 , - 737 , - 528 , - 151 , - 950 , - 237 , - 700 , - 995 , - 1122 , - 1081 , - 872 , - 495 , - 1294 , - 581 , - 1044 , - 1339 , - 122 , - 81 , - 1216 , - 839 , - 294 , - 925 , - 44 , - 339 , - 466 , - 425 , - 216 , - 1183 , - 638 , - 1269 , - 388 , - 683 , - 810 , - 769 , - 560 , - 183 , - 982 , - 269 , - 732 , - 1027 , - 1154 , - 1113 , - 904 , - 527 , - 1326 , - 613 , - 1076 , - 27 , - 154 , - 113 , - 1248 , - 871 , - 326 , - 957 , - 76 , - 371 , - 498 , - 457 , - 248 , - 1215 , - 670 , - 1301 , - 420 , - 715 , - 842 , - 801 , - 592 , - 215 , - 1014 , - 301 , - 764 , - 1059 , - 1186 , - 1145 , - 936 , - 559 , - 14 , - 645 , - 1108 , - 59 , - 186 , - 145 , - 1280 , - 903 , - 358 , - 989 , - 108 , - 403 , - 530 , - 489 , - 280 , - 1247 , - 702 , - 1333 , - 452 , - 747 , - 874 , - 833 , - 624 , - 247 , - 1046 , - 333 , - 796 , - 1091 , - 1218 , - 1177 , - 968 , - 591 , - 46 , - 677 , - 1140 , - 91 , - 218 , - 177 , - 1312 , - 935 , - 390 , - 1021 , - 140 , - 435 , - 562 , - 521 , - 312 , - 1279 , - 734 , - 21 , - 484 , - 779 , - 906 , - 865 , - 656 , - 279 , - 1078 , - 365 , - 828 , - 1123 , - 1250 , - 1209 , - 1000 , - 623 , - 78 , - 709 , - 1172 , - 123 , - 250 , - 209 , - 0 , - 127 , - 770 , - 1241 , - 852 , - 291 , - 246 , - 29 , - 328 , - 455 , - 1098 , - 193 , - 1180 , - 619 , - 574 , - 357 , - 656 , - 783 , - 50 , - 521 , - 132 , - 947 , - 902 , - 685 , - 984 , - 1111 , - 378 , - 849 , - 460 , - 1275 , - 1230 , - 1013 , - 1312 , - 63 , - 706 , - 1177 , - 788 , - 227 , - 182 , - 1341 , - 264 , - 391 , - 1034 , - 129 , - 1116 , - 555 , - 510 , - 293 , - 592 , - 719 , - 1362 , - 457 , - 68 , - 883 , - 838 , - 621 , - 920 , - 1047 , - 314 , - 785 , - 396 , - 1211 , - 1166 , - 949 , - 1248 , - 1375 , - 642 , - 1113 , - 724 , - 163 , - 118 , - 1277 , - 200 , - 327 , - 970 , - 65 , - 1052 , - 491 , - 446 , - 229 , - 528 , - 655 , - 1298 , - 393 , - 4 , - 819 , - 774 , - 557 , - 856 , - 983 , - 250 , - 721 , - 332 , - 1147 , - 1102 , - 885 , - 1184 , - 1311 , - 578 , - 1049 , - 660 , - 99 , - 54 , - 1213 , - 136 , - 263 , - 906 , - 1 , - 988 , - 427 , - 382 , - 165 , - 464 , - 591 , - 1234 , - 329 , - 1316 , - 755 , - 710 , - 493 , - 792 , - 919 , - 186 , - 657 , - 268 , - 1083 , - 1038 , - 821 , - 1120 , - 1247 , - 514 , - 985 , - 596 , - 35 , - 1366 , - 1149 , - 72 , - 199 , - 842 , - 1313 , - 924 , - 363 , - 318 , - 101 , - 400 , - 527 , - 1170 , - 265 , - 1252 , - 691 , - 646 , - 429 , - 728 , - 855 , - 122 , - 593 , - 204 , - 1019 , - 974 , - 757 , - 1056 , - 1183 , - 450 , - 921 , - 532 , - 1347 , - 1302 , - 1085 , - 8 , - 135 , - 778 , - 1249 , - 860 , - 299 , - 254 , - 37 , - 336 , - 463 , - 1106 , - 201 , - 1188 , - 627 , - 582 , - 365 , - 664 , - 791 , - 58 , - 529 , - 140 , - 955 , - 910 , - 693 , - 992 , - 1119 , - 386 , - 857 , - 468 , - 1283 , - 1238 , - 1021 , - 1320 , - 71 , - 714 , - 1185 , - 796 , - 235 , - 190 , - 1349 , - 272 , - 399 , - 1042 , - 137 , - 1124 , - 563 , - 518 , - 301 , - 600 , - 727 , - 1370 , - 465 , - 76 , - 891 , - 846 , - 629 , - 928 , - 1055 , - 322 , - 793 , - 404 , - 1219 , - 1174 , - 957 , - 1256 , - 7 , - 650 , - 1121 , - 732 , - 171 , - 126 , - 1285 , - 208 , - 335 , - 978 , - 73 , - 1060 , - 499 , - 454 , - 237 , - 536 , - 663 , - 1306 , - 401 , - 12 , - 827 , - 782 , - 565 , - 864 , - 991 , - 258 , - 729 , - 340 , - 1155 , - 1110 , - 893 , - 1192 , - 1319 , - 586 , - 1057 , - 668 , - 107 , - 62 , - 1221 , - 144 , - 271 , - 914 , - 9 , - 996 , - 435 , - 390 , - 173 , - 472 , - 599 , - 1242 , - 337 , - 1324 , - 763 , - 718 , - 501 , - 800 , - 927 , - 194 , - 665 , - 276 , - 1091 , - 1046 , - 829 , - 1128 , - 1255 , - 522 , - 993 , - 604 , - 43 , - 1374 , - 1157 , - 80 , - 207 , - 850 , - 1321 , - 932 , - 371 , - 326 , - 109 , - 408 , - 535 , - 1178 , - 273 , - 1260 , - 699 , - 654 , - 437 , - 736 , - 863 , - 130 , - 601 , - 212 , - 1027 , - 982 , - 765 , - 1064 , - 1191 , - 458 , - 929 , - 540 , - 1355 , - 1310 , - 1093 , - 16 , - 143 , - 786 , - 1257 , - 868 , - 307 , - 262 , - 45 , - 344 , - 471 , - 1114 , - 209 , - 1196 , - 635 , - 590 , - 373 , - 672 , - 799 , - 66 , - 537 , - 148 , - 963 , - 918 , - 701 , - 1000 , - 1127 , - 394 , - 865 , - 476 , - 1291 , - 1246 , - 1029 , - 1328 , - 79 , - 722 , - 1193 , - 804 , - 243 , - 198 , - 1357 , - 280 , - 407 , - 1050 , - 145 , - 1132 , - 571 , - 526 , - 309 , - 608 , - 735 , - 2 , - 473 , - 84 , - 899 , - 854 , - 637 , - 936 , - 1063 , - 330 , - 801 , - 412 , - 1227 , - 1182 , - 965 , - 1264 , - 15 , - 658 , - 1129 , - 740 , - 179 , - 134 , - 1293 , - 216 , - 343 , - 986 , - 81 , - 1068 , - 507 , - 462 , - 245 , - 544 , - 671 , - 1314 , - 409 , - 20 , - 835 , - 790 , - 573 , - 872 , - 999 , - 266 , - 737 , - 348 , - 1163 , - 1118 , - 901 , - 1200 , - 1327 , - 594 , - 1065 , - 676 , - 115 , - 70 , - 1229 , - 152 , - 279 , - 922 , - 17 , - 1004 , - 443 , - 398 , - 181 , - 480 , - 607 , - 1250 , - 345 , - 1332 , - 771 , - 726 , - 509 , - 808 , - 935 , - 202 , - 673 , - 284 , - 1099 , - 1054 , - 837 , - 1136 , - 1263 , - 530 , - 1001 , - 612 , - 51 , - 6 , - 1165 , - 88 , - 215 , - 858 , - 1329 , - 940 , - 379 , - 334 , - 117 , - 416 , - 543 , - 1186 , - 281 , - 1268 , - 707 , - 662 , - 445 , - 744 , - 871 , - 138 , - 609 , - 220 , - 1035 , - 990 , - 773 , - 1072 , - 1199 , - 466 , - 937 , - 548 , - 1363 , - 1318 , - 1101 , - 24 , - 151 , - 794 , - 1265 , - 876 , - 315 , - 270 , - 53 , - 352 , - 479 , - 1122 , - 217 , - 1204 , - 643 , - 598 , - 381 , - 680 , - 807 , - 74 , - 545 , - 156 , - 971 , - 926 , - 709 , - 1008 , - 1135 , - 402 , - 873 , - 484 , - 1299 , - 1254 , - 1037 , - 1336 , - 87 , - 730 , - 1201 , - 812 , - 251 , - 206 , - 1365 , - 288 , - 415 , - 1058 , - 153 , - 1140 , - 579 , - 534 , - 317 , - 616 , - 743 , - 10 , - 481 , - 92 , - 907 , - 862 , - 645 , - 944 , - 1071 , - 338 , - 809 , - 420 , - 1235 , - 1190 , - 973 , - 1272 , - 23 , - 666 , - 1137 , - 748 , - 187 , - 142 , - 1301 , - 224 , - 351 , - 994 , - 89 , - 1076 , - 515 , - 470 , - 253 , - 552 , - 679 , - 1322 , - 417 , - 28 , - 843 , - 798 , - 581 , - 880 , - 1007 , - 274 , - 745 , - 356 , - 1171 , - 1126 , - 909 , - 1208 , - 1335 , - 602 , - 1073 , - 684 , - 123 , - 78 , - 1237 , - 160 , - 287 , - 930 , - 25 , - 1012 , - 451 , - 406 , - 189 , - 488 , - 615 , - 1258 , - 353 , - 1340 , - 779 , - 734 , - 517 , - 816 , - 943 , - 210 , - 681 , - 292 , - 1107 , - 1062 , - 845 , - 1144 , - 1271 , - 538 , - 1009 , - 620 , - 59 , - 14 , - 1173 , - 96 , - 223 , - 866 , - 1337 , - 948 , - 387 , - 342 , - 125 , - 424 , - 551 , - 1194 , - 289 , - 1276 , - 715 , - 670 , - 453 , - 752 , - 879 , - 146 , - 617 , - 228 , - 1043 , - 998 , - 781 , - 1080 , - 1207 , - 474 , - 945 , - 556 , - 1371 , - 1326 , - 1109 , - 32 , - 159 , - 802 , - 1273 , - 884 , - 323 , - 278 , - 61 , - 360 , - 487 , - 1130 , - 225 , - 1212 , - 651 , - 606 , - 389 , - 688 , - 815 , - 82 , - 553 , - 164 , - 979 , - 934 , - 717 , - 1016 , - 1143 , - 410 , - 881 , - 492 , - 1307 , - 1262 , - 1045 , - 1344 , - 95 , - 738 , - 1209 , - 820 , - 259 , - 214 , - 1373 , - 296 , - 423 , - 1066 , - 161 , - 1148 , - 587 , - 542 , - 325 , - 624 , - 751 , - 18 , - 489 , - 100 , - 915 , - 870 , - 653 , - 952 , - 1079 , - 346 , - 817 , - 428 , - 1243 , - 1198 , - 981 , - 1280 , - 31 , - 674 , - 1145 , - 756 , - 195 , - 150 , - 1309 , - 232 , - 359 , - 1002 , - 97 , - 1084 , - 523 , - 478 , - 261 , - 560 , - 687 , - 1330 , - 425 , - 36 , - 851 , - 806 , - 589 , - 888 , - 1015 , - 282 , - 753 , - 364 , - 1179 , - 1134 , - 917 , - 1216 , - 1343 , - 610 , - 1081 , - 692 , - 131 , - 86 , - 1245 , - 168 , - 295 , - 938 , - 33 , - 1020 , - 459 , - 414 , - 197 , - 496 , - 623 , - 1266 , - 361 , - 1348 , - 787 , - 742 , - 525 , - 824 , - 951 , - 218 , - 689 , - 300 , - 1115 , - 1070 , - 853 , - 1152 , - 1279 , - 546 , - 1017 , - 628 , - 67 , - 22 , - 1181 , - 104 , - 231 , - 874 , - 1345 , - 956 , - 395 , - 350 , - 133 , - 432 , - 559 , - 1202 , - 297 , - 1284 , - 723 , - 678 , - 461 , - 760 , - 887 , - 154 , - 625 , - 236 , - 1051 , - 1006 , - 789 , - 1088 , - 1215 , - 482 , - 953 , - 564 , - 3 , - 1334 , - 1117 , - 40 , - 167 , - 810 , - 1281 , - 892 , - 331 , - 286 , - 69 , - 368 , - 495 , - 1138 , - 233 , - 1220 , - 659 , - 614 , - 397 , - 696 , - 823 , - 90 , - 561 , - 172 , - 987 , - 942 , - 725 , - 1024 , - 1151 , - 418 , - 889 , - 500 , - 1315 , - 1270 , - 1053 , - 1352 , - 103 , - 746 , - 1217 , - 828 , - 267 , - 222 , - 5 , - 304 , - 431 , - 1074 , - 169 , - 1156 , - 595 , - 550 , - 333 , - 632 , - 759 , - 26 , - 497 , - 108 , - 923 , - 878 , - 661 , - 960 , - 1087 , - 354 , - 825 , - 436 , - 1251 , - 1206 , - 989 , - 1288 , - 39 , - 682 , - 1153 , - 764 , - 203 , - 158 , - 1317 , - 240 , - 367 , - 1010 , - 105 , - 1092 , - 531 , - 486 , - 269 , - 568 , - 695 , - 1338 , - 433 , - 44 , - 859 , - 814 , - 597 , - 896 , - 1023 , - 290 , - 761 , - 372 , - 1187 , - 1142 , - 925 , - 1224 , - 1351 , - 618 , - 1089 , - 700 , - 139 , - 94 , - 1253 , - 176 , - 303 , - 946 , - 41 , - 1028 , - 467 , - 422 , - 205 , - 504 , - 631 , - 1274 , - 369 , - 1356 , - 795 , - 750 , - 533 , - 832 , - 959 , - 226 , - 697 , - 308 , - 1123 , - 1078 , - 861 , - 1160 , - 1287 , - 554 , - 1025 , - 636 , - 75 , - 30 , - 1189 , - 112 , - 239 , - 882 , - 1353 , - 964 , - 403 , - 358 , - 141 , - 440 , - 567 , - 1210 , - 305 , - 1292 , - 731 , - 686 , - 469 , - 768 , - 895 , - 162 , - 633 , - 244 , - 1059 , - 1014 , - 797 , - 1096 , - 1223 , - 490 , - 961 , - 572 , - 11 , - 1342 , - 1125 , - 48 , - 175 , - 818 , - 1289 , - 900 , - 339 , - 294 , - 77 , - 376 , - 503 , - 1146 , - 241 , - 1228 , - 667 , - 622 , - 405 , - 704 , - 831 , - 98 , - 569 , - 180 , - 995 , - 950 , - 733 , - 1032 , - 1159 , - 426 , - 897 , - 508 , - 1323 , - 1278 , - 1061 , - 1360 , - 111 , - 754 , - 1225 , - 836 , - 275 , - 230 , - 13 , - 312 , - 439 , - 1082 , - 177 , - 1164 , - 603 , - 558 , - 341 , - 640 , - 767 , - 34 , - 505 , - 116 , - 931 , - 886 , - 669 , - 968 , - 1095 , - 362 , - 833 , - 444 , - 1259 , - 1214 , - 997 , - 1296 , - 47 , - 690 , - 1161 , - 772 , - 211 , - 166 , - 1325 , - 248 , - 375 , - 1018 , - 113 , - 1100 , - 539 , - 494 , - 277 , - 576 , - 703 , - 1346 , - 441 , - 52 , - 867 , - 822 , - 605 , - 904 , - 1031 , - 298 , - 769 , - 380 , - 1195 , - 1150 , - 933 , - 1232 , - 1359 , - 626 , - 1097 , - 708 , - 147 , - 102 , - 1261 , - 184 , - 311 , - 954 , - 49 , - 1036 , - 475 , - 430 , - 213 , - 512 , - 639 , - 1282 , - 377 , - 1364 , - 803 , - 758 , - 541 , - 840 , - 967 , - 234 , - 705 , - 316 , - 1131 , - 1086 , - 869 , - 1168 , - 1295 , - 562 , - 1033 , - 644 , - 83 , - 38 , - 1197 , - 120 , - 247 , - 890 , - 1361 , - 972 , - 411 , - 366 , - 149 , - 448 , - 575 , - 1218 , - 313 , - 1300 , - 739 , - 694 , - 477 , - 776 , - 903 , - 170 , - 641 , - 252 , - 1067 , - 1022 , - 805 , - 1104 , - 1231 , - 498 , - 969 , - 580 , - 19 , - 1350 , - 1133 , - 56 , - 183 , - 826 , - 1297 , - 908 , - 347 , - 302 , - 85 , - 384 , - 511 , - 1154 , - 249 , - 1236 , - 675 , - 630 , - 413 , - 712 , - 839 , - 106 , - 577 , - 188 , - 1003 , - 958 , - 741 , - 1040 , - 1167 , - 434 , - 905 , - 516 , - 1331 , - 1286 , - 1069 , - 1368 , - 119 , - 762 , - 1233 , - 844 , - 283 , - 238 , - 21 , - 320 , - 447 , - 1090 , - 185 , - 1172 , - 611 , - 566 , - 349 , - 648 , - 775 , - 42 , - 513 , - 124 , - 939 , - 894 , - 677 , - 976 , - 1103 , - 370 , - 841 , - 452 , - 1267 , - 1222 , - 1005 , - 1304 , - 55 , - 698 , - 1169 , - 780 , - 219 , - 174 , - 1333 , - 256 , - 383 , - 1026 , - 121 , - 1108 , - 547 , - 502 , - 285 , - 584 , - 711 , - 1354 , - 449 , - 60 , - 875 , - 830 , - 613 , - 912 , - 1039 , - 306 , - 777 , - 388 , - 1203 , - 1158 , - 941 , - 1240 , - 1367 , - 634 , - 1105 , - 716 , - 155 , - 110 , - 1269 , - 192 , - 319 , - 962 , - 57 , - 1044 , - 483 , - 438 , - 221 , - 520 , - 647 , - 1290 , - 385 , - 1372 , - 811 , - 766 , - 549 , - 848 , - 975 , - 242 , - 713 , - 324 , - 1139 , - 1094 , - 877 , - 1176 , - 1303 , - 570 , - 1041 , - 652 , - 91 , - 46 , - 1205 , - 128 , - 255 , - 898 , - 1369 , - 980 , - 419 , - 374 , - 157 , - 456 , - 583 , - 1226 , - 321 , - 1308 , - 747 , - 702 , - 485 , - 784 , - 911 , - 178 , - 649 , - 260 , - 1075 , - 1030 , - 813 , - 1112 , - 1239 , - 506 , - 977 , - 588 , - 27 , - 1358 , - 1141 , - 64 , - 191 , - 834 , - 1305 , - 916 , - 355 , - 310 , - 93 , - 392 , - 519 , - 1162 , - 257 , - 1244 , - 683 , - 638 , - 421 , - 720 , - 847 , - 114 , - 585 , - 196 , - 1011 , - 966 , - 749 , - 1048 , - 1175 , - 442 , - 913 , - 524 , - 1339 , - 1294 , - 1077 , - 0 , - 571 , - 614 , - 129 , - 524 , - 391 , - 1138 , - 1357 , - 1048 , - 211 , - 254 , - 1177 , - 164 , - 31 , - 778 , - 997 , - 688 , - 1259 , - 1302 , - 817 , - 1212 , - 1079 , - 418 , - 637 , - 328 , - 899 , - 942 , - 457 , - 852 , - 719 , - 58 , - 277 , - 1376 , - 539 , - 582 , - 97 , - 492 , - 359 , - 1106 , - 1325 , - 1016 , - 179 , - 222 , - 1145 , - 132 , - 1407 , - 746 , - 965 , - 656 , - 1227 , - 1270 , - 785 , - 1180 , - 1047 , - 386 , - 605 , - 296 , - 867 , - 910 , - 425 , - 820 , - 687 , - 26 , - 245 , - 1344 , - 507 , - 550 , - 65 , - 460 , - 327 , - 1074 , - 1293 , - 984 , - 147 , - 190 , - 1113 , - 100 , - 1375 , - 714 , - 933 , - 624 , - 1195 , - 1238 , - 753 , - 1148 , - 1015 , - 354 , - 573 , - 264 , - 835 , - 878 , - 393 , - 788 , - 655 , - 1402 , - 213 , - 1312 , - 475 , - 518 , - 33 , - 428 , - 295 , - 1042 , - 1261 , - 952 , - 115 , - 158 , - 1081 , - 68 , - 1343 , - 682 , - 901 , - 592 , - 1163 , - 1206 , - 721 , - 1116 , - 983 , - 322 , - 541 , - 232 , - 803 , - 846 , - 361 , - 756 , - 623 , - 1370 , - 181 , - 1280 , - 443 , - 486 , - 1 , - 396 , - 263 , - 1010 , - 1229 , - 920 , - 83 , - 126 , - 1049 , - 36 , - 1311 , - 650 , - 869 , - 560 , - 1131 , - 1174 , - 689 , - 1084 , - 951 , - 290 , - 509 , - 200 , - 771 , - 814 , - 329 , - 724 , - 591 , - 1338 , - 149 , - 1248 , - 411 , - 454 , - 1377 , - 364 , - 231 , - 978 , - 1197 , - 888 , - 51 , - 94 , - 1017 , - 4 , - 1279 , - 618 , - 837 , - 528 , - 1099 , - 1142 , - 657 , - 1052 , - 919 , - 258 , - 477 , - 168 , - 739 , - 782 , - 297 , - 692 , - 559 , - 1306 , - 117 , - 1216 , - 379 , - 422 , - 1345 , - 332 , - 199 , - 946 , - 1165 , - 856 , - 19 , - 62 , - 985 , - 1380 , - 1247 , - 586 , - 805 , - 496 , - 1067 , - 1110 , - 625 , - 1020 , - 887 , - 226 , - 445 , - 136 , - 707 , - 750 , - 265 , - 660 , - 527 , - 1274 , - 85 , - 1184 , - 347 , - 390 , - 1313 , - 300 , - 167 , - 914 , - 1133 , - 824 , - 1395 , - 30 , - 953 , - 1348 , - 1215 , - 554 , - 773 , - 464 , - 1035 , - 1078 , - 593 , - 988 , - 855 , - 194 , - 413 , - 104 , - 675 , - 718 , - 233 , - 628 , - 495 , - 1242 , - 53 , - 1152 , - 315 , - 358 , - 1281 , - 268 , - 135 , - 882 , - 1101 , - 792 , - 1363 , - 1406 , - 921 , - 1316 , - 1183 , - 522 , - 741 , - 432 , - 1003 , - 1046 , - 561 , - 956 , - 823 , - 162 , - 381 , - 72 , - 643 , - 686 , - 201 , - 596 , - 463 , - 1210 , - 21 , - 1120 , - 283 , - 326 , - 1249 , - 236 , - 103 , - 850 , - 1069 , - 760 , - 1331 , - 1374 , - 889 , - 1284 , - 1151 , - 490 , - 709 , - 400 , - 971 , - 1014 , - 529 , - 924 , - 791 , - 130 , - 349 , - 40 , - 611 , - 654 , - 169 , - 564 , - 431 , - 1178 , - 1397 , - 1088 , - 251 , - 294 , - 1217 , - 204 , - 71 , - 818 , - 1037 , - 728 , - 1299 , - 1342 , - 857 , - 1252 , - 1119 , - 458 , - 677 , - 368 , - 939 , - 982 , - 497 , - 892 , - 759 , - 98 , - 317 , - 8 , - 579 , - 622 , - 137 , - 532 , - 399 , - 1146 , - 1365 , - 1056 , - 219 , - 262 , - 1185 , - 172 , - 39 , - 786 , - 1005 , - 696 , - 1267 , - 1310 , - 825 , - 1220 , - 1087 , - 426 , - 645 , - 336 , - 907 , - 950 , - 465 , - 860 , - 727 , - 66 , - 285 , - 1384 , - 547 , - 590 , - 105 , - 500 , - 367 , - 1114 , - 1333 , - 1024 , - 187 , - 230 , - 1153 , - 140 , - 7 , - 754 , - 973 , - 664 , - 1235 , - 1278 , - 793 , - 1188 , - 1055 , - 394 , - 613 , - 304 , - 875 , - 918 , - 433 , - 828 , - 695 , - 34 , - 253 , - 1352 , - 515 , - 558 , - 73 , - 468 , - 335 , - 1082 , - 1301 , - 992 , - 155 , - 198 , - 1121 , - 108 , - 1383 , - 722 , - 941 , - 632 , - 1203 , - 1246 , - 761 , - 1156 , - 1023 , - 362 , - 581 , - 272 , - 843 , - 886 , - 401 , - 796 , - 663 , - 2 , - 221 , - 1320 , - 483 , - 526 , - 41 , - 436 , - 303 , - 1050 , - 1269 , - 960 , - 123 , - 166 , - 1089 , - 76 , - 1351 , - 690 , - 909 , - 600 , - 1171 , - 1214 , - 729 , - 1124 , - 991 , - 330 , - 549 , - 240 , - 811 , - 854 , - 369 , - 764 , - 631 , - 1378 , - 189 , - 1288 , - 451 , - 494 , - 9 , - 404 , - 271 , - 1018 , - 1237 , - 928 , - 91 , - 134 , - 1057 , - 44 , - 1319 , - 658 , - 877 , - 568 , - 1139 , - 1182 , - 697 , - 1092 , - 959 , - 298 , - 517 , - 208 , - 779 , - 822 , - 337 , - 732 , - 599 , - 1346 , - 157 , - 1256 , - 419 , - 462 , - 1385 , - 372 , - 239 , - 986 , - 1205 , - 896 , - 59 , - 102 , - 1025 , - 12 , - 1287 , - 626 , - 845 , - 536 , - 1107 , - 1150 , - 665 , - 1060 , - 927 , - 266 , - 485 , - 176 , - 747 , - 790 , - 305 , - 700 , - 567 , - 1314 , - 125 , - 1224 , - 387 , - 430 , - 1353 , - 340 , - 207 , - 954 , - 1173 , - 864 , - 27 , - 70 , - 993 , - 1388 , - 1255 , - 594 , - 813 , - 504 , - 1075 , - 1118 , - 633 , - 1028 , - 895 , - 234 , - 453 , - 144 , - 715 , - 758 , - 273 , - 668 , - 535 , - 1282 , - 93 , - 1192 , - 355 , - 398 , - 1321 , - 308 , - 175 , - 922 , - 1141 , - 832 , - 1403 , - 38 , - 961 , - 1356 , - 1223 , - 562 , - 781 , - 472 , - 1043 , - 1086 , - 601 , - 996 , - 863 , - 202 , - 421 , - 112 , - 683 , - 726 , - 241 , - 636 , - 503 , - 1250 , - 61 , - 1160 , - 323 , - 366 , - 1289 , - 276 , - 143 , - 890 , - 1109 , - 800 , - 1371 , - 6 , - 929 , - 1324 , - 1191 , - 530 , - 749 , - 440 , - 1011 , - 1054 , - 569 , - 964 , - 831 , - 170 , - 389 , - 80 , - 651 , - 694 , - 209 , - 604 , - 471 , - 1218 , - 29 , - 1128 , - 291 , - 334 , - 1257 , - 244 , - 111 , - 858 , - 1077 , - 768 , - 1339 , - 1382 , - 897 , - 1292 , - 1159 , - 498 , - 717 , - 408 , - 979 , - 1022 , - 537 , - 932 , - 799 , - 138 , - 357 , - 48 , - 619 , - 662 , - 177 , - 572 , - 439 , - 1186 , - 1405 , - 1096 , - 259 , - 302 , - 1225 , - 212 , - 79 , - 826 , - 1045 , - 736 , - 1307 , - 1350 , - 865 , - 1260 , - 1127 , - 466 , - 685 , - 376 , - 947 , - 990 , - 505 , - 900 , - 767 , - 106 , - 325 , - 16 , - 587 , - 630 , - 145 , - 540 , - 407 , - 1154 , - 1373 , - 1064 , - 227 , - 270 , - 1193 , - 180 , - 47 , - 794 , - 1013 , - 704 , - 1275 , - 1318 , - 833 , - 1228 , - 1095 , - 434 , - 653 , - 344 , - 915 , - 958 , - 473 , - 868 , - 735 , - 74 , - 293 , - 1392 , - 555 , - 598 , - 113 , - 508 , - 375 , - 1122 , - 1341 , - 1032 , - 195 , - 238 , - 1161 , - 148 , - 15 , - 762 , - 981 , - 672 , - 1243 , - 1286 , - 801 , - 1196 , - 1063 , - 402 , - 621 , - 312 , - 883 , - 926 , - 441 , - 836 , - 703 , - 42 , - 261 , - 1360 , - 523 , - 566 , - 81 , - 476 , - 343 , - 1090 , - 1309 , - 1000 , - 163 , - 206 , - 1129 , - 116 , - 1391 , - 730 , - 949 , - 640 , - 1211 , - 1254 , - 769 , - 1164 , - 1031 , - 370 , - 589 , - 280 , - 851 , - 894 , - 409 , - 804 , - 671 , - 10 , - 229 , - 1328 , - 491 , - 534 , - 49 , - 444 , - 311 , - 1058 , - 1277 , - 968 , - 131 , - 174 , - 1097 , - 84 , - 1359 , - 698 , - 917 , - 608 , - 1179 , - 1222 , - 737 , - 1132 , - 999 , - 338 , - 557 , - 248 , - 819 , - 862 , - 377 , - 772 , - 639 , - 1386 , - 197 , - 1296 , - 459 , - 502 , - 17 , - 412 , - 279 , - 1026 , - 1245 , - 936 , - 99 , - 142 , - 1065 , - 52 , - 1327 , - 666 , - 885 , - 576 , - 1147 , - 1190 , - 705 , - 1100 , - 967 , - 306 , - 525 , - 216 , - 787 , - 830 , - 345 , - 740 , - 607 , - 1354 , - 165 , - 1264 , - 427 , - 470 , - 1393 , - 380 , - 247 , - 994 , - 1213 , - 904 , - 67 , - 110 , - 1033 , - 20 , - 1295 , - 634 , - 853 , - 544 , - 1115 , - 1158 , - 673 , - 1068 , - 935 , - 274 , - 493 , - 184 , - 755 , - 798 , - 313 , - 708 , - 575 , - 1322 , - 133 , - 1232 , - 395 , - 438 , - 1361 , - 348 , - 215 , - 962 , - 1181 , - 872 , - 35 , - 78 , - 1001 , - 1396 , - 1263 , - 602 , - 821 , - 512 , - 1083 , - 1126 , - 641 , - 1036 , - 903 , - 242 , - 461 , - 152 , - 723 , - 766 , - 281 , - 676 , - 543 , - 1290 , - 101 , - 1200 , - 363 , - 406 , - 1329 , - 316 , - 183 , - 930 , - 1149 , - 840 , - 3 , - 46 , - 969 , - 1364 , - 1231 , - 570 , - 789 , - 480 , - 1051 , - 1094 , - 609 , - 1004 , - 871 , - 210 , - 429 , - 120 , - 691 , - 734 , - 249 , - 644 , - 511 , - 1258 , - 69 , - 1168 , - 331 , - 374 , - 1297 , - 284 , - 151 , - 898 , - 1117 , - 808 , - 1379 , - 14 , - 937 , - 1332 , - 1199 , - 538 , - 757 , - 448 , - 1019 , - 1062 , - 577 , - 972 , - 839 , - 178 , - 397 , - 88 , - 659 , - 702 , - 217 , - 612 , - 479 , - 1226 , - 37 , - 1136 , - 299 , - 342 , - 1265 , - 252 , - 119 , - 866 , - 1085 , - 776 , - 1347 , - 1390 , - 905 , - 1300 , - 1167 , - 506 , - 725 , - 416 , - 987 , - 1030 , - 545 , - 940 , - 807 , - 146 , - 365 , - 56 , - 627 , - 670 , - 185 , - 580 , - 447 , - 1194 , - 5 , - 1104 , - 267 , - 310 , - 1233 , - 220 , - 87 , - 834 , - 1053 , - 744 , - 1315 , - 1358 , - 873 , - 1268 , - 1135 , - 474 , - 693 , - 384 , - 955 , - 998 , - 513 , - 908 , - 775 , - 114 , - 333 , - 24 , - 595 , - 638 , - 153 , - 548 , - 415 , - 1162 , - 1381 , - 1072 , - 235 , - 278 , - 1201 , - 188 , - 55 , - 802 , - 1021 , - 712 , - 1283 , - 1326 , - 841 , - 1236 , - 1103 , - 442 , - 661 , - 352 , - 923 , - 966 , - 481 , - 876 , - 743 , - 82 , - 301 , - 1400 , - 563 , - 606 , - 121 , - 516 , - 383 , - 1130 , - 1349 , - 1040 , - 203 , - 246 , - 1169 , - 156 , - 23 , - 770 , - 989 , - 680 , - 1251 , - 1294 , - 809 , - 1204 , - 1071 , - 410 , - 629 , - 320 , - 891 , - 934 , - 449 , - 844 , - 711 , - 50 , - 269 , - 1368 , - 531 , - 574 , - 89 , - 484 , - 351 , - 1098 , - 1317 , - 1008 , - 171 , - 214 , - 1137 , - 124 , - 1399 , - 738 , - 957 , - 648 , - 1219 , - 1262 , - 777 , - 1172 , - 1039 , - 378 , - 597 , - 288 , - 859 , - 902 , - 417 , - 812 , - 679 , - 18 , - 237 , - 1336 , - 499 , - 542 , - 57 , - 452 , - 319 , - 1066 , - 1285 , - 976 , - 139 , - 182 , - 1105 , - 92 , - 1367 , - 706 , - 925 , - 616 , - 1187 , - 1230 , - 745 , - 1140 , - 1007 , - 346 , - 565 , - 256 , - 827 , - 870 , - 385 , - 780 , - 647 , - 1394 , - 205 , - 1304 , - 467 , - 510 , - 25 , - 420 , - 287 , - 1034 , - 1253 , - 944 , - 107 , - 150 , - 1073 , - 60 , - 1335 , - 674 , - 893 , - 584 , - 1155 , - 1198 , - 713 , - 1108 , - 975 , - 314 , - 533 , - 224 , - 795 , - 838 , - 353 , - 748 , - 615 , - 1362 , - 173 , - 1272 , - 435 , - 478 , - 1401 , - 388 , - 255 , - 1002 , - 1221 , - 912 , - 75 , - 118 , - 1041 , - 28 , - 1303 , - 642 , - 861 , - 552 , - 1123 , - 1166 , - 681 , - 1076 , - 943 , - 282 , - 501 , - 192 , - 763 , - 806 , - 321 , - 716 , - 583 , - 1330 , - 141 , - 1240 , - 403 , - 446 , - 1369 , - 356 , - 223 , - 970 , - 1189 , - 880 , - 43 , - 86 , - 1009 , - 1404 , - 1271 , - 610 , - 829 , - 520 , - 1091 , - 1134 , - 649 , - 1044 , - 911 , - 250 , - 469 , - 160 , - 731 , - 774 , - 289 , - 684 , - 551 , - 1298 , - 109 , - 1208 , - 371 , - 414 , - 1337 , - 324 , - 191 , - 938 , - 1157 , - 848 , - 11 , - 54 , - 977 , - 1372 , - 1239 , - 578 , - 797 , - 488 , - 1059 , - 1102 , - 617 , - 1012 , - 879 , - 218 , - 437 , - 128 , - 699 , - 742 , - 257 , - 652 , - 519 , - 1266 , - 77 , - 1176 , - 339 , - 382 , - 1305 , - 292 , - 159 , - 906 , - 1125 , - 816 , - 1387 , - 22 , - 945 , - 1340 , - 1207 , - 546 , - 765 , - 456 , - 1027 , - 1070 , - 585 , - 980 , - 847 , - 186 , - 405 , - 96 , - 667 , - 710 , - 225 , - 620 , - 487 , - 1234 , - 45 , - 1144 , - 307 , - 350 , - 1273 , - 260 , - 127 , - 874 , - 1093 , - 784 , - 1355 , - 1398 , - 913 , - 1308 , - 1175 , - 514 , - 733 , - 424 , - 995 , - 1038 , - 553 , - 948 , - 815 , - 154 , - 373 , - 64 , - 635 , - 678 , - 193 , - 588 , - 455 , - 1202 , - 13 , - 1112 , - 275 , - 318 , - 1241 , - 228 , - 95 , - 842 , - 1061 , - 752 , - 1323 , - 1366 , - 881 , - 1276 , - 1143 , - 482 , - 701 , - 392 , - 963 , - 1006 , - 521 , - 916 , - 783 , - 122 , - 341 , - 32 , - 603 , - 646 , - 161 , - 556 , - 423 , - 1170 , - 1389 , - 1080 , - 243 , - 286 , - 1209 , - 196 , - 63 , - 810 , - 1029 , - 720 , - 1291 , - 1334 , - 849 , - 1244 , - 1111 , - 450 , - 669 , - 360 , - 931 , - 974 , - 489 , - 884 , - 751 , - 90 , - 309 , - 0 , - 1169 , - 298 , - 267 , - 1076 , - 1285 , - 894 , - 1343 , - 1192 , - 441 , - 530 , - 19 , - 348 , - 77 , - 646 , - 615 , - 1424 , - 193 , - 1242 , - 251 , - 100 , - 789 , - 878 , - 367 , - 696 , - 425 , - 994 , - 963 , - 332 , - 541 , - 150 , - 599 , - 448 , - 1137 , - 1226 , - 715 , - 1044 , - 773 , - 1342 , - 1311 , - 680 , - 889 , - 498 , - 947 , - 796 , - 45 , - 134 , - 1063 , - 1392 , - 1121 , - 250 , - 219 , - 1028 , - 1237 , - 846 , - 1295 , - 1144 , - 393 , - 482 , - 1411 , - 300 , - 29 , - 598 , - 567 , - 1376 , - 145 , - 1194 , - 203 , - 52 , - 741 , - 830 , - 319 , - 648 , - 377 , - 946 , - 915 , - 284 , - 493 , - 102 , - 551 , - 400 , - 1089 , - 1178 , - 667 , - 996 , - 725 , - 1294 , - 1263 , - 632 , - 841 , - 450 , - 899 , - 748 , - 1437 , - 86 , - 1015 , - 1344 , - 1073 , - 202 , - 171 , - 980 , - 1189 , - 798 , - 1247 , - 1096 , - 345 , - 434 , - 1363 , - 252 , - 1421 , - 550 , - 519 , - 1328 , - 97 , - 1146 , - 155 , - 4 , - 693 , - 782 , - 271 , - 600 , - 329 , - 898 , - 867 , - 236 , - 445 , - 54 , - 503 , - 352 , - 1041 , - 1130 , - 619 , - 948 , - 677 , - 1246 , - 1215 , - 584 , - 793 , - 402 , - 851 , - 700 , - 1389 , - 38 , - 967 , - 1296 , - 1025 , - 154 , - 123 , - 932 , - 1141 , - 750 , - 1199 , - 1048 , - 297 , - 386 , - 1315 , - 204 , - 1373 , - 502 , - 471 , - 1280 , - 49 , - 1098 , - 107 , - 1396 , - 645 , - 734 , - 223 , - 552 , - 281 , - 850 , - 819 , - 188 , - 397 , - 6 , - 455 , - 304 , - 993 , - 1082 , - 571 , - 900 , - 629 , - 1198 , - 1167 , - 536 , - 745 , - 354 , - 803 , - 652 , - 1341 , - 1430 , - 919 , - 1248 , - 977 , - 106 , - 75 , - 884 , - 1093 , - 702 , - 1151 , - 1000 , - 249 , - 338 , - 1267 , - 156 , - 1325 , - 454 , - 423 , - 1232 , - 1 , - 1050 , - 59 , - 1348 , - 597 , - 686 , - 175 , - 504 , - 233 , - 802 , - 771 , - 140 , - 349 , - 1398 , - 407 , - 256 , - 945 , - 1034 , - 523 , - 852 , - 581 , - 1150 , - 1119 , - 488 , - 697 , - 306 , - 755 , - 604 , - 1293 , - 1382 , - 871 , - 1200 , - 929 , - 58 , - 27 , - 836 , - 1045 , - 654 , - 1103 , - 952 , - 201 , - 290 , - 1219 , - 108 , - 1277 , - 406 , - 375 , - 1184 , - 1393 , - 1002 , - 11 , - 1300 , - 549 , - 638 , - 127 , - 456 , - 185 , - 754 , - 723 , - 92 , - 301 , - 1350 , - 359 , - 208 , - 897 , - 986 , - 475 , - 804 , - 533 , - 1102 , - 1071 , - 440 , - 649 , - 258 , - 707 , - 556 , - 1245 , - 1334 , - 823 , - 1152 , - 881 , - 10 , - 1419 , - 788 , - 997 , - 606 , - 1055 , - 904 , - 153 , - 242 , - 1171 , - 60 , - 1229 , - 358 , - 327 , - 1136 , - 1345 , - 954 , - 1403 , - 1252 , - 501 , - 590 , - 79 , - 408 , - 137 , - 706 , - 675 , - 44 , - 253 , - 1302 , - 311 , - 160 , - 849 , - 938 , - 427 , - 756 , - 485 , - 1054 , - 1023 , - 392 , - 601 , - 210 , - 659 , - 508 , - 1197 , - 1286 , - 775 , - 1104 , - 833 , - 1402 , - 1371 , - 740 , - 949 , - 558 , - 1007 , - 856 , - 105 , - 194 , - 1123 , - 12 , - 1181 , - 310 , - 279 , - 1088 , - 1297 , - 906 , - 1355 , - 1204 , - 453 , - 542 , - 31 , - 360 , - 89 , - 658 , - 627 , - 1436 , - 205 , - 1254 , - 263 , - 112 , - 801 , - 890 , - 379 , - 708 , - 437 , - 1006 , - 975 , - 344 , - 553 , - 162 , - 611 , - 460 , - 1149 , - 1238 , - 727 , - 1056 , - 785 , - 1354 , - 1323 , - 692 , - 901 , - 510 , - 959 , - 808 , - 57 , - 146 , - 1075 , - 1404 , - 1133 , - 262 , - 231 , - 1040 , - 1249 , - 858 , - 1307 , - 1156 , - 405 , - 494 , - 1423 , - 312 , - 41 , - 610 , - 579 , - 1388 , - 157 , - 1206 , - 215 , - 64 , - 753 , - 842 , - 331 , - 660 , - 389 , - 958 , - 927 , - 296 , - 505 , - 114 , - 563 , - 412 , - 1101 , - 1190 , - 679 , - 1008 , - 737 , - 1306 , - 1275 , - 644 , - 853 , - 462 , - 911 , - 760 , - 9 , - 98 , - 1027 , - 1356 , - 1085 , - 214 , - 183 , - 992 , - 1201 , - 810 , - 1259 , - 1108 , - 357 , - 446 , - 1375 , - 264 , - 1433 , - 562 , - 531 , - 1340 , - 109 , - 1158 , - 167 , - 16 , - 705 , - 794 , - 283 , - 612 , - 341 , - 910 , - 879 , - 248 , - 457 , - 66 , - 515 , - 364 , - 1053 , - 1142 , - 631 , - 960 , - 689 , - 1258 , - 1227 , - 596 , - 805 , - 414 , - 863 , - 712 , - 1401 , - 50 , - 979 , - 1308 , - 1037 , - 166 , - 135 , - 944 , - 1153 , - 762 , - 1211 , - 1060 , - 309 , - 398 , - 1327 , - 216 , - 1385 , - 514 , - 483 , - 1292 , - 61 , - 1110 , - 119 , - 1408 , - 657 , - 746 , - 235 , - 564 , - 293 , - 862 , - 831 , - 200 , - 409 , - 18 , - 467 , - 316 , - 1005 , - 1094 , - 583 , - 912 , - 641 , - 1210 , - 1179 , - 548 , - 757 , - 366 , - 815 , - 664 , - 1353 , - 2 , - 931 , - 1260 , - 989 , - 118 , - 87 , - 896 , - 1105 , - 714 , - 1163 , - 1012 , - 261 , - 350 , - 1279 , - 168 , - 1337 , - 466 , - 435 , - 1244 , - 13 , - 1062 , - 71 , - 1360 , - 609 , - 698 , - 187 , - 516 , - 245 , - 814 , - 783 , - 152 , - 361 , - 1410 , - 419 , - 268 , - 957 , - 1046 , - 535 , - 864 , - 593 , - 1162 , - 1131 , - 500 , - 709 , - 318 , - 767 , - 616 , - 1305 , - 1394 , - 883 , - 1212 , - 941 , - 70 , - 39 , - 848 , - 1057 , - 666 , - 1115 , - 964 , - 213 , - 302 , - 1231 , - 120 , - 1289 , - 418 , - 387 , - 1196 , - 1405 , - 1014 , - 23 , - 1312 , - 561 , - 650 , - 139 , - 468 , - 197 , - 766 , - 735 , - 104 , - 313 , - 1362 , - 371 , - 220 , - 909 , - 998 , - 487 , - 816 , - 545 , - 1114 , - 1083 , - 452 , - 661 , - 270 , - 719 , - 568 , - 1257 , - 1346 , - 835 , - 1164 , - 893 , - 22 , - 1431 , - 800 , - 1009 , - 618 , - 1067 , - 916 , - 165 , - 254 , - 1183 , - 72 , - 1241 , - 370 , - 339 , - 1148 , - 1357 , - 966 , - 1415 , - 1264 , - 513 , - 602 , - 91 , - 420 , - 149 , - 718 , - 687 , - 56 , - 265 , - 1314 , - 323 , - 172 , - 861 , - 950 , - 439 , - 768 , - 497 , - 1066 , - 1035 , - 404 , - 613 , - 222 , - 671 , - 520 , - 1209 , - 1298 , - 787 , - 1116 , - 845 , - 1414 , - 1383 , - 752 , - 961 , - 570 , - 1019 , - 868 , - 117 , - 206 , - 1135 , - 24 , - 1193 , - 322 , - 291 , - 1100 , - 1309 , - 918 , - 1367 , - 1216 , - 465 , - 554 , - 43 , - 372 , - 101 , - 670 , - 639 , - 8 , - 217 , - 1266 , - 275 , - 124 , - 813 , - 902 , - 391 , - 720 , - 449 , - 1018 , - 987 , - 356 , - 565 , - 174 , - 623 , - 472 , - 1161 , - 1250 , - 739 , - 1068 , - 797 , - 1366 , - 1335 , - 704 , - 913 , - 522 , - 971 , - 820 , - 69 , - 158 , - 1087 , - 1416 , - 1145 , - 274 , - 243 , - 1052 , - 1261 , - 870 , - 1319 , - 1168 , - 417 , - 506 , - 1435 , - 324 , - 53 , - 622 , - 591 , - 1400 , - 169 , - 1218 , - 227 , - 76 , - 765 , - 854 , - 343 , - 672 , - 401 , - 970 , - 939 , - 308 , - 517 , - 126 , - 575 , - 424 , - 1113 , - 1202 , - 691 , - 1020 , - 749 , - 1318 , - 1287 , - 656 , - 865 , - 474 , - 923 , - 772 , - 21 , - 110 , - 1039 , - 1368 , - 1097 , - 226 , - 195 , - 1004 , - 1213 , - 822 , - 1271 , - 1120 , - 369 , - 458 , - 1387 , - 276 , - 5 , - 574 , - 543 , - 1352 , - 121 , - 1170 , - 179 , - 28 , - 717 , - 806 , - 295 , - 624 , - 353 , - 922 , - 891 , - 260 , - 469 , - 78 , - 527 , - 376 , - 1065 , - 1154 , - 643 , - 972 , - 701 , - 1270 , - 1239 , - 608 , - 817 , - 426 , - 875 , - 724 , - 1413 , - 62 , - 991 , - 1320 , - 1049 , - 178 , - 147 , - 956 , - 1165 , - 774 , - 1223 , - 1072 , - 321 , - 410 , - 1339 , - 228 , - 1397 , - 526 , - 495 , - 1304 , - 73 , - 1122 , - 131 , - 1420 , - 669 , - 758 , - 247 , - 576 , - 305 , - 874 , - 843 , - 212 , - 421 , - 30 , - 479 , - 328 , - 1017 , - 1106 , - 595 , - 924 , - 653 , - 1222 , - 1191 , - 560 , - 769 , - 378 , - 827 , - 676 , - 1365 , - 14 , - 943 , - 1272 , - 1001 , - 130 , - 99 , - 908 , - 1117 , - 726 , - 1175 , - 1024 , - 273 , - 362 , - 1291 , - 180 , - 1349 , - 478 , - 447 , - 1256 , - 25 , - 1074 , - 83 , - 1372 , - 621 , - 710 , - 199 , - 528 , - 257 , - 826 , - 795 , - 164 , - 373 , - 1422 , - 431 , - 280 , - 969 , - 1058 , - 547 , - 876 , - 605 , - 1174 , - 1143 , - 512 , - 721 , - 330 , - 779 , - 628 , - 1317 , - 1406 , - 895 , - 1224 , - 953 , - 82 , - 51 , - 860 , - 1069 , - 678 , - 1127 , - 976 , - 225 , - 314 , - 1243 , - 132 , - 1301 , - 430 , - 399 , - 1208 , - 1417 , - 1026 , - 35 , - 1324 , - 573 , - 662 , - 151 , - 480 , - 209 , - 778 , - 747 , - 116 , - 325 , - 1374 , - 383 , - 232 , - 921 , - 1010 , - 499 , - 828 , - 557 , - 1126 , - 1095 , - 464 , - 673 , - 282 , - 731 , - 580 , - 1269 , - 1358 , - 847 , - 1176 , - 905 , - 34 , - 3 , - 812 , - 1021 , - 630 , - 1079 , - 928 , - 177 , - 266 , - 1195 , - 84 , - 1253 , - 382 , - 351 , - 1160 , - 1369 , - 978 , - 1427 , - 1276 , - 525 , - 614 , - 103 , - 432 , - 161 , - 730 , - 699 , - 68 , - 277 , - 1326 , - 335 , - 184 , - 873 , - 962 , - 451 , - 780 , - 509 , - 1078 , - 1047 , - 416 , - 625 , - 234 , - 683 , - 532 , - 1221 , - 1310 , - 799 , - 1128 , - 857 , - 1426 , - 1395 , - 764 , - 973 , - 582 , - 1031 , - 880 , - 129 , - 218 , - 1147 , - 36 , - 1205 , - 334 , - 303 , - 1112 , - 1321 , - 930 , - 1379 , - 1228 , - 477 , - 566 , - 55 , - 384 , - 113 , - 682 , - 651 , - 20 , - 229 , - 1278 , - 287 , - 136 , - 825 , - 914 , - 403 , - 732 , - 461 , - 1030 , - 999 , - 368 , - 577 , - 186 , - 635 , - 484 , - 1173 , - 1262 , - 751 , - 1080 , - 809 , - 1378 , - 1347 , - 716 , - 925 , - 534 , - 983 , - 832 , - 81 , - 170 , - 1099 , - 1428 , - 1157 , - 286 , - 255 , - 1064 , - 1273 , - 882 , - 1331 , - 1180 , - 429 , - 518 , - 7 , - 336 , - 65 , - 634 , - 603 , - 1412 , - 181 , - 1230 , - 239 , - 88 , - 777 , - 866 , - 355 , - 684 , - 413 , - 982 , - 951 , - 320 , - 529 , - 138 , - 587 , - 436 , - 1125 , - 1214 , - 703 , - 1032 , - 761 , - 1330 , - 1299 , - 668 , - 877 , - 486 , - 935 , - 784 , - 33 , - 122 , - 1051 , - 1380 , - 1109 , - 238 , - 207 , - 1016 , - 1225 , - 834 , - 1283 , - 1132 , - 381 , - 470 , - 1399 , - 288 , - 17 , - 586 , - 555 , - 1364 , - 133 , - 1182 , - 191 , - 40 , - 729 , - 818 , - 307 , - 636 , - 365 , - 934 , - 903 , - 272 , - 481 , - 90 , - 539 , - 388 , - 1077 , - 1166 , - 655 , - 984 , - 713 , - 1282 , - 1251 , - 620 , - 829 , - 438 , - 887 , - 736 , - 1425 , - 74 , - 1003 , - 1332 , - 1061 , - 190 , - 159 , - 968 , - 1177 , - 786 , - 1235 , - 1084 , - 333 , - 422 , - 1351 , - 240 , - 1409 , - 538 , - 507 , - 1316 , - 85 , - 1134 , - 143 , - 1432 , - 681 , - 770 , - 259 , - 588 , - 317 , - 886 , - 855 , - 224 , - 433 , - 42 , - 491 , - 340 , - 1029 , - 1118 , - 607 , - 936 , - 665 , - 1234 , - 1203 , - 572 , - 781 , - 390 , - 839 , - 688 , - 1377 , - 26 , - 955 , - 1284 , - 1013 , - 142 , - 111 , - 920 , - 1129 , - 738 , - 1187 , - 1036 , - 285 , - 374 , - 1303 , - 192 , - 1361 , - 490 , - 459 , - 1268 , - 37 , - 1086 , - 95 , - 1384 , - 633 , - 722 , - 211 , - 540 , - 269 , - 838 , - 807 , - 176 , - 385 , - 1434 , - 443 , - 292 , - 981 , - 1070 , - 559 , - 888 , - 617 , - 1186 , - 1155 , - 524 , - 733 , - 342 , - 791 , - 640 , - 1329 , - 1418 , - 907 , - 1236 , - 965 , - 94 , - 63 , - 872 , - 1081 , - 690 , - 1139 , - 988 , - 237 , - 326 , - 1255 , - 144 , - 1313 , - 442 , - 411 , - 1220 , - 1429 , - 1038 , - 47 , - 1336 , - 585 , - 674 , - 163 , - 492 , - 221 , - 790 , - 759 , - 128 , - 337 , - 1386 , - 395 , - 244 , - 933 , - 1022 , - 511 , - 840 , - 569 , - 1138 , - 1107 , - 476 , - 685 , - 294 , - 743 , - 592 , - 1281 , - 1370 , - 859 , - 1188 , - 917 , - 46 , - 15 , - 824 , - 1033 , - 642 , - 1091 , - 940 , - 189 , - 278 , - 1207 , - 96 , - 1265 , - 394 , - 363 , - 1172 , - 1381 , - 990 , - 1439 , - 1288 , - 537 , - 626 , - 115 , - 444 , - 173 , - 742 , - 711 , - 80 , - 289 , - 1338 , - 347 , - 196 , - 885 , - 974 , - 463 , - 792 , - 521 , - 1090 , - 1059 , - 428 , - 637 , - 246 , - 695 , - 544 , - 1233 , - 1322 , - 811 , - 1140 , - 869 , - 1438 , - 1407 , - 776 , - 985 , - 594 , - 1043 , - 892 , - 141 , - 230 , - 1159 , - 48 , - 1217 , - 346 , - 315 , - 1124 , - 1333 , - 942 , - 1391 , - 1240 , - 489 , - 578 , - 67 , - 396 , - 125 , - 694 , - 663 , - 32 , - 241 , - 1290 , - 299 , - 148 , - 837 , - 926 , - 415 , - 744 , - 473 , - 1042 , - 1011 , - 380 , - 589 , - 198 , - 647 , - 496 , - 1185 , - 1274 , - 763 , - 1092 , - 821 , - 1390 , - 1359 , - 728 , - 937 , - 546 , - 995 , - 844 , - 93 , - 182 , - 1111 , - 0 , - 1241 , - 90 , - 963 , - 916 , - 1421 , - 1006 , - 1143 , - 360 , - 129 , - 450 , - 1323 , - 1276 , - 309 , - 1366 , - 31 , - 720 , - 489 , - 810 , - 211 , - 164 , - 669 , - 254 , - 391 , - 1080 , - 849 , - 1170 , - 571 , - 524 , - 1029 , - 614 , - 751 , - 1440 , - 1209 , - 58 , - 931 , - 884 , - 1389 , - 974 , - 1111 , - 328 , - 97 , - 418 , - 1291 , - 1244 , - 277 , - 1334 , - 1471 , - 688 , - 457 , - 778 , - 179 , - 132 , - 637 , - 222 , - 359 , - 1048 , - 817 , - 1138 , - 539 , - 492 , - 997 , - 582 , - 719 , - 1408 , - 1177 , - 26 , - 899 , - 852 , - 1357 , - 942 , - 1079 , - 296 , - 65 , - 386 , - 1259 , - 1212 , - 245 , - 1302 , - 1439 , - 656 , - 425 , - 746 , - 147 , - 100 , - 605 , - 190 , - 327 , - 1016 , - 785 , - 1106 , - 507 , - 460 , - 965 , - 550 , - 687 , - 1376 , - 1145 , - 1466 , - 867 , - 820 , - 1325 , - 910 , - 1047 , - 264 , - 33 , - 354 , - 1227 , - 1180 , - 213 , - 1270 , - 1407 , - 624 , - 393 , - 714 , - 115 , - 68 , - 573 , - 158 , - 295 , - 984 , - 753 , - 1074 , - 475 , - 428 , - 933 , - 518 , - 655 , - 1344 , - 1113 , - 1434 , - 835 , - 788 , - 1293 , - 878 , - 1015 , - 232 , - 1 , - 322 , - 1195 , - 1148 , - 181 , - 1238 , - 1375 , - 592 , - 361 , - 682 , - 83 , - 36 , - 541 , - 126 , - 263 , - 952 , - 721 , - 1042 , - 443 , - 396 , - 901 , - 486 , - 623 , - 1312 , - 1081 , - 1402 , - 803 , - 756 , - 1261 , - 846 , - 983 , - 200 , - 1441 , - 290 , - 1163 , - 1116 , - 149 , - 1206 , - 1343 , - 560 , - 329 , - 650 , - 51 , - 4 , - 509 , - 94 , - 231 , - 920 , - 689 , - 1010 , - 411 , - 364 , - 869 , - 454 , - 591 , - 1280 , - 1049 , - 1370 , - 771 , - 724 , - 1229 , - 814 , - 951 , - 168 , - 1409 , - 258 , - 1131 , - 1084 , - 117 , - 1174 , - 1311 , - 528 , - 297 , - 618 , - 19 , - 1444 , - 477 , - 62 , - 199 , - 888 , - 657 , - 978 , - 379 , - 332 , - 837 , - 422 , - 559 , - 1248 , - 1017 , - 1338 , - 739 , - 692 , - 1197 , - 782 , - 919 , - 136 , - 1377 , - 226 , - 1099 , - 1052 , - 85 , - 1142 , - 1279 , - 496 , - 265 , - 586 , - 1459 , - 1412 , - 445 , - 30 , - 167 , - 856 , - 625 , - 946 , - 347 , - 300 , - 805 , - 390 , - 527 , - 1216 , - 985 , - 1306 , - 707 , - 660 , - 1165 , - 750 , - 887 , - 104 , - 1345 , - 194 , - 1067 , - 1020 , - 53 , - 1110 , - 1247 , - 464 , - 233 , - 554 , - 1427 , - 1380 , - 413 , - 1470 , - 135 , - 824 , - 593 , - 914 , - 315 , - 268 , - 773 , - 358 , - 495 , - 1184 , - 953 , - 1274 , - 675 , - 628 , - 1133 , - 718 , - 855 , - 72 , - 1313 , - 162 , - 1035 , - 988 , - 21 , - 1078 , - 1215 , - 432 , - 201 , - 522 , - 1395 , - 1348 , - 381 , - 1438 , - 103 , - 792 , - 561 , - 882 , - 283 , - 236 , - 741 , - 326 , - 463 , - 1152 , - 921 , - 1242 , - 643 , - 596 , - 1101 , - 686 , - 823 , - 40 , - 1281 , - 130 , - 1003 , - 956 , - 1461 , - 1046 , - 1183 , - 400 , - 169 , - 490 , - 1363 , - 1316 , - 349 , - 1406 , - 71 , - 760 , - 529 , - 850 , - 251 , - 204 , - 709 , - 294 , - 431 , - 1120 , - 889 , - 1210 , - 611 , - 564 , - 1069 , - 654 , - 791 , - 8 , - 1249 , - 98 , - 971 , - 924 , - 1429 , - 1014 , - 1151 , - 368 , - 137 , - 458 , - 1331 , - 1284 , - 317 , - 1374 , - 39 , - 728 , - 497 , - 818 , - 219 , - 172 , - 677 , - 262 , - 399 , - 1088 , - 857 , - 1178 , - 579 , - 532 , - 1037 , - 622 , - 759 , - 1448 , - 1217 , - 66 , - 939 , - 892 , - 1397 , - 982 , - 1119 , - 336 , - 105 , - 426 , - 1299 , - 1252 , - 285 , - 1342 , - 7 , - 696 , - 465 , - 786 , - 187 , - 140 , - 645 , - 230 , - 367 , - 1056 , - 825 , - 1146 , - 547 , - 500 , - 1005 , - 590 , - 727 , - 1416 , - 1185 , - 34 , - 907 , - 860 , - 1365 , - 950 , - 1087 , - 304 , - 73 , - 394 , - 1267 , - 1220 , - 253 , - 1310 , - 1447 , - 664 , - 433 , - 754 , - 155 , - 108 , - 613 , - 198 , - 335 , - 1024 , - 793 , - 1114 , - 515 , - 468 , - 973 , - 558 , - 695 , - 1384 , - 1153 , - 2 , - 875 , - 828 , - 1333 , - 918 , - 1055 , - 272 , - 41 , - 362 , - 1235 , - 1188 , - 221 , - 1278 , - 1415 , - 632 , - 401 , - 722 , - 123 , - 76 , - 581 , - 166 , - 303 , - 992 , - 761 , - 1082 , - 483 , - 436 , - 941 , - 526 , - 663 , - 1352 , - 1121 , - 1442 , - 843 , - 796 , - 1301 , - 886 , - 1023 , - 240 , - 9 , - 330 , - 1203 , - 1156 , - 189 , - 1246 , - 1383 , - 600 , - 369 , - 690 , - 91 , - 44 , - 549 , - 134 , - 271 , - 960 , - 729 , - 1050 , - 451 , - 404 , - 909 , - 494 , - 631 , - 1320 , - 1089 , - 1410 , - 811 , - 764 , - 1269 , - 854 , - 991 , - 208 , - 1449 , - 298 , - 1171 , - 1124 , - 157 , - 1214 , - 1351 , - 568 , - 337 , - 658 , - 59 , - 12 , - 517 , - 102 , - 239 , - 928 , - 697 , - 1018 , - 419 , - 372 , - 877 , - 462 , - 599 , - 1288 , - 1057 , - 1378 , - 779 , - 732 , - 1237 , - 822 , - 959 , - 176 , - 1417 , - 266 , - 1139 , - 1092 , - 125 , - 1182 , - 1319 , - 536 , - 305 , - 626 , - 27 , - 1452 , - 485 , - 70 , - 207 , - 896 , - 665 , - 986 , - 387 , - 340 , - 845 , - 430 , - 567 , - 1256 , - 1025 , - 1346 , - 747 , - 700 , - 1205 , - 790 , - 927 , - 144 , - 1385 , - 234 , - 1107 , - 1060 , - 93 , - 1150 , - 1287 , - 504 , - 273 , - 594 , - 1467 , - 1420 , - 453 , - 38 , - 175 , - 864 , - 633 , - 954 , - 355 , - 308 , - 813 , - 398 , - 535 , - 1224 , - 993 , - 1314 , - 715 , - 668 , - 1173 , - 758 , - 895 , - 112 , - 1353 , - 202 , - 1075 , - 1028 , - 61 , - 1118 , - 1255 , - 472 , - 241 , - 562 , - 1435 , - 1388 , - 421 , - 6 , - 143 , - 832 , - 601 , - 922 , - 323 , - 276 , - 781 , - 366 , - 503 , - 1192 , - 961 , - 1282 , - 683 , - 636 , - 1141 , - 726 , - 863 , - 80 , - 1321 , - 170 , - 1043 , - 996 , - 29 , - 1086 , - 1223 , - 440 , - 209 , - 530 , - 1403 , - 1356 , - 389 , - 1446 , - 111 , - 800 , - 569 , - 890 , - 291 , - 244 , - 749 , - 334 , - 471 , - 1160 , - 929 , - 1250 , - 651 , - 604 , - 1109 , - 694 , - 831 , - 48 , - 1289 , - 138 , - 1011 , - 964 , - 1469 , - 1054 , - 1191 , - 408 , - 177 , - 498 , - 1371 , - 1324 , - 357 , - 1414 , - 79 , - 768 , - 537 , - 858 , - 259 , - 212 , - 717 , - 302 , - 439 , - 1128 , - 897 , - 1218 , - 619 , - 572 , - 1077 , - 662 , - 799 , - 16 , - 1257 , - 106 , - 979 , - 932 , - 1437 , - 1022 , - 1159 , - 376 , - 145 , - 466 , - 1339 , - 1292 , - 325 , - 1382 , - 47 , - 736 , - 505 , - 826 , - 227 , - 180 , - 685 , - 270 , - 407 , - 1096 , - 865 , - 1186 , - 587 , - 540 , - 1045 , - 630 , - 767 , - 1456 , - 1225 , - 74 , - 947 , - 900 , - 1405 , - 990 , - 1127 , - 344 , - 113 , - 434 , - 1307 , - 1260 , - 293 , - 1350 , - 15 , - 704 , - 473 , - 794 , - 195 , - 148 , - 653 , - 238 , - 375 , - 1064 , - 833 , - 1154 , - 555 , - 508 , - 1013 , - 598 , - 735 , - 1424 , - 1193 , - 42 , - 915 , - 868 , - 1373 , - 958 , - 1095 , - 312 , - 81 , - 402 , - 1275 , - 1228 , - 261 , - 1318 , - 1455 , - 672 , - 441 , - 762 , - 163 , - 116 , - 621 , - 206 , - 343 , - 1032 , - 801 , - 1122 , - 523 , - 476 , - 981 , - 566 , - 703 , - 1392 , - 1161 , - 10 , - 883 , - 836 , - 1341 , - 926 , - 1063 , - 280 , - 49 , - 370 , - 1243 , - 1196 , - 229 , - 1286 , - 1423 , - 640 , - 409 , - 730 , - 131 , - 84 , - 589 , - 174 , - 311 , - 1000 , - 769 , - 1090 , - 491 , - 444 , - 949 , - 534 , - 671 , - 1360 , - 1129 , - 1450 , - 851 , - 804 , - 1309 , - 894 , - 1031 , - 248 , - 17 , - 338 , - 1211 , - 1164 , - 197 , - 1254 , - 1391 , - 608 , - 377 , - 698 , - 99 , - 52 , - 557 , - 142 , - 279 , - 968 , - 737 , - 1058 , - 459 , - 412 , - 917 , - 502 , - 639 , - 1328 , - 1097 , - 1418 , - 819 , - 772 , - 1277 , - 862 , - 999 , - 216 , - 1457 , - 306 , - 1179 , - 1132 , - 165 , - 1222 , - 1359 , - 576 , - 345 , - 666 , - 67 , - 20 , - 525 , - 110 , - 247 , - 936 , - 705 , - 1026 , - 427 , - 380 , - 885 , - 470 , - 607 , - 1296 , - 1065 , - 1386 , - 787 , - 740 , - 1245 , - 830 , - 967 , - 184 , - 1425 , - 274 , - 1147 , - 1100 , - 133 , - 1190 , - 1327 , - 544 , - 313 , - 634 , - 35 , - 1460 , - 493 , - 78 , - 215 , - 904 , - 673 , - 994 , - 395 , - 348 , - 853 , - 438 , - 575 , - 1264 , - 1033 , - 1354 , - 755 , - 708 , - 1213 , - 798 , - 935 , - 152 , - 1393 , - 242 , - 1115 , - 1068 , - 101 , - 1158 , - 1295 , - 512 , - 281 , - 602 , - 3 , - 1428 , - 461 , - 46 , - 183 , - 872 , - 641 , - 962 , - 363 , - 316 , - 821 , - 406 , - 543 , - 1232 , - 1001 , - 1322 , - 723 , - 676 , - 1181 , - 766 , - 903 , - 120 , - 1361 , - 210 , - 1083 , - 1036 , - 69 , - 1126 , - 1263 , - 480 , - 249 , - 570 , - 1443 , - 1396 , - 429 , - 14 , - 151 , - 840 , - 609 , - 930 , - 331 , - 284 , - 789 , - 374 , - 511 , - 1200 , - 969 , - 1290 , - 691 , - 644 , - 1149 , - 734 , - 871 , - 88 , - 1329 , - 178 , - 1051 , - 1004 , - 37 , - 1094 , - 1231 , - 448 , - 217 , - 538 , - 1411 , - 1364 , - 397 , - 1454 , - 119 , - 808 , - 577 , - 898 , - 299 , - 252 , - 757 , - 342 , - 479 , - 1168 , - 937 , - 1258 , - 659 , - 612 , - 1117 , - 702 , - 839 , - 56 , - 1297 , - 146 , - 1019 , - 972 , - 5 , - 1062 , - 1199 , - 416 , - 185 , - 506 , - 1379 , - 1332 , - 365 , - 1422 , - 87 , - 776 , - 545 , - 866 , - 267 , - 220 , - 725 , - 310 , - 447 , - 1136 , - 905 , - 1226 , - 627 , - 580 , - 1085 , - 670 , - 807 , - 24 , - 1265 , - 114 , - 987 , - 940 , - 1445 , - 1030 , - 1167 , - 384 , - 153 , - 474 , - 1347 , - 1300 , - 333 , - 1390 , - 55 , - 744 , - 513 , - 834 , - 235 , - 188 , - 693 , - 278 , - 415 , - 1104 , - 873 , - 1194 , - 595 , - 548 , - 1053 , - 638 , - 775 , - 1464 , - 1233 , - 82 , - 955 , - 908 , - 1413 , - 998 , - 1135 , - 352 , - 121 , - 442 , - 1315 , - 1268 , - 301 , - 1358 , - 23 , - 712 , - 481 , - 802 , - 203 , - 156 , - 661 , - 246 , - 383 , - 1072 , - 841 , - 1162 , - 563 , - 516 , - 1021 , - 606 , - 743 , - 1432 , - 1201 , - 50 , - 923 , - 876 , - 1381 , - 966 , - 1103 , - 320 , - 89 , - 410 , - 1283 , - 1236 , - 269 , - 1326 , - 1463 , - 680 , - 449 , - 770 , - 171 , - 124 , - 629 , - 214 , - 351 , - 1040 , - 809 , - 1130 , - 531 , - 484 , - 989 , - 574 , - 711 , - 1400 , - 1169 , - 18 , - 891 , - 844 , - 1349 , - 934 , - 1071 , - 288 , - 57 , - 378 , - 1251 , - 1204 , - 237 , - 1294 , - 1431 , - 648 , - 417 , - 738 , - 139 , - 92 , - 597 , - 182 , - 319 , - 1008 , - 777 , - 1098 , - 499 , - 452 , - 957 , - 542 , - 679 , - 1368 , - 1137 , - 1458 , - 859 , - 812 , - 1317 , - 902 , - 1039 , - 256 , - 25 , - 346 , - 1219 , - 1172 , - 205 , - 1262 , - 1399 , - 616 , - 385 , - 706 , - 107 , - 60 , - 565 , - 150 , - 287 , - 976 , - 745 , - 1066 , - 467 , - 420 , - 925 , - 510 , - 647 , - 1336 , - 1105 , - 1426 , - 827 , - 780 , - 1285 , - 870 , - 1007 , - 224 , - 1465 , - 314 , - 1187 , - 1140 , - 173 , - 1230 , - 1367 , - 584 , - 353 , - 674 , - 75 , - 28 , - 533 , - 118 , - 255 , - 944 , - 713 , - 1034 , - 435 , - 388 , - 893 , - 478 , - 615 , - 1304 , - 1073 , - 1394 , - 795 , - 748 , - 1253 , - 838 , - 975 , - 192 , - 1433 , - 282 , - 1155 , - 1108 , - 141 , - 1198 , - 1335 , - 552 , - 321 , - 642 , - 43 , - 1468 , - 501 , - 86 , - 223 , - 912 , - 681 , - 1002 , - 403 , - 356 , - 861 , - 446 , - 583 , - 1272 , - 1041 , - 1362 , - 763 , - 716 , - 1221 , - 806 , - 943 , - 160 , - 1401 , - 250 , - 1123 , - 1076 , - 109 , - 1166 , - 1303 , - 520 , - 289 , - 610 , - 11 , - 1436 , - 469 , - 54 , - 191 , - 880 , - 649 , - 970 , - 371 , - 324 , - 829 , - 414 , - 551 , - 1240 , - 1009 , - 1330 , - 731 , - 684 , - 1189 , - 774 , - 911 , - 128 , - 1369 , - 218 , - 1091 , - 1044 , - 77 , - 1134 , - 1271 , - 488 , - 257 , - 578 , - 1451 , - 1404 , - 437 , - 22 , - 159 , - 848 , - 617 , - 938 , - 339 , - 292 , - 797 , - 382 , - 519 , - 1208 , - 977 , - 1298 , - 699 , - 652 , - 1157 , - 742 , - 879 , - 96 , - 1337 , - 186 , - 1059 , - 1012 , - 45 , - 1102 , - 1239 , - 456 , - 225 , - 546 , - 1419 , - 1372 , - 405 , - 1462 , - 127 , - 816 , - 585 , - 906 , - 307 , - 260 , - 765 , - 350 , - 487 , - 1176 , - 945 , - 1266 , - 667 , - 620 , - 1125 , - 710 , - 847 , - 64 , - 1305 , - 154 , - 1027 , - 980 , - 13 , - 1070 , - 1207 , - 424 , - 193 , - 514 , - 1387 , - 1340 , - 373 , - 1430 , - 95 , - 784 , - 553 , - 874 , - 275 , - 228 , - 733 , - 318 , - 455 , - 1144 , - 913 , - 1234 , - 635 , - 588 , - 1093 , - 678 , - 815 , - 32 , - 1273 , - 122 , - 995 , - 948 , - 1453 , - 1038 , - 1175 , - 392 , - 161 , - 482 , - 1355 , - 1308 , - 341 , - 1398 , - 63 , - 752 , - 521 , - 842 , - 243 , - 196 , - 701 , - 286 , - 423 , - 1112 , - 881 , - 1202 , - 603 , - 556 , - 1061 , - 646 , - 783 , - 0 , - 1011 , - 330 , - 213 , - 1412 , - 167 , - 238 , - 873 , - 1320 , - 827 , - 146 , - 29 , - 1228 , - 1487 , - 54 , - 689 , - 1136 , - 643 , - 1466 , - 1349 , - 1044 , - 1303 , - 1374 , - 505 , - 952 , - 459 , - 1282 , - 1165 , - 860 , - 1119 , - 1190 , - 321 , - 768 , - 275 , - 1098 , - 981 , - 676 , - 935 , - 1006 , - 137 , - 584 , - 91 , - 914 , - 797 , - 492 , - 751 , - 822 , - 1457 , - 400 , - 1411 , - 730 , - 613 , - 308 , - 567 , - 638 , - 1273 , - 216 , - 1227 , - 546 , - 429 , - 124 , - 383 , - 454 , - 1089 , - 32 , - 1043 , - 362 , - 245 , - 1444 , - 199 , - 270 , - 905 , - 1352 , - 859 , - 178 , - 61 , - 1260 , - 15 , - 86 , - 721 , - 1168 , - 675 , - 1498 , - 1381 , - 1076 , - 1335 , - 1406 , - 537 , - 984 , - 491 , - 1314 , - 1197 , - 892 , - 1151 , - 1222 , - 353 , - 800 , - 307 , - 1130 , - 1013 , - 708 , - 967 , - 1038 , - 169 , - 616 , - 123 , - 946 , - 829 , - 524 , - 783 , - 854 , - 1489 , - 432 , - 1443 , - 762 , - 645 , - 340 , - 599 , - 670 , - 1305 , - 248 , - 1259 , - 578 , - 461 , - 156 , - 415 , - 486 , - 1121 , - 64 , - 1075 , - 394 , - 277 , - 1476 , - 231 , - 302 , - 937 , - 1384 , - 891 , - 210 , - 93 , - 1292 , - 47 , - 118 , - 753 , - 1200 , - 707 , - 26 , - 1413 , - 1108 , - 1367 , - 1438 , - 569 , - 1016 , - 523 , - 1346 , - 1229 , - 924 , - 1183 , - 1254 , - 385 , - 832 , - 339 , - 1162 , - 1045 , - 740 , - 999 , - 1070 , - 201 , - 648 , - 155 , - 978 , - 861 , - 556 , - 815 , - 886 , - 17 , - 464 , - 1475 , - 794 , - 677 , - 372 , - 631 , - 702 , - 1337 , - 280 , - 1291 , - 610 , - 493 , - 188 , - 447 , - 518 , - 1153 , - 96 , - 1107 , - 426 , - 309 , - 4 , - 263 , - 334 , - 969 , - 1416 , - 923 , - 242 , - 125 , - 1324 , - 79 , - 150 , - 785 , - 1232 , - 739 , - 58 , - 1445 , - 1140 , - 1399 , - 1470 , - 601 , - 1048 , - 555 , - 1378 , - 1261 , - 956 , - 1215 , - 1286 , - 417 , - 864 , - 371 , - 1194 , - 1077 , - 772 , - 1031 , - 1102 , - 233 , - 680 , - 187 , - 1010 , - 893 , - 588 , - 847 , - 918 , - 49 , - 496 , - 3 , - 826 , - 709 , - 404 , - 663 , - 734 , - 1369 , - 312 , - 1323 , - 642 , - 525 , - 220 , - 479 , - 550 , - 1185 , - 128 , - 1139 , - 458 , - 341 , - 36 , - 295 , - 366 , - 1001 , - 1448 , - 955 , - 274 , - 157 , - 1356 , - 111 , - 182 , - 817 , - 1264 , - 771 , - 90 , - 1477 , - 1172 , - 1431 , - 1502 , - 633 , - 1080 , - 587 , - 1410 , - 1293 , - 988 , - 1247 , - 1318 , - 449 , - 896 , - 403 , - 1226 , - 1109 , - 804 , - 1063 , - 1134 , - 265 , - 712 , - 219 , - 1042 , - 925 , - 620 , - 879 , - 950 , - 81 , - 528 , - 35 , - 858 , - 741 , - 436 , - 695 , - 766 , - 1401 , - 344 , - 1355 , - 674 , - 557 , - 252 , - 511 , - 582 , - 1217 , - 160 , - 1171 , - 490 , - 373 , - 68 , - 327 , - 398 , - 1033 , - 1480 , - 987 , - 306 , - 189 , - 1388 , - 143 , - 214 , - 849 , - 1296 , - 803 , - 122 , - 5 , - 1204 , - 1463 , - 30 , - 665 , - 1112 , - 619 , - 1442 , - 1325 , - 1020 , - 1279 , - 1350 , - 481 , - 928 , - 435 , - 1258 , - 1141 , - 836 , - 1095 , - 1166 , - 297 , - 744 , - 251 , - 1074 , - 957 , - 652 , - 911 , - 982 , - 113 , - 560 , - 67 , - 890 , - 773 , - 468 , - 727 , - 798 , - 1433 , - 376 , - 1387 , - 706 , - 589 , - 284 , - 543 , - 614 , - 1249 , - 192 , - 1203 , - 522 , - 405 , - 100 , - 359 , - 430 , - 1065 , - 8 , - 1019 , - 338 , - 221 , - 1420 , - 175 , - 246 , - 881 , - 1328 , - 835 , - 154 , - 37 , - 1236 , - 1495 , - 62 , - 697 , - 1144 , - 651 , - 1474 , - 1357 , - 1052 , - 1311 , - 1382 , - 513 , - 960 , - 467 , - 1290 , - 1173 , - 868 , - 1127 , - 1198 , - 329 , - 776 , - 283 , - 1106 , - 989 , - 684 , - 943 , - 1014 , - 145 , - 592 , - 99 , - 922 , - 805 , - 500 , - 759 , - 830 , - 1465 , - 408 , - 1419 , - 738 , - 621 , - 316 , - 575 , - 646 , - 1281 , - 224 , - 1235 , - 554 , - 437 , - 132 , - 391 , - 462 , - 1097 , - 40 , - 1051 , - 370 , - 253 , - 1452 , - 207 , - 278 , - 913 , - 1360 , - 867 , - 186 , - 69 , - 1268 , - 23 , - 94 , - 729 , - 1176 , - 683 , - 2 , - 1389 , - 1084 , - 1343 , - 1414 , - 545 , - 992 , - 499 , - 1322 , - 1205 , - 900 , - 1159 , - 1230 , - 361 , - 808 , - 315 , - 1138 , - 1021 , - 716 , - 975 , - 1046 , - 177 , - 624 , - 131 , - 954 , - 837 , - 532 , - 791 , - 862 , - 1497 , - 440 , - 1451 , - 770 , - 653 , - 348 , - 607 , - 678 , - 1313 , - 256 , - 1267 , - 586 , - 469 , - 164 , - 423 , - 494 , - 1129 , - 72 , - 1083 , - 402 , - 285 , - 1484 , - 239 , - 310 , - 945 , - 1392 , - 899 , - 218 , - 101 , - 1300 , - 55 , - 126 , - 761 , - 1208 , - 715 , - 34 , - 1421 , - 1116 , - 1375 , - 1446 , - 577 , - 1024 , - 531 , - 1354 , - 1237 , - 932 , - 1191 , - 1262 , - 393 , - 840 , - 347 , - 1170 , - 1053 , - 748 , - 1007 , - 1078 , - 209 , - 656 , - 163 , - 986 , - 869 , - 564 , - 823 , - 894 , - 25 , - 472 , - 1483 , - 802 , - 685 , - 380 , - 639 , - 710 , - 1345 , - 288 , - 1299 , - 618 , - 501 , - 196 , - 455 , - 526 , - 1161 , - 104 , - 1115 , - 434 , - 317 , - 12 , - 271 , - 342 , - 977 , - 1424 , - 931 , - 250 , - 133 , - 1332 , - 87 , - 158 , - 793 , - 1240 , - 747 , - 66 , - 1453 , - 1148 , - 1407 , - 1478 , - 609 , - 1056 , - 563 , - 1386 , - 1269 , - 964 , - 1223 , - 1294 , - 425 , - 872 , - 379 , - 1202 , - 1085 , - 780 , - 1039 , - 1110 , - 241 , - 688 , - 195 , - 1018 , - 901 , - 596 , - 855 , - 926 , - 57 , - 504 , - 11 , - 834 , - 717 , - 412 , - 671 , - 742 , - 1377 , - 320 , - 1331 , - 650 , - 533 , - 228 , - 487 , - 558 , - 1193 , - 136 , - 1147 , - 466 , - 349 , - 44 , - 303 , - 374 , - 1009 , - 1456 , - 963 , - 282 , - 165 , - 1364 , - 119 , - 190 , - 825 , - 1272 , - 779 , - 98 , - 1485 , - 1180 , - 1439 , - 6 , - 641 , - 1088 , - 595 , - 1418 , - 1301 , - 996 , - 1255 , - 1326 , - 457 , - 904 , - 411 , - 1234 , - 1117 , - 812 , - 1071 , - 1142 , - 273 , - 720 , - 227 , - 1050 , - 933 , - 628 , - 887 , - 958 , - 89 , - 536 , - 43 , - 866 , - 749 , - 444 , - 703 , - 774 , - 1409 , - 352 , - 1363 , - 682 , - 565 , - 260 , - 519 , - 590 , - 1225 , - 168 , - 1179 , - 498 , - 381 , - 76 , - 335 , - 406 , - 1041 , - 1488 , - 995 , - 314 , - 197 , - 1396 , - 151 , - 222 , - 857 , - 1304 , - 811 , - 130 , - 13 , - 1212 , - 1471 , - 38 , - 673 , - 1120 , - 627 , - 1450 , - 1333 , - 1028 , - 1287 , - 1358 , - 489 , - 936 , - 443 , - 1266 , - 1149 , - 844 , - 1103 , - 1174 , - 305 , - 752 , - 259 , - 1082 , - 965 , - 660 , - 919 , - 990 , - 121 , - 568 , - 75 , - 898 , - 781 , - 476 , - 735 , - 806 , - 1441 , - 384 , - 1395 , - 714 , - 597 , - 292 , - 551 , - 622 , - 1257 , - 200 , - 1211 , - 530 , - 413 , - 108 , - 367 , - 438 , - 1073 , - 16 , - 1027 , - 346 , - 229 , - 1428 , - 183 , - 254 , - 889 , - 1336 , - 843 , - 162 , - 45 , - 1244 , - 1503 , - 70 , - 705 , - 1152 , - 659 , - 1482 , - 1365 , - 1060 , - 1319 , - 1390 , - 521 , - 968 , - 475 , - 1298 , - 1181 , - 876 , - 1135 , - 1206 , - 337 , - 784 , - 291 , - 1114 , - 997 , - 692 , - 951 , - 1022 , - 153 , - 600 , - 107 , - 930 , - 813 , - 508 , - 767 , - 838 , - 1473 , - 416 , - 1427 , - 746 , - 629 , - 324 , - 583 , - 654 , - 1289 , - 232 , - 1243 , - 562 , - 445 , - 140 , - 399 , - 470 , - 1105 , - 48 , - 1059 , - 378 , - 261 , - 1460 , - 215 , - 286 , - 921 , - 1368 , - 875 , - 194 , - 77 , - 1276 , - 31 , - 102 , - 737 , - 1184 , - 691 , - 10 , - 1397 , - 1092 , - 1351 , - 1422 , - 553 , - 1000 , - 507 , - 1330 , - 1213 , - 908 , - 1167 , - 1238 , - 369 , - 816 , - 323 , - 1146 , - 1029 , - 724 , - 983 , - 1054 , - 185 , - 632 , - 139 , - 962 , - 845 , - 540 , - 799 , - 870 , - 1 , - 448 , - 1459 , - 778 , - 661 , - 356 , - 615 , - 686 , - 1321 , - 264 , - 1275 , - 594 , - 477 , - 172 , - 431 , - 502 , - 1137 , - 80 , - 1091 , - 410 , - 293 , - 1492 , - 247 , - 318 , - 953 , - 1400 , - 907 , - 226 , - 109 , - 1308 , - 63 , - 134 , - 769 , - 1216 , - 723 , - 42 , - 1429 , - 1124 , - 1383 , - 1454 , - 585 , - 1032 , - 539 , - 1362 , - 1245 , - 940 , - 1199 , - 1270 , - 401 , - 848 , - 355 , - 1178 , - 1061 , - 756 , - 1015 , - 1086 , - 217 , - 664 , - 171 , - 994 , - 877 , - 572 , - 831 , - 902 , - 33 , - 480 , - 1491 , - 810 , - 693 , - 388 , - 647 , - 718 , - 1353 , - 296 , - 1307 , - 626 , - 509 , - 204 , - 463 , - 534 , - 1169 , - 112 , - 1123 , - 442 , - 325 , - 20 , - 279 , - 350 , - 985 , - 1432 , - 939 , - 258 , - 141 , - 1340 , - 95 , - 166 , - 801 , - 1248 , - 755 , - 74 , - 1461 , - 1156 , - 1415 , - 1486 , - 617 , - 1064 , - 571 , - 1394 , - 1277 , - 972 , - 1231 , - 1302 , - 433 , - 880 , - 387 , - 1210 , - 1093 , - 788 , - 1047 , - 1118 , - 249 , - 696 , - 203 , - 1026 , - 909 , - 604 , - 863 , - 934 , - 65 , - 512 , - 19 , - 842 , - 725 , - 420 , - 679 , - 750 , - 1385 , - 328 , - 1339 , - 658 , - 541 , - 236 , - 495 , - 566 , - 1201 , - 144 , - 1155 , - 474 , - 357 , - 52 , - 311 , - 382 , - 1017 , - 1464 , - 971 , - 290 , - 173 , - 1372 , - 127 , - 198 , - 833 , - 1280 , - 787 , - 106 , - 1493 , - 1188 , - 1447 , - 14 , - 649 , - 1096 , - 603 , - 1426 , - 1309 , - 1004 , - 1263 , - 1334 , - 465 , - 912 , - 419 , - 1242 , - 1125 , - 820 , - 1079 , - 1150 , - 281 , - 728 , - 235 , - 1058 , - 941 , - 636 , - 895 , - 966 , - 97 , - 544 , - 51 , - 874 , - 757 , - 452 , - 711 , - 782 , - 1417 , - 360 , - 1371 , - 690 , - 573 , - 268 , - 527 , - 598 , - 1233 , - 176 , - 1187 , - 506 , - 389 , - 84 , - 343 , - 414 , - 1049 , - 1496 , - 1003 , - 322 , - 205 , - 1404 , - 159 , - 230 , - 865 , - 1312 , - 819 , - 138 , - 21 , - 1220 , - 1479 , - 46 , - 681 , - 1128 , - 635 , - 1458 , - 1341 , - 1036 , - 1295 , - 1366 , - 497 , - 944 , - 451 , - 1274 , - 1157 , - 852 , - 1111 , - 1182 , - 313 , - 760 , - 267 , - 1090 , - 973 , - 668 , - 927 , - 998 , - 129 , - 576 , - 83 , - 906 , - 789 , - 484 , - 743 , - 814 , - 1449 , - 392 , - 1403 , - 722 , - 605 , - 300 , - 559 , - 630 , - 1265 , - 208 , - 1219 , - 538 , - 421 , - 116 , - 375 , - 446 , - 1081 , - 24 , - 1035 , - 354 , - 237 , - 1436 , - 191 , - 262 , - 897 , - 1344 , - 851 , - 170 , - 53 , - 1252 , - 7 , - 78 , - 713 , - 1160 , - 667 , - 1490 , - 1373 , - 1068 , - 1327 , - 1398 , - 529 , - 976 , - 483 , - 1306 , - 1189 , - 884 , - 1143 , - 1214 , - 345 , - 792 , - 299 , - 1122 , - 1005 , - 700 , - 959 , - 1030 , - 161 , - 608 , - 115 , - 938 , - 821 , - 516 , - 775 , - 846 , - 1481 , - 424 , - 1435 , - 754 , - 637 , - 332 , - 591 , - 662 , - 1297 , - 240 , - 1251 , - 570 , - 453 , - 148 , - 407 , - 478 , - 1113 , - 56 , - 1067 , - 386 , - 269 , - 1468 , - 223 , - 294 , - 929 , - 1376 , - 883 , - 202 , - 85 , - 1284 , - 39 , - 110 , - 745 , - 1192 , - 699 , - 18 , - 1405 , - 1100 , - 1359 , - 1430 , - 561 , - 1008 , - 515 , - 1338 , - 1221 , - 916 , - 1175 , - 1246 , - 377 , - 824 , - 331 , - 1154 , - 1037 , - 732 , - 991 , - 1062 , - 193 , - 640 , - 147 , - 970 , - 853 , - 548 , - 807 , - 878 , - 9 , - 456 , - 1467 , - 786 , - 669 , - 364 , - 623 , - 694 , - 1329 , - 272 , - 1283 , - 602 , - 485 , - 180 , - 439 , - 510 , - 1145 , - 88 , - 1099 , - 418 , - 301 , - 1500 , - 255 , - 326 , - 961 , - 1408 , - 915 , - 234 , - 117 , - 1316 , - 71 , - 142 , - 777 , - 1224 , - 731 , - 50 , - 1437 , - 1132 , - 1391 , - 1462 , - 593 , - 1040 , - 547 , - 1370 , - 1253 , - 948 , - 1207 , - 1278 , - 409 , - 856 , - 363 , - 1186 , - 1069 , - 764 , - 1023 , - 1094 , - 225 , - 672 , - 179 , - 1002 , - 885 , - 580 , - 839 , - 910 , - 41 , - 488 , - 1499 , - 818 , - 701 , - 396 , - 655 , - 726 , - 1361 , - 304 , - 1315 , - 634 , - 517 , - 212 , - 471 , - 542 , - 1177 , - 120 , - 1131 , - 450 , - 333 , - 28 , - 287 , - 358 , - 993 , - 1440 , - 947 , - 266 , - 149 , - 1348 , - 103 , - 174 , - 809 , - 1256 , - 763 , - 82 , - 1469 , - 1164 , - 1423 , - 1494 , - 625 , - 1072 , - 579 , - 1402 , - 1285 , - 980 , - 1239 , - 1310 , - 441 , - 888 , - 395 , - 1218 , - 1101 , - 796 , - 1055 , - 1126 , - 257 , - 704 , - 211 , - 1034 , - 917 , - 612 , - 871 , - 942 , - 73 , - 520 , - 27 , - 850 , - 733 , - 428 , - 687 , - 758 , - 1393 , - 336 , - 1347 , - 666 , - 549 , - 244 , - 503 , - 574 , - 1209 , - 152 , - 1163 , - 482 , - 365 , - 60 , - 319 , - 390 , - 1025 , - 1472 , - 979 , - 298 , - 181 , - 1380 , - 135 , - 206 , - 841 , - 1288 , - 795 , - 114 , - 1501 , - 1196 , - 1455 , - 22 , - 657 , - 1104 , - 611 , - 1434 , - 1317 , - 1012 , - 1271 , - 1342 , - 473 , - 920 , - 427 , - 1250 , - 1133 , - 828 , - 1087 , - 1158 , - 289 , - 736 , - 243 , - 1066 , - 949 , - 644 , - 903 , - 974 , - 105 , - 552 , - 59 , - 882 , - 765 , - 460 , - 719 , - 790 , - 1425 , - 368 , - 1379 , - 698 , - 581 , - 276 , - 535 , - 606 , - 1241 , - 184 , - 1195 , - 514 , - 397 , - 92 , - 351 , - 422 , - 1057 , - 0 , - 551 , - 430 , - 1173 , - 1244 , - 643 , - 906 , - 497 , - 952 , - 735 , - 1382 , - 1357 , - 660 , - 827 , - 322 , - 681 , - 368 , - 919 , - 798 , - 5 , - 76 , - 1011 , - 1274 , - 865 , - 1320 , - 1103 , - 214 , - 189 , - 1028 , - 1195 , - 690 , - 1049 , - 736 , - 1287 , - 1166 , - 373 , - 444 , - 1379 , - 106 , - 1233 , - 152 , - 1471 , - 582 , - 557 , - 1396 , - 27 , - 1058 , - 1417 , - 1104 , - 119 , - 1534 , - 741 , - 812 , - 211 , - 474 , - 65 , - 520 , - 303 , - 950 , - 925 , - 228 , - 395 , - 1426 , - 249 , - 1472 , - 487 , - 366 , - 1109 , - 1180 , - 579 , - 842 , - 433 , - 888 , - 671 , - 1318 , - 1293 , - 596 , - 763 , - 258 , - 617 , - 304 , - 855 , - 734 , - 1477 , - 12 , - 947 , - 1210 , - 801 , - 1256 , - 1039 , - 150 , - 125 , - 964 , - 1131 , - 626 , - 985 , - 672 , - 1223 , - 1102 , - 309 , - 380 , - 1315 , - 42 , - 1169 , - 88 , - 1407 , - 518 , - 493 , - 1332 , - 1499 , - 994 , - 1353 , - 1040 , - 55 , - 1470 , - 677 , - 748 , - 147 , - 410 , - 1 , - 456 , - 239 , - 886 , - 861 , - 164 , - 331 , - 1362 , - 185 , - 1408 , - 423 , - 302 , - 1045 , - 1116 , - 515 , - 778 , - 369 , - 824 , - 607 , - 1254 , - 1229 , - 532 , - 699 , - 194 , - 553 , - 240 , - 791 , - 670 , - 1413 , - 1484 , - 883 , - 1146 , - 737 , - 1192 , - 975 , - 86 , - 61 , - 900 , - 1067 , - 562 , - 921 , - 608 , - 1159 , - 1038 , - 245 , - 316 , - 1251 , - 1514 , - 1105 , - 24 , - 1343 , - 454 , - 429 , - 1268 , - 1435 , - 930 , - 1289 , - 976 , - 1527 , - 1406 , - 613 , - 684 , - 83 , - 346 , - 1473 , - 392 , - 175 , - 822 , - 797 , - 100 , - 267 , - 1298 , - 121 , - 1344 , - 359 , - 238 , - 981 , - 1052 , - 451 , - 714 , - 305 , - 760 , - 543 , - 1190 , - 1165 , - 468 , - 635 , - 130 , - 489 , - 176 , - 727 , - 606 , - 1349 , - 1420 , - 819 , - 1082 , - 673 , - 1128 , - 911 , - 22 , - 1533 , - 836 , - 1003 , - 498 , - 857 , - 544 , - 1095 , - 974 , - 181 , - 252 , - 1187 , - 1450 , - 1041 , - 1496 , - 1279 , - 390 , - 365 , - 1204 , - 1371 , - 866 , - 1225 , - 912 , - 1463 , - 1342 , - 549 , - 620 , - 19 , - 282 , - 1409 , - 328 , - 111 , - 758 , - 733 , - 36 , - 203 , - 1234 , - 57 , - 1280 , - 295 , - 174 , - 917 , - 988 , - 387 , - 650 , - 241 , - 696 , - 479 , - 1126 , - 1101 , - 404 , - 571 , - 66 , - 425 , - 112 , - 663 , - 542 , - 1285 , - 1356 , - 755 , - 1018 , - 609 , - 1064 , - 847 , - 1494 , - 1469 , - 772 , - 939 , - 434 , - 793 , - 480 , - 1031 , - 910 , - 117 , - 188 , - 1123 , - 1386 , - 977 , - 1432 , - 1215 , - 326 , - 301 , - 1140 , - 1307 , - 802 , - 1161 , - 848 , - 1399 , - 1278 , - 485 , - 556 , - 1491 , - 218 , - 1345 , - 264 , - 47 , - 694 , - 669 , - 1508 , - 139 , - 1170 , - 1529 , - 1216 , - 231 , - 110 , - 853 , - 924 , - 323 , - 586 , - 177 , - 632 , - 415 , - 1062 , - 1037 , - 340 , - 507 , - 2 , - 361 , - 48 , - 599 , - 478 , - 1221 , - 1292 , - 691 , - 954 , - 545 , - 1000 , - 783 , - 1430 , - 1405 , - 708 , - 875 , - 370 , - 729 , - 416 , - 967 , - 846 , - 53 , - 124 , - 1059 , - 1322 , - 913 , - 1368 , - 1151 , - 262 , - 237 , - 1076 , - 1243 , - 738 , - 1097 , - 784 , - 1335 , - 1214 , - 421 , - 492 , - 1427 , - 154 , - 1281 , - 200 , - 1519 , - 630 , - 605 , - 1444 , - 75 , - 1106 , - 1465 , - 1152 , - 167 , - 46 , - 789 , - 860 , - 259 , - 522 , - 113 , - 568 , - 351 , - 998 , - 973 , - 276 , - 443 , - 1474 , - 297 , - 1520 , - 535 , - 414 , - 1157 , - 1228 , - 627 , - 890 , - 481 , - 936 , - 719 , - 1366 , - 1341 , - 644 , - 811 , - 306 , - 665 , - 352 , - 903 , - 782 , - 1525 , - 60 , - 995 , - 1258 , - 849 , - 1304 , - 1087 , - 198 , - 173 , - 1012 , - 1179 , - 674 , - 1033 , - 720 , - 1271 , - 1150 , - 357 , - 428 , - 1363 , - 90 , - 1217 , - 136 , - 1455 , - 566 , - 541 , - 1380 , - 11 , - 1042 , - 1401 , - 1088 , - 103 , - 1518 , - 725 , - 796 , - 195 , - 458 , - 49 , - 504 , - 287 , - 934 , - 909 , - 212 , - 379 , - 1410 , - 233 , - 1456 , - 471 , - 350 , - 1093 , - 1164 , - 563 , - 826 , - 417 , - 872 , - 655 , - 1302 , - 1277 , - 580 , - 747 , - 242 , - 601 , - 288 , - 839 , - 718 , - 1461 , - 1532 , - 931 , - 1194 , - 785 , - 1240 , - 1023 , - 134 , - 109 , - 948 , - 1115 , - 610 , - 969 , - 656 , - 1207 , - 1086 , - 293 , - 364 , - 1299 , - 26 , - 1153 , - 72 , - 1391 , - 502 , - 477 , - 1316 , - 1483 , - 978 , - 1337 , - 1024 , - 39 , - 1454 , - 661 , - 732 , - 131 , - 394 , - 1521 , - 440 , - 223 , - 870 , - 845 , - 148 , - 315 , - 1346 , - 169 , - 1392 , - 407 , - 286 , - 1029 , - 1100 , - 499 , - 762 , - 353 , - 808 , - 591 , - 1238 , - 1213 , - 516 , - 683 , - 178 , - 537 , - 224 , - 775 , - 654 , - 1397 , - 1468 , - 867 , - 1130 , - 721 , - 1176 , - 959 , - 70 , - 45 , - 884 , - 1051 , - 546 , - 905 , - 592 , - 1143 , - 1022 , - 229 , - 300 , - 1235 , - 1498 , - 1089 , - 8 , - 1327 , - 438 , - 413 , - 1252 , - 1419 , - 914 , - 1273 , - 960 , - 1511 , - 1390 , - 597 , - 668 , - 67 , - 330 , - 1457 , - 376 , - 159 , - 806 , - 781 , - 84 , - 251 , - 1282 , - 105 , - 1328 , - 343 , - 222 , - 965 , - 1036 , - 435 , - 698 , - 289 , - 744 , - 527 , - 1174 , - 1149 , - 452 , - 619 , - 114 , - 473 , - 160 , - 711 , - 590 , - 1333 , - 1404 , - 803 , - 1066 , - 657 , - 1112 , - 895 , - 6 , - 1517 , - 820 , - 987 , - 482 , - 841 , - 528 , - 1079 , - 958 , - 165 , - 236 , - 1171 , - 1434 , - 1025 , - 1480 , - 1263 , - 374 , - 349 , - 1188 , - 1355 , - 850 , - 1209 , - 896 , - 1447 , - 1326 , - 533 , - 604 , - 3 , - 266 , - 1393 , - 312 , - 95 , - 742 , - 717 , - 20 , - 187 , - 1218 , - 41 , - 1264 , - 279 , - 158 , - 901 , - 972 , - 371 , - 634 , - 225 , - 680 , - 463 , - 1110 , - 1085 , - 388 , - 555 , - 50 , - 409 , - 96 , - 647 , - 526 , - 1269 , - 1340 , - 739 , - 1002 , - 593 , - 1048 , - 831 , - 1478 , - 1453 , - 756 , - 923 , - 418 , - 777 , - 464 , - 1015 , - 894 , - 101 , - 172 , - 1107 , - 1370 , - 961 , - 1416 , - 1199 , - 310 , - 285 , - 1124 , - 1291 , - 786 , - 1145 , - 832 , - 1383 , - 1262 , - 469 , - 540 , - 1475 , - 202 , - 1329 , - 248 , - 31 , - 678 , - 653 , - 1492 , - 123 , - 1154 , - 1513 , - 1200 , - 215 , - 94 , - 837 , - 908 , - 307 , - 570 , - 161 , - 616 , - 399 , - 1046 , - 1021 , - 324 , - 491 , - 1522 , - 345 , - 32 , - 583 , - 462 , - 1205 , - 1276 , - 675 , - 938 , - 529 , - 984 , - 767 , - 1414 , - 1389 , - 692 , - 859 , - 354 , - 713 , - 400 , - 951 , - 830 , - 37 , - 108 , - 1043 , - 1306 , - 897 , - 1352 , - 1135 , - 246 , - 221 , - 1060 , - 1227 , - 722 , - 1081 , - 768 , - 1319 , - 1198 , - 405 , - 476 , - 1411 , - 138 , - 1265 , - 184 , - 1503 , - 614 , - 589 , - 1428 , - 59 , - 1090 , - 1449 , - 1136 , - 151 , - 30 , - 773 , - 844 , - 243 , - 506 , - 97 , - 552 , - 335 , - 982 , - 957 , - 260 , - 427 , - 1458 , - 281 , - 1504 , - 519 , - 398 , - 1141 , - 1212 , - 611 , - 874 , - 465 , - 920 , - 703 , - 1350 , - 1325 , - 628 , - 795 , - 290 , - 649 , - 336 , - 887 , - 766 , - 1509 , - 44 , - 979 , - 1242 , - 833 , - 1288 , - 1071 , - 182 , - 157 , - 996 , - 1163 , - 658 , - 1017 , - 704 , - 1255 , - 1134 , - 341 , - 412 , - 1347 , - 74 , - 1201 , - 120 , - 1439 , - 550 , - 525 , - 1364 , - 1531 , - 1026 , - 1385 , - 1072 , - 87 , - 1502 , - 709 , - 780 , - 179 , - 442 , - 33 , - 488 , - 271 , - 918 , - 893 , - 196 , - 363 , - 1394 , - 217 , - 1440 , - 455 , - 334 , - 1077 , - 1148 , - 547 , - 810 , - 401 , - 856 , - 639 , - 1286 , - 1261 , - 564 , - 731 , - 226 , - 585 , - 272 , - 823 , - 702 , - 1445 , - 1516 , - 915 , - 1178 , - 769 , - 1224 , - 1007 , - 118 , - 93 , - 932 , - 1099 , - 594 , - 953 , - 640 , - 1191 , - 1070 , - 277 , - 348 , - 1283 , - 10 , - 1137 , - 56 , - 1375 , - 486 , - 461 , - 1300 , - 1467 , - 962 , - 1321 , - 1008 , - 23 , - 1438 , - 645 , - 716 , - 115 , - 378 , - 1505 , - 424 , - 207 , - 854 , - 829 , - 132 , - 299 , - 1330 , - 153 , - 1376 , - 391 , - 270 , - 1013 , - 1084 , - 483 , - 746 , - 337 , - 792 , - 575 , - 1222 , - 1197 , - 500 , - 667 , - 162 , - 521 , - 208 , - 759 , - 638 , - 1381 , - 1452 , - 851 , - 1114 , - 705 , - 1160 , - 943 , - 54 , - 29 , - 868 , - 1035 , - 530 , - 889 , - 576 , - 1127 , - 1006 , - 213 , - 284 , - 1219 , - 1482 , - 1073 , - 1528 , - 1311 , - 422 , - 397 , - 1236 , - 1403 , - 898 , - 1257 , - 944 , - 1495 , - 1374 , - 581 , - 652 , - 51 , - 314 , - 1441 , - 360 , - 143 , - 790 , - 765 , - 68 , - 235 , - 1266 , - 89 , - 1312 , - 327 , - 206 , - 949 , - 1020 , - 419 , - 682 , - 273 , - 728 , - 511 , - 1158 , - 1133 , - 436 , - 603 , - 98 , - 457 , - 144 , - 695 , - 574 , - 1317 , - 1388 , - 787 , - 1050 , - 641 , - 1096 , - 879 , - 1526 , - 1501 , - 804 , - 971 , - 466 , - 825 , - 512 , - 1063 , - 942 , - 149 , - 220 , - 1155 , - 1418 , - 1009 , - 1464 , - 1247 , - 358 , - 333 , - 1172 , - 1339 , - 834 , - 1193 , - 880 , - 1431 , - 1310 , - 517 , - 588 , - 1523 , - 250 , - 1377 , - 296 , - 79 , - 726 , - 701 , - 4 , - 171 , - 1202 , - 25 , - 1248 , - 263 , - 142 , - 885 , - 956 , - 355 , - 618 , - 209 , - 664 , - 447 , - 1094 , - 1069 , - 372 , - 539 , - 34 , - 393 , - 80 , - 631 , - 510 , - 1253 , - 1324 , - 723 , - 986 , - 577 , - 1032 , - 815 , - 1462 , - 1437 , - 740 , - 907 , - 402 , - 761 , - 448 , - 999 , - 878 , - 85 , - 156 , - 1091 , - 1354 , - 945 , - 1400 , - 1183 , - 294 , - 269 , - 1108 , - 1275 , - 770 , - 1129 , - 816 , - 1367 , - 1246 , - 453 , - 524 , - 1459 , - 186 , - 1313 , - 232 , - 15 , - 662 , - 637 , - 1476 , - 107 , - 1138 , - 1497 , - 1184 , - 199 , - 78 , - 821 , - 892 , - 291 , - 554 , - 145 , - 600 , - 383 , - 1030 , - 1005 , - 308 , - 475 , - 1506 , - 329 , - 16 , - 567 , - 446 , - 1189 , - 1260 , - 659 , - 922 , - 513 , - 968 , - 751 , - 1398 , - 1373 , - 676 , - 843 , - 338 , - 697 , - 384 , - 935 , - 814 , - 21 , - 92 , - 1027 , - 1290 , - 881 , - 1336 , - 1119 , - 230 , - 205 , - 1044 , - 1211 , - 706 , - 1065 , - 752 , - 1303 , - 1182 , - 389 , - 460 , - 1395 , - 122 , - 1249 , - 168 , - 1487 , - 598 , - 573 , - 1412 , - 43 , - 1074 , - 1433 , - 1120 , - 135 , - 14 , - 757 , - 828 , - 227 , - 490 , - 81 , - 536 , - 319 , - 966 , - 941 , - 244 , - 411 , - 1442 , - 265 , - 1488 , - 503 , - 382 , - 1125 , - 1196 , - 595 , - 858 , - 449 , - 904 , - 687 , - 1334 , - 1309 , - 612 , - 779 , - 274 , - 633 , - 320 , - 871 , - 750 , - 1493 , - 28 , - 963 , - 1226 , - 817 , - 1272 , - 1055 , - 166 , - 141 , - 980 , - 1147 , - 642 , - 1001 , - 688 , - 1239 , - 1118 , - 325 , - 396 , - 1331 , - 58 , - 1185 , - 104 , - 1423 , - 534 , - 509 , - 1348 , - 1515 , - 1010 , - 1369 , - 1056 , - 71 , - 1486 , - 693 , - 764 , - 163 , - 426 , - 17 , - 472 , - 255 , - 902 , - 877 , - 180 , - 347 , - 1378 , - 201 , - 1424 , - 439 , - 318 , - 1061 , - 1132 , - 531 , - 794 , - 385 , - 840 , - 623 , - 1270 , - 1245 , - 548 , - 715 , - 210 , - 569 , - 256 , - 807 , - 686 , - 1429 , - 1500 , - 899 , - 1162 , - 753 , - 1208 , - 991 , - 102 , - 77 , - 916 , - 1083 , - 578 , - 937 , - 624 , - 1175 , - 1054 , - 261 , - 332 , - 1267 , - 1530 , - 1121 , - 40 , - 1359 , - 470 , - 445 , - 1284 , - 1451 , - 946 , - 1305 , - 992 , - 7 , - 1422 , - 629 , - 700 , - 99 , - 362 , - 1489 , - 408 , - 191 , - 838 , - 813 , - 116 , - 283 , - 1314 , - 137 , - 1360 , - 375 , - 254 , - 997 , - 1068 , - 467 , - 730 , - 321 , - 776 , - 559 , - 1206 , - 1181 , - 484 , - 651 , - 146 , - 505 , - 192 , - 743 , - 622 , - 1365 , - 1436 , - 835 , - 1098 , - 689 , - 1144 , - 927 , - 38 , - 13 , - 852 , - 1019 , - 514 , - 873 , - 560 , - 1111 , - 990 , - 197 , - 268 , - 1203 , - 1466 , - 1057 , - 1512 , - 1295 , - 406 , - 381 , - 1220 , - 1387 , - 882 , - 1241 , - 928 , - 1479 , - 1358 , - 565 , - 636 , - 35 , - 298 , - 1425 , - 344 , - 127 , - 774 , - 749 , - 52 , - 219 , - 1250 , - 73 , - 1296 , - 311 , - 190 , - 933 , - 1004 , - 403 , - 666 , - 257 , - 712 , - 495 , - 1142 , - 1117 , - 420 , - 587 , - 82 , - 441 , - 128 , - 679 , - 558 , - 1301 , - 1372 , - 771 , - 1034 , - 625 , - 1080 , - 863 , - 1510 , - 1485 , - 788 , - 955 , - 450 , - 809 , - 496 , - 1047 , - 926 , - 133 , - 204 , - 1139 , - 1402 , - 993 , - 1448 , - 1231 , - 342 , - 317 , - 1156 , - 1323 , - 818 , - 1177 , - 864 , - 1415 , - 1294 , - 501 , - 572 , - 1507 , - 234 , - 1361 , - 280 , - 63 , - 710 , - 685 , - 1524 , - 155 , - 1186 , - 9 , - 1232 , - 247 , - 126 , - 869 , - 940 , - 339 , - 602 , - 193 , - 648 , - 431 , - 1078 , - 1053 , - 356 , - 523 , - 18 , - 377 , - 64 , - 615 , - 494 , - 1237 , - 1308 , - 707 , - 970 , - 561 , - 1016 , - 799 , - 1446 , - 1421 , - 724 , - 891 , - 386 , - 745 , - 432 , - 983 , - 862 , - 69 , - 140 , - 1075 , - 1338 , - 929 , - 1384 , - 1167 , - 278 , - 253 , - 1092 , - 1259 , - 754 , - 1113 , - 800 , - 1351 , - 1230 , - 437 , - 508 , - 1443 , - 170 , - 1297 , - 216 , - 1535 , - 646 , - 621 , - 1460 , - 91 , - 1122 , - 1481 , - 1168 , - 183 , - 62 , - 805 , - 876 , - 275 , - 538 , - 129 , - 584 , - 367 , - 1014 , - 989 , - 292 , - 459 , - 1490 , - 313 , - 0 , - 601 , - 474 , - 1187 , - 1172 , - 429 , - 526 , - 1463 , - 104 , - 1153 , - 1474 , - 1067 , - 1500 , - 1205 , - 182 , - 1567 , - 656 , - 585 , - 1354 , - 1395 , - 708 , - 861 , - 286 , - 551 , - 88 , - 465 , - 114 , - 603 , - 364 , - 965 , - 838 , - 1551 , - 1536 , - 793 , - 890 , - 259 , - 468 , - 1517 , - 270 , - 1431 , - 296 , - 1 , - 546 , - 363 , - 1020 , - 949 , - 150 , - 191 , - 1072 , - 1225 , - 650 , - 915 , - 452 , - 829 , - 478 , - 967 , - 728 , - 1329 , - 1202 , - 347 , - 332 , - 1157 , - 1254 , - 623 , - 832 , - 313 , - 634 , - 227 , - 660 , - 365 , - 910 , - 727 , - 1384 , - 1313 , - 514 , - 555 , - 1436 , - 21 , - 1014 , - 1279 , - 816 , - 1193 , - 842 , - 1331 , - 1092 , - 125 , - 1566 , - 711 , - 696 , - 1521 , - 50 , - 987 , - 1196 , - 677 , - 998 , - 591 , - 1024 , - 729 , - 1274 , - 1091 , - 180 , - 109 , - 878 , - 919 , - 232 , - 385 , - 1378 , - 75 , - 1180 , - 1557 , - 1206 , - 127 , - 1456 , - 489 , - 362 , - 1075 , - 1060 , - 317 , - 414 , - 1351 , - 1560 , - 1041 , - 1362 , - 955 , - 1388 , - 1093 , - 70 , - 1455 , - 544 , - 473 , - 1242 , - 1283 , - 596 , - 749 , - 174 , - 439 , - 1544 , - 353 , - 2 , - 491 , - 252 , - 853 , - 726 , - 1439 , - 1424 , - 681 , - 778 , - 147 , - 356 , - 1405 , - 158 , - 1319 , - 184 , - 1457 , - 434 , - 251 , - 908 , - 837 , - 38 , - 79 , - 960 , - 1113 , - 538 , - 803 , - 340 , - 717 , - 366 , - 855 , - 616 , - 1217 , - 1090 , - 235 , - 220 , - 1045 , - 1142 , - 511 , - 720 , - 201 , - 522 , - 115 , - 548 , - 253 , - 798 , - 615 , - 1272 , - 1201 , - 402 , - 443 , - 1324 , - 1477 , - 902 , - 1167 , - 704 , - 1081 , - 730 , - 1219 , - 980 , - 13 , - 1454 , - 599 , - 584 , - 1409 , - 1506 , - 875 , - 1084 , - 565 , - 886 , - 479 , - 912 , - 617 , - 1162 , - 979 , - 68 , - 1565 , - 766 , - 807 , - 120 , - 273 , - 1266 , - 1531 , - 1068 , - 1445 , - 1094 , - 15 , - 1344 , - 377 , - 250 , - 963 , - 948 , - 205 , - 302 , - 1239 , - 1448 , - 929 , - 1250 , - 843 , - 1276 , - 981 , - 1526 , - 1343 , - 432 , - 361 , - 1130 , - 1171 , - 484 , - 637 , - 62 , - 327 , - 1432 , - 241 , - 1458 , - 379 , - 140 , - 741 , - 614 , - 1327 , - 1312 , - 569 , - 666 , - 35 , - 244 , - 1293 , - 46 , - 1207 , - 72 , - 1345 , - 322 , - 139 , - 796 , - 725 , - 1494 , - 1535 , - 848 , - 1001 , - 426 , - 691 , - 228 , - 605 , - 254 , - 743 , - 504 , - 1105 , - 978 , - 123 , - 108 , - 933 , - 1030 , - 399 , - 608 , - 89 , - 410 , - 3 , - 436 , - 141 , - 686 , - 503 , - 1160 , - 1089 , - 290 , - 331 , - 1212 , - 1365 , - 790 , - 1055 , - 592 , - 969 , - 618 , - 1107 , - 868 , - 1469 , - 1342 , - 487 , - 472 , - 1297 , - 1394 , - 763 , - 972 , - 453 , - 774 , - 367 , - 800 , - 505 , - 1050 , - 867 , - 1524 , - 1453 , - 654 , - 695 , - 8 , - 161 , - 1154 , - 1419 , - 956 , - 1333 , - 982 , - 1471 , - 1232 , - 265 , - 138 , - 851 , - 836 , - 93 , - 190 , - 1127 , - 1336 , - 817 , - 1138 , - 731 , - 1164 , - 869 , - 1414 , - 1231 , - 320 , - 249 , - 1018 , - 1059 , - 372 , - 525 , - 1518 , - 215 , - 1320 , - 129 , - 1346 , - 267 , - 28 , - 629 , - 502 , - 1215 , - 1200 , - 457 , - 554 , - 1491 , - 132 , - 1181 , - 1502 , - 1095 , - 1528 , - 1233 , - 210 , - 27 , - 684 , - 613 , - 1382 , - 1423 , - 736 , - 889 , - 314 , - 579 , - 116 , - 493 , - 142 , - 631 , - 392 , - 993 , - 866 , - 11 , - 1564 , - 821 , - 918 , - 287 , - 496 , - 1545 , - 298 , - 1459 , - 324 , - 29 , - 574 , - 391 , - 1048 , - 977 , - 178 , - 219 , - 1100 , - 1253 , - 678 , - 943 , - 480 , - 857 , - 506 , - 995 , - 756 , - 1357 , - 1230 , - 375 , - 360 , - 1185 , - 1282 , - 651 , - 860 , - 341 , - 662 , - 255 , - 688 , - 393 , - 938 , - 755 , - 1412 , - 1341 , - 542 , - 583 , - 1464 , - 49 , - 1042 , - 1307 , - 844 , - 1221 , - 870 , - 1359 , - 1120 , - 153 , - 26 , - 739 , - 724 , - 1549 , - 78 , - 1015 , - 1224 , - 705 , - 1026 , - 619 , - 1052 , - 757 , - 1302 , - 1119 , - 208 , - 137 , - 906 , - 947 , - 260 , - 413 , - 1406 , - 103 , - 1208 , - 17 , - 1234 , - 155 , - 1484 , - 517 , - 390 , - 1103 , - 1088 , - 345 , - 442 , - 1379 , - 20 , - 1069 , - 1390 , - 983 , - 1416 , - 1121 , - 98 , - 1483 , - 572 , - 501 , - 1270 , - 1311 , - 624 , - 777 , - 202 , - 467 , - 4 , - 381 , - 30 , - 519 , - 280 , - 881 , - 754 , - 1467 , - 1452 , - 709 , - 806 , - 175 , - 384 , - 1433 , - 186 , - 1347 , - 212 , - 1485 , - 462 , - 279 , - 936 , - 865 , - 66 , - 107 , - 988 , - 1141 , - 566 , - 831 , - 368 , - 745 , - 394 , - 883 , - 644 , - 1245 , - 1118 , - 263 , - 248 , - 1073 , - 1170 , - 539 , - 748 , - 229 , - 550 , - 143 , - 576 , - 281 , - 826 , - 643 , - 1300 , - 1229 , - 430 , - 471 , - 1352 , - 1505 , - 930 , - 1195 , - 732 , - 1109 , - 758 , - 1247 , - 1008 , - 41 , - 1482 , - 627 , - 612 , - 1437 , - 1534 , - 903 , - 1112 , - 593 , - 914 , - 507 , - 940 , - 645 , - 1190 , - 1007 , - 96 , - 25 , - 794 , - 835 , - 148 , - 301 , - 1294 , - 1559 , - 1096 , - 1473 , - 1122 , - 43 , - 1372 , - 405 , - 278 , - 991 , - 976 , - 233 , - 330 , - 1267 , - 1476 , - 957 , - 1278 , - 871 , - 1304 , - 1009 , - 1554 , - 1371 , - 460 , - 389 , - 1158 , - 1199 , - 512 , - 665 , - 90 , - 355 , - 1460 , - 269 , - 1486 , - 407 , - 168 , - 769 , - 642 , - 1355 , - 1340 , - 597 , - 694 , - 63 , - 272 , - 1321 , - 74 , - 1235 , - 100 , - 1373 , - 350 , - 167 , - 824 , - 753 , - 1522 , - 1563 , - 876 , - 1029 , - 454 , - 719 , - 256 , - 633 , - 282 , - 771 , - 532 , - 1133 , - 1006 , - 151 , - 136 , - 961 , - 1058 , - 427 , - 636 , - 117 , - 438 , - 31 , - 464 , - 169 , - 714 , - 531 , - 1188 , - 1117 , - 318 , - 359 , - 1240 , - 1393 , - 818 , - 1083 , - 620 , - 997 , - 646 , - 1135 , - 896 , - 1497 , - 1370 , - 515 , - 500 , - 1325 , - 1422 , - 791 , - 1000 , - 481 , - 802 , - 395 , - 828 , - 533 , - 1078 , - 895 , - 1552 , - 1481 , - 682 , - 723 , - 36 , - 189 , - 1182 , - 1447 , - 984 , - 1361 , - 1010 , - 1499 , - 1260 , - 293 , - 166 , - 879 , - 864 , - 121 , - 218 , - 1155 , - 1364 , - 845 , - 1166 , - 759 , - 1192 , - 897 , - 1442 , - 1259 , - 348 , - 277 , - 1046 , - 1087 , - 400 , - 553 , - 1546 , - 243 , - 1348 , - 157 , - 1374 , - 295 , - 56 , - 657 , - 530 , - 1243 , - 1228 , - 485 , - 582 , - 1519 , - 160 , - 1209 , - 1530 , - 1123 , - 1556 , - 1261 , - 238 , - 55 , - 712 , - 641 , - 1410 , - 1451 , - 764 , - 917 , - 342 , - 607 , - 144 , - 521 , - 170 , - 659 , - 420 , - 1021 , - 894 , - 39 , - 24 , - 849 , - 946 , - 315 , - 524 , - 5 , - 326 , - 1487 , - 352 , - 57 , - 602 , - 419 , - 1076 , - 1005 , - 206 , - 247 , - 1128 , - 1281 , - 706 , - 971 , - 508 , - 885 , - 534 , - 1023 , - 784 , - 1385 , - 1258 , - 403 , - 388 , - 1213 , - 1310 , - 679 , - 888 , - 369 , - 690 , - 283 , - 716 , - 421 , - 966 , - 783 , - 1440 , - 1369 , - 570 , - 611 , - 1492 , - 77 , - 1070 , - 1335 , - 872 , - 1249 , - 898 , - 1387 , - 1148 , - 181 , - 54 , - 767 , - 752 , - 9 , - 106 , - 1043 , - 1252 , - 733 , - 1054 , - 647 , - 1080 , - 785 , - 1330 , - 1147 , - 236 , - 165 , - 934 , - 975 , - 288 , - 441 , - 1434 , - 131 , - 1236 , - 45 , - 1262 , - 183 , - 1512 , - 545 , - 418 , - 1131 , - 1116 , - 373 , - 470 , - 1407 , - 48 , - 1097 , - 1418 , - 1011 , - 1444 , - 1149 , - 126 , - 1511 , - 600 , - 529 , - 1298 , - 1339 , - 652 , - 805 , - 230 , - 495 , - 32 , - 409 , - 58 , - 547 , - 308 , - 909 , - 782 , - 1495 , - 1480 , - 737 , - 834 , - 203 , - 412 , - 1461 , - 214 , - 1375 , - 240 , - 1513 , - 490 , - 307 , - 964 , - 893 , - 94 , - 135 , - 1016 , - 1169 , - 594 , - 859 , - 396 , - 773 , - 422 , - 911 , - 672 , - 1273 , - 1146 , - 291 , - 276 , - 1101 , - 1198 , - 567 , - 776 , - 257 , - 578 , - 171 , - 604 , - 309 , - 854 , - 671 , - 1328 , - 1257 , - 458 , - 499 , - 1380 , - 1533 , - 958 , - 1223 , - 760 , - 1137 , - 786 , - 1275 , - 1036 , - 69 , - 1510 , - 655 , - 640 , - 1465 , - 1562 , - 931 , - 1140 , - 621 , - 942 , - 535 , - 968 , - 673 , - 1218 , - 1035 , - 124 , - 53 , - 822 , - 863 , - 176 , - 329 , - 1322 , - 19 , - 1124 , - 1501 , - 1150 , - 71 , - 1400 , - 433 , - 306 , - 1019 , - 1004 , - 261 , - 358 , - 1295 , - 1504 , - 985 , - 1306 , - 899 , - 1332 , - 1037 , - 14 , - 1399 , - 488 , - 417 , - 1186 , - 1227 , - 540 , - 693 , - 118 , - 383 , - 1488 , - 297 , - 1514 , - 435 , - 196 , - 797 , - 670 , - 1383 , - 1368 , - 625 , - 722 , - 91 , - 300 , - 1349 , - 102 , - 1263 , - 128 , - 1401 , - 378 , - 195 , - 852 , - 781 , - 1550 , - 23 , - 904 , - 1057 , - 482 , - 747 , - 284 , - 661 , - 310 , - 799 , - 560 , - 1161 , - 1034 , - 179 , - 164 , - 989 , - 1086 , - 455 , - 664 , - 145 , - 466 , - 59 , - 492 , - 197 , - 742 , - 559 , - 1216 , - 1145 , - 346 , - 387 , - 1268 , - 1421 , - 846 , - 1111 , - 648 , - 1025 , - 674 , - 1163 , - 924 , - 1525 , - 1398 , - 543 , - 528 , - 1353 , - 1450 , - 819 , - 1028 , - 509 , - 830 , - 423 , - 856 , - 561 , - 1106 , - 923 , - 12 , - 1509 , - 710 , - 751 , - 64 , - 217 , - 1210 , - 1475 , - 1012 , - 1389 , - 1038 , - 1527 , - 1288 , - 321 , - 194 , - 907 , - 892 , - 149 , - 246 , - 1183 , - 1392 , - 873 , - 1194 , - 787 , - 1220 , - 925 , - 1470 , - 1287 , - 376 , - 305 , - 1074 , - 1115 , - 428 , - 581 , - 6 , - 271 , - 1376 , - 185 , - 1402 , - 323 , - 84 , - 685 , - 558 , - 1271 , - 1256 , - 513 , - 610 , - 1547 , - 188 , - 1237 , - 1558 , - 1151 , - 16 , - 1289 , - 266 , - 83 , - 740 , - 669 , - 1438 , - 1479 , - 792 , - 945 , - 370 , - 635 , - 172 , - 549 , - 198 , - 687 , - 448 , - 1049 , - 922 , - 67 , - 52 , - 877 , - 974 , - 343 , - 552 , - 33 , - 354 , - 1515 , - 380 , - 85 , - 630 , - 447 , - 1104 , - 1033 , - 234 , - 275 , - 1156 , - 1309 , - 734 , - 999 , - 536 , - 913 , - 562 , - 1051 , - 812 , - 1413 , - 1286 , - 431 , - 416 , - 1241 , - 1338 , - 707 , - 916 , - 397 , - 718 , - 311 , - 744 , - 449 , - 994 , - 811 , - 1468 , - 1397 , - 598 , - 639 , - 1520 , - 105 , - 1098 , - 1363 , - 900 , - 1277 , - 926 , - 1415 , - 1176 , - 209 , - 82 , - 795 , - 780 , - 37 , - 134 , - 1071 , - 1280 , - 761 , - 1082 , - 675 , - 1108 , - 813 , - 1358 , - 1175 , - 264 , - 193 , - 962 , - 1003 , - 316 , - 469 , - 1462 , - 159 , - 1264 , - 73 , - 1290 , - 211 , - 1540 , - 573 , - 446 , - 1159 , - 1144 , - 401 , - 498 , - 1435 , - 76 , - 1125 , - 1446 , - 1039 , - 1472 , - 1177 , - 154 , - 1539 , - 628 , - 557 , - 1326 , - 1367 , - 680 , - 833 , - 258 , - 523 , - 60 , - 437 , - 86 , - 575 , - 336 , - 937 , - 810 , - 1523 , - 1508 , - 765 , - 862 , - 231 , - 440 , - 1489 , - 242 , - 1403 , - 268 , - 1541 , - 518 , - 335 , - 992 , - 921 , - 122 , - 163 , - 1044 , - 1197 , - 622 , - 887 , - 424 , - 801 , - 450 , - 939 , - 700 , - 1301 , - 1174 , - 319 , - 304 , - 1129 , - 1226 , - 595 , - 804 , - 285 , - 606 , - 199 , - 632 , - 337 , - 882 , - 699 , - 1356 , - 1285 , - 486 , - 527 , - 1408 , - 1561 , - 986 , - 1251 , - 788 , - 1165 , - 814 , - 1303 , - 1064 , - 97 , - 1538 , - 683 , - 668 , - 1493 , - 22 , - 959 , - 1168 , - 649 , - 970 , - 563 , - 996 , - 701 , - 1246 , - 1063 , - 152 , - 81 , - 850 , - 891 , - 204 , - 357 , - 1350 , - 47 , - 1152 , - 1529 , - 1178 , - 99 , - 1428 , - 461 , - 334 , - 1047 , - 1032 , - 289 , - 386 , - 1323 , - 1532 , - 1013 , - 1334 , - 927 , - 1360 , - 1065 , - 42 , - 1427 , - 516 , - 445 , - 1214 , - 1255 , - 568 , - 721 , - 146 , - 411 , - 1516 , - 325 , - 1542 , - 463 , - 224 , - 825 , - 698 , - 1411 , - 1396 , - 653 , - 750 , - 119 , - 328 , - 1377 , - 130 , - 1291 , - 156 , - 1429 , - 406 , - 223 , - 880 , - 809 , - 10 , - 51 , - 932 , - 1085 , - 510 , - 775 , - 312 , - 689 , - 338 , - 827 , - 588 , - 1189 , - 1062 , - 207 , - 192 , - 1017 , - 1114 , - 483 , - 692 , - 173 , - 494 , - 87 , - 520 , - 225 , - 770 , - 587 , - 1244 , - 1173 , - 374 , - 415 , - 1296 , - 1449 , - 874 , - 1139 , - 676 , - 1053 , - 702 , - 1191 , - 952 , - 1553 , - 1426 , - 571 , - 556 , - 1381 , - 1478 , - 847 , - 1056 , - 537 , - 858 , - 451 , - 884 , - 589 , - 1134 , - 951 , - 40 , - 1537 , - 738 , - 779 , - 92 , - 245 , - 1238 , - 1503 , - 1040 , - 1417 , - 1066 , - 1555 , - 1316 , - 349 , - 222 , - 935 , - 920 , - 177 , - 274 , - 1211 , - 1420 , - 901 , - 1222 , - 815 , - 1248 , - 953 , - 1498 , - 1315 , - 404 , - 333 , - 1102 , - 1143 , - 456 , - 609 , - 34 , - 299 , - 1404 , - 213 , - 1430 , - 351 , - 112 , - 713 , - 586 , - 1299 , - 1284 , - 541 , - 638 , - 7 , - 216 , - 1265 , - 18 , - 1179 , - 44 , - 1317 , - 294 , - 111 , - 768 , - 697 , - 1466 , - 1507 , - 820 , - 973 , - 398 , - 663 , - 200 , - 577 , - 226 , - 715 , - 476 , - 1077 , - 950 , - 95 , - 80 , - 905 , - 1002 , - 371 , - 580 , - 61 , - 382 , - 1543 , - 408 , - 113 , - 658 , - 475 , - 1132 , - 1061 , - 262 , - 303 , - 1184 , - 1337 , - 762 , - 1027 , - 564 , - 941 , - 590 , - 1079 , - 840 , - 1441 , - 1314 , - 459 , - 444 , - 1269 , - 1366 , - 735 , - 944 , - 425 , - 746 , - 339 , - 772 , - 477 , - 1022 , - 839 , - 1496 , - 1425 , - 626 , - 667 , - 1548 , - 133 , - 1126 , - 1391 , - 928 , - 1305 , - 954 , - 1443 , - 1204 , - 237 , - 110 , - 823 , - 808 , - 65 , - 162 , - 1099 , - 1308 , - 789 , - 1110 , - 703 , - 1136 , - 841 , - 1386 , - 1203 , - 292 , - 221 , - 990 , - 1031 , - 344 , - 497 , - 1490 , - 187 , - 1292 , - 101 , - 1318 , - 239 , - 0 , - 993 , - 866 , - 1219 , - 452 , - 165 , - 358 , - 1031 , - 584 , - 617 , - 1130 , - 523 , - 396 , - 749 , - 1582 , - 1295 , - 1488 , - 561 , - 114 , - 147 , - 660 , - 53 , - 1526 , - 279 , - 1112 , - 825 , - 1018 , - 91 , - 1244 , - 1277 , - 190 , - 1183 , - 1056 , - 1409 , - 642 , - 355 , - 548 , - 1221 , - 774 , - 807 , - 1320 , - 713 , - 586 , - 939 , - 172 , - 1485 , - 78 , - 751 , - 304 , - 337 , - 850 , - 243 , - 116 , - 469 , - 1302 , - 1015 , - 1208 , - 281 , - 1434 , - 1467 , - 380 , - 1373 , - 1246 , - 1599 , - 832 , - 545 , - 738 , - 1411 , - 964 , - 997 , - 1510 , - 903 , - 776 , - 1129 , - 362 , - 75 , - 268 , - 941 , - 494 , - 527 , - 1040 , - 433 , - 306 , - 659 , - 1492 , - 1205 , - 1398 , - 471 , - 24 , - 57 , - 570 , - 1563 , - 1436 , - 189 , - 1022 , - 735 , - 928 , - 1 , - 1154 , - 1187 , - 100 , - 1093 , - 966 , - 1319 , - 552 , - 265 , - 458 , - 1131 , - 684 , - 717 , - 1230 , - 623 , - 496 , - 849 , - 82 , - 1395 , - 1588 , - 661 , - 214 , - 247 , - 760 , - 153 , - 26 , - 379 , - 1212 , - 925 , - 1118 , - 191 , - 1344 , - 1377 , - 290 , - 1283 , - 1156 , - 1509 , - 742 , - 455 , - 648 , - 1321 , - 874 , - 907 , - 1420 , - 813 , - 686 , - 1039 , - 272 , - 1585 , - 178 , - 851 , - 404 , - 437 , - 950 , - 343 , - 216 , - 569 , - 1402 , - 1115 , - 1308 , - 381 , - 1534 , - 1567 , - 480 , - 1473 , - 1346 , - 99 , - 932 , - 645 , - 838 , - 1511 , - 1064 , - 1097 , - 10 , - 1003 , - 876 , - 1229 , - 462 , - 175 , - 368 , - 1041 , - 594 , - 627 , - 1140 , - 533 , - 406 , - 759 , - 1592 , - 1305 , - 1498 , - 571 , - 124 , - 157 , - 670 , - 63 , - 1536 , - 289 , - 1122 , - 835 , - 1028 , - 101 , - 1254 , - 1287 , - 200 , - 1193 , - 1066 , - 1419 , - 652 , - 365 , - 558 , - 1231 , - 784 , - 817 , - 1330 , - 723 , - 596 , - 949 , - 182 , - 1495 , - 88 , - 761 , - 314 , - 347 , - 860 , - 253 , - 126 , - 479 , - 1312 , - 1025 , - 1218 , - 291 , - 1444 , - 1477 , - 390 , - 1383 , - 1256 , - 9 , - 842 , - 555 , - 748 , - 1421 , - 974 , - 1007 , - 1520 , - 913 , - 786 , - 1139 , - 372 , - 85 , - 278 , - 951 , - 504 , - 537 , - 1050 , - 443 , - 316 , - 669 , - 1502 , - 1215 , - 1408 , - 481 , - 34 , - 67 , - 580 , - 1573 , - 1446 , - 199 , - 1032 , - 745 , - 938 , - 11 , - 1164 , - 1197 , - 110 , - 1103 , - 976 , - 1329 , - 562 , - 275 , - 468 , - 1141 , - 694 , - 727 , - 1240 , - 633 , - 506 , - 859 , - 92 , - 1405 , - 1598 , - 671 , - 224 , - 257 , - 770 , - 163 , - 36 , - 389 , - 1222 , - 935 , - 1128 , - 201 , - 1354 , - 1387 , - 300 , - 1293 , - 1166 , - 1519 , - 752 , - 465 , - 658 , - 1331 , - 884 , - 917 , - 1430 , - 823 , - 696 , - 1049 , - 282 , - 1595 , - 188 , - 861 , - 414 , - 447 , - 960 , - 353 , - 226 , - 579 , - 1412 , - 1125 , - 1318 , - 391 , - 1544 , - 1577 , - 490 , - 1483 , - 1356 , - 109 , - 942 , - 655 , - 848 , - 1521 , - 1074 , - 1107 , - 20 , - 1013 , - 886 , - 1239 , - 472 , - 185 , - 378 , - 1051 , - 604 , - 637 , - 1150 , - 543 , - 416 , - 769 , - 2 , - 1315 , - 1508 , - 581 , - 134 , - 167 , - 680 , - 73 , - 1546 , - 299 , - 1132 , - 845 , - 1038 , - 111 , - 1264 , - 1297 , - 210 , - 1203 , - 1076 , - 1429 , - 662 , - 375 , - 568 , - 1241 , - 794 , - 827 , - 1340 , - 733 , - 606 , - 959 , - 192 , - 1505 , - 98 , - 771 , - 324 , - 357 , - 870 , - 263 , - 136 , - 489 , - 1322 , - 1035 , - 1228 , - 301 , - 1454 , - 1487 , - 400 , - 1393 , - 1266 , - 19 , - 852 , - 565 , - 758 , - 1431 , - 984 , - 1017 , - 1530 , - 923 , - 796 , - 1149 , - 382 , - 95 , - 288 , - 961 , - 514 , - 547 , - 1060 , - 453 , - 326 , - 679 , - 1512 , - 1225 , - 1418 , - 491 , - 44 , - 77 , - 590 , - 1583 , - 1456 , - 209 , - 1042 , - 755 , - 948 , - 21 , - 1174 , - 1207 , - 120 , - 1113 , - 986 , - 1339 , - 572 , - 285 , - 478 , - 1151 , - 704 , - 737 , - 1250 , - 643 , - 516 , - 869 , - 102 , - 1415 , - 8 , - 681 , - 234 , - 267 , - 780 , - 173 , - 46 , - 399 , - 1232 , - 945 , - 1138 , - 211 , - 1364 , - 1397 , - 310 , - 1303 , - 1176 , - 1529 , - 762 , - 475 , - 668 , - 1341 , - 894 , - 927 , - 1440 , - 833 , - 706 , - 1059 , - 292 , - 5 , - 198 , - 871 , - 424 , - 457 , - 970 , - 363 , - 236 , - 589 , - 1422 , - 1135 , - 1328 , - 401 , - 1554 , - 1587 , - 500 , - 1493 , - 1366 , - 119 , - 952 , - 665 , - 858 , - 1531 , - 1084 , - 1117 , - 30 , - 1023 , - 896 , - 1249 , - 482 , - 195 , - 388 , - 1061 , - 614 , - 647 , - 1160 , - 553 , - 426 , - 779 , - 12 , - 1325 , - 1518 , - 591 , - 144 , - 177 , - 690 , - 83 , - 1556 , - 309 , - 1142 , - 855 , - 1048 , - 121 , - 1274 , - 1307 , - 220 , - 1213 , - 1086 , - 1439 , - 672 , - 385 , - 578 , - 1251 , - 804 , - 837 , - 1350 , - 743 , - 616 , - 969 , - 202 , - 1515 , - 108 , - 781 , - 334 , - 367 , - 880 , - 273 , - 146 , - 499 , - 1332 , - 1045 , - 1238 , - 311 , - 1464 , - 1497 , - 410 , - 1403 , - 1276 , - 29 , - 862 , - 575 , - 768 , - 1441 , - 994 , - 1027 , - 1540 , - 933 , - 806 , - 1159 , - 392 , - 105 , - 298 , - 971 , - 524 , - 557 , - 1070 , - 463 , - 336 , - 689 , - 1522 , - 1235 , - 1428 , - 501 , - 54 , - 87 , - 600 , - 1593 , - 1466 , - 219 , - 1052 , - 765 , - 958 , - 31 , - 1184 , - 1217 , - 130 , - 1123 , - 996 , - 1349 , - 582 , - 295 , - 488 , - 1161 , - 714 , - 747 , - 1260 , - 653 , - 526 , - 879 , - 112 , - 1425 , - 18 , - 691 , - 244 , - 277 , - 790 , - 183 , - 56 , - 409 , - 1242 , - 955 , - 1148 , - 221 , - 1374 , - 1407 , - 320 , - 1313 , - 1186 , - 1539 , - 772 , - 485 , - 678 , - 1351 , - 904 , - 937 , - 1450 , - 843 , - 716 , - 1069 , - 302 , - 15 , - 208 , - 881 , - 434 , - 467 , - 980 , - 373 , - 246 , - 599 , - 1432 , - 1145 , - 1338 , - 411 , - 1564 , - 1597 , - 510 , - 1503 , - 1376 , - 129 , - 962 , - 675 , - 868 , - 1541 , - 1094 , - 1127 , - 40 , - 1033 , - 906 , - 1259 , - 492 , - 205 , - 398 , - 1071 , - 624 , - 657 , - 1170 , - 563 , - 436 , - 789 , - 22 , - 1335 , - 1528 , - 601 , - 154 , - 187 , - 700 , - 93 , - 1566 , - 319 , - 1152 , - 865 , - 1058 , - 131 , - 1284 , - 1317 , - 230 , - 1223 , - 1096 , - 1449 , - 682 , - 395 , - 588 , - 1261 , - 814 , - 847 , - 1360 , - 753 , - 626 , - 979 , - 212 , - 1525 , - 118 , - 791 , - 344 , - 377 , - 890 , - 283 , - 156 , - 509 , - 1342 , - 1055 , - 1248 , - 321 , - 1474 , - 1507 , - 420 , - 1413 , - 1286 , - 39 , - 872 , - 585 , - 778 , - 1451 , - 1004 , - 1037 , - 1550 , - 943 , - 816 , - 1169 , - 402 , - 115 , - 308 , - 981 , - 534 , - 567 , - 1080 , - 473 , - 346 , - 699 , - 1532 , - 1245 , - 1438 , - 511 , - 64 , - 97 , - 610 , - 3 , - 1476 , - 229 , - 1062 , - 775 , - 968 , - 41 , - 1194 , - 1227 , - 140 , - 1133 , - 1006 , - 1359 , - 592 , - 305 , - 498 , - 1171 , - 724 , - 757 , - 1270 , - 663 , - 536 , - 889 , - 122 , - 1435 , - 28 , - 701 , - 254 , - 287 , - 800 , - 193 , - 66 , - 419 , - 1252 , - 965 , - 1158 , - 231 , - 1384 , - 1417 , - 330 , - 1323 , - 1196 , - 1549 , - 782 , - 495 , - 688 , - 1361 , - 914 , - 947 , - 1460 , - 853 , - 726 , - 1079 , - 312 , - 25 , - 218 , - 891 , - 444 , - 477 , - 990 , - 383 , - 256 , - 609 , - 1442 , - 1155 , - 1348 , - 421 , - 1574 , - 7 , - 520 , - 1513 , - 1386 , - 139 , - 972 , - 685 , - 878 , - 1551 , - 1104 , - 1137 , - 50 , - 1043 , - 916 , - 1269 , - 502 , - 215 , - 408 , - 1081 , - 634 , - 667 , - 1180 , - 573 , - 446 , - 799 , - 32 , - 1345 , - 1538 , - 611 , - 164 , - 197 , - 710 , - 103 , - 1576 , - 329 , - 1162 , - 875 , - 1068 , - 141 , - 1294 , - 1327 , - 240 , - 1233 , - 1106 , - 1459 , - 692 , - 405 , - 598 , - 1271 , - 824 , - 857 , - 1370 , - 763 , - 636 , - 989 , - 222 , - 1535 , - 128 , - 801 , - 354 , - 387 , - 900 , - 293 , - 166 , - 519 , - 1352 , - 1065 , - 1258 , - 331 , - 1484 , - 1517 , - 430 , - 1423 , - 1296 , - 49 , - 882 , - 595 , - 788 , - 1461 , - 1014 , - 1047 , - 1560 , - 953 , - 826 , - 1179 , - 412 , - 125 , - 318 , - 991 , - 544 , - 577 , - 1090 , - 483 , - 356 , - 709 , - 1542 , - 1255 , - 1448 , - 521 , - 74 , - 107 , - 620 , - 13 , - 1486 , - 239 , - 1072 , - 785 , - 978 , - 51 , - 1204 , - 1237 , - 150 , - 1143 , - 1016 , - 1369 , - 602 , - 315 , - 508 , - 1181 , - 734 , - 767 , - 1280 , - 673 , - 546 , - 899 , - 132 , - 1445 , - 38 , - 711 , - 264 , - 297 , - 810 , - 203 , - 76 , - 429 , - 1262 , - 975 , - 1168 , - 241 , - 1394 , - 1427 , - 340 , - 1333 , - 1206 , - 1559 , - 792 , - 505 , - 698 , - 1371 , - 924 , - 957 , - 1470 , - 863 , - 736 , - 1089 , - 322 , - 35 , - 228 , - 901 , - 454 , - 487 , - 1000 , - 393 , - 266 , - 619 , - 1452 , - 1165 , - 1358 , - 431 , - 1584 , - 17 , - 530 , - 1523 , - 1396 , - 149 , - 982 , - 695 , - 888 , - 1561 , - 1114 , - 1147 , - 60 , - 1053 , - 926 , - 1279 , - 512 , - 225 , - 418 , - 1091 , - 644 , - 677 , - 1190 , - 583 , - 456 , - 809 , - 42 , - 1355 , - 1548 , - 621 , - 174 , - 207 , - 720 , - 113 , - 1586 , - 339 , - 1172 , - 885 , - 1078 , - 151 , - 1304 , - 1337 , - 250 , - 1243 , - 1116 , - 1469 , - 702 , - 415 , - 608 , - 1281 , - 834 , - 867 , - 1380 , - 773 , - 646 , - 999 , - 232 , - 1545 , - 138 , - 811 , - 364 , - 397 , - 910 , - 303 , - 176 , - 529 , - 1362 , - 1075 , - 1268 , - 341 , - 1494 , - 1527 , - 440 , - 1433 , - 1306 , - 59 , - 892 , - 605 , - 798 , - 1471 , - 1024 , - 1057 , - 1570 , - 963 , - 836 , - 1189 , - 422 , - 135 , - 328 , - 1001 , - 554 , - 587 , - 1100 , - 493 , - 366 , - 719 , - 1552 , - 1265 , - 1458 , - 531 , - 84 , - 117 , - 630 , - 23 , - 1496 , - 249 , - 1082 , - 795 , - 988 , - 61 , - 1214 , - 1247 , - 160 , - 1153 , - 1026 , - 1379 , - 612 , - 325 , - 518 , - 1191 , - 744 , - 777 , - 1290 , - 683 , - 556 , - 909 , - 142 , - 1455 , - 48 , - 721 , - 274 , - 307 , - 820 , - 213 , - 86 , - 439 , - 1272 , - 985 , - 1178 , - 251 , - 1404 , - 1437 , - 350 , - 1343 , - 1216 , - 1569 , - 802 , - 515 , - 708 , - 1381 , - 934 , - 967 , - 1480 , - 873 , - 746 , - 1099 , - 332 , - 45 , - 238 , - 911 , - 464 , - 497 , - 1010 , - 403 , - 276 , - 629 , - 1462 , - 1175 , - 1368 , - 441 , - 1594 , - 27 , - 540 , - 1533 , - 1406 , - 159 , - 992 , - 705 , - 898 , - 1571 , - 1124 , - 1157 , - 70 , - 1063 , - 936 , - 1289 , - 522 , - 235 , - 428 , - 1101 , - 654 , - 687 , - 1200 , - 593 , - 466 , - 819 , - 52 , - 1365 , - 1558 , - 631 , - 184 , - 217 , - 730 , - 123 , - 1596 , - 349 , - 1182 , - 895 , - 1088 , - 161 , - 1314 , - 1347 , - 260 , - 1253 , - 1126 , - 1479 , - 712 , - 425 , - 618 , - 1291 , - 844 , - 877 , - 1390 , - 783 , - 656 , - 1009 , - 242 , - 1555 , - 148 , - 821 , - 374 , - 407 , - 920 , - 313 , - 186 , - 539 , - 1372 , - 1085 , - 1278 , - 351 , - 1504 , - 1537 , - 450 , - 1443 , - 1316 , - 69 , - 902 , - 615 , - 808 , - 1481 , - 1034 , - 1067 , - 1580 , - 973 , - 846 , - 1199 , - 432 , - 145 , - 338 , - 1011 , - 564 , - 597 , - 1110 , - 503 , - 376 , - 729 , - 1562 , - 1275 , - 1468 , - 541 , - 94 , - 127 , - 640 , - 33 , - 1506 , - 259 , - 1092 , - 805 , - 998 , - 71 , - 1224 , - 1257 , - 170 , - 1163 , - 1036 , - 1389 , - 622 , - 335 , - 528 , - 1201 , - 754 , - 787 , - 1300 , - 693 , - 566 , - 919 , - 152 , - 1465 , - 58 , - 731 , - 284 , - 317 , - 830 , - 223 , - 96 , - 449 , - 1282 , - 995 , - 1188 , - 261 , - 1414 , - 1447 , - 360 , - 1353 , - 1226 , - 1579 , - 812 , - 525 , - 718 , - 1391 , - 944 , - 977 , - 1490 , - 883 , - 756 , - 1109 , - 342 , - 55 , - 248 , - 921 , - 474 , - 507 , - 1020 , - 413 , - 286 , - 639 , - 1472 , - 1185 , - 1378 , - 451 , - 4 , - 37 , - 550 , - 1543 , - 1416 , - 169 , - 1002 , - 715 , - 908 , - 1581 , - 1134 , - 1167 , - 80 , - 1073 , - 946 , - 1299 , - 532 , - 245 , - 438 , - 1111 , - 664 , - 697 , - 1210 , - 603 , - 476 , - 829 , - 62 , - 1375 , - 1568 , - 641 , - 194 , - 227 , - 740 , - 133 , - 6 , - 359 , - 1192 , - 905 , - 1098 , - 171 , - 1324 , - 1357 , - 270 , - 1263 , - 1136 , - 1489 , - 722 , - 435 , - 628 , - 1301 , - 854 , - 887 , - 1400 , - 793 , - 666 , - 1019 , - 252 , - 1565 , - 158 , - 831 , - 384 , - 417 , - 930 , - 323 , - 196 , - 549 , - 1382 , - 1095 , - 1288 , - 361 , - 1514 , - 1547 , - 460 , - 1453 , - 1326 , - 79 , - 912 , - 625 , - 818 , - 1491 , - 1044 , - 1077 , - 1590 , - 983 , - 856 , - 1209 , - 442 , - 155 , - 348 , - 1021 , - 574 , - 607 , - 1120 , - 513 , - 386 , - 739 , - 1572 , - 1285 , - 1478 , - 551 , - 104 , - 137 , - 650 , - 43 , - 1516 , - 269 , - 1102 , - 815 , - 1008 , - 81 , - 1234 , - 1267 , - 180 , - 1173 , - 1046 , - 1399 , - 632 , - 345 , - 538 , - 1211 , - 764 , - 797 , - 1310 , - 703 , - 576 , - 929 , - 162 , - 1475 , - 68 , - 741 , - 294 , - 327 , - 840 , - 233 , - 106 , - 459 , - 1292 , - 1005 , - 1198 , - 271 , - 1424 , - 1457 , - 370 , - 1363 , - 1236 , - 1589 , - 822 , - 535 , - 728 , - 1401 , - 954 , - 987 , - 1500 , - 893 , - 766 , - 1119 , - 352 , - 65 , - 258 , - 931 , - 484 , - 517 , - 1030 , - 423 , - 296 , - 649 , - 1482 , - 1195 , - 1388 , - 461 , - 14 , - 47 , - 560 , - 1553 , - 1426 , - 179 , - 1012 , - 725 , - 918 , - 1591 , - 1144 , - 1177 , - 90 , - 1083 , - 956 , - 1309 , - 542 , - 255 , - 448 , - 1121 , - 674 , - 707 , - 1220 , - 613 , - 486 , - 839 , - 72 , - 1385 , - 1578 , - 651 , - 204 , - 237 , - 750 , - 143 , - 16 , - 369 , - 1202 , - 915 , - 1108 , - 181 , - 1334 , - 1367 , - 280 , - 1273 , - 1146 , - 1499 , - 732 , - 445 , - 638 , - 1311 , - 864 , - 897 , - 1410 , - 803 , - 676 , - 1029 , - 262 , - 1575 , - 168 , - 841 , - 394 , - 427 , - 940 , - 333 , - 206 , - 559 , - 1392 , - 1105 , - 1298 , - 371 , - 1524 , - 1557 , - 470 , - 1463 , - 1336 , - 89 , - 922 , - 635 , - 828 , - 1501 , - 1054 , - 1087 , - 0 , - 355 , - 506 , - 1269 , - 196 , - 1367 , - 702 , - 649 , - 392 , - 747 , - 898 , - 29 , - 588 , - 127 , - 1094 , - 1041 , - 784 , - 1139 , - 1290 , - 421 , - 980 , - 519 , - 1486 , - 1433 , - 1176 , - 1531 , - 50 , - 813 , - 1372 , - 911 , - 246 , - 193 , - 1568 , - 291 , - 442 , - 1205 , - 132 , - 1303 , - 638 , - 585 , - 328 , - 683 , - 834 , - 1597 , - 524 , - 63 , - 1030 , - 977 , - 720 , - 1075 , - 1226 , - 357 , - 916 , - 455 , - 1422 , - 1369 , - 1112 , - 1467 , - 1618 , - 749 , - 1308 , - 847 , - 182 , - 129 , - 1504 , - 227 , - 378 , - 1141 , - 68 , - 1239 , - 574 , - 521 , - 264 , - 619 , - 770 , - 1533 , - 460 , - 1631 , - 966 , - 913 , - 656 , - 1011 , - 1162 , - 293 , - 852 , - 391 , - 1358 , - 1305 , - 1048 , - 1403 , - 1554 , - 685 , - 1244 , - 783 , - 118 , - 65 , - 1440 , - 163 , - 314 , - 1077 , - 4 , - 1175 , - 510 , - 457 , - 200 , - 555 , - 706 , - 1469 , - 396 , - 1567 , - 902 , - 849 , - 592 , - 947 , - 1098 , - 229 , - 788 , - 327 , - 1294 , - 1241 , - 984 , - 1339 , - 1490 , - 621 , - 1180 , - 719 , - 54 , - 1 , - 1376 , - 99 , - 250 , - 1013 , - 1572 , - 1111 , - 446 , - 393 , - 136 , - 491 , - 642 , - 1405 , - 332 , - 1503 , - 838 , - 785 , - 528 , - 883 , - 1034 , - 165 , - 724 , - 263 , - 1230 , - 1177 , - 920 , - 1275 , - 1426 , - 557 , - 1116 , - 655 , - 1622 , - 1569 , - 1312 , - 35 , - 186 , - 949 , - 1508 , - 1047 , - 382 , - 329 , - 72 , - 427 , - 578 , - 1341 , - 268 , - 1439 , - 774 , - 721 , - 464 , - 819 , - 970 , - 101 , - 660 , - 199 , - 1166 , - 1113 , - 856 , - 1211 , - 1362 , - 493 , - 1052 , - 591 , - 1558 , - 1505 , - 1248 , - 1603 , - 122 , - 885 , - 1444 , - 983 , - 318 , - 265 , - 8 , - 363 , - 514 , - 1277 , - 204 , - 1375 , - 710 , - 657 , - 400 , - 755 , - 906 , - 37 , - 596 , - 135 , - 1102 , - 1049 , - 792 , - 1147 , - 1298 , - 429 , - 988 , - 527 , - 1494 , - 1441 , - 1184 , - 1539 , - 58 , - 821 , - 1380 , - 919 , - 254 , - 201 , - 1576 , - 299 , - 450 , - 1213 , - 140 , - 1311 , - 646 , - 593 , - 336 , - 691 , - 842 , - 1605 , - 532 , - 71 , - 1038 , - 985 , - 728 , - 1083 , - 1234 , - 365 , - 924 , - 463 , - 1430 , - 1377 , - 1120 , - 1475 , - 1626 , - 757 , - 1316 , - 855 , - 190 , - 137 , - 1512 , - 235 , - 386 , - 1149 , - 76 , - 1247 , - 582 , - 529 , - 272 , - 627 , - 778 , - 1541 , - 468 , - 7 , - 974 , - 921 , - 664 , - 1019 , - 1170 , - 301 , - 860 , - 399 , - 1366 , - 1313 , - 1056 , - 1411 , - 1562 , - 693 , - 1252 , - 791 , - 126 , - 73 , - 1448 , - 171 , - 322 , - 1085 , - 12 , - 1183 , - 518 , - 465 , - 208 , - 563 , - 714 , - 1477 , - 404 , - 1575 , - 910 , - 857 , - 600 , - 955 , - 1106 , - 237 , - 796 , - 335 , - 1302 , - 1249 , - 992 , - 1347 , - 1498 , - 629 , - 1188 , - 727 , - 62 , - 9 , - 1384 , - 107 , - 258 , - 1021 , - 1580 , - 1119 , - 454 , - 401 , - 144 , - 499 , - 650 , - 1413 , - 340 , - 1511 , - 846 , - 793 , - 536 , - 891 , - 1042 , - 173 , - 732 , - 271 , - 1238 , - 1185 , - 928 , - 1283 , - 1434 , - 565 , - 1124 , - 663 , - 1630 , - 1577 , - 1320 , - 43 , - 194 , - 957 , - 1516 , - 1055 , - 390 , - 337 , - 80 , - 435 , - 586 , - 1349 , - 276 , - 1447 , - 782 , - 729 , - 472 , - 827 , - 978 , - 109 , - 668 , - 207 , - 1174 , - 1121 , - 864 , - 1219 , - 1370 , - 501 , - 1060 , - 599 , - 1566 , - 1513 , - 1256 , - 1611 , - 130 , - 893 , - 1452 , - 991 , - 326 , - 273 , - 16 , - 371 , - 522 , - 1285 , - 212 , - 1383 , - 718 , - 665 , - 408 , - 763 , - 914 , - 45 , - 604 , - 143 , - 1110 , - 1057 , - 800 , - 1155 , - 1306 , - 437 , - 996 , - 535 , - 1502 , - 1449 , - 1192 , - 1547 , - 66 , - 829 , - 1388 , - 927 , - 262 , - 209 , - 1584 , - 307 , - 458 , - 1221 , - 148 , - 1319 , - 654 , - 601 , - 344 , - 699 , - 850 , - 1613 , - 540 , - 79 , - 1046 , - 993 , - 736 , - 1091 , - 1242 , - 373 , - 932 , - 471 , - 1438 , - 1385 , - 1128 , - 1483 , - 2 , - 765 , - 1324 , - 863 , - 198 , - 145 , - 1520 , - 243 , - 394 , - 1157 , - 84 , - 1255 , - 590 , - 537 , - 280 , - 635 , - 786 , - 1549 , - 476 , - 15 , - 982 , - 929 , - 672 , - 1027 , - 1178 , - 309 , - 868 , - 407 , - 1374 , - 1321 , - 1064 , - 1419 , - 1570 , - 701 , - 1260 , - 799 , - 134 , - 81 , - 1456 , - 179 , - 330 , - 1093 , - 20 , - 1191 , - 526 , - 473 , - 216 , - 571 , - 722 , - 1485 , - 412 , - 1583 , - 918 , - 865 , - 608 , - 963 , - 1114 , - 245 , - 804 , - 343 , - 1310 , - 1257 , - 1000 , - 1355 , - 1506 , - 637 , - 1196 , - 735 , - 70 , - 17 , - 1392 , - 115 , - 266 , - 1029 , - 1588 , - 1127 , - 462 , - 409 , - 152 , - 507 , - 658 , - 1421 , - 348 , - 1519 , - 854 , - 801 , - 544 , - 899 , - 1050 , - 181 , - 740 , - 279 , - 1246 , - 1193 , - 936 , - 1291 , - 1442 , - 573 , - 1132 , - 671 , - 6 , - 1585 , - 1328 , - 51 , - 202 , - 965 , - 1524 , - 1063 , - 398 , - 345 , - 88 , - 443 , - 594 , - 1357 , - 284 , - 1455 , - 790 , - 737 , - 480 , - 835 , - 986 , - 117 , - 676 , - 215 , - 1182 , - 1129 , - 872 , - 1227 , - 1378 , - 509 , - 1068 , - 607 , - 1574 , - 1521 , - 1264 , - 1619 , - 138 , - 901 , - 1460 , - 999 , - 334 , - 281 , - 24 , - 379 , - 530 , - 1293 , - 220 , - 1391 , - 726 , - 673 , - 416 , - 771 , - 922 , - 53 , - 612 , - 151 , - 1118 , - 1065 , - 808 , - 1163 , - 1314 , - 445 , - 1004 , - 543 , - 1510 , - 1457 , - 1200 , - 1555 , - 74 , - 837 , - 1396 , - 935 , - 270 , - 217 , - 1592 , - 315 , - 466 , - 1229 , - 156 , - 1327 , - 662 , - 609 , - 352 , - 707 , - 858 , - 1621 , - 548 , - 87 , - 1054 , - 1001 , - 744 , - 1099 , - 1250 , - 381 , - 940 , - 479 , - 1446 , - 1393 , - 1136 , - 1491 , - 10 , - 773 , - 1332 , - 871 , - 206 , - 153 , - 1528 , - 251 , - 402 , - 1165 , - 92 , - 1263 , - 598 , - 545 , - 288 , - 643 , - 794 , - 1557 , - 484 , - 23 , - 990 , - 937 , - 680 , - 1035 , - 1186 , - 317 , - 876 , - 415 , - 1382 , - 1329 , - 1072 , - 1427 , - 1578 , - 709 , - 1268 , - 807 , - 142 , - 89 , - 1464 , - 187 , - 338 , - 1101 , - 28 , - 1199 , - 534 , - 481 , - 224 , - 579 , - 730 , - 1493 , - 420 , - 1591 , - 926 , - 873 , - 616 , - 971 , - 1122 , - 253 , - 812 , - 351 , - 1318 , - 1265 , - 1008 , - 1363 , - 1514 , - 645 , - 1204 , - 743 , - 78 , - 25 , - 1400 , - 123 , - 274 , - 1037 , - 1596 , - 1135 , - 470 , - 417 , - 160 , - 515 , - 666 , - 1429 , - 356 , - 1527 , - 862 , - 809 , - 552 , - 907 , - 1058 , - 189 , - 748 , - 287 , - 1254 , - 1201 , - 944 , - 1299 , - 1450 , - 581 , - 1140 , - 679 , - 14 , - 1593 , - 1336 , - 59 , - 210 , - 973 , - 1532 , - 1071 , - 406 , - 353 , - 96 , - 451 , - 602 , - 1365 , - 292 , - 1463 , - 798 , - 745 , - 488 , - 843 , - 994 , - 125 , - 684 , - 223 , - 1190 , - 1137 , - 880 , - 1235 , - 1386 , - 517 , - 1076 , - 615 , - 1582 , - 1529 , - 1272 , - 1627 , - 146 , - 909 , - 1468 , - 1007 , - 342 , - 289 , - 32 , - 387 , - 538 , - 1301 , - 228 , - 1399 , - 734 , - 681 , - 424 , - 779 , - 930 , - 61 , - 620 , - 159 , - 1126 , - 1073 , - 816 , - 1171 , - 1322 , - 453 , - 1012 , - 551 , - 1518 , - 1465 , - 1208 , - 1563 , - 82 , - 845 , - 1404 , - 943 , - 278 , - 225 , - 1600 , - 323 , - 474 , - 1237 , - 164 , - 1335 , - 670 , - 617 , - 360 , - 715 , - 866 , - 1629 , - 556 , - 95 , - 1062 , - 1009 , - 752 , - 1107 , - 1258 , - 389 , - 948 , - 487 , - 1454 , - 1401 , - 1144 , - 1499 , - 18 , - 781 , - 1340 , - 879 , - 214 , - 161 , - 1536 , - 259 , - 410 , - 1173 , - 100 , - 1271 , - 606 , - 553 , - 296 , - 651 , - 802 , - 1565 , - 492 , - 31 , - 998 , - 945 , - 688 , - 1043 , - 1194 , - 325 , - 884 , - 423 , - 1390 , - 1337 , - 1080 , - 1435 , - 1586 , - 717 , - 1276 , - 815 , - 150 , - 97 , - 1472 , - 195 , - 346 , - 1109 , - 36 , - 1207 , - 542 , - 489 , - 232 , - 587 , - 738 , - 1501 , - 428 , - 1599 , - 934 , - 881 , - 624 , - 979 , - 1130 , - 261 , - 820 , - 359 , - 1326 , - 1273 , - 1016 , - 1371 , - 1522 , - 653 , - 1212 , - 751 , - 86 , - 33 , - 1408 , - 131 , - 282 , - 1045 , - 1604 , - 1143 , - 478 , - 425 , - 168 , - 523 , - 674 , - 1437 , - 364 , - 1535 , - 870 , - 817 , - 560 , - 915 , - 1066 , - 197 , - 756 , - 295 , - 1262 , - 1209 , - 952 , - 1307 , - 1458 , - 589 , - 1148 , - 687 , - 22 , - 1601 , - 1344 , - 67 , - 218 , - 981 , - 1540 , - 1079 , - 414 , - 361 , - 104 , - 459 , - 610 , - 1373 , - 300 , - 1471 , - 806 , - 753 , - 496 , - 851 , - 1002 , - 133 , - 692 , - 231 , - 1198 , - 1145 , - 888 , - 1243 , - 1394 , - 525 , - 1084 , - 623 , - 1590 , - 1537 , - 1280 , - 3 , - 154 , - 917 , - 1476 , - 1015 , - 350 , - 297 , - 40 , - 395 , - 546 , - 1309 , - 236 , - 1407 , - 742 , - 689 , - 432 , - 787 , - 938 , - 69 , - 628 , - 167 , - 1134 , - 1081 , - 824 , - 1179 , - 1330 , - 461 , - 1020 , - 559 , - 1526 , - 1473 , - 1216 , - 1571 , - 90 , - 853 , - 1412 , - 951 , - 286 , - 233 , - 1608 , - 331 , - 482 , - 1245 , - 172 , - 1343 , - 678 , - 625 , - 368 , - 723 , - 874 , - 5 , - 564 , - 103 , - 1070 , - 1017 , - 760 , - 1115 , - 1266 , - 397 , - 956 , - 495 , - 1462 , - 1409 , - 1152 , - 1507 , - 26 , - 789 , - 1348 , - 887 , - 222 , - 169 , - 1544 , - 267 , - 418 , - 1181 , - 108 , - 1279 , - 614 , - 561 , - 304 , - 659 , - 810 , - 1573 , - 500 , - 39 , - 1006 , - 953 , - 696 , - 1051 , - 1202 , - 333 , - 892 , - 431 , - 1398 , - 1345 , - 1088 , - 1443 , - 1594 , - 725 , - 1284 , - 823 , - 158 , - 105 , - 1480 , - 203 , - 354 , - 1117 , - 44 , - 1215 , - 550 , - 497 , - 240 , - 595 , - 746 , - 1509 , - 436 , - 1607 , - 942 , - 889 , - 632 , - 987 , - 1138 , - 269 , - 828 , - 367 , - 1334 , - 1281 , - 1024 , - 1379 , - 1530 , - 661 , - 1220 , - 759 , - 94 , - 41 , - 1416 , - 139 , - 290 , - 1053 , - 1612 , - 1151 , - 486 , - 433 , - 176 , - 531 , - 682 , - 1445 , - 372 , - 1543 , - 878 , - 825 , - 568 , - 923 , - 1074 , - 205 , - 764 , - 303 , - 1270 , - 1217 , - 960 , - 1315 , - 1466 , - 597 , - 1156 , - 695 , - 30 , - 1609 , - 1352 , - 75 , - 226 , - 989 , - 1548 , - 1087 , - 422 , - 369 , - 112 , - 467 , - 618 , - 1381 , - 308 , - 1479 , - 814 , - 761 , - 504 , - 859 , - 1010 , - 141 , - 700 , - 239 , - 1206 , - 1153 , - 896 , - 1251 , - 1402 , - 533 , - 1092 , - 631 , - 1598 , - 1545 , - 1288 , - 11 , - 162 , - 925 , - 1484 , - 1023 , - 358 , - 305 , - 48 , - 403 , - 554 , - 1317 , - 244 , - 1415 , - 750 , - 697 , - 440 , - 795 , - 946 , - 77 , - 636 , - 175 , - 1142 , - 1089 , - 832 , - 1187 , - 1338 , - 469 , - 1028 , - 567 , - 1534 , - 1481 , - 1224 , - 1579 , - 98 , - 861 , - 1420 , - 959 , - 294 , - 241 , - 1616 , - 339 , - 490 , - 1253 , - 180 , - 1351 , - 686 , - 633 , - 376 , - 731 , - 882 , - 13 , - 572 , - 111 , - 1078 , - 1025 , - 768 , - 1123 , - 1274 , - 405 , - 964 , - 503 , - 1470 , - 1417 , - 1160 , - 1515 , - 34 , - 797 , - 1356 , - 895 , - 230 , - 177 , - 1552 , - 275 , - 426 , - 1189 , - 116 , - 1287 , - 622 , - 569 , - 312 , - 667 , - 818 , - 1581 , - 508 , - 47 , - 1014 , - 961 , - 704 , - 1059 , - 1210 , - 341 , - 900 , - 439 , - 1406 , - 1353 , - 1096 , - 1451 , - 1602 , - 733 , - 1292 , - 831 , - 166 , - 113 , - 1488 , - 211 , - 362 , - 1125 , - 52 , - 1223 , - 558 , - 505 , - 248 , - 603 , - 754 , - 1517 , - 444 , - 1615 , - 950 , - 897 , - 640 , - 995 , - 1146 , - 277 , - 836 , - 375 , - 1342 , - 1289 , - 1032 , - 1387 , - 1538 , - 669 , - 1228 , - 767 , - 102 , - 49 , - 1424 , - 147 , - 298 , - 1061 , - 1620 , - 1159 , - 494 , - 441 , - 184 , - 539 , - 690 , - 1453 , - 380 , - 1551 , - 886 , - 833 , - 576 , - 931 , - 1082 , - 213 , - 772 , - 311 , - 1278 , - 1225 , - 968 , - 1323 , - 1474 , - 605 , - 1164 , - 703 , - 38 , - 1617 , - 1360 , - 83 , - 234 , - 997 , - 1556 , - 1095 , - 430 , - 377 , - 120 , - 475 , - 626 , - 1389 , - 316 , - 1487 , - 822 , - 769 , - 512 , - 867 , - 1018 , - 149 , - 708 , - 247 , - 1214 , - 1161 , - 904 , - 1259 , - 1410 , - 541 , - 1100 , - 639 , - 1606 , - 1553 , - 1296 , - 19 , - 170 , - 933 , - 1492 , - 1031 , - 366 , - 313 , - 56 , - 411 , - 562 , - 1325 , - 252 , - 1423 , - 758 , - 705 , - 448 , - 803 , - 954 , - 85 , - 644 , - 183 , - 1150 , - 1097 , - 840 , - 1195 , - 1346 , - 477 , - 1036 , - 575 , - 1542 , - 1489 , - 1232 , - 1587 , - 106 , - 869 , - 1428 , - 967 , - 302 , - 249 , - 1624 , - 347 , - 498 , - 1261 , - 188 , - 1359 , - 694 , - 641 , - 384 , - 739 , - 890 , - 21 , - 580 , - 119 , - 1086 , - 1033 , - 776 , - 1131 , - 1282 , - 413 , - 972 , - 511 , - 1478 , - 1425 , - 1168 , - 1523 , - 42 , - 805 , - 1364 , - 903 , - 238 , - 185 , - 1560 , - 283 , - 434 , - 1197 , - 124 , - 1295 , - 630 , - 577 , - 320 , - 675 , - 826 , - 1589 , - 516 , - 55 , - 1022 , - 969 , - 712 , - 1067 , - 1218 , - 349 , - 908 , - 447 , - 1414 , - 1361 , - 1104 , - 1459 , - 1610 , - 741 , - 1300 , - 839 , - 174 , - 121 , - 1496 , - 219 , - 370 , - 1133 , - 60 , - 1231 , - 566 , - 513 , - 256 , - 611 , - 762 , - 1525 , - 452 , - 1623 , - 958 , - 905 , - 648 , - 1003 , - 1154 , - 285 , - 844 , - 383 , - 1350 , - 1297 , - 1040 , - 1395 , - 1546 , - 677 , - 1236 , - 775 , - 110 , - 57 , - 1432 , - 155 , - 306 , - 1069 , - 1628 , - 1167 , - 502 , - 449 , - 192 , - 547 , - 698 , - 1461 , - 388 , - 1559 , - 894 , - 841 , - 584 , - 939 , - 1090 , - 221 , - 780 , - 319 , - 1286 , - 1233 , - 976 , - 1331 , - 1482 , - 613 , - 1172 , - 711 , - 46 , - 1625 , - 1368 , - 91 , - 242 , - 1005 , - 1564 , - 1103 , - 438 , - 385 , - 128 , - 483 , - 634 , - 1397 , - 324 , - 1495 , - 830 , - 777 , - 520 , - 875 , - 1026 , - 157 , - 716 , - 255 , - 1222 , - 1169 , - 912 , - 1267 , - 1418 , - 549 , - 1108 , - 647 , - 1614 , - 1561 , - 1304 , - 27 , - 178 , - 941 , - 1500 , - 1039 , - 374 , - 321 , - 64 , - 419 , - 570 , - 1333 , - 260 , - 1431 , - 766 , - 713 , - 456 , - 811 , - 962 , - 93 , - 652 , - 191 , - 1158 , - 1105 , - 848 , - 1203 , - 1354 , - 485 , - 1044 , - 583 , - 1550 , - 1497 , - 1240 , - 1595 , - 114 , - 877 , - 1436 , - 975 , - 310 , - 257 , - 0 , - 1327 , - 1198 , - 1277 , - 1564 , - 395 , - 1098 , - 345 , - 1464 , - 1127 , - 998 , - 1077 , - 1364 , - 195 , - 898 , - 145 , - 1264 , - 927 , - 798 , - 877 , - 1164 , - 1659 , - 698 , - 1609 , - 1064 , - 727 , - 598 , - 677 , - 964 , - 1459 , - 498 , - 1409 , - 864 , - 527 , - 398 , - 477 , - 764 , - 1259 , - 298 , - 1209 , - 664 , - 327 , - 198 , - 277 , - 564 , - 1059 , - 98 , - 1009 , - 464 , - 127 , - 1662 , - 77 , - 364 , - 859 , - 1562 , - 809 , - 264 , - 1591 , - 1462 , - 1541 , - 164 , - 659 , - 1362 , - 609 , - 64 , - 1391 , - 1262 , - 1341 , - 1628 , - 459 , - 1162 , - 409 , - 1528 , - 1191 , - 1062 , - 1141 , - 1428 , - 259 , - 962 , - 209 , - 1328 , - 991 , - 862 , - 941 , - 1228 , - 59 , - 762 , - 9 , - 1128 , - 791 , - 662 , - 741 , - 1028 , - 1523 , - 562 , - 1473 , - 928 , - 591 , - 462 , - 541 , - 828 , - 1323 , - 362 , - 1273 , - 728 , - 391 , - 262 , - 341 , - 628 , - 1123 , - 162 , - 1073 , - 528 , - 191 , - 62 , - 141 , - 428 , - 923 , - 1626 , - 873 , - 328 , - 1655 , - 1526 , - 1605 , - 228 , - 723 , - 1426 , - 673 , - 128 , - 1455 , - 1326 , - 1405 , - 28 , - 523 , - 1226 , - 473 , - 1592 , - 1255 , - 1126 , - 1205 , - 1492 , - 323 , - 1026 , - 273 , - 1392 , - 1055 , - 926 , - 1005 , - 1292 , - 123 , - 826 , - 73 , - 1192 , - 855 , - 726 , - 805 , - 1092 , - 1587 , - 626 , - 1537 , - 992 , - 655 , - 526 , - 605 , - 892 , - 1387 , - 426 , - 1337 , - 792 , - 455 , - 326 , - 405 , - 692 , - 1187 , - 226 , - 1137 , - 592 , - 255 , - 126 , - 205 , - 492 , - 987 , - 26 , - 937 , - 392 , - 55 , - 1590 , - 5 , - 292 , - 787 , - 1490 , - 737 , - 192 , - 1519 , - 1390 , - 1469 , - 92 , - 587 , - 1290 , - 537 , - 1656 , - 1319 , - 1190 , - 1269 , - 1556 , - 387 , - 1090 , - 337 , - 1456 , - 1119 , - 990 , - 1069 , - 1356 , - 187 , - 890 , - 137 , - 1256 , - 919 , - 790 , - 869 , - 1156 , - 1651 , - 690 , - 1601 , - 1056 , - 719 , - 590 , - 669 , - 956 , - 1451 , - 490 , - 1401 , - 856 , - 519 , - 390 , - 469 , - 756 , - 1251 , - 290 , - 1201 , - 656 , - 319 , - 190 , - 269 , - 556 , - 1051 , - 90 , - 1001 , - 456 , - 119 , - 1654 , - 69 , - 356 , - 851 , - 1554 , - 801 , - 256 , - 1583 , - 1454 , - 1533 , - 156 , - 651 , - 1354 , - 601 , - 56 , - 1383 , - 1254 , - 1333 , - 1620 , - 451 , - 1154 , - 401 , - 1520 , - 1183 , - 1054 , - 1133 , - 1420 , - 251 , - 954 , - 201 , - 1320 , - 983 , - 854 , - 933 , - 1220 , - 51 , - 754 , - 1 , - 1120 , - 783 , - 654 , - 733 , - 1020 , - 1515 , - 554 , - 1465 , - 920 , - 583 , - 454 , - 533 , - 820 , - 1315 , - 354 , - 1265 , - 720 , - 383 , - 254 , - 333 , - 620 , - 1115 , - 154 , - 1065 , - 520 , - 183 , - 54 , - 133 , - 420 , - 915 , - 1618 , - 865 , - 320 , - 1647 , - 1518 , - 1597 , - 220 , - 715 , - 1418 , - 665 , - 120 , - 1447 , - 1318 , - 1397 , - 20 , - 515 , - 1218 , - 465 , - 1584 , - 1247 , - 1118 , - 1197 , - 1484 , - 315 , - 1018 , - 265 , - 1384 , - 1047 , - 918 , - 997 , - 1284 , - 115 , - 818 , - 65 , - 1184 , - 847 , - 718 , - 797 , - 1084 , - 1579 , - 618 , - 1529 , - 984 , - 647 , - 518 , - 597 , - 884 , - 1379 , - 418 , - 1329 , - 784 , - 447 , - 318 , - 397 , - 684 , - 1179 , - 218 , - 1129 , - 584 , - 247 , - 118 , - 197 , - 484 , - 979 , - 18 , - 929 , - 384 , - 47 , - 1582 , - 1661 , - 284 , - 779 , - 1482 , - 729 , - 184 , - 1511 , - 1382 , - 1461 , - 84 , - 579 , - 1282 , - 529 , - 1648 , - 1311 , - 1182 , - 1261 , - 1548 , - 379 , - 1082 , - 329 , - 1448 , - 1111 , - 982 , - 1061 , - 1348 , - 179 , - 882 , - 129 , - 1248 , - 911 , - 782 , - 861 , - 1148 , - 1643 , - 682 , - 1593 , - 1048 , - 711 , - 582 , - 661 , - 948 , - 1443 , - 482 , - 1393 , - 848 , - 511 , - 382 , - 461 , - 748 , - 1243 , - 282 , - 1193 , - 648 , - 311 , - 182 , - 261 , - 548 , - 1043 , - 82 , - 993 , - 448 , - 111 , - 1646 , - 61 , - 348 , - 843 , - 1546 , - 793 , - 248 , - 1575 , - 1446 , - 1525 , - 148 , - 643 , - 1346 , - 593 , - 48 , - 1375 , - 1246 , - 1325 , - 1612 , - 443 , - 1146 , - 393 , - 1512 , - 1175 , - 1046 , - 1125 , - 1412 , - 243 , - 946 , - 193 , - 1312 , - 975 , - 846 , - 925 , - 1212 , - 43 , - 746 , - 1657 , - 1112 , - 775 , - 646 , - 725 , - 1012 , - 1507 , - 546 , - 1457 , - 912 , - 575 , - 446 , - 525 , - 812 , - 1307 , - 346 , - 1257 , - 712 , - 375 , - 246 , - 325 , - 612 , - 1107 , - 146 , - 1057 , - 512 , - 175 , - 46 , - 125 , - 412 , - 907 , - 1610 , - 857 , - 312 , - 1639 , - 1510 , - 1589 , - 212 , - 707 , - 1410 , - 657 , - 112 , - 1439 , - 1310 , - 1389 , - 12 , - 507 , - 1210 , - 457 , - 1576 , - 1239 , - 1110 , - 1189 , - 1476 , - 307 , - 1010 , - 257 , - 1376 , - 1039 , - 910 , - 989 , - 1276 , - 107 , - 810 , - 57 , - 1176 , - 839 , - 710 , - 789 , - 1076 , - 1571 , - 610 , - 1521 , - 976 , - 639 , - 510 , - 589 , - 876 , - 1371 , - 410 , - 1321 , - 776 , - 439 , - 310 , - 389 , - 676 , - 1171 , - 210 , - 1121 , - 576 , - 239 , - 110 , - 189 , - 476 , - 971 , - 10 , - 921 , - 376 , - 39 , - 1574 , - 1653 , - 276 , - 771 , - 1474 , - 721 , - 176 , - 1503 , - 1374 , - 1453 , - 76 , - 571 , - 1274 , - 521 , - 1640 , - 1303 , - 1174 , - 1253 , - 1540 , - 371 , - 1074 , - 321 , - 1440 , - 1103 , - 974 , - 1053 , - 1340 , - 171 , - 874 , - 121 , - 1240 , - 903 , - 774 , - 853 , - 1140 , - 1635 , - 674 , - 1585 , - 1040 , - 703 , - 574 , - 653 , - 940 , - 1435 , - 474 , - 1385 , - 840 , - 503 , - 374 , - 453 , - 740 , - 1235 , - 274 , - 1185 , - 640 , - 303 , - 174 , - 253 , - 540 , - 1035 , - 74 , - 985 , - 440 , - 103 , - 1638 , - 53 , - 340 , - 835 , - 1538 , - 785 , - 240 , - 1567 , - 1438 , - 1517 , - 140 , - 635 , - 1338 , - 585 , - 40 , - 1367 , - 1238 , - 1317 , - 1604 , - 435 , - 1138 , - 385 , - 1504 , - 1167 , - 1038 , - 1117 , - 1404 , - 235 , - 938 , - 185 , - 1304 , - 967 , - 838 , - 917 , - 1204 , - 35 , - 738 , - 1649 , - 1104 , - 767 , - 638 , - 717 , - 1004 , - 1499 , - 538 , - 1449 , - 904 , - 567 , - 438 , - 517 , - 804 , - 1299 , - 338 , - 1249 , - 704 , - 367 , - 238 , - 317 , - 604 , - 1099 , - 138 , - 1049 , - 504 , - 167 , - 38 , - 117 , - 404 , - 899 , - 1602 , - 849 , - 304 , - 1631 , - 1502 , - 1581 , - 204 , - 699 , - 1402 , - 649 , - 104 , - 1431 , - 1302 , - 1381 , - 4 , - 499 , - 1202 , - 449 , - 1568 , - 1231 , - 1102 , - 1181 , - 1468 , - 299 , - 1002 , - 249 , - 1368 , - 1031 , - 902 , - 981 , - 1268 , - 99 , - 802 , - 49 , - 1168 , - 831 , - 702 , - 781 , - 1068 , - 1563 , - 602 , - 1513 , - 968 , - 631 , - 502 , - 581 , - 868 , - 1363 , - 402 , - 1313 , - 768 , - 431 , - 302 , - 381 , - 668 , - 1163 , - 202 , - 1113 , - 568 , - 231 , - 102 , - 181 , - 468 , - 963 , - 2 , - 913 , - 368 , - 31 , - 1566 , - 1645 , - 268 , - 763 , - 1466 , - 713 , - 168 , - 1495 , - 1366 , - 1445 , - 68 , - 563 , - 1266 , - 513 , - 1632 , - 1295 , - 1166 , - 1245 , - 1532 , - 363 , - 1066 , - 313 , - 1432 , - 1095 , - 966 , - 1045 , - 1332 , - 163 , - 866 , - 113 , - 1232 , - 895 , - 766 , - 845 , - 1132 , - 1627 , - 666 , - 1577 , - 1032 , - 695 , - 566 , - 645 , - 932 , - 1427 , - 466 , - 1377 , - 832 , - 495 , - 366 , - 445 , - 732 , - 1227 , - 266 , - 1177 , - 632 , - 295 , - 166 , - 245 , - 532 , - 1027 , - 66 , - 977 , - 432 , - 95 , - 1630 , - 45 , - 332 , - 827 , - 1530 , - 777 , - 232 , - 1559 , - 1430 , - 1509 , - 132 , - 627 , - 1330 , - 577 , - 32 , - 1359 , - 1230 , - 1309 , - 1596 , - 427 , - 1130 , - 377 , - 1496 , - 1159 , - 1030 , - 1109 , - 1396 , - 227 , - 930 , - 177 , - 1296 , - 959 , - 830 , - 909 , - 1196 , - 27 , - 730 , - 1641 , - 1096 , - 759 , - 630 , - 709 , - 996 , - 1491 , - 530 , - 1441 , - 896 , - 559 , - 430 , - 509 , - 796 , - 1291 , - 330 , - 1241 , - 696 , - 359 , - 230 , - 309 , - 596 , - 1091 , - 130 , - 1041 , - 496 , - 159 , - 30 , - 109 , - 396 , - 891 , - 1594 , - 841 , - 296 , - 1623 , - 1494 , - 1573 , - 196 , - 691 , - 1394 , - 641 , - 96 , - 1423 , - 1294 , - 1373 , - 1660 , - 491 , - 1194 , - 441 , - 1560 , - 1223 , - 1094 , - 1173 , - 1460 , - 291 , - 994 , - 241 , - 1360 , - 1023 , - 894 , - 973 , - 1260 , - 91 , - 794 , - 41 , - 1160 , - 823 , - 694 , - 773 , - 1060 , - 1555 , - 594 , - 1505 , - 960 , - 623 , - 494 , - 573 , - 860 , - 1355 , - 394 , - 1305 , - 760 , - 423 , - 294 , - 373 , - 660 , - 1155 , - 194 , - 1105 , - 560 , - 223 , - 94 , - 173 , - 460 , - 955 , - 1658 , - 905 , - 360 , - 23 , - 1558 , - 1637 , - 260 , - 755 , - 1458 , - 705 , - 160 , - 1487 , - 1358 , - 1437 , - 60 , - 555 , - 1258 , - 505 , - 1624 , - 1287 , - 1158 , - 1237 , - 1524 , - 355 , - 1058 , - 305 , - 1424 , - 1087 , - 958 , - 1037 , - 1324 , - 155 , - 858 , - 105 , - 1224 , - 887 , - 758 , - 837 , - 1124 , - 1619 , - 658 , - 1569 , - 1024 , - 687 , - 558 , - 637 , - 924 , - 1419 , - 458 , - 1369 , - 824 , - 487 , - 358 , - 437 , - 724 , - 1219 , - 258 , - 1169 , - 624 , - 287 , - 158 , - 237 , - 524 , - 1019 , - 58 , - 969 , - 424 , - 87 , - 1622 , - 37 , - 324 , - 819 , - 1522 , - 769 , - 224 , - 1551 , - 1422 , - 1501 , - 124 , - 619 , - 1322 , - 569 , - 24 , - 1351 , - 1222 , - 1301 , - 1588 , - 419 , - 1122 , - 369 , - 1488 , - 1151 , - 1022 , - 1101 , - 1388 , - 219 , - 922 , - 169 , - 1288 , - 951 , - 822 , - 901 , - 1188 , - 19 , - 722 , - 1633 , - 1088 , - 751 , - 622 , - 701 , - 988 , - 1483 , - 522 , - 1433 , - 888 , - 551 , - 422 , - 501 , - 788 , - 1283 , - 322 , - 1233 , - 688 , - 351 , - 222 , - 301 , - 588 , - 1083 , - 122 , - 1033 , - 488 , - 151 , - 22 , - 101 , - 388 , - 883 , - 1586 , - 833 , - 288 , - 1615 , - 1486 , - 1565 , - 188 , - 683 , - 1386 , - 633 , - 88 , - 1415 , - 1286 , - 1365 , - 1652 , - 483 , - 1186 , - 433 , - 1552 , - 1215 , - 1086 , - 1165 , - 1452 , - 283 , - 986 , - 233 , - 1352 , - 1015 , - 886 , - 965 , - 1252 , - 83 , - 786 , - 33 , - 1152 , - 815 , - 686 , - 765 , - 1052 , - 1547 , - 586 , - 1497 , - 952 , - 615 , - 486 , - 565 , - 852 , - 1347 , - 386 , - 1297 , - 752 , - 415 , - 286 , - 365 , - 652 , - 1147 , - 186 , - 1097 , - 552 , - 215 , - 86 , - 165 , - 452 , - 947 , - 1650 , - 897 , - 352 , - 15 , - 1550 , - 1629 , - 252 , - 747 , - 1450 , - 697 , - 152 , - 1479 , - 1350 , - 1429 , - 52 , - 547 , - 1250 , - 497 , - 1616 , - 1279 , - 1150 , - 1229 , - 1516 , - 347 , - 1050 , - 297 , - 1416 , - 1079 , - 950 , - 1029 , - 1316 , - 147 , - 850 , - 97 , - 1216 , - 879 , - 750 , - 829 , - 1116 , - 1611 , - 650 , - 1561 , - 1016 , - 679 , - 550 , - 629 , - 916 , - 1411 , - 450 , - 1361 , - 816 , - 479 , - 350 , - 429 , - 716 , - 1211 , - 250 , - 1161 , - 616 , - 279 , - 150 , - 229 , - 516 , - 1011 , - 50 , - 961 , - 416 , - 79 , - 1614 , - 29 , - 316 , - 811 , - 1514 , - 761 , - 216 , - 1543 , - 1414 , - 1493 , - 116 , - 611 , - 1314 , - 561 , - 16 , - 1343 , - 1214 , - 1293 , - 1580 , - 411 , - 1114 , - 361 , - 1480 , - 1143 , - 1014 , - 1093 , - 1380 , - 211 , - 914 , - 161 , - 1280 , - 943 , - 814 , - 893 , - 1180 , - 11 , - 714 , - 1625 , - 1080 , - 743 , - 614 , - 693 , - 980 , - 1475 , - 514 , - 1425 , - 880 , - 543 , - 414 , - 493 , - 780 , - 1275 , - 314 , - 1225 , - 680 , - 343 , - 214 , - 293 , - 580 , - 1075 , - 114 , - 1025 , - 480 , - 143 , - 14 , - 93 , - 380 , - 875 , - 1578 , - 825 , - 280 , - 1607 , - 1478 , - 1557 , - 180 , - 675 , - 1378 , - 625 , - 80 , - 1407 , - 1278 , - 1357 , - 1644 , - 475 , - 1178 , - 425 , - 1544 , - 1207 , - 1078 , - 1157 , - 1444 , - 275 , - 978 , - 225 , - 1344 , - 1007 , - 878 , - 957 , - 1244 , - 75 , - 778 , - 25 , - 1144 , - 807 , - 678 , - 757 , - 1044 , - 1539 , - 578 , - 1489 , - 944 , - 607 , - 478 , - 557 , - 844 , - 1339 , - 378 , - 1289 , - 744 , - 407 , - 278 , - 357 , - 644 , - 1139 , - 178 , - 1089 , - 544 , - 207 , - 78 , - 157 , - 444 , - 939 , - 1642 , - 889 , - 344 , - 7 , - 1542 , - 1621 , - 244 , - 739 , - 1442 , - 689 , - 144 , - 1471 , - 1342 , - 1421 , - 44 , - 539 , - 1242 , - 489 , - 1608 , - 1271 , - 1142 , - 1221 , - 1508 , - 339 , - 1042 , - 289 , - 1408 , - 1071 , - 942 , - 1021 , - 1308 , - 139 , - 842 , - 89 , - 1208 , - 871 , - 742 , - 821 , - 1108 , - 1603 , - 642 , - 1553 , - 1008 , - 671 , - 542 , - 621 , - 908 , - 1403 , - 442 , - 1353 , - 808 , - 471 , - 342 , - 421 , - 708 , - 1203 , - 242 , - 1153 , - 608 , - 271 , - 142 , - 221 , - 508 , - 1003 , - 42 , - 953 , - 408 , - 71 , - 1606 , - 21 , - 308 , - 803 , - 1506 , - 753 , - 208 , - 1535 , - 1406 , - 1485 , - 108 , - 603 , - 1306 , - 553 , - 8 , - 1335 , - 1206 , - 1285 , - 1572 , - 403 , - 1106 , - 353 , - 1472 , - 1135 , - 1006 , - 1085 , - 1372 , - 203 , - 906 , - 153 , - 1272 , - 935 , - 806 , - 885 , - 1172 , - 3 , - 706 , - 1617 , - 1072 , - 735 , - 606 , - 685 , - 972 , - 1467 , - 506 , - 1417 , - 872 , - 535 , - 406 , - 485 , - 772 , - 1267 , - 306 , - 1217 , - 672 , - 335 , - 206 , - 285 , - 572 , - 1067 , - 106 , - 1017 , - 472 , - 135 , - 6 , - 85 , - 372 , - 867 , - 1570 , - 817 , - 272 , - 1599 , - 1470 , - 1549 , - 172 , - 667 , - 1370 , - 617 , - 72 , - 1399 , - 1270 , - 1349 , - 1636 , - 467 , - 1170 , - 417 , - 1536 , - 1199 , - 1070 , - 1149 , - 1436 , - 267 , - 970 , - 217 , - 1336 , - 999 , - 870 , - 949 , - 1236 , - 67 , - 770 , - 17 , - 1136 , - 799 , - 670 , - 749 , - 1036 , - 1531 , - 570 , - 1481 , - 936 , - 599 , - 470 , - 549 , - 836 , - 1331 , - 370 , - 1281 , - 736 , - 399 , - 270 , - 349 , - 636 , - 1131 , - 170 , - 1081 , - 536 , - 199 , - 70 , - 149 , - 436 , - 931 , - 1634 , - 881 , - 336 , - 1663 , - 1534 , - 1613 , - 236 , - 731 , - 1434 , - 681 , - 136 , - 1463 , - 1334 , - 1413 , - 36 , - 531 , - 1234 , - 481 , - 1600 , - 1263 , - 1134 , - 1213 , - 1500 , - 331 , - 1034 , - 281 , - 1400 , - 1063 , - 934 , - 1013 , - 1300 , - 131 , - 834 , - 81 , - 1200 , - 863 , - 734 , - 813 , - 1100 , - 1595 , - 634 , - 1545 , - 1000 , - 663 , - 534 , - 613 , - 900 , - 1395 , - 434 , - 1345 , - 800 , - 463 , - 334 , - 413 , - 700 , - 1195 , - 234 , - 1145 , - 600 , - 263 , - 134 , - 213 , - 500 , - 995 , - 34 , - 945 , - 400 , - 63 , - 1598 , - 13 , - 300 , - 795 , - 1498 , - 745 , - 200 , - 1527 , - 1398 , - 1477 , - 100 , - 595 , - 1298 , - 545 , - 0 , - 1617 , - 54 , - 1247 , - 956 , - 29 , - 1010 , - 1355 , - 216 , - 137 , - 270 , - 1463 , - 1172 , - 245 , - 1226 , - 1571 , - 432 , - 353 , - 486 , - 1679 , - 1388 , - 461 , - 1442 , - 91 , - 648 , - 569 , - 702 , - 199 , - 1604 , - 677 , - 1658 , - 307 , - 864 , - 785 , - 918 , - 415 , - 124 , - 893 , - 178 , - 523 , - 1080 , - 1001 , - 1134 , - 631 , - 340 , - 1109 , - 394 , - 739 , - 1296 , - 1217 , - 1350 , - 847 , - 556 , - 1325 , - 610 , - 955 , - 1512 , - 1433 , - 1566 , - 1063 , - 772 , - 1541 , - 826 , - 1171 , - 32 , - 1649 , - 86 , - 1279 , - 988 , - 61 , - 1042 , - 1387 , - 248 , - 169 , - 302 , - 1495 , - 1204 , - 277 , - 1258 , - 1603 , - 464 , - 385 , - 518 , - 15 , - 1420 , - 493 , - 1474 , - 123 , - 680 , - 601 , - 734 , - 231 , - 1636 , - 709 , - 1690 , - 339 , - 896 , - 817 , - 950 , - 447 , - 156 , - 925 , - 210 , - 555 , - 1112 , - 1033 , - 1166 , - 663 , - 372 , - 1141 , - 426 , - 771 , - 1328 , - 1249 , - 1382 , - 879 , - 588 , - 1357 , - 642 , - 987 , - 1544 , - 1465 , - 1598 , - 1095 , - 804 , - 1573 , - 858 , - 1203 , - 64 , - 1681 , - 118 , - 1311 , - 1020 , - 93 , - 1074 , - 1419 , - 280 , - 201 , - 334 , - 1527 , - 1236 , - 309 , - 1290 , - 1635 , - 496 , - 417 , - 550 , - 47 , - 1452 , - 525 , - 1506 , - 155 , - 712 , - 633 , - 766 , - 263 , - 1668 , - 741 , - 26 , - 371 , - 928 , - 849 , - 982 , - 479 , - 188 , - 957 , - 242 , - 587 , - 1144 , - 1065 , - 1198 , - 695 , - 404 , - 1173 , - 458 , - 803 , - 1360 , - 1281 , - 1414 , - 911 , - 620 , - 1389 , - 674 , - 1019 , - 1576 , - 1497 , - 1630 , - 1127 , - 836 , - 1605 , - 890 , - 1235 , - 96 , - 17 , - 150 , - 1343 , - 1052 , - 125 , - 1106 , - 1451 , - 312 , - 233 , - 366 , - 1559 , - 1268 , - 341 , - 1322 , - 1667 , - 528 , - 449 , - 582 , - 79 , - 1484 , - 557 , - 1538 , - 187 , - 744 , - 665 , - 798 , - 295 , - 4 , - 773 , - 58 , - 403 , - 960 , - 881 , - 1014 , - 511 , - 220 , - 989 , - 274 , - 619 , - 1176 , - 1097 , - 1230 , - 727 , - 436 , - 1205 , - 490 , - 835 , - 1392 , - 1313 , - 1446 , - 943 , - 652 , - 1421 , - 706 , - 1051 , - 1608 , - 1529 , - 1662 , - 1159 , - 868 , - 1637 , - 922 , - 1267 , - 128 , - 49 , - 182 , - 1375 , - 1084 , - 157 , - 1138 , - 1483 , - 344 , - 265 , - 398 , - 1591 , - 1300 , - 373 , - 1354 , - 3 , - 560 , - 481 , - 614 , - 111 , - 1516 , - 589 , - 1570 , - 219 , - 776 , - 697 , - 830 , - 327 , - 36 , - 805 , - 90 , - 435 , - 992 , - 913 , - 1046 , - 543 , - 252 , - 1021 , - 306 , - 651 , - 1208 , - 1129 , - 1262 , - 759 , - 468 , - 1237 , - 522 , - 867 , - 1424 , - 1345 , - 1478 , - 975 , - 684 , - 1453 , - 738 , - 1083 , - 1640 , - 1561 , - 1694 , - 1191 , - 900 , - 1669 , - 954 , - 1299 , - 160 , - 81 , - 214 , - 1407 , - 1116 , - 189 , - 1170 , - 1515 , - 376 , - 297 , - 430 , - 1623 , - 1332 , - 405 , - 1386 , - 35 , - 592 , - 513 , - 646 , - 143 , - 1548 , - 621 , - 1602 , - 251 , - 808 , - 729 , - 862 , - 359 , - 68 , - 837 , - 122 , - 467 , - 1024 , - 945 , - 1078 , - 575 , - 284 , - 1053 , - 338 , - 683 , - 1240 , - 1161 , - 1294 , - 791 , - 500 , - 1269 , - 554 , - 899 , - 1456 , - 1377 , - 1510 , - 1007 , - 716 , - 1485 , - 770 , - 1115 , - 1672 , - 1593 , - 30 , - 1223 , - 932 , - 5 , - 986 , - 1331 , - 192 , - 113 , - 246 , - 1439 , - 1148 , - 221 , - 1202 , - 1547 , - 408 , - 329 , - 462 , - 1655 , - 1364 , - 437 , - 1418 , - 67 , - 624 , - 545 , - 678 , - 175 , - 1580 , - 653 , - 1634 , - 283 , - 840 , - 761 , - 894 , - 391 , - 100 , - 869 , - 154 , - 499 , - 1056 , - 977 , - 1110 , - 607 , - 316 , - 1085 , - 370 , - 715 , - 1272 , - 1193 , - 1326 , - 823 , - 532 , - 1301 , - 586 , - 931 , - 1488 , - 1409 , - 1542 , - 1039 , - 748 , - 1517 , - 802 , - 1147 , - 8 , - 1625 , - 62 , - 1255 , - 964 , - 37 , - 1018 , - 1363 , - 224 , - 145 , - 278 , - 1471 , - 1180 , - 253 , - 1234 , - 1579 , - 440 , - 361 , - 494 , - 1687 , - 1396 , - 469 , - 1450 , - 99 , - 656 , - 577 , - 710 , - 207 , - 1612 , - 685 , - 1666 , - 315 , - 872 , - 793 , - 926 , - 423 , - 132 , - 901 , - 186 , - 531 , - 1088 , - 1009 , - 1142 , - 639 , - 348 , - 1117 , - 402 , - 747 , - 1304 , - 1225 , - 1358 , - 855 , - 564 , - 1333 , - 618 , - 963 , - 1520 , - 1441 , - 1574 , - 1071 , - 780 , - 1549 , - 834 , - 1179 , - 40 , - 1657 , - 94 , - 1287 , - 996 , - 69 , - 1050 , - 1395 , - 256 , - 177 , - 310 , - 1503 , - 1212 , - 285 , - 1266 , - 1611 , - 472 , - 393 , - 526 , - 23 , - 1428 , - 501 , - 1482 , - 131 , - 688 , - 609 , - 742 , - 239 , - 1644 , - 717 , - 2 , - 347 , - 904 , - 825 , - 958 , - 455 , - 164 , - 933 , - 218 , - 563 , - 1120 , - 1041 , - 1174 , - 671 , - 380 , - 1149 , - 434 , - 779 , - 1336 , - 1257 , - 1390 , - 887 , - 596 , - 1365 , - 650 , - 995 , - 1552 , - 1473 , - 1606 , - 1103 , - 812 , - 1581 , - 866 , - 1211 , - 72 , - 1689 , - 126 , - 1319 , - 1028 , - 101 , - 1082 , - 1427 , - 288 , - 209 , - 342 , - 1535 , - 1244 , - 317 , - 1298 , - 1643 , - 504 , - 425 , - 558 , - 55 , - 1460 , - 533 , - 1514 , - 163 , - 720 , - 641 , - 774 , - 271 , - 1676 , - 749 , - 34 , - 379 , - 936 , - 857 , - 990 , - 487 , - 196 , - 965 , - 250 , - 595 , - 1152 , - 1073 , - 1206 , - 703 , - 412 , - 1181 , - 466 , - 811 , - 1368 , - 1289 , - 1422 , - 919 , - 628 , - 1397 , - 682 , - 1027 , - 1584 , - 1505 , - 1638 , - 1135 , - 844 , - 1613 , - 898 , - 1243 , - 104 , - 25 , - 158 , - 1351 , - 1060 , - 133 , - 1114 , - 1459 , - 320 , - 241 , - 374 , - 1567 , - 1276 , - 349 , - 1330 , - 1675 , - 536 , - 457 , - 590 , - 87 , - 1492 , - 565 , - 1546 , - 195 , - 752 , - 673 , - 806 , - 303 , - 12 , - 781 , - 66 , - 411 , - 968 , - 889 , - 1022 , - 519 , - 228 , - 997 , - 282 , - 627 , - 1184 , - 1105 , - 1238 , - 735 , - 444 , - 1213 , - 498 , - 843 , - 1400 , - 1321 , - 1454 , - 951 , - 660 , - 1429 , - 714 , - 1059 , - 1616 , - 1537 , - 1670 , - 1167 , - 876 , - 1645 , - 930 , - 1275 , - 136 , - 57 , - 190 , - 1383 , - 1092 , - 165 , - 1146 , - 1491 , - 352 , - 273 , - 406 , - 1599 , - 1308 , - 381 , - 1362 , - 11 , - 568 , - 489 , - 622 , - 119 , - 1524 , - 597 , - 1578 , - 227 , - 784 , - 705 , - 838 , - 335 , - 44 , - 813 , - 98 , - 443 , - 1000 , - 921 , - 1054 , - 551 , - 260 , - 1029 , - 314 , - 659 , - 1216 , - 1137 , - 1270 , - 767 , - 476 , - 1245 , - 530 , - 875 , - 1432 , - 1353 , - 1486 , - 983 , - 692 , - 1461 , - 746 , - 1091 , - 1648 , - 1569 , - 6 , - 1199 , - 908 , - 1677 , - 962 , - 1307 , - 168 , - 89 , - 222 , - 1415 , - 1124 , - 197 , - 1178 , - 1523 , - 384 , - 305 , - 438 , - 1631 , - 1340 , - 413 , - 1394 , - 43 , - 600 , - 521 , - 654 , - 151 , - 1556 , - 629 , - 1610 , - 259 , - 816 , - 737 , - 870 , - 367 , - 76 , - 845 , - 130 , - 475 , - 1032 , - 953 , - 1086 , - 583 , - 292 , - 1061 , - 346 , - 691 , - 1248 , - 1169 , - 1302 , - 799 , - 508 , - 1277 , - 562 , - 907 , - 1464 , - 1385 , - 1518 , - 1015 , - 724 , - 1493 , - 778 , - 1123 , - 1680 , - 1601 , - 38 , - 1231 , - 940 , - 13 , - 994 , - 1339 , - 200 , - 121 , - 254 , - 1447 , - 1156 , - 229 , - 1210 , - 1555 , - 416 , - 337 , - 470 , - 1663 , - 1372 , - 445 , - 1426 , - 75 , - 632 , - 553 , - 686 , - 183 , - 1588 , - 661 , - 1642 , - 291 , - 848 , - 769 , - 902 , - 399 , - 108 , - 877 , - 162 , - 507 , - 1064 , - 985 , - 1118 , - 615 , - 324 , - 1093 , - 378 , - 723 , - 1280 , - 1201 , - 1334 , - 831 , - 540 , - 1309 , - 594 , - 939 , - 1496 , - 1417 , - 1550 , - 1047 , - 756 , - 1525 , - 810 , - 1155 , - 16 , - 1633 , - 70 , - 1263 , - 972 , - 45 , - 1026 , - 1371 , - 232 , - 153 , - 286 , - 1479 , - 1188 , - 261 , - 1242 , - 1587 , - 448 , - 369 , - 502 , - 1695 , - 1404 , - 477 , - 1458 , - 107 , - 664 , - 585 , - 718 , - 215 , - 1620 , - 693 , - 1674 , - 323 , - 880 , - 801 , - 934 , - 431 , - 140 , - 909 , - 194 , - 539 , - 1096 , - 1017 , - 1150 , - 647 , - 356 , - 1125 , - 410 , - 755 , - 1312 , - 1233 , - 1366 , - 863 , - 572 , - 1341 , - 626 , - 971 , - 1528 , - 1449 , - 1582 , - 1079 , - 788 , - 1557 , - 842 , - 1187 , - 48 , - 1665 , - 102 , - 1295 , - 1004 , - 77 , - 1058 , - 1403 , - 264 , - 185 , - 318 , - 1511 , - 1220 , - 293 , - 1274 , - 1619 , - 480 , - 401 , - 534 , - 31 , - 1436 , - 509 , - 1490 , - 139 , - 696 , - 617 , - 750 , - 247 , - 1652 , - 725 , - 10 , - 355 , - 912 , - 833 , - 966 , - 463 , - 172 , - 941 , - 226 , - 571 , - 1128 , - 1049 , - 1182 , - 679 , - 388 , - 1157 , - 442 , - 787 , - 1344 , - 1265 , - 1398 , - 895 , - 604 , - 1373 , - 658 , - 1003 , - 1560 , - 1481 , - 1614 , - 1111 , - 820 , - 1589 , - 874 , - 1219 , - 80 , - 1 , - 134 , - 1327 , - 1036 , - 109 , - 1090 , - 1435 , - 296 , - 217 , - 350 , - 1543 , - 1252 , - 325 , - 1306 , - 1651 , - 512 , - 433 , - 566 , - 63 , - 1468 , - 541 , - 1522 , - 171 , - 728 , - 649 , - 782 , - 279 , - 1684 , - 757 , - 42 , - 387 , - 944 , - 865 , - 998 , - 495 , - 204 , - 973 , - 258 , - 603 , - 1160 , - 1081 , - 1214 , - 711 , - 420 , - 1189 , - 474 , - 819 , - 1376 , - 1297 , - 1430 , - 927 , - 636 , - 1405 , - 690 , - 1035 , - 1592 , - 1513 , - 1646 , - 1143 , - 852 , - 1621 , - 906 , - 1251 , - 112 , - 33 , - 166 , - 1359 , - 1068 , - 141 , - 1122 , - 1467 , - 328 , - 249 , - 382 , - 1575 , - 1284 , - 357 , - 1338 , - 1683 , - 544 , - 465 , - 598 , - 95 , - 1500 , - 573 , - 1554 , - 203 , - 760 , - 681 , - 814 , - 311 , - 20 , - 789 , - 74 , - 419 , - 976 , - 897 , - 1030 , - 527 , - 236 , - 1005 , - 290 , - 635 , - 1192 , - 1113 , - 1246 , - 743 , - 452 , - 1221 , - 506 , - 851 , - 1408 , - 1329 , - 1462 , - 959 , - 668 , - 1437 , - 722 , - 1067 , - 1624 , - 1545 , - 1678 , - 1175 , - 884 , - 1653 , - 938 , - 1283 , - 144 , - 65 , - 198 , - 1391 , - 1100 , - 173 , - 1154 , - 1499 , - 360 , - 281 , - 414 , - 1607 , - 1316 , - 389 , - 1370 , - 19 , - 576 , - 497 , - 630 , - 127 , - 1532 , - 605 , - 1586 , - 235 , - 792 , - 713 , - 846 , - 343 , - 52 , - 821 , - 106 , - 451 , - 1008 , - 929 , - 1062 , - 559 , - 268 , - 1037 , - 322 , - 667 , - 1224 , - 1145 , - 1278 , - 775 , - 484 , - 1253 , - 538 , - 883 , - 1440 , - 1361 , - 1494 , - 991 , - 700 , - 1469 , - 754 , - 1099 , - 1656 , - 1577 , - 14 , - 1207 , - 916 , - 1685 , - 970 , - 1315 , - 176 , - 97 , - 230 , - 1423 , - 1132 , - 205 , - 1186 , - 1531 , - 392 , - 313 , - 446 , - 1639 , - 1348 , - 421 , - 1402 , - 51 , - 608 , - 529 , - 662 , - 159 , - 1564 , - 637 , - 1618 , - 267 , - 824 , - 745 , - 878 , - 375 , - 84 , - 853 , - 138 , - 483 , - 1040 , - 961 , - 1094 , - 591 , - 300 , - 1069 , - 354 , - 699 , - 1256 , - 1177 , - 1310 , - 807 , - 516 , - 1285 , - 570 , - 915 , - 1472 , - 1393 , - 1526 , - 1023 , - 732 , - 1501 , - 786 , - 1131 , - 1688 , - 1609 , - 46 , - 1239 , - 948 , - 21 , - 1002 , - 1347 , - 208 , - 129 , - 262 , - 1455 , - 1164 , - 237 , - 1218 , - 1563 , - 424 , - 345 , - 478 , - 1671 , - 1380 , - 453 , - 1434 , - 83 , - 640 , - 561 , - 694 , - 191 , - 1596 , - 669 , - 1650 , - 299 , - 856 , - 777 , - 910 , - 407 , - 116 , - 885 , - 170 , - 515 , - 1072 , - 993 , - 1126 , - 623 , - 332 , - 1101 , - 386 , - 731 , - 1288 , - 1209 , - 1342 , - 839 , - 548 , - 1317 , - 602 , - 947 , - 1504 , - 1425 , - 1558 , - 1055 , - 764 , - 1533 , - 818 , - 1163 , - 24 , - 1641 , - 78 , - 1271 , - 980 , - 53 , - 1034 , - 1379 , - 240 , - 161 , - 294 , - 1487 , - 1196 , - 269 , - 1250 , - 1595 , - 456 , - 377 , - 510 , - 7 , - 1412 , - 485 , - 1466 , - 115 , - 672 , - 593 , - 726 , - 223 , - 1628 , - 701 , - 1682 , - 331 , - 888 , - 809 , - 942 , - 439 , - 148 , - 917 , - 202 , - 547 , - 1104 , - 1025 , - 1158 , - 655 , - 364 , - 1133 , - 418 , - 763 , - 1320 , - 1241 , - 1374 , - 871 , - 580 , - 1349 , - 634 , - 979 , - 1536 , - 1457 , - 1590 , - 1087 , - 796 , - 1565 , - 850 , - 1195 , - 56 , - 1673 , - 110 , - 1303 , - 1012 , - 85 , - 1066 , - 1411 , - 272 , - 193 , - 326 , - 1519 , - 1228 , - 301 , - 1282 , - 1627 , - 488 , - 409 , - 542 , - 39 , - 1444 , - 517 , - 1498 , - 147 , - 704 , - 625 , - 758 , - 255 , - 1660 , - 733 , - 18 , - 363 , - 920 , - 841 , - 974 , - 471 , - 180 , - 949 , - 234 , - 579 , - 1136 , - 1057 , - 1190 , - 687 , - 396 , - 1165 , - 450 , - 795 , - 1352 , - 1273 , - 1406 , - 903 , - 612 , - 1381 , - 666 , - 1011 , - 1568 , - 1489 , - 1622 , - 1119 , - 828 , - 1597 , - 882 , - 1227 , - 88 , - 9 , - 142 , - 1335 , - 1044 , - 117 , - 1098 , - 1443 , - 304 , - 225 , - 358 , - 1551 , - 1260 , - 333 , - 1314 , - 1659 , - 520 , - 441 , - 574 , - 71 , - 1476 , - 549 , - 1530 , - 179 , - 736 , - 657 , - 790 , - 287 , - 1692 , - 765 , - 50 , - 395 , - 952 , - 873 , - 1006 , - 503 , - 212 , - 981 , - 266 , - 611 , - 1168 , - 1089 , - 1222 , - 719 , - 428 , - 1197 , - 482 , - 827 , - 1384 , - 1305 , - 1438 , - 935 , - 644 , - 1413 , - 698 , - 1043 , - 1600 , - 1521 , - 1654 , - 1151 , - 860 , - 1629 , - 914 , - 1259 , - 120 , - 41 , - 174 , - 1367 , - 1076 , - 149 , - 1130 , - 1475 , - 336 , - 257 , - 390 , - 1583 , - 1292 , - 365 , - 1346 , - 1691 , - 552 , - 473 , - 606 , - 103 , - 1508 , - 581 , - 1562 , - 211 , - 768 , - 689 , - 822 , - 319 , - 28 , - 797 , - 82 , - 427 , - 984 , - 905 , - 1038 , - 535 , - 244 , - 1013 , - 298 , - 643 , - 1200 , - 1121 , - 1254 , - 751 , - 460 , - 1229 , - 514 , - 859 , - 1416 , - 1337 , - 1470 , - 967 , - 676 , - 1445 , - 730 , - 1075 , - 1632 , - 1553 , - 1686 , - 1183 , - 892 , - 1661 , - 946 , - 1291 , - 152 , - 73 , - 206 , - 1399 , - 1108 , - 181 , - 1162 , - 1507 , - 368 , - 289 , - 422 , - 1615 , - 1324 , - 397 , - 1378 , - 27 , - 584 , - 505 , - 638 , - 135 , - 1540 , - 613 , - 1594 , - 243 , - 800 , - 721 , - 854 , - 351 , - 60 , - 829 , - 114 , - 459 , - 1016 , - 937 , - 1070 , - 567 , - 276 , - 1045 , - 330 , - 675 , - 1232 , - 1153 , - 1286 , - 783 , - 492 , - 1261 , - 546 , - 891 , - 1448 , - 1369 , - 1502 , - 999 , - 708 , - 1477 , - 762 , - 1107 , - 1664 , - 1585 , - 22 , - 1215 , - 924 , - 1693 , - 978 , - 1323 , - 184 , - 105 , - 238 , - 1431 , - 1140 , - 213 , - 1194 , - 1539 , - 400 , - 321 , - 454 , - 1647 , - 1356 , - 429 , - 1410 , - 59 , - 616 , - 537 , - 670 , - 167 , - 1572 , - 645 , - 1626 , - 275 , - 832 , - 753 , - 886 , - 383 , - 92 , - 861 , - 146 , - 491 , - 1048 , - 969 , - 1102 , - 599 , - 308 , - 1077 , - 362 , - 707 , - 1264 , - 1185 , - 1318 , - 815 , - 524 , - 1293 , - 578 , - 923 , - 1480 , - 1401 , - 1534 , - 1031 , - 740 , - 1509 , - 794 , - 1139 , - 0 , - 607 , - 1022 , - 1245 , - 1276 , - 1115 , - 762 , - 217 , - 1208 , - 279 , - 886 , - 1301 , - 1524 , - 1555 , - 1394 , - 1041 , - 496 , - 1487 , - 558 , - 1165 , - 1580 , - 75 , - 106 , - 1673 , - 1320 , - 775 , - 38 , - 837 , - 1444 , - 131 , - 354 , - 385 , - 224 , - 1599 , - 1054 , - 317 , - 1116 , - 1723 , - 410 , - 633 , - 664 , - 503 , - 150 , - 1333 , - 596 , - 1395 , - 274 , - 689 , - 912 , - 943 , - 782 , - 429 , - 1612 , - 875 , - 1674 , - 553 , - 968 , - 1191 , - 1222 , - 1061 , - 708 , - 163 , - 1154 , - 225 , - 832 , - 1247 , - 1470 , - 1501 , - 1340 , - 987 , - 442 , - 1433 , - 504 , - 1111 , - 1526 , - 21 , - 52 , - 1619 , - 1266 , - 721 , - 1712 , - 783 , - 1390 , - 77 , - 300 , - 331 , - 170 , - 1545 , - 1000 , - 263 , - 1062 , - 1669 , - 356 , - 579 , - 610 , - 449 , - 96 , - 1279 , - 542 , - 1341 , - 220 , - 635 , - 858 , - 889 , - 728 , - 375 , - 1558 , - 821 , - 1620 , - 499 , - 914 , - 1137 , - 1168 , - 1007 , - 654 , - 109 , - 1100 , - 171 , - 778 , - 1193 , - 1416 , - 1447 , - 1286 , - 933 , - 388 , - 1379 , - 450 , - 1057 , - 1472 , - 1695 , - 1726 , - 1565 , - 1212 , - 667 , - 1658 , - 729 , - 1336 , - 23 , - 246 , - 277 , - 116 , - 1491 , - 946 , - 209 , - 1008 , - 1615 , - 302 , - 525 , - 556 , - 395 , - 42 , - 1225 , - 488 , - 1287 , - 166 , - 581 , - 804 , - 835 , - 674 , - 321 , - 1504 , - 767 , - 1566 , - 445 , - 860 , - 1083 , - 1114 , - 953 , - 600 , - 55 , - 1046 , - 117 , - 724 , - 1139 , - 1362 , - 1393 , - 1232 , - 879 , - 334 , - 1325 , - 396 , - 1003 , - 1418 , - 1641 , - 1672 , - 1511 , - 1158 , - 613 , - 1604 , - 675 , - 1282 , - 1697 , - 192 , - 223 , - 62 , - 1437 , - 892 , - 155 , - 954 , - 1561 , - 248 , - 471 , - 502 , - 341 , - 1716 , - 1171 , - 434 , - 1233 , - 112 , - 527 , - 750 , - 781 , - 620 , - 267 , - 1450 , - 713 , - 1512 , - 391 , - 806 , - 1029 , - 1060 , - 899 , - 546 , - 1 , - 992 , - 63 , - 670 , - 1085 , - 1308 , - 1339 , - 1178 , - 825 , - 280 , - 1271 , - 342 , - 949 , - 1364 , - 1587 , - 1618 , - 1457 , - 1104 , - 559 , - 1550 , - 621 , - 1228 , - 1643 , - 138 , - 169 , - 8 , - 1383 , - 838 , - 101 , - 900 , - 1507 , - 194 , - 417 , - 448 , - 287 , - 1662 , - 1117 , - 380 , - 1179 , - 58 , - 473 , - 696 , - 727 , - 566 , - 213 , - 1396 , - 659 , - 1458 , - 337 , - 752 , - 975 , - 1006 , - 845 , - 492 , - 1675 , - 938 , - 9 , - 616 , - 1031 , - 1254 , - 1285 , - 1124 , - 771 , - 226 , - 1217 , - 288 , - 895 , - 1310 , - 1533 , - 1564 , - 1403 , - 1050 , - 505 , - 1496 , - 567 , - 1174 , - 1589 , - 84 , - 115 , - 1682 , - 1329 , - 784 , - 47 , - 846 , - 1453 , - 140 , - 363 , - 394 , - 233 , - 1608 , - 1063 , - 326 , - 1125 , - 4 , - 419 , - 642 , - 673 , - 512 , - 159 , - 1342 , - 605 , - 1404 , - 283 , - 698 , - 921 , - 952 , - 791 , - 438 , - 1621 , - 884 , - 1683 , - 562 , - 977 , - 1200 , - 1231 , - 1070 , - 717 , - 172 , - 1163 , - 234 , - 841 , - 1256 , - 1479 , - 1510 , - 1349 , - 996 , - 451 , - 1442 , - 513 , - 1120 , - 1535 , - 30 , - 61 , - 1628 , - 1275 , - 730 , - 1721 , - 792 , - 1399 , - 86 , - 309 , - 340 , - 179 , - 1554 , - 1009 , - 272 , - 1071 , - 1678 , - 365 , - 588 , - 619 , - 458 , - 105 , - 1288 , - 551 , - 1350 , - 229 , - 644 , - 867 , - 898 , - 737 , - 384 , - 1567 , - 830 , - 1629 , - 508 , - 923 , - 1146 , - 1177 , - 1016 , - 663 , - 118 , - 1109 , - 180 , - 787 , - 1202 , - 1425 , - 1456 , - 1295 , - 942 , - 397 , - 1388 , - 459 , - 1066 , - 1481 , - 1704 , - 7 , - 1574 , - 1221 , - 676 , - 1667 , - 738 , - 1345 , - 32 , - 255 , - 286 , - 125 , - 1500 , - 955 , - 218 , - 1017 , - 1624 , - 311 , - 534 , - 565 , - 404 , - 51 , - 1234 , - 497 , - 1296 , - 175 , - 590 , - 813 , - 844 , - 683 , - 330 , - 1513 , - 776 , - 1575 , - 454 , - 869 , - 1092 , - 1123 , - 962 , - 609 , - 64 , - 1055 , - 126 , - 733 , - 1148 , - 1371 , - 1402 , - 1241 , - 888 , - 343 , - 1334 , - 405 , - 1012 , - 1427 , - 1650 , - 1681 , - 1520 , - 1167 , - 622 , - 1613 , - 684 , - 1291 , - 1706 , - 201 , - 232 , - 71 , - 1446 , - 901 , - 164 , - 963 , - 1570 , - 257 , - 480 , - 511 , - 350 , - 1725 , - 1180 , - 443 , - 1242 , - 121 , - 536 , - 759 , - 790 , - 629 , - 276 , - 1459 , - 722 , - 1521 , - 400 , - 815 , - 1038 , - 1069 , - 908 , - 555 , - 10 , - 1001 , - 72 , - 679 , - 1094 , - 1317 , - 1348 , - 1187 , - 834 , - 289 , - 1280 , - 351 , - 958 , - 1373 , - 1596 , - 1627 , - 1466 , - 1113 , - 568 , - 1559 , - 630 , - 1237 , - 1652 , - 147 , - 178 , - 17 , - 1392 , - 847 , - 110 , - 909 , - 1516 , - 203 , - 426 , - 457 , - 296 , - 1671 , - 1126 , - 389 , - 1188 , - 67 , - 482 , - 705 , - 736 , - 575 , - 222 , - 1405 , - 668 , - 1467 , - 346 , - 761 , - 984 , - 1015 , - 854 , - 501 , - 1684 , - 947 , - 18 , - 625 , - 1040 , - 1263 , - 1294 , - 1133 , - 780 , - 235 , - 1226 , - 297 , - 904 , - 1319 , - 1542 , - 1573 , - 1412 , - 1059 , - 514 , - 1505 , - 576 , - 1183 , - 1598 , - 93 , - 124 , - 1691 , - 1338 , - 793 , - 56 , - 855 , - 1462 , - 149 , - 372 , - 403 , - 242 , - 1617 , - 1072 , - 335 , - 1134 , - 13 , - 428 , - 651 , - 682 , - 521 , - 168 , - 1351 , - 614 , - 1413 , - 292 , - 707 , - 930 , - 961 , - 800 , - 447 , - 1630 , - 893 , - 1692 , - 571 , - 986 , - 1209 , - 1240 , - 1079 , - 726 , - 181 , - 1172 , - 243 , - 850 , - 1265 , - 1488 , - 1519 , - 1358 , - 1005 , - 460 , - 1451 , - 522 , - 1129 , - 1544 , - 39 , - 70 , - 1637 , - 1284 , - 739 , - 2 , - 801 , - 1408 , - 95 , - 318 , - 349 , - 188 , - 1563 , - 1018 , - 281 , - 1080 , - 1687 , - 374 , - 597 , - 628 , - 467 , - 114 , - 1297 , - 560 , - 1359 , - 238 , - 653 , - 876 , - 907 , - 746 , - 393 , - 1576 , - 839 , - 1638 , - 517 , - 932 , - 1155 , - 1186 , - 1025 , - 672 , - 127 , - 1118 , - 189 , - 796 , - 1211 , - 1434 , - 1465 , - 1304 , - 951 , - 406 , - 1397 , - 468 , - 1075 , - 1490 , - 1713 , - 16 , - 1583 , - 1230 , - 685 , - 1676 , - 747 , - 1354 , - 41 , - 264 , - 295 , - 134 , - 1509 , - 964 , - 227 , - 1026 , - 1633 , - 320 , - 543 , - 574 , - 413 , - 60 , - 1243 , - 506 , - 1305 , - 184 , - 599 , - 822 , - 853 , - 692 , - 339 , - 1522 , - 785 , - 1584 , - 463 , - 878 , - 1101 , - 1132 , - 971 , - 618 , - 73 , - 1064 , - 135 , - 742 , - 1157 , - 1380 , - 1411 , - 1250 , - 897 , - 352 , - 1343 , - 414 , - 1021 , - 1436 , - 1659 , - 1690 , - 1529 , - 1176 , - 631 , - 1622 , - 693 , - 1300 , - 1715 , - 210 , - 241 , - 80 , - 1455 , - 910 , - 173 , - 972 , - 1579 , - 266 , - 489 , - 520 , - 359 , - 6 , - 1189 , - 452 , - 1251 , - 130 , - 545 , - 768 , - 799 , - 638 , - 285 , - 1468 , - 731 , - 1530 , - 409 , - 824 , - 1047 , - 1078 , - 917 , - 564 , - 19 , - 1010 , - 81 , - 688 , - 1103 , - 1326 , - 1357 , - 1196 , - 843 , - 298 , - 1289 , - 360 , - 967 , - 1382 , - 1605 , - 1636 , - 1475 , - 1122 , - 577 , - 1568 , - 639 , - 1246 , - 1661 , - 156 , - 187 , - 26 , - 1401 , - 856 , - 119 , - 918 , - 1525 , - 212 , - 435 , - 466 , - 305 , - 1680 , - 1135 , - 398 , - 1197 , - 76 , - 491 , - 714 , - 745 , - 584 , - 231 , - 1414 , - 677 , - 1476 , - 355 , - 770 , - 993 , - 1024 , - 863 , - 510 , - 1693 , - 956 , - 27 , - 634 , - 1049 , - 1272 , - 1303 , - 1142 , - 789 , - 244 , - 1235 , - 306 , - 913 , - 1328 , - 1551 , - 1582 , - 1421 , - 1068 , - 523 , - 1514 , - 585 , - 1192 , - 1607 , - 102 , - 133 , - 1700 , - 1347 , - 802 , - 65 , - 864 , - 1471 , - 158 , - 381 , - 412 , - 251 , - 1626 , - 1081 , - 344 , - 1143 , - 22 , - 437 , - 660 , - 691 , - 530 , - 177 , - 1360 , - 623 , - 1422 , - 301 , - 716 , - 939 , - 970 , - 809 , - 456 , - 1639 , - 902 , - 1701 , - 580 , - 995 , - 1218 , - 1249 , - 1088 , - 735 , - 190 , - 1181 , - 252 , - 859 , - 1274 , - 1497 , - 1528 , - 1367 , - 1014 , - 469 , - 1460 , - 531 , - 1138 , - 1553 , - 48 , - 79 , - 1646 , - 1293 , - 748 , - 11 , - 810 , - 1417 , - 104 , - 327 , - 358 , - 197 , - 1572 , - 1027 , - 290 , - 1089 , - 1696 , - 383 , - 606 , - 637 , - 476 , - 123 , - 1306 , - 569 , - 1368 , - 247 , - 662 , - 885 , - 916 , - 755 , - 402 , - 1585 , - 848 , - 1647 , - 526 , - 941 , - 1164 , - 1195 , - 1034 , - 681 , - 136 , - 1127 , - 198 , - 805 , - 1220 , - 1443 , - 1474 , - 1313 , - 960 , - 415 , - 1406 , - 477 , - 1084 , - 1499 , - 1722 , - 25 , - 1592 , - 1239 , - 694 , - 1685 , - 756 , - 1363 , - 50 , - 273 , - 304 , - 143 , - 1518 , - 973 , - 236 , - 1035 , - 1642 , - 329 , - 552 , - 583 , - 422 , - 69 , - 1252 , - 515 , - 1314 , - 193 , - 608 , - 831 , - 862 , - 701 , - 348 , - 1531 , - 794 , - 1593 , - 472 , - 887 , - 1110 , - 1141 , - 980 , - 627 , - 82 , - 1073 , - 144 , - 751 , - 1166 , - 1389 , - 1420 , - 1259 , - 906 , - 361 , - 1352 , - 423 , - 1030 , - 1445 , - 1668 , - 1699 , - 1538 , - 1185 , - 640 , - 1631 , - 702 , - 1309 , - 1724 , - 219 , - 250 , - 89 , - 1464 , - 919 , - 182 , - 981 , - 1588 , - 275 , - 498 , - 529 , - 368 , - 15 , - 1198 , - 461 , - 1260 , - 139 , - 554 , - 777 , - 808 , - 647 , - 294 , - 1477 , - 740 , - 1539 , - 418 , - 833 , - 1056 , - 1087 , - 926 , - 573 , - 28 , - 1019 , - 90 , - 697 , - 1112 , - 1335 , - 1366 , - 1205 , - 852 , - 307 , - 1298 , - 369 , - 976 , - 1391 , - 1614 , - 1645 , - 1484 , - 1131 , - 586 , - 1577 , - 648 , - 1255 , - 1670 , - 165 , - 196 , - 35 , - 1410 , - 865 , - 128 , - 927 , - 1534 , - 221 , - 444 , - 475 , - 314 , - 1689 , - 1144 , - 407 , - 1206 , - 85 , - 500 , - 723 , - 754 , - 593 , - 240 , - 1423 , - 686 , - 1485 , - 364 , - 779 , - 1002 , - 1033 , - 872 , - 519 , - 1702 , - 965 , - 36 , - 643 , - 1058 , - 1281 , - 1312 , - 1151 , - 798 , - 253 , - 1244 , - 315 , - 922 , - 1337 , - 1560 , - 1591 , - 1430 , - 1077 , - 532 , - 1523 , - 594 , - 1201 , - 1616 , - 111 , - 142 , - 1709 , - 1356 , - 811 , - 74 , - 873 , - 1480 , - 167 , - 390 , - 421 , - 260 , - 1635 , - 1090 , - 353 , - 1152 , - 31 , - 446 , - 669 , - 700 , - 539 , - 186 , - 1369 , - 632 , - 1431 , - 310 , - 725 , - 948 , - 979 , - 818 , - 465 , - 1648 , - 911 , - 1710 , - 589 , - 1004 , - 1227 , - 1258 , - 1097 , - 744 , - 199 , - 1190 , - 261 , - 868 , - 1283 , - 1506 , - 1537 , - 1376 , - 1023 , - 478 , - 1469 , - 540 , - 1147 , - 1562 , - 57 , - 88 , - 1655 , - 1302 , - 757 , - 20 , - 819 , - 1426 , - 113 , - 336 , - 367 , - 206 , - 1581 , - 1036 , - 299 , - 1098 , - 1705 , - 392 , - 615 , - 646 , - 485 , - 132 , - 1315 , - 578 , - 1377 , - 256 , - 671 , - 894 , - 925 , - 764 , - 411 , - 1594 , - 857 , - 1656 , - 535 , - 950 , - 1173 , - 1204 , - 1043 , - 690 , - 145 , - 1136 , - 207 , - 814 , - 1229 , - 1452 , - 1483 , - 1322 , - 969 , - 424 , - 1415 , - 486 , - 1093 , - 1508 , - 3 , - 34 , - 1601 , - 1248 , - 703 , - 1694 , - 765 , - 1372 , - 59 , - 282 , - 313 , - 152 , - 1527 , - 982 , - 245 , - 1044 , - 1651 , - 338 , - 561 , - 592 , - 431 , - 78 , - 1261 , - 524 , - 1323 , - 202 , - 617 , - 840 , - 871 , - 710 , - 357 , - 1540 , - 803 , - 1602 , - 481 , - 896 , - 1119 , - 1150 , - 989 , - 636 , - 91 , - 1082 , - 153 , - 760 , - 1175 , - 1398 , - 1429 , - 1268 , - 915 , - 370 , - 1361 , - 432 , - 1039 , - 1454 , - 1677 , - 1708 , - 1547 , - 1194 , - 649 , - 1640 , - 711 , - 1318 , - 5 , - 228 , - 259 , - 98 , - 1473 , - 928 , - 191 , - 990 , - 1597 , - 284 , - 507 , - 538 , - 377 , - 24 , - 1207 , - 470 , - 1269 , - 148 , - 563 , - 786 , - 817 , - 656 , - 303 , - 1486 , - 749 , - 1548 , - 427 , - 842 , - 1065 , - 1096 , - 935 , - 582 , - 37 , - 1028 , - 99 , - 706 , - 1121 , - 1344 , - 1375 , - 1214 , - 861 , - 316 , - 1307 , - 378 , - 985 , - 1400 , - 1623 , - 1654 , - 1493 , - 1140 , - 595 , - 1586 , - 657 , - 1264 , - 1679 , - 174 , - 205 , - 44 , - 1419 , - 874 , - 137 , - 936 , - 1543 , - 230 , - 453 , - 484 , - 323 , - 1698 , - 1153 , - 416 , - 1215 , - 94 , - 509 , - 732 , - 763 , - 602 , - 249 , - 1432 , - 695 , - 1494 , - 373 , - 788 , - 1011 , - 1042 , - 881 , - 528 , - 1711 , - 974 , - 45 , - 652 , - 1067 , - 1290 , - 1321 , - 1160 , - 807 , - 262 , - 1253 , - 324 , - 931 , - 1346 , - 1569 , - 1600 , - 1439 , - 1086 , - 541 , - 1532 , - 603 , - 1210 , - 1625 , - 120 , - 151 , - 1718 , - 1365 , - 820 , - 83 , - 882 , - 1489 , - 176 , - 399 , - 430 , - 269 , - 1644 , - 1099 , - 362 , - 1161 , - 40 , - 455 , - 678 , - 709 , - 548 , - 195 , - 1378 , - 641 , - 1440 , - 319 , - 734 , - 957 , - 988 , - 827 , - 474 , - 1657 , - 920 , - 1719 , - 598 , - 1013 , - 1236 , - 1267 , - 1106 , - 753 , - 208 , - 1199 , - 270 , - 877 , - 1292 , - 1515 , - 1546 , - 1385 , - 1032 , - 487 , - 1478 , - 549 , - 1156 , - 1571 , - 66 , - 97 , - 1664 , - 1311 , - 766 , - 29 , - 828 , - 1435 , - 122 , - 345 , - 376 , - 215 , - 1590 , - 1045 , - 308 , - 1107 , - 1714 , - 401 , - 624 , - 655 , - 494 , - 141 , - 1324 , - 587 , - 1386 , - 265 , - 680 , - 903 , - 934 , - 773 , - 420 , - 1603 , - 866 , - 1665 , - 544 , - 959 , - 1182 , - 1213 , - 1052 , - 699 , - 154 , - 1145 , - 216 , - 823 , - 1238 , - 1461 , - 1492 , - 1331 , - 978 , - 433 , - 1424 , - 495 , - 1102 , - 1517 , - 12 , - 43 , - 1610 , - 1257 , - 712 , - 1703 , - 774 , - 1381 , - 68 , - 291 , - 322 , - 161 , - 1536 , - 991 , - 254 , - 1053 , - 1660 , - 347 , - 570 , - 601 , - 440 , - 87 , - 1270 , - 533 , - 1332 , - 211 , - 626 , - 849 , - 880 , - 719 , - 366 , - 1549 , - 812 , - 1611 , - 490 , - 905 , - 1128 , - 1159 , - 998 , - 645 , - 100 , - 1091 , - 162 , - 769 , - 1184 , - 1407 , - 1438 , - 1277 , - 924 , - 379 , - 1370 , - 441 , - 1048 , - 1463 , - 1686 , - 1717 , - 1556 , - 1203 , - 658 , - 1649 , - 720 , - 1327 , - 14 , - 237 , - 268 , - 107 , - 1482 , - 937 , - 200 , - 999 , - 1606 , - 293 , - 516 , - 547 , - 386 , - 33 , - 1216 , - 479 , - 1278 , - 157 , - 572 , - 795 , - 826 , - 665 , - 312 , - 1495 , - 758 , - 1557 , - 436 , - 851 , - 1074 , - 1105 , - 944 , - 591 , - 46 , - 1037 , - 108 , - 715 , - 1130 , - 1353 , - 1384 , - 1223 , - 870 , - 325 , - 1316 , - 387 , - 994 , - 1409 , - 1632 , - 1663 , - 1502 , - 1149 , - 604 , - 1595 , - 666 , - 1273 , - 1688 , - 183 , - 214 , - 53 , - 1428 , - 883 , - 146 , - 945 , - 1552 , - 239 , - 462 , - 493 , - 332 , - 1707 , - 1162 , - 425 , - 1224 , - 103 , - 518 , - 741 , - 772 , - 611 , - 258 , - 1441 , - 704 , - 1503 , - 382 , - 797 , - 1020 , - 1051 , - 890 , - 537 , - 1720 , - 983 , - 54 , - 661 , - 1076 , - 1299 , - 1330 , - 1169 , - 816 , - 271 , - 1262 , - 333 , - 940 , - 1355 , - 1578 , - 1609 , - 1448 , - 1095 , - 550 , - 1541 , - 612 , - 1219 , - 1634 , - 129 , - 160 , - 1727 , - 1374 , - 829 , - 92 , - 891 , - 1498 , - 185 , - 408 , - 439 , - 278 , - 1653 , - 1108 , - 371 , - 1170 , - 49 , - 464 , - 687 , - 718 , - 557 , - 204 , - 1387 , - 650 , - 1449 , - 328 , - 743 , - 966 , - 997 , - 836 , - 483 , - 1666 , - 929 , - 0 , - 713 , - 766 , - 1039 , - 652 , - 485 , - 1418 , - 811 , - 1304 , - 257 , - 310 , - 583 , - 196 , - 29 , - 962 , - 355 , - 848 , - 1561 , - 1614 , - 127 , - 1500 , - 1333 , - 506 , - 1659 , - 392 , - 1105 , - 1158 , - 1431 , - 1044 , - 877 , - 50 , - 1203 , - 1696 , - 649 , - 702 , - 975 , - 588 , - 421 , - 1354 , - 747 , - 1240 , - 193 , - 246 , - 519 , - 132 , - 1725 , - 898 , - 291 , - 784 , - 1497 , - 1550 , - 63 , - 1436 , - 1269 , - 442 , - 1595 , - 328 , - 1041 , - 1094 , - 1367 , - 980 , - 813 , - 1746 , - 1139 , - 1632 , - 585 , - 638 , - 911 , - 524 , - 357 , - 1290 , - 683 , - 1176 , - 129 , - 182 , - 455 , - 68 , - 1661 , - 834 , - 227 , - 720 , - 1433 , - 1486 , - 1759 , - 1372 , - 1205 , - 378 , - 1531 , - 264 , - 977 , - 1030 , - 1303 , - 916 , - 749 , - 1682 , - 1075 , - 1568 , - 521 , - 574 , - 847 , - 460 , - 293 , - 1226 , - 619 , - 1112 , - 65 , - 118 , - 391 , - 4 , - 1597 , - 770 , - 163 , - 656 , - 1369 , - 1422 , - 1695 , - 1308 , - 1141 , - 314 , - 1467 , - 200 , - 913 , - 966 , - 1239 , - 852 , - 685 , - 1618 , - 1011 , - 1504 , - 457 , - 510 , - 783 , - 396 , - 229 , - 1162 , - 555 , - 1048 , - 1 , - 54 , - 327 , - 1700 , - 1533 , - 706 , - 99 , - 592 , - 1305 , - 1358 , - 1631 , - 1244 , - 1077 , - 250 , - 1403 , - 136 , - 849 , - 902 , - 1175 , - 788 , - 621 , - 1554 , - 947 , - 1440 , - 393 , - 446 , - 719 , - 332 , - 165 , - 1098 , - 491 , - 984 , - 1697 , - 1750 , - 263 , - 1636 , - 1469 , - 642 , - 35 , - 528 , - 1241 , - 1294 , - 1567 , - 1180 , - 1013 , - 186 , - 1339 , - 72 , - 785 , - 838 , - 1111 , - 724 , - 557 , - 1490 , - 883 , - 1376 , - 329 , - 382 , - 655 , - 268 , - 101 , - 1034 , - 427 , - 920 , - 1633 , - 1686 , - 199 , - 1572 , - 1405 , - 578 , - 1731 , - 464 , - 1177 , - 1230 , - 1503 , - 1116 , - 949 , - 122 , - 1275 , - 8 , - 721 , - 774 , - 1047 , - 660 , - 493 , - 1426 , - 819 , - 1312 , - 265 , - 318 , - 591 , - 204 , - 37 , - 970 , - 363 , - 856 , - 1569 , - 1622 , - 135 , - 1508 , - 1341 , - 514 , - 1667 , - 400 , - 1113 , - 1166 , - 1439 , - 1052 , - 885 , - 58 , - 1211 , - 1704 , - 657 , - 710 , - 983 , - 596 , - 429 , - 1362 , - 755 , - 1248 , - 201 , - 254 , - 527 , - 140 , - 1733 , - 906 , - 299 , - 792 , - 1505 , - 1558 , - 71 , - 1444 , - 1277 , - 450 , - 1603 , - 336 , - 1049 , - 1102 , - 1375 , - 988 , - 821 , - 1754 , - 1147 , - 1640 , - 593 , - 646 , - 919 , - 532 , - 365 , - 1298 , - 691 , - 1184 , - 137 , - 190 , - 463 , - 76 , - 1669 , - 842 , - 235 , - 728 , - 1441 , - 1494 , - 7 , - 1380 , - 1213 , - 386 , - 1539 , - 272 , - 985 , - 1038 , - 1311 , - 924 , - 757 , - 1690 , - 1083 , - 1576 , - 529 , - 582 , - 855 , - 468 , - 301 , - 1234 , - 627 , - 1120 , - 73 , - 126 , - 399 , - 12 , - 1605 , - 778 , - 171 , - 664 , - 1377 , - 1430 , - 1703 , - 1316 , - 1149 , - 322 , - 1475 , - 208 , - 921 , - 974 , - 1247 , - 860 , - 693 , - 1626 , - 1019 , - 1512 , - 465 , - 518 , - 791 , - 404 , - 237 , - 1170 , - 563 , - 1056 , - 9 , - 62 , - 335 , - 1708 , - 1541 , - 714 , - 107 , - 600 , - 1313 , - 1366 , - 1639 , - 1252 , - 1085 , - 258 , - 1411 , - 144 , - 857 , - 910 , - 1183 , - 796 , - 629 , - 1562 , - 955 , - 1448 , - 401 , - 454 , - 727 , - 340 , - 173 , - 1106 , - 499 , - 992 , - 1705 , - 1758 , - 271 , - 1644 , - 1477 , - 650 , - 43 , - 536 , - 1249 , - 1302 , - 1575 , - 1188 , - 1021 , - 194 , - 1347 , - 80 , - 793 , - 846 , - 1119 , - 732 , - 565 , - 1498 , - 891 , - 1384 , - 337 , - 390 , - 663 , - 276 , - 109 , - 1042 , - 435 , - 928 , - 1641 , - 1694 , - 207 , - 1580 , - 1413 , - 586 , - 1739 , - 472 , - 1185 , - 1238 , - 1511 , - 1124 , - 957 , - 130 , - 1283 , - 16 , - 729 , - 782 , - 1055 , - 668 , - 501 , - 1434 , - 827 , - 1320 , - 273 , - 326 , - 599 , - 212 , - 45 , - 978 , - 371 , - 864 , - 1577 , - 1630 , - 143 , - 1516 , - 1349 , - 522 , - 1675 , - 408 , - 1121 , - 1174 , - 1447 , - 1060 , - 893 , - 66 , - 1219 , - 1712 , - 665 , - 718 , - 991 , - 604 , - 437 , - 1370 , - 763 , - 1256 , - 209 , - 262 , - 535 , - 148 , - 1741 , - 914 , - 307 , - 800 , - 1513 , - 1566 , - 79 , - 1452 , - 1285 , - 458 , - 1611 , - 344 , - 1057 , - 1110 , - 1383 , - 996 , - 829 , - 2 , - 1155 , - 1648 , - 601 , - 654 , - 927 , - 540 , - 373 , - 1306 , - 699 , - 1192 , - 145 , - 198 , - 471 , - 84 , - 1677 , - 850 , - 243 , - 736 , - 1449 , - 1502 , - 15 , - 1388 , - 1221 , - 394 , - 1547 , - 280 , - 993 , - 1046 , - 1319 , - 932 , - 765 , - 1698 , - 1091 , - 1584 , - 537 , - 590 , - 863 , - 476 , - 309 , - 1242 , - 635 , - 1128 , - 81 , - 134 , - 407 , - 20 , - 1613 , - 786 , - 179 , - 672 , - 1385 , - 1438 , - 1711 , - 1324 , - 1157 , - 330 , - 1483 , - 216 , - 929 , - 982 , - 1255 , - 868 , - 701 , - 1634 , - 1027 , - 1520 , - 473 , - 526 , - 799 , - 412 , - 245 , - 1178 , - 571 , - 1064 , - 17 , - 70 , - 343 , - 1716 , - 1549 , - 722 , - 115 , - 608 , - 1321 , - 1374 , - 1647 , - 1260 , - 1093 , - 266 , - 1419 , - 152 , - 865 , - 918 , - 1191 , - 804 , - 637 , - 1570 , - 963 , - 1456 , - 409 , - 462 , - 735 , - 348 , - 181 , - 1114 , - 507 , - 1000 , - 1713 , - 6 , - 279 , - 1652 , - 1485 , - 658 , - 51 , - 544 , - 1257 , - 1310 , - 1583 , - 1196 , - 1029 , - 202 , - 1355 , - 88 , - 801 , - 854 , - 1127 , - 740 , - 573 , - 1506 , - 899 , - 1392 , - 345 , - 398 , - 671 , - 284 , - 117 , - 1050 , - 443 , - 936 , - 1649 , - 1702 , - 215 , - 1588 , - 1421 , - 594 , - 1747 , - 480 , - 1193 , - 1246 , - 1519 , - 1132 , - 965 , - 138 , - 1291 , - 24 , - 737 , - 790 , - 1063 , - 676 , - 509 , - 1442 , - 835 , - 1328 , - 281 , - 334 , - 607 , - 220 , - 53 , - 986 , - 379 , - 872 , - 1585 , - 1638 , - 151 , - 1524 , - 1357 , - 530 , - 1683 , - 416 , - 1129 , - 1182 , - 1455 , - 1068 , - 901 , - 74 , - 1227 , - 1720 , - 673 , - 726 , - 999 , - 612 , - 445 , - 1378 , - 771 , - 1264 , - 217 , - 270 , - 543 , - 156 , - 1749 , - 922 , - 315 , - 808 , - 1521 , - 1574 , - 87 , - 1460 , - 1293 , - 466 , - 1619 , - 352 , - 1065 , - 1118 , - 1391 , - 1004 , - 837 , - 10 , - 1163 , - 1656 , - 609 , - 662 , - 935 , - 548 , - 381 , - 1314 , - 707 , - 1200 , - 153 , - 206 , - 479 , - 92 , - 1685 , - 858 , - 251 , - 744 , - 1457 , - 1510 , - 23 , - 1396 , - 1229 , - 402 , - 1555 , - 288 , - 1001 , - 1054 , - 1327 , - 940 , - 773 , - 1706 , - 1099 , - 1592 , - 545 , - 598 , - 871 , - 484 , - 317 , - 1250 , - 643 , - 1136 , - 89 , - 142 , - 415 , - 28 , - 1621 , - 794 , - 187 , - 680 , - 1393 , - 1446 , - 1719 , - 1332 , - 1165 , - 338 , - 1491 , - 224 , - 937 , - 990 , - 1263 , - 876 , - 709 , - 1642 , - 1035 , - 1528 , - 481 , - 534 , - 807 , - 420 , - 253 , - 1186 , - 579 , - 1072 , - 25 , - 78 , - 351 , - 1724 , - 1557 , - 730 , - 123 , - 616 , - 1329 , - 1382 , - 1655 , - 1268 , - 1101 , - 274 , - 1427 , - 160 , - 873 , - 926 , - 1199 , - 812 , - 645 , - 1578 , - 971 , - 1464 , - 417 , - 470 , - 743 , - 356 , - 189 , - 1122 , - 515 , - 1008 , - 1721 , - 14 , - 287 , - 1660 , - 1493 , - 666 , - 59 , - 552 , - 1265 , - 1318 , - 1591 , - 1204 , - 1037 , - 210 , - 1363 , - 96 , - 809 , - 862 , - 1135 , - 748 , - 581 , - 1514 , - 907 , - 1400 , - 353 , - 406 , - 679 , - 292 , - 125 , - 1058 , - 451 , - 944 , - 1657 , - 1710 , - 223 , - 1596 , - 1429 , - 602 , - 1755 , - 488 , - 1201 , - 1254 , - 1527 , - 1140 , - 973 , - 146 , - 1299 , - 32 , - 745 , - 798 , - 1071 , - 684 , - 517 , - 1450 , - 843 , - 1336 , - 289 , - 342 , - 615 , - 228 , - 61 , - 994 , - 387 , - 880 , - 1593 , - 1646 , - 159 , - 1532 , - 1365 , - 538 , - 1691 , - 424 , - 1137 , - 1190 , - 1463 , - 1076 , - 909 , - 82 , - 1235 , - 1728 , - 681 , - 734 , - 1007 , - 620 , - 453 , - 1386 , - 779 , - 1272 , - 225 , - 278 , - 551 , - 164 , - 1757 , - 930 , - 323 , - 816 , - 1529 , - 1582 , - 95 , - 1468 , - 1301 , - 474 , - 1627 , - 360 , - 1073 , - 1126 , - 1399 , - 1012 , - 845 , - 18 , - 1171 , - 1664 , - 617 , - 670 , - 943 , - 556 , - 389 , - 1322 , - 715 , - 1208 , - 161 , - 214 , - 487 , - 100 , - 1693 , - 866 , - 259 , - 752 , - 1465 , - 1518 , - 31 , - 1404 , - 1237 , - 410 , - 1563 , - 296 , - 1009 , - 1062 , - 1335 , - 948 , - 781 , - 1714 , - 1107 , - 1600 , - 553 , - 606 , - 879 , - 492 , - 325 , - 1258 , - 651 , - 1144 , - 97 , - 150 , - 423 , - 36 , - 1629 , - 802 , - 195 , - 688 , - 1401 , - 1454 , - 1727 , - 1340 , - 1173 , - 346 , - 1499 , - 232 , - 945 , - 998 , - 1271 , - 884 , - 717 , - 1650 , - 1043 , - 1536 , - 489 , - 542 , - 815 , - 428 , - 261 , - 1194 , - 587 , - 1080 , - 33 , - 86 , - 359 , - 1732 , - 1565 , - 738 , - 131 , - 624 , - 1337 , - 1390 , - 1663 , - 1276 , - 1109 , - 282 , - 1435 , - 168 , - 881 , - 934 , - 1207 , - 820 , - 653 , - 1586 , - 979 , - 1472 , - 425 , - 478 , - 751 , - 364 , - 197 , - 1130 , - 523 , - 1016 , - 1729 , - 22 , - 295 , - 1668 , - 1501 , - 674 , - 67 , - 560 , - 1273 , - 1326 , - 1599 , - 1212 , - 1045 , - 218 , - 1371 , - 104 , - 817 , - 870 , - 1143 , - 756 , - 589 , - 1522 , - 915 , - 1408 , - 361 , - 414 , - 687 , - 300 , - 133 , - 1066 , - 459 , - 952 , - 1665 , - 1718 , - 231 , - 1604 , - 1437 , - 610 , - 3 , - 496 , - 1209 , - 1262 , - 1535 , - 1148 , - 981 , - 154 , - 1307 , - 40 , - 753 , - 806 , - 1079 , - 692 , - 525 , - 1458 , - 851 , - 1344 , - 297 , - 350 , - 623 , - 236 , - 69 , - 1002 , - 395 , - 888 , - 1601 , - 1654 , - 167 , - 1540 , - 1373 , - 546 , - 1699 , - 432 , - 1145 , - 1198 , - 1471 , - 1084 , - 917 , - 90 , - 1243 , - 1736 , - 689 , - 742 , - 1015 , - 628 , - 461 , - 1394 , - 787 , - 1280 , - 233 , - 286 , - 559 , - 172 , - 5 , - 938 , - 331 , - 824 , - 1537 , - 1590 , - 103 , - 1476 , - 1309 , - 482 , - 1635 , - 368 , - 1081 , - 1134 , - 1407 , - 1020 , - 853 , - 26 , - 1179 , - 1672 , - 625 , - 678 , - 951 , - 564 , - 397 , - 1330 , - 723 , - 1216 , - 169 , - 222 , - 495 , - 108 , - 1701 , - 874 , - 267 , - 760 , - 1473 , - 1526 , - 39 , - 1412 , - 1245 , - 418 , - 1571 , - 304 , - 1017 , - 1070 , - 1343 , - 956 , - 789 , - 1722 , - 1115 , - 1608 , - 561 , - 614 , - 887 , - 500 , - 333 , - 1266 , - 659 , - 1152 , - 105 , - 158 , - 431 , - 44 , - 1637 , - 810 , - 203 , - 696 , - 1409 , - 1462 , - 1735 , - 1348 , - 1181 , - 354 , - 1507 , - 240 , - 953 , - 1006 , - 1279 , - 892 , - 725 , - 1658 , - 1051 , - 1544 , - 497 , - 550 , - 823 , - 436 , - 269 , - 1202 , - 595 , - 1088 , - 41 , - 94 , - 367 , - 1740 , - 1573 , - 746 , - 139 , - 632 , - 1345 , - 1398 , - 1671 , - 1284 , - 1117 , - 290 , - 1443 , - 176 , - 889 , - 942 , - 1215 , - 828 , - 661 , - 1594 , - 987 , - 1480 , - 433 , - 486 , - 759 , - 372 , - 205 , - 1138 , - 531 , - 1024 , - 1737 , - 30 , - 303 , - 1676 , - 1509 , - 682 , - 75 , - 568 , - 1281 , - 1334 , - 1607 , - 1220 , - 1053 , - 226 , - 1379 , - 112 , - 825 , - 878 , - 1151 , - 764 , - 597 , - 1530 , - 923 , - 1416 , - 369 , - 422 , - 695 , - 308 , - 141 , - 1074 , - 467 , - 960 , - 1673 , - 1726 , - 239 , - 1612 , - 1445 , - 618 , - 11 , - 504 , - 1217 , - 1270 , - 1543 , - 1156 , - 989 , - 162 , - 1315 , - 48 , - 761 , - 814 , - 1087 , - 700 , - 533 , - 1466 , - 859 , - 1352 , - 305 , - 358 , - 631 , - 244 , - 77 , - 1010 , - 403 , - 896 , - 1609 , - 1662 , - 175 , - 1548 , - 1381 , - 554 , - 1707 , - 440 , - 1153 , - 1206 , - 1479 , - 1092 , - 925 , - 98 , - 1251 , - 1744 , - 697 , - 750 , - 1023 , - 636 , - 469 , - 1402 , - 795 , - 1288 , - 241 , - 294 , - 567 , - 180 , - 13 , - 946 , - 339 , - 832 , - 1545 , - 1598 , - 111 , - 1484 , - 1317 , - 490 , - 1643 , - 376 , - 1089 , - 1142 , - 1415 , - 1028 , - 861 , - 34 , - 1187 , - 1680 , - 633 , - 686 , - 959 , - 572 , - 405 , - 1338 , - 731 , - 1224 , - 177 , - 230 , - 503 , - 116 , - 1709 , - 882 , - 275 , - 768 , - 1481 , - 1534 , - 47 , - 1420 , - 1253 , - 426 , - 1579 , - 312 , - 1025 , - 1078 , - 1351 , - 964 , - 797 , - 1730 , - 1123 , - 1616 , - 569 , - 622 , - 895 , - 508 , - 341 , - 1274 , - 667 , - 1160 , - 113 , - 166 , - 439 , - 52 , - 1645 , - 818 , - 211 , - 704 , - 1417 , - 1470 , - 1743 , - 1356 , - 1189 , - 362 , - 1515 , - 248 , - 961 , - 1014 , - 1287 , - 900 , - 733 , - 1666 , - 1059 , - 1552 , - 505 , - 558 , - 831 , - 444 , - 277 , - 1210 , - 603 , - 1096 , - 49 , - 102 , - 375 , - 1748 , - 1581 , - 754 , - 147 , - 640 , - 1353 , - 1406 , - 1679 , - 1292 , - 1125 , - 298 , - 1451 , - 184 , - 897 , - 950 , - 1223 , - 836 , - 669 , - 1602 , - 995 , - 1488 , - 441 , - 494 , - 767 , - 380 , - 213 , - 1146 , - 539 , - 1032 , - 1745 , - 38 , - 311 , - 1684 , - 1517 , - 690 , - 83 , - 576 , - 1289 , - 1342 , - 1615 , - 1228 , - 1061 , - 234 , - 1387 , - 120 , - 833 , - 886 , - 1159 , - 772 , - 605 , - 1538 , - 931 , - 1424 , - 377 , - 430 , - 703 , - 316 , - 149 , - 1082 , - 475 , - 968 , - 1681 , - 1734 , - 247 , - 1620 , - 1453 , - 626 , - 19 , - 512 , - 1225 , - 1278 , - 1551 , - 1164 , - 997 , - 170 , - 1323 , - 56 , - 769 , - 822 , - 1095 , - 708 , - 541 , - 1474 , - 867 , - 1360 , - 313 , - 366 , - 639 , - 252 , - 85 , - 1018 , - 411 , - 904 , - 1617 , - 1670 , - 183 , - 1556 , - 1389 , - 562 , - 1715 , - 448 , - 1161 , - 1214 , - 1487 , - 1100 , - 933 , - 106 , - 1259 , - 1752 , - 705 , - 758 , - 1031 , - 644 , - 477 , - 1410 , - 803 , - 1296 , - 249 , - 302 , - 575 , - 188 , - 21 , - 954 , - 347 , - 840 , - 1553 , - 1606 , - 119 , - 1492 , - 1325 , - 498 , - 1651 , - 384 , - 1097 , - 1150 , - 1423 , - 1036 , - 869 , - 42 , - 1195 , - 1688 , - 641 , - 694 , - 967 , - 580 , - 413 , - 1346 , - 739 , - 1232 , - 185 , - 238 , - 511 , - 124 , - 1717 , - 890 , - 283 , - 776 , - 1489 , - 1542 , - 55 , - 1428 , - 1261 , - 434 , - 1587 , - 320 , - 1033 , - 1086 , - 1359 , - 972 , - 805 , - 1738 , - 1131 , - 1624 , - 577 , - 630 , - 903 , - 516 , - 349 , - 1282 , - 675 , - 1168 , - 121 , - 174 , - 447 , - 60 , - 1653 , - 826 , - 219 , - 712 , - 1425 , - 1478 , - 1751 , - 1364 , - 1197 , - 370 , - 1523 , - 256 , - 969 , - 1022 , - 1295 , - 908 , - 741 , - 1674 , - 1067 , - 1560 , - 513 , - 566 , - 839 , - 452 , - 285 , - 1218 , - 611 , - 1104 , - 57 , - 110 , - 383 , - 1756 , - 1589 , - 762 , - 155 , - 648 , - 1361 , - 1414 , - 1687 , - 1300 , - 1133 , - 306 , - 1459 , - 192 , - 905 , - 958 , - 1231 , - 844 , - 677 , - 1610 , - 1003 , - 1496 , - 449 , - 502 , - 775 , - 388 , - 221 , - 1154 , - 547 , - 1040 , - 1753 , - 46 , - 319 , - 1692 , - 1525 , - 698 , - 91 , - 584 , - 1297 , - 1350 , - 1623 , - 1236 , - 1069 , - 242 , - 1395 , - 128 , - 841 , - 894 , - 1167 , - 780 , - 613 , - 1546 , - 939 , - 1432 , - 385 , - 438 , - 711 , - 324 , - 157 , - 1090 , - 483 , - 976 , - 1689 , - 1742 , - 255 , - 1628 , - 1461 , - 634 , - 27 , - 520 , - 1233 , - 1286 , - 1559 , - 1172 , - 1005 , - 178 , - 1331 , - 64 , - 777 , - 830 , - 1103 , - 716 , - 549 , - 1482 , - 875 , - 1368 , - 321 , - 374 , - 647 , - 260 , - 93 , - 1026 , - 419 , - 912 , - 1625 , - 1678 , - 191 , - 1564 , - 1397 , - 570 , - 1723 , - 456 , - 1169 , - 1222 , - 1495 , - 1108 , - 941 , - 114 , - 1267 , - 0 , - 645 , - 170 , - 367 , - 1236 , - 985 , - 1406 , - 707 , - 680 , - 1325 , - 850 , - 1047 , - 124 , - 1665 , - 294 , - 1387 , - 1360 , - 213 , - 1530 , - 1727 , - 804 , - 553 , - 974 , - 275 , - 248 , - 893 , - 418 , - 615 , - 1484 , - 1233 , - 1654 , - 955 , - 928 , - 1573 , - 1098 , - 1295 , - 372 , - 121 , - 542 , - 1635 , - 1608 , - 461 , - 1778 , - 183 , - 1052 , - 801 , - 1222 , - 523 , - 496 , - 1141 , - 666 , - 863 , - 1732 , - 1481 , - 110 , - 1203 , - 1176 , - 29 , - 1346 , - 1543 , - 620 , - 369 , - 790 , - 91 , - 64 , - 709 , - 234 , - 431 , - 1300 , - 1049 , - 1470 , - 771 , - 744 , - 1389 , - 914 , - 1111 , - 188 , - 1729 , - 358 , - 1451 , - 1424 , - 277 , - 1594 , - 1791 , - 868 , - 617 , - 1038 , - 339 , - 312 , - 957 , - 482 , - 679 , - 1548 , - 1297 , - 1718 , - 1019 , - 992 , - 1637 , - 1162 , - 1359 , - 436 , - 185 , - 606 , - 1699 , - 1672 , - 525 , - 50 , - 247 , - 1116 , - 865 , - 1286 , - 587 , - 560 , - 1205 , - 730 , - 927 , - 4 , - 1545 , - 174 , - 1267 , - 1240 , - 93 , - 1410 , - 1607 , - 684 , - 433 , - 854 , - 155 , - 128 , - 773 , - 298 , - 495 , - 1364 , - 1113 , - 1534 , - 835 , - 808 , - 1453 , - 978 , - 1175 , - 252 , - 1 , - 422 , - 1515 , - 1488 , - 341 , - 1658 , - 63 , - 932 , - 681 , - 1102 , - 403 , - 376 , - 1021 , - 546 , - 743 , - 1612 , - 1361 , - 1782 , - 1083 , - 1056 , - 1701 , - 1226 , - 1423 , - 500 , - 249 , - 670 , - 1763 , - 1736 , - 589 , - 114 , - 311 , - 1180 , - 929 , - 1350 , - 651 , - 624 , - 1269 , - 794 , - 991 , - 68 , - 1609 , - 238 , - 1331 , - 1304 , - 157 , - 1474 , - 1671 , - 748 , - 497 , - 918 , - 219 , - 192 , - 837 , - 362 , - 559 , - 1428 , - 1177 , - 1598 , - 899 , - 872 , - 1517 , - 1042 , - 1239 , - 316 , - 65 , - 486 , - 1579 , - 1552 , - 405 , - 1722 , - 127 , - 996 , - 745 , - 1166 , - 467 , - 440 , - 1085 , - 610 , - 807 , - 1676 , - 1425 , - 54 , - 1147 , - 1120 , - 1765 , - 1290 , - 1487 , - 564 , - 313 , - 734 , - 35 , - 8 , - 653 , - 178 , - 375 , - 1244 , - 993 , - 1414 , - 715 , - 688 , - 1333 , - 858 , - 1055 , - 132 , - 1673 , - 302 , - 1395 , - 1368 , - 221 , - 1538 , - 1735 , - 812 , - 561 , - 982 , - 283 , - 256 , - 901 , - 426 , - 623 , - 1492 , - 1241 , - 1662 , - 963 , - 936 , - 1581 , - 1106 , - 1303 , - 380 , - 129 , - 550 , - 1643 , - 1616 , - 469 , - 1786 , - 191 , - 1060 , - 809 , - 1230 , - 531 , - 504 , - 1149 , - 674 , - 871 , - 1740 , - 1489 , - 118 , - 1211 , - 1184 , - 37 , - 1354 , - 1551 , - 628 , - 377 , - 798 , - 99 , - 72 , - 717 , - 242 , - 439 , - 1308 , - 1057 , - 1478 , - 779 , - 752 , - 1397 , - 922 , - 1119 , - 196 , - 1737 , - 366 , - 1459 , - 1432 , - 285 , - 1602 , - 7 , - 876 , - 625 , - 1046 , - 347 , - 320 , - 965 , - 490 , - 687 , - 1556 , - 1305 , - 1726 , - 1027 , - 1000 , - 1645 , - 1170 , - 1367 , - 444 , - 193 , - 614 , - 1707 , - 1680 , - 533 , - 58 , - 255 , - 1124 , - 873 , - 1294 , - 595 , - 568 , - 1213 , - 738 , - 935 , - 12 , - 1553 , - 182 , - 1275 , - 1248 , - 101 , - 1418 , - 1615 , - 692 , - 441 , - 862 , - 163 , - 136 , - 781 , - 306 , - 503 , - 1372 , - 1121 , - 1542 , - 843 , - 816 , - 1461 , - 986 , - 1183 , - 260 , - 9 , - 430 , - 1523 , - 1496 , - 349 , - 1666 , - 71 , - 940 , - 689 , - 1110 , - 411 , - 384 , - 1029 , - 554 , - 751 , - 1620 , - 1369 , - 1790 , - 1091 , - 1064 , - 1709 , - 1234 , - 1431 , - 508 , - 257 , - 678 , - 1771 , - 1744 , - 597 , - 122 , - 319 , - 1188 , - 937 , - 1358 , - 659 , - 632 , - 1277 , - 802 , - 999 , - 76 , - 1617 , - 246 , - 1339 , - 1312 , - 165 , - 1482 , - 1679 , - 756 , - 505 , - 926 , - 227 , - 200 , - 845 , - 370 , - 567 , - 1436 , - 1185 , - 1606 , - 907 , - 880 , - 1525 , - 1050 , - 1247 , - 324 , - 73 , - 494 , - 1587 , - 1560 , - 413 , - 1730 , - 135 , - 1004 , - 753 , - 1174 , - 475 , - 448 , - 1093 , - 618 , - 815 , - 1684 , - 1433 , - 62 , - 1155 , - 1128 , - 1773 , - 1298 , - 1495 , - 572 , - 321 , - 742 , - 43 , - 16 , - 661 , - 186 , - 383 , - 1252 , - 1001 , - 1422 , - 723 , - 696 , - 1341 , - 866 , - 1063 , - 140 , - 1681 , - 310 , - 1403 , - 1376 , - 229 , - 1546 , - 1743 , - 820 , - 569 , - 990 , - 291 , - 264 , - 909 , - 434 , - 631 , - 1500 , - 1249 , - 1670 , - 971 , - 944 , - 1589 , - 1114 , - 1311 , - 388 , - 137 , - 558 , - 1651 , - 1624 , - 477 , - 2 , - 199 , - 1068 , - 817 , - 1238 , - 539 , - 512 , - 1157 , - 682 , - 879 , - 1748 , - 1497 , - 126 , - 1219 , - 1192 , - 45 , - 1362 , - 1559 , - 636 , - 385 , - 806 , - 107 , - 80 , - 725 , - 250 , - 447 , - 1316 , - 1065 , - 1486 , - 787 , - 760 , - 1405 , - 930 , - 1127 , - 204 , - 1745 , - 374 , - 1467 , - 1440 , - 293 , - 1610 , - 15 , - 884 , - 633 , - 1054 , - 355 , - 328 , - 973 , - 498 , - 695 , - 1564 , - 1313 , - 1734 , - 1035 , - 1008 , - 1653 , - 1178 , - 1375 , - 452 , - 201 , - 622 , - 1715 , - 1688 , - 541 , - 66 , - 263 , - 1132 , - 881 , - 1302 , - 603 , - 576 , - 1221 , - 746 , - 943 , - 20 , - 1561 , - 190 , - 1283 , - 1256 , - 109 , - 1426 , - 1623 , - 700 , - 449 , - 870 , - 171 , - 144 , - 789 , - 314 , - 511 , - 1380 , - 1129 , - 1550 , - 851 , - 824 , - 1469 , - 994 , - 1191 , - 268 , - 17 , - 438 , - 1531 , - 1504 , - 357 , - 1674 , - 79 , - 948 , - 697 , - 1118 , - 419 , - 392 , - 1037 , - 562 , - 759 , - 1628 , - 1377 , - 6 , - 1099 , - 1072 , - 1717 , - 1242 , - 1439 , - 516 , - 265 , - 686 , - 1779 , - 1752 , - 605 , - 130 , - 327 , - 1196 , - 945 , - 1366 , - 667 , - 640 , - 1285 , - 810 , - 1007 , - 84 , - 1625 , - 254 , - 1347 , - 1320 , - 173 , - 1490 , - 1687 , - 764 , - 513 , - 934 , - 235 , - 208 , - 853 , - 378 , - 575 , - 1444 , - 1193 , - 1614 , - 915 , - 888 , - 1533 , - 1058 , - 1255 , - 332 , - 81 , - 502 , - 1595 , - 1568 , - 421 , - 1738 , - 143 , - 1012 , - 761 , - 1182 , - 483 , - 456 , - 1101 , - 626 , - 823 , - 1692 , - 1441 , - 70 , - 1163 , - 1136 , - 1781 , - 1306 , - 1503 , - 580 , - 329 , - 750 , - 51 , - 24 , - 669 , - 194 , - 391 , - 1260 , - 1009 , - 1430 , - 731 , - 704 , - 1349 , - 874 , - 1071 , - 148 , - 1689 , - 318 , - 1411 , - 1384 , - 237 , - 1554 , - 1751 , - 828 , - 577 , - 998 , - 299 , - 272 , - 917 , - 442 , - 639 , - 1508 , - 1257 , - 1678 , - 979 , - 952 , - 1597 , - 1122 , - 1319 , - 396 , - 145 , - 566 , - 1659 , - 1632 , - 485 , - 10 , - 207 , - 1076 , - 825 , - 1246 , - 547 , - 520 , - 1165 , - 690 , - 887 , - 1756 , - 1505 , - 134 , - 1227 , - 1200 , - 53 , - 1370 , - 1567 , - 644 , - 393 , - 814 , - 115 , - 88 , - 733 , - 258 , - 455 , - 1324 , - 1073 , - 1494 , - 795 , - 768 , - 1413 , - 938 , - 1135 , - 212 , - 1753 , - 382 , - 1475 , - 1448 , - 301 , - 1618 , - 23 , - 892 , - 641 , - 1062 , - 363 , - 336 , - 981 , - 506 , - 703 , - 1572 , - 1321 , - 1742 , - 1043 , - 1016 , - 1661 , - 1186 , - 1383 , - 460 , - 209 , - 630 , - 1723 , - 1696 , - 549 , - 74 , - 271 , - 1140 , - 889 , - 1310 , - 611 , - 584 , - 1229 , - 754 , - 951 , - 28 , - 1569 , - 198 , - 1291 , - 1264 , - 117 , - 1434 , - 1631 , - 708 , - 457 , - 878 , - 179 , - 152 , - 797 , - 322 , - 519 , - 1388 , - 1137 , - 1558 , - 859 , - 832 , - 1477 , - 1002 , - 1199 , - 276 , - 25 , - 446 , - 1539 , - 1512 , - 365 , - 1682 , - 87 , - 956 , - 705 , - 1126 , - 427 , - 400 , - 1045 , - 570 , - 767 , - 1636 , - 1385 , - 14 , - 1107 , - 1080 , - 1725 , - 1250 , - 1447 , - 524 , - 273 , - 694 , - 1787 , - 1760 , - 613 , - 138 , - 335 , - 1204 , - 953 , - 1374 , - 675 , - 648 , - 1293 , - 818 , - 1015 , - 92 , - 1633 , - 262 , - 1355 , - 1328 , - 181 , - 1498 , - 1695 , - 772 , - 521 , - 942 , - 243 , - 216 , - 861 , - 386 , - 583 , - 1452 , - 1201 , - 1622 , - 923 , - 896 , - 1541 , - 1066 , - 1263 , - 340 , - 89 , - 510 , - 1603 , - 1576 , - 429 , - 1746 , - 151 , - 1020 , - 769 , - 1190 , - 491 , - 464 , - 1109 , - 634 , - 831 , - 1700 , - 1449 , - 78 , - 1171 , - 1144 , - 1789 , - 1314 , - 1511 , - 588 , - 337 , - 758 , - 59 , - 32 , - 677 , - 202 , - 399 , - 1268 , - 1017 , - 1438 , - 739 , - 712 , - 1357 , - 882 , - 1079 , - 156 , - 1697 , - 326 , - 1419 , - 1392 , - 245 , - 1562 , - 1759 , - 836 , - 585 , - 1006 , - 307 , - 280 , - 925 , - 450 , - 647 , - 1516 , - 1265 , - 1686 , - 987 , - 960 , - 1605 , - 1130 , - 1327 , - 404 , - 153 , - 574 , - 1667 , - 1640 , - 493 , - 18 , - 215 , - 1084 , - 833 , - 1254 , - 555 , - 528 , - 1173 , - 698 , - 895 , - 1764 , - 1513 , - 142 , - 1235 , - 1208 , - 61 , - 1378 , - 1575 , - 652 , - 401 , - 822 , - 123 , - 96 , - 741 , - 266 , - 463 , - 1332 , - 1081 , - 1502 , - 803 , - 776 , - 1421 , - 946 , - 1143 , - 220 , - 1761 , - 390 , - 1483 , - 1456 , - 309 , - 1626 , - 31 , - 900 , - 649 , - 1070 , - 371 , - 344 , - 989 , - 514 , - 711 , - 1580 , - 1329 , - 1750 , - 1051 , - 1024 , - 1669 , - 1194 , - 1391 , - 468 , - 217 , - 638 , - 1731 , - 1704 , - 557 , - 82 , - 279 , - 1148 , - 897 , - 1318 , - 619 , - 592 , - 1237 , - 762 , - 959 , - 36 , - 1577 , - 206 , - 1299 , - 1272 , - 125 , - 1442 , - 1639 , - 716 , - 465 , - 886 , - 187 , - 160 , - 805 , - 330 , - 527 , - 1396 , - 1145 , - 1566 , - 867 , - 840 , - 1485 , - 1010 , - 1207 , - 284 , - 33 , - 454 , - 1547 , - 1520 , - 373 , - 1690 , - 95 , - 964 , - 713 , - 1134 , - 435 , - 408 , - 1053 , - 578 , - 775 , - 1644 , - 1393 , - 22 , - 1115 , - 1088 , - 1733 , - 1258 , - 1455 , - 532 , - 281 , - 702 , - 3 , - 1768 , - 621 , - 146 , - 343 , - 1212 , - 961 , - 1382 , - 683 , - 656 , - 1301 , - 826 , - 1023 , - 100 , - 1641 , - 270 , - 1363 , - 1336 , - 189 , - 1506 , - 1703 , - 780 , - 529 , - 950 , - 251 , - 224 , - 869 , - 394 , - 591 , - 1460 , - 1209 , - 1630 , - 931 , - 904 , - 1549 , - 1074 , - 1271 , - 348 , - 97 , - 518 , - 1611 , - 1584 , - 437 , - 1754 , - 159 , - 1028 , - 777 , - 1198 , - 499 , - 472 , - 1117 , - 642 , - 839 , - 1708 , - 1457 , - 86 , - 1179 , - 1152 , - 5 , - 1322 , - 1519 , - 596 , - 345 , - 766 , - 67 , - 40 , - 685 , - 210 , - 407 , - 1276 , - 1025 , - 1446 , - 747 , - 720 , - 1365 , - 890 , - 1087 , - 164 , - 1705 , - 334 , - 1427 , - 1400 , - 253 , - 1570 , - 1767 , - 844 , - 593 , - 1014 , - 315 , - 288 , - 933 , - 458 , - 655 , - 1524 , - 1273 , - 1694 , - 995 , - 968 , - 1613 , - 1138 , - 1335 , - 412 , - 161 , - 582 , - 1675 , - 1648 , - 501 , - 26 , - 223 , - 1092 , - 841 , - 1262 , - 563 , - 536 , - 1181 , - 706 , - 903 , - 1772 , - 1521 , - 150 , - 1243 , - 1216 , - 69 , - 1386 , - 1583 , - 660 , - 409 , - 830 , - 131 , - 104 , - 749 , - 274 , - 471 , - 1340 , - 1089 , - 1510 , - 811 , - 784 , - 1429 , - 954 , - 1151 , - 228 , - 1769 , - 398 , - 1491 , - 1464 , - 317 , - 1634 , - 39 , - 908 , - 657 , - 1078 , - 379 , - 352 , - 997 , - 522 , - 719 , - 1588 , - 1337 , - 1758 , - 1059 , - 1032 , - 1677 , - 1202 , - 1399 , - 476 , - 225 , - 646 , - 1739 , - 1712 , - 565 , - 90 , - 287 , - 1156 , - 905 , - 1326 , - 627 , - 600 , - 1245 , - 770 , - 967 , - 44 , - 1585 , - 214 , - 1307 , - 1280 , - 133 , - 1450 , - 1647 , - 724 , - 473 , - 894 , - 195 , - 168 , - 813 , - 338 , - 535 , - 1404 , - 1153 , - 1574 , - 875 , - 848 , - 1493 , - 1018 , - 1215 , - 292 , - 41 , - 462 , - 1555 , - 1528 , - 381 , - 1698 , - 103 , - 972 , - 721 , - 1142 , - 443 , - 416 , - 1061 , - 586 , - 783 , - 1652 , - 1401 , - 30 , - 1123 , - 1096 , - 1741 , - 1266 , - 1463 , - 540 , - 289 , - 710 , - 11 , - 1776 , - 629 , - 154 , - 351 , - 1220 , - 969 , - 1390 , - 691 , - 664 , - 1309 , - 834 , - 1031 , - 108 , - 1649 , - 278 , - 1371 , - 1344 , - 197 , - 1514 , - 1711 , - 788 , - 537 , - 958 , - 259 , - 232 , - 877 , - 402 , - 599 , - 1468 , - 1217 , - 1638 , - 939 , - 912 , - 1557 , - 1082 , - 1279 , - 356 , - 105 , - 526 , - 1619 , - 1592 , - 445 , - 1762 , - 167 , - 1036 , - 785 , - 1206 , - 507 , - 480 , - 1125 , - 650 , - 847 , - 1716 , - 1465 , - 94 , - 1187 , - 1160 , - 13 , - 1330 , - 1527 , - 604 , - 353 , - 774 , - 75 , - 48 , - 693 , - 218 , - 415 , - 1284 , - 1033 , - 1454 , - 755 , - 728 , - 1373 , - 898 , - 1095 , - 172 , - 1713 , - 342 , - 1435 , - 1408 , - 261 , - 1578 , - 1775 , - 852 , - 601 , - 1022 , - 323 , - 296 , - 941 , - 466 , - 663 , - 1532 , - 1281 , - 1702 , - 1003 , - 976 , - 1621 , - 1146 , - 1343 , - 420 , - 169 , - 590 , - 1683 , - 1656 , - 509 , - 34 , - 231 , - 1100 , - 849 , - 1270 , - 571 , - 544 , - 1189 , - 714 , - 911 , - 1780 , - 1529 , - 158 , - 1251 , - 1224 , - 77 , - 1394 , - 1591 , - 668 , - 417 , - 838 , - 139 , - 112 , - 757 , - 282 , - 479 , - 1348 , - 1097 , - 1518 , - 819 , - 792 , - 1437 , - 962 , - 1159 , - 236 , - 1777 , - 406 , - 1499 , - 1472 , - 325 , - 1642 , - 47 , - 916 , - 665 , - 1086 , - 387 , - 360 , - 1005 , - 530 , - 727 , - 1596 , - 1345 , - 1766 , - 1067 , - 1040 , - 1685 , - 1210 , - 1407 , - 484 , - 233 , - 654 , - 1747 , - 1720 , - 573 , - 98 , - 295 , - 1164 , - 913 , - 1334 , - 635 , - 608 , - 1253 , - 778 , - 975 , - 52 , - 1593 , - 222 , - 1315 , - 1288 , - 141 , - 1458 , - 1655 , - 732 , - 481 , - 902 , - 203 , - 176 , - 821 , - 346 , - 543 , - 1412 , - 1161 , - 1582 , - 883 , - 856 , - 1501 , - 1026 , - 1223 , - 300 , - 49 , - 470 , - 1563 , - 1536 , - 389 , - 1706 , - 111 , - 980 , - 729 , - 1150 , - 451 , - 424 , - 1069 , - 594 , - 791 , - 1660 , - 1409 , - 38 , - 1131 , - 1104 , - 1749 , - 1274 , - 1471 , - 548 , - 297 , - 718 , - 19 , - 1784 , - 637 , - 162 , - 359 , - 1228 , - 977 , - 1398 , - 699 , - 672 , - 1317 , - 842 , - 1039 , - 116 , - 1657 , - 286 , - 1379 , - 1352 , - 205 , - 1522 , - 1719 , - 796 , - 545 , - 966 , - 267 , - 240 , - 885 , - 410 , - 607 , - 1476 , - 1225 , - 1646 , - 947 , - 920 , - 1565 , - 1090 , - 1287 , - 364 , - 113 , - 534 , - 1627 , - 1600 , - 453 , - 1770 , - 175 , - 1044 , - 793 , - 1214 , - 515 , - 488 , - 1133 , - 658 , - 855 , - 1724 , - 1473 , - 102 , - 1195 , - 1168 , - 21 , - 1338 , - 1535 , - 612 , - 361 , - 782 , - 83 , - 56 , - 701 , - 226 , - 423 , - 1292 , - 1041 , - 1462 , - 763 , - 736 , - 1381 , - 906 , - 1103 , - 180 , - 1721 , - 350 , - 1443 , - 1416 , - 269 , - 1586 , - 1783 , - 860 , - 609 , - 1030 , - 331 , - 304 , - 949 , - 474 , - 671 , - 1540 , - 1289 , - 1710 , - 1011 , - 984 , - 1629 , - 1154 , - 1351 , - 428 , - 177 , - 598 , - 1691 , - 1664 , - 517 , - 42 , - 239 , - 1108 , - 857 , - 1278 , - 579 , - 552 , - 1197 , - 722 , - 919 , - 1788 , - 1537 , - 166 , - 1259 , - 1232 , - 85 , - 1402 , - 1599 , - 676 , - 425 , - 846 , - 147 , - 120 , - 765 , - 290 , - 487 , - 1356 , - 1105 , - 1526 , - 827 , - 800 , - 1445 , - 970 , - 1167 , - 244 , - 1785 , - 414 , - 1507 , - 1480 , - 333 , - 1650 , - 55 , - 924 , - 673 , - 1094 , - 395 , - 368 , - 1013 , - 538 , - 735 , - 1604 , - 1353 , - 1774 , - 1075 , - 1048 , - 1693 , - 1218 , - 1415 , - 492 , - 241 , - 662 , - 1755 , - 1728 , - 581 , - 106 , - 303 , - 1172 , - 921 , - 1342 , - 643 , - 616 , - 1261 , - 786 , - 983 , - 60 , - 1601 , - 230 , - 1323 , - 1296 , - 149 , - 1466 , - 1663 , - 740 , - 489 , - 910 , - 211 , - 184 , - 829 , - 354 , - 551 , - 1420 , - 1169 , - 1590 , - 891 , - 864 , - 1509 , - 1034 , - 1231 , - 308 , - 57 , - 478 , - 1571 , - 1544 , - 397 , - 1714 , - 119 , - 988 , - 737 , - 1158 , - 459 , - 432 , - 1077 , - 602 , - 799 , - 1668 , - 1417 , - 46 , - 1139 , - 1112 , - 1757 , - 1282 , - 1479 , - 556 , - 305 , - 726 , - 27 , - 0 , - 971 , - 802 , - 405 , - 692 , - 751 , - 1494 , - 185 , - 1384 , - 531 , - 362 , - 1789 , - 252 , - 311 , - 1054 , - 1569 , - 944 , - 91 , - 1746 , - 1349 , - 1636 , - 1695 , - 614 , - 1129 , - 504 , - 1475 , - 1306 , - 909 , - 1196 , - 1255 , - 174 , - 689 , - 64 , - 1035 , - 866 , - 469 , - 756 , - 815 , - 1558 , - 249 , - 1448 , - 595 , - 426 , - 29 , - 316 , - 375 , - 1118 , - 1633 , - 1008 , - 155 , - 1810 , - 1413 , - 1700 , - 1759 , - 678 , - 1193 , - 568 , - 1539 , - 1370 , - 973 , - 1260 , - 1319 , - 238 , - 753 , - 128 , - 1099 , - 930 , - 533 , - 820 , - 879 , - 1622 , - 313 , - 1512 , - 659 , - 490 , - 93 , - 380 , - 439 , - 1182 , - 1697 , - 1072 , - 219 , - 50 , - 1477 , - 1764 , - 1823 , - 742 , - 1257 , - 632 , - 1603 , - 1434 , - 1037 , - 1324 , - 1383 , - 302 , - 817 , - 192 , - 1163 , - 994 , - 597 , - 884 , - 943 , - 1686 , - 377 , - 1576 , - 723 , - 554 , - 157 , - 444 , - 503 , - 1246 , - 1761 , - 1136 , - 283 , - 114 , - 1541 , - 4 , - 63 , - 806 , - 1321 , - 696 , - 1667 , - 1498 , - 1101 , - 1388 , - 1447 , - 366 , - 881 , - 256 , - 1227 , - 1058 , - 661 , - 948 , - 1007 , - 1750 , - 441 , - 1640 , - 787 , - 618 , - 221 , - 508 , - 567 , - 1310 , - 1 , - 1200 , - 347 , - 178 , - 1605 , - 68 , - 127 , - 870 , - 1385 , - 760 , - 1731 , - 1562 , - 1165 , - 1452 , - 1511 , - 430 , - 945 , - 320 , - 1291 , - 1122 , - 725 , - 1012 , - 1071 , - 1814 , - 505 , - 1704 , - 851 , - 682 , - 285 , - 572 , - 631 , - 1374 , - 65 , - 1264 , - 411 , - 242 , - 1669 , - 132 , - 191 , - 934 , - 1449 , - 824 , - 1795 , - 1626 , - 1229 , - 1516 , - 1575 , - 494 , - 1009 , - 384 , - 1355 , - 1186 , - 789 , - 1076 , - 1135 , - 54 , - 569 , - 1768 , - 915 , - 746 , - 349 , - 636 , - 695 , - 1438 , - 129 , - 1328 , - 475 , - 306 , - 1733 , - 196 , - 255 , - 998 , - 1513 , - 888 , - 35 , - 1690 , - 1293 , - 1580 , - 1639 , - 558 , - 1073 , - 448 , - 1419 , - 1250 , - 853 , - 1140 , - 1199 , - 118 , - 633 , - 8 , - 979 , - 810 , - 413 , - 700 , - 759 , - 1502 , - 193 , - 1392 , - 539 , - 370 , - 1797 , - 260 , - 319 , - 1062 , - 1577 , - 952 , - 99 , - 1754 , - 1357 , - 1644 , - 1703 , - 622 , - 1137 , - 512 , - 1483 , - 1314 , - 917 , - 1204 , - 1263 , - 182 , - 697 , - 72 , - 1043 , - 874 , - 477 , - 764 , - 823 , - 1566 , - 257 , - 1456 , - 603 , - 434 , - 37 , - 324 , - 383 , - 1126 , - 1641 , - 1016 , - 163 , - 1818 , - 1421 , - 1708 , - 1767 , - 686 , - 1201 , - 576 , - 1547 , - 1378 , - 981 , - 1268 , - 1327 , - 246 , - 761 , - 136 , - 1107 , - 938 , - 541 , - 828 , - 887 , - 1630 , - 321 , - 1520 , - 667 , - 498 , - 101 , - 388 , - 447 , - 1190 , - 1705 , - 1080 , - 227 , - 58 , - 1485 , - 1772 , - 7 , - 750 , - 1265 , - 640 , - 1611 , - 1442 , - 1045 , - 1332 , - 1391 , - 310 , - 825 , - 200 , - 1171 , - 1002 , - 605 , - 892 , - 951 , - 1694 , - 385 , - 1584 , - 731 , - 562 , - 165 , - 452 , - 511 , - 1254 , - 1769 , - 1144 , - 291 , - 122 , - 1549 , - 12 , - 71 , - 814 , - 1329 , - 704 , - 1675 , - 1506 , - 1109 , - 1396 , - 1455 , - 374 , - 889 , - 264 , - 1235 , - 1066 , - 669 , - 956 , - 1015 , - 1758 , - 449 , - 1648 , - 795 , - 626 , - 229 , - 516 , - 575 , - 1318 , - 9 , - 1208 , - 355 , - 186 , - 1613 , - 76 , - 135 , - 878 , - 1393 , - 768 , - 1739 , - 1570 , - 1173 , - 1460 , - 1519 , - 438 , - 953 , - 328 , - 1299 , - 1130 , - 733 , - 1020 , - 1079 , - 1822 , - 513 , - 1712 , - 859 , - 690 , - 293 , - 580 , - 639 , - 1382 , - 73 , - 1272 , - 419 , - 250 , - 1677 , - 140 , - 199 , - 942 , - 1457 , - 832 , - 1803 , - 1634 , - 1237 , - 1524 , - 1583 , - 502 , - 1017 , - 392 , - 1363 , - 1194 , - 797 , - 1084 , - 1143 , - 62 , - 577 , - 1776 , - 923 , - 754 , - 357 , - 644 , - 703 , - 1446 , - 137 , - 1336 , - 483 , - 314 , - 1741 , - 204 , - 263 , - 1006 , - 1521 , - 896 , - 43 , - 1698 , - 1301 , - 1588 , - 1647 , - 566 , - 1081 , - 456 , - 1427 , - 1258 , - 861 , - 1148 , - 1207 , - 126 , - 641 , - 16 , - 987 , - 818 , - 421 , - 708 , - 767 , - 1510 , - 201 , - 1400 , - 547 , - 378 , - 1805 , - 268 , - 327 , - 1070 , - 1585 , - 960 , - 107 , - 1762 , - 1365 , - 1652 , - 1711 , - 630 , - 1145 , - 520 , - 1491 , - 1322 , - 925 , - 1212 , - 1271 , - 190 , - 705 , - 80 , - 1051 , - 882 , - 485 , - 772 , - 831 , - 1574 , - 265 , - 1464 , - 611 , - 442 , - 45 , - 332 , - 391 , - 1134 , - 1649 , - 1024 , - 171 , - 2 , - 1429 , - 1716 , - 1775 , - 694 , - 1209 , - 584 , - 1555 , - 1386 , - 989 , - 1276 , - 1335 , - 254 , - 769 , - 144 , - 1115 , - 946 , - 549 , - 836 , - 895 , - 1638 , - 329 , - 1528 , - 675 , - 506 , - 109 , - 396 , - 455 , - 1198 , - 1713 , - 1088 , - 235 , - 66 , - 1493 , - 1780 , - 15 , - 758 , - 1273 , - 648 , - 1619 , - 1450 , - 1053 , - 1340 , - 1399 , - 318 , - 833 , - 208 , - 1179 , - 1010 , - 613 , - 900 , - 959 , - 1702 , - 393 , - 1592 , - 739 , - 570 , - 173 , - 460 , - 519 , - 1262 , - 1777 , - 1152 , - 299 , - 130 , - 1557 , - 20 , - 79 , - 822 , - 1337 , - 712 , - 1683 , - 1514 , - 1117 , - 1404 , - 1463 , - 382 , - 897 , - 272 , - 1243 , - 1074 , - 677 , - 964 , - 1023 , - 1766 , - 457 , - 1656 , - 803 , - 634 , - 237 , - 524 , - 583 , - 1326 , - 17 , - 1216 , - 363 , - 194 , - 1621 , - 84 , - 143 , - 886 , - 1401 , - 776 , - 1747 , - 1578 , - 1181 , - 1468 , - 1527 , - 446 , - 961 , - 336 , - 1307 , - 1138 , - 741 , - 1028 , - 1087 , - 6 , - 521 , - 1720 , - 867 , - 698 , - 301 , - 588 , - 647 , - 1390 , - 81 , - 1280 , - 427 , - 258 , - 1685 , - 148 , - 207 , - 950 , - 1465 , - 840 , - 1811 , - 1642 , - 1245 , - 1532 , - 1591 , - 510 , - 1025 , - 400 , - 1371 , - 1202 , - 805 , - 1092 , - 1151 , - 70 , - 585 , - 1784 , - 931 , - 762 , - 365 , - 652 , - 711 , - 1454 , - 145 , - 1344 , - 491 , - 322 , - 1749 , - 212 , - 271 , - 1014 , - 1529 , - 904 , - 51 , - 1706 , - 1309 , - 1596 , - 1655 , - 574 , - 1089 , - 464 , - 1435 , - 1266 , - 869 , - 1156 , - 1215 , - 134 , - 649 , - 24 , - 995 , - 826 , - 429 , - 716 , - 775 , - 1518 , - 209 , - 1408 , - 555 , - 386 , - 1813 , - 276 , - 335 , - 1078 , - 1593 , - 968 , - 115 , - 1770 , - 1373 , - 1660 , - 1719 , - 638 , - 1153 , - 528 , - 1499 , - 1330 , - 933 , - 1220 , - 1279 , - 198 , - 713 , - 88 , - 1059 , - 890 , - 493 , - 780 , - 839 , - 1582 , - 273 , - 1472 , - 619 , - 450 , - 53 , - 340 , - 399 , - 1142 , - 1657 , - 1032 , - 179 , - 10 , - 1437 , - 1724 , - 1783 , - 702 , - 1217 , - 592 , - 1563 , - 1394 , - 997 , - 1284 , - 1343 , - 262 , - 777 , - 152 , - 1123 , - 954 , - 557 , - 844 , - 903 , - 1646 , - 337 , - 1536 , - 683 , - 514 , - 117 , - 404 , - 463 , - 1206 , - 1721 , - 1096 , - 243 , - 74 , - 1501 , - 1788 , - 23 , - 766 , - 1281 , - 656 , - 1627 , - 1458 , - 1061 , - 1348 , - 1407 , - 326 , - 841 , - 216 , - 1187 , - 1018 , - 621 , - 908 , - 967 , - 1710 , - 401 , - 1600 , - 747 , - 578 , - 181 , - 468 , - 527 , - 1270 , - 1785 , - 1160 , - 307 , - 138 , - 1565 , - 28 , - 87 , - 830 , - 1345 , - 720 , - 1691 , - 1522 , - 1125 , - 1412 , - 1471 , - 390 , - 905 , - 280 , - 1251 , - 1082 , - 685 , - 972 , - 1031 , - 1774 , - 465 , - 1664 , - 811 , - 642 , - 245 , - 532 , - 591 , - 1334 , - 25 , - 1224 , - 371 , - 202 , - 1629 , - 92 , - 151 , - 894 , - 1409 , - 784 , - 1755 , - 1586 , - 1189 , - 1476 , - 1535 , - 454 , - 969 , - 344 , - 1315 , - 1146 , - 749 , - 1036 , - 1095 , - 14 , - 529 , - 1728 , - 875 , - 706 , - 309 , - 596 , - 655 , - 1398 , - 89 , - 1288 , - 435 , - 266 , - 1693 , - 156 , - 215 , - 958 , - 1473 , - 848 , - 1819 , - 1650 , - 1253 , - 1540 , - 1599 , - 518 , - 1033 , - 408 , - 1379 , - 1210 , - 813 , - 1100 , - 1159 , - 78 , - 593 , - 1792 , - 939 , - 770 , - 373 , - 660 , - 719 , - 1462 , - 153 , - 1352 , - 499 , - 330 , - 1757 , - 220 , - 279 , - 1022 , - 1537 , - 912 , - 59 , - 1714 , - 1317 , - 1604 , - 1663 , - 582 , - 1097 , - 472 , - 1443 , - 1274 , - 877 , - 1164 , - 1223 , - 142 , - 657 , - 32 , - 1003 , - 834 , - 437 , - 724 , - 783 , - 1526 , - 217 , - 1416 , - 563 , - 394 , - 1821 , - 284 , - 343 , - 1086 , - 1601 , - 976 , - 123 , - 1778 , - 1381 , - 1668 , - 1727 , - 646 , - 1161 , - 536 , - 1507 , - 1338 , - 941 , - 1228 , - 1287 , - 206 , - 721 , - 96 , - 1067 , - 898 , - 501 , - 788 , - 847 , - 1590 , - 281 , - 1480 , - 627 , - 458 , - 61 , - 348 , - 407 , - 1150 , - 1665 , - 1040 , - 187 , - 18 , - 1445 , - 1732 , - 1791 , - 710 , - 1225 , - 600 , - 1571 , - 1402 , - 1005 , - 1292 , - 1351 , - 270 , - 785 , - 160 , - 1131 , - 962 , - 565 , - 852 , - 911 , - 1654 , - 345 , - 1544 , - 691 , - 522 , - 125 , - 412 , - 471 , - 1214 , - 1729 , - 1104 , - 251 , - 82 , - 1509 , - 1796 , - 31 , - 774 , - 1289 , - 664 , - 1635 , - 1466 , - 1069 , - 1356 , - 1415 , - 334 , - 849 , - 224 , - 1195 , - 1026 , - 629 , - 916 , - 975 , - 1718 , - 409 , - 1608 , - 755 , - 586 , - 189 , - 476 , - 535 , - 1278 , - 1793 , - 1168 , - 315 , - 146 , - 1573 , - 36 , - 95 , - 838 , - 1353 , - 728 , - 1699 , - 1530 , - 1133 , - 1420 , - 1479 , - 398 , - 913 , - 288 , - 1259 , - 1090 , - 693 , - 980 , - 1039 , - 1782 , - 473 , - 1672 , - 819 , - 650 , - 253 , - 540 , - 599 , - 1342 , - 33 , - 1232 , - 379 , - 210 , - 1637 , - 100 , - 159 , - 902 , - 1417 , - 792 , - 1763 , - 1594 , - 1197 , - 1484 , - 1543 , - 462 , - 977 , - 352 , - 1323 , - 1154 , - 757 , - 1044 , - 1103 , - 22 , - 537 , - 1736 , - 883 , - 714 , - 317 , - 604 , - 663 , - 1406 , - 97 , - 1296 , - 443 , - 274 , - 1701 , - 164 , - 223 , - 966 , - 1481 , - 856 , - 3 , - 1658 , - 1261 , - 1548 , - 1607 , - 526 , - 1041 , - 416 , - 1387 , - 1218 , - 821 , - 1108 , - 1167 , - 86 , - 601 , - 1800 , - 947 , - 778 , - 381 , - 668 , - 727 , - 1470 , - 161 , - 1360 , - 507 , - 338 , - 1765 , - 228 , - 287 , - 1030 , - 1545 , - 920 , - 67 , - 1722 , - 1325 , - 1612 , - 1671 , - 590 , - 1105 , - 480 , - 1451 , - 1282 , - 885 , - 1172 , - 1231 , - 150 , - 665 , - 40 , - 1011 , - 842 , - 445 , - 732 , - 791 , - 1534 , - 225 , - 1424 , - 571 , - 402 , - 5 , - 292 , - 351 , - 1094 , - 1609 , - 984 , - 131 , - 1786 , - 1389 , - 1676 , - 1735 , - 654 , - 1169 , - 544 , - 1515 , - 1346 , - 949 , - 1236 , - 1295 , - 214 , - 729 , - 104 , - 1075 , - 906 , - 509 , - 796 , - 855 , - 1598 , - 289 , - 1488 , - 635 , - 466 , - 69 , - 356 , - 415 , - 1158 , - 1673 , - 1048 , - 195 , - 26 , - 1453 , - 1740 , - 1799 , - 718 , - 1233 , - 608 , - 1579 , - 1410 , - 1013 , - 1300 , - 1359 , - 278 , - 793 , - 168 , - 1139 , - 970 , - 573 , - 860 , - 919 , - 1662 , - 353 , - 1552 , - 699 , - 530 , - 133 , - 420 , - 479 , - 1222 , - 1737 , - 1112 , - 259 , - 90 , - 1517 , - 1804 , - 39 , - 782 , - 1297 , - 672 , - 1643 , - 1474 , - 1077 , - 1364 , - 1423 , - 342 , - 857 , - 232 , - 1203 , - 1034 , - 637 , - 924 , - 983 , - 1726 , - 417 , - 1616 , - 763 , - 594 , - 197 , - 484 , - 543 , - 1286 , - 1801 , - 1176 , - 323 , - 154 , - 1581 , - 44 , - 103 , - 846 , - 1361 , - 736 , - 1707 , - 1538 , - 1141 , - 1428 , - 1487 , - 406 , - 921 , - 296 , - 1267 , - 1098 , - 701 , - 988 , - 1047 , - 1790 , - 481 , - 1680 , - 827 , - 658 , - 261 , - 548 , - 607 , - 1350 , - 41 , - 1240 , - 387 , - 218 , - 1645 , - 108 , - 167 , - 910 , - 1425 , - 800 , - 1771 , - 1602 , - 1205 , - 1492 , - 1551 , - 470 , - 985 , - 360 , - 1331 , - 1162 , - 765 , - 1052 , - 1111 , - 30 , - 545 , - 1744 , - 891 , - 722 , - 325 , - 612 , - 671 , - 1414 , - 105 , - 1304 , - 451 , - 282 , - 1709 , - 172 , - 231 , - 974 , - 1489 , - 864 , - 11 , - 1666 , - 1269 , - 1556 , - 1615 , - 534 , - 1049 , - 424 , - 1395 , - 1226 , - 829 , - 1116 , - 1175 , - 94 , - 609 , - 1808 , - 955 , - 786 , - 389 , - 676 , - 735 , - 1478 , - 169 , - 1368 , - 515 , - 346 , - 1773 , - 236 , - 295 , - 1038 , - 1553 , - 928 , - 75 , - 1730 , - 1333 , - 1620 , - 1679 , - 598 , - 1113 , - 488 , - 1459 , - 1290 , - 893 , - 1180 , - 1239 , - 158 , - 673 , - 48 , - 1019 , - 850 , - 453 , - 740 , - 799 , - 1542 , - 233 , - 1432 , - 579 , - 410 , - 13 , - 300 , - 359 , - 1102 , - 1617 , - 992 , - 139 , - 1794 , - 1397 , - 1684 , - 1743 , - 662 , - 1177 , - 552 , - 1523 , - 1354 , - 957 , - 1244 , - 1303 , - 222 , - 737 , - 112 , - 1083 , - 914 , - 517 , - 804 , - 863 , - 1606 , - 297 , - 1496 , - 643 , - 474 , - 77 , - 364 , - 423 , - 1166 , - 1681 , - 1056 , - 203 , - 34 , - 1461 , - 1748 , - 1807 , - 726 , - 1241 , - 616 , - 1587 , - 1418 , - 1021 , - 1308 , - 1367 , - 286 , - 801 , - 176 , - 1147 , - 978 , - 581 , - 868 , - 927 , - 1670 , - 361 , - 1560 , - 707 , - 538 , - 141 , - 428 , - 487 , - 1230 , - 1745 , - 1120 , - 267 , - 98 , - 1525 , - 1812 , - 47 , - 790 , - 1305 , - 680 , - 1651 , - 1482 , - 1085 , - 1372 , - 1431 , - 350 , - 865 , - 240 , - 1211 , - 1042 , - 645 , - 932 , - 991 , - 1734 , - 425 , - 1624 , - 771 , - 602 , - 205 , - 492 , - 551 , - 1294 , - 1809 , - 1184 , - 331 , - 162 , - 1589 , - 52 , - 111 , - 854 , - 1369 , - 744 , - 1715 , - 1546 , - 1149 , - 1436 , - 1495 , - 414 , - 929 , - 304 , - 1275 , - 1106 , - 709 , - 996 , - 1055 , - 1798 , - 489 , - 1688 , - 835 , - 666 , - 269 , - 556 , - 615 , - 1358 , - 49 , - 1248 , - 395 , - 226 , - 1653 , - 116 , - 175 , - 918 , - 1433 , - 808 , - 1779 , - 1610 , - 1213 , - 1500 , - 1559 , - 478 , - 993 , - 368 , - 1339 , - 1170 , - 773 , - 1060 , - 1119 , - 38 , - 553 , - 1752 , - 899 , - 730 , - 333 , - 620 , - 679 , - 1422 , - 113 , - 1312 , - 459 , - 290 , - 1717 , - 180 , - 239 , - 982 , - 1497 , - 872 , - 19 , - 1674 , - 1277 , - 1564 , - 1623 , - 542 , - 1057 , - 432 , - 1403 , - 1234 , - 837 , - 1124 , - 1183 , - 102 , - 617 , - 1816 , - 963 , - 794 , - 397 , - 684 , - 743 , - 1486 , - 177 , - 1376 , - 523 , - 354 , - 1781 , - 244 , - 303 , - 1046 , - 1561 , - 936 , - 83 , - 1738 , - 1341 , - 1628 , - 1687 , - 606 , - 1121 , - 496 , - 1467 , - 1298 , - 901 , - 1188 , - 1247 , - 166 , - 681 , - 56 , - 1027 , - 858 , - 461 , - 748 , - 807 , - 1550 , - 241 , - 1440 , - 587 , - 418 , - 21 , - 308 , - 367 , - 1110 , - 1625 , - 1000 , - 147 , - 1802 , - 1405 , - 1692 , - 1751 , - 670 , - 1185 , - 560 , - 1531 , - 1362 , - 965 , - 1252 , - 1311 , - 230 , - 745 , - 120 , - 1091 , - 922 , - 525 , - 812 , - 871 , - 1614 , - 305 , - 1504 , - 651 , - 482 , - 85 , - 372 , - 431 , - 1174 , - 1689 , - 1064 , - 211 , - 42 , - 1469 , - 1756 , - 1815 , - 734 , - 1249 , - 624 , - 1595 , - 1426 , - 1029 , - 1316 , - 1375 , - 294 , - 809 , - 184 , - 1155 , - 986 , - 589 , - 876 , - 935 , - 1678 , - 369 , - 1568 , - 715 , - 546 , - 149 , - 436 , - 495 , - 1238 , - 1753 , - 1128 , - 275 , - 106 , - 1533 , - 1820 , - 55 , - 798 , - 1313 , - 688 , - 1659 , - 1490 , - 1093 , - 1380 , - 1439 , - 358 , - 873 , - 248 , - 1219 , - 1050 , - 653 , - 940 , - 999 , - 1742 , - 433 , - 1632 , - 779 , - 610 , - 213 , - 500 , - 559 , - 1302 , - 1817 , - 1192 , - 339 , - 170 , - 1597 , - 60 , - 119 , - 862 , - 1377 , - 752 , - 1723 , - 1554 , - 1157 , - 1444 , - 1503 , - 422 , - 937 , - 312 , - 1283 , - 1114 , - 717 , - 1004 , - 1063 , - 1806 , - 497 , - 1696 , - 843 , - 674 , - 277 , - 564 , - 623 , - 1366 , - 57 , - 1256 , - 403 , - 234 , - 1661 , - 124 , - 183 , - 926 , - 1441 , - 816 , - 1787 , - 1618 , - 1221 , - 1508 , - 1567 , - 486 , - 1001 , - 376 , - 1347 , - 1178 , - 781 , - 1068 , - 1127 , - 46 , - 561 , - 1760 , - 907 , - 738 , - 341 , - 628 , - 687 , - 1430 , - 121 , - 1320 , - 467 , - 298 , - 1725 , - 188 , - 247 , - 990 , - 1505 , - 880 , - 27 , - 1682 , - 1285 , - 1572 , - 1631 , - 550 , - 1065 , - 440 , - 1411 , - 1242 , - 845 , - 1132 , - 1191 , - 110 , - 625 , - 0 , - 405 , - 578 , - 519 , - 228 , - 1561 , - 806 , - 1675 , - 456 , - 861 , - 1034 , - 975 , - 684 , - 161 , - 1262 , - 275 , - 912 , - 1317 , - 1490 , - 1431 , - 1140 , - 617 , - 1718 , - 731 , - 1368 , - 1773 , - 90 , - 31 , - 1596 , - 1073 , - 318 , - 1187 , - 1824 , - 373 , - 546 , - 487 , - 196 , - 1529 , - 774 , - 1643 , - 424 , - 829 , - 1002 , - 943 , - 652 , - 129 , - 1230 , - 243 , - 880 , - 1285 , - 1458 , - 1399 , - 1108 , - 585 , - 1686 , - 699 , - 1336 , - 1741 , - 58 , - 1855 , - 1564 , - 1041 , - 286 , - 1155 , - 1792 , - 341 , - 514 , - 455 , - 164 , - 1497 , - 742 , - 1611 , - 392 , - 797 , - 970 , - 911 , - 620 , - 97 , - 1198 , - 211 , - 848 , - 1253 , - 1426 , - 1367 , - 1076 , - 553 , - 1654 , - 667 , - 1304 , - 1709 , - 26 , - 1823 , - 1532 , - 1009 , - 254 , - 1123 , - 1760 , - 309 , - 482 , - 423 , - 132 , - 1465 , - 710 , - 1579 , - 360 , - 765 , - 938 , - 879 , - 588 , - 65 , - 1166 , - 179 , - 816 , - 1221 , - 1394 , - 1335 , - 1044 , - 521 , - 1622 , - 635 , - 1272 , - 1677 , - 1850 , - 1791 , - 1500 , - 977 , - 222 , - 1091 , - 1728 , - 277 , - 450 , - 391 , - 100 , - 1433 , - 678 , - 1547 , - 328 , - 733 , - 906 , - 847 , - 556 , - 33 , - 1134 , - 147 , - 784 , - 1189 , - 1362 , - 1303 , - 1012 , - 489 , - 1590 , - 603 , - 1240 , - 1645 , - 1818 , - 1759 , - 1468 , - 945 , - 190 , - 1059 , - 1696 , - 245 , - 418 , - 359 , - 68 , - 1401 , - 646 , - 1515 , - 296 , - 701 , - 874 , - 815 , - 524 , - 1 , - 1102 , - 115 , - 752 , - 1157 , - 1330 , - 1271 , - 980 , - 457 , - 1558 , - 571 , - 1208 , - 1613 , - 1786 , - 1727 , - 1436 , - 913 , - 158 , - 1027 , - 1664 , - 213 , - 386 , - 327 , - 36 , - 1369 , - 614 , - 1483 , - 264 , - 669 , - 842 , - 783 , - 492 , - 1825 , - 1070 , - 83 , - 720 , - 1125 , - 1298 , - 1239 , - 948 , - 425 , - 1526 , - 539 , - 1176 , - 1581 , - 1754 , - 1695 , - 1404 , - 881 , - 126 , - 995 , - 1632 , - 181 , - 354 , - 295 , - 4 , - 1337 , - 582 , - 1451 , - 232 , - 637 , - 810 , - 751 , - 460 , - 1793 , - 1038 , - 51 , - 688 , - 1093 , - 1266 , - 1207 , - 916 , - 393 , - 1494 , - 507 , - 1144 , - 1549 , - 1722 , - 1663 , - 1372 , - 849 , - 94 , - 963 , - 1600 , - 149 , - 322 , - 263 , - 1828 , - 1305 , - 550 , - 1419 , - 200 , - 605 , - 778 , - 719 , - 428 , - 1761 , - 1006 , - 19 , - 656 , - 1061 , - 1234 , - 1175 , - 884 , - 361 , - 1462 , - 475 , - 1112 , - 1517 , - 1690 , - 1631 , - 1340 , - 817 , - 62 , - 931 , - 1568 , - 117 , - 290 , - 231 , - 1796 , - 1273 , - 518 , - 1387 , - 168 , - 573 , - 746 , - 687 , - 396 , - 1729 , - 974 , - 1843 , - 624 , - 1029 , - 1202 , - 1143 , - 852 , - 329 , - 1430 , - 443 , - 1080 , - 1485 , - 1658 , - 1599 , - 1308 , - 785 , - 30 , - 899 , - 1536 , - 85 , - 258 , - 199 , - 1764 , - 1241 , - 486 , - 1355 , - 136 , - 541 , - 714 , - 655 , - 364 , - 1697 , - 942 , - 1811 , - 592 , - 997 , - 1170 , - 1111 , - 820 , - 297 , - 1398 , - 411 , - 1048 , - 1453 , - 1626 , - 1567 , - 1276 , - 753 , - 1854 , - 867 , - 1504 , - 53 , - 226 , - 167 , - 1732 , - 1209 , - 454 , - 1323 , - 104 , - 509 , - 682 , - 623 , - 332 , - 1665 , - 910 , - 1779 , - 560 , - 965 , - 1138 , - 1079 , - 788 , - 265 , - 1366 , - 379 , - 1016 , - 1421 , - 1594 , - 1535 , - 1244 , - 721 , - 1822 , - 835 , - 1472 , - 21 , - 194 , - 135 , - 1700 , - 1177 , - 422 , - 1291 , - 72 , - 477 , - 650 , - 591 , - 300 , - 1633 , - 878 , - 1747 , - 528 , - 933 , - 1106 , - 1047 , - 756 , - 233 , - 1334 , - 347 , - 984 , - 1389 , - 1562 , - 1503 , - 1212 , - 689 , - 1790 , - 803 , - 1440 , - 1845 , - 162 , - 103 , - 1668 , - 1145 , - 390 , - 1259 , - 40 , - 445 , - 618 , - 559 , - 268 , - 1601 , - 846 , - 1715 , - 496 , - 901 , - 1074 , - 1015 , - 724 , - 201 , - 1302 , - 315 , - 952 , - 1357 , - 1530 , - 1471 , - 1180 , - 657 , - 1758 , - 771 , - 1408 , - 1813 , - 130 , - 71 , - 1636 , - 1113 , - 358 , - 1227 , - 8 , - 413 , - 586 , - 527 , - 236 , - 1569 , - 814 , - 1683 , - 464 , - 869 , - 1042 , - 983 , - 692 , - 169 , - 1270 , - 283 , - 920 , - 1325 , - 1498 , - 1439 , - 1148 , - 625 , - 1726 , - 739 , - 1376 , - 1781 , - 98 , - 39 , - 1604 , - 1081 , - 326 , - 1195 , - 1832 , - 381 , - 554 , - 495 , - 204 , - 1537 , - 782 , - 1651 , - 432 , - 837 , - 1010 , - 951 , - 660 , - 137 , - 1238 , - 251 , - 888 , - 1293 , - 1466 , - 1407 , - 1116 , - 593 , - 1694 , - 707 , - 1344 , - 1749 , - 66 , - 7 , - 1572 , - 1049 , - 294 , - 1163 , - 1800 , - 349 , - 522 , - 463 , - 172 , - 1505 , - 750 , - 1619 , - 400 , - 805 , - 978 , - 919 , - 628 , - 105 , - 1206 , - 219 , - 856 , - 1261 , - 1434 , - 1375 , - 1084 , - 561 , - 1662 , - 675 , - 1312 , - 1717 , - 34 , - 1831 , - 1540 , - 1017 , - 262 , - 1131 , - 1768 , - 317 , - 490 , - 431 , - 140 , - 1473 , - 718 , - 1587 , - 368 , - 773 , - 946 , - 887 , - 596 , - 73 , - 1174 , - 187 , - 824 , - 1229 , - 1402 , - 1343 , - 1052 , - 529 , - 1630 , - 643 , - 1280 , - 1685 , - 2 , - 1799 , - 1508 , - 985 , - 230 , - 1099 , - 1736 , - 285 , - 458 , - 399 , - 108 , - 1441 , - 686 , - 1555 , - 336 , - 741 , - 914 , - 855 , - 564 , - 41 , - 1142 , - 155 , - 792 , - 1197 , - 1370 , - 1311 , - 1020 , - 497 , - 1598 , - 611 , - 1248 , - 1653 , - 1826 , - 1767 , - 1476 , - 953 , - 198 , - 1067 , - 1704 , - 253 , - 426 , - 367 , - 76 , - 1409 , - 654 , - 1523 , - 304 , - 709 , - 882 , - 823 , - 532 , - 9 , - 1110 , - 123 , - 760 , - 1165 , - 1338 , - 1279 , - 988 , - 465 , - 1566 , - 579 , - 1216 , - 1621 , - 1794 , - 1735 , - 1444 , - 921 , - 166 , - 1035 , - 1672 , - 221 , - 394 , - 335 , - 44 , - 1377 , - 622 , - 1491 , - 272 , - 677 , - 850 , - 791 , - 500 , - 1833 , - 1078 , - 91 , - 728 , - 1133 , - 1306 , - 1247 , - 956 , - 433 , - 1534 , - 547 , - 1184 , - 1589 , - 1762 , - 1703 , - 1412 , - 889 , - 134 , - 1003 , - 1640 , - 189 , - 362 , - 303 , - 12 , - 1345 , - 590 , - 1459 , - 240 , - 645 , - 818 , - 759 , - 468 , - 1801 , - 1046 , - 59 , - 696 , - 1101 , - 1274 , - 1215 , - 924 , - 401 , - 1502 , - 515 , - 1152 , - 1557 , - 1730 , - 1671 , - 1380 , - 857 , - 102 , - 971 , - 1608 , - 157 , - 330 , - 271 , - 1836 , - 1313 , - 558 , - 1427 , - 208 , - 613 , - 786 , - 727 , - 436 , - 1769 , - 1014 , - 27 , - 664 , - 1069 , - 1242 , - 1183 , - 892 , - 369 , - 1470 , - 483 , - 1120 , - 1525 , - 1698 , - 1639 , - 1348 , - 825 , - 70 , - 939 , - 1576 , - 125 , - 298 , - 239 , - 1804 , - 1281 , - 526 , - 1395 , - 176 , - 581 , - 754 , - 695 , - 404 , - 1737 , - 982 , - 1851 , - 632 , - 1037 , - 1210 , - 1151 , - 860 , - 337 , - 1438 , - 451 , - 1088 , - 1493 , - 1666 , - 1607 , - 1316 , - 793 , - 38 , - 907 , - 1544 , - 93 , - 266 , - 207 , - 1772 , - 1249 , - 494 , - 1363 , - 144 , - 549 , - 722 , - 663 , - 372 , - 1705 , - 950 , - 1819 , - 600 , - 1005 , - 1178 , - 1119 , - 828 , - 305 , - 1406 , - 419 , - 1056 , - 1461 , - 1634 , - 1575 , - 1284 , - 761 , - 6 , - 875 , - 1512 , - 61 , - 234 , - 175 , - 1740 , - 1217 , - 462 , - 1331 , - 112 , - 517 , - 690 , - 631 , - 340 , - 1673 , - 918 , - 1787 , - 568 , - 973 , - 1146 , - 1087 , - 796 , - 273 , - 1374 , - 387 , - 1024 , - 1429 , - 1602 , - 1543 , - 1252 , - 729 , - 1830 , - 843 , - 1480 , - 29 , - 202 , - 143 , - 1708 , - 1185 , - 430 , - 1299 , - 80 , - 485 , - 658 , - 599 , - 308 , - 1641 , - 886 , - 1755 , - 536 , - 941 , - 1114 , - 1055 , - 764 , - 241 , - 1342 , - 355 , - 992 , - 1397 , - 1570 , - 1511 , - 1220 , - 697 , - 1798 , - 811 , - 1448 , - 1853 , - 170 , - 111 , - 1676 , - 1153 , - 398 , - 1267 , - 48 , - 453 , - 626 , - 567 , - 276 , - 1609 , - 854 , - 1723 , - 504 , - 909 , - 1082 , - 1023 , - 732 , - 209 , - 1310 , - 323 , - 960 , - 1365 , - 1538 , - 1479 , - 1188 , - 665 , - 1766 , - 779 , - 1416 , - 1821 , - 138 , - 79 , - 1644 , - 1121 , - 366 , - 1235 , - 16 , - 421 , - 594 , - 535 , - 244 , - 1577 , - 822 , - 1691 , - 472 , - 877 , - 1050 , - 991 , - 700 , - 177 , - 1278 , - 291 , - 928 , - 1333 , - 1506 , - 1447 , - 1156 , - 633 , - 1734 , - 747 , - 1384 , - 1789 , - 106 , - 47 , - 1612 , - 1089 , - 334 , - 1203 , - 1840 , - 389 , - 562 , - 503 , - 212 , - 1545 , - 790 , - 1659 , - 440 , - 845 , - 1018 , - 959 , - 668 , - 145 , - 1246 , - 259 , - 896 , - 1301 , - 1474 , - 1415 , - 1124 , - 601 , - 1702 , - 715 , - 1352 , - 1757 , - 74 , - 15 , - 1580 , - 1057 , - 302 , - 1171 , - 1808 , - 357 , - 530 , - 471 , - 180 , - 1513 , - 758 , - 1627 , - 408 , - 813 , - 986 , - 927 , - 636 , - 113 , - 1214 , - 227 , - 864 , - 1269 , - 1442 , - 1383 , - 1092 , - 569 , - 1670 , - 683 , - 1320 , - 1725 , - 42 , - 1839 , - 1548 , - 1025 , - 270 , - 1139 , - 1776 , - 325 , - 498 , - 439 , - 148 , - 1481 , - 726 , - 1595 , - 376 , - 781 , - 954 , - 895 , - 604 , - 81 , - 1182 , - 195 , - 832 , - 1237 , - 1410 , - 1351 , - 1060 , - 537 , - 1638 , - 651 , - 1288 , - 1693 , - 10 , - 1807 , - 1516 , - 993 , - 238 , - 1107 , - 1744 , - 293 , - 466 , - 407 , - 116 , - 1449 , - 694 , - 1563 , - 344 , - 749 , - 922 , - 863 , - 572 , - 49 , - 1150 , - 163 , - 800 , - 1205 , - 1378 , - 1319 , - 1028 , - 505 , - 1606 , - 619 , - 1256 , - 1661 , - 1834 , - 1775 , - 1484 , - 961 , - 206 , - 1075 , - 1712 , - 261 , - 434 , - 375 , - 84 , - 1417 , - 662 , - 1531 , - 312 , - 717 , - 890 , - 831 , - 540 , - 17 , - 1118 , - 131 , - 768 , - 1173 , - 1346 , - 1287 , - 996 , - 473 , - 1574 , - 587 , - 1224 , - 1629 , - 1802 , - 1743 , - 1452 , - 929 , - 174 , - 1043 , - 1680 , - 229 , - 402 , - 343 , - 52 , - 1385 , - 630 , - 1499 , - 280 , - 685 , - 858 , - 799 , - 508 , - 1841 , - 1086 , - 99 , - 736 , - 1141 , - 1314 , - 1255 , - 964 , - 441 , - 1542 , - 555 , - 1192 , - 1597 , - 1770 , - 1711 , - 1420 , - 897 , - 142 , - 1011 , - 1648 , - 197 , - 370 , - 311 , - 20 , - 1353 , - 598 , - 1467 , - 248 , - 653 , - 826 , - 767 , - 476 , - 1809 , - 1054 , - 67 , - 704 , - 1109 , - 1282 , - 1223 , - 932 , - 409 , - 1510 , - 523 , - 1160 , - 1565 , - 1738 , - 1679 , - 1388 , - 865 , - 110 , - 979 , - 1616 , - 165 , - 338 , - 279 , - 1844 , - 1321 , - 566 , - 1435 , - 216 , - 621 , - 794 , - 735 , - 444 , - 1777 , - 1022 , - 35 , - 672 , - 1077 , - 1250 , - 1191 , - 900 , - 377 , - 1478 , - 491 , - 1128 , - 1533 , - 1706 , - 1647 , - 1356 , - 833 , - 78 , - 947 , - 1584 , - 133 , - 306 , - 247 , - 1812 , - 1289 , - 534 , - 1403 , - 184 , - 589 , - 762 , - 703 , - 412 , - 1745 , - 990 , - 3 , - 640 , - 1045 , - 1218 , - 1159 , - 868 , - 345 , - 1446 , - 459 , - 1096 , - 1501 , - 1674 , - 1615 , - 1324 , - 801 , - 46 , - 915 , - 1552 , - 101 , - 274 , - 215 , - 1780 , - 1257 , - 502 , - 1371 , - 152 , - 557 , - 730 , - 671 , - 380 , - 1713 , - 958 , - 1827 , - 608 , - 1013 , - 1186 , - 1127 , - 836 , - 313 , - 1414 , - 427 , - 1064 , - 1469 , - 1642 , - 1583 , - 1292 , - 769 , - 14 , - 883 , - 1520 , - 69 , - 242 , - 183 , - 1748 , - 1225 , - 470 , - 1339 , - 120 , - 525 , - 698 , - 639 , - 348 , - 1681 , - 926 , - 1795 , - 576 , - 981 , - 1154 , - 1095 , - 804 , - 281 , - 1382 , - 395 , - 1032 , - 1437 , - 1610 , - 1551 , - 1260 , - 737 , - 1838 , - 851 , - 1488 , - 37 , - 210 , - 151 , - 1716 , - 1193 , - 438 , - 1307 , - 88 , - 493 , - 666 , - 607 , - 316 , - 1649 , - 894 , - 1763 , - 544 , - 949 , - 1122 , - 1063 , - 772 , - 249 , - 1350 , - 363 , - 1000 , - 1405 , - 1578 , - 1519 , - 1228 , - 705 , - 1806 , - 819 , - 1456 , - 5 , - 178 , - 119 , - 1684 , - 1161 , - 406 , - 1275 , - 56 , - 461 , - 634 , - 575 , - 284 , - 1617 , - 862 , - 1731 , - 512 , - 917 , - 1090 , - 1031 , - 740 , - 217 , - 1318 , - 331 , - 968 , - 1373 , - 1546 , - 1487 , - 1196 , - 673 , - 1774 , - 787 , - 1424 , - 1829 , - 146 , - 87 , - 1652 , - 1129 , - 374 , - 1243 , - 24 , - 429 , - 602 , - 543 , - 252 , - 1585 , - 830 , - 1699 , - 480 , - 885 , - 1058 , - 999 , - 708 , - 185 , - 1286 , - 299 , - 936 , - 1341 , - 1514 , - 1455 , - 1164 , - 641 , - 1742 , - 755 , - 1392 , - 1797 , - 114 , - 55 , - 1620 , - 1097 , - 342 , - 1211 , - 1848 , - 397 , - 570 , - 511 , - 220 , - 1553 , - 798 , - 1667 , - 448 , - 853 , - 1026 , - 967 , - 676 , - 153 , - 1254 , - 267 , - 904 , - 1309 , - 1482 , - 1423 , - 1132 , - 609 , - 1710 , - 723 , - 1360 , - 1765 , - 82 , - 23 , - 1588 , - 1065 , - 310 , - 1179 , - 1816 , - 365 , - 538 , - 479 , - 188 , - 1521 , - 766 , - 1635 , - 416 , - 821 , - 994 , - 935 , - 644 , - 121 , - 1222 , - 235 , - 872 , - 1277 , - 1450 , - 1391 , - 1100 , - 577 , - 1678 , - 691 , - 1328 , - 1733 , - 50 , - 1847 , - 1556 , - 1033 , - 278 , - 1147 , - 1784 , - 333 , - 506 , - 447 , - 156 , - 1489 , - 734 , - 1603 , - 384 , - 789 , - 962 , - 903 , - 612 , - 89 , - 1190 , - 203 , - 840 , - 1245 , - 1418 , - 1359 , - 1068 , - 545 , - 1646 , - 659 , - 1296 , - 1701 , - 18 , - 1815 , - 1524 , - 1001 , - 246 , - 1115 , - 1752 , - 301 , - 474 , - 415 , - 124 , - 1457 , - 702 , - 1571 , - 352 , - 757 , - 930 , - 871 , - 580 , - 57 , - 1158 , - 171 , - 808 , - 1213 , - 1386 , - 1327 , - 1036 , - 513 , - 1614 , - 627 , - 1264 , - 1669 , - 1842 , - 1783 , - 1492 , - 969 , - 214 , - 1083 , - 1720 , - 269 , - 442 , - 383 , - 92 , - 1425 , - 670 , - 1539 , - 320 , - 725 , - 898 , - 839 , - 548 , - 25 , - 1126 , - 139 , - 776 , - 1181 , - 1354 , - 1295 , - 1004 , - 481 , - 1582 , - 595 , - 1232 , - 1637 , - 1810 , - 1751 , - 1460 , - 937 , - 182 , - 1051 , - 1688 , - 237 , - 410 , - 351 , - 60 , - 1393 , - 638 , - 1507 , - 288 , - 693 , - 866 , - 807 , - 516 , - 1849 , - 1094 , - 107 , - 744 , - 1149 , - 1322 , - 1263 , - 972 , - 449 , - 1550 , - 563 , - 1200 , - 1605 , - 1778 , - 1719 , - 1428 , - 905 , - 150 , - 1019 , - 1656 , - 205 , - 378 , - 319 , - 28 , - 1361 , - 606 , - 1475 , - 256 , - 661 , - 834 , - 775 , - 484 , - 1817 , - 1062 , - 75 , - 712 , - 1117 , - 1290 , - 1231 , - 940 , - 417 , - 1518 , - 531 , - 1168 , - 1573 , - 1746 , - 1687 , - 1396 , - 873 , - 118 , - 987 , - 1624 , - 173 , - 346 , - 287 , - 1852 , - 1329 , - 574 , - 1443 , - 224 , - 629 , - 802 , - 743 , - 452 , - 1785 , - 1030 , - 43 , - 680 , - 1085 , - 1258 , - 1199 , - 908 , - 385 , - 1486 , - 499 , - 1136 , - 1541 , - 1714 , - 1655 , - 1364 , - 841 , - 86 , - 955 , - 1592 , - 141 , - 314 , - 255 , - 1820 , - 1297 , - 542 , - 1411 , - 192 , - 597 , - 770 , - 711 , - 420 , - 1753 , - 998 , - 11 , - 648 , - 1053 , - 1226 , - 1167 , - 876 , - 353 , - 1454 , - 467 , - 1104 , - 1509 , - 1682 , - 1623 , - 1332 , - 809 , - 54 , - 923 , - 1560 , - 109 , - 282 , - 223 , - 1788 , - 1265 , - 510 , - 1379 , - 160 , - 565 , - 738 , - 679 , - 388 , - 1721 , - 966 , - 1835 , - 616 , - 1021 , - 1194 , - 1135 , - 844 , - 321 , - 1422 , - 435 , - 1072 , - 1477 , - 1650 , - 1591 , - 1300 , - 777 , - 22 , - 891 , - 1528 , - 77 , - 250 , - 191 , - 1756 , - 1233 , - 478 , - 1347 , - 128 , - 533 , - 706 , - 647 , - 356 , - 1689 , - 934 , - 1803 , - 584 , - 989 , - 1162 , - 1103 , - 812 , - 289 , - 1390 , - 403 , - 1040 , - 1445 , - 1618 , - 1559 , - 1268 , - 745 , - 1846 , - 859 , - 1496 , - 45 , - 218 , - 159 , - 1724 , - 1201 , - 446 , - 1315 , - 96 , - 501 , - 674 , - 615 , - 324 , - 1657 , - 902 , - 1771 , - 552 , - 957 , - 1130 , - 1071 , - 780 , - 257 , - 1358 , - 371 , - 1008 , - 1413 , - 1586 , - 1527 , - 1236 , - 713 , - 1814 , - 827 , - 1464 , - 13 , - 186 , - 127 , - 1692 , - 1169 , - 414 , - 1283 , - 64 , - 469 , - 642 , - 583 , - 292 , - 1625 , - 870 , - 1739 , - 520 , - 925 , - 1098 , - 1039 , - 748 , - 225 , - 1326 , - 339 , - 976 , - 1381 , - 1554 , - 1495 , - 1204 , - 681 , - 1782 , - 795 , - 1432 , - 1837 , - 154 , - 95 , - 1660 , - 1137 , - 382 , - 1251 , - 32 , - 437 , - 610 , - 551 , - 260 , - 1593 , - 838 , - 1707 , - 488 , - 893 , - 1066 , - 1007 , - 716 , - 193 , - 1294 , - 307 , - 944 , - 1349 , - 1522 , - 1463 , - 1172 , - 649 , - 1750 , - 763 , - 1400 , - 1805 , - 122 , - 63 , - 1628 , - 1105 , - 350 , - 1219 , - 0 , - 139 , - 514 , - 181 , - 84 , - 1167 , - 598 , - 1209 , - 168 , - 307 , - 682 , - 349 , - 252 , - 1335 , - 766 , - 1377 , - 336 , - 475 , - 850 , - 517 , - 420 , - 1503 , - 934 , - 1545 , - 504 , - 643 , - 1018 , - 685 , - 588 , - 1671 , - 1102 , - 1713 , - 672 , - 811 , - 1186 , - 853 , - 756 , - 1839 , - 1270 , - 1881 , - 840 , - 979 , - 1354 , - 1021 , - 924 , - 119 , - 1438 , - 161 , - 1008 , - 1147 , - 1522 , - 1189 , - 1092 , - 287 , - 1606 , - 329 , - 1176 , - 1315 , - 1690 , - 1357 , - 1260 , - 455 , - 1774 , - 497 , - 1344 , - 1483 , - 1858 , - 1525 , - 1428 , - 623 , - 54 , - 665 , - 1512 , - 1651 , - 138 , - 1693 , - 1596 , - 791 , - 222 , - 833 , - 1680 , - 1819 , - 306 , - 1861 , - 1764 , - 959 , - 390 , - 1001 , - 1848 , - 99 , - 474 , - 141 , - 44 , - 1127 , - 558 , - 1169 , - 128 , - 267 , - 642 , - 309 , - 212 , - 1295 , - 726 , - 1337 , - 296 , - 435 , - 810 , - 477 , - 380 , - 1463 , - 894 , - 1505 , - 464 , - 603 , - 978 , - 645 , - 548 , - 1631 , - 1062 , - 1673 , - 632 , - 771 , - 1146 , - 813 , - 716 , - 1799 , - 1230 , - 1841 , - 800 , - 939 , - 1314 , - 981 , - 884 , - 79 , - 1398 , - 121 , - 968 , - 1107 , - 1482 , - 1149 , - 1052 , - 247 , - 1566 , - 289 , - 1136 , - 1275 , - 1650 , - 1317 , - 1220 , - 415 , - 1734 , - 457 , - 1304 , - 1443 , - 1818 , - 1485 , - 1388 , - 583 , - 14 , - 625 , - 1472 , - 1611 , - 98 , - 1653 , - 1556 , - 751 , - 182 , - 793 , - 1640 , - 1779 , - 266 , - 1821 , - 1724 , - 919 , - 350 , - 961 , - 1808 , - 59 , - 434 , - 101 , - 4 , - 1087 , - 518 , - 1129 , - 88 , - 227 , - 602 , - 269 , - 172 , - 1255 , - 686 , - 1297 , - 256 , - 395 , - 770 , - 437 , - 340 , - 1423 , - 854 , - 1465 , - 424 , - 563 , - 938 , - 605 , - 508 , - 1591 , - 1022 , - 1633 , - 592 , - 731 , - 1106 , - 773 , - 676 , - 1759 , - 1190 , - 1801 , - 760 , - 899 , - 1274 , - 941 , - 844 , - 39 , - 1358 , - 81 , - 928 , - 1067 , - 1442 , - 1109 , - 1012 , - 207 , - 1526 , - 249 , - 1096 , - 1235 , - 1610 , - 1277 , - 1180 , - 375 , - 1694 , - 417 , - 1264 , - 1403 , - 1778 , - 1445 , - 1348 , - 543 , - 1862 , - 585 , - 1432 , - 1571 , - 58 , - 1613 , - 1516 , - 711 , - 142 , - 753 , - 1600 , - 1739 , - 226 , - 1781 , - 1684 , - 879 , - 310 , - 921 , - 1768 , - 19 , - 394 , - 61 , - 1852 , - 1047 , - 478 , - 1089 , - 48 , - 187 , - 562 , - 229 , - 132 , - 1215 , - 646 , - 1257 , - 216 , - 355 , - 730 , - 397 , - 300 , - 1383 , - 814 , - 1425 , - 384 , - 523 , - 898 , - 565 , - 468 , - 1551 , - 982 , - 1593 , - 552 , - 691 , - 1066 , - 733 , - 636 , - 1719 , - 1150 , - 1761 , - 720 , - 859 , - 1234 , - 901 , - 804 , - 1887 , - 1318 , - 41 , - 888 , - 1027 , - 1402 , - 1069 , - 972 , - 167 , - 1486 , - 209 , - 1056 , - 1195 , - 1570 , - 1237 , - 1140 , - 335 , - 1654 , - 377 , - 1224 , - 1363 , - 1738 , - 1405 , - 1308 , - 503 , - 1822 , - 545 , - 1392 , - 1531 , - 18 , - 1573 , - 1476 , - 671 , - 102 , - 713 , - 1560 , - 1699 , - 186 , - 1741 , - 1644 , - 839 , - 270 , - 881 , - 1728 , - 1867 , - 354 , - 21 , - 1812 , - 1007 , - 438 , - 1049 , - 8 , - 147 , - 522 , - 189 , - 92 , - 1175 , - 606 , - 1217 , - 176 , - 315 , - 690 , - 357 , - 260 , - 1343 , - 774 , - 1385 , - 344 , - 483 , - 858 , - 525 , - 428 , - 1511 , - 942 , - 1553 , - 512 , - 651 , - 1026 , - 693 , - 596 , - 1679 , - 1110 , - 1721 , - 680 , - 819 , - 1194 , - 861 , - 764 , - 1847 , - 1278 , - 1 , - 848 , - 987 , - 1362 , - 1029 , - 932 , - 127 , - 1446 , - 169 , - 1016 , - 1155 , - 1530 , - 1197 , - 1100 , - 295 , - 1614 , - 337 , - 1184 , - 1323 , - 1698 , - 1365 , - 1268 , - 463 , - 1782 , - 505 , - 1352 , - 1491 , - 1866 , - 1533 , - 1436 , - 631 , - 62 , - 673 , - 1520 , - 1659 , - 146 , - 1701 , - 1604 , - 799 , - 230 , - 841 , - 1688 , - 1827 , - 314 , - 1869 , - 1772 , - 967 , - 398 , - 1009 , - 1856 , - 107 , - 482 , - 149 , - 52 , - 1135 , - 566 , - 1177 , - 136 , - 275 , - 650 , - 317 , - 220 , - 1303 , - 734 , - 1345 , - 304 , - 443 , - 818 , - 485 , - 388 , - 1471 , - 902 , - 1513 , - 472 , - 611 , - 986 , - 653 , - 556 , - 1639 , - 1070 , - 1681 , - 640 , - 779 , - 1154 , - 821 , - 724 , - 1807 , - 1238 , - 1849 , - 808 , - 947 , - 1322 , - 989 , - 892 , - 87 , - 1406 , - 129 , - 976 , - 1115 , - 1490 , - 1157 , - 1060 , - 255 , - 1574 , - 297 , - 1144 , - 1283 , - 1658 , - 1325 , - 1228 , - 423 , - 1742 , - 465 , - 1312 , - 1451 , - 1826 , - 1493 , - 1396 , - 591 , - 22 , - 633 , - 1480 , - 1619 , - 106 , - 1661 , - 1564 , - 759 , - 190 , - 801 , - 1648 , - 1787 , - 274 , - 1829 , - 1732 , - 927 , - 358 , - 969 , - 1816 , - 67 , - 442 , - 109 , - 12 , - 1095 , - 526 , - 1137 , - 96 , - 235 , - 610 , - 277 , - 180 , - 1263 , - 694 , - 1305 , - 264 , - 403 , - 778 , - 445 , - 348 , - 1431 , - 862 , - 1473 , - 432 , - 571 , - 946 , - 613 , - 516 , - 1599 , - 1030 , - 1641 , - 600 , - 739 , - 1114 , - 781 , - 684 , - 1767 , - 1198 , - 1809 , - 768 , - 907 , - 1282 , - 949 , - 852 , - 47 , - 1366 , - 89 , - 936 , - 1075 , - 1450 , - 1117 , - 1020 , - 215 , - 1534 , - 257 , - 1104 , - 1243 , - 1618 , - 1285 , - 1188 , - 383 , - 1702 , - 425 , - 1272 , - 1411 , - 1786 , - 1453 , - 1356 , - 551 , - 1870 , - 593 , - 1440 , - 1579 , - 66 , - 1621 , - 1524 , - 719 , - 150 , - 761 , - 1608 , - 1747 , - 234 , - 1789 , - 1692 , - 887 , - 318 , - 929 , - 1776 , - 27 , - 402 , - 69 , - 1860 , - 1055 , - 486 , - 1097 , - 56 , - 195 , - 570 , - 237 , - 140 , - 1223 , - 654 , - 1265 , - 224 , - 363 , - 738 , - 405 , - 308 , - 1391 , - 822 , - 1433 , - 392 , - 531 , - 906 , - 573 , - 476 , - 1559 , - 990 , - 1601 , - 560 , - 699 , - 1074 , - 741 , - 644 , - 1727 , - 1158 , - 1769 , - 728 , - 867 , - 1242 , - 909 , - 812 , - 7 , - 1326 , - 49 , - 896 , - 1035 , - 1410 , - 1077 , - 980 , - 175 , - 1494 , - 217 , - 1064 , - 1203 , - 1578 , - 1245 , - 1148 , - 343 , - 1662 , - 385 , - 1232 , - 1371 , - 1746 , - 1413 , - 1316 , - 511 , - 1830 , - 553 , - 1400 , - 1539 , - 26 , - 1581 , - 1484 , - 679 , - 110 , - 721 , - 1568 , - 1707 , - 194 , - 1749 , - 1652 , - 847 , - 278 , - 889 , - 1736 , - 1875 , - 362 , - 29 , - 1820 , - 1015 , - 446 , - 1057 , - 16 , - 155 , - 530 , - 197 , - 100 , - 1183 , - 614 , - 1225 , - 184 , - 323 , - 698 , - 365 , - 268 , - 1351 , - 782 , - 1393 , - 352 , - 491 , - 866 , - 533 , - 436 , - 1519 , - 950 , - 1561 , - 520 , - 659 , - 1034 , - 701 , - 604 , - 1687 , - 1118 , - 1729 , - 688 , - 827 , - 1202 , - 869 , - 772 , - 1855 , - 1286 , - 9 , - 856 , - 995 , - 1370 , - 1037 , - 940 , - 135 , - 1454 , - 177 , - 1024 , - 1163 , - 1538 , - 1205 , - 1108 , - 303 , - 1622 , - 345 , - 1192 , - 1331 , - 1706 , - 1373 , - 1276 , - 471 , - 1790 , - 513 , - 1360 , - 1499 , - 1874 , - 1541 , - 1444 , - 639 , - 70 , - 681 , - 1528 , - 1667 , - 154 , - 1709 , - 1612 , - 807 , - 238 , - 849 , - 1696 , - 1835 , - 322 , - 1877 , - 1780 , - 975 , - 406 , - 1017 , - 1864 , - 115 , - 490 , - 157 , - 60 , - 1143 , - 574 , - 1185 , - 144 , - 283 , - 658 , - 325 , - 228 , - 1311 , - 742 , - 1353 , - 312 , - 451 , - 826 , - 493 , - 396 , - 1479 , - 910 , - 1521 , - 480 , - 619 , - 994 , - 661 , - 564 , - 1647 , - 1078 , - 1689 , - 648 , - 787 , - 1162 , - 829 , - 732 , - 1815 , - 1246 , - 1857 , - 816 , - 955 , - 1330 , - 997 , - 900 , - 95 , - 1414 , - 137 , - 984 , - 1123 , - 1498 , - 1165 , - 1068 , - 263 , - 1582 , - 305 , - 1152 , - 1291 , - 1666 , - 1333 , - 1236 , - 431 , - 1750 , - 473 , - 1320 , - 1459 , - 1834 , - 1501 , - 1404 , - 599 , - 30 , - 641 , - 1488 , - 1627 , - 114 , - 1669 , - 1572 , - 767 , - 198 , - 809 , - 1656 , - 1795 , - 282 , - 1837 , - 1740 , - 935 , - 366 , - 977 , - 1824 , - 75 , - 450 , - 117 , - 20 , - 1103 , - 534 , - 1145 , - 104 , - 243 , - 618 , - 285 , - 188 , - 1271 , - 702 , - 1313 , - 272 , - 411 , - 786 , - 453 , - 356 , - 1439 , - 870 , - 1481 , - 440 , - 579 , - 954 , - 621 , - 524 , - 1607 , - 1038 , - 1649 , - 608 , - 747 , - 1122 , - 789 , - 692 , - 1775 , - 1206 , - 1817 , - 776 , - 915 , - 1290 , - 957 , - 860 , - 55 , - 1374 , - 97 , - 944 , - 1083 , - 1458 , - 1125 , - 1028 , - 223 , - 1542 , - 265 , - 1112 , - 1251 , - 1626 , - 1293 , - 1196 , - 391 , - 1710 , - 433 , - 1280 , - 1419 , - 1794 , - 1461 , - 1364 , - 559 , - 1878 , - 601 , - 1448 , - 1587 , - 74 , - 1629 , - 1532 , - 727 , - 158 , - 769 , - 1616 , - 1755 , - 242 , - 1797 , - 1700 , - 895 , - 326 , - 937 , - 1784 , - 35 , - 410 , - 77 , - 1868 , - 1063 , - 494 , - 1105 , - 64 , - 203 , - 578 , - 245 , - 148 , - 1231 , - 662 , - 1273 , - 232 , - 371 , - 746 , - 413 , - 316 , - 1399 , - 830 , - 1441 , - 400 , - 539 , - 914 , - 581 , - 484 , - 1567 , - 998 , - 1609 , - 568 , - 707 , - 1082 , - 749 , - 652 , - 1735 , - 1166 , - 1777 , - 736 , - 875 , - 1250 , - 917 , - 820 , - 15 , - 1334 , - 57 , - 904 , - 1043 , - 1418 , - 1085 , - 988 , - 183 , - 1502 , - 225 , - 1072 , - 1211 , - 1586 , - 1253 , - 1156 , - 351 , - 1670 , - 393 , - 1240 , - 1379 , - 1754 , - 1421 , - 1324 , - 519 , - 1838 , - 561 , - 1408 , - 1547 , - 34 , - 1589 , - 1492 , - 687 , - 118 , - 729 , - 1576 , - 1715 , - 202 , - 1757 , - 1660 , - 855 , - 286 , - 897 , - 1744 , - 1883 , - 370 , - 37 , - 1828 , - 1023 , - 454 , - 1065 , - 24 , - 163 , - 538 , - 205 , - 108 , - 1191 , - 622 , - 1233 , - 192 , - 331 , - 706 , - 373 , - 276 , - 1359 , - 790 , - 1401 , - 360 , - 499 , - 874 , - 541 , - 444 , - 1527 , - 958 , - 1569 , - 528 , - 667 , - 1042 , - 709 , - 612 , - 1695 , - 1126 , - 1737 , - 696 , - 835 , - 1210 , - 877 , - 780 , - 1863 , - 1294 , - 17 , - 864 , - 1003 , - 1378 , - 1045 , - 948 , - 143 , - 1462 , - 185 , - 1032 , - 1171 , - 1546 , - 1213 , - 1116 , - 311 , - 1630 , - 353 , - 1200 , - 1339 , - 1714 , - 1381 , - 1284 , - 479 , - 1798 , - 521 , - 1368 , - 1507 , - 1882 , - 1549 , - 1452 , - 647 , - 78 , - 689 , - 1536 , - 1675 , - 162 , - 1717 , - 1620 , - 815 , - 246 , - 857 , - 1704 , - 1843 , - 330 , - 1885 , - 1788 , - 983 , - 414 , - 1025 , - 1872 , - 123 , - 498 , - 165 , - 68 , - 1151 , - 582 , - 1193 , - 152 , - 291 , - 666 , - 333 , - 236 , - 1319 , - 750 , - 1361 , - 320 , - 459 , - 834 , - 501 , - 404 , - 1487 , - 918 , - 1529 , - 488 , - 627 , - 1002 , - 669 , - 572 , - 1655 , - 1086 , - 1697 , - 656 , - 795 , - 1170 , - 837 , - 740 , - 1823 , - 1254 , - 1865 , - 824 , - 963 , - 1338 , - 1005 , - 908 , - 103 , - 1422 , - 145 , - 992 , - 1131 , - 1506 , - 1173 , - 1076 , - 271 , - 1590 , - 313 , - 1160 , - 1299 , - 1674 , - 1341 , - 1244 , - 439 , - 1758 , - 481 , - 1328 , - 1467 , - 1842 , - 1509 , - 1412 , - 607 , - 38 , - 649 , - 1496 , - 1635 , - 122 , - 1677 , - 1580 , - 775 , - 206 , - 817 , - 1664 , - 1803 , - 290 , - 1845 , - 1748 , - 943 , - 374 , - 985 , - 1832 , - 83 , - 458 , - 125 , - 28 , - 1111 , - 542 , - 1153 , - 112 , - 251 , - 626 , - 293 , - 196 , - 1279 , - 710 , - 1321 , - 280 , - 419 , - 794 , - 461 , - 364 , - 1447 , - 878 , - 1489 , - 448 , - 587 , - 962 , - 629 , - 532 , - 1615 , - 1046 , - 1657 , - 616 , - 755 , - 1130 , - 797 , - 700 , - 1783 , - 1214 , - 1825 , - 784 , - 923 , - 1298 , - 965 , - 868 , - 63 , - 1382 , - 105 , - 952 , - 1091 , - 1466 , - 1133 , - 1036 , - 231 , - 1550 , - 273 , - 1120 , - 1259 , - 1634 , - 1301 , - 1204 , - 399 , - 1718 , - 441 , - 1288 , - 1427 , - 1802 , - 1469 , - 1372 , - 567 , - 1886 , - 609 , - 1456 , - 1595 , - 82 , - 1637 , - 1540 , - 735 , - 166 , - 777 , - 1624 , - 1763 , - 250 , - 1805 , - 1708 , - 903 , - 334 , - 945 , - 1792 , - 43 , - 418 , - 85 , - 1876 , - 1071 , - 502 , - 1113 , - 72 , - 211 , - 586 , - 253 , - 156 , - 1239 , - 670 , - 1281 , - 240 , - 379 , - 754 , - 421 , - 324 , - 1407 , - 838 , - 1449 , - 408 , - 547 , - 922 , - 589 , - 492 , - 1575 , - 1006 , - 1617 , - 576 , - 715 , - 1090 , - 757 , - 660 , - 1743 , - 1174 , - 1785 , - 744 , - 883 , - 1258 , - 925 , - 828 , - 23 , - 1342 , - 65 , - 912 , - 1051 , - 1426 , - 1093 , - 996 , - 191 , - 1510 , - 233 , - 1080 , - 1219 , - 1594 , - 1261 , - 1164 , - 359 , - 1678 , - 401 , - 1248 , - 1387 , - 1762 , - 1429 , - 1332 , - 527 , - 1846 , - 569 , - 1416 , - 1555 , - 42 , - 1597 , - 1500 , - 695 , - 126 , - 737 , - 1584 , - 1723 , - 210 , - 1765 , - 1668 , - 863 , - 294 , - 905 , - 1752 , - 3 , - 378 , - 45 , - 1836 , - 1031 , - 462 , - 1073 , - 32 , - 171 , - 546 , - 213 , - 116 , - 1199 , - 630 , - 1241 , - 200 , - 339 , - 714 , - 381 , - 284 , - 1367 , - 798 , - 1409 , - 368 , - 507 , - 882 , - 549 , - 452 , - 1535 , - 966 , - 1577 , - 536 , - 675 , - 1050 , - 717 , - 620 , - 1703 , - 1134 , - 1745 , - 704 , - 843 , - 1218 , - 885 , - 788 , - 1871 , - 1302 , - 25 , - 872 , - 1011 , - 1386 , - 1053 , - 956 , - 151 , - 1470 , - 193 , - 1040 , - 1179 , - 1554 , - 1221 , - 1124 , - 319 , - 1638 , - 361 , - 1208 , - 1347 , - 1722 , - 1389 , - 1292 , - 487 , - 1806 , - 529 , - 1376 , - 1515 , - 2 , - 1557 , - 1460 , - 655 , - 86 , - 697 , - 1544 , - 1683 , - 170 , - 1725 , - 1628 , - 823 , - 254 , - 865 , - 1712 , - 1851 , - 338 , - 5 , - 1796 , - 991 , - 422 , - 1033 , - 1880 , - 131 , - 506 , - 173 , - 76 , - 1159 , - 590 , - 1201 , - 160 , - 299 , - 674 , - 341 , - 244 , - 1327 , - 758 , - 1369 , - 328 , - 467 , - 842 , - 509 , - 412 , - 1495 , - 926 , - 1537 , - 496 , - 635 , - 1010 , - 677 , - 580 , - 1663 , - 1094 , - 1705 , - 664 , - 803 , - 1178 , - 845 , - 748 , - 1831 , - 1262 , - 1873 , - 832 , - 971 , - 1346 , - 1013 , - 916 , - 111 , - 1430 , - 153 , - 1000 , - 1139 , - 1514 , - 1181 , - 1084 , - 279 , - 1598 , - 321 , - 1168 , - 1307 , - 1682 , - 1349 , - 1252 , - 447 , - 1766 , - 489 , - 1336 , - 1475 , - 1850 , - 1517 , - 1420 , - 615 , - 46 , - 657 , - 1504 , - 1643 , - 130 , - 1685 , - 1588 , - 783 , - 214 , - 825 , - 1672 , - 1811 , - 298 , - 1853 , - 1756 , - 951 , - 382 , - 993 , - 1840 , - 91 , - 466 , - 133 , - 36 , - 1119 , - 550 , - 1161 , - 120 , - 259 , - 634 , - 301 , - 204 , - 1287 , - 718 , - 1329 , - 288 , - 427 , - 802 , - 469 , - 372 , - 1455 , - 886 , - 1497 , - 456 , - 595 , - 970 , - 637 , - 540 , - 1623 , - 1054 , - 1665 , - 624 , - 763 , - 1138 , - 805 , - 708 , - 1791 , - 1222 , - 1833 , - 792 , - 931 , - 1306 , - 973 , - 876 , - 71 , - 1390 , - 113 , - 960 , - 1099 , - 1474 , - 1141 , - 1044 , - 239 , - 1558 , - 281 , - 1128 , - 1267 , - 1642 , - 1309 , - 1212 , - 407 , - 1726 , - 449 , - 1296 , - 1435 , - 1810 , - 1477 , - 1380 , - 575 , - 6 , - 617 , - 1464 , - 1603 , - 90 , - 1645 , - 1548 , - 743 , - 174 , - 785 , - 1632 , - 1771 , - 258 , - 1813 , - 1716 , - 911 , - 342 , - 953 , - 1800 , - 51 , - 426 , - 93 , - 1884 , - 1079 , - 510 , - 1121 , - 80 , - 219 , - 594 , - 261 , - 164 , - 1247 , - 678 , - 1289 , - 248 , - 387 , - 762 , - 429 , - 332 , - 1415 , - 846 , - 1457 , - 416 , - 555 , - 930 , - 597 , - 500 , - 1583 , - 1014 , - 1625 , - 584 , - 723 , - 1098 , - 765 , - 668 , - 1751 , - 1182 , - 1793 , - 752 , - 891 , - 1266 , - 933 , - 836 , - 31 , - 1350 , - 73 , - 920 , - 1059 , - 1434 , - 1101 , - 1004 , - 199 , - 1518 , - 241 , - 1088 , - 1227 , - 1602 , - 1269 , - 1172 , - 367 , - 1686 , - 409 , - 1256 , - 1395 , - 1770 , - 1437 , - 1340 , - 535 , - 1854 , - 577 , - 1424 , - 1563 , - 50 , - 1605 , - 1508 , - 703 , - 134 , - 745 , - 1592 , - 1731 , - 218 , - 1773 , - 1676 , - 871 , - 302 , - 913 , - 1760 , - 11 , - 386 , - 53 , - 1844 , - 1039 , - 470 , - 1081 , - 40 , - 179 , - 554 , - 221 , - 124 , - 1207 , - 638 , - 1249 , - 208 , - 347 , - 722 , - 389 , - 292 , - 1375 , - 806 , - 1417 , - 376 , - 515 , - 890 , - 557 , - 460 , - 1543 , - 974 , - 1585 , - 544 , - 683 , - 1058 , - 725 , - 628 , - 1711 , - 1142 , - 1753 , - 712 , - 851 , - 1226 , - 893 , - 796 , - 1879 , - 1310 , - 33 , - 880 , - 1019 , - 1394 , - 1061 , - 964 , - 159 , - 1478 , - 201 , - 1048 , - 1187 , - 1562 , - 1229 , - 1132 , - 327 , - 1646 , - 369 , - 1216 , - 1355 , - 1730 , - 1397 , - 1300 , - 495 , - 1814 , - 537 , - 1384 , - 1523 , - 10 , - 1565 , - 1468 , - 663 , - 94 , - 705 , - 1552 , - 1691 , - 178 , - 1733 , - 1636 , - 831 , - 262 , - 873 , - 1720 , - 1859 , - 346 , - 13 , - 1804 , - 999 , - 430 , - 1041 , - 0 , - 1111 , - 542 , - 213 , - 124 , - 275 , - 666 , - 1297 , - 248 , - 1359 , - 790 , - 461 , - 372 , - 523 , - 914 , - 1545 , - 496 , - 1607 , - 1038 , - 709 , - 620 , - 771 , - 1162 , - 1793 , - 744 , - 1855 , - 1286 , - 957 , - 868 , - 1019 , - 1410 , - 121 , - 992 , - 183 , - 1534 , - 1205 , - 1116 , - 1267 , - 1658 , - 369 , - 1240 , - 431 , - 1782 , - 1453 , - 1364 , - 1515 , - 1906 , - 617 , - 1488 , - 679 , - 110 , - 1701 , - 1612 , - 1763 , - 234 , - 865 , - 1736 , - 927 , - 358 , - 29 , - 1860 , - 91 , - 482 , - 1113 , - 64 , - 1175 , - 606 , - 277 , - 188 , - 339 , - 730 , - 1361 , - 312 , - 1423 , - 854 , - 525 , - 436 , - 587 , - 978 , - 1609 , - 560 , - 1671 , - 1102 , - 773 , - 684 , - 835 , - 1226 , - 1857 , - 808 , - 1919 , - 1350 , - 1021 , - 932 , - 1083 , - 1474 , - 185 , - 1056 , - 247 , - 1598 , - 1269 , - 1180 , - 1331 , - 1722 , - 433 , - 1304 , - 495 , - 1846 , - 1517 , - 1428 , - 1579 , - 50 , - 681 , - 1552 , - 743 , - 174 , - 1765 , - 1676 , - 1827 , - 298 , - 929 , - 1800 , - 991 , - 422 , - 93 , - 4 , - 155 , - 546 , - 1177 , - 128 , - 1239 , - 670 , - 341 , - 252 , - 403 , - 794 , - 1425 , - 376 , - 1487 , - 918 , - 589 , - 500 , - 651 , - 1042 , - 1673 , - 624 , - 1735 , - 1166 , - 837 , - 748 , - 899 , - 1290 , - 1 , - 872 , - 63 , - 1414 , - 1085 , - 996 , - 1147 , - 1538 , - 249 , - 1120 , - 311 , - 1662 , - 1333 , - 1244 , - 1395 , - 1786 , - 497 , - 1368 , - 559 , - 1910 , - 1581 , - 1492 , - 1643 , - 114 , - 745 , - 1616 , - 807 , - 238 , - 1829 , - 1740 , - 1891 , - 362 , - 993 , - 1864 , - 1055 , - 486 , - 157 , - 68 , - 219 , - 610 , - 1241 , - 192 , - 1303 , - 734 , - 405 , - 316 , - 467 , - 858 , - 1489 , - 440 , - 1551 , - 982 , - 653 , - 564 , - 715 , - 1106 , - 1737 , - 688 , - 1799 , - 1230 , - 901 , - 812 , - 963 , - 1354 , - 65 , - 936 , - 127 , - 1478 , - 1149 , - 1060 , - 1211 , - 1602 , - 313 , - 1184 , - 375 , - 1726 , - 1397 , - 1308 , - 1459 , - 1850 , - 561 , - 1432 , - 623 , - 54 , - 1645 , - 1556 , - 1707 , - 178 , - 809 , - 1680 , - 871 , - 302 , - 1893 , - 1804 , - 35 , - 426 , - 1057 , - 8 , - 1119 , - 550 , - 221 , - 132 , - 283 , - 674 , - 1305 , - 256 , - 1367 , - 798 , - 469 , - 380 , - 531 , - 922 , - 1553 , - 504 , - 1615 , - 1046 , - 717 , - 628 , - 779 , - 1170 , - 1801 , - 752 , - 1863 , - 1294 , - 965 , - 876 , - 1027 , - 1418 , - 129 , - 1000 , - 191 , - 1542 , - 1213 , - 1124 , - 1275 , - 1666 , - 377 , - 1248 , - 439 , - 1790 , - 1461 , - 1372 , - 1523 , - 1914 , - 625 , - 1496 , - 687 , - 118 , - 1709 , - 1620 , - 1771 , - 242 , - 873 , - 1744 , - 935 , - 366 , - 37 , - 1868 , - 99 , - 490 , - 1121 , - 72 , - 1183 , - 614 , - 285 , - 196 , - 347 , - 738 , - 1369 , - 320 , - 1431 , - 862 , - 533 , - 444 , - 595 , - 986 , - 1617 , - 568 , - 1679 , - 1110 , - 781 , - 692 , - 843 , - 1234 , - 1865 , - 816 , - 7 , - 1358 , - 1029 , - 940 , - 1091 , - 1482 , - 193 , - 1064 , - 255 , - 1606 , - 1277 , - 1188 , - 1339 , - 1730 , - 441 , - 1312 , - 503 , - 1854 , - 1525 , - 1436 , - 1587 , - 58 , - 689 , - 1560 , - 751 , - 182 , - 1773 , - 1684 , - 1835 , - 306 , - 937 , - 1808 , - 999 , - 430 , - 101 , - 12 , - 163 , - 554 , - 1185 , - 136 , - 1247 , - 678 , - 349 , - 260 , - 411 , - 802 , - 1433 , - 384 , - 1495 , - 926 , - 597 , - 508 , - 659 , - 1050 , - 1681 , - 632 , - 1743 , - 1174 , - 845 , - 756 , - 907 , - 1298 , - 9 , - 880 , - 71 , - 1422 , - 1093 , - 1004 , - 1155 , - 1546 , - 257 , - 1128 , - 319 , - 1670 , - 1341 , - 1252 , - 1403 , - 1794 , - 505 , - 1376 , - 567 , - 1918 , - 1589 , - 1500 , - 1651 , - 122 , - 753 , - 1624 , - 815 , - 246 , - 1837 , - 1748 , - 1899 , - 370 , - 1001 , - 1872 , - 1063 , - 494 , - 165 , - 76 , - 227 , - 618 , - 1249 , - 200 , - 1311 , - 742 , - 413 , - 324 , - 475 , - 866 , - 1497 , - 448 , - 1559 , - 990 , - 661 , - 572 , - 723 , - 1114 , - 1745 , - 696 , - 1807 , - 1238 , - 909 , - 820 , - 971 , - 1362 , - 73 , - 944 , - 135 , - 1486 , - 1157 , - 1068 , - 1219 , - 1610 , - 321 , - 1192 , - 383 , - 1734 , - 1405 , - 1316 , - 1467 , - 1858 , - 569 , - 1440 , - 631 , - 62 , - 1653 , - 1564 , - 1715 , - 186 , - 817 , - 1688 , - 879 , - 310 , - 1901 , - 1812 , - 43 , - 434 , - 1065 , - 16 , - 1127 , - 558 , - 229 , - 140 , - 291 , - 682 , - 1313 , - 264 , - 1375 , - 806 , - 477 , - 388 , - 539 , - 930 , - 1561 , - 512 , - 1623 , - 1054 , - 725 , - 636 , - 787 , - 1178 , - 1809 , - 760 , - 1871 , - 1302 , - 973 , - 884 , - 1035 , - 1426 , - 137 , - 1008 , - 199 , - 1550 , - 1221 , - 1132 , - 1283 , - 1674 , - 385 , - 1256 , - 447 , - 1798 , - 1469 , - 1380 , - 1531 , - 2 , - 633 , - 1504 , - 695 , - 126 , - 1717 , - 1628 , - 1779 , - 250 , - 881 , - 1752 , - 943 , - 374 , - 45 , - 1876 , - 107 , - 498 , - 1129 , - 80 , - 1191 , - 622 , - 293 , - 204 , - 355 , - 746 , - 1377 , - 328 , - 1439 , - 870 , - 541 , - 452 , - 603 , - 994 , - 1625 , - 576 , - 1687 , - 1118 , - 789 , - 700 , - 851 , - 1242 , - 1873 , - 824 , - 15 , - 1366 , - 1037 , - 948 , - 1099 , - 1490 , - 201 , - 1072 , - 263 , - 1614 , - 1285 , - 1196 , - 1347 , - 1738 , - 449 , - 1320 , - 511 , - 1862 , - 1533 , - 1444 , - 1595 , - 66 , - 697 , - 1568 , - 759 , - 190 , - 1781 , - 1692 , - 1843 , - 314 , - 945 , - 1816 , - 1007 , - 438 , - 109 , - 20 , - 171 , - 562 , - 1193 , - 144 , - 1255 , - 686 , - 357 , - 268 , - 419 , - 810 , - 1441 , - 392 , - 1503 , - 934 , - 605 , - 516 , - 667 , - 1058 , - 1689 , - 640 , - 1751 , - 1182 , - 853 , - 764 , - 915 , - 1306 , - 17 , - 888 , - 79 , - 1430 , - 1101 , - 1012 , - 1163 , - 1554 , - 265 , - 1136 , - 327 , - 1678 , - 1349 , - 1260 , - 1411 , - 1802 , - 513 , - 1384 , - 575 , - 6 , - 1597 , - 1508 , - 1659 , - 130 , - 761 , - 1632 , - 823 , - 254 , - 1845 , - 1756 , - 1907 , - 378 , - 1009 , - 1880 , - 1071 , - 502 , - 173 , - 84 , - 235 , - 626 , - 1257 , - 208 , - 1319 , - 750 , - 421 , - 332 , - 483 , - 874 , - 1505 , - 456 , - 1567 , - 998 , - 669 , - 580 , - 731 , - 1122 , - 1753 , - 704 , - 1815 , - 1246 , - 917 , - 828 , - 979 , - 1370 , - 81 , - 952 , - 143 , - 1494 , - 1165 , - 1076 , - 1227 , - 1618 , - 329 , - 1200 , - 391 , - 1742 , - 1413 , - 1324 , - 1475 , - 1866 , - 577 , - 1448 , - 639 , - 70 , - 1661 , - 1572 , - 1723 , - 194 , - 825 , - 1696 , - 887 , - 318 , - 1909 , - 1820 , - 51 , - 442 , - 1073 , - 24 , - 1135 , - 566 , - 237 , - 148 , - 299 , - 690 , - 1321 , - 272 , - 1383 , - 814 , - 485 , - 396 , - 547 , - 938 , - 1569 , - 520 , - 1631 , - 1062 , - 733 , - 644 , - 795 , - 1186 , - 1817 , - 768 , - 1879 , - 1310 , - 981 , - 892 , - 1043 , - 1434 , - 145 , - 1016 , - 207 , - 1558 , - 1229 , - 1140 , - 1291 , - 1682 , - 393 , - 1264 , - 455 , - 1806 , - 1477 , - 1388 , - 1539 , - 10 , - 641 , - 1512 , - 703 , - 134 , - 1725 , - 1636 , - 1787 , - 258 , - 889 , - 1760 , - 951 , - 382 , - 53 , - 1884 , - 115 , - 506 , - 1137 , - 88 , - 1199 , - 630 , - 301 , - 212 , - 363 , - 754 , - 1385 , - 336 , - 1447 , - 878 , - 549 , - 460 , - 611 , - 1002 , - 1633 , - 584 , - 1695 , - 1126 , - 797 , - 708 , - 859 , - 1250 , - 1881 , - 832 , - 23 , - 1374 , - 1045 , - 956 , - 1107 , - 1498 , - 209 , - 1080 , - 271 , - 1622 , - 1293 , - 1204 , - 1355 , - 1746 , - 457 , - 1328 , - 519 , - 1870 , - 1541 , - 1452 , - 1603 , - 74 , - 705 , - 1576 , - 767 , - 198 , - 1789 , - 1700 , - 1851 , - 322 , - 953 , - 1824 , - 1015 , - 446 , - 117 , - 28 , - 179 , - 570 , - 1201 , - 152 , - 1263 , - 694 , - 365 , - 276 , - 427 , - 818 , - 1449 , - 400 , - 1511 , - 942 , - 613 , - 524 , - 675 , - 1066 , - 1697 , - 648 , - 1759 , - 1190 , - 861 , - 772 , - 923 , - 1314 , - 25 , - 896 , - 87 , - 1438 , - 1109 , - 1020 , - 1171 , - 1562 , - 273 , - 1144 , - 335 , - 1686 , - 1357 , - 1268 , - 1419 , - 1810 , - 521 , - 1392 , - 583 , - 14 , - 1605 , - 1516 , - 1667 , - 138 , - 769 , - 1640 , - 831 , - 262 , - 1853 , - 1764 , - 1915 , - 386 , - 1017 , - 1888 , - 1079 , - 510 , - 181 , - 92 , - 243 , - 634 , - 1265 , - 216 , - 1327 , - 758 , - 429 , - 340 , - 491 , - 882 , - 1513 , - 464 , - 1575 , - 1006 , - 677 , - 588 , - 739 , - 1130 , - 1761 , - 712 , - 1823 , - 1254 , - 925 , - 836 , - 987 , - 1378 , - 89 , - 960 , - 151 , - 1502 , - 1173 , - 1084 , - 1235 , - 1626 , - 337 , - 1208 , - 399 , - 1750 , - 1421 , - 1332 , - 1483 , - 1874 , - 585 , - 1456 , - 647 , - 78 , - 1669 , - 1580 , - 1731 , - 202 , - 833 , - 1704 , - 895 , - 326 , - 1917 , - 1828 , - 59 , - 450 , - 1081 , - 32 , - 1143 , - 574 , - 245 , - 156 , - 307 , - 698 , - 1329 , - 280 , - 1391 , - 822 , - 493 , - 404 , - 555 , - 946 , - 1577 , - 528 , - 1639 , - 1070 , - 741 , - 652 , - 803 , - 1194 , - 1825 , - 776 , - 1887 , - 1318 , - 989 , - 900 , - 1051 , - 1442 , - 153 , - 1024 , - 215 , - 1566 , - 1237 , - 1148 , - 1299 , - 1690 , - 401 , - 1272 , - 463 , - 1814 , - 1485 , - 1396 , - 1547 , - 18 , - 649 , - 1520 , - 711 , - 142 , - 1733 , - 1644 , - 1795 , - 266 , - 897 , - 1768 , - 959 , - 390 , - 61 , - 1892 , - 123 , - 514 , - 1145 , - 96 , - 1207 , - 638 , - 309 , - 220 , - 371 , - 762 , - 1393 , - 344 , - 1455 , - 886 , - 557 , - 468 , - 619 , - 1010 , - 1641 , - 592 , - 1703 , - 1134 , - 805 , - 716 , - 867 , - 1258 , - 1889 , - 840 , - 31 , - 1382 , - 1053 , - 964 , - 1115 , - 1506 , - 217 , - 1088 , - 279 , - 1630 , - 1301 , - 1212 , - 1363 , - 1754 , - 465 , - 1336 , - 527 , - 1878 , - 1549 , - 1460 , - 1611 , - 82 , - 713 , - 1584 , - 775 , - 206 , - 1797 , - 1708 , - 1859 , - 330 , - 961 , - 1832 , - 1023 , - 454 , - 125 , - 36 , - 187 , - 578 , - 1209 , - 160 , - 1271 , - 702 , - 373 , - 284 , - 435 , - 826 , - 1457 , - 408 , - 1519 , - 950 , - 621 , - 532 , - 683 , - 1074 , - 1705 , - 656 , - 1767 , - 1198 , - 869 , - 780 , - 931 , - 1322 , - 33 , - 904 , - 95 , - 1446 , - 1117 , - 1028 , - 1179 , - 1570 , - 281 , - 1152 , - 343 , - 1694 , - 1365 , - 1276 , - 1427 , - 1818 , - 529 , - 1400 , - 591 , - 22 , - 1613 , - 1524 , - 1675 , - 146 , - 777 , - 1648 , - 839 , - 270 , - 1861 , - 1772 , - 3 , - 394 , - 1025 , - 1896 , - 1087 , - 518 , - 189 , - 100 , - 251 , - 642 , - 1273 , - 224 , - 1335 , - 766 , - 437 , - 348 , - 499 , - 890 , - 1521 , - 472 , - 1583 , - 1014 , - 685 , - 596 , - 747 , - 1138 , - 1769 , - 720 , - 1831 , - 1262 , - 933 , - 844 , - 995 , - 1386 , - 97 , - 968 , - 159 , - 1510 , - 1181 , - 1092 , - 1243 , - 1634 , - 345 , - 1216 , - 407 , - 1758 , - 1429 , - 1340 , - 1491 , - 1882 , - 593 , - 1464 , - 655 , - 86 , - 1677 , - 1588 , - 1739 , - 210 , - 841 , - 1712 , - 903 , - 334 , - 5 , - 1836 , - 67 , - 458 , - 1089 , - 40 , - 1151 , - 582 , - 253 , - 164 , - 315 , - 706 , - 1337 , - 288 , - 1399 , - 830 , - 501 , - 412 , - 563 , - 954 , - 1585 , - 536 , - 1647 , - 1078 , - 749 , - 660 , - 811 , - 1202 , - 1833 , - 784 , - 1895 , - 1326 , - 997 , - 908 , - 1059 , - 1450 , - 161 , - 1032 , - 223 , - 1574 , - 1245 , - 1156 , - 1307 , - 1698 , - 409 , - 1280 , - 471 , - 1822 , - 1493 , - 1404 , - 1555 , - 26 , - 657 , - 1528 , - 719 , - 150 , - 1741 , - 1652 , - 1803 , - 274 , - 905 , - 1776 , - 967 , - 398 , - 69 , - 1900 , - 131 , - 522 , - 1153 , - 104 , - 1215 , - 646 , - 317 , - 228 , - 379 , - 770 , - 1401 , - 352 , - 1463 , - 894 , - 565 , - 476 , - 627 , - 1018 , - 1649 , - 600 , - 1711 , - 1142 , - 813 , - 724 , - 875 , - 1266 , - 1897 , - 848 , - 39 , - 1390 , - 1061 , - 972 , - 1123 , - 1514 , - 225 , - 1096 , - 287 , - 1638 , - 1309 , - 1220 , - 1371 , - 1762 , - 473 , - 1344 , - 535 , - 1886 , - 1557 , - 1468 , - 1619 , - 90 , - 721 , - 1592 , - 783 , - 214 , - 1805 , - 1716 , - 1867 , - 338 , - 969 , - 1840 , - 1031 , - 462 , - 133 , - 44 , - 195 , - 586 , - 1217 , - 168 , - 1279 , - 710 , - 381 , - 292 , - 443 , - 834 , - 1465 , - 416 , - 1527 , - 958 , - 629 , - 540 , - 691 , - 1082 , - 1713 , - 664 , - 1775 , - 1206 , - 877 , - 788 , - 939 , - 1330 , - 41 , - 912 , - 103 , - 1454 , - 1125 , - 1036 , - 1187 , - 1578 , - 289 , - 1160 , - 351 , - 1702 , - 1373 , - 1284 , - 1435 , - 1826 , - 537 , - 1408 , - 599 , - 30 , - 1621 , - 1532 , - 1683 , - 154 , - 785 , - 1656 , - 847 , - 278 , - 1869 , - 1780 , - 11 , - 402 , - 1033 , - 1904 , - 1095 , - 526 , - 197 , - 108 , - 259 , - 650 , - 1281 , - 232 , - 1343 , - 774 , - 445 , - 356 , - 507 , - 898 , - 1529 , - 480 , - 1591 , - 1022 , - 693 , - 604 , - 755 , - 1146 , - 1777 , - 728 , - 1839 , - 1270 , - 941 , - 852 , - 1003 , - 1394 , - 105 , - 976 , - 167 , - 1518 , - 1189 , - 1100 , - 1251 , - 1642 , - 353 , - 1224 , - 415 , - 1766 , - 1437 , - 1348 , - 1499 , - 1890 , - 601 , - 1472 , - 663 , - 94 , - 1685 , - 1596 , - 1747 , - 218 , - 849 , - 1720 , - 911 , - 342 , - 13 , - 1844 , - 75 , - 466 , - 1097 , - 48 , - 1159 , - 590 , - 261 , - 172 , - 323 , - 714 , - 1345 , - 296 , - 1407 , - 838 , - 509 , - 420 , - 571 , - 962 , - 1593 , - 544 , - 1655 , - 1086 , - 757 , - 668 , - 819 , - 1210 , - 1841 , - 792 , - 1903 , - 1334 , - 1005 , - 916 , - 1067 , - 1458 , - 169 , - 1040 , - 231 , - 1582 , - 1253 , - 1164 , - 1315 , - 1706 , - 417 , - 1288 , - 479 , - 1830 , - 1501 , - 1412 , - 1563 , - 34 , - 665 , - 1536 , - 727 , - 158 , - 1749 , - 1660 , - 1811 , - 282 , - 913 , - 1784 , - 975 , - 406 , - 77 , - 1908 , - 139 , - 530 , - 1161 , - 112 , - 1223 , - 654 , - 325 , - 236 , - 387 , - 778 , - 1409 , - 360 , - 1471 , - 902 , - 573 , - 484 , - 635 , - 1026 , - 1657 , - 608 , - 1719 , - 1150 , - 821 , - 732 , - 883 , - 1274 , - 1905 , - 856 , - 47 , - 1398 , - 1069 , - 980 , - 1131 , - 1522 , - 233 , - 1104 , - 295 , - 1646 , - 1317 , - 1228 , - 1379 , - 1770 , - 481 , - 1352 , - 543 , - 1894 , - 1565 , - 1476 , - 1627 , - 98 , - 729 , - 1600 , - 791 , - 222 , - 1813 , - 1724 , - 1875 , - 346 , - 977 , - 1848 , - 1039 , - 470 , - 141 , - 52 , - 203 , - 594 , - 1225 , - 176 , - 1287 , - 718 , - 389 , - 300 , - 451 , - 842 , - 1473 , - 424 , - 1535 , - 966 , - 637 , - 548 , - 699 , - 1090 , - 1721 , - 672 , - 1783 , - 1214 , - 885 , - 796 , - 947 , - 1338 , - 49 , - 920 , - 111 , - 1462 , - 1133 , - 1044 , - 1195 , - 1586 , - 297 , - 1168 , - 359 , - 1710 , - 1381 , - 1292 , - 1443 , - 1834 , - 545 , - 1416 , - 607 , - 38 , - 1629 , - 1540 , - 1691 , - 162 , - 793 , - 1664 , - 855 , - 286 , - 1877 , - 1788 , - 19 , - 410 , - 1041 , - 1912 , - 1103 , - 534 , - 205 , - 116 , - 267 , - 658 , - 1289 , - 240 , - 1351 , - 782 , - 453 , - 364 , - 515 , - 906 , - 1537 , - 488 , - 1599 , - 1030 , - 701 , - 612 , - 763 , - 1154 , - 1785 , - 736 , - 1847 , - 1278 , - 949 , - 860 , - 1011 , - 1402 , - 113 , - 984 , - 175 , - 1526 , - 1197 , - 1108 , - 1259 , - 1650 , - 361 , - 1232 , - 423 , - 1774 , - 1445 , - 1356 , - 1507 , - 1898 , - 609 , - 1480 , - 671 , - 102 , - 1693 , - 1604 , - 1755 , - 226 , - 857 , - 1728 , - 919 , - 350 , - 21 , - 1852 , - 83 , - 474 , - 1105 , - 56 , - 1167 , - 598 , - 269 , - 180 , - 331 , - 722 , - 1353 , - 304 , - 1415 , - 846 , - 517 , - 428 , - 579 , - 970 , - 1601 , - 552 , - 1663 , - 1094 , - 765 , - 676 , - 827 , - 1218 , - 1849 , - 800 , - 1911 , - 1342 , - 1013 , - 924 , - 1075 , - 1466 , - 177 , - 1048 , - 239 , - 1590 , - 1261 , - 1172 , - 1323 , - 1714 , - 425 , - 1296 , - 487 , - 1838 , - 1509 , - 1420 , - 1571 , - 42 , - 673 , - 1544 , - 735 , - 166 , - 1757 , - 1668 , - 1819 , - 290 , - 921 , - 1792 , - 983 , - 414 , - 85 , - 1916 , - 147 , - 538 , - 1169 , - 120 , - 1231 , - 662 , - 333 , - 244 , - 395 , - 786 , - 1417 , - 368 , - 1479 , - 910 , - 581 , - 492 , - 643 , - 1034 , - 1665 , - 616 , - 1727 , - 1158 , - 829 , - 740 , - 891 , - 1282 , - 1913 , - 864 , - 55 , - 1406 , - 1077 , - 988 , - 1139 , - 1530 , - 241 , - 1112 , - 303 , - 1654 , - 1325 , - 1236 , - 1387 , - 1778 , - 489 , - 1360 , - 551 , - 1902 , - 1573 , - 1484 , - 1635 , - 106 , - 737 , - 1608 , - 799 , - 230 , - 1821 , - 1732 , - 1883 , - 354 , - 985 , - 1856 , - 1047 , - 478 , - 149 , - 60 , - 211 , - 602 , - 1233 , - 184 , - 1295 , - 726 , - 397 , - 308 , - 459 , - 850 , - 1481 , - 432 , - 1543 , - 974 , - 645 , - 556 , - 707 , - 1098 , - 1729 , - 680 , - 1791 , - 1222 , - 893 , - 804 , - 955 , - 1346 , - 57 , - 928 , - 119 , - 1470 , - 1141 , - 1052 , - 1203 , - 1594 , - 305 , - 1176 , - 367 , - 1718 , - 1389 , - 1300 , - 1451 , - 1842 , - 553 , - 1424 , - 615 , - 46 , - 1637 , - 1548 , - 1699 , - 170 , - 801 , - 1672 , - 863 , - 294 , - 1885 , - 1796 , - 27 , - 418 , - 1049 , - 0 , - 701 , - 1646 , - 1859 , - 364 , - 89 , - 58 , - 1247 , - 728 , - 1429 , - 422 , - 635 , - 1092 , - 817 , - 786 , - 23 , - 1456 , - 205 , - 1150 , - 1363 , - 1820 , - 1545 , - 1514 , - 751 , - 232 , - 933 , - 1878 , - 139 , - 596 , - 321 , - 290 , - 1479 , - 960 , - 1661 , - 654 , - 867 , - 1324 , - 1049 , - 1018 , - 255 , - 1688 , - 437 , - 1382 , - 1595 , - 100 , - 1777 , - 1746 , - 983 , - 464 , - 1165 , - 158 , - 371 , - 828 , - 553 , - 522 , - 1711 , - 1192 , - 1893 , - 886 , - 1099 , - 1556 , - 1281 , - 1250 , - 487 , - 1920 , - 669 , - 1614 , - 1827 , - 332 , - 57 , - 26 , - 1215 , - 696 , - 1397 , - 390 , - 603 , - 1060 , - 785 , - 754 , - 1943 , - 1424 , - 173 , - 1118 , - 1331 , - 1788 , - 1513 , - 1482 , - 719 , - 200 , - 901 , - 1846 , - 107 , - 564 , - 289 , - 258 , - 1447 , - 928 , - 1629 , - 622 , - 835 , - 1292 , - 1017 , - 986 , - 223 , - 1656 , - 405 , - 1350 , - 1563 , - 68 , - 1745 , - 1714 , - 951 , - 432 , - 1133 , - 126 , - 339 , - 796 , - 521 , - 490 , - 1679 , - 1160 , - 1861 , - 854 , - 1067 , - 1524 , - 1249 , - 1218 , - 455 , - 1888 , - 637 , - 1582 , - 1795 , - 300 , - 25 , - 1946 , - 1183 , - 664 , - 1365 , - 358 , - 571 , - 1028 , - 753 , - 722 , - 1911 , - 1392 , - 141 , - 1086 , - 1299 , - 1756 , - 1481 , - 1450 , - 687 , - 168 , - 869 , - 1814 , - 75 , - 532 , - 257 , - 226 , - 1415 , - 896 , - 1597 , - 590 , - 803 , - 1260 , - 985 , - 954 , - 191 , - 1624 , - 373 , - 1318 , - 1531 , - 36 , - 1713 , - 1682 , - 919 , - 400 , - 1101 , - 94 , - 307 , - 764 , - 489 , - 458 , - 1647 , - 1128 , - 1829 , - 822 , - 1035 , - 1492 , - 1217 , - 1186 , - 423 , - 1856 , - 605 , - 1550 , - 1763 , - 268 , - 1945 , - 1914 , - 1151 , - 632 , - 1333 , - 326 , - 539 , - 996 , - 721 , - 690 , - 1879 , - 1360 , - 109 , - 1054 , - 1267 , - 1724 , - 1449 , - 1418 , - 655 , - 136 , - 837 , - 1782 , - 43 , - 500 , - 225 , - 194 , - 1383 , - 864 , - 1565 , - 558 , - 771 , - 1228 , - 953 , - 922 , - 159 , - 1592 , - 341 , - 1286 , - 1499 , - 4 , - 1681 , - 1650 , - 887 , - 368 , - 1069 , - 62 , - 275 , - 732 , - 457 , - 426 , - 1615 , - 1096 , - 1797 , - 790 , - 1003 , - 1460 , - 1185 , - 1154 , - 391 , - 1824 , - 573 , - 1518 , - 1731 , - 236 , - 1913 , - 1882 , - 1119 , - 600 , - 1301 , - 294 , - 507 , - 964 , - 689 , - 658 , - 1847 , - 1328 , - 77 , - 1022 , - 1235 , - 1692 , - 1417 , - 1386 , - 623 , - 104 , - 805 , - 1750 , - 11 , - 468 , - 193 , - 162 , - 1351 , - 832 , - 1533 , - 526 , - 739 , - 1196 , - 921 , - 890 , - 127 , - 1560 , - 309 , - 1254 , - 1467 , - 1924 , - 1649 , - 1618 , - 855 , - 336 , - 1037 , - 30 , - 243 , - 700 , - 425 , - 394 , - 1583 , - 1064 , - 1765 , - 758 , - 971 , - 1428 , - 1153 , - 1122 , - 359 , - 1792 , - 541 , - 1486 , - 1699 , - 204 , - 1881 , - 1850 , - 1087 , - 568 , - 1269 , - 262 , - 475 , - 932 , - 657 , - 626 , - 1815 , - 1296 , - 45 , - 990 , - 1203 , - 1660 , - 1385 , - 1354 , - 591 , - 72 , - 773 , - 1718 , - 1931 , - 436 , - 161 , - 130 , - 1319 , - 800 , - 1501 , - 494 , - 707 , - 1164 , - 889 , - 858 , - 95 , - 1528 , - 277 , - 1222 , - 1435 , - 1892 , - 1617 , - 1586 , - 823 , - 304 , - 1005 , - 1950 , - 211 , - 668 , - 393 , - 362 , - 1551 , - 1032 , - 1733 , - 726 , - 939 , - 1396 , - 1121 , - 1090 , - 327 , - 1760 , - 509 , - 1454 , - 1667 , - 172 , - 1849 , - 1818 , - 1055 , - 536 , - 1237 , - 230 , - 443 , - 900 , - 625 , - 594 , - 1783 , - 1264 , - 13 , - 958 , - 1171 , - 1628 , - 1353 , - 1322 , - 559 , - 40 , - 741 , - 1686 , - 1899 , - 404 , - 129 , - 98 , - 1287 , - 768 , - 1469 , - 462 , - 675 , - 1132 , - 857 , - 826 , - 63 , - 1496 , - 245 , - 1190 , - 1403 , - 1860 , - 1585 , - 1554 , - 791 , - 272 , - 973 , - 1918 , - 179 , - 636 , - 361 , - 330 , - 1519 , - 1000 , - 1701 , - 694 , - 907 , - 1364 , - 1089 , - 1058 , - 295 , - 1728 , - 477 , - 1422 , - 1635 , - 140 , - 1817 , - 1786 , - 1023 , - 504 , - 1205 , - 198 , - 411 , - 868 , - 593 , - 562 , - 1751 , - 1232 , - 1933 , - 926 , - 1139 , - 1596 , - 1321 , - 1290 , - 527 , - 8 , - 709 , - 1654 , - 1867 , - 372 , - 97 , - 66 , - 1255 , - 736 , - 1437 , - 430 , - 643 , - 1100 , - 825 , - 794 , - 31 , - 1464 , - 213 , - 1158 , - 1371 , - 1828 , - 1553 , - 1522 , - 759 , - 240 , - 941 , - 1886 , - 147 , - 604 , - 329 , - 298 , - 1487 , - 968 , - 1669 , - 662 , - 875 , - 1332 , - 1057 , - 1026 , - 263 , - 1696 , - 445 , - 1390 , - 1603 , - 108 , - 1785 , - 1754 , - 991 , - 472 , - 1173 , - 166 , - 379 , - 836 , - 561 , - 530 , - 1719 , - 1200 , - 1901 , - 894 , - 1107 , - 1564 , - 1289 , - 1258 , - 495 , - 1928 , - 677 , - 1622 , - 1835 , - 340 , - 65 , - 34 , - 1223 , - 704 , - 1405 , - 398 , - 611 , - 1068 , - 793 , - 762 , - 1951 , - 1432 , - 181 , - 1126 , - 1339 , - 1796 , - 1521 , - 1490 , - 727 , - 208 , - 909 , - 1854 , - 115 , - 572 , - 297 , - 266 , - 1455 , - 936 , - 1637 , - 630 , - 843 , - 1300 , - 1025 , - 994 , - 231 , - 1664 , - 413 , - 1358 , - 1571 , - 76 , - 1753 , - 1722 , - 959 , - 440 , - 1141 , - 134 , - 347 , - 804 , - 529 , - 498 , - 1687 , - 1168 , - 1869 , - 862 , - 1075 , - 1532 , - 1257 , - 1226 , - 463 , - 1896 , - 645 , - 1590 , - 1803 , - 308 , - 33 , - 2 , - 1191 , - 672 , - 1373 , - 366 , - 579 , - 1036 , - 761 , - 730 , - 1919 , - 1400 , - 149 , - 1094 , - 1307 , - 1764 , - 1489 , - 1458 , - 695 , - 176 , - 877 , - 1822 , - 83 , - 540 , - 265 , - 234 , - 1423 , - 904 , - 1605 , - 598 , - 811 , - 1268 , - 993 , - 962 , - 199 , - 1632 , - 381 , - 1326 , - 1539 , - 44 , - 1721 , - 1690 , - 927 , - 408 , - 1109 , - 102 , - 315 , - 772 , - 497 , - 466 , - 1655 , - 1136 , - 1837 , - 830 , - 1043 , - 1500 , - 1225 , - 1194 , - 431 , - 1864 , - 613 , - 1558 , - 1771 , - 276 , - 1 , - 1922 , - 1159 , - 640 , - 1341 , - 334 , - 547 , - 1004 , - 729 , - 698 , - 1887 , - 1368 , - 117 , - 1062 , - 1275 , - 1732 , - 1457 , - 1426 , - 663 , - 144 , - 845 , - 1790 , - 51 , - 508 , - 233 , - 202 , - 1391 , - 872 , - 1573 , - 566 , - 779 , - 1236 , - 961 , - 930 , - 167 , - 1600 , - 349 , - 1294 , - 1507 , - 12 , - 1689 , - 1658 , - 895 , - 376 , - 1077 , - 70 , - 283 , - 740 , - 465 , - 434 , - 1623 , - 1104 , - 1805 , - 798 , - 1011 , - 1468 , - 1193 , - 1162 , - 399 , - 1832 , - 581 , - 1526 , - 1739 , - 244 , - 1921 , - 1890 , - 1127 , - 608 , - 1309 , - 302 , - 515 , - 972 , - 697 , - 666 , - 1855 , - 1336 , - 85 , - 1030 , - 1243 , - 1700 , - 1425 , - 1394 , - 631 , - 112 , - 813 , - 1758 , - 19 , - 476 , - 201 , - 170 , - 1359 , - 840 , - 1541 , - 534 , - 747 , - 1204 , - 929 , - 898 , - 135 , - 1568 , - 317 , - 1262 , - 1475 , - 1932 , - 1657 , - 1626 , - 863 , - 344 , - 1045 , - 38 , - 251 , - 708 , - 433 , - 402 , - 1591 , - 1072 , - 1773 , - 766 , - 979 , - 1436 , - 1161 , - 1130 , - 367 , - 1800 , - 549 , - 1494 , - 1707 , - 212 , - 1889 , - 1858 , - 1095 , - 576 , - 1277 , - 270 , - 483 , - 940 , - 665 , - 634 , - 1823 , - 1304 , - 53 , - 998 , - 1211 , - 1668 , - 1393 , - 1362 , - 599 , - 80 , - 781 , - 1726 , - 1939 , - 444 , - 169 , - 138 , - 1327 , - 808 , - 1509 , - 502 , - 715 , - 1172 , - 897 , - 866 , - 103 , - 1536 , - 285 , - 1230 , - 1443 , - 1900 , - 1625 , - 1594 , - 831 , - 312 , - 1013 , - 6 , - 219 , - 676 , - 401 , - 370 , - 1559 , - 1040 , - 1741 , - 734 , - 947 , - 1404 , - 1129 , - 1098 , - 335 , - 1768 , - 517 , - 1462 , - 1675 , - 180 , - 1857 , - 1826 , - 1063 , - 544 , - 1245 , - 238 , - 451 , - 908 , - 633 , - 602 , - 1791 , - 1272 , - 21 , - 966 , - 1179 , - 1636 , - 1361 , - 1330 , - 567 , - 48 , - 749 , - 1694 , - 1907 , - 412 , - 137 , - 106 , - 1295 , - 776 , - 1477 , - 470 , - 683 , - 1140 , - 865 , - 834 , - 71 , - 1504 , - 253 , - 1198 , - 1411 , - 1868 , - 1593 , - 1562 , - 799 , - 280 , - 981 , - 1926 , - 187 , - 644 , - 369 , - 338 , - 1527 , - 1008 , - 1709 , - 702 , - 915 , - 1372 , - 1097 , - 1066 , - 303 , - 1736 , - 485 , - 1430 , - 1643 , - 148 , - 1825 , - 1794 , - 1031 , - 512 , - 1213 , - 206 , - 419 , - 876 , - 601 , - 570 , - 1759 , - 1240 , - 1941 , - 934 , - 1147 , - 1604 , - 1329 , - 1298 , - 535 , - 16 , - 717 , - 1662 , - 1875 , - 380 , - 105 , - 74 , - 1263 , - 744 , - 1445 , - 438 , - 651 , - 1108 , - 833 , - 802 , - 39 , - 1472 , - 221 , - 1166 , - 1379 , - 1836 , - 1561 , - 1530 , - 767 , - 248 , - 949 , - 1894 , - 155 , - 612 , - 337 , - 306 , - 1495 , - 976 , - 1677 , - 670 , - 883 , - 1340 , - 1065 , - 1034 , - 271 , - 1704 , - 453 , - 1398 , - 1611 , - 116 , - 1793 , - 1762 , - 999 , - 480 , - 1181 , - 174 , - 387 , - 844 , - 569 , - 538 , - 1727 , - 1208 , - 1909 , - 902 , - 1115 , - 1572 , - 1297 , - 1266 , - 503 , - 1936 , - 685 , - 1630 , - 1843 , - 348 , - 73 , - 42 , - 1231 , - 712 , - 1413 , - 406 , - 619 , - 1076 , - 801 , - 770 , - 7 , - 1440 , - 189 , - 1134 , - 1347 , - 1804 , - 1529 , - 1498 , - 735 , - 216 , - 917 , - 1862 , - 123 , - 580 , - 305 , - 274 , - 1463 , - 944 , - 1645 , - 638 , - 851 , - 1308 , - 1033 , - 1002 , - 239 , - 1672 , - 421 , - 1366 , - 1579 , - 84 , - 1761 , - 1730 , - 967 , - 448 , - 1149 , - 142 , - 355 , - 812 , - 537 , - 506 , - 1695 , - 1176 , - 1877 , - 870 , - 1083 , - 1540 , - 1265 , - 1234 , - 471 , - 1904 , - 653 , - 1598 , - 1811 , - 316 , - 41 , - 10 , - 1199 , - 680 , - 1381 , - 374 , - 587 , - 1044 , - 769 , - 738 , - 1927 , - 1408 , - 157 , - 1102 , - 1315 , - 1772 , - 1497 , - 1466 , - 703 , - 184 , - 885 , - 1830 , - 91 , - 548 , - 273 , - 242 , - 1431 , - 912 , - 1613 , - 606 , - 819 , - 1276 , - 1001 , - 970 , - 207 , - 1640 , - 389 , - 1334 , - 1547 , - 52 , - 1729 , - 1698 , - 935 , - 416 , - 1117 , - 110 , - 323 , - 780 , - 505 , - 474 , - 1663 , - 1144 , - 1845 , - 838 , - 1051 , - 1508 , - 1233 , - 1202 , - 439 , - 1872 , - 621 , - 1566 , - 1779 , - 284 , - 9 , - 1930 , - 1167 , - 648 , - 1349 , - 342 , - 555 , - 1012 , - 737 , - 706 , - 1895 , - 1376 , - 125 , - 1070 , - 1283 , - 1740 , - 1465 , - 1434 , - 671 , - 152 , - 853 , - 1798 , - 59 , - 516 , - 241 , - 210 , - 1399 , - 880 , - 1581 , - 574 , - 787 , - 1244 , - 969 , - 938 , - 175 , - 1608 , - 357 , - 1302 , - 1515 , - 20 , - 1697 , - 1666 , - 903 , - 384 , - 1085 , - 78 , - 291 , - 748 , - 473 , - 442 , - 1631 , - 1112 , - 1813 , - 806 , - 1019 , - 1476 , - 1201 , - 1170 , - 407 , - 1840 , - 589 , - 1534 , - 1747 , - 252 , - 1929 , - 1898 , - 1135 , - 616 , - 1317 , - 310 , - 523 , - 980 , - 705 , - 674 , - 1863 , - 1344 , - 93 , - 1038 , - 1251 , - 1708 , - 1433 , - 1402 , - 639 , - 120 , - 821 , - 1766 , - 27 , - 484 , - 209 , - 178 , - 1367 , - 848 , - 1549 , - 542 , - 755 , - 1212 , - 937 , - 906 , - 143 , - 1576 , - 325 , - 1270 , - 1483 , - 1940 , - 1665 , - 1634 , - 871 , - 352 , - 1053 , - 46 , - 259 , - 716 , - 441 , - 410 , - 1599 , - 1080 , - 1781 , - 774 , - 987 , - 1444 , - 1169 , - 1138 , - 375 , - 1808 , - 557 , - 1502 , - 1715 , - 220 , - 1897 , - 1866 , - 1103 , - 584 , - 1285 , - 278 , - 491 , - 948 , - 673 , - 642 , - 1831 , - 1312 , - 61 , - 1006 , - 1219 , - 1676 , - 1401 , - 1370 , - 607 , - 88 , - 789 , - 1734 , - 1947 , - 452 , - 177 , - 146 , - 1335 , - 816 , - 1517 , - 510 , - 723 , - 1180 , - 905 , - 874 , - 111 , - 1544 , - 293 , - 1238 , - 1451 , - 1908 , - 1633 , - 1602 , - 839 , - 320 , - 1021 , - 14 , - 227 , - 684 , - 409 , - 378 , - 1567 , - 1048 , - 1749 , - 742 , - 955 , - 1412 , - 1137 , - 1106 , - 343 , - 1776 , - 525 , - 1470 , - 1683 , - 188 , - 1865 , - 1834 , - 1071 , - 552 , - 1253 , - 246 , - 459 , - 916 , - 641 , - 610 , - 1799 , - 1280 , - 29 , - 974 , - 1187 , - 1644 , - 1369 , - 1338 , - 575 , - 56 , - 757 , - 1702 , - 1915 , - 420 , - 145 , - 114 , - 1303 , - 784 , - 1485 , - 478 , - 691 , - 1148 , - 873 , - 842 , - 79 , - 1512 , - 261 , - 1206 , - 1419 , - 1876 , - 1601 , - 1570 , - 807 , - 288 , - 989 , - 1934 , - 195 , - 652 , - 377 , - 346 , - 1535 , - 1016 , - 1717 , - 710 , - 923 , - 1380 , - 1105 , - 1074 , - 311 , - 1744 , - 493 , - 1438 , - 1651 , - 156 , - 1833 , - 1802 , - 1039 , - 520 , - 1221 , - 214 , - 427 , - 884 , - 609 , - 578 , - 1767 , - 1248 , - 1949 , - 942 , - 1155 , - 1612 , - 1337 , - 1306 , - 543 , - 24 , - 725 , - 1670 , - 1883 , - 388 , - 113 , - 82 , - 1271 , - 752 , - 1453 , - 446 , - 659 , - 1116 , - 841 , - 810 , - 47 , - 1480 , - 229 , - 1174 , - 1387 , - 1844 , - 1569 , - 1538 , - 775 , - 256 , - 957 , - 1902 , - 163 , - 620 , - 345 , - 314 , - 1503 , - 984 , - 1685 , - 678 , - 891 , - 1348 , - 1073 , - 1042 , - 279 , - 1712 , - 461 , - 1406 , - 1619 , - 124 , - 1801 , - 1770 , - 1007 , - 488 , - 1189 , - 182 , - 395 , - 852 , - 577 , - 546 , - 1735 , - 1216 , - 1917 , - 910 , - 1123 , - 1580 , - 1305 , - 1274 , - 511 , - 1944 , - 693 , - 1638 , - 1851 , - 356 , - 81 , - 50 , - 1239 , - 720 , - 1421 , - 414 , - 627 , - 1084 , - 809 , - 778 , - 15 , - 1448 , - 197 , - 1142 , - 1355 , - 1812 , - 1537 , - 1506 , - 743 , - 224 , - 925 , - 1870 , - 131 , - 588 , - 313 , - 282 , - 1471 , - 952 , - 1653 , - 646 , - 859 , - 1316 , - 1041 , - 1010 , - 247 , - 1680 , - 429 , - 1374 , - 1587 , - 92 , - 1769 , - 1738 , - 975 , - 456 , - 1157 , - 150 , - 363 , - 820 , - 545 , - 514 , - 1703 , - 1184 , - 1885 , - 878 , - 1091 , - 1548 , - 1273 , - 1242 , - 479 , - 1912 , - 661 , - 1606 , - 1819 , - 324 , - 49 , - 18 , - 1207 , - 688 , - 1389 , - 382 , - 595 , - 1052 , - 777 , - 746 , - 1935 , - 1416 , - 165 , - 1110 , - 1323 , - 1780 , - 1505 , - 1474 , - 711 , - 192 , - 893 , - 1838 , - 99 , - 556 , - 281 , - 250 , - 1439 , - 920 , - 1621 , - 614 , - 827 , - 1284 , - 1009 , - 978 , - 215 , - 1648 , - 397 , - 1342 , - 1555 , - 60 , - 1737 , - 1706 , - 943 , - 424 , - 1125 , - 118 , - 331 , - 788 , - 513 , - 482 , - 1671 , - 1152 , - 1853 , - 846 , - 1059 , - 1516 , - 1241 , - 1210 , - 447 , - 1880 , - 629 , - 1574 , - 1787 , - 292 , - 17 , - 1938 , - 1175 , - 656 , - 1357 , - 350 , - 563 , - 1020 , - 745 , - 714 , - 1903 , - 1384 , - 133 , - 1078 , - 1291 , - 1748 , - 1473 , - 1442 , - 679 , - 160 , - 861 , - 1806 , - 67 , - 524 , - 249 , - 218 , - 1407 , - 888 , - 1589 , - 582 , - 795 , - 1252 , - 977 , - 946 , - 183 , - 1616 , - 365 , - 1310 , - 1523 , - 28 , - 1705 , - 1674 , - 911 , - 392 , - 1093 , - 86 , - 299 , - 756 , - 481 , - 450 , - 1639 , - 1120 , - 1821 , - 814 , - 1027 , - 1484 , - 1209 , - 1178 , - 415 , - 1848 , - 597 , - 1542 , - 1755 , - 260 , - 1937 , - 1906 , - 1143 , - 624 , - 1325 , - 318 , - 531 , - 988 , - 713 , - 682 , - 1871 , - 1352 , - 101 , - 1046 , - 1259 , - 1716 , - 1441 , - 1410 , - 647 , - 128 , - 829 , - 1774 , - 35 , - 492 , - 217 , - 186 , - 1375 , - 856 , - 1557 , - 550 , - 763 , - 1220 , - 945 , - 914 , - 151 , - 1584 , - 333 , - 1278 , - 1491 , - 1948 , - 1673 , - 1642 , - 879 , - 360 , - 1061 , - 54 , - 267 , - 724 , - 449 , - 418 , - 1607 , - 1088 , - 1789 , - 782 , - 995 , - 1452 , - 1177 , - 1146 , - 383 , - 1816 , - 565 , - 1510 , - 1723 , - 228 , - 1905 , - 1874 , - 1111 , - 592 , - 1293 , - 286 , - 499 , - 956 , - 681 , - 650 , - 1839 , - 1320 , - 69 , - 1014 , - 1227 , - 1684 , - 1409 , - 1378 , - 615 , - 96 , - 797 , - 1742 , - 3 , - 460 , - 185 , - 154 , - 1343 , - 824 , - 1525 , - 518 , - 731 , - 1188 , - 913 , - 882 , - 119 , - 1552 , - 301 , - 1246 , - 1459 , - 1916 , - 1641 , - 1610 , - 847 , - 328 , - 1029 , - 22 , - 235 , - 692 , - 417 , - 386 , - 1575 , - 1056 , - 1757 , - 750 , - 963 , - 1420 , - 1145 , - 1114 , - 351 , - 1784 , - 533 , - 1478 , - 1691 , - 196 , - 1873 , - 1842 , - 1079 , - 560 , - 1261 , - 254 , - 467 , - 924 , - 649 , - 618 , - 1807 , - 1288 , - 37 , - 982 , - 1195 , - 1652 , - 1377 , - 1346 , - 583 , - 64 , - 765 , - 1710 , - 1923 , - 428 , - 153 , - 122 , - 1311 , - 792 , - 1493 , - 486 , - 699 , - 1156 , - 881 , - 850 , - 87 , - 1520 , - 269 , - 1214 , - 1427 , - 1884 , - 1609 , - 1578 , - 815 , - 296 , - 997 , - 1942 , - 203 , - 660 , - 385 , - 354 , - 1543 , - 1024 , - 1725 , - 718 , - 931 , - 1388 , - 1113 , - 1082 , - 319 , - 1752 , - 501 , - 1446 , - 1659 , - 164 , - 1841 , - 1810 , - 1047 , - 528 , - 1229 , - 222 , - 435 , - 892 , - 617 , - 586 , - 1775 , - 1256 , - 5 , - 950 , - 1163 , - 1620 , - 1345 , - 1314 , - 551 , - 32 , - 733 , - 1678 , - 1891 , - 396 , - 121 , - 90 , - 1279 , - 760 , - 1461 , - 454 , - 667 , - 1124 , - 849 , - 818 , - 55 , - 1488 , - 237 , - 1182 , - 1395 , - 1852 , - 1577 , - 1546 , - 783 , - 264 , - 965 , - 1910 , - 171 , - 628 , - 353 , - 322 , - 1511 , - 992 , - 1693 , - 686 , - 899 , - 1356 , - 1081 , - 1050 , - 287 , - 1720 , - 469 , - 1414 , - 1627 , - 132 , - 1809 , - 1778 , - 1015 , - 496 , - 1197 , - 190 , - 403 , - 860 , - 585 , - 554 , - 1743 , - 1224 , - 1925 , - 918 , - 1131 , - 1588 , - 1313 , - 1282 , - 519 , - 0 , - 1549 , - 866 , - 1919 , - 740 , - 1297 , - 1606 , - 1667 , - 1480 , - 1045 , - 362 , - 1415 , - 236 , - 793 , - 1102 , - 1163 , - 976 , - 541 , - 1842 , - 911 , - 1716 , - 289 , - 598 , - 659 , - 472 , - 37 , - 1338 , - 407 , - 1212 , - 1769 , - 94 , - 155 , - 1952 , - 1517 , - 834 , - 1887 , - 708 , - 1265 , - 1574 , - 1635 , - 1448 , - 1013 , - 330 , - 1383 , - 204 , - 761 , - 1070 , - 1131 , - 944 , - 509 , - 1810 , - 879 , - 1684 , - 257 , - 566 , - 627 , - 440 , - 5 , - 1306 , - 375 , - 1180 , - 1737 , - 62 , - 123 , - 1920 , - 1485 , - 802 , - 1855 , - 676 , - 1233 , - 1542 , - 1603 , - 1416 , - 981 , - 298 , - 1351 , - 172 , - 729 , - 1038 , - 1099 , - 912 , - 477 , - 1778 , - 847 , - 1652 , - 225 , - 534 , - 595 , - 408 , - 1957 , - 1274 , - 343 , - 1148 , - 1705 , - 30 , - 91 , - 1888 , - 1453 , - 770 , - 1823 , - 644 , - 1201 , - 1510 , - 1571 , - 1384 , - 949 , - 266 , - 1319 , - 140 , - 697 , - 1006 , - 1067 , - 880 , - 445 , - 1746 , - 815 , - 1620 , - 193 , - 502 , - 563 , - 376 , - 1925 , - 1242 , - 311 , - 1116 , - 1673 , - 1982 , - 59 , - 1856 , - 1421 , - 738 , - 1791 , - 612 , - 1169 , - 1478 , - 1539 , - 1352 , - 917 , - 234 , - 1287 , - 108 , - 665 , - 974 , - 1035 , - 848 , - 413 , - 1714 , - 783 , - 1588 , - 161 , - 470 , - 531 , - 344 , - 1893 , - 1210 , - 279 , - 1084 , - 1641 , - 1950 , - 27 , - 1824 , - 1389 , - 706 , - 1759 , - 580 , - 1137 , - 1446 , - 1507 , - 1320 , - 885 , - 202 , - 1255 , - 76 , - 633 , - 942 , - 1003 , - 816 , - 381 , - 1682 , - 751 , - 1556 , - 129 , - 438 , - 499 , - 312 , - 1861 , - 1178 , - 247 , - 1052 , - 1609 , - 1918 , - 1979 , - 1792 , - 1357 , - 674 , - 1727 , - 548 , - 1105 , - 1414 , - 1475 , - 1288 , - 853 , - 170 , - 1223 , - 44 , - 601 , - 910 , - 971 , - 784 , - 349 , - 1650 , - 719 , - 1524 , - 97 , - 406 , - 467 , - 280 , - 1829 , - 1146 , - 215 , - 1020 , - 1577 , - 1886 , - 1947 , - 1760 , - 1325 , - 642 , - 1695 , - 516 , - 1073 , - 1382 , - 1443 , - 1256 , - 821 , - 138 , - 1191 , - 12 , - 569 , - 878 , - 939 , - 752 , - 317 , - 1618 , - 687 , - 1492 , - 65 , - 374 , - 435 , - 248 , - 1797 , - 1114 , - 183 , - 988 , - 1545 , - 1854 , - 1915 , - 1728 , - 1293 , - 610 , - 1663 , - 484 , - 1041 , - 1350 , - 1411 , - 1224 , - 789 , - 106 , - 1159 , - 1964 , - 537 , - 846 , - 907 , - 720 , - 285 , - 1586 , - 655 , - 1460 , - 33 , - 342 , - 403 , - 216 , - 1765 , - 1082 , - 151 , - 956 , - 1513 , - 1822 , - 1883 , - 1696 , - 1261 , - 578 , - 1631 , - 452 , - 1009 , - 1318 , - 1379 , - 1192 , - 757 , - 74 , - 1127 , - 1932 , - 505 , - 814 , - 875 , - 688 , - 253 , - 1554 , - 623 , - 1428 , - 1 , - 310 , - 371 , - 184 , - 1733 , - 1050 , - 119 , - 924 , - 1481 , - 1790 , - 1851 , - 1664 , - 1229 , - 546 , - 1599 , - 420 , - 977 , - 1286 , - 1347 , - 1160 , - 725 , - 42 , - 1095 , - 1900 , - 473 , - 782 , - 843 , - 656 , - 221 , - 1522 , - 591 , - 1396 , - 1953 , - 278 , - 339 , - 152 , - 1701 , - 1018 , - 87 , - 892 , - 1449 , - 1758 , - 1819 , - 1632 , - 1197 , - 514 , - 1567 , - 388 , - 945 , - 1254 , - 1315 , - 1128 , - 693 , - 10 , - 1063 , - 1868 , - 441 , - 750 , - 811 , - 624 , - 189 , - 1490 , - 559 , - 1364 , - 1921 , - 246 , - 307 , - 120 , - 1669 , - 986 , - 55 , - 860 , - 1417 , - 1726 , - 1787 , - 1600 , - 1165 , - 482 , - 1535 , - 356 , - 913 , - 1222 , - 1283 , - 1096 , - 661 , - 1962 , - 1031 , - 1836 , - 409 , - 718 , - 779 , - 592 , - 157 , - 1458 , - 527 , - 1332 , - 1889 , - 214 , - 275 , - 88 , - 1637 , - 954 , - 23 , - 828 , - 1385 , - 1694 , - 1755 , - 1568 , - 1133 , - 450 , - 1503 , - 324 , - 881 , - 1190 , - 1251 , - 1064 , - 629 , - 1930 , - 999 , - 1804 , - 377 , - 686 , - 747 , - 560 , - 125 , - 1426 , - 495 , - 1300 , - 1857 , - 182 , - 243 , - 56 , - 1605 , - 922 , - 1975 , - 796 , - 1353 , - 1662 , - 1723 , - 1536 , - 1101 , - 418 , - 1471 , - 292 , - 849 , - 1158 , - 1219 , - 1032 , - 597 , - 1898 , - 967 , - 1772 , - 345 , - 654 , - 715 , - 528 , - 93 , - 1394 , - 463 , - 1268 , - 1825 , - 150 , - 211 , - 24 , - 1573 , - 890 , - 1943 , - 764 , - 1321 , - 1630 , - 1691 , - 1504 , - 1069 , - 386 , - 1439 , - 260 , - 817 , - 1126 , - 1187 , - 1000 , - 565 , - 1866 , - 935 , - 1740 , - 313 , - 622 , - 683 , - 496 , - 61 , - 1362 , - 431 , - 1236 , - 1793 , - 118 , - 179 , - 1976 , - 1541 , - 858 , - 1911 , - 732 , - 1289 , - 1598 , - 1659 , - 1472 , - 1037 , - 354 , - 1407 , - 228 , - 785 , - 1094 , - 1155 , - 968 , - 533 , - 1834 , - 903 , - 1708 , - 281 , - 590 , - 651 , - 464 , - 29 , - 1330 , - 399 , - 1204 , - 1761 , - 86 , - 147 , - 1944 , - 1509 , - 826 , - 1879 , - 700 , - 1257 , - 1566 , - 1627 , - 1440 , - 1005 , - 322 , - 1375 , - 196 , - 753 , - 1062 , - 1123 , - 936 , - 501 , - 1802 , - 871 , - 1676 , - 249 , - 558 , - 619 , - 432 , - 1981 , - 1298 , - 367 , - 1172 , - 1729 , - 54 , - 115 , - 1912 , - 1477 , - 794 , - 1847 , - 668 , - 1225 , - 1534 , - 1595 , - 1408 , - 973 , - 290 , - 1343 , - 164 , - 721 , - 1030 , - 1091 , - 904 , - 469 , - 1770 , - 839 , - 1644 , - 217 , - 526 , - 587 , - 400 , - 1949 , - 1266 , - 335 , - 1140 , - 1697 , - 22 , - 83 , - 1880 , - 1445 , - 762 , - 1815 , - 636 , - 1193 , - 1502 , - 1563 , - 1376 , - 941 , - 258 , - 1311 , - 132 , - 689 , - 998 , - 1059 , - 872 , - 437 , - 1738 , - 807 , - 1612 , - 185 , - 494 , - 555 , - 368 , - 1917 , - 1234 , - 303 , - 1108 , - 1665 , - 1974 , - 51 , - 1848 , - 1413 , - 730 , - 1783 , - 604 , - 1161 , - 1470 , - 1531 , - 1344 , - 909 , - 226 , - 1279 , - 100 , - 657 , - 966 , - 1027 , - 840 , - 405 , - 1706 , - 775 , - 1580 , - 153 , - 462 , - 523 , - 336 , - 1885 , - 1202 , - 271 , - 1076 , - 1633 , - 1942 , - 19 , - 1816 , - 1381 , - 698 , - 1751 , - 572 , - 1129 , - 1438 , - 1499 , - 1312 , - 877 , - 194 , - 1247 , - 68 , - 625 , - 934 , - 995 , - 808 , - 373 , - 1674 , - 743 , - 1548 , - 121 , - 430 , - 491 , - 304 , - 1853 , - 1170 , - 239 , - 1044 , - 1601 , - 1910 , - 1971 , - 1784 , - 1349 , - 666 , - 1719 , - 540 , - 1097 , - 1406 , - 1467 , - 1280 , - 845 , - 162 , - 1215 , - 36 , - 593 , - 902 , - 963 , - 776 , - 341 , - 1642 , - 711 , - 1516 , - 89 , - 398 , - 459 , - 272 , - 1821 , - 1138 , - 207 , - 1012 , - 1569 , - 1878 , - 1939 , - 1752 , - 1317 , - 634 , - 1687 , - 508 , - 1065 , - 1374 , - 1435 , - 1248 , - 813 , - 130 , - 1183 , - 4 , - 561 , - 870 , - 931 , - 744 , - 309 , - 1610 , - 679 , - 1484 , - 57 , - 366 , - 427 , - 240 , - 1789 , - 1106 , - 175 , - 980 , - 1537 , - 1846 , - 1907 , - 1720 , - 1285 , - 602 , - 1655 , - 476 , - 1033 , - 1342 , - 1403 , - 1216 , - 781 , - 98 , - 1151 , - 1956 , - 529 , - 838 , - 899 , - 712 , - 277 , - 1578 , - 647 , - 1452 , - 25 , - 334 , - 395 , - 208 , - 1757 , - 1074 , - 143 , - 948 , - 1505 , - 1814 , - 1875 , - 1688 , - 1253 , - 570 , - 1623 , - 444 , - 1001 , - 1310 , - 1371 , - 1184 , - 749 , - 66 , - 1119 , - 1924 , - 497 , - 806 , - 867 , - 680 , - 245 , - 1546 , - 615 , - 1420 , - 1977 , - 302 , - 363 , - 176 , - 1725 , - 1042 , - 111 , - 916 , - 1473 , - 1782 , - 1843 , - 1656 , - 1221 , - 538 , - 1591 , - 412 , - 969 , - 1278 , - 1339 , - 1152 , - 717 , - 34 , - 1087 , - 1892 , - 465 , - 774 , - 835 , - 648 , - 213 , - 1514 , - 583 , - 1388 , - 1945 , - 270 , - 331 , - 144 , - 1693 , - 1010 , - 79 , - 884 , - 1441 , - 1750 , - 1811 , - 1624 , - 1189 , - 506 , - 1559 , - 380 , - 937 , - 1246 , - 1307 , - 1120 , - 685 , - 2 , - 1055 , - 1860 , - 433 , - 742 , - 803 , - 616 , - 181 , - 1482 , - 551 , - 1356 , - 1913 , - 238 , - 299 , - 112 , - 1661 , - 978 , - 47 , - 852 , - 1409 , - 1718 , - 1779 , - 1592 , - 1157 , - 474 , - 1527 , - 348 , - 905 , - 1214 , - 1275 , - 1088 , - 653 , - 1954 , - 1023 , - 1828 , - 401 , - 710 , - 771 , - 584 , - 149 , - 1450 , - 519 , - 1324 , - 1881 , - 206 , - 267 , - 80 , - 1629 , - 946 , - 15 , - 820 , - 1377 , - 1686 , - 1747 , - 1560 , - 1125 , - 442 , - 1495 , - 316 , - 873 , - 1182 , - 1243 , - 1056 , - 621 , - 1922 , - 991 , - 1796 , - 369 , - 678 , - 739 , - 552 , - 117 , - 1418 , - 487 , - 1292 , - 1849 , - 174 , - 235 , - 48 , - 1597 , - 914 , - 1967 , - 788 , - 1345 , - 1654 , - 1715 , - 1528 , - 1093 , - 410 , - 1463 , - 284 , - 841 , - 1150 , - 1211 , - 1024 , - 589 , - 1890 , - 959 , - 1764 , - 337 , - 646 , - 707 , - 520 , - 85 , - 1386 , - 455 , - 1260 , - 1817 , - 142 , - 203 , - 16 , - 1565 , - 882 , - 1935 , - 756 , - 1313 , - 1622 , - 1683 , - 1496 , - 1061 , - 378 , - 1431 , - 252 , - 809 , - 1118 , - 1179 , - 992 , - 557 , - 1858 , - 927 , - 1732 , - 305 , - 614 , - 675 , - 488 , - 53 , - 1354 , - 423 , - 1228 , - 1785 , - 110 , - 171 , - 1968 , - 1533 , - 850 , - 1903 , - 724 , - 1281 , - 1590 , - 1651 , - 1464 , - 1029 , - 346 , - 1399 , - 220 , - 777 , - 1086 , - 1147 , - 960 , - 525 , - 1826 , - 895 , - 1700 , - 273 , - 582 , - 643 , - 456 , - 21 , - 1322 , - 391 , - 1196 , - 1753 , - 78 , - 139 , - 1936 , - 1501 , - 818 , - 1871 , - 692 , - 1249 , - 1558 , - 1619 , - 1432 , - 997 , - 314 , - 1367 , - 188 , - 745 , - 1054 , - 1115 , - 928 , - 493 , - 1794 , - 863 , - 1668 , - 241 , - 550 , - 611 , - 424 , - 1973 , - 1290 , - 359 , - 1164 , - 1721 , - 46 , - 107 , - 1904 , - 1469 , - 786 , - 1839 , - 660 , - 1217 , - 1526 , - 1587 , - 1400 , - 965 , - 282 , - 1335 , - 156 , - 713 , - 1022 , - 1083 , - 896 , - 461 , - 1762 , - 831 , - 1636 , - 209 , - 518 , - 579 , - 392 , - 1941 , - 1258 , - 327 , - 1132 , - 1689 , - 14 , - 75 , - 1872 , - 1437 , - 754 , - 1807 , - 628 , - 1185 , - 1494 , - 1555 , - 1368 , - 933 , - 250 , - 1303 , - 124 , - 681 , - 990 , - 1051 , - 864 , - 429 , - 1730 , - 799 , - 1604 , - 177 , - 486 , - 547 , - 360 , - 1909 , - 1226 , - 295 , - 1100 , - 1657 , - 1966 , - 43 , - 1840 , - 1405 , - 722 , - 1775 , - 596 , - 1153 , - 1462 , - 1523 , - 1336 , - 901 , - 218 , - 1271 , - 92 , - 649 , - 958 , - 1019 , - 832 , - 397 , - 1698 , - 767 , - 1572 , - 145 , - 454 , - 515 , - 328 , - 1877 , - 1194 , - 263 , - 1068 , - 1625 , - 1934 , - 11 , - 1808 , - 1373 , - 690 , - 1743 , - 564 , - 1121 , - 1430 , - 1491 , - 1304 , - 869 , - 186 , - 1239 , - 60 , - 617 , - 926 , - 987 , - 800 , - 365 , - 1666 , - 735 , - 1540 , - 113 , - 422 , - 483 , - 296 , - 1845 , - 1162 , - 231 , - 1036 , - 1593 , - 1902 , - 1963 , - 1776 , - 1341 , - 658 , - 1711 , - 532 , - 1089 , - 1398 , - 1459 , - 1272 , - 837 , - 154 , - 1207 , - 28 , - 585 , - 894 , - 955 , - 768 , - 333 , - 1634 , - 703 , - 1508 , - 81 , - 390 , - 451 , - 264 , - 1813 , - 1130 , - 199 , - 1004 , - 1561 , - 1870 , - 1931 , - 1744 , - 1309 , - 626 , - 1679 , - 500 , - 1057 , - 1366 , - 1427 , - 1240 , - 805 , - 122 , - 1175 , - 1980 , - 553 , - 862 , - 923 , - 736 , - 301 , - 1602 , - 671 , - 1476 , - 49 , - 358 , - 419 , - 232 , - 1781 , - 1098 , - 167 , - 972 , - 1529 , - 1838 , - 1899 , - 1712 , - 1277 , - 594 , - 1647 , - 468 , - 1025 , - 1334 , - 1395 , - 1208 , - 773 , - 90 , - 1143 , - 1948 , - 521 , - 830 , - 891 , - 704 , - 269 , - 1570 , - 639 , - 1444 , - 17 , - 326 , - 387 , - 200 , - 1749 , - 1066 , - 135 , - 940 , - 1497 , - 1806 , - 1867 , - 1680 , - 1245 , - 562 , - 1615 , - 436 , - 993 , - 1302 , - 1363 , - 1176 , - 741 , - 58 , - 1111 , - 1916 , - 489 , - 798 , - 859 , - 672 , - 237 , - 1538 , - 607 , - 1412 , - 1969 , - 294 , - 355 , - 168 , - 1717 , - 1034 , - 103 , - 908 , - 1465 , - 1774 , - 1835 , - 1648 , - 1213 , - 530 , - 1583 , - 404 , - 961 , - 1270 , - 1331 , - 1144 , - 709 , - 26 , - 1079 , - 1884 , - 457 , - 766 , - 827 , - 640 , - 205 , - 1506 , - 575 , - 1380 , - 1937 , - 262 , - 323 , - 136 , - 1685 , - 1002 , - 71 , - 876 , - 1433 , - 1742 , - 1803 , - 1616 , - 1181 , - 498 , - 1551 , - 372 , - 929 , - 1238 , - 1299 , - 1112 , - 677 , - 1978 , - 1047 , - 1852 , - 425 , - 734 , - 795 , - 608 , - 173 , - 1474 , - 543 , - 1348 , - 1905 , - 230 , - 291 , - 104 , - 1653 , - 970 , - 39 , - 844 , - 1401 , - 1710 , - 1771 , - 1584 , - 1149 , - 466 , - 1519 , - 340 , - 897 , - 1206 , - 1267 , - 1080 , - 645 , - 1946 , - 1015 , - 1820 , - 393 , - 702 , - 763 , - 576 , - 141 , - 1442 , - 511 , - 1316 , - 1873 , - 198 , - 259 , - 72 , - 1621 , - 938 , - 7 , - 812 , - 1369 , - 1678 , - 1739 , - 1552 , - 1117 , - 434 , - 1487 , - 308 , - 865 , - 1174 , - 1235 , - 1048 , - 613 , - 1914 , - 983 , - 1788 , - 361 , - 670 , - 731 , - 544 , - 109 , - 1410 , - 479 , - 1284 , - 1841 , - 166 , - 227 , - 40 , - 1589 , - 906 , - 1959 , - 780 , - 1337 , - 1646 , - 1707 , - 1520 , - 1085 , - 402 , - 1455 , - 276 , - 833 , - 1142 , - 1203 , - 1016 , - 581 , - 1882 , - 951 , - 1756 , - 329 , - 638 , - 699 , - 512 , - 77 , - 1378 , - 447 , - 1252 , - 1809 , - 134 , - 195 , - 8 , - 1557 , - 874 , - 1927 , - 748 , - 1305 , - 1614 , - 1675 , - 1488 , - 1053 , - 370 , - 1423 , - 244 , - 801 , - 1110 , - 1171 , - 984 , - 549 , - 1850 , - 919 , - 1724 , - 297 , - 606 , - 667 , - 480 , - 45 , - 1346 , - 415 , - 1220 , - 1777 , - 102 , - 163 , - 1960 , - 1525 , - 842 , - 1895 , - 716 , - 1273 , - 1582 , - 1643 , - 1456 , - 1021 , - 338 , - 1391 , - 212 , - 769 , - 1078 , - 1139 , - 952 , - 517 , - 1818 , - 887 , - 1692 , - 265 , - 574 , - 635 , - 448 , - 13 , - 1314 , - 383 , - 1188 , - 1745 , - 70 , - 131 , - 1928 , - 1493 , - 810 , - 1863 , - 684 , - 1241 , - 1550 , - 1611 , - 1424 , - 989 , - 306 , - 1359 , - 180 , - 737 , - 1046 , - 1107 , - 920 , - 485 , - 1786 , - 855 , - 1660 , - 233 , - 542 , - 603 , - 416 , - 1965 , - 1282 , - 351 , - 1156 , - 1713 , - 38 , - 99 , - 1896 , - 1461 , - 778 , - 1831 , - 652 , - 1209 , - 1518 , - 1579 , - 1392 , - 957 , - 274 , - 1327 , - 148 , - 705 , - 1014 , - 1075 , - 888 , - 453 , - 1754 , - 823 , - 1628 , - 201 , - 510 , - 571 , - 384 , - 1933 , - 1250 , - 319 , - 1124 , - 1681 , - 6 , - 67 , - 1864 , - 1429 , - 746 , - 1799 , - 620 , - 1177 , - 1486 , - 1547 , - 1360 , - 925 , - 242 , - 1295 , - 116 , - 673 , - 982 , - 1043 , - 856 , - 421 , - 1722 , - 791 , - 1596 , - 169 , - 478 , - 539 , - 352 , - 1901 , - 1218 , - 287 , - 1092 , - 1649 , - 1958 , - 35 , - 1832 , - 1397 , - 714 , - 1767 , - 588 , - 1145 , - 1454 , - 1515 , - 1328 , - 893 , - 210 , - 1263 , - 84 , - 641 , - 950 , - 1011 , - 824 , - 389 , - 1690 , - 759 , - 1564 , - 137 , - 446 , - 507 , - 320 , - 1869 , - 1186 , - 255 , - 1060 , - 1617 , - 1926 , - 3 , - 1800 , - 1365 , - 682 , - 1735 , - 556 , - 1113 , - 1422 , - 1483 , - 1296 , - 861 , - 178 , - 1231 , - 52 , - 609 , - 918 , - 979 , - 792 , - 357 , - 1658 , - 727 , - 1532 , - 105 , - 414 , - 475 , - 288 , - 1837 , - 1154 , - 223 , - 1028 , - 1585 , - 1894 , - 1955 , - 1768 , - 1333 , - 650 , - 1703 , - 524 , - 1081 , - 1390 , - 1451 , - 1264 , - 829 , - 146 , - 1199 , - 20 , - 577 , - 886 , - 947 , - 760 , - 325 , - 1626 , - 695 , - 1500 , - 73 , - 382 , - 443 , - 256 , - 1805 , - 1122 , - 191 , - 996 , - 1553 , - 1862 , - 1923 , - 1736 , - 1301 , - 618 , - 1671 , - 492 , - 1049 , - 1358 , - 1419 , - 1232 , - 797 , - 114 , - 1167 , - 1972 , - 545 , - 854 , - 915 , - 728 , - 293 , - 1594 , - 663 , - 1468 , - 41 , - 350 , - 411 , - 224 , - 1773 , - 1090 , - 159 , - 964 , - 1521 , - 1830 , - 1891 , - 1704 , - 1269 , - 586 , - 1639 , - 460 , - 1017 , - 1326 , - 1387 , - 1200 , - 765 , - 82 , - 1135 , - 1940 , - 513 , - 822 , - 883 , - 696 , - 261 , - 1562 , - 631 , - 1436 , - 9 , - 318 , - 379 , - 192 , - 1741 , - 1058 , - 127 , - 932 , - 1489 , - 1798 , - 1859 , - 1672 , - 1237 , - 554 , - 1607 , - 428 , - 985 , - 1294 , - 1355 , - 1168 , - 733 , - 50 , - 1103 , - 1908 , - 481 , - 790 , - 851 , - 664 , - 229 , - 1530 , - 599 , - 1404 , - 1961 , - 286 , - 347 , - 160 , - 1709 , - 1026 , - 95 , - 900 , - 1457 , - 1766 , - 1827 , - 1640 , - 1205 , - 522 , - 1575 , - 396 , - 953 , - 1262 , - 1323 , - 1136 , - 701 , - 18 , - 1071 , - 1876 , - 449 , - 758 , - 819 , - 632 , - 197 , - 1498 , - 567 , - 1372 , - 1929 , - 254 , - 315 , - 128 , - 1677 , - 994 , - 63 , - 868 , - 1425 , - 1734 , - 1795 , - 1608 , - 1173 , - 490 , - 1543 , - 364 , - 921 , - 1230 , - 1291 , - 1104 , - 669 , - 1970 , - 1039 , - 1844 , - 417 , - 726 , - 787 , - 600 , - 165 , - 1466 , - 535 , - 1340 , - 1897 , - 222 , - 283 , - 96 , - 1645 , - 962 , - 31 , - 836 , - 1393 , - 1702 , - 1763 , - 1576 , - 1141 , - 458 , - 1511 , - 332 , - 889 , - 1198 , - 1259 , - 1072 , - 637 , - 1938 , - 1007 , - 1812 , - 385 , - 694 , - 755 , - 568 , - 133 , - 1434 , - 503 , - 1308 , - 1865 , - 190 , - 251 , - 64 , - 1613 , - 930 , - 1983 , - 804 , - 1361 , - 1670 , - 1731 , - 1544 , - 1109 , - 426 , - 1479 , - 300 , - 857 , - 1166 , - 1227 , - 1040 , - 605 , - 1906 , - 975 , - 1780 , - 353 , - 662 , - 723 , - 536 , - 101 , - 1402 , - 471 , - 1276 , - 1833 , - 158 , - 219 , - 32 , - 1581 , - 898 , - 1951 , - 772 , - 1329 , - 1638 , - 1699 , - 1512 , - 1077 , - 394 , - 1447 , - 268 , - 825 , - 1134 , - 1195 , - 1008 , - 573 , - 1874 , - 943 , - 1748 , - 321 , - 630 , - 691 , - 504 , - 69 , - 1370 , - 439 , - 1244 , - 1801 , - 126 , - 187 , - 0 , - 1709 , - 1234 , - 591 , - 1796 , - 817 , - 1686 , - 371 , - 904 , - 1269 , - 1466 , - 1495 , - 1356 , - 1049 , - 574 , - 1947 , - 1136 , - 157 , - 1026 , - 1727 , - 244 , - 609 , - 806 , - 835 , - 696 , - 389 , - 1930 , - 1287 , - 476 , - 1513 , - 366 , - 1067 , - 1600 , - 1965 , - 146 , - 175 , - 36 , - 1745 , - 1270 , - 627 , - 1832 , - 853 , - 1722 , - 407 , - 940 , - 1305 , - 1502 , - 1531 , - 1392 , - 1085 , - 610 , - 1983 , - 1172 , - 193 , - 1062 , - 1763 , - 280 , - 645 , - 842 , - 871 , - 732 , - 425 , - 1966 , - 1323 , - 512 , - 1549 , - 402 , - 1103 , - 1636 , - 2001 , - 182 , - 211 , - 72 , - 1781 , - 1306 , - 663 , - 1868 , - 889 , - 1758 , - 443 , - 976 , - 1341 , - 1538 , - 1567 , - 1428 , - 1121 , - 646 , - 3 , - 1208 , - 229 , - 1098 , - 1799 , - 316 , - 681 , - 878 , - 907 , - 768 , - 461 , - 2002 , - 1359 , - 548 , - 1585 , - 438 , - 1139 , - 1672 , - 21 , - 218 , - 247 , - 108 , - 1817 , - 1342 , - 699 , - 1904 , - 925 , - 1794 , - 479 , - 1012 , - 1377 , - 1574 , - 1603 , - 1464 , - 1157 , - 682 , - 39 , - 1244 , - 265 , - 1134 , - 1835 , - 352 , - 717 , - 914 , - 943 , - 804 , - 497 , - 22 , - 1395 , - 584 , - 1621 , - 474 , - 1175 , - 1708 , - 57 , - 254 , - 283 , - 144 , - 1853 , - 1378 , - 735 , - 1940 , - 961 , - 1830 , - 515 , - 1048 , - 1413 , - 1610 , - 1639 , - 1500 , - 1193 , - 718 , - 75 , - 1280 , - 301 , - 1170 , - 1871 , - 388 , - 753 , - 950 , - 979 , - 840 , - 533 , - 58 , - 1431 , - 620 , - 1657 , - 510 , - 1211 , - 1744 , - 93 , - 290 , - 319 , - 180 , - 1889 , - 1414 , - 771 , - 1976 , - 997 , - 1866 , - 551 , - 1084 , - 1449 , - 1646 , - 1675 , - 1536 , - 1229 , - 754 , - 111 , - 1316 , - 337 , - 1206 , - 1907 , - 424 , - 789 , - 986 , - 1015 , - 876 , - 569 , - 94 , - 1467 , - 656 , - 1693 , - 546 , - 1247 , - 1780 , - 129 , - 326 , - 355 , - 216 , - 1925 , - 1450 , - 807 , - 2012 , - 1033 , - 1902 , - 587 , - 1120 , - 1485 , - 1682 , - 1711 , - 1572 , - 1265 , - 790 , - 147 , - 1352 , - 373 , - 1242 , - 1943 , - 460 , - 825 , - 1022 , - 1051 , - 912 , - 605 , - 130 , - 1503 , - 692 , - 1729 , - 582 , - 1283 , - 1816 , - 165 , - 362 , - 391 , - 252 , - 1961 , - 1486 , - 843 , - 32 , - 1069 , - 1938 , - 623 , - 1156 , - 1521 , - 1718 , - 1747 , - 1608 , - 1301 , - 826 , - 183 , - 1388 , - 409 , - 1278 , - 1979 , - 496 , - 861 , - 1058 , - 1087 , - 948 , - 641 , - 166 , - 1539 , - 728 , - 1765 , - 618 , - 1319 , - 1852 , - 201 , - 398 , - 427 , - 288 , - 1997 , - 1522 , - 879 , - 68 , - 1105 , - 1974 , - 659 , - 1192 , - 1557 , - 1754 , - 1783 , - 1644 , - 1337 , - 862 , - 219 , - 1424 , - 445 , - 1314 , - 2015 , - 532 , - 897 , - 1094 , - 1123 , - 984 , - 677 , - 202 , - 1575 , - 764 , - 1801 , - 654 , - 1355 , - 1888 , - 237 , - 434 , - 463 , - 324 , - 17 , - 1558 , - 915 , - 104 , - 1141 , - 2010 , - 695 , - 1228 , - 1593 , - 1790 , - 1819 , - 1680 , - 1373 , - 898 , - 255 , - 1460 , - 481 , - 1350 , - 35 , - 568 , - 933 , - 1130 , - 1159 , - 1020 , - 713 , - 238 , - 1611 , - 800 , - 1837 , - 690 , - 1391 , - 1924 , - 273 , - 470 , - 499 , - 360 , - 53 , - 1594 , - 951 , - 140 , - 1177 , - 30 , - 731 , - 1264 , - 1629 , - 1826 , - 1855 , - 1716 , - 1409 , - 934 , - 291 , - 1496 , - 517 , - 1386 , - 71 , - 604 , - 969 , - 1166 , - 1195 , - 1056 , - 749 , - 274 , - 1647 , - 836 , - 1873 , - 726 , - 1427 , - 1960 , - 309 , - 506 , - 535 , - 396 , - 89 , - 1630 , - 987 , - 176 , - 1213 , - 66 , - 767 , - 1300 , - 1665 , - 1862 , - 1891 , - 1752 , - 1445 , - 970 , - 327 , - 1532 , - 553 , - 1422 , - 107 , - 640 , - 1005 , - 1202 , - 1231 , - 1092 , - 785 , - 310 , - 1683 , - 872 , - 1909 , - 762 , - 1463 , - 1996 , - 345 , - 542 , - 571 , - 432 , - 125 , - 1666 , - 1023 , - 212 , - 1249 , - 102 , - 803 , - 1336 , - 1701 , - 1898 , - 1927 , - 1788 , - 1481 , - 1006 , - 363 , - 1568 , - 589 , - 1458 , - 143 , - 676 , - 1041 , - 1238 , - 1267 , - 1128 , - 821 , - 346 , - 1719 , - 908 , - 1945 , - 798 , - 1499 , - 16 , - 381 , - 578 , - 607 , - 468 , - 161 , - 1702 , - 1059 , - 248 , - 1285 , - 138 , - 839 , - 1372 , - 1737 , - 1934 , - 1963 , - 1824 , - 1517 , - 1042 , - 399 , - 1604 , - 625 , - 1494 , - 179 , - 712 , - 1077 , - 1274 , - 1303 , - 1164 , - 857 , - 382 , - 1755 , - 944 , - 1981 , - 834 , - 1535 , - 52 , - 417 , - 614 , - 643 , - 504 , - 197 , - 1738 , - 1095 , - 284 , - 1321 , - 174 , - 875 , - 1408 , - 1773 , - 1970 , - 1999 , - 1860 , - 1553 , - 1078 , - 435 , - 1640 , - 661 , - 1530 , - 215 , - 748 , - 1113 , - 1310 , - 1339 , - 1200 , - 893 , - 418 , - 1791 , - 980 , - 1 , - 870 , - 1571 , - 88 , - 453 , - 650 , - 679 , - 540 , - 233 , - 1774 , - 1131 , - 320 , - 1357 , - 210 , - 911 , - 1444 , - 1809 , - 2006 , - 19 , - 1896 , - 1589 , - 1114 , - 471 , - 1676 , - 697 , - 1566 , - 251 , - 784 , - 1149 , - 1346 , - 1375 , - 1236 , - 929 , - 454 , - 1827 , - 1016 , - 37 , - 906 , - 1607 , - 124 , - 489 , - 686 , - 715 , - 576 , - 269 , - 1810 , - 1167 , - 356 , - 1393 , - 246 , - 947 , - 1480 , - 1845 , - 26 , - 55 , - 1932 , - 1625 , - 1150 , - 507 , - 1712 , - 733 , - 1602 , - 287 , - 820 , - 1185 , - 1382 , - 1411 , - 1272 , - 965 , - 490 , - 1863 , - 1052 , - 73 , - 942 , - 1643 , - 160 , - 525 , - 722 , - 751 , - 612 , - 305 , - 1846 , - 1203 , - 392 , - 1429 , - 282 , - 983 , - 1516 , - 1881 , - 62 , - 91 , - 1968 , - 1661 , - 1186 , - 543 , - 1748 , - 769 , - 1638 , - 323 , - 856 , - 1221 , - 1418 , - 1447 , - 1308 , - 1001 , - 526 , - 1899 , - 1088 , - 109 , - 978 , - 1679 , - 196 , - 561 , - 758 , - 787 , - 648 , - 341 , - 1882 , - 1239 , - 428 , - 1465 , - 318 , - 1019 , - 1552 , - 1917 , - 98 , - 127 , - 2004 , - 1697 , - 1222 , - 579 , - 1784 , - 805 , - 1674 , - 359 , - 892 , - 1257 , - 1454 , - 1483 , - 1344 , - 1037 , - 562 , - 1935 , - 1124 , - 145 , - 1014 , - 1715 , - 232 , - 597 , - 794 , - 823 , - 684 , - 377 , - 1918 , - 1275 , - 464 , - 1501 , - 354 , - 1055 , - 1588 , - 1953 , - 134 , - 163 , - 24 , - 1733 , - 1258 , - 615 , - 1820 , - 841 , - 1710 , - 395 , - 928 , - 1293 , - 1490 , - 1519 , - 1380 , - 1073 , - 598 , - 1971 , - 1160 , - 181 , - 1050 , - 1751 , - 268 , - 633 , - 830 , - 859 , - 720 , - 413 , - 1954 , - 1311 , - 500 , - 1537 , - 390 , - 1091 , - 1624 , - 1989 , - 170 , - 199 , - 60 , - 1769 , - 1294 , - 651 , - 1856 , - 877 , - 1746 , - 431 , - 964 , - 1329 , - 1526 , - 1555 , - 1416 , - 1109 , - 634 , - 2007 , - 1196 , - 217 , - 1086 , - 1787 , - 304 , - 669 , - 866 , - 895 , - 756 , - 449 , - 1990 , - 1347 , - 536 , - 1573 , - 426 , - 1127 , - 1660 , - 9 , - 206 , - 235 , - 96 , - 1805 , - 1330 , - 687 , - 1892 , - 913 , - 1782 , - 467 , - 1000 , - 1365 , - 1562 , - 1591 , - 1452 , - 1145 , - 670 , - 27 , - 1232 , - 253 , - 1122 , - 1823 , - 340 , - 705 , - 902 , - 931 , - 792 , - 485 , - 10 , - 1383 , - 572 , - 1609 , - 462 , - 1163 , - 1696 , - 45 , - 242 , - 271 , - 132 , - 1841 , - 1366 , - 723 , - 1928 , - 949 , - 1818 , - 503 , - 1036 , - 1401 , - 1598 , - 1627 , - 1488 , - 1181 , - 706 , - 63 , - 1268 , - 289 , - 1158 , - 1859 , - 376 , - 741 , - 938 , - 967 , - 828 , - 521 , - 46 , - 1419 , - 608 , - 1645 , - 498 , - 1199 , - 1732 , - 81 , - 278 , - 307 , - 168 , - 1877 , - 1402 , - 759 , - 1964 , - 985 , - 1854 , - 539 , - 1072 , - 1437 , - 1634 , - 1663 , - 1524 , - 1217 , - 742 , - 99 , - 1304 , - 325 , - 1194 , - 1895 , - 412 , - 777 , - 974 , - 1003 , - 864 , - 557 , - 82 , - 1455 , - 644 , - 1681 , - 534 , - 1235 , - 1768 , - 117 , - 314 , - 343 , - 204 , - 1913 , - 1438 , - 795 , - 2000 , - 1021 , - 1890 , - 575 , - 1108 , - 1473 , - 1670 , - 1699 , - 1560 , - 1253 , - 778 , - 135 , - 1340 , - 361 , - 1230 , - 1931 , - 448 , - 813 , - 1010 , - 1039 , - 900 , - 593 , - 118 , - 1491 , - 680 , - 1717 , - 570 , - 1271 , - 1804 , - 153 , - 350 , - 379 , - 240 , - 1949 , - 1474 , - 831 , - 20 , - 1057 , - 1926 , - 611 , - 1144 , - 1509 , - 1706 , - 1735 , - 1596 , - 1289 , - 814 , - 171 , - 1376 , - 397 , - 1266 , - 1967 , - 484 , - 849 , - 1046 , - 1075 , - 936 , - 629 , - 154 , - 1527 , - 716 , - 1753 , - 606 , - 1307 , - 1840 , - 189 , - 386 , - 415 , - 276 , - 1985 , - 1510 , - 867 , - 56 , - 1093 , - 1962 , - 647 , - 1180 , - 1545 , - 1742 , - 1771 , - 1632 , - 1325 , - 850 , - 207 , - 1412 , - 433 , - 1302 , - 2003 , - 520 , - 885 , - 1082 , - 1111 , - 972 , - 665 , - 190 , - 1563 , - 752 , - 1789 , - 642 , - 1343 , - 1876 , - 225 , - 422 , - 451 , - 312 , - 5 , - 1546 , - 903 , - 92 , - 1129 , - 1998 , - 683 , - 1216 , - 1581 , - 1778 , - 1807 , - 1668 , - 1361 , - 886 , - 243 , - 1448 , - 469 , - 1338 , - 23 , - 556 , - 921 , - 1118 , - 1147 , - 1008 , - 701 , - 226 , - 1599 , - 788 , - 1825 , - 678 , - 1379 , - 1912 , - 261 , - 458 , - 487 , - 348 , - 41 , - 1582 , - 939 , - 128 , - 1165 , - 18 , - 719 , - 1252 , - 1617 , - 1814 , - 1843 , - 1704 , - 1397 , - 922 , - 279 , - 1484 , - 505 , - 1374 , - 59 , - 592 , - 957 , - 1154 , - 1183 , - 1044 , - 737 , - 262 , - 1635 , - 824 , - 1861 , - 714 , - 1415 , - 1948 , - 297 , - 494 , - 523 , - 384 , - 77 , - 1618 , - 975 , - 164 , - 1201 , - 54 , - 755 , - 1288 , - 1653 , - 1850 , - 1879 , - 1740 , - 1433 , - 958 , - 315 , - 1520 , - 541 , - 1410 , - 95 , - 628 , - 993 , - 1190 , - 1219 , - 1080 , - 773 , - 298 , - 1671 , - 860 , - 1897 , - 750 , - 1451 , - 1984 , - 333 , - 530 , - 559 , - 420 , - 113 , - 1654 , - 1011 , - 200 , - 1237 , - 90 , - 791 , - 1324 , - 1689 , - 1886 , - 1915 , - 1776 , - 1469 , - 994 , - 351 , - 1556 , - 577 , - 1446 , - 131 , - 664 , - 1029 , - 1226 , - 1255 , - 1116 , - 809 , - 334 , - 1707 , - 896 , - 1933 , - 786 , - 1487 , - 4 , - 369 , - 566 , - 595 , - 456 , - 149 , - 1690 , - 1047 , - 236 , - 1273 , - 126 , - 827 , - 1360 , - 1725 , - 1922 , - 1951 , - 1812 , - 1505 , - 1030 , - 387 , - 1592 , - 613 , - 1482 , - 167 , - 700 , - 1065 , - 1262 , - 1291 , - 1152 , - 845 , - 370 , - 1743 , - 932 , - 1969 , - 822 , - 1523 , - 40 , - 405 , - 602 , - 631 , - 492 , - 185 , - 1726 , - 1083 , - 272 , - 1309 , - 162 , - 863 , - 1396 , - 1761 , - 1958 , - 1987 , - 1848 , - 1541 , - 1066 , - 423 , - 1628 , - 649 , - 1518 , - 203 , - 736 , - 1101 , - 1298 , - 1327 , - 1188 , - 881 , - 406 , - 1779 , - 968 , - 2005 , - 858 , - 1559 , - 76 , - 441 , - 638 , - 667 , - 528 , - 221 , - 1762 , - 1119 , - 308 , - 1345 , - 198 , - 899 , - 1432 , - 1797 , - 1994 , - 7 , - 1884 , - 1577 , - 1102 , - 459 , - 1664 , - 685 , - 1554 , - 239 , - 772 , - 1137 , - 1334 , - 1363 , - 1224 , - 917 , - 442 , - 1815 , - 1004 , - 25 , - 894 , - 1595 , - 112 , - 477 , - 674 , - 703 , - 564 , - 257 , - 1798 , - 1155 , - 344 , - 1381 , - 234 , - 935 , - 1468 , - 1833 , - 14 , - 43 , - 1920 , - 1613 , - 1138 , - 495 , - 1700 , - 721 , - 1590 , - 275 , - 808 , - 1173 , - 1370 , - 1399 , - 1260 , - 953 , - 478 , - 1851 , - 1040 , - 61 , - 930 , - 1631 , - 148 , - 513 , - 710 , - 739 , - 600 , - 293 , - 1834 , - 1191 , - 380 , - 1417 , - 270 , - 971 , - 1504 , - 1869 , - 50 , - 79 , - 1956 , - 1649 , - 1174 , - 531 , - 1736 , - 757 , - 1626 , - 311 , - 844 , - 1209 , - 1406 , - 1435 , - 1296 , - 989 , - 514 , - 1887 , - 1076 , - 97 , - 966 , - 1667 , - 184 , - 549 , - 746 , - 775 , - 636 , - 329 , - 1870 , - 1227 , - 416 , - 1453 , - 306 , - 1007 , - 1540 , - 1905 , - 86 , - 115 , - 1992 , - 1685 , - 1210 , - 567 , - 1772 , - 793 , - 1662 , - 347 , - 880 , - 1245 , - 1442 , - 1471 , - 1332 , - 1025 , - 550 , - 1923 , - 1112 , - 133 , - 1002 , - 1703 , - 220 , - 585 , - 782 , - 811 , - 672 , - 365 , - 1906 , - 1263 , - 452 , - 1489 , - 342 , - 1043 , - 1576 , - 1941 , - 122 , - 151 , - 12 , - 1721 , - 1246 , - 603 , - 1808 , - 829 , - 1698 , - 383 , - 916 , - 1281 , - 1478 , - 1507 , - 1368 , - 1061 , - 586 , - 1959 , - 1148 , - 169 , - 1038 , - 1739 , - 256 , - 621 , - 818 , - 847 , - 708 , - 401 , - 1942 , - 1299 , - 488 , - 1525 , - 378 , - 1079 , - 1612 , - 1977 , - 158 , - 187 , - 48 , - 1757 , - 1282 , - 639 , - 1844 , - 865 , - 1734 , - 419 , - 952 , - 1317 , - 1514 , - 1543 , - 1404 , - 1097 , - 622 , - 1995 , - 1184 , - 205 , - 1074 , - 1775 , - 292 , - 657 , - 854 , - 883 , - 744 , - 437 , - 1978 , - 1335 , - 524 , - 1561 , - 414 , - 1115 , - 1648 , - 2013 , - 194 , - 223 , - 84 , - 1793 , - 1318 , - 675 , - 1880 , - 901 , - 1770 , - 455 , - 988 , - 1353 , - 1550 , - 1579 , - 1440 , - 1133 , - 658 , - 15 , - 1220 , - 241 , - 1110 , - 1811 , - 328 , - 693 , - 890 , - 919 , - 780 , - 473 , - 2014 , - 1371 , - 560 , - 1597 , - 450 , - 1151 , - 1684 , - 33 , - 230 , - 259 , - 120 , - 1829 , - 1354 , - 711 , - 1916 , - 937 , - 1806 , - 491 , - 1024 , - 1389 , - 1586 , - 1615 , - 1476 , - 1169 , - 694 , - 51 , - 1256 , - 277 , - 1146 , - 1847 , - 364 , - 729 , - 926 , - 955 , - 816 , - 509 , - 34 , - 1407 , - 596 , - 1633 , - 486 , - 1187 , - 1720 , - 69 , - 266 , - 295 , - 156 , - 1865 , - 1390 , - 747 , - 1952 , - 973 , - 1842 , - 527 , - 1060 , - 1425 , - 1622 , - 1651 , - 1512 , - 1205 , - 730 , - 87 , - 1292 , - 313 , - 1182 , - 1883 , - 400 , - 765 , - 962 , - 991 , - 852 , - 545 , - 70 , - 1443 , - 632 , - 1669 , - 522 , - 1223 , - 1756 , - 105 , - 302 , - 331 , - 192 , - 1901 , - 1426 , - 783 , - 1988 , - 1009 , - 1878 , - 563 , - 1096 , - 1461 , - 1658 , - 1687 , - 1548 , - 1241 , - 766 , - 123 , - 1328 , - 349 , - 1218 , - 1919 , - 436 , - 801 , - 998 , - 1027 , - 888 , - 581 , - 106 , - 1479 , - 668 , - 1705 , - 558 , - 1259 , - 1792 , - 141 , - 338 , - 367 , - 228 , - 1937 , - 1462 , - 819 , - 8 , - 1045 , - 1914 , - 599 , - 1132 , - 1497 , - 1694 , - 1723 , - 1584 , - 1277 , - 802 , - 159 , - 1364 , - 385 , - 1254 , - 1955 , - 472 , - 837 , - 1034 , - 1063 , - 924 , - 617 , - 142 , - 1515 , - 704 , - 1741 , - 594 , - 1295 , - 1828 , - 177 , - 374 , - 403 , - 264 , - 1973 , - 1498 , - 855 , - 44 , - 1081 , - 1950 , - 635 , - 1168 , - 1533 , - 1730 , - 1759 , - 1620 , - 1313 , - 838 , - 195 , - 1400 , - 421 , - 1290 , - 1991 , - 508 , - 873 , - 1070 , - 1099 , - 960 , - 653 , - 178 , - 1551 , - 740 , - 1777 , - 630 , - 1331 , - 1864 , - 213 , - 410 , - 439 , - 300 , - 2009 , - 1534 , - 891 , - 80 , - 1117 , - 1986 , - 671 , - 1204 , - 1569 , - 1766 , - 1795 , - 1656 , - 1349 , - 874 , - 231 , - 1436 , - 457 , - 1326 , - 11 , - 544 , - 909 , - 1106 , - 1135 , - 996 , - 689 , - 214 , - 1587 , - 776 , - 1813 , - 666 , - 1367 , - 1900 , - 249 , - 446 , - 475 , - 336 , - 29 , - 1570 , - 927 , - 116 , - 1153 , - 6 , - 707 , - 1240 , - 1605 , - 1802 , - 1831 , - 1692 , - 1385 , - 910 , - 267 , - 1472 , - 493 , - 1362 , - 47 , - 580 , - 945 , - 1142 , - 1171 , - 1032 , - 725 , - 250 , - 1623 , - 812 , - 1849 , - 702 , - 1403 , - 1936 , - 285 , - 482 , - 511 , - 372 , - 65 , - 1606 , - 963 , - 152 , - 1189 , - 42 , - 743 , - 1276 , - 1641 , - 1838 , - 1867 , - 1728 , - 1421 , - 946 , - 303 , - 1508 , - 529 , - 1398 , - 83 , - 616 , - 981 , - 1178 , - 1207 , - 1068 , - 761 , - 286 , - 1659 , - 848 , - 1885 , - 738 , - 1439 , - 1972 , - 321 , - 518 , - 547 , - 408 , - 101 , - 1642 , - 999 , - 188 , - 1225 , - 78 , - 779 , - 1312 , - 1677 , - 1874 , - 1903 , - 1764 , - 1457 , - 982 , - 339 , - 1544 , - 565 , - 1434 , - 119 , - 652 , - 1017 , - 1214 , - 1243 , - 1104 , - 797 , - 322 , - 1695 , - 884 , - 1921 , - 774 , - 1475 , - 2008 , - 357 , - 554 , - 583 , - 444 , - 137 , - 1678 , - 1035 , - 224 , - 1261 , - 114 , - 815 , - 1348 , - 1713 , - 1910 , - 1939 , - 1800 , - 1493 , - 1018 , - 375 , - 1580 , - 601 , - 1470 , - 155 , - 688 , - 1053 , - 1250 , - 1279 , - 1140 , - 833 , - 358 , - 1731 , - 920 , - 1957 , - 810 , - 1511 , - 28 , - 393 , - 590 , - 619 , - 480 , - 173 , - 1714 , - 1071 , - 260 , - 1297 , - 150 , - 851 , - 1384 , - 1749 , - 1946 , - 1975 , - 1836 , - 1529 , - 1054 , - 411 , - 1616 , - 637 , - 1506 , - 191 , - 724 , - 1089 , - 1286 , - 1315 , - 1176 , - 869 , - 394 , - 1767 , - 956 , - 1993 , - 846 , - 1547 , - 64 , - 429 , - 626 , - 655 , - 516 , - 209 , - 1750 , - 1107 , - 296 , - 1333 , - 186 , - 887 , - 1420 , - 1785 , - 1982 , - 2011 , - 1872 , - 1565 , - 1090 , - 447 , - 1652 , - 673 , - 1542 , - 227 , - 760 , - 1125 , - 1322 , - 1351 , - 1212 , - 905 , - 430 , - 1803 , - 992 , - 13 , - 882 , - 1583 , - 100 , - 465 , - 662 , - 691 , - 552 , - 245 , - 1786 , - 1143 , - 332 , - 1369 , - 222 , - 923 , - 1456 , - 1821 , - 2 , - 31 , - 1908 , - 1601 , - 1126 , - 483 , - 1688 , - 709 , - 1578 , - 263 , - 796 , - 1161 , - 1358 , - 1387 , - 1248 , - 941 , - 466 , - 1839 , - 1028 , - 49 , - 918 , - 1619 , - 136 , - 501 , - 698 , - 727 , - 588 , - 281 , - 1822 , - 1179 , - 368 , - 1405 , - 258 , - 959 , - 1492 , - 1857 , - 38 , - 67 , - 1944 , - 1637 , - 1162 , - 519 , - 1724 , - 745 , - 1614 , - 299 , - 832 , - 1197 , - 1394 , - 1423 , - 1284 , - 977 , - 502 , - 1875 , - 1064 , - 85 , - 954 , - 1655 , - 172 , - 537 , - 734 , - 763 , - 624 , - 317 , - 1858 , - 1215 , - 404 , - 1441 , - 294 , - 995 , - 1528 , - 1893 , - 74 , - 103 , - 1980 , - 1673 , - 1198 , - 555 , - 1760 , - 781 , - 1650 , - 335 , - 868 , - 1233 , - 1430 , - 1459 , - 1320 , - 1013 , - 538 , - 1911 , - 1100 , - 121 , - 990 , - 1691 , - 208 , - 573 , - 770 , - 799 , - 660 , - 353 , - 1894 , - 1251 , - 440 , - 1477 , - 330 , - 1031 , - 1564 , - 1929 , - 110 , - 139 , - 0 , - 1055 , - 190 , - 1501 , - 892 , - 411 , - 58 , - 1881 , - 1784 , - 1815 , - 1974 , - 213 , - 628 , - 1171 , - 1842 , - 593 , - 1520 , - 527 , - 1710 , - 973 , - 364 , - 1931 , - 1578 , - 1353 , - 1256 , - 1287 , - 1446 , - 1733 , - 100 , - 643 , - 1314 , - 65 , - 992 , - 2047 , - 1182 , - 445 , - 1884 , - 1403 , - 1050 , - 825 , - 728 , - 759 , - 918 , - 1205 , - 1620 , - 115 , - 786 , - 1585 , - 464 , - 1519 , - 654 , - 1965 , - 1356 , - 875 , - 522 , - 297 , - 200 , - 231 , - 390 , - 677 , - 1092 , - 1635 , - 258 , - 1057 , - 1984 , - 991 , - 126 , - 1437 , - 828 , - 347 , - 2042 , - 1817 , - 1720 , - 1751 , - 1910 , - 149 , - 564 , - 1107 , - 1778 , - 529 , - 1456 , - 463 , - 1646 , - 909 , - 300 , - 1867 , - 1514 , - 1289 , - 1192 , - 1223 , - 1382 , - 1669 , - 36 , - 579 , - 1250 , - 1 , - 928 , - 1983 , - 1118 , - 381 , - 1820 , - 1339 , - 986 , - 761 , - 664 , - 695 , - 854 , - 1141 , - 1556 , - 51 , - 722 , - 1521 , - 400 , - 1455 , - 590 , - 1901 , - 1292 , - 811 , - 458 , - 233 , - 136 , - 167 , - 326 , - 613 , - 1028 , - 1571 , - 194 , - 993 , - 1920 , - 927 , - 62 , - 1373 , - 764 , - 283 , - 1978 , - 1753 , - 1656 , - 1687 , - 1846 , - 85 , - 500 , - 1043 , - 1714 , - 465 , - 1392 , - 399 , - 1582 , - 845 , - 236 , - 1803 , - 1450 , - 1225 , - 1128 , - 1159 , - 1318 , - 1605 , - 2020 , - 515 , - 1186 , - 1985 , - 864 , - 1919 , - 1054 , - 317 , - 1756 , - 1275 , - 922 , - 697 , - 600 , - 631 , - 790 , - 1077 , - 1492 , - 2035 , - 658 , - 1457 , - 336 , - 1391 , - 526 , - 1837 , - 1228 , - 747 , - 394 , - 169 , - 72 , - 103 , - 262 , - 549 , - 964 , - 1507 , - 130 , - 929 , - 1856 , - 863 , - 2046 , - 1309 , - 700 , - 219 , - 1914 , - 1689 , - 1592 , - 1623 , - 1782 , - 21 , - 436 , - 979 , - 1650 , - 401 , - 1328 , - 335 , - 1518 , - 781 , - 172 , - 1739 , - 1386 , - 1161 , - 1064 , - 1095 , - 1254 , - 1541 , - 1956 , - 451 , - 1122 , - 1921 , - 800 , - 1855 , - 990 , - 253 , - 1692 , - 1211 , - 858 , - 633 , - 536 , - 567 , - 726 , - 1013 , - 1428 , - 1971 , - 594 , - 1393 , - 272 , - 1327 , - 462 , - 1773 , - 1164 , - 683 , - 330 , - 105 , - 8 , - 39 , - 198 , - 485 , - 900 , - 1443 , - 66 , - 865 , - 1792 , - 799 , - 1982 , - 1245 , - 636 , - 155 , - 1850 , - 1625 , - 1528 , - 1559 , - 1718 , - 2005 , - 372 , - 915 , - 1586 , - 337 , - 1264 , - 271 , - 1454 , - 717 , - 108 , - 1675 , - 1322 , - 1097 , - 1000 , - 1031 , - 1190 , - 1477 , - 1892 , - 387 , - 1058 , - 1857 , - 736 , - 1791 , - 926 , - 189 , - 1628 , - 1147 , - 794 , - 569 , - 472 , - 503 , - 662 , - 949 , - 1364 , - 1907 , - 530 , - 1329 , - 208 , - 1263 , - 398 , - 1709 , - 1100 , - 619 , - 266 , - 41 , - 1992 , - 2023 , - 134 , - 421 , - 836 , - 1379 , - 2 , - 801 , - 1728 , - 735 , - 1918 , - 1181 , - 572 , - 91 , - 1786 , - 1561 , - 1464 , - 1495 , - 1654 , - 1941 , - 308 , - 851 , - 1522 , - 273 , - 1200 , - 207 , - 1390 , - 653 , - 44 , - 1611 , - 1258 , - 1033 , - 936 , - 967 , - 1126 , - 1413 , - 1828 , - 323 , - 994 , - 1793 , - 672 , - 1727 , - 862 , - 125 , - 1564 , - 1083 , - 730 , - 505 , - 408 , - 439 , - 598 , - 885 , - 1300 , - 1843 , - 466 , - 1265 , - 144 , - 1199 , - 334 , - 1645 , - 1036 , - 555 , - 202 , - 2025 , - 1928 , - 1959 , - 70 , - 357 , - 772 , - 1315 , - 1986 , - 737 , - 1664 , - 671 , - 1854 , - 1117 , - 508 , - 27 , - 1722 , - 1497 , - 1400 , - 1431 , - 1590 , - 1877 , - 244 , - 787 , - 1458 , - 209 , - 1136 , - 143 , - 1326 , - 589 , - 2028 , - 1547 , - 1194 , - 969 , - 872 , - 903 , - 1062 , - 1349 , - 1764 , - 259 , - 930 , - 1729 , - 608 , - 1663 , - 798 , - 61 , - 1500 , - 1019 , - 666 , - 441 , - 344 , - 375 , - 534 , - 821 , - 1236 , - 1779 , - 402 , - 1201 , - 80 , - 1135 , - 270 , - 1581 , - 972 , - 491 , - 138 , - 1961 , - 1864 , - 1895 , - 6 , - 293 , - 708 , - 1251 , - 1922 , - 673 , - 1600 , - 607 , - 1790 , - 1053 , - 444 , - 2011 , - 1658 , - 1433 , - 1336 , - 1367 , - 1526 , - 1813 , - 180 , - 723 , - 1394 , - 145 , - 1072 , - 79 , - 1262 , - 525 , - 1964 , - 1483 , - 1130 , - 905 , - 808 , - 839 , - 998 , - 1285 , - 1700 , - 195 , - 866 , - 1665 , - 544 , - 1599 , - 734 , - 2045 , - 1436 , - 955 , - 602 , - 377 , - 280 , - 311 , - 470 , - 757 , - 1172 , - 1715 , - 338 , - 1137 , - 16 , - 1071 , - 206 , - 1517 , - 908 , - 427 , - 74 , - 1897 , - 1800 , - 1831 , - 1990 , - 229 , - 644 , - 1187 , - 1858 , - 609 , - 1536 , - 543 , - 1726 , - 989 , - 380 , - 1947 , - 1594 , - 1369 , - 1272 , - 1303 , - 1462 , - 1749 , - 116 , - 659 , - 1330 , - 81 , - 1008 , - 15 , - 1198 , - 461 , - 1900 , - 1419 , - 1066 , - 841 , - 744 , - 775 , - 934 , - 1221 , - 1636 , - 131 , - 802 , - 1601 , - 480 , - 1535 , - 670 , - 1981 , - 1372 , - 891 , - 538 , - 313 , - 216 , - 247 , - 406 , - 693 , - 1108 , - 1651 , - 274 , - 1073 , - 2000 , - 1007 , - 142 , - 1453 , - 844 , - 363 , - 10 , - 1833 , - 1736 , - 1767 , - 1926 , - 165 , - 580 , - 1123 , - 1794 , - 545 , - 1472 , - 479 , - 1662 , - 925 , - 316 , - 1883 , - 1530 , - 1305 , - 1208 , - 1239 , - 1398 , - 1685 , - 52 , - 595 , - 1266 , - 17 , - 944 , - 1999 , - 1134 , - 397 , - 1836 , - 1355 , - 1002 , - 777 , - 680 , - 711 , - 870 , - 1157 , - 1572 , - 67 , - 738 , - 1537 , - 416 , - 1471 , - 606 , - 1917 , - 1308 , - 827 , - 474 , - 249 , - 152 , - 183 , - 342 , - 629 , - 1044 , - 1587 , - 210 , - 1009 , - 1936 , - 943 , - 78 , - 1389 , - 780 , - 299 , - 1994 , - 1769 , - 1672 , - 1703 , - 1862 , - 101 , - 516 , - 1059 , - 1730 , - 481 , - 1408 , - 415 , - 1598 , - 861 , - 252 , - 1819 , - 1466 , - 1241 , - 1144 , - 1175 , - 1334 , - 1621 , - 2036 , - 531 , - 1202 , - 2001 , - 880 , - 1935 , - 1070 , - 333 , - 1772 , - 1291 , - 938 , - 713 , - 616 , - 647 , - 806 , - 1093 , - 1508 , - 3 , - 674 , - 1473 , - 352 , - 1407 , - 542 , - 1853 , - 1244 , - 763 , - 410 , - 185 , - 88 , - 119 , - 278 , - 565 , - 980 , - 1523 , - 146 , - 945 , - 1872 , - 879 , - 14 , - 1325 , - 716 , - 235 , - 1930 , - 1705 , - 1608 , - 1639 , - 1798 , - 37 , - 452 , - 995 , - 1666 , - 417 , - 1344 , - 351 , - 1534 , - 797 , - 188 , - 1755 , - 1402 , - 1177 , - 1080 , - 1111 , - 1270 , - 1557 , - 1972 , - 467 , - 1138 , - 1937 , - 816 , - 1871 , - 1006 , - 269 , - 1708 , - 1227 , - 874 , - 649 , - 552 , - 583 , - 742 , - 1029 , - 1444 , - 1987 , - 610 , - 1409 , - 288 , - 1343 , - 478 , - 1789 , - 1180 , - 699 , - 346 , - 121 , - 24 , - 55 , - 214 , - 501 , - 916 , - 1459 , - 82 , - 881 , - 1808 , - 815 , - 1998 , - 1261 , - 652 , - 171 , - 1866 , - 1641 , - 1544 , - 1575 , - 1734 , - 2021 , - 388 , - 931 , - 1602 , - 353 , - 1280 , - 287 , - 1470 , - 733 , - 124 , - 1691 , - 1338 , - 1113 , - 1016 , - 1047 , - 1206 , - 1493 , - 1908 , - 403 , - 1074 , - 1873 , - 752 , - 1807 , - 942 , - 205 , - 1644 , - 1163 , - 810 , - 585 , - 488 , - 519 , - 678 , - 965 , - 1380 , - 1923 , - 546 , - 1345 , - 224 , - 1279 , - 414 , - 1725 , - 1116 , - 635 , - 282 , - 57 , - 2008 , - 2039 , - 150 , - 437 , - 852 , - 1395 , - 18 , - 817 , - 1744 , - 751 , - 1934 , - 1197 , - 588 , - 107 , - 1802 , - 1577 , - 1480 , - 1511 , - 1670 , - 1957 , - 324 , - 867 , - 1538 , - 289 , - 1216 , - 223 , - 1406 , - 669 , - 60 , - 1627 , - 1274 , - 1049 , - 952 , - 983 , - 1142 , - 1429 , - 1844 , - 339 , - 1010 , - 1809 , - 688 , - 1743 , - 878 , - 141 , - 1580 , - 1099 , - 746 , - 521 , - 424 , - 455 , - 614 , - 901 , - 1316 , - 1859 , - 482 , - 1281 , - 160 , - 1215 , - 350 , - 1661 , - 1052 , - 571 , - 218 , - 2041 , - 1944 , - 1975 , - 86 , - 373 , - 788 , - 1331 , - 2002 , - 753 , - 1680 , - 687 , - 1870 , - 1133 , - 524 , - 43 , - 1738 , - 1513 , - 1416 , - 1447 , - 1606 , - 1893 , - 260 , - 803 , - 1474 , - 225 , - 1152 , - 159 , - 1342 , - 605 , - 2044 , - 1563 , - 1210 , - 985 , - 888 , - 919 , - 1078 , - 1365 , - 1780 , - 275 , - 946 , - 1745 , - 624 , - 1679 , - 814 , - 77 , - 1516 , - 1035 , - 682 , - 457 , - 360 , - 391 , - 550 , - 837 , - 1252 , - 1795 , - 418 , - 1217 , - 96 , - 1151 , - 286 , - 1597 , - 988 , - 507 , - 154 , - 1977 , - 1880 , - 1911 , - 22 , - 309 , - 724 , - 1267 , - 1938 , - 689 , - 1616 , - 623 , - 1806 , - 1069 , - 460 , - 2027 , - 1674 , - 1449 , - 1352 , - 1383 , - 1542 , - 1829 , - 196 , - 739 , - 1410 , - 161 , - 1088 , - 95 , - 1278 , - 541 , - 1980 , - 1499 , - 1146 , - 921 , - 824 , - 855 , - 1014 , - 1301 , - 1716 , - 211 , - 882 , - 1681 , - 560 , - 1615 , - 750 , - 13 , - 1452 , - 971 , - 618 , - 393 , - 296 , - 327 , - 486 , - 773 , - 1188 , - 1731 , - 354 , - 1153 , - 32 , - 1087 , - 222 , - 1533 , - 924 , - 443 , - 90 , - 1913 , - 1816 , - 1847 , - 2006 , - 245 , - 660 , - 1203 , - 1874 , - 625 , - 1552 , - 559 , - 1742 , - 1005 , - 396 , - 1963 , - 1610 , - 1385 , - 1288 , - 1319 , - 1478 , - 1765 , - 132 , - 675 , - 1346 , - 97 , - 1024 , - 31 , - 1214 , - 477 , - 1916 , - 1435 , - 1082 , - 857 , - 760 , - 791 , - 950 , - 1237 , - 1652 , - 147 , - 818 , - 1617 , - 496 , - 1551 , - 686 , - 1997 , - 1388 , - 907 , - 554 , - 329 , - 232 , - 263 , - 422 , - 709 , - 1124 , - 1667 , - 290 , - 1089 , - 2016 , - 1023 , - 158 , - 1469 , - 860 , - 379 , - 26 , - 1849 , - 1752 , - 1783 , - 1942 , - 181 , - 596 , - 1139 , - 1810 , - 561 , - 1488 , - 495 , - 1678 , - 941 , - 332 , - 1899 , - 1546 , - 1321 , - 1224 , - 1255 , - 1414 , - 1701 , - 68 , - 611 , - 1282 , - 33 , - 960 , - 2015 , - 1150 , - 413 , - 1852 , - 1371 , - 1018 , - 793 , - 696 , - 727 , - 886 , - 1173 , - 1588 , - 83 , - 754 , - 1553 , - 432 , - 1487 , - 622 , - 1933 , - 1324 , - 843 , - 490 , - 265 , - 168 , - 199 , - 358 , - 645 , - 1060 , - 1603 , - 226 , - 1025 , - 1952 , - 959 , - 94 , - 1405 , - 796 , - 315 , - 2010 , - 1785 , - 1688 , - 1719 , - 1878 , - 117 , - 532 , - 1075 , - 1746 , - 497 , - 1424 , - 431 , - 1614 , - 877 , - 268 , - 1835 , - 1482 , - 1257 , - 1160 , - 1191 , - 1350 , - 1637 , - 4 , - 547 , - 1218 , - 2017 , - 896 , - 1951 , - 1086 , - 349 , - 1788 , - 1307 , - 954 , - 729 , - 632 , - 663 , - 822 , - 1109 , - 1524 , - 19 , - 690 , - 1489 , - 368 , - 1423 , - 558 , - 1869 , - 1260 , - 779 , - 426 , - 201 , - 104 , - 135 , - 294 , - 581 , - 996 , - 1539 , - 162 , - 961 , - 1888 , - 895 , - 30 , - 1341 , - 732 , - 251 , - 1946 , - 1721 , - 1624 , - 1655 , - 1814 , - 53 , - 468 , - 1011 , - 1682 , - 433 , - 1360 , - 367 , - 1550 , - 813 , - 204 , - 1771 , - 1418 , - 1193 , - 1096 , - 1127 , - 1286 , - 1573 , - 1988 , - 483 , - 1154 , - 1953 , - 832 , - 1887 , - 1022 , - 285 , - 1724 , - 1243 , - 890 , - 665 , - 568 , - 599 , - 758 , - 1045 , - 1460 , - 2003 , - 626 , - 1425 , - 304 , - 1359 , - 494 , - 1805 , - 1196 , - 715 , - 362 , - 137 , - 40 , - 71 , - 230 , - 517 , - 932 , - 1475 , - 98 , - 897 , - 1824 , - 831 , - 2014 , - 1277 , - 668 , - 187 , - 1882 , - 1657 , - 1560 , - 1591 , - 1750 , - 2037 , - 404 , - 947 , - 1618 , - 369 , - 1296 , - 303 , - 1486 , - 749 , - 140 , - 1707 , - 1354 , - 1129 , - 1032 , - 1063 , - 1222 , - 1509 , - 1924 , - 419 , - 1090 , - 1889 , - 768 , - 1823 , - 958 , - 221 , - 1660 , - 1179 , - 826 , - 601 , - 504 , - 535 , - 694 , - 981 , - 1396 , - 1939 , - 562 , - 1361 , - 240 , - 1295 , - 430 , - 1741 , - 1132 , - 651 , - 298 , - 73 , - 2024 , - 7 , - 166 , - 453 , - 868 , - 1411 , - 34 , - 833 , - 1760 , - 767 , - 1950 , - 1213 , - 604 , - 123 , - 1818 , - 1593 , - 1496 , - 1527 , - 1686 , - 1973 , - 340 , - 883 , - 1554 , - 305 , - 1232 , - 239 , - 1422 , - 685 , - 76 , - 1643 , - 1290 , - 1065 , - 968 , - 999 , - 1158 , - 1445 , - 1860 , - 355 , - 1026 , - 1825 , - 704 , - 1759 , - 894 , - 157 , - 1596 , - 1115 , - 762 , - 537 , - 440 , - 471 , - 630 , - 917 , - 1332 , - 1875 , - 498 , - 1297 , - 176 , - 1231 , - 366 , - 1677 , - 1068 , - 587 , - 234 , - 9 , - 1960 , - 1991 , - 102 , - 389 , - 804 , - 1347 , - 2018 , - 769 , - 1696 , - 703 , - 1886 , - 1149 , - 540 , - 59 , - 1754 , - 1529 , - 1432 , - 1463 , - 1622 , - 1909 , - 276 , - 819 , - 1490 , - 241 , - 1168 , - 175 , - 1358 , - 621 , - 12 , - 1579 , - 1226 , - 1001 , - 904 , - 935 , - 1094 , - 1381 , - 1796 , - 291 , - 962 , - 1761 , - 640 , - 1695 , - 830 , - 93 , - 1532 , - 1051 , - 698 , - 473 , - 376 , - 407 , - 566 , - 853 , - 1268 , - 1811 , - 434 , - 1233 , - 112 , - 1167 , - 302 , - 1613 , - 1004 , - 523 , - 170 , - 1993 , - 1896 , - 1927 , - 38 , - 325 , - 740 , - 1283 , - 1954 , - 705 , - 1632 , - 639 , - 1822 , - 1085 , - 476 , - 2043 , - 1690 , - 1465 , - 1368 , - 1399 , - 1558 , - 1845 , - 212 , - 755 , - 1426 , - 177 , - 1104 , - 111 , - 1294 , - 557 , - 1996 , - 1515 , - 1162 , - 937 , - 840 , - 871 , - 1030 , - 1317 , - 1732 , - 227 , - 898 , - 1697 , - 576 , - 1631 , - 766 , - 29 , - 1468 , - 987 , - 634 , - 409 , - 312 , - 343 , - 502 , - 789 , - 1204 , - 1747 , - 370 , - 1169 , - 48 , - 1103 , - 238 , - 1549 , - 940 , - 459 , - 106 , - 1929 , - 1832 , - 1863 , - 2022 , - 261 , - 676 , - 1219 , - 1890 , - 641 , - 1568 , - 575 , - 1758 , - 1021 , - 412 , - 1979 , - 1626 , - 1401 , - 1304 , - 1335 , - 1494 , - 1781 , - 148 , - 691 , - 1362 , - 113 , - 1040 , - 47 , - 1230 , - 493 , - 1932 , - 1451 , - 1098 , - 873 , - 776 , - 807 , - 966 , - 1253 , - 1668 , - 163 , - 834 , - 1633 , - 512 , - 1567 , - 702 , - 2013 , - 1404 , - 923 , - 570 , - 345 , - 248 , - 279 , - 438 , - 725 , - 1140 , - 1683 , - 306 , - 1105 , - 2032 , - 1039 , - 174 , - 1485 , - 876 , - 395 , - 42 , - 1865 , - 1768 , - 1799 , - 1958 , - 197 , - 612 , - 1155 , - 1826 , - 577 , - 1504 , - 511 , - 1694 , - 957 , - 348 , - 1915 , - 1562 , - 1337 , - 1240 , - 1271 , - 1430 , - 1717 , - 84 , - 627 , - 1298 , - 49 , - 976 , - 2031 , - 1166 , - 429 , - 1868 , - 1387 , - 1034 , - 809 , - 712 , - 743 , - 902 , - 1189 , - 1604 , - 99 , - 770 , - 1569 , - 448 , - 1503 , - 638 , - 1949 , - 1340 , - 859 , - 506 , - 281 , - 184 , - 215 , - 374 , - 661 , - 1076 , - 1619 , - 242 , - 1041 , - 1968 , - 975 , - 110 , - 1421 , - 812 , - 331 , - 2026 , - 1801 , - 1704 , - 1735 , - 1894 , - 133 , - 548 , - 1091 , - 1762 , - 513 , - 1440 , - 447 , - 1630 , - 893 , - 284 , - 1851 , - 1498 , - 1273 , - 1176 , - 1207 , - 1366 , - 1653 , - 20 , - 563 , - 1234 , - 2033 , - 912 , - 1967 , - 1102 , - 365 , - 1804 , - 1323 , - 970 , - 745 , - 648 , - 679 , - 838 , - 1125 , - 1540 , - 35 , - 706 , - 1505 , - 384 , - 1439 , - 574 , - 1885 , - 1276 , - 795 , - 442 , - 217 , - 120 , - 151 , - 310 , - 597 , - 1012 , - 1555 , - 178 , - 977 , - 1904 , - 911 , - 46 , - 1357 , - 748 , - 267 , - 1962 , - 1737 , - 1640 , - 1671 , - 1830 , - 69 , - 484 , - 1027 , - 1698 , - 449 , - 1376 , - 383 , - 1566 , - 829 , - 220 , - 1787 , - 1434 , - 1209 , - 1112 , - 1143 , - 1302 , - 1589 , - 2004 , - 499 , - 1170 , - 1969 , - 848 , - 1903 , - 1038 , - 301 , - 1740 , - 1259 , - 906 , - 681 , - 584 , - 615 , - 774 , - 1061 , - 1476 , - 2019 , - 642 , - 1441 , - 320 , - 1375 , - 510 , - 1821 , - 1212 , - 731 , - 378 , - 153 , - 56 , - 87 , - 246 , - 533 , - 948 , - 1491 , - 114 , - 913 , - 1840 , - 847 , - 2030 , - 1293 , - 684 , - 203 , - 1898 , - 1673 , - 1576 , - 1607 , - 1766 , - 5 , - 420 , - 963 , - 1634 , - 385 , - 1312 , - 319 , - 1502 , - 765 , - 156 , - 1723 , - 1370 , - 1145 , - 1048 , - 1079 , - 1238 , - 1525 , - 1940 , - 435 , - 1106 , - 1905 , - 784 , - 1839 , - 974 , - 237 , - 1676 , - 1195 , - 842 , - 617 , - 520 , - 551 , - 710 , - 997 , - 1412 , - 1955 , - 578 , - 1377 , - 256 , - 1311 , - 446 , - 1757 , - 1148 , - 667 , - 314 , - 89 , - 2040 , - 23 , - 182 , - 469 , - 884 , - 1427 , - 50 , - 849 , - 1776 , - 783 , - 1966 , - 1229 , - 620 , - 139 , - 1834 , - 1609 , - 1512 , - 1543 , - 1702 , - 1989 , - 356 , - 899 , - 1570 , - 321 , - 1248 , - 255 , - 1438 , - 701 , - 92 , - 1659 , - 1306 , - 1081 , - 984 , - 1015 , - 1174 , - 1461 , - 1876 , - 371 , - 1042 , - 1841 , - 720 , - 1775 , - 910 , - 173 , - 1612 , - 1131 , - 778 , - 553 , - 456 , - 487 , - 646 , - 933 , - 1348 , - 1891 , - 514 , - 1313 , - 192 , - 1247 , - 382 , - 1693 , - 1084 , - 603 , - 250 , - 25 , - 1976 , - 2007 , - 118 , - 405 , - 820 , - 1363 , - 2034 , - 785 , - 1712 , - 719 , - 1902 , - 1165 , - 556 , - 75 , - 1770 , - 1545 , - 1448 , - 1479 , - 1638 , - 1925 , - 292 , - 835 , - 1506 , - 257 , - 1184 , - 191 , - 1374 , - 637 , - 28 , - 1595 , - 1242 , - 1017 , - 920 , - 951 , - 1110 , - 1397 , - 1812 , - 307 , - 978 , - 1777 , - 656 , - 1711 , - 846 , - 109 , - 1548 , - 1067 , - 714 , - 489 , - 392 , - 423 , - 582 , - 869 , - 1284 , - 1827 , - 450 , - 1249 , - 128 , - 1183 , - 318 , - 1629 , - 1020 , - 539 , - 186 , - 2009 , - 1912 , - 1943 , - 54 , - 341 , - 756 , - 1299 , - 1970 , - 721 , - 1648 , - 655 , - 1838 , - 1101 , - 492 , - 11 , - 1706 , - 1481 , - 1384 , - 1415 , - 1574 , - 1861 , - 228 , - 771 , - 1442 , - 193 , - 1120 , - 127 , - 1310 , - 573 , - 2012 , - 1531 , - 1178 , - 953 , - 856 , - 887 , - 1046 , - 1333 , - 1748 , - 243 , - 914 , - 1713 , - 592 , - 1647 , - 782 , - 45 , - 1484 , - 1003 , - 650 , - 425 , - 328 , - 359 , - 518 , - 805 , - 1220 , - 1763 , - 386 , - 1185 , - 64 , - 1119 , - 254 , - 1565 , - 956 , - 475 , - 122 , - 1945 , - 1848 , - 1879 , - 2038 , - 277 , - 692 , - 1235 , - 1906 , - 657 , - 1584 , - 591 , - 1774 , - 1037 , - 428 , - 1995 , - 1642 , - 1417 , - 1320 , - 1351 , - 1510 , - 1797 , - 164 , - 707 , - 1378 , - 129 , - 1056 , - 63 , - 1246 , - 509 , - 1948 , - 1467 , - 1114 , - 889 , - 792 , - 823 , - 982 , - 1269 , - 1684 , - 179 , - 850 , - 1649 , - 528 , - 1583 , - 718 , - 2029 , - 1420 , - 939 , - 586 , - 361 , - 264 , - 295 , - 454 , - 741 , - 1156 , - 1699 , - 322 , - 1121 , - 0 , - 1487 , - 730 , - 369 , - 932 , - 835 , - 606 , - 773 , - 1864 , - 183 , - 482 , - 1177 , - 684 , - 1643 , - 358 , - 1581 , - 1616 , - 991 , - 234 , - 1985 , - 436 , - 339 , - 110 , - 277 , - 1368 , - 1799 , - 2098 , - 681 , - 188 , - 1147 , - 1974 , - 1085 , - 1120 , - 495 , - 1850 , - 1489 , - 2052 , - 1955 , - 1726 , - 1893 , - 872 , - 1303 , - 1602 , - 185 , - 1804 , - 651 , - 1478 , - 589 , - 624 , - 2111 , - 1354 , - 993 , - 1556 , - 1459 , - 1230 , - 1397 , - 376 , - 807 , - 1106 , - 1801 , - 1308 , - 155 , - 982 , - 93 , - 128 , - 1615 , - 858 , - 497 , - 1060 , - 963 , - 734 , - 901 , - 1992 , - 311 , - 610 , - 1305 , - 812 , - 1771 , - 486 , - 1709 , - 1744 , - 1119 , - 362 , - 1 , - 564 , - 467 , - 238 , - 405 , - 1496 , - 1927 , - 114 , - 809 , - 316 , - 1275 , - 2102 , - 1213 , - 1248 , - 623 , - 1978 , - 1617 , - 68 , - 2083 , - 1854 , - 2021 , - 1000 , - 1431 , - 1730 , - 313 , - 1932 , - 779 , - 1606 , - 717 , - 752 , - 127 , - 1482 , - 1121 , - 1684 , - 1587 , - 1358 , - 1525 , - 504 , - 935 , - 1234 , - 1929 , - 1436 , - 283 , - 1110 , - 221 , - 256 , - 1743 , - 986 , - 625 , - 1188 , - 1091 , - 862 , - 1029 , - 8 , - 439 , - 738 , - 1433 , - 940 , - 1899 , - 614 , - 1837 , - 1872 , - 1247 , - 490 , - 129 , - 692 , - 595 , - 366 , - 533 , - 1624 , - 2055 , - 242 , - 937 , - 444 , - 1403 , - 118 , - 1341 , - 1376 , - 751 , - 2106 , - 1745 , - 196 , - 99 , - 1982 , - 37 , - 1128 , - 1559 , - 1858 , - 441 , - 2060 , - 907 , - 1734 , - 845 , - 880 , - 255 , - 1610 , - 1249 , - 1812 , - 1715 , - 1486 , - 1653 , - 632 , - 1063 , - 1362 , - 2057 , - 1564 , - 411 , - 1238 , - 349 , - 384 , - 1871 , - 1114 , - 753 , - 1316 , - 1219 , - 990 , - 1157 , - 136 , - 567 , - 866 , - 1561 , - 1068 , - 2027 , - 742 , - 1965 , - 2000 , - 1375 , - 618 , - 257 , - 820 , - 723 , - 494 , - 661 , - 1752 , - 71 , - 370 , - 1065 , - 572 , - 1531 , - 246 , - 1469 , - 1504 , - 879 , - 122 , - 1873 , - 324 , - 227 , - 2110 , - 165 , - 1256 , - 1687 , - 1986 , - 569 , - 76 , - 1035 , - 1862 , - 973 , - 1008 , - 383 , - 1738 , - 1377 , - 1940 , - 1843 , - 1614 , - 1781 , - 760 , - 1191 , - 1490 , - 73 , - 1692 , - 539 , - 1366 , - 477 , - 512 , - 1999 , - 1242 , - 881 , - 1444 , - 1347 , - 1118 , - 1285 , - 264 , - 695 , - 994 , - 1689 , - 1196 , - 43 , - 870 , - 2093 , - 16 , - 1503 , - 746 , - 385 , - 948 , - 851 , - 622 , - 789 , - 1880 , - 199 , - 498 , - 1193 , - 700 , - 1659 , - 374 , - 1597 , - 1632 , - 1007 , - 250 , - 2001 , - 452 , - 355 , - 126 , - 293 , - 1384 , - 1815 , - 2 , - 697 , - 204 , - 1163 , - 1990 , - 1101 , - 1136 , - 511 , - 1866 , - 1505 , - 2068 , - 1971 , - 1742 , - 1909 , - 888 , - 1319 , - 1618 , - 201 , - 1820 , - 667 , - 1494 , - 605 , - 640 , - 15 , - 1370 , - 1009 , - 1572 , - 1475 , - 1246 , - 1413 , - 392 , - 823 , - 1122 , - 1817 , - 1324 , - 171 , - 998 , - 109 , - 144 , - 1631 , - 874 , - 513 , - 1076 , - 979 , - 750 , - 917 , - 2008 , - 327 , - 626 , - 1321 , - 828 , - 1787 , - 502 , - 1725 , - 1760 , - 1135 , - 378 , - 17 , - 580 , - 483 , - 254 , - 421 , - 1512 , - 1943 , - 130 , - 825 , - 332 , - 1291 , - 6 , - 1229 , - 1264 , - 639 , - 1994 , - 1633 , - 84 , - 2099 , - 1870 , - 2037 , - 1016 , - 1447 , - 1746 , - 329 , - 1948 , - 795 , - 1622 , - 733 , - 768 , - 143 , - 1498 , - 1137 , - 1700 , - 1603 , - 1374 , - 1541 , - 520 , - 951 , - 1250 , - 1945 , - 1452 , - 299 , - 1126 , - 237 , - 272 , - 1759 , - 1002 , - 641 , - 1204 , - 1107 , - 878 , - 1045 , - 24 , - 455 , - 754 , - 1449 , - 956 , - 1915 , - 630 , - 1853 , - 1888 , - 1263 , - 506 , - 145 , - 708 , - 611 , - 382 , - 549 , - 1640 , - 2071 , - 258 , - 953 , - 460 , - 1419 , - 134 , - 1357 , - 1392 , - 767 , - 10 , - 1761 , - 212 , - 115 , - 1998 , - 53 , - 1144 , - 1575 , - 1874 , - 457 , - 2076 , - 923 , - 1750 , - 861 , - 896 , - 271 , - 1626 , - 1265 , - 1828 , - 1731 , - 1502 , - 1669 , - 648 , - 1079 , - 1378 , - 2073 , - 1580 , - 427 , - 1254 , - 365 , - 400 , - 1887 , - 1130 , - 769 , - 1332 , - 1235 , - 1006 , - 1173 , - 152 , - 583 , - 882 , - 1577 , - 1084 , - 2043 , - 758 , - 1981 , - 2016 , - 1391 , - 634 , - 273 , - 836 , - 739 , - 510 , - 677 , - 1768 , - 87 , - 386 , - 1081 , - 588 , - 1547 , - 262 , - 1485 , - 1520 , - 895 , - 138 , - 1889 , - 340 , - 243 , - 14 , - 181 , - 1272 , - 1703 , - 2002 , - 585 , - 92 , - 1051 , - 1878 , - 989 , - 1024 , - 399 , - 1754 , - 1393 , - 1956 , - 1859 , - 1630 , - 1797 , - 776 , - 1207 , - 1506 , - 89 , - 1708 , - 555 , - 1382 , - 493 , - 528 , - 2015 , - 1258 , - 897 , - 1460 , - 1363 , - 1134 , - 1301 , - 280 , - 711 , - 1010 , - 1705 , - 1212 , - 59 , - 886 , - 2109 , - 32 , - 1519 , - 762 , - 401 , - 964 , - 867 , - 638 , - 805 , - 1896 , - 215 , - 514 , - 1209 , - 716 , - 1675 , - 390 , - 1613 , - 1648 , - 1023 , - 266 , - 2017 , - 468 , - 371 , - 142 , - 309 , - 1400 , - 1831 , - 18 , - 713 , - 220 , - 1179 , - 2006 , - 1117 , - 1152 , - 527 , - 1882 , - 1521 , - 2084 , - 1987 , - 1758 , - 1925 , - 904 , - 1335 , - 1634 , - 217 , - 1836 , - 683 , - 1510 , - 621 , - 656 , - 31 , - 1386 , - 1025 , - 1588 , - 1491 , - 1262 , - 1429 , - 408 , - 839 , - 1138 , - 1833 , - 1340 , - 187 , - 1014 , - 125 , - 160 , - 1647 , - 890 , - 529 , - 1092 , - 995 , - 766 , - 933 , - 2024 , - 343 , - 642 , - 1337 , - 844 , - 1803 , - 518 , - 1741 , - 1776 , - 1151 , - 394 , - 33 , - 596 , - 499 , - 270 , - 437 , - 1528 , - 1959 , - 146 , - 841 , - 348 , - 1307 , - 22 , - 1245 , - 1280 , - 655 , - 2010 , - 1649 , - 100 , - 3 , - 1886 , - 2053 , - 1032 , - 1463 , - 1762 , - 345 , - 1964 , - 811 , - 1638 , - 749 , - 784 , - 159 , - 1514 , - 1153 , - 1716 , - 1619 , - 1390 , - 1557 , - 536 , - 967 , - 1266 , - 1961 , - 1468 , - 315 , - 1142 , - 253 , - 288 , - 1775 , - 1018 , - 657 , - 1220 , - 1123 , - 894 , - 1061 , - 40 , - 471 , - 770 , - 1465 , - 972 , - 1931 , - 646 , - 1869 , - 1904 , - 1279 , - 522 , - 161 , - 724 , - 627 , - 398 , - 565 , - 1656 , - 2087 , - 274 , - 969 , - 476 , - 1435 , - 150 , - 1373 , - 1408 , - 783 , - 26 , - 1777 , - 228 , - 131 , - 2014 , - 69 , - 1160 , - 1591 , - 1890 , - 473 , - 2092 , - 939 , - 1766 , - 877 , - 912 , - 287 , - 1642 , - 1281 , - 1844 , - 1747 , - 1518 , - 1685 , - 664 , - 1095 , - 1394 , - 2089 , - 1596 , - 443 , - 1270 , - 381 , - 416 , - 1903 , - 1146 , - 785 , - 1348 , - 1251 , - 1022 , - 1189 , - 168 , - 599 , - 898 , - 1593 , - 1100 , - 2059 , - 774 , - 1997 , - 2032 , - 1407 , - 650 , - 289 , - 852 , - 755 , - 526 , - 693 , - 1784 , - 103 , - 402 , - 1097 , - 604 , - 1563 , - 278 , - 1501 , - 1536 , - 911 , - 154 , - 1905 , - 356 , - 259 , - 30 , - 197 , - 1288 , - 1719 , - 2018 , - 601 , - 108 , - 1067 , - 1894 , - 1005 , - 1040 , - 415 , - 1770 , - 1409 , - 1972 , - 1875 , - 1646 , - 1813 , - 792 , - 1223 , - 1522 , - 105 , - 1724 , - 571 , - 1398 , - 509 , - 544 , - 2031 , - 1274 , - 913 , - 1476 , - 1379 , - 1150 , - 1317 , - 296 , - 727 , - 1026 , - 1721 , - 1228 , - 75 , - 902 , - 13 , - 48 , - 1535 , - 778 , - 417 , - 980 , - 883 , - 654 , - 821 , - 1912 , - 231 , - 530 , - 1225 , - 732 , - 1691 , - 406 , - 1629 , - 1664 , - 1039 , - 282 , - 2033 , - 484 , - 387 , - 158 , - 325 , - 1416 , - 1847 , - 34 , - 729 , - 236 , - 1195 , - 2022 , - 1133 , - 1168 , - 543 , - 1898 , - 1537 , - 2100 , - 2003 , - 1774 , - 1941 , - 920 , - 1351 , - 1650 , - 233 , - 1852 , - 699 , - 1526 , - 637 , - 672 , - 47 , - 1402 , - 1041 , - 1604 , - 1507 , - 1278 , - 1445 , - 424 , - 855 , - 1154 , - 1849 , - 1356 , - 203 , - 1030 , - 141 , - 176 , - 1663 , - 906 , - 545 , - 1108 , - 1011 , - 782 , - 949 , - 2040 , - 359 , - 658 , - 1353 , - 860 , - 1819 , - 534 , - 1757 , - 1792 , - 1167 , - 410 , - 49 , - 612 , - 515 , - 286 , - 453 , - 1544 , - 1975 , - 162 , - 857 , - 364 , - 1323 , - 38 , - 1261 , - 1296 , - 671 , - 2026 , - 1665 , - 116 , - 19 , - 1902 , - 2069 , - 1048 , - 1479 , - 1778 , - 361 , - 1980 , - 827 , - 1654 , - 765 , - 800 , - 175 , - 1530 , - 1169 , - 1732 , - 1635 , - 1406 , - 1573 , - 552 , - 983 , - 1282 , - 1977 , - 1484 , - 331 , - 1158 , - 269 , - 304 , - 1791 , - 1034 , - 673 , - 1236 , - 1139 , - 910 , - 1077 , - 56 , - 487 , - 786 , - 1481 , - 988 , - 1947 , - 662 , - 1885 , - 1920 , - 1295 , - 538 , - 177 , - 740 , - 643 , - 414 , - 581 , - 1672 , - 2103 , - 290 , - 985 , - 492 , - 1451 , - 166 , - 1389 , - 1424 , - 799 , - 42 , - 1793 , - 244 , - 147 , - 2030 , - 85 , - 1176 , - 1607 , - 1906 , - 489 , - 2108 , - 955 , - 1782 , - 893 , - 928 , - 303 , - 1658 , - 1297 , - 1860 , - 1763 , - 1534 , - 1701 , - 680 , - 1111 , - 1410 , - 2105 , - 1612 , - 459 , - 1286 , - 397 , - 432 , - 1919 , - 1162 , - 801 , - 1364 , - 1267 , - 1038 , - 1205 , - 184 , - 615 , - 914 , - 1609 , - 1116 , - 2075 , - 790 , - 2013 , - 2048 , - 1423 , - 666 , - 305 , - 868 , - 771 , - 542 , - 709 , - 1800 , - 119 , - 418 , - 1113 , - 620 , - 1579 , - 294 , - 1517 , - 1552 , - 927 , - 170 , - 1921 , - 372 , - 275 , - 46 , - 213 , - 1304 , - 1735 , - 2034 , - 617 , - 124 , - 1083 , - 1910 , - 1021 , - 1056 , - 431 , - 1786 , - 1425 , - 1988 , - 1891 , - 1662 , - 1829 , - 808 , - 1239 , - 1538 , - 121 , - 1740 , - 587 , - 1414 , - 525 , - 560 , - 2047 , - 1290 , - 929 , - 1492 , - 1395 , - 1166 , - 1333 , - 312 , - 743 , - 1042 , - 1737 , - 1244 , - 91 , - 918 , - 29 , - 64 , - 1551 , - 794 , - 433 , - 996 , - 899 , - 670 , - 837 , - 1928 , - 247 , - 546 , - 1241 , - 748 , - 1707 , - 422 , - 1645 , - 1680 , - 1055 , - 298 , - 2049 , - 500 , - 403 , - 174 , - 341 , - 1432 , - 1863 , - 50 , - 745 , - 252 , - 1211 , - 2038 , - 1149 , - 1184 , - 559 , - 1914 , - 1553 , - 4 , - 2019 , - 1790 , - 1957 , - 936 , - 1367 , - 1666 , - 249 , - 1868 , - 715 , - 1542 , - 653 , - 688 , - 63 , - 1418 , - 1057 , - 1620 , - 1523 , - 1294 , - 1461 , - 440 , - 871 , - 1170 , - 1865 , - 1372 , - 219 , - 1046 , - 157 , - 192 , - 1679 , - 922 , - 561 , - 1124 , - 1027 , - 798 , - 965 , - 2056 , - 375 , - 674 , - 1369 , - 876 , - 1835 , - 550 , - 1773 , - 1808 , - 1183 , - 426 , - 65 , - 628 , - 531 , - 302 , - 469 , - 1560 , - 1991 , - 178 , - 873 , - 380 , - 1339 , - 54 , - 1277 , - 1312 , - 687 , - 2042 , - 1681 , - 132 , - 35 , - 1918 , - 2085 , - 1064 , - 1495 , - 1794 , - 377 , - 1996 , - 843 , - 1670 , - 781 , - 816 , - 191 , - 1546 , - 1185 , - 1748 , - 1651 , - 1422 , - 1589 , - 568 , - 999 , - 1298 , - 1993 , - 1500 , - 347 , - 1174 , - 285 , - 320 , - 1807 , - 1050 , - 689 , - 1252 , - 1155 , - 926 , - 1093 , - 72 , - 503 , - 802 , - 1497 , - 1004 , - 1963 , - 678 , - 1901 , - 1936 , - 1311 , - 554 , - 193 , - 756 , - 659 , - 430 , - 597 , - 1688 , - 7 , - 306 , - 1001 , - 508 , - 1467 , - 182 , - 1405 , - 1440 , - 815 , - 58 , - 1809 , - 260 , - 163 , - 2046 , - 101 , - 1192 , - 1623 , - 1922 , - 505 , - 12 , - 971 , - 1798 , - 909 , - 944 , - 319 , - 1674 , - 1313 , - 1876 , - 1779 , - 1550 , - 1717 , - 696 , - 1127 , - 1426 , - 9 , - 1628 , - 475 , - 1302 , - 413 , - 448 , - 1935 , - 1178 , - 817 , - 1380 , - 1283 , - 1054 , - 1221 , - 200 , - 631 , - 930 , - 1625 , - 1132 , - 2091 , - 806 , - 2029 , - 2064 , - 1439 , - 682 , - 321 , - 884 , - 787 , - 558 , - 725 , - 1816 , - 135 , - 434 , - 1129 , - 636 , - 1595 , - 310 , - 1533 , - 1568 , - 943 , - 186 , - 1937 , - 388 , - 291 , - 62 , - 229 , - 1320 , - 1751 , - 2050 , - 633 , - 140 , - 1099 , - 1926 , - 1037 , - 1072 , - 447 , - 1802 , - 1441 , - 2004 , - 1907 , - 1678 , - 1845 , - 824 , - 1255 , - 1554 , - 137 , - 1756 , - 603 , - 1430 , - 541 , - 576 , - 2063 , - 1306 , - 945 , - 1508 , - 1411 , - 1182 , - 1349 , - 328 , - 759 , - 1058 , - 1753 , - 1260 , - 107 , - 934 , - 45 , - 80 , - 1567 , - 810 , - 449 , - 1012 , - 915 , - 686 , - 853 , - 1944 , - 263 , - 562 , - 1257 , - 764 , - 1723 , - 438 , - 1661 , - 1696 , - 1071 , - 314 , - 2065 , - 516 , - 419 , - 190 , - 357 , - 1448 , - 1879 , - 66 , - 761 , - 268 , - 1227 , - 2054 , - 1165 , - 1200 , - 575 , - 1930 , - 1569 , - 20 , - 2035 , - 1806 , - 1973 , - 952 , - 1383 , - 1682 , - 265 , - 1884 , - 731 , - 1558 , - 669 , - 704 , - 79 , - 1434 , - 1073 , - 1636 , - 1539 , - 1310 , - 1477 , - 456 , - 887 , - 1186 , - 1881 , - 1388 , - 235 , - 1062 , - 173 , - 208 , - 1695 , - 938 , - 577 , - 1140 , - 1043 , - 814 , - 981 , - 2072 , - 391 , - 690 , - 1385 , - 892 , - 1851 , - 566 , - 1789 , - 1824 , - 1199 , - 442 , - 81 , - 644 , - 547 , - 318 , - 485 , - 1576 , - 2007 , - 194 , - 889 , - 396 , - 1355 , - 70 , - 1293 , - 1328 , - 703 , - 2058 , - 1697 , - 148 , - 51 , - 1934 , - 2101 , - 1080 , - 1511 , - 1810 , - 393 , - 2012 , - 859 , - 1686 , - 797 , - 832 , - 207 , - 1562 , - 1201 , - 1764 , - 1667 , - 1438 , - 1605 , - 584 , - 1015 , - 1314 , - 2009 , - 1516 , - 363 , - 1190 , - 301 , - 336 , - 1823 , - 1066 , - 705 , - 1268 , - 1171 , - 942 , - 1109 , - 88 , - 519 , - 818 , - 1513 , - 1020 , - 1979 , - 694 , - 1917 , - 1952 , - 1327 , - 570 , - 209 , - 772 , - 675 , - 446 , - 613 , - 1704 , - 23 , - 322 , - 1017 , - 524 , - 1483 , - 198 , - 1421 , - 1456 , - 831 , - 74 , - 1825 , - 276 , - 179 , - 2062 , - 117 , - 1208 , - 1639 , - 1938 , - 521 , - 28 , - 987 , - 1814 , - 925 , - 960 , - 335 , - 1690 , - 1329 , - 1892 , - 1795 , - 1566 , - 1733 , - 712 , - 1143 , - 1442 , - 25 , - 1644 , - 491 , - 1318 , - 429 , - 464 , - 1951 , - 1194 , - 833 , - 1396 , - 1299 , - 1070 , - 1237 , - 216 , - 647 , - 946 , - 1641 , - 1148 , - 2107 , - 822 , - 2045 , - 2080 , - 1455 , - 698 , - 337 , - 900 , - 803 , - 574 , - 741 , - 1832 , - 151 , - 450 , - 1145 , - 652 , - 1611 , - 326 , - 1549 , - 1584 , - 959 , - 202 , - 1953 , - 404 , - 307 , - 78 , - 245 , - 1336 , - 1767 , - 2066 , - 649 , - 156 , - 1115 , - 1942 , - 1053 , - 1088 , - 463 , - 1818 , - 1457 , - 2020 , - 1923 , - 1694 , - 1861 , - 840 , - 1271 , - 1570 , - 153 , - 1772 , - 619 , - 1446 , - 557 , - 592 , - 2079 , - 1322 , - 961 , - 1524 , - 1427 , - 1198 , - 1365 , - 344 , - 775 , - 1074 , - 1769 , - 1276 , - 123 , - 950 , - 61 , - 96 , - 1583 , - 826 , - 465 , - 1028 , - 931 , - 702 , - 869 , - 1960 , - 279 , - 578 , - 1273 , - 780 , - 1739 , - 454 , - 1677 , - 1712 , - 1087 , - 330 , - 2081 , - 532 , - 435 , - 206 , - 373 , - 1464 , - 1895 , - 82 , - 777 , - 284 , - 1243 , - 2070 , - 1181 , - 1216 , - 591 , - 1946 , - 1585 , - 36 , - 2051 , - 1822 , - 1989 , - 968 , - 1399 , - 1698 , - 281 , - 1900 , - 747 , - 1574 , - 685 , - 720 , - 95 , - 1450 , - 1089 , - 1652 , - 1555 , - 1326 , - 1493 , - 472 , - 903 , - 1202 , - 1897 , - 1404 , - 251 , - 1078 , - 189 , - 224 , - 1711 , - 954 , - 593 , - 1156 , - 1059 , - 830 , - 997 , - 2088 , - 407 , - 706 , - 1401 , - 908 , - 1867 , - 582 , - 1805 , - 1840 , - 1215 , - 458 , - 97 , - 660 , - 563 , - 334 , - 501 , - 1592 , - 2023 , - 210 , - 905 , - 412 , - 1371 , - 86 , - 1309 , - 1344 , - 719 , - 2074 , - 1713 , - 164 , - 67 , - 1950 , - 5 , - 1096 , - 1527 , - 1826 , - 409 , - 2028 , - 875 , - 1702 , - 813 , - 848 , - 223 , - 1578 , - 1217 , - 1780 , - 1683 , - 1454 , - 1621 , - 600 , - 1031 , - 1330 , - 2025 , - 1532 , - 379 , - 1206 , - 317 , - 352 , - 1839 , - 1082 , - 721 , - 1284 , - 1187 , - 958 , - 1125 , - 104 , - 535 , - 834 , - 1529 , - 1036 , - 1995 , - 710 , - 1933 , - 1968 , - 1343 , - 586 , - 225 , - 788 , - 691 , - 462 , - 629 , - 1720 , - 39 , - 338 , - 1033 , - 540 , - 1499 , - 214 , - 1437 , - 1472 , - 847 , - 90 , - 1841 , - 292 , - 195 , - 2078 , - 133 , - 1224 , - 1655 , - 1954 , - 537 , - 44 , - 1003 , - 1830 , - 941 , - 976 , - 351 , - 1706 , - 1345 , - 1908 , - 1811 , - 1582 , - 1749 , - 728 , - 1159 , - 1458 , - 41 , - 1660 , - 507 , - 1334 , - 445 , - 480 , - 1967 , - 1210 , - 849 , - 1412 , - 1315 , - 1086 , - 1253 , - 232 , - 663 , - 962 , - 1657 , - 1164 , - 11 , - 838 , - 2061 , - 2096 , - 1471 , - 714 , - 353 , - 916 , - 819 , - 590 , - 757 , - 1848 , - 167 , - 466 , - 1161 , - 668 , - 1627 , - 342 , - 1565 , - 1600 , - 975 , - 218 , - 1969 , - 420 , - 323 , - 94 , - 261 , - 1352 , - 1783 , - 2082 , - 665 , - 172 , - 1131 , - 1958 , - 1069 , - 1104 , - 479 , - 1834 , - 1473 , - 2036 , - 1939 , - 1710 , - 1877 , - 856 , - 1287 , - 1586 , - 169 , - 1788 , - 635 , - 1462 , - 573 , - 608 , - 2095 , - 1338 , - 977 , - 1540 , - 1443 , - 1214 , - 1381 , - 360 , - 791 , - 1090 , - 1785 , - 1292 , - 139 , - 966 , - 77 , - 112 , - 1599 , - 842 , - 481 , - 1044 , - 947 , - 718 , - 885 , - 1976 , - 295 , - 594 , - 1289 , - 796 , - 1755 , - 470 , - 1693 , - 1728 , - 1103 , - 346 , - 2097 , - 548 , - 451 , - 222 , - 389 , - 1480 , - 1911 , - 98 , - 793 , - 300 , - 1259 , - 2086 , - 1197 , - 1232 , - 607 , - 1962 , - 1601 , - 52 , - 2067 , - 1838 , - 2005 , - 984 , - 1415 , - 1714 , - 297 , - 1916 , - 763 , - 1590 , - 701 , - 736 , - 111 , - 1466 , - 1105 , - 1668 , - 1571 , - 1342 , - 1509 , - 488 , - 919 , - 1218 , - 1913 , - 1420 , - 267 , - 1094 , - 205 , - 240 , - 1727 , - 970 , - 609 , - 1172 , - 1075 , - 846 , - 1013 , - 2104 , - 423 , - 722 , - 1417 , - 924 , - 1883 , - 598 , - 1821 , - 1856 , - 1231 , - 474 , - 113 , - 676 , - 579 , - 350 , - 517 , - 1608 , - 2039 , - 226 , - 921 , - 428 , - 1387 , - 102 , - 1325 , - 1360 , - 735 , - 2090 , - 1729 , - 180 , - 83 , - 1966 , - 21 , - 1112 , - 1543 , - 1842 , - 425 , - 2044 , - 891 , - 1718 , - 829 , - 864 , - 239 , - 1594 , - 1233 , - 1796 , - 1699 , - 1470 , - 1637 , - 616 , - 1047 , - 1346 , - 2041 , - 1548 , - 395 , - 1222 , - 333 , - 368 , - 1855 , - 1098 , - 737 , - 1300 , - 1203 , - 974 , - 1141 , - 120 , - 551 , - 850 , - 1545 , - 1052 , - 2011 , - 726 , - 1949 , - 1984 , - 1359 , - 602 , - 241 , - 804 , - 707 , - 478 , - 645 , - 1736 , - 55 , - 354 , - 1049 , - 556 , - 1515 , - 230 , - 1453 , - 1488 , - 863 , - 106 , - 1857 , - 308 , - 211 , - 2094 , - 149 , - 1240 , - 1671 , - 1970 , - 553 , - 60 , - 1019 , - 1846 , - 957 , - 992 , - 367 , - 1722 , - 1361 , - 1924 , - 1827 , - 1598 , - 1765 , - 744 , - 1175 , - 1474 , - 57 , - 1676 , - 523 , - 1350 , - 461 , - 496 , - 1983 , - 1226 , - 865 , - 1428 , - 1331 , - 1102 , - 1269 , - 248 , - 679 , - 978 , - 1673 , - 1180 , - 27 , - 854 , - 2077 , - 0 , - 171 , - 1702 , - 241 , - 140 , - 1399 , - 1842 , - 1469 , - 280 , - 451 , - 1982 , - 521 , - 420 , - 1679 , - 2122 , - 1749 , - 560 , - 731 , - 86 , - 801 , - 700 , - 1959 , - 226 , - 2029 , - 840 , - 1011 , - 366 , - 1081 , - 980 , - 63 , - 506 , - 133 , - 1120 , - 1291 , - 646 , - 1361 , - 1260 , - 343 , - 786 , - 413 , - 1400 , - 1571 , - 926 , - 1641 , - 1540 , - 623 , - 1066 , - 693 , - 1680 , - 1851 , - 1206 , - 1921 , - 1820 , - 903 , - 1346 , - 973 , - 1960 , - 2131 , - 1486 , - 25 , - 2100 , - 1183 , - 1626 , - 1253 , - 64 , - 235 , - 1766 , - 305 , - 204 , - 1463 , - 1906 , - 1533 , - 344 , - 515 , - 2046 , - 585 , - 484 , - 1743 , - 10 , - 1813 , - 624 , - 795 , - 150 , - 865 , - 764 , - 2023 , - 290 , - 2093 , - 904 , - 1075 , - 430 , - 1145 , - 1044 , - 127 , - 570 , - 197 , - 1184 , - 1355 , - 710 , - 1425 , - 1324 , - 407 , - 850 , - 477 , - 1464 , - 1635 , - 990 , - 1705 , - 1604 , - 687 , - 1130 , - 757 , - 1744 , - 1915 , - 1270 , - 1985 , - 1884 , - 967 , - 1410 , - 1037 , - 2024 , - 19 , - 1550 , - 89 , - 2164 , - 1247 , - 1690 , - 1317 , - 128 , - 299 , - 1830 , - 369 , - 268 , - 1527 , - 1970 , - 1597 , - 408 , - 579 , - 2110 , - 649 , - 548 , - 1807 , - 74 , - 1877 , - 688 , - 859 , - 214 , - 929 , - 828 , - 2087 , - 354 , - 2157 , - 968 , - 1139 , - 494 , - 1209 , - 1108 , - 191 , - 634 , - 261 , - 1248 , - 1419 , - 774 , - 1489 , - 1388 , - 471 , - 914 , - 541 , - 1528 , - 1699 , - 1054 , - 1769 , - 1668 , - 751 , - 1194 , - 821 , - 1808 , - 1979 , - 1334 , - 2049 , - 1948 , - 1031 , - 1474 , - 1101 , - 2088 , - 83 , - 1614 , - 153 , - 52 , - 1311 , - 1754 , - 1381 , - 192 , - 363 , - 1894 , - 433 , - 332 , - 1591 , - 2034 , - 1661 , - 472 , - 643 , - 2174 , - 713 , - 612 , - 1871 , - 138 , - 1941 , - 752 , - 923 , - 278 , - 993 , - 892 , - 2151 , - 418 , - 45 , - 1032 , - 1203 , - 558 , - 1273 , - 1172 , - 255 , - 698 , - 325 , - 1312 , - 1483 , - 838 , - 1553 , - 1452 , - 535 , - 978 , - 605 , - 1592 , - 1763 , - 1118 , - 1833 , - 1732 , - 815 , - 1258 , - 885 , - 1872 , - 2043 , - 1398 , - 2113 , - 2012 , - 1095 , - 1538 , - 1165 , - 2152 , - 147 , - 1678 , - 217 , - 116 , - 1375 , - 1818 , - 1445 , - 256 , - 427 , - 1958 , - 497 , - 396 , - 1655 , - 2098 , - 1725 , - 536 , - 707 , - 62 , - 777 , - 676 , - 1935 , - 202 , - 2005 , - 816 , - 987 , - 342 , - 1057 , - 956 , - 39 , - 482 , - 109 , - 1096 , - 1267 , - 622 , - 1337 , - 1236 , - 319 , - 762 , - 389 , - 1376 , - 1547 , - 902 , - 1617 , - 1516 , - 599 , - 1042 , - 669 , - 1656 , - 1827 , - 1182 , - 1897 , - 1796 , - 879 , - 1322 , - 949 , - 1936 , - 2107 , - 1462 , - 1 , - 2076 , - 1159 , - 1602 , - 1229 , - 40 , - 211 , - 1742 , - 281 , - 180 , - 1439 , - 1882 , - 1509 , - 320 , - 491 , - 2022 , - 561 , - 460 , - 1719 , - 2162 , - 1789 , - 600 , - 771 , - 126 , - 841 , - 740 , - 1999 , - 266 , - 2069 , - 880 , - 1051 , - 406 , - 1121 , - 1020 , - 103 , - 546 , - 173 , - 1160 , - 1331 , - 686 , - 1401 , - 1300 , - 383 , - 826 , - 453 , - 1440 , - 1611 , - 966 , - 1681 , - 1580 , - 663 , - 1106 , - 733 , - 1720 , - 1891 , - 1246 , - 1961 , - 1860 , - 943 , - 1386 , - 1013 , - 2000 , - 2171 , - 1526 , - 65 , - 2140 , - 1223 , - 1666 , - 1293 , - 104 , - 275 , - 1806 , - 345 , - 244 , - 1503 , - 1946 , - 1573 , - 384 , - 555 , - 2086 , - 625 , - 524 , - 1783 , - 50 , - 1853 , - 664 , - 835 , - 190 , - 905 , - 804 , - 2063 , - 330 , - 2133 , - 944 , - 1115 , - 470 , - 1185 , - 1084 , - 167 , - 610 , - 237 , - 1224 , - 1395 , - 750 , - 1465 , - 1364 , - 447 , - 890 , - 517 , - 1504 , - 1675 , - 1030 , - 1745 , - 1644 , - 727 , - 1170 , - 797 , - 1784 , - 1955 , - 1310 , - 2025 , - 1924 , - 1007 , - 1450 , - 1077 , - 2064 , - 59 , - 1590 , - 129 , - 28 , - 1287 , - 1730 , - 1357 , - 168 , - 339 , - 1870 , - 409 , - 308 , - 1567 , - 2010 , - 1637 , - 448 , - 619 , - 2150 , - 689 , - 588 , - 1847 , - 114 , - 1917 , - 728 , - 899 , - 254 , - 969 , - 868 , - 2127 , - 394 , - 21 , - 1008 , - 1179 , - 534 , - 1249 , - 1148 , - 231 , - 674 , - 301 , - 1288 , - 1459 , - 814 , - 1529 , - 1428 , - 511 , - 954 , - 581 , - 1568 , - 1739 , - 1094 , - 1809 , - 1708 , - 791 , - 1234 , - 861 , - 1848 , - 2019 , - 1374 , - 2089 , - 1988 , - 1071 , - 1514 , - 1141 , - 2128 , - 123 , - 1654 , - 193 , - 92 , - 1351 , - 1794 , - 1421 , - 232 , - 403 , - 1934 , - 473 , - 372 , - 1631 , - 2074 , - 1701 , - 512 , - 683 , - 38 , - 753 , - 652 , - 1911 , - 178 , - 1981 , - 792 , - 963 , - 318 , - 1033 , - 932 , - 15 , - 458 , - 85 , - 1072 , - 1243 , - 598 , - 1313 , - 1212 , - 295 , - 738 , - 365 , - 1352 , - 1523 , - 878 , - 1593 , - 1492 , - 575 , - 1018 , - 645 , - 1632 , - 1803 , - 1158 , - 1873 , - 1772 , - 855 , - 1298 , - 925 , - 1912 , - 2083 , - 1438 , - 2153 , - 2052 , - 1135 , - 1578 , - 1205 , - 16 , - 187 , - 1718 , - 257 , - 156 , - 1415 , - 1858 , - 1485 , - 296 , - 467 , - 1998 , - 537 , - 436 , - 1695 , - 2138 , - 1765 , - 576 , - 747 , - 102 , - 817 , - 716 , - 1975 , - 242 , - 2045 , - 856 , - 1027 , - 382 , - 1097 , - 996 , - 79 , - 522 , - 149 , - 1136 , - 1307 , - 662 , - 1377 , - 1276 , - 359 , - 802 , - 429 , - 1416 , - 1587 , - 942 , - 1657 , - 1556 , - 639 , - 1082 , - 709 , - 1696 , - 1867 , - 1222 , - 1937 , - 1836 , - 919 , - 1362 , - 989 , - 1976 , - 2147 , - 1502 , - 41 , - 2116 , - 1199 , - 1642 , - 1269 , - 80 , - 251 , - 1782 , - 321 , - 220 , - 1479 , - 1922 , - 1549 , - 360 , - 531 , - 2062 , - 601 , - 500 , - 1759 , - 26 , - 1829 , - 640 , - 811 , - 166 , - 881 , - 780 , - 2039 , - 306 , - 2109 , - 920 , - 1091 , - 446 , - 1161 , - 1060 , - 143 , - 586 , - 213 , - 1200 , - 1371 , - 726 , - 1441 , - 1340 , - 423 , - 866 , - 493 , - 1480 , - 1651 , - 1006 , - 1721 , - 1620 , - 703 , - 1146 , - 773 , - 1760 , - 1931 , - 1286 , - 2001 , - 1900 , - 983 , - 1426 , - 1053 , - 2040 , - 35 , - 1566 , - 105 , - 4 , - 1263 , - 1706 , - 1333 , - 144 , - 315 , - 1846 , - 385 , - 284 , - 1543 , - 1986 , - 1613 , - 424 , - 595 , - 2126 , - 665 , - 564 , - 1823 , - 90 , - 1893 , - 704 , - 875 , - 230 , - 945 , - 844 , - 2103 , - 370 , - 2173 , - 984 , - 1155 , - 510 , - 1225 , - 1124 , - 207 , - 650 , - 277 , - 1264 , - 1435 , - 790 , - 1505 , - 1404 , - 487 , - 930 , - 557 , - 1544 , - 1715 , - 1070 , - 1785 , - 1684 , - 767 , - 1210 , - 837 , - 1824 , - 1995 , - 1350 , - 2065 , - 1964 , - 1047 , - 1490 , - 1117 , - 2104 , - 99 , - 1630 , - 169 , - 68 , - 1327 , - 1770 , - 1397 , - 208 , - 379 , - 1910 , - 449 , - 348 , - 1607 , - 2050 , - 1677 , - 488 , - 659 , - 14 , - 729 , - 628 , - 1887 , - 154 , - 1957 , - 768 , - 939 , - 294 , - 1009 , - 908 , - 2167 , - 434 , - 61 , - 1048 , - 1219 , - 574 , - 1289 , - 1188 , - 271 , - 714 , - 341 , - 1328 , - 1499 , - 854 , - 1569 , - 1468 , - 551 , - 994 , - 621 , - 1608 , - 1779 , - 1134 , - 1849 , - 1748 , - 831 , - 1274 , - 901 , - 1888 , - 2059 , - 1414 , - 2129 , - 2028 , - 1111 , - 1554 , - 1181 , - 2168 , - 163 , - 1694 , - 233 , - 132 , - 1391 , - 1834 , - 1461 , - 272 , - 443 , - 1974 , - 513 , - 412 , - 1671 , - 2114 , - 1741 , - 552 , - 723 , - 78 , - 793 , - 692 , - 1951 , - 218 , - 2021 , - 832 , - 1003 , - 358 , - 1073 , - 972 , - 55 , - 498 , - 125 , - 1112 , - 1283 , - 638 , - 1353 , - 1252 , - 335 , - 778 , - 405 , - 1392 , - 1563 , - 918 , - 1633 , - 1532 , - 615 , - 1058 , - 685 , - 1672 , - 1843 , - 1198 , - 1913 , - 1812 , - 895 , - 1338 , - 965 , - 1952 , - 2123 , - 1478 , - 17 , - 2092 , - 1175 , - 1618 , - 1245 , - 56 , - 227 , - 1758 , - 297 , - 196 , - 1455 , - 1898 , - 1525 , - 336 , - 507 , - 2038 , - 577 , - 476 , - 1735 , - 2 , - 1805 , - 616 , - 787 , - 142 , - 857 , - 756 , - 2015 , - 282 , - 2085 , - 896 , - 1067 , - 422 , - 1137 , - 1036 , - 119 , - 562 , - 189 , - 1176 , - 1347 , - 702 , - 1417 , - 1316 , - 399 , - 842 , - 469 , - 1456 , - 1627 , - 982 , - 1697 , - 1596 , - 679 , - 1122 , - 749 , - 1736 , - 1907 , - 1262 , - 1977 , - 1876 , - 959 , - 1402 , - 1029 , - 2016 , - 11 , - 1542 , - 81 , - 2156 , - 1239 , - 1682 , - 1309 , - 120 , - 291 , - 1822 , - 361 , - 260 , - 1519 , - 1962 , - 1589 , - 400 , - 571 , - 2102 , - 641 , - 540 , - 1799 , - 66 , - 1869 , - 680 , - 851 , - 206 , - 921 , - 820 , - 2079 , - 346 , - 2149 , - 960 , - 1131 , - 486 , - 1201 , - 1100 , - 183 , - 626 , - 253 , - 1240 , - 1411 , - 766 , - 1481 , - 1380 , - 463 , - 906 , - 533 , - 1520 , - 1691 , - 1046 , - 1761 , - 1660 , - 743 , - 1186 , - 813 , - 1800 , - 1971 , - 1326 , - 2041 , - 1940 , - 1023 , - 1466 , - 1093 , - 2080 , - 75 , - 1606 , - 145 , - 44 , - 1303 , - 1746 , - 1373 , - 184 , - 355 , - 1886 , - 425 , - 324 , - 1583 , - 2026 , - 1653 , - 464 , - 635 , - 2166 , - 705 , - 604 , - 1863 , - 130 , - 1933 , - 744 , - 915 , - 270 , - 985 , - 884 , - 2143 , - 410 , - 37 , - 1024 , - 1195 , - 550 , - 1265 , - 1164 , - 247 , - 690 , - 317 , - 1304 , - 1475 , - 830 , - 1545 , - 1444 , - 527 , - 970 , - 597 , - 1584 , - 1755 , - 1110 , - 1825 , - 1724 , - 807 , - 1250 , - 877 , - 1864 , - 2035 , - 1390 , - 2105 , - 2004 , - 1087 , - 1530 , - 1157 , - 2144 , - 139 , - 1670 , - 209 , - 108 , - 1367 , - 1810 , - 1437 , - 248 , - 419 , - 1950 , - 489 , - 388 , - 1647 , - 2090 , - 1717 , - 528 , - 699 , - 54 , - 769 , - 668 , - 1927 , - 194 , - 1997 , - 808 , - 979 , - 334 , - 1049 , - 948 , - 31 , - 474 , - 101 , - 1088 , - 1259 , - 614 , - 1329 , - 1228 , - 311 , - 754 , - 381 , - 1368 , - 1539 , - 894 , - 1609 , - 1508 , - 591 , - 1034 , - 661 , - 1648 , - 1819 , - 1174 , - 1889 , - 1788 , - 871 , - 1314 , - 941 , - 1928 , - 2099 , - 1454 , - 2169 , - 2068 , - 1151 , - 1594 , - 1221 , - 32 , - 203 , - 1734 , - 273 , - 172 , - 1431 , - 1874 , - 1501 , - 312 , - 483 , - 2014 , - 553 , - 452 , - 1711 , - 2154 , - 1781 , - 592 , - 763 , - 118 , - 833 , - 732 , - 1991 , - 258 , - 2061 , - 872 , - 1043 , - 398 , - 1113 , - 1012 , - 95 , - 538 , - 165 , - 1152 , - 1323 , - 678 , - 1393 , - 1292 , - 375 , - 818 , - 445 , - 1432 , - 1603 , - 958 , - 1673 , - 1572 , - 655 , - 1098 , - 725 , - 1712 , - 1883 , - 1238 , - 1953 , - 1852 , - 935 , - 1378 , - 1005 , - 1992 , - 2163 , - 1518 , - 57 , - 2132 , - 1215 , - 1658 , - 1285 , - 96 , - 267 , - 1798 , - 337 , - 236 , - 1495 , - 1938 , - 1565 , - 376 , - 547 , - 2078 , - 617 , - 516 , - 1775 , - 42 , - 1845 , - 656 , - 827 , - 182 , - 897 , - 796 , - 2055 , - 322 , - 2125 , - 936 , - 1107 , - 462 , - 1177 , - 1076 , - 159 , - 602 , - 229 , - 1216 , - 1387 , - 742 , - 1457 , - 1356 , - 439 , - 882 , - 509 , - 1496 , - 1667 , - 1022 , - 1737 , - 1636 , - 719 , - 1162 , - 789 , - 1776 , - 1947 , - 1302 , - 2017 , - 1916 , - 999 , - 1442 , - 1069 , - 2056 , - 51 , - 1582 , - 121 , - 20 , - 1279 , - 1722 , - 1349 , - 160 , - 331 , - 1862 , - 401 , - 300 , - 1559 , - 2002 , - 1629 , - 440 , - 611 , - 2142 , - 681 , - 580 , - 1839 , - 106 , - 1909 , - 720 , - 891 , - 246 , - 961 , - 860 , - 2119 , - 386 , - 13 , - 1000 , - 1171 , - 526 , - 1241 , - 1140 , - 223 , - 666 , - 293 , - 1280 , - 1451 , - 806 , - 1521 , - 1420 , - 503 , - 946 , - 573 , - 1560 , - 1731 , - 1086 , - 1801 , - 1700 , - 783 , - 1226 , - 853 , - 1840 , - 2011 , - 1366 , - 2081 , - 1980 , - 1063 , - 1506 , - 1133 , - 2120 , - 115 , - 1646 , - 185 , - 84 , - 1343 , - 1786 , - 1413 , - 224 , - 395 , - 1926 , - 465 , - 364 , - 1623 , - 2066 , - 1693 , - 504 , - 675 , - 30 , - 745 , - 644 , - 1903 , - 170 , - 1973 , - 784 , - 955 , - 310 , - 1025 , - 924 , - 7 , - 450 , - 77 , - 1064 , - 1235 , - 590 , - 1305 , - 1204 , - 287 , - 730 , - 357 , - 1344 , - 1515 , - 870 , - 1585 , - 1484 , - 567 , - 1010 , - 637 , - 1624 , - 1795 , - 1150 , - 1865 , - 1764 , - 847 , - 1290 , - 917 , - 1904 , - 2075 , - 1430 , - 2145 , - 2044 , - 1127 , - 1570 , - 1197 , - 8 , - 179 , - 1710 , - 249 , - 148 , - 1407 , - 1850 , - 1477 , - 288 , - 459 , - 1990 , - 529 , - 428 , - 1687 , - 2130 , - 1757 , - 568 , - 739 , - 94 , - 809 , - 708 , - 1967 , - 234 , - 2037 , - 848 , - 1019 , - 374 , - 1089 , - 988 , - 71 , - 514 , - 141 , - 1128 , - 1299 , - 654 , - 1369 , - 1268 , - 351 , - 794 , - 421 , - 1408 , - 1579 , - 934 , - 1649 , - 1548 , - 631 , - 1074 , - 701 , - 1688 , - 1859 , - 1214 , - 1929 , - 1828 , - 911 , - 1354 , - 981 , - 1968 , - 2139 , - 1494 , - 33 , - 2108 , - 1191 , - 1634 , - 1261 , - 72 , - 243 , - 1774 , - 313 , - 212 , - 1471 , - 1914 , - 1541 , - 352 , - 523 , - 2054 , - 593 , - 492 , - 1751 , - 18 , - 1821 , - 632 , - 803 , - 158 , - 873 , - 772 , - 2031 , - 298 , - 2101 , - 912 , - 1083 , - 438 , - 1153 , - 1052 , - 135 , - 578 , - 205 , - 1192 , - 1363 , - 718 , - 1433 , - 1332 , - 415 , - 858 , - 485 , - 1472 , - 1643 , - 998 , - 1713 , - 1612 , - 695 , - 1138 , - 765 , - 1752 , - 1923 , - 1278 , - 1993 , - 1892 , - 975 , - 1418 , - 1045 , - 2032 , - 27 , - 1558 , - 97 , - 2172 , - 1255 , - 1698 , - 1325 , - 136 , - 307 , - 1838 , - 377 , - 276 , - 1535 , - 1978 , - 1605 , - 416 , - 587 , - 2118 , - 657 , - 556 , - 1815 , - 82 , - 1885 , - 696 , - 867 , - 222 , - 937 , - 836 , - 2095 , - 362 , - 2165 , - 976 , - 1147 , - 502 , - 1217 , - 1116 , - 199 , - 642 , - 269 , - 1256 , - 1427 , - 782 , - 1497 , - 1396 , - 479 , - 922 , - 549 , - 1536 , - 1707 , - 1062 , - 1777 , - 1676 , - 759 , - 1202 , - 829 , - 1816 , - 1987 , - 1342 , - 2057 , - 1956 , - 1039 , - 1482 , - 1109 , - 2096 , - 91 , - 1622 , - 161 , - 60 , - 1319 , - 1762 , - 1389 , - 200 , - 371 , - 1902 , - 441 , - 340 , - 1599 , - 2042 , - 1669 , - 480 , - 651 , - 6 , - 721 , - 620 , - 1879 , - 146 , - 1949 , - 760 , - 931 , - 286 , - 1001 , - 900 , - 2159 , - 426 , - 53 , - 1040 , - 1211 , - 566 , - 1281 , - 1180 , - 263 , - 706 , - 333 , - 1320 , - 1491 , - 846 , - 1561 , - 1460 , - 543 , - 986 , - 613 , - 1600 , - 1771 , - 1126 , - 1841 , - 1740 , - 823 , - 1266 , - 893 , - 1880 , - 2051 , - 1406 , - 2121 , - 2020 , - 1103 , - 1546 , - 1173 , - 2160 , - 155 , - 1686 , - 225 , - 124 , - 1383 , - 1826 , - 1453 , - 264 , - 435 , - 1966 , - 505 , - 404 , - 1663 , - 2106 , - 1733 , - 544 , - 715 , - 70 , - 785 , - 684 , - 1943 , - 210 , - 2013 , - 824 , - 995 , - 350 , - 1065 , - 964 , - 47 , - 490 , - 117 , - 1104 , - 1275 , - 630 , - 1345 , - 1244 , - 327 , - 770 , - 397 , - 1384 , - 1555 , - 910 , - 1625 , - 1524 , - 607 , - 1050 , - 677 , - 1664 , - 1835 , - 1190 , - 1905 , - 1804 , - 887 , - 1330 , - 957 , - 1944 , - 2115 , - 1470 , - 9 , - 2084 , - 1167 , - 1610 , - 1237 , - 48 , - 219 , - 1750 , - 289 , - 188 , - 1447 , - 1890 , - 1517 , - 328 , - 499 , - 2030 , - 569 , - 468 , - 1727 , - 2170 , - 1797 , - 608 , - 779 , - 134 , - 849 , - 748 , - 2007 , - 274 , - 2077 , - 888 , - 1059 , - 414 , - 1129 , - 1028 , - 111 , - 554 , - 181 , - 1168 , - 1339 , - 694 , - 1409 , - 1308 , - 391 , - 834 , - 461 , - 1448 , - 1619 , - 974 , - 1689 , - 1588 , - 671 , - 1114 , - 741 , - 1728 , - 1899 , - 1254 , - 1969 , - 1868 , - 951 , - 1394 , - 1021 , - 2008 , - 3 , - 1534 , - 73 , - 2148 , - 1231 , - 1674 , - 1301 , - 112 , - 283 , - 1814 , - 353 , - 252 , - 1511 , - 1954 , - 1581 , - 392 , - 563 , - 2094 , - 633 , - 532 , - 1791 , - 58 , - 1861 , - 672 , - 843 , - 198 , - 913 , - 812 , - 2071 , - 338 , - 2141 , - 952 , - 1123 , - 478 , - 1193 , - 1092 , - 175 , - 618 , - 245 , - 1232 , - 1403 , - 758 , - 1473 , - 1372 , - 455 , - 898 , - 525 , - 1512 , - 1683 , - 1038 , - 1753 , - 1652 , - 735 , - 1178 , - 805 , - 1792 , - 1963 , - 1318 , - 2033 , - 1932 , - 1015 , - 1458 , - 1085 , - 2072 , - 67 , - 1598 , - 137 , - 36 , - 1295 , - 1738 , - 1365 , - 176 , - 347 , - 1878 , - 417 , - 316 , - 1575 , - 2018 , - 1645 , - 456 , - 627 , - 2158 , - 697 , - 596 , - 1855 , - 122 , - 1925 , - 736 , - 907 , - 262 , - 977 , - 876 , - 2135 , - 402 , - 29 , - 1016 , - 1187 , - 542 , - 1257 , - 1156 , - 239 , - 682 , - 309 , - 1296 , - 1467 , - 822 , - 1537 , - 1436 , - 519 , - 962 , - 589 , - 1576 , - 1747 , - 1102 , - 1817 , - 1716 , - 799 , - 1242 , - 869 , - 1856 , - 2027 , - 1382 , - 2097 , - 1996 , - 1079 , - 1522 , - 1149 , - 2136 , - 131 , - 1662 , - 201 , - 100 , - 1359 , - 1802 , - 1429 , - 240 , - 411 , - 1942 , - 481 , - 380 , - 1639 , - 2082 , - 1709 , - 520 , - 691 , - 46 , - 761 , - 660 , - 1919 , - 186 , - 1989 , - 800 , - 971 , - 326 , - 1041 , - 940 , - 23 , - 466 , - 93 , - 1080 , - 1251 , - 606 , - 1321 , - 1220 , - 303 , - 746 , - 373 , - 1360 , - 1531 , - 886 , - 1601 , - 1500 , - 583 , - 1026 , - 653 , - 1640 , - 1811 , - 1166 , - 1881 , - 1780 , - 863 , - 1306 , - 933 , - 1920 , - 2091 , - 1446 , - 2161 , - 2060 , - 1143 , - 1586 , - 1213 , - 24 , - 195 , - 1726 , - 265 , - 164 , - 1423 , - 1866 , - 1493 , - 304 , - 475 , - 2006 , - 545 , - 444 , - 1703 , - 2146 , - 1773 , - 584 , - 755 , - 110 , - 825 , - 724 , - 1983 , - 250 , - 2053 , - 864 , - 1035 , - 390 , - 1105 , - 1004 , - 87 , - 530 , - 157 , - 1144 , - 1315 , - 670 , - 1385 , - 1284 , - 367 , - 810 , - 437 , - 1424 , - 1595 , - 950 , - 1665 , - 1564 , - 647 , - 1090 , - 717 , - 1704 , - 1875 , - 1230 , - 1945 , - 1844 , - 927 , - 1370 , - 997 , - 1984 , - 2155 , - 1510 , - 49 , - 2124 , - 1207 , - 1650 , - 1277 , - 88 , - 259 , - 1790 , - 329 , - 228 , - 1487 , - 1930 , - 1557 , - 368 , - 539 , - 2070 , - 609 , - 508 , - 1767 , - 34 , - 1837 , - 648 , - 819 , - 174 , - 889 , - 788 , - 2047 , - 314 , - 2117 , - 928 , - 1099 , - 454 , - 1169 , - 1068 , - 151 , - 594 , - 221 , - 1208 , - 1379 , - 734 , - 1449 , - 1348 , - 431 , - 874 , - 501 , - 1488 , - 1659 , - 1014 , - 1729 , - 1628 , - 711 , - 1154 , - 781 , - 1768 , - 1939 , - 1294 , - 2009 , - 1908 , - 991 , - 1434 , - 1061 , - 2048 , - 43 , - 1574 , - 113 , - 12 , - 1271 , - 1714 , - 1341 , - 152 , - 323 , - 1854 , - 393 , - 292 , - 1551 , - 1994 , - 1621 , - 432 , - 603 , - 2134 , - 673 , - 572 , - 1831 , - 98 , - 1901 , - 712 , - 883 , - 238 , - 953 , - 852 , - 2111 , - 378 , - 5 , - 992 , - 1163 , - 518 , - 1233 , - 1132 , - 215 , - 658 , - 285 , - 1272 , - 1443 , - 798 , - 1513 , - 1412 , - 495 , - 938 , - 565 , - 1552 , - 1723 , - 1078 , - 1793 , - 1692 , - 775 , - 1218 , - 845 , - 1832 , - 2003 , - 1358 , - 2073 , - 1972 , - 1055 , - 1498 , - 1125 , - 2112 , - 107 , - 1638 , - 177 , - 76 , - 1335 , - 1778 , - 1405 , - 216 , - 387 , - 1918 , - 457 , - 356 , - 1615 , - 2058 , - 1685 , - 496 , - 667 , - 22 , - 737 , - 636 , - 1895 , - 162 , - 1965 , - 776 , - 947 , - 302 , - 1017 , - 916 , - 2175 , - 442 , - 69 , - 1056 , - 1227 , - 582 , - 1297 , - 1196 , - 279 , - 722 , - 349 , - 1336 , - 1507 , - 862 , - 1577 , - 1476 , - 559 , - 1002 , - 629 , - 1616 , - 1787 , - 1142 , - 1857 , - 1756 , - 839 , - 1282 , - 909 , - 1896 , - 2067 , - 1422 , - 2137 , - 2036 , - 1119 , - 1562 , - 1189 , - 0 , - 2029 , - 978 , - 1327 , - 836 , - 1745 , - 1814 , - 1043 , - 1672 , - 1461 , - 410 , - 759 , - 268 , - 1177 , - 1246 , - 475 , - 1104 , - 893 , - 2082 , - 191 , - 1940 , - 609 , - 678 , - 2147 , - 536 , - 325 , - 1514 , - 1863 , - 1372 , - 41 , - 110 , - 1579 , - 2208 , - 1997 , - 946 , - 1295 , - 804 , - 1713 , - 1782 , - 1011 , - 1640 , - 1429 , - 378 , - 727 , - 236 , - 1145 , - 1214 , - 443 , - 1072 , - 861 , - 2050 , - 159 , - 1908 , - 577 , - 646 , - 2115 , - 504 , - 293 , - 1482 , - 1831 , - 1340 , - 9 , - 78 , - 1547 , - 2176 , - 1965 , - 914 , - 1263 , - 772 , - 1681 , - 1750 , - 979 , - 1608 , - 1397 , - 346 , - 695 , - 204 , - 1113 , - 1182 , - 411 , - 1040 , - 829 , - 2018 , - 127 , - 1876 , - 545 , - 614 , - 2083 , - 472 , - 261 , - 1450 , - 1799 , - 1308 , - 2217 , - 46 , - 1515 , - 2144 , - 1933 , - 882 , - 1231 , - 740 , - 1649 , - 1718 , - 947 , - 1576 , - 1365 , - 314 , - 663 , - 172 , - 1081 , - 1150 , - 379 , - 1008 , - 797 , - 1986 , - 95 , - 1844 , - 513 , - 582 , - 2051 , - 440 , - 229 , - 1418 , - 1767 , - 1276 , - 2185 , - 14 , - 1483 , - 2112 , - 1901 , - 850 , - 1199 , - 708 , - 1617 , - 1686 , - 915 , - 1544 , - 1333 , - 282 , - 631 , - 140 , - 1049 , - 1118 , - 347 , - 976 , - 765 , - 1954 , - 63 , - 1812 , - 481 , - 550 , - 2019 , - 408 , - 197 , - 1386 , - 1735 , - 1244 , - 2153 , - 2222 , - 1451 , - 2080 , - 1869 , - 818 , - 1167 , - 676 , - 1585 , - 1654 , - 883 , - 1512 , - 1301 , - 250 , - 599 , - 108 , - 1017 , - 1086 , - 315 , - 944 , - 733 , - 1922 , - 31 , - 1780 , - 449 , - 518 , - 1987 , - 376 , - 165 , - 1354 , - 1703 , - 1212 , - 2121 , - 2190 , - 1419 , - 2048 , - 1837 , - 786 , - 1135 , - 644 , - 1553 , - 1622 , - 851 , - 1480 , - 1269 , - 218 , - 567 , - 76 , - 985 , - 1054 , - 283 , - 912 , - 701 , - 1890 , - 2239 , - 1748 , - 417 , - 486 , - 1955 , - 344 , - 133 , - 1322 , - 1671 , - 1180 , - 2089 , - 2158 , - 1387 , - 2016 , - 1805 , - 754 , - 1103 , - 612 , - 1521 , - 1590 , - 819 , - 1448 , - 1237 , - 186 , - 535 , - 44 , - 953 , - 1022 , - 251 , - 880 , - 669 , - 1858 , - 2207 , - 1716 , - 385 , - 454 , - 1923 , - 312 , - 101 , - 1290 , - 1639 , - 1148 , - 2057 , - 2126 , - 1355 , - 1984 , - 1773 , - 722 , - 1071 , - 580 , - 1489 , - 1558 , - 787 , - 1416 , - 1205 , - 154 , - 503 , - 12 , - 921 , - 990 , - 219 , - 848 , - 637 , - 1826 , - 2175 , - 1684 , - 353 , - 422 , - 1891 , - 280 , - 69 , - 1258 , - 1607 , - 1116 , - 2025 , - 2094 , - 1323 , - 1952 , - 1741 , - 690 , - 1039 , - 548 , - 1457 , - 1526 , - 755 , - 1384 , - 1173 , - 122 , - 471 , - 2220 , - 889 , - 958 , - 187 , - 816 , - 605 , - 1794 , - 2143 , - 1652 , - 321 , - 390 , - 1859 , - 248 , - 37 , - 1226 , - 1575 , - 1084 , - 1993 , - 2062 , - 1291 , - 1920 , - 1709 , - 658 , - 1007 , - 516 , - 1425 , - 1494 , - 723 , - 1352 , - 1141 , - 90 , - 439 , - 2188 , - 857 , - 926 , - 155 , - 784 , - 573 , - 1762 , - 2111 , - 1620 , - 289 , - 358 , - 1827 , - 216 , - 5 , - 1194 , - 1543 , - 1052 , - 1961 , - 2030 , - 1259 , - 1888 , - 1677 , - 626 , - 975 , - 484 , - 1393 , - 1462 , - 691 , - 1320 , - 1109 , - 58 , - 407 , - 2156 , - 825 , - 894 , - 123 , - 752 , - 541 , - 1730 , - 2079 , - 1588 , - 257 , - 326 , - 1795 , - 184 , - 2213 , - 1162 , - 1511 , - 1020 , - 1929 , - 1998 , - 1227 , - 1856 , - 1645 , - 594 , - 943 , - 452 , - 1361 , - 1430 , - 659 , - 1288 , - 1077 , - 26 , - 375 , - 2124 , - 793 , - 862 , - 91 , - 720 , - 509 , - 1698 , - 2047 , - 1556 , - 225 , - 294 , - 1763 , - 152 , - 2181 , - 1130 , - 1479 , - 988 , - 1897 , - 1966 , - 1195 , - 1824 , - 1613 , - 562 , - 911 , - 420 , - 1329 , - 1398 , - 627 , - 1256 , - 1045 , - 2234 , - 343 , - 2092 , - 761 , - 830 , - 59 , - 688 , - 477 , - 1666 , - 2015 , - 1524 , - 193 , - 262 , - 1731 , - 120 , - 2149 , - 1098 , - 1447 , - 956 , - 1865 , - 1934 , - 1163 , - 1792 , - 1581 , - 530 , - 879 , - 388 , - 1297 , - 1366 , - 595 , - 1224 , - 1013 , - 2202 , - 311 , - 2060 , - 729 , - 798 , - 27 , - 656 , - 445 , - 1634 , - 1983 , - 1492 , - 161 , - 230 , - 1699 , - 88 , - 2117 , - 1066 , - 1415 , - 924 , - 1833 , - 1902 , - 1131 , - 1760 , - 1549 , - 498 , - 847 , - 356 , - 1265 , - 1334 , - 563 , - 1192 , - 981 , - 2170 , - 279 , - 2028 , - 697 , - 766 , - 2235 , - 624 , - 413 , - 1602 , - 1951 , - 1460 , - 129 , - 198 , - 1667 , - 56 , - 2085 , - 1034 , - 1383 , - 892 , - 1801 , - 1870 , - 1099 , - 1728 , - 1517 , - 466 , - 815 , - 324 , - 1233 , - 1302 , - 531 , - 1160 , - 949 , - 2138 , - 247 , - 1996 , - 665 , - 734 , - 2203 , - 592 , - 381 , - 1570 , - 1919 , - 1428 , - 97 , - 166 , - 1635 , - 24 , - 2053 , - 1002 , - 1351 , - 860 , - 1769 , - 1838 , - 1067 , - 1696 , - 1485 , - 434 , - 783 , - 292 , - 1201 , - 1270 , - 499 , - 1128 , - 917 , - 2106 , - 215 , - 1964 , - 633 , - 702 , - 2171 , - 560 , - 349 , - 1538 , - 1887 , - 1396 , - 65 , - 134 , - 1603 , - 2232 , - 2021 , - 970 , - 1319 , - 828 , - 1737 , - 1806 , - 1035 , - 1664 , - 1453 , - 402 , - 751 , - 260 , - 1169 , - 1238 , - 467 , - 1096 , - 885 , - 2074 , - 183 , - 1932 , - 601 , - 670 , - 2139 , - 528 , - 317 , - 1506 , - 1855 , - 1364 , - 33 , - 102 , - 1571 , - 2200 , - 1989 , - 938 , - 1287 , - 796 , - 1705 , - 1774 , - 1003 , - 1632 , - 1421 , - 370 , - 719 , - 228 , - 1137 , - 1206 , - 435 , - 1064 , - 853 , - 2042 , - 151 , - 1900 , - 569 , - 638 , - 2107 , - 496 , - 285 , - 1474 , - 1823 , - 1332 , - 1 , - 70 , - 1539 , - 2168 , - 1957 , - 906 , - 1255 , - 764 , - 1673 , - 1742 , - 971 , - 1600 , - 1389 , - 338 , - 687 , - 196 , - 1105 , - 1174 , - 403 , - 1032 , - 821 , - 2010 , - 119 , - 1868 , - 537 , - 606 , - 2075 , - 464 , - 253 , - 1442 , - 1791 , - 1300 , - 2209 , - 38 , - 1507 , - 2136 , - 1925 , - 874 , - 1223 , - 732 , - 1641 , - 1710 , - 939 , - 1568 , - 1357 , - 306 , - 655 , - 164 , - 1073 , - 1142 , - 371 , - 1000 , - 789 , - 1978 , - 87 , - 1836 , - 505 , - 574 , - 2043 , - 432 , - 221 , - 1410 , - 1759 , - 1268 , - 2177 , - 6 , - 1475 , - 2104 , - 1893 , - 842 , - 1191 , - 700 , - 1609 , - 1678 , - 907 , - 1536 , - 1325 , - 274 , - 623 , - 132 , - 1041 , - 1110 , - 339 , - 968 , - 757 , - 1946 , - 55 , - 1804 , - 473 , - 542 , - 2011 , - 400 , - 189 , - 1378 , - 1727 , - 1236 , - 2145 , - 2214 , - 1443 , - 2072 , - 1861 , - 810 , - 1159 , - 668 , - 1577 , - 1646 , - 875 , - 1504 , - 1293 , - 242 , - 591 , - 100 , - 1009 , - 1078 , - 307 , - 936 , - 725 , - 1914 , - 23 , - 1772 , - 441 , - 510 , - 1979 , - 368 , - 157 , - 1346 , - 1695 , - 1204 , - 2113 , - 2182 , - 1411 , - 2040 , - 1829 , - 778 , - 1127 , - 636 , - 1545 , - 1614 , - 843 , - 1472 , - 1261 , - 210 , - 559 , - 68 , - 977 , - 1046 , - 275 , - 904 , - 693 , - 1882 , - 2231 , - 1740 , - 409 , - 478 , - 1947 , - 336 , - 125 , - 1314 , - 1663 , - 1172 , - 2081 , - 2150 , - 1379 , - 2008 , - 1797 , - 746 , - 1095 , - 604 , - 1513 , - 1582 , - 811 , - 1440 , - 1229 , - 178 , - 527 , - 36 , - 945 , - 1014 , - 243 , - 872 , - 661 , - 1850 , - 2199 , - 1708 , - 377 , - 446 , - 1915 , - 304 , - 93 , - 1282 , - 1631 , - 1140 , - 2049 , - 2118 , - 1347 , - 1976 , - 1765 , - 714 , - 1063 , - 572 , - 1481 , - 1550 , - 779 , - 1408 , - 1197 , - 146 , - 495 , - 4 , - 913 , - 982 , - 211 , - 840 , - 629 , - 1818 , - 2167 , - 1676 , - 345 , - 414 , - 1883 , - 272 , - 61 , - 1250 , - 1599 , - 1108 , - 2017 , - 2086 , - 1315 , - 1944 , - 1733 , - 682 , - 1031 , - 540 , - 1449 , - 1518 , - 747 , - 1376 , - 1165 , - 114 , - 463 , - 2212 , - 881 , - 950 , - 179 , - 808 , - 597 , - 1786 , - 2135 , - 1644 , - 313 , - 382 , - 1851 , - 240 , - 29 , - 1218 , - 1567 , - 1076 , - 1985 , - 2054 , - 1283 , - 1912 , - 1701 , - 650 , - 999 , - 508 , - 1417 , - 1486 , - 715 , - 1344 , - 1133 , - 82 , - 431 , - 2180 , - 849 , - 918 , - 147 , - 776 , - 565 , - 1754 , - 2103 , - 1612 , - 281 , - 350 , - 1819 , - 208 , - 2237 , - 1186 , - 1535 , - 1044 , - 1953 , - 2022 , - 1251 , - 1880 , - 1669 , - 618 , - 967 , - 476 , - 1385 , - 1454 , - 683 , - 1312 , - 1101 , - 50 , - 399 , - 2148 , - 817 , - 886 , - 115 , - 744 , - 533 , - 1722 , - 2071 , - 1580 , - 249 , - 318 , - 1787 , - 176 , - 2205 , - 1154 , - 1503 , - 1012 , - 1921 , - 1990 , - 1219 , - 1848 , - 1637 , - 586 , - 935 , - 444 , - 1353 , - 1422 , - 651 , - 1280 , - 1069 , - 18 , - 367 , - 2116 , - 785 , - 854 , - 83 , - 712 , - 501 , - 1690 , - 2039 , - 1548 , - 217 , - 286 , - 1755 , - 144 , - 2173 , - 1122 , - 1471 , - 980 , - 1889 , - 1958 , - 1187 , - 1816 , - 1605 , - 554 , - 903 , - 412 , - 1321 , - 1390 , - 619 , - 1248 , - 1037 , - 2226 , - 335 , - 2084 , - 753 , - 822 , - 51 , - 680 , - 469 , - 1658 , - 2007 , - 1516 , - 185 , - 254 , - 1723 , - 112 , - 2141 , - 1090 , - 1439 , - 948 , - 1857 , - 1926 , - 1155 , - 1784 , - 1573 , - 522 , - 871 , - 380 , - 1289 , - 1358 , - 587 , - 1216 , - 1005 , - 2194 , - 303 , - 2052 , - 721 , - 790 , - 19 , - 648 , - 437 , - 1626 , - 1975 , - 1484 , - 153 , - 222 , - 1691 , - 80 , - 2109 , - 1058 , - 1407 , - 916 , - 1825 , - 1894 , - 1123 , - 1752 , - 1541 , - 490 , - 839 , - 348 , - 1257 , - 1326 , - 555 , - 1184 , - 973 , - 2162 , - 271 , - 2020 , - 689 , - 758 , - 2227 , - 616 , - 405 , - 1594 , - 1943 , - 1452 , - 121 , - 190 , - 1659 , - 48 , - 2077 , - 1026 , - 1375 , - 884 , - 1793 , - 1862 , - 1091 , - 1720 , - 1509 , - 458 , - 807 , - 316 , - 1225 , - 1294 , - 523 , - 1152 , - 941 , - 2130 , - 239 , - 1988 , - 657 , - 726 , - 2195 , - 584 , - 373 , - 1562 , - 1911 , - 1420 , - 89 , - 158 , - 1627 , - 16 , - 2045 , - 994 , - 1343 , - 852 , - 1761 , - 1830 , - 1059 , - 1688 , - 1477 , - 426 , - 775 , - 284 , - 1193 , - 1262 , - 491 , - 1120 , - 909 , - 2098 , - 207 , - 1956 , - 625 , - 694 , - 2163 , - 552 , - 341 , - 1530 , - 1879 , - 1388 , - 57 , - 126 , - 1595 , - 2224 , - 2013 , - 962 , - 1311 , - 820 , - 1729 , - 1798 , - 1027 , - 1656 , - 1445 , - 394 , - 743 , - 252 , - 1161 , - 1230 , - 459 , - 1088 , - 877 , - 2066 , - 175 , - 1924 , - 593 , - 662 , - 2131 , - 520 , - 309 , - 1498 , - 1847 , - 1356 , - 25 , - 94 , - 1563 , - 2192 , - 1981 , - 930 , - 1279 , - 788 , - 1697 , - 1766 , - 995 , - 1624 , - 1413 , - 362 , - 711 , - 220 , - 1129 , - 1198 , - 427 , - 1056 , - 845 , - 2034 , - 143 , - 1892 , - 561 , - 630 , - 2099 , - 488 , - 277 , - 1466 , - 1815 , - 1324 , - 2233 , - 62 , - 1531 , - 2160 , - 1949 , - 898 , - 1247 , - 756 , - 1665 , - 1734 , - 963 , - 1592 , - 1381 , - 330 , - 679 , - 188 , - 1097 , - 1166 , - 395 , - 1024 , - 813 , - 2002 , - 111 , - 1860 , - 529 , - 598 , - 2067 , - 456 , - 245 , - 1434 , - 1783 , - 1292 , - 2201 , - 30 , - 1499 , - 2128 , - 1917 , - 866 , - 1215 , - 724 , - 1633 , - 1702 , - 931 , - 1560 , - 1349 , - 298 , - 647 , - 156 , - 1065 , - 1134 , - 363 , - 992 , - 781 , - 1970 , - 79 , - 1828 , - 497 , - 566 , - 2035 , - 424 , - 213 , - 1402 , - 1751 , - 1260 , - 2169 , - 2238 , - 1467 , - 2096 , - 1885 , - 834 , - 1183 , - 692 , - 1601 , - 1670 , - 899 , - 1528 , - 1317 , - 266 , - 615 , - 124 , - 1033 , - 1102 , - 331 , - 960 , - 749 , - 1938 , - 47 , - 1796 , - 465 , - 534 , - 2003 , - 392 , - 181 , - 1370 , - 1719 , - 1228 , - 2137 , - 2206 , - 1435 , - 2064 , - 1853 , - 802 , - 1151 , - 660 , - 1569 , - 1638 , - 867 , - 1496 , - 1285 , - 234 , - 583 , - 92 , - 1001 , - 1070 , - 299 , - 928 , - 717 , - 1906 , - 15 , - 1764 , - 433 , - 502 , - 1971 , - 360 , - 149 , - 1338 , - 1687 , - 1196 , - 2105 , - 2174 , - 1403 , - 2032 , - 1821 , - 770 , - 1119 , - 628 , - 1537 , - 1606 , - 835 , - 1464 , - 1253 , - 202 , - 551 , - 60 , - 969 , - 1038 , - 267 , - 896 , - 685 , - 1874 , - 2223 , - 1732 , - 401 , - 470 , - 1939 , - 328 , - 117 , - 1306 , - 1655 , - 1164 , - 2073 , - 2142 , - 1371 , - 2000 , - 1789 , - 738 , - 1087 , - 596 , - 1505 , - 1574 , - 803 , - 1432 , - 1221 , - 170 , - 519 , - 28 , - 937 , - 1006 , - 235 , - 864 , - 653 , - 1842 , - 2191 , - 1700 , - 369 , - 438 , - 1907 , - 296 , - 85 , - 1274 , - 1623 , - 1132 , - 2041 , - 2110 , - 1339 , - 1968 , - 1757 , - 706 , - 1055 , - 564 , - 1473 , - 1542 , - 771 , - 1400 , - 1189 , - 138 , - 487 , - 2236 , - 905 , - 974 , - 203 , - 832 , - 621 , - 1810 , - 2159 , - 1668 , - 337 , - 406 , - 1875 , - 264 , - 53 , - 1242 , - 1591 , - 1100 , - 2009 , - 2078 , - 1307 , - 1936 , - 1725 , - 674 , - 1023 , - 532 , - 1441 , - 1510 , - 739 , - 1368 , - 1157 , - 106 , - 455 , - 2204 , - 873 , - 942 , - 171 , - 800 , - 589 , - 1778 , - 2127 , - 1636 , - 305 , - 374 , - 1843 , - 232 , - 21 , - 1210 , - 1559 , - 1068 , - 1977 , - 2046 , - 1275 , - 1904 , - 1693 , - 642 , - 991 , - 500 , - 1409 , - 1478 , - 707 , - 1336 , - 1125 , - 74 , - 423 , - 2172 , - 841 , - 910 , - 139 , - 768 , - 557 , - 1746 , - 2095 , - 1604 , - 273 , - 342 , - 1811 , - 200 , - 2229 , - 1178 , - 1527 , - 1036 , - 1945 , - 2014 , - 1243 , - 1872 , - 1661 , - 610 , - 959 , - 468 , - 1377 , - 1446 , - 675 , - 1304 , - 1093 , - 42 , - 391 , - 2140 , - 809 , - 878 , - 107 , - 736 , - 525 , - 1714 , - 2063 , - 1572 , - 241 , - 310 , - 1779 , - 168 , - 2197 , - 1146 , - 1495 , - 1004 , - 1913 , - 1982 , - 1211 , - 1840 , - 1629 , - 578 , - 927 , - 436 , - 1345 , - 1414 , - 643 , - 1272 , - 1061 , - 10 , - 359 , - 2108 , - 777 , - 846 , - 75 , - 704 , - 493 , - 1682 , - 2031 , - 1540 , - 209 , - 278 , - 1747 , - 136 , - 2165 , - 1114 , - 1463 , - 972 , - 1881 , - 1950 , - 1179 , - 1808 , - 1597 , - 546 , - 895 , - 404 , - 1313 , - 1382 , - 611 , - 1240 , - 1029 , - 2218 , - 327 , - 2076 , - 745 , - 814 , - 43 , - 672 , - 461 , - 1650 , - 1999 , - 1508 , - 177 , - 246 , - 1715 , - 104 , - 2133 , - 1082 , - 1431 , - 940 , - 1849 , - 1918 , - 1147 , - 1776 , - 1565 , - 514 , - 863 , - 372 , - 1281 , - 1350 , - 579 , - 1208 , - 997 , - 2186 , - 295 , - 2044 , - 713 , - 782 , - 11 , - 640 , - 429 , - 1618 , - 1967 , - 1476 , - 145 , - 214 , - 1683 , - 72 , - 2101 , - 1050 , - 1399 , - 908 , - 1817 , - 1886 , - 1115 , - 1744 , - 1533 , - 482 , - 831 , - 340 , - 1249 , - 1318 , - 547 , - 1176 , - 965 , - 2154 , - 263 , - 2012 , - 681 , - 750 , - 2219 , - 608 , - 397 , - 1586 , - 1935 , - 1444 , - 113 , - 182 , - 1651 , - 40 , - 2069 , - 1018 , - 1367 , - 876 , - 1785 , - 1854 , - 1083 , - 1712 , - 1501 , - 450 , - 799 , - 308 , - 1217 , - 1286 , - 515 , - 1144 , - 933 , - 2122 , - 231 , - 1980 , - 649 , - 718 , - 2187 , - 576 , - 365 , - 1554 , - 1903 , - 1412 , - 81 , - 150 , - 1619 , - 8 , - 2037 , - 986 , - 1335 , - 844 , - 1753 , - 1822 , - 1051 , - 1680 , - 1469 , - 418 , - 767 , - 276 , - 1185 , - 1254 , - 483 , - 1112 , - 901 , - 2090 , - 199 , - 1948 , - 617 , - 686 , - 2155 , - 544 , - 333 , - 1522 , - 1871 , - 1380 , - 49 , - 118 , - 1587 , - 2216 , - 2005 , - 954 , - 1303 , - 812 , - 1721 , - 1790 , - 1019 , - 1648 , - 1437 , - 386 , - 735 , - 244 , - 1153 , - 1222 , - 451 , - 1080 , - 869 , - 2058 , - 167 , - 1916 , - 585 , - 654 , - 2123 , - 512 , - 301 , - 1490 , - 1839 , - 1348 , - 17 , - 86 , - 1555 , - 2184 , - 1973 , - 922 , - 1271 , - 780 , - 1689 , - 1758 , - 987 , - 1616 , - 1405 , - 354 , - 703 , - 212 , - 1121 , - 1190 , - 419 , - 1048 , - 837 , - 2026 , - 135 , - 1884 , - 553 , - 622 , - 2091 , - 480 , - 269 , - 1458 , - 1807 , - 1316 , - 2225 , - 54 , - 1523 , - 2152 , - 1941 , - 890 , - 1239 , - 748 , - 1657 , - 1726 , - 955 , - 1584 , - 1373 , - 322 , - 671 , - 180 , - 1089 , - 1158 , - 387 , - 1016 , - 805 , - 1994 , - 103 , - 1852 , - 521 , - 590 , - 2059 , - 448 , - 237 , - 1426 , - 1775 , - 1284 , - 2193 , - 22 , - 1491 , - 2120 , - 1909 , - 858 , - 1207 , - 716 , - 1625 , - 1694 , - 923 , - 1552 , - 1341 , - 290 , - 639 , - 148 , - 1057 , - 1126 , - 355 , - 984 , - 773 , - 1962 , - 71 , - 1820 , - 489 , - 558 , - 2027 , - 416 , - 205 , - 1394 , - 1743 , - 1252 , - 2161 , - 2230 , - 1459 , - 2088 , - 1877 , - 826 , - 1175 , - 684 , - 1593 , - 1662 , - 891 , - 1520 , - 1309 , - 258 , - 607 , - 116 , - 1025 , - 1094 , - 323 , - 952 , - 741 , - 1930 , - 39 , - 1788 , - 457 , - 526 , - 1995 , - 384 , - 173 , - 1362 , - 1711 , - 1220 , - 2129 , - 2198 , - 1427 , - 2056 , - 1845 , - 794 , - 1143 , - 652 , - 1561 , - 1630 , - 859 , - 1488 , - 1277 , - 226 , - 575 , - 84 , - 993 , - 1062 , - 291 , - 920 , - 709 , - 1898 , - 7 , - 1756 , - 425 , - 494 , - 1963 , - 352 , - 141 , - 1330 , - 1679 , - 1188 , - 2097 , - 2166 , - 1395 , - 2024 , - 1813 , - 762 , - 1111 , - 620 , - 1529 , - 1598 , - 827 , - 1456 , - 1245 , - 194 , - 543 , - 52 , - 961 , - 1030 , - 259 , - 888 , - 677 , - 1866 , - 2215 , - 1724 , - 393 , - 462 , - 1931 , - 320 , - 109 , - 1298 , - 1647 , - 1156 , - 2065 , - 2134 , - 1363 , - 1992 , - 1781 , - 730 , - 1079 , - 588 , - 1497 , - 1566 , - 795 , - 1424 , - 1213 , - 162 , - 511 , - 20 , - 929 , - 998 , - 227 , - 856 , - 645 , - 1834 , - 2183 , - 1692 , - 361 , - 430 , - 1899 , - 288 , - 77 , - 1266 , - 1615 , - 1124 , - 2033 , - 2102 , - 1331 , - 1960 , - 1749 , - 698 , - 1047 , - 556 , - 1465 , - 1534 , - 763 , - 1392 , - 1181 , - 130 , - 479 , - 2228 , - 897 , - 966 , - 195 , - 824 , - 613 , - 1802 , - 2151 , - 1660 , - 329 , - 398 , - 1867 , - 256 , - 45 , - 1234 , - 1583 , - 1092 , - 2001 , - 2070 , - 1299 , - 1928 , - 1717 , - 666 , - 1015 , - 524 , - 1433 , - 1502 , - 731 , - 1360 , - 1149 , - 98 , - 447 , - 2196 , - 865 , - 934 , - 163 , - 792 , - 581 , - 1770 , - 2119 , - 1628 , - 297 , - 366 , - 1835 , - 224 , - 13 , - 1202 , - 1551 , - 1060 , - 1969 , - 2038 , - 1267 , - 1896 , - 1685 , - 634 , - 983 , - 492 , - 1401 , - 1470 , - 699 , - 1328 , - 1117 , - 66 , - 415 , - 2164 , - 833 , - 902 , - 131 , - 760 , - 549 , - 1738 , - 2087 , - 1596 , - 265 , - 334 , - 1803 , - 192 , - 2221 , - 1170 , - 1519 , - 1028 , - 1937 , - 2006 , - 1235 , - 1864 , - 1653 , - 602 , - 951 , - 460 , - 1369 , - 1438 , - 667 , - 1296 , - 1085 , - 34 , - 383 , - 2132 , - 801 , - 870 , - 99 , - 728 , - 517 , - 1706 , - 2055 , - 1564 , - 233 , - 302 , - 1771 , - 160 , - 2189 , - 1138 , - 1487 , - 996 , - 1905 , - 1974 , - 1203 , - 1832 , - 1621 , - 570 , - 919 , - 428 , - 1337 , - 1406 , - 635 , - 1264 , - 1053 , - 2 , - 351 , - 2100 , - 769 , - 838 , - 67 , - 696 , - 485 , - 1674 , - 2023 , - 1532 , - 201 , - 270 , - 1739 , - 128 , - 2157 , - 1106 , - 1455 , - 964 , - 1873 , - 1942 , - 1171 , - 1800 , - 1589 , - 538 , - 887 , - 396 , - 1305 , - 1374 , - 603 , - 1232 , - 1021 , - 2210 , - 319 , - 2068 , - 737 , - 806 , - 35 , - 664 , - 453 , - 1642 , - 1991 , - 1500 , - 169 , - 238 , - 1707 , - 96 , - 2125 , - 1074 , - 1423 , - 932 , - 1841 , - 1910 , - 1139 , - 1768 , - 1557 , - 506 , - 855 , - 364 , - 1273 , - 1342 , - 571 , - 1200 , - 989 , - 2178 , - 287 , - 2036 , - 705 , - 774 , - 3 , - 632 , - 421 , - 1610 , - 1959 , - 1468 , - 137 , - 206 , - 1675 , - 64 , - 2093 , - 1042 , - 1391 , - 900 , - 1809 , - 1878 , - 1107 , - 1736 , - 1525 , - 474 , - 823 , - 332 , - 1241 , - 1310 , - 539 , - 1168 , - 957 , - 2146 , - 255 , - 2004 , - 673 , - 742 , - 2211 , - 600 , - 389 , - 1578 , - 1927 , - 1436 , - 105 , - 174 , - 1643 , - 32 , - 2061 , - 1010 , - 1359 , - 868 , - 1777 , - 1846 , - 1075 , - 1704 , - 1493 , - 442 , - 791 , - 300 , - 1209 , - 1278 , - 507 , - 1136 , - 925 , - 2114 , - 223 , - 1972 , - 641 , - 710 , - 2179 , - 568 , - 357 , - 1546 , - 1895 , - 1404 , - 73 , - 142 , - 1611 , - 0 , - 2269 , - 1226 , - 1479 , - 724 , - 1265 , - 798 , - 1627 , - 1448 , - 261 , - 370 , - 1775 , - 2172 , - 1561 , - 2246 , - 1923 , - 592 , - 557 , - 1818 , - 2071 , - 1316 , - 1857 , - 1390 , - 2219 , - 2040 , - 853 , - 962 , - 63 , - 460 , - 2153 , - 534 , - 211 , - 1184 , - 1149 , - 106 , - 359 , - 1908 , - 145 , - 1982 , - 507 , - 328 , - 1445 , - 1554 , - 655 , - 1052 , - 441 , - 1126 , - 803 , - 1776 , - 1741 , - 698 , - 951 , - 196 , - 737 , - 270 , - 1099 , - 920 , - 2037 , - 2146 , - 1247 , - 1644 , - 1033 , - 1718 , - 1395 , - 64 , - 29 , - 1290 , - 1543 , - 788 , - 1329 , - 862 , - 1691 , - 1512 , - 325 , - 434 , - 1839 , - 2236 , - 1625 , - 6 , - 1987 , - 656 , - 621 , - 1882 , - 2135 , - 1380 , - 1921 , - 1454 , - 2283 , - 2104 , - 917 , - 1026 , - 127 , - 524 , - 2217 , - 598 , - 275 , - 1248 , - 1213 , - 170 , - 423 , - 1972 , - 209 , - 2046 , - 571 , - 392 , - 1509 , - 1618 , - 719 , - 1116 , - 505 , - 1190 , - 867 , - 1840 , - 1805 , - 762 , - 1015 , - 260 , - 801 , - 334 , - 1163 , - 984 , - 2101 , - 2210 , - 1311 , - 1708 , - 1097 , - 1782 , - 1459 , - 128 , - 93 , - 1354 , - 1607 , - 852 , - 1393 , - 926 , - 1755 , - 1576 , - 389 , - 498 , - 1903 , - 2300 , - 1689 , - 70 , - 2051 , - 720 , - 685 , - 1946 , - 2199 , - 1444 , - 1985 , - 1518 , - 43 , - 2168 , - 981 , - 1090 , - 191 , - 588 , - 2281 , - 662 , - 339 , - 1312 , - 1277 , - 234 , - 487 , - 2036 , - 273 , - 2110 , - 635 , - 456 , - 1573 , - 1682 , - 783 , - 1180 , - 569 , - 1254 , - 931 , - 1904 , - 1869 , - 826 , - 1079 , - 324 , - 865 , - 398 , - 1227 , - 1048 , - 2165 , - 2274 , - 1375 , - 1772 , - 1161 , - 1846 , - 1523 , - 192 , - 157 , - 1418 , - 1671 , - 916 , - 1457 , - 990 , - 1819 , - 1640 , - 453 , - 562 , - 1967 , - 60 , - 1753 , - 134 , - 2115 , - 784 , - 749 , - 2010 , - 2263 , - 1508 , - 2049 , - 1582 , - 107 , - 2232 , - 1045 , - 1154 , - 255 , - 652 , - 41 , - 726 , - 403 , - 1376 , - 1341 , - 298 , - 551 , - 2100 , - 337 , - 2174 , - 699 , - 520 , - 1637 , - 1746 , - 847 , - 1244 , - 633 , - 1318 , - 995 , - 1968 , - 1933 , - 890 , - 1143 , - 388 , - 929 , - 462 , - 1291 , - 1112 , - 2229 , - 34 , - 1439 , - 1836 , - 1225 , - 1910 , - 1587 , - 256 , - 221 , - 1482 , - 1735 , - 980 , - 1521 , - 1054 , - 1883 , - 1704 , - 517 , - 626 , - 2031 , - 124 , - 1817 , - 198 , - 2179 , - 848 , - 813 , - 2074 , - 23 , - 1572 , - 2113 , - 1646 , - 171 , - 2296 , - 1109 , - 1218 , - 319 , - 716 , - 105 , - 790 , - 467 , - 1440 , - 1405 , - 362 , - 615 , - 2164 , - 401 , - 2238 , - 763 , - 584 , - 1701 , - 1810 , - 911 , - 1308 , - 697 , - 1382 , - 1059 , - 2032 , - 1997 , - 954 , - 1207 , - 452 , - 993 , - 526 , - 1355 , - 1176 , - 2293 , - 98 , - 1503 , - 1900 , - 1289 , - 1974 , - 1651 , - 320 , - 285 , - 1546 , - 1799 , - 1044 , - 1585 , - 1118 , - 1947 , - 1768 , - 581 , - 690 , - 2095 , - 188 , - 1881 , - 262 , - 2243 , - 912 , - 877 , - 2138 , - 87 , - 1636 , - 2177 , - 1710 , - 235 , - 56 , - 1173 , - 1282 , - 383 , - 780 , - 169 , - 854 , - 531 , - 1504 , - 1469 , - 426 , - 679 , - 2228 , - 465 , - 2302 , - 827 , - 648 , - 1765 , - 1874 , - 975 , - 1372 , - 761 , - 1446 , - 1123 , - 2096 , - 2061 , - 1018 , - 1271 , - 516 , - 1057 , - 590 , - 1419 , - 1240 , - 53 , - 162 , - 1567 , - 1964 , - 1353 , - 2038 , - 1715 , - 384 , - 349 , - 1610 , - 1863 , - 1108 , - 1649 , - 1182 , - 2011 , - 1832 , - 645 , - 754 , - 2159 , - 252 , - 1945 , - 326 , - 3 , - 976 , - 941 , - 2202 , - 151 , - 1700 , - 2241 , - 1774 , - 299 , - 120 , - 1237 , - 1346 , - 447 , - 844 , - 233 , - 918 , - 595 , - 1568 , - 1533 , - 490 , - 743 , - 2292 , - 529 , - 62 , - 891 , - 712 , - 1829 , - 1938 , - 1039 , - 1436 , - 825 , - 1510 , - 1187 , - 2160 , - 2125 , - 1082 , - 1335 , - 580 , - 1121 , - 654 , - 1483 , - 1304 , - 117 , - 226 , - 1631 , - 2028 , - 1417 , - 2102 , - 1779 , - 448 , - 413 , - 1674 , - 1927 , - 1172 , - 1713 , - 1246 , - 2075 , - 1896 , - 709 , - 818 , - 2223 , - 316 , - 2009 , - 390 , - 67 , - 1040 , - 1005 , - 2266 , - 215 , - 1764 , - 1 , - 1838 , - 363 , - 184 , - 1301 , - 1410 , - 511 , - 908 , - 297 , - 982 , - 659 , - 1632 , - 1597 , - 554 , - 807 , - 52 , - 593 , - 126 , - 955 , - 776 , - 1893 , - 2002 , - 1103 , - 1500 , - 889 , - 1574 , - 1251 , - 2224 , - 2189 , - 1146 , - 1399 , - 644 , - 1185 , - 718 , - 1547 , - 1368 , - 181 , - 290 , - 1695 , - 2092 , - 1481 , - 2166 , - 1843 , - 512 , - 477 , - 1738 , - 1991 , - 1236 , - 1777 , - 1310 , - 2139 , - 1960 , - 773 , - 882 , - 2287 , - 380 , - 2073 , - 454 , - 131 , - 1104 , - 1069 , - 26 , - 279 , - 1828 , - 65 , - 1902 , - 427 , - 248 , - 1365 , - 1474 , - 575 , - 972 , - 361 , - 1046 , - 723 , - 1696 , - 1661 , - 618 , - 871 , - 116 , - 657 , - 190 , - 1019 , - 840 , - 1957 , - 2066 , - 1167 , - 1564 , - 953 , - 1638 , - 1315 , - 2288 , - 2253 , - 1210 , - 1463 , - 708 , - 1249 , - 782 , - 1611 , - 1432 , - 245 , - 354 , - 1759 , - 2156 , - 1545 , - 2230 , - 1907 , - 576 , - 541 , - 1802 , - 2055 , - 1300 , - 1841 , - 1374 , - 2203 , - 2024 , - 837 , - 946 , - 47 , - 444 , - 2137 , - 518 , - 195 , - 1168 , - 1133 , - 90 , - 343 , - 1892 , - 129 , - 1966 , - 491 , - 312 , - 1429 , - 1538 , - 639 , - 1036 , - 425 , - 1110 , - 787 , - 1760 , - 1725 , - 682 , - 935 , - 180 , - 721 , - 254 , - 1083 , - 904 , - 2021 , - 2130 , - 1231 , - 1628 , - 1017 , - 1702 , - 1379 , - 48 , - 13 , - 1274 , - 1527 , - 772 , - 1313 , - 846 , - 1675 , - 1496 , - 309 , - 418 , - 1823 , - 2220 , - 1609 , - 2294 , - 1971 , - 640 , - 605 , - 1866 , - 2119 , - 1364 , - 1905 , - 1438 , - 2267 , - 2088 , - 901 , - 1010 , - 111 , - 508 , - 2201 , - 582 , - 259 , - 1232 , - 1197 , - 154 , - 407 , - 1956 , - 193 , - 2030 , - 555 , - 376 , - 1493 , - 1602 , - 703 , - 1100 , - 489 , - 1174 , - 851 , - 1824 , - 1789 , - 746 , - 999 , - 244 , - 785 , - 318 , - 1147 , - 968 , - 2085 , - 2194 , - 1295 , - 1692 , - 1081 , - 1766 , - 1443 , - 112 , - 77 , - 1338 , - 1591 , - 836 , - 1377 , - 910 , - 1739 , - 1560 , - 373 , - 482 , - 1887 , - 2284 , - 1673 , - 54 , - 2035 , - 704 , - 669 , - 1930 , - 2183 , - 1428 , - 1969 , - 1502 , - 27 , - 2152 , - 965 , - 1074 , - 175 , - 572 , - 2265 , - 646 , - 323 , - 1296 , - 1261 , - 218 , - 471 , - 2020 , - 257 , - 2094 , - 619 , - 440 , - 1557 , - 1666 , - 767 , - 1164 , - 553 , - 1238 , - 915 , - 1888 , - 1853 , - 810 , - 1063 , - 308 , - 849 , - 382 , - 1211 , - 1032 , - 2149 , - 2258 , - 1359 , - 1756 , - 1145 , - 1830 , - 1507 , - 176 , - 141 , - 1402 , - 1655 , - 900 , - 1441 , - 974 , - 1803 , - 1624 , - 437 , - 546 , - 1951 , - 44 , - 1737 , - 118 , - 2099 , - 768 , - 733 , - 1994 , - 2247 , - 1492 , - 2033 , - 1566 , - 91 , - 2216 , - 1029 , - 1138 , - 239 , - 636 , - 25 , - 710 , - 387 , - 1360 , - 1325 , - 282 , - 535 , - 2084 , - 321 , - 2158 , - 683 , - 504 , - 1621 , - 1730 , - 831 , - 1228 , - 617 , - 1302 , - 979 , - 1952 , - 1917 , - 874 , - 1127 , - 372 , - 913 , - 446 , - 1275 , - 1096 , - 2213 , - 18 , - 1423 , - 1820 , - 1209 , - 1894 , - 1571 , - 240 , - 205 , - 1466 , - 1719 , - 964 , - 1505 , - 1038 , - 1867 , - 1688 , - 501 , - 610 , - 2015 , - 108 , - 1801 , - 182 , - 2163 , - 832 , - 797 , - 2058 , - 7 , - 1556 , - 2097 , - 1630 , - 155 , - 2280 , - 1093 , - 1202 , - 303 , - 700 , - 89 , - 774 , - 451 , - 1424 , - 1389 , - 346 , - 599 , - 2148 , - 385 , - 2222 , - 747 , - 568 , - 1685 , - 1794 , - 895 , - 1292 , - 681 , - 1366 , - 1043 , - 2016 , - 1981 , - 938 , - 1191 , - 436 , - 977 , - 510 , - 1339 , - 1160 , - 2277 , - 82 , - 1487 , - 1884 , - 1273 , - 1958 , - 1635 , - 304 , - 269 , - 1530 , - 1783 , - 1028 , - 1569 , - 1102 , - 1931 , - 1752 , - 565 , - 674 , - 2079 , - 172 , - 1865 , - 246 , - 2227 , - 896 , - 861 , - 2122 , - 71 , - 1620 , - 2161 , - 1694 , - 219 , - 40 , - 1157 , - 1266 , - 367 , - 764 , - 153 , - 838 , - 515 , - 1488 , - 1453 , - 410 , - 663 , - 2212 , - 449 , - 2286 , - 811 , - 632 , - 1749 , - 1858 , - 959 , - 1356 , - 745 , - 1430 , - 1107 , - 2080 , - 2045 , - 1002 , - 1255 , - 500 , - 1041 , - 574 , - 1403 , - 1224 , - 37 , - 146 , - 1551 , - 1948 , - 1337 , - 2022 , - 1699 , - 368 , - 333 , - 1594 , - 1847 , - 1092 , - 1633 , - 1166 , - 1995 , - 1816 , - 629 , - 738 , - 2143 , - 236 , - 1929 , - 310 , - 2291 , - 960 , - 925 , - 2186 , - 135 , - 1684 , - 2225 , - 1758 , - 283 , - 104 , - 1221 , - 1330 , - 431 , - 828 , - 217 , - 902 , - 579 , - 1552 , - 1517 , - 474 , - 727 , - 2276 , - 513 , - 46 , - 875 , - 696 , - 1813 , - 1922 , - 1023 , - 1420 , - 809 , - 1494 , - 1171 , - 2144 , - 2109 , - 1066 , - 1319 , - 564 , - 1105 , - 638 , - 1467 , - 1288 , - 101 , - 210 , - 1615 , - 2012 , - 1401 , - 2086 , - 1763 , - 432 , - 397 , - 1658 , - 1911 , - 1156 , - 1697 , - 1230 , - 2059 , - 1880 , - 693 , - 802 , - 2207 , - 300 , - 1993 , - 374 , - 51 , - 1024 , - 989 , - 2250 , - 199 , - 1748 , - 2289 , - 1822 , - 347 , - 168 , - 1285 , - 1394 , - 495 , - 892 , - 281 , - 966 , - 643 , - 1616 , - 1581 , - 538 , - 791 , - 36 , - 577 , - 110 , - 939 , - 760 , - 1877 , - 1986 , - 1087 , - 1484 , - 873 , - 1558 , - 1235 , - 2208 , - 2173 , - 1130 , - 1383 , - 628 , - 1169 , - 702 , - 1531 , - 1352 , - 165 , - 274 , - 1679 , - 2076 , - 1465 , - 2150 , - 1827 , - 496 , - 461 , - 1722 , - 1975 , - 1220 , - 1761 , - 1294 , - 2123 , - 1944 , - 757 , - 866 , - 2271 , - 364 , - 2057 , - 438 , - 115 , - 1088 , - 1053 , - 10 , - 263 , - 1812 , - 49 , - 1886 , - 411 , - 232 , - 1349 , - 1458 , - 559 , - 956 , - 345 , - 1030 , - 707 , - 1680 , - 1645 , - 602 , - 855 , - 100 , - 641 , - 174 , - 1003 , - 824 , - 1941 , - 2050 , - 1151 , - 1548 , - 937 , - 1622 , - 1299 , - 2272 , - 2237 , - 1194 , - 1447 , - 692 , - 1233 , - 766 , - 1595 , - 1416 , - 229 , - 338 , - 1743 , - 2140 , - 1529 , - 2214 , - 1891 , - 560 , - 525 , - 1786 , - 2039 , - 1284 , - 1825 , - 1358 , - 2187 , - 2008 , - 821 , - 930 , - 31 , - 428 , - 2121 , - 502 , - 179 , - 1152 , - 1117 , - 74 , - 327 , - 1876 , - 113 , - 1950 , - 475 , - 296 , - 1413 , - 1522 , - 623 , - 1020 , - 409 , - 1094 , - 771 , - 1744 , - 1709 , - 666 , - 919 , - 164 , - 705 , - 238 , - 1067 , - 888 , - 2005 , - 2114 , - 1215 , - 1612 , - 1001 , - 1686 , - 1363 , - 32 , - 2301 , - 1258 , - 1511 , - 756 , - 1297 , - 830 , - 1659 , - 1480 , - 293 , - 402 , - 1807 , - 2204 , - 1593 , - 2278 , - 1955 , - 624 , - 589 , - 1850 , - 2103 , - 1348 , - 1889 , - 1422 , - 2251 , - 2072 , - 885 , - 994 , - 95 , - 492 , - 2185 , - 566 , - 243 , - 1216 , - 1181 , - 138 , - 391 , - 1940 , - 177 , - 2014 , - 539 , - 360 , - 1477 , - 1586 , - 687 , - 1084 , - 473 , - 1158 , - 835 , - 1808 , - 1773 , - 730 , - 983 , - 228 , - 769 , - 302 , - 1131 , - 952 , - 2069 , - 2178 , - 1279 , - 1676 , - 1065 , - 1750 , - 1427 , - 96 , - 61 , - 1322 , - 1575 , - 820 , - 1361 , - 894 , - 1723 , - 1544 , - 357 , - 466 , - 1871 , - 2268 , - 1657 , - 38 , - 2019 , - 688 , - 653 , - 1914 , - 2167 , - 1412 , - 1953 , - 1486 , - 11 , - 2136 , - 949 , - 1058 , - 159 , - 556 , - 2249 , - 630 , - 307 , - 1280 , - 1245 , - 202 , - 455 , - 2004 , - 241 , - 2078 , - 603 , - 424 , - 1541 , - 1650 , - 751 , - 1148 , - 537 , - 1222 , - 899 , - 1872 , - 1837 , - 794 , - 1047 , - 292 , - 833 , - 366 , - 1195 , - 1016 , - 2133 , - 2242 , - 1343 , - 1740 , - 1129 , - 1814 , - 1491 , - 160 , - 125 , - 1386 , - 1639 , - 884 , - 1425 , - 958 , - 1787 , - 1608 , - 421 , - 530 , - 1935 , - 28 , - 1721 , - 102 , - 2083 , - 752 , - 717 , - 1978 , - 2231 , - 1476 , - 2017 , - 1550 , - 75 , - 2200 , - 1013 , - 1122 , - 223 , - 620 , - 9 , - 694 , - 371 , - 1344 , - 1309 , - 266 , - 519 , - 2068 , - 305 , - 2142 , - 667 , - 488 , - 1605 , - 1714 , - 815 , - 1212 , - 601 , - 1286 , - 963 , - 1936 , - 1901 , - 858 , - 1111 , - 356 , - 897 , - 430 , - 1259 , - 1080 , - 2197 , - 2 , - 1407 , - 1804 , - 1193 , - 1878 , - 1555 , - 224 , - 189 , - 1450 , - 1703 , - 948 , - 1489 , - 1022 , - 1851 , - 1672 , - 485 , - 594 , - 1999 , - 92 , - 1785 , - 166 , - 2147 , - 816 , - 781 , - 2042 , - 2295 , - 1540 , - 2081 , - 1614 , - 139 , - 2264 , - 1077 , - 1186 , - 287 , - 684 , - 73 , - 758 , - 435 , - 1408 , - 1373 , - 330 , - 583 , - 2132 , - 369 , - 2206 , - 731 , - 552 , - 1669 , - 1778 , - 879 , - 1276 , - 665 , - 1350 , - 1027 , - 2000 , - 1965 , - 922 , - 1175 , - 420 , - 961 , - 494 , - 1323 , - 1144 , - 2261 , - 66 , - 1471 , - 1868 , - 1257 , - 1942 , - 1619 , - 288 , - 253 , - 1514 , - 1767 , - 1012 , - 1553 , - 1086 , - 1915 , - 1736 , - 549 , - 658 , - 2063 , - 156 , - 1849 , - 230 , - 2211 , - 880 , - 845 , - 2106 , - 55 , - 1604 , - 2145 , - 1678 , - 203 , - 24 , - 1141 , - 1250 , - 351 , - 748 , - 137 , - 822 , - 499 , - 1472 , - 1437 , - 394 , - 647 , - 2196 , - 433 , - 2270 , - 795 , - 616 , - 1733 , - 1842 , - 943 , - 1340 , - 729 , - 1414 , - 1091 , - 2064 , - 2029 , - 986 , - 1239 , - 484 , - 1025 , - 558 , - 1387 , - 1208 , - 21 , - 130 , - 1535 , - 1932 , - 1321 , - 2006 , - 1683 , - 352 , - 317 , - 1578 , - 1831 , - 1076 , - 1617 , - 1150 , - 1979 , - 1800 , - 613 , - 722 , - 2127 , - 220 , - 1913 , - 294 , - 2275 , - 944 , - 909 , - 2170 , - 119 , - 1668 , - 2209 , - 1742 , - 267 , - 88 , - 1205 , - 1314 , - 415 , - 812 , - 201 , - 886 , - 563 , - 1536 , - 1501 , - 458 , - 711 , - 2260 , - 497 , - 30 , - 859 , - 680 , - 1797 , - 1906 , - 1007 , - 1404 , - 793 , - 1478 , - 1155 , - 2128 , - 2093 , - 1050 , - 1303 , - 548 , - 1089 , - 622 , - 1451 , - 1272 , - 85 , - 194 , - 1599 , - 1996 , - 1385 , - 2070 , - 1747 , - 416 , - 381 , - 1642 , - 1895 , - 1140 , - 1681 , - 1214 , - 2043 , - 1864 , - 677 , - 786 , - 2191 , - 284 , - 1977 , - 358 , - 35 , - 1008 , - 973 , - 2234 , - 183 , - 1732 , - 2273 , - 1806 , - 331 , - 152 , - 1269 , - 1378 , - 479 , - 876 , - 265 , - 950 , - 627 , - 1600 , - 1565 , - 522 , - 775 , - 20 , - 561 , - 94 , - 923 , - 744 , - 1861 , - 1970 , - 1071 , - 1468 , - 857 , - 1542 , - 1219 , - 2192 , - 2157 , - 1114 , - 1367 , - 612 , - 1153 , - 686 , - 1515 , - 1336 , - 149 , - 258 , - 1663 , - 2060 , - 1449 , - 2134 , - 1811 , - 480 , - 445 , - 1706 , - 1959 , - 1204 , - 1745 , - 1278 , - 2107 , - 1928 , - 741 , - 850 , - 2255 , - 348 , - 2041 , - 422 , - 99 , - 1072 , - 1037 , - 2298 , - 247 , - 1796 , - 33 , - 1870 , - 395 , - 216 , - 1333 , - 1442 , - 543 , - 940 , - 329 , - 1014 , - 691 , - 1664 , - 1629 , - 586 , - 839 , - 84 , - 625 , - 158 , - 987 , - 808 , - 1925 , - 2034 , - 1135 , - 1532 , - 921 , - 1606 , - 1283 , - 2256 , - 2221 , - 1178 , - 1431 , - 676 , - 1217 , - 750 , - 1579 , - 1400 , - 213 , - 322 , - 1727 , - 2124 , - 1513 , - 2198 , - 1875 , - 544 , - 509 , - 1770 , - 2023 , - 1268 , - 1809 , - 1342 , - 2171 , - 1992 , - 805 , - 914 , - 15 , - 412 , - 2105 , - 486 , - 163 , - 1136 , - 1101 , - 58 , - 311 , - 1860 , - 97 , - 1934 , - 459 , - 280 , - 1397 , - 1506 , - 607 , - 1004 , - 393 , - 1078 , - 755 , - 1728 , - 1693 , - 650 , - 903 , - 148 , - 689 , - 222 , - 1051 , - 872 , - 1989 , - 2098 , - 1199 , - 1596 , - 985 , - 1670 , - 1347 , - 16 , - 2285 , - 1242 , - 1495 , - 740 , - 1281 , - 814 , - 1643 , - 1464 , - 277 , - 386 , - 1791 , - 2188 , - 1577 , - 2262 , - 1939 , - 608 , - 573 , - 1834 , - 2087 , - 1332 , - 1873 , - 1406 , - 2235 , - 2056 , - 869 , - 978 , - 79 , - 476 , - 2169 , - 550 , - 227 , - 1200 , - 1165 , - 122 , - 375 , - 1924 , - 161 , - 1998 , - 523 , - 344 , - 1461 , - 1570 , - 671 , - 1068 , - 457 , - 1142 , - 819 , - 1792 , - 1757 , - 714 , - 967 , - 212 , - 753 , - 286 , - 1115 , - 936 , - 2053 , - 2162 , - 1263 , - 1660 , - 1049 , - 1734 , - 1411 , - 80 , - 45 , - 1306 , - 1559 , - 804 , - 1345 , - 878 , - 1707 , - 1528 , - 341 , - 450 , - 1855 , - 2252 , - 1641 , - 22 , - 2003 , - 672 , - 637 , - 1898 , - 2151 , - 1396 , - 1937 , - 1470 , - 2299 , - 2120 , - 933 , - 1042 , - 143 , - 540 , - 2233 , - 614 , - 291 , - 1264 , - 1229 , - 186 , - 439 , - 1988 , - 225 , - 2062 , - 587 , - 408 , - 1525 , - 1634 , - 735 , - 1132 , - 521 , - 1206 , - 883 , - 1856 , - 1821 , - 778 , - 1031 , - 276 , - 817 , - 350 , - 1179 , - 1000 , - 2117 , - 2226 , - 1327 , - 1724 , - 1113 , - 1798 , - 1475 , - 144 , - 109 , - 1370 , - 1623 , - 868 , - 1409 , - 942 , - 1771 , - 1592 , - 405 , - 514 , - 1919 , - 12 , - 1705 , - 86 , - 2067 , - 736 , - 701 , - 1962 , - 2215 , - 1460 , - 2001 , - 1534 , - 59 , - 2184 , - 997 , - 1106 , - 207 , - 604 , - 2297 , - 678 , - 355 , - 1328 , - 1293 , - 250 , - 503 , - 2052 , - 289 , - 2126 , - 651 , - 472 , - 1589 , - 1698 , - 799 , - 1196 , - 585 , - 1270 , - 947 , - 1920 , - 1885 , - 842 , - 1095 , - 340 , - 881 , - 414 , - 1243 , - 1064 , - 2181 , - 2290 , - 1391 , - 1788 , - 1177 , - 1862 , - 1539 , - 208 , - 173 , - 1434 , - 1687 , - 932 , - 1473 , - 1006 , - 1835 , - 1656 , - 469 , - 578 , - 1983 , - 76 , - 1769 , - 150 , - 2131 , - 800 , - 765 , - 2026 , - 2279 , - 1524 , - 2065 , - 1598 , - 123 , - 2248 , - 1061 , - 1170 , - 271 , - 668 , - 57 , - 742 , - 419 , - 1392 , - 1357 , - 314 , - 567 , - 2116 , - 353 , - 2190 , - 715 , - 536 , - 1653 , - 1762 , - 863 , - 1260 , - 649 , - 1334 , - 1011 , - 1984 , - 1949 , - 906 , - 1159 , - 404 , - 945 , - 478 , - 1307 , - 1128 , - 2245 , - 50 , - 1455 , - 1852 , - 1241 , - 1926 , - 1603 , - 272 , - 237 , - 1498 , - 1751 , - 996 , - 1537 , - 1070 , - 1899 , - 1720 , - 533 , - 642 , - 2047 , - 140 , - 1833 , - 214 , - 2195 , - 864 , - 829 , - 2090 , - 39 , - 1588 , - 2129 , - 1662 , - 187 , - 8 , - 1125 , - 1234 , - 335 , - 732 , - 121 , - 806 , - 483 , - 1456 , - 1421 , - 378 , - 631 , - 2180 , - 417 , - 2254 , - 779 , - 600 , - 1717 , - 1826 , - 927 , - 1324 , - 713 , - 1398 , - 1075 , - 2048 , - 2013 , - 970 , - 1223 , - 468 , - 1009 , - 542 , - 1371 , - 1192 , - 5 , - 114 , - 1519 , - 1916 , - 1305 , - 1990 , - 1667 , - 336 , - 301 , - 1562 , - 1815 , - 1060 , - 1601 , - 1134 , - 1963 , - 1784 , - 597 , - 706 , - 2111 , - 204 , - 1897 , - 278 , - 2259 , - 928 , - 893 , - 2154 , - 103 , - 1652 , - 2193 , - 1726 , - 251 , - 72 , - 1189 , - 1298 , - 399 , - 796 , - 185 , - 870 , - 547 , - 1520 , - 1485 , - 442 , - 695 , - 2244 , - 481 , - 14 , - 843 , - 664 , - 1781 , - 1890 , - 991 , - 1388 , - 777 , - 1462 , - 1139 , - 2112 , - 2077 , - 1034 , - 1287 , - 532 , - 1073 , - 606 , - 1435 , - 1256 , - 69 , - 178 , - 1583 , - 1980 , - 1369 , - 2054 , - 1731 , - 400 , - 365 , - 1626 , - 1879 , - 1124 , - 1665 , - 1198 , - 2027 , - 1848 , - 661 , - 770 , - 2175 , - 268 , - 1961 , - 342 , - 19 , - 992 , - 957 , - 2218 , - 167 , - 1716 , - 2257 , - 1790 , - 315 , - 136 , - 1253 , - 1362 , - 463 , - 860 , - 249 , - 934 , - 611 , - 1584 , - 1549 , - 506 , - 759 , - 4 , - 545 , - 78 , - 907 , - 728 , - 1845 , - 1954 , - 1055 , - 1452 , - 841 , - 1526 , - 1203 , - 2176 , - 2141 , - 1098 , - 1351 , - 596 , - 1137 , - 670 , - 1499 , - 1320 , - 133 , - 242 , - 1647 , - 2044 , - 1433 , - 2118 , - 1795 , - 464 , - 429 , - 1690 , - 1943 , - 1188 , - 1729 , - 1262 , - 2091 , - 1912 , - 725 , - 834 , - 2239 , - 332 , - 2025 , - 406 , - 83 , - 1056 , - 1021 , - 2282 , - 231 , - 1780 , - 17 , - 1854 , - 379 , - 200 , - 1317 , - 1426 , - 527 , - 924 , - 313 , - 998 , - 675 , - 1648 , - 1613 , - 570 , - 823 , - 68 , - 609 , - 142 , - 971 , - 792 , - 1909 , - 2018 , - 1119 , - 1516 , - 905 , - 1590 , - 1267 , - 2240 , - 2205 , - 1162 , - 1415 , - 660 , - 1201 , - 734 , - 1563 , - 1384 , - 197 , - 306 , - 1711 , - 2108 , - 1497 , - 2182 , - 1859 , - 528 , - 493 , - 1754 , - 2007 , - 1252 , - 1793 , - 1326 , - 2155 , - 1976 , - 789 , - 898 , - 2303 , - 396 , - 2089 , - 470 , - 147 , - 1120 , - 1085 , - 42 , - 295 , - 1844 , - 81 , - 1918 , - 443 , - 264 , - 1381 , - 1490 , - 591 , - 988 , - 377 , - 1062 , - 739 , - 1712 , - 1677 , - 634 , - 887 , - 132 , - 673 , - 206 , - 1035 , - 856 , - 1973 , - 2082 , - 1183 , - 1580 , - 969 , - 1654 , - 1331 , - 0 , - 1899 , - 2318 , - 1257 , - 1084 , - 1799 , - 1034 , - 1157 , - 2168 , - 1699 , - 2118 , - 1057 , - 884 , - 1599 , - 834 , - 957 , - 1968 , - 1499 , - 1918 , - 857 , - 684 , - 1399 , - 634 , - 757 , - 1768 , - 1299 , - 1718 , - 657 , - 484 , - 1199 , - 434 , - 557 , - 1568 , - 1099 , - 1518 , - 457 , - 284 , - 999 , - 234 , - 357 , - 1368 , - 899 , - 1318 , - 257 , - 84 , - 799 , - 34 , - 157 , - 1168 , - 699 , - 1118 , - 57 , - 2252 , - 599 , - 2202 , - 2325 , - 968 , - 499 , - 918 , - 2225 , - 2052 , - 399 , - 2002 , - 2125 , - 768 , - 299 , - 718 , - 2025 , - 1852 , - 199 , - 1802 , - 1925 , - 568 , - 99 , - 518 , - 1825 , - 1652 , - 2367 , - 1602 , - 1725 , - 368 , - 2267 , - 318 , - 1625 , - 1452 , - 2167 , - 1402 , - 1525 , - 168 , - 2067 , - 118 , - 1425 , - 1252 , - 1967 , - 1202 , - 1325 , - 2336 , - 1867 , - 2286 , - 1225 , - 1052 , - 1767 , - 1002 , - 1125 , - 2136 , - 1667 , - 2086 , - 1025 , - 852 , - 1567 , - 802 , - 925 , - 1936 , - 1467 , - 1886 , - 825 , - 652 , - 1367 , - 602 , - 725 , - 1736 , - 1267 , - 1686 , - 625 , - 452 , - 1167 , - 402 , - 525 , - 1536 , - 1067 , - 1486 , - 425 , - 252 , - 967 , - 202 , - 325 , - 1336 , - 867 , - 1286 , - 225 , - 52 , - 767 , - 2 , - 125 , - 1136 , - 667 , - 1086 , - 25 , - 2220 , - 567 , - 2170 , - 2293 , - 936 , - 467 , - 886 , - 2193 , - 2020 , - 367 , - 1970 , - 2093 , - 736 , - 267 , - 686 , - 1993 , - 1820 , - 167 , - 1770 , - 1893 , - 536 , - 67 , - 486 , - 1793 , - 1620 , - 2335 , - 1570 , - 1693 , - 336 , - 2235 , - 286 , - 1593 , - 1420 , - 2135 , - 1370 , - 1493 , - 136 , - 2035 , - 86 , - 1393 , - 1220 , - 1935 , - 1170 , - 1293 , - 2304 , - 1835 , - 2254 , - 1193 , - 1020 , - 1735 , - 970 , - 1093 , - 2104 , - 1635 , - 2054 , - 993 , - 820 , - 1535 , - 770 , - 893 , - 1904 , - 1435 , - 1854 , - 793 , - 620 , - 1335 , - 570 , - 693 , - 1704 , - 1235 , - 1654 , - 593 , - 420 , - 1135 , - 370 , - 493 , - 1504 , - 1035 , - 1454 , - 393 , - 220 , - 935 , - 170 , - 293 , - 1304 , - 835 , - 1254 , - 193 , - 20 , - 735 , - 2338 , - 93 , - 1104 , - 635 , - 1054 , - 2361 , - 2188 , - 535 , - 2138 , - 2261 , - 904 , - 435 , - 854 , - 2161 , - 1988 , - 335 , - 1938 , - 2061 , - 704 , - 235 , - 654 , - 1961 , - 1788 , - 135 , - 1738 , - 1861 , - 504 , - 35 , - 454 , - 1761 , - 1588 , - 2303 , - 1538 , - 1661 , - 304 , - 2203 , - 254 , - 1561 , - 1388 , - 2103 , - 1338 , - 1461 , - 104 , - 2003 , - 54 , - 1361 , - 1188 , - 1903 , - 1138 , - 1261 , - 2272 , - 1803 , - 2222 , - 1161 , - 988 , - 1703 , - 938 , - 1061 , - 2072 , - 1603 , - 2022 , - 961 , - 788 , - 1503 , - 738 , - 861 , - 1872 , - 1403 , - 1822 , - 761 , - 588 , - 1303 , - 538 , - 661 , - 1672 , - 1203 , - 1622 , - 561 , - 388 , - 1103 , - 338 , - 461 , - 1472 , - 1003 , - 1422 , - 361 , - 188 , - 903 , - 138 , - 261 , - 1272 , - 803 , - 1222 , - 161 , - 2356 , - 703 , - 2306 , - 61 , - 1072 , - 603 , - 1022 , - 2329 , - 2156 , - 503 , - 2106 , - 2229 , - 872 , - 403 , - 822 , - 2129 , - 1956 , - 303 , - 1906 , - 2029 , - 672 , - 203 , - 622 , - 1929 , - 1756 , - 103 , - 1706 , - 1829 , - 472 , - 3 , - 422 , - 1729 , - 1556 , - 2271 , - 1506 , - 1629 , - 272 , - 2171 , - 222 , - 1529 , - 1356 , - 2071 , - 1306 , - 1429 , - 72 , - 1971 , - 22 , - 1329 , - 1156 , - 1871 , - 1106 , - 1229 , - 2240 , - 1771 , - 2190 , - 1129 , - 956 , - 1671 , - 906 , - 1029 , - 2040 , - 1571 , - 1990 , - 929 , - 756 , - 1471 , - 706 , - 829 , - 1840 , - 1371 , - 1790 , - 729 , - 556 , - 1271 , - 506 , - 629 , - 1640 , - 1171 , - 1590 , - 529 , - 356 , - 1071 , - 306 , - 429 , - 1440 , - 971 , - 1390 , - 329 , - 156 , - 871 , - 106 , - 229 , - 1240 , - 771 , - 1190 , - 129 , - 2324 , - 671 , - 2274 , - 29 , - 1040 , - 571 , - 990 , - 2297 , - 2124 , - 471 , - 2074 , - 2197 , - 840 , - 371 , - 790 , - 2097 , - 1924 , - 271 , - 1874 , - 1997 , - 640 , - 171 , - 590 , - 1897 , - 1724 , - 71 , - 1674 , - 1797 , - 440 , - 2339 , - 390 , - 1697 , - 1524 , - 2239 , - 1474 , - 1597 , - 240 , - 2139 , - 190 , - 1497 , - 1324 , - 2039 , - 1274 , - 1397 , - 40 , - 1939 , - 2358 , - 1297 , - 1124 , - 1839 , - 1074 , - 1197 , - 2208 , - 1739 , - 2158 , - 1097 , - 924 , - 1639 , - 874 , - 997 , - 2008 , - 1539 , - 1958 , - 897 , - 724 , - 1439 , - 674 , - 797 , - 1808 , - 1339 , - 1758 , - 697 , - 524 , - 1239 , - 474 , - 597 , - 1608 , - 1139 , - 1558 , - 497 , - 324 , - 1039 , - 274 , - 397 , - 1408 , - 939 , - 1358 , - 297 , - 124 , - 839 , - 74 , - 197 , - 1208 , - 739 , - 1158 , - 97 , - 2292 , - 639 , - 2242 , - 2365 , - 1008 , - 539 , - 958 , - 2265 , - 2092 , - 439 , - 2042 , - 2165 , - 808 , - 339 , - 758 , - 2065 , - 1892 , - 239 , - 1842 , - 1965 , - 608 , - 139 , - 558 , - 1865 , - 1692 , - 39 , - 1642 , - 1765 , - 408 , - 2307 , - 358 , - 1665 , - 1492 , - 2207 , - 1442 , - 1565 , - 208 , - 2107 , - 158 , - 1465 , - 1292 , - 2007 , - 1242 , - 1365 , - 8 , - 1907 , - 2326 , - 1265 , - 1092 , - 1807 , - 1042 , - 1165 , - 2176 , - 1707 , - 2126 , - 1065 , - 892 , - 1607 , - 842 , - 965 , - 1976 , - 1507 , - 1926 , - 865 , - 692 , - 1407 , - 642 , - 765 , - 1776 , - 1307 , - 1726 , - 665 , - 492 , - 1207 , - 442 , - 565 , - 1576 , - 1107 , - 1526 , - 465 , - 292 , - 1007 , - 242 , - 365 , - 1376 , - 907 , - 1326 , - 265 , - 92 , - 807 , - 42 , - 165 , - 1176 , - 707 , - 1126 , - 65 , - 2260 , - 607 , - 2210 , - 2333 , - 976 , - 507 , - 926 , - 2233 , - 2060 , - 407 , - 2010 , - 2133 , - 776 , - 307 , - 726 , - 2033 , - 1860 , - 207 , - 1810 , - 1933 , - 576 , - 107 , - 526 , - 1833 , - 1660 , - 7 , - 1610 , - 1733 , - 376 , - 2275 , - 326 , - 1633 , - 1460 , - 2175 , - 1410 , - 1533 , - 176 , - 2075 , - 126 , - 1433 , - 1260 , - 1975 , - 1210 , - 1333 , - 2344 , - 1875 , - 2294 , - 1233 , - 1060 , - 1775 , - 1010 , - 1133 , - 2144 , - 1675 , - 2094 , - 1033 , - 860 , - 1575 , - 810 , - 933 , - 1944 , - 1475 , - 1894 , - 833 , - 660 , - 1375 , - 610 , - 733 , - 1744 , - 1275 , - 1694 , - 633 , - 460 , - 1175 , - 410 , - 533 , - 1544 , - 1075 , - 1494 , - 433 , - 260 , - 975 , - 210 , - 333 , - 1344 , - 875 , - 1294 , - 233 , - 60 , - 775 , - 10 , - 133 , - 1144 , - 675 , - 1094 , - 33 , - 2228 , - 575 , - 2178 , - 2301 , - 944 , - 475 , - 894 , - 2201 , - 2028 , - 375 , - 1978 , - 2101 , - 744 , - 275 , - 694 , - 2001 , - 1828 , - 175 , - 1778 , - 1901 , - 544 , - 75 , - 494 , - 1801 , - 1628 , - 2343 , - 1578 , - 1701 , - 344 , - 2243 , - 294 , - 1601 , - 1428 , - 2143 , - 1378 , - 1501 , - 144 , - 2043 , - 94 , - 1401 , - 1228 , - 1943 , - 1178 , - 1301 , - 2312 , - 1843 , - 2262 , - 1201 , - 1028 , - 1743 , - 978 , - 1101 , - 2112 , - 1643 , - 2062 , - 1001 , - 828 , - 1543 , - 778 , - 901 , - 1912 , - 1443 , - 1862 , - 801 , - 628 , - 1343 , - 578 , - 701 , - 1712 , - 1243 , - 1662 , - 601 , - 428 , - 1143 , - 378 , - 501 , - 1512 , - 1043 , - 1462 , - 401 , - 228 , - 943 , - 178 , - 301 , - 1312 , - 843 , - 1262 , - 201 , - 28 , - 743 , - 2346 , - 101 , - 1112 , - 643 , - 1062 , - 1 , - 2196 , - 543 , - 2146 , - 2269 , - 912 , - 443 , - 862 , - 2169 , - 1996 , - 343 , - 1946 , - 2069 , - 712 , - 243 , - 662 , - 1969 , - 1796 , - 143 , - 1746 , - 1869 , - 512 , - 43 , - 462 , - 1769 , - 1596 , - 2311 , - 1546 , - 1669 , - 312 , - 2211 , - 262 , - 1569 , - 1396 , - 2111 , - 1346 , - 1469 , - 112 , - 2011 , - 62 , - 1369 , - 1196 , - 1911 , - 1146 , - 1269 , - 2280 , - 1811 , - 2230 , - 1169 , - 996 , - 1711 , - 946 , - 1069 , - 2080 , - 1611 , - 2030 , - 969 , - 796 , - 1511 , - 746 , - 869 , - 1880 , - 1411 , - 1830 , - 769 , - 596 , - 1311 , - 546 , - 669 , - 1680 , - 1211 , - 1630 , - 569 , - 396 , - 1111 , - 346 , - 469 , - 1480 , - 1011 , - 1430 , - 369 , - 196 , - 911 , - 146 , - 269 , - 1280 , - 811 , - 1230 , - 169 , - 2364 , - 711 , - 2314 , - 69 , - 1080 , - 611 , - 1030 , - 2337 , - 2164 , - 511 , - 2114 , - 2237 , - 880 , - 411 , - 830 , - 2137 , - 1964 , - 311 , - 1914 , - 2037 , - 680 , - 211 , - 630 , - 1937 , - 1764 , - 111 , - 1714 , - 1837 , - 480 , - 11 , - 430 , - 1737 , - 1564 , - 2279 , - 1514 , - 1637 , - 280 , - 2179 , - 230 , - 1537 , - 1364 , - 2079 , - 1314 , - 1437 , - 80 , - 1979 , - 30 , - 1337 , - 1164 , - 1879 , - 1114 , - 1237 , - 2248 , - 1779 , - 2198 , - 1137 , - 964 , - 1679 , - 914 , - 1037 , - 2048 , - 1579 , - 1998 , - 937 , - 764 , - 1479 , - 714 , - 837 , - 1848 , - 1379 , - 1798 , - 737 , - 564 , - 1279 , - 514 , - 637 , - 1648 , - 1179 , - 1598 , - 537 , - 364 , - 1079 , - 314 , - 437 , - 1448 , - 979 , - 1398 , - 337 , - 164 , - 879 , - 114 , - 237 , - 1248 , - 779 , - 1198 , - 137 , - 2332 , - 679 , - 2282 , - 37 , - 1048 , - 579 , - 998 , - 2305 , - 2132 , - 479 , - 2082 , - 2205 , - 848 , - 379 , - 798 , - 2105 , - 1932 , - 279 , - 1882 , - 2005 , - 648 , - 179 , - 598 , - 1905 , - 1732 , - 79 , - 1682 , - 1805 , - 448 , - 2347 , - 398 , - 1705 , - 1532 , - 2247 , - 1482 , - 1605 , - 248 , - 2147 , - 198 , - 1505 , - 1332 , - 2047 , - 1282 , - 1405 , - 48 , - 1947 , - 2366 , - 1305 , - 1132 , - 1847 , - 1082 , - 1205 , - 2216 , - 1747 , - 2166 , - 1105 , - 932 , - 1647 , - 882 , - 1005 , - 2016 , - 1547 , - 1966 , - 905 , - 732 , - 1447 , - 682 , - 805 , - 1816 , - 1347 , - 1766 , - 705 , - 532 , - 1247 , - 482 , - 605 , - 1616 , - 1147 , - 1566 , - 505 , - 332 , - 1047 , - 282 , - 405 , - 1416 , - 947 , - 1366 , - 305 , - 132 , - 847 , - 82 , - 205 , - 1216 , - 747 , - 1166 , - 105 , - 2300 , - 647 , - 2250 , - 5 , - 1016 , - 547 , - 966 , - 2273 , - 2100 , - 447 , - 2050 , - 2173 , - 816 , - 347 , - 766 , - 2073 , - 1900 , - 247 , - 1850 , - 1973 , - 616 , - 147 , - 566 , - 1873 , - 1700 , - 47 , - 1650 , - 1773 , - 416 , - 2315 , - 366 , - 1673 , - 1500 , - 2215 , - 1450 , - 1573 , - 216 , - 2115 , - 166 , - 1473 , - 1300 , - 2015 , - 1250 , - 1373 , - 16 , - 1915 , - 2334 , - 1273 , - 1100 , - 1815 , - 1050 , - 1173 , - 2184 , - 1715 , - 2134 , - 1073 , - 900 , - 1615 , - 850 , - 973 , - 1984 , - 1515 , - 1934 , - 873 , - 700 , - 1415 , - 650 , - 773 , - 1784 , - 1315 , - 1734 , - 673 , - 500 , - 1215 , - 450 , - 573 , - 1584 , - 1115 , - 1534 , - 473 , - 300 , - 1015 , - 250 , - 373 , - 1384 , - 915 , - 1334 , - 273 , - 100 , - 815 , - 50 , - 173 , - 1184 , - 715 , - 1134 , - 73 , - 2268 , - 615 , - 2218 , - 2341 , - 984 , - 515 , - 934 , - 2241 , - 2068 , - 415 , - 2018 , - 2141 , - 784 , - 315 , - 734 , - 2041 , - 1868 , - 215 , - 1818 , - 1941 , - 584 , - 115 , - 534 , - 1841 , - 1668 , - 15 , - 1618 , - 1741 , - 384 , - 2283 , - 334 , - 1641 , - 1468 , - 2183 , - 1418 , - 1541 , - 184 , - 2083 , - 134 , - 1441 , - 1268 , - 1983 , - 1218 , - 1341 , - 2352 , - 1883 , - 2302 , - 1241 , - 1068 , - 1783 , - 1018 , - 1141 , - 2152 , - 1683 , - 2102 , - 1041 , - 868 , - 1583 , - 818 , - 941 , - 1952 , - 1483 , - 1902 , - 841 , - 668 , - 1383 , - 618 , - 741 , - 1752 , - 1283 , - 1702 , - 641 , - 468 , - 1183 , - 418 , - 541 , - 1552 , - 1083 , - 1502 , - 441 , - 268 , - 983 , - 218 , - 341 , - 1352 , - 883 , - 1302 , - 241 , - 68 , - 783 , - 18 , - 141 , - 1152 , - 683 , - 1102 , - 41 , - 2236 , - 583 , - 2186 , - 2309 , - 952 , - 483 , - 902 , - 2209 , - 2036 , - 383 , - 1986 , - 2109 , - 752 , - 283 , - 702 , - 2009 , - 1836 , - 183 , - 1786 , - 1909 , - 552 , - 83 , - 502 , - 1809 , - 1636 , - 2351 , - 1586 , - 1709 , - 352 , - 2251 , - 302 , - 1609 , - 1436 , - 2151 , - 1386 , - 1509 , - 152 , - 2051 , - 102 , - 1409 , - 1236 , - 1951 , - 1186 , - 1309 , - 2320 , - 1851 , - 2270 , - 1209 , - 1036 , - 1751 , - 986 , - 1109 , - 2120 , - 1651 , - 2070 , - 1009 , - 836 , - 1551 , - 786 , - 909 , - 1920 , - 1451 , - 1870 , - 809 , - 636 , - 1351 , - 586 , - 709 , - 1720 , - 1251 , - 1670 , - 609 , - 436 , - 1151 , - 386 , - 509 , - 1520 , - 1051 , - 1470 , - 409 , - 236 , - 951 , - 186 , - 309 , - 1320 , - 851 , - 1270 , - 209 , - 36 , - 751 , - 2354 , - 109 , - 1120 , - 651 , - 1070 , - 9 , - 2204 , - 551 , - 2154 , - 2277 , - 920 , - 451 , - 870 , - 2177 , - 2004 , - 351 , - 1954 , - 2077 , - 720 , - 251 , - 670 , - 1977 , - 1804 , - 151 , - 1754 , - 1877 , - 520 , - 51 , - 470 , - 1777 , - 1604 , - 2319 , - 1554 , - 1677 , - 320 , - 2219 , - 270 , - 1577 , - 1404 , - 2119 , - 1354 , - 1477 , - 120 , - 2019 , - 70 , - 1377 , - 1204 , - 1919 , - 1154 , - 1277 , - 2288 , - 1819 , - 2238 , - 1177 , - 1004 , - 1719 , - 954 , - 1077 , - 2088 , - 1619 , - 2038 , - 977 , - 804 , - 1519 , - 754 , - 877 , - 1888 , - 1419 , - 1838 , - 777 , - 604 , - 1319 , - 554 , - 677 , - 1688 , - 1219 , - 1638 , - 577 , - 404 , - 1119 , - 354 , - 477 , - 1488 , - 1019 , - 1438 , - 377 , - 204 , - 919 , - 154 , - 277 , - 1288 , - 819 , - 1238 , - 177 , - 4 , - 719 , - 2322 , - 77 , - 1088 , - 619 , - 1038 , - 2345 , - 2172 , - 519 , - 2122 , - 2245 , - 888 , - 419 , - 838 , - 2145 , - 1972 , - 319 , - 1922 , - 2045 , - 688 , - 219 , - 638 , - 1945 , - 1772 , - 119 , - 1722 , - 1845 , - 488 , - 19 , - 438 , - 1745 , - 1572 , - 2287 , - 1522 , - 1645 , - 288 , - 2187 , - 238 , - 1545 , - 1372 , - 2087 , - 1322 , - 1445 , - 88 , - 1987 , - 38 , - 1345 , - 1172 , - 1887 , - 1122 , - 1245 , - 2256 , - 1787 , - 2206 , - 1145 , - 972 , - 1687 , - 922 , - 1045 , - 2056 , - 1587 , - 2006 , - 945 , - 772 , - 1487 , - 722 , - 845 , - 1856 , - 1387 , - 1806 , - 745 , - 572 , - 1287 , - 522 , - 645 , - 1656 , - 1187 , - 1606 , - 545 , - 372 , - 1087 , - 322 , - 445 , - 1456 , - 987 , - 1406 , - 345 , - 172 , - 887 , - 122 , - 245 , - 1256 , - 787 , - 1206 , - 145 , - 2340 , - 687 , - 2290 , - 45 , - 1056 , - 587 , - 1006 , - 2313 , - 2140 , - 487 , - 2090 , - 2213 , - 856 , - 387 , - 806 , - 2113 , - 1940 , - 287 , - 1890 , - 2013 , - 656 , - 187 , - 606 , - 1913 , - 1740 , - 87 , - 1690 , - 1813 , - 456 , - 2355 , - 406 , - 1713 , - 1540 , - 2255 , - 1490 , - 1613 , - 256 , - 2155 , - 206 , - 1513 , - 1340 , - 2055 , - 1290 , - 1413 , - 56 , - 1955 , - 6 , - 1313 , - 1140 , - 1855 , - 1090 , - 1213 , - 2224 , - 1755 , - 2174 , - 1113 , - 940 , - 1655 , - 890 , - 1013 , - 2024 , - 1555 , - 1974 , - 913 , - 740 , - 1455 , - 690 , - 813 , - 1824 , - 1355 , - 1774 , - 713 , - 540 , - 1255 , - 490 , - 613 , - 1624 , - 1155 , - 1574 , - 513 , - 340 , - 1055 , - 290 , - 413 , - 1424 , - 955 , - 1374 , - 313 , - 140 , - 855 , - 90 , - 213 , - 1224 , - 755 , - 1174 , - 113 , - 2308 , - 655 , - 2258 , - 13 , - 1024 , - 555 , - 974 , - 2281 , - 2108 , - 455 , - 2058 , - 2181 , - 824 , - 355 , - 774 , - 2081 , - 1908 , - 255 , - 1858 , - 1981 , - 624 , - 155 , - 574 , - 1881 , - 1708 , - 55 , - 1658 , - 1781 , - 424 , - 2323 , - 374 , - 1681 , - 1508 , - 2223 , - 1458 , - 1581 , - 224 , - 2123 , - 174 , - 1481 , - 1308 , - 2023 , - 1258 , - 1381 , - 24 , - 1923 , - 2342 , - 1281 , - 1108 , - 1823 , - 1058 , - 1181 , - 2192 , - 1723 , - 2142 , - 1081 , - 908 , - 1623 , - 858 , - 981 , - 1992 , - 1523 , - 1942 , - 881 , - 708 , - 1423 , - 658 , - 781 , - 1792 , - 1323 , - 1742 , - 681 , - 508 , - 1223 , - 458 , - 581 , - 1592 , - 1123 , - 1542 , - 481 , - 308 , - 1023 , - 258 , - 381 , - 1392 , - 923 , - 1342 , - 281 , - 108 , - 823 , - 58 , - 181 , - 1192 , - 723 , - 1142 , - 81 , - 2276 , - 623 , - 2226 , - 2349 , - 992 , - 523 , - 942 , - 2249 , - 2076 , - 423 , - 2026 , - 2149 , - 792 , - 323 , - 742 , - 2049 , - 1876 , - 223 , - 1826 , - 1949 , - 592 , - 123 , - 542 , - 1849 , - 1676 , - 23 , - 1626 , - 1749 , - 392 , - 2291 , - 342 , - 1649 , - 1476 , - 2191 , - 1426 , - 1549 , - 192 , - 2091 , - 142 , - 1449 , - 1276 , - 1991 , - 1226 , - 1349 , - 2360 , - 1891 , - 2310 , - 1249 , - 1076 , - 1791 , - 1026 , - 1149 , - 2160 , - 1691 , - 2110 , - 1049 , - 876 , - 1591 , - 826 , - 949 , - 1960 , - 1491 , - 1910 , - 849 , - 676 , - 1391 , - 626 , - 749 , - 1760 , - 1291 , - 1710 , - 649 , - 476 , - 1191 , - 426 , - 549 , - 1560 , - 1091 , - 1510 , - 449 , - 276 , - 991 , - 226 , - 349 , - 1360 , - 891 , - 1310 , - 249 , - 76 , - 791 , - 26 , - 149 , - 1160 , - 691 , - 1110 , - 49 , - 2244 , - 591 , - 2194 , - 2317 , - 960 , - 491 , - 910 , - 2217 , - 2044 , - 391 , - 1994 , - 2117 , - 760 , - 291 , - 710 , - 2017 , - 1844 , - 191 , - 1794 , - 1917 , - 560 , - 91 , - 510 , - 1817 , - 1644 , - 2359 , - 1594 , - 1717 , - 360 , - 2259 , - 310 , - 1617 , - 1444 , - 2159 , - 1394 , - 1517 , - 160 , - 2059 , - 110 , - 1417 , - 1244 , - 1959 , - 1194 , - 1317 , - 2328 , - 1859 , - 2278 , - 1217 , - 1044 , - 1759 , - 994 , - 1117 , - 2128 , - 1659 , - 2078 , - 1017 , - 844 , - 1559 , - 794 , - 917 , - 1928 , - 1459 , - 1878 , - 817 , - 644 , - 1359 , - 594 , - 717 , - 1728 , - 1259 , - 1678 , - 617 , - 444 , - 1159 , - 394 , - 517 , - 1528 , - 1059 , - 1478 , - 417 , - 244 , - 959 , - 194 , - 317 , - 1328 , - 859 , - 1278 , - 217 , - 44 , - 759 , - 2362 , - 117 , - 1128 , - 659 , - 1078 , - 17 , - 2212 , - 559 , - 2162 , - 2285 , - 928 , - 459 , - 878 , - 2185 , - 2012 , - 359 , - 1962 , - 2085 , - 728 , - 259 , - 678 , - 1985 , - 1812 , - 159 , - 1762 , - 1885 , - 528 , - 59 , - 478 , - 1785 , - 1612 , - 2327 , - 1562 , - 1685 , - 328 , - 2227 , - 278 , - 1585 , - 1412 , - 2127 , - 1362 , - 1485 , - 128 , - 2027 , - 78 , - 1385 , - 1212 , - 1927 , - 1162 , - 1285 , - 2296 , - 1827 , - 2246 , - 1185 , - 1012 , - 1727 , - 962 , - 1085 , - 2096 , - 1627 , - 2046 , - 985 , - 812 , - 1527 , - 762 , - 885 , - 1896 , - 1427 , - 1846 , - 785 , - 612 , - 1327 , - 562 , - 685 , - 1696 , - 1227 , - 1646 , - 585 , - 412 , - 1127 , - 362 , - 485 , - 1496 , - 1027 , - 1446 , - 385 , - 212 , - 927 , - 162 , - 285 , - 1296 , - 827 , - 1246 , - 185 , - 12 , - 727 , - 2330 , - 85 , - 1096 , - 627 , - 1046 , - 2353 , - 2180 , - 527 , - 2130 , - 2253 , - 896 , - 427 , - 846 , - 2153 , - 1980 , - 327 , - 1930 , - 2053 , - 696 , - 227 , - 646 , - 1953 , - 1780 , - 127 , - 1730 , - 1853 , - 496 , - 27 , - 446 , - 1753 , - 1580 , - 2295 , - 1530 , - 1653 , - 296 , - 2195 , - 246 , - 1553 , - 1380 , - 2095 , - 1330 , - 1453 , - 96 , - 1995 , - 46 , - 1353 , - 1180 , - 1895 , - 1130 , - 1253 , - 2264 , - 1795 , - 2214 , - 1153 , - 980 , - 1695 , - 930 , - 1053 , - 2064 , - 1595 , - 2014 , - 953 , - 780 , - 1495 , - 730 , - 853 , - 1864 , - 1395 , - 1814 , - 753 , - 580 , - 1295 , - 530 , - 653 , - 1664 , - 1195 , - 1614 , - 553 , - 380 , - 1095 , - 330 , - 453 , - 1464 , - 995 , - 1414 , - 353 , - 180 , - 895 , - 130 , - 253 , - 1264 , - 795 , - 1214 , - 153 , - 2348 , - 695 , - 2298 , - 53 , - 1064 , - 595 , - 1014 , - 2321 , - 2148 , - 495 , - 2098 , - 2221 , - 864 , - 395 , - 814 , - 2121 , - 1948 , - 295 , - 1898 , - 2021 , - 664 , - 195 , - 614 , - 1921 , - 1748 , - 95 , - 1698 , - 1821 , - 464 , - 2363 , - 414 , - 1721 , - 1548 , - 2263 , - 1498 , - 1621 , - 264 , - 2163 , - 214 , - 1521 , - 1348 , - 2063 , - 1298 , - 1421 , - 64 , - 1963 , - 14 , - 1321 , - 1148 , - 1863 , - 1098 , - 1221 , - 2232 , - 1763 , - 2182 , - 1121 , - 948 , - 1663 , - 898 , - 1021 , - 2032 , - 1563 , - 1982 , - 921 , - 748 , - 1463 , - 698 , - 821 , - 1832 , - 1363 , - 1782 , - 721 , - 548 , - 1263 , - 498 , - 621 , - 1632 , - 1163 , - 1582 , - 521 , - 348 , - 1063 , - 298 , - 421 , - 1432 , - 963 , - 1382 , - 321 , - 148 , - 863 , - 98 , - 221 , - 1232 , - 763 , - 1182 , - 121 , - 2316 , - 663 , - 2266 , - 21 , - 1032 , - 563 , - 982 , - 2289 , - 2116 , - 463 , - 2066 , - 2189 , - 832 , - 363 , - 782 , - 2089 , - 1916 , - 263 , - 1866 , - 1989 , - 632 , - 163 , - 582 , - 1889 , - 1716 , - 63 , - 1666 , - 1789 , - 432 , - 2331 , - 382 , - 1689 , - 1516 , - 2231 , - 1466 , - 1589 , - 232 , - 2131 , - 182 , - 1489 , - 1316 , - 2031 , - 1266 , - 1389 , - 32 , - 1931 , - 2350 , - 1289 , - 1116 , - 1831 , - 1066 , - 1189 , - 2200 , - 1731 , - 2150 , - 1089 , - 916 , - 1631 , - 866 , - 989 , - 2000 , - 1531 , - 1950 , - 889 , - 716 , - 1431 , - 666 , - 789 , - 1800 , - 1331 , - 1750 , - 689 , - 516 , - 1231 , - 466 , - 589 , - 1600 , - 1131 , - 1550 , - 489 , - 316 , - 1031 , - 266 , - 389 , - 1400 , - 931 , - 1350 , - 289 , - 116 , - 831 , - 66 , - 189 , - 1200 , - 731 , - 1150 , - 89 , - 2284 , - 631 , - 2234 , - 2357 , - 1000 , - 531 , - 950 , - 2257 , - 2084 , - 431 , - 2034 , - 2157 , - 800 , - 331 , - 750 , - 2057 , - 1884 , - 231 , - 1834 , - 1957 , - 600 , - 131 , - 550 , - 1857 , - 1684 , - 31 , - 1634 , - 1757 , - 400 , - 2299 , - 350 , - 1657 , - 1484 , - 2199 , - 1434 , - 1557 , - 200 , - 2099 , - 150 , - 1457 , - 1284 , - 1999 , - 1234 , - 1357 , - 0 , - 1329 , - 1746 , - 1251 , - 2276 , - 2389 , - 1590 , - 2311 , - 2120 , - 1017 , - 1434 , - 939 , - 1964 , - 2077 , - 1278 , - 1999 , - 1808 , - 705 , - 1122 , - 627 , - 1652 , - 1765 , - 966 , - 1687 , - 1496 , - 393 , - 810 , - 315 , - 1340 , - 1453 , - 654 , - 1375 , - 1184 , - 81 , - 498 , - 3 , - 1028 , - 1141 , - 342 , - 1063 , - 872 , - 2201 , - 186 , - 2123 , - 716 , - 829 , - 30 , - 751 , - 560 , - 1889 , - 2306 , - 1811 , - 404 , - 517 , - 2150 , - 439 , - 248 , - 1577 , - 1994 , - 1499 , - 92 , - 205 , - 1838 , - 127 , - 2368 , - 1265 , - 1682 , - 1187 , - 2212 , - 2325 , - 1526 , - 2247 , - 2056 , - 953 , - 1370 , - 875 , - 1900 , - 2013 , - 1214 , - 1935 , - 1744 , - 641 , - 1058 , - 563 , - 1588 , - 1701 , - 902 , - 1623 , - 1432 , - 329 , - 746 , - 251 , - 1276 , - 1389 , - 590 , - 1311 , - 1120 , - 17 , - 434 , - 2371 , - 964 , - 1077 , - 278 , - 999 , - 808 , - 2137 , - 122 , - 2059 , - 652 , - 765 , - 2398 , - 687 , - 496 , - 1825 , - 2242 , - 1747 , - 340 , - 453 , - 2086 , - 375 , - 184 , - 1513 , - 1930 , - 1435 , - 28 , - 141 , - 1774 , - 63 , - 2304 , - 1201 , - 1618 , - 1123 , - 2148 , - 2261 , - 1462 , - 2183 , - 1992 , - 889 , - 1306 , - 811 , - 1836 , - 1949 , - 1150 , - 1871 , - 1680 , - 577 , - 994 , - 499 , - 1524 , - 1637 , - 838 , - 1559 , - 1368 , - 265 , - 682 , - 187 , - 1212 , - 1325 , - 526 , - 1247 , - 1056 , - 2385 , - 370 , - 2307 , - 900 , - 1013 , - 214 , - 935 , - 744 , - 2073 , - 58 , - 1995 , - 588 , - 701 , - 2334 , - 623 , - 432 , - 1761 , - 2178 , - 1683 , - 276 , - 389 , - 2022 , - 311 , - 120 , - 1449 , - 1866 , - 1371 , - 2396 , - 77 , - 1710 , - 2431 , - 2240 , - 1137 , - 1554 , - 1059 , - 2084 , - 2197 , - 1398 , - 2119 , - 1928 , - 825 , - 1242 , - 747 , - 1772 , - 1885 , - 1086 , - 1807 , - 1616 , - 513 , - 930 , - 435 , - 1460 , - 1573 , - 774 , - 1495 , - 1304 , - 201 , - 618 , - 123 , - 1148 , - 1261 , - 462 , - 1183 , - 992 , - 2321 , - 306 , - 2243 , - 836 , - 949 , - 150 , - 871 , - 680 , - 2009 , - 2426 , - 1931 , - 524 , - 637 , - 2270 , - 559 , - 368 , - 1697 , - 2114 , - 1619 , - 212 , - 325 , - 1958 , - 247 , - 56 , - 1385 , - 1802 , - 1307 , - 2332 , - 13 , - 1646 , - 2367 , - 2176 , - 1073 , - 1490 , - 995 , - 2020 , - 2133 , - 1334 , - 2055 , - 1864 , - 761 , - 1178 , - 683 , - 1708 , - 1821 , - 1022 , - 1743 , - 1552 , - 449 , - 866 , - 371 , - 1396 , - 1509 , - 710 , - 1431 , - 1240 , - 137 , - 554 , - 59 , - 1084 , - 1197 , - 398 , - 1119 , - 928 , - 2257 , - 242 , - 2179 , - 772 , - 885 , - 86 , - 807 , - 616 , - 1945 , - 2362 , - 1867 , - 460 , - 573 , - 2206 , - 495 , - 304 , - 1633 , - 2050 , - 1555 , - 148 , - 261 , - 1894 , - 183 , - 2424 , - 1321 , - 1738 , - 1243 , - 2268 , - 2381 , - 1582 , - 2303 , - 2112 , - 1009 , - 1426 , - 931 , - 1956 , - 2069 , - 1270 , - 1991 , - 1800 , - 697 , - 1114 , - 619 , - 1644 , - 1757 , - 958 , - 1679 , - 1488 , - 385 , - 802 , - 307 , - 1332 , - 1445 , - 646 , - 1367 , - 1176 , - 73 , - 490 , - 2427 , - 1020 , - 1133 , - 334 , - 1055 , - 864 , - 2193 , - 178 , - 2115 , - 708 , - 821 , - 22 , - 743 , - 552 , - 1881 , - 2298 , - 1803 , - 396 , - 509 , - 2142 , - 431 , - 240 , - 1569 , - 1986 , - 1491 , - 84 , - 197 , - 1830 , - 119 , - 2360 , - 1257 , - 1674 , - 1179 , - 2204 , - 2317 , - 1518 , - 2239 , - 2048 , - 945 , - 1362 , - 867 , - 1892 , - 2005 , - 1206 , - 1927 , - 1736 , - 633 , - 1050 , - 555 , - 1580 , - 1693 , - 894 , - 1615 , - 1424 , - 321 , - 738 , - 243 , - 1268 , - 1381 , - 582 , - 1303 , - 1112 , - 9 , - 426 , - 2363 , - 956 , - 1069 , - 270 , - 991 , - 800 , - 2129 , - 114 , - 2051 , - 644 , - 757 , - 2390 , - 679 , - 488 , - 1817 , - 2234 , - 1739 , - 332 , - 445 , - 2078 , - 367 , - 176 , - 1505 , - 1922 , - 1427 , - 20 , - 133 , - 1766 , - 55 , - 2296 , - 1193 , - 1610 , - 1115 , - 2140 , - 2253 , - 1454 , - 2175 , - 1984 , - 881 , - 1298 , - 803 , - 1828 , - 1941 , - 1142 , - 1863 , - 1672 , - 569 , - 986 , - 491 , - 1516 , - 1629 , - 830 , - 1551 , - 1360 , - 257 , - 674 , - 179 , - 1204 , - 1317 , - 518 , - 1239 , - 1048 , - 2377 , - 362 , - 2299 , - 892 , - 1005 , - 206 , - 927 , - 736 , - 2065 , - 50 , - 1987 , - 580 , - 693 , - 2326 , - 615 , - 424 , - 1753 , - 2170 , - 1675 , - 268 , - 381 , - 2014 , - 303 , - 112 , - 1441 , - 1858 , - 1363 , - 2388 , - 69 , - 1702 , - 2423 , - 2232 , - 1129 , - 1546 , - 1051 , - 2076 , - 2189 , - 1390 , - 2111 , - 1920 , - 817 , - 1234 , - 739 , - 1764 , - 1877 , - 1078 , - 1799 , - 1608 , - 505 , - 922 , - 427 , - 1452 , - 1565 , - 766 , - 1487 , - 1296 , - 193 , - 610 , - 115 , - 1140 , - 1253 , - 454 , - 1175 , - 984 , - 2313 , - 298 , - 2235 , - 828 , - 941 , - 142 , - 863 , - 672 , - 2001 , - 2418 , - 1923 , - 516 , - 629 , - 2262 , - 551 , - 360 , - 1689 , - 2106 , - 1611 , - 204 , - 317 , - 1950 , - 239 , - 48 , - 1377 , - 1794 , - 1299 , - 2324 , - 5 , - 1638 , - 2359 , - 2168 , - 1065 , - 1482 , - 987 , - 2012 , - 2125 , - 1326 , - 2047 , - 1856 , - 753 , - 1170 , - 675 , - 1700 , - 1813 , - 1014 , - 1735 , - 1544 , - 441 , - 858 , - 363 , - 1388 , - 1501 , - 702 , - 1423 , - 1232 , - 129 , - 546 , - 51 , - 1076 , - 1189 , - 390 , - 1111 , - 920 , - 2249 , - 234 , - 2171 , - 764 , - 877 , - 78 , - 799 , - 608 , - 1937 , - 2354 , - 1859 , - 452 , - 565 , - 2198 , - 487 , - 296 , - 1625 , - 2042 , - 1547 , - 140 , - 253 , - 1886 , - 175 , - 2416 , - 1313 , - 1730 , - 1235 , - 2260 , - 2373 , - 1574 , - 2295 , - 2104 , - 1001 , - 1418 , - 923 , - 1948 , - 2061 , - 1262 , - 1983 , - 1792 , - 689 , - 1106 , - 611 , - 1636 , - 1749 , - 950 , - 1671 , - 1480 , - 377 , - 794 , - 299 , - 1324 , - 1437 , - 638 , - 1359 , - 1168 , - 65 , - 482 , - 2419 , - 1012 , - 1125 , - 326 , - 1047 , - 856 , - 2185 , - 170 , - 2107 , - 700 , - 813 , - 14 , - 735 , - 544 , - 1873 , - 2290 , - 1795 , - 388 , - 501 , - 2134 , - 423 , - 232 , - 1561 , - 1978 , - 1483 , - 76 , - 189 , - 1822 , - 111 , - 2352 , - 1249 , - 1666 , - 1171 , - 2196 , - 2309 , - 1510 , - 2231 , - 2040 , - 937 , - 1354 , - 859 , - 1884 , - 1997 , - 1198 , - 1919 , - 1728 , - 625 , - 1042 , - 547 , - 1572 , - 1685 , - 886 , - 1607 , - 1416 , - 313 , - 730 , - 235 , - 1260 , - 1373 , - 574 , - 1295 , - 1104 , - 1 , - 418 , - 2355 , - 948 , - 1061 , - 262 , - 983 , - 792 , - 2121 , - 106 , - 2043 , - 636 , - 749 , - 2382 , - 671 , - 480 , - 1809 , - 2226 , - 1731 , - 324 , - 437 , - 2070 , - 359 , - 168 , - 1497 , - 1914 , - 1419 , - 12 , - 125 , - 1758 , - 47 , - 2288 , - 1185 , - 1602 , - 1107 , - 2132 , - 2245 , - 1446 , - 2167 , - 1976 , - 873 , - 1290 , - 795 , - 1820 , - 1933 , - 1134 , - 1855 , - 1664 , - 561 , - 978 , - 483 , - 1508 , - 1621 , - 822 , - 1543 , - 1352 , - 249 , - 666 , - 171 , - 1196 , - 1309 , - 510 , - 1231 , - 1040 , - 2369 , - 354 , - 2291 , - 884 , - 997 , - 198 , - 919 , - 728 , - 2057 , - 42 , - 1979 , - 572 , - 685 , - 2318 , - 607 , - 416 , - 1745 , - 2162 , - 1667 , - 260 , - 373 , - 2006 , - 295 , - 104 , - 1433 , - 1850 , - 1355 , - 2380 , - 61 , - 1694 , - 2415 , - 2224 , - 1121 , - 1538 , - 1043 , - 2068 , - 2181 , - 1382 , - 2103 , - 1912 , - 809 , - 1226 , - 731 , - 1756 , - 1869 , - 1070 , - 1791 , - 1600 , - 497 , - 914 , - 419 , - 1444 , - 1557 , - 758 , - 1479 , - 1288 , - 185 , - 602 , - 107 , - 1132 , - 1245 , - 446 , - 1167 , - 976 , - 2305 , - 290 , - 2227 , - 820 , - 933 , - 134 , - 855 , - 664 , - 1993 , - 2410 , - 1915 , - 508 , - 621 , - 2254 , - 543 , - 352 , - 1681 , - 2098 , - 1603 , - 196 , - 309 , - 1942 , - 231 , - 40 , - 1369 , - 1786 , - 1291 , - 2316 , - 2429 , - 1630 , - 2351 , - 2160 , - 1057 , - 1474 , - 979 , - 2004 , - 2117 , - 1318 , - 2039 , - 1848 , - 745 , - 1162 , - 667 , - 1692 , - 1805 , - 1006 , - 1727 , - 1536 , - 433 , - 850 , - 355 , - 1380 , - 1493 , - 694 , - 1415 , - 1224 , - 121 , - 538 , - 43 , - 1068 , - 1181 , - 382 , - 1103 , - 912 , - 2241 , - 226 , - 2163 , - 756 , - 869 , - 70 , - 791 , - 600 , - 1929 , - 2346 , - 1851 , - 444 , - 557 , - 2190 , - 479 , - 288 , - 1617 , - 2034 , - 1539 , - 132 , - 245 , - 1878 , - 167 , - 2408 , - 1305 , - 1722 , - 1227 , - 2252 , - 2365 , - 1566 , - 2287 , - 2096 , - 993 , - 1410 , - 915 , - 1940 , - 2053 , - 1254 , - 1975 , - 1784 , - 681 , - 1098 , - 603 , - 1628 , - 1741 , - 942 , - 1663 , - 1472 , - 369 , - 786 , - 291 , - 1316 , - 1429 , - 630 , - 1351 , - 1160 , - 57 , - 474 , - 2411 , - 1004 , - 1117 , - 318 , - 1039 , - 848 , - 2177 , - 162 , - 2099 , - 692 , - 805 , - 6 , - 727 , - 536 , - 1865 , - 2282 , - 1787 , - 380 , - 493 , - 2126 , - 415 , - 224 , - 1553 , - 1970 , - 1475 , - 68 , - 181 , - 1814 , - 103 , - 2344 , - 1241 , - 1658 , - 1163 , - 2188 , - 2301 , - 1502 , - 2223 , - 2032 , - 929 , - 1346 , - 851 , - 1876 , - 1989 , - 1190 , - 1911 , - 1720 , - 617 , - 1034 , - 539 , - 1564 , - 1677 , - 878 , - 1599 , - 1408 , - 305 , - 722 , - 227 , - 1252 , - 1365 , - 566 , - 1287 , - 1096 , - 2425 , - 410 , - 2347 , - 940 , - 1053 , - 254 , - 975 , - 784 , - 2113 , - 98 , - 2035 , - 628 , - 741 , - 2374 , - 663 , - 472 , - 1801 , - 2218 , - 1723 , - 316 , - 429 , - 2062 , - 351 , - 160 , - 1489 , - 1906 , - 1411 , - 4 , - 117 , - 1750 , - 39 , - 2280 , - 1177 , - 1594 , - 1099 , - 2124 , - 2237 , - 1438 , - 2159 , - 1968 , - 865 , - 1282 , - 787 , - 1812 , - 1925 , - 1126 , - 1847 , - 1656 , - 553 , - 970 , - 475 , - 1500 , - 1613 , - 814 , - 1535 , - 1344 , - 241 , - 658 , - 163 , - 1188 , - 1301 , - 502 , - 1223 , - 1032 , - 2361 , - 346 , - 2283 , - 876 , - 989 , - 190 , - 911 , - 720 , - 2049 , - 34 , - 1971 , - 564 , - 677 , - 2310 , - 599 , - 408 , - 1737 , - 2154 , - 1659 , - 252 , - 365 , - 1998 , - 287 , - 96 , - 1425 , - 1842 , - 1347 , - 2372 , - 53 , - 1686 , - 2407 , - 2216 , - 1113 , - 1530 , - 1035 , - 2060 , - 2173 , - 1374 , - 2095 , - 1904 , - 801 , - 1218 , - 723 , - 1748 , - 1861 , - 1062 , - 1783 , - 1592 , - 489 , - 906 , - 411 , - 1436 , - 1549 , - 750 , - 1471 , - 1280 , - 177 , - 594 , - 99 , - 1124 , - 1237 , - 438 , - 1159 , - 968 , - 2297 , - 282 , - 2219 , - 812 , - 925 , - 126 , - 847 , - 656 , - 1985 , - 2402 , - 1907 , - 500 , - 613 , - 2246 , - 535 , - 344 , - 1673 , - 2090 , - 1595 , - 188 , - 301 , - 1934 , - 223 , - 32 , - 1361 , - 1778 , - 1283 , - 2308 , - 2421 , - 1622 , - 2343 , - 2152 , - 1049 , - 1466 , - 971 , - 1996 , - 2109 , - 1310 , - 2031 , - 1840 , - 737 , - 1154 , - 659 , - 1684 , - 1797 , - 998 , - 1719 , - 1528 , - 425 , - 842 , - 347 , - 1372 , - 1485 , - 686 , - 1407 , - 1216 , - 113 , - 530 , - 35 , - 1060 , - 1173 , - 374 , - 1095 , - 904 , - 2233 , - 218 , - 2155 , - 748 , - 861 , - 62 , - 783 , - 592 , - 1921 , - 2338 , - 1843 , - 436 , - 549 , - 2182 , - 471 , - 280 , - 1609 , - 2026 , - 1531 , - 124 , - 237 , - 1870 , - 159 , - 2400 , - 1297 , - 1714 , - 1219 , - 2244 , - 2357 , - 1558 , - 2279 , - 2088 , - 985 , - 1402 , - 907 , - 1932 , - 2045 , - 1246 , - 1967 , - 1776 , - 673 , - 1090 , - 595 , - 1620 , - 1733 , - 934 , - 1655 , - 1464 , - 361 , - 778 , - 283 , - 1308 , - 1421 , - 622 , - 1343 , - 1152 , - 49 , - 466 , - 2403 , - 996 , - 1109 , - 310 , - 1031 , - 840 , - 2169 , - 154 , - 2091 , - 684 , - 797 , - 2430 , - 719 , - 528 , - 1857 , - 2274 , - 1779 , - 372 , - 485 , - 2118 , - 407 , - 216 , - 1545 , - 1962 , - 1467 , - 60 , - 173 , - 1806 , - 95 , - 2336 , - 1233 , - 1650 , - 1155 , - 2180 , - 2293 , - 1494 , - 2215 , - 2024 , - 921 , - 1338 , - 843 , - 1868 , - 1981 , - 1182 , - 1903 , - 1712 , - 609 , - 1026 , - 531 , - 1556 , - 1669 , - 870 , - 1591 , - 1400 , - 297 , - 714 , - 219 , - 1244 , - 1357 , - 558 , - 1279 , - 1088 , - 2417 , - 402 , - 2339 , - 932 , - 1045 , - 246 , - 967 , - 776 , - 2105 , - 90 , - 2027 , - 620 , - 733 , - 2366 , - 655 , - 464 , - 1793 , - 2210 , - 1715 , - 308 , - 421 , - 2054 , - 343 , - 152 , - 1481 , - 1898 , - 1403 , - 2428 , - 109 , - 1742 , - 31 , - 2272 , - 1169 , - 1586 , - 1091 , - 2116 , - 2229 , - 1430 , - 2151 , - 1960 , - 857 , - 1274 , - 779 , - 1804 , - 1917 , - 1118 , - 1839 , - 1648 , - 545 , - 962 , - 467 , - 1492 , - 1605 , - 806 , - 1527 , - 1336 , - 233 , - 650 , - 155 , - 1180 , - 1293 , - 494 , - 1215 , - 1024 , - 2353 , - 338 , - 2275 , - 868 , - 981 , - 182 , - 903 , - 712 , - 2041 , - 26 , - 1963 , - 556 , - 669 , - 2302 , - 591 , - 400 , - 1729 , - 2146 , - 1651 , - 244 , - 357 , - 1990 , - 279 , - 88 , - 1417 , - 1834 , - 1339 , - 2364 , - 45 , - 1678 , - 2399 , - 2208 , - 1105 , - 1522 , - 1027 , - 2052 , - 2165 , - 1366 , - 2087 , - 1896 , - 793 , - 1210 , - 715 , - 1740 , - 1853 , - 1054 , - 1775 , - 1584 , - 481 , - 898 , - 403 , - 1428 , - 1541 , - 742 , - 1463 , - 1272 , - 169 , - 586 , - 91 , - 1116 , - 1229 , - 430 , - 1151 , - 960 , - 2289 , - 274 , - 2211 , - 804 , - 917 , - 118 , - 839 , - 648 , - 1977 , - 2394 , - 1899 , - 492 , - 605 , - 2238 , - 527 , - 336 , - 1665 , - 2082 , - 1587 , - 180 , - 293 , - 1926 , - 215 , - 24 , - 1353 , - 1770 , - 1275 , - 2300 , - 2413 , - 1614 , - 2335 , - 2144 , - 1041 , - 1458 , - 963 , - 1988 , - 2101 , - 1302 , - 2023 , - 1832 , - 729 , - 1146 , - 651 , - 1676 , - 1789 , - 990 , - 1711 , - 1520 , - 417 , - 834 , - 339 , - 1364 , - 1477 , - 678 , - 1399 , - 1208 , - 105 , - 522 , - 27 , - 1052 , - 1165 , - 366 , - 1087 , - 896 , - 2225 , - 210 , - 2147 , - 740 , - 853 , - 54 , - 775 , - 584 , - 1913 , - 2330 , - 1835 , - 428 , - 541 , - 2174 , - 463 , - 272 , - 1601 , - 2018 , - 1523 , - 116 , - 229 , - 1862 , - 151 , - 2392 , - 1289 , - 1706 , - 1211 , - 2236 , - 2349 , - 1550 , - 2271 , - 2080 , - 977 , - 1394 , - 899 , - 1924 , - 2037 , - 1238 , - 1959 , - 1768 , - 665 , - 1082 , - 587 , - 1612 , - 1725 , - 926 , - 1647 , - 1456 , - 353 , - 770 , - 275 , - 1300 , - 1413 , - 614 , - 1335 , - 1144 , - 41 , - 458 , - 2395 , - 988 , - 1101 , - 302 , - 1023 , - 832 , - 2161 , - 146 , - 2083 , - 676 , - 789 , - 2422 , - 711 , - 520 , - 1849 , - 2266 , - 1771 , - 364 , - 477 , - 2110 , - 399 , - 208 , - 1537 , - 1954 , - 1459 , - 52 , - 165 , - 1798 , - 87 , - 2328 , - 1225 , - 1642 , - 1147 , - 2172 , - 2285 , - 1486 , - 2207 , - 2016 , - 913 , - 1330 , - 835 , - 1860 , - 1973 , - 1174 , - 1895 , - 1704 , - 601 , - 1018 , - 523 , - 1548 , - 1661 , - 862 , - 1583 , - 1392 , - 289 , - 706 , - 211 , - 1236 , - 1349 , - 550 , - 1271 , - 1080 , - 2409 , - 394 , - 2331 , - 924 , - 1037 , - 238 , - 959 , - 768 , - 2097 , - 82 , - 2019 , - 612 , - 725 , - 2358 , - 647 , - 456 , - 1785 , - 2202 , - 1707 , - 300 , - 413 , - 2046 , - 335 , - 144 , - 1473 , - 1890 , - 1395 , - 2420 , - 101 , - 1734 , - 23 , - 2264 , - 1161 , - 1578 , - 1083 , - 2108 , - 2221 , - 1422 , - 2143 , - 1952 , - 849 , - 1266 , - 771 , - 1796 , - 1909 , - 1110 , - 1831 , - 1640 , - 537 , - 954 , - 459 , - 1484 , - 1597 , - 798 , - 1519 , - 1328 , - 225 , - 642 , - 147 , - 1172 , - 1285 , - 486 , - 1207 , - 1016 , - 2345 , - 330 , - 2267 , - 860 , - 973 , - 174 , - 895 , - 704 , - 2033 , - 18 , - 1955 , - 548 , - 661 , - 2294 , - 583 , - 392 , - 1721 , - 2138 , - 1643 , - 236 , - 349 , - 1982 , - 271 , - 80 , - 1409 , - 1826 , - 1331 , - 2356 , - 37 , - 1670 , - 2391 , - 2200 , - 1097 , - 1514 , - 1019 , - 2044 , - 2157 , - 1358 , - 2079 , - 1888 , - 785 , - 1202 , - 707 , - 1732 , - 1845 , - 1046 , - 1767 , - 1576 , - 473 , - 890 , - 395 , - 1420 , - 1533 , - 734 , - 1455 , - 1264 , - 161 , - 578 , - 83 , - 1108 , - 1221 , - 422 , - 1143 , - 952 , - 2281 , - 266 , - 2203 , - 796 , - 909 , - 110 , - 831 , - 640 , - 1969 , - 2386 , - 1891 , - 484 , - 597 , - 2230 , - 519 , - 328 , - 1657 , - 2074 , - 1579 , - 172 , - 285 , - 1918 , - 207 , - 16 , - 1345 , - 1762 , - 1267 , - 2292 , - 2405 , - 1606 , - 2327 , - 2136 , - 1033 , - 1450 , - 955 , - 1980 , - 2093 , - 1294 , - 2015 , - 1824 , - 721 , - 1138 , - 643 , - 1668 , - 1781 , - 982 , - 1703 , - 1512 , - 409 , - 826 , - 331 , - 1356 , - 1469 , - 670 , - 1391 , - 1200 , - 97 , - 514 , - 19 , - 1044 , - 1157 , - 358 , - 1079 , - 888 , - 2217 , - 202 , - 2139 , - 732 , - 845 , - 46 , - 767 , - 576 , - 1905 , - 2322 , - 1827 , - 420 , - 533 , - 2166 , - 455 , - 264 , - 1593 , - 2010 , - 1515 , - 108 , - 221 , - 1854 , - 143 , - 2384 , - 1281 , - 1698 , - 1203 , - 2228 , - 2341 , - 1542 , - 2263 , - 2072 , - 969 , - 1386 , - 891 , - 1916 , - 2029 , - 1230 , - 1951 , - 1760 , - 657 , - 1074 , - 579 , - 1604 , - 1717 , - 918 , - 1639 , - 1448 , - 345 , - 762 , - 267 , - 1292 , - 1405 , - 606 , - 1327 , - 1136 , - 33 , - 450 , - 2387 , - 980 , - 1093 , - 294 , - 1015 , - 824 , - 2153 , - 138 , - 2075 , - 668 , - 781 , - 2414 , - 703 , - 512 , - 1841 , - 2258 , - 1763 , - 356 , - 469 , - 2102 , - 391 , - 200 , - 1529 , - 1946 , - 1451 , - 44 , - 157 , - 1790 , - 79 , - 2320 , - 1217 , - 1634 , - 1139 , - 2164 , - 2277 , - 1478 , - 2199 , - 2008 , - 905 , - 1322 , - 827 , - 1852 , - 1965 , - 1166 , - 1887 , - 1696 , - 593 , - 1010 , - 515 , - 1540 , - 1653 , - 854 , - 1575 , - 1384 , - 281 , - 698 , - 203 , - 1228 , - 1341 , - 542 , - 1263 , - 1072 , - 2401 , - 386 , - 2323 , - 916 , - 1029 , - 230 , - 951 , - 760 , - 2089 , - 74 , - 2011 , - 604 , - 717 , - 2350 , - 639 , - 448 , - 1777 , - 2194 , - 1699 , - 292 , - 405 , - 2038 , - 327 , - 136 , - 1465 , - 1882 , - 1387 , - 2412 , - 93 , - 1726 , - 15 , - 2256 , - 1153 , - 1570 , - 1075 , - 2100 , - 2213 , - 1414 , - 2135 , - 1944 , - 841 , - 1258 , - 763 , - 1788 , - 1901 , - 1102 , - 1823 , - 1632 , - 529 , - 946 , - 451 , - 1476 , - 1589 , - 790 , - 1511 , - 1320 , - 217 , - 634 , - 139 , - 1164 , - 1277 , - 478 , - 1199 , - 1008 , - 2337 , - 322 , - 2259 , - 852 , - 965 , - 166 , - 887 , - 696 , - 2025 , - 10 , - 1947 , - 540 , - 653 , - 2286 , - 575 , - 384 , - 1713 , - 2130 , - 1635 , - 228 , - 341 , - 1974 , - 263 , - 72 , - 1401 , - 1818 , - 1323 , - 2348 , - 29 , - 1662 , - 2383 , - 2192 , - 1089 , - 1506 , - 1011 , - 2036 , - 2149 , - 1350 , - 2071 , - 1880 , - 777 , - 1194 , - 699 , - 1724 , - 1837 , - 1038 , - 1759 , - 1568 , - 465 , - 882 , - 387 , - 1412 , - 1525 , - 726 , - 1447 , - 1256 , - 153 , - 570 , - 75 , - 1100 , - 1213 , - 414 , - 1135 , - 944 , - 2273 , - 258 , - 2195 , - 788 , - 901 , - 102 , - 823 , - 632 , - 1961 , - 2378 , - 1883 , - 476 , - 589 , - 2222 , - 511 , - 320 , - 1649 , - 2066 , - 1571 , - 164 , - 277 , - 1910 , - 199 , - 8 , - 1337 , - 1754 , - 1259 , - 2284 , - 2397 , - 1598 , - 2319 , - 2128 , - 1025 , - 1442 , - 947 , - 1972 , - 2085 , - 1286 , - 2007 , - 1816 , - 713 , - 1130 , - 635 , - 1660 , - 1773 , - 974 , - 1695 , - 1504 , - 401 , - 818 , - 323 , - 1348 , - 1461 , - 662 , - 1383 , - 1192 , - 89 , - 506 , - 11 , - 1036 , - 1149 , - 350 , - 1071 , - 880 , - 2209 , - 194 , - 2131 , - 724 , - 837 , - 38 , - 759 , - 568 , - 1897 , - 2314 , - 1819 , - 412 , - 525 , - 2158 , - 447 , - 256 , - 1585 , - 2002 , - 1507 , - 100 , - 213 , - 1846 , - 135 , - 2376 , - 1273 , - 1690 , - 1195 , - 2220 , - 2333 , - 1534 , - 2255 , - 2064 , - 961 , - 1378 , - 883 , - 1908 , - 2021 , - 1222 , - 1943 , - 1752 , - 649 , - 1066 , - 571 , - 1596 , - 1709 , - 910 , - 1631 , - 1440 , - 337 , - 754 , - 259 , - 1284 , - 1397 , - 598 , - 1319 , - 1128 , - 25 , - 442 , - 2379 , - 972 , - 1085 , - 286 , - 1007 , - 816 , - 2145 , - 130 , - 2067 , - 660 , - 773 , - 2406 , - 695 , - 504 , - 1833 , - 2250 , - 1755 , - 348 , - 461 , - 2094 , - 383 , - 192 , - 1521 , - 1938 , - 1443 , - 36 , - 149 , - 1782 , - 71 , - 2312 , - 1209 , - 1626 , - 1131 , - 2156 , - 2269 , - 1470 , - 2191 , - 2000 , - 897 , - 1314 , - 819 , - 1844 , - 1957 , - 1158 , - 1879 , - 1688 , - 585 , - 1002 , - 507 , - 1532 , - 1645 , - 846 , - 1567 , - 1376 , - 273 , - 690 , - 195 , - 1220 , - 1333 , - 534 , - 1255 , - 1064 , - 2393 , - 378 , - 2315 , - 908 , - 1021 , - 222 , - 943 , - 752 , - 2081 , - 66 , - 2003 , - 596 , - 709 , - 2342 , - 631 , - 440 , - 1769 , - 2186 , - 1691 , - 284 , - 397 , - 2030 , - 319 , - 128 , - 1457 , - 1874 , - 1379 , - 2404 , - 85 , - 1718 , - 7 , - 2248 , - 1145 , - 1562 , - 1067 , - 2092 , - 2205 , - 1406 , - 2127 , - 1936 , - 833 , - 1250 , - 755 , - 1780 , - 1893 , - 1094 , - 1815 , - 1624 , - 521 , - 938 , - 443 , - 1468 , - 1581 , - 782 , - 1503 , - 1312 , - 209 , - 626 , - 131 , - 1156 , - 1269 , - 470 , - 1191 , - 1000 , - 2329 , - 314 , - 2251 , - 844 , - 957 , - 158 , - 879 , - 688 , - 2017 , - 2 , - 1939 , - 532 , - 645 , - 2278 , - 567 , - 376 , - 1705 , - 2122 , - 1627 , - 220 , - 333 , - 1966 , - 255 , - 64 , - 1393 , - 1810 , - 1315 , - 2340 , - 21 , - 1654 , - 2375 , - 2184 , - 1081 , - 1498 , - 1003 , - 2028 , - 2141 , - 1342 , - 2063 , - 1872 , - 769 , - 1186 , - 691 , - 1716 , - 1829 , - 1030 , - 1751 , - 1560 , - 457 , - 874 , - 379 , - 1404 , - 1517 , - 718 , - 1439 , - 1248 , - 145 , - 562 , - 67 , - 1092 , - 1205 , - 406 , - 1127 , - 936 , - 2265 , - 250 , - 2187 , - 780 , - 893 , - 94 , - 815 , - 624 , - 1953 , - 2370 , - 1875 , - 468 , - 581 , - 2214 , - 503 , - 312 , - 1641 , - 2058 , - 1563 , - 156 , - 269 , - 1902 , - 191 , - 0 , - 25 , - 362 , - 1011 , - 1972 , - 749 , - 2334 , - 1735 , - 1448 , - 1473 , - 1810 , - 2459 , - 924 , - 2197 , - 1286 , - 687 , - 400 , - 425 , - 762 , - 1411 , - 2372 , - 1149 , - 238 , - 2135 , - 1848 , - 1873 , - 2210 , - 363 , - 1324 , - 101 , - 1686 , - 1087 , - 800 , - 825 , - 1162 , - 1811 , - 276 , - 1549 , - 638 , - 39 , - 2248 , - 2273 , - 114 , - 763 , - 1724 , - 501 , - 2086 , - 1487 , - 1200 , - 1225 , - 1562 , - 2211 , - 676 , - 1949 , - 1038 , - 439 , - 152 , - 177 , - 514 , - 1163 , - 2124 , - 901 , - 2486 , - 1887 , - 1600 , - 1625 , - 1962 , - 115 , - 1076 , - 2349 , - 1438 , - 839 , - 552 , - 577 , - 914 , - 1563 , - 28 , - 1301 , - 390 , - 2287 , - 2000 , - 2025 , - 2362 , - 515 , - 1476 , - 253 , - 1838 , - 1239 , - 952 , - 977 , - 1314 , - 1963 , - 428 , - 1701 , - 790 , - 191 , - 2400 , - 2425 , - 266 , - 915 , - 1876 , - 653 , - 2238 , - 1639 , - 1352 , - 1377 , - 1714 , - 2363 , - 828 , - 2101 , - 1190 , - 591 , - 304 , - 329 , - 666 , - 1315 , - 2276 , - 1053 , - 142 , - 2039 , - 1752 , - 1777 , - 2114 , - 267 , - 1228 , - 5 , - 1590 , - 991 , - 704 , - 729 , - 1066 , - 1715 , - 180 , - 1453 , - 542 , - 2439 , - 2152 , - 2177 , - 18 , - 667 , - 1628 , - 405 , - 1990 , - 1391 , - 1104 , - 1129 , - 1466 , - 2115 , - 580 , - 1853 , - 942 , - 343 , - 56 , - 81 , - 418 , - 1067 , - 2028 , - 805 , - 2390 , - 1791 , - 1504 , - 1529 , - 1866 , - 19 , - 980 , - 2253 , - 1342 , - 743 , - 456 , - 481 , - 818 , - 1467 , - 2428 , - 1205 , - 294 , - 2191 , - 1904 , - 1929 , - 2266 , - 419 , - 1380 , - 157 , - 1742 , - 1143 , - 856 , - 881 , - 1218 , - 1867 , - 332 , - 1605 , - 694 , - 95 , - 2304 , - 2329 , - 170 , - 819 , - 1780 , - 557 , - 2142 , - 1543 , - 1256 , - 1281 , - 1618 , - 2267 , - 732 , - 2005 , - 1094 , - 495 , - 208 , - 233 , - 570 , - 1219 , - 2180 , - 957 , - 46 , - 1943 , - 1656 , - 1681 , - 2018 , - 171 , - 1132 , - 2405 , - 1494 , - 895 , - 608 , - 633 , - 970 , - 1619 , - 84 , - 1357 , - 446 , - 2343 , - 2056 , - 2081 , - 2418 , - 571 , - 1532 , - 309 , - 1894 , - 1295 , - 1008 , - 1033 , - 1370 , - 2019 , - 484 , - 1757 , - 846 , - 247 , - 2456 , - 2481 , - 322 , - 971 , - 1932 , - 709 , - 2294 , - 1695 , - 1408 , - 1433 , - 1770 , - 2419 , - 884 , - 2157 , - 1246 , - 647 , - 360 , - 385 , - 722 , - 1371 , - 2332 , - 1109 , - 198 , - 2095 , - 1808 , - 1833 , - 2170 , - 323 , - 1284 , - 61 , - 1646 , - 1047 , - 760 , - 785 , - 1122 , - 1771 , - 236 , - 1509 , - 598 , - 2495 , - 2208 , - 2233 , - 74 , - 723 , - 1684 , - 461 , - 2046 , - 1447 , - 1160 , - 1185 , - 1522 , - 2171 , - 636 , - 1909 , - 998 , - 399 , - 112 , - 137 , - 474 , - 1123 , - 2084 , - 861 , - 2446 , - 1847 , - 1560 , - 1585 , - 1922 , - 75 , - 1036 , - 2309 , - 1398 , - 799 , - 512 , - 537 , - 874 , - 1523 , - 2484 , - 1261 , - 350 , - 2247 , - 1960 , - 1985 , - 2322 , - 475 , - 1436 , - 213 , - 1798 , - 1199 , - 912 , - 937 , - 1274 , - 1923 , - 388 , - 1661 , - 750 , - 151 , - 2360 , - 2385 , - 226 , - 875 , - 1836 , - 613 , - 2198 , - 1599 , - 1312 , - 1337 , - 1674 , - 2323 , - 788 , - 2061 , - 1150 , - 551 , - 264 , - 289 , - 626 , - 1275 , - 2236 , - 1013 , - 102 , - 1999 , - 1712 , - 1737 , - 2074 , - 227 , - 1188 , - 2461 , - 1550 , - 951 , - 664 , - 689 , - 1026 , - 1675 , - 140 , - 1413 , - 502 , - 2399 , - 2112 , - 2137 , - 2474 , - 627 , - 1588 , - 365 , - 1950 , - 1351 , - 1064 , - 1089 , - 1426 , - 2075 , - 540 , - 1813 , - 902 , - 303 , - 16 , - 41 , - 378 , - 1027 , - 1988 , - 765 , - 2350 , - 1751 , - 1464 , - 1489 , - 1826 , - 2475 , - 940 , - 2213 , - 1302 , - 703 , - 416 , - 441 , - 778 , - 1427 , - 2388 , - 1165 , - 254 , - 2151 , - 1864 , - 1889 , - 2226 , - 379 , - 1340 , - 117 , - 1702 , - 1103 , - 816 , - 841 , - 1178 , - 1827 , - 292 , - 1565 , - 654 , - 55 , - 2264 , - 2289 , - 130 , - 779 , - 1740 , - 517 , - 2102 , - 1503 , - 1216 , - 1241 , - 1578 , - 2227 , - 692 , - 1965 , - 1054 , - 455 , - 168 , - 193 , - 530 , - 1179 , - 2140 , - 917 , - 6 , - 1903 , - 1616 , - 1641 , - 1978 , - 131 , - 1092 , - 2365 , - 1454 , - 855 , - 568 , - 593 , - 930 , - 1579 , - 44 , - 1317 , - 406 , - 2303 , - 2016 , - 2041 , - 2378 , - 531 , - 1492 , - 269 , - 1854 , - 1255 , - 968 , - 993 , - 1330 , - 1979 , - 444 , - 1717 , - 806 , - 207 , - 2416 , - 2441 , - 282 , - 931 , - 1892 , - 669 , - 2254 , - 1655 , - 1368 , - 1393 , - 1730 , - 2379 , - 844 , - 2117 , - 1206 , - 607 , - 320 , - 345 , - 682 , - 1331 , - 2292 , - 1069 , - 158 , - 2055 , - 1768 , - 1793 , - 2130 , - 283 , - 1244 , - 21 , - 1606 , - 1007 , - 720 , - 745 , - 1082 , - 1731 , - 196 , - 1469 , - 558 , - 2455 , - 2168 , - 2193 , - 34 , - 683 , - 1644 , - 421 , - 2006 , - 1407 , - 1120 , - 1145 , - 1482 , - 2131 , - 596 , - 1869 , - 958 , - 359 , - 72 , - 97 , - 434 , - 1083 , - 2044 , - 821 , - 2406 , - 1807 , - 1520 , - 1545 , - 1882 , - 35 , - 996 , - 2269 , - 1358 , - 759 , - 472 , - 497 , - 834 , - 1483 , - 2444 , - 1221 , - 310 , - 2207 , - 1920 , - 1945 , - 2282 , - 435 , - 1396 , - 173 , - 1758 , - 1159 , - 872 , - 897 , - 1234 , - 1883 , - 348 , - 1621 , - 710 , - 111 , - 2320 , - 2345 , - 186 , - 835 , - 1796 , - 573 , - 2158 , - 1559 , - 1272 , - 1297 , - 1634 , - 2283 , - 748 , - 2021 , - 1110 , - 511 , - 224 , - 249 , - 586 , - 1235 , - 2196 , - 973 , - 62 , - 1959 , - 1672 , - 1697 , - 2034 , - 187 , - 1148 , - 2421 , - 1510 , - 911 , - 624 , - 649 , - 986 , - 1635 , - 100 , - 1373 , - 462 , - 2359 , - 2072 , - 2097 , - 2434 , - 587 , - 1548 , - 325 , - 1910 , - 1311 , - 1024 , - 1049 , - 1386 , - 2035 , - 500 , - 1773 , - 862 , - 263 , - 2472 , - 1 , - 338 , - 987 , - 1948 , - 725 , - 2310 , - 1711 , - 1424 , - 1449 , - 1786 , - 2435 , - 900 , - 2173 , - 1262 , - 663 , - 376 , - 401 , - 738 , - 1387 , - 2348 , - 1125 , - 214 , - 2111 , - 1824 , - 1849 , - 2186 , - 339 , - 1300 , - 77 , - 1662 , - 1063 , - 776 , - 801 , - 1138 , - 1787 , - 252 , - 1525 , - 614 , - 15 , - 2224 , - 2249 , - 90 , - 739 , - 1700 , - 477 , - 2062 , - 1463 , - 1176 , - 1201 , - 1538 , - 2187 , - 652 , - 1925 , - 1014 , - 415 , - 128 , - 153 , - 490 , - 1139 , - 2100 , - 877 , - 2462 , - 1863 , - 1576 , - 1601 , - 1938 , - 91 , - 1052 , - 2325 , - 1414 , - 815 , - 528 , - 553 , - 890 , - 1539 , - 4 , - 1277 , - 366 , - 2263 , - 1976 , - 2001 , - 2338 , - 491 , - 1452 , - 229 , - 1814 , - 1215 , - 928 , - 953 , - 1290 , - 1939 , - 404 , - 1677 , - 766 , - 167 , - 2376 , - 2401 , - 242 , - 891 , - 1852 , - 629 , - 2214 , - 1615 , - 1328 , - 1353 , - 1690 , - 2339 , - 804 , - 2077 , - 1166 , - 567 , - 280 , - 305 , - 642 , - 1291 , - 2252 , - 1029 , - 118 , - 2015 , - 1728 , - 1753 , - 2090 , - 243 , - 1204 , - 2477 , - 1566 , - 967 , - 680 , - 705 , - 1042 , - 1691 , - 156 , - 1429 , - 518 , - 2415 , - 2128 , - 2153 , - 2490 , - 643 , - 1604 , - 381 , - 1966 , - 1367 , - 1080 , - 1105 , - 1442 , - 2091 , - 556 , - 1829 , - 918 , - 319 , - 32 , - 57 , - 394 , - 1043 , - 2004 , - 781 , - 2366 , - 1767 , - 1480 , - 1505 , - 1842 , - 2491 , - 956 , - 2229 , - 1318 , - 719 , - 432 , - 457 , - 794 , - 1443 , - 2404 , - 1181 , - 270 , - 2167 , - 1880 , - 1905 , - 2242 , - 395 , - 1356 , - 133 , - 1718 , - 1119 , - 832 , - 857 , - 1194 , - 1843 , - 308 , - 1581 , - 670 , - 71 , - 2280 , - 2305 , - 146 , - 795 , - 1756 , - 533 , - 2118 , - 1519 , - 1232 , - 1257 , - 1594 , - 2243 , - 708 , - 1981 , - 1070 , - 471 , - 184 , - 209 , - 546 , - 1195 , - 2156 , - 933 , - 22 , - 1919 , - 1632 , - 1657 , - 1994 , - 147 , - 1108 , - 2381 , - 1470 , - 871 , - 584 , - 609 , - 946 , - 1595 , - 60 , - 1333 , - 422 , - 2319 , - 2032 , - 2057 , - 2394 , - 547 , - 1508 , - 285 , - 1870 , - 1271 , - 984 , - 1009 , - 1346 , - 1995 , - 460 , - 1733 , - 822 , - 223 , - 2432 , - 2457 , - 298 , - 947 , - 1908 , - 685 , - 2270 , - 1671 , - 1384 , - 1409 , - 1746 , - 2395 , - 860 , - 2133 , - 1222 , - 623 , - 336 , - 361 , - 698 , - 1347 , - 2308 , - 1085 , - 174 , - 2071 , - 1784 , - 1809 , - 2146 , - 299 , - 1260 , - 37 , - 1622 , - 1023 , - 736 , - 761 , - 1098 , - 1747 , - 212 , - 1485 , - 574 , - 2471 , - 2184 , - 2209 , - 50 , - 699 , - 1660 , - 437 , - 2022 , - 1423 , - 1136 , - 1161 , - 1498 , - 2147 , - 612 , - 1885 , - 974 , - 375 , - 88 , - 113 , - 450 , - 1099 , - 2060 , - 837 , - 2422 , - 1823 , - 1536 , - 1561 , - 1898 , - 51 , - 1012 , - 2285 , - 1374 , - 775 , - 488 , - 513 , - 850 , - 1499 , - 2460 , - 1237 , - 326 , - 2223 , - 1936 , - 1961 , - 2298 , - 451 , - 1412 , - 189 , - 1774 , - 1175 , - 888 , - 913 , - 1250 , - 1899 , - 364 , - 1637 , - 726 , - 127 , - 2336 , - 2361 , - 202 , - 851 , - 1812 , - 589 , - 2174 , - 1575 , - 1288 , - 1313 , - 1650 , - 2299 , - 764 , - 2037 , - 1126 , - 527 , - 240 , - 265 , - 602 , - 1251 , - 2212 , - 989 , - 78 , - 1975 , - 1688 , - 1713 , - 2050 , - 203 , - 1164 , - 2437 , - 1526 , - 927 , - 640 , - 665 , - 1002 , - 1651 , - 116 , - 1389 , - 478 , - 2375 , - 2088 , - 2113 , - 2450 , - 603 , - 1564 , - 341 , - 1926 , - 1327 , - 1040 , - 1065 , - 1402 , - 2051 , - 516 , - 1789 , - 878 , - 279 , - 2488 , - 17 , - 354 , - 1003 , - 1964 , - 741 , - 2326 , - 1727 , - 1440 , - 1465 , - 1802 , - 2451 , - 916 , - 2189 , - 1278 , - 679 , - 392 , - 417 , - 754 , - 1403 , - 2364 , - 1141 , - 230 , - 2127 , - 1840 , - 1865 , - 2202 , - 355 , - 1316 , - 93 , - 1678 , - 1079 , - 792 , - 817 , - 1154 , - 1803 , - 268 , - 1541 , - 630 , - 31 , - 2240 , - 2265 , - 106 , - 755 , - 1716 , - 493 , - 2078 , - 1479 , - 1192 , - 1217 , - 1554 , - 2203 , - 668 , - 1941 , - 1030 , - 431 , - 144 , - 169 , - 506 , - 1155 , - 2116 , - 893 , - 2478 , - 1879 , - 1592 , - 1617 , - 1954 , - 107 , - 1068 , - 2341 , - 1430 , - 831 , - 544 , - 569 , - 906 , - 1555 , - 20 , - 1293 , - 382 , - 2279 , - 1992 , - 2017 , - 2354 , - 507 , - 1468 , - 245 , - 1830 , - 1231 , - 944 , - 969 , - 1306 , - 1955 , - 420 , - 1693 , - 782 , - 183 , - 2392 , - 2417 , - 258 , - 907 , - 1868 , - 645 , - 2230 , - 1631 , - 1344 , - 1369 , - 1706 , - 2355 , - 820 , - 2093 , - 1182 , - 583 , - 296 , - 321 , - 658 , - 1307 , - 2268 , - 1045 , - 134 , - 2031 , - 1744 , - 1769 , - 2106 , - 259 , - 1220 , - 2493 , - 1582 , - 983 , - 696 , - 721 , - 1058 , - 1707 , - 172 , - 1445 , - 534 , - 2431 , - 2144 , - 2169 , - 10 , - 659 , - 1620 , - 397 , - 1982 , - 1383 , - 1096 , - 1121 , - 1458 , - 2107 , - 572 , - 1845 , - 934 , - 335 , - 48 , - 73 , - 410 , - 1059 , - 2020 , - 797 , - 2382 , - 1783 , - 1496 , - 1521 , - 1858 , - 11 , - 972 , - 2245 , - 1334 , - 735 , - 448 , - 473 , - 810 , - 1459 , - 2420 , - 1197 , - 286 , - 2183 , - 1896 , - 1921 , - 2258 , - 411 , - 1372 , - 149 , - 1734 , - 1135 , - 848 , - 873 , - 1210 , - 1859 , - 324 , - 1597 , - 686 , - 87 , - 2296 , - 2321 , - 162 , - 811 , - 1772 , - 549 , - 2134 , - 1535 , - 1248 , - 1273 , - 1610 , - 2259 , - 724 , - 1997 , - 1086 , - 487 , - 200 , - 225 , - 562 , - 1211 , - 2172 , - 949 , - 38 , - 1935 , - 1648 , - 1673 , - 2010 , - 163 , - 1124 , - 2397 , - 1486 , - 887 , - 600 , - 625 , - 962 , - 1611 , - 76 , - 1349 , - 438 , - 2335 , - 2048 , - 2073 , - 2410 , - 563 , - 1524 , - 301 , - 1886 , - 1287 , - 1000 , - 1025 , - 1362 , - 2011 , - 476 , - 1749 , - 838 , - 239 , - 2448 , - 2473 , - 314 , - 963 , - 1924 , - 701 , - 2286 , - 1687 , - 1400 , - 1425 , - 1762 , - 2411 , - 876 , - 2149 , - 1238 , - 639 , - 352 , - 377 , - 714 , - 1363 , - 2324 , - 1101 , - 190 , - 2087 , - 1800 , - 1825 , - 2162 , - 315 , - 1276 , - 53 , - 1638 , - 1039 , - 752 , - 777 , - 1114 , - 1763 , - 228 , - 1501 , - 590 , - 2487 , - 2200 , - 2225 , - 66 , - 715 , - 1676 , - 453 , - 2038 , - 1439 , - 1152 , - 1177 , - 1514 , - 2163 , - 628 , - 1901 , - 990 , - 391 , - 104 , - 129 , - 466 , - 1115 , - 2076 , - 853 , - 2438 , - 1839 , - 1552 , - 1577 , - 1914 , - 67 , - 1028 , - 2301 , - 1390 , - 791 , - 504 , - 529 , - 866 , - 1515 , - 2476 , - 1253 , - 342 , - 2239 , - 1952 , - 1977 , - 2314 , - 467 , - 1428 , - 205 , - 1790 , - 1191 , - 904 , - 929 , - 1266 , - 1915 , - 380 , - 1653 , - 742 , - 143 , - 2352 , - 2377 , - 218 , - 867 , - 1828 , - 605 , - 2190 , - 1591 , - 1304 , - 1329 , - 1666 , - 2315 , - 780 , - 2053 , - 1142 , - 543 , - 256 , - 281 , - 618 , - 1267 , - 2228 , - 1005 , - 94 , - 1991 , - 1704 , - 1729 , - 2066 , - 219 , - 1180 , - 2453 , - 1542 , - 943 , - 656 , - 681 , - 1018 , - 1667 , - 132 , - 1405 , - 494 , - 2391 , - 2104 , - 2129 , - 2466 , - 619 , - 1580 , - 357 , - 1942 , - 1343 , - 1056 , - 1081 , - 1418 , - 2067 , - 532 , - 1805 , - 894 , - 295 , - 8 , - 33 , - 370 , - 1019 , - 1980 , - 757 , - 2342 , - 1743 , - 1456 , - 1481 , - 1818 , - 2467 , - 932 , - 2205 , - 1294 , - 695 , - 408 , - 433 , - 770 , - 1419 , - 2380 , - 1157 , - 246 , - 2143 , - 1856 , - 1881 , - 2218 , - 371 , - 1332 , - 109 , - 1694 , - 1095 , - 808 , - 833 , - 1170 , - 1819 , - 284 , - 1557 , - 646 , - 47 , - 2256 , - 2281 , - 122 , - 771 , - 1732 , - 509 , - 2094 , - 1495 , - 1208 , - 1233 , - 1570 , - 2219 , - 684 , - 1957 , - 1046 , - 447 , - 160 , - 185 , - 522 , - 1171 , - 2132 , - 909 , - 2494 , - 1895 , - 1608 , - 1633 , - 1970 , - 123 , - 1084 , - 2357 , - 1446 , - 847 , - 560 , - 585 , - 922 , - 1571 , - 36 , - 1309 , - 398 , - 2295 , - 2008 , - 2033 , - 2370 , - 523 , - 1484 , - 261 , - 1846 , - 1247 , - 960 , - 985 , - 1322 , - 1971 , - 436 , - 1709 , - 798 , - 199 , - 2408 , - 2433 , - 274 , - 923 , - 1884 , - 661 , - 2246 , - 1647 , - 1360 , - 1385 , - 1722 , - 2371 , - 836 , - 2109 , - 1198 , - 599 , - 312 , - 337 , - 674 , - 1323 , - 2284 , - 1061 , - 150 , - 2047 , - 1760 , - 1785 , - 2122 , - 275 , - 1236 , - 13 , - 1598 , - 999 , - 712 , - 737 , - 1074 , - 1723 , - 188 , - 1461 , - 550 , - 2447 , - 2160 , - 2185 , - 26 , - 675 , - 1636 , - 413 , - 1998 , - 1399 , - 1112 , - 1137 , - 1474 , - 2123 , - 588 , - 1861 , - 950 , - 351 , - 64 , - 89 , - 426 , - 1075 , - 2036 , - 813 , - 2398 , - 1799 , - 1512 , - 1537 , - 1874 , - 27 , - 988 , - 2261 , - 1350 , - 751 , - 464 , - 489 , - 826 , - 1475 , - 2436 , - 1213 , - 302 , - 2199 , - 1912 , - 1937 , - 2274 , - 427 , - 1388 , - 165 , - 1750 , - 1151 , - 864 , - 889 , - 1226 , - 1875 , - 340 , - 1613 , - 702 , - 103 , - 2312 , - 2337 , - 178 , - 827 , - 1788 , - 565 , - 2150 , - 1551 , - 1264 , - 1289 , - 1626 , - 2275 , - 740 , - 2013 , - 1102 , - 503 , - 216 , - 241 , - 578 , - 1227 , - 2188 , - 965 , - 54 , - 1951 , - 1664 , - 1689 , - 2026 , - 179 , - 1140 , - 2413 , - 1502 , - 903 , - 616 , - 641 , - 978 , - 1627 , - 92 , - 1365 , - 454 , - 2351 , - 2064 , - 2089 , - 2426 , - 579 , - 1540 , - 317 , - 1902 , - 1303 , - 1016 , - 1041 , - 1378 , - 2027 , - 492 , - 1765 , - 854 , - 255 , - 2464 , - 2489 , - 330 , - 979 , - 1940 , - 717 , - 2302 , - 1703 , - 1416 , - 1441 , - 1778 , - 2427 , - 892 , - 2165 , - 1254 , - 655 , - 368 , - 393 , - 730 , - 1379 , - 2340 , - 1117 , - 206 , - 2103 , - 1816 , - 1841 , - 2178 , - 331 , - 1292 , - 69 , - 1654 , - 1055 , - 768 , - 793 , - 1130 , - 1779 , - 244 , - 1517 , - 606 , - 7 , - 2216 , - 2241 , - 82 , - 731 , - 1692 , - 469 , - 2054 , - 1455 , - 1168 , - 1193 , - 1530 , - 2179 , - 644 , - 1917 , - 1006 , - 407 , - 120 , - 145 , - 482 , - 1131 , - 2092 , - 869 , - 2454 , - 1855 , - 1568 , - 1593 , - 1930 , - 83 , - 1044 , - 2317 , - 1406 , - 807 , - 520 , - 545 , - 882 , - 1531 , - 2492 , - 1269 , - 358 , - 2255 , - 1968 , - 1993 , - 2330 , - 483 , - 1444 , - 221 , - 1806 , - 1207 , - 920 , - 945 , - 1282 , - 1931 , - 396 , - 1669 , - 758 , - 159 , - 2368 , - 2393 , - 234 , - 883 , - 1844 , - 621 , - 2206 , - 1607 , - 1320 , - 1345 , - 1682 , - 2331 , - 796 , - 2069 , - 1158 , - 559 , - 272 , - 297 , - 634 , - 1283 , - 2244 , - 1021 , - 110 , - 2007 , - 1720 , - 1745 , - 2082 , - 235 , - 1196 , - 2469 , - 1558 , - 959 , - 672 , - 697 , - 1034 , - 1683 , - 148 , - 1421 , - 510 , - 2407 , - 2120 , - 2145 , - 2482 , - 635 , - 1596 , - 373 , - 1958 , - 1359 , - 1072 , - 1097 , - 1434 , - 2083 , - 548 , - 1821 , - 910 , - 311 , - 24 , - 49 , - 386 , - 1035 , - 1996 , - 773 , - 2358 , - 1759 , - 1472 , - 1497 , - 1834 , - 2483 , - 948 , - 2221 , - 1310 , - 711 , - 424 , - 449 , - 786 , - 1435 , - 2396 , - 1173 , - 262 , - 2159 , - 1872 , - 1897 , - 2234 , - 387 , - 1348 , - 125 , - 1710 , - 1111 , - 824 , - 849 , - 1186 , - 1835 , - 300 , - 1573 , - 662 , - 63 , - 2272 , - 2297 , - 138 , - 787 , - 1748 , - 525 , - 2110 , - 1511 , - 1224 , - 1249 , - 1586 , - 2235 , - 700 , - 1973 , - 1062 , - 463 , - 176 , - 201 , - 538 , - 1187 , - 2148 , - 925 , - 14 , - 1911 , - 1624 , - 1649 , - 1986 , - 139 , - 1100 , - 2373 , - 1462 , - 863 , - 576 , - 601 , - 938 , - 1587 , - 52 , - 1325 , - 414 , - 2311 , - 2024 , - 2049 , - 2386 , - 539 , - 1500 , - 277 , - 1862 , - 1263 , - 976 , - 1001 , - 1338 , - 1987 , - 452 , - 1725 , - 814 , - 215 , - 2424 , - 2449 , - 290 , - 939 , - 1900 , - 677 , - 2262 , - 1663 , - 1376 , - 1401 , - 1738 , - 2387 , - 852 , - 2125 , - 1214 , - 615 , - 328 , - 353 , - 690 , - 1339 , - 2300 , - 1077 , - 166 , - 2063 , - 1776 , - 1801 , - 2138 , - 291 , - 1252 , - 29 , - 1614 , - 1015 , - 728 , - 753 , - 1090 , - 1739 , - 204 , - 1477 , - 566 , - 2463 , - 2176 , - 2201 , - 42 , - 691 , - 1652 , - 429 , - 2014 , - 1415 , - 1128 , - 1153 , - 1490 , - 2139 , - 604 , - 1877 , - 966 , - 367 , - 80 , - 105 , - 442 , - 1091 , - 2052 , - 829 , - 2414 , - 1815 , - 1528 , - 1553 , - 1890 , - 43 , - 1004 , - 2277 , - 1366 , - 767 , - 480 , - 505 , - 842 , - 1491 , - 2452 , - 1229 , - 318 , - 2215 , - 1928 , - 1953 , - 2290 , - 443 , - 1404 , - 181 , - 1766 , - 1167 , - 880 , - 905 , - 1242 , - 1891 , - 356 , - 1629 , - 718 , - 119 , - 2328 , - 2353 , - 194 , - 843 , - 1804 , - 581 , - 2166 , - 1567 , - 1280 , - 1305 , - 1642 , - 2291 , - 756 , - 2029 , - 1118 , - 519 , - 232 , - 257 , - 594 , - 1243 , - 2204 , - 981 , - 70 , - 1967 , - 1680 , - 1705 , - 2042 , - 195 , - 1156 , - 2429 , - 1518 , - 919 , - 632 , - 657 , - 994 , - 1643 , - 108 , - 1381 , - 470 , - 2367 , - 2080 , - 2105 , - 2442 , - 595 , - 1556 , - 333 , - 1918 , - 1319 , - 1032 , - 1057 , - 1394 , - 2043 , - 508 , - 1781 , - 870 , - 271 , - 2480 , - 9 , - 346 , - 995 , - 1956 , - 733 , - 2318 , - 1719 , - 1432 , - 1457 , - 1794 , - 2443 , - 908 , - 2181 , - 1270 , - 671 , - 384 , - 409 , - 746 , - 1395 , - 2356 , - 1133 , - 222 , - 2119 , - 1832 , - 1857 , - 2194 , - 347 , - 1308 , - 85 , - 1670 , - 1071 , - 784 , - 809 , - 1146 , - 1795 , - 260 , - 1533 , - 622 , - 23 , - 2232 , - 2257 , - 98 , - 747 , - 1708 , - 485 , - 2070 , - 1471 , - 1184 , - 1209 , - 1546 , - 2195 , - 660 , - 1933 , - 1022 , - 423 , - 136 , - 161 , - 498 , - 1147 , - 2108 , - 885 , - 2470 , - 1871 , - 1584 , - 1609 , - 1946 , - 99 , - 1060 , - 2333 , - 1422 , - 823 , - 536 , - 561 , - 898 , - 1547 , - 12 , - 1285 , - 374 , - 2271 , - 1984 , - 2009 , - 2346 , - 499 , - 1460 , - 237 , - 1822 , - 1223 , - 936 , - 961 , - 1298 , - 1947 , - 412 , - 1685 , - 774 , - 175 , - 2384 , - 2409 , - 250 , - 899 , - 1860 , - 637 , - 2222 , - 1623 , - 1336 , - 1361 , - 1698 , - 2347 , - 812 , - 2085 , - 1174 , - 575 , - 288 , - 313 , - 650 , - 1299 , - 2260 , - 1037 , - 126 , - 2023 , - 1736 , - 1761 , - 2098 , - 251 , - 1212 , - 2485 , - 1574 , - 975 , - 688 , - 713 , - 1050 , - 1699 , - 164 , - 1437 , - 526 , - 2423 , - 2136 , - 2161 , - 2 , - 651 , - 1612 , - 389 , - 1974 , - 1375 , - 1088 , - 1113 , - 1450 , - 2099 , - 564 , - 1837 , - 926 , - 327 , - 40 , - 65 , - 402 , - 1051 , - 2012 , - 789 , - 2374 , - 1775 , - 1488 , - 1513 , - 1850 , - 3 , - 964 , - 2237 , - 1326 , - 727 , - 440 , - 465 , - 802 , - 1451 , - 2412 , - 1189 , - 278 , - 2175 , - 1888 , - 1913 , - 2250 , - 403 , - 1364 , - 141 , - 1726 , - 1127 , - 840 , - 865 , - 1202 , - 1851 , - 316 , - 1589 , - 678 , - 79 , - 2288 , - 2313 , - 154 , - 803 , - 1764 , - 541 , - 2126 , - 1527 , - 1240 , - 1265 , - 1602 , - 2251 , - 716 , - 1989 , - 1078 , - 479 , - 192 , - 217 , - 554 , - 1203 , - 2164 , - 941 , - 30 , - 1927 , - 1640 , - 1665 , - 2002 , - 155 , - 1116 , - 2389 , - 1478 , - 879 , - 592 , - 617 , - 954 , - 1603 , - 68 , - 1341 , - 430 , - 2327 , - 2040 , - 2065 , - 2402 , - 555 , - 1516 , - 293 , - 1878 , - 1279 , - 992 , - 1017 , - 1354 , - 2003 , - 468 , - 1741 , - 830 , - 231 , - 2440 , - 2465 , - 306 , - 955 , - 1916 , - 693 , - 2278 , - 1679 , - 1392 , - 1417 , - 1754 , - 2403 , - 868 , - 2141 , - 1230 , - 631 , - 344 , - 369 , - 706 , - 1355 , - 2316 , - 1093 , - 182 , - 2079 , - 1792 , - 1817 , - 2154 , - 307 , - 1268 , - 45 , - 1630 , - 1031 , - 744 , - 769 , - 1106 , - 1755 , - 220 , - 1493 , - 582 , - 2479 , - 2192 , - 2217 , - 58 , - 707 , - 1668 , - 445 , - 2030 , - 1431 , - 1144 , - 1169 , - 1506 , - 2155 , - 620 , - 1893 , - 982 , - 383 , - 96 , - 121 , - 458 , - 1107 , - 2068 , - 845 , - 2430 , - 1831 , - 1544 , - 1569 , - 1906 , - 59 , - 1020 , - 2293 , - 1382 , - 783 , - 496 , - 521 , - 858 , - 1507 , - 2468 , - 1245 , - 334 , - 2231 , - 1944 , - 1969 , - 2306 , - 459 , - 1420 , - 197 , - 1782 , - 1183 , - 896 , - 921 , - 1258 , - 1907 , - 372 , - 1645 , - 734 , - 135 , - 2344 , - 2369 , - 210 , - 859 , - 1820 , - 597 , - 2182 , - 1583 , - 1296 , - 1321 , - 1658 , - 2307 , - 772 , - 2045 , - 1134 , - 535 , - 248 , - 273 , - 610 , - 1259 , - 2220 , - 997 , - 86 , - 1983 , - 1696 , - 1721 , - 2058 , - 211 , - 1172 , - 2445 , - 1534 , - 935 , - 648 , - 673 , - 1010 , - 1659 , - 124 , - 1397 , - 486 , - 2383 , - 2096 , - 2121 , - 2458 , - 611 , - 1572 , - 349 , - 1934 , - 1335 , - 1048 , - 1073 , - 1410 , - 2059 , - 524 , - 1797 , - 886 , - 287 , - 0 , - 359 , - 2158 , - 277 , - 2396 , - 835 , - 714 , - 2033 , - 2232 , - 1311 , - 1830 , - 1229 , - 2068 , - 1787 , - 386 , - 425 , - 1904 , - 2263 , - 1502 , - 2181 , - 1740 , - 179 , - 58 , - 1377 , - 1576 , - 655 , - 1174 , - 573 , - 1412 , - 1131 , - 2290 , - 2329 , - 1248 , - 1607 , - 846 , - 1525 , - 1084 , - 2083 , - 1962 , - 721 , - 920 , - 2559 , - 518 , - 2477 , - 756 , - 475 , - 1634 , - 1673 , - 592 , - 951 , - 190 , - 869 , - 428 , - 1427 , - 1306 , - 65 , - 264 , - 1903 , - 2422 , - 1821 , - 100 , - 2379 , - 978 , - 1017 , - 2496 , - 295 , - 2094 , - 213 , - 2332 , - 771 , - 650 , - 1969 , - 2168 , - 1247 , - 1766 , - 1165 , - 2004 , - 1723 , - 322 , - 361 , - 1840 , - 2199 , - 1438 , - 2117 , - 1676 , - 115 , - 2554 , - 1313 , - 1512 , - 591 , - 1110 , - 509 , - 1348 , - 1067 , - 2226 , - 2265 , - 1184 , - 1543 , - 782 , - 1461 , - 1020 , - 2019 , - 1898 , - 657 , - 856 , - 2495 , - 454 , - 2413 , - 692 , - 411 , - 1570 , - 1609 , - 528 , - 887 , - 126 , - 805 , - 364 , - 1363 , - 1242 , - 1 , - 200 , - 1839 , - 2358 , - 1757 , - 36 , - 2315 , - 914 , - 953 , - 2432 , - 231 , - 2030 , - 149 , - 2268 , - 707 , - 586 , - 1905 , - 2104 , - 1183 , - 1702 , - 1101 , - 1940 , - 1659 , - 258 , - 297 , - 1776 , - 2135 , - 1374 , - 2053 , - 1612 , - 51 , - 2490 , - 1249 , - 1448 , - 527 , - 1046 , - 445 , - 1284 , - 1003 , - 2162 , - 2201 , - 1120 , - 1479 , - 718 , - 1397 , - 956 , - 1955 , - 1834 , - 593 , - 792 , - 2431 , - 390 , - 2349 , - 628 , - 347 , - 1506 , - 1545 , - 464 , - 823 , - 62 , - 741 , - 300 , - 1299 , - 1178 , - 2497 , - 136 , - 1775 , - 2294 , - 1693 , - 2532 , - 2251 , - 850 , - 889 , - 2368 , - 167 , - 1966 , - 85 , - 2204 , - 643 , - 522 , - 1841 , - 2040 , - 1119 , - 1638 , - 1037 , - 1876 , - 1595 , - 194 , - 233 , - 1712 , - 2071 , - 1310 , - 1989 , - 1548 , - 2547 , - 2426 , - 1185 , - 1384 , - 463 , - 982 , - 381 , - 1220 , - 939 , - 2098 , - 2137 , - 1056 , - 1415 , - 654 , - 1333 , - 892 , - 1891 , - 1770 , - 529 , - 728 , - 2367 , - 326 , - 2285 , - 564 , - 283 , - 1442 , - 1481 , - 400 , - 759 , - 2558 , - 677 , - 236 , - 1235 , - 1114 , - 2433 , - 72 , - 1711 , - 2230 , - 1629 , - 2468 , - 2187 , - 786 , - 825 , - 2304 , - 103 , - 1902 , - 21 , - 2140 , - 579 , - 458 , - 1777 , - 1976 , - 1055 , - 1574 , - 973 , - 1812 , - 1531 , - 130 , - 169 , - 1648 , - 2007 , - 1246 , - 1925 , - 1484 , - 2483 , - 2362 , - 1121 , - 1320 , - 399 , - 918 , - 317 , - 1156 , - 875 , - 2034 , - 2073 , - 992 , - 1351 , - 590 , - 1269 , - 828 , - 1827 , - 1706 , - 465 , - 664 , - 2303 , - 262 , - 2221 , - 500 , - 219 , - 1378 , - 1417 , - 336 , - 695 , - 2494 , - 613 , - 172 , - 1171 , - 1050 , - 2369 , - 8 , - 1647 , - 2166 , - 1565 , - 2404 , - 2123 , - 722 , - 761 , - 2240 , - 39 , - 1838 , - 2517 , - 2076 , - 515 , - 394 , - 1713 , - 1912 , - 991 , - 1510 , - 909 , - 1748 , - 1467 , - 66 , - 105 , - 1584 , - 1943 , - 1182 , - 1861 , - 1420 , - 2419 , - 2298 , - 1057 , - 1256 , - 335 , - 854 , - 253 , - 1092 , - 811 , - 1970 , - 2009 , - 928 , - 1287 , - 526 , - 1205 , - 764 , - 1763 , - 1642 , - 401 , - 600 , - 2239 , - 198 , - 2157 , - 436 , - 155 , - 1314 , - 1353 , - 272 , - 631 , - 2430 , - 549 , - 108 , - 1107 , - 986 , - 2305 , - 2504 , - 1583 , - 2102 , - 1501 , - 2340 , - 2059 , - 658 , - 697 , - 2176 , - 2535 , - 1774 , - 2453 , - 2012 , - 451 , - 330 , - 1649 , - 1848 , - 927 , - 1446 , - 845 , - 1684 , - 1403 , - 2 , - 41 , - 1520 , - 1879 , - 1118 , - 1797 , - 1356 , - 2355 , - 2234 , - 993 , - 1192 , - 271 , - 790 , - 189 , - 1028 , - 747 , - 1906 , - 1945 , - 864 , - 1223 , - 462 , - 1141 , - 700 , - 1699 , - 1578 , - 337 , - 536 , - 2175 , - 134 , - 2093 , - 372 , - 91 , - 1250 , - 1289 , - 208 , - 567 , - 2366 , - 485 , - 44 , - 1043 , - 922 , - 2241 , - 2440 , - 1519 , - 2038 , - 1437 , - 2276 , - 1995 , - 594 , - 633 , - 2112 , - 2471 , - 1710 , - 2389 , - 1948 , - 387 , - 266 , - 1585 , - 1784 , - 863 , - 1382 , - 781 , - 1620 , - 1339 , - 2498 , - 2537 , - 1456 , - 1815 , - 1054 , - 1733 , - 1292 , - 2291 , - 2170 , - 929 , - 1128 , - 207 , - 726 , - 125 , - 964 , - 683 , - 1842 , - 1881 , - 800 , - 1159 , - 398 , - 1077 , - 636 , - 1635 , - 1514 , - 273 , - 472 , - 2111 , - 70 , - 2029 , - 308 , - 27 , - 1186 , - 1225 , - 144 , - 503 , - 2302 , - 421 , - 2540 , - 979 , - 858 , - 2177 , - 2376 , - 1455 , - 1974 , - 1373 , - 2212 , - 1931 , - 530 , - 569 , - 2048 , - 2407 , - 1646 , - 2325 , - 1884 , - 323 , - 202 , - 1521 , - 1720 , - 799 , - 1318 , - 717 , - 1556 , - 1275 , - 2434 , - 2473 , - 1392 , - 1751 , - 990 , - 1669 , - 1228 , - 2227 , - 2106 , - 865 , - 1064 , - 143 , - 662 , - 61 , - 900 , - 619 , - 1778 , - 1817 , - 736 , - 1095 , - 334 , - 1013 , - 572 , - 1571 , - 1450 , - 209 , - 408 , - 2047 , - 6 , - 1965 , - 244 , - 2523 , - 1122 , - 1161 , - 80 , - 439 , - 2238 , - 357 , - 2476 , - 915 , - 794 , - 2113 , - 2312 , - 1391 , - 1910 , - 1309 , - 2148 , - 1867 , - 466 , - 505 , - 1984 , - 2343 , - 1582 , - 2261 , - 1820 , - 259 , - 138 , - 1457 , - 1656 , - 735 , - 1254 , - 653 , - 1492 , - 1211 , - 2370 , - 2409 , - 1328 , - 1687 , - 926 , - 1605 , - 1164 , - 2163 , - 2042 , - 801 , - 1000 , - 79 , - 598 , - 2557 , - 836 , - 555 , - 1714 , - 1753 , - 672 , - 1031 , - 270 , - 949 , - 508 , - 1507 , - 1386 , - 145 , - 344 , - 1983 , - 2502 , - 1901 , - 180 , - 2459 , - 1058 , - 1097 , - 16 , - 375 , - 2174 , - 293 , - 2412 , - 851 , - 730 , - 2049 , - 2248 , - 1327 , - 1846 , - 1245 , - 2084 , - 1803 , - 402 , - 441 , - 1920 , - 2279 , - 1518 , - 2197 , - 1756 , - 195 , - 74 , - 1393 , - 1592 , - 671 , - 1190 , - 589 , - 1428 , - 1147 , - 2306 , - 2345 , - 1264 , - 1623 , - 862 , - 1541 , - 1100 , - 2099 , - 1978 , - 737 , - 936 , - 15 , - 534 , - 2493 , - 772 , - 491 , - 1650 , - 1689 , - 608 , - 967 , - 206 , - 885 , - 444 , - 1443 , - 1322 , - 81 , - 280 , - 1919 , - 2438 , - 1837 , - 116 , - 2395 , - 994 , - 1033 , - 2512 , - 311 , - 2110 , - 229 , - 2348 , - 787 , - 666 , - 1985 , - 2184 , - 1263 , - 1782 , - 1181 , - 2020 , - 1739 , - 338 , - 377 , - 1856 , - 2215 , - 1454 , - 2133 , - 1692 , - 131 , - 10 , - 1329 , - 1528 , - 607 , - 1126 , - 525 , - 1364 , - 1083 , - 2242 , - 2281 , - 1200 , - 1559 , - 798 , - 1477 , - 1036 , - 2035 , - 1914 , - 673 , - 872 , - 2511 , - 470 , - 2429 , - 708 , - 427 , - 1586 , - 1625 , - 544 , - 903 , - 142 , - 821 , - 380 , - 1379 , - 1258 , - 17 , - 216 , - 1855 , - 2374 , - 1773 , - 52 , - 2331 , - 930 , - 969 , - 2448 , - 247 , - 2046 , - 165 , - 2284 , - 723 , - 602 , - 1921 , - 2120 , - 1199 , - 1718 , - 1117 , - 1956 , - 1675 , - 274 , - 313 , - 1792 , - 2151 , - 1390 , - 2069 , - 1628 , - 67 , - 2506 , - 1265 , - 1464 , - 543 , - 1062 , - 461 , - 1300 , - 1019 , - 2178 , - 2217 , - 1136 , - 1495 , - 734 , - 1413 , - 972 , - 1971 , - 1850 , - 609 , - 808 , - 2447 , - 406 , - 2365 , - 644 , - 363 , - 1522 , - 1561 , - 480 , - 839 , - 78 , - 757 , - 316 , - 1315 , - 1194 , - 2513 , - 152 , - 1791 , - 2310 , - 1709 , - 2548 , - 2267 , - 866 , - 905 , - 2384 , - 183 , - 1982 , - 101 , - 2220 , - 659 , - 538 , - 1857 , - 2056 , - 1135 , - 1654 , - 1053 , - 1892 , - 1611 , - 210 , - 249 , - 1728 , - 2087 , - 1326 , - 2005 , - 1564 , - 3 , - 2442 , - 1201 , - 1400 , - 479 , - 998 , - 397 , - 1236 , - 955 , - 2114 , - 2153 , - 1072 , - 1431 , - 670 , - 1349 , - 908 , - 1907 , - 1786 , - 545 , - 744 , - 2383 , - 342 , - 2301 , - 580 , - 299 , - 1458 , - 1497 , - 416 , - 775 , - 14 , - 693 , - 252 , - 1251 , - 1130 , - 2449 , - 88 , - 1727 , - 2246 , - 1645 , - 2484 , - 2203 , - 802 , - 841 , - 2320 , - 119 , - 1918 , - 37 , - 2156 , - 595 , - 474 , - 1793 , - 1992 , - 1071 , - 1590 , - 989 , - 1828 , - 1547 , - 146 , - 185 , - 1664 , - 2023 , - 1262 , - 1941 , - 1500 , - 2499 , - 2378 , - 1137 , - 1336 , - 415 , - 934 , - 333 , - 1172 , - 891 , - 2050 , - 2089 , - 1008 , - 1367 , - 606 , - 1285 , - 844 , - 1843 , - 1722 , - 481 , - 680 , - 2319 , - 278 , - 2237 , - 516 , - 235 , - 1394 , - 1433 , - 352 , - 711 , - 2510 , - 629 , - 188 , - 1187 , - 1066 , - 2385 , - 24 , - 1663 , - 2182 , - 1581 , - 2420 , - 2139 , - 738 , - 777 , - 2256 , - 55 , - 1854 , - 2533 , - 2092 , - 531 , - 410 , - 1729 , - 1928 , - 1007 , - 1526 , - 925 , - 1764 , - 1483 , - 82 , - 121 , - 1600 , - 1959 , - 1198 , - 1877 , - 1436 , - 2435 , - 2314 , - 1073 , - 1272 , - 351 , - 870 , - 269 , - 1108 , - 827 , - 1986 , - 2025 , - 944 , - 1303 , - 542 , - 1221 , - 780 , - 1779 , - 1658 , - 417 , - 616 , - 2255 , - 214 , - 2173 , - 452 , - 171 , - 1330 , - 1369 , - 288 , - 647 , - 2446 , - 565 , - 124 , - 1123 , - 1002 , - 2321 , - 2520 , - 1599 , - 2118 , - 1517 , - 2356 , - 2075 , - 674 , - 713 , - 2192 , - 2551 , - 1790 , - 2469 , - 2028 , - 467 , - 346 , - 1665 , - 1864 , - 943 , - 1462 , - 861 , - 1700 , - 1419 , - 18 , - 57 , - 1536 , - 1895 , - 1134 , - 1813 , - 1372 , - 2371 , - 2250 , - 1009 , - 1208 , - 287 , - 806 , - 205 , - 1044 , - 763 , - 1922 , - 1961 , - 880 , - 1239 , - 478 , - 1157 , - 716 , - 1715 , - 1594 , - 353 , - 552 , - 2191 , - 150 , - 2109 , - 388 , - 107 , - 1266 , - 1305 , - 224 , - 583 , - 2382 , - 501 , - 60 , - 1059 , - 938 , - 2257 , - 2456 , - 1535 , - 2054 , - 1453 , - 2292 , - 2011 , - 610 , - 649 , - 2128 , - 2487 , - 1726 , - 2405 , - 1964 , - 403 , - 282 , - 1601 , - 1800 , - 879 , - 1398 , - 797 , - 1636 , - 1355 , - 2514 , - 2553 , - 1472 , - 1831 , - 1070 , - 1749 , - 1308 , - 2307 , - 2186 , - 945 , - 1144 , - 223 , - 742 , - 141 , - 980 , - 699 , - 1858 , - 1897 , - 816 , - 1175 , - 414 , - 1093 , - 652 , - 1651 , - 1530 , - 289 , - 488 , - 2127 , - 86 , - 2045 , - 324 , - 43 , - 1202 , - 1241 , - 160 , - 519 , - 2318 , - 437 , - 2556 , - 995 , - 874 , - 2193 , - 2392 , - 1471 , - 1990 , - 1389 , - 2228 , - 1947 , - 546 , - 585 , - 2064 , - 2423 , - 1662 , - 2341 , - 1900 , - 339 , - 218 , - 1537 , - 1736 , - 815 , - 1334 , - 733 , - 1572 , - 1291 , - 2450 , - 2489 , - 1408 , - 1767 , - 1006 , - 1685 , - 1244 , - 2243 , - 2122 , - 881 , - 1080 , - 159 , - 678 , - 77 , - 916 , - 635 , - 1794 , - 1833 , - 752 , - 1111 , - 350 , - 1029 , - 588 , - 1587 , - 1466 , - 225 , - 424 , - 2063 , - 22 , - 1981 , - 260 , - 2539 , - 1138 , - 1177 , - 96 , - 455 , - 2254 , - 373 , - 2492 , - 931 , - 810 , - 2129 , - 2328 , - 1407 , - 1926 , - 1325 , - 2164 , - 1883 , - 482 , - 521 , - 2000 , - 2359 , - 1598 , - 2277 , - 1836 , - 275 , - 154 , - 1473 , - 1672 , - 751 , - 1270 , - 669 , - 1508 , - 1227 , - 2386 , - 2425 , - 1344 , - 1703 , - 942 , - 1621 , - 1180 , - 2179 , - 2058 , - 817 , - 1016 , - 95 , - 614 , - 13 , - 852 , - 571 , - 1730 , - 1769 , - 688 , - 1047 , - 286 , - 965 , - 524 , - 1523 , - 1402 , - 161 , - 360 , - 1999 , - 2518 , - 1917 , - 196 , - 2475 , - 1074 , - 1113 , - 32 , - 391 , - 2190 , - 309 , - 2428 , - 867 , - 746 , - 2065 , - 2264 , - 1343 , - 1862 , - 1261 , - 2100 , - 1819 , - 418 , - 457 , - 1936 , - 2295 , - 1534 , - 2213 , - 1772 , - 211 , - 90 , - 1409 , - 1608 , - 687 , - 1206 , - 605 , - 1444 , - 1163 , - 2322 , - 2361 , - 1280 , - 1639 , - 878 , - 1557 , - 1116 , - 2115 , - 1994 , - 753 , - 952 , - 31 , - 550 , - 2509 , - 788 , - 507 , - 1666 , - 1705 , - 624 , - 983 , - 222 , - 901 , - 460 , - 1459 , - 1338 , - 97 , - 296 , - 1935 , - 2454 , - 1853 , - 132 , - 2411 , - 1010 , - 1049 , - 2528 , - 327 , - 2126 , - 245 , - 2364 , - 803 , - 682 , - 2001 , - 2200 , - 1279 , - 1798 , - 1197 , - 2036 , - 1755 , - 354 , - 393 , - 1872 , - 2231 , - 1470 , - 2149 , - 1708 , - 147 , - 26 , - 1345 , - 1544 , - 623 , - 1142 , - 541 , - 1380 , - 1099 , - 2258 , - 2297 , - 1216 , - 1575 , - 814 , - 1493 , - 1052 , - 2051 , - 1930 , - 689 , - 888 , - 2527 , - 486 , - 2445 , - 724 , - 443 , - 1602 , - 1641 , - 560 , - 919 , - 158 , - 837 , - 396 , - 1395 , - 1274 , - 33 , - 232 , - 1871 , - 2390 , - 1789 , - 68 , - 2347 , - 946 , - 985 , - 2464 , - 263 , - 2062 , - 181 , - 2300 , - 739 , - 618 , - 1937 , - 2136 , - 1215 , - 1734 , - 1133 , - 1972 , - 1691 , - 290 , - 329 , - 1808 , - 2167 , - 1406 , - 2085 , - 1644 , - 83 , - 2522 , - 1281 , - 1480 , - 559 , - 1078 , - 477 , - 1316 , - 1035 , - 2194 , - 2233 , - 1152 , - 1511 , - 750 , - 1429 , - 988 , - 1987 , - 1866 , - 625 , - 824 , - 2463 , - 422 , - 2381 , - 660 , - 379 , - 1538 , - 1577 , - 496 , - 855 , - 94 , - 773 , - 332 , - 1331 , - 1210 , - 2529 , - 168 , - 1807 , - 2326 , - 1725 , - 4 , - 2283 , - 882 , - 921 , - 2400 , - 199 , - 1998 , - 117 , - 2236 , - 675 , - 554 , - 1873 , - 2072 , - 1151 , - 1670 , - 1069 , - 1908 , - 1627 , - 226 , - 265 , - 1744 , - 2103 , - 1342 , - 2021 , - 1580 , - 19 , - 2458 , - 1217 , - 1416 , - 495 , - 1014 , - 413 , - 1252 , - 971 , - 2130 , - 2169 , - 1088 , - 1447 , - 686 , - 1365 , - 924 , - 1923 , - 1802 , - 561 , - 760 , - 2399 , - 358 , - 2317 , - 596 , - 315 , - 1474 , - 1513 , - 432 , - 791 , - 30 , - 709 , - 268 , - 1267 , - 1146 , - 2465 , - 104 , - 1743 , - 2262 , - 1661 , - 2500 , - 2219 , - 818 , - 857 , - 2336 , - 135 , - 1934 , - 53 , - 2172 , - 611 , - 490 , - 1809 , - 2008 , - 1087 , - 1606 , - 1005 , - 1844 , - 1563 , - 162 , - 201 , - 1680 , - 2039 , - 1278 , - 1957 , - 1516 , - 2515 , - 2394 , - 1153 , - 1352 , - 431 , - 950 , - 349 , - 1188 , - 907 , - 2066 , - 2105 , - 1024 , - 1383 , - 622 , - 1301 , - 860 , - 1859 , - 1738 , - 497 , - 696 , - 2335 , - 294 , - 2253 , - 532 , - 251 , - 1410 , - 1449 , - 368 , - 727 , - 2526 , - 645 , - 204 , - 1203 , - 1082 , - 2401 , - 40 , - 1679 , - 2198 , - 1597 , - 2436 , - 2155 , - 754 , - 793 , - 2272 , - 71 , - 1870 , - 2549 , - 2108 , - 547 , - 426 , - 1745 , - 1944 , - 1023 , - 1542 , - 941 , - 1780 , - 1499 , - 98 , - 137 , - 1616 , - 1975 , - 1214 , - 1893 , - 1452 , - 2451 , - 2330 , - 1089 , - 1288 , - 367 , - 886 , - 285 , - 1124 , - 843 , - 2002 , - 2041 , - 960 , - 1319 , - 558 , - 1237 , - 796 , - 1795 , - 1674 , - 433 , - 632 , - 2271 , - 230 , - 2189 , - 468 , - 187 , - 1346 , - 1385 , - 304 , - 663 , - 2462 , - 581 , - 140 , - 1139 , - 1018 , - 2337 , - 2536 , - 1615 , - 2134 , - 1533 , - 2372 , - 2091 , - 690 , - 729 , - 2208 , - 7 , - 1806 , - 2485 , - 2044 , - 483 , - 362 , - 1681 , - 1880 , - 959 , - 1478 , - 877 , - 1716 , - 1435 , - 34 , - 73 , - 1552 , - 1911 , - 1150 , - 1829 , - 1388 , - 2387 , - 2266 , - 1025 , - 1224 , - 303 , - 822 , - 221 , - 1060 , - 779 , - 1938 , - 1977 , - 896 , - 1255 , - 494 , - 1173 , - 732 , - 1731 , - 1610 , - 369 , - 568 , - 2207 , - 166 , - 2125 , - 404 , - 123 , - 1282 , - 1321 , - 240 , - 599 , - 2398 , - 517 , - 76 , - 1075 , - 954 , - 2273 , - 2472 , - 1551 , - 2070 , - 1469 , - 2308 , - 2027 , - 626 , - 665 , - 2144 , - 2503 , - 1742 , - 2421 , - 1980 , - 419 , - 298 , - 1617 , - 1816 , - 895 , - 1414 , - 813 , - 1652 , - 1371 , - 2530 , - 9 , - 1488 , - 1847 , - 1086 , - 1765 , - 1324 , - 2323 , - 2202 , - 961 , - 1160 , - 239 , - 758 , - 157 , - 996 , - 715 , - 1874 , - 1913 , - 832 , - 1191 , - 430 , - 1109 , - 668 , - 1667 , - 1546 , - 305 , - 504 , - 2143 , - 102 , - 2061 , - 340 , - 59 , - 1218 , - 1257 , - 176 , - 535 , - 2334 , - 453 , - 12 , - 1011 , - 890 , - 2209 , - 2408 , - 1487 , - 2006 , - 1405 , - 2244 , - 1963 , - 562 , - 601 , - 2080 , - 2439 , - 1678 , - 2357 , - 1916 , - 355 , - 234 , - 1553 , - 1752 , - 831 , - 1350 , - 749 , - 1588 , - 1307 , - 2466 , - 2505 , - 1424 , - 1783 , - 1022 , - 1701 , - 1260 , - 2259 , - 2138 , - 897 , - 1096 , - 175 , - 694 , - 93 , - 932 , - 651 , - 1810 , - 1849 , - 768 , - 1127 , - 366 , - 1045 , - 604 , - 1603 , - 1482 , - 241 , - 440 , - 2079 , - 38 , - 1997 , - 276 , - 2555 , - 1154 , - 1193 , - 112 , - 471 , - 2270 , - 389 , - 2508 , - 947 , - 826 , - 2145 , - 2344 , - 1423 , - 1942 , - 1341 , - 2180 , - 1899 , - 498 , - 537 , - 2016 , - 2375 , - 1614 , - 2293 , - 1852 , - 291 , - 170 , - 1489 , - 1688 , - 767 , - 1286 , - 685 , - 1524 , - 1243 , - 2402 , - 2441 , - 1360 , - 1719 , - 958 , - 1637 , - 1196 , - 2195 , - 2074 , - 833 , - 1032 , - 111 , - 630 , - 29 , - 868 , - 587 , - 1746 , - 1785 , - 704 , - 1063 , - 302 , - 981 , - 540 , - 1539 , - 1418 , - 177 , - 376 , - 2015 , - 2534 , - 1933 , - 212 , - 2491 , - 1090 , - 1129 , - 48 , - 407 , - 2206 , - 325 , - 2444 , - 883 , - 762 , - 2081 , - 2280 , - 1359 , - 1878 , - 1277 , - 2116 , - 1835 , - 434 , - 473 , - 1952 , - 2311 , - 1550 , - 2229 , - 1788 , - 227 , - 106 , - 1425 , - 1624 , - 703 , - 1222 , - 621 , - 1460 , - 1179 , - 2338 , - 2377 , - 1296 , - 1655 , - 894 , - 1573 , - 1132 , - 2131 , - 2010 , - 769 , - 968 , - 47 , - 566 , - 2525 , - 804 , - 523 , - 1682 , - 1721 , - 640 , - 999 , - 238 , - 917 , - 476 , - 1475 , - 1354 , - 113 , - 312 , - 1951 , - 2470 , - 1869 , - 148 , - 2427 , - 1026 , - 1065 , - 2544 , - 343 , - 2142 , - 261 , - 2380 , - 819 , - 698 , - 2017 , - 2216 , - 1295 , - 1814 , - 1213 , - 2052 , - 1771 , - 370 , - 409 , - 1888 , - 2247 , - 1486 , - 2165 , - 1724 , - 163 , - 42 , - 1361 , - 1560 , - 639 , - 1158 , - 557 , - 1396 , - 1115 , - 2274 , - 2313 , - 1232 , - 1591 , - 830 , - 1509 , - 1068 , - 2067 , - 1946 , - 705 , - 904 , - 2543 , - 502 , - 2461 , - 740 , - 459 , - 1618 , - 1657 , - 576 , - 935 , - 174 , - 853 , - 412 , - 1411 , - 1290 , - 49 , - 248 , - 1887 , - 2406 , - 1805 , - 84 , - 2363 , - 962 , - 1001 , - 2480 , - 279 , - 2078 , - 197 , - 2316 , - 755 , - 634 , - 1953 , - 2152 , - 1231 , - 1750 , - 1149 , - 1988 , - 1707 , - 306 , - 345 , - 1824 , - 2183 , - 1422 , - 2101 , - 1660 , - 99 , - 2538 , - 1297 , - 1496 , - 575 , - 1094 , - 493 , - 1332 , - 1051 , - 2210 , - 2249 , - 1168 , - 1527 , - 766 , - 1445 , - 1004 , - 2003 , - 1882 , - 641 , - 840 , - 2479 , - 438 , - 2397 , - 676 , - 395 , - 1554 , - 1593 , - 512 , - 871 , - 110 , - 789 , - 348 , - 1347 , - 1226 , - 2545 , - 184 , - 1823 , - 2342 , - 1741 , - 20 , - 2299 , - 898 , - 937 , - 2416 , - 215 , - 2014 , - 133 , - 2252 , - 691 , - 570 , - 1889 , - 2088 , - 1167 , - 1686 , - 1085 , - 1924 , - 1643 , - 242 , - 281 , - 1760 , - 2119 , - 1358 , - 2037 , - 1596 , - 35 , - 2474 , - 1233 , - 1432 , - 511 , - 1030 , - 429 , - 1268 , - 987 , - 2146 , - 2185 , - 1104 , - 1463 , - 702 , - 1381 , - 940 , - 1939 , - 1818 , - 577 , - 776 , - 2415 , - 374 , - 2333 , - 612 , - 331 , - 1490 , - 1529 , - 448 , - 807 , - 46 , - 725 , - 284 , - 1283 , - 1162 , - 2481 , - 120 , - 1759 , - 2278 , - 1677 , - 2516 , - 2235 , - 834 , - 873 , - 2352 , - 151 , - 1950 , - 69 , - 2188 , - 627 , - 506 , - 1825 , - 2024 , - 1103 , - 1622 , - 1021 , - 1860 , - 1579 , - 178 , - 217 , - 1696 , - 2055 , - 1294 , - 1973 , - 1532 , - 2531 , - 2410 , - 1169 , - 1368 , - 447 , - 966 , - 365 , - 1204 , - 923 , - 2082 , - 2121 , - 1040 , - 1399 , - 638 , - 1317 , - 876 , - 1875 , - 1754 , - 513 , - 712 , - 2351 , - 310 , - 2269 , - 548 , - 267 , - 1426 , - 1465 , - 384 , - 743 , - 2542 , - 661 , - 220 , - 1219 , - 1098 , - 2417 , - 56 , - 1695 , - 2214 , - 1613 , - 2452 , - 2171 , - 770 , - 809 , - 2288 , - 87 , - 1886 , - 5 , - 2124 , - 563 , - 442 , - 1761 , - 1960 , - 1039 , - 1558 , - 957 , - 1796 , - 1515 , - 114 , - 153 , - 1632 , - 1991 , - 1230 , - 1909 , - 1468 , - 2467 , - 2346 , - 1105 , - 1304 , - 383 , - 902 , - 301 , - 1140 , - 859 , - 2018 , - 2057 , - 976 , - 1335 , - 574 , - 1253 , - 812 , - 1811 , - 1690 , - 449 , - 648 , - 2287 , - 246 , - 2205 , - 484 , - 203 , - 1362 , - 1401 , - 320 , - 679 , - 2478 , - 597 , - 156 , - 1155 , - 1034 , - 2353 , - 2552 , - 1631 , - 2150 , - 1549 , - 2388 , - 2107 , - 706 , - 745 , - 2224 , - 23 , - 1822 , - 2501 , - 2060 , - 499 , - 378 , - 1697 , - 1896 , - 975 , - 1494 , - 893 , - 1732 , - 1451 , - 50 , - 89 , - 1568 , - 1927 , - 1166 , - 1845 , - 1404 , - 2403 , - 2282 , - 1041 , - 1240 , - 319 , - 838 , - 237 , - 1076 , - 795 , - 1954 , - 1993 , - 912 , - 1271 , - 510 , - 1189 , - 748 , - 1747 , - 1626 , - 385 , - 584 , - 2223 , - 182 , - 2141 , - 420 , - 139 , - 1298 , - 1337 , - 256 , - 615 , - 2414 , - 533 , - 92 , - 1091 , - 970 , - 2289 , - 2488 , - 1567 , - 2086 , - 1485 , - 2324 , - 2043 , - 642 , - 681 , - 2160 , - 2519 , - 1758 , - 2437 , - 1996 , - 435 , - 314 , - 1633 , - 1832 , - 911 , - 1430 , - 829 , - 1668 , - 1387 , - 2546 , - 25 , - 1504 , - 1863 , - 1102 , - 1781 , - 1340 , - 2339 , - 2218 , - 977 , - 1176 , - 255 , - 774 , - 173 , - 1012 , - 731 , - 1890 , - 1929 , - 848 , - 1207 , - 446 , - 1125 , - 684 , - 1683 , - 1562 , - 321 , - 520 , - 2159 , - 118 , - 2077 , - 356 , - 75 , - 1234 , - 1273 , - 192 , - 551 , - 2350 , - 469 , - 28 , - 1027 , - 906 , - 2225 , - 2424 , - 1503 , - 2022 , - 1421 , - 2260 , - 1979 , - 578 , - 617 , - 2096 , - 2455 , - 1694 , - 2373 , - 1932 , - 371 , - 250 , - 1569 , - 1768 , - 847 , - 1366 , - 765 , - 1604 , - 1323 , - 2482 , - 2521 , - 1440 , - 1799 , - 1038 , - 1717 , - 1276 , - 2275 , - 2154 , - 913 , - 1112 , - 191 , - 710 , - 109 , - 948 , - 667 , - 1826 , - 1865 , - 784 , - 1143 , - 382 , - 1061 , - 620 , - 1619 , - 1498 , - 257 , - 456 , - 2095 , - 54 , - 2013 , - 292 , - 11 , - 1170 , - 1209 , - 128 , - 487 , - 2286 , - 405 , - 2524 , - 963 , - 842 , - 2161 , - 2360 , - 1439 , - 1958 , - 1357 , - 2196 , - 1915 , - 514 , - 553 , - 2032 , - 2391 , - 1630 , - 2309 , - 1868 , - 307 , - 186 , - 1505 , - 1704 , - 783 , - 1302 , - 701 , - 1540 , - 1259 , - 2418 , - 2457 , - 1376 , - 1735 , - 974 , - 1653 , - 1212 , - 2211 , - 2090 , - 849 , - 1048 , - 127 , - 646 , - 45 , - 884 , - 603 , - 1762 , - 1801 , - 720 , - 1079 , - 318 , - 997 , - 556 , - 1555 , - 1434 , - 193 , - 392 , - 2031 , - 2550 , - 1949 , - 228 , - 2507 , - 1106 , - 1145 , - 64 , - 423 , - 2222 , - 341 , - 2460 , - 899 , - 778 , - 2097 , - 2296 , - 1375 , - 1894 , - 1293 , - 2132 , - 1851 , - 450 , - 489 , - 1968 , - 2327 , - 1566 , - 2245 , - 1804 , - 243 , - 122 , - 1441 , - 1640 , - 719 , - 1238 , - 637 , - 1476 , - 1195 , - 2354 , - 2393 , - 1312 , - 1671 , - 910 , - 1589 , - 1148 , - 2147 , - 2026 , - 785 , - 984 , - 63 , - 582 , - 2541 , - 820 , - 539 , - 1698 , - 1737 , - 656 , - 1015 , - 254 , - 933 , - 492 , - 1491 , - 1370 , - 129 , - 328 , - 1967 , - 2486 , - 1885 , - 164 , - 2443 , - 1042 , - 1081 , - 0 , - 1063 , - 1142 , - 237 , - 972 , - 723 , - 2114 , - 2521 , - 1944 , - 383 , - 462 , - 2181 , - 292 , - 43 , - 1434 , - 1841 , - 1264 , - 2327 , - 2406 , - 1501 , - 2236 , - 1987 , - 754 , - 1161 , - 584 , - 1647 , - 1726 , - 821 , - 1556 , - 1307 , - 74 , - 481 , - 2528 , - 967 , - 1046 , - 141 , - 876 , - 627 , - 2018 , - 2425 , - 1848 , - 287 , - 366 , - 2085 , - 196 , - 2571 , - 1338 , - 1745 , - 1168 , - 2231 , - 2310 , - 1405 , - 2140 , - 1891 , - 658 , - 1065 , - 488 , - 1551 , - 1630 , - 725 , - 1460 , - 1211 , - 2602 , - 385 , - 2432 , - 871 , - 950 , - 45 , - 780 , - 531 , - 1922 , - 2329 , - 1752 , - 191 , - 270 , - 1989 , - 100 , - 2475 , - 1242 , - 1649 , - 1072 , - 2135 , - 2214 , - 1309 , - 2044 , - 1795 , - 562 , - 969 , - 392 , - 1455 , - 1534 , - 629 , - 1364 , - 1115 , - 2506 , - 289 , - 2336 , - 775 , - 854 , - 2573 , - 684 , - 435 , - 1826 , - 2233 , - 1656 , - 95 , - 174 , - 1893 , - 4 , - 2379 , - 1146 , - 1553 , - 976 , - 2039 , - 2118 , - 1213 , - 1948 , - 1699 , - 466 , - 873 , - 296 , - 1359 , - 1438 , - 533 , - 1268 , - 1019 , - 2410 , - 193 , - 2240 , - 679 , - 758 , - 2477 , - 588 , - 339 , - 1730 , - 2137 , - 1560 , - 2623 , - 78 , - 1797 , - 2532 , - 2283 , - 1050 , - 1457 , - 880 , - 1943 , - 2022 , - 1117 , - 1852 , - 1603 , - 370 , - 777 , - 200 , - 1263 , - 1342 , - 437 , - 1172 , - 923 , - 2314 , - 97 , - 2144 , - 583 , - 662 , - 2381 , - 492 , - 243 , - 1634 , - 2041 , - 1464 , - 2527 , - 2606 , - 1701 , - 2436 , - 2187 , - 954 , - 1361 , - 784 , - 1847 , - 1926 , - 1021 , - 1756 , - 1507 , - 274 , - 681 , - 104 , - 1167 , - 1246 , - 341 , - 1076 , - 827 , - 2218 , - 1 , - 2048 , - 487 , - 566 , - 2285 , - 396 , - 147 , - 1538 , - 1945 , - 1368 , - 2431 , - 2510 , - 1605 , - 2340 , - 2091 , - 858 , - 1265 , - 688 , - 1751 , - 1830 , - 925 , - 1660 , - 1411 , - 178 , - 585 , - 8 , - 1071 , - 1150 , - 245 , - 980 , - 731 , - 2122 , - 2529 , - 1952 , - 391 , - 470 , - 2189 , - 300 , - 51 , - 1442 , - 1849 , - 1272 , - 2335 , - 2414 , - 1509 , - 2244 , - 1995 , - 762 , - 1169 , - 592 , - 1655 , - 1734 , - 829 , - 1564 , - 1315 , - 82 , - 489 , - 2536 , - 975 , - 1054 , - 149 , - 884 , - 635 , - 2026 , - 2433 , - 1856 , - 295 , - 374 , - 2093 , - 204 , - 2579 , - 1346 , - 1753 , - 1176 , - 2239 , - 2318 , - 1413 , - 2148 , - 1899 , - 666 , - 1073 , - 496 , - 1559 , - 1638 , - 733 , - 1468 , - 1219 , - 2610 , - 393 , - 2440 , - 879 , - 958 , - 53 , - 788 , - 539 , - 1930 , - 2337 , - 1760 , - 199 , - 278 , - 1997 , - 108 , - 2483 , - 1250 , - 1657 , - 1080 , - 2143 , - 2222 , - 1317 , - 2052 , - 1803 , - 570 , - 977 , - 400 , - 1463 , - 1542 , - 637 , - 1372 , - 1123 , - 2514 , - 297 , - 2344 , - 783 , - 862 , - 2581 , - 692 , - 443 , - 1834 , - 2241 , - 1664 , - 103 , - 182 , - 1901 , - 12 , - 2387 , - 1154 , - 1561 , - 984 , - 2047 , - 2126 , - 1221 , - 1956 , - 1707 , - 474 , - 881 , - 304 , - 1367 , - 1446 , - 541 , - 1276 , - 1027 , - 2418 , - 201 , - 2248 , - 687 , - 766 , - 2485 , - 596 , - 347 , - 1738 , - 2145 , - 1568 , - 7 , - 86 , - 1805 , - 2540 , - 2291 , - 1058 , - 1465 , - 888 , - 1951 , - 2030 , - 1125 , - 1860 , - 1611 , - 378 , - 785 , - 208 , - 1271 , - 1350 , - 445 , - 1180 , - 931 , - 2322 , - 105 , - 2152 , - 591 , - 670 , - 2389 , - 500 , - 251 , - 1642 , - 2049 , - 1472 , - 2535 , - 2614 , - 1709 , - 2444 , - 2195 , - 962 , - 1369 , - 792 , - 1855 , - 1934 , - 1029 , - 1764 , - 1515 , - 282 , - 689 , - 112 , - 1175 , - 1254 , - 349 , - 1084 , - 835 , - 2226 , - 9 , - 2056 , - 495 , - 574 , - 2293 , - 404 , - 155 , - 1546 , - 1953 , - 1376 , - 2439 , - 2518 , - 1613 , - 2348 , - 2099 , - 866 , - 1273 , - 696 , - 1759 , - 1838 , - 933 , - 1668 , - 1419 , - 186 , - 593 , - 16 , - 1079 , - 1158 , - 253 , - 988 , - 739 , - 2130 , - 2537 , - 1960 , - 399 , - 478 , - 2197 , - 308 , - 59 , - 1450 , - 1857 , - 1280 , - 2343 , - 2422 , - 1517 , - 2252 , - 2003 , - 770 , - 1177 , - 600 , - 1663 , - 1742 , - 837 , - 1572 , - 1323 , - 90 , - 497 , - 2544 , - 983 , - 1062 , - 157 , - 892 , - 643 , - 2034 , - 2441 , - 1864 , - 303 , - 382 , - 2101 , - 212 , - 2587 , - 1354 , - 1761 , - 1184 , - 2247 , - 2326 , - 1421 , - 2156 , - 1907 , - 674 , - 1081 , - 504 , - 1567 , - 1646 , - 741 , - 1476 , - 1227 , - 2618 , - 401 , - 2448 , - 887 , - 966 , - 61 , - 796 , - 547 , - 1938 , - 2345 , - 1768 , - 207 , - 286 , - 2005 , - 116 , - 2491 , - 1258 , - 1665 , - 1088 , - 2151 , - 2230 , - 1325 , - 2060 , - 1811 , - 578 , - 985 , - 408 , - 1471 , - 1550 , - 645 , - 1380 , - 1131 , - 2522 , - 305 , - 2352 , - 791 , - 870 , - 2589 , - 700 , - 451 , - 1842 , - 2249 , - 1672 , - 111 , - 190 , - 1909 , - 20 , - 2395 , - 1162 , - 1569 , - 992 , - 2055 , - 2134 , - 1229 , - 1964 , - 1715 , - 482 , - 889 , - 312 , - 1375 , - 1454 , - 549 , - 1284 , - 1035 , - 2426 , - 209 , - 2256 , - 695 , - 774 , - 2493 , - 604 , - 355 , - 1746 , - 2153 , - 1576 , - 15 , - 94 , - 1813 , - 2548 , - 2299 , - 1066 , - 1473 , - 896 , - 1959 , - 2038 , - 1133 , - 1868 , - 1619 , - 386 , - 793 , - 216 , - 1279 , - 1358 , - 453 , - 1188 , - 939 , - 2330 , - 113 , - 2160 , - 599 , - 678 , - 2397 , - 508 , - 259 , - 1650 , - 2057 , - 1480 , - 2543 , - 2622 , - 1717 , - 2452 , - 2203 , - 970 , - 1377 , - 800 , - 1863 , - 1942 , - 1037 , - 1772 , - 1523 , - 290 , - 697 , - 120 , - 1183 , - 1262 , - 357 , - 1092 , - 843 , - 2234 , - 17 , - 2064 , - 503 , - 582 , - 2301 , - 412 , - 163 , - 1554 , - 1961 , - 1384 , - 2447 , - 2526 , - 1621 , - 2356 , - 2107 , - 874 , - 1281 , - 704 , - 1767 , - 1846 , - 941 , - 1676 , - 1427 , - 194 , - 601 , - 24 , - 1087 , - 1166 , - 261 , - 996 , - 747 , - 2138 , - 2545 , - 1968 , - 407 , - 486 , - 2205 , - 316 , - 67 , - 1458 , - 1865 , - 1288 , - 2351 , - 2430 , - 1525 , - 2260 , - 2011 , - 778 , - 1185 , - 608 , - 1671 , - 1750 , - 845 , - 1580 , - 1331 , - 98 , - 505 , - 2552 , - 991 , - 1070 , - 165 , - 900 , - 651 , - 2042 , - 2449 , - 1872 , - 311 , - 390 , - 2109 , - 220 , - 2595 , - 1362 , - 1769 , - 1192 , - 2255 , - 2334 , - 1429 , - 2164 , - 1915 , - 682 , - 1089 , - 512 , - 1575 , - 1654 , - 749 , - 1484 , - 1235 , - 2 , - 409 , - 2456 , - 895 , - 974 , - 69 , - 804 , - 555 , - 1946 , - 2353 , - 1776 , - 215 , - 294 , - 2013 , - 124 , - 2499 , - 1266 , - 1673 , - 1096 , - 2159 , - 2238 , - 1333 , - 2068 , - 1819 , - 586 , - 993 , - 416 , - 1479 , - 1558 , - 653 , - 1388 , - 1139 , - 2530 , - 313 , - 2360 , - 799 , - 878 , - 2597 , - 708 , - 459 , - 1850 , - 2257 , - 1680 , - 119 , - 198 , - 1917 , - 28 , - 2403 , - 1170 , - 1577 , - 1000 , - 2063 , - 2142 , - 1237 , - 1972 , - 1723 , - 490 , - 897 , - 320 , - 1383 , - 1462 , - 557 , - 1292 , - 1043 , - 2434 , - 217 , - 2264 , - 703 , - 782 , - 2501 , - 612 , - 363 , - 1754 , - 2161 , - 1584 , - 23 , - 102 , - 1821 , - 2556 , - 2307 , - 1074 , - 1481 , - 904 , - 1967 , - 2046 , - 1141 , - 1876 , - 1627 , - 394 , - 801 , - 224 , - 1287 , - 1366 , - 461 , - 1196 , - 947 , - 2338 , - 121 , - 2168 , - 607 , - 686 , - 2405 , - 516 , - 267 , - 1658 , - 2065 , - 1488 , - 2551 , - 6 , - 1725 , - 2460 , - 2211 , - 978 , - 1385 , - 808 , - 1871 , - 1950 , - 1045 , - 1780 , - 1531 , - 298 , - 705 , - 128 , - 1191 , - 1270 , - 365 , - 1100 , - 851 , - 2242 , - 25 , - 2072 , - 511 , - 590 , - 2309 , - 420 , - 171 , - 1562 , - 1969 , - 1392 , - 2455 , - 2534 , - 1629 , - 2364 , - 2115 , - 882 , - 1289 , - 712 , - 1775 , - 1854 , - 949 , - 1684 , - 1435 , - 202 , - 609 , - 32 , - 1095 , - 1174 , - 269 , - 1004 , - 755 , - 2146 , - 2553 , - 1976 , - 415 , - 494 , - 2213 , - 324 , - 75 , - 1466 , - 1873 , - 1296 , - 2359 , - 2438 , - 1533 , - 2268 , - 2019 , - 786 , - 1193 , - 616 , - 1679 , - 1758 , - 853 , - 1588 , - 1339 , - 106 , - 513 , - 2560 , - 999 , - 1078 , - 173 , - 908 , - 659 , - 2050 , - 2457 , - 1880 , - 319 , - 398 , - 2117 , - 228 , - 2603 , - 1370 , - 1777 , - 1200 , - 2263 , - 2342 , - 1437 , - 2172 , - 1923 , - 690 , - 1097 , - 520 , - 1583 , - 1662 , - 757 , - 1492 , - 1243 , - 10 , - 417 , - 2464 , - 903 , - 982 , - 77 , - 812 , - 563 , - 1954 , - 2361 , - 1784 , - 223 , - 302 , - 2021 , - 132 , - 2507 , - 1274 , - 1681 , - 1104 , - 2167 , - 2246 , - 1341 , - 2076 , - 1827 , - 594 , - 1001 , - 424 , - 1487 , - 1566 , - 661 , - 1396 , - 1147 , - 2538 , - 321 , - 2368 , - 807 , - 886 , - 2605 , - 716 , - 467 , - 1858 , - 2265 , - 1688 , - 127 , - 206 , - 1925 , - 36 , - 2411 , - 1178 , - 1585 , - 1008 , - 2071 , - 2150 , - 1245 , - 1980 , - 1731 , - 498 , - 905 , - 328 , - 1391 , - 1470 , - 565 , - 1300 , - 1051 , - 2442 , - 225 , - 2272 , - 711 , - 790 , - 2509 , - 620 , - 371 , - 1762 , - 2169 , - 1592 , - 31 , - 110 , - 1829 , - 2564 , - 2315 , - 1082 , - 1489 , - 912 , - 1975 , - 2054 , - 1149 , - 1884 , - 1635 , - 402 , - 809 , - 232 , - 1295 , - 1374 , - 469 , - 1204 , - 955 , - 2346 , - 129 , - 2176 , - 615 , - 694 , - 2413 , - 524 , - 275 , - 1666 , - 2073 , - 1496 , - 2559 , - 14 , - 1733 , - 2468 , - 2219 , - 986 , - 1393 , - 816 , - 1879 , - 1958 , - 1053 , - 1788 , - 1539 , - 306 , - 713 , - 136 , - 1199 , - 1278 , - 373 , - 1108 , - 859 , - 2250 , - 33 , - 2080 , - 519 , - 598 , - 2317 , - 428 , - 179 , - 1570 , - 1977 , - 1400 , - 2463 , - 2542 , - 1637 , - 2372 , - 2123 , - 890 , - 1297 , - 720 , - 1783 , - 1862 , - 957 , - 1692 , - 1443 , - 210 , - 617 , - 40 , - 1103 , - 1182 , - 277 , - 1012 , - 763 , - 2154 , - 2561 , - 1984 , - 423 , - 502 , - 2221 , - 332 , - 83 , - 1474 , - 1881 , - 1304 , - 2367 , - 2446 , - 1541 , - 2276 , - 2027 , - 794 , - 1201 , - 624 , - 1687 , - 1766 , - 861 , - 1596 , - 1347 , - 114 , - 521 , - 2568 , - 1007 , - 1086 , - 181 , - 916 , - 667 , - 2058 , - 2465 , - 1888 , - 327 , - 406 , - 2125 , - 236 , - 2611 , - 1378 , - 1785 , - 1208 , - 2271 , - 2350 , - 1445 , - 2180 , - 1931 , - 698 , - 1105 , - 528 , - 1591 , - 1670 , - 765 , - 1500 , - 1251 , - 18 , - 425 , - 2472 , - 911 , - 990 , - 85 , - 820 , - 571 , - 1962 , - 2369 , - 1792 , - 231 , - 310 , - 2029 , - 140 , - 2515 , - 1282 , - 1689 , - 1112 , - 2175 , - 2254 , - 1349 , - 2084 , - 1835 , - 602 , - 1009 , - 432 , - 1495 , - 1574 , - 669 , - 1404 , - 1155 , - 2546 , - 329 , - 2376 , - 815 , - 894 , - 2613 , - 724 , - 475 , - 1866 , - 2273 , - 1696 , - 135 , - 214 , - 1933 , - 44 , - 2419 , - 1186 , - 1593 , - 1016 , - 2079 , - 2158 , - 1253 , - 1988 , - 1739 , - 506 , - 913 , - 336 , - 1399 , - 1478 , - 573 , - 1308 , - 1059 , - 2450 , - 233 , - 2280 , - 719 , - 798 , - 2517 , - 628 , - 379 , - 1770 , - 2177 , - 1600 , - 39 , - 118 , - 1837 , - 2572 , - 2323 , - 1090 , - 1497 , - 920 , - 1983 , - 2062 , - 1157 , - 1892 , - 1643 , - 410 , - 817 , - 240 , - 1303 , - 1382 , - 477 , - 1212 , - 963 , - 2354 , - 137 , - 2184 , - 623 , - 702 , - 2421 , - 532 , - 283 , - 1674 , - 2081 , - 1504 , - 2567 , - 22 , - 1741 , - 2476 , - 2227 , - 994 , - 1401 , - 824 , - 1887 , - 1966 , - 1061 , - 1796 , - 1547 , - 314 , - 721 , - 144 , - 1207 , - 1286 , - 381 , - 1116 , - 867 , - 2258 , - 41 , - 2088 , - 527 , - 606 , - 2325 , - 436 , - 187 , - 1578 , - 1985 , - 1408 , - 2471 , - 2550 , - 1645 , - 2380 , - 2131 , - 898 , - 1305 , - 728 , - 1791 , - 1870 , - 965 , - 1700 , - 1451 , - 218 , - 625 , - 48 , - 1111 , - 1190 , - 285 , - 1020 , - 771 , - 2162 , - 2569 , - 1992 , - 431 , - 510 , - 2229 , - 340 , - 91 , - 1482 , - 1889 , - 1312 , - 2375 , - 2454 , - 1549 , - 2284 , - 2035 , - 802 , - 1209 , - 632 , - 1695 , - 1774 , - 869 , - 1604 , - 1355 , - 122 , - 529 , - 2576 , - 1015 , - 1094 , - 189 , - 924 , - 675 , - 2066 , - 2473 , - 1896 , - 335 , - 414 , - 2133 , - 244 , - 2619 , - 1386 , - 1793 , - 1216 , - 2279 , - 2358 , - 1453 , - 2188 , - 1939 , - 706 , - 1113 , - 536 , - 1599 , - 1678 , - 773 , - 1508 , - 1259 , - 26 , - 433 , - 2480 , - 919 , - 998 , - 93 , - 828 , - 579 , - 1970 , - 2377 , - 1800 , - 239 , - 318 , - 2037 , - 148 , - 2523 , - 1290 , - 1697 , - 1120 , - 2183 , - 2262 , - 1357 , - 2092 , - 1843 , - 610 , - 1017 , - 440 , - 1503 , - 1582 , - 677 , - 1412 , - 1163 , - 2554 , - 337 , - 2384 , - 823 , - 902 , - 2621 , - 732 , - 483 , - 1874 , - 2281 , - 1704 , - 143 , - 222 , - 1941 , - 52 , - 2427 , - 1194 , - 1601 , - 1024 , - 2087 , - 2166 , - 1261 , - 1996 , - 1747 , - 514 , - 921 , - 344 , - 1407 , - 1486 , - 581 , - 1316 , - 1067 , - 2458 , - 241 , - 2288 , - 727 , - 806 , - 2525 , - 636 , - 387 , - 1778 , - 2185 , - 1608 , - 47 , - 126 , - 1845 , - 2580 , - 2331 , - 1098 , - 1505 , - 928 , - 1991 , - 2070 , - 1165 , - 1900 , - 1651 , - 418 , - 825 , - 248 , - 1311 , - 1390 , - 485 , - 1220 , - 971 , - 2362 , - 145 , - 2192 , - 631 , - 710 , - 2429 , - 540 , - 291 , - 1682 , - 2089 , - 1512 , - 2575 , - 30 , - 1749 , - 2484 , - 2235 , - 1002 , - 1409 , - 832 , - 1895 , - 1974 , - 1069 , - 1804 , - 1555 , - 322 , - 729 , - 152 , - 1215 , - 1294 , - 389 , - 1124 , - 875 , - 2266 , - 49 , - 2096 , - 535 , - 614 , - 2333 , - 444 , - 195 , - 1586 , - 1993 , - 1416 , - 2479 , - 2558 , - 1653 , - 2388 , - 2139 , - 906 , - 1313 , - 736 , - 1799 , - 1878 , - 973 , - 1708 , - 1459 , - 226 , - 633 , - 56 , - 1119 , - 1198 , - 293 , - 1028 , - 779 , - 2170 , - 2577 , - 2000 , - 439 , - 518 , - 2237 , - 348 , - 99 , - 1490 , - 1897 , - 1320 , - 2383 , - 2462 , - 1557 , - 2292 , - 2043 , - 810 , - 1217 , - 640 , - 1703 , - 1782 , - 877 , - 1612 , - 1363 , - 130 , - 537 , - 2584 , - 1023 , - 1102 , - 197 , - 932 , - 683 , - 2074 , - 2481 , - 1904 , - 343 , - 422 , - 2141 , - 252 , - 3 , - 1394 , - 1801 , - 1224 , - 2287 , - 2366 , - 1461 , - 2196 , - 1947 , - 714 , - 1121 , - 544 , - 1607 , - 1686 , - 781 , - 1516 , - 1267 , - 34 , - 441 , - 2488 , - 927 , - 1006 , - 101 , - 836 , - 587 , - 1978 , - 2385 , - 1808 , - 247 , - 326 , - 2045 , - 156 , - 2531 , - 1298 , - 1705 , - 1128 , - 2191 , - 2270 , - 1365 , - 2100 , - 1851 , - 618 , - 1025 , - 448 , - 1511 , - 1590 , - 685 , - 1420 , - 1171 , - 2562 , - 345 , - 2392 , - 831 , - 910 , - 5 , - 740 , - 491 , - 1882 , - 2289 , - 1712 , - 151 , - 230 , - 1949 , - 60 , - 2435 , - 1202 , - 1609 , - 1032 , - 2095 , - 2174 , - 1269 , - 2004 , - 1755 , - 522 , - 929 , - 352 , - 1415 , - 1494 , - 589 , - 1324 , - 1075 , - 2466 , - 249 , - 2296 , - 735 , - 814 , - 2533 , - 644 , - 395 , - 1786 , - 2193 , - 1616 , - 55 , - 134 , - 1853 , - 2588 , - 2339 , - 1106 , - 1513 , - 936 , - 1999 , - 2078 , - 1173 , - 1908 , - 1659 , - 426 , - 833 , - 256 , - 1319 , - 1398 , - 493 , - 1228 , - 979 , - 2370 , - 153 , - 2200 , - 639 , - 718 , - 2437 , - 548 , - 299 , - 1690 , - 2097 , - 1520 , - 2583 , - 38 , - 1757 , - 2492 , - 2243 , - 1010 , - 1417 , - 840 , - 1903 , - 1982 , - 1077 , - 1812 , - 1563 , - 330 , - 737 , - 160 , - 1223 , - 1302 , - 397 , - 1132 , - 883 , - 2274 , - 57 , - 2104 , - 543 , - 622 , - 2341 , - 452 , - 203 , - 1594 , - 2001 , - 1424 , - 2487 , - 2566 , - 1661 , - 2396 , - 2147 , - 914 , - 1321 , - 744 , - 1807 , - 1886 , - 981 , - 1716 , - 1467 , - 234 , - 641 , - 64 , - 1127 , - 1206 , - 301 , - 1036 , - 787 , - 2178 , - 2585 , - 2008 , - 447 , - 526 , - 2245 , - 356 , - 107 , - 1498 , - 1905 , - 1328 , - 2391 , - 2470 , - 1565 , - 2300 , - 2051 , - 818 , - 1225 , - 648 , - 1711 , - 1790 , - 885 , - 1620 , - 1371 , - 138 , - 545 , - 2592 , - 1031 , - 1110 , - 205 , - 940 , - 691 , - 2082 , - 2489 , - 1912 , - 351 , - 430 , - 2149 , - 260 , - 11 , - 1402 , - 1809 , - 1232 , - 2295 , - 2374 , - 1469 , - 2204 , - 1955 , - 722 , - 1129 , - 552 , - 1615 , - 1694 , - 789 , - 1524 , - 1275 , - 42 , - 449 , - 2496 , - 935 , - 1014 , - 109 , - 844 , - 595 , - 1986 , - 2393 , - 1816 , - 255 , - 334 , - 2053 , - 164 , - 2539 , - 1306 , - 1713 , - 1136 , - 2199 , - 2278 , - 1373 , - 2108 , - 1859 , - 626 , - 1033 , - 456 , - 1519 , - 1598 , - 693 , - 1428 , - 1179 , - 2570 , - 353 , - 2400 , - 839 , - 918 , - 13 , - 748 , - 499 , - 1890 , - 2297 , - 1720 , - 159 , - 238 , - 1957 , - 68 , - 2443 , - 1210 , - 1617 , - 1040 , - 2103 , - 2182 , - 1277 , - 2012 , - 1763 , - 530 , - 937 , - 360 , - 1423 , - 1502 , - 597 , - 1332 , - 1083 , - 2474 , - 257 , - 2304 , - 743 , - 822 , - 2541 , - 652 , - 403 , - 1794 , - 2201 , - 1624 , - 63 , - 142 , - 1861 , - 2596 , - 2347 , - 1114 , - 1521 , - 944 , - 2007 , - 2086 , - 1181 , - 1916 , - 1667 , - 434 , - 841 , - 264 , - 1327 , - 1406 , - 501 , - 1236 , - 987 , - 2378 , - 161 , - 2208 , - 647 , - 726 , - 2445 , - 556 , - 307 , - 1698 , - 2105 , - 1528 , - 2591 , - 46 , - 1765 , - 2500 , - 2251 , - 1018 , - 1425 , - 848 , - 1911 , - 1990 , - 1085 , - 1820 , - 1571 , - 338 , - 745 , - 168 , - 1231 , - 1310 , - 405 , - 1140 , - 891 , - 2282 , - 65 , - 2112 , - 551 , - 630 , - 2349 , - 460 , - 211 , - 1602 , - 2009 , - 1432 , - 2495 , - 2574 , - 1669 , - 2404 , - 2155 , - 922 , - 1329 , - 752 , - 1815 , - 1894 , - 989 , - 1724 , - 1475 , - 242 , - 649 , - 72 , - 1135 , - 1214 , - 309 , - 1044 , - 795 , - 2186 , - 2593 , - 2016 , - 455 , - 534 , - 2253 , - 364 , - 115 , - 1506 , - 1913 , - 1336 , - 2399 , - 2478 , - 1573 , - 2308 , - 2059 , - 826 , - 1233 , - 656 , - 1719 , - 1798 , - 893 , - 1628 , - 1379 , - 146 , - 553 , - 2600 , - 1039 , - 1118 , - 213 , - 948 , - 699 , - 2090 , - 2497 , - 1920 , - 359 , - 438 , - 2157 , - 268 , - 19 , - 1410 , - 1817 , - 1240 , - 2303 , - 2382 , - 1477 , - 2212 , - 1963 , - 730 , - 1137 , - 560 , - 1623 , - 1702 , - 797 , - 1532 , - 1283 , - 50 , - 457 , - 2504 , - 943 , - 1022 , - 117 , - 852 , - 603 , - 1994 , - 2401 , - 1824 , - 263 , - 342 , - 2061 , - 172 , - 2547 , - 1314 , - 1721 , - 1144 , - 2207 , - 2286 , - 1381 , - 2116 , - 1867 , - 634 , - 1041 , - 464 , - 1527 , - 1606 , - 701 , - 1436 , - 1187 , - 2578 , - 361 , - 2408 , - 847 , - 926 , - 21 , - 756 , - 507 , - 1898 , - 2305 , - 1728 , - 167 , - 246 , - 1965 , - 76 , - 2451 , - 1218 , - 1625 , - 1048 , - 2111 , - 2190 , - 1285 , - 2020 , - 1771 , - 538 , - 945 , - 368 , - 1431 , - 1510 , - 605 , - 1340 , - 1091 , - 2482 , - 265 , - 2312 , - 751 , - 830 , - 2549 , - 660 , - 411 , - 1802 , - 2209 , - 1632 , - 71 , - 150 , - 1869 , - 2604 , - 2355 , - 1122 , - 1529 , - 952 , - 2015 , - 2094 , - 1189 , - 1924 , - 1675 , - 442 , - 849 , - 272 , - 1335 , - 1414 , - 509 , - 1244 , - 995 , - 2386 , - 169 , - 2216 , - 655 , - 734 , - 2453 , - 564 , - 315 , - 1706 , - 2113 , - 1536 , - 2599 , - 54 , - 1773 , - 2508 , - 2259 , - 1026 , - 1433 , - 856 , - 1919 , - 1998 , - 1093 , - 1828 , - 1579 , - 346 , - 753 , - 176 , - 1239 , - 1318 , - 413 , - 1148 , - 899 , - 2290 , - 73 , - 2120 , - 559 , - 638 , - 2357 , - 468 , - 219 , - 1610 , - 2017 , - 1440 , - 2503 , - 2582 , - 1677 , - 2412 , - 2163 , - 930 , - 1337 , - 760 , - 1823 , - 1902 , - 997 , - 1732 , - 1483 , - 250 , - 657 , - 80 , - 1143 , - 1222 , - 317 , - 1052 , - 803 , - 2194 , - 2601 , - 2024 , - 463 , - 542 , - 2261 , - 372 , - 123 , - 1514 , - 1921 , - 1344 , - 2407 , - 2486 , - 1581 , - 2316 , - 2067 , - 834 , - 1241 , - 664 , - 1727 , - 1806 , - 901 , - 1636 , - 1387 , - 154 , - 561 , - 2608 , - 1047 , - 1126 , - 221 , - 956 , - 707 , - 2098 , - 2505 , - 1928 , - 367 , - 446 , - 2165 , - 276 , - 27 , - 1418 , - 1825 , - 1248 , - 2311 , - 2390 , - 1485 , - 2220 , - 1971 , - 738 , - 1145 , - 568 , - 1631 , - 1710 , - 805 , - 1540 , - 1291 , - 58 , - 465 , - 2512 , - 951 , - 1030 , - 125 , - 860 , - 611 , - 2002 , - 2409 , - 1832 , - 271 , - 350 , - 2069 , - 180 , - 2555 , - 1322 , - 1729 , - 1152 , - 2215 , - 2294 , - 1389 , - 2124 , - 1875 , - 642 , - 1049 , - 472 , - 1535 , - 1614 , - 709 , - 1444 , - 1195 , - 2586 , - 369 , - 2416 , - 855 , - 934 , - 29 , - 764 , - 515 , - 1906 , - 2313 , - 1736 , - 175 , - 254 , - 1973 , - 84 , - 2459 , - 1226 , - 1633 , - 1056 , - 2119 , - 2198 , - 1293 , - 2028 , - 1779 , - 546 , - 953 , - 376 , - 1439 , - 1518 , - 613 , - 1348 , - 1099 , - 2490 , - 273 , - 2320 , - 759 , - 838 , - 2557 , - 668 , - 419 , - 1810 , - 2217 , - 1640 , - 79 , - 158 , - 1877 , - 2612 , - 2363 , - 1130 , - 1537 , - 960 , - 2023 , - 2102 , - 1197 , - 1932 , - 1683 , - 450 , - 857 , - 280 , - 1343 , - 1422 , - 517 , - 1252 , - 1003 , - 2394 , - 177 , - 2224 , - 663 , - 742 , - 2461 , - 572 , - 323 , - 1714 , - 2121 , - 1544 , - 2607 , - 62 , - 1781 , - 2516 , - 2267 , - 1034 , - 1441 , - 864 , - 1927 , - 2006 , - 1101 , - 1836 , - 1587 , - 354 , - 761 , - 184 , - 1247 , - 1326 , - 421 , - 1156 , - 907 , - 2298 , - 81 , - 2128 , - 567 , - 646 , - 2365 , - 476 , - 227 , - 1618 , - 2025 , - 1448 , - 2511 , - 2590 , - 1685 , - 2420 , - 2171 , - 938 , - 1345 , - 768 , - 1831 , - 1910 , - 1005 , - 1740 , - 1491 , - 258 , - 665 , - 88 , - 1151 , - 1230 , - 325 , - 1060 , - 811 , - 2202 , - 2609 , - 2032 , - 471 , - 550 , - 2269 , - 380 , - 131 , - 1522 , - 1929 , - 1352 , - 2415 , - 2494 , - 1589 , - 2324 , - 2075 , - 842 , - 1249 , - 672 , - 1735 , - 1814 , - 909 , - 1644 , - 1395 , - 162 , - 569 , - 2616 , - 1055 , - 1134 , - 229 , - 964 , - 715 , - 2106 , - 2513 , - 1936 , - 375 , - 454 , - 2173 , - 284 , - 35 , - 1426 , - 1833 , - 1256 , - 2319 , - 2398 , - 1493 , - 2228 , - 1979 , - 746 , - 1153 , - 576 , - 1639 , - 1718 , - 813 , - 1548 , - 1299 , - 66 , - 473 , - 2520 , - 959 , - 1038 , - 133 , - 868 , - 619 , - 2010 , - 2417 , - 1840 , - 279 , - 358 , - 2077 , - 188 , - 2563 , - 1330 , - 1737 , - 1160 , - 2223 , - 2302 , - 1397 , - 2132 , - 1883 , - 650 , - 1057 , - 480 , - 1543 , - 1622 , - 717 , - 1452 , - 1203 , - 2594 , - 377 , - 2424 , - 863 , - 942 , - 37 , - 772 , - 523 , - 1914 , - 2321 , - 1744 , - 183 , - 262 , - 1981 , - 92 , - 2467 , - 1234 , - 1641 , - 1064 , - 2127 , - 2206 , - 1301 , - 2036 , - 1787 , - 554 , - 961 , - 384 , - 1447 , - 1526 , - 621 , - 1356 , - 1107 , - 2498 , - 281 , - 2328 , - 767 , - 846 , - 2565 , - 676 , - 427 , - 1818 , - 2225 , - 1648 , - 87 , - 166 , - 1885 , - 2620 , - 2371 , - 1138 , - 1545 , - 968 , - 2031 , - 2110 , - 1205 , - 1940 , - 1691 , - 458 , - 865 , - 288 , - 1351 , - 1430 , - 525 , - 1260 , - 1011 , - 2402 , - 185 , - 2232 , - 671 , - 750 , - 2469 , - 580 , - 331 , - 1722 , - 2129 , - 1552 , - 2615 , - 70 , - 1789 , - 2524 , - 2275 , - 1042 , - 1449 , - 872 , - 1935 , - 2014 , - 1109 , - 1844 , - 1595 , - 362 , - 769 , - 192 , - 1255 , - 1334 , - 429 , - 1164 , - 915 , - 2306 , - 89 , - 2136 , - 575 , - 654 , - 2373 , - 484 , - 235 , - 1626 , - 2033 , - 1456 , - 2519 , - 2598 , - 1693 , - 2428 , - 2179 , - 946 , - 1353 , - 776 , - 1839 , - 1918 , - 1013 , - 1748 , - 1499 , - 266 , - 673 , - 96 , - 1159 , - 1238 , - 333 , - 1068 , - 819 , - 2210 , - 2617 , - 2040 , - 479 , - 558 , - 2277 , - 388 , - 139 , - 1530 , - 1937 , - 1360 , - 2423 , - 2502 , - 1597 , - 2332 , - 2083 , - 850 , - 1257 , - 680 , - 1743 , - 1822 , - 917 , - 1652 , - 1403 , - 170 , - 577 , - 0 , - 631 , - 2270 , - 2229 , - 508 , - 2483 , - 90 , - 1393 , - 1016 , - 1647 , - 598 , - 557 , - 1524 , - 811 , - 1106 , - 2409 , - 2032 , - 2663 , - 1614 , - 1573 , - 2540 , - 1827 , - 2122 , - 737 , - 360 , - 991 , - 2630 , - 2589 , - 868 , - 155 , - 450 , - 1753 , - 1376 , - 2007 , - 958 , - 917 , - 1884 , - 1171 , - 1466 , - 81 , - 2392 , - 335 , - 1974 , - 1933 , - 212 , - 2187 , - 2482 , - 1097 , - 720 , - 1351 , - 302 , - 261 , - 1228 , - 515 , - 810 , - 2113 , - 1736 , - 2367 , - 1318 , - 1277 , - 2244 , - 1531 , - 1826 , - 441 , - 64 , - 695 , - 2334 , - 2293 , - 572 , - 2547 , - 154 , - 1457 , - 1080 , - 1711 , - 662 , - 621 , - 1588 , - 875 , - 1170 , - 2473 , - 2096 , - 39 , - 1678 , - 1637 , - 2604 , - 1891 , - 2186 , - 801 , - 424 , - 1055 , - 6 , - 2653 , - 932 , - 219 , - 514 , - 1817 , - 1440 , - 2071 , - 1022 , - 981 , - 1948 , - 1235 , - 1530 , - 145 , - 2456 , - 399 , - 2038 , - 1997 , - 276 , - 2251 , - 2546 , - 1161 , - 784 , - 1415 , - 366 , - 325 , - 1292 , - 579 , - 874 , - 2177 , - 1800 , - 2431 , - 1382 , - 1341 , - 2308 , - 1595 , - 1890 , - 505 , - 128 , - 759 , - 2398 , - 2357 , - 636 , - 2611 , - 218 , - 1521 , - 1144 , - 1775 , - 726 , - 685 , - 1652 , - 939 , - 1234 , - 2537 , - 2160 , - 103 , - 1742 , - 1701 , - 2668 , - 1955 , - 2250 , - 865 , - 488 , - 1119 , - 70 , - 29 , - 996 , - 283 , - 578 , - 1881 , - 1504 , - 2135 , - 1086 , - 1045 , - 2012 , - 1299 , - 1594 , - 209 , - 2520 , - 463 , - 2102 , - 2061 , - 340 , - 2315 , - 2610 , - 1225 , - 848 , - 1479 , - 430 , - 389 , - 1356 , - 643 , - 938 , - 2241 , - 1864 , - 2495 , - 1446 , - 1405 , - 2372 , - 1659 , - 1954 , - 569 , - 192 , - 823 , - 2462 , - 2421 , - 700 , - 2675 , - 282 , - 1585 , - 1208 , - 1839 , - 790 , - 749 , - 1716 , - 1003 , - 1298 , - 2601 , - 2224 , - 167 , - 1806 , - 1765 , - 44 , - 2019 , - 2314 , - 929 , - 552 , - 1183 , - 134 , - 93 , - 1060 , - 347 , - 642 , - 1945 , - 1568 , - 2199 , - 1150 , - 1109 , - 2076 , - 1363 , - 1658 , - 273 , - 2584 , - 527 , - 2166 , - 2125 , - 404 , - 2379 , - 2674 , - 1289 , - 912 , - 1543 , - 494 , - 453 , - 1420 , - 707 , - 1002 , - 2305 , - 1928 , - 2559 , - 1510 , - 1469 , - 2436 , - 1723 , - 2018 , - 633 , - 256 , - 887 , - 2526 , - 2485 , - 764 , - 51 , - 346 , - 1649 , - 1272 , - 1903 , - 854 , - 813 , - 1780 , - 1067 , - 1362 , - 2665 , - 2288 , - 231 , - 1870 , - 1829 , - 108 , - 2083 , - 2378 , - 993 , - 616 , - 1247 , - 198 , - 157 , - 1124 , - 411 , - 706 , - 2009 , - 1632 , - 2263 , - 1214 , - 1173 , - 2140 , - 1427 , - 1722 , - 337 , - 2648 , - 591 , - 2230 , - 2189 , - 468 , - 2443 , - 50 , - 1353 , - 976 , - 1607 , - 558 , - 517 , - 1484 , - 771 , - 1066 , - 2369 , - 1992 , - 2623 , - 1574 , - 1533 , - 2500 , - 1787 , - 2082 , - 697 , - 320 , - 951 , - 2590 , - 2549 , - 828 , - 115 , - 410 , - 1713 , - 1336 , - 1967 , - 918 , - 877 , - 1844 , - 1131 , - 1426 , - 41 , - 2352 , - 295 , - 1934 , - 1893 , - 172 , - 2147 , - 2442 , - 1057 , - 680 , - 1311 , - 262 , - 221 , - 1188 , - 475 , - 770 , - 2073 , - 1696 , - 2327 , - 1278 , - 1237 , - 2204 , - 1491 , - 1786 , - 401 , - 24 , - 655 , - 2294 , - 2253 , - 532 , - 2507 , - 114 , - 1417 , - 1040 , - 1671 , - 622 , - 581 , - 1548 , - 835 , - 1130 , - 2433 , - 2056 , - 2687 , - 1638 , - 1597 , - 2564 , - 1851 , - 2146 , - 761 , - 384 , - 1015 , - 2654 , - 2613 , - 892 , - 179 , - 474 , - 1777 , - 1400 , - 2031 , - 982 , - 941 , - 1908 , - 1195 , - 1490 , - 105 , - 2416 , - 359 , - 1998 , - 1957 , - 236 , - 2211 , - 2506 , - 1121 , - 744 , - 1375 , - 326 , - 285 , - 1252 , - 539 , - 834 , - 2137 , - 1760 , - 2391 , - 1342 , - 1301 , - 2268 , - 1555 , - 1850 , - 465 , - 88 , - 719 , - 2358 , - 2317 , - 596 , - 2571 , - 178 , - 1481 , - 1104 , - 1735 , - 686 , - 645 , - 1612 , - 899 , - 1194 , - 2497 , - 2120 , - 63 , - 1702 , - 1661 , - 2628 , - 1915 , - 2210 , - 825 , - 448 , - 1079 , - 30 , - 2677 , - 956 , - 243 , - 538 , - 1841 , - 1464 , - 2095 , - 1046 , - 1005 , - 1972 , - 1259 , - 1554 , - 169 , - 2480 , - 423 , - 2062 , - 2021 , - 300 , - 2275 , - 2570 , - 1185 , - 808 , - 1439 , - 390 , - 349 , - 1316 , - 603 , - 898 , - 2201 , - 1824 , - 2455 , - 1406 , - 1365 , - 2332 , - 1619 , - 1914 , - 529 , - 152 , - 783 , - 2422 , - 2381 , - 660 , - 2635 , - 242 , - 1545 , - 1168 , - 1799 , - 750 , - 709 , - 1676 , - 963 , - 1258 , - 2561 , - 2184 , - 127 , - 1766 , - 1725 , - 4 , - 1979 , - 2274 , - 889 , - 512 , - 1143 , - 94 , - 53 , - 1020 , - 307 , - 602 , - 1905 , - 1528 , - 2159 , - 1110 , - 1069 , - 2036 , - 1323 , - 1618 , - 233 , - 2544 , - 487 , - 2126 , - 2085 , - 364 , - 2339 , - 2634 , - 1249 , - 872 , - 1503 , - 454 , - 413 , - 1380 , - 667 , - 962 , - 2265 , - 1888 , - 2519 , - 1470 , - 1429 , - 2396 , - 1683 , - 1978 , - 593 , - 216 , - 847 , - 2486 , - 2445 , - 724 , - 11 , - 306 , - 1609 , - 1232 , - 1863 , - 814 , - 773 , - 1740 , - 1027 , - 1322 , - 2625 , - 2248 , - 191 , - 1830 , - 1789 , - 68 , - 2043 , - 2338 , - 953 , - 576 , - 1207 , - 158 , - 117 , - 1084 , - 371 , - 666 , - 1969 , - 1592 , - 2223 , - 1174 , - 1133 , - 2100 , - 1387 , - 1682 , - 297 , - 2608 , - 551 , - 2190 , - 2149 , - 428 , - 2403 , - 10 , - 1313 , - 936 , - 1567 , - 518 , - 477 , - 1444 , - 731 , - 1026 , - 2329 , - 1952 , - 2583 , - 1534 , - 1493 , - 2460 , - 1747 , - 2042 , - 657 , - 280 , - 911 , - 2550 , - 2509 , - 788 , - 75 , - 370 , - 1673 , - 1296 , - 1927 , - 878 , - 837 , - 1804 , - 1091 , - 1386 , - 1 , - 2312 , - 255 , - 1894 , - 1853 , - 132 , - 2107 , - 2402 , - 1017 , - 640 , - 1271 , - 222 , - 181 , - 1148 , - 435 , - 730 , - 2033 , - 1656 , - 2287 , - 1238 , - 1197 , - 2164 , - 1451 , - 1746 , - 361 , - 2672 , - 615 , - 2254 , - 2213 , - 492 , - 2467 , - 74 , - 1377 , - 1000 , - 1631 , - 582 , - 541 , - 1508 , - 795 , - 1090 , - 2393 , - 2016 , - 2647 , - 1598 , - 1557 , - 2524 , - 1811 , - 2106 , - 721 , - 344 , - 975 , - 2614 , - 2573 , - 852 , - 139 , - 434 , - 1737 , - 1360 , - 1991 , - 942 , - 901 , - 1868 , - 1155 , - 1450 , - 65 , - 2376 , - 319 , - 1958 , - 1917 , - 196 , - 2171 , - 2466 , - 1081 , - 704 , - 1335 , - 286 , - 245 , - 1212 , - 499 , - 794 , - 2097 , - 1720 , - 2351 , - 1302 , - 1261 , - 2228 , - 1515 , - 1810 , - 425 , - 48 , - 679 , - 2318 , - 2277 , - 556 , - 2531 , - 138 , - 1441 , - 1064 , - 1695 , - 646 , - 605 , - 1572 , - 859 , - 1154 , - 2457 , - 2080 , - 23 , - 1662 , - 1621 , - 2588 , - 1875 , - 2170 , - 785 , - 408 , - 1039 , - 2678 , - 2637 , - 916 , - 203 , - 498 , - 1801 , - 1424 , - 2055 , - 1006 , - 965 , - 1932 , - 1219 , - 1514 , - 129 , - 2440 , - 383 , - 2022 , - 1981 , - 260 , - 2235 , - 2530 , - 1145 , - 768 , - 1399 , - 350 , - 309 , - 1276 , - 563 , - 858 , - 2161 , - 1784 , - 2415 , - 1366 , - 1325 , - 2292 , - 1579 , - 1874 , - 489 , - 112 , - 743 , - 2382 , - 2341 , - 620 , - 2595 , - 202 , - 1505 , - 1128 , - 1759 , - 710 , - 669 , - 1636 , - 923 , - 1218 , - 2521 , - 2144 , - 87 , - 1726 , - 1685 , - 2652 , - 1939 , - 2234 , - 849 , - 472 , - 1103 , - 54 , - 13 , - 980 , - 267 , - 562 , - 1865 , - 1488 , - 2119 , - 1070 , - 1029 , - 1996 , - 1283 , - 1578 , - 193 , - 2504 , - 447 , - 2086 , - 2045 , - 324 , - 2299 , - 2594 , - 1209 , - 832 , - 1463 , - 414 , - 373 , - 1340 , - 627 , - 922 , - 2225 , - 1848 , - 2479 , - 1430 , - 1389 , - 2356 , - 1643 , - 1938 , - 553 , - 176 , - 807 , - 2446 , - 2405 , - 684 , - 2659 , - 266 , - 1569 , - 1192 , - 1823 , - 774 , - 733 , - 1700 , - 987 , - 1282 , - 2585 , - 2208 , - 151 , - 1790 , - 1749 , - 28 , - 2003 , - 2298 , - 913 , - 536 , - 1167 , - 118 , - 77 , - 1044 , - 331 , - 626 , - 1929 , - 1552 , - 2183 , - 1134 , - 1093 , - 2060 , - 1347 , - 1642 , - 257 , - 2568 , - 511 , - 2150 , - 2109 , - 388 , - 2363 , - 2658 , - 1273 , - 896 , - 1527 , - 478 , - 437 , - 1404 , - 691 , - 986 , - 2289 , - 1912 , - 2543 , - 1494 , - 1453 , - 2420 , - 1707 , - 2002 , - 617 , - 240 , - 871 , - 2510 , - 2469 , - 748 , - 35 , - 330 , - 1633 , - 1256 , - 1887 , - 838 , - 797 , - 1764 , - 1051 , - 1346 , - 2649 , - 2272 , - 215 , - 1854 , - 1813 , - 92 , - 2067 , - 2362 , - 977 , - 600 , - 1231 , - 182 , - 141 , - 1108 , - 395 , - 690 , - 1993 , - 1616 , - 2247 , - 1198 , - 1157 , - 2124 , - 1411 , - 1706 , - 321 , - 2632 , - 575 , - 2214 , - 2173 , - 452 , - 2427 , - 34 , - 1337 , - 960 , - 1591 , - 542 , - 501 , - 1468 , - 755 , - 1050 , - 2353 , - 1976 , - 2607 , - 1558 , - 1517 , - 2484 , - 1771 , - 2066 , - 681 , - 304 , - 935 , - 2574 , - 2533 , - 812 , - 99 , - 394 , - 1697 , - 1320 , - 1951 , - 902 , - 861 , - 1828 , - 1115 , - 1410 , - 25 , - 2336 , - 279 , - 1918 , - 1877 , - 156 , - 2131 , - 2426 , - 1041 , - 664 , - 1295 , - 246 , - 205 , - 1172 , - 459 , - 754 , - 2057 , - 1680 , - 2311 , - 1262 , - 1221 , - 2188 , - 1475 , - 1770 , - 385 , - 8 , - 639 , - 2278 , - 2237 , - 516 , - 2491 , - 98 , - 1401 , - 1024 , - 1655 , - 606 , - 565 , - 1532 , - 819 , - 1114 , - 2417 , - 2040 , - 2671 , - 1622 , - 1581 , - 2548 , - 1835 , - 2130 , - 745 , - 368 , - 999 , - 2638 , - 2597 , - 876 , - 163 , - 458 , - 1761 , - 1384 , - 2015 , - 966 , - 925 , - 1892 , - 1179 , - 1474 , - 89 , - 2400 , - 343 , - 1982 , - 1941 , - 220 , - 2195 , - 2490 , - 1105 , - 728 , - 1359 , - 310 , - 269 , - 1236 , - 523 , - 818 , - 2121 , - 1744 , - 2375 , - 1326 , - 1285 , - 2252 , - 1539 , - 1834 , - 449 , - 72 , - 703 , - 2342 , - 2301 , - 580 , - 2555 , - 162 , - 1465 , - 1088 , - 1719 , - 670 , - 629 , - 1596 , - 883 , - 1178 , - 2481 , - 2104 , - 47 , - 1686 , - 1645 , - 2612 , - 1899 , - 2194 , - 809 , - 432 , - 1063 , - 14 , - 2661 , - 940 , - 227 , - 522 , - 1825 , - 1448 , - 2079 , - 1030 , - 989 , - 1956 , - 1243 , - 1538 , - 153 , - 2464 , - 407 , - 2046 , - 2005 , - 284 , - 2259 , - 2554 , - 1169 , - 792 , - 1423 , - 374 , - 333 , - 1300 , - 587 , - 882 , - 2185 , - 1808 , - 2439 , - 1390 , - 1349 , - 2316 , - 1603 , - 1898 , - 513 , - 136 , - 767 , - 2406 , - 2365 , - 644 , - 2619 , - 226 , - 1529 , - 1152 , - 1783 , - 734 , - 693 , - 1660 , - 947 , - 1242 , - 2545 , - 2168 , - 111 , - 1750 , - 1709 , - 2676 , - 1963 , - 2258 , - 873 , - 496 , - 1127 , - 78 , - 37 , - 1004 , - 291 , - 586 , - 1889 , - 1512 , - 2143 , - 1094 , - 1053 , - 2020 , - 1307 , - 1602 , - 217 , - 2528 , - 471 , - 2110 , - 2069 , - 348 , - 2323 , - 2618 , - 1233 , - 856 , - 1487 , - 438 , - 397 , - 1364 , - 651 , - 946 , - 2249 , - 1872 , - 2503 , - 1454 , - 1413 , - 2380 , - 1667 , - 1962 , - 577 , - 200 , - 831 , - 2470 , - 2429 , - 708 , - 2683 , - 290 , - 1593 , - 1216 , - 1847 , - 798 , - 757 , - 1724 , - 1011 , - 1306 , - 2609 , - 2232 , - 175 , - 1814 , - 1773 , - 52 , - 2027 , - 2322 , - 937 , - 560 , - 1191 , - 142 , - 101 , - 1068 , - 355 , - 650 , - 1953 , - 1576 , - 2207 , - 1158 , - 1117 , - 2084 , - 1371 , - 1666 , - 281 , - 2592 , - 535 , - 2174 , - 2133 , - 412 , - 2387 , - 2682 , - 1297 , - 920 , - 1551 , - 502 , - 461 , - 1428 , - 715 , - 1010 , - 2313 , - 1936 , - 2567 , - 1518 , - 1477 , - 2444 , - 1731 , - 2026 , - 641 , - 264 , - 895 , - 2534 , - 2493 , - 772 , - 59 , - 354 , - 1657 , - 1280 , - 1911 , - 862 , - 821 , - 1788 , - 1075 , - 1370 , - 2673 , - 2296 , - 239 , - 1878 , - 1837 , - 116 , - 2091 , - 2386 , - 1001 , - 624 , - 1255 , - 206 , - 165 , - 1132 , - 419 , - 714 , - 2017 , - 1640 , - 2271 , - 1222 , - 1181 , - 2148 , - 1435 , - 1730 , - 345 , - 2656 , - 599 , - 2238 , - 2197 , - 476 , - 2451 , - 58 , - 1361 , - 984 , - 1615 , - 566 , - 525 , - 1492 , - 779 , - 1074 , - 2377 , - 2000 , - 2631 , - 1582 , - 1541 , - 2508 , - 1795 , - 2090 , - 705 , - 328 , - 959 , - 2598 , - 2557 , - 836 , - 123 , - 418 , - 1721 , - 1344 , - 1975 , - 926 , - 885 , - 1852 , - 1139 , - 1434 , - 49 , - 2360 , - 303 , - 1942 , - 1901 , - 180 , - 2155 , - 2450 , - 1065 , - 688 , - 1319 , - 270 , - 229 , - 1196 , - 483 , - 778 , - 2081 , - 1704 , - 2335 , - 1286 , - 1245 , - 2212 , - 1499 , - 1794 , - 409 , - 32 , - 663 , - 2302 , - 2261 , - 540 , - 2515 , - 122 , - 1425 , - 1048 , - 1679 , - 630 , - 589 , - 1556 , - 843 , - 1138 , - 2441 , - 2064 , - 7 , - 1646 , - 1605 , - 2572 , - 1859 , - 2154 , - 769 , - 392 , - 1023 , - 2662 , - 2621 , - 900 , - 187 , - 482 , - 1785 , - 1408 , - 2039 , - 990 , - 949 , - 1916 , - 1203 , - 1498 , - 113 , - 2424 , - 367 , - 2006 , - 1965 , - 244 , - 2219 , - 2514 , - 1129 , - 752 , - 1383 , - 334 , - 293 , - 1260 , - 547 , - 842 , - 2145 , - 1768 , - 2399 , - 1350 , - 1309 , - 2276 , - 1563 , - 1858 , - 473 , - 96 , - 727 , - 2366 , - 2325 , - 604 , - 2579 , - 186 , - 1489 , - 1112 , - 1743 , - 694 , - 653 , - 1620 , - 907 , - 1202 , - 2505 , - 2128 , - 71 , - 1710 , - 1669 , - 2636 , - 1923 , - 2218 , - 833 , - 456 , - 1087 , - 38 , - 2685 , - 964 , - 251 , - 546 , - 1849 , - 1472 , - 2103 , - 1054 , - 1013 , - 1980 , - 1267 , - 1562 , - 177 , - 2488 , - 431 , - 2070 , - 2029 , - 308 , - 2283 , - 2578 , - 1193 , - 816 , - 1447 , - 398 , - 357 , - 1324 , - 611 , - 906 , - 2209 , - 1832 , - 2463 , - 1414 , - 1373 , - 2340 , - 1627 , - 1922 , - 537 , - 160 , - 791 , - 2430 , - 2389 , - 668 , - 2643 , - 250 , - 1553 , - 1176 , - 1807 , - 758 , - 717 , - 1684 , - 971 , - 1266 , - 2569 , - 2192 , - 135 , - 1774 , - 1733 , - 12 , - 1987 , - 2282 , - 897 , - 520 , - 1151 , - 102 , - 61 , - 1028 , - 315 , - 610 , - 1913 , - 1536 , - 2167 , - 1118 , - 1077 , - 2044 , - 1331 , - 1626 , - 241 , - 2552 , - 495 , - 2134 , - 2093 , - 372 , - 2347 , - 2642 , - 1257 , - 880 , - 1511 , - 462 , - 421 , - 1388 , - 675 , - 970 , - 2273 , - 1896 , - 2527 , - 1478 , - 1437 , - 2404 , - 1691 , - 1986 , - 601 , - 224 , - 855 , - 2494 , - 2453 , - 732 , - 19 , - 314 , - 1617 , - 1240 , - 1871 , - 822 , - 781 , - 1748 , - 1035 , - 1330 , - 2633 , - 2256 , - 199 , - 1838 , - 1797 , - 76 , - 2051 , - 2346 , - 961 , - 584 , - 1215 , - 166 , - 125 , - 1092 , - 379 , - 674 , - 1977 , - 1600 , - 2231 , - 1182 , - 1141 , - 2108 , - 1395 , - 1690 , - 305 , - 2616 , - 559 , - 2198 , - 2157 , - 436 , - 2411 , - 18 , - 1321 , - 944 , - 1575 , - 526 , - 485 , - 1452 , - 739 , - 1034 , - 2337 , - 1960 , - 2591 , - 1542 , - 1501 , - 2468 , - 1755 , - 2050 , - 665 , - 288 , - 919 , - 2558 , - 2517 , - 796 , - 83 , - 378 , - 1681 , - 1304 , - 1935 , - 886 , - 845 , - 1812 , - 1099 , - 1394 , - 9 , - 2320 , - 263 , - 1902 , - 1861 , - 140 , - 2115 , - 2410 , - 1025 , - 648 , - 1279 , - 230 , - 189 , - 1156 , - 443 , - 738 , - 2041 , - 1664 , - 2295 , - 1246 , - 1205 , - 2172 , - 1459 , - 1754 , - 369 , - 2680 , - 623 , - 2262 , - 2221 , - 500 , - 2475 , - 82 , - 1385 , - 1008 , - 1639 , - 590 , - 549 , - 1516 , - 803 , - 1098 , - 2401 , - 2024 , - 2655 , - 1606 , - 1565 , - 2532 , - 1819 , - 2114 , - 729 , - 352 , - 983 , - 2622 , - 2581 , - 860 , - 147 , - 442 , - 1745 , - 1368 , - 1999 , - 950 , - 909 , - 1876 , - 1163 , - 1458 , - 73 , - 2384 , - 327 , - 1966 , - 1925 , - 204 , - 2179 , - 2474 , - 1089 , - 712 , - 1343 , - 294 , - 253 , - 1220 , - 507 , - 802 , - 2105 , - 1728 , - 2359 , - 1310 , - 1269 , - 2236 , - 1523 , - 1818 , - 433 , - 56 , - 687 , - 2326 , - 2285 , - 564 , - 2539 , - 146 , - 1449 , - 1072 , - 1703 , - 654 , - 613 , - 1580 , - 867 , - 1162 , - 2465 , - 2088 , - 31 , - 1670 , - 1629 , - 2596 , - 1883 , - 2178 , - 793 , - 416 , - 1047 , - 2686 , - 2645 , - 924 , - 211 , - 506 , - 1809 , - 1432 , - 2063 , - 1014 , - 973 , - 1940 , - 1227 , - 1522 , - 137 , - 2448 , - 391 , - 2030 , - 1989 , - 268 , - 2243 , - 2538 , - 1153 , - 776 , - 1407 , - 358 , - 317 , - 1284 , - 571 , - 866 , - 2169 , - 1792 , - 2423 , - 1374 , - 1333 , - 2300 , - 1587 , - 1882 , - 497 , - 120 , - 751 , - 2390 , - 2349 , - 628 , - 2603 , - 210 , - 1513 , - 1136 , - 1767 , - 718 , - 677 , - 1644 , - 931 , - 1226 , - 2529 , - 2152 , - 95 , - 1734 , - 1693 , - 2660 , - 1947 , - 2242 , - 857 , - 480 , - 1111 , - 62 , - 21 , - 988 , - 275 , - 570 , - 1873 , - 1496 , - 2127 , - 1078 , - 1037 , - 2004 , - 1291 , - 1586 , - 201 , - 2512 , - 455 , - 2094 , - 2053 , - 332 , - 2307 , - 2602 , - 1217 , - 840 , - 1471 , - 422 , - 381 , - 1348 , - 635 , - 930 , - 2233 , - 1856 , - 2487 , - 1438 , - 1397 , - 2364 , - 1651 , - 1946 , - 561 , - 184 , - 815 , - 2454 , - 2413 , - 692 , - 2667 , - 274 , - 1577 , - 1200 , - 1831 , - 782 , - 741 , - 1708 , - 995 , - 1290 , - 2593 , - 2216 , - 159 , - 1798 , - 1757 , - 36 , - 2011 , - 2306 , - 921 , - 544 , - 1175 , - 126 , - 85 , - 1052 , - 339 , - 634 , - 1937 , - 1560 , - 2191 , - 1142 , - 1101 , - 2068 , - 1355 , - 1650 , - 265 , - 2576 , - 519 , - 2158 , - 2117 , - 396 , - 2371 , - 2666 , - 1281 , - 904 , - 1535 , - 486 , - 445 , - 1412 , - 699 , - 994 , - 2297 , - 1920 , - 2551 , - 1502 , - 1461 , - 2428 , - 1715 , - 2010 , - 625 , - 248 , - 879 , - 2518 , - 2477 , - 756 , - 43 , - 338 , - 1641 , - 1264 , - 1895 , - 846 , - 805 , - 1772 , - 1059 , - 1354 , - 2657 , - 2280 , - 223 , - 1862 , - 1821 , - 100 , - 2075 , - 2370 , - 985 , - 608 , - 1239 , - 190 , - 149 , - 1116 , - 403 , - 698 , - 2001 , - 1624 , - 2255 , - 1206 , - 1165 , - 2132 , - 1419 , - 1714 , - 329 , - 2640 , - 583 , - 2222 , - 2181 , - 460 , - 2435 , - 42 , - 1345 , - 968 , - 1599 , - 550 , - 509 , - 1476 , - 763 , - 1058 , - 2361 , - 1984 , - 2615 , - 1566 , - 1525 , - 2492 , - 1779 , - 2074 , - 689 , - 312 , - 943 , - 2582 , - 2541 , - 820 , - 107 , - 402 , - 1705 , - 1328 , - 1959 , - 910 , - 869 , - 1836 , - 1123 , - 1418 , - 33 , - 2344 , - 287 , - 1926 , - 1885 , - 164 , - 2139 , - 2434 , - 1049 , - 672 , - 1303 , - 254 , - 213 , - 1180 , - 467 , - 762 , - 2065 , - 1688 , - 2319 , - 1270 , - 1229 , - 2196 , - 1483 , - 1778 , - 393 , - 16 , - 647 , - 2286 , - 2245 , - 524 , - 2499 , - 106 , - 1409 , - 1032 , - 1663 , - 614 , - 573 , - 1540 , - 827 , - 1122 , - 2425 , - 2048 , - 2679 , - 1630 , - 1589 , - 2556 , - 1843 , - 2138 , - 753 , - 376 , - 1007 , - 2646 , - 2605 , - 884 , - 171 , - 466 , - 1769 , - 1392 , - 2023 , - 974 , - 933 , - 1900 , - 1187 , - 1482 , - 97 , - 2408 , - 351 , - 1990 , - 1949 , - 228 , - 2203 , - 2498 , - 1113 , - 736 , - 1367 , - 318 , - 277 , - 1244 , - 531 , - 826 , - 2129 , - 1752 , - 2383 , - 1334 , - 1293 , - 2260 , - 1547 , - 1842 , - 457 , - 80 , - 711 , - 2350 , - 2309 , - 588 , - 2563 , - 170 , - 1473 , - 1096 , - 1727 , - 678 , - 637 , - 1604 , - 891 , - 1186 , - 2489 , - 2112 , - 55 , - 1694 , - 1653 , - 2620 , - 1907 , - 2202 , - 817 , - 440 , - 1071 , - 22 , - 2669 , - 948 , - 235 , - 530 , - 1833 , - 1456 , - 2087 , - 1038 , - 997 , - 1964 , - 1251 , - 1546 , - 161 , - 2472 , - 415 , - 2054 , - 2013 , - 292 , - 2267 , - 2562 , - 1177 , - 800 , - 1431 , - 382 , - 341 , - 1308 , - 595 , - 890 , - 2193 , - 1816 , - 2447 , - 1398 , - 1357 , - 2324 , - 1611 , - 1906 , - 521 , - 144 , - 775 , - 2414 , - 2373 , - 652 , - 2627 , - 234 , - 1537 , - 1160 , - 1791 , - 742 , - 701 , - 1668 , - 955 , - 1250 , - 2553 , - 2176 , - 119 , - 1758 , - 1717 , - 2684 , - 1971 , - 2266 , - 881 , - 504 , - 1135 , - 86 , - 45 , - 1012 , - 299 , - 594 , - 1897 , - 1520 , - 2151 , - 1102 , - 1061 , - 2028 , - 1315 , - 1610 , - 225 , - 2536 , - 479 , - 2118 , - 2077 , - 356 , - 2331 , - 2626 , - 1241 , - 864 , - 1495 , - 446 , - 405 , - 1372 , - 659 , - 954 , - 2257 , - 1880 , - 2511 , - 1462 , - 1421 , - 2388 , - 1675 , - 1970 , - 585 , - 208 , - 839 , - 2478 , - 2437 , - 716 , - 3 , - 298 , - 1601 , - 1224 , - 1855 , - 806 , - 765 , - 1732 , - 1019 , - 1314 , - 2617 , - 2240 , - 183 , - 1822 , - 1781 , - 60 , - 2035 , - 2330 , - 945 , - 568 , - 1199 , - 150 , - 109 , - 1076 , - 363 , - 658 , - 1961 , - 1584 , - 2215 , - 1166 , - 1125 , - 2092 , - 1379 , - 1674 , - 289 , - 2600 , - 543 , - 2182 , - 2141 , - 420 , - 2395 , - 2 , - 1305 , - 928 , - 1559 , - 510 , - 469 , - 1436 , - 723 , - 1018 , - 2321 , - 1944 , - 2575 , - 1526 , - 1485 , - 2452 , - 1739 , - 2034 , - 649 , - 272 , - 903 , - 2542 , - 2501 , - 780 , - 67 , - 362 , - 1665 , - 1288 , - 1919 , - 870 , - 829 , - 1796 , - 1083 , - 1378 , - 2681 , - 2304 , - 247 , - 1886 , - 1845 , - 124 , - 2099 , - 2394 , - 1009 , - 632 , - 1263 , - 214 , - 173 , - 1140 , - 427 , - 722 , - 2025 , - 1648 , - 2279 , - 1230 , - 1189 , - 2156 , - 1443 , - 1738 , - 353 , - 2664 , - 607 , - 2246 , - 2205 , - 484 , - 2459 , - 66 , - 1369 , - 992 , - 1623 , - 574 , - 533 , - 1500 , - 787 , - 1082 , - 2385 , - 2008 , - 2639 , - 1590 , - 1549 , - 2516 , - 1803 , - 2098 , - 713 , - 336 , - 967 , - 2606 , - 2565 , - 844 , - 131 , - 426 , - 1729 , - 1352 , - 1983 , - 934 , - 893 , - 1860 , - 1147 , - 1442 , - 57 , - 2368 , - 311 , - 1950 , - 1909 , - 188 , - 2163 , - 2458 , - 1073 , - 696 , - 1327 , - 278 , - 237 , - 1204 , - 491 , - 786 , - 2089 , - 1712 , - 2343 , - 1294 , - 1253 , - 2220 , - 1507 , - 1802 , - 417 , - 40 , - 671 , - 2310 , - 2269 , - 548 , - 2523 , - 130 , - 1433 , - 1056 , - 1687 , - 638 , - 597 , - 1564 , - 851 , - 1146 , - 2449 , - 2072 , - 15 , - 1654 , - 1613 , - 2580 , - 1867 , - 2162 , - 777 , - 400 , - 1031 , - 2670 , - 2629 , - 908 , - 195 , - 490 , - 1793 , - 1416 , - 2047 , - 998 , - 957 , - 1924 , - 1211 , - 1506 , - 121 , - 2432 , - 375 , - 2014 , - 1973 , - 252 , - 2227 , - 2522 , - 1137 , - 760 , - 1391 , - 342 , - 301 , - 1268 , - 555 , - 850 , - 2153 , - 1776 , - 2407 , - 1358 , - 1317 , - 2284 , - 1571 , - 1866 , - 481 , - 104 , - 735 , - 2374 , - 2333 , - 612 , - 2587 , - 194 , - 1497 , - 1120 , - 1751 , - 702 , - 661 , - 1628 , - 915 , - 1210 , - 2513 , - 2136 , - 79 , - 1718 , - 1677 , - 2644 , - 1931 , - 2226 , - 841 , - 464 , - 1095 , - 46 , - 5 , - 972 , - 259 , - 554 , - 1857 , - 1480 , - 2111 , - 1062 , - 1021 , - 1988 , - 1275 , - 1570 , - 185 , - 2496 , - 439 , - 2078 , - 2037 , - 316 , - 2291 , - 2586 , - 1201 , - 824 , - 1455 , - 406 , - 365 , - 1332 , - 619 , - 914 , - 2217 , - 1840 , - 2471 , - 1422 , - 1381 , - 2348 , - 1635 , - 1930 , - 545 , - 168 , - 799 , - 2438 , - 2397 , - 676 , - 2651 , - 258 , - 1561 , - 1184 , - 1815 , - 766 , - 725 , - 1692 , - 979 , - 1274 , - 2577 , - 2200 , - 143 , - 1782 , - 1741 , - 20 , - 1995 , - 2290 , - 905 , - 528 , - 1159 , - 110 , - 69 , - 1036 , - 323 , - 618 , - 1921 , - 1544 , - 2175 , - 1126 , - 1085 , - 2052 , - 1339 , - 1634 , - 249 , - 2560 , - 503 , - 2142 , - 2101 , - 380 , - 2355 , - 2650 , - 1265 , - 888 , - 1519 , - 470 , - 429 , - 1396 , - 683 , - 978 , - 2281 , - 1904 , - 2535 , - 1486 , - 1445 , - 2412 , - 1699 , - 1994 , - 609 , - 232 , - 863 , - 2502 , - 2461 , - 740 , - 27 , - 322 , - 1625 , - 1248 , - 1879 , - 830 , - 789 , - 1756 , - 1043 , - 1338 , - 2641 , - 2264 , - 207 , - 1846 , - 1805 , - 84 , - 2059 , - 2354 , - 969 , - 592 , - 1223 , - 174 , - 133 , - 1100 , - 387 , - 682 , - 1985 , - 1608 , - 2239 , - 1190 , - 1149 , - 2116 , - 1403 , - 1698 , - 313 , - 2624 , - 567 , - 2206 , - 2165 , - 444 , - 2419 , - 26 , - 1329 , - 952 , - 1583 , - 534 , - 493 , - 1460 , - 747 , - 1042 , - 2345 , - 1968 , - 2599 , - 1550 , - 1509 , - 2476 , - 1763 , - 2058 , - 673 , - 296 , - 927 , - 2566 , - 2525 , - 804 , - 91 , - 386 , - 1689 , - 1312 , - 1943 , - 894 , - 853 , - 1820 , - 1107 , - 1402 , - 17 , - 2328 , - 271 , - 1910 , - 1869 , - 148 , - 2123 , - 2418 , - 1033 , - 656 , - 1287 , - 238 , - 197 , - 1164 , - 451 , - 746 , - 2049 , - 1672 , - 2303 , - 1254 , - 1213 , - 2180 , - 1467 , - 1762 , - 377 , - 0 , - 2491 , - 2574 , - 249 , - 1020 , - 2135 , - 842 , - 2645 , - 2040 , - 1779 , - 1862 , - 2289 , - 308 , - 1423 , - 130 , - 1933 , - 1328 , - 1067 , - 1150 , - 1577 , - 2348 , - 711 , - 2170 , - 1221 , - 616 , - 355 , - 438 , - 865 , - 1636 , - 2751 , - 1458 , - 509 , - 2656 , - 2395 , - 2478 , - 153 , - 924 , - 2039 , - 746 , - 2549 , - 1944 , - 1683 , - 1766 , - 2193 , - 212 , - 1327 , - 34 , - 1837 , - 1232 , - 971 , - 1054 , - 1481 , - 2252 , - 615 , - 2074 , - 1125 , - 520 , - 259 , - 342 , - 769 , - 1540 , - 2655 , - 1362 , - 413 , - 2560 , - 2299 , - 2382 , - 57 , - 828 , - 1943 , - 650 , - 2453 , - 1848 , - 1587 , - 1670 , - 2097 , - 116 , - 1231 , - 2690 , - 1741 , - 1136 , - 875 , - 958 , - 1385 , - 2156 , - 519 , - 1978 , - 1029 , - 424 , - 163 , - 246 , - 673 , - 1444 , - 2559 , - 1266 , - 317 , - 2464 , - 2203 , - 2286 , - 2713 , - 732 , - 1847 , - 554 , - 2357 , - 1752 , - 1491 , - 1574 , - 2001 , - 20 , - 1135 , - 2594 , - 1645 , - 1040 , - 779 , - 862 , - 1289 , - 2060 , - 423 , - 1882 , - 933 , - 328 , - 67 , - 150 , - 577 , - 1348 , - 2463 , - 1170 , - 221 , - 2368 , - 2107 , - 2190 , - 2617 , - 636 , - 1751 , - 458 , - 2261 , - 1656 , - 1395 , - 1478 , - 1905 , - 2676 , - 1039 , - 2498 , - 1549 , - 944 , - 683 , - 766 , - 1193 , - 1964 , - 327 , - 1786 , - 837 , - 232 , - 2723 , - 54 , - 481 , - 1252 , - 2367 , - 1074 , - 125 , - 2272 , - 2011 , - 2094 , - 2521 , - 540 , - 1655 , - 362 , - 2165 , - 1560 , - 1299 , - 1382 , - 1809 , - 2580 , - 943 , - 2402 , - 1453 , - 848 , - 587 , - 670 , - 1097 , - 1868 , - 231 , - 1690 , - 741 , - 136 , - 2627 , - 2710 , - 385 , - 1156 , - 2271 , - 978 , - 29 , - 2176 , - 1915 , - 1998 , - 2425 , - 444 , - 1559 , - 266 , - 2069 , - 1464 , - 1203 , - 1286 , - 1713 , - 2484 , - 847 , - 2306 , - 1357 , - 752 , - 491 , - 574 , - 1001 , - 1772 , - 135 , - 1594 , - 645 , - 40 , - 2531 , - 2614 , - 289 , - 1060 , - 2175 , - 882 , - 2685 , - 2080 , - 1819 , - 1902 , - 2329 , - 348 , - 1463 , - 170 , - 1973 , - 1368 , - 1107 , - 1190 , - 1617 , - 2388 , - 751 , - 2210 , - 1261 , - 656 , - 395 , - 478 , - 905 , - 1676 , - 39 , - 1498 , - 549 , - 2696 , - 2435 , - 2518 , - 193 , - 964 , - 2079 , - 786 , - 2589 , - 1984 , - 1723 , - 1806 , - 2233 , - 252 , - 1367 , - 74 , - 1877 , - 1272 , - 1011 , - 1094 , - 1521 , - 2292 , - 655 , - 2114 , - 1165 , - 560 , - 299 , - 382 , - 809 , - 1580 , - 2695 , - 1402 , - 453 , - 2600 , - 2339 , - 2422 , - 97 , - 868 , - 1983 , - 690 , - 2493 , - 1888 , - 1627 , - 1710 , - 2137 , - 156 , - 1271 , - 2730 , - 1781 , - 1176 , - 915 , - 998 , - 1425 , - 2196 , - 559 , - 2018 , - 1069 , - 464 , - 203 , - 286 , - 713 , - 1484 , - 2599 , - 1306 , - 357 , - 2504 , - 2243 , - 2326 , - 1 , - 772 , - 1887 , - 594 , - 2397 , - 1792 , - 1531 , - 1614 , - 2041 , - 60 , - 1175 , - 2634 , - 1685 , - 1080 , - 819 , - 902 , - 1329 , - 2100 , - 463 , - 1922 , - 973 , - 368 , - 107 , - 190 , - 617 , - 1388 , - 2503 , - 1210 , - 261 , - 2408 , - 2147 , - 2230 , - 2657 , - 676 , - 1791 , - 498 , - 2301 , - 1696 , - 1435 , - 1518 , - 1945 , - 2716 , - 1079 , - 2538 , - 1589 , - 984 , - 723 , - 806 , - 1233 , - 2004 , - 367 , - 1826 , - 877 , - 272 , - 11 , - 94 , - 521 , - 1292 , - 2407 , - 1114 , - 165 , - 2312 , - 2051 , - 2134 , - 2561 , - 580 , - 1695 , - 402 , - 2205 , - 1600 , - 1339 , - 1422 , - 1849 , - 2620 , - 983 , - 2442 , - 1493 , - 888 , - 627 , - 710 , - 1137 , - 1908 , - 271 , - 1730 , - 781 , - 176 , - 2667 , - 2750 , - 425 , - 1196 , - 2311 , - 1018 , - 69 , - 2216 , - 1955 , - 2038 , - 2465 , - 484 , - 1599 , - 306 , - 2109 , - 1504 , - 1243 , - 1326 , - 1753 , - 2524 , - 887 , - 2346 , - 1397 , - 792 , - 531 , - 614 , - 1041 , - 1812 , - 175 , - 1634 , - 685 , - 80 , - 2571 , - 2654 , - 329 , - 1100 , - 2215 , - 922 , - 2725 , - 2120 , - 1859 , - 1942 , - 2369 , - 388 , - 1503 , - 210 , - 2013 , - 1408 , - 1147 , - 1230 , - 1657 , - 2428 , - 791 , - 2250 , - 1301 , - 696 , - 435 , - 518 , - 945 , - 1716 , - 79 , - 1538 , - 589 , - 2736 , - 2475 , - 2558 , - 233 , - 1004 , - 2119 , - 826 , - 2629 , - 2024 , - 1763 , - 1846 , - 2273 , - 292 , - 1407 , - 114 , - 1917 , - 1312 , - 1051 , - 1134 , - 1561 , - 2332 , - 695 , - 2154 , - 1205 , - 600 , - 339 , - 422 , - 849 , - 1620 , - 2735 , - 1442 , - 493 , - 2640 , - 2379 , - 2462 , - 137 , - 908 , - 2023 , - 730 , - 2533 , - 1928 , - 1667 , - 1750 , - 2177 , - 196 , - 1311 , - 18 , - 1821 , - 1216 , - 955 , - 1038 , - 1465 , - 2236 , - 599 , - 2058 , - 1109 , - 504 , - 243 , - 326 , - 753 , - 1524 , - 2639 , - 1346 , - 397 , - 2544 , - 2283 , - 2366 , - 41 , - 812 , - 1927 , - 634 , - 2437 , - 1832 , - 1571 , - 1654 , - 2081 , - 100 , - 1215 , - 2674 , - 1725 , - 1120 , - 859 , - 942 , - 1369 , - 2140 , - 503 , - 1962 , - 1013 , - 408 , - 147 , - 230 , - 657 , - 1428 , - 2543 , - 1250 , - 301 , - 2448 , - 2187 , - 2270 , - 2697 , - 716 , - 1831 , - 538 , - 2341 , - 1736 , - 1475 , - 1558 , - 1985 , - 4 , - 1119 , - 2578 , - 1629 , - 1024 , - 763 , - 846 , - 1273 , - 2044 , - 407 , - 1866 , - 917 , - 312 , - 51 , - 134 , - 561 , - 1332 , - 2447 , - 1154 , - 205 , - 2352 , - 2091 , - 2174 , - 2601 , - 620 , - 1735 , - 442 , - 2245 , - 1640 , - 1379 , - 1462 , - 1889 , - 2660 , - 1023 , - 2482 , - 1533 , - 928 , - 667 , - 750 , - 1177 , - 1948 , - 311 , - 1770 , - 821 , - 216 , - 2707 , - 38 , - 465 , - 1236 , - 2351 , - 1058 , - 109 , - 2256 , - 1995 , - 2078 , - 2505 , - 524 , - 1639 , - 346 , - 2149 , - 1544 , - 1283 , - 1366 , - 1793 , - 2564 , - 927 , - 2386 , - 1437 , - 832 , - 571 , - 654 , - 1081 , - 1852 , - 215 , - 1674 , - 725 , - 120 , - 2611 , - 2694 , - 369 , - 1140 , - 2255 , - 962 , - 13 , - 2160 , - 1899 , - 1982 , - 2409 , - 428 , - 1543 , - 250 , - 2053 , - 1448 , - 1187 , - 1270 , - 1697 , - 2468 , - 831 , - 2290 , - 1341 , - 736 , - 475 , - 558 , - 985 , - 1756 , - 119 , - 1578 , - 629 , - 24 , - 2515 , - 2598 , - 273 , - 1044 , - 2159 , - 866 , - 2669 , - 2064 , - 1803 , - 1886 , - 2313 , - 332 , - 1447 , - 154 , - 1957 , - 1352 , - 1091 , - 1174 , - 1601 , - 2372 , - 735 , - 2194 , - 1245 , - 640 , - 379 , - 462 , - 889 , - 1660 , - 23 , - 1482 , - 533 , - 2680 , - 2419 , - 2502 , - 177 , - 948 , - 2063 , - 770 , - 2573 , - 1968 , - 1707 , - 1790 , - 2217 , - 236 , - 1351 , - 58 , - 1861 , - 1256 , - 995 , - 1078 , - 1505 , - 2276 , - 639 , - 2098 , - 1149 , - 544 , - 283 , - 366 , - 793 , - 1564 , - 2679 , - 1386 , - 437 , - 2584 , - 2323 , - 2406 , - 81 , - 852 , - 1967 , - 674 , - 2477 , - 1872 , - 1611 , - 1694 , - 2121 , - 140 , - 1255 , - 2714 , - 1765 , - 1160 , - 899 , - 982 , - 1409 , - 2180 , - 543 , - 2002 , - 1053 , - 448 , - 187 , - 270 , - 697 , - 1468 , - 2583 , - 1290 , - 341 , - 2488 , - 2227 , - 2310 , - 2737 , - 756 , - 1871 , - 578 , - 2381 , - 1776 , - 1515 , - 1598 , - 2025 , - 44 , - 1159 , - 2618 , - 1669 , - 1064 , - 803 , - 886 , - 1313 , - 2084 , - 447 , - 1906 , - 957 , - 352 , - 91 , - 174 , - 601 , - 1372 , - 2487 , - 1194 , - 245 , - 2392 , - 2131 , - 2214 , - 2641 , - 660 , - 1775 , - 482 , - 2285 , - 1680 , - 1419 , - 1502 , - 1929 , - 2700 , - 1063 , - 2522 , - 1573 , - 968 , - 707 , - 790 , - 1217 , - 1988 , - 351 , - 1810 , - 861 , - 256 , - 2747 , - 78 , - 505 , - 1276 , - 2391 , - 1098 , - 149 , - 2296 , - 2035 , - 2118 , - 2545 , - 564 , - 1679 , - 386 , - 2189 , - 1584 , - 1323 , - 1406 , - 1833 , - 2604 , - 967 , - 2426 , - 1477 , - 872 , - 611 , - 694 , - 1121 , - 1892 , - 255 , - 1714 , - 765 , - 160 , - 2651 , - 2734 , - 409 , - 1180 , - 2295 , - 1002 , - 53 , - 2200 , - 1939 , - 2022 , - 2449 , - 468 , - 1583 , - 290 , - 2093 , - 1488 , - 1227 , - 1310 , - 1737 , - 2508 , - 871 , - 2330 , - 1381 , - 776 , - 515 , - 598 , - 1025 , - 1796 , - 159 , - 1618 , - 669 , - 64 , - 2555 , - 2638 , - 313 , - 1084 , - 2199 , - 906 , - 2709 , - 2104 , - 1843 , - 1926 , - 2353 , - 372 , - 1487 , - 194 , - 1997 , - 1392 , - 1131 , - 1214 , - 1641 , - 2412 , - 775 , - 2234 , - 1285 , - 680 , - 419 , - 502 , - 929 , - 1700 , - 63 , - 1522 , - 573 , - 2720 , - 2459 , - 2542 , - 217 , - 988 , - 2103 , - 810 , - 2613 , - 2008 , - 1747 , - 1830 , - 2257 , - 276 , - 1391 , - 98 , - 1901 , - 1296 , - 1035 , - 1118 , - 1545 , - 2316 , - 679 , - 2138 , - 1189 , - 584 , - 323 , - 406 , - 833 , - 1604 , - 2719 , - 1426 , - 477 , - 2624 , - 2363 , - 2446 , - 121 , - 892 , - 2007 , - 714 , - 2517 , - 1912 , - 1651 , - 1734 , - 2161 , - 180 , - 1295 , - 2 , - 1805 , - 1200 , - 939 , - 1022 , - 1449 , - 2220 , - 583 , - 2042 , - 1093 , - 488 , - 227 , - 310 , - 737 , - 1508 , - 2623 , - 1330 , - 381 , - 2528 , - 2267 , - 2350 , - 25 , - 796 , - 1911 , - 618 , - 2421 , - 1816 , - 1555 , - 1638 , - 2065 , - 84 , - 1199 , - 2658 , - 1709 , - 1104 , - 843 , - 926 , - 1353 , - 2124 , - 487 , - 1946 , - 997 , - 392 , - 131 , - 214 , - 641 , - 1412 , - 2527 , - 1234 , - 285 , - 2432 , - 2171 , - 2254 , - 2681 , - 700 , - 1815 , - 522 , - 2325 , - 1720 , - 1459 , - 1542 , - 1969 , - 2740 , - 1103 , - 2562 , - 1613 , - 1008 , - 747 , - 830 , - 1257 , - 2028 , - 391 , - 1850 , - 901 , - 296 , - 35 , - 118 , - 545 , - 1316 , - 2431 , - 1138 , - 189 , - 2336 , - 2075 , - 2158 , - 2585 , - 604 , - 1719 , - 426 , - 2229 , - 1624 , - 1363 , - 1446 , - 1873 , - 2644 , - 1007 , - 2466 , - 1517 , - 912 , - 651 , - 734 , - 1161 , - 1932 , - 295 , - 1754 , - 805 , - 200 , - 2691 , - 22 , - 449 , - 1220 , - 2335 , - 1042 , - 93 , - 2240 , - 1979 , - 2062 , - 2489 , - 508 , - 1623 , - 330 , - 2133 , - 1528 , - 1267 , - 1350 , - 1777 , - 2548 , - 911 , - 2370 , - 1421 , - 816 , - 555 , - 638 , - 1065 , - 1836 , - 199 , - 1658 , - 709 , - 104 , - 2595 , - 2678 , - 353 , - 1124 , - 2239 , - 946 , - 2749 , - 2144 , - 1883 , - 1966 , - 2393 , - 412 , - 1527 , - 234 , - 2037 , - 1432 , - 1171 , - 1254 , - 1681 , - 2452 , - 815 , - 2274 , - 1325 , - 720 , - 459 , - 542 , - 969 , - 1740 , - 103 , - 1562 , - 613 , - 8 , - 2499 , - 2582 , - 257 , - 1028 , - 2143 , - 850 , - 2653 , - 2048 , - 1787 , - 1870 , - 2297 , - 316 , - 1431 , - 138 , - 1941 , - 1336 , - 1075 , - 1158 , - 1585 , - 2356 , - 719 , - 2178 , - 1229 , - 624 , - 363 , - 446 , - 873 , - 1644 , - 7 , - 1466 , - 517 , - 2664 , - 2403 , - 2486 , - 161 , - 932 , - 2047 , - 754 , - 2557 , - 1952 , - 1691 , - 1774 , - 2201 , - 220 , - 1335 , - 42 , - 1845 , - 1240 , - 979 , - 1062 , - 1489 , - 2260 , - 623 , - 2082 , - 1133 , - 528 , - 267 , - 350 , - 777 , - 1548 , - 2663 , - 1370 , - 421 , - 2568 , - 2307 , - 2390 , - 65 , - 836 , - 1951 , - 658 , - 2461 , - 1856 , - 1595 , - 1678 , - 2105 , - 124 , - 1239 , - 2698 , - 1749 , - 1144 , - 883 , - 966 , - 1393 , - 2164 , - 527 , - 1986 , - 1037 , - 432 , - 171 , - 254 , - 681 , - 1452 , - 2567 , - 1274 , - 325 , - 2472 , - 2211 , - 2294 , - 2721 , - 740 , - 1855 , - 562 , - 2365 , - 1760 , - 1499 , - 1582 , - 2009 , - 28 , - 1143 , - 2602 , - 1653 , - 1048 , - 787 , - 870 , - 1297 , - 2068 , - 431 , - 1890 , - 941 , - 336 , - 75 , - 158 , - 585 , - 1356 , - 2471 , - 1178 , - 229 , - 2376 , - 2115 , - 2198 , - 2625 , - 644 , - 1759 , - 466 , - 2269 , - 1664 , - 1403 , - 1486 , - 1913 , - 2684 , - 1047 , - 2506 , - 1557 , - 952 , - 691 , - 774 , - 1201 , - 1972 , - 335 , - 1794 , - 845 , - 240 , - 2731 , - 62 , - 489 , - 1260 , - 2375 , - 1082 , - 133 , - 2280 , - 2019 , - 2102 , - 2529 , - 548 , - 1663 , - 370 , - 2173 , - 1568 , - 1307 , - 1390 , - 1817 , - 2588 , - 951 , - 2410 , - 1461 , - 856 , - 595 , - 678 , - 1105 , - 1876 , - 239 , - 1698 , - 749 , - 144 , - 2635 , - 2718 , - 393 , - 1164 , - 2279 , - 986 , - 37 , - 2184 , - 1923 , - 2006 , - 2433 , - 452 , - 1567 , - 274 , - 2077 , - 1472 , - 1211 , - 1294 , - 1721 , - 2492 , - 855 , - 2314 , - 1365 , - 760 , - 499 , - 582 , - 1009 , - 1780 , - 143 , - 1602 , - 653 , - 48 , - 2539 , - 2622 , - 297 , - 1068 , - 2183 , - 890 , - 2693 , - 2088 , - 1827 , - 1910 , - 2337 , - 356 , - 1471 , - 178 , - 1981 , - 1376 , - 1115 , - 1198 , - 1625 , - 2396 , - 759 , - 2218 , - 1269 , - 664 , - 403 , - 486 , - 913 , - 1684 , - 47 , - 1506 , - 557 , - 2704 , - 2443 , - 2526 , - 201 , - 972 , - 2087 , - 794 , - 2597 , - 1992 , - 1731 , - 1814 , - 2241 , - 260 , - 1375 , - 82 , - 1885 , - 1280 , - 1019 , - 1102 , - 1529 , - 2300 , - 663 , - 2122 , - 1173 , - 568 , - 307 , - 390 , - 817 , - 1588 , - 2703 , - 1410 , - 461 , - 2608 , - 2347 , - 2430 , - 105 , - 876 , - 1991 , - 698 , - 2501 , - 1896 , - 1635 , - 1718 , - 2145 , - 164 , - 1279 , - 2738 , - 1789 , - 1184 , - 923 , - 1006 , - 1433 , - 2204 , - 567 , - 2026 , - 1077 , - 472 , - 211 , - 294 , - 721 , - 1492 , - 2607 , - 1314 , - 365 , - 2512 , - 2251 , - 2334 , - 9 , - 780 , - 1895 , - 602 , - 2405 , - 1800 , - 1539 , - 1622 , - 2049 , - 68 , - 1183 , - 2642 , - 1693 , - 1088 , - 827 , - 910 , - 1337 , - 2108 , - 471 , - 1930 , - 981 , - 376 , - 115 , - 198 , - 625 , - 1396 , - 2511 , - 1218 , - 269 , - 2416 , - 2155 , - 2238 , - 2665 , - 684 , - 1799 , - 506 , - 2309 , - 1704 , - 1443 , - 1526 , - 1953 , - 2724 , - 1087 , - 2546 , - 1597 , - 992 , - 731 , - 814 , - 1241 , - 2012 , - 375 , - 1834 , - 885 , - 280 , - 19 , - 102 , - 529 , - 1300 , - 2415 , - 1122 , - 173 , - 2320 , - 2059 , - 2142 , - 2569 , - 588 , - 1703 , - 410 , - 2213 , - 1608 , - 1347 , - 1430 , - 1857 , - 2628 , - 991 , - 2450 , - 1501 , - 896 , - 635 , - 718 , - 1145 , - 1916 , - 279 , - 1738 , - 789 , - 184 , - 2675 , - 6 , - 433 , - 1204 , - 2319 , - 1026 , - 77 , - 2224 , - 1963 , - 2046 , - 2473 , - 492 , - 1607 , - 314 , - 2117 , - 1512 , - 1251 , - 1334 , - 1761 , - 2532 , - 895 , - 2354 , - 1405 , - 800 , - 539 , - 622 , - 1049 , - 1820 , - 183 , - 1642 , - 693 , - 88 , - 2579 , - 2662 , - 337 , - 1108 , - 2223 , - 930 , - 2733 , - 2128 , - 1867 , - 1950 , - 2377 , - 396 , - 1511 , - 218 , - 2021 , - 1416 , - 1155 , - 1238 , - 1665 , - 2436 , - 799 , - 2258 , - 1309 , - 704 , - 443 , - 526 , - 953 , - 1724 , - 87 , - 1546 , - 597 , - 2744 , - 2483 , - 2566 , - 241 , - 1012 , - 2127 , - 834 , - 2637 , - 2032 , - 1771 , - 1854 , - 2281 , - 300 , - 1415 , - 122 , - 1925 , - 1320 , - 1059 , - 1142 , - 1569 , - 2340 , - 703 , - 2162 , - 1213 , - 608 , - 347 , - 430 , - 857 , - 1628 , - 2743 , - 1450 , - 501 , - 2648 , - 2387 , - 2470 , - 145 , - 916 , - 2031 , - 738 , - 2541 , - 1936 , - 1675 , - 1758 , - 2185 , - 204 , - 1319 , - 26 , - 1829 , - 1224 , - 963 , - 1046 , - 1473 , - 2244 , - 607 , - 2066 , - 1117 , - 512 , - 251 , - 334 , - 761 , - 1532 , - 2647 , - 1354 , - 405 , - 2552 , - 2291 , - 2374 , - 49 , - 820 , - 1935 , - 642 , - 2445 , - 1840 , - 1579 , - 1662 , - 2089 , - 108 , - 1223 , - 2682 , - 1733 , - 1128 , - 867 , - 950 , - 1377 , - 2148 , - 511 , - 1970 , - 1021 , - 416 , - 155 , - 238 , - 665 , - 1436 , - 2551 , - 1258 , - 309 , - 2456 , - 2195 , - 2278 , - 2705 , - 724 , - 1839 , - 546 , - 2349 , - 1744 , - 1483 , - 1566 , - 1993 , - 12 , - 1127 , - 2586 , - 1637 , - 1032 , - 771 , - 854 , - 1281 , - 2052 , - 415 , - 1874 , - 925 , - 320 , - 59 , - 142 , - 569 , - 1340 , - 2455 , - 1162 , - 213 , - 2360 , - 2099 , - 2182 , - 2609 , - 628 , - 1743 , - 450 , - 2253 , - 1648 , - 1387 , - 1470 , - 1897 , - 2668 , - 1031 , - 2490 , - 1541 , - 936 , - 675 , - 758 , - 1185 , - 1956 , - 319 , - 1778 , - 829 , - 224 , - 2715 , - 46 , - 473 , - 1244 , - 2359 , - 1066 , - 117 , - 2264 , - 2003 , - 2086 , - 2513 , - 532 , - 1647 , - 354 , - 2157 , - 1552 , - 1291 , - 1374 , - 1801 , - 2572 , - 935 , - 2394 , - 1445 , - 840 , - 579 , - 662 , - 1089 , - 1860 , - 223 , - 1682 , - 733 , - 128 , - 2619 , - 2702 , - 377 , - 1148 , - 2263 , - 970 , - 21 , - 2168 , - 1907 , - 1990 , - 2417 , - 436 , - 1551 , - 258 , - 2061 , - 1456 , - 1195 , - 1278 , - 1705 , - 2476 , - 839 , - 2298 , - 1349 , - 744 , - 483 , - 566 , - 993 , - 1764 , - 127 , - 1586 , - 637 , - 32 , - 2523 , - 2606 , - 281 , - 1052 , - 2167 , - 874 , - 2677 , - 2072 , - 1811 , - 1894 , - 2321 , - 340 , - 1455 , - 162 , - 1965 , - 1360 , - 1099 , - 1182 , - 1609 , - 2380 , - 743 , - 2202 , - 1253 , - 648 , - 387 , - 470 , - 897 , - 1668 , - 31 , - 1490 , - 541 , - 2688 , - 2427 , - 2510 , - 185 , - 956 , - 2071 , - 778 , - 2581 , - 1976 , - 1715 , - 1798 , - 2225 , - 244 , - 1359 , - 66 , - 1869 , - 1264 , - 1003 , - 1086 , - 1513 , - 2284 , - 647 , - 2106 , - 1157 , - 552 , - 291 , - 374 , - 801 , - 1572 , - 2687 , - 1394 , - 445 , - 2592 , - 2331 , - 2414 , - 89 , - 860 , - 1975 , - 682 , - 2485 , - 1880 , - 1619 , - 1702 , - 2129 , - 148 , - 1263 , - 2722 , - 1773 , - 1168 , - 907 , - 990 , - 1417 , - 2188 , - 551 , - 2010 , - 1061 , - 456 , - 195 , - 278 , - 705 , - 1476 , - 2591 , - 1298 , - 349 , - 2496 , - 2235 , - 2318 , - 2745 , - 764 , - 1879 , - 586 , - 2389 , - 1784 , - 1523 , - 1606 , - 2033 , - 52 , - 1167 , - 2626 , - 1677 , - 1072 , - 811 , - 894 , - 1321 , - 2092 , - 455 , - 1914 , - 965 , - 360 , - 99 , - 182 , - 609 , - 1380 , - 2495 , - 1202 , - 253 , - 2400 , - 2139 , - 2222 , - 2649 , - 668 , - 1783 , - 490 , - 2293 , - 1688 , - 1427 , - 1510 , - 1937 , - 2708 , - 1071 , - 2530 , - 1581 , - 976 , - 715 , - 798 , - 1225 , - 1996 , - 359 , - 1818 , - 869 , - 264 , - 3 , - 86 , - 513 , - 1284 , - 2399 , - 1106 , - 157 , - 2304 , - 2043 , - 2126 , - 2553 , - 572 , - 1687 , - 394 , - 2197 , - 1592 , - 1331 , - 1414 , - 1841 , - 2612 , - 975 , - 2434 , - 1485 , - 880 , - 619 , - 702 , - 1129 , - 1900 , - 263 , - 1722 , - 773 , - 168 , - 2659 , - 2742 , - 417 , - 1188 , - 2303 , - 1010 , - 61 , - 2208 , - 1947 , - 2030 , - 2457 , - 476 , - 1591 , - 298 , - 2101 , - 1496 , - 1235 , - 1318 , - 1745 , - 2516 , - 879 , - 2338 , - 1389 , - 784 , - 523 , - 606 , - 1033 , - 1804 , - 167 , - 1626 , - 677 , - 72 , - 2563 , - 2646 , - 321 , - 1092 , - 2207 , - 914 , - 2717 , - 2112 , - 1851 , - 1934 , - 2361 , - 380 , - 1495 , - 202 , - 2005 , - 1400 , - 1139 , - 1222 , - 1649 , - 2420 , - 783 , - 2242 , - 1293 , - 688 , - 427 , - 510 , - 937 , - 1708 , - 71 , - 1530 , - 581 , - 2728 , - 2467 , - 2550 , - 225 , - 996 , - 2111 , - 818 , - 2621 , - 2016 , - 1755 , - 1838 , - 2265 , - 284 , - 1399 , - 106 , - 1909 , - 1304 , - 1043 , - 1126 , - 1553 , - 2324 , - 687 , - 2146 , - 1197 , - 592 , - 331 , - 414 , - 841 , - 1612 , - 2727 , - 1434 , - 485 , - 2632 , - 2371 , - 2454 , - 129 , - 900 , - 2015 , - 722 , - 2525 , - 1920 , - 1659 , - 1742 , - 2169 , - 188 , - 1303 , - 10 , - 1813 , - 1208 , - 947 , - 1030 , - 1457 , - 2228 , - 591 , - 2050 , - 1101 , - 496 , - 235 , - 318 , - 745 , - 1516 , - 2631 , - 1338 , - 389 , - 2536 , - 2275 , - 2358 , - 33 , - 804 , - 1919 , - 626 , - 2429 , - 1824 , - 1563 , - 1646 , - 2073 , - 92 , - 1207 , - 2666 , - 1717 , - 1112 , - 851 , - 934 , - 1361 , - 2132 , - 495 , - 1954 , - 1005 , - 400 , - 139 , - 222 , - 649 , - 1420 , - 2535 , - 1242 , - 293 , - 2440 , - 2179 , - 2262 , - 2689 , - 708 , - 1823 , - 530 , - 2333 , - 1728 , - 1467 , - 1550 , - 1977 , - 2748 , - 1111 , - 2570 , - 1621 , - 1016 , - 755 , - 838 , - 1265 , - 2036 , - 399 , - 1858 , - 909 , - 304 , - 43 , - 126 , - 553 , - 1324 , - 2439 , - 1146 , - 197 , - 2344 , - 2083 , - 2166 , - 2593 , - 612 , - 1727 , - 434 , - 2237 , - 1632 , - 1371 , - 1454 , - 1881 , - 2652 , - 1015 , - 2474 , - 1525 , - 920 , - 659 , - 742 , - 1169 , - 1940 , - 303 , - 1762 , - 813 , - 208 , - 2699 , - 30 , - 457 , - 1228 , - 2343 , - 1050 , - 101 , - 2248 , - 1987 , - 2070 , - 2497 , - 516 , - 1631 , - 338 , - 2141 , - 1536 , - 1275 , - 1358 , - 1785 , - 2556 , - 919 , - 2378 , - 1429 , - 824 , - 563 , - 646 , - 1073 , - 1844 , - 207 , - 1666 , - 717 , - 112 , - 2603 , - 2686 , - 361 , - 1132 , - 2247 , - 954 , - 5 , - 2152 , - 1891 , - 1974 , - 2401 , - 420 , - 1535 , - 242 , - 2045 , - 1440 , - 1179 , - 1262 , - 1689 , - 2460 , - 823 , - 2282 , - 1333 , - 728 , - 467 , - 550 , - 977 , - 1748 , - 111 , - 1570 , - 621 , - 16 , - 2507 , - 2590 , - 265 , - 1036 , - 2151 , - 858 , - 2661 , - 2056 , - 1795 , - 1878 , - 2305 , - 324 , - 1439 , - 146 , - 1949 , - 1344 , - 1083 , - 1166 , - 1593 , - 2364 , - 727 , - 2186 , - 1237 , - 632 , - 371 , - 454 , - 881 , - 1652 , - 15 , - 1474 , - 525 , - 2672 , - 2411 , - 2494 , - 169 , - 940 , - 2055 , - 762 , - 2565 , - 1960 , - 1699 , - 1782 , - 2209 , - 228 , - 1343 , - 50 , - 1853 , - 1248 , - 987 , - 1070 , - 1497 , - 2268 , - 631 , - 2090 , - 1141 , - 536 , - 275 , - 358 , - 785 , - 1556 , - 2671 , - 1378 , - 429 , - 2576 , - 2315 , - 2398 , - 73 , - 844 , - 1959 , - 666 , - 2469 , - 1864 , - 1603 , - 1686 , - 2113 , - 132 , - 1247 , - 2706 , - 1757 , - 1152 , - 891 , - 974 , - 1401 , - 2172 , - 535 , - 1994 , - 1045 , - 440 , - 179 , - 262 , - 689 , - 1460 , - 2575 , - 1282 , - 333 , - 2480 , - 2219 , - 2302 , - 2729 , - 748 , - 1863 , - 570 , - 2373 , - 1768 , - 1507 , - 1590 , - 2017 , - 36 , - 1151 , - 2610 , - 1661 , - 1056 , - 795 , - 878 , - 1305 , - 2076 , - 439 , - 1898 , - 949 , - 344 , - 83 , - 166 , - 593 , - 1364 , - 2479 , - 1186 , - 237 , - 2384 , - 2123 , - 2206 , - 2633 , - 652 , - 1767 , - 474 , - 2277 , - 1672 , - 1411 , - 1494 , - 1921 , - 2692 , - 1055 , - 2514 , - 1565 , - 960 , - 699 , - 782 , - 1209 , - 1980 , - 343 , - 1802 , - 853 , - 248 , - 2739 , - 70 , - 497 , - 1268 , - 2383 , - 1090 , - 141 , - 2288 , - 2027 , - 2110 , - 2537 , - 556 , - 1671 , - 378 , - 2181 , - 1576 , - 1315 , - 1398 , - 1825 , - 2596 , - 959 , - 2418 , - 1469 , - 864 , - 603 , - 686 , - 1113 , - 1884 , - 247 , - 1706 , - 757 , - 152 , - 2643 , - 2726 , - 401 , - 1172 , - 2287 , - 994 , - 45 , - 2192 , - 1931 , - 2014 , - 2441 , - 460 , - 1575 , - 282 , - 2085 , - 1480 , - 1219 , - 1302 , - 1729 , - 2500 , - 863 , - 2322 , - 1373 , - 768 , - 507 , - 590 , - 1017 , - 1788 , - 151 , - 1610 , - 661 , - 56 , - 2547 , - 2630 , - 305 , - 1076 , - 2191 , - 898 , - 2701 , - 2096 , - 1835 , - 1918 , - 2345 , - 364 , - 1479 , - 186 , - 1989 , - 1384 , - 1123 , - 1206 , - 1633 , - 2404 , - 767 , - 2226 , - 1277 , - 672 , - 411 , - 494 , - 921 , - 1692 , - 55 , - 1514 , - 565 , - 2712 , - 2451 , - 2534 , - 209 , - 980 , - 2095 , - 802 , - 2605 , - 2000 , - 1739 , - 1822 , - 2249 , - 268 , - 1383 , - 90 , - 1893 , - 1288 , - 1027 , - 1110 , - 1537 , - 2308 , - 671 , - 2130 , - 1181 , - 576 , - 315 , - 398 , - 825 , - 1596 , - 2711 , - 1418 , - 469 , - 2616 , - 2355 , - 2438 , - 113 , - 884 , - 1999 , - 706 , - 2509 , - 1904 , - 1643 , - 1726 , - 2153 , - 172 , - 1287 , - 2746 , - 1797 , - 1192 , - 931 , - 1014 , - 1441 , - 2212 , - 575 , - 2034 , - 1085 , - 480 , - 219 , - 302 , - 729 , - 1500 , - 2615 , - 1322 , - 373 , - 2520 , - 2259 , - 2342 , - 17 , - 788 , - 1903 , - 610 , - 2413 , - 1808 , - 1547 , - 1630 , - 2057 , - 76 , - 1191 , - 2650 , - 1701 , - 1096 , - 835 , - 918 , - 1345 , - 2116 , - 479 , - 1938 , - 989 , - 384 , - 123 , - 206 , - 633 , - 1404 , - 2519 , - 1226 , - 277 , - 2424 , - 2163 , - 2246 , - 2673 , - 692 , - 1807 , - 514 , - 2317 , - 1712 , - 1451 , - 1534 , - 1961 , - 2732 , - 1095 , - 2554 , - 1605 , - 1000 , - 739 , - 822 , - 1249 , - 2020 , - 383 , - 1842 , - 893 , - 288 , - 27 , - 110 , - 537 , - 1308 , - 2423 , - 1130 , - 181 , - 2328 , - 2067 , - 2150 , - 2577 , - 596 , - 1711 , - 418 , - 2221 , - 1616 , - 1355 , - 1438 , - 1865 , - 2636 , - 999 , - 2458 , - 1509 , - 904 , - 643 , - 726 , - 1153 , - 1924 , - 287 , - 1746 , - 797 , - 192 , - 2683 , - 14 , - 441 , - 1212 , - 2327 , - 1034 , - 85 , - 2232 , - 1971 , - 2054 , - 2481 , - 500 , - 1615 , - 322 , - 2125 , - 1520 , - 1259 , - 1342 , - 1769 , - 2540 , - 903 , - 2362 , - 1413 , - 808 , - 547 , - 630 , - 1057 , - 1828 , - 191 , - 1650 , - 701 , - 96 , - 2587 , - 2670 , - 345 , - 1116 , - 2231 , - 938 , - 2741 , - 2136 , - 1875 , - 1958 , - 2385 , - 404 , - 1519 , - 226 , - 2029 , - 1424 , - 1163 , - 1246 , - 1673 , - 2444 , - 807 , - 2266 , - 1317 , - 712 , - 451 , - 534 , - 961 , - 1732 , - 95 , - 1554 , - 605 , - 0 , - 1979 , - 2022 , - 129 , - 1932 , - 1799 , - 2546 , - 1357 , - 1048 , - 1619 , - 254 , - 2585 , - 164 , - 1439 , - 778 , - 997 , - 2096 , - 1259 , - 1302 , - 2225 , - 1212 , - 1079 , - 1826 , - 637 , - 328 , - 899 , - 2350 , - 1865 , - 2260 , - 719 , - 58 , - 277 , - 1376 , - 539 , - 582 , - 1505 , - 492 , - 359 , - 1106 , - 2733 , - 2424 , - 179 , - 1630 , - 1145 , - 1540 , - 2815 , - 2154 , - 2373 , - 656 , - 2635 , - 2678 , - 785 , - 2588 , - 2455 , - 386 , - 2013 , - 1704 , - 2275 , - 910 , - 425 , - 820 , - 2095 , - 1434 , - 1653 , - 2752 , - 1915 , - 1958 , - 65 , - 1868 , - 1735 , - 2482 , - 1293 , - 984 , - 1555 , - 190 , - 2521 , - 100 , - 1375 , - 714 , - 933 , - 2032 , - 1195 , - 1238 , - 2161 , - 1148 , - 1015 , - 1762 , - 573 , - 264 , - 835 , - 2286 , - 1801 , - 2196 , - 655 , - 2810 , - 213 , - 1312 , - 475 , - 518 , - 1441 , - 428 , - 295 , - 1042 , - 2669 , - 2360 , - 115 , - 1566 , - 1081 , - 1476 , - 2751 , - 2090 , - 2309 , - 592 , - 2571 , - 2614 , - 721 , - 2524 , - 2391 , - 322 , - 1949 , - 1640 , - 2211 , - 846 , - 361 , - 756 , - 2031 , - 1370 , - 1589 , - 2688 , - 1851 , - 1894 , - 1 , - 1804 , - 1671 , - 2418 , - 1229 , - 920 , - 1491 , - 126 , - 2457 , - 36 , - 1311 , - 650 , - 869 , - 1968 , - 1131 , - 1174 , - 2097 , - 1084 , - 951 , - 1698 , - 509 , - 200 , - 771 , - 2222 , - 1737 , - 2132 , - 591 , - 2746 , - 149 , - 1248 , - 411 , - 454 , - 1377 , - 364 , - 231 , - 978 , - 2605 , - 2296 , - 51 , - 1502 , - 1017 , - 1412 , - 2687 , - 2026 , - 2245 , - 528 , - 2507 , - 2550 , - 657 , - 2460 , - 2327 , - 258 , - 1885 , - 1576 , - 2147 , - 782 , - 297 , - 692 , - 1967 , - 1306 , - 1525 , - 2624 , - 1787 , - 1830 , - 2753 , - 1740 , - 1607 , - 2354 , - 1165 , - 856 , - 1427 , - 62 , - 2393 , - 2788 , - 1247 , - 586 , - 805 , - 1904 , - 1067 , - 1110 , - 2033 , - 1020 , - 887 , - 1634 , - 445 , - 136 , - 707 , - 2158 , - 1673 , - 2068 , - 527 , - 2682 , - 85 , - 1184 , - 347 , - 390 , - 1313 , - 300 , - 167 , - 914 , - 2541 , - 2232 , - 2803 , - 1438 , - 953 , - 1348 , - 2623 , - 1962 , - 2181 , - 464 , - 2443 , - 2486 , - 593 , - 2396 , - 2263 , - 194 , - 1821 , - 1512 , - 2083 , - 718 , - 233 , - 628 , - 1903 , - 1242 , - 1461 , - 2560 , - 1723 , - 1766 , - 2689 , - 1676 , - 1543 , - 2290 , - 1101 , - 792 , - 1363 , - 2814 , - 2329 , - 2724 , - 1183 , - 522 , - 741 , - 1840 , - 1003 , - 1046 , - 1969 , - 956 , - 823 , - 1570 , - 381 , - 72 , - 643 , - 2094 , - 1609 , - 2004 , - 463 , - 2618 , - 21 , - 1120 , - 283 , - 326 , - 1249 , - 236 , - 103 , - 850 , - 2477 , - 2168 , - 2739 , - 1374 , - 889 , - 1284 , - 2559 , - 1898 , - 2117 , - 400 , - 2379 , - 2422 , - 529 , - 2332 , - 2199 , - 130 , - 1757 , - 1448 , - 2019 , - 654 , - 169 , - 564 , - 1839 , - 1178 , - 1397 , - 2496 , - 1659 , - 1702 , - 2625 , - 1612 , - 1479 , - 2226 , - 1037 , - 728 , - 1299 , - 2750 , - 2265 , - 2660 , - 1119 , - 458 , - 677 , - 1776 , - 939 , - 982 , - 1905 , - 892 , - 759 , - 1506 , - 317 , - 8 , - 579 , - 2030 , - 1545 , - 1940 , - 399 , - 2554 , - 2773 , - 1056 , - 219 , - 262 , - 1185 , - 172 , - 39 , - 786 , - 2413 , - 2104 , - 2675 , - 1310 , - 825 , - 1220 , - 2495 , - 1834 , - 2053 , - 336 , - 2315 , - 2358 , - 465 , - 2268 , - 2135 , - 66 , - 1693 , - 1384 , - 1955 , - 590 , - 105 , - 500 , - 1775 , - 1114 , - 1333 , - 2432 , - 1595 , - 1638 , - 2561 , - 1548 , - 1415 , - 2162 , - 973 , - 664 , - 1235 , - 2686 , - 2201 , - 2596 , - 1055 , - 394 , - 613 , - 1712 , - 875 , - 918 , - 1841 , - 828 , - 695 , - 1442 , - 253 , - 2760 , - 515 , - 1966 , - 1481 , - 1876 , - 335 , - 2490 , - 2709 , - 992 , - 155 , - 198 , - 1121 , - 108 , - 2791 , - 722 , - 2349 , - 2040 , - 2611 , - 1246 , - 761 , - 1156 , - 2431 , - 1770 , - 1989 , - 272 , - 2251 , - 2294 , - 401 , - 2204 , - 2071 , - 2 , - 1629 , - 1320 , - 1891 , - 526 , - 41 , - 436 , - 1711 , - 1050 , - 1269 , - 2368 , - 1531 , - 1574 , - 2497 , - 1484 , - 1351 , - 2098 , - 909 , - 600 , - 1171 , - 2622 , - 2137 , - 2532 , - 991 , - 330 , - 549 , - 1648 , - 811 , - 854 , - 1777 , - 764 , - 631 , - 1378 , - 189 , - 2696 , - 451 , - 1902 , - 1417 , - 1812 , - 271 , - 2426 , - 2645 , - 928 , - 91 , - 134 , - 1057 , - 44 , - 2727 , - 658 , - 2285 , - 1976 , - 2547 , - 1182 , - 697 , - 1092 , - 2367 , - 1706 , - 1925 , - 208 , - 2187 , - 2230 , - 337 , - 2140 , - 2007 , - 2754 , - 1565 , - 1256 , - 1827 , - 462 , - 2793 , - 372 , - 1647 , - 986 , - 1205 , - 2304 , - 1467 , - 1510 , - 2433 , - 1420 , - 1287 , - 2034 , - 845 , - 536 , - 1107 , - 2558 , - 2073 , - 2468 , - 927 , - 266 , - 485 , - 1584 , - 747 , - 790 , - 1713 , - 700 , - 567 , - 1314 , - 125 , - 2632 , - 387 , - 1838 , - 1353 , - 1748 , - 207 , - 2362 , - 2581 , - 864 , - 27 , - 70 , - 993 , - 2796 , - 2663 , - 594 , - 2221 , - 1912 , - 2483 , - 1118 , - 633 , - 1028 , - 2303 , - 1642 , - 1861 , - 144 , - 2123 , - 2166 , - 273 , - 2076 , - 1943 , - 2690 , - 1501 , - 1192 , - 1763 , - 398 , - 2729 , - 308 , - 1583 , - 922 , - 1141 , - 2240 , - 1403 , - 1446 , - 2369 , - 1356 , - 1223 , - 1970 , - 781 , - 472 , - 1043 , - 2494 , - 2009 , - 2404 , - 863 , - 202 , - 421 , - 1520 , - 683 , - 726 , - 1649 , - 636 , - 503 , - 1250 , - 61 , - 2568 , - 323 , - 1774 , - 1289 , - 1684 , - 143 , - 2298 , - 2517 , - 800 , - 2779 , - 6 , - 929 , - 2732 , - 2599 , - 530 , - 2157 , - 1848 , - 2419 , - 1054 , - 569 , - 964 , - 2239 , - 1578 , - 1797 , - 80 , - 2059 , - 2102 , - 209 , - 2012 , - 1879 , - 2626 , - 1437 , - 1128 , - 1699 , - 334 , - 2665 , - 244 , - 1519 , - 858 , - 1077 , - 2176 , - 1339 , - 1382 , - 2305 , - 1292 , - 1159 , - 1906 , - 717 , - 408 , - 979 , - 2430 , - 1945 , - 2340 , - 799 , - 138 , - 357 , - 1456 , - 619 , - 662 , - 1585 , - 572 , - 439 , - 1186 , - 2813 , - 2504 , - 259 , - 1710 , - 1225 , - 1620 , - 79 , - 2234 , - 2453 , - 736 , - 2715 , - 2758 , - 865 , - 2668 , - 2535 , - 466 , - 2093 , - 1784 , - 2355 , - 990 , - 505 , - 900 , - 2175 , - 1514 , - 1733 , - 16 , - 1995 , - 2038 , - 145 , - 1948 , - 1815 , - 2562 , - 1373 , - 1064 , - 1635 , - 270 , - 2601 , - 180 , - 1455 , - 794 , - 1013 , - 2112 , - 1275 , - 1318 , - 2241 , - 1228 , - 1095 , - 1842 , - 653 , - 344 , - 915 , - 2366 , - 1881 , - 2276 , - 735 , - 74 , - 293 , - 1392 , - 555 , - 598 , - 1521 , - 508 , - 375 , - 1122 , - 2749 , - 2440 , - 195 , - 1646 , - 1161 , - 1556 , - 15 , - 2170 , - 2389 , - 672 , - 2651 , - 2694 , - 801 , - 2604 , - 2471 , - 402 , - 2029 , - 1720 , - 2291 , - 926 , - 441 , - 836 , - 2111 , - 1450 , - 1669 , - 2768 , - 1931 , - 1974 , - 81 , - 1884 , - 1751 , - 2498 , - 1309 , - 1000 , - 1571 , - 206 , - 2537 , - 116 , - 1391 , - 730 , - 949 , - 2048 , - 1211 , - 1254 , - 2177 , - 1164 , - 1031 , - 1778 , - 589 , - 280 , - 851 , - 2302 , - 1817 , - 2212 , - 671 , - 10 , - 229 , - 1328 , - 491 , - 534 , - 1457 , - 444 , - 311 , - 1058 , - 2685 , - 2376 , - 131 , - 1582 , - 1097 , - 1492 , - 2767 , - 2106 , - 2325 , - 608 , - 2587 , - 2630 , - 737 , - 2540 , - 2407 , - 338 , - 1965 , - 1656 , - 2227 , - 862 , - 377 , - 772 , - 2047 , - 1386 , - 1605 , - 2704 , - 1867 , - 1910 , - 17 , - 1820 , - 1687 , - 2434 , - 1245 , - 936 , - 1507 , - 142 , - 2473 , - 52 , - 1327 , - 666 , - 885 , - 1984 , - 1147 , - 1190 , - 2113 , - 1100 , - 967 , - 1714 , - 525 , - 216 , - 787 , - 2238 , - 1753 , - 2148 , - 607 , - 2762 , - 165 , - 1264 , - 427 , - 470 , - 1393 , - 380 , - 247 , - 994 , - 2621 , - 2312 , - 67 , - 1518 , - 1033 , - 1428 , - 2703 , - 2042 , - 2261 , - 544 , - 2523 , - 2566 , - 673 , - 2476 , - 2343 , - 274 , - 1901 , - 1592 , - 2163 , - 798 , - 313 , - 708 , - 1983 , - 1322 , - 1541 , - 2640 , - 1803 , - 1846 , - 2769 , - 1756 , - 1623 , - 2370 , - 1181 , - 872 , - 1443 , - 78 , - 2409 , - 2804 , - 1263 , - 602 , - 821 , - 1920 , - 1083 , - 1126 , - 2049 , - 1036 , - 903 , - 1650 , - 461 , - 152 , - 723 , - 2174 , - 1689 , - 2084 , - 543 , - 2698 , - 101 , - 1200 , - 363 , - 406 , - 1329 , - 316 , - 183 , - 930 , - 2557 , - 2248 , - 3 , - 1454 , - 969 , - 1364 , - 2639 , - 1978 , - 2197 , - 480 , - 2459 , - 2502 , - 609 , - 2412 , - 2279 , - 210 , - 1837 , - 1528 , - 2099 , - 734 , - 249 , - 644 , - 1919 , - 1258 , - 1477 , - 2576 , - 1739 , - 1782 , - 2705 , - 1692 , - 1559 , - 2306 , - 1117 , - 808 , - 1379 , - 14 , - 2345 , - 2740 , - 1199 , - 538 , - 757 , - 1856 , - 1019 , - 1062 , - 1985 , - 972 , - 839 , - 1586 , - 397 , - 88 , - 659 , - 2110 , - 1625 , - 2020 , - 479 , - 2634 , - 37 , - 1136 , - 299 , - 342 , - 1265 , - 252 , - 119 , - 866 , - 2493 , - 2184 , - 2755 , - 1390 , - 905 , - 1300 , - 2575 , - 1914 , - 2133 , - 416 , - 2395 , - 2438 , - 545 , - 2348 , - 2215 , - 146 , - 1773 , - 1464 , - 2035 , - 670 , - 185 , - 580 , - 1855 , - 1194 , - 1413 , - 2512 , - 1675 , - 1718 , - 2641 , - 1628 , - 1495 , - 2242 , - 1053 , - 744 , - 1315 , - 2766 , - 2281 , - 2676 , - 1135 , - 474 , - 693 , - 1792 , - 955 , - 998 , - 1921 , - 908 , - 775 , - 1522 , - 333 , - 24 , - 595 , - 2046 , - 1561 , - 1956 , - 415 , - 2570 , - 2789 , - 1072 , - 235 , - 278 , - 1201 , - 188 , - 55 , - 802 , - 2429 , - 2120 , - 2691 , - 1326 , - 841 , - 1236 , - 2511 , - 1850 , - 2069 , - 352 , - 2331 , - 2374 , - 481 , - 2284 , - 2151 , - 82 , - 1709 , - 1400 , - 1971 , - 606 , - 121 , - 516 , - 1791 , - 1130 , - 1349 , - 2448 , - 1611 , - 1654 , - 2577 , - 1564 , - 1431 , - 2178 , - 989 , - 680 , - 1251 , - 2702 , - 2217 , - 2612 , - 1071 , - 410 , - 629 , - 1728 , - 891 , - 934 , - 1857 , - 844 , - 711 , - 1458 , - 269 , - 2776 , - 531 , - 1982 , - 1497 , - 1892 , - 351 , - 2506 , - 2725 , - 1008 , - 171 , - 214 , - 1137 , - 124 , - 2807 , - 738 , - 2365 , - 2056 , - 2627 , - 1262 , - 777 , - 1172 , - 2447 , - 1786 , - 2005 , - 288 , - 2267 , - 2310 , - 417 , - 2220 , - 2087 , - 18 , - 1645 , - 1336 , - 1907 , - 542 , - 57 , - 452 , - 1727 , - 1066 , - 1285 , - 2384 , - 1547 , - 1590 , - 2513 , - 1500 , - 1367 , - 2114 , - 925 , - 616 , - 1187 , - 2638 , - 2153 , - 2548 , - 1007 , - 346 , - 565 , - 1664 , - 827 , - 870 , - 1793 , - 780 , - 647 , - 1394 , - 205 , - 2712 , - 467 , - 1918 , - 1433 , - 1828 , - 287 , - 2442 , - 2661 , - 944 , - 107 , - 150 , - 1073 , - 60 , - 2743 , - 674 , - 2301 , - 1992 , - 2563 , - 1198 , - 713 , - 1108 , - 2383 , - 1722 , - 1941 , - 224 , - 2203 , - 2246 , - 353 , - 2156 , - 2023 , - 2770 , - 1581 , - 1272 , - 1843 , - 478 , - 2809 , - 388 , - 1663 , - 1002 , - 1221 , - 2320 , - 1483 , - 1526 , - 2449 , - 1436 , - 1303 , - 2050 , - 861 , - 552 , - 1123 , - 2574 , - 2089 , - 2484 , - 943 , - 282 , - 501 , - 1600 , - 763 , - 806 , - 1729 , - 716 , - 583 , - 1330 , - 141 , - 2648 , - 403 , - 1854 , - 1369 , - 1764 , - 223 , - 2378 , - 2597 , - 880 , - 43 , - 86 , - 1009 , - 2812 , - 2679 , - 610 , - 2237 , - 1928 , - 2499 , - 1134 , - 649 , - 1044 , - 2319 , - 1658 , - 1877 , - 160 , - 2139 , - 2182 , - 289 , - 2092 , - 1959 , - 2706 , - 1517 , - 1208 , - 1779 , - 414 , - 2745 , - 324 , - 1599 , - 938 , - 1157 , - 2256 , - 1419 , - 1462 , - 2385 , - 1372 , - 1239 , - 1986 , - 797 , - 488 , - 1059 , - 2510 , - 2025 , - 2420 , - 879 , - 218 , - 437 , - 1536 , - 699 , - 742 , - 1665 , - 652 , - 519 , - 1266 , - 77 , - 2584 , - 339 , - 1790 , - 1305 , - 1700 , - 159 , - 2314 , - 2533 , - 816 , - 2795 , - 22 , - 945 , - 2748 , - 2615 , - 546 , - 2173 , - 1864 , - 2435 , - 1070 , - 585 , - 980 , - 2255 , - 1594 , - 1813 , - 96 , - 2075 , - 2118 , - 225 , - 2028 , - 1895 , - 2642 , - 1453 , - 1144 , - 1715 , - 350 , - 2681 , - 260 , - 1535 , - 874 , - 1093 , - 2192 , - 1355 , - 1398 , - 2321 , - 1308 , - 1175 , - 1922 , - 733 , - 424 , - 995 , - 2446 , - 1961 , - 2356 , - 815 , - 154 , - 373 , - 1472 , - 635 , - 678 , - 1601 , - 588 , - 455 , - 1202 , - 13 , - 2520 , - 275 , - 1726 , - 1241 , - 1636 , - 95 , - 2250 , - 2469 , - 752 , - 2731 , - 2774 , - 881 , - 2684 , - 2551 , - 482 , - 2109 , - 1800 , - 2371 , - 1006 , - 521 , - 916 , - 2191 , - 1530 , - 1749 , - 32 , - 2011 , - 2054 , - 161 , - 1964 , - 1831 , - 2578 , - 1389 , - 1080 , - 1651 , - 286 , - 2617 , - 196 , - 1471 , - 810 , - 1029 , - 2128 , - 1291 , - 1334 , - 2257 , - 1244 , - 1111 , - 1858 , - 669 , - 360 , - 931 , - 2382 , - 1897 , - 2292 , - 751 , - 90 , - 309 , - 1408 , - 571 , - 614 , - 1537 , - 524 , - 391 , - 1138 , - 2765 , - 2456 , - 211 , - 1662 , - 1177 , - 1572 , - 31 , - 2186 , - 2405 , - 688 , - 2667 , - 2710 , - 817 , - 2620 , - 2487 , - 418 , - 2045 , - 1736 , - 2307 , - 942 , - 457 , - 852 , - 2127 , - 1466 , - 1685 , - 2784 , - 1947 , - 1990 , - 97 , - 1900 , - 1767 , - 2514 , - 1325 , - 1016 , - 1587 , - 222 , - 2553 , - 132 , - 1407 , - 746 , - 965 , - 2064 , - 1227 , - 1270 , - 2193 , - 1180 , - 1047 , - 1794 , - 605 , - 296 , - 867 , - 2318 , - 1833 , - 2228 , - 687 , - 26 , - 245 , - 1344 , - 507 , - 550 , - 1473 , - 460 , - 327 , - 1074 , - 2701 , - 2392 , - 147 , - 1598 , - 1113 , - 1508 , - 2783 , - 2122 , - 2341 , - 624 , - 2603 , - 2646 , - 753 , - 2556 , - 2423 , - 354 , - 1981 , - 1672 , - 2243 , - 878 , - 393 , - 788 , - 2063 , - 1402 , - 1621 , - 2720 , - 1883 , - 1926 , - 33 , - 1836 , - 1703 , - 2450 , - 1261 , - 952 , - 1523 , - 158 , - 2489 , - 68 , - 1343 , - 682 , - 901 , - 2000 , - 1163 , - 1206 , - 2129 , - 1116 , - 983 , - 1730 , - 541 , - 232 , - 803 , - 2254 , - 1769 , - 2164 , - 623 , - 2778 , - 181 , - 1280 , - 443 , - 486 , - 1409 , - 396 , - 263 , - 1010 , - 2637 , - 2328 , - 83 , - 1534 , - 1049 , - 1444 , - 2719 , - 2058 , - 2277 , - 560 , - 2539 , - 2582 , - 689 , - 2492 , - 2359 , - 290 , - 1917 , - 1608 , - 2179 , - 814 , - 329 , - 724 , - 1999 , - 1338 , - 1557 , - 2656 , - 1819 , - 1862 , - 2785 , - 1772 , - 1639 , - 2386 , - 1197 , - 888 , - 1459 , - 94 , - 2425 , - 4 , - 1279 , - 618 , - 837 , - 1936 , - 1099 , - 1142 , - 2065 , - 1052 , - 919 , - 1666 , - 477 , - 168 , - 739 , - 2190 , - 1705 , - 2100 , - 559 , - 2714 , - 117 , - 1216 , - 379 , - 422 , - 1345 , - 332 , - 199 , - 946 , - 2573 , - 2264 , - 19 , - 1470 , - 985 , - 1380 , - 2655 , - 1994 , - 2213 , - 496 , - 2475 , - 2518 , - 625 , - 2428 , - 2295 , - 226 , - 1853 , - 1544 , - 2115 , - 750 , - 265 , - 660 , - 1935 , - 1274 , - 1493 , - 2592 , - 1755 , - 1798 , - 2721 , - 1708 , - 1575 , - 2322 , - 1133 , - 824 , - 1395 , - 30 , - 2361 , - 2756 , - 1215 , - 554 , - 773 , - 1872 , - 1035 , - 1078 , - 2001 , - 988 , - 855 , - 1602 , - 413 , - 104 , - 675 , - 2126 , - 1641 , - 2036 , - 495 , - 2650 , - 53 , - 1152 , - 315 , - 358 , - 1281 , - 268 , - 135 , - 882 , - 2509 , - 2200 , - 2771 , - 1406 , - 921 , - 1316 , - 2591 , - 1930 , - 2149 , - 432 , - 2411 , - 2454 , - 561 , - 2364 , - 2231 , - 162 , - 1789 , - 1480 , - 2051 , - 686 , - 201 , - 596 , - 1871 , - 1210 , - 1429 , - 2528 , - 1691 , - 1734 , - 2657 , - 1644 , - 1511 , - 2258 , - 1069 , - 760 , - 1331 , - 2782 , - 2297 , - 2692 , - 1151 , - 490 , - 709 , - 1808 , - 971 , - 1014 , - 1937 , - 924 , - 791 , - 1538 , - 349 , - 40 , - 611 , - 2062 , - 1577 , - 1972 , - 431 , - 2586 , - 2805 , - 1088 , - 251 , - 294 , - 1217 , - 204 , - 71 , - 818 , - 2445 , - 2136 , - 2707 , - 1342 , - 857 , - 1252 , - 2527 , - 1866 , - 2085 , - 368 , - 2347 , - 2390 , - 497 , - 2300 , - 2167 , - 98 , - 1725 , - 1416 , - 1987 , - 622 , - 137 , - 532 , - 1807 , - 1146 , - 1365 , - 2464 , - 1627 , - 1670 , - 2593 , - 1580 , - 1447 , - 2194 , - 1005 , - 696 , - 1267 , - 2718 , - 2233 , - 2628 , - 1087 , - 426 , - 645 , - 1744 , - 907 , - 950 , - 1873 , - 860 , - 727 , - 1474 , - 285 , - 2792 , - 547 , - 1998 , - 1513 , - 1908 , - 367 , - 2522 , - 2741 , - 1024 , - 187 , - 230 , - 1153 , - 140 , - 7 , - 754 , - 2381 , - 2072 , - 2643 , - 1278 , - 793 , - 1188 , - 2463 , - 1802 , - 2021 , - 304 , - 2283 , - 2326 , - 433 , - 2236 , - 2103 , - 34 , - 1661 , - 1352 , - 1923 , - 558 , - 73 , - 468 , - 1743 , - 1082 , - 1301 , - 2400 , - 1563 , - 1606 , - 2529 , - 1516 , - 1383 , - 2130 , - 941 , - 632 , - 1203 , - 2654 , - 2169 , - 2564 , - 1023 , - 362 , - 581 , - 1680 , - 843 , - 886 , - 1809 , - 796 , - 663 , - 1410 , - 221 , - 2728 , - 483 , - 1934 , - 1449 , - 1844 , - 303 , - 2458 , - 2677 , - 960 , - 123 , - 166 , - 1089 , - 76 , - 2759 , - 690 , - 2317 , - 2008 , - 2579 , - 1214 , - 729 , - 1124 , - 2399 , - 1738 , - 1957 , - 240 , - 2219 , - 2262 , - 369 , - 2172 , - 2039 , - 2786 , - 1597 , - 1288 , - 1859 , - 494 , - 9 , - 404 , - 1679 , - 1018 , - 1237 , - 2336 , - 1499 , - 1542 , - 2465 , - 1452 , - 1319 , - 2066 , - 877 , - 568 , - 1139 , - 2590 , - 2105 , - 2500 , - 959 , - 298 , - 517 , - 1616 , - 779 , - 822 , - 1745 , - 732 , - 599 , - 1346 , - 157 , - 2664 , - 419 , - 1870 , - 1385 , - 1780 , - 239 , - 2394 , - 2613 , - 896 , - 59 , - 102 , - 1025 , - 12 , - 2695 , - 626 , - 2253 , - 1944 , - 2515 , - 1150 , - 665 , - 1060 , - 2335 , - 1674 , - 1893 , - 176 , - 2155 , - 2198 , - 305 , - 2108 , - 1975 , - 2722 , - 1533 , - 1224 , - 1795 , - 430 , - 2761 , - 340 , - 1615 , - 954 , - 1173 , - 2272 , - 1435 , - 1478 , - 2401 , - 1388 , - 1255 , - 2002 , - 813 , - 504 , - 1075 , - 2526 , - 2041 , - 2436 , - 895 , - 234 , - 453 , - 1552 , - 715 , - 758 , - 1681 , - 668 , - 535 , - 1282 , - 93 , - 2600 , - 355 , - 1806 , - 1321 , - 1716 , - 175 , - 2330 , - 2549 , - 832 , - 2811 , - 38 , - 961 , - 2764 , - 2631 , - 562 , - 2189 , - 1880 , - 2451 , - 1086 , - 601 , - 996 , - 2271 , - 1610 , - 1829 , - 112 , - 2091 , - 2134 , - 241 , - 2044 , - 1911 , - 2658 , - 1469 , - 1160 , - 1731 , - 366 , - 2697 , - 276 , - 1551 , - 890 , - 1109 , - 2208 , - 1371 , - 1414 , - 2337 , - 1324 , - 1191 , - 1938 , - 749 , - 440 , - 1011 , - 2462 , - 1977 , - 2372 , - 831 , - 170 , - 389 , - 1488 , - 651 , - 694 , - 1617 , - 604 , - 471 , - 1218 , - 29 , - 2536 , - 291 , - 1742 , - 1257 , - 1652 , - 111 , - 2266 , - 2485 , - 768 , - 2747 , - 2790 , - 897 , - 2700 , - 2567 , - 498 , - 2125 , - 1816 , - 2387 , - 1022 , - 537 , - 932 , - 2207 , - 1546 , - 1765 , - 48 , - 2027 , - 2070 , - 177 , - 1980 , - 1847 , - 2594 , - 1405 , - 1096 , - 1667 , - 302 , - 2633 , - 212 , - 1487 , - 826 , - 1045 , - 2144 , - 1307 , - 1350 , - 2273 , - 1260 , - 1127 , - 1874 , - 685 , - 376 , - 947 , - 2398 , - 1913 , - 2308 , - 767 , - 106 , - 325 , - 1424 , - 587 , - 630 , - 1553 , - 540 , - 407 , - 1154 , - 2781 , - 2472 , - 227 , - 1678 , - 1193 , - 1588 , - 47 , - 2202 , - 2421 , - 704 , - 2683 , - 2726 , - 833 , - 2636 , - 2503 , - 434 , - 2061 , - 1752 , - 2323 , - 958 , - 473 , - 868 , - 2143 , - 1482 , - 1701 , - 2800 , - 1963 , - 2006 , - 113 , - 1916 , - 1783 , - 2530 , - 1341 , - 1032 , - 1603 , - 238 , - 2569 , - 148 , - 1423 , - 762 , - 981 , - 2080 , - 1243 , - 1286 , - 2209 , - 1196 , - 1063 , - 1810 , - 621 , - 312 , - 883 , - 2334 , - 1849 , - 2244 , - 703 , - 42 , - 261 , - 1360 , - 523 , - 566 , - 1489 , - 476 , - 343 , - 1090 , - 2717 , - 2408 , - 163 , - 1614 , - 1129 , - 1524 , - 2799 , - 2138 , - 2357 , - 640 , - 2619 , - 2662 , - 769 , - 2572 , - 2439 , - 370 , - 1997 , - 1688 , - 2259 , - 894 , - 409 , - 804 , - 2079 , - 1418 , - 1637 , - 2736 , - 1899 , - 1942 , - 49 , - 1852 , - 1719 , - 2466 , - 1277 , - 968 , - 1539 , - 174 , - 2505 , - 84 , - 1359 , - 698 , - 917 , - 2016 , - 1179 , - 1222 , - 2145 , - 1132 , - 999 , - 1746 , - 557 , - 248 , - 819 , - 2270 , - 1785 , - 2180 , - 639 , - 2794 , - 197 , - 1296 , - 459 , - 502 , - 1425 , - 412 , - 279 , - 1026 , - 2653 , - 2344 , - 99 , - 1550 , - 1065 , - 1460 , - 2735 , - 2074 , - 2293 , - 576 , - 2555 , - 2598 , - 705 , - 2508 , - 2375 , - 306 , - 1933 , - 1624 , - 2195 , - 830 , - 345 , - 740 , - 2015 , - 1354 , - 1573 , - 2672 , - 1835 , - 1878 , - 2801 , - 1788 , - 1655 , - 2402 , - 1213 , - 904 , - 1475 , - 110 , - 2441 , - 20 , - 1295 , - 634 , - 853 , - 1952 , - 1115 , - 1158 , - 2081 , - 1068 , - 935 , - 1682 , - 493 , - 184 , - 755 , - 2206 , - 1721 , - 2116 , - 575 , - 2730 , - 133 , - 1232 , - 395 , - 438 , - 1361 , - 348 , - 215 , - 962 , - 2589 , - 2280 , - 35 , - 1486 , - 1001 , - 1396 , - 2671 , - 2010 , - 2229 , - 512 , - 2491 , - 2534 , - 641 , - 2444 , - 2311 , - 242 , - 1869 , - 1560 , - 2131 , - 766 , - 281 , - 676 , - 1951 , - 1290 , - 1509 , - 2608 , - 1771 , - 1814 , - 2737 , - 1724 , - 1591 , - 2338 , - 1149 , - 840 , - 1411 , - 46 , - 2377 , - 2772 , - 1231 , - 570 , - 789 , - 1888 , - 1051 , - 1094 , - 2017 , - 1004 , - 871 , - 1618 , - 429 , - 120 , - 691 , - 2142 , - 1657 , - 2052 , - 511 , - 2666 , - 69 , - 1168 , - 331 , - 374 , - 1297 , - 284 , - 151 , - 898 , - 2525 , - 2216 , - 2787 , - 1422 , - 937 , - 1332 , - 2607 , - 1946 , - 2165 , - 448 , - 2427 , - 2470 , - 577 , - 2380 , - 2247 , - 178 , - 1805 , - 1496 , - 2067 , - 702 , - 217 , - 612 , - 1887 , - 1226 , - 1445 , - 2544 , - 1707 , - 1750 , - 2673 , - 1660 , - 1527 , - 2274 , - 1085 , - 776 , - 1347 , - 2798 , - 2313 , - 2708 , - 1167 , - 506 , - 725 , - 1824 , - 987 , - 1030 , - 1953 , - 940 , - 807 , - 1554 , - 365 , - 56 , - 627 , - 2078 , - 1593 , - 1988 , - 447 , - 2602 , - 5 , - 1104 , - 267 , - 310 , - 1233 , - 220 , - 87 , - 834 , - 2461 , - 2152 , - 2723 , - 1358 , - 873 , - 1268 , - 2543 , - 1882 , - 2101 , - 384 , - 2363 , - 2406 , - 513 , - 2316 , - 2183 , - 114 , - 1741 , - 1432 , - 2003 , - 638 , - 153 , - 548 , - 1823 , - 1162 , - 1381 , - 2480 , - 1643 , - 1686 , - 2609 , - 1596 , - 1463 , - 2210 , - 1021 , - 712 , - 1283 , - 2734 , - 2249 , - 2644 , - 1103 , - 442 , - 661 , - 1760 , - 923 , - 966 , - 1889 , - 876 , - 743 , - 1490 , - 301 , - 2808 , - 563 , - 2014 , - 1529 , - 1924 , - 383 , - 2538 , - 2757 , - 1040 , - 203 , - 246 , - 1169 , - 156 , - 23 , - 770 , - 2397 , - 2088 , - 2659 , - 1294 , - 809 , - 1204 , - 2479 , - 1818 , - 2037 , - 320 , - 2299 , - 2342 , - 449 , - 2252 , - 2119 , - 50 , - 1677 , - 1368 , - 1939 , - 574 , - 89 , - 484 , - 1759 , - 1098 , - 1317 , - 2416 , - 1579 , - 1622 , - 2545 , - 1532 , - 1399 , - 2146 , - 957 , - 648 , - 1219 , - 2670 , - 2185 , - 2580 , - 1039 , - 378 , - 597 , - 1696 , - 859 , - 902 , - 1825 , - 812 , - 679 , - 1426 , - 237 , - 2744 , - 499 , - 1950 , - 1465 , - 1860 , - 319 , - 2474 , - 2693 , - 976 , - 139 , - 182 , - 1105 , - 92 , - 2775 , - 706 , - 2333 , - 2024 , - 2595 , - 1230 , - 745 , - 1140 , - 2415 , - 1754 , - 1973 , - 256 , - 2235 , - 2278 , - 385 , - 2188 , - 2055 , - 2802 , - 1613 , - 1304 , - 1875 , - 510 , - 25 , - 420 , - 1695 , - 1034 , - 1253 , - 2352 , - 1515 , - 1558 , - 2481 , - 1468 , - 1335 , - 2082 , - 893 , - 584 , - 1155 , - 2606 , - 2121 , - 2516 , - 975 , - 314 , - 533 , - 1632 , - 795 , - 838 , - 1761 , - 748 , - 615 , - 1362 , - 173 , - 2680 , - 435 , - 1886 , - 1401 , - 1796 , - 255 , - 2410 , - 2629 , - 912 , - 75 , - 118 , - 1041 , - 28 , - 2711 , - 642 , - 2269 , - 1960 , - 2531 , - 1166 , - 681 , - 1076 , - 2351 , - 1690 , - 1909 , - 192 , - 2171 , - 2214 , - 321 , - 2124 , - 1991 , - 2738 , - 1549 , - 1240 , - 1811 , - 446 , - 2777 , - 356 , - 1631 , - 970 , - 1189 , - 2288 , - 1451 , - 1494 , - 2417 , - 1404 , - 1271 , - 2018 , - 829 , - 520 , - 1091 , - 2542 , - 2057 , - 2452 , - 911 , - 250 , - 469 , - 1568 , - 731 , - 774 , - 1697 , - 684 , - 551 , - 1298 , - 109 , - 2616 , - 371 , - 1822 , - 1337 , - 1732 , - 191 , - 2346 , - 2565 , - 848 , - 11 , - 54 , - 977 , - 2780 , - 2647 , - 578 , - 2205 , - 1896 , - 2467 , - 1102 , - 617 , - 1012 , - 2287 , - 1626 , - 1845 , - 128 , - 2107 , - 2150 , - 257 , - 2060 , - 1927 , - 2674 , - 1485 , - 1176 , - 1747 , - 382 , - 2713 , - 292 , - 1567 , - 906 , - 1125 , - 2224 , - 1387 , - 1430 , - 2353 , - 1340 , - 1207 , - 1954 , - 765 , - 456 , - 1027 , - 2478 , - 1993 , - 2388 , - 847 , - 186 , - 405 , - 1504 , - 667 , - 710 , - 1633 , - 620 , - 487 , - 1234 , - 45 , - 2552 , - 307 , - 1758 , - 1273 , - 1668 , - 127 , - 2282 , - 2501 , - 784 , - 2763 , - 2806 , - 913 , - 2716 , - 2583 , - 514 , - 2141 , - 1832 , - 2403 , - 1038 , - 553 , - 948 , - 2223 , - 1562 , - 1781 , - 64 , - 2043 , - 2086 , - 193 , - 1996 , - 1863 , - 2610 , - 1421 , - 1112 , - 1683 , - 318 , - 2649 , - 228 , - 1503 , - 842 , - 1061 , - 2160 , - 1323 , - 1366 , - 2289 , - 1276 , - 1143 , - 1890 , - 701 , - 392 , - 963 , - 2414 , - 1929 , - 2324 , - 783 , - 122 , - 341 , - 1440 , - 603 , - 646 , - 1569 , - 556 , - 423 , - 1170 , - 2797 , - 2488 , - 243 , - 1694 , - 1209 , - 1604 , - 63 , - 2218 , - 2437 , - 720 , - 2699 , - 2742 , - 849 , - 2652 , - 2519 , - 450 , - 2077 , - 1768 , - 2339 , - 974 , - 489 , - 884 , - 2159 , - 1498 , - 1717 , - 0 , - 89 , - 58 , - 2787 , - 2516 , - 2125 , - 1614 , - 983 , - 232 , - 2241 , - 1250 , - 139 , - 1788 , - 437 , - 1846 , - 255 , - 1424 , - 2473 , - 522 , - 1331 , - 2020 , - 2589 , - 158 , - 487 , - 696 , - 785 , - 754 , - 603 , - 332 , - 2821 , - 2310 , - 1679 , - 928 , - 57 , - 1946 , - 835 , - 2484 , - 1133 , - 2542 , - 951 , - 2120 , - 289 , - 1218 , - 2027 , - 2716 , - 405 , - 854 , - 1183 , - 1392 , - 1481 , - 1450 , - 1299 , - 1028 , - 637 , - 126 , - 2375 , - 1624 , - 753 , - 2642 , - 1531 , - 300 , - 1829 , - 358 , - 1647 , - 2816 , - 985 , - 1914 , - 2723 , - 532 , - 1101 , - 1550 , - 1879 , - 2088 , - 2177 , - 2146 , - 1995 , - 1724 , - 1333 , - 822 , - 191 , - 2320 , - 1449 , - 458 , - 2227 , - 996 , - 2525 , - 1054 , - 2343 , - 632 , - 1681 , - 2610 , - 539 , - 1228 , - 1797 , - 2246 , - 2575 , - 2784 , - 2873 , - 2842 , - 2691 , - 2420 , - 2029 , - 1518 , - 887 , - 136 , - 2145 , - 1154 , - 43 , - 1692 , - 341 , - 1750 , - 159 , - 1328 , - 2377 , - 426 , - 1235 , - 1924 , - 2493 , - 62 , - 391 , - 600 , - 689 , - 658 , - 507 , - 236 , - 2725 , - 2214 , - 1583 , - 832 , - 2841 , - 1850 , - 739 , - 2388 , - 1037 , - 2446 , - 855 , - 2024 , - 193 , - 1122 , - 1931 , - 2620 , - 309 , - 758 , - 1087 , - 1296 , - 1385 , - 1354 , - 1203 , - 932 , - 541 , - 30 , - 2279 , - 1528 , - 657 , - 2546 , - 1435 , - 204 , - 1733 , - 262 , - 1551 , - 2720 , - 889 , - 1818 , - 2627 , - 436 , - 1005 , - 1454 , - 1783 , - 1992 , - 2081 , - 2050 , - 1899 , - 1628 , - 1237 , - 726 , - 95 , - 2224 , - 1353 , - 362 , - 2131 , - 900 , - 2429 , - 958 , - 2247 , - 536 , - 1585 , - 2514 , - 443 , - 1132 , - 1701 , - 2150 , - 2479 , - 2688 , - 2777 , - 2746 , - 2595 , - 2324 , - 1933 , - 1422 , - 791 , - 40 , - 2049 , - 1058 , - 2827 , - 1596 , - 245 , - 1654 , - 63 , - 1232 , - 2281 , - 330 , - 1139 , - 1828 , - 2397 , - 2846 , - 295 , - 504 , - 593 , - 562 , - 411 , - 140 , - 2629 , - 2118 , - 1487 , - 736 , - 2745 , - 1754 , - 643 , - 2292 , - 941 , - 2350 , - 759 , - 1928 , - 97 , - 1026 , - 1835 , - 2524 , - 213 , - 662 , - 991 , - 1200 , - 1289 , - 1258 , - 1107 , - 836 , - 445 , - 2814 , - 2183 , - 1432 , - 561 , - 2450 , - 1339 , - 108 , - 1637 , - 166 , - 1455 , - 2624 , - 793 , - 1722 , - 2531 , - 340 , - 909 , - 1358 , - 1687 , - 1896 , - 1985 , - 1954 , - 1803 , - 1532 , - 1141 , - 630 , - 2879 , - 2128 , - 1257 , - 266 , - 2035 , - 804 , - 2333 , - 862 , - 2151 , - 440 , - 1489 , - 2418 , - 347 , - 1036 , - 1605 , - 2054 , - 2383 , - 2592 , - 2681 , - 2650 , - 2499 , - 2228 , - 1837 , - 1326 , - 695 , - 2824 , - 1953 , - 962 , - 2731 , - 1500 , - 149 , - 1558 , - 2847 , - 1136 , - 2185 , - 234 , - 1043 , - 1732 , - 2301 , - 2750 , - 199 , - 408 , - 497 , - 466 , - 315 , - 44 , - 2533 , - 2022 , - 1391 , - 640 , - 2649 , - 1658 , - 547 , - 2196 , - 845 , - 2254 , - 663 , - 1832 , - 1 , - 930 , - 1739 , - 2428 , - 117 , - 566 , - 895 , - 1104 , - 1193 , - 1162 , - 1011 , - 740 , - 349 , - 2718 , - 2087 , - 1336 , - 465 , - 2354 , - 1243 , - 12 , - 1541 , - 70 , - 1359 , - 2528 , - 697 , - 1626 , - 2435 , - 244 , - 813 , - 1262 , - 1591 , - 1800 , - 1889 , - 1858 , - 1707 , - 1436 , - 1045 , - 534 , - 2783 , - 2032 , - 1161 , - 170 , - 1939 , - 708 , - 2237 , - 766 , - 2055 , - 344 , - 1393 , - 2322 , - 251 , - 940 , - 1509 , - 1958 , - 2287 , - 2496 , - 2585 , - 2554 , - 2403 , - 2132 , - 1741 , - 1230 , - 599 , - 2728 , - 1857 , - 866 , - 2635 , - 1404 , - 53 , - 1462 , - 2751 , - 1040 , - 2089 , - 138 , - 947 , - 1636 , - 2205 , - 2654 , - 103 , - 312 , - 401 , - 370 , - 219 , - 2828 , - 2437 , - 1926 , - 1295 , - 544 , - 2553 , - 1562 , - 451 , - 2100 , - 749 , - 2158 , - 567 , - 1736 , - 2785 , - 834 , - 1643 , - 2332 , - 21 , - 470 , - 799 , - 1008 , - 1097 , - 1066 , - 915 , - 644 , - 253 , - 2622 , - 1991 , - 1240 , - 369 , - 2258 , - 1147 , - 2796 , - 1445 , - 2854 , - 1263 , - 2432 , - 601 , - 1530 , - 2339 , - 148 , - 717 , - 1166 , - 1495 , - 1704 , - 1793 , - 1762 , - 1611 , - 1340 , - 949 , - 438 , - 2687 , - 1936 , - 1065 , - 74 , - 1843 , - 612 , - 2141 , - 670 , - 1959 , - 248 , - 1297 , - 2226 , - 155 , - 844 , - 1413 , - 1862 , - 2191 , - 2400 , - 2489 , - 2458 , - 2307 , - 2036 , - 1645 , - 1134 , - 503 , - 2632 , - 1761 , - 770 , - 2539 , - 1308 , - 2837 , - 1366 , - 2655 , - 944 , - 1993 , - 42 , - 851 , - 1540 , - 2109 , - 2558 , - 7 , - 216 , - 305 , - 274 , - 123 , - 2732 , - 2341 , - 1830 , - 1199 , - 448 , - 2457 , - 1466 , - 355 , - 2004 , - 653 , - 2062 , - 471 , - 1640 , - 2689 , - 738 , - 1547 , - 2236 , - 2805 , - 374 , - 703 , - 912 , - 1001 , - 970 , - 819 , - 548 , - 157 , - 2526 , - 1895 , - 1144 , - 273 , - 2162 , - 1051 , - 2700 , - 1349 , - 2758 , - 1167 , - 2336 , - 505 , - 1434 , - 2243 , - 52 , - 621 , - 1070 , - 1399 , - 1608 , - 1697 , - 1666 , - 1515 , - 1244 , - 853 , - 342 , - 2591 , - 1840 , - 969 , - 2858 , - 1747 , - 516 , - 2045 , - 574 , - 1863 , - 152 , - 1201 , - 2130 , - 59 , - 748 , - 1317 , - 1766 , - 2095 , - 2304 , - 2393 , - 2362 , - 2211 , - 1940 , - 1549 , - 1038 , - 407 , - 2536 , - 1665 , - 674 , - 2443 , - 1212 , - 2741 , - 1270 , - 2559 , - 848 , - 1897 , - 2826 , - 755 , - 1444 , - 2013 , - 2462 , - 2791 , - 120 , - 209 , - 178 , - 27 , - 2636 , - 2245 , - 1734 , - 1103 , - 352 , - 2361 , - 1370 , - 259 , - 1908 , - 557 , - 1966 , - 375 , - 1544 , - 2593 , - 642 , - 1451 , - 2140 , - 2709 , - 278 , - 607 , - 816 , - 905 , - 874 , - 723 , - 452 , - 61 , - 2430 , - 1799 , - 1048 , - 177 , - 2066 , - 955 , - 2604 , - 1253 , - 2662 , - 1071 , - 2240 , - 409 , - 1338 , - 2147 , - 2836 , - 525 , - 974 , - 1303 , - 1512 , - 1601 , - 1570 , - 1419 , - 1148 , - 757 , - 246 , - 2495 , - 1744 , - 873 , - 2762 , - 1651 , - 420 , - 1949 , - 478 , - 1767 , - 56 , - 1105 , - 2034 , - 2843 , - 652 , - 1221 , - 1670 , - 1999 , - 2208 , - 2297 , - 2266 , - 2115 , - 1844 , - 1453 , - 942 , - 311 , - 2440 , - 1569 , - 578 , - 2347 , - 1116 , - 2645 , - 1174 , - 2463 , - 752 , - 1801 , - 2730 , - 659 , - 1348 , - 1917 , - 2366 , - 2695 , - 24 , - 113 , - 82 , - 2811 , - 2540 , - 2149 , - 1638 , - 1007 , - 256 , - 2265 , - 1274 , - 163 , - 1812 , - 461 , - 1870 , - 279 , - 1448 , - 2497 , - 546 , - 1355 , - 2044 , - 2613 , - 182 , - 511 , - 720 , - 809 , - 778 , - 627 , - 356 , - 2845 , - 2334 , - 1703 , - 952 , - 81 , - 1970 , - 859 , - 2508 , - 1157 , - 2566 , - 975 , - 2144 , - 313 , - 1242 , - 2051 , - 2740 , - 429 , - 878 , - 1207 , - 1416 , - 1505 , - 1474 , - 1323 , - 1052 , - 661 , - 150 , - 2399 , - 1648 , - 777 , - 2666 , - 1555 , - 324 , - 1853 , - 382 , - 1671 , - 2840 , - 1009 , - 1938 , - 2747 , - 556 , - 1125 , - 1574 , - 1903 , - 2112 , - 2201 , - 2170 , - 2019 , - 1748 , - 1357 , - 846 , - 215 , - 2344 , - 1473 , - 482 , - 2251 , - 1020 , - 2549 , - 1078 , - 2367 , - 656 , - 1705 , - 2634 , - 563 , - 1252 , - 1821 , - 2270 , - 2599 , - 2808 , - 17 , - 2866 , - 2715 , - 2444 , - 2053 , - 1542 , - 911 , - 160 , - 2169 , - 1178 , - 67 , - 1716 , - 365 , - 1774 , - 183 , - 1352 , - 2401 , - 450 , - 1259 , - 1948 , - 2517 , - 86 , - 415 , - 624 , - 713 , - 682 , - 531 , - 260 , - 2749 , - 2238 , - 1607 , - 856 , - 2865 , - 1874 , - 763 , - 2412 , - 1061 , - 2470 , - 879 , - 2048 , - 217 , - 1146 , - 1955 , - 2644 , - 333 , - 782 , - 1111 , - 1320 , - 1409 , - 1378 , - 1227 , - 956 , - 565 , - 54 , - 2303 , - 1552 , - 681 , - 2570 , - 1459 , - 228 , - 1757 , - 286 , - 1575 , - 2744 , - 913 , - 1842 , - 2651 , - 460 , - 1029 , - 1478 , - 1807 , - 2016 , - 2105 , - 2074 , - 1923 , - 1652 , - 1261 , - 750 , - 119 , - 2248 , - 1377 , - 386 , - 2155 , - 924 , - 2453 , - 982 , - 2271 , - 560 , - 1609 , - 2538 , - 467 , - 1156 , - 1725 , - 2174 , - 2503 , - 2712 , - 2801 , - 2770 , - 2619 , - 2348 , - 1957 , - 1446 , - 815 , - 64 , - 2073 , - 1082 , - 2851 , - 1620 , - 269 , - 1678 , - 87 , - 1256 , - 2305 , - 354 , - 1163 , - 1852 , - 2421 , - 2870 , - 319 , - 528 , - 617 , - 586 , - 435 , - 164 , - 2653 , - 2142 , - 1511 , - 760 , - 2769 , - 1778 , - 667 , - 2316 , - 965 , - 2374 , - 783 , - 1952 , - 121 , - 1050 , - 1859 , - 2548 , - 237 , - 686 , - 1015 , - 1224 , - 1313 , - 1282 , - 1131 , - 860 , - 469 , - 2838 , - 2207 , - 1456 , - 585 , - 2474 , - 1363 , - 132 , - 1661 , - 190 , - 1479 , - 2648 , - 817 , - 1746 , - 2555 , - 364 , - 933 , - 1382 , - 1711 , - 1920 , - 2009 , - 1978 , - 1827 , - 1556 , - 1165 , - 654 , - 23 , - 2152 , - 1281 , - 290 , - 2059 , - 828 , - 2357 , - 886 , - 2175 , - 464 , - 1513 , - 2442 , - 371 , - 1060 , - 1629 , - 2078 , - 2407 , - 2616 , - 2705 , - 2674 , - 2523 , - 2252 , - 1861 , - 1350 , - 719 , - 2848 , - 1977 , - 986 , - 2755 , - 1524 , - 173 , - 1582 , - 2871 , - 1160 , - 2209 , - 258 , - 1067 , - 1756 , - 2325 , - 2774 , - 223 , - 432 , - 521 , - 490 , - 339 , - 68 , - 2557 , - 2046 , - 1415 , - 664 , - 2673 , - 1682 , - 571 , - 2220 , - 869 , - 2278 , - 687 , - 1856 , - 25 , - 954 , - 1763 , - 2452 , - 141 , - 590 , - 919 , - 1128 , - 1217 , - 1186 , - 1035 , - 764 , - 373 , - 2742 , - 2111 , - 1360 , - 489 , - 2378 , - 1267 , - 36 , - 1565 , - 94 , - 1383 , - 2552 , - 721 , - 1650 , - 2459 , - 268 , - 837 , - 1286 , - 1615 , - 1824 , - 1913 , - 1882 , - 1731 , - 1460 , - 1069 , - 558 , - 2807 , - 2056 , - 1185 , - 194 , - 1963 , - 732 , - 2261 , - 790 , - 2079 , - 368 , - 1417 , - 2346 , - 275 , - 964 , - 1533 , - 1982 , - 2311 , - 2520 , - 2609 , - 2578 , - 2427 , - 2156 , - 1765 , - 1254 , - 623 , - 2752 , - 1881 , - 890 , - 2659 , - 1428 , - 77 , - 1486 , - 2775 , - 1064 , - 2113 , - 162 , - 971 , - 1660 , - 2229 , - 2678 , - 127 , - 336 , - 425 , - 394 , - 243 , - 2852 , - 2461 , - 1950 , - 1319 , - 568 , - 2577 , - 1586 , - 475 , - 2124 , - 773 , - 2182 , - 591 , - 1760 , - 2809 , - 858 , - 1667 , - 2356 , - 45 , - 494 , - 823 , - 1032 , - 1121 , - 1090 , - 939 , - 668 , - 277 , - 2646 , - 2015 , - 1264 , - 393 , - 2282 , - 1171 , - 2820 , - 1469 , - 2878 , - 1287 , - 2456 , - 625 , - 1554 , - 2363 , - 172 , - 741 , - 1190 , - 1519 , - 1728 , - 1817 , - 1786 , - 1635 , - 1364 , - 973 , - 462 , - 2711 , - 1960 , - 1089 , - 98 , - 1867 , - 636 , - 2165 , - 694 , - 1983 , - 272 , - 1321 , - 2250 , - 179 , - 868 , - 1437 , - 1886 , - 2215 , - 2424 , - 2513 , - 2482 , - 2331 , - 2060 , - 1669 , - 1158 , - 527 , - 2656 , - 1785 , - 794 , - 2563 , - 1332 , - 2861 , - 1390 , - 2679 , - 968 , - 2017 , - 66 , - 875 , - 1564 , - 2133 , - 2582 , - 31 , - 240 , - 329 , - 298 , - 147 , - 2756 , - 2365 , - 1854 , - 1223 , - 472 , - 2481 , - 1490 , - 379 , - 2028 , - 677 , - 2086 , - 495 , - 1664 , - 2713 , - 762 , - 1571 , - 2260 , - 2829 , - 398 , - 727 , - 936 , - 1025 , - 994 , - 843 , - 572 , - 181 , - 2550 , - 1919 , - 1168 , - 297 , - 2186 , - 1075 , - 2724 , - 1373 , - 2782 , - 1191 , - 2360 , - 529 , - 1458 , - 2267 , - 76 , - 645 , - 1094 , - 1423 , - 1632 , - 1721 , - 1690 , - 1539 , - 1268 , - 877 , - 366 , - 2615 , - 1864 , - 993 , - 2 , - 1771 , - 540 , - 2069 , - 598 , - 1887 , - 176 , - 1225 , - 2154 , - 83 , - 772 , - 1341 , - 1790 , - 2119 , - 2328 , - 2417 , - 2386 , - 2235 , - 1964 , - 1573 , - 1062 , - 431 , - 2560 , - 1689 , - 698 , - 2467 , - 1236 , - 2765 , - 1294 , - 2583 , - 872 , - 1921 , - 2850 , - 779 , - 1468 , - 2037 , - 2486 , - 2815 , - 144 , - 233 , - 202 , - 51 , - 2660 , - 2269 , - 1758 , - 1127 , - 376 , - 2385 , - 1394 , - 283 , - 1932 , - 581 , - 1990 , - 399 , - 1568 , - 2617 , - 666 , - 1475 , - 2164 , - 2733 , - 302 , - 631 , - 840 , - 929 , - 898 , - 747 , - 476 , - 85 , - 2454 , - 1823 , - 1072 , - 201 , - 2090 , - 979 , - 2628 , - 1277 , - 2686 , - 1095 , - 2264 , - 433 , - 1362 , - 2171 , - 2860 , - 549 , - 998 , - 1327 , - 1536 , - 1625 , - 1594 , - 1443 , - 1172 , - 781 , - 270 , - 2519 , - 1768 , - 897 , - 2786 , - 1675 , - 444 , - 1973 , - 502 , - 1791 , - 80 , - 1129 , - 2058 , - 2867 , - 676 , - 1245 , - 1694 , - 2023 , - 2232 , - 2321 , - 2290 , - 2139 , - 1868 , - 1477 , - 966 , - 335 , - 2464 , - 1593 , - 602 , - 2371 , - 1140 , - 2669 , - 1198 , - 2487 , - 776 , - 1825 , - 2754 , - 683 , - 1372 , - 1941 , - 2390 , - 2719 , - 48 , - 137 , - 106 , - 2835 , - 2564 , - 2173 , - 1662 , - 1031 , - 280 , - 2289 , - 1298 , - 187 , - 1836 , - 485 , - 1894 , - 303 , - 1472 , - 2521 , - 570 , - 1379 , - 2068 , - 2637 , - 206 , - 535 , - 744 , - 833 , - 802 , - 651 , - 380 , - 2869 , - 2358 , - 1727 , - 976 , - 105 , - 1994 , - 883 , - 2532 , - 1181 , - 2590 , - 999 , - 2168 , - 337 , - 1266 , - 2075 , - 2764 , - 453 , - 902 , - 1231 , - 1440 , - 1529 , - 1498 , - 1347 , - 1076 , - 685 , - 174 , - 2423 , - 1672 , - 801 , - 2690 , - 1579 , - 348 , - 1877 , - 406 , - 1695 , - 2864 , - 1033 , - 1962 , - 2771 , - 580 , - 1149 , - 1598 , - 1927 , - 2136 , - 2225 , - 2194 , - 2043 , - 1772 , - 1381 , - 870 , - 239 , - 2368 , - 1497 , - 506 , - 2275 , - 1044 , - 2573 , - 1102 , - 2391 , - 680 , - 1729 , - 2658 , - 587 , - 1276 , - 1845 , - 2294 , - 2623 , - 2832 , - 41 , - 10 , - 2739 , - 2468 , - 2077 , - 1566 , - 935 , - 184 , - 2193 , - 1202 , - 91 , - 1740 , - 389 , - 1798 , - 207 , - 1376 , - 2425 , - 474 , - 1283 , - 1972 , - 2541 , - 110 , - 439 , - 648 , - 737 , - 706 , - 555 , - 284 , - 2773 , - 2262 , - 1631 , - 880 , - 9 , - 1898 , - 787 , - 2436 , - 1085 , - 2494 , - 903 , - 2072 , - 241 , - 1170 , - 1979 , - 2668 , - 357 , - 806 , - 1135 , - 1344 , - 1433 , - 1402 , - 1251 , - 980 , - 589 , - 78 , - 2327 , - 1576 , - 705 , - 2594 , - 1483 , - 252 , - 1781 , - 310 , - 1599 , - 2768 , - 937 , - 1866 , - 2675 , - 484 , - 1053 , - 1502 , - 1831 , - 2040 , - 2129 , - 2098 , - 1947 , - 1676 , - 1285 , - 774 , - 143 , - 2272 , - 1401 , - 410 , - 2179 , - 948 , - 2477 , - 1006 , - 2295 , - 584 , - 1633 , - 2562 , - 491 , - 1180 , - 1749 , - 2198 , - 2527 , - 2736 , - 2825 , - 2794 , - 2643 , - 2372 , - 1981 , - 1470 , - 839 , - 88 , - 2097 , - 1106 , - 2875 , - 1644 , - 293 , - 1702 , - 111 , - 1280 , - 2329 , - 378 , - 1187 , - 1876 , - 2445 , - 14 , - 343 , - 552 , - 641 , - 610 , - 459 , - 188 , - 2677 , - 2166 , - 1535 , - 784 , - 2793 , - 1802 , - 691 , - 2340 , - 989 , - 2398 , - 807 , - 1976 , - 145 , - 1074 , - 1883 , - 2572 , - 261 , - 710 , - 1039 , - 1248 , - 1337 , - 1306 , - 1155 , - 884 , - 493 , - 2862 , - 2231 , - 1480 , - 609 , - 2498 , - 1387 , - 156 , - 1685 , - 214 , - 1503 , - 2672 , - 841 , - 1770 , - 2579 , - 388 , - 957 , - 1406 , - 1735 , - 1944 , - 2033 , - 2002 , - 1851 , - 1580 , - 1189 , - 678 , - 47 , - 2176 , - 1305 , - 314 , - 2083 , - 852 , - 2381 , - 910 , - 2199 , - 488 , - 1537 , - 2466 , - 395 , - 1084 , - 1653 , - 2102 , - 2431 , - 2640 , - 2729 , - 2698 , - 2547 , - 2276 , - 1885 , - 1374 , - 743 , - 2872 , - 2001 , - 1010 , - 2779 , - 1548 , - 197 , - 1606 , - 15 , - 1184 , - 2233 , - 282 , - 1091 , - 1780 , - 2349 , - 2798 , - 247 , - 456 , - 545 , - 514 , - 363 , - 92 , - 2581 , - 2070 , - 1439 , - 688 , - 2697 , - 1706 , - 595 , - 2244 , - 893 , - 2302 , - 711 , - 1880 , - 49 , - 978 , - 1787 , - 2476 , - 165 , - 614 , - 943 , - 1152 , - 1241 , - 1210 , - 1059 , - 788 , - 397 , - 2766 , - 2135 , - 1384 , - 513 , - 2402 , - 1291 , - 60 , - 1589 , - 118 , - 1407 , - 2576 , - 745 , - 1674 , - 2483 , - 292 , - 861 , - 1310 , - 1639 , - 1848 , - 1937 , - 1906 , - 1755 , - 1484 , - 1093 , - 582 , - 2831 , - 2080 , - 1209 , - 218 , - 1987 , - 756 , - 2285 , - 814 , - 2103 , - 392 , - 1441 , - 2370 , - 299 , - 988 , - 1557 , - 2006 , - 2335 , - 2544 , - 2633 , - 2602 , - 2451 , - 2180 , - 1789 , - 1278 , - 647 , - 2776 , - 1905 , - 914 , - 2683 , - 1452 , - 101 , - 1510 , - 2799 , - 1088 , - 2137 , - 186 , - 995 , - 1684 , - 2253 , - 2702 , - 151 , - 360 , - 449 , - 418 , - 267 , - 2876 , - 2485 , - 1974 , - 1343 , - 592 , - 2601 , - 1610 , - 499 , - 2148 , - 797 , - 2206 , - 615 , - 1784 , - 2833 , - 882 , - 1691 , - 2380 , - 69 , - 518 , - 847 , - 1056 , - 1145 , - 1114 , - 963 , - 692 , - 301 , - 2670 , - 2039 , - 1288 , - 417 , - 2306 , - 1195 , - 2844 , - 1493 , - 22 , - 1311 , - 2480 , - 649 , - 1578 , - 2387 , - 196 , - 765 , - 1214 , - 1543 , - 1752 , - 1841 , - 1810 , - 1659 , - 1388 , - 997 , - 486 , - 2735 , - 1984 , - 1113 , - 122 , - 1891 , - 660 , - 2189 , - 718 , - 2007 , - 296 , - 1345 , - 2274 , - 203 , - 892 , - 1461 , - 1910 , - 2239 , - 2448 , - 2537 , - 2506 , - 2355 , - 2084 , - 1693 , - 1182 , - 551 , - 2680 , - 1809 , - 818 , - 2587 , - 1356 , - 5 , - 1414 , - 2703 , - 992 , - 2041 , - 90 , - 899 , - 1588 , - 2157 , - 2606 , - 55 , - 264 , - 353 , - 322 , - 171 , - 2780 , - 2389 , - 1878 , - 1247 , - 496 , - 2505 , - 1514 , - 403 , - 2052 , - 701 , - 2110 , - 519 , - 1688 , - 2737 , - 786 , - 1595 , - 2284 , - 2853 , - 422 , - 751 , - 960 , - 1049 , - 1018 , - 867 , - 596 , - 205 , - 2574 , - 1943 , - 1192 , - 321 , - 2210 , - 1099 , - 2748 , - 1397 , - 2806 , - 1215 , - 2384 , - 553 , - 1482 , - 2291 , - 100 , - 669 , - 1118 , - 1447 , - 1656 , - 1745 , - 1714 , - 1563 , - 1292 , - 901 , - 390 , - 2639 , - 1888 , - 1017 , - 26 , - 1795 , - 564 , - 2093 , - 622 , - 1911 , - 200 , - 1249 , - 2178 , - 107 , - 796 , - 1365 , - 1814 , - 2143 , - 2352 , - 2441 , - 2410 , - 2259 , - 1988 , - 1597 , - 1086 , - 455 , - 2584 , - 1713 , - 722 , - 2491 , - 1260 , - 2789 , - 1318 , - 2607 , - 896 , - 1945 , - 2874 , - 803 , - 1492 , - 2061 , - 2510 , - 2839 , - 168 , - 257 , - 226 , - 75 , - 2684 , - 2293 , - 1782 , - 1151 , - 400 , - 2409 , - 1418 , - 307 , - 1956 , - 605 , - 2014 , - 423 , - 1592 , - 2641 , - 690 , - 1499 , - 2188 , - 2757 , - 326 , - 655 , - 864 , - 953 , - 922 , - 771 , - 500 , - 109 , - 2478 , - 1847 , - 1096 , - 225 , - 2114 , - 1003 , - 2652 , - 1301 , - 2710 , - 1119 , - 2288 , - 457 , - 1386 , - 2195 , - 4 , - 573 , - 1022 , - 1351 , - 1560 , - 1649 , - 1618 , - 1467 , - 1196 , - 805 , - 294 , - 2543 , - 1792 , - 921 , - 2810 , - 1699 , - 468 , - 1997 , - 526 , - 1815 , - 104 , - 1153 , - 2082 , - 11 , - 700 , - 1269 , - 1718 , - 2047 , - 2256 , - 2345 , - 2314 , - 2163 , - 1892 , - 1501 , - 990 , - 359 , - 2488 , - 1617 , - 626 , - 2395 , - 1164 , - 2693 , - 1222 , - 2511 , - 800 , - 1849 , - 2778 , - 707 , - 1396 , - 1965 , - 2414 , - 2743 , - 72 , - 161 , - 130 , - 2859 , - 2588 , - 2197 , - 1686 , - 1055 , - 304 , - 2313 , - 1322 , - 211 , - 1860 , - 509 , - 1918 , - 327 , - 1496 , - 2545 , - 594 , - 1403 , - 2092 , - 2661 , - 230 , - 559 , - 768 , - 857 , - 826 , - 675 , - 404 , - 13 , - 2382 , - 1751 , - 1000 , - 129 , - 2018 , - 907 , - 2556 , - 1205 , - 2614 , - 1023 , - 2192 , - 361 , - 1290 , - 2099 , - 2788 , - 477 , - 926 , - 1255 , - 1464 , - 1553 , - 1522 , - 1371 , - 1100 , - 709 , - 198 , - 2447 , - 1696 , - 825 , - 2714 , - 1603 , - 372 , - 1901 , - 430 , - 1719 , - 8 , - 1057 , - 1986 , - 2795 , - 604 , - 1173 , - 1622 , - 1951 , - 2160 , - 2249 , - 2218 , - 2067 , - 1796 , - 1405 , - 894 , - 263 , - 2392 , - 1521 , - 530 , - 2299 , - 1068 , - 2597 , - 1126 , - 2415 , - 704 , - 1753 , - 2682 , - 611 , - 1300 , - 1869 , - 2318 , - 2647 , - 2856 , - 65 , - 34 , - 2763 , - 2492 , - 2101 , - 1590 , - 959 , - 208 , - 2217 , - 1226 , - 115 , - 1764 , - 413 , - 1822 , - 231 , - 1400 , - 2449 , - 498 , - 1307 , - 1996 , - 2565 , - 134 , - 463 , - 672 , - 761 , - 730 , - 579 , - 308 , - 2797 , - 2286 , - 1655 , - 904 , - 33 , - 1922 , - 811 , - 2460 , - 1109 , - 2518 , - 927 , - 2096 , - 265 , - 1194 , - 2003 , - 2692 , - 381 , - 830 , - 1159 , - 1368 , - 1457 , - 1426 , - 1275 , - 1004 , - 613 , - 102 , - 2351 , - 1600 , - 729 , - 2618 , - 1507 , - 276 , - 1805 , - 334 , - 1623 , - 2792 , - 961 , - 1890 , - 2699 , - 508 , - 1077 , - 1526 , - 1855 , - 2064 , - 2153 , - 2122 , - 1971 , - 1700 , - 1309 , - 798 , - 167 , - 2296 , - 1425 , - 434 , - 2203 , - 972 , - 2501 , - 1030 , - 2319 , - 608 , - 1657 , - 2586 , - 515 , - 1204 , - 1773 , - 2222 , - 2551 , - 2760 , - 2849 , - 2818 , - 2667 , - 2396 , - 2005 , - 1494 , - 863 , - 112 , - 2121 , - 1130 , - 19 , - 1668 , - 317 , - 1726 , - 135 , - 1304 , - 2353 , - 402 , - 1211 , - 1900 , - 2469 , - 38 , - 367 , - 576 , - 665 , - 634 , - 483 , - 212 , - 2701 , - 2190 , - 1559 , - 808 , - 2817 , - 1826 , - 715 , - 2364 , - 1013 , - 2422 , - 831 , - 2000 , - 169 , - 1098 , - 1907 , - 2596 , - 285 , - 734 , - 1063 , - 1272 , - 1361 , - 1330 , - 1179 , - 908 , - 517 , - 6 , - 2255 , - 1504 , - 633 , - 2522 , - 1411 , - 180 , - 1709 , - 238 , - 1527 , - 2696 , - 865 , - 1794 , - 2603 , - 412 , - 981 , - 1430 , - 1759 , - 1968 , - 2057 , - 2026 , - 1875 , - 1604 , - 1213 , - 702 , - 71 , - 2200 , - 1329 , - 338 , - 2107 , - 876 , - 2405 , - 934 , - 2223 , - 512 , - 1561 , - 2490 , - 419 , - 1108 , - 1677 , - 2126 , - 2455 , - 2664 , - 2753 , - 2722 , - 2571 , - 2300 , - 1909 , - 1398 , - 767 , - 16 , - 2025 , - 1034 , - 2803 , - 1572 , - 221 , - 1630 , - 39 , - 1208 , - 2257 , - 306 , - 1115 , - 1804 , - 2373 , - 2822 , - 271 , - 480 , - 569 , - 538 , - 387 , - 116 , - 2605 , - 2094 , - 1463 , - 712 , - 2721 , - 1730 , - 619 , - 2268 , - 917 , - 2326 , - 735 , - 1904 , - 73 , - 1002 , - 1811 , - 2500 , - 189 , - 638 , - 967 , - 1176 , - 1265 , - 1234 , - 1083 , - 812 , - 421 , - 2790 , - 2159 , - 1408 , - 537 , - 2426 , - 1315 , - 84 , - 1613 , - 142 , - 1431 , - 2600 , - 769 , - 1698 , - 2507 , - 316 , - 885 , - 1334 , - 1663 , - 1872 , - 1961 , - 1930 , - 1779 , - 1508 , - 1117 , - 606 , - 2855 , - 2104 , - 1233 , - 242 , - 2011 , - 780 , - 2309 , - 838 , - 2127 , - 416 , - 1465 , - 2394 , - 323 , - 1012 , - 1581 , - 2030 , - 2359 , - 2568 , - 2657 , - 2626 , - 2475 , - 2204 , - 1813 , - 1302 , - 671 , - 2800 , - 1929 , - 938 , - 2707 , - 1476 , - 125 , - 1534 , - 2823 , - 1112 , - 2161 , - 210 , - 1019 , - 1708 , - 2277 , - 2726 , - 175 , - 384 , - 473 , - 442 , - 291 , - 20 , - 2509 , - 1998 , - 1367 , - 616 , - 2625 , - 1634 , - 523 , - 2172 , - 821 , - 2230 , - 639 , - 1808 , - 2857 , - 906 , - 1715 , - 2404 , - 93 , - 542 , - 871 , - 1080 , - 1169 , - 1138 , - 987 , - 716 , - 325 , - 2694 , - 2063 , - 1312 , - 441 , - 2330 , - 1219 , - 2868 , - 1517 , - 46 , - 1335 , - 2504 , - 673 , - 1602 , - 2411 , - 220 , - 789 , - 1238 , - 1567 , - 1776 , - 1865 , - 1834 , - 1683 , - 1412 , - 1021 , - 510 , - 2759 , - 2008 , - 1137 , - 146 , - 1915 , - 684 , - 2213 , - 742 , - 2031 , - 320 , - 1369 , - 2298 , - 227 , - 916 , - 1485 , - 1934 , - 2263 , - 2472 , - 2561 , - 2530 , - 2379 , - 2108 , - 1717 , - 1206 , - 575 , - 2704 , - 1833 , - 842 , - 2611 , - 1380 , - 29 , - 1438 , - 2727 , - 1016 , - 2065 , - 114 , - 923 , - 1612 , - 2181 , - 2630 , - 79 , - 288 , - 377 , - 346 , - 195 , - 2804 , - 2413 , - 1902 , - 1271 , - 520 , - 2529 , - 1538 , - 427 , - 2076 , - 725 , - 2134 , - 543 , - 1712 , - 2761 , - 810 , - 1619 , - 2308 , - 2877 , - 446 , - 775 , - 984 , - 1073 , - 1042 , - 891 , - 620 , - 229 , - 2598 , - 1967 , - 1216 , - 345 , - 2234 , - 1123 , - 2772 , - 1421 , - 2830 , - 1239 , - 2408 , - 577 , - 1506 , - 2315 , - 124 , - 693 , - 1142 , - 1471 , - 1680 , - 1769 , - 1738 , - 1587 , - 1316 , - 925 , - 414 , - 2663 , - 1912 , - 1041 , - 50 , - 1819 , - 588 , - 2117 , - 646 , - 1935 , - 224 , - 1273 , - 2202 , - 131 , - 820 , - 1389 , - 1838 , - 2167 , - 2376 , - 2465 , - 2434 , - 2283 , - 2012 , - 1621 , - 1110 , - 479 , - 2608 , - 1737 , - 746 , - 2515 , - 1284 , - 2813 , - 1342 , - 2631 , - 920 , - 1969 , - 18 , - 827 , - 1516 , - 2085 , - 2534 , - 2863 , - 192 , - 281 , - 250 , - 99 , - 2708 , - 2317 , - 1806 , - 1175 , - 424 , - 2433 , - 1442 , - 331 , - 1980 , - 629 , - 2038 , - 447 , - 1616 , - 2665 , - 714 , - 1523 , - 2212 , - 2781 , - 350 , - 679 , - 888 , - 977 , - 946 , - 795 , - 524 , - 133 , - 2502 , - 1871 , - 1120 , - 249 , - 2138 , - 1027 , - 2676 , - 1325 , - 2734 , - 1143 , - 2312 , - 481 , - 1410 , - 2219 , - 28 , - 597 , - 1046 , - 1375 , - 1584 , - 1673 , - 1642 , - 1491 , - 1220 , - 829 , - 318 , - 2567 , - 1816 , - 945 , - 2834 , - 1723 , - 492 , - 2021 , - 550 , - 1839 , - 128 , - 1177 , - 2106 , - 35 , - 724 , - 1293 , - 1742 , - 2071 , - 2280 , - 2369 , - 2338 , - 2187 , - 1916 , - 1525 , - 1014 , - 383 , - 2512 , - 1641 , - 650 , - 2419 , - 1188 , - 2717 , - 1246 , - 2535 , - 824 , - 1873 , - 2802 , - 731 , - 1420 , - 1989 , - 2438 , - 2767 , - 96 , - 185 , - 154 , - 3 , - 2612 , - 2221 , - 1710 , - 1079 , - 328 , - 2337 , - 1346 , - 235 , - 1884 , - 533 , - 1942 , - 351 , - 1520 , - 2569 , - 618 , - 1427 , - 2116 , - 2685 , - 254 , - 583 , - 792 , - 881 , - 850 , - 699 , - 428 , - 37 , - 2406 , - 1775 , - 1024 , - 153 , - 2042 , - 931 , - 2580 , - 1229 , - 2638 , - 1047 , - 2216 , - 385 , - 1314 , - 2123 , - 2812 , - 501 , - 950 , - 1279 , - 1488 , - 1577 , - 1546 , - 1395 , - 1124 , - 733 , - 222 , - 2471 , - 1720 , - 849 , - 2738 , - 1627 , - 396 , - 1925 , - 454 , - 1743 , - 32 , - 1081 , - 2010 , - 2819 , - 628 , - 1197 , - 1646 , - 1975 , - 2184 , - 2273 , - 2242 , - 2091 , - 1820 , - 1429 , - 918 , - 287 , - 2416 , - 1545 , - 554 , - 2323 , - 1092 , - 2621 , - 1150 , - 2439 , - 728 , - 1777 , - 2706 , - 635 , - 1324 , - 1893 , - 2342 , - 2671 , - 0 , - 2713 , - 1562 , - 963 , - 2388 , - 1421 , - 2478 , - 1143 , - 1832 , - 129 , - 450 , - 1323 , - 1276 , - 1781 , - 1366 , - 1503 , - 720 , - 489 , - 2282 , - 1683 , - 164 , - 2141 , - 254 , - 1863 , - 2552 , - 849 , - 1170 , - 2043 , - 1996 , - 2501 , - 2086 , - 2223 , - 1440 , - 1209 , - 58 , - 2403 , - 884 , - 2861 , - 974 , - 2583 , - 328 , - 1569 , - 1890 , - 2763 , - 2716 , - 277 , - 2806 , - 2943 , - 2160 , - 1929 , - 778 , - 179 , - 1604 , - 637 , - 1694 , - 359 , - 1048 , - 2289 , - 2610 , - 539 , - 492 , - 997 , - 582 , - 719 , - 2880 , - 2649 , - 1498 , - 899 , - 2324 , - 1357 , - 2414 , - 1079 , - 1768 , - 65 , - 386 , - 1259 , - 1212 , - 1717 , - 1302 , - 1439 , - 656 , - 425 , - 2218 , - 1619 , - 100 , - 2077 , - 190 , - 1799 , - 2488 , - 785 , - 1106 , - 1979 , - 1932 , - 2437 , - 2022 , - 2159 , - 1376 , - 1145 , - 2938 , - 2339 , - 820 , - 2797 , - 910 , - 2519 , - 264 , - 1505 , - 1826 , - 2699 , - 2652 , - 213 , - 2742 , - 2879 , - 2096 , - 1865 , - 714 , - 115 , - 1540 , - 573 , - 1630 , - 295 , - 984 , - 2225 , - 2546 , - 475 , - 428 , - 933 , - 518 , - 655 , - 2816 , - 2585 , - 1434 , - 835 , - 2260 , - 1293 , - 2350 , - 1015 , - 1704 , - 1 , - 322 , - 1195 , - 1148 , - 1653 , - 1238 , - 1375 , - 592 , - 361 , - 2154 , - 1555 , - 36 , - 2013 , - 126 , - 1735 , - 2424 , - 721 , - 1042 , - 1915 , - 1868 , - 2373 , - 1958 , - 2095 , - 1312 , - 1081 , - 2874 , - 2275 , - 756 , - 2733 , - 846 , - 2455 , - 200 , - 1441 , - 1762 , - 2635 , - 2588 , - 149 , - 2678 , - 2815 , - 2032 , - 1801 , - 650 , - 51 , - 1476 , - 509 , - 1566 , - 231 , - 920 , - 2161 , - 2482 , - 411 , - 364 , - 869 , - 454 , - 591 , - 2752 , - 2521 , - 1370 , - 771 , - 2196 , - 1229 , - 2286 , - 951 , - 1640 , - 2881 , - 258 , - 1131 , - 1084 , - 1589 , - 1174 , - 1311 , - 528 , - 297 , - 2090 , - 1491 , - 2916 , - 1949 , - 62 , - 1671 , - 2360 , - 657 , - 978 , - 1851 , - 1804 , - 2309 , - 1894 , - 2031 , - 1248 , - 1017 , - 2810 , - 2211 , - 692 , - 2669 , - 782 , - 2391 , - 136 , - 1377 , - 1698 , - 2571 , - 2524 , - 85 , - 2614 , - 2751 , - 1968 , - 1737 , - 586 , - 2931 , - 1412 , - 445 , - 1502 , - 167 , - 856 , - 2097 , - 2418 , - 347 , - 300 , - 805 , - 390 , - 527 , - 2688 , - 2457 , - 1306 , - 707 , - 2132 , - 1165 , - 2222 , - 887 , - 1576 , - 2817 , - 194 , - 1067 , - 1020 , - 1525 , - 1110 , - 1247 , - 464 , - 233 , - 2026 , - 1427 , - 2852 , - 1885 , - 2942 , - 1607 , - 2296 , - 593 , - 914 , - 1787 , - 1740 , - 2245 , - 1830 , - 1967 , - 1184 , - 953 , - 2746 , - 2147 , - 628 , - 2605 , - 718 , - 2327 , - 72 , - 1313 , - 1634 , - 2507 , - 2460 , - 21 , - 2550 , - 2687 , - 1904 , - 1673 , - 522 , - 2867 , - 1348 , - 381 , - 1438 , - 103 , - 792 , - 2033 , - 2354 , - 283 , - 236 , - 741 , - 326 , - 463 , - 2624 , - 2393 , - 1242 , - 643 , - 2068 , - 1101 , - 2158 , - 823 , - 1512 , - 2753 , - 130 , - 1003 , - 956 , - 1461 , - 1046 , - 1183 , - 400 , - 169 , - 1962 , - 1363 , - 2788 , - 1821 , - 2878 , - 1543 , - 2232 , - 529 , - 850 , - 1723 , - 1676 , - 2181 , - 1766 , - 1903 , - 1120 , - 889 , - 2682 , - 2083 , - 564 , - 2541 , - 654 , - 2263 , - 8 , - 1249 , - 1570 , - 2443 , - 2396 , - 2901 , - 2486 , - 2623 , - 1840 , - 1609 , - 458 , - 2803 , - 1284 , - 317 , - 1374 , - 39 , - 728 , - 1969 , - 2290 , - 219 , - 172 , - 677 , - 262 , - 399 , - 2560 , - 2329 , - 1178 , - 579 , - 2004 , - 1037 , - 2094 , - 759 , - 1448 , - 2689 , - 66 , - 939 , - 892 , - 1397 , - 982 , - 1119 , - 336 , - 105 , - 1898 , - 1299 , - 2724 , - 1757 , - 2814 , - 1479 , - 2168 , - 465 , - 786 , - 1659 , - 1612 , - 2117 , - 1702 , - 1839 , - 1056 , - 825 , - 2618 , - 2019 , - 500 , - 2477 , - 590 , - 2199 , - 2888 , - 1185 , - 1506 , - 2379 , - 2332 , - 2837 , - 2422 , - 2559 , - 1776 , - 1545 , - 394 , - 2739 , - 1220 , - 253 , - 1310 , - 2919 , - 664 , - 1905 , - 2226 , - 155 , - 108 , - 613 , - 198 , - 335 , - 2496 , - 2265 , - 1114 , - 515 , - 1940 , - 973 , - 2030 , - 695 , - 1384 , - 2625 , - 2 , - 875 , - 828 , - 1333 , - 918 , - 1055 , - 272 , - 41 , - 1834 , - 1235 , - 2660 , - 1693 , - 2750 , - 1415 , - 2104 , - 401 , - 722 , - 1595 , - 1548 , - 2053 , - 1638 , - 1775 , - 992 , - 761 , - 2554 , - 1955 , - 436 , - 2413 , - 526 , - 2135 , - 2824 , - 1121 , - 1442 , - 2315 , - 2268 , - 2773 , - 2358 , - 2495 , - 1712 , - 1481 , - 330 , - 2675 , - 1156 , - 189 , - 1246 , - 2855 , - 600 , - 1841 , - 2162 , - 91 , - 44 , - 549 , - 134 , - 271 , - 2432 , - 2201 , - 1050 , - 451 , - 1876 , - 909 , - 1966 , - 631 , - 1320 , - 2561 , - 2882 , - 811 , - 764 , - 1269 , - 854 , - 991 , - 208 , - 2921 , - 1770 , - 1171 , - 2596 , - 1629 , - 2686 , - 1351 , - 2040 , - 337 , - 658 , - 1531 , - 1484 , - 1989 , - 1574 , - 1711 , - 928 , - 697 , - 2490 , - 1891 , - 372 , - 2349 , - 462 , - 2071 , - 2760 , - 1057 , - 1378 , - 2251 , - 2204 , - 2709 , - 2294 , - 2431 , - 1648 , - 1417 , - 266 , - 2611 , - 1092 , - 125 , - 1182 , - 2791 , - 536 , - 1777 , - 2098 , - 27 , - 2924 , - 485 , - 70 , - 207 , - 2368 , - 2137 , - 986 , - 387 , - 1812 , - 845 , - 1902 , - 567 , - 1256 , - 2497 , - 2818 , - 747 , - 700 , - 1205 , - 790 , - 927 , - 144 , - 2857 , - 1706 , - 1107 , - 2532 , - 1565 , - 2622 , - 1287 , - 1976 , - 273 , - 594 , - 1467 , - 1420 , - 1925 , - 1510 , - 1647 , - 864 , - 633 , - 2426 , - 1827 , - 308 , - 2285 , - 398 , - 2007 , - 2696 , - 993 , - 1314 , - 2187 , - 2140 , - 2645 , - 2230 , - 2367 , - 1584 , - 1353 , - 202 , - 2547 , - 1028 , - 61 , - 1118 , - 2727 , - 472 , - 1713 , - 2034 , - 2907 , - 2860 , - 421 , - 6 , - 143 , - 2304 , - 2073 , - 922 , - 323 , - 1748 , - 781 , - 1838 , - 503 , - 1192 , - 2433 , - 2754 , - 683 , - 636 , - 1141 , - 726 , - 863 , - 80 , - 2793 , - 1642 , - 1043 , - 2468 , - 1501 , - 2558 , - 1223 , - 1912 , - 209 , - 530 , - 1403 , - 1356 , - 1861 , - 1446 , - 1583 , - 800 , - 569 , - 2362 , - 1763 , - 244 , - 2221 , - 334 , - 1943 , - 2632 , - 929 , - 1250 , - 2123 , - 2076 , - 2581 , - 2166 , - 2303 , - 1520 , - 1289 , - 138 , - 2483 , - 964 , - 2941 , - 1054 , - 2663 , - 408 , - 1649 , - 1970 , - 2843 , - 2796 , - 357 , - 2886 , - 79 , - 2240 , - 2009 , - 858 , - 259 , - 1684 , - 717 , - 1774 , - 439 , - 1128 , - 2369 , - 2690 , - 619 , - 572 , - 1077 , - 662 , - 799 , - 16 , - 2729 , - 1578 , - 979 , - 2404 , - 1437 , - 2494 , - 1159 , - 1848 , - 145 , - 466 , - 1339 , - 1292 , - 1797 , - 1382 , - 1519 , - 736 , - 505 , - 2298 , - 1699 , - 180 , - 2157 , - 270 , - 1879 , - 2568 , - 865 , - 1186 , - 2059 , - 2012 , - 2517 , - 2102 , - 2239 , - 1456 , - 1225 , - 74 , - 2419 , - 900 , - 2877 , - 990 , - 2599 , - 344 , - 1585 , - 1906 , - 2779 , - 2732 , - 293 , - 2822 , - 15 , - 2176 , - 1945 , - 794 , - 195 , - 1620 , - 653 , - 1710 , - 375 , - 1064 , - 2305 , - 2626 , - 555 , - 508 , - 1013 , - 598 , - 735 , - 2896 , - 2665 , - 1514 , - 915 , - 2340 , - 1373 , - 2430 , - 1095 , - 1784 , - 81 , - 402 , - 1275 , - 1228 , - 1733 , - 1318 , - 1455 , - 672 , - 441 , - 2234 , - 1635 , - 116 , - 2093 , - 206 , - 1815 , - 2504 , - 801 , - 1122 , - 1995 , - 1948 , - 2453 , - 2038 , - 2175 , - 1392 , - 1161 , - 10 , - 2355 , - 836 , - 2813 , - 926 , - 2535 , - 280 , - 1521 , - 1842 , - 2715 , - 2668 , - 229 , - 2758 , - 2895 , - 2112 , - 1881 , - 730 , - 131 , - 1556 , - 589 , - 1646 , - 311 , - 1000 , - 2241 , - 2562 , - 491 , - 444 , - 949 , - 534 , - 671 , - 2832 , - 2601 , - 1450 , - 851 , - 2276 , - 1309 , - 2366 , - 1031 , - 1720 , - 17 , - 338 , - 1211 , - 1164 , - 1669 , - 1254 , - 1391 , - 608 , - 377 , - 2170 , - 1571 , - 52 , - 2029 , - 142 , - 1751 , - 2440 , - 737 , - 1058 , - 1931 , - 1884 , - 2389 , - 1974 , - 2111 , - 1328 , - 1097 , - 2890 , - 2291 , - 772 , - 2749 , - 862 , - 2471 , - 216 , - 1457 , - 1778 , - 2651 , - 2604 , - 165 , - 2694 , - 2831 , - 2048 , - 1817 , - 666 , - 67 , - 1492 , - 525 , - 1582 , - 247 , - 936 , - 2177 , - 2498 , - 427 , - 380 , - 885 , - 470 , - 607 , - 2768 , - 2537 , - 1386 , - 787 , - 2212 , - 1245 , - 2302 , - 967 , - 1656 , - 2897 , - 274 , - 1147 , - 1100 , - 1605 , - 1190 , - 1327 , - 544 , - 313 , - 2106 , - 1507 , - 2932 , - 1965 , - 78 , - 1687 , - 2376 , - 673 , - 994 , - 1867 , - 1820 , - 2325 , - 1910 , - 2047 , - 1264 , - 1033 , - 2826 , - 2227 , - 708 , - 2685 , - 798 , - 2407 , - 152 , - 1393 , - 1714 , - 2587 , - 2540 , - 101 , - 2630 , - 2767 , - 1984 , - 1753 , - 602 , - 3 , - 1428 , - 461 , - 1518 , - 183 , - 872 , - 2113 , - 2434 , - 363 , - 316 , - 821 , - 406 , - 543 , - 2704 , - 2473 , - 1322 , - 723 , - 2148 , - 1181 , - 2238 , - 903 , - 1592 , - 2833 , - 210 , - 1083 , - 1036 , - 1541 , - 1126 , - 1263 , - 480 , - 249 , - 2042 , - 1443 , - 2868 , - 1901 , - 14 , - 1623 , - 2312 , - 609 , - 930 , - 1803 , - 1756 , - 2261 , - 1846 , - 1983 , - 1200 , - 969 , - 2762 , - 2163 , - 644 , - 2621 , - 734 , - 2343 , - 88 , - 1329 , - 1650 , - 2523 , - 2476 , - 37 , - 2566 , - 2703 , - 1920 , - 1689 , - 538 , - 2883 , - 1364 , - 397 , - 1454 , - 119 , - 808 , - 2049 , - 2370 , - 299 , - 252 , - 757 , - 342 , - 479 , - 2640 , - 2409 , - 1258 , - 659 , - 2084 , - 1117 , - 2174 , - 839 , - 1528 , - 2769 , - 146 , - 1019 , - 972 , - 1477 , - 1062 , - 1199 , - 416 , - 185 , - 1978 , - 1379 , - 2804 , - 1837 , - 2894 , - 1559 , - 2248 , - 545 , - 866 , - 1739 , - 1692 , - 2197 , - 1782 , - 1919 , - 1136 , - 905 , - 2698 , - 2099 , - 580 , - 2557 , - 670 , - 2279 , - 24 , - 1265 , - 1586 , - 2459 , - 2412 , - 2917 , - 2502 , - 2639 , - 1856 , - 1625 , - 474 , - 2819 , - 1300 , - 333 , - 1390 , - 55 , - 744 , - 1985 , - 2306 , - 235 , - 188 , - 693 , - 278 , - 415 , - 2576 , - 2345 , - 1194 , - 595 , - 2020 , - 1053 , - 2110 , - 775 , - 1464 , - 2705 , - 82 , - 955 , - 908 , - 1413 , - 998 , - 1135 , - 352 , - 121 , - 1914 , - 1315 , - 2740 , - 1773 , - 2830 , - 1495 , - 2184 , - 481 , - 802 , - 1675 , - 1628 , - 2133 , - 1718 , - 1855 , - 1072 , - 841 , - 2634 , - 2035 , - 516 , - 2493 , - 606 , - 2215 , - 2904 , - 1201 , - 1522 , - 2395 , - 2348 , - 2853 , - 2438 , - 2575 , - 1792 , - 1561 , - 410 , - 2755 , - 1236 , - 269 , - 1326 , - 2935 , - 680 , - 1921 , - 2242 , - 171 , - 124 , - 629 , - 214 , - 351 , - 2512 , - 2281 , - 1130 , - 531 , - 1956 , - 989 , - 2046 , - 711 , - 1400 , - 2641 , - 18 , - 891 , - 844 , - 1349 , - 934 , - 1071 , - 288 , - 57 , - 1850 , - 1251 , - 2676 , - 1709 , - 2766 , - 1431 , - 2120 , - 417 , - 738 , - 1611 , - 1564 , - 2069 , - 1654 , - 1791 , - 1008 , - 777 , - 2570 , - 1971 , - 452 , - 2429 , - 542 , - 2151 , - 2840 , - 1137 , - 1458 , - 2331 , - 2284 , - 2789 , - 2374 , - 2511 , - 1728 , - 1497 , - 346 , - 2691 , - 1172 , - 205 , - 1262 , - 2871 , - 616 , - 1857 , - 2178 , - 107 , - 60 , - 565 , - 150 , - 287 , - 2448 , - 2217 , - 1066 , - 467 , - 1892 , - 925 , - 1982 , - 647 , - 1336 , - 2577 , - 2898 , - 827 , - 780 , - 1285 , - 870 , - 1007 , - 224 , - 2937 , - 1786 , - 1187 , - 2612 , - 1645 , - 2702 , - 1367 , - 2056 , - 353 , - 674 , - 1547 , - 1500 , - 2005 , - 1590 , - 1727 , - 944 , - 713 , - 2506 , - 1907 , - 388 , - 2365 , - 478 , - 2087 , - 2776 , - 1073 , - 1394 , - 2267 , - 2220 , - 2725 , - 2310 , - 2447 , - 1664 , - 1433 , - 282 , - 2627 , - 1108 , - 141 , - 1198 , - 2807 , - 552 , - 1793 , - 2114 , - 43 , - 2940 , - 501 , - 86 , - 223 , - 2384 , - 2153 , - 1002 , - 403 , - 1828 , - 861 , - 1918 , - 583 , - 1272 , - 2513 , - 2834 , - 763 , - 716 , - 1221 , - 806 , - 943 , - 160 , - 2873 , - 1722 , - 1123 , - 2548 , - 1581 , - 2638 , - 1303 , - 1992 , - 289 , - 610 , - 1483 , - 1436 , - 1941 , - 1526 , - 1663 , - 880 , - 649 , - 2442 , - 1843 , - 324 , - 2301 , - 414 , - 2023 , - 2712 , - 1009 , - 1330 , - 2203 , - 2156 , - 2661 , - 2246 , - 2383 , - 1600 , - 1369 , - 218 , - 2563 , - 1044 , - 77 , - 1134 , - 2743 , - 488 , - 1729 , - 2050 , - 2923 , - 2876 , - 437 , - 22 , - 159 , - 2320 , - 2089 , - 938 , - 339 , - 1764 , - 797 , - 1854 , - 519 , - 1208 , - 2449 , - 2770 , - 699 , - 652 , - 1157 , - 742 , - 879 , - 96 , - 2809 , - 1658 , - 1059 , - 2484 , - 1517 , - 2574 , - 1239 , - 1928 , - 225 , - 546 , - 1419 , - 1372 , - 1877 , - 1462 , - 1599 , - 816 , - 585 , - 2378 , - 1779 , - 260 , - 2237 , - 350 , - 1959 , - 2648 , - 945 , - 1266 , - 2139 , - 2092 , - 2597 , - 2182 , - 2319 , - 1536 , - 1305 , - 154 , - 2499 , - 980 , - 13 , - 1070 , - 2679 , - 424 , - 1665 , - 1986 , - 2859 , - 2812 , - 373 , - 2902 , - 95 , - 2256 , - 2025 , - 874 , - 275 , - 1700 , - 733 , - 1790 , - 455 , - 1144 , - 2385 , - 2706 , - 635 , - 588 , - 1093 , - 678 , - 815 , - 32 , - 2745 , - 1594 , - 995 , - 2420 , - 1453 , - 2510 , - 1175 , - 1864 , - 161 , - 482 , - 1355 , - 1308 , - 1813 , - 1398 , - 1535 , - 752 , - 521 , - 2314 , - 1715 , - 196 , - 2173 , - 286 , - 1895 , - 2584 , - 881 , - 1202 , - 2075 , - 2028 , - 2533 , - 2118 , - 2255 , - 1472 , - 1241 , - 90 , - 2435 , - 916 , - 2893 , - 1006 , - 2615 , - 360 , - 1601 , - 1922 , - 2795 , - 2748 , - 309 , - 2838 , - 31 , - 2192 , - 1961 , - 810 , - 211 , - 1636 , - 669 , - 1726 , - 391 , - 1080 , - 2321 , - 2642 , - 571 , - 524 , - 1029 , - 614 , - 751 , - 2912 , - 2681 , - 1530 , - 931 , - 2356 , - 1389 , - 2446 , - 1111 , - 1800 , - 97 , - 418 , - 1291 , - 1244 , - 1749 , - 1334 , - 1471 , - 688 , - 457 , - 2250 , - 1651 , - 132 , - 2109 , - 222 , - 1831 , - 2520 , - 817 , - 1138 , - 2011 , - 1964 , - 2469 , - 2054 , - 2191 , - 1408 , - 1177 , - 26 , - 2371 , - 852 , - 2829 , - 942 , - 2551 , - 296 , - 1537 , - 1858 , - 2731 , - 2684 , - 245 , - 2774 , - 2911 , - 2128 , - 1897 , - 746 , - 147 , - 1572 , - 605 , - 1662 , - 327 , - 1016 , - 2257 , - 2578 , - 507 , - 460 , - 965 , - 550 , - 687 , - 2848 , - 2617 , - 1466 , - 867 , - 2292 , - 1325 , - 2382 , - 1047 , - 1736 , - 33 , - 354 , - 1227 , - 1180 , - 1685 , - 1270 , - 1407 , - 624 , - 393 , - 2186 , - 1587 , - 68 , - 2045 , - 158 , - 1767 , - 2456 , - 753 , - 1074 , - 1947 , - 1900 , - 2405 , - 1990 , - 2127 , - 1344 , - 1113 , - 2906 , - 2307 , - 788 , - 2765 , - 878 , - 2487 , - 232 , - 1473 , - 1794 , - 2667 , - 2620 , - 181 , - 2710 , - 2847 , - 2064 , - 1833 , - 682 , - 83 , - 1508 , - 541 , - 1598 , - 263 , - 952 , - 2193 , - 2514 , - 443 , - 396 , - 901 , - 486 , - 623 , - 2784 , - 2553 , - 1402 , - 803 , - 2228 , - 1261 , - 2318 , - 983 , - 1672 , - 2913 , - 290 , - 1163 , - 1116 , - 1621 , - 1206 , - 1343 , - 560 , - 329 , - 2122 , - 1523 , - 4 , - 1981 , - 94 , - 1703 , - 2392 , - 689 , - 1010 , - 1883 , - 1836 , - 2341 , - 1926 , - 2063 , - 1280 , - 1049 , - 2842 , - 2243 , - 724 , - 2701 , - 814 , - 2423 , - 168 , - 1409 , - 1730 , - 2603 , - 2556 , - 117 , - 2646 , - 2783 , - 2000 , - 1769 , - 618 , - 19 , - 1444 , - 477 , - 1534 , - 199 , - 888 , - 2129 , - 2450 , - 379 , - 332 , - 837 , - 422 , - 559 , - 2720 , - 2489 , - 1338 , - 739 , - 2164 , - 1197 , - 2254 , - 919 , - 1608 , - 2849 , - 226 , - 1099 , - 1052 , - 1557 , - 1142 , - 1279 , - 496 , - 265 , - 2058 , - 1459 , - 2884 , - 1917 , - 30 , - 1639 , - 2328 , - 625 , - 946 , - 1819 , - 1772 , - 2277 , - 1862 , - 1999 , - 1216 , - 985 , - 2778 , - 2179 , - 660 , - 2637 , - 750 , - 2359 , - 104 , - 1345 , - 1666 , - 2539 , - 2492 , - 53 , - 2582 , - 2719 , - 1936 , - 1705 , - 554 , - 2899 , - 1380 , - 413 , - 1470 , - 135 , - 824 , - 2065 , - 2386 , - 315 , - 268 , - 773 , - 358 , - 495 , - 2656 , - 2425 , - 1274 , - 675 , - 2100 , - 1133 , - 2190 , - 855 , - 1544 , - 2785 , - 162 , - 1035 , - 988 , - 1493 , - 1078 , - 1215 , - 432 , - 201 , - 1994 , - 1395 , - 2820 , - 1853 , - 2910 , - 1575 , - 2264 , - 561 , - 882 , - 1755 , - 1708 , - 2213 , - 1798 , - 1935 , - 1152 , - 921 , - 2714 , - 2115 , - 596 , - 2573 , - 686 , - 2295 , - 40 , - 1281 , - 1602 , - 2475 , - 2428 , - 2933 , - 2518 , - 2655 , - 1872 , - 1641 , - 490 , - 2835 , - 1316 , - 349 , - 1406 , - 71 , - 760 , - 2001 , - 2322 , - 251 , - 204 , - 709 , - 294 , - 431 , - 2592 , - 2361 , - 1210 , - 611 , - 2036 , - 1069 , - 2126 , - 791 , - 1480 , - 2721 , - 98 , - 971 , - 924 , - 1429 , - 1014 , - 1151 , - 368 , - 137 , - 1930 , - 1331 , - 2756 , - 1789 , - 2846 , - 1511 , - 2200 , - 497 , - 818 , - 1691 , - 1644 , - 2149 , - 1734 , - 1871 , - 1088 , - 857 , - 2650 , - 2051 , - 532 , - 2509 , - 622 , - 2231 , - 2920 , - 1217 , - 1538 , - 2411 , - 2364 , - 2869 , - 2454 , - 2591 , - 1808 , - 1577 , - 426 , - 2771 , - 1252 , - 285 , - 1342 , - 7 , - 696 , - 1937 , - 2258 , - 187 , - 140 , - 645 , - 230 , - 367 , - 2528 , - 2297 , - 1146 , - 547 , - 1972 , - 1005 , - 2062 , - 727 , - 1416 , - 2657 , - 34 , - 907 , - 860 , - 1365 , - 950 , - 1087 , - 304 , - 73 , - 1866 , - 1267 , - 2692 , - 1725 , - 2782 , - 1447 , - 2136 , - 433 , - 754 , - 1627 , - 1580 , - 2085 , - 1670 , - 1807 , - 1024 , - 793 , - 2586 , - 1987 , - 468 , - 2445 , - 558 , - 2167 , - 2856 , - 1153 , - 1474 , - 2347 , - 2300 , - 2805 , - 2390 , - 2527 , - 1744 , - 1513 , - 362 , - 2707 , - 1188 , - 221 , - 1278 , - 2887 , - 632 , - 1873 , - 2194 , - 123 , - 76 , - 581 , - 166 , - 303 , - 2464 , - 2233 , - 1082 , - 483 , - 1908 , - 941 , - 1998 , - 663 , - 1352 , - 2593 , - 2914 , - 843 , - 796 , - 1301 , - 886 , - 1023 , - 240 , - 9 , - 1802 , - 1203 , - 2628 , - 1661 , - 2718 , - 1383 , - 2072 , - 369 , - 690 , - 1563 , - 1516 , - 2021 , - 1606 , - 1743 , - 960 , - 729 , - 2522 , - 1923 , - 404 , - 2381 , - 494 , - 2103 , - 2792 , - 1089 , - 1410 , - 2283 , - 2236 , - 2741 , - 2326 , - 2463 , - 1680 , - 1449 , - 298 , - 2643 , - 1124 , - 157 , - 1214 , - 2823 , - 568 , - 1809 , - 2130 , - 59 , - 12 , - 517 , - 102 , - 239 , - 2400 , - 2169 , - 1018 , - 419 , - 1844 , - 877 , - 1934 , - 599 , - 1288 , - 2529 , - 2850 , - 779 , - 732 , - 1237 , - 822 , - 959 , - 176 , - 2889 , - 1738 , - 1139 , - 2564 , - 1597 , - 2654 , - 1319 , - 2008 , - 305 , - 626 , - 1499 , - 1452 , - 1957 , - 1542 , - 1679 , - 896 , - 665 , - 2458 , - 1859 , - 340 , - 2317 , - 430 , - 2039 , - 2728 , - 1025 , - 1346 , - 2219 , - 2172 , - 2677 , - 2262 , - 2399 , - 1616 , - 1385 , - 234 , - 2579 , - 1060 , - 93 , - 1150 , - 2759 , - 504 , - 1745 , - 2066 , - 2939 , - 2892 , - 453 , - 38 , - 175 , - 2336 , - 2105 , - 954 , - 355 , - 1780 , - 813 , - 1870 , - 535 , - 1224 , - 2465 , - 2786 , - 715 , - 668 , - 1173 , - 758 , - 895 , - 112 , - 2825 , - 1674 , - 1075 , - 2500 , - 1533 , - 2590 , - 1255 , - 1944 , - 241 , - 562 , - 1435 , - 1388 , - 1893 , - 1478 , - 1615 , - 832 , - 601 , - 2394 , - 1795 , - 276 , - 2253 , - 366 , - 1975 , - 2664 , - 961 , - 1282 , - 2155 , - 2108 , - 2613 , - 2198 , - 2335 , - 1552 , - 1321 , - 170 , - 2515 , - 996 , - 29 , - 1086 , - 2695 , - 440 , - 1681 , - 2002 , - 2875 , - 2828 , - 389 , - 2918 , - 111 , - 2272 , - 2041 , - 890 , - 291 , - 1716 , - 749 , - 1806 , - 471 , - 1160 , - 2401 , - 2722 , - 651 , - 604 , - 1109 , - 694 , - 831 , - 48 , - 2761 , - 1610 , - 1011 , - 2436 , - 1469 , - 2526 , - 1191 , - 1880 , - 177 , - 498 , - 1371 , - 1324 , - 1829 , - 1414 , - 1551 , - 768 , - 537 , - 2330 , - 1731 , - 212 , - 2189 , - 302 , - 1911 , - 2600 , - 897 , - 1218 , - 2091 , - 2044 , - 2549 , - 2134 , - 2271 , - 1488 , - 1257 , - 106 , - 2451 , - 932 , - 2909 , - 1022 , - 2631 , - 376 , - 1617 , - 1938 , - 2811 , - 2764 , - 325 , - 2854 , - 47 , - 2208 , - 1977 , - 826 , - 227 , - 1652 , - 685 , - 1742 , - 407 , - 1096 , - 2337 , - 2658 , - 587 , - 540 , - 1045 , - 630 , - 767 , - 2928 , - 2697 , - 1546 , - 947 , - 2372 , - 1405 , - 2462 , - 1127 , - 1816 , - 113 , - 434 , - 1307 , - 1260 , - 1765 , - 1350 , - 1487 , - 704 , - 473 , - 2266 , - 1667 , - 148 , - 2125 , - 238 , - 1847 , - 2536 , - 833 , - 1154 , - 2027 , - 1980 , - 2485 , - 2070 , - 2207 , - 1424 , - 1193 , - 42 , - 2387 , - 868 , - 2845 , - 958 , - 2567 , - 312 , - 1553 , - 1874 , - 2747 , - 2700 , - 261 , - 2790 , - 2927 , - 2144 , - 1913 , - 762 , - 163 , - 1588 , - 621 , - 1678 , - 343 , - 1032 , - 2273 , - 2594 , - 523 , - 476 , - 981 , - 566 , - 703 , - 2864 , - 2633 , - 1482 , - 883 , - 2308 , - 1341 , - 2398 , - 1063 , - 1752 , - 49 , - 370 , - 1243 , - 1196 , - 1701 , - 1286 , - 1423 , - 640 , - 409 , - 2202 , - 1603 , - 84 , - 2061 , - 174 , - 1783 , - 2472 , - 769 , - 1090 , - 1963 , - 1916 , - 2421 , - 2006 , - 2143 , - 1360 , - 1129 , - 2922 , - 2323 , - 804 , - 2781 , - 894 , - 2503 , - 248 , - 1489 , - 1810 , - 2683 , - 2636 , - 197 , - 2726 , - 2863 , - 2080 , - 1849 , - 698 , - 99 , - 1524 , - 557 , - 1614 , - 279 , - 968 , - 2209 , - 2530 , - 459 , - 412 , - 917 , - 502 , - 639 , - 2800 , - 2569 , - 1418 , - 819 , - 2244 , - 1277 , - 2334 , - 999 , - 1688 , - 2929 , - 306 , - 1179 , - 1132 , - 1637 , - 1222 , - 1359 , - 576 , - 345 , - 2138 , - 1539 , - 20 , - 1997 , - 110 , - 1719 , - 2408 , - 705 , - 1026 , - 1899 , - 1852 , - 2357 , - 1942 , - 2079 , - 1296 , - 1065 , - 2858 , - 2259 , - 740 , - 2717 , - 830 , - 2439 , - 184 , - 1425 , - 1746 , - 2619 , - 2572 , - 133 , - 2662 , - 2799 , - 2016 , - 1785 , - 634 , - 35 , - 1460 , - 493 , - 1550 , - 215 , - 904 , - 2145 , - 2466 , - 395 , - 348 , - 853 , - 438 , - 575 , - 2736 , - 2505 , - 1354 , - 755 , - 2180 , - 1213 , - 2270 , - 935 , - 1624 , - 2865 , - 242 , - 1115 , - 1068 , - 1573 , - 1158 , - 1295 , - 512 , - 281 , - 2074 , - 1475 , - 2900 , - 1933 , - 46 , - 1655 , - 2344 , - 641 , - 962 , - 1835 , - 1788 , - 2293 , - 1878 , - 2015 , - 1232 , - 1001 , - 2794 , - 2195 , - 676 , - 2653 , - 766 , - 2375 , - 120 , - 1361 , - 1682 , - 2555 , - 2508 , - 69 , - 2598 , - 2735 , - 1952 , - 1721 , - 570 , - 2915 , - 1396 , - 429 , - 1486 , - 151 , - 840 , - 2081 , - 2402 , - 331 , - 284 , - 789 , - 374 , - 511 , - 2672 , - 2441 , - 1290 , - 691 , - 2116 , - 1149 , - 2206 , - 871 , - 1560 , - 2801 , - 178 , - 1051 , - 1004 , - 1509 , - 1094 , - 1231 , - 448 , - 217 , - 2010 , - 1411 , - 2836 , - 1869 , - 2926 , - 1591 , - 2280 , - 577 , - 898 , - 1771 , - 1724 , - 2229 , - 1814 , - 1951 , - 1168 , - 937 , - 2730 , - 2131 , - 612 , - 2589 , - 702 , - 2311 , - 56 , - 1297 , - 1618 , - 2491 , - 2444 , - 5 , - 2534 , - 2671 , - 1888 , - 1657 , - 506 , - 2851 , - 1332 , - 365 , - 1422 , - 87 , - 776 , - 2017 , - 2338 , - 267 , - 220 , - 725 , - 310 , - 447 , - 2608 , - 2377 , - 1226 , - 627 , - 2052 , - 1085 , - 2142 , - 807 , - 1496 , - 2737 , - 114 , - 987 , - 940 , - 1445 , - 1030 , - 1167 , - 384 , - 153 , - 1946 , - 1347 , - 2772 , - 1805 , - 2862 , - 1527 , - 2216 , - 513 , - 834 , - 1707 , - 1660 , - 2165 , - 1750 , - 1887 , - 1104 , - 873 , - 2666 , - 2067 , - 548 , - 2525 , - 638 , - 2247 , - 2936 , - 1233 , - 1554 , - 2427 , - 2380 , - 2885 , - 2470 , - 2607 , - 1824 , - 1593 , - 442 , - 2787 , - 1268 , - 301 , - 1358 , - 23 , - 712 , - 1953 , - 2274 , - 203 , - 156 , - 661 , - 246 , - 383 , - 2544 , - 2313 , - 1162 , - 563 , - 1988 , - 1021 , - 2078 , - 743 , - 1432 , - 2673 , - 50 , - 923 , - 876 , - 1381 , - 966 , - 1103 , - 320 , - 89 , - 1882 , - 1283 , - 2708 , - 1741 , - 2798 , - 1463 , - 2152 , - 449 , - 770 , - 1643 , - 1596 , - 2101 , - 1686 , - 1823 , - 1040 , - 809 , - 2602 , - 2003 , - 484 , - 2461 , - 574 , - 2183 , - 2872 , - 1169 , - 1490 , - 2363 , - 2316 , - 2821 , - 2406 , - 2543 , - 1760 , - 1529 , - 378 , - 2723 , - 1204 , - 237 , - 1294 , - 2903 , - 648 , - 1889 , - 2210 , - 139 , - 92 , - 597 , - 182 , - 319 , - 2480 , - 2249 , - 1098 , - 499 , - 1924 , - 957 , - 2014 , - 679 , - 1368 , - 2609 , - 2930 , - 859 , - 812 , - 1317 , - 902 , - 1039 , - 256 , - 25 , - 1818 , - 1219 , - 2644 , - 1677 , - 2734 , - 1399 , - 2088 , - 385 , - 706 , - 1579 , - 1532 , - 2037 , - 1622 , - 1759 , - 976 , - 745 , - 2538 , - 1939 , - 420 , - 2397 , - 510 , - 2119 , - 2808 , - 1105 , - 1426 , - 2299 , - 2252 , - 2757 , - 2342 , - 2479 , - 1696 , - 1465 , - 314 , - 2659 , - 1140 , - 173 , - 1230 , - 2839 , - 584 , - 1825 , - 2146 , - 75 , - 28 , - 533 , - 118 , - 255 , - 2416 , - 2185 , - 1034 , - 435 , - 1860 , - 893 , - 1950 , - 615 , - 1304 , - 2545 , - 2866 , - 795 , - 748 , - 1253 , - 838 , - 975 , - 192 , - 2905 , - 1754 , - 1155 , - 2580 , - 1613 , - 2670 , - 1335 , - 2024 , - 321 , - 642 , - 1515 , - 1468 , - 1973 , - 1558 , - 1695 , - 912 , - 681 , - 2474 , - 1875 , - 356 , - 2333 , - 446 , - 2055 , - 2744 , - 1041 , - 1362 , - 2235 , - 2188 , - 2693 , - 2278 , - 2415 , - 1632 , - 1401 , - 250 , - 2595 , - 1076 , - 109 , - 1166 , - 2775 , - 520 , - 1761 , - 2082 , - 11 , - 2908 , - 469 , - 54 , - 191 , - 2352 , - 2121 , - 970 , - 371 , - 1796 , - 829 , - 1886 , - 551 , - 1240 , - 2481 , - 2802 , - 731 , - 684 , - 1189 , - 774 , - 911 , - 128 , - 2841 , - 1690 , - 1091 , - 2516 , - 1549 , - 2606 , - 1271 , - 1960 , - 257 , - 578 , - 1451 , - 1404 , - 1909 , - 1494 , - 1631 , - 848 , - 617 , - 2410 , - 1811 , - 292 , - 2269 , - 382 , - 1991 , - 2680 , - 977 , - 1298 , - 2171 , - 2124 , - 2629 , - 2214 , - 2351 , - 1568 , - 1337 , - 186 , - 2531 , - 1012 , - 45 , - 1102 , - 2711 , - 456 , - 1697 , - 2018 , - 2891 , - 2844 , - 405 , - 2934 , - 127 , - 2288 , - 2057 , - 906 , - 307 , - 1732 , - 765 , - 1822 , - 487 , - 1176 , - 2417 , - 2738 , - 667 , - 620 , - 1125 , - 710 , - 847 , - 64 , - 2777 , - 1626 , - 1027 , - 2452 , - 1485 , - 2542 , - 1207 , - 1896 , - 193 , - 514 , - 1387 , - 1340 , - 1845 , - 1430 , - 1567 , - 784 , - 553 , - 2346 , - 1747 , - 228 , - 2205 , - 318 , - 1927 , - 2616 , - 913 , - 1234 , - 2107 , - 2060 , - 2565 , - 2150 , - 2287 , - 1504 , - 1273 , - 122 , - 2467 , - 948 , - 2925 , - 1038 , - 2647 , - 392 , - 1633 , - 1954 , - 2827 , - 2780 , - 341 , - 2870 , - 63 , - 2224 , - 1993 , - 842 , - 243 , - 1668 , - 701 , - 1758 , - 423 , - 1112 , - 2353 , - 2674 , - 603 , - 556 , - 1061 , - 646 , - 783 , - 0 , - 1225 , - 570 , - 1043 , - 2644 , - 2365 , - 206 , - 2183 , - 2280 , - 497 , - 2850 , - 315 , - 1916 , - 1637 , - 2486 , - 1455 , - 1552 , - 2777 , - 2122 , - 2595 , - 1188 , - 909 , - 1758 , - 727 , - 824 , - 2049 , - 1394 , - 1867 , - 460 , - 181 , - 1030 , - 3007 , - 96 , - 1321 , - 666 , - 1139 , - 2740 , - 2461 , - 302 , - 2279 , - 2376 , - 593 , - 2946 , - 411 , - 2012 , - 1733 , - 2582 , - 1551 , - 1648 , - 2873 , - 2218 , - 2691 , - 1284 , - 1005 , - 1854 , - 823 , - 920 , - 2145 , - 1490 , - 1963 , - 556 , - 277 , - 1126 , - 95 , - 192 , - 1417 , - 762 , - 1235 , - 2836 , - 2557 , - 398 , - 2375 , - 2472 , - 689 , - 34 , - 507 , - 2108 , - 1829 , - 2678 , - 1647 , - 1744 , - 2969 , - 2314 , - 2787 , - 1380 , - 1101 , - 1950 , - 919 , - 1016 , - 2241 , - 1586 , - 2059 , - 652 , - 373 , - 1222 , - 191 , - 288 , - 1513 , - 858 , - 1331 , - 2932 , - 2653 , - 494 , - 2471 , - 2568 , - 785 , - 130 , - 603 , - 2204 , - 1925 , - 2774 , - 1743 , - 1840 , - 57 , - 2410 , - 2883 , - 1476 , - 1197 , - 2046 , - 1015 , - 1112 , - 2337 , - 1682 , - 2155 , - 748 , - 469 , - 1318 , - 287 , - 384 , - 1609 , - 954 , - 1427 , - 20 , - 2749 , - 590 , - 2567 , - 2664 , - 881 , - 226 , - 699 , - 2300 , - 2021 , - 2870 , - 1839 , - 1936 , - 153 , - 2506 , - 2979 , - 1572 , - 1293 , - 2142 , - 1111 , - 1208 , - 2433 , - 1778 , - 2251 , - 844 , - 565 , - 1414 , - 383 , - 480 , - 1705 , - 1050 , - 1523 , - 116 , - 2845 , - 686 , - 2663 , - 2760 , - 977 , - 322 , - 795 , - 2396 , - 2117 , - 2966 , - 1935 , - 2032 , - 249 , - 2602 , - 67 , - 1668 , - 1389 , - 2238 , - 1207 , - 1304 , - 2529 , - 1874 , - 2347 , - 940 , - 661 , - 1510 , - 479 , - 576 , - 1801 , - 1146 , - 1619 , - 212 , - 2941 , - 782 , - 2759 , - 2856 , - 1073 , - 418 , - 891 , - 2492 , - 2213 , - 54 , - 2031 , - 2128 , - 345 , - 2698 , - 163 , - 1764 , - 1485 , - 2334 , - 1303 , - 1400 , - 2625 , - 1970 , - 2443 , - 1036 , - 757 , - 1606 , - 575 , - 672 , - 1897 , - 1242 , - 1715 , - 308 , - 29 , - 878 , - 2855 , - 2952 , - 1169 , - 514 , - 987 , - 2588 , - 2309 , - 150 , - 2127 , - 2224 , - 441 , - 2794 , - 259 , - 1860 , - 1581 , - 2430 , - 1399 , - 1496 , - 2721 , - 2066 , - 2539 , - 1132 , - 853 , - 1702 , - 671 , - 768 , - 1993 , - 1338 , - 1811 , - 404 , - 125 , - 974 , - 2951 , - 40 , - 1265 , - 610 , - 1083 , - 2684 , - 2405 , - 246 , - 2223 , - 2320 , - 537 , - 2890 , - 355 , - 1956 , - 1677 , - 2526 , - 1495 , - 1592 , - 2817 , - 2162 , - 2635 , - 1228 , - 949 , - 1798 , - 767 , - 864 , - 2089 , - 1434 , - 1907 , - 500 , - 221 , - 1070 , - 39 , - 136 , - 1361 , - 706 , - 1179 , - 2780 , - 2501 , - 342 , - 2319 , - 2416 , - 633 , - 2986 , - 451 , - 2052 , - 1773 , - 2622 , - 1591 , - 1688 , - 2913 , - 2258 , - 2731 , - 1324 , - 1045 , - 1894 , - 863 , - 960 , - 2185 , - 1530 , - 2003 , - 596 , - 317 , - 1166 , - 135 , - 232 , - 1457 , - 802 , - 1275 , - 2876 , - 2597 , - 438 , - 2415 , - 2512 , - 729 , - 74 , - 547 , - 2148 , - 1869 , - 2718 , - 1687 , - 1784 , - 1 , - 2354 , - 2827 , - 1420 , - 1141 , - 1990 , - 959 , - 1056 , - 2281 , - 1626 , - 2099 , - 692 , - 413 , - 1262 , - 231 , - 328 , - 1553 , - 898 , - 1371 , - 2972 , - 2693 , - 534 , - 2511 , - 2608 , - 825 , - 170 , - 643 , - 2244 , - 1965 , - 2814 , - 1783 , - 1880 , - 97 , - 2450 , - 2923 , - 1516 , - 1237 , - 2086 , - 1055 , - 1152 , - 2377 , - 1722 , - 2195 , - 788 , - 509 , - 1358 , - 327 , - 424 , - 1649 , - 994 , - 1467 , - 60 , - 2789 , - 630 , - 2607 , - 2704 , - 921 , - 266 , - 739 , - 2340 , - 2061 , - 2910 , - 1879 , - 1976 , - 193 , - 2546 , - 11 , - 1612 , - 1333 , - 2182 , - 1151 , - 1248 , - 2473 , - 1818 , - 2291 , - 884 , - 605 , - 1454 , - 423 , - 520 , - 1745 , - 1090 , - 1563 , - 156 , - 2885 , - 726 , - 2703 , - 2800 , - 1017 , - 362 , - 835 , - 2436 , - 2157 , - 3006 , - 1975 , - 2072 , - 289 , - 2642 , - 107 , - 1708 , - 1429 , - 2278 , - 1247 , - 1344 , - 2569 , - 1914 , - 2387 , - 980 , - 701 , - 1550 , - 519 , - 616 , - 1841 , - 1186 , - 1659 , - 252 , - 2981 , - 822 , - 2799 , - 2896 , - 1113 , - 458 , - 931 , - 2532 , - 2253 , - 94 , - 2071 , - 2168 , - 385 , - 2738 , - 203 , - 1804 , - 1525 , - 2374 , - 1343 , - 1440 , - 2665 , - 2010 , - 2483 , - 1076 , - 797 , - 1646 , - 615 , - 712 , - 1937 , - 1282 , - 1755 , - 348 , - 69 , - 918 , - 2895 , - 2992 , - 1209 , - 554 , - 1027 , - 2628 , - 2349 , - 190 , - 2167 , - 2264 , - 481 , - 2834 , - 299 , - 1900 , - 1621 , - 2470 , - 1439 , - 1536 , - 2761 , - 2106 , - 2579 , - 1172 , - 893 , - 1742 , - 711 , - 808 , - 2033 , - 1378 , - 1851 , - 444 , - 165 , - 1014 , - 2991 , - 80 , - 1305 , - 650 , - 1123 , - 2724 , - 2445 , - 286 , - 2263 , - 2360 , - 577 , - 2930 , - 395 , - 1996 , - 1717 , - 2566 , - 1535 , - 1632 , - 2857 , - 2202 , - 2675 , - 1268 , - 989 , - 1838 , - 807 , - 904 , - 2129 , - 1474 , - 1947 , - 540 , - 261 , - 1110 , - 79 , - 176 , - 1401 , - 746 , - 1219 , - 2820 , - 2541 , - 382 , - 2359 , - 2456 , - 673 , - 18 , - 491 , - 2092 , - 1813 , - 2662 , - 1631 , - 1728 , - 2953 , - 2298 , - 2771 , - 1364 , - 1085 , - 1934 , - 903 , - 1000 , - 2225 , - 1570 , - 2043 , - 636 , - 357 , - 1206 , - 175 , - 272 , - 1497 , - 842 , - 1315 , - 2916 , - 2637 , - 478 , - 2455 , - 2552 , - 769 , - 114 , - 587 , - 2188 , - 1909 , - 2758 , - 1727 , - 1824 , - 41 , - 2394 , - 2867 , - 1460 , - 1181 , - 2030 , - 999 , - 1096 , - 2321 , - 1666 , - 2139 , - 732 , - 453 , - 1302 , - 271 , - 368 , - 1593 , - 938 , - 1411 , - 4 , - 2733 , - 574 , - 2551 , - 2648 , - 865 , - 210 , - 683 , - 2284 , - 2005 , - 2854 , - 1823 , - 1920 , - 137 , - 2490 , - 2963 , - 1556 , - 1277 , - 2126 , - 1095 , - 1192 , - 2417 , - 1762 , - 2235 , - 828 , - 549 , - 1398 , - 367 , - 464 , - 1689 , - 1034 , - 1507 , - 100 , - 2829 , - 670 , - 2647 , - 2744 , - 961 , - 306 , - 779 , - 2380 , - 2101 , - 2950 , - 1919 , - 2016 , - 233 , - 2586 , - 51 , - 1652 , - 1373 , - 2222 , - 1191 , - 1288 , - 2513 , - 1858 , - 2331 , - 924 , - 645 , - 1494 , - 463 , - 560 , - 1785 , - 1130 , - 1603 , - 196 , - 2925 , - 766 , - 2743 , - 2840 , - 1057 , - 402 , - 875 , - 2476 , - 2197 , - 38 , - 2015 , - 2112 , - 329 , - 2682 , - 147 , - 1748 , - 1469 , - 2318 , - 1287 , - 1384 , - 2609 , - 1954 , - 2427 , - 1020 , - 741 , - 1590 , - 559 , - 656 , - 1881 , - 1226 , - 1699 , - 292 , - 13 , - 862 , - 2839 , - 2936 , - 1153 , - 498 , - 971 , - 2572 , - 2293 , - 134 , - 2111 , - 2208 , - 425 , - 2778 , - 243 , - 1844 , - 1565 , - 2414 , - 1383 , - 1480 , - 2705 , - 2050 , - 2523 , - 1116 , - 837 , - 1686 , - 655 , - 752 , - 1977 , - 1322 , - 1795 , - 388 , - 109 , - 958 , - 2935 , - 24 , - 1249 , - 594 , - 1067 , - 2668 , - 2389 , - 230 , - 2207 , - 2304 , - 521 , - 2874 , - 339 , - 1940 , - 1661 , - 2510 , - 1479 , - 1576 , - 2801 , - 2146 , - 2619 , - 1212 , - 933 , - 1782 , - 751 , - 848 , - 2073 , - 1418 , - 1891 , - 484 , - 205 , - 1054 , - 23 , - 120 , - 1345 , - 690 , - 1163 , - 2764 , - 2485 , - 326 , - 2303 , - 2400 , - 617 , - 2970 , - 435 , - 2036 , - 1757 , - 2606 , - 1575 , - 1672 , - 2897 , - 2242 , - 2715 , - 1308 , - 1029 , - 1878 , - 847 , - 944 , - 2169 , - 1514 , - 1987 , - 580 , - 301 , - 1150 , - 119 , - 216 , - 1441 , - 786 , - 1259 , - 2860 , - 2581 , - 422 , - 2399 , - 2496 , - 713 , - 58 , - 531 , - 2132 , - 1853 , - 2702 , - 1671 , - 1768 , - 2993 , - 2338 , - 2811 , - 1404 , - 1125 , - 1974 , - 943 , - 1040 , - 2265 , - 1610 , - 2083 , - 676 , - 397 , - 1246 , - 215 , - 312 , - 1537 , - 882 , - 1355 , - 2956 , - 2677 , - 518 , - 2495 , - 2592 , - 809 , - 154 , - 627 , - 2228 , - 1949 , - 2798 , - 1767 , - 1864 , - 81 , - 2434 , - 2907 , - 1500 , - 1221 , - 2070 , - 1039 , - 1136 , - 2361 , - 1706 , - 2179 , - 772 , - 493 , - 1342 , - 311 , - 408 , - 1633 , - 978 , - 1451 , - 44 , - 2773 , - 614 , - 2591 , - 2688 , - 905 , - 250 , - 723 , - 2324 , - 2045 , - 2894 , - 1863 , - 1960 , - 177 , - 2530 , - 3003 , - 1596 , - 1317 , - 2166 , - 1135 , - 1232 , - 2457 , - 1802 , - 2275 , - 868 , - 589 , - 1438 , - 407 , - 504 , - 1729 , - 1074 , - 1547 , - 140 , - 2869 , - 710 , - 2687 , - 2784 , - 1001 , - 346 , - 819 , - 2420 , - 2141 , - 2990 , - 1959 , - 2056 , - 273 , - 2626 , - 91 , - 1692 , - 1413 , - 2262 , - 1231 , - 1328 , - 2553 , - 1898 , - 2371 , - 964 , - 685 , - 1534 , - 503 , - 600 , - 1825 , - 1170 , - 1643 , - 236 , - 2965 , - 806 , - 2783 , - 2880 , - 1097 , - 442 , - 915 , - 2516 , - 2237 , - 78 , - 2055 , - 2152 , - 369 , - 2722 , - 187 , - 1788 , - 1509 , - 2358 , - 1327 , - 1424 , - 2649 , - 1994 , - 2467 , - 1060 , - 781 , - 1630 , - 599 , - 696 , - 1921 , - 1266 , - 1739 , - 332 , - 53 , - 902 , - 2879 , - 2976 , - 1193 , - 538 , - 1011 , - 2612 , - 2333 , - 174 , - 2151 , - 2248 , - 465 , - 2818 , - 283 , - 1884 , - 1605 , - 2454 , - 1423 , - 1520 , - 2745 , - 2090 , - 2563 , - 1156 , - 877 , - 1726 , - 695 , - 792 , - 2017 , - 1362 , - 1835 , - 428 , - 149 , - 998 , - 2975 , - 64 , - 1289 , - 634 , - 1107 , - 2708 , - 2429 , - 270 , - 2247 , - 2344 , - 561 , - 2914 , - 379 , - 1980 , - 1701 , - 2550 , - 1519 , - 1616 , - 2841 , - 2186 , - 2659 , - 1252 , - 973 , - 1822 , - 791 , - 888 , - 2113 , - 1458 , - 1931 , - 524 , - 245 , - 1094 , - 63 , - 160 , - 1385 , - 730 , - 1203 , - 2804 , - 2525 , - 366 , - 2343 , - 2440 , - 657 , - 2 , - 475 , - 2076 , - 1797 , - 2646 , - 1615 , - 1712 , - 2937 , - 2282 , - 2755 , - 1348 , - 1069 , - 1918 , - 887 , - 984 , - 2209 , - 1554 , - 2027 , - 620 , - 341 , - 1190 , - 159 , - 256 , - 1481 , - 826 , - 1299 , - 2900 , - 2621 , - 462 , - 2439 , - 2536 , - 753 , - 98 , - 571 , - 2172 , - 1893 , - 2742 , - 1711 , - 1808 , - 25 , - 2378 , - 2851 , - 1444 , - 1165 , - 2014 , - 983 , - 1080 , - 2305 , - 1650 , - 2123 , - 716 , - 437 , - 1286 , - 255 , - 352 , - 1577 , - 922 , - 1395 , - 2996 , - 2717 , - 558 , - 2535 , - 2632 , - 849 , - 194 , - 667 , - 2268 , - 1989 , - 2838 , - 1807 , - 1904 , - 121 , - 2474 , - 2947 , - 1540 , - 1261 , - 2110 , - 1079 , - 1176 , - 2401 , - 1746 , - 2219 , - 812 , - 533 , - 1382 , - 351 , - 448 , - 1673 , - 1018 , - 1491 , - 84 , - 2813 , - 654 , - 2631 , - 2728 , - 945 , - 290 , - 763 , - 2364 , - 2085 , - 2934 , - 1903 , - 2000 , - 217 , - 2570 , - 35 , - 1636 , - 1357 , - 2206 , - 1175 , - 1272 , - 2497 , - 1842 , - 2315 , - 908 , - 629 , - 1478 , - 447 , - 544 , - 1769 , - 1114 , - 1587 , - 180 , - 2909 , - 750 , - 2727 , - 2824 , - 1041 , - 386 , - 859 , - 2460 , - 2181 , - 22 , - 1999 , - 2096 , - 313 , - 2666 , - 131 , - 1732 , - 1453 , - 2302 , - 1271 , - 1368 , - 2593 , - 1938 , - 2411 , - 1004 , - 725 , - 1574 , - 543 , - 640 , - 1865 , - 1210 , - 1683 , - 276 , - 3005 , - 846 , - 2823 , - 2920 , - 1137 , - 482 , - 955 , - 2556 , - 2277 , - 118 , - 2095 , - 2192 , - 409 , - 2762 , - 227 , - 1828 , - 1549 , - 2398 , - 1367 , - 1464 , - 2689 , - 2034 , - 2507 , - 1100 , - 821 , - 1670 , - 639 , - 736 , - 1961 , - 1306 , - 1779 , - 372 , - 93 , - 942 , - 2919 , - 8 , - 1233 , - 578 , - 1051 , - 2652 , - 2373 , - 214 , - 2191 , - 2288 , - 505 , - 2858 , - 323 , - 1924 , - 1645 , - 2494 , - 1463 , - 1560 , - 2785 , - 2130 , - 2603 , - 1196 , - 917 , - 1766 , - 735 , - 832 , - 2057 , - 1402 , - 1875 , - 468 , - 189 , - 1038 , - 7 , - 104 , - 1329 , - 674 , - 1147 , - 2748 , - 2469 , - 310 , - 2287 , - 2384 , - 601 , - 2954 , - 419 , - 2020 , - 1741 , - 2590 , - 1559 , - 1656 , - 2881 , - 2226 , - 2699 , - 1292 , - 1013 , - 1862 , - 831 , - 928 , - 2153 , - 1498 , - 1971 , - 564 , - 285 , - 1134 , - 103 , - 200 , - 1425 , - 770 , - 1243 , - 2844 , - 2565 , - 406 , - 2383 , - 2480 , - 697 , - 42 , - 515 , - 2116 , - 1837 , - 2686 , - 1655 , - 1752 , - 2977 , - 2322 , - 2795 , - 1388 , - 1109 , - 1958 , - 927 , - 1024 , - 2249 , - 1594 , - 2067 , - 660 , - 381 , - 1230 , - 199 , - 296 , - 1521 , - 866 , - 1339 , - 2940 , - 2661 , - 502 , - 2479 , - 2576 , - 793 , - 138 , - 611 , - 2212 , - 1933 , - 2782 , - 1751 , - 1848 , - 65 , - 2418 , - 2891 , - 1484 , - 1205 , - 2054 , - 1023 , - 1120 , - 2345 , - 1690 , - 2163 , - 756 , - 477 , - 1326 , - 295 , - 392 , - 1617 , - 962 , - 1435 , - 28 , - 2757 , - 598 , - 2575 , - 2672 , - 889 , - 234 , - 707 , - 2308 , - 2029 , - 2878 , - 1847 , - 1944 , - 161 , - 2514 , - 2987 , - 1580 , - 1301 , - 2150 , - 1119 , - 1216 , - 2441 , - 1786 , - 2259 , - 852 , - 573 , - 1422 , - 391 , - 488 , - 1713 , - 1058 , - 1531 , - 124 , - 2853 , - 694 , - 2671 , - 2768 , - 985 , - 330 , - 803 , - 2404 , - 2125 , - 2974 , - 1943 , - 2040 , - 257 , - 2610 , - 75 , - 1676 , - 1397 , - 2246 , - 1215 , - 1312 , - 2537 , - 1882 , - 2355 , - 948 , - 669 , - 1518 , - 487 , - 584 , - 1809 , - 1154 , - 1627 , - 220 , - 2949 , - 790 , - 2767 , - 2864 , - 1081 , - 426 , - 899 , - 2500 , - 2221 , - 62 , - 2039 , - 2136 , - 353 , - 2706 , - 171 , - 1772 , - 1493 , - 2342 , - 1311 , - 1408 , - 2633 , - 1978 , - 2451 , - 1044 , - 765 , - 1614 , - 583 , - 680 , - 1905 , - 1250 , - 1723 , - 316 , - 37 , - 886 , - 2863 , - 2960 , - 1177 , - 522 , - 995 , - 2596 , - 2317 , - 158 , - 2135 , - 2232 , - 449 , - 2802 , - 267 , - 1868 , - 1589 , - 2438 , - 1407 , - 1504 , - 2729 , - 2074 , - 2547 , - 1140 , - 861 , - 1710 , - 679 , - 776 , - 2001 , - 1346 , - 1819 , - 412 , - 133 , - 982 , - 2959 , - 48 , - 1273 , - 618 , - 1091 , - 2692 , - 2413 , - 254 , - 2231 , - 2328 , - 545 , - 2898 , - 363 , - 1964 , - 1685 , - 2534 , - 1503 , - 1600 , - 2825 , - 2170 , - 2643 , - 1236 , - 957 , - 1806 , - 775 , - 872 , - 2097 , - 1442 , - 1915 , - 508 , - 229 , - 1078 , - 47 , - 144 , - 1369 , - 714 , - 1187 , - 2788 , - 2509 , - 350 , - 2327 , - 2424 , - 641 , - 2994 , - 459 , - 2060 , - 1781 , - 2630 , - 1599 , - 1696 , - 2921 , - 2266 , - 2739 , - 1332 , - 1053 , - 1902 , - 871 , - 968 , - 2193 , - 1538 , - 2011 , - 604 , - 325 , - 1174 , - 143 , - 240 , - 1465 , - 810 , - 1283 , - 2884 , - 2605 , - 446 , - 2423 , - 2520 , - 737 , - 82 , - 555 , - 2156 , - 1877 , - 2726 , - 1695 , - 1792 , - 9 , - 2362 , - 2835 , - 1428 , - 1149 , - 1998 , - 967 , - 1064 , - 2289 , - 1634 , - 2107 , - 700 , - 421 , - 1270 , - 239 , - 336 , - 1561 , - 906 , - 1379 , - 2980 , - 2701 , - 542 , - 2519 , - 2616 , - 833 , - 178 , - 651 , - 2252 , - 1973 , - 2822 , - 1791 , - 1888 , - 105 , - 2458 , - 2931 , - 1524 , - 1245 , - 2094 , - 1063 , - 1160 , - 2385 , - 1730 , - 2203 , - 796 , - 517 , - 1366 , - 335 , - 432 , - 1657 , - 1002 , - 1475 , - 68 , - 2797 , - 638 , - 2615 , - 2712 , - 929 , - 274 , - 747 , - 2348 , - 2069 , - 2918 , - 1887 , - 1984 , - 201 , - 2554 , - 19 , - 1620 , - 1341 , - 2190 , - 1159 , - 1256 , - 2481 , - 1826 , - 2299 , - 892 , - 613 , - 1462 , - 431 , - 528 , - 1753 , - 1098 , - 1571 , - 164 , - 2893 , - 734 , - 2711 , - 2808 , - 1025 , - 370 , - 843 , - 2444 , - 2165 , - 6 , - 1983 , - 2080 , - 297 , - 2650 , - 115 , - 1716 , - 1437 , - 2286 , - 1255 , - 1352 , - 2577 , - 1922 , - 2395 , - 988 , - 709 , - 1558 , - 527 , - 624 , - 1849 , - 1194 , - 1667 , - 260 , - 2989 , - 830 , - 2807 , - 2904 , - 1121 , - 466 , - 939 , - 2540 , - 2261 , - 102 , - 2079 , - 2176 , - 393 , - 2746 , - 211 , - 1812 , - 1533 , - 2382 , - 1351 , - 1448 , - 2673 , - 2018 , - 2491 , - 1084 , - 805 , - 1654 , - 623 , - 720 , - 1945 , - 1290 , - 1763 , - 356 , - 77 , - 926 , - 2903 , - 3000 , - 1217 , - 562 , - 1035 , - 2636 , - 2357 , - 198 , - 2175 , - 2272 , - 489 , - 2842 , - 307 , - 1908 , - 1629 , - 2478 , - 1447 , - 1544 , - 2769 , - 2114 , - 2587 , - 1180 , - 901 , - 1750 , - 719 , - 816 , - 2041 , - 1386 , - 1859 , - 452 , - 173 , - 1022 , - 2999 , - 88 , - 1313 , - 658 , - 1131 , - 2732 , - 2453 , - 294 , - 2271 , - 2368 , - 585 , - 2938 , - 403 , - 2004 , - 1725 , - 2574 , - 1543 , - 1640 , - 2865 , - 2210 , - 2683 , - 1276 , - 997 , - 1846 , - 815 , - 912 , - 2137 , - 1482 , - 1955 , - 548 , - 269 , - 1118 , - 87 , - 184 , - 1409 , - 754 , - 1227 , - 2828 , - 2549 , - 390 , - 2367 , - 2464 , - 681 , - 26 , - 499 , - 2100 , - 1821 , - 2670 , - 1639 , - 1736 , - 2961 , - 2306 , - 2779 , - 1372 , - 1093 , - 1942 , - 911 , - 1008 , - 2233 , - 1578 , - 2051 , - 644 , - 365 , - 1214 , - 183 , - 280 , - 1505 , - 850 , - 1323 , - 2924 , - 2645 , - 486 , - 2463 , - 2560 , - 777 , - 122 , - 595 , - 2196 , - 1917 , - 2766 , - 1735 , - 1832 , - 49 , - 2402 , - 2875 , - 1468 , - 1189 , - 2038 , - 1007 , - 1104 , - 2329 , - 1674 , - 2147 , - 740 , - 461 , - 1310 , - 279 , - 376 , - 1601 , - 946 , - 1419 , - 12 , - 2741 , - 582 , - 2559 , - 2656 , - 873 , - 218 , - 691 , - 2292 , - 2013 , - 2862 , - 1831 , - 1928 , - 145 , - 2498 , - 2971 , - 1564 , - 1285 , - 2134 , - 1103 , - 1200 , - 2425 , - 1770 , - 2243 , - 836 , - 557 , - 1406 , - 375 , - 472 , - 1697 , - 1042 , - 1515 , - 108 , - 2837 , - 678 , - 2655 , - 2752 , - 969 , - 314 , - 787 , - 2388 , - 2109 , - 2958 , - 1927 , - 2024 , - 241 , - 2594 , - 59 , - 1660 , - 1381 , - 2230 , - 1199 , - 1296 , - 2521 , - 1866 , - 2339 , - 932 , - 653 , - 1502 , - 471 , - 568 , - 1793 , - 1138 , - 1611 , - 204 , - 2933 , - 774 , - 2751 , - 2848 , - 1065 , - 410 , - 883 , - 2484 , - 2205 , - 46 , - 2023 , - 2120 , - 337 , - 2690 , - 155 , - 1756 , - 1477 , - 2326 , - 1295 , - 1392 , - 2617 , - 1962 , - 2435 , - 1028 , - 749 , - 1598 , - 567 , - 664 , - 1889 , - 1234 , - 1707 , - 300 , - 21 , - 870 , - 2847 , - 2944 , - 1161 , - 506 , - 979 , - 2580 , - 2301 , - 142 , - 2119 , - 2216 , - 433 , - 2786 , - 251 , - 1852 , - 1573 , - 2422 , - 1391 , - 1488 , - 2713 , - 2058 , - 2531 , - 1124 , - 845 , - 1694 , - 663 , - 760 , - 1985 , - 1330 , - 1803 , - 396 , - 117 , - 966 , - 2943 , - 32 , - 1257 , - 602 , - 1075 , - 2676 , - 2397 , - 238 , - 2215 , - 2312 , - 529 , - 2882 , - 347 , - 1948 , - 1669 , - 2518 , - 1487 , - 1584 , - 2809 , - 2154 , - 2627 , - 1220 , - 941 , - 1790 , - 759 , - 856 , - 2081 , - 1426 , - 1899 , - 492 , - 213 , - 1062 , - 31 , - 128 , - 1353 , - 698 , - 1171 , - 2772 , - 2493 , - 334 , - 2311 , - 2408 , - 625 , - 2978 , - 443 , - 2044 , - 1765 , - 2614 , - 1583 , - 1680 , - 2905 , - 2250 , - 2723 , - 1316 , - 1037 , - 1886 , - 855 , - 952 , - 2177 , - 1522 , - 1995 , - 588 , - 309 , - 1158 , - 127 , - 224 , - 1449 , - 794 , - 1267 , - 2868 , - 2589 , - 430 , - 2407 , - 2504 , - 721 , - 66 , - 539 , - 2140 , - 1861 , - 2710 , - 1679 , - 1776 , - 3001 , - 2346 , - 2819 , - 1412 , - 1133 , - 1982 , - 951 , - 1048 , - 2273 , - 1618 , - 2091 , - 684 , - 405 , - 1254 , - 223 , - 320 , - 1545 , - 890 , - 1363 , - 2964 , - 2685 , - 526 , - 2503 , - 2600 , - 817 , - 162 , - 635 , - 2236 , - 1957 , - 2806 , - 1775 , - 1872 , - 89 , - 2442 , - 2915 , - 1508 , - 1229 , - 2078 , - 1047 , - 1144 , - 2369 , - 1714 , - 2187 , - 780 , - 501 , - 1350 , - 319 , - 416 , - 1641 , - 986 , - 1459 , - 52 , - 2781 , - 622 , - 2599 , - 2696 , - 913 , - 258 , - 731 , - 2332 , - 2053 , - 2902 , - 1871 , - 1968 , - 185 , - 2538 , - 3 , - 1604 , - 1325 , - 2174 , - 1143 , - 1240 , - 2465 , - 1810 , - 2283 , - 876 , - 597 , - 1446 , - 415 , - 512 , - 1737 , - 1082 , - 1555 , - 148 , - 2877 , - 718 , - 2695 , - 2792 , - 1009 , - 354 , - 827 , - 2428 , - 2149 , - 2998 , - 1967 , - 2064 , - 281 , - 2634 , - 99 , - 1700 , - 1421 , - 2270 , - 1239 , - 1336 , - 2561 , - 1906 , - 2379 , - 972 , - 693 , - 1542 , - 511 , - 608 , - 1833 , - 1178 , - 1651 , - 244 , - 2973 , - 814 , - 2791 , - 2888 , - 1105 , - 450 , - 923 , - 2524 , - 2245 , - 86 , - 2063 , - 2160 , - 377 , - 2730 , - 195 , - 1796 , - 1517 , - 2366 , - 1335 , - 1432 , - 2657 , - 2002 , - 2475 , - 1068 , - 789 , - 1638 , - 607 , - 704 , - 1929 , - 1274 , - 1747 , - 340 , - 61 , - 910 , - 2887 , - 2984 , - 1201 , - 546 , - 1019 , - 2620 , - 2341 , - 182 , - 2159 , - 2256 , - 473 , - 2826 , - 291 , - 1892 , - 1613 , - 2462 , - 1431 , - 1528 , - 2753 , - 2098 , - 2571 , - 1164 , - 885 , - 1734 , - 703 , - 800 , - 2025 , - 1370 , - 1843 , - 436 , - 157 , - 1006 , - 2983 , - 72 , - 1297 , - 642 , - 1115 , - 2716 , - 2437 , - 278 , - 2255 , - 2352 , - 569 , - 2922 , - 387 , - 1988 , - 1709 , - 2558 , - 1527 , - 1624 , - 2849 , - 2194 , - 2667 , - 1260 , - 981 , - 1830 , - 799 , - 896 , - 2121 , - 1466 , - 1939 , - 532 , - 253 , - 1102 , - 71 , - 168 , - 1393 , - 738 , - 1211 , - 2812 , - 2533 , - 374 , - 2351 , - 2448 , - 665 , - 10 , - 483 , - 2084 , - 1805 , - 2654 , - 1623 , - 1720 , - 2945 , - 2290 , - 2763 , - 1356 , - 1077 , - 1926 , - 895 , - 992 , - 2217 , - 1562 , - 2035 , - 628 , - 349 , - 1198 , - 167 , - 264 , - 1489 , - 834 , - 1307 , - 2908 , - 2629 , - 470 , - 2447 , - 2544 , - 761 , - 106 , - 579 , - 2180 , - 1901 , - 2750 , - 1719 , - 1816 , - 33 , - 2386 , - 2859 , - 1452 , - 1173 , - 2022 , - 991 , - 1088 , - 2313 , - 1658 , - 2131 , - 724 , - 445 , - 1294 , - 263 , - 360 , - 1585 , - 930 , - 1403 , - 3004 , - 2725 , - 566 , - 2543 , - 2640 , - 857 , - 202 , - 675 , - 2276 , - 1997 , - 2846 , - 1815 , - 1912 , - 129 , - 2482 , - 2955 , - 1548 , - 1269 , - 2118 , - 1087 , - 1184 , - 2409 , - 1754 , - 2227 , - 820 , - 541 , - 1390 , - 359 , - 456 , - 1681 , - 1026 , - 1499 , - 92 , - 2821 , - 662 , - 2639 , - 2736 , - 953 , - 298 , - 771 , - 2372 , - 2093 , - 2942 , - 1911 , - 2008 , - 225 , - 2578 , - 43 , - 1644 , - 1365 , - 2214 , - 1183 , - 1280 , - 2505 , - 1850 , - 2323 , - 916 , - 637 , - 1486 , - 455 , - 552 , - 1777 , - 1122 , - 1595 , - 188 , - 2917 , - 758 , - 2735 , - 2832 , - 1049 , - 394 , - 867 , - 2468 , - 2189 , - 30 , - 2007 , - 2104 , - 321 , - 2674 , - 139 , - 1740 , - 1461 , - 2310 , - 1279 , - 1376 , - 2601 , - 1946 , - 2419 , - 1012 , - 733 , - 1582 , - 551 , - 648 , - 1873 , - 1218 , - 1691 , - 284 , - 5 , - 854 , - 2831 , - 2928 , - 1145 , - 490 , - 963 , - 2564 , - 2285 , - 126 , - 2103 , - 2200 , - 417 , - 2770 , - 235 , - 1836 , - 1557 , - 2406 , - 1375 , - 1472 , - 2697 , - 2042 , - 2515 , - 1108 , - 829 , - 1678 , - 647 , - 744 , - 1969 , - 1314 , - 1787 , - 380 , - 101 , - 950 , - 2927 , - 16 , - 1241 , - 586 , - 1059 , - 2660 , - 2381 , - 222 , - 2199 , - 2296 , - 513 , - 2866 , - 331 , - 1932 , - 1653 , - 2502 , - 1471 , - 1568 , - 2793 , - 2138 , - 2611 , - 1204 , - 925 , - 1774 , - 743 , - 840 , - 2065 , - 1410 , - 1883 , - 476 , - 197 , - 1046 , - 15 , - 112 , - 1337 , - 682 , - 1155 , - 2756 , - 2477 , - 318 , - 2295 , - 2392 , - 609 , - 2962 , - 427 , - 2028 , - 1749 , - 2598 , - 1567 , - 1664 , - 2889 , - 2234 , - 2707 , - 1300 , - 1021 , - 1870 , - 839 , - 936 , - 2161 , - 1506 , - 1979 , - 572 , - 293 , - 1142 , - 111 , - 208 , - 1433 , - 778 , - 1251 , - 2852 , - 2573 , - 414 , - 2391 , - 2488 , - 705 , - 50 , - 523 , - 2124 , - 1845 , - 2694 , - 1663 , - 1760 , - 2985 , - 2330 , - 2803 , - 1396 , - 1117 , - 1966 , - 935 , - 1032 , - 2257 , - 1602 , - 2075 , - 668 , - 389 , - 1238 , - 207 , - 304 , - 1529 , - 874 , - 1347 , - 2948 , - 2669 , - 510 , - 2487 , - 2584 , - 801 , - 146 , - 619 , - 2220 , - 1941 , - 2790 , - 1759 , - 1856 , - 73 , - 2426 , - 2899 , - 1492 , - 1213 , - 2062 , - 1031 , - 1128 , - 2353 , - 1698 , - 2171 , - 764 , - 485 , - 1334 , - 303 , - 400 , - 1625 , - 970 , - 1443 , - 36 , - 2765 , - 606 , - 2583 , - 2680 , - 897 , - 242 , - 715 , - 2316 , - 2037 , - 2886 , - 1855 , - 1952 , - 169 , - 2522 , - 2995 , - 1588 , - 1309 , - 2158 , - 1127 , - 1224 , - 2449 , - 1794 , - 2267 , - 860 , - 581 , - 1430 , - 399 , - 496 , - 1721 , - 1066 , - 1539 , - 132 , - 2861 , - 702 , - 2679 , - 2776 , - 993 , - 338 , - 811 , - 2412 , - 2133 , - 2982 , - 1951 , - 2048 , - 265 , - 2618 , - 83 , - 1684 , - 1405 , - 2254 , - 1223 , - 1320 , - 2545 , - 1890 , - 2363 , - 956 , - 677 , - 1526 , - 495 , - 592 , - 1817 , - 1162 , - 1635 , - 228 , - 2957 , - 798 , - 2775 , - 2872 , - 1089 , - 434 , - 907 , - 2508 , - 2229 , - 70 , - 2047 , - 2144 , - 361 , - 2714 , - 179 , - 1780 , - 1501 , - 2350 , - 1319 , - 1416 , - 2641 , - 1986 , - 2459 , - 1052 , - 773 , - 1622 , - 591 , - 688 , - 1913 , - 1258 , - 1731 , - 324 , - 45 , - 894 , - 2871 , - 2968 , - 1185 , - 530 , - 1003 , - 2604 , - 2325 , - 166 , - 2143 , - 2240 , - 457 , - 2810 , - 275 , - 1876 , - 1597 , - 2446 , - 1415 , - 1512 , - 2737 , - 2082 , - 2555 , - 1148 , - 869 , - 1718 , - 687 , - 784 , - 2009 , - 1354 , - 1827 , - 420 , - 141 , - 990 , - 2967 , - 56 , - 1281 , - 626 , - 1099 , - 2700 , - 2421 , - 262 , - 2239 , - 2336 , - 553 , - 2906 , - 371 , - 1972 , - 1693 , - 2542 , - 1511 , - 1608 , - 2833 , - 2178 , - 2651 , - 1244 , - 965 , - 1814 , - 783 , - 880 , - 2105 , - 1450 , - 1923 , - 516 , - 237 , - 1086 , - 55 , - 152 , - 1377 , - 722 , - 1195 , - 2796 , - 2517 , - 358 , - 2335 , - 2432 , - 649 , - 3002 , - 467 , - 2068 , - 1789 , - 2638 , - 1607 , - 1704 , - 2929 , - 2274 , - 2747 , - 1340 , - 1061 , - 1910 , - 879 , - 976 , - 2201 , - 1546 , - 2019 , - 612 , - 333 , - 1182 , - 151 , - 248 , - 1473 , - 818 , - 1291 , - 2892 , - 2613 , - 454 , - 2431 , - 2528 , - 745 , - 90 , - 563 , - 2164 , - 1885 , - 2734 , - 1703 , - 1800 , - 17 , - 2370 , - 2843 , - 1436 , - 1157 , - 2006 , - 975 , - 1072 , - 2297 , - 1642 , - 2115 , - 708 , - 429 , - 1278 , - 247 , - 344 , - 1569 , - 914 , - 1387 , - 2988 , - 2709 , - 550 , - 2527 , - 2624 , - 841 , - 186 , - 659 , - 2260 , - 1981 , - 2830 , - 1799 , - 1896 , - 113 , - 2466 , - 2939 , - 1532 , - 1253 , - 2102 , - 1071 , - 1168 , - 2393 , - 1738 , - 2211 , - 804 , - 525 , - 1374 , - 343 , - 440 , - 1665 , - 1010 , - 1483 , - 76 , - 2805 , - 646 , - 2623 , - 2720 , - 937 , - 282 , - 755 , - 2356 , - 2077 , - 2926 , - 1895 , - 1992 , - 209 , - 2562 , - 27 , - 1628 , - 1349 , - 2198 , - 1167 , - 1264 , - 2489 , - 1834 , - 2307 , - 900 , - 621 , - 1470 , - 439 , - 536 , - 1761 , - 1106 , - 1579 , - 172 , - 2901 , - 742 , - 2719 , - 2816 , - 1033 , - 378 , - 851 , - 2452 , - 2173 , - 14 , - 1991 , - 2088 , - 305 , - 2658 , - 123 , - 1724 , - 1445 , - 2294 , - 1263 , - 1360 , - 2585 , - 1930 , - 2403 , - 996 , - 717 , - 1566 , - 535 , - 632 , - 1857 , - 1202 , - 1675 , - 268 , - 2997 , - 838 , - 2815 , - 2912 , - 1129 , - 474 , - 947 , - 2548 , - 2269 , - 110 , - 2087 , - 2184 , - 401 , - 2754 , - 219 , - 1820 , - 1541 , - 2390 , - 1359 , - 1456 , - 2681 , - 2026 , - 2499 , - 1092 , - 813 , - 1662 , - 631 , - 728 , - 1953 , - 1298 , - 1771 , - 364 , - 85 , - 934 , - 2911 , - 0 , - 2351 , - 1822 , - 1485 , - 1340 , - 1387 , - 1626 , - 2057 , - 2680 , - 423 , - 1430 , - 2629 , - 948 , - 2531 , - 1234 , - 129 , - 2288 , - 1567 , - 1038 , - 701 , - 556 , - 603 , - 842 , - 1273 , - 1896 , - 2711 , - 646 , - 1845 , - 164 , - 1747 , - 450 , - 2417 , - 1504 , - 783 , - 254 , - 2989 , - 2844 , - 2891 , - 58 , - 489 , - 1112 , - 1927 , - 2934 , - 1061 , - 2452 , - 963 , - 2738 , - 1633 , - 720 , - 3071 , - 2542 , - 2205 , - 2060 , - 2107 , - 2346 , - 2777 , - 328 , - 1143 , - 2150 , - 277 , - 1668 , - 179 , - 1954 , - 849 , - 3008 , - 2287 , - 1758 , - 1421 , - 1276 , - 1323 , - 1562 , - 1993 , - 2616 , - 359 , - 1366 , - 2565 , - 884 , - 2467 , - 1170 , - 65 , - 2224 , - 1503 , - 974 , - 637 , - 492 , - 539 , - 778 , - 1209 , - 1832 , - 2647 , - 582 , - 1781 , - 100 , - 1683 , - 386 , - 2353 , - 1440 , - 719 , - 190 , - 2925 , - 2780 , - 2827 , - 3066 , - 425 , - 1048 , - 1863 , - 2870 , - 997 , - 2388 , - 899 , - 2674 , - 1569 , - 656 , - 3007 , - 2478 , - 2141 , - 1996 , - 2043 , - 2282 , - 2713 , - 264 , - 1079 , - 2086 , - 213 , - 1604 , - 115 , - 1890 , - 785 , - 2944 , - 2223 , - 1694 , - 1357 , - 1212 , - 1259 , - 1498 , - 1929 , - 2552 , - 295 , - 1302 , - 2501 , - 820 , - 2403 , - 1106 , - 1 , - 2160 , - 1439 , - 910 , - 573 , - 428 , - 475 , - 714 , - 1145 , - 1768 , - 2583 , - 518 , - 1717 , - 36 , - 1619 , - 322 , - 2289 , - 1376 , - 655 , - 126 , - 2861 , - 2716 , - 2763 , - 3002 , - 361 , - 984 , - 1799 , - 2806 , - 933 , - 2324 , - 835 , - 2610 , - 1505 , - 592 , - 2943 , - 2414 , - 2077 , - 1932 , - 1979 , - 2218 , - 2649 , - 200 , - 1015 , - 2022 , - 149 , - 1540 , - 51 , - 1826 , - 721 , - 2880 , - 2159 , - 1630 , - 1293 , - 1148 , - 1195 , - 1434 , - 1865 , - 2488 , - 231 , - 1238 , - 2437 , - 756 , - 2339 , - 1042 , - 3009 , - 2096 , - 1375 , - 846 , - 509 , - 364 , - 411 , - 650 , - 1081 , - 1704 , - 2519 , - 454 , - 1653 , - 3044 , - 1555 , - 258 , - 2225 , - 1312 , - 591 , - 62 , - 2797 , - 2652 , - 2699 , - 2938 , - 297 , - 920 , - 1735 , - 2742 , - 869 , - 2260 , - 771 , - 2546 , - 1441 , - 528 , - 2879 , - 2350 , - 2013 , - 1868 , - 1915 , - 2154 , - 2585 , - 136 , - 951 , - 1958 , - 85 , - 1476 , - 3059 , - 1762 , - 657 , - 2816 , - 2095 , - 1566 , - 1229 , - 1084 , - 1131 , - 1370 , - 1801 , - 2424 , - 167 , - 1174 , - 2373 , - 692 , - 2275 , - 978 , - 2945 , - 2032 , - 1311 , - 782 , - 445 , - 300 , - 347 , - 586 , - 1017 , - 1640 , - 2455 , - 390 , - 1589 , - 2980 , - 1491 , - 194 , - 2161 , - 1248 , - 527 , - 3070 , - 2733 , - 2588 , - 2635 , - 2874 , - 233 , - 856 , - 1671 , - 2678 , - 805 , - 2196 , - 707 , - 2482 , - 1377 , - 464 , - 2815 , - 2286 , - 1949 , - 1804 , - 1851 , - 2090 , - 2521 , - 72 , - 887 , - 1894 , - 21 , - 1412 , - 2995 , - 1698 , - 593 , - 2752 , - 2031 , - 1502 , - 1165 , - 1020 , - 1067 , - 1306 , - 1737 , - 2360 , - 103 , - 1110 , - 2309 , - 628 , - 2211 , - 914 , - 2881 , - 1968 , - 1247 , - 718 , - 381 , - 236 , - 283 , - 522 , - 953 , - 1576 , - 2391 , - 326 , - 1525 , - 2916 , - 1427 , - 130 , - 2097 , - 1184 , - 463 , - 3006 , - 2669 , - 2524 , - 2571 , - 2810 , - 169 , - 792 , - 1607 , - 2614 , - 741 , - 2132 , - 643 , - 2418 , - 1313 , - 400 , - 2751 , - 2222 , - 1885 , - 1740 , - 1787 , - 2026 , - 2457 , - 8 , - 823 , - 1830 , - 3029 , - 1348 , - 2931 , - 1634 , - 529 , - 2688 , - 1967 , - 1438 , - 1101 , - 956 , - 1003 , - 1242 , - 1673 , - 2296 , - 39 , - 1046 , - 2245 , - 564 , - 2147 , - 850 , - 2817 , - 1904 , - 1183 , - 654 , - 317 , - 172 , - 219 , - 458 , - 889 , - 1512 , - 2327 , - 262 , - 1461 , - 2852 , - 1363 , - 66 , - 2033 , - 1120 , - 399 , - 2942 , - 2605 , - 2460 , - 2507 , - 2746 , - 105 , - 728 , - 1543 , - 2550 , - 677 , - 2068 , - 579 , - 2354 , - 1249 , - 336 , - 2687 , - 2158 , - 1821 , - 1676 , - 1723 , - 1962 , - 2393 , - 3016 , - 759 , - 1766 , - 2965 , - 1284 , - 2867 , - 1570 , - 465 , - 2624 , - 1903 , - 1374 , - 1037 , - 892 , - 939 , - 1178 , - 1609 , - 2232 , - 3047 , - 982 , - 2181 , - 500 , - 2083 , - 786 , - 2753 , - 1840 , - 1119 , - 590 , - 253 , - 108 , - 155 , - 394 , - 825 , - 1448 , - 2263 , - 198 , - 1397 , - 2788 , - 1299 , - 2 , - 1969 , - 1056 , - 335 , - 2878 , - 2541 , - 2396 , - 2443 , - 2682 , - 41 , - 664 , - 1479 , - 2486 , - 613 , - 2004 , - 515 , - 2290 , - 1185 , - 272 , - 2623 , - 2094 , - 1757 , - 1612 , - 1659 , - 1898 , - 2329 , - 2952 , - 695 , - 1702 , - 2901 , - 1220 , - 2803 , - 1506 , - 401 , - 2560 , - 1839 , - 1310 , - 973 , - 828 , - 875 , - 1114 , - 1545 , - 2168 , - 2983 , - 918 , - 2117 , - 436 , - 2019 , - 722 , - 2689 , - 1776 , - 1055 , - 526 , - 189 , - 44 , - 91 , - 330 , - 761 , - 1384 , - 2199 , - 134 , - 1333 , - 2724 , - 1235 , - 3010 , - 1905 , - 992 , - 271 , - 2814 , - 2477 , - 2332 , - 2379 , - 2618 , - 3049 , - 600 , - 1415 , - 2422 , - 549 , - 1940 , - 451 , - 2226 , - 1121 , - 208 , - 2559 , - 2030 , - 1693 , - 1548 , - 1595 , - 1834 , - 2265 , - 2888 , - 631 , - 1638 , - 2837 , - 1156 , - 2739 , - 1442 , - 337 , - 2496 , - 1775 , - 1246 , - 909 , - 764 , - 811 , - 1050 , - 1481 , - 2104 , - 2919 , - 854 , - 2053 , - 372 , - 1955 , - 658 , - 2625 , - 1712 , - 991 , - 462 , - 125 , - 3052 , - 27 , - 266 , - 697 , - 1320 , - 2135 , - 70 , - 1269 , - 2660 , - 1171 , - 2946 , - 1841 , - 928 , - 207 , - 2750 , - 2413 , - 2268 , - 2315 , - 2554 , - 2985 , - 536 , - 1351 , - 2358 , - 485 , - 1876 , - 387 , - 2162 , - 1057 , - 144 , - 2495 , - 1966 , - 1629 , - 1484 , - 1531 , - 1770 , - 2201 , - 2824 , - 567 , - 1574 , - 2773 , - 1092 , - 2675 , - 1378 , - 273 , - 2432 , - 1711 , - 1182 , - 845 , - 700 , - 747 , - 986 , - 1417 , - 2040 , - 2855 , - 790 , - 1989 , - 308 , - 1891 , - 594 , - 2561 , - 1648 , - 927 , - 398 , - 61 , - 2988 , - 3035 , - 202 , - 633 , - 1256 , - 2071 , - 6 , - 1205 , - 2596 , - 1107 , - 2882 , - 1777 , - 864 , - 143 , - 2686 , - 2349 , - 2204 , - 2251 , - 2490 , - 2921 , - 472 , - 1287 , - 2294 , - 421 , - 1812 , - 323 , - 2098 , - 993 , - 80 , - 2431 , - 1902 , - 1565 , - 1420 , - 1467 , - 1706 , - 2137 , - 2760 , - 503 , - 1510 , - 2709 , - 1028 , - 2611 , - 1314 , - 209 , - 2368 , - 1647 , - 1118 , - 781 , - 636 , - 683 , - 922 , - 1353 , - 1976 , - 2791 , - 726 , - 1925 , - 244 , - 1827 , - 530 , - 2497 , - 1584 , - 863 , - 334 , - 3069 , - 2924 , - 2971 , - 138 , - 569 , - 1192 , - 2007 , - 3014 , - 1141 , - 2532 , - 1043 , - 2818 , - 1713 , - 800 , - 79 , - 2622 , - 2285 , - 2140 , - 2187 , - 2426 , - 2857 , - 408 , - 1223 , - 2230 , - 357 , - 1748 , - 259 , - 2034 , - 929 , - 16 , - 2367 , - 1838 , - 1501 , - 1356 , - 1403 , - 1642 , - 2073 , - 2696 , - 439 , - 1446 , - 2645 , - 964 , - 2547 , - 1250 , - 145 , - 2304 , - 1583 , - 1054 , - 717 , - 572 , - 619 , - 858 , - 1289 , - 1912 , - 2727 , - 662 , - 1861 , - 180 , - 1763 , - 466 , - 2433 , - 1520 , - 799 , - 270 , - 3005 , - 2860 , - 2907 , - 74 , - 505 , - 1128 , - 1943 , - 2950 , - 1077 , - 2468 , - 979 , - 2754 , - 1649 , - 736 , - 15 , - 2558 , - 2221 , - 2076 , - 2123 , - 2362 , - 2793 , - 344 , - 1159 , - 2166 , - 293 , - 1684 , - 195 , - 1970 , - 865 , - 3024 , - 2303 , - 1774 , - 1437 , - 1292 , - 1339 , - 1578 , - 2009 , - 2632 , - 375 , - 1382 , - 2581 , - 900 , - 2483 , - 1186 , - 81 , - 2240 , - 1519 , - 990 , - 653 , - 508 , - 555 , - 794 , - 1225 , - 1848 , - 2663 , - 598 , - 1797 , - 116 , - 1699 , - 402 , - 2369 , - 1456 , - 735 , - 206 , - 2941 , - 2796 , - 2843 , - 10 , - 441 , - 1064 , - 1879 , - 2886 , - 1013 , - 2404 , - 915 , - 2690 , - 1585 , - 672 , - 3023 , - 2494 , - 2157 , - 2012 , - 2059 , - 2298 , - 2729 , - 280 , - 1095 , - 2102 , - 229 , - 1620 , - 131 , - 1906 , - 801 , - 2960 , - 2239 , - 1710 , - 1373 , - 1228 , - 1275 , - 1514 , - 1945 , - 2568 , - 311 , - 1318 , - 2517 , - 836 , - 2419 , - 1122 , - 17 , - 2176 , - 1455 , - 926 , - 589 , - 444 , - 491 , - 730 , - 1161 , - 1784 , - 2599 , - 534 , - 1733 , - 52 , - 1635 , - 338 , - 2305 , - 1392 , - 671 , - 142 , - 2877 , - 2732 , - 2779 , - 3018 , - 377 , - 1000 , - 1815 , - 2822 , - 949 , - 2340 , - 851 , - 2626 , - 1521 , - 608 , - 2959 , - 2430 , - 2093 , - 1948 , - 1995 , - 2234 , - 2665 , - 216 , - 1031 , - 2038 , - 165 , - 1556 , - 67 , - 1842 , - 737 , - 2896 , - 2175 , - 1646 , - 1309 , - 1164 , - 1211 , - 1450 , - 1881 , - 2504 , - 247 , - 1254 , - 2453 , - 772 , - 2355 , - 1058 , - 3025 , - 2112 , - 1391 , - 862 , - 525 , - 380 , - 427 , - 666 , - 1097 , - 1720 , - 2535 , - 470 , - 1669 , - 3060 , - 1571 , - 274 , - 2241 , - 1328 , - 607 , - 78 , - 2813 , - 2668 , - 2715 , - 2954 , - 313 , - 936 , - 1751 , - 2758 , - 885 , - 2276 , - 787 , - 2562 , - 1457 , - 544 , - 2895 , - 2366 , - 2029 , - 1884 , - 1931 , - 2170 , - 2601 , - 152 , - 967 , - 1974 , - 101 , - 1492 , - 3 , - 1778 , - 673 , - 2832 , - 2111 , - 1582 , - 1245 , - 1100 , - 1147 , - 1386 , - 1817 , - 2440 , - 183 , - 1190 , - 2389 , - 708 , - 2291 , - 994 , - 2961 , - 2048 , - 1327 , - 798 , - 461 , - 316 , - 363 , - 602 , - 1033 , - 1656 , - 2471 , - 406 , - 1605 , - 2996 , - 1507 , - 210 , - 2177 , - 1264 , - 543 , - 14 , - 2749 , - 2604 , - 2651 , - 2890 , - 249 , - 872 , - 1687 , - 2694 , - 821 , - 2212 , - 723 , - 2498 , - 1393 , - 480 , - 2831 , - 2302 , - 1965 , - 1820 , - 1867 , - 2106 , - 2537 , - 88 , - 903 , - 1910 , - 37 , - 1428 , - 3011 , - 1714 , - 609 , - 2768 , - 2047 , - 1518 , - 1181 , - 1036 , - 1083 , - 1322 , - 1753 , - 2376 , - 119 , - 1126 , - 2325 , - 644 , - 2227 , - 930 , - 2897 , - 1984 , - 1263 , - 734 , - 397 , - 252 , - 299 , - 538 , - 969 , - 1592 , - 2407 , - 342 , - 1541 , - 2932 , - 1443 , - 146 , - 2113 , - 1200 , - 479 , - 3022 , - 2685 , - 2540 , - 2587 , - 2826 , - 185 , - 808 , - 1623 , - 2630 , - 757 , - 2148 , - 659 , - 2434 , - 1329 , - 416 , - 2767 , - 2238 , - 1901 , - 1756 , - 1803 , - 2042 , - 2473 , - 24 , - 839 , - 1846 , - 3045 , - 1364 , - 2947 , - 1650 , - 545 , - 2704 , - 1983 , - 1454 , - 1117 , - 972 , - 1019 , - 1258 , - 1689 , - 2312 , - 55 , - 1062 , - 2261 , - 580 , - 2163 , - 866 , - 2833 , - 1920 , - 1199 , - 670 , - 333 , - 188 , - 235 , - 474 , - 905 , - 1528 , - 2343 , - 278 , - 1477 , - 2868 , - 1379 , - 82 , - 2049 , - 1136 , - 415 , - 2958 , - 2621 , - 2476 , - 2523 , - 2762 , - 121 , - 744 , - 1559 , - 2566 , - 693 , - 2084 , - 595 , - 2370 , - 1265 , - 352 , - 2703 , - 2174 , - 1837 , - 1692 , - 1739 , - 1978 , - 2409 , - 3032 , - 775 , - 1782 , - 2981 , - 1300 , - 2883 , - 1586 , - 481 , - 2640 , - 1919 , - 1390 , - 1053 , - 908 , - 955 , - 1194 , - 1625 , - 2248 , - 3063 , - 998 , - 2197 , - 516 , - 2099 , - 802 , - 2769 , - 1856 , - 1135 , - 606 , - 269 , - 124 , - 171 , - 410 , - 841 , - 1464 , - 2279 , - 214 , - 1413 , - 2804 , - 1315 , - 18 , - 1985 , - 1072 , - 351 , - 2894 , - 2557 , - 2412 , - 2459 , - 2698 , - 57 , - 680 , - 1495 , - 2502 , - 629 , - 2020 , - 531 , - 2306 , - 1201 , - 288 , - 2639 , - 2110 , - 1773 , - 1628 , - 1675 , - 1914 , - 2345 , - 2968 , - 711 , - 1718 , - 2917 , - 1236 , - 2819 , - 1522 , - 417 , - 2576 , - 1855 , - 1326 , - 989 , - 844 , - 891 , - 1130 , - 1561 , - 2184 , - 2999 , - 934 , - 2133 , - 452 , - 2035 , - 738 , - 2705 , - 1792 , - 1071 , - 542 , - 205 , - 60 , - 107 , - 346 , - 777 , - 1400 , - 2215 , - 150 , - 1349 , - 2740 , - 1251 , - 3026 , - 1921 , - 1008 , - 287 , - 2830 , - 2493 , - 2348 , - 2395 , - 2634 , - 3065 , - 616 , - 1431 , - 2438 , - 565 , - 1956 , - 467 , - 2242 , - 1137 , - 224 , - 2575 , - 2046 , - 1709 , - 1564 , - 1611 , - 1850 , - 2281 , - 2904 , - 647 , - 1654 , - 2853 , - 1172 , - 2755 , - 1458 , - 353 , - 2512 , - 1791 , - 1262 , - 925 , - 780 , - 827 , - 1066 , - 1497 , - 2120 , - 2935 , - 870 , - 2069 , - 388 , - 1971 , - 674 , - 2641 , - 1728 , - 1007 , - 478 , - 141 , - 3068 , - 43 , - 282 , - 713 , - 1336 , - 2151 , - 86 , - 1285 , - 2676 , - 1187 , - 2962 , - 1857 , - 944 , - 223 , - 2766 , - 2429 , - 2284 , - 2331 , - 2570 , - 3001 , - 552 , - 1367 , - 2374 , - 501 , - 1892 , - 403 , - 2178 , - 1073 , - 160 , - 2511 , - 1982 , - 1645 , - 1500 , - 1547 , - 1786 , - 2217 , - 2840 , - 583 , - 1590 , - 2789 , - 1108 , - 2691 , - 1394 , - 289 , - 2448 , - 1727 , - 1198 , - 861 , - 716 , - 763 , - 1002 , - 1433 , - 2056 , - 2871 , - 806 , - 2005 , - 324 , - 1907 , - 610 , - 2577 , - 1664 , - 943 , - 414 , - 77 , - 3004 , - 3051 , - 218 , - 649 , - 1272 , - 2087 , - 22 , - 1221 , - 2612 , - 1123 , - 2898 , - 1793 , - 880 , - 159 , - 2702 , - 2365 , - 2220 , - 2267 , - 2506 , - 2937 , - 488 , - 1303 , - 2310 , - 437 , - 1828 , - 339 , - 2114 , - 1009 , - 96 , - 2447 , - 1918 , - 1581 , - 1436 , - 1483 , - 1722 , - 2153 , - 2776 , - 519 , - 1526 , - 2725 , - 1044 , - 2627 , - 1330 , - 225 , - 2384 , - 1663 , - 1134 , - 797 , - 652 , - 699 , - 938 , - 1369 , - 1992 , - 2807 , - 742 , - 1941 , - 260 , - 1843 , - 546 , - 2513 , - 1600 , - 879 , - 350 , - 13 , - 2940 , - 2987 , - 154 , - 585 , - 1208 , - 2023 , - 3030 , - 1157 , - 2548 , - 1059 , - 2834 , - 1729 , - 816 , - 95 , - 2638 , - 2301 , - 2156 , - 2203 , - 2442 , - 2873 , - 424 , - 1239 , - 2246 , - 373 , - 1764 , - 275 , - 2050 , - 945 , - 32 , - 2383 , - 1854 , - 1517 , - 1372 , - 1419 , - 1658 , - 2089 , - 2712 , - 455 , - 1462 , - 2661 , - 980 , - 2563 , - 1266 , - 161 , - 2320 , - 1599 , - 1070 , - 733 , - 588 , - 635 , - 874 , - 1305 , - 1928 , - 2743 , - 678 , - 1877 , - 196 , - 1779 , - 482 , - 2449 , - 1536 , - 815 , - 286 , - 3021 , - 2876 , - 2923 , - 90 , - 521 , - 1144 , - 1959 , - 2966 , - 1093 , - 2484 , - 995 , - 2770 , - 1665 , - 752 , - 31 , - 2574 , - 2237 , - 2092 , - 2139 , - 2378 , - 2809 , - 360 , - 1175 , - 2182 , - 309 , - 1700 , - 211 , - 1986 , - 881 , - 3040 , - 2319 , - 1790 , - 1453 , - 1308 , - 1355 , - 1594 , - 2025 , - 2648 , - 391 , - 1398 , - 2597 , - 916 , - 2499 , - 1202 , - 97 , - 2256 , - 1535 , - 1006 , - 669 , - 524 , - 571 , - 810 , - 1241 , - 1864 , - 2679 , - 614 , - 1813 , - 132 , - 1715 , - 418 , - 2385 , - 1472 , - 751 , - 222 , - 2957 , - 2812 , - 2859 , - 26 , - 457 , - 1080 , - 1895 , - 2902 , - 1029 , - 2420 , - 931 , - 2706 , - 1601 , - 688 , - 3039 , - 2510 , - 2173 , - 2028 , - 2075 , - 2314 , - 2745 , - 296 , - 1111 , - 2118 , - 245 , - 1636 , - 147 , - 1922 , - 817 , - 2976 , - 2255 , - 1726 , - 1389 , - 1244 , - 1291 , - 1530 , - 1961 , - 2584 , - 327 , - 1334 , - 2533 , - 852 , - 2435 , - 1138 , - 33 , - 2192 , - 1471 , - 942 , - 605 , - 460 , - 507 , - 746 , - 1177 , - 1800 , - 2615 , - 550 , - 1749 , - 68 , - 1651 , - 354 , - 2321 , - 1408 , - 687 , - 158 , - 2893 , - 2748 , - 2795 , - 3034 , - 393 , - 1016 , - 1831 , - 2838 , - 965 , - 2356 , - 867 , - 2642 , - 1537 , - 624 , - 2975 , - 2446 , - 2109 , - 1964 , - 2011 , - 2250 , - 2681 , - 232 , - 1047 , - 2054 , - 181 , - 1572 , - 83 , - 1858 , - 753 , - 2912 , - 2191 , - 1662 , - 1325 , - 1180 , - 1227 , - 1466 , - 1897 , - 2520 , - 263 , - 1270 , - 2469 , - 788 , - 2371 , - 1074 , - 3041 , - 2128 , - 1407 , - 878 , - 541 , - 396 , - 443 , - 682 , - 1113 , - 1736 , - 2551 , - 486 , - 1685 , - 4 , - 1587 , - 290 , - 2257 , - 1344 , - 623 , - 94 , - 2829 , - 2684 , - 2731 , - 2970 , - 329 , - 952 , - 1767 , - 2774 , - 901 , - 2292 , - 803 , - 2578 , - 1473 , - 560 , - 2911 , - 2382 , - 2045 , - 1900 , - 1947 , - 2186 , - 2617 , - 168 , - 983 , - 1990 , - 117 , - 1508 , - 19 , - 1794 , - 689 , - 2848 , - 2127 , - 1598 , - 1261 , - 1116 , - 1163 , - 1402 , - 1833 , - 2456 , - 199 , - 1206 , - 2405 , - 724 , - 2307 , - 1010 , - 2977 , - 2064 , - 1343 , - 814 , - 477 , - 332 , - 379 , - 618 , - 1049 , - 1672 , - 2487 , - 422 , - 1621 , - 3012 , - 1523 , - 226 , - 2193 , - 1280 , - 559 , - 30 , - 2765 , - 2620 , - 2667 , - 2906 , - 265 , - 888 , - 1703 , - 2710 , - 837 , - 2228 , - 739 , - 2514 , - 1409 , - 496 , - 2847 , - 2318 , - 1981 , - 1836 , - 1883 , - 2122 , - 2553 , - 104 , - 919 , - 1926 , - 53 , - 1444 , - 3027 , - 1730 , - 625 , - 2784 , - 2063 , - 1534 , - 1197 , - 1052 , - 1099 , - 1338 , - 1769 , - 2392 , - 135 , - 1142 , - 2341 , - 660 , - 2243 , - 946 , - 2913 , - 2000 , - 1279 , - 750 , - 413 , - 268 , - 315 , - 554 , - 985 , - 1608 , - 2423 , - 358 , - 1557 , - 2948 , - 1459 , - 162 , - 2129 , - 1216 , - 495 , - 3038 , - 2701 , - 2556 , - 2603 , - 2842 , - 201 , - 824 , - 1639 , - 2646 , - 773 , - 2164 , - 675 , - 2450 , - 1345 , - 432 , - 2783 , - 2254 , - 1917 , - 1772 , - 1819 , - 2058 , - 2489 , - 40 , - 855 , - 1862 , - 3061 , - 1380 , - 2963 , - 1666 , - 561 , - 2720 , - 1999 , - 1470 , - 1133 , - 988 , - 1035 , - 1274 , - 1705 , - 2328 , - 71 , - 1078 , - 2277 , - 596 , - 2179 , - 882 , - 2849 , - 1936 , - 1215 , - 686 , - 349 , - 204 , - 251 , - 490 , - 921 , - 1544 , - 2359 , - 294 , - 1493 , - 2884 , - 1395 , - 98 , - 2065 , - 1152 , - 431 , - 2974 , - 2637 , - 2492 , - 2539 , - 2778 , - 137 , - 760 , - 1575 , - 2582 , - 709 , - 2100 , - 611 , - 2386 , - 1281 , - 368 , - 2719 , - 2190 , - 1853 , - 1708 , - 1755 , - 1994 , - 2425 , - 3048 , - 791 , - 1798 , - 2997 , - 1316 , - 2899 , - 1602 , - 497 , - 2656 , - 1935 , - 1406 , - 1069 , - 924 , - 971 , - 1210 , - 1641 , - 2264 , - 7 , - 1014 , - 2213 , - 532 , - 2115 , - 818 , - 2785 , - 1872 , - 1151 , - 622 , - 285 , - 140 , - 187 , - 426 , - 857 , - 1480 , - 2295 , - 230 , - 1429 , - 2820 , - 1331 , - 34 , - 2001 , - 1088 , - 367 , - 2910 , - 2573 , - 2428 , - 2475 , - 2714 , - 73 , - 696 , - 1511 , - 2518 , - 645 , - 2036 , - 547 , - 2322 , - 1217 , - 304 , - 2655 , - 2126 , - 1789 , - 1644 , - 1691 , - 1930 , - 2361 , - 2984 , - 727 , - 1734 , - 2933 , - 1252 , - 2835 , - 1538 , - 433 , - 2592 , - 1871 , - 1342 , - 1005 , - 860 , - 907 , - 1146 , - 1577 , - 2200 , - 3015 , - 950 , - 2149 , - 468 , - 2051 , - 754 , - 2721 , - 1808 , - 1087 , - 558 , - 221 , - 76 , - 123 , - 362 , - 793 , - 1416 , - 2231 , - 166 , - 1365 , - 2756 , - 1267 , - 3042 , - 1937 , - 1024 , - 303 , - 2846 , - 2509 , - 2364 , - 2411 , - 2650 , - 9 , - 632 , - 1447 , - 2454 , - 581 , - 1972 , - 483 , - 2258 , - 1153 , - 240 , - 2591 , - 2062 , - 1725 , - 1580 , - 1627 , - 1866 , - 2297 , - 2920 , - 663 , - 1670 , - 2869 , - 1188 , - 2771 , - 1474 , - 369 , - 2528 , - 1807 , - 1278 , - 941 , - 796 , - 843 , - 1082 , - 1513 , - 2136 , - 2951 , - 886 , - 2085 , - 404 , - 1987 , - 690 , - 2657 , - 1744 , - 1023 , - 494 , - 157 , - 12 , - 59 , - 298 , - 729 , - 1352 , - 2167 , - 102 , - 1301 , - 2692 , - 1203 , - 2978 , - 1873 , - 960 , - 239 , - 2782 , - 2445 , - 2300 , - 2347 , - 2586 , - 3017 , - 568 , - 1383 , - 2390 , - 517 , - 1908 , - 419 , - 2194 , - 1089 , - 176 , - 2527 , - 1998 , - 1661 , - 1516 , - 1563 , - 1802 , - 2233 , - 2856 , - 599 , - 1606 , - 2805 , - 1124 , - 2707 , - 1410 , - 305 , - 2464 , - 1743 , - 1214 , - 877 , - 732 , - 779 , - 1018 , - 1449 , - 2072 , - 2887 , - 822 , - 2021 , - 340 , - 1923 , - 626 , - 2593 , - 1680 , - 959 , - 430 , - 93 , - 3020 , - 3067 , - 234 , - 665 , - 1288 , - 2103 , - 38 , - 1237 , - 2628 , - 1139 , - 2914 , - 1809 , - 896 , - 175 , - 2718 , - 2381 , - 2236 , - 2283 , - 2522 , - 2953 , - 504 , - 1319 , - 2326 , - 453 , - 1844 , - 355 , - 2130 , - 1025 , - 112 , - 2463 , - 1934 , - 1597 , - 1452 , - 1499 , - 1738 , - 2169 , - 2792 , - 535 , - 1542 , - 2741 , - 1060 , - 2643 , - 1346 , - 241 , - 2400 , - 1679 , - 1150 , - 813 , - 668 , - 715 , - 954 , - 1385 , - 2008 , - 2823 , - 758 , - 1957 , - 276 , - 1859 , - 562 , - 2529 , - 1616 , - 895 , - 366 , - 29 , - 2956 , - 3003 , - 170 , - 601 , - 1224 , - 2039 , - 3046 , - 1173 , - 2564 , - 1075 , - 2850 , - 1745 , - 832 , - 111 , - 2654 , - 2317 , - 2172 , - 2219 , - 2458 , - 2889 , - 440 , - 1255 , - 2262 , - 389 , - 1780 , - 291 , - 2066 , - 961 , - 48 , - 2399 , - 1870 , - 1533 , - 1388 , - 1435 , - 1674 , - 2105 , - 2728 , - 471 , - 1478 , - 2677 , - 996 , - 2579 , - 1282 , - 177 , - 2336 , - 1615 , - 1086 , - 749 , - 604 , - 651 , - 890 , - 1321 , - 1944 , - 2759 , - 694 , - 1893 , - 212 , - 1795 , - 498 , - 2465 , - 1552 , - 831 , - 302 , - 3037 , - 2892 , - 2939 , - 106 , - 537 , - 1160 , - 1975 , - 2982 , - 1109 , - 2500 , - 1011 , - 2786 , - 1681 , - 768 , - 47 , - 2590 , - 2253 , - 2108 , - 2155 , - 2394 , - 2825 , - 376 , - 1191 , - 2198 , - 325 , - 1716 , - 227 , - 2002 , - 897 , - 3056 , - 2335 , - 1806 , - 1469 , - 1324 , - 1371 , - 1610 , - 2041 , - 2664 , - 407 , - 1414 , - 2613 , - 932 , - 2515 , - 1218 , - 113 , - 2272 , - 1551 , - 1022 , - 685 , - 540 , - 587 , - 826 , - 1257 , - 1880 , - 2695 , - 630 , - 1829 , - 148 , - 1731 , - 434 , - 2401 , - 1488 , - 767 , - 238 , - 2973 , - 2828 , - 2875 , - 42 , - 473 , - 1096 , - 1911 , - 2918 , - 1045 , - 2436 , - 947 , - 2722 , - 1617 , - 704 , - 3055 , - 2526 , - 2189 , - 2044 , - 2091 , - 2330 , - 2761 , - 312 , - 1127 , - 2134 , - 261 , - 1652 , - 163 , - 1938 , - 833 , - 2992 , - 2271 , - 1742 , - 1405 , - 1260 , - 1307 , - 1546 , - 1977 , - 2600 , - 343 , - 1350 , - 2549 , - 868 , - 2451 , - 1154 , - 49 , - 2208 , - 1487 , - 958 , - 621 , - 476 , - 523 , - 762 , - 1193 , - 1816 , - 2631 , - 566 , - 1765 , - 84 , - 1667 , - 370 , - 2337 , - 1424 , - 703 , - 174 , - 2909 , - 2764 , - 2811 , - 3050 , - 409 , - 1032 , - 1847 , - 2854 , - 981 , - 2372 , - 883 , - 2658 , - 1553 , - 640 , - 2991 , - 2462 , - 2125 , - 1980 , - 2027 , - 2266 , - 2697 , - 248 , - 1063 , - 2070 , - 197 , - 1588 , - 99 , - 1874 , - 769 , - 2928 , - 2207 , - 1678 , - 1341 , - 1196 , - 1243 , - 1482 , - 1913 , - 2536 , - 279 , - 1286 , - 2485 , - 804 , - 2387 , - 1090 , - 3057 , - 2144 , - 1423 , - 894 , - 557 , - 412 , - 459 , - 698 , - 1129 , - 1752 , - 2567 , - 502 , - 1701 , - 20 , - 1603 , - 306 , - 2273 , - 1360 , - 639 , - 110 , - 2845 , - 2700 , - 2747 , - 2986 , - 345 , - 968 , - 1783 , - 2790 , - 917 , - 2308 , - 819 , - 2594 , - 1489 , - 576 , - 2927 , - 2398 , - 2061 , - 1916 , - 1963 , - 2202 , - 2633 , - 184 , - 999 , - 2006 , - 133 , - 1524 , - 35 , - 1810 , - 705 , - 2864 , - 2143 , - 1614 , - 1277 , - 1132 , - 1179 , - 1418 , - 1849 , - 2472 , - 215 , - 1222 , - 2421 , - 740 , - 2323 , - 1026 , - 2993 , - 2080 , - 1359 , - 830 , - 493 , - 348 , - 395 , - 634 , - 1065 , - 1688 , - 2503 , - 438 , - 1637 , - 3028 , - 1539 , - 242 , - 2209 , - 1296 , - 575 , - 46 , - 2781 , - 2636 , - 2683 , - 2922 , - 281 , - 904 , - 1719 , - 2726 , - 853 , - 2244 , - 755 , - 2530 , - 1425 , - 512 , - 2863 , - 2334 , - 1997 , - 1852 , - 1899 , - 2138 , - 2569 , - 120 , - 935 , - 1942 , - 69 , - 1460 , - 3043 , - 1746 , - 641 , - 2800 , - 2079 , - 1550 , - 1213 , - 1068 , - 1115 , - 1354 , - 1785 , - 2408 , - 151 , - 1158 , - 2357 , - 676 , - 2259 , - 962 , - 2929 , - 2016 , - 1295 , - 766 , - 429 , - 284 , - 331 , - 570 , - 1001 , - 1624 , - 2439 , - 374 , - 1573 , - 2964 , - 1475 , - 178 , - 2145 , - 1232 , - 511 , - 3054 , - 2717 , - 2572 , - 2619 , - 2858 , - 217 , - 840 , - 1655 , - 2662 , - 789 , - 2180 , - 691 , - 2466 , - 1361 , - 448 , - 2799 , - 2270 , - 1933 , - 1788 , - 1835 , - 2074 , - 2505 , - 56 , - 871 , - 1878 , - 5 , - 1396 , - 2979 , - 1682 , - 577 , - 2736 , - 2015 , - 1486 , - 1149 , - 1004 , - 1051 , - 1290 , - 1721 , - 2344 , - 87 , - 1094 , - 2293 , - 612 , - 2195 , - 898 , - 2865 , - 1952 , - 1231 , - 702 , - 365 , - 220 , - 267 , - 506 , - 937 , - 1560 , - 2375 , - 310 , - 1509 , - 2900 , - 1411 , - 114 , - 2081 , - 1168 , - 447 , - 2990 , - 2653 , - 2508 , - 2555 , - 2794 , - 153 , - 776 , - 1591 , - 2598 , - 725 , - 2116 , - 627 , - 2402 , - 1297 , - 384 , - 2735 , - 2206 , - 1869 , - 1724 , - 1771 , - 2010 , - 2441 , - 3064 , - 807 , - 1814 , - 3013 , - 1332 , - 2915 , - 1618 , - 513 , - 2672 , - 1951 , - 1422 , - 1085 , - 940 , - 987 , - 1226 , - 1657 , - 2280 , - 23 , - 1030 , - 2229 , - 548 , - 2131 , - 834 , - 2801 , - 1888 , - 1167 , - 638 , - 301 , - 156 , - 203 , - 442 , - 873 , - 1496 , - 2311 , - 246 , - 1445 , - 2836 , - 1347 , - 50 , - 2017 , - 1104 , - 383 , - 2926 , - 2589 , - 2444 , - 2491 , - 2730 , - 89 , - 712 , - 1527 , - 2534 , - 661 , - 2052 , - 563 , - 2338 , - 1233 , - 320 , - 2671 , - 2142 , - 1805 , - 1660 , - 1707 , - 1946 , - 2377 , - 3000 , - 743 , - 1750 , - 2949 , - 1268 , - 2851 , - 1554 , - 449 , - 2608 , - 1887 , - 1358 , - 1021 , - 876 , - 923 , - 1162 , - 1593 , - 2216 , - 3031 , - 966 , - 2165 , - 484 , - 2067 , - 770 , - 2737 , - 1824 , - 1103 , - 574 , - 237 , - 92 , - 139 , - 378 , - 809 , - 1432 , - 2247 , - 182 , - 1381 , - 2772 , - 1283 , - 3058 , - 1953 , - 1040 , - 319 , - 2862 , - 2525 , - 2380 , - 2427 , - 2666 , - 25 , - 648 , - 1463 , - 2470 , - 597 , - 1988 , - 499 , - 2274 , - 1169 , - 256 , - 2607 , - 2078 , - 1741 , - 1596 , - 1643 , - 1882 , - 2313 , - 2936 , - 679 , - 1686 , - 2885 , - 1204 , - 2787 , - 1490 , - 385 , - 2544 , - 1823 , - 1294 , - 957 , - 812 , - 859 , - 1098 , - 1529 , - 2152 , - 2967 , - 902 , - 2101 , - 420 , - 2003 , - 706 , - 2673 , - 1760 , - 1039 , - 510 , - 173 , - 28 , - 75 , - 314 , - 745 , - 1368 , - 2183 , - 118 , - 1317 , - 2708 , - 1219 , - 2994 , - 1889 , - 976 , - 255 , - 2798 , - 2461 , - 2316 , - 2363 , - 2602 , - 3033 , - 584 , - 1399 , - 2406 , - 533 , - 1924 , - 435 , - 2210 , - 1105 , - 192 , - 2543 , - 2014 , - 1677 , - 1532 , - 1579 , - 1818 , - 2249 , - 2872 , - 615 , - 1622 , - 2821 , - 1140 , - 2723 , - 1426 , - 321 , - 2480 , - 1759 , - 1230 , - 893 , - 748 , - 795 , - 1034 , - 1465 , - 2088 , - 2903 , - 838 , - 2037 , - 356 , - 1939 , - 642 , - 2609 , - 1696 , - 975 , - 446 , - 109 , - 3036 , - 11 , - 250 , - 681 , - 1304 , - 2119 , - 54 , - 1253 , - 2644 , - 1155 , - 2930 , - 1825 , - 912 , - 191 , - 2734 , - 2397 , - 2252 , - 2299 , - 2538 , - 2969 , - 520 , - 1335 , - 2342 , - 469 , - 1860 , - 371 , - 2146 , - 1041 , - 128 , - 2479 , - 1950 , - 1613 , - 1468 , - 1515 , - 1754 , - 2185 , - 2808 , - 551 , - 1558 , - 2757 , - 1076 , - 2659 , - 1362 , - 257 , - 2416 , - 1695 , - 1166 , - 829 , - 684 , - 731 , - 970 , - 1401 , - 2024 , - 2839 , - 774 , - 1973 , - 292 , - 1875 , - 578 , - 2545 , - 1632 , - 911 , - 382 , - 45 , - 2972 , - 3019 , - 186 , - 617 , - 1240 , - 2055 , - 3062 , - 1189 , - 2580 , - 1091 , - 2866 , - 1761 , - 848 , - 127 , - 2670 , - 2333 , - 2188 , - 2235 , - 2474 , - 2905 , - 456 , - 1271 , - 2278 , - 405 , - 1796 , - 307 , - 2082 , - 977 , - 64 , - 2415 , - 1886 , - 1549 , - 1404 , - 1451 , - 1690 , - 2121 , - 2744 , - 487 , - 1494 , - 2693 , - 1012 , - 2595 , - 1298 , - 193 , - 2352 , - 1631 , - 1102 , - 765 , - 620 , - 667 , - 906 , - 1337 , - 1960 , - 2775 , - 710 , - 1909 , - 228 , - 1811 , - 514 , - 2481 , - 1568 , - 847 , - 318 , - 3053 , - 2908 , - 2955 , - 122 , - 553 , - 1176 , - 1991 , - 2998 , - 1125 , - 2516 , - 1027 , - 2802 , - 1697 , - 784 , - 63 , - 2606 , - 2269 , - 2124 , - 2171 , - 2410 , - 2841 , - 392 , - 1207 , - 2214 , - 341 , - 1732 , - 243 , - 2018 , - 913 , - 0 , - 2169 , - 474 , - 1187 , - 1172 , - 429 , - 2094 , - 3031 , - 104 , - 2721 , - 1474 , - 2635 , - 3068 , - 2773 , - 1750 , - 3135 , - 656 , - 585 , - 2922 , - 1395 , - 2276 , - 2429 , - 1854 , - 551 , - 1656 , - 2033 , - 1682 , - 603 , - 1932 , - 2533 , - 2406 , - 1551 , - 3104 , - 793 , - 890 , - 259 , - 2036 , - 3085 , - 270 , - 2999 , - 1864 , - 1 , - 546 , - 363 , - 2588 , - 949 , - 1718 , - 1759 , - 1072 , - 2793 , - 650 , - 915 , - 452 , - 2397 , - 478 , - 967 , - 728 , - 2897 , - 1202 , - 1915 , - 1900 , - 1157 , - 2822 , - 623 , - 832 , - 313 , - 2202 , - 227 , - 660 , - 365 , - 2478 , - 727 , - 1384 , - 1313 , - 514 , - 2123 , - 3004 , - 21 , - 2582 , - 1279 , - 2384 , - 2761 , - 2410 , - 1331 , - 2660 , - 125 , - 3134 , - 2279 , - 696 , - 1521 , - 1618 , - 987 , - 2764 , - 677 , - 998 , - 591 , - 2592 , - 729 , - 1274 , - 1091 , - 180 , - 1677 , - 2446 , - 2487 , - 1800 , - 385 , - 1378 , - 1643 , - 1180 , - 3125 , - 1206 , - 1695 , - 1456 , - 489 , - 1930 , - 2643 , - 2628 , - 1885 , - 414 , - 1351 , - 1560 , - 1041 , - 2930 , - 955 , - 1388 , - 1093 , - 70 , - 1455 , - 2112 , - 2041 , - 1242 , - 2851 , - 596 , - 749 , - 174 , - 2007 , - 3112 , - 353 , - 2 , - 2059 , - 252 , - 853 , - 726 , - 3007 , - 1424 , - 2249 , - 2346 , - 1715 , - 356 , - 1405 , - 1726 , - 1319 , - 184 , - 1457 , - 2002 , - 1819 , - 908 , - 2405 , - 38 , - 79 , - 2528 , - 1113 , - 2106 , - 2371 , - 1908 , - 717 , - 1934 , - 2423 , - 2184 , - 1217 , - 2658 , - 235 , - 220 , - 2613 , - 1142 , - 2079 , - 2288 , - 1769 , - 522 , - 1683 , - 2116 , - 1821 , - 798 , - 2183 , - 2840 , - 2769 , - 1970 , - 443 , - 1324 , - 1477 , - 902 , - 2735 , - 704 , - 1081 , - 730 , - 2787 , - 980 , - 1581 , - 1454 , - 599 , - 2152 , - 2977 , - 3074 , - 2443 , - 1084 , - 2133 , - 2454 , - 2047 , - 912 , - 2185 , - 2730 , - 2547 , - 1636 , - 3133 , - 766 , - 807 , - 120 , - 1841 , - 2834 , - 3099 , - 2636 , - 1445 , - 2662 , - 15 , - 2912 , - 1945 , - 250 , - 963 , - 948 , - 205 , - 1870 , - 2807 , - 3016 , - 2497 , - 1250 , - 2411 , - 2844 , - 2549 , - 1526 , - 2911 , - 432 , - 361 , - 2698 , - 1171 , - 2052 , - 2205 , - 1630 , - 327 , - 1432 , - 1809 , - 1458 , - 379 , - 1708 , - 2309 , - 2182 , - 1327 , - 2880 , - 569 , - 666 , - 35 , - 1812 , - 2861 , - 46 , - 2775 , - 1640 , - 2913 , - 322 , - 139 , - 2364 , - 725 , - 1494 , - 1535 , - 848 , - 2569 , - 426 , - 691 , - 228 , - 2173 , - 254 , - 743 , - 504 , - 2673 , - 978 , - 1691 , - 1676 , - 933 , - 2598 , - 399 , - 608 , - 89 , - 1978 , - 3 , - 436 , - 141 , - 2254 , - 503 , - 1160 , - 1089 , - 290 , - 1899 , - 2780 , - 2933 , - 2358 , - 1055 , - 2160 , - 2537 , - 2186 , - 1107 , - 2436 , - 3037 , - 2910 , - 2055 , - 472 , - 1297 , - 1394 , - 763 , - 2540 , - 453 , - 774 , - 367 , - 2368 , - 505 , - 1050 , - 867 , - 3092 , - 1453 , - 2222 , - 2263 , - 1576 , - 161 , - 1154 , - 1419 , - 956 , - 2901 , - 982 , - 1471 , - 1232 , - 265 , - 1706 , - 2419 , - 2404 , - 1661 , - 190 , - 1127 , - 1336 , - 817 , - 2706 , - 731 , - 1164 , - 869 , - 2982 , - 1231 , - 1888 , - 1817 , - 1018 , - 2627 , - 372 , - 525 , - 3086 , - 1783 , - 2888 , - 129 , - 2914 , - 1835 , - 28 , - 629 , - 502 , - 2783 , - 1200 , - 2025 , - 2122 , - 1491 , - 132 , - 1181 , - 1502 , - 1095 , - 3096 , - 1233 , - 1778 , - 1595 , - 684 , - 2181 , - 2950 , - 2991 , - 2304 , - 889 , - 1882 , - 2147 , - 1684 , - 493 , - 1710 , - 2199 , - 1960 , - 993 , - 2434 , - 11 , - 3132 , - 2389 , - 918 , - 1855 , - 2064 , - 1545 , - 298 , - 1459 , - 1892 , - 1597 , - 574 , - 1959 , - 2616 , - 2545 , - 1746 , - 219 , - 1100 , - 1253 , - 678 , - 2511 , - 480 , - 857 , - 506 , - 2563 , - 756 , - 1357 , - 1230 , - 375 , - 1928 , - 2753 , - 2850 , - 2219 , - 860 , - 1909 , - 2230 , - 1823 , - 688 , - 1961 , - 2506 , - 2323 , - 1412 , - 2909 , - 542 , - 583 , - 3032 , - 1617 , - 2610 , - 2875 , - 2412 , - 1221 , - 2438 , - 2927 , - 2688 , - 1721 , - 26 , - 739 , - 724 , - 3117 , - 1646 , - 2583 , - 2792 , - 2273 , - 1026 , - 2187 , - 2620 , - 2325 , - 1302 , - 2687 , - 208 , - 137 , - 2474 , - 947 , - 1828 , - 1981 , - 1406 , - 103 , - 1208 , - 1585 , - 1234 , - 155 , - 1484 , - 2085 , - 1958 , - 1103 , - 2656 , - 345 , - 442 , - 2947 , - 1588 , - 2637 , - 2958 , - 2551 , - 1416 , - 2689 , - 98 , - 3051 , - 2140 , - 501 , - 1270 , - 1311 , - 624 , - 2345 , - 202 , - 467 , - 4 , - 1949 , - 30 , - 519 , - 280 , - 2449 , - 754 , - 1467 , - 1452 , - 709 , - 2374 , - 175 , - 384 , - 3001 , - 1754 , - 2915 , - 212 , - 3053 , - 2030 , - 279 , - 936 , - 865 , - 66 , - 1675 , - 2556 , - 2709 , - 2134 , - 831 , - 1936 , - 2313 , - 1962 , - 883 , - 2212 , - 2813 , - 2686 , - 1831 , - 248 , - 1073 , - 1170 , - 539 , - 2316 , - 229 , - 550 , - 143 , - 2144 , - 281 , - 826 , - 643 , - 2868 , - 1229 , - 1998 , - 2039 , - 1352 , - 3073 , - 930 , - 1195 , - 732 , - 2677 , - 758 , - 1247 , - 1008 , - 41 , - 1482 , - 2195 , - 2180 , - 1437 , - 3102 , - 903 , - 1112 , - 593 , - 2482 , - 507 , - 940 , - 645 , - 2758 , - 1007 , - 1664 , - 1593 , - 794 , - 2403 , - 148 , - 301 , - 2862 , - 1559 , - 2664 , - 3041 , - 2690 , - 1611 , - 2940 , - 405 , - 278 , - 2559 , - 976 , - 1801 , - 1898 , - 1267 , - 3044 , - 957 , - 1278 , - 871 , - 2872 , - 1009 , - 1554 , - 1371 , - 460 , - 1957 , - 2726 , - 2767 , - 2080 , - 665 , - 1658 , - 1923 , - 1460 , - 269 , - 1486 , - 1975 , - 1736 , - 769 , - 2210 , - 2923 , - 2908 , - 2165 , - 694 , - 1631 , - 1840 , - 1321 , - 74 , - 1235 , - 1668 , - 1373 , - 350 , - 1735 , - 2392 , - 2321 , - 1522 , - 3131 , - 876 , - 1029 , - 454 , - 2287 , - 256 , - 633 , - 282 , - 2339 , - 532 , - 1133 , - 1006 , - 151 , - 1704 , - 2529 , - 2626 , - 1995 , - 636 , - 1685 , - 2006 , - 1599 , - 464 , - 1737 , - 2282 , - 2099 , - 1188 , - 2685 , - 318 , - 359 , - 2808 , - 1393 , - 2386 , - 2651 , - 2188 , - 997 , - 2214 , - 2703 , - 2464 , - 1497 , - 2938 , - 515 , - 500 , - 2893 , - 1422 , - 2359 , - 2568 , - 2049 , - 802 , - 1963 , - 2396 , - 2101 , - 1078 , - 2463 , - 3120 , - 3049 , - 2250 , - 723 , - 1604 , - 1757 , - 1182 , - 3015 , - 984 , - 1361 , - 1010 , - 3067 , - 1260 , - 1861 , - 1734 , - 879 , - 2432 , - 121 , - 218 , - 2723 , - 1364 , - 2413 , - 2734 , - 2327 , - 1192 , - 2465 , - 3010 , - 2827 , - 1916 , - 277 , - 1046 , - 1087 , - 400 , - 2121 , - 3114 , - 243 , - 2916 , - 1725 , - 2942 , - 295 , - 56 , - 2225 , - 530 , - 1243 , - 1228 , - 485 , - 2150 , - 3087 , - 160 , - 2777 , - 1530 , - 2691 , - 3124 , - 2829 , - 1806 , - 55 , - 712 , - 641 , - 2978 , - 1451 , - 2332 , - 2485 , - 1910 , - 607 , - 1712 , - 2089 , - 1738 , - 659 , - 1988 , - 2589 , - 2462 , - 1607 , - 24 , - 849 , - 946 , - 315 , - 2092 , - 5 , - 326 , - 3055 , - 1920 , - 57 , - 602 , - 419 , - 2644 , - 1005 , - 1774 , - 1815 , - 1128 , - 2849 , - 706 , - 971 , - 508 , - 2453 , - 534 , - 1023 , - 784 , - 2953 , - 1258 , - 1971 , - 1956 , - 1213 , - 2878 , - 679 , - 888 , - 369 , - 2258 , - 283 , - 716 , - 421 , - 2534 , - 783 , - 1440 , - 1369 , - 570 , - 2179 , - 3060 , - 77 , - 2638 , - 1335 , - 2440 , - 2817 , - 2466 , - 1387 , - 2716 , - 181 , - 54 , - 2335 , - 752 , - 1577 , - 1674 , - 1043 , - 2820 , - 733 , - 1054 , - 647 , - 2648 , - 785 , - 1330 , - 1147 , - 236 , - 1733 , - 2502 , - 2543 , - 1856 , - 441 , - 1434 , - 1699 , - 1236 , - 45 , - 1262 , - 1751 , - 1512 , - 545 , - 1986 , - 2699 , - 2684 , - 1941 , - 470 , - 1407 , - 1616 , - 1097 , - 2986 , - 1011 , - 1444 , - 1149 , - 126 , - 1511 , - 2168 , - 2097 , - 1298 , - 2907 , - 652 , - 805 , - 230 , - 2063 , - 32 , - 409 , - 58 , - 2115 , - 308 , - 909 , - 782 , - 3063 , - 1480 , - 2305 , - 2402 , - 1771 , - 412 , - 1461 , - 1782 , - 1375 , - 240 , - 1513 , - 2058 , - 1875 , - 964 , - 2461 , - 94 , - 135 , - 2584 , - 1169 , - 2162 , - 2427 , - 1964 , - 773 , - 1990 , - 2479 , - 2240 , - 1273 , - 2714 , - 291 , - 276 , - 2669 , - 1198 , - 2135 , - 2344 , - 1825 , - 578 , - 1739 , - 2172 , - 1877 , - 854 , - 2239 , - 2896 , - 2825 , - 2026 , - 499 , - 1380 , - 1533 , - 958 , - 2791 , - 760 , - 1137 , - 786 , - 2843 , - 1036 , - 1637 , - 1510 , - 655 , - 2208 , - 3033 , - 3130 , - 2499 , - 1140 , - 2189 , - 2510 , - 2103 , - 968 , - 2241 , - 2786 , - 2603 , - 1692 , - 53 , - 822 , - 863 , - 176 , - 1897 , - 2890 , - 19 , - 2692 , - 1501 , - 2718 , - 71 , - 2968 , - 2001 , - 306 , - 1019 , - 1004 , - 261 , - 1926 , - 2863 , - 3072 , - 2553 , - 1306 , - 2467 , - 2900 , - 2605 , - 1582 , - 2967 , - 488 , - 417 , - 2754 , - 1227 , - 2108 , - 2261 , - 1686 , - 383 , - 1488 , - 1865 , - 1514 , - 435 , - 1764 , - 2365 , - 2238 , - 1383 , - 2936 , - 625 , - 722 , - 91 , - 1868 , - 2917 , - 102 , - 2831 , - 1696 , - 2969 , - 378 , - 195 , - 2420 , - 781 , - 1550 , - 1591 , - 904 , - 2625 , - 482 , - 747 , - 284 , - 2229 , - 310 , - 799 , - 560 , - 2729 , - 1034 , - 1747 , - 1732 , - 989 , - 2654 , - 455 , - 664 , - 145 , - 2034 , - 59 , - 492 , - 197 , - 2310 , - 559 , - 1216 , - 1145 , - 346 , - 1955 , - 2836 , - 2989 , - 2414 , - 1111 , - 2216 , - 2593 , - 2242 , - 1163 , - 2492 , - 3093 , - 2966 , - 2111 , - 528 , - 1353 , - 1450 , - 819 , - 2596 , - 509 , - 830 , - 423 , - 2424 , - 561 , - 1106 , - 923 , - 12 , - 1509 , - 2278 , - 2319 , - 1632 , - 217 , - 1210 , - 1475 , - 1012 , - 2957 , - 1038 , - 1527 , - 1288 , - 321 , - 1762 , - 2475 , - 2460 , - 1717 , - 246 , - 1183 , - 1392 , - 873 , - 2762 , - 787 , - 1220 , - 925 , - 3038 , - 1287 , - 1944 , - 1873 , - 1074 , - 2683 , - 428 , - 581 , - 6 , - 1839 , - 2944 , - 185 , - 2970 , - 1891 , - 84 , - 685 , - 558 , - 2839 , - 1256 , - 2081 , - 2178 , - 1547 , - 188 , - 1237 , - 1558 , - 1151 , - 16 , - 1289 , - 1834 , - 1651 , - 740 , - 2237 , - 3006 , - 3047 , - 2360 , - 945 , - 1938 , - 2203 , - 1740 , - 549 , - 1766 , - 2255 , - 2016 , - 1049 , - 2490 , - 67 , - 52 , - 2445 , - 974 , - 1911 , - 2120 , - 1601 , - 354 , - 1515 , - 1948 , - 1653 , - 630 , - 2015 , - 2672 , - 2601 , - 1802 , - 275 , - 1156 , - 1309 , - 734 , - 2567 , - 536 , - 913 , - 562 , - 2619 , - 812 , - 1413 , - 1286 , - 431 , - 1984 , - 2809 , - 2906 , - 2275 , - 916 , - 1965 , - 2286 , - 1879 , - 744 , - 2017 , - 2562 , - 2379 , - 1468 , - 2965 , - 598 , - 639 , - 3088 , - 1673 , - 2666 , - 2931 , - 2468 , - 1277 , - 2494 , - 2983 , - 2744 , - 1777 , - 82 , - 795 , - 780 , - 37 , - 1702 , - 2639 , - 2848 , - 2329 , - 1082 , - 2243 , - 2676 , - 2381 , - 1358 , - 2743 , - 264 , - 193 , - 2530 , - 1003 , - 1884 , - 2037 , - 1462 , - 159 , - 1264 , - 1641 , - 1290 , - 211 , - 1540 , - 2141 , - 2014 , - 1159 , - 2712 , - 401 , - 498 , - 3003 , - 1644 , - 2693 , - 3014 , - 2607 , - 1472 , - 2745 , - 154 , - 3107 , - 2196 , - 557 , - 1326 , - 1367 , - 680 , - 2401 , - 258 , - 523 , - 60 , - 2005 , - 86 , - 575 , - 336 , - 2505 , - 810 , - 1523 , - 1508 , - 765 , - 2430 , - 231 , - 440 , - 3057 , - 1810 , - 2971 , - 268 , - 3109 , - 2086 , - 335 , - 992 , - 921 , - 122 , - 1731 , - 2612 , - 2765 , - 2190 , - 887 , - 1992 , - 2369 , - 2018 , - 939 , - 2268 , - 2869 , - 2742 , - 1887 , - 304 , - 1129 , - 1226 , - 595 , - 2372 , - 285 , - 606 , - 199 , - 2200 , - 337 , - 882 , - 699 , - 2924 , - 1285 , - 2054 , - 2095 , - 1408 , - 3129 , - 986 , - 1251 , - 788 , - 2733 , - 814 , - 1303 , - 1064 , - 97 , - 1538 , - 2251 , - 2236 , - 1493 , - 22 , - 959 , - 1168 , - 649 , - 2538 , - 563 , - 996 , - 701 , - 2814 , - 1063 , - 1720 , - 1649 , - 850 , - 2459 , - 204 , - 357 , - 2918 , - 1615 , - 2720 , - 3097 , - 2746 , - 1667 , - 2996 , - 461 , - 334 , - 2615 , - 1032 , - 1857 , - 1954 , - 1323 , - 3100 , - 1013 , - 1334 , - 927 , - 2928 , - 1065 , - 1610 , - 1427 , - 516 , - 2013 , - 2782 , - 2823 , - 2136 , - 721 , - 1714 , - 1979 , - 1516 , - 325 , - 1542 , - 2031 , - 1792 , - 825 , - 2266 , - 2979 , - 2964 , - 2221 , - 750 , - 1687 , - 1896 , - 1377 , - 130 , - 1291 , - 1724 , - 1429 , - 406 , - 1791 , - 2448 , - 2377 , - 1578 , - 51 , - 932 , - 1085 , - 510 , - 2343 , - 312 , - 689 , - 338 , - 2395 , - 588 , - 1189 , - 1062 , - 207 , - 1760 , - 2585 , - 2682 , - 2051 , - 692 , - 1741 , - 2062 , - 1655 , - 520 , - 1793 , - 2338 , - 2155 , - 1244 , - 2741 , - 374 , - 415 , - 2864 , - 1449 , - 2442 , - 2707 , - 2244 , - 1053 , - 2270 , - 2759 , - 2520 , - 1553 , - 2994 , - 571 , - 556 , - 2949 , - 1478 , - 2415 , - 2624 , - 2105 , - 858 , - 2019 , - 2452 , - 2157 , - 1134 , - 2519 , - 40 , - 3105 , - 2306 , - 779 , - 1660 , - 1813 , - 1238 , - 3071 , - 1040 , - 1417 , - 1066 , - 3123 , - 1316 , - 1917 , - 1790 , - 935 , - 2488 , - 177 , - 274 , - 2779 , - 1420 , - 2469 , - 2790 , - 2383 , - 1248 , - 2521 , - 3066 , - 2883 , - 1972 , - 333 , - 1102 , - 1143 , - 456 , - 2177 , - 34 , - 299 , - 2972 , - 1781 , - 2998 , - 351 , - 112 , - 2281 , - 586 , - 1299 , - 1284 , - 541 , - 2206 , - 7 , - 216 , - 2833 , - 1586 , - 2747 , - 44 , - 2885 , - 1862 , - 111 , - 768 , - 697 , - 3034 , - 1507 , - 2388 , - 2541 , - 1966 , - 663 , - 1768 , - 2145 , - 1794 , - 715 , - 2044 , - 2645 , - 2518 , - 1663 , - 80 , - 905 , - 1002 , - 371 , - 2148 , - 61 , - 382 , - 3111 , - 1976 , - 113 , - 658 , - 475 , - 2700 , - 1061 , - 1830 , - 1871 , - 1184 , - 2905 , - 762 , - 1027 , - 564 , - 2509 , - 590 , - 1079 , - 840 , - 3009 , - 1314 , - 2027 , - 2012 , - 1269 , - 2934 , - 735 , - 944 , - 425 , - 2314 , - 339 , - 772 , - 477 , - 2590 , - 839 , - 1496 , - 1425 , - 626 , - 2235 , - 3116 , - 133 , - 2694 , - 1391 , - 2496 , - 2873 , - 2522 , - 1443 , - 2772 , - 237 , - 110 , - 2391 , - 808 , - 1633 , - 1730 , - 1099 , - 2876 , - 789 , - 1110 , - 703 , - 2704 , - 841 , - 1386 , - 1203 , - 292 , - 1789 , - 2558 , - 2599 , - 1912 , - 497 , - 1490 , - 1755 , - 1292 , - 101 , - 1318 , - 1807 , - 1568 , - 601 , - 2042 , - 2755 , - 2740 , - 1997 , - 526 , - 1463 , - 1672 , - 1153 , - 3042 , - 1067 , - 1500 , - 1205 , - 182 , - 1567 , - 2224 , - 2153 , - 1354 , - 2963 , - 708 , - 861 , - 286 , - 2119 , - 88 , - 465 , - 114 , - 2171 , - 364 , - 965 , - 838 , - 3119 , - 1536 , - 2361 , - 2458 , - 1827 , - 468 , - 1517 , - 1838 , - 1431 , - 296 , - 1569 , - 2114 , - 1931 , - 1020 , - 2517 , - 150 , - 191 , - 2640 , - 1225 , - 2218 , - 2483 , - 2020 , - 829 , - 2046 , - 2535 , - 2296 , - 1329 , - 2770 , - 347 , - 332 , - 2725 , - 1254 , - 2191 , - 2400 , - 1881 , - 634 , - 1795 , - 2228 , - 1933 , - 910 , - 2295 , - 2952 , - 2881 , - 2082 , - 555 , - 1436 , - 1589 , - 1014 , - 2847 , - 816 , - 1193 , - 842 , - 2899 , - 1092 , - 1693 , - 1566 , - 711 , - 2264 , - 3089 , - 50 , - 2555 , - 1196 , - 2245 , - 2566 , - 2159 , - 1024 , - 2297 , - 2842 , - 2659 , - 1748 , - 109 , - 878 , - 919 , - 232 , - 1953 , - 2946 , - 75 , - 2748 , - 1557 , - 2774 , - 127 , - 3024 , - 2057 , - 362 , - 1075 , - 1060 , - 317 , - 1982 , - 2919 , - 3128 , - 2609 , - 1362 , - 2523 , - 2956 , - 2661 , - 1638 , - 3023 , - 544 , - 473 , - 2810 , - 1283 , - 2164 , - 2317 , - 1742 , - 439 , - 1544 , - 1921 , - 1570 , - 491 , - 1820 , - 2421 , - 2294 , - 1439 , - 2992 , - 681 , - 778 , - 147 , - 1924 , - 2973 , - 158 , - 2887 , - 1752 , - 3025 , - 434 , - 251 , - 2476 , - 837 , - 1606 , - 1647 , - 960 , - 2681 , - 538 , - 803 , - 340 , - 2285 , - 366 , - 855 , - 616 , - 2785 , - 1090 , - 1803 , - 1788 , - 1045 , - 2710 , - 511 , - 720 , - 201 , - 2090 , - 115 , - 548 , - 253 , - 2366 , - 615 , - 1272 , - 1201 , - 402 , - 2011 , - 2892 , - 3045 , - 2470 , - 1167 , - 2272 , - 2649 , - 2298 , - 1219 , - 2548 , - 13 , - 3022 , - 2167 , - 584 , - 1409 , - 1506 , - 875 , - 2652 , - 565 , - 886 , - 479 , - 2480 , - 617 , - 1162 , - 979 , - 68 , - 1565 , - 2334 , - 2375 , - 1688 , - 273 , - 1266 , - 1531 , - 1068 , - 3013 , - 1094 , - 1583 , - 1344 , - 377 , - 1818 , - 2531 , - 2516 , - 1773 , - 302 , - 1239 , - 1448 , - 929 , - 2818 , - 843 , - 1276 , - 981 , - 3094 , - 1343 , - 2000 , - 1929 , - 1130 , - 2739 , - 484 , - 637 , - 62 , - 1895 , - 3000 , - 241 , - 3026 , - 1947 , - 140 , - 741 , - 614 , - 2895 , - 1312 , - 2137 , - 2234 , - 1603 , - 244 , - 1293 , - 1614 , - 1207 , - 72 , - 1345 , - 1890 , - 1707 , - 796 , - 2293 , - 3062 , - 3103 , - 2416 , - 1001 , - 1994 , - 2259 , - 1796 , - 605 , - 1822 , - 2311 , - 2072 , - 1105 , - 2546 , - 123 , - 108 , - 2501 , - 1030 , - 1967 , - 2176 , - 1657 , - 410 , - 1571 , - 2004 , - 1709 , - 686 , - 2071 , - 2728 , - 2657 , - 1858 , - 331 , - 1212 , - 1365 , - 790 , - 2623 , - 592 , - 969 , - 618 , - 2675 , - 868 , - 1469 , - 1342 , - 487 , - 2040 , - 2865 , - 2962 , - 2331 , - 972 , - 2021 , - 2342 , - 1935 , - 800 , - 2073 , - 2618 , - 2435 , - 1524 , - 3021 , - 654 , - 695 , - 8 , - 1729 , - 2722 , - 2987 , - 2524 , - 1333 , - 2550 , - 3039 , - 2800 , - 1833 , - 138 , - 851 , - 836 , - 93 , - 1758 , - 2695 , - 2904 , - 2385 , - 1138 , - 2299 , - 2732 , - 2437 , - 1414 , - 2799 , - 320 , - 249 , - 2586 , - 1059 , - 1940 , - 2093 , - 1518 , - 215 , - 1320 , - 1697 , - 1346 , - 267 , - 1596 , - 2197 , - 2070 , - 1215 , - 2768 , - 457 , - 554 , - 3059 , - 1700 , - 2749 , - 3070 , - 2663 , - 1528 , - 2801 , - 210 , - 27 , - 2252 , - 613 , - 1382 , - 1423 , - 736 , - 2457 , - 314 , - 579 , - 116 , - 2061 , - 142 , - 631 , - 392 , - 2561 , - 866 , - 1579 , - 1564 , - 821 , - 2486 , - 287 , - 496 , - 3113 , - 1866 , - 3027 , - 324 , - 29 , - 2142 , - 391 , - 1048 , - 977 , - 178 , - 1787 , - 2668 , - 2821 , - 2246 , - 943 , - 2048 , - 2425 , - 2074 , - 995 , - 2324 , - 2925 , - 2798 , - 1943 , - 360 , - 1185 , - 1282 , - 651 , - 2428 , - 341 , - 662 , - 255 , - 2256 , - 393 , - 938 , - 755 , - 2980 , - 1341 , - 2110 , - 2151 , - 1464 , - 49 , - 1042 , - 1307 , - 844 , - 2789 , - 870 , - 1359 , - 1120 , - 153 , - 1594 , - 2307 , - 2292 , - 1549 , - 78 , - 1015 , - 1224 , - 705 , - 2594 , - 619 , - 1052 , - 757 , - 2870 , - 1119 , - 1776 , - 1705 , - 906 , - 2515 , - 260 , - 413 , - 2974 , - 1671 , - 2776 , - 17 , - 2802 , - 1723 , - 3052 , - 517 , - 390 , - 2671 , - 1088 , - 1913 , - 2010 , - 1379 , - 20 , - 1069 , - 1390 , - 983 , - 2984 , - 1121 , - 1666 , - 1483 , - 572 , - 2069 , - 2838 , - 2879 , - 2192 , - 777 , - 1770 , - 2035 , - 1572 , - 381 , - 1598 , - 2087 , - 1848 , - 881 , - 2322 , - 3035 , - 3020 , - 2277 , - 806 , - 1743 , - 1952 , - 1433 , - 186 , - 1347 , - 1780 , - 1485 , - 462 , - 1847 , - 2504 , - 2433 , - 1634 , - 107 , - 988 , - 1141 , - 566 , - 2399 , - 368 , - 745 , - 394 , - 2451 , - 644 , - 1245 , - 1118 , - 263 , - 1816 , - 2641 , - 2738 , - 2107 , - 748 , - 1797 , - 2118 , - 1711 , - 576 , - 1849 , - 2394 , - 2211 , - 1300 , - 2797 , - 430 , - 471 , - 2920 , - 1505 , - 2498 , - 2763 , - 2300 , - 1109 , - 2326 , - 2815 , - 2576 , - 1609 , - 3050 , - 627 , - 612 , - 3005 , - 1534 , - 2471 , - 2680 , - 2161 , - 914 , - 2075 , - 2508 , - 2213 , - 1190 , - 2575 , - 96 , - 25 , - 2362 , - 835 , - 1716 , - 1869 , - 1294 , - 3127 , - 1096 , - 1473 , - 1122 , - 43 , - 1372 , - 1973 , - 1846 , - 991 , - 2544 , - 233 , - 330 , - 2835 , - 1476 , - 2525 , - 2846 , - 2439 , - 1304 , - 2577 , - 3122 , - 2939 , - 2028 , - 389 , - 1158 , - 1199 , - 512 , - 2233 , - 90 , - 355 , - 3028 , - 1837 , - 3054 , - 407 , - 168 , - 2337 , - 642 , - 1355 , - 1340 , - 597 , - 2262 , - 63 , - 272 , - 2889 , - 1642 , - 2803 , - 100 , - 2941 , - 1918 , - 167 , - 824 , - 753 , - 3090 , - 1563 , - 2444 , - 2597 , - 2022 , - 719 , - 1824 , - 2201 , - 1850 , - 771 , - 2100 , - 2701 , - 2574 , - 1719 , - 136 , - 961 , - 1058 , - 427 , - 2204 , - 117 , - 438 , - 31 , - 2032 , - 169 , - 714 , - 531 , - 2756 , - 1117 , - 1886 , - 1927 , - 1240 , - 2961 , - 818 , - 1083 , - 620 , - 2565 , - 646 , - 1135 , - 896 , - 3065 , - 1370 , - 2083 , - 2068 , - 1325 , - 2990 , - 791 , - 1000 , - 481 , - 2370 , - 395 , - 828 , - 533 , - 2646 , - 895 , - 1552 , - 1481 , - 682 , - 2291 , - 36 , - 189 , - 2750 , - 1447 , - 2552 , - 2929 , - 2578 , - 1499 , - 2828 , - 293 , - 166 , - 2447 , - 864 , - 1689 , - 1786 , - 1155 , - 2932 , - 845 , - 1166 , - 759 , - 2760 , - 897 , - 1442 , - 1259 , - 348 , - 1845 , - 2614 , - 2655 , - 1968 , - 553 , - 1546 , - 1811 , - 1348 , - 157 , - 1374 , - 1863 , - 1624 , - 657 , - 2098 , - 2811 , - 2796 , - 2053 , - 582 , - 1519 , - 1728 , - 1209 , - 3098 , - 1123 , - 1556 , - 1261 , - 238 , - 1623 , - 2280 , - 2209 , - 1410 , - 3019 , - 764 , - 917 , - 342 , - 2175 , - 144 , - 521 , - 170 , - 2227 , - 420 , - 1021 , - 894 , - 39 , - 1592 , - 2417 , - 2514 , - 1883 , - 524 , - 1573 , - 1894 , - 1487 , - 352 , - 1625 , - 2170 , - 1987 , - 1076 , - 2573 , - 206 , - 247 , - 2696 , - 1281 , - 2274 , - 2539 , - 2076 , - 885 , - 2102 , - 2591 , - 2352 , - 1385 , - 2826 , - 403 , - 388 , - 2781 , - 1310 , - 2247 , - 2456 , - 1937 , - 690 , - 1851 , - 2284 , - 1989 , - 966 , - 2351 , - 3008 , - 2937 , - 2138 , - 611 , - 1492 , - 1645 , - 1070 , - 2903 , - 872 , - 1249 , - 898 , - 2955 , - 1148 , - 1749 , - 1622 , - 767 , - 2320 , - 9 , - 106 , - 2611 , - 1252 , - 2301 , - 2622 , - 2215 , - 1080 , - 2353 , - 2898 , - 2715 , - 1804 , - 165 , - 934 , - 975 , - 288 , - 2009 , - 3002 , - 131 , - 2804 , - 1613 , - 2830 , - 183 , - 3080 , - 2113 , - 418 , - 1131 , - 1116 , - 373 , - 2038 , - 2975 , - 48 , - 2665 , - 1418 , - 2579 , - 3012 , - 2717 , - 1694 , - 3079 , - 600 , - 529 , - 2866 , - 1339 , - 2220 , - 2373 , - 1798 , - 495 , - 1600 , - 1977 , - 1626 , - 547 , - 1876 , - 2477 , - 2350 , - 1495 , - 3048 , - 737 , - 834 , - 203 , - 1980 , - 3029 , - 214 , - 2943 , - 1808 , - 3081 , - 490 , - 307 , - 2532 , - 893 , - 1662 , - 1703 , - 1016 , - 2737 , - 594 , - 859 , - 396 , - 2341 , - 422 , - 911 , - 672 , - 2841 , - 1146 , - 1859 , - 1844 , - 1101 , - 2766 , - 567 , - 776 , - 257 , - 2146 , - 171 , - 604 , - 309 , - 2422 , - 671 , - 1328 , - 1257 , - 458 , - 2067 , - 2948 , - 3101 , - 2526 , - 1223 , - 2328 , - 2705 , - 2354 , - 1275 , - 2604 , - 69 , - 3078 , - 2223 , - 640 , - 1465 , - 1562 , - 931 , - 2708 , - 621 , - 942 , - 535 , - 2536 , - 673 , - 1218 , - 1035 , - 124 , - 1621 , - 2390 , - 2431 , - 1744 , - 329 , - 1322 , - 1587 , - 1124 , - 3069 , - 1150 , - 1639 , - 1400 , - 433 , - 1874 , - 2587 , - 2572 , - 1829 , - 358 , - 1295 , - 1504 , - 985 , - 2874 , - 899 , - 1332 , - 1037 , - 14 , - 1399 , - 2056 , - 1985 , - 1186 , - 2795 , - 540 , - 693 , - 118 , - 1951 , - 3056 , - 297 , - 3082 , - 2003 , - 196 , - 797 , - 670 , - 2951 , - 1368 , - 2193 , - 2290 , - 1659 , - 300 , - 1349 , - 1670 , - 1263 , - 128 , - 1401 , - 1946 , - 1763 , - 852 , - 2349 , - 3118 , - 23 , - 2472 , - 1057 , - 2050 , - 2315 , - 1852 , - 661 , - 1878 , - 2367 , - 2128 , - 1161 , - 2602 , - 179 , - 164 , - 2557 , - 1086 , - 2023 , - 2232 , - 1713 , - 466 , - 1627 , - 2060 , - 1765 , - 742 , - 2127 , - 2784 , - 2713 , - 1914 , - 387 , - 1268 , - 1421 , - 846 , - 2679 , - 648 , - 1025 , - 674 , - 2731 , - 924 , - 1525 , - 1398 , - 543 , - 2096 , - 2921 , - 3018 , - 2387 , - 1028 , - 2077 , - 2398 , - 1991 , - 856 , - 2129 , - 2674 , - 2491 , - 1580 , - 3077 , - 710 , - 751 , - 64 , - 1785 , - 2778 , - 3043 , - 2580 , - 1389 , - 2606 , - 3095 , - 2856 , - 1889 , - 194 , - 907 , - 892 , - 149 , - 1814 , - 2751 , - 2960 , - 2441 , - 1194 , - 2355 , - 2788 , - 2493 , - 1470 , - 2855 , - 376 , - 305 , - 2642 , - 1115 , - 1996 , - 2149 , - 1574 , - 271 , - 1376 , - 1753 , - 1402 , - 323 , - 1652 , - 2253 , - 2126 , - 1271 , - 2824 , - 513 , - 610 , - 3115 , - 1756 , - 2805 , - 3126 , - 2719 , - 1584 , - 2857 , - 266 , - 83 , - 2308 , - 669 , - 1438 , - 1479 , - 792 , - 2513 , - 370 , - 635 , - 172 , - 2117 , - 198 , - 687 , - 448 , - 2617 , - 922 , - 1635 , - 1620 , - 877 , - 2542 , - 343 , - 552 , - 33 , - 1922 , - 3083 , - 380 , - 85 , - 2198 , - 447 , - 1104 , - 1033 , - 234 , - 1843 , - 2724 , - 2877 , - 2302 , - 999 , - 2104 , - 2481 , - 2130 , - 1051 , - 2380 , - 2981 , - 2854 , - 1999 , - 416 , - 1241 , - 1338 , - 707 , - 2484 , - 397 , - 718 , - 311 , - 2312 , - 449 , - 994 , - 811 , - 3036 , - 1397 , - 2166 , - 2207 , - 1520 , - 105 , - 1098 , - 1363 , - 900 , - 2845 , - 926 , - 1415 , - 1176 , - 209 , - 1650 , - 2363 , - 2348 , - 1605 , - 134 , - 1071 , - 1280 , - 761 , - 2650 , - 675 , - 1108 , - 813 , - 2926 , - 1175 , - 1832 , - 1761 , - 962 , - 2571 , - 316 , - 469 , - 3030 , - 1727 , - 2832 , - 73 , - 2858 , - 1779 , - 3108 , - 573 , - 446 , - 2727 , - 1144 , - 1969 , - 2066 , - 1435 , - 76 , - 1125 , - 1446 , - 1039 , - 3040 , - 1177 , - 1722 , - 1539 , - 628 , - 2125 , - 2894 , - 2935 , - 2248 , - 833 , - 1826 , - 2091 , - 1628 , - 437 , - 1654 , - 2143 , - 1904 , - 937 , - 2378 , - 3091 , - 3076 , - 2333 , - 862 , - 1799 , - 2008 , - 1489 , - 242 , - 1403 , - 1836 , - 1541 , - 518 , - 1903 , - 2560 , - 2489 , - 1690 , - 163 , - 1044 , - 1197 , - 622 , - 2455 , - 424 , - 801 , - 450 , - 2507 , - 700 , - 1301 , - 1174 , - 319 , - 1872 , - 2697 , - 2794 , - 2163 , - 804 , - 1853 , - 2174 , - 1767 , - 632 , - 1905 , - 2450 , - 2267 , - 1356 , - 2853 , - 486 , - 527 , - 2976 , - 1561 , - 2554 , - 2819 , - 2356 , - 1165 , - 2382 , - 2871 , - 2632 , - 1665 , - 3106 , - 683 , - 668 , - 3061 , - 1590 , - 2527 , - 2736 , - 2217 , - 970 , - 2131 , - 2564 , - 2269 , - 1246 , - 2631 , - 152 , - 81 , - 2418 , - 891 , - 1772 , - 1925 , - 1350 , - 47 , - 1152 , - 1529 , - 1178 , - 99 , - 1428 , - 2029 , - 1902 , - 1047 , - 2600 , - 289 , - 386 , - 2891 , - 1532 , - 2581 , - 2902 , - 2495 , - 1360 , - 2633 , - 42 , - 2995 , - 2084 , - 445 , - 1214 , - 1255 , - 568 , - 2289 , - 146 , - 411 , - 3084 , - 1893 , - 3110 , - 463 , - 224 , - 2393 , - 698 , - 1411 , - 1396 , - 653 , - 2318 , - 119 , - 328 , - 2945 , - 1698 , - 2859 , - 156 , - 2997 , - 1974 , - 223 , - 880 , - 809 , - 10 , - 1619 , - 2500 , - 2653 , - 2078 , - 775 , - 1880 , - 2257 , - 1906 , - 827 , - 2156 , - 2757 , - 2630 , - 1775 , - 192 , - 1017 , - 1114 , - 483 , - 2260 , - 173 , - 494 , - 87 , - 2088 , - 225 , - 770 , - 587 , - 2812 , - 1173 , - 1942 , - 1983 , - 1296 , - 3017 , - 874 , - 1139 , - 676 , - 2621 , - 702 , - 1191 , - 952 , - 3121 , - 1426 , - 2139 , - 2124 , - 1381 , - 3046 , - 847 , - 1056 , - 537 , - 2426 , - 451 , - 884 , - 589 , - 2702 , - 951 , - 1608 , - 1537 , - 738 , - 2347 , - 92 , - 245 , - 2806 , - 1503 , - 2608 , - 2985 , - 2634 , - 1555 , - 2884 , - 349 , - 222 , - 2503 , - 920 , - 1745 , - 1842 , - 1211 , - 2988 , - 901 , - 1222 , - 815 , - 2816 , - 953 , - 1498 , - 1315 , - 404 , - 1901 , - 2670 , - 2711 , - 2024 , - 609 , - 1602 , - 1867 , - 1404 , - 213 , - 1430 , - 1919 , - 1680 , - 713 , - 2154 , - 2867 , - 2852 , - 2109 , - 638 , - 1575 , - 1784 , - 1265 , - 18 , - 1179 , - 1612 , - 1317 , - 294 , - 1679 , - 2336 , - 2265 , - 1466 , - 3075 , - 820 , - 973 , - 398 , - 2231 , - 200 , - 577 , - 226 , - 2283 , - 476 , - 1077 , - 950 , - 95 , - 1648 , - 2473 , - 2570 , - 1939 , - 580 , - 1629 , - 1950 , - 1543 , - 408 , - 1681 , - 2226 , - 2043 , - 1132 , - 2629 , - 262 , - 303 , - 2752 , - 1337 , - 2330 , - 2595 , - 2132 , - 941 , - 2158 , - 2647 , - 2408 , - 1441 , - 2882 , - 459 , - 444 , - 2837 , - 1366 , - 2303 , - 2512 , - 1993 , - 746 , - 1907 , - 2340 , - 2045 , - 1022 , - 2407 , - 3064 , - 2993 , - 2194 , - 667 , - 1548 , - 1701 , - 1126 , - 2959 , - 928 , - 1305 , - 954 , - 3011 , - 1204 , - 1805 , - 1678 , - 823 , - 2376 , - 65 , - 162 , - 2667 , - 1308 , - 2357 , - 2678 , - 2271 , - 1136 , - 2409 , - 2954 , - 2771 , - 1860 , - 221 , - 990 , - 1031 , - 344 , - 2065 , - 3058 , - 187 , - 2860 , - 1669 , - 2886 , - 239 , - 0 , - 1151 , - 222 , - 413 , - 1724 , - 955 , - 1306 , - 2777 , - 2168 , - 2679 , - 1110 , - 661 , - 1332 , - 3123 , - 2834 , - 465 , - 2416 , - 2287 , - 78 , - 2189 , - 2220 , - 171 , - 2442 , - 2633 , - 744 , - 3175 , - 326 , - 1797 , - 1188 , - 1699 , - 130 , - 2881 , - 352 , - 2143 , - 1854 , - 2685 , - 1436 , - 1307 , - 2298 , - 1209 , - 1240 , - 2391 , - 1462 , - 1653 , - 2964 , - 2195 , - 2546 , - 817 , - 208 , - 719 , - 2350 , - 1901 , - 2572 , - 1163 , - 874 , - 1705 , - 456 , - 327 , - 1318 , - 229 , - 260 , - 1411 , - 482 , - 673 , - 1984 , - 1215 , - 1566 , - 3037 , - 2428 , - 2939 , - 1370 , - 921 , - 1592 , - 183 , - 3094 , - 725 , - 2676 , - 2547 , - 338 , - 2449 , - 2480 , - 431 , - 2702 , - 2893 , - 1004 , - 235 , - 586 , - 2057 , - 1448 , - 1959 , - 390 , - 3141 , - 612 , - 2403 , - 2114 , - 2945 , - 1696 , - 1567 , - 2558 , - 1469 , - 1500 , - 2651 , - 1722 , - 1913 , - 24 , - 2455 , - 2806 , - 1077 , - 468 , - 979 , - 2610 , - 2161 , - 2832 , - 1423 , - 1134 , - 1965 , - 716 , - 587 , - 1578 , - 489 , - 520 , - 1671 , - 742 , - 933 , - 2244 , - 1475 , - 1826 , - 97 , - 2688 , - 3199 , - 1630 , - 1181 , - 1852 , - 443 , - 154 , - 985 , - 2936 , - 2807 , - 598 , - 2709 , - 2740 , - 691 , - 2962 , - 3153 , - 1264 , - 495 , - 846 , - 2317 , - 1708 , - 2219 , - 650 , - 201 , - 872 , - 2663 , - 2374 , - 5 , - 1956 , - 1827 , - 2818 , - 1729 , - 1760 , - 2911 , - 1982 , - 2173 , - 284 , - 2715 , - 3066 , - 1337 , - 728 , - 1239 , - 2870 , - 2421 , - 3092 , - 1683 , - 1394 , - 2225 , - 976 , - 847 , - 1838 , - 749 , - 780 , - 1931 , - 1002 , - 1193 , - 2504 , - 1735 , - 2086 , - 357 , - 2948 , - 259 , - 1890 , - 1441 , - 2112 , - 703 , - 414 , - 1245 , - 3196 , - 3067 , - 858 , - 2969 , - 3000 , - 951 , - 22 , - 213 , - 1524 , - 755 , - 1106 , - 2577 , - 1968 , - 2479 , - 910 , - 461 , - 1132 , - 2923 , - 2634 , - 265 , - 2216 , - 2087 , - 3078 , - 1989 , - 2020 , - 3171 , - 2242 , - 2433 , - 544 , - 2975 , - 126 , - 1597 , - 988 , - 1499 , - 3130 , - 2681 , - 152 , - 1943 , - 1654 , - 2485 , - 1236 , - 1107 , - 2098 , - 1009 , - 1040 , - 2191 , - 1262 , - 1453 , - 2764 , - 1995 , - 2346 , - 617 , - 8 , - 519 , - 2150 , - 1701 , - 2372 , - 963 , - 674 , - 1505 , - 256 , - 127 , - 1118 , - 29 , - 60 , - 1211 , - 282 , - 473 , - 1784 , - 1015 , - 1366 , - 2837 , - 2228 , - 2739 , - 1170 , - 721 , - 1392 , - 3183 , - 2894 , - 525 , - 2476 , - 2347 , - 138 , - 2249 , - 2280 , - 231 , - 2502 , - 2693 , - 804 , - 35 , - 386 , - 1857 , - 1248 , - 1759 , - 190 , - 2941 , - 412 , - 2203 , - 1914 , - 2745 , - 1496 , - 1367 , - 2358 , - 1269 , - 1300 , - 2451 , - 1522 , - 1713 , - 3024 , - 2255 , - 2606 , - 877 , - 268 , - 779 , - 2410 , - 1961 , - 2632 , - 1223 , - 934 , - 1765 , - 516 , - 387 , - 1378 , - 289 , - 320 , - 1471 , - 542 , - 733 , - 2044 , - 1275 , - 1626 , - 3097 , - 2488 , - 2999 , - 1430 , - 981 , - 1652 , - 243 , - 3154 , - 785 , - 2736 , - 2607 , - 398 , - 2509 , - 2540 , - 491 , - 2762 , - 2953 , - 1064 , - 295 , - 646 , - 2117 , - 1508 , - 2019 , - 450 , - 1 , - 672 , - 2463 , - 2174 , - 3005 , - 1756 , - 1627 , - 2618 , - 1529 , - 1560 , - 2711 , - 1782 , - 1973 , - 84 , - 2515 , - 2866 , - 1137 , - 528 , - 1039 , - 2670 , - 2221 , - 2892 , - 1483 , - 1194 , - 2025 , - 776 , - 647 , - 1638 , - 549 , - 580 , - 1731 , - 802 , - 993 , - 2304 , - 1535 , - 1886 , - 157 , - 2748 , - 59 , - 1690 , - 1241 , - 1912 , - 503 , - 214 , - 1045 , - 2996 , - 2867 , - 658 , - 2769 , - 2800 , - 751 , - 3022 , - 13 , - 1324 , - 555 , - 906 , - 2377 , - 1768 , - 2279 , - 710 , - 261 , - 932 , - 2723 , - 2434 , - 65 , - 2016 , - 1887 , - 2878 , - 1789 , - 1820 , - 2971 , - 2042 , - 2233 , - 344 , - 2775 , - 3126 , - 1397 , - 788 , - 1299 , - 2930 , - 2481 , - 3152 , - 1743 , - 1454 , - 2285 , - 1036 , - 907 , - 1898 , - 809 , - 840 , - 1991 , - 1062 , - 1253 , - 2564 , - 1795 , - 2146 , - 417 , - 3008 , - 319 , - 1950 , - 1501 , - 2172 , - 763 , - 474 , - 1305 , - 56 , - 3127 , - 918 , - 3029 , - 3060 , - 1011 , - 82 , - 273 , - 1584 , - 815 , - 1166 , - 2637 , - 2028 , - 2539 , - 970 , - 521 , - 1192 , - 2983 , - 2694 , - 325 , - 2276 , - 2147 , - 3138 , - 2049 , - 2080 , - 31 , - 2302 , - 2493 , - 604 , - 3035 , - 186 , - 1657 , - 1048 , - 1559 , - 3190 , - 2741 , - 212 , - 2003 , - 1714 , - 2545 , - 1296 , - 1167 , - 2158 , - 1069 , - 1100 , - 2251 , - 1322 , - 1513 , - 2824 , - 2055 , - 2406 , - 677 , - 68 , - 579 , - 2210 , - 1761 , - 2432 , - 1023 , - 734 , - 1565 , - 316 , - 187 , - 1178 , - 89 , - 120 , - 1271 , - 342 , - 533 , - 1844 , - 1075 , - 1426 , - 2897 , - 2288 , - 2799 , - 1230 , - 781 , - 1452 , - 43 , - 2954 , - 585 , - 2536 , - 2407 , - 198 , - 2309 , - 2340 , - 291 , - 2562 , - 2753 , - 864 , - 95 , - 446 , - 1917 , - 1308 , - 1819 , - 250 , - 3001 , - 472 , - 2263 , - 1974 , - 2805 , - 1556 , - 1427 , - 2418 , - 1329 , - 1360 , - 2511 , - 1582 , - 1773 , - 3084 , - 2315 , - 2666 , - 937 , - 328 , - 839 , - 2470 , - 2021 , - 2692 , - 1283 , - 994 , - 1825 , - 576 , - 447 , - 1438 , - 349 , - 380 , - 1531 , - 602 , - 793 , - 2104 , - 1335 , - 1686 , - 3157 , - 2548 , - 3059 , - 1490 , - 1041 , - 1712 , - 303 , - 14 , - 845 , - 2796 , - 2667 , - 458 , - 2569 , - 2600 , - 551 , - 2822 , - 3013 , - 1124 , - 355 , - 706 , - 2177 , - 1568 , - 2079 , - 510 , - 61 , - 732 , - 2523 , - 2234 , - 3065 , - 1816 , - 1687 , - 2678 , - 1589 , - 1620 , - 2771 , - 1842 , - 2033 , - 144 , - 2575 , - 2926 , - 1197 , - 588 , - 1099 , - 2730 , - 2281 , - 2952 , - 1543 , - 1254 , - 2085 , - 836 , - 707 , - 1698 , - 609 , - 640 , - 1791 , - 862 , - 1053 , - 2364 , - 1595 , - 1946 , - 217 , - 2808 , - 119 , - 1750 , - 1301 , - 1972 , - 563 , - 274 , - 1105 , - 3056 , - 2927 , - 718 , - 2829 , - 2860 , - 811 , - 3082 , - 73 , - 1384 , - 615 , - 966 , - 2437 , - 1828 , - 2339 , - 770 , - 321 , - 992 , - 2783 , - 2494 , - 125 , - 2076 , - 1947 , - 2938 , - 1849 , - 1880 , - 3031 , - 2102 , - 2293 , - 404 , - 2835 , - 3186 , - 1457 , - 848 , - 1359 , - 2990 , - 2541 , - 12 , - 1803 , - 1514 , - 2345 , - 1096 , - 967 , - 1958 , - 869 , - 900 , - 2051 , - 1122 , - 1313 , - 2624 , - 1855 , - 2206 , - 477 , - 3068 , - 379 , - 2010 , - 1561 , - 2232 , - 823 , - 534 , - 1365 , - 116 , - 3187 , - 978 , - 3089 , - 3120 , - 1071 , - 142 , - 333 , - 1644 , - 875 , - 1226 , - 2697 , - 2088 , - 2599 , - 1030 , - 581 , - 1252 , - 3043 , - 2754 , - 385 , - 2336 , - 2207 , - 3198 , - 2109 , - 2140 , - 91 , - 2362 , - 2553 , - 664 , - 3095 , - 246 , - 1717 , - 1108 , - 1619 , - 50 , - 2801 , - 272 , - 2063 , - 1774 , - 2605 , - 1356 , - 1227 , - 2218 , - 1129 , - 1160 , - 2311 , - 1382 , - 1573 , - 2884 , - 2115 , - 2466 , - 737 , - 128 , - 639 , - 2270 , - 1821 , - 2492 , - 1083 , - 794 , - 1625 , - 376 , - 247 , - 1238 , - 149 , - 180 , - 1331 , - 402 , - 593 , - 1904 , - 1135 , - 1486 , - 2957 , - 2348 , - 2859 , - 1290 , - 841 , - 1512 , - 103 , - 3014 , - 645 , - 2596 , - 2467 , - 258 , - 2369 , - 2400 , - 351 , - 2622 , - 2813 , - 924 , - 155 , - 506 , - 1977 , - 1368 , - 1879 , - 310 , - 3061 , - 532 , - 2323 , - 2034 , - 2865 , - 1616 , - 1487 , - 2478 , - 1389 , - 1420 , - 2571 , - 1642 , - 1833 , - 3144 , - 2375 , - 2726 , - 997 , - 388 , - 899 , - 2530 , - 2081 , - 2752 , - 1343 , - 1054 , - 1885 , - 636 , - 507 , - 1498 , - 409 , - 440 , - 1591 , - 662 , - 853 , - 2164 , - 1395 , - 1746 , - 17 , - 2608 , - 3119 , - 1550 , - 1101 , - 1772 , - 363 , - 74 , - 905 , - 2856 , - 2727 , - 518 , - 2629 , - 2660 , - 611 , - 2882 , - 3073 , - 1184 , - 415 , - 766 , - 2237 , - 1628 , - 2139 , - 570 , - 121 , - 792 , - 2583 , - 2294 , - 3125 , - 1876 , - 1747 , - 2738 , - 1649 , - 1680 , - 2831 , - 1902 , - 2093 , - 204 , - 2635 , - 2986 , - 1257 , - 648 , - 1159 , - 2790 , - 2341 , - 3012 , - 1603 , - 1314 , - 2145 , - 896 , - 767 , - 1758 , - 669 , - 700 , - 1851 , - 922 , - 1113 , - 2424 , - 1655 , - 2006 , - 277 , - 2868 , - 179 , - 1810 , - 1361 , - 2032 , - 623 , - 334 , - 1165 , - 3116 , - 2987 , - 778 , - 2889 , - 2920 , - 871 , - 3142 , - 133 , - 1444 , - 675 , - 1026 , - 2497 , - 1888 , - 2399 , - 830 , - 381 , - 1052 , - 2843 , - 2554 , - 185 , - 2136 , - 2007 , - 2998 , - 1909 , - 1940 , - 3091 , - 2162 , - 2353 , - 464 , - 2895 , - 46 , - 1517 , - 908 , - 1419 , - 3050 , - 2601 , - 72 , - 1863 , - 1574 , - 2405 , - 1156 , - 1027 , - 2018 , - 929 , - 960 , - 2111 , - 1182 , - 1373 , - 2684 , - 1915 , - 2266 , - 537 , - 3128 , - 439 , - 2070 , - 1621 , - 2292 , - 883 , - 594 , - 1425 , - 176 , - 47 , - 1038 , - 3149 , - 3180 , - 1131 , - 202 , - 393 , - 1704 , - 935 , - 1286 , - 2757 , - 2148 , - 2659 , - 1090 , - 641 , - 1312 , - 3103 , - 2814 , - 445 , - 2396 , - 2267 , - 58 , - 2169 , - 2200 , - 151 , - 2422 , - 2613 , - 724 , - 3155 , - 306 , - 1777 , - 1168 , - 1679 , - 110 , - 2861 , - 332 , - 2123 , - 1834 , - 2665 , - 1416 , - 1287 , - 2278 , - 1189 , - 1220 , - 2371 , - 1442 , - 1633 , - 2944 , - 2175 , - 2526 , - 797 , - 188 , - 699 , - 2330 , - 1881 , - 2552 , - 1143 , - 854 , - 1685 , - 436 , - 307 , - 1298 , - 209 , - 240 , - 1391 , - 462 , - 653 , - 1964 , - 1195 , - 1546 , - 3017 , - 2408 , - 2919 , - 1350 , - 901 , - 1572 , - 163 , - 3074 , - 705 , - 2656 , - 2527 , - 318 , - 2429 , - 2460 , - 411 , - 2682 , - 2873 , - 984 , - 215 , - 566 , - 2037 , - 1428 , - 1939 , - 370 , - 3121 , - 592 , - 2383 , - 2094 , - 2925 , - 1676 , - 1547 , - 2538 , - 1449 , - 1480 , - 2631 , - 1702 , - 1893 , - 4 , - 2435 , - 2786 , - 1057 , - 448 , - 959 , - 2590 , - 2141 , - 2812 , - 1403 , - 1114 , - 1945 , - 696 , - 567 , - 1558 , - 469 , - 500 , - 1651 , - 722 , - 913 , - 2224 , - 1455 , - 1806 , - 77 , - 2668 , - 3179 , - 1610 , - 1161 , - 1832 , - 423 , - 134 , - 965 , - 2916 , - 2787 , - 578 , - 2689 , - 2720 , - 671 , - 2942 , - 3133 , - 1244 , - 475 , - 826 , - 2297 , - 1688 , - 2199 , - 630 , - 181 , - 852 , - 2643 , - 2354 , - 3185 , - 1936 , - 1807 , - 2798 , - 1709 , - 1740 , - 2891 , - 1962 , - 2153 , - 264 , - 2695 , - 3046 , - 1317 , - 708 , - 1219 , - 2850 , - 2401 , - 3072 , - 1663 , - 1374 , - 2205 , - 956 , - 827 , - 1818 , - 729 , - 760 , - 1911 , - 982 , - 1173 , - 2484 , - 1715 , - 2066 , - 337 , - 2928 , - 239 , - 1870 , - 1421 , - 2092 , - 683 , - 394 , - 1225 , - 3176 , - 3047 , - 838 , - 2949 , - 2980 , - 931 , - 2 , - 193 , - 1504 , - 735 , - 1086 , - 2557 , - 1948 , - 2459 , - 890 , - 441 , - 1112 , - 2903 , - 2614 , - 245 , - 2196 , - 2067 , - 3058 , - 1969 , - 2000 , - 3151 , - 2222 , - 2413 , - 524 , - 2955 , - 106 , - 1577 , - 968 , - 1479 , - 3110 , - 2661 , - 132 , - 1923 , - 1634 , - 2465 , - 1216 , - 1087 , - 2078 , - 989 , - 1020 , - 2171 , - 1242 , - 1433 , - 2744 , - 1975 , - 2326 , - 597 , - 3188 , - 499 , - 2130 , - 1681 , - 2352 , - 943 , - 654 , - 1485 , - 236 , - 107 , - 1098 , - 9 , - 40 , - 1191 , - 262 , - 453 , - 1764 , - 995 , - 1346 , - 2817 , - 2208 , - 2719 , - 1150 , - 701 , - 1372 , - 3163 , - 2874 , - 505 , - 2456 , - 2327 , - 118 , - 2229 , - 2260 , - 211 , - 2482 , - 2673 , - 784 , - 15 , - 366 , - 1837 , - 1228 , - 1739 , - 170 , - 2921 , - 392 , - 2183 , - 1894 , - 2725 , - 1476 , - 1347 , - 2338 , - 1249 , - 1280 , - 2431 , - 1502 , - 1693 , - 3004 , - 2235 , - 2586 , - 857 , - 248 , - 759 , - 2390 , - 1941 , - 2612 , - 1203 , - 914 , - 1745 , - 496 , - 367 , - 1358 , - 269 , - 300 , - 1451 , - 522 , - 713 , - 2024 , - 1255 , - 1606 , - 3077 , - 2468 , - 2979 , - 1410 , - 961 , - 1632 , - 223 , - 3134 , - 765 , - 2716 , - 2587 , - 378 , - 2489 , - 2520 , - 471 , - 2742 , - 2933 , - 1044 , - 275 , - 626 , - 2097 , - 1488 , - 1999 , - 430 , - 3181 , - 652 , - 2443 , - 2154 , - 2985 , - 1736 , - 1607 , - 2598 , - 1509 , - 1540 , - 2691 , - 1762 , - 1953 , - 64 , - 2495 , - 2846 , - 1117 , - 508 , - 1019 , - 2650 , - 2201 , - 2872 , - 1463 , - 1174 , - 2005 , - 756 , - 627 , - 1618 , - 529 , - 560 , - 1711 , - 782 , - 973 , - 2284 , - 1515 , - 1866 , - 137 , - 2728 , - 39 , - 1670 , - 1221 , - 1892 , - 483 , - 194 , - 1025 , - 2976 , - 2847 , - 638 , - 2749 , - 2780 , - 731 , - 3002 , - 3193 , - 1304 , - 535 , - 886 , - 2357 , - 1748 , - 2259 , - 690 , - 241 , - 912 , - 2703 , - 2414 , - 45 , - 1996 , - 1867 , - 2858 , - 1769 , - 1800 , - 2951 , - 2022 , - 2213 , - 324 , - 2755 , - 3106 , - 1377 , - 768 , - 1279 , - 2910 , - 2461 , - 3132 , - 1723 , - 1434 , - 2265 , - 1016 , - 887 , - 1878 , - 789 , - 820 , - 1971 , - 1042 , - 1233 , - 2544 , - 1775 , - 2126 , - 397 , - 2988 , - 299 , - 1930 , - 1481 , - 2152 , - 743 , - 454 , - 1285 , - 36 , - 3107 , - 898 , - 3009 , - 3040 , - 991 , - 62 , - 253 , - 1564 , - 795 , - 1146 , - 2617 , - 2008 , - 2519 , - 950 , - 501 , - 1172 , - 2963 , - 2674 , - 305 , - 2256 , - 2127 , - 3118 , - 2029 , - 2060 , - 11 , - 2282 , - 2473 , - 584 , - 3015 , - 166 , - 1637 , - 1028 , - 1539 , - 3170 , - 2721 , - 192 , - 1983 , - 1694 , - 2525 , - 1276 , - 1147 , - 2138 , - 1049 , - 1080 , - 2231 , - 1302 , - 1493 , - 2804 , - 2035 , - 2386 , - 657 , - 48 , - 559 , - 2190 , - 1741 , - 2412 , - 1003 , - 714 , - 1545 , - 296 , - 167 , - 1158 , - 69 , - 100 , - 1251 , - 322 , - 513 , - 1824 , - 1055 , - 1406 , - 2877 , - 2268 , - 2779 , - 1210 , - 761 , - 1432 , - 23 , - 2934 , - 565 , - 2516 , - 2387 , - 178 , - 2289 , - 2320 , - 271 , - 2542 , - 2733 , - 844 , - 75 , - 426 , - 1897 , - 1288 , - 1799 , - 230 , - 2981 , - 452 , - 2243 , - 1954 , - 2785 , - 1536 , - 1407 , - 2398 , - 1309 , - 1340 , - 2491 , - 1562 , - 1753 , - 3064 , - 2295 , - 2646 , - 917 , - 308 , - 819 , - 2450 , - 2001 , - 2672 , - 1263 , - 974 , - 1805 , - 556 , - 427 , - 1418 , - 329 , - 360 , - 1511 , - 582 , - 773 , - 2084 , - 1315 , - 1666 , - 3137 , - 2528 , - 3039 , - 1470 , - 1021 , - 1692 , - 283 , - 3194 , - 825 , - 2776 , - 2647 , - 438 , - 2549 , - 2580 , - 531 , - 2802 , - 2993 , - 1104 , - 335 , - 686 , - 2157 , - 1548 , - 2059 , - 490 , - 41 , - 712 , - 2503 , - 2214 , - 3045 , - 1796 , - 1667 , - 2658 , - 1569 , - 1600 , - 2751 , - 1822 , - 2013 , - 124 , - 2555 , - 2906 , - 1177 , - 568 , - 1079 , - 2710 , - 2261 , - 2932 , - 1523 , - 1234 , - 2065 , - 816 , - 687 , - 1678 , - 589 , - 620 , - 1771 , - 842 , - 1033 , - 2344 , - 1575 , - 1926 , - 197 , - 2788 , - 99 , - 1730 , - 1281 , - 1952 , - 543 , - 254 , - 1085 , - 3036 , - 2907 , - 698 , - 2809 , - 2840 , - 791 , - 3062 , - 53 , - 1364 , - 595 , - 946 , - 2417 , - 1808 , - 2319 , - 750 , - 301 , - 972 , - 2763 , - 2474 , - 105 , - 2056 , - 1927 , - 2918 , - 1829 , - 1860 , - 3011 , - 2082 , - 2273 , - 384 , - 2815 , - 3166 , - 1437 , - 828 , - 1339 , - 2970 , - 2521 , - 3192 , - 1783 , - 1494 , - 2325 , - 1076 , - 947 , - 1938 , - 849 , - 880 , - 2031 , - 1102 , - 1293 , - 2604 , - 1835 , - 2186 , - 457 , - 3048 , - 359 , - 1990 , - 1541 , - 2212 , - 803 , - 514 , - 1345 , - 96 , - 3167 , - 958 , - 3069 , - 3100 , - 1051 , - 122 , - 313 , - 1624 , - 855 , - 1206 , - 2677 , - 2068 , - 2579 , - 1010 , - 561 , - 1232 , - 3023 , - 2734 , - 365 , - 2316 , - 2187 , - 3178 , - 2089 , - 2120 , - 71 , - 2342 , - 2533 , - 644 , - 3075 , - 226 , - 1697 , - 1088 , - 1599 , - 30 , - 2781 , - 252 , - 2043 , - 1754 , - 2585 , - 1336 , - 1207 , - 2198 , - 1109 , - 1140 , - 2291 , - 1362 , - 1553 , - 2864 , - 2095 , - 2446 , - 717 , - 108 , - 619 , - 2250 , - 1801 , - 2472 , - 1063 , - 774 , - 1605 , - 356 , - 227 , - 1218 , - 129 , - 160 , - 1311 , - 382 , - 573 , - 1884 , - 1115 , - 1466 , - 2937 , - 2328 , - 2839 , - 1270 , - 821 , - 1492 , - 83 , - 2994 , - 625 , - 2576 , - 2447 , - 238 , - 2349 , - 2380 , - 331 , - 2602 , - 2793 , - 904 , - 135 , - 486 , - 1957 , - 1348 , - 1859 , - 290 , - 3041 , - 512 , - 2303 , - 2014 , - 2845 , - 1596 , - 1467 , - 2458 , - 1369 , - 1400 , - 2551 , - 1622 , - 1813 , - 3124 , - 2355 , - 2706 , - 977 , - 368 , - 879 , - 2510 , - 2061 , - 2732 , - 1323 , - 1034 , - 1865 , - 616 , - 487 , - 1478 , - 389 , - 420 , - 1571 , - 642 , - 833 , - 2144 , - 1375 , - 1726 , - 3197 , - 2588 , - 3099 , - 1530 , - 1081 , - 1752 , - 343 , - 54 , - 885 , - 2836 , - 2707 , - 498 , - 2609 , - 2640 , - 591 , - 2862 , - 3053 , - 1164 , - 395 , - 746 , - 2217 , - 1608 , - 2119 , - 550 , - 101 , - 772 , - 2563 , - 2274 , - 3105 , - 1856 , - 1727 , - 2718 , - 1629 , - 1660 , - 2811 , - 1882 , - 2073 , - 184 , - 2615 , - 2966 , - 1237 , - 628 , - 1139 , - 2770 , - 2321 , - 2992 , - 1583 , - 1294 , - 2125 , - 876 , - 747 , - 1738 , - 649 , - 680 , - 1831 , - 902 , - 1093 , - 2404 , - 1635 , - 1986 , - 257 , - 2848 , - 159 , - 1790 , - 1341 , - 2012 , - 603 , - 314 , - 1145 , - 3096 , - 2967 , - 758 , - 2869 , - 2900 , - 851 , - 3122 , - 113 , - 1424 , - 655 , - 1006 , - 2477 , - 1868 , - 2379 , - 810 , - 361 , - 1032 , - 2823 , - 2534 , - 165 , - 2116 , - 1987 , - 2978 , - 1889 , - 1920 , - 3071 , - 2142 , - 2333 , - 444 , - 2875 , - 26 , - 1497 , - 888 , - 1399 , - 3030 , - 2581 , - 52 , - 1843 , - 1554 , - 2385 , - 1136 , - 1007 , - 1998 , - 909 , - 940 , - 2091 , - 1162 , - 1353 , - 2664 , - 1895 , - 2246 , - 517 , - 3108 , - 419 , - 2050 , - 1601 , - 2272 , - 863 , - 574 , - 1405 , - 156 , - 27 , - 1018 , - 3129 , - 3160 , - 1111 , - 182 , - 373 , - 1684 , - 915 , - 1266 , - 2737 , - 2128 , - 2639 , - 1070 , - 621 , - 1292 , - 3083 , - 2794 , - 425 , - 2376 , - 2247 , - 38 , - 2149 , - 2180 , - 131 , - 2402 , - 2593 , - 704 , - 3135 , - 286 , - 1757 , - 1148 , - 1659 , - 90 , - 2841 , - 312 , - 2103 , - 1814 , - 2645 , - 1396 , - 1267 , - 2258 , - 1169 , - 1200 , - 2351 , - 1422 , - 1613 , - 2924 , - 2155 , - 2506 , - 777 , - 168 , - 679 , - 2310 , - 1861 , - 2532 , - 1123 , - 834 , - 1665 , - 416 , - 287 , - 1278 , - 189 , - 220 , - 1371 , - 442 , - 633 , - 1944 , - 1175 , - 1526 , - 2997 , - 2388 , - 2899 , - 1330 , - 881 , - 1552 , - 143 , - 3054 , - 685 , - 2636 , - 2507 , - 298 , - 2409 , - 2440 , - 391 , - 2662 , - 2853 , - 964 , - 195 , - 546 , - 2017 , - 1408 , - 1919 , - 350 , - 3101 , - 572 , - 2363 , - 2074 , - 2905 , - 1656 , - 1527 , - 2518 , - 1429 , - 1460 , - 2611 , - 1682 , - 1873 , - 3184 , - 2415 , - 2766 , - 1037 , - 428 , - 939 , - 2570 , - 2121 , - 2792 , - 1383 , - 1094 , - 1925 , - 676 , - 547 , - 1538 , - 449 , - 480 , - 1631 , - 702 , - 893 , - 2204 , - 1435 , - 1786 , - 57 , - 2648 , - 3159 , - 1590 , - 1141 , - 1812 , - 403 , - 114 , - 945 , - 2896 , - 2767 , - 558 , - 2669 , - 2700 , - 651 , - 2922 , - 3113 , - 1224 , - 455 , - 806 , - 2277 , - 1668 , - 2179 , - 610 , - 161 , - 832 , - 2623 , - 2334 , - 3165 , - 1916 , - 1787 , - 2778 , - 1689 , - 1720 , - 2871 , - 1942 , - 2133 , - 244 , - 2675 , - 3026 , - 1297 , - 688 , - 1199 , - 2830 , - 2381 , - 3052 , - 1643 , - 1354 , - 2185 , - 936 , - 807 , - 1798 , - 709 , - 740 , - 1891 , - 962 , - 1153 , - 2464 , - 1695 , - 2046 , - 317 , - 2908 , - 219 , - 1850 , - 1401 , - 2072 , - 663 , - 374 , - 1205 , - 3156 , - 3027 , - 818 , - 2929 , - 2960 , - 911 , - 3182 , - 173 , - 1484 , - 715 , - 1066 , - 2537 , - 1928 , - 2439 , - 870 , - 421 , - 1092 , - 2883 , - 2594 , - 225 , - 2176 , - 2047 , - 3038 , - 1949 , - 1980 , - 3131 , - 2202 , - 2393 , - 504 , - 2935 , - 86 , - 1557 , - 948 , - 1459 , - 3090 , - 2641 , - 112 , - 1903 , - 1614 , - 2445 , - 1196 , - 1067 , - 2058 , - 969 , - 1000 , - 2151 , - 1222 , - 1413 , - 2724 , - 1955 , - 2306 , - 577 , - 3168 , - 479 , - 2110 , - 1661 , - 2332 , - 923 , - 634 , - 1465 , - 216 , - 87 , - 1078 , - 3189 , - 20 , - 1171 , - 242 , - 433 , - 1744 , - 975 , - 1326 , - 2797 , - 2188 , - 2699 , - 1130 , - 681 , - 1352 , - 3143 , - 2854 , - 485 , - 2436 , - 2307 , - 98 , - 2209 , - 2240 , - 191 , - 2462 , - 2653 , - 764 , - 3195 , - 346 , - 1817 , - 1208 , - 1719 , - 150 , - 2901 , - 372 , - 2163 , - 1874 , - 2705 , - 1456 , - 1327 , - 2318 , - 1229 , - 1260 , - 2411 , - 1482 , - 1673 , - 2984 , - 2215 , - 2566 , - 837 , - 228 , - 739 , - 2370 , - 1921 , - 2592 , - 1183 , - 894 , - 1725 , - 476 , - 347 , - 1338 , - 249 , - 280 , - 1431 , - 502 , - 693 , - 2004 , - 1235 , - 1586 , - 3057 , - 2448 , - 2959 , - 1390 , - 941 , - 1612 , - 203 , - 3114 , - 745 , - 2696 , - 2567 , - 358 , - 2469 , - 2500 , - 451 , - 2722 , - 2913 , - 1024 , - 255 , - 606 , - 2077 , - 1468 , - 1979 , - 410 , - 3161 , - 632 , - 2423 , - 2134 , - 2965 , - 1716 , - 1587 , - 2578 , - 1489 , - 1520 , - 2671 , - 1742 , - 1933 , - 44 , - 2475 , - 2826 , - 1097 , - 488 , - 999 , - 2630 , - 2181 , - 2852 , - 1443 , - 1154 , - 1985 , - 736 , - 607 , - 1598 , - 509 , - 540 , - 1691 , - 762 , - 953 , - 2264 , - 1495 , - 1846 , - 117 , - 2708 , - 19 , - 1650 , - 1201 , - 1872 , - 463 , - 174 , - 1005 , - 2956 , - 2827 , - 618 , - 2729 , - 2760 , - 711 , - 2982 , - 3173 , - 1284 , - 515 , - 866 , - 2337 , - 1728 , - 2239 , - 670 , - 221 , - 892 , - 2683 , - 2394 , - 25 , - 1976 , - 1847 , - 2838 , - 1749 , - 1780 , - 2931 , - 2002 , - 2193 , - 304 , - 2735 , - 3086 , - 1357 , - 748 , - 1259 , - 2890 , - 2441 , - 3112 , - 1703 , - 1414 , - 2245 , - 996 , - 867 , - 1858 , - 769 , - 800 , - 1951 , - 1022 , - 1213 , - 2524 , - 1755 , - 2106 , - 377 , - 2968 , - 279 , - 1910 , - 1461 , - 2132 , - 723 , - 434 , - 1265 , - 16 , - 3087 , - 878 , - 2989 , - 3020 , - 971 , - 42 , - 233 , - 1544 , - 775 , - 1126 , - 2597 , - 1988 , - 2499 , - 930 , - 481 , - 1152 , - 2943 , - 2654 , - 285 , - 2236 , - 2107 , - 3098 , - 2009 , - 2040 , - 3191 , - 2262 , - 2453 , - 564 , - 2995 , - 146 , - 1617 , - 1008 , - 1519 , - 3150 , - 2701 , - 172 , - 1963 , - 1674 , - 2505 , - 1256 , - 1127 , - 2118 , - 1029 , - 1060 , - 2211 , - 1282 , - 1473 , - 2784 , - 2015 , - 2366 , - 637 , - 28 , - 539 , - 2170 , - 1721 , - 2392 , - 983 , - 694 , - 1525 , - 276 , - 147 , - 1138 , - 49 , - 80 , - 1231 , - 302 , - 493 , - 1804 , - 1035 , - 1386 , - 2857 , - 2248 , - 2759 , - 1190 , - 741 , - 1412 , - 3 , - 2914 , - 545 , - 2496 , - 2367 , - 158 , - 2269 , - 2300 , - 251 , - 2522 , - 2713 , - 824 , - 55 , - 406 , - 1877 , - 1268 , - 1779 , - 210 , - 2961 , - 432 , - 2223 , - 1934 , - 2765 , - 1516 , - 1387 , - 2378 , - 1289 , - 1320 , - 2471 , - 1542 , - 1733 , - 3044 , - 2275 , - 2626 , - 897 , - 288 , - 799 , - 2430 , - 1981 , - 2652 , - 1243 , - 954 , - 1785 , - 536 , - 407 , - 1398 , - 309 , - 340 , - 1491 , - 562 , - 753 , - 2064 , - 1295 , - 1646 , - 3117 , - 2508 , - 3019 , - 1450 , - 1001 , - 1672 , - 263 , - 3174 , - 805 , - 2756 , - 2627 , - 418 , - 2529 , - 2560 , - 511 , - 2782 , - 2973 , - 1084 , - 315 , - 666 , - 2137 , - 1528 , - 2039 , - 470 , - 21 , - 692 , - 2483 , - 2194 , - 3025 , - 1776 , - 1647 , - 2638 , - 1549 , - 1580 , - 2731 , - 1802 , - 1993 , - 104 , - 2535 , - 2886 , - 1157 , - 548 , - 1059 , - 2690 , - 2241 , - 2912 , - 1503 , - 1214 , - 2045 , - 796 , - 667 , - 1658 , - 569 , - 600 , - 1751 , - 822 , - 1013 , - 2324 , - 1555 , - 1906 , - 177 , - 2768 , - 79 , - 1710 , - 1261 , - 1932 , - 523 , - 234 , - 1065 , - 3016 , - 2887 , - 678 , - 2789 , - 2820 , - 771 , - 3042 , - 33 , - 1344 , - 575 , - 926 , - 2397 , - 1788 , - 2299 , - 730 , - 281 , - 952 , - 2743 , - 2454 , - 85 , - 2036 , - 1907 , - 2898 , - 1809 , - 1840 , - 2991 , - 2062 , - 2253 , - 364 , - 2795 , - 3146 , - 1417 , - 808 , - 1319 , - 2950 , - 2501 , - 3172 , - 1763 , - 1474 , - 2305 , - 1056 , - 927 , - 1918 , - 829 , - 860 , - 2011 , - 1082 , - 1273 , - 2584 , - 1815 , - 2166 , - 437 , - 3028 , - 339 , - 1970 , - 1521 , - 2192 , - 783 , - 494 , - 1325 , - 76 , - 3147 , - 938 , - 3049 , - 3080 , - 1031 , - 102 , - 293 , - 1604 , - 835 , - 1186 , - 2657 , - 2048 , - 2559 , - 990 , - 541 , - 1212 , - 3003 , - 2714 , - 345 , - 2296 , - 2167 , - 3158 , - 2069 , - 2100 , - 51 , - 2322 , - 2513 , - 624 , - 3055 , - 206 , - 1677 , - 1068 , - 1579 , - 10 , - 2761 , - 232 , - 2023 , - 1734 , - 2565 , - 1316 , - 1187 , - 2178 , - 1089 , - 1120 , - 2271 , - 1342 , - 1533 , - 2844 , - 2075 , - 2426 , - 697 , - 88 , - 599 , - 2230 , - 1781 , - 2452 , - 1043 , - 754 , - 1585 , - 336 , - 207 , - 1198 , - 109 , - 140 , - 1291 , - 362 , - 553 , - 1864 , - 1095 , - 1446 , - 2917 , - 2308 , - 2819 , - 1250 , - 801 , - 1472 , - 63 , - 2974 , - 605 , - 2556 , - 2427 , - 218 , - 2329 , - 2360 , - 311 , - 2582 , - 2773 , - 884 , - 115 , - 466 , - 1937 , - 1328 , - 1839 , - 270 , - 3021 , - 492 , - 2283 , - 1994 , - 2825 , - 1576 , - 1447 , - 2438 , - 1349 , - 1380 , - 2531 , - 1602 , - 1793 , - 3104 , - 2335 , - 2686 , - 957 , - 348 , - 859 , - 2490 , - 2041 , - 2712 , - 1303 , - 1014 , - 1845 , - 596 , - 467 , - 1458 , - 369 , - 400 , - 1551 , - 622 , - 813 , - 2124 , - 1355 , - 1706 , - 3177 , - 2568 , - 3079 , - 1510 , - 1061 , - 1732 , - 323 , - 34 , - 865 , - 2816 , - 2687 , - 478 , - 2589 , - 2620 , - 571 , - 2842 , - 3033 , - 1144 , - 375 , - 726 , - 2197 , - 1588 , - 2099 , - 530 , - 81 , - 752 , - 2543 , - 2254 , - 3085 , - 1836 , - 1707 , - 2698 , - 1609 , - 1640 , - 2791 , - 1862 , - 2053 , - 164 , - 2595 , - 2946 , - 1217 , - 608 , - 1119 , - 2750 , - 2301 , - 2972 , - 1563 , - 1274 , - 2105 , - 856 , - 727 , - 1718 , - 629 , - 660 , - 1811 , - 882 , - 1073 , - 2384 , - 1615 , - 1966 , - 237 , - 2828 , - 139 , - 1770 , - 1321 , - 1992 , - 583 , - 294 , - 1125 , - 3076 , - 2947 , - 738 , - 2849 , - 2880 , - 831 , - 3102 , - 93 , - 1404 , - 635 , - 986 , - 2457 , - 1848 , - 2359 , - 790 , - 341 , - 1012 , - 2803 , - 2514 , - 145 , - 2096 , - 1967 , - 2958 , - 1869 , - 1900 , - 3051 , - 2122 , - 2313 , - 424 , - 2855 , - 6 , - 1477 , - 868 , - 1379 , - 3010 , - 2561 , - 32 , - 1823 , - 1534 , - 2365 , - 1116 , - 987 , - 1978 , - 889 , - 920 , - 2071 , - 1142 , - 1333 , - 2644 , - 1875 , - 2226 , - 497 , - 3088 , - 399 , - 2030 , - 1581 , - 2252 , - 843 , - 554 , - 1385 , - 136 , - 7 , - 998 , - 3109 , - 3140 , - 1091 , - 162 , - 353 , - 1664 , - 895 , - 1246 , - 2717 , - 2108 , - 2619 , - 1050 , - 601 , - 1272 , - 3063 , - 2774 , - 405 , - 2356 , - 2227 , - 18 , - 2129 , - 2160 , - 111 , - 2382 , - 2573 , - 684 , - 3115 , - 266 , - 1737 , - 1128 , - 1639 , - 70 , - 2821 , - 292 , - 2083 , - 1794 , - 2625 , - 1376 , - 1247 , - 2238 , - 1149 , - 1180 , - 2331 , - 1402 , - 1593 , - 2904 , - 2135 , - 2486 , - 757 , - 148 , - 659 , - 2290 , - 1841 , - 2512 , - 1103 , - 814 , - 1645 , - 396 , - 267 , - 1258 , - 169 , - 200 , - 1351 , - 422 , - 613 , - 1924 , - 1155 , - 1506 , - 2977 , - 2368 , - 2879 , - 1310 , - 861 , - 1532 , - 123 , - 3034 , - 665 , - 2616 , - 2487 , - 278 , - 2389 , - 2420 , - 371 , - 2642 , - 2833 , - 944 , - 175 , - 526 , - 1997 , - 1388 , - 1899 , - 330 , - 3081 , - 552 , - 2343 , - 2054 , - 2885 , - 1636 , - 1507 , - 2498 , - 1409 , - 1440 , - 2591 , - 1662 , - 1853 , - 3164 , - 2395 , - 2746 , - 1017 , - 408 , - 919 , - 2550 , - 2101 , - 2772 , - 1363 , - 1074 , - 1905 , - 656 , - 527 , - 1518 , - 429 , - 460 , - 1611 , - 682 , - 873 , - 2184 , - 1415 , - 1766 , - 37 , - 2628 , - 3139 , - 1570 , - 1121 , - 1792 , - 383 , - 94 , - 925 , - 2876 , - 2747 , - 538 , - 2649 , - 2680 , - 631 , - 2902 , - 3093 , - 1204 , - 435 , - 786 , - 2257 , - 1648 , - 2159 , - 590 , - 141 , - 812 , - 2603 , - 2314 , - 3145 , - 1896 , - 1767 , - 2758 , - 1669 , - 1700 , - 2851 , - 1922 , - 2113 , - 224 , - 2655 , - 3006 , - 1277 , - 668 , - 1179 , - 2810 , - 2361 , - 3032 , - 1623 , - 1334 , - 2165 , - 916 , - 787 , - 1778 , - 689 , - 720 , - 1871 , - 942 , - 1133 , - 2444 , - 1675 , - 2026 , - 297 , - 2888 , - 199 , - 1830 , - 1381 , - 2052 , - 643 , - 354 , - 1185 , - 3136 , - 3007 , - 798 , - 2909 , - 2940 , - 891 , - 3162 , - 153 , - 1464 , - 695 , - 1046 , - 2517 , - 1908 , - 2419 , - 850 , - 401 , - 1072 , - 2863 , - 2574 , - 205 , - 2156 , - 2027 , - 3018 , - 1929 , - 1960 , - 3111 , - 2182 , - 2373 , - 484 , - 2915 , - 66 , - 1537 , - 928 , - 1439 , - 3070 , - 2621 , - 92 , - 1883 , - 1594 , - 2425 , - 1176 , - 1047 , - 2038 , - 949 , - 980 , - 2131 , - 1202 , - 1393 , - 2704 , - 1935 , - 2286 , - 557 , - 3148 , - 459 , - 2090 , - 1641 , - 2312 , - 903 , - 614 , - 1445 , - 196 , - 67 , - 1058 , - 3169 , - 0 , - 1871 , - 2518 , - 1941 , - 140 , - 379 , - 2658 , - 449 , - 280 , - 2151 , - 2798 , - 2221 , - 420 , - 659 , - 2938 , - 729 , - 560 , - 2431 , - 3078 , - 2501 , - 700 , - 939 , - 3218 , - 1009 , - 840 , - 2711 , - 94 , - 2781 , - 980 , - 1219 , - 234 , - 1289 , - 1120 , - 2991 , - 374 , - 3061 , - 1260 , - 1499 , - 514 , - 1569 , - 1400 , - 7 , - 654 , - 77 , - 1540 , - 1779 , - 794 , - 1849 , - 1680 , - 287 , - 934 , - 357 , - 1820 , - 2059 , - 1074 , - 2129 , - 1960 , - 567 , - 1214 , - 637 , - 2100 , - 2339 , - 1354 , - 2409 , - 2240 , - 847 , - 1494 , - 917 , - 2380 , - 2619 , - 1634 , - 2689 , - 2520 , - 1127 , - 1774 , - 1197 , - 2660 , - 2899 , - 1914 , - 2969 , - 2800 , - 1407 , - 2054 , - 1477 , - 2940 , - 3179 , - 2194 , - 3249 , - 3080 , - 1687 , - 2334 , - 1757 , - 3220 , - 195 , - 2474 , - 265 , - 96 , - 1967 , - 2614 , - 2037 , - 236 , - 475 , - 2754 , - 545 , - 376 , - 2247 , - 2894 , - 2317 , - 516 , - 755 , - 3034 , - 825 , - 656 , - 2527 , - 3174 , - 2597 , - 796 , - 1035 , - 50 , - 1105 , - 936 , - 2807 , - 190 , - 2877 , - 1076 , - 1315 , - 330 , - 1385 , - 1216 , - 3087 , - 470 , - 3157 , - 1356 , - 1595 , - 610 , - 1665 , - 1496 , - 103 , - 750 , - 173 , - 1636 , - 1875 , - 890 , - 1945 , - 1776 , - 383 , - 1030 , - 453 , - 1916 , - 2155 , - 1170 , - 2225 , - 2056 , - 663 , - 1310 , - 733 , - 2196 , - 2435 , - 1450 , - 2505 , - 2336 , - 943 , - 1590 , - 1013 , - 2476 , - 2715 , - 1730 , - 2785 , - 2616 , - 1223 , - 1870 , - 1293 , - 2756 , - 2995 , - 2010 , - 3065 , - 2896 , - 1503 , - 2150 , - 1573 , - 3036 , - 11 , - 2290 , - 81 , - 3176 , - 1783 , - 2430 , - 1853 , - 52 , - 291 , - 2570 , - 361 , - 192 , - 2063 , - 2710 , - 2133 , - 332 , - 571 , - 2850 , - 641 , - 472 , - 2343 , - 2990 , - 2413 , - 612 , - 851 , - 3130 , - 921 , - 752 , - 2623 , - 6 , - 2693 , - 892 , - 1131 , - 146 , - 1201 , - 1032 , - 2903 , - 286 , - 2973 , - 1172 , - 1411 , - 426 , - 1481 , - 1312 , - 3183 , - 566 , - 3253 , - 1452 , - 1691 , - 706 , - 1761 , - 1592 , - 199 , - 846 , - 269 , - 1732 , - 1971 , - 986 , - 2041 , - 1872 , - 479 , - 1126 , - 549 , - 2012 , - 2251 , - 1266 , - 2321 , - 2152 , - 759 , - 1406 , - 829 , - 2292 , - 2531 , - 1546 , - 2601 , - 2432 , - 1039 , - 1686 , - 1109 , - 2572 , - 2811 , - 1826 , - 2881 , - 2712 , - 1319 , - 1966 , - 1389 , - 2852 , - 3091 , - 2106 , - 3161 , - 2992 , - 1599 , - 2246 , - 1669 , - 3132 , - 107 , - 2386 , - 177 , - 8 , - 1879 , - 2526 , - 1949 , - 148 , - 387 , - 2666 , - 457 , - 288 , - 2159 , - 2806 , - 2229 , - 428 , - 667 , - 2946 , - 737 , - 568 , - 2439 , - 3086 , - 2509 , - 708 , - 947 , - 3226 , - 1017 , - 848 , - 2719 , - 102 , - 2789 , - 988 , - 1227 , - 242 , - 1297 , - 1128 , - 2999 , - 382 , - 3069 , - 1268 , - 1507 , - 522 , - 1577 , - 1408 , - 15 , - 662 , - 85 , - 1548 , - 1787 , - 802 , - 1857 , - 1688 , - 295 , - 942 , - 365 , - 1828 , - 2067 , - 1082 , - 2137 , - 1968 , - 575 , - 1222 , - 645 , - 2108 , - 2347 , - 1362 , - 2417 , - 2248 , - 855 , - 1502 , - 925 , - 2388 , - 2627 , - 1642 , - 2697 , - 2528 , - 1135 , - 1782 , - 1205 , - 2668 , - 2907 , - 1922 , - 2977 , - 2808 , - 1415 , - 2062 , - 1485 , - 2948 , - 3187 , - 2202 , - 3257 , - 3088 , - 1695 , - 2342 , - 1765 , - 3228 , - 203 , - 2482 , - 273 , - 104 , - 1975 , - 2622 , - 2045 , - 244 , - 483 , - 2762 , - 553 , - 384 , - 2255 , - 2902 , - 2325 , - 524 , - 763 , - 3042 , - 833 , - 664 , - 2535 , - 3182 , - 2605 , - 804 , - 1043 , - 58 , - 1113 , - 944 , - 2815 , - 198 , - 2885 , - 1084 , - 1323 , - 338 , - 1393 , - 1224 , - 3095 , - 478 , - 3165 , - 1364 , - 1603 , - 618 , - 1673 , - 1504 , - 111 , - 758 , - 181 , - 1644 , - 1883 , - 898 , - 1953 , - 1784 , - 391 , - 1038 , - 461 , - 1924 , - 2163 , - 1178 , - 2233 , - 2064 , - 671 , - 1318 , - 741 , - 2204 , - 2443 , - 1458 , - 2513 , - 2344 , - 951 , - 1598 , - 1021 , - 2484 , - 2723 , - 1738 , - 2793 , - 2624 , - 1231 , - 1878 , - 1301 , - 2764 , - 3003 , - 2018 , - 3073 , - 2904 , - 1511 , - 2158 , - 1581 , - 3044 , - 19 , - 2298 , - 89 , - 3184 , - 1791 , - 2438 , - 1861 , - 60 , - 299 , - 2578 , - 369 , - 200 , - 2071 , - 2718 , - 2141 , - 340 , - 579 , - 2858 , - 649 , - 480 , - 2351 , - 2998 , - 2421 , - 620 , - 859 , - 3138 , - 929 , - 760 , - 2631 , - 14 , - 2701 , - 900 , - 1139 , - 154 , - 1209 , - 1040 , - 2911 , - 294 , - 2981 , - 1180 , - 1419 , - 434 , - 1489 , - 1320 , - 3191 , - 574 , - 3261 , - 1460 , - 1699 , - 714 , - 1769 , - 1600 , - 207 , - 854 , - 277 , - 1740 , - 1979 , - 994 , - 2049 , - 1880 , - 487 , - 1134 , - 557 , - 2020 , - 2259 , - 1274 , - 2329 , - 2160 , - 767 , - 1414 , - 837 , - 2300 , - 2539 , - 1554 , - 2609 , - 2440 , - 1047 , - 1694 , - 1117 , - 2580 , - 2819 , - 1834 , - 2889 , - 2720 , - 1327 , - 1974 , - 1397 , - 2860 , - 3099 , - 2114 , - 3169 , - 3000 , - 1607 , - 2254 , - 1677 , - 3140 , - 115 , - 2394 , - 185 , - 16 , - 1887 , - 2534 , - 1957 , - 156 , - 395 , - 2674 , - 465 , - 296 , - 2167 , - 2814 , - 2237 , - 436 , - 675 , - 2954 , - 745 , - 576 , - 2447 , - 3094 , - 2517 , - 716 , - 955 , - 3234 , - 1025 , - 856 , - 2727 , - 110 , - 2797 , - 996 , - 1235 , - 250 , - 1305 , - 1136 , - 3007 , - 390 , - 3077 , - 1276 , - 1515 , - 530 , - 1585 , - 1416 , - 23 , - 670 , - 93 , - 1556 , - 1795 , - 810 , - 1865 , - 1696 , - 303 , - 950 , - 373 , - 1836 , - 2075 , - 1090 , - 2145 , - 1976 , - 583 , - 1230 , - 653 , - 2116 , - 2355 , - 1370 , - 2425 , - 2256 , - 863 , - 1510 , - 933 , - 2396 , - 2635 , - 1650 , - 2705 , - 2536 , - 1143 , - 1790 , - 1213 , - 2676 , - 2915 , - 1930 , - 2985 , - 2816 , - 1423 , - 2070 , - 1493 , - 2956 , - 3195 , - 2210 , - 1 , - 3096 , - 1703 , - 2350 , - 1773 , - 3236 , - 211 , - 2490 , - 281 , - 112 , - 1983 , - 2630 , - 2053 , - 252 , - 491 , - 2770 , - 561 , - 392 , - 2263 , - 2910 , - 2333 , - 532 , - 771 , - 3050 , - 841 , - 672 , - 2543 , - 3190 , - 2613 , - 812 , - 1051 , - 66 , - 1121 , - 952 , - 2823 , - 206 , - 2893 , - 1092 , - 1331 , - 346 , - 1401 , - 1232 , - 3103 , - 486 , - 3173 , - 1372 , - 1611 , - 626 , - 1681 , - 1512 , - 119 , - 766 , - 189 , - 1652 , - 1891 , - 906 , - 1961 , - 1792 , - 399 , - 1046 , - 469 , - 1932 , - 2171 , - 1186 , - 2241 , - 2072 , - 679 , - 1326 , - 749 , - 2212 , - 2451 , - 1466 , - 2521 , - 2352 , - 959 , - 1606 , - 1029 , - 2492 , - 2731 , - 1746 , - 2801 , - 2632 , - 1239 , - 1886 , - 1309 , - 2772 , - 3011 , - 2026 , - 3081 , - 2912 , - 1519 , - 2166 , - 1589 , - 3052 , - 27 , - 2306 , - 97 , - 3192 , - 1799 , - 2446 , - 1869 , - 68 , - 307 , - 2586 , - 377 , - 208 , - 2079 , - 2726 , - 2149 , - 348 , - 587 , - 2866 , - 657 , - 488 , - 2359 , - 3006 , - 2429 , - 628 , - 867 , - 3146 , - 937 , - 768 , - 2639 , - 22 , - 2709 , - 908 , - 1147 , - 162 , - 1217 , - 1048 , - 2919 , - 302 , - 2989 , - 1188 , - 1427 , - 442 , - 1497 , - 1328 , - 3199 , - 582 , - 5 , - 1468 , - 1707 , - 722 , - 1777 , - 1608 , - 215 , - 862 , - 285 , - 1748 , - 1987 , - 1002 , - 2057 , - 1888 , - 495 , - 1142 , - 565 , - 2028 , - 2267 , - 1282 , - 2337 , - 2168 , - 775 , - 1422 , - 845 , - 2308 , - 2547 , - 1562 , - 2617 , - 2448 , - 1055 , - 1702 , - 1125 , - 2588 , - 2827 , - 1842 , - 2897 , - 2728 , - 1335 , - 1982 , - 1405 , - 2868 , - 3107 , - 2122 , - 3177 , - 3008 , - 1615 , - 2262 , - 1685 , - 3148 , - 123 , - 2402 , - 193 , - 24 , - 1895 , - 2542 , - 1965 , - 164 , - 403 , - 2682 , - 473 , - 304 , - 2175 , - 2822 , - 2245 , - 444 , - 683 , - 2962 , - 753 , - 584 , - 2455 , - 3102 , - 2525 , - 724 , - 963 , - 3242 , - 1033 , - 864 , - 2735 , - 118 , - 2805 , - 1004 , - 1243 , - 258 , - 1313 , - 1144 , - 3015 , - 398 , - 3085 , - 1284 , - 1523 , - 538 , - 1593 , - 1424 , - 31 , - 678 , - 101 , - 1564 , - 1803 , - 818 , - 1873 , - 1704 , - 311 , - 958 , - 381 , - 1844 , - 2083 , - 1098 , - 2153 , - 1984 , - 591 , - 1238 , - 661 , - 2124 , - 2363 , - 1378 , - 2433 , - 2264 , - 871 , - 1518 , - 941 , - 2404 , - 2643 , - 1658 , - 2713 , - 2544 , - 1151 , - 1798 , - 1221 , - 2684 , - 2923 , - 1938 , - 2993 , - 2824 , - 1431 , - 2078 , - 1501 , - 2964 , - 3203 , - 2218 , - 9 , - 3104 , - 1711 , - 2358 , - 1781 , - 3244 , - 219 , - 2498 , - 289 , - 120 , - 1991 , - 2638 , - 2061 , - 260 , - 499 , - 2778 , - 569 , - 400 , - 2271 , - 2918 , - 2341 , - 540 , - 779 , - 3058 , - 849 , - 680 , - 2551 , - 3198 , - 2621 , - 820 , - 1059 , - 74 , - 1129 , - 960 , - 2831 , - 214 , - 2901 , - 1100 , - 1339 , - 354 , - 1409 , - 1240 , - 3111 , - 494 , - 3181 , - 1380 , - 1619 , - 634 , - 1689 , - 1520 , - 127 , - 774 , - 197 , - 1660 , - 1899 , - 914 , - 1969 , - 1800 , - 407 , - 1054 , - 477 , - 1940 , - 2179 , - 1194 , - 2249 , - 2080 , - 687 , - 1334 , - 757 , - 2220 , - 2459 , - 1474 , - 2529 , - 2360 , - 967 , - 1614 , - 1037 , - 2500 , - 2739 , - 1754 , - 2809 , - 2640 , - 1247 , - 1894 , - 1317 , - 2780 , - 3019 , - 2034 , - 3089 , - 2920 , - 1527 , - 2174 , - 1597 , - 3060 , - 35 , - 2314 , - 105 , - 3200 , - 1807 , - 2454 , - 1877 , - 76 , - 315 , - 2594 , - 385 , - 216 , - 2087 , - 2734 , - 2157 , - 356 , - 595 , - 2874 , - 665 , - 496 , - 2367 , - 3014 , - 2437 , - 636 , - 875 , - 3154 , - 945 , - 776 , - 2647 , - 30 , - 2717 , - 916 , - 1155 , - 170 , - 1225 , - 1056 , - 2927 , - 310 , - 2997 , - 1196 , - 1435 , - 450 , - 1505 , - 1336 , - 3207 , - 590 , - 13 , - 1476 , - 1715 , - 730 , - 1785 , - 1616 , - 223 , - 870 , - 293 , - 1756 , - 1995 , - 1010 , - 2065 , - 1896 , - 503 , - 1150 , - 573 , - 2036 , - 2275 , - 1290 , - 2345 , - 2176 , - 783 , - 1430 , - 853 , - 2316 , - 2555 , - 1570 , - 2625 , - 2456 , - 1063 , - 1710 , - 1133 , - 2596 , - 2835 , - 1850 , - 2905 , - 2736 , - 1343 , - 1990 , - 1413 , - 2876 , - 3115 , - 2130 , - 3185 , - 3016 , - 1623 , - 2270 , - 1693 , - 3156 , - 131 , - 2410 , - 201 , - 32 , - 1903 , - 2550 , - 1973 , - 172 , - 411 , - 2690 , - 481 , - 312 , - 2183 , - 2830 , - 2253 , - 452 , - 691 , - 2970 , - 761 , - 592 , - 2463 , - 3110 , - 2533 , - 732 , - 971 , - 3250 , - 1041 , - 872 , - 2743 , - 126 , - 2813 , - 1012 , - 1251 , - 266 , - 1321 , - 1152 , - 3023 , - 406 , - 3093 , - 1292 , - 1531 , - 546 , - 1601 , - 1432 , - 39 , - 686 , - 109 , - 1572 , - 1811 , - 826 , - 1881 , - 1712 , - 319 , - 966 , - 389 , - 1852 , - 2091 , - 1106 , - 2161 , - 1992 , - 599 , - 1246 , - 669 , - 2132 , - 2371 , - 1386 , - 2441 , - 2272 , - 879 , - 1526 , - 949 , - 2412 , - 2651 , - 1666 , - 2721 , - 2552 , - 1159 , - 1806 , - 1229 , - 2692 , - 2931 , - 1946 , - 3001 , - 2832 , - 1439 , - 2086 , - 1509 , - 2972 , - 3211 , - 2226 , - 17 , - 3112 , - 1719 , - 2366 , - 1789 , - 3252 , - 227 , - 2506 , - 297 , - 128 , - 1999 , - 2646 , - 2069 , - 268 , - 507 , - 2786 , - 577 , - 408 , - 2279 , - 2926 , - 2349 , - 548 , - 787 , - 3066 , - 857 , - 688 , - 2559 , - 3206 , - 2629 , - 828 , - 1067 , - 82 , - 1137 , - 968 , - 2839 , - 222 , - 2909 , - 1108 , - 1347 , - 362 , - 1417 , - 1248 , - 3119 , - 502 , - 3189 , - 1388 , - 1627 , - 642 , - 1697 , - 1528 , - 135 , - 782 , - 205 , - 1668 , - 1907 , - 922 , - 1977 , - 1808 , - 415 , - 1062 , - 485 , - 1948 , - 2187 , - 1202 , - 2257 , - 2088 , - 695 , - 1342 , - 765 , - 2228 , - 2467 , - 1482 , - 2537 , - 2368 , - 975 , - 1622 , - 1045 , - 2508 , - 2747 , - 1762 , - 2817 , - 2648 , - 1255 , - 1902 , - 1325 , - 2788 , - 3027 , - 2042 , - 3097 , - 2928 , - 1535 , - 2182 , - 1605 , - 3068 , - 43 , - 2322 , - 113 , - 3208 , - 1815 , - 2462 , - 1885 , - 84 , - 323 , - 2602 , - 393 , - 224 , - 2095 , - 2742 , - 2165 , - 364 , - 603 , - 2882 , - 673 , - 504 , - 2375 , - 3022 , - 2445 , - 644 , - 883 , - 3162 , - 953 , - 784 , - 2655 , - 38 , - 2725 , - 924 , - 1163 , - 178 , - 1233 , - 1064 , - 2935 , - 318 , - 3005 , - 1204 , - 1443 , - 458 , - 1513 , - 1344 , - 3215 , - 598 , - 21 , - 1484 , - 1723 , - 738 , - 1793 , - 1624 , - 231 , - 878 , - 301 , - 1764 , - 2003 , - 1018 , - 2073 , - 1904 , - 511 , - 1158 , - 581 , - 2044 , - 2283 , - 1298 , - 2353 , - 2184 , - 791 , - 1438 , - 861 , - 2324 , - 2563 , - 1578 , - 2633 , - 2464 , - 1071 , - 1718 , - 1141 , - 2604 , - 2843 , - 1858 , - 2913 , - 2744 , - 1351 , - 1998 , - 1421 , - 2884 , - 3123 , - 2138 , - 3193 , - 3024 , - 1631 , - 2278 , - 1701 , - 3164 , - 139 , - 2418 , - 209 , - 40 , - 1911 , - 2558 , - 1981 , - 180 , - 419 , - 2698 , - 489 , - 320 , - 2191 , - 2838 , - 2261 , - 460 , - 699 , - 2978 , - 769 , - 600 , - 2471 , - 3118 , - 2541 , - 740 , - 979 , - 3258 , - 1049 , - 880 , - 2751 , - 134 , - 2821 , - 1020 , - 1259 , - 274 , - 1329 , - 1160 , - 3031 , - 414 , - 3101 , - 1300 , - 1539 , - 554 , - 1609 , - 1440 , - 47 , - 694 , - 117 , - 1580 , - 1819 , - 834 , - 1889 , - 1720 , - 327 , - 974 , - 397 , - 1860 , - 2099 , - 1114 , - 2169 , - 2000 , - 607 , - 1254 , - 677 , - 2140 , - 2379 , - 1394 , - 2449 , - 2280 , - 887 , - 1534 , - 957 , - 2420 , - 2659 , - 1674 , - 2729 , - 2560 , - 1167 , - 1814 , - 1237 , - 2700 , - 2939 , - 1954 , - 3009 , - 2840 , - 1447 , - 2094 , - 1517 , - 2980 , - 3219 , - 2234 , - 25 , - 3120 , - 1727 , - 2374 , - 1797 , - 3260 , - 235 , - 2514 , - 305 , - 136 , - 2007 , - 2654 , - 2077 , - 276 , - 515 , - 2794 , - 585 , - 416 , - 2287 , - 2934 , - 2357 , - 556 , - 795 , - 3074 , - 865 , - 696 , - 2567 , - 3214 , - 2637 , - 836 , - 1075 , - 90 , - 1145 , - 976 , - 2847 , - 230 , - 2917 , - 1116 , - 1355 , - 370 , - 1425 , - 1256 , - 3127 , - 510 , - 3197 , - 1396 , - 1635 , - 650 , - 1705 , - 1536 , - 143 , - 790 , - 213 , - 1676 , - 1915 , - 930 , - 1985 , - 1816 , - 423 , - 1070 , - 493 , - 1956 , - 2195 , - 1210 , - 2265 , - 2096 , - 703 , - 1350 , - 773 , - 2236 , - 2475 , - 1490 , - 2545 , - 2376 , - 983 , - 1630 , - 1053 , - 2516 , - 2755 , - 1770 , - 2825 , - 2656 , - 1263 , - 1910 , - 1333 , - 2796 , - 3035 , - 2050 , - 3105 , - 2936 , - 1543 , - 2190 , - 1613 , - 3076 , - 51 , - 2330 , - 121 , - 3216 , - 1823 , - 2470 , - 1893 , - 92 , - 331 , - 2610 , - 401 , - 232 , - 2103 , - 2750 , - 2173 , - 372 , - 611 , - 2890 , - 681 , - 512 , - 2383 , - 3030 , - 2453 , - 652 , - 891 , - 3170 , - 961 , - 792 , - 2663 , - 46 , - 2733 , - 932 , - 1171 , - 186 , - 1241 , - 1072 , - 2943 , - 326 , - 3013 , - 1212 , - 1451 , - 466 , - 1521 , - 1352 , - 3223 , - 606 , - 29 , - 1492 , - 1731 , - 746 , - 1801 , - 1632 , - 239 , - 886 , - 309 , - 1772 , - 2011 , - 1026 , - 2081 , - 1912 , - 519 , - 1166 , - 589 , - 2052 , - 2291 , - 1306 , - 2361 , - 2192 , - 799 , - 1446 , - 869 , - 2332 , - 2571 , - 1586 , - 2641 , - 2472 , - 1079 , - 1726 , - 1149 , - 2612 , - 2851 , - 1866 , - 2921 , - 2752 , - 1359 , - 2006 , - 1429 , - 2892 , - 3131 , - 2146 , - 3201 , - 3032 , - 1639 , - 2286 , - 1709 , - 3172 , - 147 , - 2426 , - 217 , - 48 , - 1919 , - 2566 , - 1989 , - 188 , - 427 , - 2706 , - 497 , - 328 , - 2199 , - 2846 , - 2269 , - 468 , - 707 , - 2986 , - 777 , - 608 , - 2479 , - 3126 , - 2549 , - 748 , - 987 , - 2 , - 1057 , - 888 , - 2759 , - 142 , - 2829 , - 1028 , - 1267 , - 282 , - 1337 , - 1168 , - 3039 , - 422 , - 3109 , - 1308 , - 1547 , - 562 , - 1617 , - 1448 , - 55 , - 702 , - 125 , - 1588 , - 1827 , - 842 , - 1897 , - 1728 , - 335 , - 982 , - 405 , - 1868 , - 2107 , - 1122 , - 2177 , - 2008 , - 615 , - 1262 , - 685 , - 2148 , - 2387 , - 1402 , - 2457 , - 2288 , - 895 , - 1542 , - 965 , - 2428 , - 2667 , - 1682 , - 2737 , - 2568 , - 1175 , - 1822 , - 1245 , - 2708 , - 2947 , - 1962 , - 3017 , - 2848 , - 1455 , - 2102 , - 1525 , - 2988 , - 3227 , - 2242 , - 33 , - 3128 , - 1735 , - 2382 , - 1805 , - 4 , - 243 , - 2522 , - 313 , - 144 , - 2015 , - 2662 , - 2085 , - 284 , - 523 , - 2802 , - 593 , - 424 , - 2295 , - 2942 , - 2365 , - 564 , - 803 , - 3082 , - 873 , - 704 , - 2575 , - 3222 , - 2645 , - 844 , - 1083 , - 98 , - 1153 , - 984 , - 2855 , - 238 , - 2925 , - 1124 , - 1363 , - 378 , - 1433 , - 1264 , - 3135 , - 518 , - 3205 , - 1404 , - 1643 , - 658 , - 1713 , - 1544 , - 151 , - 798 , - 221 , - 1684 , - 1923 , - 938 , - 1993 , - 1824 , - 431 , - 1078 , - 501 , - 1964 , - 2203 , - 1218 , - 2273 , - 2104 , - 711 , - 1358 , - 781 , - 2244 , - 2483 , - 1498 , - 2553 , - 2384 , - 991 , - 1638 , - 1061 , - 2524 , - 2763 , - 1778 , - 2833 , - 2664 , - 1271 , - 1918 , - 1341 , - 2804 , - 3043 , - 2058 , - 3113 , - 2944 , - 1551 , - 2198 , - 1621 , - 3084 , - 59 , - 2338 , - 129 , - 3224 , - 1831 , - 2478 , - 1901 , - 100 , - 339 , - 2618 , - 409 , - 240 , - 2111 , - 2758 , - 2181 , - 380 , - 619 , - 2898 , - 689 , - 520 , - 2391 , - 3038 , - 2461 , - 660 , - 899 , - 3178 , - 969 , - 800 , - 2671 , - 54 , - 2741 , - 940 , - 1179 , - 194 , - 1249 , - 1080 , - 2951 , - 334 , - 3021 , - 1220 , - 1459 , - 474 , - 1529 , - 1360 , - 3231 , - 614 , - 37 , - 1500 , - 1739 , - 754 , - 1809 , - 1640 , - 247 , - 894 , - 317 , - 1780 , - 2019 , - 1034 , - 2089 , - 1920 , - 527 , - 1174 , - 597 , - 2060 , - 2299 , - 1314 , - 2369 , - 2200 , - 807 , - 1454 , - 877 , - 2340 , - 2579 , - 1594 , - 2649 , - 2480 , - 1087 , - 1734 , - 1157 , - 2620 , - 2859 , - 1874 , - 2929 , - 2760 , - 1367 , - 2014 , - 1437 , - 2900 , - 3139 , - 2154 , - 3209 , - 3040 , - 1647 , - 2294 , - 1717 , - 3180 , - 155 , - 2434 , - 225 , - 56 , - 1927 , - 2574 , - 1997 , - 196 , - 435 , - 2714 , - 505 , - 336 , - 2207 , - 2854 , - 2277 , - 476 , - 715 , - 2994 , - 785 , - 616 , - 2487 , - 3134 , - 2557 , - 756 , - 995 , - 10 , - 1065 , - 896 , - 2767 , - 150 , - 2837 , - 1036 , - 1275 , - 290 , - 1345 , - 1176 , - 3047 , - 430 , - 3117 , - 1316 , - 1555 , - 570 , - 1625 , - 1456 , - 63 , - 710 , - 133 , - 1596 , - 1835 , - 850 , - 1905 , - 1736 , - 343 , - 990 , - 413 , - 1876 , - 2115 , - 1130 , - 2185 , - 2016 , - 623 , - 1270 , - 693 , - 2156 , - 2395 , - 1410 , - 2465 , - 2296 , - 903 , - 1550 , - 973 , - 2436 , - 2675 , - 1690 , - 2745 , - 2576 , - 1183 , - 1830 , - 1253 , - 2716 , - 2955 , - 1970 , - 3025 , - 2856 , - 1463 , - 2110 , - 1533 , - 2996 , - 3235 , - 2250 , - 41 , - 3136 , - 1743 , - 2390 , - 1813 , - 12 , - 251 , - 2530 , - 321 , - 152 , - 2023 , - 2670 , - 2093 , - 292 , - 531 , - 2810 , - 601 , - 432 , - 2303 , - 2950 , - 2373 , - 572 , - 811 , - 3090 , - 881 , - 712 , - 2583 , - 3230 , - 2653 , - 852 , - 1091 , - 106 , - 1161 , - 992 , - 2863 , - 246 , - 2933 , - 1132 , - 1371 , - 386 , - 1441 , - 1272 , - 3143 , - 526 , - 3213 , - 1412 , - 1651 , - 666 , - 1721 , - 1552 , - 159 , - 806 , - 229 , - 1692 , - 1931 , - 946 , - 2001 , - 1832 , - 439 , - 1086 , - 509 , - 1972 , - 2211 , - 1226 , - 2281 , - 2112 , - 719 , - 1366 , - 789 , - 2252 , - 2491 , - 1506 , - 2561 , - 2392 , - 999 , - 1646 , - 1069 , - 2532 , - 2771 , - 1786 , - 2841 , - 2672 , - 1279 , - 1926 , - 1349 , - 2812 , - 3051 , - 2066 , - 3121 , - 2952 , - 1559 , - 2206 , - 1629 , - 3092 , - 67 , - 2346 , - 137 , - 3232 , - 1839 , - 2486 , - 1909 , - 108 , - 347 , - 2626 , - 417 , - 248 , - 2119 , - 2766 , - 2189 , - 388 , - 627 , - 2906 , - 697 , - 528 , - 2399 , - 3046 , - 2469 , - 668 , - 907 , - 3186 , - 977 , - 808 , - 2679 , - 62 , - 2749 , - 948 , - 1187 , - 202 , - 1257 , - 1088 , - 2959 , - 342 , - 3029 , - 1228 , - 1467 , - 482 , - 1537 , - 1368 , - 3239 , - 622 , - 45 , - 1508 , - 1747 , - 762 , - 1817 , - 1648 , - 255 , - 902 , - 325 , - 1788 , - 2027 , - 1042 , - 2097 , - 1928 , - 535 , - 1182 , - 605 , - 2068 , - 2307 , - 1322 , - 2377 , - 2208 , - 815 , - 1462 , - 885 , - 2348 , - 2587 , - 1602 , - 2657 , - 2488 , - 1095 , - 1742 , - 1165 , - 2628 , - 2867 , - 1882 , - 2937 , - 2768 , - 1375 , - 2022 , - 1445 , - 2908 , - 3147 , - 2162 , - 3217 , - 3048 , - 1655 , - 2302 , - 1725 , - 3188 , - 163 , - 2442 , - 233 , - 64 , - 1935 , - 2582 , - 2005 , - 204 , - 443 , - 2722 , - 513 , - 344 , - 2215 , - 2862 , - 2285 , - 484 , - 723 , - 3002 , - 793 , - 624 , - 2495 , - 3142 , - 2565 , - 764 , - 1003 , - 18 , - 1073 , - 904 , - 2775 , - 158 , - 2845 , - 1044 , - 1283 , - 298 , - 1353 , - 1184 , - 3055 , - 438 , - 3125 , - 1324 , - 1563 , - 578 , - 1633 , - 1464 , - 71 , - 718 , - 141 , - 1604 , - 1843 , - 858 , - 1913 , - 1744 , - 351 , - 998 , - 421 , - 1884 , - 2123 , - 1138 , - 2193 , - 2024 , - 631 , - 1278 , - 701 , - 2164 , - 2403 , - 1418 , - 2473 , - 2304 , - 911 , - 1558 , - 981 , - 2444 , - 2683 , - 1698 , - 2753 , - 2584 , - 1191 , - 1838 , - 1261 , - 2724 , - 2963 , - 1978 , - 3033 , - 2864 , - 1471 , - 2118 , - 1541 , - 3004 , - 3243 , - 2258 , - 49 , - 3144 , - 1751 , - 2398 , - 1821 , - 20 , - 259 , - 2538 , - 329 , - 160 , - 2031 , - 2678 , - 2101 , - 300 , - 539 , - 2818 , - 609 , - 440 , - 2311 , - 2958 , - 2381 , - 580 , - 819 , - 3098 , - 889 , - 720 , - 2591 , - 3238 , - 2661 , - 860 , - 1099 , - 114 , - 1169 , - 1000 , - 2871 , - 254 , - 2941 , - 1140 , - 1379 , - 394 , - 1449 , - 1280 , - 3151 , - 534 , - 3221 , - 1420 , - 1659 , - 674 , - 1729 , - 1560 , - 167 , - 814 , - 237 , - 1700 , - 1939 , - 954 , - 2009 , - 1840 , - 447 , - 1094 , - 517 , - 1980 , - 2219 , - 1234 , - 2289 , - 2120 , - 727 , - 1374 , - 797 , - 2260 , - 2499 , - 1514 , - 2569 , - 2400 , - 1007 , - 1654 , - 1077 , - 2540 , - 2779 , - 1794 , - 2849 , - 2680 , - 1287 , - 1934 , - 1357 , - 2820 , - 3059 , - 2074 , - 3129 , - 2960 , - 1567 , - 2214 , - 1637 , - 3100 , - 75 , - 2354 , - 145 , - 3240 , - 1847 , - 2494 , - 1917 , - 116 , - 355 , - 2634 , - 425 , - 256 , - 2127 , - 2774 , - 2197 , - 396 , - 635 , - 2914 , - 705 , - 536 , - 2407 , - 3054 , - 2477 , - 676 , - 915 , - 3194 , - 985 , - 816 , - 2687 , - 70 , - 2757 , - 956 , - 1195 , - 210 , - 1265 , - 1096 , - 2967 , - 350 , - 3037 , - 1236 , - 1475 , - 490 , - 1545 , - 1376 , - 3247 , - 630 , - 53 , - 1516 , - 1755 , - 770 , - 1825 , - 1656 , - 263 , - 910 , - 333 , - 1796 , - 2035 , - 1050 , - 2105 , - 1936 , - 543 , - 1190 , - 613 , - 2076 , - 2315 , - 1330 , - 2385 , - 2216 , - 823 , - 1470 , - 893 , - 2356 , - 2595 , - 1610 , - 2665 , - 2496 , - 1103 , - 1750 , - 1173 , - 2636 , - 2875 , - 1890 , - 2945 , - 2776 , - 1383 , - 2030 , - 1453 , - 2916 , - 3155 , - 2170 , - 3225 , - 3056 , - 1663 , - 2310 , - 1733 , - 3196 , - 171 , - 2450 , - 241 , - 72 , - 1943 , - 2590 , - 2013 , - 212 , - 451 , - 2730 , - 521 , - 352 , - 2223 , - 2870 , - 2293 , - 492 , - 731 , - 3010 , - 801 , - 632 , - 2503 , - 3150 , - 2573 , - 772 , - 1011 , - 26 , - 1081 , - 912 , - 2783 , - 166 , - 2853 , - 1052 , - 1291 , - 306 , - 1361 , - 1192 , - 3063 , - 446 , - 3133 , - 1332 , - 1571 , - 586 , - 1641 , - 1472 , - 79 , - 726 , - 149 , - 1612 , - 1851 , - 866 , - 1921 , - 1752 , - 359 , - 1006 , - 429 , - 1892 , - 2131 , - 1146 , - 2201 , - 2032 , - 639 , - 1286 , - 709 , - 2172 , - 2411 , - 1426 , - 2481 , - 2312 , - 919 , - 1566 , - 989 , - 2452 , - 2691 , - 1706 , - 2761 , - 2592 , - 1199 , - 1846 , - 1269 , - 2732 , - 2971 , - 1986 , - 3041 , - 2872 , - 1479 , - 2126 , - 1549 , - 3012 , - 3251 , - 2266 , - 57 , - 3152 , - 1759 , - 2406 , - 1829 , - 28 , - 267 , - 2546 , - 337 , - 168 , - 2039 , - 2686 , - 2109 , - 308 , - 547 , - 2826 , - 617 , - 448 , - 2319 , - 2966 , - 2389 , - 588 , - 827 , - 3106 , - 897 , - 728 , - 2599 , - 3246 , - 2669 , - 868 , - 1107 , - 122 , - 1177 , - 1008 , - 2879 , - 262 , - 2949 , - 1148 , - 1387 , - 402 , - 1457 , - 1288 , - 3159 , - 542 , - 3229 , - 1428 , - 1667 , - 682 , - 1737 , - 1568 , - 175 , - 822 , - 245 , - 1708 , - 1947 , - 962 , - 2017 , - 1848 , - 455 , - 1102 , - 525 , - 1988 , - 2227 , - 1242 , - 2297 , - 2128 , - 735 , - 1382 , - 805 , - 2268 , - 2507 , - 1522 , - 2577 , - 2408 , - 1015 , - 1662 , - 1085 , - 2548 , - 2787 , - 1802 , - 2857 , - 2688 , - 1295 , - 1942 , - 1365 , - 2828 , - 3067 , - 2082 , - 3137 , - 2968 , - 1575 , - 2222 , - 1645 , - 3108 , - 83 , - 2362 , - 153 , - 3248 , - 1855 , - 2502 , - 1925 , - 124 , - 363 , - 2642 , - 433 , - 264 , - 2135 , - 2782 , - 2205 , - 404 , - 643 , - 2922 , - 713 , - 544 , - 2415 , - 3062 , - 2485 , - 684 , - 923 , - 3202 , - 993 , - 824 , - 2695 , - 78 , - 2765 , - 964 , - 1203 , - 218 , - 1273 , - 1104 , - 2975 , - 358 , - 3045 , - 1244 , - 1483 , - 498 , - 1553 , - 1384 , - 3255 , - 638 , - 61 , - 1524 , - 1763 , - 778 , - 1833 , - 1664 , - 271 , - 918 , - 341 , - 1804 , - 2043 , - 1058 , - 2113 , - 1944 , - 551 , - 1198 , - 621 , - 2084 , - 2323 , - 1338 , - 2393 , - 2224 , - 831 , - 1478 , - 901 , - 2364 , - 2603 , - 1618 , - 2673 , - 2504 , - 1111 , - 1758 , - 1181 , - 2644 , - 2883 , - 1898 , - 2953 , - 2784 , - 1391 , - 2038 , - 1461 , - 2924 , - 3163 , - 2178 , - 3233 , - 3064 , - 1671 , - 2318 , - 1741 , - 3204 , - 179 , - 2458 , - 249 , - 80 , - 1951 , - 2598 , - 2021 , - 220 , - 459 , - 2738 , - 529 , - 360 , - 2231 , - 2878 , - 2301 , - 500 , - 739 , - 3018 , - 809 , - 640 , - 2511 , - 3158 , - 2581 , - 780 , - 1019 , - 34 , - 1089 , - 920 , - 2791 , - 174 , - 2861 , - 1060 , - 1299 , - 314 , - 1369 , - 1200 , - 3071 , - 454 , - 3141 , - 1340 , - 1579 , - 594 , - 1649 , - 1480 , - 87 , - 734 , - 157 , - 1620 , - 1859 , - 874 , - 1929 , - 1760 , - 367 , - 1014 , - 437 , - 1900 , - 2139 , - 1154 , - 2209 , - 2040 , - 647 , - 1294 , - 717 , - 2180 , - 2419 , - 1434 , - 2489 , - 2320 , - 927 , - 1574 , - 997 , - 2460 , - 2699 , - 1714 , - 2769 , - 2600 , - 1207 , - 1854 , - 1277 , - 2740 , - 2979 , - 1994 , - 3049 , - 2880 , - 1487 , - 2134 , - 1557 , - 3020 , - 3259 , - 2274 , - 65 , - 3160 , - 1767 , - 2414 , - 1837 , - 36 , - 275 , - 2554 , - 345 , - 176 , - 2047 , - 2694 , - 2117 , - 316 , - 555 , - 2834 , - 625 , - 456 , - 2327 , - 2974 , - 2397 , - 596 , - 835 , - 3114 , - 905 , - 736 , - 2607 , - 3254 , - 2677 , - 876 , - 1115 , - 130 , - 1185 , - 1016 , - 2887 , - 270 , - 2957 , - 1156 , - 1395 , - 410 , - 1465 , - 1296 , - 3167 , - 550 , - 3237 , - 1436 , - 1675 , - 690 , - 1745 , - 1576 , - 183 , - 830 , - 253 , - 1716 , - 1955 , - 970 , - 2025 , - 1856 , - 463 , - 1110 , - 533 , - 1996 , - 2235 , - 1250 , - 2305 , - 2136 , - 743 , - 1390 , - 813 , - 2276 , - 2515 , - 1530 , - 2585 , - 2416 , - 1023 , - 1670 , - 1093 , - 2556 , - 2795 , - 1810 , - 2865 , - 2696 , - 1303 , - 1950 , - 1373 , - 2836 , - 3075 , - 2090 , - 3145 , - 2976 , - 1583 , - 2230 , - 1653 , - 3116 , - 91 , - 2370 , - 161 , - 3256 , - 1863 , - 2510 , - 1933 , - 132 , - 371 , - 2650 , - 441 , - 272 , - 2143 , - 2790 , - 2213 , - 412 , - 651 , - 2930 , - 721 , - 552 , - 2423 , - 3070 , - 2493 , - 692 , - 931 , - 3210 , - 1001 , - 832 , - 2703 , - 86 , - 2773 , - 972 , - 1211 , - 226 , - 1281 , - 1112 , - 2983 , - 366 , - 3053 , - 1252 , - 1491 , - 506 , - 1561 , - 1392 , - 3263 , - 646 , - 69 , - 1532 , - 1771 , - 786 , - 1841 , - 1672 , - 279 , - 926 , - 349 , - 1812 , - 2051 , - 1066 , - 2121 , - 1952 , - 559 , - 1206 , - 629 , - 2092 , - 2331 , - 1346 , - 2401 , - 2232 , - 839 , - 1486 , - 909 , - 2372 , - 2611 , - 1626 , - 2681 , - 2512 , - 1119 , - 1766 , - 1189 , - 2652 , - 2891 , - 1906 , - 2961 , - 2792 , - 1399 , - 2046 , - 1469 , - 2932 , - 3171 , - 2186 , - 3241 , - 3072 , - 1679 , - 2326 , - 1749 , - 3212 , - 187 , - 2466 , - 257 , - 88 , - 1959 , - 2606 , - 2029 , - 228 , - 467 , - 2746 , - 537 , - 368 , - 2239 , - 2886 , - 2309 , - 508 , - 747 , - 3026 , - 817 , - 648 , - 2519 , - 3166 , - 2589 , - 788 , - 1027 , - 42 , - 1097 , - 928 , - 2799 , - 182 , - 2869 , - 1068 , - 1307 , - 322 , - 1377 , - 1208 , - 3079 , - 462 , - 3149 , - 1348 , - 1587 , - 602 , - 1657 , - 1488 , - 95 , - 742 , - 165 , - 1628 , - 1867 , - 882 , - 1937 , - 1768 , - 375 , - 1022 , - 445 , - 1908 , - 2147 , - 1162 , - 2217 , - 2048 , - 655 , - 1302 , - 725 , - 2188 , - 2427 , - 1442 , - 2497 , - 2328 , - 935 , - 1582 , - 1005 , - 2468 , - 2707 , - 1722 , - 2777 , - 2608 , - 1215 , - 1862 , - 1285 , - 2748 , - 2987 , - 2002 , - 3057 , - 2888 , - 1495 , - 2142 , - 1565 , - 3028 , - 3 , - 2282 , - 73 , - 3168 , - 1775 , - 2422 , - 1845 , - 44 , - 283 , - 2562 , - 353 , - 184 , - 2055 , - 2702 , - 2125 , - 324 , - 563 , - 2842 , - 633 , - 464 , - 2335 , - 2982 , - 2405 , - 604 , - 843 , - 3122 , - 913 , - 744 , - 2615 , - 3262 , - 2685 , - 884 , - 1123 , - 138 , - 1193 , - 1024 , - 2895 , - 278 , - 2965 , - 1164 , - 1403 , - 418 , - 1473 , - 1304 , - 3175 , - 558 , - 3245 , - 1444 , - 1683 , - 698 , - 1753 , - 1584 , - 191 , - 838 , - 261 , - 1724 , - 1963 , - 978 , - 2033 , - 1864 , - 471 , - 1118 , - 541 , - 2004 , - 2243 , - 1258 , - 2313 , - 2144 , - 751 , - 1398 , - 821 , - 2284 , - 2523 , - 1538 , - 2593 , - 2424 , - 1031 , - 1678 , - 1101 , - 2564 , - 2803 , - 1818 , - 2873 , - 2704 , - 1311 , - 1958 , - 1381 , - 2844 , - 3083 , - 2098 , - 3153 , - 2984 , - 1591 , - 2238 , - 1661 , - 3124 , - 99 , - 2378 , - 169 , - 0 , - 1091 , - 1558 , - 1401 , - 620 , - 2543 , - 514 , - 1189 , - 1240 , - 667 , - 2798 , - 977 , - 1860 , - 2119 , - 1754 , - 765 , - 2480 , - 243 , - 710 , - 553 , - 3100 , - 1695 , - 2994 , - 341 , - 392 , - 3147 , - 1950 , - 129 , - 1012 , - 1271 , - 906 , - 3245 , - 1632 , - 2723 , - 3190 , - 3033 , - 2252 , - 847 , - 2146 , - 2821 , - 2872 , - 2299 , - 1102 , - 2609 , - 164 , - 423 , - 58 , - 2397 , - 784 , - 1875 , - 2342 , - 2185 , - 1404 , - 3327 , - 1298 , - 1973 , - 2024 , - 1451 , - 254 , - 1761 , - 2644 , - 2903 , - 2538 , - 1549 , - 3264 , - 1027 , - 1494 , - 1337 , - 556 , - 2479 , - 450 , - 1125 , - 1176 , - 603 , - 2734 , - 913 , - 1796 , - 2055 , - 1690 , - 701 , - 2416 , - 179 , - 646 , - 489 , - 3036 , - 1631 , - 2930 , - 277 , - 328 , - 3083 , - 1886 , - 65 , - 948 , - 1207 , - 842 , - 3181 , - 1568 , - 2659 , - 3126 , - 2969 , - 2188 , - 783 , - 2082 , - 2757 , - 2808 , - 2235 , - 1038 , - 2545 , - 100 , - 359 , - 3322 , - 2333 , - 720 , - 1811 , - 2278 , - 2121 , - 1340 , - 3263 , - 1234 , - 1909 , - 1960 , - 1387 , - 190 , - 1697 , - 2580 , - 2839 , - 2474 , - 1485 , - 3200 , - 963 , - 1430 , - 1273 , - 492 , - 2415 , - 386 , - 1061 , - 1112 , - 539 , - 2670 , - 849 , - 1732 , - 1991 , - 1626 , - 637 , - 2352 , - 115 , - 582 , - 425 , - 2972 , - 1567 , - 2866 , - 213 , - 264 , - 3019 , - 1822 , - 1 , - 884 , - 1143 , - 778 , - 3117 , - 1504 , - 2595 , - 3062 , - 2905 , - 2124 , - 719 , - 2018 , - 2693 , - 2744 , - 2171 , - 974 , - 2481 , - 36 , - 295 , - 3258 , - 2269 , - 656 , - 1747 , - 2214 , - 2057 , - 1276 , - 3199 , - 1170 , - 1845 , - 1896 , - 1323 , - 126 , - 1633 , - 2516 , - 2775 , - 2410 , - 1421 , - 3136 , - 899 , - 1366 , - 1209 , - 428 , - 2351 , - 322 , - 997 , - 1048 , - 475 , - 2606 , - 785 , - 1668 , - 1927 , - 1562 , - 573 , - 2288 , - 51 , - 518 , - 361 , - 2908 , - 1503 , - 2802 , - 149 , - 200 , - 2955 , - 1758 , - 3265 , - 820 , - 1079 , - 714 , - 3053 , - 1440 , - 2531 , - 2998 , - 2841 , - 2060 , - 655 , - 1954 , - 2629 , - 2680 , - 2107 , - 910 , - 2417 , - 3300 , - 231 , - 3194 , - 2205 , - 592 , - 1683 , - 2150 , - 1993 , - 1212 , - 3135 , - 1106 , - 1781 , - 1832 , - 1259 , - 62 , - 1569 , - 2452 , - 2711 , - 2346 , - 1357 , - 3072 , - 835 , - 1302 , - 1145 , - 364 , - 2287 , - 258 , - 933 , - 984 , - 411 , - 2542 , - 721 , - 1604 , - 1863 , - 1498 , - 509 , - 2224 , - 3315 , - 454 , - 297 , - 2844 , - 1439 , - 2738 , - 85 , - 136 , - 2891 , - 1694 , - 3201 , - 756 , - 1015 , - 650 , - 2989 , - 1376 , - 2467 , - 2934 , - 2777 , - 1996 , - 591 , - 1890 , - 2565 , - 2616 , - 2043 , - 846 , - 2353 , - 3236 , - 167 , - 3130 , - 2141 , - 528 , - 1619 , - 2086 , - 1929 , - 1148 , - 3071 , - 1042 , - 1717 , - 1768 , - 1195 , - 3326 , - 1505 , - 2388 , - 2647 , - 2282 , - 1293 , - 3008 , - 771 , - 1238 , - 1081 , - 300 , - 2223 , - 194 , - 869 , - 920 , - 347 , - 2478 , - 657 , - 1540 , - 1799 , - 1434 , - 445 , - 2160 , - 3251 , - 390 , - 233 , - 2780 , - 1375 , - 2674 , - 21 , - 72 , - 2827 , - 1630 , - 3137 , - 692 , - 951 , - 586 , - 2925 , - 1312 , - 2403 , - 2870 , - 2713 , - 1932 , - 527 , - 1826 , - 2501 , - 2552 , - 1979 , - 782 , - 2289 , - 3172 , - 103 , - 3066 , - 2077 , - 464 , - 1555 , - 2022 , - 1865 , - 1084 , - 3007 , - 978 , - 1653 , - 1704 , - 1131 , - 3262 , - 1441 , - 2324 , - 2583 , - 2218 , - 1229 , - 2944 , - 707 , - 1174 , - 1017 , - 236 , - 2159 , - 130 , - 805 , - 856 , - 283 , - 2414 , - 593 , - 1476 , - 1735 , - 1370 , - 381 , - 2096 , - 3187 , - 326 , - 169 , - 2716 , - 1311 , - 2610 , - 3285 , - 8 , - 2763 , - 1566 , - 3073 , - 628 , - 887 , - 522 , - 2861 , - 1248 , - 2339 , - 2806 , - 2649 , - 1868 , - 463 , - 1762 , - 2437 , - 2488 , - 1915 , - 718 , - 2225 , - 3108 , - 39 , - 3002 , - 2013 , - 400 , - 1491 , - 1958 , - 1801 , - 1020 , - 2943 , - 914 , - 1589 , - 1640 , - 1067 , - 3198 , - 1377 , - 2260 , - 2519 , - 2154 , - 1165 , - 2880 , - 643 , - 1110 , - 953 , - 172 , - 2095 , - 66 , - 741 , - 792 , - 219 , - 2350 , - 529 , - 1412 , - 1671 , - 1306 , - 317 , - 2032 , - 3123 , - 262 , - 105 , - 2652 , - 1247 , - 2546 , - 3221 , - 3272 , - 2699 , - 1502 , - 3009 , - 564 , - 823 , - 458 , - 2797 , - 1184 , - 2275 , - 2742 , - 2585 , - 1804 , - 399 , - 1698 , - 2373 , - 2424 , - 1851 , - 654 , - 2161 , - 3044 , - 3303 , - 2938 , - 1949 , - 336 , - 1427 , - 1894 , - 1737 , - 956 , - 2879 , - 850 , - 1525 , - 1576 , - 1003 , - 3134 , - 1313 , - 2196 , - 2455 , - 2090 , - 1101 , - 2816 , - 579 , - 1046 , - 889 , - 108 , - 2031 , - 2 , - 677 , - 728 , - 155 , - 2286 , - 465 , - 1348 , - 1607 , - 1242 , - 253 , - 1968 , - 3059 , - 198 , - 41 , - 2588 , - 1183 , - 2482 , - 3157 , - 3208 , - 2635 , - 1438 , - 2945 , - 500 , - 759 , - 394 , - 2733 , - 1120 , - 2211 , - 2678 , - 2521 , - 1740 , - 335 , - 1634 , - 2309 , - 2360 , - 1787 , - 590 , - 2097 , - 2980 , - 3239 , - 2874 , - 1885 , - 272 , - 1363 , - 1830 , - 1673 , - 892 , - 2815 , - 786 , - 1461 , - 1512 , - 939 , - 3070 , - 1249 , - 2132 , - 2391 , - 2026 , - 1037 , - 2752 , - 515 , - 982 , - 825 , - 44 , - 1967 , - 3266 , - 613 , - 664 , - 91 , - 2222 , - 401 , - 1284 , - 1543 , - 1178 , - 189 , - 1904 , - 2995 , - 134 , - 3305 , - 2524 , - 1119 , - 2418 , - 3093 , - 3144 , - 2571 , - 1374 , - 2881 , - 436 , - 695 , - 330 , - 2669 , - 1056 , - 2147 , - 2614 , - 2457 , - 1676 , - 271 , - 1570 , - 2245 , - 2296 , - 1723 , - 526 , - 2033 , - 2916 , - 3175 , - 2810 , - 1821 , - 208 , - 1299 , - 1766 , - 1609 , - 828 , - 2751 , - 722 , - 1397 , - 1448 , - 875 , - 3006 , - 1185 , - 2068 , - 2327 , - 1962 , - 973 , - 2688 , - 451 , - 918 , - 761 , - 3308 , - 1903 , - 3202 , - 549 , - 600 , - 27 , - 2158 , - 337 , - 1220 , - 1479 , - 1114 , - 125 , - 1840 , - 2931 , - 70 , - 3241 , - 2460 , - 1055 , - 2354 , - 3029 , - 3080 , - 2507 , - 1310 , - 2817 , - 372 , - 631 , - 266 , - 2605 , - 992 , - 2083 , - 2550 , - 2393 , - 1612 , - 207 , - 1506 , - 2181 , - 2232 , - 1659 , - 462 , - 1969 , - 2852 , - 3111 , - 2746 , - 1757 , - 144 , - 1235 , - 1702 , - 1545 , - 764 , - 2687 , - 658 , - 1333 , - 1384 , - 811 , - 2942 , - 1121 , - 2004 , - 2263 , - 1898 , - 909 , - 2624 , - 387 , - 854 , - 697 , - 3244 , - 1839 , - 3138 , - 485 , - 536 , - 3291 , - 2094 , - 273 , - 1156 , - 1415 , - 1050 , - 61 , - 1776 , - 2867 , - 6 , - 3177 , - 2396 , - 991 , - 2290 , - 2965 , - 3016 , - 2443 , - 1246 , - 2753 , - 308 , - 567 , - 202 , - 2541 , - 928 , - 2019 , - 2486 , - 2329 , - 1548 , - 143 , - 1442 , - 2117 , - 2168 , - 1595 , - 398 , - 1905 , - 2788 , - 3047 , - 2682 , - 1693 , - 80 , - 1171 , - 1638 , - 1481 , - 700 , - 2623 , - 594 , - 1269 , - 1320 , - 747 , - 2878 , - 1057 , - 1940 , - 2199 , - 1834 , - 845 , - 2560 , - 323 , - 790 , - 633 , - 3180 , - 1775 , - 3074 , - 421 , - 472 , - 3227 , - 2030 , - 209 , - 1092 , - 1351 , - 986 , - 3325 , - 1712 , - 2803 , - 3270 , - 3113 , - 2332 , - 927 , - 2226 , - 2901 , - 2952 , - 2379 , - 1182 , - 2689 , - 244 , - 503 , - 138 , - 2477 , - 864 , - 1955 , - 2422 , - 2265 , - 1484 , - 79 , - 1378 , - 2053 , - 2104 , - 1531 , - 334 , - 1841 , - 2724 , - 2983 , - 2618 , - 1629 , - 16 , - 1107 , - 1574 , - 1417 , - 636 , - 2559 , - 530 , - 1205 , - 1256 , - 683 , - 2814 , - 993 , - 1876 , - 2135 , - 1770 , - 781 , - 2496 , - 259 , - 726 , - 569 , - 3116 , - 1711 , - 3010 , - 357 , - 408 , - 3163 , - 1966 , - 145 , - 1028 , - 1287 , - 922 , - 3261 , - 1648 , - 2739 , - 3206 , - 3049 , - 2268 , - 863 , - 2162 , - 2837 , - 2888 , - 2315 , - 1118 , - 2625 , - 180 , - 439 , - 74 , - 2413 , - 800 , - 1891 , - 2358 , - 2201 , - 1420 , - 15 , - 1314 , - 1989 , - 2040 , - 1467 , - 270 , - 1777 , - 2660 , - 2919 , - 2554 , - 1565 , - 3280 , - 1043 , - 1510 , - 1353 , - 572 , - 2495 , - 466 , - 1141 , - 1192 , - 619 , - 2750 , - 929 , - 1812 , - 2071 , - 1706 , - 717 , - 2432 , - 195 , - 662 , - 505 , - 3052 , - 1647 , - 2946 , - 293 , - 344 , - 3099 , - 1902 , - 81 , - 964 , - 1223 , - 858 , - 3197 , - 1584 , - 2675 , - 3142 , - 2985 , - 2204 , - 799 , - 2098 , - 2773 , - 2824 , - 2251 , - 1054 , - 2561 , - 116 , - 375 , - 10 , - 2349 , - 736 , - 1827 , - 2294 , - 2137 , - 1356 , - 3279 , - 1250 , - 1925 , - 1976 , - 1403 , - 206 , - 1713 , - 2596 , - 2855 , - 2490 , - 1501 , - 3216 , - 979 , - 1446 , - 1289 , - 508 , - 2431 , - 402 , - 1077 , - 1128 , - 555 , - 2686 , - 865 , - 1748 , - 2007 , - 1642 , - 653 , - 2368 , - 131 , - 598 , - 441 , - 2988 , - 1583 , - 2882 , - 229 , - 280 , - 3035 , - 1838 , - 17 , - 900 , - 1159 , - 794 , - 3133 , - 1520 , - 2611 , - 3078 , - 2921 , - 2140 , - 735 , - 2034 , - 2709 , - 2760 , - 2187 , - 990 , - 2497 , - 52 , - 311 , - 3274 , - 2285 , - 672 , - 1763 , - 2230 , - 2073 , - 1292 , - 3215 , - 1186 , - 1861 , - 1912 , - 1339 , - 142 , - 1649 , - 2532 , - 2791 , - 2426 , - 1437 , - 3152 , - 915 , - 1382 , - 1225 , - 444 , - 2367 , - 338 , - 1013 , - 1064 , - 491 , - 2622 , - 801 , - 1684 , - 1943 , - 1578 , - 589 , - 2304 , - 67 , - 534 , - 377 , - 2924 , - 1519 , - 2818 , - 165 , - 216 , - 2971 , - 1774 , - 3281 , - 836 , - 1095 , - 730 , - 3069 , - 1456 , - 2547 , - 3014 , - 2857 , - 2076 , - 671 , - 1970 , - 2645 , - 2696 , - 2123 , - 926 , - 2433 , - 3316 , - 247 , - 3210 , - 2221 , - 608 , - 1699 , - 2166 , - 2009 , - 1228 , - 3151 , - 1122 , - 1797 , - 1848 , - 1275 , - 78 , - 1585 , - 2468 , - 2727 , - 2362 , - 1373 , - 3088 , - 851 , - 1318 , - 1161 , - 380 , - 2303 , - 274 , - 949 , - 1000 , - 427 , - 2558 , - 737 , - 1620 , - 1879 , - 1514 , - 525 , - 2240 , - 3 , - 470 , - 313 , - 2860 , - 1455 , - 2754 , - 101 , - 152 , - 2907 , - 1710 , - 3217 , - 772 , - 1031 , - 666 , - 3005 , - 1392 , - 2483 , - 2950 , - 2793 , - 2012 , - 607 , - 1906 , - 2581 , - 2632 , - 2059 , - 862 , - 2369 , - 3252 , - 183 , - 3146 , - 2157 , - 544 , - 1635 , - 2102 , - 1945 , - 1164 , - 3087 , - 1058 , - 1733 , - 1784 , - 1211 , - 14 , - 1521 , - 2404 , - 2663 , - 2298 , - 1309 , - 3024 , - 787 , - 1254 , - 1097 , - 316 , - 2239 , - 210 , - 885 , - 936 , - 363 , - 2494 , - 673 , - 1556 , - 1815 , - 1450 , - 461 , - 2176 , - 3267 , - 406 , - 249 , - 2796 , - 1391 , - 2690 , - 37 , - 88 , - 2843 , - 1646 , - 3153 , - 708 , - 967 , - 602 , - 2941 , - 1328 , - 2419 , - 2886 , - 2729 , - 1948 , - 543 , - 1842 , - 2517 , - 2568 , - 1995 , - 798 , - 2305 , - 3188 , - 119 , - 3082 , - 2093 , - 480 , - 1571 , - 2038 , - 1881 , - 1100 , - 3023 , - 994 , - 1669 , - 1720 , - 1147 , - 3278 , - 1457 , - 2340 , - 2599 , - 2234 , - 1245 , - 2960 , - 723 , - 1190 , - 1033 , - 252 , - 2175 , - 146 , - 821 , - 872 , - 299 , - 2430 , - 609 , - 1492 , - 1751 , - 1386 , - 397 , - 2112 , - 3203 , - 342 , - 185 , - 2732 , - 1327 , - 2626 , - 3301 , - 24 , - 2779 , - 1582 , - 3089 , - 644 , - 903 , - 538 , - 2877 , - 1264 , - 2355 , - 2822 , - 2665 , - 1884 , - 479 , - 1778 , - 2453 , - 2504 , - 1931 , - 734 , - 2241 , - 3124 , - 55 , - 3018 , - 2029 , - 416 , - 1507 , - 1974 , - 1817 , - 1036 , - 2959 , - 930 , - 1605 , - 1656 , - 1083 , - 3214 , - 1393 , - 2276 , - 2535 , - 2170 , - 1181 , - 2896 , - 659 , - 1126 , - 969 , - 188 , - 2111 , - 82 , - 757 , - 808 , - 235 , - 2366 , - 545 , - 1428 , - 1687 , - 1322 , - 333 , - 2048 , - 3139 , - 278 , - 121 , - 2668 , - 1263 , - 2562 , - 3237 , - 3288 , - 2715 , - 1518 , - 3025 , - 580 , - 839 , - 474 , - 2813 , - 1200 , - 2291 , - 2758 , - 2601 , - 1820 , - 415 , - 1714 , - 2389 , - 2440 , - 1867 , - 670 , - 2177 , - 3060 , - 3319 , - 2954 , - 1965 , - 352 , - 1443 , - 1910 , - 1753 , - 972 , - 2895 , - 866 , - 1541 , - 1592 , - 1019 , - 3150 , - 1329 , - 2212 , - 2471 , - 2106 , - 1117 , - 2832 , - 595 , - 1062 , - 905 , - 124 , - 2047 , - 18 , - 693 , - 744 , - 171 , - 2302 , - 481 , - 1364 , - 1623 , - 1258 , - 269 , - 1984 , - 3075 , - 214 , - 57 , - 2604 , - 1199 , - 2498 , - 3173 , - 3224 , - 2651 , - 1454 , - 2961 , - 516 , - 775 , - 410 , - 2749 , - 1136 , - 2227 , - 2694 , - 2537 , - 1756 , - 351 , - 1650 , - 2325 , - 2376 , - 1803 , - 606 , - 2113 , - 2996 , - 3255 , - 2890 , - 1901 , - 288 , - 1379 , - 1846 , - 1689 , - 908 , - 2831 , - 802 , - 1477 , - 1528 , - 955 , - 3086 , - 1265 , - 2148 , - 2407 , - 2042 , - 1053 , - 2768 , - 531 , - 998 , - 841 , - 60 , - 1983 , - 3282 , - 629 , - 680 , - 107 , - 2238 , - 417 , - 1300 , - 1559 , - 1194 , - 205 , - 1920 , - 3011 , - 150 , - 3321 , - 2540 , - 1135 , - 2434 , - 3109 , - 3160 , - 2587 , - 1390 , - 2897 , - 452 , - 711 , - 346 , - 2685 , - 1072 , - 2163 , - 2630 , - 2473 , - 1692 , - 287 , - 1586 , - 2261 , - 2312 , - 1739 , - 542 , - 2049 , - 2932 , - 3191 , - 2826 , - 1837 , - 224 , - 1315 , - 1782 , - 1625 , - 844 , - 2767 , - 738 , - 1413 , - 1464 , - 891 , - 3022 , - 1201 , - 2084 , - 2343 , - 1978 , - 989 , - 2704 , - 467 , - 934 , - 777 , - 3324 , - 1919 , - 3218 , - 565 , - 616 , - 43 , - 2174 , - 353 , - 1236 , - 1495 , - 1130 , - 141 , - 1856 , - 2947 , - 86 , - 3257 , - 2476 , - 1071 , - 2370 , - 3045 , - 3096 , - 2523 , - 1326 , - 2833 , - 388 , - 647 , - 282 , - 2621 , - 1008 , - 2099 , - 2566 , - 2409 , - 1628 , - 223 , - 1522 , - 2197 , - 2248 , - 1675 , - 478 , - 1985 , - 2868 , - 3127 , - 2762 , - 1773 , - 160 , - 1251 , - 1718 , - 1561 , - 780 , - 2703 , - 674 , - 1349 , - 1400 , - 827 , - 2958 , - 1137 , - 2020 , - 2279 , - 1914 , - 925 , - 2640 , - 403 , - 870 , - 713 , - 3260 , - 1855 , - 3154 , - 501 , - 552 , - 3307 , - 2110 , - 289 , - 1172 , - 1431 , - 1066 , - 77 , - 1792 , - 2883 , - 22 , - 3193 , - 2412 , - 1007 , - 2306 , - 2981 , - 3032 , - 2459 , - 1262 , - 2769 , - 324 , - 583 , - 218 , - 2557 , - 944 , - 2035 , - 2502 , - 2345 , - 1564 , - 159 , - 1458 , - 2133 , - 2184 , - 1611 , - 414 , - 1921 , - 2804 , - 3063 , - 2698 , - 1709 , - 96 , - 1187 , - 1654 , - 1497 , - 716 , - 2639 , - 610 , - 1285 , - 1336 , - 763 , - 2894 , - 1073 , - 1956 , - 2215 , - 1850 , - 861 , - 2576 , - 339 , - 806 , - 649 , - 3196 , - 1791 , - 3090 , - 437 , - 488 , - 3243 , - 2046 , - 225 , - 1108 , - 1367 , - 1002 , - 13 , - 1728 , - 2819 , - 3286 , - 3129 , - 2348 , - 943 , - 2242 , - 2917 , - 2968 , - 2395 , - 1198 , - 2705 , - 260 , - 519 , - 154 , - 2493 , - 880 , - 1971 , - 2438 , - 2281 , - 1500 , - 95 , - 1394 , - 2069 , - 2120 , - 1547 , - 350 , - 1857 , - 2740 , - 2999 , - 2634 , - 1645 , - 32 , - 1123 , - 1590 , - 1433 , - 652 , - 2575 , - 546 , - 1221 , - 1272 , - 699 , - 2830 , - 1009 , - 1892 , - 2151 , - 1786 , - 797 , - 2512 , - 275 , - 742 , - 585 , - 3132 , - 1727 , - 3026 , - 373 , - 424 , - 3179 , - 1982 , - 161 , - 1044 , - 1303 , - 938 , - 3277 , - 1664 , - 2755 , - 3222 , - 3065 , - 2284 , - 879 , - 2178 , - 2853 , - 2904 , - 2331 , - 1134 , - 2641 , - 196 , - 455 , - 90 , - 2429 , - 816 , - 1907 , - 2374 , - 2217 , - 1436 , - 31 , - 1330 , - 2005 , - 2056 , - 1483 , - 286 , - 1793 , - 2676 , - 2935 , - 2570 , - 1581 , - 3296 , - 1059 , - 1526 , - 1369 , - 588 , - 2511 , - 482 , - 1157 , - 1208 , - 635 , - 2766 , - 945 , - 1828 , - 2087 , - 1722 , - 733 , - 2448 , - 211 , - 678 , - 521 , - 3068 , - 1663 , - 2962 , - 309 , - 360 , - 3115 , - 1918 , - 97 , - 980 , - 1239 , - 874 , - 3213 , - 1600 , - 2691 , - 3158 , - 3001 , - 2220 , - 815 , - 2114 , - 2789 , - 2840 , - 2267 , - 1070 , - 2577 , - 132 , - 391 , - 26 , - 2365 , - 752 , - 1843 , - 2310 , - 2153 , - 1372 , - 3295 , - 1266 , - 1941 , - 1992 , - 1419 , - 222 , - 1729 , - 2612 , - 2871 , - 2506 , - 1517 , - 3232 , - 995 , - 1462 , - 1305 , - 524 , - 2447 , - 418 , - 1093 , - 1144 , - 571 , - 2702 , - 881 , - 1764 , - 2023 , - 1658 , - 669 , - 2384 , - 147 , - 614 , - 457 , - 3004 , - 1599 , - 2898 , - 245 , - 296 , - 3051 , - 1854 , - 33 , - 916 , - 1175 , - 810 , - 3149 , - 1536 , - 2627 , - 3094 , - 2937 , - 2156 , - 751 , - 2050 , - 2725 , - 2776 , - 2203 , - 1006 , - 2513 , - 68 , - 327 , - 3290 , - 2301 , - 688 , - 1779 , - 2246 , - 2089 , - 1308 , - 3231 , - 1202 , - 1877 , - 1928 , - 1355 , - 158 , - 1665 , - 2548 , - 2807 , - 2442 , - 1453 , - 3168 , - 931 , - 1398 , - 1241 , - 460 , - 2383 , - 354 , - 1029 , - 1080 , - 507 , - 2638 , - 817 , - 1700 , - 1959 , - 1594 , - 605 , - 2320 , - 83 , - 550 , - 393 , - 2940 , - 1535 , - 2834 , - 181 , - 232 , - 2987 , - 1790 , - 3297 , - 852 , - 1111 , - 746 , - 3085 , - 1472 , - 2563 , - 3030 , - 2873 , - 2092 , - 687 , - 1986 , - 2661 , - 2712 , - 2139 , - 942 , - 2449 , - 4 , - 263 , - 3226 , - 2237 , - 624 , - 1715 , - 2182 , - 2025 , - 1244 , - 3167 , - 1138 , - 1813 , - 1864 , - 1291 , - 94 , - 1601 , - 2484 , - 2743 , - 2378 , - 1389 , - 3104 , - 867 , - 1334 , - 1177 , - 396 , - 2319 , - 290 , - 965 , - 1016 , - 443 , - 2574 , - 753 , - 1636 , - 1895 , - 1530 , - 541 , - 2256 , - 19 , - 486 , - 329 , - 2876 , - 1471 , - 2770 , - 117 , - 168 , - 2923 , - 1726 , - 3233 , - 788 , - 1047 , - 682 , - 3021 , - 1408 , - 2499 , - 2966 , - 2809 , - 2028 , - 623 , - 1922 , - 2597 , - 2648 , - 2075 , - 878 , - 2385 , - 3268 , - 199 , - 3162 , - 2173 , - 560 , - 1651 , - 2118 , - 1961 , - 1180 , - 3103 , - 1074 , - 1749 , - 1800 , - 1227 , - 30 , - 1537 , - 2420 , - 2679 , - 2314 , - 1325 , - 3040 , - 803 , - 1270 , - 1113 , - 332 , - 2255 , - 226 , - 901 , - 952 , - 379 , - 2510 , - 689 , - 1572 , - 1831 , - 1466 , - 477 , - 2192 , - 3283 , - 422 , - 265 , - 2812 , - 1407 , - 2706 , - 53 , - 104 , - 2859 , - 1662 , - 3169 , - 724 , - 983 , - 618 , - 2957 , - 1344 , - 2435 , - 2902 , - 2745 , - 1964 , - 559 , - 1858 , - 2533 , - 2584 , - 2011 , - 814 , - 2321 , - 3204 , - 135 , - 3098 , - 2109 , - 496 , - 1587 , - 2054 , - 1897 , - 1116 , - 3039 , - 1010 , - 1685 , - 1736 , - 1163 , - 3294 , - 1473 , - 2356 , - 2615 , - 2250 , - 1261 , - 2976 , - 739 , - 1206 , - 1049 , - 268 , - 2191 , - 162 , - 837 , - 888 , - 315 , - 2446 , - 625 , - 1508 , - 1767 , - 1402 , - 413 , - 2128 , - 3219 , - 358 , - 201 , - 2748 , - 1343 , - 2642 , - 3317 , - 40 , - 2795 , - 1598 , - 3105 , - 660 , - 919 , - 554 , - 2893 , - 1280 , - 2371 , - 2838 , - 2681 , - 1900 , - 495 , - 1794 , - 2469 , - 2520 , - 1947 , - 750 , - 2257 , - 3140 , - 71 , - 3034 , - 2045 , - 432 , - 1523 , - 1990 , - 1833 , - 1052 , - 2975 , - 946 , - 1621 , - 1672 , - 1099 , - 3230 , - 1409 , - 2292 , - 2551 , - 2186 , - 1197 , - 2912 , - 675 , - 1142 , - 985 , - 204 , - 2127 , - 98 , - 773 , - 824 , - 251 , - 2382 , - 561 , - 1444 , - 1703 , - 1338 , - 349 , - 2064 , - 3155 , - 294 , - 137 , - 2684 , - 1279 , - 2578 , - 3253 , - 3304 , - 2731 , - 1534 , - 3041 , - 596 , - 855 , - 490 , - 2829 , - 1216 , - 2307 , - 2774 , - 2617 , - 1836 , - 431 , - 1730 , - 2405 , - 2456 , - 1883 , - 686 , - 2193 , - 3076 , - 7 , - 2970 , - 1981 , - 368 , - 1459 , - 1926 , - 1769 , - 988 , - 2911 , - 882 , - 1557 , - 1608 , - 1035 , - 3166 , - 1345 , - 2228 , - 2487 , - 2122 , - 1133 , - 2848 , - 611 , - 1078 , - 921 , - 140 , - 2063 , - 34 , - 709 , - 760 , - 187 , - 2318 , - 497 , - 1380 , - 1639 , - 1274 , - 285 , - 2000 , - 3091 , - 230 , - 73 , - 2620 , - 1215 , - 2514 , - 3189 , - 3240 , - 2667 , - 1470 , - 2977 , - 532 , - 791 , - 426 , - 2765 , - 1152 , - 2243 , - 2710 , - 2553 , - 1772 , - 367 , - 1666 , - 2341 , - 2392 , - 1819 , - 622 , - 2129 , - 3012 , - 3271 , - 2906 , - 1917 , - 304 , - 1395 , - 1862 , - 1705 , - 924 , - 2847 , - 818 , - 1493 , - 1544 , - 971 , - 3102 , - 1281 , - 2164 , - 2423 , - 2058 , - 1069 , - 2784 , - 547 , - 1014 , - 857 , - 76 , - 1999 , - 3298 , - 645 , - 696 , - 123 , - 2254 , - 433 , - 1316 , - 1575 , - 1210 , - 221 , - 1936 , - 3027 , - 166 , - 9 , - 2556 , - 1151 , - 2450 , - 3125 , - 3176 , - 2603 , - 1406 , - 2913 , - 468 , - 727 , - 362 , - 2701 , - 1088 , - 2179 , - 2646 , - 2489 , - 1708 , - 303 , - 1602 , - 2277 , - 2328 , - 1755 , - 558 , - 2065 , - 2948 , - 3207 , - 2842 , - 1853 , - 240 , - 1331 , - 1798 , - 1641 , - 860 , - 2783 , - 754 , - 1429 , - 1480 , - 907 , - 3038 , - 1217 , - 2100 , - 2359 , - 1994 , - 1005 , - 2720 , - 483 , - 950 , - 793 , - 12 , - 1935 , - 3234 , - 581 , - 632 , - 59 , - 2190 , - 369 , - 1252 , - 1511 , - 1146 , - 157 , - 1872 , - 2963 , - 102 , - 3273 , - 2492 , - 1087 , - 2386 , - 3061 , - 3112 , - 2539 , - 1342 , - 2849 , - 404 , - 663 , - 298 , - 2637 , - 1024 , - 2115 , - 2582 , - 2425 , - 1644 , - 239 , - 1538 , - 2213 , - 2264 , - 1691 , - 494 , - 2001 , - 2884 , - 3143 , - 2778 , - 1789 , - 176 , - 1267 , - 1734 , - 1577 , - 796 , - 2719 , - 690 , - 1365 , - 1416 , - 843 , - 2974 , - 1153 , - 2036 , - 2295 , - 1930 , - 941 , - 2656 , - 419 , - 886 , - 729 , - 3276 , - 1871 , - 3170 , - 517 , - 568 , - 3323 , - 2126 , - 305 , - 1188 , - 1447 , - 1082 , - 93 , - 1808 , - 2899 , - 38 , - 3209 , - 2428 , - 1023 , - 2322 , - 2997 , - 3048 , - 2475 , - 1278 , - 2785 , - 340 , - 599 , - 234 , - 2573 , - 960 , - 2051 , - 2518 , - 2361 , - 1580 , - 175 , - 1474 , - 2149 , - 2200 , - 1627 , - 430 , - 1937 , - 2820 , - 3079 , - 2714 , - 1725 , - 112 , - 1203 , - 1670 , - 1513 , - 732 , - 2655 , - 626 , - 1301 , - 1352 , - 779 , - 2910 , - 1089 , - 1972 , - 2231 , - 1866 , - 877 , - 2592 , - 355 , - 822 , - 665 , - 3212 , - 1807 , - 3106 , - 453 , - 504 , - 3259 , - 2062 , - 241 , - 1124 , - 1383 , - 1018 , - 29 , - 1744 , - 2835 , - 3302 , - 3145 , - 2364 , - 959 , - 2258 , - 2933 , - 2984 , - 2411 , - 1214 , - 2721 , - 276 , - 535 , - 170 , - 2509 , - 896 , - 1987 , - 2454 , - 2297 , - 1516 , - 111 , - 1410 , - 2085 , - 2136 , - 1563 , - 366 , - 1873 , - 2756 , - 3015 , - 2650 , - 1661 , - 48 , - 1139 , - 1606 , - 1449 , - 668 , - 2591 , - 562 , - 1237 , - 1288 , - 715 , - 2846 , - 1025 , - 1908 , - 2167 , - 1802 , - 813 , - 2528 , - 291 , - 758 , - 601 , - 3148 , - 1743 , - 3042 , - 389 , - 440 , - 3195 , - 1998 , - 177 , - 1060 , - 1319 , - 954 , - 3293 , - 1680 , - 2771 , - 3238 , - 3081 , - 2300 , - 895 , - 2194 , - 2869 , - 2920 , - 2347 , - 1150 , - 2657 , - 212 , - 471 , - 106 , - 2445 , - 832 , - 1923 , - 2390 , - 2233 , - 1452 , - 47 , - 1346 , - 2021 , - 2072 , - 1499 , - 302 , - 1809 , - 2692 , - 2951 , - 2586 , - 1597 , - 3312 , - 1075 , - 1542 , - 1385 , - 604 , - 2527 , - 498 , - 1173 , - 1224 , - 651 , - 2782 , - 961 , - 1844 , - 2103 , - 1738 , - 749 , - 2464 , - 227 , - 694 , - 537 , - 3084 , - 1679 , - 2978 , - 325 , - 376 , - 3131 , - 1934 , - 113 , - 996 , - 1255 , - 890 , - 3229 , - 1616 , - 2707 , - 3174 , - 3017 , - 2236 , - 831 , - 2130 , - 2805 , - 2856 , - 2283 , - 1086 , - 2593 , - 148 , - 407 , - 42 , - 2381 , - 768 , - 1859 , - 2326 , - 2169 , - 1388 , - 3311 , - 1282 , - 1957 , - 2008 , - 1435 , - 238 , - 1745 , - 2628 , - 2887 , - 2522 , - 1533 , - 3248 , - 1011 , - 1478 , - 1321 , - 540 , - 2463 , - 434 , - 1109 , - 1160 , - 587 , - 2718 , - 897 , - 1780 , - 2039 , - 1674 , - 685 , - 2400 , - 163 , - 630 , - 473 , - 3020 , - 1615 , - 2914 , - 261 , - 312 , - 3067 , - 1870 , - 49 , - 932 , - 1191 , - 826 , - 3165 , - 1552 , - 2643 , - 3110 , - 2953 , - 2172 , - 767 , - 2066 , - 2741 , - 2792 , - 2219 , - 1022 , - 2529 , - 84 , - 343 , - 3306 , - 2317 , - 704 , - 1795 , - 2262 , - 2105 , - 1324 , - 3247 , - 1218 , - 1893 , - 1944 , - 1371 , - 174 , - 1681 , - 2564 , - 2823 , - 2458 , - 1469 , - 3184 , - 947 , - 1414 , - 1257 , - 476 , - 2399 , - 370 , - 1045 , - 1096 , - 523 , - 2654 , - 833 , - 1716 , - 1975 , - 1610 , - 621 , - 2336 , - 99 , - 566 , - 409 , - 2956 , - 1551 , - 2850 , - 197 , - 248 , - 3003 , - 1806 , - 3313 , - 868 , - 1127 , - 762 , - 3101 , - 1488 , - 2579 , - 3046 , - 2889 , - 2108 , - 703 , - 2002 , - 2677 , - 2728 , - 2155 , - 958 , - 2465 , - 20 , - 279 , - 3242 , - 2253 , - 640 , - 1731 , - 2198 , - 2041 , - 1260 , - 3183 , - 1154 , - 1829 , - 1880 , - 1307 , - 110 , - 1617 , - 2500 , - 2759 , - 2394 , - 1405 , - 3120 , - 883 , - 1350 , - 1193 , - 412 , - 2335 , - 306 , - 981 , - 1032 , - 459 , - 2590 , - 769 , - 1652 , - 1911 , - 1546 , - 557 , - 2272 , - 35 , - 502 , - 345 , - 2892 , - 1487 , - 2786 , - 133 , - 184 , - 2939 , - 1742 , - 3249 , - 804 , - 1063 , - 698 , - 3037 , - 1424 , - 2515 , - 2982 , - 2825 , - 2044 , - 639 , - 1938 , - 2613 , - 2664 , - 2091 , - 894 , - 2401 , - 3284 , - 215 , - 3178 , - 2189 , - 576 , - 1667 , - 2134 , - 1977 , - 1196 , - 3119 , - 1090 , - 1765 , - 1816 , - 1243 , - 46 , - 1553 , - 2436 , - 2695 , - 2330 , - 1341 , - 3056 , - 819 , - 1286 , - 1129 , - 348 , - 2271 , - 242 , - 917 , - 968 , - 395 , - 2526 , - 705 , - 1588 , - 1847 , - 1482 , - 493 , - 2208 , - 3299 , - 438 , - 281 , - 2828 , - 1423 , - 2722 , - 69 , - 120 , - 2875 , - 1678 , - 3185 , - 740 , - 999 , - 634 , - 2973 , - 1360 , - 2451 , - 2918 , - 2761 , - 1980 , - 575 , - 1874 , - 2549 , - 2600 , - 2027 , - 830 , - 2337 , - 3220 , - 151 , - 3114 , - 2125 , - 512 , - 1603 , - 2070 , - 1913 , - 1132 , - 3055 , - 1026 , - 1701 , - 1752 , - 1179 , - 3310 , - 1489 , - 2372 , - 2631 , - 2266 , - 1277 , - 2992 , - 755 , - 1222 , - 1065 , - 284 , - 2207 , - 178 , - 853 , - 904 , - 331 , - 2462 , - 641 , - 1524 , - 1783 , - 1418 , - 429 , - 2144 , - 3235 , - 374 , - 217 , - 2764 , - 1359 , - 2658 , - 5 , - 56 , - 2811 , - 1614 , - 3121 , - 676 , - 935 , - 570 , - 2909 , - 1296 , - 2387 , - 2854 , - 2697 , - 1916 , - 511 , - 1810 , - 2485 , - 2536 , - 1963 , - 766 , - 2273 , - 3156 , - 87 , - 3050 , - 2061 , - 448 , - 1539 , - 2006 , - 1849 , - 1068 , - 2991 , - 962 , - 1637 , - 1688 , - 1115 , - 3246 , - 1425 , - 2308 , - 2567 , - 2202 , - 1213 , - 2928 , - 691 , - 1158 , - 1001 , - 220 , - 2143 , - 114 , - 789 , - 840 , - 267 , - 2398 , - 577 , - 1460 , - 1719 , - 1354 , - 365 , - 2080 , - 3171 , - 310 , - 153 , - 2700 , - 1295 , - 2594 , - 3269 , - 3320 , - 2747 , - 1550 , - 3057 , - 612 , - 871 , - 506 , - 2845 , - 1232 , - 2323 , - 2790 , - 2633 , - 1852 , - 447 , - 1746 , - 2421 , - 2472 , - 1899 , - 702 , - 2209 , - 3092 , - 23 , - 2986 , - 1997 , - 384 , - 1475 , - 1942 , - 1785 , - 1004 , - 2927 , - 898 , - 1573 , - 1624 , - 1051 , - 3182 , - 1361 , - 2244 , - 2503 , - 2138 , - 1149 , - 2864 , - 627 , - 1094 , - 937 , - 156 , - 2079 , - 50 , - 725 , - 776 , - 203 , - 2334 , - 513 , - 1396 , - 1655 , - 1290 , - 301 , - 2016 , - 3107 , - 246 , - 89 , - 2636 , - 1231 , - 2530 , - 3205 , - 3256 , - 2683 , - 1486 , - 2993 , - 548 , - 807 , - 442 , - 2781 , - 1168 , - 2259 , - 2726 , - 2569 , - 1788 , - 383 , - 1682 , - 2357 , - 2408 , - 1835 , - 638 , - 2145 , - 3028 , - 3287 , - 2922 , - 1933 , - 320 , - 1411 , - 1878 , - 1721 , - 940 , - 2863 , - 834 , - 1509 , - 1560 , - 987 , - 3118 , - 1297 , - 2180 , - 2439 , - 2074 , - 1085 , - 2800 , - 563 , - 1030 , - 873 , - 92 , - 2015 , - 3314 , - 661 , - 712 , - 139 , - 2270 , - 449 , - 1332 , - 1591 , - 1226 , - 237 , - 1952 , - 3043 , - 182 , - 25 , - 2572 , - 1167 , - 2466 , - 3141 , - 3192 , - 2619 , - 1422 , - 2929 , - 484 , - 743 , - 378 , - 2717 , - 1104 , - 2195 , - 2662 , - 2505 , - 1724 , - 319 , - 1618 , - 2293 , - 2344 , - 1771 , - 574 , - 2081 , - 2964 , - 3223 , - 2858 , - 1869 , - 256 , - 1347 , - 1814 , - 1657 , - 876 , - 2799 , - 770 , - 1445 , - 1496 , - 923 , - 3054 , - 1233 , - 2116 , - 2375 , - 2010 , - 1021 , - 2736 , - 499 , - 966 , - 809 , - 28 , - 1951 , - 3250 , - 597 , - 648 , - 75 , - 2206 , - 385 , - 1268 , - 1527 , - 1162 , - 173 , - 1888 , - 2979 , - 118 , - 3289 , - 2508 , - 1103 , - 2402 , - 3077 , - 3128 , - 2555 , - 1358 , - 2865 , - 420 , - 679 , - 314 , - 2653 , - 1040 , - 2131 , - 2598 , - 2441 , - 1660 , - 255 , - 1554 , - 2229 , - 2280 , - 1707 , - 510 , - 2017 , - 2900 , - 3159 , - 2794 , - 1805 , - 192 , - 1283 , - 1750 , - 1593 , - 812 , - 2735 , - 706 , - 1381 , - 1432 , - 859 , - 2990 , - 1169 , - 2052 , - 2311 , - 1946 , - 957 , - 2672 , - 435 , - 902 , - 745 , - 3292 , - 1887 , - 3186 , - 533 , - 584 , - 11 , - 2142 , - 321 , - 1204 , - 1463 , - 1098 , - 109 , - 1824 , - 2915 , - 54 , - 3225 , - 2444 , - 1039 , - 2338 , - 3013 , - 3064 , - 2491 , - 1294 , - 2801 , - 356 , - 615 , - 250 , - 2589 , - 976 , - 2067 , - 2534 , - 2377 , - 1596 , - 191 , - 1490 , - 2165 , - 2216 , - 1643 , - 446 , - 1953 , - 2836 , - 3095 , - 2730 , - 1741 , - 128 , - 1219 , - 1686 , - 1529 , - 748 , - 2671 , - 642 , - 1317 , - 1368 , - 795 , - 2926 , - 1105 , - 1988 , - 2247 , - 1882 , - 893 , - 2608 , - 371 , - 838 , - 681 , - 3228 , - 1823 , - 3122 , - 469 , - 520 , - 3275 , - 2078 , - 257 , - 1140 , - 1399 , - 1034 , - 45 , - 1760 , - 2851 , - 3318 , - 3161 , - 2380 , - 975 , - 2274 , - 2949 , - 3000 , - 2427 , - 1230 , - 2737 , - 292 , - 551 , - 186 , - 2525 , - 912 , - 2003 , - 2470 , - 2313 , - 1532 , - 127 , - 1426 , - 2101 , - 2152 , - 1579 , - 382 , - 1889 , - 2772 , - 3031 , - 2666 , - 1677 , - 64 , - 1155 , - 1622 , - 1465 , - 684 , - 2607 , - 578 , - 1253 , - 1304 , - 731 , - 2862 , - 1041 , - 1924 , - 2183 , - 1818 , - 829 , - 2544 , - 307 , - 774 , - 617 , - 3164 , - 1759 , - 3058 , - 405 , - 456 , - 3211 , - 2014 , - 193 , - 1076 , - 1335 , - 970 , - 3309 , - 1696 , - 2787 , - 3254 , - 3097 , - 2316 , - 911 , - 2210 , - 2885 , - 2936 , - 2363 , - 1166 , - 2673 , - 228 , - 487 , - 122 , - 2461 , - 848 , - 1939 , - 2406 , - 2249 , - 1468 , - 63 , - 1362 , - 2037 , - 2088 , - 1515 , - 318 , - 1825 , - 2708 , - 2967 , - 2602 , - 1613 , - 0 , - 927 , - 582 , - 2357 , - 2860 , - 2091 , - 50 , - 129 , - 2328 , - 3255 , - 2910 , - 1293 , - 1796 , - 1027 , - 2378 , - 2457 , - 1264 , - 2191 , - 1846 , - 229 , - 732 , - 3355 , - 1314 , - 1393 , - 200 , - 1127 , - 782 , - 2557 , - 3060 , - 2291 , - 250 , - 329 , - 2528 , - 63 , - 3110 , - 1493 , - 1996 , - 1227 , - 2578 , - 2657 , - 1464 , - 2391 , - 2046 , - 429 , - 932 , - 163 , - 1514 , - 1593 , - 400 , - 1327 , - 982 , - 2757 , - 3260 , - 2491 , - 450 , - 529 , - 2728 , - 263 , - 3310 , - 1693 , - 2196 , - 1427 , - 2778 , - 2857 , - 1664 , - 2591 , - 2246 , - 629 , - 1132 , - 363 , - 1714 , - 1793 , - 600 , - 1527 , - 1182 , - 2957 , - 68 , - 2691 , - 650 , - 729 , - 2928 , - 463 , - 118 , - 1893 , - 2396 , - 1627 , - 2978 , - 3057 , - 1864 , - 2791 , - 2446 , - 829 , - 1332 , - 563 , - 1914 , - 1993 , - 800 , - 1727 , - 1382 , - 3157 , - 268 , - 2891 , - 850 , - 929 , - 3128 , - 663 , - 318 , - 2093 , - 2596 , - 1827 , - 3178 , - 3257 , - 2064 , - 2991 , - 2646 , - 1029 , - 1532 , - 763 , - 2114 , - 2193 , - 1000 , - 1927 , - 1582 , - 3357 , - 468 , - 3091 , - 1050 , - 1129 , - 3328 , - 863 , - 518 , - 2293 , - 2796 , - 2027 , - 3378 , - 65 , - 2264 , - 3191 , - 2846 , - 1229 , - 1732 , - 963 , - 2314 , - 2393 , - 1200 , - 2127 , - 1782 , - 165 , - 668 , - 3291 , - 1250 , - 1329 , - 136 , - 1063 , - 718 , - 2493 , - 2996 , - 2227 , - 186 , - 265 , - 2464 , - 3391 , - 3046 , - 1429 , - 1932 , - 1163 , - 2514 , - 2593 , - 1400 , - 2327 , - 1982 , - 365 , - 868 , - 99 , - 1450 , - 1529 , - 336 , - 1263 , - 918 , - 2693 , - 3196 , - 2427 , - 386 , - 465 , - 2664 , - 199 , - 3246 , - 1629 , - 2132 , - 1363 , - 2714 , - 2793 , - 1600 , - 2527 , - 2182 , - 565 , - 1068 , - 299 , - 1650 , - 1729 , - 536 , - 1463 , - 1118 , - 2893 , - 4 , - 2627 , - 586 , - 665 , - 2864 , - 399 , - 54 , - 1829 , - 2332 , - 1563 , - 2914 , - 2993 , - 1800 , - 2727 , - 2382 , - 765 , - 1268 , - 499 , - 1850 , - 1929 , - 736 , - 1663 , - 1318 , - 3093 , - 204 , - 2827 , - 786 , - 865 , - 3064 , - 599 , - 254 , - 2029 , - 2532 , - 1763 , - 3114 , - 3193 , - 2000 , - 2927 , - 2582 , - 965 , - 1468 , - 699 , - 2050 , - 2129 , - 936 , - 1863 , - 1518 , - 3293 , - 404 , - 3027 , - 986 , - 1065 , - 3264 , - 799 , - 454 , - 2229 , - 2732 , - 1963 , - 3314 , - 1 , - 2200 , - 3127 , - 2782 , - 1165 , - 1668 , - 899 , - 2250 , - 2329 , - 1136 , - 2063 , - 1718 , - 101 , - 604 , - 3227 , - 1186 , - 1265 , - 72 , - 999 , - 654 , - 2429 , - 2932 , - 2163 , - 122 , - 201 , - 2400 , - 3327 , - 2982 , - 1365 , - 1868 , - 1099 , - 2450 , - 2529 , - 1336 , - 2263 , - 1918 , - 301 , - 804 , - 35 , - 1386 , - 1465 , - 272 , - 1199 , - 854 , - 2629 , - 3132 , - 2363 , - 322 , - 401 , - 2600 , - 135 , - 3182 , - 1565 , - 2068 , - 1299 , - 2650 , - 2729 , - 1536 , - 2463 , - 2118 , - 501 , - 1004 , - 235 , - 1586 , - 1665 , - 472 , - 1399 , - 1054 , - 2829 , - 3332 , - 2563 , - 522 , - 601 , - 2800 , - 335 , - 3382 , - 1765 , - 2268 , - 1499 , - 2850 , - 2929 , - 1736 , - 2663 , - 2318 , - 701 , - 1204 , - 435 , - 1786 , - 1865 , - 672 , - 1599 , - 1254 , - 3029 , - 140 , - 2763 , - 722 , - 801 , - 3000 , - 535 , - 190 , - 1965 , - 2468 , - 1699 , - 3050 , - 3129 , - 1936 , - 2863 , - 2518 , - 901 , - 1404 , - 635 , - 1986 , - 2065 , - 872 , - 1799 , - 1454 , - 3229 , - 340 , - 2963 , - 922 , - 1001 , - 3200 , - 735 , - 390 , - 2165 , - 2668 , - 1899 , - 3250 , - 3329 , - 2136 , - 3063 , - 2718 , - 1101 , - 1604 , - 835 , - 2186 , - 2265 , - 1072 , - 1999 , - 1654 , - 37 , - 540 , - 3163 , - 1122 , - 1201 , - 8 , - 935 , - 590 , - 2365 , - 2868 , - 2099 , - 58 , - 137 , - 2336 , - 3263 , - 2918 , - 1301 , - 1804 , - 1035 , - 2386 , - 2465 , - 1272 , - 2199 , - 1854 , - 237 , - 740 , - 3363 , - 1322 , - 1401 , - 208 , - 1135 , - 790 , - 2565 , - 3068 , - 2299 , - 258 , - 337 , - 2536 , - 71 , - 3118 , - 1501 , - 2004 , - 1235 , - 2586 , - 2665 , - 1472 , - 2399 , - 2054 , - 437 , - 940 , - 171 , - 1522 , - 1601 , - 408 , - 1335 , - 990 , - 2765 , - 3268 , - 2499 , - 458 , - 537 , - 2736 , - 271 , - 3318 , - 1701 , - 2204 , - 1435 , - 2786 , - 2865 , - 1672 , - 2599 , - 2254 , - 637 , - 1140 , - 371 , - 1722 , - 1801 , - 608 , - 1535 , - 1190 , - 2965 , - 76 , - 2699 , - 658 , - 737 , - 2936 , - 471 , - 126 , - 1901 , - 2404 , - 1635 , - 2986 , - 3065 , - 1872 , - 2799 , - 2454 , - 837 , - 1340 , - 571 , - 1922 , - 2001 , - 808 , - 1735 , - 1390 , - 3165 , - 276 , - 2899 , - 858 , - 937 , - 3136 , - 671 , - 326 , - 2101 , - 2604 , - 1835 , - 3186 , - 3265 , - 2072 , - 2999 , - 2654 , - 1037 , - 1540 , - 771 , - 2122 , - 2201 , - 1008 , - 1935 , - 1590 , - 3365 , - 476 , - 3099 , - 1058 , - 1137 , - 3336 , - 871 , - 526 , - 2301 , - 2804 , - 2035 , - 3386 , - 73 , - 2272 , - 3199 , - 2854 , - 1237 , - 1740 , - 971 , - 2322 , - 2401 , - 1208 , - 2135 , - 1790 , - 173 , - 676 , - 3299 , - 1258 , - 1337 , - 144 , - 1071 , - 726 , - 2501 , - 3004 , - 2235 , - 194 , - 273 , - 2472 , - 7 , - 3054 , - 1437 , - 1940 , - 1171 , - 2522 , - 2601 , - 1408 , - 2335 , - 1990 , - 373 , - 876 , - 107 , - 1458 , - 1537 , - 344 , - 1271 , - 926 , - 2701 , - 3204 , - 2435 , - 394 , - 473 , - 2672 , - 207 , - 3254 , - 1637 , - 2140 , - 1371 , - 2722 , - 2801 , - 1608 , - 2535 , - 2190 , - 573 , - 1076 , - 307 , - 1658 , - 1737 , - 544 , - 1471 , - 1126 , - 2901 , - 12 , - 2635 , - 594 , - 673 , - 2872 , - 407 , - 62 , - 1837 , - 2340 , - 1571 , - 2922 , - 3001 , - 1808 , - 2735 , - 2390 , - 773 , - 1276 , - 507 , - 1858 , - 1937 , - 744 , - 1671 , - 1326 , - 3101 , - 212 , - 2835 , - 794 , - 873 , - 3072 , - 607 , - 262 , - 2037 , - 2540 , - 1771 , - 3122 , - 3201 , - 2008 , - 2935 , - 2590 , - 973 , - 1476 , - 707 , - 2058 , - 2137 , - 944 , - 1871 , - 1526 , - 3301 , - 412 , - 3035 , - 994 , - 1073 , - 3272 , - 807 , - 462 , - 2237 , - 2740 , - 1971 , - 3322 , - 9 , - 2208 , - 3135 , - 2790 , - 1173 , - 1676 , - 907 , - 2258 , - 2337 , - 1144 , - 2071 , - 1726 , - 109 , - 612 , - 3235 , - 1194 , - 1273 , - 80 , - 1007 , - 662 , - 2437 , - 2940 , - 2171 , - 130 , - 209 , - 2408 , - 3335 , - 2990 , - 1373 , - 1876 , - 1107 , - 2458 , - 2537 , - 1344 , - 2271 , - 1926 , - 309 , - 812 , - 43 , - 1394 , - 1473 , - 280 , - 1207 , - 862 , - 2637 , - 3140 , - 2371 , - 330 , - 409 , - 2608 , - 143 , - 3190 , - 1573 , - 2076 , - 1307 , - 2658 , - 2737 , - 1544 , - 2471 , - 2126 , - 509 , - 1012 , - 243 , - 1594 , - 1673 , - 480 , - 1407 , - 1062 , - 2837 , - 3340 , - 2571 , - 530 , - 609 , - 2808 , - 343 , - 3390 , - 1773 , - 2276 , - 1507 , - 2858 , - 2937 , - 1744 , - 2671 , - 2326 , - 709 , - 1212 , - 443 , - 1794 , - 1873 , - 680 , - 1607 , - 1262 , - 3037 , - 148 , - 2771 , - 730 , - 809 , - 3008 , - 543 , - 198 , - 1973 , - 2476 , - 1707 , - 3058 , - 3137 , - 1944 , - 2871 , - 2526 , - 909 , - 1412 , - 643 , - 1994 , - 2073 , - 880 , - 1807 , - 1462 , - 3237 , - 348 , - 2971 , - 930 , - 1009 , - 3208 , - 743 , - 398 , - 2173 , - 2676 , - 1907 , - 3258 , - 3337 , - 2144 , - 3071 , - 2726 , - 1109 , - 1612 , - 843 , - 2194 , - 2273 , - 1080 , - 2007 , - 1662 , - 45 , - 548 , - 3171 , - 1130 , - 1209 , - 16 , - 943 , - 598 , - 2373 , - 2876 , - 2107 , - 66 , - 145 , - 2344 , - 3271 , - 2926 , - 1309 , - 1812 , - 1043 , - 2394 , - 2473 , - 1280 , - 2207 , - 1862 , - 245 , - 748 , - 3371 , - 1330 , - 1409 , - 216 , - 1143 , - 798 , - 2573 , - 3076 , - 2307 , - 266 , - 345 , - 2544 , - 79 , - 3126 , - 1509 , - 2012 , - 1243 , - 2594 , - 2673 , - 1480 , - 2407 , - 2062 , - 445 , - 948 , - 179 , - 1530 , - 1609 , - 416 , - 1343 , - 998 , - 2773 , - 3276 , - 2507 , - 466 , - 545 , - 2744 , - 279 , - 3326 , - 1709 , - 2212 , - 1443 , - 2794 , - 2873 , - 1680 , - 2607 , - 2262 , - 645 , - 1148 , - 379 , - 1730 , - 1809 , - 616 , - 1543 , - 1198 , - 2973 , - 84 , - 2707 , - 666 , - 745 , - 2944 , - 479 , - 134 , - 1909 , - 2412 , - 1643 , - 2994 , - 3073 , - 1880 , - 2807 , - 2462 , - 845 , - 1348 , - 579 , - 1930 , - 2009 , - 816 , - 1743 , - 1398 , - 3173 , - 284 , - 2907 , - 866 , - 945 , - 3144 , - 679 , - 334 , - 2109 , - 2612 , - 1843 , - 3194 , - 3273 , - 2080 , - 3007 , - 2662 , - 1045 , - 1548 , - 779 , - 2130 , - 2209 , - 1016 , - 1943 , - 1598 , - 3373 , - 484 , - 3107 , - 1066 , - 1145 , - 3344 , - 879 , - 534 , - 2309 , - 2812 , - 2043 , - 2 , - 81 , - 2280 , - 3207 , - 2862 , - 1245 , - 1748 , - 979 , - 2330 , - 2409 , - 1216 , - 2143 , - 1798 , - 181 , - 684 , - 3307 , - 1266 , - 1345 , - 152 , - 1079 , - 734 , - 2509 , - 3012 , - 2243 , - 202 , - 281 , - 2480 , - 15 , - 3062 , - 1445 , - 1948 , - 1179 , - 2530 , - 2609 , - 1416 , - 2343 , - 1998 , - 381 , - 884 , - 115 , - 1466 , - 1545 , - 352 , - 1279 , - 934 , - 2709 , - 3212 , - 2443 , - 402 , - 481 , - 2680 , - 215 , - 3262 , - 1645 , - 2148 , - 1379 , - 2730 , - 2809 , - 1616 , - 2543 , - 2198 , - 581 , - 1084 , - 315 , - 1666 , - 1745 , - 552 , - 1479 , - 1134 , - 2909 , - 20 , - 2643 , - 602 , - 681 , - 2880 , - 415 , - 70 , - 1845 , - 2348 , - 1579 , - 2930 , - 3009 , - 1816 , - 2743 , - 2398 , - 781 , - 1284 , - 515 , - 1866 , - 1945 , - 752 , - 1679 , - 1334 , - 3109 , - 220 , - 2843 , - 802 , - 881 , - 3080 , - 615 , - 270 , - 2045 , - 2548 , - 1779 , - 3130 , - 3209 , - 2016 , - 2943 , - 2598 , - 981 , - 1484 , - 715 , - 2066 , - 2145 , - 952 , - 1879 , - 1534 , - 3309 , - 420 , - 3043 , - 1002 , - 1081 , - 3280 , - 815 , - 470 , - 2245 , - 2748 , - 1979 , - 3330 , - 17 , - 2216 , - 3143 , - 2798 , - 1181 , - 1684 , - 915 , - 2266 , - 2345 , - 1152 , - 2079 , - 1734 , - 117 , - 620 , - 3243 , - 1202 , - 1281 , - 88 , - 1015 , - 670 , - 2445 , - 2948 , - 2179 , - 138 , - 217 , - 2416 , - 3343 , - 2998 , - 1381 , - 1884 , - 1115 , - 2466 , - 2545 , - 1352 , - 2279 , - 1934 , - 317 , - 820 , - 51 , - 1402 , - 1481 , - 288 , - 1215 , - 870 , - 2645 , - 3148 , - 2379 , - 338 , - 417 , - 2616 , - 151 , - 3198 , - 1581 , - 2084 , - 1315 , - 2666 , - 2745 , - 1552 , - 2479 , - 2134 , - 517 , - 1020 , - 251 , - 1602 , - 1681 , - 488 , - 1415 , - 1070 , - 2845 , - 3348 , - 2579 , - 538 , - 617 , - 2816 , - 351 , - 6 , - 1781 , - 2284 , - 1515 , - 2866 , - 2945 , - 1752 , - 2679 , - 2334 , - 717 , - 1220 , - 451 , - 1802 , - 1881 , - 688 , - 1615 , - 1270 , - 3045 , - 156 , - 2779 , - 738 , - 817 , - 3016 , - 551 , - 206 , - 1981 , - 2484 , - 1715 , - 3066 , - 3145 , - 1952 , - 2879 , - 2534 , - 917 , - 1420 , - 651 , - 2002 , - 2081 , - 888 , - 1815 , - 1470 , - 3245 , - 356 , - 2979 , - 938 , - 1017 , - 3216 , - 751 , - 406 , - 2181 , - 2684 , - 1915 , - 3266 , - 3345 , - 2152 , - 3079 , - 2734 , - 1117 , - 1620 , - 851 , - 2202 , - 2281 , - 1088 , - 2015 , - 1670 , - 53 , - 556 , - 3179 , - 1138 , - 1217 , - 24 , - 951 , - 606 , - 2381 , - 2884 , - 2115 , - 74 , - 153 , - 2352 , - 3279 , - 2934 , - 1317 , - 1820 , - 1051 , - 2402 , - 2481 , - 1288 , - 2215 , - 1870 , - 253 , - 756 , - 3379 , - 1338 , - 1417 , - 224 , - 1151 , - 806 , - 2581 , - 3084 , - 2315 , - 274 , - 353 , - 2552 , - 87 , - 3134 , - 1517 , - 2020 , - 1251 , - 2602 , - 2681 , - 1488 , - 2415 , - 2070 , - 453 , - 956 , - 187 , - 1538 , - 1617 , - 424 , - 1351 , - 1006 , - 2781 , - 3284 , - 2515 , - 474 , - 553 , - 2752 , - 287 , - 3334 , - 1717 , - 2220 , - 1451 , - 2802 , - 2881 , - 1688 , - 2615 , - 2270 , - 653 , - 1156 , - 387 , - 1738 , - 1817 , - 624 , - 1551 , - 1206 , - 2981 , - 92 , - 2715 , - 674 , - 753 , - 2952 , - 487 , - 142 , - 1917 , - 2420 , - 1651 , - 3002 , - 3081 , - 1888 , - 2815 , - 2470 , - 853 , - 1356 , - 587 , - 1938 , - 2017 , - 824 , - 1751 , - 1406 , - 3181 , - 292 , - 2915 , - 874 , - 953 , - 3152 , - 687 , - 342 , - 2117 , - 2620 , - 1851 , - 3202 , - 3281 , - 2088 , - 3015 , - 2670 , - 1053 , - 1556 , - 787 , - 2138 , - 2217 , - 1024 , - 1951 , - 1606 , - 3381 , - 492 , - 3115 , - 1074 , - 1153 , - 3352 , - 887 , - 542 , - 2317 , - 2820 , - 2051 , - 10 , - 89 , - 2288 , - 3215 , - 2870 , - 1253 , - 1756 , - 987 , - 2338 , - 2417 , - 1224 , - 2151 , - 1806 , - 189 , - 692 , - 3315 , - 1274 , - 1353 , - 160 , - 1087 , - 742 , - 2517 , - 3020 , - 2251 , - 210 , - 289 , - 2488 , - 23 , - 3070 , - 1453 , - 1956 , - 1187 , - 2538 , - 2617 , - 1424 , - 2351 , - 2006 , - 389 , - 892 , - 123 , - 1474 , - 1553 , - 360 , - 1287 , - 942 , - 2717 , - 3220 , - 2451 , - 410 , - 489 , - 2688 , - 223 , - 3270 , - 1653 , - 2156 , - 1387 , - 2738 , - 2817 , - 1624 , - 2551 , - 2206 , - 589 , - 1092 , - 323 , - 1674 , - 1753 , - 560 , - 1487 , - 1142 , - 2917 , - 28 , - 2651 , - 610 , - 689 , - 2888 , - 423 , - 78 , - 1853 , - 2356 , - 1587 , - 2938 , - 3017 , - 1824 , - 2751 , - 2406 , - 789 , - 1292 , - 523 , - 1874 , - 1953 , - 760 , - 1687 , - 1342 , - 3117 , - 228 , - 2851 , - 810 , - 889 , - 3088 , - 623 , - 278 , - 2053 , - 2556 , - 1787 , - 3138 , - 3217 , - 2024 , - 2951 , - 2606 , - 989 , - 1492 , - 723 , - 2074 , - 2153 , - 960 , - 1887 , - 1542 , - 3317 , - 428 , - 3051 , - 1010 , - 1089 , - 3288 , - 823 , - 478 , - 2253 , - 2756 , - 1987 , - 3338 , - 25 , - 2224 , - 3151 , - 2806 , - 1189 , - 1692 , - 923 , - 2274 , - 2353 , - 1160 , - 2087 , - 1742 , - 125 , - 628 , - 3251 , - 1210 , - 1289 , - 96 , - 1023 , - 678 , - 2453 , - 2956 , - 2187 , - 146 , - 225 , - 2424 , - 3351 , - 3006 , - 1389 , - 1892 , - 1123 , - 2474 , - 2553 , - 1360 , - 2287 , - 1942 , - 325 , - 828 , - 59 , - 1410 , - 1489 , - 296 , - 1223 , - 878 , - 2653 , - 3156 , - 2387 , - 346 , - 425 , - 2624 , - 159 , - 3206 , - 1589 , - 2092 , - 1323 , - 2674 , - 2753 , - 1560 , - 2487 , - 2142 , - 525 , - 1028 , - 259 , - 1610 , - 1689 , - 496 , - 1423 , - 1078 , - 2853 , - 3356 , - 2587 , - 546 , - 625 , - 2824 , - 359 , - 14 , - 1789 , - 2292 , - 1523 , - 2874 , - 2953 , - 1760 , - 2687 , - 2342 , - 725 , - 1228 , - 459 , - 1810 , - 1889 , - 696 , - 1623 , - 1278 , - 3053 , - 164 , - 2787 , - 746 , - 825 , - 3024 , - 559 , - 214 , - 1989 , - 2492 , - 1723 , - 3074 , - 3153 , - 1960 , - 2887 , - 2542 , - 925 , - 1428 , - 659 , - 2010 , - 2089 , - 896 , - 1823 , - 1478 , - 3253 , - 364 , - 2987 , - 946 , - 1025 , - 3224 , - 759 , - 414 , - 2189 , - 2692 , - 1923 , - 3274 , - 3353 , - 2160 , - 3087 , - 2742 , - 1125 , - 1628 , - 859 , - 2210 , - 2289 , - 1096 , - 2023 , - 1678 , - 61 , - 564 , - 3187 , - 1146 , - 1225 , - 32 , - 959 , - 614 , - 2389 , - 2892 , - 2123 , - 82 , - 161 , - 2360 , - 3287 , - 2942 , - 1325 , - 1828 , - 1059 , - 2410 , - 2489 , - 1296 , - 2223 , - 1878 , - 261 , - 764 , - 3387 , - 1346 , - 1425 , - 232 , - 1159 , - 814 , - 2589 , - 3092 , - 2323 , - 282 , - 361 , - 2560 , - 95 , - 3142 , - 1525 , - 2028 , - 1259 , - 2610 , - 2689 , - 1496 , - 2423 , - 2078 , - 461 , - 964 , - 195 , - 1546 , - 1625 , - 432 , - 1359 , - 1014 , - 2789 , - 3292 , - 2523 , - 482 , - 561 , - 2760 , - 295 , - 3342 , - 1725 , - 2228 , - 1459 , - 2810 , - 2889 , - 1696 , - 2623 , - 2278 , - 661 , - 1164 , - 395 , - 1746 , - 1825 , - 632 , - 1559 , - 1214 , - 2989 , - 100 , - 2723 , - 682 , - 761 , - 2960 , - 495 , - 150 , - 1925 , - 2428 , - 1659 , - 3010 , - 3089 , - 1896 , - 2823 , - 2478 , - 861 , - 1364 , - 595 , - 1946 , - 2025 , - 832 , - 1759 , - 1414 , - 3189 , - 300 , - 2923 , - 882 , - 961 , - 3160 , - 695 , - 350 , - 2125 , - 2628 , - 1859 , - 3210 , - 3289 , - 2096 , - 3023 , - 2678 , - 1061 , - 1564 , - 795 , - 2146 , - 2225 , - 1032 , - 1959 , - 1614 , - 3389 , - 500 , - 3123 , - 1082 , - 1161 , - 3360 , - 895 , - 550 , - 2325 , - 2828 , - 2059 , - 18 , - 97 , - 2296 , - 3223 , - 2878 , - 1261 , - 1764 , - 995 , - 2346 , - 2425 , - 1232 , - 2159 , - 1814 , - 197 , - 700 , - 3323 , - 1282 , - 1361 , - 168 , - 1095 , - 750 , - 2525 , - 3028 , - 2259 , - 218 , - 297 , - 2496 , - 31 , - 3078 , - 1461 , - 1964 , - 1195 , - 2546 , - 2625 , - 1432 , - 2359 , - 2014 , - 397 , - 900 , - 131 , - 1482 , - 1561 , - 368 , - 1295 , - 950 , - 2725 , - 3228 , - 2459 , - 418 , - 497 , - 2696 , - 231 , - 3278 , - 1661 , - 2164 , - 1395 , - 2746 , - 2825 , - 1632 , - 2559 , - 2214 , - 597 , - 1100 , - 331 , - 1682 , - 1761 , - 568 , - 1495 , - 1150 , - 2925 , - 36 , - 2659 , - 618 , - 697 , - 2896 , - 431 , - 86 , - 1861 , - 2364 , - 1595 , - 2946 , - 3025 , - 1832 , - 2759 , - 2414 , - 797 , - 1300 , - 531 , - 1882 , - 1961 , - 768 , - 1695 , - 1350 , - 3125 , - 236 , - 2859 , - 818 , - 897 , - 3096 , - 631 , - 286 , - 2061 , - 2564 , - 1795 , - 3146 , - 3225 , - 2032 , - 2959 , - 2614 , - 997 , - 1500 , - 731 , - 2082 , - 2161 , - 968 , - 1895 , - 1550 , - 3325 , - 436 , - 3059 , - 1018 , - 1097 , - 3296 , - 831 , - 486 , - 2261 , - 2764 , - 1995 , - 3346 , - 33 , - 2232 , - 3159 , - 2814 , - 1197 , - 1700 , - 931 , - 2282 , - 2361 , - 1168 , - 2095 , - 1750 , - 133 , - 636 , - 3259 , - 1218 , - 1297 , - 104 , - 1031 , - 686 , - 2461 , - 2964 , - 2195 , - 154 , - 233 , - 2432 , - 3359 , - 3014 , - 1397 , - 1900 , - 1131 , - 2482 , - 2561 , - 1368 , - 2295 , - 1950 , - 333 , - 836 , - 67 , - 1418 , - 1497 , - 304 , - 1231 , - 886 , - 2661 , - 3164 , - 2395 , - 354 , - 433 , - 2632 , - 167 , - 3214 , - 1597 , - 2100 , - 1331 , - 2682 , - 2761 , - 1568 , - 2495 , - 2150 , - 533 , - 1036 , - 267 , - 1618 , - 1697 , - 504 , - 1431 , - 1086 , - 2861 , - 3364 , - 2595 , - 554 , - 633 , - 2832 , - 367 , - 22 , - 1797 , - 2300 , - 1531 , - 2882 , - 2961 , - 1768 , - 2695 , - 2350 , - 733 , - 1236 , - 467 , - 1818 , - 1897 , - 704 , - 1631 , - 1286 , - 3061 , - 172 , - 2795 , - 754 , - 833 , - 3032 , - 567 , - 222 , - 1997 , - 2500 , - 1731 , - 3082 , - 3161 , - 1968 , - 2895 , - 2550 , - 933 , - 1436 , - 667 , - 2018 , - 2097 , - 904 , - 1831 , - 1486 , - 3261 , - 372 , - 2995 , - 954 , - 1033 , - 3232 , - 767 , - 422 , - 2197 , - 2700 , - 1931 , - 3282 , - 3361 , - 2168 , - 3095 , - 2750 , - 1133 , - 1636 , - 867 , - 2218 , - 2297 , - 1104 , - 2031 , - 1686 , - 69 , - 572 , - 3195 , - 1154 , - 1233 , - 40 , - 967 , - 622 , - 2397 , - 2900 , - 2131 , - 90 , - 169 , - 2368 , - 3295 , - 2950 , - 1333 , - 1836 , - 1067 , - 2418 , - 2497 , - 1304 , - 2231 , - 1886 , - 269 , - 772 , - 3 , - 1354 , - 1433 , - 240 , - 1167 , - 822 , - 2597 , - 3100 , - 2331 , - 290 , - 369 , - 2568 , - 103 , - 3150 , - 1533 , - 2036 , - 1267 , - 2618 , - 2697 , - 1504 , - 2431 , - 2086 , - 469 , - 972 , - 203 , - 1554 , - 1633 , - 440 , - 1367 , - 1022 , - 2797 , - 3300 , - 2531 , - 490 , - 569 , - 2768 , - 303 , - 3350 , - 1733 , - 2236 , - 1467 , - 2818 , - 2897 , - 1704 , - 2631 , - 2286 , - 669 , - 1172 , - 403 , - 1754 , - 1833 , - 640 , - 1567 , - 1222 , - 2997 , - 108 , - 2731 , - 690 , - 769 , - 2968 , - 503 , - 158 , - 1933 , - 2436 , - 1667 , - 3018 , - 3097 , - 1904 , - 2831 , - 2486 , - 869 , - 1372 , - 603 , - 1954 , - 2033 , - 840 , - 1767 , - 1422 , - 3197 , - 308 , - 2931 , - 890 , - 969 , - 3168 , - 703 , - 358 , - 2133 , - 2636 , - 1867 , - 3218 , - 3297 , - 2104 , - 3031 , - 2686 , - 1069 , - 1572 , - 803 , - 2154 , - 2233 , - 1040 , - 1967 , - 1622 , - 5 , - 508 , - 3131 , - 1090 , - 1169 , - 3368 , - 903 , - 558 , - 2333 , - 2836 , - 2067 , - 26 , - 105 , - 2304 , - 3231 , - 2886 , - 1269 , - 1772 , - 1003 , - 2354 , - 2433 , - 1240 , - 2167 , - 1822 , - 205 , - 708 , - 3331 , - 1290 , - 1369 , - 176 , - 1103 , - 758 , - 2533 , - 3036 , - 2267 , - 226 , - 305 , - 2504 , - 39 , - 3086 , - 1469 , - 1972 , - 1203 , - 2554 , - 2633 , - 1440 , - 2367 , - 2022 , - 405 , - 908 , - 139 , - 1490 , - 1569 , - 376 , - 1303 , - 958 , - 2733 , - 3236 , - 2467 , - 426 , - 505 , - 2704 , - 239 , - 3286 , - 1669 , - 2172 , - 1403 , - 2754 , - 2833 , - 1640 , - 2567 , - 2222 , - 605 , - 1108 , - 339 , - 1690 , - 1769 , - 576 , - 1503 , - 1158 , - 2933 , - 44 , - 2667 , - 626 , - 705 , - 2904 , - 439 , - 94 , - 1869 , - 2372 , - 1603 , - 2954 , - 3033 , - 1840 , - 2767 , - 2422 , - 805 , - 1308 , - 539 , - 1890 , - 1969 , - 776 , - 1703 , - 1358 , - 3133 , - 244 , - 2867 , - 826 , - 905 , - 3104 , - 639 , - 294 , - 2069 , - 2572 , - 1803 , - 3154 , - 3233 , - 2040 , - 2967 , - 2622 , - 1005 , - 1508 , - 739 , - 2090 , - 2169 , - 976 , - 1903 , - 1558 , - 3333 , - 444 , - 3067 , - 1026 , - 1105 , - 3304 , - 839 , - 494 , - 2269 , - 2772 , - 2003 , - 3354 , - 41 , - 2240 , - 3167 , - 2822 , - 1205 , - 1708 , - 939 , - 2290 , - 2369 , - 1176 , - 2103 , - 1758 , - 141 , - 644 , - 3267 , - 1226 , - 1305 , - 112 , - 1039 , - 694 , - 2469 , - 2972 , - 2203 , - 162 , - 241 , - 2440 , - 3367 , - 3022 , - 1405 , - 1908 , - 1139 , - 2490 , - 2569 , - 1376 , - 2303 , - 1958 , - 341 , - 844 , - 75 , - 1426 , - 1505 , - 312 , - 1239 , - 894 , - 2669 , - 3172 , - 2403 , - 362 , - 441 , - 2640 , - 175 , - 3222 , - 1605 , - 2108 , - 1339 , - 2690 , - 2769 , - 1576 , - 2503 , - 2158 , - 541 , - 1044 , - 275 , - 1626 , - 1705 , - 512 , - 1439 , - 1094 , - 2869 , - 3372 , - 2603 , - 562 , - 641 , - 2840 , - 375 , - 30 , - 1805 , - 2308 , - 1539 , - 2890 , - 2969 , - 1776 , - 2703 , - 2358 , - 741 , - 1244 , - 475 , - 1826 , - 1905 , - 712 , - 1639 , - 1294 , - 3069 , - 180 , - 2803 , - 762 , - 841 , - 3040 , - 575 , - 230 , - 2005 , - 2508 , - 1739 , - 3090 , - 3169 , - 1976 , - 2903 , - 2558 , - 941 , - 1444 , - 675 , - 2026 , - 2105 , - 912 , - 1839 , - 1494 , - 3269 , - 380 , - 3003 , - 962 , - 1041 , - 3240 , - 775 , - 430 , - 2205 , - 2708 , - 1939 , - 3290 , - 3369 , - 2176 , - 3103 , - 2758 , - 1141 , - 1644 , - 875 , - 2226 , - 2305 , - 1112 , - 2039 , - 1694 , - 77 , - 580 , - 3203 , - 1162 , - 1241 , - 48 , - 975 , - 630 , - 2405 , - 2908 , - 2139 , - 98 , - 177 , - 2376 , - 3303 , - 2958 , - 1341 , - 1844 , - 1075 , - 2426 , - 2505 , - 1312 , - 2239 , - 1894 , - 277 , - 780 , - 11 , - 1362 , - 1441 , - 248 , - 1175 , - 830 , - 2605 , - 3108 , - 2339 , - 298 , - 377 , - 2576 , - 111 , - 3158 , - 1541 , - 2044 , - 1275 , - 2626 , - 2705 , - 1512 , - 2439 , - 2094 , - 477 , - 980 , - 211 , - 1562 , - 1641 , - 448 , - 1375 , - 1030 , - 2805 , - 3308 , - 2539 , - 498 , - 577 , - 2776 , - 311 , - 3358 , - 1741 , - 2244 , - 1475 , - 2826 , - 2905 , - 1712 , - 2639 , - 2294 , - 677 , - 1180 , - 411 , - 1762 , - 1841 , - 648 , - 1575 , - 1230 , - 3005 , - 116 , - 2739 , - 698 , - 777 , - 2976 , - 511 , - 166 , - 1941 , - 2444 , - 1675 , - 3026 , - 3105 , - 1912 , - 2839 , - 2494 , - 877 , - 1380 , - 611 , - 1962 , - 2041 , - 848 , - 1775 , - 1430 , - 3205 , - 316 , - 2939 , - 898 , - 977 , - 3176 , - 711 , - 366 , - 2141 , - 2644 , - 1875 , - 3226 , - 3305 , - 2112 , - 3039 , - 2694 , - 1077 , - 1580 , - 811 , - 2162 , - 2241 , - 1048 , - 1975 , - 1630 , - 13 , - 516 , - 3139 , - 1098 , - 1177 , - 3376 , - 911 , - 566 , - 2341 , - 2844 , - 2075 , - 34 , - 113 , - 2312 , - 3239 , - 2894 , - 1277 , - 1780 , - 1011 , - 2362 , - 2441 , - 1248 , - 2175 , - 1830 , - 213 , - 716 , - 3339 , - 1298 , - 1377 , - 184 , - 1111 , - 766 , - 2541 , - 3044 , - 2275 , - 234 , - 313 , - 2512 , - 47 , - 3094 , - 1477 , - 1980 , - 1211 , - 2562 , - 2641 , - 1448 , - 2375 , - 2030 , - 413 , - 916 , - 147 , - 1498 , - 1577 , - 384 , - 1311 , - 966 , - 2741 , - 3244 , - 2475 , - 434 , - 513 , - 2712 , - 247 , - 3294 , - 1677 , - 2180 , - 1411 , - 2762 , - 2841 , - 1648 , - 2575 , - 2230 , - 613 , - 1116 , - 347 , - 1698 , - 1777 , - 584 , - 1511 , - 1166 , - 2941 , - 52 , - 2675 , - 634 , - 713 , - 2912 , - 447 , - 102 , - 1877 , - 2380 , - 1611 , - 2962 , - 3041 , - 1848 , - 2775 , - 2430 , - 813 , - 1316 , - 547 , - 1898 , - 1977 , - 784 , - 1711 , - 1366 , - 3141 , - 252 , - 2875 , - 834 , - 913 , - 3112 , - 647 , - 302 , - 2077 , - 2580 , - 1811 , - 3162 , - 3241 , - 2048 , - 2975 , - 2630 , - 1013 , - 1516 , - 747 , - 2098 , - 2177 , - 984 , - 1911 , - 1566 , - 3341 , - 452 , - 3075 , - 1034 , - 1113 , - 3312 , - 847 , - 502 , - 2277 , - 2780 , - 2011 , - 3362 , - 49 , - 2248 , - 3175 , - 2830 , - 1213 , - 1716 , - 947 , - 2298 , - 2377 , - 1184 , - 2111 , - 1766 , - 149 , - 652 , - 3275 , - 1234 , - 1313 , - 120 , - 1047 , - 702 , - 2477 , - 2980 , - 2211 , - 170 , - 249 , - 2448 , - 3375 , - 3030 , - 1413 , - 1916 , - 1147 , - 2498 , - 2577 , - 1384 , - 2311 , - 1966 , - 349 , - 852 , - 83 , - 1434 , - 1513 , - 320 , - 1247 , - 902 , - 2677 , - 3180 , - 2411 , - 370 , - 449 , - 2648 , - 183 , - 3230 , - 1613 , - 2116 , - 1347 , - 2698 , - 2777 , - 1584 , - 2511 , - 2166 , - 549 , - 1052 , - 283 , - 1634 , - 1713 , - 520 , - 1447 , - 1102 , - 2877 , - 3380 , - 2611 , - 570 , - 649 , - 2848 , - 383 , - 38 , - 1813 , - 2316 , - 1547 , - 2898 , - 2977 , - 1784 , - 2711 , - 2366 , - 749 , - 1252 , - 483 , - 1834 , - 1913 , - 720 , - 1647 , - 1302 , - 3077 , - 188 , - 2811 , - 770 , - 849 , - 3048 , - 583 , - 238 , - 2013 , - 2516 , - 1747 , - 3098 , - 3177 , - 1984 , - 2911 , - 2566 , - 949 , - 1452 , - 683 , - 2034 , - 2113 , - 920 , - 1847 , - 1502 , - 3277 , - 388 , - 3011 , - 970 , - 1049 , - 3248 , - 783 , - 438 , - 2213 , - 2716 , - 1947 , - 3298 , - 3377 , - 2184 , - 3111 , - 2766 , - 1149 , - 1652 , - 883 , - 2234 , - 2313 , - 1120 , - 2047 , - 1702 , - 85 , - 588 , - 3211 , - 1170 , - 1249 , - 56 , - 983 , - 638 , - 2413 , - 2916 , - 2147 , - 106 , - 185 , - 2384 , - 3311 , - 2966 , - 1349 , - 1852 , - 1083 , - 2434 , - 2513 , - 1320 , - 2247 , - 1902 , - 285 , - 788 , - 19 , - 1370 , - 1449 , - 256 , - 1183 , - 838 , - 2613 , - 3116 , - 2347 , - 306 , - 385 , - 2584 , - 119 , - 3166 , - 1549 , - 2052 , - 1283 , - 2634 , - 2713 , - 1520 , - 2447 , - 2102 , - 485 , - 988 , - 219 , - 1570 , - 1649 , - 456 , - 1383 , - 1038 , - 2813 , - 3316 , - 2547 , - 506 , - 585 , - 2784 , - 319 , - 3366 , - 1749 , - 2252 , - 1483 , - 2834 , - 2913 , - 1720 , - 2647 , - 2302 , - 685 , - 1188 , - 419 , - 1770 , - 1849 , - 656 , - 1583 , - 1238 , - 3013 , - 124 , - 2747 , - 706 , - 785 , - 2984 , - 519 , - 174 , - 1949 , - 2452 , - 1683 , - 3034 , - 3113 , - 1920 , - 2847 , - 2502 , - 885 , - 1388 , - 619 , - 1970 , - 2049 , - 856 , - 1783 , - 1438 , - 3213 , - 324 , - 2947 , - 906 , - 985 , - 3184 , - 719 , - 374 , - 2149 , - 2652 , - 1883 , - 3234 , - 3313 , - 2120 , - 3047 , - 2702 , - 1085 , - 1588 , - 819 , - 2170 , - 2249 , - 1056 , - 1983 , - 1638 , - 21 , - 524 , - 3147 , - 1106 , - 1185 , - 3384 , - 919 , - 574 , - 2349 , - 2852 , - 2083 , - 42 , - 121 , - 2320 , - 3247 , - 2902 , - 1285 , - 1788 , - 1019 , - 2370 , - 2449 , - 1256 , - 2183 , - 1838 , - 221 , - 724 , - 3347 , - 1306 , - 1385 , - 192 , - 1119 , - 774 , - 2549 , - 3052 , - 2283 , - 242 , - 321 , - 2520 , - 55 , - 3102 , - 1485 , - 1988 , - 1219 , - 2570 , - 2649 , - 1456 , - 2383 , - 2038 , - 421 , - 924 , - 155 , - 1506 , - 1585 , - 392 , - 1319 , - 974 , - 2749 , - 3252 , - 2483 , - 442 , - 521 , - 2720 , - 255 , - 3302 , - 1685 , - 2188 , - 1419 , - 2770 , - 2849 , - 1656 , - 2583 , - 2238 , - 621 , - 1124 , - 355 , - 1706 , - 1785 , - 592 , - 1519 , - 1174 , - 2949 , - 60 , - 2683 , - 642 , - 721 , - 2920 , - 455 , - 110 , - 1885 , - 2388 , - 1619 , - 2970 , - 3049 , - 1856 , - 2783 , - 2438 , - 821 , - 1324 , - 555 , - 1906 , - 1985 , - 792 , - 1719 , - 1374 , - 3149 , - 260 , - 2883 , - 842 , - 921 , - 3120 , - 655 , - 310 , - 2085 , - 2588 , - 1819 , - 3170 , - 3249 , - 2056 , - 2983 , - 2638 , - 1021 , - 1524 , - 755 , - 2106 , - 2185 , - 992 , - 1919 , - 1574 , - 3349 , - 460 , - 3083 , - 1042 , - 1121 , - 3320 , - 855 , - 510 , - 2285 , - 2788 , - 2019 , - 3370 , - 57 , - 2256 , - 3183 , - 2838 , - 1221 , - 1724 , - 955 , - 2306 , - 2385 , - 1192 , - 2119 , - 1774 , - 157 , - 660 , - 3283 , - 1242 , - 1321 , - 128 , - 1055 , - 710 , - 2485 , - 2988 , - 2219 , - 178 , - 257 , - 2456 , - 3383 , - 3038 , - 1421 , - 1924 , - 1155 , - 2506 , - 2585 , - 1392 , - 2319 , - 1974 , - 357 , - 860 , - 91 , - 1442 , - 1521 , - 328 , - 1255 , - 910 , - 2685 , - 3188 , - 2419 , - 378 , - 457 , - 2656 , - 191 , - 3238 , - 1621 , - 2124 , - 1355 , - 2706 , - 2785 , - 1592 , - 2519 , - 2174 , - 557 , - 1060 , - 291 , - 1642 , - 1721 , - 528 , - 1455 , - 1110 , - 2885 , - 3388 , - 2619 , - 578 , - 657 , - 2856 , - 391 , - 46 , - 1821 , - 2324 , - 1555 , - 2906 , - 2985 , - 1792 , - 2719 , - 2374 , - 757 , - 1260 , - 491 , - 1842 , - 1921 , - 728 , - 1655 , - 1310 , - 3085 , - 196 , - 2819 , - 778 , - 857 , - 3056 , - 591 , - 246 , - 2021 , - 2524 , - 1755 , - 3106 , - 3185 , - 1992 , - 2919 , - 2574 , - 957 , - 1460 , - 691 , - 2042 , - 2121 , - 928 , - 1855 , - 1510 , - 3285 , - 396 , - 3019 , - 978 , - 1057 , - 3256 , - 791 , - 446 , - 2221 , - 2724 , - 1955 , - 3306 , - 3385 , - 2192 , - 3119 , - 2774 , - 1157 , - 1660 , - 891 , - 2242 , - 2321 , - 1128 , - 2055 , - 1710 , - 93 , - 596 , - 3219 , - 1178 , - 1257 , - 64 , - 991 , - 646 , - 2421 , - 2924 , - 2155 , - 114 , - 193 , - 2392 , - 3319 , - 2974 , - 1357 , - 1860 , - 1091 , - 2442 , - 2521 , - 1328 , - 2255 , - 1910 , - 293 , - 796 , - 27 , - 1378 , - 1457 , - 264 , - 1191 , - 846 , - 2621 , - 3124 , - 2355 , - 314 , - 393 , - 2592 , - 127 , - 3174 , - 1557 , - 2060 , - 1291 , - 2642 , - 2721 , - 1528 , - 2455 , - 2110 , - 493 , - 996 , - 227 , - 1578 , - 1657 , - 464 , - 1391 , - 1046 , - 2821 , - 3324 , - 2555 , - 514 , - 593 , - 2792 , - 327 , - 3374 , - 1757 , - 2260 , - 1491 , - 2842 , - 2921 , - 1728 , - 2655 , - 2310 , - 693 , - 1196 , - 427 , - 1778 , - 1857 , - 664 , - 1591 , - 1246 , - 3021 , - 132 , - 2755 , - 714 , - 793 , - 2992 , - 527 , - 182 , - 1957 , - 2460 , - 1691 , - 3042 , - 3121 , - 1928 , - 2855 , - 2510 , - 893 , - 1396 , - 627 , - 1978 , - 2057 , - 864 , - 1791 , - 1446 , - 3221 , - 332 , - 2955 , - 914 , - 993 , - 3192 , - 727 , - 382 , - 2157 , - 2660 , - 1891 , - 3242 , - 3321 , - 2128 , - 3055 , - 2710 , - 1093 , - 1596 , - 827 , - 2178 , - 2257 , - 1064 , - 1991 , - 1646 , - 29 , - 532 , - 3155 , - 1114 , - 1193 , - 0 , - 2347 , - 854 , - 2433 , - 172 , - 983 , - 1410 , - 1453 , - 1112 , - 387 , - 2734 , - 1241 , - 2820 , - 559 , - 1370 , - 1797 , - 1840 , - 1499 , - 774 , - 3121 , - 1628 , - 3207 , - 946 , - 1757 , - 2184 , - 2227 , - 1886 , - 1161 , - 52 , - 2015 , - 138 , - 1333 , - 2144 , - 2571 , - 2614 , - 2273 , - 1548 , - 439 , - 2402 , - 525 , - 1720 , - 2531 , - 2958 , - 3001 , - 2660 , - 1935 , - 826 , - 2789 , - 912 , - 2107 , - 2918 , - 3345 , - 3388 , - 3047 , - 2322 , - 1213 , - 3176 , - 1299 , - 2494 , - 3305 , - 276 , - 319 , - 3434 , - 2709 , - 1600 , - 107 , - 1686 , - 2881 , - 236 , - 663 , - 706 , - 365 , - 3096 , - 1987 , - 494 , - 2073 , - 3268 , - 623 , - 1050 , - 1093 , - 752 , - 27 , - 2374 , - 881 , - 2460 , - 199 , - 1010 , - 1437 , - 1480 , - 1139 , - 414 , - 2761 , - 1268 , - 2847 , - 586 , - 1397 , - 1824 , - 1867 , - 1526 , - 801 , - 3148 , - 1655 , - 3234 , - 973 , - 1784 , - 2211 , - 2254 , - 1913 , - 1188 , - 79 , - 2042 , - 165 , - 1360 , - 2171 , - 2598 , - 2641 , - 2300 , - 1575 , - 466 , - 2429 , - 552 , - 1747 , - 2558 , - 2985 , - 3028 , - 2687 , - 1962 , - 853 , - 2816 , - 939 , - 2134 , - 2945 , - 3372 , - 3415 , - 3074 , - 2349 , - 1240 , - 3203 , - 1326 , - 2521 , - 3332 , - 303 , - 346 , - 5 , - 2736 , - 1627 , - 134 , - 1713 , - 2908 , - 263 , - 690 , - 733 , - 392 , - 3123 , - 2014 , - 521 , - 2100 , - 3295 , - 650 , - 1077 , - 1120 , - 779 , - 54 , - 2401 , - 908 , - 2487 , - 226 , - 1037 , - 1464 , - 1507 , - 1166 , - 441 , - 2788 , - 1295 , - 2874 , - 613 , - 1424 , - 1851 , - 1894 , - 1553 , - 828 , - 3175 , - 1682 , - 3261 , - 1000 , - 1811 , - 2238 , - 2281 , - 1940 , - 1215 , - 106 , - 2069 , - 192 , - 1387 , - 2198 , - 2625 , - 2668 , - 2327 , - 1602 , - 493 , - 2456 , - 579 , - 1774 , - 2585 , - 3012 , - 3055 , - 2714 , - 1989 , - 880 , - 2843 , - 966 , - 2161 , - 2972 , - 3399 , - 3442 , - 3101 , - 2376 , - 1267 , - 3230 , - 1353 , - 2548 , - 3359 , - 330 , - 373 , - 32 , - 2763 , - 1654 , - 161 , - 1740 , - 2935 , - 290 , - 717 , - 760 , - 419 , - 3150 , - 2041 , - 548 , - 2127 , - 3322 , - 677 , - 1104 , - 1147 , - 806 , - 81 , - 2428 , - 935 , - 2514 , - 253 , - 1064 , - 1491 , - 1534 , - 1193 , - 468 , - 2815 , - 1322 , - 2901 , - 640 , - 1451 , - 1878 , - 1921 , - 1580 , - 855 , - 3202 , - 1709 , - 3288 , - 1027 , - 1838 , - 2265 , - 2308 , - 1967 , - 1242 , - 133 , - 2096 , - 219 , - 1414 , - 2225 , - 2652 , - 2695 , - 2354 , - 1629 , - 520 , - 2483 , - 606 , - 1801 , - 2612 , - 3039 , - 3082 , - 2741 , - 2016 , - 907 , - 2870 , - 993 , - 2188 , - 2999 , - 3426 , - 13 , - 3128 , - 2403 , - 1294 , - 3257 , - 1380 , - 2575 , - 3386 , - 357 , - 400 , - 59 , - 2790 , - 1681 , - 188 , - 1767 , - 2962 , - 317 , - 744 , - 787 , - 446 , - 3177 , - 2068 , - 575 , - 2154 , - 3349 , - 704 , - 1131 , - 1174 , - 833 , - 108 , - 2455 , - 962 , - 2541 , - 280 , - 1091 , - 1518 , - 1561 , - 1220 , - 495 , - 2842 , - 1349 , - 2928 , - 667 , - 1478 , - 1905 , - 1948 , - 1607 , - 882 , - 3229 , - 1736 , - 3315 , - 1054 , - 1865 , - 2292 , - 2335 , - 1994 , - 1269 , - 160 , - 2123 , - 246 , - 1441 , - 2252 , - 2679 , - 2722 , - 2381 , - 1656 , - 547 , - 2510 , - 633 , - 1828 , - 2639 , - 3066 , - 3109 , - 2768 , - 2043 , - 934 , - 2897 , - 1020 , - 2215 , - 3026 , - 3453 , - 40 , - 3155 , - 2430 , - 1321 , - 3284 , - 1407 , - 2602 , - 3413 , - 384 , - 427 , - 86 , - 2817 , - 1708 , - 215 , - 1794 , - 2989 , - 344 , - 771 , - 814 , - 473 , - 3204 , - 2095 , - 602 , - 2181 , - 3376 , - 731 , - 1158 , - 1201 , - 860 , - 135 , - 2482 , - 989 , - 2568 , - 307 , - 1118 , - 1545 , - 1588 , - 1247 , - 522 , - 2869 , - 1376 , - 2955 , - 694 , - 1505 , - 1932 , - 1975 , - 1634 , - 909 , - 3256 , - 1763 , - 3342 , - 1081 , - 1892 , - 2319 , - 2362 , - 2021 , - 1296 , - 187 , - 2150 , - 273 , - 1468 , - 2279 , - 2706 , - 2749 , - 2408 , - 1683 , - 574 , - 2537 , - 660 , - 1855 , - 2666 , - 3093 , - 3136 , - 2795 , - 2070 , - 961 , - 2924 , - 1047 , - 2242 , - 3053 , - 24 , - 67 , - 3182 , - 2457 , - 1348 , - 3311 , - 1434 , - 2629 , - 3440 , - 411 , - 454 , - 113 , - 2844 , - 1735 , - 242 , - 1821 , - 3016 , - 371 , - 798 , - 841 , - 500 , - 3231 , - 2122 , - 629 , - 2208 , - 3403 , - 758 , - 1185 , - 1228 , - 887 , - 162 , - 2509 , - 1016 , - 2595 , - 334 , - 1145 , - 1572 , - 1615 , - 1274 , - 549 , - 2896 , - 1403 , - 2982 , - 721 , - 1532 , - 1959 , - 2002 , - 1661 , - 936 , - 3283 , - 1790 , - 3369 , - 1108 , - 1919 , - 2346 , - 2389 , - 2048 , - 1323 , - 214 , - 2177 , - 300 , - 1495 , - 2306 , - 2733 , - 2776 , - 2435 , - 1710 , - 601 , - 2564 , - 687 , - 1882 , - 2693 , - 3120 , - 3163 , - 2822 , - 2097 , - 988 , - 2951 , - 1074 , - 2269 , - 3080 , - 51 , - 94 , - 3209 , - 2484 , - 1375 , - 3338 , - 1461 , - 2656 , - 11 , - 438 , - 481 , - 140 , - 2871 , - 1762 , - 269 , - 1848 , - 3043 , - 398 , - 825 , - 868 , - 527 , - 3258 , - 2149 , - 656 , - 2235 , - 3430 , - 785 , - 1212 , - 1255 , - 914 , - 189 , - 2536 , - 1043 , - 2622 , - 361 , - 1172 , - 1599 , - 1642 , - 1301 , - 576 , - 2923 , - 1430 , - 3009 , - 748 , - 1559 , - 1986 , - 2029 , - 1688 , - 963 , - 3310 , - 1817 , - 3396 , - 1135 , - 1946 , - 2373 , - 2416 , - 2075 , - 1350 , - 241 , - 2204 , - 327 , - 1522 , - 2333 , - 2760 , - 2803 , - 2462 , - 1737 , - 628 , - 2591 , - 714 , - 1909 , - 2720 , - 3147 , - 3190 , - 2849 , - 2124 , - 1015 , - 2978 , - 1101 , - 2296 , - 3107 , - 78 , - 121 , - 3236 , - 2511 , - 1402 , - 3365 , - 1488 , - 2683 , - 38 , - 465 , - 508 , - 167 , - 2898 , - 1789 , - 296 , - 1875 , - 3070 , - 425 , - 852 , - 895 , - 554 , - 3285 , - 2176 , - 683 , - 2262 , - 1 , - 812 , - 1239 , - 1282 , - 941 , - 216 , - 2563 , - 1070 , - 2649 , - 388 , - 1199 , - 1626 , - 1669 , - 1328 , - 603 , - 2950 , - 1457 , - 3036 , - 775 , - 1586 , - 2013 , - 2056 , - 1715 , - 990 , - 3337 , - 1844 , - 3423 , - 1162 , - 1973 , - 2400 , - 2443 , - 2102 , - 1377 , - 268 , - 2231 , - 354 , - 1549 , - 2360 , - 2787 , - 2830 , - 2489 , - 1764 , - 655 , - 2618 , - 741 , - 1936 , - 2747 , - 3174 , - 3217 , - 2876 , - 2151 , - 1042 , - 3005 , - 1128 , - 2323 , - 3134 , - 105 , - 148 , - 3263 , - 2538 , - 1429 , - 3392 , - 1515 , - 2710 , - 65 , - 492 , - 535 , - 194 , - 2925 , - 1816 , - 323 , - 1902 , - 3097 , - 452 , - 879 , - 922 , - 581 , - 3312 , - 2203 , - 710 , - 2289 , - 28 , - 839 , - 1266 , - 1309 , - 968 , - 243 , - 2590 , - 1097 , - 2676 , - 415 , - 1226 , - 1653 , - 1696 , - 1355 , - 630 , - 2977 , - 1484 , - 3063 , - 802 , - 1613 , - 2040 , - 2083 , - 1742 , - 1017 , - 3364 , - 1871 , - 3450 , - 1189 , - 2000 , - 2427 , - 2470 , - 2129 , - 1404 , - 295 , - 2258 , - 381 , - 1576 , - 2387 , - 2814 , - 2857 , - 2516 , - 1791 , - 682 , - 2645 , - 768 , - 1963 , - 2774 , - 3201 , - 3244 , - 2903 , - 2178 , - 1069 , - 3032 , - 1155 , - 2350 , - 3161 , - 132 , - 175 , - 3290 , - 2565 , - 1456 , - 3419 , - 1542 , - 2737 , - 92 , - 519 , - 562 , - 221 , - 2952 , - 1843 , - 350 , - 1929 , - 3124 , - 479 , - 906 , - 949 , - 608 , - 3339 , - 2230 , - 737 , - 2316 , - 55 , - 866 , - 1293 , - 1336 , - 995 , - 270 , - 2617 , - 1124 , - 2703 , - 442 , - 1253 , - 1680 , - 1723 , - 1382 , - 657 , - 3004 , - 1511 , - 3090 , - 829 , - 1640 , - 2067 , - 2110 , - 1769 , - 1044 , - 3391 , - 1898 , - 21 , - 1216 , - 2027 , - 2454 , - 2497 , - 2156 , - 1431 , - 322 , - 2285 , - 408 , - 1603 , - 2414 , - 2841 , - 2884 , - 2543 , - 1818 , - 709 , - 2672 , - 795 , - 1990 , - 2801 , - 3228 , - 3271 , - 2930 , - 2205 , - 1096 , - 3059 , - 1182 , - 2377 , - 3188 , - 159 , - 202 , - 3317 , - 2592 , - 1483 , - 3446 , - 1569 , - 2764 , - 119 , - 546 , - 589 , - 248 , - 2979 , - 1870 , - 377 , - 1956 , - 3151 , - 506 , - 933 , - 976 , - 635 , - 3366 , - 2257 , - 764 , - 2343 , - 82 , - 893 , - 1320 , - 1363 , - 1022 , - 297 , - 2644 , - 1151 , - 2730 , - 469 , - 1280 , - 1707 , - 1750 , - 1409 , - 684 , - 3031 , - 1538 , - 3117 , - 856 , - 1667 , - 2094 , - 2137 , - 1796 , - 1071 , - 3418 , - 1925 , - 48 , - 1243 , - 2054 , - 2481 , - 2524 , - 2183 , - 1458 , - 349 , - 2312 , - 435 , - 1630 , - 2441 , - 2868 , - 2911 , - 2570 , - 1845 , - 736 , - 2699 , - 822 , - 2017 , - 2828 , - 3255 , - 3298 , - 2957 , - 2232 , - 1123 , - 3086 , - 1209 , - 2404 , - 3215 , - 186 , - 229 , - 3344 , - 2619 , - 1510 , - 17 , - 1596 , - 2791 , - 146 , - 573 , - 616 , - 275 , - 3006 , - 1897 , - 404 , - 1983 , - 3178 , - 533 , - 960 , - 1003 , - 662 , - 3393 , - 2284 , - 791 , - 2370 , - 109 , - 920 , - 1347 , - 1390 , - 1049 , - 324 , - 2671 , - 1178 , - 2757 , - 496 , - 1307 , - 1734 , - 1777 , - 1436 , - 711 , - 3058 , - 1565 , - 3144 , - 883 , - 1694 , - 2121 , - 2164 , - 1823 , - 1098 , - 3445 , - 1952 , - 75 , - 1270 , - 2081 , - 2508 , - 2551 , - 2210 , - 1485 , - 376 , - 2339 , - 462 , - 1657 , - 2468 , - 2895 , - 2938 , - 2597 , - 1872 , - 763 , - 2726 , - 849 , - 2044 , - 2855 , - 3282 , - 3325 , - 2984 , - 2259 , - 1150 , - 3113 , - 1236 , - 2431 , - 3242 , - 213 , - 256 , - 3371 , - 2646 , - 1537 , - 44 , - 1623 , - 2818 , - 173 , - 600 , - 643 , - 302 , - 3033 , - 1924 , - 431 , - 2010 , - 3205 , - 560 , - 987 , - 1030 , - 689 , - 3420 , - 2311 , - 818 , - 2397 , - 136 , - 947 , - 1374 , - 1417 , - 1076 , - 351 , - 2698 , - 1205 , - 2784 , - 523 , - 1334 , - 1761 , - 1804 , - 1463 , - 738 , - 3085 , - 1592 , - 3171 , - 910 , - 1721 , - 2148 , - 2191 , - 1850 , - 1125 , - 16 , - 1979 , - 102 , - 1297 , - 2108 , - 2535 , - 2578 , - 2237 , - 1512 , - 403 , - 2366 , - 489 , - 1684 , - 2495 , - 2922 , - 2965 , - 2624 , - 1899 , - 790 , - 2753 , - 876 , - 2071 , - 2882 , - 3309 , - 3352 , - 3011 , - 2286 , - 1177 , - 3140 , - 1263 , - 2458 , - 3269 , - 240 , - 283 , - 3398 , - 2673 , - 1564 , - 71 , - 1650 , - 2845 , - 200 , - 627 , - 670 , - 329 , - 3060 , - 1951 , - 458 , - 2037 , - 3232 , - 587 , - 1014 , - 1057 , - 716 , - 3447 , - 2338 , - 845 , - 2424 , - 163 , - 974 , - 1401 , - 1444 , - 1103 , - 378 , - 2725 , - 1232 , - 2811 , - 550 , - 1361 , - 1788 , - 1831 , - 1490 , - 765 , - 3112 , - 1619 , - 3198 , - 937 , - 1748 , - 2175 , - 2218 , - 1877 , - 1152 , - 43 , - 2006 , - 129 , - 1324 , - 2135 , - 2562 , - 2605 , - 2264 , - 1539 , - 430 , - 2393 , - 516 , - 1711 , - 2522 , - 2949 , - 2992 , - 2651 , - 1926 , - 817 , - 2780 , - 903 , - 2098 , - 2909 , - 3336 , - 3379 , - 3038 , - 2313 , - 1204 , - 3167 , - 1290 , - 2485 , - 3296 , - 267 , - 310 , - 3425 , - 2700 , - 1591 , - 98 , - 1677 , - 2872 , - 227 , - 654 , - 697 , - 356 , - 3087 , - 1978 , - 485 , - 2064 , - 3259 , - 614 , - 1041 , - 1084 , - 743 , - 18 , - 2365 , - 872 , - 2451 , - 190 , - 1001 , - 1428 , - 1471 , - 1130 , - 405 , - 2752 , - 1259 , - 2838 , - 577 , - 1388 , - 1815 , - 1858 , - 1517 , - 792 , - 3139 , - 1646 , - 3225 , - 964 , - 1775 , - 2202 , - 2245 , - 1904 , - 1179 , - 70 , - 2033 , - 156 , - 1351 , - 2162 , - 2589 , - 2632 , - 2291 , - 1566 , - 457 , - 2420 , - 543 , - 1738 , - 2549 , - 2976 , - 3019 , - 2678 , - 1953 , - 844 , - 2807 , - 930 , - 2125 , - 2936 , - 3363 , - 3406 , - 3065 , - 2340 , - 1231 , - 3194 , - 1317 , - 2512 , - 3323 , - 294 , - 337 , - 3452 , - 2727 , - 1618 , - 125 , - 1704 , - 2899 , - 254 , - 681 , - 724 , - 383 , - 3114 , - 2005 , - 512 , - 2091 , - 3286 , - 641 , - 1068 , - 1111 , - 770 , - 45 , - 2392 , - 899 , - 2478 , - 217 , - 1028 , - 1455 , - 1498 , - 1157 , - 432 , - 2779 , - 1286 , - 2865 , - 604 , - 1415 , - 1842 , - 1885 , - 1544 , - 819 , - 3166 , - 1673 , - 3252 , - 991 , - 1802 , - 2229 , - 2272 , - 1931 , - 1206 , - 97 , - 2060 , - 183 , - 1378 , - 2189 , - 2616 , - 2659 , - 2318 , - 1593 , - 484 , - 2447 , - 570 , - 1765 , - 2576 , - 3003 , - 3046 , - 2705 , - 1980 , - 871 , - 2834 , - 957 , - 2152 , - 2963 , - 3390 , - 3433 , - 3092 , - 2367 , - 1258 , - 3221 , - 1344 , - 2539 , - 3350 , - 321 , - 364 , - 23 , - 2754 , - 1645 , - 152 , - 1731 , - 2926 , - 281 , - 708 , - 751 , - 410 , - 3141 , - 2032 , - 539 , - 2118 , - 3313 , - 668 , - 1095 , - 1138 , - 797 , - 72 , - 2419 , - 926 , - 2505 , - 244 , - 1055 , - 1482 , - 1525 , - 1184 , - 459 , - 2806 , - 1313 , - 2892 , - 631 , - 1442 , - 1869 , - 1912 , - 1571 , - 846 , - 3193 , - 1700 , - 3279 , - 1018 , - 1829 , - 2256 , - 2299 , - 1958 , - 1233 , - 124 , - 2087 , - 210 , - 1405 , - 2216 , - 2643 , - 2686 , - 2345 , - 1620 , - 511 , - 2474 , - 597 , - 1792 , - 2603 , - 3030 , - 3073 , - 2732 , - 2007 , - 898 , - 2861 , - 984 , - 2179 , - 2990 , - 3417 , - 4 , - 3119 , - 2394 , - 1285 , - 3248 , - 1371 , - 2566 , - 3377 , - 348 , - 391 , - 50 , - 2781 , - 1672 , - 179 , - 1758 , - 2953 , - 308 , - 735 , - 778 , - 437 , - 3168 , - 2059 , - 566 , - 2145 , - 3340 , - 695 , - 1122 , - 1165 , - 824 , - 99 , - 2446 , - 953 , - 2532 , - 271 , - 1082 , - 1509 , - 1552 , - 1211 , - 486 , - 2833 , - 1340 , - 2919 , - 658 , - 1469 , - 1896 , - 1939 , - 1598 , - 873 , - 3220 , - 1727 , - 3306 , - 1045 , - 1856 , - 2283 , - 2326 , - 1985 , - 1260 , - 151 , - 2114 , - 237 , - 1432 , - 2243 , - 2670 , - 2713 , - 2372 , - 1647 , - 538 , - 2501 , - 624 , - 1819 , - 2630 , - 3057 , - 3100 , - 2759 , - 2034 , - 925 , - 2888 , - 1011 , - 2206 , - 3017 , - 3444 , - 31 , - 3146 , - 2421 , - 1312 , - 3275 , - 1398 , - 2593 , - 3404 , - 375 , - 418 , - 77 , - 2808 , - 1699 , - 206 , - 1785 , - 2980 , - 335 , - 762 , - 805 , - 464 , - 3195 , - 2086 , - 593 , - 2172 , - 3367 , - 722 , - 1149 , - 1192 , - 851 , - 126 , - 2473 , - 980 , - 2559 , - 298 , - 1109 , - 1536 , - 1579 , - 1238 , - 513 , - 2860 , - 1367 , - 2946 , - 685 , - 1496 , - 1923 , - 1966 , - 1625 , - 900 , - 3247 , - 1754 , - 3333 , - 1072 , - 1883 , - 2310 , - 2353 , - 2012 , - 1287 , - 178 , - 2141 , - 264 , - 1459 , - 2270 , - 2697 , - 2740 , - 2399 , - 1674 , - 565 , - 2528 , - 651 , - 1846 , - 2657 , - 3084 , - 3127 , - 2786 , - 2061 , - 952 , - 2915 , - 1038 , - 2233 , - 3044 , - 15 , - 58 , - 3173 , - 2448 , - 1339 , - 3302 , - 1425 , - 2620 , - 3431 , - 402 , - 445 , - 104 , - 2835 , - 1726 , - 233 , - 1812 , - 3007 , - 362 , - 789 , - 832 , - 491 , - 3222 , - 2113 , - 620 , - 2199 , - 3394 , - 749 , - 1176 , - 1219 , - 878 , - 153 , - 2500 , - 1007 , - 2586 , - 325 , - 1136 , - 1563 , - 1606 , - 1265 , - 540 , - 2887 , - 1394 , - 2973 , - 712 , - 1523 , - 1950 , - 1993 , - 1652 , - 927 , - 3274 , - 1781 , - 3360 , - 1099 , - 1910 , - 2337 , - 2380 , - 2039 , - 1314 , - 205 , - 2168 , - 291 , - 1486 , - 2297 , - 2724 , - 2767 , - 2426 , - 1701 , - 592 , - 2555 , - 678 , - 1873 , - 2684 , - 3111 , - 3154 , - 2813 , - 2088 , - 979 , - 2942 , - 1065 , - 2260 , - 3071 , - 42 , - 85 , - 3200 , - 2475 , - 1366 , - 3329 , - 1452 , - 2647 , - 2 , - 429 , - 472 , - 131 , - 2862 , - 1753 , - 260 , - 1839 , - 3034 , - 389 , - 816 , - 859 , - 518 , - 3249 , - 2140 , - 647 , - 2226 , - 3421 , - 776 , - 1203 , - 1246 , - 905 , - 180 , - 2527 , - 1034 , - 2613 , - 352 , - 1163 , - 1590 , - 1633 , - 1292 , - 567 , - 2914 , - 1421 , - 3000 , - 739 , - 1550 , - 1977 , - 2020 , - 1679 , - 954 , - 3301 , - 1808 , - 3387 , - 1126 , - 1937 , - 2364 , - 2407 , - 2066 , - 1341 , - 232 , - 2195 , - 318 , - 1513 , - 2324 , - 2751 , - 2794 , - 2453 , - 1728 , - 619 , - 2582 , - 705 , - 1900 , - 2711 , - 3138 , - 3181 , - 2840 , - 2115 , - 1006 , - 2969 , - 1092 , - 2287 , - 3098 , - 69 , - 112 , - 3227 , - 2502 , - 1393 , - 3356 , - 1479 , - 2674 , - 29 , - 456 , - 499 , - 158 , - 2889 , - 1780 , - 287 , - 1866 , - 3061 , - 416 , - 843 , - 886 , - 545 , - 3276 , - 2167 , - 674 , - 2253 , - 3448 , - 803 , - 1230 , - 1273 , - 932 , - 207 , - 2554 , - 1061 , - 2640 , - 379 , - 1190 , - 1617 , - 1660 , - 1319 , - 594 , - 2941 , - 1448 , - 3027 , - 766 , - 1577 , - 2004 , - 2047 , - 1706 , - 981 , - 3328 , - 1835 , - 3414 , - 1153 , - 1964 , - 2391 , - 2434 , - 2093 , - 1368 , - 259 , - 2222 , - 345 , - 1540 , - 2351 , - 2778 , - 2821 , - 2480 , - 1755 , - 646 , - 2609 , - 732 , - 1927 , - 2738 , - 3165 , - 3208 , - 2867 , - 2142 , - 1033 , - 2996 , - 1119 , - 2314 , - 3125 , - 96 , - 139 , - 3254 , - 2529 , - 1420 , - 3383 , - 1506 , - 2701 , - 56 , - 483 , - 526 , - 185 , - 2916 , - 1807 , - 314 , - 1893 , - 3088 , - 443 , - 870 , - 913 , - 572 , - 3303 , - 2194 , - 701 , - 2280 , - 19 , - 830 , - 1257 , - 1300 , - 959 , - 234 , - 2581 , - 1088 , - 2667 , - 406 , - 1217 , - 1644 , - 1687 , - 1346 , - 621 , - 2968 , - 1475 , - 3054 , - 793 , - 1604 , - 2031 , - 2074 , - 1733 , - 1008 , - 3355 , - 1862 , - 3441 , - 1180 , - 1991 , - 2418 , - 2461 , - 2120 , - 1395 , - 286 , - 2249 , - 372 , - 1567 , - 2378 , - 2805 , - 2848 , - 2507 , - 1782 , - 673 , - 2636 , - 759 , - 1954 , - 2765 , - 3192 , - 3235 , - 2894 , - 2169 , - 1060 , - 3023 , - 1146 , - 2341 , - 3152 , - 123 , - 166 , - 3281 , - 2556 , - 1447 , - 3410 , - 1533 , - 2728 , - 83 , - 510 , - 553 , - 212 , - 2943 , - 1834 , - 341 , - 1920 , - 3115 , - 470 , - 897 , - 940 , - 599 , - 3330 , - 2221 , - 728 , - 2307 , - 46 , - 857 , - 1284 , - 1327 , - 986 , - 261 , - 2608 , - 1115 , - 2694 , - 433 , - 1244 , - 1671 , - 1714 , - 1373 , - 648 , - 2995 , - 1502 , - 3081 , - 820 , - 1631 , - 2058 , - 2101 , - 1760 , - 1035 , - 3382 , - 1889 , - 12 , - 1207 , - 2018 , - 2445 , - 2488 , - 2147 , - 1422 , - 313 , - 2276 , - 399 , - 1594 , - 2405 , - 2832 , - 2875 , - 2534 , - 1809 , - 700 , - 2663 , - 786 , - 1981 , - 2792 , - 3219 , - 3262 , - 2921 , - 2196 , - 1087 , - 3050 , - 1173 , - 2368 , - 3179 , - 150 , - 193 , - 3308 , - 2583 , - 1474 , - 3437 , - 1560 , - 2755 , - 110 , - 537 , - 580 , - 239 , - 2970 , - 1861 , - 368 , - 1947 , - 3142 , - 497 , - 924 , - 967 , - 626 , - 3357 , - 2248 , - 755 , - 2334 , - 73 , - 884 , - 1311 , - 1354 , - 1013 , - 288 , - 2635 , - 1142 , - 2721 , - 460 , - 1271 , - 1698 , - 1741 , - 1400 , - 675 , - 3022 , - 1529 , - 3108 , - 847 , - 1658 , - 2085 , - 2128 , - 1787 , - 1062 , - 3409 , - 1916 , - 39 , - 1234 , - 2045 , - 2472 , - 2515 , - 2174 , - 1449 , - 340 , - 2303 , - 426 , - 1621 , - 2432 , - 2859 , - 2902 , - 2561 , - 1836 , - 727 , - 2690 , - 813 , - 2008 , - 2819 , - 3246 , - 3289 , - 2948 , - 2223 , - 1114 , - 3077 , - 1200 , - 2395 , - 3206 , - 177 , - 220 , - 3335 , - 2610 , - 1501 , - 8 , - 1587 , - 2782 , - 137 , - 564 , - 607 , - 266 , - 2997 , - 1888 , - 395 , - 1974 , - 3169 , - 524 , - 951 , - 994 , - 653 , - 3384 , - 2275 , - 782 , - 2361 , - 100 , - 911 , - 1338 , - 1381 , - 1040 , - 315 , - 2662 , - 1169 , - 2748 , - 487 , - 1298 , - 1725 , - 1768 , - 1427 , - 702 , - 3049 , - 1556 , - 3135 , - 874 , - 1685 , - 2112 , - 2155 , - 1814 , - 1089 , - 3436 , - 1943 , - 66 , - 1261 , - 2072 , - 2499 , - 2542 , - 2201 , - 1476 , - 367 , - 2330 , - 453 , - 1648 , - 2459 , - 2886 , - 2929 , - 2588 , - 1863 , - 754 , - 2717 , - 840 , - 2035 , - 2846 , - 3273 , - 3316 , - 2975 , - 2250 , - 1141 , - 3104 , - 1227 , - 2422 , - 3233 , - 204 , - 247 , - 3362 , - 2637 , - 1528 , - 35 , - 1614 , - 2809 , - 164 , - 591 , - 634 , - 293 , - 3024 , - 1915 , - 422 , - 2001 , - 3196 , - 551 , - 978 , - 1021 , - 680 , - 3411 , - 2302 , - 809 , - 2388 , - 127 , - 938 , - 1365 , - 1408 , - 1067 , - 342 , - 2689 , - 1196 , - 2775 , - 514 , - 1325 , - 1752 , - 1795 , - 1454 , - 729 , - 3076 , - 1583 , - 3162 , - 901 , - 1712 , - 2139 , - 2182 , - 1841 , - 1116 , - 7 , - 1970 , - 93 , - 1288 , - 2099 , - 2526 , - 2569 , - 2228 , - 1503 , - 394 , - 2357 , - 480 , - 1675 , - 2486 , - 2913 , - 2956 , - 2615 , - 1890 , - 781 , - 2744 , - 867 , - 2062 , - 2873 , - 3300 , - 3343 , - 3002 , - 2277 , - 1168 , - 3131 , - 1254 , - 2449 , - 3260 , - 231 , - 274 , - 3389 , - 2664 , - 1555 , - 62 , - 1641 , - 2836 , - 191 , - 618 , - 661 , - 320 , - 3051 , - 1942 , - 449 , - 2028 , - 3223 , - 578 , - 1005 , - 1048 , - 707 , - 3438 , - 2329 , - 836 , - 2415 , - 154 , - 965 , - 1392 , - 1435 , - 1094 , - 369 , - 2716 , - 1223 , - 2802 , - 541 , - 1352 , - 1779 , - 1822 , - 1481 , - 756 , - 3103 , - 1610 , - 3189 , - 928 , - 1739 , - 2166 , - 2209 , - 1868 , - 1143 , - 34 , - 1997 , - 120 , - 1315 , - 2126 , - 2553 , - 2596 , - 2255 , - 1530 , - 421 , - 2384 , - 507 , - 1702 , - 2513 , - 2940 , - 2983 , - 2642 , - 1917 , - 808 , - 2771 , - 894 , - 2089 , - 2900 , - 3327 , - 3370 , - 3029 , - 2304 , - 1195 , - 3158 , - 1281 , - 2476 , - 3287 , - 258 , - 301 , - 3416 , - 2691 , - 1582 , - 89 , - 1668 , - 2863 , - 218 , - 645 , - 688 , - 347 , - 3078 , - 1969 , - 476 , - 2055 , - 3250 , - 605 , - 1032 , - 1075 , - 734 , - 9 , - 2356 , - 863 , - 2442 , - 181 , - 992 , - 1419 , - 1462 , - 1121 , - 396 , - 2743 , - 1250 , - 2829 , - 568 , - 1379 , - 1806 , - 1849 , - 1508 , - 783 , - 3130 , - 1637 , - 3216 , - 955 , - 1766 , - 2193 , - 2236 , - 1895 , - 1170 , - 61 , - 2024 , - 147 , - 1342 , - 2153 , - 2580 , - 2623 , - 2282 , - 1557 , - 448 , - 2411 , - 534 , - 1729 , - 2540 , - 2967 , - 3010 , - 2669 , - 1944 , - 835 , - 2798 , - 921 , - 2116 , - 2927 , - 3354 , - 3397 , - 3056 , - 2331 , - 1222 , - 3185 , - 1308 , - 2503 , - 3314 , - 285 , - 328 , - 3443 , - 2718 , - 1609 , - 116 , - 1695 , - 2890 , - 245 , - 672 , - 715 , - 374 , - 3105 , - 1996 , - 503 , - 2082 , - 3277 , - 632 , - 1059 , - 1102 , - 761 , - 36 , - 2383 , - 890 , - 2469 , - 208 , - 1019 , - 1446 , - 1489 , - 1148 , - 423 , - 2770 , - 1277 , - 2856 , - 595 , - 1406 , - 1833 , - 1876 , - 1535 , - 810 , - 3157 , - 1664 , - 3243 , - 982 , - 1793 , - 2220 , - 2263 , - 1922 , - 1197 , - 88 , - 2051 , - 174 , - 1369 , - 2180 , - 2607 , - 2650 , - 2309 , - 1584 , - 475 , - 2438 , - 561 , - 1756 , - 2567 , - 2994 , - 3037 , - 2696 , - 1971 , - 862 , - 2825 , - 948 , - 2143 , - 2954 , - 3381 , - 3424 , - 3083 , - 2358 , - 1249 , - 3212 , - 1335 , - 2530 , - 3341 , - 312 , - 355 , - 14 , - 2745 , - 1636 , - 143 , - 1722 , - 2917 , - 272 , - 699 , - 742 , - 401 , - 3132 , - 2023 , - 530 , - 2109 , - 3304 , - 659 , - 1086 , - 1129 , - 788 , - 63 , - 2410 , - 917 , - 2496 , - 235 , - 1046 , - 1473 , - 1516 , - 1175 , - 450 , - 2797 , - 1304 , - 2883 , - 622 , - 1433 , - 1860 , - 1903 , - 1562 , - 837 , - 3184 , - 1691 , - 3270 , - 1009 , - 1820 , - 2247 , - 2290 , - 1949 , - 1224 , - 115 , - 2078 , - 201 , - 1396 , - 2207 , - 2634 , - 2677 , - 2336 , - 1611 , - 502 , - 2465 , - 588 , - 1783 , - 2594 , - 3021 , - 3064 , - 2723 , - 1998 , - 889 , - 2852 , - 975 , - 2170 , - 2981 , - 3408 , - 3451 , - 3110 , - 2385 , - 1276 , - 3239 , - 1362 , - 2557 , - 3368 , - 339 , - 382 , - 41 , - 2772 , - 1663 , - 170 , - 1749 , - 2944 , - 299 , - 726 , - 769 , - 428 , - 3159 , - 2050 , - 557 , - 2136 , - 3331 , - 686 , - 1113 , - 1156 , - 815 , - 90 , - 2437 , - 944 , - 2523 , - 262 , - 1073 , - 1500 , - 1543 , - 1202 , - 477 , - 2824 , - 1331 , - 2910 , - 649 , - 1460 , - 1887 , - 1930 , - 1589 , - 864 , - 3211 , - 1718 , - 3297 , - 1036 , - 1847 , - 2274 , - 2317 , - 1976 , - 1251 , - 142 , - 2105 , - 228 , - 1423 , - 2234 , - 2661 , - 2704 , - 2363 , - 1638 , - 529 , - 2492 , - 615 , - 1810 , - 2621 , - 3048 , - 3091 , - 2750 , - 2025 , - 916 , - 2879 , - 1002 , - 2197 , - 3008 , - 3435 , - 22 , - 3137 , - 2412 , - 1303 , - 3266 , - 1389 , - 2584 , - 3395 , - 366 , - 409 , - 68 , - 2799 , - 1690 , - 197 , - 1776 , - 2971 , - 326 , - 753 , - 796 , - 455 , - 3186 , - 2077 , - 584 , - 2163 , - 3358 , - 713 , - 1140 , - 1183 , - 842 , - 117 , - 2464 , - 971 , - 2550 , - 289 , - 1100 , - 1527 , - 1570 , - 1229 , - 504 , - 2851 , - 1358 , - 2937 , - 676 , - 1487 , - 1914 , - 1957 , - 1616 , - 891 , - 3238 , - 1745 , - 3324 , - 1063 , - 1874 , - 2301 , - 2344 , - 2003 , - 1278 , - 169 , - 2132 , - 255 , - 1450 , - 2261 , - 2688 , - 2731 , - 2390 , - 1665 , - 556 , - 2519 , - 642 , - 1837 , - 2648 , - 3075 , - 3118 , - 2777 , - 2052 , - 943 , - 2906 , - 1029 , - 2224 , - 3035 , - 6 , - 49 , - 3164 , - 2439 , - 1330 , - 3293 , - 1416 , - 2611 , - 3422 , - 393 , - 436 , - 95 , - 2826 , - 1717 , - 224 , - 1803 , - 2998 , - 353 , - 780 , - 823 , - 482 , - 3213 , - 2104 , - 611 , - 2190 , - 3385 , - 740 , - 1167 , - 1210 , - 869 , - 144 , - 2491 , - 998 , - 2577 , - 316 , - 1127 , - 1554 , - 1597 , - 1256 , - 531 , - 2878 , - 1385 , - 2964 , - 703 , - 1514 , - 1941 , - 1984 , - 1643 , - 918 , - 3265 , - 1772 , - 3351 , - 1090 , - 1901 , - 2328 , - 2371 , - 2030 , - 1305 , - 196 , - 2159 , - 282 , - 1477 , - 2288 , - 2715 , - 2758 , - 2417 , - 1692 , - 583 , - 2546 , - 669 , - 1864 , - 2675 , - 3102 , - 3145 , - 2804 , - 2079 , - 970 , - 2933 , - 1056 , - 2251 , - 3062 , - 33 , - 76 , - 3191 , - 2466 , - 1357 , - 3320 , - 1443 , - 2638 , - 3449 , - 420 , - 463 , - 122 , - 2853 , - 1744 , - 251 , - 1830 , - 3025 , - 380 , - 807 , - 850 , - 509 , - 3240 , - 2131 , - 638 , - 2217 , - 3412 , - 767 , - 1194 , - 1237 , - 896 , - 171 , - 2518 , - 1025 , - 2604 , - 343 , - 1154 , - 1581 , - 1624 , - 1283 , - 558 , - 2905 , - 1412 , - 2991 , - 730 , - 1541 , - 1968 , - 2011 , - 1670 , - 945 , - 3292 , - 1799 , - 3378 , - 1117 , - 1928 , - 2355 , - 2398 , - 2057 , - 1332 , - 223 , - 2186 , - 309 , - 1504 , - 2315 , - 2742 , - 2785 , - 2444 , - 1719 , - 610 , - 2573 , - 696 , - 1891 , - 2702 , - 3129 , - 3172 , - 2831 , - 2106 , - 997 , - 2960 , - 1083 , - 2278 , - 3089 , - 60 , - 103 , - 3218 , - 2493 , - 1384 , - 3347 , - 1470 , - 2665 , - 20 , - 447 , - 490 , - 149 , - 2880 , - 1771 , - 278 , - 1857 , - 3052 , - 407 , - 834 , - 877 , - 536 , - 3267 , - 2158 , - 665 , - 2244 , - 3439 , - 794 , - 1221 , - 1264 , - 923 , - 198 , - 2545 , - 1052 , - 2631 , - 370 , - 1181 , - 1608 , - 1651 , - 1310 , - 585 , - 2932 , - 1439 , - 3018 , - 757 , - 1568 , - 1995 , - 2038 , - 1697 , - 972 , - 3319 , - 1826 , - 3405 , - 1144 , - 1955 , - 2382 , - 2425 , - 2084 , - 1359 , - 250 , - 2213 , - 336 , - 1531 , - 2342 , - 2769 , - 2812 , - 2471 , - 1746 , - 637 , - 2600 , - 723 , - 1918 , - 2729 , - 3156 , - 3199 , - 2858 , - 2133 , - 1024 , - 2987 , - 1110 , - 2305 , - 3116 , - 87 , - 130 , - 3245 , - 2520 , - 1411 , - 3374 , - 1497 , - 2692 , - 47 , - 474 , - 517 , - 176 , - 2907 , - 1798 , - 305 , - 1884 , - 3079 , - 434 , - 861 , - 904 , - 563 , - 3294 , - 2185 , - 692 , - 2271 , - 10 , - 821 , - 1248 , - 1291 , - 950 , - 225 , - 2572 , - 1079 , - 2658 , - 397 , - 1208 , - 1635 , - 1678 , - 1337 , - 612 , - 2959 , - 1466 , - 3045 , - 784 , - 1595 , - 2022 , - 2065 , - 1724 , - 999 , - 3346 , - 1853 , - 3432 , - 1171 , - 1982 , - 2409 , - 2452 , - 2111 , - 1386 , - 277 , - 2240 , - 363 , - 1558 , - 2369 , - 2796 , - 2839 , - 2498 , - 1773 , - 664 , - 2627 , - 750 , - 1945 , - 2756 , - 3183 , - 3226 , - 2885 , - 2160 , - 1051 , - 3014 , - 1137 , - 2332 , - 3143 , - 114 , - 157 , - 3272 , - 2547 , - 1438 , - 3401 , - 1524 , - 2719 , - 74 , - 501 , - 544 , - 203 , - 2934 , - 1825 , - 332 , - 1911 , - 3106 , - 461 , - 888 , - 931 , - 590 , - 3321 , - 2212 , - 719 , - 2298 , - 37 , - 848 , - 1275 , - 1318 , - 977 , - 252 , - 2599 , - 1106 , - 2685 , - 424 , - 1235 , - 1662 , - 1705 , - 1364 , - 639 , - 2986 , - 1493 , - 3072 , - 811 , - 1622 , - 2049 , - 2092 , - 1751 , - 1026 , - 3373 , - 1880 , - 3 , - 1198 , - 2009 , - 2436 , - 2479 , - 2138 , - 1413 , - 304 , - 2267 , - 390 , - 1585 , - 2396 , - 2823 , - 2866 , - 2525 , - 1800 , - 691 , - 2654 , - 777 , - 1972 , - 2783 , - 3210 , - 3253 , - 2912 , - 2187 , - 1078 , - 3041 , - 1164 , - 2359 , - 3170 , - 141 , - 184 , - 3299 , - 2574 , - 1465 , - 3428 , - 1551 , - 2746 , - 101 , - 528 , - 571 , - 230 , - 2961 , - 1852 , - 359 , - 1938 , - 3133 , - 488 , - 915 , - 958 , - 617 , - 3348 , - 2239 , - 746 , - 2325 , - 64 , - 875 , - 1302 , - 1345 , - 1004 , - 279 , - 2626 , - 1133 , - 2712 , - 451 , - 1262 , - 1689 , - 1732 , - 1391 , - 666 , - 3013 , - 1520 , - 3099 , - 838 , - 1649 , - 2076 , - 2119 , - 1778 , - 1053 , - 3400 , - 1907 , - 30 , - 1225 , - 2036 , - 2463 , - 2506 , - 2165 , - 1440 , - 331 , - 2294 , - 417 , - 1612 , - 2423 , - 2850 , - 2893 , - 2552 , - 1827 , - 718 , - 2681 , - 804 , - 1999 , - 2810 , - 3237 , - 3280 , - 2939 , - 2214 , - 1105 , - 3068 , - 1191 , - 2386 , - 3197 , - 168 , - 211 , - 3326 , - 2601 , - 1492 , - 3455 , - 1578 , - 2773 , - 128 , - 555 , - 598 , - 257 , - 2988 , - 1879 , - 386 , - 1965 , - 3160 , - 515 , - 942 , - 985 , - 644 , - 3375 , - 2266 , - 773 , - 2352 , - 91 , - 902 , - 1329 , - 1372 , - 1031 , - 306 , - 2653 , - 1160 , - 2739 , - 478 , - 1289 , - 1716 , - 1759 , - 1418 , - 693 , - 3040 , - 1547 , - 3126 , - 865 , - 1676 , - 2103 , - 2146 , - 1805 , - 1080 , - 3427 , - 1934 , - 57 , - 1252 , - 2063 , - 2490 , - 2533 , - 2192 , - 1467 , - 358 , - 2321 , - 444 , - 1639 , - 2450 , - 2877 , - 2920 , - 2579 , - 1854 , - 745 , - 2708 , - 831 , - 2026 , - 2837 , - 3264 , - 3307 , - 2966 , - 2241 , - 1132 , - 3095 , - 1218 , - 2413 , - 3224 , - 195 , - 238 , - 3353 , - 2628 , - 1519 , - 26 , - 1605 , - 2800 , - 155 , - 582 , - 625 , - 284 , - 3015 , - 1906 , - 413 , - 1992 , - 3187 , - 542 , - 969 , - 1012 , - 671 , - 3402 , - 2293 , - 800 , - 2379 , - 118 , - 929 , - 1356 , - 1399 , - 1058 , - 333 , - 2680 , - 1187 , - 2766 , - 505 , - 1316 , - 1743 , - 1786 , - 1445 , - 720 , - 3067 , - 1574 , - 3153 , - 892 , - 1703 , - 2130 , - 2173 , - 1832 , - 1107 , - 3454 , - 1961 , - 84 , - 1279 , - 2090 , - 2517 , - 2560 , - 2219 , - 1494 , - 385 , - 2348 , - 471 , - 1666 , - 2477 , - 2904 , - 2947 , - 2606 , - 1881 , - 772 , - 2735 , - 858 , - 2053 , - 2864 , - 3291 , - 3334 , - 2993 , - 2268 , - 1159 , - 3122 , - 1245 , - 2440 , - 3251 , - 222 , - 265 , - 3380 , - 2655 , - 1546 , - 53 , - 1632 , - 2827 , - 182 , - 609 , - 652 , - 311 , - 3042 , - 1933 , - 440 , - 2019 , - 3214 , - 569 , - 996 , - 1039 , - 698 , - 3429 , - 2320 , - 827 , - 2406 , - 145 , - 956 , - 1383 , - 1426 , - 1085 , - 360 , - 2707 , - 1214 , - 2793 , - 532 , - 1343 , - 1770 , - 1813 , - 1472 , - 747 , - 3094 , - 1601 , - 3180 , - 919 , - 1730 , - 2157 , - 2200 , - 1859 , - 1134 , - 25 , - 1988 , - 111 , - 1306 , - 2117 , - 2544 , - 2587 , - 2246 , - 1521 , - 412 , - 2375 , - 498 , - 1693 , - 2504 , - 2931 , - 2974 , - 2633 , - 1908 , - 799 , - 2762 , - 885 , - 2080 , - 2891 , - 3318 , - 3361 , - 3020 , - 2295 , - 1186 , - 3149 , - 1272 , - 2467 , - 3278 , - 249 , - 292 , - 3407 , - 2682 , - 1573 , - 80 , - 1659 , - 2854 , - 209 , - 636 , - 679 , - 338 , - 3069 , - 1960 , - 467 , - 2046 , - 3241 , - 596 , - 1023 , - 1066 , - 725 , - 0 , - 773 , - 1106 , - 999 , - 452 , - 2985 , - 1558 , - 3211 , - 904 , - 1677 , - 2010 , - 1903 , - 1356 , - 369 , - 2462 , - 595 , - 1808 , - 2581 , - 2914 , - 2807 , - 2260 , - 1273 , - 3366 , - 1499 , - 2712 , - 3485 , - 298 , - 191 , - 3164 , - 2177 , - 750 , - 2403 , - 96 , - 869 , - 1202 , - 1095 , - 548 , - 3081 , - 1654 , - 3307 , - 1000 , - 1773 , - 2106 , - 1999 , - 1452 , - 465 , - 2558 , - 691 , - 1904 , - 2677 , - 3010 , - 2903 , - 2356 , - 1369 , - 3462 , - 1595 , - 2808 , - 61 , - 394 , - 287 , - 3260 , - 2273 , - 846 , - 2499 , - 192 , - 965 , - 1298 , - 1191 , - 644 , - 3177 , - 1750 , - 3403 , - 1096 , - 1869 , - 2202 , - 2095 , - 1548 , - 561 , - 2654 , - 787 , - 2000 , - 2773 , - 3106 , - 2999 , - 2452 , - 1465 , - 38 , - 1691 , - 2904 , - 157 , - 490 , - 383 , - 3356 , - 2369 , - 942 , - 2595 , - 288 , - 1061 , - 1394 , - 1287 , - 740 , - 3273 , - 1846 , - 3499 , - 1192 , - 1965 , - 2298 , - 2191 , - 1644 , - 657 , - 2750 , - 883 , - 2096 , - 2869 , - 3202 , - 3095 , - 2548 , - 1561 , - 134 , - 1787 , - 3000 , - 253 , - 586 , - 479 , - 3452 , - 2465 , - 1038 , - 2691 , - 384 , - 1157 , - 1490 , - 1383 , - 836 , - 3369 , - 1942 , - 75 , - 1288 , - 2061 , - 2394 , - 2287 , - 1740 , - 753 , - 2846 , - 979 , - 2192 , - 2965 , - 3298 , - 3191 , - 2644 , - 1657 , - 230 , - 1883 , - 3096 , - 349 , - 682 , - 575 , - 28 , - 2561 , - 1134 , - 2787 , - 480 , - 1253 , - 1586 , - 1479 , - 932 , - 3465 , - 2038 , - 171 , - 1384 , - 2157 , - 2490 , - 2383 , - 1836 , - 849 , - 2942 , - 1075 , - 2288 , - 3061 , - 3394 , - 3287 , - 2740 , - 1753 , - 326 , - 1979 , - 3192 , - 445 , - 778 , - 671 , - 124 , - 2657 , - 1230 , - 2883 , - 576 , - 1349 , - 1682 , - 1575 , - 1028 , - 41 , - 2134 , - 267 , - 1480 , - 2253 , - 2586 , - 2479 , - 1932 , - 945 , - 3038 , - 1171 , - 2384 , - 3157 , - 3490 , - 3383 , - 2836 , - 1849 , - 422 , - 2075 , - 3288 , - 541 , - 874 , - 767 , - 220 , - 2753 , - 1326 , - 2979 , - 672 , - 1445 , - 1778 , - 1671 , - 1124 , - 137 , - 2230 , - 363 , - 1576 , - 2349 , - 2682 , - 2575 , - 2028 , - 1041 , - 3134 , - 1267 , - 2480 , - 3253 , - 66 , - 3479 , - 2932 , - 1945 , - 518 , - 2171 , - 3384 , - 637 , - 970 , - 863 , - 316 , - 2849 , - 1422 , - 3075 , - 768 , - 1541 , - 1874 , - 1767 , - 1220 , - 233 , - 2326 , - 459 , - 1672 , - 2445 , - 2778 , - 2671 , - 2124 , - 1137 , - 3230 , - 1363 , - 2576 , - 3349 , - 162 , - 55 , - 3028 , - 2041 , - 614 , - 2267 , - 3480 , - 733 , - 1066 , - 959 , - 412 , - 2945 , - 1518 , - 3171 , - 864 , - 1637 , - 1970 , - 1863 , - 1316 , - 329 , - 2422 , - 555 , - 1768 , - 2541 , - 2874 , - 2767 , - 2220 , - 1233 , - 3326 , - 1459 , - 2672 , - 3445 , - 258 , - 151 , - 3124 , - 2137 , - 710 , - 2363 , - 56 , - 829 , - 1162 , - 1055 , - 508 , - 3041 , - 1614 , - 3267 , - 960 , - 1733 , - 2066 , - 1959 , - 1412 , - 425 , - 2518 , - 651 , - 1864 , - 2637 , - 2970 , - 2863 , - 2316 , - 1329 , - 3422 , - 1555 , - 2768 , - 21 , - 354 , - 247 , - 3220 , - 2233 , - 806 , - 2459 , - 152 , - 925 , - 1258 , - 1151 , - 604 , - 3137 , - 1710 , - 3363 , - 1056 , - 1829 , - 2162 , - 2055 , - 1508 , - 521 , - 2614 , - 747 , - 1960 , - 2733 , - 3066 , - 2959 , - 2412 , - 1425 , - 3518 , - 1651 , - 2864 , - 117 , - 450 , - 343 , - 3316 , - 2329 , - 902 , - 2555 , - 248 , - 1021 , - 1354 , - 1247 , - 700 , - 3233 , - 1806 , - 3459 , - 1152 , - 1925 , - 2258 , - 2151 , - 1604 , - 617 , - 2710 , - 843 , - 2056 , - 2829 , - 3162 , - 3055 , - 2508 , - 1521 , - 94 , - 1747 , - 2960 , - 213 , - 546 , - 439 , - 3412 , - 2425 , - 998 , - 2651 , - 344 , - 1117 , - 1450 , - 1343 , - 796 , - 3329 , - 1902 , - 35 , - 1248 , - 2021 , - 2354 , - 2247 , - 1700 , - 713 , - 2806 , - 939 , - 2152 , - 2925 , - 3258 , - 3151 , - 2604 , - 1617 , - 190 , - 1843 , - 3056 , - 309 , - 642 , - 535 , - 3508 , - 2521 , - 1094 , - 2747 , - 440 , - 1213 , - 1546 , - 1439 , - 892 , - 3425 , - 1998 , - 131 , - 1344 , - 2117 , - 2450 , - 2343 , - 1796 , - 809 , - 2902 , - 1035 , - 2248 , - 3021 , - 3354 , - 3247 , - 2700 , - 1713 , - 286 , - 1939 , - 3152 , - 405 , - 738 , - 631 , - 84 , - 2617 , - 1190 , - 2843 , - 536 , - 1309 , - 1642 , - 1535 , - 988 , - 1 , - 2094 , - 227 , - 1440 , - 2213 , - 2546 , - 2439 , - 1892 , - 905 , - 2998 , - 1131 , - 2344 , - 3117 , - 3450 , - 3343 , - 2796 , - 1809 , - 382 , - 2035 , - 3248 , - 501 , - 834 , - 727 , - 180 , - 2713 , - 1286 , - 2939 , - 632 , - 1405 , - 1738 , - 1631 , - 1084 , - 97 , - 2190 , - 323 , - 1536 , - 2309 , - 2642 , - 2535 , - 1988 , - 1001 , - 3094 , - 1227 , - 2440 , - 3213 , - 26 , - 3439 , - 2892 , - 1905 , - 478 , - 2131 , - 3344 , - 597 , - 930 , - 823 , - 276 , - 2809 , - 1382 , - 3035 , - 728 , - 1501 , - 1834 , - 1727 , - 1180 , - 193 , - 2286 , - 419 , - 1632 , - 2405 , - 2738 , - 2631 , - 2084 , - 1097 , - 3190 , - 1323 , - 2536 , - 3309 , - 122 , - 15 , - 2988 , - 2001 , - 574 , - 2227 , - 3440 , - 693 , - 1026 , - 919 , - 372 , - 2905 , - 1478 , - 3131 , - 824 , - 1597 , - 1930 , - 1823 , - 1276 , - 289 , - 2382 , - 515 , - 1728 , - 2501 , - 2834 , - 2727 , - 2180 , - 1193 , - 3286 , - 1419 , - 2632 , - 3405 , - 218 , - 111 , - 3084 , - 2097 , - 670 , - 2323 , - 16 , - 789 , - 1122 , - 1015 , - 468 , - 3001 , - 1574 , - 3227 , - 920 , - 1693 , - 2026 , - 1919 , - 1372 , - 385 , - 2478 , - 611 , - 1824 , - 2597 , - 2930 , - 2823 , - 2276 , - 1289 , - 3382 , - 1515 , - 2728 , - 3501 , - 314 , - 207 , - 3180 , - 2193 , - 766 , - 2419 , - 112 , - 885 , - 1218 , - 1111 , - 564 , - 3097 , - 1670 , - 3323 , - 1016 , - 1789 , - 2122 , - 2015 , - 1468 , - 481 , - 2574 , - 707 , - 1920 , - 2693 , - 3026 , - 2919 , - 2372 , - 1385 , - 3478 , - 1611 , - 2824 , - 77 , - 410 , - 303 , - 3276 , - 2289 , - 862 , - 2515 , - 208 , - 981 , - 1314 , - 1207 , - 660 , - 3193 , - 1766 , - 3419 , - 1112 , - 1885 , - 2218 , - 2111 , - 1564 , - 577 , - 2670 , - 803 , - 2016 , - 2789 , - 3122 , - 3015 , - 2468 , - 1481 , - 54 , - 1707 , - 2920 , - 173 , - 506 , - 399 , - 3372 , - 2385 , - 958 , - 2611 , - 304 , - 1077 , - 1410 , - 1303 , - 756 , - 3289 , - 1862 , - 3515 , - 1208 , - 1981 , - 2314 , - 2207 , - 1660 , - 673 , - 2766 , - 899 , - 2112 , - 2885 , - 3218 , - 3111 , - 2564 , - 1577 , - 150 , - 1803 , - 3016 , - 269 , - 602 , - 495 , - 3468 , - 2481 , - 1054 , - 2707 , - 400 , - 1173 , - 1506 , - 1399 , - 852 , - 3385 , - 1958 , - 91 , - 1304 , - 2077 , - 2410 , - 2303 , - 1756 , - 769 , - 2862 , - 995 , - 2208 , - 2981 , - 3314 , - 3207 , - 2660 , - 1673 , - 246 , - 1899 , - 3112 , - 365 , - 698 , - 591 , - 44 , - 2577 , - 1150 , - 2803 , - 496 , - 1269 , - 1602 , - 1495 , - 948 , - 3481 , - 2054 , - 187 , - 1400 , - 2173 , - 2506 , - 2399 , - 1852 , - 865 , - 2958 , - 1091 , - 2304 , - 3077 , - 3410 , - 3303 , - 2756 , - 1769 , - 342 , - 1995 , - 3208 , - 461 , - 794 , - 687 , - 140 , - 2673 , - 1246 , - 2899 , - 592 , - 1365 , - 1698 , - 1591 , - 1044 , - 57 , - 2150 , - 283 , - 1496 , - 2269 , - 2602 , - 2495 , - 1948 , - 961 , - 3054 , - 1187 , - 2400 , - 3173 , - 3506 , - 3399 , - 2852 , - 1865 , - 438 , - 2091 , - 3304 , - 557 , - 890 , - 783 , - 236 , - 2769 , - 1342 , - 2995 , - 688 , - 1461 , - 1794 , - 1687 , - 1140 , - 153 , - 2246 , - 379 , - 1592 , - 2365 , - 2698 , - 2591 , - 2044 , - 1057 , - 3150 , - 1283 , - 2496 , - 3269 , - 82 , - 3495 , - 2948 , - 1961 , - 534 , - 2187 , - 3400 , - 653 , - 986 , - 879 , - 332 , - 2865 , - 1438 , - 3091 , - 784 , - 1557 , - 1890 , - 1783 , - 1236 , - 249 , - 2342 , - 475 , - 1688 , - 2461 , - 2794 , - 2687 , - 2140 , - 1153 , - 3246 , - 1379 , - 2592 , - 3365 , - 178 , - 71 , - 3044 , - 2057 , - 630 , - 2283 , - 3496 , - 749 , - 1082 , - 975 , - 428 , - 2961 , - 1534 , - 3187 , - 880 , - 1653 , - 1986 , - 1879 , - 1332 , - 345 , - 2438 , - 571 , - 1784 , - 2557 , - 2890 , - 2783 , - 2236 , - 1249 , - 3342 , - 1475 , - 2688 , - 3461 , - 274 , - 167 , - 3140 , - 2153 , - 726 , - 2379 , - 72 , - 845 , - 1178 , - 1071 , - 524 , - 3057 , - 1630 , - 3283 , - 976 , - 1749 , - 2082 , - 1975 , - 1428 , - 441 , - 2534 , - 667 , - 1880 , - 2653 , - 2986 , - 2879 , - 2332 , - 1345 , - 3438 , - 1571 , - 2784 , - 37 , - 370 , - 263 , - 3236 , - 2249 , - 822 , - 2475 , - 168 , - 941 , - 1274 , - 1167 , - 620 , - 3153 , - 1726 , - 3379 , - 1072 , - 1845 , - 2178 , - 2071 , - 1524 , - 537 , - 2630 , - 763 , - 1976 , - 2749 , - 3082 , - 2975 , - 2428 , - 1441 , - 14 , - 1667 , - 2880 , - 133 , - 466 , - 359 , - 3332 , - 2345 , - 918 , - 2571 , - 264 , - 1037 , - 1370 , - 1263 , - 716 , - 3249 , - 1822 , - 3475 , - 1168 , - 1941 , - 2274 , - 2167 , - 1620 , - 633 , - 2726 , - 859 , - 2072 , - 2845 , - 3178 , - 3071 , - 2524 , - 1537 , - 110 , - 1763 , - 2976 , - 229 , - 562 , - 455 , - 3428 , - 2441 , - 1014 , - 2667 , - 360 , - 1133 , - 1466 , - 1359 , - 812 , - 3345 , - 1918 , - 51 , - 1264 , - 2037 , - 2370 , - 2263 , - 1716 , - 729 , - 2822 , - 955 , - 2168 , - 2941 , - 3274 , - 3167 , - 2620 , - 1633 , - 206 , - 1859 , - 3072 , - 325 , - 658 , - 551 , - 4 , - 2537 , - 1110 , - 2763 , - 456 , - 1229 , - 1562 , - 1455 , - 908 , - 3441 , - 2014 , - 147 , - 1360 , - 2133 , - 2466 , - 2359 , - 1812 , - 825 , - 2918 , - 1051 , - 2264 , - 3037 , - 3370 , - 3263 , - 2716 , - 1729 , - 302 , - 1955 , - 3168 , - 421 , - 754 , - 647 , - 100 , - 2633 , - 1206 , - 2859 , - 552 , - 1325 , - 1658 , - 1551 , - 1004 , - 17 , - 2110 , - 243 , - 1456 , - 2229 , - 2562 , - 2455 , - 1908 , - 921 , - 3014 , - 1147 , - 2360 , - 3133 , - 3466 , - 3359 , - 2812 , - 1825 , - 398 , - 2051 , - 3264 , - 517 , - 850 , - 743 , - 196 , - 2729 , - 1302 , - 2955 , - 648 , - 1421 , - 1754 , - 1647 , - 1100 , - 113 , - 2206 , - 339 , - 1552 , - 2325 , - 2658 , - 2551 , - 2004 , - 1017 , - 3110 , - 1243 , - 2456 , - 3229 , - 42 , - 3455 , - 2908 , - 1921 , - 494 , - 2147 , - 3360 , - 613 , - 946 , - 839 , - 292 , - 2825 , - 1398 , - 3051 , - 744 , - 1517 , - 1850 , - 1743 , - 1196 , - 209 , - 2302 , - 435 , - 1648 , - 2421 , - 2754 , - 2647 , - 2100 , - 1113 , - 3206 , - 1339 , - 2552 , - 3325 , - 138 , - 31 , - 3004 , - 2017 , - 590 , - 2243 , - 3456 , - 709 , - 1042 , - 935 , - 388 , - 2921 , - 1494 , - 3147 , - 840 , - 1613 , - 1946 , - 1839 , - 1292 , - 305 , - 2398 , - 531 , - 1744 , - 2517 , - 2850 , - 2743 , - 2196 , - 1209 , - 3302 , - 1435 , - 2648 , - 3421 , - 234 , - 127 , - 3100 , - 2113 , - 686 , - 2339 , - 32 , - 805 , - 1138 , - 1031 , - 484 , - 3017 , - 1590 , - 3243 , - 936 , - 1709 , - 2042 , - 1935 , - 1388 , - 401 , - 2494 , - 627 , - 1840 , - 2613 , - 2946 , - 2839 , - 2292 , - 1305 , - 3398 , - 1531 , - 2744 , - 3517 , - 330 , - 223 , - 3196 , - 2209 , - 782 , - 2435 , - 128 , - 901 , - 1234 , - 1127 , - 580 , - 3113 , - 1686 , - 3339 , - 1032 , - 1805 , - 2138 , - 2031 , - 1484 , - 497 , - 2590 , - 723 , - 1936 , - 2709 , - 3042 , - 2935 , - 2388 , - 1401 , - 3494 , - 1627 , - 2840 , - 93 , - 426 , - 319 , - 3292 , - 2305 , - 878 , - 2531 , - 224 , - 997 , - 1330 , - 1223 , - 676 , - 3209 , - 1782 , - 3435 , - 1128 , - 1901 , - 2234 , - 2127 , - 1580 , - 593 , - 2686 , - 819 , - 2032 , - 2805 , - 3138 , - 3031 , - 2484 , - 1497 , - 70 , - 1723 , - 2936 , - 189 , - 522 , - 415 , - 3388 , - 2401 , - 974 , - 2627 , - 320 , - 1093 , - 1426 , - 1319 , - 772 , - 3305 , - 1878 , - 11 , - 1224 , - 1997 , - 2330 , - 2223 , - 1676 , - 689 , - 2782 , - 915 , - 2128 , - 2901 , - 3234 , - 3127 , - 2580 , - 1593 , - 166 , - 1819 , - 3032 , - 285 , - 618 , - 511 , - 3484 , - 2497 , - 1070 , - 2723 , - 416 , - 1189 , - 1522 , - 1415 , - 868 , - 3401 , - 1974 , - 107 , - 1320 , - 2093 , - 2426 , - 2319 , - 1772 , - 785 , - 2878 , - 1011 , - 2224 , - 2997 , - 3330 , - 3223 , - 2676 , - 1689 , - 262 , - 1915 , - 3128 , - 381 , - 714 , - 607 , - 60 , - 2593 , - 1166 , - 2819 , - 512 , - 1285 , - 1618 , - 1511 , - 964 , - 3497 , - 2070 , - 203 , - 1416 , - 2189 , - 2522 , - 2415 , - 1868 , - 881 , - 2974 , - 1107 , - 2320 , - 3093 , - 3426 , - 3319 , - 2772 , - 1785 , - 358 , - 2011 , - 3224 , - 477 , - 810 , - 703 , - 156 , - 2689 , - 1262 , - 2915 , - 608 , - 1381 , - 1714 , - 1607 , - 1060 , - 73 , - 2166 , - 299 , - 1512 , - 2285 , - 2618 , - 2511 , - 1964 , - 977 , - 3070 , - 1203 , - 2416 , - 3189 , - 2 , - 3415 , - 2868 , - 1881 , - 454 , - 2107 , - 3320 , - 573 , - 906 , - 799 , - 252 , - 2785 , - 1358 , - 3011 , - 704 , - 1477 , - 1810 , - 1703 , - 1156 , - 169 , - 2262 , - 395 , - 1608 , - 2381 , - 2714 , - 2607 , - 2060 , - 1073 , - 3166 , - 1299 , - 2512 , - 3285 , - 98 , - 3511 , - 2964 , - 1977 , - 550 , - 2203 , - 3416 , - 669 , - 1002 , - 895 , - 348 , - 2881 , - 1454 , - 3107 , - 800 , - 1573 , - 1906 , - 1799 , - 1252 , - 265 , - 2358 , - 491 , - 1704 , - 2477 , - 2810 , - 2703 , - 2156 , - 1169 , - 3262 , - 1395 , - 2608 , - 3381 , - 194 , - 87 , - 3060 , - 2073 , - 646 , - 2299 , - 3512 , - 765 , - 1098 , - 991 , - 444 , - 2977 , - 1550 , - 3203 , - 896 , - 1669 , - 2002 , - 1895 , - 1348 , - 361 , - 2454 , - 587 , - 1800 , - 2573 , - 2906 , - 2799 , - 2252 , - 1265 , - 3358 , - 1491 , - 2704 , - 3477 , - 290 , - 183 , - 3156 , - 2169 , - 742 , - 2395 , - 88 , - 861 , - 1194 , - 1087 , - 540 , - 3073 , - 1646 , - 3299 , - 992 , - 1765 , - 2098 , - 1991 , - 1444 , - 457 , - 2550 , - 683 , - 1896 , - 2669 , - 3002 , - 2895 , - 2348 , - 1361 , - 3454 , - 1587 , - 2800 , - 53 , - 386 , - 279 , - 3252 , - 2265 , - 838 , - 2491 , - 184 , - 957 , - 1290 , - 1183 , - 636 , - 3169 , - 1742 , - 3395 , - 1088 , - 1861 , - 2194 , - 2087 , - 1540 , - 553 , - 2646 , - 779 , - 1992 , - 2765 , - 3098 , - 2991 , - 2444 , - 1457 , - 30 , - 1683 , - 2896 , - 149 , - 482 , - 375 , - 3348 , - 2361 , - 934 , - 2587 , - 280 , - 1053 , - 1386 , - 1279 , - 732 , - 3265 , - 1838 , - 3491 , - 1184 , - 1957 , - 2290 , - 2183 , - 1636 , - 649 , - 2742 , - 875 , - 2088 , - 2861 , - 3194 , - 3087 , - 2540 , - 1553 , - 126 , - 1779 , - 2992 , - 245 , - 578 , - 471 , - 3444 , - 2457 , - 1030 , - 2683 , - 376 , - 1149 , - 1482 , - 1375 , - 828 , - 3361 , - 1934 , - 67 , - 1280 , - 2053 , - 2386 , - 2279 , - 1732 , - 745 , - 2838 , - 971 , - 2184 , - 2957 , - 3290 , - 3183 , - 2636 , - 1649 , - 222 , - 1875 , - 3088 , - 341 , - 674 , - 567 , - 20 , - 2553 , - 1126 , - 2779 , - 472 , - 1245 , - 1578 , - 1471 , - 924 , - 3457 , - 2030 , - 163 , - 1376 , - 2149 , - 2482 , - 2375 , - 1828 , - 841 , - 2934 , - 1067 , - 2280 , - 3053 , - 3386 , - 3279 , - 2732 , - 1745 , - 318 , - 1971 , - 3184 , - 437 , - 770 , - 663 , - 116 , - 2649 , - 1222 , - 2875 , - 568 , - 1341 , - 1674 , - 1567 , - 1020 , - 33 , - 2126 , - 259 , - 1472 , - 2245 , - 2578 , - 2471 , - 1924 , - 937 , - 3030 , - 1163 , - 2376 , - 3149 , - 3482 , - 3375 , - 2828 , - 1841 , - 414 , - 2067 , - 3280 , - 533 , - 866 , - 759 , - 212 , - 2745 , - 1318 , - 2971 , - 664 , - 1437 , - 1770 , - 1663 , - 1116 , - 129 , - 2222 , - 355 , - 1568 , - 2341 , - 2674 , - 2567 , - 2020 , - 1033 , - 3126 , - 1259 , - 2472 , - 3245 , - 58 , - 3471 , - 2924 , - 1937 , - 510 , - 2163 , - 3376 , - 629 , - 962 , - 855 , - 308 , - 2841 , - 1414 , - 3067 , - 760 , - 1533 , - 1866 , - 1759 , - 1212 , - 225 , - 2318 , - 451 , - 1664 , - 2437 , - 2770 , - 2663 , - 2116 , - 1129 , - 3222 , - 1355 , - 2568 , - 3341 , - 154 , - 47 , - 3020 , - 2033 , - 606 , - 2259 , - 3472 , - 725 , - 1058 , - 951 , - 404 , - 2937 , - 1510 , - 3163 , - 856 , - 1629 , - 1962 , - 1855 , - 1308 , - 321 , - 2414 , - 547 , - 1760 , - 2533 , - 2866 , - 2759 , - 2212 , - 1225 , - 3318 , - 1451 , - 2664 , - 3437 , - 250 , - 143 , - 3116 , - 2129 , - 702 , - 2355 , - 48 , - 821 , - 1154 , - 1047 , - 500 , - 3033 , - 1606 , - 3259 , - 952 , - 1725 , - 2058 , - 1951 , - 1404 , - 417 , - 2510 , - 643 , - 1856 , - 2629 , - 2962 , - 2855 , - 2308 , - 1321 , - 3414 , - 1547 , - 2760 , - 13 , - 346 , - 239 , - 3212 , - 2225 , - 798 , - 2451 , - 144 , - 917 , - 1250 , - 1143 , - 596 , - 3129 , - 1702 , - 3355 , - 1048 , - 1821 , - 2154 , - 2047 , - 1500 , - 513 , - 2606 , - 739 , - 1952 , - 2725 , - 3058 , - 2951 , - 2404 , - 1417 , - 3510 , - 1643 , - 2856 , - 109 , - 442 , - 335 , - 3308 , - 2321 , - 894 , - 2547 , - 240 , - 1013 , - 1346 , - 1239 , - 692 , - 3225 , - 1798 , - 3451 , - 1144 , - 1917 , - 2250 , - 2143 , - 1596 , - 609 , - 2702 , - 835 , - 2048 , - 2821 , - 3154 , - 3047 , - 2500 , - 1513 , - 86 , - 1739 , - 2952 , - 205 , - 538 , - 431 , - 3404 , - 2417 , - 990 , - 2643 , - 336 , - 1109 , - 1442 , - 1335 , - 788 , - 3321 , - 1894 , - 27 , - 1240 , - 2013 , - 2346 , - 2239 , - 1692 , - 705 , - 2798 , - 931 , - 2144 , - 2917 , - 3250 , - 3143 , - 2596 , - 1609 , - 182 , - 1835 , - 3048 , - 301 , - 634 , - 527 , - 3500 , - 2513 , - 1086 , - 2739 , - 432 , - 1205 , - 1538 , - 1431 , - 884 , - 3417 , - 1990 , - 123 , - 1336 , - 2109 , - 2442 , - 2335 , - 1788 , - 801 , - 2894 , - 1027 , - 2240 , - 3013 , - 3346 , - 3239 , - 2692 , - 1705 , - 278 , - 1931 , - 3144 , - 397 , - 730 , - 623 , - 76 , - 2609 , - 1182 , - 2835 , - 528 , - 1301 , - 1634 , - 1527 , - 980 , - 3513 , - 2086 , - 219 , - 1432 , - 2205 , - 2538 , - 2431 , - 1884 , - 897 , - 2990 , - 1123 , - 2336 , - 3109 , - 3442 , - 3335 , - 2788 , - 1801 , - 374 , - 2027 , - 3240 , - 493 , - 826 , - 719 , - 172 , - 2705 , - 1278 , - 2931 , - 624 , - 1397 , - 1730 , - 1623 , - 1076 , - 89 , - 2182 , - 315 , - 1528 , - 2301 , - 2634 , - 2527 , - 1980 , - 993 , - 3086 , - 1219 , - 2432 , - 3205 , - 18 , - 3431 , - 2884 , - 1897 , - 470 , - 2123 , - 3336 , - 589 , - 922 , - 815 , - 268 , - 2801 , - 1374 , - 3027 , - 720 , - 1493 , - 1826 , - 1719 , - 1172 , - 185 , - 2278 , - 411 , - 1624 , - 2397 , - 2730 , - 2623 , - 2076 , - 1089 , - 3182 , - 1315 , - 2528 , - 3301 , - 114 , - 7 , - 2980 , - 1993 , - 566 , - 2219 , - 3432 , - 685 , - 1018 , - 911 , - 364 , - 2897 , - 1470 , - 3123 , - 816 , - 1589 , - 1922 , - 1815 , - 1268 , - 281 , - 2374 , - 507 , - 1720 , - 2493 , - 2826 , - 2719 , - 2172 , - 1185 , - 3278 , - 1411 , - 2624 , - 3397 , - 210 , - 103 , - 3076 , - 2089 , - 662 , - 2315 , - 8 , - 781 , - 1114 , - 1007 , - 460 , - 2993 , - 1566 , - 3219 , - 912 , - 1685 , - 2018 , - 1911 , - 1364 , - 377 , - 2470 , - 603 , - 1816 , - 2589 , - 2922 , - 2815 , - 2268 , - 1281 , - 3374 , - 1507 , - 2720 , - 3493 , - 306 , - 199 , - 3172 , - 2185 , - 758 , - 2411 , - 104 , - 877 , - 1210 , - 1103 , - 556 , - 3089 , - 1662 , - 3315 , - 1008 , - 1781 , - 2114 , - 2007 , - 1460 , - 473 , - 2566 , - 699 , - 1912 , - 2685 , - 3018 , - 2911 , - 2364 , - 1377 , - 3470 , - 1603 , - 2816 , - 69 , - 402 , - 295 , - 3268 , - 2281 , - 854 , - 2507 , - 200 , - 973 , - 1306 , - 1199 , - 652 , - 3185 , - 1758 , - 3411 , - 1104 , - 1877 , - 2210 , - 2103 , - 1556 , - 569 , - 2662 , - 795 , - 2008 , - 2781 , - 3114 , - 3007 , - 2460 , - 1473 , - 46 , - 1699 , - 2912 , - 165 , - 498 , - 391 , - 3364 , - 2377 , - 950 , - 2603 , - 296 , - 1069 , - 1402 , - 1295 , - 748 , - 3281 , - 1854 , - 3507 , - 1200 , - 1973 , - 2306 , - 2199 , - 1652 , - 665 , - 2758 , - 891 , - 2104 , - 2877 , - 3210 , - 3103 , - 2556 , - 1569 , - 142 , - 1795 , - 3008 , - 261 , - 594 , - 487 , - 3460 , - 2473 , - 1046 , - 2699 , - 392 , - 1165 , - 1498 , - 1391 , - 844 , - 3377 , - 1950 , - 83 , - 1296 , - 2069 , - 2402 , - 2295 , - 1748 , - 761 , - 2854 , - 987 , - 2200 , - 2973 , - 3306 , - 3199 , - 2652 , - 1665 , - 238 , - 1891 , - 3104 , - 357 , - 690 , - 583 , - 36 , - 2569 , - 1142 , - 2795 , - 488 , - 1261 , - 1594 , - 1487 , - 940 , - 3473 , - 2046 , - 179 , - 1392 , - 2165 , - 2498 , - 2391 , - 1844 , - 857 , - 2950 , - 1083 , - 2296 , - 3069 , - 3402 , - 3295 , - 2748 , - 1761 , - 334 , - 1987 , - 3200 , - 453 , - 786 , - 679 , - 132 , - 2665 , - 1238 , - 2891 , - 584 , - 1357 , - 1690 , - 1583 , - 1036 , - 49 , - 2142 , - 275 , - 1488 , - 2261 , - 2594 , - 2487 , - 1940 , - 953 , - 3046 , - 1179 , - 2392 , - 3165 , - 3498 , - 3391 , - 2844 , - 1857 , - 430 , - 2083 , - 3296 , - 549 , - 882 , - 775 , - 228 , - 2761 , - 1334 , - 2987 , - 680 , - 1453 , - 1786 , - 1679 , - 1132 , - 145 , - 2238 , - 371 , - 1584 , - 2357 , - 2690 , - 2583 , - 2036 , - 1049 , - 3142 , - 1275 , - 2488 , - 3261 , - 74 , - 3487 , - 2940 , - 1953 , - 526 , - 2179 , - 3392 , - 645 , - 978 , - 871 , - 324 , - 2857 , - 1430 , - 3083 , - 776 , - 1549 , - 1882 , - 1775 , - 1228 , - 241 , - 2334 , - 467 , - 1680 , - 2453 , - 2786 , - 2679 , - 2132 , - 1145 , - 3238 , - 1371 , - 2584 , - 3357 , - 170 , - 63 , - 3036 , - 2049 , - 622 , - 2275 , - 3488 , - 741 , - 1074 , - 967 , - 420 , - 2953 , - 1526 , - 3179 , - 872 , - 1645 , - 1978 , - 1871 , - 1324 , - 337 , - 2430 , - 563 , - 1776 , - 2549 , - 2882 , - 2775 , - 2228 , - 1241 , - 3334 , - 1467 , - 2680 , - 3453 , - 266 , - 159 , - 3132 , - 2145 , - 718 , - 2371 , - 64 , - 837 , - 1170 , - 1063 , - 516 , - 3049 , - 1622 , - 3275 , - 968 , - 1741 , - 2074 , - 1967 , - 1420 , - 433 , - 2526 , - 659 , - 1872 , - 2645 , - 2978 , - 2871 , - 2324 , - 1337 , - 3430 , - 1563 , - 2776 , - 29 , - 362 , - 255 , - 3228 , - 2241 , - 814 , - 2467 , - 160 , - 933 , - 1266 , - 1159 , - 612 , - 3145 , - 1718 , - 3371 , - 1064 , - 1837 , - 2170 , - 2063 , - 1516 , - 529 , - 2622 , - 755 , - 1968 , - 2741 , - 3074 , - 2967 , - 2420 , - 1433 , - 6 , - 1659 , - 2872 , - 125 , - 458 , - 351 , - 3324 , - 2337 , - 910 , - 2563 , - 256 , - 1029 , - 1362 , - 1255 , - 708 , - 3241 , - 1814 , - 3467 , - 1160 , - 1933 , - 2266 , - 2159 , - 1612 , - 625 , - 2718 , - 851 , - 2064 , - 2837 , - 3170 , - 3063 , - 2516 , - 1529 , - 102 , - 1755 , - 2968 , - 221 , - 554 , - 447 , - 3420 , - 2433 , - 1006 , - 2659 , - 352 , - 1125 , - 1458 , - 1351 , - 804 , - 3337 , - 1910 , - 43 , - 1256 , - 2029 , - 2362 , - 2255 , - 1708 , - 721 , - 2814 , - 947 , - 2160 , - 2933 , - 3266 , - 3159 , - 2612 , - 1625 , - 198 , - 1851 , - 3064 , - 317 , - 650 , - 543 , - 3516 , - 2529 , - 1102 , - 2755 , - 448 , - 1221 , - 1554 , - 1447 , - 900 , - 3433 , - 2006 , - 139 , - 1352 , - 2125 , - 2458 , - 2351 , - 1804 , - 817 , - 2910 , - 1043 , - 2256 , - 3029 , - 3362 , - 3255 , - 2708 , - 1721 , - 294 , - 1947 , - 3160 , - 413 , - 746 , - 639 , - 92 , - 2625 , - 1198 , - 2851 , - 544 , - 1317 , - 1650 , - 1543 , - 996 , - 9 , - 2102 , - 235 , - 1448 , - 2221 , - 2554 , - 2447 , - 1900 , - 913 , - 3006 , - 1139 , - 2352 , - 3125 , - 3458 , - 3351 , - 2804 , - 1817 , - 390 , - 2043 , - 3256 , - 509 , - 842 , - 735 , - 188 , - 2721 , - 1294 , - 2947 , - 640 , - 1413 , - 1746 , - 1639 , - 1092 , - 105 , - 2198 , - 331 , - 1544 , - 2317 , - 2650 , - 2543 , - 1996 , - 1009 , - 3102 , - 1235 , - 2448 , - 3221 , - 34 , - 3447 , - 2900 , - 1913 , - 486 , - 2139 , - 3352 , - 605 , - 938 , - 831 , - 284 , - 2817 , - 1390 , - 3043 , - 736 , - 1509 , - 1842 , - 1735 , - 1188 , - 201 , - 2294 , - 427 , - 1640 , - 2413 , - 2746 , - 2639 , - 2092 , - 1105 , - 3198 , - 1331 , - 2544 , - 3317 , - 130 , - 23 , - 2996 , - 2009 , - 582 , - 2235 , - 3448 , - 701 , - 1034 , - 927 , - 380 , - 2913 , - 1486 , - 3139 , - 832 , - 1605 , - 1938 , - 1831 , - 1284 , - 297 , - 2390 , - 523 , - 1736 , - 2509 , - 2842 , - 2735 , - 2188 , - 1201 , - 3294 , - 1427 , - 2640 , - 3413 , - 226 , - 119 , - 3092 , - 2105 , - 678 , - 2331 , - 24 , - 797 , - 1130 , - 1023 , - 476 , - 3009 , - 1582 , - 3235 , - 928 , - 1701 , - 2034 , - 1927 , - 1380 , - 393 , - 2486 , - 619 , - 1832 , - 2605 , - 2938 , - 2831 , - 2284 , - 1297 , - 3390 , - 1523 , - 2736 , - 3509 , - 322 , - 215 , - 3188 , - 2201 , - 774 , - 2427 , - 120 , - 893 , - 1226 , - 1119 , - 572 , - 3105 , - 1678 , - 3331 , - 1024 , - 1797 , - 2130 , - 2023 , - 1476 , - 489 , - 2582 , - 715 , - 1928 , - 2701 , - 3034 , - 2927 , - 2380 , - 1393 , - 3486 , - 1619 , - 2832 , - 85 , - 418 , - 311 , - 3284 , - 2297 , - 870 , - 2523 , - 216 , - 989 , - 1322 , - 1215 , - 668 , - 3201 , - 1774 , - 3427 , - 1120 , - 1893 , - 2226 , - 2119 , - 1572 , - 585 , - 2678 , - 811 , - 2024 , - 2797 , - 3130 , - 3023 , - 2476 , - 1489 , - 62 , - 1715 , - 2928 , - 181 , - 514 , - 407 , - 3380 , - 2393 , - 966 , - 2619 , - 312 , - 1085 , - 1418 , - 1311 , - 764 , - 3297 , - 1870 , - 3 , - 1216 , - 1989 , - 2322 , - 2215 , - 1668 , - 681 , - 2774 , - 907 , - 2120 , - 2893 , - 3226 , - 3119 , - 2572 , - 1585 , - 158 , - 1811 , - 3024 , - 277 , - 610 , - 503 , - 3476 , - 2489 , - 1062 , - 2715 , - 408 , - 1181 , - 1514 , - 1407 , - 860 , - 3393 , - 1966 , - 99 , - 1312 , - 2085 , - 2418 , - 2311 , - 1764 , - 777 , - 2870 , - 1003 , - 2216 , - 2989 , - 3322 , - 3215 , - 2668 , - 1681 , - 254 , - 1907 , - 3120 , - 373 , - 706 , - 599 , - 52 , - 2585 , - 1158 , - 2811 , - 504 , - 1277 , - 1610 , - 1503 , - 956 , - 3489 , - 2062 , - 195 , - 1408 , - 2181 , - 2514 , - 2407 , - 1860 , - 873 , - 2966 , - 1099 , - 2312 , - 3085 , - 3418 , - 3311 , - 2764 , - 1777 , - 350 , - 2003 , - 3216 , - 469 , - 802 , - 695 , - 148 , - 2681 , - 1254 , - 2907 , - 600 , - 1373 , - 1706 , - 1599 , - 1052 , - 65 , - 2158 , - 291 , - 1504 , - 2277 , - 2610 , - 2503 , - 1956 , - 969 , - 3062 , - 1195 , - 2408 , - 3181 , - 3514 , - 3407 , - 2860 , - 1873 , - 446 , - 2099 , - 3312 , - 565 , - 898 , - 791 , - 244 , - 2777 , - 1350 , - 3003 , - 696 , - 1469 , - 1802 , - 1695 , - 1148 , - 161 , - 2254 , - 387 , - 1600 , - 2373 , - 2706 , - 2599 , - 2052 , - 1065 , - 3158 , - 1291 , - 2504 , - 3277 , - 90 , - 3503 , - 2956 , - 1969 , - 542 , - 2195 , - 3408 , - 661 , - 994 , - 887 , - 340 , - 2873 , - 1446 , - 3099 , - 792 , - 1565 , - 1898 , - 1791 , - 1244 , - 257 , - 2350 , - 483 , - 1696 , - 2469 , - 2802 , - 2695 , - 2148 , - 1161 , - 3254 , - 1387 , - 2600 , - 3373 , - 186 , - 79 , - 3052 , - 2065 , - 638 , - 2291 , - 3504 , - 757 , - 1090 , - 983 , - 436 , - 2969 , - 1542 , - 3195 , - 888 , - 1661 , - 1994 , - 1887 , - 1340 , - 353 , - 2446 , - 579 , - 1792 , - 2565 , - 2898 , - 2791 , - 2244 , - 1257 , - 3350 , - 1483 , - 2696 , - 3469 , - 282 , - 175 , - 3148 , - 2161 , - 734 , - 2387 , - 80 , - 853 , - 1186 , - 1079 , - 532 , - 3065 , - 1638 , - 3291 , - 984 , - 1757 , - 2090 , - 1983 , - 1436 , - 449 , - 2542 , - 675 , - 1888 , - 2661 , - 2994 , - 2887 , - 2340 , - 1353 , - 3446 , - 1579 , - 2792 , - 45 , - 378 , - 271 , - 3244 , - 2257 , - 830 , - 2483 , - 176 , - 949 , - 1282 , - 1175 , - 628 , - 3161 , - 1734 , - 3387 , - 1080 , - 1853 , - 2186 , - 2079 , - 1532 , - 545 , - 2638 , - 771 , - 1984 , - 2757 , - 3090 , - 2983 , - 2436 , - 1449 , - 22 , - 1675 , - 2888 , - 141 , - 474 , - 367 , - 3340 , - 2353 , - 926 , - 2579 , - 272 , - 1045 , - 1378 , - 1271 , - 724 , - 3257 , - 1830 , - 3483 , - 1176 , - 1949 , - 2282 , - 2175 , - 1628 , - 641 , - 2734 , - 867 , - 2080 , - 2853 , - 3186 , - 3079 , - 2532 , - 1545 , - 118 , - 1771 , - 2984 , - 237 , - 570 , - 463 , - 3436 , - 2449 , - 1022 , - 2675 , - 368 , - 1141 , - 1474 , - 1367 , - 820 , - 3353 , - 1926 , - 59 , - 1272 , - 2045 , - 2378 , - 2271 , - 1724 , - 737 , - 2830 , - 963 , - 2176 , - 2949 , - 3282 , - 3175 , - 2628 , - 1641 , - 214 , - 1867 , - 3080 , - 333 , - 666 , - 559 , - 12 , - 2545 , - 1118 , - 2771 , - 464 , - 1237 , - 1570 , - 1463 , - 916 , - 3449 , - 2022 , - 155 , - 1368 , - 2141 , - 2474 , - 2367 , - 1820 , - 833 , - 2926 , - 1059 , - 2272 , - 3045 , - 3378 , - 3271 , - 2724 , - 1737 , - 310 , - 1963 , - 3176 , - 429 , - 762 , - 655 , - 108 , - 2641 , - 1214 , - 2867 , - 560 , - 1333 , - 1666 , - 1559 , - 1012 , - 25 , - 2118 , - 251 , - 1464 , - 2237 , - 2570 , - 2463 , - 1916 , - 929 , - 3022 , - 1155 , - 2368 , - 3141 , - 3474 , - 3367 , - 2820 , - 1833 , - 406 , - 2059 , - 3272 , - 525 , - 858 , - 751 , - 204 , - 2737 , - 1310 , - 2963 , - 656 , - 1429 , - 1762 , - 1655 , - 1108 , - 121 , - 2214 , - 347 , - 1560 , - 2333 , - 2666 , - 2559 , - 2012 , - 1025 , - 3118 , - 1251 , - 2464 , - 3237 , - 50 , - 3463 , - 2916 , - 1929 , - 502 , - 2155 , - 3368 , - 621 , - 954 , - 847 , - 300 , - 2833 , - 1406 , - 3059 , - 752 , - 1525 , - 1858 , - 1751 , - 1204 , - 217 , - 2310 , - 443 , - 1656 , - 2429 , - 2762 , - 2655 , - 2108 , - 1121 , - 3214 , - 1347 , - 2560 , - 3333 , - 146 , - 39 , - 3012 , - 2025 , - 598 , - 2251 , - 3464 , - 717 , - 1050 , - 943 , - 396 , - 2929 , - 1502 , - 3155 , - 848 , - 1621 , - 1954 , - 1847 , - 1300 , - 313 , - 2406 , - 539 , - 1752 , - 2525 , - 2858 , - 2751 , - 2204 , - 1217 , - 3310 , - 1443 , - 2656 , - 3429 , - 242 , - 135 , - 3108 , - 2121 , - 694 , - 2347 , - 40 , - 813 , - 1146 , - 1039 , - 492 , - 3025 , - 1598 , - 3251 , - 944 , - 1717 , - 2050 , - 1943 , - 1396 , - 409 , - 2502 , - 635 , - 1848 , - 2621 , - 2954 , - 2847 , - 2300 , - 1313 , - 3406 , - 1539 , - 2752 , - 5 , - 338 , - 231 , - 3204 , - 2217 , - 790 , - 2443 , - 136 , - 909 , - 1242 , - 1135 , - 588 , - 3121 , - 1694 , - 3347 , - 1040 , - 1813 , - 2146 , - 2039 , - 1492 , - 505 , - 2598 , - 731 , - 1944 , - 2717 , - 3050 , - 2943 , - 2396 , - 1409 , - 3502 , - 1635 , - 2848 , - 101 , - 434 , - 327 , - 3300 , - 2313 , - 886 , - 2539 , - 232 , - 1005 , - 1338 , - 1231 , - 684 , - 3217 , - 1790 , - 3443 , - 1136 , - 1909 , - 2242 , - 2135 , - 1588 , - 601 , - 2694 , - 827 , - 2040 , - 2813 , - 3146 , - 3039 , - 2492 , - 1505 , - 78 , - 1731 , - 2944 , - 197 , - 530 , - 423 , - 3396 , - 2409 , - 982 , - 2635 , - 328 , - 1101 , - 1434 , - 1327 , - 780 , - 3313 , - 1886 , - 19 , - 1232 , - 2005 , - 2338 , - 2231 , - 1684 , - 697 , - 2790 , - 923 , - 2136 , - 2909 , - 3242 , - 3135 , - 2588 , - 1601 , - 174 , - 1827 , - 3040 , - 293 , - 626 , - 519 , - 3492 , - 2505 , - 1078 , - 2731 , - 424 , - 1197 , - 1530 , - 1423 , - 876 , - 3409 , - 1982 , - 115 , - 1328 , - 2101 , - 2434 , - 2327 , - 1780 , - 793 , - 2886 , - 1019 , - 2232 , - 3005 , - 3338 , - 3231 , - 2684 , - 1697 , - 270 , - 1923 , - 3136 , - 389 , - 722 , - 615 , - 68 , - 2601 , - 1174 , - 2827 , - 520 , - 1293 , - 1626 , - 1519 , - 972 , - 3505 , - 2078 , - 211 , - 1424 , - 2197 , - 2530 , - 2423 , - 1876 , - 889 , - 2982 , - 1115 , - 2328 , - 3101 , - 3434 , - 3327 , - 2780 , - 1793 , - 366 , - 2019 , - 3232 , - 485 , - 818 , - 711 , - 164 , - 2697 , - 1270 , - 2923 , - 616 , - 1389 , - 1722 , - 1615 , - 1068 , - 81 , - 2174 , - 307 , - 1520 , - 2293 , - 2626 , - 2519 , - 1972 , - 985 , - 3078 , - 1211 , - 2424 , - 3197 , - 10 , - 3423 , - 2876 , - 1889 , - 462 , - 2115 , - 3328 , - 581 , - 914 , - 807 , - 260 , - 2793 , - 1366 , - 3019 , - 712 , - 1485 , - 1818 , - 1711 , - 1164 , - 177 , - 2270 , - 403 , - 1616 , - 2389 , - 2722 , - 2615 , - 2068 , - 1081 , - 3174 , - 1307 , - 2520 , - 3293 , - 106 , - 3519 , - 2972 , - 1985 , - 558 , - 2211 , - 3424 , - 677 , - 1010 , - 903 , - 356 , - 2889 , - 1462 , - 3115 , - 808 , - 1581 , - 1914 , - 1807 , - 1260 , - 273 , - 2366 , - 499 , - 1712 , - 2485 , - 2818 , - 2711 , - 2164 , - 1177 , - 3270 , - 1403 , - 2616 , - 3389 , - 202 , - 95 , - 3068 , - 2081 , - 654 , - 2307 , - 0 , - 1849 , - 1234 , - 1739 , - 3364 , - 2525 , - 2806 , - 623 , - 3144 , - 3201 , - 794 , - 3091 , - 2924 , - 293 , - 2366 , - 1975 , - 2704 , - 969 , - 354 , - 859 , - 2484 , - 1645 , - 1926 , - 3327 , - 2264 , - 2321 , - 3498 , - 2211 , - 2044 , - 2997 , - 1486 , - 1095 , - 1824 , - 89 , - 3058 , - 3563 , - 1604 , - 765 , - 1046 , - 2447 , - 1384 , - 1441 , - 2618 , - 1331 , - 1164 , - 2117 , - 606 , - 215 , - 944 , - 2793 , - 2178 , - 2683 , - 724 , - 3469 , - 166 , - 1567 , - 504 , - 561 , - 1738 , - 451 , - 284 , - 1237 , - 3310 , - 2919 , - 64 , - 1913 , - 1298 , - 1803 , - 3428 , - 2589 , - 2870 , - 687 , - 3208 , - 3265 , - 858 , - 3155 , - 2988 , - 357 , - 2430 , - 2039 , - 2768 , - 1033 , - 418 , - 923 , - 2548 , - 1709 , - 1990 , - 3391 , - 2328 , - 2385 , - 3562 , - 2275 , - 2108 , - 3061 , - 1550 , - 1159 , - 1888 , - 153 , - 3122 , - 43 , - 1668 , - 829 , - 1110 , - 2511 , - 1448 , - 1505 , - 2682 , - 1395 , - 1228 , - 2181 , - 670 , - 279 , - 1008 , - 2857 , - 2242 , - 2747 , - 788 , - 3533 , - 230 , - 1631 , - 568 , - 625 , - 1802 , - 515 , - 348 , - 1301 , - 3374 , - 2983 , - 128 , - 1977 , - 1362 , - 1867 , - 3492 , - 2653 , - 2934 , - 751 , - 3272 , - 3329 , - 922 , - 3219 , - 3052 , - 421 , - 2494 , - 2103 , - 2832 , - 1097 , - 482 , - 987 , - 2612 , - 1773 , - 2054 , - 3455 , - 2392 , - 2449 , - 42 , - 2339 , - 2172 , - 3125 , - 1614 , - 1223 , - 1952 , - 217 , - 3186 , - 107 , - 1732 , - 893 , - 1174 , - 2575 , - 1512 , - 1569 , - 2746 , - 1459 , - 1292 , - 2245 , - 734 , - 343 , - 1072 , - 2921 , - 2306 , - 2811 , - 852 , - 13 , - 294 , - 1695 , - 632 , - 689 , - 1866 , - 579 , - 412 , - 1365 , - 3438 , - 3047 , - 192 , - 2041 , - 1426 , - 1931 , - 3556 , - 2717 , - 2998 , - 815 , - 3336 , - 3393 , - 986 , - 3283 , - 3116 , - 485 , - 2558 , - 2167 , - 2896 , - 1161 , - 546 , - 1051 , - 2676 , - 1837 , - 2118 , - 3519 , - 2456 , - 2513 , - 106 , - 2403 , - 2236 , - 3189 , - 1678 , - 1287 , - 2016 , - 281 , - 3250 , - 171 , - 1796 , - 957 , - 1238 , - 2639 , - 1576 , - 1633 , - 2810 , - 1523 , - 1356 , - 2309 , - 798 , - 407 , - 1136 , - 2985 , - 2370 , - 2875 , - 916 , - 77 , - 358 , - 1759 , - 696 , - 753 , - 1930 , - 643 , - 476 , - 1429 , - 3502 , - 3111 , - 256 , - 2105 , - 1490 , - 1995 , - 36 , - 2781 , - 3062 , - 879 , - 3400 , - 3457 , - 1050 , - 3347 , - 3180 , - 549 , - 2622 , - 2231 , - 2960 , - 1225 , - 610 , - 1115 , - 2740 , - 1901 , - 2182 , - 3583 , - 2520 , - 2577 , - 170 , - 2467 , - 2300 , - 3253 , - 1742 , - 1351 , - 2080 , - 345 , - 3314 , - 235 , - 1860 , - 1021 , - 1302 , - 2703 , - 1640 , - 1697 , - 2874 , - 1587 , - 1420 , - 2373 , - 862 , - 471 , - 1200 , - 3049 , - 2434 , - 2939 , - 980 , - 141 , - 422 , - 1823 , - 760 , - 817 , - 1994 , - 707 , - 540 , - 1493 , - 3566 , - 3175 , - 320 , - 2169 , - 1554 , - 2059 , - 100 , - 2845 , - 3126 , - 943 , - 3464 , - 3521 , - 1114 , - 3411 , - 3244 , - 613 , - 2686 , - 2295 , - 3024 , - 1289 , - 674 , - 1179 , - 2804 , - 1965 , - 2246 , - 63 , - 2584 , - 2641 , - 234 , - 2531 , - 2364 , - 3317 , - 1806 , - 1415 , - 2144 , - 409 , - 3378 , - 299 , - 1924 , - 1085 , - 1366 , - 2767 , - 1704 , - 1761 , - 2938 , - 1651 , - 1484 , - 2437 , - 926 , - 535 , - 1264 , - 3113 , - 2498 , - 3003 , - 1044 , - 205 , - 486 , - 1887 , - 824 , - 881 , - 2058 , - 771 , - 604 , - 1557 , - 46 , - 3239 , - 384 , - 2233 , - 1618 , - 2123 , - 164 , - 2909 , - 3190 , - 1007 , - 3528 , - 1 , - 1178 , - 3475 , - 3308 , - 677 , - 2750 , - 2359 , - 3088 , - 1353 , - 738 , - 1243 , - 2868 , - 2029 , - 2310 , - 127 , - 2648 , - 2705 , - 298 , - 2595 , - 2428 , - 3381 , - 1870 , - 1479 , - 2208 , - 473 , - 3442 , - 363 , - 1988 , - 1149 , - 1430 , - 2831 , - 1768 , - 1825 , - 3002 , - 1715 , - 1548 , - 2501 , - 990 , - 599 , - 1328 , - 3177 , - 2562 , - 3067 , - 1108 , - 269 , - 550 , - 1951 , - 888 , - 945 , - 2122 , - 835 , - 668 , - 1621 , - 110 , - 3303 , - 448 , - 2297 , - 1682 , - 2187 , - 228 , - 2973 , - 3254 , - 1071 , - 8 , - 65 , - 1242 , - 3539 , - 3372 , - 741 , - 2814 , - 2423 , - 3152 , - 1417 , - 802 , - 1307 , - 2932 , - 2093 , - 2374 , - 191 , - 2712 , - 2769 , - 362 , - 2659 , - 2492 , - 3445 , - 1934 , - 1543 , - 2272 , - 537 , - 3506 , - 427 , - 2052 , - 1213 , - 1494 , - 2895 , - 1832 , - 1889 , - 3066 , - 1779 , - 1612 , - 2565 , - 1054 , - 663 , - 1392 , - 3241 , - 2626 , - 3131 , - 1172 , - 333 , - 614 , - 2015 , - 952 , - 1009 , - 2186 , - 899 , - 732 , - 1685 , - 174 , - 3367 , - 512 , - 2361 , - 1746 , - 2251 , - 292 , - 3037 , - 3318 , - 1135 , - 72 , - 129 , - 1306 , - 19 , - 3436 , - 805 , - 2878 , - 2487 , - 3216 , - 1481 , - 866 , - 1371 , - 2996 , - 2157 , - 2438 , - 255 , - 2776 , - 2833 , - 426 , - 2723 , - 2556 , - 3509 , - 1998 , - 1607 , - 2336 , - 601 , - 3570 , - 491 , - 2116 , - 1277 , - 1558 , - 2959 , - 1896 , - 1953 , - 3130 , - 1843 , - 1676 , - 2629 , - 1118 , - 727 , - 1456 , - 3305 , - 2690 , - 3195 , - 1236 , - 397 , - 678 , - 2079 , - 1016 , - 1073 , - 2250 , - 963 , - 796 , - 1749 , - 238 , - 3431 , - 576 , - 2425 , - 1810 , - 2315 , - 356 , - 3101 , - 3382 , - 1199 , - 136 , - 193 , - 1370 , - 83 , - 3500 , - 869 , - 2942 , - 2551 , - 3280 , - 1545 , - 930 , - 1435 , - 3060 , - 2221 , - 2502 , - 319 , - 2840 , - 2897 , - 490 , - 2787 , - 2620 , - 3573 , - 2062 , - 1671 , - 2400 , - 665 , - 50 , - 555 , - 2180 , - 1341 , - 1622 , - 3023 , - 1960 , - 2017 , - 3194 , - 1907 , - 1740 , - 2693 , - 1182 , - 791 , - 1520 , - 3369 , - 2754 , - 3259 , - 1300 , - 461 , - 742 , - 2143 , - 1080 , - 1137 , - 2314 , - 1027 , - 860 , - 1813 , - 302 , - 3495 , - 640 , - 2489 , - 1874 , - 2379 , - 420 , - 3165 , - 3446 , - 1263 , - 200 , - 257 , - 1434 , - 147 , - 3564 , - 933 , - 3006 , - 2615 , - 3344 , - 1609 , - 994 , - 1499 , - 3124 , - 2285 , - 2566 , - 383 , - 2904 , - 2961 , - 554 , - 2851 , - 2684 , - 53 , - 2126 , - 1735 , - 2464 , - 729 , - 114 , - 619 , - 2244 , - 1405 , - 1686 , - 3087 , - 2024 , - 2081 , - 3258 , - 1971 , - 1804 , - 2757 , - 1246 , - 855 , - 1584 , - 3433 , - 2818 , - 3323 , - 1364 , - 525 , - 806 , - 2207 , - 1144 , - 1201 , - 2378 , - 1091 , - 924 , - 1877 , - 366 , - 3559 , - 704 , - 2553 , - 1938 , - 2443 , - 484 , - 3229 , - 3510 , - 1327 , - 264 , - 321 , - 1498 , - 211 , - 44 , - 997 , - 3070 , - 2679 , - 3408 , - 1673 , - 1058 , - 1563 , - 3188 , - 2349 , - 2630 , - 447 , - 2968 , - 3025 , - 618 , - 2915 , - 2748 , - 117 , - 2190 , - 1799 , - 2528 , - 793 , - 178 , - 683 , - 2308 , - 1469 , - 1750 , - 3151 , - 2088 , - 2145 , - 3322 , - 2035 , - 1868 , - 2821 , - 1310 , - 919 , - 1648 , - 3497 , - 2882 , - 3387 , - 1428 , - 589 , - 870 , - 2271 , - 1208 , - 1265 , - 2442 , - 1155 , - 988 , - 1941 , - 430 , - 39 , - 768 , - 2617 , - 2002 , - 2507 , - 548 , - 3293 , - 3574 , - 1391 , - 328 , - 385 , - 1562 , - 275 , - 108 , - 1061 , - 3134 , - 2743 , - 3472 , - 1737 , - 1122 , - 1627 , - 3252 , - 2413 , - 2694 , - 511 , - 3032 , - 3089 , - 682 , - 2979 , - 2812 , - 181 , - 2254 , - 1863 , - 2592 , - 857 , - 242 , - 747 , - 2372 , - 1533 , - 1814 , - 3215 , - 2152 , - 2209 , - 3386 , - 2099 , - 1932 , - 2885 , - 1374 , - 983 , - 1712 , - 3561 , - 2946 , - 3451 , - 1492 , - 653 , - 934 , - 2335 , - 1272 , - 1329 , - 2506 , - 1219 , - 1052 , - 2005 , - 494 , - 103 , - 832 , - 2681 , - 2066 , - 2571 , - 612 , - 3357 , - 54 , - 1455 , - 392 , - 449 , - 1626 , - 339 , - 172 , - 1125 , - 3198 , - 2807 , - 3536 , - 1801 , - 1186 , - 1691 , - 3316 , - 2477 , - 2758 , - 575 , - 3096 , - 3153 , - 746 , - 3043 , - 2876 , - 245 , - 2318 , - 1927 , - 2656 , - 921 , - 306 , - 811 , - 2436 , - 1597 , - 1878 , - 3279 , - 2216 , - 2273 , - 3450 , - 2163 , - 1996 , - 2949 , - 1438 , - 1047 , - 1776 , - 41 , - 3010 , - 3515 , - 1556 , - 717 , - 998 , - 2399 , - 1336 , - 1393 , - 2570 , - 1283 , - 1116 , - 2069 , - 558 , - 167 , - 896 , - 2745 , - 2130 , - 2635 , - 676 , - 3421 , - 118 , - 1519 , - 456 , - 513 , - 1690 , - 403 , - 236 , - 1189 , - 3262 , - 2871 , - 16 , - 1865 , - 1250 , - 1755 , - 3380 , - 2541 , - 2822 , - 639 , - 3160 , - 3217 , - 810 , - 3107 , - 2940 , - 309 , - 2382 , - 1991 , - 2720 , - 985 , - 370 , - 875 , - 2500 , - 1661 , - 1942 , - 3343 , - 2280 , - 2337 , - 3514 , - 2227 , - 2060 , - 3013 , - 1502 , - 1111 , - 1840 , - 105 , - 3074 , - 3579 , - 1620 , - 781 , - 1062 , - 2463 , - 1400 , - 1457 , - 2634 , - 1347 , - 1180 , - 2133 , - 622 , - 231 , - 960 , - 2809 , - 2194 , - 2699 , - 740 , - 3485 , - 182 , - 1583 , - 520 , - 577 , - 1754 , - 467 , - 300 , - 1253 , - 3326 , - 2935 , - 80 , - 1929 , - 1314 , - 1819 , - 3444 , - 2605 , - 2886 , - 703 , - 3224 , - 3281 , - 874 , - 3171 , - 3004 , - 373 , - 2446 , - 2055 , - 2784 , - 1049 , - 434 , - 939 , - 2564 , - 1725 , - 2006 , - 3407 , - 2344 , - 2401 , - 3578 , - 2291 , - 2124 , - 3077 , - 1566 , - 1175 , - 1904 , - 169 , - 3138 , - 59 , - 1684 , - 845 , - 1126 , - 2527 , - 1464 , - 1521 , - 2698 , - 1411 , - 1244 , - 2197 , - 686 , - 295 , - 1024 , - 2873 , - 2258 , - 2763 , - 804 , - 3549 , - 246 , - 1647 , - 584 , - 641 , - 1818 , - 531 , - 364 , - 1317 , - 3390 , - 2999 , - 144 , - 1993 , - 1378 , - 1883 , - 3508 , - 2669 , - 2950 , - 767 , - 3288 , - 3345 , - 938 , - 3235 , - 3068 , - 437 , - 2510 , - 2119 , - 2848 , - 1113 , - 498 , - 1003 , - 2628 , - 1789 , - 2070 , - 3471 , - 2408 , - 2465 , - 58 , - 2355 , - 2188 , - 3141 , - 1630 , - 1239 , - 1968 , - 233 , - 3202 , - 123 , - 1748 , - 909 , - 1190 , - 2591 , - 1528 , - 1585 , - 2762 , - 1475 , - 1308 , - 2261 , - 750 , - 359 , - 1088 , - 2937 , - 2322 , - 2827 , - 868 , - 29 , - 310 , - 1711 , - 648 , - 705 , - 1882 , - 595 , - 428 , - 1381 , - 3454 , - 3063 , - 208 , - 2057 , - 1442 , - 1947 , - 3572 , - 2733 , - 3014 , - 831 , - 3352 , - 3409 , - 1002 , - 3299 , - 3132 , - 501 , - 2574 , - 2183 , - 2912 , - 1177 , - 562 , - 1067 , - 2692 , - 1853 , - 2134 , - 3535 , - 2472 , - 2529 , - 122 , - 2419 , - 2252 , - 3205 , - 1694 , - 1303 , - 2032 , - 297 , - 3266 , - 187 , - 1812 , - 973 , - 1254 , - 2655 , - 1592 , - 1649 , - 2826 , - 1539 , - 1372 , - 2325 , - 814 , - 423 , - 1152 , - 3001 , - 2386 , - 2891 , - 932 , - 93 , - 374 , - 1775 , - 712 , - 769 , - 1946 , - 659 , - 492 , - 1445 , - 3518 , - 3127 , - 272 , - 2121 , - 1506 , - 2011 , - 52 , - 2797 , - 3078 , - 895 , - 3416 , - 3473 , - 1066 , - 3363 , - 3196 , - 565 , - 2638 , - 2247 , - 2976 , - 1241 , - 626 , - 1131 , - 2756 , - 1917 , - 2198 , - 15 , - 2536 , - 2593 , - 186 , - 2483 , - 2316 , - 3269 , - 1758 , - 1367 , - 2096 , - 361 , - 3330 , - 251 , - 1876 , - 1037 , - 1318 , - 2719 , - 1656 , - 1713 , - 2890 , - 1603 , - 1436 , - 2389 , - 878 , - 487 , - 1216 , - 3065 , - 2450 , - 2955 , - 996 , - 157 , - 438 , - 1839 , - 776 , - 833 , - 2010 , - 723 , - 556 , - 1509 , - 3582 , - 3191 , - 336 , - 2185 , - 1570 , - 2075 , - 116 , - 2861 , - 3142 , - 959 , - 3480 , - 3537 , - 1130 , - 3427 , - 3260 , - 629 , - 2702 , - 2311 , - 3040 , - 1305 , - 690 , - 1195 , - 2820 , - 1981 , - 2262 , - 79 , - 2600 , - 2657 , - 250 , - 2547 , - 2380 , - 3333 , - 1822 , - 1431 , - 2160 , - 425 , - 3394 , - 315 , - 1940 , - 1101 , - 1382 , - 2783 , - 1720 , - 1777 , - 2954 , - 1667 , - 1500 , - 2453 , - 942 , - 551 , - 1280 , - 3129 , - 2514 , - 3019 , - 1060 , - 221 , - 502 , - 1903 , - 840 , - 897 , - 2074 , - 787 , - 620 , - 1573 , - 62 , - 3255 , - 400 , - 2249 , - 1634 , - 2139 , - 180 , - 2925 , - 3206 , - 1023 , - 3544 , - 17 , - 1194 , - 3491 , - 3324 , - 693 , - 2766 , - 2375 , - 3104 , - 1369 , - 754 , - 1259 , - 2884 , - 2045 , - 2326 , - 143 , - 2664 , - 2721 , - 314 , - 2611 , - 2444 , - 3397 , - 1886 , - 1495 , - 2224 , - 489 , - 3458 , - 379 , - 2004 , - 1165 , - 1446 , - 2847 , - 1784 , - 1841 , - 3018 , - 1731 , - 1564 , - 2517 , - 1006 , - 615 , - 1344 , - 3193 , - 2578 , - 3083 , - 1124 , - 285 , - 566 , - 1967 , - 904 , - 961 , - 2138 , - 851 , - 684 , - 1637 , - 126 , - 3319 , - 464 , - 2313 , - 1698 , - 2203 , - 244 , - 2989 , - 3270 , - 1087 , - 24 , - 81 , - 1258 , - 3555 , - 3388 , - 757 , - 2830 , - 2439 , - 3168 , - 1433 , - 818 , - 1323 , - 2948 , - 2109 , - 2390 , - 207 , - 2728 , - 2785 , - 378 , - 2675 , - 2508 , - 3461 , - 1950 , - 1559 , - 2288 , - 553 , - 3522 , - 443 , - 2068 , - 1229 , - 1510 , - 2911 , - 1848 , - 1905 , - 3082 , - 1795 , - 1628 , - 2581 , - 1070 , - 679 , - 1408 , - 3257 , - 2642 , - 3147 , - 1188 , - 349 , - 630 , - 2031 , - 968 , - 1025 , - 2202 , - 915 , - 748 , - 1701 , - 190 , - 3383 , - 528 , - 2377 , - 1762 , - 2267 , - 308 , - 3053 , - 3334 , - 1151 , - 88 , - 145 , - 1322 , - 35 , - 3452 , - 821 , - 2894 , - 2503 , - 3232 , - 1497 , - 882 , - 1387 , - 3012 , - 2173 , - 2454 , - 271 , - 2792 , - 2849 , - 442 , - 2739 , - 2572 , - 3525 , - 2014 , - 1623 , - 2352 , - 617 , - 2 , - 507 , - 2132 , - 1293 , - 1574 , - 2975 , - 1912 , - 1969 , - 3146 , - 1859 , - 1692 , - 2645 , - 1134 , - 743 , - 1472 , - 3321 , - 2706 , - 3211 , - 1252 , - 413 , - 694 , - 2095 , - 1032 , - 1089 , - 2266 , - 979 , - 812 , - 1765 , - 254 , - 3447 , - 592 , - 2441 , - 1826 , - 2331 , - 372 , - 3117 , - 3398 , - 1215 , - 152 , - 209 , - 1386 , - 99 , - 3516 , - 885 , - 2958 , - 2567 , - 3296 , - 1561 , - 946 , - 1451 , - 3076 , - 2237 , - 2518 , - 335 , - 2856 , - 2913 , - 506 , - 2803 , - 2636 , - 5 , - 2078 , - 1687 , - 2416 , - 681 , - 66 , - 571 , - 2196 , - 1357 , - 1638 , - 3039 , - 1976 , - 2033 , - 3210 , - 1923 , - 1756 , - 2709 , - 1198 , - 807 , - 1536 , - 3385 , - 2770 , - 3275 , - 1316 , - 477 , - 758 , - 2159 , - 1096 , - 1153 , - 2330 , - 1043 , - 876 , - 1829 , - 318 , - 3511 , - 656 , - 2505 , - 1890 , - 2395 , - 436 , - 3181 , - 3462 , - 1279 , - 216 , - 273 , - 1450 , - 163 , - 3580 , - 949 , - 3022 , - 2631 , - 3360 , - 1625 , - 1010 , - 1515 , - 3140 , - 2301 , - 2582 , - 399 , - 2920 , - 2977 , - 570 , - 2867 , - 2700 , - 69 , - 2142 , - 1751 , - 2480 , - 745 , - 130 , - 635 , - 2260 , - 1421 , - 1702 , - 3103 , - 2040 , - 2097 , - 3274 , - 1987 , - 1820 , - 2773 , - 1262 , - 871 , - 1600 , - 3449 , - 2834 , - 3339 , - 1380 , - 541 , - 822 , - 2223 , - 1160 , - 1217 , - 2394 , - 1107 , - 940 , - 1893 , - 382 , - 3575 , - 720 , - 2569 , - 1954 , - 2459 , - 500 , - 3245 , - 3526 , - 1343 , - 280 , - 337 , - 1514 , - 227 , - 60 , - 1013 , - 3086 , - 2695 , - 3424 , - 1689 , - 1074 , - 1579 , - 3204 , - 2365 , - 2646 , - 463 , - 2984 , - 3041 , - 634 , - 2931 , - 2764 , - 133 , - 2206 , - 1815 , - 2544 , - 809 , - 194 , - 699 , - 2324 , - 1485 , - 1766 , - 3167 , - 2104 , - 2161 , - 3338 , - 2051 , - 1884 , - 2837 , - 1326 , - 935 , - 1664 , - 3513 , - 2898 , - 3403 , - 1444 , - 605 , - 886 , - 2287 , - 1224 , - 1281 , - 2458 , - 1171 , - 1004 , - 1957 , - 446 , - 55 , - 784 , - 2633 , - 2018 , - 2523 , - 564 , - 3309 , - 6 , - 1407 , - 344 , - 401 , - 1578 , - 291 , - 124 , - 1077 , - 3150 , - 2759 , - 3488 , - 1753 , - 1138 , - 1643 , - 3268 , - 2429 , - 2710 , - 527 , - 3048 , - 3105 , - 698 , - 2995 , - 2828 , - 197 , - 2270 , - 1879 , - 2608 , - 873 , - 258 , - 763 , - 2388 , - 1549 , - 1830 , - 3231 , - 2168 , - 2225 , - 3402 , - 2115 , - 1948 , - 2901 , - 1390 , - 999 , - 1728 , - 3577 , - 2962 , - 3467 , - 1508 , - 669 , - 950 , - 2351 , - 1288 , - 1345 , - 2522 , - 1235 , - 1068 , - 2021 , - 510 , - 119 , - 848 , - 2697 , - 2082 , - 2587 , - 628 , - 3373 , - 70 , - 1471 , - 408 , - 465 , - 1642 , - 355 , - 188 , - 1141 , - 3214 , - 2823 , - 3552 , - 1817 , - 1202 , - 1707 , - 3332 , - 2493 , - 2774 , - 591 , - 3112 , - 3169 , - 762 , - 3059 , - 2892 , - 261 , - 2334 , - 1943 , - 2672 , - 937 , - 322 , - 827 , - 2452 , - 1613 , - 1894 , - 3295 , - 2232 , - 2289 , - 3466 , - 2179 , - 2012 , - 2965 , - 1454 , - 1063 , - 1792 , - 57 , - 3026 , - 3531 , - 1572 , - 733 , - 1014 , - 2415 , - 1352 , - 1409 , - 2586 , - 1299 , - 1132 , - 2085 , - 574 , - 183 , - 912 , - 2761 , - 2146 , - 2651 , - 692 , - 3437 , - 134 , - 1535 , - 472 , - 529 , - 1706 , - 419 , - 252 , - 1205 , - 3278 , - 2887 , - 32 , - 1881 , - 1266 , - 1771 , - 3396 , - 2557 , - 2838 , - 655 , - 3176 , - 3233 , - 826 , - 3123 , - 2956 , - 325 , - 2398 , - 2007 , - 2736 , - 1001 , - 386 , - 891 , - 2516 , - 1677 , - 1958 , - 3359 , - 2296 , - 2353 , - 3530 , - 2243 , - 2076 , - 3029 , - 1518 , - 1127 , - 1856 , - 121 , - 3090 , - 11 , - 1636 , - 797 , - 1078 , - 2479 , - 1416 , - 1473 , - 2650 , - 1363 , - 1196 , - 2149 , - 638 , - 247 , - 976 , - 2825 , - 2210 , - 2715 , - 756 , - 3501 , - 198 , - 1599 , - 536 , - 593 , - 1770 , - 483 , - 316 , - 1269 , - 3342 , - 2951 , - 96 , - 1945 , - 1330 , - 1835 , - 3460 , - 2621 , - 2902 , - 719 , - 3240 , - 3297 , - 890 , - 3187 , - 3020 , - 389 , - 2462 , - 2071 , - 2800 , - 1065 , - 450 , - 955 , - 2580 , - 1741 , - 2022 , - 3423 , - 2360 , - 2417 , - 10 , - 2307 , - 2140 , - 3093 , - 1582 , - 1191 , - 1920 , - 185 , - 3154 , - 75 , - 1700 , - 861 , - 1142 , - 2543 , - 1480 , - 1537 , - 2714 , - 1427 , - 1260 , - 2213 , - 702 , - 311 , - 1040 , - 2889 , - 2274 , - 2779 , - 820 , - 3565 , - 262 , - 1663 , - 600 , - 657 , - 1834 , - 547 , - 380 , - 1333 , - 3406 , - 3015 , - 160 , - 2009 , - 1394 , - 1899 , - 3524 , - 2685 , - 2966 , - 783 , - 3304 , - 3361 , - 954 , - 3251 , - 3084 , - 453 , - 2526 , - 2135 , - 2864 , - 1129 , - 514 , - 1019 , - 2644 , - 1805 , - 2086 , - 3487 , - 2424 , - 2481 , - 74 , - 2371 , - 2204 , - 3157 , - 1646 , - 1255 , - 1984 , - 249 , - 3218 , - 139 , - 1764 , - 925 , - 1206 , - 2607 , - 1544 , - 1601 , - 2778 , - 1491 , - 1324 , - 2277 , - 766 , - 375 , - 1104 , - 2953 , - 2338 , - 2843 , - 884 , - 45 , - 326 , - 1727 , - 664 , - 721 , - 1898 , - 611 , - 444 , - 1397 , - 3470 , - 3079 , - 224 , - 2073 , - 1458 , - 1963 , - 4 , - 2749 , - 3030 , - 847 , - 3368 , - 3425 , - 1018 , - 3315 , - 3148 , - 517 , - 2590 , - 2199 , - 2928 , - 1193 , - 578 , - 1083 , - 2708 , - 1869 , - 2150 , - 3551 , - 2488 , - 2545 , - 138 , - 2435 , - 2268 , - 3221 , - 1710 , - 1319 , - 2048 , - 313 , - 3282 , - 203 , - 1828 , - 989 , - 1270 , - 2671 , - 1608 , - 1665 , - 2842 , - 1555 , - 1388 , - 2341 , - 830 , - 439 , - 1168 , - 3017 , - 2402 , - 2907 , - 948 , - 109 , - 390 , - 1791 , - 728 , - 785 , - 1962 , - 675 , - 508 , - 1461 , - 3534 , - 3143 , - 288 , - 2137 , - 1522 , - 2027 , - 68 , - 2813 , - 3094 , - 911 , - 3432 , - 3489 , - 1082 , - 3379 , - 3212 , - 581 , - 2654 , - 2263 , - 2992 , - 1257 , - 642 , - 1147 , - 2772 , - 1933 , - 2214 , - 31 , - 2552 , - 2609 , - 202 , - 2499 , - 2332 , - 3285 , - 1774 , - 1383 , - 2112 , - 377 , - 3346 , - 267 , - 1892 , - 1053 , - 1334 , - 2735 , - 1672 , - 1729 , - 2906 , - 1619 , - 1452 , - 2405 , - 894 , - 503 , - 1232 , - 3081 , - 2466 , - 2971 , - 1012 , - 173 , - 454 , - 1855 , - 792 , - 849 , - 2026 , - 739 , - 572 , - 1525 , - 14 , - 3207 , - 352 , - 2201 , - 1586 , - 2091 , - 132 , - 2877 , - 3158 , - 975 , - 3496 , - 3553 , - 1146 , - 3443 , - 3276 , - 645 , - 2718 , - 2327 , - 3056 , - 1321 , - 706 , - 1211 , - 2836 , - 1997 , - 2278 , - 95 , - 2616 , - 2673 , - 266 , - 2563 , - 2396 , - 3349 , - 1838 , - 1447 , - 2176 , - 441 , - 3410 , - 331 , - 1956 , - 1117 , - 1398 , - 2799 , - 1736 , - 1793 , - 2970 , - 1683 , - 1516 , - 2469 , - 958 , - 567 , - 1296 , - 3145 , - 2530 , - 3035 , - 1076 , - 237 , - 518 , - 1919 , - 856 , - 913 , - 2090 , - 803 , - 636 , - 1589 , - 78 , - 3271 , - 416 , - 2265 , - 1650 , - 2155 , - 196 , - 2941 , - 3222 , - 1039 , - 3560 , - 33 , - 1210 , - 3507 , - 3340 , - 709 , - 2782 , - 2391 , - 3120 , - 1385 , - 770 , - 1275 , - 2900 , - 2061 , - 2342 , - 159 , - 2680 , - 2737 , - 330 , - 2627 , - 2460 , - 3413 , - 1902 , - 1511 , - 2240 , - 505 , - 3474 , - 395 , - 2020 , - 1181 , - 1462 , - 2863 , - 1800 , - 1857 , - 3034 , - 1747 , - 1580 , - 2533 , - 1022 , - 631 , - 1360 , - 3209 , - 2594 , - 3099 , - 1140 , - 301 , - 582 , - 1983 , - 920 , - 977 , - 2154 , - 867 , - 700 , - 1653 , - 142 , - 3335 , - 480 , - 2329 , - 1714 , - 2219 , - 260 , - 3005 , - 3286 , - 1103 , - 40 , - 97 , - 1274 , - 3571 , - 3404 , - 773 , - 2846 , - 2455 , - 3184 , - 1449 , - 834 , - 1339 , - 2964 , - 2125 , - 2406 , - 223 , - 2744 , - 2801 , - 394 , - 2691 , - 2524 , - 3477 , - 1966 , - 1575 , - 2304 , - 569 , - 3538 , - 459 , - 2084 , - 1245 , - 1526 , - 2927 , - 1864 , - 1921 , - 3098 , - 1811 , - 1644 , - 2597 , - 1086 , - 695 , - 1424 , - 3273 , - 2658 , - 3163 , - 1204 , - 365 , - 646 , - 2047 , - 984 , - 1041 , - 2218 , - 931 , - 764 , - 1717 , - 206 , - 3399 , - 544 , - 2393 , - 1778 , - 2283 , - 324 , - 3069 , - 3350 , - 1167 , - 104 , - 161 , - 1338 , - 51 , - 3468 , - 837 , - 2910 , - 2519 , - 3248 , - 1513 , - 898 , - 1403 , - 3028 , - 2189 , - 2470 , - 287 , - 2808 , - 2865 , - 458 , - 2755 , - 2588 , - 3541 , - 2030 , - 1639 , - 2368 , - 633 , - 18 , - 523 , - 2148 , - 1309 , - 1590 , - 2991 , - 1928 , - 1985 , - 3162 , - 1875 , - 1708 , - 2661 , - 1150 , - 759 , - 1488 , - 3337 , - 2722 , - 3227 , - 1268 , - 429 , - 710 , - 2111 , - 1048 , - 1105 , - 2282 , - 995 , - 828 , - 1781 , - 270 , - 3463 , - 608 , - 2457 , - 1842 , - 2347 , - 388 , - 3133 , - 3414 , - 1231 , - 168 , - 225 , - 1402 , - 115 , - 3532 , - 901 , - 2974 , - 2583 , - 3312 , - 1577 , - 962 , - 1467 , - 3092 , - 2253 , - 2534 , - 351 , - 2872 , - 2929 , - 522 , - 2819 , - 2652 , - 21 , - 2094 , - 1703 , - 2432 , - 697 , - 82 , - 587 , - 2212 , - 1373 , - 1654 , - 3055 , - 1992 , - 2049 , - 3226 , - 1939 , - 1772 , - 2725 , - 1214 , - 823 , - 1552 , - 3401 , - 2786 , - 3291 , - 1332 , - 493 , - 774 , - 2175 , - 1112 , - 1169 , - 2346 , - 1059 , - 892 , - 1845 , - 334 , - 3527 , - 672 , - 2521 , - 1906 , - 2411 , - 452 , - 3197 , - 3478 , - 1295 , - 232 , - 289 , - 1466 , - 179 , - 12 , - 965 , - 3038 , - 2647 , - 3376 , - 1641 , - 1026 , - 1531 , - 3156 , - 2317 , - 2598 , - 415 , - 2936 , - 2993 , - 586 , - 2883 , - 2716 , - 85 , - 2158 , - 1767 , - 2496 , - 761 , - 146 , - 651 , - 2276 , - 1437 , - 1718 , - 3119 , - 2056 , - 2113 , - 3290 , - 2003 , - 1836 , - 2789 , - 1278 , - 887 , - 1616 , - 3465 , - 2850 , - 3355 , - 1396 , - 557 , - 838 , - 2239 , - 1176 , - 1233 , - 2410 , - 1123 , - 956 , - 1909 , - 398 , - 7 , - 736 , - 2585 , - 1970 , - 2475 , - 516 , - 3261 , - 3542 , - 1359 , - 296 , - 353 , - 1530 , - 243 , - 76 , - 1029 , - 3102 , - 2711 , - 3440 , - 1705 , - 1090 , - 1595 , - 3220 , - 2381 , - 2662 , - 479 , - 3000 , - 3057 , - 650 , - 2947 , - 2780 , - 149 , - 2222 , - 1831 , - 2560 , - 825 , - 210 , - 715 , - 2340 , - 1501 , - 1782 , - 3183 , - 2120 , - 2177 , - 3354 , - 2067 , - 1900 , - 2853 , - 1342 , - 951 , - 1680 , - 3529 , - 2914 , - 3419 , - 1460 , - 621 , - 902 , - 2303 , - 1240 , - 1297 , - 2474 , - 1187 , - 1020 , - 1973 , - 462 , - 71 , - 800 , - 2649 , - 2034 , - 2539 , - 580 , - 3325 , - 22 , - 1423 , - 360 , - 417 , - 1594 , - 307 , - 140 , - 1093 , - 3166 , - 2775 , - 3504 , - 1769 , - 1154 , - 1659 , - 3284 , - 2445 , - 2726 , - 543 , - 3064 , - 3121 , - 714 , - 3011 , - 2844 , - 213 , - 2286 , - 1895 , - 2624 , - 889 , - 274 , - 779 , - 2404 , - 1565 , - 1846 , - 3247 , - 2184 , - 2241 , - 3418 , - 2131 , - 1964 , - 2917 , - 1406 , - 1015 , - 1744 , - 9 , - 2978 , - 3483 , - 1524 , - 685 , - 966 , - 2367 , - 1304 , - 1361 , - 2538 , - 1251 , - 1084 , - 2037 , - 526 , - 135 , - 864 , - 2713 , - 2098 , - 2603 , - 644 , - 3389 , - 86 , - 1487 , - 424 , - 481 , - 1658 , - 371 , - 204 , - 1157 , - 3230 , - 2839 , - 3568 , - 1833 , - 1218 , - 1723 , - 3348 , - 2509 , - 2790 , - 607 , - 3128 , - 3185 , - 778 , - 3075 , - 2908 , - 277 , - 2350 , - 1959 , - 2688 , - 953 , - 338 , - 843 , - 2468 , - 1629 , - 1910 , - 3311 , - 2248 , - 2305 , - 3482 , - 2195 , - 2028 , - 2981 , - 1470 , - 1079 , - 1808 , - 73 , - 3042 , - 3547 , - 1588 , - 749 , - 1030 , - 2431 , - 1368 , - 1425 , - 2602 , - 1315 , - 1148 , - 2101 , - 590 , - 199 , - 928 , - 2777 , - 2162 , - 2667 , - 708 , - 3453 , - 150 , - 1551 , - 488 , - 545 , - 1722 , - 435 , - 268 , - 1221 , - 3294 , - 2903 , - 48 , - 1897 , - 1282 , - 1787 , - 3412 , - 2573 , - 2854 , - 671 , - 3192 , - 3249 , - 842 , - 3139 , - 2972 , - 341 , - 2414 , - 2023 , - 2752 , - 1017 , - 402 , - 907 , - 2532 , - 1693 , - 1974 , - 3375 , - 2312 , - 2369 , - 3546 , - 2259 , - 2092 , - 3045 , - 1534 , - 1143 , - 1872 , - 137 , - 3106 , - 27 , - 1652 , - 813 , - 1094 , - 2495 , - 1432 , - 1489 , - 2666 , - 1379 , - 1212 , - 2165 , - 654 , - 263 , - 992 , - 2841 , - 2226 , - 2731 , - 772 , - 3517 , - 214 , - 1615 , - 552 , - 609 , - 1786 , - 499 , - 332 , - 1285 , - 3358 , - 2967 , - 112 , - 1961 , - 1346 , - 1851 , - 3476 , - 2637 , - 2918 , - 735 , - 3256 , - 3313 , - 906 , - 3203 , - 3036 , - 405 , - 2478 , - 2087 , - 2816 , - 1081 , - 466 , - 971 , - 2596 , - 1757 , - 2038 , - 3439 , - 2376 , - 2433 , - 26 , - 2323 , - 2156 , - 3109 , - 1598 , - 1207 , - 1936 , - 201 , - 3170 , - 91 , - 1716 , - 877 , - 1158 , - 2559 , - 1496 , - 1553 , - 2730 , - 1443 , - 1276 , - 2229 , - 718 , - 327 , - 1056 , - 2905 , - 2290 , - 2795 , - 836 , - 3581 , - 278 , - 1679 , - 616 , - 673 , - 1850 , - 563 , - 396 , - 1349 , - 3422 , - 3031 , - 176 , - 2025 , - 1410 , - 1915 , - 3540 , - 2701 , - 2982 , - 799 , - 3320 , - 3377 , - 970 , - 3267 , - 3100 , - 469 , - 2542 , - 2151 , - 2880 , - 1145 , - 530 , - 1035 , - 2660 , - 1821 , - 2102 , - 3503 , - 2440 , - 2497 , - 90 , - 2387 , - 2220 , - 3173 , - 1662 , - 1271 , - 2000 , - 265 , - 3234 , - 155 , - 1780 , - 941 , - 1222 , - 2623 , - 1560 , - 1617 , - 2794 , - 1507 , - 1340 , - 2293 , - 782 , - 391 , - 1120 , - 2969 , - 2354 , - 2859 , - 900 , - 61 , - 342 , - 1743 , - 680 , - 737 , - 1914 , - 627 , - 460 , - 1413 , - 3486 , - 3095 , - 240 , - 2089 , - 1474 , - 1979 , - 20 , - 2765 , - 3046 , - 863 , - 3384 , - 3441 , - 1034 , - 3331 , - 3164 , - 533 , - 2606 , - 2215 , - 2944 , - 1209 , - 594 , - 1099 , - 2724 , - 1885 , - 2166 , - 3567 , - 2504 , - 2561 , - 154 , - 2451 , - 2284 , - 3237 , - 1726 , - 1335 , - 2064 , - 329 , - 3298 , - 219 , - 1844 , - 1005 , - 1286 , - 2687 , - 1624 , - 1681 , - 2858 , - 1571 , - 1404 , - 2357 , - 846 , - 455 , - 1184 , - 3033 , - 2418 , - 2923 , - 964 , - 125 , - 406 , - 1807 , - 744 , - 801 , - 1978 , - 691 , - 524 , - 1477 , - 3550 , - 3159 , - 304 , - 2153 , - 1538 , - 2043 , - 84 , - 2829 , - 3110 , - 927 , - 3448 , - 3505 , - 1098 , - 3395 , - 3228 , - 597 , - 2670 , - 2279 , - 3008 , - 1273 , - 658 , - 1163 , - 2788 , - 1949 , - 2230 , - 47 , - 2568 , - 2625 , - 218 , - 2515 , - 2348 , - 3301 , - 1790 , - 1399 , - 2128 , - 393 , - 3362 , - 283 , - 1908 , - 1069 , - 1350 , - 2751 , - 1688 , - 1745 , - 2922 , - 1635 , - 1468 , - 2421 , - 910 , - 519 , - 1248 , - 3097 , - 2482 , - 2987 , - 1028 , - 189 , - 470 , - 1871 , - 808 , - 865 , - 2042 , - 755 , - 588 , - 1541 , - 30 , - 3223 , - 368 , - 2217 , - 1602 , - 2107 , - 148 , - 2893 , - 3174 , - 991 , - 3512 , - 3569 , - 1162 , - 3459 , - 3292 , - 661 , - 2734 , - 2343 , - 3072 , - 1337 , - 722 , - 1227 , - 2852 , - 2013 , - 2294 , - 111 , - 2632 , - 2689 , - 282 , - 2579 , - 2412 , - 3365 , - 1854 , - 1463 , - 2192 , - 457 , - 3426 , - 347 , - 1972 , - 1133 , - 1414 , - 2815 , - 1752 , - 1809 , - 2986 , - 1699 , - 1532 , - 2485 , - 974 , - 583 , - 1312 , - 3161 , - 2546 , - 3051 , - 1092 , - 253 , - 534 , - 1935 , - 872 , - 929 , - 2106 , - 819 , - 652 , - 1605 , - 94 , - 3287 , - 432 , - 2281 , - 1666 , - 2171 , - 212 , - 2957 , - 3238 , - 1055 , - 3576 , - 49 , - 1226 , - 3523 , - 3356 , - 725 , - 2798 , - 2407 , - 3136 , - 1401 , - 786 , - 1291 , - 2916 , - 2077 , - 2358 , - 175 , - 2696 , - 2753 , - 346 , - 2643 , - 2476 , - 3429 , - 1918 , - 1527 , - 2256 , - 521 , - 3490 , - 411 , - 2036 , - 1197 , - 1478 , - 2879 , - 1816 , - 1873 , - 3050 , - 1763 , - 1596 , - 2549 , - 1038 , - 647 , - 1376 , - 3225 , - 2610 , - 3115 , - 1156 , - 317 , - 598 , - 1999 , - 936 , - 993 , - 2170 , - 883 , - 716 , - 1669 , - 158 , - 3351 , - 496 , - 2345 , - 1730 , - 2235 , - 276 , - 3021 , - 3302 , - 1119 , - 56 , - 113 , - 1290 , - 3 , - 3420 , - 789 , - 2862 , - 2471 , - 3200 , - 1465 , - 850 , - 1355 , - 2980 , - 2141 , - 2422 , - 239 , - 2760 , - 2817 , - 410 , - 2707 , - 2540 , - 3493 , - 1982 , - 1591 , - 2320 , - 585 , - 3554 , - 475 , - 2100 , - 1261 , - 1542 , - 2943 , - 1880 , - 1937 , - 3114 , - 1827 , - 1660 , - 2613 , - 1102 , - 711 , - 1440 , - 3289 , - 2674 , - 3179 , - 1220 , - 381 , - 662 , - 2063 , - 1000 , - 1057 , - 2234 , - 947 , - 780 , - 1733 , - 222 , - 3415 , - 560 , - 2409 , - 1794 , - 2299 , - 340 , - 3085 , - 3366 , - 1183 , - 120 , - 177 , - 1354 , - 67 , - 3484 , - 853 , - 2926 , - 2535 , - 3264 , - 1529 , - 914 , - 1419 , - 3044 , - 2205 , - 2486 , - 303 , - 2824 , - 2881 , - 474 , - 2771 , - 2604 , - 3557 , - 2046 , - 1655 , - 2384 , - 649 , - 34 , - 539 , - 2164 , - 1325 , - 1606 , - 3007 , - 1944 , - 2001 , - 3178 , - 1891 , - 1724 , - 2677 , - 1166 , - 775 , - 1504 , - 3353 , - 2738 , - 3243 , - 1284 , - 445 , - 726 , - 2127 , - 1064 , - 1121 , - 2298 , - 1011 , - 844 , - 1797 , - 286 , - 3479 , - 624 , - 2473 , - 1858 , - 2363 , - 404 , - 3149 , - 3430 , - 1247 , - 184 , - 241 , - 1418 , - 131 , - 3548 , - 917 , - 2990 , - 2599 , - 3328 , - 1593 , - 978 , - 1483 , - 3108 , - 2269 , - 2550 , - 367 , - 2888 , - 2945 , - 538 , - 2835 , - 2668 , - 37 , - 2110 , - 1719 , - 2448 , - 713 , - 98 , - 603 , - 2228 , - 1389 , - 1670 , - 3071 , - 2008 , - 2065 , - 3242 , - 1955 , - 1788 , - 2741 , - 1230 , - 839 , - 1568 , - 3417 , - 2802 , - 3307 , - 1348 , - 509 , - 790 , - 2191 , - 1128 , - 1185 , - 2362 , - 1075 , - 908 , - 1861 , - 350 , - 3543 , - 688 , - 2537 , - 1922 , - 2427 , - 468 , - 3213 , - 3494 , - 1311 , - 248 , - 305 , - 1482 , - 195 , - 28 , - 981 , - 3054 , - 2663 , - 3392 , - 1657 , - 1042 , - 1547 , - 3172 , - 2333 , - 2614 , - 431 , - 2952 , - 3009 , - 602 , - 2899 , - 2732 , - 101 , - 2174 , - 1783 , - 2512 , - 777 , - 162 , - 667 , - 2292 , - 1453 , - 1734 , - 3135 , - 2072 , - 2129 , - 3306 , - 2019 , - 1852 , - 2805 , - 1294 , - 903 , - 1632 , - 3481 , - 2866 , - 3371 , - 1412 , - 573 , - 854 , - 2255 , - 1192 , - 1249 , - 2426 , - 1139 , - 972 , - 1925 , - 414 , - 23 , - 752 , - 2601 , - 1986 , - 2491 , - 532 , - 3277 , - 3558 , - 1375 , - 312 , - 369 , - 1546 , - 259 , - 92 , - 1045 , - 3118 , - 2727 , - 3456 , - 1721 , - 1106 , - 1611 , - 3236 , - 2397 , - 2678 , - 495 , - 3016 , - 3073 , - 666 , - 2963 , - 2796 , - 165 , - 2238 , - 1847 , - 2576 , - 841 , - 226 , - 731 , - 2356 , - 1517 , - 1798 , - 3199 , - 2136 , - 2193 , - 3370 , - 2083 , - 1916 , - 2869 , - 1358 , - 967 , - 1696 , - 3545 , - 2930 , - 3435 , - 1476 , - 637 , - 918 , - 2319 , - 1256 , - 1313 , - 2490 , - 1203 , - 1036 , - 1989 , - 478 , - 87 , - 816 , - 2665 , - 2050 , - 2555 , - 596 , - 3341 , - 38 , - 1439 , - 376 , - 433 , - 1610 , - 323 , - 156 , - 1109 , - 3182 , - 2791 , - 3520 , - 1785 , - 1170 , - 1675 , - 3300 , - 2461 , - 2742 , - 559 , - 3080 , - 3137 , - 730 , - 3027 , - 2860 , - 229 , - 2302 , - 1911 , - 2640 , - 905 , - 290 , - 795 , - 2420 , - 1581 , - 1862 , - 3263 , - 2200 , - 2257 , - 3434 , - 2147 , - 1980 , - 2933 , - 1422 , - 1031 , - 1760 , - 25 , - 2994 , - 3499 , - 1540 , - 701 , - 982 , - 2383 , - 1320 , - 1377 , - 2554 , - 1267 , - 1100 , - 2053 , - 542 , - 151 , - 880 , - 2729 , - 2114 , - 2619 , - 660 , - 3405 , - 102 , - 1503 , - 440 , - 497 , - 1674 , - 387 , - 220 , - 1173 , - 3246 , - 2855 , - 0 , - 1765 , - 3074 , - 279 , - 676 , - 617 , - 102 , - 2779 , - 1352 , - 3117 , - 778 , - 1631 , - 2028 , - 1969 , - 1454 , - 483 , - 2704 , - 821 , - 2130 , - 2983 , - 3380 , - 3321 , - 2806 , - 1835 , - 408 , - 2173 , - 3482 , - 687 , - 1084 , - 1025 , - 510 , - 3187 , - 1760 , - 3525 , - 1186 , - 2039 , - 2436 , - 2377 , - 1862 , - 891 , - 3112 , - 1229 , - 2538 , - 3391 , - 140 , - 81 , - 3214 , - 2243 , - 816 , - 2581 , - 242 , - 1095 , - 1492 , - 1433 , - 918 , - 3595 , - 2168 , - 285 , - 1594 , - 2447 , - 2844 , - 2785 , - 2270 , - 1299 , - 3520 , - 1637 , - 2946 , - 151 , - 548 , - 489 , - 3622 , - 2651 , - 1224 , - 2989 , - 650 , - 1503 , - 1900 , - 1841 , - 1326 , - 355 , - 2576 , - 693 , - 2002 , - 2855 , - 3252 , - 3193 , - 2678 , - 1707 , - 280 , - 2045 , - 3354 , - 559 , - 956 , - 897 , - 382 , - 3059 , - 1632 , - 3397 , - 1058 , - 1911 , - 2308 , - 2249 , - 1734 , - 763 , - 2984 , - 1101 , - 2410 , - 3263 , - 12 , - 3601 , - 3086 , - 2115 , - 688 , - 2453 , - 114 , - 967 , - 1364 , - 1305 , - 790 , - 3467 , - 2040 , - 157 , - 1466 , - 2319 , - 2716 , - 2657 , - 2142 , - 1171 , - 3392 , - 1509 , - 2818 , - 23 , - 420 , - 361 , - 3494 , - 2523 , - 1096 , - 2861 , - 522 , - 1375 , - 1772 , - 1713 , - 1198 , - 227 , - 2448 , - 565 , - 1874 , - 2727 , - 3124 , - 3065 , - 2550 , - 1579 , - 152 , - 1917 , - 3226 , - 431 , - 828 , - 769 , - 254 , - 2931 , - 1504 , - 3269 , - 930 , - 1783 , - 2180 , - 2121 , - 1606 , - 635 , - 2856 , - 973 , - 2282 , - 3135 , - 3532 , - 3473 , - 2958 , - 1987 , - 560 , - 2325 , - 3634 , - 839 , - 1236 , - 1177 , - 662 , - 3339 , - 1912 , - 29 , - 1338 , - 2191 , - 2588 , - 2529 , - 2014 , - 1043 , - 3264 , - 1381 , - 2690 , - 3543 , - 292 , - 233 , - 3366 , - 2395 , - 968 , - 2733 , - 394 , - 1247 , - 1644 , - 1585 , - 1070 , - 99 , - 2320 , - 437 , - 1746 , - 2599 , - 2996 , - 2937 , - 2422 , - 1451 , - 24 , - 1789 , - 3098 , - 303 , - 700 , - 641 , - 126 , - 2803 , - 1376 , - 3141 , - 802 , - 1655 , - 2052 , - 1993 , - 1478 , - 507 , - 2728 , - 845 , - 2154 , - 3007 , - 3404 , - 3345 , - 2830 , - 1859 , - 432 , - 2197 , - 3506 , - 711 , - 1108 , - 1049 , - 534 , - 3211 , - 1784 , - 3549 , - 1210 , - 2063 , - 2460 , - 2401 , - 1886 , - 915 , - 3136 , - 1253 , - 2562 , - 3415 , - 164 , - 105 , - 3238 , - 2267 , - 840 , - 2605 , - 266 , - 1119 , - 1516 , - 1457 , - 942 , - 3619 , - 2192 , - 309 , - 1618 , - 2471 , - 2868 , - 2809 , - 2294 , - 1323 , - 3544 , - 1661 , - 2970 , - 175 , - 572 , - 513 , - 3646 , - 2675 , - 1248 , - 3013 , - 674 , - 1527 , - 1924 , - 1865 , - 1350 , - 379 , - 2600 , - 717 , - 2026 , - 2879 , - 3276 , - 3217 , - 2702 , - 1731 , - 304 , - 2069 , - 3378 , - 583 , - 980 , - 921 , - 406 , - 3083 , - 1656 , - 3421 , - 1082 , - 1935 , - 2332 , - 2273 , - 1758 , - 787 , - 3008 , - 1125 , - 2434 , - 3287 , - 36 , - 3625 , - 3110 , - 2139 , - 712 , - 2477 , - 138 , - 991 , - 1388 , - 1329 , - 814 , - 3491 , - 2064 , - 181 , - 1490 , - 2343 , - 2740 , - 2681 , - 2166 , - 1195 , - 3416 , - 1533 , - 2842 , - 47 , - 444 , - 385 , - 3518 , - 2547 , - 1120 , - 2885 , - 546 , - 1399 , - 1796 , - 1737 , - 1222 , - 251 , - 2472 , - 589 , - 1898 , - 2751 , - 3148 , - 3089 , - 2574 , - 1603 , - 176 , - 1941 , - 3250 , - 455 , - 852 , - 793 , - 278 , - 2955 , - 1528 , - 3293 , - 954 , - 1807 , - 2204 , - 2145 , - 1630 , - 659 , - 2880 , - 997 , - 2306 , - 3159 , - 3556 , - 3497 , - 2982 , - 2011 , - 584 , - 2349 , - 10 , - 863 , - 1260 , - 1201 , - 686 , - 3363 , - 1936 , - 53 , - 1362 , - 2215 , - 2612 , - 2553 , - 2038 , - 1067 , - 3288 , - 1405 , - 2714 , - 3567 , - 316 , - 257 , - 3390 , - 2419 , - 992 , - 2757 , - 418 , - 1271 , - 1668 , - 1609 , - 1094 , - 123 , - 2344 , - 461 , - 1770 , - 2623 , - 3020 , - 2961 , - 2446 , - 1475 , - 48 , - 1813 , - 3122 , - 327 , - 724 , - 665 , - 150 , - 2827 , - 1400 , - 3165 , - 826 , - 1679 , - 2076 , - 2017 , - 1502 , - 531 , - 2752 , - 869 , - 2178 , - 3031 , - 3428 , - 3369 , - 2854 , - 1883 , - 456 , - 2221 , - 3530 , - 735 , - 1132 , - 1073 , - 558 , - 3235 , - 1808 , - 3573 , - 1234 , - 2087 , - 2484 , - 2425 , - 1910 , - 939 , - 3160 , - 1277 , - 2586 , - 3439 , - 188 , - 129 , - 3262 , - 2291 , - 864 , - 2629 , - 290 , - 1143 , - 1540 , - 1481 , - 966 , - 3643 , - 2216 , - 333 , - 1642 , - 2495 , - 2892 , - 2833 , - 2318 , - 1347 , - 3568 , - 1685 , - 2994 , - 199 , - 596 , - 537 , - 22 , - 2699 , - 1272 , - 3037 , - 698 , - 1551 , - 1948 , - 1889 , - 1374 , - 403 , - 2624 , - 741 , - 2050 , - 2903 , - 3300 , - 3241 , - 2726 , - 1755 , - 328 , - 2093 , - 3402 , - 607 , - 1004 , - 945 , - 430 , - 3107 , - 1680 , - 3445 , - 1106 , - 1959 , - 2356 , - 2297 , - 1782 , - 811 , - 3032 , - 1149 , - 2458 , - 3311 , - 60 , - 1 , - 3134 , - 2163 , - 736 , - 2501 , - 162 , - 1015 , - 1412 , - 1353 , - 838 , - 3515 , - 2088 , - 205 , - 1514 , - 2367 , - 2764 , - 2705 , - 2190 , - 1219 , - 3440 , - 1557 , - 2866 , - 71 , - 468 , - 409 , - 3542 , - 2571 , - 1144 , - 2909 , - 570 , - 1423 , - 1820 , - 1761 , - 1246 , - 275 , - 2496 , - 613 , - 1922 , - 2775 , - 3172 , - 3113 , - 2598 , - 1627 , - 200 , - 1965 , - 3274 , - 479 , - 876 , - 817 , - 302 , - 2979 , - 1552 , - 3317 , - 978 , - 1831 , - 2228 , - 2169 , - 1654 , - 683 , - 2904 , - 1021 , - 2330 , - 3183 , - 3580 , - 3521 , - 3006 , - 2035 , - 608 , - 2373 , - 34 , - 887 , - 1284 , - 1225 , - 710 , - 3387 , - 1960 , - 77 , - 1386 , - 2239 , - 2636 , - 2577 , - 2062 , - 1091 , - 3312 , - 1429 , - 2738 , - 3591 , - 340 , - 281 , - 3414 , - 2443 , - 1016 , - 2781 , - 442 , - 1295 , - 1692 , - 1633 , - 1118 , - 147 , - 2368 , - 485 , - 1794 , - 2647 , - 3044 , - 2985 , - 2470 , - 1499 , - 72 , - 1837 , - 3146 , - 351 , - 748 , - 689 , - 174 , - 2851 , - 1424 , - 3189 , - 850 , - 1703 , - 2100 , - 2041 , - 1526 , - 555 , - 2776 , - 893 , - 2202 , - 3055 , - 3452 , - 3393 , - 2878 , - 1907 , - 480 , - 2245 , - 3554 , - 759 , - 1156 , - 1097 , - 582 , - 3259 , - 1832 , - 3597 , - 1258 , - 2111 , - 2508 , - 2449 , - 1934 , - 963 , - 3184 , - 1301 , - 2610 , - 3463 , - 212 , - 153 , - 3286 , - 2315 , - 888 , - 2653 , - 314 , - 1167 , - 1564 , - 1505 , - 990 , - 19 , - 2240 , - 357 , - 1666 , - 2519 , - 2916 , - 2857 , - 2342 , - 1371 , - 3592 , - 1709 , - 3018 , - 223 , - 620 , - 561 , - 46 , - 2723 , - 1296 , - 3061 , - 722 , - 1575 , - 1972 , - 1913 , - 1398 , - 427 , - 2648 , - 765 , - 2074 , - 2927 , - 3324 , - 3265 , - 2750 , - 1779 , - 352 , - 2117 , - 3426 , - 631 , - 1028 , - 969 , - 454 , - 3131 , - 1704 , - 3469 , - 1130 , - 1983 , - 2380 , - 2321 , - 1806 , - 835 , - 3056 , - 1173 , - 2482 , - 3335 , - 84 , - 25 , - 3158 , - 2187 , - 760 , - 2525 , - 186 , - 1039 , - 1436 , - 1377 , - 862 , - 3539 , - 2112 , - 229 , - 1538 , - 2391 , - 2788 , - 2729 , - 2214 , - 1243 , - 3464 , - 1581 , - 2890 , - 95 , - 492 , - 433 , - 3566 , - 2595 , - 1168 , - 2933 , - 594 , - 1447 , - 1844 , - 1785 , - 1270 , - 299 , - 2520 , - 637 , - 1946 , - 2799 , - 3196 , - 3137 , - 2622 , - 1651 , - 224 , - 1989 , - 3298 , - 503 , - 900 , - 841 , - 326 , - 3003 , - 1576 , - 3341 , - 1002 , - 1855 , - 2252 , - 2193 , - 1678 , - 707 , - 2928 , - 1045 , - 2354 , - 3207 , - 3604 , - 3545 , - 3030 , - 2059 , - 632 , - 2397 , - 58 , - 911 , - 1308 , - 1249 , - 734 , - 3411 , - 1984 , - 101 , - 1410 , - 2263 , - 2660 , - 2601 , - 2086 , - 1115 , - 3336 , - 1453 , - 2762 , - 3615 , - 364 , - 305 , - 3438 , - 2467 , - 1040 , - 2805 , - 466 , - 1319 , - 1716 , - 1657 , - 1142 , - 171 , - 2392 , - 509 , - 1818 , - 2671 , - 3068 , - 3009 , - 2494 , - 1523 , - 96 , - 1861 , - 3170 , - 375 , - 772 , - 713 , - 198 , - 2875 , - 1448 , - 3213 , - 874 , - 1727 , - 2124 , - 2065 , - 1550 , - 579 , - 2800 , - 917 , - 2226 , - 3079 , - 3476 , - 3417 , - 2902 , - 1931 , - 504 , - 2269 , - 3578 , - 783 , - 1180 , - 1121 , - 606 , - 3283 , - 1856 , - 3621 , - 1282 , - 2135 , - 2532 , - 2473 , - 1958 , - 987 , - 3208 , - 1325 , - 2634 , - 3487 , - 236 , - 177 , - 3310 , - 2339 , - 912 , - 2677 , - 338 , - 1191 , - 1588 , - 1529 , - 1014 , - 43 , - 2264 , - 381 , - 1690 , - 2543 , - 2940 , - 2881 , - 2366 , - 1395 , - 3616 , - 1733 , - 3042 , - 247 , - 644 , - 585 , - 70 , - 2747 , - 1320 , - 3085 , - 746 , - 1599 , - 1996 , - 1937 , - 1422 , - 451 , - 2672 , - 789 , - 2098 , - 2951 , - 3348 , - 3289 , - 2774 , - 1803 , - 376 , - 2141 , - 3450 , - 655 , - 1052 , - 993 , - 478 , - 3155 , - 1728 , - 3493 , - 1154 , - 2007 , - 2404 , - 2345 , - 1830 , - 859 , - 3080 , - 1197 , - 2506 , - 3359 , - 108 , - 49 , - 3182 , - 2211 , - 784 , - 2549 , - 210 , - 1063 , - 1460 , - 1401 , - 886 , - 3563 , - 2136 , - 253 , - 1562 , - 2415 , - 2812 , - 2753 , - 2238 , - 1267 , - 3488 , - 1605 , - 2914 , - 119 , - 516 , - 457 , - 3590 , - 2619 , - 1192 , - 2957 , - 618 , - 1471 , - 1868 , - 1809 , - 1294 , - 323 , - 2544 , - 661 , - 1970 , - 2823 , - 3220 , - 3161 , - 2646 , - 1675 , - 248 , - 2013 , - 3322 , - 527 , - 924 , - 865 , - 350 , - 3027 , - 1600 , - 3365 , - 1026 , - 1879 , - 2276 , - 2217 , - 1702 , - 731 , - 2952 , - 1069 , - 2378 , - 3231 , - 3628 , - 3569 , - 3054 , - 2083 , - 656 , - 2421 , - 82 , - 935 , - 1332 , - 1273 , - 758 , - 3435 , - 2008 , - 125 , - 1434 , - 2287 , - 2684 , - 2625 , - 2110 , - 1139 , - 3360 , - 1477 , - 2786 , - 3639 , - 388 , - 329 , - 3462 , - 2491 , - 1064 , - 2829 , - 490 , - 1343 , - 1740 , - 1681 , - 1166 , - 195 , - 2416 , - 533 , - 1842 , - 2695 , - 3092 , - 3033 , - 2518 , - 1547 , - 120 , - 1885 , - 3194 , - 399 , - 796 , - 737 , - 222 , - 2899 , - 1472 , - 3237 , - 898 , - 1751 , - 2148 , - 2089 , - 1574 , - 603 , - 2824 , - 941 , - 2250 , - 3103 , - 3500 , - 3441 , - 2926 , - 1955 , - 528 , - 2293 , - 3602 , - 807 , - 1204 , - 1145 , - 630 , - 3307 , - 1880 , - 3645 , - 1306 , - 2159 , - 2556 , - 2497 , - 1982 , - 1011 , - 3232 , - 1349 , - 2658 , - 3511 , - 260 , - 201 , - 3334 , - 2363 , - 936 , - 2701 , - 362 , - 1215 , - 1612 , - 1553 , - 1038 , - 67 , - 2288 , - 405 , - 1714 , - 2567 , - 2964 , - 2905 , - 2390 , - 1419 , - 3640 , - 1757 , - 3066 , - 271 , - 668 , - 609 , - 94 , - 2771 , - 1344 , - 3109 , - 770 , - 1623 , - 2020 , - 1961 , - 1446 , - 475 , - 2696 , - 813 , - 2122 , - 2975 , - 3372 , - 3313 , - 2798 , - 1827 , - 400 , - 2165 , - 3474 , - 679 , - 1076 , - 1017 , - 502 , - 3179 , - 1752 , - 3517 , - 1178 , - 2031 , - 2428 , - 2369 , - 1854 , - 883 , - 3104 , - 1221 , - 2530 , - 3383 , - 132 , - 73 , - 3206 , - 2235 , - 808 , - 2573 , - 234 , - 1087 , - 1484 , - 1425 , - 910 , - 3587 , - 2160 , - 277 , - 1586 , - 2439 , - 2836 , - 2777 , - 2262 , - 1291 , - 3512 , - 1629 , - 2938 , - 143 , - 540 , - 481 , - 3614 , - 2643 , - 1216 , - 2981 , - 642 , - 1495 , - 1892 , - 1833 , - 1318 , - 347 , - 2568 , - 685 , - 1994 , - 2847 , - 3244 , - 3185 , - 2670 , - 1699 , - 272 , - 2037 , - 3346 , - 551 , - 948 , - 889 , - 374 , - 3051 , - 1624 , - 3389 , - 1050 , - 1903 , - 2300 , - 2241 , - 1726 , - 755 , - 2976 , - 1093 , - 2402 , - 3255 , - 4 , - 3593 , - 3078 , - 2107 , - 680 , - 2445 , - 106 , - 959 , - 1356 , - 1297 , - 782 , - 3459 , - 2032 , - 149 , - 1458 , - 2311 , - 2708 , - 2649 , - 2134 , - 1163 , - 3384 , - 1501 , - 2810 , - 15 , - 412 , - 353 , - 3486 , - 2515 , - 1088 , - 2853 , - 514 , - 1367 , - 1764 , - 1705 , - 1190 , - 219 , - 2440 , - 557 , - 1866 , - 2719 , - 3116 , - 3057 , - 2542 , - 1571 , - 144 , - 1909 , - 3218 , - 423 , - 820 , - 761 , - 246 , - 2923 , - 1496 , - 3261 , - 922 , - 1775 , - 2172 , - 2113 , - 1598 , - 627 , - 2848 , - 965 , - 2274 , - 3127 , - 3524 , - 3465 , - 2950 , - 1979 , - 552 , - 2317 , - 3626 , - 831 , - 1228 , - 1169 , - 654 , - 3331 , - 1904 , - 21 , - 1330 , - 2183 , - 2580 , - 2521 , - 2006 , - 1035 , - 3256 , - 1373 , - 2682 , - 3535 , - 284 , - 225 , - 3358 , - 2387 , - 960 , - 2725 , - 386 , - 1239 , - 1636 , - 1577 , - 1062 , - 91 , - 2312 , - 429 , - 1738 , - 2591 , - 2988 , - 2929 , - 2414 , - 1443 , - 16 , - 1781 , - 3090 , - 295 , - 692 , - 633 , - 118 , - 2795 , - 1368 , - 3133 , - 794 , - 1647 , - 2044 , - 1985 , - 1470 , - 499 , - 2720 , - 837 , - 2146 , - 2999 , - 3396 , - 3337 , - 2822 , - 1851 , - 424 , - 2189 , - 3498 , - 703 , - 1100 , - 1041 , - 526 , - 3203 , - 1776 , - 3541 , - 1202 , - 2055 , - 2452 , - 2393 , - 1878 , - 907 , - 3128 , - 1245 , - 2554 , - 3407 , - 156 , - 97 , - 3230 , - 2259 , - 832 , - 2597 , - 258 , - 1111 , - 1508 , - 1449 , - 934 , - 3611 , - 2184 , - 301 , - 1610 , - 2463 , - 2860 , - 2801 , - 2286 , - 1315 , - 3536 , - 1653 , - 2962 , - 167 , - 564 , - 505 , - 3638 , - 2667 , - 1240 , - 3005 , - 666 , - 1519 , - 1916 , - 1857 , - 1342 , - 371 , - 2592 , - 709 , - 2018 , - 2871 , - 3268 , - 3209 , - 2694 , - 1723 , - 296 , - 2061 , - 3370 , - 575 , - 972 , - 913 , - 398 , - 3075 , - 1648 , - 3413 , - 1074 , - 1927 , - 2324 , - 2265 , - 1750 , - 779 , - 3000 , - 1117 , - 2426 , - 3279 , - 28 , - 3617 , - 3102 , - 2131 , - 704 , - 2469 , - 130 , - 983 , - 1380 , - 1321 , - 806 , - 3483 , - 2056 , - 173 , - 1482 , - 2335 , - 2732 , - 2673 , - 2158 , - 1187 , - 3408 , - 1525 , - 2834 , - 39 , - 436 , - 377 , - 3510 , - 2539 , - 1112 , - 2877 , - 538 , - 1391 , - 1788 , - 1729 , - 1214 , - 243 , - 2464 , - 581 , - 1890 , - 2743 , - 3140 , - 3081 , - 2566 , - 1595 , - 168 , - 1933 , - 3242 , - 447 , - 844 , - 785 , - 270 , - 2947 , - 1520 , - 3285 , - 946 , - 1799 , - 2196 , - 2137 , - 1622 , - 651 , - 2872 , - 989 , - 2298 , - 3151 , - 3548 , - 3489 , - 2974 , - 2003 , - 576 , - 2341 , - 2 , - 855 , - 1252 , - 1193 , - 678 , - 3355 , - 1928 , - 45 , - 1354 , - 2207 , - 2604 , - 2545 , - 2030 , - 1059 , - 3280 , - 1397 , - 2706 , - 3559 , - 308 , - 249 , - 3382 , - 2411 , - 984 , - 2749 , - 410 , - 1263 , - 1660 , - 1601 , - 1086 , - 115 , - 2336 , - 453 , - 1762 , - 2615 , - 3012 , - 2953 , - 2438 , - 1467 , - 40 , - 1805 , - 3114 , - 319 , - 716 , - 657 , - 142 , - 2819 , - 1392 , - 3157 , - 818 , - 1671 , - 2068 , - 2009 , - 1494 , - 523 , - 2744 , - 861 , - 2170 , - 3023 , - 3420 , - 3361 , - 2846 , - 1875 , - 448 , - 2213 , - 3522 , - 727 , - 1124 , - 1065 , - 550 , - 3227 , - 1800 , - 3565 , - 1226 , - 2079 , - 2476 , - 2417 , - 1902 , - 931 , - 3152 , - 1269 , - 2578 , - 3431 , - 180 , - 121 , - 3254 , - 2283 , - 856 , - 2621 , - 282 , - 1135 , - 1532 , - 1473 , - 958 , - 3635 , - 2208 , - 325 , - 1634 , - 2487 , - 2884 , - 2825 , - 2310 , - 1339 , - 3560 , - 1677 , - 2986 , - 191 , - 588 , - 529 , - 14 , - 2691 , - 1264 , - 3029 , - 690 , - 1543 , - 1940 , - 1881 , - 1366 , - 395 , - 2616 , - 733 , - 2042 , - 2895 , - 3292 , - 3233 , - 2718 , - 1747 , - 320 , - 2085 , - 3394 , - 599 , - 996 , - 937 , - 422 , - 3099 , - 1672 , - 3437 , - 1098 , - 1951 , - 2348 , - 2289 , - 1774 , - 803 , - 3024 , - 1141 , - 2450 , - 3303 , - 52 , - 3641 , - 3126 , - 2155 , - 728 , - 2493 , - 154 , - 1007 , - 1404 , - 1345 , - 830 , - 3507 , - 2080 , - 197 , - 1506 , - 2359 , - 2756 , - 2697 , - 2182 , - 1211 , - 3432 , - 1549 , - 2858 , - 63 , - 460 , - 401 , - 3534 , - 2563 , - 1136 , - 2901 , - 562 , - 1415 , - 1812 , - 1753 , - 1238 , - 267 , - 2488 , - 605 , - 1914 , - 2767 , - 3164 , - 3105 , - 2590 , - 1619 , - 192 , - 1957 , - 3266 , - 471 , - 868 , - 809 , - 294 , - 2971 , - 1544 , - 3309 , - 970 , - 1823 , - 2220 , - 2161 , - 1646 , - 675 , - 2896 , - 1013 , - 2322 , - 3175 , - 3572 , - 3513 , - 2998 , - 2027 , - 600 , - 2365 , - 26 , - 879 , - 1276 , - 1217 , - 702 , - 3379 , - 1952 , - 69 , - 1378 , - 2231 , - 2628 , - 2569 , - 2054 , - 1083 , - 3304 , - 1421 , - 2730 , - 3583 , - 332 , - 273 , - 3406 , - 2435 , - 1008 , - 2773 , - 434 , - 1287 , - 1684 , - 1625 , - 1110 , - 139 , - 2360 , - 477 , - 1786 , - 2639 , - 3036 , - 2977 , - 2462 , - 1491 , - 64 , - 1829 , - 3138 , - 343 , - 740 , - 681 , - 166 , - 2843 , - 1416 , - 3181 , - 842 , - 1695 , - 2092 , - 2033 , - 1518 , - 547 , - 2768 , - 885 , - 2194 , - 3047 , - 3444 , - 3385 , - 2870 , - 1899 , - 472 , - 2237 , - 3546 , - 751 , - 1148 , - 1089 , - 574 , - 3251 , - 1824 , - 3589 , - 1250 , - 2103 , - 2500 , - 2441 , - 1926 , - 955 , - 3176 , - 1293 , - 2602 , - 3455 , - 204 , - 145 , - 3278 , - 2307 , - 880 , - 2645 , - 306 , - 1159 , - 1556 , - 1497 , - 982 , - 11 , - 2232 , - 349 , - 1658 , - 2511 , - 2908 , - 2849 , - 2334 , - 1363 , - 3584 , - 1701 , - 3010 , - 215 , - 612 , - 553 , - 38 , - 2715 , - 1288 , - 3053 , - 714 , - 1567 , - 1964 , - 1905 , - 1390 , - 419 , - 2640 , - 757 , - 2066 , - 2919 , - 3316 , - 3257 , - 2742 , - 1771 , - 344 , - 2109 , - 3418 , - 623 , - 1020 , - 961 , - 446 , - 3123 , - 1696 , - 3461 , - 1122 , - 1975 , - 2372 , - 2313 , - 1798 , - 827 , - 3048 , - 1165 , - 2474 , - 3327 , - 76 , - 17 , - 3150 , - 2179 , - 752 , - 2517 , - 178 , - 1031 , - 1428 , - 1369 , - 854 , - 3531 , - 2104 , - 221 , - 1530 , - 2383 , - 2780 , - 2721 , - 2206 , - 1235 , - 3456 , - 1573 , - 2882 , - 87 , - 484 , - 425 , - 3558 , - 2587 , - 1160 , - 2925 , - 586 , - 1439 , - 1836 , - 1777 , - 1262 , - 291 , - 2512 , - 629 , - 1938 , - 2791 , - 3188 , - 3129 , - 2614 , - 1643 , - 216 , - 1981 , - 3290 , - 495 , - 892 , - 833 , - 318 , - 2995 , - 1568 , - 3333 , - 994 , - 1847 , - 2244 , - 2185 , - 1670 , - 699 , - 2920 , - 1037 , - 2346 , - 3199 , - 3596 , - 3537 , - 3022 , - 2051 , - 624 , - 2389 , - 50 , - 903 , - 1300 , - 1241 , - 726 , - 3403 , - 1976 , - 93 , - 1402 , - 2255 , - 2652 , - 2593 , - 2078 , - 1107 , - 3328 , - 1445 , - 2754 , - 3607 , - 356 , - 297 , - 3430 , - 2459 , - 1032 , - 2797 , - 458 , - 1311 , - 1708 , - 1649 , - 1134 , - 163 , - 2384 , - 501 , - 1810 , - 2663 , - 3060 , - 3001 , - 2486 , - 1515 , - 88 , - 1853 , - 3162 , - 367 , - 764 , - 705 , - 190 , - 2867 , - 1440 , - 3205 , - 866 , - 1719 , - 2116 , - 2057 , - 1542 , - 571 , - 2792 , - 909 , - 2218 , - 3071 , - 3468 , - 3409 , - 2894 , - 1923 , - 496 , - 2261 , - 3570 , - 775 , - 1172 , - 1113 , - 598 , - 3275 , - 1848 , - 3613 , - 1274 , - 2127 , - 2524 , - 2465 , - 1950 , - 979 , - 3200 , - 1317 , - 2626 , - 3479 , - 228 , - 169 , - 3302 , - 2331 , - 904 , - 2669 , - 330 , - 1183 , - 1580 , - 1521 , - 1006 , - 35 , - 2256 , - 373 , - 1682 , - 2535 , - 2932 , - 2873 , - 2358 , - 1387 , - 3608 , - 1725 , - 3034 , - 239 , - 636 , - 577 , - 62 , - 2739 , - 1312 , - 3077 , - 738 , - 1591 , - 1988 , - 1929 , - 1414 , - 443 , - 2664 , - 781 , - 2090 , - 2943 , - 3340 , - 3281 , - 2766 , - 1795 , - 368 , - 2133 , - 3442 , - 647 , - 1044 , - 985 , - 470 , - 3147 , - 1720 , - 3485 , - 1146 , - 1999 , - 2396 , - 2337 , - 1822 , - 851 , - 3072 , - 1189 , - 2498 , - 3351 , - 100 , - 41 , - 3174 , - 2203 , - 776 , - 2541 , - 202 , - 1055 , - 1452 , - 1393 , - 878 , - 3555 , - 2128 , - 245 , - 1554 , - 2407 , - 2804 , - 2745 , - 2230 , - 1259 , - 3480 , - 1597 , - 2906 , - 111 , - 508 , - 449 , - 3582 , - 2611 , - 1184 , - 2949 , - 610 , - 1463 , - 1860 , - 1801 , - 1286 , - 315 , - 2536 , - 653 , - 1962 , - 2815 , - 3212 , - 3153 , - 2638 , - 1667 , - 240 , - 2005 , - 3314 , - 519 , - 916 , - 857 , - 342 , - 3019 , - 1592 , - 3357 , - 1018 , - 1871 , - 2268 , - 2209 , - 1694 , - 723 , - 2944 , - 1061 , - 2370 , - 3223 , - 3620 , - 3561 , - 3046 , - 2075 , - 648 , - 2413 , - 74 , - 927 , - 1324 , - 1265 , - 750 , - 3427 , - 2000 , - 117 , - 1426 , - 2279 , - 2676 , - 2617 , - 2102 , - 1131 , - 3352 , - 1469 , - 2778 , - 3631 , - 380 , - 321 , - 3454 , - 2483 , - 1056 , - 2821 , - 482 , - 1335 , - 1732 , - 1673 , - 1158 , - 187 , - 2408 , - 525 , - 1834 , - 2687 , - 3084 , - 3025 , - 2510 , - 1539 , - 112 , - 1877 , - 3186 , - 391 , - 788 , - 729 , - 214 , - 2891 , - 1464 , - 3229 , - 890 , - 1743 , - 2140 , - 2081 , - 1566 , - 595 , - 2816 , - 933 , - 2242 , - 3095 , - 3492 , - 3433 , - 2918 , - 1947 , - 520 , - 2285 , - 3594 , - 799 , - 1196 , - 1137 , - 622 , - 3299 , - 1872 , - 3637 , - 1298 , - 2151 , - 2548 , - 2489 , - 1974 , - 1003 , - 3224 , - 1341 , - 2650 , - 3503 , - 252 , - 193 , - 3326 , - 2355 , - 928 , - 2693 , - 354 , - 1207 , - 1604 , - 1545 , - 1030 , - 59 , - 2280 , - 397 , - 1706 , - 2559 , - 2956 , - 2897 , - 2382 , - 1411 , - 3632 , - 1749 , - 3058 , - 263 , - 660 , - 601 , - 86 , - 2763 , - 1336 , - 3101 , - 762 , - 1615 , - 2012 , - 1953 , - 1438 , - 467 , - 2688 , - 805 , - 2114 , - 2967 , - 3364 , - 3305 , - 2790 , - 1819 , - 392 , - 2157 , - 3466 , - 671 , - 1068 , - 1009 , - 494 , - 3171 , - 1744 , - 3509 , - 1170 , - 2023 , - 2420 , - 2361 , - 1846 , - 875 , - 3096 , - 1213 , - 2522 , - 3375 , - 124 , - 65 , - 3198 , - 2227 , - 800 , - 2565 , - 226 , - 1079 , - 1476 , - 1417 , - 902 , - 3579 , - 2152 , - 269 , - 1578 , - 2431 , - 2828 , - 2769 , - 2254 , - 1283 , - 3504 , - 1621 , - 2930 , - 135 , - 532 , - 473 , - 3606 , - 2635 , - 1208 , - 2973 , - 634 , - 1487 , - 1884 , - 1825 , - 1310 , - 339 , - 2560 , - 677 , - 1986 , - 2839 , - 3236 , - 3177 , - 2662 , - 1691 , - 264 , - 2029 , - 3338 , - 543 , - 940 , - 881 , - 366 , - 3043 , - 1616 , - 3381 , - 1042 , - 1895 , - 2292 , - 2233 , - 1718 , - 747 , - 2968 , - 1085 , - 2394 , - 3247 , - 3644 , - 3585 , - 3070 , - 2099 , - 672 , - 2437 , - 98 , - 951 , - 1348 , - 1289 , - 774 , - 3451 , - 2024 , - 141 , - 1450 , - 2303 , - 2700 , - 2641 , - 2126 , - 1155 , - 3376 , - 1493 , - 2802 , - 7 , - 404 , - 345 , - 3478 , - 2507 , - 1080 , - 2845 , - 506 , - 1359 , - 1756 , - 1697 , - 1182 , - 211 , - 2432 , - 549 , - 1858 , - 2711 , - 3108 , - 3049 , - 2534 , - 1563 , - 136 , - 1901 , - 3210 , - 415 , - 812 , - 753 , - 238 , - 2915 , - 1488 , - 3253 , - 914 , - 1767 , - 2164 , - 2105 , - 1590 , - 619 , - 2840 , - 957 , - 2266 , - 3119 , - 3516 , - 3457 , - 2942 , - 1971 , - 544 , - 2309 , - 3618 , - 823 , - 1220 , - 1161 , - 646 , - 3323 , - 1896 , - 13 , - 1322 , - 2175 , - 2572 , - 2513 , - 1998 , - 1027 , - 3248 , - 1365 , - 2674 , - 3527 , - 276 , - 217 , - 3350 , - 2379 , - 952 , - 2717 , - 378 , - 1231 , - 1628 , - 1569 , - 1054 , - 83 , - 2304 , - 421 , - 1730 , - 2583 , - 2980 , - 2921 , - 2406 , - 1435 , - 8 , - 1773 , - 3082 , - 287 , - 684 , - 625 , - 110 , - 2787 , - 1360 , - 3125 , - 786 , - 1639 , - 2036 , - 1977 , - 1462 , - 491 , - 2712 , - 829 , - 2138 , - 2991 , - 3388 , - 3329 , - 2814 , - 1843 , - 416 , - 2181 , - 3490 , - 695 , - 1092 , - 1033 , - 518 , - 3195 , - 1768 , - 3533 , - 1194 , - 2047 , - 2444 , - 2385 , - 1870 , - 899 , - 3120 , - 1237 , - 2546 , - 3399 , - 148 , - 89 , - 3222 , - 2251 , - 824 , - 2589 , - 250 , - 1103 , - 1500 , - 1441 , - 926 , - 3603 , - 2176 , - 293 , - 1602 , - 2455 , - 2852 , - 2793 , - 2278 , - 1307 , - 3528 , - 1645 , - 2954 , - 159 , - 556 , - 497 , - 3630 , - 2659 , - 1232 , - 2997 , - 658 , - 1511 , - 1908 , - 1849 , - 1334 , - 363 , - 2584 , - 701 , - 2010 , - 2863 , - 3260 , - 3201 , - 2686 , - 1715 , - 288 , - 2053 , - 3362 , - 567 , - 964 , - 905 , - 390 , - 3067 , - 1640 , - 3405 , - 1066 , - 1919 , - 2316 , - 2257 , - 1742 , - 771 , - 2992 , - 1109 , - 2418 , - 3271 , - 20 , - 3609 , - 3094 , - 2123 , - 696 , - 2461 , - 122 , - 975 , - 1372 , - 1313 , - 798 , - 3475 , - 2048 , - 165 , - 1474 , - 2327 , - 2724 , - 2665 , - 2150 , - 1179 , - 3400 , - 1517 , - 2826 , - 31 , - 428 , - 369 , - 3502 , - 2531 , - 1104 , - 2869 , - 530 , - 1383 , - 1780 , - 1721 , - 1206 , - 235 , - 2456 , - 573 , - 1882 , - 2735 , - 3132 , - 3073 , - 2558 , - 1587 , - 160 , - 1925 , - 3234 , - 439 , - 836 , - 777 , - 262 , - 2939 , - 1512 , - 3277 , - 938 , - 1791 , - 2188 , - 2129 , - 1614 , - 643 , - 2864 , - 981 , - 2290 , - 3143 , - 3540 , - 3481 , - 2966 , - 1995 , - 568 , - 2333 , - 3642 , - 847 , - 1244 , - 1185 , - 670 , - 3347 , - 1920 , - 37 , - 1346 , - 2199 , - 2596 , - 2537 , - 2022 , - 1051 , - 3272 , - 1389 , - 2698 , - 3551 , - 300 , - 241 , - 3374 , - 2403 , - 976 , - 2741 , - 402 , - 1255 , - 1652 , - 1593 , - 1078 , - 107 , - 2328 , - 445 , - 1754 , - 2607 , - 3004 , - 2945 , - 2430 , - 1459 , - 32 , - 1797 , - 3106 , - 311 , - 708 , - 649 , - 134 , - 2811 , - 1384 , - 3149 , - 810 , - 1663 , - 2060 , - 2001 , - 1486 , - 515 , - 2736 , - 853 , - 2162 , - 3015 , - 3412 , - 3353 , - 2838 , - 1867 , - 440 , - 2205 , - 3514 , - 719 , - 1116 , - 1057 , - 542 , - 3219 , - 1792 , - 3557 , - 1218 , - 2071 , - 2468 , - 2409 , - 1894 , - 923 , - 3144 , - 1261 , - 2570 , - 3423 , - 172 , - 113 , - 3246 , - 2275 , - 848 , - 2613 , - 274 , - 1127 , - 1524 , - 1465 , - 950 , - 3627 , - 2200 , - 317 , - 1626 , - 2479 , - 2876 , - 2817 , - 2302 , - 1331 , - 3552 , - 1669 , - 2978 , - 183 , - 580 , - 521 , - 6 , - 2683 , - 1256 , - 3021 , - 682 , - 1535 , - 1932 , - 1873 , - 1358 , - 387 , - 2608 , - 725 , - 2034 , - 2887 , - 3284 , - 3225 , - 2710 , - 1739 , - 312 , - 2077 , - 3386 , - 591 , - 988 , - 929 , - 414 , - 3091 , - 1664 , - 3429 , - 1090 , - 1943 , - 2340 , - 2281 , - 1766 , - 795 , - 3016 , - 1133 , - 2442 , - 3295 , - 44 , - 3633 , - 3118 , - 2147 , - 720 , - 2485 , - 146 , - 999 , - 1396 , - 1337 , - 822 , - 3499 , - 2072 , - 189 , - 1498 , - 2351 , - 2748 , - 2689 , - 2174 , - 1203 , - 3424 , - 1541 , - 2850 , - 55 , - 452 , - 393 , - 3526 , - 2555 , - 1128 , - 2893 , - 554 , - 1407 , - 1804 , - 1745 , - 1230 , - 259 , - 2480 , - 597 , - 1906 , - 2759 , - 3156 , - 3097 , - 2582 , - 1611 , - 184 , - 1949 , - 3258 , - 463 , - 860 , - 801 , - 286 , - 2963 , - 1536 , - 3301 , - 962 , - 1815 , - 2212 , - 2153 , - 1638 , - 667 , - 2888 , - 1005 , - 2314 , - 3167 , - 3564 , - 3505 , - 2990 , - 2019 , - 592 , - 2357 , - 18 , - 871 , - 1268 , - 1209 , - 694 , - 3371 , - 1944 , - 61 , - 1370 , - 2223 , - 2620 , - 2561 , - 2046 , - 1075 , - 3296 , - 1413 , - 2722 , - 3575 , - 324 , - 265 , - 3398 , - 2427 , - 1000 , - 2765 , - 426 , - 1279 , - 1676 , - 1617 , - 1102 , - 131 , - 2352 , - 469 , - 1778 , - 2631 , - 3028 , - 2969 , - 2454 , - 1483 , - 56 , - 1821 , - 3130 , - 335 , - 732 , - 673 , - 158 , - 2835 , - 1408 , - 3173 , - 834 , - 1687 , - 2084 , - 2025 , - 1510 , - 539 , - 2760 , - 877 , - 2186 , - 3039 , - 3436 , - 3377 , - 2862 , - 1891 , - 464 , - 2229 , - 3538 , - 743 , - 1140 , - 1081 , - 566 , - 3243 , - 1816 , - 3581 , - 1242 , - 2095 , - 2492 , - 2433 , - 1918 , - 947 , - 3168 , - 1285 , - 2594 , - 3447 , - 196 , - 137 , - 3270 , - 2299 , - 872 , - 2637 , - 298 , - 1151 , - 1548 , - 1489 , - 974 , - 3 , - 2224 , - 341 , - 1650 , - 2503 , - 2900 , - 2841 , - 2326 , - 1355 , - 3576 , - 1693 , - 3002 , - 207 , - 604 , - 545 , - 30 , - 2707 , - 1280 , - 3045 , - 706 , - 1559 , - 1956 , - 1897 , - 1382 , - 411 , - 2632 , - 749 , - 2058 , - 2911 , - 3308 , - 3249 , - 2734 , - 1763 , - 336 , - 2101 , - 3410 , - 615 , - 1012 , - 953 , - 438 , - 3115 , - 1688 , - 3453 , - 1114 , - 1967 , - 2364 , - 2305 , - 1790 , - 819 , - 3040 , - 1157 , - 2466 , - 3319 , - 68 , - 9 , - 3142 , - 2171 , - 744 , - 2509 , - 170 , - 1023 , - 1420 , - 1361 , - 846 , - 3523 , - 2096 , - 213 , - 1522 , - 2375 , - 2772 , - 2713 , - 2198 , - 1227 , - 3448 , - 1565 , - 2874 , - 79 , - 476 , - 417 , - 3550 , - 2579 , - 1152 , - 2917 , - 578 , - 1431 , - 1828 , - 1769 , - 1254 , - 283 , - 2504 , - 621 , - 1930 , - 2783 , - 3180 , - 3121 , - 2606 , - 1635 , - 208 , - 1973 , - 3282 , - 487 , - 884 , - 825 , - 310 , - 2987 , - 1560 , - 3325 , - 986 , - 1839 , - 2236 , - 2177 , - 1662 , - 691 , - 2912 , - 1029 , - 2338 , - 3191 , - 3588 , - 3529 , - 3014 , - 2043 , - 616 , - 2381 , - 42 , - 895 , - 1292 , - 1233 , - 718 , - 3395 , - 1968 , - 85 , - 1394 , - 2247 , - 2644 , - 2585 , - 2070 , - 1099 , - 3320 , - 1437 , - 2746 , - 3599 , - 348 , - 289 , - 3422 , - 2451 , - 1024 , - 2789 , - 450 , - 1303 , - 1700 , - 1641 , - 1126 , - 155 , - 2376 , - 493 , - 1802 , - 2655 , - 3052 , - 2993 , - 2478 , - 1507 , - 80 , - 1845 , - 3154 , - 359 , - 756 , - 697 , - 182 , - 2859 , - 1432 , - 3197 , - 858 , - 1711 , - 2108 , - 2049 , - 1534 , - 563 , - 2784 , - 901 , - 2210 , - 3063 , - 3460 , - 3401 , - 2886 , - 1915 , - 488 , - 2253 , - 3562 , - 767 , - 1164 , - 1105 , - 590 , - 3267 , - 1840 , - 3605 , - 1266 , - 2119 , - 2516 , - 2457 , - 1942 , - 971 , - 3192 , - 1309 , - 2618 , - 3471 , - 220 , - 161 , - 3294 , - 2323 , - 896 , - 2661 , - 322 , - 1175 , - 1572 , - 1513 , - 998 , - 27 , - 2248 , - 365 , - 1674 , - 2527 , - 2924 , - 2865 , - 2350 , - 1379 , - 3600 , - 1717 , - 3026 , - 231 , - 628 , - 569 , - 54 , - 2731 , - 1304 , - 3069 , - 730 , - 1583 , - 1980 , - 1921 , - 1406 , - 435 , - 2656 , - 773 , - 2082 , - 2935 , - 3332 , - 3273 , - 2758 , - 1787 , - 360 , - 2125 , - 3434 , - 639 , - 1036 , - 977 , - 462 , - 3139 , - 1712 , - 3477 , - 1138 , - 1991 , - 2388 , - 2329 , - 1814 , - 843 , - 3064 , - 1181 , - 2490 , - 3343 , - 92 , - 33 , - 3166 , - 2195 , - 768 , - 2533 , - 194 , - 1047 , - 1444 , - 1385 , - 870 , - 3547 , - 2120 , - 237 , - 1546 , - 2399 , - 2796 , - 2737 , - 2222 , - 1251 , - 3472 , - 1589 , - 2898 , - 103 , - 500 , - 441 , - 3574 , - 2603 , - 1176 , - 2941 , - 602 , - 1455 , - 1852 , - 1793 , - 1278 , - 307 , - 2528 , - 645 , - 1954 , - 2807 , - 3204 , - 3145 , - 2630 , - 1659 , - 232 , - 1997 , - 3306 , - 511 , - 908 , - 849 , - 334 , - 3011 , - 1584 , - 3349 , - 1010 , - 1863 , - 2260 , - 2201 , - 1686 , - 715 , - 2936 , - 1053 , - 2362 , - 3215 , - 3612 , - 3553 , - 3038 , - 2067 , - 640 , - 2405 , - 66 , - 919 , - 1316 , - 1257 , - 742 , - 3419 , - 1992 , - 109 , - 1418 , - 2271 , - 2668 , - 2609 , - 2094 , - 1123 , - 3344 , - 1461 , - 2770 , - 3623 , - 372 , - 313 , - 3446 , - 2475 , - 1048 , - 2813 , - 474 , - 1327 , - 1724 , - 1665 , - 1150 , - 179 , - 2400 , - 517 , - 1826 , - 2679 , - 3076 , - 3017 , - 2502 , - 1531 , - 104 , - 1869 , - 3178 , - 383 , - 780 , - 721 , - 206 , - 2883 , - 1456 , - 3221 , - 882 , - 1735 , - 2132 , - 2073 , - 1558 , - 587 , - 2808 , - 925 , - 2234 , - 3087 , - 3484 , - 3425 , - 2910 , - 1939 , - 512 , - 2277 , - 3586 , - 791 , - 1188 , - 1129 , - 614 , - 3291 , - 1864 , - 3629 , - 1290 , - 2143 , - 2540 , - 2481 , - 1966 , - 995 , - 3216 , - 1333 , - 2642 , - 3495 , - 244 , - 185 , - 3318 , - 2347 , - 920 , - 2685 , - 346 , - 1199 , - 1596 , - 1537 , - 1022 , - 51 , - 2272 , - 389 , - 1698 , - 2551 , - 2948 , - 2889 , - 2374 , - 1403 , - 3624 , - 1741 , - 3050 , - 255 , - 652 , - 593 , - 78 , - 2755 , - 1328 , - 3093 , - 754 , - 1607 , - 2004 , - 1945 , - 1430 , - 459 , - 2680 , - 797 , - 2106 , - 2959 , - 3356 , - 3297 , - 2782 , - 1811 , - 384 , - 2149 , - 3458 , - 663 , - 1060 , - 1001 , - 486 , - 3163 , - 1736 , - 3501 , - 1162 , - 2015 , - 2412 , - 2353 , - 1838 , - 867 , - 3088 , - 1205 , - 2514 , - 3367 , - 116 , - 57 , - 3190 , - 2219 , - 792 , - 2557 , - 218 , - 1071 , - 1468 , - 1409 , - 894 , - 3571 , - 2144 , - 261 , - 1570 , - 2423 , - 2820 , - 2761 , - 2246 , - 1275 , - 3496 , - 1613 , - 2922 , - 127 , - 524 , - 465 , - 3598 , - 2627 , - 1200 , - 2965 , - 626 , - 1479 , - 1876 , - 1817 , - 1302 , - 331 , - 2552 , - 669 , - 1978 , - 2831 , - 3228 , - 3169 , - 2654 , - 1683 , - 256 , - 2021 , - 3330 , - 535 , - 932 , - 873 , - 358 , - 3035 , - 1608 , - 3373 , - 1034 , - 1887 , - 2284 , - 2225 , - 1710 , - 739 , - 2960 , - 1077 , - 2386 , - 3239 , - 3636 , - 3577 , - 3062 , - 2091 , - 664 , - 2429 , - 90 , - 943 , - 1340 , - 1281 , - 766 , - 3443 , - 2016 , - 133 , - 1442 , - 2295 , - 2692 , - 2633 , - 2118 , - 1147 , - 3368 , - 1485 , - 2794 , - 3647 , - 396 , - 337 , - 3470 , - 2499 , - 1072 , - 2837 , - 498 , - 1351 , - 1748 , - 1689 , - 1174 , - 203 , - 2424 , - 541 , - 1850 , - 2703 , - 3100 , - 3041 , - 2526 , - 1555 , - 128 , - 1893 , - 3202 , - 407 , - 804 , - 745 , - 230 , - 2907 , - 1480 , - 3245 , - 906 , - 1759 , - 2156 , - 2097 , - 1582 , - 611 , - 2832 , - 949 , - 2258 , - 3111 , - 3508 , - 3449 , - 2934 , - 1963 , - 536 , - 2301 , - 3610 , - 815 , - 1212 , - 1153 , - 638 , - 3315 , - 1888 , - 5 , - 1314 , - 2167 , - 2564 , - 2505 , - 1990 , - 1019 , - 3240 , - 1357 , - 2666 , - 3519 , - 268 , - 209 , - 3342 , - 2371 , - 944 , - 2709 , - 370 , - 1223 , - 1620 , - 1561 , - 1046 , - 75 , - 2296 , - 413 , - 1722 , - 2575 , - 2972 , - 2913 , - 2398 , - 1427 , - 0 , - 2903 , - 2558 , - 2677 , - 3260 , - 595 , - 2106 , - 369 , - 2808 , - 1999 , - 1654 , - 1773 , - 2356 , - 3403 , - 1202 , - 3177 , - 1904 , - 1095 , - 750 , - 869 , - 1452 , - 2499 , - 298 , - 2273 , - 1000 , - 191 , - 3558 , - 3677 , - 548 , - 1595 , - 3106 , - 1369 , - 96 , - 2999 , - 2654 , - 2773 , - 3356 , - 691 , - 2202 , - 465 , - 2904 , - 2095 , - 1750 , - 1869 , - 2452 , - 3499 , - 1298 , - 3273 , - 2000 , - 1191 , - 846 , - 965 , - 1548 , - 2595 , - 394 , - 2369 , - 1096 , - 287 , - 3654 , - 61 , - 644 , - 1691 , - 3202 , - 1465 , - 192 , - 3095 , - 2750 , - 2869 , - 3452 , - 787 , - 2298 , - 561 , - 3000 , - 2191 , - 1846 , - 1965 , - 2548 , - 3595 , - 1394 , - 3369 , - 2096 , - 1287 , - 942 , - 1061 , - 1644 , - 2691 , - 490 , - 2465 , - 1192 , - 383 , - 38 , - 157 , - 740 , - 1787 , - 3298 , - 1561 , - 288 , - 3191 , - 2846 , - 2965 , - 3548 , - 883 , - 2394 , - 657 , - 3096 , - 2287 , - 1942 , - 2061 , - 2644 , - 3691 , - 1490 , - 3465 , - 2192 , - 1383 , - 1038 , - 1157 , - 1740 , - 2787 , - 586 , - 2561 , - 1288 , - 479 , - 134 , - 253 , - 836 , - 1883 , - 3394 , - 1657 , - 384 , - 3287 , - 2942 , - 3061 , - 3644 , - 979 , - 2490 , - 753 , - 3192 , - 2383 , - 2038 , - 2157 , - 2740 , - 75 , - 1586 , - 3561 , - 2288 , - 1479 , - 1134 , - 1253 , - 1836 , - 2883 , - 682 , - 2657 , - 1384 , - 575 , - 230 , - 349 , - 932 , - 1979 , - 3490 , - 1753 , - 480 , - 3383 , - 3038 , - 3157 , - 28 , - 1075 , - 2586 , - 849 , - 3288 , - 2479 , - 2134 , - 2253 , - 2836 , - 171 , - 1682 , - 3657 , - 2384 , - 1575 , - 1230 , - 1349 , - 1932 , - 2979 , - 778 , - 2753 , - 1480 , - 671 , - 326 , - 445 , - 1028 , - 2075 , - 3586 , - 1849 , - 576 , - 3479 , - 3134 , - 3253 , - 124 , - 1171 , - 2682 , - 945 , - 3384 , - 2575 , - 2230 , - 2349 , - 2932 , - 267 , - 1778 , - 41 , - 2480 , - 1671 , - 1326 , - 1445 , - 2028 , - 3075 , - 874 , - 2849 , - 1576 , - 767 , - 422 , - 541 , - 1124 , - 2171 , - 3682 , - 1945 , - 672 , - 3575 , - 3230 , - 3349 , - 220 , - 1267 , - 2778 , - 1041 , - 3480 , - 2671 , - 2326 , - 2445 , - 3028 , - 363 , - 1874 , - 137 , - 2576 , - 1767 , - 1422 , - 1541 , - 2124 , - 3171 , - 970 , - 2945 , - 1672 , - 863 , - 518 , - 637 , - 1220 , - 2267 , - 66 , - 2041 , - 768 , - 3671 , - 3326 , - 3445 , - 316 , - 1363 , - 2874 , - 1137 , - 3576 , - 2767 , - 2422 , - 2541 , - 3124 , - 459 , - 1970 , - 233 , - 2672 , - 1863 , - 1518 , - 1637 , - 2220 , - 3267 , - 1066 , - 3041 , - 1768 , - 959 , - 614 , - 733 , - 1316 , - 2363 , - 162 , - 2137 , - 864 , - 55 , - 3422 , - 3541 , - 412 , - 1459 , - 2970 , - 1233 , - 3672 , - 2863 , - 2518 , - 2637 , - 3220 , - 555 , - 2066 , - 329 , - 2768 , - 1959 , - 1614 , - 1733 , - 2316 , - 3363 , - 1162 , - 3137 , - 1864 , - 1055 , - 710 , - 829 , - 1412 , - 2459 , - 258 , - 2233 , - 960 , - 151 , - 3518 , - 3637 , - 508 , - 1555 , - 3066 , - 1329 , - 56 , - 2959 , - 2614 , - 2733 , - 3316 , - 651 , - 2162 , - 425 , - 2864 , - 2055 , - 1710 , - 1829 , - 2412 , - 3459 , - 1258 , - 3233 , - 1960 , - 1151 , - 806 , - 925 , - 1508 , - 2555 , - 354 , - 2329 , - 1056 , - 247 , - 3614 , - 21 , - 604 , - 1651 , - 3162 , - 1425 , - 152 , - 3055 , - 2710 , - 2829 , - 3412 , - 747 , - 2258 , - 521 , - 2960 , - 2151 , - 1806 , - 1925 , - 2508 , - 3555 , - 1354 , - 3329 , - 2056 , - 1247 , - 902 , - 1021 , - 1604 , - 2651 , - 450 , - 2425 , - 1152 , - 343 , - 3710 , - 117 , - 700 , - 1747 , - 3258 , - 1521 , - 248 , - 3151 , - 2806 , - 2925 , - 3508 , - 843 , - 2354 , - 617 , - 3056 , - 2247 , - 1902 , - 2021 , - 2604 , - 3651 , - 1450 , - 3425 , - 2152 , - 1343 , - 998 , - 1117 , - 1700 , - 2747 , - 546 , - 2521 , - 1248 , - 439 , - 94 , - 213 , - 796 , - 1843 , - 3354 , - 1617 , - 344 , - 3247 , - 2902 , - 3021 , - 3604 , - 939 , - 2450 , - 713 , - 3152 , - 2343 , - 1998 , - 2117 , - 2700 , - 35 , - 1546 , - 3521 , - 2248 , - 1439 , - 1094 , - 1213 , - 1796 , - 2843 , - 642 , - 2617 , - 1344 , - 535 , - 190 , - 309 , - 892 , - 1939 , - 3450 , - 1713 , - 440 , - 3343 , - 2998 , - 3117 , - 3700 , - 1035 , - 2546 , - 809 , - 3248 , - 2439 , - 2094 , - 2213 , - 2796 , - 131 , - 1642 , - 3617 , - 2344 , - 1535 , - 1190 , - 1309 , - 1892 , - 2939 , - 738 , - 2713 , - 1440 , - 631 , - 286 , - 405 , - 988 , - 2035 , - 3546 , - 1809 , - 536 , - 3439 , - 3094 , - 3213 , - 84 , - 1131 , - 2642 , - 905 , - 3344 , - 2535 , - 2190 , - 2309 , - 2892 , - 227 , - 1738 , - 1 , - 2440 , - 1631 , - 1286 , - 1405 , - 1988 , - 3035 , - 834 , - 2809 , - 1536 , - 727 , - 382 , - 501 , - 1084 , - 2131 , - 3642 , - 1905 , - 632 , - 3535 , - 3190 , - 3309 , - 180 , - 1227 , - 2738 , - 1001 , - 3440 , - 2631 , - 2286 , - 2405 , - 2988 , - 323 , - 1834 , - 97 , - 2536 , - 1727 , - 1382 , - 1501 , - 2084 , - 3131 , - 930 , - 2905 , - 1632 , - 823 , - 478 , - 597 , - 1180 , - 2227 , - 26 , - 2001 , - 728 , - 3631 , - 3286 , - 3405 , - 276 , - 1323 , - 2834 , - 1097 , - 3536 , - 2727 , - 2382 , - 2501 , - 3084 , - 419 , - 1930 , - 193 , - 2632 , - 1823 , - 1478 , - 1597 , - 2180 , - 3227 , - 1026 , - 3001 , - 1728 , - 919 , - 574 , - 693 , - 1276 , - 2323 , - 122 , - 2097 , - 824 , - 15 , - 3382 , - 3501 , - 372 , - 1419 , - 2930 , - 1193 , - 3632 , - 2823 , - 2478 , - 2597 , - 3180 , - 515 , - 2026 , - 289 , - 2728 , - 1919 , - 1574 , - 1693 , - 2276 , - 3323 , - 1122 , - 3097 , - 1824 , - 1015 , - 670 , - 789 , - 1372 , - 2419 , - 218 , - 2193 , - 920 , - 111 , - 3478 , - 3597 , - 468 , - 1515 , - 3026 , - 1289 , - 16 , - 2919 , - 2574 , - 2693 , - 3276 , - 611 , - 2122 , - 385 , - 2824 , - 2015 , - 1670 , - 1789 , - 2372 , - 3419 , - 1218 , - 3193 , - 1920 , - 1111 , - 766 , - 885 , - 1468 , - 2515 , - 314 , - 2289 , - 1016 , - 207 , - 3574 , - 3693 , - 564 , - 1611 , - 3122 , - 1385 , - 112 , - 3015 , - 2670 , - 2789 , - 3372 , - 707 , - 2218 , - 481 , - 2920 , - 2111 , - 1766 , - 1885 , - 2468 , - 3515 , - 1314 , - 3289 , - 2016 , - 1207 , - 862 , - 981 , - 1564 , - 2611 , - 410 , - 2385 , - 1112 , - 303 , - 3670 , - 77 , - 660 , - 1707 , - 3218 , - 1481 , - 208 , - 3111 , - 2766 , - 2885 , - 3468 , - 803 , - 2314 , - 577 , - 3016 , - 2207 , - 1862 , - 1981 , - 2564 , - 3611 , - 1410 , - 3385 , - 2112 , - 1303 , - 958 , - 1077 , - 1660 , - 2707 , - 506 , - 2481 , - 1208 , - 399 , - 54 , - 173 , - 756 , - 1803 , - 3314 , - 1577 , - 304 , - 3207 , - 2862 , - 2981 , - 3564 , - 899 , - 2410 , - 673 , - 3112 , - 2303 , - 1958 , - 2077 , - 2660 , - 3707 , - 1506 , - 3481 , - 2208 , - 1399 , - 1054 , - 1173 , - 1756 , - 2803 , - 602 , - 2577 , - 1304 , - 495 , - 150 , - 269 , - 852 , - 1899 , - 3410 , - 1673 , - 400 , - 3303 , - 2958 , - 3077 , - 3660 , - 995 , - 2506 , - 769 , - 3208 , - 2399 , - 2054 , - 2173 , - 2756 , - 91 , - 1602 , - 3577 , - 2304 , - 1495 , - 1150 , - 1269 , - 1852 , - 2899 , - 698 , - 2673 , - 1400 , - 591 , - 246 , - 365 , - 948 , - 1995 , - 3506 , - 1769 , - 496 , - 3399 , - 3054 , - 3173 , - 44 , - 1091 , - 2602 , - 865 , - 3304 , - 2495 , - 2150 , - 2269 , - 2852 , - 187 , - 1698 , - 3673 , - 2400 , - 1591 , - 1246 , - 1365 , - 1948 , - 2995 , - 794 , - 2769 , - 1496 , - 687 , - 342 , - 461 , - 1044 , - 2091 , - 3602 , - 1865 , - 592 , - 3495 , - 3150 , - 3269 , - 140 , - 1187 , - 2698 , - 961 , - 3400 , - 2591 , - 2246 , - 2365 , - 2948 , - 283 , - 1794 , - 57 , - 2496 , - 1687 , - 1342 , - 1461 , - 2044 , - 3091 , - 890 , - 2865 , - 1592 , - 783 , - 438 , - 557 , - 1140 , - 2187 , - 3698 , - 1961 , - 688 , - 3591 , - 3246 , - 3365 , - 236 , - 1283 , - 2794 , - 1057 , - 3496 , - 2687 , - 2342 , - 2461 , - 3044 , - 379 , - 1890 , - 153 , - 2592 , - 1783 , - 1438 , - 1557 , - 2140 , - 3187 , - 986 , - 2961 , - 1688 , - 879 , - 534 , - 653 , - 1236 , - 2283 , - 82 , - 2057 , - 784 , - 3687 , - 3342 , - 3461 , - 332 , - 1379 , - 2890 , - 1153 , - 3592 , - 2783 , - 2438 , - 2557 , - 3140 , - 475 , - 1986 , - 249 , - 2688 , - 1879 , - 1534 , - 1653 , - 2236 , - 3283 , - 1082 , - 3057 , - 1784 , - 975 , - 630 , - 749 , - 1332 , - 2379 , - 178 , - 2153 , - 880 , - 71 , - 3438 , - 3557 , - 428 , - 1475 , - 2986 , - 1249 , - 3688 , - 2879 , - 2534 , - 2653 , - 3236 , - 571 , - 2082 , - 345 , - 2784 , - 1975 , - 1630 , - 1749 , - 2332 , - 3379 , - 1178 , - 3153 , - 1880 , - 1071 , - 726 , - 845 , - 1428 , - 2475 , - 274 , - 2249 , - 976 , - 167 , - 3534 , - 3653 , - 524 , - 1571 , - 3082 , - 1345 , - 72 , - 2975 , - 2630 , - 2749 , - 3332 , - 667 , - 2178 , - 441 , - 2880 , - 2071 , - 1726 , - 1845 , - 2428 , - 3475 , - 1274 , - 3249 , - 1976 , - 1167 , - 822 , - 941 , - 1524 , - 2571 , - 370 , - 2345 , - 1072 , - 263 , - 3630 , - 37 , - 620 , - 1667 , - 3178 , - 1441 , - 168 , - 3071 , - 2726 , - 2845 , - 3428 , - 763 , - 2274 , - 537 , - 2976 , - 2167 , - 1822 , - 1941 , - 2524 , - 3571 , - 1370 , - 3345 , - 2072 , - 1263 , - 918 , - 1037 , - 1620 , - 2667 , - 466 , - 2441 , - 1168 , - 359 , - 14 , - 133 , - 716 , - 1763 , - 3274 , - 1537 , - 264 , - 3167 , - 2822 , - 2941 , - 3524 , - 859 , - 2370 , - 633 , - 3072 , - 2263 , - 1918 , - 2037 , - 2620 , - 3667 , - 1466 , - 3441 , - 2168 , - 1359 , - 1014 , - 1133 , - 1716 , - 2763 , - 562 , - 2537 , - 1264 , - 455 , - 110 , - 229 , - 812 , - 1859 , - 3370 , - 1633 , - 360 , - 3263 , - 2918 , - 3037 , - 3620 , - 955 , - 2466 , - 729 , - 3168 , - 2359 , - 2014 , - 2133 , - 2716 , - 51 , - 1562 , - 3537 , - 2264 , - 1455 , - 1110 , - 1229 , - 1812 , - 2859 , - 658 , - 2633 , - 1360 , - 551 , - 206 , - 325 , - 908 , - 1955 , - 3466 , - 1729 , - 456 , - 3359 , - 3014 , - 3133 , - 4 , - 1051 , - 2562 , - 825 , - 3264 , - 2455 , - 2110 , - 2229 , - 2812 , - 147 , - 1658 , - 3633 , - 2360 , - 1551 , - 1206 , - 1325 , - 1908 , - 2955 , - 754 , - 2729 , - 1456 , - 647 , - 302 , - 421 , - 1004 , - 2051 , - 3562 , - 1825 , - 552 , - 3455 , - 3110 , - 3229 , - 100 , - 1147 , - 2658 , - 921 , - 3360 , - 2551 , - 2206 , - 2325 , - 2908 , - 243 , - 1754 , - 17 , - 2456 , - 1647 , - 1302 , - 1421 , - 2004 , - 3051 , - 850 , - 2825 , - 1552 , - 743 , - 398 , - 517 , - 1100 , - 2147 , - 3658 , - 1921 , - 648 , - 3551 , - 3206 , - 3325 , - 196 , - 1243 , - 2754 , - 1017 , - 3456 , - 2647 , - 2302 , - 2421 , - 3004 , - 339 , - 1850 , - 113 , - 2552 , - 1743 , - 1398 , - 1517 , - 2100 , - 3147 , - 946 , - 2921 , - 1648 , - 839 , - 494 , - 613 , - 1196 , - 2243 , - 42 , - 2017 , - 744 , - 3647 , - 3302 , - 3421 , - 292 , - 1339 , - 2850 , - 1113 , - 3552 , - 2743 , - 2398 , - 2517 , - 3100 , - 435 , - 1946 , - 209 , - 2648 , - 1839 , - 1494 , - 1613 , - 2196 , - 3243 , - 1042 , - 3017 , - 1744 , - 935 , - 590 , - 709 , - 1292 , - 2339 , - 138 , - 2113 , - 840 , - 31 , - 3398 , - 3517 , - 388 , - 1435 , - 2946 , - 1209 , - 3648 , - 2839 , - 2494 , - 2613 , - 3196 , - 531 , - 2042 , - 305 , - 2744 , - 1935 , - 1590 , - 1709 , - 2292 , - 3339 , - 1138 , - 3113 , - 1840 , - 1031 , - 686 , - 805 , - 1388 , - 2435 , - 234 , - 2209 , - 936 , - 127 , - 3494 , - 3613 , - 484 , - 1531 , - 3042 , - 1305 , - 32 , - 2935 , - 2590 , - 2709 , - 3292 , - 627 , - 2138 , - 401 , - 2840 , - 2031 , - 1686 , - 1805 , - 2388 , - 3435 , - 1234 , - 3209 , - 1936 , - 1127 , - 782 , - 901 , - 1484 , - 2531 , - 330 , - 2305 , - 1032 , - 223 , - 3590 , - 3709 , - 580 , - 1627 , - 3138 , - 1401 , - 128 , - 3031 , - 2686 , - 2805 , - 3388 , - 723 , - 2234 , - 497 , - 2936 , - 2127 , - 1782 , - 1901 , - 2484 , - 3531 , - 1330 , - 3305 , - 2032 , - 1223 , - 878 , - 997 , - 1580 , - 2627 , - 426 , - 2401 , - 1128 , - 319 , - 3686 , - 93 , - 676 , - 1723 , - 3234 , - 1497 , - 224 , - 3127 , - 2782 , - 2901 , - 3484 , - 819 , - 2330 , - 593 , - 3032 , - 2223 , - 1878 , - 1997 , - 2580 , - 3627 , - 1426 , - 3401 , - 2128 , - 1319 , - 974 , - 1093 , - 1676 , - 2723 , - 522 , - 2497 , - 1224 , - 415 , - 70 , - 189 , - 772 , - 1819 , - 3330 , - 1593 , - 320 , - 3223 , - 2878 , - 2997 , - 3580 , - 915 , - 2426 , - 689 , - 3128 , - 2319 , - 1974 , - 2093 , - 2676 , - 11 , - 1522 , - 3497 , - 2224 , - 1415 , - 1070 , - 1189 , - 1772 , - 2819 , - 618 , - 2593 , - 1320 , - 511 , - 166 , - 285 , - 868 , - 1915 , - 3426 , - 1689 , - 416 , - 3319 , - 2974 , - 3093 , - 3676 , - 1011 , - 2522 , - 785 , - 3224 , - 2415 , - 2070 , - 2189 , - 2772 , - 107 , - 1618 , - 3593 , - 2320 , - 1511 , - 1166 , - 1285 , - 1868 , - 2915 , - 714 , - 2689 , - 1416 , - 607 , - 262 , - 381 , - 964 , - 2011 , - 3522 , - 1785 , - 512 , - 3415 , - 3070 , - 3189 , - 60 , - 1107 , - 2618 , - 881 , - 3320 , - 2511 , - 2166 , - 2285 , - 2868 , - 203 , - 1714 , - 3689 , - 2416 , - 1607 , - 1262 , - 1381 , - 1964 , - 3011 , - 810 , - 2785 , - 1512 , - 703 , - 358 , - 477 , - 1060 , - 2107 , - 3618 , - 1881 , - 608 , - 3511 , - 3166 , - 3285 , - 156 , - 1203 , - 2714 , - 977 , - 3416 , - 2607 , - 2262 , - 2381 , - 2964 , - 299 , - 1810 , - 73 , - 2512 , - 1703 , - 1358 , - 1477 , - 2060 , - 3107 , - 906 , - 2881 , - 1608 , - 799 , - 454 , - 573 , - 1156 , - 2203 , - 2 , - 1977 , - 704 , - 3607 , - 3262 , - 3381 , - 252 , - 1299 , - 2810 , - 1073 , - 3512 , - 2703 , - 2358 , - 2477 , - 3060 , - 395 , - 1906 , - 169 , - 2608 , - 1799 , - 1454 , - 1573 , - 2156 , - 3203 , - 1002 , - 2977 , - 1704 , - 895 , - 550 , - 669 , - 1252 , - 2299 , - 98 , - 2073 , - 800 , - 3703 , - 3358 , - 3477 , - 348 , - 1395 , - 2906 , - 1169 , - 3608 , - 2799 , - 2454 , - 2573 , - 3156 , - 491 , - 2002 , - 265 , - 2704 , - 1895 , - 1550 , - 1669 , - 2252 , - 3299 , - 1098 , - 3073 , - 1800 , - 991 , - 646 , - 765 , - 1348 , - 2395 , - 194 , - 2169 , - 896 , - 87 , - 3454 , - 3573 , - 444 , - 1491 , - 3002 , - 1265 , - 3704 , - 2895 , - 2550 , - 2669 , - 3252 , - 587 , - 2098 , - 361 , - 2800 , - 1991 , - 1646 , - 1765 , - 2348 , - 3395 , - 1194 , - 3169 , - 1896 , - 1087 , - 742 , - 861 , - 1444 , - 2491 , - 290 , - 2265 , - 992 , - 183 , - 3550 , - 3669 , - 540 , - 1587 , - 3098 , - 1361 , - 88 , - 2991 , - 2646 , - 2765 , - 3348 , - 683 , - 2194 , - 457 , - 2896 , - 2087 , - 1742 , - 1861 , - 2444 , - 3491 , - 1290 , - 3265 , - 1992 , - 1183 , - 838 , - 957 , - 1540 , - 2587 , - 386 , - 2361 , - 1088 , - 279 , - 3646 , - 53 , - 636 , - 1683 , - 3194 , - 1457 , - 184 , - 3087 , - 2742 , - 2861 , - 3444 , - 779 , - 2290 , - 553 , - 2992 , - 2183 , - 1838 , - 1957 , - 2540 , - 3587 , - 1386 , - 3361 , - 2088 , - 1279 , - 934 , - 1053 , - 1636 , - 2683 , - 482 , - 2457 , - 1184 , - 375 , - 30 , - 149 , - 732 , - 1779 , - 3290 , - 1553 , - 280 , - 3183 , - 2838 , - 2957 , - 3540 , - 875 , - 2386 , - 649 , - 3088 , - 2279 , - 1934 , - 2053 , - 2636 , - 3683 , - 1482 , - 3457 , - 2184 , - 1375 , - 1030 , - 1149 , - 1732 , - 2779 , - 578 , - 2553 , - 1280 , - 471 , - 126 , - 245 , - 828 , - 1875 , - 3386 , - 1649 , - 376 , - 3279 , - 2934 , - 3053 , - 3636 , - 971 , - 2482 , - 745 , - 3184 , - 2375 , - 2030 , - 2149 , - 2732 , - 67 , - 1578 , - 3553 , - 2280 , - 1471 , - 1126 , - 1245 , - 1828 , - 2875 , - 674 , - 2649 , - 1376 , - 567 , - 222 , - 341 , - 924 , - 1971 , - 3482 , - 1745 , - 472 , - 3375 , - 3030 , - 3149 , - 20 , - 1067 , - 2578 , - 841 , - 3280 , - 2471 , - 2126 , - 2245 , - 2828 , - 163 , - 1674 , - 3649 , - 2376 , - 1567 , - 1222 , - 1341 , - 1924 , - 2971 , - 770 , - 2745 , - 1472 , - 663 , - 318 , - 437 , - 1020 , - 2067 , - 3578 , - 1841 , - 568 , - 3471 , - 3126 , - 3245 , - 116 , - 1163 , - 2674 , - 937 , - 3376 , - 2567 , - 2222 , - 2341 , - 2924 , - 259 , - 1770 , - 33 , - 2472 , - 1663 , - 1318 , - 1437 , - 2020 , - 3067 , - 866 , - 2841 , - 1568 , - 759 , - 414 , - 533 , - 1116 , - 2163 , - 3674 , - 1937 , - 664 , - 3567 , - 3222 , - 3341 , - 212 , - 1259 , - 2770 , - 1033 , - 3472 , - 2663 , - 2318 , - 2437 , - 3020 , - 355 , - 1866 , - 129 , - 2568 , - 1759 , - 1414 , - 1533 , - 2116 , - 3163 , - 962 , - 2937 , - 1664 , - 855 , - 510 , - 629 , - 1212 , - 2259 , - 58 , - 2033 , - 760 , - 3663 , - 3318 , - 3437 , - 308 , - 1355 , - 2866 , - 1129 , - 3568 , - 2759 , - 2414 , - 2533 , - 3116 , - 451 , - 1962 , - 225 , - 2664 , - 1855 , - 1510 , - 1629 , - 2212 , - 3259 , - 1058 , - 3033 , - 1760 , - 951 , - 606 , - 725 , - 1308 , - 2355 , - 154 , - 2129 , - 856 , - 47 , - 3414 , - 3533 , - 404 , - 1451 , - 2962 , - 1225 , - 3664 , - 2855 , - 2510 , - 2629 , - 3212 , - 547 , - 2058 , - 321 , - 2760 , - 1951 , - 1606 , - 1725 , - 2308 , - 3355 , - 1154 , - 3129 , - 1856 , - 1047 , - 702 , - 821 , - 1404 , - 2451 , - 250 , - 2225 , - 952 , - 143 , - 3510 , - 3629 , - 500 , - 1547 , - 3058 , - 1321 , - 48 , - 2951 , - 2606 , - 2725 , - 3308 , - 643 , - 2154 , - 417 , - 2856 , - 2047 , - 1702 , - 1821 , - 2404 , - 3451 , - 1250 , - 3225 , - 1952 , - 1143 , - 798 , - 917 , - 1500 , - 2547 , - 346 , - 2321 , - 1048 , - 239 , - 3606 , - 13 , - 596 , - 1643 , - 3154 , - 1417 , - 144 , - 3047 , - 2702 , - 2821 , - 3404 , - 739 , - 2250 , - 513 , - 2952 , - 2143 , - 1798 , - 1917 , - 2500 , - 3547 , - 1346 , - 3321 , - 2048 , - 1239 , - 894 , - 1013 , - 1596 , - 2643 , - 442 , - 2417 , - 1144 , - 335 , - 3702 , - 109 , - 692 , - 1739 , - 3250 , - 1513 , - 240 , - 3143 , - 2798 , - 2917 , - 3500 , - 835 , - 2346 , - 609 , - 3048 , - 2239 , - 1894 , - 2013 , - 2596 , - 3643 , - 1442 , - 3417 , - 2144 , - 1335 , - 990 , - 1109 , - 1692 , - 2739 , - 538 , - 2513 , - 1240 , - 431 , - 86 , - 205 , - 788 , - 1835 , - 3346 , - 1609 , - 336 , - 3239 , - 2894 , - 3013 , - 3596 , - 931 , - 2442 , - 705 , - 3144 , - 2335 , - 1990 , - 2109 , - 2692 , - 27 , - 1538 , - 3513 , - 2240 , - 1431 , - 1086 , - 1205 , - 1788 , - 2835 , - 634 , - 2609 , - 1336 , - 527 , - 182 , - 301 , - 884 , - 1931 , - 3442 , - 1705 , - 432 , - 3335 , - 2990 , - 3109 , - 3692 , - 1027 , - 2538 , - 801 , - 3240 , - 2431 , - 2086 , - 2205 , - 2788 , - 123 , - 1634 , - 3609 , - 2336 , - 1527 , - 1182 , - 1301 , - 1884 , - 2931 , - 730 , - 2705 , - 1432 , - 623 , - 278 , - 397 , - 980 , - 2027 , - 3538 , - 1801 , - 528 , - 3431 , - 3086 , - 3205 , - 76 , - 1123 , - 2634 , - 897 , - 3336 , - 2527 , - 2182 , - 2301 , - 2884 , - 219 , - 1730 , - 3705 , - 2432 , - 1623 , - 1278 , - 1397 , - 1980 , - 3027 , - 826 , - 2801 , - 1528 , - 719 , - 374 , - 493 , - 1076 , - 2123 , - 3634 , - 1897 , - 624 , - 3527 , - 3182 , - 3301 , - 172 , - 1219 , - 2730 , - 993 , - 3432 , - 2623 , - 2278 , - 2397 , - 2980 , - 315 , - 1826 , - 89 , - 2528 , - 1719 , - 1374 , - 1493 , - 2076 , - 3123 , - 922 , - 2897 , - 1624 , - 815 , - 470 , - 589 , - 1172 , - 2219 , - 18 , - 1993 , - 720 , - 3623 , - 3278 , - 3397 , - 268 , - 1315 , - 2826 , - 1089 , - 3528 , - 2719 , - 2374 , - 2493 , - 3076 , - 411 , - 1922 , - 185 , - 2624 , - 1815 , - 1470 , - 1589 , - 2172 , - 3219 , - 1018 , - 2993 , - 1720 , - 911 , - 566 , - 685 , - 1268 , - 2315 , - 114 , - 2089 , - 816 , - 7 , - 3374 , - 3493 , - 364 , - 1411 , - 2922 , - 1185 , - 3624 , - 2815 , - 2470 , - 2589 , - 3172 , - 507 , - 2018 , - 281 , - 2720 , - 1911 , - 1566 , - 1685 , - 2268 , - 3315 , - 1114 , - 3089 , - 1816 , - 1007 , - 662 , - 781 , - 1364 , - 2411 , - 210 , - 2185 , - 912 , - 103 , - 3470 , - 3589 , - 460 , - 1507 , - 3018 , - 1281 , - 8 , - 2911 , - 2566 , - 2685 , - 3268 , - 603 , - 2114 , - 377 , - 2816 , - 2007 , - 1662 , - 1781 , - 2364 , - 3411 , - 1210 , - 3185 , - 1912 , - 1103 , - 758 , - 877 , - 1460 , - 2507 , - 306 , - 2281 , - 1008 , - 199 , - 3566 , - 3685 , - 556 , - 1603 , - 3114 , - 1377 , - 104 , - 3007 , - 2662 , - 2781 , - 3364 , - 699 , - 2210 , - 473 , - 2912 , - 2103 , - 1758 , - 1877 , - 2460 , - 3507 , - 1306 , - 3281 , - 2008 , - 1199 , - 854 , - 973 , - 1556 , - 2603 , - 402 , - 2377 , - 1104 , - 295 , - 3662 , - 69 , - 652 , - 1699 , - 3210 , - 1473 , - 200 , - 3103 , - 2758 , - 2877 , - 3460 , - 795 , - 2306 , - 569 , - 3008 , - 2199 , - 1854 , - 1973 , - 2556 , - 3603 , - 1402 , - 3377 , - 2104 , - 1295 , - 950 , - 1069 , - 1652 , - 2699 , - 498 , - 2473 , - 1200 , - 391 , - 46 , - 165 , - 748 , - 1795 , - 3306 , - 1569 , - 296 , - 3199 , - 2854 , - 2973 , - 3556 , - 891 , - 2402 , - 665 , - 3104 , - 2295 , - 1950 , - 2069 , - 2652 , - 3699 , - 1498 , - 3473 , - 2200 , - 1391 , - 1046 , - 1165 , - 1748 , - 2795 , - 594 , - 2569 , - 1296 , - 487 , - 142 , - 261 , - 844 , - 1891 , - 3402 , - 1665 , - 392 , - 3295 , - 2950 , - 3069 , - 3652 , - 987 , - 2498 , - 761 , - 3200 , - 2391 , - 2046 , - 2165 , - 2748 , - 83 , - 1594 , - 3569 , - 2296 , - 1487 , - 1142 , - 1261 , - 1844 , - 2891 , - 690 , - 2665 , - 1392 , - 583 , - 238 , - 357 , - 940 , - 1987 , - 3498 , - 1761 , - 488 , - 3391 , - 3046 , - 3165 , - 36 , - 1083 , - 2594 , - 857 , - 3296 , - 2487 , - 2142 , - 2261 , - 2844 , - 179 , - 1690 , - 3665 , - 2392 , - 1583 , - 1238 , - 1357 , - 1940 , - 2987 , - 786 , - 2761 , - 1488 , - 679 , - 334 , - 453 , - 1036 , - 2083 , - 3594 , - 1857 , - 584 , - 3487 , - 3142 , - 3261 , - 132 , - 1179 , - 2690 , - 953 , - 3392 , - 2583 , - 2238 , - 2357 , - 2940 , - 275 , - 1786 , - 49 , - 2488 , - 1679 , - 1334 , - 1453 , - 2036 , - 3083 , - 882 , - 2857 , - 1584 , - 775 , - 430 , - 549 , - 1132 , - 2179 , - 3690 , - 1953 , - 680 , - 3583 , - 3238 , - 3357 , - 228 , - 1275 , - 2786 , - 1049 , - 3488 , - 2679 , - 2334 , - 2453 , - 3036 , - 371 , - 1882 , - 145 , - 2584 , - 1775 , - 1430 , - 1549 , - 2132 , - 3179 , - 978 , - 2953 , - 1680 , - 871 , - 526 , - 645 , - 1228 , - 2275 , - 74 , - 2049 , - 776 , - 3679 , - 3334 , - 3453 , - 324 , - 1371 , - 2882 , - 1145 , - 3584 , - 2775 , - 2430 , - 2549 , - 3132 , - 467 , - 1978 , - 241 , - 2680 , - 1871 , - 1526 , - 1645 , - 2228 , - 3275 , - 1074 , - 3049 , - 1776 , - 967 , - 622 , - 741 , - 1324 , - 2371 , - 170 , - 2145 , - 872 , - 63 , - 3430 , - 3549 , - 420 , - 1467 , - 2978 , - 1241 , - 3680 , - 2871 , - 2526 , - 2645 , - 3228 , - 563 , - 2074 , - 337 , - 2776 , - 1967 , - 1622 , - 1741 , - 2324 , - 3371 , - 1170 , - 3145 , - 1872 , - 1063 , - 718 , - 837 , - 1420 , - 2467 , - 266 , - 2241 , - 968 , - 159 , - 3526 , - 3645 , - 516 , - 1563 , - 3074 , - 1337 , - 64 , - 2967 , - 2622 , - 2741 , - 3324 , - 659 , - 2170 , - 433 , - 2872 , - 2063 , - 1718 , - 1837 , - 2420 , - 3467 , - 1266 , - 3241 , - 1968 , - 1159 , - 814 , - 933 , - 1516 , - 2563 , - 362 , - 2337 , - 1064 , - 255 , - 3622 , - 29 , - 612 , - 1659 , - 3170 , - 1433 , - 160 , - 3063 , - 2718 , - 2837 , - 3420 , - 755 , - 2266 , - 529 , - 2968 , - 2159 , - 1814 , - 1933 , - 2516 , - 3563 , - 1362 , - 3337 , - 2064 , - 1255 , - 910 , - 1029 , - 1612 , - 2659 , - 458 , - 2433 , - 1160 , - 351 , - 6 , - 125 , - 708 , - 1755 , - 3266 , - 1529 , - 256 , - 3159 , - 2814 , - 2933 , - 3516 , - 851 , - 2362 , - 625 , - 3064 , - 2255 , - 1910 , - 2029 , - 2612 , - 3659 , - 1458 , - 3433 , - 2160 , - 1351 , - 1006 , - 1125 , - 1708 , - 2755 , - 554 , - 2529 , - 1256 , - 447 , - 102 , - 221 , - 804 , - 1851 , - 3362 , - 1625 , - 352 , - 3255 , - 2910 , - 3029 , - 3612 , - 947 , - 2458 , - 721 , - 3160 , - 2351 , - 2006 , - 2125 , - 2708 , - 43 , - 1554 , - 3529 , - 2256 , - 1447 , - 1102 , - 1221 , - 1804 , - 2851 , - 650 , - 2625 , - 1352 , - 543 , - 198 , - 317 , - 900 , - 1947 , - 3458 , - 1721 , - 448 , - 3351 , - 3006 , - 3125 , - 3708 , - 1043 , - 2554 , - 817 , - 3256 , - 2447 , - 2102 , - 2221 , - 2804 , - 139 , - 1650 , - 3625 , - 2352 , - 1543 , - 1198 , - 1317 , - 1900 , - 2947 , - 746 , - 2721 , - 1448 , - 639 , - 294 , - 413 , - 996 , - 2043 , - 3554 , - 1817 , - 544 , - 3447 , - 3102 , - 3221 , - 92 , - 1139 , - 2650 , - 913 , - 3352 , - 2543 , - 2198 , - 2317 , - 2900 , - 235 , - 1746 , - 9 , - 2448 , - 1639 , - 1294 , - 1413 , - 1996 , - 3043 , - 842 , - 2817 , - 1544 , - 735 , - 390 , - 509 , - 1092 , - 2139 , - 3650 , - 1913 , - 640 , - 3543 , - 3198 , - 3317 , - 188 , - 1235 , - 2746 , - 1009 , - 3448 , - 2639 , - 2294 , - 2413 , - 2996 , - 331 , - 1842 , - 105 , - 2544 , - 1735 , - 1390 , - 1509 , - 2092 , - 3139 , - 938 , - 2913 , - 1640 , - 831 , - 486 , - 605 , - 1188 , - 2235 , - 34 , - 2009 , - 736 , - 3639 , - 3294 , - 3413 , - 284 , - 1331 , - 2842 , - 1105 , - 3544 , - 2735 , - 2390 , - 2509 , - 3092 , - 427 , - 1938 , - 201 , - 2640 , - 1831 , - 1486 , - 1605 , - 2188 , - 3235 , - 1034 , - 3009 , - 1736 , - 927 , - 582 , - 701 , - 1284 , - 2331 , - 130 , - 2105 , - 832 , - 23 , - 3390 , - 3509 , - 380 , - 1427 , - 2938 , - 1201 , - 3640 , - 2831 , - 2486 , - 2605 , - 3188 , - 523 , - 2034 , - 297 , - 2736 , - 1927 , - 1582 , - 1701 , - 2284 , - 3331 , - 1130 , - 3105 , - 1832 , - 1023 , - 678 , - 797 , - 1380 , - 2427 , - 226 , - 2201 , - 928 , - 119 , - 3486 , - 3605 , - 476 , - 1523 , - 3034 , - 1297 , - 24 , - 2927 , - 2582 , - 2701 , - 3284 , - 619 , - 2130 , - 393 , - 2832 , - 2023 , - 1678 , - 1797 , - 2380 , - 3427 , - 1226 , - 3201 , - 1928 , - 1119 , - 774 , - 893 , - 1476 , - 2523 , - 322 , - 2297 , - 1024 , - 215 , - 3582 , - 3701 , - 572 , - 1619 , - 3130 , - 1393 , - 120 , - 3023 , - 2678 , - 2797 , - 3380 , - 715 , - 2226 , - 489 , - 2928 , - 2119 , - 1774 , - 1893 , - 2476 , - 3523 , - 1322 , - 3297 , - 2024 , - 1215 , - 870 , - 989 , - 1572 , - 2619 , - 418 , - 2393 , - 1120 , - 311 , - 3678 , - 85 , - 668 , - 1715 , - 3226 , - 1489 , - 216 , - 3119 , - 2774 , - 2893 , - 3476 , - 811 , - 2322 , - 585 , - 3024 , - 2215 , - 1870 , - 1989 , - 2572 , - 3619 , - 1418 , - 3393 , - 2120 , - 1311 , - 966 , - 1085 , - 1668 , - 2715 , - 514 , - 2489 , - 1216 , - 407 , - 62 , - 181 , - 764 , - 1811 , - 3322 , - 1585 , - 312 , - 3215 , - 2870 , - 2989 , - 3572 , - 907 , - 2418 , - 681 , - 3120 , - 2311 , - 1966 , - 2085 , - 2668 , - 3 , - 1514 , - 3489 , - 2216 , - 1407 , - 1062 , - 1181 , - 1764 , - 2811 , - 610 , - 2585 , - 1312 , - 503 , - 158 , - 277 , - 860 , - 1907 , - 3418 , - 1681 , - 408 , - 3311 , - 2966 , - 3085 , - 3668 , - 1003 , - 2514 , - 777 , - 3216 , - 2407 , - 2062 , - 2181 , - 2764 , - 99 , - 1610 , - 3585 , - 2312 , - 1503 , - 1158 , - 1277 , - 1860 , - 2907 , - 706 , - 2681 , - 1408 , - 599 , - 254 , - 373 , - 956 , - 2003 , - 3514 , - 1777 , - 504 , - 3407 , - 3062 , - 3181 , - 52 , - 1099 , - 2610 , - 873 , - 3312 , - 2503 , - 2158 , - 2277 , - 2860 , - 195 , - 1706 , - 3681 , - 2408 , - 1599 , - 1254 , - 1373 , - 1956 , - 3003 , - 802 , - 2777 , - 1504 , - 695 , - 350 , - 469 , - 1052 , - 2099 , - 3610 , - 1873 , - 600 , - 3503 , - 3158 , - 3277 , - 148 , - 1195 , - 2706 , - 969 , - 3408 , - 2599 , - 2254 , - 2373 , - 2956 , - 291 , - 1802 , - 65 , - 2504 , - 1695 , - 1350 , - 1469 , - 2052 , - 3099 , - 898 , - 2873 , - 1600 , - 791 , - 446 , - 565 , - 1148 , - 2195 , - 3706 , - 1969 , - 696 , - 3599 , - 3254 , - 3373 , - 244 , - 1291 , - 2802 , - 1065 , - 3504 , - 2695 , - 2350 , - 2469 , - 3052 , - 387 , - 1898 , - 161 , - 2600 , - 1791 , - 1446 , - 1565 , - 2148 , - 3195 , - 994 , - 2969 , - 1696 , - 887 , - 542 , - 661 , - 1244 , - 2291 , - 90 , - 2065 , - 792 , - 3695 , - 3350 , - 3469 , - 340 , - 1387 , - 2898 , - 1161 , - 3600 , - 2791 , - 2446 , - 2565 , - 3148 , - 483 , - 1994 , - 257 , - 2696 , - 1887 , - 1542 , - 1661 , - 2244 , - 3291 , - 1090 , - 3065 , - 1792 , - 983 , - 638 , - 757 , - 1340 , - 2387 , - 186 , - 2161 , - 888 , - 79 , - 3446 , - 3565 , - 436 , - 1483 , - 2994 , - 1257 , - 3696 , - 2887 , - 2542 , - 2661 , - 3244 , - 579 , - 2090 , - 353 , - 2792 , - 1983 , - 1638 , - 1757 , - 2340 , - 3387 , - 1186 , - 3161 , - 1888 , - 1079 , - 734 , - 853 , - 1436 , - 2483 , - 282 , - 2257 , - 984 , - 175 , - 3542 , - 3661 , - 532 , - 1579 , - 3090 , - 1353 , - 80 , - 2983 , - 2638 , - 2757 , - 3340 , - 675 , - 2186 , - 449 , - 2888 , - 2079 , - 1734 , - 1853 , - 2436 , - 3483 , - 1282 , - 3257 , - 1984 , - 1175 , - 830 , - 949 , - 1532 , - 2579 , - 378 , - 2353 , - 1080 , - 271 , - 3638 , - 45 , - 628 , - 1675 , - 3186 , - 1449 , - 176 , - 3079 , - 2734 , - 2853 , - 3436 , - 771 , - 2282 , - 545 , - 2984 , - 2175 , - 1830 , - 1949 , - 2532 , - 3579 , - 1378 , - 3353 , - 2080 , - 1271 , - 926 , - 1045 , - 1628 , - 2675 , - 474 , - 2449 , - 1176 , - 367 , - 22 , - 141 , - 724 , - 1771 , - 3282 , - 1545 , - 272 , - 3175 , - 2830 , - 2949 , - 3532 , - 867 , - 2378 , - 641 , - 3080 , - 2271 , - 1926 , - 2045 , - 2628 , - 3675 , - 1474 , - 3449 , - 2176 , - 1367 , - 1022 , - 1141 , - 1724 , - 2771 , - 570 , - 2545 , - 1272 , - 463 , - 118 , - 237 , - 820 , - 1867 , - 3378 , - 1641 , - 368 , - 3271 , - 2926 , - 3045 , - 3628 , - 963 , - 2474 , - 737 , - 3176 , - 2367 , - 2022 , - 2141 , - 2724 , - 59 , - 1570 , - 3545 , - 2272 , - 1463 , - 1118 , - 1237 , - 1820 , - 2867 , - 666 , - 2641 , - 1368 , - 559 , - 214 , - 333 , - 916 , - 1963 , - 3474 , - 1737 , - 464 , - 3367 , - 3022 , - 3141 , - 12 , - 1059 , - 2570 , - 833 , - 3272 , - 2463 , - 2118 , - 2237 , - 2820 , - 155 , - 1666 , - 3641 , - 2368 , - 1559 , - 1214 , - 1333 , - 1916 , - 2963 , - 762 , - 2737 , - 1464 , - 655 , - 310 , - 429 , - 1012 , - 2059 , - 3570 , - 1833 , - 560 , - 3463 , - 3118 , - 3237 , - 108 , - 1155 , - 2666 , - 929 , - 3368 , - 2559 , - 2214 , - 2333 , - 2916 , - 251 , - 1762 , - 25 , - 2464 , - 1655 , - 1310 , - 1429 , - 2012 , - 3059 , - 858 , - 2833 , - 1560 , - 751 , - 406 , - 525 , - 1108 , - 2155 , - 3666 , - 1929 , - 656 , - 3559 , - 3214 , - 3333 , - 204 , - 1251 , - 2762 , - 1025 , - 3464 , - 2655 , - 2310 , - 2429 , - 3012 , - 347 , - 1858 , - 121 , - 2560 , - 1751 , - 1406 , - 1525 , - 2108 , - 3155 , - 954 , - 2929 , - 1656 , - 847 , - 502 , - 621 , - 1204 , - 2251 , - 50 , - 2025 , - 752 , - 3655 , - 3310 , - 3429 , - 300 , - 1347 , - 2858 , - 1121 , - 3560 , - 2751 , - 2406 , - 2525 , - 3108 , - 443 , - 1954 , - 217 , - 2656 , - 1847 , - 1502 , - 1621 , - 2204 , - 3251 , - 1050 , - 3025 , - 1752 , - 943 , - 598 , - 717 , - 1300 , - 2347 , - 146 , - 2121 , - 848 , - 39 , - 3406 , - 3525 , - 396 , - 1443 , - 2954 , - 1217 , - 3656 , - 2847 , - 2502 , - 2621 , - 3204 , - 539 , - 2050 , - 313 , - 2752 , - 1943 , - 1598 , - 1717 , - 2300 , - 3347 , - 1146 , - 3121 , - 1848 , - 1039 , - 694 , - 813 , - 1396 , - 2443 , - 242 , - 2217 , - 944 , - 135 , - 3502 , - 3621 , - 492 , - 1539 , - 3050 , - 1313 , - 40 , - 2943 , - 2598 , - 2717 , - 3300 , - 635 , - 2146 , - 409 , - 2848 , - 2039 , - 1694 , - 1813 , - 2396 , - 3443 , - 1242 , - 3217 , - 1944 , - 1135 , - 790 , - 909 , - 1492 , - 2539 , - 338 , - 2313 , - 1040 , - 231 , - 3598 , - 5 , - 588 , - 1635 , - 3146 , - 1409 , - 136 , - 3039 , - 2694 , - 2813 , - 3396 , - 731 , - 2242 , - 505 , - 2944 , - 2135 , - 1790 , - 1909 , - 2492 , - 3539 , - 1338 , - 3313 , - 2040 , - 1231 , - 886 , - 1005 , - 1588 , - 2635 , - 434 , - 2409 , - 1136 , - 327 , - 3694 , - 101 , - 684 , - 1731 , - 3242 , - 1505 , - 232 , - 3135 , - 2790 , - 2909 , - 3492 , - 827 , - 2338 , - 601 , - 3040 , - 2231 , - 1886 , - 2005 , - 2588 , - 3635 , - 1434 , - 3409 , - 2136 , - 1327 , - 982 , - 1101 , - 1684 , - 2731 , - 530 , - 2505 , - 1232 , - 423 , - 78 , - 197 , - 780 , - 1827 , - 3338 , - 1601 , - 328 , - 3231 , - 2886 , - 3005 , - 3588 , - 923 , - 2434 , - 697 , - 3136 , - 2327 , - 1982 , - 2101 , - 2684 , - 19 , - 1530 , - 3505 , - 2232 , - 1423 , - 1078 , - 1197 , - 1780 , - 2827 , - 626 , - 2601 , - 1328 , - 519 , - 174 , - 293 , - 876 , - 1923 , - 3434 , - 1697 , - 424 , - 3327 , - 2982 , - 3101 , - 3684 , - 1019 , - 2530 , - 793 , - 3232 , - 2423 , - 2078 , - 2197 , - 2780 , - 115 , - 1626 , - 3601 , - 2328 , - 1519 , - 1174 , - 1293 , - 1876 , - 2923 , - 722 , - 2697 , - 1424 , - 615 , - 270 , - 389 , - 972 , - 2019 , - 3530 , - 1793 , - 520 , - 3423 , - 3078 , - 3197 , - 68 , - 1115 , - 2626 , - 889 , - 3328 , - 2519 , - 2174 , - 2293 , - 2876 , - 211 , - 1722 , - 3697 , - 2424 , - 1615 , - 1270 , - 1389 , - 1972 , - 3019 , - 818 , - 2793 , - 1520 , - 711 , - 366 , - 485 , - 1068 , - 2115 , - 3626 , - 1889 , - 616 , - 3519 , - 3174 , - 3293 , - 164 , - 1211 , - 2722 , - 985 , - 3424 , - 2615 , - 2270 , - 2389 , - 2972 , - 307 , - 1818 , - 81 , - 2520 , - 1711 , - 1366 , - 1485 , - 2068 , - 3115 , - 914 , - 2889 , - 1616 , - 807 , - 462 , - 581 , - 1164 , - 2211 , - 10 , - 1985 , - 712 , - 3615 , - 3270 , - 3389 , - 260 , - 1307 , - 2818 , - 1081 , - 3520 , - 2711 , - 2366 , - 2485 , - 3068 , - 403 , - 1914 , - 177 , - 2616 , - 1807 , - 1462 , - 1581 , - 2164 , - 3211 , - 1010 , - 2985 , - 1712 , - 903 , - 558 , - 677 , - 1260 , - 2307 , - 106 , - 2081 , - 808 , - 3711 , - 3366 , - 3485 , - 356 , - 1403 , - 2914 , - 1177 , - 3616 , - 2807 , - 2462 , - 2581 , - 3164 , - 499 , - 2010 , - 273 , - 2712 , - 1903 , - 1558 , - 1677 , - 2260 , - 3307 , - 1106 , - 3081 , - 1808 , - 999 , - 654 , - 773 , - 1356 , - 2403 , - 202 , - 2177 , - 904 , - 95 , - 3462 , - 3581 , - 452 , - 1499 , - 3010 , - 1273 , - 0 , - 1623 , - 1830 , - 621 , - 1772 , - 1507 , - 3602 , - 505 , - 3544 , - 1391 , - 1598 , - 389 , - 1540 , - 1275 , - 3370 , - 273 , - 3312 , - 1159 , - 1366 , - 157 , - 1308 , - 1043 , - 3138 , - 41 , - 3080 , - 927 , - 1134 , - 3701 , - 1076 , - 811 , - 2906 , - 3585 , - 2848 , - 695 , - 902 , - 3469 , - 844 , - 579 , - 2674 , - 3353 , - 2616 , - 463 , - 670 , - 3237 , - 612 , - 347 , - 2442 , - 3121 , - 2384 , - 231 , - 438 , - 3005 , - 380 , - 115 , - 2210 , - 2889 , - 2152 , - 3775 , - 206 , - 2773 , - 148 , - 3659 , - 1978 , - 2657 , - 1920 , - 3543 , - 3750 , - 2541 , - 3692 , - 3427 , - 1746 , - 2425 , - 1688 , - 3311 , - 3518 , - 2309 , - 3460 , - 3195 , - 1514 , - 2193 , - 1456 , - 3079 , - 3286 , - 2077 , - 3228 , - 2963 , - 1282 , - 1961 , - 1224 , - 2847 , - 3054 , - 1845 , - 2996 , - 2731 , - 1050 , - 1729 , - 992 , - 2615 , - 2822 , - 1613 , - 2764 , - 2499 , - 818 , - 1497 , - 760 , - 2383 , - 2590 , - 1381 , - 2532 , - 2267 , - 586 , - 1265 , - 528 , - 2151 , - 2358 , - 1149 , - 2300 , - 2035 , - 354 , - 1033 , - 296 , - 1919 , - 2126 , - 917 , - 2068 , - 1803 , - 122 , - 801 , - 64 , - 1687 , - 1894 , - 685 , - 1836 , - 1571 , - 3666 , - 569 , - 3608 , - 1455 , - 1662 , - 453 , - 1604 , - 1339 , - 3434 , - 337 , - 3376 , - 1223 , - 1430 , - 221 , - 1372 , - 1107 , - 3202 , - 105 , - 3144 , - 991 , - 1198 , - 3765 , - 1140 , - 875 , - 2970 , - 3649 , - 2912 , - 759 , - 966 , - 3533 , - 908 , - 643 , - 2738 , - 3417 , - 2680 , - 527 , - 734 , - 3301 , - 676 , - 411 , - 2506 , - 3185 , - 2448 , - 295 , - 502 , - 3069 , - 444 , - 179 , - 2274 , - 2953 , - 2216 , - 63 , - 270 , - 2837 , - 212 , - 3723 , - 2042 , - 2721 , - 1984 , - 3607 , - 38 , - 2605 , - 3756 , - 3491 , - 1810 , - 2489 , - 1752 , - 3375 , - 3582 , - 2373 , - 3524 , - 3259 , - 1578 , - 2257 , - 1520 , - 3143 , - 3350 , - 2141 , - 3292 , - 3027 , - 1346 , - 2025 , - 1288 , - 2911 , - 3118 , - 1909 , - 3060 , - 2795 , - 1114 , - 1793 , - 1056 , - 2679 , - 2886 , - 1677 , - 2828 , - 2563 , - 882 , - 1561 , - 824 , - 2447 , - 2654 , - 1445 , - 2596 , - 2331 , - 650 , - 1329 , - 592 , - 2215 , - 2422 , - 1213 , - 2364 , - 2099 , - 418 , - 1097 , - 360 , - 1983 , - 2190 , - 981 , - 2132 , - 1867 , - 186 , - 865 , - 128 , - 1751 , - 1958 , - 749 , - 1900 , - 1635 , - 3730 , - 633 , - 3672 , - 1519 , - 1726 , - 517 , - 1668 , - 1403 , - 3498 , - 401 , - 3440 , - 1287 , - 1494 , - 285 , - 1436 , - 1171 , - 3266 , - 169 , - 3208 , - 1055 , - 1262 , - 53 , - 1204 , - 939 , - 3034 , - 3713 , - 2976 , - 823 , - 1030 , - 3597 , - 972 , - 707 , - 2802 , - 3481 , - 2744 , - 591 , - 798 , - 3365 , - 740 , - 475 , - 2570 , - 3249 , - 2512 , - 359 , - 566 , - 3133 , - 508 , - 243 , - 2338 , - 3017 , - 2280 , - 127 , - 334 , - 2901 , - 276 , - 11 , - 2106 , - 2785 , - 2048 , - 3671 , - 102 , - 2669 , - 44 , - 3555 , - 1874 , - 2553 , - 1816 , - 3439 , - 3646 , - 2437 , - 3588 , - 3323 , - 1642 , - 2321 , - 1584 , - 3207 , - 3414 , - 2205 , - 3356 , - 3091 , - 1410 , - 2089 , - 1352 , - 2975 , - 3182 , - 1973 , - 3124 , - 2859 , - 1178 , - 1857 , - 1120 , - 2743 , - 2950 , - 1741 , - 2892 , - 2627 , - 946 , - 1625 , - 888 , - 2511 , - 2718 , - 1509 , - 2660 , - 2395 , - 714 , - 1393 , - 656 , - 2279 , - 2486 , - 1277 , - 2428 , - 2163 , - 482 , - 1161 , - 424 , - 2047 , - 2254 , - 1045 , - 2196 , - 1931 , - 250 , - 929 , - 192 , - 1815 , - 2022 , - 813 , - 1964 , - 1699 , - 18 , - 697 , - 3736 , - 1583 , - 1790 , - 581 , - 1732 , - 1467 , - 3562 , - 465 , - 3504 , - 1351 , - 1558 , - 349 , - 1500 , - 1235 , - 3330 , - 233 , - 3272 , - 1119 , - 1326 , - 117 , - 1268 , - 1003 , - 3098 , - 1 , - 3040 , - 887 , - 1094 , - 3661 , - 1036 , - 771 , - 2866 , - 3545 , - 2808 , - 655 , - 862 , - 3429 , - 804 , - 539 , - 2634 , - 3313 , - 2576 , - 423 , - 630 , - 3197 , - 572 , - 307 , - 2402 , - 3081 , - 2344 , - 191 , - 398 , - 2965 , - 340 , - 75 , - 2170 , - 2849 , - 2112 , - 3735 , - 166 , - 2733 , - 108 , - 3619 , - 1938 , - 2617 , - 1880 , - 3503 , - 3710 , - 2501 , - 3652 , - 3387 , - 1706 , - 2385 , - 1648 , - 3271 , - 3478 , - 2269 , - 3420 , - 3155 , - 1474 , - 2153 , - 1416 , - 3039 , - 3246 , - 2037 , - 3188 , - 2923 , - 1242 , - 1921 , - 1184 , - 2807 , - 3014 , - 1805 , - 2956 , - 2691 , - 1010 , - 1689 , - 952 , - 2575 , - 2782 , - 1573 , - 2724 , - 2459 , - 778 , - 1457 , - 720 , - 2343 , - 2550 , - 1341 , - 2492 , - 2227 , - 546 , - 1225 , - 488 , - 2111 , - 2318 , - 1109 , - 2260 , - 1995 , - 314 , - 993 , - 256 , - 1879 , - 2086 , - 877 , - 2028 , - 1763 , - 82 , - 761 , - 24 , - 1647 , - 1854 , - 645 , - 1796 , - 1531 , - 3626 , - 529 , - 3568 , - 1415 , - 1622 , - 413 , - 1564 , - 1299 , - 3394 , - 297 , - 3336 , - 1183 , - 1390 , - 181 , - 1332 , - 1067 , - 3162 , - 65 , - 3104 , - 951 , - 1158 , - 3725 , - 1100 , - 835 , - 2930 , - 3609 , - 2872 , - 719 , - 926 , - 3493 , - 868 , - 603 , - 2698 , - 3377 , - 2640 , - 487 , - 694 , - 3261 , - 636 , - 371 , - 2466 , - 3145 , - 2408 , - 255 , - 462 , - 3029 , - 404 , - 139 , - 2234 , - 2913 , - 2176 , - 23 , - 230 , - 2797 , - 172 , - 3683 , - 2002 , - 2681 , - 1944 , - 3567 , - 3774 , - 2565 , - 3716 , - 3451 , - 1770 , - 2449 , - 1712 , - 3335 , - 3542 , - 2333 , - 3484 , - 3219 , - 1538 , - 2217 , - 1480 , - 3103 , - 3310 , - 2101 , - 3252 , - 2987 , - 1306 , - 1985 , - 1248 , - 2871 , - 3078 , - 1869 , - 3020 , - 2755 , - 1074 , - 1753 , - 1016 , - 2639 , - 2846 , - 1637 , - 2788 , - 2523 , - 842 , - 1521 , - 784 , - 2407 , - 2614 , - 1405 , - 2556 , - 2291 , - 610 , - 1289 , - 552 , - 2175 , - 2382 , - 1173 , - 2324 , - 2059 , - 378 , - 1057 , - 320 , - 1943 , - 2150 , - 941 , - 2092 , - 1827 , - 146 , - 825 , - 88 , - 1711 , - 1918 , - 709 , - 1860 , - 1595 , - 3690 , - 593 , - 3632 , - 1479 , - 1686 , - 477 , - 1628 , - 1363 , - 3458 , - 361 , - 3400 , - 1247 , - 1454 , - 245 , - 1396 , - 1131 , - 3226 , - 129 , - 3168 , - 1015 , - 1222 , - 13 , - 1164 , - 899 , - 2994 , - 3673 , - 2936 , - 783 , - 990 , - 3557 , - 932 , - 667 , - 2762 , - 3441 , - 2704 , - 551 , - 758 , - 3325 , - 700 , - 435 , - 2530 , - 3209 , - 2472 , - 319 , - 526 , - 3093 , - 468 , - 203 , - 2298 , - 2977 , - 2240 , - 87 , - 294 , - 2861 , - 236 , - 3747 , - 2066 , - 2745 , - 2008 , - 3631 , - 62 , - 2629 , - 4 , - 3515 , - 1834 , - 2513 , - 1776 , - 3399 , - 3606 , - 2397 , - 3548 , - 3283 , - 1602 , - 2281 , - 1544 , - 3167 , - 3374 , - 2165 , - 3316 , - 3051 , - 1370 , - 2049 , - 1312 , - 2935 , - 3142 , - 1933 , - 3084 , - 2819 , - 1138 , - 1817 , - 1080 , - 2703 , - 2910 , - 1701 , - 2852 , - 2587 , - 906 , - 1585 , - 848 , - 2471 , - 2678 , - 1469 , - 2620 , - 2355 , - 674 , - 1353 , - 616 , - 2239 , - 2446 , - 1237 , - 2388 , - 2123 , - 442 , - 1121 , - 384 , - 2007 , - 2214 , - 1005 , - 2156 , - 1891 , - 210 , - 889 , - 152 , - 1775 , - 1982 , - 773 , - 1924 , - 1659 , - 3754 , - 657 , - 3696 , - 1543 , - 1750 , - 541 , - 1692 , - 1427 , - 3522 , - 425 , - 3464 , - 1311 , - 1518 , - 309 , - 1460 , - 1195 , - 3290 , - 193 , - 3232 , - 1079 , - 1286 , - 77 , - 1228 , - 963 , - 3058 , - 3737 , - 3000 , - 847 , - 1054 , - 3621 , - 996 , - 731 , - 2826 , - 3505 , - 2768 , - 615 , - 822 , - 3389 , - 764 , - 499 , - 2594 , - 3273 , - 2536 , - 383 , - 590 , - 3157 , - 532 , - 267 , - 2362 , - 3041 , - 2304 , - 151 , - 358 , - 2925 , - 300 , - 35 , - 2130 , - 2809 , - 2072 , - 3695 , - 126 , - 2693 , - 68 , - 3579 , - 1898 , - 2577 , - 1840 , - 3463 , - 3670 , - 2461 , - 3612 , - 3347 , - 1666 , - 2345 , - 1608 , - 3231 , - 3438 , - 2229 , - 3380 , - 3115 , - 1434 , - 2113 , - 1376 , - 2999 , - 3206 , - 1997 , - 3148 , - 2883 , - 1202 , - 1881 , - 1144 , - 2767 , - 2974 , - 1765 , - 2916 , - 2651 , - 970 , - 1649 , - 912 , - 2535 , - 2742 , - 1533 , - 2684 , - 2419 , - 738 , - 1417 , - 680 , - 2303 , - 2510 , - 1301 , - 2452 , - 2187 , - 506 , - 1185 , - 448 , - 2071 , - 2278 , - 1069 , - 2220 , - 1955 , - 274 , - 953 , - 216 , - 1839 , - 2046 , - 837 , - 1988 , - 1723 , - 42 , - 721 , - 3760 , - 1607 , - 1814 , - 605 , - 1756 , - 1491 , - 3586 , - 489 , - 3528 , - 1375 , - 1582 , - 373 , - 1524 , - 1259 , - 3354 , - 257 , - 3296 , - 1143 , - 1350 , - 141 , - 1292 , - 1027 , - 3122 , - 25 , - 3064 , - 911 , - 1118 , - 3685 , - 1060 , - 795 , - 2890 , - 3569 , - 2832 , - 679 , - 886 , - 3453 , - 828 , - 563 , - 2658 , - 3337 , - 2600 , - 447 , - 654 , - 3221 , - 596 , - 331 , - 2426 , - 3105 , - 2368 , - 215 , - 422 , - 2989 , - 364 , - 99 , - 2194 , - 2873 , - 2136 , - 3759 , - 190 , - 2757 , - 132 , - 3643 , - 1962 , - 2641 , - 1904 , - 3527 , - 3734 , - 2525 , - 3676 , - 3411 , - 1730 , - 2409 , - 1672 , - 3295 , - 3502 , - 2293 , - 3444 , - 3179 , - 1498 , - 2177 , - 1440 , - 3063 , - 3270 , - 2061 , - 3212 , - 2947 , - 1266 , - 1945 , - 1208 , - 2831 , - 3038 , - 1829 , - 2980 , - 2715 , - 1034 , - 1713 , - 976 , - 2599 , - 2806 , - 1597 , - 2748 , - 2483 , - 802 , - 1481 , - 744 , - 2367 , - 2574 , - 1365 , - 2516 , - 2251 , - 570 , - 1249 , - 512 , - 2135 , - 2342 , - 1133 , - 2284 , - 2019 , - 338 , - 1017 , - 280 , - 1903 , - 2110 , - 901 , - 2052 , - 1787 , - 106 , - 785 , - 48 , - 1671 , - 1878 , - 669 , - 1820 , - 1555 , - 3650 , - 553 , - 3592 , - 1439 , - 1646 , - 437 , - 1588 , - 1323 , - 3418 , - 321 , - 3360 , - 1207 , - 1414 , - 205 , - 1356 , - 1091 , - 3186 , - 89 , - 3128 , - 975 , - 1182 , - 3749 , - 1124 , - 859 , - 2954 , - 3633 , - 2896 , - 743 , - 950 , - 3517 , - 892 , - 627 , - 2722 , - 3401 , - 2664 , - 511 , - 718 , - 3285 , - 660 , - 395 , - 2490 , - 3169 , - 2432 , - 279 , - 486 , - 3053 , - 428 , - 163 , - 2258 , - 2937 , - 2200 , - 47 , - 254 , - 2821 , - 196 , - 3707 , - 2026 , - 2705 , - 1968 , - 3591 , - 22 , - 2589 , - 3740 , - 3475 , - 1794 , - 2473 , - 1736 , - 3359 , - 3566 , - 2357 , - 3508 , - 3243 , - 1562 , - 2241 , - 1504 , - 3127 , - 3334 , - 2125 , - 3276 , - 3011 , - 1330 , - 2009 , - 1272 , - 2895 , - 3102 , - 1893 , - 3044 , - 2779 , - 1098 , - 1777 , - 1040 , - 2663 , - 2870 , - 1661 , - 2812 , - 2547 , - 866 , - 1545 , - 808 , - 2431 , - 2638 , - 1429 , - 2580 , - 2315 , - 634 , - 1313 , - 576 , - 2199 , - 2406 , - 1197 , - 2348 , - 2083 , - 402 , - 1081 , - 344 , - 1967 , - 2174 , - 965 , - 2116 , - 1851 , - 170 , - 849 , - 112 , - 1735 , - 1942 , - 733 , - 1884 , - 1619 , - 3714 , - 617 , - 3656 , - 1503 , - 1710 , - 501 , - 1652 , - 1387 , - 3482 , - 385 , - 3424 , - 1271 , - 1478 , - 269 , - 1420 , - 1155 , - 3250 , - 153 , - 3192 , - 1039 , - 1246 , - 37 , - 1188 , - 923 , - 3018 , - 3697 , - 2960 , - 807 , - 1014 , - 3581 , - 956 , - 691 , - 2786 , - 3465 , - 2728 , - 575 , - 782 , - 3349 , - 724 , - 459 , - 2554 , - 3233 , - 2496 , - 343 , - 550 , - 3117 , - 492 , - 227 , - 2322 , - 3001 , - 2264 , - 111 , - 318 , - 2885 , - 260 , - 3771 , - 2090 , - 2769 , - 2032 , - 3655 , - 86 , - 2653 , - 28 , - 3539 , - 1858 , - 2537 , - 1800 , - 3423 , - 3630 , - 2421 , - 3572 , - 3307 , - 1626 , - 2305 , - 1568 , - 3191 , - 3398 , - 2189 , - 3340 , - 3075 , - 1394 , - 2073 , - 1336 , - 2959 , - 3166 , - 1957 , - 3108 , - 2843 , - 1162 , - 1841 , - 1104 , - 2727 , - 2934 , - 1725 , - 2876 , - 2611 , - 930 , - 1609 , - 872 , - 2495 , - 2702 , - 1493 , - 2644 , - 2379 , - 698 , - 1377 , - 640 , - 2263 , - 2470 , - 1261 , - 2412 , - 2147 , - 466 , - 1145 , - 408 , - 2031 , - 2238 , - 1029 , - 2180 , - 1915 , - 234 , - 913 , - 176 , - 1799 , - 2006 , - 797 , - 1948 , - 1683 , - 2 , - 681 , - 3720 , - 1567 , - 1774 , - 565 , - 1716 , - 1451 , - 3546 , - 449 , - 3488 , - 1335 , - 1542 , - 333 , - 1484 , - 1219 , - 3314 , - 217 , - 3256 , - 1103 , - 1310 , - 101 , - 1252 , - 987 , - 3082 , - 3761 , - 3024 , - 871 , - 1078 , - 3645 , - 1020 , - 755 , - 2850 , - 3529 , - 2792 , - 639 , - 846 , - 3413 , - 788 , - 523 , - 2618 , - 3297 , - 2560 , - 407 , - 614 , - 3181 , - 556 , - 291 , - 2386 , - 3065 , - 2328 , - 175 , - 382 , - 2949 , - 324 , - 59 , - 2154 , - 2833 , - 2096 , - 3719 , - 150 , - 2717 , - 92 , - 3603 , - 1922 , - 2601 , - 1864 , - 3487 , - 3694 , - 2485 , - 3636 , - 3371 , - 1690 , - 2369 , - 1632 , - 3255 , - 3462 , - 2253 , - 3404 , - 3139 , - 1458 , - 2137 , - 1400 , - 3023 , - 3230 , - 2021 , - 3172 , - 2907 , - 1226 , - 1905 , - 1168 , - 2791 , - 2998 , - 1789 , - 2940 , - 2675 , - 994 , - 1673 , - 936 , - 2559 , - 2766 , - 1557 , - 2708 , - 2443 , - 762 , - 1441 , - 704 , - 2327 , - 2534 , - 1325 , - 2476 , - 2211 , - 530 , - 1209 , - 472 , - 2095 , - 2302 , - 1093 , - 2244 , - 1979 , - 298 , - 977 , - 240 , - 1863 , - 2070 , - 861 , - 2012 , - 1747 , - 66 , - 745 , - 8 , - 1631 , - 1838 , - 629 , - 1780 , - 1515 , - 3610 , - 513 , - 3552 , - 1399 , - 1606 , - 397 , - 1548 , - 1283 , - 3378 , - 281 , - 3320 , - 1167 , - 1374 , - 165 , - 1316 , - 1051 , - 3146 , - 49 , - 3088 , - 935 , - 1142 , - 3709 , - 1084 , - 819 , - 2914 , - 3593 , - 2856 , - 703 , - 910 , - 3477 , - 852 , - 587 , - 2682 , - 3361 , - 2624 , - 471 , - 678 , - 3245 , - 620 , - 355 , - 2450 , - 3129 , - 2392 , - 239 , - 446 , - 3013 , - 388 , - 123 , - 2218 , - 2897 , - 2160 , - 7 , - 214 , - 2781 , - 156 , - 3667 , - 1986 , - 2665 , - 1928 , - 3551 , - 3758 , - 2549 , - 3700 , - 3435 , - 1754 , - 2433 , - 1696 , - 3319 , - 3526 , - 2317 , - 3468 , - 3203 , - 1522 , - 2201 , - 1464 , - 3087 , - 3294 , - 2085 , - 3236 , - 2971 , - 1290 , - 1969 , - 1232 , - 2855 , - 3062 , - 1853 , - 3004 , - 2739 , - 1058 , - 1737 , - 1000 , - 2623 , - 2830 , - 1621 , - 2772 , - 2507 , - 826 , - 1505 , - 768 , - 2391 , - 2598 , - 1389 , - 2540 , - 2275 , - 594 , - 1273 , - 536 , - 2159 , - 2366 , - 1157 , - 2308 , - 2043 , - 362 , - 1041 , - 304 , - 1927 , - 2134 , - 925 , - 2076 , - 1811 , - 130 , - 809 , - 72 , - 1695 , - 1902 , - 693 , - 1844 , - 1579 , - 3674 , - 577 , - 3616 , - 1463 , - 1670 , - 461 , - 1612 , - 1347 , - 3442 , - 345 , - 3384 , - 1231 , - 1438 , - 229 , - 1380 , - 1115 , - 3210 , - 113 , - 3152 , - 999 , - 1206 , - 3773 , - 1148 , - 883 , - 2978 , - 3657 , - 2920 , - 767 , - 974 , - 3541 , - 916 , - 651 , - 2746 , - 3425 , - 2688 , - 535 , - 742 , - 3309 , - 684 , - 419 , - 2514 , - 3193 , - 2456 , - 303 , - 510 , - 3077 , - 452 , - 187 , - 2282 , - 2961 , - 2224 , - 71 , - 278 , - 2845 , - 220 , - 3731 , - 2050 , - 2729 , - 1992 , - 3615 , - 46 , - 2613 , - 3764 , - 3499 , - 1818 , - 2497 , - 1760 , - 3383 , - 3590 , - 2381 , - 3532 , - 3267 , - 1586 , - 2265 , - 1528 , - 3151 , - 3358 , - 2149 , - 3300 , - 3035 , - 1354 , - 2033 , - 1296 , - 2919 , - 3126 , - 1917 , - 3068 , - 2803 , - 1122 , - 1801 , - 1064 , - 2687 , - 2894 , - 1685 , - 2836 , - 2571 , - 890 , - 1569 , - 832 , - 2455 , - 2662 , - 1453 , - 2604 , - 2339 , - 658 , - 1337 , - 600 , - 2223 , - 2430 , - 1221 , - 2372 , - 2107 , - 426 , - 1105 , - 368 , - 1991 , - 2198 , - 989 , - 2140 , - 1875 , - 194 , - 873 , - 136 , - 1759 , - 1966 , - 757 , - 1908 , - 1643 , - 3738 , - 641 , - 3680 , - 1527 , - 1734 , - 525 , - 1676 , - 1411 , - 3506 , - 409 , - 3448 , - 1295 , - 1502 , - 293 , - 1444 , - 1179 , - 3274 , - 177 , - 3216 , - 1063 , - 1270 , - 61 , - 1212 , - 947 , - 3042 , - 3721 , - 2984 , - 831 , - 1038 , - 3605 , - 980 , - 715 , - 2810 , - 3489 , - 2752 , - 599 , - 806 , - 3373 , - 748 , - 483 , - 2578 , - 3257 , - 2520 , - 367 , - 574 , - 3141 , - 516 , - 251 , - 2346 , - 3025 , - 2288 , - 135 , - 342 , - 2909 , - 284 , - 19 , - 2114 , - 2793 , - 2056 , - 3679 , - 110 , - 2677 , - 52 , - 3563 , - 1882 , - 2561 , - 1824 , - 3447 , - 3654 , - 2445 , - 3596 , - 3331 , - 1650 , - 2329 , - 1592 , - 3215 , - 3422 , - 2213 , - 3364 , - 3099 , - 1418 , - 2097 , - 1360 , - 2983 , - 3190 , - 1981 , - 3132 , - 2867 , - 1186 , - 1865 , - 1128 , - 2751 , - 2958 , - 1749 , - 2900 , - 2635 , - 954 , - 1633 , - 896 , - 2519 , - 2726 , - 1517 , - 2668 , - 2403 , - 722 , - 1401 , - 664 , - 2287 , - 2494 , - 1285 , - 2436 , - 2171 , - 490 , - 1169 , - 432 , - 2055 , - 2262 , - 1053 , - 2204 , - 1939 , - 258 , - 937 , - 200 , - 1823 , - 2030 , - 821 , - 1972 , - 1707 , - 26 , - 705 , - 3744 , - 1591 , - 1798 , - 589 , - 1740 , - 1475 , - 3570 , - 473 , - 3512 , - 1359 , - 1566 , - 357 , - 1508 , - 1243 , - 3338 , - 241 , - 3280 , - 1127 , - 1334 , - 125 , - 1276 , - 1011 , - 3106 , - 9 , - 3048 , - 895 , - 1102 , - 3669 , - 1044 , - 779 , - 2874 , - 3553 , - 2816 , - 663 , - 870 , - 3437 , - 812 , - 547 , - 2642 , - 3321 , - 2584 , - 431 , - 638 , - 3205 , - 580 , - 315 , - 2410 , - 3089 , - 2352 , - 199 , - 406 , - 2973 , - 348 , - 83 , - 2178 , - 2857 , - 2120 , - 3743 , - 174 , - 2741 , - 116 , - 3627 , - 1946 , - 2625 , - 1888 , - 3511 , - 3718 , - 2509 , - 3660 , - 3395 , - 1714 , - 2393 , - 1656 , - 3279 , - 3486 , - 2277 , - 3428 , - 3163 , - 1482 , - 2161 , - 1424 , - 3047 , - 3254 , - 2045 , - 3196 , - 2931 , - 1250 , - 1929 , - 1192 , - 2815 , - 3022 , - 1813 , - 2964 , - 2699 , - 1018 , - 1697 , - 960 , - 2583 , - 2790 , - 1581 , - 2732 , - 2467 , - 786 , - 1465 , - 728 , - 2351 , - 2558 , - 1349 , - 2500 , - 2235 , - 554 , - 1233 , - 496 , - 2119 , - 2326 , - 1117 , - 2268 , - 2003 , - 322 , - 1001 , - 264 , - 1887 , - 2094 , - 885 , - 2036 , - 1771 , - 90 , - 769 , - 32 , - 1655 , - 1862 , - 653 , - 1804 , - 1539 , - 3634 , - 537 , - 3576 , - 1423 , - 1630 , - 421 , - 1572 , - 1307 , - 3402 , - 305 , - 3344 , - 1191 , - 1398 , - 189 , - 1340 , - 1075 , - 3170 , - 73 , - 3112 , - 959 , - 1166 , - 3733 , - 1108 , - 843 , - 2938 , - 3617 , - 2880 , - 727 , - 934 , - 3501 , - 876 , - 611 , - 2706 , - 3385 , - 2648 , - 495 , - 702 , - 3269 , - 644 , - 379 , - 2474 , - 3153 , - 2416 , - 263 , - 470 , - 3037 , - 412 , - 147 , - 2242 , - 2921 , - 2184 , - 31 , - 238 , - 2805 , - 180 , - 3691 , - 2010 , - 2689 , - 1952 , - 3575 , - 6 , - 2573 , - 3724 , - 3459 , - 1778 , - 2457 , - 1720 , - 3343 , - 3550 , - 2341 , - 3492 , - 3227 , - 1546 , - 2225 , - 1488 , - 3111 , - 3318 , - 2109 , - 3260 , - 2995 , - 1314 , - 1993 , - 1256 , - 2879 , - 3086 , - 1877 , - 3028 , - 2763 , - 1082 , - 1761 , - 1024 , - 2647 , - 2854 , - 1645 , - 2796 , - 2531 , - 850 , - 1529 , - 792 , - 2415 , - 2622 , - 1413 , - 2564 , - 2299 , - 618 , - 1297 , - 560 , - 2183 , - 2390 , - 1181 , - 2332 , - 2067 , - 386 , - 1065 , - 328 , - 1951 , - 2158 , - 949 , - 2100 , - 1835 , - 154 , - 833 , - 96 , - 1719 , - 1926 , - 717 , - 1868 , - 1603 , - 3698 , - 601 , - 3640 , - 1487 , - 1694 , - 485 , - 1636 , - 1371 , - 3466 , - 369 , - 3408 , - 1255 , - 1462 , - 253 , - 1404 , - 1139 , - 3234 , - 137 , - 3176 , - 1023 , - 1230 , - 21 , - 1172 , - 907 , - 3002 , - 3681 , - 2944 , - 791 , - 998 , - 3565 , - 940 , - 675 , - 2770 , - 3449 , - 2712 , - 559 , - 766 , - 3333 , - 708 , - 443 , - 2538 , - 3217 , - 2480 , - 327 , - 534 , - 3101 , - 476 , - 211 , - 2306 , - 2985 , - 2248 , - 95 , - 302 , - 2869 , - 244 , - 3755 , - 2074 , - 2753 , - 2016 , - 3639 , - 70 , - 2637 , - 12 , - 3523 , - 1842 , - 2521 , - 1784 , - 3407 , - 3614 , - 2405 , - 3556 , - 3291 , - 1610 , - 2289 , - 1552 , - 3175 , - 3382 , - 2173 , - 3324 , - 3059 , - 1378 , - 2057 , - 1320 , - 2943 , - 3150 , - 1941 , - 3092 , - 2827 , - 1146 , - 1825 , - 1088 , - 2711 , - 2918 , - 1709 , - 2860 , - 2595 , - 914 , - 1593 , - 856 , - 2479 , - 2686 , - 1477 , - 2628 , - 2363 , - 682 , - 1361 , - 624 , - 2247 , - 2454 , - 1245 , - 2396 , - 2131 , - 450 , - 1129 , - 392 , - 2015 , - 2222 , - 1013 , - 2164 , - 1899 , - 218 , - 897 , - 160 , - 1783 , - 1990 , - 781 , - 1932 , - 1667 , - 3762 , - 665 , - 3704 , - 1551 , - 1758 , - 549 , - 1700 , - 1435 , - 3530 , - 433 , - 3472 , - 1319 , - 1526 , - 317 , - 1468 , - 1203 , - 3298 , - 201 , - 3240 , - 1087 , - 1294 , - 85 , - 1236 , - 971 , - 3066 , - 3745 , - 3008 , - 855 , - 1062 , - 3629 , - 1004 , - 739 , - 2834 , - 3513 , - 2776 , - 623 , - 830 , - 3397 , - 772 , - 507 , - 2602 , - 3281 , - 2544 , - 391 , - 598 , - 3165 , - 540 , - 275 , - 2370 , - 3049 , - 2312 , - 159 , - 366 , - 2933 , - 308 , - 43 , - 2138 , - 2817 , - 2080 , - 3703 , - 134 , - 2701 , - 76 , - 3587 , - 1906 , - 2585 , - 1848 , - 3471 , - 3678 , - 2469 , - 3620 , - 3355 , - 1674 , - 2353 , - 1616 , - 3239 , - 3446 , - 2237 , - 3388 , - 3123 , - 1442 , - 2121 , - 1384 , - 3007 , - 3214 , - 2005 , - 3156 , - 2891 , - 1210 , - 1889 , - 1152 , - 2775 , - 2982 , - 1773 , - 2924 , - 2659 , - 978 , - 1657 , - 920 , - 2543 , - 2750 , - 1541 , - 2692 , - 2427 , - 746 , - 1425 , - 688 , - 2311 , - 2518 , - 1309 , - 2460 , - 2195 , - 514 , - 1193 , - 456 , - 2079 , - 2286 , - 1077 , - 2228 , - 1963 , - 282 , - 961 , - 224 , - 1847 , - 2054 , - 845 , - 1996 , - 1731 , - 50 , - 729 , - 3768 , - 1615 , - 1822 , - 613 , - 1764 , - 1499 , - 3594 , - 497 , - 3536 , - 1383 , - 1590 , - 381 , - 1532 , - 1267 , - 3362 , - 265 , - 3304 , - 1151 , - 1358 , - 149 , - 1300 , - 1035 , - 3130 , - 33 , - 3072 , - 919 , - 1126 , - 3693 , - 1068 , - 803 , - 2898 , - 3577 , - 2840 , - 687 , - 894 , - 3461 , - 836 , - 571 , - 2666 , - 3345 , - 2608 , - 455 , - 662 , - 3229 , - 604 , - 339 , - 2434 , - 3113 , - 2376 , - 223 , - 430 , - 2997 , - 372 , - 107 , - 2202 , - 2881 , - 2144 , - 3767 , - 198 , - 2765 , - 140 , - 3651 , - 1970 , - 2649 , - 1912 , - 3535 , - 3742 , - 2533 , - 3684 , - 3419 , - 1738 , - 2417 , - 1680 , - 3303 , - 3510 , - 2301 , - 3452 , - 3187 , - 1506 , - 2185 , - 1448 , - 3071 , - 3278 , - 2069 , - 3220 , - 2955 , - 1274 , - 1953 , - 1216 , - 2839 , - 3046 , - 1837 , - 2988 , - 2723 , - 1042 , - 1721 , - 984 , - 2607 , - 2814 , - 1605 , - 2756 , - 2491 , - 810 , - 1489 , - 752 , - 2375 , - 2582 , - 1373 , - 2524 , - 2259 , - 578 , - 1257 , - 520 , - 2143 , - 2350 , - 1141 , - 2292 , - 2027 , - 346 , - 1025 , - 288 , - 1911 , - 2118 , - 909 , - 2060 , - 1795 , - 114 , - 793 , - 56 , - 1679 , - 1886 , - 677 , - 1828 , - 1563 , - 3658 , - 561 , - 3600 , - 1447 , - 1654 , - 445 , - 1596 , - 1331 , - 3426 , - 329 , - 3368 , - 1215 , - 1422 , - 213 , - 1364 , - 1099 , - 3194 , - 97 , - 3136 , - 983 , - 1190 , - 3757 , - 1132 , - 867 , - 2962 , - 3641 , - 2904 , - 751 , - 958 , - 3525 , - 900 , - 635 , - 2730 , - 3409 , - 2672 , - 519 , - 726 , - 3293 , - 668 , - 403 , - 2498 , - 3177 , - 2440 , - 287 , - 494 , - 3061 , - 436 , - 171 , - 2266 , - 2945 , - 2208 , - 55 , - 262 , - 2829 , - 204 , - 3715 , - 2034 , - 2713 , - 1976 , - 3599 , - 30 , - 2597 , - 3748 , - 3483 , - 1802 , - 2481 , - 1744 , - 3367 , - 3574 , - 2365 , - 3516 , - 3251 , - 1570 , - 2249 , - 1512 , - 3135 , - 3342 , - 2133 , - 3284 , - 3019 , - 1338 , - 2017 , - 1280 , - 2903 , - 3110 , - 1901 , - 3052 , - 2787 , - 1106 , - 1785 , - 1048 , - 2671 , - 2878 , - 1669 , - 2820 , - 2555 , - 874 , - 1553 , - 816 , - 2439 , - 2646 , - 1437 , - 2588 , - 2323 , - 642 , - 1321 , - 584 , - 2207 , - 2414 , - 1205 , - 2356 , - 2091 , - 410 , - 1089 , - 352 , - 1975 , - 2182 , - 973 , - 2124 , - 1859 , - 178 , - 857 , - 120 , - 1743 , - 1950 , - 741 , - 1892 , - 1627 , - 3722 , - 625 , - 3664 , - 1511 , - 1718 , - 509 , - 1660 , - 1395 , - 3490 , - 393 , - 3432 , - 1279 , - 1486 , - 277 , - 1428 , - 1163 , - 3258 , - 161 , - 3200 , - 1047 , - 1254 , - 45 , - 1196 , - 931 , - 3026 , - 3705 , - 2968 , - 815 , - 1022 , - 3589 , - 964 , - 699 , - 2794 , - 3473 , - 2736 , - 583 , - 790 , - 3357 , - 732 , - 467 , - 2562 , - 3241 , - 2504 , - 351 , - 558 , - 3125 , - 500 , - 235 , - 2330 , - 3009 , - 2272 , - 119 , - 326 , - 2893 , - 268 , - 3 , - 2098 , - 2777 , - 2040 , - 3663 , - 94 , - 2661 , - 36 , - 3547 , - 1866 , - 2545 , - 1808 , - 3431 , - 3638 , - 2429 , - 3580 , - 3315 , - 1634 , - 2313 , - 1576 , - 3199 , - 3406 , - 2197 , - 3348 , - 3083 , - 1402 , - 2081 , - 1344 , - 2967 , - 3174 , - 1965 , - 3116 , - 2851 , - 1170 , - 1849 , - 1112 , - 2735 , - 2942 , - 1733 , - 2884 , - 2619 , - 938 , - 1617 , - 880 , - 2503 , - 2710 , - 1501 , - 2652 , - 2387 , - 706 , - 1385 , - 648 , - 2271 , - 2478 , - 1269 , - 2420 , - 2155 , - 474 , - 1153 , - 416 , - 2039 , - 2246 , - 1037 , - 2188 , - 1923 , - 242 , - 921 , - 184 , - 1807 , - 2014 , - 805 , - 1956 , - 1691 , - 10 , - 689 , - 3728 , - 1575 , - 1782 , - 573 , - 1724 , - 1459 , - 3554 , - 457 , - 3496 , - 1343 , - 1550 , - 341 , - 1492 , - 1227 , - 3322 , - 225 , - 3264 , - 1111 , - 1318 , - 109 , - 1260 , - 995 , - 3090 , - 3769 , - 3032 , - 879 , - 1086 , - 3653 , - 1028 , - 763 , - 2858 , - 3537 , - 2800 , - 647 , - 854 , - 3421 , - 796 , - 531 , - 2626 , - 3305 , - 2568 , - 415 , - 622 , - 3189 , - 564 , - 299 , - 2394 , - 3073 , - 2336 , - 183 , - 390 , - 2957 , - 332 , - 67 , - 2162 , - 2841 , - 2104 , - 3727 , - 158 , - 2725 , - 100 , - 3611 , - 1930 , - 2609 , - 1872 , - 3495 , - 3702 , - 2493 , - 3644 , - 3379 , - 1698 , - 2377 , - 1640 , - 3263 , - 3470 , - 2261 , - 3412 , - 3147 , - 1466 , - 2145 , - 1408 , - 3031 , - 3238 , - 2029 , - 3180 , - 2915 , - 1234 , - 1913 , - 1176 , - 2799 , - 3006 , - 1797 , - 2948 , - 2683 , - 1002 , - 1681 , - 944 , - 2567 , - 2774 , - 1565 , - 2716 , - 2451 , - 770 , - 1449 , - 712 , - 2335 , - 2542 , - 1333 , - 2484 , - 2219 , - 538 , - 1217 , - 480 , - 2103 , - 2310 , - 1101 , - 2252 , - 1987 , - 306 , - 985 , - 248 , - 1871 , - 2078 , - 869 , - 2020 , - 1755 , - 74 , - 753 , - 16 , - 1639 , - 1846 , - 637 , - 1788 , - 1523 , - 3618 , - 521 , - 3560 , - 1407 , - 1614 , - 405 , - 1556 , - 1291 , - 3386 , - 289 , - 3328 , - 1175 , - 1382 , - 173 , - 1324 , - 1059 , - 3154 , - 57 , - 3096 , - 943 , - 1150 , - 3717 , - 1092 , - 827 , - 2922 , - 3601 , - 2864 , - 711 , - 918 , - 3485 , - 860 , - 595 , - 2690 , - 3369 , - 2632 , - 479 , - 686 , - 3253 , - 628 , - 363 , - 2458 , - 3137 , - 2400 , - 247 , - 454 , - 3021 , - 396 , - 131 , - 2226 , - 2905 , - 2168 , - 15 , - 222 , - 2789 , - 164 , - 3675 , - 1994 , - 2673 , - 1936 , - 3559 , - 3766 , - 2557 , - 3708 , - 3443 , - 1762 , - 2441 , - 1704 , - 3327 , - 3534 , - 2325 , - 3476 , - 3211 , - 1530 , - 2209 , - 1472 , - 3095 , - 3302 , - 2093 , - 3244 , - 2979 , - 1298 , - 1977 , - 1240 , - 2863 , - 3070 , - 1861 , - 3012 , - 2747 , - 1066 , - 1745 , - 1008 , - 2631 , - 2838 , - 1629 , - 2780 , - 2515 , - 834 , - 1513 , - 776 , - 2399 , - 2606 , - 1397 , - 2548 , - 2283 , - 602 , - 1281 , - 544 , - 2167 , - 2374 , - 1165 , - 2316 , - 2051 , - 370 , - 1049 , - 312 , - 1935 , - 2142 , - 933 , - 2084 , - 1819 , - 138 , - 817 , - 80 , - 1703 , - 1910 , - 701 , - 1852 , - 1587 , - 3682 , - 585 , - 3624 , - 1471 , - 1678 , - 469 , - 1620 , - 1355 , - 3450 , - 353 , - 3392 , - 1239 , - 1446 , - 237 , - 1388 , - 1123 , - 3218 , - 121 , - 3160 , - 1007 , - 1214 , - 5 , - 1156 , - 891 , - 2986 , - 3665 , - 2928 , - 775 , - 982 , - 3549 , - 924 , - 659 , - 2754 , - 3433 , - 2696 , - 543 , - 750 , - 3317 , - 692 , - 427 , - 2522 , - 3201 , - 2464 , - 311 , - 518 , - 3085 , - 460 , - 195 , - 2290 , - 2969 , - 2232 , - 79 , - 286 , - 2853 , - 228 , - 3739 , - 2058 , - 2737 , - 2000 , - 3623 , - 54 , - 2621 , - 3772 , - 3507 , - 1826 , - 2505 , - 1768 , - 3391 , - 3598 , - 2389 , - 3540 , - 3275 , - 1594 , - 2273 , - 1536 , - 3159 , - 3366 , - 2157 , - 3308 , - 3043 , - 1362 , - 2041 , - 1304 , - 2927 , - 3134 , - 1925 , - 3076 , - 2811 , - 1130 , - 1809 , - 1072 , - 2695 , - 2902 , - 1693 , - 2844 , - 2579 , - 898 , - 1577 , - 840 , - 2463 , - 2670 , - 1461 , - 2612 , - 2347 , - 666 , - 1345 , - 608 , - 2231 , - 2438 , - 1229 , - 2380 , - 2115 , - 434 , - 1113 , - 376 , - 1999 , - 2206 , - 997 , - 2148 , - 1883 , - 202 , - 881 , - 144 , - 1767 , - 1974 , - 765 , - 1916 , - 1651 , - 3746 , - 649 , - 3688 , - 1535 , - 1742 , - 533 , - 1684 , - 1419 , - 3514 , - 417 , - 3456 , - 1303 , - 1510 , - 301 , - 1452 , - 1187 , - 3282 , - 185 , - 3224 , - 1071 , - 1278 , - 69 , - 1220 , - 955 , - 3050 , - 3729 , - 2992 , - 839 , - 1046 , - 3613 , - 988 , - 723 , - 2818 , - 3497 , - 2760 , - 607 , - 814 , - 3381 , - 756 , - 491 , - 2586 , - 3265 , - 2528 , - 375 , - 582 , - 3149 , - 524 , - 259 , - 2354 , - 3033 , - 2296 , - 143 , - 350 , - 2917 , - 292 , - 27 , - 2122 , - 2801 , - 2064 , - 3687 , - 118 , - 2685 , - 60 , - 3571 , - 1890 , - 2569 , - 1832 , - 3455 , - 3662 , - 2453 , - 3604 , - 3339 , - 1658 , - 2337 , - 1600 , - 3223 , - 3430 , - 2221 , - 3372 , - 3107 , - 1426 , - 2105 , - 1368 , - 2991 , - 3198 , - 1989 , - 3140 , - 2875 , - 1194 , - 1873 , - 1136 , - 2759 , - 2966 , - 1757 , - 2908 , - 2643 , - 962 , - 1641 , - 904 , - 2527 , - 2734 , - 1525 , - 2676 , - 2411 , - 730 , - 1409 , - 672 , - 2295 , - 2502 , - 1293 , - 2444 , - 2179 , - 498 , - 1177 , - 440 , - 2063 , - 2270 , - 1061 , - 2212 , - 1947 , - 266 , - 945 , - 208 , - 1831 , - 2038 , - 829 , - 1980 , - 1715 , - 34 , - 713 , - 3752 , - 1599 , - 1806 , - 597 , - 1748 , - 1483 , - 3578 , - 481 , - 3520 , - 1367 , - 1574 , - 365 , - 1516 , - 1251 , - 3346 , - 249 , - 3288 , - 1135 , - 1342 , - 133 , - 1284 , - 1019 , - 3114 , - 17 , - 3056 , - 903 , - 1110 , - 3677 , - 1052 , - 787 , - 2882 , - 3561 , - 2824 , - 671 , - 878 , - 3445 , - 820 , - 555 , - 2650 , - 3329 , - 2592 , - 439 , - 646 , - 3213 , - 588 , - 323 , - 2418 , - 3097 , - 2360 , - 207 , - 414 , - 2981 , - 356 , - 91 , - 2186 , - 2865 , - 2128 , - 3751 , - 182 , - 2749 , - 124 , - 3635 , - 1954 , - 2633 , - 1896 , - 3519 , - 3726 , - 2517 , - 3668 , - 3403 , - 1722 , - 2401 , - 1664 , - 3287 , - 3494 , - 2285 , - 3436 , - 3171 , - 1490 , - 2169 , - 1432 , - 3055 , - 3262 , - 2053 , - 3204 , - 2939 , - 1258 , - 1937 , - 1200 , - 2823 , - 3030 , - 1821 , - 2972 , - 2707 , - 1026 , - 1705 , - 968 , - 2591 , - 2798 , - 1589 , - 2740 , - 2475 , - 794 , - 1473 , - 736 , - 2359 , - 2566 , - 1357 , - 2508 , - 2243 , - 562 , - 1241 , - 504 , - 2127 , - 2334 , - 1125 , - 2276 , - 2011 , - 330 , - 1009 , - 272 , - 1895 , - 2102 , - 893 , - 2044 , - 1779 , - 98 , - 777 , - 40 , - 1663 , - 1870 , - 661 , - 1812 , - 1547 , - 3642 , - 545 , - 3584 , - 1431 , - 1638 , - 429 , - 1580 , - 1315 , - 3410 , - 313 , - 3352 , - 1199 , - 1406 , - 197 , - 1348 , - 1083 , - 3178 , - 81 , - 3120 , - 967 , - 1174 , - 3741 , - 1116 , - 851 , - 2946 , - 3625 , - 2888 , - 735 , - 942 , - 3509 , - 884 , - 619 , - 2714 , - 3393 , - 2656 , - 503 , - 710 , - 3277 , - 652 , - 387 , - 2482 , - 3161 , - 2424 , - 271 , - 478 , - 3045 , - 420 , - 155 , - 2250 , - 2929 , - 2192 , - 39 , - 246 , - 2813 , - 188 , - 3699 , - 2018 , - 2697 , - 1960 , - 3583 , - 14 , - 2581 , - 3732 , - 3467 , - 1786 , - 2465 , - 1728 , - 3351 , - 3558 , - 2349 , - 3500 , - 3235 , - 1554 , - 2233 , - 1496 , - 3119 , - 3326 , - 2117 , - 3268 , - 3003 , - 1322 , - 2001 , - 1264 , - 2887 , - 3094 , - 1885 , - 3036 , - 2771 , - 1090 , - 1769 , - 1032 , - 2655 , - 2862 , - 1653 , - 2804 , - 2539 , - 858 , - 1537 , - 800 , - 2423 , - 2630 , - 1421 , - 2572 , - 2307 , - 626 , - 1305 , - 568 , - 2191 , - 2398 , - 1189 , - 2340 , - 2075 , - 394 , - 1073 , - 336 , - 1959 , - 2166 , - 957 , - 2108 , - 1843 , - 162 , - 841 , - 104 , - 1727 , - 1934 , - 725 , - 1876 , - 1611 , - 3706 , - 609 , - 3648 , - 1495 , - 1702 , - 493 , - 1644 , - 1379 , - 3474 , - 377 , - 3416 , - 1263 , - 1470 , - 261 , - 1412 , - 1147 , - 3242 , - 145 , - 3184 , - 1031 , - 1238 , - 29 , - 1180 , - 915 , - 3010 , - 3689 , - 2952 , - 799 , - 1006 , - 3573 , - 948 , - 683 , - 2778 , - 3457 , - 2720 , - 567 , - 774 , - 3341 , - 716 , - 451 , - 2546 , - 3225 , - 2488 , - 335 , - 542 , - 3109 , - 484 , - 219 , - 2314 , - 2993 , - 2256 , - 103 , - 310 , - 2877 , - 252 , - 3763 , - 2082 , - 2761 , - 2024 , - 3647 , - 78 , - 2645 , - 20 , - 3531 , - 1850 , - 2529 , - 1792 , - 3415 , - 3622 , - 2413 , - 3564 , - 3299 , - 1618 , - 2297 , - 1560 , - 3183 , - 3390 , - 2181 , - 3332 , - 3067 , - 1386 , - 2065 , - 1328 , - 2951 , - 3158 , - 1949 , - 3100 , - 2835 , - 1154 , - 1833 , - 1096 , - 2719 , - 2926 , - 1717 , - 2868 , - 2603 , - 922 , - 1601 , - 864 , - 2487 , - 2694 , - 1485 , - 2636 , - 2371 , - 690 , - 1369 , - 632 , - 2255 , - 2462 , - 1253 , - 2404 , - 2139 , - 458 , - 1137 , - 400 , - 2023 , - 2230 , - 1021 , - 2172 , - 1907 , - 226 , - 905 , - 168 , - 1791 , - 1998 , - 789 , - 1940 , - 1675 , - 3770 , - 673 , - 3712 , - 1559 , - 1766 , - 557 , - 1708 , - 1443 , - 3538 , - 441 , - 3480 , - 1327 , - 1534 , - 325 , - 1476 , - 1211 , - 3306 , - 209 , - 3248 , - 1095 , - 1302 , - 93 , - 1244 , - 979 , - 3074 , - 3753 , - 3016 , - 863 , - 1070 , - 3637 , - 1012 , - 747 , - 2842 , - 3521 , - 2784 , - 631 , - 838 , - 3405 , - 780 , - 515 , - 2610 , - 3289 , - 2552 , - 399 , - 606 , - 3173 , - 548 , - 283 , - 2378 , - 3057 , - 2320 , - 167 , - 374 , - 2941 , - 316 , - 51 , - 2146 , - 2825 , - 2088 , - 3711 , - 142 , - 2709 , - 84 , - 3595 , - 1914 , - 2593 , - 1856 , - 3479 , - 3686 , - 2477 , - 3628 , - 3363 , - 1682 , - 2361 , - 1624 , - 3247 , - 3454 , - 2245 , - 3396 , - 3131 , - 1450 , - 2129 , - 1392 , - 3015 , - 3222 , - 2013 , - 3164 , - 2899 , - 1218 , - 1897 , - 1160 , - 2783 , - 2990 , - 1781 , - 2932 , - 2667 , - 986 , - 1665 , - 928 , - 2551 , - 2758 , - 1549 , - 2700 , - 2435 , - 754 , - 1433 , - 696 , - 2319 , - 2526 , - 1317 , - 2468 , - 2203 , - 522 , - 1201 , - 464 , - 2087 , - 2294 , - 1085 , - 2236 , - 1971 , - 290 , - 969 , - 232 , - 1855 , - 2062 , - 853 , - 2004 , - 1739 , - 58 , - 737 , - 0 , - 571 , - 2342 , - 1473 , - 1804 , - 3335 , - 2226 , - 2317 , - 3608 , - 2259 , - 2110 , - 3161 , - 1572 , - 1183 , - 1994 , - 165 , - 3376 , - 107 , - 1878 , - 1009 , - 1340 , - 2871 , - 1762 , - 1853 , - 3144 , - 1795 , - 1646 , - 2697 , - 1108 , - 719 , - 1530 , - 3541 , - 2912 , - 3483 , - 1414 , - 545 , - 876 , - 2407 , - 1298 , - 1389 , - 2680 , - 1331 , - 1182 , - 2233 , - 644 , - 255 , - 1066 , - 3077 , - 2448 , - 3019 , - 950 , - 81 , - 412 , - 1943 , - 834 , - 925 , - 2216 , - 867 , - 718 , - 1769 , - 180 , - 3631 , - 602 , - 2613 , - 1984 , - 2555 , - 486 , - 3457 , - 3788 , - 1479 , - 370 , - 461 , - 1752 , - 403 , - 254 , - 1305 , - 3556 , - 3167 , - 138 , - 2149 , - 1520 , - 2091 , - 22 , - 2993 , - 3324 , - 1015 , - 3746 , - 3837 , - 1288 , - 3779 , - 3630 , - 841 , - 3092 , - 2703 , - 3514 , - 1685 , - 1056 , - 1627 , - 3398 , - 2529 , - 2860 , - 551 , - 3282 , - 3373 , - 824 , - 3315 , - 3166 , - 377 , - 2628 , - 2239 , - 3050 , - 1221 , - 592 , - 1163 , - 2934 , - 2065 , - 2396 , - 87 , - 2818 , - 2909 , - 360 , - 2851 , - 2702 , - 3753 , - 2164 , - 1775 , - 2586 , - 757 , - 128 , - 699 , - 2470 , - 1601 , - 1932 , - 3463 , - 2354 , - 2445 , - 3736 , - 2387 , - 2238 , - 3289 , - 1700 , - 1311 , - 2122 , - 293 , - 3504 , - 235 , - 2006 , - 1137 , - 1468 , - 2999 , - 1890 , - 1981 , - 3272 , - 1923 , - 1774 , - 2825 , - 1236 , - 847 , - 1658 , - 3669 , - 3040 , - 3611 , - 1542 , - 673 , - 1004 , - 2535 , - 1426 , - 1517 , - 2808 , - 1459 , - 1310 , - 2361 , - 772 , - 383 , - 1194 , - 3205 , - 2576 , - 3147 , - 1078 , - 209 , - 540 , - 2071 , - 962 , - 1053 , - 2344 , - 995 , - 846 , - 1897 , - 308 , - 3759 , - 730 , - 2741 , - 2112 , - 2683 , - 614 , - 3585 , - 76 , - 1607 , - 498 , - 589 , - 1880 , - 531 , - 382 , - 1433 , - 3684 , - 3295 , - 266 , - 2277 , - 1648 , - 2219 , - 150 , - 3121 , - 3452 , - 1143 , - 34 , - 125 , - 1416 , - 67 , - 3758 , - 969 , - 3220 , - 2831 , - 3642 , - 1813 , - 1184 , - 1755 , - 3526 , - 2657 , - 2988 , - 679 , - 3410 , - 3501 , - 952 , - 3443 , - 3294 , - 505 , - 2756 , - 2367 , - 3178 , - 1349 , - 720 , - 1291 , - 3062 , - 2193 , - 2524 , - 215 , - 2946 , - 3037 , - 488 , - 2979 , - 2830 , - 41 , - 2292 , - 1903 , - 2714 , - 885 , - 256 , - 827 , - 2598 , - 1729 , - 2060 , - 3591 , - 2482 , - 2573 , - 24 , - 2515 , - 2366 , - 3417 , - 1828 , - 1439 , - 2250 , - 421 , - 3632 , - 363 , - 2134 , - 1265 , - 1596 , - 3127 , - 2018 , - 2109 , - 3400 , - 2051 , - 1902 , - 2953 , - 1364 , - 975 , - 1786 , - 3797 , - 3168 , - 3739 , - 1670 , - 801 , - 1132 , - 2663 , - 1554 , - 1645 , - 2936 , - 1587 , - 1438 , - 2489 , - 900 , - 511 , - 1322 , - 3333 , - 2704 , - 3275 , - 1206 , - 337 , - 668 , - 2199 , - 1090 , - 1181 , - 2472 , - 1123 , - 974 , - 2025 , - 436 , - 47 , - 858 , - 2869 , - 2240 , - 2811 , - 742 , - 3713 , - 204 , - 1735 , - 626 , - 717 , - 2008 , - 659 , - 510 , - 1561 , - 3812 , - 3423 , - 394 , - 2405 , - 1776 , - 2347 , - 278 , - 3249 , - 3580 , - 1271 , - 162 , - 253 , - 1544 , - 195 , - 46 , - 1097 , - 3348 , - 2959 , - 3770 , - 1941 , - 1312 , - 1883 , - 3654 , - 2785 , - 3116 , - 807 , - 3538 , - 3629 , - 1080 , - 3571 , - 3422 , - 633 , - 2884 , - 2495 , - 3306 , - 1477 , - 848 , - 1419 , - 3190 , - 2321 , - 2652 , - 343 , - 3074 , - 3165 , - 616 , - 3107 , - 2958 , - 169 , - 2420 , - 2031 , - 2842 , - 1013 , - 384 , - 955 , - 2726 , - 1857 , - 2188 , - 3719 , - 2610 , - 2701 , - 152 , - 2643 , - 2494 , - 3545 , - 1956 , - 1567 , - 2378 , - 549 , - 3760 , - 491 , - 2262 , - 1393 , - 1724 , - 3255 , - 2146 , - 2237 , - 3528 , - 2179 , - 2030 , - 3081 , - 1492 , - 1103 , - 1914 , - 85 , - 3296 , - 27 , - 1798 , - 929 , - 1260 , - 2791 , - 1682 , - 1773 , - 3064 , - 1715 , - 1566 , - 2617 , - 1028 , - 639 , - 1450 , - 3461 , - 2832 , - 3403 , - 1334 , - 465 , - 796 , - 2327 , - 1218 , - 1309 , - 2600 , - 1251 , - 1102 , - 2153 , - 564 , - 175 , - 986 , - 2997 , - 2368 , - 2939 , - 870 , - 1 , - 332 , - 1863 , - 754 , - 845 , - 2136 , - 787 , - 638 , - 1689 , - 100 , - 3551 , - 522 , - 2533 , - 1904 , - 2475 , - 406 , - 3377 , - 3708 , - 1399 , - 290 , - 381 , - 1672 , - 323 , - 174 , - 1225 , - 3476 , - 3087 , - 58 , - 2069 , - 1440 , - 2011 , - 3782 , - 2913 , - 3244 , - 935 , - 3666 , - 3757 , - 1208 , - 3699 , - 3550 , - 761 , - 3012 , - 2623 , - 3434 , - 1605 , - 976 , - 1547 , - 3318 , - 2449 , - 2780 , - 471 , - 3202 , - 3293 , - 744 , - 3235 , - 3086 , - 297 , - 2548 , - 2159 , - 2970 , - 1141 , - 512 , - 1083 , - 2854 , - 1985 , - 2316 , - 7 , - 2738 , - 2829 , - 280 , - 2771 , - 2622 , - 3673 , - 2084 , - 1695 , - 2506 , - 677 , - 48 , - 619 , - 2390 , - 1521 , - 1852 , - 3383 , - 2274 , - 2365 , - 3656 , - 2307 , - 2158 , - 3209 , - 1620 , - 1231 , - 2042 , - 213 , - 3424 , - 155 , - 1926 , - 1057 , - 1388 , - 2919 , - 1810 , - 1901 , - 3192 , - 1843 , - 1694 , - 2745 , - 1156 , - 767 , - 1578 , - 3589 , - 2960 , - 3531 , - 1462 , - 593 , - 924 , - 2455 , - 1346 , - 1437 , - 2728 , - 1379 , - 1230 , - 2281 , - 692 , - 303 , - 1114 , - 3125 , - 2496 , - 3067 , - 998 , - 129 , - 460 , - 1991 , - 882 , - 973 , - 2264 , - 915 , - 766 , - 1817 , - 228 , - 3679 , - 650 , - 2661 , - 2032 , - 2603 , - 534 , - 3505 , - 3836 , - 1527 , - 418 , - 509 , - 1800 , - 451 , - 302 , - 1353 , - 3604 , - 3215 , - 186 , - 2197 , - 1568 , - 2139 , - 70 , - 3041 , - 3372 , - 1063 , - 3794 , - 45 , - 1336 , - 3827 , - 3678 , - 889 , - 3140 , - 2751 , - 3562 , - 1733 , - 1104 , - 1675 , - 3446 , - 2577 , - 2908 , - 599 , - 3330 , - 3421 , - 872 , - 3363 , - 3214 , - 425 , - 2676 , - 2287 , - 3098 , - 1269 , - 640 , - 1211 , - 2982 , - 2113 , - 2444 , - 135 , - 2866 , - 2957 , - 408 , - 2899 , - 2750 , - 3801 , - 2212 , - 1823 , - 2634 , - 805 , - 176 , - 747 , - 2518 , - 1649 , - 1980 , - 3511 , - 2402 , - 2493 , - 3784 , - 2435 , - 2286 , - 3337 , - 1748 , - 1359 , - 2170 , - 341 , - 3552 , - 283 , - 2054 , - 1185 , - 1516 , - 3047 , - 1938 , - 2029 , - 3320 , - 1971 , - 1822 , - 2873 , - 1284 , - 895 , - 1706 , - 3717 , - 3088 , - 3659 , - 1590 , - 721 , - 1052 , - 2583 , - 1474 , - 1565 , - 2856 , - 1507 , - 1358 , - 2409 , - 820 , - 431 , - 1242 , - 3253 , - 2624 , - 3195 , - 1126 , - 257 , - 588 , - 2119 , - 1010 , - 1101 , - 2392 , - 1043 , - 894 , - 1945 , - 356 , - 3807 , - 778 , - 2789 , - 2160 , - 2731 , - 662 , - 3633 , - 124 , - 1655 , - 546 , - 637 , - 1928 , - 579 , - 430 , - 1481 , - 3732 , - 3343 , - 314 , - 2325 , - 1696 , - 2267 , - 198 , - 3169 , - 3500 , - 1191 , - 82 , - 173 , - 1464 , - 115 , - 3806 , - 1017 , - 3268 , - 2879 , - 3690 , - 1861 , - 1232 , - 1803 , - 3574 , - 2705 , - 3036 , - 727 , - 3458 , - 3549 , - 1000 , - 3491 , - 3342 , - 553 , - 2804 , - 2415 , - 3226 , - 1397 , - 768 , - 1339 , - 3110 , - 2241 , - 2572 , - 263 , - 2994 , - 3085 , - 536 , - 3027 , - 2878 , - 89 , - 2340 , - 1951 , - 2762 , - 933 , - 304 , - 875 , - 2646 , - 1777 , - 2108 , - 3639 , - 2530 , - 2621 , - 72 , - 2563 , - 2414 , - 3465 , - 1876 , - 1487 , - 2298 , - 469 , - 3680 , - 411 , - 2182 , - 1313 , - 1644 , - 3175 , - 2066 , - 2157 , - 3448 , - 2099 , - 1950 , - 3001 , - 1412 , - 1023 , - 1834 , - 5 , - 3216 , - 3787 , - 1718 , - 849 , - 1180 , - 2711 , - 1602 , - 1693 , - 2984 , - 1635 , - 1486 , - 2537 , - 948 , - 559 , - 1370 , - 3381 , - 2752 , - 3323 , - 1254 , - 385 , - 716 , - 2247 , - 1138 , - 1229 , - 2520 , - 1171 , - 1022 , - 2073 , - 484 , - 95 , - 906 , - 2917 , - 2288 , - 2859 , - 790 , - 3761 , - 252 , - 1783 , - 674 , - 765 , - 2056 , - 707 , - 558 , - 1609 , - 20 , - 3471 , - 442 , - 2453 , - 1824 , - 2395 , - 326 , - 3297 , - 3628 , - 1319 , - 210 , - 301 , - 1592 , - 243 , - 94 , - 1145 , - 3396 , - 3007 , - 3818 , - 1989 , - 1360 , - 1931 , - 3702 , - 2833 , - 3164 , - 855 , - 3586 , - 3677 , - 1128 , - 3619 , - 3470 , - 681 , - 2932 , - 2543 , - 3354 , - 1525 , - 896 , - 1467 , - 3238 , - 2369 , - 2700 , - 391 , - 3122 , - 3213 , - 664 , - 3155 , - 3006 , - 217 , - 2468 , - 2079 , - 2890 , - 1061 , - 432 , - 1003 , - 2774 , - 1905 , - 2236 , - 3767 , - 2658 , - 2749 , - 200 , - 2691 , - 2542 , - 3593 , - 2004 , - 1615 , - 2426 , - 597 , - 3808 , - 539 , - 2310 , - 1441 , - 1772 , - 3303 , - 2194 , - 2285 , - 3576 , - 2227 , - 2078 , - 3129 , - 1540 , - 1151 , - 1962 , - 133 , - 3344 , - 75 , - 1846 , - 977 , - 1308 , - 2839 , - 1730 , - 1821 , - 3112 , - 1763 , - 1614 , - 2665 , - 1076 , - 687 , - 1498 , - 3509 , - 2880 , - 3451 , - 1382 , - 513 , - 844 , - 2375 , - 1266 , - 1357 , - 2648 , - 1299 , - 1150 , - 2201 , - 612 , - 223 , - 1034 , - 3045 , - 2416 , - 2987 , - 918 , - 49 , - 380 , - 1911 , - 802 , - 893 , - 2184 , - 835 , - 686 , - 1737 , - 148 , - 3599 , - 570 , - 2581 , - 1952 , - 2523 , - 454 , - 3425 , - 3756 , - 1447 , - 338 , - 429 , - 1720 , - 371 , - 222 , - 1273 , - 3524 , - 3135 , - 106 , - 2117 , - 1488 , - 2059 , - 3830 , - 2961 , - 3292 , - 983 , - 3714 , - 3805 , - 1256 , - 3747 , - 3598 , - 809 , - 3060 , - 2671 , - 3482 , - 1653 , - 1024 , - 1595 , - 3366 , - 2497 , - 2828 , - 519 , - 3250 , - 3341 , - 792 , - 3283 , - 3134 , - 345 , - 2596 , - 2207 , - 3018 , - 1189 , - 560 , - 1131 , - 2902 , - 2033 , - 2364 , - 55 , - 2786 , - 2877 , - 328 , - 2819 , - 2670 , - 3721 , - 2132 , - 1743 , - 2554 , - 725 , - 96 , - 667 , - 2438 , - 1569 , - 1900 , - 3431 , - 2322 , - 2413 , - 3704 , - 2355 , - 2206 , - 3257 , - 1668 , - 1279 , - 2090 , - 261 , - 3472 , - 203 , - 1974 , - 1105 , - 1436 , - 2967 , - 1858 , - 1949 , - 3240 , - 1891 , - 1742 , - 2793 , - 1204 , - 815 , - 1626 , - 3637 , - 3008 , - 3579 , - 1510 , - 641 , - 972 , - 2503 , - 1394 , - 1485 , - 2776 , - 1427 , - 1278 , - 2329 , - 740 , - 351 , - 1162 , - 3173 , - 2544 , - 3115 , - 1046 , - 177 , - 508 , - 2039 , - 930 , - 1021 , - 2312 , - 963 , - 814 , - 1865 , - 276 , - 3727 , - 698 , - 2709 , - 2080 , - 2651 , - 582 , - 3553 , - 44 , - 1575 , - 466 , - 557 , - 1848 , - 499 , - 350 , - 1401 , - 3652 , - 3263 , - 234 , - 2245 , - 1616 , - 2187 , - 118 , - 3089 , - 3420 , - 1111 , - 2 , - 93 , - 1384 , - 35 , - 3726 , - 937 , - 3188 , - 2799 , - 3610 , - 1781 , - 1152 , - 1723 , - 3494 , - 2625 , - 2956 , - 647 , - 3378 , - 3469 , - 920 , - 3411 , - 3262 , - 473 , - 2724 , - 2335 , - 3146 , - 1317 , - 688 , - 1259 , - 3030 , - 2161 , - 2492 , - 183 , - 2914 , - 3005 , - 456 , - 2947 , - 2798 , - 9 , - 2260 , - 1871 , - 2682 , - 853 , - 224 , - 795 , - 2566 , - 1697 , - 2028 , - 3559 , - 2450 , - 2541 , - 3832 , - 2483 , - 2334 , - 3385 , - 1796 , - 1407 , - 2218 , - 389 , - 3600 , - 331 , - 2102 , - 1233 , - 1564 , - 3095 , - 1986 , - 2077 , - 3368 , - 2019 , - 1870 , - 2921 , - 1332 , - 943 , - 1754 , - 3765 , - 3136 , - 3707 , - 1638 , - 769 , - 1100 , - 2631 , - 1522 , - 1613 , - 2904 , - 1555 , - 1406 , - 2457 , - 868 , - 479 , - 1290 , - 3301 , - 2672 , - 3243 , - 1174 , - 305 , - 636 , - 2167 , - 1058 , - 1149 , - 2440 , - 1091 , - 942 , - 1993 , - 404 , - 15 , - 826 , - 2837 , - 2208 , - 2779 , - 710 , - 3681 , - 172 , - 1703 , - 594 , - 685 , - 1976 , - 627 , - 478 , - 1529 , - 3780 , - 3391 , - 362 , - 2373 , - 1744 , - 2315 , - 246 , - 3217 , - 3548 , - 1239 , - 130 , - 221 , - 1512 , - 163 , - 14 , - 1065 , - 3316 , - 2927 , - 3738 , - 1909 , - 1280 , - 1851 , - 3622 , - 2753 , - 3084 , - 775 , - 3506 , - 3597 , - 1048 , - 3539 , - 3390 , - 601 , - 2852 , - 2463 , - 3274 , - 1445 , - 816 , - 1387 , - 3158 , - 2289 , - 2620 , - 311 , - 3042 , - 3133 , - 584 , - 3075 , - 2926 , - 137 , - 2388 , - 1999 , - 2810 , - 981 , - 352 , - 923 , - 2694 , - 1825 , - 2156 , - 3687 , - 2578 , - 2669 , - 120 , - 2611 , - 2462 , - 3513 , - 1924 , - 1535 , - 2346 , - 517 , - 3728 , - 459 , - 2230 , - 1361 , - 1692 , - 3223 , - 2114 , - 2205 , - 3496 , - 2147 , - 1998 , - 3049 , - 1460 , - 1071 , - 1882 , - 53 , - 3264 , - 3835 , - 1766 , - 897 , - 1228 , - 2759 , - 1650 , - 1741 , - 3032 , - 1683 , - 1534 , - 2585 , - 996 , - 607 , - 1418 , - 3429 , - 2800 , - 3371 , - 1302 , - 433 , - 764 , - 2295 , - 1186 , - 1277 , - 2568 , - 1219 , - 1070 , - 2121 , - 532 , - 143 , - 954 , - 2965 , - 2336 , - 2907 , - 838 , - 3809 , - 300 , - 1831 , - 722 , - 813 , - 2104 , - 755 , - 606 , - 1657 , - 68 , - 3519 , - 490 , - 2501 , - 1872 , - 2443 , - 374 , - 3345 , - 3676 , - 1367 , - 258 , - 349 , - 1640 , - 291 , - 142 , - 1193 , - 3444 , - 3055 , - 26 , - 2037 , - 1408 , - 1979 , - 3750 , - 2881 , - 3212 , - 903 , - 3634 , - 3725 , - 1176 , - 3667 , - 3518 , - 729 , - 2980 , - 2591 , - 3402 , - 1573 , - 944 , - 1515 , - 3286 , - 2417 , - 2748 , - 439 , - 3170 , - 3261 , - 712 , - 3203 , - 3054 , - 265 , - 2516 , - 2127 , - 2938 , - 1109 , - 480 , - 1051 , - 2822 , - 1953 , - 2284 , - 3815 , - 2706 , - 2797 , - 248 , - 2739 , - 2590 , - 3641 , - 2052 , - 1663 , - 2474 , - 645 , - 16 , - 587 , - 2358 , - 1489 , - 1820 , - 3351 , - 2242 , - 2333 , - 3624 , - 2275 , - 2126 , - 3177 , - 1588 , - 1199 , - 2010 , - 181 , - 3392 , - 123 , - 1894 , - 1025 , - 1356 , - 2887 , - 1778 , - 1869 , - 3160 , - 1811 , - 1662 , - 2713 , - 1124 , - 735 , - 1546 , - 3557 , - 2928 , - 3499 , - 1430 , - 561 , - 892 , - 2423 , - 1314 , - 1405 , - 2696 , - 1347 , - 1198 , - 2249 , - 660 , - 271 , - 1082 , - 3093 , - 2464 , - 3035 , - 966 , - 97 , - 428 , - 1959 , - 850 , - 941 , - 2232 , - 883 , - 734 , - 1785 , - 196 , - 3647 , - 618 , - 2629 , - 2000 , - 2571 , - 502 , - 3473 , - 3804 , - 1495 , - 386 , - 477 , - 1768 , - 419 , - 270 , - 1321 , - 3572 , - 3183 , - 154 , - 2165 , - 1536 , - 2107 , - 38 , - 3009 , - 3340 , - 1031 , - 3762 , - 13 , - 1304 , - 3795 , - 3646 , - 857 , - 3108 , - 2719 , - 3530 , - 1701 , - 1072 , - 1643 , - 3414 , - 2545 , - 2876 , - 567 , - 3298 , - 3389 , - 840 , - 3331 , - 3182 , - 393 , - 2644 , - 2255 , - 3066 , - 1237 , - 608 , - 1179 , - 2950 , - 2081 , - 2412 , - 103 , - 2834 , - 2925 , - 376 , - 2867 , - 2718 , - 3769 , - 2180 , - 1791 , - 2602 , - 773 , - 144 , - 715 , - 2486 , - 1617 , - 1948 , - 3479 , - 2370 , - 2461 , - 3752 , - 2403 , - 2254 , - 3305 , - 1716 , - 1327 , - 2138 , - 309 , - 3520 , - 251 , - 2022 , - 1153 , - 1484 , - 3015 , - 1906 , - 1997 , - 3288 , - 1939 , - 1790 , - 2841 , - 1252 , - 863 , - 1674 , - 3685 , - 3056 , - 3627 , - 1558 , - 689 , - 1020 , - 2551 , - 1442 , - 1533 , - 2824 , - 1475 , - 1326 , - 2377 , - 788 , - 399 , - 1210 , - 3221 , - 2592 , - 3163 , - 1094 , - 225 , - 556 , - 2087 , - 978 , - 1069 , - 2360 , - 1011 , - 862 , - 1913 , - 324 , - 3775 , - 746 , - 2757 , - 2128 , - 2699 , - 630 , - 3601 , - 92 , - 1623 , - 514 , - 605 , - 1896 , - 547 , - 398 , - 1449 , - 3700 , - 3311 , - 282 , - 2293 , - 1664 , - 2235 , - 166 , - 3137 , - 3468 , - 1159 , - 50 , - 141 , - 1432 , - 83 , - 3774 , - 985 , - 3236 , - 2847 , - 3658 , - 1829 , - 1200 , - 1771 , - 3542 , - 2673 , - 3004 , - 695 , - 3426 , - 3517 , - 968 , - 3459 , - 3310 , - 521 , - 2772 , - 2383 , - 3194 , - 1365 , - 736 , - 1307 , - 3078 , - 2209 , - 2540 , - 231 , - 2962 , - 3053 , - 504 , - 2995 , - 2846 , - 57 , - 2308 , - 1919 , - 2730 , - 901 , - 272 , - 843 , - 2614 , - 1745 , - 2076 , - 3607 , - 2498 , - 2589 , - 40 , - 2531 , - 2382 , - 3433 , - 1844 , - 1455 , - 2266 , - 437 , - 3648 , - 379 , - 2150 , - 1281 , - 1612 , - 3143 , - 2034 , - 2125 , - 3416 , - 2067 , - 1918 , - 2969 , - 1380 , - 991 , - 1802 , - 3813 , - 3184 , - 3755 , - 1686 , - 817 , - 1148 , - 2679 , - 1570 , - 1661 , - 2952 , - 1603 , - 1454 , - 2505 , - 916 , - 527 , - 1338 , - 3349 , - 2720 , - 3291 , - 1222 , - 353 , - 684 , - 2215 , - 1106 , - 1197 , - 2488 , - 1139 , - 990 , - 2041 , - 452 , - 63 , - 874 , - 2885 , - 2256 , - 2827 , - 758 , - 3729 , - 220 , - 1751 , - 642 , - 733 , - 2024 , - 675 , - 526 , - 1577 , - 3828 , - 3439 , - 410 , - 2421 , - 1792 , - 2363 , - 294 , - 3265 , - 3596 , - 1287 , - 178 , - 269 , - 1560 , - 211 , - 62 , - 1113 , - 3364 , - 2975 , - 3786 , - 1957 , - 1328 , - 1899 , - 3670 , - 2801 , - 3132 , - 823 , - 3554 , - 3645 , - 1096 , - 3587 , - 3438 , - 649 , - 2900 , - 2511 , - 3322 , - 1493 , - 864 , - 1435 , - 3206 , - 2337 , - 2668 , - 359 , - 3090 , - 3181 , - 632 , - 3123 , - 2974 , - 185 , - 2436 , - 2047 , - 2858 , - 1029 , - 400 , - 971 , - 2742 , - 1873 , - 2204 , - 3735 , - 2626 , - 2717 , - 168 , - 2659 , - 2510 , - 3561 , - 1972 , - 1583 , - 2394 , - 565 , - 3776 , - 507 , - 2278 , - 1409 , - 1740 , - 3271 , - 2162 , - 2253 , - 3544 , - 2195 , - 2046 , - 3097 , - 1508 , - 1119 , - 1930 , - 101 , - 3312 , - 43 , - 1814 , - 945 , - 1276 , - 2807 , - 1698 , - 1789 , - 3080 , - 1731 , - 1582 , - 2633 , - 1044 , - 655 , - 1466 , - 3477 , - 2848 , - 3419 , - 1350 , - 481 , - 812 , - 2343 , - 1234 , - 1325 , - 2616 , - 1267 , - 1118 , - 2169 , - 580 , - 191 , - 1002 , - 3013 , - 2384 , - 2955 , - 886 , - 17 , - 348 , - 1879 , - 770 , - 861 , - 2152 , - 803 , - 654 , - 1705 , - 116 , - 3567 , - 538 , - 2549 , - 1920 , - 2491 , - 422 , - 3393 , - 3724 , - 1415 , - 306 , - 397 , - 1688 , - 339 , - 190 , - 1241 , - 3492 , - 3103 , - 74 , - 2085 , - 1456 , - 2027 , - 3798 , - 2929 , - 3260 , - 951 , - 3682 , - 3773 , - 1224 , - 3715 , - 3566 , - 777 , - 3028 , - 2639 , - 3450 , - 1621 , - 992 , - 1563 , - 3334 , - 2465 , - 2796 , - 487 , - 3218 , - 3309 , - 760 , - 3251 , - 3102 , - 313 , - 2564 , - 2175 , - 2986 , - 1157 , - 528 , - 1099 , - 2870 , - 2001 , - 2332 , - 23 , - 2754 , - 2845 , - 296 , - 2787 , - 2638 , - 3689 , - 2100 , - 1711 , - 2522 , - 693 , - 64 , - 635 , - 2406 , - 1537 , - 1868 , - 3399 , - 2290 , - 2381 , - 3672 , - 2323 , - 2174 , - 3225 , - 1636 , - 1247 , - 2058 , - 229 , - 3440 , - 171 , - 1942 , - 1073 , - 1404 , - 2935 , - 1826 , - 1917 , - 3208 , - 1859 , - 1710 , - 2761 , - 1172 , - 783 , - 1594 , - 3605 , - 2976 , - 3547 , - 1478 , - 609 , - 940 , - 2471 , - 1362 , - 1453 , - 2744 , - 1395 , - 1246 , - 2297 , - 708 , - 319 , - 1130 , - 3141 , - 2512 , - 3083 , - 1014 , - 145 , - 476 , - 2007 , - 898 , - 989 , - 2280 , - 931 , - 782 , - 1833 , - 244 , - 3695 , - 666 , - 2677 , - 2048 , - 2619 , - 550 , - 3521 , - 12 , - 1543 , - 434 , - 525 , - 1816 , - 467 , - 318 , - 1369 , - 3620 , - 3231 , - 202 , - 2213 , - 1584 , - 2155 , - 86 , - 3057 , - 3388 , - 1079 , - 3810 , - 61 , - 1352 , - 3 , - 3694 , - 905 , - 3156 , - 2767 , - 3578 , - 1749 , - 1120 , - 1691 , - 3462 , - 2593 , - 2924 , - 615 , - 3346 , - 3437 , - 888 , - 3379 , - 3230 , - 441 , - 2692 , - 2303 , - 3114 , - 1285 , - 656 , - 1227 , - 2998 , - 2129 , - 2460 , - 151 , - 2882 , - 2973 , - 424 , - 2915 , - 2766 , - 3817 , - 2228 , - 1839 , - 2650 , - 821 , - 192 , - 763 , - 2534 , - 1665 , - 1996 , - 3527 , - 2418 , - 2509 , - 3800 , - 2451 , - 2302 , - 3353 , - 1764 , - 1375 , - 2186 , - 357 , - 3568 , - 299 , - 2070 , - 1201 , - 1532 , - 3063 , - 1954 , - 2045 , - 3336 , - 1987 , - 1838 , - 2889 , - 1300 , - 911 , - 1722 , - 3733 , - 3104 , - 3675 , - 1606 , - 737 , - 1068 , - 2599 , - 1490 , - 1581 , - 2872 , - 1523 , - 1374 , - 2425 , - 836 , - 447 , - 1258 , - 3269 , - 2640 , - 3211 , - 1142 , - 273 , - 604 , - 2135 , - 1026 , - 1117 , - 2408 , - 1059 , - 910 , - 1961 , - 372 , - 3823 , - 794 , - 2805 , - 2176 , - 2747 , - 678 , - 3649 , - 140 , - 1671 , - 562 , - 653 , - 1944 , - 595 , - 446 , - 1497 , - 3748 , - 3359 , - 330 , - 2341 , - 1712 , - 2283 , - 214 , - 3185 , - 3516 , - 1207 , - 98 , - 189 , - 1480 , - 131 , - 3822 , - 1033 , - 3284 , - 2895 , - 3706 , - 1877 , - 1248 , - 1819 , - 3590 , - 2721 , - 3052 , - 743 , - 3474 , - 3565 , - 1016 , - 3507 , - 3358 , - 569 , - 2820 , - 2431 , - 3242 , - 1413 , - 784 , - 1355 , - 3126 , - 2257 , - 2588 , - 279 , - 3010 , - 3101 , - 552 , - 3043 , - 2894 , - 105 , - 2356 , - 1967 , - 2778 , - 949 , - 320 , - 891 , - 2662 , - 1793 , - 2124 , - 3655 , - 2546 , - 2637 , - 88 , - 2579 , - 2430 , - 3481 , - 1892 , - 1503 , - 2314 , - 485 , - 3696 , - 427 , - 2198 , - 1329 , - 1660 , - 3191 , - 2082 , - 2173 , - 3464 , - 2115 , - 1966 , - 3017 , - 1428 , - 1039 , - 1850 , - 21 , - 3232 , - 3803 , - 1734 , - 865 , - 1196 , - 2727 , - 1618 , - 1709 , - 3000 , - 1651 , - 1502 , - 2553 , - 964 , - 575 , - 1386 , - 3397 , - 2768 , - 3339 , - 1270 , - 401 , - 732 , - 2263 , - 1154 , - 1245 , - 2536 , - 1187 , - 1038 , - 2089 , - 500 , - 111 , - 922 , - 2933 , - 2304 , - 2875 , - 806 , - 3777 , - 268 , - 1799 , - 690 , - 781 , - 2072 , - 723 , - 574 , - 1625 , - 36 , - 3487 , - 458 , - 2469 , - 1840 , - 2411 , - 342 , - 3313 , - 3644 , - 1335 , - 226 , - 317 , - 1608 , - 259 , - 110 , - 1161 , - 3412 , - 3023 , - 3834 , - 2005 , - 1376 , - 1947 , - 3718 , - 2849 , - 3180 , - 871 , - 3602 , - 3693 , - 1144 , - 3635 , - 3486 , - 697 , - 2948 , - 2559 , - 3370 , - 1541 , - 912 , - 1483 , - 3254 , - 2385 , - 2716 , - 407 , - 3138 , - 3229 , - 680 , - 3171 , - 3022 , - 233 , - 2484 , - 2095 , - 2906 , - 1077 , - 448 , - 1019 , - 2790 , - 1921 , - 2252 , - 3783 , - 2674 , - 2765 , - 216 , - 2707 , - 2558 , - 3609 , - 2020 , - 1631 , - 2442 , - 613 , - 3824 , - 555 , - 2326 , - 1457 , - 1788 , - 3319 , - 2210 , - 2301 , - 3592 , - 2243 , - 2094 , - 3145 , - 1556 , - 1167 , - 1978 , - 149 , - 3360 , - 91 , - 1862 , - 993 , - 1324 , - 2855 , - 1746 , - 1837 , - 3128 , - 1779 , - 1630 , - 2681 , - 1092 , - 703 , - 1514 , - 3525 , - 2896 , - 3467 , - 1398 , - 529 , - 860 , - 2391 , - 1282 , - 1373 , - 2664 , - 1315 , - 1166 , - 2217 , - 628 , - 239 , - 1050 , - 3061 , - 2432 , - 3003 , - 934 , - 65 , - 396 , - 1927 , - 818 , - 909 , - 2200 , - 851 , - 702 , - 1753 , - 164 , - 3615 , - 586 , - 2597 , - 1968 , - 2539 , - 470 , - 3441 , - 3772 , - 1463 , - 354 , - 445 , - 1736 , - 387 , - 238 , - 1289 , - 3540 , - 3151 , - 122 , - 2133 , - 1504 , - 2075 , - 6 , - 2977 , - 3308 , - 999 , - 3730 , - 3821 , - 1272 , - 3763 , - 3614 , - 825 , - 3076 , - 2687 , - 3498 , - 1669 , - 1040 , - 1611 , - 3382 , - 2513 , - 2844 , - 535 , - 3266 , - 3357 , - 808 , - 3299 , - 3150 , - 361 , - 2612 , - 2223 , - 3034 , - 1205 , - 576 , - 1147 , - 2918 , - 2049 , - 2380 , - 71 , - 2802 , - 2893 , - 344 , - 2835 , - 2686 , - 3737 , - 2148 , - 1759 , - 2570 , - 741 , - 112 , - 683 , - 2454 , - 1585 , - 1916 , - 3447 , - 2338 , - 2429 , - 3720 , - 2371 , - 2222 , - 3273 , - 1684 , - 1295 , - 2106 , - 277 , - 3488 , - 219 , - 1990 , - 1121 , - 1452 , - 2983 , - 1874 , - 1965 , - 3256 , - 1907 , - 1758 , - 2809 , - 1220 , - 831 , - 1642 , - 3653 , - 3024 , - 3595 , - 1526 , - 657 , - 988 , - 2519 , - 1410 , - 1501 , - 2792 , - 1443 , - 1294 , - 2345 , - 756 , - 367 , - 1178 , - 3189 , - 2560 , - 3131 , - 1062 , - 193 , - 524 , - 2055 , - 946 , - 1037 , - 2328 , - 979 , - 830 , - 1881 , - 292 , - 3743 , - 714 , - 2725 , - 2096 , - 2667 , - 598 , - 3569 , - 60 , - 1591 , - 482 , - 573 , - 1864 , - 515 , - 366 , - 1417 , - 3668 , - 3279 , - 250 , - 2261 , - 1632 , - 2203 , - 134 , - 3105 , - 3436 , - 1127 , - 18 , - 109 , - 1400 , - 51 , - 3742 , - 953 , - 3204 , - 2815 , - 3626 , - 1797 , - 1168 , - 1739 , - 3510 , - 2641 , - 2972 , - 663 , - 3394 , - 3485 , - 936 , - 3427 , - 3278 , - 489 , - 2740 , - 2351 , - 3162 , - 1333 , - 704 , - 1275 , - 3046 , - 2177 , - 2508 , - 199 , - 2930 , - 3021 , - 472 , - 2963 , - 2814 , - 25 , - 2276 , - 1887 , - 2698 , - 869 , - 240 , - 811 , - 2582 , - 1713 , - 2044 , - 3575 , - 2466 , - 2557 , - 8 , - 2499 , - 2350 , - 3401 , - 1812 , - 1423 , - 2234 , - 405 , - 3616 , - 347 , - 2118 , - 1249 , - 1580 , - 3111 , - 2002 , - 2093 , - 3384 , - 2035 , - 1886 , - 2937 , - 1348 , - 959 , - 1770 , - 3781 , - 3152 , - 3723 , - 1654 , - 785 , - 1116 , - 2647 , - 1538 , - 1629 , - 2920 , - 1571 , - 1422 , - 2473 , - 884 , - 495 , - 1306 , - 3317 , - 2688 , - 3259 , - 1190 , - 321 , - 652 , - 2183 , - 1074 , - 1165 , - 2456 , - 1107 , - 958 , - 2009 , - 420 , - 31 , - 842 , - 2853 , - 2224 , - 2795 , - 726 , - 3697 , - 188 , - 1719 , - 610 , - 701 , - 1992 , - 643 , - 494 , - 1545 , - 3796 , - 3407 , - 378 , - 2389 , - 1760 , - 2331 , - 262 , - 3233 , - 3564 , - 1255 , - 146 , - 237 , - 1528 , - 179 , - 30 , - 1081 , - 3332 , - 2943 , - 3754 , - 1925 , - 1296 , - 1867 , - 3638 , - 2769 , - 3100 , - 791 , - 3522 , - 3613 , - 1064 , - 3555 , - 3406 , - 617 , - 2868 , - 2479 , - 3290 , - 1461 , - 832 , - 1403 , - 3174 , - 2305 , - 2636 , - 327 , - 3058 , - 3149 , - 600 , - 3091 , - 2942 , - 153 , - 2404 , - 2015 , - 2826 , - 997 , - 368 , - 939 , - 2710 , - 1841 , - 2172 , - 3703 , - 2594 , - 2685 , - 136 , - 2627 , - 2478 , - 3529 , - 1940 , - 1551 , - 2362 , - 533 , - 3744 , - 475 , - 2246 , - 1377 , - 1708 , - 3239 , - 2130 , - 2221 , - 3512 , - 2163 , - 2014 , - 3065 , - 1476 , - 1087 , - 1898 , - 69 , - 3280 , - 11 , - 1782 , - 913 , - 1244 , - 2775 , - 1666 , - 1757 , - 3048 , - 1699 , - 1550 , - 2601 , - 1012 , - 623 , - 1434 , - 3445 , - 2816 , - 3387 , - 1318 , - 449 , - 780 , - 2311 , - 1202 , - 1293 , - 2584 , - 1235 , - 1086 , - 2137 , - 548 , - 159 , - 970 , - 2981 , - 2352 , - 2923 , - 854 , - 3825 , - 316 , - 1847 , - 738 , - 829 , - 2120 , - 771 , - 622 , - 1673 , - 84 , - 3535 , - 506 , - 2517 , - 1888 , - 2459 , - 390 , - 3361 , - 3692 , - 1383 , - 274 , - 365 , - 1656 , - 307 , - 158 , - 1209 , - 3460 , - 3071 , - 42 , - 2053 , - 1424 , - 1995 , - 3766 , - 2897 , - 3228 , - 919 , - 3650 , - 3741 , - 1192 , - 3683 , - 3534 , - 745 , - 2996 , - 2607 , - 3418 , - 1589 , - 960 , - 1531 , - 3302 , - 2433 , - 2764 , - 455 , - 3186 , - 3277 , - 728 , - 3219 , - 3070 , - 281 , - 2532 , - 2143 , - 2954 , - 1125 , - 496 , - 1067 , - 2838 , - 1969 , - 2300 , - 3831 , - 2722 , - 2813 , - 264 , - 2755 , - 2606 , - 3657 , - 2068 , - 1679 , - 2490 , - 661 , - 32 , - 603 , - 2374 , - 1505 , - 1836 , - 3367 , - 2258 , - 2349 , - 3640 , - 2291 , - 2142 , - 3193 , - 1604 , - 1215 , - 2026 , - 197 , - 3408 , - 139 , - 1910 , - 1041 , - 1372 , - 2903 , - 1794 , - 1885 , - 3176 , - 1827 , - 1678 , - 2729 , - 1140 , - 751 , - 1562 , - 3573 , - 2944 , - 3515 , - 1446 , - 577 , - 908 , - 2439 , - 1330 , - 1421 , - 2712 , - 1363 , - 1214 , - 2265 , - 676 , - 287 , - 1098 , - 3109 , - 2480 , - 3051 , - 982 , - 113 , - 444 , - 1975 , - 866 , - 957 , - 2248 , - 899 , - 750 , - 1801 , - 212 , - 3663 , - 634 , - 2645 , - 2016 , - 2587 , - 518 , - 3489 , - 3820 , - 1511 , - 402 , - 493 , - 1784 , - 435 , - 286 , - 1337 , - 3588 , - 3199 , - 170 , - 2181 , - 1552 , - 2123 , - 54 , - 3025 , - 3356 , - 1047 , - 3778 , - 29 , - 1320 , - 3811 , - 3662 , - 873 , - 3124 , - 2735 , - 3546 , - 1717 , - 1088 , - 1659 , - 3430 , - 2561 , - 2892 , - 583 , - 3314 , - 3405 , - 856 , - 3347 , - 3198 , - 409 , - 2660 , - 2271 , - 3082 , - 1253 , - 624 , - 1195 , - 2966 , - 2097 , - 2428 , - 119 , - 2850 , - 2941 , - 392 , - 2883 , - 2734 , - 3785 , - 2196 , - 1807 , - 2618 , - 789 , - 160 , - 731 , - 2502 , - 1633 , - 1964 , - 3495 , - 2386 , - 2477 , - 3768 , - 2419 , - 2270 , - 3321 , - 1732 , - 1343 , - 2154 , - 325 , - 3536 , - 267 , - 2038 , - 1169 , - 1500 , - 3031 , - 1922 , - 2013 , - 3304 , - 1955 , - 1806 , - 2857 , - 1268 , - 879 , - 1690 , - 3701 , - 3072 , - 3643 , - 1574 , - 705 , - 1036 , - 2567 , - 1458 , - 1549 , - 2840 , - 1491 , - 1342 , - 2393 , - 804 , - 415 , - 1226 , - 3237 , - 2608 , - 3179 , - 1110 , - 241 , - 572 , - 2103 , - 994 , - 1085 , - 2376 , - 1027 , - 878 , - 1929 , - 340 , - 3791 , - 762 , - 2773 , - 2144 , - 2715 , - 646 , - 3617 , - 108 , - 1639 , - 530 , - 621 , - 1912 , - 563 , - 414 , - 1465 , - 3716 , - 3327 , - 298 , - 2309 , - 1680 , - 2251 , - 182 , - 3153 , - 3484 , - 1175 , - 66 , - 157 , - 1448 , - 99 , - 3790 , - 1001 , - 3252 , - 2863 , - 3674 , - 1845 , - 1216 , - 1787 , - 3558 , - 2689 , - 3020 , - 711 , - 3442 , - 3533 , - 984 , - 3475 , - 3326 , - 537 , - 2788 , - 2399 , - 3210 , - 1381 , - 752 , - 1323 , - 3094 , - 2225 , - 2556 , - 247 , - 2978 , - 3069 , - 520 , - 3011 , - 2862 , - 73 , - 2324 , - 1935 , - 2746 , - 917 , - 288 , - 859 , - 2630 , - 1761 , - 2092 , - 3623 , - 2514 , - 2605 , - 56 , - 2547 , - 2398 , - 3449 , - 1860 , - 1471 , - 2282 , - 453 , - 3664 , - 395 , - 2166 , - 1297 , - 1628 , - 3159 , - 2050 , - 2141 , - 3432 , - 2083 , - 1934 , - 2985 , - 1396 , - 1007 , - 1818 , - 3829 , - 3200 , - 3771 , - 1702 , - 833 , - 1164 , - 2695 , - 1586 , - 1677 , - 2968 , - 1619 , - 1470 , - 2521 , - 932 , - 543 , - 1354 , - 3365 , - 2736 , - 3307 , - 1238 , - 369 , - 700 , - 2231 , - 1122 , - 1213 , - 2504 , - 1155 , - 1006 , - 2057 , - 468 , - 79 , - 890 , - 2901 , - 2272 , - 2843 , - 774 , - 3745 , - 236 , - 1767 , - 658 , - 749 , - 2040 , - 691 , - 542 , - 1593 , - 4 , - 3455 , - 426 , - 2437 , - 1808 , - 2379 , - 310 , - 3281 , - 3612 , - 1303 , - 194 , - 285 , - 1576 , - 227 , - 78 , - 1129 , - 3380 , - 2991 , - 3802 , - 1973 , - 1344 , - 1915 , - 3686 , - 2817 , - 3148 , - 839 , - 3570 , - 3661 , - 1112 , - 3603 , - 3454 , - 665 , - 2916 , - 2527 , - 3338 , - 1509 , - 880 , - 1451 , - 3222 , - 2353 , - 2684 , - 375 , - 3106 , - 3197 , - 648 , - 3139 , - 2990 , - 201 , - 2452 , - 2063 , - 2874 , - 1045 , - 416 , - 987 , - 2758 , - 1889 , - 2220 , - 3751 , - 2642 , - 2733 , - 184 , - 2675 , - 2526 , - 3577 , - 1988 , - 1599 , - 2410 , - 581 , - 3792 , - 523 , - 2294 , - 1425 , - 1756 , - 3287 , - 2178 , - 2269 , - 3560 , - 2211 , - 2062 , - 3113 , - 1524 , - 1135 , - 1946 , - 117 , - 3328 , - 59 , - 1830 , - 961 , - 1292 , - 2823 , - 1714 , - 1805 , - 3096 , - 1747 , - 1598 , - 2649 , - 1060 , - 671 , - 1482 , - 3493 , - 2864 , - 3435 , - 1366 , - 497 , - 828 , - 2359 , - 1250 , - 1341 , - 2632 , - 1283 , - 1134 , - 2185 , - 596 , - 207 , - 1018 , - 3029 , - 2400 , - 2971 , - 902 , - 33 , - 364 , - 1895 , - 786 , - 877 , - 2168 , - 819 , - 670 , - 1721 , - 132 , - 3583 , - 554 , - 2565 , - 1936 , - 2507 , - 438 , - 3409 , - 3740 , - 1431 , - 322 , - 413 , - 1704 , - 355 , - 206 , - 1257 , - 3508 , - 3119 , - 90 , - 2101 , - 1472 , - 2043 , - 3814 , - 2945 , - 3276 , - 967 , - 3698 , - 3789 , - 1240 , - 3731 , - 3582 , - 793 , - 3044 , - 2655 , - 3466 , - 1637 , - 1008 , - 1579 , - 3350 , - 2481 , - 2812 , - 503 , - 3234 , - 3325 , - 776 , - 3267 , - 3118 , - 329 , - 2580 , - 2191 , - 3002 , - 1173 , - 544 , - 1115 , - 2886 , - 2017 , - 2348 , - 39 , - 2770 , - 2861 , - 312 , - 2803 , - 2654 , - 3705 , - 2116 , - 1727 , - 2538 , - 709 , - 80 , - 651 , - 2422 , - 1553 , - 1884 , - 3415 , - 2306 , - 2397 , - 3688 , - 2339 , - 2190 , - 3241 , - 1652 , - 1263 , - 2074 , - 245 , - 3456 , - 187 , - 1958 , - 1089 , - 1420 , - 2951 , - 1842 , - 1933 , - 3224 , - 1875 , - 1726 , - 2777 , - 1188 , - 799 , - 1610 , - 3621 , - 2992 , - 3563 , - 1494 , - 625 , - 956 , - 2487 , - 1378 , - 1469 , - 2760 , - 1411 , - 1262 , - 2313 , - 724 , - 335 , - 1146 , - 3157 , - 2528 , - 3099 , - 1030 , - 161 , - 492 , - 2023 , - 914 , - 1005 , - 2296 , - 947 , - 798 , - 1849 , - 260 , - 3711 , - 682 , - 2693 , - 2064 , - 2635 , - 566 , - 3537 , - 28 , - 1559 , - 450 , - 541 , - 1832 , - 483 , - 334 , - 1385 , - 3636 , - 3247 , - 218 , - 2229 , - 1600 , - 2171 , - 102 , - 3073 , - 3404 , - 1095 , - 3826 , - 77 , - 1368 , - 19 , - 3710 , - 921 , - 3172 , - 2783 , - 3594 , - 1765 , - 1136 , - 1707 , - 3478 , - 2609 , - 2940 , - 631 , - 3362 , - 3453 , - 904 , - 3395 , - 3246 , - 457 , - 2708 , - 2319 , - 3130 , - 1301 , - 672 , - 1243 , - 3014 , - 2145 , - 2476 , - 167 , - 2898 , - 2989 , - 440 , - 2931 , - 2782 , - 3833 , - 2244 , - 1855 , - 2666 , - 837 , - 208 , - 779 , - 2550 , - 1681 , - 2012 , - 3543 , - 2434 , - 2525 , - 3816 , - 2467 , - 2318 , - 3369 , - 1780 , - 1391 , - 2202 , - 373 , - 3584 , - 315 , - 2086 , - 1217 , - 1548 , - 3079 , - 1970 , - 2061 , - 3352 , - 2003 , - 1854 , - 2905 , - 1316 , - 927 , - 1738 , - 3749 , - 3120 , - 3691 , - 1622 , - 753 , - 1084 , - 2615 , - 1506 , - 1597 , - 2888 , - 1539 , - 1390 , - 2441 , - 852 , - 463 , - 1274 , - 3285 , - 2656 , - 3227 , - 1158 , - 289 , - 620 , - 2151 , - 1042 , - 1133 , - 2424 , - 1075 , - 926 , - 1977 , - 388 , - 3839 , - 810 , - 2821 , - 2192 , - 2763 , - 694 , - 3665 , - 156 , - 1687 , - 578 , - 669 , - 1960 , - 611 , - 462 , - 1513 , - 3764 , - 3375 , - 346 , - 2357 , - 1728 , - 2299 , - 230 , - 3201 , - 3532 , - 1223 , - 114 , - 205 , - 1496 , - 147 , - 3838 , - 1049 , - 3300 , - 2911 , - 3722 , - 1893 , - 1264 , - 1835 , - 3606 , - 2737 , - 3068 , - 759 , - 3490 , - 3581 , - 1032 , - 3523 , - 3374 , - 585 , - 2836 , - 2447 , - 3258 , - 1429 , - 800 , - 1371 , - 3142 , - 2273 , - 2604 , - 295 , - 3026 , - 3117 , - 568 , - 3059 , - 2910 , - 121 , - 2372 , - 1983 , - 2794 , - 965 , - 336 , - 907 , - 2678 , - 1809 , - 2140 , - 3671 , - 2562 , - 2653 , - 104 , - 2595 , - 2446 , - 3497 , - 1908 , - 1519 , - 2330 , - 501 , - 3712 , - 443 , - 2214 , - 1345 , - 1676 , - 3207 , - 2098 , - 2189 , - 3480 , - 2131 , - 1982 , - 3033 , - 1444 , - 1055 , - 1866 , - 37 , - 3248 , - 3819 , - 1750 , - 881 , - 1212 , - 2743 , - 1634 , - 1725 , - 3016 , - 1667 , - 1518 , - 2569 , - 980 , - 591 , - 1402 , - 3413 , - 2784 , - 3355 , - 1286 , - 417 , - 748 , - 2279 , - 1170 , - 1261 , - 2552 , - 1203 , - 1054 , - 2105 , - 516 , - 127 , - 938 , - 2949 , - 2320 , - 2891 , - 822 , - 3793 , - 284 , - 1815 , - 706 , - 797 , - 2088 , - 739 , - 590 , - 1641 , - 52 , - 3503 , - 474 , - 2485 , - 1856 , - 2427 , - 358 , - 3329 , - 3660 , - 1351 , - 242 , - 333 , - 1624 , - 275 , - 126 , - 1177 , - 3428 , - 3039 , - 10 , - 2021 , - 1392 , - 1963 , - 3734 , - 2865 , - 3196 , - 887 , - 3618 , - 3709 , - 1160 , - 3651 , - 3502 , - 713 , - 2964 , - 2575 , - 3386 , - 1557 , - 928 , - 1499 , - 3270 , - 2401 , - 2732 , - 423 , - 3154 , - 3245 , - 696 , - 3187 , - 3038 , - 249 , - 2500 , - 2111 , - 2922 , - 1093 , - 464 , - 1035 , - 2806 , - 1937 , - 2268 , - 3799 , - 2690 , - 2781 , - 232 , - 2723 , - 2574 , - 3625 , - 2036 , - 1647 , - 2458 , - 629 , - 0 , - 935 , - 406 , - 2317 , - 2764 , - 1747 , - 3170 , - 3129 , - 1624 , - 2559 , - 2030 , - 37 , - 484 , - 3371 , - 890 , - 849 , - 3248 , - 279 , - 3654 , - 1661 , - 2108 , - 1091 , - 2514 , - 2473 , - 968 , - 1903 , - 1374 , - 3285 , - 3732 , - 2715 , - 234 , - 193 , - 2592 , - 3527 , - 2998 , - 1005 , - 1452 , - 435 , - 1858 , - 1817 , - 312 , - 1247 , - 718 , - 2629 , - 3076 , - 2059 , - 3482 , - 3441 , - 1936 , - 2871 , - 2342 , - 349 , - 796 , - 3683 , - 1202 , - 1161 , - 3560 , - 591 , - 62 , - 1973 , - 2420 , - 1403 , - 2826 , - 2785 , - 1280 , - 2215 , - 1686 , - 3597 , - 140 , - 3027 , - 546 , - 505 , - 2904 , - 3839 , - 3310 , - 1317 , - 1764 , - 747 , - 2170 , - 2129 , - 624 , - 1559 , - 1030 , - 2941 , - 3388 , - 2371 , - 3794 , - 3753 , - 2248 , - 3183 , - 2654 , - 661 , - 1108 , - 91 , - 1514 , - 1473 , - 3872 , - 903 , - 374 , - 2285 , - 2732 , - 1715 , - 3138 , - 3097 , - 1592 , - 2527 , - 1998 , - 5 , - 452 , - 3339 , - 858 , - 817 , - 3216 , - 247 , - 3622 , - 1629 , - 2076 , - 1059 , - 2482 , - 2441 , - 936 , - 1871 , - 1342 , - 3253 , - 3700 , - 2683 , - 202 , - 161 , - 2560 , - 3495 , - 2966 , - 973 , - 1420 , - 403 , - 1826 , - 1785 , - 280 , - 1215 , - 686 , - 2597 , - 3044 , - 2027 , - 3450 , - 3409 , - 1904 , - 2839 , - 2310 , - 317 , - 764 , - 3651 , - 1170 , - 1129 , - 3528 , - 559 , - 30 , - 1941 , - 2388 , - 1371 , - 2794 , - 2753 , - 1248 , - 2183 , - 1654 , - 3565 , - 108 , - 2995 , - 514 , - 473 , - 2872 , - 3807 , - 3278 , - 1285 , - 1732 , - 715 , - 2138 , - 2097 , - 592 , - 1527 , - 998 , - 2909 , - 3356 , - 2339 , - 3762 , - 3721 , - 2216 , - 3151 , - 2622 , - 629 , - 1076 , - 59 , - 1482 , - 1441 , - 3840 , - 871 , - 342 , - 2253 , - 2700 , - 1683 , - 3106 , - 3065 , - 1560 , - 2495 , - 1966 , - 3877 , - 420 , - 3307 , - 826 , - 785 , - 3184 , - 215 , - 3590 , - 1597 , - 2044 , - 1027 , - 2450 , - 2409 , - 904 , - 1839 , - 1310 , - 3221 , - 3668 , - 2651 , - 170 , - 129 , - 2528 , - 3463 , - 2934 , - 941 , - 1388 , - 371 , - 1794 , - 1753 , - 248 , - 1183 , - 654 , - 2565 , - 3012 , - 1995 , - 3418 , - 3377 , - 1872 , - 2807 , - 2278 , - 285 , - 732 , - 3619 , - 1138 , - 1097 , - 3496 , - 527 , - 3902 , - 1909 , - 2356 , - 1339 , - 2762 , - 2721 , - 1216 , - 2151 , - 1622 , - 3533 , - 76 , - 2963 , - 482 , - 441 , - 2840 , - 3775 , - 3246 , - 1253 , - 1700 , - 683 , - 2106 , - 2065 , - 560 , - 1495 , - 966 , - 2877 , - 3324 , - 2307 , - 3730 , - 3689 , - 2184 , - 3119 , - 2590 , - 597 , - 1044 , - 27 , - 1450 , - 1409 , - 3808 , - 839 , - 310 , - 2221 , - 2668 , - 1651 , - 3074 , - 3033 , - 1528 , - 2463 , - 1934 , - 3845 , - 388 , - 3275 , - 794 , - 753 , - 3152 , - 183 , - 3558 , - 1565 , - 2012 , - 995 , - 2418 , - 2377 , - 872 , - 1807 , - 1278 , - 3189 , - 3636 , - 2619 , - 138 , - 97 , - 2496 , - 3431 , - 2902 , - 909 , - 1356 , - 339 , - 1762 , - 1721 , - 216 , - 1151 , - 622 , - 2533 , - 2980 , - 1963 , - 3386 , - 3345 , - 1840 , - 2775 , - 2246 , - 253 , - 700 , - 3587 , - 1106 , - 1065 , - 3464 , - 495 , - 3870 , - 1877 , - 2324 , - 1307 , - 2730 , - 2689 , - 1184 , - 2119 , - 1590 , - 3501 , - 44 , - 2931 , - 450 , - 409 , - 2808 , - 3743 , - 3214 , - 1221 , - 1668 , - 651 , - 2074 , - 2033 , - 528 , - 1463 , - 934 , - 2845 , - 3292 , - 2275 , - 3698 , - 3657 , - 2152 , - 3087 , - 2558 , - 565 , - 1012 , - 3899 , - 1418 , - 1377 , - 3776 , - 807 , - 278 , - 2189 , - 2636 , - 1619 , - 3042 , - 3001 , - 1496 , - 2431 , - 1902 , - 3813 , - 356 , - 3243 , - 762 , - 721 , - 3120 , - 151 , - 3526 , - 1533 , - 1980 , - 963 , - 2386 , - 2345 , - 840 , - 1775 , - 1246 , - 3157 , - 3604 , - 2587 , - 106 , - 65 , - 2464 , - 3399 , - 2870 , - 877 , - 1324 , - 307 , - 1730 , - 1689 , - 184 , - 1119 , - 590 , - 2501 , - 2948 , - 1931 , - 3354 , - 3313 , - 1808 , - 2743 , - 2214 , - 221 , - 668 , - 3555 , - 1074 , - 1033 , - 3432 , - 463 , - 3838 , - 1845 , - 2292 , - 1275 , - 2698 , - 2657 , - 1152 , - 2087 , - 1558 , - 3469 , - 12 , - 2899 , - 418 , - 377 , - 2776 , - 3711 , - 3182 , - 1189 , - 1636 , - 619 , - 2042 , - 2001 , - 496 , - 1431 , - 902 , - 2813 , - 3260 , - 2243 , - 3666 , - 3625 , - 2120 , - 3055 , - 2526 , - 533 , - 980 , - 3867 , - 1386 , - 1345 , - 3744 , - 775 , - 246 , - 2157 , - 2604 , - 1587 , - 3010 , - 2969 , - 1464 , - 2399 , - 1870 , - 3781 , - 324 , - 3211 , - 730 , - 689 , - 3088 , - 119 , - 3494 , - 1501 , - 1948 , - 931 , - 2354 , - 2313 , - 808 , - 1743 , - 1214 , - 3125 , - 3572 , - 2555 , - 74 , - 33 , - 2432 , - 3367 , - 2838 , - 845 , - 1292 , - 275 , - 1698 , - 1657 , - 152 , - 1087 , - 558 , - 2469 , - 2916 , - 1899 , - 3322 , - 3281 , - 1776 , - 2711 , - 2182 , - 189 , - 636 , - 3523 , - 1042 , - 1001 , - 3400 , - 431 , - 3806 , - 1813 , - 2260 , - 1243 , - 2666 , - 2625 , - 1120 , - 2055 , - 1526 , - 3437 , - 3884 , - 2867 , - 386 , - 345 , - 2744 , - 3679 , - 3150 , - 1157 , - 1604 , - 587 , - 2010 , - 1969 , - 464 , - 1399 , - 870 , - 2781 , - 3228 , - 2211 , - 3634 , - 3593 , - 2088 , - 3023 , - 2494 , - 501 , - 948 , - 3835 , - 1354 , - 1313 , - 3712 , - 743 , - 214 , - 2125 , - 2572 , - 1555 , - 2978 , - 2937 , - 1432 , - 2367 , - 1838 , - 3749 , - 292 , - 3179 , - 698 , - 657 , - 3056 , - 87 , - 3462 , - 1469 , - 1916 , - 899 , - 2322 , - 2281 , - 776 , - 1711 , - 1182 , - 3093 , - 3540 , - 2523 , - 42 , - 1 , - 2400 , - 3335 , - 2806 , - 813 , - 1260 , - 243 , - 1666 , - 1625 , - 120 , - 1055 , - 526 , - 2437 , - 2884 , - 1867 , - 3290 , - 3249 , - 1744 , - 2679 , - 2150 , - 157 , - 604 , - 3491 , - 1010 , - 969 , - 3368 , - 399 , - 3774 , - 1781 , - 2228 , - 1211 , - 2634 , - 2593 , - 1088 , - 2023 , - 1494 , - 3405 , - 3852 , - 2835 , - 354 , - 313 , - 2712 , - 3647 , - 3118 , - 1125 , - 1572 , - 555 , - 1978 , - 1937 , - 432 , - 1367 , - 838 , - 2749 , - 3196 , - 2179 , - 3602 , - 3561 , - 2056 , - 2991 , - 2462 , - 469 , - 916 , - 3803 , - 1322 , - 1281 , - 3680 , - 711 , - 182 , - 2093 , - 2540 , - 1523 , - 2946 , - 2905 , - 1400 , - 2335 , - 1806 , - 3717 , - 260 , - 3147 , - 666 , - 625 , - 3024 , - 55 , - 3430 , - 1437 , - 1884 , - 867 , - 2290 , - 2249 , - 744 , - 1679 , - 1150 , - 3061 , - 3508 , - 2491 , - 10 , - 3873 , - 2368 , - 3303 , - 2774 , - 781 , - 1228 , - 211 , - 1634 , - 1593 , - 88 , - 1023 , - 494 , - 2405 , - 2852 , - 1835 , - 3258 , - 3217 , - 1712 , - 2647 , - 2118 , - 125 , - 572 , - 3459 , - 978 , - 937 , - 3336 , - 367 , - 3742 , - 1749 , - 2196 , - 1179 , - 2602 , - 2561 , - 1056 , - 1991 , - 1462 , - 3373 , - 3820 , - 2803 , - 322 , - 281 , - 2680 , - 3615 , - 3086 , - 1093 , - 1540 , - 523 , - 1946 , - 1905 , - 400 , - 1335 , - 806 , - 2717 , - 3164 , - 2147 , - 3570 , - 3529 , - 2024 , - 2959 , - 2430 , - 437 , - 884 , - 3771 , - 1290 , - 1249 , - 3648 , - 679 , - 150 , - 2061 , - 2508 , - 1491 , - 2914 , - 2873 , - 1368 , - 2303 , - 1774 , - 3685 , - 228 , - 3115 , - 634 , - 593 , - 2992 , - 23 , - 3398 , - 1405 , - 1852 , - 835 , - 2258 , - 2217 , - 712 , - 1647 , - 1118 , - 3029 , - 3476 , - 2459 , - 3882 , - 3841 , - 2336 , - 3271 , - 2742 , - 749 , - 1196 , - 179 , - 1602 , - 1561 , - 56 , - 991 , - 462 , - 2373 , - 2820 , - 1803 , - 3226 , - 3185 , - 1680 , - 2615 , - 2086 , - 93 , - 540 , - 3427 , - 946 , - 905 , - 3304 , - 335 , - 3710 , - 1717 , - 2164 , - 1147 , - 2570 , - 2529 , - 1024 , - 1959 , - 1430 , - 3341 , - 3788 , - 2771 , - 290 , - 249 , - 2648 , - 3583 , - 3054 , - 1061 , - 1508 , - 491 , - 1914 , - 1873 , - 368 , - 1303 , - 774 , - 2685 , - 3132 , - 2115 , - 3538 , - 3497 , - 1992 , - 2927 , - 2398 , - 405 , - 852 , - 3739 , - 1258 , - 1217 , - 3616 , - 647 , - 118 , - 2029 , - 2476 , - 1459 , - 2882 , - 2841 , - 1336 , - 2271 , - 1742 , - 3653 , - 196 , - 3083 , - 602 , - 561 , - 2960 , - 3895 , - 3366 , - 1373 , - 1820 , - 803 , - 2226 , - 2185 , - 680 , - 1615 , - 1086 , - 2997 , - 3444 , - 2427 , - 3850 , - 3809 , - 2304 , - 3239 , - 2710 , - 717 , - 1164 , - 147 , - 1570 , - 1529 , - 24 , - 959 , - 430 , - 2341 , - 2788 , - 1771 , - 3194 , - 3153 , - 1648 , - 2583 , - 2054 , - 61 , - 508 , - 3395 , - 914 , - 873 , - 3272 , - 303 , - 3678 , - 1685 , - 2132 , - 1115 , - 2538 , - 2497 , - 992 , - 1927 , - 1398 , - 3309 , - 3756 , - 2739 , - 258 , - 217 , - 2616 , - 3551 , - 3022 , - 1029 , - 1476 , - 459 , - 1882 , - 1841 , - 336 , - 1271 , - 742 , - 2653 , - 3100 , - 2083 , - 3506 , - 3465 , - 1960 , - 2895 , - 2366 , - 373 , - 820 , - 3707 , - 1226 , - 1185 , - 3584 , - 615 , - 86 , - 1997 , - 2444 , - 1427 , - 2850 , - 2809 , - 1304 , - 2239 , - 1710 , - 3621 , - 164 , - 3051 , - 570 , - 529 , - 2928 , - 3863 , - 3334 , - 1341 , - 1788 , - 771 , - 2194 , - 2153 , - 648 , - 1583 , - 1054 , - 2965 , - 3412 , - 2395 , - 3818 , - 3777 , - 2272 , - 3207 , - 2678 , - 685 , - 1132 , - 115 , - 1538 , - 1497 , - 3896 , - 927 , - 398 , - 2309 , - 2756 , - 1739 , - 3162 , - 3121 , - 1616 , - 2551 , - 2022 , - 29 , - 476 , - 3363 , - 882 , - 841 , - 3240 , - 271 , - 3646 , - 1653 , - 2100 , - 1083 , - 2506 , - 2465 , - 960 , - 1895 , - 1366 , - 3277 , - 3724 , - 2707 , - 226 , - 185 , - 2584 , - 3519 , - 2990 , - 997 , - 1444 , - 427 , - 1850 , - 1809 , - 304 , - 1239 , - 710 , - 2621 , - 3068 , - 2051 , - 3474 , - 3433 , - 1928 , - 2863 , - 2334 , - 341 , - 788 , - 3675 , - 1194 , - 1153 , - 3552 , - 583 , - 54 , - 1965 , - 2412 , - 1395 , - 2818 , - 2777 , - 1272 , - 2207 , - 1678 , - 3589 , - 132 , - 3019 , - 538 , - 497 , - 2896 , - 3831 , - 3302 , - 1309 , - 1756 , - 739 , - 2162 , - 2121 , - 616 , - 1551 , - 1022 , - 2933 , - 3380 , - 2363 , - 3786 , - 3745 , - 2240 , - 3175 , - 2646 , - 653 , - 1100 , - 83 , - 1506 , - 1465 , - 3864 , - 895 , - 366 , - 2277 , - 2724 , - 1707 , - 3130 , - 3089 , - 1584 , - 2519 , - 1990 , - 3901 , - 444 , - 3331 , - 850 , - 809 , - 3208 , - 239 , - 3614 , - 1621 , - 2068 , - 1051 , - 2474 , - 2433 , - 928 , - 1863 , - 1334 , - 3245 , - 3692 , - 2675 , - 194 , - 153 , - 2552 , - 3487 , - 2958 , - 965 , - 1412 , - 395 , - 1818 , - 1777 , - 272 , - 1207 , - 678 , - 2589 , - 3036 , - 2019 , - 3442 , - 3401 , - 1896 , - 2831 , - 2302 , - 309 , - 756 , - 3643 , - 1162 , - 1121 , - 3520 , - 551 , - 22 , - 1933 , - 2380 , - 1363 , - 2786 , - 2745 , - 1240 , - 2175 , - 1646 , - 3557 , - 100 , - 2987 , - 506 , - 465 , - 2864 , - 3799 , - 3270 , - 1277 , - 1724 , - 707 , - 2130 , - 2089 , - 584 , - 1519 , - 990 , - 2901 , - 3348 , - 2331 , - 3754 , - 3713 , - 2208 , - 3143 , - 2614 , - 621 , - 1068 , - 51 , - 1474 , - 1433 , - 3832 , - 863 , - 334 , - 2245 , - 2692 , - 1675 , - 3098 , - 3057 , - 1552 , - 2487 , - 1958 , - 3869 , - 412 , - 3299 , - 818 , - 777 , - 3176 , - 207 , - 3582 , - 1589 , - 2036 , - 1019 , - 2442 , - 2401 , - 896 , - 1831 , - 1302 , - 3213 , - 3660 , - 2643 , - 162 , - 121 , - 2520 , - 3455 , - 2926 , - 933 , - 1380 , - 363 , - 1786 , - 1745 , - 240 , - 1175 , - 646 , - 2557 , - 3004 , - 1987 , - 3410 , - 3369 , - 1864 , - 2799 , - 2270 , - 277 , - 724 , - 3611 , - 1130 , - 1089 , - 3488 , - 519 , - 3894 , - 1901 , - 2348 , - 1331 , - 2754 , - 2713 , - 1208 , - 2143 , - 1614 , - 3525 , - 68 , - 2955 , - 474 , - 433 , - 2832 , - 3767 , - 3238 , - 1245 , - 1692 , - 675 , - 2098 , - 2057 , - 552 , - 1487 , - 958 , - 2869 , - 3316 , - 2299 , - 3722 , - 3681 , - 2176 , - 3111 , - 2582 , - 589 , - 1036 , - 19 , - 1442 , - 1401 , - 3800 , - 831 , - 302 , - 2213 , - 2660 , - 1643 , - 3066 , - 3025 , - 1520 , - 2455 , - 1926 , - 3837 , - 380 , - 3267 , - 786 , - 745 , - 3144 , - 175 , - 3550 , - 1557 , - 2004 , - 987 , - 2410 , - 2369 , - 864 , - 1799 , - 1270 , - 3181 , - 3628 , - 2611 , - 130 , - 89 , - 2488 , - 3423 , - 2894 , - 901 , - 1348 , - 331 , - 1754 , - 1713 , - 208 , - 1143 , - 614 , - 2525 , - 2972 , - 1955 , - 3378 , - 3337 , - 1832 , - 2767 , - 2238 , - 245 , - 692 , - 3579 , - 1098 , - 1057 , - 3456 , - 487 , - 3862 , - 1869 , - 2316 , - 1299 , - 2722 , - 2681 , - 1176 , - 2111 , - 1582 , - 3493 , - 36 , - 2923 , - 442 , - 401 , - 2800 , - 3735 , - 3206 , - 1213 , - 1660 , - 643 , - 2066 , - 2025 , - 520 , - 1455 , - 926 , - 2837 , - 3284 , - 2267 , - 3690 , - 3649 , - 2144 , - 3079 , - 2550 , - 557 , - 1004 , - 3891 , - 1410 , - 1369 , - 3768 , - 799 , - 270 , - 2181 , - 2628 , - 1611 , - 3034 , - 2993 , - 1488 , - 2423 , - 1894 , - 3805 , - 348 , - 3235 , - 754 , - 713 , - 3112 , - 143 , - 3518 , - 1525 , - 1972 , - 955 , - 2378 , - 2337 , - 832 , - 1767 , - 1238 , - 3149 , - 3596 , - 2579 , - 98 , - 57 , - 2456 , - 3391 , - 2862 , - 869 , - 1316 , - 299 , - 1722 , - 1681 , - 176 , - 1111 , - 582 , - 2493 , - 2940 , - 1923 , - 3346 , - 3305 , - 1800 , - 2735 , - 2206 , - 213 , - 660 , - 3547 , - 1066 , - 1025 , - 3424 , - 455 , - 3830 , - 1837 , - 2284 , - 1267 , - 2690 , - 2649 , - 1144 , - 2079 , - 1550 , - 3461 , - 4 , - 2891 , - 410 , - 369 , - 2768 , - 3703 , - 3174 , - 1181 , - 1628 , - 611 , - 2034 , - 1993 , - 488 , - 1423 , - 894 , - 2805 , - 3252 , - 2235 , - 3658 , - 3617 , - 2112 , - 3047 , - 2518 , - 525 , - 972 , - 3859 , - 1378 , - 1337 , - 3736 , - 767 , - 238 , - 2149 , - 2596 , - 1579 , - 3002 , - 2961 , - 1456 , - 2391 , - 1862 , - 3773 , - 316 , - 3203 , - 722 , - 681 , - 3080 , - 111 , - 3486 , - 1493 , - 1940 , - 923 , - 2346 , - 2305 , - 800 , - 1735 , - 1206 , - 3117 , - 3564 , - 2547 , - 66 , - 25 , - 2424 , - 3359 , - 2830 , - 837 , - 1284 , - 267 , - 1690 , - 1649 , - 144 , - 1079 , - 550 , - 2461 , - 2908 , - 1891 , - 3314 , - 3273 , - 1768 , - 2703 , - 2174 , - 181 , - 628 , - 3515 , - 1034 , - 993 , - 3392 , - 423 , - 3798 , - 1805 , - 2252 , - 1235 , - 2658 , - 2617 , - 1112 , - 2047 , - 1518 , - 3429 , - 3876 , - 2859 , - 378 , - 337 , - 2736 , - 3671 , - 3142 , - 1149 , - 1596 , - 579 , - 2002 , - 1961 , - 456 , - 1391 , - 862 , - 2773 , - 3220 , - 2203 , - 3626 , - 3585 , - 2080 , - 3015 , - 2486 , - 493 , - 940 , - 3827 , - 1346 , - 1305 , - 3704 , - 735 , - 206 , - 2117 , - 2564 , - 1547 , - 2970 , - 2929 , - 1424 , - 2359 , - 1830 , - 3741 , - 284 , - 3171 , - 690 , - 649 , - 3048 , - 79 , - 3454 , - 1461 , - 1908 , - 891 , - 2314 , - 2273 , - 768 , - 1703 , - 1174 , - 3085 , - 3532 , - 2515 , - 34 , - 3897 , - 2392 , - 3327 , - 2798 , - 805 , - 1252 , - 235 , - 1658 , - 1617 , - 112 , - 1047 , - 518 , - 2429 , - 2876 , - 1859 , - 3282 , - 3241 , - 1736 , - 2671 , - 2142 , - 149 , - 596 , - 3483 , - 1002 , - 961 , - 3360 , - 391 , - 3766 , - 1773 , - 2220 , - 1203 , - 2626 , - 2585 , - 1080 , - 2015 , - 1486 , - 3397 , - 3844 , - 2827 , - 346 , - 305 , - 2704 , - 3639 , - 3110 , - 1117 , - 1564 , - 547 , - 1970 , - 1929 , - 424 , - 1359 , - 830 , - 2741 , - 3188 , - 2171 , - 3594 , - 3553 , - 2048 , - 2983 , - 2454 , - 461 , - 908 , - 3795 , - 1314 , - 1273 , - 3672 , - 703 , - 174 , - 2085 , - 2532 , - 1515 , - 2938 , - 2897 , - 1392 , - 2327 , - 1798 , - 3709 , - 252 , - 3139 , - 658 , - 617 , - 3016 , - 47 , - 3422 , - 1429 , - 1876 , - 859 , - 2282 , - 2241 , - 736 , - 1671 , - 1142 , - 3053 , - 3500 , - 2483 , - 2 , - 3865 , - 2360 , - 3295 , - 2766 , - 773 , - 1220 , - 203 , - 1626 , - 1585 , - 80 , - 1015 , - 486 , - 2397 , - 2844 , - 1827 , - 3250 , - 3209 , - 1704 , - 2639 , - 2110 , - 117 , - 564 , - 3451 , - 970 , - 929 , - 3328 , - 359 , - 3734 , - 1741 , - 2188 , - 1171 , - 2594 , - 2553 , - 1048 , - 1983 , - 1454 , - 3365 , - 3812 , - 2795 , - 314 , - 273 , - 2672 , - 3607 , - 3078 , - 1085 , - 1532 , - 515 , - 1938 , - 1897 , - 392 , - 1327 , - 798 , - 2709 , - 3156 , - 2139 , - 3562 , - 3521 , - 2016 , - 2951 , - 2422 , - 429 , - 876 , - 3763 , - 1282 , - 1241 , - 3640 , - 671 , - 142 , - 2053 , - 2500 , - 1483 , - 2906 , - 2865 , - 1360 , - 2295 , - 1766 , - 3677 , - 220 , - 3107 , - 626 , - 585 , - 2984 , - 15 , - 3390 , - 1397 , - 1844 , - 827 , - 2250 , - 2209 , - 704 , - 1639 , - 1110 , - 3021 , - 3468 , - 2451 , - 3874 , - 3833 , - 2328 , - 3263 , - 2734 , - 741 , - 1188 , - 171 , - 1594 , - 1553 , - 48 , - 983 , - 454 , - 2365 , - 2812 , - 1795 , - 3218 , - 3177 , - 1672 , - 2607 , - 2078 , - 85 , - 532 , - 3419 , - 938 , - 897 , - 3296 , - 327 , - 3702 , - 1709 , - 2156 , - 1139 , - 2562 , - 2521 , - 1016 , - 1951 , - 1422 , - 3333 , - 3780 , - 2763 , - 282 , - 241 , - 2640 , - 3575 , - 3046 , - 1053 , - 1500 , - 483 , - 1906 , - 1865 , - 360 , - 1295 , - 766 , - 2677 , - 3124 , - 2107 , - 3530 , - 3489 , - 1984 , - 2919 , - 2390 , - 397 , - 844 , - 3731 , - 1250 , - 1209 , - 3608 , - 639 , - 110 , - 2021 , - 2468 , - 1451 , - 2874 , - 2833 , - 1328 , - 2263 , - 1734 , - 3645 , - 188 , - 3075 , - 594 , - 553 , - 2952 , - 3887 , - 3358 , - 1365 , - 1812 , - 795 , - 2218 , - 2177 , - 672 , - 1607 , - 1078 , - 2989 , - 3436 , - 2419 , - 3842 , - 3801 , - 2296 , - 3231 , - 2702 , - 709 , - 1156 , - 139 , - 1562 , - 1521 , - 16 , - 951 , - 422 , - 2333 , - 2780 , - 1763 , - 3186 , - 3145 , - 1640 , - 2575 , - 2046 , - 53 , - 500 , - 3387 , - 906 , - 865 , - 3264 , - 295 , - 3670 , - 1677 , - 2124 , - 1107 , - 2530 , - 2489 , - 984 , - 1919 , - 1390 , - 3301 , - 3748 , - 2731 , - 250 , - 209 , - 2608 , - 3543 , - 3014 , - 1021 , - 1468 , - 451 , - 1874 , - 1833 , - 328 , - 1263 , - 734 , - 2645 , - 3092 , - 2075 , - 3498 , - 3457 , - 1952 , - 2887 , - 2358 , - 365 , - 812 , - 3699 , - 1218 , - 1177 , - 3576 , - 607 , - 78 , - 1989 , - 2436 , - 1419 , - 2842 , - 2801 , - 1296 , - 2231 , - 1702 , - 3613 , - 156 , - 3043 , - 562 , - 521 , - 2920 , - 3855 , - 3326 , - 1333 , - 1780 , - 763 , - 2186 , - 2145 , - 640 , - 1575 , - 1046 , - 2957 , - 3404 , - 2387 , - 3810 , - 3769 , - 2264 , - 3199 , - 2670 , - 677 , - 1124 , - 107 , - 1530 , - 1489 , - 3888 , - 919 , - 390 , - 2301 , - 2748 , - 1731 , - 3154 , - 3113 , - 1608 , - 2543 , - 2014 , - 21 , - 468 , - 3355 , - 874 , - 833 , - 3232 , - 263 , - 3638 , - 1645 , - 2092 , - 1075 , - 2498 , - 2457 , - 952 , - 1887 , - 1358 , - 3269 , - 3716 , - 2699 , - 218 , - 177 , - 2576 , - 3511 , - 2982 , - 989 , - 1436 , - 419 , - 1842 , - 1801 , - 296 , - 1231 , - 702 , - 2613 , - 3060 , - 2043 , - 3466 , - 3425 , - 1920 , - 2855 , - 2326 , - 333 , - 780 , - 3667 , - 1186 , - 1145 , - 3544 , - 575 , - 46 , - 1957 , - 2404 , - 1387 , - 2810 , - 2769 , - 1264 , - 2199 , - 1670 , - 3581 , - 124 , - 3011 , - 530 , - 489 , - 2888 , - 3823 , - 3294 , - 1301 , - 1748 , - 731 , - 2154 , - 2113 , - 608 , - 1543 , - 1014 , - 2925 , - 3372 , - 2355 , - 3778 , - 3737 , - 2232 , - 3167 , - 2638 , - 645 , - 1092 , - 75 , - 1498 , - 1457 , - 3856 , - 887 , - 358 , - 2269 , - 2716 , - 1699 , - 3122 , - 3081 , - 1576 , - 2511 , - 1982 , - 3893 , - 436 , - 3323 , - 842 , - 801 , - 3200 , - 231 , - 3606 , - 1613 , - 2060 , - 1043 , - 2466 , - 2425 , - 920 , - 1855 , - 1326 , - 3237 , - 3684 , - 2667 , - 186 , - 145 , - 2544 , - 3479 , - 2950 , - 957 , - 1404 , - 387 , - 1810 , - 1769 , - 264 , - 1199 , - 670 , - 2581 , - 3028 , - 2011 , - 3434 , - 3393 , - 1888 , - 2823 , - 2294 , - 301 , - 748 , - 3635 , - 1154 , - 1113 , - 3512 , - 543 , - 14 , - 1925 , - 2372 , - 1355 , - 2778 , - 2737 , - 1232 , - 2167 , - 1638 , - 3549 , - 92 , - 2979 , - 498 , - 457 , - 2856 , - 3791 , - 3262 , - 1269 , - 1716 , - 699 , - 2122 , - 2081 , - 576 , - 1511 , - 982 , - 2893 , - 3340 , - 2323 , - 3746 , - 3705 , - 2200 , - 3135 , - 2606 , - 613 , - 1060 , - 43 , - 1466 , - 1425 , - 3824 , - 855 , - 326 , - 2237 , - 2684 , - 1667 , - 3090 , - 3049 , - 1544 , - 2479 , - 1950 , - 3861 , - 404 , - 3291 , - 810 , - 769 , - 3168 , - 199 , - 3574 , - 1581 , - 2028 , - 1011 , - 2434 , - 2393 , - 888 , - 1823 , - 1294 , - 3205 , - 3652 , - 2635 , - 154 , - 113 , - 2512 , - 3447 , - 2918 , - 925 , - 1372 , - 355 , - 1778 , - 1737 , - 232 , - 1167 , - 638 , - 2549 , - 2996 , - 1979 , - 3402 , - 3361 , - 1856 , - 2791 , - 2262 , - 269 , - 716 , - 3603 , - 1122 , - 1081 , - 3480 , - 511 , - 3886 , - 1893 , - 2340 , - 1323 , - 2746 , - 2705 , - 1200 , - 2135 , - 1606 , - 3517 , - 60 , - 2947 , - 466 , - 425 , - 2824 , - 3759 , - 3230 , - 1237 , - 1684 , - 667 , - 2090 , - 2049 , - 544 , - 1479 , - 950 , - 2861 , - 3308 , - 2291 , - 3714 , - 3673 , - 2168 , - 3103 , - 2574 , - 581 , - 1028 , - 11 , - 1434 , - 1393 , - 3792 , - 823 , - 294 , - 2205 , - 2652 , - 1635 , - 3058 , - 3017 , - 1512 , - 2447 , - 1918 , - 3829 , - 372 , - 3259 , - 778 , - 737 , - 3136 , - 167 , - 3542 , - 1549 , - 1996 , - 979 , - 2402 , - 2361 , - 856 , - 1791 , - 1262 , - 3173 , - 3620 , - 2603 , - 122 , - 81 , - 2480 , - 3415 , - 2886 , - 893 , - 1340 , - 323 , - 1746 , - 1705 , - 200 , - 1135 , - 606 , - 2517 , - 2964 , - 1947 , - 3370 , - 3329 , - 1824 , - 2759 , - 2230 , - 237 , - 684 , - 3571 , - 1090 , - 1049 , - 3448 , - 479 , - 3854 , - 1861 , - 2308 , - 1291 , - 2714 , - 2673 , - 1168 , - 2103 , - 1574 , - 3485 , - 28 , - 2915 , - 434 , - 393 , - 2792 , - 3727 , - 3198 , - 1205 , - 1652 , - 635 , - 2058 , - 2017 , - 512 , - 1447 , - 918 , - 2829 , - 3276 , - 2259 , - 3682 , - 3641 , - 2136 , - 3071 , - 2542 , - 549 , - 996 , - 3883 , - 1402 , - 1361 , - 3760 , - 791 , - 262 , - 2173 , - 2620 , - 1603 , - 3026 , - 2985 , - 1480 , - 2415 , - 1886 , - 3797 , - 340 , - 3227 , - 746 , - 705 , - 3104 , - 135 , - 3510 , - 1517 , - 1964 , - 947 , - 2370 , - 2329 , - 824 , - 1759 , - 1230 , - 3141 , - 3588 , - 2571 , - 90 , - 49 , - 2448 , - 3383 , - 2854 , - 861 , - 1308 , - 291 , - 1714 , - 1673 , - 168 , - 1103 , - 574 , - 2485 , - 2932 , - 1915 , - 3338 , - 3297 , - 1792 , - 2727 , - 2198 , - 205 , - 652 , - 3539 , - 1058 , - 1017 , - 3416 , - 447 , - 3822 , - 1829 , - 2276 , - 1259 , - 2682 , - 2641 , - 1136 , - 2071 , - 1542 , - 3453 , - 3900 , - 2883 , - 402 , - 361 , - 2760 , - 3695 , - 3166 , - 1173 , - 1620 , - 603 , - 2026 , - 1985 , - 480 , - 1415 , - 886 , - 2797 , - 3244 , - 2227 , - 3650 , - 3609 , - 2104 , - 3039 , - 2510 , - 517 , - 964 , - 3851 , - 1370 , - 1329 , - 3728 , - 759 , - 230 , - 2141 , - 2588 , - 1571 , - 2994 , - 2953 , - 1448 , - 2383 , - 1854 , - 3765 , - 308 , - 3195 , - 714 , - 673 , - 3072 , - 103 , - 3478 , - 1485 , - 1932 , - 915 , - 2338 , - 2297 , - 792 , - 1727 , - 1198 , - 3109 , - 3556 , - 2539 , - 58 , - 17 , - 2416 , - 3351 , - 2822 , - 829 , - 1276 , - 259 , - 1682 , - 1641 , - 136 , - 1071 , - 542 , - 2453 , - 2900 , - 1883 , - 3306 , - 3265 , - 1760 , - 2695 , - 2166 , - 173 , - 620 , - 3507 , - 1026 , - 985 , - 3384 , - 415 , - 3790 , - 1797 , - 2244 , - 1227 , - 2650 , - 2609 , - 1104 , - 2039 , - 1510 , - 3421 , - 3868 , - 2851 , - 370 , - 329 , - 2728 , - 3663 , - 3134 , - 1141 , - 1588 , - 571 , - 1994 , - 1953 , - 448 , - 1383 , - 854 , - 2765 , - 3212 , - 2195 , - 3618 , - 3577 , - 2072 , - 3007 , - 2478 , - 485 , - 932 , - 3819 , - 1338 , - 1297 , - 3696 , - 727 , - 198 , - 2109 , - 2556 , - 1539 , - 2962 , - 2921 , - 1416 , - 2351 , - 1822 , - 3733 , - 276 , - 3163 , - 682 , - 641 , - 3040 , - 71 , - 3446 , - 1453 , - 1900 , - 883 , - 2306 , - 2265 , - 760 , - 1695 , - 1166 , - 3077 , - 3524 , - 2507 , - 26 , - 3889 , - 2384 , - 3319 , - 2790 , - 797 , - 1244 , - 227 , - 1650 , - 1609 , - 104 , - 1039 , - 510 , - 2421 , - 2868 , - 1851 , - 3274 , - 3233 , - 1728 , - 2663 , - 2134 , - 141 , - 588 , - 3475 , - 994 , - 953 , - 3352 , - 383 , - 3758 , - 1765 , - 2212 , - 1195 , - 2618 , - 2577 , - 1072 , - 2007 , - 1478 , - 3389 , - 3836 , - 2819 , - 338 , - 297 , - 2696 , - 3631 , - 3102 , - 1109 , - 1556 , - 539 , - 1962 , - 1921 , - 416 , - 1351 , - 822 , - 2733 , - 3180 , - 2163 , - 3586 , - 3545 , - 2040 , - 2975 , - 2446 , - 453 , - 900 , - 3787 , - 1306 , - 1265 , - 3664 , - 695 , - 166 , - 2077 , - 2524 , - 1507 , - 2930 , - 2889 , - 1384 , - 2319 , - 1790 , - 3701 , - 244 , - 3131 , - 650 , - 609 , - 3008 , - 39 , - 3414 , - 1421 , - 1868 , - 851 , - 2274 , - 2233 , - 728 , - 1663 , - 1134 , - 3045 , - 3492 , - 2475 , - 3898 , - 3857 , - 2352 , - 3287 , - 2758 , - 765 , - 1212 , - 195 , - 1618 , - 1577 , - 72 , - 1007 , - 478 , - 2389 , - 2836 , - 1819 , - 3242 , - 3201 , - 1696 , - 2631 , - 2102 , - 109 , - 556 , - 3443 , - 962 , - 921 , - 3320 , - 351 , - 3726 , - 1733 , - 2180 , - 1163 , - 2586 , - 2545 , - 1040 , - 1975 , - 1446 , - 3357 , - 3804 , - 2787 , - 306 , - 265 , - 2664 , - 3599 , - 3070 , - 1077 , - 1524 , - 507 , - 1930 , - 1889 , - 384 , - 1319 , - 790 , - 2701 , - 3148 , - 2131 , - 3554 , - 3513 , - 2008 , - 2943 , - 2414 , - 421 , - 868 , - 3755 , - 1274 , - 1233 , - 3632 , - 663 , - 134 , - 2045 , - 2492 , - 1475 , - 2898 , - 2857 , - 1352 , - 2287 , - 1758 , - 3669 , - 212 , - 3099 , - 618 , - 577 , - 2976 , - 7 , - 3382 , - 1389 , - 1836 , - 819 , - 2242 , - 2201 , - 696 , - 1631 , - 1102 , - 3013 , - 3460 , - 2443 , - 3866 , - 3825 , - 2320 , - 3255 , - 2726 , - 733 , - 1180 , - 163 , - 1586 , - 1545 , - 40 , - 975 , - 446 , - 2357 , - 2804 , - 1787 , - 3210 , - 3169 , - 1664 , - 2599 , - 2070 , - 77 , - 524 , - 3411 , - 930 , - 889 , - 3288 , - 319 , - 3694 , - 1701 , - 2148 , - 1131 , - 2554 , - 2513 , - 1008 , - 1943 , - 1414 , - 3325 , - 3772 , - 2755 , - 274 , - 233 , - 2632 , - 3567 , - 3038 , - 1045 , - 1492 , - 475 , - 1898 , - 1857 , - 352 , - 1287 , - 758 , - 2669 , - 3116 , - 2099 , - 3522 , - 3481 , - 1976 , - 2911 , - 2382 , - 389 , - 836 , - 3723 , - 1242 , - 1201 , - 3600 , - 631 , - 102 , - 2013 , - 2460 , - 1443 , - 2866 , - 2825 , - 1320 , - 2255 , - 1726 , - 3637 , - 180 , - 3067 , - 586 , - 545 , - 2944 , - 3879 , - 3350 , - 1357 , - 1804 , - 787 , - 2210 , - 2169 , - 664 , - 1599 , - 1070 , - 2981 , - 3428 , - 2411 , - 3834 , - 3793 , - 2288 , - 3223 , - 2694 , - 701 , - 1148 , - 131 , - 1554 , - 1513 , - 8 , - 943 , - 414 , - 2325 , - 2772 , - 1755 , - 3178 , - 3137 , - 1632 , - 2567 , - 2038 , - 45 , - 492 , - 3379 , - 898 , - 857 , - 3256 , - 287 , - 3662 , - 1669 , - 2116 , - 1099 , - 2522 , - 2481 , - 976 , - 1911 , - 1382 , - 3293 , - 3740 , - 2723 , - 242 , - 201 , - 2600 , - 3535 , - 3006 , - 1013 , - 1460 , - 443 , - 1866 , - 1825 , - 320 , - 1255 , - 726 , - 2637 , - 3084 , - 2067 , - 3490 , - 3449 , - 1944 , - 2879 , - 2350 , - 357 , - 804 , - 3691 , - 1210 , - 1169 , - 3568 , - 599 , - 70 , - 1981 , - 2428 , - 1411 , - 2834 , - 2793 , - 1288 , - 2223 , - 1694 , - 3605 , - 148 , - 3035 , - 554 , - 513 , - 2912 , - 3847 , - 3318 , - 1325 , - 1772 , - 755 , - 2178 , - 2137 , - 632 , - 1567 , - 1038 , - 2949 , - 3396 , - 2379 , - 3802 , - 3761 , - 2256 , - 3191 , - 2662 , - 669 , - 1116 , - 99 , - 1522 , - 1481 , - 3880 , - 911 , - 382 , - 2293 , - 2740 , - 1723 , - 3146 , - 3105 , - 1600 , - 2535 , - 2006 , - 13 , - 460 , - 3347 , - 866 , - 825 , - 3224 , - 255 , - 3630 , - 1637 , - 2084 , - 1067 , - 2490 , - 2449 , - 944 , - 1879 , - 1350 , - 3261 , - 3708 , - 2691 , - 210 , - 169 , - 2568 , - 3503 , - 2974 , - 981 , - 1428 , - 411 , - 1834 , - 1793 , - 288 , - 1223 , - 694 , - 2605 , - 3052 , - 2035 , - 3458 , - 3417 , - 1912 , - 2847 , - 2318 , - 325 , - 772 , - 3659 , - 1178 , - 1137 , - 3536 , - 567 , - 38 , - 1949 , - 2396 , - 1379 , - 2802 , - 2761 , - 1256 , - 2191 , - 1662 , - 3573 , - 116 , - 3003 , - 522 , - 481 , - 2880 , - 3815 , - 3286 , - 1293 , - 1740 , - 723 , - 2146 , - 2105 , - 600 , - 1535 , - 1006 , - 2917 , - 3364 , - 2347 , - 3770 , - 3729 , - 2224 , - 3159 , - 2630 , - 637 , - 1084 , - 67 , - 1490 , - 1449 , - 3848 , - 879 , - 350 , - 2261 , - 2708 , - 1691 , - 3114 , - 3073 , - 1568 , - 2503 , - 1974 , - 3885 , - 428 , - 3315 , - 834 , - 793 , - 3192 , - 223 , - 3598 , - 1605 , - 2052 , - 1035 , - 2458 , - 2417 , - 912 , - 1847 , - 1318 , - 3229 , - 3676 , - 2659 , - 178 , - 137 , - 2536 , - 3471 , - 2942 , - 949 , - 1396 , - 379 , - 1802 , - 1761 , - 256 , - 1191 , - 662 , - 2573 , - 3020 , - 2003 , - 3426 , - 3385 , - 1880 , - 2815 , - 2286 , - 293 , - 740 , - 3627 , - 1146 , - 1105 , - 3504 , - 535 , - 6 , - 1917 , - 2364 , - 1347 , - 2770 , - 2729 , - 1224 , - 2159 , - 1630 , - 3541 , - 84 , - 2971 , - 490 , - 449 , - 2848 , - 3783 , - 3254 , - 1261 , - 1708 , - 691 , - 2114 , - 2073 , - 568 , - 1503 , - 974 , - 2885 , - 3332 , - 2315 , - 3738 , - 3697 , - 2192 , - 3127 , - 2598 , - 605 , - 1052 , - 35 , - 1458 , - 1417 , - 3816 , - 847 , - 318 , - 2229 , - 2676 , - 1659 , - 3082 , - 3041 , - 1536 , - 2471 , - 1942 , - 3853 , - 396 , - 3283 , - 802 , - 761 , - 3160 , - 191 , - 3566 , - 1573 , - 2020 , - 1003 , - 2426 , - 2385 , - 880 , - 1815 , - 1286 , - 3197 , - 3644 , - 2627 , - 146 , - 105 , - 2504 , - 3439 , - 2910 , - 917 , - 1364 , - 347 , - 1770 , - 1729 , - 224 , - 1159 , - 630 , - 2541 , - 2988 , - 1971 , - 3394 , - 3353 , - 1848 , - 2783 , - 2254 , - 261 , - 708 , - 3595 , - 1114 , - 1073 , - 3472 , - 503 , - 3878 , - 1885 , - 2332 , - 1315 , - 2738 , - 2697 , - 1192 , - 2127 , - 1598 , - 3509 , - 52 , - 2939 , - 458 , - 417 , - 2816 , - 3751 , - 3222 , - 1229 , - 1676 , - 659 , - 2082 , - 2041 , - 536 , - 1471 , - 942 , - 2853 , - 3300 , - 2283 , - 3706 , - 3665 , - 2160 , - 3095 , - 2566 , - 573 , - 1020 , - 3 , - 1426 , - 1385 , - 3784 , - 815 , - 286 , - 2197 , - 2644 , - 1627 , - 3050 , - 3009 , - 1504 , - 2439 , - 1910 , - 3821 , - 364 , - 3251 , - 770 , - 729 , - 3128 , - 159 , - 3534 , - 1541 , - 1988 , - 971 , - 2394 , - 2353 , - 848 , - 1783 , - 1254 , - 3165 , - 3612 , - 2595 , - 114 , - 73 , - 2472 , - 3407 , - 2878 , - 885 , - 1332 , - 315 , - 1738 , - 1697 , - 192 , - 1127 , - 598 , - 2509 , - 2956 , - 1939 , - 3362 , - 3321 , - 1816 , - 2751 , - 2222 , - 229 , - 676 , - 3563 , - 1082 , - 1041 , - 3440 , - 471 , - 3846 , - 1853 , - 2300 , - 1283 , - 2706 , - 2665 , - 1160 , - 2095 , - 1566 , - 3477 , - 20 , - 2907 , - 426 , - 385 , - 2784 , - 3719 , - 3190 , - 1197 , - 1644 , - 627 , - 2050 , - 2009 , - 504 , - 1439 , - 910 , - 2821 , - 3268 , - 2251 , - 3674 , - 3633 , - 2128 , - 3063 , - 2534 , - 541 , - 988 , - 3875 , - 1394 , - 1353 , - 3752 , - 783 , - 254 , - 2165 , - 2612 , - 1595 , - 3018 , - 2977 , - 1472 , - 2407 , - 1878 , - 3789 , - 332 , - 3219 , - 738 , - 697 , - 3096 , - 127 , - 3502 , - 1509 , - 1956 , - 939 , - 2362 , - 2321 , - 816 , - 1751 , - 1222 , - 3133 , - 3580 , - 2563 , - 82 , - 41 , - 2440 , - 3375 , - 2846 , - 853 , - 1300 , - 283 , - 1706 , - 1665 , - 160 , - 1095 , - 566 , - 2477 , - 2924 , - 1907 , - 3330 , - 3289 , - 1784 , - 2719 , - 2190 , - 197 , - 644 , - 3531 , - 1050 , - 1009 , - 3408 , - 439 , - 3814 , - 1821 , - 2268 , - 1251 , - 2674 , - 2633 , - 1128 , - 2063 , - 1534 , - 3445 , - 3892 , - 2875 , - 394 , - 353 , - 2752 , - 3687 , - 3158 , - 1165 , - 1612 , - 595 , - 2018 , - 1977 , - 472 , - 1407 , - 878 , - 2789 , - 3236 , - 2219 , - 3642 , - 3601 , - 2096 , - 3031 , - 2502 , - 509 , - 956 , - 3843 , - 1362 , - 1321 , - 3720 , - 751 , - 222 , - 2133 , - 2580 , - 1563 , - 2986 , - 2945 , - 1440 , - 2375 , - 1846 , - 3757 , - 300 , - 3187 , - 706 , - 665 , - 3064 , - 95 , - 3470 , - 1477 , - 1924 , - 907 , - 2330 , - 2289 , - 784 , - 1719 , - 1190 , - 3101 , - 3548 , - 2531 , - 50 , - 9 , - 2408 , - 3343 , - 2814 , - 821 , - 1268 , - 251 , - 1674 , - 1633 , - 128 , - 1063 , - 534 , - 2445 , - 2892 , - 1875 , - 3298 , - 3257 , - 1752 , - 2687 , - 2158 , - 165 , - 612 , - 3499 , - 1018 , - 977 , - 3376 , - 407 , - 3782 , - 1789 , - 2236 , - 1219 , - 2642 , - 2601 , - 1096 , - 2031 , - 1502 , - 3413 , - 3860 , - 2843 , - 362 , - 321 , - 2720 , - 3655 , - 3126 , - 1133 , - 1580 , - 563 , - 1986 , - 1945 , - 440 , - 1375 , - 846 , - 2757 , - 3204 , - 2187 , - 3610 , - 3569 , - 2064 , - 2999 , - 2470 , - 477 , - 924 , - 3811 , - 1330 , - 1289 , - 3688 , - 719 , - 190 , - 2101 , - 2548 , - 1531 , - 2954 , - 2913 , - 1408 , - 2343 , - 1814 , - 3725 , - 268 , - 3155 , - 674 , - 633 , - 3032 , - 63 , - 3438 , - 1445 , - 1892 , - 875 , - 2298 , - 2257 , - 752 , - 1687 , - 1158 , - 3069 , - 3516 , - 2499 , - 18 , - 3881 , - 2376 , - 3311 , - 2782 , - 789 , - 1236 , - 219 , - 1642 , - 1601 , - 96 , - 1031 , - 502 , - 2413 , - 2860 , - 1843 , - 3266 , - 3225 , - 1720 , - 2655 , - 2126 , - 133 , - 580 , - 3467 , - 986 , - 945 , - 3344 , - 375 , - 3750 , - 1757 , - 2204 , - 1187 , - 2610 , - 2569 , - 1064 , - 1999 , - 1470 , - 3381 , - 3828 , - 2811 , - 330 , - 289 , - 2688 , - 3623 , - 3094 , - 1101 , - 1548 , - 531 , - 1954 , - 1913 , - 408 , - 1343 , - 814 , - 2725 , - 3172 , - 2155 , - 3578 , - 3537 , - 2032 , - 2967 , - 2438 , - 445 , - 892 , - 3779 , - 1298 , - 1257 , - 3656 , - 687 , - 158 , - 2069 , - 2516 , - 1499 , - 2922 , - 2881 , - 1376 , - 2311 , - 1782 , - 3693 , - 236 , - 3123 , - 642 , - 601 , - 3000 , - 31 , - 3406 , - 1413 , - 1860 , - 843 , - 2266 , - 2225 , - 720 , - 1655 , - 1126 , - 3037 , - 3484 , - 2467 , - 3890 , - 3849 , - 2344 , - 3279 , - 2750 , - 757 , - 1204 , - 187 , - 1610 , - 1569 , - 64 , - 999 , - 470 , - 2381 , - 2828 , - 1811 , - 3234 , - 3193 , - 1688 , - 2623 , - 2094 , - 101 , - 548 , - 3435 , - 954 , - 913 , - 3312 , - 343 , - 3718 , - 1725 , - 2172 , - 1155 , - 2578 , - 2537 , - 1032 , - 1967 , - 1438 , - 3349 , - 3796 , - 2779 , - 298 , - 257 , - 2656 , - 3591 , - 3062 , - 1069 , - 1516 , - 499 , - 1922 , - 1881 , - 376 , - 1311 , - 782 , - 2693 , - 3140 , - 2123 , - 3546 , - 3505 , - 2000 , - 2935 , - 2406 , - 413 , - 860 , - 3747 , - 1266 , - 1225 , - 3624 , - 655 , - 126 , - 2037 , - 2484 , - 1467 , - 2890 , - 2849 , - 1344 , - 2279 , - 1750 , - 3661 , - 204 , - 3091 , - 610 , - 569 , - 2968 , - 3903 , - 3374 , - 1381 , - 1828 , - 811 , - 2234 , - 2193 , - 688 , - 1623 , - 1094 , - 3005 , - 3452 , - 2435 , - 3858 , - 3817 , - 2312 , - 3247 , - 2718 , - 725 , - 1172 , - 155 , - 1578 , - 1537 , - 32 , - 967 , - 438 , - 2349 , - 2796 , - 1779 , - 3202 , - 3161 , - 1656 , - 2591 , - 2062 , - 69 , - 516 , - 3403 , - 922 , - 881 , - 3280 , - 311 , - 3686 , - 1693 , - 2140 , - 1123 , - 2546 , - 2505 , - 1000 , - 1935 , - 1406 , - 3317 , - 3764 , - 2747 , - 266 , - 225 , - 2624 , - 3559 , - 3030 , - 1037 , - 1484 , - 467 , - 1890 , - 1849 , - 344 , - 1279 , - 750 , - 2661 , - 3108 , - 2091 , - 3514 , - 3473 , - 1968 , - 2903 , - 2374 , - 381 , - 828 , - 3715 , - 1234 , - 1193 , - 3592 , - 623 , - 94 , - 2005 , - 2452 , - 1435 , - 2858 , - 2817 , - 1312 , - 2247 , - 1718 , - 3629 , - 172 , - 3059 , - 578 , - 537 , - 2936 , - 3871 , - 3342 , - 1349 , - 1796 , - 779 , - 2202 , - 2161 , - 656 , - 1591 , - 1062 , - 2973 , - 3420 , - 2403 , - 3826 , - 3785 , - 2280 , - 3215 , - 2686 , - 693 , - 1140 , - 123 , - 1546 , - 1505 , - 0 , - 2687 , - 1902 , - 1613 , - 1820 , - 2523 , - 3722 , - 1449 , - 3640 , - 2359 , - 1574 , - 1285 , - 1492 , - 2195 , - 3394 , - 1121 , - 3312 , - 2031 , - 1246 , - 957 , - 1164 , - 1867 , - 3066 , - 793 , - 2984 , - 1703 , - 918 , - 629 , - 836 , - 1539 , - 2738 , - 465 , - 2656 , - 1375 , - 590 , - 301 , - 508 , - 1211 , - 2410 , - 137 , - 2328 , - 1047 , - 262 , - 3941 , - 180 , - 883 , - 2082 , - 3777 , - 2000 , - 719 , - 3902 , - 3613 , - 3820 , - 555 , - 1754 , - 3449 , - 1672 , - 391 , - 3574 , - 3285 , - 3492 , - 227 , - 1426 , - 3121 , - 1344 , - 63 , - 3246 , - 2957 , - 3164 , - 3867 , - 1098 , - 2793 , - 1016 , - 3703 , - 2918 , - 2629 , - 2836 , - 3539 , - 770 , - 2465 , - 688 , - 3375 , - 2590 , - 2301 , - 2508 , - 3211 , - 442 , - 2137 , - 360 , - 3047 , - 2262 , - 1973 , - 2180 , - 2883 , - 114 , - 1809 , - 32 , - 2719 , - 1934 , - 1645 , - 1852 , - 2555 , - 3754 , - 1481 , - 3672 , - 2391 , - 1606 , - 1317 , - 1524 , - 2227 , - 3426 , - 1153 , - 3344 , - 2063 , - 1278 , - 989 , - 1196 , - 1899 , - 3098 , - 825 , - 3016 , - 1735 , - 950 , - 661 , - 868 , - 1571 , - 2770 , - 497 , - 2688 , - 1407 , - 622 , - 333 , - 540 , - 1243 , - 2442 , - 169 , - 2360 , - 1079 , - 294 , - 5 , - 212 , - 915 , - 2114 , - 3809 , - 2032 , - 751 , - 3934 , - 3645 , - 3852 , - 587 , - 1786 , - 3481 , - 1704 , - 423 , - 3606 , - 3317 , - 3524 , - 259 , - 1458 , - 3153 , - 1376 , - 95 , - 3278 , - 2989 , - 3196 , - 3899 , - 1130 , - 2825 , - 1048 , - 3735 , - 2950 , - 2661 , - 2868 , - 3571 , - 802 , - 2497 , - 720 , - 3407 , - 2622 , - 2333 , - 2540 , - 3243 , - 474 , - 2169 , - 392 , - 3079 , - 2294 , - 2005 , - 2212 , - 2915 , - 146 , - 1841 , - 64 , - 2751 , - 1966 , - 1677 , - 1884 , - 2587 , - 3786 , - 1513 , - 3704 , - 2423 , - 1638 , - 1349 , - 1556 , - 2259 , - 3458 , - 1185 , - 3376 , - 2095 , - 1310 , - 1021 , - 1228 , - 1931 , - 3130 , - 857 , - 3048 , - 1767 , - 982 , - 693 , - 900 , - 1603 , - 2802 , - 529 , - 2720 , - 1439 , - 654 , - 365 , - 572 , - 1275 , - 2474 , - 201 , - 2392 , - 1111 , - 326 , - 37 , - 244 , - 947 , - 2146 , - 3841 , - 2064 , - 783 , - 3966 , - 3677 , - 3884 , - 619 , - 1818 , - 3513 , - 1736 , - 455 , - 3638 , - 3349 , - 3556 , - 291 , - 1490 , - 3185 , - 1408 , - 127 , - 3310 , - 3021 , - 3228 , - 3931 , - 1162 , - 2857 , - 1080 , - 3767 , - 2982 , - 2693 , - 2900 , - 3603 , - 834 , - 2529 , - 752 , - 3439 , - 2654 , - 2365 , - 2572 , - 3275 , - 506 , - 2201 , - 424 , - 3111 , - 2326 , - 2037 , - 2244 , - 2947 , - 178 , - 1873 , - 96 , - 2783 , - 1998 , - 1709 , - 1916 , - 2619 , - 3818 , - 1545 , - 3736 , - 2455 , - 1670 , - 1381 , - 1588 , - 2291 , - 3490 , - 1217 , - 3408 , - 2127 , - 1342 , - 1053 , - 1260 , - 1963 , - 3162 , - 889 , - 3080 , - 1799 , - 1014 , - 725 , - 932 , - 1635 , - 2834 , - 561 , - 2752 , - 1471 , - 686 , - 397 , - 604 , - 1307 , - 2506 , - 233 , - 2424 , - 1143 , - 358 , - 69 , - 276 , - 979 , - 2178 , - 3873 , - 2096 , - 815 , - 30 , - 3709 , - 3916 , - 651 , - 1850 , - 3545 , - 1768 , - 487 , - 3670 , - 3381 , - 3588 , - 323 , - 1522 , - 3217 , - 1440 , - 159 , - 3342 , - 3053 , - 3260 , - 3963 , - 1194 , - 2889 , - 1112 , - 3799 , - 3014 , - 2725 , - 2932 , - 3635 , - 866 , - 2561 , - 784 , - 3471 , - 2686 , - 2397 , - 2604 , - 3307 , - 538 , - 2233 , - 456 , - 3143 , - 2358 , - 2069 , - 2276 , - 2979 , - 210 , - 1905 , - 128 , - 2815 , - 2030 , - 1741 , - 1948 , - 2651 , - 3850 , - 1577 , - 3768 , - 2487 , - 1702 , - 1413 , - 1620 , - 2323 , - 3522 , - 1249 , - 3440 , - 2159 , - 1374 , - 1085 , - 1292 , - 1995 , - 3194 , - 921 , - 3112 , - 1831 , - 1046 , - 757 , - 964 , - 1667 , - 2866 , - 593 , - 2784 , - 1503 , - 718 , - 429 , - 636 , - 1339 , - 2538 , - 265 , - 2456 , - 1175 , - 390 , - 101 , - 308 , - 1011 , - 2210 , - 3905 , - 2128 , - 847 , - 62 , - 3741 , - 3948 , - 683 , - 1882 , - 3577 , - 1800 , - 519 , - 3702 , - 3413 , - 3620 , - 355 , - 1554 , - 3249 , - 1472 , - 191 , - 3374 , - 3085 , - 3292 , - 27 , - 1226 , - 2921 , - 1144 , - 3831 , - 3046 , - 2757 , - 2964 , - 3667 , - 898 , - 2593 , - 816 , - 3503 , - 2718 , - 2429 , - 2636 , - 3339 , - 570 , - 2265 , - 488 , - 3175 , - 2390 , - 2101 , - 2308 , - 3011 , - 242 , - 1937 , - 160 , - 2847 , - 2062 , - 1773 , - 1980 , - 2683 , - 3882 , - 1609 , - 3800 , - 2519 , - 1734 , - 1445 , - 1652 , - 2355 , - 3554 , - 1281 , - 3472 , - 2191 , - 1406 , - 1117 , - 1324 , - 2027 , - 3226 , - 953 , - 3144 , - 1863 , - 1078 , - 789 , - 996 , - 1699 , - 2898 , - 625 , - 2816 , - 1535 , - 750 , - 461 , - 668 , - 1371 , - 2570 , - 297 , - 2488 , - 1207 , - 422 , - 133 , - 340 , - 1043 , - 2242 , - 3937 , - 2160 , - 879 , - 94 , - 3773 , - 12 , - 715 , - 1914 , - 3609 , - 1832 , - 551 , - 3734 , - 3445 , - 3652 , - 387 , - 1586 , - 3281 , - 1504 , - 223 , - 3406 , - 3117 , - 3324 , - 59 , - 1258 , - 2953 , - 1176 , - 3863 , - 3078 , - 2789 , - 2996 , - 3699 , - 930 , - 2625 , - 848 , - 3535 , - 2750 , - 2461 , - 2668 , - 3371 , - 602 , - 2297 , - 520 , - 3207 , - 2422 , - 2133 , - 2340 , - 3043 , - 274 , - 1969 , - 192 , - 2879 , - 2094 , - 1805 , - 2012 , - 2715 , - 3914 , - 1641 , - 3832 , - 2551 , - 1766 , - 1477 , - 1684 , - 2387 , - 3586 , - 1313 , - 3504 , - 2223 , - 1438 , - 1149 , - 1356 , - 2059 , - 3258 , - 985 , - 3176 , - 1895 , - 1110 , - 821 , - 1028 , - 1731 , - 2930 , - 657 , - 2848 , - 1567 , - 782 , - 493 , - 700 , - 1403 , - 2602 , - 329 , - 2520 , - 1239 , - 454 , - 165 , - 372 , - 1075 , - 2274 , - 1 , - 2192 , - 911 , - 126 , - 3805 , - 44 , - 747 , - 1946 , - 3641 , - 1864 , - 583 , - 3766 , - 3477 , - 3684 , - 419 , - 1618 , - 3313 , - 1536 , - 255 , - 3438 , - 3149 , - 3356 , - 91 , - 1290 , - 2985 , - 1208 , - 3895 , - 3110 , - 2821 , - 3028 , - 3731 , - 962 , - 2657 , - 880 , - 3567 , - 2782 , - 2493 , - 2700 , - 3403 , - 634 , - 2329 , - 552 , - 3239 , - 2454 , - 2165 , - 2372 , - 3075 , - 306 , - 2001 , - 224 , - 2911 , - 2126 , - 1837 , - 2044 , - 2747 , - 3946 , - 1673 , - 3864 , - 2583 , - 1798 , - 1509 , - 1716 , - 2419 , - 3618 , - 1345 , - 3536 , - 2255 , - 1470 , - 1181 , - 1388 , - 2091 , - 3290 , - 1017 , - 3208 , - 1927 , - 1142 , - 853 , - 1060 , - 1763 , - 2962 , - 689 , - 2880 , - 1599 , - 814 , - 525 , - 732 , - 1435 , - 2634 , - 361 , - 2552 , - 1271 , - 486 , - 197 , - 404 , - 1107 , - 2306 , - 33 , - 2224 , - 943 , - 158 , - 3837 , - 76 , - 779 , - 1978 , - 3673 , - 1896 , - 615 , - 3798 , - 3509 , - 3716 , - 451 , - 1650 , - 3345 , - 1568 , - 287 , - 3470 , - 3181 , - 3388 , - 123 , - 1322 , - 3017 , - 1240 , - 3927 , - 3142 , - 2853 , - 3060 , - 3763 , - 994 , - 2689 , - 912 , - 3599 , - 2814 , - 2525 , - 2732 , - 3435 , - 666 , - 2361 , - 584 , - 3271 , - 2486 , - 2197 , - 2404 , - 3107 , - 338 , - 2033 , - 256 , - 2943 , - 2158 , - 1869 , - 2076 , - 2779 , - 10 , - 1705 , - 3896 , - 2615 , - 1830 , - 1541 , - 1748 , - 2451 , - 3650 , - 1377 , - 3568 , - 2287 , - 1502 , - 1213 , - 1420 , - 2123 , - 3322 , - 1049 , - 3240 , - 1959 , - 1174 , - 885 , - 1092 , - 1795 , - 2994 , - 721 , - 2912 , - 1631 , - 846 , - 557 , - 764 , - 1467 , - 2666 , - 393 , - 2584 , - 1303 , - 518 , - 229 , - 436 , - 1139 , - 2338 , - 65 , - 2256 , - 975 , - 190 , - 3869 , - 108 , - 811 , - 2010 , - 3705 , - 1928 , - 647 , - 3830 , - 3541 , - 3748 , - 483 , - 1682 , - 3377 , - 1600 , - 319 , - 3502 , - 3213 , - 3420 , - 155 , - 1354 , - 3049 , - 1272 , - 3959 , - 3174 , - 2885 , - 3092 , - 3795 , - 1026 , - 2721 , - 944 , - 3631 , - 2846 , - 2557 , - 2764 , - 3467 , - 698 , - 2393 , - 616 , - 3303 , - 2518 , - 2229 , - 2436 , - 3139 , - 370 , - 2065 , - 288 , - 2975 , - 2190 , - 1901 , - 2108 , - 2811 , - 42 , - 1737 , - 3928 , - 2647 , - 1862 , - 1573 , - 1780 , - 2483 , - 3682 , - 1409 , - 3600 , - 2319 , - 1534 , - 1245 , - 1452 , - 2155 , - 3354 , - 1081 , - 3272 , - 1991 , - 1206 , - 917 , - 1124 , - 1827 , - 3026 , - 753 , - 2944 , - 1663 , - 878 , - 589 , - 796 , - 1499 , - 2698 , - 425 , - 2616 , - 1335 , - 550 , - 261 , - 468 , - 1171 , - 2370 , - 97 , - 2288 , - 1007 , - 222 , - 3901 , - 140 , - 843 , - 2042 , - 3737 , - 1960 , - 679 , - 3862 , - 3573 , - 3780 , - 515 , - 1714 , - 3409 , - 1632 , - 351 , - 3534 , - 3245 , - 3452 , - 187 , - 1386 , - 3081 , - 1304 , - 23 , - 3206 , - 2917 , - 3124 , - 3827 , - 1058 , - 2753 , - 976 , - 3663 , - 2878 , - 2589 , - 2796 , - 3499 , - 730 , - 2425 , - 648 , - 3335 , - 2550 , - 2261 , - 2468 , - 3171 , - 402 , - 2097 , - 320 , - 3007 , - 2222 , - 1933 , - 2140 , - 2843 , - 74 , - 1769 , - 3960 , - 2679 , - 1894 , - 1605 , - 1812 , - 2515 , - 3714 , - 1441 , - 3632 , - 2351 , - 1566 , - 1277 , - 1484 , - 2187 , - 3386 , - 1113 , - 3304 , - 2023 , - 1238 , - 949 , - 1156 , - 1859 , - 3058 , - 785 , - 2976 , - 1695 , - 910 , - 621 , - 828 , - 1531 , - 2730 , - 457 , - 2648 , - 1367 , - 582 , - 293 , - 500 , - 1203 , - 2402 , - 129 , - 2320 , - 1039 , - 254 , - 3933 , - 172 , - 875 , - 2074 , - 3769 , - 1992 , - 711 , - 3894 , - 3605 , - 3812 , - 547 , - 1746 , - 3441 , - 1664 , - 383 , - 3566 , - 3277 , - 3484 , - 219 , - 1418 , - 3113 , - 1336 , - 55 , - 3238 , - 2949 , - 3156 , - 3859 , - 1090 , - 2785 , - 1008 , - 3695 , - 2910 , - 2621 , - 2828 , - 3531 , - 762 , - 2457 , - 680 , - 3367 , - 2582 , - 2293 , - 2500 , - 3203 , - 434 , - 2129 , - 352 , - 3039 , - 2254 , - 1965 , - 2172 , - 2875 , - 106 , - 1801 , - 24 , - 2711 , - 1926 , - 1637 , - 1844 , - 2547 , - 3746 , - 1473 , - 3664 , - 2383 , - 1598 , - 1309 , - 1516 , - 2219 , - 3418 , - 1145 , - 3336 , - 2055 , - 1270 , - 981 , - 1188 , - 1891 , - 3090 , - 817 , - 3008 , - 1727 , - 942 , - 653 , - 860 , - 1563 , - 2762 , - 489 , - 2680 , - 1399 , - 614 , - 325 , - 532 , - 1235 , - 2434 , - 161 , - 2352 , - 1071 , - 286 , - 3965 , - 204 , - 907 , - 2106 , - 3801 , - 2024 , - 743 , - 3926 , - 3637 , - 3844 , - 579 , - 1778 , - 3473 , - 1696 , - 415 , - 3598 , - 3309 , - 3516 , - 251 , - 1450 , - 3145 , - 1368 , - 87 , - 3270 , - 2981 , - 3188 , - 3891 , - 1122 , - 2817 , - 1040 , - 3727 , - 2942 , - 2653 , - 2860 , - 3563 , - 794 , - 2489 , - 712 , - 3399 , - 2614 , - 2325 , - 2532 , - 3235 , - 466 , - 2161 , - 384 , - 3071 , - 2286 , - 1997 , - 2204 , - 2907 , - 138 , - 1833 , - 56 , - 2743 , - 1958 , - 1669 , - 1876 , - 2579 , - 3778 , - 1505 , - 3696 , - 2415 , - 1630 , - 1341 , - 1548 , - 2251 , - 3450 , - 1177 , - 3368 , - 2087 , - 1302 , - 1013 , - 1220 , - 1923 , - 3122 , - 849 , - 3040 , - 1759 , - 974 , - 685 , - 892 , - 1595 , - 2794 , - 521 , - 2712 , - 1431 , - 646 , - 357 , - 564 , - 1267 , - 2466 , - 193 , - 2384 , - 1103 , - 318 , - 29 , - 236 , - 939 , - 2138 , - 3833 , - 2056 , - 775 , - 3958 , - 3669 , - 3876 , - 611 , - 1810 , - 3505 , - 1728 , - 447 , - 3630 , - 3341 , - 3548 , - 283 , - 1482 , - 3177 , - 1400 , - 119 , - 3302 , - 3013 , - 3220 , - 3923 , - 1154 , - 2849 , - 1072 , - 3759 , - 2974 , - 2685 , - 2892 , - 3595 , - 826 , - 2521 , - 744 , - 3431 , - 2646 , - 2357 , - 2564 , - 3267 , - 498 , - 2193 , - 416 , - 3103 , - 2318 , - 2029 , - 2236 , - 2939 , - 170 , - 1865 , - 88 , - 2775 , - 1990 , - 1701 , - 1908 , - 2611 , - 3810 , - 1537 , - 3728 , - 2447 , - 1662 , - 1373 , - 1580 , - 2283 , - 3482 , - 1209 , - 3400 , - 2119 , - 1334 , - 1045 , - 1252 , - 1955 , - 3154 , - 881 , - 3072 , - 1791 , - 1006 , - 717 , - 924 , - 1627 , - 2826 , - 553 , - 2744 , - 1463 , - 678 , - 389 , - 596 , - 1299 , - 2498 , - 225 , - 2416 , - 1135 , - 350 , - 61 , - 268 , - 971 , - 2170 , - 3865 , - 2088 , - 807 , - 22 , - 3701 , - 3908 , - 643 , - 1842 , - 3537 , - 1760 , - 479 , - 3662 , - 3373 , - 3580 , - 315 , - 1514 , - 3209 , - 1432 , - 151 , - 3334 , - 3045 , - 3252 , - 3955 , - 1186 , - 2881 , - 1104 , - 3791 , - 3006 , - 2717 , - 2924 , - 3627 , - 858 , - 2553 , - 776 , - 3463 , - 2678 , - 2389 , - 2596 , - 3299 , - 530 , - 2225 , - 448 , - 3135 , - 2350 , - 2061 , - 2268 , - 2971 , - 202 , - 1897 , - 120 , - 2807 , - 2022 , - 1733 , - 1940 , - 2643 , - 3842 , - 1569 , - 3760 , - 2479 , - 1694 , - 1405 , - 1612 , - 2315 , - 3514 , - 1241 , - 3432 , - 2151 , - 1366 , - 1077 , - 1284 , - 1987 , - 3186 , - 913 , - 3104 , - 1823 , - 1038 , - 749 , - 956 , - 1659 , - 2858 , - 585 , - 2776 , - 1495 , - 710 , - 421 , - 628 , - 1331 , - 2530 , - 257 , - 2448 , - 1167 , - 382 , - 93 , - 300 , - 1003 , - 2202 , - 3897 , - 2120 , - 839 , - 54 , - 3733 , - 3940 , - 675 , - 1874 , - 3569 , - 1792 , - 511 , - 3694 , - 3405 , - 3612 , - 347 , - 1546 , - 3241 , - 1464 , - 183 , - 3366 , - 3077 , - 3284 , - 19 , - 1218 , - 2913 , - 1136 , - 3823 , - 3038 , - 2749 , - 2956 , - 3659 , - 890 , - 2585 , - 808 , - 3495 , - 2710 , - 2421 , - 2628 , - 3331 , - 562 , - 2257 , - 480 , - 3167 , - 2382 , - 2093 , - 2300 , - 3003 , - 234 , - 1929 , - 152 , - 2839 , - 2054 , - 1765 , - 1972 , - 2675 , - 3874 , - 1601 , - 3792 , - 2511 , - 1726 , - 1437 , - 1644 , - 2347 , - 3546 , - 1273 , - 3464 , - 2183 , - 1398 , - 1109 , - 1316 , - 2019 , - 3218 , - 945 , - 3136 , - 1855 , - 1070 , - 781 , - 988 , - 1691 , - 2890 , - 617 , - 2808 , - 1527 , - 742 , - 453 , - 660 , - 1363 , - 2562 , - 289 , - 2480 , - 1199 , - 414 , - 125 , - 332 , - 1035 , - 2234 , - 3929 , - 2152 , - 871 , - 86 , - 3765 , - 4 , - 707 , - 1906 , - 3601 , - 1824 , - 543 , - 3726 , - 3437 , - 3644 , - 379 , - 1578 , - 3273 , - 1496 , - 215 , - 3398 , - 3109 , - 3316 , - 51 , - 1250 , - 2945 , - 1168 , - 3855 , - 3070 , - 2781 , - 2988 , - 3691 , - 922 , - 2617 , - 840 , - 3527 , - 2742 , - 2453 , - 2660 , - 3363 , - 594 , - 2289 , - 512 , - 3199 , - 2414 , - 2125 , - 2332 , - 3035 , - 266 , - 1961 , - 184 , - 2871 , - 2086 , - 1797 , - 2004 , - 2707 , - 3906 , - 1633 , - 3824 , - 2543 , - 1758 , - 1469 , - 1676 , - 2379 , - 3578 , - 1305 , - 3496 , - 2215 , - 1430 , - 1141 , - 1348 , - 2051 , - 3250 , - 977 , - 3168 , - 1887 , - 1102 , - 813 , - 1020 , - 1723 , - 2922 , - 649 , - 2840 , - 1559 , - 774 , - 485 , - 692 , - 1395 , - 2594 , - 321 , - 2512 , - 1231 , - 446 , - 157 , - 364 , - 1067 , - 2266 , - 3961 , - 2184 , - 903 , - 118 , - 3797 , - 36 , - 739 , - 1938 , - 3633 , - 1856 , - 575 , - 3758 , - 3469 , - 3676 , - 411 , - 1610 , - 3305 , - 1528 , - 247 , - 3430 , - 3141 , - 3348 , - 83 , - 1282 , - 2977 , - 1200 , - 3887 , - 3102 , - 2813 , - 3020 , - 3723 , - 954 , - 2649 , - 872 , - 3559 , - 2774 , - 2485 , - 2692 , - 3395 , - 626 , - 2321 , - 544 , - 3231 , - 2446 , - 2157 , - 2364 , - 3067 , - 298 , - 1993 , - 216 , - 2903 , - 2118 , - 1829 , - 2036 , - 2739 , - 3938 , - 1665 , - 3856 , - 2575 , - 1790 , - 1501 , - 1708 , - 2411 , - 3610 , - 1337 , - 3528 , - 2247 , - 1462 , - 1173 , - 1380 , - 2083 , - 3282 , - 1009 , - 3200 , - 1919 , - 1134 , - 845 , - 1052 , - 1755 , - 2954 , - 681 , - 2872 , - 1591 , - 806 , - 517 , - 724 , - 1427 , - 2626 , - 353 , - 2544 , - 1263 , - 478 , - 189 , - 396 , - 1099 , - 2298 , - 25 , - 2216 , - 935 , - 150 , - 3829 , - 68 , - 771 , - 1970 , - 3665 , - 1888 , - 607 , - 3790 , - 3501 , - 3708 , - 443 , - 1642 , - 3337 , - 1560 , - 279 , - 3462 , - 3173 , - 3380 , - 115 , - 1314 , - 3009 , - 1232 , - 3919 , - 3134 , - 2845 , - 3052 , - 3755 , - 986 , - 2681 , - 904 , - 3591 , - 2806 , - 2517 , - 2724 , - 3427 , - 658 , - 2353 , - 576 , - 3263 , - 2478 , - 2189 , - 2396 , - 3099 , - 330 , - 2025 , - 248 , - 2935 , - 2150 , - 1861 , - 2068 , - 2771 , - 2 , - 1697 , - 3888 , - 2607 , - 1822 , - 1533 , - 1740 , - 2443 , - 3642 , - 1369 , - 3560 , - 2279 , - 1494 , - 1205 , - 1412 , - 2115 , - 3314 , - 1041 , - 3232 , - 1951 , - 1166 , - 877 , - 1084 , - 1787 , - 2986 , - 713 , - 2904 , - 1623 , - 838 , - 549 , - 756 , - 1459 , - 2658 , - 385 , - 2576 , - 1295 , - 510 , - 221 , - 428 , - 1131 , - 2330 , - 57 , - 2248 , - 967 , - 182 , - 3861 , - 100 , - 803 , - 2002 , - 3697 , - 1920 , - 639 , - 3822 , - 3533 , - 3740 , - 475 , - 1674 , - 3369 , - 1592 , - 311 , - 3494 , - 3205 , - 3412 , - 147 , - 1346 , - 3041 , - 1264 , - 3951 , - 3166 , - 2877 , - 3084 , - 3787 , - 1018 , - 2713 , - 936 , - 3623 , - 2838 , - 2549 , - 2756 , - 3459 , - 690 , - 2385 , - 608 , - 3295 , - 2510 , - 2221 , - 2428 , - 3131 , - 362 , - 2057 , - 280 , - 2967 , - 2182 , - 1893 , - 2100 , - 2803 , - 34 , - 1729 , - 3920 , - 2639 , - 1854 , - 1565 , - 1772 , - 2475 , - 3674 , - 1401 , - 3592 , - 2311 , - 1526 , - 1237 , - 1444 , - 2147 , - 3346 , - 1073 , - 3264 , - 1983 , - 1198 , - 909 , - 1116 , - 1819 , - 3018 , - 745 , - 2936 , - 1655 , - 870 , - 581 , - 788 , - 1491 , - 2690 , - 417 , - 2608 , - 1327 , - 542 , - 253 , - 460 , - 1163 , - 2362 , - 89 , - 2280 , - 999 , - 214 , - 3893 , - 132 , - 835 , - 2034 , - 3729 , - 1952 , - 671 , - 3854 , - 3565 , - 3772 , - 507 , - 1706 , - 3401 , - 1624 , - 343 , - 3526 , - 3237 , - 3444 , - 179 , - 1378 , - 3073 , - 1296 , - 15 , - 3198 , - 2909 , - 3116 , - 3819 , - 1050 , - 2745 , - 968 , - 3655 , - 2870 , - 2581 , - 2788 , - 3491 , - 722 , - 2417 , - 640 , - 3327 , - 2542 , - 2253 , - 2460 , - 3163 , - 394 , - 2089 , - 312 , - 2999 , - 2214 , - 1925 , - 2132 , - 2835 , - 66 , - 1761 , - 3952 , - 2671 , - 1886 , - 1597 , - 1804 , - 2507 , - 3706 , - 1433 , - 3624 , - 2343 , - 1558 , - 1269 , - 1476 , - 2179 , - 3378 , - 1105 , - 3296 , - 2015 , - 1230 , - 941 , - 1148 , - 1851 , - 3050 , - 777 , - 2968 , - 1687 , - 902 , - 613 , - 820 , - 1523 , - 2722 , - 449 , - 2640 , - 1359 , - 574 , - 285 , - 492 , - 1195 , - 2394 , - 121 , - 2312 , - 1031 , - 246 , - 3925 , - 164 , - 867 , - 2066 , - 3761 , - 1984 , - 703 , - 3886 , - 3597 , - 3804 , - 539 , - 1738 , - 3433 , - 1656 , - 375 , - 3558 , - 3269 , - 3476 , - 211 , - 1410 , - 3105 , - 1328 , - 47 , - 3230 , - 2941 , - 3148 , - 3851 , - 1082 , - 2777 , - 1000 , - 3687 , - 2902 , - 2613 , - 2820 , - 3523 , - 754 , - 2449 , - 672 , - 3359 , - 2574 , - 2285 , - 2492 , - 3195 , - 426 , - 2121 , - 344 , - 3031 , - 2246 , - 1957 , - 2164 , - 2867 , - 98 , - 1793 , - 16 , - 2703 , - 1918 , - 1629 , - 1836 , - 2539 , - 3738 , - 1465 , - 3656 , - 2375 , - 1590 , - 1301 , - 1508 , - 2211 , - 3410 , - 1137 , - 3328 , - 2047 , - 1262 , - 973 , - 1180 , - 1883 , - 3082 , - 809 , - 3000 , - 1719 , - 934 , - 645 , - 852 , - 1555 , - 2754 , - 481 , - 2672 , - 1391 , - 606 , - 317 , - 524 , - 1227 , - 2426 , - 153 , - 2344 , - 1063 , - 278 , - 3957 , - 196 , - 899 , - 2098 , - 3793 , - 2016 , - 735 , - 3918 , - 3629 , - 3836 , - 571 , - 1770 , - 3465 , - 1688 , - 407 , - 3590 , - 3301 , - 3508 , - 243 , - 1442 , - 3137 , - 1360 , - 79 , - 3262 , - 2973 , - 3180 , - 3883 , - 1114 , - 2809 , - 1032 , - 3719 , - 2934 , - 2645 , - 2852 , - 3555 , - 786 , - 2481 , - 704 , - 3391 , - 2606 , - 2317 , - 2524 , - 3227 , - 458 , - 2153 , - 376 , - 3063 , - 2278 , - 1989 , - 2196 , - 2899 , - 130 , - 1825 , - 48 , - 2735 , - 1950 , - 1661 , - 1868 , - 2571 , - 3770 , - 1497 , - 3688 , - 2407 , - 1622 , - 1333 , - 1540 , - 2243 , - 3442 , - 1169 , - 3360 , - 2079 , - 1294 , - 1005 , - 1212 , - 1915 , - 3114 , - 841 , - 3032 , - 1751 , - 966 , - 677 , - 884 , - 1587 , - 2786 , - 513 , - 2704 , - 1423 , - 638 , - 349 , - 556 , - 1259 , - 2458 , - 185 , - 2376 , - 1095 , - 310 , - 21 , - 228 , - 931 , - 2130 , - 3825 , - 2048 , - 767 , - 3950 , - 3661 , - 3868 , - 603 , - 1802 , - 3497 , - 1720 , - 439 , - 3622 , - 3333 , - 3540 , - 275 , - 1474 , - 3169 , - 1392 , - 111 , - 3294 , - 3005 , - 3212 , - 3915 , - 1146 , - 2841 , - 1064 , - 3751 , - 2966 , - 2677 , - 2884 , - 3587 , - 818 , - 2513 , - 736 , - 3423 , - 2638 , - 2349 , - 2556 , - 3259 , - 490 , - 2185 , - 408 , - 3095 , - 2310 , - 2021 , - 2228 , - 2931 , - 162 , - 1857 , - 80 , - 2767 , - 1982 , - 1693 , - 1900 , - 2603 , - 3802 , - 1529 , - 3720 , - 2439 , - 1654 , - 1365 , - 1572 , - 2275 , - 3474 , - 1201 , - 3392 , - 2111 , - 1326 , - 1037 , - 1244 , - 1947 , - 3146 , - 873 , - 3064 , - 1783 , - 998 , - 709 , - 916 , - 1619 , - 2818 , - 545 , - 2736 , - 1455 , - 670 , - 381 , - 588 , - 1291 , - 2490 , - 217 , - 2408 , - 1127 , - 342 , - 53 , - 260 , - 963 , - 2162 , - 3857 , - 2080 , - 799 , - 14 , - 3693 , - 3900 , - 635 , - 1834 , - 3529 , - 1752 , - 471 , - 3654 , - 3365 , - 3572 , - 307 , - 1506 , - 3201 , - 1424 , - 143 , - 3326 , - 3037 , - 3244 , - 3947 , - 1178 , - 2873 , - 1096 , - 3783 , - 2998 , - 2709 , - 2916 , - 3619 , - 850 , - 2545 , - 768 , - 3455 , - 2670 , - 2381 , - 2588 , - 3291 , - 522 , - 2217 , - 440 , - 3127 , - 2342 , - 2053 , - 2260 , - 2963 , - 194 , - 1889 , - 112 , - 2799 , - 2014 , - 1725 , - 1932 , - 2635 , - 3834 , - 1561 , - 3752 , - 2471 , - 1686 , - 1397 , - 1604 , - 2307 , - 3506 , - 1233 , - 3424 , - 2143 , - 1358 , - 1069 , - 1276 , - 1979 , - 3178 , - 905 , - 3096 , - 1815 , - 1030 , - 741 , - 948 , - 1651 , - 2850 , - 577 , - 2768 , - 1487 , - 702 , - 413 , - 620 , - 1323 , - 2522 , - 249 , - 2440 , - 1159 , - 374 , - 85 , - 292 , - 995 , - 2194 , - 3889 , - 2112 , - 831 , - 46 , - 3725 , - 3932 , - 667 , - 1866 , - 3561 , - 1784 , - 503 , - 3686 , - 3397 , - 3604 , - 339 , - 1538 , - 3233 , - 1456 , - 175 , - 3358 , - 3069 , - 3276 , - 11 , - 1210 , - 2905 , - 1128 , - 3815 , - 3030 , - 2741 , - 2948 , - 3651 , - 882 , - 2577 , - 800 , - 3487 , - 2702 , - 2413 , - 2620 , - 3323 , - 554 , - 2249 , - 472 , - 3159 , - 2374 , - 2085 , - 2292 , - 2995 , - 226 , - 1921 , - 144 , - 2831 , - 2046 , - 1757 , - 1964 , - 2667 , - 3866 , - 1593 , - 3784 , - 2503 , - 1718 , - 1429 , - 1636 , - 2339 , - 3538 , - 1265 , - 3456 , - 2175 , - 1390 , - 1101 , - 1308 , - 2011 , - 3210 , - 937 , - 3128 , - 1847 , - 1062 , - 773 , - 980 , - 1683 , - 2882 , - 609 , - 2800 , - 1519 , - 734 , - 445 , - 652 , - 1355 , - 2554 , - 281 , - 2472 , - 1191 , - 406 , - 117 , - 324 , - 1027 , - 2226 , - 3921 , - 2144 , - 863 , - 78 , - 3757 , - 3964 , - 699 , - 1898 , - 3593 , - 1816 , - 535 , - 3718 , - 3429 , - 3636 , - 371 , - 1570 , - 3265 , - 1488 , - 207 , - 3390 , - 3101 , - 3308 , - 43 , - 1242 , - 2937 , - 1160 , - 3847 , - 3062 , - 2773 , - 2980 , - 3683 , - 914 , - 2609 , - 832 , - 3519 , - 2734 , - 2445 , - 2652 , - 3355 , - 586 , - 2281 , - 504 , - 3191 , - 2406 , - 2117 , - 2324 , - 3027 , - 258 , - 1953 , - 176 , - 2863 , - 2078 , - 1789 , - 1996 , - 2699 , - 3898 , - 1625 , - 3816 , - 2535 , - 1750 , - 1461 , - 1668 , - 2371 , - 3570 , - 1297 , - 3488 , - 2207 , - 1422 , - 1133 , - 1340 , - 2043 , - 3242 , - 969 , - 3160 , - 1879 , - 1094 , - 805 , - 1012 , - 1715 , - 2914 , - 641 , - 2832 , - 1551 , - 766 , - 477 , - 684 , - 1387 , - 2586 , - 313 , - 2504 , - 1223 , - 438 , - 149 , - 356 , - 1059 , - 2258 , - 3953 , - 2176 , - 895 , - 110 , - 3789 , - 28 , - 731 , - 1930 , - 3625 , - 1848 , - 567 , - 3750 , - 3461 , - 3668 , - 403 , - 1602 , - 3297 , - 1520 , - 239 , - 3422 , - 3133 , - 3340 , - 75 , - 1274 , - 2969 , - 1192 , - 3879 , - 3094 , - 2805 , - 3012 , - 3715 , - 946 , - 2641 , - 864 , - 3551 , - 2766 , - 2477 , - 2684 , - 3387 , - 618 , - 2313 , - 536 , - 3223 , - 2438 , - 2149 , - 2356 , - 3059 , - 290 , - 1985 , - 208 , - 2895 , - 2110 , - 1821 , - 2028 , - 2731 , - 3930 , - 1657 , - 3848 , - 2567 , - 1782 , - 1493 , - 1700 , - 2403 , - 3602 , - 1329 , - 3520 , - 2239 , - 1454 , - 1165 , - 1372 , - 2075 , - 3274 , - 1001 , - 3192 , - 1911 , - 1126 , - 837 , - 1044 , - 1747 , - 2946 , - 673 , - 2864 , - 1583 , - 798 , - 509 , - 716 , - 1419 , - 2618 , - 345 , - 2536 , - 1255 , - 470 , - 181 , - 388 , - 1091 , - 2290 , - 17 , - 2208 , - 927 , - 142 , - 3821 , - 60 , - 763 , - 1962 , - 3657 , - 1880 , - 599 , - 3782 , - 3493 , - 3700 , - 435 , - 1634 , - 3329 , - 1552 , - 271 , - 3454 , - 3165 , - 3372 , - 107 , - 1306 , - 3001 , - 1224 , - 3911 , - 3126 , - 2837 , - 3044 , - 3747 , - 978 , - 2673 , - 896 , - 3583 , - 2798 , - 2509 , - 2716 , - 3419 , - 650 , - 2345 , - 568 , - 3255 , - 2470 , - 2181 , - 2388 , - 3091 , - 322 , - 2017 , - 240 , - 2927 , - 2142 , - 1853 , - 2060 , - 2763 , - 3962 , - 1689 , - 3880 , - 2599 , - 1814 , - 1525 , - 1732 , - 2435 , - 3634 , - 1361 , - 3552 , - 2271 , - 1486 , - 1197 , - 1404 , - 2107 , - 3306 , - 1033 , - 3224 , - 1943 , - 1158 , - 869 , - 1076 , - 1779 , - 2978 , - 705 , - 2896 , - 1615 , - 830 , - 541 , - 748 , - 1451 , - 2650 , - 377 , - 2568 , - 1287 , - 502 , - 213 , - 420 , - 1123 , - 2322 , - 49 , - 2240 , - 959 , - 174 , - 3853 , - 92 , - 795 , - 1994 , - 3689 , - 1912 , - 631 , - 3814 , - 3525 , - 3732 , - 467 , - 1666 , - 3361 , - 1584 , - 303 , - 3486 , - 3197 , - 3404 , - 139 , - 1338 , - 3033 , - 1256 , - 3943 , - 3158 , - 2869 , - 3076 , - 3779 , - 1010 , - 2705 , - 928 , - 3615 , - 2830 , - 2541 , - 2748 , - 3451 , - 682 , - 2377 , - 600 , - 3287 , - 2502 , - 2213 , - 2420 , - 3123 , - 354 , - 2049 , - 272 , - 2959 , - 2174 , - 1885 , - 2092 , - 2795 , - 26 , - 1721 , - 3912 , - 2631 , - 1846 , - 1557 , - 1764 , - 2467 , - 3666 , - 1393 , - 3584 , - 2303 , - 1518 , - 1229 , - 1436 , - 2139 , - 3338 , - 1065 , - 3256 , - 1975 , - 1190 , - 901 , - 1108 , - 1811 , - 3010 , - 737 , - 2928 , - 1647 , - 862 , - 573 , - 780 , - 1483 , - 2682 , - 409 , - 2600 , - 1319 , - 534 , - 245 , - 452 , - 1155 , - 2354 , - 81 , - 2272 , - 991 , - 206 , - 3885 , - 124 , - 827 , - 2026 , - 3721 , - 1944 , - 663 , - 3846 , - 3557 , - 3764 , - 499 , - 1698 , - 3393 , - 1616 , - 335 , - 3518 , - 3229 , - 3436 , - 171 , - 1370 , - 3065 , - 1288 , - 7 , - 3190 , - 2901 , - 3108 , - 3811 , - 1042 , - 2737 , - 960 , - 3647 , - 2862 , - 2573 , - 2780 , - 3483 , - 714 , - 2409 , - 632 , - 3319 , - 2534 , - 2245 , - 2452 , - 3155 , - 386 , - 2081 , - 304 , - 2991 , - 2206 , - 1917 , - 2124 , - 2827 , - 58 , - 1753 , - 3944 , - 2663 , - 1878 , - 1589 , - 1796 , - 2499 , - 3698 , - 1425 , - 3616 , - 2335 , - 1550 , - 1261 , - 1468 , - 2171 , - 3370 , - 1097 , - 3288 , - 2007 , - 1222 , - 933 , - 1140 , - 1843 , - 3042 , - 769 , - 2960 , - 1679 , - 894 , - 605 , - 812 , - 1515 , - 2714 , - 441 , - 2632 , - 1351 , - 566 , - 277 , - 484 , - 1187 , - 2386 , - 113 , - 2304 , - 1023 , - 238 , - 3917 , - 156 , - 859 , - 2058 , - 3753 , - 1976 , - 695 , - 3878 , - 3589 , - 3796 , - 531 , - 1730 , - 3425 , - 1648 , - 367 , - 3550 , - 3261 , - 3468 , - 203 , - 1402 , - 3097 , - 1320 , - 39 , - 3222 , - 2933 , - 3140 , - 3843 , - 1074 , - 2769 , - 992 , - 3679 , - 2894 , - 2605 , - 2812 , - 3515 , - 746 , - 2441 , - 664 , - 3351 , - 2566 , - 2277 , - 2484 , - 3187 , - 418 , - 2113 , - 336 , - 3023 , - 2238 , - 1949 , - 2156 , - 2859 , - 90 , - 1785 , - 8 , - 2695 , - 1910 , - 1621 , - 1828 , - 2531 , - 3730 , - 1457 , - 3648 , - 2367 , - 1582 , - 1293 , - 1500 , - 2203 , - 3402 , - 1129 , - 3320 , - 2039 , - 1254 , - 965 , - 1172 , - 1875 , - 3074 , - 801 , - 2992 , - 1711 , - 926 , - 637 , - 844 , - 1547 , - 2746 , - 473 , - 2664 , - 1383 , - 598 , - 309 , - 516 , - 1219 , - 2418 , - 145 , - 2336 , - 1055 , - 270 , - 3949 , - 188 , - 891 , - 2090 , - 3785 , - 2008 , - 727 , - 3910 , - 3621 , - 3828 , - 563 , - 1762 , - 3457 , - 1680 , - 399 , - 3582 , - 3293 , - 3500 , - 235 , - 1434 , - 3129 , - 1352 , - 71 , - 3254 , - 2965 , - 3172 , - 3875 , - 1106 , - 2801 , - 1024 , - 3711 , - 2926 , - 2637 , - 2844 , - 3547 , - 778 , - 2473 , - 696 , - 3383 , - 2598 , - 2309 , - 2516 , - 3219 , - 450 , - 2145 , - 368 , - 3055 , - 2270 , - 1981 , - 2188 , - 2891 , - 122 , - 1817 , - 40 , - 2727 , - 1942 , - 1653 , - 1860 , - 2563 , - 3762 , - 1489 , - 3680 , - 2399 , - 1614 , - 1325 , - 1532 , - 2235 , - 3434 , - 1161 , - 3352 , - 2071 , - 1286 , - 997 , - 1204 , - 1907 , - 3106 , - 833 , - 3024 , - 1743 , - 958 , - 669 , - 876 , - 1579 , - 2778 , - 505 , - 2696 , - 1415 , - 630 , - 341 , - 548 , - 1251 , - 2450 , - 177 , - 2368 , - 1087 , - 302 , - 13 , - 220 , - 923 , - 2122 , - 3817 , - 2040 , - 759 , - 3942 , - 3653 , - 3860 , - 595 , - 1794 , - 3489 , - 1712 , - 431 , - 3614 , - 3325 , - 3532 , - 267 , - 1466 , - 3161 , - 1384 , - 103 , - 3286 , - 2997 , - 3204 , - 3907 , - 1138 , - 2833 , - 1056 , - 3743 , - 2958 , - 2669 , - 2876 , - 3579 , - 810 , - 2505 , - 728 , - 3415 , - 2630 , - 2341 , - 2548 , - 3251 , - 482 , - 2177 , - 400 , - 3087 , - 2302 , - 2013 , - 2220 , - 2923 , - 154 , - 1849 , - 72 , - 2759 , - 1974 , - 1685 , - 1892 , - 2595 , - 3794 , - 1521 , - 3712 , - 2431 , - 1646 , - 1357 , - 1564 , - 2267 , - 3466 , - 1193 , - 3384 , - 2103 , - 1318 , - 1029 , - 1236 , - 1939 , - 3138 , - 865 , - 3056 , - 1775 , - 990 , - 701 , - 908 , - 1611 , - 2810 , - 537 , - 2728 , - 1447 , - 662 , - 373 , - 580 , - 1283 , - 2482 , - 209 , - 2400 , - 1119 , - 334 , - 45 , - 252 , - 955 , - 2154 , - 3849 , - 2072 , - 791 , - 6 , - 3685 , - 3892 , - 627 , - 1826 , - 3521 , - 1744 , - 463 , - 3646 , - 3357 , - 3564 , - 299 , - 1498 , - 3193 , - 1416 , - 135 , - 3318 , - 3029 , - 3236 , - 3939 , - 1170 , - 2865 , - 1088 , - 3775 , - 2990 , - 2701 , - 2908 , - 3611 , - 842 , - 2537 , - 760 , - 3447 , - 2662 , - 2373 , - 2580 , - 3283 , - 514 , - 2209 , - 432 , - 3119 , - 2334 , - 2045 , - 2252 , - 2955 , - 186 , - 1881 , - 104 , - 2791 , - 2006 , - 1717 , - 1924 , - 2627 , - 3826 , - 1553 , - 3744 , - 2463 , - 1678 , - 1389 , - 1596 , - 2299 , - 3498 , - 1225 , - 3416 , - 2135 , - 1350 , - 1061 , - 1268 , - 1971 , - 3170 , - 897 , - 3088 , - 1807 , - 1022 , - 733 , - 940 , - 1643 , - 2842 , - 569 , - 2760 , - 1479 , - 694 , - 405 , - 612 , - 1315 , - 2514 , - 241 , - 2432 , - 1151 , - 366 , - 77 , - 284 , - 987 , - 2186 , - 3881 , - 2104 , - 823 , - 38 , - 3717 , - 3924 , - 659 , - 1858 , - 3553 , - 1776 , - 495 , - 3678 , - 3389 , - 3596 , - 331 , - 1530 , - 3225 , - 1448 , - 167 , - 3350 , - 3061 , - 3268 , - 3 , - 1202 , - 2897 , - 1120 , - 3807 , - 3022 , - 2733 , - 2940 , - 3643 , - 874 , - 2569 , - 792 , - 3479 , - 2694 , - 2405 , - 2612 , - 3315 , - 546 , - 2241 , - 464 , - 3151 , - 2366 , - 2077 , - 2284 , - 2987 , - 218 , - 1913 , - 136 , - 2823 , - 2038 , - 1749 , - 1956 , - 2659 , - 3858 , - 1585 , - 3776 , - 2495 , - 1710 , - 1421 , - 1628 , - 2331 , - 3530 , - 1257 , - 3448 , - 2167 , - 1382 , - 1093 , - 1300 , - 2003 , - 3202 , - 929 , - 3120 , - 1839 , - 1054 , - 765 , - 972 , - 1675 , - 2874 , - 601 , - 2792 , - 1511 , - 726 , - 437 , - 644 , - 1347 , - 2546 , - 273 , - 2464 , - 1183 , - 398 , - 109 , - 316 , - 1019 , - 2218 , - 3913 , - 2136 , - 855 , - 70 , - 3749 , - 3956 , - 691 , - 1890 , - 3585 , - 1808 , - 527 , - 3710 , - 3421 , - 3628 , - 363 , - 1562 , - 3257 , - 1480 , - 199 , - 3382 , - 3093 , - 3300 , - 35 , - 1234 , - 2929 , - 1152 , - 3839 , - 3054 , - 2765 , - 2972 , - 3675 , - 906 , - 2601 , - 824 , - 3511 , - 2726 , - 2437 , - 2644 , - 3347 , - 578 , - 2273 , - 496 , - 3183 , - 2398 , - 2109 , - 2316 , - 3019 , - 250 , - 1945 , - 168 , - 2855 , - 2070 , - 1781 , - 1988 , - 2691 , - 3890 , - 1617 , - 3808 , - 2527 , - 1742 , - 1453 , - 1660 , - 2363 , - 3562 , - 1289 , - 3480 , - 2199 , - 1414 , - 1125 , - 1332 , - 2035 , - 3234 , - 961 , - 3152 , - 1871 , - 1086 , - 797 , - 1004 , - 1707 , - 2906 , - 633 , - 2824 , - 1543 , - 758 , - 469 , - 676 , - 1379 , - 2578 , - 305 , - 2496 , - 1215 , - 430 , - 141 , - 348 , - 1051 , - 2250 , - 3945 , - 2168 , - 887 , - 102 , - 3781 , - 20 , - 723 , - 1922 , - 3617 , - 1840 , - 559 , - 3742 , - 3453 , - 3660 , - 395 , - 1594 , - 3289 , - 1512 , - 231 , - 3414 , - 3125 , - 3332 , - 67 , - 1266 , - 2961 , - 1184 , - 3871 , - 3086 , - 2797 , - 3004 , - 3707 , - 938 , - 2633 , - 856 , - 3543 , - 2758 , - 2469 , - 2676 , - 3379 , - 610 , - 2305 , - 528 , - 3215 , - 2430 , - 2141 , - 2348 , - 3051 , - 282 , - 1977 , - 200 , - 2887 , - 2102 , - 1813 , - 2020 , - 2723 , - 3922 , - 1649 , - 3840 , - 2559 , - 1774 , - 1485 , - 1692 , - 2395 , - 3594 , - 1321 , - 3512 , - 2231 , - 1446 , - 1157 , - 1364 , - 2067 , - 3266 , - 993 , - 3184 , - 1903 , - 1118 , - 829 , - 1036 , - 1739 , - 2938 , - 665 , - 2856 , - 1575 , - 790 , - 501 , - 708 , - 1411 , - 2610 , - 337 , - 2528 , - 1247 , - 462 , - 173 , - 380 , - 1083 , - 2282 , - 9 , - 2200 , - 919 , - 134 , - 3813 , - 52 , - 755 , - 1954 , - 3649 , - 1872 , - 591 , - 3774 , - 3485 , - 3692 , - 427 , - 1626 , - 3321 , - 1544 , - 263 , - 3446 , - 3157 , - 3364 , - 99 , - 1298 , - 2993 , - 1216 , - 3903 , - 3118 , - 2829 , - 3036 , - 3739 , - 970 , - 2665 , - 888 , - 3575 , - 2790 , - 2501 , - 2708 , - 3411 , - 642 , - 2337 , - 560 , - 3247 , - 2462 , - 2173 , - 2380 , - 3083 , - 314 , - 2009 , - 232 , - 2919 , - 2134 , - 1845 , - 2052 , - 2755 , - 3954 , - 1681 , - 3872 , - 2591 , - 1806 , - 1517 , - 1724 , - 2427 , - 3626 , - 1353 , - 3544 , - 2263 , - 1478 , - 1189 , - 1396 , - 2099 , - 3298 , - 1025 , - 3216 , - 1935 , - 1150 , - 861 , - 1068 , - 1771 , - 2970 , - 697 , - 2888 , - 1607 , - 822 , - 533 , - 740 , - 1443 , - 2642 , - 369 , - 2560 , - 1279 , - 494 , - 205 , - 412 , - 1115 , - 2314 , - 41 , - 2232 , - 951 , - 166 , - 3845 , - 84 , - 787 , - 1986 , - 3681 , - 1904 , - 623 , - 3806 , - 3517 , - 3724 , - 459 , - 1658 , - 3353 , - 1576 , - 295 , - 3478 , - 3189 , - 3396 , - 131 , - 1330 , - 3025 , - 1248 , - 3935 , - 3150 , - 2861 , - 3068 , - 3771 , - 1002 , - 2697 , - 920 , - 3607 , - 2822 , - 2533 , - 2740 , - 3443 , - 674 , - 2369 , - 592 , - 3279 , - 2494 , - 2205 , - 2412 , - 3115 , - 346 , - 2041 , - 264 , - 2951 , - 2166 , - 1877 , - 2084 , - 2787 , - 18 , - 1713 , - 3904 , - 2623 , - 1838 , - 1549 , - 1756 , - 2459 , - 3658 , - 1385 , - 3576 , - 2295 , - 1510 , - 1221 , - 1428 , - 2131 , - 3330 , - 1057 , - 3248 , - 1967 , - 1182 , - 893 , - 1100 , - 1803 , - 3002 , - 729 , - 2920 , - 1639 , - 854 , - 565 , - 772 , - 1475 , - 2674 , - 401 , - 2592 , - 1311 , - 526 , - 237 , - 444 , - 1147 , - 2346 , - 73 , - 2264 , - 983 , - 198 , - 3877 , - 116 , - 819 , - 2018 , - 3713 , - 1936 , - 655 , - 3838 , - 3549 , - 3756 , - 491 , - 1690 , - 3385 , - 1608 , - 327 , - 3510 , - 3221 , - 3428 , - 163 , - 1362 , - 3057 , - 1280 , - 3967 , - 3182 , - 2893 , - 3100 , - 3803 , - 1034 , - 2729 , - 952 , - 3639 , - 2854 , - 2565 , - 2772 , - 3475 , - 706 , - 2401 , - 624 , - 3311 , - 2526 , - 2237 , - 2444 , - 3147 , - 378 , - 2073 , - 296 , - 2983 , - 2198 , - 1909 , - 2116 , - 2819 , - 50 , - 1745 , - 3936 , - 2655 , - 1870 , - 1581 , - 1788 , - 2491 , - 3690 , - 1417 , - 3608 , - 2327 , - 1542 , - 1253 , - 1460 , - 2163 , - 3362 , - 1089 , - 3280 , - 1999 , - 1214 , - 925 , - 1132 , - 1835 , - 3034 , - 761 , - 2952 , - 1671 , - 886 , - 597 , - 804 , - 1507 , - 2706 , - 433 , - 2624 , - 1343 , - 558 , - 269 , - 476 , - 1179 , - 2378 , - 105 , - 2296 , - 1015 , - 230 , - 3909 , - 148 , - 851 , - 2050 , - 3745 , - 1968 , - 687 , - 3870 , - 3581 , - 3788 , - 523 , - 1722 , - 3417 , - 1640 , - 359 , - 3542 , - 3253 , - 3460 , - 195 , - 1394 , - 3089 , - 1312 , - 31 , - 3214 , - 2925 , - 3132 , - 3835 , - 1066 , - 2761 , - 984 , - 3671 , - 2886 , - 2597 , - 2804 , - 3507 , - 738 , - 2433 , - 656 , - 3343 , - 2558 , - 2269 , - 2476 , - 3179 , - 410 , - 2105 , - 328 , - 3015 , - 2230 , - 1941 , - 2148 , - 2851 , - 82 , - 1777 , - 0 , - 2983 , - 3614 , - 1893 , - 1852 , - 3491 , - 2778 , - 3745 , - 2360 , - 2655 , - 598 , - 221 , - 1524 , - 475 , - 1106 , - 3417 , - 3376 , - 983 , - 270 , - 1237 , - 3884 , - 147 , - 2122 , - 1745 , - 3048 , - 1999 , - 2630 , - 909 , - 868 , - 2507 , - 1794 , - 2761 , - 1376 , - 1671 , - 3646 , - 3269 , - 540 , - 3523 , - 122 , - 2433 , - 2392 , - 4031 , - 3318 , - 253 , - 2900 , - 3195 , - 1138 , - 761 , - 2064 , - 1015 , - 1646 , - 3957 , - 3916 , - 1523 , - 810 , - 1777 , - 392 , - 687 , - 2662 , - 2285 , - 3588 , - 2539 , - 3170 , - 1449 , - 1408 , - 3047 , - 2334 , - 3301 , - 1916 , - 2211 , - 154 , - 3809 , - 1080 , - 31 , - 662 , - 2973 , - 2932 , - 539 , - 3858 , - 793 , - 3440 , - 3735 , - 1678 , - 1301 , - 2604 , - 1555 , - 2186 , - 465 , - 424 , - 2063 , - 1350 , - 2317 , - 932 , - 1227 , - 3202 , - 2825 , - 96 , - 3079 , - 3710 , - 1989 , - 1948 , - 3587 , - 2874 , - 3841 , - 2456 , - 2751 , - 694 , - 317 , - 1620 , - 571 , - 1202 , - 3513 , - 3472 , - 1079 , - 366 , - 1333 , - 3980 , - 243 , - 2218 , - 1841 , - 3144 , - 2095 , - 2726 , - 1005 , - 964 , - 2603 , - 1890 , - 2857 , - 1472 , - 1767 , - 3742 , - 3365 , - 636 , - 3619 , - 218 , - 2529 , - 2488 , - 95 , - 3414 , - 349 , - 2996 , - 3291 , - 1234 , - 857 , - 2160 , - 1111 , - 1742 , - 21 , - 4012 , - 1619 , - 906 , - 1873 , - 488 , - 783 , - 2758 , - 2381 , - 3684 , - 2635 , - 3266 , - 1545 , - 1504 , - 3143 , - 2430 , - 3397 , - 2012 , - 2307 , - 250 , - 3905 , - 1176 , - 127 , - 758 , - 3069 , - 3028 , - 635 , - 3954 , - 889 , - 3536 , - 3831 , - 1774 , - 1397 , - 2700 , - 1651 , - 2282 , - 561 , - 520 , - 2159 , - 1446 , - 2413 , - 1028 , - 1323 , - 3298 , - 2921 , - 192 , - 3175 , - 3806 , - 2085 , - 2044 , - 3683 , - 2970 , - 3937 , - 2552 , - 2847 , - 790 , - 413 , - 1716 , - 667 , - 1298 , - 3609 , - 3568 , - 1175 , - 462 , - 1429 , - 44 , - 339 , - 2314 , - 1937 , - 3240 , - 2191 , - 2822 , - 1101 , - 1060 , - 2699 , - 1986 , - 2953 , - 1568 , - 1863 , - 3838 , - 3461 , - 732 , - 3715 , - 314 , - 2625 , - 2584 , - 191 , - 3510 , - 445 , - 3092 , - 3387 , - 1330 , - 953 , - 2256 , - 1207 , - 1838 , - 117 , - 76 , - 1715 , - 1002 , - 1969 , - 584 , - 879 , - 2854 , - 2477 , - 3780 , - 2731 , - 3362 , - 1641 , - 1600 , - 3239 , - 2526 , - 3493 , - 2108 , - 2403 , - 346 , - 4001 , - 1272 , - 223 , - 854 , - 3165 , - 3124 , - 731 , - 18 , - 985 , - 3632 , - 3927 , - 1870 , - 1493 , - 2796 , - 1747 , - 2378 , - 657 , - 616 , - 2255 , - 1542 , - 2509 , - 1124 , - 1419 , - 3394 , - 3017 , - 288 , - 3271 , - 3902 , - 2181 , - 2140 , - 3779 , - 3066 , - 1 , - 2648 , - 2943 , - 886 , - 509 , - 1812 , - 763 , - 1394 , - 3705 , - 3664 , - 1271 , - 558 , - 1525 , - 140 , - 435 , - 2410 , - 2033 , - 3336 , - 2287 , - 2918 , - 1197 , - 1156 , - 2795 , - 2082 , - 3049 , - 1664 , - 1959 , - 3934 , - 3557 , - 828 , - 3811 , - 410 , - 2721 , - 2680 , - 287 , - 3606 , - 541 , - 3188 , - 3483 , - 1426 , - 1049 , - 2352 , - 1303 , - 1934 , - 213 , - 172 , - 1811 , - 1098 , - 2065 , - 680 , - 975 , - 2950 , - 2573 , - 3876 , - 2827 , - 3458 , - 1737 , - 1696 , - 3335 , - 2622 , - 3589 , - 2204 , - 2499 , - 442 , - 65 , - 1368 , - 319 , - 950 , - 3261 , - 3220 , - 827 , - 114 , - 1081 , - 3728 , - 4023 , - 1966 , - 1589 , - 2892 , - 1843 , - 2474 , - 753 , - 712 , - 2351 , - 1638 , - 2605 , - 1220 , - 1515 , - 3490 , - 3113 , - 384 , - 3367 , - 3998 , - 2277 , - 2236 , - 3875 , - 3162 , - 97 , - 2744 , - 3039 , - 982 , - 605 , - 1908 , - 859 , - 1490 , - 3801 , - 3760 , - 1367 , - 654 , - 1621 , - 236 , - 531 , - 2506 , - 2129 , - 3432 , - 2383 , - 3014 , - 1293 , - 1252 , - 2891 , - 2178 , - 3145 , - 1760 , - 2055 , - 4030 , - 3653 , - 924 , - 3907 , - 506 , - 2817 , - 2776 , - 383 , - 3702 , - 637 , - 3284 , - 3579 , - 1522 , - 1145 , - 2448 , - 1399 , - 2030 , - 309 , - 268 , - 1907 , - 1194 , - 2161 , - 776 , - 1071 , - 3046 , - 2669 , - 3972 , - 2923 , - 3554 , - 1833 , - 1792 , - 3431 , - 2718 , - 3685 , - 2300 , - 2595 , - 538 , - 161 , - 1464 , - 415 , - 1046 , - 3357 , - 3316 , - 923 , - 210 , - 1177 , - 3824 , - 87 , - 2062 , - 1685 , - 2988 , - 1939 , - 2570 , - 849 , - 808 , - 2447 , - 1734 , - 2701 , - 1316 , - 1611 , - 3586 , - 3209 , - 480 , - 3463 , - 62 , - 2373 , - 2332 , - 3971 , - 3258 , - 193 , - 2840 , - 3135 , - 1078 , - 701 , - 2004 , - 955 , - 1586 , - 3897 , - 3856 , - 1463 , - 750 , - 1717 , - 332 , - 627 , - 2602 , - 2225 , - 3528 , - 2479 , - 3110 , - 1389 , - 1348 , - 2987 , - 2274 , - 3241 , - 1856 , - 2151 , - 94 , - 3749 , - 1020 , - 4003 , - 602 , - 2913 , - 2872 , - 479 , - 3798 , - 733 , - 3380 , - 3675 , - 1618 , - 1241 , - 2544 , - 1495 , - 2126 , - 405 , - 364 , - 2003 , - 1290 , - 2257 , - 872 , - 1167 , - 3142 , - 2765 , - 36 , - 3019 , - 3650 , - 1929 , - 1888 , - 3527 , - 2814 , - 3781 , - 2396 , - 2691 , - 634 , - 257 , - 1560 , - 511 , - 1142 , - 3453 , - 3412 , - 1019 , - 306 , - 1273 , - 3920 , - 183 , - 2158 , - 1781 , - 3084 , - 2035 , - 2666 , - 945 , - 904 , - 2543 , - 1830 , - 2797 , - 1412 , - 1707 , - 3682 , - 3305 , - 576 , - 3559 , - 158 , - 2469 , - 2428 , - 35 , - 3354 , - 289 , - 2936 , - 3231 , - 1174 , - 797 , - 2100 , - 1051 , - 1682 , - 3993 , - 3952 , - 1559 , - 846 , - 1813 , - 428 , - 723 , - 2698 , - 2321 , - 3624 , - 2575 , - 3206 , - 1485 , - 1444 , - 3083 , - 2370 , - 3337 , - 1952 , - 2247 , - 190 , - 3845 , - 1116 , - 67 , - 698 , - 3009 , - 2968 , - 575 , - 3894 , - 829 , - 3476 , - 3771 , - 1714 , - 1337 , - 2640 , - 1591 , - 2222 , - 501 , - 460 , - 2099 , - 1386 , - 2353 , - 968 , - 1263 , - 3238 , - 2861 , - 132 , - 3115 , - 3746 , - 2025 , - 1984 , - 3623 , - 2910 , - 3877 , - 2492 , - 2787 , - 730 , - 353 , - 1656 , - 607 , - 1238 , - 3549 , - 3508 , - 1115 , - 402 , - 1369 , - 4016 , - 279 , - 2254 , - 1877 , - 3180 , - 2131 , - 2762 , - 1041 , - 1000 , - 2639 , - 1926 , - 2893 , - 1508 , - 1803 , - 3778 , - 3401 , - 672 , - 3655 , - 254 , - 2565 , - 2524 , - 131 , - 3450 , - 385 , - 3032 , - 3327 , - 1270 , - 893 , - 2196 , - 1147 , - 1778 , - 57 , - 16 , - 1655 , - 942 , - 1909 , - 524 , - 819 , - 2794 , - 2417 , - 3720 , - 2671 , - 3302 , - 1581 , - 1540 , - 3179 , - 2466 , - 3433 , - 2048 , - 2343 , - 286 , - 3941 , - 1212 , - 163 , - 794 , - 3105 , - 3064 , - 671 , - 3990 , - 925 , - 3572 , - 3867 , - 1810 , - 1433 , - 2736 , - 1687 , - 2318 , - 597 , - 556 , - 2195 , - 1482 , - 2449 , - 1064 , - 1359 , - 3334 , - 2957 , - 228 , - 3211 , - 3842 , - 2121 , - 2080 , - 3719 , - 3006 , - 3973 , - 2588 , - 2883 , - 826 , - 449 , - 1752 , - 703 , - 1334 , - 3645 , - 3604 , - 1211 , - 498 , - 1465 , - 80 , - 375 , - 2350 , - 1973 , - 3276 , - 2227 , - 2858 , - 1137 , - 1096 , - 2735 , - 2022 , - 2989 , - 1604 , - 1899 , - 3874 , - 3497 , - 768 , - 3751 , - 350 , - 2661 , - 2620 , - 227 , - 3546 , - 481 , - 3128 , - 3423 , - 1366 , - 989 , - 2292 , - 1243 , - 1874 , - 153 , - 112 , - 1751 , - 1038 , - 2005 , - 620 , - 915 , - 2890 , - 2513 , - 3816 , - 2767 , - 3398 , - 1677 , - 1636 , - 3275 , - 2562 , - 3529 , - 2144 , - 2439 , - 382 , - 5 , - 1308 , - 259 , - 890 , - 3201 , - 3160 , - 767 , - 54 , - 1021 , - 3668 , - 3963 , - 1906 , - 1529 , - 2832 , - 1783 , - 2414 , - 693 , - 652 , - 2291 , - 1578 , - 2545 , - 1160 , - 1455 , - 3430 , - 3053 , - 324 , - 3307 , - 3938 , - 2217 , - 2176 , - 3815 , - 3102 , - 37 , - 2684 , - 2979 , - 922 , - 545 , - 1848 , - 799 , - 1430 , - 3741 , - 3700 , - 1307 , - 594 , - 1561 , - 176 , - 471 , - 2446 , - 2069 , - 3372 , - 2323 , - 2954 , - 1233 , - 1192 , - 2831 , - 2118 , - 3085 , - 1700 , - 1995 , - 3970 , - 3593 , - 864 , - 3847 , - 446 , - 2757 , - 2716 , - 323 , - 3642 , - 577 , - 3224 , - 3519 , - 1462 , - 1085 , - 2388 , - 1339 , - 1970 , - 249 , - 208 , - 1847 , - 1134 , - 2101 , - 716 , - 1011 , - 2986 , - 2609 , - 3912 , - 2863 , - 3494 , - 1773 , - 1732 , - 3371 , - 2658 , - 3625 , - 2240 , - 2535 , - 478 , - 101 , - 1404 , - 355 , - 986 , - 3297 , - 3256 , - 863 , - 150 , - 1117 , - 3764 , - 27 , - 2002 , - 1625 , - 2928 , - 1879 , - 2510 , - 789 , - 748 , - 2387 , - 1674 , - 2641 , - 1256 , - 1551 , - 3526 , - 3149 , - 420 , - 3403 , - 2 , - 2313 , - 2272 , - 3911 , - 3198 , - 133 , - 2780 , - 3075 , - 1018 , - 641 , - 1944 , - 895 , - 1526 , - 3837 , - 3796 , - 1403 , - 690 , - 1657 , - 272 , - 567 , - 2542 , - 2165 , - 3468 , - 2419 , - 3050 , - 1329 , - 1288 , - 2927 , - 2214 , - 3181 , - 1796 , - 2091 , - 34 , - 3689 , - 960 , - 3943 , - 542 , - 2853 , - 2812 , - 419 , - 3738 , - 673 , - 3320 , - 3615 , - 1558 , - 1181 , - 2484 , - 1435 , - 2066 , - 345 , - 304 , - 1943 , - 1230 , - 2197 , - 812 , - 1107 , - 3082 , - 2705 , - 4008 , - 2959 , - 3590 , - 1869 , - 1828 , - 3467 , - 2754 , - 3721 , - 2336 , - 2631 , - 574 , - 197 , - 1500 , - 451 , - 1082 , - 3393 , - 3352 , - 959 , - 246 , - 1213 , - 3860 , - 123 , - 2098 , - 1721 , - 3024 , - 1975 , - 2606 , - 885 , - 844 , - 2483 , - 1770 , - 2737 , - 1352 , - 1647 , - 3622 , - 3245 , - 516 , - 3499 , - 98 , - 2409 , - 2368 , - 4007 , - 3294 , - 229 , - 2876 , - 3171 , - 1114 , - 737 , - 2040 , - 991 , - 1622 , - 3933 , - 3892 , - 1499 , - 786 , - 1753 , - 368 , - 663 , - 2638 , - 2261 , - 3564 , - 2515 , - 3146 , - 1425 , - 1384 , - 3023 , - 2310 , - 3277 , - 1892 , - 2187 , - 130 , - 3785 , - 1056 , - 7 , - 638 , - 2949 , - 2908 , - 515 , - 3834 , - 769 , - 3416 , - 3711 , - 1654 , - 1277 , - 2580 , - 1531 , - 2162 , - 441 , - 400 , - 2039 , - 1326 , - 2293 , - 908 , - 1203 , - 3178 , - 2801 , - 72 , - 3055 , - 3686 , - 1965 , - 1924 , - 3563 , - 2850 , - 3817 , - 2432 , - 2727 , - 670 , - 293 , - 1596 , - 547 , - 1178 , - 3489 , - 3448 , - 1055 , - 342 , - 1309 , - 3956 , - 219 , - 2194 , - 1817 , - 3120 , - 2071 , - 2702 , - 981 , - 940 , - 2579 , - 1866 , - 2833 , - 1448 , - 1743 , - 3718 , - 3341 , - 612 , - 3595 , - 194 , - 2505 , - 2464 , - 71 , - 3390 , - 325 , - 2972 , - 3267 , - 1210 , - 833 , - 2136 , - 1087 , - 1718 , - 4029 , - 3988 , - 1595 , - 882 , - 1849 , - 464 , - 759 , - 2734 , - 2357 , - 3660 , - 2611 , - 3242 , - 1521 , - 1480 , - 3119 , - 2406 , - 3373 , - 1988 , - 2283 , - 226 , - 3881 , - 1152 , - 103 , - 734 , - 3045 , - 3004 , - 611 , - 3930 , - 865 , - 3512 , - 3807 , - 1750 , - 1373 , - 2676 , - 1627 , - 2258 , - 537 , - 496 , - 2135 , - 1422 , - 2389 , - 1004 , - 1299 , - 3274 , - 2897 , - 168 , - 3151 , - 3782 , - 2061 , - 2020 , - 3659 , - 2946 , - 3913 , - 2528 , - 2823 , - 766 , - 389 , - 1692 , - 643 , - 1274 , - 3585 , - 3544 , - 1151 , - 438 , - 1405 , - 20 , - 315 , - 2290 , - 1913 , - 3216 , - 2167 , - 2798 , - 1077 , - 1036 , - 2675 , - 1962 , - 2929 , - 1544 , - 1839 , - 3814 , - 3437 , - 708 , - 3691 , - 290 , - 2601 , - 2560 , - 167 , - 3486 , - 421 , - 3068 , - 3363 , - 1306 , - 929 , - 2232 , - 1183 , - 1814 , - 93 , - 52 , - 1691 , - 978 , - 1945 , - 560 , - 855 , - 2830 , - 2453 , - 3756 , - 2707 , - 3338 , - 1617 , - 1576 , - 3215 , - 2502 , - 3469 , - 2084 , - 2379 , - 322 , - 3977 , - 1248 , - 199 , - 830 , - 3141 , - 3100 , - 707 , - 4026 , - 961 , - 3608 , - 3903 , - 1846 , - 1469 , - 2772 , - 1723 , - 2354 , - 633 , - 592 , - 2231 , - 1518 , - 2485 , - 1100 , - 1395 , - 3370 , - 2993 , - 264 , - 3247 , - 3878 , - 2157 , - 2116 , - 3755 , - 3042 , - 4009 , - 2624 , - 2919 , - 862 , - 485 , - 1788 , - 739 , - 1370 , - 3681 , - 3640 , - 1247 , - 534 , - 1501 , - 116 , - 411 , - 2386 , - 2009 , - 3312 , - 2263 , - 2894 , - 1173 , - 1132 , - 2771 , - 2058 , - 3025 , - 1640 , - 1935 , - 3910 , - 3533 , - 804 , - 3787 , - 386 , - 2697 , - 2656 , - 263 , - 3582 , - 517 , - 3164 , - 3459 , - 1402 , - 1025 , - 2328 , - 1279 , - 1910 , - 189 , - 148 , - 1787 , - 1074 , - 2041 , - 656 , - 951 , - 2926 , - 2549 , - 3852 , - 2803 , - 3434 , - 1713 , - 1672 , - 3311 , - 2598 , - 3565 , - 2180 , - 2475 , - 418 , - 41 , - 1344 , - 295 , - 926 , - 3237 , - 3196 , - 803 , - 90 , - 1057 , - 3704 , - 3999 , - 1942 , - 1565 , - 2868 , - 1819 , - 2450 , - 729 , - 688 , - 2327 , - 1614 , - 2581 , - 1196 , - 1491 , - 3466 , - 3089 , - 360 , - 3343 , - 3974 , - 2253 , - 2212 , - 3851 , - 3138 , - 73 , - 2720 , - 3015 , - 958 , - 581 , - 1884 , - 835 , - 1466 , - 3777 , - 3736 , - 1343 , - 630 , - 1597 , - 212 , - 507 , - 2482 , - 2105 , - 3408 , - 2359 , - 2990 , - 1269 , - 1228 , - 2867 , - 2154 , - 3121 , - 1736 , - 2031 , - 4006 , - 3629 , - 900 , - 3883 , - 482 , - 2793 , - 2752 , - 359 , - 3678 , - 613 , - 3260 , - 3555 , - 1498 , - 1121 , - 2424 , - 1375 , - 2006 , - 285 , - 244 , - 1883 , - 1170 , - 2137 , - 752 , - 1047 , - 3022 , - 2645 , - 3948 , - 2899 , - 3530 , - 1809 , - 1768 , - 3407 , - 2694 , - 3661 , - 2276 , - 2571 , - 514 , - 137 , - 1440 , - 391 , - 1022 , - 3333 , - 3292 , - 899 , - 186 , - 1153 , - 3800 , - 63 , - 2038 , - 1661 , - 2964 , - 1915 , - 2546 , - 825 , - 784 , - 2423 , - 1710 , - 2677 , - 1292 , - 1587 , - 3562 , - 3185 , - 456 , - 3439 , - 38 , - 2349 , - 2308 , - 3947 , - 3234 , - 169 , - 2816 , - 3111 , - 1054 , - 677 , - 1980 , - 931 , - 1562 , - 3873 , - 3832 , - 1439 , - 726 , - 1693 , - 308 , - 603 , - 2578 , - 2201 , - 3504 , - 2455 , - 3086 , - 1365 , - 1324 , - 2963 , - 2250 , - 3217 , - 1832 , - 2127 , - 70 , - 3725 , - 996 , - 3979 , - 578 , - 2889 , - 2848 , - 455 , - 3774 , - 709 , - 3356 , - 3651 , - 1594 , - 1217 , - 2520 , - 1471 , - 2102 , - 381 , - 340 , - 1979 , - 1266 , - 2233 , - 848 , - 1143 , - 3118 , - 2741 , - 12 , - 2995 , - 3626 , - 1905 , - 1864 , - 3503 , - 2790 , - 3757 , - 2372 , - 2667 , - 610 , - 233 , - 1536 , - 487 , - 1118 , - 3429 , - 3388 , - 995 , - 282 , - 1249 , - 3896 , - 159 , - 2134 , - 1757 , - 3060 , - 2011 , - 2642 , - 921 , - 880 , - 2519 , - 1806 , - 2773 , - 1388 , - 1683 , - 3658 , - 3281 , - 552 , - 3535 , - 134 , - 2445 , - 2404 , - 11 , - 3330 , - 265 , - 2912 , - 3207 , - 1150 , - 773 , - 2076 , - 1027 , - 1658 , - 3969 , - 3928 , - 1535 , - 822 , - 1789 , - 404 , - 699 , - 2674 , - 2297 , - 3600 , - 2551 , - 3182 , - 1461 , - 1420 , - 3059 , - 2346 , - 3313 , - 1928 , - 2223 , - 166 , - 3821 , - 1092 , - 43 , - 674 , - 2985 , - 2944 , - 551 , - 3870 , - 805 , - 3452 , - 3747 , - 1690 , - 1313 , - 2616 , - 1567 , - 2198 , - 477 , - 436 , - 2075 , - 1362 , - 2329 , - 944 , - 1239 , - 3214 , - 2837 , - 108 , - 3091 , - 3722 , - 2001 , - 1960 , - 3599 , - 2886 , - 3853 , - 2468 , - 2763 , - 706 , - 329 , - 1632 , - 583 , - 1214 , - 3525 , - 3484 , - 1091 , - 378 , - 1345 , - 3992 , - 255 , - 2230 , - 1853 , - 3156 , - 2107 , - 2738 , - 1017 , - 976 , - 2615 , - 1902 , - 2869 , - 1484 , - 1779 , - 3754 , - 3377 , - 648 , - 3631 , - 230 , - 2541 , - 2500 , - 107 , - 3426 , - 361 , - 3008 , - 3303 , - 1246 , - 869 , - 2172 , - 1123 , - 1754 , - 33 , - 4024 , - 1631 , - 918 , - 1885 , - 500 , - 795 , - 2770 , - 2393 , - 3696 , - 2647 , - 3278 , - 1557 , - 1516 , - 3155 , - 2442 , - 3409 , - 2024 , - 2319 , - 262 , - 3917 , - 1188 , - 139 , - 770 , - 3081 , - 3040 , - 647 , - 3966 , - 901 , - 3548 , - 3843 , - 1786 , - 1409 , - 2712 , - 1663 , - 2294 , - 573 , - 532 , - 2171 , - 1458 , - 2425 , - 1040 , - 1335 , - 3310 , - 2933 , - 204 , - 3187 , - 3818 , - 2097 , - 2056 , - 3695 , - 2982 , - 3949 , - 2564 , - 2859 , - 802 , - 425 , - 1728 , - 679 , - 1310 , - 3621 , - 3580 , - 1187 , - 474 , - 1441 , - 56 , - 351 , - 2326 , - 1949 , - 3252 , - 2203 , - 2834 , - 1113 , - 1072 , - 2711 , - 1998 , - 2965 , - 1580 , - 1875 , - 3850 , - 3473 , - 744 , - 3727 , - 326 , - 2637 , - 2596 , - 203 , - 3522 , - 457 , - 3104 , - 3399 , - 1342 , - 965 , - 2268 , - 1219 , - 1850 , - 129 , - 88 , - 1727 , - 1014 , - 1981 , - 596 , - 891 , - 2866 , - 2489 , - 3792 , - 2743 , - 3374 , - 1653 , - 1612 , - 3251 , - 2538 , - 3505 , - 2120 , - 2415 , - 358 , - 4013 , - 1284 , - 235 , - 866 , - 3177 , - 3136 , - 743 , - 30 , - 997 , - 3644 , - 3939 , - 1882 , - 1505 , - 2808 , - 1759 , - 2390 , - 669 , - 628 , - 2267 , - 1554 , - 2521 , - 1136 , - 1431 , - 3406 , - 3029 , - 300 , - 3283 , - 3914 , - 2193 , - 2152 , - 3791 , - 3078 , - 13 , - 2660 , - 2955 , - 898 , - 521 , - 1824 , - 775 , - 1406 , - 3717 , - 3676 , - 1283 , - 570 , - 1537 , - 152 , - 447 , - 2422 , - 2045 , - 3348 , - 2299 , - 2930 , - 1209 , - 1168 , - 2807 , - 2094 , - 3061 , - 1676 , - 1971 , - 3946 , - 3569 , - 840 , - 3823 , - 422 , - 2733 , - 2692 , - 299 , - 3618 , - 553 , - 3200 , - 3495 , - 1438 , - 1061 , - 2364 , - 1315 , - 1946 , - 225 , - 184 , - 1823 , - 1110 , - 2077 , - 692 , - 987 , - 2962 , - 2585 , - 3888 , - 2839 , - 3470 , - 1749 , - 1708 , - 3347 , - 2634 , - 3601 , - 2216 , - 2511 , - 454 , - 77 , - 1380 , - 331 , - 962 , - 3273 , - 3232 , - 839 , - 126 , - 1093 , - 3740 , - 3 , - 1978 , - 1601 , - 2904 , - 1855 , - 2486 , - 765 , - 724 , - 2363 , - 1650 , - 2617 , - 1232 , - 1527 , - 3502 , - 3125 , - 396 , - 3379 , - 4010 , - 2289 , - 2248 , - 3887 , - 3174 , - 109 , - 2756 , - 3051 , - 994 , - 617 , - 1920 , - 871 , - 1502 , - 3813 , - 3772 , - 1379 , - 666 , - 1633 , - 248 , - 543 , - 2518 , - 2141 , - 3444 , - 2395 , - 3026 , - 1305 , - 1264 , - 2903 , - 2190 , - 3157 , - 1772 , - 2067 , - 10 , - 3665 , - 936 , - 3919 , - 518 , - 2829 , - 2788 , - 395 , - 3714 , - 649 , - 3296 , - 3591 , - 1534 , - 1157 , - 2460 , - 1411 , - 2042 , - 321 , - 280 , - 1919 , - 1206 , - 2173 , - 788 , - 1083 , - 3058 , - 2681 , - 3984 , - 2935 , - 3566 , - 1845 , - 1804 , - 3443 , - 2730 , - 3697 , - 2312 , - 2607 , - 550 , - 173 , - 1476 , - 427 , - 1058 , - 3369 , - 3328 , - 935 , - 222 , - 1189 , - 3836 , - 99 , - 2074 , - 1697 , - 3000 , - 1951 , - 2582 , - 861 , - 820 , - 2459 , - 1746 , - 2713 , - 1328 , - 1623 , - 3598 , - 3221 , - 492 , - 3475 , - 74 , - 2385 , - 2344 , - 3983 , - 3270 , - 205 , - 2852 , - 3147 , - 1090 , - 713 , - 2016 , - 967 , - 1598 , - 3909 , - 3868 , - 1475 , - 762 , - 1729 , - 344 , - 639 , - 2614 , - 2237 , - 3540 , - 2491 , - 3122 , - 1401 , - 1360 , - 2999 , - 2286 , - 3253 , - 1868 , - 2163 , - 106 , - 3761 , - 1032 , - 4015 , - 614 , - 2925 , - 2884 , - 491 , - 3810 , - 745 , - 3392 , - 3687 , - 1630 , - 1253 , - 2556 , - 1507 , - 2138 , - 417 , - 376 , - 2015 , - 1302 , - 2269 , - 884 , - 1179 , - 3154 , - 2777 , - 48 , - 3031 , - 3662 , - 1941 , - 1900 , - 3539 , - 2826 , - 3793 , - 2408 , - 2703 , - 646 , - 269 , - 1572 , - 523 , - 1154 , - 3465 , - 3424 , - 1031 , - 318 , - 1285 , - 3932 , - 195 , - 2170 , - 1793 , - 3096 , - 2047 , - 2678 , - 957 , - 916 , - 2555 , - 1842 , - 2809 , - 1424 , - 1719 , - 3694 , - 3317 , - 588 , - 3571 , - 170 , - 2481 , - 2440 , - 47 , - 3366 , - 301 , - 2948 , - 3243 , - 1186 , - 809 , - 2112 , - 1063 , - 1694 , - 4005 , - 3964 , - 1571 , - 858 , - 1825 , - 440 , - 735 , - 2710 , - 2333 , - 3636 , - 2587 , - 3218 , - 1497 , - 1456 , - 3095 , - 2382 , - 3349 , - 1964 , - 2259 , - 202 , - 3857 , - 1128 , - 79 , - 710 , - 3021 , - 2980 , - 587 , - 3906 , - 841 , - 3488 , - 3783 , - 1726 , - 1349 , - 2652 , - 1603 , - 2234 , - 513 , - 472 , - 2111 , - 1398 , - 2365 , - 980 , - 1275 , - 3250 , - 2873 , - 144 , - 3127 , - 3758 , - 2037 , - 1996 , - 3635 , - 2922 , - 3889 , - 2504 , - 2799 , - 742 , - 365 , - 1668 , - 619 , - 1250 , - 3561 , - 3520 , - 1127 , - 414 , - 1381 , - 4028 , - 291 , - 2266 , - 1889 , - 3192 , - 2143 , - 2774 , - 1053 , - 1012 , - 2651 , - 1938 , - 2905 , - 1520 , - 1815 , - 3790 , - 3413 , - 684 , - 3667 , - 266 , - 2577 , - 2536 , - 143 , - 3462 , - 397 , - 3044 , - 3339 , - 1282 , - 905 , - 2208 , - 1159 , - 1790 , - 69 , - 28 , - 1667 , - 954 , - 1921 , - 536 , - 831 , - 2806 , - 2429 , - 3732 , - 2683 , - 3314 , - 1593 , - 1552 , - 3191 , - 2478 , - 3445 , - 2060 , - 2355 , - 298 , - 3953 , - 1224 , - 175 , - 806 , - 3117 , - 3076 , - 683 , - 4002 , - 937 , - 3584 , - 3879 , - 1822 , - 1445 , - 2748 , - 1699 , - 2330 , - 609 , - 568 , - 2207 , - 1494 , - 2461 , - 1076 , - 1371 , - 3346 , - 2969 , - 240 , - 3223 , - 3854 , - 2133 , - 2092 , - 3731 , - 3018 , - 3985 , - 2600 , - 2895 , - 838 , - 461 , - 1764 , - 715 , - 1346 , - 3657 , - 3616 , - 1223 , - 510 , - 1477 , - 92 , - 387 , - 2362 , - 1985 , - 3288 , - 2239 , - 2870 , - 1149 , - 1108 , - 2747 , - 2034 , - 3001 , - 1616 , - 1911 , - 3886 , - 3509 , - 780 , - 3763 , - 362 , - 2673 , - 2632 , - 239 , - 3558 , - 493 , - 3140 , - 3435 , - 1378 , - 1001 , - 2304 , - 1255 , - 1886 , - 165 , - 124 , - 1763 , - 1050 , - 2017 , - 632 , - 927 , - 2902 , - 2525 , - 3828 , - 2779 , - 3410 , - 1689 , - 1648 , - 3287 , - 2574 , - 3541 , - 2156 , - 2451 , - 394 , - 17 , - 1320 , - 271 , - 902 , - 3213 , - 3172 , - 779 , - 66 , - 1033 , - 3680 , - 3975 , - 1918 , - 1541 , - 2844 , - 1795 , - 2426 , - 705 , - 664 , - 2303 , - 1590 , - 2557 , - 1172 , - 1467 , - 3442 , - 3065 , - 336 , - 3319 , - 3950 , - 2229 , - 2188 , - 3827 , - 3114 , - 49 , - 2696 , - 2991 , - 934 , - 557 , - 1860 , - 811 , - 1442 , - 3753 , - 3712 , - 1319 , - 606 , - 1573 , - 188 , - 483 , - 2458 , - 2081 , - 3384 , - 2335 , - 2966 , - 1245 , - 1204 , - 2843 , - 2130 , - 3097 , - 1712 , - 2007 , - 3982 , - 3605 , - 876 , - 3859 , - 458 , - 2769 , - 2728 , - 335 , - 3654 , - 589 , - 3236 , - 3531 , - 1474 , - 1097 , - 2400 , - 1351 , - 1982 , - 261 , - 220 , - 1859 , - 1146 , - 2113 , - 728 , - 1023 , - 2998 , - 2621 , - 3924 , - 2875 , - 3506 , - 1785 , - 1744 , - 3383 , - 2670 , - 3637 , - 2252 , - 2547 , - 490 , - 113 , - 1416 , - 367 , - 998 , - 3309 , - 3268 , - 875 , - 162 , - 1129 , - 3776 , - 39 , - 2014 , - 1637 , - 2940 , - 1891 , - 2522 , - 801 , - 760 , - 2399 , - 1686 , - 2653 , - 1268 , - 1563 , - 3538 , - 3161 , - 432 , - 3415 , - 14 , - 2325 , - 2284 , - 3923 , - 3210 , - 145 , - 2792 , - 3087 , - 1030 , - 653 , - 1956 , - 907 , - 1538 , - 3849 , - 3808 , - 1415 , - 702 , - 1669 , - 284 , - 579 , - 2554 , - 2177 , - 3480 , - 2431 , - 3062 , - 1341 , - 1300 , - 2939 , - 2226 , - 3193 , - 1808 , - 2103 , - 46 , - 3701 , - 972 , - 3955 , - 554 , - 2865 , - 2824 , - 431 , - 3750 , - 685 , - 3332 , - 3627 , - 1570 , - 1193 , - 2496 , - 1447 , - 2078 , - 357 , - 316 , - 1955 , - 1242 , - 2209 , - 824 , - 1119 , - 3094 , - 2717 , - 4020 , - 2971 , - 3602 , - 1881 , - 1840 , - 3479 , - 2766 , - 3733 , - 2348 , - 2643 , - 586 , - 209 , - 1512 , - 463 , - 1094 , - 3405 , - 3364 , - 971 , - 258 , - 1225 , - 3872 , - 135 , - 2110 , - 1733 , - 3036 , - 1987 , - 2618 , - 897 , - 856 , - 2495 , - 1782 , - 2749 , - 1364 , - 1659 , - 3634 , - 3257 , - 528 , - 3511 , - 110 , - 2421 , - 2380 , - 4019 , - 3306 , - 241 , - 2888 , - 3183 , - 1126 , - 749 , - 2052 , - 1003 , - 1634 , - 3945 , - 3904 , - 1511 , - 798 , - 1765 , - 380 , - 675 , - 2650 , - 2273 , - 3576 , - 2527 , - 3158 , - 1437 , - 1396 , - 3035 , - 2322 , - 3289 , - 1904 , - 2199 , - 142 , - 3797 , - 1068 , - 19 , - 650 , - 2961 , - 2920 , - 527 , - 3846 , - 781 , - 3428 , - 3723 , - 1666 , - 1289 , - 2592 , - 1543 , - 2174 , - 453 , - 412 , - 2051 , - 1338 , - 2305 , - 920 , - 1215 , - 3190 , - 2813 , - 84 , - 3067 , - 3698 , - 1977 , - 1936 , - 3575 , - 2862 , - 3829 , - 2444 , - 2739 , - 682 , - 305 , - 1608 , - 559 , - 1190 , - 3501 , - 3460 , - 1067 , - 354 , - 1321 , - 3968 , - 231 , - 2206 , - 1829 , - 3132 , - 2083 , - 2714 , - 993 , - 952 , - 2591 , - 1878 , - 2845 , - 1460 , - 1755 , - 3730 , - 3353 , - 624 , - 3607 , - 206 , - 2517 , - 2476 , - 83 , - 3402 , - 337 , - 2984 , - 3279 , - 1222 , - 845 , - 2148 , - 1099 , - 1730 , - 9 , - 4000 , - 1607 , - 894 , - 1861 , - 476 , - 771 , - 2746 , - 2369 , - 3672 , - 2623 , - 3254 , - 1533 , - 1492 , - 3131 , - 2418 , - 3385 , - 2000 , - 2295 , - 238 , - 3893 , - 1164 , - 115 , - 746 , - 3057 , - 3016 , - 623 , - 3942 , - 877 , - 3524 , - 3819 , - 1762 , - 1385 , - 2688 , - 1639 , - 2270 , - 549 , - 508 , - 2147 , - 1434 , - 2401 , - 1016 , - 1311 , - 3286 , - 2909 , - 180 , - 3163 , - 3794 , - 2073 , - 2032 , - 3671 , - 2958 , - 3925 , - 2540 , - 2835 , - 778 , - 401 , - 1704 , - 655 , - 1286 , - 3597 , - 3556 , - 1163 , - 450 , - 1417 , - 32 , - 327 , - 2302 , - 1925 , - 3228 , - 2179 , - 2810 , - 1089 , - 1048 , - 2687 , - 1974 , - 2941 , - 1556 , - 1851 , - 3826 , - 3449 , - 720 , - 3703 , - 302 , - 2613 , - 2572 , - 179 , - 3498 , - 433 , - 3080 , - 3375 , - 1318 , - 941 , - 2244 , - 1195 , - 1826 , - 105 , - 64 , - 1703 , - 990 , - 1957 , - 572 , - 867 , - 2842 , - 2465 , - 3768 , - 2719 , - 3350 , - 1629 , - 1588 , - 3227 , - 2514 , - 3481 , - 2096 , - 2391 , - 334 , - 3989 , - 1260 , - 211 , - 842 , - 3153 , - 3112 , - 719 , - 6 , - 973 , - 3620 , - 3915 , - 1858 , - 1481 , - 2784 , - 1735 , - 2366 , - 645 , - 604 , - 2243 , - 1530 , - 2497 , - 1112 , - 1407 , - 3382 , - 3005 , - 276 , - 3259 , - 3890 , - 2169 , - 2128 , - 3767 , - 3054 , - 4021 , - 2636 , - 2931 , - 874 , - 497 , - 1800 , - 751 , - 1382 , - 3693 , - 3652 , - 1259 , - 546 , - 1513 , - 128 , - 423 , - 2398 , - 2021 , - 3324 , - 2275 , - 2906 , - 1185 , - 1144 , - 2783 , - 2070 , - 3037 , - 1652 , - 1947 , - 3922 , - 3545 , - 816 , - 3799 , - 398 , - 2709 , - 2668 , - 275 , - 3594 , - 529 , - 3176 , - 3471 , - 1414 , - 1037 , - 2340 , - 1291 , - 1922 , - 201 , - 160 , - 1799 , - 1086 , - 2053 , - 668 , - 963 , - 2938 , - 2561 , - 3864 , - 2815 , - 3446 , - 1725 , - 1684 , - 3323 , - 2610 , - 3577 , - 2192 , - 2487 , - 430 , - 53 , - 1356 , - 307 , - 938 , - 3249 , - 3208 , - 815 , - 102 , - 1069 , - 3716 , - 4011 , - 1954 , - 1577 , - 2880 , - 1831 , - 2462 , - 741 , - 700 , - 2339 , - 1626 , - 2593 , - 1208 , - 1503 , - 3478 , - 3101 , - 372 , - 3355 , - 3986 , - 2265 , - 2224 , - 3863 , - 3150 , - 85 , - 2732 , - 3027 , - 970 , - 593 , - 1896 , - 847 , - 1478 , - 3789 , - 3748 , - 1355 , - 642 , - 1609 , - 224 , - 519 , - 2494 , - 2117 , - 3420 , - 2371 , - 3002 , - 1281 , - 1240 , - 2879 , - 2166 , - 3133 , - 1748 , - 2043 , - 4018 , - 3641 , - 912 , - 3895 , - 494 , - 2805 , - 2764 , - 371 , - 3690 , - 625 , - 3272 , - 3567 , - 1510 , - 1133 , - 2436 , - 1387 , - 2018 , - 297 , - 256 , - 1895 , - 1182 , - 2149 , - 764 , - 1059 , - 3034 , - 2657 , - 3960 , - 2911 , - 3542 , - 1821 , - 1780 , - 3419 , - 2706 , - 3673 , - 2288 , - 2583 , - 526 , - 149 , - 1452 , - 403 , - 1034 , - 3345 , - 3304 , - 911 , - 198 , - 1165 , - 3812 , - 75 , - 2050 , - 1673 , - 2976 , - 1927 , - 2558 , - 837 , - 796 , - 2435 , - 1722 , - 2689 , - 1304 , - 1599 , - 3574 , - 3197 , - 468 , - 3451 , - 50 , - 2361 , - 2320 , - 3959 , - 3246 , - 181 , - 2828 , - 3123 , - 1066 , - 689 , - 1992 , - 943 , - 1574 , - 3885 , - 3844 , - 1451 , - 738 , - 1705 , - 320 , - 615 , - 2590 , - 2213 , - 3516 , - 2467 , - 3098 , - 1377 , - 1336 , - 2975 , - 2262 , - 3229 , - 1844 , - 2139 , - 82 , - 3737 , - 1008 , - 3991 , - 590 , - 2901 , - 2860 , - 467 , - 3786 , - 721 , - 3368 , - 3663 , - 1606 , - 1229 , - 2532 , - 1483 , - 2114 , - 393 , - 352 , - 1991 , - 1278 , - 2245 , - 860 , - 1155 , - 3130 , - 2753 , - 24 , - 3007 , - 3638 , - 1917 , - 1876 , - 3515 , - 2802 , - 3769 , - 2384 , - 2679 , - 622 , - 245 , - 1548 , - 499 , - 1130 , - 3441 , - 3400 , - 1007 , - 294 , - 1261 , - 3908 , - 171 , - 2146 , - 1769 , - 3072 , - 2023 , - 2654 , - 933 , - 892 , - 2531 , - 1818 , - 2785 , - 1400 , - 1695 , - 3670 , - 3293 , - 564 , - 3547 , - 146 , - 2457 , - 2416 , - 23 , - 3342 , - 277 , - 2924 , - 3219 , - 1162 , - 785 , - 2088 , - 1039 , - 1670 , - 3981 , - 3940 , - 1547 , - 834 , - 1801 , - 416 , - 711 , - 2686 , - 2309 , - 3612 , - 2563 , - 3194 , - 1473 , - 1432 , - 3071 , - 2358 , - 3325 , - 1940 , - 2235 , - 178 , - 3833 , - 1104 , - 55 , - 686 , - 2997 , - 2956 , - 563 , - 3882 , - 817 , - 3464 , - 3759 , - 1702 , - 1325 , - 2628 , - 1579 , - 2210 , - 489 , - 448 , - 2087 , - 1374 , - 2341 , - 956 , - 1251 , - 3226 , - 2849 , - 120 , - 3103 , - 3734 , - 2013 , - 1972 , - 3611 , - 2898 , - 3865 , - 2480 , - 2775 , - 718 , - 341 , - 1644 , - 595 , - 1226 , - 3537 , - 3496 , - 1103 , - 390 , - 1357 , - 4004 , - 267 , - 2242 , - 1865 , - 3168 , - 2119 , - 2750 , - 1029 , - 988 , - 2627 , - 1914 , - 2881 , - 1496 , - 1791 , - 3766 , - 3389 , - 660 , - 3643 , - 242 , - 2553 , - 2512 , - 119 , - 3438 , - 373 , - 3020 , - 3315 , - 1258 , - 881 , - 2184 , - 1135 , - 1766 , - 45 , - 4 , - 1643 , - 930 , - 1897 , - 512 , - 807 , - 2782 , - 2405 , - 3708 , - 2659 , - 3290 , - 1569 , - 1528 , - 3167 , - 2454 , - 3421 , - 2036 , - 2331 , - 274 , - 3929 , - 1200 , - 151 , - 782 , - 3093 , - 3052 , - 659 , - 3978 , - 913 , - 3560 , - 3855 , - 1798 , - 1421 , - 2724 , - 1675 , - 2306 , - 585 , - 544 , - 2183 , - 1470 , - 2437 , - 1052 , - 1347 , - 3322 , - 2945 , - 216 , - 3199 , - 3830 , - 2109 , - 2068 , - 3707 , - 2994 , - 3961 , - 2576 , - 2871 , - 814 , - 437 , - 1740 , - 691 , - 1322 , - 3633 , - 3592 , - 1199 , - 486 , - 1453 , - 68 , - 363 , - 2338 , - 1961 , - 3264 , - 2215 , - 2846 , - 1125 , - 1084 , - 2723 , - 2010 , - 2977 , - 1592 , - 1887 , - 3862 , - 3485 , - 756 , - 3739 , - 338 , - 2649 , - 2608 , - 215 , - 3534 , - 469 , - 3116 , - 3411 , - 1354 , - 977 , - 2280 , - 1231 , - 1862 , - 141 , - 100 , - 1739 , - 1026 , - 1993 , - 608 , - 903 , - 2878 , - 2501 , - 3804 , - 2755 , - 3386 , - 1665 , - 1624 , - 3263 , - 2550 , - 3517 , - 2132 , - 2427 , - 370 , - 4025 , - 1296 , - 247 , - 878 , - 3189 , - 3148 , - 755 , - 42 , - 1009 , - 3656 , - 3951 , - 1894 , - 1517 , - 2820 , - 1771 , - 2402 , - 681 , - 640 , - 2279 , - 1566 , - 2533 , - 1148 , - 1443 , - 3418 , - 3041 , - 312 , - 3295 , - 3926 , - 2205 , - 2164 , - 3803 , - 3090 , - 25 , - 2672 , - 2967 , - 910 , - 533 , - 1836 , - 787 , - 1418 , - 3729 , - 3688 , - 1295 , - 582 , - 1549 , - 164 , - 459 , - 2434 , - 2057 , - 3360 , - 2311 , - 2942 , - 1221 , - 1180 , - 2819 , - 2106 , - 3073 , - 1688 , - 1983 , - 3958 , - 3581 , - 852 , - 3835 , - 434 , - 2745 , - 2704 , - 311 , - 3630 , - 565 , - 3212 , - 3507 , - 1450 , - 1073 , - 2376 , - 1327 , - 1958 , - 237 , - 196 , - 1835 , - 1122 , - 2089 , - 704 , - 999 , - 2974 , - 2597 , - 3900 , - 2851 , - 3482 , - 1761 , - 1720 , - 3359 , - 2646 , - 3613 , - 2228 , - 2523 , - 466 , - 89 , - 1392 , - 343 , - 974 , - 3285 , - 3244 , - 851 , - 138 , - 1105 , - 3752 , - 15 , - 1990 , - 1613 , - 2916 , - 1867 , - 2498 , - 777 , - 736 , - 2375 , - 1662 , - 2629 , - 1244 , - 1539 , - 3514 , - 3137 , - 408 , - 3391 , - 4022 , - 2301 , - 2260 , - 3899 , - 3186 , - 121 , - 2768 , - 3063 , - 1006 , - 629 , - 1932 , - 883 , - 1514 , - 3825 , - 3784 , - 1391 , - 678 , - 1645 , - 260 , - 555 , - 2530 , - 2153 , - 3456 , - 2407 , - 3038 , - 1317 , - 1276 , - 2915 , - 2202 , - 3169 , - 1784 , - 2079 , - 22 , - 3677 , - 948 , - 3931 , - 530 , - 2841 , - 2800 , - 407 , - 3726 , - 661 , - 3308 , - 3603 , - 1546 , - 1169 , - 2472 , - 1423 , - 2054 , - 333 , - 292 , - 1931 , - 1218 , - 2185 , - 800 , - 1095 , - 3070 , - 2693 , - 3996 , - 2947 , - 3578 , - 1857 , - 1816 , - 3455 , - 2742 , - 3709 , - 2324 , - 2619 , - 562 , - 185 , - 1488 , - 439 , - 1070 , - 3381 , - 3340 , - 947 , - 234 , - 1201 , - 3848 , - 111 , - 2086 , - 1709 , - 3012 , - 1963 , - 2594 , - 873 , - 832 , - 2471 , - 1758 , - 2725 , - 1340 , - 1635 , - 3610 , - 3233 , - 504 , - 3487 , - 86 , - 2397 , - 2356 , - 3995 , - 3282 , - 217 , - 2864 , - 3159 , - 1102 , - 725 , - 2028 , - 979 , - 1610 , - 3921 , - 3880 , - 1487 , - 774 , - 1741 , - 356 , - 651 , - 2626 , - 2249 , - 3552 , - 2503 , - 3134 , - 1413 , - 1372 , - 3011 , - 2298 , - 3265 , - 1880 , - 2175 , - 118 , - 3773 , - 1044 , - 4027 , - 626 , - 2937 , - 2896 , - 503 , - 3822 , - 757 , - 3404 , - 3699 , - 1642 , - 1265 , - 2568 , - 1519 , - 2150 , - 429 , - 388 , - 2027 , - 1314 , - 2281 , - 896 , - 1191 , - 3166 , - 2789 , - 60 , - 3043 , - 3674 , - 1953 , - 1912 , - 3551 , - 2838 , - 3805 , - 2420 , - 2715 , - 658 , - 281 , - 1584 , - 535 , - 1166 , - 3477 , - 3436 , - 1043 , - 330 , - 1297 , - 3944 , - 207 , - 2182 , - 1805 , - 3108 , - 2059 , - 2690 , - 969 , - 928 , - 2567 , - 1854 , - 2821 , - 1436 , - 1731 , - 3706 , - 3329 , - 600 , - 3583 , - 182 , - 2493 , - 2452 , - 59 , - 3378 , - 313 , - 2960 , - 3255 , - 1198 , - 821 , - 2124 , - 1075 , - 1706 , - 4017 , - 3976 , - 1583 , - 870 , - 1837 , - 452 , - 747 , - 2722 , - 2345 , - 3648 , - 2599 , - 3230 , - 1509 , - 1468 , - 3107 , - 2394 , - 3361 , - 1976 , - 2271 , - 214 , - 3869 , - 1140 , - 91 , - 722 , - 3033 , - 2992 , - 599 , - 3918 , - 853 , - 3500 , - 3795 , - 1738 , - 1361 , - 2664 , - 1615 , - 2246 , - 525 , - 484 , - 2123 , - 1410 , - 2377 , - 992 , - 1287 , - 3262 , - 2885 , - 156 , - 3139 , - 3770 , - 2049 , - 2008 , - 3647 , - 2934 , - 3901 , - 2516 , - 2811 , - 754 , - 377 , - 1680 , - 631 , - 1262 , - 3573 , - 3532 , - 1139 , - 426 , - 1393 , - 8 , - 303 , - 2278 , - 1901 , - 3204 , - 2155 , - 2786 , - 1065 , - 1024 , - 2663 , - 1950 , - 2917 , - 1532 , - 1827 , - 3802 , - 3425 , - 696 , - 3679 , - 278 , - 2589 , - 2548 , - 155 , - 3474 , - 409 , - 3056 , - 3351 , - 1294 , - 917 , - 2220 , - 1171 , - 1802 , - 81 , - 40 , - 1679 , - 966 , - 1933 , - 548 , - 843 , - 2818 , - 2441 , - 3744 , - 2695 , - 3326 , - 1605 , - 1564 , - 3203 , - 2490 , - 3457 , - 2072 , - 2367 , - 310 , - 3965 , - 1236 , - 187 , - 818 , - 3129 , - 3088 , - 695 , - 4014 , - 949 , - 3596 , - 3891 , - 1834 , - 1457 , - 2760 , - 1711 , - 2342 , - 621 , - 580 , - 2219 , - 1506 , - 2473 , - 1088 , - 1383 , - 3358 , - 2981 , - 252 , - 3235 , - 3866 , - 2145 , - 2104 , - 3743 , - 3030 , - 3997 , - 2612 , - 2907 , - 850 , - 473 , - 1776 , - 727 , - 1358 , - 3669 , - 3628 , - 1235 , - 522 , - 1489 , - 104 , - 399 , - 2374 , - 1997 , - 3300 , - 2251 , - 2882 , - 1161 , - 1120 , - 2759 , - 2046 , - 3013 , - 1628 , - 1923 , - 3898 , - 3521 , - 792 , - 3775 , - 374 , - 2685 , - 2644 , - 251 , - 3570 , - 505 , - 3152 , - 3447 , - 1390 , - 1013 , - 2316 , - 1267 , - 1898 , - 177 , - 136 , - 1775 , - 1062 , - 2029 , - 644 , - 939 , - 2914 , - 2537 , - 3840 , - 2791 , - 3422 , - 1701 , - 1660 , - 3299 , - 2586 , - 3553 , - 2168 , - 2463 , - 406 , - 29 , - 1332 , - 283 , - 914 , - 3225 , - 3184 , - 791 , - 78 , - 1045 , - 3692 , - 3987 , - 1930 , - 1553 , - 2856 , - 1807 , - 2438 , - 717 , - 676 , - 2315 , - 1602 , - 2569 , - 1184 , - 1479 , - 3454 , - 3077 , - 348 , - 3331 , - 3962 , - 2241 , - 2200 , - 3839 , - 3126 , - 61 , - 2708 , - 3003 , - 946 , - 569 , - 1872 , - 823 , - 1454 , - 3765 , - 3724 , - 1331 , - 618 , - 1585 , - 200 , - 495 , - 2470 , - 2093 , - 3396 , - 2347 , - 2978 , - 1257 , - 1216 , - 2855 , - 2142 , - 3109 , - 1724 , - 2019 , - 3994 , - 3617 , - 888 , - 3871 , - 470 , - 2781 , - 2740 , - 347 , - 3666 , - 601 , - 3248 , - 3543 , - 1486 , - 1109 , - 2412 , - 1363 , - 1994 , - 273 , - 232 , - 1871 , - 1158 , - 2125 , - 740 , - 1035 , - 3010 , - 2633 , - 3936 , - 2887 , - 3518 , - 1797 , - 1756 , - 3395 , - 2682 , - 3649 , - 2264 , - 2559 , - 502 , - 125 , - 1428 , - 379 , - 1010 , - 3321 , - 3280 , - 887 , - 174 , - 1141 , - 3788 , - 51 , - 2026 , - 1649 , - 2952 , - 1903 , - 2534 , - 813 , - 772 , - 2411 , - 1698 , - 2665 , - 1280 , - 1575 , - 3550 , - 3173 , - 444 , - 3427 , - 26 , - 2337 , - 2296 , - 3935 , - 3222 , - 157 , - 2804 , - 3099 , - 1042 , - 665 , - 1968 , - 919 , - 1550 , - 3861 , - 3820 , - 1427 , - 714 , - 1681 , - 296 , - 591 , - 2566 , - 2189 , - 3492 , - 2443 , - 3074 , - 1353 , - 1312 , - 2951 , - 2238 , - 3205 , - 1820 , - 2115 , - 58 , - 3713 , - 984 , - 3967 , - 566 , - 2877 , - 2836 , - 443 , - 3762 , - 697 , - 3344 , - 3639 , - 1582 , - 1205 , - 2508 , - 1459 , - 2090 , - 369 , - 328 , - 1967 , - 1254 , - 2221 , - 836 , - 1131 , - 3106 , - 2729 , - 0 , - 1055 , - 2238 , - 3549 , - 892 , - 2459 , - 58 , - 1881 , - 3832 , - 1815 , - 4022 , - 2261 , - 628 , - 3219 , - 1842 , - 593 , - 3568 , - 2575 , - 1710 , - 973 , - 364 , - 3979 , - 3626 , - 3401 , - 3304 , - 3335 , - 3494 , - 3781 , - 100 , - 643 , - 1314 , - 2113 , - 3040 , - 4095 , - 1182 , - 2493 , - 3932 , - 1403 , - 3098 , - 825 , - 2776 , - 759 , - 2966 , - 1205 , - 3668 , - 2163 , - 786 , - 3633 , - 2512 , - 1519 , - 654 , - 4013 , - 3404 , - 2923 , - 2570 , - 2345 , - 2248 , - 2279 , - 2438 , - 2725 , - 3140 , - 3683 , - 258 , - 1057 , - 1984 , - 3039 , - 126 , - 1437 , - 2876 , - 347 , - 2042 , - 3865 , - 1720 , - 3799 , - 1910 , - 149 , - 2612 , - 1107 , - 3826 , - 2577 , - 1456 , - 463 , - 3694 , - 2957 , - 2348 , - 1867 , - 1514 , - 1289 , - 1192 , - 1223 , - 1382 , - 1669 , - 2084 , - 2627 , - 3298 , - 1 , - 928 , - 1983 , - 3166 , - 381 , - 1820 , - 3387 , - 986 , - 2809 , - 664 , - 2743 , - 854 , - 3189 , - 1556 , - 51 , - 2770 , - 1521 , - 400 , - 3503 , - 2638 , - 1901 , - 1292 , - 811 , - 458 , - 233 , - 136 , - 167 , - 326 , - 613 , - 1028 , - 1571 , - 2242 , - 3041 , - 3968 , - 927 , - 2110 , - 3421 , - 764 , - 2331 , - 4026 , - 1753 , - 3704 , - 1687 , - 3894 , - 2133 , - 500 , - 3091 , - 1714 , - 465 , - 3440 , - 2447 , - 1582 , - 845 , - 236 , - 3851 , - 3498 , - 3273 , - 3176 , - 3207 , - 3366 , - 3653 , - 4068 , - 515 , - 1186 , - 1985 , - 2912 , - 3967 , - 1054 , - 2365 , - 3804 , - 1275 , - 2970 , - 697 , - 2648 , - 631 , - 2838 , - 1077 , - 3540 , - 2035 , - 658 , - 3505 , - 2384 , - 1391 , - 526 , - 3885 , - 3276 , - 2795 , - 2442 , - 2217 , - 2120 , - 2151 , - 2310 , - 2597 , - 3012 , - 3555 , - 130 , - 929 , - 1856 , - 2911 , - 4094 , - 1309 , - 2748 , - 219 , - 1914 , - 3737 , - 1592 , - 3671 , - 1782 , - 21 , - 2484 , - 979 , - 3698 , - 2449 , - 1328 , - 335 , - 3566 , - 2829 , - 2220 , - 1739 , - 1386 , - 1161 , - 1064 , - 1095 , - 1254 , - 1541 , - 1956 , - 2499 , - 3170 , - 3969 , - 800 , - 1855 , - 3038 , - 253 , - 1692 , - 3259 , - 858 , - 2681 , - 536 , - 2615 , - 726 , - 3061 , - 1428 , - 4019 , - 2642 , - 1393 , - 272 , - 3375 , - 2510 , - 1773 , - 1164 , - 683 , - 330 , - 105 , - 8 , - 39 , - 198 , - 485 , - 900 , - 1443 , - 2114 , - 2913 , - 3840 , - 799 , - 1982 , - 3293 , - 636 , - 2203 , - 3898 , - 1625 , - 3576 , - 1559 , - 3766 , - 2005 , - 372 , - 2963 , - 1586 , - 337 , - 3312 , - 2319 , - 1454 , - 717 , - 108 , - 3723 , - 3370 , - 3145 , - 3048 , - 3079 , - 3238 , - 3525 , - 3940 , - 387 , - 1058 , - 1857 , - 2784 , - 3839 , - 926 , - 2237 , - 3676 , - 1147 , - 2842 , - 569 , - 2520 , - 503 , - 2710 , - 949 , - 3412 , - 1907 , - 530 , - 3377 , - 2256 , - 1263 , - 398 , - 3757 , - 3148 , - 2667 , - 2314 , - 2089 , - 1992 , - 2023 , - 2182 , - 2469 , - 2884 , - 3427 , - 2 , - 801 , - 1728 , - 2783 , - 3966 , - 1181 , - 2620 , - 91 , - 1786 , - 3609 , - 1464 , - 3543 , - 1654 , - 3989 , - 2356 , - 851 , - 3570 , - 2321 , - 1200 , - 207 , - 3438 , - 2701 , - 2092 , - 1611 , - 1258 , - 1033 , - 936 , - 967 , - 1126 , - 1413 , - 1828 , - 2371 , - 3042 , - 3841 , - 672 , - 1727 , - 2910 , - 125 , - 1564 , - 3131 , - 730 , - 2553 , - 408 , - 2487 , - 598 , - 2933 , - 1300 , - 3891 , - 2514 , - 1265 , - 144 , - 3247 , - 2382 , - 1645 , - 1036 , - 555 , - 202 , - 4073 , - 3976 , - 4007 , - 70 , - 357 , - 772 , - 1315 , - 1986 , - 2785 , - 3712 , - 671 , - 1854 , - 3165 , - 508 , - 2075 , - 3770 , - 1497 , - 3448 , - 1431 , - 3638 , - 1877 , - 244 , - 2835 , - 1458 , - 209 , - 3184 , - 2191 , - 1326 , - 589 , - 4076 , - 3595 , - 3242 , - 3017 , - 2920 , - 2951 , - 3110 , - 3397 , - 3812 , - 259 , - 930 , - 1729 , - 2656 , - 3711 , - 798 , - 2109 , - 3548 , - 1019 , - 2714 , - 441 , - 2392 , - 375 , - 2582 , - 821 , - 3284 , - 1779 , - 402 , - 3249 , - 2128 , - 1135 , - 270 , - 3629 , - 3020 , - 2539 , - 2186 , - 1961 , - 1864 , - 1895 , - 2054 , - 2341 , - 2756 , - 3299 , - 3970 , - 673 , - 1600 , - 2655 , - 3838 , - 1053 , - 2492 , - 4059 , - 1658 , - 3481 , - 1336 , - 3415 , - 1526 , - 3861 , - 2228 , - 723 , - 3442 , - 2193 , - 1072 , - 79 , - 3310 , - 2573 , - 1964 , - 1483 , - 1130 , - 905 , - 808 , - 839 , - 998 , - 1285 , - 1700 , - 2243 , - 2914 , - 3713 , - 544 , - 1599 , - 2782 , - 4093 , - 1436 , - 3003 , - 602 , - 2425 , - 280 , - 2359 , - 470 , - 2805 , - 1172 , - 3763 , - 2386 , - 1137 , - 16 , - 3119 , - 2254 , - 1517 , - 908 , - 427 , - 74 , - 3945 , - 3848 , - 3879 , - 4038 , - 229 , - 644 , - 1187 , - 1858 , - 2657 , - 3584 , - 543 , - 1726 , - 3037 , - 380 , - 1947 , - 3642 , - 1369 , - 3320 , - 1303 , - 3510 , - 1749 , - 116 , - 2707 , - 1330 , - 81 , - 3056 , - 2063 , - 1198 , - 461 , - 3948 , - 3467 , - 3114 , - 2889 , - 2792 , - 2823 , - 2982 , - 3269 , - 3684 , - 131 , - 802 , - 1601 , - 2528 , - 3583 , - 670 , - 1981 , - 3420 , - 891 , - 2586 , - 313 , - 2264 , - 247 , - 2454 , - 693 , - 3156 , - 1651 , - 274 , - 3121 , - 2000 , - 1007 , - 142 , - 3501 , - 2892 , - 2411 , - 2058 , - 1833 , - 1736 , - 1767 , - 1926 , - 2213 , - 2628 , - 3171 , - 3842 , - 545 , - 1472 , - 2527 , - 3710 , - 925 , - 2364 , - 3931 , - 1530 , - 3353 , - 1208 , - 3287 , - 1398 , - 3733 , - 2100 , - 595 , - 3314 , - 2065 , - 944 , - 4047 , - 3182 , - 2445 , - 1836 , - 1355 , - 1002 , - 777 , - 680 , - 711 , - 870 , - 1157 , - 1572 , - 2115 , - 2786 , - 3585 , - 416 , - 1471 , - 2654 , - 3965 , - 1308 , - 2875 , - 474 , - 2297 , - 152 , - 2231 , - 342 , - 2677 , - 1044 , - 3635 , - 2258 , - 1009 , - 3984 , - 2991 , - 2126 , - 1389 , - 780 , - 299 , - 4042 , - 3817 , - 3720 , - 3751 , - 3910 , - 101 , - 516 , - 1059 , - 1730 , - 2529 , - 3456 , - 415 , - 1598 , - 2909 , - 252 , - 1819 , - 3514 , - 1241 , - 3192 , - 1175 , - 3382 , - 1621 , - 4084 , - 2579 , - 1202 , - 4049 , - 2928 , - 1935 , - 1070 , - 333 , - 3820 , - 3339 , - 2986 , - 2761 , - 2664 , - 2695 , - 2854 , - 3141 , - 3556 , - 3 , - 674 , - 1473 , - 2400 , - 3455 , - 542 , - 1853 , - 3292 , - 763 , - 2458 , - 185 , - 2136 , - 119 , - 2326 , - 565 , - 3028 , - 1523 , - 146 , - 2993 , - 1872 , - 879 , - 14 , - 3373 , - 2764 , - 2283 , - 1930 , - 1705 , - 1608 , - 1639 , - 1798 , - 2085 , - 2500 , - 3043 , - 3714 , - 417 , - 1344 , - 2399 , - 3582 , - 797 , - 2236 , - 3803 , - 1402 , - 3225 , - 1080 , - 3159 , - 1270 , - 3605 , - 1972 , - 467 , - 3186 , - 1937 , - 816 , - 3919 , - 3054 , - 2317 , - 1708 , - 1227 , - 874 , - 649 , - 552 , - 583 , - 742 , - 1029 , - 1444 , - 1987 , - 2658 , - 3457 , - 288 , - 1343 , - 2526 , - 3837 , - 1180 , - 2747 , - 346 , - 2169 , - 24 , - 2103 , - 214 , - 2549 , - 916 , - 3507 , - 2130 , - 881 , - 3856 , - 2863 , - 1998 , - 1261 , - 652 , - 171 , - 3914 , - 3689 , - 3592 , - 3623 , - 3782 , - 4069 , - 388 , - 931 , - 1602 , - 2401 , - 3328 , - 287 , - 1470 , - 2781 , - 124 , - 1691 , - 3386 , - 1113 , - 3064 , - 1047 , - 3254 , - 1493 , - 3956 , - 2451 , - 1074 , - 3921 , - 2800 , - 1807 , - 942 , - 205 , - 3692 , - 3211 , - 2858 , - 2633 , - 2536 , - 2567 , - 2726 , - 3013 , - 3428 , - 3971 , - 546 , - 1345 , - 2272 , - 3327 , - 414 , - 1725 , - 3164 , - 635 , - 2330 , - 57 , - 2008 , - 4087 , - 2198 , - 437 , - 2900 , - 1395 , - 18 , - 2865 , - 1744 , - 751 , - 3982 , - 3245 , - 2636 , - 2155 , - 1802 , - 1577 , - 1480 , - 1511 , - 1670 , - 1957 , - 2372 , - 2915 , - 3586 , - 289 , - 1216 , - 2271 , - 3454 , - 669 , - 2108 , - 3675 , - 1274 , - 3097 , - 952 , - 3031 , - 1142 , - 3477 , - 1844 , - 339 , - 3058 , - 1809 , - 688 , - 3791 , - 2926 , - 2189 , - 1580 , - 1099 , - 746 , - 521 , - 424 , - 455 , - 614 , - 901 , - 1316 , - 1859 , - 2530 , - 3329 , - 160 , - 1215 , - 2398 , - 3709 , - 1052 , - 2619 , - 218 , - 2041 , - 3992 , - 1975 , - 86 , - 2421 , - 788 , - 3379 , - 2002 , - 753 , - 3728 , - 2735 , - 1870 , - 1133 , - 524 , - 43 , - 3786 , - 3561 , - 3464 , - 3495 , - 3654 , - 3941 , - 260 , - 803 , - 1474 , - 2273 , - 3200 , - 159 , - 1342 , - 2653 , - 4092 , - 1563 , - 3258 , - 985 , - 2936 , - 919 , - 3126 , - 1365 , - 3828 , - 2323 , - 946 , - 3793 , - 2672 , - 1679 , - 814 , - 77 , - 3564 , - 3083 , - 2730 , - 2505 , - 2408 , - 2439 , - 2598 , - 2885 , - 3300 , - 3843 , - 418 , - 1217 , - 2144 , - 3199 , - 286 , - 1597 , - 3036 , - 507 , - 2202 , - 4025 , - 1880 , - 3959 , - 2070 , - 309 , - 2772 , - 1267 , - 3986 , - 2737 , - 1616 , - 623 , - 3854 , - 3117 , - 2508 , - 2027 , - 1674 , - 1449 , - 1352 , - 1383 , - 1542 , - 1829 , - 2244 , - 2787 , - 3458 , - 161 , - 1088 , - 2143 , - 3326 , - 541 , - 1980 , - 3547 , - 1146 , - 2969 , - 824 , - 2903 , - 1014 , - 3349 , - 1716 , - 211 , - 2930 , - 1681 , - 560 , - 3663 , - 2798 , - 2061 , - 1452 , - 971 , - 618 , - 393 , - 296 , - 327 , - 486 , - 773 , - 1188 , - 1731 , - 2402 , - 3201 , - 32 , - 1087 , - 2270 , - 3581 , - 924 , - 2491 , - 90 , - 1913 , - 3864 , - 1847 , - 4054 , - 2293 , - 660 , - 3251 , - 1874 , - 625 , - 3600 , - 2607 , - 1742 , - 1005 , - 396 , - 4011 , - 3658 , - 3433 , - 3336 , - 3367 , - 3526 , - 3813 , - 132 , - 675 , - 1346 , - 2145 , - 3072 , - 31 , - 1214 , - 2525 , - 3964 , - 1435 , - 3130 , - 857 , - 2808 , - 791 , - 2998 , - 1237 , - 3700 , - 2195 , - 818 , - 3665 , - 2544 , - 1551 , - 686 , - 4045 , - 3436 , - 2955 , - 2602 , - 2377 , - 2280 , - 2311 , - 2470 , - 2757 , - 3172 , - 3715 , - 290 , - 1089 , - 2016 , - 3071 , - 158 , - 1469 , - 2908 , - 379 , - 2074 , - 3897 , - 1752 , - 3831 , - 1942 , - 181 , - 2644 , - 1139 , - 3858 , - 2609 , - 1488 , - 495 , - 3726 , - 2989 , - 2380 , - 1899 , - 1546 , - 1321 , - 1224 , - 1255 , - 1414 , - 1701 , - 2116 , - 2659 , - 3330 , - 33 , - 960 , - 2015 , - 3198 , - 413 , - 1852 , - 3419 , - 1018 , - 2841 , - 696 , - 2775 , - 886 , - 3221 , - 1588 , - 83 , - 2802 , - 1553 , - 432 , - 3535 , - 2670 , - 1933 , - 1324 , - 843 , - 490 , - 265 , - 168 , - 199 , - 358 , - 645 , - 1060 , - 1603 , - 2274 , - 3073 , - 4000 , - 959 , - 2142 , - 3453 , - 796 , - 2363 , - 4058 , - 1785 , - 3736 , - 1719 , - 3926 , - 2165 , - 532 , - 3123 , - 1746 , - 497 , - 3472 , - 2479 , - 1614 , - 877 , - 268 , - 3883 , - 3530 , - 3305 , - 3208 , - 3239 , - 3398 , - 3685 , - 4 , - 547 , - 1218 , - 2017 , - 2944 , - 3999 , - 1086 , - 2397 , - 3836 , - 1307 , - 3002 , - 729 , - 2680 , - 663 , - 2870 , - 1109 , - 3572 , - 2067 , - 690 , - 3537 , - 2416 , - 1423 , - 558 , - 3917 , - 3308 , - 2827 , - 2474 , - 2249 , - 2152 , - 2183 , - 2342 , - 2629 , - 3044 , - 3587 , - 162 , - 961 , - 1888 , - 2943 , - 30 , - 1341 , - 2780 , - 251 , - 1946 , - 3769 , - 1624 , - 3703 , - 1814 , - 53 , - 2516 , - 1011 , - 3730 , - 2481 , - 1360 , - 367 , - 3598 , - 2861 , - 2252 , - 1771 , - 1418 , - 1193 , - 1096 , - 1127 , - 1286 , - 1573 , - 1988 , - 2531 , - 3202 , - 4001 , - 832 , - 1887 , - 3070 , - 285 , - 1724 , - 3291 , - 890 , - 2713 , - 568 , - 2647 , - 758 , - 3093 , - 1460 , - 4051 , - 2674 , - 1425 , - 304 , - 3407 , - 2542 , - 1805 , - 1196 , - 715 , - 362 , - 137 , - 40 , - 71 , - 230 , - 517 , - 932 , - 1475 , - 2146 , - 2945 , - 3872 , - 831 , - 2014 , - 3325 , - 668 , - 2235 , - 3930 , - 1657 , - 3608 , - 1591 , - 3798 , - 2037 , - 404 , - 2995 , - 1618 , - 369 , - 3344 , - 2351 , - 1486 , - 749 , - 140 , - 3755 , - 3402 , - 3177 , - 3080 , - 3111 , - 3270 , - 3557 , - 3972 , - 419 , - 1090 , - 1889 , - 2816 , - 3871 , - 958 , - 2269 , - 3708 , - 1179 , - 2874 , - 601 , - 2552 , - 535 , - 2742 , - 981 , - 3444 , - 1939 , - 562 , - 3409 , - 2288 , - 1295 , - 430 , - 3789 , - 3180 , - 2699 , - 2346 , - 2121 , - 2024 , - 2055 , - 2214 , - 2501 , - 2916 , - 3459 , - 34 , - 833 , - 1760 , - 2815 , - 3998 , - 1213 , - 2652 , - 123 , - 1818 , - 3641 , - 1496 , - 3575 , - 1686 , - 4021 , - 2388 , - 883 , - 3602 , - 2353 , - 1232 , - 239 , - 3470 , - 2733 , - 2124 , - 1643 , - 1290 , - 1065 , - 968 , - 999 , - 1158 , - 1445 , - 1860 , - 2403 , - 3074 , - 3873 , - 704 , - 1759 , - 2942 , - 157 , - 1596 , - 3163 , - 762 , - 2585 , - 440 , - 2519 , - 630 , - 2965 , - 1332 , - 3923 , - 2546 , - 1297 , - 176 , - 3279 , - 2414 , - 1677 , - 1068 , - 587 , - 234 , - 9 , - 4008 , - 4039 , - 102 , - 389 , - 804 , - 1347 , - 2018 , - 2817 , - 3744 , - 703 , - 1886 , - 3197 , - 540 , - 2107 , - 3802 , - 1529 , - 3480 , - 1463 , - 3670 , - 1909 , - 276 , - 2867 , - 1490 , - 241 , - 3216 , - 2223 , - 1358 , - 621 , - 12 , - 3627 , - 3274 , - 3049 , - 2952 , - 2983 , - 3142 , - 3429 , - 3844 , - 291 , - 962 , - 1761 , - 2688 , - 3743 , - 830 , - 2141 , - 3580 , - 1051 , - 2746 , - 473 , - 2424 , - 407 , - 2614 , - 853 , - 3316 , - 1811 , - 434 , - 3281 , - 2160 , - 1167 , - 302 , - 3661 , - 3052 , - 2571 , - 2218 , - 1993 , - 1896 , - 1927 , - 2086 , - 2373 , - 2788 , - 3331 , - 4002 , - 705 , - 1632 , - 2687 , - 3870 , - 1085 , - 2524 , - 4091 , - 1690 , - 3513 , - 1368 , - 3447 , - 1558 , - 3893 , - 2260 , - 755 , - 3474 , - 2225 , - 1104 , - 111 , - 3342 , - 2605 , - 1996 , - 1515 , - 1162 , - 937 , - 840 , - 871 , - 1030 , - 1317 , - 1732 , - 2275 , - 2946 , - 3745 , - 576 , - 1631 , - 2814 , - 29 , - 1468 , - 3035 , - 634 , - 2457 , - 312 , - 2391 , - 502 , - 2837 , - 1204 , - 3795 , - 2418 , - 1169 , - 48 , - 3151 , - 2286 , - 1549 , - 940 , - 459 , - 106 , - 3977 , - 3880 , - 3911 , - 4070 , - 261 , - 676 , - 1219 , - 1890 , - 2689 , - 3616 , - 575 , - 1758 , - 3069 , - 412 , - 1979 , - 3674 , - 1401 , - 3352 , - 1335 , - 3542 , - 1781 , - 148 , - 2739 , - 1362 , - 113 , - 3088 , - 2095 , - 1230 , - 493 , - 3980 , - 3499 , - 3146 , - 2921 , - 2824 , - 2855 , - 3014 , - 3301 , - 3716 , - 163 , - 834 , - 1633 , - 2560 , - 3615 , - 702 , - 2013 , - 3452 , - 923 , - 2618 , - 345 , - 2296 , - 279 , - 2486 , - 725 , - 3188 , - 1683 , - 306 , - 3153 , - 2032 , - 1039 , - 174 , - 3533 , - 2924 , - 2443 , - 2090 , - 1865 , - 1768 , - 1799 , - 1958 , - 2245 , - 2660 , - 3203 , - 3874 , - 577 , - 1504 , - 2559 , - 3742 , - 957 , - 2396 , - 3963 , - 1562 , - 3385 , - 1240 , - 3319 , - 1430 , - 3765 , - 2132 , - 627 , - 3346 , - 2097 , - 976 , - 4079 , - 3214 , - 2477 , - 1868 , - 1387 , - 1034 , - 809 , - 712 , - 743 , - 902 , - 1189 , - 1604 , - 2147 , - 2818 , - 3617 , - 448 , - 1503 , - 2686 , - 3997 , - 1340 , - 2907 , - 506 , - 2329 , - 184 , - 2263 , - 374 , - 2709 , - 1076 , - 3667 , - 2290 , - 1041 , - 4016 , - 3023 , - 2158 , - 1421 , - 812 , - 331 , - 4074 , - 3849 , - 3752 , - 3783 , - 3942 , - 133 , - 548 , - 1091 , - 1762 , - 2561 , - 3488 , - 447 , - 1630 , - 2941 , - 284 , - 1851 , - 3546 , - 1273 , - 3224 , - 1207 , - 3414 , - 1653 , - 20 , - 2611 , - 1234 , - 4081 , - 2960 , - 1967 , - 1102 , - 365 , - 3852 , - 3371 , - 3018 , - 2793 , - 2696 , - 2727 , - 2886 , - 3173 , - 3588 , - 35 , - 706 , - 1505 , - 2432 , - 3487 , - 574 , - 1885 , - 3324 , - 795 , - 2490 , - 217 , - 2168 , - 151 , - 2358 , - 597 , - 3060 , - 1555 , - 178 , - 3025 , - 1904 , - 911 , - 46 , - 3405 , - 2796 , - 2315 , - 1962 , - 1737 , - 1640 , - 1671 , - 1830 , - 2117 , - 2532 , - 3075 , - 3746 , - 449 , - 1376 , - 2431 , - 3614 , - 829 , - 2268 , - 3835 , - 1434 , - 3257 , - 1112 , - 3191 , - 1302 , - 3637 , - 2004 , - 499 , - 3218 , - 1969 , - 848 , - 3951 , - 3086 , - 2349 , - 1740 , - 1259 , - 906 , - 681 , - 584 , - 615 , - 774 , - 1061 , - 1476 , - 2019 , - 2690 , - 3489 , - 320 , - 1375 , - 2558 , - 3869 , - 1212 , - 2779 , - 378 , - 2201 , - 56 , - 2135 , - 246 , - 2581 , - 948 , - 3539 , - 2162 , - 913 , - 3888 , - 2895 , - 2030 , - 1293 , - 684 , - 203 , - 3946 , - 3721 , - 3624 , - 3655 , - 3814 , - 5 , - 420 , - 963 , - 1634 , - 2433 , - 3360 , - 319 , - 1502 , - 2813 , - 156 , - 1723 , - 3418 , - 1145 , - 3096 , - 1079 , - 3286 , - 1525 , - 3988 , - 2483 , - 1106 , - 3953 , - 2832 , - 1839 , - 974 , - 237 , - 3724 , - 3243 , - 2890 , - 2665 , - 2568 , - 2599 , - 2758 , - 3045 , - 3460 , - 4003 , - 578 , - 1377 , - 2304 , - 3359 , - 446 , - 1757 , - 3196 , - 667 , - 2362 , - 89 , - 2040 , - 23 , - 2230 , - 469 , - 2932 , - 1427 , - 50 , - 2897 , - 1776 , - 783 , - 4014 , - 3277 , - 2668 , - 2187 , - 1834 , - 1609 , - 1512 , - 1543 , - 1702 , - 1989 , - 2404 , - 2947 , - 3618 , - 321 , - 1248 , - 2303 , - 3486 , - 701 , - 2140 , - 3707 , - 1306 , - 3129 , - 984 , - 3063 , - 1174 , - 3509 , - 1876 , - 371 , - 3090 , - 1841 , - 720 , - 3823 , - 2958 , - 2221 , - 1612 , - 1131 , - 778 , - 553 , - 456 , - 487 , - 646 , - 933 , - 1348 , - 1891 , - 2562 , - 3361 , - 192 , - 1247 , - 2430 , - 3741 , - 1084 , - 2651 , - 250 , - 2073 , - 4024 , - 2007 , - 118 , - 2453 , - 820 , - 3411 , - 2034 , - 785 , - 3760 , - 2767 , - 1902 , - 1165 , - 556 , - 75 , - 3818 , - 3593 , - 3496 , - 3527 , - 3686 , - 3973 , - 292 , - 835 , - 1506 , - 2305 , - 3232 , - 191 , - 1374 , - 2685 , - 28 , - 1595 , - 3290 , - 1017 , - 2968 , - 951 , - 3158 , - 1397 , - 3860 , - 2355 , - 978 , - 3825 , - 2704 , - 1711 , - 846 , - 109 , - 3596 , - 3115 , - 2762 , - 2537 , - 2440 , - 2471 , - 2630 , - 2917 , - 3332 , - 3875 , - 450 , - 1249 , - 2176 , - 3231 , - 318 , - 1629 , - 3068 , - 539 , - 2234 , - 4057 , - 1912 , - 3991 , - 2102 , - 341 , - 2804 , - 1299 , - 4018 , - 2769 , - 1648 , - 655 , - 3886 , - 3149 , - 2540 , - 2059 , - 1706 , - 1481 , - 1384 , - 1415 , - 1574 , - 1861 , - 2276 , - 2819 , - 3490 , - 193 , - 1120 , - 2175 , - 3358 , - 573 , - 2012 , - 3579 , - 1178 , - 3001 , - 856 , - 2935 , - 1046 , - 3381 , - 1748 , - 243 , - 2962 , - 1713 , - 592 , - 3695 , - 2830 , - 2093 , - 1484 , - 1003 , - 650 , - 425 , - 328 , - 359 , - 518 , - 805 , - 1220 , - 1763 , - 2434 , - 3233 , - 64 , - 1119 , - 2302 , - 3613 , - 956 , - 2523 , - 122 , - 1945 , - 3896 , - 1879 , - 4086 , - 2325 , - 692 , - 3283 , - 1906 , - 657 , - 3632 , - 2639 , - 1774 , - 1037 , - 428 , - 4043 , - 3690 , - 3465 , - 3368 , - 3399 , - 3558 , - 3845 , - 164 , - 707 , - 1378 , - 2177 , - 3104 , - 63 , - 1246 , - 2557 , - 3996 , - 1467 , - 3162 , - 889 , - 2840 , - 823 , - 3030 , - 1269 , - 3732 , - 2227 , - 850 , - 3697 , - 2576 , - 1583 , - 718 , - 4077 , - 3468 , - 2987 , - 2634 , - 2409 , - 2312 , - 2343 , - 2502 , - 2789 , - 3204 , - 3747 , - 322 , - 1121 , - 2048 , - 3103 , - 190 , - 1501 , - 2940 , - 411 , - 2106 , - 3929 , - 1784 , - 3863 , - 1974 , - 213 , - 2676 , - 1171 , - 3890 , - 2641 , - 1520 , - 527 , - 3758 , - 3021 , - 2412 , - 1931 , - 1578 , - 1353 , - 1256 , - 1287 , - 1446 , - 1733 , - 2148 , - 2691 , - 3362 , - 65 , - 992 , - 2047 , - 3230 , - 445 , - 1884 , - 3451 , - 1050 , - 2873 , - 728 , - 2807 , - 918 , - 3253 , - 1620 , - 115 , - 2834 , - 1585 , - 464 , - 3567 , - 2702 , - 1965 , - 1356 , - 875 , - 522 , - 297 , - 200 , - 231 , - 390 , - 677 , - 1092 , - 1635 , - 2306 , - 3105 , - 4032 , - 991 , - 2174 , - 3485 , - 828 , - 2395 , - 4090 , - 1817 , - 3768 , - 1751 , - 3958 , - 2197 , - 564 , - 3155 , - 1778 , - 529 , - 3504 , - 2511 , - 1646 , - 909 , - 300 , - 3915 , - 3562 , - 3337 , - 3240 , - 3271 , - 3430 , - 3717 , - 36 , - 579 , - 1250 , - 2049 , - 2976 , - 4031 , - 1118 , - 2429 , - 3868 , - 1339 , - 3034 , - 761 , - 2712 , - 695 , - 2902 , - 1141 , - 3604 , - 2099 , - 722 , - 3569 , - 2448 , - 1455 , - 590 , - 3949 , - 3340 , - 2859 , - 2506 , - 2281 , - 2184 , - 2215 , - 2374 , - 2661 , - 3076 , - 3619 , - 194 , - 993 , - 1920 , - 2975 , - 62 , - 1373 , - 2812 , - 283 , - 1978 , - 3801 , - 1656 , - 3735 , - 1846 , - 85 , - 2548 , - 1043 , - 3762 , - 2513 , - 1392 , - 399 , - 3630 , - 2893 , - 2284 , - 1803 , - 1450 , - 1225 , - 1128 , - 1159 , - 1318 , - 1605 , - 2020 , - 2563 , - 3234 , - 4033 , - 864 , - 1919 , - 3102 , - 317 , - 1756 , - 3323 , - 922 , - 2745 , - 600 , - 2679 , - 790 , - 3125 , - 1492 , - 4083 , - 2706 , - 1457 , - 336 , - 3439 , - 2574 , - 1837 , - 1228 , - 747 , - 394 , - 169 , - 72 , - 103 , - 262 , - 549 , - 964 , - 1507 , - 2178 , - 2977 , - 3904 , - 863 , - 2046 , - 3357 , - 700 , - 2267 , - 3962 , - 1689 , - 3640 , - 1623 , - 3830 , - 2069 , - 436 , - 3027 , - 1650 , - 401 , - 3376 , - 2383 , - 1518 , - 781 , - 172 , - 3787 , - 3434 , - 3209 , - 3112 , - 3143 , - 3302 , - 3589 , - 4004 , - 451 , - 1122 , - 1921 , - 2848 , - 3903 , - 990 , - 2301 , - 3740 , - 1211 , - 2906 , - 633 , - 2584 , - 567 , - 2774 , - 1013 , - 3476 , - 1971 , - 594 , - 3441 , - 2320 , - 1327 , - 462 , - 3821 , - 3212 , - 2731 , - 2378 , - 2153 , - 2056 , - 2087 , - 2246 , - 2533 , - 2948 , - 3491 , - 66 , - 865 , - 1792 , - 2847 , - 4030 , - 1245 , - 2684 , - 155 , - 1850 , - 3673 , - 1528 , - 3607 , - 1718 , - 4053 , - 2420 , - 915 , - 3634 , - 2385 , - 1264 , - 271 , - 3502 , - 2765 , - 2156 , - 1675 , - 1322 , - 1097 , - 1000 , - 1031 , - 1190 , - 1477 , - 1892 , - 2435 , - 3106 , - 3905 , - 736 , - 1791 , - 2974 , - 189 , - 1628 , - 3195 , - 794 , - 2617 , - 472 , - 2551 , - 662 , - 2997 , - 1364 , - 3955 , - 2578 , - 1329 , - 208 , - 3311 , - 2446 , - 1709 , - 1100 , - 619 , - 266 , - 41 , - 4040 , - 4071 , - 134 , - 421 , - 836 , - 1379 , - 2050 , - 2849 , - 3776 , - 735 , - 1918 , - 3229 , - 572 , - 2139 , - 3834 , - 1561 , - 3512 , - 1495 , - 3702 , - 1941 , - 308 , - 2899 , - 1522 , - 273 , - 3248 , - 2255 , - 1390 , - 653 , - 44 , - 3659 , - 3306 , - 3081 , - 2984 , - 3015 , - 3174 , - 3461 , - 3876 , - 323 , - 994 , - 1793 , - 2720 , - 3775 , - 862 , - 2173 , - 3612 , - 1083 , - 2778 , - 505 , - 2456 , - 439 , - 2646 , - 885 , - 3348 , - 1843 , - 466 , - 3313 , - 2192 , - 1199 , - 334 , - 3693 , - 3084 , - 2603 , - 2250 , - 2025 , - 1928 , - 1959 , - 2118 , - 2405 , - 2820 , - 3363 , - 4034 , - 737 , - 1664 , - 2719 , - 3902 , - 1117 , - 2556 , - 27 , - 1722 , - 3545 , - 1400 , - 3479 , - 1590 , - 3925 , - 2292 , - 787 , - 3506 , - 2257 , - 1136 , - 143 , - 3374 , - 2637 , - 2028 , - 1547 , - 1194 , - 969 , - 872 , - 903 , - 1062 , - 1349 , - 1764 , - 2307 , - 2978 , - 3777 , - 608 , - 1663 , - 2846 , - 61 , - 1500 , - 3067 , - 666 , - 2489 , - 344 , - 2423 , - 534 , - 2869 , - 1236 , - 3827 , - 2450 , - 1201 , - 80 , - 3183 , - 2318 , - 1581 , - 972 , - 491 , - 138 , - 4009 , - 3912 , - 3943 , - 6 , - 293 , - 708 , - 1251 , - 1922 , - 2721 , - 3648 , - 607 , - 1790 , - 3101 , - 444 , - 2011 , - 3706 , - 1433 , - 3384 , - 1367 , - 3574 , - 1813 , - 180 , - 2771 , - 1394 , - 145 , - 3120 , - 2127 , - 1262 , - 525 , - 4012 , - 3531 , - 3178 , - 2953 , - 2856 , - 2887 , - 3046 , - 3333 , - 3748 , - 195 , - 866 , - 1665 , - 2592 , - 3647 , - 734 , - 2045 , - 3484 , - 955 , - 2650 , - 377 , - 2328 , - 311 , - 2518 , - 757 , - 3220 , - 1715 , - 338 , - 3185 , - 2064 , - 1071 , - 206 , - 3565 , - 2956 , - 2475 , - 2122 , - 1897 , - 1800 , - 1831 , - 1990 , - 2277 , - 2692 , - 3235 , - 3906 , - 609 , - 1536 , - 2591 , - 3774 , - 989 , - 2428 , - 3995 , - 1594 , - 3417 , - 1272 , - 3351 , - 1462 , - 3797 , - 2164 , - 659 , - 3378 , - 2129 , - 1008 , - 15 , - 3246 , - 2509 , - 1900 , - 1419 , - 1066 , - 841 , - 744 , - 775 , - 934 , - 1221 , - 1636 , - 2179 , - 2850 , - 3649 , - 480 , - 1535 , - 2718 , - 4029 , - 1372 , - 2939 , - 538 , - 2361 , - 216 , - 2295 , - 406 , - 2741 , - 1108 , - 3699 , - 2322 , - 1073 , - 4048 , - 3055 , - 2190 , - 1453 , - 844 , - 363 , - 10 , - 3881 , - 3784 , - 3815 , - 3974 , - 165 , - 580 , - 1123 , - 1794 , - 2593 , - 3520 , - 479 , - 1662 , - 2973 , - 316 , - 1883 , - 3578 , - 1305 , - 3256 , - 1239 , - 3446 , - 1685 , - 52 , - 2643 , - 1266 , - 17 , - 2992 , - 1999 , - 1134 , - 397 , - 3884 , - 3403 , - 3050 , - 2825 , - 2728 , - 2759 , - 2918 , - 3205 , - 3620 , - 67 , - 738 , - 1537 , - 2464 , - 3519 , - 606 , - 1917 , - 3356 , - 827 , - 2522 , - 249 , - 2200 , - 183 , - 2390 , - 629 , - 3092 , - 1587 , - 210 , - 3057 , - 1936 , - 943 , - 78 , - 3437 , - 2828 , - 2347 , - 1994 , - 1769 , - 1672 , - 1703 , - 1862 , - 2149 , - 2564 , - 3107 , - 3778 , - 481 , - 1408 , - 2463 , - 3646 , - 861 , - 2300 , - 3867 , - 1466 , - 3289 , - 1144 , - 3223 , - 1334 , - 3669 , - 2036 , - 531 , - 3250 , - 2001 , - 880 , - 3983 , - 3118 , - 2381 , - 1772 , - 1291 , - 938 , - 713 , - 616 , - 647 , - 806 , - 1093 , - 1508 , - 2051 , - 2722 , - 3521 , - 352 , - 1407 , - 2590 , - 3901 , - 1244 , - 2811 , - 410 , - 2233 , - 88 , - 2167 , - 278 , - 2613 , - 980 , - 3571 , - 2194 , - 945 , - 3920 , - 2927 , - 2062 , - 1325 , - 716 , - 235 , - 3978 , - 3753 , - 3656 , - 3687 , - 3846 , - 37 , - 452 , - 995 , - 1666 , - 2465 , - 3392 , - 351 , - 1534 , - 2845 , - 188 , - 1755 , - 3450 , - 1177 , - 3128 , - 1111 , - 3318 , - 1557 , - 4020 , - 2515 , - 1138 , - 3985 , - 2864 , - 1871 , - 1006 , - 269 , - 3756 , - 3275 , - 2922 , - 2697 , - 2600 , - 2631 , - 2790 , - 3077 , - 3492 , - 4035 , - 610 , - 1409 , - 2336 , - 3391 , - 478 , - 1789 , - 3228 , - 699 , - 2394 , - 121 , - 2072 , - 55 , - 2262 , - 501 , - 2964 , - 1459 , - 82 , - 2929 , - 1808 , - 815 , - 4046 , - 3309 , - 2700 , - 2219 , - 1866 , - 1641 , - 1544 , - 1575 , - 1734 , - 2021 , - 2436 , - 2979 , - 3650 , - 353 , - 1280 , - 2335 , - 3518 , - 733 , - 2172 , - 3739 , - 1338 , - 3161 , - 1016 , - 3095 , - 1206 , - 3541 , - 1908 , - 403 , - 3122 , - 1873 , - 752 , - 3855 , - 2990 , - 2253 , - 1644 , - 1163 , - 810 , - 585 , - 488 , - 519 , - 678 , - 965 , - 1380 , - 1923 , - 2594 , - 3393 , - 224 , - 1279 , - 2462 , - 3773 , - 1116 , - 2683 , - 282 , - 2105 , - 4056 , - 2039 , - 150 , - 2485 , - 852 , - 3443 , - 2066 , - 817 , - 3792 , - 2799 , - 1934 , - 1197 , - 588 , - 107 , - 3850 , - 3625 , - 3528 , - 3559 , - 3718 , - 4005 , - 324 , - 867 , - 1538 , - 2337 , - 3264 , - 223 , - 1406 , - 2717 , - 60 , - 1627 , - 3322 , - 1049 , - 3000 , - 983 , - 3190 , - 1429 , - 3892 , - 2387 , - 1010 , - 3857 , - 2736 , - 1743 , - 878 , - 141 , - 3628 , - 3147 , - 2794 , - 2569 , - 2472 , - 2503 , - 2662 , - 2949 , - 3364 , - 3907 , - 482 , - 1281 , - 2208 , - 3263 , - 350 , - 1661 , - 3100 , - 571 , - 2266 , - 4089 , - 1944 , - 4023 , - 2134 , - 373 , - 2836 , - 1331 , - 4050 , - 2801 , - 1680 , - 687 , - 3918 , - 3181 , - 2572 , - 2091 , - 1738 , - 1513 , - 1416 , - 1447 , - 1606 , - 1893 , - 2308 , - 2851 , - 3522 , - 225 , - 1152 , - 2207 , - 3390 , - 605 , - 2044 , - 3611 , - 1210 , - 3033 , - 888 , - 2967 , - 1078 , - 3413 , - 1780 , - 275 , - 2994 , - 1745 , - 624 , - 3727 , - 2862 , - 2125 , - 1516 , - 1035 , - 682 , - 457 , - 360 , - 391 , - 550 , - 837 , - 1252 , - 1795 , - 2466 , - 3265 , - 96 , - 1151 , - 2334 , - 3645 , - 988 , - 2555 , - 154 , - 1977 , - 3928 , - 1911 , - 22 , - 2357 , - 724 , - 3315 , - 1938 , - 689 , - 3664 , - 2671 , - 1806 , - 1069 , - 460 , - 4075 , - 3722 , - 3497 , - 3400 , - 3431 , - 3590 , - 3877 , - 196 , - 739 , - 1410 , - 2209 , - 3136 , - 95 , - 1278 , - 2589 , - 4028 , - 1499 , - 3194 , - 921 , - 2872 , - 855 , - 3062 , - 1301 , - 3764 , - 2259 , - 882 , - 3729 , - 2608 , - 1615 , - 750 , - 13 , - 3500 , - 3019 , - 2666 , - 2441 , - 2344 , - 2375 , - 2534 , - 2821 , - 3236 , - 3779 , - 354 , - 1153 , - 2080 , - 3135 , - 222 , - 1533 , - 2972 , - 443 , - 2138 , - 3961 , - 1816 , - 3895 , - 2006 , - 245 , - 2708 , - 1203 , - 3922 , - 2673 , - 1552 , - 559 , - 3790 , - 3053 , - 2444 , - 1963 , - 1610 , - 1385 , - 1288 , - 1319 , - 1478 , - 1765 , - 2180 , - 2723 , - 3394 , - 97 , - 1024 , - 2079 , - 3262 , - 477 , - 1916 , - 3483 , - 1082 , - 2905 , - 760 , - 2839 , - 950 , - 3285 , - 1652 , - 147 , - 2866 , - 1617 , - 496 , - 3599 , - 2734 , - 1997 , - 1388 , - 907 , - 554 , - 329 , - 232 , - 263 , - 422 , - 709 , - 1124 , - 1667 , - 2338 , - 3137 , - 4064 , - 1023 , - 2206 , - 3517 , - 860 , - 2427 , - 26 , - 1849 , - 3800 , - 1783 , - 3990 , - 2229 , - 596 , - 3187 , - 1810 , - 561 , - 3536 , - 2543 , - 1678 , - 941 , - 332 , - 3947 , - 3594 , - 3369 , - 3272 , - 3303 , - 3462 , - 3749 , - 68 , - 611 , - 1282 , - 2081 , - 3008 , - 4063 , - 1150 , - 2461 , - 3900 , - 1371 , - 3066 , - 793 , - 2744 , - 727 , - 2934 , - 1173 , - 3636 , - 2131 , - 754 , - 3601 , - 2480 , - 1487 , - 622 , - 3981 , - 3372 , - 2891 , - 2538 , - 2313 , - 2216 , - 2247 , - 2406 , - 2693 , - 3108 , - 3651 , - 226 , - 1025 , - 1952 , - 3007 , - 94 , - 1405 , - 2844 , - 315 , - 2010 , - 3833 , - 1688 , - 3767 , - 1878 , - 117 , - 2580 , - 1075 , - 3794 , - 2545 , - 1424 , - 431 , - 3662 , - 2925 , - 2316 , - 1835 , - 1482 , - 1257 , - 1160 , - 1191 , - 1350 , - 1637 , - 2052 , - 2595 , - 3266 , - 4065 , - 896 , - 1951 , - 3134 , - 349 , - 1788 , - 3355 , - 954 , - 2777 , - 632 , - 2711 , - 822 , - 3157 , - 1524 , - 19 , - 2738 , - 1489 , - 368 , - 3471 , - 2606 , - 1869 , - 1260 , - 779 , - 426 , - 201 , - 104 , - 135 , - 294 , - 581 , - 996 , - 1539 , - 2210 , - 3009 , - 3936 , - 895 , - 2078 , - 3389 , - 732 , - 2299 , - 3994 , - 1721 , - 3672 , - 1655 , - 3862 , - 2101 , - 468 , - 3059 , - 1682 , - 433 , - 3408 , - 2415 , - 1550 , - 813 , - 204 , - 3819 , - 3466 , - 3241 , - 3144 , - 3175 , - 3334 , - 3621 , - 4036 , - 483 , - 1154 , - 1953 , - 2880 , - 3935 , - 1022 , - 2333 , - 3772 , - 1243 , - 2938 , - 665 , - 2616 , - 599 , - 2806 , - 1045 , - 3508 , - 2003 , - 626 , - 3473 , - 2352 , - 1359 , - 494 , - 3853 , - 3244 , - 2763 , - 2410 , - 2185 , - 2088 , - 2119 , - 2278 , - 2565 , - 2980 , - 3523 , - 98 , - 897 , - 1824 , - 2879 , - 4062 , - 1277 , - 2716 , - 187 , - 1882 , - 3705 , - 1560 , - 3639 , - 1750 , - 4085 , - 2452 , - 947 , - 3666 , - 2417 , - 1296 , - 303 , - 3534 , - 2797 , - 2188 , - 1707 , - 1354 , - 1129 , - 1032 , - 1063 , - 1222 , - 1509 , - 1924 , - 2467 , - 3138 , - 3937 , - 768 , - 1823 , - 3006 , - 221 , - 1660 , - 3227 , - 826 , - 2649 , - 504 , - 2583 , - 694 , - 3029 , - 1396 , - 3987 , - 2610 , - 1361 , - 240 , - 3343 , - 2478 , - 1741 , - 1132 , - 651 , - 298 , - 73 , - 4072 , - 7 , - 166 , - 453 , - 868 , - 1411 , - 2082 , - 2881 , - 3808 , - 767 , - 1950 , - 3261 , - 604 , - 2171 , - 3866 , - 1593 , - 3544 , - 1527 , - 3734 , - 1973 , - 340 , - 2931 , - 1554 , - 305 , - 3280 , - 2287 , - 1422 , - 685 , - 76 , - 3691 , - 3338 , - 3113 , - 3016 , - 3047 , - 3206 , - 3493 , - 3908 , - 355 , - 1026 , - 1825 , - 2752 , - 3807 , - 894 , - 2205 , - 3644 , - 1115 , - 2810 , - 537 , - 2488 , - 471 , - 2678 , - 917 , - 3380 , - 1875 , - 498 , - 3345 , - 2224 , - 1231 , - 366 , - 3725 , - 3116 , - 2635 , - 2282 , - 2057 , - 1960 , - 1991 , - 2150 , - 2437 , - 2852 , - 3395 , - 4066 , - 769 , - 1696 , - 2751 , - 3934 , - 1149 , - 2588 , - 59 , - 1754 , - 3577 , - 1432 , - 3511 , - 1622 , - 3957 , - 2324 , - 819 , - 3538 , - 2289 , - 1168 , - 175 , - 3406 , - 2669 , - 2060 , - 1579 , - 1226 , - 1001 , - 904 , - 935 , - 1094 , - 1381 , - 1796 , - 2339 , - 3010 , - 3809 , - 640 , - 1695 , - 2878 , - 93 , - 1532 , - 3099 , - 698 , - 2521 , - 376 , - 2455 , - 566 , - 2901 , - 1268 , - 3859 , - 2482 , - 1233 , - 112 , - 3215 , - 2350 , - 1613 , - 1004 , - 523 , - 170 , - 4041 , - 3944 , - 3975 , - 38 , - 325 , - 740 , - 1283 , - 1954 , - 2753 , - 3680 , - 639 , - 1822 , - 3133 , - 476 , - 2043 , - 3738 , - 1465 , - 3416 , - 1399 , - 3606 , - 1845 , - 212 , - 2803 , - 1426 , - 177 , - 3152 , - 2159 , - 1294 , - 557 , - 4044 , - 3563 , - 3210 , - 2985 , - 2888 , - 2919 , - 3078 , - 3365 , - 3780 , - 227 , - 898 , - 1697 , - 2624 , - 3679 , - 766 , - 2077 , - 3516 , - 987 , - 2682 , - 409 , - 2360 , - 343 , - 2550 , - 789 , - 3252 , - 1747 , - 370 , - 3217 , - 2096 , - 1103 , - 238 , - 3597 , - 2988 , - 2507 , - 2154 , - 1929 , - 1832 , - 1863 , - 2022 , - 2309 , - 2724 , - 3267 , - 3938 , - 641 , - 1568 , - 2623 , - 3806 , - 1021 , - 2460 , - 4027 , - 1626 , - 3449 , - 1304 , - 3383 , - 1494 , - 3829 , - 2196 , - 691 , - 3410 , - 2161 , - 1040 , - 47 , - 3278 , - 2541 , - 1932 , - 1451 , - 1098 , - 873 , - 776 , - 807 , - 966 , - 1253 , - 1668 , - 2211 , - 2882 , - 3681 , - 512 , - 1567 , - 2750 , - 4061 , - 1404 , - 2971 , - 570 , - 2393 , - 248 , - 2327 , - 438 , - 2773 , - 1140 , - 3731 , - 2354 , - 1105 , - 4080 , - 3087 , - 2222 , - 1485 , - 876 , - 395 , - 42 , - 3913 , - 3816 , - 3847 , - 4006 , - 197 , - 612 , - 1155 , - 1826 , - 2625 , - 3552 , - 511 , - 1694 , - 3005 , - 348 , - 1915 , - 3610 , - 1337 , - 3288 , - 1271 , - 3478 , - 1717 , - 84 , - 2675 , - 1298 , - 49 , - 3024 , - 2031 , - 1166 , - 429 , - 3916 , - 3435 , - 3082 , - 2857 , - 2760 , - 2791 , - 2950 , - 3237 , - 3652 , - 99 , - 770 , - 1569 , - 2496 , - 3551 , - 638 , - 1949 , - 3388 , - 859 , - 2554 , - 281 , - 2232 , - 215 , - 2422 , - 661 , - 3124 , - 1619 , - 242 , - 3089 , - 1968 , - 975 , - 110 , - 3469 , - 2860 , - 2379 , - 2026 , - 1801 , - 1704 , - 1735 , - 1894 , - 2181 , - 2596 , - 3139 , - 3810 , - 513 , - 1440 , - 2495 , - 3678 , - 893 , - 2332 , - 3899 , - 1498 , - 3321 , - 1176 , - 3255 , - 1366 , - 3701 , - 2068 , - 563 , - 3282 , - 2033 , - 912 , - 4015 , - 3150 , - 2413 , - 1804 , - 1323 , - 970 , - 745 , - 648 , - 679 , - 838 , - 1125 , - 1540 , - 2083 , - 2754 , - 3553 , - 384 , - 1439 , - 2622 , - 3933 , - 1276 , - 2843 , - 442 , - 2265 , - 120 , - 2199 , - 310 , - 2645 , - 1012 , - 3603 , - 2226 , - 977 , - 3952 , - 2959 , - 2094 , - 1357 , - 748 , - 267 , - 4010 , - 3785 , - 3688 , - 3719 , - 3878 , - 69 , - 484 , - 1027 , - 1698 , - 2497 , - 3424 , - 383 , - 1566 , - 2877 , - 220 , - 1787 , - 3482 , - 1209 , - 3160 , - 1143 , - 3350 , - 1589 , - 4052 , - 2547 , - 1170 , - 4017 , - 2896 , - 1903 , - 1038 , - 301 , - 3788 , - 3307 , - 2954 , - 2729 , - 2632 , - 2663 , - 2822 , - 3109 , - 3524 , - 4067 , - 642 , - 1441 , - 2368 , - 3423 , - 510 , - 1821 , - 3260 , - 731 , - 2426 , - 153 , - 2104 , - 87 , - 2294 , - 533 , - 2996 , - 1491 , - 114 , - 2961 , - 1840 , - 847 , - 4078 , - 3341 , - 2732 , - 2251 , - 1898 , - 1673 , - 1576 , - 1607 , - 1766 , - 2053 , - 2468 , - 3011 , - 3682 , - 385 , - 1312 , - 2367 , - 3550 , - 765 , - 2204 , - 3771 , - 1370 , - 3193 , - 1048 , - 3127 , - 1238 , - 3573 , - 1940 , - 435 , - 3154 , - 1905 , - 784 , - 3887 , - 3022 , - 2285 , - 1676 , - 1195 , - 842 , - 617 , - 520 , - 551 , - 710 , - 997 , - 1412 , - 1955 , - 2626 , - 3425 , - 256 , - 1311 , - 2494 , - 3805 , - 1148 , - 2715 , - 314 , - 2137 , - 4088 , - 2071 , - 182 , - 2517 , - 884 , - 3475 , - 2098 , - 849 , - 3824 , - 2831 , - 1966 , - 1229 , - 620 , - 139 , - 3882 , - 3657 , - 3560 , - 3591 , - 3750 , - 4037 , - 356 , - 899 , - 1570 , - 2369 , - 3296 , - 255 , - 1438 , - 2749 , - 92 , - 1659 , - 3354 , - 1081 , - 3032 , - 1015 , - 3222 , - 1461 , - 3924 , - 2419 , - 1042 , - 3889 , - 2768 , - 1775 , - 910 , - 173 , - 3660 , - 3179 , - 2826 , - 2601 , - 2504 , - 2535 , - 2694 , - 2981 , - 3396 , - 3939 , - 514 , - 1313 , - 2240 , - 3295 , - 382 , - 1693 , - 3132 , - 603 , - 2298 , - 25 , - 1976 , - 4055 , - 2166 , - 405 , - 2868 , - 1363 , - 4082 , - 2833 , - 1712 , - 719 , - 3950 , - 3213 , - 2604 , - 2123 , - 1770 , - 1545 , - 1448 , - 1479 , - 1638 , - 1925 , - 2340 , - 2883 , - 3554 , - 257 , - 1184 , - 2239 , - 3422 , - 637 , - 2076 , - 3643 , - 1242 , - 3065 , - 920 , - 2999 , - 1110 , - 3445 , - 1812 , - 307 , - 3026 , - 1777 , - 656 , - 3759 , - 2894 , - 2157 , - 1548 , - 1067 , - 714 , - 489 , - 392 , - 423 , - 582 , - 869 , - 1284 , - 1827 , - 2498 , - 3297 , - 128 , - 1183 , - 2366 , - 3677 , - 1020 , - 2587 , - 186 , - 2009 , - 3960 , - 1943 , - 54 , - 2389 , - 756 , - 3347 , - 1970 , - 721 , - 3696 , - 2703 , - 1838 , - 1101 , - 492 , - 11 , - 3754 , - 3529 , - 3432 , - 3463 , - 3622 , - 3909 , - 228 , - 771 , - 1442 , - 2241 , - 3168 , - 127 , - 1310 , - 2621 , - 4060 , - 1531 , - 3226 , - 953 , - 2904 , - 887 , - 3094 , - 1333 , - 3796 , - 2291 , - 914 , - 3761 , - 2640 , - 1647 , - 782 , - 45 , - 3532 , - 3051 , - 2698 , - 2473 , - 2376 , - 2407 , - 2566 , - 2853 , - 3268 , - 3811 , - 386 , - 1185 , - 2112 , - 3167 , - 254 , - 1565 , - 3004 , - 475 , - 2170 , - 3993 , - 1848 , - 3927 , - 2038 , - 277 , - 2740 , - 1235 , - 3954 , - 2705 , - 1584 , - 591 , - 3822 , - 3085 , - 2476 , - 1995 , - 1642 , - 1417 , - 1320 , - 1351 , - 1510 , - 1797 , - 2212 , - 2755 , - 3426 , - 129 , - 1056 , - 2111 , - 3294 , - 509 , - 1948 , - 3515 , - 1114 , - 2937 , - 792 , - 2871 , - 982 , - 3317 , - 1684 , - 179 , - 2898 , - 1649 , - 528 , - 3631 , - 2766 , - 2029 , - 1420 , - 939 , - 586 , - 361 , - 264 , - 295 , - 454 , - 741 , - 1156 , - 1699 , - 2370 , - 3169 , - 0 , - 1887 , - 3514 , - 1761 , - 1828 , - 595 , - 3262 , - 2549 , - 3656 , - 3463 , - 3010 , - 3337 , - 1324 , - 2171 , - 2758 , - 4125 , - 3152 , - 879 , - 2506 , - 753 , - 820 , - 3747 , - 2254 , - 1541 , - 2648 , - 2455 , - 2002 , - 2329 , - 316 , - 1163 , - 1750 , - 3117 , - 2144 , - 4031 , - 1498 , - 3905 , - 3972 , - 2739 , - 1246 , - 533 , - 1640 , - 1447 , - 994 , - 1321 , - 3468 , - 155 , - 742 , - 2109 , - 1136 , - 3023 , - 490 , - 2897 , - 2964 , - 1731 , - 238 , - 3685 , - 632 , - 439 , - 4146 , - 313 , - 2460 , - 3307 , - 3894 , - 1101 , - 128 , - 2015 , - 3642 , - 1889 , - 1956 , - 723 , - 3390 , - 2677 , - 3784 , - 3591 , - 3138 , - 3465 , - 1452 , - 2299 , - 2886 , - 93 , - 3280 , - 1007 , - 2634 , - 881 , - 948 , - 3875 , - 2382 , - 1669 , - 2776 , - 2583 , - 2130 , - 2457 , - 444 , - 1291 , - 1878 , - 3245 , - 2272 , - 4159 , - 1626 , - 4033 , - 4100 , - 2867 , - 1374 , - 661 , - 1768 , - 1575 , - 1122 , - 1449 , - 3596 , - 283 , - 870 , - 2237 , - 1264 , - 3151 , - 618 , - 3025 , - 3092 , - 1859 , - 366 , - 3813 , - 760 , - 567 , - 114 , - 441 , - 2588 , - 3435 , - 4022 , - 1229 , - 256 , - 2143 , - 3770 , - 2017 , - 2084 , - 851 , - 3518 , - 2805 , - 3912 , - 3719 , - 3266 , - 3593 , - 1580 , - 2427 , - 3014 , - 221 , - 3408 , - 1135 , - 2762 , - 1009 , - 1076 , - 4003 , - 2510 , - 1797 , - 2904 , - 2711 , - 2258 , - 2585 , - 572 , - 1419 , - 2006 , - 3373 , - 2400 , - 127 , - 1754 , - 1 , - 68 , - 2995 , - 1502 , - 789 , - 1896 , - 1703 , - 1250 , - 1577 , - 3724 , - 411 , - 998 , - 2365 , - 1392 , - 3279 , - 746 , - 3153 , - 3220 , - 1987 , - 494 , - 3941 , - 888 , - 695 , - 242 , - 569 , - 2716 , - 3563 , - 4150 , - 1357 , - 384 , - 2271 , - 3898 , - 2145 , - 2212 , - 979 , - 3646 , - 2933 , - 4040 , - 3847 , - 3394 , - 3721 , - 1708 , - 2555 , - 3142 , - 349 , - 3536 , - 1263 , - 2890 , - 1137 , - 1204 , - 4131 , - 2638 , - 1925 , - 3032 , - 2839 , - 2386 , - 2713 , - 700 , - 1547 , - 2134 , - 3501 , - 2528 , - 255 , - 1882 , - 129 , - 196 , - 3123 , - 1630 , - 917 , - 2024 , - 1831 , - 1378 , - 1705 , - 3852 , - 539 , - 1126 , - 2493 , - 1520 , - 3407 , - 874 , - 3281 , - 3348 , - 2115 , - 622 , - 4069 , - 1016 , - 823 , - 370 , - 697 , - 2844 , - 3691 , - 118 , - 1485 , - 512 , - 2399 , - 4026 , - 2273 , - 2340 , - 1107 , - 3774 , - 3061 , - 8 , - 3975 , - 3522 , - 3849 , - 1836 , - 2683 , - 3270 , - 477 , - 3664 , - 1391 , - 3018 , - 1265 , - 1332 , - 99 , - 2766 , - 2053 , - 3160 , - 2967 , - 2514 , - 2841 , - 828 , - 1675 , - 2262 , - 3629 , - 2656 , - 383 , - 2010 , - 257 , - 324 , - 3251 , - 1758 , - 1045 , - 2152 , - 1959 , - 1506 , - 1833 , - 3980 , - 667 , - 1254 , - 2621 , - 1648 , - 3535 , - 1002 , - 3409 , - 3476 , - 2243 , - 750 , - 37 , - 1144 , - 951 , - 498 , - 825 , - 2972 , - 3819 , - 246 , - 1613 , - 640 , - 2527 , - 4154 , - 2401 , - 2468 , - 1235 , - 3902 , - 3189 , - 136 , - 4103 , - 3650 , - 3977 , - 1964 , - 2811 , - 3398 , - 605 , - 3792 , - 1519 , - 3146 , - 1393 , - 1460 , - 227 , - 2894 , - 2181 , - 3288 , - 3095 , - 2642 , - 2969 , - 956 , - 1803 , - 2390 , - 3757 , - 2784 , - 511 , - 2138 , - 385 , - 452 , - 3379 , - 1886 , - 1173 , - 2280 , - 2087 , - 1634 , - 1961 , - 4108 , - 795 , - 1382 , - 2749 , - 1776 , - 3663 , - 1130 , - 3537 , - 3604 , - 2371 , - 878 , - 165 , - 1272 , - 1079 , - 626 , - 953 , - 3100 , - 3947 , - 374 , - 1741 , - 768 , - 2655 , - 122 , - 2529 , - 2596 , - 1363 , - 4030 , - 3317 , - 264 , - 71 , - 3778 , - 4105 , - 2092 , - 2939 , - 3526 , - 733 , - 3920 , - 1647 , - 3274 , - 1521 , - 1588 , - 355 , - 3022 , - 2309 , - 3416 , - 3223 , - 2770 , - 3097 , - 1084 , - 1931 , - 2518 , - 3885 , - 2912 , - 639 , - 2266 , - 513 , - 580 , - 3507 , - 2014 , - 1301 , - 2408 , - 2215 , - 1762 , - 2089 , - 76 , - 923 , - 1510 , - 2877 , - 1904 , - 3791 , - 1258 , - 3665 , - 3732 , - 2499 , - 1006 , - 293 , - 1400 , - 1207 , - 754 , - 1081 , - 3228 , - 4075 , - 502 , - 1869 , - 896 , - 2783 , - 250 , - 2657 , - 2724 , - 1491 , - 4158 , - 3445 , - 392 , - 199 , - 3906 , - 73 , - 2220 , - 3067 , - 3654 , - 861 , - 4048 , - 1775 , - 3402 , - 1649 , - 1716 , - 483 , - 3150 , - 2437 , - 3544 , - 3351 , - 2898 , - 3225 , - 1212 , - 2059 , - 2646 , - 4013 , - 3040 , - 767 , - 2394 , - 641 , - 708 , - 3635 , - 2142 , - 1429 , - 2536 , - 2343 , - 1890 , - 2217 , - 204 , - 1051 , - 1638 , - 3005 , - 2032 , - 3919 , - 1386 , - 3793 , - 3860 , - 2627 , - 1134 , - 421 , - 1528 , - 1335 , - 882 , - 1209 , - 3356 , - 43 , - 630 , - 1997 , - 1024 , - 2911 , - 378 , - 2785 , - 2852 , - 1619 , - 126 , - 3573 , - 520 , - 327 , - 4034 , - 201 , - 2348 , - 3195 , - 3782 , - 989 , - 16 , - 1903 , - 3530 , - 1777 , - 1844 , - 611 , - 3278 , - 2565 , - 3672 , - 3479 , - 3026 , - 3353 , - 1340 , - 2187 , - 2774 , - 4141 , - 3168 , - 895 , - 2522 , - 769 , - 836 , - 3763 , - 2270 , - 1557 , - 2664 , - 2471 , - 2018 , - 2345 , - 332 , - 1179 , - 1766 , - 3133 , - 2160 , - 4047 , - 1514 , - 3921 , - 3988 , - 2755 , - 1262 , - 549 , - 1656 , - 1463 , - 1010 , - 1337 , - 3484 , - 171 , - 758 , - 2125 , - 1152 , - 3039 , - 506 , - 2913 , - 2980 , - 1747 , - 254 , - 3701 , - 648 , - 455 , - 2 , - 329 , - 2476 , - 3323 , - 3910 , - 1117 , - 144 , - 2031 , - 3658 , - 1905 , - 1972 , - 739 , - 3406 , - 2693 , - 3800 , - 3607 , - 3154 , - 3481 , - 1468 , - 2315 , - 2902 , - 109 , - 3296 , - 1023 , - 2650 , - 897 , - 964 , - 3891 , - 2398 , - 1685 , - 2792 , - 2599 , - 2146 , - 2473 , - 460 , - 1307 , - 1894 , - 3261 , - 2288 , - 15 , - 1642 , - 4049 , - 4116 , - 2883 , - 1390 , - 677 , - 1784 , - 1591 , - 1138 , - 1465 , - 3612 , - 299 , - 886 , - 2253 , - 1280 , - 3167 , - 634 , - 3041 , - 3108 , - 1875 , - 382 , - 3829 , - 776 , - 583 , - 130 , - 457 , - 2604 , - 3451 , - 4038 , - 1245 , - 272 , - 2159 , - 3786 , - 2033 , - 2100 , - 867 , - 3534 , - 2821 , - 3928 , - 3735 , - 3282 , - 3609 , - 1596 , - 2443 , - 3030 , - 237 , - 3424 , - 1151 , - 2778 , - 1025 , - 1092 , - 4019 , - 2526 , - 1813 , - 2920 , - 2727 , - 2274 , - 2601 , - 588 , - 1435 , - 2022 , - 3389 , - 2416 , - 143 , - 1770 , - 17 , - 84 , - 3011 , - 1518 , - 805 , - 1912 , - 1719 , - 1266 , - 1593 , - 3740 , - 427 , - 1014 , - 2381 , - 1408 , - 3295 , - 762 , - 3169 , - 3236 , - 2003 , - 510 , - 3957 , - 904 , - 711 , - 258 , - 585 , - 2732 , - 3579 , - 6 , - 1373 , - 400 , - 2287 , - 3914 , - 2161 , - 2228 , - 995 , - 3662 , - 2949 , - 4056 , - 3863 , - 3410 , - 3737 , - 1724 , - 2571 , - 3158 , - 365 , - 3552 , - 1279 , - 2906 , - 1153 , - 1220 , - 4147 , - 2654 , - 1941 , - 3048 , - 2855 , - 2402 , - 2729 , - 716 , - 1563 , - 2150 , - 3517 , - 2544 , - 271 , - 1898 , - 145 , - 212 , - 3139 , - 1646 , - 933 , - 2040 , - 1847 , - 1394 , - 1721 , - 3868 , - 555 , - 1142 , - 2509 , - 1536 , - 3423 , - 890 , - 3297 , - 3364 , - 2131 , - 638 , - 4085 , - 1032 , - 839 , - 386 , - 713 , - 2860 , - 3707 , - 134 , - 1501 , - 528 , - 2415 , - 4042 , - 2289 , - 2356 , - 1123 , - 3790 , - 3077 , - 24 , - 3991 , - 3538 , - 3865 , - 1852 , - 2699 , - 3286 , - 493 , - 3680 , - 1407 , - 3034 , - 1281 , - 1348 , - 115 , - 2782 , - 2069 , - 3176 , - 2983 , - 2530 , - 2857 , - 844 , - 1691 , - 2278 , - 3645 , - 2672 , - 399 , - 2026 , - 273 , - 340 , - 3267 , - 1774 , - 1061 , - 2168 , - 1975 , - 1522 , - 1849 , - 3996 , - 683 , - 1270 , - 2637 , - 1664 , - 3551 , - 1018 , - 3425 , - 3492 , - 2259 , - 766 , - 53 , - 1160 , - 967 , - 514 , - 841 , - 2988 , - 3835 , - 262 , - 1629 , - 656 , - 2543 , - 10 , - 2417 , - 2484 , - 1251 , - 3918 , - 3205 , - 152 , - 4119 , - 3666 , - 3993 , - 1980 , - 2827 , - 3414 , - 621 , - 3808 , - 1535 , - 3162 , - 1409 , - 1476 , - 243 , - 2910 , - 2197 , - 3304 , - 3111 , - 2658 , - 2985 , - 972 , - 1819 , - 2406 , - 3773 , - 2800 , - 527 , - 2154 , - 401 , - 468 , - 3395 , - 1902 , - 1189 , - 2296 , - 2103 , - 1650 , - 1977 , - 4124 , - 811 , - 1398 , - 2765 , - 1792 , - 3679 , - 1146 , - 3553 , - 3620 , - 2387 , - 894 , - 181 , - 1288 , - 1095 , - 642 , - 969 , - 3116 , - 3963 , - 390 , - 1757 , - 784 , - 2671 , - 138 , - 2545 , - 2612 , - 1379 , - 4046 , - 3333 , - 280 , - 87 , - 3794 , - 4121 , - 2108 , - 2955 , - 3542 , - 749 , - 3936 , - 1663 , - 3290 , - 1537 , - 1604 , - 371 , - 3038 , - 2325 , - 3432 , - 3239 , - 2786 , - 3113 , - 1100 , - 1947 , - 2534 , - 3901 , - 2928 , - 655 , - 2282 , - 529 , - 596 , - 3523 , - 2030 , - 1317 , - 2424 , - 2231 , - 1778 , - 2105 , - 92 , - 939 , - 1526 , - 2893 , - 1920 , - 3807 , - 1274 , - 3681 , - 3748 , - 2515 , - 1022 , - 309 , - 1416 , - 1223 , - 770 , - 1097 , - 3244 , - 4091 , - 518 , - 1885 , - 912 , - 2799 , - 266 , - 2673 , - 2740 , - 1507 , - 14 , - 3461 , - 408 , - 215 , - 3922 , - 89 , - 2236 , - 3083 , - 3670 , - 877 , - 4064 , - 1791 , - 3418 , - 1665 , - 1732 , - 499 , - 3166 , - 2453 , - 3560 , - 3367 , - 2914 , - 3241 , - 1228 , - 2075 , - 2662 , - 4029 , - 3056 , - 783 , - 2410 , - 657 , - 724 , - 3651 , - 2158 , - 1445 , - 2552 , - 2359 , - 1906 , - 2233 , - 220 , - 1067 , - 1654 , - 3021 , - 2048 , - 3935 , - 1402 , - 3809 , - 3876 , - 2643 , - 1150 , - 437 , - 1544 , - 1351 , - 898 , - 1225 , - 3372 , - 59 , - 646 , - 2013 , - 1040 , - 2927 , - 394 , - 2801 , - 2868 , - 1635 , - 142 , - 3589 , - 536 , - 343 , - 4050 , - 217 , - 2364 , - 3211 , - 3798 , - 1005 , - 32 , - 1919 , - 3546 , - 1793 , - 1860 , - 627 , - 3294 , - 2581 , - 3688 , - 3495 , - 3042 , - 3369 , - 1356 , - 2203 , - 2790 , - 4157 , - 3184 , - 911 , - 2538 , - 785 , - 852 , - 3779 , - 2286 , - 1573 , - 2680 , - 2487 , - 2034 , - 2361 , - 348 , - 1195 , - 1782 , - 3149 , - 2176 , - 4063 , - 1530 , - 3937 , - 4004 , - 2771 , - 1278 , - 565 , - 1672 , - 1479 , - 1026 , - 1353 , - 3500 , - 187 , - 774 , - 2141 , - 1168 , - 3055 , - 522 , - 2929 , - 2996 , - 1763 , - 270 , - 3717 , - 664 , - 471 , - 18 , - 345 , - 2492 , - 3339 , - 3926 , - 1133 , - 160 , - 2047 , - 3674 , - 1921 , - 1988 , - 755 , - 3422 , - 2709 , - 3816 , - 3623 , - 3170 , - 3497 , - 1484 , - 2331 , - 2918 , - 125 , - 3312 , - 1039 , - 2666 , - 913 , - 980 , - 3907 , - 2414 , - 1701 , - 2808 , - 2615 , - 2162 , - 2489 , - 476 , - 1323 , - 1910 , - 3277 , - 2304 , - 31 , - 1658 , - 4065 , - 4132 , - 2899 , - 1406 , - 693 , - 1800 , - 1607 , - 1154 , - 1481 , - 3628 , - 315 , - 902 , - 2269 , - 1296 , - 3183 , - 650 , - 3057 , - 3124 , - 1891 , - 398 , - 3845 , - 792 , - 599 , - 146 , - 473 , - 2620 , - 3467 , - 4054 , - 1261 , - 288 , - 2175 , - 3802 , - 2049 , - 2116 , - 883 , - 3550 , - 2837 , - 3944 , - 3751 , - 3298 , - 3625 , - 1612 , - 2459 , - 3046 , - 253 , - 3440 , - 1167 , - 2794 , - 1041 , - 1108 , - 4035 , - 2542 , - 1829 , - 2936 , - 2743 , - 2290 , - 2617 , - 604 , - 1451 , - 2038 , - 3405 , - 2432 , - 159 , - 1786 , - 33 , - 100 , - 3027 , - 1534 , - 821 , - 1928 , - 1735 , - 1282 , - 1609 , - 3756 , - 443 , - 1030 , - 2397 , - 1424 , - 3311 , - 778 , - 3185 , - 3252 , - 2019 , - 526 , - 3973 , - 920 , - 727 , - 274 , - 601 , - 2748 , - 3595 , - 22 , - 1389 , - 416 , - 2303 , - 3930 , - 2177 , - 2244 , - 1011 , - 3678 , - 2965 , - 4072 , - 3879 , - 3426 , - 3753 , - 1740 , - 2587 , - 3174 , - 381 , - 3568 , - 1295 , - 2922 , - 1169 , - 1236 , - 3 , - 2670 , - 1957 , - 3064 , - 2871 , - 2418 , - 2745 , - 732 , - 1579 , - 2166 , - 3533 , - 2560 , - 287 , - 1914 , - 161 , - 228 , - 3155 , - 1662 , - 949 , - 2056 , - 1863 , - 1410 , - 1737 , - 3884 , - 571 , - 1158 , - 2525 , - 1552 , - 3439 , - 906 , - 3313 , - 3380 , - 2147 , - 654 , - 4101 , - 1048 , - 855 , - 402 , - 729 , - 2876 , - 3723 , - 150 , - 1517 , - 544 , - 2431 , - 4058 , - 2305 , - 2372 , - 1139 , - 3806 , - 3093 , - 40 , - 4007 , - 3554 , - 3881 , - 1868 , - 2715 , - 3302 , - 509 , - 3696 , - 1423 , - 3050 , - 1297 , - 1364 , - 131 , - 2798 , - 2085 , - 3192 , - 2999 , - 2546 , - 2873 , - 860 , - 1707 , - 2294 , - 3661 , - 2688 , - 415 , - 2042 , - 289 , - 356 , - 3283 , - 1790 , - 1077 , - 2184 , - 1991 , - 1538 , - 1865 , - 4012 , - 699 , - 1286 , - 2653 , - 1680 , - 3567 , - 1034 , - 3441 , - 3508 , - 2275 , - 782 , - 69 , - 1176 , - 983 , - 530 , - 857 , - 3004 , - 3851 , - 278 , - 1645 , - 672 , - 2559 , - 26 , - 2433 , - 2500 , - 1267 , - 3934 , - 3221 , - 168 , - 4135 , - 3682 , - 4009 , - 1996 , - 2843 , - 3430 , - 637 , - 3824 , - 1551 , - 3178 , - 1425 , - 1492 , - 259 , - 2926 , - 2213 , - 3320 , - 3127 , - 2674 , - 3001 , - 988 , - 1835 , - 2422 , - 3789 , - 2816 , - 543 , - 2170 , - 417 , - 484 , - 3411 , - 1918 , - 1205 , - 2312 , - 2119 , - 1666 , - 1993 , - 4140 , - 827 , - 1414 , - 2781 , - 1808 , - 3695 , - 1162 , - 3569 , - 3636 , - 2403 , - 910 , - 197 , - 1304 , - 1111 , - 658 , - 985 , - 3132 , - 3979 , - 406 , - 1773 , - 800 , - 2687 , - 154 , - 2561 , - 2628 , - 1395 , - 4062 , - 3349 , - 296 , - 103 , - 3810 , - 4137 , - 2124 , - 2971 , - 3558 , - 765 , - 3952 , - 1679 , - 3306 , - 1553 , - 1620 , - 387 , - 3054 , - 2341 , - 3448 , - 3255 , - 2802 , - 3129 , - 1116 , - 1963 , - 2550 , - 3917 , - 2944 , - 671 , - 2298 , - 545 , - 612 , - 3539 , - 2046 , - 1333 , - 2440 , - 2247 , - 1794 , - 2121 , - 108 , - 955 , - 1542 , - 2909 , - 1936 , - 3823 , - 1290 , - 3697 , - 3764 , - 2531 , - 1038 , - 325 , - 1432 , - 1239 , - 786 , - 1113 , - 3260 , - 4107 , - 534 , - 1901 , - 928 , - 2815 , - 282 , - 2689 , - 2756 , - 1523 , - 30 , - 3477 , - 424 , - 231 , - 3938 , - 105 , - 2252 , - 3099 , - 3686 , - 893 , - 4080 , - 1807 , - 3434 , - 1681 , - 1748 , - 515 , - 3182 , - 2469 , - 3576 , - 3383 , - 2930 , - 3257 , - 1244 , - 2091 , - 2678 , - 4045 , - 3072 , - 799 , - 2426 , - 673 , - 740 , - 3667 , - 2174 , - 1461 , - 2568 , - 2375 , - 1922 , - 2249 , - 236 , - 1083 , - 1670 , - 3037 , - 2064 , - 3951 , - 1418 , - 3825 , - 3892 , - 2659 , - 1166 , - 453 , - 1560 , - 1367 , - 914 , - 1241 , - 3388 , - 75 , - 662 , - 2029 , - 1056 , - 2943 , - 410 , - 2817 , - 2884 , - 1651 , - 158 , - 3605 , - 552 , - 359 , - 4066 , - 233 , - 2380 , - 3227 , - 3814 , - 1021 , - 48 , - 1935 , - 3562 , - 1809 , - 1876 , - 643 , - 3310 , - 2597 , - 3704 , - 3511 , - 3058 , - 3385 , - 1372 , - 2219 , - 2806 , - 13 , - 3200 , - 927 , - 2554 , - 801 , - 868 , - 3795 , - 2302 , - 1589 , - 2696 , - 2503 , - 2050 , - 2377 , - 364 , - 1211 , - 1798 , - 3165 , - 2192 , - 4079 , - 1546 , - 3953 , - 4020 , - 2787 , - 1294 , - 581 , - 1688 , - 1495 , - 1042 , - 1369 , - 3516 , - 203 , - 790 , - 2157 , - 1184 , - 3071 , - 538 , - 2945 , - 3012 , - 1779 , - 286 , - 3733 , - 680 , - 487 , - 34 , - 361 , - 2508 , - 3355 , - 3942 , - 1149 , - 176 , - 2063 , - 3690 , - 1937 , - 2004 , - 771 , - 3438 , - 2725 , - 3832 , - 3639 , - 3186 , - 3513 , - 1500 , - 2347 , - 2934 , - 141 , - 3328 , - 1055 , - 2682 , - 929 , - 996 , - 3923 , - 2430 , - 1717 , - 2824 , - 2631 , - 2178 , - 2505 , - 492 , - 1339 , - 1926 , - 3293 , - 2320 , - 47 , - 1674 , - 4081 , - 4148 , - 2915 , - 1422 , - 709 , - 1816 , - 1623 , - 1170 , - 1497 , - 3644 , - 331 , - 918 , - 2285 , - 1312 , - 3199 , - 666 , - 3073 , - 3140 , - 1907 , - 414 , - 3861 , - 808 , - 615 , - 162 , - 489 , - 2636 , - 3483 , - 4070 , - 1277 , - 304 , - 2191 , - 3818 , - 2065 , - 2132 , - 899 , - 3566 , - 2853 , - 3960 , - 3767 , - 3314 , - 3641 , - 1628 , - 2475 , - 3062 , - 269 , - 3456 , - 1183 , - 2810 , - 1057 , - 1124 , - 4051 , - 2558 , - 1845 , - 2952 , - 2759 , - 2306 , - 2633 , - 620 , - 1467 , - 2054 , - 3421 , - 2448 , - 175 , - 1802 , - 49 , - 116 , - 3043 , - 1550 , - 837 , - 1944 , - 1751 , - 1298 , - 1625 , - 3772 , - 459 , - 1046 , - 2413 , - 1440 , - 3327 , - 794 , - 3201 , - 3268 , - 2035 , - 542 , - 3989 , - 936 , - 743 , - 290 , - 617 , - 2764 , - 3611 , - 38 , - 1405 , - 432 , - 2319 , - 3946 , - 2193 , - 2260 , - 1027 , - 3694 , - 2981 , - 4088 , - 3895 , - 3442 , - 3769 , - 1756 , - 2603 , - 3190 , - 397 , - 3584 , - 1311 , - 2938 , - 1185 , - 1252 , - 19 , - 2686 , - 1973 , - 3080 , - 2887 , - 2434 , - 2761 , - 748 , - 1595 , - 2182 , - 3549 , - 2576 , - 303 , - 1930 , - 177 , - 244 , - 3171 , - 1678 , - 965 , - 2072 , - 1879 , - 1426 , - 1753 , - 3900 , - 587 , - 1174 , - 2541 , - 1568 , - 3455 , - 922 , - 3329 , - 3396 , - 2163 , - 670 , - 4117 , - 1064 , - 871 , - 418 , - 745 , - 2892 , - 3739 , - 166 , - 1533 , - 560 , - 2447 , - 4074 , - 2321 , - 2388 , - 1155 , - 3822 , - 3109 , - 56 , - 4023 , - 3570 , - 3897 , - 1884 , - 2731 , - 3318 , - 525 , - 3712 , - 1439 , - 3066 , - 1313 , - 1380 , - 147 , - 2814 , - 2101 , - 3208 , - 3015 , - 2562 , - 2889 , - 876 , - 1723 , - 2310 , - 3677 , - 2704 , - 431 , - 2058 , - 305 , - 372 , - 3299 , - 1806 , - 1093 , - 2200 , - 2007 , - 1554 , - 1881 , - 4028 , - 715 , - 1302 , - 2669 , - 1696 , - 3583 , - 1050 , - 3457 , - 3524 , - 2291 , - 798 , - 85 , - 1192 , - 999 , - 546 , - 873 , - 3020 , - 3867 , - 294 , - 1661 , - 688 , - 2575 , - 42 , - 2449 , - 2516 , - 1283 , - 3950 , - 3237 , - 184 , - 4151 , - 3698 , - 4025 , - 2012 , - 2859 , - 3446 , - 653 , - 3840 , - 1567 , - 3194 , - 1441 , - 1508 , - 275 , - 2942 , - 2229 , - 3336 , - 3143 , - 2690 , - 3017 , - 1004 , - 1851 , - 2438 , - 3805 , - 2832 , - 559 , - 2186 , - 433 , - 500 , - 3427 , - 1934 , - 1221 , - 2328 , - 2135 , - 1682 , - 2009 , - 4156 , - 843 , - 1430 , - 2797 , - 1824 , - 3711 , - 1178 , - 3585 , - 3652 , - 2419 , - 926 , - 213 , - 1320 , - 1127 , - 674 , - 1001 , - 3148 , - 3995 , - 422 , - 1789 , - 816 , - 2703 , - 170 , - 2577 , - 2644 , - 1411 , - 4078 , - 3365 , - 312 , - 119 , - 3826 , - 4153 , - 2140 , - 2987 , - 3574 , - 781 , - 3968 , - 1695 , - 3322 , - 1569 , - 1636 , - 403 , - 3070 , - 2357 , - 3464 , - 3271 , - 2818 , - 3145 , - 1132 , - 1979 , - 2566 , - 3933 , - 2960 , - 687 , - 2314 , - 561 , - 628 , - 3555 , - 2062 , - 1349 , - 2456 , - 2263 , - 1810 , - 2137 , - 124 , - 971 , - 1558 , - 2925 , - 1952 , - 3839 , - 1306 , - 3713 , - 3780 , - 2547 , - 1054 , - 341 , - 1448 , - 1255 , - 802 , - 1129 , - 3276 , - 4123 , - 550 , - 1917 , - 944 , - 2831 , - 298 , - 2705 , - 2772 , - 1539 , - 46 , - 3493 , - 440 , - 247 , - 3954 , - 121 , - 2268 , - 3115 , - 3702 , - 909 , - 4096 , - 1823 , - 3450 , - 1697 , - 1764 , - 531 , - 3198 , - 2485 , - 3592 , - 3399 , - 2946 , - 3273 , - 1260 , - 2107 , - 2694 , - 4061 , - 3088 , - 815 , - 2442 , - 689 , - 756 , - 3683 , - 2190 , - 1477 , - 2584 , - 2391 , - 1938 , - 2265 , - 252 , - 1099 , - 1686 , - 3053 , - 2080 , - 3967 , - 1434 , - 3841 , - 3908 , - 2675 , - 1182 , - 469 , - 1576 , - 1383 , - 930 , - 1257 , - 3404 , - 91 , - 678 , - 2045 , - 1072 , - 2959 , - 426 , - 2833 , - 2900 , - 1667 , - 174 , - 3621 , - 568 , - 375 , - 4082 , - 249 , - 2396 , - 3243 , - 3830 , - 1037 , - 64 , - 1951 , - 3578 , - 1825 , - 1892 , - 659 , - 3326 , - 2613 , - 3720 , - 3527 , - 3074 , - 3401 , - 1388 , - 2235 , - 2822 , - 29 , - 3216 , - 943 , - 2570 , - 817 , - 884 , - 3811 , - 2318 , - 1605 , - 2712 , - 2519 , - 2066 , - 2393 , - 380 , - 1227 , - 1814 , - 3181 , - 2208 , - 4095 , - 1562 , - 3969 , - 4036 , - 2803 , - 1310 , - 597 , - 1704 , - 1511 , - 1058 , - 1385 , - 3532 , - 219 , - 806 , - 2173 , - 1200 , - 3087 , - 554 , - 2961 , - 3028 , - 1795 , - 302 , - 3749 , - 696 , - 503 , - 50 , - 377 , - 2524 , - 3371 , - 3958 , - 1165 , - 192 , - 2079 , - 3706 , - 1953 , - 2020 , - 787 , - 3454 , - 2741 , - 3848 , - 3655 , - 3202 , - 3529 , - 1516 , - 2363 , - 2950 , - 157 , - 3344 , - 1071 , - 2698 , - 945 , - 1012 , - 3939 , - 2446 , - 1733 , - 2840 , - 2647 , - 2194 , - 2521 , - 508 , - 1355 , - 1942 , - 3309 , - 2336 , - 63 , - 1690 , - 4097 , - 4 , - 2931 , - 1438 , - 725 , - 1832 , - 1639 , - 1186 , - 1513 , - 3660 , - 347 , - 934 , - 2301 , - 1328 , - 3215 , - 682 , - 3089 , - 3156 , - 1923 , - 430 , - 3877 , - 824 , - 631 , - 178 , - 505 , - 2652 , - 3499 , - 4086 , - 1293 , - 320 , - 2207 , - 3834 , - 2081 , - 2148 , - 915 , - 3582 , - 2869 , - 3976 , - 3783 , - 3330 , - 3657 , - 1644 , - 2491 , - 3078 , - 285 , - 3472 , - 1199 , - 2826 , - 1073 , - 1140 , - 4067 , - 2574 , - 1861 , - 2968 , - 2775 , - 2322 , - 2649 , - 636 , - 1483 , - 2070 , - 3437 , - 2464 , - 191 , - 1818 , - 65 , - 132 , - 3059 , - 1566 , - 853 , - 1960 , - 1767 , - 1314 , - 1641 , - 3788 , - 475 , - 1062 , - 2429 , - 1456 , - 3343 , - 810 , - 3217 , - 3284 , - 2051 , - 558 , - 4005 , - 952 , - 759 , - 306 , - 633 , - 2780 , - 3627 , - 54 , - 1421 , - 448 , - 2335 , - 3962 , - 2209 , - 2276 , - 1043 , - 3710 , - 2997 , - 4104 , - 3911 , - 3458 , - 3785 , - 1772 , - 2619 , - 3206 , - 413 , - 3600 , - 1327 , - 2954 , - 1201 , - 1268 , - 35 , - 2702 , - 1989 , - 3096 , - 2903 , - 2450 , - 2777 , - 764 , - 1611 , - 2198 , - 3565 , - 2592 , - 319 , - 1946 , - 193 , - 260 , - 3187 , - 1694 , - 981 , - 2088 , - 1895 , - 1442 , - 1769 , - 3916 , - 603 , - 1190 , - 2557 , - 1584 , - 3471 , - 938 , - 3345 , - 3412 , - 2179 , - 686 , - 4133 , - 1080 , - 887 , - 434 , - 761 , - 2908 , - 3755 , - 182 , - 1549 , - 576 , - 2463 , - 4090 , - 2337 , - 2404 , - 1171 , - 3838 , - 3125 , - 72 , - 4039 , - 3586 , - 3913 , - 1900 , - 2747 , - 3334 , - 541 , - 3728 , - 1455 , - 3082 , - 1329 , - 1396 , - 163 , - 2830 , - 2117 , - 3224 , - 3031 , - 2578 , - 2905 , - 892 , - 1739 , - 2326 , - 3693 , - 2720 , - 447 , - 2074 , - 321 , - 388 , - 3315 , - 1822 , - 1109 , - 2216 , - 2023 , - 1570 , - 1897 , - 4044 , - 731 , - 1318 , - 2685 , - 1712 , - 3599 , - 1066 , - 3473 , - 3540 , - 2307 , - 814 , - 101 , - 1208 , - 1015 , - 562 , - 889 , - 3036 , - 3883 , - 310 , - 1677 , - 704 , - 2591 , - 58 , - 2465 , - 2532 , - 1299 , - 3966 , - 3253 , - 200 , - 7 , - 3714 , - 4041 , - 2028 , - 2875 , - 3462 , - 669 , - 3856 , - 1583 , - 3210 , - 1457 , - 1524 , - 291 , - 2958 , - 2245 , - 3352 , - 3159 , - 2706 , - 3033 , - 1020 , - 1867 , - 2454 , - 3821 , - 2848 , - 575 , - 2202 , - 449 , - 516 , - 3443 , - 1950 , - 1237 , - 2344 , - 2151 , - 1698 , - 2025 , - 12 , - 859 , - 1446 , - 2813 , - 1840 , - 3727 , - 1194 , - 3601 , - 3668 , - 2435 , - 942 , - 229 , - 1336 , - 1143 , - 690 , - 1017 , - 3164 , - 4011 , - 438 , - 1805 , - 832 , - 2719 , - 186 , - 2593 , - 2660 , - 1427 , - 4094 , - 3381 , - 328 , - 135 , - 3842 , - 9 , - 2156 , - 3003 , - 3590 , - 797 , - 3984 , - 1711 , - 3338 , - 1585 , - 1652 , - 419 , - 3086 , - 2373 , - 3480 , - 3287 , - 2834 , - 3161 , - 1148 , - 1995 , - 2582 , - 3949 , - 2976 , - 703 , - 2330 , - 577 , - 644 , - 3571 , - 2078 , - 1365 , - 2472 , - 2279 , - 1826 , - 2153 , - 140 , - 987 , - 1574 , - 2941 , - 1968 , - 3855 , - 1322 , - 3729 , - 3796 , - 2563 , - 1070 , - 357 , - 1464 , - 1271 , - 818 , - 1145 , - 3292 , - 4139 , - 566 , - 1933 , - 960 , - 2847 , - 314 , - 2721 , - 2788 , - 1555 , - 62 , - 3509 , - 456 , - 263 , - 3970 , - 137 , - 2284 , - 3131 , - 3718 , - 925 , - 4112 , - 1839 , - 3466 , - 1713 , - 1780 , - 547 , - 3214 , - 2501 , - 3608 , - 3415 , - 2962 , - 3289 , - 1276 , - 2123 , - 2710 , - 4077 , - 3104 , - 831 , - 2458 , - 705 , - 772 , - 3699 , - 2206 , - 1493 , - 2600 , - 2407 , - 1954 , - 2281 , - 268 , - 1115 , - 1702 , - 3069 , - 2096 , - 3983 , - 1450 , - 3857 , - 3924 , - 2691 , - 1198 , - 485 , - 1592 , - 1399 , - 946 , - 1273 , - 3420 , - 107 , - 694 , - 2061 , - 1088 , - 2975 , - 442 , - 2849 , - 2916 , - 1683 , - 190 , - 3637 , - 584 , - 391 , - 4098 , - 265 , - 2412 , - 3259 , - 3846 , - 1053 , - 80 , - 1967 , - 3594 , - 1841 , - 1908 , - 675 , - 3342 , - 2629 , - 3736 , - 3543 , - 3090 , - 3417 , - 1404 , - 2251 , - 2838 , - 45 , - 3232 , - 959 , - 2586 , - 833 , - 900 , - 3827 , - 2334 , - 1621 , - 2728 , - 2535 , - 2082 , - 2409 , - 396 , - 1243 , - 1830 , - 3197 , - 2224 , - 4111 , - 1578 , - 3985 , - 4052 , - 2819 , - 1326 , - 613 , - 1720 , - 1527 , - 1074 , - 1401 , - 3548 , - 235 , - 822 , - 2189 , - 1216 , - 3103 , - 570 , - 2977 , - 3044 , - 1811 , - 318 , - 3765 , - 712 , - 519 , - 66 , - 393 , - 2540 , - 3387 , - 3974 , - 1181 , - 208 , - 2095 , - 3722 , - 1969 , - 2036 , - 803 , - 3470 , - 2757 , - 3864 , - 3671 , - 3218 , - 3545 , - 1532 , - 2379 , - 2966 , - 173 , - 3360 , - 1087 , - 2714 , - 961 , - 1028 , - 3955 , - 2462 , - 1749 , - 2856 , - 2663 , - 2210 , - 2537 , - 524 , - 1371 , - 1958 , - 3325 , - 2352 , - 79 , - 1706 , - 4113 , - 20 , - 2947 , - 1454 , - 741 , - 1848 , - 1655 , - 1202 , - 1529 , - 3676 , - 363 , - 950 , - 2317 , - 1344 , - 3231 , - 698 , - 3105 , - 3172 , - 1939 , - 446 , - 3893 , - 840 , - 647 , - 194 , - 521 , - 2668 , - 3515 , - 4102 , - 1309 , - 336 , - 2223 , - 3850 , - 2097 , - 2164 , - 931 , - 3598 , - 2885 , - 3992 , - 3799 , - 3346 , - 3673 , - 1660 , - 2507 , - 3094 , - 301 , - 3488 , - 1215 , - 2842 , - 1089 , - 1156 , - 4083 , - 2590 , - 1877 , - 2984 , - 2791 , - 2338 , - 2665 , - 652 , - 1499 , - 2086 , - 3453 , - 2480 , - 207 , - 1834 , - 81 , - 148 , - 3075 , - 1582 , - 869 , - 1976 , - 1783 , - 1330 , - 1657 , - 3804 , - 491 , - 1078 , - 2445 , - 1472 , - 3359 , - 826 , - 3233 , - 3300 , - 2067 , - 574 , - 4021 , - 968 , - 775 , - 322 , - 649 , - 2796 , - 3643 , - 70 , - 1437 , - 464 , - 2351 , - 3978 , - 2225 , - 2292 , - 1059 , - 3726 , - 3013 , - 4120 , - 3927 , - 3474 , - 3801 , - 1788 , - 2635 , - 3222 , - 429 , - 3616 , - 1343 , - 2970 , - 1217 , - 1284 , - 51 , - 2718 , - 2005 , - 3112 , - 2919 , - 2466 , - 2793 , - 780 , - 1627 , - 2214 , - 3581 , - 2608 , - 335 , - 1962 , - 209 , - 276 , - 3203 , - 1710 , - 997 , - 2104 , - 1911 , - 1458 , - 1785 , - 3932 , - 619 , - 1206 , - 2573 , - 1600 , - 3487 , - 954 , - 3361 , - 3428 , - 2195 , - 702 , - 4149 , - 1096 , - 903 , - 450 , - 777 , - 2924 , - 3771 , - 198 , - 1565 , - 592 , - 2479 , - 4106 , - 2353 , - 2420 , - 1187 , - 3854 , - 3141 , - 88 , - 4055 , - 3602 , - 3929 , - 1916 , - 2763 , - 3350 , - 557 , - 3744 , - 1471 , - 3098 , - 1345 , - 1412 , - 179 , - 2846 , - 2133 , - 3240 , - 3047 , - 2594 , - 2921 , - 908 , - 1755 , - 2342 , - 3709 , - 2736 , - 463 , - 2090 , - 337 , - 404 , - 3331 , - 1838 , - 1125 , - 2232 , - 2039 , - 1586 , - 1913 , - 4060 , - 747 , - 1334 , - 2701 , - 1728 , - 3615 , - 1082 , - 3489 , - 3556 , - 2323 , - 830 , - 117 , - 1224 , - 1031 , - 578 , - 905 , - 3052 , - 3899 , - 326 , - 1693 , - 720 , - 2607 , - 74 , - 2481 , - 2548 , - 1315 , - 3982 , - 3269 , - 216 , - 23 , - 3730 , - 4057 , - 2044 , - 2891 , - 3478 , - 685 , - 3872 , - 1599 , - 3226 , - 1473 , - 1540 , - 307 , - 2974 , - 2261 , - 3368 , - 3175 , - 2722 , - 3049 , - 1036 , - 1883 , - 2470 , - 3837 , - 2864 , - 591 , - 2218 , - 465 , - 532 , - 3459 , - 1966 , - 1253 , - 2360 , - 2167 , - 1714 , - 2041 , - 28 , - 875 , - 1462 , - 2829 , - 1856 , - 3743 , - 1210 , - 3617 , - 3684 , - 2451 , - 958 , - 245 , - 1352 , - 1159 , - 706 , - 1033 , - 3180 , - 4027 , - 454 , - 1821 , - 848 , - 2735 , - 202 , - 2609 , - 2676 , - 1443 , - 4110 , - 3397 , - 344 , - 151 , - 3858 , - 25 , - 2172 , - 3019 , - 3606 , - 813 , - 4000 , - 1727 , - 3354 , - 1601 , - 1668 , - 435 , - 3102 , - 2389 , - 3496 , - 3303 , - 2850 , - 3177 , - 1164 , - 2011 , - 2598 , - 3965 , - 2992 , - 719 , - 2346 , - 593 , - 660 , - 3587 , - 2094 , - 1381 , - 2488 , - 2295 , - 1842 , - 2169 , - 156 , - 1003 , - 1590 , - 2957 , - 1984 , - 3871 , - 1338 , - 3745 , - 3812 , - 2579 , - 1086 , - 373 , - 1480 , - 1287 , - 834 , - 1161 , - 3308 , - 4155 , - 582 , - 1949 , - 976 , - 2863 , - 330 , - 2737 , - 2804 , - 1571 , - 78 , - 3525 , - 472 , - 279 , - 3986 , - 153 , - 2300 , - 3147 , - 3734 , - 941 , - 4128 , - 1855 , - 3482 , - 1729 , - 1796 , - 563 , - 3230 , - 2517 , - 3624 , - 3431 , - 2978 , - 3305 , - 1292 , - 2139 , - 2726 , - 4093 , - 3120 , - 847 , - 2474 , - 721 , - 788 , - 3715 , - 2222 , - 1509 , - 2616 , - 2423 , - 1970 , - 2297 , - 284 , - 1131 , - 1718 , - 3085 , - 2112 , - 3999 , - 1466 , - 3873 , - 3940 , - 2707 , - 1214 , - 501 , - 1608 , - 1415 , - 962 , - 1289 , - 3436 , - 123 , - 710 , - 2077 , - 1104 , - 2991 , - 458 , - 2865 , - 2932 , - 1699 , - 206 , - 3653 , - 600 , - 407 , - 4114 , - 281 , - 2428 , - 3275 , - 3862 , - 1069 , - 96 , - 1983 , - 3610 , - 1857 , - 1924 , - 691 , - 3358 , - 2645 , - 3752 , - 3559 , - 3106 , - 3433 , - 1420 , - 2267 , - 2854 , - 61 , - 3248 , - 975 , - 2602 , - 849 , - 916 , - 3843 , - 2350 , - 1637 , - 2744 , - 2551 , - 2098 , - 2425 , - 412 , - 1259 , - 1846 , - 3213 , - 2240 , - 4127 , - 1594 , - 4001 , - 4068 , - 2835 , - 1342 , - 629 , - 1736 , - 1543 , - 1090 , - 1417 , - 3564 , - 251 , - 838 , - 2205 , - 1232 , - 3119 , - 586 , - 2993 , - 3060 , - 1827 , - 334 , - 3781 , - 728 , - 535 , - 82 , - 409 , - 2556 , - 3403 , - 3990 , - 1197 , - 224 , - 2111 , - 3738 , - 1985 , - 2052 , - 819 , - 3486 , - 2773 , - 3880 , - 3687 , - 3234 , - 3561 , - 1548 , - 2395 , - 2982 , - 189 , - 3376 , - 1103 , - 2730 , - 977 , - 1044 , - 3971 , - 2478 , - 1765 , - 2872 , - 2679 , - 2226 , - 2553 , - 540 , - 1387 , - 1974 , - 3341 , - 2368 , - 95 , - 1722 , - 4129 , - 36 , - 2963 , - 1470 , - 757 , - 1864 , - 1671 , - 1218 , - 1545 , - 3692 , - 379 , - 966 , - 2333 , - 1360 , - 3247 , - 714 , - 3121 , - 3188 , - 1955 , - 462 , - 3909 , - 856 , - 663 , - 210 , - 537 , - 2684 , - 3531 , - 4118 , - 1325 , - 352 , - 2239 , - 3866 , - 2113 , - 2180 , - 947 , - 3614 , - 2901 , - 4008 , - 3815 , - 3362 , - 3689 , - 1676 , - 2523 , - 3110 , - 317 , - 3504 , - 1231 , - 2858 , - 1105 , - 1172 , - 4099 , - 2606 , - 1893 , - 3000 , - 2807 , - 2354 , - 2681 , - 668 , - 1515 , - 2102 , - 3469 , - 2496 , - 223 , - 1850 , - 97 , - 164 , - 3091 , - 1598 , - 885 , - 1992 , - 1799 , - 1346 , - 1673 , - 3820 , - 507 , - 1094 , - 2461 , - 1488 , - 3375 , - 842 , - 3249 , - 3316 , - 2083 , - 590 , - 4037 , - 984 , - 791 , - 338 , - 665 , - 2812 , - 3659 , - 86 , - 1453 , - 480 , - 2367 , - 3994 , - 2241 , - 2308 , - 1075 , - 3742 , - 3029 , - 4136 , - 3943 , - 3490 , - 3817 , - 1804 , - 2651 , - 3238 , - 445 , - 3632 , - 1359 , - 2986 , - 1233 , - 1300 , - 67 , - 2734 , - 2021 , - 3128 , - 2935 , - 2482 , - 2809 , - 796 , - 1643 , - 2230 , - 3597 , - 2624 , - 351 , - 1978 , - 225 , - 292 , - 3219 , - 1726 , - 1013 , - 2120 , - 1927 , - 1474 , - 1801 , - 3948 , - 635 , - 1222 , - 2589 , - 1616 , - 3503 , - 970 , - 3377 , - 3444 , - 2211 , - 718 , - 5 , - 1112 , - 919 , - 466 , - 793 , - 2940 , - 3787 , - 214 , - 1581 , - 608 , - 2495 , - 4122 , - 2369 , - 2436 , - 1203 , - 3870 , - 3157 , - 104 , - 4071 , - 3618 , - 3945 , - 1932 , - 2779 , - 3366 , - 573 , - 3760 , - 1487 , - 3114 , - 1361 , - 1428 , - 195 , - 2862 , - 2149 , - 3256 , - 3063 , - 2610 , - 2937 , - 924 , - 1771 , - 2358 , - 3725 , - 2752 , - 479 , - 2106 , - 353 , - 420 , - 3347 , - 1854 , - 1141 , - 2248 , - 2055 , - 1602 , - 1929 , - 4076 , - 763 , - 1350 , - 2717 , - 1744 , - 3631 , - 1098 , - 3505 , - 3572 , - 2339 , - 846 , - 133 , - 1240 , - 1047 , - 594 , - 921 , - 3068 , - 3915 , - 342 , - 1709 , - 736 , - 2623 , - 90 , - 2497 , - 2564 , - 1331 , - 3998 , - 3285 , - 232 , - 39 , - 3746 , - 4073 , - 2060 , - 2907 , - 3494 , - 701 , - 3888 , - 1615 , - 3242 , - 1489 , - 1556 , - 323 , - 2990 , - 2277 , - 3384 , - 3191 , - 2738 , - 3065 , - 1052 , - 1899 , - 2486 , - 3853 , - 2880 , - 607 , - 2234 , - 481 , - 548 , - 3475 , - 1982 , - 1269 , - 2376 , - 2183 , - 1730 , - 2057 , - 44 , - 891 , - 1478 , - 2845 , - 1872 , - 3759 , - 1226 , - 3633 , - 3700 , - 2467 , - 974 , - 261 , - 1368 , - 1175 , - 722 , - 1049 , - 3196 , - 4043 , - 470 , - 1837 , - 864 , - 2751 , - 218 , - 2625 , - 2692 , - 1459 , - 4126 , - 3413 , - 360 , - 167 , - 3874 , - 41 , - 2188 , - 3035 , - 3622 , - 829 , - 4016 , - 1743 , - 3370 , - 1617 , - 1684 , - 451 , - 3118 , - 2405 , - 3512 , - 3319 , - 2866 , - 3193 , - 1180 , - 2027 , - 2614 , - 3981 , - 3008 , - 735 , - 2362 , - 609 , - 676 , - 3603 , - 2110 , - 1397 , - 2504 , - 2311 , - 1858 , - 2185 , - 172 , - 1019 , - 1606 , - 2973 , - 2000 , - 3887 , - 1354 , - 3761 , - 3828 , - 2595 , - 1102 , - 389 , - 1496 , - 1303 , - 850 , - 1177 , - 3324 , - 11 , - 598 , - 1965 , - 992 , - 2879 , - 346 , - 2753 , - 2820 , - 1587 , - 94 , - 3541 , - 488 , - 295 , - 4002 , - 169 , - 2316 , - 3163 , - 3750 , - 957 , - 4144 , - 1871 , - 3498 , - 1745 , - 1812 , - 579 , - 3246 , - 2533 , - 3640 , - 3447 , - 2994 , - 3321 , - 1308 , - 2155 , - 2742 , - 4109 , - 3136 , - 863 , - 2490 , - 737 , - 804 , - 3731 , - 2238 , - 1525 , - 2632 , - 2439 , - 1986 , - 2313 , - 300 , - 1147 , - 1734 , - 3101 , - 2128 , - 4015 , - 1482 , - 3889 , - 3956 , - 2723 , - 1230 , - 517 , - 1624 , - 1431 , - 978 , - 1305 , - 3452 , - 139 , - 726 , - 2093 , - 1120 , - 3007 , - 474 , - 2881 , - 2948 , - 1715 , - 222 , - 3669 , - 616 , - 423 , - 4130 , - 297 , - 2444 , - 3291 , - 3878 , - 1085 , - 112 , - 1999 , - 3626 , - 1873 , - 1940 , - 707 , - 3374 , - 2661 , - 3768 , - 3575 , - 3122 , - 3449 , - 1436 , - 2283 , - 2870 , - 77 , - 3264 , - 991 , - 2618 , - 865 , - 932 , - 3859 , - 2366 , - 1653 , - 2760 , - 2567 , - 2114 , - 2441 , - 428 , - 1275 , - 1862 , - 3229 , - 2256 , - 4143 , - 1610 , - 4017 , - 4084 , - 2851 , - 1358 , - 645 , - 1752 , - 1559 , - 1106 , - 1433 , - 3580 , - 267 , - 854 , - 2221 , - 1248 , - 3135 , - 602 , - 3009 , - 3076 , - 1843 , - 350 , - 3797 , - 744 , - 551 , - 98 , - 425 , - 2572 , - 3419 , - 4006 , - 1213 , - 240 , - 2127 , - 3754 , - 2001 , - 2068 , - 835 , - 3502 , - 2789 , - 3896 , - 3703 , - 3250 , - 3577 , - 1564 , - 2411 , - 2998 , - 205 , - 3392 , - 1119 , - 2746 , - 993 , - 1060 , - 3987 , - 2494 , - 1781 , - 2888 , - 2695 , - 2242 , - 2569 , - 556 , - 1403 , - 1990 , - 3357 , - 2384 , - 111 , - 1738 , - 4145 , - 52 , - 2979 , - 1486 , - 773 , - 1880 , - 1687 , - 1234 , - 1561 , - 3708 , - 395 , - 982 , - 2349 , - 1376 , - 3263 , - 730 , - 3137 , - 3204 , - 1971 , - 478 , - 3925 , - 872 , - 679 , - 226 , - 553 , - 2700 , - 3547 , - 4134 , - 1341 , - 368 , - 2255 , - 3882 , - 2129 , - 2196 , - 963 , - 3630 , - 2917 , - 4024 , - 3831 , - 3378 , - 3705 , - 1692 , - 2539 , - 3126 , - 333 , - 3520 , - 1247 , - 2874 , - 1121 , - 1188 , - 4115 , - 2622 , - 1909 , - 3016 , - 2823 , - 2370 , - 2697 , - 684 , - 1531 , - 2118 , - 3485 , - 2512 , - 239 , - 1866 , - 113 , - 180 , - 3107 , - 1614 , - 901 , - 2008 , - 1815 , - 1362 , - 1689 , - 3836 , - 523 , - 1110 , - 2477 , - 1504 , - 3391 , - 858 , - 3265 , - 3332 , - 2099 , - 606 , - 4053 , - 1000 , - 807 , - 354 , - 681 , - 2828 , - 3675 , - 102 , - 1469 , - 496 , - 2383 , - 4010 , - 2257 , - 2324 , - 1091 , - 3758 , - 3045 , - 4152 , - 3959 , - 3506 , - 3833 , - 1820 , - 2667 , - 3254 , - 461 , - 3648 , - 1375 , - 3002 , - 1249 , - 1316 , - 83 , - 2750 , - 2037 , - 3144 , - 2951 , - 2498 , - 2825 , - 812 , - 1659 , - 2246 , - 3613 , - 2640 , - 367 , - 1994 , - 241 , - 308 , - 3235 , - 1742 , - 1029 , - 2136 , - 1943 , - 1490 , - 1817 , - 3964 , - 651 , - 1238 , - 2605 , - 1632 , - 3519 , - 986 , - 3393 , - 3460 , - 2227 , - 734 , - 21 , - 1128 , - 935 , - 482 , - 809 , - 2956 , - 3803 , - 230 , - 1597 , - 624 , - 2511 , - 4138 , - 2385 , - 2452 , - 1219 , - 3886 , - 3173 , - 120 , - 4087 , - 3634 , - 3961 , - 1948 , - 2795 , - 3382 , - 589 , - 3776 , - 1503 , - 3130 , - 1377 , - 1444 , - 211 , - 2878 , - 2165 , - 3272 , - 3079 , - 2626 , - 2953 , - 940 , - 1787 , - 2374 , - 3741 , - 2768 , - 495 , - 2122 , - 369 , - 436 , - 3363 , - 1870 , - 1157 , - 2264 , - 2071 , - 1618 , - 1945 , - 4092 , - 779 , - 1366 , - 2733 , - 1760 , - 3647 , - 1114 , - 3521 , - 3588 , - 2355 , - 862 , - 149 , - 1256 , - 1063 , - 610 , - 937 , - 3084 , - 3931 , - 358 , - 1725 , - 752 , - 2639 , - 106 , - 2513 , - 2580 , - 1347 , - 4014 , - 3301 , - 248 , - 55 , - 3762 , - 4089 , - 2076 , - 2923 , - 3510 , - 717 , - 3904 , - 1631 , - 3258 , - 1505 , - 1572 , - 339 , - 3006 , - 2293 , - 3400 , - 3207 , - 2754 , - 3081 , - 1068 , - 1915 , - 2502 , - 3869 , - 2896 , - 623 , - 2250 , - 497 , - 564 , - 3491 , - 1998 , - 1285 , - 2392 , - 2199 , - 1746 , - 2073 , - 60 , - 907 , - 1494 , - 2861 , - 1888 , - 3775 , - 1242 , - 3649 , - 3716 , - 2483 , - 990 , - 277 , - 1384 , - 1191 , - 738 , - 1065 , - 3212 , - 4059 , - 486 , - 1853 , - 880 , - 2767 , - 234 , - 2641 , - 2708 , - 1475 , - 4142 , - 3429 , - 376 , - 183 , - 3890 , - 57 , - 2204 , - 3051 , - 3638 , - 845 , - 4032 , - 1759 , - 3386 , - 1633 , - 1700 , - 467 , - 3134 , - 2421 , - 3528 , - 3335 , - 2882 , - 3209 , - 1196 , - 2043 , - 2630 , - 3997 , - 3024 , - 751 , - 2378 , - 625 , - 692 , - 3619 , - 2126 , - 1413 , - 2520 , - 2327 , - 1874 , - 2201 , - 188 , - 1035 , - 1622 , - 2989 , - 2016 , - 3903 , - 1370 , - 3777 , - 3844 , - 2611 , - 1118 , - 405 , - 1512 , - 1319 , - 866 , - 1193 , - 3340 , - 27 , - 614 , - 1981 , - 1008 , - 2895 , - 362 , - 2769 , - 2836 , - 1603 , - 110 , - 3557 , - 504 , - 311 , - 4018 , - 185 , - 2332 , - 3179 , - 3766 , - 973 , - 0 , - 43 , - 2726 , - 3825 , - 3340 , - 1271 , - 1842 , - 829 , - 2456 , - 2499 , - 958 , - 2057 , - 1572 , - 3727 , - 74 , - 3285 , - 688 , - 731 , - 3414 , - 289 , - 4028 , - 1959 , - 2530 , - 1517 , - 3144 , - 3187 , - 1646 , - 2745 , - 2260 , - 191 , - 762 , - 3973 , - 1376 , - 1419 , - 4102 , - 977 , - 492 , - 2647 , - 3218 , - 2205 , - 3832 , - 3875 , - 2334 , - 3433 , - 2948 , - 879 , - 1450 , - 437 , - 2064 , - 2107 , - 566 , - 1665 , - 1180 , - 3335 , - 3906 , - 2893 , - 296 , - 339 , - 3022 , - 4121 , - 3636 , - 1567 , - 2138 , - 1125 , - 2752 , - 2795 , - 1254 , - 2353 , - 1868 , - 4023 , - 370 , - 3581 , - 984 , - 1027 , - 3710 , - 585 , - 100 , - 2255 , - 2826 , - 1813 , - 3440 , - 3483 , - 1942 , - 3041 , - 2556 , - 487 , - 1058 , - 45 , - 1672 , - 1715 , - 174 , - 1273 , - 788 , - 2943 , - 3514 , - 2501 , - 4128 , - 4171 , - 2630 , - 3729 , - 3244 , - 1175 , - 1746 , - 733 , - 2360 , - 2403 , - 862 , - 1961 , - 1476 , - 3631 , - 4202 , - 3189 , - 592 , - 635 , - 3318 , - 193 , - 3932 , - 1863 , - 2434 , - 1421 , - 3048 , - 3091 , - 1550 , - 2649 , - 2164 , - 95 , - 666 , - 3877 , - 1280 , - 1323 , - 4006 , - 881 , - 396 , - 2551 , - 3122 , - 2109 , - 3736 , - 3779 , - 2238 , - 3337 , - 2852 , - 783 , - 1354 , - 341 , - 1968 , - 2011 , - 470 , - 1569 , - 1084 , - 3239 , - 3810 , - 2797 , - 200 , - 243 , - 2926 , - 4025 , - 3540 , - 1471 , - 2042 , - 1029 , - 2656 , - 2699 , - 1158 , - 2257 , - 1772 , - 3927 , - 274 , - 3485 , - 888 , - 931 , - 3614 , - 489 , - 4 , - 2159 , - 2730 , - 1717 , - 3344 , - 3387 , - 1846 , - 2945 , - 2460 , - 391 , - 962 , - 4173 , - 1576 , - 1619 , - 78 , - 1177 , - 692 , - 2847 , - 3418 , - 2405 , - 4032 , - 4075 , - 2534 , - 3633 , - 3148 , - 1079 , - 1650 , - 637 , - 2264 , - 2307 , - 766 , - 1865 , - 1380 , - 3535 , - 4106 , - 3093 , - 496 , - 539 , - 3222 , - 97 , - 3836 , - 1767 , - 2338 , - 1325 , - 2952 , - 2995 , - 1454 , - 2553 , - 2068 , - 4223 , - 570 , - 3781 , - 1184 , - 1227 , - 3910 , - 785 , - 300 , - 2455 , - 3026 , - 2013 , - 3640 , - 3683 , - 2142 , - 3241 , - 2756 , - 687 , - 1258 , - 245 , - 1872 , - 1915 , - 374 , - 1473 , - 988 , - 3143 , - 3714 , - 2701 , - 104 , - 147 , - 2830 , - 3929 , - 3444 , - 1375 , - 1946 , - 933 , - 2560 , - 2603 , - 1062 , - 2161 , - 1676 , - 3831 , - 178 , - 3389 , - 792 , - 835 , - 3518 , - 393 , - 4132 , - 2063 , - 2634 , - 1621 , - 3248 , - 3291 , - 1750 , - 2849 , - 2364 , - 295 , - 866 , - 4077 , - 1480 , - 1523 , - 4206 , - 1081 , - 596 , - 2751 , - 3322 , - 2309 , - 3936 , - 3979 , - 2438 , - 3537 , - 3052 , - 983 , - 1554 , - 541 , - 2168 , - 2211 , - 670 , - 1769 , - 1284 , - 3439 , - 4010 , - 2997 , - 400 , - 443 , - 3126 , - 1 , - 3740 , - 1671 , - 2242 , - 1229 , - 2856 , - 2899 , - 1358 , - 2457 , - 1972 , - 4127 , - 474 , - 3685 , - 1088 , - 1131 , - 3814 , - 689 , - 204 , - 2359 , - 2930 , - 1917 , - 3544 , - 3587 , - 2046 , - 3145 , - 2660 , - 591 , - 1162 , - 149 , - 1776 , - 1819 , - 278 , - 1377 , - 892 , - 3047 , - 3618 , - 2605 , - 8 , - 51 , - 2734 , - 3833 , - 3348 , - 1279 , - 1850 , - 837 , - 2464 , - 2507 , - 966 , - 2065 , - 1580 , - 3735 , - 82 , - 3293 , - 696 , - 739 , - 3422 , - 297 , - 4036 , - 1967 , - 2538 , - 1525 , - 3152 , - 3195 , - 1654 , - 2753 , - 2268 , - 199 , - 770 , - 3981 , - 1384 , - 1427 , - 4110 , - 985 , - 500 , - 2655 , - 3226 , - 2213 , - 3840 , - 3883 , - 2342 , - 3441 , - 2956 , - 887 , - 1458 , - 445 , - 2072 , - 2115 , - 574 , - 1673 , - 1188 , - 3343 , - 3914 , - 2901 , - 304 , - 347 , - 3030 , - 4129 , - 3644 , - 1575 , - 2146 , - 1133 , - 2760 , - 2803 , - 1262 , - 2361 , - 1876 , - 4031 , - 378 , - 3589 , - 992 , - 1035 , - 3718 , - 593 , - 108 , - 2263 , - 2834 , - 1821 , - 3448 , - 3491 , - 1950 , - 3049 , - 2564 , - 495 , - 1066 , - 53 , - 1680 , - 1723 , - 182 , - 1281 , - 796 , - 2951 , - 3522 , - 2509 , - 4136 , - 4179 , - 2638 , - 3737 , - 3252 , - 1183 , - 1754 , - 741 , - 2368 , - 2411 , - 870 , - 1969 , - 1484 , - 3639 , - 4210 , - 3197 , - 600 , - 643 , - 3326 , - 201 , - 3940 , - 1871 , - 2442 , - 1429 , - 3056 , - 3099 , - 1558 , - 2657 , - 2172 , - 103 , - 674 , - 3885 , - 1288 , - 1331 , - 4014 , - 889 , - 404 , - 2559 , - 3130 , - 2117 , - 3744 , - 3787 , - 2246 , - 3345 , - 2860 , - 791 , - 1362 , - 349 , - 1976 , - 2019 , - 478 , - 1577 , - 1092 , - 3247 , - 3818 , - 2805 , - 208 , - 251 , - 2934 , - 4033 , - 3548 , - 1479 , - 2050 , - 1037 , - 2664 , - 2707 , - 1166 , - 2265 , - 1780 , - 3935 , - 282 , - 3493 , - 896 , - 939 , - 3622 , - 497 , - 12 , - 2167 , - 2738 , - 1725 , - 3352 , - 3395 , - 1854 , - 2953 , - 2468 , - 399 , - 970 , - 4181 , - 1584 , - 1627 , - 86 , - 1185 , - 700 , - 2855 , - 3426 , - 2413 , - 4040 , - 4083 , - 2542 , - 3641 , - 3156 , - 1087 , - 1658 , - 645 , - 2272 , - 2315 , - 774 , - 1873 , - 1388 , - 3543 , - 4114 , - 3101 , - 504 , - 547 , - 3230 , - 105 , - 3844 , - 1775 , - 2346 , - 1333 , - 2960 , - 3003 , - 1462 , - 2561 , - 2076 , - 7 , - 578 , - 3789 , - 1192 , - 1235 , - 3918 , - 793 , - 308 , - 2463 , - 3034 , - 2021 , - 3648 , - 3691 , - 2150 , - 3249 , - 2764 , - 695 , - 1266 , - 253 , - 1880 , - 1923 , - 382 , - 1481 , - 996 , - 3151 , - 3722 , - 2709 , - 112 , - 155 , - 2838 , - 3937 , - 3452 , - 1383 , - 1954 , - 941 , - 2568 , - 2611 , - 1070 , - 2169 , - 1684 , - 3839 , - 186 , - 3397 , - 800 , - 843 , - 3526 , - 401 , - 4140 , - 2071 , - 2642 , - 1629 , - 3256 , - 3299 , - 1758 , - 2857 , - 2372 , - 303 , - 874 , - 4085 , - 1488 , - 1531 , - 4214 , - 1089 , - 604 , - 2759 , - 3330 , - 2317 , - 3944 , - 3987 , - 2446 , - 3545 , - 3060 , - 991 , - 1562 , - 549 , - 2176 , - 2219 , - 678 , - 1777 , - 1292 , - 3447 , - 4018 , - 3005 , - 408 , - 451 , - 3134 , - 9 , - 3748 , - 1679 , - 2250 , - 1237 , - 2864 , - 2907 , - 1366 , - 2465 , - 1980 , - 4135 , - 482 , - 3693 , - 1096 , - 1139 , - 3822 , - 697 , - 212 , - 2367 , - 2938 , - 1925 , - 3552 , - 3595 , - 2054 , - 3153 , - 2668 , - 599 , - 1170 , - 157 , - 1784 , - 1827 , - 286 , - 1385 , - 900 , - 3055 , - 3626 , - 2613 , - 16 , - 59 , - 2742 , - 3841 , - 3356 , - 1287 , - 1858 , - 845 , - 2472 , - 2515 , - 974 , - 2073 , - 1588 , - 3743 , - 90 , - 3301 , - 704 , - 747 , - 3430 , - 305 , - 4044 , - 1975 , - 2546 , - 1533 , - 3160 , - 3203 , - 1662 , - 2761 , - 2276 , - 207 , - 778 , - 3989 , - 1392 , - 1435 , - 4118 , - 993 , - 508 , - 2663 , - 3234 , - 2221 , - 3848 , - 3891 , - 2350 , - 3449 , - 2964 , - 895 , - 1466 , - 453 , - 2080 , - 2123 , - 582 , - 1681 , - 1196 , - 3351 , - 3922 , - 2909 , - 312 , - 355 , - 3038 , - 4137 , - 3652 , - 1583 , - 2154 , - 1141 , - 2768 , - 2811 , - 1270 , - 2369 , - 1884 , - 4039 , - 386 , - 3597 , - 1000 , - 1043 , - 3726 , - 601 , - 116 , - 2271 , - 2842 , - 1829 , - 3456 , - 3499 , - 1958 , - 3057 , - 2572 , - 503 , - 1074 , - 61 , - 1688 , - 1731 , - 190 , - 1289 , - 804 , - 2959 , - 3530 , - 2517 , - 4144 , - 4187 , - 2646 , - 3745 , - 3260 , - 1191 , - 1762 , - 749 , - 2376 , - 2419 , - 878 , - 1977 , - 1492 , - 3647 , - 4218 , - 3205 , - 608 , - 651 , - 3334 , - 209 , - 3948 , - 1879 , - 2450 , - 1437 , - 3064 , - 3107 , - 1566 , - 2665 , - 2180 , - 111 , - 682 , - 3893 , - 1296 , - 1339 , - 4022 , - 897 , - 412 , - 2567 , - 3138 , - 2125 , - 3752 , - 3795 , - 2254 , - 3353 , - 2868 , - 799 , - 1370 , - 357 , - 1984 , - 2027 , - 486 , - 1585 , - 1100 , - 3255 , - 3826 , - 2813 , - 216 , - 259 , - 2942 , - 4041 , - 3556 , - 1487 , - 2058 , - 1045 , - 2672 , - 2715 , - 1174 , - 2273 , - 1788 , - 3943 , - 290 , - 3501 , - 904 , - 947 , - 3630 , - 505 , - 20 , - 2175 , - 2746 , - 1733 , - 3360 , - 3403 , - 1862 , - 2961 , - 2476 , - 407 , - 978 , - 4189 , - 1592 , - 1635 , - 94 , - 1193 , - 708 , - 2863 , - 3434 , - 2421 , - 4048 , - 4091 , - 2550 , - 3649 , - 3164 , - 1095 , - 1666 , - 653 , - 2280 , - 2323 , - 782 , - 1881 , - 1396 , - 3551 , - 4122 , - 3109 , - 512 , - 555 , - 3238 , - 113 , - 3852 , - 1783 , - 2354 , - 1341 , - 2968 , - 3011 , - 1470 , - 2569 , - 2084 , - 15 , - 586 , - 3797 , - 1200 , - 1243 , - 3926 , - 801 , - 316 , - 2471 , - 3042 , - 2029 , - 3656 , - 3699 , - 2158 , - 3257 , - 2772 , - 703 , - 1274 , - 261 , - 1888 , - 1931 , - 390 , - 1489 , - 1004 , - 3159 , - 3730 , - 2717 , - 120 , - 163 , - 2846 , - 3945 , - 3460 , - 1391 , - 1962 , - 949 , - 2576 , - 2619 , - 1078 , - 2177 , - 1692 , - 3847 , - 194 , - 3405 , - 808 , - 851 , - 3534 , - 409 , - 4148 , - 2079 , - 2650 , - 1637 , - 3264 , - 3307 , - 1766 , - 2865 , - 2380 , - 311 , - 882 , - 4093 , - 1496 , - 1539 , - 4222 , - 1097 , - 612 , - 2767 , - 3338 , - 2325 , - 3952 , - 3995 , - 2454 , - 3553 , - 3068 , - 999 , - 1570 , - 557 , - 2184 , - 2227 , - 686 , - 1785 , - 1300 , - 3455 , - 4026 , - 3013 , - 416 , - 459 , - 3142 , - 17 , - 3756 , - 1687 , - 2258 , - 1245 , - 2872 , - 2915 , - 1374 , - 2473 , - 1988 , - 4143 , - 490 , - 3701 , - 1104 , - 1147 , - 3830 , - 705 , - 220 , - 2375 , - 2946 , - 1933 , - 3560 , - 3603 , - 2062 , - 3161 , - 2676 , - 607 , - 1178 , - 165 , - 1792 , - 1835 , - 294 , - 1393 , - 908 , - 3063 , - 3634 , - 2621 , - 24 , - 67 , - 2750 , - 3849 , - 3364 , - 1295 , - 1866 , - 853 , - 2480 , - 2523 , - 982 , - 2081 , - 1596 , - 3751 , - 98 , - 3309 , - 712 , - 755 , - 3438 , - 313 , - 4052 , - 1983 , - 2554 , - 1541 , - 3168 , - 3211 , - 1670 , - 2769 , - 2284 , - 215 , - 786 , - 3997 , - 1400 , - 1443 , - 4126 , - 1001 , - 516 , - 2671 , - 3242 , - 2229 , - 3856 , - 3899 , - 2358 , - 3457 , - 2972 , - 903 , - 1474 , - 461 , - 2088 , - 2131 , - 590 , - 1689 , - 1204 , - 3359 , - 3930 , - 2917 , - 320 , - 363 , - 3046 , - 4145 , - 3660 , - 1591 , - 2162 , - 1149 , - 2776 , - 2819 , - 1278 , - 2377 , - 1892 , - 4047 , - 394 , - 3605 , - 1008 , - 1051 , - 3734 , - 609 , - 124 , - 2279 , - 2850 , - 1837 , - 3464 , - 3507 , - 1966 , - 3065 , - 2580 , - 511 , - 1082 , - 69 , - 1696 , - 1739 , - 198 , - 1297 , - 812 , - 2967 , - 3538 , - 2525 , - 4152 , - 4195 , - 2654 , - 3753 , - 3268 , - 1199 , - 1770 , - 757 , - 2384 , - 2427 , - 886 , - 1985 , - 1500 , - 3655 , - 2 , - 3213 , - 616 , - 659 , - 3342 , - 217 , - 3956 , - 1887 , - 2458 , - 1445 , - 3072 , - 3115 , - 1574 , - 2673 , - 2188 , - 119 , - 690 , - 3901 , - 1304 , - 1347 , - 4030 , - 905 , - 420 , - 2575 , - 3146 , - 2133 , - 3760 , - 3803 , - 2262 , - 3361 , - 2876 , - 807 , - 1378 , - 365 , - 1992 , - 2035 , - 494 , - 1593 , - 1108 , - 3263 , - 3834 , - 2821 , - 224 , - 267 , - 2950 , - 4049 , - 3564 , - 1495 , - 2066 , - 1053 , - 2680 , - 2723 , - 1182 , - 2281 , - 1796 , - 3951 , - 298 , - 3509 , - 912 , - 955 , - 3638 , - 513 , - 28 , - 2183 , - 2754 , - 1741 , - 3368 , - 3411 , - 1870 , - 2969 , - 2484 , - 415 , - 986 , - 4197 , - 1600 , - 1643 , - 102 , - 1201 , - 716 , - 2871 , - 3442 , - 2429 , - 4056 , - 4099 , - 2558 , - 3657 , - 3172 , - 1103 , - 1674 , - 661 , - 2288 , - 2331 , - 790 , - 1889 , - 1404 , - 3559 , - 4130 , - 3117 , - 520 , - 563 , - 3246 , - 121 , - 3860 , - 1791 , - 2362 , - 1349 , - 2976 , - 3019 , - 1478 , - 2577 , - 2092 , - 23 , - 594 , - 3805 , - 1208 , - 1251 , - 3934 , - 809 , - 324 , - 2479 , - 3050 , - 2037 , - 3664 , - 3707 , - 2166 , - 3265 , - 2780 , - 711 , - 1282 , - 269 , - 1896 , - 1939 , - 398 , - 1497 , - 1012 , - 3167 , - 3738 , - 2725 , - 128 , - 171 , - 2854 , - 3953 , - 3468 , - 1399 , - 1970 , - 957 , - 2584 , - 2627 , - 1086 , - 2185 , - 1700 , - 3855 , - 202 , - 3413 , - 816 , - 859 , - 3542 , - 417 , - 4156 , - 2087 , - 2658 , - 1645 , - 3272 , - 3315 , - 1774 , - 2873 , - 2388 , - 319 , - 890 , - 4101 , - 1504 , - 1547 , - 6 , - 1105 , - 620 , - 2775 , - 3346 , - 2333 , - 3960 , - 4003 , - 2462 , - 3561 , - 3076 , - 1007 , - 1578 , - 565 , - 2192 , - 2235 , - 694 , - 1793 , - 1308 , - 3463 , - 4034 , - 3021 , - 424 , - 467 , - 3150 , - 25 , - 3764 , - 1695 , - 2266 , - 1253 , - 2880 , - 2923 , - 1382 , - 2481 , - 1996 , - 4151 , - 498 , - 3709 , - 1112 , - 1155 , - 3838 , - 713 , - 228 , - 2383 , - 2954 , - 1941 , - 3568 , - 3611 , - 2070 , - 3169 , - 2684 , - 615 , - 1186 , - 173 , - 1800 , - 1843 , - 302 , - 1401 , - 916 , - 3071 , - 3642 , - 2629 , - 32 , - 75 , - 2758 , - 3857 , - 3372 , - 1303 , - 1874 , - 861 , - 2488 , - 2531 , - 990 , - 2089 , - 1604 , - 3759 , - 106 , - 3317 , - 720 , - 763 , - 3446 , - 321 , - 4060 , - 1991 , - 2562 , - 1549 , - 3176 , - 3219 , - 1678 , - 2777 , - 2292 , - 223 , - 794 , - 4005 , - 1408 , - 1451 , - 4134 , - 1009 , - 524 , - 2679 , - 3250 , - 2237 , - 3864 , - 3907 , - 2366 , - 3465 , - 2980 , - 911 , - 1482 , - 469 , - 2096 , - 2139 , - 598 , - 1697 , - 1212 , - 3367 , - 3938 , - 2925 , - 328 , - 371 , - 3054 , - 4153 , - 3668 , - 1599 , - 2170 , - 1157 , - 2784 , - 2827 , - 1286 , - 2385 , - 1900 , - 4055 , - 402 , - 3613 , - 1016 , - 1059 , - 3742 , - 617 , - 132 , - 2287 , - 2858 , - 1845 , - 3472 , - 3515 , - 1974 , - 3073 , - 2588 , - 519 , - 1090 , - 77 , - 1704 , - 1747 , - 206 , - 1305 , - 820 , - 2975 , - 3546 , - 2533 , - 4160 , - 4203 , - 2662 , - 3761 , - 3276 , - 1207 , - 1778 , - 765 , - 2392 , - 2435 , - 894 , - 1993 , - 1508 , - 3663 , - 10 , - 3221 , - 624 , - 667 , - 3350 , - 225 , - 3964 , - 1895 , - 2466 , - 1453 , - 3080 , - 3123 , - 1582 , - 2681 , - 2196 , - 127 , - 698 , - 3909 , - 1312 , - 1355 , - 4038 , - 913 , - 428 , - 2583 , - 3154 , - 2141 , - 3768 , - 3811 , - 2270 , - 3369 , - 2884 , - 815 , - 1386 , - 373 , - 2000 , - 2043 , - 502 , - 1601 , - 1116 , - 3271 , - 3842 , - 2829 , - 232 , - 275 , - 2958 , - 4057 , - 3572 , - 1503 , - 2074 , - 1061 , - 2688 , - 2731 , - 1190 , - 2289 , - 1804 , - 3959 , - 306 , - 3517 , - 920 , - 963 , - 3646 , - 521 , - 36 , - 2191 , - 2762 , - 1749 , - 3376 , - 3419 , - 1878 , - 2977 , - 2492 , - 423 , - 994 , - 4205 , - 1608 , - 1651 , - 110 , - 1209 , - 724 , - 2879 , - 3450 , - 2437 , - 4064 , - 4107 , - 2566 , - 3665 , - 3180 , - 1111 , - 1682 , - 669 , - 2296 , - 2339 , - 798 , - 1897 , - 1412 , - 3567 , - 4138 , - 3125 , - 528 , - 571 , - 3254 , - 129 , - 3868 , - 1799 , - 2370 , - 1357 , - 2984 , - 3027 , - 1486 , - 2585 , - 2100 , - 31 , - 602 , - 3813 , - 1216 , - 1259 , - 3942 , - 817 , - 332 , - 2487 , - 3058 , - 2045 , - 3672 , - 3715 , - 2174 , - 3273 , - 2788 , - 719 , - 1290 , - 277 , - 1904 , - 1947 , - 406 , - 1505 , - 1020 , - 3175 , - 3746 , - 2733 , - 136 , - 179 , - 2862 , - 3961 , - 3476 , - 1407 , - 1978 , - 965 , - 2592 , - 2635 , - 1094 , - 2193 , - 1708 , - 3863 , - 210 , - 3421 , - 824 , - 867 , - 3550 , - 425 , - 4164 , - 2095 , - 2666 , - 1653 , - 3280 , - 3323 , - 1782 , - 2881 , - 2396 , - 327 , - 898 , - 4109 , - 1512 , - 1555 , - 14 , - 1113 , - 628 , - 2783 , - 3354 , - 2341 , - 3968 , - 4011 , - 2470 , - 3569 , - 3084 , - 1015 , - 1586 , - 573 , - 2200 , - 2243 , - 702 , - 1801 , - 1316 , - 3471 , - 4042 , - 3029 , - 432 , - 475 , - 3158 , - 33 , - 3772 , - 1703 , - 2274 , - 1261 , - 2888 , - 2931 , - 1390 , - 2489 , - 2004 , - 4159 , - 506 , - 3717 , - 1120 , - 1163 , - 3846 , - 721 , - 236 , - 2391 , - 2962 , - 1949 , - 3576 , - 3619 , - 2078 , - 3177 , - 2692 , - 623 , - 1194 , - 181 , - 1808 , - 1851 , - 310 , - 1409 , - 924 , - 3079 , - 3650 , - 2637 , - 40 , - 83 , - 2766 , - 3865 , - 3380 , - 1311 , - 1882 , - 869 , - 2496 , - 2539 , - 998 , - 2097 , - 1612 , - 3767 , - 114 , - 3325 , - 728 , - 771 , - 3454 , - 329 , - 4068 , - 1999 , - 2570 , - 1557 , - 3184 , - 3227 , - 1686 , - 2785 , - 2300 , - 231 , - 802 , - 4013 , - 1416 , - 1459 , - 4142 , - 1017 , - 532 , - 2687 , - 3258 , - 2245 , - 3872 , - 3915 , - 2374 , - 3473 , - 2988 , - 919 , - 1490 , - 477 , - 2104 , - 2147 , - 606 , - 1705 , - 1220 , - 3375 , - 3946 , - 2933 , - 336 , - 379 , - 3062 , - 4161 , - 3676 , - 1607 , - 2178 , - 1165 , - 2792 , - 2835 , - 1294 , - 2393 , - 1908 , - 4063 , - 410 , - 3621 , - 1024 , - 1067 , - 3750 , - 625 , - 140 , - 2295 , - 2866 , - 1853 , - 3480 , - 3523 , - 1982 , - 3081 , - 2596 , - 527 , - 1098 , - 85 , - 1712 , - 1755 , - 214 , - 1313 , - 828 , - 2983 , - 3554 , - 2541 , - 4168 , - 4211 , - 2670 , - 3769 , - 3284 , - 1215 , - 1786 , - 773 , - 2400 , - 2443 , - 902 , - 2001 , - 1516 , - 3671 , - 18 , - 3229 , - 632 , - 675 , - 3358 , - 233 , - 3972 , - 1903 , - 2474 , - 1461 , - 3088 , - 3131 , - 1590 , - 2689 , - 2204 , - 135 , - 706 , - 3917 , - 1320 , - 1363 , - 4046 , - 921 , - 436 , - 2591 , - 3162 , - 2149 , - 3776 , - 3819 , - 2278 , - 3377 , - 2892 , - 823 , - 1394 , - 381 , - 2008 , - 2051 , - 510 , - 1609 , - 1124 , - 3279 , - 3850 , - 2837 , - 240 , - 283 , - 2966 , - 4065 , - 3580 , - 1511 , - 2082 , - 1069 , - 2696 , - 2739 , - 1198 , - 2297 , - 1812 , - 3967 , - 314 , - 3525 , - 928 , - 971 , - 3654 , - 529 , - 44 , - 2199 , - 2770 , - 1757 , - 3384 , - 3427 , - 1886 , - 2985 , - 2500 , - 431 , - 1002 , - 4213 , - 1616 , - 1659 , - 118 , - 1217 , - 732 , - 2887 , - 3458 , - 2445 , - 4072 , - 4115 , - 2574 , - 3673 , - 3188 , - 1119 , - 1690 , - 677 , - 2304 , - 2347 , - 806 , - 1905 , - 1420 , - 3575 , - 4146 , - 3133 , - 536 , - 579 , - 3262 , - 137 , - 3876 , - 1807 , - 2378 , - 1365 , - 2992 , - 3035 , - 1494 , - 2593 , - 2108 , - 39 , - 610 , - 3821 , - 1224 , - 1267 , - 3950 , - 825 , - 340 , - 2495 , - 3066 , - 2053 , - 3680 , - 3723 , - 2182 , - 3281 , - 2796 , - 727 , - 1298 , - 285 , - 1912 , - 1955 , - 414 , - 1513 , - 1028 , - 3183 , - 3754 , - 2741 , - 144 , - 187 , - 2870 , - 3969 , - 3484 , - 1415 , - 1986 , - 973 , - 2600 , - 2643 , - 1102 , - 2201 , - 1716 , - 3871 , - 218 , - 3429 , - 832 , - 875 , - 3558 , - 433 , - 4172 , - 2103 , - 2674 , - 1661 , - 3288 , - 3331 , - 1790 , - 2889 , - 2404 , - 335 , - 906 , - 4117 , - 1520 , - 1563 , - 22 , - 1121 , - 636 , - 2791 , - 3362 , - 2349 , - 3976 , - 4019 , - 2478 , - 3577 , - 3092 , - 1023 , - 1594 , - 581 , - 2208 , - 2251 , - 710 , - 1809 , - 1324 , - 3479 , - 4050 , - 3037 , - 440 , - 483 , - 3166 , - 41 , - 3780 , - 1711 , - 2282 , - 1269 , - 2896 , - 2939 , - 1398 , - 2497 , - 2012 , - 4167 , - 514 , - 3725 , - 1128 , - 1171 , - 3854 , - 729 , - 244 , - 2399 , - 2970 , - 1957 , - 3584 , - 3627 , - 2086 , - 3185 , - 2700 , - 631 , - 1202 , - 189 , - 1816 , - 1859 , - 318 , - 1417 , - 932 , - 3087 , - 3658 , - 2645 , - 48 , - 91 , - 2774 , - 3873 , - 3388 , - 1319 , - 1890 , - 877 , - 2504 , - 2547 , - 1006 , - 2105 , - 1620 , - 3775 , - 122 , - 3333 , - 736 , - 779 , - 3462 , - 337 , - 4076 , - 2007 , - 2578 , - 1565 , - 3192 , - 3235 , - 1694 , - 2793 , - 2308 , - 239 , - 810 , - 4021 , - 1424 , - 1467 , - 4150 , - 1025 , - 540 , - 2695 , - 3266 , - 2253 , - 3880 , - 3923 , - 2382 , - 3481 , - 2996 , - 927 , - 1498 , - 485 , - 2112 , - 2155 , - 614 , - 1713 , - 1228 , - 3383 , - 3954 , - 2941 , - 344 , - 387 , - 3070 , - 4169 , - 3684 , - 1615 , - 2186 , - 1173 , - 2800 , - 2843 , - 1302 , - 2401 , - 1916 , - 4071 , - 418 , - 3629 , - 1032 , - 1075 , - 3758 , - 633 , - 148 , - 2303 , - 2874 , - 1861 , - 3488 , - 3531 , - 1990 , - 3089 , - 2604 , - 535 , - 1106 , - 93 , - 1720 , - 1763 , - 222 , - 1321 , - 836 , - 2991 , - 3562 , - 2549 , - 4176 , - 4219 , - 2678 , - 3777 , - 3292 , - 1223 , - 1794 , - 781 , - 2408 , - 2451 , - 910 , - 2009 , - 1524 , - 3679 , - 26 , - 3237 , - 640 , - 683 , - 3366 , - 241 , - 3980 , - 1911 , - 2482 , - 1469 , - 3096 , - 3139 , - 1598 , - 2697 , - 2212 , - 143 , - 714 , - 3925 , - 1328 , - 1371 , - 4054 , - 929 , - 444 , - 2599 , - 3170 , - 2157 , - 3784 , - 3827 , - 2286 , - 3385 , - 2900 , - 831 , - 1402 , - 389 , - 2016 , - 2059 , - 518 , - 1617 , - 1132 , - 3287 , - 3858 , - 2845 , - 248 , - 291 , - 2974 , - 4073 , - 3588 , - 1519 , - 2090 , - 1077 , - 2704 , - 2747 , - 1206 , - 2305 , - 1820 , - 3975 , - 322 , - 3533 , - 936 , - 979 , - 3662 , - 537 , - 52 , - 2207 , - 2778 , - 1765 , - 3392 , - 3435 , - 1894 , - 2993 , - 2508 , - 439 , - 1010 , - 4221 , - 1624 , - 1667 , - 126 , - 1225 , - 740 , - 2895 , - 3466 , - 2453 , - 4080 , - 4123 , - 2582 , - 3681 , - 3196 , - 1127 , - 1698 , - 685 , - 2312 , - 2355 , - 814 , - 1913 , - 1428 , - 3583 , - 4154 , - 3141 , - 544 , - 587 , - 3270 , - 145 , - 3884 , - 1815 , - 2386 , - 1373 , - 3000 , - 3043 , - 1502 , - 2601 , - 2116 , - 47 , - 618 , - 3829 , - 1232 , - 1275 , - 3958 , - 833 , - 348 , - 2503 , - 3074 , - 2061 , - 3688 , - 3731 , - 2190 , - 3289 , - 2804 , - 735 , - 1306 , - 293 , - 1920 , - 1963 , - 422 , - 1521 , - 1036 , - 3191 , - 3762 , - 2749 , - 152 , - 195 , - 2878 , - 3977 , - 3492 , - 1423 , - 1994 , - 981 , - 2608 , - 2651 , - 1110 , - 2209 , - 1724 , - 3879 , - 226 , - 3437 , - 840 , - 883 , - 3566 , - 441 , - 4180 , - 2111 , - 2682 , - 1669 , - 3296 , - 3339 , - 1798 , - 2897 , - 2412 , - 343 , - 914 , - 4125 , - 1528 , - 1571 , - 30 , - 1129 , - 644 , - 2799 , - 3370 , - 2357 , - 3984 , - 4027 , - 2486 , - 3585 , - 3100 , - 1031 , - 1602 , - 589 , - 2216 , - 2259 , - 718 , - 1817 , - 1332 , - 3487 , - 4058 , - 3045 , - 448 , - 491 , - 3174 , - 49 , - 3788 , - 1719 , - 2290 , - 1277 , - 2904 , - 2947 , - 1406 , - 2505 , - 2020 , - 4175 , - 522 , - 3733 , - 1136 , - 1179 , - 3862 , - 737 , - 252 , - 2407 , - 2978 , - 1965 , - 3592 , - 3635 , - 2094 , - 3193 , - 2708 , - 639 , - 1210 , - 197 , - 1824 , - 1867 , - 326 , - 1425 , - 940 , - 3095 , - 3666 , - 2653 , - 56 , - 99 , - 2782 , - 3881 , - 3396 , - 1327 , - 1898 , - 885 , - 2512 , - 2555 , - 1014 , - 2113 , - 1628 , - 3783 , - 130 , - 3341 , - 744 , - 787 , - 3470 , - 345 , - 4084 , - 2015 , - 2586 , - 1573 , - 3200 , - 3243 , - 1702 , - 2801 , - 2316 , - 247 , - 818 , - 4029 , - 1432 , - 1475 , - 4158 , - 1033 , - 548 , - 2703 , - 3274 , - 2261 , - 3888 , - 3931 , - 2390 , - 3489 , - 3004 , - 935 , - 1506 , - 493 , - 2120 , - 2163 , - 622 , - 1721 , - 1236 , - 3391 , - 3962 , - 2949 , - 352 , - 395 , - 3078 , - 4177 , - 3692 , - 1623 , - 2194 , - 1181 , - 2808 , - 2851 , - 1310 , - 2409 , - 1924 , - 4079 , - 426 , - 3637 , - 1040 , - 1083 , - 3766 , - 641 , - 156 , - 2311 , - 2882 , - 1869 , - 3496 , - 3539 , - 1998 , - 3097 , - 2612 , - 543 , - 1114 , - 101 , - 1728 , - 1771 , - 230 , - 1329 , - 844 , - 2999 , - 3570 , - 2557 , - 4184 , - 3 , - 2686 , - 3785 , - 3300 , - 1231 , - 1802 , - 789 , - 2416 , - 2459 , - 918 , - 2017 , - 1532 , - 3687 , - 34 , - 3245 , - 648 , - 691 , - 3374 , - 249 , - 3988 , - 1919 , - 2490 , - 1477 , - 3104 , - 3147 , - 1606 , - 2705 , - 2220 , - 151 , - 722 , - 3933 , - 1336 , - 1379 , - 4062 , - 937 , - 452 , - 2607 , - 3178 , - 2165 , - 3792 , - 3835 , - 2294 , - 3393 , - 2908 , - 839 , - 1410 , - 397 , - 2024 , - 2067 , - 526 , - 1625 , - 1140 , - 3295 , - 3866 , - 2853 , - 256 , - 299 , - 2982 , - 4081 , - 3596 , - 1527 , - 2098 , - 1085 , - 2712 , - 2755 , - 1214 , - 2313 , - 1828 , - 3983 , - 330 , - 3541 , - 944 , - 987 , - 3670 , - 545 , - 60 , - 2215 , - 2786 , - 1773 , - 3400 , - 3443 , - 1902 , - 3001 , - 2516 , - 447 , - 1018 , - 5 , - 1632 , - 1675 , - 134 , - 1233 , - 748 , - 2903 , - 3474 , - 2461 , - 4088 , - 4131 , - 2590 , - 3689 , - 3204 , - 1135 , - 1706 , - 693 , - 2320 , - 2363 , - 822 , - 1921 , - 1436 , - 3591 , - 4162 , - 3149 , - 552 , - 595 , - 3278 , - 153 , - 3892 , - 1823 , - 2394 , - 1381 , - 3008 , - 3051 , - 1510 , - 2609 , - 2124 , - 55 , - 626 , - 3837 , - 1240 , - 1283 , - 3966 , - 841 , - 356 , - 2511 , - 3082 , - 2069 , - 3696 , - 3739 , - 2198 , - 3297 , - 2812 , - 743 , - 1314 , - 301 , - 1928 , - 1971 , - 430 , - 1529 , - 1044 , - 3199 , - 3770 , - 2757 , - 160 , - 203 , - 2886 , - 3985 , - 3500 , - 1431 , - 2002 , - 989 , - 2616 , - 2659 , - 1118 , - 2217 , - 1732 , - 3887 , - 234 , - 3445 , - 848 , - 891 , - 3574 , - 449 , - 4188 , - 2119 , - 2690 , - 1677 , - 3304 , - 3347 , - 1806 , - 2905 , - 2420 , - 351 , - 922 , - 4133 , - 1536 , - 1579 , - 38 , - 1137 , - 652 , - 2807 , - 3378 , - 2365 , - 3992 , - 4035 , - 2494 , - 3593 , - 3108 , - 1039 , - 1610 , - 597 , - 2224 , - 2267 , - 726 , - 1825 , - 1340 , - 3495 , - 4066 , - 3053 , - 456 , - 499 , - 3182 , - 57 , - 3796 , - 1727 , - 2298 , - 1285 , - 2912 , - 2955 , - 1414 , - 2513 , - 2028 , - 4183 , - 530 , - 3741 , - 1144 , - 1187 , - 3870 , - 745 , - 260 , - 2415 , - 2986 , - 1973 , - 3600 , - 3643 , - 2102 , - 3201 , - 2716 , - 647 , - 1218 , - 205 , - 1832 , - 1875 , - 334 , - 1433 , - 948 , - 3103 , - 3674 , - 2661 , - 64 , - 107 , - 2790 , - 3889 , - 3404 , - 1335 , - 1906 , - 893 , - 2520 , - 2563 , - 1022 , - 2121 , - 1636 , - 3791 , - 138 , - 3349 , - 752 , - 795 , - 3478 , - 353 , - 4092 , - 2023 , - 2594 , - 1581 , - 3208 , - 3251 , - 1710 , - 2809 , - 2324 , - 255 , - 826 , - 4037 , - 1440 , - 1483 , - 4166 , - 1041 , - 556 , - 2711 , - 3282 , - 2269 , - 3896 , - 3939 , - 2398 , - 3497 , - 3012 , - 943 , - 1514 , - 501 , - 2128 , - 2171 , - 630 , - 1729 , - 1244 , - 3399 , - 3970 , - 2957 , - 360 , - 403 , - 3086 , - 4185 , - 3700 , - 1631 , - 2202 , - 1189 , - 2816 , - 2859 , - 1318 , - 2417 , - 1932 , - 4087 , - 434 , - 3645 , - 1048 , - 1091 , - 3774 , - 649 , - 164 , - 2319 , - 2890 , - 1877 , - 3504 , - 3547 , - 2006 , - 3105 , - 2620 , - 551 , - 1122 , - 109 , - 1736 , - 1779 , - 238 , - 1337 , - 852 , - 3007 , - 3578 , - 2565 , - 4192 , - 11 , - 2694 , - 3793 , - 3308 , - 1239 , - 1810 , - 797 , - 2424 , - 2467 , - 926 , - 2025 , - 1540 , - 3695 , - 42 , - 3253 , - 656 , - 699 , - 3382 , - 257 , - 3996 , - 1927 , - 2498 , - 1485 , - 3112 , - 3155 , - 1614 , - 2713 , - 2228 , - 159 , - 730 , - 3941 , - 1344 , - 1387 , - 4070 , - 945 , - 460 , - 2615 , - 3186 , - 2173 , - 3800 , - 3843 , - 2302 , - 3401 , - 2916 , - 847 , - 1418 , - 405 , - 2032 , - 2075 , - 534 , - 1633 , - 1148 , - 3303 , - 3874 , - 2861 , - 264 , - 307 , - 2990 , - 4089 , - 3604 , - 1535 , - 2106 , - 1093 , - 2720 , - 2763 , - 1222 , - 2321 , - 1836 , - 3991 , - 338 , - 3549 , - 952 , - 995 , - 3678 , - 553 , - 68 , - 2223 , - 2794 , - 1781 , - 3408 , - 3451 , - 1910 , - 3009 , - 2524 , - 455 , - 1026 , - 13 , - 1640 , - 1683 , - 142 , - 1241 , - 756 , - 2911 , - 3482 , - 2469 , - 4096 , - 4139 , - 2598 , - 3697 , - 3212 , - 1143 , - 1714 , - 701 , - 2328 , - 2371 , - 830 , - 1929 , - 1444 , - 3599 , - 4170 , - 3157 , - 560 , - 603 , - 3286 , - 161 , - 3900 , - 1831 , - 2402 , - 1389 , - 3016 , - 3059 , - 1518 , - 2617 , - 2132 , - 63 , - 634 , - 3845 , - 1248 , - 1291 , - 3974 , - 849 , - 364 , - 2519 , - 3090 , - 2077 , - 3704 , - 3747 , - 2206 , - 3305 , - 2820 , - 751 , - 1322 , - 309 , - 1936 , - 1979 , - 438 , - 1537 , - 1052 , - 3207 , - 3778 , - 2765 , - 168 , - 211 , - 2894 , - 3993 , - 3508 , - 1439 , - 2010 , - 997 , - 2624 , - 2667 , - 1126 , - 2225 , - 1740 , - 3895 , - 242 , - 3453 , - 856 , - 899 , - 3582 , - 457 , - 4196 , - 2127 , - 2698 , - 1685 , - 3312 , - 3355 , - 1814 , - 2913 , - 2428 , - 359 , - 930 , - 4141 , - 1544 , - 1587 , - 46 , - 1145 , - 660 , - 2815 , - 3386 , - 2373 , - 4000 , - 4043 , - 2502 , - 3601 , - 3116 , - 1047 , - 1618 , - 605 , - 2232 , - 2275 , - 734 , - 1833 , - 1348 , - 3503 , - 4074 , - 3061 , - 464 , - 507 , - 3190 , - 65 , - 3804 , - 1735 , - 2306 , - 1293 , - 2920 , - 2963 , - 1422 , - 2521 , - 2036 , - 4191 , - 538 , - 3749 , - 1152 , - 1195 , - 3878 , - 753 , - 268 , - 2423 , - 2994 , - 1981 , - 3608 , - 3651 , - 2110 , - 3209 , - 2724 , - 655 , - 1226 , - 213 , - 1840 , - 1883 , - 342 , - 1441 , - 956 , - 3111 , - 3682 , - 2669 , - 72 , - 115 , - 2798 , - 3897 , - 3412 , - 1343 , - 1914 , - 901 , - 2528 , - 2571 , - 1030 , - 2129 , - 1644 , - 3799 , - 146 , - 3357 , - 760 , - 803 , - 3486 , - 361 , - 4100 , - 2031 , - 2602 , - 1589 , - 3216 , - 3259 , - 1718 , - 2817 , - 2332 , - 263 , - 834 , - 4045 , - 1448 , - 1491 , - 4174 , - 1049 , - 564 , - 2719 , - 3290 , - 2277 , - 3904 , - 3947 , - 2406 , - 3505 , - 3020 , - 951 , - 1522 , - 509 , - 2136 , - 2179 , - 638 , - 1737 , - 1252 , - 3407 , - 3978 , - 2965 , - 368 , - 411 , - 3094 , - 4193 , - 3708 , - 1639 , - 2210 , - 1197 , - 2824 , - 2867 , - 1326 , - 2425 , - 1940 , - 4095 , - 442 , - 3653 , - 1056 , - 1099 , - 3782 , - 657 , - 172 , - 2327 , - 2898 , - 1885 , - 3512 , - 3555 , - 2014 , - 3113 , - 2628 , - 559 , - 1130 , - 117 , - 1744 , - 1787 , - 246 , - 1345 , - 860 , - 3015 , - 3586 , - 2573 , - 4200 , - 19 , - 2702 , - 3801 , - 3316 , - 1247 , - 1818 , - 805 , - 2432 , - 2475 , - 934 , - 2033 , - 1548 , - 3703 , - 50 , - 3261 , - 664 , - 707 , - 3390 , - 265 , - 4004 , - 1935 , - 2506 , - 1493 , - 3120 , - 3163 , - 1622 , - 2721 , - 2236 , - 167 , - 738 , - 3949 , - 1352 , - 1395 , - 4078 , - 953 , - 468 , - 2623 , - 3194 , - 2181 , - 3808 , - 3851 , - 2310 , - 3409 , - 2924 , - 855 , - 1426 , - 413 , - 2040 , - 2083 , - 542 , - 1641 , - 1156 , - 3311 , - 3882 , - 2869 , - 272 , - 315 , - 2998 , - 4097 , - 3612 , - 1543 , - 2114 , - 1101 , - 2728 , - 2771 , - 1230 , - 2329 , - 1844 , - 3999 , - 346 , - 3557 , - 960 , - 1003 , - 3686 , - 561 , - 76 , - 2231 , - 2802 , - 1789 , - 3416 , - 3459 , - 1918 , - 3017 , - 2532 , - 463 , - 1034 , - 21 , - 1648 , - 1691 , - 150 , - 1249 , - 764 , - 2919 , - 3490 , - 2477 , - 4104 , - 4147 , - 2606 , - 3705 , - 3220 , - 1151 , - 1722 , - 709 , - 2336 , - 2379 , - 838 , - 1937 , - 1452 , - 3607 , - 4178 , - 3165 , - 568 , - 611 , - 3294 , - 169 , - 3908 , - 1839 , - 2410 , - 1397 , - 3024 , - 3067 , - 1526 , - 2625 , - 2140 , - 71 , - 642 , - 3853 , - 1256 , - 1299 , - 3982 , - 857 , - 372 , - 2527 , - 3098 , - 2085 , - 3712 , - 3755 , - 2214 , - 3313 , - 2828 , - 759 , - 1330 , - 317 , - 1944 , - 1987 , - 446 , - 1545 , - 1060 , - 3215 , - 3786 , - 2773 , - 176 , - 219 , - 2902 , - 4001 , - 3516 , - 1447 , - 2018 , - 1005 , - 2632 , - 2675 , - 1134 , - 2233 , - 1748 , - 3903 , - 250 , - 3461 , - 864 , - 907 , - 3590 , - 465 , - 4204 , - 2135 , - 2706 , - 1693 , - 3320 , - 3363 , - 1822 , - 2921 , - 2436 , - 367 , - 938 , - 4149 , - 1552 , - 1595 , - 54 , - 1153 , - 668 , - 2823 , - 3394 , - 2381 , - 4008 , - 4051 , - 2510 , - 3609 , - 3124 , - 1055 , - 1626 , - 613 , - 2240 , - 2283 , - 742 , - 1841 , - 1356 , - 3511 , - 4082 , - 3069 , - 472 , - 515 , - 3198 , - 73 , - 3812 , - 1743 , - 2314 , - 1301 , - 2928 , - 2971 , - 1430 , - 2529 , - 2044 , - 4199 , - 546 , - 3757 , - 1160 , - 1203 , - 3886 , - 761 , - 276 , - 2431 , - 3002 , - 1989 , - 3616 , - 3659 , - 2118 , - 3217 , - 2732 , - 663 , - 1234 , - 221 , - 1848 , - 1891 , - 350 , - 1449 , - 964 , - 3119 , - 3690 , - 2677 , - 80 , - 123 , - 2806 , - 3905 , - 3420 , - 1351 , - 1922 , - 909 , - 2536 , - 2579 , - 1038 , - 2137 , - 1652 , - 3807 , - 154 , - 3365 , - 768 , - 811 , - 3494 , - 369 , - 4108 , - 2039 , - 2610 , - 1597 , - 3224 , - 3267 , - 1726 , - 2825 , - 2340 , - 271 , - 842 , - 4053 , - 1456 , - 1499 , - 4182 , - 1057 , - 572 , - 2727 , - 3298 , - 2285 , - 3912 , - 3955 , - 2414 , - 3513 , - 3028 , - 959 , - 1530 , - 517 , - 2144 , - 2187 , - 646 , - 1745 , - 1260 , - 3415 , - 3986 , - 2973 , - 376 , - 419 , - 3102 , - 4201 , - 3716 , - 1647 , - 2218 , - 1205 , - 2832 , - 2875 , - 1334 , - 2433 , - 1948 , - 4103 , - 450 , - 3661 , - 1064 , - 1107 , - 3790 , - 665 , - 180 , - 2335 , - 2906 , - 1893 , - 3520 , - 3563 , - 2022 , - 3121 , - 2636 , - 567 , - 1138 , - 125 , - 1752 , - 1795 , - 254 , - 1353 , - 868 , - 3023 , - 3594 , - 2581 , - 4208 , - 27 , - 2710 , - 3809 , - 3324 , - 1255 , - 1826 , - 813 , - 2440 , - 2483 , - 942 , - 2041 , - 1556 , - 3711 , - 58 , - 3269 , - 672 , - 715 , - 3398 , - 273 , - 4012 , - 1943 , - 2514 , - 1501 , - 3128 , - 3171 , - 1630 , - 2729 , - 2244 , - 175 , - 746 , - 3957 , - 1360 , - 1403 , - 4086 , - 961 , - 476 , - 2631 , - 3202 , - 2189 , - 3816 , - 3859 , - 2318 , - 3417 , - 2932 , - 863 , - 1434 , - 421 , - 2048 , - 2091 , - 550 , - 1649 , - 1164 , - 3319 , - 3890 , - 2877 , - 280 , - 323 , - 3006 , - 4105 , - 3620 , - 1551 , - 2122 , - 1109 , - 2736 , - 2779 , - 1238 , - 2337 , - 1852 , - 4007 , - 354 , - 3565 , - 968 , - 1011 , - 3694 , - 569 , - 84 , - 2239 , - 2810 , - 1797 , - 3424 , - 3467 , - 1926 , - 3025 , - 2540 , - 471 , - 1042 , - 29 , - 1656 , - 1699 , - 158 , - 1257 , - 772 , - 2927 , - 3498 , - 2485 , - 4112 , - 4155 , - 2614 , - 3713 , - 3228 , - 1159 , - 1730 , - 717 , - 2344 , - 2387 , - 846 , - 1945 , - 1460 , - 3615 , - 4186 , - 3173 , - 576 , - 619 , - 3302 , - 177 , - 3916 , - 1847 , - 2418 , - 1405 , - 3032 , - 3075 , - 1534 , - 2633 , - 2148 , - 79 , - 650 , - 3861 , - 1264 , - 1307 , - 3990 , - 865 , - 380 , - 2535 , - 3106 , - 2093 , - 3720 , - 3763 , - 2222 , - 3321 , - 2836 , - 767 , - 1338 , - 325 , - 1952 , - 1995 , - 454 , - 1553 , - 1068 , - 3223 , - 3794 , - 2781 , - 184 , - 227 , - 2910 , - 4009 , - 3524 , - 1455 , - 2026 , - 1013 , - 2640 , - 2683 , - 1142 , - 2241 , - 1756 , - 3911 , - 258 , - 3469 , - 872 , - 915 , - 3598 , - 473 , - 4212 , - 2143 , - 2714 , - 1701 , - 3328 , - 3371 , - 1830 , - 2929 , - 2444 , - 375 , - 946 , - 4157 , - 1560 , - 1603 , - 62 , - 1161 , - 676 , - 2831 , - 3402 , - 2389 , - 4016 , - 4059 , - 2518 , - 3617 , - 3132 , - 1063 , - 1634 , - 621 , - 2248 , - 2291 , - 750 , - 1849 , - 1364 , - 3519 , - 4090 , - 3077 , - 480 , - 523 , - 3206 , - 81 , - 3820 , - 1751 , - 2322 , - 1309 , - 2936 , - 2979 , - 1438 , - 2537 , - 2052 , - 4207 , - 554 , - 3765 , - 1168 , - 1211 , - 3894 , - 769 , - 284 , - 2439 , - 3010 , - 1997 , - 3624 , - 3667 , - 2126 , - 3225 , - 2740 , - 671 , - 1242 , - 229 , - 1856 , - 1899 , - 358 , - 1457 , - 972 , - 3127 , - 3698 , - 2685 , - 88 , - 131 , - 2814 , - 3913 , - 3428 , - 1359 , - 1930 , - 917 , - 2544 , - 2587 , - 1046 , - 2145 , - 1660 , - 3815 , - 162 , - 3373 , - 776 , - 819 , - 3502 , - 377 , - 4116 , - 2047 , - 2618 , - 1605 , - 3232 , - 3275 , - 1734 , - 2833 , - 2348 , - 279 , - 850 , - 4061 , - 1464 , - 1507 , - 4190 , - 1065 , - 580 , - 2735 , - 3306 , - 2293 , - 3920 , - 3963 , - 2422 , - 3521 , - 3036 , - 967 , - 1538 , - 525 , - 2152 , - 2195 , - 654 , - 1753 , - 1268 , - 3423 , - 3994 , - 2981 , - 384 , - 427 , - 3110 , - 4209 , - 3724 , - 1655 , - 2226 , - 1213 , - 2840 , - 2883 , - 1342 , - 2441 , - 1956 , - 4111 , - 458 , - 3669 , - 1072 , - 1115 , - 3798 , - 673 , - 188 , - 2343 , - 2914 , - 1901 , - 3528 , - 3571 , - 2030 , - 3129 , - 2644 , - 575 , - 1146 , - 133 , - 1760 , - 1803 , - 262 , - 1361 , - 876 , - 3031 , - 3602 , - 2589 , - 4216 , - 35 , - 2718 , - 3817 , - 3332 , - 1263 , - 1834 , - 821 , - 2448 , - 2491 , - 950 , - 2049 , - 1564 , - 3719 , - 66 , - 3277 , - 680 , - 723 , - 3406 , - 281 , - 4020 , - 1951 , - 2522 , - 1509 , - 3136 , - 3179 , - 1638 , - 2737 , - 2252 , - 183 , - 754 , - 3965 , - 1368 , - 1411 , - 4094 , - 969 , - 484 , - 2639 , - 3210 , - 2197 , - 3824 , - 3867 , - 2326 , - 3425 , - 2940 , - 871 , - 1442 , - 429 , - 2056 , - 2099 , - 558 , - 1657 , - 1172 , - 3327 , - 3898 , - 2885 , - 288 , - 331 , - 3014 , - 4113 , - 3628 , - 1559 , - 2130 , - 1117 , - 2744 , - 2787 , - 1246 , - 2345 , - 1860 , - 4015 , - 362 , - 3573 , - 976 , - 1019 , - 3702 , - 577 , - 92 , - 2247 , - 2818 , - 1805 , - 3432 , - 3475 , - 1934 , - 3033 , - 2548 , - 479 , - 1050 , - 37 , - 1664 , - 1707 , - 166 , - 1265 , - 780 , - 2935 , - 3506 , - 2493 , - 4120 , - 4163 , - 2622 , - 3721 , - 3236 , - 1167 , - 1738 , - 725 , - 2352 , - 2395 , - 854 , - 1953 , - 1468 , - 3623 , - 4194 , - 3181 , - 584 , - 627 , - 3310 , - 185 , - 3924 , - 1855 , - 2426 , - 1413 , - 3040 , - 3083 , - 1542 , - 2641 , - 2156 , - 87 , - 658 , - 3869 , - 1272 , - 1315 , - 3998 , - 873 , - 388 , - 2543 , - 3114 , - 2101 , - 3728 , - 3771 , - 2230 , - 3329 , - 2844 , - 775 , - 1346 , - 333 , - 1960 , - 2003 , - 462 , - 1561 , - 1076 , - 3231 , - 3802 , - 2789 , - 192 , - 235 , - 2918 , - 4017 , - 3532 , - 1463 , - 2034 , - 1021 , - 2648 , - 2691 , - 1150 , - 2249 , - 1764 , - 3919 , - 266 , - 3477 , - 880 , - 923 , - 3606 , - 481 , - 4220 , - 2151 , - 2722 , - 1709 , - 3336 , - 3379 , - 1838 , - 2937 , - 2452 , - 383 , - 954 , - 4165 , - 1568 , - 1611 , - 70 , - 1169 , - 684 , - 2839 , - 3410 , - 2397 , - 4024 , - 4067 , - 2526 , - 3625 , - 3140 , - 1071 , - 1642 , - 629 , - 2256 , - 2299 , - 758 , - 1857 , - 1372 , - 3527 , - 4098 , - 3085 , - 488 , - 531 , - 3214 , - 89 , - 3828 , - 1759 , - 2330 , - 1317 , - 2944 , - 2987 , - 1446 , - 2545 , - 2060 , - 4215 , - 562 , - 3773 , - 1176 , - 1219 , - 3902 , - 777 , - 292 , - 2447 , - 3018 , - 2005 , - 3632 , - 3675 , - 2134 , - 3233 , - 2748 , - 679 , - 1250 , - 237 , - 1864 , - 1907 , - 366 , - 1465 , - 980 , - 3135 , - 3706 , - 2693 , - 96 , - 139 , - 2822 , - 3921 , - 3436 , - 1367 , - 1938 , - 925 , - 2552 , - 2595 , - 1054 , - 2153 , - 1668 , - 3823 , - 170 , - 3381 , - 784 , - 827 , - 3510 , - 385 , - 4124 , - 2055 , - 2626 , - 1613 , - 3240 , - 3283 , - 1742 , - 2841 , - 2356 , - 287 , - 858 , - 4069 , - 1472 , - 1515 , - 4198 , - 1073 , - 588 , - 2743 , - 3314 , - 2301 , - 3928 , - 3971 , - 2430 , - 3529 , - 3044 , - 975 , - 1546 , - 533 , - 2160 , - 2203 , - 662 , - 1761 , - 1276 , - 3431 , - 4002 , - 2989 , - 392 , - 435 , - 3118 , - 4217 , - 3732 , - 1663 , - 2234 , - 1221 , - 2848 , - 2891 , - 1350 , - 2449 , - 1964 , - 4119 , - 466 , - 3677 , - 1080 , - 1123 , - 3806 , - 681 , - 196 , - 2351 , - 2922 , - 1909 , - 3536 , - 3579 , - 2038 , - 3137 , - 2652 , - 583 , - 1154 , - 141 , - 1768 , - 1811 , - 270 , - 1369 , - 884 , - 3039 , - 3610 , - 2597 , - 0 , - 3147 , - 3882 , - 1133 , - 2404 , - 2335 , - 4142 , - 2465 , - 520 , - 1523 , - 114 , - 3797 , - 2924 , - 711 , - 374 , - 841 , - 1040 , - 4187 , - 634 , - 2173 , - 3444 , - 3375 , - 894 , - 3505 , - 1560 , - 2563 , - 1154 , - 549 , - 3964 , - 1751 , - 1414 , - 1881 , - 2080 , - 939 , - 1674 , - 3213 , - 196 , - 127 , - 1934 , - 257 , - 2600 , - 3603 , - 2194 , - 1589 , - 716 , - 2791 , - 2454 , - 2921 , - 3120 , - 1979 , - 2714 , - 4253 , - 1236 , - 1167 , - 2974 , - 1297 , - 3640 , - 355 , - 3234 , - 2629 , - 1756 , - 3831 , - 3494 , - 3961 , - 4160 , - 3019 , - 3754 , - 1005 , - 2276 , - 2207 , - 4014 , - 2337 , - 392 , - 1395 , - 4274 , - 3669 , - 2796 , - 583 , - 246 , - 713 , - 912 , - 4059 , - 506 , - 2045 , - 3316 , - 3247 , - 766 , - 3377 , - 1432 , - 2435 , - 1026 , - 421 , - 3836 , - 1623 , - 1286 , - 1753 , - 1952 , - 811 , - 1546 , - 3085 , - 68 , - 4287 , - 1806 , - 129 , - 2472 , - 3475 , - 2066 , - 1461 , - 588 , - 2663 , - 2326 , - 2793 , - 2992 , - 1851 , - 2586 , - 4125 , - 1108 , - 1039 , - 2846 , - 1169 , - 3512 , - 227 , - 3106 , - 2501 , - 1628 , - 3703 , - 3366 , - 3833 , - 4032 , - 2891 , - 3626 , - 877 , - 2148 , - 2079 , - 3886 , - 2209 , - 264 , - 1267 , - 4146 , - 3541 , - 2668 , - 455 , - 118 , - 585 , - 784 , - 3931 , - 378 , - 1917 , - 3188 , - 3119 , - 638 , - 3249 , - 1304 , - 2307 , - 898 , - 293 , - 3708 , - 1495 , - 1158 , - 1625 , - 1824 , - 683 , - 1418 , - 2957 , - 4228 , - 4159 , - 1678 , - 1 , - 2344 , - 3347 , - 1938 , - 1333 , - 460 , - 2535 , - 2198 , - 2665 , - 2864 , - 1723 , - 2458 , - 3997 , - 980 , - 911 , - 2718 , - 1041 , - 3384 , - 99 , - 2978 , - 2373 , - 1500 , - 3575 , - 3238 , - 3705 , - 3904 , - 2763 , - 3498 , - 749 , - 2020 , - 1951 , - 3758 , - 2081 , - 136 , - 1139 , - 4018 , - 3413 , - 2540 , - 327 , - 4278 , - 457 , - 656 , - 3803 , - 250 , - 1789 , - 3060 , - 2991 , - 510 , - 3121 , - 1176 , - 2179 , - 770 , - 165 , - 3580 , - 1367 , - 1030 , - 1497 , - 1696 , - 555 , - 1290 , - 2829 , - 4100 , - 4031 , - 1550 , - 4161 , - 2216 , - 3219 , - 1810 , - 1205 , - 332 , - 2407 , - 2070 , - 2537 , - 2736 , - 1595 , - 2330 , - 3869 , - 852 , - 783 , - 2590 , - 913 , - 3256 , - 4259 , - 2850 , - 2245 , - 1372 , - 3447 , - 3110 , - 3577 , - 3776 , - 2635 , - 3370 , - 621 , - 1892 , - 1823 , - 3630 , - 1953 , - 8 , - 1011 , - 3890 , - 3285 , - 2412 , - 199 , - 4150 , - 329 , - 528 , - 3675 , - 122 , - 1661 , - 2932 , - 2863 , - 382 , - 2993 , - 1048 , - 2051 , - 642 , - 37 , - 3452 , - 1239 , - 902 , - 1369 , - 1568 , - 427 , - 1162 , - 2701 , - 3972 , - 3903 , - 1422 , - 4033 , - 2088 , - 3091 , - 1682 , - 1077 , - 204 , - 2279 , - 1942 , - 2409 , - 2608 , - 1467 , - 2202 , - 3741 , - 724 , - 655 , - 2462 , - 785 , - 3128 , - 4131 , - 2722 , - 2117 , - 1244 , - 3319 , - 2982 , - 3449 , - 3648 , - 2507 , - 3242 , - 493 , - 1764 , - 1695 , - 3502 , - 1825 , - 4168 , - 883 , - 3762 , - 3157 , - 2284 , - 71 , - 4022 , - 201 , - 400 , - 3547 , - 4282 , - 1533 , - 2804 , - 2735 , - 254 , - 2865 , - 920 , - 1923 , - 514 , - 4197 , - 3324 , - 1111 , - 774 , - 1241 , - 1440 , - 299 , - 1034 , - 2573 , - 3844 , - 3775 , - 1294 , - 3905 , - 1960 , - 2963 , - 1554 , - 949 , - 76 , - 2151 , - 1814 , - 2281 , - 2480 , - 1339 , - 2074 , - 3613 , - 596 , - 527 , - 2334 , - 657 , - 3000 , - 4003 , - 2594 , - 1989 , - 1116 , - 3191 , - 2854 , - 3321 , - 3520 , - 2379 , - 3114 , - 365 , - 1636 , - 1567 , - 3374 , - 1697 , - 4040 , - 755 , - 3634 , - 3029 , - 2156 , - 4231 , - 3894 , - 73 , - 272 , - 3419 , - 4154 , - 1405 , - 2676 , - 2607 , - 126 , - 2737 , - 792 , - 1795 , - 386 , - 4069 , - 3196 , - 983 , - 646 , - 1113 , - 1312 , - 171 , - 906 , - 2445 , - 3716 , - 3647 , - 1166 , - 3777 , - 1832 , - 2835 , - 1426 , - 821 , - 4236 , - 2023 , - 1686 , - 2153 , - 2352 , - 1211 , - 1946 , - 3485 , - 468 , - 399 , - 2206 , - 529 , - 2872 , - 3875 , - 2466 , - 1861 , - 988 , - 3063 , - 2726 , - 3193 , - 3392 , - 2251 , - 2986 , - 237 , - 1508 , - 1439 , - 3246 , - 1569 , - 3912 , - 627 , - 3506 , - 2901 , - 2028 , - 4103 , - 3766 , - 4233 , - 144 , - 3291 , - 4026 , - 1277 , - 2548 , - 2479 , - 4286 , - 2609 , - 664 , - 1667 , - 258 , - 3941 , - 3068 , - 855 , - 518 , - 985 , - 1184 , - 43 , - 778 , - 2317 , - 3588 , - 3519 , - 1038 , - 3649 , - 1704 , - 2707 , - 1298 , - 693 , - 4108 , - 1895 , - 1558 , - 2025 , - 2224 , - 1083 , - 1818 , - 3357 , - 340 , - 271 , - 2078 , - 401 , - 2744 , - 3747 , - 2338 , - 1733 , - 860 , - 2935 , - 2598 , - 3065 , - 3264 , - 2123 , - 2858 , - 109 , - 1380 , - 1311 , - 3118 , - 1441 , - 3784 , - 499 , - 3378 , - 2773 , - 1900 , - 3975 , - 3638 , - 4105 , - 16 , - 3163 , - 3898 , - 1149 , - 2420 , - 2351 , - 4158 , - 2481 , - 536 , - 1539 , - 130 , - 3813 , - 2940 , - 727 , - 390 , - 857 , - 1056 , - 4203 , - 650 , - 2189 , - 3460 , - 3391 , - 910 , - 3521 , - 1576 , - 2579 , - 1170 , - 565 , - 3980 , - 1767 , - 1430 , - 1897 , - 2096 , - 955 , - 1690 , - 3229 , - 212 , - 143 , - 1950 , - 273 , - 2616 , - 3619 , - 2210 , - 1605 , - 732 , - 2807 , - 2470 , - 2937 , - 3136 , - 1995 , - 2730 , - 4269 , - 1252 , - 1183 , - 2990 , - 1313 , - 3656 , - 371 , - 3250 , - 2645 , - 1772 , - 3847 , - 3510 , - 3977 , - 4176 , - 3035 , - 3770 , - 1021 , - 2292 , - 2223 , - 4030 , - 2353 , - 408 , - 1411 , - 2 , - 3685 , - 2812 , - 599 , - 262 , - 729 , - 928 , - 4075 , - 522 , - 2061 , - 3332 , - 3263 , - 782 , - 3393 , - 1448 , - 2451 , - 1042 , - 437 , - 3852 , - 1639 , - 1302 , - 1769 , - 1968 , - 827 , - 1562 , - 3101 , - 84 , - 15 , - 1822 , - 145 , - 2488 , - 3491 , - 2082 , - 1477 , - 604 , - 2679 , - 2342 , - 2809 , - 3008 , - 1867 , - 2602 , - 4141 , - 1124 , - 1055 , - 2862 , - 1185 , - 3528 , - 243 , - 3122 , - 2517 , - 1644 , - 3719 , - 3382 , - 3849 , - 4048 , - 2907 , - 3642 , - 893 , - 2164 , - 2095 , - 3902 , - 2225 , - 280 , - 1283 , - 4162 , - 3557 , - 2684 , - 471 , - 134 , - 601 , - 800 , - 3947 , - 394 , - 1933 , - 3204 , - 3135 , - 654 , - 3265 , - 1320 , - 2323 , - 914 , - 309 , - 3724 , - 1511 , - 1174 , - 1641 , - 1840 , - 699 , - 1434 , - 2973 , - 4244 , - 4175 , - 1694 , - 17 , - 2360 , - 3363 , - 1954 , - 1349 , - 476 , - 2551 , - 2214 , - 2681 , - 2880 , - 1739 , - 2474 , - 4013 , - 996 , - 927 , - 2734 , - 1057 , - 3400 , - 115 , - 2994 , - 2389 , - 1516 , - 3591 , - 3254 , - 3721 , - 3920 , - 2779 , - 3514 , - 765 , - 2036 , - 1967 , - 3774 , - 2097 , - 152 , - 1155 , - 4034 , - 3429 , - 2556 , - 343 , - 6 , - 473 , - 672 , - 3819 , - 266 , - 1805 , - 3076 , - 3007 , - 526 , - 3137 , - 1192 , - 2195 , - 786 , - 181 , - 3596 , - 1383 , - 1046 , - 1513 , - 1712 , - 571 , - 1306 , - 2845 , - 4116 , - 4047 , - 1566 , - 4177 , - 2232 , - 3235 , - 1826 , - 1221 , - 348 , - 2423 , - 2086 , - 2553 , - 2752 , - 1611 , - 2346 , - 3885 , - 868 , - 799 , - 2606 , - 929 , - 3272 , - 4275 , - 2866 , - 2261 , - 1388 , - 3463 , - 3126 , - 3593 , - 3792 , - 2651 , - 3386 , - 637 , - 1908 , - 1839 , - 3646 , - 1969 , - 24 , - 1027 , - 3906 , - 3301 , - 2428 , - 215 , - 4166 , - 345 , - 544 , - 3691 , - 138 , - 1677 , - 2948 , - 2879 , - 398 , - 3009 , - 1064 , - 2067 , - 658 , - 53 , - 3468 , - 1255 , - 918 , - 1385 , - 1584 , - 443 , - 1178 , - 2717 , - 3988 , - 3919 , - 1438 , - 4049 , - 2104 , - 3107 , - 1698 , - 1093 , - 220 , - 2295 , - 1958 , - 2425 , - 2624 , - 1483 , - 2218 , - 3757 , - 740 , - 671 , - 2478 , - 801 , - 3144 , - 4147 , - 2738 , - 2133 , - 1260 , - 3335 , - 2998 , - 3465 , - 3664 , - 2523 , - 3258 , - 509 , - 1780 , - 1711 , - 3518 , - 1841 , - 4184 , - 899 , - 3778 , - 3173 , - 2300 , - 87 , - 4038 , - 217 , - 416 , - 3563 , - 10 , - 1549 , - 2820 , - 2751 , - 270 , - 2881 , - 936 , - 1939 , - 530 , - 4213 , - 3340 , - 1127 , - 790 , - 1257 , - 1456 , - 315 , - 1050 , - 2589 , - 3860 , - 3791 , - 1310 , - 3921 , - 1976 , - 2979 , - 1570 , - 965 , - 92 , - 2167 , - 1830 , - 2297 , - 2496 , - 1355 , - 2090 , - 3629 , - 612 , - 543 , - 2350 , - 673 , - 3016 , - 4019 , - 2610 , - 2005 , - 1132 , - 3207 , - 2870 , - 3337 , - 3536 , - 2395 , - 3130 , - 381 , - 1652 , - 1583 , - 3390 , - 1713 , - 4056 , - 771 , - 3650 , - 3045 , - 2172 , - 4247 , - 3910 , - 89 , - 288 , - 3435 , - 4170 , - 1421 , - 2692 , - 2623 , - 142 , - 2753 , - 808 , - 1811 , - 402 , - 4085 , - 3212 , - 999 , - 662 , - 1129 , - 1328 , - 187 , - 922 , - 2461 , - 3732 , - 3663 , - 1182 , - 3793 , - 1848 , - 2851 , - 1442 , - 837 , - 4252 , - 2039 , - 1702 , - 2169 , - 2368 , - 1227 , - 1962 , - 3501 , - 484 , - 415 , - 2222 , - 545 , - 2888 , - 3891 , - 2482 , - 1877 , - 1004 , - 3079 , - 2742 , - 3209 , - 3408 , - 2267 , - 3002 , - 253 , - 1524 , - 1455 , - 3262 , - 1585 , - 3928 , - 643 , - 3522 , - 2917 , - 2044 , - 4119 , - 3782 , - 4249 , - 160 , - 3307 , - 4042 , - 1293 , - 2564 , - 2495 , - 14 , - 2625 , - 680 , - 1683 , - 274 , - 3957 , - 3084 , - 871 , - 534 , - 1001 , - 1200 , - 59 , - 794 , - 2333 , - 3604 , - 3535 , - 1054 , - 3665 , - 1720 , - 2723 , - 1314 , - 709 , - 4124 , - 1911 , - 1574 , - 2041 , - 2240 , - 1099 , - 1834 , - 3373 , - 356 , - 287 , - 2094 , - 417 , - 2760 , - 3763 , - 2354 , - 1749 , - 876 , - 2951 , - 2614 , - 3081 , - 3280 , - 2139 , - 2874 , - 125 , - 1396 , - 1327 , - 3134 , - 1457 , - 3800 , - 515 , - 3394 , - 2789 , - 1916 , - 3991 , - 3654 , - 4121 , - 32 , - 3179 , - 3914 , - 1165 , - 2436 , - 2367 , - 4174 , - 2497 , - 552 , - 1555 , - 146 , - 3829 , - 2956 , - 743 , - 406 , - 873 , - 1072 , - 4219 , - 666 , - 2205 , - 3476 , - 3407 , - 926 , - 3537 , - 1592 , - 2595 , - 1186 , - 581 , - 3996 , - 1783 , - 1446 , - 1913 , - 2112 , - 971 , - 1706 , - 3245 , - 228 , - 159 , - 1966 , - 289 , - 2632 , - 3635 , - 2226 , - 1621 , - 748 , - 2823 , - 2486 , - 2953 , - 3152 , - 2011 , - 2746 , - 4285 , - 1268 , - 1199 , - 3006 , - 1329 , - 3672 , - 387 , - 3266 , - 2661 , - 1788 , - 3863 , - 3526 , - 3993 , - 4192 , - 3051 , - 3786 , - 1037 , - 2308 , - 2239 , - 4046 , - 2369 , - 424 , - 1427 , - 18 , - 3701 , - 2828 , - 615 , - 278 , - 745 , - 944 , - 4091 , - 538 , - 2077 , - 3348 , - 3279 , - 798 , - 3409 , - 1464 , - 2467 , - 1058 , - 453 , - 3868 , - 1655 , - 1318 , - 1785 , - 1984 , - 843 , - 1578 , - 3117 , - 100 , - 31 , - 1838 , - 161 , - 2504 , - 3507 , - 2098 , - 1493 , - 620 , - 2695 , - 2358 , - 2825 , - 3024 , - 1883 , - 2618 , - 4157 , - 1140 , - 1071 , - 2878 , - 1201 , - 3544 , - 259 , - 3138 , - 2533 , - 1660 , - 3735 , - 3398 , - 3865 , - 4064 , - 2923 , - 3658 , - 909 , - 2180 , - 2111 , - 3918 , - 2241 , - 296 , - 1299 , - 4178 , - 3573 , - 2700 , - 487 , - 150 , - 617 , - 816 , - 3963 , - 410 , - 1949 , - 3220 , - 3151 , - 670 , - 3281 , - 1336 , - 2339 , - 930 , - 325 , - 3740 , - 1527 , - 1190 , - 1657 , - 1856 , - 715 , - 1450 , - 2989 , - 4260 , - 4191 , - 1710 , - 33 , - 2376 , - 3379 , - 1970 , - 1365 , - 492 , - 2567 , - 2230 , - 2697 , - 2896 , - 1755 , - 2490 , - 4029 , - 1012 , - 943 , - 2750 , - 1073 , - 3416 , - 131 , - 3010 , - 2405 , - 1532 , - 3607 , - 3270 , - 3737 , - 3936 , - 2795 , - 3530 , - 781 , - 2052 , - 1983 , - 3790 , - 2113 , - 168 , - 1171 , - 4050 , - 3445 , - 2572 , - 359 , - 22 , - 489 , - 688 , - 3835 , - 282 , - 1821 , - 3092 , - 3023 , - 542 , - 3153 , - 1208 , - 2211 , - 802 , - 197 , - 3612 , - 1399 , - 1062 , - 1529 , - 1728 , - 587 , - 1322 , - 2861 , - 4132 , - 4063 , - 1582 , - 4193 , - 2248 , - 3251 , - 1842 , - 1237 , - 364 , - 2439 , - 2102 , - 2569 , - 2768 , - 1627 , - 2362 , - 3901 , - 884 , - 815 , - 2622 , - 945 , - 3288 , - 3 , - 2882 , - 2277 , - 1404 , - 3479 , - 3142 , - 3609 , - 3808 , - 2667 , - 3402 , - 653 , - 1924 , - 1855 , - 3662 , - 1985 , - 40 , - 1043 , - 3922 , - 3317 , - 2444 , - 231 , - 4182 , - 361 , - 560 , - 3707 , - 154 , - 1693 , - 2964 , - 2895 , - 414 , - 3025 , - 1080 , - 2083 , - 674 , - 69 , - 3484 , - 1271 , - 934 , - 1401 , - 1600 , - 459 , - 1194 , - 2733 , - 4004 , - 3935 , - 1454 , - 4065 , - 2120 , - 3123 , - 1714 , - 1109 , - 236 , - 2311 , - 1974 , - 2441 , - 2640 , - 1499 , - 2234 , - 3773 , - 756 , - 687 , - 2494 , - 817 , - 3160 , - 4163 , - 2754 , - 2149 , - 1276 , - 3351 , - 3014 , - 3481 , - 3680 , - 2539 , - 3274 , - 525 , - 1796 , - 1727 , - 3534 , - 1857 , - 4200 , - 915 , - 3794 , - 3189 , - 2316 , - 103 , - 4054 , - 233 , - 432 , - 3579 , - 26 , - 1565 , - 2836 , - 2767 , - 286 , - 2897 , - 952 , - 1955 , - 546 , - 4229 , - 3356 , - 1143 , - 806 , - 1273 , - 1472 , - 331 , - 1066 , - 2605 , - 3876 , - 3807 , - 1326 , - 3937 , - 1992 , - 2995 , - 1586 , - 981 , - 108 , - 2183 , - 1846 , - 2313 , - 2512 , - 1371 , - 2106 , - 3645 , - 628 , - 559 , - 2366 , - 689 , - 3032 , - 4035 , - 2626 , - 2021 , - 1148 , - 3223 , - 2886 , - 3353 , - 3552 , - 2411 , - 3146 , - 397 , - 1668 , - 1599 , - 3406 , - 1729 , - 4072 , - 787 , - 3666 , - 3061 , - 2188 , - 4263 , - 3926 , - 105 , - 304 , - 3451 , - 4186 , - 1437 , - 2708 , - 2639 , - 158 , - 2769 , - 824 , - 1827 , - 418 , - 4101 , - 3228 , - 1015 , - 678 , - 1145 , - 1344 , - 203 , - 938 , - 2477 , - 3748 , - 3679 , - 1198 , - 3809 , - 1864 , - 2867 , - 1458 , - 853 , - 4268 , - 2055 , - 1718 , - 2185 , - 2384 , - 1243 , - 1978 , - 3517 , - 500 , - 431 , - 2238 , - 561 , - 2904 , - 3907 , - 2498 , - 1893 , - 1020 , - 3095 , - 2758 , - 3225 , - 3424 , - 2283 , - 3018 , - 269 , - 1540 , - 1471 , - 3278 , - 1601 , - 3944 , - 659 , - 3538 , - 2933 , - 2060 , - 4135 , - 3798 , - 4265 , - 176 , - 3323 , - 4058 , - 1309 , - 2580 , - 2511 , - 30 , - 2641 , - 696 , - 1699 , - 290 , - 3973 , - 3100 , - 887 , - 550 , - 1017 , - 1216 , - 75 , - 810 , - 2349 , - 3620 , - 3551 , - 1070 , - 3681 , - 1736 , - 2739 , - 1330 , - 725 , - 4140 , - 1927 , - 1590 , - 2057 , - 2256 , - 1115 , - 1850 , - 3389 , - 372 , - 303 , - 2110 , - 433 , - 2776 , - 3779 , - 2370 , - 1765 , - 892 , - 2967 , - 2630 , - 3097 , - 3296 , - 2155 , - 2890 , - 141 , - 1412 , - 1343 , - 3150 , - 1473 , - 3816 , - 531 , - 3410 , - 2805 , - 1932 , - 4007 , - 3670 , - 4137 , - 48 , - 3195 , - 3930 , - 1181 , - 2452 , - 2383 , - 4190 , - 2513 , - 568 , - 1571 , - 162 , - 3845 , - 2972 , - 759 , - 422 , - 889 , - 1088 , - 4235 , - 682 , - 2221 , - 3492 , - 3423 , - 942 , - 3553 , - 1608 , - 2611 , - 1202 , - 597 , - 4012 , - 1799 , - 1462 , - 1929 , - 2128 , - 987 , - 1722 , - 3261 , - 244 , - 175 , - 1982 , - 305 , - 2648 , - 3651 , - 2242 , - 1637 , - 764 , - 2839 , - 2502 , - 2969 , - 3168 , - 2027 , - 2762 , - 13 , - 1284 , - 1215 , - 3022 , - 1345 , - 3688 , - 403 , - 3282 , - 2677 , - 1804 , - 3879 , - 3542 , - 4009 , - 4208 , - 3067 , - 3802 , - 1053 , - 2324 , - 2255 , - 4062 , - 2385 , - 440 , - 1443 , - 34 , - 3717 , - 2844 , - 631 , - 294 , - 761 , - 960 , - 4107 , - 554 , - 2093 , - 3364 , - 3295 , - 814 , - 3425 , - 1480 , - 2483 , - 1074 , - 469 , - 3884 , - 1671 , - 1334 , - 1801 , - 2000 , - 859 , - 1594 , - 3133 , - 116 , - 47 , - 1854 , - 177 , - 2520 , - 3523 , - 2114 , - 1509 , - 636 , - 2711 , - 2374 , - 2841 , - 3040 , - 1899 , - 2634 , - 4173 , - 1156 , - 1087 , - 2894 , - 1217 , - 3560 , - 275 , - 3154 , - 2549 , - 1676 , - 3751 , - 3414 , - 3881 , - 4080 , - 2939 , - 3674 , - 925 , - 2196 , - 2127 , - 3934 , - 2257 , - 312 , - 1315 , - 4194 , - 3589 , - 2716 , - 503 , - 166 , - 633 , - 832 , - 3979 , - 426 , - 1965 , - 3236 , - 3167 , - 686 , - 3297 , - 1352 , - 2355 , - 946 , - 341 , - 3756 , - 1543 , - 1206 , - 1673 , - 1872 , - 731 , - 1466 , - 3005 , - 4276 , - 4207 , - 1726 , - 49 , - 2392 , - 3395 , - 1986 , - 1381 , - 508 , - 2583 , - 2246 , - 2713 , - 2912 , - 1771 , - 2506 , - 4045 , - 1028 , - 959 , - 2766 , - 1089 , - 3432 , - 147 , - 3026 , - 2421 , - 1548 , - 3623 , - 3286 , - 3753 , - 3952 , - 2811 , - 3546 , - 797 , - 2068 , - 1999 , - 3806 , - 2129 , - 184 , - 1187 , - 4066 , - 3461 , - 2588 , - 375 , - 38 , - 505 , - 704 , - 3851 , - 298 , - 1837 , - 3108 , - 3039 , - 558 , - 3169 , - 1224 , - 2227 , - 818 , - 213 , - 3628 , - 1415 , - 1078 , - 1545 , - 1744 , - 603 , - 1338 , - 2877 , - 4148 , - 4079 , - 1598 , - 4209 , - 2264 , - 3267 , - 1858 , - 1253 , - 380 , - 2455 , - 2118 , - 2585 , - 2784 , - 1643 , - 2378 , - 3917 , - 900 , - 831 , - 2638 , - 961 , - 3304 , - 19 , - 2898 , - 2293 , - 1420 , - 3495 , - 3158 , - 3625 , - 3824 , - 2683 , - 3418 , - 669 , - 1940 , - 1871 , - 3678 , - 2001 , - 56 , - 1059 , - 3938 , - 3333 , - 2460 , - 247 , - 4198 , - 377 , - 576 , - 3723 , - 170 , - 1709 , - 2980 , - 2911 , - 430 , - 3041 , - 1096 , - 2099 , - 690 , - 85 , - 3500 , - 1287 , - 950 , - 1417 , - 1616 , - 475 , - 1210 , - 2749 , - 4020 , - 3951 , - 1470 , - 4081 , - 2136 , - 3139 , - 1730 , - 1125 , - 252 , - 2327 , - 1990 , - 2457 , - 2656 , - 1515 , - 2250 , - 3789 , - 772 , - 703 , - 2510 , - 833 , - 3176 , - 4179 , - 2770 , - 2165 , - 1292 , - 3367 , - 3030 , - 3497 , - 3696 , - 2555 , - 3290 , - 541 , - 1812 , - 1743 , - 3550 , - 1873 , - 4216 , - 931 , - 3810 , - 3205 , - 2332 , - 119 , - 4070 , - 249 , - 448 , - 3595 , - 42 , - 1581 , - 2852 , - 2783 , - 302 , - 2913 , - 968 , - 1971 , - 562 , - 4245 , - 3372 , - 1159 , - 822 , - 1289 , - 1488 , - 347 , - 1082 , - 2621 , - 3892 , - 3823 , - 1342 , - 3953 , - 2008 , - 3011 , - 1602 , - 997 , - 124 , - 2199 , - 1862 , - 2329 , - 2528 , - 1387 , - 2122 , - 3661 , - 644 , - 575 , - 2382 , - 705 , - 3048 , - 4051 , - 2642 , - 2037 , - 1164 , - 3239 , - 2902 , - 3369 , - 3568 , - 2427 , - 3162 , - 413 , - 1684 , - 1615 , - 3422 , - 1745 , - 4088 , - 803 , - 3682 , - 3077 , - 2204 , - 4279 , - 3942 , - 121 , - 320 , - 3467 , - 4202 , - 1453 , - 2724 , - 2655 , - 174 , - 2785 , - 840 , - 1843 , - 434 , - 4117 , - 3244 , - 1031 , - 694 , - 1161 , - 1360 , - 219 , - 954 , - 2493 , - 3764 , - 3695 , - 1214 , - 3825 , - 1880 , - 2883 , - 1474 , - 869 , - 4284 , - 2071 , - 1734 , - 2201 , - 2400 , - 1259 , - 1994 , - 3533 , - 516 , - 447 , - 2254 , - 577 , - 2920 , - 3923 , - 2514 , - 1909 , - 1036 , - 3111 , - 2774 , - 3241 , - 3440 , - 2299 , - 3034 , - 285 , - 1556 , - 1487 , - 3294 , - 1617 , - 3960 , - 675 , - 3554 , - 2949 , - 2076 , - 4151 , - 3814 , - 4281 , - 192 , - 3339 , - 4074 , - 1325 , - 2596 , - 2527 , - 46 , - 2657 , - 712 , - 1715 , - 306 , - 3989 , - 3116 , - 903 , - 566 , - 1033 , - 1232 , - 91 , - 826 , - 2365 , - 3636 , - 3567 , - 1086 , - 3697 , - 1752 , - 2755 , - 1346 , - 741 , - 4156 , - 1943 , - 1606 , - 2073 , - 2272 , - 1131 , - 1866 , - 3405 , - 388 , - 319 , - 2126 , - 449 , - 2792 , - 3795 , - 2386 , - 1781 , - 908 , - 2983 , - 2646 , - 3113 , - 3312 , - 2171 , - 2906 , - 157 , - 1428 , - 1359 , - 3166 , - 1489 , - 3832 , - 547 , - 3426 , - 2821 , - 1948 , - 4023 , - 3686 , - 4153 , - 64 , - 3211 , - 3946 , - 1197 , - 2468 , - 2399 , - 4206 , - 2529 , - 584 , - 1587 , - 178 , - 3861 , - 2988 , - 775 , - 438 , - 905 , - 1104 , - 4251 , - 698 , - 2237 , - 3508 , - 3439 , - 958 , - 3569 , - 1624 , - 2627 , - 1218 , - 613 , - 4028 , - 1815 , - 1478 , - 1945 , - 2144 , - 1003 , - 1738 , - 3277 , - 260 , - 191 , - 1998 , - 321 , - 2664 , - 3667 , - 2258 , - 1653 , - 780 , - 2855 , - 2518 , - 2985 , - 3184 , - 2043 , - 2778 , - 29 , - 1300 , - 1231 , - 3038 , - 1361 , - 3704 , - 419 , - 3298 , - 2693 , - 1820 , - 3895 , - 3558 , - 4025 , - 4224 , - 3083 , - 3818 , - 1069 , - 2340 , - 2271 , - 4078 , - 2401 , - 456 , - 1459 , - 50 , - 3733 , - 2860 , - 647 , - 310 , - 777 , - 976 , - 4123 , - 570 , - 2109 , - 3380 , - 3311 , - 830 , - 3441 , - 1496 , - 2499 , - 1090 , - 485 , - 3900 , - 1687 , - 1350 , - 1817 , - 2016 , - 875 , - 1610 , - 3149 , - 132 , - 63 , - 1870 , - 193 , - 2536 , - 3539 , - 2130 , - 1525 , - 652 , - 2727 , - 2390 , - 2857 , - 3056 , - 1915 , - 2650 , - 4189 , - 1172 , - 1103 , - 2910 , - 1233 , - 3576 , - 291 , - 3170 , - 2565 , - 1692 , - 3767 , - 3430 , - 3897 , - 4096 , - 2955 , - 3690 , - 941 , - 2212 , - 2143 , - 3950 , - 2273 , - 328 , - 1331 , - 4210 , - 3605 , - 2732 , - 519 , - 182 , - 649 , - 848 , - 3995 , - 442 , - 1981 , - 3252 , - 3183 , - 702 , - 3313 , - 1368 , - 2371 , - 962 , - 357 , - 3772 , - 1559 , - 1222 , - 1689 , - 1888 , - 747 , - 1482 , - 3021 , - 4 , - 4223 , - 1742 , - 65 , - 2408 , - 3411 , - 2002 , - 1397 , - 524 , - 2599 , - 2262 , - 2729 , - 2928 , - 1787 , - 2522 , - 4061 , - 1044 , - 975 , - 2782 , - 1105 , - 3448 , - 163 , - 3042 , - 2437 , - 1564 , - 3639 , - 3302 , - 3769 , - 3968 , - 2827 , - 3562 , - 813 , - 2084 , - 2015 , - 3822 , - 2145 , - 200 , - 1203 , - 4082 , - 3477 , - 2604 , - 391 , - 54 , - 521 , - 720 , - 3867 , - 314 , - 1853 , - 3124 , - 3055 , - 574 , - 3185 , - 1240 , - 2243 , - 834 , - 229 , - 3644 , - 1431 , - 1094 , - 1561 , - 1760 , - 619 , - 1354 , - 2893 , - 4164 , - 4095 , - 1614 , - 4225 , - 2280 , - 3283 , - 1874 , - 1269 , - 396 , - 2471 , - 2134 , - 2601 , - 2800 , - 1659 , - 2394 , - 3933 , - 916 , - 847 , - 2654 , - 977 , - 3320 , - 35 , - 2914 , - 2309 , - 1436 , - 3511 , - 3174 , - 3641 , - 3840 , - 2699 , - 3434 , - 685 , - 1956 , - 1887 , - 3694 , - 2017 , - 72 , - 1075 , - 3954 , - 3349 , - 2476 , - 263 , - 4214 , - 393 , - 592 , - 3739 , - 186 , - 1725 , - 2996 , - 2927 , - 446 , - 3057 , - 1112 , - 2115 , - 706 , - 101 , - 3516 , - 1303 , - 966 , - 1433 , - 1632 , - 491 , - 1226 , - 2765 , - 4036 , - 3967 , - 1486 , - 4097 , - 2152 , - 3155 , - 1746 , - 1141 , - 268 , - 2343 , - 2006 , - 2473 , - 2672 , - 1531 , - 2266 , - 3805 , - 788 , - 719 , - 2526 , - 849 , - 3192 , - 4195 , - 2786 , - 2181 , - 1308 , - 3383 , - 3046 , - 3513 , - 3712 , - 2571 , - 3306 , - 557 , - 1828 , - 1759 , - 3566 , - 1889 , - 4232 , - 947 , - 3826 , - 3221 , - 2348 , - 135 , - 4086 , - 265 , - 464 , - 3611 , - 58 , - 1597 , - 2868 , - 2799 , - 318 , - 2929 , - 984 , - 1987 , - 578 , - 4261 , - 3388 , - 1175 , - 838 , - 1305 , - 1504 , - 363 , - 1098 , - 2637 , - 3908 , - 3839 , - 1358 , - 3969 , - 2024 , - 3027 , - 1618 , - 1013 , - 140 , - 2215 , - 1878 , - 2345 , - 2544 , - 1403 , - 2138 , - 3677 , - 660 , - 591 , - 2398 , - 721 , - 3064 , - 4067 , - 2658 , - 2053 , - 1180 , - 3255 , - 2918 , - 3385 , - 3584 , - 2443 , - 3178 , - 429 , - 1700 , - 1631 , - 3438 , - 1761 , - 4104 , - 819 , - 3698 , - 3093 , - 2220 , - 7 , - 3958 , - 137 , - 336 , - 3483 , - 4218 , - 1469 , - 2740 , - 2671 , - 190 , - 2801 , - 856 , - 1859 , - 450 , - 4133 , - 3260 , - 1047 , - 710 , - 1177 , - 1376 , - 235 , - 970 , - 2509 , - 3780 , - 3711 , - 1230 , - 3841 , - 1896 , - 2899 , - 1490 , - 885 , - 12 , - 2087 , - 1750 , - 2217 , - 2416 , - 1275 , - 2010 , - 3549 , - 532 , - 463 , - 2270 , - 593 , - 2936 , - 3939 , - 2530 , - 1925 , - 1052 , - 3127 , - 2790 , - 3257 , - 3456 , - 2315 , - 3050 , - 301 , - 1572 , - 1503 , - 3310 , - 1633 , - 3976 , - 691 , - 3570 , - 2965 , - 2092 , - 4167 , - 3830 , - 9 , - 208 , - 3355 , - 4090 , - 1341 , - 2612 , - 2543 , - 62 , - 2673 , - 728 , - 1731 , - 322 , - 4005 , - 3132 , - 919 , - 582 , - 1049 , - 1248 , - 107 , - 842 , - 2381 , - 3652 , - 3583 , - 1102 , - 3713 , - 1768 , - 2771 , - 1362 , - 757 , - 4172 , - 1959 , - 1622 , - 2089 , - 2288 , - 1147 , - 1882 , - 3421 , - 404 , - 335 , - 2142 , - 465 , - 2808 , - 3811 , - 2402 , - 1797 , - 924 , - 2999 , - 2662 , - 3129 , - 3328 , - 2187 , - 2922 , - 173 , - 1444 , - 1375 , - 3182 , - 1505 , - 3848 , - 563 , - 3442 , - 2837 , - 1964 , - 4039 , - 3702 , - 4169 , - 80 , - 3227 , - 3962 , - 1213 , - 2484 , - 2415 , - 4222 , - 2545 , - 600 , - 1603 , - 194 , - 3877 , - 3004 , - 791 , - 454 , - 921 , - 1120 , - 4267 , - 714 , - 2253 , - 3524 , - 3455 , - 974 , - 3585 , - 1640 , - 2643 , - 1234 , - 629 , - 4044 , - 1831 , - 1494 , - 1961 , - 2160 , - 1019 , - 1754 , - 3293 , - 276 , - 207 , - 2014 , - 337 , - 2680 , - 3683 , - 2274 , - 1669 , - 796 , - 2871 , - 2534 , - 3001 , - 3200 , - 2059 , - 2794 , - 45 , - 1316 , - 1247 , - 3054 , - 1377 , - 3720 , - 435 , - 3314 , - 2709 , - 1836 , - 3911 , - 3574 , - 4041 , - 4240 , - 3099 , - 3834 , - 1085 , - 2356 , - 2287 , - 4094 , - 2417 , - 472 , - 1475 , - 66 , - 3749 , - 2876 , - 663 , - 326 , - 793 , - 992 , - 4139 , - 586 , - 2125 , - 3396 , - 3327 , - 846 , - 3457 , - 1512 , - 2515 , - 1106 , - 501 , - 3916 , - 1703 , - 1366 , - 1833 , - 2032 , - 891 , - 1626 , - 3165 , - 148 , - 79 , - 1886 , - 209 , - 2552 , - 3555 , - 2146 , - 1541 , - 668 , - 2743 , - 2406 , - 2873 , - 3072 , - 1931 , - 2666 , - 4205 , - 1188 , - 1119 , - 2926 , - 1249 , - 3592 , - 307 , - 3186 , - 2581 , - 1708 , - 3783 , - 3446 , - 3913 , - 4112 , - 2971 , - 3706 , - 957 , - 2228 , - 2159 , - 3966 , - 2289 , - 344 , - 1347 , - 4226 , - 3621 , - 2748 , - 535 , - 198 , - 665 , - 864 , - 4011 , - 458 , - 1997 , - 3268 , - 3199 , - 718 , - 3329 , - 1384 , - 2387 , - 978 , - 373 , - 3788 , - 1575 , - 1238 , - 1705 , - 1904 , - 763 , - 1498 , - 3037 , - 20 , - 4239 , - 1758 , - 81 , - 2424 , - 3427 , - 2018 , - 1413 , - 540 , - 2615 , - 2278 , - 2745 , - 2944 , - 1803 , - 2538 , - 4077 , - 1060 , - 991 , - 2798 , - 1121 , - 3464 , - 179 , - 3058 , - 2453 , - 1580 , - 3655 , - 3318 , - 3785 , - 3984 , - 2843 , - 3578 , - 829 , - 2100 , - 2031 , - 3838 , - 2161 , - 216 , - 1219 , - 4098 , - 3493 , - 2620 , - 407 , - 70 , - 537 , - 736 , - 3883 , - 330 , - 1869 , - 3140 , - 3071 , - 590 , - 3201 , - 1256 , - 2259 , - 850 , - 245 , - 3660 , - 1447 , - 1110 , - 1577 , - 1776 , - 635 , - 1370 , - 2909 , - 4180 , - 4111 , - 1630 , - 4241 , - 2296 , - 3299 , - 1890 , - 1285 , - 412 , - 2487 , - 2150 , - 2617 , - 2816 , - 1675 , - 2410 , - 3949 , - 932 , - 863 , - 2670 , - 993 , - 3336 , - 51 , - 2930 , - 2325 , - 1452 , - 3527 , - 3190 , - 3657 , - 3856 , - 2715 , - 3450 , - 701 , - 1972 , - 1903 , - 3710 , - 2033 , - 88 , - 1091 , - 3970 , - 3365 , - 2492 , - 279 , - 4230 , - 409 , - 608 , - 3755 , - 202 , - 1741 , - 3012 , - 2943 , - 462 , - 3073 , - 1128 , - 2131 , - 722 , - 117 , - 3532 , - 1319 , - 982 , - 1449 , - 1648 , - 507 , - 1242 , - 2781 , - 4052 , - 3983 , - 1502 , - 4113 , - 2168 , - 3171 , - 1762 , - 1157 , - 284 , - 2359 , - 2022 , - 2489 , - 2688 , - 1547 , - 2282 , - 3821 , - 804 , - 735 , - 2542 , - 865 , - 3208 , - 4211 , - 2802 , - 2197 , - 1324 , - 3399 , - 3062 , - 3529 , - 3728 , - 2587 , - 3322 , - 573 , - 1844 , - 1775 , - 3582 , - 1905 , - 4248 , - 963 , - 3842 , - 3237 , - 2364 , - 151 , - 4102 , - 281 , - 480 , - 3627 , - 74 , - 1613 , - 2884 , - 2815 , - 334 , - 2945 , - 1000 , - 2003 , - 594 , - 4277 , - 3404 , - 1191 , - 854 , - 1321 , - 1520 , - 379 , - 1114 , - 2653 , - 3924 , - 3855 , - 1374 , - 3985 , - 2040 , - 3043 , - 1634 , - 1029 , - 156 , - 2231 , - 1894 , - 2361 , - 2560 , - 1419 , - 2154 , - 3693 , - 676 , - 607 , - 2414 , - 737 , - 3080 , - 4083 , - 2674 , - 2069 , - 1196 , - 3271 , - 2934 , - 3401 , - 3600 , - 2459 , - 3194 , - 445 , - 1716 , - 1647 , - 3454 , - 1777 , - 4120 , - 835 , - 3714 , - 3109 , - 2236 , - 23 , - 3974 , - 153 , - 352 , - 3499 , - 4234 , - 1485 , - 2756 , - 2687 , - 206 , - 2817 , - 872 , - 1875 , - 466 , - 4149 , - 3276 , - 1063 , - 726 , - 1193 , - 1392 , - 251 , - 986 , - 2525 , - 3796 , - 3727 , - 1246 , - 3857 , - 1912 , - 2915 , - 1506 , - 901 , - 28 , - 2103 , - 1766 , - 2233 , - 2432 , - 1291 , - 2026 , - 3565 , - 548 , - 479 , - 2286 , - 609 , - 2952 , - 3955 , - 2546 , - 1941 , - 1068 , - 3143 , - 2806 , - 3273 , - 3472 , - 2331 , - 3066 , - 317 , - 1588 , - 1519 , - 3326 , - 1649 , - 3992 , - 707 , - 3586 , - 2981 , - 2108 , - 4183 , - 3846 , - 25 , - 224 , - 3371 , - 4106 , - 1357 , - 2628 , - 2559 , - 78 , - 2689 , - 744 , - 1747 , - 338 , - 4021 , - 3148 , - 935 , - 598 , - 1065 , - 1264 , - 123 , - 858 , - 2397 , - 3668 , - 3599 , - 1118 , - 3729 , - 1784 , - 2787 , - 1378 , - 773 , - 4188 , - 1975 , - 1638 , - 2105 , - 2304 , - 1163 , - 1898 , - 3437 , - 420 , - 351 , - 2158 , - 481 , - 2824 , - 3827 , - 2418 , - 1813 , - 940 , - 3015 , - 2678 , - 3145 , - 3344 , - 2203 , - 2938 , - 189 , - 1460 , - 1391 , - 3198 , - 1521 , - 3864 , - 579 , - 3458 , - 2853 , - 1980 , - 4055 , - 3718 , - 4185 , - 96 , - 3243 , - 3978 , - 1229 , - 2500 , - 2431 , - 4238 , - 2561 , - 616 , - 1619 , - 210 , - 3893 , - 3020 , - 807 , - 470 , - 937 , - 1136 , - 4283 , - 730 , - 2269 , - 3540 , - 3471 , - 990 , - 3601 , - 1656 , - 2659 , - 1250 , - 645 , - 4060 , - 1847 , - 1510 , - 1977 , - 2176 , - 1035 , - 1770 , - 3309 , - 292 , - 223 , - 2030 , - 353 , - 2696 , - 3699 , - 2290 , - 1685 , - 812 , - 2887 , - 2550 , - 3017 , - 3216 , - 2075 , - 2810 , - 61 , - 1332 , - 1263 , - 3070 , - 1393 , - 3736 , - 451 , - 3330 , - 2725 , - 1852 , - 3927 , - 3590 , - 4057 , - 4256 , - 3115 , - 3850 , - 1101 , - 2372 , - 2303 , - 4110 , - 2433 , - 488 , - 1491 , - 82 , - 3765 , - 2892 , - 679 , - 342 , - 809 , - 1008 , - 4155 , - 602 , - 2141 , - 3412 , - 3343 , - 862 , - 3473 , - 1528 , - 2531 , - 1122 , - 517 , - 3932 , - 1719 , - 1382 , - 1849 , - 2048 , - 907 , - 1642 , - 3181 , - 164 , - 95 , - 1902 , - 225 , - 2568 , - 3571 , - 2162 , - 1557 , - 684 , - 2759 , - 2422 , - 2889 , - 3088 , - 1947 , - 2682 , - 4221 , - 1204 , - 1135 , - 2942 , - 1265 , - 3608 , - 323 , - 3202 , - 2597 , - 1724 , - 3799 , - 3462 , - 3929 , - 4128 , - 2987 , - 3722 , - 973 , - 2244 , - 2175 , - 3982 , - 2305 , - 360 , - 1363 , - 4242 , - 3637 , - 2764 , - 551 , - 214 , - 681 , - 880 , - 4027 , - 474 , - 2013 , - 3284 , - 3215 , - 734 , - 3345 , - 1400 , - 2403 , - 994 , - 389 , - 3804 , - 1591 , - 1254 , - 1721 , - 1920 , - 779 , - 1514 , - 3053 , - 36 , - 4255 , - 1774 , - 97 , - 2440 , - 3443 , - 2034 , - 1429 , - 556 , - 2631 , - 2294 , - 2761 , - 2960 , - 1819 , - 2554 , - 4093 , - 1076 , - 1007 , - 2814 , - 1137 , - 3480 , - 195 , - 3074 , - 2469 , - 1596 , - 3671 , - 3334 , - 3801 , - 4000 , - 2859 , - 3594 , - 845 , - 2116 , - 2047 , - 3854 , - 2177 , - 232 , - 1235 , - 4114 , - 3509 , - 2636 , - 423 , - 86 , - 553 , - 752 , - 3899 , - 346 , - 1885 , - 3156 , - 3087 , - 606 , - 3217 , - 1272 , - 2275 , - 866 , - 261 , - 3676 , - 1463 , - 1126 , - 1593 , - 1792 , - 651 , - 1386 , - 2925 , - 4196 , - 4127 , - 1646 , - 4257 , - 2312 , - 3315 , - 1906 , - 1301 , - 428 , - 2503 , - 2166 , - 2633 , - 2832 , - 1691 , - 2426 , - 3965 , - 948 , - 879 , - 2686 , - 1009 , - 3352 , - 67 , - 2946 , - 2341 , - 1468 , - 3543 , - 3206 , - 3673 , - 3872 , - 2731 , - 3466 , - 717 , - 1988 , - 1919 , - 3726 , - 2049 , - 104 , - 1107 , - 3986 , - 3381 , - 2508 , - 295 , - 4246 , - 425 , - 624 , - 3771 , - 218 , - 1757 , - 3028 , - 2959 , - 478 , - 3089 , - 1144 , - 2147 , - 738 , - 133 , - 3548 , - 1335 , - 998 , - 1465 , - 1664 , - 523 , - 1258 , - 2797 , - 4068 , - 3999 , - 1518 , - 4129 , - 2184 , - 3187 , - 1778 , - 1173 , - 300 , - 2375 , - 2038 , - 2505 , - 2704 , - 1563 , - 2298 , - 3837 , - 820 , - 751 , - 2558 , - 881 , - 3224 , - 4227 , - 2818 , - 2213 , - 1340 , - 3415 , - 3078 , - 3545 , - 3744 , - 2603 , - 3338 , - 589 , - 1860 , - 1791 , - 3598 , - 1921 , - 4264 , - 979 , - 3858 , - 3253 , - 2380 , - 167 , - 4118 , - 297 , - 496 , - 3643 , - 90 , - 1629 , - 2900 , - 2831 , - 350 , - 2961 , - 1016 , - 2019 , - 610 , - 5 , - 3420 , - 1207 , - 870 , - 1337 , - 1536 , - 395 , - 1130 , - 2669 , - 3940 , - 3871 , - 1390 , - 4001 , - 2056 , - 3059 , - 1650 , - 1045 , - 172 , - 2247 , - 1910 , - 2377 , - 2576 , - 1435 , - 2170 , - 3709 , - 692 , - 623 , - 2430 , - 753 , - 3096 , - 4099 , - 2690 , - 2085 , - 1212 , - 3287 , - 2950 , - 3417 , - 3616 , - 2475 , - 3210 , - 461 , - 1732 , - 1663 , - 3470 , - 1793 , - 4136 , - 851 , - 3730 , - 3125 , - 2252 , - 39 , - 3990 , - 169 , - 368 , - 3515 , - 4250 , - 1501 , - 2772 , - 2703 , - 222 , - 2833 , - 888 , - 1891 , - 482 , - 4165 , - 3292 , - 1079 , - 742 , - 1209 , - 1408 , - 267 , - 1002 , - 2541 , - 3812 , - 3743 , - 1262 , - 3873 , - 1928 , - 2931 , - 1522 , - 917 , - 44 , - 2119 , - 1782 , - 2249 , - 2448 , - 1307 , - 2042 , - 3581 , - 564 , - 495 , - 2302 , - 625 , - 2968 , - 3971 , - 2562 , - 1957 , - 1084 , - 3159 , - 2822 , - 3289 , - 3488 , - 2347 , - 3082 , - 333 , - 1604 , - 1535 , - 3342 , - 1665 , - 4008 , - 723 , - 3602 , - 2997 , - 2124 , - 4199 , - 3862 , - 41 , - 240 , - 3387 , - 4122 , - 1373 , - 2644 , - 2575 , - 94 , - 2705 , - 760 , - 1763 , - 354 , - 4037 , - 3164 , - 951 , - 614 , - 1081 , - 1280 , - 139 , - 874 , - 2413 , - 3684 , - 3615 , - 1134 , - 3745 , - 1800 , - 2803 , - 1394 , - 789 , - 4204 , - 1991 , - 1654 , - 2121 , - 2320 , - 1179 , - 1914 , - 3453 , - 436 , - 367 , - 2174 , - 497 , - 2840 , - 3843 , - 2434 , - 1829 , - 956 , - 3031 , - 2694 , - 3161 , - 3360 , - 2219 , - 2954 , - 205 , - 1476 , - 1407 , - 3214 , - 1537 , - 3880 , - 595 , - 3474 , - 2869 , - 1996 , - 4071 , - 3734 , - 4201 , - 112 , - 3259 , - 3994 , - 1245 , - 2516 , - 2447 , - 4254 , - 2577 , - 632 , - 1635 , - 226 , - 3909 , - 3036 , - 823 , - 486 , - 953 , - 1152 , - 11 , - 746 , - 2285 , - 3556 , - 3487 , - 1006 , - 3617 , - 1672 , - 2675 , - 1266 , - 661 , - 4076 , - 1863 , - 1526 , - 1993 , - 2192 , - 1051 , - 1786 , - 3325 , - 308 , - 239 , - 2046 , - 369 , - 2712 , - 3715 , - 2306 , - 1701 , - 828 , - 2903 , - 2566 , - 3033 , - 3232 , - 2091 , - 2826 , - 77 , - 1348 , - 1279 , - 3086 , - 1409 , - 3752 , - 467 , - 3346 , - 2741 , - 1868 , - 3943 , - 3606 , - 4073 , - 4272 , - 3131 , - 3866 , - 1117 , - 2388 , - 2319 , - 4126 , - 2449 , - 504 , - 1507 , - 98 , - 3781 , - 2908 , - 695 , - 358 , - 825 , - 1024 , - 4171 , - 618 , - 2157 , - 3428 , - 3359 , - 878 , - 3489 , - 1544 , - 2547 , - 1138 , - 533 , - 3948 , - 1735 , - 1398 , - 1865 , - 2064 , - 923 , - 1658 , - 3197 , - 180 , - 111 , - 1918 , - 241 , - 2584 , - 3587 , - 2178 , - 1573 , - 700 , - 2775 , - 2438 , - 2905 , - 3104 , - 1963 , - 2698 , - 4237 , - 1220 , - 1151 , - 2958 , - 1281 , - 3624 , - 339 , - 3218 , - 2613 , - 1740 , - 3815 , - 3478 , - 3945 , - 4144 , - 3003 , - 3738 , - 989 , - 2260 , - 2191 , - 3998 , - 2321 , - 376 , - 1379 , - 4258 , - 3653 , - 2780 , - 567 , - 230 , - 697 , - 896 , - 4043 , - 490 , - 2029 , - 3300 , - 3231 , - 750 , - 3361 , - 1416 , - 2419 , - 1010 , - 405 , - 3820 , - 1607 , - 1270 , - 1737 , - 1936 , - 795 , - 1530 , - 3069 , - 52 , - 4271 , - 1790 , - 113 , - 2456 , - 3459 , - 2050 , - 1445 , - 572 , - 2647 , - 2310 , - 2777 , - 2976 , - 1835 , - 2570 , - 4109 , - 1092 , - 1023 , - 2830 , - 1153 , - 3496 , - 211 , - 3090 , - 2485 , - 1612 , - 3687 , - 3350 , - 3817 , - 4016 , - 2875 , - 3610 , - 861 , - 2132 , - 2063 , - 3870 , - 2193 , - 248 , - 1251 , - 4130 , - 3525 , - 2652 , - 439 , - 102 , - 569 , - 768 , - 3915 , - 362 , - 1901 , - 3172 , - 3103 , - 622 , - 3233 , - 1288 , - 2291 , - 882 , - 277 , - 3692 , - 1479 , - 1142 , - 1609 , - 1808 , - 667 , - 1402 , - 2941 , - 4212 , - 4143 , - 1662 , - 4273 , - 2328 , - 3331 , - 1922 , - 1317 , - 444 , - 2519 , - 2182 , - 2649 , - 2848 , - 1707 , - 2442 , - 3981 , - 964 , - 895 , - 2702 , - 1025 , - 3368 , - 83 , - 2962 , - 2357 , - 1484 , - 3559 , - 3222 , - 3689 , - 3888 , - 2747 , - 3482 , - 733 , - 2004 , - 1935 , - 3742 , - 2065 , - 120 , - 1123 , - 4002 , - 3397 , - 2524 , - 311 , - 4262 , - 441 , - 640 , - 3787 , - 234 , - 1773 , - 3044 , - 2975 , - 494 , - 3105 , - 1160 , - 2163 , - 754 , - 149 , - 3564 , - 1351 , - 1014 , - 1481 , - 1680 , - 539 , - 1274 , - 2813 , - 4084 , - 4015 , - 1534 , - 4145 , - 2200 , - 3203 , - 1794 , - 1189 , - 316 , - 2391 , - 2054 , - 2521 , - 2720 , - 1579 , - 2314 , - 3853 , - 836 , - 767 , - 2574 , - 897 , - 3240 , - 4243 , - 2834 , - 2229 , - 1356 , - 3431 , - 3094 , - 3561 , - 3760 , - 2619 , - 3354 , - 605 , - 1876 , - 1807 , - 3614 , - 1937 , - 4280 , - 995 , - 3874 , - 3269 , - 2396 , - 183 , - 4134 , - 313 , - 512 , - 3659 , - 106 , - 1645 , - 2916 , - 2847 , - 366 , - 2977 , - 1032 , - 2035 , - 626 , - 21 , - 3436 , - 1223 , - 886 , - 1353 , - 1552 , - 411 , - 1146 , - 2685 , - 3956 , - 3887 , - 1406 , - 4017 , - 2072 , - 3075 , - 1666 , - 1061 , - 188 , - 2263 , - 1926 , - 2393 , - 2592 , - 1451 , - 2186 , - 3725 , - 708 , - 639 , - 2446 , - 769 , - 3112 , - 4115 , - 2706 , - 2101 , - 1228 , - 3303 , - 2966 , - 3433 , - 3632 , - 2491 , - 3226 , - 477 , - 1748 , - 1679 , - 3486 , - 1809 , - 4152 , - 867 , - 3746 , - 3141 , - 2268 , - 55 , - 4006 , - 185 , - 384 , - 3531 , - 4266 , - 1517 , - 2788 , - 2719 , - 238 , - 2849 , - 904 , - 1907 , - 498 , - 4181 , - 3308 , - 1095 , - 758 , - 1225 , - 1424 , - 283 , - 1018 , - 2557 , - 3828 , - 3759 , - 1278 , - 3889 , - 1944 , - 2947 , - 1538 , - 933 , - 60 , - 2135 , - 1798 , - 2265 , - 2464 , - 1323 , - 2058 , - 3597 , - 580 , - 511 , - 2318 , - 641 , - 2984 , - 3987 , - 2578 , - 1973 , - 1100 , - 3175 , - 2838 , - 3305 , - 3504 , - 2363 , - 3098 , - 349 , - 1620 , - 1551 , - 3358 , - 1681 , - 4024 , - 739 , - 3618 , - 3013 , - 2140 , - 4215 , - 3878 , - 57 , - 256 , - 3403 , - 4138 , - 1389 , - 2660 , - 2591 , - 110 , - 2721 , - 776 , - 1779 , - 370 , - 4053 , - 3180 , - 967 , - 630 , - 1097 , - 1296 , - 155 , - 890 , - 2429 , - 3700 , - 3631 , - 1150 , - 3761 , - 1816 , - 2819 , - 1410 , - 805 , - 4220 , - 2007 , - 1670 , - 2137 , - 2336 , - 1195 , - 1930 , - 3469 , - 452 , - 383 , - 2190 , - 513 , - 2856 , - 3859 , - 2450 , - 1845 , - 972 , - 3047 , - 2710 , - 3177 , - 3376 , - 2235 , - 2970 , - 221 , - 1492 , - 1423 , - 3230 , - 1553 , - 3896 , - 611 , - 3490 , - 2885 , - 2012 , - 4087 , - 3750 , - 4217 , - 128 , - 3275 , - 4010 , - 1261 , - 2532 , - 2463 , - 4270 , - 2593 , - 648 , - 1651 , - 242 , - 3925 , - 3052 , - 839 , - 502 , - 969 , - 1168 , - 27 , - 762 , - 2301 , - 3572 , - 3503 , - 1022 , - 3633 , - 1688 , - 2691 , - 1282 , - 677 , - 4092 , - 1879 , - 1542 , - 2009 , - 2208 , - 1067 , - 1802 , - 3341 , - 324 , - 255 , - 2062 , - 385 , - 2728 , - 3731 , - 2322 , - 1717 , - 844 , - 2919 , - 2582 , - 3049 , - 3248 , - 2107 , - 2842 , - 93 , - 1364 , - 1295 , - 3102 , - 1425 , - 3768 , - 483 , - 3362 , - 2757 , - 1884 , - 3959 , - 3622 , - 4089 , - 0 , - 2109 , - 2314 , - 615 , - 1364 , - 209 , - 1502 , - 891 , - 2728 , - 2661 , - 690 , - 1167 , - 4092 , - 761 , - 4230 , - 1443 , - 1104 , - 3213 , - 3418 , - 1719 , - 2468 , - 1313 , - 2606 , - 1995 , - 3832 , - 3765 , - 1794 , - 2271 , - 844 , - 1865 , - 982 , - 2547 , - 2208 , - 4317 , - 170 , - 2823 , - 3572 , - 2417 , - 3710 , - 3099 , - 584 , - 517 , - 2898 , - 3375 , - 1948 , - 2969 , - 2086 , - 3651 , - 3312 , - 1069 , - 1274 , - 3927 , - 324 , - 3521 , - 462 , - 4203 , - 1688 , - 1621 , - 4002 , - 127 , - 3052 , - 4073 , - 3190 , - 403 , - 64 , - 2173 , - 2378 , - 679 , - 1428 , - 273 , - 1566 , - 955 , - 2792 , - 2725 , - 754 , - 1231 , - 4156 , - 825 , - 4294 , - 1507 , - 1168 , - 3277 , - 3482 , - 1783 , - 2532 , - 1377 , - 2670 , - 2059 , - 3896 , - 3829 , - 1858 , - 2335 , - 908 , - 1929 , - 1046 , - 2611 , - 2272 , - 29 , - 234 , - 2887 , - 3636 , - 2481 , - 3774 , - 3163 , - 648 , - 581 , - 2962 , - 3439 , - 2012 , - 3033 , - 2150 , - 3715 , - 3376 , - 1133 , - 1338 , - 3991 , - 388 , - 3585 , - 526 , - 4267 , - 1752 , - 1685 , - 4066 , - 191 , - 3116 , - 4137 , - 3254 , - 467 , - 128 , - 2237 , - 2442 , - 743 , - 1492 , - 337 , - 1630 , - 1019 , - 2856 , - 2789 , - 818 , - 1295 , - 4220 , - 889 , - 6 , - 1571 , - 1232 , - 3341 , - 3546 , - 1847 , - 2596 , - 1441 , - 2734 , - 2123 , - 3960 , - 3893 , - 1922 , - 2399 , - 972 , - 1993 , - 1110 , - 2675 , - 2336 , - 93 , - 298 , - 2951 , - 3700 , - 2545 , - 3838 , - 3227 , - 712 , - 645 , - 3026 , - 3503 , - 2076 , - 3097 , - 2214 , - 3779 , - 3440 , - 1197 , - 1402 , - 4055 , - 452 , - 3649 , - 590 , - 4331 , - 1816 , - 1749 , - 4130 , - 255 , - 3180 , - 4201 , - 3318 , - 531 , - 192 , - 2301 , - 2506 , - 807 , - 1556 , - 401 , - 1694 , - 1083 , - 2920 , - 2853 , - 882 , - 1359 , - 4284 , - 953 , - 70 , - 1635 , - 1296 , - 3405 , - 3610 , - 1911 , - 2660 , - 1505 , - 2798 , - 2187 , - 4024 , - 3957 , - 1986 , - 2463 , - 1036 , - 2057 , - 1174 , - 2739 , - 2400 , - 157 , - 362 , - 3015 , - 3764 , - 2609 , - 3902 , - 3291 , - 776 , - 709 , - 3090 , - 3567 , - 2140 , - 3161 , - 2278 , - 3843 , - 3504 , - 1261 , - 1466 , - 4119 , - 516 , - 3713 , - 654 , - 43 , - 1880 , - 1813 , - 4194 , - 319 , - 3244 , - 4265 , - 3382 , - 595 , - 256 , - 2365 , - 2570 , - 871 , - 1620 , - 465 , - 1758 , - 1147 , - 2984 , - 2917 , - 946 , - 1423 , - 4348 , - 1017 , - 134 , - 1699 , - 1360 , - 3469 , - 3674 , - 1975 , - 2724 , - 1569 , - 2862 , - 2251 , - 4088 , - 4021 , - 2050 , - 2527 , - 1100 , - 2121 , - 1238 , - 2803 , - 2464 , - 221 , - 426 , - 3079 , - 3828 , - 2673 , - 3966 , - 3355 , - 840 , - 773 , - 3154 , - 3631 , - 2204 , - 3225 , - 2342 , - 3907 , - 3568 , - 1325 , - 1530 , - 4183 , - 580 , - 3777 , - 718 , - 107 , - 1944 , - 1877 , - 4258 , - 383 , - 3308 , - 4329 , - 3446 , - 659 , - 320 , - 2429 , - 2634 , - 935 , - 1684 , - 529 , - 1822 , - 1211 , - 3048 , - 2981 , - 1010 , - 1487 , - 60 , - 1081 , - 198 , - 1763 , - 1424 , - 3533 , - 3738 , - 2039 , - 2788 , - 1633 , - 2926 , - 2315 , - 4152 , - 4085 , - 2114 , - 2591 , - 1164 , - 2185 , - 1302 , - 2867 , - 2528 , - 285 , - 490 , - 3143 , - 3892 , - 2737 , - 4030 , - 3419 , - 904 , - 837 , - 3218 , - 3695 , - 2268 , - 3289 , - 2406 , - 3971 , - 3632 , - 1389 , - 1594 , - 4247 , - 644 , - 3841 , - 782 , - 171 , - 2008 , - 1941 , - 4322 , - 447 , - 3372 , - 41 , - 3510 , - 723 , - 384 , - 2493 , - 2698 , - 999 , - 1748 , - 593 , - 1886 , - 1275 , - 3112 , - 3045 , - 1074 , - 1551 , - 124 , - 1145 , - 262 , - 1827 , - 1488 , - 3597 , - 3802 , - 2103 , - 2852 , - 1697 , - 2990 , - 2379 , - 4216 , - 4149 , - 2178 , - 2655 , - 1228 , - 2249 , - 1366 , - 2931 , - 2592 , - 349 , - 554 , - 3207 , - 3956 , - 2801 , - 4094 , - 3483 , - 968 , - 901 , - 3282 , - 3759 , - 2332 , - 3353 , - 2470 , - 4035 , - 3696 , - 1453 , - 1658 , - 4311 , - 708 , - 3905 , - 846 , - 235 , - 2072 , - 2005 , - 34 , - 511 , - 3436 , - 105 , - 3574 , - 787 , - 448 , - 2557 , - 2762 , - 1063 , - 1812 , - 657 , - 1950 , - 1339 , - 3176 , - 3109 , - 1138 , - 1615 , - 188 , - 1209 , - 326 , - 1891 , - 1552 , - 3661 , - 3866 , - 2167 , - 2916 , - 1761 , - 3054 , - 2443 , - 4280 , - 4213 , - 2242 , - 2719 , - 1292 , - 2313 , - 1430 , - 2995 , - 2656 , - 413 , - 618 , - 3271 , - 4020 , - 2865 , - 4158 , - 3547 , - 1032 , - 965 , - 3346 , - 3823 , - 2396 , - 3417 , - 2534 , - 4099 , - 3760 , - 1517 , - 1722 , - 23 , - 772 , - 3969 , - 910 , - 299 , - 2136 , - 2069 , - 98 , - 575 , - 3500 , - 169 , - 3638 , - 851 , - 512 , - 2621 , - 2826 , - 1127 , - 1876 , - 721 , - 2014 , - 1403 , - 3240 , - 3173 , - 1202 , - 1679 , - 252 , - 1273 , - 390 , - 1955 , - 1616 , - 3725 , - 3930 , - 2231 , - 2980 , - 1825 , - 3118 , - 2507 , - 4344 , - 4277 , - 2306 , - 2783 , - 1356 , - 2377 , - 1494 , - 3059 , - 2720 , - 477 , - 682 , - 3335 , - 4084 , - 2929 , - 4222 , - 3611 , - 1096 , - 1029 , - 3410 , - 3887 , - 2460 , - 3481 , - 2598 , - 4163 , - 3824 , - 1581 , - 1786 , - 87 , - 836 , - 4033 , - 974 , - 363 , - 2200 , - 2133 , - 162 , - 639 , - 3564 , - 233 , - 3702 , - 915 , - 576 , - 2685 , - 2890 , - 1191 , - 1940 , - 785 , - 2078 , - 1467 , - 3304 , - 3237 , - 1266 , - 1743 , - 316 , - 1337 , - 454 , - 2019 , - 1680 , - 3789 , - 3994 , - 2295 , - 3044 , - 1889 , - 3182 , - 2571 , - 56 , - 4341 , - 2370 , - 2847 , - 1420 , - 2441 , - 1558 , - 3123 , - 2784 , - 541 , - 746 , - 3399 , - 4148 , - 2993 , - 4286 , - 3675 , - 1160 , - 1093 , - 3474 , - 3951 , - 2524 , - 3545 , - 2662 , - 4227 , - 3888 , - 1645 , - 1850 , - 151 , - 900 , - 4097 , - 1038 , - 427 , - 2264 , - 2197 , - 226 , - 703 , - 3628 , - 297 , - 3766 , - 979 , - 640 , - 2749 , - 2954 , - 1255 , - 2004 , - 849 , - 2142 , - 1531 , - 3368 , - 3301 , - 1330 , - 1807 , - 380 , - 1401 , - 518 , - 2083 , - 1744 , - 3853 , - 4058 , - 2359 , - 3108 , - 1953 , - 3246 , - 2635 , - 120 , - 53 , - 2434 , - 2911 , - 1484 , - 2505 , - 1622 , - 3187 , - 2848 , - 605 , - 810 , - 3463 , - 4212 , - 3057 , - 4350 , - 3739 , - 1224 , - 1157 , - 3538 , - 4015 , - 2588 , - 3609 , - 2726 , - 4291 , - 3952 , - 1709 , - 1914 , - 215 , - 964 , - 4161 , - 1102 , - 491 , - 2328 , - 2261 , - 290 , - 767 , - 3692 , - 361 , - 3830 , - 1043 , - 704 , - 2813 , - 3018 , - 1319 , - 2068 , - 913 , - 2206 , - 1595 , - 3432 , - 3365 , - 1394 , - 1871 , - 444 , - 1465 , - 582 , - 2147 , - 1808 , - 3917 , - 4122 , - 2423 , - 3172 , - 2017 , - 3310 , - 2699 , - 184 , - 117 , - 2498 , - 2975 , - 1548 , - 2569 , - 1686 , - 3251 , - 2912 , - 669 , - 874 , - 3527 , - 4276 , - 3121 , - 62 , - 3803 , - 1288 , - 1221 , - 3602 , - 4079 , - 2652 , - 3673 , - 2790 , - 3 , - 4016 , - 1773 , - 1978 , - 279 , - 1028 , - 4225 , - 1166 , - 555 , - 2392 , - 2325 , - 354 , - 831 , - 3756 , - 425 , - 3894 , - 1107 , - 768 , - 2877 , - 3082 , - 1383 , - 2132 , - 977 , - 2270 , - 1659 , - 3496 , - 3429 , - 1458 , - 1935 , - 508 , - 1529 , - 646 , - 2211 , - 1872 , - 3981 , - 4186 , - 2487 , - 3236 , - 2081 , - 3374 , - 2763 , - 248 , - 181 , - 2562 , - 3039 , - 1612 , - 2633 , - 1750 , - 3315 , - 2976 , - 733 , - 938 , - 3591 , - 4340 , - 3185 , - 126 , - 3867 , - 1352 , - 1285 , - 3666 , - 4143 , - 2716 , - 3737 , - 2854 , - 67 , - 4080 , - 1837 , - 2042 , - 343 , - 1092 , - 4289 , - 1230 , - 619 , - 2456 , - 2389 , - 418 , - 895 , - 3820 , - 489 , - 3958 , - 1171 , - 832 , - 2941 , - 3146 , - 1447 , - 2196 , - 1041 , - 2334 , - 1723 , - 3560 , - 3493 , - 1522 , - 1999 , - 572 , - 1593 , - 710 , - 2275 , - 1936 , - 4045 , - 4250 , - 2551 , - 3300 , - 2145 , - 3438 , - 2827 , - 312 , - 245 , - 2626 , - 3103 , - 1676 , - 2697 , - 1814 , - 3379 , - 3040 , - 797 , - 1002 , - 3655 , - 52 , - 3249 , - 190 , - 3931 , - 1416 , - 1349 , - 3730 , - 4207 , - 2780 , - 3801 , - 2918 , - 131 , - 4144 , - 1901 , - 2106 , - 407 , - 1156 , - 1 , - 1294 , - 683 , - 2520 , - 2453 , - 482 , - 959 , - 3884 , - 553 , - 4022 , - 1235 , - 896 , - 3005 , - 3210 , - 1511 , - 2260 , - 1105 , - 2398 , - 1787 , - 3624 , - 3557 , - 1586 , - 2063 , - 636 , - 1657 , - 774 , - 2339 , - 2000 , - 4109 , - 4314 , - 2615 , - 3364 , - 2209 , - 3502 , - 2891 , - 376 , - 309 , - 2690 , - 3167 , - 1740 , - 2761 , - 1878 , - 3443 , - 3104 , - 861 , - 1066 , - 3719 , - 116 , - 3313 , - 254 , - 3995 , - 1480 , - 1413 , - 3794 , - 4271 , - 2844 , - 3865 , - 2982 , - 195 , - 4208 , - 1965 , - 2170 , - 471 , - 1220 , - 65 , - 1358 , - 747 , - 2584 , - 2517 , - 546 , - 1023 , - 3948 , - 617 , - 4086 , - 1299 , - 960 , - 3069 , - 3274 , - 1575 , - 2324 , - 1169 , - 2462 , - 1851 , - 3688 , - 3621 , - 1650 , - 2127 , - 700 , - 1721 , - 838 , - 2403 , - 2064 , - 4173 , - 26 , - 2679 , - 3428 , - 2273 , - 3566 , - 2955 , - 440 , - 373 , - 2754 , - 3231 , - 1804 , - 2825 , - 1942 , - 3507 , - 3168 , - 925 , - 1130 , - 3783 , - 180 , - 3377 , - 318 , - 4059 , - 1544 , - 1477 , - 3858 , - 4335 , - 2908 , - 3929 , - 3046 , - 259 , - 4272 , - 2029 , - 2234 , - 535 , - 1284 , - 129 , - 1422 , - 811 , - 2648 , - 2581 , - 610 , - 1087 , - 4012 , - 681 , - 4150 , - 1363 , - 1024 , - 3133 , - 3338 , - 1639 , - 2388 , - 1233 , - 2526 , - 1915 , - 3752 , - 3685 , - 1714 , - 2191 , - 764 , - 1785 , - 902 , - 2467 , - 2128 , - 4237 , - 90 , - 2743 , - 3492 , - 2337 , - 3630 , - 3019 , - 504 , - 437 , - 2818 , - 3295 , - 1868 , - 2889 , - 2006 , - 3571 , - 3232 , - 989 , - 1194 , - 3847 , - 244 , - 3441 , - 382 , - 4123 , - 1608 , - 1541 , - 3922 , - 47 , - 2972 , - 3993 , - 3110 , - 323 , - 4336 , - 2093 , - 2298 , - 599 , - 1348 , - 193 , - 1486 , - 875 , - 2712 , - 2645 , - 674 , - 1151 , - 4076 , - 745 , - 4214 , - 1427 , - 1088 , - 3197 , - 3402 , - 1703 , - 2452 , - 1297 , - 2590 , - 1979 , - 3816 , - 3749 , - 1778 , - 2255 , - 828 , - 1849 , - 966 , - 2531 , - 2192 , - 4301 , - 154 , - 2807 , - 3556 , - 2401 , - 3694 , - 3083 , - 568 , - 501 , - 2882 , - 3359 , - 1932 , - 2953 , - 2070 , - 3635 , - 3296 , - 1053 , - 1258 , - 3911 , - 308 , - 3505 , - 446 , - 4187 , - 1672 , - 1605 , - 3986 , - 111 , - 3036 , - 4057 , - 3174 , - 387 , - 48 , - 2157 , - 2362 , - 663 , - 1412 , - 257 , - 1550 , - 939 , - 2776 , - 2709 , - 738 , - 1215 , - 4140 , - 809 , - 4278 , - 1491 , - 1152 , - 3261 , - 3466 , - 1767 , - 2516 , - 1361 , - 2654 , - 2043 , - 3880 , - 3813 , - 1842 , - 2319 , - 892 , - 1913 , - 1030 , - 2595 , - 2256 , - 13 , - 218 , - 2871 , - 3620 , - 2465 , - 3758 , - 3147 , - 632 , - 565 , - 2946 , - 3423 , - 1996 , - 3017 , - 2134 , - 3699 , - 3360 , - 1117 , - 1322 , - 3975 , - 372 , - 3569 , - 510 , - 4251 , - 1736 , - 1669 , - 4050 , - 175 , - 3100 , - 4121 , - 3238 , - 451 , - 112 , - 2221 , - 2426 , - 727 , - 1476 , - 321 , - 1614 , - 1003 , - 2840 , - 2773 , - 802 , - 1279 , - 4204 , - 873 , - 4342 , - 1555 , - 1216 , - 3325 , - 3530 , - 1831 , - 2580 , - 1425 , - 2718 , - 2107 , - 3944 , - 3877 , - 1906 , - 2383 , - 956 , - 1977 , - 1094 , - 2659 , - 2320 , - 77 , - 282 , - 2935 , - 3684 , - 2529 , - 3822 , - 3211 , - 696 , - 629 , - 3010 , - 3487 , - 2060 , - 3081 , - 2198 , - 3763 , - 3424 , - 1181 , - 1386 , - 4039 , - 436 , - 3633 , - 574 , - 4315 , - 1800 , - 1733 , - 4114 , - 239 , - 3164 , - 4185 , - 3302 , - 515 , - 176 , - 2285 , - 2490 , - 791 , - 1540 , - 385 , - 1678 , - 1067 , - 2904 , - 2837 , - 866 , - 1343 , - 4268 , - 937 , - 54 , - 1619 , - 1280 , - 3389 , - 3594 , - 1895 , - 2644 , - 1489 , - 2782 , - 2171 , - 4008 , - 3941 , - 1970 , - 2447 , - 1020 , - 2041 , - 1158 , - 2723 , - 2384 , - 141 , - 346 , - 2999 , - 3748 , - 2593 , - 3886 , - 3275 , - 760 , - 693 , - 3074 , - 3551 , - 2124 , - 3145 , - 2262 , - 3827 , - 3488 , - 1245 , - 1450 , - 4103 , - 500 , - 3697 , - 638 , - 27 , - 1864 , - 1797 , - 4178 , - 303 , - 3228 , - 4249 , - 3366 , - 579 , - 240 , - 2349 , - 2554 , - 855 , - 1604 , - 449 , - 1742 , - 1131 , - 2968 , - 2901 , - 930 , - 1407 , - 4332 , - 1001 , - 118 , - 1683 , - 1344 , - 3453 , - 3658 , - 1959 , - 2708 , - 1553 , - 2846 , - 2235 , - 4072 , - 4005 , - 2034 , - 2511 , - 1084 , - 2105 , - 1222 , - 2787 , - 2448 , - 205 , - 410 , - 3063 , - 3812 , - 2657 , - 3950 , - 3339 , - 824 , - 757 , - 3138 , - 3615 , - 2188 , - 3209 , - 2326 , - 3891 , - 3552 , - 1309 , - 1514 , - 4167 , - 564 , - 3761 , - 702 , - 91 , - 1928 , - 1861 , - 4242 , - 367 , - 3292 , - 4313 , - 3430 , - 643 , - 304 , - 2413 , - 2618 , - 919 , - 1668 , - 513 , - 1806 , - 1195 , - 3032 , - 2965 , - 994 , - 1471 , - 44 , - 1065 , - 182 , - 1747 , - 1408 , - 3517 , - 3722 , - 2023 , - 2772 , - 1617 , - 2910 , - 2299 , - 4136 , - 4069 , - 2098 , - 2575 , - 1148 , - 2169 , - 1286 , - 2851 , - 2512 , - 269 , - 474 , - 3127 , - 3876 , - 2721 , - 4014 , - 3403 , - 888 , - 821 , - 3202 , - 3679 , - 2252 , - 3273 , - 2390 , - 3955 , - 3616 , - 1373 , - 1578 , - 4231 , - 628 , - 3825 , - 766 , - 155 , - 1992 , - 1925 , - 4306 , - 431 , - 3356 , - 25 , - 3494 , - 707 , - 368 , - 2477 , - 2682 , - 983 , - 1732 , - 577 , - 1870 , - 1259 , - 3096 , - 3029 , - 1058 , - 1535 , - 108 , - 1129 , - 246 , - 1811 , - 1472 , - 3581 , - 3786 , - 2087 , - 2836 , - 1681 , - 2974 , - 2363 , - 4200 , - 4133 , - 2162 , - 2639 , - 1212 , - 2233 , - 1350 , - 2915 , - 2576 , - 333 , - 538 , - 3191 , - 3940 , - 2785 , - 4078 , - 3467 , - 952 , - 885 , - 3266 , - 3743 , - 2316 , - 3337 , - 2454 , - 4019 , - 3680 , - 1437 , - 1642 , - 4295 , - 692 , - 3889 , - 830 , - 219 , - 2056 , - 1989 , - 18 , - 495 , - 3420 , - 89 , - 3558 , - 771 , - 432 , - 2541 , - 2746 , - 1047 , - 1796 , - 641 , - 1934 , - 1323 , - 3160 , - 3093 , - 1122 , - 1599 , - 172 , - 1193 , - 310 , - 1875 , - 1536 , - 3645 , - 3850 , - 2151 , - 2900 , - 1745 , - 3038 , - 2427 , - 4264 , - 4197 , - 2226 , - 2703 , - 1276 , - 2297 , - 1414 , - 2979 , - 2640 , - 397 , - 602 , - 3255 , - 4004 , - 2849 , - 4142 , - 3531 , - 1016 , - 949 , - 3330 , - 3807 , - 2380 , - 3401 , - 2518 , - 4083 , - 3744 , - 1501 , - 1706 , - 7 , - 756 , - 3953 , - 894 , - 283 , - 2120 , - 2053 , - 82 , - 559 , - 3484 , - 153 , - 3622 , - 835 , - 496 , - 2605 , - 2810 , - 1111 , - 1860 , - 705 , - 1998 , - 1387 , - 3224 , - 3157 , - 1186 , - 1663 , - 236 , - 1257 , - 374 , - 1939 , - 1600 , - 3709 , - 3914 , - 2215 , - 2964 , - 1809 , - 3102 , - 2491 , - 4328 , - 4261 , - 2290 , - 2767 , - 1340 , - 2361 , - 1478 , - 3043 , - 2704 , - 461 , - 666 , - 3319 , - 4068 , - 2913 , - 4206 , - 3595 , - 1080 , - 1013 , - 3394 , - 3871 , - 2444 , - 3465 , - 2582 , - 4147 , - 3808 , - 1565 , - 1770 , - 71 , - 820 , - 4017 , - 958 , - 347 , - 2184 , - 2117 , - 146 , - 623 , - 3548 , - 217 , - 3686 , - 899 , - 560 , - 2669 , - 2874 , - 1175 , - 1924 , - 769 , - 2062 , - 1451 , - 3288 , - 3221 , - 1250 , - 1727 , - 300 , - 1321 , - 438 , - 2003 , - 1664 , - 3773 , - 3978 , - 2279 , - 3028 , - 1873 , - 3166 , - 2555 , - 40 , - 4325 , - 2354 , - 2831 , - 1404 , - 2425 , - 1542 , - 3107 , - 2768 , - 525 , - 730 , - 3383 , - 4132 , - 2977 , - 4270 , - 3659 , - 1144 , - 1077 , - 3458 , - 3935 , - 2508 , - 3529 , - 2646 , - 4211 , - 3872 , - 1629 , - 1834 , - 135 , - 884 , - 4081 , - 1022 , - 411 , - 2248 , - 2181 , - 210 , - 687 , - 3612 , - 281 , - 3750 , - 963 , - 624 , - 2733 , - 2938 , - 1239 , - 1988 , - 833 , - 2126 , - 1515 , - 3352 , - 3285 , - 1314 , - 1791 , - 364 , - 1385 , - 502 , - 2067 , - 1728 , - 3837 , - 4042 , - 2343 , - 3092 , - 1937 , - 3230 , - 2619 , - 104 , - 37 , - 2418 , - 2895 , - 1468 , - 2489 , - 1606 , - 3171 , - 2832 , - 589 , - 794 , - 3447 , - 4196 , - 3041 , - 4334 , - 3723 , - 1208 , - 1141 , - 3522 , - 3999 , - 2572 , - 3593 , - 2710 , - 4275 , - 3936 , - 1693 , - 1898 , - 199 , - 948 , - 4145 , - 1086 , - 475 , - 2312 , - 2245 , - 274 , - 751 , - 3676 , - 345 , - 3814 , - 1027 , - 688 , - 2797 , - 3002 , - 1303 , - 2052 , - 897 , - 2190 , - 1579 , - 3416 , - 3349 , - 1378 , - 1855 , - 428 , - 1449 , - 566 , - 2131 , - 1792 , - 3901 , - 4106 , - 2407 , - 3156 , - 2001 , - 3294 , - 2683 , - 168 , - 101 , - 2482 , - 2959 , - 1532 , - 2553 , - 1670 , - 3235 , - 2896 , - 653 , - 858 , - 3511 , - 4260 , - 3105 , - 46 , - 3787 , - 1272 , - 1205 , - 3586 , - 4063 , - 2636 , - 3657 , - 2774 , - 4339 , - 4000 , - 1757 , - 1962 , - 263 , - 1012 , - 4209 , - 1150 , - 539 , - 2376 , - 2309 , - 338 , - 815 , - 3740 , - 409 , - 3878 , - 1091 , - 752 , - 2861 , - 3066 , - 1367 , - 2116 , - 961 , - 2254 , - 1643 , - 3480 , - 3413 , - 1442 , - 1919 , - 492 , - 1513 , - 630 , - 2195 , - 1856 , - 3965 , - 4170 , - 2471 , - 3220 , - 2065 , - 3358 , - 2747 , - 232 , - 165 , - 2546 , - 3023 , - 1596 , - 2617 , - 1734 , - 3299 , - 2960 , - 717 , - 922 , - 3575 , - 4324 , - 3169 , - 110 , - 3851 , - 1336 , - 1269 , - 3650 , - 4127 , - 2700 , - 3721 , - 2838 , - 51 , - 4064 , - 1821 , - 2026 , - 327 , - 1076 , - 4273 , - 1214 , - 603 , - 2440 , - 2373 , - 402 , - 879 , - 3804 , - 473 , - 3942 , - 1155 , - 816 , - 2925 , - 3130 , - 1431 , - 2180 , - 1025 , - 2318 , - 1707 , - 3544 , - 3477 , - 1506 , - 1983 , - 556 , - 1577 , - 694 , - 2259 , - 1920 , - 4029 , - 4234 , - 2535 , - 3284 , - 2129 , - 3422 , - 2811 , - 296 , - 229 , - 2610 , - 3087 , - 1660 , - 2681 , - 1798 , - 3363 , - 3024 , - 781 , - 986 , - 3639 , - 36 , - 3233 , - 174 , - 3915 , - 1400 , - 1333 , - 3714 , - 4191 , - 2764 , - 3785 , - 2902 , - 115 , - 4128 , - 1885 , - 2090 , - 391 , - 1140 , - 4337 , - 1278 , - 667 , - 2504 , - 2437 , - 466 , - 943 , - 3868 , - 537 , - 4006 , - 1219 , - 880 , - 2989 , - 3194 , - 1495 , - 2244 , - 1089 , - 2382 , - 1771 , - 3608 , - 3541 , - 1570 , - 2047 , - 620 , - 1641 , - 758 , - 2323 , - 1984 , - 4093 , - 4298 , - 2599 , - 3348 , - 2193 , - 3486 , - 2875 , - 360 , - 293 , - 2674 , - 3151 , - 1724 , - 2745 , - 1862 , - 3427 , - 3088 , - 845 , - 1050 , - 3703 , - 100 , - 3297 , - 238 , - 3979 , - 1464 , - 1397 , - 3778 , - 4255 , - 2828 , - 3849 , - 2966 , - 179 , - 4192 , - 1949 , - 2154 , - 455 , - 1204 , - 49 , - 1342 , - 731 , - 2568 , - 2501 , - 530 , - 1007 , - 3932 , - 601 , - 4070 , - 1283 , - 944 , - 3053 , - 3258 , - 1559 , - 2308 , - 1153 , - 2446 , - 1835 , - 3672 , - 3605 , - 1634 , - 2111 , - 684 , - 1705 , - 822 , - 2387 , - 2048 , - 4157 , - 10 , - 2663 , - 3412 , - 2257 , - 3550 , - 2939 , - 424 , - 357 , - 2738 , - 3215 , - 1788 , - 2809 , - 1926 , - 3491 , - 3152 , - 909 , - 1114 , - 3767 , - 164 , - 3361 , - 302 , - 4043 , - 1528 , - 1461 , - 3842 , - 4319 , - 2892 , - 3913 , - 3030 , - 243 , - 4256 , - 2013 , - 2218 , - 519 , - 1268 , - 113 , - 1406 , - 795 , - 2632 , - 2565 , - 594 , - 1071 , - 3996 , - 665 , - 4134 , - 1347 , - 1008 , - 3117 , - 3322 , - 1623 , - 2372 , - 1217 , - 2510 , - 1899 , - 3736 , - 3669 , - 1698 , - 2175 , - 748 , - 1769 , - 886 , - 2451 , - 2112 , - 4221 , - 74 , - 2727 , - 3476 , - 2321 , - 3614 , - 3003 , - 488 , - 421 , - 2802 , - 3279 , - 1852 , - 2873 , - 1990 , - 3555 , - 3216 , - 973 , - 1178 , - 3831 , - 228 , - 3425 , - 366 , - 4107 , - 1592 , - 1525 , - 3906 , - 31 , - 2956 , - 3977 , - 3094 , - 307 , - 4320 , - 2077 , - 2282 , - 583 , - 1332 , - 177 , - 1470 , - 859 , - 2696 , - 2629 , - 658 , - 1135 , - 4060 , - 729 , - 4198 , - 1411 , - 1072 , - 3181 , - 3386 , - 1687 , - 2436 , - 1281 , - 2574 , - 1963 , - 3800 , - 3733 , - 1762 , - 2239 , - 812 , - 1833 , - 950 , - 2515 , - 2176 , - 4285 , - 138 , - 2791 , - 3540 , - 2385 , - 3678 , - 3067 , - 552 , - 485 , - 2866 , - 3343 , - 1916 , - 2937 , - 2054 , - 3619 , - 3280 , - 1037 , - 1242 , - 3895 , - 292 , - 3489 , - 430 , - 4171 , - 1656 , - 1589 , - 3970 , - 95 , - 3020 , - 4041 , - 3158 , - 371 , - 32 , - 2141 , - 2346 , - 647 , - 1396 , - 241 , - 1534 , - 923 , - 2760 , - 2693 , - 722 , - 1199 , - 4124 , - 793 , - 4262 , - 1475 , - 1136 , - 3245 , - 3450 , - 1751 , - 2500 , - 1345 , - 2638 , - 2027 , - 3864 , - 3797 , - 1826 , - 2303 , - 876 , - 1897 , - 1014 , - 2579 , - 2240 , - 4349 , - 202 , - 2855 , - 3604 , - 2449 , - 3742 , - 3131 , - 616 , - 549 , - 2930 , - 3407 , - 1980 , - 3001 , - 2118 , - 3683 , - 3344 , - 1101 , - 1306 , - 3959 , - 356 , - 3553 , - 494 , - 4235 , - 1720 , - 1653 , - 4034 , - 159 , - 3084 , - 4105 , - 3222 , - 435 , - 96 , - 2205 , - 2410 , - 711 , - 1460 , - 305 , - 1598 , - 987 , - 2824 , - 2757 , - 786 , - 1263 , - 4188 , - 857 , - 4326 , - 1539 , - 1200 , - 3309 , - 3514 , - 1815 , - 2564 , - 1409 , - 2702 , - 2091 , - 3928 , - 3861 , - 1890 , - 2367 , - 940 , - 1961 , - 1078 , - 2643 , - 2304 , - 61 , - 266 , - 2919 , - 3668 , - 2513 , - 3806 , - 3195 , - 680 , - 613 , - 2994 , - 3471 , - 2044 , - 3065 , - 2182 , - 3747 , - 3408 , - 1165 , - 1370 , - 4023 , - 420 , - 3617 , - 558 , - 4299 , - 1784 , - 1717 , - 4098 , - 223 , - 3148 , - 4169 , - 3286 , - 499 , - 160 , - 2269 , - 2474 , - 775 , - 1524 , - 369 , - 1662 , - 1051 , - 2888 , - 2821 , - 850 , - 1327 , - 4252 , - 921 , - 38 , - 1603 , - 1264 , - 3373 , - 3578 , - 1879 , - 2628 , - 1473 , - 2766 , - 2155 , - 3992 , - 3925 , - 1954 , - 2431 , - 1004 , - 2025 , - 1142 , - 2707 , - 2368 , - 125 , - 330 , - 2983 , - 3732 , - 2577 , - 3870 , - 3259 , - 744 , - 677 , - 3058 , - 3535 , - 2108 , - 3129 , - 2246 , - 3811 , - 3472 , - 1229 , - 1434 , - 4087 , - 484 , - 3681 , - 622 , - 11 , - 1848 , - 1781 , - 4162 , - 287 , - 3212 , - 4233 , - 3350 , - 563 , - 224 , - 2333 , - 2538 , - 839 , - 1588 , - 433 , - 1726 , - 1115 , - 2952 , - 2885 , - 914 , - 1391 , - 4316 , - 985 , - 102 , - 1667 , - 1328 , - 3437 , - 3642 , - 1943 , - 2692 , - 1537 , - 2830 , - 2219 , - 4056 , - 3989 , - 2018 , - 2495 , - 1068 , - 2089 , - 1206 , - 2771 , - 2432 , - 189 , - 394 , - 3047 , - 3796 , - 2641 , - 3934 , - 3323 , - 808 , - 741 , - 3122 , - 3599 , - 2172 , - 3193 , - 2310 , - 3875 , - 3536 , - 1293 , - 1498 , - 4151 , - 548 , - 3745 , - 686 , - 75 , - 1912 , - 1845 , - 4226 , - 351 , - 3276 , - 4297 , - 3414 , - 627 , - 288 , - 2397 , - 2602 , - 903 , - 1652 , - 497 , - 1790 , - 1179 , - 3016 , - 2949 , - 978 , - 1455 , - 28 , - 1049 , - 166 , - 1731 , - 1392 , - 3501 , - 3706 , - 2007 , - 2756 , - 1601 , - 2894 , - 2283 , - 4120 , - 4053 , - 2082 , - 2559 , - 1132 , - 2153 , - 1270 , - 2835 , - 2496 , - 253 , - 458 , - 3111 , - 3860 , - 2705 , - 3998 , - 3387 , - 872 , - 805 , - 3186 , - 3663 , - 2236 , - 3257 , - 2374 , - 3939 , - 3600 , - 1357 , - 1562 , - 4215 , - 612 , - 3809 , - 750 , - 139 , - 1976 , - 1909 , - 4290 , - 415 , - 3340 , - 9 , - 3478 , - 691 , - 352 , - 2461 , - 2666 , - 967 , - 1716 , - 561 , - 1854 , - 1243 , - 3080 , - 3013 , - 1042 , - 1519 , - 92 , - 1113 , - 230 , - 1795 , - 1456 , - 3565 , - 3770 , - 2071 , - 2820 , - 1665 , - 2958 , - 2347 , - 4184 , - 4117 , - 2146 , - 2623 , - 1196 , - 2217 , - 1334 , - 2899 , - 2560 , - 317 , - 522 , - 3175 , - 3924 , - 2769 , - 4062 , - 3451 , - 936 , - 869 , - 3250 , - 3727 , - 2300 , - 3321 , - 2438 , - 4003 , - 3664 , - 1421 , - 1626 , - 4279 , - 676 , - 3873 , - 814 , - 203 , - 2040 , - 1973 , - 2 , - 479 , - 3404 , - 73 , - 3542 , - 755 , - 416 , - 2525 , - 2730 , - 1031 , - 1780 , - 625 , - 1918 , - 1307 , - 3144 , - 3077 , - 1106 , - 1583 , - 156 , - 1177 , - 294 , - 1859 , - 1520 , - 3629 , - 3834 , - 2135 , - 2884 , - 1729 , - 3022 , - 2411 , - 4248 , - 4181 , - 2210 , - 2687 , - 1260 , - 2281 , - 1398 , - 2963 , - 2624 , - 381 , - 586 , - 3239 , - 3988 , - 2833 , - 4126 , - 3515 , - 1000 , - 933 , - 3314 , - 3791 , - 2364 , - 3385 , - 2502 , - 4067 , - 3728 , - 1485 , - 1690 , - 4343 , - 740 , - 3937 , - 878 , - 267 , - 2104 , - 2037 , - 66 , - 543 , - 3468 , - 137 , - 3606 , - 819 , - 480 , - 2589 , - 2794 , - 1095 , - 1844 , - 689 , - 1982 , - 1371 , - 3208 , - 3141 , - 1170 , - 1647 , - 220 , - 1241 , - 358 , - 1923 , - 1584 , - 3693 , - 3898 , - 2199 , - 2948 , - 1793 , - 3086 , - 2475 , - 4312 , - 4245 , - 2274 , - 2751 , - 1324 , - 2345 , - 1462 , - 3027 , - 2688 , - 445 , - 650 , - 3303 , - 4052 , - 2897 , - 4190 , - 3579 , - 1064 , - 997 , - 3378 , - 3855 , - 2428 , - 3449 , - 2566 , - 4131 , - 3792 , - 1549 , - 1754 , - 55 , - 804 , - 4001 , - 942 , - 331 , - 2168 , - 2101 , - 130 , - 607 , - 3532 , - 201 , - 3670 , - 883 , - 544 , - 2653 , - 2858 , - 1159 , - 1908 , - 753 , - 2046 , - 1435 , - 3272 , - 3205 , - 1234 , - 1711 , - 284 , - 1305 , - 422 , - 1987 , - 1648 , - 3757 , - 3962 , - 2263 , - 3012 , - 1857 , - 3150 , - 2539 , - 24 , - 4309 , - 2338 , - 2815 , - 1388 , - 2409 , - 1526 , - 3091 , - 2752 , - 509 , - 714 , - 3367 , - 4116 , - 2961 , - 4254 , - 3643 , - 1128 , - 1061 , - 3442 , - 3919 , - 2492 , - 3513 , - 2630 , - 4195 , - 3856 , - 1613 , - 1818 , - 119 , - 868 , - 4065 , - 1006 , - 395 , - 2232 , - 2165 , - 194 , - 671 , - 3596 , - 265 , - 3734 , - 947 , - 608 , - 2717 , - 2922 , - 1223 , - 1972 , - 817 , - 2110 , - 1499 , - 3336 , - 3269 , - 1298 , - 1775 , - 348 , - 1369 , - 486 , - 2051 , - 1712 , - 3821 , - 4026 , - 2327 , - 3076 , - 1921 , - 3214 , - 2603 , - 88 , - 21 , - 2402 , - 2879 , - 1452 , - 2473 , - 1590 , - 3155 , - 2816 , - 573 , - 778 , - 3431 , - 4180 , - 3025 , - 4318 , - 3707 , - 1192 , - 1125 , - 3506 , - 3983 , - 2556 , - 3577 , - 2694 , - 4259 , - 3920 , - 1677 , - 1882 , - 183 , - 932 , - 4129 , - 1070 , - 459 , - 2296 , - 2229 , - 258 , - 735 , - 3660 , - 329 , - 3798 , - 1011 , - 672 , - 2781 , - 2986 , - 1287 , - 2036 , - 881 , - 2174 , - 1563 , - 3400 , - 3333 , - 1362 , - 1839 , - 412 , - 1433 , - 550 , - 2115 , - 1776 , - 3885 , - 4090 , - 2391 , - 3140 , - 1985 , - 3278 , - 2667 , - 152 , - 85 , - 2466 , - 2943 , - 1516 , - 2537 , - 1654 , - 3219 , - 2880 , - 637 , - 842 , - 3495 , - 4244 , - 3089 , - 30 , - 3771 , - 1256 , - 1189 , - 3570 , - 4047 , - 2620 , - 3641 , - 2758 , - 4323 , - 3984 , - 1741 , - 1946 , - 247 , - 996 , - 4193 , - 1134 , - 523 , - 2360 , - 2293 , - 322 , - 799 , - 3724 , - 393 , - 3862 , - 1075 , - 736 , - 2845 , - 3050 , - 1351 , - 2100 , - 945 , - 2238 , - 1627 , - 3464 , - 3397 , - 1426 , - 1903 , - 476 , - 1497 , - 614 , - 2179 , - 1840 , - 3949 , - 4154 , - 2455 , - 3204 , - 2049 , - 3342 , - 2731 , - 216 , - 149 , - 2530 , - 3007 , - 1580 , - 2601 , - 1718 , - 3283 , - 2944 , - 701 , - 906 , - 3559 , - 4308 , - 3153 , - 94 , - 3835 , - 1320 , - 1253 , - 3634 , - 4111 , - 2684 , - 3705 , - 2822 , - 35 , - 4048 , - 1805 , - 2010 , - 311 , - 1060 , - 4257 , - 1198 , - 587 , - 2424 , - 2357 , - 386 , - 863 , - 3788 , - 457 , - 3926 , - 1139 , - 800 , - 2909 , - 3114 , - 1415 , - 2164 , - 1009 , - 2302 , - 1691 , - 3528 , - 3461 , - 1490 , - 1967 , - 540 , - 1561 , - 678 , - 2243 , - 1904 , - 4013 , - 4218 , - 2519 , - 3268 , - 2113 , - 3406 , - 2795 , - 280 , - 213 , - 2594 , - 3071 , - 1644 , - 2665 , - 1782 , - 3347 , - 3008 , - 765 , - 970 , - 3623 , - 20 , - 3217 , - 158 , - 3899 , - 1384 , - 1317 , - 3698 , - 4175 , - 2748 , - 3769 , - 2886 , - 99 , - 4112 , - 1869 , - 2074 , - 375 , - 1124 , - 4321 , - 1262 , - 651 , - 2488 , - 2421 , - 450 , - 927 , - 3852 , - 521 , - 3990 , - 1203 , - 864 , - 2973 , - 3178 , - 1479 , - 2228 , - 1073 , - 2366 , - 1755 , - 3592 , - 3525 , - 1554 , - 2031 , - 604 , - 1625 , - 742 , - 2307 , - 1968 , - 4077 , - 4282 , - 2583 , - 3332 , - 2177 , - 3470 , - 2859 , - 344 , - 277 , - 2658 , - 3135 , - 1708 , - 2729 , - 1846 , - 3411 , - 3072 , - 829 , - 1034 , - 3687 , - 84 , - 3281 , - 222 , - 3963 , - 1448 , - 1381 , - 3762 , - 4239 , - 2812 , - 3833 , - 2950 , - 163 , - 4176 , - 1933 , - 2138 , - 439 , - 1188 , - 33 , - 1326 , - 715 , - 2552 , - 2485 , - 514 , - 991 , - 3916 , - 585 , - 4054 , - 1267 , - 928 , - 3037 , - 3242 , - 1543 , - 2292 , - 1137 , - 2430 , - 1819 , - 3656 , - 3589 , - 1618 , - 2095 , - 668 , - 1689 , - 806 , - 2371 , - 2032 , - 4141 , - 4346 , - 2647 , - 3396 , - 2241 , - 3534 , - 2923 , - 408 , - 341 , - 2722 , - 3199 , - 1772 , - 2793 , - 1910 , - 3475 , - 3136 , - 893 , - 1098 , - 3751 , - 148 , - 3345 , - 286 , - 4027 , - 1512 , - 1445 , - 3826 , - 4303 , - 2876 , - 3897 , - 3014 , - 227 , - 4240 , - 1997 , - 2202 , - 503 , - 1252 , - 97 , - 1390 , - 779 , - 2616 , - 2549 , - 578 , - 1055 , - 3980 , - 649 , - 4118 , - 1331 , - 992 , - 3101 , - 3306 , - 1607 , - 2356 , - 1201 , - 2494 , - 1883 , - 3720 , - 3653 , - 1682 , - 2159 , - 732 , - 1753 , - 870 , - 2435 , - 2096 , - 4205 , - 58 , - 2711 , - 3460 , - 2305 , - 3598 , - 2987 , - 472 , - 405 , - 2786 , - 3263 , - 1836 , - 2857 , - 1974 , - 3539 , - 3200 , - 957 , - 1162 , - 3815 , - 212 , - 3409 , - 350 , - 4091 , - 1576 , - 1509 , - 3890 , - 15 , - 2940 , - 3961 , - 3078 , - 291 , - 4304 , - 2061 , - 2266 , - 567 , - 1316 , - 161 , - 1454 , - 843 , - 2680 , - 2613 , - 642 , - 1119 , - 4044 , - 713 , - 4182 , - 1395 , - 1056 , - 3165 , - 3370 , - 1671 , - 2420 , - 1265 , - 2558 , - 1947 , - 3784 , - 3717 , - 1746 , - 2223 , - 796 , - 1817 , - 934 , - 2499 , - 2160 , - 4269 , - 122 , - 2775 , - 3524 , - 2369 , - 3662 , - 3051 , - 536 , - 469 , - 2850 , - 3327 , - 1900 , - 2921 , - 2038 , - 3603 , - 3264 , - 1021 , - 1226 , - 3879 , - 276 , - 3473 , - 414 , - 4155 , - 1640 , - 1573 , - 3954 , - 79 , - 3004 , - 4025 , - 3142 , - 355 , - 16 , - 2125 , - 2330 , - 631 , - 1380 , - 225 , - 1518 , - 907 , - 2744 , - 2677 , - 706 , - 1183 , - 4108 , - 777 , - 4246 , - 1459 , - 1120 , - 3229 , - 3434 , - 1735 , - 2484 , - 1329 , - 2622 , - 2011 , - 3848 , - 3781 , - 1810 , - 2287 , - 860 , - 1881 , - 998 , - 2563 , - 2224 , - 4333 , - 186 , - 2839 , - 3588 , - 2433 , - 3726 , - 3115 , - 600 , - 533 , - 2914 , - 3391 , - 1964 , - 2985 , - 2102 , - 3667 , - 3328 , - 1085 , - 1290 , - 3943 , - 340 , - 3537 , - 478 , - 4219 , - 1704 , - 1637 , - 4018 , - 143 , - 3068 , - 4089 , - 3206 , - 419 , - 80 , - 2189 , - 2394 , - 695 , - 1444 , - 289 , - 1582 , - 971 , - 2808 , - 2741 , - 770 , - 1247 , - 4172 , - 841 , - 4310 , - 1523 , - 1184 , - 3293 , - 3498 , - 1799 , - 2548 , - 1393 , - 2686 , - 2075 , - 3912 , - 3845 , - 1874 , - 2351 , - 924 , - 1945 , - 1062 , - 2627 , - 2288 , - 45 , - 250 , - 2903 , - 3652 , - 2497 , - 3790 , - 3179 , - 664 , - 597 , - 2978 , - 3455 , - 2028 , - 3049 , - 2166 , - 3731 , - 3392 , - 1149 , - 1354 , - 4007 , - 404 , - 3601 , - 542 , - 4283 , - 1768 , - 1701 , - 4082 , - 207 , - 3132 , - 4153 , - 3270 , - 483 , - 144 , - 2253 , - 2458 , - 759 , - 1508 , - 353 , - 1646 , - 1035 , - 2872 , - 2805 , - 834 , - 1311 , - 4236 , - 905 , - 22 , - 1587 , - 1248 , - 3357 , - 3562 , - 1863 , - 2612 , - 1457 , - 2750 , - 2139 , - 3976 , - 3909 , - 1938 , - 2415 , - 988 , - 2009 , - 1126 , - 2691 , - 2352 , - 109 , - 314 , - 2967 , - 3716 , - 2561 , - 3854 , - 3243 , - 728 , - 661 , - 3042 , - 3519 , - 2092 , - 3113 , - 2230 , - 3795 , - 3456 , - 1213 , - 1418 , - 4071 , - 468 , - 3665 , - 606 , - 4347 , - 1832 , - 1765 , - 4146 , - 271 , - 3196 , - 4217 , - 3334 , - 547 , - 208 , - 2317 , - 2522 , - 823 , - 1572 , - 417 , - 1710 , - 1099 , - 2936 , - 2869 , - 898 , - 1375 , - 4300 , - 969 , - 86 , - 1651 , - 1312 , - 3421 , - 3626 , - 1927 , - 2676 , - 1521 , - 2814 , - 2203 , - 4040 , - 3973 , - 2002 , - 2479 , - 1052 , - 2073 , - 1190 , - 2755 , - 2416 , - 173 , - 378 , - 3031 , - 3780 , - 2625 , - 3918 , - 3307 , - 792 , - 725 , - 3106 , - 3583 , - 2156 , - 3177 , - 2294 , - 3859 , - 3520 , - 1277 , - 1482 , - 4135 , - 532 , - 3729 , - 670 , - 59 , - 1896 , - 1829 , - 4210 , - 335 , - 3260 , - 4281 , - 3398 , - 611 , - 272 , - 2381 , - 2586 , - 887 , - 1636 , - 481 , - 1774 , - 1163 , - 3000 , - 2933 , - 962 , - 1439 , - 12 , - 1033 , - 150 , - 1715 , - 1376 , - 3485 , - 3690 , - 1991 , - 2740 , - 1585 , - 2878 , - 2267 , - 4104 , - 4037 , - 2066 , - 2543 , - 1116 , - 2137 , - 1254 , - 2819 , - 2480 , - 237 , - 442 , - 3095 , - 3844 , - 2689 , - 3982 , - 3371 , - 856 , - 789 , - 3170 , - 3647 , - 2220 , - 3241 , - 2358 , - 3923 , - 3584 , - 1341 , - 1546 , - 4199 , - 596 , - 3793 , - 734 , - 123 , - 1960 , - 1893 , - 4274 , - 399 , - 3324 , - 4345 , - 3462 , - 675 , - 336 , - 2445 , - 2650 , - 951 , - 1700 , - 545 , - 1838 , - 1227 , - 3064 , - 2997 , - 1026 , - 1503 , - 76 , - 1097 , - 214 , - 1779 , - 1440 , - 3549 , - 3754 , - 2055 , - 2804 , - 1649 , - 2942 , - 2331 , - 4168 , - 4101 , - 2130 , - 2607 , - 1180 , - 2201 , - 1318 , - 2883 , - 2544 , - 301 , - 506 , - 3159 , - 3908 , - 2753 , - 4046 , - 3435 , - 920 , - 853 , - 3234 , - 3711 , - 2284 , - 3305 , - 2422 , - 3987 , - 3648 , - 1405 , - 1610 , - 4263 , - 660 , - 3857 , - 798 , - 187 , - 2024 , - 1957 , - 4338 , - 463 , - 3388 , - 57 , - 3526 , - 739 , - 400 , - 2509 , - 2714 , - 1015 , - 1764 , - 609 , - 1902 , - 1291 , - 3128 , - 3061 , - 1090 , - 1567 , - 140 , - 1161 , - 278 , - 1843 , - 1504 , - 3613 , - 3818 , - 2119 , - 2868 , - 1713 , - 3006 , - 2395 , - 4232 , - 4165 , - 2194 , - 2671 , - 1244 , - 2265 , - 1382 , - 2947 , - 2608 , - 365 , - 570 , - 3223 , - 3972 , - 2817 , - 4110 , - 3499 , - 984 , - 917 , - 3298 , - 3775 , - 2348 , - 3369 , - 2486 , - 4051 , - 3712 , - 1469 , - 1674 , - 4327 , - 724 , - 3921 , - 862 , - 251 , - 2088 , - 2021 , - 50 , - 527 , - 3452 , - 121 , - 3590 , - 803 , - 464 , - 2573 , - 2778 , - 1079 , - 1828 , - 673 , - 1966 , - 1355 , - 3192 , - 3125 , - 1154 , - 1631 , - 204 , - 1225 , - 342 , - 1907 , - 1568 , - 3677 , - 3882 , - 2183 , - 2932 , - 1777 , - 3070 , - 2459 , - 4296 , - 4229 , - 2258 , - 2735 , - 1308 , - 2329 , - 1446 , - 3011 , - 2672 , - 429 , - 634 , - 3287 , - 4036 , - 2881 , - 4174 , - 3563 , - 1048 , - 981 , - 3362 , - 3839 , - 2412 , - 3433 , - 2550 , - 4115 , - 3776 , - 1533 , - 1738 , - 39 , - 788 , - 3985 , - 926 , - 315 , - 2152 , - 2085 , - 114 , - 591 , - 3516 , - 185 , - 3654 , - 867 , - 528 , - 2637 , - 2842 , - 1143 , - 1892 , - 737 , - 2030 , - 1419 , - 3256 , - 3189 , - 1218 , - 1695 , - 268 , - 1289 , - 406 , - 1971 , - 1632 , - 3741 , - 3946 , - 2247 , - 2996 , - 1841 , - 3134 , - 2523 , - 8 , - 4293 , - 2322 , - 2799 , - 1372 , - 2393 , - 1510 , - 3075 , - 2736 , - 493 , - 698 , - 3351 , - 4100 , - 2945 , - 4238 , - 3627 , - 1112 , - 1045 , - 3426 , - 3903 , - 2476 , - 3497 , - 2614 , - 4179 , - 3840 , - 1597 , - 1802 , - 103 , - 852 , - 4049 , - 990 , - 379 , - 2216 , - 2149 , - 178 , - 655 , - 3580 , - 249 , - 3718 , - 931 , - 592 , - 2701 , - 2906 , - 1207 , - 1956 , - 801 , - 2094 , - 1483 , - 3320 , - 3253 , - 1282 , - 1759 , - 332 , - 1353 , - 470 , - 2035 , - 1696 , - 3805 , - 4010 , - 2311 , - 3060 , - 1905 , - 3198 , - 2587 , - 72 , - 5 , - 2386 , - 2863 , - 1436 , - 2457 , - 1574 , - 3139 , - 2800 , - 557 , - 762 , - 3415 , - 4164 , - 3009 , - 4302 , - 3691 , - 1176 , - 1109 , - 3490 , - 3967 , - 2540 , - 3561 , - 2678 , - 4243 , - 3904 , - 1661 , - 1866 , - 167 , - 916 , - 4113 , - 1054 , - 443 , - 2280 , - 2213 , - 242 , - 719 , - 3644 , - 313 , - 3782 , - 995 , - 656 , - 2765 , - 2970 , - 1271 , - 2020 , - 865 , - 2158 , - 1547 , - 3384 , - 3317 , - 1346 , - 1823 , - 396 , - 1417 , - 534 , - 2099 , - 1760 , - 3869 , - 4074 , - 2375 , - 3124 , - 1969 , - 3262 , - 2651 , - 136 , - 69 , - 2450 , - 2927 , - 1500 , - 2521 , - 1638 , - 3203 , - 2864 , - 621 , - 826 , - 3479 , - 4228 , - 3073 , - 14 , - 3755 , - 1240 , - 1173 , - 3554 , - 4031 , - 2604 , - 3625 , - 2742 , - 4307 , - 3968 , - 1725 , - 1930 , - 231 , - 980 , - 4177 , - 1118 , - 507 , - 2344 , - 2277 , - 306 , - 783 , - 3708 , - 377 , - 3846 , - 1059 , - 720 , - 2829 , - 3034 , - 1335 , - 2084 , - 929 , - 2222 , - 1611 , - 3448 , - 3381 , - 1410 , - 1887 , - 460 , - 1481 , - 598 , - 2163 , - 1824 , - 3933 , - 4138 , - 2439 , - 3188 , - 2033 , - 3326 , - 2715 , - 200 , - 133 , - 2514 , - 2991 , - 1564 , - 2585 , - 1702 , - 3267 , - 2928 , - 685 , - 890 , - 3543 , - 4292 , - 3137 , - 78 , - 3819 , - 1304 , - 1237 , - 3618 , - 4095 , - 2668 , - 3689 , - 2806 , - 19 , - 4032 , - 1789 , - 1994 , - 295 , - 1044 , - 4241 , - 1182 , - 571 , - 2408 , - 2341 , - 370 , - 847 , - 3772 , - 441 , - 3910 , - 1123 , - 784 , - 2893 , - 3098 , - 1399 , - 2148 , - 993 , - 2286 , - 1675 , - 3512 , - 3445 , - 1474 , - 1951 , - 524 , - 1545 , - 662 , - 2227 , - 1888 , - 3997 , - 4202 , - 2503 , - 3252 , - 2097 , - 3390 , - 2779 , - 264 , - 197 , - 2578 , - 3055 , - 1628 , - 2649 , - 1766 , - 3331 , - 2992 , - 749 , - 954 , - 3607 , - 4 , - 3201 , - 142 , - 3883 , - 1368 , - 1301 , - 3682 , - 4159 , - 2732 , - 3753 , - 2870 , - 83 , - 4096 , - 1853 , - 2058 , - 359 , - 1108 , - 4305 , - 1246 , - 635 , - 2472 , - 2405 , - 434 , - 911 , - 3836 , - 505 , - 3974 , - 1187 , - 848 , - 2957 , - 3162 , - 1463 , - 2212 , - 1057 , - 2350 , - 1739 , - 3576 , - 3509 , - 1538 , - 2015 , - 588 , - 1609 , - 726 , - 2291 , - 1952 , - 4061 , - 4266 , - 2567 , - 3316 , - 2161 , - 3454 , - 2843 , - 328 , - 261 , - 2642 , - 3119 , - 1692 , - 2713 , - 1830 , - 3395 , - 3056 , - 813 , - 1018 , - 3671 , - 68 , - 3265 , - 206 , - 3947 , - 1432 , - 1365 , - 3746 , - 4223 , - 2796 , - 3817 , - 2934 , - 147 , - 4160 , - 1917 , - 2122 , - 423 , - 1172 , - 17 , - 1310 , - 699 , - 2536 , - 2469 , - 498 , - 975 , - 3900 , - 569 , - 4038 , - 1251 , - 912 , - 3021 , - 3226 , - 1527 , - 2276 , - 1121 , - 2414 , - 1803 , - 3640 , - 3573 , - 1602 , - 2079 , - 652 , - 1673 , - 790 , - 2355 , - 2016 , - 4125 , - 4330 , - 2631 , - 3380 , - 2225 , - 3518 , - 2907 , - 392 , - 325 , - 2706 , - 3183 , - 1756 , - 2777 , - 1894 , - 3459 , - 3120 , - 877 , - 1082 , - 3735 , - 132 , - 3329 , - 270 , - 4011 , - 1496 , - 1429 , - 3810 , - 4287 , - 2860 , - 3881 , - 2998 , - 211 , - 4224 , - 1981 , - 2186 , - 487 , - 1236 , - 81 , - 1374 , - 763 , - 2600 , - 2533 , - 562 , - 1039 , - 3964 , - 633 , - 4102 , - 1315 , - 976 , - 3085 , - 3290 , - 1591 , - 2340 , - 1185 , - 2478 , - 1867 , - 3704 , - 3637 , - 1666 , - 2143 , - 716 , - 1737 , - 854 , - 2419 , - 2080 , - 4189 , - 42 , - 2695 , - 3444 , - 2289 , - 3582 , - 2971 , - 456 , - 389 , - 2770 , - 3247 , - 1820 , - 2841 , - 1958 , - 3523 , - 3184 , - 941 , - 1146 , - 3799 , - 196 , - 3393 , - 334 , - 4075 , - 1560 , - 1493 , - 3874 , - 4351 , - 2924 , - 3945 , - 3062 , - 275 , - 4288 , - 2045 , - 2250 , - 551 , - 1300 , - 145 , - 1438 , - 827 , - 2664 , - 2597 , - 626 , - 1103 , - 4028 , - 697 , - 4166 , - 1379 , - 1040 , - 3149 , - 3354 , - 1655 , - 2404 , - 1249 , - 2542 , - 1931 , - 3768 , - 3701 , - 1730 , - 2207 , - 780 , - 1801 , - 918 , - 2483 , - 2144 , - 4253 , - 106 , - 2759 , - 3508 , - 2353 , - 3646 , - 3035 , - 520 , - 453 , - 2834 , - 3311 , - 1884 , - 2905 , - 2022 , - 3587 , - 3248 , - 1005 , - 1210 , - 3863 , - 260 , - 3457 , - 398 , - 4139 , - 1624 , - 1557 , - 3938 , - 63 , - 2988 , - 4009 , - 3126 , - 339 , - 0 , - 3245 , - 1246 , - 1731 , - 3596 , - 1321 , - 2634 , - 2015 , - 2776 , - 3813 , - 4022 , - 2299 , - 1956 , - 1889 , - 994 , - 2583 , - 1136 , - 4381 , - 2382 , - 2867 , - 316 , - 2457 , - 3770 , - 3151 , - 3912 , - 533 , - 742 , - 3435 , - 3092 , - 3025 , - 2130 , - 3719 , - 2272 , - 1101 , - 3518 , - 4003 , - 1452 , - 3593 , - 490 , - 4287 , - 632 , - 1669 , - 1878 , - 155 , - 4228 , - 4161 , - 3266 , - 439 , - 3408 , - 2237 , - 238 , - 723 , - 2588 , - 313 , - 1626 , - 1007 , - 1768 , - 2805 , - 3014 , - 1291 , - 948 , - 881 , - 4402 , - 1575 , - 128 , - 3373 , - 1374 , - 1859 , - 3724 , - 1449 , - 2762 , - 2143 , - 2904 , - 3941 , - 4150 , - 2427 , - 2084 , - 2017 , - 1122 , - 2711 , - 1264 , - 93 , - 2510 , - 2995 , - 444 , - 2585 , - 3898 , - 3279 , - 4040 , - 661 , - 870 , - 3563 , - 3220 , - 3153 , - 2258 , - 3847 , - 2400 , - 1229 , - 3646 , - 4131 , - 1580 , - 3721 , - 618 , - 4415 , - 760 , - 1797 , - 2006 , - 283 , - 4356 , - 4289 , - 3394 , - 567 , - 3536 , - 2365 , - 366 , - 851 , - 2716 , - 441 , - 1754 , - 1135 , - 1896 , - 2933 , - 3142 , - 1419 , - 1076 , - 1009 , - 114 , - 1703 , - 256 , - 3501 , - 1502 , - 1987 , - 3852 , - 1577 , - 2890 , - 2271 , - 3032 , - 4069 , - 4278 , - 2555 , - 2212 , - 2145 , - 1250 , - 2839 , - 1392 , - 221 , - 2638 , - 3123 , - 572 , - 2713 , - 4026 , - 3407 , - 4168 , - 789 , - 998 , - 3691 , - 3348 , - 3281 , - 2386 , - 3975 , - 2528 , - 1357 , - 3774 , - 4259 , - 1708 , - 3849 , - 746 , - 127 , - 888 , - 1925 , - 2134 , - 411 , - 68 , - 1 , - 3522 , - 695 , - 3664 , - 2493 , - 494 , - 979 , - 2844 , - 569 , - 1882 , - 1263 , - 2024 , - 3061 , - 3270 , - 1547 , - 1204 , - 1137 , - 242 , - 1831 , - 384 , - 3629 , - 1630 , - 2115 , - 3980 , - 1705 , - 3018 , - 2399 , - 3160 , - 4197 , - 4406 , - 2683 , - 2340 , - 2273 , - 1378 , - 2967 , - 1520 , - 349 , - 2766 , - 3251 , - 700 , - 2841 , - 4154 , - 3535 , - 4296 , - 917 , - 1126 , - 3819 , - 3476 , - 3409 , - 2514 , - 4103 , - 2656 , - 1485 , - 3902 , - 4387 , - 1836 , - 3977 , - 874 , - 255 , - 1016 , - 2053 , - 2262 , - 539 , - 196 , - 129 , - 3650 , - 823 , - 3792 , - 2621 , - 622 , - 1107 , - 2972 , - 697 , - 2010 , - 1391 , - 2152 , - 3189 , - 3398 , - 1675 , - 1332 , - 1265 , - 370 , - 1959 , - 512 , - 3757 , - 1758 , - 2243 , - 4108 , - 1833 , - 3146 , - 2527 , - 3288 , - 4325 , - 118 , - 2811 , - 2468 , - 2401 , - 1506 , - 3095 , - 1648 , - 477 , - 2894 , - 3379 , - 828 , - 2969 , - 4282 , - 3663 , - 8 , - 1045 , - 1254 , - 3947 , - 3604 , - 3537 , - 2642 , - 4231 , - 2784 , - 1613 , - 4030 , - 99 , - 1964 , - 4105 , - 1002 , - 383 , - 1144 , - 2181 , - 2390 , - 667 , - 324 , - 257 , - 3778 , - 951 , - 3920 , - 2749 , - 750 , - 1235 , - 3100 , - 825 , - 2138 , - 1519 , - 2280 , - 3317 , - 3526 , - 1803 , - 1460 , - 1393 , - 498 , - 2087 , - 640 , - 3885 , - 1886 , - 2371 , - 4236 , - 1961 , - 3274 , - 2655 , - 3416 , - 37 , - 246 , - 2939 , - 2596 , - 2529 , - 1634 , - 3223 , - 1776 , - 605 , - 3022 , - 3507 , - 956 , - 3097 , - 4410 , - 3791 , - 136 , - 1173 , - 1382 , - 4075 , - 3732 , - 3665 , - 2770 , - 4359 , - 2912 , - 1741 , - 4158 , - 227 , - 2092 , - 4233 , - 1130 , - 511 , - 1272 , - 2309 , - 2518 , - 795 , - 452 , - 385 , - 3906 , - 1079 , - 4048 , - 2877 , - 878 , - 1363 , - 3228 , - 953 , - 2266 , - 1647 , - 2408 , - 3445 , - 3654 , - 1931 , - 1588 , - 1521 , - 626 , - 2215 , - 768 , - 4013 , - 2014 , - 2499 , - 4364 , - 2089 , - 3402 , - 2783 , - 3544 , - 165 , - 374 , - 3067 , - 2724 , - 2657 , - 1762 , - 3351 , - 1904 , - 733 , - 3150 , - 3635 , - 1084 , - 3225 , - 122 , - 3919 , - 264 , - 1301 , - 1510 , - 4203 , - 3860 , - 3793 , - 2898 , - 71 , - 3040 , - 1869 , - 4286 , - 355 , - 2220 , - 4361 , - 1258 , - 639 , - 1400 , - 2437 , - 2646 , - 923 , - 580 , - 513 , - 4034 , - 1207 , - 4176 , - 3005 , - 1006 , - 1491 , - 3356 , - 1081 , - 2394 , - 1775 , - 2536 , - 3573 , - 3782 , - 2059 , - 1716 , - 1649 , - 754 , - 2343 , - 896 , - 4141 , - 2142 , - 2627 , - 76 , - 2217 , - 3530 , - 2911 , - 3672 , - 293 , - 502 , - 3195 , - 2852 , - 2785 , - 1890 , - 3479 , - 2032 , - 861 , - 3278 , - 3763 , - 1212 , - 3353 , - 250 , - 4047 , - 392 , - 1429 , - 1638 , - 4331 , - 3988 , - 3921 , - 3026 , - 199 , - 3168 , - 1997 , - 4414 , - 483 , - 2348 , - 73 , - 1386 , - 767 , - 1528 , - 2565 , - 2774 , - 1051 , - 708 , - 641 , - 4162 , - 1335 , - 4304 , - 3133 , - 1134 , - 1619 , - 3484 , - 1209 , - 2522 , - 1903 , - 2664 , - 3701 , - 3910 , - 2187 , - 1844 , - 1777 , - 882 , - 2471 , - 1024 , - 4269 , - 2270 , - 2755 , - 204 , - 2345 , - 3658 , - 3039 , - 3800 , - 421 , - 630 , - 3323 , - 2980 , - 2913 , - 2018 , - 3607 , - 2160 , - 989 , - 3406 , - 3891 , - 1340 , - 3481 , - 378 , - 4175 , - 520 , - 1557 , - 1766 , - 43 , - 4116 , - 4049 , - 3154 , - 327 , - 3296 , - 2125 , - 126 , - 611 , - 2476 , - 201 , - 1514 , - 895 , - 1656 , - 2693 , - 2902 , - 1179 , - 836 , - 769 , - 4290 , - 1463 , - 16 , - 3261 , - 1262 , - 1747 , - 3612 , - 1337 , - 2650 , - 2031 , - 2792 , - 3829 , - 4038 , - 2315 , - 1972 , - 1905 , - 1010 , - 2599 , - 1152 , - 4397 , - 2398 , - 2883 , - 332 , - 2473 , - 3786 , - 3167 , - 3928 , - 549 , - 758 , - 3451 , - 3108 , - 3041 , - 2146 , - 3735 , - 2288 , - 1117 , - 3534 , - 4019 , - 1468 , - 3609 , - 506 , - 4303 , - 648 , - 1685 , - 1894 , - 171 , - 4244 , - 4177 , - 3282 , - 455 , - 3424 , - 2253 , - 254 , - 739 , - 2604 , - 329 , - 1642 , - 1023 , - 1784 , - 2821 , - 3030 , - 1307 , - 964 , - 897 , - 2 , - 1591 , - 144 , - 3389 , - 1390 , - 1875 , - 3740 , - 1465 , - 2778 , - 2159 , - 2920 , - 3957 , - 4166 , - 2443 , - 2100 , - 2033 , - 1138 , - 2727 , - 1280 , - 109 , - 2526 , - 3011 , - 460 , - 2601 , - 3914 , - 3295 , - 4056 , - 677 , - 886 , - 3579 , - 3236 , - 3169 , - 2274 , - 3863 , - 2416 , - 1245 , - 3662 , - 4147 , - 1596 , - 3737 , - 634 , - 15 , - 776 , - 1813 , - 2022 , - 299 , - 4372 , - 4305 , - 3410 , - 583 , - 3552 , - 2381 , - 382 , - 867 , - 2732 , - 457 , - 1770 , - 1151 , - 1912 , - 2949 , - 3158 , - 1435 , - 1092 , - 1025 , - 130 , - 1719 , - 272 , - 3517 , - 1518 , - 2003 , - 3868 , - 1593 , - 2906 , - 2287 , - 3048 , - 4085 , - 4294 , - 2571 , - 2228 , - 2161 , - 1266 , - 2855 , - 1408 , - 237 , - 2654 , - 3139 , - 588 , - 2729 , - 4042 , - 3423 , - 4184 , - 805 , - 1014 , - 3707 , - 3364 , - 3297 , - 2402 , - 3991 , - 2544 , - 1373 , - 3790 , - 4275 , - 1724 , - 3865 , - 762 , - 143 , - 904 , - 1941 , - 2150 , - 427 , - 84 , - 17 , - 3538 , - 711 , - 3680 , - 2509 , - 510 , - 995 , - 2860 , - 585 , - 1898 , - 1279 , - 2040 , - 3077 , - 3286 , - 1563 , - 1220 , - 1153 , - 258 , - 1847 , - 400 , - 3645 , - 1646 , - 2131 , - 3996 , - 1721 , - 3034 , - 2415 , - 3176 , - 4213 , - 6 , - 2699 , - 2356 , - 2289 , - 1394 , - 2983 , - 1536 , - 365 , - 2782 , - 3267 , - 716 , - 2857 , - 4170 , - 3551 , - 4312 , - 933 , - 1142 , - 3835 , - 3492 , - 3425 , - 2530 , - 4119 , - 2672 , - 1501 , - 3918 , - 4403 , - 1852 , - 3993 , - 890 , - 271 , - 1032 , - 2069 , - 2278 , - 555 , - 212 , - 145 , - 3666 , - 839 , - 3808 , - 2637 , - 638 , - 1123 , - 2988 , - 713 , - 2026 , - 1407 , - 2168 , - 3205 , - 3414 , - 1691 , - 1348 , - 1281 , - 386 , - 1975 , - 528 , - 3773 , - 1774 , - 2259 , - 4124 , - 1849 , - 3162 , - 2543 , - 3304 , - 4341 , - 134 , - 2827 , - 2484 , - 2417 , - 1522 , - 3111 , - 1664 , - 493 , - 2910 , - 3395 , - 844 , - 2985 , - 4298 , - 3679 , - 24 , - 1061 , - 1270 , - 3963 , - 3620 , - 3553 , - 2658 , - 4247 , - 2800 , - 1629 , - 4046 , - 115 , - 1980 , - 4121 , - 1018 , - 399 , - 1160 , - 2197 , - 2406 , - 683 , - 340 , - 273 , - 3794 , - 967 , - 3936 , - 2765 , - 766 , - 1251 , - 3116 , - 841 , - 2154 , - 1535 , - 2296 , - 3333 , - 3542 , - 1819 , - 1476 , - 1409 , - 514 , - 2103 , - 656 , - 3901 , - 1902 , - 2387 , - 4252 , - 1977 , - 3290 , - 2671 , - 3432 , - 53 , - 262 , - 2955 , - 2612 , - 2545 , - 1650 , - 3239 , - 1792 , - 621 , - 3038 , - 3523 , - 972 , - 3113 , - 10 , - 3807 , - 152 , - 1189 , - 1398 , - 4091 , - 3748 , - 3681 , - 2786 , - 4375 , - 2928 , - 1757 , - 4174 , - 243 , - 2108 , - 4249 , - 1146 , - 527 , - 1288 , - 2325 , - 2534 , - 811 , - 468 , - 401 , - 3922 , - 1095 , - 4064 , - 2893 , - 894 , - 1379 , - 3244 , - 969 , - 2282 , - 1663 , - 2424 , - 3461 , - 3670 , - 1947 , - 1604 , - 1537 , - 642 , - 2231 , - 784 , - 4029 , - 2030 , - 2515 , - 4380 , - 2105 , - 3418 , - 2799 , - 3560 , - 181 , - 390 , - 3083 , - 2740 , - 2673 , - 1778 , - 3367 , - 1920 , - 749 , - 3166 , - 3651 , - 1100 , - 3241 , - 138 , - 3935 , - 280 , - 1317 , - 1526 , - 4219 , - 3876 , - 3809 , - 2914 , - 87 , - 3056 , - 1885 , - 4302 , - 371 , - 2236 , - 4377 , - 1274 , - 655 , - 1416 , - 2453 , - 2662 , - 939 , - 596 , - 529 , - 4050 , - 1223 , - 4192 , - 3021 , - 1022 , - 1507 , - 3372 , - 1097 , - 2410 , - 1791 , - 2552 , - 3589 , - 3798 , - 2075 , - 1732 , - 1665 , - 770 , - 2359 , - 912 , - 4157 , - 2158 , - 2643 , - 92 , - 2233 , - 3546 , - 2927 , - 3688 , - 309 , - 518 , - 3211 , - 2868 , - 2801 , - 1906 , - 3495 , - 2048 , - 877 , - 3294 , - 3779 , - 1228 , - 3369 , - 266 , - 4063 , - 408 , - 1445 , - 1654 , - 4347 , - 4004 , - 3937 , - 3042 , - 215 , - 3184 , - 2013 , - 14 , - 499 , - 2364 , - 89 , - 1402 , - 783 , - 1544 , - 2581 , - 2790 , - 1067 , - 724 , - 657 , - 4178 , - 1351 , - 4320 , - 3149 , - 1150 , - 1635 , - 3500 , - 1225 , - 2538 , - 1919 , - 2680 , - 3717 , - 3926 , - 2203 , - 1860 , - 1793 , - 898 , - 2487 , - 1040 , - 4285 , - 2286 , - 2771 , - 220 , - 2361 , - 3674 , - 3055 , - 3816 , - 437 , - 646 , - 3339 , - 2996 , - 2929 , - 2034 , - 3623 , - 2176 , - 1005 , - 3422 , - 3907 , - 1356 , - 3497 , - 394 , - 4191 , - 536 , - 1573 , - 1782 , - 59 , - 4132 , - 4065 , - 3170 , - 343 , - 3312 , - 2141 , - 142 , - 627 , - 2492 , - 217 , - 1530 , - 911 , - 1672 , - 2709 , - 2918 , - 1195 , - 852 , - 785 , - 4306 , - 1479 , - 32 , - 3277 , - 1278 , - 1763 , - 3628 , - 1353 , - 2666 , - 2047 , - 2808 , - 3845 , - 4054 , - 2331 , - 1988 , - 1921 , - 1026 , - 2615 , - 1168 , - 4413 , - 2414 , - 2899 , - 348 , - 2489 , - 3802 , - 3183 , - 3944 , - 565 , - 774 , - 3467 , - 3124 , - 3057 , - 2162 , - 3751 , - 2304 , - 1133 , - 3550 , - 4035 , - 1484 , - 3625 , - 522 , - 4319 , - 664 , - 1701 , - 1910 , - 187 , - 4260 , - 4193 , - 3298 , - 471 , - 3440 , - 2269 , - 270 , - 755 , - 2620 , - 345 , - 1658 , - 1039 , - 1800 , - 2837 , - 3046 , - 1323 , - 980 , - 913 , - 18 , - 1607 , - 160 , - 3405 , - 1406 , - 1891 , - 3756 , - 1481 , - 2794 , - 2175 , - 2936 , - 3973 , - 4182 , - 2459 , - 2116 , - 2049 , - 1154 , - 2743 , - 1296 , - 125 , - 2542 , - 3027 , - 476 , - 2617 , - 3930 , - 3311 , - 4072 , - 693 , - 902 , - 3595 , - 3252 , - 3185 , - 2290 , - 3879 , - 2432 , - 1261 , - 3678 , - 4163 , - 1612 , - 3753 , - 650 , - 31 , - 792 , - 1829 , - 2038 , - 315 , - 4388 , - 4321 , - 3426 , - 599 , - 3568 , - 2397 , - 398 , - 883 , - 2748 , - 473 , - 1786 , - 1167 , - 1928 , - 2965 , - 3174 , - 1451 , - 1108 , - 1041 , - 146 , - 1735 , - 288 , - 3533 , - 1534 , - 2019 , - 3884 , - 1609 , - 2922 , - 2303 , - 3064 , - 4101 , - 4310 , - 2587 , - 2244 , - 2177 , - 1282 , - 2871 , - 1424 , - 253 , - 2670 , - 3155 , - 604 , - 2745 , - 4058 , - 3439 , - 4200 , - 821 , - 1030 , - 3723 , - 3380 , - 3313 , - 2418 , - 4007 , - 2560 , - 1389 , - 3806 , - 4291 , - 1740 , - 3881 , - 778 , - 159 , - 920 , - 1957 , - 2166 , - 443 , - 100 , - 33 , - 3554 , - 727 , - 3696 , - 2525 , - 526 , - 1011 , - 2876 , - 601 , - 1914 , - 1295 , - 2056 , - 3093 , - 3302 , - 1579 , - 1236 , - 1169 , - 274 , - 1863 , - 416 , - 3661 , - 1662 , - 2147 , - 4012 , - 1737 , - 3050 , - 2431 , - 3192 , - 4229 , - 22 , - 2715 , - 2372 , - 2305 , - 1410 , - 2999 , - 1552 , - 381 , - 2798 , - 3283 , - 732 , - 2873 , - 4186 , - 3567 , - 4328 , - 949 , - 1158 , - 3851 , - 3508 , - 3441 , - 2546 , - 4135 , - 2688 , - 1517 , - 3934 , - 3 , - 1868 , - 4009 , - 906 , - 287 , - 1048 , - 2085 , - 2294 , - 571 , - 228 , - 161 , - 3682 , - 855 , - 3824 , - 2653 , - 654 , - 1139 , - 3004 , - 729 , - 2042 , - 1423 , - 2184 , - 3221 , - 3430 , - 1707 , - 1364 , - 1297 , - 402 , - 1991 , - 544 , - 3789 , - 1790 , - 2275 , - 4140 , - 1865 , - 3178 , - 2559 , - 3320 , - 4357 , - 150 , - 2843 , - 2500 , - 2433 , - 1538 , - 3127 , - 1680 , - 509 , - 2926 , - 3411 , - 860 , - 3001 , - 4314 , - 3695 , - 40 , - 1077 , - 1286 , - 3979 , - 3636 , - 3569 , - 2674 , - 4263 , - 2816 , - 1645 , - 4062 , - 131 , - 1996 , - 4137 , - 1034 , - 415 , - 1176 , - 2213 , - 2422 , - 699 , - 356 , - 289 , - 3810 , - 983 , - 3952 , - 2781 , - 782 , - 1267 , - 3132 , - 857 , - 2170 , - 1551 , - 2312 , - 3349 , - 3558 , - 1835 , - 1492 , - 1425 , - 530 , - 2119 , - 672 , - 3917 , - 1918 , - 2403 , - 4268 , - 1993 , - 3306 , - 2687 , - 3448 , - 69 , - 278 , - 2971 , - 2628 , - 2561 , - 1666 , - 3255 , - 1808 , - 637 , - 3054 , - 3539 , - 988 , - 3129 , - 26 , - 3823 , - 168 , - 1205 , - 1414 , - 4107 , - 3764 , - 3697 , - 2802 , - 4391 , - 2944 , - 1773 , - 4190 , - 259 , - 2124 , - 4265 , - 1162 , - 543 , - 1304 , - 2341 , - 2550 , - 827 , - 484 , - 417 , - 3938 , - 1111 , - 4080 , - 2909 , - 910 , - 1395 , - 3260 , - 985 , - 2298 , - 1679 , - 2440 , - 3477 , - 3686 , - 1963 , - 1620 , - 1553 , - 658 , - 2247 , - 800 , - 4045 , - 2046 , - 2531 , - 4396 , - 2121 , - 3434 , - 2815 , - 3576 , - 197 , - 406 , - 3099 , - 2756 , - 2689 , - 1794 , - 3383 , - 1936 , - 765 , - 3182 , - 3667 , - 1116 , - 3257 , - 154 , - 3951 , - 296 , - 1333 , - 1542 , - 4235 , - 3892 , - 3825 , - 2930 , - 103 , - 3072 , - 1901 , - 4318 , - 387 , - 2252 , - 4393 , - 1290 , - 671 , - 1432 , - 2469 , - 2678 , - 955 , - 612 , - 545 , - 4066 , - 1239 , - 4208 , - 3037 , - 1038 , - 1523 , - 3388 , - 1113 , - 2426 , - 1807 , - 2568 , - 3605 , - 3814 , - 2091 , - 1748 , - 1681 , - 786 , - 2375 , - 928 , - 4173 , - 2174 , - 2659 , - 108 , - 2249 , - 3562 , - 2943 , - 3704 , - 325 , - 534 , - 3227 , - 2884 , - 2817 , - 1922 , - 3511 , - 2064 , - 893 , - 3310 , - 3795 , - 1244 , - 3385 , - 282 , - 4079 , - 424 , - 1461 , - 1670 , - 4363 , - 4020 , - 3953 , - 3058 , - 231 , - 3200 , - 2029 , - 30 , - 515 , - 2380 , - 105 , - 1418 , - 799 , - 1560 , - 2597 , - 2806 , - 1083 , - 740 , - 673 , - 4194 , - 1367 , - 4336 , - 3165 , - 1166 , - 1651 , - 3516 , - 1241 , - 2554 , - 1935 , - 2696 , - 3733 , - 3942 , - 2219 , - 1876 , - 1809 , - 914 , - 2503 , - 1056 , - 4301 , - 2302 , - 2787 , - 236 , - 2377 , - 3690 , - 3071 , - 3832 , - 453 , - 662 , - 3355 , - 3012 , - 2945 , - 2050 , - 3639 , - 2192 , - 1021 , - 3438 , - 3923 , - 1372 , - 3513 , - 410 , - 4207 , - 552 , - 1589 , - 1798 , - 75 , - 4148 , - 4081 , - 3186 , - 359 , - 3328 , - 2157 , - 158 , - 643 , - 2508 , - 233 , - 1546 , - 927 , - 1688 , - 2725 , - 2934 , - 1211 , - 868 , - 801 , - 4322 , - 1495 , - 48 , - 3293 , - 1294 , - 1779 , - 3644 , - 1369 , - 2682 , - 2063 , - 2824 , - 3861 , - 4070 , - 2347 , - 2004 , - 1937 , - 1042 , - 2631 , - 1184 , - 13 , - 2430 , - 2915 , - 364 , - 2505 , - 3818 , - 3199 , - 3960 , - 581 , - 790 , - 3483 , - 3140 , - 3073 , - 2178 , - 3767 , - 2320 , - 1149 , - 3566 , - 4051 , - 1500 , - 3641 , - 538 , - 4335 , - 680 , - 1717 , - 1926 , - 203 , - 4276 , - 4209 , - 3314 , - 487 , - 3456 , - 2285 , - 286 , - 771 , - 2636 , - 361 , - 1674 , - 1055 , - 1816 , - 2853 , - 3062 , - 1339 , - 996 , - 929 , - 34 , - 1623 , - 176 , - 3421 , - 1422 , - 1907 , - 3772 , - 1497 , - 2810 , - 2191 , - 2952 , - 3989 , - 4198 , - 2475 , - 2132 , - 2065 , - 1170 , - 2759 , - 1312 , - 141 , - 2558 , - 3043 , - 492 , - 2633 , - 3946 , - 3327 , - 4088 , - 709 , - 918 , - 3611 , - 3268 , - 3201 , - 2306 , - 3895 , - 2448 , - 1277 , - 3694 , - 4179 , - 1628 , - 3769 , - 666 , - 47 , - 808 , - 1845 , - 2054 , - 331 , - 4404 , - 4337 , - 3442 , - 615 , - 3584 , - 2413 , - 414 , - 899 , - 2764 , - 489 , - 1802 , - 1183 , - 1944 , - 2981 , - 3190 , - 1467 , - 1124 , - 1057 , - 162 , - 1751 , - 304 , - 3549 , - 1550 , - 2035 , - 3900 , - 1625 , - 2938 , - 2319 , - 3080 , - 4117 , - 4326 , - 2603 , - 2260 , - 2193 , - 1298 , - 2887 , - 1440 , - 269 , - 2686 , - 3171 , - 620 , - 2761 , - 4074 , - 3455 , - 4216 , - 837 , - 1046 , - 3739 , - 3396 , - 3329 , - 2434 , - 4023 , - 2576 , - 1405 , - 3822 , - 4307 , - 1756 , - 3897 , - 794 , - 175 , - 936 , - 1973 , - 2182 , - 459 , - 116 , - 49 , - 3570 , - 743 , - 3712 , - 2541 , - 542 , - 1027 , - 2892 , - 617 , - 1930 , - 1311 , - 2072 , - 3109 , - 3318 , - 1595 , - 1252 , - 1185 , - 290 , - 1879 , - 432 , - 3677 , - 1678 , - 2163 , - 4028 , - 1753 , - 3066 , - 2447 , - 3208 , - 4245 , - 38 , - 2731 , - 2388 , - 2321 , - 1426 , - 3015 , - 1568 , - 397 , - 2814 , - 3299 , - 748 , - 2889 , - 4202 , - 3583 , - 4344 , - 965 , - 1174 , - 3867 , - 3524 , - 3457 , - 2562 , - 4151 , - 2704 , - 1533 , - 3950 , - 19 , - 1884 , - 4025 , - 922 , - 303 , - 1064 , - 2101 , - 2310 , - 587 , - 244 , - 177 , - 3698 , - 871 , - 3840 , - 2669 , - 670 , - 1155 , - 3020 , - 745 , - 2058 , - 1439 , - 2200 , - 3237 , - 3446 , - 1723 , - 1380 , - 1313 , - 418 , - 2007 , - 560 , - 3805 , - 1806 , - 2291 , - 4156 , - 1881 , - 3194 , - 2575 , - 3336 , - 4373 , - 166 , - 2859 , - 2516 , - 2449 , - 1554 , - 3143 , - 1696 , - 525 , - 2942 , - 3427 , - 876 , - 3017 , - 4330 , - 3711 , - 56 , - 1093 , - 1302 , - 3995 , - 3652 , - 3585 , - 2690 , - 4279 , - 2832 , - 1661 , - 4078 , - 147 , - 2012 , - 4153 , - 1050 , - 431 , - 1192 , - 2229 , - 2438 , - 715 , - 372 , - 305 , - 3826 , - 999 , - 3968 , - 2797 , - 798 , - 1283 , - 3148 , - 873 , - 2186 , - 1567 , - 2328 , - 3365 , - 3574 , - 1851 , - 1508 , - 1441 , - 546 , - 2135 , - 688 , - 3933 , - 1934 , - 2419 , - 4284 , - 2009 , - 3322 , - 2703 , - 3464 , - 85 , - 294 , - 2987 , - 2644 , - 2577 , - 1682 , - 3271 , - 1824 , - 653 , - 3070 , - 3555 , - 1004 , - 3145 , - 42 , - 3839 , - 184 , - 1221 , - 1430 , - 4123 , - 3780 , - 3713 , - 2818 , - 4407 , - 2960 , - 1789 , - 4206 , - 275 , - 2140 , - 4281 , - 1178 , - 559 , - 1320 , - 2357 , - 2566 , - 843 , - 500 , - 433 , - 3954 , - 1127 , - 4096 , - 2925 , - 926 , - 1411 , - 3276 , - 1001 , - 2314 , - 1695 , - 2456 , - 3493 , - 3702 , - 1979 , - 1636 , - 1569 , - 674 , - 2263 , - 816 , - 4061 , - 2062 , - 2547 , - 4412 , - 2137 , - 3450 , - 2831 , - 3592 , - 213 , - 422 , - 3115 , - 2772 , - 2705 , - 1810 , - 3399 , - 1952 , - 781 , - 3198 , - 3683 , - 1132 , - 3273 , - 170 , - 3967 , - 312 , - 1349 , - 1558 , - 4251 , - 3908 , - 3841 , - 2946 , - 119 , - 3088 , - 1917 , - 4334 , - 403 , - 2268 , - 4409 , - 1306 , - 687 , - 1448 , - 2485 , - 2694 , - 971 , - 628 , - 561 , - 4082 , - 1255 , - 4224 , - 3053 , - 1054 , - 1539 , - 3404 , - 1129 , - 2442 , - 1823 , - 2584 , - 3621 , - 3830 , - 2107 , - 1764 , - 1697 , - 802 , - 2391 , - 944 , - 4189 , - 2190 , - 2675 , - 124 , - 2265 , - 3578 , - 2959 , - 3720 , - 341 , - 550 , - 3243 , - 2900 , - 2833 , - 1938 , - 3527 , - 2080 , - 909 , - 3326 , - 3811 , - 1260 , - 3401 , - 298 , - 4095 , - 440 , - 1477 , - 1686 , - 4379 , - 4036 , - 3969 , - 3074 , - 247 , - 3216 , - 2045 , - 46 , - 531 , - 2396 , - 121 , - 1434 , - 815 , - 1576 , - 2613 , - 2822 , - 1099 , - 756 , - 689 , - 4210 , - 1383 , - 4352 , - 3181 , - 1182 , - 1667 , - 3532 , - 1257 , - 2570 , - 1951 , - 2712 , - 3749 , - 3958 , - 2235 , - 1892 , - 1825 , - 930 , - 2519 , - 1072 , - 4317 , - 2318 , - 2803 , - 252 , - 2393 , - 3706 , - 3087 , - 3848 , - 469 , - 678 , - 3371 , - 3028 , - 2961 , - 2066 , - 3655 , - 2208 , - 1037 , - 3454 , - 3939 , - 1388 , - 3529 , - 426 , - 4223 , - 568 , - 1605 , - 1814 , - 91 , - 4164 , - 4097 , - 3202 , - 375 , - 3344 , - 2173 , - 174 , - 659 , - 2524 , - 249 , - 1562 , - 943 , - 1704 , - 2741 , - 2950 , - 1227 , - 884 , - 817 , - 4338 , - 1511 , - 64 , - 3309 , - 1310 , - 1795 , - 3660 , - 1385 , - 2698 , - 2079 , - 2840 , - 3877 , - 4086 , - 2363 , - 2020 , - 1953 , - 1058 , - 2647 , - 1200 , - 29 , - 2446 , - 2931 , - 380 , - 2521 , - 3834 , - 3215 , - 3976 , - 597 , - 806 , - 3499 , - 3156 , - 3089 , - 2194 , - 3783 , - 2336 , - 1165 , - 3582 , - 4067 , - 1516 , - 3657 , - 554 , - 4351 , - 696 , - 1733 , - 1942 , - 219 , - 4292 , - 4225 , - 3330 , - 503 , - 3472 , - 2301 , - 302 , - 787 , - 2652 , - 377 , - 1690 , - 1071 , - 1832 , - 2869 , - 3078 , - 1355 , - 1012 , - 945 , - 50 , - 1639 , - 192 , - 3437 , - 1438 , - 1923 , - 3788 , - 1513 , - 2826 , - 2207 , - 2968 , - 4005 , - 4214 , - 2491 , - 2148 , - 2081 , - 1186 , - 2775 , - 1328 , - 157 , - 2574 , - 3059 , - 508 , - 2649 , - 3962 , - 3343 , - 4104 , - 725 , - 934 , - 3627 , - 3284 , - 3217 , - 2322 , - 3911 , - 2464 , - 1293 , - 3710 , - 4195 , - 1644 , - 3785 , - 682 , - 63 , - 824 , - 1861 , - 2070 , - 347 , - 4 , - 4353 , - 3458 , - 631 , - 3600 , - 2429 , - 430 , - 915 , - 2780 , - 505 , - 1818 , - 1199 , - 1960 , - 2997 , - 3206 , - 1483 , - 1140 , - 1073 , - 178 , - 1767 , - 320 , - 3565 , - 1566 , - 2051 , - 3916 , - 1641 , - 2954 , - 2335 , - 3096 , - 4133 , - 4342 , - 2619 , - 2276 , - 2209 , - 1314 , - 2903 , - 1456 , - 285 , - 2702 , - 3187 , - 636 , - 2777 , - 4090 , - 3471 , - 4232 , - 853 , - 1062 , - 3755 , - 3412 , - 3345 , - 2450 , - 4039 , - 2592 , - 1421 , - 3838 , - 4323 , - 1772 , - 3913 , - 810 , - 191 , - 952 , - 1989 , - 2198 , - 475 , - 132 , - 65 , - 3586 , - 759 , - 3728 , - 2557 , - 558 , - 1043 , - 2908 , - 633 , - 1946 , - 1327 , - 2088 , - 3125 , - 3334 , - 1611 , - 1268 , - 1201 , - 306 , - 1895 , - 448 , - 3693 , - 1694 , - 2179 , - 4044 , - 1769 , - 3082 , - 2463 , - 3224 , - 4261 , - 54 , - 2747 , - 2404 , - 2337 , - 1442 , - 3031 , - 1584 , - 413 , - 2830 , - 3315 , - 764 , - 2905 , - 4218 , - 3599 , - 4360 , - 981 , - 1190 , - 3883 , - 3540 , - 3473 , - 2578 , - 4167 , - 2720 , - 1549 , - 3966 , - 35 , - 1900 , - 4041 , - 938 , - 319 , - 1080 , - 2117 , - 2326 , - 603 , - 260 , - 193 , - 3714 , - 887 , - 3856 , - 2685 , - 686 , - 1171 , - 3036 , - 761 , - 2074 , - 1455 , - 2216 , - 3253 , - 3462 , - 1739 , - 1396 , - 1329 , - 434 , - 2023 , - 576 , - 3821 , - 1822 , - 2307 , - 4172 , - 1897 , - 3210 , - 2591 , - 3352 , - 4389 , - 182 , - 2875 , - 2532 , - 2465 , - 1570 , - 3159 , - 1712 , - 541 , - 2958 , - 3443 , - 892 , - 3033 , - 4346 , - 3727 , - 72 , - 1109 , - 1318 , - 4011 , - 3668 , - 3601 , - 2706 , - 4295 , - 2848 , - 1677 , - 4094 , - 163 , - 2028 , - 4169 , - 1066 , - 447 , - 1208 , - 2245 , - 2454 , - 731 , - 388 , - 321 , - 3842 , - 1015 , - 3984 , - 2813 , - 814 , - 1299 , - 3164 , - 889 , - 2202 , - 1583 , - 2344 , - 3381 , - 3590 , - 1867 , - 1524 , - 1457 , - 562 , - 2151 , - 704 , - 3949 , - 1950 , - 2435 , - 4300 , - 2025 , - 3338 , - 2719 , - 3480 , - 101 , - 310 , - 3003 , - 2660 , - 2593 , - 1698 , - 3287 , - 1840 , - 669 , - 3086 , - 3571 , - 1020 , - 3161 , - 58 , - 3855 , - 200 , - 1237 , - 1446 , - 4139 , - 3796 , - 3729 , - 2834 , - 7 , - 2976 , - 1805 , - 4222 , - 291 , - 2156 , - 4297 , - 1194 , - 575 , - 1336 , - 2373 , - 2582 , - 859 , - 516 , - 449 , - 3970 , - 1143 , - 4112 , - 2941 , - 942 , - 1427 , - 3292 , - 1017 , - 2330 , - 1711 , - 2472 , - 3509 , - 3718 , - 1995 , - 1652 , - 1585 , - 690 , - 2279 , - 832 , - 4077 , - 2078 , - 2563 , - 12 , - 2153 , - 3466 , - 2847 , - 3608 , - 229 , - 438 , - 3131 , - 2788 , - 2721 , - 1826 , - 3415 , - 1968 , - 797 , - 3214 , - 3699 , - 1148 , - 3289 , - 186 , - 3983 , - 328 , - 1365 , - 1574 , - 4267 , - 3924 , - 3857 , - 2962 , - 135 , - 3104 , - 1933 , - 4350 , - 419 , - 2284 , - 9 , - 1322 , - 703 , - 1464 , - 2501 , - 2710 , - 987 , - 644 , - 577 , - 4098 , - 1271 , - 4240 , - 3069 , - 1070 , - 1555 , - 3420 , - 1145 , - 2458 , - 1839 , - 2600 , - 3637 , - 3846 , - 2123 , - 1780 , - 1713 , - 818 , - 2407 , - 960 , - 4205 , - 2206 , - 2691 , - 140 , - 2281 , - 3594 , - 2975 , - 3736 , - 357 , - 566 , - 3259 , - 2916 , - 2849 , - 1954 , - 3543 , - 2096 , - 925 , - 3342 , - 3827 , - 1276 , - 3417 , - 314 , - 4111 , - 456 , - 1493 , - 1702 , - 4395 , - 4052 , - 3985 , - 3090 , - 263 , - 3232 , - 2061 , - 62 , - 547 , - 2412 , - 137 , - 1450 , - 831 , - 1592 , - 2629 , - 2838 , - 1115 , - 772 , - 705 , - 4226 , - 1399 , - 4368 , - 3197 , - 1198 , - 1683 , - 3548 , - 1273 , - 2586 , - 1967 , - 2728 , - 3765 , - 3974 , - 2251 , - 1908 , - 1841 , - 946 , - 2535 , - 1088 , - 4333 , - 2334 , - 2819 , - 268 , - 2409 , - 3722 , - 3103 , - 3864 , - 485 , - 694 , - 3387 , - 3044 , - 2977 , - 2082 , - 3671 , - 2224 , - 1053 , - 3470 , - 3955 , - 1404 , - 3545 , - 442 , - 4239 , - 584 , - 1621 , - 1830 , - 107 , - 4180 , - 4113 , - 3218 , - 391 , - 3360 , - 2189 , - 190 , - 675 , - 2540 , - 265 , - 1578 , - 959 , - 1720 , - 2757 , - 2966 , - 1243 , - 900 , - 833 , - 4354 , - 1527 , - 80 , - 3325 , - 1326 , - 1811 , - 3676 , - 1401 , - 2714 , - 2095 , - 2856 , - 3893 , - 4102 , - 2379 , - 2036 , - 1969 , - 1074 , - 2663 , - 1216 , - 45 , - 2462 , - 2947 , - 396 , - 2537 , - 3850 , - 3231 , - 3992 , - 613 , - 822 , - 3515 , - 3172 , - 3105 , - 2210 , - 3799 , - 2352 , - 1181 , - 3598 , - 4083 , - 1532 , - 3673 , - 570 , - 4367 , - 712 , - 1749 , - 1958 , - 235 , - 4308 , - 4241 , - 3346 , - 519 , - 3488 , - 2317 , - 318 , - 803 , - 2668 , - 393 , - 1706 , - 1087 , - 1848 , - 2885 , - 3094 , - 1371 , - 1028 , - 961 , - 66 , - 1655 , - 208 , - 3453 , - 1454 , - 1939 , - 3804 , - 1529 , - 2842 , - 2223 , - 2984 , - 4021 , - 4230 , - 2507 , - 2164 , - 2097 , - 1202 , - 2791 , - 1344 , - 173 , - 2590 , - 3075 , - 524 , - 2665 , - 3978 , - 3359 , - 4120 , - 741 , - 950 , - 3643 , - 3300 , - 3233 , - 2338 , - 3927 , - 2480 , - 1309 , - 3726 , - 4211 , - 1660 , - 3801 , - 698 , - 79 , - 840 , - 1877 , - 2086 , - 363 , - 20 , - 4369 , - 3474 , - 647 , - 3616 , - 2445 , - 446 , - 931 , - 2796 , - 521 , - 1834 , - 1215 , - 1976 , - 3013 , - 3222 , - 1499 , - 1156 , - 1089 , - 194 , - 1783 , - 336 , - 3581 , - 1582 , - 2067 , - 3932 , - 1657 , - 2970 , - 2351 , - 3112 , - 4149 , - 4358 , - 2635 , - 2292 , - 2225 , - 1330 , - 2919 , - 1472 , - 301 , - 2718 , - 3203 , - 652 , - 2793 , - 4106 , - 3487 , - 4248 , - 869 , - 1078 , - 3771 , - 3428 , - 3361 , - 2466 , - 4055 , - 2608 , - 1437 , - 3854 , - 4339 , - 1788 , - 3929 , - 826 , - 207 , - 968 , - 2005 , - 2214 , - 491 , - 148 , - 81 , - 3602 , - 775 , - 3744 , - 2573 , - 574 , - 1059 , - 2924 , - 649 , - 1962 , - 1343 , - 2104 , - 3141 , - 3350 , - 1627 , - 1284 , - 1217 , - 322 , - 1911 , - 464 , - 3709 , - 1710 , - 2195 , - 4060 , - 1785 , - 3098 , - 2479 , - 3240 , - 4277 , - 70 , - 2763 , - 2420 , - 2353 , - 1458 , - 3047 , - 1600 , - 429 , - 2846 , - 3331 , - 780 , - 2921 , - 4234 , - 3615 , - 4376 , - 997 , - 1206 , - 3899 , - 3556 , - 3489 , - 2594 , - 4183 , - 2736 , - 1565 , - 3982 , - 51 , - 1916 , - 4057 , - 954 , - 335 , - 1096 , - 2133 , - 2342 , - 619 , - 276 , - 209 , - 3730 , - 903 , - 3872 , - 2701 , - 702 , - 1187 , - 3052 , - 777 , - 2090 , - 1471 , - 2232 , - 3269 , - 3478 , - 1755 , - 1412 , - 1345 , - 450 , - 2039 , - 592 , - 3837 , - 1838 , - 2323 , - 4188 , - 1913 , - 3226 , - 2607 , - 3368 , - 4405 , - 198 , - 2891 , - 2548 , - 2481 , - 1586 , - 3175 , - 1728 , - 557 , - 2974 , - 3459 , - 908 , - 3049 , - 4362 , - 3743 , - 88 , - 1125 , - 1334 , - 4027 , - 3684 , - 3617 , - 2722 , - 4311 , - 2864 , - 1693 , - 4110 , - 179 , - 2044 , - 4185 , - 1082 , - 463 , - 1224 , - 2261 , - 2470 , - 747 , - 404 , - 337 , - 3858 , - 1031 , - 4000 , - 2829 , - 830 , - 1315 , - 3180 , - 905 , - 2218 , - 1599 , - 2360 , - 3397 , - 3606 , - 1883 , - 1540 , - 1473 , - 578 , - 2167 , - 720 , - 3965 , - 1966 , - 2451 , - 4316 , - 2041 , - 3354 , - 2735 , - 3496 , - 117 , - 326 , - 3019 , - 2676 , - 2609 , - 1714 , - 3303 , - 1856 , - 685 , - 3102 , - 3587 , - 1036 , - 3177 , - 74 , - 3871 , - 216 , - 1253 , - 1462 , - 4155 , - 3812 , - 3745 , - 2850 , - 23 , - 2992 , - 1821 , - 4238 , - 307 , - 2172 , - 4313 , - 1210 , - 591 , - 1352 , - 2389 , - 2598 , - 875 , - 532 , - 465 , - 3986 , - 1159 , - 4128 , - 2957 , - 958 , - 1443 , - 3308 , - 1033 , - 2346 , - 1727 , - 2488 , - 3525 , - 3734 , - 2011 , - 1668 , - 1601 , - 706 , - 2295 , - 848 , - 4093 , - 2094 , - 2579 , - 28 , - 2169 , - 3482 , - 2863 , - 3624 , - 245 , - 454 , - 3147 , - 2804 , - 2737 , - 1842 , - 3431 , - 1984 , - 813 , - 3230 , - 3715 , - 1164 , - 3305 , - 202 , - 3999 , - 344 , - 1381 , - 1590 , - 4283 , - 3940 , - 3873 , - 2978 , - 151 , - 3120 , - 1949 , - 4366 , - 435 , - 2300 , - 25 , - 1338 , - 719 , - 1480 , - 2517 , - 2726 , - 1003 , - 660 , - 593 , - 4114 , - 1287 , - 4256 , - 3085 , - 1086 , - 1571 , - 3436 , - 1161 , - 2474 , - 1855 , - 2616 , - 3653 , - 3862 , - 2139 , - 1796 , - 1729 , - 834 , - 2423 , - 976 , - 4221 , - 2222 , - 2707 , - 156 , - 2297 , - 3610 , - 2991 , - 3752 , - 373 , - 582 , - 3275 , - 2932 , - 2865 , - 1970 , - 3559 , - 2112 , - 941 , - 3358 , - 3843 , - 1292 , - 3433 , - 330 , - 4127 , - 472 , - 1509 , - 1718 , - 4411 , - 4068 , - 4001 , - 3106 , - 279 , - 3248 , - 2077 , - 78 , - 563 , - 2428 , - 153 , - 1466 , - 847 , - 1608 , - 2645 , - 2854 , - 1131 , - 788 , - 721 , - 4242 , - 1415 , - 4384 , - 3213 , - 1214 , - 1699 , - 3564 , - 1289 , - 2602 , - 1983 , - 2744 , - 3781 , - 3990 , - 2267 , - 1924 , - 1857 , - 962 , - 2551 , - 1104 , - 4349 , - 2350 , - 2835 , - 284 , - 2425 , - 3738 , - 3119 , - 3880 , - 501 , - 710 , - 3403 , - 3060 , - 2993 , - 2098 , - 3687 , - 2240 , - 1069 , - 3486 , - 3971 , - 1420 , - 3561 , - 458 , - 4255 , - 600 , - 1637 , - 1846 , - 123 , - 4196 , - 4129 , - 3234 , - 407 , - 3376 , - 2205 , - 206 , - 691 , - 2556 , - 281 , - 1594 , - 975 , - 1736 , - 2773 , - 2982 , - 1259 , - 916 , - 849 , - 4370 , - 1543 , - 96 , - 3341 , - 1342 , - 1827 , - 3692 , - 1417 , - 2730 , - 2111 , - 2872 , - 3909 , - 4118 , - 2395 , - 2052 , - 1985 , - 1090 , - 2679 , - 1232 , - 61 , - 2478 , - 2963 , - 412 , - 2553 , - 3866 , - 3247 , - 4008 , - 629 , - 838 , - 3531 , - 3188 , - 3121 , - 2226 , - 3815 , - 2368 , - 1197 , - 3614 , - 4099 , - 1548 , - 3689 , - 586 , - 4383 , - 728 , - 1765 , - 1974 , - 251 , - 4324 , - 4257 , - 3362 , - 535 , - 3504 , - 2333 , - 334 , - 819 , - 2684 , - 409 , - 1722 , - 1103 , - 1864 , - 2901 , - 3110 , - 1387 , - 1044 , - 977 , - 82 , - 1671 , - 224 , - 3469 , - 1470 , - 1955 , - 3820 , - 1545 , - 2858 , - 2239 , - 3000 , - 4037 , - 4246 , - 2523 , - 2180 , - 2113 , - 1218 , - 2807 , - 1360 , - 189 , - 2606 , - 3091 , - 540 , - 2681 , - 3994 , - 3375 , - 4136 , - 757 , - 966 , - 3659 , - 3316 , - 3249 , - 2354 , - 3943 , - 2496 , - 1325 , - 3742 , - 4227 , - 1676 , - 3817 , - 714 , - 95 , - 856 , - 1893 , - 2102 , - 379 , - 36 , - 4385 , - 3490 , - 663 , - 3632 , - 2461 , - 462 , - 947 , - 2812 , - 537 , - 1850 , - 1231 , - 1992 , - 3029 , - 3238 , - 1515 , - 1172 , - 1105 , - 210 , - 1799 , - 352 , - 3597 , - 1598 , - 2083 , - 3948 , - 1673 , - 2986 , - 2367 , - 3128 , - 4165 , - 4374 , - 2651 , - 2308 , - 2241 , - 1346 , - 2935 , - 1488 , - 317 , - 2734 , - 3219 , - 668 , - 2809 , - 4122 , - 3503 , - 4264 , - 885 , - 1094 , - 3787 , - 3444 , - 3377 , - 2482 , - 4071 , - 2624 , - 1453 , - 3870 , - 4355 , - 1804 , - 3945 , - 842 , - 223 , - 984 , - 2021 , - 2230 , - 507 , - 164 , - 97 , - 3618 , - 791 , - 3760 , - 2589 , - 590 , - 1075 , - 2940 , - 665 , - 1978 , - 1359 , - 2120 , - 3157 , - 3366 , - 1643 , - 1300 , - 1233 , - 338 , - 1927 , - 480 , - 3725 , - 1726 , - 2211 , - 4076 , - 1801 , - 3114 , - 2495 , - 3256 , - 4293 , - 86 , - 2779 , - 2436 , - 2369 , - 1474 , - 3063 , - 1616 , - 445 , - 2862 , - 3347 , - 796 , - 2937 , - 4250 , - 3631 , - 4392 , - 1013 , - 1222 , - 3915 , - 3572 , - 3505 , - 2610 , - 4199 , - 2752 , - 1581 , - 3998 , - 67 , - 1932 , - 4073 , - 970 , - 351 , - 1112 , - 2149 , - 2358 , - 635 , - 292 , - 225 , - 3746 , - 919 , - 3888 , - 2717 , - 718 , - 1203 , - 3068 , - 793 , - 2106 , - 1487 , - 2248 , - 3285 , - 3494 , - 1771 , - 1428 , - 1361 , - 466 , - 2055 , - 608 , - 3853 , - 1854 , - 2339 , - 4204 , - 1929 , - 3242 , - 2623 , - 3384 , - 5 , - 214 , - 2907 , - 2564 , - 2497 , - 1602 , - 3191 , - 1744 , - 573 , - 2990 , - 3475 , - 924 , - 3065 , - 4378 , - 3759 , - 104 , - 1141 , - 1350 , - 4043 , - 3700 , - 3633 , - 2738 , - 4327 , - 2880 , - 1709 , - 4126 , - 195 , - 2060 , - 4201 , - 1098 , - 479 , - 1240 , - 2277 , - 2486 , - 763 , - 420 , - 353 , - 3874 , - 1047 , - 4016 , - 2845 , - 846 , - 1331 , - 3196 , - 921 , - 2234 , - 1615 , - 2376 , - 3413 , - 3622 , - 1899 , - 1556 , - 1489 , - 594 , - 2183 , - 736 , - 3981 , - 1982 , - 2467 , - 4332 , - 2057 , - 3370 , - 2751 , - 3512 , - 133 , - 342 , - 3035 , - 2692 , - 2625 , - 1730 , - 3319 , - 1872 , - 701 , - 3118 , - 3603 , - 1052 , - 3193 , - 90 , - 3887 , - 232 , - 1269 , - 1478 , - 4171 , - 3828 , - 3761 , - 2866 , - 39 , - 3008 , - 1837 , - 4254 , - 323 , - 2188 , - 4329 , - 1226 , - 607 , - 1368 , - 2405 , - 2614 , - 891 , - 548 , - 481 , - 4002 , - 1175 , - 4144 , - 2973 , - 974 , - 1459 , - 3324 , - 1049 , - 2362 , - 1743 , - 2504 , - 3541 , - 3750 , - 2027 , - 1684 , - 1617 , - 722 , - 2311 , - 864 , - 4109 , - 2110 , - 2595 , - 44 , - 2185 , - 3498 , - 2879 , - 3640 , - 261 , - 470 , - 3163 , - 2820 , - 2753 , - 1858 , - 3447 , - 2000 , - 829 , - 3246 , - 3731 , - 1180 , - 3321 , - 218 , - 4015 , - 360 , - 1397 , - 1606 , - 4299 , - 3956 , - 3889 , - 2994 , - 167 , - 3136 , - 1965 , - 4382 , - 451 , - 2316 , - 41 , - 1354 , - 735 , - 1496 , - 2533 , - 2742 , - 1019 , - 676 , - 609 , - 4130 , - 1303 , - 4272 , - 3101 , - 1102 , - 1587 , - 3452 , - 1177 , - 2490 , - 1871 , - 2632 , - 3669 , - 3878 , - 2155 , - 1812 , - 1745 , - 850 , - 2439 , - 992 , - 4237 , - 2238 , - 2723 , - 172 , - 2313 , - 3626 , - 3007 , - 3768 , - 389 , - 598 , - 3291 , - 2948 , - 2881 , - 1986 , - 3575 , - 2128 , - 957 , - 3374 , - 3859 , - 1308 , - 3449 , - 346 , - 4143 , - 488 , - 1525 , - 1734 , - 11 , - 4084 , - 4017 , - 3122 , - 295 , - 3264 , - 2093 , - 94 , - 579 , - 2444 , - 169 , - 1482 , - 863 , - 1624 , - 2661 , - 2870 , - 1147 , - 804 , - 737 , - 4258 , - 1431 , - 4400 , - 3229 , - 1230 , - 1715 , - 3580 , - 1305 , - 2618 , - 1999 , - 2760 , - 3797 , - 4006 , - 2283 , - 1940 , - 1873 , - 978 , - 2567 , - 1120 , - 4365 , - 2366 , - 2851 , - 300 , - 2441 , - 3754 , - 3135 , - 3896 , - 517 , - 726 , - 3419 , - 3076 , - 3009 , - 2114 , - 3703 , - 2256 , - 1085 , - 3502 , - 3987 , - 1436 , - 3577 , - 474 , - 4271 , - 616 , - 1653 , - 1862 , - 139 , - 4212 , - 4145 , - 3250 , - 423 , - 3392 , - 2221 , - 222 , - 707 , - 2572 , - 297 , - 1610 , - 991 , - 1752 , - 2789 , - 2998 , - 1275 , - 932 , - 865 , - 4386 , - 1559 , - 112 , - 3357 , - 1358 , - 1843 , - 3708 , - 1433 , - 2746 , - 2127 , - 2888 , - 3925 , - 4134 , - 2411 , - 2068 , - 2001 , - 1106 , - 2695 , - 1248 , - 77 , - 2494 , - 2979 , - 428 , - 2569 , - 3882 , - 3263 , - 4024 , - 645 , - 854 , - 3547 , - 3204 , - 3137 , - 2242 , - 3831 , - 2384 , - 1213 , - 3630 , - 4115 , - 1564 , - 3705 , - 602 , - 4399 , - 744 , - 1781 , - 1990 , - 267 , - 4340 , - 4273 , - 3378 , - 551 , - 3520 , - 2349 , - 350 , - 835 , - 2700 , - 425 , - 1738 , - 1119 , - 1880 , - 2917 , - 3126 , - 1403 , - 1060 , - 993 , - 98 , - 1687 , - 240 , - 3485 , - 1486 , - 1971 , - 3836 , - 1561 , - 2874 , - 2255 , - 3016 , - 4053 , - 4262 , - 2539 , - 2196 , - 2129 , - 1234 , - 2823 , - 1376 , - 205 , - 2622 , - 3107 , - 556 , - 2697 , - 4010 , - 3391 , - 4152 , - 773 , - 982 , - 3675 , - 3332 , - 3265 , - 2370 , - 3959 , - 2512 , - 1341 , - 3758 , - 4243 , - 1692 , - 3833 , - 730 , - 111 , - 872 , - 1909 , - 2118 , - 395 , - 52 , - 4401 , - 3506 , - 679 , - 3648 , - 2477 , - 478 , - 963 , - 2828 , - 553 , - 1866 , - 1247 , - 2008 , - 3045 , - 3254 , - 1531 , - 1188 , - 1121 , - 226 , - 1815 , - 368 , - 3613 , - 1614 , - 2099 , - 3964 , - 1689 , - 3002 , - 2383 , - 3144 , - 4181 , - 4390 , - 2667 , - 2324 , - 2257 , - 1362 , - 2951 , - 1504 , - 333 , - 2750 , - 3235 , - 684 , - 2825 , - 4138 , - 3519 , - 4280 , - 901 , - 1110 , - 3803 , - 3460 , - 3393 , - 2498 , - 4087 , - 2640 , - 1469 , - 3886 , - 4371 , - 1820 , - 3961 , - 858 , - 239 , - 1000 , - 2037 , - 2246 , - 523 , - 180 , - 113 , - 3634 , - 807 , - 3776 , - 2605 , - 606 , - 1091 , - 2956 , - 681 , - 1994 , - 1375 , - 2136 , - 3173 , - 3382 , - 1659 , - 1316 , - 1249 , - 354 , - 1943 , - 496 , - 3741 , - 1742 , - 2227 , - 4092 , - 1817 , - 3130 , - 2511 , - 3272 , - 4309 , - 102 , - 2795 , - 2452 , - 2385 , - 1490 , - 3079 , - 1632 , - 461 , - 2878 , - 3363 , - 812 , - 2953 , - 4266 , - 3647 , - 4408 , - 1029 , - 1238 , - 3931 , - 3588 , - 3521 , - 2626 , - 4215 , - 2768 , - 1597 , - 4014 , - 83 , - 1948 , - 4089 , - 986 , - 367 , - 1128 , - 2165 , - 2374 , - 651 , - 308 , - 241 , - 3762 , - 935 , - 3904 , - 2733 , - 734 , - 1219 , - 3084 , - 809 , - 2122 , - 1503 , - 2264 , - 3301 , - 3510 , - 1787 , - 1444 , - 1377 , - 482 , - 2071 , - 624 , - 3869 , - 1870 , - 2355 , - 4220 , - 1945 , - 3258 , - 2639 , - 3400 , - 21 , - 230 , - 2923 , - 2580 , - 2513 , - 1618 , - 3207 , - 1760 , - 589 , - 3006 , - 3491 , - 940 , - 3081 , - 4394 , - 3775 , - 120 , - 1157 , - 1366 , - 4059 , - 3716 , - 3649 , - 2754 , - 4343 , - 2896 , - 1725 , - 4142 , - 211 , - 2076 , - 4217 , - 1114 , - 495 , - 1256 , - 2293 , - 2502 , - 779 , - 436 , - 369 , - 3890 , - 1063 , - 4032 , - 2861 , - 862 , - 1347 , - 3212 , - 937 , - 2250 , - 1631 , - 2392 , - 3429 , - 3638 , - 1915 , - 1572 , - 1505 , - 610 , - 2199 , - 752 , - 3997 , - 1998 , - 2483 , - 4348 , - 2073 , - 3386 , - 2767 , - 3528 , - 149 , - 358 , - 3051 , - 2708 , - 2641 , - 1746 , - 3335 , - 1888 , - 717 , - 3134 , - 3619 , - 1068 , - 3209 , - 106 , - 3903 , - 248 , - 1285 , - 1494 , - 4187 , - 3844 , - 3777 , - 2882 , - 55 , - 3024 , - 1853 , - 4270 , - 339 , - 2204 , - 4345 , - 1242 , - 623 , - 1384 , - 2421 , - 2630 , - 907 , - 564 , - 497 , - 4018 , - 1191 , - 4160 , - 2989 , - 990 , - 1475 , - 3340 , - 1065 , - 2378 , - 1759 , - 2520 , - 3557 , - 3766 , - 2043 , - 1700 , - 1633 , - 738 , - 2327 , - 880 , - 4125 , - 2126 , - 2611 , - 60 , - 2201 , - 3514 , - 2895 , - 3656 , - 277 , - 486 , - 3179 , - 2836 , - 2769 , - 1874 , - 3463 , - 2016 , - 845 , - 3262 , - 3747 , - 1196 , - 3337 , - 234 , - 4031 , - 376 , - 1413 , - 1622 , - 4315 , - 3972 , - 3905 , - 3010 , - 183 , - 3152 , - 1981 , - 4398 , - 467 , - 2332 , - 57 , - 1370 , - 751 , - 1512 , - 2549 , - 2758 , - 1035 , - 692 , - 625 , - 4146 , - 1319 , - 4288 , - 3117 , - 1118 , - 1603 , - 3468 , - 1193 , - 2506 , - 1887 , - 2648 , - 3685 , - 3894 , - 2171 , - 1828 , - 1761 , - 866 , - 2455 , - 1008 , - 4253 , - 2254 , - 2739 , - 188 , - 2329 , - 3642 , - 3023 , - 3784 , - 405 , - 614 , - 3307 , - 2964 , - 2897 , - 2002 , - 3591 , - 2144 , - 973 , - 3390 , - 3875 , - 1324 , - 3465 , - 362 , - 4159 , - 504 , - 1541 , - 1750 , - 27 , - 4100 , - 4033 , - 3138 , - 311 , - 3280 , - 2109 , - 110 , - 595 , - 2460 , - 185 , - 1498 , - 879 , - 1640 , - 2677 , - 2886 , - 1163 , - 820 , - 753 , - 4274 , - 1447 , - 0 , - 1537 , - 2514 , - 2931 , - 2788 , - 2085 , - 822 , - 3479 , - 1096 , - 2633 , - 3610 , - 4027 , - 3884 , - 3181 , - 1918 , - 95 , - 2192 , - 3729 , - 226 , - 643 , - 500 , - 4277 , - 3014 , - 1191 , - 3288 , - 345 , - 1322 , - 1739 , - 1596 , - 893 , - 4110 , - 2287 , - 4384 , - 1441 , - 2418 , - 2835 , - 2692 , - 1989 , - 726 , - 3383 , - 1000 , - 2537 , - 3514 , - 3931 , - 3788 , - 3085 , - 1822 , - 4479 , - 2096 , - 3633 , - 130 , - 547 , - 404 , - 4181 , - 2918 , - 1095 , - 3192 , - 249 , - 1226 , - 1643 , - 1500 , - 797 , - 4014 , - 2191 , - 4288 , - 1345 , - 2322 , - 2739 , - 2596 , - 1893 , - 630 , - 3287 , - 904 , - 2441 , - 3418 , - 3835 , - 3692 , - 2989 , - 1726 , - 4383 , - 2000 , - 3537 , - 34 , - 451 , - 308 , - 4085 , - 2822 , - 999 , - 3096 , - 153 , - 1130 , - 1547 , - 1404 , - 701 , - 3918 , - 2095 , - 4192 , - 1249 , - 2226 , - 2643 , - 2500 , - 1797 , - 534 , - 3191 , - 808 , - 2345 , - 3322 , - 3739 , - 3596 , - 2893 , - 1630 , - 4287 , - 1904 , - 3441 , - 4418 , - 355 , - 212 , - 3989 , - 2726 , - 903 , - 3000 , - 57 , - 1034 , - 1451 , - 1308 , - 605 , - 3822 , - 1999 , - 4096 , - 1153 , - 2130 , - 2547 , - 2404 , - 1701 , - 438 , - 3095 , - 712 , - 2249 , - 3226 , - 3643 , - 3500 , - 2797 , - 1534 , - 4191 , - 1808 , - 3345 , - 4322 , - 259 , - 116 , - 3893 , - 2630 , - 807 , - 2904 , - 4441 , - 938 , - 1355 , - 1212 , - 509 , - 3726 , - 1903 , - 4000 , - 1057 , - 2034 , - 2451 , - 2308 , - 1605 , - 342 , - 2999 , - 616 , - 2153 , - 3130 , - 3547 , - 3404 , - 2701 , - 1438 , - 4095 , - 1712 , - 3249 , - 4226 , - 163 , - 20 , - 3797 , - 2534 , - 711 , - 2808 , - 4345 , - 842 , - 1259 , - 1116 , - 413 , - 3630 , - 1807 , - 3904 , - 961 , - 1938 , - 2355 , - 2212 , - 1509 , - 246 , - 2903 , - 520 , - 2057 , - 3034 , - 3451 , - 3308 , - 2605 , - 1342 , - 3999 , - 1616 , - 3153 , - 4130 , - 67 , - 4404 , - 3701 , - 2438 , - 615 , - 2712 , - 4249 , - 746 , - 1163 , - 1020 , - 317 , - 3534 , - 1711 , - 3808 , - 865 , - 1842 , - 2259 , - 2116 , - 1413 , - 150 , - 2807 , - 424 , - 1961 , - 2938 , - 3355 , - 3212 , - 2509 , - 1246 , - 3903 , - 1520 , - 3057 , - 4034 , - 4451 , - 4308 , - 3605 , - 2342 , - 519 , - 2616 , - 4153 , - 650 , - 1067 , - 924 , - 221 , - 3438 , - 1615 , - 3712 , - 769 , - 1746 , - 2163 , - 2020 , - 1317 , - 54 , - 2711 , - 328 , - 1865 , - 2842 , - 3259 , - 3116 , - 2413 , - 1150 , - 3807 , - 1424 , - 2961 , - 3938 , - 4355 , - 4212 , - 3509 , - 2246 , - 423 , - 2520 , - 4057 , - 554 , - 971 , - 828 , - 125 , - 3342 , - 1519 , - 3616 , - 673 , - 1650 , - 2067 , - 1924 , - 1221 , - 4438 , - 2615 , - 232 , - 1769 , - 2746 , - 3163 , - 3020 , - 2317 , - 1054 , - 3711 , - 1328 , - 2865 , - 3842 , - 4259 , - 4116 , - 3413 , - 2150 , - 327 , - 2424 , - 3961 , - 458 , - 875 , - 732 , - 29 , - 3246 , - 1423 , - 3520 , - 577 , - 1554 , - 1971 , - 1828 , - 1125 , - 4342 , - 2519 , - 136 , - 1673 , - 2650 , - 3067 , - 2924 , - 2221 , - 958 , - 3615 , - 1232 , - 2769 , - 3746 , - 4163 , - 4020 , - 3317 , - 2054 , - 231 , - 2328 , - 3865 , - 362 , - 779 , - 636 , - 4413 , - 3150 , - 1327 , - 3424 , - 481 , - 1458 , - 1875 , - 1732 , - 1029 , - 4246 , - 2423 , - 40 , - 1577 , - 2554 , - 2971 , - 2828 , - 2125 , - 862 , - 3519 , - 1136 , - 2673 , - 3650 , - 4067 , - 3924 , - 3221 , - 1958 , - 135 , - 2232 , - 3769 , - 266 , - 683 , - 540 , - 4317 , - 3054 , - 1231 , - 3328 , - 385 , - 1362 , - 1779 , - 1636 , - 933 , - 4150 , - 2327 , - 4424 , - 1481 , - 2458 , - 2875 , - 2732 , - 2029 , - 766 , - 3423 , - 1040 , - 2577 , - 3554 , - 3971 , - 3828 , - 3125 , - 1862 , - 39 , - 2136 , - 3673 , - 170 , - 587 , - 444 , - 4221 , - 2958 , - 1135 , - 3232 , - 289 , - 1266 , - 1683 , - 1540 , - 837 , - 4054 , - 2231 , - 4328 , - 1385 , - 2362 , - 2779 , - 2636 , - 1933 , - 670 , - 3327 , - 944 , - 2481 , - 3458 , - 3875 , - 3732 , - 3029 , - 1766 , - 4423 , - 2040 , - 3577 , - 74 , - 491 , - 348 , - 4125 , - 2862 , - 1039 , - 3136 , - 193 , - 1170 , - 1587 , - 1444 , - 741 , - 3958 , - 2135 , - 4232 , - 1289 , - 2266 , - 2683 , - 2540 , - 1837 , - 574 , - 3231 , - 848 , - 2385 , - 3362 , - 3779 , - 3636 , - 2933 , - 1670 , - 4327 , - 1944 , - 3481 , - 4458 , - 395 , - 252 , - 4029 , - 2766 , - 943 , - 3040 , - 97 , - 1074 , - 1491 , - 1348 , - 645 , - 3862 , - 2039 , - 4136 , - 1193 , - 2170 , - 2587 , - 2444 , - 1741 , - 478 , - 3135 , - 752 , - 2289 , - 3266 , - 3683 , - 3540 , - 2837 , - 1574 , - 4231 , - 1848 , - 3385 , - 4362 , - 299 , - 156 , - 3933 , - 2670 , - 847 , - 2944 , - 1 , - 978 , - 1395 , - 1252 , - 549 , - 3766 , - 1943 , - 4040 , - 1097 , - 2074 , - 2491 , - 2348 , - 1645 , - 382 , - 3039 , - 656 , - 2193 , - 3170 , - 3587 , - 3444 , - 2741 , - 1478 , - 4135 , - 1752 , - 3289 , - 4266 , - 203 , - 60 , - 3837 , - 2574 , - 751 , - 2848 , - 4385 , - 882 , - 1299 , - 1156 , - 453 , - 3670 , - 1847 , - 3944 , - 1001 , - 1978 , - 2395 , - 2252 , - 1549 , - 286 , - 2943 , - 560 , - 2097 , - 3074 , - 3491 , - 3348 , - 2645 , - 1382 , - 4039 , - 1656 , - 3193 , - 4170 , - 107 , - 4444 , - 3741 , - 2478 , - 655 , - 2752 , - 4289 , - 786 , - 1203 , - 1060 , - 357 , - 3574 , - 1751 , - 3848 , - 905 , - 1882 , - 2299 , - 2156 , - 1453 , - 190 , - 2847 , - 464 , - 2001 , - 2978 , - 3395 , - 3252 , - 2549 , - 1286 , - 3943 , - 1560 , - 3097 , - 4074 , - 11 , - 4348 , - 3645 , - 2382 , - 559 , - 2656 , - 4193 , - 690 , - 1107 , - 964 , - 261 , - 3478 , - 1655 , - 3752 , - 809 , - 1786 , - 2203 , - 2060 , - 1357 , - 94 , - 2751 , - 368 , - 1905 , - 2882 , - 3299 , - 3156 , - 2453 , - 1190 , - 3847 , - 1464 , - 3001 , - 3978 , - 4395 , - 4252 , - 3549 , - 2286 , - 463 , - 2560 , - 4097 , - 594 , - 1011 , - 868 , - 165 , - 3382 , - 1559 , - 3656 , - 713 , - 1690 , - 2107 , - 1964 , - 1261 , - 4478 , - 2655 , - 272 , - 1809 , - 2786 , - 3203 , - 3060 , - 2357 , - 1094 , - 3751 , - 1368 , - 2905 , - 3882 , - 4299 , - 4156 , - 3453 , - 2190 , - 367 , - 2464 , - 4001 , - 498 , - 915 , - 772 , - 69 , - 3286 , - 1463 , - 3560 , - 617 , - 1594 , - 2011 , - 1868 , - 1165 , - 4382 , - 2559 , - 176 , - 1713 , - 2690 , - 3107 , - 2964 , - 2261 , - 998 , - 3655 , - 1272 , - 2809 , - 3786 , - 4203 , - 4060 , - 3357 , - 2094 , - 271 , - 2368 , - 3905 , - 402 , - 819 , - 676 , - 4453 , - 3190 , - 1367 , - 3464 , - 521 , - 1498 , - 1915 , - 1772 , - 1069 , - 4286 , - 2463 , - 80 , - 1617 , - 2594 , - 3011 , - 2868 , - 2165 , - 902 , - 3559 , - 1176 , - 2713 , - 3690 , - 4107 , - 3964 , - 3261 , - 1998 , - 175 , - 2272 , - 3809 , - 306 , - 723 , - 580 , - 4357 , - 3094 , - 1271 , - 3368 , - 425 , - 1402 , - 1819 , - 1676 , - 973 , - 4190 , - 2367 , - 4464 , - 1521 , - 2498 , - 2915 , - 2772 , - 2069 , - 806 , - 3463 , - 1080 , - 2617 , - 3594 , - 4011 , - 3868 , - 3165 , - 1902 , - 79 , - 2176 , - 3713 , - 210 , - 627 , - 484 , - 4261 , - 2998 , - 1175 , - 3272 , - 329 , - 1306 , - 1723 , - 1580 , - 877 , - 4094 , - 2271 , - 4368 , - 1425 , - 2402 , - 2819 , - 2676 , - 1973 , - 710 , - 3367 , - 984 , - 2521 , - 3498 , - 3915 , - 3772 , - 3069 , - 1806 , - 4463 , - 2080 , - 3617 , - 114 , - 531 , - 388 , - 4165 , - 2902 , - 1079 , - 3176 , - 233 , - 1210 , - 1627 , - 1484 , - 781 , - 3998 , - 2175 , - 4272 , - 1329 , - 2306 , - 2723 , - 2580 , - 1877 , - 614 , - 3271 , - 888 , - 2425 , - 3402 , - 3819 , - 3676 , - 2973 , - 1710 , - 4367 , - 1984 , - 3521 , - 18 , - 435 , - 292 , - 4069 , - 2806 , - 983 , - 3080 , - 137 , - 1114 , - 1531 , - 1388 , - 685 , - 3902 , - 2079 , - 4176 , - 1233 , - 2210 , - 2627 , - 2484 , - 1781 , - 518 , - 3175 , - 792 , - 2329 , - 3306 , - 3723 , - 3580 , - 2877 , - 1614 , - 4271 , - 1888 , - 3425 , - 4402 , - 339 , - 196 , - 3973 , - 2710 , - 887 , - 2984 , - 41 , - 1018 , - 1435 , - 1292 , - 589 , - 3806 , - 1983 , - 4080 , - 1137 , - 2114 , - 2531 , - 2388 , - 1685 , - 422 , - 3079 , - 696 , - 2233 , - 3210 , - 3627 , - 3484 , - 2781 , - 1518 , - 4175 , - 1792 , - 3329 , - 4306 , - 243 , - 100 , - 3877 , - 2614 , - 791 , - 2888 , - 4425 , - 922 , - 1339 , - 1196 , - 493 , - 3710 , - 1887 , - 3984 , - 1041 , - 2018 , - 2435 , - 2292 , - 1589 , - 326 , - 2983 , - 600 , - 2137 , - 3114 , - 3531 , - 3388 , - 2685 , - 1422 , - 4079 , - 1696 , - 3233 , - 4210 , - 147 , - 4 , - 3781 , - 2518 , - 695 , - 2792 , - 4329 , - 826 , - 1243 , - 1100 , - 397 , - 3614 , - 1791 , - 3888 , - 945 , - 1922 , - 2339 , - 2196 , - 1493 , - 230 , - 2887 , - 504 , - 2041 , - 3018 , - 3435 , - 3292 , - 2589 , - 1326 , - 3983 , - 1600 , - 3137 , - 4114 , - 51 , - 4388 , - 3685 , - 2422 , - 599 , - 2696 , - 4233 , - 730 , - 1147 , - 1004 , - 301 , - 3518 , - 1695 , - 3792 , - 849 , - 1826 , - 2243 , - 2100 , - 1397 , - 134 , - 2791 , - 408 , - 1945 , - 2922 , - 3339 , - 3196 , - 2493 , - 1230 , - 3887 , - 1504 , - 3041 , - 4018 , - 4435 , - 4292 , - 3589 , - 2326 , - 503 , - 2600 , - 4137 , - 634 , - 1051 , - 908 , - 205 , - 3422 , - 1599 , - 3696 , - 753 , - 1730 , - 2147 , - 2004 , - 1301 , - 38 , - 2695 , - 312 , - 1849 , - 2826 , - 3243 , - 3100 , - 2397 , - 1134 , - 3791 , - 1408 , - 2945 , - 3922 , - 4339 , - 4196 , - 3493 , - 2230 , - 407 , - 2504 , - 4041 , - 538 , - 955 , - 812 , - 109 , - 3326 , - 1503 , - 3600 , - 657 , - 1634 , - 2051 , - 1908 , - 1205 , - 4422 , - 2599 , - 216 , - 1753 , - 2730 , - 3147 , - 3004 , - 2301 , - 1038 , - 3695 , - 1312 , - 2849 , - 3826 , - 4243 , - 4100 , - 3397 , - 2134 , - 311 , - 2408 , - 3945 , - 442 , - 859 , - 716 , - 13 , - 3230 , - 1407 , - 3504 , - 561 , - 1538 , - 1955 , - 1812 , - 1109 , - 4326 , - 2503 , - 120 , - 1657 , - 2634 , - 3051 , - 2908 , - 2205 , - 942 , - 3599 , - 1216 , - 2753 , - 3730 , - 4147 , - 4004 , - 3301 , - 2038 , - 215 , - 2312 , - 3849 , - 346 , - 763 , - 620 , - 4397 , - 3134 , - 1311 , - 3408 , - 465 , - 1442 , - 1859 , - 1716 , - 1013 , - 4230 , - 2407 , - 24 , - 1561 , - 2538 , - 2955 , - 2812 , - 2109 , - 846 , - 3503 , - 1120 , - 2657 , - 3634 , - 4051 , - 3908 , - 3205 , - 1942 , - 119 , - 2216 , - 3753 , - 250 , - 667 , - 524 , - 4301 , - 3038 , - 1215 , - 3312 , - 369 , - 1346 , - 1763 , - 1620 , - 917 , - 4134 , - 2311 , - 4408 , - 1465 , - 2442 , - 2859 , - 2716 , - 2013 , - 750 , - 3407 , - 1024 , - 2561 , - 3538 , - 3955 , - 3812 , - 3109 , - 1846 , - 23 , - 2120 , - 3657 , - 154 , - 571 , - 428 , - 4205 , - 2942 , - 1119 , - 3216 , - 273 , - 1250 , - 1667 , - 1524 , - 821 , - 4038 , - 2215 , - 4312 , - 1369 , - 2346 , - 2763 , - 2620 , - 1917 , - 654 , - 3311 , - 928 , - 2465 , - 3442 , - 3859 , - 3716 , - 3013 , - 1750 , - 4407 , - 2024 , - 3561 , - 58 , - 475 , - 332 , - 4109 , - 2846 , - 1023 , - 3120 , - 177 , - 1154 , - 1571 , - 1428 , - 725 , - 3942 , - 2119 , - 4216 , - 1273 , - 2250 , - 2667 , - 2524 , - 1821 , - 558 , - 3215 , - 832 , - 2369 , - 3346 , - 3763 , - 3620 , - 2917 , - 1654 , - 4311 , - 1928 , - 3465 , - 4442 , - 379 , - 236 , - 4013 , - 2750 , - 927 , - 3024 , - 81 , - 1058 , - 1475 , - 1332 , - 629 , - 3846 , - 2023 , - 4120 , - 1177 , - 2154 , - 2571 , - 2428 , - 1725 , - 462 , - 3119 , - 736 , - 2273 , - 3250 , - 3667 , - 3524 , - 2821 , - 1558 , - 4215 , - 1832 , - 3369 , - 4346 , - 283 , - 140 , - 3917 , - 2654 , - 831 , - 2928 , - 4465 , - 962 , - 1379 , - 1236 , - 533 , - 3750 , - 1927 , - 4024 , - 1081 , - 2058 , - 2475 , - 2332 , - 1629 , - 366 , - 3023 , - 640 , - 2177 , - 3154 , - 3571 , - 3428 , - 2725 , - 1462 , - 4119 , - 1736 , - 3273 , - 4250 , - 187 , - 44 , - 3821 , - 2558 , - 735 , - 2832 , - 4369 , - 866 , - 1283 , - 1140 , - 437 , - 3654 , - 1831 , - 3928 , - 985 , - 1962 , - 2379 , - 2236 , - 1533 , - 270 , - 2927 , - 544 , - 2081 , - 3058 , - 3475 , - 3332 , - 2629 , - 1366 , - 4023 , - 1640 , - 3177 , - 4154 , - 91 , - 4428 , - 3725 , - 2462 , - 639 , - 2736 , - 4273 , - 770 , - 1187 , - 1044 , - 341 , - 3558 , - 1735 , - 3832 , - 889 , - 1866 , - 2283 , - 2140 , - 1437 , - 174 , - 2831 , - 448 , - 1985 , - 2962 , - 3379 , - 3236 , - 2533 , - 1270 , - 3927 , - 1544 , - 3081 , - 4058 , - 4475 , - 4332 , - 3629 , - 2366 , - 543 , - 2640 , - 4177 , - 674 , - 1091 , - 948 , - 245 , - 3462 , - 1639 , - 3736 , - 793 , - 1770 , - 2187 , - 2044 , - 1341 , - 78 , - 2735 , - 352 , - 1889 , - 2866 , - 3283 , - 3140 , - 2437 , - 1174 , - 3831 , - 1448 , - 2985 , - 3962 , - 4379 , - 4236 , - 3533 , - 2270 , - 447 , - 2544 , - 4081 , - 578 , - 995 , - 852 , - 149 , - 3366 , - 1543 , - 3640 , - 697 , - 1674 , - 2091 , - 1948 , - 1245 , - 4462 , - 2639 , - 256 , - 1793 , - 2770 , - 3187 , - 3044 , - 2341 , - 1078 , - 3735 , - 1352 , - 2889 , - 3866 , - 4283 , - 4140 , - 3437 , - 2174 , - 351 , - 2448 , - 3985 , - 482 , - 899 , - 756 , - 53 , - 3270 , - 1447 , - 3544 , - 601 , - 1578 , - 1995 , - 1852 , - 1149 , - 4366 , - 2543 , - 160 , - 1697 , - 2674 , - 3091 , - 2948 , - 2245 , - 982 , - 3639 , - 1256 , - 2793 , - 3770 , - 4187 , - 4044 , - 3341 , - 2078 , - 255 , - 2352 , - 3889 , - 386 , - 803 , - 660 , - 4437 , - 3174 , - 1351 , - 3448 , - 505 , - 1482 , - 1899 , - 1756 , - 1053 , - 4270 , - 2447 , - 64 , - 1601 , - 2578 , - 2995 , - 2852 , - 2149 , - 886 , - 3543 , - 1160 , - 2697 , - 3674 , - 4091 , - 3948 , - 3245 , - 1982 , - 159 , - 2256 , - 3793 , - 290 , - 707 , - 564 , - 4341 , - 3078 , - 1255 , - 3352 , - 409 , - 1386 , - 1803 , - 1660 , - 957 , - 4174 , - 2351 , - 4448 , - 1505 , - 2482 , - 2899 , - 2756 , - 2053 , - 790 , - 3447 , - 1064 , - 2601 , - 3578 , - 3995 , - 3852 , - 3149 , - 1886 , - 63 , - 2160 , - 3697 , - 194 , - 611 , - 468 , - 4245 , - 2982 , - 1159 , - 3256 , - 313 , - 1290 , - 1707 , - 1564 , - 861 , - 4078 , - 2255 , - 4352 , - 1409 , - 2386 , - 2803 , - 2660 , - 1957 , - 694 , - 3351 , - 968 , - 2505 , - 3482 , - 3899 , - 3756 , - 3053 , - 1790 , - 4447 , - 2064 , - 3601 , - 98 , - 515 , - 372 , - 4149 , - 2886 , - 1063 , - 3160 , - 217 , - 1194 , - 1611 , - 1468 , - 765 , - 3982 , - 2159 , - 4256 , - 1313 , - 2290 , - 2707 , - 2564 , - 1861 , - 598 , - 3255 , - 872 , - 2409 , - 3386 , - 3803 , - 3660 , - 2957 , - 1694 , - 4351 , - 1968 , - 3505 , - 2 , - 419 , - 276 , - 4053 , - 2790 , - 967 , - 3064 , - 121 , - 1098 , - 1515 , - 1372 , - 669 , - 3886 , - 2063 , - 4160 , - 1217 , - 2194 , - 2611 , - 2468 , - 1765 , - 502 , - 3159 , - 776 , - 2313 , - 3290 , - 3707 , - 3564 , - 2861 , - 1598 , - 4255 , - 1872 , - 3409 , - 4386 , - 323 , - 180 , - 3957 , - 2694 , - 871 , - 2968 , - 25 , - 1002 , - 1419 , - 1276 , - 573 , - 3790 , - 1967 , - 4064 , - 1121 , - 2098 , - 2515 , - 2372 , - 1669 , - 406 , - 3063 , - 680 , - 2217 , - 3194 , - 3611 , - 3468 , - 2765 , - 1502 , - 4159 , - 1776 , - 3313 , - 4290 , - 227 , - 84 , - 3861 , - 2598 , - 775 , - 2872 , - 4409 , - 906 , - 1323 , - 1180 , - 477 , - 3694 , - 1871 , - 3968 , - 1025 , - 2002 , - 2419 , - 2276 , - 1573 , - 310 , - 2967 , - 584 , - 2121 , - 3098 , - 3515 , - 3372 , - 2669 , - 1406 , - 4063 , - 1680 , - 3217 , - 4194 , - 131 , - 4468 , - 3765 , - 2502 , - 679 , - 2776 , - 4313 , - 810 , - 1227 , - 1084 , - 381 , - 3598 , - 1775 , - 3872 , - 929 , - 1906 , - 2323 , - 2180 , - 1477 , - 214 , - 2871 , - 488 , - 2025 , - 3002 , - 3419 , - 3276 , - 2573 , - 1310 , - 3967 , - 1584 , - 3121 , - 4098 , - 35 , - 4372 , - 3669 , - 2406 , - 583 , - 2680 , - 4217 , - 714 , - 1131 , - 988 , - 285 , - 3502 , - 1679 , - 3776 , - 833 , - 1810 , - 2227 , - 2084 , - 1381 , - 118 , - 2775 , - 392 , - 1929 , - 2906 , - 3323 , - 3180 , - 2477 , - 1214 , - 3871 , - 1488 , - 3025 , - 4002 , - 4419 , - 4276 , - 3573 , - 2310 , - 487 , - 2584 , - 4121 , - 618 , - 1035 , - 892 , - 189 , - 3406 , - 1583 , - 3680 , - 737 , - 1714 , - 2131 , - 1988 , - 1285 , - 22 , - 2679 , - 296 , - 1833 , - 2810 , - 3227 , - 3084 , - 2381 , - 1118 , - 3775 , - 1392 , - 2929 , - 3906 , - 4323 , - 4180 , - 3477 , - 2214 , - 391 , - 2488 , - 4025 , - 522 , - 939 , - 796 , - 93 , - 3310 , - 1487 , - 3584 , - 641 , - 1618 , - 2035 , - 1892 , - 1189 , - 4406 , - 2583 , - 200 , - 1737 , - 2714 , - 3131 , - 2988 , - 2285 , - 1022 , - 3679 , - 1296 , - 2833 , - 3810 , - 4227 , - 4084 , - 3381 , - 2118 , - 295 , - 2392 , - 3929 , - 426 , - 843 , - 700 , - 4477 , - 3214 , - 1391 , - 3488 , - 545 , - 1522 , - 1939 , - 1796 , - 1093 , - 4310 , - 2487 , - 104 , - 1641 , - 2618 , - 3035 , - 2892 , - 2189 , - 926 , - 3583 , - 1200 , - 2737 , - 3714 , - 4131 , - 3988 , - 3285 , - 2022 , - 199 , - 2296 , - 3833 , - 330 , - 747 , - 604 , - 4381 , - 3118 , - 1295 , - 3392 , - 449 , - 1426 , - 1843 , - 1700 , - 997 , - 4214 , - 2391 , - 8 , - 1545 , - 2522 , - 2939 , - 2796 , - 2093 , - 830 , - 3487 , - 1104 , - 2641 , - 3618 , - 4035 , - 3892 , - 3189 , - 1926 , - 103 , - 2200 , - 3737 , - 234 , - 651 , - 508 , - 4285 , - 3022 , - 1199 , - 3296 , - 353 , - 1330 , - 1747 , - 1604 , - 901 , - 4118 , - 2295 , - 4392 , - 1449 , - 2426 , - 2843 , - 2700 , - 1997 , - 734 , - 3391 , - 1008 , - 2545 , - 3522 , - 3939 , - 3796 , - 3093 , - 1830 , - 7 , - 2104 , - 3641 , - 138 , - 555 , - 412 , - 4189 , - 2926 , - 1103 , - 3200 , - 257 , - 1234 , - 1651 , - 1508 , - 805 , - 4022 , - 2199 , - 4296 , - 1353 , - 2330 , - 2747 , - 2604 , - 1901 , - 638 , - 3295 , - 912 , - 2449 , - 3426 , - 3843 , - 3700 , - 2997 , - 1734 , - 4391 , - 2008 , - 3545 , - 42 , - 459 , - 316 , - 4093 , - 2830 , - 1007 , - 3104 , - 161 , - 1138 , - 1555 , - 1412 , - 709 , - 3926 , - 2103 , - 4200 , - 1257 , - 2234 , - 2651 , - 2508 , - 1805 , - 542 , - 3199 , - 816 , - 2353 , - 3330 , - 3747 , - 3604 , - 2901 , - 1638 , - 4295 , - 1912 , - 3449 , - 4426 , - 363 , - 220 , - 3997 , - 2734 , - 911 , - 3008 , - 65 , - 1042 , - 1459 , - 1316 , - 613 , - 3830 , - 2007 , - 4104 , - 1161 , - 2138 , - 2555 , - 2412 , - 1709 , - 446 , - 3103 , - 720 , - 2257 , - 3234 , - 3651 , - 3508 , - 2805 , - 1542 , - 4199 , - 1816 , - 3353 , - 4330 , - 267 , - 124 , - 3901 , - 2638 , - 815 , - 2912 , - 4449 , - 946 , - 1363 , - 1220 , - 517 , - 3734 , - 1911 , - 4008 , - 1065 , - 2042 , - 2459 , - 2316 , - 1613 , - 350 , - 3007 , - 624 , - 2161 , - 3138 , - 3555 , - 3412 , - 2709 , - 1446 , - 4103 , - 1720 , - 3257 , - 4234 , - 171 , - 28 , - 3805 , - 2542 , - 719 , - 2816 , - 4353 , - 850 , - 1267 , - 1124 , - 421 , - 3638 , - 1815 , - 3912 , - 969 , - 1946 , - 2363 , - 2220 , - 1517 , - 254 , - 2911 , - 528 , - 2065 , - 3042 , - 3459 , - 3316 , - 2613 , - 1350 , - 4007 , - 1624 , - 3161 , - 4138 , - 75 , - 4412 , - 3709 , - 2446 , - 623 , - 2720 , - 4257 , - 754 , - 1171 , - 1028 , - 325 , - 3542 , - 1719 , - 3816 , - 873 , - 1850 , - 2267 , - 2124 , - 1421 , - 158 , - 2815 , - 432 , - 1969 , - 2946 , - 3363 , - 3220 , - 2517 , - 1254 , - 3911 , - 1528 , - 3065 , - 4042 , - 4459 , - 4316 , - 3613 , - 2350 , - 527 , - 2624 , - 4161 , - 658 , - 1075 , - 932 , - 229 , - 3446 , - 1623 , - 3720 , - 777 , - 1754 , - 2171 , - 2028 , - 1325 , - 62 , - 2719 , - 336 , - 1873 , - 2850 , - 3267 , - 3124 , - 2421 , - 1158 , - 3815 , - 1432 , - 2969 , - 3946 , - 4363 , - 4220 , - 3517 , - 2254 , - 431 , - 2528 , - 4065 , - 562 , - 979 , - 836 , - 133 , - 3350 , - 1527 , - 3624 , - 681 , - 1658 , - 2075 , - 1932 , - 1229 , - 4446 , - 2623 , - 240 , - 1777 , - 2754 , - 3171 , - 3028 , - 2325 , - 1062 , - 3719 , - 1336 , - 2873 , - 3850 , - 4267 , - 4124 , - 3421 , - 2158 , - 335 , - 2432 , - 3969 , - 466 , - 883 , - 740 , - 37 , - 3254 , - 1431 , - 3528 , - 585 , - 1562 , - 1979 , - 1836 , - 1133 , - 4350 , - 2527 , - 144 , - 1681 , - 2658 , - 3075 , - 2932 , - 2229 , - 966 , - 3623 , - 1240 , - 2777 , - 3754 , - 4171 , - 4028 , - 3325 , - 2062 , - 239 , - 2336 , - 3873 , - 370 , - 787 , - 644 , - 4421 , - 3158 , - 1335 , - 3432 , - 489 , - 1466 , - 1883 , - 1740 , - 1037 , - 4254 , - 2431 , - 48 , - 1585 , - 2562 , - 2979 , - 2836 , - 2133 , - 870 , - 3527 , - 1144 , - 2681 , - 3658 , - 4075 , - 3932 , - 3229 , - 1966 , - 143 , - 2240 , - 3777 , - 274 , - 691 , - 548 , - 4325 , - 3062 , - 1239 , - 3336 , - 393 , - 1370 , - 1787 , - 1644 , - 941 , - 4158 , - 2335 , - 4432 , - 1489 , - 2466 , - 2883 , - 2740 , - 2037 , - 774 , - 3431 , - 1048 , - 2585 , - 3562 , - 3979 , - 3836 , - 3133 , - 1870 , - 47 , - 2144 , - 3681 , - 178 , - 595 , - 452 , - 4229 , - 2966 , - 1143 , - 3240 , - 297 , - 1274 , - 1691 , - 1548 , - 845 , - 4062 , - 2239 , - 4336 , - 1393 , - 2370 , - 2787 , - 2644 , - 1941 , - 678 , - 3335 , - 952 , - 2489 , - 3466 , - 3883 , - 3740 , - 3037 , - 1774 , - 4431 , - 2048 , - 3585 , - 82 , - 499 , - 356 , - 4133 , - 2870 , - 1047 , - 3144 , - 201 , - 1178 , - 1595 , - 1452 , - 749 , - 3966 , - 2143 , - 4240 , - 1297 , - 2274 , - 2691 , - 2548 , - 1845 , - 582 , - 3239 , - 856 , - 2393 , - 3370 , - 3787 , - 3644 , - 2941 , - 1678 , - 4335 , - 1952 , - 3489 , - 4466 , - 403 , - 260 , - 4037 , - 2774 , - 951 , - 3048 , - 105 , - 1082 , - 1499 , - 1356 , - 653 , - 3870 , - 2047 , - 4144 , - 1201 , - 2178 , - 2595 , - 2452 , - 1749 , - 486 , - 3143 , - 760 , - 2297 , - 3274 , - 3691 , - 3548 , - 2845 , - 1582 , - 4239 , - 1856 , - 3393 , - 4370 , - 307 , - 164 , - 3941 , - 2678 , - 855 , - 2952 , - 9 , - 986 , - 1403 , - 1260 , - 557 , - 3774 , - 1951 , - 4048 , - 1105 , - 2082 , - 2499 , - 2356 , - 1653 , - 390 , - 3047 , - 664 , - 2201 , - 3178 , - 3595 , - 3452 , - 2749 , - 1486 , - 4143 , - 1760 , - 3297 , - 4274 , - 211 , - 68 , - 3845 , - 2582 , - 759 , - 2856 , - 4393 , - 890 , - 1307 , - 1164 , - 461 , - 3678 , - 1855 , - 3952 , - 1009 , - 1986 , - 2403 , - 2260 , - 1557 , - 294 , - 2951 , - 568 , - 2105 , - 3082 , - 3499 , - 3356 , - 2653 , - 1390 , - 4047 , - 1664 , - 3201 , - 4178 , - 115 , - 4452 , - 3749 , - 2486 , - 663 , - 2760 , - 4297 , - 794 , - 1211 , - 1068 , - 365 , - 3582 , - 1759 , - 3856 , - 913 , - 1890 , - 2307 , - 2164 , - 1461 , - 198 , - 2855 , - 472 , - 2009 , - 2986 , - 3403 , - 3260 , - 2557 , - 1294 , - 3951 , - 1568 , - 3105 , - 4082 , - 19 , - 4356 , - 3653 , - 2390 , - 567 , - 2664 , - 4201 , - 698 , - 1115 , - 972 , - 269 , - 3486 , - 1663 , - 3760 , - 817 , - 1794 , - 2211 , - 2068 , - 1365 , - 102 , - 2759 , - 376 , - 1913 , - 2890 , - 3307 , - 3164 , - 2461 , - 1198 , - 3855 , - 1472 , - 3009 , - 3986 , - 4403 , - 4260 , - 3557 , - 2294 , - 471 , - 2568 , - 4105 , - 602 , - 1019 , - 876 , - 173 , - 3390 , - 1567 , - 3664 , - 721 , - 1698 , - 2115 , - 1972 , - 1269 , - 6 , - 2663 , - 280 , - 1817 , - 2794 , - 3211 , - 3068 , - 2365 , - 1102 , - 3759 , - 1376 , - 2913 , - 3890 , - 4307 , - 4164 , - 3461 , - 2198 , - 375 , - 2472 , - 4009 , - 506 , - 923 , - 780 , - 77 , - 3294 , - 1471 , - 3568 , - 625 , - 1602 , - 2019 , - 1876 , - 1173 , - 4390 , - 2567 , - 184 , - 1721 , - 2698 , - 3115 , - 2972 , - 2269 , - 1006 , - 3663 , - 1280 , - 2817 , - 3794 , - 4211 , - 4068 , - 3365 , - 2102 , - 279 , - 2376 , - 3913 , - 410 , - 827 , - 684 , - 4461 , - 3198 , - 1375 , - 3472 , - 529 , - 1506 , - 1923 , - 1780 , - 1077 , - 4294 , - 2471 , - 88 , - 1625 , - 2602 , - 3019 , - 2876 , - 2173 , - 910 , - 3567 , - 1184 , - 2721 , - 3698 , - 4115 , - 3972 , - 3269 , - 2006 , - 183 , - 2280 , - 3817 , - 314 , - 731 , - 588 , - 4365 , - 3102 , - 1279 , - 3376 , - 433 , - 1410 , - 1827 , - 1684 , - 981 , - 4198 , - 2375 , - 4472 , - 1529 , - 2506 , - 2923 , - 2780 , - 2077 , - 814 , - 3471 , - 1088 , - 2625 , - 3602 , - 4019 , - 3876 , - 3173 , - 1910 , - 87 , - 2184 , - 3721 , - 218 , - 635 , - 492 , - 4269 , - 3006 , - 1183 , - 3280 , - 337 , - 1314 , - 1731 , - 1588 , - 885 , - 4102 , - 2279 , - 4376 , - 1433 , - 2410 , - 2827 , - 2684 , - 1981 , - 718 , - 3375 , - 992 , - 2529 , - 3506 , - 3923 , - 3780 , - 3077 , - 1814 , - 4471 , - 2088 , - 3625 , - 122 , - 539 , - 396 , - 4173 , - 2910 , - 1087 , - 3184 , - 241 , - 1218 , - 1635 , - 1492 , - 789 , - 4006 , - 2183 , - 4280 , - 1337 , - 2314 , - 2731 , - 2588 , - 1885 , - 622 , - 3279 , - 896 , - 2433 , - 3410 , - 3827 , - 3684 , - 2981 , - 1718 , - 4375 , - 1992 , - 3529 , - 26 , - 443 , - 300 , - 4077 , - 2814 , - 991 , - 3088 , - 145 , - 1122 , - 1539 , - 1396 , - 693 , - 3910 , - 2087 , - 4184 , - 1241 , - 2218 , - 2635 , - 2492 , - 1789 , - 526 , - 3183 , - 800 , - 2337 , - 3314 , - 3731 , - 3588 , - 2885 , - 1622 , - 4279 , - 1896 , - 3433 , - 4410 , - 347 , - 204 , - 3981 , - 2718 , - 895 , - 2992 , - 49 , - 1026 , - 1443 , - 1300 , - 597 , - 3814 , - 1991 , - 4088 , - 1145 , - 2122 , - 2539 , - 2396 , - 1693 , - 430 , - 3087 , - 704 , - 2241 , - 3218 , - 3635 , - 3492 , - 2789 , - 1526 , - 4183 , - 1800 , - 3337 , - 4314 , - 251 , - 108 , - 3885 , - 2622 , - 799 , - 2896 , - 4433 , - 930 , - 1347 , - 1204 , - 501 , - 3718 , - 1895 , - 3992 , - 1049 , - 2026 , - 2443 , - 2300 , - 1597 , - 334 , - 2991 , - 608 , - 2145 , - 3122 , - 3539 , - 3396 , - 2693 , - 1430 , - 4087 , - 1704 , - 3241 , - 4218 , - 155 , - 12 , - 3789 , - 2526 , - 703 , - 2800 , - 4337 , - 834 , - 1251 , - 1108 , - 405 , - 3622 , - 1799 , - 3896 , - 953 , - 1930 , - 2347 , - 2204 , - 1501 , - 238 , - 2895 , - 512 , - 2049 , - 3026 , - 3443 , - 3300 , - 2597 , - 1334 , - 3991 , - 1608 , - 3145 , - 4122 , - 59 , - 4396 , - 3693 , - 2430 , - 607 , - 2704 , - 4241 , - 738 , - 1155 , - 1012 , - 309 , - 3526 , - 1703 , - 3800 , - 857 , - 1834 , - 2251 , - 2108 , - 1405 , - 142 , - 2799 , - 416 , - 1953 , - 2930 , - 3347 , - 3204 , - 2501 , - 1238 , - 3895 , - 1512 , - 3049 , - 4026 , - 4443 , - 4300 , - 3597 , - 2334 , - 511 , - 2608 , - 4145 , - 642 , - 1059 , - 916 , - 213 , - 3430 , - 1607 , - 3704 , - 761 , - 1738 , - 2155 , - 2012 , - 1309 , - 46 , - 2703 , - 320 , - 1857 , - 2834 , - 3251 , - 3108 , - 2405 , - 1142 , - 3799 , - 1416 , - 2953 , - 3930 , - 4347 , - 4204 , - 3501 , - 2238 , - 415 , - 2512 , - 4049 , - 546 , - 963 , - 820 , - 117 , - 3334 , - 1511 , - 3608 , - 665 , - 1642 , - 2059 , - 1916 , - 1213 , - 4430 , - 2607 , - 224 , - 1761 , - 2738 , - 3155 , - 3012 , - 2309 , - 1046 , - 3703 , - 1320 , - 2857 , - 3834 , - 4251 , - 4108 , - 3405 , - 2142 , - 319 , - 2416 , - 3953 , - 450 , - 867 , - 724 , - 21 , - 3238 , - 1415 , - 3512 , - 569 , - 1546 , - 1963 , - 1820 , - 1117 , - 4334 , - 2511 , - 128 , - 1665 , - 2642 , - 3059 , - 2916 , - 2213 , - 950 , - 3607 , - 1224 , - 2761 , - 3738 , - 4155 , - 4012 , - 3309 , - 2046 , - 223 , - 2320 , - 3857 , - 354 , - 771 , - 628 , - 4405 , - 3142 , - 1319 , - 3416 , - 473 , - 1450 , - 1867 , - 1724 , - 1021 , - 4238 , - 2415 , - 32 , - 1569 , - 2546 , - 2963 , - 2820 , - 2117 , - 854 , - 3511 , - 1128 , - 2665 , - 3642 , - 4059 , - 3916 , - 3213 , - 1950 , - 127 , - 2224 , - 3761 , - 258 , - 675 , - 532 , - 4309 , - 3046 , - 1223 , - 3320 , - 377 , - 1354 , - 1771 , - 1628 , - 925 , - 4142 , - 2319 , - 4416 , - 1473 , - 2450 , - 2867 , - 2724 , - 2021 , - 758 , - 3415 , - 1032 , - 2569 , - 3546 , - 3963 , - 3820 , - 3117 , - 1854 , - 31 , - 2128 , - 3665 , - 162 , - 579 , - 436 , - 4213 , - 2950 , - 1127 , - 3224 , - 281 , - 1258 , - 1675 , - 1532 , - 829 , - 4046 , - 2223 , - 4320 , - 1377 , - 2354 , - 2771 , - 2628 , - 1925 , - 662 , - 3319 , - 936 , - 2473 , - 3450 , - 3867 , - 3724 , - 3021 , - 1758 , - 4415 , - 2032 , - 3569 , - 66 , - 483 , - 340 , - 4117 , - 2854 , - 1031 , - 3128 , - 185 , - 1162 , - 1579 , - 1436 , - 733 , - 3950 , - 2127 , - 4224 , - 1281 , - 2258 , - 2675 , - 2532 , - 1829 , - 566 , - 3223 , - 840 , - 2377 , - 3354 , - 3771 , - 3628 , - 2925 , - 1662 , - 4319 , - 1936 , - 3473 , - 4450 , - 387 , - 244 , - 4021 , - 2758 , - 935 , - 3032 , - 89 , - 1066 , - 1483 , - 1340 , - 637 , - 3854 , - 2031 , - 4128 , - 1185 , - 2162 , - 2579 , - 2436 , - 1733 , - 470 , - 3127 , - 744 , - 2281 , - 3258 , - 3675 , - 3532 , - 2829 , - 1566 , - 4223 , - 1840 , - 3377 , - 4354 , - 291 , - 148 , - 3925 , - 2662 , - 839 , - 2936 , - 4473 , - 970 , - 1387 , - 1244 , - 541 , - 3758 , - 1935 , - 4032 , - 1089 , - 2066 , - 2483 , - 2340 , - 1637 , - 374 , - 3031 , - 648 , - 2185 , - 3162 , - 3579 , - 3436 , - 2733 , - 1470 , - 4127 , - 1744 , - 3281 , - 4258 , - 195 , - 52 , - 3829 , - 2566 , - 743 , - 2840 , - 4377 , - 874 , - 1291 , - 1148 , - 445 , - 3662 , - 1839 , - 3936 , - 993 , - 1970 , - 2387 , - 2244 , - 1541 , - 278 , - 2935 , - 552 , - 2089 , - 3066 , - 3483 , - 3340 , - 2637 , - 1374 , - 4031 , - 1648 , - 3185 , - 4162 , - 99 , - 4436 , - 3733 , - 2470 , - 647 , - 2744 , - 4281 , - 778 , - 1195 , - 1052 , - 349 , - 3566 , - 1743 , - 3840 , - 897 , - 1874 , - 2291 , - 2148 , - 1445 , - 182 , - 2839 , - 456 , - 1993 , - 2970 , - 3387 , - 3244 , - 2541 , - 1278 , - 3935 , - 1552 , - 3089 , - 4066 , - 3 , - 4340 , - 3637 , - 2374 , - 551 , - 2648 , - 4185 , - 682 , - 1099 , - 956 , - 253 , - 3470 , - 1647 , - 3744 , - 801 , - 1778 , - 2195 , - 2052 , - 1349 , - 86 , - 2743 , - 360 , - 1897 , - 2874 , - 3291 , - 3148 , - 2445 , - 1182 , - 3839 , - 1456 , - 2993 , - 3970 , - 4387 , - 4244 , - 3541 , - 2278 , - 455 , - 2552 , - 4089 , - 586 , - 1003 , - 860 , - 157 , - 3374 , - 1551 , - 3648 , - 705 , - 1682 , - 2099 , - 1956 , - 1253 , - 4470 , - 2647 , - 264 , - 1801 , - 2778 , - 3195 , - 3052 , - 2349 , - 1086 , - 3743 , - 1360 , - 2897 , - 3874 , - 4291 , - 4148 , - 3445 , - 2182 , - 359 , - 2456 , - 3993 , - 490 , - 907 , - 764 , - 61 , - 3278 , - 1455 , - 3552 , - 609 , - 1586 , - 2003 , - 1860 , - 1157 , - 4374 , - 2551 , - 168 , - 1705 , - 2682 , - 3099 , - 2956 , - 2253 , - 990 , - 3647 , - 1264 , - 2801 , - 3778 , - 4195 , - 4052 , - 3349 , - 2086 , - 263 , - 2360 , - 3897 , - 394 , - 811 , - 668 , - 4445 , - 3182 , - 1359 , - 3456 , - 513 , - 1490 , - 1907 , - 1764 , - 1061 , - 4278 , - 2455 , - 72 , - 1609 , - 2586 , - 3003 , - 2860 , - 2157 , - 894 , - 3551 , - 1168 , - 2705 , - 3682 , - 4099 , - 3956 , - 3253 , - 1990 , - 167 , - 2264 , - 3801 , - 298 , - 715 , - 572 , - 4349 , - 3086 , - 1263 , - 3360 , - 417 , - 1394 , - 1811 , - 1668 , - 965 , - 4182 , - 2359 , - 4456 , - 1513 , - 2490 , - 2907 , - 2764 , - 2061 , - 798 , - 3455 , - 1072 , - 2609 , - 3586 , - 4003 , - 3860 , - 3157 , - 1894 , - 71 , - 2168 , - 3705 , - 202 , - 619 , - 476 , - 4253 , - 2990 , - 1167 , - 3264 , - 321 , - 1298 , - 1715 , - 1572 , - 869 , - 4086 , - 2263 , - 4360 , - 1417 , - 2394 , - 2811 , - 2668 , - 1965 , - 702 , - 3359 , - 976 , - 2513 , - 3490 , - 3907 , - 3764 , - 3061 , - 1798 , - 4455 , - 2072 , - 3609 , - 106 , - 523 , - 380 , - 4157 , - 2894 , - 1071 , - 3168 , - 225 , - 1202 , - 1619 , - 1476 , - 773 , - 3990 , - 2167 , - 4264 , - 1321 , - 2298 , - 2715 , - 2572 , - 1869 , - 606 , - 3263 , - 880 , - 2417 , - 3394 , - 3811 , - 3668 , - 2965 , - 1702 , - 4359 , - 1976 , - 3513 , - 10 , - 427 , - 284 , - 4061 , - 2798 , - 975 , - 3072 , - 129 , - 1106 , - 1523 , - 1380 , - 677 , - 3894 , - 2071 , - 4168 , - 1225 , - 2202 , - 2619 , - 2476 , - 1773 , - 510 , - 3167 , - 784 , - 2321 , - 3298 , - 3715 , - 3572 , - 2869 , - 1606 , - 4263 , - 1880 , - 3417 , - 4394 , - 331 , - 188 , - 3965 , - 2702 , - 879 , - 2976 , - 33 , - 1010 , - 1427 , - 1284 , - 581 , - 3798 , - 1975 , - 4072 , - 1129 , - 2106 , - 2523 , - 2380 , - 1677 , - 414 , - 3071 , - 688 , - 2225 , - 3202 , - 3619 , - 3476 , - 2773 , - 1510 , - 4167 , - 1784 , - 3321 , - 4298 , - 235 , - 92 , - 3869 , - 2606 , - 783 , - 2880 , - 4417 , - 914 , - 1331 , - 1188 , - 485 , - 3702 , - 1879 , - 3976 , - 1033 , - 2010 , - 2427 , - 2284 , - 1581 , - 318 , - 2975 , - 592 , - 2129 , - 3106 , - 3523 , - 3380 , - 2677 , - 1414 , - 4071 , - 1688 , - 3225 , - 4202 , - 139 , - 4476 , - 3773 , - 2510 , - 687 , - 2784 , - 4321 , - 818 , - 1235 , - 1092 , - 389 , - 3606 , - 1783 , - 3880 , - 937 , - 1914 , - 2331 , - 2188 , - 1485 , - 222 , - 2879 , - 496 , - 2033 , - 3010 , - 3427 , - 3284 , - 2581 , - 1318 , - 3975 , - 1592 , - 3129 , - 4106 , - 43 , - 4380 , - 3677 , - 2414 , - 591 , - 2688 , - 4225 , - 722 , - 1139 , - 996 , - 293 , - 3510 , - 1687 , - 3784 , - 841 , - 1818 , - 2235 , - 2092 , - 1389 , - 126 , - 2783 , - 400 , - 1937 , - 2914 , - 3331 , - 3188 , - 2485 , - 1222 , - 3879 , - 1496 , - 3033 , - 4010 , - 4427 , - 4284 , - 3581 , - 2318 , - 495 , - 2592 , - 4129 , - 626 , - 1043 , - 900 , - 197 , - 3414 , - 1591 , - 3688 , - 745 , - 1722 , - 2139 , - 1996 , - 1293 , - 30 , - 2687 , - 304 , - 1841 , - 2818 , - 3235 , - 3092 , - 2389 , - 1126 , - 3783 , - 1400 , - 2937 , - 3914 , - 4331 , - 4188 , - 3485 , - 2222 , - 399 , - 2496 , - 4033 , - 530 , - 947 , - 804 , - 101 , - 3318 , - 1495 , - 3592 , - 649 , - 1626 , - 2043 , - 1900 , - 1197 , - 4414 , - 2591 , - 208 , - 1745 , - 2722 , - 3139 , - 2996 , - 2293 , - 1030 , - 3687 , - 1304 , - 2841 , - 3818 , - 4235 , - 4092 , - 3389 , - 2126 , - 303 , - 2400 , - 3937 , - 434 , - 851 , - 708 , - 5 , - 3222 , - 1399 , - 3496 , - 553 , - 1530 , - 1947 , - 1804 , - 1101 , - 4318 , - 2495 , - 112 , - 1649 , - 2626 , - 3043 , - 2900 , - 2197 , - 934 , - 3591 , - 1208 , - 2745 , - 3722 , - 4139 , - 3996 , - 3293 , - 2030 , - 207 , - 2304 , - 3841 , - 338 , - 755 , - 612 , - 4389 , - 3126 , - 1303 , - 3400 , - 457 , - 1434 , - 1851 , - 1708 , - 1005 , - 4222 , - 2399 , - 16 , - 1553 , - 2530 , - 2947 , - 2804 , - 2101 , - 838 , - 3495 , - 1112 , - 2649 , - 3626 , - 4043 , - 3900 , - 3197 , - 1934 , - 111 , - 2208 , - 3745 , - 242 , - 659 , - 516 , - 4293 , - 3030 , - 1207 , - 3304 , - 361 , - 1338 , - 1755 , - 1612 , - 909 , - 4126 , - 2303 , - 4400 , - 1457 , - 2434 , - 2851 , - 2708 , - 2005 , - 742 , - 3399 , - 1016 , - 2553 , - 3530 , - 3947 , - 3804 , - 3101 , - 1838 , - 15 , - 2112 , - 3649 , - 146 , - 563 , - 420 , - 4197 , - 2934 , - 1111 , - 3208 , - 265 , - 1242 , - 1659 , - 1516 , - 813 , - 4030 , - 2207 , - 4304 , - 1361 , - 2338 , - 2755 , - 2612 , - 1909 , - 646 , - 3303 , - 920 , - 2457 , - 3434 , - 3851 , - 3708 , - 3005 , - 1742 , - 4399 , - 2016 , - 3553 , - 50 , - 467 , - 324 , - 4101 , - 2838 , - 1015 , - 3112 , - 169 , - 1146 , - 1563 , - 1420 , - 717 , - 3934 , - 2111 , - 4208 , - 1265 , - 2242 , - 2659 , - 2516 , - 1813 , - 550 , - 3207 , - 824 , - 2361 , - 3338 , - 3755 , - 3612 , - 2909 , - 1646 , - 4303 , - 1920 , - 3457 , - 4434 , - 371 , - 228 , - 4005 , - 2742 , - 919 , - 3016 , - 73 , - 1050 , - 1467 , - 1324 , - 621 , - 3838 , - 2015 , - 4112 , - 1169 , - 2146 , - 2563 , - 2420 , - 1717 , - 454 , - 3111 , - 728 , - 2265 , - 3242 , - 3659 , - 3516 , - 2813 , - 1550 , - 4207 , - 1824 , - 3361 , - 4338 , - 275 , - 132 , - 3909 , - 2646 , - 823 , - 2920 , - 4457 , - 954 , - 1371 , - 1228 , - 525 , - 3742 , - 1919 , - 4016 , - 1073 , - 2050 , - 2467 , - 2324 , - 1621 , - 358 , - 3015 , - 632 , - 2169 , - 3146 , - 3563 , - 3420 , - 2717 , - 1454 , - 4111 , - 1728 , - 3265 , - 4242 , - 179 , - 36 , - 3813 , - 2550 , - 727 , - 2824 , - 4361 , - 858 , - 1275 , - 1132 , - 429 , - 3646 , - 1823 , - 3920 , - 977 , - 1954 , - 2371 , - 2228 , - 1525 , - 262 , - 2919 , - 536 , - 2073 , - 3050 , - 3467 , - 3324 , - 2621 , - 1358 , - 4015 , - 1632 , - 3169 , - 4146 , - 83 , - 4420 , - 3717 , - 2454 , - 631 , - 2728 , - 4265 , - 762 , - 1179 , - 1036 , - 333 , - 3550 , - 1727 , - 3824 , - 881 , - 1858 , - 2275 , - 2132 , - 1429 , - 166 , - 2823 , - 440 , - 1977 , - 2954 , - 3371 , - 3228 , - 2525 , - 1262 , - 3919 , - 1536 , - 3073 , - 4050 , - 4467 , - 4324 , - 3621 , - 2358 , - 535 , - 2632 , - 4169 , - 666 , - 1083 , - 940 , - 237 , - 3454 , - 1631 , - 3728 , - 785 , - 1762 , - 2179 , - 2036 , - 1333 , - 70 , - 2727 , - 344 , - 1881 , - 2858 , - 3275 , - 3132 , - 2429 , - 1166 , - 3823 , - 1440 , - 2977 , - 3954 , - 4371 , - 4228 , - 3525 , - 2262 , - 439 , - 2536 , - 4073 , - 570 , - 987 , - 844 , - 141 , - 3358 , - 1535 , - 3632 , - 689 , - 1666 , - 2083 , - 1940 , - 1237 , - 4454 , - 2631 , - 248 , - 1785 , - 2762 , - 3179 , - 3036 , - 2333 , - 1070 , - 3727 , - 1344 , - 2881 , - 3858 , - 4275 , - 4132 , - 3429 , - 2166 , - 343 , - 2440 , - 3977 , - 474 , - 891 , - 748 , - 45 , - 3262 , - 1439 , - 3536 , - 593 , - 1570 , - 1987 , - 1844 , - 1141 , - 4358 , - 2535 , - 152 , - 1689 , - 2666 , - 3083 , - 2940 , - 2237 , - 974 , - 3631 , - 1248 , - 2785 , - 3762 , - 4179 , - 4036 , - 3333 , - 2070 , - 247 , - 2344 , - 3881 , - 378 , - 795 , - 652 , - 4429 , - 3166 , - 1343 , - 3440 , - 497 , - 1474 , - 1891 , - 1748 , - 1045 , - 4262 , - 2439 , - 56 , - 1593 , - 2570 , - 2987 , - 2844 , - 2141 , - 878 , - 3535 , - 1152 , - 2689 , - 3666 , - 4083 , - 3940 , - 3237 , - 1974 , - 151 , - 2248 , - 3785 , - 282 , - 699 , - 556 , - 4333 , - 3070 , - 1247 , - 3344 , - 401 , - 1378 , - 1795 , - 1652 , - 949 , - 4166 , - 2343 , - 4440 , - 1497 , - 2474 , - 2891 , - 2748 , - 2045 , - 782 , - 3439 , - 1056 , - 2593 , - 3570 , - 3987 , - 3844 , - 3141 , - 1878 , - 55 , - 2152 , - 3689 , - 186 , - 603 , - 460 , - 4237 , - 2974 , - 1151 , - 3248 , - 305 , - 1282 , - 1699 , - 1556 , - 853 , - 4070 , - 2247 , - 4344 , - 1401 , - 2378 , - 2795 , - 2652 , - 1949 , - 686 , - 3343 , - 960 , - 2497 , - 3474 , - 3891 , - 3748 , - 3045 , - 1782 , - 4439 , - 2056 , - 3593 , - 90 , - 507 , - 364 , - 4141 , - 2878 , - 1055 , - 3152 , - 209 , - 1186 , - 1603 , - 1460 , - 757 , - 3974 , - 2151 , - 4248 , - 1305 , - 2282 , - 2699 , - 2556 , - 1853 , - 590 , - 3247 , - 864 , - 2401 , - 3378 , - 3795 , - 3652 , - 2949 , - 1686 , - 4343 , - 1960 , - 3497 , - 4474 , - 411 , - 268 , - 4045 , - 2782 , - 959 , - 3056 , - 113 , - 1090 , - 1507 , - 1364 , - 661 , - 3878 , - 2055 , - 4152 , - 1209 , - 2186 , - 2603 , - 2460 , - 1757 , - 494 , - 3151 , - 768 , - 2305 , - 3282 , - 3699 , - 3556 , - 2853 , - 1590 , - 4247 , - 1864 , - 3401 , - 4378 , - 315 , - 172 , - 3949 , - 2686 , - 863 , - 2960 , - 17 , - 994 , - 1411 , - 1268 , - 565 , - 3782 , - 1959 , - 4056 , - 1113 , - 2090 , - 2507 , - 2364 , - 1661 , - 398 , - 3055 , - 672 , - 2209 , - 3186 , - 3603 , - 3460 , - 2757 , - 1494 , - 4151 , - 1768 , - 3305 , - 4282 , - 219 , - 76 , - 3853 , - 2590 , - 767 , - 2864 , - 4401 , - 898 , - 1315 , - 1172 , - 469 , - 3686 , - 1863 , - 3960 , - 1017 , - 1994 , - 2411 , - 2268 , - 1565 , - 302 , - 2959 , - 576 , - 2113 , - 3090 , - 3507 , - 3364 , - 2661 , - 1398 , - 4055 , - 1672 , - 3209 , - 4186 , - 123 , - 4460 , - 3757 , - 2494 , - 671 , - 2768 , - 4305 , - 802 , - 1219 , - 1076 , - 373 , - 3590 , - 1767 , - 3864 , - 921 , - 1898 , - 2315 , - 2172 , - 1469 , - 206 , - 2863 , - 480 , - 2017 , - 2994 , - 3411 , - 3268 , - 2565 , - 1302 , - 3959 , - 1576 , - 3113 , - 4090 , - 27 , - 4364 , - 3661 , - 2398 , - 575 , - 2672 , - 4209 , - 706 , - 1123 , - 980 , - 277 , - 3494 , - 1671 , - 3768 , - 825 , - 1802 , - 2219 , - 2076 , - 1373 , - 110 , - 2767 , - 384 , - 1921 , - 2898 , - 3315 , - 3172 , - 2469 , - 1206 , - 3863 , - 1480 , - 3017 , - 3994 , - 4411 , - 4268 , - 3565 , - 2302 , - 479 , - 2576 , - 4113 , - 610 , - 1027 , - 884 , - 181 , - 3398 , - 1575 , - 3672 , - 729 , - 1706 , - 2123 , - 1980 , - 1277 , - 14 , - 2671 , - 288 , - 1825 , - 2802 , - 3219 , - 3076 , - 2373 , - 1110 , - 3767 , - 1384 , - 2921 , - 3898 , - 4315 , - 4172 , - 3469 , - 2206 , - 383 , - 2480 , - 4017 , - 514 , - 931 , - 788 , - 85 , - 3302 , - 1479 , - 3576 , - 633 , - 1610 , - 2027 , - 1884 , - 1181 , - 4398 , - 2575 , - 192 , - 1729 , - 2706 , - 3123 , - 2980 , - 2277 , - 1014 , - 3671 , - 1288 , - 2825 , - 3802 , - 4219 , - 4076 , - 3373 , - 2110 , - 287 , - 2384 , - 3921 , - 418 , - 835 , - 692 , - 4469 , - 3206 , - 1383 , - 3480 , - 537 , - 1514 , - 1931 , - 1788 , - 1085 , - 4302 , - 2479 , - 96 , - 1633 , - 2610 , - 3027 , - 2884 , - 2181 , - 918 , - 3575 , - 1192 , - 2729 , - 3706 , - 4123 , - 3980 , - 3277 , - 2014 , - 191 , - 2288 , - 3825 , - 322 , - 739 , - 596 , - 4373 , - 3110 , - 1287 , - 3384 , - 441 , - 1418 , - 1835 , - 1692 , - 989 , - 4206 , - 2383 , - 0 , - 3799 , - 3906 , - 3729 , - 2132 , - 2523 , - 3766 , - 181 , - 4264 , - 1247 , - 3626 , - 1177 , - 1852 , - 4515 , - 3486 , - 2173 , - 3984 , - 3239 , - 3346 , - 3169 , - 1572 , - 1963 , - 3206 , - 4165 , - 3704 , - 687 , - 3066 , - 617 , - 1292 , - 3955 , - 2926 , - 1613 , - 3424 , - 2679 , - 2786 , - 2609 , - 1012 , - 1403 , - 2646 , - 3605 , - 3144 , - 127 , - 2506 , - 57 , - 732 , - 3395 , - 2366 , - 1053 , - 2864 , - 2119 , - 2226 , - 2049 , - 452 , - 843 , - 2086 , - 3045 , - 2584 , - 4111 , - 1946 , - 4041 , - 172 , - 2835 , - 1806 , - 493 , - 2304 , - 1559 , - 1666 , - 1489 , - 4436 , - 283 , - 1526 , - 2485 , - 2024 , - 3551 , - 1386 , - 3481 , - 4156 , - 2275 , - 1246 , - 4477 , - 1744 , - 999 , - 1106 , - 929 , - 3876 , - 4267 , - 966 , - 1925 , - 1464 , - 2991 , - 826 , - 2921 , - 3596 , - 1715 , - 686 , - 3917 , - 1184 , - 439 , - 546 , - 369 , - 3316 , - 3707 , - 406 , - 1365 , - 904 , - 2431 , - 266 , - 2361 , - 3036 , - 1155 , - 126 , - 3357 , - 624 , - 4423 , - 4530 , - 4353 , - 2756 , - 3147 , - 4390 , - 805 , - 344 , - 1871 , - 4250 , - 1801 , - 2476 , - 595 , - 4110 , - 2797 , - 64 , - 3863 , - 3970 , - 3793 , - 2196 , - 2587 , - 3830 , - 245 , - 4328 , - 1311 , - 3690 , - 1241 , - 1916 , - 35 , - 3550 , - 2237 , - 4048 , - 3303 , - 3410 , - 3233 , - 1636 , - 2027 , - 3270 , - 4229 , - 3768 , - 751 , - 3130 , - 681 , - 1356 , - 4019 , - 2990 , - 1677 , - 3488 , - 2743 , - 2850 , - 2673 , - 1076 , - 1467 , - 2710 , - 3669 , - 3208 , - 191 , - 2570 , - 121 , - 796 , - 3459 , - 2430 , - 1117 , - 2928 , - 2183 , - 2290 , - 2113 , - 516 , - 907 , - 2150 , - 3109 , - 2648 , - 4175 , - 2010 , - 4105 , - 236 , - 2899 , - 1870 , - 557 , - 2368 , - 1623 , - 1730 , - 1553 , - 4500 , - 347 , - 1590 , - 2549 , - 2088 , - 3615 , - 1450 , - 3545 , - 4220 , - 2339 , - 1310 , - 4541 , - 1808 , - 1063 , - 1170 , - 993 , - 3940 , - 4331 , - 1030 , - 1989 , - 1528 , - 3055 , - 890 , - 2985 , - 3660 , - 1779 , - 750 , - 3981 , - 1248 , - 503 , - 610 , - 433 , - 3380 , - 3771 , - 470 , - 1429 , - 968 , - 2495 , - 330 , - 2425 , - 3100 , - 1219 , - 190 , - 3421 , - 688 , - 4487 , - 50 , - 4417 , - 2820 , - 3211 , - 4454 , - 869 , - 408 , - 1935 , - 4314 , - 1865 , - 2540 , - 659 , - 4174 , - 2861 , - 128 , - 3927 , - 4034 , - 3857 , - 2260 , - 2651 , - 3894 , - 309 , - 4392 , - 1375 , - 3754 , - 1305 , - 1980 , - 99 , - 3614 , - 2301 , - 4112 , - 3367 , - 3474 , - 3297 , - 1700 , - 2091 , - 3334 , - 4293 , - 3832 , - 815 , - 3194 , - 745 , - 1420 , - 4083 , - 3054 , - 1741 , - 3552 , - 2807 , - 2914 , - 2737 , - 1140 , - 1531 , - 2774 , - 3733 , - 3272 , - 255 , - 2634 , - 185 , - 860 , - 3523 , - 2494 , - 1181 , - 2992 , - 2247 , - 2354 , - 2177 , - 580 , - 971 , - 2214 , - 3173 , - 2712 , - 4239 , - 2074 , - 4169 , - 300 , - 2963 , - 1934 , - 621 , - 2432 , - 1687 , - 1794 , - 1617 , - 20 , - 411 , - 1654 , - 2613 , - 2152 , - 3679 , - 1514 , - 3609 , - 4284 , - 2403 , - 1374 , - 61 , - 1872 , - 1127 , - 1234 , - 1057 , - 4004 , - 4395 , - 1094 , - 2053 , - 1592 , - 3119 , - 954 , - 3049 , - 3724 , - 1843 , - 814 , - 4045 , - 1312 , - 567 , - 674 , - 497 , - 3444 , - 3835 , - 534 , - 1493 , - 1032 , - 2559 , - 394 , - 2489 , - 3164 , - 1283 , - 254 , - 3485 , - 752 , - 7 , - 114 , - 4481 , - 2884 , - 3275 , - 4518 , - 933 , - 472 , - 1999 , - 4378 , - 1929 , - 2604 , - 723 , - 4238 , - 2925 , - 192 , - 3991 , - 4098 , - 3921 , - 2324 , - 2715 , - 3958 , - 373 , - 4456 , - 1439 , - 3818 , - 1369 , - 2044 , - 163 , - 3678 , - 2365 , - 4176 , - 3431 , - 3538 , - 3361 , - 1764 , - 2155 , - 3398 , - 4357 , - 3896 , - 879 , - 3258 , - 809 , - 1484 , - 4147 , - 3118 , - 1805 , - 3616 , - 2871 , - 2978 , - 2801 , - 1204 , - 1595 , - 2838 , - 3797 , - 3336 , - 319 , - 2698 , - 249 , - 924 , - 3587 , - 2558 , - 1245 , - 3056 , - 2311 , - 2418 , - 2241 , - 644 , - 1035 , - 2278 , - 3237 , - 2776 , - 4303 , - 2138 , - 4233 , - 364 , - 3027 , - 1998 , - 685 , - 2496 , - 1751 , - 1858 , - 1681 , - 84 , - 475 , - 1718 , - 2677 , - 2216 , - 3743 , - 1578 , - 3673 , - 4348 , - 2467 , - 1438 , - 125 , - 1936 , - 1191 , - 1298 , - 1121 , - 4068 , - 4459 , - 1158 , - 2117 , - 1656 , - 3183 , - 1018 , - 3113 , - 3788 , - 1907 , - 878 , - 4109 , - 1376 , - 631 , - 738 , - 561 , - 3508 , - 3899 , - 598 , - 1557 , - 1096 , - 2623 , - 458 , - 2553 , - 3228 , - 1347 , - 318 , - 3549 , - 816 , - 71 , - 178 , - 1 , - 2948 , - 3339 , - 38 , - 997 , - 536 , - 2063 , - 4442 , - 1993 , - 2668 , - 787 , - 4302 , - 2989 , - 256 , - 4055 , - 4162 , - 3985 , - 2388 , - 2779 , - 4022 , - 437 , - 4520 , - 1503 , - 3882 , - 1433 , - 2108 , - 227 , - 3742 , - 2429 , - 4240 , - 3495 , - 3602 , - 3425 , - 1828 , - 2219 , - 3462 , - 4421 , - 3960 , - 943 , - 3322 , - 873 , - 1548 , - 4211 , - 3182 , - 1869 , - 3680 , - 2935 , - 3042 , - 2865 , - 1268 , - 1659 , - 2902 , - 3861 , - 3400 , - 383 , - 2762 , - 313 , - 988 , - 3651 , - 2622 , - 1309 , - 3120 , - 2375 , - 2482 , - 2305 , - 708 , - 1099 , - 2342 , - 3301 , - 2840 , - 4367 , - 2202 , - 4297 , - 428 , - 3091 , - 2062 , - 749 , - 2560 , - 1815 , - 1922 , - 1745 , - 148 , - 539 , - 1782 , - 2741 , - 2280 , - 3807 , - 1642 , - 3737 , - 4412 , - 2531 , - 1502 , - 189 , - 2000 , - 1255 , - 1362 , - 1185 , - 4132 , - 4523 , - 1222 , - 2181 , - 1720 , - 3247 , - 1082 , - 3177 , - 3852 , - 1971 , - 942 , - 4173 , - 1440 , - 695 , - 802 , - 625 , - 3572 , - 3963 , - 662 , - 1621 , - 1160 , - 2687 , - 522 , - 2617 , - 3292 , - 1411 , - 382 , - 3613 , - 880 , - 135 , - 242 , - 65 , - 3012 , - 3403 , - 102 , - 1061 , - 600 , - 2127 , - 4506 , - 2057 , - 2732 , - 851 , - 4366 , - 3053 , - 320 , - 4119 , - 4226 , - 4049 , - 2452 , - 2843 , - 4086 , - 501 , - 40 , - 1567 , - 3946 , - 1497 , - 2172 , - 291 , - 3806 , - 2493 , - 4304 , - 3559 , - 3666 , - 3489 , - 1892 , - 2283 , - 3526 , - 4485 , - 4024 , - 1007 , - 3386 , - 937 , - 1612 , - 4275 , - 3246 , - 1933 , - 3744 , - 2999 , - 3106 , - 2929 , - 1332 , - 1723 , - 2966 , - 3925 , - 3464 , - 447 , - 2826 , - 377 , - 1052 , - 3715 , - 2686 , - 1373 , - 3184 , - 2439 , - 2546 , - 2369 , - 772 , - 1163 , - 2406 , - 3365 , - 2904 , - 4431 , - 2266 , - 4361 , - 492 , - 3155 , - 2126 , - 813 , - 2624 , - 1879 , - 1986 , - 1809 , - 212 , - 603 , - 1846 , - 2805 , - 2344 , - 3871 , - 1706 , - 3801 , - 4476 , - 2595 , - 1566 , - 253 , - 2064 , - 1319 , - 1426 , - 1249 , - 4196 , - 43 , - 1286 , - 2245 , - 1784 , - 3311 , - 1146 , - 3241 , - 3916 , - 2035 , - 1006 , - 4237 , - 1504 , - 759 , - 866 , - 689 , - 3636 , - 4027 , - 726 , - 1685 , - 1224 , - 2751 , - 586 , - 2681 , - 3356 , - 1475 , - 446 , - 3677 , - 944 , - 199 , - 306 , - 129 , - 3076 , - 3467 , - 166 , - 1125 , - 664 , - 2191 , - 26 , - 2121 , - 2796 , - 915 , - 4430 , - 3117 , - 384 , - 4183 , - 4290 , - 4113 , - 2516 , - 2907 , - 4150 , - 565 , - 104 , - 1631 , - 4010 , - 1561 , - 2236 , - 355 , - 3870 , - 2557 , - 4368 , - 3623 , - 3730 , - 3553 , - 1956 , - 2347 , - 3590 , - 5 , - 4088 , - 1071 , - 3450 , - 1001 , - 1676 , - 4339 , - 3310 , - 1997 , - 3808 , - 3063 , - 3170 , - 2993 , - 1396 , - 1787 , - 3030 , - 3989 , - 3528 , - 511 , - 2890 , - 441 , - 1116 , - 3779 , - 2750 , - 1437 , - 3248 , - 2503 , - 2610 , - 2433 , - 836 , - 1227 , - 2470 , - 3429 , - 2968 , - 4495 , - 2330 , - 4425 , - 556 , - 3219 , - 2190 , - 877 , - 2688 , - 1943 , - 2050 , - 1873 , - 276 , - 667 , - 1910 , - 2869 , - 2408 , - 3935 , - 1770 , - 3865 , - 4540 , - 2659 , - 1630 , - 317 , - 2128 , - 1383 , - 1490 , - 1313 , - 4260 , - 107 , - 1350 , - 2309 , - 1848 , - 3375 , - 1210 , - 3305 , - 3980 , - 2099 , - 1070 , - 4301 , - 1568 , - 823 , - 930 , - 753 , - 3700 , - 4091 , - 790 , - 1749 , - 1288 , - 2815 , - 650 , - 2745 , - 3420 , - 1539 , - 510 , - 3741 , - 1008 , - 263 , - 370 , - 193 , - 3140 , - 3531 , - 230 , - 1189 , - 728 , - 2255 , - 90 , - 2185 , - 2860 , - 979 , - 4494 , - 3181 , - 448 , - 4247 , - 4354 , - 4177 , - 2580 , - 2971 , - 4214 , - 629 , - 168 , - 1695 , - 4074 , - 1625 , - 2300 , - 419 , - 3934 , - 2621 , - 4432 , - 3687 , - 3794 , - 3617 , - 2020 , - 2411 , - 3654 , - 69 , - 4152 , - 1135 , - 3514 , - 1065 , - 1740 , - 4403 , - 3374 , - 2061 , - 3872 , - 3127 , - 3234 , - 3057 , - 1460 , - 1851 , - 3094 , - 4053 , - 3592 , - 575 , - 2954 , - 505 , - 1180 , - 3843 , - 2814 , - 1501 , - 3312 , - 2567 , - 2674 , - 2497 , - 900 , - 1291 , - 2534 , - 3493 , - 3032 , - 15 , - 2394 , - 4489 , - 620 , - 3283 , - 2254 , - 941 , - 2752 , - 2007 , - 2114 , - 1937 , - 340 , - 731 , - 1974 , - 2933 , - 2472 , - 3999 , - 1834 , - 3929 , - 60 , - 2723 , - 1694 , - 381 , - 2192 , - 1447 , - 1554 , - 1377 , - 4324 , - 171 , - 1414 , - 2373 , - 1912 , - 3439 , - 1274 , - 3369 , - 4044 , - 2163 , - 1134 , - 4365 , - 1632 , - 887 , - 994 , - 817 , - 3764 , - 4155 , - 854 , - 1813 , - 1352 , - 2879 , - 714 , - 2809 , - 3484 , - 1603 , - 574 , - 3805 , - 1072 , - 327 , - 434 , - 257 , - 3204 , - 3595 , - 294 , - 1253 , - 792 , - 2319 , - 154 , - 2249 , - 2924 , - 1043 , - 14 , - 3245 , - 512 , - 4311 , - 4418 , - 4241 , - 2644 , - 3035 , - 4278 , - 693 , - 232 , - 1759 , - 4138 , - 1689 , - 2364 , - 483 , - 3998 , - 2685 , - 4496 , - 3751 , - 3858 , - 3681 , - 2084 , - 2475 , - 3718 , - 133 , - 4216 , - 1199 , - 3578 , - 1129 , - 1804 , - 4467 , - 3438 , - 2125 , - 3936 , - 3191 , - 3298 , - 3121 , - 1524 , - 1915 , - 3158 , - 4117 , - 3656 , - 639 , - 3018 , - 569 , - 1244 , - 3907 , - 2878 , - 1565 , - 3376 , - 2631 , - 2738 , - 2561 , - 964 , - 1355 , - 2598 , - 3557 , - 3096 , - 79 , - 2458 , - 9 , - 684 , - 3347 , - 2318 , - 1005 , - 2816 , - 2071 , - 2178 , - 2001 , - 404 , - 795 , - 2038 , - 2997 , - 2536 , - 4063 , - 1898 , - 3993 , - 124 , - 2787 , - 1758 , - 445 , - 2256 , - 1511 , - 1618 , - 1441 , - 4388 , - 235 , - 1478 , - 2437 , - 1976 , - 3503 , - 1338 , - 3433 , - 4108 , - 2227 , - 1198 , - 4429 , - 1696 , - 951 , - 1058 , - 881 , - 3828 , - 4219 , - 918 , - 1877 , - 1416 , - 2943 , - 778 , - 2873 , - 3548 , - 1667 , - 638 , - 3869 , - 1136 , - 391 , - 498 , - 321 , - 3268 , - 3659 , - 358 , - 1317 , - 856 , - 2383 , - 218 , - 2313 , - 2988 , - 1107 , - 78 , - 3309 , - 576 , - 4375 , - 4482 , - 4305 , - 2708 , - 3099 , - 4342 , - 757 , - 296 , - 1823 , - 4202 , - 1753 , - 2428 , - 547 , - 4062 , - 2749 , - 16 , - 3815 , - 3922 , - 3745 , - 2148 , - 2539 , - 3782 , - 197 , - 4280 , - 1263 , - 3642 , - 1193 , - 1868 , - 4531 , - 3502 , - 2189 , - 4000 , - 3255 , - 3362 , - 3185 , - 1588 , - 1979 , - 3222 , - 4181 , - 3720 , - 703 , - 3082 , - 633 , - 1308 , - 3971 , - 2942 , - 1629 , - 3440 , - 2695 , - 2802 , - 2625 , - 1028 , - 1419 , - 2662 , - 3621 , - 3160 , - 143 , - 2522 , - 73 , - 748 , - 3411 , - 2382 , - 1069 , - 2880 , - 2135 , - 2242 , - 2065 , - 468 , - 859 , - 2102 , - 3061 , - 2600 , - 4127 , - 1962 , - 4057 , - 188 , - 2851 , - 1822 , - 509 , - 2320 , - 1575 , - 1682 , - 1505 , - 4452 , - 299 , - 1542 , - 2501 , - 2040 , - 3567 , - 1402 , - 3497 , - 4172 , - 2291 , - 1262 , - 4493 , - 1760 , - 1015 , - 1122 , - 945 , - 3892 , - 4283 , - 982 , - 1941 , - 1480 , - 3007 , - 842 , - 2937 , - 3612 , - 1731 , - 702 , - 3933 , - 1200 , - 455 , - 562 , - 385 , - 3332 , - 3723 , - 422 , - 1381 , - 920 , - 2447 , - 282 , - 2377 , - 3052 , - 1171 , - 142 , - 3373 , - 640 , - 4439 , - 2 , - 4369 , - 2772 , - 3163 , - 4406 , - 821 , - 360 , - 1887 , - 4266 , - 1817 , - 2492 , - 611 , - 4126 , - 2813 , - 80 , - 3879 , - 3986 , - 3809 , - 2212 , - 2603 , - 3846 , - 261 , - 4344 , - 1327 , - 3706 , - 1257 , - 1932 , - 51 , - 3566 , - 2253 , - 4064 , - 3319 , - 3426 , - 3249 , - 1652 , - 2043 , - 3286 , - 4245 , - 3784 , - 767 , - 3146 , - 697 , - 1372 , - 4035 , - 3006 , - 1693 , - 3504 , - 2759 , - 2866 , - 2689 , - 1092 , - 1483 , - 2726 , - 3685 , - 3224 , - 207 , - 2586 , - 137 , - 812 , - 3475 , - 2446 , - 1133 , - 2944 , - 2199 , - 2306 , - 2129 , - 532 , - 923 , - 2166 , - 3125 , - 2664 , - 4191 , - 2026 , - 4121 , - 252 , - 2915 , - 1886 , - 573 , - 2384 , - 1639 , - 1746 , - 1569 , - 4516 , - 363 , - 1606 , - 2565 , - 2104 , - 3631 , - 1466 , - 3561 , - 4236 , - 2355 , - 1326 , - 13 , - 1824 , - 1079 , - 1186 , - 1009 , - 3956 , - 4347 , - 1046 , - 2005 , - 1544 , - 3071 , - 906 , - 3001 , - 3676 , - 1795 , - 766 , - 3997 , - 1264 , - 519 , - 626 , - 449 , - 3396 , - 3787 , - 486 , - 1445 , - 984 , - 2511 , - 346 , - 2441 , - 3116 , - 1235 , - 206 , - 3437 , - 704 , - 4503 , - 66 , - 4433 , - 2836 , - 3227 , - 4470 , - 885 , - 424 , - 1951 , - 4330 , - 1881 , - 2556 , - 675 , - 4190 , - 2877 , - 144 , - 3943 , - 4050 , - 3873 , - 2276 , - 2667 , - 3910 , - 325 , - 4408 , - 1391 , - 3770 , - 1321 , - 1996 , - 115 , - 3630 , - 2317 , - 4128 , - 3383 , - 3490 , - 3313 , - 1716 , - 2107 , - 3350 , - 4309 , - 3848 , - 831 , - 3210 , - 761 , - 1436 , - 4099 , - 3070 , - 1757 , - 3568 , - 2823 , - 2930 , - 2753 , - 1156 , - 1547 , - 2790 , - 3749 , - 3288 , - 271 , - 2650 , - 201 , - 876 , - 3539 , - 2510 , - 1197 , - 3008 , - 2263 , - 2370 , - 2193 , - 596 , - 987 , - 2230 , - 3189 , - 2728 , - 4255 , - 2090 , - 4185 , - 316 , - 2979 , - 1950 , - 637 , - 2448 , - 1703 , - 1810 , - 1633 , - 36 , - 427 , - 1670 , - 2629 , - 2168 , - 3695 , - 1530 , - 3625 , - 4300 , - 2419 , - 1390 , - 77 , - 1888 , - 1143 , - 1250 , - 1073 , - 4020 , - 4411 , - 1110 , - 2069 , - 1608 , - 3135 , - 970 , - 3065 , - 3740 , - 1859 , - 830 , - 4061 , - 1328 , - 583 , - 690 , - 513 , - 3460 , - 3851 , - 550 , - 1509 , - 1048 , - 2575 , - 410 , - 2505 , - 3180 , - 1299 , - 270 , - 3501 , - 768 , - 23 , - 130 , - 4497 , - 2900 , - 3291 , - 4534 , - 949 , - 488 , - 2015 , - 4394 , - 1945 , - 2620 , - 739 , - 4254 , - 2941 , - 208 , - 4007 , - 4114 , - 3937 , - 2340 , - 2731 , - 3974 , - 389 , - 4472 , - 1455 , - 3834 , - 1385 , - 2060 , - 179 , - 3694 , - 2381 , - 4192 , - 3447 , - 3554 , - 3377 , - 1780 , - 2171 , - 3414 , - 4373 , - 3912 , - 895 , - 3274 , - 825 , - 1500 , - 4163 , - 3134 , - 1821 , - 3632 , - 2887 , - 2994 , - 2817 , - 1220 , - 1611 , - 2854 , - 3813 , - 3352 , - 335 , - 2714 , - 265 , - 940 , - 3603 , - 2574 , - 1261 , - 3072 , - 2327 , - 2434 , - 2257 , - 660 , - 1051 , - 2294 , - 3253 , - 2792 , - 4319 , - 2154 , - 4249 , - 380 , - 3043 , - 2014 , - 701 , - 2512 , - 1767 , - 1874 , - 1697 , - 100 , - 491 , - 1734 , - 2693 , - 2232 , - 3759 , - 1594 , - 3689 , - 4364 , - 2483 , - 1454 , - 141 , - 1952 , - 1207 , - 1314 , - 1137 , - 4084 , - 4475 , - 1174 , - 2133 , - 1672 , - 3199 , - 1034 , - 3129 , - 3804 , - 1923 , - 894 , - 4125 , - 1392 , - 647 , - 754 , - 577 , - 3524 , - 3915 , - 614 , - 1573 , - 1112 , - 2639 , - 474 , - 2569 , - 3244 , - 1363 , - 334 , - 3565 , - 832 , - 87 , - 194 , - 17 , - 2964 , - 3355 , - 54 , - 1013 , - 552 , - 2079 , - 4458 , - 2009 , - 2684 , - 803 , - 4318 , - 3005 , - 272 , - 4071 , - 4178 , - 4001 , - 2404 , - 2795 , - 4038 , - 453 , - 4536 , - 1519 , - 3898 , - 1449 , - 2124 , - 243 , - 3758 , - 2445 , - 4256 , - 3511 , - 3618 , - 3441 , - 1844 , - 2235 , - 3478 , - 4437 , - 3976 , - 959 , - 3338 , - 889 , - 1564 , - 4227 , - 3198 , - 1885 , - 3696 , - 2951 , - 3058 , - 2881 , - 1284 , - 1675 , - 2918 , - 3877 , - 3416 , - 399 , - 2778 , - 329 , - 1004 , - 3667 , - 2638 , - 1325 , - 3136 , - 2391 , - 2498 , - 2321 , - 724 , - 1115 , - 2358 , - 3317 , - 2856 , - 4383 , - 2218 , - 4313 , - 444 , - 3107 , - 2078 , - 765 , - 2576 , - 1831 , - 1938 , - 1761 , - 164 , - 555 , - 1798 , - 2757 , - 2296 , - 3823 , - 1658 , - 3753 , - 4428 , - 2547 , - 1518 , - 205 , - 2016 , - 1271 , - 1378 , - 1201 , - 4148 , - 4539 , - 1238 , - 2197 , - 1736 , - 3263 , - 1098 , - 3193 , - 3868 , - 1987 , - 958 , - 4189 , - 1456 , - 711 , - 818 , - 641 , - 3588 , - 3979 , - 678 , - 1637 , - 1176 , - 2703 , - 538 , - 2633 , - 3308 , - 1427 , - 398 , - 3629 , - 896 , - 151 , - 258 , - 81 , - 3028 , - 3419 , - 118 , - 1077 , - 616 , - 2143 , - 4522 , - 2073 , - 2748 , - 867 , - 4382 , - 3069 , - 336 , - 4135 , - 4242 , - 4065 , - 2468 , - 2859 , - 4102 , - 517 , - 56 , - 1583 , - 3962 , - 1513 , - 2188 , - 307 , - 3822 , - 2509 , - 4320 , - 3575 , - 3682 , - 3505 , - 1908 , - 2299 , - 3542 , - 4501 , - 4040 , - 1023 , - 3402 , - 953 , - 1628 , - 4291 , - 3262 , - 1949 , - 3760 , - 3015 , - 3122 , - 2945 , - 1348 , - 1739 , - 2982 , - 3941 , - 3480 , - 463 , - 2842 , - 393 , - 1068 , - 3731 , - 2702 , - 1389 , - 3200 , - 2455 , - 2562 , - 2385 , - 788 , - 1179 , - 2422 , - 3381 , - 2920 , - 4447 , - 2282 , - 4377 , - 508 , - 3171 , - 2142 , - 829 , - 2640 , - 1895 , - 2002 , - 1825 , - 228 , - 619 , - 1862 , - 2821 , - 2360 , - 3887 , - 1722 , - 3817 , - 4492 , - 2611 , - 1582 , - 269 , - 2080 , - 1335 , - 1442 , - 1265 , - 4212 , - 59 , - 1302 , - 2261 , - 1800 , - 3327 , - 1162 , - 3257 , - 3932 , - 2051 , - 1022 , - 4253 , - 1520 , - 775 , - 882 , - 705 , - 3652 , - 4043 , - 742 , - 1701 , - 1240 , - 2767 , - 602 , - 2697 , - 3372 , - 1491 , - 462 , - 3693 , - 960 , - 215 , - 322 , - 145 , - 3092 , - 3483 , - 182 , - 1141 , - 680 , - 2207 , - 42 , - 2137 , - 2812 , - 931 , - 4446 , - 3133 , - 400 , - 4199 , - 4306 , - 4129 , - 2532 , - 2923 , - 4166 , - 581 , - 120 , - 1647 , - 4026 , - 1577 , - 2252 , - 371 , - 3886 , - 2573 , - 4384 , - 3639 , - 3746 , - 3569 , - 1972 , - 2363 , - 3606 , - 21 , - 4104 , - 1087 , - 3466 , - 1017 , - 1692 , - 4355 , - 3326 , - 2013 , - 3824 , - 3079 , - 3186 , - 3009 , - 1412 , - 1803 , - 3046 , - 4005 , - 3544 , - 527 , - 2906 , - 457 , - 1132 , - 3795 , - 2766 , - 1453 , - 3264 , - 2519 , - 2626 , - 2449 , - 852 , - 1243 , - 2486 , - 3445 , - 2984 , - 4511 , - 2346 , - 4441 , - 572 , - 3235 , - 2206 , - 893 , - 2704 , - 1959 , - 2066 , - 1889 , - 292 , - 683 , - 1926 , - 2885 , - 2424 , - 3951 , - 1786 , - 3881 , - 12 , - 2675 , - 1646 , - 333 , - 2144 , - 1399 , - 1506 , - 1329 , - 4276 , - 123 , - 1366 , - 2325 , - 1864 , - 3391 , - 1226 , - 3321 , - 3996 , - 2115 , - 1086 , - 4317 , - 1584 , - 839 , - 946 , - 769 , - 3716 , - 4107 , - 806 , - 1765 , - 1304 , - 2831 , - 666 , - 2761 , - 3436 , - 1555 , - 526 , - 3757 , - 1024 , - 279 , - 386 , - 209 , - 3156 , - 3547 , - 246 , - 1205 , - 744 , - 2271 , - 106 , - 2201 , - 2876 , - 995 , - 4510 , - 3197 , - 464 , - 4263 , - 4370 , - 4193 , - 2596 , - 2987 , - 4230 , - 645 , - 184 , - 1711 , - 4090 , - 1641 , - 2316 , - 435 , - 3950 , - 2637 , - 4448 , - 3703 , - 3810 , - 3633 , - 2036 , - 2427 , - 3670 , - 85 , - 4168 , - 1151 , - 3530 , - 1081 , - 1756 , - 4419 , - 3390 , - 2077 , - 3888 , - 3143 , - 3250 , - 3073 , - 1476 , - 1867 , - 3110 , - 4069 , - 3608 , - 591 , - 2970 , - 521 , - 1196 , - 3859 , - 2830 , - 1517 , - 3328 , - 2583 , - 2690 , - 2513 , - 916 , - 1307 , - 2550 , - 3509 , - 3048 , - 31 , - 2410 , - 4505 , - 636 , - 3299 , - 2270 , - 957 , - 2768 , - 2023 , - 2130 , - 1953 , - 356 , - 747 , - 1990 , - 2949 , - 2488 , - 4015 , - 1850 , - 3945 , - 76 , - 2739 , - 1710 , - 397 , - 2208 , - 1463 , - 1570 , - 1393 , - 4340 , - 187 , - 1430 , - 2389 , - 1928 , - 3455 , - 1290 , - 3385 , - 4060 , - 2179 , - 1150 , - 4381 , - 1648 , - 903 , - 1010 , - 833 , - 3780 , - 4171 , - 870 , - 1829 , - 1368 , - 2895 , - 730 , - 2825 , - 3500 , - 1619 , - 590 , - 3821 , - 1088 , - 343 , - 450 , - 273 , - 3220 , - 3611 , - 310 , - 1269 , - 808 , - 2335 , - 170 , - 2265 , - 2940 , - 1059 , - 30 , - 3261 , - 528 , - 4327 , - 4434 , - 4257 , - 2660 , - 3051 , - 4294 , - 709 , - 248 , - 1775 , - 4154 , - 1705 , - 2380 , - 499 , - 4014 , - 2701 , - 4512 , - 3767 , - 3874 , - 3697 , - 2100 , - 2491 , - 3734 , - 149 , - 4232 , - 1215 , - 3594 , - 1145 , - 1820 , - 4483 , - 3454 , - 2141 , - 3952 , - 3207 , - 3314 , - 3137 , - 1540 , - 1931 , - 3174 , - 4133 , - 3672 , - 655 , - 3034 , - 585 , - 1260 , - 3923 , - 2894 , - 1581 , - 3392 , - 2647 , - 2754 , - 2577 , - 980 , - 1371 , - 2614 , - 3573 , - 3112 , - 95 , - 2474 , - 25 , - 700 , - 3363 , - 2334 , - 1021 , - 2832 , - 2087 , - 2194 , - 2017 , - 420 , - 811 , - 2054 , - 3013 , - 2552 , - 4079 , - 1914 , - 4009 , - 140 , - 2803 , - 1774 , - 461 , - 2272 , - 1527 , - 1634 , - 1457 , - 4404 , - 251 , - 1494 , - 2453 , - 1992 , - 3519 , - 1354 , - 3449 , - 4124 , - 2243 , - 1214 , - 4445 , - 1712 , - 967 , - 1074 , - 897 , - 3844 , - 4235 , - 934 , - 1893 , - 1432 , - 2959 , - 794 , - 2889 , - 3564 , - 1683 , - 654 , - 3885 , - 1152 , - 407 , - 514 , - 337 , - 3284 , - 3675 , - 374 , - 1333 , - 872 , - 2399 , - 234 , - 2329 , - 3004 , - 1123 , - 94 , - 3325 , - 592 , - 4391 , - 4498 , - 4321 , - 2724 , - 3115 , - 4358 , - 773 , - 312 , - 1839 , - 4218 , - 1769 , - 2444 , - 563 , - 4078 , - 2765 , - 32 , - 3831 , - 3938 , - 3761 , - 2164 , - 2555 , - 3798 , - 213 , - 4296 , - 1279 , - 3658 , - 1209 , - 1884 , - 3 , - 3518 , - 2205 , - 4016 , - 3271 , - 3378 , - 3201 , - 1604 , - 1995 , - 3238 , - 4197 , - 3736 , - 719 , - 3098 , - 649 , - 1324 , - 3987 , - 2958 , - 1645 , - 3456 , - 2711 , - 2818 , - 2641 , - 1044 , - 1435 , - 2678 , - 3637 , - 3176 , - 159 , - 2538 , - 89 , - 764 , - 3427 , - 2398 , - 1085 , - 2896 , - 2151 , - 2258 , - 2081 , - 484 , - 875 , - 2118 , - 3077 , - 2616 , - 4143 , - 1978 , - 4073 , - 204 , - 2867 , - 1838 , - 525 , - 2336 , - 1591 , - 1698 , - 1521 , - 4468 , - 315 , - 1558 , - 2517 , - 2056 , - 3583 , - 1418 , - 3513 , - 4188 , - 2307 , - 1278 , - 4509 , - 1776 , - 1031 , - 1138 , - 961 , - 3908 , - 4299 , - 998 , - 1957 , - 1496 , - 3023 , - 858 , - 2953 , - 3628 , - 1747 , - 718 , - 3949 , - 1216 , - 471 , - 578 , - 401 , - 3348 , - 3739 , - 438 , - 1397 , - 936 , - 2463 , - 298 , - 2393 , - 3068 , - 1187 , - 158 , - 3389 , - 656 , - 4455 , - 18 , - 4385 , - 2788 , - 3179 , - 4422 , - 837 , - 376 , - 1903 , - 4282 , - 1833 , - 2508 , - 627 , - 4142 , - 2829 , - 96 , - 3895 , - 4002 , - 3825 , - 2228 , - 2619 , - 3862 , - 277 , - 4360 , - 1343 , - 3722 , - 1273 , - 1948 , - 67 , - 3582 , - 2269 , - 4080 , - 3335 , - 3442 , - 3265 , - 1668 , - 2059 , - 3302 , - 4261 , - 3800 , - 783 , - 3162 , - 713 , - 1388 , - 4051 , - 3022 , - 1709 , - 3520 , - 2775 , - 2882 , - 2705 , - 1108 , - 1499 , - 2742 , - 3701 , - 3240 , - 223 , - 2602 , - 153 , - 828 , - 3491 , - 2462 , - 1149 , - 2960 , - 2215 , - 2322 , - 2145 , - 548 , - 939 , - 2182 , - 3141 , - 2680 , - 4207 , - 2042 , - 4137 , - 268 , - 2931 , - 1902 , - 589 , - 2400 , - 1655 , - 1762 , - 1585 , - 4532 , - 379 , - 1622 , - 2581 , - 2120 , - 3647 , - 1482 , - 3577 , - 4252 , - 2371 , - 1342 , - 29 , - 1840 , - 1095 , - 1202 , - 1025 , - 3972 , - 4363 , - 1062 , - 2021 , - 1560 , - 3087 , - 922 , - 3017 , - 3692 , - 1811 , - 782 , - 4013 , - 1280 , - 535 , - 642 , - 465 , - 3412 , - 3803 , - 502 , - 1461 , - 1000 , - 2527 , - 362 , - 2457 , - 3132 , - 1251 , - 222 , - 3453 , - 720 , - 4519 , - 82 , - 4449 , - 2852 , - 3243 , - 4486 , - 901 , - 440 , - 1967 , - 4346 , - 1897 , - 2572 , - 691 , - 4206 , - 2893 , - 160 , - 3959 , - 4066 , - 3889 , - 2292 , - 2683 , - 3926 , - 341 , - 4424 , - 1407 , - 3786 , - 1337 , - 2012 , - 131 , - 3646 , - 2333 , - 4144 , - 3399 , - 3506 , - 3329 , - 1732 , - 2123 , - 3366 , - 4325 , - 3864 , - 847 , - 3226 , - 777 , - 1452 , - 4115 , - 3086 , - 1773 , - 3584 , - 2839 , - 2946 , - 2769 , - 1172 , - 1563 , - 2806 , - 3765 , - 3304 , - 287 , - 2666 , - 217 , - 892 , - 3555 , - 2526 , - 1213 , - 3024 , - 2279 , - 2386 , - 2209 , - 612 , - 1003 , - 2246 , - 3205 , - 2744 , - 4271 , - 2106 , - 4201 , - 332 , - 2995 , - 1966 , - 653 , - 2464 , - 1719 , - 1826 , - 1649 , - 52 , - 443 , - 1686 , - 2645 , - 2184 , - 3711 , - 1546 , - 3641 , - 4316 , - 2435 , - 1406 , - 93 , - 1904 , - 1159 , - 1266 , - 1089 , - 4036 , - 4427 , - 1126 , - 2085 , - 1624 , - 3151 , - 986 , - 3081 , - 3756 , - 1875 , - 846 , - 4077 , - 1344 , - 599 , - 706 , - 529 , - 3476 , - 3867 , - 566 , - 1525 , - 1064 , - 2591 , - 426 , - 2521 , - 3196 , - 1315 , - 286 , - 3517 , - 784 , - 39 , - 146 , - 4513 , - 2916 , - 3307 , - 6 , - 965 , - 504 , - 2031 , - 4410 , - 1961 , - 2636 , - 755 , - 4270 , - 2957 , - 224 , - 4023 , - 4130 , - 3953 , - 2356 , - 2747 , - 3990 , - 405 , - 4488 , - 1471 , - 3850 , - 1401 , - 2076 , - 195 , - 3710 , - 2397 , - 4208 , - 3463 , - 3570 , - 3393 , - 1796 , - 2187 , - 3430 , - 4389 , - 3928 , - 911 , - 3290 , - 841 , - 1516 , - 4179 , - 3150 , - 1837 , - 3648 , - 2903 , - 3010 , - 2833 , - 1236 , - 1627 , - 2870 , - 3829 , - 3368 , - 351 , - 2730 , - 281 , - 956 , - 3619 , - 2590 , - 1277 , - 3088 , - 2343 , - 2450 , - 2273 , - 676 , - 1067 , - 2310 , - 3269 , - 2808 , - 4335 , - 2170 , - 4265 , - 396 , - 3059 , - 2030 , - 717 , - 2528 , - 1783 , - 1890 , - 1713 , - 116 , - 507 , - 1750 , - 2709 , - 2248 , - 3775 , - 1610 , - 3705 , - 4380 , - 2499 , - 1470 , - 157 , - 1968 , - 1223 , - 1330 , - 1153 , - 4100 , - 4491 , - 1190 , - 2149 , - 1688 , - 3215 , - 1050 , - 3145 , - 3820 , - 1939 , - 910 , - 4141 , - 1408 , - 663 , - 770 , - 593 , - 3540 , - 3931 , - 630 , - 1589 , - 1128 , - 2655 , - 490 , - 2585 , - 3260 , - 1379 , - 350 , - 3581 , - 848 , - 103 , - 210 , - 33 , - 2980 , - 3371 , - 70 , - 1029 , - 568 , - 2095 , - 4474 , - 2025 , - 2700 , - 819 , - 4334 , - 3021 , - 288 , - 4087 , - 4194 , - 4017 , - 2420 , - 2811 , - 4054 , - 469 , - 8 , - 1535 , - 3914 , - 1465 , - 2140 , - 259 , - 3774 , - 2461 , - 4272 , - 3527 , - 3634 , - 3457 , - 1860 , - 2251 , - 3494 , - 4453 , - 3992 , - 975 , - 3354 , - 905 , - 1580 , - 4243 , - 3214 , - 1901 , - 3712 , - 2967 , - 3074 , - 2897 , - 1300 , - 1691 , - 2934 , - 3893 , - 3432 , - 415 , - 2794 , - 345 , - 1020 , - 3683 , - 2654 , - 1341 , - 3152 , - 2407 , - 2514 , - 2337 , - 740 , - 1131 , - 2374 , - 3333 , - 2872 , - 4399 , - 2234 , - 4329 , - 460 , - 3123 , - 2094 , - 781 , - 2592 , - 1847 , - 1954 , - 1777 , - 180 , - 571 , - 1814 , - 2773 , - 2312 , - 3839 , - 1674 , - 3769 , - 4444 , - 2563 , - 1534 , - 221 , - 2032 , - 1287 , - 1394 , - 1217 , - 4164 , - 11 , - 1254 , - 2213 , - 1752 , - 3279 , - 1114 , - 3209 , - 3884 , - 2003 , - 974 , - 4205 , - 1472 , - 727 , - 834 , - 657 , - 3604 , - 3995 , - 694 , - 1653 , - 1192 , - 2719 , - 554 , - 2649 , - 3324 , - 1443 , - 414 , - 3645 , - 912 , - 167 , - 274 , - 97 , - 3044 , - 3435 , - 134 , - 1093 , - 632 , - 2159 , - 4538 , - 2089 , - 2764 , - 883 , - 4398 , - 3085 , - 352 , - 4151 , - 4258 , - 4081 , - 2484 , - 2875 , - 4118 , - 533 , - 72 , - 1599 , - 3978 , - 1529 , - 2204 , - 323 , - 3838 , - 2525 , - 4336 , - 3591 , - 3698 , - 3521 , - 1924 , - 2315 , - 3558 , - 4517 , - 4056 , - 1039 , - 3418 , - 969 , - 1644 , - 4307 , - 3278 , - 1965 , - 3776 , - 3031 , - 3138 , - 2961 , - 1364 , - 1755 , - 2998 , - 3957 , - 3496 , - 479 , - 2858 , - 409 , - 1084 , - 3747 , - 2718 , - 1405 , - 3216 , - 2471 , - 2578 , - 2401 , - 804 , - 1195 , - 2438 , - 3397 , - 2936 , - 4463 , - 2298 , - 4393 , - 524 , - 3187 , - 2158 , - 845 , - 2656 , - 1911 , - 2018 , - 1841 , - 244 , - 635 , - 1878 , - 2837 , - 2376 , - 3903 , - 1738 , - 3833 , - 4508 , - 2627 , - 1598 , - 285 , - 2096 , - 1351 , - 1458 , - 1281 , - 4228 , - 75 , - 1318 , - 2277 , - 1816 , - 3343 , - 1178 , - 3273 , - 3948 , - 2067 , - 1038 , - 4269 , - 1536 , - 791 , - 898 , - 721 , - 3668 , - 4059 , - 758 , - 1717 , - 1256 , - 2783 , - 618 , - 2713 , - 3388 , - 1507 , - 478 , - 3709 , - 976 , - 231 , - 338 , - 161 , - 3108 , - 3499 , - 198 , - 1157 , - 696 , - 2223 , - 58 , - 2153 , - 2828 , - 947 , - 4462 , - 3149 , - 416 , - 4215 , - 4322 , - 4145 , - 2548 , - 2939 , - 4182 , - 597 , - 136 , - 1663 , - 4042 , - 1593 , - 2268 , - 387 , - 3902 , - 2589 , - 4400 , - 3655 , - 3762 , - 3585 , - 1988 , - 2379 , - 3622 , - 37 , - 4120 , - 1103 , - 3482 , - 1033 , - 1708 , - 4371 , - 3342 , - 2029 , - 3840 , - 3095 , - 3202 , - 3025 , - 1428 , - 1819 , - 3062 , - 4021 , - 3560 , - 543 , - 2922 , - 473 , - 1148 , - 3811 , - 2782 , - 1469 , - 3280 , - 2535 , - 2642 , - 2465 , - 868 , - 1259 , - 2502 , - 3461 , - 3000 , - 4527 , - 2362 , - 4457 , - 588 , - 3251 , - 2222 , - 909 , - 2720 , - 1975 , - 2082 , - 1905 , - 308 , - 699 , - 1942 , - 2901 , - 2440 , - 3967 , - 1802 , - 3897 , - 28 , - 2691 , - 1662 , - 349 , - 2160 , - 1415 , - 1522 , - 1345 , - 4292 , - 139 , - 1382 , - 2341 , - 1880 , - 3407 , - 1242 , - 3337 , - 4012 , - 2131 , - 1102 , - 4333 , - 1600 , - 855 , - 962 , - 785 , - 3732 , - 4123 , - 822 , - 1781 , - 1320 , - 2847 , - 682 , - 2777 , - 3452 , - 1571 , - 542 , - 3773 , - 1040 , - 295 , - 402 , - 225 , - 3172 , - 3563 , - 262 , - 1221 , - 760 , - 2287 , - 122 , - 2217 , - 2892 , - 1011 , - 4526 , - 3213 , - 480 , - 4279 , - 4386 , - 4209 , - 2612 , - 3003 , - 4246 , - 661 , - 200 , - 1727 , - 4106 , - 1657 , - 2332 , - 451 , - 3966 , - 2653 , - 4464 , - 3719 , - 3826 , - 3649 , - 2052 , - 2443 , - 3686 , - 101 , - 4184 , - 1167 , - 3546 , - 1097 , - 1772 , - 4435 , - 3406 , - 2093 , - 3904 , - 3159 , - 3266 , - 3089 , - 1492 , - 1883 , - 3126 , - 4085 , - 3624 , - 607 , - 2986 , - 537 , - 1212 , - 3875 , - 2846 , - 1533 , - 3344 , - 2599 , - 2706 , - 2529 , - 932 , - 1323 , - 2566 , - 3525 , - 3064 , - 47 , - 2426 , - 4521 , - 652 , - 3315 , - 2286 , - 973 , - 2784 , - 2039 , - 2146 , - 1969 , - 372 , - 763 , - 2006 , - 2965 , - 2504 , - 4031 , - 1866 , - 3961 , - 92 , - 2755 , - 1726 , - 413 , - 2224 , - 1479 , - 1586 , - 1409 , - 4356 , - 203 , - 1446 , - 2405 , - 1944 , - 3471 , - 1306 , - 3401 , - 4076 , - 2195 , - 1166 , - 4397 , - 1664 , - 919 , - 1026 , - 849 , - 3796 , - 4187 , - 886 , - 1845 , - 1384 , - 2911 , - 746 , - 2841 , - 3516 , - 1635 , - 606 , - 3837 , - 1104 , - 359 , - 466 , - 289 , - 3236 , - 3627 , - 326 , - 1285 , - 824 , - 2351 , - 186 , - 2281 , - 2956 , - 1075 , - 46 , - 3277 , - 544 , - 4343 , - 4450 , - 4273 , - 2676 , - 3067 , - 4310 , - 725 , - 264 , - 1791 , - 4170 , - 1721 , - 2396 , - 515 , - 4030 , - 2717 , - 4528 , - 3783 , - 3890 , - 3713 , - 2116 , - 2507 , - 3750 , - 165 , - 4248 , - 1231 , - 3610 , - 1161 , - 1836 , - 4499 , - 3470 , - 2157 , - 3968 , - 3223 , - 3330 , - 3153 , - 1556 , - 1947 , - 3190 , - 4149 , - 3688 , - 671 , - 3050 , - 601 , - 1276 , - 3939 , - 2910 , - 1597 , - 3408 , - 2663 , - 2770 , - 2593 , - 996 , - 1387 , - 2630 , - 3589 , - 3128 , - 111 , - 2490 , - 41 , - 716 , - 3379 , - 2350 , - 1037 , - 2848 , - 2103 , - 2210 , - 2033 , - 436 , - 827 , - 2070 , - 3029 , - 2568 , - 4095 , - 1930 , - 4025 , - 156 , - 2819 , - 1790 , - 477 , - 2288 , - 1543 , - 1650 , - 1473 , - 4420 , - 267 , - 1510 , - 2469 , - 2008 , - 3535 , - 1370 , - 3465 , - 4140 , - 2259 , - 1230 , - 4461 , - 1728 , - 983 , - 1090 , - 913 , - 3860 , - 4251 , - 950 , - 1909 , - 1448 , - 2975 , - 810 , - 2905 , - 3580 , - 1699 , - 670 , - 3901 , - 1168 , - 423 , - 530 , - 353 , - 3300 , - 3691 , - 390 , - 1349 , - 888 , - 2415 , - 250 , - 2345 , - 3020 , - 1139 , - 110 , - 3341 , - 608 , - 4407 , - 4514 , - 4337 , - 2740 , - 3131 , - 4374 , - 789 , - 328 , - 1855 , - 4234 , - 1785 , - 2460 , - 579 , - 4094 , - 2781 , - 48 , - 3847 , - 3954 , - 3777 , - 2180 , - 2571 , - 3814 , - 229 , - 4312 , - 1295 , - 3674 , - 1225 , - 1900 , - 19 , - 3534 , - 2221 , - 4032 , - 3287 , - 3394 , - 3217 , - 1620 , - 2011 , - 3254 , - 4213 , - 3752 , - 735 , - 3114 , - 665 , - 1340 , - 4003 , - 2974 , - 1661 , - 3472 , - 2727 , - 2834 , - 2657 , - 1060 , - 1451 , - 2694 , - 3653 , - 3192 , - 175 , - 2554 , - 105 , - 780 , - 3443 , - 2414 , - 1101 , - 2912 , - 2167 , - 2274 , - 2097 , - 500 , - 891 , - 2134 , - 3093 , - 2632 , - 4159 , - 1994 , - 4089 , - 220 , - 2883 , - 1854 , - 541 , - 2352 , - 1607 , - 1714 , - 1537 , - 4484 , - 331 , - 1574 , - 2533 , - 2072 , - 3599 , - 1434 , - 3529 , - 4204 , - 2323 , - 1294 , - 4525 , - 1792 , - 1047 , - 1154 , - 977 , - 3924 , - 4315 , - 1014 , - 1973 , - 1512 , - 3039 , - 874 , - 2969 , - 3644 , - 1763 , - 734 , - 3965 , - 1232 , - 487 , - 594 , - 417 , - 3364 , - 3755 , - 454 , - 1413 , - 952 , - 2479 , - 314 , - 2409 , - 3084 , - 1203 , - 174 , - 3405 , - 672 , - 4471 , - 34 , - 4401 , - 2804 , - 3195 , - 4438 , - 853 , - 392 , - 1919 , - 4298 , - 1849 , - 2524 , - 643 , - 4158 , - 2845 , - 112 , - 3911 , - 4018 , - 3841 , - 2244 , - 2635 , - 3878 , - 293 , - 4376 , - 1359 , - 3738 , - 1289 , - 1964 , - 83 , - 3598 , - 2285 , - 4096 , - 3351 , - 3458 , - 3281 , - 1684 , - 2075 , - 3318 , - 4277 , - 3816 , - 799 , - 3178 , - 729 , - 1404 , - 4067 , - 3038 , - 1725 , - 3536 , - 2791 , - 2898 , - 2721 , - 1124 , - 1515 , - 2758 , - 3717 , - 3256 , - 239 , - 2618 , - 169 , - 844 , - 3507 , - 2478 , - 1165 , - 2976 , - 2231 , - 2338 , - 2161 , - 564 , - 955 , - 2198 , - 3157 , - 2696 , - 4223 , - 2058 , - 4153 , - 284 , - 2947 , - 1918 , - 605 , - 2416 , - 1671 , - 1778 , - 1601 , - 4 , - 395 , - 1638 , - 2597 , - 2136 , - 3663 , - 1498 , - 3593 , - 4268 , - 2387 , - 1358 , - 45 , - 1856 , - 1111 , - 1218 , - 1041 , - 3988 , - 4379 , - 1078 , - 2037 , - 1576 , - 3103 , - 938 , - 3033 , - 3708 , - 1827 , - 798 , - 4029 , - 1296 , - 551 , - 658 , - 481 , - 3428 , - 3819 , - 518 , - 1477 , - 1016 , - 2543 , - 378 , - 2473 , - 3148 , - 1267 , - 238 , - 3469 , - 736 , - 4535 , - 98 , - 4465 , - 2868 , - 3259 , - 4502 , - 917 , - 456 , - 1983 , - 4362 , - 1913 , - 2588 , - 707 , - 4222 , - 2909 , - 176 , - 3975 , - 4082 , - 3905 , - 2308 , - 2699 , - 3942 , - 357 , - 4440 , - 1423 , - 3802 , - 1353 , - 2028 , - 147 , - 3662 , - 2349 , - 4160 , - 3415 , - 3522 , - 3345 , - 1748 , - 2139 , - 3382 , - 4341 , - 3880 , - 863 , - 3242 , - 793 , - 1468 , - 4131 , - 3102 , - 1789 , - 3600 , - 2855 , - 2962 , - 2785 , - 1188 , - 1579 , - 2822 , - 3781 , - 3320 , - 303 , - 2682 , - 233 , - 908 , - 3571 , - 2542 , - 1229 , - 3040 , - 2295 , - 2402 , - 2225 , - 628 , - 1019 , - 2262 , - 3221 , - 2760 , - 4287 , - 2122 , - 4217 , - 348 , - 3011 , - 1982 , - 669 , - 2480 , - 1735 , - 1842 , - 1665 , - 68 , - 459 , - 1702 , - 2661 , - 2200 , - 3727 , - 1562 , - 3657 , - 4332 , - 2451 , - 1422 , - 109 , - 1920 , - 1175 , - 1282 , - 1105 , - 4052 , - 4443 , - 1142 , - 2101 , - 1640 , - 3167 , - 1002 , - 3097 , - 3772 , - 1891 , - 862 , - 4093 , - 1360 , - 615 , - 722 , - 545 , - 3492 , - 3883 , - 582 , - 1541 , - 1080 , - 2607 , - 442 , - 2537 , - 3212 , - 1331 , - 302 , - 3533 , - 800 , - 55 , - 162 , - 4529 , - 2932 , - 3323 , - 22 , - 981 , - 520 , - 2047 , - 4426 , - 1977 , - 2652 , - 771 , - 4286 , - 2973 , - 240 , - 4039 , - 4146 , - 3969 , - 2372 , - 2763 , - 4006 , - 421 , - 4504 , - 1487 , - 3866 , - 1417 , - 2092 , - 211 , - 3726 , - 2413 , - 4224 , - 3479 , - 3586 , - 3409 , - 1812 , - 2203 , - 3446 , - 4405 , - 3944 , - 927 , - 3306 , - 857 , - 1532 , - 4195 , - 3166 , - 1853 , - 3664 , - 2919 , - 3026 , - 2849 , - 1252 , - 1643 , - 2886 , - 3845 , - 3384 , - 367 , - 2746 , - 297 , - 972 , - 3635 , - 2606 , - 1293 , - 3104 , - 2359 , - 2466 , - 2289 , - 692 , - 1083 , - 2326 , - 3285 , - 2824 , - 4351 , - 2186 , - 4281 , - 412 , - 3075 , - 2046 , - 733 , - 2544 , - 1799 , - 1906 , - 1729 , - 132 , - 523 , - 1766 , - 2725 , - 2264 , - 3791 , - 1626 , - 3721 , - 4396 , - 2515 , - 1486 , - 173 , - 1984 , - 1239 , - 1346 , - 1169 , - 4116 , - 4507 , - 1206 , - 2165 , - 1704 , - 3231 , - 1066 , - 3161 , - 3836 , - 1955 , - 926 , - 4157 , - 1424 , - 679 , - 786 , - 609 , - 3556 , - 3947 , - 646 , - 1605 , - 1144 , - 2671 , - 506 , - 2601 , - 3276 , - 1395 , - 366 , - 3597 , - 864 , - 119 , - 226 , - 49 , - 2996 , - 3387 , - 86 , - 1045 , - 584 , - 2111 , - 4490 , - 2041 , - 2716 , - 835 , - 4350 , - 3037 , - 304 , - 4103 , - 4210 , - 4033 , - 2436 , - 2827 , - 4070 , - 485 , - 24 , - 1551 , - 3930 , - 1481 , - 2156 , - 275 , - 3790 , - 2477 , - 4288 , - 3543 , - 3650 , - 3473 , - 1876 , - 2267 , - 3510 , - 4469 , - 4008 , - 991 , - 3370 , - 921 , - 1596 , - 4259 , - 3230 , - 1917 , - 3728 , - 2983 , - 3090 , - 2913 , - 1316 , - 1707 , - 2950 , - 3909 , - 3448 , - 431 , - 2810 , - 361 , - 1036 , - 3699 , - 2670 , - 1357 , - 3168 , - 2423 , - 2530 , - 2353 , - 756 , - 1147 , - 2390 , - 3349 , - 2888 , - 4415 , - 2250 , - 4345 , - 476 , - 3139 , - 2110 , - 797 , - 2608 , - 1863 , - 1970 , - 1793 , - 196 , - 587 , - 1830 , - 2789 , - 2328 , - 3855 , - 1690 , - 3785 , - 4460 , - 2579 , - 1550 , - 237 , - 2048 , - 1303 , - 1410 , - 1233 , - 4180 , - 27 , - 1270 , - 2229 , - 1768 , - 3295 , - 1130 , - 3225 , - 3900 , - 2019 , - 990 , - 4221 , - 1488 , - 743 , - 850 , - 673 , - 3620 , - 4011 , - 710 , - 1669 , - 1208 , - 2735 , - 570 , - 2665 , - 3340 , - 1459 , - 430 , - 3661 , - 928 , - 183 , - 290 , - 113 , - 3060 , - 3451 , - 150 , - 1109 , - 648 , - 2175 , - 10 , - 2105 , - 2780 , - 899 , - 4414 , - 3101 , - 368 , - 4167 , - 4274 , - 4097 , - 2500 , - 2891 , - 4134 , - 549 , - 88 , - 1615 , - 3994 , - 1545 , - 2220 , - 339 , - 3854 , - 2541 , - 4352 , - 3607 , - 3714 , - 3537 , - 1940 , - 2331 , - 3574 , - 4533 , - 4072 , - 1055 , - 3434 , - 985 , - 1660 , - 4323 , - 3294 , - 1981 , - 3792 , - 3047 , - 3154 , - 2977 , - 1380 , - 1771 , - 3014 , - 3973 , - 3512 , - 495 , - 2874 , - 425 , - 1100 , - 3763 , - 2734 , - 1421 , - 3232 , - 2487 , - 2594 , - 2417 , - 820 , - 1211 , - 2454 , - 3413 , - 2952 , - 4479 , - 2314 , - 4409 , - 540 , - 3203 , - 2174 , - 861 , - 2672 , - 1927 , - 2034 , - 1857 , - 260 , - 651 , - 1894 , - 2853 , - 2392 , - 3919 , - 1754 , - 3849 , - 4524 , - 2643 , - 1614 , - 301 , - 2112 , - 1367 , - 1474 , - 1297 , - 4244 , - 91 , - 1334 , - 2293 , - 1832 , - 3359 , - 1194 , - 3289 , - 3964 , - 2083 , - 1054 , - 4285 , - 1552 , - 807 , - 914 , - 737 , - 3684 , - 4075 , - 774 , - 1733 , - 1272 , - 2799 , - 634 , - 2729 , - 3404 , - 1523 , - 494 , - 3725 , - 992 , - 247 , - 354 , - 177 , - 3124 , - 3515 , - 214 , - 1173 , - 712 , - 2239 , - 74 , - 2169 , - 2844 , - 963 , - 4478 , - 3165 , - 432 , - 4231 , - 4338 , - 4161 , - 2564 , - 2955 , - 4198 , - 613 , - 152 , - 1679 , - 4058 , - 1609 , - 2284 , - 403 , - 3918 , - 2605 , - 4416 , - 3671 , - 3778 , - 3601 , - 2004 , - 2395 , - 3638 , - 53 , - 4136 , - 1119 , - 3498 , - 1049 , - 1724 , - 4387 , - 3358 , - 2045 , - 3856 , - 3111 , - 3218 , - 3041 , - 1444 , - 1835 , - 3078 , - 4037 , - 3576 , - 559 , - 2938 , - 489 , - 1164 , - 3827 , - 2798 , - 1485 , - 3296 , - 2551 , - 2658 , - 2481 , - 884 , - 1275 , - 2518 , - 3477 , - 3016 , - 4543 , - 2378 , - 4473 , - 604 , - 3267 , - 2238 , - 925 , - 2736 , - 1991 , - 2098 , - 1921 , - 324 , - 715 , - 1958 , - 2917 , - 2456 , - 3983 , - 1818 , - 3913 , - 44 , - 2707 , - 1678 , - 365 , - 2176 , - 1431 , - 1538 , - 1361 , - 4308 , - 155 , - 1398 , - 2357 , - 1896 , - 3423 , - 1258 , - 3353 , - 4028 , - 2147 , - 1118 , - 4349 , - 1616 , - 871 , - 978 , - 801 , - 3748 , - 4139 , - 838 , - 1797 , - 1336 , - 2863 , - 698 , - 2793 , - 3468 , - 1587 , - 558 , - 3789 , - 1056 , - 311 , - 418 , - 241 , - 3188 , - 3579 , - 278 , - 1237 , - 776 , - 2303 , - 138 , - 2233 , - 2908 , - 1027 , - 4542 , - 3229 , - 496 , - 4295 , - 4402 , - 4225 , - 2628 , - 3019 , - 4262 , - 677 , - 216 , - 1743 , - 4122 , - 1673 , - 2348 , - 467 , - 3982 , - 2669 , - 4480 , - 3735 , - 3842 , - 3665 , - 2068 , - 2459 , - 3702 , - 117 , - 4200 , - 1183 , - 3562 , - 1113 , - 1788 , - 4451 , - 3422 , - 2109 , - 3920 , - 3175 , - 3282 , - 3105 , - 1508 , - 1899 , - 3142 , - 4101 , - 3640 , - 623 , - 3002 , - 553 , - 1228 , - 3891 , - 2862 , - 1549 , - 3360 , - 2615 , - 2722 , - 2545 , - 948 , - 1339 , - 2582 , - 3541 , - 3080 , - 63 , - 2442 , - 4537 , - 668 , - 3331 , - 2302 , - 989 , - 2800 , - 2055 , - 2162 , - 1985 , - 388 , - 779 , - 2022 , - 2981 , - 2520 , - 4047 , - 1882 , - 3977 , - 108 , - 2771 , - 1742 , - 429 , - 2240 , - 1495 , - 1602 , - 1425 , - 4372 , - 219 , - 1462 , - 2421 , - 1960 , - 3487 , - 1322 , - 3417 , - 4092 , - 2211 , - 1182 , - 4413 , - 1680 , - 935 , - 1042 , - 865 , - 3812 , - 4203 , - 902 , - 1861 , - 1400 , - 2927 , - 762 , - 2857 , - 3532 , - 1651 , - 622 , - 3853 , - 1120 , - 375 , - 482 , - 305 , - 3252 , - 3643 , - 342 , - 1301 , - 840 , - 2367 , - 202 , - 2297 , - 2972 , - 1091 , - 62 , - 3293 , - 560 , - 4359 , - 4466 , - 4289 , - 2692 , - 3083 , - 4326 , - 741 , - 280 , - 1807 , - 4186 , - 1737 , - 2412 , - 531 , - 4046 , - 2733 , - 0 , - 1489 , - 2018 , - 1587 , - 196 , - 2453 , - 3750 , - 4087 , - 3464 , - 1881 , - 3946 , - 443 , - 588 , - 4381 , - 2606 , - 4479 , - 784 , - 737 , - 4338 , - 2371 , - 4052 , - 165 , - 4534 , - 3335 , - 1176 , - 2665 , - 3194 , - 2763 , - 1372 , - 3629 , - 318 , - 655 , - 32 , - 3057 , - 514 , - 1619 , - 1764 , - 949 , - 3782 , - 1047 , - 1960 , - 1913 , - 906 , - 3547 , - 620 , - 1341 , - 1102 , - 4511 , - 2352 , - 3841 , - 4370 , - 3939 , - 2548 , - 197 , - 1494 , - 1831 , - 1208 , - 4233 , - 1690 , - 2795 , - 2940 , - 2125 , - 350 , - 2223 , - 3136 , - 3089 , - 2082 , - 115 , - 1796 , - 2517 , - 2278 , - 1079 , - 3528 , - 409 , - 938 , - 507 , - 3724 , - 1373 , - 2670 , - 3007 , - 2384 , - 801 , - 2866 , - 3971 , - 4116 , - 3301 , - 1526 , - 3399 , - 4312 , - 4265 , - 3258 , - 1291 , - 2972 , - 3693 , - 3454 , - 2255 , - 96 , - 1585 , - 2114 , - 1683 , - 292 , - 2549 , - 3846 , - 4183 , - 3560 , - 1977 , - 4042 , - 539 , - 684 , - 4477 , - 2702 , - 4575 , - 880 , - 833 , - 4434 , - 2467 , - 4148 , - 261 , - 22 , - 3431 , - 1272 , - 2761 , - 3290 , - 2859 , - 1468 , - 3725 , - 414 , - 751 , - 128 , - 3153 , - 610 , - 1715 , - 1860 , - 1045 , - 3878 , - 1143 , - 2056 , - 2009 , - 1002 , - 3643 , - 716 , - 1437 , - 1198 , - 4607 , - 2448 , - 3937 , - 4466 , - 4035 , - 2644 , - 293 , - 1590 , - 1927 , - 1304 , - 4329 , - 1786 , - 2891 , - 3036 , - 2221 , - 446 , - 2319 , - 3232 , - 3185 , - 2178 , - 211 , - 1892 , - 2613 , - 2374 , - 1175 , - 3624 , - 505 , - 1034 , - 603 , - 3820 , - 1469 , - 2766 , - 3103 , - 2480 , - 897 , - 2962 , - 4067 , - 4212 , - 3397 , - 1622 , - 3495 , - 4408 , - 4361 , - 3354 , - 1387 , - 3068 , - 3789 , - 3550 , - 2351 , - 192 , - 1681 , - 2210 , - 1779 , - 388 , - 2645 , - 3942 , - 4279 , - 3656 , - 2073 , - 4138 , - 635 , - 780 , - 4573 , - 2798 , - 63 , - 976 , - 929 , - 4530 , - 2563 , - 4244 , - 357 , - 118 , - 3527 , - 1368 , - 2857 , - 3386 , - 2955 , - 1564 , - 3821 , - 510 , - 847 , - 224 , - 3249 , - 706 , - 1811 , - 1956 , - 1141 , - 3974 , - 1239 , - 2152 , - 2105 , - 1098 , - 3739 , - 812 , - 1533 , - 1294 , - 95 , - 2544 , - 4033 , - 4562 , - 4131 , - 2740 , - 389 , - 1686 , - 2023 , - 1400 , - 4425 , - 1882 , - 2987 , - 3132 , - 2317 , - 542 , - 2415 , - 3328 , - 3281 , - 2274 , - 307 , - 1988 , - 2709 , - 2470 , - 1271 , - 3720 , - 601 , - 1130 , - 699 , - 3916 , - 1565 , - 2862 , - 3199 , - 2576 , - 993 , - 3058 , - 4163 , - 4308 , - 3493 , - 1718 , - 3591 , - 4504 , - 4457 , - 3450 , - 1483 , - 3164 , - 3885 , - 3646 , - 2447 , - 288 , - 1777 , - 2306 , - 1875 , - 484 , - 2741 , - 4038 , - 4375 , - 3752 , - 2169 , - 4234 , - 731 , - 876 , - 61 , - 2894 , - 159 , - 1072 , - 1025 , - 18 , - 2659 , - 4340 , - 453 , - 214 , - 3623 , - 1464 , - 2953 , - 3482 , - 3051 , - 1660 , - 3917 , - 606 , - 943 , - 320 , - 3345 , - 802 , - 1907 , - 2052 , - 1237 , - 4070 , - 1335 , - 2248 , - 2201 , - 1194 , - 3835 , - 908 , - 1629 , - 1390 , - 191 , - 2640 , - 4129 , - 50 , - 4227 , - 2836 , - 485 , - 1782 , - 2119 , - 1496 , - 4521 , - 1978 , - 3083 , - 3228 , - 2413 , - 638 , - 2511 , - 3424 , - 3377 , - 2370 , - 403 , - 2084 , - 2805 , - 2566 , - 1367 , - 3816 , - 697 , - 1226 , - 795 , - 4012 , - 1661 , - 2958 , - 3295 , - 2672 , - 1089 , - 3154 , - 4259 , - 4404 , - 3589 , - 1814 , - 3687 , - 4600 , - 4553 , - 3546 , - 1579 , - 3260 , - 3981 , - 3742 , - 2543 , - 384 , - 1873 , - 2402 , - 1971 , - 580 , - 2837 , - 4134 , - 4471 , - 3848 , - 2265 , - 4330 , - 827 , - 972 , - 157 , - 2990 , - 255 , - 1168 , - 1121 , - 114 , - 2755 , - 4436 , - 549 , - 310 , - 3719 , - 1560 , - 3049 , - 3578 , - 3147 , - 1756 , - 4013 , - 702 , - 1039 , - 416 , - 3441 , - 898 , - 2003 , - 2148 , - 1333 , - 4166 , - 1431 , - 2344 , - 2297 , - 1290 , - 3931 , - 1004 , - 1725 , - 1486 , - 287 , - 2736 , - 4225 , - 146 , - 4323 , - 2932 , - 581 , - 1878 , - 2215 , - 1592 , - 9 , - 2074 , - 3179 , - 3324 , - 2509 , - 734 , - 2607 , - 3520 , - 3473 , - 2466 , - 499 , - 2180 , - 2901 , - 2662 , - 1463 , - 3912 , - 793 , - 1322 , - 891 , - 4108 , - 1757 , - 3054 , - 3391 , - 2768 , - 1185 , - 3250 , - 4355 , - 4500 , - 3685 , - 1910 , - 3783 , - 88 , - 41 , - 3642 , - 1675 , - 3356 , - 4077 , - 3838 , - 2639 , - 480 , - 1969 , - 2498 , - 2067 , - 676 , - 2933 , - 4230 , - 4567 , - 3944 , - 2361 , - 4426 , - 923 , - 1068 , - 253 , - 3086 , - 351 , - 1264 , - 1217 , - 210 , - 2851 , - 4532 , - 645 , - 406 , - 3815 , - 1656 , - 3145 , - 3674 , - 3243 , - 1852 , - 4109 , - 798 , - 1135 , - 512 , - 3537 , - 994 , - 2099 , - 2244 , - 1429 , - 4262 , - 1527 , - 2440 , - 2393 , - 1386 , - 4027 , - 1100 , - 1821 , - 1582 , - 383 , - 2832 , - 4321 , - 242 , - 4419 , - 3028 , - 677 , - 1974 , - 2311 , - 1688 , - 105 , - 2170 , - 3275 , - 3420 , - 2605 , - 830 , - 2703 , - 3616 , - 3569 , - 2562 , - 595 , - 2276 , - 2997 , - 2758 , - 1559 , - 4008 , - 889 , - 1418 , - 987 , - 4204 , - 1853 , - 3150 , - 3487 , - 2864 , - 1281 , - 3346 , - 4451 , - 4596 , - 3781 , - 2006 , - 3879 , - 184 , - 137 , - 3738 , - 1771 , - 3452 , - 4173 , - 3934 , - 2735 , - 576 , - 2065 , - 2594 , - 2163 , - 772 , - 3029 , - 4326 , - 55 , - 4040 , - 2457 , - 4522 , - 1019 , - 1164 , - 349 , - 3182 , - 447 , - 1360 , - 1313 , - 306 , - 2947 , - 20 , - 741 , - 502 , - 3911 , - 1752 , - 3241 , - 3770 , - 3339 , - 1948 , - 4205 , - 894 , - 1231 , - 608 , - 3633 , - 1090 , - 2195 , - 2340 , - 1525 , - 4358 , - 1623 , - 2536 , - 2489 , - 1482 , - 4123 , - 1196 , - 1917 , - 1678 , - 479 , - 2928 , - 4417 , - 338 , - 4515 , - 3124 , - 773 , - 2070 , - 2407 , - 1784 , - 201 , - 2266 , - 3371 , - 3516 , - 2701 , - 926 , - 2799 , - 3712 , - 3665 , - 2658 , - 691 , - 2372 , - 3093 , - 2854 , - 1655 , - 4104 , - 985 , - 1514 , - 1083 , - 4300 , - 1949 , - 3246 , - 3583 , - 2960 , - 1377 , - 3442 , - 4547 , - 84 , - 3877 , - 2102 , - 3975 , - 280 , - 233 , - 3834 , - 1867 , - 3548 , - 4269 , - 4030 , - 2831 , - 672 , - 2161 , - 2690 , - 2259 , - 868 , - 3125 , - 4422 , - 151 , - 4136 , - 2553 , - 10 , - 1115 , - 1260 , - 445 , - 3278 , - 543 , - 1456 , - 1409 , - 402 , - 3043 , - 116 , - 837 , - 598 , - 4007 , - 1848 , - 3337 , - 3866 , - 3435 , - 2044 , - 4301 , - 990 , - 1327 , - 704 , - 3729 , - 1186 , - 2291 , - 2436 , - 1621 , - 4454 , - 1719 , - 2632 , - 2585 , - 1578 , - 4219 , - 1292 , - 2013 , - 1774 , - 575 , - 3024 , - 4513 , - 434 , - 3 , - 3220 , - 869 , - 2166 , - 2503 , - 1880 , - 297 , - 2362 , - 3467 , - 3612 , - 2797 , - 1022 , - 2895 , - 3808 , - 3761 , - 2754 , - 787 , - 2468 , - 3189 , - 2950 , - 1751 , - 4200 , - 1081 , - 1610 , - 1179 , - 4396 , - 2045 , - 3342 , - 3679 , - 3056 , - 1473 , - 3538 , - 35 , - 180 , - 3973 , - 2198 , - 4071 , - 376 , - 329 , - 3930 , - 1963 , - 3644 , - 4365 , - 4126 , - 2927 , - 768 , - 2257 , - 2786 , - 2355 , - 964 , - 3221 , - 4518 , - 247 , - 4232 , - 2649 , - 106 , - 1211 , - 1356 , - 541 , - 3374 , - 639 , - 1552 , - 1505 , - 498 , - 3139 , - 212 , - 933 , - 694 , - 4103 , - 1944 , - 3433 , - 3962 , - 3531 , - 2140 , - 4397 , - 1086 , - 1423 , - 800 , - 3825 , - 1282 , - 2387 , - 2532 , - 1717 , - 4550 , - 1815 , - 2728 , - 2681 , - 1674 , - 4315 , - 1388 , - 2109 , - 1870 , - 671 , - 3120 , - 1 , - 530 , - 99 , - 3316 , - 965 , - 2262 , - 2599 , - 1976 , - 393 , - 2458 , - 3563 , - 3708 , - 2893 , - 1118 , - 2991 , - 3904 , - 3857 , - 2850 , - 883 , - 2564 , - 3285 , - 3046 , - 1847 , - 4296 , - 1177 , - 1706 , - 1275 , - 4492 , - 2141 , - 3438 , - 3775 , - 3152 , - 1569 , - 3634 , - 131 , - 276 , - 4069 , - 2294 , - 4167 , - 472 , - 425 , - 4026 , - 2059 , - 3740 , - 4461 , - 4222 , - 3023 , - 864 , - 2353 , - 2882 , - 2451 , - 1060 , - 3317 , - 6 , - 343 , - 4328 , - 2745 , - 202 , - 1307 , - 1452 , - 637 , - 3470 , - 735 , - 1648 , - 1601 , - 594 , - 3235 , - 308 , - 1029 , - 790 , - 4199 , - 2040 , - 3529 , - 4058 , - 3627 , - 2236 , - 4493 , - 1182 , - 1519 , - 896 , - 3921 , - 1378 , - 2483 , - 2628 , - 1813 , - 38 , - 1911 , - 2824 , - 2777 , - 1770 , - 4411 , - 1484 , - 2205 , - 1966 , - 767 , - 3216 , - 97 , - 626 , - 195 , - 3412 , - 1061 , - 2358 , - 2695 , - 2072 , - 489 , - 2554 , - 3659 , - 3804 , - 2989 , - 1214 , - 3087 , - 4000 , - 3953 , - 2946 , - 979 , - 2660 , - 3381 , - 3142 , - 1943 , - 4392 , - 1273 , - 1802 , - 1371 , - 4588 , - 2237 , - 3534 , - 3871 , - 3248 , - 1665 , - 3730 , - 227 , - 372 , - 4165 , - 2390 , - 4263 , - 568 , - 521 , - 4122 , - 2155 , - 3836 , - 4557 , - 4318 , - 3119 , - 960 , - 2449 , - 2978 , - 2547 , - 1156 , - 3413 , - 102 , - 439 , - 4424 , - 2841 , - 298 , - 1403 , - 1548 , - 733 , - 3566 , - 831 , - 1744 , - 1697 , - 690 , - 3331 , - 404 , - 1125 , - 886 , - 4295 , - 2136 , - 3625 , - 4154 , - 3723 , - 2332 , - 4589 , - 1278 , - 1615 , - 992 , - 4017 , - 1474 , - 2579 , - 2724 , - 1909 , - 134 , - 2007 , - 2920 , - 2873 , - 1866 , - 4507 , - 1580 , - 2301 , - 2062 , - 863 , - 3312 , - 193 , - 722 , - 291 , - 3508 , - 1157 , - 2454 , - 2791 , - 2168 , - 585 , - 2650 , - 3755 , - 3900 , - 3085 , - 1310 , - 3183 , - 4096 , - 4049 , - 3042 , - 1075 , - 2756 , - 3477 , - 3238 , - 2039 , - 4488 , - 1369 , - 1898 , - 1467 , - 76 , - 2333 , - 3630 , - 3967 , - 3344 , - 1761 , - 3826 , - 323 , - 468 , - 4261 , - 2486 , - 4359 , - 664 , - 617 , - 4218 , - 2251 , - 3932 , - 45 , - 4414 , - 3215 , - 1056 , - 2545 , - 3074 , - 2643 , - 1252 , - 3509 , - 198 , - 535 , - 4520 , - 2937 , - 394 , - 1499 , - 1644 , - 829 , - 3662 , - 927 , - 1840 , - 1793 , - 786 , - 3427 , - 500 , - 1221 , - 982 , - 4391 , - 2232 , - 3721 , - 4250 , - 3819 , - 2428 , - 77 , - 1374 , - 1711 , - 1088 , - 4113 , - 1570 , - 2675 , - 2820 , - 2005 , - 230 , - 2103 , - 3016 , - 2969 , - 1962 , - 4603 , - 1676 , - 2397 , - 2158 , - 959 , - 3408 , - 289 , - 818 , - 387 , - 3604 , - 1253 , - 2550 , - 2887 , - 2264 , - 681 , - 2746 , - 3851 , - 3996 , - 3181 , - 1406 , - 3279 , - 4192 , - 4145 , - 3138 , - 1171 , - 2852 , - 3573 , - 3334 , - 2135 , - 4584 , - 1465 , - 1994 , - 1563 , - 172 , - 2429 , - 3726 , - 4063 , - 3440 , - 1857 , - 3922 , - 419 , - 564 , - 4357 , - 2582 , - 4455 , - 760 , - 713 , - 4314 , - 2347 , - 4028 , - 141 , - 4510 , - 3311 , - 1152 , - 2641 , - 3170 , - 2739 , - 1348 , - 3605 , - 294 , - 631 , - 8 , - 3033 , - 490 , - 1595 , - 1740 , - 925 , - 3758 , - 1023 , - 1936 , - 1889 , - 882 , - 3523 , - 596 , - 1317 , - 1078 , - 4487 , - 2328 , - 3817 , - 4346 , - 3915 , - 2524 , - 173 , - 1470 , - 1807 , - 1184 , - 4209 , - 1666 , - 2771 , - 2916 , - 2101 , - 326 , - 2199 , - 3112 , - 3065 , - 2058 , - 91 , - 1772 , - 2493 , - 2254 , - 1055 , - 3504 , - 385 , - 914 , - 483 , - 3700 , - 1349 , - 2646 , - 2983 , - 2360 , - 777 , - 2842 , - 3947 , - 4092 , - 3277 , - 1502 , - 3375 , - 4288 , - 4241 , - 3234 , - 1267 , - 2948 , - 3669 , - 3430 , - 2231 , - 72 , - 1561 , - 2090 , - 1659 , - 268 , - 2525 , - 3822 , - 4159 , - 3536 , - 1953 , - 4018 , - 515 , - 660 , - 4453 , - 2678 , - 4551 , - 856 , - 809 , - 4410 , - 2443 , - 4124 , - 237 , - 4606 , - 3407 , - 1248 , - 2737 , - 3266 , - 2835 , - 1444 , - 3701 , - 390 , - 727 , - 104 , - 3129 , - 586 , - 1691 , - 1836 , - 1021 , - 3854 , - 1119 , - 2032 , - 1985 , - 978 , - 3619 , - 692 , - 1413 , - 1174 , - 4583 , - 2424 , - 3913 , - 4442 , - 4011 , - 2620 , - 269 , - 1566 , - 1903 , - 1280 , - 4305 , - 1762 , - 2867 , - 3012 , - 2197 , - 422 , - 2295 , - 3208 , - 3161 , - 2154 , - 187 , - 1868 , - 2589 , - 2350 , - 1151 , - 3600 , - 481 , - 1010 , - 579 , - 3796 , - 1445 , - 2742 , - 3079 , - 2456 , - 873 , - 2938 , - 4043 , - 4188 , - 3373 , - 1598 , - 3471 , - 4384 , - 4337 , - 3330 , - 1363 , - 3044 , - 3765 , - 3526 , - 2327 , - 168 , - 1657 , - 2186 , - 1755 , - 364 , - 2621 , - 3918 , - 4255 , - 3632 , - 2049 , - 4114 , - 611 , - 756 , - 4549 , - 2774 , - 39 , - 952 , - 905 , - 4506 , - 2539 , - 4220 , - 333 , - 94 , - 3503 , - 1344 , - 2833 , - 3362 , - 2931 , - 1540 , - 3797 , - 486 , - 823 , - 200 , - 3225 , - 682 , - 1787 , - 1932 , - 1117 , - 3950 , - 1215 , - 2128 , - 2081 , - 1074 , - 3715 , - 788 , - 1509 , - 1270 , - 71 , - 2520 , - 4009 , - 4538 , - 4107 , - 2716 , - 365 , - 1662 , - 1999 , - 1376 , - 4401 , - 1858 , - 2963 , - 3108 , - 2293 , - 518 , - 2391 , - 3304 , - 3257 , - 2250 , - 283 , - 1964 , - 2685 , - 2446 , - 1247 , - 3696 , - 577 , - 1106 , - 675 , - 3892 , - 1541 , - 2838 , - 3175 , - 2552 , - 969 , - 3034 , - 4139 , - 4284 , - 3469 , - 1694 , - 3567 , - 4480 , - 4433 , - 3426 , - 1459 , - 3140 , - 3861 , - 3622 , - 2423 , - 264 , - 1753 , - 2282 , - 1851 , - 460 , - 2717 , - 4014 , - 4351 , - 3728 , - 2145 , - 4210 , - 707 , - 852 , - 37 , - 2870 , - 135 , - 1048 , - 1001 , - 4602 , - 2635 , - 4316 , - 429 , - 190 , - 3599 , - 1440 , - 2929 , - 3458 , - 3027 , - 1636 , - 3893 , - 582 , - 919 , - 296 , - 3321 , - 778 , - 1883 , - 2028 , - 1213 , - 4046 , - 1311 , - 2224 , - 2177 , - 1170 , - 3811 , - 884 , - 1605 , - 1366 , - 167 , - 2616 , - 4105 , - 26 , - 4203 , - 2812 , - 461 , - 1758 , - 2095 , - 1472 , - 4497 , - 1954 , - 3059 , - 3204 , - 2389 , - 614 , - 2487 , - 3400 , - 3353 , - 2346 , - 379 , - 2060 , - 2781 , - 2542 , - 1343 , - 3792 , - 673 , - 1202 , - 771 , - 3988 , - 1637 , - 2934 , - 3271 , - 2648 , - 1065 , - 3130 , - 4235 , - 4380 , - 3565 , - 1790 , - 3663 , - 4576 , - 4529 , - 3522 , - 1555 , - 3236 , - 3957 , - 3718 , - 2519 , - 360 , - 1849 , - 2378 , - 1947 , - 556 , - 2813 , - 4110 , - 4447 , - 3824 , - 2241 , - 4306 , - 803 , - 948 , - 133 , - 2966 , - 231 , - 1144 , - 1097 , - 90 , - 2731 , - 4412 , - 525 , - 286 , - 3695 , - 1536 , - 3025 , - 3554 , - 3123 , - 1732 , - 3989 , - 678 , - 1015 , - 392 , - 3417 , - 874 , - 1979 , - 2124 , - 1309 , - 4142 , - 1407 , - 2320 , - 2273 , - 1266 , - 3907 , - 980 , - 1701 , - 1462 , - 263 , - 2712 , - 4201 , - 122 , - 4299 , - 2908 , - 557 , - 1854 , - 2191 , - 1568 , - 4593 , - 2050 , - 3155 , - 3300 , - 2485 , - 710 , - 2583 , - 3496 , - 3449 , - 2442 , - 475 , - 2156 , - 2877 , - 2638 , - 1439 , - 3888 , - 769 , - 1298 , - 867 , - 4084 , - 1733 , - 3030 , - 3367 , - 2744 , - 1161 , - 3226 , - 4331 , - 4476 , - 3661 , - 1886 , - 3759 , - 64 , - 17 , - 3618 , - 1651 , - 3332 , - 4053 , - 3814 , - 2615 , - 456 , - 1945 , - 2474 , - 2043 , - 652 , - 2909 , - 4206 , - 4543 , - 3920 , - 2337 , - 4402 , - 899 , - 1044 , - 229 , - 3062 , - 327 , - 1240 , - 1193 , - 186 , - 2827 , - 4508 , - 621 , - 382 , - 3791 , - 1632 , - 3121 , - 3650 , - 3219 , - 1828 , - 4085 , - 774 , - 1111 , - 488 , - 3513 , - 970 , - 2075 , - 2220 , - 1405 , - 4238 , - 1503 , - 2416 , - 2369 , - 1362 , - 4003 , - 1076 , - 1797 , - 1558 , - 359 , - 2808 , - 4297 , - 218 , - 4395 , - 3004 , - 653 , - 1950 , - 2287 , - 1664 , - 81 , - 2146 , - 3251 , - 3396 , - 2581 , - 806 , - 2679 , - 3592 , - 3545 , - 2538 , - 571 , - 2252 , - 2973 , - 2734 , - 1535 , - 3984 , - 865 , - 1394 , - 963 , - 4180 , - 1829 , - 3126 , - 3463 , - 2840 , - 1257 , - 3322 , - 4427 , - 4572 , - 3757 , - 1982 , - 3855 , - 160 , - 113 , - 3714 , - 1747 , - 3428 , - 4149 , - 3910 , - 2711 , - 552 , - 2041 , - 2570 , - 2139 , - 748 , - 3005 , - 4302 , - 31 , - 4016 , - 2433 , - 4498 , - 995 , - 1140 , - 325 , - 3158 , - 423 , - 1336 , - 1289 , - 282 , - 2923 , - 4604 , - 717 , - 478 , - 3887 , - 1728 , - 3217 , - 3746 , - 3315 , - 1924 , - 4181 , - 870 , - 1207 , - 584 , - 3609 , - 1066 , - 2171 , - 2316 , - 1501 , - 4334 , - 1599 , - 2512 , - 2465 , - 1458 , - 4099 , - 1172 , - 1893 , - 1654 , - 455 , - 2904 , - 4393 , - 314 , - 4491 , - 3100 , - 749 , - 2046 , - 2383 , - 1760 , - 177 , - 2242 , - 3347 , - 3492 , - 2677 , - 902 , - 2775 , - 3688 , - 3641 , - 2634 , - 667 , - 2348 , - 3069 , - 2830 , - 1631 , - 4080 , - 961 , - 1490 , - 1059 , - 4276 , - 1925 , - 3222 , - 3559 , - 2936 , - 1353 , - 3418 , - 4523 , - 60 , - 3853 , - 2078 , - 3951 , - 256 , - 209 , - 3810 , - 1843 , - 3524 , - 4245 , - 4006 , - 2807 , - 648 , - 2137 , - 2666 , - 2235 , - 844 , - 3101 , - 4398 , - 127 , - 4112 , - 2529 , - 4594 , - 1091 , - 1236 , - 421 , - 3254 , - 519 , - 1432 , - 1385 , - 378 , - 3019 , - 92 , - 813 , - 574 , - 3983 , - 1824 , - 3313 , - 3842 , - 3411 , - 2020 , - 4277 , - 966 , - 1303 , - 680 , - 3705 , - 1162 , - 2267 , - 2412 , - 1597 , - 4430 , - 1695 , - 2608 , - 2561 , - 1554 , - 4195 , - 1268 , - 1989 , - 1750 , - 551 , - 3000 , - 4489 , - 410 , - 4587 , - 3196 , - 845 , - 2142 , - 2479 , - 1856 , - 273 , - 2338 , - 3443 , - 3588 , - 2773 , - 998 , - 2871 , - 3784 , - 3737 , - 2730 , - 763 , - 2444 , - 3165 , - 2926 , - 1727 , - 4176 , - 1057 , - 1586 , - 1155 , - 4372 , - 2021 , - 3318 , - 3655 , - 3032 , - 1449 , - 3514 , - 11 , - 156 , - 3949 , - 2174 , - 4047 , - 352 , - 305 , - 3906 , - 1939 , - 3620 , - 4341 , - 4102 , - 2903 , - 744 , - 2233 , - 2762 , - 2331 , - 940 , - 3197 , - 4494 , - 223 , - 4208 , - 2625 , - 82 , - 1187 , - 1332 , - 517 , - 3350 , - 615 , - 1528 , - 1481 , - 474 , - 3115 , - 188 , - 909 , - 670 , - 4079 , - 1920 , - 3409 , - 3938 , - 3507 , - 2116 , - 4373 , - 1062 , - 1399 , - 776 , - 3801 , - 1258 , - 2363 , - 2508 , - 1693 , - 4526 , - 1791 , - 2704 , - 2657 , - 1650 , - 4291 , - 1364 , - 2085 , - 1846 , - 647 , - 3096 , - 4585 , - 506 , - 75 , - 3292 , - 941 , - 2238 , - 2575 , - 1952 , - 369 , - 2434 , - 3539 , - 3684 , - 2869 , - 1094 , - 2967 , - 3880 , - 3833 , - 2826 , - 859 , - 2540 , - 3261 , - 3022 , - 1823 , - 4272 , - 1153 , - 1682 , - 1251 , - 4468 , - 2117 , - 3414 , - 3751 , - 3128 , - 1545 , - 3610 , - 107 , - 252 , - 4045 , - 2270 , - 4143 , - 448 , - 401 , - 4002 , - 2035 , - 3716 , - 4437 , - 4198 , - 2999 , - 840 , - 2329 , - 2858 , - 2427 , - 1036 , - 3293 , - 4590 , - 319 , - 4304 , - 2721 , - 178 , - 1283 , - 1428 , - 613 , - 3446 , - 711 , - 1624 , - 1577 , - 570 , - 3211 , - 284 , - 1005 , - 766 , - 4175 , - 2016 , - 3505 , - 4034 , - 3603 , - 2212 , - 4469 , - 1158 , - 1495 , - 872 , - 3897 , - 1354 , - 2459 , - 2604 , - 1789 , - 14 , - 1887 , - 2800 , - 2753 , - 1746 , - 4387 , - 1460 , - 2181 , - 1942 , - 743 , - 3192 , - 73 , - 602 , - 171 , - 3388 , - 1037 , - 2334 , - 2671 , - 2048 , - 465 , - 2530 , - 3635 , - 3780 , - 2965 , - 1190 , - 3063 , - 3976 , - 3929 , - 2922 , - 955 , - 2636 , - 3357 , - 3118 , - 1919 , - 4368 , - 1249 , - 1778 , - 1347 , - 4564 , - 2213 , - 3510 , - 3847 , - 3224 , - 1641 , - 3706 , - 203 , - 348 , - 4141 , - 2366 , - 4239 , - 544 , - 497 , - 4098 , - 2131 , - 3812 , - 4533 , - 4294 , - 3095 , - 936 , - 2425 , - 2954 , - 2523 , - 1132 , - 3389 , - 78 , - 415 , - 4400 , - 2817 , - 274 , - 1379 , - 1524 , - 709 , - 3542 , - 807 , - 1720 , - 1673 , - 666 , - 3307 , - 380 , - 1101 , - 862 , - 4271 , - 2112 , - 3601 , - 4130 , - 3699 , - 2308 , - 4565 , - 1254 , - 1591 , - 968 , - 3993 , - 1450 , - 2555 , - 2700 , - 1885 , - 110 , - 1983 , - 2896 , - 2849 , - 1842 , - 4483 , - 1556 , - 2277 , - 2038 , - 839 , - 3288 , - 169 , - 698 , - 267 , - 3484 , - 1133 , - 2430 , - 2767 , - 2144 , - 561 , - 2626 , - 3731 , - 3876 , - 3061 , - 1286 , - 3159 , - 4072 , - 4025 , - 3018 , - 1051 , - 2732 , - 3453 , - 3214 , - 2015 , - 4464 , - 1345 , - 1874 , - 1443 , - 52 , - 2309 , - 3606 , - 3943 , - 3320 , - 1737 , - 3802 , - 299 , - 444 , - 4237 , - 2462 , - 4335 , - 640 , - 593 , - 4194 , - 2227 , - 3908 , - 21 , - 4390 , - 3191 , - 1032 , - 2521 , - 3050 , - 2619 , - 1228 , - 3485 , - 174 , - 511 , - 4496 , - 2913 , - 370 , - 1475 , - 1620 , - 805 , - 3638 , - 903 , - 1816 , - 1769 , - 762 , - 3403 , - 476 , - 1197 , - 958 , - 4367 , - 2208 , - 3697 , - 4226 , - 3795 , - 2404 , - 53 , - 1350 , - 1687 , - 1064 , - 4089 , - 1546 , - 2651 , - 2796 , - 1981 , - 206 , - 2079 , - 2992 , - 2945 , - 1938 , - 4579 , - 1652 , - 2373 , - 2134 , - 935 , - 3384 , - 265 , - 794 , - 363 , - 3580 , - 1229 , - 2526 , - 2863 , - 2240 , - 657 , - 2722 , - 3827 , - 3972 , - 3157 , - 1382 , - 3255 , - 4168 , - 4121 , - 3114 , - 1147 , - 2828 , - 3549 , - 3310 , - 2111 , - 4560 , - 1441 , - 1970 , - 1539 , - 148 , - 2405 , - 3702 , - 4039 , - 3416 , - 1833 , - 3898 , - 395 , - 540 , - 4333 , - 2558 , - 4431 , - 736 , - 689 , - 4290 , - 2323 , - 4004 , - 117 , - 4486 , - 3287 , - 1128 , - 2617 , - 3146 , - 2715 , - 1324 , - 3581 , - 270 , - 607 , - 4592 , - 3009 , - 466 , - 1571 , - 1716 , - 901 , - 3734 , - 999 , - 1912 , - 1865 , - 858 , - 3499 , - 572 , - 1293 , - 1054 , - 4463 , - 2304 , - 3793 , - 4322 , - 3891 , - 2500 , - 149 , - 1446 , - 1783 , - 1160 , - 4185 , - 1642 , - 2747 , - 2892 , - 2077 , - 302 , - 2175 , - 3088 , - 3041 , - 2034 , - 67 , - 1748 , - 2469 , - 2230 , - 1031 , - 3480 , - 361 , - 890 , - 459 , - 3676 , - 1325 , - 2622 , - 2959 , - 2336 , - 753 , - 2818 , - 3923 , - 4068 , - 3253 , - 1478 , - 3351 , - 4264 , - 4217 , - 3210 , - 1243 , - 2924 , - 3645 , - 3406 , - 2207 , - 48 , - 1537 , - 2066 , - 1635 , - 244 , - 2501 , - 3798 , - 4135 , - 3512 , - 1929 , - 3994 , - 491 , - 636 , - 4429 , - 2654 , - 4527 , - 832 , - 785 , - 4386 , - 2419 , - 4100 , - 213 , - 4582 , - 3383 , - 1224 , - 2713 , - 3242 , - 2811 , - 1420 , - 3677 , - 366 , - 703 , - 80 , - 3105 , - 562 , - 1667 , - 1812 , - 997 , - 3830 , - 1095 , - 2008 , - 1961 , - 954 , - 3595 , - 668 , - 1389 , - 1150 , - 4559 , - 2400 , - 3889 , - 4418 , - 3987 , - 2596 , - 245 , - 1542 , - 1879 , - 1256 , - 4281 , - 1738 , - 2843 , - 2988 , - 2173 , - 398 , - 2271 , - 3184 , - 3137 , - 2130 , - 163 , - 1844 , - 2565 , - 2326 , - 1127 , - 3576 , - 457 , - 986 , - 555 , - 3772 , - 1421 , - 2718 , - 3055 , - 2432 , - 849 , - 2914 , - 4019 , - 4164 , - 3349 , - 1574 , - 3447 , - 4360 , - 4313 , - 3306 , - 1339 , - 3020 , - 3741 , - 3502 , - 2303 , - 144 , - 1633 , - 2162 , - 1731 , - 340 , - 2597 , - 3894 , - 4231 , - 3608 , - 2025 , - 4090 , - 587 , - 732 , - 4525 , - 2750 , - 15 , - 928 , - 881 , - 4482 , - 2515 , - 4196 , - 309 , - 70 , - 3479 , - 1320 , - 2809 , - 3338 , - 2907 , - 1516 , - 3773 , - 462 , - 799 , - 176 , - 3201 , - 658 , - 1763 , - 1908 , - 1093 , - 3926 , - 1191 , - 2104 , - 2057 , - 1050 , - 3691 , - 764 , - 1485 , - 1246 , - 47 , - 2496 , - 3985 , - 4514 , - 4083 , - 2692 , - 341 , - 1638 , - 1975 , - 1352 , - 4377 , - 1834 , - 2939 , - 3084 , - 2269 , - 494 , - 2367 , - 3280 , - 3233 , - 2226 , - 259 , - 1940 , - 2661 , - 2422 , - 1223 , - 3672 , - 553 , - 1082 , - 651 , - 3868 , - 1517 , - 2814 , - 3151 , - 2528 , - 945 , - 3010 , - 4115 , - 4260 , - 3445 , - 1670 , - 3543 , - 4456 , - 4409 , - 3402 , - 1435 , - 3116 , - 3837 , - 3598 , - 2399 , - 240 , - 1729 , - 2258 , - 1827 , - 436 , - 2693 , - 3990 , - 4327 , - 3704 , - 2121 , - 4186 , - 683 , - 828 , - 13 , - 2846 , - 111 , - 1024 , - 977 , - 4578 , - 2611 , - 4292 , - 405 , - 166 , - 3575 , - 1416 , - 2905 , - 3434 , - 3003 , - 1612 , - 3869 , - 558 , - 895 , - 272 , - 3297 , - 754 , - 1859 , - 2004 , - 1189 , - 4022 , - 1287 , - 2200 , - 2153 , - 1146 , - 3787 , - 860 , - 1581 , - 1342 , - 143 , - 2592 , - 4081 , - 2 , - 4179 , - 2788 , - 437 , - 1734 , - 2071 , - 1448 , - 4473 , - 1930 , - 3035 , - 3180 , - 2365 , - 590 , - 2463 , - 3376 , - 3329 , - 2322 , - 355 , - 2036 , - 2757 , - 2518 , - 1319 , - 3768 , - 649 , - 1178 , - 747 , - 3964 , - 1613 , - 2910 , - 3247 , - 2624 , - 1041 , - 3106 , - 4211 , - 4356 , - 3541 , - 1766 , - 3639 , - 4552 , - 4505 , - 3498 , - 1531 , - 3212 , - 3933 , - 3694 , - 2495 , - 336 , - 1825 , - 2354 , - 1923 , - 532 , - 2789 , - 4086 , - 4423 , - 3800 , - 2217 , - 4282 , - 779 , - 924 , - 109 , - 2942 , - 207 , - 1120 , - 1073 , - 66 , - 2707 , - 4388 , - 501 , - 262 , - 3671 , - 1512 , - 3001 , - 3530 , - 3099 , - 1708 , - 3965 , - 654 , - 991 , - 368 , - 3393 , - 850 , - 1955 , - 2100 , - 1285 , - 4118 , - 1383 , - 2296 , - 2249 , - 1242 , - 3883 , - 956 , - 1677 , - 1438 , - 239 , - 2688 , - 4177 , - 98 , - 4275 , - 2884 , - 533 , - 1830 , - 2167 , - 1544 , - 4569 , - 2026 , - 3131 , - 3276 , - 2461 , - 686 , - 2559 , - 3472 , - 3425 , - 2418 , - 451 , - 2132 , - 2853 , - 2614 , - 1415 , - 3864 , - 745 , - 1274 , - 843 , - 4060 , - 1709 , - 3006 , - 3343 , - 2720 , - 1137 , - 3202 , - 4307 , - 4452 , - 3637 , - 1862 , - 3735 , - 40 , - 4601 , - 3594 , - 1627 , - 3308 , - 4029 , - 3790 , - 2591 , - 432 , - 1921 , - 2450 , - 2019 , - 628 , - 2885 , - 4182 , - 4519 , - 3896 , - 2313 , - 4378 , - 875 , - 1020 , - 205 , - 3038 , - 303 , - 1216 , - 1169 , - 162 , - 2803 , - 4484 , - 597 , - 358 , - 3767 , - 1608 , - 3097 , - 3626 , - 3195 , - 1804 , - 4061 , - 750 , - 1087 , - 464 , - 3489 , - 946 , - 2051 , - 2196 , - 1381 , - 4214 , - 1479 , - 2392 , - 2345 , - 1338 , - 3979 , - 1052 , - 1773 , - 1534 , - 335 , - 2784 , - 4273 , - 194 , - 4371 , - 2980 , - 629 , - 1926 , - 2263 , - 1640 , - 57 , - 2122 , - 3227 , - 3372 , - 2557 , - 782 , - 2655 , - 3568 , - 3521 , - 2514 , - 547 , - 2228 , - 2949 , - 2710 , - 1511 , - 3960 , - 841 , - 1370 , - 939 , - 4156 , - 1805 , - 3102 , - 3439 , - 2816 , - 1233 , - 3298 , - 4403 , - 4548 , - 3733 , - 1958 , - 3831 , - 136 , - 89 , - 3690 , - 1723 , - 3404 , - 4125 , - 3886 , - 2687 , - 528 , - 2017 , - 2546 , - 2115 , - 724 , - 2981 , - 4278 , - 7 , - 3992 , - 2409 , - 4474 , - 971 , - 1116 , - 301 , - 3134 , - 399 , - 1312 , - 1265 , - 258 , - 2899 , - 4580 , - 693 , - 454 , - 3863 , - 1704 , - 3193 , - 3722 , - 3291 , - 1900 , - 4157 , - 846 , - 1183 , - 560 , - 3585 , - 1042 , - 2147 , - 2292 , - 1477 , - 4310 , - 1575 , - 2488 , - 2441 , - 1434 , - 4075 , - 1148 , - 1869 , - 1630 , - 431 , - 2880 , - 4369 , - 290 , - 4467 , - 3076 , - 725 , - 2022 , - 2359 , - 1736 , - 153 , - 2218 , - 3323 , - 3468 , - 2653 , - 878 , - 2751 , - 3664 , - 3617 , - 2610 , - 643 , - 2324 , - 3045 , - 2806 , - 1607 , - 4056 , - 937 , - 1466 , - 1035 , - 4252 , - 1901 , - 3198 , - 3535 , - 2912 , - 1329 , - 3394 , - 4499 , - 36 , - 3829 , - 2054 , - 3927 , - 232 , - 185 , - 3786 , - 1819 , - 3500 , - 4221 , - 3982 , - 2783 , - 624 , - 2113 , - 2642 , - 2211 , - 820 , - 3077 , - 4374 , - 103 , - 4088 , - 2505 , - 4570 , - 1067 , - 1212 , - 397 , - 3230 , - 495 , - 1408 , - 1361 , - 354 , - 2995 , - 68 , - 789 , - 550 , - 3959 , - 1800 , - 3289 , - 3818 , - 3387 , - 1996 , - 4253 , - 942 , - 1279 , - 656 , - 3681 , - 1138 , - 2243 , - 2388 , - 1573 , - 4406 , - 1671 , - 2584 , - 2537 , - 1530 , - 4171 , - 1244 , - 1965 , - 1726 , - 527 , - 2976 , - 4465 , - 386 , - 4563 , - 3172 , - 821 , - 2118 , - 2455 , - 1832 , - 249 , - 2314 , - 3419 , - 3564 , - 2749 , - 974 , - 2847 , - 3760 , - 3713 , - 2706 , - 739 , - 2420 , - 3141 , - 2902 , - 1703 , - 4152 , - 1033 , - 1562 , - 1131 , - 4348 , - 1997 , - 3294 , - 3631 , - 3008 , - 1425 , - 3490 , - 4595 , - 132 , - 3925 , - 2150 , - 4023 , - 328 , - 281 , - 3882 , - 1915 , - 3596 , - 4317 , - 4078 , - 2879 , - 720 , - 2209 , - 2738 , - 2307 , - 916 , - 3173 , - 4470 , - 199 , - 4184 , - 2601 , - 58 , - 1163 , - 1308 , - 493 , - 3326 , - 591 , - 1504 , - 1457 , - 450 , - 3091 , - 164 , - 885 , - 646 , - 4055 , - 1896 , - 3385 , - 3914 , - 3483 , - 2092 , - 4349 , - 1038 , - 1375 , - 752 , - 3777 , - 1234 , - 2339 , - 2484 , - 1669 , - 4502 , - 1767 , - 2680 , - 2633 , - 1626 , - 4267 , - 1340 , - 2061 , - 1822 , - 623 , - 3072 , - 4561 , - 482 , - 51 , - 3268 , - 917 , - 2214 , - 2551 , - 1928 , - 345 , - 2410 , - 3515 , - 3660 , - 2845 , - 1070 , - 2943 , - 3856 , - 3809 , - 2802 , - 835 , - 2516 , - 3237 , - 2998 , - 1799 , - 4248 , - 1129 , - 1658 , - 1227 , - 4444 , - 2093 , - 3390 , - 3727 , - 3104 , - 1521 , - 3586 , - 83 , - 228 , - 4021 , - 2246 , - 4119 , - 424 , - 377 , - 3978 , - 2011 , - 3692 , - 4413 , - 4174 , - 2975 , - 816 , - 2305 , - 2834 , - 2403 , - 1012 , - 3269 , - 4566 , - 295 , - 4280 , - 2697 , - 154 , - 1259 , - 1404 , - 589 , - 3422 , - 687 , - 1600 , - 1553 , - 546 , - 3187 , - 260 , - 981 , - 742 , - 4151 , - 1992 , - 3481 , - 4010 , - 3579 , - 2188 , - 4445 , - 1134 , - 1471 , - 848 , - 3873 , - 1330 , - 2435 , - 2580 , - 1765 , - 4598 , - 1863 , - 2776 , - 2729 , - 1722 , - 4363 , - 1436 , - 2157 , - 1918 , - 719 , - 3168 , - 49 , - 578 , - 147 , - 3364 , - 1013 , - 2310 , - 2647 , - 2024 , - 441 , - 2506 , - 3611 , - 3756 , - 2941 , - 1166 , - 3039 , - 3952 , - 3905 , - 2898 , - 931 , - 2612 , - 3333 , - 3094 , - 1895 , - 4344 , - 1225 , - 1754 , - 1323 , - 4540 , - 2189 , - 3486 , - 3823 , - 3200 , - 1617 , - 3682 , - 179 , - 324 , - 4117 , - 2342 , - 4215 , - 520 , - 473 , - 4074 , - 2107 , - 3788 , - 4509 , - 4270 , - 3071 , - 912 , - 2401 , - 2930 , - 2499 , - 1108 , - 3365 , - 54 , - 391 , - 4376 , - 2793 , - 250 , - 1355 , - 1500 , - 685 , - 3518 , - 783 , - 1696 , - 1649 , - 642 , - 3283 , - 356 , - 1077 , - 838 , - 4247 , - 2088 , - 3577 , - 4106 , - 3675 , - 2284 , - 4541 , - 1230 , - 1567 , - 944 , - 3969 , - 1426 , - 2531 , - 2676 , - 1861 , - 86 , - 1959 , - 2872 , - 2825 , - 1818 , - 4459 , - 1532 , - 2253 , - 2014 , - 815 , - 3264 , - 145 , - 674 , - 243 , - 3460 , - 1109 , - 2406 , - 2743 , - 2120 , - 537 , - 2602 , - 3707 , - 3852 , - 3037 , - 1262 , - 3135 , - 4048 , - 4001 , - 2994 , - 1027 , - 2708 , - 3429 , - 3190 , - 1991 , - 4440 , - 1321 , - 1850 , - 1419 , - 28 , - 2285 , - 3582 , - 3919 , - 3296 , - 1713 , - 3778 , - 275 , - 420 , - 4213 , - 2438 , - 4311 , - 616 , - 569 , - 4170 , - 2203 , - 3884 , - 4605 , - 4366 , - 3167 , - 1008 , - 2497 , - 3026 , - 2595 , - 1204 , - 3461 , - 150 , - 487 , - 4472 , - 2889 , - 346 , - 1451 , - 1596 , - 781 , - 3614 , - 879 , - 1792 , - 1745 , - 738 , - 3379 , - 452 , - 1173 , - 934 , - 4343 , - 2184 , - 3673 , - 4202 , - 3771 , - 2380 , - 29 , - 1326 , - 1663 , - 1040 , - 4065 , - 1522 , - 2627 , - 2772 , - 1957 , - 182 , - 2055 , - 2968 , - 2921 , - 1914 , - 4555 , - 1628 , - 2349 , - 2110 , - 911 , - 3360 , - 241 , - 770 , - 339 , - 3556 , - 1205 , - 2502 , - 2839 , - 2216 , - 633 , - 2698 , - 3803 , - 3948 , - 3133 , - 1358 , - 3231 , - 4144 , - 4097 , - 3090 , - 1123 , - 2804 , - 3525 , - 3286 , - 2087 , - 4536 , - 1417 , - 1946 , - 1515 , - 124 , - 2381 , - 3678 , - 4015 , - 3392 , - 1809 , - 3874 , - 371 , - 516 , - 4309 , - 2534 , - 4407 , - 712 , - 665 , - 4266 , - 2299 , - 3980 , - 93 , - 4462 , - 3263 , - 1104 , - 2593 , - 3122 , - 2691 , - 1300 , - 3557 , - 246 , - 583 , - 4568 , - 2985 , - 442 , - 1547 , - 1692 , - 877 , - 3710 , - 975 , - 1888 , - 1841 , - 834 , - 3475 , - 548 , - 1269 , - 1030 , - 4439 , - 2280 , - 3769 , - 4298 , - 3867 , - 2476 , - 125 , - 1422 , - 1759 , - 1136 , - 4161 , - 1618 , - 2723 , - 2868 , - 2053 , - 278 , - 2151 , - 3064 , - 3017 , - 2010 , - 43 , - 1724 , - 2445 , - 2206 , - 1007 , - 3456 , - 337 , - 866 , - 435 , - 3652 , - 1301 , - 2598 , - 2935 , - 2312 , - 729 , - 2794 , - 3899 , - 4044 , - 3229 , - 1454 , - 3327 , - 4240 , - 4193 , - 3186 , - 1219 , - 2900 , - 3621 , - 3382 , - 2183 , - 24 , - 1513 , - 2042 , - 1611 , - 220 , - 2477 , - 3774 , - 4111 , - 3488 , - 1905 , - 3970 , - 467 , - 612 , - 4405 , - 2630 , - 4503 , - 808 , - 761 , - 4362 , - 2395 , - 4076 , - 189 , - 4558 , - 3359 , - 1200 , - 2689 , - 3218 , - 2787 , - 1396 , - 3653 , - 342 , - 679 , - 56 , - 3081 , - 538 , - 1643 , - 1788 , - 973 , - 3806 , - 1071 , - 1984 , - 1937 , - 930 , - 3571 , - 644 , - 1365 , - 1126 , - 4535 , - 2376 , - 3865 , - 4394 , - 3963 , - 2572 , - 221 , - 1518 , - 1855 , - 1232 , - 4257 , - 1714 , - 2819 , - 2964 , - 2149 , - 374 , - 2247 , - 3160 , - 3113 , - 2106 , - 139 , - 1820 , - 2541 , - 2302 , - 1103 , - 3552 , - 433 , - 962 , - 531 , - 3748 , - 1397 , - 2694 , - 3031 , - 2408 , - 825 , - 2890 , - 3995 , - 4140 , - 3325 , - 1550 , - 3423 , - 4336 , - 4289 , - 3282 , - 1315 , - 2996 , - 3717 , - 3478 , - 2279 , - 120 , - 1609 , - 2138 , - 1707 , - 316 , - 2573 , - 3870 , - 4207 , - 3584 , - 2001 , - 4066 , - 563 , - 708 , - 4501 , - 2726 , - 4599 , - 904 , - 857 , - 4458 , - 2491 , - 4172 , - 285 , - 46 , - 3455 , - 1296 , - 2785 , - 3314 , - 2883 , - 1492 , - 3749 , - 438 , - 775 , - 152 , - 3177 , - 634 , - 1739 , - 1884 , - 1069 , - 3902 , - 1167 , - 2080 , - 2033 , - 1026 , - 3667 , - 740 , - 1461 , - 1222 , - 23 , - 2472 , - 3961 , - 4490 , - 4059 , - 2668 , - 317 , - 1614 , - 1951 , - 1328 , - 4353 , - 1810 , - 2915 , - 3060 , - 2245 , - 470 , - 2343 , - 3256 , - 3209 , - 2202 , - 235 , - 1916 , - 2637 , - 2398 , - 1199 , - 3648 , - 529 , - 1058 , - 627 , - 3844 , - 1493 , - 2790 , - 3127 , - 2504 , - 921 , - 2986 , - 4091 , - 4236 , - 3421 , - 1646 , - 3519 , - 4432 , - 4385 , - 3378 , - 1411 , - 3092 , - 3813 , - 3574 , - 2375 , - 216 , - 1705 , - 2234 , - 1803 , - 412 , - 2669 , - 3966 , - 4303 , - 3680 , - 2097 , - 4162 , - 659 , - 804 , - 4597 , - 2822 , - 87 , - 1000 , - 953 , - 4554 , - 2587 , - 4268 , - 381 , - 142 , - 3551 , - 1392 , - 2881 , - 3410 , - 2979 , - 1588 , - 3845 , - 534 , - 871 , - 248 , - 3273 , - 730 , - 1835 , - 1980 , - 1165 , - 3998 , - 1263 , - 2176 , - 2129 , - 1122 , - 3763 , - 836 , - 1557 , - 1318 , - 119 , - 2568 , - 4057 , - 4586 , - 4155 , - 2764 , - 413 , - 1710 , - 2047 , - 1424 , - 4449 , - 1906 , - 3011 , - 3156 , - 2341 , - 566 , - 2439 , - 3352 , - 3305 , - 2298 , - 331 , - 2012 , - 2733 , - 2494 , - 1295 , - 3744 , - 625 , - 1154 , - 723 , - 3940 , - 1589 , - 2886 , - 3223 , - 2600 , - 1017 , - 3082 , - 4187 , - 4332 , - 3517 , - 1742 , - 3615 , - 4528 , - 4481 , - 3474 , - 1507 , - 3188 , - 3909 , - 3670 , - 2471 , - 312 , - 1801 , - 2330 , - 1899 , - 508 , - 2765 , - 4062 , - 4399 , - 3776 , - 2193 , - 4258 , - 755 , - 900 , - 85 , - 2918 , - 183 , - 1096 , - 1049 , - 42 , - 2683 , - 4364 , - 477 , - 238 , - 3647 , - 1488 , - 2977 , - 3506 , - 3075 , - 1684 , - 3941 , - 630 , - 967 , - 344 , - 3369 , - 826 , - 1931 , - 2076 , - 1261 , - 4094 , - 1359 , - 2272 , - 2225 , - 1218 , - 3859 , - 932 , - 1653 , - 1414 , - 215 , - 2664 , - 4153 , - 74 , - 4251 , - 2860 , - 509 , - 1806 , - 2143 , - 1520 , - 4545 , - 2002 , - 3107 , - 3252 , - 2437 , - 662 , - 2535 , - 3448 , - 3401 , - 2394 , - 427 , - 2108 , - 2829 , - 2590 , - 1391 , - 3840 , - 721 , - 1250 , - 819 , - 4036 , - 1685 , - 2982 , - 3319 , - 2696 , - 1113 , - 3178 , - 4283 , - 4428 , - 3613 , - 1838 , - 3711 , - 16 , - 4577 , - 3570 , - 1603 , - 3284 , - 4005 , - 3766 , - 2567 , - 408 , - 1897 , - 2426 , - 1995 , - 604 , - 2861 , - 4158 , - 4495 , - 3872 , - 2289 , - 4354 , - 851 , - 996 , - 181 , - 3014 , - 279 , - 1192 , - 1145 , - 138 , - 2779 , - 4460 , - 573 , - 334 , - 3743 , - 1584 , - 3073 , - 3602 , - 3171 , - 1780 , - 4037 , - 726 , - 1063 , - 440 , - 3465 , - 922 , - 2027 , - 2172 , - 1357 , - 4190 , - 1455 , - 2368 , - 2321 , - 1314 , - 3955 , - 1028 , - 1749 , - 1510 , - 311 , - 2760 , - 4249 , - 170 , - 4347 , - 2956 , - 605 , - 1902 , - 2239 , - 1616 , - 33 , - 2098 , - 3203 , - 3348 , - 2533 , - 758 , - 2631 , - 3544 , - 3497 , - 2490 , - 523 , - 2204 , - 2925 , - 2686 , - 1487 , - 3936 , - 817 , - 1346 , - 915 , - 4132 , - 1781 , - 3078 , - 3415 , - 2792 , - 1209 , - 3274 , - 4379 , - 4524 , - 3709 , - 1934 , - 3807 , - 112 , - 65 , - 3666 , - 1699 , - 3380 , - 4101 , - 3862 , - 2663 , - 504 , - 1993 , - 2522 , - 2091 , - 700 , - 2957 , - 4254 , - 4591 , - 3968 , - 2385 , - 4450 , - 947 , - 1092 , - 277 , - 3110 , - 375 , - 1288 , - 1241 , - 234 , - 2875 , - 4556 , - 669 , - 430 , - 3839 , - 1680 , - 3169 , - 3698 , - 3267 , - 1876 , - 4133 , - 822 , - 1159 , - 536 , - 3561 , - 1018 , - 2123 , - 2268 , - 1453 , - 4286 , - 1551 , - 2464 , - 2417 , - 1410 , - 4051 , - 1124 , - 1845 , - 1606 , - 407 , - 2856 , - 4345 , - 266 , - 4443 , - 3052 , - 701 , - 1998 , - 2335 , - 1712 , - 129 , - 2194 , - 3299 , - 3444 , - 2629 , - 854 , - 2727 , - 3640 , - 3593 , - 2586 , - 619 , - 2300 , - 3021 , - 2782 , - 1583 , - 4032 , - 913 , - 1442 , - 1011 , - 4228 , - 1877 , - 3174 , - 3511 , - 2888 , - 1305 , - 3370 , - 4475 , - 12 , - 3805 , - 2030 , - 3903 , - 208 , - 161 , - 3762 , - 1795 , - 3476 , - 4197 , - 3958 , - 2759 , - 600 , - 2089 , - 2618 , - 2187 , - 796 , - 3053 , - 4350 , - 79 , - 4064 , - 2481 , - 4546 , - 1043 , - 1188 , - 373 , - 3206 , - 471 , - 1384 , - 1337 , - 330 , - 2971 , - 44 , - 765 , - 526 , - 3935 , - 1776 , - 3265 , - 3794 , - 3363 , - 1972 , - 4229 , - 918 , - 1255 , - 632 , - 3657 , - 1114 , - 2219 , - 2364 , - 1549 , - 4382 , - 1647 , - 2560 , - 2513 , - 1506 , - 4147 , - 1220 , - 1941 , - 1702 , - 503 , - 2952 , - 4441 , - 362 , - 4539 , - 3148 , - 797 , - 2094 , - 2431 , - 1808 , - 225 , - 2290 , - 3395 , - 3540 , - 2725 , - 950 , - 2823 , - 3736 , - 3689 , - 2682 , - 715 , - 2396 , - 3117 , - 2878 , - 1679 , - 4128 , - 1009 , - 1538 , - 1107 , - 4324 , - 1973 , - 3270 , - 3607 , - 2984 , - 1401 , - 3466 , - 4571 , - 108 , - 3901 , - 2126 , - 3999 , - 304 , - 257 , - 3858 , - 1891 , - 3572 , - 4293 , - 4054 , - 2855 , - 696 , - 2185 , - 2714 , - 2283 , - 892 , - 3149 , - 4446 , - 175 , - 4160 , - 2577 , - 34 , - 1139 , - 1284 , - 469 , - 3302 , - 567 , - 1480 , - 1433 , - 426 , - 3067 , - 140 , - 861 , - 622 , - 4031 , - 1872 , - 3361 , - 3890 , - 3459 , - 2068 , - 4325 , - 1014 , - 1351 , - 728 , - 3753 , - 1210 , - 2315 , - 2460 , - 1645 , - 4478 , - 1743 , - 2656 , - 2609 , - 1602 , - 4243 , - 1316 , - 2037 , - 1798 , - 599 , - 3048 , - 4537 , - 458 , - 27 , - 3244 , - 893 , - 2190 , - 2527 , - 1904 , - 321 , - 2386 , - 3491 , - 3636 , - 2821 , - 1046 , - 2919 , - 3832 , - 3785 , - 2778 , - 811 , - 2492 , - 3213 , - 2974 , - 1775 , - 4224 , - 1105 , - 1634 , - 1203 , - 4420 , - 2069 , - 3366 , - 3703 , - 3080 , - 1497 , - 3562 , - 59 , - 204 , - 3997 , - 2222 , - 4095 , - 400 , - 353 , - 3954 , - 1987 , - 3668 , - 4389 , - 4150 , - 2951 , - 792 , - 2281 , - 2810 , - 2379 , - 988 , - 3245 , - 4542 , - 271 , - 4256 , - 2673 , - 130 , - 1235 , - 1380 , - 565 , - 3398 , - 663 , - 1576 , - 1529 , - 522 , - 3163 , - 236 , - 957 , - 718 , - 4127 , - 1968 , - 3457 , - 3986 , - 3555 , - 2164 , - 4421 , - 1110 , - 1447 , - 824 , - 3849 , - 1306 , - 2411 , - 2556 , - 1741 , - 4574 , - 1839 , - 2752 , - 2705 , - 1698 , - 4339 , - 1412 , - 2133 , - 1894 , - 695 , - 3144 , - 25 , - 554 , - 123 , - 3340 , - 989 , - 2286 , - 2623 , - 2000 , - 417 , - 2482 , - 3587 , - 3732 , - 2917 , - 1142 , - 3015 , - 3928 , - 3881 , - 2874 , - 907 , - 2588 , - 3309 , - 3070 , - 1871 , - 4320 , - 1201 , - 1730 , - 1299 , - 4516 , - 2165 , - 3462 , - 3799 , - 3176 , - 1593 , - 3658 , - 155 , - 300 , - 4093 , - 2318 , - 4191 , - 496 , - 449 , - 4050 , - 2083 , - 3764 , - 4485 , - 4246 , - 3047 , - 888 , - 2377 , - 2906 , - 2475 , - 1084 , - 3341 , - 30 , - 367 , - 4352 , - 2769 , - 226 , - 1331 , - 1476 , - 661 , - 3494 , - 759 , - 1672 , - 1625 , - 618 , - 3259 , - 332 , - 1053 , - 814 , - 4223 , - 2064 , - 3553 , - 4082 , - 3651 , - 2260 , - 4517 , - 1206 , - 1543 , - 920 , - 3945 , - 1402 , - 2507 , - 2652 , - 1837 , - 62 , - 1935 , - 2848 , - 2801 , - 1794 , - 4435 , - 1508 , - 2229 , - 1990 , - 791 , - 3240 , - 121 , - 650 , - 219 , - 3436 , - 1085 , - 2382 , - 2719 , - 2096 , - 513 , - 2578 , - 3683 , - 3828 , - 3013 , - 1238 , - 3111 , - 4024 , - 3977 , - 2970 , - 1003 , - 2684 , - 3405 , - 3166 , - 1967 , - 4416 , - 1297 , - 1826 , - 1395 , - 4 , - 2261 , - 3558 , - 3895 , - 3272 , - 1689 , - 3754 , - 251 , - 396 , - 4189 , - 2414 , - 4287 , - 592 , - 545 , - 4146 , - 2179 , - 3860 , - 4581 , - 4342 , - 3143 , - 984 , - 2473 , - 3002 , - 2571 , - 1180 , - 3437 , - 126 , - 463 , - 4448 , - 2865 , - 322 , - 1427 , - 1572 , - 757 , - 3590 , - 855 , - 1768 , - 1721 , - 714 , - 3355 , - 428 , - 1149 , - 910 , - 4319 , - 2160 , - 3649 , - 4178 , - 3747 , - 2356 , - 5 , - 1302 , - 1639 , - 1016 , - 4041 , - 1498 , - 2603 , - 2748 , - 1933 , - 158 , - 2031 , - 2944 , - 2897 , - 1890 , - 4531 , - 1604 , - 2325 , - 2086 , - 887 , - 3336 , - 217 , - 746 , - 315 , - 3532 , - 1181 , - 2478 , - 2815 , - 2192 , - 609 , - 2674 , - 3779 , - 3924 , - 3109 , - 1334 , - 3207 , - 4120 , - 4073 , - 3066 , - 1099 , - 2780 , - 3501 , - 3262 , - 2063 , - 4512 , - 1393 , - 1922 , - 1491 , - 100 , - 2357 , - 3654 , - 3991 , - 3368 , - 1785 , - 3850 , - 347 , - 492 , - 4285 , - 2510 , - 4383 , - 688 , - 641 , - 4242 , - 2275 , - 3956 , - 69 , - 4438 , - 3239 , - 1080 , - 2569 , - 3098 , - 2667 , - 1276 , - 3533 , - 222 , - 559 , - 4544 , - 2961 , - 418 , - 1523 , - 1668 , - 853 , - 3686 , - 951 , - 1864 , - 1817 , - 810 , - 3451 , - 524 , - 1245 , - 1006 , - 4415 , - 2256 , - 3745 , - 4274 , - 3843 , - 2452 , - 101 , - 1398 , - 1735 , - 1112 , - 4137 , - 1594 , - 2699 , - 2844 , - 2029 , - 254 , - 2127 , - 3040 , - 2993 , - 1986 , - 19 , - 1700 , - 2421 , - 2182 , - 983 , - 3432 , - 313 , - 842 , - 411 , - 3628 , - 1277 , - 2574 , - 2911 , - 2288 , - 705 , - 2770 , - 3875 , - 4020 , - 3205 , - 1430 , - 3303 , - 4216 , - 4169 , - 3162 , - 1195 , - 2876 , - 3597 , - 3358 , - 2159 , - 0 , - 2995 , - 4530 , - 1101 , - 3220 , - 2711 , - 742 , - 3153 , - 1768 , - 2427 , - 1626 , - 533 , - 316 , - 2143 , - 2510 , - 2585 , - 3536 , - 1859 , - 3394 , - 4637 , - 2084 , - 1575 , - 4278 , - 2017 , - 632 , - 1291 , - 490 , - 4069 , - 3852 , - 1007 , - 1374 , - 1449 , - 2400 , - 723 , - 2258 , - 3501 , - 948 , - 439 , - 3142 , - 881 , - 4168 , - 155 , - 4026 , - 2933 , - 2716 , - 4543 , - 238 , - 313 , - 1264 , - 4259 , - 1122 , - 2365 , - 4484 , - 3975 , - 2006 , - 4417 , - 3032 , - 3691 , - 2890 , - 1797 , - 1580 , - 3407 , - 3774 , - 3849 , - 128 , - 3123 , - 4658 , - 1229 , - 3348 , - 2839 , - 870 , - 3281 , - 1896 , - 2555 , - 1754 , - 661 , - 444 , - 2271 , - 2638 , - 2713 , - 3664 , - 1987 , - 3522 , - 93 , - 2212 , - 1703 , - 4406 , - 2145 , - 760 , - 1419 , - 618 , - 4197 , - 3980 , - 1135 , - 1502 , - 1577 , - 2528 , - 851 , - 2386 , - 3629 , - 1076 , - 567 , - 3270 , - 1009 , - 4296 , - 283 , - 4154 , - 3061 , - 2844 , - 4671 , - 366 , - 441 , - 1392 , - 4387 , - 1250 , - 2493 , - 4612 , - 4103 , - 2134 , - 4545 , - 3160 , - 3819 , - 3018 , - 1925 , - 1708 , - 3535 , - 3902 , - 3977 , - 256 , - 3251 , - 114 , - 1357 , - 3476 , - 2967 , - 998 , - 3409 , - 2024 , - 2683 , - 1882 , - 789 , - 572 , - 2399 , - 2766 , - 2841 , - 3792 , - 2115 , - 3650 , - 221 , - 2340 , - 1831 , - 4534 , - 2273 , - 888 , - 1547 , - 746 , - 4325 , - 4108 , - 1263 , - 1630 , - 1705 , - 2656 , - 979 , - 2514 , - 3757 , - 1204 , - 695 , - 3398 , - 1137 , - 4424 , - 411 , - 4282 , - 3189 , - 2972 , - 127 , - 494 , - 569 , - 1520 , - 4515 , - 1378 , - 2621 , - 68 , - 4231 , - 2262 , - 1 , - 3288 , - 3947 , - 3146 , - 2053 , - 1836 , - 3663 , - 4030 , - 4105 , - 384 , - 3379 , - 242 , - 1485 , - 3604 , - 3095 , - 1126 , - 3537 , - 2152 , - 2811 , - 2010 , - 917 , - 700 , - 2527 , - 2894 , - 2969 , - 3920 , - 2243 , - 3778 , - 349 , - 2468 , - 1959 , - 4662 , - 2401 , - 1016 , - 1675 , - 874 , - 4453 , - 4236 , - 1391 , - 1758 , - 1833 , - 2784 , - 1107 , - 2642 , - 3885 , - 1332 , - 823 , - 3526 , - 1265 , - 4552 , - 539 , - 4410 , - 3317 , - 3100 , - 255 , - 622 , - 697 , - 1648 , - 4643 , - 1506 , - 2749 , - 196 , - 4359 , - 2390 , - 129 , - 3416 , - 4075 , - 3274 , - 2181 , - 1964 , - 3791 , - 4158 , - 4233 , - 512 , - 3507 , - 370 , - 1613 , - 3732 , - 3223 , - 1254 , - 3665 , - 2280 , - 2939 , - 2138 , - 1045 , - 828 , - 2655 , - 3022 , - 3097 , - 4048 , - 2371 , - 3906 , - 477 , - 2596 , - 2087 , - 118 , - 2529 , - 1144 , - 1803 , - 1002 , - 4581 , - 4364 , - 1519 , - 1886 , - 1961 , - 2912 , - 1235 , - 2770 , - 4013 , - 1460 , - 951 , - 3654 , - 1393 , - 8 , - 667 , - 4538 , - 3445 , - 3228 , - 383 , - 750 , - 825 , - 1776 , - 99 , - 1634 , - 2877 , - 324 , - 4487 , - 2518 , - 257 , - 3544 , - 4203 , - 3402 , - 2309 , - 2092 , - 3919 , - 4286 , - 4361 , - 640 , - 3635 , - 498 , - 1741 , - 3860 , - 3351 , - 1382 , - 3793 , - 2408 , - 3067 , - 2266 , - 1173 , - 956 , - 2783 , - 3150 , - 3225 , - 4176 , - 2499 , - 4034 , - 605 , - 2724 , - 2215 , - 246 , - 2657 , - 1272 , - 1931 , - 1130 , - 37 , - 4492 , - 1647 , - 2014 , - 2089 , - 3040 , - 1363 , - 2898 , - 4141 , - 1588 , - 1079 , - 3782 , - 1521 , - 136 , - 795 , - 4666 , - 3573 , - 3356 , - 511 , - 878 , - 953 , - 1904 , - 227 , - 1762 , - 3005 , - 452 , - 4615 , - 2646 , - 385 , - 3672 , - 4331 , - 3530 , - 2437 , - 2220 , - 4047 , - 4414 , - 4489 , - 768 , - 3763 , - 626 , - 1869 , - 3988 , - 3479 , - 1510 , - 3921 , - 2536 , - 3195 , - 2394 , - 1301 , - 1084 , - 2911 , - 3278 , - 3353 , - 4304 , - 2627 , - 4162 , - 733 , - 2852 , - 2343 , - 374 , - 2785 , - 1400 , - 2059 , - 1258 , - 165 , - 4620 , - 1775 , - 2142 , - 2217 , - 3168 , - 1491 , - 3026 , - 4269 , - 1716 , - 1207 , - 3910 , - 1649 , - 264 , - 923 , - 122 , - 3701 , - 3484 , - 639 , - 1006 , - 1081 , - 2032 , - 355 , - 1890 , - 3133 , - 580 , - 71 , - 2774 , - 513 , - 3800 , - 4459 , - 3658 , - 2565 , - 2348 , - 4175 , - 4542 , - 4617 , - 896 , - 3891 , - 754 , - 1997 , - 4116 , - 3607 , - 1638 , - 4049 , - 2664 , - 3323 , - 2522 , - 1429 , - 1212 , - 3039 , - 3406 , - 3481 , - 4432 , - 2755 , - 4290 , - 861 , - 2980 , - 2471 , - 502 , - 2913 , - 1528 , - 2187 , - 1386 , - 293 , - 76 , - 1903 , - 2270 , - 2345 , - 3296 , - 1619 , - 3154 , - 4397 , - 1844 , - 1335 , - 4038 , - 1777 , - 392 , - 1051 , - 250 , - 3829 , - 3612 , - 767 , - 1134 , - 1209 , - 2160 , - 483 , - 2018 , - 3261 , - 708 , - 199 , - 2902 , - 641 , - 3928 , - 4587 , - 3786 , - 2693 , - 2476 , - 4303 , - 4670 , - 73 , - 1024 , - 4019 , - 882 , - 2125 , - 4244 , - 3735 , - 1766 , - 4177 , - 2792 , - 3451 , - 2650 , - 1557 , - 1340 , - 3167 , - 3534 , - 3609 , - 4560 , - 2883 , - 4418 , - 989 , - 3108 , - 2599 , - 630 , - 3041 , - 1656 , - 2315 , - 1514 , - 421 , - 204 , - 2031 , - 2398 , - 2473 , - 3424 , - 1747 , - 3282 , - 4525 , - 1972 , - 1463 , - 4166 , - 1905 , - 520 , - 1179 , - 378 , - 3957 , - 3740 , - 895 , - 1262 , - 1337 , - 2288 , - 611 , - 2146 , - 3389 , - 836 , - 327 , - 3030 , - 769 , - 4056 , - 43 , - 3914 , - 2821 , - 2604 , - 4431 , - 126 , - 201 , - 1152 , - 4147 , - 1010 , - 2253 , - 4372 , - 3863 , - 1894 , - 4305 , - 2920 , - 3579 , - 2778 , - 1685 , - 1468 , - 3295 , - 3662 , - 3737 , - 16 , - 3011 , - 4546 , - 1117 , - 3236 , - 2727 , - 758 , - 3169 , - 1784 , - 2443 , - 1642 , - 549 , - 332 , - 2159 , - 2526 , - 2601 , - 3552 , - 1875 , - 3410 , - 4653 , - 2100 , - 1591 , - 4294 , - 2033 , - 648 , - 1307 , - 506 , - 4085 , - 3868 , - 1023 , - 1390 , - 1465 , - 2416 , - 739 , - 2274 , - 3517 , - 964 , - 455 , - 3158 , - 897 , - 4184 , - 171 , - 4042 , - 2949 , - 2732 , - 4559 , - 254 , - 329 , - 1280 , - 4275 , - 1138 , - 2381 , - 4500 , - 3991 , - 2022 , - 4433 , - 3048 , - 3707 , - 2906 , - 1813 , - 1596 , - 3423 , - 3790 , - 3865 , - 144 , - 3139 , - 2 , - 1245 , - 3364 , - 2855 , - 886 , - 3297 , - 1912 , - 2571 , - 1770 , - 677 , - 460 , - 2287 , - 2654 , - 2729 , - 3680 , - 2003 , - 3538 , - 109 , - 2228 , - 1719 , - 4422 , - 2161 , - 776 , - 1435 , - 634 , - 4213 , - 3996 , - 1151 , - 1518 , - 1593 , - 2544 , - 867 , - 2402 , - 3645 , - 1092 , - 583 , - 3286 , - 1025 , - 4312 , - 299 , - 4170 , - 3077 , - 2860 , - 15 , - 382 , - 457 , - 1408 , - 4403 , - 1266 , - 2509 , - 4628 , - 4119 , - 2150 , - 4561 , - 3176 , - 3835 , - 3034 , - 1941 , - 1724 , - 3551 , - 3918 , - 3993 , - 272 , - 3267 , - 130 , - 1373 , - 3492 , - 2983 , - 1014 , - 3425 , - 2040 , - 2699 , - 1898 , - 805 , - 588 , - 2415 , - 2782 , - 2857 , - 3808 , - 2131 , - 3666 , - 237 , - 2356 , - 1847 , - 4550 , - 2289 , - 904 , - 1563 , - 762 , - 4341 , - 4124 , - 1279 , - 1646 , - 1721 , - 2672 , - 995 , - 2530 , - 3773 , - 1220 , - 711 , - 3414 , - 1153 , - 4440 , - 427 , - 4298 , - 3205 , - 2988 , - 143 , - 510 , - 585 , - 1536 , - 4531 , - 1394 , - 2637 , - 84 , - 4247 , - 2278 , - 17 , - 3304 , - 3963 , - 3162 , - 2069 , - 1852 , - 3679 , - 4046 , - 4121 , - 400 , - 3395 , - 258 , - 1501 , - 3620 , - 3111 , - 1142 , - 3553 , - 2168 , - 2827 , - 2026 , - 933 , - 716 , - 2543 , - 2910 , - 2985 , - 3936 , - 2259 , - 3794 , - 365 , - 2484 , - 1975 , - 6 , - 2417 , - 1032 , - 1691 , - 890 , - 4469 , - 4252 , - 1407 , - 1774 , - 1849 , - 2800 , - 1123 , - 2658 , - 3901 , - 1348 , - 839 , - 3542 , - 1281 , - 4568 , - 555 , - 4426 , - 3333 , - 3116 , - 271 , - 638 , - 713 , - 1664 , - 4659 , - 1522 , - 2765 , - 212 , - 4375 , - 2406 , - 145 , - 3432 , - 4091 , - 3290 , - 2197 , - 1980 , - 3807 , - 4174 , - 4249 , - 528 , - 3523 , - 386 , - 1629 , - 3748 , - 3239 , - 1270 , - 3681 , - 2296 , - 2955 , - 2154 , - 1061 , - 844 , - 2671 , - 3038 , - 3113 , - 4064 , - 2387 , - 3922 , - 493 , - 2612 , - 2103 , - 134 , - 2545 , - 1160 , - 1819 , - 1018 , - 4597 , - 4380 , - 1535 , - 1902 , - 1977 , - 2928 , - 1251 , - 2786 , - 4029 , - 1476 , - 967 , - 3670 , - 1409 , - 24 , - 683 , - 4554 , - 3461 , - 3244 , - 399 , - 766 , - 841 , - 1792 , - 115 , - 1650 , - 2893 , - 340 , - 4503 , - 2534 , - 273 , - 3560 , - 4219 , - 3418 , - 2325 , - 2108 , - 3935 , - 4302 , - 4377 , - 656 , - 3651 , - 514 , - 1757 , - 3876 , - 3367 , - 1398 , - 3809 , - 2424 , - 3083 , - 2282 , - 1189 , - 972 , - 2799 , - 3166 , - 3241 , - 4192 , - 2515 , - 4050 , - 621 , - 2740 , - 2231 , - 262 , - 2673 , - 1288 , - 1947 , - 1146 , - 53 , - 4508 , - 1663 , - 2030 , - 2105 , - 3056 , - 1379 , - 2914 , - 4157 , - 1604 , - 1095 , - 3798 , - 1537 , - 152 , - 811 , - 10 , - 3589 , - 3372 , - 527 , - 894 , - 969 , - 1920 , - 243 , - 1778 , - 3021 , - 468 , - 4631 , - 2662 , - 401 , - 3688 , - 4347 , - 3546 , - 2453 , - 2236 , - 4063 , - 4430 , - 4505 , - 784 , - 3779 , - 642 , - 1885 , - 4004 , - 3495 , - 1526 , - 3937 , - 2552 , - 3211 , - 2410 , - 1317 , - 1100 , - 2927 , - 3294 , - 3369 , - 4320 , - 2643 , - 4178 , - 749 , - 2868 , - 2359 , - 390 , - 2801 , - 1416 , - 2075 , - 1274 , - 181 , - 4636 , - 1791 , - 2158 , - 2233 , - 3184 , - 1507 , - 3042 , - 4285 , - 1732 , - 1223 , - 3926 , - 1665 , - 280 , - 939 , - 138 , - 3717 , - 3500 , - 655 , - 1022 , - 1097 , - 2048 , - 371 , - 1906 , - 3149 , - 596 , - 87 , - 2790 , - 529 , - 3816 , - 4475 , - 3674 , - 2581 , - 2364 , - 4191 , - 4558 , - 4633 , - 912 , - 3907 , - 770 , - 2013 , - 4132 , - 3623 , - 1654 , - 4065 , - 2680 , - 3339 , - 2538 , - 1445 , - 1228 , - 3055 , - 3422 , - 3497 , - 4448 , - 2771 , - 4306 , - 877 , - 2996 , - 2487 , - 518 , - 2929 , - 1544 , - 2203 , - 1402 , - 309 , - 92 , - 1919 , - 2286 , - 2361 , - 3312 , - 1635 , - 3170 , - 4413 , - 1860 , - 1351 , - 4054 , - 1793 , - 408 , - 1067 , - 266 , - 3845 , - 3628 , - 783 , - 1150 , - 1225 , - 2176 , - 499 , - 2034 , - 3277 , - 724 , - 215 , - 2918 , - 657 , - 3944 , - 4603 , - 3802 , - 2709 , - 2492 , - 4319 , - 14 , - 89 , - 1040 , - 4035 , - 898 , - 2141 , - 4260 , - 3751 , - 1782 , - 4193 , - 2808 , - 3467 , - 2666 , - 1573 , - 1356 , - 3183 , - 3550 , - 3625 , - 4576 , - 2899 , - 4434 , - 1005 , - 3124 , - 2615 , - 646 , - 3057 , - 1672 , - 2331 , - 1530 , - 437 , - 220 , - 2047 , - 2414 , - 2489 , - 3440 , - 1763 , - 3298 , - 4541 , - 1988 , - 1479 , - 4182 , - 1921 , - 536 , - 1195 , - 394 , - 3973 , - 3756 , - 911 , - 1278 , - 1353 , - 2304 , - 627 , - 2162 , - 3405 , - 852 , - 343 , - 3046 , - 785 , - 4072 , - 59 , - 3930 , - 2837 , - 2620 , - 4447 , - 142 , - 217 , - 1168 , - 4163 , - 1026 , - 2269 , - 4388 , - 3879 , - 1910 , - 4321 , - 2936 , - 3595 , - 2794 , - 1701 , - 1484 , - 3311 , - 3678 , - 3753 , - 32 , - 3027 , - 4562 , - 1133 , - 3252 , - 2743 , - 774 , - 3185 , - 1800 , - 2459 , - 1658 , - 565 , - 348 , - 2175 , - 2542 , - 2617 , - 3568 , - 1891 , - 3426 , - 4669 , - 2116 , - 1607 , - 4310 , - 2049 , - 664 , - 1323 , - 522 , - 4101 , - 3884 , - 1039 , - 1406 , - 1481 , - 2432 , - 755 , - 2290 , - 3533 , - 980 , - 471 , - 3174 , - 913 , - 4200 , - 187 , - 4058 , - 2965 , - 2748 , - 4575 , - 270 , - 345 , - 1296 , - 4291 , - 1154 , - 2397 , - 4516 , - 4007 , - 2038 , - 4449 , - 3064 , - 3723 , - 2922 , - 1829 , - 1612 , - 3439 , - 3806 , - 3881 , - 160 , - 3155 , - 18 , - 1261 , - 3380 , - 2871 , - 902 , - 3313 , - 1928 , - 2587 , - 1786 , - 693 , - 476 , - 2303 , - 2670 , - 2745 , - 3696 , - 2019 , - 3554 , - 125 , - 2244 , - 1735 , - 4438 , - 2177 , - 792 , - 1451 , - 650 , - 4229 , - 4012 , - 1167 , - 1534 , - 1609 , - 2560 , - 883 , - 2418 , - 3661 , - 1108 , - 599 , - 3302 , - 1041 , - 4328 , - 315 , - 4186 , - 3093 , - 2876 , - 31 , - 398 , - 473 , - 1424 , - 4419 , - 1282 , - 2525 , - 4644 , - 4135 , - 2166 , - 4577 , - 3192 , - 3851 , - 3050 , - 1957 , - 1740 , - 3567 , - 3934 , - 4009 , - 288 , - 3283 , - 146 , - 1389 , - 3508 , - 2999 , - 1030 , - 3441 , - 2056 , - 2715 , - 1914 , - 821 , - 604 , - 2431 , - 2798 , - 2873 , - 3824 , - 2147 , - 3682 , - 253 , - 2372 , - 1863 , - 4566 , - 2305 , - 920 , - 1579 , - 778 , - 4357 , - 4140 , - 1295 , - 1662 , - 1737 , - 2688 , - 1011 , - 2546 , - 3789 , - 1236 , - 727 , - 3430 , - 1169 , - 4456 , - 443 , - 4314 , - 3221 , - 3004 , - 159 , - 526 , - 601 , - 1552 , - 4547 , - 1410 , - 2653 , - 100 , - 4263 , - 2294 , - 33 , - 3320 , - 3979 , - 3178 , - 2085 , - 1868 , - 3695 , - 4062 , - 4137 , - 416 , - 3411 , - 274 , - 1517 , - 3636 , - 3127 , - 1158 , - 3569 , - 2184 , - 2843 , - 2042 , - 949 , - 732 , - 2559 , - 2926 , - 3001 , - 3952 , - 2275 , - 3810 , - 381 , - 2500 , - 1991 , - 22 , - 2433 , - 1048 , - 1707 , - 906 , - 4485 , - 4268 , - 1423 , - 1790 , - 1865 , - 2816 , - 1139 , - 2674 , - 3917 , - 1364 , - 855 , - 3558 , - 1297 , - 4584 , - 571 , - 4442 , - 3349 , - 3132 , - 287 , - 654 , - 729 , - 1680 , - 3 , - 1538 , - 2781 , - 228 , - 4391 , - 2422 , - 161 , - 3448 , - 4107 , - 3306 , - 2213 , - 1996 , - 3823 , - 4190 , - 4265 , - 544 , - 3539 , - 402 , - 1645 , - 3764 , - 3255 , - 1286 , - 3697 , - 2312 , - 2971 , - 2170 , - 1077 , - 860 , - 2687 , - 3054 , - 3129 , - 4080 , - 2403 , - 3938 , - 509 , - 2628 , - 2119 , - 150 , - 2561 , - 1176 , - 1835 , - 1034 , - 4613 , - 4396 , - 1551 , - 1918 , - 1993 , - 2944 , - 1267 , - 2802 , - 4045 , - 1492 , - 983 , - 3686 , - 1425 , - 40 , - 699 , - 4570 , - 3477 , - 3260 , - 415 , - 782 , - 857 , - 1808 , - 131 , - 1666 , - 2909 , - 356 , - 4519 , - 2550 , - 289 , - 3576 , - 4235 , - 3434 , - 2341 , - 2124 , - 3951 , - 4318 , - 4393 , - 672 , - 3667 , - 530 , - 1773 , - 3892 , - 3383 , - 1414 , - 3825 , - 2440 , - 3099 , - 2298 , - 1205 , - 988 , - 2815 , - 3182 , - 3257 , - 4208 , - 2531 , - 4066 , - 637 , - 2756 , - 2247 , - 278 , - 2689 , - 1304 , - 1963 , - 1162 , - 69 , - 4524 , - 1679 , - 2046 , - 2121 , - 3072 , - 1395 , - 2930 , - 4173 , - 1620 , - 1111 , - 3814 , - 1553 , - 168 , - 827 , - 26 , - 3605 , - 3388 , - 543 , - 910 , - 985 , - 1936 , - 259 , - 1794 , - 3037 , - 484 , - 4647 , - 2678 , - 417 , - 3704 , - 4363 , - 3562 , - 2469 , - 2252 , - 4079 , - 4446 , - 4521 , - 800 , - 3795 , - 658 , - 1901 , - 4020 , - 3511 , - 1542 , - 3953 , - 2568 , - 3227 , - 2426 , - 1333 , - 1116 , - 2943 , - 3310 , - 3385 , - 4336 , - 2659 , - 4194 , - 765 , - 2884 , - 2375 , - 406 , - 2817 , - 1432 , - 2091 , - 1290 , - 197 , - 4652 , - 1807 , - 2174 , - 2249 , - 3200 , - 1523 , - 3058 , - 4301 , - 1748 , - 1239 , - 3942 , - 1681 , - 296 , - 955 , - 154 , - 3733 , - 3516 , - 671 , - 1038 , - 1113 , - 2064 , - 387 , - 1922 , - 3165 , - 612 , - 103 , - 2806 , - 545 , - 3832 , - 4491 , - 3690 , - 2597 , - 2380 , - 4207 , - 4574 , - 4649 , - 928 , - 3923 , - 786 , - 2029 , - 4148 , - 3639 , - 1670 , - 4081 , - 2696 , - 3355 , - 2554 , - 1461 , - 1244 , - 3071 , - 3438 , - 3513 , - 4464 , - 2787 , - 4322 , - 893 , - 3012 , - 2503 , - 534 , - 2945 , - 1560 , - 2219 , - 1418 , - 325 , - 108 , - 1935 , - 2302 , - 2377 , - 3328 , - 1651 , - 3186 , - 4429 , - 1876 , - 1367 , - 4070 , - 1809 , - 424 , - 1083 , - 282 , - 3861 , - 3644 , - 799 , - 1166 , - 1241 , - 2192 , - 515 , - 2050 , - 3293 , - 740 , - 231 , - 2934 , - 673 , - 3960 , - 4619 , - 3818 , - 2725 , - 2508 , - 4335 , - 30 , - 105 , - 1056 , - 4051 , - 914 , - 2157 , - 4276 , - 3767 , - 1798 , - 4209 , - 2824 , - 3483 , - 2682 , - 1589 , - 1372 , - 3199 , - 3566 , - 3641 , - 4592 , - 2915 , - 4450 , - 1021 , - 3140 , - 2631 , - 662 , - 3073 , - 1688 , - 2347 , - 1546 , - 453 , - 236 , - 2063 , - 2430 , - 2505 , - 3456 , - 1779 , - 3314 , - 4557 , - 2004 , - 1495 , - 4198 , - 1937 , - 552 , - 1211 , - 410 , - 3989 , - 3772 , - 927 , - 1294 , - 1369 , - 2320 , - 643 , - 2178 , - 3421 , - 868 , - 359 , - 3062 , - 801 , - 4088 , - 75 , - 3946 , - 2853 , - 2636 , - 4463 , - 158 , - 233 , - 1184 , - 4179 , - 1042 , - 2285 , - 4404 , - 3895 , - 1926 , - 4337 , - 2952 , - 3611 , - 2810 , - 1717 , - 1500 , - 3327 , - 3694 , - 3769 , - 48 , - 3043 , - 4578 , - 1149 , - 3268 , - 2759 , - 790 , - 3201 , - 1816 , - 2475 , - 1674 , - 581 , - 364 , - 2191 , - 2558 , - 2633 , - 3584 , - 1907 , - 3442 , - 13 , - 2132 , - 1623 , - 4326 , - 2065 , - 680 , - 1339 , - 538 , - 4117 , - 3900 , - 1055 , - 1422 , - 1497 , - 2448 , - 771 , - 2306 , - 3549 , - 996 , - 487 , - 3190 , - 929 , - 4216 , - 203 , - 4074 , - 2981 , - 2764 , - 4591 , - 286 , - 361 , - 1312 , - 4307 , - 1170 , - 2413 , - 4532 , - 4023 , - 2054 , - 4465 , - 3080 , - 3739 , - 2938 , - 1845 , - 1628 , - 3455 , - 3822 , - 3897 , - 176 , - 3171 , - 34 , - 1277 , - 3396 , - 2887 , - 918 , - 3329 , - 1944 , - 2603 , - 1802 , - 709 , - 492 , - 2319 , - 2686 , - 2761 , - 3712 , - 2035 , - 3570 , - 141 , - 2260 , - 1751 , - 4454 , - 2193 , - 808 , - 1467 , - 666 , - 4245 , - 4028 , - 1183 , - 1550 , - 1625 , - 2576 , - 899 , - 2434 , - 3677 , - 1124 , - 615 , - 3318 , - 1057 , - 4344 , - 331 , - 4202 , - 3109 , - 2892 , - 47 , - 414 , - 489 , - 1440 , - 4435 , - 1298 , - 2541 , - 4660 , - 4151 , - 2182 , - 4593 , - 3208 , - 3867 , - 3066 , - 1973 , - 1756 , - 3583 , - 3950 , - 4025 , - 304 , - 3299 , - 162 , - 1405 , - 3524 , - 3015 , - 1046 , - 3457 , - 2072 , - 2731 , - 1930 , - 837 , - 620 , - 2447 , - 2814 , - 2889 , - 3840 , - 2163 , - 3698 , - 269 , - 2388 , - 1879 , - 4582 , - 2321 , - 936 , - 1595 , - 794 , - 4373 , - 4156 , - 1311 , - 1678 , - 1753 , - 2704 , - 1027 , - 2562 , - 3805 , - 1252 , - 743 , - 3446 , - 1185 , - 4472 , - 459 , - 4330 , - 3237 , - 3020 , - 175 , - 542 , - 617 , - 1568 , - 4563 , - 1426 , - 2669 , - 116 , - 4279 , - 2310 , - 49 , - 3336 , - 3995 , - 3194 , - 2101 , - 1884 , - 3711 , - 4078 , - 4153 , - 432 , - 3427 , - 290 , - 1533 , - 3652 , - 3143 , - 1174 , - 3585 , - 2200 , - 2859 , - 2058 , - 965 , - 748 , - 2575 , - 2942 , - 3017 , - 3968 , - 2291 , - 3826 , - 397 , - 2516 , - 2007 , - 38 , - 2449 , - 1064 , - 1723 , - 922 , - 4501 , - 4284 , - 1439 , - 1806 , - 1881 , - 2832 , - 1155 , - 2690 , - 3933 , - 1380 , - 871 , - 3574 , - 1313 , - 4600 , - 587 , - 4458 , - 3365 , - 3148 , - 303 , - 670 , - 745 , - 1696 , - 19 , - 1554 , - 2797 , - 244 , - 4407 , - 2438 , - 177 , - 3464 , - 4123 , - 3322 , - 2229 , - 2012 , - 3839 , - 4206 , - 4281 , - 560 , - 3555 , - 418 , - 1661 , - 3780 , - 3271 , - 1302 , - 3713 , - 2328 , - 2987 , - 2186 , - 1093 , - 876 , - 2703 , - 3070 , - 3145 , - 4096 , - 2419 , - 3954 , - 525 , - 2644 , - 2135 , - 166 , - 2577 , - 1192 , - 1851 , - 1050 , - 4629 , - 4412 , - 1567 , - 1934 , - 2009 , - 2960 , - 1283 , - 2818 , - 4061 , - 1508 , - 999 , - 3702 , - 1441 , - 56 , - 715 , - 4586 , - 3493 , - 3276 , - 431 , - 798 , - 873 , - 1824 , - 147 , - 1682 , - 2925 , - 372 , - 4535 , - 2566 , - 305 , - 3592 , - 4251 , - 3450 , - 2357 , - 2140 , - 3967 , - 4334 , - 4409 , - 688 , - 3683 , - 546 , - 1789 , - 3908 , - 3399 , - 1430 , - 3841 , - 2456 , - 3115 , - 2314 , - 1221 , - 1004 , - 2831 , - 3198 , - 3273 , - 4224 , - 2547 , - 4082 , - 653 , - 2772 , - 2263 , - 294 , - 2705 , - 1320 , - 1979 , - 1178 , - 85 , - 4540 , - 1695 , - 2062 , - 2137 , - 3088 , - 1411 , - 2946 , - 4189 , - 1636 , - 1127 , - 3830 , - 1569 , - 184 , - 843 , - 42 , - 3621 , - 3404 , - 559 , - 926 , - 1001 , - 1952 , - 275 , - 1810 , - 3053 , - 500 , - 4663 , - 2694 , - 433 , - 3720 , - 4379 , - 3578 , - 2485 , - 2268 , - 4095 , - 4462 , - 4537 , - 816 , - 3811 , - 674 , - 1917 , - 4036 , - 3527 , - 1558 , - 3969 , - 2584 , - 3243 , - 2442 , - 1349 , - 1132 , - 2959 , - 3326 , - 3401 , - 4352 , - 2675 , - 4210 , - 781 , - 2900 , - 2391 , - 422 , - 2833 , - 1448 , - 2107 , - 1306 , - 213 , - 4668 , - 1823 , - 2190 , - 2265 , - 3216 , - 1539 , - 3074 , - 4317 , - 1764 , - 1255 , - 3958 , - 1697 , - 312 , - 971 , - 170 , - 3749 , - 3532 , - 687 , - 1054 , - 1129 , - 2080 , - 403 , - 1938 , - 3181 , - 628 , - 119 , - 2822 , - 561 , - 3848 , - 4507 , - 3706 , - 2613 , - 2396 , - 4223 , - 4590 , - 4665 , - 944 , - 3939 , - 802 , - 2045 , - 4164 , - 3655 , - 1686 , - 4097 , - 2712 , - 3371 , - 2570 , - 1477 , - 1260 , - 3087 , - 3454 , - 3529 , - 4480 , - 2803 , - 4338 , - 909 , - 3028 , - 2519 , - 550 , - 2961 , - 1576 , - 2235 , - 1434 , - 341 , - 124 , - 1951 , - 2318 , - 2393 , - 3344 , - 1667 , - 3202 , - 4445 , - 1892 , - 1383 , - 4086 , - 1825 , - 440 , - 1099 , - 298 , - 3877 , - 3660 , - 815 , - 1182 , - 1257 , - 2208 , - 531 , - 2066 , - 3309 , - 756 , - 247 , - 2950 , - 689 , - 3976 , - 4635 , - 3834 , - 2741 , - 2524 , - 4351 , - 46 , - 121 , - 1072 , - 4067 , - 930 , - 2173 , - 4292 , - 3783 , - 1814 , - 4225 , - 2840 , - 3499 , - 2698 , - 1605 , - 1388 , - 3215 , - 3582 , - 3657 , - 4608 , - 2931 , - 4466 , - 1037 , - 3156 , - 2647 , - 678 , - 3089 , - 1704 , - 2363 , - 1562 , - 469 , - 252 , - 2079 , - 2446 , - 2521 , - 3472 , - 1795 , - 3330 , - 4573 , - 2020 , - 1511 , - 4214 , - 1953 , - 568 , - 1227 , - 426 , - 4005 , - 3788 , - 943 , - 1310 , - 1385 , - 2336 , - 659 , - 2194 , - 3437 , - 884 , - 375 , - 3078 , - 817 , - 4104 , - 91 , - 3962 , - 2869 , - 2652 , - 4479 , - 174 , - 249 , - 1200 , - 4195 , - 1058 , - 2301 , - 4420 , - 3911 , - 1942 , - 4353 , - 2968 , - 3627 , - 2826 , - 1733 , - 1516 , - 3343 , - 3710 , - 3785 , - 64 , - 3059 , - 4594 , - 1165 , - 3284 , - 2775 , - 806 , - 3217 , - 1832 , - 2491 , - 1690 , - 597 , - 380 , - 2207 , - 2574 , - 2649 , - 3600 , - 1923 , - 3458 , - 29 , - 2148 , - 1639 , - 4342 , - 2081 , - 696 , - 1355 , - 554 , - 4133 , - 3916 , - 1071 , - 1438 , - 1513 , - 2464 , - 787 , - 2322 , - 3565 , - 1012 , - 503 , - 3206 , - 945 , - 4232 , - 219 , - 4090 , - 2997 , - 2780 , - 4607 , - 302 , - 377 , - 1328 , - 4323 , - 1186 , - 2429 , - 4548 , - 4039 , - 2070 , - 4481 , - 3096 , - 3755 , - 2954 , - 1861 , - 1644 , - 3471 , - 3838 , - 3913 , - 192 , - 3187 , - 50 , - 1293 , - 3412 , - 2903 , - 934 , - 3345 , - 1960 , - 2619 , - 1818 , - 725 , - 508 , - 2335 , - 2702 , - 2777 , - 3728 , - 2051 , - 3586 , - 157 , - 2276 , - 1767 , - 4470 , - 2209 , - 824 , - 1483 , - 682 , - 4261 , - 4044 , - 1199 , - 1566 , - 1641 , - 2592 , - 915 , - 2450 , - 3693 , - 1140 , - 631 , - 3334 , - 1073 , - 4360 , - 347 , - 4218 , - 3125 , - 2908 , - 63 , - 430 , - 505 , - 1456 , - 4451 , - 1314 , - 2557 , - 4 , - 4167 , - 2198 , - 4609 , - 3224 , - 3883 , - 3082 , - 1989 , - 1772 , - 3599 , - 3966 , - 4041 , - 320 , - 3315 , - 178 , - 1421 , - 3540 , - 3031 , - 1062 , - 3473 , - 2088 , - 2747 , - 1946 , - 853 , - 636 , - 2463 , - 2830 , - 2905 , - 3856 , - 2179 , - 3714 , - 285 , - 2404 , - 1895 , - 4598 , - 2337 , - 952 , - 1611 , - 810 , - 4389 , - 4172 , - 1327 , - 1694 , - 1769 , - 2720 , - 1043 , - 2578 , - 3821 , - 1268 , - 759 , - 3462 , - 1201 , - 4488 , - 475 , - 4346 , - 3253 , - 3036 , - 191 , - 558 , - 633 , - 1584 , - 4579 , - 1442 , - 2685 , - 132 , - 4295 , - 2326 , - 65 , - 3352 , - 4011 , - 3210 , - 2117 , - 1900 , - 3727 , - 4094 , - 4169 , - 448 , - 3443 , - 306 , - 1549 , - 3668 , - 3159 , - 1190 , - 3601 , - 2216 , - 2875 , - 2074 , - 981 , - 764 , - 2591 , - 2958 , - 3033 , - 3984 , - 2307 , - 3842 , - 413 , - 2532 , - 2023 , - 54 , - 2465 , - 1080 , - 1739 , - 938 , - 4517 , - 4300 , - 1455 , - 1822 , - 1897 , - 2848 , - 1171 , - 2706 , - 3949 , - 1396 , - 887 , - 3590 , - 1329 , - 4616 , - 603 , - 4474 , - 3381 , - 3164 , - 319 , - 686 , - 761 , - 1712 , - 35 , - 1570 , - 2813 , - 260 , - 4423 , - 2454 , - 193 , - 3480 , - 4139 , - 3338 , - 2245 , - 2028 , - 3855 , - 4222 , - 4297 , - 576 , - 3571 , - 434 , - 1677 , - 3796 , - 3287 , - 1318 , - 3729 , - 2344 , - 3003 , - 2202 , - 1109 , - 892 , - 2719 , - 3086 , - 3161 , - 4112 , - 2435 , - 3970 , - 541 , - 2660 , - 2151 , - 182 , - 2593 , - 1208 , - 1867 , - 1066 , - 4645 , - 4428 , - 1583 , - 1950 , - 2025 , - 2976 , - 1299 , - 2834 , - 4077 , - 1524 , - 1015 , - 3718 , - 1457 , - 72 , - 731 , - 4602 , - 3509 , - 3292 , - 447 , - 814 , - 889 , - 1840 , - 163 , - 1698 , - 2941 , - 388 , - 4551 , - 2582 , - 321 , - 3608 , - 4267 , - 3466 , - 2373 , - 2156 , - 3983 , - 4350 , - 4425 , - 704 , - 3699 , - 562 , - 1805 , - 3924 , - 3415 , - 1446 , - 3857 , - 2472 , - 3131 , - 2330 , - 1237 , - 1020 , - 2847 , - 3214 , - 3289 , - 4240 , - 2563 , - 4098 , - 669 , - 2788 , - 2279 , - 310 , - 2721 , - 1336 , - 1995 , - 1194 , - 101 , - 4556 , - 1711 , - 2078 , - 2153 , - 3104 , - 1427 , - 2962 , - 4205 , - 1652 , - 1143 , - 3846 , - 1585 , - 200 , - 859 , - 58 , - 3637 , - 3420 , - 575 , - 942 , - 1017 , - 1968 , - 291 , - 1826 , - 3069 , - 516 , - 7 , - 2710 , - 449 , - 3736 , - 4395 , - 3594 , - 2501 , - 2284 , - 4111 , - 4478 , - 4553 , - 832 , - 3827 , - 690 , - 1933 , - 4052 , - 3543 , - 1574 , - 3985 , - 2600 , - 3259 , - 2458 , - 1365 , - 1148 , - 2975 , - 3342 , - 3417 , - 4368 , - 2691 , - 4226 , - 797 , - 2916 , - 2407 , - 438 , - 2849 , - 1464 , - 2123 , - 1322 , - 229 , - 12 , - 1839 , - 2206 , - 2281 , - 3232 , - 1555 , - 3090 , - 4333 , - 1780 , - 1271 , - 3974 , - 1713 , - 328 , - 987 , - 186 , - 3765 , - 3548 , - 703 , - 1070 , - 1145 , - 2096 , - 419 , - 1954 , - 3197 , - 644 , - 135 , - 2838 , - 577 , - 3864 , - 4523 , - 3722 , - 2629 , - 2412 , - 4239 , - 4606 , - 9 , - 960 , - 3955 , - 818 , - 2061 , - 4180 , - 3671 , - 1702 , - 4113 , - 2728 , - 3387 , - 2586 , - 1493 , - 1276 , - 3103 , - 3470 , - 3545 , - 4496 , - 2819 , - 4354 , - 925 , - 3044 , - 2535 , - 566 , - 2977 , - 1592 , - 2251 , - 1450 , - 357 , - 140 , - 1967 , - 2334 , - 2409 , - 3360 , - 1683 , - 3218 , - 4461 , - 1908 , - 1399 , - 4102 , - 1841 , - 456 , - 1115 , - 314 , - 3893 , - 3676 , - 831 , - 1198 , - 1273 , - 2224 , - 547 , - 2082 , - 3325 , - 772 , - 263 , - 2966 , - 705 , - 3992 , - 4651 , - 3850 , - 2757 , - 2540 , - 4367 , - 62 , - 137 , - 1088 , - 4083 , - 946 , - 2189 , - 4308 , - 3799 , - 1830 , - 4241 , - 2856 , - 3515 , - 2714 , - 1621 , - 1404 , - 3231 , - 3598 , - 3673 , - 4624 , - 2947 , - 4482 , - 1053 , - 3172 , - 2663 , - 694 , - 3105 , - 1720 , - 2379 , - 1578 , - 485 , - 268 , - 2095 , - 2462 , - 2537 , - 3488 , - 1811 , - 3346 , - 4589 , - 2036 , - 1527 , - 4230 , - 1969 , - 584 , - 1243 , - 442 , - 4021 , - 3804 , - 959 , - 1326 , - 1401 , - 2352 , - 675 , - 2210 , - 3453 , - 900 , - 391 , - 3094 , - 833 , - 4120 , - 107 , - 3978 , - 2885 , - 2668 , - 4495 , - 190 , - 265 , - 1216 , - 4211 , - 1074 , - 2317 , - 4436 , - 3927 , - 1958 , - 4369 , - 2984 , - 3643 , - 2842 , - 1749 , - 1532 , - 3359 , - 3726 , - 3801 , - 80 , - 3075 , - 4610 , - 1181 , - 3300 , - 2791 , - 822 , - 3233 , - 1848 , - 2507 , - 1706 , - 613 , - 396 , - 2223 , - 2590 , - 2665 , - 3616 , - 1939 , - 3474 , - 45 , - 2164 , - 1655 , - 4358 , - 2097 , - 712 , - 1371 , - 570 , - 4149 , - 3932 , - 1087 , - 1454 , - 1529 , - 2480 , - 803 , - 2338 , - 3581 , - 1028 , - 519 , - 3222 , - 961 , - 4248 , - 235 , - 4106 , - 3013 , - 2796 , - 4623 , - 318 , - 393 , - 1344 , - 4339 , - 1202 , - 2445 , - 4564 , - 4055 , - 2086 , - 4497 , - 3112 , - 3771 , - 2970 , - 1877 , - 1660 , - 3487 , - 3854 , - 3929 , - 208 , - 3203 , - 66 , - 1309 , - 3428 , - 2919 , - 950 , - 3361 , - 1976 , - 2635 , - 1834 , - 741 , - 524 , - 2351 , - 2718 , - 2793 , - 3744 , - 2067 , - 3602 , - 173 , - 2292 , - 1783 , - 4486 , - 2225 , - 840 , - 1499 , - 698 , - 4277 , - 4060 , - 1215 , - 1582 , - 1657 , - 2608 , - 931 , - 2466 , - 3709 , - 1156 , - 647 , - 3350 , - 1089 , - 4376 , - 363 , - 4234 , - 3141 , - 2924 , - 79 , - 446 , - 521 , - 1472 , - 4467 , - 1330 , - 2573 , - 20 , - 4183 , - 2214 , - 4625 , - 3240 , - 3899 , - 3098 , - 2005 , - 1788 , - 3615 , - 3982 , - 4057 , - 336 , - 3331 , - 194 , - 1437 , - 3556 , - 3047 , - 1078 , - 3489 , - 2104 , - 2763 , - 1962 , - 869 , - 652 , - 2479 , - 2846 , - 2921 , - 3872 , - 2195 , - 3730 , - 301 , - 2420 , - 1911 , - 4614 , - 2353 , - 968 , - 1627 , - 826 , - 4405 , - 4188 , - 1343 , - 1710 , - 1785 , - 2736 , - 1059 , - 2594 , - 3837 , - 1284 , - 775 , - 3478 , - 1217 , - 4504 , - 491 , - 4362 , - 3269 , - 3052 , - 207 , - 574 , - 649 , - 1600 , - 4595 , - 1458 , - 2701 , - 148 , - 4311 , - 2342 , - 81 , - 3368 , - 4027 , - 3226 , - 2133 , - 1916 , - 3743 , - 4110 , - 4185 , - 464 , - 3459 , - 322 , - 1565 , - 3684 , - 3175 , - 1206 , - 3617 , - 2232 , - 2891 , - 2090 , - 997 , - 780 , - 2607 , - 2974 , - 3049 , - 4000 , - 2323 , - 3858 , - 429 , - 2548 , - 2039 , - 70 , - 2481 , - 1096 , - 1755 , - 954 , - 4533 , - 4316 , - 1471 , - 1838 , - 1913 , - 2864 , - 1187 , - 2722 , - 3965 , - 1412 , - 903 , - 3606 , - 1345 , - 4632 , - 619 , - 4490 , - 3397 , - 3180 , - 335 , - 702 , - 777 , - 1728 , - 51 , - 1586 , - 2829 , - 276 , - 4439 , - 2470 , - 209 , - 3496 , - 4155 , - 3354 , - 2261 , - 2044 , - 3871 , - 4238 , - 4313 , - 592 , - 3587 , - 450 , - 1693 , - 3812 , - 3303 , - 1334 , - 3745 , - 2360 , - 3019 , - 2218 , - 1125 , - 908 , - 2735 , - 3102 , - 3177 , - 4128 , - 2451 , - 3986 , - 557 , - 2676 , - 2167 , - 198 , - 2609 , - 1224 , - 1883 , - 1082 , - 4661 , - 4444 , - 1599 , - 1966 , - 2041 , - 2992 , - 1315 , - 2850 , - 4093 , - 1540 , - 1031 , - 3734 , - 1473 , - 88 , - 747 , - 4618 , - 3525 , - 3308 , - 463 , - 830 , - 905 , - 1856 , - 179 , - 1714 , - 2957 , - 404 , - 4567 , - 2598 , - 337 , - 3624 , - 4283 , - 3482 , - 2389 , - 2172 , - 3999 , - 4366 , - 4441 , - 720 , - 3715 , - 578 , - 1821 , - 3940 , - 3431 , - 1462 , - 3873 , - 2488 , - 3147 , - 2346 , - 1253 , - 1036 , - 2863 , - 3230 , - 3305 , - 4256 , - 2579 , - 4114 , - 685 , - 2804 , - 2295 , - 326 , - 2737 , - 1352 , - 2011 , - 1210 , - 117 , - 4572 , - 1727 , - 2094 , - 2169 , - 3120 , - 1443 , - 2978 , - 4221 , - 1668 , - 1159 , - 3862 , - 1601 , - 216 , - 875 , - 74 , - 3653 , - 3436 , - 591 , - 958 , - 1033 , - 1984 , - 307 , - 1842 , - 3085 , - 532 , - 23 , - 2726 , - 465 , - 3752 , - 4411 , - 3610 , - 2517 , - 2300 , - 4127 , - 4494 , - 4569 , - 848 , - 3843 , - 706 , - 1949 , - 4068 , - 3559 , - 1590 , - 4001 , - 2616 , - 3275 , - 2474 , - 1381 , - 1164 , - 2991 , - 3358 , - 3433 , - 4384 , - 2707 , - 4242 , - 813 , - 2932 , - 2423 , - 454 , - 2865 , - 1480 , - 2139 , - 1338 , - 245 , - 28 , - 1855 , - 2222 , - 2297 , - 3248 , - 1571 , - 3106 , - 4349 , - 1796 , - 1287 , - 3990 , - 1729 , - 344 , - 1003 , - 202 , - 3781 , - 3564 , - 719 , - 1086 , - 1161 , - 2112 , - 435 , - 1970 , - 3213 , - 660 , - 151 , - 2854 , - 593 , - 3880 , - 4539 , - 3738 , - 2645 , - 2428 , - 4255 , - 4622 , - 25 , - 976 , - 3971 , - 834 , - 2077 , - 4196 , - 3687 , - 1718 , - 4129 , - 2744 , - 3403 , - 2602 , - 1509 , - 1292 , - 3119 , - 3486 , - 3561 , - 4512 , - 2835 , - 4370 , - 941 , - 3060 , - 2551 , - 582 , - 2993 , - 1608 , - 2267 , - 1466 , - 373 , - 156 , - 1983 , - 2350 , - 2425 , - 3376 , - 1699 , - 3234 , - 4477 , - 1924 , - 1415 , - 4118 , - 1857 , - 472 , - 1131 , - 330 , - 3909 , - 3692 , - 847 , - 1214 , - 1289 , - 2240 , - 563 , - 2098 , - 3341 , - 788 , - 279 , - 2982 , - 721 , - 4008 , - 4667 , - 3866 , - 2773 , - 2556 , - 4383 , - 78 , - 153 , - 1104 , - 4099 , - 962 , - 2205 , - 4324 , - 3815 , - 1846 , - 4257 , - 2872 , - 3531 , - 2730 , - 1637 , - 1420 , - 3247 , - 3614 , - 3689 , - 4640 , - 2963 , - 4498 , - 1069 , - 3188 , - 2679 , - 710 , - 3121 , - 1736 , - 2395 , - 1594 , - 501 , - 284 , - 2111 , - 2478 , - 2553 , - 3504 , - 1827 , - 3362 , - 4605 , - 2052 , - 1543 , - 4246 , - 1985 , - 600 , - 1259 , - 458 , - 4037 , - 3820 , - 975 , - 1342 , - 1417 , - 2368 , - 691 , - 2226 , - 3469 , - 916 , - 407 , - 3110 , - 849 , - 4136 , - 123 , - 3994 , - 2901 , - 2684 , - 4511 , - 206 , - 281 , - 1232 , - 4227 , - 1090 , - 2333 , - 4452 , - 3943 , - 1974 , - 4385 , - 3000 , - 3659 , - 2858 , - 1765 , - 1548 , - 3375 , - 3742 , - 3817 , - 96 , - 3091 , - 4626 , - 1197 , - 3316 , - 2807 , - 838 , - 3249 , - 1864 , - 2523 , - 1722 , - 629 , - 412 , - 2239 , - 2606 , - 2681 , - 3632 , - 1955 , - 3490 , - 61 , - 2180 , - 1671 , - 4374 , - 2113 , - 728 , - 1387 , - 586 , - 4165 , - 3948 , - 1103 , - 1470 , - 1545 , - 2496 , - 819 , - 2354 , - 3597 , - 1044 , - 535 , - 3238 , - 977 , - 4264 , - 251 , - 4122 , - 3029 , - 2812 , - 4639 , - 334 , - 409 , - 1360 , - 4355 , - 1218 , - 2461 , - 4580 , - 4071 , - 2102 , - 4513 , - 3128 , - 3787 , - 2986 , - 1893 , - 1676 , - 3503 , - 3870 , - 3945 , - 224 , - 3219 , - 82 , - 1325 , - 3444 , - 2935 , - 966 , - 3377 , - 1992 , - 2651 , - 1850 , - 757 , - 540 , - 2367 , - 2734 , - 2809 , - 3760 , - 2083 , - 3618 , - 189 , - 2308 , - 1799 , - 4502 , - 2241 , - 856 , - 1515 , - 714 , - 4293 , - 4076 , - 1231 , - 1598 , - 1673 , - 2624 , - 947 , - 2482 , - 3725 , - 1172 , - 663 , - 3366 , - 1105 , - 4392 , - 379 , - 4250 , - 3157 , - 2940 , - 95 , - 462 , - 537 , - 1488 , - 4483 , - 1346 , - 2589 , - 36 , - 4199 , - 2230 , - 4641 , - 3256 , - 3915 , - 3114 , - 2021 , - 1804 , - 3631 , - 3998 , - 4073 , - 352 , - 3347 , - 210 , - 1453 , - 3572 , - 3063 , - 1094 , - 3505 , - 2120 , - 2779 , - 1978 , - 885 , - 668 , - 2495 , - 2862 , - 2937 , - 3888 , - 2211 , - 3746 , - 317 , - 2436 , - 1927 , - 4630 , - 2369 , - 984 , - 1643 , - 842 , - 4421 , - 4204 , - 1359 , - 1726 , - 1801 , - 2752 , - 1075 , - 2610 , - 3853 , - 1300 , - 791 , - 3494 , - 1233 , - 4520 , - 507 , - 4378 , - 3285 , - 3068 , - 223 , - 590 , - 665 , - 1616 , - 4611 , - 1474 , - 2717 , - 164 , - 4327 , - 2358 , - 97 , - 3384 , - 4043 , - 3242 , - 2149 , - 1932 , - 3759 , - 4126 , - 4201 , - 480 , - 3475 , - 338 , - 1581 , - 3700 , - 3191 , - 1222 , - 3633 , - 2248 , - 2907 , - 2106 , - 1013 , - 796 , - 2623 , - 2990 , - 3065 , - 4016 , - 2339 , - 3874 , - 445 , - 2564 , - 2055 , - 86 , - 2497 , - 1112 , - 1771 , - 970 , - 4549 , - 4332 , - 1487 , - 1854 , - 1929 , - 2880 , - 1203 , - 2738 , - 3981 , - 1428 , - 919 , - 3622 , - 1361 , - 4648 , - 635 , - 4506 , - 3413 , - 3196 , - 351 , - 718 , - 793 , - 1744 , - 67 , - 1602 , - 2845 , - 292 , - 4455 , - 2486 , - 225 , - 3512 , - 4171 , - 3370 , - 2277 , - 2060 , - 3887 , - 4254 , - 4329 , - 608 , - 3603 , - 466 , - 1709 , - 3828 , - 3319 , - 1350 , - 3761 , - 2376 , - 3035 , - 2234 , - 1141 , - 924 , - 2751 , - 3118 , - 3193 , - 4144 , - 2467 , - 4002 , - 573 , - 2692 , - 2183 , - 214 , - 2625 , - 1240 , - 1899 , - 1098 , - 5 , - 4460 , - 1615 , - 1982 , - 2057 , - 3008 , - 1331 , - 2866 , - 4109 , - 1556 , - 1047 , - 3750 , - 1489 , - 104 , - 763 , - 4634 , - 3541 , - 3324 , - 479 , - 846 , - 921 , - 1872 , - 195 , - 1730 , - 2973 , - 420 , - 4583 , - 2614 , - 353 , - 3640 , - 4299 , - 3498 , - 2405 , - 2188 , - 4015 , - 4382 , - 4457 , - 736 , - 3731 , - 594 , - 1837 , - 3956 , - 3447 , - 1478 , - 3889 , - 2504 , - 3163 , - 2362 , - 1269 , - 1052 , - 2879 , - 3246 , - 3321 , - 4272 , - 2595 , - 4130 , - 701 , - 2820 , - 2311 , - 342 , - 2753 , - 1368 , - 2027 , - 1226 , - 133 , - 4588 , - 1743 , - 2110 , - 2185 , - 3136 , - 1459 , - 2994 , - 4237 , - 1684 , - 1175 , - 3878 , - 1617 , - 232 , - 891 , - 90 , - 3669 , - 3452 , - 607 , - 974 , - 1049 , - 2000 , - 323 , - 1858 , - 3101 , - 548 , - 39 , - 2742 , - 481 , - 3768 , - 4427 , - 3626 , - 2533 , - 2316 , - 4143 , - 4510 , - 4585 , - 864 , - 3859 , - 722 , - 1965 , - 4084 , - 3575 , - 1606 , - 4017 , - 2632 , - 3291 , - 2490 , - 1397 , - 1180 , - 3007 , - 3374 , - 3449 , - 4400 , - 2723 , - 4258 , - 829 , - 2948 , - 2439 , - 470 , - 2881 , - 1496 , - 2155 , - 1354 , - 261 , - 44 , - 1871 , - 2238 , - 2313 , - 3264 , - 1587 , - 3122 , - 4365 , - 1812 , - 1303 , - 4006 , - 1745 , - 360 , - 1019 , - 218 , - 3797 , - 3580 , - 735 , - 1102 , - 1177 , - 2128 , - 451 , - 1986 , - 3229 , - 676 , - 167 , - 2870 , - 609 , - 3896 , - 4555 , - 3754 , - 2661 , - 2444 , - 4271 , - 4638 , - 41 , - 992 , - 3987 , - 850 , - 2093 , - 4212 , - 3703 , - 1734 , - 4145 , - 2760 , - 3419 , - 2618 , - 1525 , - 1308 , - 3135 , - 3502 , - 3577 , - 4528 , - 2851 , - 4386 , - 957 , - 3076 , - 2567 , - 598 , - 3009 , - 1624 , - 2283 , - 1482 , - 389 , - 172 , - 1999 , - 2366 , - 2441 , - 3392 , - 1715 , - 3250 , - 4493 , - 1940 , - 1431 , - 4134 , - 1873 , - 488 , - 1147 , - 346 , - 3925 , - 3708 , - 863 , - 1230 , - 1305 , - 2256 , - 579 , - 2114 , - 3357 , - 804 , - 295 , - 2998 , - 737 , - 4024 , - 11 , - 3882 , - 2789 , - 2572 , - 4399 , - 94 , - 169 , - 1120 , - 4115 , - 978 , - 2221 , - 4340 , - 3831 , - 1862 , - 4273 , - 2888 , - 3547 , - 2746 , - 1653 , - 1436 , - 3263 , - 3630 , - 3705 , - 4656 , - 2979 , - 4514 , - 1085 , - 3204 , - 2695 , - 726 , - 3137 , - 1752 , - 2411 , - 1610 , - 517 , - 300 , - 2127 , - 2494 , - 2569 , - 3520 , - 1843 , - 3378 , - 4621 , - 2068 , - 1559 , - 4262 , - 2001 , - 616 , - 1275 , - 474 , - 4053 , - 3836 , - 991 , - 1358 , - 1433 , - 2384 , - 707 , - 2242 , - 3485 , - 932 , - 423 , - 3126 , - 865 , - 4152 , - 139 , - 4010 , - 2917 , - 2700 , - 4527 , - 222 , - 297 , - 1248 , - 4243 , - 1106 , - 2349 , - 4468 , - 3959 , - 1990 , - 4401 , - 3016 , - 3675 , - 2874 , - 1781 , - 1564 , - 3391 , - 3758 , - 3833 , - 112 , - 3107 , - 4642 , - 1213 , - 3332 , - 2823 , - 854 , - 3265 , - 1880 , - 2539 , - 1738 , - 645 , - 428 , - 2255 , - 2622 , - 2697 , - 3648 , - 1971 , - 3506 , - 77 , - 2196 , - 1687 , - 4390 , - 2129 , - 744 , - 1403 , - 602 , - 4181 , - 3964 , - 1119 , - 1486 , - 1561 , - 2512 , - 835 , - 2370 , - 3613 , - 1060 , - 551 , - 3254 , - 993 , - 4280 , - 267 , - 4138 , - 3045 , - 2828 , - 4655 , - 350 , - 425 , - 1376 , - 4371 , - 1234 , - 2477 , - 4596 , - 4087 , - 2118 , - 4529 , - 3144 , - 3803 , - 3002 , - 1909 , - 1692 , - 3519 , - 3886 , - 3961 , - 240 , - 3235 , - 98 , - 1341 , - 3460 , - 2951 , - 982 , - 3393 , - 2008 , - 2667 , - 1866 , - 773 , - 556 , - 2383 , - 2750 , - 2825 , - 3776 , - 2099 , - 3634 , - 205 , - 2324 , - 1815 , - 4518 , - 2257 , - 872 , - 1531 , - 730 , - 4309 , - 4092 , - 1247 , - 1614 , - 1689 , - 2640 , - 963 , - 2498 , - 3741 , - 1188 , - 679 , - 3382 , - 1121 , - 4408 , - 395 , - 4266 , - 3173 , - 2956 , - 111 , - 478 , - 553 , - 1504 , - 4499 , - 1362 , - 2605 , - 52 , - 4215 , - 2246 , - 4657 , - 3272 , - 3931 , - 3130 , - 2037 , - 1820 , - 3647 , - 4014 , - 4089 , - 368 , - 3363 , - 226 , - 1469 , - 3588 , - 3079 , - 1110 , - 3521 , - 2136 , - 2795 , - 1994 , - 901 , - 684 , - 2511 , - 2878 , - 2953 , - 3904 , - 2227 , - 3762 , - 333 , - 2452 , - 1943 , - 4646 , - 2385 , - 1000 , - 1659 , - 858 , - 4437 , - 4220 , - 1375 , - 1742 , - 1817 , - 2768 , - 1091 , - 2626 , - 3869 , - 1316 , - 807 , - 3510 , - 1249 , - 4536 , - 523 , - 4394 , - 3301 , - 3084 , - 239 , - 606 , - 681 , - 1632 , - 4627 , - 1490 , - 2733 , - 180 , - 4343 , - 2374 , - 113 , - 3400 , - 4059 , - 3258 , - 2165 , - 1948 , - 3775 , - 4142 , - 4217 , - 496 , - 3491 , - 354 , - 1597 , - 3716 , - 3207 , - 1238 , - 3649 , - 2264 , - 2923 , - 2122 , - 1029 , - 812 , - 2639 , - 3006 , - 3081 , - 4032 , - 2355 , - 3890 , - 461 , - 2580 , - 2071 , - 102 , - 2513 , - 1128 , - 1787 , - 986 , - 4565 , - 4348 , - 1503 , - 1870 , - 1945 , - 2896 , - 1219 , - 2754 , - 3997 , - 1444 , - 935 , - 3638 , - 1377 , - 4664 , - 651 , - 4522 , - 3429 , - 3212 , - 367 , - 734 , - 809 , - 1760 , - 83 , - 1618 , - 2861 , - 308 , - 4471 , - 2502 , - 241 , - 3528 , - 4187 , - 3386 , - 2293 , - 2076 , - 3903 , - 4270 , - 4345 , - 624 , - 3619 , - 482 , - 1725 , - 3844 , - 3335 , - 1366 , - 3777 , - 2392 , - 3051 , - 2250 , - 1157 , - 940 , - 2767 , - 3134 , - 3209 , - 4160 , - 2483 , - 4018 , - 589 , - 2708 , - 2199 , - 230 , - 2641 , - 1256 , - 1915 , - 1114 , - 21 , - 4476 , - 1631 , - 1998 , - 2073 , - 3024 , - 1347 , - 2882 , - 4125 , - 1572 , - 1063 , - 3766 , - 1505 , - 120 , - 779 , - 4650 , - 3557 , - 3340 , - 495 , - 862 , - 937 , - 1888 , - 211 , - 1746 , - 2989 , - 436 , - 4599 , - 2630 , - 369 , - 3656 , - 4315 , - 3514 , - 2421 , - 2204 , - 4031 , - 4398 , - 4473 , - 752 , - 3747 , - 610 , - 1853 , - 3972 , - 3463 , - 1494 , - 3905 , - 2520 , - 3179 , - 2378 , - 1285 , - 1068 , - 2895 , - 3262 , - 3337 , - 4288 , - 2611 , - 4146 , - 717 , - 2836 , - 2327 , - 358 , - 2769 , - 1384 , - 2043 , - 1242 , - 149 , - 4604 , - 1759 , - 2126 , - 2201 , - 3152 , - 1475 , - 3010 , - 4253 , - 1700 , - 1191 , - 3894 , - 1633 , - 248 , - 907 , - 106 , - 3685 , - 3468 , - 623 , - 990 , - 1065 , - 2016 , - 339 , - 1874 , - 3117 , - 564 , - 55 , - 2758 , - 497 , - 3784 , - 4443 , - 3642 , - 2549 , - 2332 , - 4159 , - 4526 , - 4601 , - 880 , - 3875 , - 738 , - 1981 , - 4100 , - 3591 , - 1622 , - 4033 , - 2648 , - 3307 , - 2506 , - 1413 , - 1196 , - 3023 , - 3390 , - 3465 , - 4416 , - 2739 , - 4274 , - 845 , - 2964 , - 2455 , - 486 , - 2897 , - 1512 , - 2171 , - 1370 , - 277 , - 60 , - 1887 , - 2254 , - 2329 , - 3280 , - 1603 , - 3138 , - 4381 , - 1828 , - 1319 , - 4022 , - 1761 , - 376 , - 1035 , - 234 , - 3813 , - 3596 , - 751 , - 1118 , - 1193 , - 2144 , - 467 , - 2002 , - 3245 , - 692 , - 183 , - 2886 , - 625 , - 3912 , - 4571 , - 3770 , - 2677 , - 2460 , - 4287 , - 4654 , - 57 , - 1008 , - 4003 , - 866 , - 2109 , - 4228 , - 3719 , - 1750 , - 4161 , - 2776 , - 3435 , - 2634 , - 1541 , - 1324 , - 3151 , - 3518 , - 3593 , - 4544 , - 2867 , - 4402 , - 973 , - 3092 , - 2583 , - 614 , - 3025 , - 1640 , - 2299 , - 1498 , - 405 , - 188 , - 2015 , - 2382 , - 2457 , - 3408 , - 1731 , - 3266 , - 4509 , - 1956 , - 1447 , - 4150 , - 1889 , - 504 , - 1163 , - 362 , - 3941 , - 3724 , - 879 , - 1246 , - 1321 , - 2272 , - 595 , - 2130 , - 3373 , - 820 , - 311 , - 3014 , - 753 , - 4040 , - 27 , - 3898 , - 2805 , - 2588 , - 4415 , - 110 , - 185 , - 1136 , - 4131 , - 994 , - 2237 , - 4356 , - 3847 , - 1878 , - 4289 , - 2904 , - 3563 , - 2762 , - 1669 , - 1452 , - 3279 , - 3646 , - 3721 , - 0 , - 1011 , - 2910 , - 3329 , - 4636 , - 4463 , - 442 , - 4413 , - 4536 , - 3179 , - 2710 , - 761 , - 4436 , - 1895 , - 242 , - 1845 , - 4336 , - 611 , - 2510 , - 2929 , - 4236 , - 4063 , - 42 , - 4013 , - 4136 , - 2779 , - 2310 , - 361 , - 4036 , - 1495 , - 4578 , - 1445 , - 3936 , - 211 , - 2110 , - 2529 , - 3836 , - 3663 , - 4378 , - 3613 , - 3736 , - 2379 , - 1910 , - 4697 , - 3636 , - 1095 , - 4178 , - 1045 , - 3536 , - 4547 , - 1710 , - 2129 , - 3436 , - 3263 , - 3978 , - 3213 , - 3336 , - 1979 , - 1510 , - 4297 , - 3236 , - 695 , - 3778 , - 645 , - 3136 , - 4147 , - 1310 , - 1729 , - 3036 , - 2863 , - 3578 , - 2813 , - 2936 , - 1579 , - 1110 , - 3897 , - 2836 , - 295 , - 3378 , - 245 , - 2736 , - 3747 , - 910 , - 1329 , - 2636 , - 2463 , - 3178 , - 2413 , - 2536 , - 1179 , - 710 , - 3497 , - 2436 , - 4631 , - 2978 , - 4581 , - 2336 , - 3347 , - 510 , - 929 , - 2236 , - 2063 , - 2778 , - 2013 , - 2136 , - 779 , - 310 , - 3097 , - 2036 , - 4231 , - 2578 , - 4181 , - 1936 , - 2947 , - 110 , - 529 , - 1836 , - 1663 , - 2378 , - 1613 , - 1736 , - 379 , - 4646 , - 2697 , - 1636 , - 3831 , - 2178 , - 3781 , - 1536 , - 2547 , - 4446 , - 129 , - 1436 , - 1263 , - 1978 , - 1213 , - 1336 , - 4715 , - 4246 , - 2297 , - 1236 , - 3431 , - 1778 , - 3381 , - 1136 , - 2147 , - 4046 , - 4465 , - 1036 , - 863 , - 1578 , - 813 , - 936 , - 4315 , - 3846 , - 1897 , - 836 , - 3031 , - 1378 , - 2981 , - 736 , - 1747 , - 3646 , - 4065 , - 636 , - 463 , - 1178 , - 413 , - 536 , - 3915 , - 3446 , - 1497 , - 436 , - 2631 , - 978 , - 2581 , - 336 , - 1347 , - 3246 , - 3665 , - 236 , - 63 , - 778 , - 13 , - 136 , - 3515 , - 3046 , - 1097 , - 36 , - 2231 , - 578 , - 2181 , - 4672 , - 947 , - 2846 , - 3265 , - 4572 , - 4399 , - 378 , - 4349 , - 4472 , - 3115 , - 2646 , - 697 , - 4372 , - 1831 , - 178 , - 1781 , - 4272 , - 547 , - 2446 , - 2865 , - 4172 , - 3999 , - 4714 , - 3949 , - 4072 , - 2715 , - 2246 , - 297 , - 3972 , - 1431 , - 4514 , - 1381 , - 3872 , - 147 , - 2046 , - 2465 , - 3772 , - 3599 , - 4314 , - 3549 , - 3672 , - 2315 , - 1846 , - 4633 , - 3572 , - 1031 , - 4114 , - 981 , - 3472 , - 4483 , - 1646 , - 2065 , - 3372 , - 3199 , - 3914 , - 3149 , - 3272 , - 1915 , - 1446 , - 4233 , - 3172 , - 631 , - 3714 , - 581 , - 3072 , - 4083 , - 1246 , - 1665 , - 2972 , - 2799 , - 3514 , - 2749 , - 2872 , - 1515 , - 1046 , - 3833 , - 2772 , - 231 , - 3314 , - 181 , - 2672 , - 3683 , - 846 , - 1265 , - 2572 , - 2399 , - 3114 , - 2349 , - 2472 , - 1115 , - 646 , - 3433 , - 2372 , - 4567 , - 2914 , - 4517 , - 2272 , - 3283 , - 446 , - 865 , - 2172 , - 1999 , - 2714 , - 1949 , - 2072 , - 715 , - 246 , - 3033 , - 1972 , - 4167 , - 2514 , - 4117 , - 1872 , - 2883 , - 46 , - 465 , - 1772 , - 1599 , - 2314 , - 1549 , - 1672 , - 315 , - 4582 , - 2633 , - 1572 , - 3767 , - 2114 , - 3717 , - 1472 , - 2483 , - 4382 , - 65 , - 1372 , - 1199 , - 1914 , - 1149 , - 1272 , - 4651 , - 4182 , - 2233 , - 1172 , - 3367 , - 1714 , - 3317 , - 1072 , - 2083 , - 3982 , - 4401 , - 972 , - 799 , - 1514 , - 749 , - 872 , - 4251 , - 3782 , - 1833 , - 772 , - 2967 , - 1314 , - 2917 , - 672 , - 1683 , - 3582 , - 4001 , - 572 , - 399 , - 1114 , - 349 , - 472 , - 3851 , - 3382 , - 1433 , - 372 , - 2567 , - 914 , - 2517 , - 272 , - 1283 , - 3182 , - 3601 , - 172 , - 4735 , - 714 , - 4685 , - 72 , - 3451 , - 2982 , - 1033 , - 4708 , - 2167 , - 514 , - 2117 , - 4608 , - 883 , - 2782 , - 3201 , - 4508 , - 4335 , - 314 , - 4285 , - 4408 , - 3051 , - 2582 , - 633 , - 4308 , - 1767 , - 114 , - 1717 , - 4208 , - 483 , - 2382 , - 2801 , - 4108 , - 3935 , - 4650 , - 3885 , - 4008 , - 2651 , - 2182 , - 233 , - 3908 , - 1367 , - 4450 , - 1317 , - 3808 , - 83 , - 1982 , - 2401 , - 3708 , - 3535 , - 4250 , - 3485 , - 3608 , - 2251 , - 1782 , - 4569 , - 3508 , - 967 , - 4050 , - 917 , - 3408 , - 4419 , - 1582 , - 2001 , - 3308 , - 3135 , - 3850 , - 3085 , - 3208 , - 1851 , - 1382 , - 4169 , - 3108 , - 567 , - 3650 , - 517 , - 3008 , - 4019 , - 1182 , - 1601 , - 2908 , - 2735 , - 3450 , - 2685 , - 2808 , - 1451 , - 982 , - 3769 , - 2708 , - 167 , - 3250 , - 117 , - 2608 , - 3619 , - 782 , - 1201 , - 2508 , - 2335 , - 3050 , - 2285 , - 2408 , - 1051 , - 582 , - 3369 , - 2308 , - 4503 , - 2850 , - 4453 , - 2208 , - 3219 , - 382 , - 801 , - 2108 , - 1935 , - 2650 , - 1885 , - 2008 , - 651 , - 182 , - 2969 , - 1908 , - 4103 , - 2450 , - 4053 , - 1808 , - 2819 , - 4718 , - 401 , - 1708 , - 1535 , - 2250 , - 1485 , - 1608 , - 251 , - 4518 , - 2569 , - 1508 , - 3703 , - 2050 , - 3653 , - 1408 , - 2419 , - 4318 , - 1 , - 1308 , - 1135 , - 1850 , - 1085 , - 1208 , - 4587 , - 4118 , - 2169 , - 1108 , - 3303 , - 1650 , - 3253 , - 1008 , - 2019 , - 3918 , - 4337 , - 908 , - 735 , - 1450 , - 685 , - 808 , - 4187 , - 3718 , - 1769 , - 708 , - 2903 , - 1250 , - 2853 , - 608 , - 1619 , - 3518 , - 3937 , - 508 , - 335 , - 1050 , - 285 , - 408 , - 3787 , - 3318 , - 1369 , - 308 , - 2503 , - 850 , - 2453 , - 208 , - 1219 , - 3118 , - 3537 , - 108 , - 4671 , - 650 , - 4621 , - 8 , - 3387 , - 2918 , - 969 , - 4644 , - 2103 , - 450 , - 2053 , - 4544 , - 819 , - 2718 , - 3137 , - 4444 , - 4271 , - 250 , - 4221 , - 4344 , - 2987 , - 2518 , - 569 , - 4244 , - 1703 , - 50 , - 1653 , - 4144 , - 419 , - 2318 , - 2737 , - 4044 , - 3871 , - 4586 , - 3821 , - 3944 , - 2587 , - 2118 , - 169 , - 3844 , - 1303 , - 4386 , - 1253 , - 3744 , - 19 , - 1918 , - 2337 , - 3644 , - 3471 , - 4186 , - 3421 , - 3544 , - 2187 , - 1718 , - 4505 , - 3444 , - 903 , - 3986 , - 853 , - 3344 , - 4355 , - 1518 , - 1937 , - 3244 , - 3071 , - 3786 , - 3021 , - 3144 , - 1787 , - 1318 , - 4105 , - 3044 , - 503 , - 3586 , - 453 , - 2944 , - 3955 , - 1118 , - 1537 , - 2844 , - 2671 , - 3386 , - 2621 , - 2744 , - 1387 , - 918 , - 3705 , - 2644 , - 103 , - 3186 , - 53 , - 2544 , - 3555 , - 718 , - 1137 , - 2444 , - 2271 , - 2986 , - 2221 , - 2344 , - 987 , - 518 , - 3305 , - 2244 , - 4439 , - 2786 , - 4389 , - 2144 , - 3155 , - 318 , - 737 , - 2044 , - 1871 , - 2586 , - 1821 , - 1944 , - 587 , - 118 , - 2905 , - 1844 , - 4039 , - 2386 , - 3989 , - 1744 , - 2755 , - 4654 , - 337 , - 1644 , - 1471 , - 2186 , - 1421 , - 1544 , - 187 , - 4454 , - 2505 , - 1444 , - 3639 , - 1986 , - 3589 , - 1344 , - 2355 , - 4254 , - 4673 , - 1244 , - 1071 , - 1786 , - 1021 , - 1144 , - 4523 , - 4054 , - 2105 , - 1044 , - 3239 , - 1586 , - 3189 , - 944 , - 1955 , - 3854 , - 4273 , - 844 , - 671 , - 1386 , - 621 , - 744 , - 4123 , - 3654 , - 1705 , - 644 , - 2839 , - 1186 , - 2789 , - 544 , - 1555 , - 3454 , - 3873 , - 444 , - 271 , - 986 , - 221 , - 344 , - 3723 , - 3254 , - 1305 , - 244 , - 2439 , - 786 , - 2389 , - 144 , - 1155 , - 3054 , - 3473 , - 44 , - 4607 , - 586 , - 4557 , - 4680 , - 3323 , - 2854 , - 905 , - 4580 , - 2039 , - 386 , - 1989 , - 4480 , - 755 , - 2654 , - 3073 , - 4380 , - 4207 , - 186 , - 4157 , - 4280 , - 2923 , - 2454 , - 505 , - 4180 , - 1639 , - 4722 , - 1589 , - 4080 , - 355 , - 2254 , - 2673 , - 3980 , - 3807 , - 4522 , - 3757 , - 3880 , - 2523 , - 2054 , - 105 , - 3780 , - 1239 , - 4322 , - 1189 , - 3680 , - 4691 , - 1854 , - 2273 , - 3580 , - 3407 , - 4122 , - 3357 , - 3480 , - 2123 , - 1654 , - 4441 , - 3380 , - 839 , - 3922 , - 789 , - 3280 , - 4291 , - 1454 , - 1873 , - 3180 , - 3007 , - 3722 , - 2957 , - 3080 , - 1723 , - 1254 , - 4041 , - 2980 , - 439 , - 3522 , - 389 , - 2880 , - 3891 , - 1054 , - 1473 , - 2780 , - 2607 , - 3322 , - 2557 , - 2680 , - 1323 , - 854 , - 3641 , - 2580 , - 39 , - 3122 , - 4725 , - 2480 , - 3491 , - 654 , - 1073 , - 2380 , - 2207 , - 2922 , - 2157 , - 2280 , - 923 , - 454 , - 3241 , - 2180 , - 4375 , - 2722 , - 4325 , - 2080 , - 3091 , - 254 , - 673 , - 1980 , - 1807 , - 2522 , - 1757 , - 1880 , - 523 , - 54 , - 2841 , - 1780 , - 3975 , - 2322 , - 3925 , - 1680 , - 2691 , - 4590 , - 273 , - 1580 , - 1407 , - 2122 , - 1357 , - 1480 , - 123 , - 4390 , - 2441 , - 1380 , - 3575 , - 1922 , - 3525 , - 1280 , - 2291 , - 4190 , - 4609 , - 1180 , - 1007 , - 1722 , - 957 , - 1080 , - 4459 , - 3990 , - 2041 , - 980 , - 3175 , - 1522 , - 3125 , - 880 , - 1891 , - 3790 , - 4209 , - 780 , - 607 , - 1322 , - 557 , - 680 , - 4059 , - 3590 , - 1641 , - 580 , - 2775 , - 1122 , - 2725 , - 480 , - 1491 , - 3390 , - 3809 , - 380 , - 207 , - 922 , - 157 , - 280 , - 3659 , - 3190 , - 1241 , - 180 , - 2375 , - 722 , - 2325 , - 80 , - 1091 , - 2990 , - 3409 , - 4716 , - 4543 , - 522 , - 4493 , - 4616 , - 3259 , - 2790 , - 841 , - 4516 , - 1975 , - 322 , - 1925 , - 4416 , - 691 , - 2590 , - 3009 , - 4316 , - 4143 , - 122 , - 4093 , - 4216 , - 2859 , - 2390 , - 441 , - 4116 , - 1575 , - 4658 , - 1525 , - 4016 , - 291 , - 2190 , - 2609 , - 3916 , - 3743 , - 4458 , - 3693 , - 3816 , - 2459 , - 1990 , - 41 , - 3716 , - 1175 , - 4258 , - 1125 , - 3616 , - 4627 , - 1790 , - 2209 , - 3516 , - 3343 , - 4058 , - 3293 , - 3416 , - 2059 , - 1590 , - 4377 , - 3316 , - 775 , - 3858 , - 725 , - 3216 , - 4227 , - 1390 , - 1809 , - 3116 , - 2943 , - 3658 , - 2893 , - 3016 , - 1659 , - 1190 , - 3977 , - 2916 , - 375 , - 3458 , - 325 , - 2816 , - 3827 , - 990 , - 1409 , - 2716 , - 2543 , - 3258 , - 2493 , - 2616 , - 1259 , - 790 , - 3577 , - 2516 , - 4711 , - 3058 , - 4661 , - 2416 , - 3427 , - 590 , - 1009 , - 2316 , - 2143 , - 2858 , - 2093 , - 2216 , - 859 , - 390 , - 3177 , - 2116 , - 4311 , - 2658 , - 4261 , - 2016 , - 3027 , - 190 , - 609 , - 1916 , - 1743 , - 2458 , - 1693 , - 1816 , - 459 , - 4726 , - 2777 , - 1716 , - 3911 , - 2258 , - 3861 , - 1616 , - 2627 , - 4526 , - 209 , - 1516 , - 1343 , - 2058 , - 1293 , - 1416 , - 59 , - 4326 , - 2377 , - 1316 , - 3511 , - 1858 , - 3461 , - 1216 , - 2227 , - 4126 , - 4545 , - 1116 , - 943 , - 1658 , - 893 , - 1016 , - 4395 , - 3926 , - 1977 , - 916 , - 3111 , - 1458 , - 3061 , - 816 , - 1827 , - 3726 , - 4145 , - 716 , - 543 , - 1258 , - 493 , - 616 , - 3995 , - 3526 , - 1577 , - 516 , - 2711 , - 1058 , - 2661 , - 416 , - 1427 , - 3326 , - 3745 , - 316 , - 143 , - 858 , - 93 , - 216 , - 3595 , - 3126 , - 1177 , - 116 , - 2311 , - 658 , - 2261 , - 16 , - 1027 , - 2926 , - 3345 , - 4652 , - 4479 , - 458 , - 4429 , - 4552 , - 3195 , - 2726 , - 777 , - 4452 , - 1911 , - 258 , - 1861 , - 4352 , - 627 , - 2526 , - 2945 , - 4252 , - 4079 , - 58 , - 4029 , - 4152 , - 2795 , - 2326 , - 377 , - 4052 , - 1511 , - 4594 , - 1461 , - 3952 , - 227 , - 2126 , - 2545 , - 3852 , - 3679 , - 4394 , - 3629 , - 3752 , - 2395 , - 1926 , - 4713 , - 3652 , - 1111 , - 4194 , - 1061 , - 3552 , - 4563 , - 1726 , - 2145 , - 3452 , - 3279 , - 3994 , - 3229 , - 3352 , - 1995 , - 1526 , - 4313 , - 3252 , - 711 , - 3794 , - 661 , - 3152 , - 4163 , - 1326 , - 1745 , - 3052 , - 2879 , - 3594 , - 2829 , - 2952 , - 1595 , - 1126 , - 3913 , - 2852 , - 311 , - 3394 , - 261 , - 2752 , - 3763 , - 926 , - 1345 , - 2652 , - 2479 , - 3194 , - 2429 , - 2552 , - 1195 , - 726 , - 3513 , - 2452 , - 4647 , - 2994 , - 4597 , - 2352 , - 3363 , - 526 , - 945 , - 2252 , - 2079 , - 2794 , - 2029 , - 2152 , - 795 , - 326 , - 3113 , - 2052 , - 4247 , - 2594 , - 4197 , - 1952 , - 2963 , - 126 , - 545 , - 1852 , - 1679 , - 2394 , - 1629 , - 1752 , - 395 , - 4662 , - 2713 , - 1652 , - 3847 , - 2194 , - 3797 , - 1552 , - 2563 , - 4462 , - 145 , - 1452 , - 1279 , - 1994 , - 1229 , - 1352 , - 4731 , - 4262 , - 2313 , - 1252 , - 3447 , - 1794 , - 3397 , - 1152 , - 2163 , - 4062 , - 4481 , - 1052 , - 879 , - 1594 , - 829 , - 952 , - 4331 , - 3862 , - 1913 , - 852 , - 3047 , - 1394 , - 2997 , - 752 , - 1763 , - 3662 , - 4081 , - 652 , - 479 , - 1194 , - 429 , - 552 , - 3931 , - 3462 , - 1513 , - 452 , - 2647 , - 994 , - 2597 , - 352 , - 1363 , - 3262 , - 3681 , - 252 , - 79 , - 794 , - 29 , - 152 , - 3531 , - 3062 , - 1113 , - 52 , - 2247 , - 594 , - 2197 , - 4688 , - 963 , - 2862 , - 3281 , - 4588 , - 4415 , - 394 , - 4365 , - 4488 , - 3131 , - 2662 , - 713 , - 4388 , - 1847 , - 194 , - 1797 , - 4288 , - 563 , - 2462 , - 2881 , - 4188 , - 4015 , - 4730 , - 3965 , - 4088 , - 2731 , - 2262 , - 313 , - 3988 , - 1447 , - 4530 , - 1397 , - 3888 , - 163 , - 2062 , - 2481 , - 3788 , - 3615 , - 4330 , - 3565 , - 3688 , - 2331 , - 1862 , - 4649 , - 3588 , - 1047 , - 4130 , - 997 , - 3488 , - 4499 , - 1662 , - 2081 , - 3388 , - 3215 , - 3930 , - 3165 , - 3288 , - 1931 , - 1462 , - 4249 , - 3188 , - 647 , - 3730 , - 597 , - 3088 , - 4099 , - 1262 , - 1681 , - 2988 , - 2815 , - 3530 , - 2765 , - 2888 , - 1531 , - 1062 , - 3849 , - 2788 , - 247 , - 3330 , - 197 , - 2688 , - 3699 , - 862 , - 1281 , - 2588 , - 2415 , - 3130 , - 2365 , - 2488 , - 1131 , - 662 , - 3449 , - 2388 , - 4583 , - 2930 , - 4533 , - 2288 , - 3299 , - 462 , - 881 , - 2188 , - 2015 , - 2730 , - 1965 , - 2088 , - 731 , - 262 , - 3049 , - 1988 , - 4183 , - 2530 , - 4133 , - 1888 , - 2899 , - 62 , - 481 , - 1788 , - 1615 , - 2330 , - 1565 , - 1688 , - 331 , - 4598 , - 2649 , - 1588 , - 3783 , - 2130 , - 3733 , - 1488 , - 2499 , - 4398 , - 81 , - 1388 , - 1215 , - 1930 , - 1165 , - 1288 , - 4667 , - 4198 , - 2249 , - 1188 , - 3383 , - 1730 , - 3333 , - 1088 , - 2099 , - 3998 , - 4417 , - 988 , - 815 , - 1530 , - 765 , - 888 , - 4267 , - 3798 , - 1849 , - 788 , - 2983 , - 1330 , - 2933 , - 688 , - 1699 , - 3598 , - 4017 , - 588 , - 415 , - 1130 , - 365 , - 488 , - 3867 , - 3398 , - 1449 , - 388 , - 2583 , - 930 , - 2533 , - 288 , - 1299 , - 3198 , - 3617 , - 188 , - 15 , - 730 , - 4701 , - 88 , - 3467 , - 2998 , - 1049 , - 4724 , - 2183 , - 530 , - 2133 , - 4624 , - 899 , - 2798 , - 3217 , - 4524 , - 4351 , - 330 , - 4301 , - 4424 , - 3067 , - 2598 , - 649 , - 4324 , - 1783 , - 130 , - 1733 , - 4224 , - 499 , - 2398 , - 2817 , - 4124 , - 3951 , - 4666 , - 3901 , - 4024 , - 2667 , - 2198 , - 249 , - 3924 , - 1383 , - 4466 , - 1333 , - 3824 , - 99 , - 1998 , - 2417 , - 3724 , - 3551 , - 4266 , - 3501 , - 3624 , - 2267 , - 1798 , - 4585 , - 3524 , - 983 , - 4066 , - 933 , - 3424 , - 4435 , - 1598 , - 2017 , - 3324 , - 3151 , - 3866 , - 3101 , - 3224 , - 1867 , - 1398 , - 4185 , - 3124 , - 583 , - 3666 , - 533 , - 3024 , - 4035 , - 1198 , - 1617 , - 2924 , - 2751 , - 3466 , - 2701 , - 2824 , - 1467 , - 998 , - 3785 , - 2724 , - 183 , - 3266 , - 133 , - 2624 , - 3635 , - 798 , - 1217 , - 2524 , - 2351 , - 3066 , - 2301 , - 2424 , - 1067 , - 598 , - 3385 , - 2324 , - 4519 , - 2866 , - 4469 , - 2224 , - 3235 , - 398 , - 817 , - 2124 , - 1951 , - 2666 , - 1901 , - 2024 , - 667 , - 198 , - 2985 , - 1924 , - 4119 , - 2466 , - 4069 , - 1824 , - 2835 , - 4734 , - 417 , - 1724 , - 1551 , - 2266 , - 1501 , - 1624 , - 267 , - 4534 , - 2585 , - 1524 , - 3719 , - 2066 , - 3669 , - 1424 , - 2435 , - 4334 , - 17 , - 1324 , - 1151 , - 1866 , - 1101 , - 1224 , - 4603 , - 4134 , - 2185 , - 1124 , - 3319 , - 1666 , - 3269 , - 1024 , - 2035 , - 3934 , - 4353 , - 924 , - 751 , - 1466 , - 701 , - 824 , - 4203 , - 3734 , - 1785 , - 724 , - 2919 , - 1266 , - 2869 , - 624 , - 1635 , - 3534 , - 3953 , - 524 , - 351 , - 1066 , - 301 , - 424 , - 3803 , - 3334 , - 1385 , - 324 , - 2519 , - 866 , - 2469 , - 224 , - 1235 , - 3134 , - 3553 , - 124 , - 4687 , - 666 , - 4637 , - 24 , - 3403 , - 2934 , - 985 , - 4660 , - 2119 , - 466 , - 2069 , - 4560 , - 835 , - 2734 , - 3153 , - 4460 , - 4287 , - 266 , - 4237 , - 4360 , - 3003 , - 2534 , - 585 , - 4260 , - 1719 , - 66 , - 1669 , - 4160 , - 435 , - 2334 , - 2753 , - 4060 , - 3887 , - 4602 , - 3837 , - 3960 , - 2603 , - 2134 , - 185 , - 3860 , - 1319 , - 4402 , - 1269 , - 3760 , - 35 , - 1934 , - 2353 , - 3660 , - 3487 , - 4202 , - 3437 , - 3560 , - 2203 , - 1734 , - 4521 , - 3460 , - 919 , - 4002 , - 869 , - 3360 , - 4371 , - 1534 , - 1953 , - 3260 , - 3087 , - 3802 , - 3037 , - 3160 , - 1803 , - 1334 , - 4121 , - 3060 , - 519 , - 3602 , - 469 , - 2960 , - 3971 , - 1134 , - 1553 , - 2860 , - 2687 , - 3402 , - 2637 , - 2760 , - 1403 , - 934 , - 3721 , - 2660 , - 119 , - 3202 , - 69 , - 2560 , - 3571 , - 734 , - 1153 , - 2460 , - 2287 , - 3002 , - 2237 , - 2360 , - 1003 , - 534 , - 3321 , - 2260 , - 4455 , - 2802 , - 4405 , - 2160 , - 3171 , - 334 , - 753 , - 2060 , - 1887 , - 2602 , - 1837 , - 1960 , - 603 , - 134 , - 2921 , - 1860 , - 4055 , - 2402 , - 4005 , - 1760 , - 2771 , - 4670 , - 353 , - 1660 , - 1487 , - 2202 , - 1437 , - 1560 , - 203 , - 4470 , - 2521 , - 1460 , - 3655 , - 2002 , - 3605 , - 1360 , - 2371 , - 4270 , - 4689 , - 1260 , - 1087 , - 1802 , - 1037 , - 1160 , - 4539 , - 4070 , - 2121 , - 1060 , - 3255 , - 1602 , - 3205 , - 960 , - 1971 , - 3870 , - 4289 , - 860 , - 687 , - 1402 , - 637 , - 760 , - 4139 , - 3670 , - 1721 , - 660 , - 2855 , - 1202 , - 2805 , - 560 , - 1571 , - 3470 , - 3889 , - 460 , - 287 , - 1002 , - 237 , - 360 , - 3739 , - 3270 , - 1321 , - 260 , - 2455 , - 802 , - 2405 , - 160 , - 1171 , - 3070 , - 3489 , - 60 , - 4623 , - 602 , - 4573 , - 4696 , - 3339 , - 2870 , - 921 , - 4596 , - 2055 , - 402 , - 2005 , - 4496 , - 771 , - 2670 , - 3089 , - 4396 , - 4223 , - 202 , - 4173 , - 4296 , - 2939 , - 2470 , - 521 , - 4196 , - 1655 , - 2 , - 1605 , - 4096 , - 371 , - 2270 , - 2689 , - 3996 , - 3823 , - 4538 , - 3773 , - 3896 , - 2539 , - 2070 , - 121 , - 3796 , - 1255 , - 4338 , - 1205 , - 3696 , - 4707 , - 1870 , - 2289 , - 3596 , - 3423 , - 4138 , - 3373 , - 3496 , - 2139 , - 1670 , - 4457 , - 3396 , - 855 , - 3938 , - 805 , - 3296 , - 4307 , - 1470 , - 1889 , - 3196 , - 3023 , - 3738 , - 2973 , - 3096 , - 1739 , - 1270 , - 4057 , - 2996 , - 455 , - 3538 , - 405 , - 2896 , - 3907 , - 1070 , - 1489 , - 2796 , - 2623 , - 3338 , - 2573 , - 2696 , - 1339 , - 870 , - 3657 , - 2596 , - 55 , - 3138 , - 5 , - 2496 , - 3507 , - 670 , - 1089 , - 2396 , - 2223 , - 2938 , - 2173 , - 2296 , - 939 , - 470 , - 3257 , - 2196 , - 4391 , - 2738 , - 4341 , - 2096 , - 3107 , - 270 , - 689 , - 1996 , - 1823 , - 2538 , - 1773 , - 1896 , - 539 , - 70 , - 2857 , - 1796 , - 3991 , - 2338 , - 3941 , - 1696 , - 2707 , - 4606 , - 289 , - 1596 , - 1423 , - 2138 , - 1373 , - 1496 , - 139 , - 4406 , - 2457 , - 1396 , - 3591 , - 1938 , - 3541 , - 1296 , - 2307 , - 4206 , - 4625 , - 1196 , - 1023 , - 1738 , - 973 , - 1096 , - 4475 , - 4006 , - 2057 , - 996 , - 3191 , - 1538 , - 3141 , - 896 , - 1907 , - 3806 , - 4225 , - 796 , - 623 , - 1338 , - 573 , - 696 , - 4075 , - 3606 , - 1657 , - 596 , - 2791 , - 1138 , - 2741 , - 496 , - 1507 , - 3406 , - 3825 , - 396 , - 223 , - 938 , - 173 , - 296 , - 3675 , - 3206 , - 1257 , - 196 , - 2391 , - 738 , - 2341 , - 96 , - 1107 , - 3006 , - 3425 , - 4732 , - 4559 , - 538 , - 4509 , - 4632 , - 3275 , - 2806 , - 857 , - 4532 , - 1991 , - 338 , - 1941 , - 4432 , - 707 , - 2606 , - 3025 , - 4332 , - 4159 , - 138 , - 4109 , - 4232 , - 2875 , - 2406 , - 457 , - 4132 , - 1591 , - 4674 , - 1541 , - 4032 , - 307 , - 2206 , - 2625 , - 3932 , - 3759 , - 4474 , - 3709 , - 3832 , - 2475 , - 2006 , - 57 , - 3732 , - 1191 , - 4274 , - 1141 , - 3632 , - 4643 , - 1806 , - 2225 , - 3532 , - 3359 , - 4074 , - 3309 , - 3432 , - 2075 , - 1606 , - 4393 , - 3332 , - 791 , - 3874 , - 741 , - 3232 , - 4243 , - 1406 , - 1825 , - 3132 , - 2959 , - 3674 , - 2909 , - 3032 , - 1675 , - 1206 , - 3993 , - 2932 , - 391 , - 3474 , - 341 , - 2832 , - 3843 , - 1006 , - 1425 , - 2732 , - 2559 , - 3274 , - 2509 , - 2632 , - 1275 , - 806 , - 3593 , - 2532 , - 4727 , - 3074 , - 4677 , - 2432 , - 3443 , - 606 , - 1025 , - 2332 , - 2159 , - 2874 , - 2109 , - 2232 , - 875 , - 406 , - 3193 , - 2132 , - 4327 , - 2674 , - 4277 , - 2032 , - 3043 , - 206 , - 625 , - 1932 , - 1759 , - 2474 , - 1709 , - 1832 , - 475 , - 6 , - 2793 , - 1732 , - 3927 , - 2274 , - 3877 , - 1632 , - 2643 , - 4542 , - 225 , - 1532 , - 1359 , - 2074 , - 1309 , - 1432 , - 75 , - 4342 , - 2393 , - 1332 , - 3527 , - 1874 , - 3477 , - 1232 , - 2243 , - 4142 , - 4561 , - 1132 , - 959 , - 1674 , - 909 , - 1032 , - 4411 , - 3942 , - 1993 , - 932 , - 3127 , - 1474 , - 3077 , - 832 , - 1843 , - 3742 , - 4161 , - 732 , - 559 , - 1274 , - 509 , - 632 , - 4011 , - 3542 , - 1593 , - 532 , - 2727 , - 1074 , - 2677 , - 432 , - 1443 , - 3342 , - 3761 , - 332 , - 159 , - 874 , - 109 , - 232 , - 3611 , - 3142 , - 1193 , - 132 , - 2327 , - 674 , - 2277 , - 32 , - 1043 , - 2942 , - 3361 , - 4668 , - 4495 , - 474 , - 4445 , - 4568 , - 3211 , - 2742 , - 793 , - 4468 , - 1927 , - 274 , - 1877 , - 4368 , - 643 , - 2542 , - 2961 , - 4268 , - 4095 , - 74 , - 4045 , - 4168 , - 2811 , - 2342 , - 393 , - 4068 , - 1527 , - 4610 , - 1477 , - 3968 , - 243 , - 2142 , - 2561 , - 3868 , - 3695 , - 4410 , - 3645 , - 3768 , - 2411 , - 1942 , - 4729 , - 3668 , - 1127 , - 4210 , - 1077 , - 3568 , - 4579 , - 1742 , - 2161 , - 3468 , - 3295 , - 4010 , - 3245 , - 3368 , - 2011 , - 1542 , - 4329 , - 3268 , - 727 , - 3810 , - 677 , - 3168 , - 4179 , - 1342 , - 1761 , - 3068 , - 2895 , - 3610 , - 2845 , - 2968 , - 1611 , - 1142 , - 3929 , - 2868 , - 327 , - 3410 , - 277 , - 2768 , - 3779 , - 942 , - 1361 , - 2668 , - 2495 , - 3210 , - 2445 , - 2568 , - 1211 , - 742 , - 3529 , - 2468 , - 4663 , - 3010 , - 4613 , - 2368 , - 3379 , - 542 , - 961 , - 2268 , - 2095 , - 2810 , - 2045 , - 2168 , - 811 , - 342 , - 3129 , - 2068 , - 4263 , - 2610 , - 4213 , - 1968 , - 2979 , - 142 , - 561 , - 1868 , - 1695 , - 2410 , - 1645 , - 1768 , - 411 , - 4678 , - 2729 , - 1668 , - 3863 , - 2210 , - 3813 , - 1568 , - 2579 , - 4478 , - 161 , - 1468 , - 1295 , - 2010 , - 1245 , - 1368 , - 11 , - 4278 , - 2329 , - 1268 , - 3463 , - 1810 , - 3413 , - 1168 , - 2179 , - 4078 , - 4497 , - 1068 , - 895 , - 1610 , - 845 , - 968 , - 4347 , - 3878 , - 1929 , - 868 , - 3063 , - 1410 , - 3013 , - 768 , - 1779 , - 3678 , - 4097 , - 668 , - 495 , - 1210 , - 445 , - 568 , - 3947 , - 3478 , - 1529 , - 468 , - 2663 , - 1010 , - 2613 , - 368 , - 1379 , - 3278 , - 3697 , - 268 , - 95 , - 810 , - 45 , - 168 , - 3547 , - 3078 , - 1129 , - 68 , - 2263 , - 610 , - 2213 , - 4704 , - 979 , - 2878 , - 3297 , - 4604 , - 4431 , - 410 , - 4381 , - 4504 , - 3147 , - 2678 , - 729 , - 4404 , - 1863 , - 210 , - 1813 , - 4304 , - 579 , - 2478 , - 2897 , - 4204 , - 4031 , - 10 , - 3981 , - 4104 , - 2747 , - 2278 , - 329 , - 4004 , - 1463 , - 4546 , - 1413 , - 3904 , - 179 , - 2078 , - 2497 , - 3804 , - 3631 , - 4346 , - 3581 , - 3704 , - 2347 , - 1878 , - 4665 , - 3604 , - 1063 , - 4146 , - 1013 , - 3504 , - 4515 , - 1678 , - 2097 , - 3404 , - 3231 , - 3946 , - 3181 , - 3304 , - 1947 , - 1478 , - 4265 , - 3204 , - 663 , - 3746 , - 613 , - 3104 , - 4115 , - 1278 , - 1697 , - 3004 , - 2831 , - 3546 , - 2781 , - 2904 , - 1547 , - 1078 , - 3865 , - 2804 , - 263 , - 3346 , - 213 , - 2704 , - 3715 , - 878 , - 1297 , - 2604 , - 2431 , - 3146 , - 2381 , - 2504 , - 1147 , - 678 , - 3465 , - 2404 , - 4599 , - 2946 , - 4549 , - 2304 , - 3315 , - 478 , - 897 , - 2204 , - 2031 , - 2746 , - 1981 , - 2104 , - 747 , - 278 , - 3065 , - 2004 , - 4199 , - 2546 , - 4149 , - 1904 , - 2915 , - 78 , - 497 , - 1804 , - 1631 , - 2346 , - 1581 , - 1704 , - 347 , - 4614 , - 2665 , - 1604 , - 3799 , - 2146 , - 3749 , - 1504 , - 2515 , - 4414 , - 97 , - 1404 , - 1231 , - 1946 , - 1181 , - 1304 , - 4683 , - 4214 , - 2265 , - 1204 , - 3399 , - 1746 , - 3349 , - 1104 , - 2115 , - 4014 , - 4433 , - 1004 , - 831 , - 1546 , - 781 , - 904 , - 4283 , - 3814 , - 1865 , - 804 , - 2999 , - 1346 , - 2949 , - 704 , - 1715 , - 3614 , - 4033 , - 604 , - 431 , - 1146 , - 381 , - 504 , - 3883 , - 3414 , - 1465 , - 404 , - 2599 , - 946 , - 2549 , - 304 , - 1315 , - 3214 , - 3633 , - 204 , - 31 , - 746 , - 4717 , - 104 , - 3483 , - 3014 , - 1065 , - 4 , - 2199 , - 546 , - 2149 , - 4640 , - 915 , - 2814 , - 3233 , - 4540 , - 4367 , - 346 , - 4317 , - 4440 , - 3083 , - 2614 , - 665 , - 4340 , - 1799 , - 146 , - 1749 , - 4240 , - 515 , - 2414 , - 2833 , - 4140 , - 3967 , - 4682 , - 3917 , - 4040 , - 2683 , - 2214 , - 265 , - 3940 , - 1399 , - 4482 , - 1349 , - 3840 , - 115 , - 2014 , - 2433 , - 3740 , - 3567 , - 4282 , - 3517 , - 3640 , - 2283 , - 1814 , - 4601 , - 3540 , - 999 , - 4082 , - 949 , - 3440 , - 4451 , - 1614 , - 2033 , - 3340 , - 3167 , - 3882 , - 3117 , - 3240 , - 1883 , - 1414 , - 4201 , - 3140 , - 599 , - 3682 , - 549 , - 3040 , - 4051 , - 1214 , - 1633 , - 2940 , - 2767 , - 3482 , - 2717 , - 2840 , - 1483 , - 1014 , - 3801 , - 2740 , - 199 , - 3282 , - 149 , - 2640 , - 3651 , - 814 , - 1233 , - 2540 , - 2367 , - 3082 , - 2317 , - 2440 , - 1083 , - 614 , - 3401 , - 2340 , - 4535 , - 2882 , - 4485 , - 2240 , - 3251 , - 414 , - 833 , - 2140 , - 1967 , - 2682 , - 1917 , - 2040 , - 683 , - 214 , - 3001 , - 1940 , - 4135 , - 2482 , - 4085 , - 1840 , - 2851 , - 14 , - 433 , - 1740 , - 1567 , - 2282 , - 1517 , - 1640 , - 283 , - 4550 , - 2601 , - 1540 , - 3735 , - 2082 , - 3685 , - 1440 , - 2451 , - 4350 , - 33 , - 1340 , - 1167 , - 1882 , - 1117 , - 1240 , - 4619 , - 4150 , - 2201 , - 1140 , - 3335 , - 1682 , - 3285 , - 1040 , - 2051 , - 3950 , - 4369 , - 940 , - 767 , - 1482 , - 717 , - 840 , - 4219 , - 3750 , - 1801 , - 740 , - 2935 , - 1282 , - 2885 , - 640 , - 1651 , - 3550 , - 3969 , - 540 , - 367 , - 1082 , - 317 , - 440 , - 3819 , - 3350 , - 1401 , - 340 , - 2535 , - 882 , - 2485 , - 240 , - 1251 , - 3150 , - 3569 , - 140 , - 4703 , - 682 , - 4653 , - 40 , - 3419 , - 2950 , - 1001 , - 4676 , - 2135 , - 482 , - 2085 , - 4576 , - 851 , - 2750 , - 3169 , - 4476 , - 4303 , - 282 , - 4253 , - 4376 , - 3019 , - 2550 , - 601 , - 4276 , - 1735 , - 82 , - 1685 , - 4176 , - 451 , - 2350 , - 2769 , - 4076 , - 3903 , - 4618 , - 3853 , - 3976 , - 2619 , - 2150 , - 201 , - 3876 , - 1335 , - 4418 , - 1285 , - 3776 , - 51 , - 1950 , - 2369 , - 3676 , - 3503 , - 4218 , - 3453 , - 3576 , - 2219 , - 1750 , - 4537 , - 3476 , - 935 , - 4018 , - 885 , - 3376 , - 4387 , - 1550 , - 1969 , - 3276 , - 3103 , - 3818 , - 3053 , - 3176 , - 1819 , - 1350 , - 4137 , - 3076 , - 535 , - 3618 , - 485 , - 2976 , - 3987 , - 1150 , - 1569 , - 2876 , - 2703 , - 3418 , - 2653 , - 2776 , - 1419 , - 950 , - 3737 , - 2676 , - 135 , - 3218 , - 85 , - 2576 , - 3587 , - 750 , - 1169 , - 2476 , - 2303 , - 3018 , - 2253 , - 2376 , - 1019 , - 550 , - 3337 , - 2276 , - 4471 , - 2818 , - 4421 , - 2176 , - 3187 , - 350 , - 769 , - 2076 , - 1903 , - 2618 , - 1853 , - 1976 , - 619 , - 150 , - 2937 , - 1876 , - 4071 , - 2418 , - 4021 , - 1776 , - 2787 , - 4686 , - 369 , - 1676 , - 1503 , - 2218 , - 1453 , - 1576 , - 219 , - 4486 , - 2537 , - 1476 , - 3671 , - 2018 , - 3621 , - 1376 , - 2387 , - 4286 , - 4705 , - 1276 , - 1103 , - 1818 , - 1053 , - 1176 , - 4555 , - 4086 , - 2137 , - 1076 , - 3271 , - 1618 , - 3221 , - 976 , - 1987 , - 3886 , - 4305 , - 876 , - 703 , - 1418 , - 653 , - 776 , - 4155 , - 3686 , - 1737 , - 676 , - 2871 , - 1218 , - 2821 , - 576 , - 1587 , - 3486 , - 3905 , - 476 , - 303 , - 1018 , - 253 , - 376 , - 3755 , - 3286 , - 1337 , - 276 , - 2471 , - 818 , - 2421 , - 176 , - 1187 , - 3086 , - 3505 , - 76 , - 4639 , - 618 , - 4589 , - 4712 , - 3355 , - 2886 , - 937 , - 4612 , - 2071 , - 418 , - 2021 , - 4512 , - 787 , - 2686 , - 3105 , - 4412 , - 4239 , - 218 , - 4189 , - 4312 , - 2955 , - 2486 , - 537 , - 4212 , - 1671 , - 18 , - 1621 , - 4112 , - 387 , - 2286 , - 2705 , - 4012 , - 3839 , - 4554 , - 3789 , - 3912 , - 2555 , - 2086 , - 137 , - 3812 , - 1271 , - 4354 , - 1221 , - 3712 , - 4723 , - 1886 , - 2305 , - 3612 , - 3439 , - 4154 , - 3389 , - 3512 , - 2155 , - 1686 , - 4473 , - 3412 , - 871 , - 3954 , - 821 , - 3312 , - 4323 , - 1486 , - 1905 , - 3212 , - 3039 , - 3754 , - 2989 , - 3112 , - 1755 , - 1286 , - 4073 , - 3012 , - 471 , - 3554 , - 421 , - 2912 , - 3923 , - 1086 , - 1505 , - 2812 , - 2639 , - 3354 , - 2589 , - 2712 , - 1355 , - 886 , - 3673 , - 2612 , - 71 , - 3154 , - 21 , - 2512 , - 3523 , - 686 , - 1105 , - 2412 , - 2239 , - 2954 , - 2189 , - 2312 , - 955 , - 486 , - 3273 , - 2212 , - 4407 , - 2754 , - 4357 , - 2112 , - 3123 , - 286 , - 705 , - 2012 , - 1839 , - 2554 , - 1789 , - 1912 , - 555 , - 86 , - 2873 , - 1812 , - 4007 , - 2354 , - 3957 , - 1712 , - 2723 , - 4622 , - 305 , - 1612 , - 1439 , - 2154 , - 1389 , - 1512 , - 155 , - 4422 , - 2473 , - 1412 , - 3607 , - 1954 , - 3557 , - 1312 , - 2323 , - 4222 , - 4641 , - 1212 , - 1039 , - 1754 , - 989 , - 1112 , - 4491 , - 4022 , - 2073 , - 1012 , - 3207 , - 1554 , - 3157 , - 912 , - 1923 , - 3822 , - 4241 , - 812 , - 639 , - 1354 , - 589 , - 712 , - 4091 , - 3622 , - 1673 , - 612 , - 2807 , - 1154 , - 2757 , - 512 , - 1523 , - 3422 , - 3841 , - 412 , - 239 , - 954 , - 189 , - 312 , - 3691 , - 3222 , - 1273 , - 212 , - 2407 , - 754 , - 2357 , - 112 , - 1123 , - 3022 , - 3441 , - 12 , - 4575 , - 554 , - 4525 , - 4648 , - 3291 , - 2822 , - 873 , - 4548 , - 2007 , - 354 , - 1957 , - 4448 , - 723 , - 2622 , - 3041 , - 4348 , - 4175 , - 154 , - 4125 , - 4248 , - 2891 , - 2422 , - 473 , - 4148 , - 1607 , - 4690 , - 1557 , - 4048 , - 323 , - 2222 , - 2641 , - 3948 , - 3775 , - 4490 , - 3725 , - 3848 , - 2491 , - 2022 , - 73 , - 3748 , - 1207 , - 4290 , - 1157 , - 3648 , - 4659 , - 1822 , - 2241 , - 3548 , - 3375 , - 4090 , - 3325 , - 3448 , - 2091 , - 1622 , - 4409 , - 3348 , - 807 , - 3890 , - 757 , - 3248 , - 4259 , - 1422 , - 1841 , - 3148 , - 2975 , - 3690 , - 2925 , - 3048 , - 1691 , - 1222 , - 4009 , - 2948 , - 407 , - 3490 , - 357 , - 2848 , - 3859 , - 1022 , - 1441 , - 2748 , - 2575 , - 3290 , - 2525 , - 2648 , - 1291 , - 822 , - 3609 , - 2548 , - 7 , - 3090 , - 4693 , - 2448 , - 3459 , - 622 , - 1041 , - 2348 , - 2175 , - 2890 , - 2125 , - 2248 , - 891 , - 422 , - 3209 , - 2148 , - 4343 , - 2690 , - 4293 , - 2048 , - 3059 , - 222 , - 641 , - 1948 , - 1775 , - 2490 , - 1725 , - 1848 , - 491 , - 22 , - 2809 , - 1748 , - 3943 , - 2290 , - 3893 , - 1648 , - 2659 , - 4558 , - 241 , - 1548 , - 1375 , - 2090 , - 1325 , - 1448 , - 91 , - 4358 , - 2409 , - 1348 , - 3543 , - 1890 , - 3493 , - 1248 , - 2259 , - 4158 , - 4577 , - 1148 , - 975 , - 1690 , - 925 , - 1048 , - 4427 , - 3958 , - 2009 , - 948 , - 3143 , - 1490 , - 3093 , - 848 , - 1859 , - 3758 , - 4177 , - 748 , - 575 , - 1290 , - 525 , - 648 , - 4027 , - 3558 , - 1609 , - 548 , - 2743 , - 1090 , - 2693 , - 448 , - 1459 , - 3358 , - 3777 , - 348 , - 175 , - 890 , - 125 , - 248 , - 3627 , - 3158 , - 1209 , - 148 , - 2343 , - 690 , - 2293 , - 48 , - 1059 , - 2958 , - 3377 , - 4684 , - 4511 , - 490 , - 4461 , - 4584 , - 3227 , - 2758 , - 809 , - 4484 , - 1943 , - 290 , - 1893 , - 4384 , - 659 , - 2558 , - 2977 , - 4284 , - 4111 , - 90 , - 4061 , - 4184 , - 2827 , - 2358 , - 409 , - 4084 , - 1543 , - 4626 , - 1493 , - 3984 , - 259 , - 2158 , - 2577 , - 3884 , - 3711 , - 4426 , - 3661 , - 3784 , - 2427 , - 1958 , - 9 , - 3684 , - 1143 , - 4226 , - 1093 , - 3584 , - 4595 , - 1758 , - 2177 , - 3484 , - 3311 , - 4026 , - 3261 , - 3384 , - 2027 , - 1558 , - 4345 , - 3284 , - 743 , - 3826 , - 693 , - 3184 , - 4195 , - 1358 , - 1777 , - 3084 , - 2911 , - 3626 , - 2861 , - 2984 , - 1627 , - 1158 , - 3945 , - 2884 , - 343 , - 3426 , - 293 , - 2784 , - 3795 , - 958 , - 1377 , - 2684 , - 2511 , - 3226 , - 2461 , - 2584 , - 1227 , - 758 , - 3545 , - 2484 , - 4679 , - 3026 , - 4629 , - 2384 , - 3395 , - 558 , - 977 , - 2284 , - 2111 , - 2826 , - 2061 , - 2184 , - 827 , - 358 , - 3145 , - 2084 , - 4279 , - 2626 , - 4229 , - 1984 , - 2995 , - 158 , - 577 , - 1884 , - 1711 , - 2426 , - 1661 , - 1784 , - 427 , - 4694 , - 2745 , - 1684 , - 3879 , - 2226 , - 3829 , - 1584 , - 2595 , - 4494 , - 177 , - 1484 , - 1311 , - 2026 , - 1261 , - 1384 , - 27 , - 4294 , - 2345 , - 1284 , - 3479 , - 1826 , - 3429 , - 1184 , - 2195 , - 4094 , - 4513 , - 1084 , - 911 , - 1626 , - 861 , - 984 , - 4363 , - 3894 , - 1945 , - 884 , - 3079 , - 1426 , - 3029 , - 784 , - 1795 , - 3694 , - 4113 , - 684 , - 511 , - 1226 , - 461 , - 584 , - 3963 , - 3494 , - 1545 , - 484 , - 2679 , - 1026 , - 2629 , - 384 , - 1395 , - 3294 , - 3713 , - 284 , - 111 , - 826 , - 61 , - 184 , - 3563 , - 3094 , - 1145 , - 84 , - 2279 , - 626 , - 2229 , - 4720 , - 995 , - 2894 , - 3313 , - 4620 , - 4447 , - 426 , - 4397 , - 4520 , - 3163 , - 2694 , - 745 , - 4420 , - 1879 , - 226 , - 1829 , - 4320 , - 595 , - 2494 , - 2913 , - 4220 , - 4047 , - 26 , - 3997 , - 4120 , - 2763 , - 2294 , - 345 , - 4020 , - 1479 , - 4562 , - 1429 , - 3920 , - 195 , - 2094 , - 2513 , - 3820 , - 3647 , - 4362 , - 3597 , - 3720 , - 2363 , - 1894 , - 4681 , - 3620 , - 1079 , - 4162 , - 1029 , - 3520 , - 4531 , - 1694 , - 2113 , - 3420 , - 3247 , - 3962 , - 3197 , - 3320 , - 1963 , - 1494 , - 4281 , - 3220 , - 679 , - 3762 , - 629 , - 3120 , - 4131 , - 1294 , - 1713 , - 3020 , - 2847 , - 3562 , - 2797 , - 2920 , - 1563 , - 1094 , - 3881 , - 2820 , - 279 , - 3362 , - 229 , - 2720 , - 3731 , - 894 , - 1313 , - 2620 , - 2447 , - 3162 , - 2397 , - 2520 , - 1163 , - 694 , - 3481 , - 2420 , - 4615 , - 2962 , - 4565 , - 2320 , - 3331 , - 494 , - 913 , - 2220 , - 2047 , - 2762 , - 1997 , - 2120 , - 763 , - 294 , - 3081 , - 2020 , - 4215 , - 2562 , - 4165 , - 1920 , - 2931 , - 94 , - 513 , - 1820 , - 1647 , - 2362 , - 1597 , - 1720 , - 363 , - 4630 , - 2681 , - 1620 , - 3815 , - 2162 , - 3765 , - 1520 , - 2531 , - 4430 , - 113 , - 1420 , - 1247 , - 1962 , - 1197 , - 1320 , - 4699 , - 4230 , - 2281 , - 1220 , - 3415 , - 1762 , - 3365 , - 1120 , - 2131 , - 4030 , - 4449 , - 1020 , - 847 , - 1562 , - 797 , - 920 , - 4299 , - 3830 , - 1881 , - 820 , - 3015 , - 1362 , - 2965 , - 720 , - 1731 , - 3630 , - 4049 , - 620 , - 447 , - 1162 , - 397 , - 520 , - 3899 , - 3430 , - 1481 , - 420 , - 2615 , - 962 , - 2565 , - 320 , - 1331 , - 3230 , - 3649 , - 220 , - 47 , - 762 , - 4733 , - 120 , - 3499 , - 3030 , - 1081 , - 20 , - 2215 , - 562 , - 2165 , - 4656 , - 931 , - 2830 , - 3249 , - 4556 , - 4383 , - 362 , - 4333 , - 4456 , - 3099 , - 2630 , - 681 , - 4356 , - 1815 , - 162 , - 1765 , - 4256 , - 531 , - 2430 , - 2849 , - 4156 , - 3983 , - 4698 , - 3933 , - 4056 , - 2699 , - 2230 , - 281 , - 3956 , - 1415 , - 4498 , - 1365 , - 3856 , - 131 , - 2030 , - 2449 , - 3756 , - 3583 , - 4298 , - 3533 , - 3656 , - 2299 , - 1830 , - 4617 , - 3556 , - 1015 , - 4098 , - 965 , - 3456 , - 4467 , - 1630 , - 2049 , - 3356 , - 3183 , - 3898 , - 3133 , - 3256 , - 1899 , - 1430 , - 4217 , - 3156 , - 615 , - 3698 , - 565 , - 3056 , - 4067 , - 1230 , - 1649 , - 2956 , - 2783 , - 3498 , - 2733 , - 2856 , - 1499 , - 1030 , - 3817 , - 2756 , - 215 , - 3298 , - 165 , - 2656 , - 3667 , - 830 , - 1249 , - 2556 , - 2383 , - 3098 , - 2333 , - 2456 , - 1099 , - 630 , - 3417 , - 2356 , - 4551 , - 2898 , - 4501 , - 2256 , - 3267 , - 430 , - 849 , - 2156 , - 1983 , - 2698 , - 1933 , - 2056 , - 699 , - 230 , - 3017 , - 1956 , - 4151 , - 2498 , - 4101 , - 1856 , - 2867 , - 30 , - 449 , - 1756 , - 1583 , - 2298 , - 1533 , - 1656 , - 299 , - 4566 , - 2617 , - 1556 , - 3751 , - 2098 , - 3701 , - 1456 , - 2467 , - 4366 , - 49 , - 1356 , - 1183 , - 1898 , - 1133 , - 1256 , - 4635 , - 4166 , - 2217 , - 1156 , - 3351 , - 1698 , - 3301 , - 1056 , - 2067 , - 3966 , - 4385 , - 956 , - 783 , - 1498 , - 733 , - 856 , - 4235 , - 3766 , - 1817 , - 756 , - 2951 , - 1298 , - 2901 , - 656 , - 1667 , - 3566 , - 3985 , - 556 , - 383 , - 1098 , - 333 , - 456 , - 3835 , - 3366 , - 1417 , - 356 , - 2551 , - 898 , - 2501 , - 256 , - 1267 , - 3166 , - 3585 , - 156 , - 4719 , - 698 , - 4669 , - 56 , - 3435 , - 2966 , - 1017 , - 4692 , - 2151 , - 498 , - 2101 , - 4592 , - 867 , - 2766 , - 3185 , - 4492 , - 4319 , - 298 , - 4269 , - 4392 , - 3035 , - 2566 , - 617 , - 4292 , - 1751 , - 98 , - 1701 , - 4192 , - 467 , - 2366 , - 2785 , - 4092 , - 3919 , - 4634 , - 3869 , - 3992 , - 2635 , - 2166 , - 217 , - 3892 , - 1351 , - 4434 , - 1301 , - 3792 , - 67 , - 1966 , - 2385 , - 3692 , - 3519 , - 4234 , - 3469 , - 3592 , - 2235 , - 1766 , - 4553 , - 3492 , - 951 , - 4034 , - 901 , - 3392 , - 4403 , - 1566 , - 1985 , - 3292 , - 3119 , - 3834 , - 3069 , - 3192 , - 1835 , - 1366 , - 4153 , - 3092 , - 551 , - 3634 , - 501 , - 2992 , - 4003 , - 1166 , - 1585 , - 2892 , - 2719 , - 3434 , - 2669 , - 2792 , - 1435 , - 966 , - 3753 , - 2692 , - 151 , - 3234 , - 101 , - 2592 , - 3603 , - 766 , - 1185 , - 2492 , - 2319 , - 3034 , - 2269 , - 2392 , - 1035 , - 566 , - 3353 , - 2292 , - 4487 , - 2834 , - 4437 , - 2192 , - 3203 , - 366 , - 785 , - 2092 , - 1919 , - 2634 , - 1869 , - 1992 , - 635 , - 166 , - 2953 , - 1892 , - 4087 , - 2434 , - 4037 , - 1792 , - 2803 , - 4702 , - 385 , - 1692 , - 1519 , - 2234 , - 1469 , - 1592 , - 235 , - 4502 , - 2553 , - 1492 , - 3687 , - 2034 , - 3637 , - 1392 , - 2403 , - 4302 , - 4721 , - 1292 , - 1119 , - 1834 , - 1069 , - 1192 , - 4571 , - 4102 , - 2153 , - 1092 , - 3287 , - 1634 , - 3237 , - 992 , - 2003 , - 3902 , - 4321 , - 892 , - 719 , - 1434 , - 669 , - 792 , - 4171 , - 3702 , - 1753 , - 692 , - 2887 , - 1234 , - 2837 , - 592 , - 1603 , - 3502 , - 3921 , - 492 , - 319 , - 1034 , - 269 , - 392 , - 3771 , - 3302 , - 1353 , - 292 , - 2487 , - 834 , - 2437 , - 192 , - 1203 , - 3102 , - 3521 , - 92 , - 4655 , - 634 , - 4605 , - 4728 , - 3371 , - 2902 , - 953 , - 4628 , - 2087 , - 434 , - 2037 , - 4528 , - 803 , - 2702 , - 3121 , - 4428 , - 4255 , - 234 , - 4205 , - 4328 , - 2971 , - 2502 , - 553 , - 4228 , - 1687 , - 34 , - 1637 , - 4128 , - 403 , - 2302 , - 2721 , - 4028 , - 3855 , - 4570 , - 3805 , - 3928 , - 2571 , - 2102 , - 153 , - 3828 , - 1287 , - 4370 , - 1237 , - 3728 , - 3 , - 1902 , - 2321 , - 3628 , - 3455 , - 4170 , - 3405 , - 3528 , - 2171 , - 1702 , - 4489 , - 3428 , - 887 , - 3970 , - 837 , - 3328 , - 4339 , - 1502 , - 1921 , - 3228 , - 3055 , - 3770 , - 3005 , - 3128 , - 1771 , - 1302 , - 4089 , - 3028 , - 487 , - 3570 , - 437 , - 2928 , - 3939 , - 1102 , - 1521 , - 2828 , - 2655 , - 3370 , - 2605 , - 2728 , - 1371 , - 902 , - 3689 , - 2628 , - 87 , - 3170 , - 37 , - 2528 , - 3539 , - 702 , - 1121 , - 2428 , - 2255 , - 2970 , - 2205 , - 2328 , - 971 , - 502 , - 3289 , - 2228 , - 4423 , - 2770 , - 4373 , - 2128 , - 3139 , - 302 , - 721 , - 2028 , - 1855 , - 2570 , - 1805 , - 1928 , - 571 , - 102 , - 2889 , - 1828 , - 4023 , - 2370 , - 3973 , - 1728 , - 2739 , - 4638 , - 321 , - 1628 , - 1455 , - 2170 , - 1405 , - 1528 , - 171 , - 4438 , - 2489 , - 1428 , - 3623 , - 1970 , - 3573 , - 1328 , - 2339 , - 4238 , - 4657 , - 1228 , - 1055 , - 1770 , - 1005 , - 1128 , - 4507 , - 4038 , - 2089 , - 1028 , - 3223 , - 1570 , - 3173 , - 928 , - 1939 , - 3838 , - 4257 , - 828 , - 655 , - 1370 , - 605 , - 728 , - 4107 , - 3638 , - 1689 , - 628 , - 2823 , - 1170 , - 2773 , - 528 , - 1539 , - 3438 , - 3857 , - 428 , - 255 , - 970 , - 205 , - 328 , - 3707 , - 3238 , - 1289 , - 228 , - 2423 , - 770 , - 2373 , - 128 , - 1139 , - 3038 , - 3457 , - 28 , - 4591 , - 570 , - 4541 , - 4664 , - 3307 , - 2838 , - 889 , - 4564 , - 2023 , - 370 , - 1973 , - 4464 , - 739 , - 2638 , - 3057 , - 4364 , - 4191 , - 170 , - 4141 , - 4264 , - 2907 , - 2438 , - 489 , - 4164 , - 1623 , - 4706 , - 1573 , - 4064 , - 339 , - 2238 , - 2657 , - 3964 , - 3791 , - 4506 , - 3741 , - 3864 , - 2507 , - 2038 , - 89 , - 3764 , - 1223 , - 4306 , - 1173 , - 3664 , - 4675 , - 1838 , - 2257 , - 3564 , - 3391 , - 4106 , - 3341 , - 3464 , - 2107 , - 1638 , - 4425 , - 3364 , - 823 , - 3906 , - 773 , - 3264 , - 4275 , - 1438 , - 1857 , - 3164 , - 2991 , - 3706 , - 2941 , - 3064 , - 1707 , - 1238 , - 4025 , - 2964 , - 423 , - 3506 , - 373 , - 2864 , - 3875 , - 1038 , - 1457 , - 2764 , - 2591 , - 3306 , - 2541 , - 2664 , - 1307 , - 838 , - 3625 , - 2564 , - 23 , - 3106 , - 4709 , - 2464 , - 3475 , - 638 , - 1057 , - 2364 , - 2191 , - 2906 , - 2141 , - 2264 , - 907 , - 438 , - 3225 , - 2164 , - 4359 , - 2706 , - 4309 , - 2064 , - 3075 , - 238 , - 657 , - 1964 , - 1791 , - 2506 , - 1741 , - 1864 , - 507 , - 38 , - 2825 , - 1764 , - 3959 , - 2306 , - 3909 , - 1664 , - 2675 , - 4574 , - 257 , - 1564 , - 1391 , - 2106 , - 1341 , - 1464 , - 107 , - 4374 , - 2425 , - 1364 , - 3559 , - 1906 , - 3509 , - 1264 , - 2275 , - 4174 , - 4593 , - 1164 , - 991 , - 1706 , - 941 , - 1064 , - 4443 , - 3974 , - 2025 , - 964 , - 3159 , - 1506 , - 3109 , - 864 , - 1875 , - 3774 , - 4193 , - 764 , - 591 , - 1306 , - 541 , - 664 , - 4043 , - 3574 , - 1625 , - 564 , - 2759 , - 1106 , - 2709 , - 464 , - 1475 , - 3374 , - 3793 , - 364 , - 191 , - 906 , - 141 , - 264 , - 3643 , - 3174 , - 1225 , - 164 , - 2359 , - 706 , - 2309 , - 64 , - 1075 , - 2974 , - 3393 , - 4700 , - 4527 , - 506 , - 4477 , - 4600 , - 3243 , - 2774 , - 825 , - 4500 , - 1959 , - 306 , - 1909 , - 4400 , - 675 , - 2574 , - 2993 , - 4300 , - 4127 , - 106 , - 4077 , - 4200 , - 2843 , - 2374 , - 425 , - 4100 , - 1559 , - 4642 , - 1509 , - 4000 , - 275 , - 2174 , - 2593 , - 3900 , - 3727 , - 4442 , - 3677 , - 3800 , - 2443 , - 1974 , - 25 , - 3700 , - 1159 , - 4242 , - 1109 , - 3600 , - 4611 , - 1774 , - 2193 , - 3500 , - 3327 , - 4042 , - 3277 , - 3400 , - 2043 , - 1574 , - 4361 , - 3300 , - 759 , - 3842 , - 709 , - 3200 , - 4211 , - 1374 , - 1793 , - 3100 , - 2927 , - 3642 , - 2877 , - 3000 , - 1643 , - 1174 , - 3961 , - 2900 , - 359 , - 3442 , - 309 , - 2800 , - 3811 , - 974 , - 1393 , - 2700 , - 2527 , - 3242 , - 2477 , - 2600 , - 1243 , - 774 , - 3561 , - 2500 , - 4695 , - 3042 , - 4645 , - 2400 , - 3411 , - 574 , - 993 , - 2300 , - 2127 , - 2842 , - 2077 , - 2200 , - 843 , - 374 , - 3161 , - 2100 , - 4295 , - 2642 , - 4245 , - 2000 , - 3011 , - 174 , - 593 , - 1900 , - 1727 , - 2442 , - 1677 , - 1800 , - 443 , - 4710 , - 2761 , - 1700 , - 3895 , - 2242 , - 3845 , - 1600 , - 2611 , - 4510 , - 193 , - 1500 , - 1327 , - 2042 , - 1277 , - 1400 , - 43 , - 4310 , - 2361 , - 1300 , - 3495 , - 1842 , - 3445 , - 1200 , - 2211 , - 4110 , - 4529 , - 1100 , - 927 , - 1642 , - 877 , - 1000 , - 4379 , - 3910 , - 1961 , - 900 , - 3095 , - 1442 , - 3045 , - 800 , - 1811 , - 3710 , - 4129 , - 700 , - 527 , - 1242 , - 477 , - 600 , - 3979 , - 3510 , - 1561 , - 500 , - 2695 , - 1042 , - 2645 , - 400 , - 1411 , - 3310 , - 3729 , - 300 , - 127 , - 842 , - 77 , - 200 , - 3579 , - 3110 , - 1161 , - 100 , - 2295 , - 642 , - 2245 , - 0 , - 3311 , - 3982 , - 2013 , - 2204 , - 4555 , - 4266 , - 1337 , - 568 , - 1959 , - 710 , - 1621 , - 4692 , - 323 , - 2914 , - 2865 , - 176 , - 4447 , - 1278 , - 269 , - 1420 , - 4731 , - 602 , - 3433 , - 3624 , - 1175 , - 886 , - 2757 , - 1988 , - 3379 , - 2130 , - 3041 , - 1312 , - 1743 , - 4334 , - 4285 , - 1596 , - 1067 , - 2698 , - 1689 , - 2840 , - 1351 , - 2022 , - 53 , - 244 , - 2595 , - 2306 , - 4177 , - 3408 , - 4799 , - 3550 , - 4461 , - 2732 , - 3163 , - 954 , - 905 , - 3016 , - 2487 , - 4118 , - 3109 , - 4260 , - 2771 , - 3442 , - 1473 , - 1664 , - 4015 , - 3726 , - 797 , - 28 , - 1419 , - 170 , - 1081 , - 4152 , - 4583 , - 2374 , - 2325 , - 4436 , - 3907 , - 738 , - 4529 , - 880 , - 4191 , - 62 , - 2893 , - 3084 , - 635 , - 346 , - 2217 , - 1448 , - 2839 , - 1590 , - 2501 , - 772 , - 1203 , - 3794 , - 3745 , - 1056 , - 527 , - 2158 , - 1149 , - 2300 , - 811 , - 1482 , - 4313 , - 4504 , - 2055 , - 1766 , - 3637 , - 2868 , - 4259 , - 3010 , - 3921 , - 2192 , - 2623 , - 414 , - 365 , - 2476 , - 1947 , - 3578 , - 2569 , - 3720 , - 2231 , - 2902 , - 933 , - 1124 , - 3475 , - 3186 , - 257 , - 4288 , - 879 , - 4430 , - 541 , - 3612 , - 4043 , - 1834 , - 1785 , - 3896 , - 3367 , - 198 , - 3989 , - 340 , - 3651 , - 4322 , - 2353 , - 2544 , - 95 , - 4606 , - 1677 , - 908 , - 2299 , - 1050 , - 1961 , - 232 , - 663 , - 3254 , - 3205 , - 516 , - 4787 , - 1618 , - 609 , - 1760 , - 271 , - 942 , - 3773 , - 3964 , - 1515 , - 1226 , - 3097 , - 2328 , - 3719 , - 2470 , - 3381 , - 1652 , - 2083 , - 4674 , - 4625 , - 1936 , - 1407 , - 3038 , - 2029 , - 3180 , - 1691 , - 2362 , - 393 , - 584 , - 2935 , - 2646 , - 4517 , - 3748 , - 339 , - 3890 , - 1 , - 3072 , - 3503 , - 1294 , - 1245 , - 3356 , - 2827 , - 4458 , - 3449 , - 4600 , - 3111 , - 3782 , - 1813 , - 2004 , - 4355 , - 4066 , - 1137 , - 368 , - 1759 , - 510 , - 1421 , - 4492 , - 123 , - 2714 , - 2665 , - 4776 , - 4247 , - 1078 , - 69 , - 1220 , - 4531 , - 402 , - 3233 , - 3424 , - 975 , - 686 , - 2557 , - 1788 , - 3179 , - 1930 , - 2841 , - 1112 , - 1543 , - 4134 , - 4085 , - 1396 , - 867 , - 2498 , - 1489 , - 2640 , - 1151 , - 1822 , - 4653 , - 44 , - 2395 , - 2106 , - 3977 , - 3208 , - 4599 , - 3350 , - 4261 , - 2532 , - 2963 , - 754 , - 705 , - 2816 , - 2287 , - 3918 , - 2909 , - 4060 , - 2571 , - 3242 , - 1273 , - 1464 , - 3815 , - 3526 , - 597 , - 4628 , - 1219 , - 4770 , - 881 , - 3952 , - 4383 , - 2174 , - 2125 , - 4236 , - 3707 , - 538 , - 4329 , - 680 , - 3991 , - 4662 , - 2693 , - 2884 , - 435 , - 146 , - 2017 , - 1248 , - 2639 , - 1390 , - 2301 , - 572 , - 1003 , - 3594 , - 3545 , - 856 , - 327 , - 1958 , - 949 , - 2100 , - 611 , - 1282 , - 4113 , - 4304 , - 1855 , - 1566 , - 3437 , - 2668 , - 4059 , - 2810 , - 3721 , - 1992 , - 2423 , - 214 , - 165 , - 2276 , - 1747 , - 3378 , - 2369 , - 3520 , - 2031 , - 2702 , - 733 , - 924 , - 3275 , - 2986 , - 57 , - 4088 , - 679 , - 4230 , - 341 , - 3412 , - 3843 , - 1634 , - 1585 , - 3696 , - 3167 , - 4798 , - 3789 , - 140 , - 3451 , - 4122 , - 2153 , - 2344 , - 4695 , - 4406 , - 1477 , - 708 , - 2099 , - 850 , - 1761 , - 32 , - 463 , - 3054 , - 3005 , - 316 , - 4587 , - 1418 , - 409 , - 1560 , - 71 , - 742 , - 3573 , - 3764 , - 1315 , - 1026 , - 2897 , - 2128 , - 3519 , - 2270 , - 3181 , - 1452 , - 1883 , - 4474 , - 4425 , - 1736 , - 1207 , - 2838 , - 1829 , - 2980 , - 1491 , - 2162 , - 193 , - 384 , - 2735 , - 2446 , - 4317 , - 3548 , - 139 , - 3690 , - 4601 , - 2872 , - 3303 , - 1094 , - 1045 , - 3156 , - 2627 , - 4258 , - 3249 , - 4400 , - 2911 , - 3582 , - 1613 , - 1804 , - 4155 , - 3866 , - 937 , - 168 , - 1559 , - 310 , - 1221 , - 4292 , - 4723 , - 2514 , - 2465 , - 4576 , - 4047 , - 878 , - 4669 , - 1020 , - 4331 , - 202 , - 3033 , - 3224 , - 775 , - 486 , - 2357 , - 1588 , - 2979 , - 1730 , - 2641 , - 912 , - 1343 , - 3934 , - 3885 , - 1196 , - 667 , - 2298 , - 1289 , - 2440 , - 951 , - 1622 , - 4453 , - 4644 , - 2195 , - 1906 , - 3777 , - 3008 , - 4399 , - 3150 , - 4061 , - 2332 , - 2763 , - 554 , - 505 , - 2616 , - 2087 , - 3718 , - 2709 , - 3860 , - 2371 , - 3042 , - 1073 , - 1264 , - 3615 , - 3326 , - 397 , - 4428 , - 1019 , - 4570 , - 681 , - 3752 , - 4183 , - 1974 , - 1925 , - 4036 , - 3507 , - 338 , - 4129 , - 480 , - 3791 , - 4462 , - 2493 , - 2684 , - 235 , - 4746 , - 1817 , - 1048 , - 2439 , - 1190 , - 2101 , - 372 , - 803 , - 3394 , - 3345 , - 656 , - 127 , - 1758 , - 749 , - 1900 , - 411 , - 1082 , - 3913 , - 4104 , - 1655 , - 1366 , - 3237 , - 2468 , - 3859 , - 2610 , - 3521 , - 1792 , - 2223 , - 14 , - 4765 , - 2076 , - 1547 , - 3178 , - 2169 , - 3320 , - 1831 , - 2502 , - 533 , - 724 , - 3075 , - 2786 , - 4657 , - 3888 , - 479 , - 4030 , - 141 , - 3212 , - 3643 , - 1434 , - 1385 , - 3496 , - 2967 , - 4598 , - 3589 , - 4740 , - 3251 , - 3922 , - 1953 , - 2144 , - 4495 , - 4206 , - 1277 , - 508 , - 1899 , - 650 , - 1561 , - 4632 , - 263 , - 2854 , - 2805 , - 116 , - 4387 , - 1218 , - 209 , - 1360 , - 4671 , - 542 , - 3373 , - 3564 , - 1115 , - 826 , - 2697 , - 1928 , - 3319 , - 2070 , - 2981 , - 1252 , - 1683 , - 4274 , - 4225 , - 1536 , - 1007 , - 2638 , - 1629 , - 2780 , - 1291 , - 1962 , - 4793 , - 184 , - 2535 , - 2246 , - 4117 , - 3348 , - 4739 , - 3490 , - 4401 , - 2672 , - 3103 , - 894 , - 845 , - 2956 , - 2427 , - 4058 , - 3049 , - 4200 , - 2711 , - 3382 , - 1413 , - 1604 , - 3955 , - 3666 , - 737 , - 4768 , - 1359 , - 110 , - 1021 , - 4092 , - 4523 , - 2314 , - 2265 , - 4376 , - 3847 , - 678 , - 4469 , - 820 , - 4131 , - 2 , - 2833 , - 3024 , - 575 , - 286 , - 2157 , - 1388 , - 2779 , - 1530 , - 2441 , - 712 , - 1143 , - 3734 , - 3685 , - 996 , - 467 , - 2098 , - 1089 , - 2240 , - 751 , - 1422 , - 4253 , - 4444 , - 1995 , - 1706 , - 3577 , - 2808 , - 4199 , - 2950 , - 3861 , - 2132 , - 2563 , - 354 , - 305 , - 2416 , - 1887 , - 3518 , - 2509 , - 3660 , - 2171 , - 2842 , - 873 , - 1064 , - 3415 , - 3126 , - 197 , - 4228 , - 819 , - 4370 , - 481 , - 3552 , - 3983 , - 1774 , - 1725 , - 3836 , - 3307 , - 138 , - 3929 , - 280 , - 3591 , - 4262 , - 2293 , - 2484 , - 35 , - 4546 , - 1617 , - 848 , - 2239 , - 990 , - 1901 , - 172 , - 603 , - 3194 , - 3145 , - 456 , - 4727 , - 1558 , - 549 , - 1700 , - 211 , - 882 , - 3713 , - 3904 , - 1455 , - 1166 , - 3037 , - 2268 , - 3659 , - 2410 , - 3321 , - 1592 , - 2023 , - 4614 , - 4565 , - 1876 , - 1347 , - 2978 , - 1969 , - 3120 , - 1631 , - 2302 , - 333 , - 524 , - 2875 , - 2586 , - 4457 , - 3688 , - 279 , - 3830 , - 4741 , - 3012 , - 3443 , - 1234 , - 1185 , - 3296 , - 2767 , - 4398 , - 3389 , - 4540 , - 3051 , - 3722 , - 1753 , - 1944 , - 4295 , - 4006 , - 1077 , - 308 , - 1699 , - 450 , - 1361 , - 4432 , - 63 , - 2654 , - 2605 , - 4716 , - 4187 , - 1018 , - 9 , - 1160 , - 4471 , - 342 , - 3173 , - 3364 , - 915 , - 626 , - 2497 , - 1728 , - 3119 , - 1870 , - 2781 , - 1052 , - 1483 , - 4074 , - 4025 , - 1336 , - 807 , - 2438 , - 1429 , - 2580 , - 1091 , - 1762 , - 4593 , - 4784 , - 2335 , - 2046 , - 3917 , - 3148 , - 4539 , - 3290 , - 4201 , - 2472 , - 2903 , - 694 , - 645 , - 2756 , - 2227 , - 3858 , - 2849 , - 4000 , - 2511 , - 3182 , - 1213 , - 1404 , - 3755 , - 3466 , - 537 , - 4568 , - 1159 , - 4710 , - 821 , - 3892 , - 4323 , - 2114 , - 2065 , - 4176 , - 3647 , - 478 , - 4269 , - 620 , - 3931 , - 4602 , - 2633 , - 2824 , - 375 , - 86 , - 1957 , - 1188 , - 2579 , - 1330 , - 2241 , - 512 , - 943 , - 3534 , - 3485 , - 796 , - 267 , - 1898 , - 889 , - 2040 , - 551 , - 1222 , - 4053 , - 4244 , - 1795 , - 1506 , - 3377 , - 2608 , - 3999 , - 2750 , - 3661 , - 1932 , - 2363 , - 154 , - 105 , - 2216 , - 1687 , - 3318 , - 2309 , - 3460 , - 1971 , - 2642 , - 673 , - 864 , - 3215 , - 2926 , - 4797 , - 4028 , - 619 , - 4170 , - 281 , - 3352 , - 3783 , - 1574 , - 1525 , - 3636 , - 3107 , - 4738 , - 3729 , - 80 , - 3391 , - 4062 , - 2093 , - 2284 , - 4635 , - 4346 , - 1417 , - 648 , - 2039 , - 790 , - 1701 , - 4772 , - 403 , - 2994 , - 2945 , - 256 , - 4527 , - 1358 , - 349 , - 1500 , - 11 , - 682 , - 3513 , - 3704 , - 1255 , - 966 , - 2837 , - 2068 , - 3459 , - 2210 , - 3121 , - 1392 , - 1823 , - 4414 , - 4365 , - 1676 , - 1147 , - 2778 , - 1769 , - 2920 , - 1431 , - 2102 , - 133 , - 324 , - 2675 , - 2386 , - 4257 , - 3488 , - 79 , - 3630 , - 4541 , - 2812 , - 3243 , - 1034 , - 985 , - 3096 , - 2567 , - 4198 , - 3189 , - 4340 , - 2851 , - 3522 , - 1553 , - 1744 , - 4095 , - 3806 , - 877 , - 108 , - 1499 , - 250 , - 1161 , - 4232 , - 4663 , - 2454 , - 2405 , - 4516 , - 3987 , - 818 , - 4609 , - 960 , - 4271 , - 142 , - 2973 , - 3164 , - 715 , - 426 , - 2297 , - 1528 , - 2919 , - 1670 , - 2581 , - 852 , - 1283 , - 3874 , - 3825 , - 1136 , - 607 , - 2238 , - 1229 , - 2380 , - 891 , - 1562 , - 4393 , - 4584 , - 2135 , - 1846 , - 3717 , - 2948 , - 4339 , - 3090 , - 4001 , - 2272 , - 2703 , - 494 , - 445 , - 2556 , - 2027 , - 3658 , - 2649 , - 3800 , - 2311 , - 2982 , - 1013 , - 1204 , - 3555 , - 3266 , - 337 , - 4368 , - 959 , - 4510 , - 621 , - 3692 , - 4123 , - 1914 , - 1865 , - 3976 , - 3447 , - 278 , - 4069 , - 420 , - 3731 , - 4402 , - 2433 , - 2624 , - 175 , - 4686 , - 1757 , - 988 , - 2379 , - 1130 , - 2041 , - 312 , - 743 , - 3334 , - 3285 , - 596 , - 67 , - 1698 , - 689 , - 1840 , - 351 , - 1022 , - 3853 , - 4044 , - 1595 , - 1306 , - 3177 , - 2408 , - 3799 , - 2550 , - 3461 , - 1732 , - 2163 , - 4754 , - 4705 , - 2016 , - 1487 , - 3118 , - 2109 , - 3260 , - 1771 , - 2442 , - 473 , - 664 , - 3015 , - 2726 , - 4597 , - 3828 , - 419 , - 3970 , - 81 , - 3152 , - 3583 , - 1374 , - 1325 , - 3436 , - 2907 , - 4538 , - 3529 , - 4680 , - 3191 , - 3862 , - 1893 , - 2084 , - 4435 , - 4146 , - 1217 , - 448 , - 1839 , - 590 , - 1501 , - 4572 , - 203 , - 2794 , - 2745 , - 56 , - 4327 , - 1158 , - 149 , - 1300 , - 4611 , - 482 , - 3313 , - 3504 , - 1055 , - 766 , - 2637 , - 1868 , - 3259 , - 2010 , - 2921 , - 1192 , - 1623 , - 4214 , - 4165 , - 1476 , - 947 , - 2578 , - 1569 , - 2720 , - 1231 , - 1902 , - 4733 , - 124 , - 2475 , - 2186 , - 4057 , - 3288 , - 4679 , - 3430 , - 4341 , - 2612 , - 3043 , - 834 , - 785 , - 2896 , - 2367 , - 3998 , - 2989 , - 4140 , - 2651 , - 3322 , - 1353 , - 1544 , - 3895 , - 3606 , - 677 , - 4708 , - 1299 , - 50 , - 961 , - 4032 , - 4463 , - 2254 , - 2205 , - 4316 , - 3787 , - 618 , - 4409 , - 760 , - 4071 , - 4742 , - 2773 , - 2964 , - 515 , - 226 , - 2097 , - 1328 , - 2719 , - 1470 , - 2381 , - 652 , - 1083 , - 3674 , - 3625 , - 936 , - 407 , - 2038 , - 1029 , - 2180 , - 691 , - 1362 , - 4193 , - 4384 , - 1935 , - 1646 , - 3517 , - 2748 , - 4139 , - 2890 , - 3801 , - 2072 , - 2503 , - 294 , - 245 , - 2356 , - 1827 , - 3458 , - 2449 , - 3600 , - 2111 , - 2782 , - 813 , - 1004 , - 3355 , - 3066 , - 137 , - 4168 , - 759 , - 4310 , - 421 , - 3492 , - 3923 , - 1714 , - 1665 , - 3776 , - 3247 , - 78 , - 3869 , - 220 , - 3531 , - 4202 , - 2233 , - 2424 , - 4775 , - 4486 , - 1557 , - 788 , - 2179 , - 930 , - 1841 , - 112 , - 543 , - 3134 , - 3085 , - 396 , - 4667 , - 1498 , - 489 , - 1640 , - 151 , - 822 , - 3653 , - 3844 , - 1395 , - 1106 , - 2977 , - 2208 , - 3599 , - 2350 , - 3261 , - 1532 , - 1963 , - 4554 , - 4505 , - 1816 , - 1287 , - 2918 , - 1909 , - 3060 , - 1571 , - 2242 , - 273 , - 464 , - 2815 , - 2526 , - 4397 , - 3628 , - 219 , - 3770 , - 4681 , - 2952 , - 3383 , - 1174 , - 1125 , - 3236 , - 2707 , - 4338 , - 3329 , - 4480 , - 2991 , - 3662 , - 1693 , - 1884 , - 4235 , - 3946 , - 1017 , - 248 , - 1639 , - 390 , - 1301 , - 4372 , - 3 , - 2594 , - 2545 , - 4656 , - 4127 , - 958 , - 4749 , - 1100 , - 4411 , - 282 , - 3113 , - 3304 , - 855 , - 566 , - 2437 , - 1668 , - 3059 , - 1810 , - 2721 , - 992 , - 1423 , - 4014 , - 3965 , - 1276 , - 747 , - 2378 , - 1369 , - 2520 , - 1031 , - 1702 , - 4533 , - 4724 , - 2275 , - 1986 , - 3857 , - 3088 , - 4479 , - 3230 , - 4141 , - 2412 , - 2843 , - 634 , - 585 , - 2696 , - 2167 , - 3798 , - 2789 , - 3940 , - 2451 , - 3122 , - 1153 , - 1344 , - 3695 , - 3406 , - 477 , - 4508 , - 1099 , - 4650 , - 761 , - 3832 , - 4263 , - 2054 , - 2005 , - 4116 , - 3587 , - 418 , - 4209 , - 560 , - 3871 , - 4542 , - 2573 , - 2764 , - 315 , - 26 , - 1897 , - 1128 , - 2519 , - 1270 , - 2181 , - 452 , - 883 , - 3474 , - 3425 , - 736 , - 207 , - 1838 , - 829 , - 1980 , - 491 , - 1162 , - 3993 , - 4184 , - 1735 , - 1446 , - 3317 , - 2548 , - 3939 , - 2690 , - 3601 , - 1872 , - 2303 , - 94 , - 45 , - 2156 , - 1627 , - 3258 , - 2249 , - 3400 , - 1911 , - 2582 , - 613 , - 804 , - 3155 , - 2866 , - 4737 , - 3968 , - 559 , - 4110 , - 221 , - 3292 , - 3723 , - 1514 , - 1465 , - 3576 , - 3047 , - 4678 , - 3669 , - 20 , - 3331 , - 4002 , - 2033 , - 2224 , - 4575 , - 4286 , - 1357 , - 588 , - 1979 , - 730 , - 1641 , - 4712 , - 343 , - 2934 , - 2885 , - 196 , - 4467 , - 1298 , - 289 , - 1440 , - 4751 , - 622 , - 3453 , - 3644 , - 1195 , - 906 , - 2777 , - 2008 , - 3399 , - 2150 , - 3061 , - 1332 , - 1763 , - 4354 , - 4305 , - 1616 , - 1087 , - 2718 , - 1709 , - 2860 , - 1371 , - 2042 , - 73 , - 264 , - 2615 , - 2326 , - 4197 , - 3428 , - 19 , - 3570 , - 4481 , - 2752 , - 3183 , - 974 , - 925 , - 3036 , - 2507 , - 4138 , - 3129 , - 4280 , - 2791 , - 3462 , - 1493 , - 1684 , - 4035 , - 3746 , - 817 , - 48 , - 1439 , - 190 , - 1101 , - 4172 , - 4603 , - 2394 , - 2345 , - 4456 , - 3927 , - 758 , - 4549 , - 900 , - 4211 , - 82 , - 2913 , - 3104 , - 655 , - 366 , - 2237 , - 1468 , - 2859 , - 1610 , - 2521 , - 792 , - 1223 , - 3814 , - 3765 , - 1076 , - 547 , - 2178 , - 1169 , - 2320 , - 831 , - 1502 , - 4333 , - 4524 , - 2075 , - 1786 , - 3657 , - 2888 , - 4279 , - 3030 , - 3941 , - 2212 , - 2643 , - 434 , - 385 , - 2496 , - 1967 , - 3598 , - 2589 , - 3740 , - 2251 , - 2922 , - 953 , - 1144 , - 3495 , - 3206 , - 277 , - 4308 , - 899 , - 4450 , - 561 , - 3632 , - 4063 , - 1854 , - 1805 , - 3916 , - 3387 , - 218 , - 4009 , - 360 , - 3671 , - 4342 , - 2373 , - 2564 , - 115 , - 4626 , - 1697 , - 928 , - 2319 , - 1070 , - 1981 , - 252 , - 683 , - 3274 , - 3225 , - 536 , - 7 , - 1638 , - 629 , - 1780 , - 291 , - 962 , - 3793 , - 3984 , - 1535 , - 1246 , - 3117 , - 2348 , - 3739 , - 2490 , - 3401 , - 1672 , - 2103 , - 4694 , - 4645 , - 1956 , - 1427 , - 3058 , - 2049 , - 3200 , - 1711 , - 2382 , - 413 , - 604 , - 2955 , - 2666 , - 4537 , - 3768 , - 359 , - 3910 , - 21 , - 3092 , - 3523 , - 1314 , - 1265 , - 3376 , - 2847 , - 4478 , - 3469 , - 4620 , - 3131 , - 3802 , - 1833 , - 2024 , - 4375 , - 4086 , - 1157 , - 388 , - 1779 , - 530 , - 1441 , - 4512 , - 143 , - 2734 , - 2685 , - 4796 , - 4267 , - 1098 , - 89 , - 1240 , - 4551 , - 422 , - 3253 , - 3444 , - 995 , - 706 , - 2577 , - 1808 , - 3199 , - 1950 , - 2861 , - 1132 , - 1563 , - 4154 , - 4105 , - 1416 , - 887 , - 2518 , - 1509 , - 2660 , - 1171 , - 1842 , - 4673 , - 64 , - 2415 , - 2126 , - 3997 , - 3228 , - 4619 , - 3370 , - 4281 , - 2552 , - 2983 , - 774 , - 725 , - 2836 , - 2307 , - 3938 , - 2929 , - 4080 , - 2591 , - 3262 , - 1293 , - 1484 , - 3835 , - 3546 , - 617 , - 4648 , - 1239 , - 4790 , - 901 , - 3972 , - 4403 , - 2194 , - 2145 , - 4256 , - 3727 , - 558 , - 4349 , - 700 , - 4011 , - 4682 , - 2713 , - 2904 , - 455 , - 166 , - 2037 , - 1268 , - 2659 , - 1410 , - 2321 , - 592 , - 1023 , - 3614 , - 3565 , - 876 , - 347 , - 1978 , - 969 , - 2120 , - 631 , - 1302 , - 4133 , - 4324 , - 1875 , - 1586 , - 3457 , - 2688 , - 4079 , - 2830 , - 3741 , - 2012 , - 2443 , - 234 , - 185 , - 2296 , - 1767 , - 3398 , - 2389 , - 3540 , - 2051 , - 2722 , - 753 , - 944 , - 3295 , - 3006 , - 77 , - 4108 , - 699 , - 4250 , - 361 , - 3432 , - 3863 , - 1654 , - 1605 , - 3716 , - 3187 , - 18 , - 3809 , - 160 , - 3471 , - 4142 , - 2173 , - 2364 , - 4715 , - 4426 , - 1497 , - 728 , - 2119 , - 870 , - 1781 , - 52 , - 483 , - 3074 , - 3025 , - 336 , - 4607 , - 1438 , - 429 , - 1580 , - 91 , - 762 , - 3593 , - 3784 , - 1335 , - 1046 , - 2917 , - 2148 , - 3539 , - 2290 , - 3201 , - 1472 , - 1903 , - 4494 , - 4445 , - 1756 , - 1227 , - 2858 , - 1849 , - 3000 , - 1511 , - 2182 , - 213 , - 404 , - 2755 , - 2466 , - 4337 , - 3568 , - 159 , - 3710 , - 4621 , - 2892 , - 3323 , - 1114 , - 1065 , - 3176 , - 2647 , - 4278 , - 3269 , - 4420 , - 2931 , - 3602 , - 1633 , - 1824 , - 4175 , - 3886 , - 957 , - 188 , - 1579 , - 330 , - 1241 , - 4312 , - 4743 , - 2534 , - 2485 , - 4596 , - 4067 , - 898 , - 4689 , - 1040 , - 4351 , - 222 , - 3053 , - 3244 , - 795 , - 506 , - 2377 , - 1608 , - 2999 , - 1750 , - 2661 , - 932 , - 1363 , - 3954 , - 3905 , - 1216 , - 687 , - 2318 , - 1309 , - 2460 , - 971 , - 1642 , - 4473 , - 4664 , - 2215 , - 1926 , - 3797 , - 3028 , - 4419 , - 3170 , - 4081 , - 2352 , - 2783 , - 574 , - 525 , - 2636 , - 2107 , - 3738 , - 2729 , - 3880 , - 2391 , - 3062 , - 1093 , - 1284 , - 3635 , - 3346 , - 417 , - 4448 , - 1039 , - 4590 , - 701 , - 3772 , - 4203 , - 1994 , - 1945 , - 4056 , - 3527 , - 358 , - 4149 , - 500 , - 3811 , - 4482 , - 2513 , - 2704 , - 255 , - 4766 , - 1837 , - 1068 , - 2459 , - 1210 , - 2121 , - 392 , - 823 , - 3414 , - 3365 , - 676 , - 147 , - 1778 , - 769 , - 1920 , - 431 , - 1102 , - 3933 , - 4124 , - 1675 , - 1386 , - 3257 , - 2488 , - 3879 , - 2630 , - 3541 , - 1812 , - 2243 , - 34 , - 4785 , - 2096 , - 1567 , - 3198 , - 2189 , - 3340 , - 1851 , - 2522 , - 553 , - 744 , - 3095 , - 2806 , - 4677 , - 3908 , - 499 , - 4050 , - 161 , - 3232 , - 3663 , - 1454 , - 1405 , - 3516 , - 2987 , - 4618 , - 3609 , - 4760 , - 3271 , - 3942 , - 1973 , - 2164 , - 4515 , - 4226 , - 1297 , - 528 , - 1919 , - 670 , - 1581 , - 4652 , - 283 , - 2874 , - 2825 , - 136 , - 4407 , - 1238 , - 229 , - 1380 , - 4691 , - 562 , - 3393 , - 3584 , - 1135 , - 846 , - 2717 , - 1948 , - 3339 , - 2090 , - 3001 , - 1272 , - 1703 , - 4294 , - 4245 , - 1556 , - 1027 , - 2658 , - 1649 , - 2800 , - 1311 , - 1982 , - 13 , - 204 , - 2555 , - 2266 , - 4137 , - 3368 , - 4759 , - 3510 , - 4421 , - 2692 , - 3123 , - 914 , - 865 , - 2976 , - 2447 , - 4078 , - 3069 , - 4220 , - 2731 , - 3402 , - 1433 , - 1624 , - 3975 , - 3686 , - 757 , - 4788 , - 1379 , - 130 , - 1041 , - 4112 , - 4543 , - 2334 , - 2285 , - 4396 , - 3867 , - 698 , - 4489 , - 840 , - 4151 , - 22 , - 2853 , - 3044 , - 595 , - 306 , - 2177 , - 1408 , - 2799 , - 1550 , - 2461 , - 732 , - 1163 , - 3754 , - 3705 , - 1016 , - 487 , - 2118 , - 1109 , - 2260 , - 771 , - 1442 , - 4273 , - 4464 , - 2015 , - 1726 , - 3597 , - 2828 , - 4219 , - 2970 , - 3881 , - 2152 , - 2583 , - 374 , - 325 , - 2436 , - 1907 , - 3538 , - 2529 , - 3680 , - 2191 , - 2862 , - 893 , - 1084 , - 3435 , - 3146 , - 217 , - 4248 , - 839 , - 4390 , - 501 , - 3572 , - 4003 , - 1794 , - 1745 , - 3856 , - 3327 , - 158 , - 3949 , - 300 , - 3611 , - 4282 , - 2313 , - 2504 , - 55 , - 4566 , - 1637 , - 868 , - 2259 , - 1010 , - 1921 , - 192 , - 623 , - 3214 , - 3165 , - 476 , - 4747 , - 1578 , - 569 , - 1720 , - 231 , - 902 , - 3733 , - 3924 , - 1475 , - 1186 , - 3057 , - 2288 , - 3679 , - 2430 , - 3341 , - 1612 , - 2043 , - 4634 , - 4585 , - 1896 , - 1367 , - 2998 , - 1989 , - 3140 , - 1651 , - 2322 , - 353 , - 544 , - 2895 , - 2606 , - 4477 , - 3708 , - 299 , - 3850 , - 4761 , - 3032 , - 3463 , - 1254 , - 1205 , - 3316 , - 2787 , - 4418 , - 3409 , - 4560 , - 3071 , - 3742 , - 1773 , - 1964 , - 4315 , - 4026 , - 1097 , - 328 , - 1719 , - 470 , - 1381 , - 4452 , - 83 , - 2674 , - 2625 , - 4736 , - 4207 , - 1038 , - 29 , - 1180 , - 4491 , - 362 , - 3193 , - 3384 , - 935 , - 646 , - 2517 , - 1748 , - 3139 , - 1890 , - 2801 , - 1072 , - 1503 , - 4094 , - 4045 , - 1356 , - 827 , - 2458 , - 1449 , - 2600 , - 1111 , - 1782 , - 4613 , - 4 , - 2355 , - 2066 , - 3937 , - 3168 , - 4559 , - 3310 , - 4221 , - 2492 , - 2923 , - 714 , - 665 , - 2776 , - 2247 , - 3878 , - 2869 , - 4020 , - 2531 , - 3202 , - 1233 , - 1424 , - 3775 , - 3486 , - 557 , - 4588 , - 1179 , - 4730 , - 841 , - 3912 , - 4343 , - 2134 , - 2085 , - 4196 , - 3667 , - 498 , - 4289 , - 640 , - 3951 , - 4622 , - 2653 , - 2844 , - 395 , - 106 , - 1977 , - 1208 , - 2599 , - 1350 , - 2261 , - 532 , - 963 , - 3554 , - 3505 , - 816 , - 287 , - 1918 , - 909 , - 2060 , - 571 , - 1242 , - 4073 , - 4264 , - 1815 , - 1526 , - 3397 , - 2628 , - 4019 , - 2770 , - 3681 , - 1952 , - 2383 , - 174 , - 125 , - 2236 , - 1707 , - 3338 , - 2329 , - 3480 , - 1991 , - 2662 , - 693 , - 884 , - 3235 , - 2946 , - 17 , - 4048 , - 639 , - 4190 , - 301 , - 3372 , - 3803 , - 1594 , - 1545 , - 3656 , - 3127 , - 4758 , - 3749 , - 100 , - 3411 , - 4082 , - 2113 , - 2304 , - 4655 , - 4366 , - 1437 , - 668 , - 2059 , - 810 , - 1721 , - 4792 , - 423 , - 3014 , - 2965 , - 276 , - 4547 , - 1378 , - 369 , - 1520 , - 31 , - 702 , - 3533 , - 3724 , - 1275 , - 986 , - 2857 , - 2088 , - 3479 , - 2230 , - 3141 , - 1412 , - 1843 , - 4434 , - 4385 , - 1696 , - 1167 , - 2798 , - 1789 , - 2940 , - 1451 , - 2122 , - 153 , - 344 , - 2695 , - 2406 , - 4277 , - 3508 , - 99 , - 3650 , - 4561 , - 2832 , - 3263 , - 1054 , - 1005 , - 3116 , - 2587 , - 4218 , - 3209 , - 4360 , - 2871 , - 3542 , - 1573 , - 1764 , - 4115 , - 3826 , - 897 , - 128 , - 1519 , - 270 , - 1181 , - 4252 , - 4683 , - 2474 , - 2425 , - 4536 , - 4007 , - 838 , - 4629 , - 980 , - 4291 , - 162 , - 2993 , - 3184 , - 735 , - 446 , - 2317 , - 1548 , - 2939 , - 1690 , - 2601 , - 872 , - 1303 , - 3894 , - 3845 , - 1156 , - 627 , - 2258 , - 1249 , - 2400 , - 911 , - 1582 , - 4413 , - 4604 , - 2155 , - 1866 , - 3737 , - 2968 , - 4359 , - 3110 , - 4021 , - 2292 , - 2723 , - 514 , - 465 , - 2576 , - 2047 , - 3678 , - 2669 , - 3820 , - 2331 , - 3002 , - 1033 , - 1224 , - 3575 , - 3286 , - 357 , - 4388 , - 979 , - 4530 , - 641 , - 3712 , - 4143 , - 1934 , - 1885 , - 3996 , - 3467 , - 298 , - 4089 , - 440 , - 3751 , - 4422 , - 2453 , - 2644 , - 195 , - 4706 , - 1777 , - 1008 , - 2399 , - 1150 , - 2061 , - 332 , - 763 , - 3354 , - 3305 , - 616 , - 87 , - 1718 , - 709 , - 1860 , - 371 , - 1042 , - 3873 , - 4064 , - 1615 , - 1326 , - 3197 , - 2428 , - 3819 , - 2570 , - 3481 , - 1752 , - 2183 , - 4774 , - 4725 , - 2036 , - 1507 , - 3138 , - 2129 , - 3280 , - 1791 , - 2462 , - 493 , - 684 , - 3035 , - 2746 , - 4617 , - 3848 , - 439 , - 3990 , - 101 , - 3172 , - 3603 , - 1394 , - 1345 , - 3456 , - 2927 , - 4558 , - 3549 , - 4700 , - 3211 , - 3882 , - 1913 , - 2104 , - 4455 , - 4166 , - 1237 , - 468 , - 1859 , - 610 , - 1521 , - 4592 , - 223 , - 2814 , - 2765 , - 76 , - 4347 , - 1178 , - 169 , - 1320 , - 4631 , - 502 , - 3333 , - 3524 , - 1075 , - 786 , - 2657 , - 1888 , - 3279 , - 2030 , - 2941 , - 1212 , - 1643 , - 4234 , - 4185 , - 1496 , - 967 , - 2598 , - 1589 , - 2740 , - 1251 , - 1922 , - 4753 , - 144 , - 2495 , - 2206 , - 4077 , - 3308 , - 4699 , - 3450 , - 4361 , - 2632 , - 3063 , - 854 , - 805 , - 2916 , - 2387 , - 4018 , - 3009 , - 4160 , - 2671 , - 3342 , - 1373 , - 1564 , - 3915 , - 3626 , - 697 , - 4728 , - 1319 , - 70 , - 981 , - 4052 , - 4483 , - 2274 , - 2225 , - 4336 , - 3807 , - 638 , - 4429 , - 780 , - 4091 , - 4762 , - 2793 , - 2984 , - 535 , - 246 , - 2117 , - 1348 , - 2739 , - 1490 , - 2401 , - 672 , - 1103 , - 3694 , - 3645 , - 956 , - 427 , - 2058 , - 1049 , - 2200 , - 711 , - 1382 , - 4213 , - 4404 , - 1955 , - 1666 , - 3537 , - 2768 , - 4159 , - 2910 , - 3821 , - 2092 , - 2523 , - 314 , - 265 , - 2376 , - 1847 , - 3478 , - 2469 , - 3620 , - 2131 , - 2802 , - 833 , - 1024 , - 3375 , - 3086 , - 157 , - 4188 , - 779 , - 4330 , - 441 , - 3512 , - 3943 , - 1734 , - 1685 , - 3796 , - 3267 , - 98 , - 3889 , - 240 , - 3551 , - 4222 , - 2253 , - 2444 , - 4795 , - 4506 , - 1577 , - 808 , - 2199 , - 950 , - 1861 , - 132 , - 563 , - 3154 , - 3105 , - 416 , - 4687 , - 1518 , - 509 , - 1660 , - 171 , - 842 , - 3673 , - 3864 , - 1415 , - 1126 , - 2997 , - 2228 , - 3619 , - 2370 , - 3281 , - 1552 , - 1983 , - 4574 , - 4525 , - 1836 , - 1307 , - 2938 , - 1929 , - 3080 , - 1591 , - 2262 , - 293 , - 484 , - 2835 , - 2546 , - 4417 , - 3648 , - 239 , - 3790 , - 4701 , - 2972 , - 3403 , - 1194 , - 1145 , - 3256 , - 2727 , - 4358 , - 3349 , - 4500 , - 3011 , - 3682 , - 1713 , - 1904 , - 4255 , - 3966 , - 1037 , - 268 , - 1659 , - 410 , - 1321 , - 4392 , - 23 , - 2614 , - 2565 , - 4676 , - 4147 , - 978 , - 4769 , - 1120 , - 4431 , - 302 , - 3133 , - 3324 , - 875 , - 586 , - 2457 , - 1688 , - 3079 , - 1830 , - 2741 , - 1012 , - 1443 , - 4034 , - 3985 , - 1296 , - 767 , - 2398 , - 1389 , - 2540 , - 1051 , - 1722 , - 4553 , - 4744 , - 2295 , - 2006 , - 3877 , - 3108 , - 4499 , - 3250 , - 4161 , - 2432 , - 2863 , - 654 , - 605 , - 2716 , - 2187 , - 3818 , - 2809 , - 3960 , - 2471 , - 3142 , - 1173 , - 1364 , - 3715 , - 3426 , - 497 , - 4528 , - 1119 , - 4670 , - 781 , - 3852 , - 4283 , - 2074 , - 2025 , - 4136 , - 3607 , - 438 , - 4229 , - 580 , - 3891 , - 4562 , - 2593 , - 2784 , - 335 , - 46 , - 1917 , - 1148 , - 2539 , - 1290 , - 2201 , - 472 , - 903 , - 3494 , - 3445 , - 756 , - 227 , - 1858 , - 849 , - 2000 , - 511 , - 1182 , - 4013 , - 4204 , - 1755 , - 1466 , - 3337 , - 2568 , - 3959 , - 2710 , - 3621 , - 1892 , - 2323 , - 114 , - 65 , - 2176 , - 1647 , - 3278 , - 2269 , - 3420 , - 1931 , - 2602 , - 633 , - 824 , - 3175 , - 2886 , - 4757 , - 3988 , - 579 , - 4130 , - 241 , - 3312 , - 3743 , - 1534 , - 1485 , - 3596 , - 3067 , - 4698 , - 3689 , - 40 , - 3351 , - 4022 , - 2053 , - 2244 , - 4595 , - 4306 , - 1377 , - 608 , - 1999 , - 750 , - 1661 , - 4732 , - 363 , - 2954 , - 2905 , - 216 , - 4487 , - 1318 , - 309 , - 1460 , - 4771 , - 642 , - 3473 , - 3664 , - 1215 , - 926 , - 2797 , - 2028 , - 3419 , - 2170 , - 3081 , - 1352 , - 1783 , - 4374 , - 4325 , - 1636 , - 1107 , - 2738 , - 1729 , - 2880 , - 1391 , - 2062 , - 93 , - 284 , - 2635 , - 2346 , - 4217 , - 3448 , - 39 , - 3590 , - 4501 , - 2772 , - 3203 , - 994 , - 945 , - 3056 , - 2527 , - 4158 , - 3149 , - 4300 , - 2811 , - 3482 , - 1513 , - 1704 , - 4055 , - 3766 , - 837 , - 68 , - 1459 , - 210 , - 1121 , - 4192 , - 4623 , - 2414 , - 2365 , - 4476 , - 3947 , - 778 , - 4569 , - 920 , - 4231 , - 102 , - 2933 , - 3124 , - 675 , - 386 , - 2257 , - 1488 , - 2879 , - 1630 , - 2541 , - 812 , - 1243 , - 3834 , - 3785 , - 1096 , - 567 , - 2198 , - 1189 , - 2340 , - 851 , - 1522 , - 4353 , - 4544 , - 2095 , - 1806 , - 3677 , - 2908 , - 4299 , - 3050 , - 3961 , - 2232 , - 2663 , - 454 , - 405 , - 2516 , - 1987 , - 3618 , - 2609 , - 3760 , - 2271 , - 2942 , - 973 , - 1164 , - 3515 , - 3226 , - 297 , - 4328 , - 919 , - 4470 , - 581 , - 3652 , - 4083 , - 1874 , - 1825 , - 3936 , - 3407 , - 238 , - 4029 , - 380 , - 3691 , - 4362 , - 2393 , - 2584 , - 135 , - 4646 , - 1717 , - 948 , - 2339 , - 1090 , - 2001 , - 272 , - 703 , - 3294 , - 3245 , - 556 , - 27 , - 1658 , - 649 , - 1800 , - 311 , - 982 , - 3813 , - 4004 , - 1555 , - 1266 , - 3137 , - 2368 , - 3759 , - 2510 , - 3421 , - 1692 , - 2123 , - 4714 , - 4665 , - 1976 , - 1447 , - 3078 , - 2069 , - 3220 , - 1731 , - 2402 , - 433 , - 624 , - 2975 , - 2686 , - 4557 , - 3788 , - 379 , - 3930 , - 41 , - 3112 , - 3543 , - 1334 , - 1285 , - 3396 , - 2867 , - 4498 , - 3489 , - 4640 , - 3151 , - 3822 , - 1853 , - 2044 , - 4395 , - 4106 , - 1177 , - 408 , - 1799 , - 550 , - 1461 , - 4532 , - 163 , - 2754 , - 2705 , - 16 , - 4287 , - 1118 , - 109 , - 1260 , - 4571 , - 442 , - 3273 , - 3464 , - 1015 , - 726 , - 2597 , - 1828 , - 3219 , - 1970 , - 2881 , - 1152 , - 1583 , - 4174 , - 4125 , - 1436 , - 907 , - 2538 , - 1529 , - 2680 , - 1191 , - 1862 , - 4693 , - 84 , - 2435 , - 2146 , - 4017 , - 3248 , - 4639 , - 3390 , - 4301 , - 2572 , - 3003 , - 794 , - 745 , - 2856 , - 2327 , - 3958 , - 2949 , - 4100 , - 2611 , - 3282 , - 1313 , - 1504 , - 3855 , - 3566 , - 637 , - 4668 , - 1259 , - 10 , - 921 , - 3992 , - 4423 , - 2214 , - 2165 , - 4276 , - 3747 , - 578 , - 4369 , - 720 , - 4031 , - 4702 , - 2733 , - 2924 , - 475 , - 186 , - 2057 , - 1288 , - 2679 , - 1430 , - 2341 , - 612 , - 1043 , - 3634 , - 3585 , - 896 , - 367 , - 1998 , - 989 , - 2140 , - 651 , - 1322 , - 4153 , - 4344 , - 1895 , - 1606 , - 3477 , - 2708 , - 4099 , - 2850 , - 3761 , - 2032 , - 2463 , - 254 , - 205 , - 2316 , - 1787 , - 3418 , - 2409 , - 3560 , - 2071 , - 2742 , - 773 , - 964 , - 3315 , - 3026 , - 97 , - 4128 , - 719 , - 4270 , - 381 , - 3452 , - 3883 , - 1674 , - 1625 , - 3736 , - 3207 , - 38 , - 3829 , - 180 , - 3491 , - 4162 , - 2193 , - 2384 , - 4735 , - 4446 , - 1517 , - 748 , - 2139 , - 890 , - 1801 , - 72 , - 503 , - 3094 , - 3045 , - 356 , - 4627 , - 1458 , - 449 , - 1600 , - 111 , - 782 , - 3613 , - 3804 , - 1355 , - 1066 , - 2937 , - 2168 , - 3559 , - 2310 , - 3221 , - 1492 , - 1923 , - 4514 , - 4465 , - 1776 , - 1247 , - 2878 , - 1869 , - 3020 , - 1531 , - 2202 , - 233 , - 424 , - 2775 , - 2486 , - 4357 , - 3588 , - 179 , - 3730 , - 4641 , - 2912 , - 3343 , - 1134 , - 1085 , - 3196 , - 2667 , - 4298 , - 3289 , - 4440 , - 2951 , - 3622 , - 1653 , - 1844 , - 4195 , - 3906 , - 977 , - 208 , - 1599 , - 350 , - 1261 , - 4332 , - 4763 , - 2554 , - 2505 , - 4616 , - 4087 , - 918 , - 4709 , - 1060 , - 4371 , - 242 , - 3073 , - 3264 , - 815 , - 526 , - 2397 , - 1628 , - 3019 , - 1770 , - 2681 , - 952 , - 1383 , - 3974 , - 3925 , - 1236 , - 707 , - 2338 , - 1329 , - 2480 , - 991 , - 1662 , - 4493 , - 4684 , - 2235 , - 1946 , - 3817 , - 3048 , - 4439 , - 3190 , - 4101 , - 2372 , - 2803 , - 594 , - 545 , - 2656 , - 2127 , - 3758 , - 2749 , - 3900 , - 2411 , - 3082 , - 1113 , - 1304 , - 3655 , - 3366 , - 437 , - 4468 , - 1059 , - 4610 , - 721 , - 3792 , - 4223 , - 2014 , - 1965 , - 4076 , - 3547 , - 378 , - 4169 , - 520 , - 3831 , - 4502 , - 2533 , - 2724 , - 275 , - 4786 , - 1857 , - 1088 , - 2479 , - 1230 , - 2141 , - 412 , - 843 , - 3434 , - 3385 , - 696 , - 167 , - 1798 , - 789 , - 1940 , - 451 , - 1122 , - 3953 , - 4144 , - 1695 , - 1406 , - 3277 , - 2508 , - 3899 , - 2650 , - 3561 , - 1832 , - 2263 , - 54 , - 5 , - 2116 , - 1587 , - 3218 , - 2209 , - 3360 , - 1871 , - 2542 , - 573 , - 764 , - 3115 , - 2826 , - 4697 , - 3928 , - 519 , - 4070 , - 181 , - 3252 , - 3683 , - 1474 , - 1425 , - 3536 , - 3007 , - 4638 , - 3629 , - 4780 , - 3291 , - 3962 , - 1993 , - 2184 , - 4535 , - 4246 , - 1317 , - 548 , - 1939 , - 690 , - 1601 , - 4672 , - 303 , - 2894 , - 2845 , - 156 , - 4427 , - 1258 , - 249 , - 1400 , - 4711 , - 582 , - 3413 , - 3604 , - 1155 , - 866 , - 2737 , - 1968 , - 3359 , - 2110 , - 3021 , - 1292 , - 1723 , - 4314 , - 4265 , - 1576 , - 1047 , - 2678 , - 1669 , - 2820 , - 1331 , - 2002 , - 33 , - 224 , - 2575 , - 2286 , - 4157 , - 3388 , - 4779 , - 3530 , - 4441 , - 2712 , - 3143 , - 934 , - 885 , - 2996 , - 2467 , - 4098 , - 3089 , - 4240 , - 2751 , - 3422 , - 1453 , - 1644 , - 3995 , - 3706 , - 777 , - 8 , - 1399 , - 150 , - 1061 , - 4132 , - 4563 , - 2354 , - 2305 , - 4416 , - 3887 , - 718 , - 4509 , - 860 , - 4171 , - 42 , - 2873 , - 3064 , - 615 , - 326 , - 2197 , - 1428 , - 2819 , - 1570 , - 2481 , - 752 , - 1183 , - 3774 , - 3725 , - 1036 , - 507 , - 2138 , - 1129 , - 2280 , - 791 , - 1462 , - 4293 , - 4484 , - 2035 , - 1746 , - 3617 , - 2848 , - 4239 , - 2990 , - 3901 , - 2172 , - 2603 , - 394 , - 345 , - 2456 , - 1927 , - 3558 , - 2549 , - 3700 , - 2211 , - 2882 , - 913 , - 1104 , - 3455 , - 3166 , - 237 , - 4268 , - 859 , - 4410 , - 521 , - 3592 , - 4023 , - 1814 , - 1765 , - 3876 , - 3347 , - 178 , - 3969 , - 320 , - 3631 , - 4302 , - 2333 , - 2524 , - 75 , - 4586 , - 1657 , - 888 , - 2279 , - 1030 , - 1941 , - 212 , - 643 , - 3234 , - 3185 , - 496 , - 4767 , - 1598 , - 589 , - 1740 , - 251 , - 922 , - 3753 , - 3944 , - 1495 , - 1206 , - 3077 , - 2308 , - 3699 , - 2450 , - 3361 , - 1632 , - 2063 , - 4654 , - 4605 , - 1916 , - 1387 , - 3018 , - 2009 , - 3160 , - 1671 , - 2342 , - 373 , - 564 , - 2915 , - 2626 , - 4497 , - 3728 , - 319 , - 3870 , - 4781 , - 3052 , - 3483 , - 1274 , - 1225 , - 3336 , - 2807 , - 4438 , - 3429 , - 4580 , - 3091 , - 3762 , - 1793 , - 1984 , - 4335 , - 4046 , - 1117 , - 348 , - 1739 , - 490 , - 1401 , - 4472 , - 103 , - 2694 , - 2645 , - 4756 , - 4227 , - 1058 , - 49 , - 1200 , - 4511 , - 382 , - 3213 , - 3404 , - 955 , - 666 , - 2537 , - 1768 , - 3159 , - 1910 , - 2821 , - 1092 , - 1523 , - 4114 , - 4065 , - 1376 , - 847 , - 2478 , - 1469 , - 2620 , - 1131 , - 1802 , - 4633 , - 24 , - 2375 , - 2086 , - 3957 , - 3188 , - 4579 , - 3330 , - 4241 , - 2512 , - 2943 , - 734 , - 685 , - 2796 , - 2267 , - 3898 , - 2889 , - 4040 , - 2551 , - 3222 , - 1253 , - 1444 , - 3795 , - 3506 , - 577 , - 4608 , - 1199 , - 4750 , - 861 , - 3932 , - 4363 , - 2154 , - 2105 , - 4216 , - 3687 , - 518 , - 4309 , - 660 , - 3971 , - 4642 , - 2673 , - 2864 , - 415 , - 126 , - 1997 , - 1228 , - 2619 , - 1370 , - 2281 , - 552 , - 983 , - 3574 , - 3525 , - 836 , - 307 , - 1938 , - 929 , - 2080 , - 591 , - 1262 , - 4093 , - 4284 , - 1835 , - 1546 , - 3417 , - 2648 , - 4039 , - 2790 , - 3701 , - 1972 , - 2403 , - 194 , - 145 , - 2256 , - 1727 , - 3358 , - 2349 , - 3500 , - 2011 , - 2682 , - 713 , - 904 , - 3255 , - 2966 , - 37 , - 4068 , - 659 , - 4210 , - 321 , - 3392 , - 3823 , - 1614 , - 1565 , - 3676 , - 3147 , - 4778 , - 3769 , - 120 , - 3431 , - 4102 , - 2133 , - 2324 , - 4675 , - 4386 , - 1457 , - 688 , - 2079 , - 830 , - 1741 , - 12 , - 443 , - 3034 , - 2985 , - 296 , - 4567 , - 1398 , - 389 , - 1540 , - 51 , - 722 , - 3553 , - 3744 , - 1295 , - 1006 , - 2877 , - 2108 , - 3499 , - 2250 , - 3161 , - 1432 , - 1863 , - 4454 , - 4405 , - 1716 , - 1187 , - 2818 , - 1809 , - 2960 , - 1471 , - 2142 , - 173 , - 364 , - 2715 , - 2426 , - 4297 , - 3528 , - 119 , - 3670 , - 4581 , - 2852 , - 3283 , - 1074 , - 1025 , - 3136 , - 2607 , - 4238 , - 3229 , - 4380 , - 2891 , - 3562 , - 1593 , - 1784 , - 4135 , - 3846 , - 917 , - 148 , - 1539 , - 290 , - 1201 , - 4272 , - 4703 , - 2494 , - 2445 , - 4556 , - 4027 , - 858 , - 4649 , - 1000 , - 4311 , - 182 , - 3013 , - 3204 , - 755 , - 466 , - 2337 , - 1568 , - 2959 , - 1710 , - 2621 , - 892 , - 1323 , - 3914 , - 3865 , - 1176 , - 647 , - 2278 , - 1269 , - 2420 , - 931 , - 1602 , - 4433 , - 4624 , - 2175 , - 1886 , - 3757 , - 2988 , - 4379 , - 3130 , - 4041 , - 2312 , - 2743 , - 534 , - 485 , - 2596 , - 2067 , - 3698 , - 2689 , - 3840 , - 2351 , - 3022 , - 1053 , - 1244 , - 3595 , - 3306 , - 377 , - 4408 , - 999 , - 4550 , - 661 , - 3732 , - 4163 , - 1954 , - 1905 , - 4016 , - 3487 , - 318 , - 4109 , - 460 , - 3771 , - 4442 , - 2473 , - 2664 , - 215 , - 4726 , - 1797 , - 1028 , - 2419 , - 1170 , - 2081 , - 352 , - 783 , - 3374 , - 3325 , - 636 , - 107 , - 1738 , - 729 , - 1880 , - 391 , - 1062 , - 3893 , - 4084 , - 1635 , - 1346 , - 3217 , - 2448 , - 3839 , - 2590 , - 3501 , - 1772 , - 2203 , - 4794 , - 4745 , - 2056 , - 1527 , - 3158 , - 2149 , - 3300 , - 1811 , - 2482 , - 513 , - 704 , - 3055 , - 2766 , - 4637 , - 3868 , - 459 , - 4010 , - 121 , - 3192 , - 3623 , - 1414 , - 1365 , - 3476 , - 2947 , - 4578 , - 3569 , - 4720 , - 3231 , - 3902 , - 1933 , - 2124 , - 4475 , - 4186 , - 1257 , - 488 , - 1879 , - 630 , - 1541 , - 4612 , - 243 , - 2834 , - 2785 , - 96 , - 4367 , - 1198 , - 189 , - 1340 , - 4651 , - 522 , - 3353 , - 3544 , - 1095 , - 806 , - 2677 , - 1908 , - 3299 , - 2050 , - 2961 , - 1232 , - 1663 , - 4254 , - 4205 , - 1516 , - 987 , - 2618 , - 1609 , - 2760 , - 1271 , - 1942 , - 4773 , - 164 , - 2515 , - 2226 , - 4097 , - 3328 , - 4719 , - 3470 , - 4381 , - 2652 , - 3083 , - 874 , - 825 , - 2936 , - 2407 , - 4038 , - 3029 , - 4180 , - 2691 , - 3362 , - 1393 , - 1584 , - 3935 , - 3646 , - 717 , - 4748 , - 1339 , - 90 , - 1001 , - 4072 , - 4503 , - 2294 , - 2245 , - 4356 , - 3827 , - 658 , - 4449 , - 800 , - 4111 , - 4782 , - 2813 , - 3004 , - 555 , - 266 , - 2137 , - 1368 , - 2759 , - 1510 , - 2421 , - 692 , - 1123 , - 3714 , - 3665 , - 976 , - 447 , - 2078 , - 1069 , - 2220 , - 731 , - 1402 , - 4233 , - 4424 , - 1975 , - 1686 , - 3557 , - 2788 , - 4179 , - 2930 , - 3841 , - 2112 , - 2543 , - 334 , - 285 , - 2396 , - 1867 , - 3498 , - 2489 , - 3640 , - 2151 , - 2822 , - 853 , - 1044 , - 3395 , - 3106 , - 177 , - 4208 , - 799 , - 4350 , - 461 , - 3532 , - 3963 , - 1754 , - 1705 , - 3816 , - 3287 , - 118 , - 3909 , - 260 , - 3571 , - 4242 , - 2273 , - 2464 , - 15 , - 4526 , - 1597 , - 828 , - 2219 , - 970 , - 1881 , - 152 , - 583 , - 3174 , - 3125 , - 436 , - 4707 , - 1538 , - 529 , - 1680 , - 191 , - 862 , - 3693 , - 3884 , - 1435 , - 1146 , - 3017 , - 2248 , - 3639 , - 2390 , - 3301 , - 1572 , - 2003 , - 4594 , - 4545 , - 1856 , - 1327 , - 2958 , - 1949 , - 3100 , - 1611 , - 2282 , - 313 , - 504 , - 2855 , - 2566 , - 4437 , - 3668 , - 259 , - 3810 , - 4721 , - 2992 , - 3423 , - 1214 , - 1165 , - 3276 , - 2747 , - 4378 , - 3369 , - 4520 , - 3031 , - 3702 , - 1733 , - 1924 , - 4275 , - 3986 , - 1057 , - 288 , - 1679 , - 430 , - 1341 , - 4412 , - 43 , - 2634 , - 2585 , - 4696 , - 4167 , - 998 , - 4789 , - 1140 , - 4451 , - 322 , - 3153 , - 3344 , - 895 , - 606 , - 2477 , - 1708 , - 3099 , - 1850 , - 2761 , - 1032 , - 1463 , - 4054 , - 4005 , - 1316 , - 787 , - 2418 , - 1409 , - 2560 , - 1071 , - 1742 , - 4573 , - 4764 , - 2315 , - 2026 , - 3897 , - 3128 , - 4519 , - 3270 , - 4181 , - 2452 , - 2883 , - 674 , - 625 , - 2736 , - 2207 , - 3838 , - 2829 , - 3980 , - 2491 , - 3162 , - 1193 , - 1384 , - 3735 , - 3446 , - 517 , - 4548 , - 1139 , - 4690 , - 801 , - 3872 , - 4303 , - 2094 , - 2045 , - 4156 , - 3627 , - 458 , - 4249 , - 600 , - 3911 , - 4582 , - 2613 , - 2804 , - 355 , - 66 , - 1937 , - 1168 , - 2559 , - 1310 , - 2221 , - 492 , - 923 , - 3514 , - 3465 , - 776 , - 247 , - 1878 , - 869 , - 2020 , - 531 , - 1202 , - 4033 , - 4224 , - 1775 , - 1486 , - 3357 , - 2588 , - 3979 , - 2730 , - 3641 , - 1912 , - 2343 , - 134 , - 85 , - 2196 , - 1667 , - 3298 , - 2289 , - 3440 , - 1951 , - 2622 , - 653 , - 844 , - 3195 , - 2906 , - 4777 , - 4008 , - 599 , - 4150 , - 261 , - 3332 , - 3763 , - 1554 , - 1505 , - 3616 , - 3087 , - 4718 , - 3709 , - 60 , - 3371 , - 4042 , - 2073 , - 2264 , - 4615 , - 4326 , - 1397 , - 628 , - 2019 , - 770 , - 1681 , - 4752 , - 383 , - 2974 , - 2925 , - 236 , - 4507 , - 1338 , - 329 , - 1480 , - 4791 , - 662 , - 3493 , - 3684 , - 1235 , - 946 , - 2817 , - 2048 , - 3439 , - 2190 , - 3101 , - 1372 , - 1803 , - 4394 , - 4345 , - 1656 , - 1127 , - 2758 , - 1749 , - 2900 , - 1411 , - 2082 , - 113 , - 304 , - 2655 , - 2366 , - 4237 , - 3468 , - 59 , - 3610 , - 4521 , - 2792 , - 3223 , - 1014 , - 965 , - 3076 , - 2547 , - 4178 , - 3169 , - 4320 , - 2831 , - 3502 , - 1533 , - 1724 , - 4075 , - 3786 , - 857 , - 88 , - 1479 , - 230 , - 1141 , - 4212 , - 4643 , - 2434 , - 2385 , - 4496 , - 3967 , - 798 , - 4589 , - 940 , - 4251 , - 122 , - 2953 , - 3144 , - 695 , - 406 , - 2277 , - 1508 , - 2899 , - 1650 , - 2561 , - 832 , - 1263 , - 3854 , - 3805 , - 1116 , - 587 , - 2218 , - 1209 , - 2360 , - 871 , - 1542 , - 4373 , - 4564 , - 2115 , - 1826 , - 3697 , - 2928 , - 4319 , - 3070 , - 3981 , - 2252 , - 2683 , - 474 , - 425 , - 2536 , - 2007 , - 3638 , - 2629 , - 3780 , - 2291 , - 2962 , - 993 , - 1184 , - 3535 , - 3246 , - 317 , - 4348 , - 939 , - 4490 , - 601 , - 3672 , - 4103 , - 1894 , - 1845 , - 3956 , - 3427 , - 258 , - 4049 , - 400 , - 3711 , - 4382 , - 2413 , - 2604 , - 155 , - 4666 , - 1737 , - 968 , - 2359 , - 1110 , - 2021 , - 292 , - 723 , - 3314 , - 3265 , - 576 , - 47 , - 1678 , - 669 , - 1820 , - 331 , - 1002 , - 3833 , - 4024 , - 1575 , - 1286 , - 3157 , - 2388 , - 3779 , - 2530 , - 3441 , - 1712 , - 2143 , - 4734 , - 4685 , - 1996 , - 1467 , - 3098 , - 2089 , - 3240 , - 1751 , - 2422 , - 453 , - 644 , - 2995 , - 2706 , - 4577 , - 3808 , - 399 , - 3950 , - 61 , - 3132 , - 3563 , - 1354 , - 1305 , - 3416 , - 2887 , - 4518 , - 3509 , - 4660 , - 3171 , - 3842 , - 1873 , - 2064 , - 4415 , - 4126 , - 1197 , - 428 , - 1819 , - 570 , - 1481 , - 4552 , - 183 , - 2774 , - 2725 , - 36 , - 4307 , - 1138 , - 129 , - 1280 , - 4591 , - 462 , - 3293 , - 3484 , - 1035 , - 746 , - 2617 , - 1848 , - 3239 , - 1990 , - 2901 , - 1172 , - 1603 , - 4194 , - 4145 , - 1456 , - 927 , - 2558 , - 1549 , - 2700 , - 1211 , - 1882 , - 4713 , - 104 , - 2455 , - 2166 , - 4037 , - 3268 , - 4659 , - 3410 , - 4321 , - 2592 , - 3023 , - 814 , - 765 , - 2876 , - 2347 , - 3978 , - 2969 , - 4120 , - 2631 , - 3302 , - 1333 , - 1524 , - 3875 , - 3586 , - 657 , - 4688 , - 1279 , - 30 , - 941 , - 4012 , - 4443 , - 2234 , - 2185 , - 4296 , - 3767 , - 598 , - 4389 , - 740 , - 4051 , - 4722 , - 2753 , - 2944 , - 495 , - 206 , - 2077 , - 1308 , - 2699 , - 1450 , - 2361 , - 632 , - 1063 , - 3654 , - 3605 , - 916 , - 387 , - 2018 , - 1009 , - 2160 , - 671 , - 1342 , - 4173 , - 4364 , - 1915 , - 1626 , - 3497 , - 2728 , - 4119 , - 2870 , - 3781 , - 2052 , - 2483 , - 274 , - 225 , - 2336 , - 1807 , - 3438 , - 2429 , - 3580 , - 2091 , - 2762 , - 793 , - 984 , - 3335 , - 3046 , - 117 , - 4148 , - 739 , - 4290 , - 401 , - 3472 , - 3903 , - 1694 , - 1645 , - 3756 , - 3227 , - 58 , - 3849 , - 200 , - 3511 , - 4182 , - 2213 , - 2404 , - 4755 , - 4466 , - 1537 , - 768 , - 2159 , - 910 , - 1821 , - 92 , - 523 , - 3114 , - 3065 , - 376 , - 4647 , - 1478 , - 469 , - 1620 , - 131 , - 802 , - 3633 , - 3824 , - 1375 , - 1086 , - 2957 , - 2188 , - 3579 , - 2330 , - 3241 , - 1512 , - 1943 , - 4534 , - 4485 , - 1796 , - 1267 , - 2898 , - 1889 , - 3040 , - 1551 , - 2222 , - 253 , - 444 , - 2795 , - 2506 , - 4377 , - 3608 , - 199 , - 3750 , - 4661 , - 2932 , - 3363 , - 1154 , - 1105 , - 3216 , - 2687 , - 4318 , - 3309 , - 4460 , - 2971 , - 3642 , - 1673 , - 1864 , - 4215 , - 3926 , - 997 , - 228 , - 1619 , - 370 , - 1281 , - 4352 , - 4783 , - 2574 , - 2525 , - 4636 , - 4107 , - 938 , - 4729 , - 1080 , - 4391 , - 262 , - 3093 , - 3284 , - 835 , - 546 , - 2417 , - 1648 , - 3039 , - 1790 , - 2701 , - 972 , - 1403 , - 3994 , - 3945 , - 1256 , - 727 , - 2358 , - 1349 , - 2500 , - 1011 , - 1682 , - 4513 , - 4704 , - 2255 , - 1966 , - 3837 , - 3068 , - 4459 , - 3210 , - 4121 , - 2392 , - 2823 , - 614 , - 565 , - 2676 , - 2147 , - 3778 , - 2769 , - 3920 , - 2431 , - 3102 , - 1133 , - 1324 , - 3675 , - 3386 , - 457 , - 4488 , - 1079 , - 4630 , - 741 , - 3812 , - 4243 , - 2034 , - 1985 , - 4096 , - 3567 , - 398 , - 4189 , - 540 , - 3851 , - 4522 , - 2553 , - 2744 , - 295 , - 6 , - 1877 , - 1108 , - 2499 , - 1250 , - 2161 , - 432 , - 863 , - 3454 , - 3405 , - 716 , - 187 , - 1818 , - 809 , - 1960 , - 471 , - 1142 , - 3973 , - 4164 , - 1715 , - 1426 , - 3297 , - 2528 , - 3919 , - 2670 , - 3581 , - 1852 , - 2283 , - 74 , - 25 , - 2136 , - 1607 , - 3238 , - 2229 , - 3380 , - 1891 , - 2562 , - 593 , - 784 , - 3135 , - 2846 , - 4717 , - 3948 , - 539 , - 4090 , - 201 , - 3272 , - 3703 , - 1494 , - 1445 , - 3556 , - 3027 , - 4658 , - 3649 , - 0 , - 949 , - 378 , - 3151 , - 4404 , - 4137 , - 2350 , - 3907 , - 3944 , - 2461 , - 4322 , - 4663 , - 3484 , - 785 , - 1430 , - 555 , - 3024 , - 3973 , - 3402 , - 1311 , - 2564 , - 2297 , - 510 , - 2067 , - 2104 , - 621 , - 2482 , - 2823 , - 1644 , - 3809 , - 4454 , - 3579 , - 1184 , - 2133 , - 1562 , - 4335 , - 724 , - 457 , - 3534 , - 227 , - 264 , - 3645 , - 642 , - 983 , - 4668 , - 1969 , - 2614 , - 1739 , - 4208 , - 293 , - 4586 , - 2495 , - 3748 , - 3481 , - 1694 , - 3251 , - 3288 , - 1805 , - 3666 , - 4007 , - 2828 , - 129 , - 774 , - 4763 , - 2368 , - 3317 , - 2746 , - 655 , - 1908 , - 1641 , - 4718 , - 1411 , - 1448 , - 4829 , - 1826 , - 2167 , - 988 , - 3153 , - 3798 , - 2923 , - 528 , - 1477 , - 906 , - 3679 , - 68 , - 4665 , - 2878 , - 4435 , - 4472 , - 2989 , - 4850 , - 327 , - 4012 , - 1313 , - 1958 , - 1083 , - 3552 , - 4501 , - 3930 , - 1839 , - 3092 , - 2825 , - 1038 , - 2595 , - 2632 , - 1149 , - 3010 , - 3351 , - 2172 , - 4337 , - 118 , - 4107 , - 1712 , - 2661 , - 2090 , - 4863 , - 1252 , - 985 , - 4062 , - 755 , - 792 , - 4173 , - 1170 , - 1511 , - 332 , - 2497 , - 3142 , - 2267 , - 4736 , - 821 , - 250 , - 3023 , - 4276 , - 4009 , - 2222 , - 3779 , - 3816 , - 2333 , - 4194 , - 4535 , - 3356 , - 657 , - 1302 , - 427 , - 2896 , - 3845 , - 3274 , - 1183 , - 2436 , - 2169 , - 382 , - 1939 , - 1976 , - 493 , - 2354 , - 2695 , - 1516 , - 3681 , - 4326 , - 3451 , - 1056 , - 2005 , - 1434 , - 4207 , - 596 , - 329 , - 3406 , - 99 , - 136 , - 3517 , - 514 , - 855 , - 4540 , - 1841 , - 2486 , - 1611 , - 4080 , - 165 , - 4458 , - 2367 , - 3620 , - 3353 , - 1566 , - 3123 , - 3160 , - 1677 , - 3538 , - 3879 , - 2700 , - 1 , - 646 , - 4635 , - 2240 , - 3189 , - 2618 , - 527 , - 1780 , - 1513 , - 4590 , - 1283 , - 1320 , - 4701 , - 1698 , - 2039 , - 860 , - 3025 , - 3670 , - 2795 , - 400 , - 1349 , - 778 , - 3551 , - 4804 , - 4537 , - 2750 , - 4307 , - 4344 , - 2861 , - 4722 , - 199 , - 3884 , - 1185 , - 1830 , - 955 , - 3424 , - 4373 , - 3802 , - 1711 , - 2964 , - 2697 , - 910 , - 2467 , - 2504 , - 1021 , - 2882 , - 3223 , - 2044 , - 4209 , - 4854 , - 3979 , - 1584 , - 2533 , - 1962 , - 4735 , - 1124 , - 857 , - 3934 , - 627 , - 664 , - 4045 , - 1042 , - 1383 , - 204 , - 2369 , - 3014 , - 2139 , - 4608 , - 693 , - 122 , - 2895 , - 4148 , - 3881 , - 2094 , - 3651 , - 3688 , - 2205 , - 4066 , - 4407 , - 3228 , - 529 , - 1174 , - 299 , - 2768 , - 3717 , - 3146 , - 1055 , - 2308 , - 2041 , - 254 , - 1811 , - 1848 , - 365 , - 2226 , - 2567 , - 1388 , - 3553 , - 4198 , - 3323 , - 928 , - 1877 , - 1306 , - 4079 , - 468 , - 201 , - 3278 , - 4835 , - 8 , - 3389 , - 386 , - 727 , - 4412 , - 1713 , - 2358 , - 1483 , - 3952 , - 37 , - 4330 , - 2239 , - 3492 , - 3225 , - 1438 , - 2995 , - 3032 , - 1549 , - 3410 , - 3751 , - 2572 , - 4737 , - 518 , - 4507 , - 2112 , - 3061 , - 2490 , - 399 , - 1652 , - 1385 , - 4462 , - 1155 , - 1192 , - 4573 , - 1570 , - 1911 , - 732 , - 2897 , - 3542 , - 2667 , - 272 , - 1221 , - 650 , - 3423 , - 4676 , - 4409 , - 2622 , - 4179 , - 4216 , - 2733 , - 4594 , - 71 , - 3756 , - 1057 , - 1702 , - 827 , - 3296 , - 4245 , - 3674 , - 1583 , - 2836 , - 2569 , - 782 , - 2339 , - 2376 , - 893 , - 2754 , - 3095 , - 1916 , - 4081 , - 4726 , - 3851 , - 1456 , - 2405 , - 1834 , - 4607 , - 996 , - 729 , - 3806 , - 499 , - 536 , - 3917 , - 914 , - 1255 , - 76 , - 2241 , - 2886 , - 2011 , - 4480 , - 565 , - 4858 , - 2767 , - 4020 , - 3753 , - 1966 , - 3523 , - 3560 , - 2077 , - 3938 , - 4279 , - 3100 , - 401 , - 1046 , - 171 , - 2640 , - 3589 , - 3018 , - 927 , - 2180 , - 1913 , - 126 , - 1683 , - 1720 , - 237 , - 2098 , - 2439 , - 1260 , - 3425 , - 4070 , - 3195 , - 800 , - 1749 , - 1178 , - 3951 , - 340 , - 73 , - 3150 , - 4707 , - 4744 , - 3261 , - 258 , - 599 , - 4284 , - 1585 , - 2230 , - 1355 , - 3824 , - 4773 , - 4202 , - 2111 , - 3364 , - 3097 , - 1310 , - 2867 , - 2904 , - 1421 , - 3282 , - 3623 , - 2444 , - 4609 , - 390 , - 4379 , - 1984 , - 2933 , - 2362 , - 271 , - 1524 , - 1257 , - 4334 , - 1027 , - 1064 , - 4445 , - 1442 , - 1783 , - 604 , - 2769 , - 3414 , - 2539 , - 144 , - 1093 , - 522 , - 3295 , - 4548 , - 4281 , - 2494 , - 4051 , - 4088 , - 2605 , - 4466 , - 4807 , - 3628 , - 929 , - 1574 , - 699 , - 3168 , - 4117 , - 3546 , - 1455 , - 2708 , - 2441 , - 654 , - 2211 , - 2248 , - 765 , - 2626 , - 2967 , - 1788 , - 3953 , - 4598 , - 3723 , - 1328 , - 2277 , - 1706 , - 4479 , - 868 , - 601 , - 3678 , - 371 , - 408 , - 3789 , - 786 , - 1127 , - 4812 , - 2113 , - 2758 , - 1883 , - 4352 , - 437 , - 4730 , - 2639 , - 3892 , - 3625 , - 1838 , - 3395 , - 3432 , - 1949 , - 3810 , - 4151 , - 2972 , - 273 , - 918 , - 43 , - 2512 , - 3461 , - 2890 , - 799 , - 2052 , - 1785 , - 4862 , - 1555 , - 1592 , - 109 , - 1970 , - 2311 , - 1132 , - 3297 , - 3942 , - 3067 , - 672 , - 1621 , - 1050 , - 3823 , - 212 , - 4809 , - 3022 , - 4579 , - 4616 , - 3133 , - 130 , - 471 , - 4156 , - 1457 , - 2102 , - 1227 , - 3696 , - 4645 , - 4074 , - 1983 , - 3236 , - 2969 , - 1182 , - 2739 , - 2776 , - 1293 , - 3154 , - 3495 , - 2316 , - 4481 , - 262 , - 4251 , - 1856 , - 2805 , - 2234 , - 143 , - 1396 , - 1129 , - 4206 , - 899 , - 936 , - 4317 , - 1314 , - 1655 , - 476 , - 2641 , - 3286 , - 2411 , - 16 , - 965 , - 394 , - 3167 , - 4420 , - 4153 , - 2366 , - 3923 , - 3960 , - 2477 , - 4338 , - 4679 , - 3500 , - 801 , - 1446 , - 571 , - 3040 , - 3989 , - 3418 , - 1327 , - 2580 , - 2313 , - 526 , - 2083 , - 2120 , - 637 , - 2498 , - 2839 , - 1660 , - 3825 , - 4470 , - 3595 , - 1200 , - 2149 , - 1578 , - 4351 , - 740 , - 473 , - 3550 , - 243 , - 280 , - 3661 , - 658 , - 999 , - 4684 , - 1985 , - 2630 , - 1755 , - 4224 , - 309 , - 4602 , - 2511 , - 3764 , - 3497 , - 1710 , - 3267 , - 3304 , - 1821 , - 3682 , - 4023 , - 2844 , - 145 , - 790 , - 4779 , - 2384 , - 3333 , - 2762 , - 671 , - 1924 , - 1657 , - 4734 , - 1427 , - 1464 , - 4845 , - 1842 , - 2183 , - 1004 , - 3169 , - 3814 , - 2939 , - 544 , - 1493 , - 922 , - 3695 , - 84 , - 4681 , - 2894 , - 4451 , - 4488 , - 3005 , - 2 , - 343 , - 4028 , - 1329 , - 1974 , - 1099 , - 3568 , - 4517 , - 3946 , - 1855 , - 3108 , - 2841 , - 1054 , - 2611 , - 2648 , - 1165 , - 3026 , - 3367 , - 2188 , - 4353 , - 134 , - 4123 , - 1728 , - 2677 , - 2106 , - 15 , - 1268 , - 1001 , - 4078 , - 771 , - 808 , - 4189 , - 1186 , - 1527 , - 348 , - 2513 , - 3158 , - 2283 , - 4752 , - 837 , - 266 , - 3039 , - 4292 , - 4025 , - 2238 , - 3795 , - 3832 , - 2349 , - 4210 , - 4551 , - 3372 , - 673 , - 1318 , - 443 , - 2912 , - 3861 , - 3290 , - 1199 , - 2452 , - 2185 , - 398 , - 1955 , - 1992 , - 509 , - 2370 , - 2711 , - 1532 , - 3697 , - 4342 , - 3467 , - 1072 , - 2021 , - 1450 , - 4223 , - 612 , - 345 , - 3422 , - 115 , - 152 , - 3533 , - 530 , - 871 , - 4556 , - 1857 , - 2502 , - 1627 , - 4096 , - 181 , - 4474 , - 2383 , - 3636 , - 3369 , - 1582 , - 3139 , - 3176 , - 1693 , - 3554 , - 3895 , - 2716 , - 17 , - 662 , - 4651 , - 2256 , - 3205 , - 2634 , - 543 , - 1796 , - 1529 , - 4606 , - 1299 , - 1336 , - 4717 , - 1714 , - 2055 , - 876 , - 3041 , - 3686 , - 2811 , - 416 , - 1365 , - 794 , - 3567 , - 4820 , - 4553 , - 2766 , - 4323 , - 4360 , - 2877 , - 4738 , - 215 , - 3900 , - 1201 , - 1846 , - 971 , - 3440 , - 4389 , - 3818 , - 1727 , - 2980 , - 2713 , - 926 , - 2483 , - 2520 , - 1037 , - 2898 , - 3239 , - 2060 , - 4225 , - 6 , - 3995 , - 1600 , - 2549 , - 1978 , - 4751 , - 1140 , - 873 , - 3950 , - 643 , - 680 , - 4061 , - 1058 , - 1399 , - 220 , - 2385 , - 3030 , - 2155 , - 4624 , - 709 , - 138 , - 2911 , - 4164 , - 3897 , - 2110 , - 3667 , - 3704 , - 2221 , - 4082 , - 4423 , - 3244 , - 545 , - 1190 , - 315 , - 2784 , - 3733 , - 3162 , - 1071 , - 2324 , - 2057 , - 270 , - 1827 , - 1864 , - 381 , - 2242 , - 2583 , - 1404 , - 3569 , - 4214 , - 3339 , - 944 , - 1893 , - 1322 , - 4095 , - 484 , - 217 , - 3294 , - 4851 , - 24 , - 3405 , - 402 , - 743 , - 4428 , - 1729 , - 2374 , - 1499 , - 3968 , - 53 , - 4346 , - 2255 , - 3508 , - 3241 , - 1454 , - 3011 , - 3048 , - 1565 , - 3426 , - 3767 , - 2588 , - 4753 , - 534 , - 4523 , - 2128 , - 3077 , - 2506 , - 415 , - 1668 , - 1401 , - 4478 , - 1171 , - 1208 , - 4589 , - 1586 , - 1927 , - 748 , - 2913 , - 3558 , - 2683 , - 288 , - 1237 , - 666 , - 3439 , - 4692 , - 4425 , - 2638 , - 4195 , - 4232 , - 2749 , - 4610 , - 87 , - 3772 , - 1073 , - 1718 , - 843 , - 3312 , - 4261 , - 3690 , - 1599 , - 2852 , - 2585 , - 798 , - 2355 , - 2392 , - 909 , - 2770 , - 3111 , - 1932 , - 4097 , - 4742 , - 3867 , - 1472 , - 2421 , - 1850 , - 4623 , - 1012 , - 745 , - 3822 , - 515 , - 552 , - 3933 , - 930 , - 1271 , - 92 , - 2257 , - 2902 , - 2027 , - 4496 , - 581 , - 10 , - 2783 , - 4036 , - 3769 , - 1982 , - 3539 , - 3576 , - 2093 , - 3954 , - 4295 , - 3116 , - 417 , - 1062 , - 187 , - 2656 , - 3605 , - 3034 , - 943 , - 2196 , - 1929 , - 142 , - 1699 , - 1736 , - 253 , - 2114 , - 2455 , - 1276 , - 3441 , - 4086 , - 3211 , - 816 , - 1765 , - 1194 , - 3967 , - 356 , - 89 , - 3166 , - 4723 , - 4760 , - 3277 , - 274 , - 615 , - 4300 , - 1601 , - 2246 , - 1371 , - 3840 , - 4789 , - 4218 , - 2127 , - 3380 , - 3113 , - 1326 , - 2883 , - 2920 , - 1437 , - 3298 , - 3639 , - 2460 , - 4625 , - 406 , - 4395 , - 2000 , - 2949 , - 2378 , - 287 , - 1540 , - 1273 , - 4350 , - 1043 , - 1080 , - 4461 , - 1458 , - 1799 , - 620 , - 2785 , - 3430 , - 2555 , - 160 , - 1109 , - 538 , - 3311 , - 4564 , - 4297 , - 2510 , - 4067 , - 4104 , - 2621 , - 4482 , - 4823 , - 3644 , - 945 , - 1590 , - 715 , - 3184 , - 4133 , - 3562 , - 1471 , - 2724 , - 2457 , - 670 , - 2227 , - 2264 , - 781 , - 2642 , - 2983 , - 1804 , - 3969 , - 4614 , - 3739 , - 1344 , - 2293 , - 1722 , - 4495 , - 884 , - 617 , - 3694 , - 387 , - 424 , - 3805 , - 802 , - 1143 , - 4828 , - 2129 , - 2774 , - 1899 , - 4368 , - 453 , - 4746 , - 2655 , - 3908 , - 3641 , - 1854 , - 3411 , - 3448 , - 1965 , - 3826 , - 4167 , - 2988 , - 289 , - 934 , - 59 , - 2528 , - 3477 , - 2906 , - 815 , - 2068 , - 1801 , - 14 , - 1571 , - 1608 , - 125 , - 1986 , - 2327 , - 1148 , - 3313 , - 3958 , - 3083 , - 688 , - 1637 , - 1066 , - 3839 , - 228 , - 4825 , - 3038 , - 4595 , - 4632 , - 3149 , - 146 , - 487 , - 4172 , - 1473 , - 2118 , - 1243 , - 3712 , - 4661 , - 4090 , - 1999 , - 3252 , - 2985 , - 1198 , - 2755 , - 2792 , - 1309 , - 3170 , - 3511 , - 2332 , - 4497 , - 278 , - 4267 , - 1872 , - 2821 , - 2250 , - 159 , - 1412 , - 1145 , - 4222 , - 915 , - 952 , - 4333 , - 1330 , - 1671 , - 492 , - 2657 , - 3302 , - 2427 , - 32 , - 981 , - 410 , - 3183 , - 4436 , - 4169 , - 2382 , - 3939 , - 3976 , - 2493 , - 4354 , - 4695 , - 3516 , - 817 , - 1462 , - 587 , - 3056 , - 4005 , - 3434 , - 1343 , - 2596 , - 2329 , - 542 , - 2099 , - 2136 , - 653 , - 2514 , - 2855 , - 1676 , - 3841 , - 4486 , - 3611 , - 1216 , - 2165 , - 1594 , - 4367 , - 756 , - 489 , - 3566 , - 259 , - 296 , - 3677 , - 674 , - 1015 , - 4700 , - 2001 , - 2646 , - 1771 , - 4240 , - 325 , - 4618 , - 2527 , - 3780 , - 3513 , - 1726 , - 3283 , - 3320 , - 1837 , - 3698 , - 4039 , - 2860 , - 161 , - 806 , - 4795 , - 2400 , - 3349 , - 2778 , - 687 , - 1940 , - 1673 , - 4750 , - 1443 , - 1480 , - 4861 , - 1858 , - 2199 , - 1020 , - 3185 , - 3830 , - 2955 , - 560 , - 1509 , - 938 , - 3711 , - 100 , - 4697 , - 2910 , - 4467 , - 4504 , - 3021 , - 18 , - 359 , - 4044 , - 1345 , - 1990 , - 1115 , - 3584 , - 4533 , - 3962 , - 1871 , - 3124 , - 2857 , - 1070 , - 2627 , - 2664 , - 1181 , - 3042 , - 3383 , - 2204 , - 4369 , - 150 , - 4139 , - 1744 , - 2693 , - 2122 , - 31 , - 1284 , - 1017 , - 4094 , - 787 , - 824 , - 4205 , - 1202 , - 1543 , - 364 , - 2529 , - 3174 , - 2299 , - 4768 , - 853 , - 282 , - 3055 , - 4308 , - 4041 , - 2254 , - 3811 , - 3848 , - 2365 , - 4226 , - 4567 , - 3388 , - 689 , - 1334 , - 459 , - 2928 , - 3877 , - 3306 , - 1215 , - 2468 , - 2201 , - 414 , - 1971 , - 2008 , - 525 , - 2386 , - 2727 , - 1548 , - 3713 , - 4358 , - 3483 , - 1088 , - 2037 , - 1466 , - 4239 , - 628 , - 361 , - 3438 , - 131 , - 168 , - 3549 , - 546 , - 887 , - 4572 , - 1873 , - 2518 , - 1643 , - 4112 , - 197 , - 4490 , - 2399 , - 3652 , - 3385 , - 1598 , - 3155 , - 3192 , - 1709 , - 3570 , - 3911 , - 2732 , - 33 , - 678 , - 4667 , - 2272 , - 3221 , - 2650 , - 559 , - 1812 , - 1545 , - 4622 , - 1315 , - 1352 , - 4733 , - 1730 , - 2071 , - 892 , - 3057 , - 3702 , - 2827 , - 432 , - 1381 , - 810 , - 3583 , - 4836 , - 4569 , - 2782 , - 4339 , - 4376 , - 2893 , - 4754 , - 231 , - 3916 , - 1217 , - 1862 , - 987 , - 3456 , - 4405 , - 3834 , - 1743 , - 2996 , - 2729 , - 942 , - 2499 , - 2536 , - 1053 , - 2914 , - 3255 , - 2076 , - 4241 , - 22 , - 4011 , - 1616 , - 2565 , - 1994 , - 4767 , - 1156 , - 889 , - 3966 , - 659 , - 696 , - 4077 , - 1074 , - 1415 , - 236 , - 2401 , - 3046 , - 2171 , - 4640 , - 725 , - 154 , - 2927 , - 4180 , - 3913 , - 2126 , - 3683 , - 3720 , - 2237 , - 4098 , - 4439 , - 3260 , - 561 , - 1206 , - 331 , - 2800 , - 3749 , - 3178 , - 1087 , - 2340 , - 2073 , - 286 , - 1843 , - 1880 , - 397 , - 2258 , - 2599 , - 1420 , - 3585 , - 4230 , - 3355 , - 960 , - 1909 , - 1338 , - 4111 , - 500 , - 233 , - 3310 , - 3 , - 40 , - 3421 , - 418 , - 759 , - 4444 , - 1745 , - 2390 , - 1515 , - 3984 , - 69 , - 4362 , - 2271 , - 3524 , - 3257 , - 1470 , - 3027 , - 3064 , - 1581 , - 3442 , - 3783 , - 2604 , - 4769 , - 550 , - 4539 , - 2144 , - 3093 , - 2522 , - 431 , - 1684 , - 1417 , - 4494 , - 1187 , - 1224 , - 4605 , - 1602 , - 1943 , - 764 , - 2929 , - 3574 , - 2699 , - 304 , - 1253 , - 682 , - 3455 , - 4708 , - 4441 , - 2654 , - 4211 , - 4248 , - 2765 , - 4626 , - 103 , - 3788 , - 1089 , - 1734 , - 859 , - 3328 , - 4277 , - 3706 , - 1615 , - 2868 , - 2601 , - 814 , - 2371 , - 2408 , - 925 , - 2786 , - 3127 , - 1948 , - 4113 , - 4758 , - 3883 , - 1488 , - 2437 , - 1866 , - 4639 , - 1028 , - 761 , - 3838 , - 531 , - 568 , - 3949 , - 946 , - 1287 , - 108 , - 2273 , - 2918 , - 2043 , - 4512 , - 597 , - 26 , - 2799 , - 4052 , - 3785 , - 1998 , - 3555 , - 3592 , - 2109 , - 3970 , - 4311 , - 3132 , - 433 , - 1078 , - 203 , - 2672 , - 3621 , - 3050 , - 959 , - 2212 , - 1945 , - 158 , - 1715 , - 1752 , - 269 , - 2130 , - 2471 , - 1292 , - 3457 , - 4102 , - 3227 , - 832 , - 1781 , - 1210 , - 3983 , - 372 , - 105 , - 3182 , - 4739 , - 4776 , - 3293 , - 290 , - 631 , - 4316 , - 1617 , - 2262 , - 1387 , - 3856 , - 4805 , - 4234 , - 2143 , - 3396 , - 3129 , - 1342 , - 2899 , - 2936 , - 1453 , - 3314 , - 3655 , - 2476 , - 4641 , - 422 , - 4411 , - 2016 , - 2965 , - 2394 , - 303 , - 1556 , - 1289 , - 4366 , - 1059 , - 1096 , - 4477 , - 1474 , - 1815 , - 636 , - 2801 , - 3446 , - 2571 , - 176 , - 1125 , - 554 , - 3327 , - 4580 , - 4313 , - 2526 , - 4083 , - 4120 , - 2637 , - 4498 , - 4839 , - 3660 , - 961 , - 1606 , - 731 , - 3200 , - 4149 , - 3578 , - 1487 , - 2740 , - 2473 , - 686 , - 2243 , - 2280 , - 797 , - 2658 , - 2999 , - 1820 , - 3985 , - 4630 , - 3755 , - 1360 , - 2309 , - 1738 , - 4511 , - 900 , - 633 , - 3710 , - 403 , - 440 , - 3821 , - 818 , - 1159 , - 4844 , - 2145 , - 2790 , - 1915 , - 4384 , - 469 , - 4762 , - 2671 , - 3924 , - 3657 , - 1870 , - 3427 , - 3464 , - 1981 , - 3842 , - 4183 , - 3004 , - 305 , - 950 , - 75 , - 2544 , - 3493 , - 2922 , - 831 , - 2084 , - 1817 , - 30 , - 1587 , - 1624 , - 141 , - 2002 , - 2343 , - 1164 , - 3329 , - 3974 , - 3099 , - 704 , - 1653 , - 1082 , - 3855 , - 244 , - 4841 , - 3054 , - 4611 , - 4648 , - 3165 , - 162 , - 503 , - 4188 , - 1489 , - 2134 , - 1259 , - 3728 , - 4677 , - 4106 , - 2015 , - 3268 , - 3001 , - 1214 , - 2771 , - 2808 , - 1325 , - 3186 , - 3527 , - 2348 , - 4513 , - 294 , - 4283 , - 1888 , - 2837 , - 2266 , - 175 , - 1428 , - 1161 , - 4238 , - 931 , - 968 , - 4349 , - 1346 , - 1687 , - 508 , - 2673 , - 3318 , - 2443 , - 48 , - 997 , - 426 , - 3199 , - 4452 , - 4185 , - 2398 , - 3955 , - 3992 , - 2509 , - 4370 , - 4711 , - 3532 , - 833 , - 1478 , - 603 , - 3072 , - 4021 , - 3450 , - 1359 , - 2612 , - 2345 , - 558 , - 2115 , - 2152 , - 669 , - 2530 , - 2871 , - 1692 , - 3857 , - 4502 , - 3627 , - 1232 , - 2181 , - 1610 , - 4383 , - 772 , - 505 , - 3582 , - 275 , - 312 , - 3693 , - 690 , - 1031 , - 4716 , - 2017 , - 2662 , - 1787 , - 4256 , - 341 , - 4634 , - 2543 , - 3796 , - 3529 , - 1742 , - 3299 , - 3336 , - 1853 , - 3714 , - 4055 , - 2876 , - 177 , - 822 , - 4811 , - 2416 , - 3365 , - 2794 , - 703 , - 1956 , - 1689 , - 4766 , - 1459 , - 1496 , - 13 , - 1874 , - 2215 , - 1036 , - 3201 , - 3846 , - 2971 , - 576 , - 1525 , - 954 , - 3727 , - 116 , - 4713 , - 2926 , - 4483 , - 4520 , - 3037 , - 34 , - 375 , - 4060 , - 1361 , - 2006 , - 1131 , - 3600 , - 4549 , - 3978 , - 1887 , - 3140 , - 2873 , - 1086 , - 2643 , - 2680 , - 1197 , - 3058 , - 3399 , - 2220 , - 4385 , - 166 , - 4155 , - 1760 , - 2709 , - 2138 , - 47 , - 1300 , - 1033 , - 4110 , - 803 , - 840 , - 4221 , - 1218 , - 1559 , - 380 , - 2545 , - 3190 , - 2315 , - 4784 , - 869 , - 298 , - 3071 , - 4324 , - 4057 , - 2270 , - 3827 , - 3864 , - 2381 , - 4242 , - 4583 , - 3404 , - 705 , - 1350 , - 475 , - 2944 , - 3893 , - 3322 , - 1231 , - 2484 , - 2217 , - 430 , - 1987 , - 2024 , - 541 , - 2402 , - 2743 , - 1564 , - 3729 , - 4374 , - 3499 , - 1104 , - 2053 , - 1482 , - 4255 , - 644 , - 377 , - 3454 , - 147 , - 184 , - 3565 , - 562 , - 903 , - 4588 , - 1889 , - 2534 , - 1659 , - 4128 , - 213 , - 4506 , - 2415 , - 3668 , - 3401 , - 1614 , - 3171 , - 3208 , - 1725 , - 3586 , - 3927 , - 2748 , - 49 , - 694 , - 4683 , - 2288 , - 3237 , - 2666 , - 575 , - 1828 , - 1561 , - 4638 , - 1331 , - 1368 , - 4749 , - 1746 , - 2087 , - 908 , - 3073 , - 3718 , - 2843 , - 448 , - 1397 , - 826 , - 3599 , - 4852 , - 4585 , - 2798 , - 4355 , - 4392 , - 2909 , - 4770 , - 247 , - 3932 , - 1233 , - 1878 , - 1003 , - 3472 , - 4421 , - 3850 , - 1759 , - 3012 , - 2745 , - 958 , - 2515 , - 2552 , - 1069 , - 2930 , - 3271 , - 2092 , - 4257 , - 38 , - 4027 , - 1632 , - 2581 , - 2010 , - 4783 , - 1172 , - 905 , - 3982 , - 675 , - 712 , - 4093 , - 1090 , - 1431 , - 252 , - 2417 , - 3062 , - 2187 , - 4656 , - 741 , - 170 , - 2943 , - 4196 , - 3929 , - 2142 , - 3699 , - 3736 , - 2253 , - 4114 , - 4455 , - 3276 , - 577 , - 1222 , - 347 , - 2816 , - 3765 , - 3194 , - 1103 , - 2356 , - 2089 , - 302 , - 1859 , - 1896 , - 413 , - 2274 , - 2615 , - 1436 , - 3601 , - 4246 , - 3371 , - 976 , - 1925 , - 1354 , - 4127 , - 516 , - 249 , - 3326 , - 19 , - 56 , - 3437 , - 434 , - 775 , - 4460 , - 1761 , - 2406 , - 1531 , - 4000 , - 85 , - 4378 , - 2287 , - 3540 , - 3273 , - 1486 , - 3043 , - 3080 , - 1597 , - 3458 , - 3799 , - 2620 , - 4785 , - 566 , - 4555 , - 2160 , - 3109 , - 2538 , - 447 , - 1700 , - 1433 , - 4510 , - 1203 , - 1240 , - 4621 , - 1618 , - 1959 , - 780 , - 2945 , - 3590 , - 2715 , - 320 , - 1269 , - 698 , - 3471 , - 4724 , - 4457 , - 2670 , - 4227 , - 4264 , - 2781 , - 4642 , - 119 , - 3804 , - 1105 , - 1750 , - 875 , - 3344 , - 4293 , - 3722 , - 1631 , - 2884 , - 2617 , - 830 , - 2387 , - 2424 , - 941 , - 2802 , - 3143 , - 1964 , - 4129 , - 4774 , - 3899 , - 1504 , - 2453 , - 1882 , - 4655 , - 1044 , - 777 , - 3854 , - 547 , - 584 , - 3965 , - 962 , - 1303 , - 124 , - 2289 , - 2934 , - 2059 , - 4528 , - 613 , - 42 , - 2815 , - 4068 , - 3801 , - 2014 , - 3571 , - 3608 , - 2125 , - 3986 , - 4327 , - 3148 , - 449 , - 1094 , - 219 , - 2688 , - 3637 , - 3066 , - 975 , - 2228 , - 1961 , - 174 , - 1731 , - 1768 , - 285 , - 2146 , - 2487 , - 1308 , - 3473 , - 4118 , - 3243 , - 848 , - 1797 , - 1226 , - 3999 , - 388 , - 121 , - 3198 , - 4755 , - 4792 , - 3309 , - 306 , - 647 , - 4332 , - 1633 , - 2278 , - 1403 , - 3872 , - 4821 , - 4250 , - 2159 , - 3412 , - 3145 , - 1358 , - 2915 , - 2952 , - 1469 , - 3330 , - 3671 , - 2492 , - 4657 , - 438 , - 4427 , - 2032 , - 2981 , - 2410 , - 319 , - 1572 , - 1305 , - 4382 , - 1075 , - 1112 , - 4493 , - 1490 , - 1831 , - 652 , - 2817 , - 3462 , - 2587 , - 192 , - 1141 , - 570 , - 3343 , - 4596 , - 4329 , - 2542 , - 4099 , - 4136 , - 2653 , - 4514 , - 4855 , - 3676 , - 977 , - 1622 , - 747 , - 3216 , - 4165 , - 3594 , - 1503 , - 2756 , - 2489 , - 702 , - 2259 , - 2296 , - 813 , - 2674 , - 3015 , - 1836 , - 4001 , - 4646 , - 3771 , - 1376 , - 2325 , - 1754 , - 4527 , - 916 , - 649 , - 3726 , - 419 , - 456 , - 3837 , - 834 , - 1175 , - 4860 , - 2161 , - 2806 , - 1931 , - 4400 , - 485 , - 4778 , - 2687 , - 3940 , - 3673 , - 1886 , - 3443 , - 3480 , - 1997 , - 3858 , - 4199 , - 3020 , - 321 , - 966 , - 91 , - 2560 , - 3509 , - 2938 , - 847 , - 2100 , - 1833 , - 46 , - 1603 , - 1640 , - 157 , - 2018 , - 2359 , - 1180 , - 3345 , - 3990 , - 3115 , - 720 , - 1669 , - 1098 , - 3871 , - 260 , - 4857 , - 3070 , - 4627 , - 4664 , - 3181 , - 178 , - 519 , - 4204 , - 1505 , - 2150 , - 1275 , - 3744 , - 4693 , - 4122 , - 2031 , - 3284 , - 3017 , - 1230 , - 2787 , - 2824 , - 1341 , - 3202 , - 3543 , - 2364 , - 4529 , - 310 , - 4299 , - 1904 , - 2853 , - 2282 , - 191 , - 1444 , - 1177 , - 4254 , - 947 , - 984 , - 4365 , - 1362 , - 1703 , - 524 , - 2689 , - 3334 , - 2459 , - 64 , - 1013 , - 442 , - 3215 , - 4468 , - 4201 , - 2414 , - 3971 , - 4008 , - 2525 , - 4386 , - 4727 , - 3548 , - 849 , - 1494 , - 619 , - 3088 , - 4037 , - 3466 , - 1375 , - 2628 , - 2361 , - 574 , - 2131 , - 2168 , - 685 , - 2546 , - 2887 , - 1708 , - 3873 , - 4518 , - 3643 , - 1248 , - 2197 , - 1626 , - 4399 , - 788 , - 521 , - 3598 , - 291 , - 328 , - 3709 , - 706 , - 1047 , - 4732 , - 2033 , - 2678 , - 1803 , - 4272 , - 357 , - 4650 , - 2559 , - 3812 , - 3545 , - 1758 , - 3315 , - 3352 , - 1869 , - 3730 , - 4071 , - 2892 , - 193 , - 838 , - 4827 , - 2432 , - 3381 , - 2810 , - 719 , - 1972 , - 1705 , - 4782 , - 1475 , - 1512 , - 29 , - 1890 , - 2231 , - 1052 , - 3217 , - 3862 , - 2987 , - 592 , - 1541 , - 970 , - 3743 , - 132 , - 4729 , - 2942 , - 4499 , - 4536 , - 3053 , - 50 , - 391 , - 4076 , - 1377 , - 2022 , - 1147 , - 3616 , - 4565 , - 3994 , - 1903 , - 3156 , - 2889 , - 1102 , - 2659 , - 2696 , - 1213 , - 3074 , - 3415 , - 2236 , - 4401 , - 182 , - 4171 , - 1776 , - 2725 , - 2154 , - 63 , - 1316 , - 1049 , - 4126 , - 819 , - 856 , - 4237 , - 1234 , - 1575 , - 396 , - 2561 , - 3206 , - 2331 , - 4800 , - 885 , - 314 , - 3087 , - 4340 , - 4073 , - 2286 , - 3843 , - 3880 , - 2397 , - 4258 , - 4599 , - 3420 , - 721 , - 1366 , - 491 , - 2960 , - 3909 , - 3338 , - 1247 , - 2500 , - 2233 , - 446 , - 2003 , - 2040 , - 557 , - 2418 , - 2759 , - 1580 , - 3745 , - 4390 , - 3515 , - 1120 , - 2069 , - 1498 , - 4271 , - 660 , - 393 , - 3470 , - 163 , - 200 , - 3581 , - 578 , - 919 , - 4604 , - 1905 , - 2550 , - 1675 , - 4144 , - 229 , - 4522 , - 2431 , - 3684 , - 3417 , - 1630 , - 3187 , - 3224 , - 1741 , - 3602 , - 3943 , - 2764 , - 65 , - 710 , - 4699 , - 2304 , - 3253 , - 2682 , - 591 , - 1844 , - 1577 , - 4654 , - 1347 , - 1384 , - 4765 , - 1762 , - 2103 , - 924 , - 3089 , - 3734 , - 2859 , - 464 , - 1413 , - 842 , - 3615 , - 4 , - 4601 , - 2814 , - 4371 , - 4408 , - 2925 , - 4786 , - 263 , - 3948 , - 1249 , - 1894 , - 1019 , - 3488 , - 4437 , - 3866 , - 1775 , - 3028 , - 2761 , - 974 , - 2531 , - 2568 , - 1085 , - 2946 , - 3287 , - 2108 , - 4273 , - 54 , - 4043 , - 1648 , - 2597 , - 2026 , - 4799 , - 1188 , - 921 , - 3998 , - 691 , - 728 , - 4109 , - 1106 , - 1447 , - 268 , - 2433 , - 3078 , - 2203 , - 4672 , - 757 , - 186 , - 2959 , - 4212 , - 3945 , - 2158 , - 3715 , - 3752 , - 2269 , - 4130 , - 4471 , - 3292 , - 593 , - 1238 , - 363 , - 2832 , - 3781 , - 3210 , - 1119 , - 2372 , - 2105 , - 318 , - 1875 , - 1912 , - 429 , - 2290 , - 2631 , - 1452 , - 3617 , - 4262 , - 3387 , - 992 , - 1941 , - 1370 , - 4143 , - 532 , - 265 , - 3342 , - 35 , - 72 , - 3453 , - 450 , - 791 , - 4476 , - 1777 , - 2422 , - 1547 , - 4016 , - 101 , - 4394 , - 2303 , - 3556 , - 3289 , - 1502 , - 3059 , - 3096 , - 1613 , - 3474 , - 3815 , - 2636 , - 4801 , - 582 , - 4571 , - 2176 , - 3125 , - 2554 , - 463 , - 1716 , - 1449 , - 4526 , - 1219 , - 1256 , - 4637 , - 1634 , - 1975 , - 796 , - 2961 , - 3606 , - 2731 , - 336 , - 1285 , - 714 , - 3487 , - 4740 , - 4473 , - 2686 , - 4243 , - 4280 , - 2797 , - 4658 , - 135 , - 3820 , - 1121 , - 1766 , - 891 , - 3360 , - 4309 , - 3738 , - 1647 , - 2900 , - 2633 , - 846 , - 2403 , - 2440 , - 957 , - 2818 , - 3159 , - 1980 , - 4145 , - 4790 , - 3915 , - 1520 , - 2469 , - 1898 , - 4671 , - 1060 , - 793 , - 3870 , - 563 , - 600 , - 3981 , - 978 , - 1319 , - 140 , - 2305 , - 2950 , - 2075 , - 4544 , - 629 , - 58 , - 2831 , - 4084 , - 3817 , - 2030 , - 3587 , - 3624 , - 2141 , - 4002 , - 4343 , - 3164 , - 465 , - 1110 , - 235 , - 2704 , - 3653 , - 3082 , - 991 , - 2244 , - 1977 , - 190 , - 1747 , - 1784 , - 301 , - 2162 , - 2503 , - 1324 , - 3489 , - 4134 , - 3259 , - 864 , - 1813 , - 1242 , - 4015 , - 404 , - 137 , - 3214 , - 4771 , - 4808 , - 3325 , - 322 , - 663 , - 4348 , - 1649 , - 2294 , - 1419 , - 3888 , - 4837 , - 4266 , - 2175 , - 3428 , - 3161 , - 1374 , - 2931 , - 2968 , - 1485 , - 3346 , - 3687 , - 2508 , - 4673 , - 454 , - 4443 , - 2048 , - 2997 , - 2426 , - 335 , - 1588 , - 1321 , - 4398 , - 1091 , - 1128 , - 4509 , - 1506 , - 1847 , - 668 , - 2833 , - 3478 , - 2603 , - 208 , - 1157 , - 586 , - 3359 , - 4612 , - 4345 , - 2558 , - 4115 , - 4152 , - 2669 , - 4530 , - 7 , - 3692 , - 993 , - 1638 , - 763 , - 3232 , - 4181 , - 3610 , - 1519 , - 2772 , - 2505 , - 718 , - 2275 , - 2312 , - 829 , - 2690 , - 3031 , - 1852 , - 4017 , - 4662 , - 3787 , - 1392 , - 2341 , - 1770 , - 4543 , - 932 , - 665 , - 3742 , - 435 , - 472 , - 3853 , - 850 , - 1191 , - 12 , - 2177 , - 2822 , - 1947 , - 4416 , - 501 , - 4794 , - 2703 , - 3956 , - 3689 , - 1902 , - 3459 , - 3496 , - 2013 , - 3874 , - 4215 , - 3036 , - 337 , - 982 , - 107 , - 2576 , - 3525 , - 2954 , - 863 , - 2116 , - 1849 , - 62 , - 1619 , - 1656 , - 173 , - 2034 , - 2375 , - 1196 , - 3361 , - 4006 , - 3131 , - 736 , - 1685 , - 1114 , - 3887 , - 276 , - 9 , - 3086 , - 4643 , - 4680 , - 3197 , - 194 , - 535 , - 4220 , - 1521 , - 2166 , - 1291 , - 3760 , - 4709 , - 4138 , - 2047 , - 3300 , - 3033 , - 1246 , - 2803 , - 2840 , - 1357 , - 3218 , - 3559 , - 2380 , - 4545 , - 326 , - 4315 , - 1920 , - 2869 , - 2298 , - 207 , - 1460 , - 1193 , - 4270 , - 963 , - 1000 , - 4381 , - 1378 , - 1719 , - 540 , - 2705 , - 3350 , - 2475 , - 80 , - 1029 , - 458 , - 3231 , - 4484 , - 4217 , - 2430 , - 3987 , - 4024 , - 2541 , - 4402 , - 4743 , - 3564 , - 865 , - 1510 , - 635 , - 3104 , - 4053 , - 3482 , - 1391 , - 2644 , - 2377 , - 590 , - 2147 , - 2184 , - 701 , - 2562 , - 2903 , - 1724 , - 3889 , - 4534 , - 3659 , - 1264 , - 2213 , - 1642 , - 4415 , - 804 , - 537 , - 3614 , - 307 , - 344 , - 3725 , - 722 , - 1063 , - 4748 , - 2049 , - 2694 , - 1819 , - 4288 , - 373 , - 4666 , - 2575 , - 3828 , - 3561 , - 1774 , - 3331 , - 3368 , - 1885 , - 3746 , - 4087 , - 2908 , - 209 , - 854 , - 4843 , - 2448 , - 3397 , - 2826 , - 735 , - 1988 , - 1721 , - 4798 , - 1491 , - 1528 , - 45 , - 1906 , - 2247 , - 1068 , - 3233 , - 3878 , - 3003 , - 608 , - 1557 , - 986 , - 3759 , - 148 , - 4745 , - 2958 , - 4515 , - 4552 , - 3069 , - 66 , - 407 , - 4092 , - 1393 , - 2038 , - 1163 , - 3632 , - 4581 , - 4010 , - 1919 , - 3172 , - 2905 , - 1118 , - 2675 , - 2712 , - 1229 , - 3090 , - 3431 , - 2252 , - 4417 , - 198 , - 4187 , - 1792 , - 2741 , - 2170 , - 79 , - 1332 , - 1065 , - 4142 , - 835 , - 872 , - 4253 , - 1250 , - 1591 , - 412 , - 2577 , - 3222 , - 2347 , - 4816 , - 901 , - 330 , - 3103 , - 4356 , - 4089 , - 2302 , - 3859 , - 3896 , - 2413 , - 4274 , - 4615 , - 3436 , - 737 , - 1382 , - 507 , - 2976 , - 3925 , - 3354 , - 1263 , - 2516 , - 2249 , - 462 , - 2019 , - 2056 , - 573 , - 2434 , - 2775 , - 1596 , - 3761 , - 4406 , - 3531 , - 1136 , - 2085 , - 1514 , - 4287 , - 676 , - 409 , - 3486 , - 179 , - 216 , - 3597 , - 594 , - 935 , - 4620 , - 1921 , - 2566 , - 1691 , - 4160 , - 245 , - 4538 , - 2447 , - 3700 , - 3433 , - 1646 , - 3203 , - 3240 , - 1757 , - 3618 , - 3959 , - 2780 , - 81 , - 726 , - 4715 , - 2320 , - 3269 , - 2698 , - 607 , - 1860 , - 1593 , - 4670 , - 1363 , - 1400 , - 4781 , - 1778 , - 2119 , - 940 , - 3105 , - 3750 , - 2875 , - 480 , - 1429 , - 858 , - 3631 , - 20 , - 4617 , - 2830 , - 4387 , - 4424 , - 2941 , - 4802 , - 279 , - 3964 , - 1265 , - 1910 , - 1035 , - 3504 , - 4453 , - 3882 , - 1791 , - 3044 , - 2777 , - 990 , - 2547 , - 2584 , - 1101 , - 2962 , - 3303 , - 2124 , - 4289 , - 70 , - 4059 , - 1664 , - 2613 , - 2042 , - 4815 , - 1204 , - 937 , - 4014 , - 707 , - 744 , - 4125 , - 1122 , - 1463 , - 284 , - 2449 , - 3094 , - 2219 , - 4688 , - 773 , - 202 , - 2975 , - 4228 , - 3961 , - 2174 , - 3731 , - 3768 , - 2285 , - 4146 , - 4487 , - 3308 , - 609 , - 1254 , - 379 , - 2848 , - 3797 , - 3226 , - 1135 , - 2388 , - 2121 , - 334 , - 1891 , - 1928 , - 445 , - 2306 , - 2647 , - 1468 , - 3633 , - 4278 , - 3403 , - 1008 , - 1957 , - 1386 , - 4159 , - 548 , - 281 , - 3358 , - 51 , - 88 , - 3469 , - 466 , - 807 , - 4492 , - 1793 , - 2438 , - 1563 , - 4032 , - 117 , - 4410 , - 2319 , - 3572 , - 3305 , - 1518 , - 3075 , - 3112 , - 1629 , - 3490 , - 3831 , - 2652 , - 4817 , - 598 , - 4587 , - 2192 , - 3141 , - 2570 , - 479 , - 1732 , - 1465 , - 4542 , - 1235 , - 1272 , - 4653 , - 1650 , - 1991 , - 812 , - 2977 , - 3622 , - 2747 , - 352 , - 1301 , - 730 , - 3503 , - 4756 , - 4489 , - 2702 , - 4259 , - 4296 , - 2813 , - 4674 , - 151 , - 3836 , - 1137 , - 1782 , - 907 , - 3376 , - 4325 , - 3754 , - 1663 , - 2916 , - 2649 , - 862 , - 2419 , - 2456 , - 973 , - 2834 , - 3175 , - 1996 , - 4161 , - 4806 , - 3931 , - 1536 , - 2485 , - 1914 , - 4687 , - 1076 , - 809 , - 3886 , - 579 , - 616 , - 3997 , - 994 , - 1335 , - 156 , - 2321 , - 2966 , - 2091 , - 4560 , - 645 , - 74 , - 2847 , - 4100 , - 3833 , - 2046 , - 3603 , - 3640 , - 2157 , - 4018 , - 4359 , - 3180 , - 481 , - 1126 , - 251 , - 2720 , - 3669 , - 3098 , - 1007 , - 2260 , - 1993 , - 206 , - 1763 , - 1800 , - 317 , - 2178 , - 2519 , - 1340 , - 3505 , - 4150 , - 3275 , - 880 , - 1829 , - 1258 , - 4031 , - 420 , - 153 , - 3230 , - 4787 , - 4824 , - 3341 , - 338 , - 679 , - 4364 , - 1665 , - 2310 , - 1435 , - 3904 , - 4853 , - 4282 , - 2191 , - 3444 , - 3177 , - 1390 , - 2947 , - 2984 , - 1501 , - 3362 , - 3703 , - 2524 , - 4689 , - 470 , - 4459 , - 2064 , - 3013 , - 2442 , - 351 , - 1604 , - 1337 , - 4414 , - 1107 , - 1144 , - 4525 , - 1522 , - 1863 , - 684 , - 2849 , - 3494 , - 2619 , - 224 , - 1173 , - 602 , - 3375 , - 4628 , - 4361 , - 2574 , - 4131 , - 4168 , - 2685 , - 4546 , - 23 , - 3708 , - 1009 , - 1654 , - 779 , - 3248 , - 4197 , - 3626 , - 1535 , - 2788 , - 2521 , - 734 , - 2291 , - 2328 , - 845 , - 2706 , - 3047 , - 1868 , - 4033 , - 4678 , - 3803 , - 1408 , - 2357 , - 1786 , - 4559 , - 948 , - 681 , - 3758 , - 451 , - 488 , - 3869 , - 866 , - 1207 , - 28 , - 2193 , - 2838 , - 1963 , - 4432 , - 517 , - 4810 , - 2719 , - 3972 , - 3705 , - 1918 , - 3475 , - 3512 , - 2029 , - 3890 , - 4231 , - 3052 , - 353 , - 998 , - 123 , - 2592 , - 3541 , - 2970 , - 879 , - 2132 , - 1865 , - 78 , - 1635 , - 1672 , - 189 , - 2050 , - 2391 , - 1212 , - 3377 , - 4022 , - 3147 , - 752 , - 1701 , - 1130 , - 3903 , - 292 , - 25 , - 3102 , - 4659 , - 4696 , - 3213 , - 210 , - 551 , - 4236 , - 1537 , - 2182 , - 1307 , - 3776 , - 4725 , - 4154 , - 2063 , - 3316 , - 3049 , - 1262 , - 2819 , - 2856 , - 1373 , - 3234 , - 3575 , - 2396 , - 4561 , - 342 , - 4331 , - 1936 , - 2885 , - 2314 , - 223 , - 1476 , - 1209 , - 4286 , - 979 , - 1016 , - 4397 , - 1394 , - 1735 , - 556 , - 2721 , - 3366 , - 2491 , - 96 , - 1045 , - 474 , - 3247 , - 4500 , - 4233 , - 2446 , - 4003 , - 4040 , - 2557 , - 4418 , - 4759 , - 3580 , - 881 , - 1526 , - 651 , - 3120 , - 4069 , - 3498 , - 1407 , - 2660 , - 2393 , - 606 , - 2163 , - 2200 , - 717 , - 2578 , - 2919 , - 1740 , - 3905 , - 4550 , - 3675 , - 1280 , - 2229 , - 1658 , - 4431 , - 820 , - 553 , - 3630 , - 323 , - 360 , - 3741 , - 738 , - 1079 , - 4764 , - 2065 , - 2710 , - 1835 , - 4304 , - 389 , - 4682 , - 2591 , - 3844 , - 3577 , - 1790 , - 3347 , - 3384 , - 1901 , - 3762 , - 4103 , - 2924 , - 225 , - 870 , - 4859 , - 2464 , - 3413 , - 2842 , - 751 , - 2004 , - 1737 , - 4814 , - 1507 , - 1544 , - 61 , - 1922 , - 2263 , - 1084 , - 3249 , - 3894 , - 3019 , - 624 , - 1573 , - 1002 , - 3775 , - 164 , - 4761 , - 2974 , - 4531 , - 4568 , - 3085 , - 82 , - 423 , - 4108 , - 1409 , - 2054 , - 1179 , - 3648 , - 4597 , - 4026 , - 1935 , - 3188 , - 2921 , - 1134 , - 2691 , - 2728 , - 1245 , - 3106 , - 3447 , - 2268 , - 4433 , - 214 , - 4203 , - 1808 , - 2757 , - 2186 , - 95 , - 1348 , - 1081 , - 4158 , - 851 , - 888 , - 4269 , - 1266 , - 1607 , - 428 , - 2593 , - 3238 , - 2363 , - 4832 , - 917 , - 346 , - 3119 , - 4372 , - 4105 , - 2318 , - 3875 , - 3912 , - 2429 , - 4290 , - 4631 , - 3452 , - 753 , - 1398 , - 523 , - 2992 , - 3941 , - 3370 , - 1279 , - 2532 , - 2265 , - 478 , - 2035 , - 2072 , - 589 , - 2450 , - 2791 , - 1612 , - 3777 , - 4422 , - 3547 , - 1152 , - 2101 , - 1530 , - 4303 , - 692 , - 425 , - 3502 , - 195 , - 232 , - 3613 , - 610 , - 951 , - 4636 , - 1937 , - 2582 , - 1707 , - 4176 , - 261 , - 4554 , - 2463 , - 3716 , - 3449 , - 1662 , - 3219 , - 3256 , - 1773 , - 3634 , - 3975 , - 2796 , - 97 , - 742 , - 4731 , - 2336 , - 3285 , - 2714 , - 623 , - 1876 , - 1609 , - 4686 , - 1379 , - 1416 , - 4797 , - 1794 , - 2135 , - 956 , - 3121 , - 3766 , - 2891 , - 496 , - 1445 , - 874 , - 3647 , - 36 , - 4633 , - 2846 , - 4403 , - 4440 , - 2957 , - 4818 , - 295 , - 3980 , - 1281 , - 1926 , - 1051 , - 3520 , - 4469 , - 3898 , - 1807 , - 3060 , - 2793 , - 1006 , - 2563 , - 2600 , - 1117 , - 2978 , - 3319 , - 2140 , - 4305 , - 86 , - 4075 , - 1680 , - 2629 , - 2058 , - 4831 , - 1220 , - 953 , - 4030 , - 723 , - 760 , - 4141 , - 1138 , - 1479 , - 300 , - 2465 , - 3110 , - 2235 , - 4704 , - 789 , - 218 , - 2991 , - 4244 , - 3977 , - 2190 , - 3747 , - 3784 , - 2301 , - 4162 , - 4503 , - 3324 , - 625 , - 1270 , - 395 , - 2864 , - 3813 , - 3242 , - 1151 , - 2404 , - 2137 , - 350 , - 1907 , - 1944 , - 461 , - 2322 , - 2663 , - 1484 , - 3649 , - 4294 , - 3419 , - 1024 , - 1973 , - 1402 , - 4175 , - 564 , - 297 , - 3374 , - 67 , - 104 , - 3485 , - 482 , - 823 , - 4508 , - 1809 , - 2454 , - 1579 , - 4048 , - 133 , - 4426 , - 2335 , - 3588 , - 3321 , - 1534 , - 3091 , - 3128 , - 1645 , - 3506 , - 3847 , - 2668 , - 4833 , - 614 , - 4603 , - 2208 , - 3157 , - 2586 , - 495 , - 1748 , - 1481 , - 4558 , - 1251 , - 1288 , - 4669 , - 1666 , - 2007 , - 828 , - 2993 , - 3638 , - 2763 , - 368 , - 1317 , - 746 , - 3519 , - 4772 , - 4505 , - 2718 , - 4275 , - 4312 , - 2829 , - 4690 , - 167 , - 3852 , - 1153 , - 1798 , - 923 , - 3392 , - 4341 , - 3770 , - 1679 , - 2932 , - 2665 , - 878 , - 2435 , - 2472 , - 989 , - 2850 , - 3191 , - 2012 , - 4177 , - 4822 , - 3947 , - 1552 , - 2501 , - 1930 , - 4703 , - 1092 , - 825 , - 3902 , - 595 , - 632 , - 4013 , - 1010 , - 1351 , - 172 , - 2337 , - 2982 , - 2107 , - 4576 , - 661 , - 90 , - 2863 , - 4116 , - 3849 , - 2062 , - 3619 , - 3656 , - 2173 , - 4034 , - 4375 , - 3196 , - 497 , - 1142 , - 267 , - 2736 , - 3685 , - 3114 , - 1023 , - 2276 , - 2009 , - 222 , - 1779 , - 1816 , - 333 , - 2194 , - 2535 , - 1356 , - 3521 , - 4166 , - 3291 , - 896 , - 1845 , - 1274 , - 4047 , - 436 , - 169 , - 3246 , - 4803 , - 4840 , - 3357 , - 354 , - 695 , - 4380 , - 1681 , - 2326 , - 1451 , - 3920 , - 5 , - 4298 , - 2207 , - 3460 , - 3193 , - 1406 , - 2963 , - 3000 , - 1517 , - 3378 , - 3719 , - 2540 , - 4705 , - 486 , - 4475 , - 2080 , - 3029 , - 2458 , - 367 , - 1620 , - 1353 , - 4430 , - 1123 , - 1160 , - 4541 , - 1538 , - 1879 , - 700 , - 2865 , - 3510 , - 2635 , - 240 , - 1189 , - 618 , - 3391 , - 4644 , - 4377 , - 2590 , - 4147 , - 4184 , - 2701 , - 4562 , - 39 , - 3724 , - 1025 , - 1670 , - 795 , - 3264 , - 4213 , - 3642 , - 1551 , - 2804 , - 2537 , - 750 , - 2307 , - 2344 , - 861 , - 2722 , - 3063 , - 1884 , - 4049 , - 4694 , - 3819 , - 1424 , - 2373 , - 1802 , - 4575 , - 964 , - 697 , - 3774 , - 467 , - 504 , - 3885 , - 882 , - 1223 , - 44 , - 2209 , - 2854 , - 1979 , - 4448 , - 533 , - 4826 , - 2735 , - 3988 , - 3721 , - 1934 , - 3491 , - 3528 , - 2045 , - 3906 , - 4247 , - 3068 , - 369 , - 1014 , - 139 , - 2608 , - 3557 , - 2986 , - 895 , - 2148 , - 1881 , - 94 , - 1651 , - 1688 , - 205 , - 2066 , - 2407 , - 1228 , - 3393 , - 4038 , - 3163 , - 768 , - 1717 , - 1146 , - 3919 , - 308 , - 41 , - 3118 , - 4675 , - 4712 , - 3229 , - 226 , - 567 , - 4252 , - 1553 , - 2198 , - 1323 , - 3792 , - 4741 , - 4170 , - 2079 , - 3332 , - 3065 , - 1278 , - 2835 , - 2872 , - 1389 , - 3250 , - 3591 , - 2412 , - 4577 , - 358 , - 4347 , - 1952 , - 2901 , - 2330 , - 239 , - 1492 , - 1225 , - 4302 , - 995 , - 1032 , - 4413 , - 1410 , - 1751 , - 572 , - 2737 , - 3382 , - 2507 , - 112 , - 1061 , - 490 , - 3263 , - 4516 , - 4249 , - 2462 , - 4019 , - 4056 , - 2573 , - 4434 , - 4775 , - 3596 , - 897 , - 1542 , - 667 , - 3136 , - 4085 , - 3514 , - 1423 , - 2676 , - 2409 , - 622 , - 2179 , - 2216 , - 733 , - 2594 , - 2935 , - 1756 , - 3921 , - 4566 , - 3691 , - 1296 , - 2245 , - 1674 , - 4447 , - 836 , - 569 , - 3646 , - 339 , - 376 , - 3757 , - 754 , - 1095 , - 4780 , - 2081 , - 2726 , - 1851 , - 4320 , - 405 , - 4698 , - 2607 , - 3860 , - 3593 , - 1806 , - 3363 , - 3400 , - 1917 , - 3778 , - 4119 , - 2940 , - 241 , - 886 , - 11 , - 2480 , - 3429 , - 2858 , - 767 , - 2020 , - 1753 , - 4830 , - 1523 , - 1560 , - 77 , - 1938 , - 2279 , - 1100 , - 3265 , - 3910 , - 3035 , - 640 , - 1589 , - 1018 , - 3791 , - 180 , - 4777 , - 2990 , - 4547 , - 4584 , - 3101 , - 98 , - 439 , - 4124 , - 1425 , - 2070 , - 1195 , - 3664 , - 4613 , - 4042 , - 1951 , - 3204 , - 2937 , - 1150 , - 2707 , - 2744 , - 1261 , - 3122 , - 3463 , - 2284 , - 4449 , - 230 , - 4219 , - 1824 , - 2773 , - 2202 , - 111 , - 1364 , - 1097 , - 4174 , - 867 , - 904 , - 4285 , - 1282 , - 1623 , - 444 , - 2609 , - 3254 , - 2379 , - 4848 , - 933 , - 362 , - 3135 , - 4388 , - 4121 , - 2334 , - 3891 , - 3928 , - 2445 , - 4306 , - 4647 , - 3468 , - 769 , - 1414 , - 539 , - 3008 , - 3957 , - 3386 , - 1295 , - 2548 , - 2281 , - 494 , - 2051 , - 2088 , - 605 , - 2466 , - 2807 , - 1628 , - 3793 , - 4438 , - 3563 , - 1168 , - 2117 , - 1546 , - 4319 , - 708 , - 441 , - 3518 , - 211 , - 248 , - 3629 , - 626 , - 967 , - 4652 , - 1953 , - 2598 , - 1723 , - 4192 , - 277 , - 4570 , - 2479 , - 3732 , - 3465 , - 1678 , - 3235 , - 3272 , - 1789 , - 3650 , - 3991 , - 2812 , - 113 , - 758 , - 4747 , - 2352 , - 3301 , - 2730 , - 639 , - 1892 , - 1625 , - 4702 , - 1395 , - 1432 , - 4813 , - 1810 , - 2151 , - 972 , - 3137 , - 3782 , - 2907 , - 512 , - 1461 , - 890 , - 3663 , - 52 , - 4649 , - 2862 , - 4419 , - 4456 , - 2973 , - 4834 , - 311 , - 3996 , - 1297 , - 1942 , - 1067 , - 3536 , - 4485 , - 3914 , - 1823 , - 3076 , - 2809 , - 1022 , - 2579 , - 2616 , - 1133 , - 2994 , - 3335 , - 2156 , - 4321 , - 102 , - 4091 , - 1696 , - 2645 , - 2074 , - 4847 , - 1236 , - 969 , - 4046 , - 739 , - 776 , - 4157 , - 1154 , - 1495 , - 316 , - 2481 , - 3126 , - 2251 , - 4720 , - 805 , - 234 , - 3007 , - 4260 , - 3993 , - 2206 , - 3763 , - 3800 , - 2317 , - 4178 , - 4519 , - 3340 , - 641 , - 1286 , - 411 , - 2880 , - 3829 , - 3258 , - 1167 , - 2420 , - 2153 , - 366 , - 1923 , - 1960 , - 477 , - 2338 , - 2679 , - 1500 , - 3665 , - 4310 , - 3435 , - 1040 , - 1989 , - 1418 , - 4191 , - 580 , - 313 , - 3390 , - 83 , - 120 , - 3501 , - 498 , - 839 , - 4524 , - 1825 , - 2470 , - 1595 , - 4064 , - 149 , - 4442 , - 2351 , - 3604 , - 3337 , - 1550 , - 3107 , - 3144 , - 1661 , - 3522 , - 3863 , - 2684 , - 4849 , - 630 , - 4619 , - 2224 , - 3173 , - 2602 , - 511 , - 1764 , - 1497 , - 4574 , - 1267 , - 1304 , - 4685 , - 1682 , - 2023 , - 844 , - 3009 , - 3654 , - 2779 , - 384 , - 1333 , - 762 , - 3535 , - 4788 , - 4521 , - 2734 , - 4291 , - 4328 , - 2845 , - 4706 , - 183 , - 3868 , - 1169 , - 1814 , - 939 , - 3408 , - 4357 , - 3786 , - 1695 , - 2948 , - 2681 , - 894 , - 2451 , - 2488 , - 1005 , - 2866 , - 3207 , - 2028 , - 4193 , - 4838 , - 3963 , - 1568 , - 2517 , - 1946 , - 4719 , - 1108 , - 841 , - 3918 , - 611 , - 648 , - 4029 , - 1026 , - 1367 , - 188 , - 2353 , - 2998 , - 2123 , - 4592 , - 677 , - 106 , - 2879 , - 4132 , - 3865 , - 2078 , - 3635 , - 3672 , - 2189 , - 4050 , - 4391 , - 3212 , - 513 , - 1158 , - 283 , - 2752 , - 3701 , - 3130 , - 1039 , - 2292 , - 2025 , - 238 , - 1795 , - 1832 , - 349 , - 2210 , - 2551 , - 1372 , - 3537 , - 4182 , - 3307 , - 912 , - 1861 , - 1290 , - 4063 , - 452 , - 185 , - 3262 , - 4819 , - 4856 , - 3373 , - 370 , - 711 , - 4396 , - 1697 , - 2342 , - 1467 , - 3936 , - 21 , - 4314 , - 2223 , - 3476 , - 3209 , - 1422 , - 2979 , - 3016 , - 1533 , - 3394 , - 3735 , - 2556 , - 4721 , - 502 , - 4491 , - 2096 , - 3045 , - 2474 , - 383 , - 1636 , - 1369 , - 4446 , - 1139 , - 1176 , - 4557 , - 1554 , - 1895 , - 716 , - 2881 , - 3526 , - 2651 , - 256 , - 1205 , - 634 , - 3407 , - 4660 , - 4393 , - 2606 , - 4163 , - 4200 , - 2717 , - 4578 , - 55 , - 3740 , - 1041 , - 1686 , - 811 , - 3280 , - 4229 , - 3658 , - 1567 , - 2820 , - 2553 , - 766 , - 2323 , - 2360 , - 877 , - 2738 , - 3079 , - 1900 , - 4065 , - 4710 , - 3835 , - 1440 , - 2389 , - 1818 , - 4591 , - 980 , - 713 , - 3790 , - 483 , - 520 , - 3901 , - 898 , - 1239 , - 60 , - 2225 , - 2870 , - 1995 , - 4464 , - 549 , - 4842 , - 2751 , - 4004 , - 3737 , - 1950 , - 3507 , - 3544 , - 2061 , - 3922 , - 4263 , - 3084 , - 385 , - 1030 , - 155 , - 2624 , - 3573 , - 3002 , - 911 , - 2164 , - 1897 , - 110 , - 1667 , - 1704 , - 221 , - 2082 , - 2423 , - 1244 , - 3409 , - 4054 , - 3179 , - 784 , - 1733 , - 1162 , - 3935 , - 324 , - 57 , - 3134 , - 4691 , - 4728 , - 3245 , - 242 , - 583 , - 4268 , - 1569 , - 2214 , - 1339 , - 3808 , - 4757 , - 4186 , - 2095 , - 3348 , - 3081 , - 1294 , - 2851 , - 2888 , - 1405 , - 3266 , - 3607 , - 2428 , - 4593 , - 374 , - 4363 , - 1968 , - 2917 , - 2346 , - 255 , - 1508 , - 1241 , - 4318 , - 1011 , - 1048 , - 4429 , - 1426 , - 1767 , - 588 , - 2753 , - 3398 , - 2523 , - 128 , - 1077 , - 506 , - 3279 , - 4532 , - 4265 , - 2478 , - 4035 , - 4072 , - 2589 , - 4450 , - 4791 , - 3612 , - 913 , - 1558 , - 683 , - 3152 , - 4101 , - 3530 , - 1439 , - 2692 , - 2425 , - 638 , - 2195 , - 2232 , - 749 , - 2610 , - 2951 , - 1772 , - 3937 , - 4582 , - 3707 , - 1312 , - 2261 , - 1690 , - 4463 , - 852 , - 585 , - 3662 , - 355 , - 392 , - 3773 , - 770 , - 1111 , - 4796 , - 2097 , - 2742 , - 1867 , - 4336 , - 421 , - 4714 , - 2623 , - 3876 , - 3609 , - 1822 , - 3379 , - 3416 , - 1933 , - 3794 , - 4135 , - 2956 , - 257 , - 902 , - 27 , - 2496 , - 3445 , - 2874 , - 783 , - 2036 , - 1769 , - 4846 , - 1539 , - 1576 , - 93 , - 1954 , - 2295 , - 1116 , - 3281 , - 3926 , - 3051 , - 656 , - 1605 , - 1034 , - 3807 , - 196 , - 4793 , - 3006 , - 4563 , - 4600 , - 3117 , - 114 , - 455 , - 4140 , - 1441 , - 2086 , - 1211 , - 3680 , - 4629 , - 4058 , - 1967 , - 3220 , - 2953 , - 1166 , - 2723 , - 2760 , - 1277 , - 3138 , - 3479 , - 2300 , - 4465 , - 246 , - 4235 , - 1840 , - 2789 , - 2218 , - 127 , - 1380 , - 1113 , - 4190 , - 883 , - 920 , - 4301 , - 1298 , - 1639 , - 460 , - 2625 , - 3270 , - 2395 , - 0 , - 3621 , - 3238 , - 2547 , - 316 , - 241 , - 1090 , - 1631 , - 632 , - 1789 , - 3870 , - 715 , - 948 , - 3337 , - 1722 , - 4727 , - 1264 , - 4885 , - 4502 , - 3811 , - 1580 , - 1505 , - 2354 , - 2895 , - 1896 , - 3053 , - 206 , - 1979 , - 2212 , - 4601 , - 2986 , - 1063 , - 2528 , - 1221 , - 838 , - 147 , - 2844 , - 2769 , - 3618 , - 4159 , - 3160 , - 4317 , - 1470 , - 3243 , - 3476 , - 937 , - 4250 , - 2327 , - 3792 , - 2485 , - 2102 , - 1411 , - 4108 , - 4033 , - 4882 , - 495 , - 4424 , - 653 , - 2734 , - 4507 , - 4740 , - 2201 , - 586 , - 3591 , - 128 , - 3749 , - 3366 , - 2675 , - 444 , - 369 , - 1218 , - 1759 , - 760 , - 1917 , - 3998 , - 843 , - 1076 , - 3465 , - 1850 , - 4855 , - 1392 , - 85 , - 4630 , - 3939 , - 1708 , - 1633 , - 2482 , - 3023 , - 2024 , - 3181 , - 334 , - 2107 , - 2340 , - 4729 , - 3114 , - 1191 , - 2656 , - 1349 , - 966 , - 275 , - 2972 , - 2897 , - 3746 , - 4287 , - 3288 , - 4445 , - 1598 , - 3371 , - 3604 , - 1065 , - 4378 , - 2455 , - 3920 , - 2613 , - 2230 , - 1539 , - 4236 , - 4161 , - 82 , - 623 , - 4552 , - 781 , - 2862 , - 4635 , - 4868 , - 2329 , - 714 , - 3719 , - 256 , - 3877 , - 3494 , - 2803 , - 572 , - 497 , - 1346 , - 1887 , - 888 , - 2045 , - 4126 , - 971 , - 1204 , - 3593 , - 1978 , - 55 , - 1520 , - 213 , - 4758 , - 4067 , - 1836 , - 1761 , - 2610 , - 3151 , - 2152 , - 3309 , - 462 , - 2235 , - 2468 , - 4857 , - 3242 , - 1319 , - 2784 , - 1477 , - 1094 , - 403 , - 3100 , - 3025 , - 3874 , - 4415 , - 3416 , - 4573 , - 1726 , - 3499 , - 3732 , - 1193 , - 4506 , - 2583 , - 4048 , - 2741 , - 2358 , - 1667 , - 4364 , - 4289 , - 210 , - 751 , - 4680 , - 909 , - 2990 , - 4763 , - 68 , - 2457 , - 842 , - 3847 , - 384 , - 4005 , - 3622 , - 2931 , - 700 , - 625 , - 1474 , - 2015 , - 1016 , - 2173 , - 4254 , - 1099 , - 1332 , - 3721 , - 2106 , - 183 , - 1648 , - 341 , - 4886 , - 4195 , - 1964 , - 1889 , - 2738 , - 3279 , - 2280 , - 3437 , - 590 , - 2363 , - 2596 , - 57 , - 3370 , - 1447 , - 2912 , - 1605 , - 1222 , - 531 , - 3228 , - 3153 , - 4002 , - 4543 , - 3544 , - 4701 , - 1854 , - 3627 , - 3860 , - 1321 , - 4634 , - 2711 , - 4176 , - 2869 , - 2486 , - 1795 , - 4492 , - 4417 , - 338 , - 879 , - 4808 , - 1037 , - 3118 , - 4891 , - 196 , - 2585 , - 970 , - 3975 , - 512 , - 4133 , - 3750 , - 3059 , - 828 , - 753 , - 1602 , - 2143 , - 1144 , - 2301 , - 4382 , - 1227 , - 1460 , - 3849 , - 2234 , - 311 , - 1776 , - 469 , - 86 , - 4323 , - 2092 , - 2017 , - 2866 , - 3407 , - 2408 , - 3565 , - 718 , - 2491 , - 2724 , - 185 , - 3498 , - 1575 , - 3040 , - 1733 , - 1350 , - 659 , - 3356 , - 3281 , - 4130 , - 4671 , - 3672 , - 4829 , - 1982 , - 3755 , - 3988 , - 1449 , - 4762 , - 2839 , - 4304 , - 2997 , - 2614 , - 1923 , - 4620 , - 4545 , - 466 , - 1007 , - 8 , - 1165 , - 3246 , - 91 , - 324 , - 2713 , - 1098 , - 4103 , - 640 , - 4261 , - 3878 , - 3187 , - 956 , - 881 , - 1730 , - 2271 , - 1272 , - 2429 , - 4510 , - 1355 , - 1588 , - 3977 , - 2362 , - 439 , - 1904 , - 597 , - 214 , - 4451 , - 2220 , - 2145 , - 2994 , - 3535 , - 2536 , - 3693 , - 846 , - 2619 , - 2852 , - 313 , - 3626 , - 1703 , - 3168 , - 1861 , - 1478 , - 787 , - 3484 , - 3409 , - 4258 , - 4799 , - 3800 , - 29 , - 2110 , - 3883 , - 4116 , - 1577 , - 4890 , - 2967 , - 4432 , - 3125 , - 2742 , - 2051 , - 4748 , - 4673 , - 594 , - 1135 , - 136 , - 1293 , - 3374 , - 219 , - 452 , - 2841 , - 1226 , - 4231 , - 768 , - 4389 , - 4006 , - 3315 , - 1084 , - 1009 , - 1858 , - 2399 , - 1400 , - 2557 , - 4638 , - 1483 , - 1716 , - 4105 , - 2490 , - 567 , - 2032 , - 725 , - 342 , - 4579 , - 2348 , - 2273 , - 3122 , - 3663 , - 2664 , - 3821 , - 974 , - 2747 , - 2980 , - 441 , - 3754 , - 1831 , - 3296 , - 1989 , - 1606 , - 915 , - 3612 , - 3537 , - 4386 , - 4927 , - 3928 , - 157 , - 2238 , - 4011 , - 4244 , - 1705 , - 90 , - 3095 , - 4560 , - 3253 , - 2870 , - 2179 , - 4876 , - 4801 , - 722 , - 1263 , - 264 , - 1421 , - 3502 , - 347 , - 580 , - 2969 , - 1354 , - 4359 , - 896 , - 4517 , - 4134 , - 3443 , - 1212 , - 1137 , - 1986 , - 2527 , - 1528 , - 2685 , - 4766 , - 1611 , - 1844 , - 4233 , - 2618 , - 695 , - 2160 , - 853 , - 470 , - 4707 , - 2476 , - 2401 , - 3250 , - 3791 , - 2792 , - 3949 , - 1102 , - 2875 , - 3108 , - 569 , - 3882 , - 1959 , - 3424 , - 2117 , - 1734 , - 1043 , - 3740 , - 3665 , - 4514 , - 127 , - 4056 , - 285 , - 2366 , - 4139 , - 4372 , - 1833 , - 218 , - 3223 , - 4688 , - 3381 , - 2998 , - 2307 , - 76 , - 1 , - 850 , - 1391 , - 392 , - 1549 , - 3630 , - 475 , - 708 , - 3097 , - 1482 , - 4487 , - 1024 , - 4645 , - 4262 , - 3571 , - 1340 , - 1265 , - 2114 , - 2655 , - 1656 , - 2813 , - 4894 , - 1739 , - 1972 , - 4361 , - 2746 , - 823 , - 2288 , - 981 , - 598 , - 4835 , - 2604 , - 2529 , - 3378 , - 3919 , - 2920 , - 4077 , - 1230 , - 3003 , - 3236 , - 697 , - 4010 , - 2087 , - 3552 , - 2245 , - 1862 , - 1171 , - 3868 , - 3793 , - 4642 , - 255 , - 4184 , - 413 , - 2494 , - 4267 , - 4500 , - 1961 , - 346 , - 3351 , - 4816 , - 3509 , - 3126 , - 2435 , - 204 , - 129 , - 978 , - 1519 , - 520 , - 1677 , - 3758 , - 603 , - 836 , - 3225 , - 1610 , - 4615 , - 1152 , - 4773 , - 4390 , - 3699 , - 1468 , - 1393 , - 2242 , - 2783 , - 1784 , - 2941 , - 94 , - 1867 , - 2100 , - 4489 , - 2874 , - 951 , - 2416 , - 1109 , - 726 , - 35 , - 2732 , - 2657 , - 3506 , - 4047 , - 3048 , - 4205 , - 1358 , - 3131 , - 3364 , - 825 , - 4138 , - 2215 , - 3680 , - 2373 , - 1990 , - 1299 , - 3996 , - 3921 , - 4770 , - 383 , - 4312 , - 541 , - 2622 , - 4395 , - 4628 , - 2089 , - 474 , - 3479 , - 16 , - 3637 , - 3254 , - 2563 , - 332 , - 257 , - 1106 , - 1647 , - 648 , - 1805 , - 3886 , - 731 , - 964 , - 3353 , - 1738 , - 4743 , - 1280 , - 4901 , - 4518 , - 3827 , - 1596 , - 1521 , - 2370 , - 2911 , - 1912 , - 3069 , - 222 , - 1995 , - 2228 , - 4617 , - 3002 , - 1079 , - 2544 , - 1237 , - 854 , - 163 , - 2860 , - 2785 , - 3634 , - 4175 , - 3176 , - 4333 , - 1486 , - 3259 , - 3492 , - 953 , - 4266 , - 2343 , - 3808 , - 2501 , - 2118 , - 1427 , - 4124 , - 4049 , - 4898 , - 511 , - 4440 , - 669 , - 2750 , - 4523 , - 4756 , - 2217 , - 602 , - 3607 , - 144 , - 3765 , - 3382 , - 2691 , - 460 , - 385 , - 1234 , - 1775 , - 776 , - 1933 , - 4014 , - 859 , - 1092 , - 3481 , - 1866 , - 4871 , - 1408 , - 101 , - 4646 , - 3955 , - 1724 , - 1649 , - 2498 , - 3039 , - 2040 , - 3197 , - 350 , - 2123 , - 2356 , - 4745 , - 3130 , - 1207 , - 2672 , - 1365 , - 982 , - 291 , - 2988 , - 2913 , - 3762 , - 4303 , - 3304 , - 4461 , - 1614 , - 3387 , - 3620 , - 1081 , - 4394 , - 2471 , - 3936 , - 2629 , - 2246 , - 1555 , - 4252 , - 4177 , - 98 , - 639 , - 4568 , - 797 , - 2878 , - 4651 , - 4884 , - 2345 , - 730 , - 3735 , - 272 , - 3893 , - 3510 , - 2819 , - 588 , - 513 , - 1362 , - 1903 , - 904 , - 2061 , - 4142 , - 987 , - 1220 , - 3609 , - 1994 , - 71 , - 1536 , - 229 , - 4774 , - 4083 , - 1852 , - 1777 , - 2626 , - 3167 , - 2168 , - 3325 , - 478 , - 2251 , - 2484 , - 4873 , - 3258 , - 1335 , - 2800 , - 1493 , - 1110 , - 419 , - 3116 , - 3041 , - 3890 , - 4431 , - 3432 , - 4589 , - 1742 , - 3515 , - 3748 , - 1209 , - 4522 , - 2599 , - 4064 , - 2757 , - 2374 , - 1683 , - 4380 , - 4305 , - 226 , - 767 , - 4696 , - 925 , - 3006 , - 4779 , - 84 , - 2473 , - 858 , - 3863 , - 400 , - 4021 , - 3638 , - 2947 , - 716 , - 641 , - 1490 , - 2031 , - 1032 , - 2189 , - 4270 , - 1115 , - 1348 , - 3737 , - 2122 , - 199 , - 1664 , - 357 , - 4902 , - 4211 , - 1980 , - 1905 , - 2754 , - 3295 , - 2296 , - 3453 , - 606 , - 2379 , - 2612 , - 73 , - 3386 , - 1463 , - 2928 , - 1621 , - 1238 , - 547 , - 3244 , - 3169 , - 4018 , - 4559 , - 3560 , - 4717 , - 1870 , - 3643 , - 3876 , - 1337 , - 4650 , - 2727 , - 4192 , - 2885 , - 2502 , - 1811 , - 4508 , - 4433 , - 354 , - 895 , - 4824 , - 1053 , - 3134 , - 4907 , - 212 , - 2601 , - 986 , - 3991 , - 528 , - 4149 , - 3766 , - 3075 , - 844 , - 769 , - 1618 , - 2159 , - 1160 , - 2317 , - 4398 , - 1243 , - 1476 , - 3865 , - 2250 , - 327 , - 1792 , - 485 , - 102 , - 4339 , - 2108 , - 2033 , - 2882 , - 3423 , - 2424 , - 3581 , - 734 , - 2507 , - 2740 , - 201 , - 3514 , - 1591 , - 3056 , - 1749 , - 1366 , - 675 , - 3372 , - 3297 , - 4146 , - 4687 , - 3688 , - 4845 , - 1998 , - 3771 , - 4004 , - 1465 , - 4778 , - 2855 , - 4320 , - 3013 , - 2630 , - 1939 , - 4636 , - 4561 , - 482 , - 1023 , - 24 , - 1181 , - 3262 , - 107 , - 340 , - 2729 , - 1114 , - 4119 , - 656 , - 4277 , - 3894 , - 3203 , - 972 , - 897 , - 1746 , - 2287 , - 1288 , - 2445 , - 4526 , - 1371 , - 1604 , - 3993 , - 2378 , - 455 , - 1920 , - 613 , - 230 , - 4467 , - 2236 , - 2161 , - 3010 , - 3551 , - 2552 , - 3709 , - 862 , - 2635 , - 2868 , - 329 , - 3642 , - 1719 , - 3184 , - 1877 , - 1494 , - 803 , - 3500 , - 3425 , - 4274 , - 4815 , - 3816 , - 45 , - 2126 , - 3899 , - 4132 , - 1593 , - 4906 , - 2983 , - 4448 , - 3141 , - 2758 , - 2067 , - 4764 , - 4689 , - 610 , - 1151 , - 152 , - 1309 , - 3390 , - 235 , - 468 , - 2857 , - 1242 , - 4247 , - 784 , - 4405 , - 4022 , - 3331 , - 1100 , - 1025 , - 1874 , - 2415 , - 1416 , - 2573 , - 4654 , - 1499 , - 1732 , - 4121 , - 2506 , - 583 , - 2048 , - 741 , - 358 , - 4595 , - 2364 , - 2289 , - 3138 , - 3679 , - 2680 , - 3837 , - 990 , - 2763 , - 2996 , - 457 , - 3770 , - 1847 , - 3312 , - 2005 , - 1622 , - 931 , - 3628 , - 3553 , - 4402 , - 15 , - 3944 , - 173 , - 2254 , - 4027 , - 4260 , - 1721 , - 106 , - 3111 , - 4576 , - 3269 , - 2886 , - 2195 , - 4892 , - 4817 , - 738 , - 1279 , - 280 , - 1437 , - 3518 , - 363 , - 596 , - 2985 , - 1370 , - 4375 , - 912 , - 4533 , - 4150 , - 3459 , - 1228 , - 1153 , - 2002 , - 2543 , - 1544 , - 2701 , - 4782 , - 1627 , - 1860 , - 4249 , - 2634 , - 711 , - 2176 , - 869 , - 486 , - 4723 , - 2492 , - 2417 , - 3266 , - 3807 , - 2808 , - 3965 , - 1118 , - 2891 , - 3124 , - 585 , - 3898 , - 1975 , - 3440 , - 2133 , - 1750 , - 1059 , - 3756 , - 3681 , - 4530 , - 143 , - 4072 , - 301 , - 2382 , - 4155 , - 4388 , - 1849 , - 234 , - 3239 , - 4704 , - 3397 , - 3014 , - 2323 , - 92 , - 17 , - 866 , - 1407 , - 408 , - 1565 , - 3646 , - 491 , - 724 , - 3113 , - 1498 , - 4503 , - 1040 , - 4661 , - 4278 , - 3587 , - 1356 , - 1281 , - 2130 , - 2671 , - 1672 , - 2829 , - 4910 , - 1755 , - 1988 , - 4377 , - 2762 , - 839 , - 2304 , - 997 , - 614 , - 4851 , - 2620 , - 2545 , - 3394 , - 3935 , - 2936 , - 4093 , - 1246 , - 3019 , - 3252 , - 713 , - 4026 , - 2103 , - 3568 , - 2261 , - 1878 , - 1187 , - 3884 , - 3809 , - 4658 , - 271 , - 4200 , - 429 , - 2510 , - 4283 , - 4516 , - 1977 , - 362 , - 3367 , - 4832 , - 3525 , - 3142 , - 2451 , - 220 , - 145 , - 994 , - 1535 , - 536 , - 1693 , - 3774 , - 619 , - 852 , - 3241 , - 1626 , - 4631 , - 1168 , - 4789 , - 4406 , - 3715 , - 1484 , - 1409 , - 2258 , - 2799 , - 1800 , - 2957 , - 110 , - 1883 , - 2116 , - 4505 , - 2890 , - 967 , - 2432 , - 1125 , - 742 , - 51 , - 2748 , - 2673 , - 3522 , - 4063 , - 3064 , - 4221 , - 1374 , - 3147 , - 3380 , - 841 , - 4154 , - 2231 , - 3696 , - 2389 , - 2006 , - 1315 , - 4012 , - 3937 , - 4786 , - 399 , - 4328 , - 557 , - 2638 , - 4411 , - 4644 , - 2105 , - 490 , - 3495 , - 32 , - 3653 , - 3270 , - 2579 , - 348 , - 273 , - 1122 , - 1663 , - 664 , - 1821 , - 3902 , - 747 , - 980 , - 3369 , - 1754 , - 4759 , - 1296 , - 4917 , - 4534 , - 3843 , - 1612 , - 1537 , - 2386 , - 2927 , - 1928 , - 3085 , - 238 , - 2011 , - 2244 , - 4633 , - 3018 , - 1095 , - 2560 , - 1253 , - 870 , - 179 , - 2876 , - 2801 , - 3650 , - 4191 , - 3192 , - 4349 , - 1502 , - 3275 , - 3508 , - 969 , - 4282 , - 2359 , - 3824 , - 2517 , - 2134 , - 1443 , - 4140 , - 4065 , - 4914 , - 527 , - 4456 , - 685 , - 2766 , - 4539 , - 4772 , - 2233 , - 618 , - 3623 , - 160 , - 3781 , - 3398 , - 2707 , - 476 , - 401 , - 1250 , - 1791 , - 792 , - 1949 , - 4030 , - 875 , - 1108 , - 3497 , - 1882 , - 4887 , - 1424 , - 117 , - 4662 , - 3971 , - 1740 , - 1665 , - 2514 , - 3055 , - 2056 , - 3213 , - 366 , - 2139 , - 2372 , - 4761 , - 3146 , - 1223 , - 2688 , - 1381 , - 998 , - 307 , - 3004 , - 2929 , - 3778 , - 4319 , - 3320 , - 4477 , - 1630 , - 3403 , - 3636 , - 1097 , - 4410 , - 2487 , - 3952 , - 2645 , - 2262 , - 1571 , - 4268 , - 4193 , - 114 , - 655 , - 4584 , - 813 , - 2894 , - 4667 , - 4900 , - 2361 , - 746 , - 3751 , - 288 , - 3909 , - 3526 , - 2835 , - 604 , - 529 , - 1378 , - 1919 , - 920 , - 2077 , - 4158 , - 1003 , - 1236 , - 3625 , - 2010 , - 87 , - 1552 , - 245 , - 4790 , - 4099 , - 1868 , - 1793 , - 2642 , - 3183 , - 2184 , - 3341 , - 494 , - 2267 , - 2500 , - 4889 , - 3274 , - 1351 , - 2816 , - 1509 , - 1126 , - 435 , - 3132 , - 3057 , - 3906 , - 4447 , - 3448 , - 4605 , - 1758 , - 3531 , - 3764 , - 1225 , - 4538 , - 2615 , - 4080 , - 2773 , - 2390 , - 1699 , - 4396 , - 4321 , - 242 , - 783 , - 4712 , - 941 , - 3022 , - 4795 , - 100 , - 2489 , - 874 , - 3879 , - 416 , - 4037 , - 3654 , - 2963 , - 732 , - 657 , - 1506 , - 2047 , - 1048 , - 2205 , - 4286 , - 1131 , - 1364 , - 3753 , - 2138 , - 215 , - 1680 , - 373 , - 4918 , - 4227 , - 1996 , - 1921 , - 2770 , - 3311 , - 2312 , - 3469 , - 622 , - 2395 , - 2628 , - 89 , - 3402 , - 1479 , - 2944 , - 1637 , - 1254 , - 563 , - 3260 , - 3185 , - 4034 , - 4575 , - 3576 , - 4733 , - 1886 , - 3659 , - 3892 , - 1353 , - 4666 , - 2743 , - 4208 , - 2901 , - 2518 , - 1827 , - 4524 , - 4449 , - 370 , - 911 , - 4840 , - 1069 , - 3150 , - 4923 , - 228 , - 2617 , - 1002 , - 4007 , - 544 , - 4165 , - 3782 , - 3091 , - 860 , - 785 , - 1634 , - 2175 , - 1176 , - 2333 , - 4414 , - 1259 , - 1492 , - 3881 , - 2266 , - 343 , - 1808 , - 501 , - 118 , - 4355 , - 2124 , - 2049 , - 2898 , - 3439 , - 2440 , - 3597 , - 750 , - 2523 , - 2756 , - 217 , - 3530 , - 1607 , - 3072 , - 1765 , - 1382 , - 691 , - 3388 , - 3313 , - 4162 , - 4703 , - 3704 , - 4861 , - 2014 , - 3787 , - 4020 , - 1481 , - 4794 , - 2871 , - 4336 , - 3029 , - 2646 , - 1955 , - 4652 , - 4577 , - 498 , - 1039 , - 40 , - 1197 , - 3278 , - 123 , - 356 , - 2745 , - 1130 , - 4135 , - 672 , - 4293 , - 3910 , - 3219 , - 988 , - 913 , - 1762 , - 2303 , - 1304 , - 2461 , - 4542 , - 1387 , - 1620 , - 4009 , - 2394 , - 471 , - 1936 , - 629 , - 246 , - 4483 , - 2252 , - 2177 , - 3026 , - 3567 , - 2568 , - 3725 , - 878 , - 2651 , - 2884 , - 345 , - 3658 , - 1735 , - 3200 , - 1893 , - 1510 , - 819 , - 3516 , - 3441 , - 4290 , - 4831 , - 3832 , - 61 , - 2142 , - 3915 , - 4148 , - 1609 , - 4922 , - 2999 , - 4464 , - 3157 , - 2774 , - 2083 , - 4780 , - 4705 , - 626 , - 1167 , - 168 , - 1325 , - 3406 , - 251 , - 484 , - 2873 , - 1258 , - 4263 , - 800 , - 4421 , - 4038 , - 3347 , - 1116 , - 1041 , - 1890 , - 2431 , - 1432 , - 2589 , - 4670 , - 1515 , - 1748 , - 4137 , - 2522 , - 599 , - 2064 , - 757 , - 374 , - 4611 , - 2380 , - 2305 , - 3154 , - 3695 , - 2696 , - 3853 , - 1006 , - 2779 , - 3012 , - 473 , - 3786 , - 1863 , - 3328 , - 2021 , - 1638 , - 947 , - 3644 , - 3569 , - 4418 , - 31 , - 3960 , - 189 , - 2270 , - 4043 , - 4276 , - 1737 , - 122 , - 3127 , - 4592 , - 3285 , - 2902 , - 2211 , - 4908 , - 4833 , - 754 , - 1295 , - 296 , - 1453 , - 3534 , - 379 , - 612 , - 3001 , - 1386 , - 4391 , - 928 , - 4549 , - 4166 , - 3475 , - 1244 , - 1169 , - 2018 , - 2559 , - 1560 , - 2717 , - 4798 , - 1643 , - 1876 , - 4265 , - 2650 , - 727 , - 2192 , - 885 , - 502 , - 4739 , - 2508 , - 2433 , - 3282 , - 3823 , - 2824 , - 3981 , - 1134 , - 2907 , - 3140 , - 601 , - 3914 , - 1991 , - 3456 , - 2149 , - 1766 , - 1075 , - 3772 , - 3697 , - 4546 , - 159 , - 4088 , - 317 , - 2398 , - 4171 , - 4404 , - 1865 , - 250 , - 3255 , - 4720 , - 3413 , - 3030 , - 2339 , - 108 , - 33 , - 882 , - 1423 , - 424 , - 1581 , - 3662 , - 507 , - 740 , - 3129 , - 1514 , - 4519 , - 1056 , - 4677 , - 4294 , - 3603 , - 1372 , - 1297 , - 2146 , - 2687 , - 1688 , - 2845 , - 4926 , - 1771 , - 2004 , - 4393 , - 2778 , - 855 , - 2320 , - 1013 , - 630 , - 4867 , - 2636 , - 2561 , - 3410 , - 3951 , - 2952 , - 4109 , - 1262 , - 3035 , - 3268 , - 729 , - 4042 , - 2119 , - 3584 , - 2277 , - 1894 , - 1203 , - 3900 , - 3825 , - 4674 , - 287 , - 4216 , - 445 , - 2526 , - 4299 , - 4532 , - 1993 , - 378 , - 3383 , - 4848 , - 3541 , - 3158 , - 2467 , - 236 , - 161 , - 1010 , - 1551 , - 552 , - 1709 , - 3790 , - 635 , - 868 , - 3257 , - 1642 , - 4647 , - 1184 , - 4805 , - 4422 , - 3731 , - 1500 , - 1425 , - 2274 , - 2815 , - 1816 , - 2973 , - 126 , - 1899 , - 2132 , - 4521 , - 2906 , - 983 , - 2448 , - 1141 , - 758 , - 67 , - 2764 , - 2689 , - 3538 , - 4079 , - 3080 , - 4237 , - 1390 , - 3163 , - 3396 , - 857 , - 4170 , - 2247 , - 3712 , - 2405 , - 2022 , - 1331 , - 4028 , - 3953 , - 4802 , - 415 , - 4344 , - 573 , - 2654 , - 4427 , - 4660 , - 2121 , - 506 , - 3511 , - 48 , - 3669 , - 3286 , - 2595 , - 364 , - 289 , - 1138 , - 1679 , - 680 , - 1837 , - 3918 , - 763 , - 996 , - 3385 , - 1770 , - 4775 , - 1312 , - 5 , - 4550 , - 3859 , - 1628 , - 1553 , - 2402 , - 2943 , - 1944 , - 3101 , - 254 , - 2027 , - 2260 , - 4649 , - 3034 , - 1111 , - 2576 , - 1269 , - 886 , - 195 , - 2892 , - 2817 , - 3666 , - 4207 , - 3208 , - 4365 , - 1518 , - 3291 , - 3524 , - 985 , - 4298 , - 2375 , - 3840 , - 2533 , - 2150 , - 1459 , - 4156 , - 4081 , - 2 , - 543 , - 4472 , - 701 , - 2782 , - 4555 , - 4788 , - 2249 , - 634 , - 3639 , - 176 , - 3797 , - 3414 , - 2723 , - 492 , - 417 , - 1266 , - 1807 , - 808 , - 1965 , - 4046 , - 891 , - 1124 , - 3513 , - 1898 , - 4903 , - 1440 , - 133 , - 4678 , - 3987 , - 1756 , - 1681 , - 2530 , - 3071 , - 2072 , - 3229 , - 382 , - 2155 , - 2388 , - 4777 , - 3162 , - 1239 , - 2704 , - 1397 , - 1014 , - 323 , - 3020 , - 2945 , - 3794 , - 4335 , - 3336 , - 4493 , - 1646 , - 3419 , - 3652 , - 1113 , - 4426 , - 2503 , - 3968 , - 2661 , - 2278 , - 1587 , - 4284 , - 4209 , - 130 , - 671 , - 4600 , - 829 , - 2910 , - 4683 , - 4916 , - 2377 , - 762 , - 3767 , - 304 , - 3925 , - 3542 , - 2851 , - 620 , - 545 , - 1394 , - 1935 , - 936 , - 2093 , - 4174 , - 1019 , - 1252 , - 3641 , - 2026 , - 103 , - 1568 , - 261 , - 4806 , - 4115 , - 1884 , - 1809 , - 2658 , - 3199 , - 2200 , - 3357 , - 510 , - 2283 , - 2516 , - 4905 , - 3290 , - 1367 , - 2832 , - 1525 , - 1142 , - 451 , - 3148 , - 3073 , - 3922 , - 4463 , - 3464 , - 4621 , - 1774 , - 3547 , - 3780 , - 1241 , - 4554 , - 2631 , - 4096 , - 2789 , - 2406 , - 1715 , - 4412 , - 4337 , - 258 , - 799 , - 4728 , - 957 , - 3038 , - 4811 , - 116 , - 2505 , - 890 , - 3895 , - 432 , - 4053 , - 3670 , - 2979 , - 748 , - 673 , - 1522 , - 2063 , - 1064 , - 2221 , - 4302 , - 1147 , - 1380 , - 3769 , - 2154 , - 231 , - 1696 , - 389 , - 6 , - 4243 , - 2012 , - 1937 , - 2786 , - 3327 , - 2328 , - 3485 , - 638 , - 2411 , - 2644 , - 105 , - 3418 , - 1495 , - 2960 , - 1653 , - 1270 , - 579 , - 3276 , - 3201 , - 4050 , - 4591 , - 3592 , - 4749 , - 1902 , - 3675 , - 3908 , - 1369 , - 4682 , - 2759 , - 4224 , - 2917 , - 2534 , - 1843 , - 4540 , - 4465 , - 386 , - 927 , - 4856 , - 1085 , - 3166 , - 11 , - 244 , - 2633 , - 1018 , - 4023 , - 560 , - 4181 , - 3798 , - 3107 , - 876 , - 801 , - 1650 , - 2191 , - 1192 , - 2349 , - 4430 , - 1275 , - 1508 , - 3897 , - 2282 , - 359 , - 1824 , - 517 , - 134 , - 4371 , - 2140 , - 2065 , - 2914 , - 3455 , - 2456 , - 3613 , - 766 , - 2539 , - 2772 , - 233 , - 3546 , - 1623 , - 3088 , - 1781 , - 1398 , - 707 , - 3404 , - 3329 , - 4178 , - 4719 , - 3720 , - 4877 , - 2030 , - 3803 , - 4036 , - 1497 , - 4810 , - 2887 , - 4352 , - 3045 , - 2662 , - 1971 , - 4668 , - 4593 , - 514 , - 1055 , - 56 , - 1213 , - 3294 , - 139 , - 372 , - 2761 , - 1146 , - 4151 , - 688 , - 4309 , - 3926 , - 3235 , - 1004 , - 929 , - 1778 , - 2319 , - 1320 , - 2477 , - 4558 , - 1403 , - 1636 , - 4025 , - 2410 , - 487 , - 1952 , - 645 , - 262 , - 4499 , - 2268 , - 2193 , - 3042 , - 3583 , - 2584 , - 3741 , - 894 , - 2667 , - 2900 , - 361 , - 3674 , - 1751 , - 3216 , - 1909 , - 1526 , - 835 , - 3532 , - 3457 , - 4306 , - 4847 , - 3848 , - 77 , - 2158 , - 3931 , - 4164 , - 1625 , - 10 , - 3015 , - 4480 , - 3173 , - 2790 , - 2099 , - 4796 , - 4721 , - 642 , - 1183 , - 184 , - 1341 , - 3422 , - 267 , - 500 , - 2889 , - 1274 , - 4279 , - 816 , - 4437 , - 4054 , - 3363 , - 1132 , - 1057 , - 1906 , - 2447 , - 1448 , - 2605 , - 4686 , - 1531 , - 1764 , - 4153 , - 2538 , - 615 , - 2080 , - 773 , - 390 , - 4627 , - 2396 , - 2321 , - 3170 , - 3711 , - 2712 , - 3869 , - 1022 , - 2795 , - 3028 , - 489 , - 3802 , - 1879 , - 3344 , - 2037 , - 1654 , - 963 , - 3660 , - 3585 , - 4434 , - 47 , - 3976 , - 205 , - 2286 , - 4059 , - 4292 , - 1753 , - 138 , - 3143 , - 4608 , - 3301 , - 2918 , - 2227 , - 4924 , - 4849 , - 770 , - 1311 , - 312 , - 1469 , - 3550 , - 395 , - 628 , - 3017 , - 1402 , - 4407 , - 944 , - 4565 , - 4182 , - 3491 , - 1260 , - 1185 , - 2034 , - 2575 , - 1576 , - 2733 , - 4814 , - 1659 , - 1892 , - 4281 , - 2666 , - 743 , - 2208 , - 901 , - 518 , - 4755 , - 2524 , - 2449 , - 3298 , - 3839 , - 2840 , - 3997 , - 1150 , - 2923 , - 3156 , - 617 , - 3930 , - 2007 , - 3472 , - 2165 , - 1782 , - 1091 , - 3788 , - 3713 , - 4562 , - 175 , - 4104 , - 333 , - 2414 , - 4187 , - 4420 , - 1881 , - 266 , - 3271 , - 4736 , - 3429 , - 3046 , - 2355 , - 124 , - 49 , - 898 , - 1439 , - 440 , - 1597 , - 3678 , - 523 , - 756 , - 3145 , - 1530 , - 4535 , - 1072 , - 4693 , - 4310 , - 3619 , - 1388 , - 1313 , - 2162 , - 2703 , - 1704 , - 2861 , - 14 , - 1787 , - 2020 , - 4409 , - 2794 , - 871 , - 2336 , - 1029 , - 646 , - 4883 , - 2652 , - 2577 , - 3426 , - 3967 , - 2968 , - 4125 , - 1278 , - 3051 , - 3284 , - 745 , - 4058 , - 2135 , - 3600 , - 2293 , - 1910 , - 1219 , - 3916 , - 3841 , - 4690 , - 303 , - 4232 , - 461 , - 2542 , - 4315 , - 4548 , - 2009 , - 394 , - 3399 , - 4864 , - 3557 , - 3174 , - 2483 , - 252 , - 177 , - 1026 , - 1567 , - 568 , - 1725 , - 3806 , - 651 , - 884 , - 3273 , - 1658 , - 4663 , - 1200 , - 4821 , - 4438 , - 3747 , - 1516 , - 1441 , - 2290 , - 2831 , - 1832 , - 2989 , - 142 , - 1915 , - 2148 , - 4537 , - 2922 , - 999 , - 2464 , - 1157 , - 774 , - 83 , - 2780 , - 2705 , - 3554 , - 4095 , - 3096 , - 4253 , - 1406 , - 3179 , - 3412 , - 873 , - 4186 , - 2263 , - 3728 , - 2421 , - 2038 , - 1347 , - 4044 , - 3969 , - 4818 , - 431 , - 4360 , - 589 , - 2670 , - 4443 , - 4676 , - 2137 , - 522 , - 3527 , - 64 , - 3685 , - 3302 , - 2611 , - 380 , - 305 , - 1154 , - 1695 , - 696 , - 1853 , - 3934 , - 779 , - 1012 , - 3401 , - 1786 , - 4791 , - 1328 , - 21 , - 4566 , - 3875 , - 1644 , - 1569 , - 2418 , - 2959 , - 1960 , - 3117 , - 270 , - 2043 , - 2276 , - 4665 , - 3050 , - 1127 , - 2592 , - 1285 , - 902 , - 211 , - 2908 , - 2833 , - 3682 , - 4223 , - 3224 , - 4381 , - 1534 , - 3307 , - 3540 , - 1001 , - 4314 , - 2391 , - 3856 , - 2549 , - 2166 , - 1475 , - 4172 , - 4097 , - 18 , - 559 , - 4488 , - 717 , - 2798 , - 4571 , - 4804 , - 2265 , - 650 , - 3655 , - 192 , - 3813 , - 3430 , - 2739 , - 508 , - 433 , - 1282 , - 1823 , - 824 , - 1981 , - 4062 , - 907 , - 1140 , - 3529 , - 1914 , - 4919 , - 1456 , - 149 , - 4694 , - 4003 , - 1772 , - 1697 , - 2546 , - 3087 , - 2088 , - 3245 , - 398 , - 2171 , - 2404 , - 4793 , - 3178 , - 1255 , - 2720 , - 1413 , - 1030 , - 339 , - 3036 , - 2961 , - 3810 , - 4351 , - 3352 , - 4509 , - 1662 , - 3435 , - 3668 , - 1129 , - 4442 , - 2519 , - 3984 , - 2677 , - 2294 , - 1603 , - 4300 , - 4225 , - 146 , - 687 , - 4616 , - 845 , - 2926 , - 4699 , - 4 , - 2393 , - 778 , - 3783 , - 320 , - 3941 , - 3558 , - 2867 , - 636 , - 561 , - 1410 , - 1951 , - 952 , - 2109 , - 4190 , - 1035 , - 1268 , - 3657 , - 2042 , - 119 , - 1584 , - 277 , - 4822 , - 4131 , - 1900 , - 1825 , - 2674 , - 3215 , - 2216 , - 3373 , - 526 , - 2299 , - 2532 , - 4921 , - 3306 , - 1383 , - 2848 , - 1541 , - 1158 , - 467 , - 3164 , - 3089 , - 3938 , - 4479 , - 3480 , - 4637 , - 1790 , - 3563 , - 3796 , - 1257 , - 4570 , - 2647 , - 4112 , - 2805 , - 2422 , - 1731 , - 4428 , - 4353 , - 274 , - 815 , - 4744 , - 973 , - 3054 , - 4827 , - 132 , - 2521 , - 906 , - 3911 , - 448 , - 4069 , - 3686 , - 2995 , - 764 , - 689 , - 1538 , - 2079 , - 1080 , - 2237 , - 4318 , - 1163 , - 1396 , - 3785 , - 2170 , - 247 , - 1712 , - 405 , - 22 , - 4259 , - 2028 , - 1953 , - 2802 , - 3343 , - 2344 , - 3501 , - 654 , - 2427 , - 2660 , - 121 , - 3434 , - 1511 , - 2976 , - 1669 , - 1286 , - 595 , - 3292 , - 3217 , - 4066 , - 4607 , - 3608 , - 4765 , - 1918 , - 3691 , - 3924 , - 1385 , - 4698 , - 2775 , - 4240 , - 2933 , - 2550 , - 1859 , - 4556 , - 4481 , - 402 , - 943 , - 4872 , - 1101 , - 3182 , - 27 , - 260 , - 2649 , - 1034 , - 4039 , - 576 , - 4197 , - 3814 , - 3123 , - 892 , - 817 , - 1666 , - 2207 , - 1208 , - 2365 , - 4446 , - 1291 , - 1524 , - 3913 , - 2298 , - 375 , - 1840 , - 533 , - 150 , - 4387 , - 2156 , - 2081 , - 2930 , - 3471 , - 2472 , - 3629 , - 782 , - 2555 , - 2788 , - 249 , - 3562 , - 1639 , - 3104 , - 1797 , - 1414 , - 723 , - 3420 , - 3345 , - 4194 , - 4735 , - 3736 , - 4893 , - 2046 , - 3819 , - 4052 , - 1513 , - 4826 , - 2903 , - 4368 , - 3061 , - 2678 , - 1987 , - 4684 , - 4609 , - 530 , - 1071 , - 72 , - 1229 , - 3310 , - 155 , - 388 , - 2777 , - 1162 , - 4167 , - 704 , - 4325 , - 3942 , - 3251 , - 1020 , - 945 , - 1794 , - 2335 , - 1336 , - 2493 , - 4574 , - 1419 , - 1652 , - 4041 , - 2426 , - 503 , - 1968 , - 661 , - 278 , - 4515 , - 2284 , - 2209 , - 3058 , - 3599 , - 2600 , - 3757 , - 910 , - 2683 , - 2916 , - 377 , - 3690 , - 1767 , - 3232 , - 1925 , - 1542 , - 851 , - 3548 , - 3473 , - 4322 , - 4863 , - 3864 , - 93 , - 2174 , - 3947 , - 4180 , - 1641 , - 26 , - 3031 , - 4496 , - 3189 , - 2806 , - 2115 , - 4812 , - 4737 , - 658 , - 1199 , - 200 , - 1357 , - 3438 , - 283 , - 516 , - 2905 , - 1290 , - 4295 , - 832 , - 4453 , - 4070 , - 3379 , - 1148 , - 1073 , - 1922 , - 2463 , - 1464 , - 2621 , - 4702 , - 1547 , - 1780 , - 4169 , - 2554 , - 631 , - 2096 , - 789 , - 406 , - 4643 , - 2412 , - 2337 , - 3186 , - 3727 , - 2728 , - 3885 , - 1038 , - 2811 , - 3044 , - 505 , - 3818 , - 1895 , - 3360 , - 2053 , - 1670 , - 979 , - 3676 , - 3601 , - 4450 , - 63 , - 3992 , - 221 , - 2302 , - 4075 , - 4308 , - 1769 , - 154 , - 3159 , - 4624 , - 3317 , - 2934 , - 2243 , - 12 , - 4865 , - 786 , - 1327 , - 328 , - 1485 , - 3566 , - 411 , - 644 , - 3033 , - 1418 , - 4423 , - 960 , - 4581 , - 4198 , - 3507 , - 1276 , - 1201 , - 2050 , - 2591 , - 1592 , - 2749 , - 4830 , - 1675 , - 1908 , - 4297 , - 2682 , - 759 , - 2224 , - 917 , - 534 , - 4771 , - 2540 , - 2465 , - 3314 , - 3855 , - 2856 , - 4013 , - 1166 , - 2939 , - 3172 , - 633 , - 3946 , - 2023 , - 3488 , - 2181 , - 1798 , - 1107 , - 3804 , - 3729 , - 4578 , - 191 , - 4120 , - 349 , - 2430 , - 4203 , - 4436 , - 1897 , - 282 , - 3287 , - 4752 , - 3445 , - 3062 , - 2371 , - 140 , - 65 , - 914 , - 1455 , - 456 , - 1613 , - 3694 , - 539 , - 772 , - 3161 , - 1546 , - 4551 , - 1088 , - 4709 , - 4326 , - 3635 , - 1404 , - 1329 , - 2178 , - 2719 , - 1720 , - 2877 , - 30 , - 1803 , - 2036 , - 4425 , - 2810 , - 887 , - 2352 , - 1045 , - 662 , - 4899 , - 2668 , - 2593 , - 3442 , - 3983 , - 2984 , - 4141 , - 1294 , - 3067 , - 3300 , - 761 , - 4074 , - 2151 , - 3616 , - 2309 , - 1926 , - 1235 , - 3932 , - 3857 , - 4706 , - 319 , - 4248 , - 477 , - 2558 , - 4331 , - 4564 , - 2025 , - 410 , - 3415 , - 4880 , - 3573 , - 3190 , - 2499 , - 268 , - 193 , - 1042 , - 1583 , - 584 , - 1741 , - 3822 , - 667 , - 900 , - 3289 , - 1674 , - 4679 , - 1216 , - 4837 , - 4454 , - 3763 , - 1532 , - 1457 , - 2306 , - 2847 , - 1848 , - 3005 , - 158 , - 1931 , - 2164 , - 4553 , - 2938 , - 1015 , - 2480 , - 1173 , - 790 , - 99 , - 2796 , - 2721 , - 3570 , - 4111 , - 3112 , - 4269 , - 1422 , - 3195 , - 3428 , - 889 , - 4202 , - 2279 , - 3744 , - 2437 , - 2054 , - 1363 , - 4060 , - 3985 , - 4834 , - 447 , - 4376 , - 605 , - 2686 , - 4459 , - 4692 , - 2153 , - 538 , - 3543 , - 80 , - 3701 , - 3318 , - 2627 , - 396 , - 321 , - 1170 , - 1711 , - 712 , - 1869 , - 3950 , - 795 , - 1028 , - 3417 , - 1802 , - 4807 , - 1344 , - 37 , - 4582 , - 3891 , - 1660 , - 1585 , - 2434 , - 2975 , - 1976 , - 3133 , - 286 , - 2059 , - 2292 , - 4681 , - 3066 , - 1143 , - 2608 , - 1301 , - 918 , - 227 , - 2924 , - 2849 , - 3698 , - 4239 , - 3240 , - 4397 , - 1550 , - 3323 , - 3556 , - 1017 , - 4330 , - 2407 , - 3872 , - 2565 , - 2182 , - 1491 , - 4188 , - 4113 , - 34 , - 575 , - 4504 , - 733 , - 2814 , - 4587 , - 4820 , - 2281 , - 666 , - 3671 , - 208 , - 3829 , - 3446 , - 2755 , - 524 , - 449 , - 1298 , - 1839 , - 840 , - 1997 , - 4078 , - 923 , - 1156 , - 3545 , - 1930 , - 7 , - 1472 , - 165 , - 4710 , - 4019 , - 1788 , - 1713 , - 2562 , - 3103 , - 2104 , - 3261 , - 414 , - 2187 , - 2420 , - 4809 , - 3194 , - 1271 , - 2736 , - 1429 , - 1046 , - 355 , - 3052 , - 2977 , - 3826 , - 4367 , - 3368 , - 4525 , - 1678 , - 3451 , - 3684 , - 1145 , - 4458 , - 2535 , - 4000 , - 2693 , - 2310 , - 1619 , - 4316 , - 4241 , - 162 , - 703 , - 4632 , - 861 , - 2942 , - 4715 , - 20 , - 2409 , - 794 , - 3799 , - 336 , - 3957 , - 3574 , - 2883 , - 652 , - 577 , - 1426 , - 1967 , - 968 , - 2125 , - 4206 , - 1051 , - 1284 , - 3673 , - 2058 , - 135 , - 1600 , - 293 , - 4838 , - 4147 , - 1916 , - 1841 , - 2690 , - 3231 , - 2232 , - 3389 , - 542 , - 2315 , - 2548 , - 9 , - 3322 , - 1399 , - 2864 , - 1557 , - 1174 , - 483 , - 3180 , - 3105 , - 3954 , - 4495 , - 3496 , - 4653 , - 1806 , - 3579 , - 3812 , - 1273 , - 4586 , - 2663 , - 4128 , - 2821 , - 2438 , - 1747 , - 4444 , - 4369 , - 290 , - 831 , - 4760 , - 989 , - 3070 , - 4843 , - 148 , - 2537 , - 922 , - 3927 , - 464 , - 4085 , - 3702 , - 3011 , - 780 , - 705 , - 1554 , - 2095 , - 1096 , - 2253 , - 4334 , - 1179 , - 1412 , - 3801 , - 2186 , - 263 , - 1728 , - 421 , - 38 , - 4275 , - 2044 , - 1969 , - 2818 , - 3359 , - 2360 , - 3517 , - 670 , - 2443 , - 2676 , - 137 , - 3450 , - 1527 , - 2992 , - 1685 , - 1302 , - 611 , - 3308 , - 3233 , - 4082 , - 4623 , - 3624 , - 4781 , - 1934 , - 3707 , - 3940 , - 1401 , - 4714 , - 2791 , - 4256 , - 2949 , - 2566 , - 1875 , - 4572 , - 4497 , - 418 , - 959 , - 4888 , - 1117 , - 3198 , - 43 , - 276 , - 2665 , - 1050 , - 4055 , - 592 , - 4213 , - 3830 , - 3139 , - 908 , - 833 , - 1682 , - 2223 , - 1224 , - 2381 , - 4462 , - 1307 , - 1540 , - 3929 , - 2314 , - 391 , - 1856 , - 549 , - 166 , - 4403 , - 2172 , - 2097 , - 2946 , - 3487 , - 2488 , - 3645 , - 798 , - 2571 , - 2804 , - 265 , - 3578 , - 1655 , - 3120 , - 1813 , - 1430 , - 739 , - 3436 , - 3361 , - 4210 , - 4751 , - 3752 , - 4909 , - 2062 , - 3835 , - 4068 , - 1529 , - 4842 , - 2919 , - 4384 , - 3077 , - 2694 , - 2003 , - 4700 , - 4625 , - 546 , - 1087 , - 88 , - 1245 , - 3326 , - 171 , - 404 , - 2793 , - 1178 , - 4183 , - 720 , - 4341 , - 3958 , - 3267 , - 1036 , - 961 , - 1810 , - 2351 , - 1352 , - 2509 , - 4590 , - 1435 , - 1668 , - 4057 , - 2442 , - 519 , - 1984 , - 677 , - 294 , - 4531 , - 2300 , - 2225 , - 3074 , - 3615 , - 2616 , - 3773 , - 926 , - 2699 , - 2932 , - 393 , - 3706 , - 1783 , - 3248 , - 1941 , - 1558 , - 867 , - 3564 , - 3489 , - 4338 , - 4879 , - 3880 , - 109 , - 2190 , - 3963 , - 4196 , - 1657 , - 42 , - 3047 , - 4512 , - 3205 , - 2822 , - 2131 , - 4828 , - 4753 , - 674 , - 1215 , - 216 , - 1373 , - 3454 , - 299 , - 532 , - 2921 , - 1306 , - 4311 , - 848 , - 4469 , - 4086 , - 3395 , - 1164 , - 1089 , - 1938 , - 2479 , - 1480 , - 2637 , - 4718 , - 1563 , - 1796 , - 4185 , - 2570 , - 647 , - 2112 , - 805 , - 422 , - 4659 , - 2428 , - 2353 , - 3202 , - 3743 , - 2744 , - 3901 , - 1054 , - 2827 , - 3060 , - 521 , - 3834 , - 1911 , - 3376 , - 2069 , - 1686 , - 995 , - 3692 , - 3617 , - 4466 , - 79 , - 4008 , - 237 , - 2318 , - 4091 , - 4324 , - 1785 , - 170 , - 3175 , - 4640 , - 3333 , - 2950 , - 2259 , - 28 , - 4881 , - 802 , - 1343 , - 344 , - 1501 , - 3582 , - 427 , - 660 , - 3049 , - 1434 , - 4439 , - 976 , - 4597 , - 4214 , - 3523 , - 1292 , - 1217 , - 2066 , - 2607 , - 1608 , - 2765 , - 4846 , - 1691 , - 1924 , - 4313 , - 2698 , - 775 , - 2240 , - 933 , - 550 , - 4787 , - 2556 , - 2481 , - 3330 , - 3871 , - 2872 , - 4029 , - 1182 , - 2955 , - 3188 , - 649 , - 3962 , - 2039 , - 3504 , - 2197 , - 1814 , - 1123 , - 3820 , - 3745 , - 4594 , - 207 , - 4136 , - 365 , - 2446 , - 4219 , - 4452 , - 1913 , - 298 , - 3303 , - 4768 , - 3461 , - 3078 , - 2387 , - 156 , - 81 , - 930 , - 1471 , - 472 , - 1629 , - 3710 , - 555 , - 788 , - 3177 , - 1562 , - 4567 , - 1104 , - 4725 , - 4342 , - 3651 , - 1420 , - 1345 , - 2194 , - 2735 , - 1736 , - 2893 , - 46 , - 1819 , - 2052 , - 4441 , - 2826 , - 903 , - 2368 , - 1061 , - 678 , - 4915 , - 2684 , - 2609 , - 3458 , - 3999 , - 3000 , - 4157 , - 1310 , - 3083 , - 3316 , - 777 , - 4090 , - 2167 , - 3632 , - 2325 , - 1942 , - 1251 , - 3948 , - 3873 , - 4722 , - 335 , - 4264 , - 493 , - 2574 , - 4347 , - 4580 , - 2041 , - 426 , - 3431 , - 4896 , - 3589 , - 3206 , - 2515 , - 284 , - 209 , - 1058 , - 1599 , - 600 , - 1757 , - 3838 , - 683 , - 916 , - 3305 , - 1690 , - 4695 , - 1232 , - 4853 , - 4470 , - 3779 , - 1548 , - 1473 , - 2322 , - 2863 , - 1864 , - 3021 , - 174 , - 1947 , - 2180 , - 4569 , - 2954 , - 1031 , - 2496 , - 1189 , - 806 , - 115 , - 2812 , - 2737 , - 3586 , - 4127 , - 3128 , - 4285 , - 1438 , - 3211 , - 3444 , - 905 , - 4218 , - 2295 , - 3760 , - 2453 , - 2070 , - 1379 , - 4076 , - 4001 , - 4850 , - 463 , - 4392 , - 621 , - 2702 , - 4475 , - 4708 , - 2169 , - 554 , - 3559 , - 96 , - 3717 , - 3334 , - 2643 , - 412 , - 337 , - 1186 , - 1727 , - 728 , - 1885 , - 3966 , - 811 , - 1044 , - 3433 , - 1818 , - 4823 , - 1360 , - 53 , - 4598 , - 3907 , - 1676 , - 1601 , - 2450 , - 2991 , - 1992 , - 3149 , - 302 , - 2075 , - 2308 , - 4697 , - 3082 , - 1159 , - 2624 , - 1317 , - 934 , - 243 , - 2940 , - 2865 , - 3714 , - 4255 , - 3256 , - 4413 , - 1566 , - 3339 , - 3572 , - 1033 , - 4346 , - 2423 , - 3888 , - 2581 , - 2198 , - 1507 , - 4204 , - 4129 , - 50 , - 591 , - 4520 , - 749 , - 2830 , - 4603 , - 4836 , - 2297 , - 682 , - 3687 , - 224 , - 3845 , - 3462 , - 2771 , - 540 , - 465 , - 1314 , - 1855 , - 856 , - 2013 , - 4094 , - 939 , - 1172 , - 3561 , - 1946 , - 23 , - 1488 , - 181 , - 4726 , - 4035 , - 1804 , - 1729 , - 2578 , - 3119 , - 2120 , - 3277 , - 430 , - 2203 , - 2436 , - 4825 , - 3210 , - 1287 , - 2752 , - 1445 , - 1062 , - 371 , - 3068 , - 2993 , - 3842 , - 4383 , - 3384 , - 4541 , - 1694 , - 3467 , - 3700 , - 1161 , - 4474 , - 2551 , - 4016 , - 2709 , - 2326 , - 1635 , - 4332 , - 4257 , - 178 , - 719 , - 4648 , - 877 , - 2958 , - 4731 , - 36 , - 2425 , - 810 , - 3815 , - 352 , - 3973 , - 3590 , - 2899 , - 668 , - 593 , - 1442 , - 1983 , - 984 , - 2141 , - 4222 , - 1067 , - 1300 , - 3689 , - 2074 , - 151 , - 1616 , - 309 , - 4854 , - 4163 , - 1932 , - 1857 , - 2706 , - 3247 , - 2248 , - 3405 , - 558 , - 2331 , - 2564 , - 25 , - 3338 , - 1415 , - 2880 , - 1573 , - 1190 , - 499 , - 3196 , - 3121 , - 3970 , - 4511 , - 3512 , - 4669 , - 1822 , - 3595 , - 3828 , - 1289 , - 4602 , - 2679 , - 4144 , - 2837 , - 2454 , - 1763 , - 4460 , - 4385 , - 306 , - 847 , - 4776 , - 1005 , - 3086 , - 4859 , - 164 , - 2553 , - 938 , - 3943 , - 480 , - 4101 , - 3718 , - 3027 , - 796 , - 721 , - 1570 , - 2111 , - 1112 , - 2269 , - 4350 , - 1195 , - 1428 , - 3817 , - 2202 , - 279 , - 1744 , - 437 , - 54 , - 4291 , - 2060 , - 1985 , - 2834 , - 3375 , - 2376 , - 3533 , - 686 , - 2459 , - 2692 , - 153 , - 3466 , - 1543 , - 3008 , - 1701 , - 1318 , - 627 , - 3324 , - 3249 , - 4098 , - 4639 , - 3640 , - 4797 , - 1950 , - 3723 , - 3956 , - 1417 , - 4730 , - 2807 , - 4272 , - 2965 , - 2582 , - 1891 , - 4588 , - 4513 , - 434 , - 975 , - 4904 , - 1133 , - 3214 , - 59 , - 292 , - 2681 , - 1066 , - 4071 , - 608 , - 4229 , - 3846 , - 3155 , - 924 , - 849 , - 1698 , - 2239 , - 1240 , - 2397 , - 4478 , - 1323 , - 1556 , - 3945 , - 2330 , - 407 , - 1872 , - 565 , - 182 , - 4419 , - 2188 , - 2113 , - 2962 , - 3503 , - 2504 , - 3661 , - 814 , - 2587 , - 2820 , - 281 , - 3594 , - 1671 , - 3136 , - 1829 , - 1446 , - 755 , - 3452 , - 3377 , - 4226 , - 4767 , - 3768 , - 4925 , - 2078 , - 3851 , - 4084 , - 1545 , - 4858 , - 2935 , - 4400 , - 3093 , - 2710 , - 2019 , - 4716 , - 4641 , - 562 , - 1103 , - 104 , - 1261 , - 3342 , - 187 , - 420 , - 2809 , - 1194 , - 4199 , - 736 , - 4357 , - 3974 , - 3283 , - 1052 , - 977 , - 1826 , - 2367 , - 1368 , - 2525 , - 4606 , - 1451 , - 1684 , - 4073 , - 2458 , - 535 , - 2000 , - 693 , - 310 , - 4547 , - 2316 , - 2241 , - 3090 , - 3631 , - 2632 , - 3789 , - 942 , - 2715 , - 2948 , - 409 , - 3722 , - 1799 , - 3264 , - 1957 , - 1574 , - 883 , - 3580 , - 3505 , - 4354 , - 4895 , - 3896 , - 125 , - 2206 , - 3979 , - 4212 , - 1673 , - 58 , - 3063 , - 4528 , - 3221 , - 2838 , - 2147 , - 4844 , - 4769 , - 690 , - 1231 , - 232 , - 1389 , - 3470 , - 315 , - 548 , - 2937 , - 1322 , - 4327 , - 864 , - 4485 , - 4102 , - 3411 , - 1180 , - 1105 , - 1954 , - 2495 , - 1496 , - 2653 , - 4734 , - 1579 , - 1812 , - 4201 , - 2586 , - 663 , - 2128 , - 821 , - 438 , - 4675 , - 2444 , - 2369 , - 3218 , - 3759 , - 2760 , - 3917 , - 1070 , - 2843 , - 3076 , - 537 , - 3850 , - 1927 , - 3392 , - 2085 , - 1702 , - 1011 , - 3708 , - 3633 , - 4482 , - 95 , - 4024 , - 253 , - 2334 , - 4107 , - 4340 , - 1801 , - 186 , - 3191 , - 4656 , - 3349 , - 2966 , - 2275 , - 44 , - 4897 , - 818 , - 1359 , - 360 , - 1517 , - 3598 , - 443 , - 676 , - 3065 , - 1450 , - 4455 , - 992 , - 4613 , - 4230 , - 3539 , - 1308 , - 1233 , - 2082 , - 2623 , - 1624 , - 2781 , - 4862 , - 1707 , - 1940 , - 4329 , - 2714 , - 791 , - 2256 , - 949 , - 566 , - 4803 , - 2572 , - 2497 , - 3346 , - 3887 , - 2888 , - 4045 , - 1198 , - 2971 , - 3204 , - 665 , - 3978 , - 2055 , - 3520 , - 2213 , - 1830 , - 1139 , - 3836 , - 3761 , - 4610 , - 223 , - 4152 , - 381 , - 2462 , - 4235 , - 4468 , - 1929 , - 314 , - 3319 , - 4784 , - 3477 , - 3094 , - 2403 , - 172 , - 97 , - 946 , - 1487 , - 488 , - 1645 , - 3726 , - 571 , - 804 , - 3193 , - 1578 , - 4583 , - 1120 , - 4741 , - 4358 , - 3667 , - 1436 , - 1361 , - 2210 , - 2751 , - 1752 , - 2909 , - 62 , - 1835 , - 2068 , - 4457 , - 2842 , - 919 , - 2384 , - 1077 , - 694 , - 3 , - 2700 , - 2625 , - 3474 , - 4015 , - 3016 , - 4173 , - 1326 , - 3099 , - 3332 , - 793 , - 4106 , - 2183 , - 3648 , - 2341 , - 1958 , - 1267 , - 3964 , - 3889 , - 4738 , - 351 , - 4280 , - 509 , - 2590 , - 4363 , - 4596 , - 2057 , - 442 , - 3447 , - 4912 , - 3605 , - 3222 , - 2531 , - 300 , - 225 , - 1074 , - 1615 , - 616 , - 1773 , - 3854 , - 699 , - 932 , - 3321 , - 1706 , - 4711 , - 1248 , - 4869 , - 4486 , - 3795 , - 1564 , - 1489 , - 2338 , - 2879 , - 1880 , - 3037 , - 190 , - 1963 , - 2196 , - 4585 , - 2970 , - 1047 , - 2512 , - 1205 , - 822 , - 131 , - 2828 , - 2753 , - 3602 , - 4143 , - 3144 , - 4301 , - 1454 , - 3227 , - 3460 , - 921 , - 4234 , - 2311 , - 3776 , - 2469 , - 2086 , - 1395 , - 4092 , - 4017 , - 4866 , - 479 , - 4408 , - 637 , - 2718 , - 4491 , - 4724 , - 2185 , - 570 , - 3575 , - 112 , - 3733 , - 3350 , - 2659 , - 428 , - 353 , - 1202 , - 1743 , - 744 , - 1901 , - 3982 , - 827 , - 1060 , - 3449 , - 1834 , - 4839 , - 1376 , - 69 , - 4614 , - 3923 , - 1692 , - 1617 , - 2466 , - 3007 , - 2008 , - 3165 , - 318 , - 2091 , - 2324 , - 4713 , - 3098 , - 1175 , - 2640 , - 1333 , - 950 , - 259 , - 2956 , - 2881 , - 3730 , - 4271 , - 3272 , - 4429 , - 1582 , - 3355 , - 3588 , - 1049 , - 4362 , - 2439 , - 3904 , - 2597 , - 2214 , - 1523 , - 4220 , - 4145 , - 66 , - 607 , - 4536 , - 765 , - 2846 , - 4619 , - 4852 , - 2313 , - 698 , - 3703 , - 240 , - 3861 , - 3478 , - 2787 , - 556 , - 481 , - 1330 , - 1871 , - 872 , - 2029 , - 4110 , - 955 , - 1188 , - 3577 , - 1962 , - 39 , - 1504 , - 197 , - 4742 , - 4051 , - 1820 , - 1745 , - 2594 , - 3135 , - 2136 , - 3293 , - 446 , - 2219 , - 2452 , - 4841 , - 3226 , - 1303 , - 2768 , - 1461 , - 1078 , - 387 , - 3084 , - 3009 , - 3858 , - 4399 , - 3400 , - 4557 , - 1710 , - 3483 , - 3716 , - 1177 , - 4490 , - 2567 , - 4032 , - 2725 , - 2342 , - 1651 , - 4348 , - 4273 , - 194 , - 735 , - 4664 , - 893 , - 2974 , - 4747 , - 52 , - 2441 , - 826 , - 3831 , - 368 , - 3989 , - 3606 , - 2915 , - 684 , - 609 , - 1458 , - 1999 , - 1000 , - 2157 , - 4238 , - 1083 , - 1316 , - 3705 , - 2090 , - 167 , - 1632 , - 325 , - 4870 , - 4179 , - 1948 , - 1873 , - 2722 , - 3263 , - 2264 , - 3421 , - 574 , - 2347 , - 2580 , - 41 , - 3354 , - 1431 , - 2896 , - 1589 , - 1206 , - 515 , - 3212 , - 3137 , - 3986 , - 4527 , - 3528 , - 4685 , - 1838 , - 3611 , - 3844 , - 1305 , - 4618 , - 2695 , - 4160 , - 2853 , - 2470 , - 1779 , - 4476 , - 4401 , - 322 , - 863 , - 4792 , - 1021 , - 3102 , - 4875 , - 180 , - 2569 , - 954 , - 3959 , - 496 , - 4117 , - 3734 , - 3043 , - 812 , - 737 , - 1586 , - 2127 , - 1128 , - 2285 , - 4366 , - 1211 , - 1444 , - 3833 , - 2218 , - 295 , - 1760 , - 453 , - 70 , - 4307 , - 2076 , - 2001 , - 2850 , - 3391 , - 2392 , - 3549 , - 702 , - 2475 , - 2708 , - 169 , - 3482 , - 1559 , - 3024 , - 1717 , - 1334 , - 643 , - 3340 , - 3265 , - 4114 , - 4655 , - 3656 , - 4813 , - 1966 , - 3739 , - 3972 , - 1433 , - 4746 , - 2823 , - 4288 , - 2981 , - 2598 , - 1907 , - 4604 , - 4529 , - 450 , - 991 , - 4920 , - 1149 , - 3230 , - 75 , - 308 , - 2697 , - 1082 , - 4087 , - 624 , - 4245 , - 3862 , - 3171 , - 940 , - 865 , - 1714 , - 2255 , - 1256 , - 2413 , - 4494 , - 1339 , - 1572 , - 3961 , - 2346 , - 423 , - 1888 , - 581 , - 198 , - 4435 , - 2204 , - 2129 , - 2978 , - 3519 , - 2520 , - 3677 , - 830 , - 2603 , - 2836 , - 297 , - 3610 , - 1687 , - 3152 , - 1845 , - 1462 , - 771 , - 3468 , - 3393 , - 4242 , - 4783 , - 3784 , - 13 , - 2094 , - 3867 , - 4100 , - 1561 , - 4874 , - 2951 , - 4416 , - 3109 , - 2726 , - 2035 , - 4732 , - 4657 , - 578 , - 1119 , - 120 , - 1277 , - 3358 , - 203 , - 436 , - 2825 , - 1210 , - 4215 , - 752 , - 4373 , - 3990 , - 3299 , - 1068 , - 993 , - 1842 , - 2383 , - 1384 , - 2541 , - 4622 , - 1467 , - 1700 , - 4089 , - 2474 , - 551 , - 2016 , - 709 , - 326 , - 4563 , - 2332 , - 2257 , - 3106 , - 3647 , - 2648 , - 3805 , - 958 , - 2731 , - 2964 , - 425 , - 3738 , - 1815 , - 3280 , - 1973 , - 1590 , - 899 , - 3596 , - 3521 , - 4370 , - 4911 , - 3912 , - 141 , - 2222 , - 3995 , - 4228 , - 1689 , - 74 , - 3079 , - 4544 , - 3237 , - 2854 , - 2163 , - 4860 , - 4785 , - 706 , - 1247 , - 248 , - 1405 , - 3486 , - 331 , - 564 , - 2953 , - 1338 , - 4343 , - 880 , - 4501 , - 4118 , - 3427 , - 1196 , - 1121 , - 1970 , - 2511 , - 1512 , - 2669 , - 4750 , - 1595 , - 1828 , - 4217 , - 2602 , - 679 , - 2144 , - 837 , - 454 , - 4691 , - 2460 , - 2385 , - 3234 , - 3775 , - 2776 , - 3933 , - 1086 , - 2859 , - 3092 , - 553 , - 3866 , - 1943 , - 3408 , - 2101 , - 1718 , - 1027 , - 3724 , - 3649 , - 4498 , - 111 , - 4040 , - 269 , - 2350 , - 4123 , - 4356 , - 1817 , - 202 , - 3207 , - 4672 , - 3365 , - 2982 , - 2291 , - 60 , - 4913 , - 834 , - 1375 , - 376 , - 1533 , - 3614 , - 459 , - 692 , - 3081 , - 1466 , - 4471 , - 1008 , - 4629 , - 4246 , - 3555 , - 1324 , - 1249 , - 2098 , - 2639 , - 1640 , - 2797 , - 4878 , - 1723 , - 1956 , - 4345 , - 2730 , - 807 , - 2272 , - 965 , - 582 , - 4819 , - 2588 , - 2513 , - 3362 , - 3903 , - 2904 , - 4061 , - 1214 , - 2987 , - 3220 , - 681 , - 3994 , - 2071 , - 3536 , - 2229 , - 1846 , - 1155 , - 3852 , - 3777 , - 4626 , - 239 , - 4168 , - 397 , - 2478 , - 4251 , - 4484 , - 1945 , - 330 , - 3335 , - 4800 , - 3493 , - 3110 , - 2419 , - 188 , - 113 , - 962 , - 1503 , - 504 , - 1661 , - 3742 , - 587 , - 820 , - 3209 , - 1594 , - 4599 , - 1136 , - 4757 , - 4374 , - 3683 , - 1452 , - 1377 , - 2226 , - 2767 , - 1768 , - 2925 , - 78 , - 1851 , - 2084 , - 4473 , - 2858 , - 935 , - 2400 , - 1093 , - 710 , - 19 , - 2716 , - 2641 , - 3490 , - 4031 , - 3032 , - 4189 , - 1342 , - 3115 , - 3348 , - 809 , - 4122 , - 2199 , - 3664 , - 2357 , - 1974 , - 1283 , - 3980 , - 3905 , - 4754 , - 367 , - 4296 , - 525 , - 2606 , - 4379 , - 4612 , - 2073 , - 458 , - 3463 , - 0 , - 4489 , - 4454 , - 3015 , - 796 , - 917 , - 4002 , - 3187 , - 4088 , - 4833 , - 1054 , - 863 , - 4884 , - 1261 , - 602 , - 1035 , - 3184 , - 185 , - 2646 , - 3703 , - 3980 , - 1605 , - 2194 , - 3875 , - 2280 , - 529 , - 4238 , - 1551 , - 3076 , - 1949 , - 3786 , - 1723 , - 1376 , - 873 , - 838 , - 4391 , - 2172 , - 2293 , - 386 , - 4563 , - 472 , - 1217 , - 2430 , - 2239 , - 1268 , - 2637 , - 1978 , - 2411 , - 4560 , - 1561 , - 4022 , - 87 , - 364 , - 2981 , - 3570 , - 259 , - 3656 , - 1905 , - 622 , - 2927 , - 4452 , - 3325 , - 170 , - 3099 , - 2752 , - 2249 , - 2214 , - 775 , - 3548 , - 3669 , - 1762 , - 947 , - 1848 , - 2593 , - 3806 , - 3615 , - 2644 , - 4013 , - 3354 , - 3787 , - 944 , - 2937 , - 406 , - 1463 , - 1740 , - 4357 , - 4946 , - 1635 , - 40 , - 3281 , - 1998 , - 4303 , - 836 , - 4701 , - 1546 , - 4475 , - 4128 , - 3625 , - 3590 , - 2151 , - 4924 , - 53 , - 3138 , - 2323 , - 3224 , - 3969 , - 190 , - 4991 , - 4020 , - 397 , - 4730 , - 171 , - 2320 , - 4313 , - 1782 , - 2839 , - 3116 , - 741 , - 1330 , - 3011 , - 1416 , - 4657 , - 3374 , - 687 , - 2212 , - 1085 , - 2922 , - 859 , - 512 , - 9 , - 4966 , - 3527 , - 1308 , - 1429 , - 4514 , - 3699 , - 4600 , - 353 , - 1566 , - 1375 , - 404 , - 1773 , - 1114 , - 1547 , - 3696 , - 697 , - 3158 , - 4215 , - 4492 , - 2117 , - 2706 , - 4387 , - 2792 , - 1041 , - 4750 , - 2063 , - 3588 , - 2461 , - 4298 , - 2235 , - 1888 , - 1385 , - 1350 , - 4903 , - 2684 , - 2805 , - 898 , - 83 , - 984 , - 1729 , - 2942 , - 2751 , - 1780 , - 3149 , - 2490 , - 2923 , - 80 , - 2073 , - 4534 , - 599 , - 876 , - 3493 , - 4082 , - 771 , - 4168 , - 2417 , - 1134 , - 3439 , - 4964 , - 3837 , - 682 , - 3611 , - 3264 , - 2761 , - 2726 , - 1287 , - 4060 , - 4181 , - 2274 , - 1459 , - 2360 , - 3105 , - 4318 , - 4127 , - 3156 , - 4525 , - 3866 , - 4299 , - 1456 , - 3449 , - 918 , - 1975 , - 2252 , - 4869 , - 466 , - 2147 , - 552 , - 3793 , - 2510 , - 4815 , - 1348 , - 221 , - 2058 , - 4987 , - 4640 , - 4137 , - 4102 , - 2663 , - 444 , - 565 , - 3650 , - 2835 , - 3736 , - 4481 , - 702 , - 511 , - 4532 , - 909 , - 250 , - 683 , - 2832 , - 4825 , - 2294 , - 3351 , - 3628 , - 1253 , - 1842 , - 3523 , - 1928 , - 177 , - 3886 , - 1199 , - 2724 , - 1597 , - 3434 , - 1371 , - 1024 , - 521 , - 486 , - 4039 , - 1820 , - 1941 , - 34 , - 4211 , - 120 , - 865 , - 2078 , - 1887 , - 916 , - 2285 , - 1626 , - 2059 , - 4208 , - 1209 , - 3670 , - 4727 , - 12 , - 2629 , - 3218 , - 4899 , - 3304 , - 1553 , - 270 , - 2575 , - 4100 , - 2973 , - 4810 , - 2747 , - 2400 , - 1897 , - 1862 , - 423 , - 3196 , - 3317 , - 1410 , - 595 , - 1496 , - 2241 , - 3454 , - 3263 , - 2292 , - 3661 , - 3002 , - 3435 , - 592 , - 2585 , - 54 , - 1111 , - 1388 , - 4005 , - 4594 , - 1283 , - 4680 , - 2929 , - 1646 , - 3951 , - 484 , - 4349 , - 1194 , - 4123 , - 3776 , - 3273 , - 3238 , - 1799 , - 4572 , - 4693 , - 2786 , - 1971 , - 2872 , - 3617 , - 4830 , - 4639 , - 3668 , - 45 , - 4378 , - 4811 , - 1968 , - 3961 , - 1430 , - 2487 , - 2764 , - 389 , - 978 , - 2659 , - 1064 , - 4305 , - 3022 , - 335 , - 1860 , - 733 , - 2570 , - 507 , - 160 , - 4649 , - 4614 , - 3175 , - 956 , - 1077 , - 4162 , - 3347 , - 4248 , - 1 , - 1214 , - 1023 , - 52 , - 1421 , - 762 , - 1195 , - 3344 , - 345 , - 2806 , - 3863 , - 4140 , - 1765 , - 2354 , - 4035 , - 2440 , - 689 , - 4398 , - 1711 , - 3236 , - 2109 , - 3946 , - 1883 , - 1536 , - 1033 , - 998 , - 4551 , - 2332 , - 2453 , - 546 , - 4723 , - 632 , - 1377 , - 2590 , - 2399 , - 1428 , - 2797 , - 2138 , - 2571 , - 4720 , - 1721 , - 4182 , - 247 , - 524 , - 3141 , - 3730 , - 419 , - 3816 , - 2065 , - 782 , - 3087 , - 4612 , - 3485 , - 330 , - 3259 , - 2912 , - 2409 , - 2374 , - 935 , - 3708 , - 3829 , - 1922 , - 1107 , - 2008 , - 2753 , - 3966 , - 3775 , - 2804 , - 4173 , - 3514 , - 3947 , - 1104 , - 3097 , - 566 , - 1623 , - 1900 , - 4517 , - 114 , - 1795 , - 200 , - 3441 , - 2158 , - 4463 , - 996 , - 4861 , - 1706 , - 4635 , - 4288 , - 3785 , - 3750 , - 2311 , - 92 , - 213 , - 3298 , - 2483 , - 3384 , - 4129 , - 350 , - 159 , - 4180 , - 557 , - 4890 , - 331 , - 2480 , - 4473 , - 1942 , - 2999 , - 3276 , - 901 , - 1490 , - 3171 , - 1576 , - 4817 , - 3534 , - 847 , - 2372 , - 1245 , - 3082 , - 1019 , - 672 , - 169 , - 134 , - 3687 , - 1468 , - 1589 , - 4674 , - 3859 , - 4760 , - 513 , - 1726 , - 1535 , - 564 , - 1933 , - 1274 , - 1707 , - 3856 , - 857 , - 3318 , - 4375 , - 4652 , - 2277 , - 2866 , - 4547 , - 2952 , - 1201 , - 4910 , - 2223 , - 3748 , - 2621 , - 4458 , - 2395 , - 2048 , - 1545 , - 1510 , - 71 , - 2844 , - 2965 , - 1058 , - 243 , - 1144 , - 1889 , - 3102 , - 2911 , - 1940 , - 3309 , - 2650 , - 3083 , - 240 , - 2233 , - 4694 , - 759 , - 1036 , - 3653 , - 4242 , - 931 , - 4328 , - 2577 , - 1294 , - 3599 , - 132 , - 3997 , - 842 , - 3771 , - 3424 , - 2921 , - 2886 , - 1447 , - 4220 , - 4341 , - 2434 , - 1619 , - 2520 , - 3265 , - 4478 , - 4287 , - 3316 , - 4685 , - 4026 , - 4459 , - 1616 , - 3609 , - 1078 , - 2135 , - 2412 , - 37 , - 626 , - 2307 , - 712 , - 3953 , - 2670 , - 4975 , - 1508 , - 381 , - 2218 , - 155 , - 4800 , - 4297 , - 4262 , - 2823 , - 604 , - 725 , - 3810 , - 2995 , - 3896 , - 4641 , - 862 , - 671 , - 4692 , - 1069 , - 410 , - 843 , - 2992 , - 4985 , - 2454 , - 3511 , - 3788 , - 1413 , - 2002 , - 3683 , - 2088 , - 337 , - 4046 , - 1359 , - 2884 , - 1757 , - 3594 , - 1531 , - 1184 , - 681 , - 646 , - 4199 , - 1980 , - 2101 , - 194 , - 4371 , - 280 , - 1025 , - 2238 , - 2047 , - 1076 , - 2445 , - 1786 , - 2219 , - 4368 , - 1369 , - 3830 , - 4887 , - 172 , - 2789 , - 3378 , - 67 , - 3464 , - 1713 , - 430 , - 2735 , - 4260 , - 3133 , - 4970 , - 2907 , - 2560 , - 2057 , - 2022 , - 583 , - 3356 , - 3477 , - 1570 , - 755 , - 1656 , - 2401 , - 3614 , - 3423 , - 2452 , - 3821 , - 3162 , - 3595 , - 752 , - 2745 , - 214 , - 1271 , - 1548 , - 4165 , - 4754 , - 1443 , - 4840 , - 3089 , - 1806 , - 4111 , - 644 , - 4509 , - 1354 , - 4283 , - 3936 , - 3433 , - 3398 , - 1959 , - 4732 , - 4853 , - 2946 , - 2131 , - 3032 , - 3777 , - 4990 , - 4799 , - 3828 , - 205 , - 4538 , - 4971 , - 2128 , - 4121 , - 1590 , - 2647 , - 2924 , - 549 , - 1138 , - 2819 , - 1224 , - 4465 , - 3182 , - 495 , - 2020 , - 893 , - 2730 , - 667 , - 320 , - 4809 , - 4774 , - 3335 , - 1116 , - 1237 , - 4322 , - 3507 , - 4408 , - 161 , - 1374 , - 1183 , - 212 , - 1581 , - 922 , - 1355 , - 3504 , - 505 , - 2966 , - 4023 , - 4300 , - 1925 , - 2514 , - 4195 , - 2600 , - 849 , - 4558 , - 1871 , - 3396 , - 2269 , - 4106 , - 2043 , - 1696 , - 1193 , - 1158 , - 4711 , - 2492 , - 2613 , - 706 , - 4883 , - 792 , - 1537 , - 2750 , - 2559 , - 1588 , - 2957 , - 2298 , - 2731 , - 4880 , - 1881 , - 4342 , - 407 , - 684 , - 3301 , - 3890 , - 579 , - 3976 , - 2225 , - 942 , - 3247 , - 4772 , - 3645 , - 490 , - 3419 , - 3072 , - 2569 , - 2534 , - 1095 , - 3868 , - 3989 , - 2082 , - 1267 , - 2168 , - 2913 , - 4126 , - 3935 , - 2964 , - 4333 , - 3674 , - 4107 , - 1264 , - 3257 , - 726 , - 1783 , - 2060 , - 4677 , - 274 , - 1955 , - 360 , - 3601 , - 2318 , - 4623 , - 1156 , - 29 , - 1866 , - 4795 , - 4448 , - 3945 , - 3910 , - 2471 , - 252 , - 373 , - 3458 , - 2643 , - 3544 , - 4289 , - 510 , - 319 , - 4340 , - 717 , - 58 , - 491 , - 2640 , - 4633 , - 2102 , - 3159 , - 3436 , - 1061 , - 1650 , - 3331 , - 1736 , - 4977 , - 3694 , - 1007 , - 2532 , - 1405 , - 3242 , - 1179 , - 832 , - 329 , - 294 , - 3847 , - 1628 , - 1749 , - 4834 , - 4019 , - 4920 , - 673 , - 1886 , - 1695 , - 724 , - 2093 , - 1434 , - 1867 , - 4016 , - 1017 , - 3478 , - 4535 , - 4812 , - 2437 , - 3026 , - 4707 , - 3112 , - 1361 , - 78 , - 2383 , - 3908 , - 2781 , - 4618 , - 2555 , - 2208 , - 1705 , - 1670 , - 231 , - 3004 , - 3125 , - 1218 , - 403 , - 1304 , - 2049 , - 3262 , - 3071 , - 2100 , - 3469 , - 2810 , - 3243 , - 400 , - 2393 , - 4854 , - 919 , - 1196 , - 3813 , - 4402 , - 1091 , - 4488 , - 2737 , - 1454 , - 3759 , - 292 , - 4157 , - 1002 , - 3931 , - 3584 , - 3081 , - 3046 , - 1607 , - 4380 , - 4501 , - 2594 , - 1779 , - 2680 , - 3425 , - 4638 , - 4447 , - 3476 , - 4845 , - 4186 , - 4619 , - 1776 , - 3769 , - 1238 , - 2295 , - 2572 , - 197 , - 786 , - 2467 , - 872 , - 4113 , - 2830 , - 143 , - 1668 , - 541 , - 2378 , - 315 , - 4960 , - 4457 , - 4422 , - 2983 , - 764 , - 885 , - 3970 , - 3155 , - 4056 , - 4801 , - 1022 , - 831 , - 4852 , - 1229 , - 570 , - 1003 , - 3152 , - 153 , - 2614 , - 3671 , - 3948 , - 1573 , - 2162 , - 3843 , - 2248 , - 497 , - 4206 , - 1519 , - 3044 , - 1917 , - 3754 , - 1691 , - 1344 , - 841 , - 806 , - 4359 , - 2140 , - 2261 , - 354 , - 4531 , - 440 , - 1185 , - 2398 , - 2207 , - 1236 , - 2605 , - 1946 , - 2379 , - 4528 , - 1529 , - 3990 , - 55 , - 332 , - 2949 , - 3538 , - 227 , - 3624 , - 1873 , - 590 , - 2895 , - 4420 , - 3293 , - 138 , - 3067 , - 2720 , - 2217 , - 2182 , - 743 , - 3516 , - 3637 , - 1730 , - 915 , - 1816 , - 2561 , - 3774 , - 3583 , - 2612 , - 3981 , - 3322 , - 3755 , - 912 , - 2905 , - 374 , - 1431 , - 1708 , - 4325 , - 4914 , - 1603 , - 8 , - 3249 , - 1966 , - 4271 , - 804 , - 4669 , - 1514 , - 4443 , - 4096 , - 3593 , - 3558 , - 2119 , - 4892 , - 21 , - 3106 , - 2291 , - 3192 , - 3937 , - 158 , - 4959 , - 3988 , - 365 , - 4698 , - 139 , - 2288 , - 4281 , - 1750 , - 2807 , - 3084 , - 709 , - 1298 , - 2979 , - 1384 , - 4625 , - 3342 , - 655 , - 2180 , - 1053 , - 2890 , - 827 , - 480 , - 4969 , - 4934 , - 3495 , - 1276 , - 1397 , - 4482 , - 3667 , - 4568 , - 321 , - 1534 , - 1343 , - 372 , - 1741 , - 1082 , - 1515 , - 3664 , - 665 , - 3126 , - 4183 , - 4460 , - 2085 , - 2674 , - 4355 , - 2760 , - 1009 , - 4718 , - 2031 , - 3556 , - 2429 , - 4266 , - 2203 , - 1856 , - 1353 , - 1318 , - 4871 , - 2652 , - 2773 , - 866 , - 51 , - 952 , - 1697 , - 2910 , - 2719 , - 1748 , - 3117 , - 2458 , - 2891 , - 48 , - 2041 , - 4502 , - 567 , - 844 , - 3461 , - 4050 , - 739 , - 4136 , - 2385 , - 1102 , - 3407 , - 4932 , - 3805 , - 650 , - 3579 , - 3232 , - 2729 , - 2694 , - 1255 , - 4028 , - 4149 , - 2242 , - 1427 , - 2328 , - 3073 , - 4286 , - 4095 , - 3124 , - 4493 , - 3834 , - 4267 , - 1424 , - 3417 , - 886 , - 1943 , - 2220 , - 4837 , - 434 , - 2115 , - 520 , - 3761 , - 2478 , - 4783 , - 1316 , - 189 , - 2026 , - 4955 , - 4608 , - 4105 , - 4070 , - 2631 , - 412 , - 533 , - 3618 , - 2803 , - 3704 , - 4449 , - 670 , - 479 , - 4500 , - 877 , - 218 , - 651 , - 2800 , - 4793 , - 2262 , - 3319 , - 3596 , - 1221 , - 1810 , - 3491 , - 1896 , - 145 , - 3854 , - 1167 , - 2692 , - 1565 , - 3402 , - 1339 , - 992 , - 489 , - 454 , - 4007 , - 1788 , - 1909 , - 2 , - 4179 , - 88 , - 833 , - 2046 , - 1855 , - 884 , - 2253 , - 1594 , - 2027 , - 4176 , - 1177 , - 3638 , - 4695 , - 4972 , - 2597 , - 3186 , - 4867 , - 3272 , - 1521 , - 238 , - 2543 , - 4068 , - 2941 , - 4778 , - 2715 , - 2368 , - 1865 , - 1830 , - 391 , - 3164 , - 3285 , - 1378 , - 563 , - 1464 , - 2209 , - 3422 , - 3231 , - 2260 , - 3629 , - 2970 , - 3403 , - 560 , - 2553 , - 22 , - 1079 , - 1356 , - 3973 , - 4562 , - 1251 , - 4648 , - 2897 , - 1614 , - 3919 , - 452 , - 4317 , - 1162 , - 4091 , - 3744 , - 3241 , - 3206 , - 1767 , - 4540 , - 4661 , - 2754 , - 1939 , - 2840 , - 3585 , - 4798 , - 4607 , - 3636 , - 13 , - 4346 , - 4779 , - 1936 , - 3929 , - 1398 , - 2455 , - 2732 , - 357 , - 946 , - 2627 , - 1032 , - 4273 , - 2990 , - 303 , - 1828 , - 701 , - 2538 , - 475 , - 128 , - 4617 , - 4582 , - 3143 , - 924 , - 1045 , - 4130 , - 3315 , - 4216 , - 4961 , - 1182 , - 991 , - 20 , - 1389 , - 730 , - 1163 , - 3312 , - 313 , - 2774 , - 3831 , - 4108 , - 1733 , - 2322 , - 4003 , - 2408 , - 657 , - 4366 , - 1679 , - 3204 , - 2077 , - 3914 , - 1851 , - 1504 , - 1001 , - 966 , - 4519 , - 2300 , - 2421 , - 514 , - 4691 , - 600 , - 1345 , - 2558 , - 2367 , - 1396 , - 2765 , - 2106 , - 2539 , - 4688 , - 1689 , - 4150 , - 215 , - 492 , - 3109 , - 3698 , - 387 , - 3784 , - 2033 , - 750 , - 3055 , - 4580 , - 3453 , - 298 , - 3227 , - 2880 , - 2377 , - 2342 , - 903 , - 3676 , - 3797 , - 1890 , - 1075 , - 1976 , - 2721 , - 3934 , - 3743 , - 2772 , - 4141 , - 3482 , - 3915 , - 1072 , - 3065 , - 534 , - 1591 , - 1868 , - 4485 , - 82 , - 1763 , - 168 , - 3409 , - 2126 , - 4431 , - 964 , - 4829 , - 1674 , - 4603 , - 4256 , - 3753 , - 3718 , - 2279 , - 60 , - 181 , - 3266 , - 2451 , - 3352 , - 4097 , - 318 , - 127 , - 4148 , - 525 , - 4858 , - 299 , - 2448 , - 4441 , - 1910 , - 2967 , - 3244 , - 869 , - 1458 , - 3139 , - 1544 , - 4785 , - 3502 , - 815 , - 2340 , - 1213 , - 3050 , - 987 , - 640 , - 137 , - 102 , - 3655 , - 1436 , - 1557 , - 4642 , - 3827 , - 4728 , - 481 , - 1694 , - 1503 , - 532 , - 1901 , - 1242 , - 1675 , - 3824 , - 825 , - 3286 , - 4343 , - 4620 , - 2245 , - 2834 , - 4515 , - 2920 , - 1169 , - 4878 , - 2191 , - 3716 , - 2589 , - 4426 , - 2363 , - 2016 , - 1513 , - 1478 , - 39 , - 2812 , - 2933 , - 1026 , - 211 , - 1112 , - 1857 , - 3070 , - 2879 , - 1908 , - 3277 , - 2618 , - 3051 , - 208 , - 2201 , - 4662 , - 727 , - 1004 , - 3621 , - 4210 , - 899 , - 4296 , - 2545 , - 1262 , - 3567 , - 100 , - 3965 , - 810 , - 3739 , - 3392 , - 2889 , - 2854 , - 1415 , - 4188 , - 4309 , - 2402 , - 1587 , - 2488 , - 3233 , - 4446 , - 4255 , - 3284 , - 4653 , - 3994 , - 4427 , - 1584 , - 3577 , - 1046 , - 2103 , - 2380 , - 5 , - 594 , - 2275 , - 680 , - 3921 , - 2638 , - 4943 , - 1476 , - 349 , - 2186 , - 123 , - 4768 , - 4265 , - 4230 , - 2791 , - 572 , - 693 , - 3778 , - 2963 , - 3864 , - 4609 , - 830 , - 639 , - 4660 , - 1037 , - 378 , - 811 , - 2960 , - 4953 , - 2422 , - 3479 , - 3756 , - 1381 , - 1970 , - 3651 , - 2056 , - 305 , - 4014 , - 1327 , - 2852 , - 1725 , - 3562 , - 1499 , - 1152 , - 649 , - 614 , - 4167 , - 1948 , - 2069 , - 162 , - 4339 , - 248 , - 993 , - 2206 , - 2015 , - 1044 , - 2413 , - 1754 , - 2187 , - 4336 , - 1337 , - 3798 , - 4855 , - 140 , - 2757 , - 3346 , - 35 , - 3432 , - 1681 , - 398 , - 2703 , - 4228 , - 3101 , - 4938 , - 2875 , - 2528 , - 2025 , - 1990 , - 551 , - 3324 , - 3445 , - 1538 , - 723 , - 1624 , - 2369 , - 3582 , - 3391 , - 2420 , - 3789 , - 3130 , - 3563 , - 720 , - 2713 , - 182 , - 1239 , - 1516 , - 4133 , - 4722 , - 1411 , - 4808 , - 3057 , - 1774 , - 4079 , - 612 , - 4477 , - 1322 , - 4251 , - 3904 , - 3401 , - 3366 , - 1927 , - 4700 , - 4821 , - 2914 , - 2099 , - 3000 , - 3745 , - 4958 , - 4767 , - 3796 , - 173 , - 4506 , - 4939 , - 2096 , - 4089 , - 1558 , - 2615 , - 2892 , - 517 , - 1106 , - 2787 , - 1192 , - 4433 , - 3150 , - 463 , - 1988 , - 861 , - 2698 , - 635 , - 288 , - 4777 , - 4742 , - 3303 , - 1084 , - 1205 , - 4290 , - 3475 , - 4376 , - 129 , - 1342 , - 1151 , - 180 , - 1549 , - 890 , - 1323 , - 3472 , - 473 , - 2934 , - 3991 , - 4268 , - 1893 , - 2482 , - 4163 , - 2568 , - 817 , - 4526 , - 1839 , - 3364 , - 2237 , - 4074 , - 2011 , - 1664 , - 1161 , - 1126 , - 4679 , - 2460 , - 2581 , - 674 , - 4851 , - 760 , - 1505 , - 2718 , - 2527 , - 1556 , - 2925 , - 2266 , - 2699 , - 4848 , - 1849 , - 4310 , - 375 , - 652 , - 3269 , - 3858 , - 547 , - 3944 , - 2193 , - 910 , - 3215 , - 4740 , - 3613 , - 458 , - 3387 , - 3040 , - 2537 , - 2502 , - 1063 , - 3836 , - 3957 , - 2050 , - 1235 , - 2136 , - 2881 , - 4094 , - 3903 , - 2932 , - 4301 , - 3642 , - 4075 , - 1232 , - 3225 , - 694 , - 1751 , - 2028 , - 4645 , - 242 , - 1923 , - 328 , - 3569 , - 2286 , - 4591 , - 1124 , - 4989 , - 1834 , - 4763 , - 4416 , - 3913 , - 3878 , - 2439 , - 220 , - 341 , - 3426 , - 2611 , - 3512 , - 4257 , - 478 , - 287 , - 4308 , - 685 , - 26 , - 459 , - 2608 , - 4601 , - 2070 , - 3127 , - 3404 , - 1029 , - 1618 , - 3299 , - 1704 , - 4945 , - 3662 , - 975 , - 2500 , - 1373 , - 3210 , - 1147 , - 800 , - 297 , - 262 , - 3815 , - 1596 , - 1717 , - 4802 , - 3987 , - 4888 , - 641 , - 1854 , - 1663 , - 692 , - 2061 , - 1402 , - 1835 , - 3984 , - 985 , - 3446 , - 4503 , - 4780 , - 2405 , - 2994 , - 4675 , - 3080 , - 1329 , - 46 , - 2351 , - 3876 , - 2749 , - 4586 , - 2523 , - 2176 , - 1673 , - 1638 , - 199 , - 2972 , - 3093 , - 1186 , - 371 , - 1272 , - 2017 , - 3230 , - 3039 , - 2068 , - 3437 , - 2778 , - 3211 , - 368 , - 2361 , - 4822 , - 887 , - 1164 , - 3781 , - 4370 , - 1059 , - 4456 , - 2705 , - 1422 , - 3727 , - 260 , - 4125 , - 970 , - 3899 , - 3552 , - 3049 , - 3014 , - 1575 , - 4348 , - 4469 , - 2562 , - 1747 , - 2648 , - 3393 , - 4606 , - 4415 , - 3444 , - 4813 , - 4154 , - 4587 , - 1744 , - 3737 , - 1206 , - 2263 , - 2540 , - 165 , - 754 , - 2435 , - 840 , - 4081 , - 2798 , - 111 , - 1636 , - 509 , - 2346 , - 283 , - 4928 , - 4425 , - 4390 , - 2951 , - 732 , - 853 , - 3938 , - 3123 , - 4024 , - 4769 , - 990 , - 799 , - 4820 , - 1197 , - 538 , - 971 , - 3120 , - 121 , - 2582 , - 3639 , - 3916 , - 1541 , - 2130 , - 3811 , - 2216 , - 465 , - 4174 , - 1487 , - 3012 , - 1885 , - 3722 , - 1659 , - 1312 , - 809 , - 774 , - 4327 , - 2108 , - 2229 , - 322 , - 4499 , - 408 , - 1153 , - 2366 , - 2175 , - 1204 , - 2573 , - 1914 , - 2347 , - 4496 , - 1497 , - 3958 , - 23 , - 300 , - 2917 , - 3506 , - 195 , - 3592 , - 1841 , - 558 , - 2863 , - 4388 , - 3261 , - 106 , - 3035 , - 2688 , - 2185 , - 2150 , - 711 , - 3484 , - 3605 , - 1698 , - 883 , - 1784 , - 2529 , - 3742 , - 3551 , - 2580 , - 3949 , - 3290 , - 3723 , - 880 , - 2873 , - 342 , - 1399 , - 1676 , - 4293 , - 4882 , - 1571 , - 4968 , - 3217 , - 1934 , - 4239 , - 772 , - 4637 , - 1482 , - 4411 , - 4064 , - 3561 , - 3526 , - 2087 , - 4860 , - 4981 , - 3074 , - 2259 , - 3160 , - 3905 , - 126 , - 4927 , - 3956 , - 333 , - 4666 , - 107 , - 2256 , - 4249 , - 1718 , - 2775 , - 3052 , - 677 , - 1266 , - 2947 , - 1352 , - 4593 , - 3310 , - 623 , - 2148 , - 1021 , - 2858 , - 795 , - 448 , - 4937 , - 4902 , - 3463 , - 1244 , - 1365 , - 4450 , - 3635 , - 4536 , - 289 , - 1502 , - 1311 , - 340 , - 1709 , - 1050 , - 1483 , - 3632 , - 633 , - 3094 , - 4151 , - 4428 , - 2053 , - 2642 , - 4323 , - 2728 , - 977 , - 4686 , - 1999 , - 3524 , - 2397 , - 4234 , - 2171 , - 1824 , - 1321 , - 1286 , - 4839 , - 2620 , - 2741 , - 834 , - 19 , - 920 , - 1665 , - 2878 , - 2687 , - 1716 , - 3085 , - 2426 , - 2859 , - 16 , - 2009 , - 4470 , - 535 , - 812 , - 3429 , - 4018 , - 707 , - 4104 , - 2353 , - 1070 , - 3375 , - 4900 , - 3773 , - 618 , - 3547 , - 3200 , - 2697 , - 2662 , - 1223 , - 3996 , - 4117 , - 2210 , - 1395 , - 2296 , - 3041 , - 4254 , - 4063 , - 3092 , - 4461 , - 3802 , - 4235 , - 1392 , - 3385 , - 854 , - 1911 , - 2188 , - 4805 , - 402 , - 2083 , - 488 , - 3729 , - 2446 , - 4751 , - 1284 , - 157 , - 1994 , - 4923 , - 4576 , - 4073 , - 4038 , - 2599 , - 380 , - 501 , - 3586 , - 2771 , - 3672 , - 4417 , - 638 , - 447 , - 4468 , - 845 , - 186 , - 619 , - 2768 , - 4761 , - 2230 , - 3287 , - 3564 , - 1189 , - 1778 , - 3459 , - 1864 , - 113 , - 3822 , - 1135 , - 2660 , - 1533 , - 3370 , - 1307 , - 960 , - 457 , - 422 , - 3975 , - 1756 , - 1877 , - 4962 , - 4147 , - 56 , - 801 , - 2014 , - 1823 , - 852 , - 2221 , - 1562 , - 1995 , - 4144 , - 1145 , - 3606 , - 4663 , - 4940 , - 2565 , - 3154 , - 4835 , - 3240 , - 1489 , - 206 , - 2511 , - 4036 , - 2909 , - 4746 , - 2683 , - 2336 , - 1833 , - 1798 , - 359 , - 3132 , - 3253 , - 1346 , - 531 , - 1432 , - 2177 , - 3390 , - 3199 , - 2228 , - 3597 , - 2938 , - 3371 , - 528 , - 2521 , - 4982 , - 1047 , - 1324 , - 3941 , - 4530 , - 1219 , - 4616 , - 2865 , - 1582 , - 3887 , - 420 , - 4285 , - 1130 , - 4059 , - 3712 , - 3209 , - 3174 , - 1735 , - 4508 , - 4629 , - 2722 , - 1907 , - 2808 , - 3553 , - 4766 , - 4575 , - 3604 , - 4973 , - 4314 , - 4747 , - 1904 , - 3897 , - 1366 , - 2423 , - 2700 , - 325 , - 914 , - 2595 , - 1000 , - 4241 , - 2958 , - 271 , - 1796 , - 669 , - 2506 , - 443 , - 96 , - 4585 , - 4550 , - 3111 , - 892 , - 1013 , - 4098 , - 3283 , - 4184 , - 4929 , - 1150 , - 959 , - 4980 , - 1357 , - 698 , - 1131 , - 3280 , - 281 , - 2742 , - 3799 , - 4076 , - 1701 , - 2290 , - 3971 , - 2376 , - 625 , - 4334 , - 1647 , - 3172 , - 2045 , - 3882 , - 1819 , - 1472 , - 969 , - 934 , - 4487 , - 2268 , - 2389 , - 482 , - 4659 , - 568 , - 1313 , - 2526 , - 2335 , - 1364 , - 2733 , - 2074 , - 2507 , - 4656 , - 1657 , - 4118 , - 183 , - 460 , - 3077 , - 3666 , - 355 , - 3752 , - 2001 , - 718 , - 3023 , - 4548 , - 3421 , - 266 , - 3195 , - 2848 , - 2345 , - 2310 , - 871 , - 3644 , - 3765 , - 1858 , - 1043 , - 1944 , - 2689 , - 3902 , - 3711 , - 2740 , - 4109 , - 3450 , - 3883 , - 1040 , - 3033 , - 502 , - 1559 , - 1836 , - 4453 , - 50 , - 1731 , - 136 , - 3377 , - 2094 , - 4399 , - 932 , - 4797 , - 1642 , - 4571 , - 4224 , - 3721 , - 3686 , - 2247 , - 28 , - 149 , - 3234 , - 2419 , - 3320 , - 4065 , - 286 , - 95 , - 4116 , - 493 , - 4826 , - 267 , - 2416 , - 4409 , - 1878 , - 2935 , - 3212 , - 837 , - 1426 , - 3107 , - 1512 , - 4753 , - 3470 , - 783 , - 2308 , - 1181 , - 3018 , - 955 , - 608 , - 105 , - 70 , - 3623 , - 1404 , - 1525 , - 4610 , - 3795 , - 4696 , - 449 , - 1662 , - 1471 , - 500 , - 1869 , - 1210 , - 1643 , - 3792 , - 793 , - 3254 , - 4311 , - 4588 , - 2213 , - 2802 , - 4483 , - 2888 , - 1137 , - 4846 , - 2159 , - 3684 , - 2557 , - 4394 , - 2331 , - 1984 , - 1481 , - 1446 , - 7 , - 2780 , - 2901 , - 994 , - 179 , - 1080 , - 1825 , - 3038 , - 2847 , - 1876 , - 3245 , - 2586 , - 3019 , - 176 , - 2169 , - 4630 , - 695 , - 972 , - 3589 , - 4178 , - 867 , - 4264 , - 2513 , - 1230 , - 3535 , - 68 , - 3933 , - 778 , - 3707 , - 3360 , - 2857 , - 2822 , - 1383 , - 4156 , - 4277 , - 2370 , - 1555 , - 2456 , - 3201 , - 4414 , - 4223 , - 3252 , - 4621 , - 3962 , - 4395 , - 1552 , - 3545 , - 1014 , - 2071 , - 2348 , - 4965 , - 562 , - 2243 , - 648 , - 3889 , - 2606 , - 4911 , - 1444 , - 317 , - 2154 , - 91 , - 4736 , - 4233 , - 4198 , - 2759 , - 540 , - 661 , - 3746 , - 2931 , - 3832 , - 4577 , - 798 , - 607 , - 4628 , - 1005 , - 346 , - 779 , - 2928 , - 4921 , - 2390 , - 3447 , - 3724 , - 1349 , - 1938 , - 3619 , - 2024 , - 273 , - 3982 , - 1295 , - 2820 , - 1693 , - 3530 , - 1467 , - 1120 , - 617 , - 582 , - 4135 , - 1916 , - 2037 , - 130 , - 4307 , - 216 , - 961 , - 2174 , - 1983 , - 1012 , - 2381 , - 1722 , - 2155 , - 4304 , - 1305 , - 3766 , - 4823 , - 108 , - 2725 , - 3314 , - 3 , - 3400 , - 1649 , - 366 , - 2671 , - 4196 , - 3069 , - 4906 , - 2843 , - 2496 , - 1993 , - 1958 , - 519 , - 3292 , - 3413 , - 1506 , - 691 , - 1592 , - 2337 , - 3550 , - 3359 , - 2388 , - 3757 , - 3098 , - 3531 , - 688 , - 2681 , - 150 , - 1207 , - 1484 , - 4101 , - 4690 , - 1379 , - 4776 , - 3025 , - 1742 , - 4047 , - 580 , - 4445 , - 1290 , - 4219 , - 3872 , - 3369 , - 3334 , - 1895 , - 4668 , - 4789 , - 2882 , - 2067 , - 2968 , - 3713 , - 4926 , - 4735 , - 3764 , - 141 , - 4474 , - 4907 , - 2064 , - 4057 , - 1526 , - 2583 , - 2860 , - 485 , - 1074 , - 2755 , - 1160 , - 4401 , - 3118 , - 431 , - 1956 , - 829 , - 2666 , - 603 , - 256 , - 4745 , - 4710 , - 3271 , - 1052 , - 1173 , - 4258 , - 3443 , - 4344 , - 97 , - 1310 , - 1119 , - 148 , - 1517 , - 858 , - 1291 , - 3440 , - 441 , - 2902 , - 3959 , - 4236 , - 1861 , - 2450 , - 4131 , - 2536 , - 785 , - 4494 , - 1807 , - 3332 , - 2205 , - 4042 , - 1979 , - 1632 , - 1129 , - 1094 , - 4647 , - 2428 , - 2549 , - 642 , - 4819 , - 728 , - 1473 , - 2686 , - 2495 , - 1524 , - 2893 , - 2234 , - 2667 , - 4816 , - 1817 , - 4278 , - 343 , - 620 , - 3237 , - 3826 , - 515 , - 3912 , - 2161 , - 878 , - 3183 , - 4708 , - 3581 , - 426 , - 3355 , - 3008 , - 2505 , - 2470 , - 1031 , - 3804 , - 3925 , - 2018 , - 1203 , - 2104 , - 2849 , - 4062 , - 3871 , - 2900 , - 4269 , - 3610 , - 4043 , - 1200 , - 3193 , - 662 , - 1719 , - 1996 , - 4613 , - 210 , - 1891 , - 296 , - 3537 , - 2254 , - 4559 , - 1092 , - 4957 , - 1802 , - 4731 , - 4384 , - 3881 , - 3846 , - 2407 , - 188 , - 309 , - 3394 , - 2579 , - 3480 , - 4225 , - 446 , - 255 , - 4276 , - 653 , - 4986 , - 427 , - 2576 , - 4569 , - 2038 , - 3095 , - 3372 , - 997 , - 1586 , - 3267 , - 1672 , - 4913 , - 3630 , - 943 , - 2468 , - 1341 , - 3178 , - 1115 , - 768 , - 265 , - 230 , - 3783 , - 1564 , - 1685 , - 4770 , - 3955 , - 4856 , - 609 , - 1822 , - 1631 , - 660 , - 2029 , - 1370 , - 1803 , - 3952 , - 953 , - 3414 , - 4471 , - 4748 , - 2373 , - 2962 , - 4643 , - 3048 , - 1297 , - 14 , - 2319 , - 3844 , - 2717 , - 4554 , - 2491 , - 2144 , - 1641 , - 1606 , - 167 , - 2940 , - 3061 , - 1154 , - 339 , - 1240 , - 1985 , - 3198 , - 3007 , - 2036 , - 3405 , - 2746 , - 3179 , - 336 , - 2329 , - 4790 , - 855 , - 1132 , - 3749 , - 4338 , - 1027 , - 4424 , - 2673 , - 1390 , - 3695 , - 228 , - 4093 , - 938 , - 3867 , - 3520 , - 3017 , - 2982 , - 1543 , - 4316 , - 4437 , - 2530 , - 1715 , - 2616 , - 3361 , - 4574 , - 4383 , - 3412 , - 4781 , - 4122 , - 4555 , - 1712 , - 3705 , - 1174 , - 2231 , - 2508 , - 133 , - 722 , - 2403 , - 808 , - 4049 , - 2766 , - 79 , - 1604 , - 477 , - 2314 , - 251 , - 4896 , - 4393 , - 4358 , - 2919 , - 700 , - 821 , - 3906 , - 3091 , - 3992 , - 4737 , - 958 , - 767 , - 4788 , - 1165 , - 506 , - 939 , - 3088 , - 89 , - 2550 , - 3607 , - 3884 , - 1509 , - 2098 , - 3779 , - 2184 , - 433 , - 4142 , - 1455 , - 2980 , - 1853 , - 3690 , - 1627 , - 1280 , - 777 , - 742 , - 4295 , - 2076 , - 2197 , - 290 , - 4467 , - 376 , - 1121 , - 2334 , - 2143 , - 1172 , - 2541 , - 1882 , - 2315 , - 4464 , - 1465 , - 3926 , - 4983 , - 268 , - 2885 , - 3474 , - 163 , - 3560 , - 1809 , - 526 , - 2831 , - 4356 , - 3229 , - 74 , - 3003 , - 2656 , - 2153 , - 2118 , - 679 , - 3452 , - 3573 , - 1666 , - 851 , - 1752 , - 2497 , - 3710 , - 3519 , - 2548 , - 3917 , - 3258 , - 3691 , - 848 , - 2841 , - 310 , - 1367 , - 1644 , - 4261 , - 4850 , - 1539 , - 4936 , - 3185 , - 1902 , - 4207 , - 740 , - 4605 , - 1450 , - 4379 , - 4032 , - 3529 , - 3494 , - 2055 , - 4828 , - 4949 , - 3042 , - 2227 , - 3128 , - 3873 , - 94 , - 4895 , - 3924 , - 301 , - 4634 , - 75 , - 2224 , - 4217 , - 1686 , - 2743 , - 3020 , - 645 , - 1234 , - 2915 , - 1320 , - 4561 , - 3278 , - 591 , - 2116 , - 989 , - 2826 , - 763 , - 416 , - 4905 , - 4870 , - 3431 , - 1212 , - 1333 , - 4418 , - 3603 , - 4504 , - 257 , - 1470 , - 1279 , - 308 , - 1677 , - 1018 , - 1451 , - 3600 , - 601 , - 3062 , - 4119 , - 4396 , - 2021 , - 2610 , - 4291 , - 2696 , - 945 , - 4654 , - 1967 , - 3492 , - 2365 , - 4202 , - 2139 , - 1792 , - 1289 , - 1254 , - 4807 , - 2588 , - 2709 , - 802 , - 4979 , - 888 , - 1633 , - 2846 , - 2655 , - 1684 , - 3053 , - 2394 , - 2827 , - 4976 , - 1977 , - 4438 , - 503 , - 780 , - 3397 , - 3986 , - 675 , - 4072 , - 2321 , - 1038 , - 3343 , - 4868 , - 3741 , - 586 , - 3515 , - 3168 , - 2665 , - 2630 , - 1191 , - 3964 , - 4085 , - 2178 , - 1363 , - 2264 , - 3009 , - 4222 , - 4031 , - 3060 , - 4429 , - 3770 , - 4203 , - 1360 , - 3353 , - 822 , - 1879 , - 2156 , - 4773 , - 370 , - 2051 , - 456 , - 3697 , - 2414 , - 4719 , - 1252 , - 125 , - 1962 , - 4891 , - 4544 , - 4041 , - 4006 , - 2567 , - 348 , - 469 , - 3554 , - 2739 , - 3640 , - 4385 , - 606 , - 415 , - 4436 , - 813 , - 154 , - 587 , - 2736 , - 4729 , - 2198 , - 3255 , - 3532 , - 1157 , - 1746 , - 3427 , - 1832 , - 81 , - 3790 , - 1103 , - 2628 , - 1501 , - 3338 , - 1275 , - 928 , - 425 , - 390 , - 3943 , - 1724 , - 1845 , - 4930 , - 4115 , - 24 , - 769 , - 1982 , - 1791 , - 820 , - 2189 , - 1530 , - 1963 , - 4112 , - 1113 , - 3574 , - 4631 , - 4908 , - 2533 , - 3122 , - 4803 , - 3208 , - 1457 , - 174 , - 2479 , - 4004 , - 2877 , - 4714 , - 2651 , - 2304 , - 1801 , - 1766 , - 327 , - 3100 , - 3221 , - 1314 , - 499 , - 1400 , - 2145 , - 3358 , - 3167 , - 2196 , - 3565 , - 2906 , - 3339 , - 496 , - 2489 , - 4950 , - 1015 , - 1292 , - 3909 , - 4498 , - 1187 , - 4584 , - 2833 , - 1550 , - 3855 , - 388 , - 4253 , - 1098 , - 4027 , - 3680 , - 3177 , - 3142 , - 1703 , - 4476 , - 4597 , - 2690 , - 1875 , - 2776 , - 3521 , - 4734 , - 4543 , - 3572 , - 4941 , - 4282 , - 4715 , - 1872 , - 3865 , - 1334 , - 2391 , - 2668 , - 293 , - 882 , - 2563 , - 968 , - 4209 , - 2926 , - 239 , - 1764 , - 637 , - 2474 , - 411 , - 64 , - 4553 , - 4518 , - 3079 , - 860 , - 981 , - 4066 , - 3251 , - 4152 , - 4897 , - 1118 , - 927 , - 4948 , - 1325 , - 666 , - 1099 , - 3248 , - 249 , - 2710 , - 3767 , - 4044 , - 1669 , - 2258 , - 3939 , - 2344 , - 593 , - 4302 , - 1615 , - 3140 , - 2013 , - 3850 , - 1787 , - 1440 , - 937 , - 902 , - 4455 , - 2236 , - 2357 , - 450 , - 4627 , - 536 , - 1281 , - 2494 , - 2303 , - 1332 , - 2701 , - 2042 , - 2475 , - 4624 , - 1625 , - 4086 , - 151 , - 428 , - 3045 , - 3634 , - 323 , - 3720 , - 1969 , - 686 , - 2991 , - 4516 , - 3389 , - 234 , - 3163 , - 2816 , - 2313 , - 2278 , - 839 , - 3612 , - 3733 , - 1826 , - 1011 , - 1912 , - 2657 , - 3870 , - 3679 , - 2708 , - 4077 , - 3418 , - 3851 , - 1008 , - 3001 , - 470 , - 1527 , - 1804 , - 4421 , - 18 , - 1699 , - 104 , - 3345 , - 2062 , - 4367 , - 900 , - 4765 , - 1610 , - 4539 , - 4192 , - 3689 , - 3654 , - 2215 , - 4988 , - 117 , - 3202 , - 2387 , - 3288 , - 4033 , - 254 , - 63 , - 4084 , - 461 , - 4794 , - 235 , - 2384 , - 4377 , - 1846 , - 2903 , - 3180 , - 805 , - 1394 , - 3075 , - 1480 , - 4721 , - 3438 , - 751 , - 2276 , - 1149 , - 2986 , - 923 , - 576 , - 73 , - 38 , - 3591 , - 1372 , - 1493 , - 4578 , - 3763 , - 4664 , - 417 , - 1630 , - 1439 , - 468 , - 1837 , - 1178 , - 1611 , - 3760 , - 761 , - 3222 , - 4279 , - 4556 , - 2181 , - 2770 , - 4451 , - 2856 , - 1105 , - 4814 , - 2127 , - 3652 , - 2525 , - 4362 , - 2299 , - 1952 , - 1449 , - 1414 , - 4967 , - 2748 , - 2869 , - 962 , - 147 , - 1048 , - 1793 , - 3006 , - 2815 , - 1844 , - 3213 , - 2554 , - 2987 , - 144 , - 2137 , - 4598 , - 663 , - 940 , - 3557 , - 4146 , - 835 , - 4232 , - 2481 , - 1198 , - 3503 , - 36 , - 3901 , - 746 , - 3675 , - 3328 , - 2825 , - 2790 , - 1351 , - 4124 , - 4245 , - 2338 , - 1523 , - 2424 , - 3169 , - 4382 , - 4191 , - 3220 , - 4589 , - 3930 , - 4363 , - 1520 , - 3513 , - 982 , - 2039 , - 2316 , - 4933 , - 530 , - 2211 , - 616 , - 3857 , - 2574 , - 4879 , - 1412 , - 285 , - 2122 , - 59 , - 4704 , - 4201 , - 4166 , - 2727 , - 508 , - 629 , - 3714 , - 2899 , - 3800 , - 4545 , - 766 , - 575 , - 4596 , - 973 , - 314 , - 747 , - 2896 , - 4889 , - 2358 , - 3415 , - 3692 , - 1317 , - 1906 , - 3587 , - 1992 , - 241 , - 3950 , - 1263 , - 2788 , - 1661 , - 3498 , - 1435 , - 1088 , - 585 , - 550 , - 4103 , - 1884 , - 2005 , - 98 , - 4275 , - 184 , - 929 , - 2142 , - 1951 , - 980 , - 2349 , - 1690 , - 2123 , - 4272 , - 1273 , - 3734 , - 4791 , - 76 , - 2693 , - 3282 , - 4963 , - 3368 , - 1617 , - 334 , - 2639 , - 4164 , - 3037 , - 4874 , - 2811 , - 2464 , - 1961 , - 1926 , - 487 , - 3260 , - 3381 , - 1474 , - 659 , - 1560 , - 2305 , - 3518 , - 3327 , - 2356 , - 3725 , - 3066 , - 3499 , - 656 , - 2649 , - 118 , - 1175 , - 1452 , - 4069 , - 4658 , - 1347 , - 4744 , - 2993 , - 1710 , - 4015 , - 548 , - 4413 , - 1258 , - 4187 , - 3840 , - 3337 , - 3302 , - 1863 , - 4636 , - 4757 , - 2850 , - 2035 , - 2936 , - 3681 , - 4894 , - 4703 , - 3732 , - 109 , - 4442 , - 4875 , - 2032 , - 4025 , - 1494 , - 2551 , - 2828 , - 453 , - 1042 , - 2723 , - 1128 , - 4369 , - 3086 , - 399 , - 1924 , - 797 , - 2634 , - 571 , - 224 , - 4713 , - 4678 , - 3239 , - 1020 , - 1141 , - 4226 , - 3411 , - 4312 , - 65 , - 1278 , - 1087 , - 116 , - 1485 , - 826 , - 1259 , - 3408 , - 409 , - 2870 , - 3927 , - 4204 , - 1829 , - 2418 , - 4099 , - 2504 , - 753 , - 4462 , - 1775 , - 3300 , - 2173 , - 4010 , - 1947 , - 1600 , - 1097 , - 1062 , - 4615 , - 2396 , - 2517 , - 610 , - 4787 , - 696 , - 1441 , - 2654 , - 2463 , - 1492 , - 2861 , - 2202 , - 2635 , - 4784 , - 1785 , - 4246 , - 311 , - 588 , - 3205 , - 3794 , - 483 , - 3880 , - 2129 , - 846 , - 3151 , - 4676 , - 3549 , - 394 , - 3323 , - 2976 , - 2473 , - 2438 , - 999 , - 3772 , - 3893 , - 1986 , - 1171 , - 2072 , - 2817 , - 4030 , - 3839 , - 2868 , - 4237 , - 3578 , - 4011 , - 1168 , - 3161 , - 630 , - 1687 , - 1964 , - 4581 , - 178 , - 1859 , - 264 , - 3505 , - 2222 , - 4527 , - 1060 , - 4925 , - 1770 , - 4699 , - 4352 , - 3849 , - 3814 , - 2375 , - 156 , - 277 , - 3362 , - 2547 , - 3448 , - 4193 , - 414 , - 223 , - 4244 , - 621 , - 4954 , - 395 , - 2544 , - 4537 , - 2006 , - 3063 , - 3340 , - 965 , - 1554 , - 3235 , - 1640 , - 4881 , - 3598 , - 911 , - 2436 , - 1309 , - 3146 , - 1083 , - 736 , - 233 , - 198 , - 3751 , - 1532 , - 1653 , - 4738 , - 3923 , - 4824 , - 577 , - 1790 , - 1599 , - 628 , - 1997 , - 1338 , - 1771 , - 3920 , - 921 , - 3382 , - 4439 , - 4716 , - 2341 , - 2930 , - 4611 , - 3016 , - 1265 , - 4974 , - 2287 , - 3812 , - 2685 , - 4522 , - 2459 , - 2112 , - 1609 , - 1574 , - 135 , - 2908 , - 3029 , - 1122 , - 307 , - 1208 , - 1953 , - 3166 , - 2975 , - 2004 , - 3373 , - 2714 , - 3147 , - 304 , - 2297 , - 4758 , - 823 , - 1100 , - 3717 , - 4306 , - 995 , - 4392 , - 2641 , - 1358 , - 3663 , - 196 , - 4061 , - 906 , - 3835 , - 3488 , - 2985 , - 2950 , - 1511 , - 4284 , - 4405 , - 2498 , - 1683 , - 2584 , - 3329 , - 4542 , - 4351 , - 3380 , - 4749 , - 4090 , - 4523 , - 1680 , - 3673 , - 1142 , - 2199 , - 2476 , - 101 , - 690 , - 2371 , - 776 , - 4017 , - 2734 , - 47 , - 1572 , - 445 , - 2282 , - 219 , - 4864 , - 4361 , - 4326 , - 2887 , - 668 , - 789 , - 3874 , - 3059 , - 3960 , - 4705 , - 926 , - 735 , - 4756 , - 1133 , - 474 , - 907 , - 3056 , - 57 , - 2518 , - 3575 , - 3852 , - 1477 , - 2066 , - 3747 , - 2152 , - 401 , - 4110 , - 1423 , - 2948 , - 1821 , - 3658 , - 1595 , - 1248 , - 745 , - 710 , - 4263 , - 2044 , - 2165 , - 258 , - 4435 , - 344 , - 1089 , - 2302 , - 2111 , - 1140 , - 2509 , - 1850 , - 2283 , - 4432 , - 1433 , - 3894 , - 4951 , - 236 , - 2853 , - 3442 , - 131 , - 3528 , - 1777 , - 494 , - 2799 , - 4324 , - 3197 , - 42 , - 2971 , - 2624 , - 2121 , - 2086 , - 647 , - 3420 , - 3541 , - 1634 , - 819 , - 1720 , - 2465 , - 3678 , - 3487 , - 2516 , - 3885 , - 3226 , - 3659 , - 816 , - 2809 , - 278 , - 1335 , - 1612 , - 4229 , - 4818 , - 1507 , - 4904 , - 3153 , - 1870 , - 4175 , - 708 , - 4573 , - 1418 , - 4347 , - 4000 , - 3497 , - 3462 , - 2023 , - 4796 , - 4917 , - 3010 , - 2195 , - 3096 , - 3841 , - 62 , - 4863 , - 3892 , - 269 , - 4602 , - 43 , - 2192 , - 4185 , - 1654 , - 2711 , - 2988 , - 613 , - 1202 , - 2883 , - 1288 , - 4529 , - 3246 , - 559 , - 2084 , - 957 , - 2794 , - 731 , - 384 , - 4873 , - 4838 , - 3399 , - 1180 , - 1301 , - 4386 , - 3571 , - 4472 , - 225 , - 1438 , - 1247 , - 276 , - 1645 , - 986 , - 1419 , - 3568 , - 569 , - 3030 , - 4087 , - 4364 , - 1989 , - 2578 , - 4259 , - 2664 , - 913 , - 4622 , - 1935 , - 3460 , - 2333 , - 4170 , - 2107 , - 1760 , - 1257 , - 1222 , - 4775 , - 2556 , - 2677 , - 770 , - 4947 , - 856 , - 1601 , - 2814 , - 2623 , - 1652 , - 3021 , - 2362 , - 2795 , - 4944 , - 1945 , - 4406 , - 471 , - 748 , - 3365 , - 3954 , - 643 , - 4040 , - 2289 , - 1006 , - 3311 , - 4836 , - 3709 , - 554 , - 3483 , - 3136 , - 2633 , - 2598 , - 1159 , - 3932 , - 4053 , - 2146 , - 1331 , - 2232 , - 2977 , - 4190 , - 3999 , - 3028 , - 4397 , - 3738 , - 4171 , - 1328 , - 3321 , - 790 , - 1847 , - 2124 , - 4741 , - 338 , - 2019 , - 424 , - 3665 , - 2382 , - 4687 , - 1220 , - 93 , - 1930 , - 4859 , - 4512 , - 4009 , - 3974 , - 2535 , - 316 , - 437 , - 3522 , - 2707 , - 3608 , - 4353 , - 574 , - 383 , - 4404 , - 781 , - 122 , - 555 , - 2704 , - 4697 , - 2166 , - 3223 , - 3500 , - 1125 , - 1714 , - 3395 , - 1800 , - 49 , - 3758 , - 1071 , - 2596 , - 1469 , - 3306 , - 1243 , - 896 , - 393 , - 358 , - 3911 , - 1692 , - 1813 , - 4898 , - 4083 , - 4984 , - 737 , - 1950 , - 1759 , - 788 , - 2157 , - 1498 , - 1931 , - 4080 , - 1081 , - 3542 , - 4599 , - 4876 , - 2501 , - 3090 , - 4771 , - 3176 , - 1425 , - 142 , - 2447 , - 3972 , - 2845 , - 4682 , - 2619 , - 2272 , - 1769 , - 1734 , - 295 , - 3068 , - 3189 , - 1282 , - 467 , - 1368 , - 2113 , - 3326 , - 3135 , - 2164 , - 3533 , - 2874 , - 3307 , - 464 , - 2457 , - 4918 , - 983 , - 1260 , - 3877 , - 4466 , - 1155 , - 4552 , - 2801 , - 1518 , - 3823 , - 356 , - 4221 , - 1066 , - 3995 , - 3648 , - 3145 , - 3110 , - 1671 , - 4444 , - 4565 , - 2658 , - 1843 , - 2744 , - 3489 , - 4702 , - 4511 , - 3540 , - 4909 , - 4250 , - 4683 , - 1840 , - 3833 , - 1302 , - 2359 , - 2636 , - 261 , - 850 , - 2531 , - 936 , - 4177 , - 2894 , - 207 , - 1732 , - 605 , - 2442 , - 379 , - 32 , - 4521 , - 4486 , - 3047 , - 828 , - 949 , - 4034 , - 3219 , - 4120 , - 4865 , - 1086 , - 895 , - 4916 , - 1293 , - 634 , - 1067 , - 3216 , - 217 , - 2678 , - 3735 , - 4012 , - 1637 , - 2226 , - 3907 , - 2312 , - 561 , - 4270 , - 1583 , - 3108 , - 1981 , - 3818 , - 1755 , - 1408 , - 905 , - 870 , - 4423 , - 2204 , - 2325 , - 418 , - 4595 , - 504 , - 1249 , - 2462 , - 2271 , - 1300 , - 2669 , - 2010 , - 2443 , - 4592 , - 1593 , - 4054 , - 119 , - 396 , - 3013 , - 3602 , - 291 , - 3688 , - 1937 , - 654 , - 2959 , - 4484 , - 3357 , - 202 , - 3131 , - 2784 , - 2281 , - 2246 , - 807 , - 3580 , - 3701 , - 1794 , - 979 , - 1880 , - 2625 , - 3838 , - 3647 , - 2676 , - 4045 , - 3386 , - 3819 , - 976 , - 2969 , - 438 , - 1495 , - 1772 , - 4389 , - 4978 , - 1667 , - 72 , - 3313 , - 2030 , - 4335 , - 868 , - 4733 , - 1578 , - 4507 , - 4160 , - 3657 , - 3622 , - 2183 , - 4956 , - 85 , - 3170 , - 2355 , - 3256 , - 4001 , - 222 , - 31 , - 4052 , - 429 , - 4762 , - 203 , - 2352 , - 4345 , - 1814 , - 2871 , - 3148 , - 773 , - 1362 , - 3043 , - 1448 , - 4689 , - 3406 , - 719 , - 2244 , - 1117 , - 2954 , - 891 , - 544 , - 41 , - 6 , - 3559 , - 1340 , - 1461 , - 4546 , - 3731 , - 4632 , - 385 , - 1598 , - 1407 , - 436 , - 1805 , - 1146 , - 1579 , - 3728 , - 729 , - 3190 , - 4247 , - 4524 , - 2149 , - 2738 , - 4419 , - 2824 , - 1073 , - 4782 , - 2095 , - 3620 , - 2493 , - 4330 , - 2267 , - 1920 , - 1417 , - 1382 , - 4935 , - 2716 , - 2837 , - 930 , - 115 , - 1016 , - 1761 , - 2974 , - 2783 , - 1812 , - 3181 , - 2522 , - 2955 , - 112 , - 2105 , - 4566 , - 631 , - 908 , - 3525 , - 4114 , - 803 , - 4200 , - 2449 , - 1166 , - 3471 , - 4 , - 3869 , - 714 , - 3643 , - 3296 , - 2793 , - 2758 , - 1319 , - 4092 , - 4213 , - 2306 , - 1491 , - 2392 , - 3137 , - 4350 , - 4159 , - 3188 , - 4557 , - 3898 , - 4331 , - 1488 , - 3481 , - 950 , - 2007 , - 2284 , - 4901 , - 498 , - 2179 , - 584 , - 3825 , - 2542 , - 4847 , - 1380 , - 253 , - 2090 , - 27 , - 4672 , - 4169 , - 4134 , - 2695 , - 476 , - 597 , - 3682 , - 2867 , - 3768 , - 4513 , - 734 , - 543 , - 4564 , - 941 , - 282 , - 715 , - 2864 , - 4857 , - 2326 , - 3383 , - 3660 , - 1285 , - 1874 , - 3555 , - 1960 , - 209 , - 3918 , - 1231 , - 2756 , - 1629 , - 3466 , - 1403 , - 1056 , - 553 , - 518 , - 4071 , - 1852 , - 1973 , - 66 , - 4243 , - 152 , - 897 , - 2110 , - 1919 , - 948 , - 2317 , - 1658 , - 2091 , - 4240 , - 1241 , - 3702 , - 4759 , - 44 , - 2661 , - 3250 , - 4931 , - 3336 , - 1585 , - 302 , - 2607 , - 4132 , - 3005 , - 4842 , - 2779 , - 2432 , - 1929 , - 1894 , - 455 , - 3228 , - 3349 , - 1442 , - 627 , - 1528 , - 2273 , - 3486 , - 3295 , - 2324 , - 3693 , - 3034 , - 3467 , - 624 , - 2617 , - 86 , - 1143 , - 1420 , - 4037 , - 4626 , - 1315 , - 4712 , - 2961 , - 1678 , - 3983 , - 516 , - 4381 , - 1226 , - 4155 , - 3808 , - 3305 , - 3270 , - 1831 , - 4604 , - 4725 , - 2818 , - 2003 , - 2904 , - 3649 , - 4862 , - 4671 , - 3700 , - 77 , - 4410 , - 4843 , - 2000 , - 3993 , - 1462 , - 2519 , - 2796 , - 421 , - 1010 , - 2691 , - 1096 , - 4337 , - 3054 , - 367 , - 1892 , - 765 , - 2602 , - 539 , - 192 , - 4681 , - 4646 , - 3207 , - 988 , - 1109 , - 4194 , - 3379 , - 4280 , - 33 , - 1246 , - 1055 , - 84 , - 1453 , - 794 , - 1227 , - 3376 , - 377 , - 2838 , - 3895 , - 4172 , - 1797 , - 2386 , - 4067 , - 2472 , - 721 , - 4430 , - 1743 , - 3268 , - 2141 , - 3978 , - 1915 , - 1568 , - 1065 , - 1030 , - 4583 , - 2364 , - 2485 , - 578 , - 4755 , - 664 , - 1409 , - 2622 , - 2431 , - 1460 , - 2829 , - 2170 , - 2603 , - 4752 , - 1753 , - 4214 , - 279 , - 556 , - 3173 , - 3762 , - 451 , - 3848 , - 2097 , - 814 , - 3119 , - 4644 , - 3517 , - 362 , - 3291 , - 2944 , - 2441 , - 2406 , - 967 , - 3740 , - 3861 , - 1954 , - 1139 , - 2040 , - 2785 , - 3998 , - 3807 , - 2836 , - 4205 , - 3546 , - 3979 , - 1136 , - 3129 , - 598 , - 1655 , - 1932 , - 4549 , - 146 , - 1827 , - 232 , - 3473 , - 2190 , - 4495 , - 1028 , - 4893 , - 1738 , - 4667 , - 4320 , - 3817 , - 3782 , - 2343 , - 124 , - 245 , - 3330 , - 2515 , - 3416 , - 4161 , - 382 , - 191 , - 4212 , - 589 , - 4922 , - 363 , - 2512 , - 4505 , - 1974 , - 3031 , - 3308 , - 933 , - 1522 , - 3203 , - 1608 , - 4849 , - 3566 , - 879 , - 2404 , - 1277 , - 3114 , - 1051 , - 704 , - 201 , - 166 , - 3719 , - 1500 , - 1621 , - 4706 , - 3891 , - 4792 , - 545 , - 1758 , - 1567 , - 596 , - 1965 , - 1306 , - 1739 , - 3888 , - 889 , - 3350 , - 4407 , - 4684 , - 2309 , - 2898 , - 4579 , - 2984 , - 1233 , - 4942 , - 2255 , - 3780 , - 2653 , - 4490 , - 2427 , - 2080 , - 1577 , - 1542 , - 103 , - 2876 , - 2997 , - 1090 , - 275 , - 1176 , - 1921 , - 3134 , - 2943 , - 1972 , - 3341 , - 2682 , - 3115 , - 272 , - 2265 , - 4726 , - 791 , - 1068 , - 3685 , - 4274 , - 963 , - 4360 , - 2609 , - 1326 , - 3631 , - 164 , - 4029 , - 874 , - 3803 , - 3456 , - 2953 , - 2918 , - 1479 , - 4252 , - 4373 , - 2466 , - 1651 , - 2552 , - 3297 , - 4510 , - 4319 , - 3348 , - 4717 , - 4058 , - 4491 , - 1648 , - 3641 , - 1110 , - 2167 , - 2444 , - 69 , - 658 , - 2339 , - 744 , - 3985 , - 2702 , - 15 , - 1540 , - 413 , - 2250 , - 187 , - 4832 , - 4329 , - 4294 , - 2855 , - 636 , - 757 , - 3842 , - 3027 , - 3928 , - 4673 , - 894 , - 703 , - 4724 , - 1101 , - 442 , - 875 , - 3024 , - 25 , - 2486 , - 3543 , - 3820 , - 1445 , - 2034 , - 3715 , - 2120 , - 369 , - 4078 , - 1391 , - 2916 , - 1789 , - 3626 , - 1563 , - 1216 , - 713 , - 678 , - 4231 , - 2012 , - 2133 , - 226 , - 4403 , - 312 , - 1057 , - 2270 , - 2079 , - 1108 , - 2477 , - 1818 , - 2251 , - 4400 , - 1401 , - 3862 , - 4919 , - 204 , - 2821 , - 3410 , - 99 , - 3496 , - 1745 , - 462 , - 2767 , - 4292 , - 3165 , - 10 , - 2939 , - 2592 , - 2089 , - 2054 , - 615 , - 3388 , - 3509 , - 1602 , - 787 , - 1688 , - 2433 , - 3646 , - 3455 , - 2484 , - 3853 , - 3194 , - 3627 , - 784 , - 2777 , - 246 , - 1303 , - 1580 , - 4197 , - 4786 , - 1475 , - 4872 , - 3121 , - 1838 , - 4143 , - 676 , - 4541 , - 1386 , - 4315 , - 3968 , - 3465 , - 3430 , - 1991 , - 4764 , - 4885 , - 2978 , - 2163 , - 3064 , - 3809 , - 30 , - 4831 , - 3860 , - 237 , - 4570 , - 11 , - 2160 , - 4153 , - 1622 , - 2679 , - 2956 , - 581 , - 1170 , - 2851 , - 1256 , - 4497 , - 3214 , - 527 , - 2052 , - 925 , - 2762 , - 699 , - 352 , - 4841 , - 4806 , - 3367 , - 1148 , - 1269 , - 4354 , - 3539 , - 4440 , - 193 , - 1406 , - 1215 , - 244 , - 1613 , - 954 , - 1387 , - 3536 , - 537 , - 2998 , - 4055 , - 4332 , - 1957 , - 2546 , - 4227 , - 2632 , - 881 , - 4590 , - 1903 , - 3428 , - 2301 , - 4138 , - 2075 , - 1728 , - 1225 , - 1190 , - 4743 , - 2524 , - 2645 , - 738 , - 4915 , - 824 , - 1569 , - 2782 , - 2591 , - 1620 , - 2989 , - 2330 , - 2763 , - 4912 , - 1913 , - 4374 , - 439 , - 716 , - 3333 , - 3922 , - 611 , - 4008 , - 2257 , - 974 , - 3279 , - 4804 , - 3677 , - 522 , - 3451 , - 3104 , - 2601 , - 2566 , - 1127 , - 3900 , - 4021 , - 2114 , - 1299 , - 2200 , - 2945 , - 4158 , - 3967 , - 2996 , - 4365 , - 3706 , - 4139 , - 1296 , - 3289 , - 758 , - 1815 , - 2092 , - 4709 , - 306 , - 1987 , - 392 , - 3633 , - 2350 , - 4655 , - 1188 , - 61 , - 1898 , - 4827 , - 4480 , - 3977 , - 3942 , - 2503 , - 284 , - 405 , - 3490 , - 2675 , - 3576 , - 4321 , - 542 , - 351 , - 4372 , - 749 , - 90 , - 523 , - 2672 , - 4665 , - 2134 , - 3191 , - 3468 , - 1093 , - 1682 , - 3363 , - 1768 , - 17 , - 3726 , - 1039 , - 2564 , - 1437 , - 3274 , - 1211 , - 864 , - 361 , - 326 , - 3879 , - 1660 , - 1781 , - 4866 , - 4051 , - 4952 , - 705 , - 1918 , - 1727 , - 756 , - 2125 , - 1466 , - 1899 , - 4048 , - 1049 , - 3510 , - 4567 , - 4844 , - 2469 , - 3058 , - 4739 , - 3144 , - 1393 , - 110 , - 2415 , - 3940 , - 2813 , - 4650 , - 2587 , - 2240 , - 1737 , - 1702 , - 263 , - 3036 , - 3157 , - 1250 , - 435 , - 1336 , - 2081 , - 3294 , - 3103 , - 2132 , - 3501 , - 2842 , - 3275 , - 432 , - 2425 , - 4886 , - 951 , - 1228 , - 3845 , - 4434 , - 1123 , - 4520 , - 2769 , - 1486 , - 3791 , - 324 , - 4189 , - 1034 , - 3963 , - 3616 , - 3113 , - 3078 , - 1639 , - 4412 , - 4533 , - 2626 , - 1811 , - 2712 , - 3457 , - 4670 , - 4479 , - 3508 , - 4877 , - 4218 , - 4651 , - 1808 , - 3801 , - 1270 , - 2327 , - 2604 , - 229 , - 818 , - 2499 , - 904 , - 4145 , - 2862 , - 175 , - 1700 , - 573 , - 2410 , - 347 , - 0 , - 1973 , - 4262 , - 3075 , - 4732 , - 385 , - 1410 , - 4015 , - 4408 , - 3853 , - 3614 , - 4955 , - 4084 , - 2265 , - 762 , - 839 , - 3760 , - 677 , - 2966 , - 1779 , - 3436 , - 4145 , - 114 , - 2719 , - 3112 , - 2557 , - 2318 , - 3659 , - 2788 , - 969 , - 4522 , - 4599 , - 2464 , - 4437 , - 1670 , - 483 , - 2140 , - 2849 , - 3874 , - 1423 , - 1816 , - 1261 , - 1022 , - 2363 , - 1492 , - 4729 , - 3226 , - 3303 , - 1168 , - 3141 , - 374 , - 4243 , - 844 , - 1553 , - 2578 , - 127 , - 520 , - 5021 , - 4782 , - 1067 , - 196 , - 3433 , - 1930 , - 2007 , - 4928 , - 1845 , - 4134 , - 2947 , - 4604 , - 257 , - 1282 , - 3887 , - 4280 , - 3725 , - 3486 , - 4827 , - 3956 , - 2137 , - 634 , - 711 , - 3632 , - 549 , - 2838 , - 1651 , - 3308 , - 4017 , - 5042 , - 2591 , - 2984 , - 2429 , - 2190 , - 3531 , - 2660 , - 841 , - 4394 , - 4471 , - 2336 , - 4309 , - 1542 , - 355 , - 2012 , - 2721 , - 3746 , - 1295 , - 1688 , - 1133 , - 894 , - 2235 , - 1364 , - 4601 , - 3098 , - 3175 , - 1040 , - 3013 , - 246 , - 4115 , - 716 , - 1425 , - 2450 , - 5055 , - 392 , - 4893 , - 4654 , - 939 , - 68 , - 3305 , - 1802 , - 1879 , - 4800 , - 1717 , - 4006 , - 2819 , - 4476 , - 129 , - 1154 , - 3759 , - 4152 , - 3597 , - 3358 , - 4699 , - 3828 , - 2009 , - 506 , - 583 , - 3504 , - 421 , - 2710 , - 1523 , - 3180 , - 3889 , - 4914 , - 2463 , - 2856 , - 2301 , - 2062 , - 3403 , - 2532 , - 713 , - 4266 , - 4343 , - 2208 , - 4181 , - 1414 , - 227 , - 1884 , - 2593 , - 3618 , - 1167 , - 1560 , - 1005 , - 766 , - 2107 , - 1236 , - 4473 , - 2970 , - 3047 , - 912 , - 2885 , - 118 , - 3987 , - 588 , - 1297 , - 2322 , - 4927 , - 264 , - 4765 , - 4526 , - 811 , - 4996 , - 3177 , - 1674 , - 1751 , - 4672 , - 1589 , - 3878 , - 2691 , - 4348 , - 1 , - 1026 , - 3631 , - 4024 , - 3469 , - 3230 , - 4571 , - 3700 , - 1881 , - 378 , - 455 , - 3376 , - 293 , - 2582 , - 1395 , - 3052 , - 3761 , - 4786 , - 2335 , - 2728 , - 2173 , - 1934 , - 3275 , - 2404 , - 585 , - 4138 , - 4215 , - 2080 , - 4053 , - 1286 , - 99 , - 1756 , - 2465 , - 3490 , - 1039 , - 1432 , - 877 , - 638 , - 1979 , - 1108 , - 4345 , - 2842 , - 2919 , - 784 , - 2757 , - 5046 , - 3859 , - 460 , - 1169 , - 2194 , - 4799 , - 136 , - 4637 , - 4398 , - 683 , - 4868 , - 3049 , - 1546 , - 1623 , - 4544 , - 1461 , - 3750 , - 2563 , - 4220 , - 4929 , - 898 , - 3503 , - 3896 , - 3341 , - 3102 , - 4443 , - 3572 , - 1753 , - 250 , - 327 , - 3248 , - 165 , - 2454 , - 1267 , - 2924 , - 3633 , - 4658 , - 2207 , - 2600 , - 2045 , - 1806 , - 3147 , - 2276 , - 457 , - 4010 , - 4087 , - 1952 , - 3925 , - 1158 , - 5027 , - 1628 , - 2337 , - 3362 , - 911 , - 1304 , - 749 , - 510 , - 1851 , - 980 , - 4217 , - 2714 , - 2791 , - 656 , - 2629 , - 4918 , - 3731 , - 332 , - 1041 , - 2066 , - 4671 , - 8 , - 4509 , - 4270 , - 555 , - 4740 , - 2921 , - 1418 , - 1495 , - 4416 , - 1333 , - 3622 , - 2435 , - 4092 , - 4801 , - 770 , - 3375 , - 3768 , - 3213 , - 2974 , - 4315 , - 3444 , - 1625 , - 122 , - 199 , - 3120 , - 37 , - 2326 , - 1139 , - 2796 , - 3505 , - 4530 , - 2079 , - 2472 , - 1917 , - 1678 , - 3019 , - 2148 , - 329 , - 3882 , - 3959 , - 1824 , - 3797 , - 1030 , - 4899 , - 1500 , - 2209 , - 3234 , - 783 , - 1176 , - 621 , - 382 , - 1723 , - 852 , - 4089 , - 2586 , - 2663 , - 528 , - 2501 , - 4790 , - 3603 , - 204 , - 913 , - 1938 , - 4543 , - 4936 , - 4381 , - 4142 , - 427 , - 4612 , - 2793 , - 1290 , - 1367 , - 4288 , - 1205 , - 3494 , - 2307 , - 3964 , - 4673 , - 642 , - 3247 , - 3640 , - 3085 , - 2846 , - 4187 , - 3316 , - 1497 , - 5050 , - 71 , - 2992 , - 4965 , - 2198 , - 1011 , - 2668 , - 3377 , - 4402 , - 1951 , - 2344 , - 1789 , - 1550 , - 2891 , - 2020 , - 201 , - 3754 , - 3831 , - 1696 , - 3669 , - 902 , - 4771 , - 1372 , - 2081 , - 3106 , - 655 , - 1048 , - 493 , - 254 , - 1595 , - 724 , - 3961 , - 2458 , - 2535 , - 400 , - 2373 , - 4662 , - 3475 , - 76 , - 785 , - 1810 , - 4415 , - 4808 , - 4253 , - 4014 , - 299 , - 4484 , - 2665 , - 1162 , - 1239 , - 4160 , - 1077 , - 3366 , - 2179 , - 3836 , - 4545 , - 514 , - 3119 , - 3512 , - 2957 , - 2718 , - 4059 , - 3188 , - 1369 , - 4922 , - 4999 , - 2864 , - 4837 , - 2070 , - 883 , - 2540 , - 3249 , - 4274 , - 1823 , - 2216 , - 1661 , - 1422 , - 2763 , - 1892 , - 73 , - 3626 , - 3703 , - 1568 , - 3541 , - 774 , - 4643 , - 1244 , - 1953 , - 2978 , - 527 , - 920 , - 365 , - 126 , - 1467 , - 596 , - 3833 , - 2330 , - 2407 , - 272 , - 2245 , - 4534 , - 3347 , - 5004 , - 657 , - 1682 , - 4287 , - 4680 , - 4125 , - 3886 , - 171 , - 4356 , - 2537 , - 1034 , - 1111 , - 4032 , - 949 , - 3238 , - 2051 , - 3708 , - 4417 , - 386 , - 2991 , - 3384 , - 2829 , - 2590 , - 3931 , - 3060 , - 1241 , - 4794 , - 4871 , - 2736 , - 4709 , - 1942 , - 755 , - 2412 , - 3121 , - 4146 , - 1695 , - 2088 , - 1533 , - 1294 , - 2635 , - 1764 , - 5001 , - 3498 , - 3575 , - 1440 , - 3413 , - 646 , - 4515 , - 1116 , - 1825 , - 2850 , - 399 , - 792 , - 237 , - 5054 , - 1339 , - 468 , - 3705 , - 2202 , - 2279 , - 144 , - 2117 , - 4406 , - 3219 , - 4876 , - 529 , - 1554 , - 4159 , - 4552 , - 3997 , - 3758 , - 43 , - 4228 , - 2409 , - 906 , - 983 , - 3904 , - 821 , - 3110 , - 1923 , - 3580 , - 4289 , - 258 , - 2863 , - 3256 , - 2701 , - 2462 , - 3803 , - 2932 , - 1113 , - 4666 , - 4743 , - 2608 , - 4581 , - 1814 , - 627 , - 2284 , - 2993 , - 4018 , - 1567 , - 1960 , - 1405 , - 1166 , - 2507 , - 1636 , - 4873 , - 3370 , - 3447 , - 1312 , - 3285 , - 518 , - 4387 , - 988 , - 1697 , - 2722 , - 271 , - 664 , - 109 , - 4926 , - 1211 , - 340 , - 3577 , - 2074 , - 2151 , - 16 , - 1989 , - 4278 , - 3091 , - 4748 , - 401 , - 1426 , - 4031 , - 4424 , - 3869 , - 3630 , - 4971 , - 4100 , - 2281 , - 778 , - 855 , - 3776 , - 693 , - 2982 , - 1795 , - 3452 , - 4161 , - 130 , - 2735 , - 3128 , - 2573 , - 2334 , - 3675 , - 2804 , - 985 , - 4538 , - 4615 , - 2480 , - 4453 , - 1686 , - 499 , - 2156 , - 2865 , - 3890 , - 1439 , - 1832 , - 1277 , - 1038 , - 2379 , - 1508 , - 4745 , - 3242 , - 3319 , - 1184 , - 3157 , - 390 , - 4259 , - 860 , - 1569 , - 2594 , - 143 , - 536 , - 5037 , - 4798 , - 1083 , - 212 , - 3449 , - 1946 , - 2023 , - 4944 , - 1861 , - 4150 , - 2963 , - 4620 , - 273 , - 1298 , - 3903 , - 4296 , - 3741 , - 3502 , - 4843 , - 3972 , - 2153 , - 650 , - 727 , - 3648 , - 565 , - 2854 , - 1667 , - 3324 , - 4033 , - 2 , - 2607 , - 3000 , - 2445 , - 2206 , - 3547 , - 2676 , - 857 , - 4410 , - 4487 , - 2352 , - 4325 , - 1558 , - 371 , - 2028 , - 2737 , - 3762 , - 1311 , - 1704 , - 1149 , - 910 , - 2251 , - 1380 , - 4617 , - 3114 , - 3191 , - 1056 , - 3029 , - 262 , - 4131 , - 732 , - 1441 , - 2466 , - 15 , - 408 , - 4909 , - 4670 , - 955 , - 84 , - 3321 , - 1818 , - 1895 , - 4816 , - 1733 , - 4022 , - 2835 , - 4492 , - 145 , - 1170 , - 3775 , - 4168 , - 3613 , - 3374 , - 4715 , - 3844 , - 2025 , - 522 , - 599 , - 3520 , - 437 , - 2726 , - 1539 , - 3196 , - 3905 , - 4930 , - 2479 , - 2872 , - 2317 , - 2078 , - 3419 , - 2548 , - 729 , - 4282 , - 4359 , - 2224 , - 4197 , - 1430 , - 243 , - 1900 , - 2609 , - 3634 , - 1183 , - 1576 , - 1021 , - 782 , - 2123 , - 1252 , - 4489 , - 2986 , - 3063 , - 928 , - 2901 , - 134 , - 4003 , - 604 , - 1313 , - 2338 , - 4943 , - 280 , - 4781 , - 4542 , - 827 , - 5012 , - 3193 , - 1690 , - 1767 , - 4688 , - 1605 , - 3894 , - 2707 , - 4364 , - 17 , - 1042 , - 3647 , - 4040 , - 3485 , - 3246 , - 4587 , - 3716 , - 1897 , - 394 , - 471 , - 3392 , - 309 , - 2598 , - 1411 , - 3068 , - 3777 , - 4802 , - 2351 , - 2744 , - 2189 , - 1950 , - 3291 , - 2420 , - 601 , - 4154 , - 4231 , - 2096 , - 4069 , - 1302 , - 115 , - 1772 , - 2481 , - 3506 , - 1055 , - 1448 , - 893 , - 654 , - 1995 , - 1124 , - 4361 , - 2858 , - 2935 , - 800 , - 2773 , - 6 , - 3875 , - 476 , - 1185 , - 2210 , - 4815 , - 152 , - 4653 , - 4414 , - 699 , - 4884 , - 3065 , - 1562 , - 1639 , - 4560 , - 1477 , - 3766 , - 2579 , - 4236 , - 4945 , - 914 , - 3519 , - 3912 , - 3357 , - 3118 , - 4459 , - 3588 , - 1769 , - 266 , - 343 , - 3264 , - 181 , - 2470 , - 1283 , - 2940 , - 3649 , - 4674 , - 2223 , - 2616 , - 2061 , - 1822 , - 3163 , - 2292 , - 473 , - 4026 , - 4103 , - 1968 , - 3941 , - 1174 , - 5043 , - 1644 , - 2353 , - 3378 , - 927 , - 1320 , - 765 , - 526 , - 1867 , - 996 , - 4233 , - 2730 , - 2807 , - 672 , - 2645 , - 4934 , - 3747 , - 348 , - 1057 , - 2082 , - 4687 , - 24 , - 4525 , - 4286 , - 571 , - 4756 , - 2937 , - 1434 , - 1511 , - 4432 , - 1349 , - 3638 , - 2451 , - 4108 , - 4817 , - 786 , - 3391 , - 3784 , - 3229 , - 2990 , - 4331 , - 3460 , - 1641 , - 138 , - 215 , - 3136 , - 53 , - 2342 , - 1155 , - 2812 , - 3521 , - 4546 , - 2095 , - 2488 , - 1933 , - 1694 , - 3035 , - 2164 , - 345 , - 3898 , - 3975 , - 1840 , - 3813 , - 1046 , - 4915 , - 1516 , - 2225 , - 3250 , - 799 , - 1192 , - 637 , - 398 , - 1739 , - 868 , - 4105 , - 2602 , - 2679 , - 544 , - 2517 , - 4806 , - 3619 , - 220 , - 929 , - 1954 , - 4559 , - 4952 , - 4397 , - 4158 , - 443 , - 4628 , - 2809 , - 1306 , - 1383 , - 4304 , - 1221 , - 3510 , - 2323 , - 3980 , - 4689 , - 658 , - 3263 , - 3656 , - 3101 , - 2862 , - 4203 , - 3332 , - 1513 , - 10 , - 87 , - 3008 , - 4981 , - 2214 , - 1027 , - 2684 , - 3393 , - 4418 , - 1967 , - 2360 , - 1805 , - 1566 , - 2907 , - 2036 , - 217 , - 3770 , - 3847 , - 1712 , - 3685 , - 918 , - 4787 , - 1388 , - 2097 , - 3122 , - 671 , - 1064 , - 509 , - 270 , - 1611 , - 740 , - 3977 , - 2474 , - 2551 , - 416 , - 2389 , - 4678 , - 3491 , - 92 , - 801 , - 1826 , - 4431 , - 4824 , - 4269 , - 4030 , - 315 , - 4500 , - 2681 , - 1178 , - 1255 , - 4176 , - 1093 , - 3382 , - 2195 , - 3852 , - 4561 , - 530 , - 3135 , - 3528 , - 2973 , - 2734 , - 4075 , - 3204 , - 1385 , - 4938 , - 5015 , - 2880 , - 4853 , - 2086 , - 899 , - 2556 , - 3265 , - 4290 , - 1839 , - 2232 , - 1677 , - 1438 , - 2779 , - 1908 , - 89 , - 3642 , - 3719 , - 1584 , - 3557 , - 790 , - 4659 , - 1260 , - 1969 , - 2994 , - 543 , - 936 , - 381 , - 142 , - 1483 , - 612 , - 3849 , - 2346 , - 2423 , - 288 , - 2261 , - 4550 , - 3363 , - 5020 , - 673 , - 1698 , - 4303 , - 4696 , - 4141 , - 3902 , - 187 , - 4372 , - 2553 , - 1050 , - 1127 , - 4048 , - 965 , - 3254 , - 2067 , - 3724 , - 4433 , - 402 , - 3007 , - 3400 , - 2845 , - 2606 , - 3947 , - 3076 , - 1257 , - 4810 , - 4887 , - 2752 , - 4725 , - 1958 , - 771 , - 2428 , - 3137 , - 4162 , - 1711 , - 2104 , - 1549 , - 1310 , - 2651 , - 1780 , - 5017 , - 3514 , - 3591 , - 1456 , - 3429 , - 662 , - 4531 , - 1132 , - 1841 , - 2866 , - 415 , - 808 , - 253 , - 14 , - 1355 , - 484 , - 3721 , - 2218 , - 2295 , - 160 , - 2133 , - 4422 , - 3235 , - 4892 , - 545 , - 1570 , - 4175 , - 4568 , - 4013 , - 3774 , - 59 , - 4244 , - 2425 , - 922 , - 999 , - 3920 , - 837 , - 3126 , - 1939 , - 3596 , - 4305 , - 274 , - 2879 , - 3272 , - 2717 , - 2478 , - 3819 , - 2948 , - 1129 , - 4682 , - 4759 , - 2624 , - 4597 , - 1830 , - 643 , - 2300 , - 3009 , - 4034 , - 1583 , - 1976 , - 1421 , - 1182 , - 2523 , - 1652 , - 4889 , - 3386 , - 3463 , - 1328 , - 3301 , - 534 , - 4403 , - 1004 , - 1713 , - 2738 , - 287 , - 680 , - 125 , - 4942 , - 1227 , - 356 , - 3593 , - 2090 , - 2167 , - 32 , - 2005 , - 4294 , - 3107 , - 4764 , - 417 , - 1442 , - 4047 , - 4440 , - 3885 , - 3646 , - 4987 , - 4116 , - 2297 , - 794 , - 871 , - 3792 , - 709 , - 2998 , - 1811 , - 3468 , - 4177 , - 146 , - 2751 , - 3144 , - 2589 , - 2350 , - 3691 , - 2820 , - 1001 , - 4554 , - 4631 , - 2496 , - 4469 , - 1702 , - 515 , - 2172 , - 2881 , - 3906 , - 1455 , - 1848 , - 1293 , - 1054 , - 2395 , - 1524 , - 4761 , - 3258 , - 3335 , - 1200 , - 3173 , - 406 , - 4275 , - 876 , - 1585 , - 2610 , - 159 , - 552 , - 5053 , - 4814 , - 1099 , - 228 , - 3465 , - 1962 , - 2039 , - 4960 , - 1877 , - 4166 , - 2979 , - 4636 , - 289 , - 1314 , - 3919 , - 4312 , - 3757 , - 3518 , - 4859 , - 3988 , - 2169 , - 666 , - 743 , - 3664 , - 581 , - 2870 , - 1683 , - 3340 , - 4049 , - 18 , - 2623 , - 3016 , - 2461 , - 2222 , - 3563 , - 2692 , - 873 , - 4426 , - 4503 , - 2368 , - 4341 , - 1574 , - 387 , - 2044 , - 2753 , - 3778 , - 1327 , - 1720 , - 1165 , - 926 , - 2267 , - 1396 , - 4633 , - 3130 , - 3207 , - 1072 , - 3045 , - 278 , - 4147 , - 748 , - 1457 , - 2482 , - 31 , - 424 , - 4925 , - 4686 , - 971 , - 100 , - 3337 , - 1834 , - 1911 , - 4832 , - 1749 , - 4038 , - 2851 , - 4508 , - 161 , - 1186 , - 3791 , - 4184 , - 3629 , - 3390 , - 4731 , - 3860 , - 2041 , - 538 , - 615 , - 3536 , - 453 , - 2742 , - 1555 , - 3212 , - 3921 , - 4946 , - 2495 , - 2888 , - 2333 , - 2094 , - 3435 , - 2564 , - 745 , - 4298 , - 4375 , - 2240 , - 4213 , - 1446 , - 259 , - 1916 , - 2625 , - 3650 , - 1199 , - 1592 , - 1037 , - 798 , - 2139 , - 1268 , - 4505 , - 3002 , - 3079 , - 944 , - 2917 , - 150 , - 4019 , - 620 , - 1329 , - 2354 , - 4959 , - 296 , - 4797 , - 4558 , - 843 , - 5028 , - 3209 , - 1706 , - 1783 , - 4704 , - 1621 , - 3910 , - 2723 , - 4380 , - 33 , - 1058 , - 3663 , - 4056 , - 3501 , - 3262 , - 4603 , - 3732 , - 1913 , - 410 , - 487 , - 3408 , - 325 , - 2614 , - 1427 , - 3084 , - 3793 , - 4818 , - 2367 , - 2760 , - 2205 , - 1966 , - 3307 , - 2436 , - 617 , - 4170 , - 4247 , - 2112 , - 4085 , - 1318 , - 131 , - 1788 , - 2497 , - 3522 , - 1071 , - 1464 , - 909 , - 670 , - 2011 , - 1140 , - 4377 , - 2874 , - 2951 , - 816 , - 2789 , - 22 , - 3891 , - 492 , - 1201 , - 2226 , - 4831 , - 168 , - 4669 , - 4430 , - 715 , - 4900 , - 3081 , - 1578 , - 1655 , - 4576 , - 1493 , - 3782 , - 2595 , - 4252 , - 4961 , - 930 , - 3535 , - 3928 , - 3373 , - 3134 , - 4475 , - 3604 , - 1785 , - 282 , - 359 , - 3280 , - 197 , - 2486 , - 1299 , - 2956 , - 3665 , - 4690 , - 2239 , - 2632 , - 2077 , - 1838 , - 3179 , - 2308 , - 489 , - 4042 , - 4119 , - 1984 , - 3957 , - 1190 , - 3 , - 1660 , - 2369 , - 3394 , - 943 , - 1336 , - 781 , - 542 , - 1883 , - 1012 , - 4249 , - 2746 , - 2823 , - 688 , - 2661 , - 4950 , - 3763 , - 364 , - 1073 , - 2098 , - 4703 , - 40 , - 4541 , - 4302 , - 587 , - 4772 , - 2953 , - 1450 , - 1527 , - 4448 , - 1365 , - 3654 , - 2467 , - 4124 , - 4833 , - 802 , - 3407 , - 3800 , - 3245 , - 3006 , - 4347 , - 3476 , - 1657 , - 154 , - 231 , - 3152 , - 69 , - 2358 , - 1171 , - 2828 , - 3537 , - 4562 , - 2111 , - 2504 , - 1949 , - 1710 , - 3051 , - 2180 , - 361 , - 3914 , - 3991 , - 1856 , - 3829 , - 1062 , - 4931 , - 1532 , - 2241 , - 3266 , - 815 , - 1208 , - 653 , - 414 , - 1755 , - 884 , - 4121 , - 2618 , - 2695 , - 560 , - 2533 , - 4822 , - 3635 , - 236 , - 945 , - 1970 , - 4575 , - 4968 , - 4413 , - 4174 , - 459 , - 4644 , - 2825 , - 1322 , - 1399 , - 4320 , - 1237 , - 3526 , - 2339 , - 3996 , - 4705 , - 674 , - 3279 , - 3672 , - 3117 , - 2878 , - 4219 , - 3348 , - 1529 , - 26 , - 103 , - 3024 , - 4997 , - 2230 , - 1043 , - 2700 , - 3409 , - 4434 , - 1983 , - 2376 , - 1821 , - 1582 , - 2923 , - 2052 , - 233 , - 3786 , - 3863 , - 1728 , - 3701 , - 934 , - 4803 , - 1404 , - 2113 , - 3138 , - 687 , - 1080 , - 525 , - 286 , - 1627 , - 756 , - 3993 , - 2490 , - 2567 , - 432 , - 2405 , - 4694 , - 3507 , - 108 , - 817 , - 1842 , - 4447 , - 4840 , - 4285 , - 4046 , - 331 , - 4516 , - 2697 , - 1194 , - 1271 , - 4192 , - 1109 , - 3398 , - 2211 , - 3868 , - 4577 , - 546 , - 3151 , - 3544 , - 2989 , - 2750 , - 4091 , - 3220 , - 1401 , - 4954 , - 5031 , - 2896 , - 4869 , - 2102 , - 915 , - 2572 , - 3281 , - 4306 , - 1855 , - 2248 , - 1693 , - 1454 , - 2795 , - 1924 , - 105 , - 3658 , - 3735 , - 1600 , - 3573 , - 806 , - 4675 , - 1276 , - 1985 , - 3010 , - 559 , - 952 , - 397 , - 158 , - 1499 , - 628 , - 3865 , - 2362 , - 2439 , - 304 , - 2277 , - 4566 , - 3379 , - 5036 , - 689 , - 1714 , - 4319 , - 4712 , - 4157 , - 3918 , - 203 , - 4388 , - 2569 , - 1066 , - 1143 , - 4064 , - 981 , - 3270 , - 2083 , - 3740 , - 4449 , - 418 , - 3023 , - 3416 , - 2861 , - 2622 , - 3963 , - 3092 , - 1273 , - 4826 , - 4903 , - 2768 , - 4741 , - 1974 , - 787 , - 2444 , - 3153 , - 4178 , - 1727 , - 2120 , - 1565 , - 1326 , - 2667 , - 1796 , - 5033 , - 3530 , - 3607 , - 1472 , - 3445 , - 678 , - 4547 , - 1148 , - 1857 , - 2882 , - 431 , - 824 , - 269 , - 30 , - 1371 , - 500 , - 3737 , - 2234 , - 2311 , - 176 , - 2149 , - 4438 , - 3251 , - 4908 , - 561 , - 1586 , - 4191 , - 4584 , - 4029 , - 3790 , - 75 , - 4260 , - 2441 , - 938 , - 1015 , - 3936 , - 853 , - 3142 , - 1955 , - 3612 , - 4321 , - 290 , - 2895 , - 3288 , - 2733 , - 2494 , - 3835 , - 2964 , - 1145 , - 4698 , - 4775 , - 2640 , - 4613 , - 1846 , - 659 , - 2316 , - 3025 , - 4050 , - 1599 , - 1992 , - 1437 , - 1198 , - 2539 , - 1668 , - 4905 , - 3402 , - 3479 , - 1344 , - 3317 , - 550 , - 4419 , - 1020 , - 1729 , - 2754 , - 303 , - 696 , - 141 , - 4958 , - 1243 , - 372 , - 3609 , - 2106 , - 2183 , - 48 , - 2021 , - 4310 , - 3123 , - 4780 , - 433 , - 1458 , - 4063 , - 4456 , - 3901 , - 3662 , - 5003 , - 4132 , - 2313 , - 810 , - 887 , - 3808 , - 725 , - 3014 , - 1827 , - 3484 , - 4193 , - 162 , - 2767 , - 3160 , - 2605 , - 2366 , - 3707 , - 2836 , - 1017 , - 4570 , - 4647 , - 2512 , - 4485 , - 1718 , - 531 , - 2188 , - 2897 , - 3922 , - 1471 , - 1864 , - 1309 , - 1070 , - 2411 , - 1540 , - 4777 , - 3274 , - 3351 , - 1216 , - 3189 , - 422 , - 4291 , - 892 , - 1601 , - 2626 , - 175 , - 568 , - 13 , - 4830 , - 1115 , - 244 , - 3481 , - 1978 , - 2055 , - 4976 , - 1893 , - 4182 , - 2995 , - 4652 , - 305 , - 1330 , - 3935 , - 4328 , - 3773 , - 3534 , - 4875 , - 4004 , - 2185 , - 682 , - 759 , - 3680 , - 597 , - 2886 , - 1699 , - 3356 , - 4065 , - 34 , - 2639 , - 3032 , - 2477 , - 2238 , - 3579 , - 2708 , - 889 , - 4442 , - 4519 , - 2384 , - 4357 , - 1590 , - 403 , - 2060 , - 2769 , - 3794 , - 1343 , - 1736 , - 1181 , - 942 , - 2283 , - 1412 , - 4649 , - 3146 , - 3223 , - 1088 , - 3061 , - 294 , - 4163 , - 764 , - 1473 , - 2498 , - 47 , - 440 , - 4941 , - 4702 , - 987 , - 116 , - 3353 , - 1850 , - 1927 , - 4848 , - 1765 , - 4054 , - 2867 , - 4524 , - 177 , - 1202 , - 3807 , - 4200 , - 3645 , - 3406 , - 4747 , - 3876 , - 2057 , - 554 , - 631 , - 3552 , - 469 , - 2758 , - 1571 , - 3228 , - 3937 , - 4962 , - 2511 , - 2904 , - 2349 , - 2110 , - 3451 , - 2580 , - 761 , - 4314 , - 4391 , - 2256 , - 4229 , - 1462 , - 275 , - 1932 , - 2641 , - 3666 , - 1215 , - 1608 , - 1053 , - 814 , - 2155 , - 1284 , - 4521 , - 3018 , - 3095 , - 960 , - 2933 , - 166 , - 4035 , - 636 , - 1345 , - 2370 , - 4975 , - 312 , - 4813 , - 4574 , - 859 , - 5044 , - 3225 , - 1722 , - 1799 , - 4720 , - 1637 , - 3926 , - 2739 , - 4396 , - 49 , - 1074 , - 3679 , - 4072 , - 3517 , - 3278 , - 4619 , - 3748 , - 1929 , - 426 , - 503 , - 3424 , - 341 , - 2630 , - 1443 , - 3100 , - 3809 , - 4834 , - 2383 , - 2776 , - 2221 , - 1982 , - 3323 , - 2452 , - 633 , - 4186 , - 4263 , - 2128 , - 4101 , - 1334 , - 147 , - 1804 , - 2513 , - 3538 , - 1087 , - 1480 , - 925 , - 686 , - 2027 , - 1156 , - 4393 , - 2890 , - 2967 , - 832 , - 2805 , - 38 , - 3907 , - 508 , - 1217 , - 2242 , - 4847 , - 184 , - 4685 , - 4446 , - 731 , - 4916 , - 3097 , - 1594 , - 1671 , - 4592 , - 1509 , - 3798 , - 2611 , - 4268 , - 4977 , - 946 , - 3551 , - 3944 , - 3389 , - 3150 , - 4491 , - 3620 , - 1801 , - 298 , - 375 , - 3296 , - 213 , - 2502 , - 1315 , - 2972 , - 3681 , - 4706 , - 2255 , - 2648 , - 2093 , - 1854 , - 3195 , - 2324 , - 505 , - 4058 , - 4135 , - 2000 , - 3973 , - 1206 , - 19 , - 1676 , - 2385 , - 3410 , - 959 , - 1352 , - 797 , - 558 , - 1899 , - 1028 , - 4265 , - 2762 , - 2839 , - 704 , - 2677 , - 4966 , - 3779 , - 380 , - 1089 , - 2114 , - 4719 , - 56 , - 4557 , - 4318 , - 603 , - 4788 , - 2969 , - 1466 , - 1543 , - 4464 , - 1381 , - 3670 , - 2483 , - 4140 , - 4849 , - 818 , - 3423 , - 3816 , - 3261 , - 3022 , - 4363 , - 3492 , - 1673 , - 170 , - 247 , - 3168 , - 85 , - 2374 , - 1187 , - 2844 , - 3553 , - 4578 , - 2127 , - 2520 , - 1965 , - 1726 , - 3067 , - 2196 , - 377 , - 3930 , - 4007 , - 1872 , - 3845 , - 1078 , - 4947 , - 1548 , - 2257 , - 3282 , - 831 , - 1224 , - 669 , - 430 , - 1771 , - 900 , - 4137 , - 2634 , - 2711 , - 576 , - 2549 , - 4838 , - 3651 , - 252 , - 961 , - 1986 , - 4591 , - 4984 , - 4429 , - 4190 , - 475 , - 4660 , - 2841 , - 1338 , - 1415 , - 4336 , - 1253 , - 3542 , - 2355 , - 4012 , - 4721 , - 690 , - 3295 , - 3688 , - 3133 , - 2894 , - 4235 , - 3364 , - 1545 , - 42 , - 119 , - 3040 , - 5013 , - 2246 , - 1059 , - 2716 , - 3425 , - 4450 , - 1999 , - 2392 , - 1837 , - 1598 , - 2939 , - 2068 , - 249 , - 3802 , - 3879 , - 1744 , - 3717 , - 950 , - 4819 , - 1420 , - 2129 , - 3154 , - 703 , - 1096 , - 541 , - 302 , - 1643 , - 772 , - 4009 , - 2506 , - 2583 , - 448 , - 2421 , - 4710 , - 3523 , - 124 , - 833 , - 1858 , - 4463 , - 4856 , - 4301 , - 4062 , - 347 , - 4532 , - 2713 , - 1210 , - 1287 , - 4208 , - 1125 , - 3414 , - 2227 , - 3884 , - 4593 , - 562 , - 3167 , - 3560 , - 3005 , - 2766 , - 4107 , - 3236 , - 1417 , - 4970 , - 5047 , - 2912 , - 4885 , - 2118 , - 931 , - 2588 , - 3297 , - 4322 , - 1871 , - 2264 , - 1709 , - 1470 , - 2811 , - 1940 , - 121 , - 3674 , - 3751 , - 1616 , - 3589 , - 822 , - 4691 , - 1292 , - 2001 , - 3026 , - 575 , - 968 , - 413 , - 174 , - 1515 , - 644 , - 3881 , - 2378 , - 2455 , - 320 , - 2293 , - 4582 , - 3395 , - 5052 , - 705 , - 1730 , - 4335 , - 4728 , - 4173 , - 3934 , - 219 , - 4404 , - 2585 , - 1082 , - 1159 , - 4080 , - 997 , - 3286 , - 2099 , - 3756 , - 4465 , - 434 , - 3039 , - 3432 , - 2877 , - 2638 , - 3979 , - 3108 , - 1289 , - 4842 , - 4919 , - 2784 , - 4757 , - 1990 , - 803 , - 2460 , - 3169 , - 4194 , - 1743 , - 2136 , - 1581 , - 1342 , - 2683 , - 1812 , - 5049 , - 3546 , - 3623 , - 1488 , - 3461 , - 694 , - 4563 , - 1164 , - 1873 , - 2898 , - 447 , - 840 , - 285 , - 46 , - 1387 , - 516 , - 3753 , - 2250 , - 2327 , - 192 , - 2165 , - 4454 , - 3267 , - 4924 , - 577 , - 1602 , - 4207 , - 4600 , - 4045 , - 3806 , - 91 , - 4276 , - 2457 , - 954 , - 1031 , - 3952 , - 869 , - 3158 , - 1971 , - 3628 , - 4337 , - 306 , - 2911 , - 3304 , - 2749 , - 2510 , - 3851 , - 2980 , - 1161 , - 4714 , - 4791 , - 2656 , - 4629 , - 1862 , - 675 , - 2332 , - 3041 , - 4066 , - 1615 , - 2008 , - 1453 , - 1214 , - 2555 , - 1684 , - 4921 , - 3418 , - 3495 , - 1360 , - 3333 , - 566 , - 4435 , - 1036 , - 1745 , - 2770 , - 319 , - 712 , - 157 , - 4974 , - 1259 , - 388 , - 3625 , - 2122 , - 2199 , - 64 , - 2037 , - 4326 , - 3139 , - 4796 , - 449 , - 1474 , - 4079 , - 4472 , - 3917 , - 3678 , - 5019 , - 4148 , - 2329 , - 826 , - 903 , - 3824 , - 741 , - 3030 , - 1843 , - 3500 , - 4209 , - 178 , - 2783 , - 3176 , - 2621 , - 2382 , - 3723 , - 2852 , - 1033 , - 4586 , - 4663 , - 2528 , - 4501 , - 1734 , - 547 , - 2204 , - 2913 , - 3938 , - 1487 , - 1880 , - 1325 , - 1086 , - 2427 , - 1556 , - 4793 , - 3290 , - 3367 , - 1232 , - 3205 , - 438 , - 4307 , - 908 , - 1617 , - 2642 , - 191 , - 584 , - 29 , - 4846 , - 1131 , - 260 , - 3497 , - 1994 , - 2071 , - 4992 , - 1909 , - 4198 , - 3011 , - 4668 , - 321 , - 1346 , - 3951 , - 4344 , - 3789 , - 3550 , - 4891 , - 4020 , - 2201 , - 698 , - 775 , - 3696 , - 613 , - 2902 , - 1715 , - 3372 , - 4081 , - 50 , - 2655 , - 3048 , - 2493 , - 2254 , - 3595 , - 2724 , - 905 , - 4458 , - 4535 , - 2400 , - 4373 , - 1606 , - 419 , - 2076 , - 2785 , - 3810 , - 1359 , - 1752 , - 1197 , - 958 , - 2299 , - 1428 , - 4665 , - 3162 , - 3239 , - 1104 , - 3077 , - 310 , - 4179 , - 780 , - 1489 , - 2514 , - 63 , - 456 , - 4957 , - 4718 , - 1003 , - 132 , - 3369 , - 1866 , - 1943 , - 4864 , - 1781 , - 4070 , - 2883 , - 4540 , - 193 , - 1218 , - 3823 , - 4216 , - 3661 , - 3422 , - 4763 , - 3892 , - 2073 , - 570 , - 647 , - 3568 , - 485 , - 2774 , - 1587 , - 3244 , - 3953 , - 4978 , - 2527 , - 2920 , - 2365 , - 2126 , - 3467 , - 2596 , - 777 , - 4330 , - 4407 , - 2272 , - 4245 , - 1478 , - 291 , - 1948 , - 2657 , - 3682 , - 1231 , - 1624 , - 1069 , - 830 , - 2171 , - 1300 , - 4537 , - 3034 , - 3111 , - 976 , - 2949 , - 182 , - 4051 , - 652 , - 1361 , - 2386 , - 4991 , - 328 , - 4829 , - 4590 , - 875 , - 4 , - 3241 , - 1738 , - 1815 , - 4736 , - 1653 , - 3942 , - 2755 , - 4412 , - 65 , - 1090 , - 3695 , - 4088 , - 3533 , - 3294 , - 4635 , - 3764 , - 1945 , - 442 , - 519 , - 3440 , - 357 , - 2646 , - 1459 , - 3116 , - 3825 , - 4850 , - 2399 , - 2792 , - 2237 , - 1998 , - 3339 , - 2468 , - 649 , - 4202 , - 4279 , - 2144 , - 4117 , - 1350 , - 163 , - 1820 , - 2529 , - 3554 , - 1103 , - 1496 , - 941 , - 702 , - 2043 , - 1172 , - 4409 , - 2906 , - 2983 , - 848 , - 2821 , - 54 , - 3923 , - 524 , - 1233 , - 2258 , - 4863 , - 200 , - 4701 , - 4462 , - 747 , - 4932 , - 3113 , - 1610 , - 1687 , - 4608 , - 1525 , - 3814 , - 2627 , - 4284 , - 4993 , - 962 , - 3567 , - 3960 , - 3405 , - 3166 , - 4507 , - 3636 , - 1817 , - 314 , - 391 , - 3312 , - 229 , - 2518 , - 1331 , - 2988 , - 3697 , - 4722 , - 2271 , - 2664 , - 2109 , - 1870 , - 3211 , - 2340 , - 521 , - 4074 , - 4151 , - 2016 , - 3989 , - 1222 , - 35 , - 1692 , - 2401 , - 3426 , - 975 , - 1368 , - 813 , - 574 , - 1915 , - 1044 , - 4281 , - 2778 , - 2855 , - 720 , - 2693 , - 4982 , - 3795 , - 396 , - 1105 , - 2130 , - 4735 , - 72 , - 4573 , - 4334 , - 619 , - 4804 , - 2985 , - 1482 , - 1559 , - 4480 , - 1397 , - 3686 , - 2499 , - 4156 , - 4865 , - 834 , - 3439 , - 3832 , - 3277 , - 3038 , - 4379 , - 3508 , - 1689 , - 186 , - 263 , - 3184 , - 101 , - 2390 , - 1203 , - 2860 , - 3569 , - 4594 , - 2143 , - 2536 , - 1981 , - 1742 , - 3083 , - 2212 , - 393 , - 3946 , - 4023 , - 1888 , - 3861 , - 1094 , - 4963 , - 1564 , - 2273 , - 3298 , - 847 , - 1240 , - 685 , - 446 , - 1787 , - 916 , - 4153 , - 2650 , - 2727 , - 592 , - 2565 , - 4854 , - 3667 , - 268 , - 977 , - 2002 , - 4607 , - 5000 , - 4445 , - 4206 , - 491 , - 4676 , - 2857 , - 1354 , - 1431 , - 4352 , - 1269 , - 3558 , - 2371 , - 4028 , - 4737 , - 706 , - 3311 , - 3704 , - 3149 , - 2910 , - 4251 , - 3380 , - 1561 , - 58 , - 135 , - 3056 , - 5029 , - 2262 , - 1075 , - 2732 , - 3441 , - 4466 , - 2015 , - 2408 , - 1853 , - 1614 , - 2955 , - 2084 , - 265 , - 3818 , - 3895 , - 1760 , - 3733 , - 966 , - 4835 , - 1436 , - 2145 , - 3170 , - 719 , - 1112 , - 557 , - 318 , - 1659 , - 788 , - 4025 , - 2522 , - 2599 , - 464 , - 2437 , - 4726 , - 3539 , - 140 , - 849 , - 1874 , - 4479 , - 4872 , - 4317 , - 4078 , - 363 , - 4548 , - 2729 , - 1226 , - 1303 , - 4224 , - 1141 , - 3430 , - 2243 , - 3900 , - 4609 , - 578 , - 3183 , - 3576 , - 3021 , - 2782 , - 4123 , - 3252 , - 1433 , - 4986 , - 7 , - 2928 , - 4901 , - 2134 , - 947 , - 2604 , - 3313 , - 4338 , - 1887 , - 2280 , - 1725 , - 1486 , - 2827 , - 1956 , - 137 , - 3690 , - 3767 , - 1632 , - 3605 , - 838 , - 4707 , - 1308 , - 2017 , - 3042 , - 591 , - 984 , - 429 , - 190 , - 1531 , - 660 , - 3897 , - 2394 , - 2471 , - 336 , - 2309 , - 4598 , - 3411 , - 12 , - 721 , - 1746 , - 4351 , - 4744 , - 4189 , - 3950 , - 235 , - 4420 , - 2601 , - 1098 , - 1175 , - 4096 , - 1013 , - 3302 , - 2115 , - 3772 , - 4481 , - 450 , - 3055 , - 3448 , - 2893 , - 2654 , - 3995 , - 3124 , - 1305 , - 4858 , - 4935 , - 2800 , - 4773 , - 2006 , - 819 , - 2476 , - 3185 , - 4210 , - 1759 , - 2152 , - 1597 , - 1358 , - 2699 , - 1828 , - 9 , - 3562 , - 3639 , - 1504 , - 3477 , - 710 , - 4579 , - 1180 , - 1889 , - 2914 , - 463 , - 856 , - 301 , - 62 , - 1403 , - 532 , - 3769 , - 2266 , - 2343 , - 208 , - 2181 , - 4470 , - 3283 , - 4940 , - 593 , - 1618 , - 4223 , - 4616 , - 4061 , - 3822 , - 107 , - 4292 , - 2473 , - 970 , - 1047 , - 3968 , - 885 , - 3174 , - 1987 , - 3644 , - 4353 , - 322 , - 2927 , - 3320 , - 2765 , - 2526 , - 3867 , - 2996 , - 1177 , - 4730 , - 4807 , - 2672 , - 4645 , - 1878 , - 691 , - 2348 , - 3057 , - 4082 , - 1631 , - 2024 , - 1469 , - 1230 , - 2571 , - 1700 , - 4937 , - 3434 , - 3511 , - 1376 , - 3349 , - 582 , - 4451 , - 1052 , - 1761 , - 2786 , - 335 , - 728 , - 173 , - 4990 , - 1275 , - 404 , - 3641 , - 2138 , - 2215 , - 80 , - 2053 , - 4342 , - 3155 , - 4812 , - 465 , - 1490 , - 4095 , - 4488 , - 3933 , - 3694 , - 5035 , - 4164 , - 2345 , - 842 , - 919 , - 3840 , - 757 , - 3046 , - 1859 , - 3516 , - 4225 , - 194 , - 2799 , - 3192 , - 2637 , - 2398 , - 3739 , - 2868 , - 1049 , - 4602 , - 4679 , - 2544 , - 4517 , - 1750 , - 563 , - 2220 , - 2929 , - 3954 , - 1503 , - 1896 , - 1341 , - 1102 , - 2443 , - 1572 , - 4809 , - 3306 , - 3383 , - 1248 , - 3221 , - 454 , - 4323 , - 924 , - 1633 , - 2658 , - 207 , - 600 , - 45 , - 4862 , - 1147 , - 276 , - 3513 , - 2010 , - 2087 , - 5008 , - 1925 , - 4214 , - 3027 , - 4684 , - 337 , - 1362 , - 3967 , - 4360 , - 3805 , - 3566 , - 4907 , - 4036 , - 2217 , - 714 , - 791 , - 3712 , - 629 , - 2918 , - 1731 , - 3388 , - 4097 , - 66 , - 2671 , - 3064 , - 2509 , - 2270 , - 3611 , - 2740 , - 921 , - 4474 , - 4551 , - 2416 , - 4389 , - 1622 , - 435 , - 2092 , - 2801 , - 3826 , - 1375 , - 1768 , - 1213 , - 974 , - 2315 , - 1444 , - 4681 , - 3178 , - 3255 , - 1120 , - 3093 , - 326 , - 4195 , - 796 , - 1505 , - 2530 , - 79 , - 472 , - 4973 , - 4734 , - 1019 , - 148 , - 3385 , - 1882 , - 1959 , - 4880 , - 1797 , - 4086 , - 2899 , - 4556 , - 209 , - 1234 , - 3839 , - 4232 , - 3677 , - 3438 , - 4779 , - 3908 , - 2089 , - 586 , - 663 , - 3584 , - 501 , - 2790 , - 1603 , - 3260 , - 3969 , - 4994 , - 2543 , - 2936 , - 2381 , - 2142 , - 3483 , - 2612 , - 793 , - 4346 , - 4423 , - 2288 , - 4261 , - 1494 , - 307 , - 1964 , - 2673 , - 3698 , - 1247 , - 1640 , - 1085 , - 846 , - 2187 , - 1316 , - 4553 , - 3050 , - 3127 , - 992 , - 2965 , - 198 , - 4067 , - 668 , - 1377 , - 2402 , - 5007 , - 344 , - 4845 , - 4606 , - 891 , - 20 , - 3257 , - 1754 , - 1831 , - 4752 , - 1669 , - 3958 , - 2771 , - 4428 , - 81 , - 1106 , - 3711 , - 4104 , - 3549 , - 3310 , - 4651 , - 3780 , - 1961 , - 458 , - 535 , - 3456 , - 373 , - 2662 , - 1475 , - 3132 , - 3841 , - 4866 , - 2415 , - 2808 , - 2253 , - 2014 , - 3355 , - 2484 , - 665 , - 4218 , - 4295 , - 2160 , - 4133 , - 1366 , - 179 , - 1836 , - 2545 , - 3570 , - 1119 , - 1512 , - 957 , - 718 , - 2059 , - 1188 , - 4425 , - 2922 , - 2999 , - 864 , - 2837 , - 70 , - 3939 , - 540 , - 1249 , - 2274 , - 4879 , - 216 , - 4717 , - 4478 , - 763 , - 4948 , - 3129 , - 1626 , - 1703 , - 4624 , - 1541 , - 3830 , - 2643 , - 4300 , - 5009 , - 978 , - 3583 , - 3976 , - 3421 , - 3182 , - 4523 , - 3652 , - 1833 , - 330 , - 407 , - 3328 , - 245 , - 2534 , - 1347 , - 3004 , - 3713 , - 4738 , - 2287 , - 2680 , - 2125 , - 1886 , - 3227 , - 2356 , - 537 , - 4090 , - 4167 , - 2032 , - 4005 , - 1238 , - 51 , - 1708 , - 2417 , - 3442 , - 991 , - 1384 , - 829 , - 590 , - 1931 , - 1060 , - 4297 , - 2794 , - 2871 , - 736 , - 2709 , - 4998 , - 3811 , - 412 , - 1121 , - 2146 , - 4751 , - 88 , - 4589 , - 4350 , - 635 , - 4820 , - 3001 , - 1498 , - 1575 , - 4496 , - 1413 , - 3702 , - 2515 , - 4172 , - 4881 , - 850 , - 3455 , - 3848 , - 3293 , - 3054 , - 4395 , - 3524 , - 1705 , - 202 , - 279 , - 3200 , - 117 , - 2406 , - 1219 , - 2876 , - 3585 , - 4610 , - 2159 , - 2552 , - 1997 , - 1758 , - 3099 , - 2228 , - 409 , - 3962 , - 4039 , - 1904 , - 3877 , - 1110 , - 4979 , - 1580 , - 2289 , - 3314 , - 863 , - 1256 , - 701 , - 462 , - 1803 , - 932 , - 4169 , - 2666 , - 2743 , - 608 , - 2581 , - 4870 , - 3683 , - 284 , - 993 , - 2018 , - 4623 , - 5016 , - 4461 , - 4222 , - 507 , - 4692 , - 2873 , - 1370 , - 1447 , - 4368 , - 1285 , - 3574 , - 2387 , - 4044 , - 4753 , - 722 , - 3327 , - 3720 , - 3165 , - 2926 , - 4267 , - 3396 , - 1577 , - 74 , - 151 , - 3072 , - 5045 , - 2278 , - 1091 , - 2748 , - 3457 , - 4482 , - 2031 , - 2424 , - 1869 , - 1630 , - 2971 , - 2100 , - 281 , - 3834 , - 3911 , - 1776 , - 3749 , - 982 , - 4851 , - 1452 , - 2161 , - 3186 , - 735 , - 1128 , - 573 , - 334 , - 1675 , - 804 , - 4041 , - 2538 , - 2615 , - 480 , - 2453 , - 4742 , - 3555 , - 156 , - 865 , - 1890 , - 4495 , - 4888 , - 4333 , - 4094 , - 379 , - 4564 , - 2745 , - 1242 , - 1319 , - 4240 , - 1157 , - 3446 , - 2259 , - 3916 , - 4625 , - 594 , - 3199 , - 3592 , - 3037 , - 2798 , - 4139 , - 3268 , - 1449 , - 5002 , - 23 , - 2944 , - 4917 , - 2150 , - 963 , - 2620 , - 3329 , - 4354 , - 1903 , - 2296 , - 1741 , - 1502 , - 2843 , - 1972 , - 153 , - 3706 , - 3783 , - 1648 , - 3621 , - 854 , - 4723 , - 1324 , - 2033 , - 3058 , - 607 , - 1000 , - 445 , - 206 , - 1547 , - 676 , - 3913 , - 2410 , - 2487 , - 352 , - 2325 , - 4614 , - 3427 , - 28 , - 737 , - 1762 , - 4367 , - 4760 , - 4205 , - 3966 , - 251 , - 4436 , - 2617 , - 1114 , - 1191 , - 4112 , - 1029 , - 3318 , - 2131 , - 3788 , - 4497 , - 466 , - 3071 , - 3464 , - 2909 , - 2670 , - 4011 , - 3140 , - 1321 , - 4874 , - 4951 , - 2816 , - 4789 , - 2022 , - 835 , - 2492 , - 3201 , - 4226 , - 1775 , - 2168 , - 1613 , - 1374 , - 2715 , - 1844 , - 25 , - 3578 , - 3655 , - 1520 , - 3493 , - 726 , - 4595 , - 1196 , - 1905 , - 2930 , - 479 , - 872 , - 317 , - 78 , - 1419 , - 548 , - 3785 , - 2282 , - 2359 , - 224 , - 2197 , - 4486 , - 3299 , - 4956 , - 609 , - 1634 , - 4239 , - 4632 , - 4077 , - 3838 , - 123 , - 4308 , - 2489 , - 986 , - 1063 , - 3984 , - 901 , - 3190 , - 2003 , - 3660 , - 4369 , - 338 , - 2943 , - 3336 , - 2781 , - 2542 , - 3883 , - 3012 , - 1193 , - 4746 , - 4823 , - 2688 , - 4661 , - 1894 , - 707 , - 2364 , - 3073 , - 4098 , - 1647 , - 2040 , - 1485 , - 1246 , - 2587 , - 1716 , - 4953 , - 3450 , - 3527 , - 1392 , - 3365 , - 598 , - 4467 , - 1068 , - 1777 , - 2802 , - 351 , - 744 , - 189 , - 5006 , - 1291 , - 420 , - 3657 , - 2154 , - 2231 , - 96 , - 2069 , - 4358 , - 3171 , - 4828 , - 481 , - 1506 , - 4111 , - 4504 , - 3949 , - 3710 , - 5051 , - 4180 , - 2361 , - 858 , - 935 , - 3856 , - 773 , - 3062 , - 1875 , - 3532 , - 4241 , - 210 , - 2815 , - 3208 , - 2653 , - 2414 , - 3755 , - 2884 , - 1065 , - 4618 , - 4695 , - 2560 , - 4533 , - 1766 , - 579 , - 2236 , - 2945 , - 3970 , - 1519 , - 1912 , - 1357 , - 1118 , - 2459 , - 1588 , - 4825 , - 3322 , - 3399 , - 1264 , - 3237 , - 470 , - 4339 , - 940 , - 1649 , - 2674 , - 223 , - 616 , - 61 , - 4878 , - 1163 , - 292 , - 3529 , - 2026 , - 2103 , - 5024 , - 1941 , - 4230 , - 3043 , - 4700 , - 353 , - 1378 , - 3983 , - 4376 , - 3821 , - 3582 , - 4923 , - 4052 , - 2233 , - 730 , - 807 , - 3728 , - 645 , - 2934 , - 1747 , - 3404 , - 4113 , - 82 , - 2687 , - 3080 , - 2525 , - 2286 , - 3627 , - 2756 , - 937 , - 4490 , - 4567 , - 2432 , - 4405 , - 1638 , - 451 , - 2108 , - 2817 , - 3842 , - 1391 , - 1784 , - 1229 , - 990 , - 2331 , - 1460 , - 4697 , - 3194 , - 3271 , - 1136 , - 3109 , - 342 , - 4211 , - 812 , - 1521 , - 2546 , - 95 , - 488 , - 4989 , - 4750 , - 1035 , - 164 , - 3401 , - 1898 , - 1975 , - 4896 , - 1813 , - 4102 , - 2915 , - 4572 , - 225 , - 1250 , - 3855 , - 4248 , - 3693 , - 3454 , - 4795 , - 3924 , - 2105 , - 602 , - 679 , - 3600 , - 517 , - 2806 , - 1619 , - 3276 , - 3985 , - 5010 , - 2559 , - 2952 , - 2397 , - 2158 , - 3499 , - 2628 , - 809 , - 4362 , - 4439 , - 2304 , - 4277 , - 1510 , - 323 , - 1980 , - 2689 , - 3714 , - 1263 , - 1656 , - 1101 , - 862 , - 2203 , - 1332 , - 4569 , - 3066 , - 3143 , - 1008 , - 2981 , - 214 , - 4083 , - 684 , - 1393 , - 2418 , - 5023 , - 360 , - 4861 , - 4622 , - 907 , - 36 , - 3273 , - 1770 , - 1847 , - 4768 , - 1685 , - 3974 , - 2787 , - 4444 , - 97 , - 1122 , - 3727 , - 4120 , - 3565 , - 3326 , - 4667 , - 3796 , - 1977 , - 474 , - 551 , - 3472 , - 389 , - 2678 , - 1491 , - 3148 , - 3857 , - 4882 , - 2431 , - 2824 , - 2269 , - 2030 , - 3371 , - 2500 , - 681 , - 4234 , - 4311 , - 2176 , - 4149 , - 1382 , - 195 , - 1852 , - 2561 , - 3586 , - 1135 , - 1528 , - 973 , - 734 , - 2075 , - 1204 , - 4441 , - 2938 , - 3015 , - 880 , - 2853 , - 86 , - 3955 , - 556 , - 1265 , - 2290 , - 4895 , - 232 , - 4733 , - 4494 , - 779 , - 4964 , - 3145 , - 1642 , - 1719 , - 4640 , - 1557 , - 3846 , - 2659 , - 4316 , - 5025 , - 994 , - 3599 , - 3992 , - 3437 , - 3198 , - 4539 , - 3668 , - 1849 , - 346 , - 423 , - 3344 , - 261 , - 2550 , - 1363 , - 3020 , - 3729 , - 4754 , - 2303 , - 2696 , - 2141 , - 1902 , - 3243 , - 2372 , - 553 , - 4106 , - 4183 , - 2048 , - 4021 , - 1254 , - 67 , - 1724 , - 2433 , - 3458 , - 1007 , - 1400 , - 845 , - 606 , - 1947 , - 1076 , - 4313 , - 2810 , - 2887 , - 752 , - 2725 , - 5014 , - 3827 , - 428 , - 1137 , - 2162 , - 4767 , - 104 , - 4605 , - 4366 , - 651 , - 4836 , - 3017 , - 1514 , - 1591 , - 4512 , - 1429 , - 3718 , - 2531 , - 4188 , - 4897 , - 866 , - 3471 , - 3864 , - 3309 , - 3070 , - 4411 , - 3540 , - 1721 , - 218 , - 295 , - 3216 , - 133 , - 2422 , - 1235 , - 2892 , - 3601 , - 4626 , - 2175 , - 2568 , - 2013 , - 1774 , - 3115 , - 2244 , - 425 , - 3978 , - 4055 , - 1920 , - 3893 , - 1126 , - 4995 , - 1596 , - 2305 , - 3330 , - 879 , - 1272 , - 717 , - 478 , - 1819 , - 948 , - 4185 , - 2682 , - 2759 , - 624 , - 2597 , - 4886 , - 3699 , - 300 , - 1009 , - 2034 , - 4639 , - 5032 , - 4477 , - 4238 , - 523 , - 4708 , - 2889 , - 1386 , - 1463 , - 4384 , - 1301 , - 3590 , - 2403 , - 4060 , - 4769 , - 738 , - 3343 , - 3736 , - 3181 , - 2942 , - 4283 , - 3412 , - 1593 , - 90 , - 167 , - 3088 , - 5 , - 2294 , - 1107 , - 2764 , - 3473 , - 4498 , - 2047 , - 2440 , - 1885 , - 1646 , - 2987 , - 2116 , - 297 , - 3850 , - 3927 , - 1792 , - 3765 , - 998 , - 4867 , - 1468 , - 2177 , - 3202 , - 751 , - 1144 , - 589 , - 350 , - 1691 , - 820 , - 4057 , - 2554 , - 2631 , - 496 , - 2469 , - 4758 , - 3571 , - 172 , - 881 , - 1906 , - 4511 , - 4904 , - 4349 , - 4110 , - 395 , - 4580 , - 2761 , - 1258 , - 1335 , - 4256 , - 1173 , - 3462 , - 2275 , - 3932 , - 4641 , - 610 , - 3215 , - 3608 , - 3053 , - 2814 , - 4155 , - 3284 , - 1465 , - 5018 , - 39 , - 2960 , - 4933 , - 2166 , - 979 , - 2636 , - 3345 , - 4370 , - 1919 , - 2312 , - 1757 , - 1518 , - 2859 , - 1988 , - 169 , - 3722 , - 3799 , - 1664 , - 3637 , - 870 , - 4739 , - 1340 , - 2049 , - 3074 , - 623 , - 1016 , - 461 , - 222 , - 1563 , - 692 , - 3929 , - 2426 , - 2503 , - 368 , - 2341 , - 4630 , - 3443 , - 44 , - 753 , - 1778 , - 4383 , - 4776 , - 4221 , - 3982 , - 267 , - 4452 , - 2633 , - 1130 , - 1207 , - 4128 , - 1045 , - 3334 , - 2147 , - 3804 , - 4513 , - 482 , - 3087 , - 3480 , - 2925 , - 2686 , - 4027 , - 3156 , - 1337 , - 4890 , - 4967 , - 2832 , - 4805 , - 2038 , - 851 , - 2508 , - 3217 , - 4242 , - 1791 , - 2184 , - 1629 , - 1390 , - 2731 , - 1860 , - 41 , - 3594 , - 3671 , - 1536 , - 3509 , - 742 , - 4611 , - 1212 , - 1921 , - 2946 , - 495 , - 888 , - 333 , - 94 , - 1435 , - 564 , - 3801 , - 2298 , - 2375 , - 240 , - 2213 , - 4502 , - 3315 , - 4972 , - 625 , - 1650 , - 4255 , - 4648 , - 4093 , - 3854 , - 139 , - 4324 , - 2505 , - 1002 , - 1079 , - 4000 , - 917 , - 3206 , - 2019 , - 3676 , - 4385 , - 354 , - 2959 , - 3352 , - 2797 , - 2558 , - 3899 , - 3028 , - 1209 , - 4762 , - 4839 , - 2704 , - 4677 , - 1910 , - 723 , - 2380 , - 3089 , - 4114 , - 1663 , - 2056 , - 1501 , - 1262 , - 2603 , - 1732 , - 4969 , - 3466 , - 3543 , - 1408 , - 3381 , - 614 , - 4483 , - 1084 , - 1793 , - 2818 , - 367 , - 760 , - 205 , - 5022 , - 1307 , - 436 , - 3673 , - 2170 , - 2247 , - 112 , - 2085 , - 4374 , - 3187 , - 4844 , - 497 , - 1522 , - 4127 , - 4520 , - 3965 , - 3726 , - 11 , - 4196 , - 2377 , - 874 , - 951 , - 3872 , - 789 , - 3078 , - 1891 , - 3548 , - 4257 , - 226 , - 2831 , - 3224 , - 2669 , - 2430 , - 3771 , - 2900 , - 1081 , - 4634 , - 4711 , - 2576 , - 4549 , - 1782 , - 595 , - 2252 , - 2961 , - 3986 , - 1535 , - 1928 , - 1373 , - 1134 , - 2475 , - 1604 , - 4841 , - 3338 , - 3415 , - 1280 , - 3253 , - 486 , - 4355 , - 956 , - 1665 , - 2690 , - 239 , - 632 , - 77 , - 4894 , - 1179 , - 308 , - 3545 , - 2042 , - 2119 , - 5040 , - 1957 , - 4246 , - 3059 , - 4716 , - 369 , - 1394 , - 3999 , - 4392 , - 3837 , - 3598 , - 4939 , - 4068 , - 2249 , - 746 , - 823 , - 3744 , - 661 , - 2950 , - 1763 , - 3420 , - 4129 , - 98 , - 2703 , - 3096 , - 2541 , - 2302 , - 3643 , - 2772 , - 953 , - 4506 , - 4583 , - 2448 , - 4421 , - 1654 , - 467 , - 2124 , - 2833 , - 3858 , - 1407 , - 1800 , - 1245 , - 1006 , - 2347 , - 1476 , - 4713 , - 3210 , - 3287 , - 1152 , - 3125 , - 358 , - 4227 , - 828 , - 1537 , - 2562 , - 111 , - 504 , - 5005 , - 4766 , - 1051 , - 180 , - 3417 , - 1914 , - 1991 , - 4912 , - 1829 , - 4118 , - 2931 , - 4588 , - 241 , - 1266 , - 3871 , - 4264 , - 3709 , - 3470 , - 4811 , - 3940 , - 2121 , - 618 , - 695 , - 3616 , - 533 , - 2822 , - 1635 , - 3292 , - 4001 , - 5026 , - 2575 , - 2968 , - 2413 , - 2174 , - 3515 , - 2644 , - 825 , - 4378 , - 4455 , - 2320 , - 4293 , - 1526 , - 339 , - 1996 , - 2705 , - 3730 , - 1279 , - 1672 , - 1117 , - 878 , - 2219 , - 1348 , - 4585 , - 3082 , - 3159 , - 1024 , - 2997 , - 230 , - 4099 , - 700 , - 1409 , - 2434 , - 5039 , - 376 , - 4877 , - 4638 , - 923 , - 52 , - 3289 , - 1786 , - 1863 , - 4784 , - 1701 , - 3990 , - 2803 , - 4460 , - 113 , - 1138 , - 3743 , - 4136 , - 3581 , - 3342 , - 4683 , - 3812 , - 1993 , - 490 , - 567 , - 3488 , - 405 , - 2694 , - 1507 , - 3164 , - 3873 , - 4898 , - 2447 , - 2840 , - 2285 , - 2046 , - 3387 , - 2516 , - 697 , - 4250 , - 4327 , - 2192 , - 4165 , - 1398 , - 211 , - 1868 , - 2577 , - 3602 , - 1151 , - 1544 , - 989 , - 750 , - 2091 , - 1220 , - 4457 , - 2954 , - 3031 , - 896 , - 2869 , - 102 , - 3971 , - 572 , - 1281 , - 2306 , - 4911 , - 248 , - 4749 , - 4510 , - 795 , - 4980 , - 3161 , - 1658 , - 1735 , - 4656 , - 1573 , - 3862 , - 2675 , - 4332 , - 5041 , - 1010 , - 3615 , - 4008 , - 3453 , - 3214 , - 4555 , - 3684 , - 1865 , - 362 , - 439 , - 3360 , - 277 , - 2566 , - 1379 , - 3036 , - 3745 , - 4770 , - 2319 , - 2712 , - 2157 , - 1918 , - 3259 , - 2388 , - 569 , - 4122 , - 4199 , - 2064 , - 4037 , - 1270 , - 83 , - 1740 , - 2449 , - 3474 , - 1023 , - 1416 , - 861 , - 622 , - 1963 , - 1092 , - 4329 , - 2826 , - 2903 , - 768 , - 2741 , - 5030 , - 3843 , - 444 , - 1153 , - 2178 , - 4783 , - 120 , - 4621 , - 4382 , - 667 , - 4852 , - 3033 , - 1530 , - 1607 , - 4528 , - 1445 , - 3734 , - 2547 , - 4204 , - 4913 , - 882 , - 3487 , - 3880 , - 3325 , - 3086 , - 4427 , - 3556 , - 1737 , - 234 , - 311 , - 3232 , - 149 , - 2438 , - 1251 , - 2908 , - 3617 , - 4642 , - 2191 , - 2584 , - 2029 , - 1790 , - 3131 , - 2260 , - 441 , - 3994 , - 4071 , - 1936 , - 3909 , - 1142 , - 5011 , - 1612 , - 2321 , - 3346 , - 895 , - 1288 , - 733 , - 494 , - 1835 , - 964 , - 4201 , - 2698 , - 2775 , - 640 , - 2613 , - 4902 , - 3715 , - 316 , - 1025 , - 2050 , - 4655 , - 5048 , - 4493 , - 4254 , - 539 , - 4724 , - 2905 , - 1402 , - 1479 , - 4400 , - 1317 , - 3606 , - 2419 , - 4076 , - 4785 , - 754 , - 3359 , - 3752 , - 3197 , - 2958 , - 4299 , - 3428 , - 1609 , - 106 , - 183 , - 3104 , - 21 , - 2310 , - 1123 , - 2780 , - 3489 , - 4514 , - 2063 , - 2456 , - 1901 , - 1662 , - 3003 , - 2132 , - 313 , - 3866 , - 3943 , - 1808 , - 3781 , - 1014 , - 4883 , - 1484 , - 2193 , - 3218 , - 767 , - 1160 , - 605 , - 366 , - 1707 , - 836 , - 4073 , - 2570 , - 2647 , - 512 , - 2485 , - 4774 , - 3587 , - 188 , - 897 , - 1922 , - 4527 , - 4920 , - 4365 , - 4126 , - 411 , - 4596 , - 2777 , - 1274 , - 1351 , - 4272 , - 1189 , - 3478 , - 2291 , - 3948 , - 4657 , - 626 , - 3231 , - 3624 , - 3069 , - 2830 , - 4171 , - 3300 , - 1481 , - 5034 , - 55 , - 2976 , - 4949 , - 2182 , - 995 , - 2652 , - 3361 , - 4386 , - 1935 , - 2328 , - 1773 , - 1534 , - 2875 , - 2004 , - 185 , - 3738 , - 3815 , - 1680 , - 3653 , - 886 , - 4755 , - 1356 , - 2065 , - 3090 , - 639 , - 1032 , - 477 , - 238 , - 1579 , - 708 , - 3945 , - 2442 , - 2519 , - 384 , - 2357 , - 4646 , - 3459 , - 60 , - 769 , - 1794 , - 4399 , - 4792 , - 4237 , - 3998 , - 283 , - 4468 , - 2649 , - 1146 , - 1223 , - 4144 , - 1061 , - 3350 , - 2163 , - 3820 , - 4529 , - 498 , - 3103 , - 3496 , - 2941 , - 2702 , - 4043 , - 3172 , - 1353 , - 4906 , - 4983 , - 2848 , - 4821 , - 2054 , - 867 , - 2524 , - 3233 , - 4258 , - 1807 , - 2200 , - 1645 , - 1406 , - 2747 , - 1876 , - 57 , - 3610 , - 3687 , - 1552 , - 3525 , - 758 , - 4627 , - 1228 , - 1937 , - 2962 , - 511 , - 904 , - 349 , - 110 , - 1451 , - 580 , - 3817 , - 2314 , - 2391 , - 256 , - 2229 , - 4518 , - 3331 , - 4988 , - 641 , - 1666 , - 4271 , - 4664 , - 4109 , - 3870 , - 155 , - 4340 , - 2521 , - 1018 , - 1095 , - 4016 , - 933 , - 3222 , - 2035 , - 3692 , - 4401 , - 370 , - 2975 , - 3368 , - 2813 , - 2574 , - 3915 , - 3044 , - 1225 , - 4778 , - 4855 , - 2720 , - 4693 , - 1926 , - 739 , - 2396 , - 3105 , - 4130 , - 1679 , - 2072 , - 1517 , - 1278 , - 2619 , - 1748 , - 4985 , - 3482 , - 3559 , - 1424 , - 3397 , - 630 , - 4499 , - 1100 , - 1809 , - 2834 , - 383 , - 776 , - 221 , - 5038 , - 1323 , - 452 , - 3689 , - 2186 , - 2263 , - 128 , - 2101 , - 4390 , - 3203 , - 4860 , - 513 , - 1538 , - 4143 , - 4536 , - 3981 , - 3742 , - 27 , - 4212 , - 2393 , - 890 , - 967 , - 3888 , - 805 , - 3094 , - 1907 , - 3564 , - 4273 , - 242 , - 2847 , - 3240 , - 2685 , - 2446 , - 3787 , - 2916 , - 1097 , - 4650 , - 4727 , - 2592 , - 4565 , - 1798 , - 611 , - 2268 , - 2977 , - 4002 , - 1551 , - 1944 , - 1389 , - 1150 , - 2491 , - 1620 , - 4857 , - 3354 , - 3431 , - 1296 , - 3269 , - 502 , - 4371 , - 972 , - 1681 , - 2706 , - 255 , - 648 , - 93 , - 4910 , - 1195 , - 324 , - 3561 , - 2058 , - 2135 , - 0 , - 2919 , - 4718 , - 277 , - 4956 , - 3395 , - 714 , - 2033 , - 2232 , - 1311 , - 4390 , - 1229 , - 2068 , - 1787 , - 386 , - 2985 , - 4464 , - 4823 , - 4062 , - 2181 , - 4300 , - 179 , - 58 , - 3937 , - 1576 , - 3215 , - 3734 , - 3133 , - 1412 , - 3691 , - 4850 , - 4889 , - 3808 , - 1607 , - 3406 , - 4085 , - 3644 , - 2083 , - 4522 , - 721 , - 920 , - 5119 , - 3078 , - 5037 , - 756 , - 475 , - 4194 , - 1673 , - 3152 , - 3511 , - 2750 , - 869 , - 2988 , - 3987 , - 3866 , - 2625 , - 264 , - 1903 , - 2422 , - 1821 , - 100 , - 2379 , - 3538 , - 3577 , - 2496 , - 295 , - 2094 , - 2773 , - 2332 , - 771 , - 3210 , - 4529 , - 4728 , - 3807 , - 1766 , - 3725 , - 4564 , - 4283 , - 2882 , - 361 , - 1840 , - 2199 , - 1438 , - 4677 , - 1676 , - 2675 , - 2554 , - 1313 , - 4072 , - 591 , - 1110 , - 509 , - 3908 , - 1067 , - 2226 , - 2265 , - 1184 , - 4103 , - 782 , - 1461 , - 1020 , - 4579 , - 1898 , - 3217 , - 3416 , - 2495 , - 454 , - 2413 , - 3252 , - 2971 , - 1570 , - 4169 , - 528 , - 887 , - 126 , - 3365 , - 364 , - 1363 , - 1242 , - 1 , - 2760 , - 4399 , - 4918 , - 4317 , - 2596 , - 4875 , - 914 , - 953 , - 4992 , - 2791 , - 4590 , - 149 , - 4828 , - 3267 , - 586 , - 1905 , - 2104 , - 1183 , - 4262 , - 1101 , - 1940 , - 1659 , - 258 , - 2857 , - 4336 , - 4695 , - 3934 , - 2053 , - 4172 , - 51 , - 5050 , - 3809 , - 1448 , - 3087 , - 3606 , - 3005 , - 1284 , - 3563 , - 4722 , - 4761 , - 3680 , - 1479 , - 3278 , - 3957 , - 3516 , - 1955 , - 4394 , - 593 , - 792 , - 4991 , - 2950 , - 4909 , - 628 , - 347 , - 4066 , - 1545 , - 3024 , - 3383 , - 2622 , - 741 , - 2860 , - 3859 , - 3738 , - 2497 , - 136 , - 1775 , - 2294 , - 1693 , - 5092 , - 2251 , - 3410 , - 3449 , - 2368 , - 167 , - 1966 , - 2645 , - 2204 , - 643 , - 3082 , - 4401 , - 4600 , - 3679 , - 1638 , - 3597 , - 4436 , - 4155 , - 2754 , - 233 , - 1712 , - 2071 , - 1310 , - 4549 , - 1548 , - 2547 , - 2426 , - 1185 , - 3944 , - 463 , - 982 , - 381 , - 3780 , - 939 , - 2098 , - 2137 , - 1056 , - 3975 , - 654 , - 1333 , - 892 , - 4451 , - 1770 , - 3089 , - 3288 , - 2367 , - 326 , - 2285 , - 3124 , - 2843 , - 1442 , - 4041 , - 400 , - 759 , - 5118 , - 3237 , - 236 , - 1235 , - 1114 , - 4993 , - 2632 , - 4271 , - 4790 , - 4189 , - 2468 , - 4747 , - 786 , - 825 , - 4864 , - 2663 , - 4462 , - 21 , - 4700 , - 3139 , - 458 , - 1777 , - 1976 , - 1055 , - 4134 , - 973 , - 1812 , - 1531 , - 130 , - 2729 , - 4208 , - 4567 , - 3806 , - 1925 , - 4044 , - 5043 , - 4922 , - 3681 , - 1320 , - 2959 , - 3478 , - 2877 , - 1156 , - 3435 , - 4594 , - 4633 , - 3552 , - 1351 , - 3150 , - 3829 , - 3388 , - 1827 , - 4266 , - 465 , - 664 , - 4863 , - 2822 , - 4781 , - 500 , - 219 , - 3938 , - 1417 , - 2896 , - 3255 , - 2494 , - 613 , - 2732 , - 3731 , - 3610 , - 2369 , - 8 , - 1647 , - 2166 , - 1565 , - 4964 , - 2123 , - 3282 , - 3321 , - 2240 , - 39 , - 1838 , - 2517 , - 2076 , - 515 , - 2954 , - 4273 , - 4472 , - 3551 , - 1510 , - 3469 , - 4308 , - 4027 , - 2626 , - 105 , - 1584 , - 1943 , - 1182 , - 4421 , - 1420 , - 2419 , - 2298 , - 1057 , - 3816 , - 335 , - 854 , - 253 , - 3652 , - 811 , - 1970 , - 2009 , - 928 , - 3847 , - 526 , - 1205 , - 764 , - 4323 , - 1642 , - 2961 , - 3160 , - 2239 , - 198 , - 2157 , - 2996 , - 2715 , - 1314 , - 3913 , - 272 , - 631 , - 4990 , - 3109 , - 108 , - 1107 , - 986 , - 4865 , - 2504 , - 4143 , - 4662 , - 4061 , - 2340 , - 4619 , - 658 , - 697 , - 4736 , - 2535 , - 4334 , - 5013 , - 4572 , - 3011 , - 330 , - 1649 , - 1848 , - 927 , - 4006 , - 845 , - 1684 , - 1403 , - 2 , - 2601 , - 4080 , - 4439 , - 3678 , - 1797 , - 3916 , - 4915 , - 4794 , - 3553 , - 1192 , - 2831 , - 3350 , - 2749 , - 1028 , - 3307 , - 4466 , - 4505 , - 3424 , - 1223 , - 3022 , - 3701 , - 3260 , - 1699 , - 4138 , - 337 , - 536 , - 4735 , - 2694 , - 4653 , - 372 , - 91 , - 3810 , - 1289 , - 2768 , - 3127 , - 2366 , - 485 , - 2604 , - 3603 , - 3482 , - 2241 , - 5000 , - 1519 , - 2038 , - 1437 , - 4836 , - 1995 , - 3154 , - 3193 , - 2112 , - 5031 , - 1710 , - 2389 , - 1948 , - 387 , - 2826 , - 4145 , - 4344 , - 3423 , - 1382 , - 3341 , - 4180 , - 3899 , - 2498 , - 5097 , - 1456 , - 1815 , - 1054 , - 4293 , - 1292 , - 2291 , - 2170 , - 929 , - 3688 , - 207 , - 726 , - 125 , - 3524 , - 683 , - 1842 , - 1881 , - 800 , - 3719 , - 398 , - 1077 , - 636 , - 4195 , - 1514 , - 2833 , - 3032 , - 2111 , - 70 , - 2029 , - 2868 , - 2587 , - 1186 , - 3785 , - 144 , - 503 , - 4862 , - 2981 , - 5100 , - 979 , - 858 , - 4737 , - 2376 , - 4015 , - 4534 , - 3933 , - 2212 , - 4491 , - 530 , - 569 , - 4608 , - 2407 , - 4206 , - 4885 , - 4444 , - 2883 , - 202 , - 1521 , - 1720 , - 799 , - 3878 , - 717 , - 1556 , - 1275 , - 4994 , - 2473 , - 3952 , - 4311 , - 3550 , - 1669 , - 3788 , - 4787 , - 4666 , - 3425 , - 1064 , - 2703 , - 3222 , - 2621 , - 900 , - 3179 , - 4338 , - 4377 , - 3296 , - 1095 , - 2894 , - 3573 , - 3132 , - 1571 , - 4010 , - 209 , - 408 , - 4607 , - 2566 , - 4525 , - 244 , - 5083 , - 3682 , - 1161 , - 2640 , - 2999 , - 2238 , - 357 , - 2476 , - 3475 , - 3354 , - 2113 , - 4872 , - 1391 , - 1910 , - 1309 , - 4708 , - 1867 , - 3026 , - 3065 , - 1984 , - 4903 , - 1582 , - 2261 , - 1820 , - 259 , - 2698 , - 4017 , - 4216 , - 3295 , - 1254 , - 3213 , - 4052 , - 3771 , - 2370 , - 4969 , - 1328 , - 1687 , - 926 , - 4165 , - 1164 , - 2163 , - 2042 , - 801 , - 3560 , - 79 , - 598 , - 5117 , - 3396 , - 555 , - 1714 , - 1753 , - 672 , - 3591 , - 270 , - 949 , - 508 , - 4067 , - 1386 , - 2705 , - 2904 , - 1983 , - 5062 , - 1901 , - 2740 , - 2459 , - 1058 , - 3657 , - 16 , - 375 , - 4734 , - 2853 , - 4972 , - 851 , - 730 , - 4609 , - 2248 , - 3887 , - 4406 , - 3805 , - 2084 , - 4363 , - 402 , - 441 , - 4480 , - 2279 , - 4078 , - 4757 , - 4316 , - 2755 , - 74 , - 1393 , - 1592 , - 671 , - 3750 , - 589 , - 1428 , - 1147 , - 4866 , - 2345 , - 3824 , - 4183 , - 3422 , - 1541 , - 3660 , - 4659 , - 4538 , - 3297 , - 936 , - 2575 , - 3094 , - 2493 , - 772 , - 3051 , - 4210 , - 4249 , - 3168 , - 967 , - 2766 , - 3445 , - 3004 , - 1443 , - 3882 , - 81 , - 280 , - 4479 , - 2438 , - 4397 , - 116 , - 4955 , - 3554 , - 1033 , - 2512 , - 2871 , - 2110 , - 229 , - 2348 , - 3347 , - 3226 , - 1985 , - 4744 , - 1263 , - 1782 , - 1181 , - 4580 , - 1739 , - 2898 , - 2937 , - 1856 , - 4775 , - 1454 , - 2133 , - 1692 , - 131 , - 2570 , - 3889 , - 4088 , - 3167 , - 1126 , - 3085 , - 3924 , - 3643 , - 2242 , - 4841 , - 1200 , - 1559 , - 798 , - 4037 , - 1036 , - 2035 , - 1914 , - 673 , - 3432 , - 5071 , - 470 , - 4989 , - 3268 , - 427 , - 1586 , - 1625 , - 544 , - 3463 , - 142 , - 821 , - 380 , - 3939 , - 1258 , - 2577 , - 2776 , - 1855 , - 4934 , - 1773 , - 2612 , - 2331 , - 930 , - 3529 , - 5008 , - 247 , - 4606 , - 2725 , - 4844 , - 723 , - 602 , - 4481 , - 2120 , - 3759 , - 4278 , - 3677 , - 1956 , - 4235 , - 274 , - 313 , - 4352 , - 2151 , - 3950 , - 4629 , - 4188 , - 2627 , - 5066 , - 1265 , - 1464 , - 543 , - 3622 , - 461 , - 1300 , - 1019 , - 4738 , - 2217 , - 3696 , - 4055 , - 3294 , - 1413 , - 3532 , - 4531 , - 4410 , - 3169 , - 808 , - 2447 , - 2966 , - 2365 , - 644 , - 2923 , - 4082 , - 4121 , - 3040 , - 839 , - 2638 , - 3317 , - 2876 , - 1315 , - 3754 , - 5073 , - 152 , - 4351 , - 2310 , - 4269 , - 5108 , - 4827 , - 3426 , - 905 , - 2384 , - 2743 , - 1982 , - 101 , - 2220 , - 3219 , - 3098 , - 1857 , - 4616 , - 1135 , - 1654 , - 1053 , - 4452 , - 1611 , - 2770 , - 2809 , - 1728 , - 4647 , - 1326 , - 2005 , - 1564 , - 3 , - 2442 , - 3761 , - 3960 , - 3039 , - 998 , - 2957 , - 3796 , - 3515 , - 2114 , - 4713 , - 1072 , - 1431 , - 670 , - 3909 , - 908 , - 1907 , - 1786 , - 545 , - 3304 , - 4943 , - 342 , - 4861 , - 3140 , - 299 , - 1458 , - 1497 , - 416 , - 3335 , - 14 , - 693 , - 252 , - 3811 , - 1130 , - 2449 , - 2648 , - 1727 , - 4806 , - 1645 , - 2484 , - 2203 , - 802 , - 3401 , - 4880 , - 119 , - 4478 , - 2597 , - 4716 , - 595 , - 474 , - 4353 , - 1992 , - 3631 , - 4150 , - 3549 , - 1828 , - 4107 , - 146 , - 185 , - 4224 , - 2023 , - 3822 , - 4501 , - 4060 , - 2499 , - 4938 , - 1137 , - 1336 , - 415 , - 3494 , - 333 , - 1172 , - 891 , - 4610 , - 2089 , - 3568 , - 3927 , - 3166 , - 1285 , - 3404 , - 4403 , - 4282 , - 3041 , - 680 , - 2319 , - 2838 , - 2237 , - 516 , - 2795 , - 3954 , - 3993 , - 2912 , - 711 , - 2510 , - 3189 , - 2748 , - 1187 , - 3626 , - 4945 , - 24 , - 4223 , - 2182 , - 4141 , - 4980 , - 4699 , - 3298 , - 777 , - 2256 , - 2615 , - 1854 , - 5093 , - 2092 , - 3091 , - 2970 , - 1729 , - 4488 , - 1007 , - 1526 , - 925 , - 4324 , - 1483 , - 2642 , - 2681 , - 1600 , - 4519 , - 1198 , - 1877 , - 1436 , - 4995 , - 2314 , - 3633 , - 3832 , - 2911 , - 870 , - 2829 , - 3668 , - 3387 , - 1986 , - 4585 , - 944 , - 1303 , - 542 , - 3781 , - 780 , - 1779 , - 1658 , - 417 , - 3176 , - 4815 , - 214 , - 4733 , - 3012 , - 171 , - 1330 , - 1369 , - 288 , - 3207 , - 5006 , - 565 , - 124 , - 3683 , - 1002 , - 2321 , - 2520 , - 1599 , - 4678 , - 1517 , - 2356 , - 2075 , - 674 , - 3273 , - 4752 , - 5111 , - 4350 , - 2469 , - 4588 , - 467 , - 346 , - 4225 , - 1864 , - 3503 , - 4022 , - 3421 , - 1700 , - 3979 , - 18 , - 57 , - 4096 , - 1895 , - 3694 , - 4373 , - 3932 , - 2371 , - 4810 , - 1009 , - 1208 , - 287 , - 3366 , - 205 , - 1044 , - 763 , - 4482 , - 1961 , - 3440 , - 3799 , - 3038 , - 1157 , - 3276 , - 4275 , - 4154 , - 2913 , - 552 , - 2191 , - 2710 , - 2109 , - 388 , - 2667 , - 3826 , - 3865 , - 2784 , - 583 , - 2382 , - 3061 , - 2620 , - 1059 , - 3498 , - 4817 , - 5016 , - 4095 , - 2054 , - 4013 , - 4852 , - 4571 , - 3170 , - 649 , - 2128 , - 2487 , - 1726 , - 4965 , - 1964 , - 2963 , - 2842 , - 1601 , - 4360 , - 879 , - 1398 , - 797 , - 4196 , - 1355 , - 2514 , - 2553 , - 1472 , - 4391 , - 1070 , - 1749 , - 1308 , - 4867 , - 2186 , - 3505 , - 3704 , - 2783 , - 742 , - 2701 , - 3540 , - 3259 , - 1858 , - 4457 , - 816 , - 1175 , - 414 , - 3653 , - 652 , - 1651 , - 1530 , - 289 , - 3048 , - 4687 , - 86 , - 4605 , - 2884 , - 43 , - 1202 , - 1241 , - 160 , - 3079 , - 4878 , - 437 , - 5116 , - 3555 , - 874 , - 2193 , - 2392 , - 1471 , - 4550 , - 1389 , - 2228 , - 1947 , - 546 , - 3145 , - 4624 , - 4983 , - 4222 , - 2341 , - 4460 , - 339 , - 218 , - 4097 , - 1736 , - 3375 , - 3894 , - 3293 , - 1572 , - 3851 , - 5010 , - 5049 , - 3968 , - 1767 , - 3566 , - 4245 , - 3804 , - 2243 , - 4682 , - 881 , - 1080 , - 159 , - 3238 , - 77 , - 916 , - 635 , - 4354 , - 1833 , - 3312 , - 3671 , - 2910 , - 1029 , - 3148 , - 4147 , - 4026 , - 2785 , - 424 , - 2063 , - 2582 , - 1981 , - 260 , - 2539 , - 3698 , - 3737 , - 2656 , - 455 , - 2254 , - 2933 , - 2492 , - 931 , - 3370 , - 4689 , - 4888 , - 3967 , - 1926 , - 3885 , - 4724 , - 4443 , - 3042 , - 521 , - 2000 , - 2359 , - 1598 , - 4837 , - 1836 , - 2835 , - 2714 , - 1473 , - 4232 , - 751 , - 1270 , - 669 , - 4068 , - 1227 , - 2386 , - 2425 , - 1344 , - 4263 , - 942 , - 1621 , - 1180 , - 4739 , - 2058 , - 3377 , - 3576 , - 2655 , - 614 , - 2573 , - 3412 , - 3131 , - 1730 , - 4329 , - 688 , - 1047 , - 286 , - 3525 , - 524 , - 1523 , - 1402 , - 161 , - 2920 , - 4559 , - 5078 , - 4477 , - 2756 , - 5035 , - 1074 , - 1113 , - 32 , - 2951 , - 4750 , - 309 , - 4988 , - 3427 , - 746 , - 2065 , - 2264 , - 1343 , - 4422 , - 1261 , - 2100 , - 1819 , - 418 , - 3017 , - 4496 , - 4855 , - 4094 , - 2213 , - 4332 , - 211 , - 90 , - 3969 , - 1608 , - 3247 , - 3766 , - 3165 , - 1444 , - 3723 , - 4882 , - 4921 , - 3840 , - 1639 , - 3438 , - 4117 , - 3676 , - 2115 , - 4554 , - 753 , - 952 , - 31 , - 3110 , - 5069 , - 788 , - 507 , - 4226 , - 1705 , - 3184 , - 3543 , - 2782 , - 901 , - 3020 , - 4019 , - 3898 , - 2657 , - 296 , - 1935 , - 2454 , - 1853 , - 132 , - 2411 , - 3570 , - 3609 , - 2528 , - 327 , - 2126 , - 2805 , - 2364 , - 803 , - 3242 , - 4561 , - 4760 , - 3839 , - 1798 , - 3757 , - 4596 , - 4315 , - 2914 , - 393 , - 1872 , - 2231 , - 1470 , - 4709 , - 1708 , - 2707 , - 2586 , - 1345 , - 4104 , - 623 , - 1142 , - 541 , - 3940 , - 1099 , - 2258 , - 2297 , - 1216 , - 4135 , - 814 , - 1493 , - 1052 , - 4611 , - 1930 , - 3249 , - 3448 , - 2527 , - 486 , - 2445 , - 3284 , - 3003 , - 1602 , - 4201 , - 560 , - 919 , - 158 , - 3397 , - 396 , - 1395 , - 1274 , - 33 , - 2792 , - 4431 , - 4950 , - 4349 , - 2628 , - 4907 , - 946 , - 985 , - 5024 , - 2823 , - 4622 , - 181 , - 4860 , - 3299 , - 618 , - 1937 , - 2136 , - 1215 , - 4294 , - 1133 , - 1972 , - 1691 , - 290 , - 2889 , - 4368 , - 4727 , - 3966 , - 2085 , - 4204 , - 83 , - 5082 , - 3841 , - 1480 , - 3119 , - 3638 , - 3037 , - 1316 , - 3595 , - 4754 , - 4793 , - 3712 , - 1511 , - 3310 , - 3989 , - 3548 , - 1987 , - 4426 , - 625 , - 824 , - 5023 , - 2982 , - 4941 , - 660 , - 379 , - 4098 , - 1577 , - 3056 , - 3415 , - 2654 , - 773 , - 2892 , - 3891 , - 3770 , - 2529 , - 168 , - 1807 , - 2326 , - 1725 , - 4 , - 2283 , - 3442 , - 3481 , - 2400 , - 199 , - 1998 , - 2677 , - 2236 , - 675 , - 3114 , - 4433 , - 4632 , - 3711 , - 1670 , - 3629 , - 4468 , - 4187 , - 2786 , - 265 , - 1744 , - 2103 , - 1342 , - 4581 , - 1580 , - 2579 , - 2458 , - 1217 , - 3976 , - 495 , - 1014 , - 413 , - 3812 , - 971 , - 2130 , - 2169 , - 1088 , - 4007 , - 686 , - 1365 , - 924 , - 4483 , - 1802 , - 3121 , - 3320 , - 2399 , - 358 , - 2317 , - 3156 , - 2875 , - 1474 , - 4073 , - 432 , - 791 , - 30 , - 3269 , - 268 , - 1267 , - 1146 , - 5025 , - 2664 , - 4303 , - 4822 , - 4221 , - 2500 , - 4779 , - 818 , - 857 , - 4896 , - 2695 , - 4494 , - 53 , - 4732 , - 3171 , - 490 , - 1809 , - 2008 , - 1087 , - 4166 , - 1005 , - 1844 , - 1563 , - 162 , - 2761 , - 4240 , - 4599 , - 3838 , - 1957 , - 4076 , - 5075 , - 4954 , - 3713 , - 1352 , - 2991 , - 3510 , - 2909 , - 1188 , - 3467 , - 4626 , - 4665 , - 3584 , - 1383 , - 3182 , - 3861 , - 3420 , - 1859 , - 4298 , - 497 , - 696 , - 4895 , - 2854 , - 4813 , - 532 , - 251 , - 3970 , - 1449 , - 2928 , - 3287 , - 2526 , - 645 , - 2764 , - 3763 , - 3642 , - 2401 , - 40 , - 1679 , - 2198 , - 1597 , - 4996 , - 2155 , - 3314 , - 3353 , - 2272 , - 71 , - 1870 , - 2549 , - 2108 , - 547 , - 2986 , - 4305 , - 4504 , - 3583 , - 1542 , - 3501 , - 4340 , - 4059 , - 2658 , - 137 , - 1616 , - 1975 , - 1214 , - 4453 , - 1452 , - 2451 , - 2330 , - 1089 , - 3848 , - 367 , - 886 , - 285 , - 3684 , - 843 , - 2002 , - 2041 , - 960 , - 3879 , - 558 , - 1237 , - 796 , - 4355 , - 1674 , - 2993 , - 3192 , - 2271 , - 230 , - 2189 , - 3028 , - 2747 , - 1346 , - 3945 , - 304 , - 663 , - 5022 , - 3141 , - 140 , - 1139 , - 1018 , - 4897 , - 2536 , - 4175 , - 4694 , - 4093 , - 2372 , - 4651 , - 690 , - 729 , - 4768 , - 2567 , - 4366 , - 5045 , - 4604 , - 3043 , - 362 , - 1681 , - 1880 , - 959 , - 4038 , - 877 , - 1716 , - 1435 , - 34 , - 2633 , - 4112 , - 4471 , - 3710 , - 1829 , - 3948 , - 4947 , - 4826 , - 3585 , - 1224 , - 2863 , - 3382 , - 2781 , - 1060 , - 3339 , - 4498 , - 4537 , - 3456 , - 1255 , - 3054 , - 3733 , - 3292 , - 1731 , - 4170 , - 369 , - 568 , - 4767 , - 2726 , - 4685 , - 404 , - 123 , - 3842 , - 1321 , - 2800 , - 3159 , - 2398 , - 517 , - 2636 , - 3635 , - 3514 , - 2273 , - 5032 , - 1551 , - 2070 , - 1469 , - 4868 , - 2027 , - 3186 , - 3225 , - 2144 , - 5063 , - 1742 , - 2421 , - 1980 , - 419 , - 2858 , - 4177 , - 4376 , - 3455 , - 1414 , - 3373 , - 4212 , - 3931 , - 2530 , - 9 , - 1488 , - 1847 , - 1086 , - 4325 , - 1324 , - 2323 , - 2202 , - 961 , - 3720 , - 239 , - 758 , - 157 , - 3556 , - 715 , - 1874 , - 1913 , - 832 , - 3751 , - 430 , - 1109 , - 668 , - 4227 , - 1546 , - 2865 , - 3064 , - 2143 , - 102 , - 2061 , - 2900 , - 2619 , - 1218 , - 3817 , - 176 , - 535 , - 4894 , - 3013 , - 12 , - 1011 , - 890 , - 4769 , - 2408 , - 4047 , - 4566 , - 3965 , - 2244 , - 4523 , - 562 , - 601 , - 4640 , - 2439 , - 4238 , - 4917 , - 4476 , - 2915 , - 234 , - 1553 , - 1752 , - 831 , - 3910 , - 749 , - 1588 , - 1307 , - 5026 , - 2505 , - 3984 , - 4343 , - 3582 , - 1701 , - 3820 , - 4819 , - 4698 , - 3457 , - 1096 , - 2735 , - 3254 , - 2653 , - 932 , - 3211 , - 4370 , - 4409 , - 3328 , - 1127 , - 2926 , - 3605 , - 3164 , - 1603 , - 4042 , - 241 , - 440 , - 4639 , - 2598 , - 4557 , - 276 , - 5115 , - 3714 , - 1193 , - 2672 , - 3031 , - 2270 , - 389 , - 2508 , - 3507 , - 3386 , - 2145 , - 4904 , - 1423 , - 1942 , - 1341 , - 4740 , - 1899 , - 3058 , - 3097 , - 2016 , - 4935 , - 1614 , - 2293 , - 1852 , - 291 , - 2730 , - 4049 , - 4248 , - 3327 , - 1286 , - 3245 , - 4084 , - 3803 , - 2402 , - 5001 , - 1360 , - 1719 , - 958 , - 4197 , - 1196 , - 2195 , - 2074 , - 833 , - 3592 , - 111 , - 630 , - 29 , - 3428 , - 587 , - 1746 , - 1785 , - 704 , - 3623 , - 302 , - 981 , - 540 , - 4099 , - 1418 , - 2737 , - 2936 , - 2015 , - 5094 , - 1933 , - 2772 , - 2491 , - 1090 , - 3689 , - 48 , - 407 , - 4766 , - 2885 , - 5004 , - 883 , - 762 , - 4641 , - 2280 , - 3919 , - 4438 , - 3837 , - 2116 , - 4395 , - 434 , - 473 , - 4512 , - 2311 , - 4110 , - 4789 , - 4348 , - 2787 , - 106 , - 1425 , - 1624 , - 703 , - 3782 , - 621 , - 1460 , - 1179 , - 4898 , - 2377 , - 3856 , - 4215 , - 3454 , - 1573 , - 3692 , - 4691 , - 4570 , - 3329 , - 968 , - 2607 , - 3126 , - 2525 , - 804 , - 3083 , - 4242 , - 4281 , - 3200 , - 999 , - 2798 , - 3477 , - 3036 , - 1475 , - 3914 , - 113 , - 312 , - 4511 , - 2470 , - 4429 , - 148 , - 4987 , - 3586 , - 1065 , - 2544 , - 2903 , - 2142 , - 261 , - 2380 , - 3379 , - 3258 , - 2017 , - 4776 , - 1295 , - 1814 , - 1213 , - 4612 , - 1771 , - 2930 , - 2969 , - 1888 , - 4807 , - 1486 , - 2165 , - 1724 , - 163 , - 2602 , - 3921 , - 4120 , - 3199 , - 1158 , - 3117 , - 3956 , - 3675 , - 2274 , - 4873 , - 1232 , - 1591 , - 830 , - 4069 , - 1068 , - 2067 , - 1946 , - 705 , - 3464 , - 5103 , - 502 , - 5021 , - 3300 , - 459 , - 1618 , - 1657 , - 576 , - 3495 , - 174 , - 853 , - 412 , - 3971 , - 1290 , - 2609 , - 2808 , - 1887 , - 4966 , - 1805 , - 2644 , - 2363 , - 962 , - 3561 , - 5040 , - 279 , - 4638 , - 2757 , - 4876 , - 755 , - 634 , - 4513 , - 2152 , - 3791 , - 4310 , - 3709 , - 1988 , - 4267 , - 306 , - 345 , - 4384 , - 2183 , - 3982 , - 4661 , - 4220 , - 2659 , - 5098 , - 1297 , - 1496 , - 575 , - 3654 , - 493 , - 1332 , - 1051 , - 4770 , - 2249 , - 3728 , - 4087 , - 3326 , - 1445 , - 3564 , - 4563 , - 4442 , - 3201 , - 840 , - 2479 , - 2998 , - 2397 , - 676 , - 2955 , - 4114 , - 4153 , - 3072 , - 871 , - 2670 , - 3349 , - 2908 , - 1347 , - 3786 , - 5105 , - 184 , - 4383 , - 2342 , - 4301 , - 20 , - 4859 , - 3458 , - 937 , - 2416 , - 2775 , - 2014 , - 133 , - 2252 , - 3251 , - 3130 , - 1889 , - 4648 , - 1167 , - 1686 , - 1085 , - 4484 , - 1643 , - 2802 , - 2841 , - 1760 , - 4679 , - 1358 , - 2037 , - 1596 , - 35 , - 2474 , - 3793 , - 3992 , - 3071 , - 1030 , - 2989 , - 3828 , - 3547 , - 2146 , - 4745 , - 1104 , - 1463 , - 702 , - 3941 , - 940 , - 1939 , - 1818 , - 577 , - 3336 , - 4975 , - 374 , - 4893 , - 3172 , - 331 , - 1490 , - 1529 , - 448 , - 3367 , - 46 , - 725 , - 284 , - 3843 , - 1162 , - 2481 , - 2680 , - 1759 , - 4838 , - 1677 , - 2516 , - 2235 , - 834 , - 3433 , - 4912 , - 151 , - 4510 , - 2629 , - 4748 , - 627 , - 506 , - 4385 , - 2024 , - 3663 , - 4182 , - 3581 , - 1860 , - 4139 , - 178 , - 217 , - 4256 , - 2055 , - 3854 , - 4533 , - 4092 , - 2531 , - 4970 , - 1169 , - 1368 , - 447 , - 3526 , - 365 , - 1204 , - 923 , - 4642 , - 2121 , - 3600 , - 3959 , - 3198 , - 1317 , - 3436 , - 4435 , - 4314 , - 3073 , - 712 , - 2351 , - 2870 , - 2269 , - 548 , - 2827 , - 3986 , - 4025 , - 2944 , - 743 , - 2542 , - 3221 , - 2780 , - 1219 , - 3658 , - 4977 , - 56 , - 4255 , - 2214 , - 4173 , - 5012 , - 4731 , - 3330 , - 809 , - 2288 , - 2647 , - 1886 , - 5 , - 2124 , - 3123 , - 3002 , - 1761 , - 4520 , - 1039 , - 1558 , - 957 , - 4356 , - 1515 , - 2674 , - 2713 , - 1632 , - 4551 , - 1230 , - 1909 , - 1468 , - 5027 , - 2346 , - 3665 , - 3864 , - 2943 , - 902 , - 2861 , - 3700 , - 3419 , - 2018 , - 4617 , - 976 , - 1335 , - 574 , - 3813 , - 812 , - 1811 , - 1690 , - 449 , - 3208 , - 4847 , - 246 , - 4765 , - 3044 , - 203 , - 1362 , - 1401 , - 320 , - 3239 , - 5038 , - 597 , - 156 , - 3715 , - 1034 , - 2353 , - 2552 , - 1631 , - 4710 , - 1549 , - 2388 , - 2107 , - 706 , - 3305 , - 4784 , - 23 , - 4382 , - 2501 , - 4620 , - 499 , - 378 , - 4257 , - 1896 , - 3535 , - 4054 , - 3453 , - 1732 , - 4011 , - 50 , - 89 , - 4128 , - 1927 , - 3726 , - 4405 , - 3964 , - 2403 , - 4842 , - 1041 , - 1240 , - 319 , - 3398 , - 237 , - 1076 , - 795 , - 4514 , - 1993 , - 3472 , - 3831 , - 3070 , - 1189 , - 3308 , - 4307 , - 4186 , - 2945 , - 584 , - 2223 , - 2742 , - 2141 , - 420 , - 2699 , - 3858 , - 3897 , - 2816 , - 615 , - 2414 , - 3093 , - 2652 , - 1091 , - 3530 , - 4849 , - 5048 , - 4127 , - 2086 , - 4045 , - 4884 , - 4603 , - 3202 , - 681 , - 2160 , - 2519 , - 1758 , - 4997 , - 1996 , - 2995 , - 2874 , - 1633 , - 4392 , - 911 , - 1430 , - 829 , - 4228 , - 1387 , - 2546 , - 2585 , - 1504 , - 4423 , - 1102 , - 1781 , - 1340 , - 4899 , - 2218 , - 3537 , - 3736 , - 2815 , - 774 , - 2733 , - 3572 , - 3291 , - 1890 , - 4489 , - 848 , - 1207 , - 446 , - 3685 , - 684 , - 1683 , - 1562 , - 321 , - 3080 , - 4719 , - 118 , - 4637 , - 2916 , - 75 , - 1234 , - 1273 , - 192 , - 3111 , - 4910 , - 469 , - 28 , - 3587 , - 906 , - 2225 , - 2424 , - 1503 , - 4582 , - 1421 , - 2260 , - 1979 , - 578 , - 3177 , - 4656 , - 5015 , - 4254 , - 2373 , - 4492 , - 371 , - 250 , - 4129 , - 1768 , - 3407 , - 3926 , - 3325 , - 1604 , - 3883 , - 5042 , - 5081 , - 4000 , - 1799 , - 3598 , - 4277 , - 3836 , - 2275 , - 4714 , - 913 , - 1112 , - 191 , - 3270 , - 109 , - 948 , - 667 , - 4386 , - 1865 , - 3344 , - 3703 , - 2942 , - 1061 , - 3180 , - 4179 , - 4058 , - 2817 , - 456 , - 2095 , - 2614 , - 2013 , - 292 , - 2571 , - 3730 , - 3769 , - 2688 , - 487 , - 2286 , - 2965 , - 2524 , - 963 , - 3402 , - 4721 , - 4920 , - 3999 , - 1958 , - 3917 , - 4756 , - 4475 , - 3074 , - 553 , - 2032 , - 2391 , - 1630 , - 4869 , - 1868 , - 2867 , - 2746 , - 1505 , - 4264 , - 783 , - 1302 , - 701 , - 4100 , - 1259 , - 2418 , - 2457 , - 1376 , - 4295 , - 974 , - 1653 , - 1212 , - 4771 , - 2090 , - 3409 , - 3608 , - 2687 , - 646 , - 2605 , - 3444 , - 3163 , - 1762 , - 4361 , - 720 , - 1079 , - 318 , - 3557 , - 556 , - 1555 , - 1434 , - 193 , - 2952 , - 4591 , - 5110 , - 4509 , - 2788 , - 5067 , - 1106 , - 1145 , - 64 , - 2983 , - 4782 , - 341 , - 5020 , - 3459 , - 778 , - 2097 , - 2296 , - 1375 , - 4454 , - 1293 , - 2132 , - 1851 , - 450 , - 3049 , - 4528 , - 4887 , - 4126 , - 2245 , - 4364 , - 243 , - 122 , - 4001 , - 1640 , - 3279 , - 3798 , - 3197 , - 1476 , - 3755 , - 4914 , - 4953 , - 3872 , - 1671 , - 3470 , - 4149 , - 3708 , - 2147 , - 4586 , - 785 , - 984 , - 63 , - 3142 , - 5101 , - 820 , - 539 , - 4258 , - 1737 , - 3216 , - 3575 , - 2814 , - 933 , - 3052 , - 4051 , - 3930 , - 2689 , - 328 , - 1967 , - 2486 , - 1885 , - 164 , - 2443 , - 3602 , - 3641 , - 2560 , - 359 , - 2158 , - 2837 , - 2396 , - 835 , - 3274 , - 4593 , - 4792 , - 3871 , - 1830 , - 3789 , - 4628 , - 4347 , - 2946 , - 425 , - 1904 , - 2263 , - 1502 , - 4741 , - 1740 , - 2739 , - 2618 , - 1377 , - 4136 , - 655 , - 1174 , - 573 , - 3972 , - 1131 , - 2290 , - 2329 , - 1248 , - 4167 , - 846 , - 1525 , - 1084 , - 4643 , - 1962 , - 3281 , - 3480 , - 2559 , - 518 , - 2477 , - 3316 , - 3035 , - 1634 , - 4233 , - 592 , - 951 , - 190 , - 3429 , - 428 , - 1427 , - 1306 , - 65 , - 2824 , - 4463 , - 4982 , - 4381 , - 2660 , - 4939 , - 978 , - 1017 , - 5056 , - 2855 , - 4654 , - 213 , - 4892 , - 3331 , - 650 , - 1969 , - 2168 , - 1247 , - 4326 , - 1165 , - 2004 , - 1723 , - 322 , - 2921 , - 4400 , - 4759 , - 3998 , - 2117 , - 4236 , - 115 , - 5114 , - 3873 , - 1512 , - 3151 , - 3670 , - 3069 , - 1348 , - 3627 , - 4786 , - 4825 , - 3744 , - 1543 , - 3342 , - 4021 , - 3580 , - 2019 , - 4458 , - 657 , - 856 , - 5055 , - 3014 , - 4973 , - 692 , - 411 , - 4130 , - 1609 , - 3088 , - 3447 , - 2686 , - 805 , - 2924 , - 3923 , - 3802 , - 2561 , - 200 , - 1839 , - 2358 , - 1757 , - 36 , - 2315 , - 3474 , - 3513 , - 2432 , - 231 , - 2030 , - 2709 , - 2268 , - 707 , - 3146 , - 4465 , - 4664 , - 3743 , - 1702 , - 3661 , - 4500 , - 4219 , - 2818 , - 297 , - 1776 , - 2135 , - 1374 , - 4613 , - 1612 , - 2611 , - 2490 , - 1249 , - 4008 , - 527 , - 1046 , - 445 , - 3844 , - 1003 , - 2162 , - 2201 , - 1120 , - 4039 , - 718 , - 1397 , - 956 , - 4515 , - 1834 , - 3153 , - 3352 , - 2431 , - 390 , - 2349 , - 3188 , - 2907 , - 1506 , - 4105 , - 464 , - 823 , - 62 , - 3301 , - 300 , - 1299 , - 1178 , - 5057 , - 2696 , - 4335 , - 4854 , - 4253 , - 2532 , - 4811 , - 850 , - 889 , - 4928 , - 2727 , - 4526 , - 85 , - 4764 , - 3203 , - 522 , - 1841 , - 2040 , - 1119 , - 4198 , - 1037 , - 1876 , - 1595 , - 194 , - 2793 , - 4272 , - 4631 , - 3870 , - 1989 , - 4108 , - 5107 , - 4986 , - 3745 , - 1384 , - 3023 , - 3542 , - 2941 , - 1220 , - 3499 , - 4658 , - 4697 , - 3616 , - 1415 , - 3214 , - 3893 , - 3452 , - 1891 , - 4330 , - 529 , - 728 , - 4927 , - 2886 , - 4845 , - 564 , - 283 , - 4002 , - 1481 , - 2960 , - 3319 , - 2558 , - 677 , - 2796 , - 3795 , - 3674 , - 2433 , - 72 , - 1711 , - 2230 , - 1629 , - 5028 , - 2187 , - 3346 , - 3385 , - 2304 , - 103 , - 1902 , - 2581 , - 2140 , - 579 , - 3018 , - 4337 , - 4536 , - 3615 , - 1574 , - 3533 , - 4372 , - 4091 , - 2690 , - 169 , - 1648 , - 2007 , - 1246 , - 4485 , - 1484 , - 2483 , - 2362 , - 1121 , - 3880 , - 399 , - 918 , - 317 , - 3716 , - 875 , - 2034 , - 2073 , - 992 , - 3911 , - 590 , - 1269 , - 828 , - 4387 , - 1706 , - 3025 , - 3224 , - 2303 , - 262 , - 2221 , - 3060 , - 2779 , - 1378 , - 3977 , - 336 , - 695 , - 5054 , - 3173 , - 172 , - 1171 , - 1050 , - 4929 , - 2568 , - 4207 , - 4726 , - 4125 , - 2404 , - 4683 , - 722 , - 761 , - 4800 , - 2599 , - 4398 , - 5077 , - 4636 , - 3075 , - 394 , - 1713 , - 1912 , - 991 , - 4070 , - 909 , - 1748 , - 1467 , - 66 , - 2665 , - 4144 , - 4503 , - 3742 , - 1861 , - 3980 , - 4979 , - 4858 , - 3617 , - 1256 , - 2895 , - 3414 , - 2813 , - 1092 , - 3371 , - 4530 , - 4569 , - 3488 , - 1287 , - 3086 , - 3765 , - 3324 , - 1763 , - 4202 , - 401 , - 600 , - 4799 , - 2758 , - 4717 , - 436 , - 155 , - 3874 , - 1353 , - 2832 , - 3191 , - 2430 , - 549 , - 2668 , - 3667 , - 3546 , - 2305 , - 5064 , - 1583 , - 2102 , - 1501 , - 4900 , - 2059 , - 3218 , - 3257 , - 2176 , - 5095 , - 1774 , - 2453 , - 2012 , - 451 , - 2890 , - 4209 , - 4408 , - 3487 , - 1446 , - 3405 , - 4244 , - 3963 , - 2562 , - 41 , - 1520 , - 1879 , - 1118 , - 4357 , - 1356 , - 2355 , - 2234 , - 993 , - 3752 , - 271 , - 790 , - 189 , - 3588 , - 747 , - 1906 , - 1945 , - 864 , - 3783 , - 462 , - 1141 , - 700 , - 4259 , - 1578 , - 2897 , - 3096 , - 2175 , - 134 , - 2093 , - 2932 , - 2651 , - 1250 , - 3849 , - 208 , - 567 , - 4926 , - 3045 , - 44 , - 1043 , - 922 , - 4801 , - 2440 , - 4079 , - 4598 , - 3997 , - 2276 , - 4555 , - 594 , - 633 , - 4672 , - 2471 , - 4270 , - 4949 , - 4508 , - 2947 , - 266 , - 1585 , - 1784 , - 863 , - 3942 , - 781 , - 1620 , - 1339 , - 5058 , - 2537 , - 4016 , - 4375 , - 3614 , - 1733 , - 3852 , - 4851 , - 4730 , - 3489 , - 1128 , - 2767 , - 3286 , - 2685 , - 964 , - 3243 , - 4402 , - 4441 , - 3360 , - 1159 , - 2958 , - 3637 , - 3196 , - 1635 , - 4074 , - 273 , - 472 , - 4671 , - 2630 , - 4589 , - 308 , - 27 , - 3746 , - 1225 , - 2704 , - 3063 , - 2302 , - 421 , - 2540 , - 3539 , - 3418 , - 2177 , - 4936 , - 1455 , - 1974 , - 1373 , - 4772 , - 1931 , - 3090 , - 3129 , - 2048 , - 4967 , - 1646 , - 2325 , - 1884 , - 323 , - 2762 , - 4081 , - 4280 , - 3359 , - 1318 , - 3277 , - 4116 , - 3835 , - 2434 , - 5033 , - 1392 , - 1751 , - 990 , - 4229 , - 1228 , - 2227 , - 2106 , - 865 , - 3624 , - 143 , - 662 , - 61 , - 3460 , - 619 , - 1778 , - 1817 , - 736 , - 3655 , - 334 , - 1013 , - 572 , - 4131 , - 1450 , - 2769 , - 2968 , - 2047 , - 6 , - 1965 , - 2804 , - 2523 , - 1122 , - 3721 , - 80 , - 439 , - 4798 , - 2917 , - 5036 , - 915 , - 794 , - 4673 , - 2312 , - 3951 , - 4470 , - 3869 , - 2148 , - 4427 , - 466 , - 505 , - 4544 , - 2343 , - 4142 , - 4821 , - 4380 , - 2819 , - 138 , - 1457 , - 1656 , - 735 , - 3814 , - 653 , - 1492 , - 1211 , - 4930 , - 2409 , - 3888 , - 4247 , - 3486 , - 1605 , - 3724 , - 4723 , - 4602 , - 3361 , - 1000 , - 2639 , - 3158 , - 2557 , - 836 , - 3115 , - 4274 , - 4313 , - 3232 , - 1031 , - 2830 , - 3509 , - 3068 , - 1507 , - 3946 , - 145 , - 344 , - 4543 , - 2502 , - 4461 , - 180 , - 5019 , - 3618 , - 1097 , - 2576 , - 2935 , - 2174 , - 293 , - 2412 , - 3411 , - 3290 , - 2049 , - 4808 , - 1327 , - 1846 , - 1245 , - 4644 , - 1803 , - 2962 , - 3001 , - 1920 , - 4839 , - 1518 , - 2197 , - 1756 , - 195 , - 2634 , - 3953 , - 4152 , - 3231 , - 1190 , - 3149 , - 3988 , - 3707 , - 2306 , - 4905 , - 1264 , - 1623 , - 862 , - 4101 , - 1100 , - 2099 , - 1978 , - 737 , - 3496 , - 15 , - 534 , - 5053 , - 3332 , - 491 , - 1650 , - 1689 , - 608 , - 3527 , - 206 , - 885 , - 444 , - 4003 , - 1322 , - 2641 , - 2840 , - 1919 , - 4998 , - 1837 , - 2676 , - 2395 , - 994 , - 3593 , - 5072 , - 311 , - 4670 , - 2789 , - 4908 , - 787 , - 666 , - 4545 , - 2184 , - 3823 , - 4342 , - 3741 , - 2020 , - 4299 , - 338 , - 377 , - 4416 , - 2215 , - 4014 , - 4693 , - 4252 , - 2691 , - 10 , - 1329 , - 1528 , - 607 , - 3686 , - 525 , - 1364 , - 1083 , - 4802 , - 2281 , - 3760 , - 4119 , - 3358 , - 1477 , - 3596 , - 4595 , - 4474 , - 3233 , - 872 , - 2511 , - 3030 , - 2429 , - 708 , - 2987 , - 4146 , - 4185 , - 3104 , - 903 , - 2702 , - 3381 , - 2940 , - 1379 , - 3818 , - 17 , - 216 , - 4415 , - 2374 , - 4333 , - 52 , - 4891 , - 3490 , - 969 , - 2448 , - 2807 , - 2046 , - 165 , - 2284 , - 3283 , - 3162 , - 1921 , - 4680 , - 1199 , - 1718 , - 1117 , - 4516 , - 1675 , - 2834 , - 2873 , - 1792 , - 4711 , - 1390 , - 2069 , - 1628 , - 67 , - 2506 , - 3825 , - 4024 , - 3103 , - 1062 , - 3021 , - 3860 , - 3579 , - 2178 , - 4777 , - 1136 , - 1495 , - 734 , - 3973 , - 972 , - 1971 , - 1850 , - 609 , - 3368 , - 5007 , - 406 , - 4925 , - 3204 , - 363 , - 1522 , - 1561 , - 480 , - 3399 , - 78 , - 757 , - 316 , - 3875 , - 1194 , - 2513 , - 2712 , - 1791 , - 4870 , - 1709 , - 2548 , - 2267 , - 866 , - 3465 , - 4944 , - 183 , - 4542 , - 2661 , - 4780 , - 659 , - 538 , - 4417 , - 2056 , - 3695 , - 4214 , - 3613 , - 1892 , - 4171 , - 210 , - 249 , - 4288 , - 2087 , - 3886 , - 4565 , - 4124 , - 2563 , - 5002 , - 1201 , - 1400 , - 479 , - 3558 , - 397 , - 1236 , - 955 , - 4674 , - 2153 , - 3632 , - 3991 , - 3230 , - 1349 , - 3468 , - 4467 , - 4346 , - 3105 , - 744 , - 2383 , - 2902 , - 2301 , - 580 , - 2859 , - 4018 , - 4057 , - 2976 , - 775 , - 2574 , - 3253 , - 2812 , - 1251 , - 3690 , - 5009 , - 88 , - 4287 , - 2246 , - 4205 , - 5044 , - 4763 , - 3362 , - 841 , - 2320 , - 2679 , - 1918 , - 37 , - 2156 , - 3155 , - 3034 , - 1793 , - 4552 , - 1071 , - 1590 , - 989 , - 4388 , - 1547 , - 2706 , - 2745 , - 1664 , - 4583 , - 1262 , - 1941 , - 1500 , - 5059 , - 2378 , - 3697 , - 3896 , - 2975 , - 934 , - 2893 , - 3732 , - 3451 , - 2050 , - 4649 , - 1008 , - 1367 , - 606 , - 3845 , - 844 , - 1843 , - 1722 , - 481 , - 3240 , - 4879 , - 278 , - 4797 , - 3076 , - 235 , - 1394 , - 1433 , - 352 , - 3271 , - 5070 , - 629 , - 188 , - 3747 , - 1066 , - 2385 , - 2584 , - 1663 , - 4742 , - 1581 , - 2420 , - 2139 , - 738 , - 3337 , - 4816 , - 55 , - 4414 , - 2533 , - 4652 , - 531 , - 410 , - 4289 , - 1928 , - 3567 , - 4086 , - 3485 , - 1764 , - 4043 , - 82 , - 121 , - 4160 , - 1959 , - 3758 , - 4437 , - 3996 , - 2435 , - 4874 , - 1073 , - 1272 , - 351 , - 3430 , - 269 , - 1108 , - 827 , - 4546 , - 2025 , - 3504 , - 3863 , - 3102 , - 1221 , - 3340 , - 4339 , - 4218 , - 2977 , - 616 , - 2255 , - 2774 , - 2173 , - 452 , - 2731 , - 3890 , - 3929 , - 2848 , - 647 , - 2446 , - 3125 , - 2684 , - 1123 , - 3562 , - 4881 , - 5080 , - 4159 , - 2118 , - 4077 , - 4916 , - 4635 , - 3234 , - 713 , - 2192 , - 2551 , - 1790 , - 5029 , - 2028 , - 3027 , - 2906 , - 1665 , - 4424 , - 943 , - 1462 , - 861 , - 4260 , - 1419 , - 2578 , - 2617 , - 1536 , - 4455 , - 1134 , - 1813 , - 1372 , - 4931 , - 2250 , - 3569 , - 3768 , - 2847 , - 806 , - 2765 , - 3604 , - 3323 , - 1922 , - 4521 , - 880 , - 1239 , - 478 , - 3717 , - 716 , - 1715 , - 1594 , - 353 , - 3112 , - 4751 , - 150 , - 4669 , - 2948 , - 107 , - 1266 , - 1305 , - 224 , - 3143 , - 4942 , - 501 , - 60 , - 3619 , - 938 , - 2257 , - 2456 , - 1535 , - 4614 , - 1453 , - 2292 , - 2011 , - 610 , - 3209 , - 4688 , - 5047 , - 4286 , - 2405 , - 4524 , - 403 , - 282 , - 4161 , - 1800 , - 3439 , - 3958 , - 3357 , - 1636 , - 3915 , - 5074 , - 5113 , - 4032 , - 1831 , - 3630 , - 4309 , - 3868 , - 2307 , - 4746 , - 945 , - 1144 , - 223 , - 3302 , - 141 , - 980 , - 699 , - 4418 , - 1897 , - 3376 , - 3735 , - 2974 , - 1093 , - 3212 , - 4211 , - 4090 , - 2849 , - 488 , - 2127 , - 2646 , - 2045 , - 324 , - 2603 , - 3762 , - 3801 , - 2720 , - 519 , - 2318 , - 2997 , - 2556 , - 995 , - 3434 , - 4753 , - 4952 , - 4031 , - 1990 , - 3949 , - 4788 , - 4507 , - 3106 , - 585 , - 2064 , - 2423 , - 1662 , - 4901 , - 1900 , - 2899 , - 2778 , - 1537 , - 4296 , - 815 , - 1334 , - 733 , - 4132 , - 1291 , - 2450 , - 2489 , - 1408 , - 4327 , - 1006 , - 1685 , - 1244 , - 4803 , - 2122 , - 3441 , - 3640 , - 2719 , - 678 , - 2637 , - 3476 , - 3195 , - 1794 , - 4393 , - 752 , - 1111 , - 350 , - 3589 , - 588 , - 1587 , - 1466 , - 225 , - 2984 , - 4623 , - 22 , - 4541 , - 2820 , - 5099 , - 1138 , - 1177 , - 96 , - 3015 , - 4814 , - 373 , - 5052 , - 3491 , - 810 , - 2129 , - 2328 , - 1407 , - 4486 , - 1325 , - 2164 , - 1883 , - 482 , - 3081 , - 4560 , - 4919 , - 4158 , - 2277 , - 4396 , - 275 , - 154 , - 4033 , - 1672 , - 3311 , - 3830 , - 3229 , - 1508 , - 3787 , - 4946 , - 4985 , - 3904 , - 1703 , - 3502 , - 4181 , - 3740 , - 2179 , - 4618 , - 817 , - 1016 , - 95 , - 3174 , - 13 , - 852 , - 571 , - 4290 , - 1769 , - 3248 , - 3607 , - 2846 , - 965 , - 3084 , - 4083 , - 3962 , - 2721 , - 360 , - 1999 , - 2518 , - 1917 , - 196 , - 2475 , - 3634 , - 3673 , - 2592 , - 391 , - 2190 , - 2869 , - 2428 , - 867 , - 3306 , - 4625 , - 4824 , - 3903 , - 1862 , - 3821 , - 4660 , - 4379 , - 2978 , - 457 , - 1936 , - 2295 , - 1534 , - 4773 , - 1772 , - 2771 , - 2650 , - 1409 , - 4168 , - 687 , - 1206 , - 605 , - 4004 , - 1163 , - 2322 , - 2361 , - 1280 , - 4199 , - 878 , - 1557 , - 1116 , - 4675 , - 1994 , - 3313 , - 3512 , - 2591 , - 550 , - 2509 , - 3348 , - 3067 , - 1666 , - 4265 , - 624 , - 983 , - 222 , - 3461 , - 460 , - 1459 , - 1338 , - 97 , - 2856 , - 4495 , - 5014 , - 4413 , - 2692 , - 4971 , - 1010 , - 1049 , - 5088 , - 2887 , - 4686 , - 245 , - 4924 , - 3363 , - 682 , - 2001 , - 2200 , - 1279 , - 4358 , - 1197 , - 2036 , - 1755 , - 354 , - 2953 , - 4432 , - 4791 , - 4030 , - 2149 , - 4268 , - 147 , - 26 , - 3905 , - 1544 , - 3183 , - 3702 , - 3101 , - 1380 , - 3659 , - 4818 , - 4857 , - 3776 , - 1575 , - 3374 , - 4053 , - 3612 , - 2051 , - 4490 , - 689 , - 888 , - 5087 , - 3046 , - 5005 , - 724 , - 443 , - 4162 , - 1641 , - 3120 , - 3479 , - 2718 , - 837 , - 2956 , - 3955 , - 3834 , - 2593 , - 232 , - 1871 , - 2390 , - 1789 , - 68 , - 2347 , - 3506 , - 3545 , - 2464 , - 263 , - 2062 , - 2741 , - 2300 , - 739 , - 3178 , - 4497 , - 4696 , - 3775 , - 1734 , - 3693 , - 4532 , - 4251 , - 2850 , - 329 , - 1808 , - 2167 , - 1406 , - 4645 , - 1644 , - 2643 , - 2522 , - 1281 , - 4040 , - 559 , - 1078 , - 477 , - 3876 , - 1035 , - 2194 , - 2233 , - 1152 , - 4071 , - 750 , - 1429 , - 988 , - 4547 , - 1866 , - 3185 , - 3384 , - 2463 , - 422 , - 2381 , - 3220 , - 2939 , - 1538 , - 4137 , - 496 , - 855 , - 94 , - 3333 , - 332 , - 1331 , - 1210 , - 5089 , - 2728 , - 4367 , - 4886 , - 4285 , - 2564 , - 4843 , - 882 , - 921 , - 4960 , - 2759 , - 4558 , - 117 , - 4796 , - 3235 , - 554 , - 1873 , - 2072 , - 1151 , - 4230 , - 1069 , - 1908 , - 1627 , - 226 , - 2825 , - 4304 , - 4663 , - 3902 , - 2021 , - 4140 , - 19 , - 5018 , - 3777 , - 1416 , - 3055 , - 3574 , - 2973 , - 1252 , - 3531 , - 4690 , - 4729 , - 3648 , - 1447 , - 3246 , - 3925 , - 3484 , - 1923 , - 4362 , - 561 , - 760 , - 4959 , - 2918 , - 4877 , - 596 , - 315 , - 4034 , - 1513 , - 2992 , - 3351 , - 2590 , - 709 , - 2828 , - 3827 , - 3706 , - 2465 , - 104 , - 1743 , - 2262 , - 1661 , - 5060 , - 2219 , - 3378 , - 3417 , - 2336 , - 135 , - 1934 , - 2613 , - 2172 , - 611 , - 3050 , - 4369 , - 4568 , - 3647 , - 1606 , - 3565 , - 4404 , - 4123 , - 2722 , - 201 , - 1680 , - 2039 , - 1278 , - 4517 , - 1516 , - 2515 , - 2394 , - 1153 , - 3912 , - 431 , - 950 , - 349 , - 3748 , - 907 , - 2066 , - 2105 , - 1024 , - 3943 , - 622 , - 1301 , - 860 , - 4419 , - 1738 , - 3057 , - 3256 , - 2335 , - 294 , - 2253 , - 3092 , - 2811 , - 1410 , - 4009 , - 368 , - 727 , - 5086 , - 3205 , - 204 , - 1203 , - 1082 , - 4961 , - 2600 , - 4239 , - 4758 , - 4157 , - 2436 , - 4715 , - 754 , - 793 , - 4832 , - 2631 , - 4430 , - 5109 , - 4668 , - 3107 , - 426 , - 1745 , - 1944 , - 1023 , - 4102 , - 941 , - 1780 , - 1499 , - 98 , - 2697 , - 4176 , - 4535 , - 3774 , - 1893 , - 4012 , - 5011 , - 4890 , - 3649 , - 1288 , - 2927 , - 3446 , - 2845 , - 1124 , - 3403 , - 4562 , - 4601 , - 3520 , - 1319 , - 3118 , - 3797 , - 3356 , - 1795 , - 4234 , - 433 , - 632 , - 4831 , - 2790 , - 4749 , - 468 , - 187 , - 3906 , - 1385 , - 2864 , - 3223 , - 2462 , - 581 , - 2700 , - 3699 , - 3578 , - 2337 , - 5096 , - 1615 , - 2134 , - 1533 , - 4932 , - 2091 , - 3250 , - 3289 , - 2208 , - 7 , - 1806 , - 2485 , - 2044 , - 483 , - 2922 , - 4241 , - 4440 , - 3519 , - 1478 , - 3437 , - 4276 , - 3995 , - 2594 , - 73 , - 1552 , - 1911 , - 1150 , - 4389 , - 1388 , - 2387 , - 2266 , - 1025 , - 3784 , - 303 , - 822 , - 221 , - 3620 , - 779 , - 1938 , - 1977 , - 896 , - 3815 , - 494 , - 1173 , - 732 , - 4291 , - 1610 , - 2929 , - 3128 , - 2207 , - 166 , - 2125 , - 2964 , - 2683 , - 1282 , - 3881 , - 240 , - 599 , - 4958 , - 3077 , - 76 , - 1075 , - 954 , - 4833 , - 2472 , - 4111 , - 4630 , - 4029 , - 2308 , - 4587 , - 626 , - 665 , - 4704 , - 2503 , - 4302 , - 4981 , - 4540 , - 2979 , - 298 , - 1617 , - 1816 , - 895 , - 3974 , - 813 , - 1652 , - 1371 , - 5090 , - 2569 , - 4048 , - 4407 , - 3646 , - 1765 , - 3884 , - 4883 , - 4762 , - 3521 , - 1160 , - 2799 , - 3318 , - 2717 , - 996 , - 3275 , - 4434 , - 4473 , - 3392 , - 1191 , - 2990 , - 3669 , - 3228 , - 1667 , - 4106 , - 305 , - 504 , - 4703 , - 2662 , - 4621 , - 340 , - 59 , - 3778 , - 1257 , - 2736 , - 3095 , - 2334 , - 453 , - 2572 , - 3571 , - 3450 , - 2209 , - 4968 , - 1487 , - 2006 , - 1405 , - 4804 , - 1963 , - 3122 , - 3161 , - 2080 , - 4999 , - 1678 , - 2357 , - 1916 , - 355 , - 2794 , - 4113 , - 4312 , - 3391 , - 1350 , - 3309 , - 4148 , - 3867 , - 2466 , - 5065 , - 1424 , - 1783 , - 1022 , - 4261 , - 1260 , - 2259 , - 2138 , - 897 , - 3656 , - 175 , - 694 , - 93 , - 3492 , - 651 , - 1810 , - 1849 , - 768 , - 3687 , - 366 , - 1045 , - 604 , - 4163 , - 1482 , - 2801 , - 3000 , - 2079 , - 38 , - 1997 , - 2836 , - 2555 , - 1154 , - 3753 , - 112 , - 471 , - 4830 , - 2949 , - 5068 , - 947 , - 826 , - 4705 , - 2344 , - 3983 , - 4502 , - 3901 , - 2180 , - 4459 , - 498 , - 537 , - 4576 , - 2375 , - 4174 , - 4853 , - 4412 , - 2851 , - 170 , - 1489 , - 1688 , - 767 , - 3846 , - 685 , - 1524 , - 1243 , - 4962 , - 2441 , - 3920 , - 4279 , - 3518 , - 1637 , - 3756 , - 4755 , - 4634 , - 3393 , - 1032 , - 2671 , - 3190 , - 2589 , - 868 , - 3147 , - 4306 , - 4345 , - 3264 , - 1063 , - 2862 , - 3541 , - 3100 , - 1539 , - 3978 , - 177 , - 376 , - 4575 , - 2534 , - 4493 , - 212 , - 5051 , - 3650 , - 1129 , - 2608 , - 2967 , - 2206 , - 325 , - 2444 , - 3443 , - 3322 , - 2081 , - 4840 , - 1359 , - 1878 , - 1277 , - 4676 , - 1835 , - 2994 , - 3033 , - 1952 , - 4871 , - 1550 , - 2229 , - 1788 , - 227 , - 2666 , - 3985 , - 4184 , - 3263 , - 1222 , - 3181 , - 4020 , - 3739 , - 2338 , - 4937 , - 1296 , - 1655 , - 894 , - 4133 , - 1132 , - 2131 , - 2010 , - 769 , - 3528 , - 47 , - 566 , - 5085 , - 3364 , - 523 , - 1682 , - 1721 , - 640 , - 3559 , - 238 , - 917 , - 476 , - 4035 , - 1354 , - 2673 , - 2872 , - 1951 , - 5030 , - 1869 , - 2708 , - 2427 , - 1026 , - 3625 , - 5104 , - 343 , - 4702 , - 2821 , - 4940 , - 819 , - 698 , - 4577 , - 2216 , - 3855 , - 4374 , - 3773 , - 2052 , - 4331 , - 370 , - 409 , - 4448 , - 2247 , - 4046 , - 4725 , - 4284 , - 2723 , - 42 , - 1361 , - 1560 , - 639 , - 3718 , - 557 , - 1396 , - 1115 , - 4834 , - 2313 , - 3792 , - 4151 , - 3390 , - 1509 , - 3628 , - 4627 , - 4506 , - 3265 , - 904 , - 2543 , - 3062 , - 2461 , - 740 , - 3019 , - 4178 , - 4217 , - 3136 , - 935 , - 2734 , - 3413 , - 2972 , - 1411 , - 3850 , - 49 , - 248 , - 4447 , - 2406 , - 4365 , - 84 , - 4923 , - 3522 , - 1001 , - 2480 , - 2839 , - 2078 , - 197 , - 2316 , - 3315 , - 3194 , - 1953 , - 4712 , - 1231 , - 1750 , - 1149 , - 4548 , - 1707 , - 2866 , - 2905 , - 1824 , - 4743 , - 1422 , - 2101 , - 1660 , - 99 , - 2538 , - 3857 , - 4056 , - 3135 , - 1094 , - 3053 , - 3892 , - 3611 , - 2210 , - 4809 , - 1168 , - 1527 , - 766 , - 4005 , - 1004 , - 2003 , - 1882 , - 641 , - 3400 , - 5039 , - 438 , - 4957 , - 3236 , - 395 , - 1554 , - 1593 , - 512 , - 3431 , - 110 , - 789 , - 348 , - 3907 , - 1226 , - 2545 , - 2744 , - 1823 , - 4902 , - 1741 , - 2580 , - 2299 , - 898 , - 3497 , - 4976 , - 215 , - 4574 , - 2693 , - 4812 , - 691 , - 570 , - 4449 , - 2088 , - 3727 , - 4246 , - 3645 , - 1924 , - 4203 , - 242 , - 281 , - 4320 , - 2119 , - 3918 , - 4597 , - 4156 , - 2595 , - 5034 , - 1233 , - 1432 , - 511 , - 3590 , - 429 , - 1268 , - 987 , - 4706 , - 2185 , - 3664 , - 4023 , - 3262 , - 1381 , - 3500 , - 4499 , - 4378 , - 3137 , - 776 , - 2415 , - 2934 , - 2333 , - 612 , - 2891 , - 4050 , - 4089 , - 3008 , - 807 , - 2606 , - 3285 , - 2844 , - 1283 , - 3722 , - 5041 , - 120 , - 4319 , - 2278 , - 4237 , - 5076 , - 4795 , - 3394 , - 873 , - 2352 , - 2711 , - 1950 , - 69 , - 2188 , - 3187 , - 3066 , - 1825 , - 4584 , - 1103 , - 1622 , - 1021 , - 4420 , - 1579 , - 2738 , - 2777 , - 1696 , - 4615 , - 1294 , - 1973 , - 1532 , - 5091 , - 2410 , - 3729 , - 3928 , - 3007 , - 966 , - 2925 , - 3764 , - 3483 , - 2082 , - 4681 , - 1040 , - 1399 , - 638 , - 3877 , - 876 , - 1875 , - 1754 , - 513 , - 3272 , - 4911 , - 310 , - 4829 , - 3108 , - 267 , - 1426 , - 1465 , - 384 , - 3303 , - 5102 , - 661 , - 220 , - 3779 , - 1098 , - 2417 , - 2616 , - 1695 , - 4774 , - 1613 , - 2452 , - 2171 , - 770 , - 3369 , - 4848 , - 87 , - 4446 , - 2565 , - 4684 , - 563 , - 442 , - 4321 , - 1960 , - 3599 , - 4118 , - 3517 , - 1796 , - 4075 , - 114 , - 153 , - 4192 , - 1991 , - 3790 , - 4469 , - 4028 , - 2467 , - 4906 , - 1105 , - 1304 , - 383 , - 3462 , - 301 , - 1140 , - 859 , - 4578 , - 2057 , - 3536 , - 3895 , - 3134 , - 1253 , - 3372 , - 4371 , - 4250 , - 3009 , - 648 , - 2287 , - 2806 , - 2205 , - 484 , - 2763 , - 3922 , - 3961 , - 2880 , - 679 , - 2478 , - 3157 , - 2716 , - 1155 , - 3594 , - 4913 , - 5112 , - 4191 , - 2150 , - 4109 , - 4948 , - 4667 , - 3266 , - 745 , - 2224 , - 2583 , - 1822 , - 5061 , - 2060 , - 3059 , - 2938 , - 1697 , - 4456 , - 975 , - 1494 , - 893 , - 4292 , - 1451 , - 2610 , - 2649 , - 1568 , - 4487 , - 1166 , - 1845 , - 1404 , - 4963 , - 2282 , - 3601 , - 3800 , - 2879 , - 838 , - 2797 , - 3636 , - 3355 , - 1954 , - 4553 , - 912 , - 1271 , - 510 , - 3749 , - 748 , - 1747 , - 1626 , - 385 , - 3144 , - 4783 , - 182 , - 4701 , - 2980 , - 139 , - 1298 , - 1337 , - 256 , - 3175 , - 4974 , - 533 , - 92 , - 3651 , - 970 , - 2289 , - 2488 , - 1567 , - 4646 , - 1485 , - 2324 , - 2043 , - 642 , - 3241 , - 4720 , - 5079 , - 4318 , - 2437 , - 4556 , - 435 , - 314 , - 4193 , - 1832 , - 3471 , - 3990 , - 3389 , - 1668 , - 3947 , - 5106 , - 25 , - 4064 , - 1863 , - 3662 , - 4341 , - 3900 , - 2339 , - 4778 , - 977 , - 1176 , - 255 , - 3334 , - 173 , - 1012 , - 731 , - 4450 , - 1929 , - 3408 , - 3767 , - 3006 , - 1125 , - 3244 , - 4243 , - 4122 , - 2881 , - 520 , - 2159 , - 2678 , - 2077 , - 356 , - 2635 , - 3794 , - 3833 , - 2752 , - 551 , - 2350 , - 3029 , - 2588 , - 1027 , - 3466 , - 4785 , - 4984 , - 4063 , - 2022 , - 3981 , - 4820 , - 4539 , - 3138 , - 617 , - 2096 , - 2455 , - 1694 , - 4933 , - 1932 , - 2931 , - 2810 , - 1569 , - 4328 , - 847 , - 1366 , - 765 , - 4164 , - 1323 , - 2482 , - 2521 , - 1440 , - 4359 , - 1038 , - 1717 , - 1276 , - 4835 , - 2154 , - 3473 , - 3672 , - 2751 , - 710 , - 2669 , - 3508 , - 3227 , - 1826 , - 4425 , - 784 , - 1143 , - 382 , - 3621 , - 620 , - 1619 , - 1498 , - 257 , - 3016 , - 4655 , - 54 , - 4573 , - 2852 , - 11 , - 1170 , - 1209 , - 128 , - 3047 , - 4846 , - 405 , - 5084 , - 3523 , - 842 , - 2161 , - 2360 , - 1439 , - 4518 , - 1357 , - 2196 , - 1915 , - 514 , - 3113 , - 4592 , - 4951 , - 4190 , - 2309 , - 4428 , - 307 , - 186 , - 4065 , - 1704 , - 3343 , - 3862 , - 3261 , - 1540 , - 3819 , - 4978 , - 5017 , - 3936 , - 1735 , - 3534 , - 4213 , - 3772 , - 2211 , - 4650 , - 849 , - 1048 , - 127 , - 3206 , - 45 , - 884 , - 603 , - 4322 , - 1801 , - 3280 , - 3639 , - 2878 , - 997 , - 3116 , - 4115 , - 3994 , - 2753 , - 392 , - 2031 , - 2550 , - 1949 , - 228 , - 2507 , - 3666 , - 3705 , - 2624 , - 423 , - 2222 , - 2901 , - 2460 , - 899 , - 3338 , - 4657 , - 4856 , - 3935 , - 1894 , - 3853 , - 4692 , - 4411 , - 3010 , - 489 , - 1968 , - 2327 , - 1566 , - 4805 , - 1804 , - 2803 , - 2682 , - 1441 , - 4200 , - 719 , - 1238 , - 637 , - 4036 , - 1195 , - 2354 , - 2393 , - 1312 , - 4231 , - 910 , - 1589 , - 1148 , - 4707 , - 2026 , - 3345 , - 3544 , - 2623 , - 582 , - 2541 , - 3380 , - 3099 , - 1698 , - 4297 , - 656 , - 1015 , - 254 , - 3493 , - 492 , - 1491 , - 1370 , - 129 , - 2888 , - 4527 , - 5046 , - 4445 , - 2724 , - 5003 , - 1042 , - 1081 , - 0 , - 1279 , - 2366 , - 4989 , - 508 , - 1019 , - 3066 , - 3193 , - 3128 , - 4599 , - 4150 , - 3509 , - 4404 , - 3379 , - 2162 , - 2481 , - 880 , - 4271 , - 4014 , - 1837 , - 4652 , - 3819 , - 1066 , - 3305 , - 1896 , - 3751 , - 230 , - 3429 , - 4708 , - 611 , - 3234 , - 3937 , - 4448 , - 1311 , - 1438 , - 1373 , - 2844 , - 2395 , - 1754 , - 2649 , - 1624 , - 407 , - 726 , - 4309 , - 2516 , - 2259 , - 82 , - 2897 , - 2064 , - 4495 , - 1550 , - 141 , - 1996 , - 3659 , - 1674 , - 2953 , - 4040 , - 1479 , - 2182 , - 2693 , - 4740 , - 4867 , - 4802 , - 1089 , - 640 , - 5183 , - 894 , - 5053 , - 3836 , - 4155 , - 2554 , - 761 , - 504 , - 3511 , - 1142 , - 309 , - 2740 , - 4979 , - 3570 , - 241 , - 1904 , - 5103 , - 1198 , - 2285 , - 4908 , - 427 , - 938 , - 2985 , - 3112 , - 3047 , - 4518 , - 4069 , - 3428 , - 4323 , - 3298 , - 2081 , - 2400 , - 799 , - 4190 , - 3933 , - 1756 , - 4571 , - 3738 , - 985 , - 3224 , - 1815 , - 3670 , - 149 , - 3348 , - 4627 , - 530 , - 3153 , - 3856 , - 4367 , - 1230 , - 1357 , - 1292 , - 2763 , - 2314 , - 1673 , - 2568 , - 1543 , - 326 , - 645 , - 4228 , - 2435 , - 2178 , - 1 , - 2816 , - 1983 , - 4414 , - 1469 , - 60 , - 1915 , - 3578 , - 1593 , - 2872 , - 3959 , - 1398 , - 2101 , - 2612 , - 4659 , - 4786 , - 4721 , - 1008 , - 559 , - 5102 , - 813 , - 4972 , - 3755 , - 4074 , - 2473 , - 680 , - 423 , - 3430 , - 1061 , - 228 , - 2659 , - 4898 , - 3489 , - 160 , - 1823 , - 5022 , - 1117 , - 2204 , - 4827 , - 346 , - 857 , - 2904 , - 3031 , - 2966 , - 4437 , - 3988 , - 3347 , - 4242 , - 3217 , - 2000 , - 2319 , - 718 , - 4109 , - 3852 , - 1675 , - 4490 , - 3657 , - 904 , - 3143 , - 1734 , - 3589 , - 68 , - 3267 , - 4546 , - 449 , - 3072 , - 3775 , - 4286 , - 1149 , - 1276 , - 1211 , - 2682 , - 2233 , - 1592 , - 2487 , - 1462 , - 245 , - 564 , - 4147 , - 2354 , - 2097 , - 5104 , - 2735 , - 1902 , - 4333 , - 1388 , - 5163 , - 1834 , - 3497 , - 1512 , - 2791 , - 3878 , - 1317 , - 2020 , - 2531 , - 4578 , - 4705 , - 4640 , - 927 , - 478 , - 5021 , - 732 , - 4891 , - 3674 , - 3993 , - 2392 , - 599 , - 342 , - 3349 , - 980 , - 147 , - 2578 , - 4817 , - 3408 , - 79 , - 1742 , - 4941 , - 1036 , - 2123 , - 4746 , - 265 , - 776 , - 2823 , - 2950 , - 2885 , - 4356 , - 3907 , - 3266 , - 4161 , - 3136 , - 1919 , - 2238 , - 637 , - 4028 , - 3771 , - 1594 , - 4409 , - 3576 , - 823 , - 3062 , - 1653 , - 3508 , - 5171 , - 3186 , - 4465 , - 368 , - 2991 , - 3694 , - 4205 , - 1068 , - 1195 , - 1130 , - 2601 , - 2152 , - 1511 , - 2406 , - 1381 , - 164 , - 483 , - 4066 , - 2273 , - 2016 , - 5023 , - 2654 , - 1821 , - 4252 , - 1307 , - 5082 , - 1753 , - 3416 , - 1431 , - 2710 , - 3797 , - 1236 , - 1939 , - 2450 , - 4497 , - 4624 , - 4559 , - 846 , - 397 , - 4940 , - 651 , - 4810 , - 3593 , - 3912 , - 2311 , - 518 , - 261 , - 3268 , - 899 , - 66 , - 2497 , - 4736 , - 3327 , - 5182 , - 1661 , - 4860 , - 955 , - 2042 , - 4665 , - 184 , - 695 , - 2742 , - 2869 , - 2804 , - 4275 , - 3826 , - 3185 , - 4080 , - 3055 , - 1838 , - 2157 , - 556 , - 3947 , - 3690 , - 1513 , - 4328 , - 3495 , - 742 , - 2981 , - 1572 , - 3427 , - 5090 , - 3105 , - 4384 , - 287 , - 2910 , - 3613 , - 4124 , - 987 , - 1114 , - 1049 , - 2520 , - 2071 , - 1430 , - 2325 , - 1300 , - 83 , - 402 , - 3985 , - 2192 , - 1935 , - 4942 , - 2573 , - 1740 , - 4171 , - 1226 , - 5001 , - 1672 , - 3335 , - 1350 , - 2629 , - 3716 , - 1155 , - 1858 , - 2369 , - 4416 , - 4543 , - 4478 , - 765 , - 316 , - 4859 , - 570 , - 4729 , - 3512 , - 3831 , - 2230 , - 437 , - 180 , - 3187 , - 818 , - 5169 , - 2416 , - 4655 , - 3246 , - 5101 , - 1580 , - 4779 , - 874 , - 1961 , - 4584 , - 103 , - 614 , - 2661 , - 2788 , - 2723 , - 4194 , - 3745 , - 3104 , - 3999 , - 2974 , - 1757 , - 2076 , - 475 , - 3866 , - 3609 , - 1432 , - 4247 , - 3414 , - 661 , - 2900 , - 1491 , - 3346 , - 5009 , - 3024 , - 4303 , - 206 , - 2829 , - 3532 , - 4043 , - 906 , - 1033 , - 968 , - 2439 , - 1990 , - 1349 , - 2244 , - 1219 , - 2 , - 321 , - 3904 , - 2111 , - 1854 , - 4861 , - 2492 , - 1659 , - 4090 , - 1145 , - 4920 , - 1591 , - 3254 , - 1269 , - 2548 , - 3635 , - 1074 , - 1777 , - 2288 , - 4335 , - 4462 , - 4397 , - 684 , - 235 , - 4778 , - 489 , - 4648 , - 3431 , - 3750 , - 2149 , - 356 , - 99 , - 3106 , - 737 , - 5088 , - 2335 , - 4574 , - 3165 , - 5020 , - 1499 , - 4698 , - 793 , - 1880 , - 4503 , - 22 , - 533 , - 2580 , - 2707 , - 2642 , - 4113 , - 3664 , - 3023 , - 3918 , - 2893 , - 1676 , - 1995 , - 394 , - 3785 , - 3528 , - 1351 , - 4166 , - 3333 , - 580 , - 2819 , - 1410 , - 3265 , - 4928 , - 2943 , - 4222 , - 125 , - 2748 , - 3451 , - 3962 , - 825 , - 952 , - 887 , - 2358 , - 1909 , - 1268 , - 2163 , - 1138 , - 5105 , - 240 , - 3823 , - 2030 , - 1773 , - 4780 , - 2411 , - 1578 , - 4009 , - 1064 , - 4839 , - 1510 , - 3173 , - 1188 , - 2467 , - 3554 , - 993 , - 1696 , - 2207 , - 4254 , - 4381 , - 4316 , - 603 , - 154 , - 4697 , - 408 , - 4567 , - 3350 , - 3669 , - 2068 , - 275 , - 18 , - 3025 , - 656 , - 5007 , - 2254 , - 4493 , - 3084 , - 4939 , - 1418 , - 4617 , - 712 , - 1799 , - 4422 , - 5125 , - 452 , - 2499 , - 2626 , - 2561 , - 4032 , - 3583 , - 2942 , - 3837 , - 2812 , - 1595 , - 1914 , - 313 , - 3704 , - 3447 , - 1270 , - 4085 , - 3252 , - 499 , - 2738 , - 1329 , - 3184 , - 4847 , - 2862 , - 4141 , - 44 , - 2667 , - 3370 , - 3881 , - 744 , - 871 , - 806 , - 2277 , - 1828 , - 1187 , - 2082 , - 1057 , - 5024 , - 159 , - 3742 , - 1949 , - 1692 , - 4699 , - 2330 , - 1497 , - 3928 , - 983 , - 4758 , - 1429 , - 3092 , - 1107 , - 2386 , - 3473 , - 912 , - 1615 , - 2126 , - 4173 , - 4300 , - 4235 , - 522 , - 73 , - 4616 , - 327 , - 4486 , - 3269 , - 3588 , - 1987 , - 194 , - 5121 , - 2944 , - 575 , - 4926 , - 2173 , - 4412 , - 3003 , - 4858 , - 1337 , - 4536 , - 631 , - 1718 , - 4341 , - 5044 , - 371 , - 2418 , - 2545 , - 2480 , - 3951 , - 3502 , - 2861 , - 3756 , - 2731 , - 1514 , - 1833 , - 232 , - 3623 , - 3366 , - 1189 , - 4004 , - 3171 , - 418 , - 2657 , - 1248 , - 3103 , - 4766 , - 2781 , - 4060 , - 5147 , - 2586 , - 3289 , - 3800 , - 663 , - 790 , - 725 , - 2196 , - 1747 , - 1106 , - 2001 , - 976 , - 4943 , - 78 , - 3661 , - 1868 , - 1611 , - 4618 , - 2249 , - 1416 , - 3847 , - 902 , - 4677 , - 1348 , - 3011 , - 1026 , - 2305 , - 3392 , - 831 , - 1534 , - 2045 , - 4092 , - 4219 , - 4154 , - 441 , - 5176 , - 4535 , - 246 , - 4405 , - 3188 , - 3507 , - 1906 , - 113 , - 5040 , - 2863 , - 494 , - 4845 , - 2092 , - 4331 , - 2922 , - 4777 , - 1256 , - 4455 , - 550 , - 1637 , - 4260 , - 4963 , - 290 , - 2337 , - 2464 , - 2399 , - 3870 , - 3421 , - 2780 , - 3675 , - 2650 , - 1433 , - 1752 , - 151 , - 3542 , - 3285 , - 1108 , - 3923 , - 3090 , - 337 , - 2576 , - 1167 , - 3022 , - 4685 , - 2700 , - 3979 , - 5066 , - 2505 , - 3208 , - 3719 , - 582 , - 709 , - 644 , - 2115 , - 1666 , - 1025 , - 1920 , - 895 , - 4862 , - 5181 , - 3580 , - 1787 , - 1530 , - 4537 , - 2168 , - 1335 , - 3766 , - 821 , - 4596 , - 1267 , - 2930 , - 945 , - 2224 , - 3311 , - 750 , - 1453 , - 1964 , - 4011 , - 4138 , - 4073 , - 360 , - 5095 , - 4454 , - 165 , - 4324 , - 3107 , - 3426 , - 1825 , - 32 , - 4959 , - 2782 , - 413 , - 4764 , - 2011 , - 4250 , - 2841 , - 4696 , - 1175 , - 4374 , - 469 , - 1556 , - 4179 , - 4882 , - 209 , - 2256 , - 2383 , - 2318 , - 3789 , - 3340 , - 2699 , - 3594 , - 2569 , - 1352 , - 1671 , - 70 , - 3461 , - 3204 , - 1027 , - 3842 , - 3009 , - 256 , - 2495 , - 1086 , - 2941 , - 4604 , - 2619 , - 3898 , - 4985 , - 2424 , - 3127 , - 3638 , - 501 , - 628 , - 563 , - 2034 , - 1585 , - 944 , - 1839 , - 814 , - 4781 , - 5100 , - 3499 , - 1706 , - 1449 , - 4456 , - 2087 , - 1254 , - 3685 , - 740 , - 4515 , - 1186 , - 2849 , - 864 , - 2143 , - 3230 , - 669 , - 1372 , - 1883 , - 3930 , - 4057 , - 3992 , - 279 , - 5014 , - 4373 , - 84 , - 4243 , - 3026 , - 3345 , - 1744 , - 5135 , - 4878 , - 2701 , - 332 , - 4683 , - 1930 , - 4169 , - 2760 , - 4615 , - 1094 , - 4293 , - 388 , - 1475 , - 4098 , - 4801 , - 128 , - 2175 , - 2302 , - 2237 , - 3708 , - 3259 , - 2618 , - 3513 , - 2488 , - 1271 , - 1590 , - 5173 , - 3380 , - 3123 , - 946 , - 3761 , - 2928 , - 175 , - 2414 , - 1005 , - 2860 , - 4523 , - 2538 , - 3817 , - 4904 , - 2343 , - 3046 , - 3557 , - 420 , - 547 , - 482 , - 1953 , - 1504 , - 863 , - 1758 , - 733 , - 4700 , - 5019 , - 3418 , - 1625 , - 1368 , - 4375 , - 2006 , - 1173 , - 3604 , - 659 , - 4434 , - 1105 , - 2768 , - 783 , - 2062 , - 3149 , - 588 , - 1291 , - 1802 , - 3849 , - 3976 , - 3911 , - 198 , - 4933 , - 4292 , - 3 , - 4162 , - 2945 , - 3264 , - 1663 , - 5054 , - 4797 , - 2620 , - 251 , - 4602 , - 1849 , - 4088 , - 2679 , - 4534 , - 1013 , - 4212 , - 307 , - 1394 , - 4017 , - 4720 , - 47 , - 2094 , - 2221 , - 2156 , - 3627 , - 3178 , - 2537 , - 3432 , - 2407 , - 1190 , - 1509 , - 5092 , - 3299 , - 3042 , - 865 , - 3680 , - 2847 , - 94 , - 2333 , - 924 , - 2779 , - 4442 , - 2457 , - 3736 , - 4823 , - 2262 , - 2965 , - 3476 , - 339 , - 466 , - 401 , - 1872 , - 1423 , - 782 , - 1677 , - 652 , - 4619 , - 4938 , - 3337 , - 1544 , - 1287 , - 4294 , - 1925 , - 1092 , - 3523 , - 578 , - 4353 , - 1024 , - 2687 , - 702 , - 1981 , - 3068 , - 507 , - 1210 , - 1721 , - 3768 , - 3895 , - 3830 , - 117 , - 4852 , - 4211 , - 5106 , - 4081 , - 2864 , - 3183 , - 1582 , - 4973 , - 4716 , - 2539 , - 170 , - 4521 , - 1768 , - 4007 , - 2598 , - 4453 , - 932 , - 4131 , - 226 , - 1313 , - 3936 , - 4639 , - 5150 , - 2013 , - 2140 , - 2075 , - 3546 , - 3097 , - 2456 , - 3351 , - 2326 , - 1109 , - 1428 , - 5011 , - 3218 , - 2961 , - 784 , - 3599 , - 2766 , - 13 , - 2252 , - 843 , - 2698 , - 4361 , - 2376 , - 3655 , - 4742 , - 2181 , - 2884 , - 3395 , - 258 , - 385 , - 320 , - 1791 , - 1342 , - 701 , - 1596 , - 571 , - 4538 , - 4857 , - 3256 , - 1463 , - 1206 , - 4213 , - 1844 , - 1011 , - 3442 , - 497 , - 4272 , - 943 , - 2606 , - 621 , - 1900 , - 2987 , - 426 , - 1129 , - 1640 , - 3687 , - 3814 , - 3749 , - 36 , - 4771 , - 4130 , - 5025 , - 4000 , - 2783 , - 3102 , - 1501 , - 4892 , - 4635 , - 2458 , - 89 , - 4440 , - 1687 , - 3926 , - 2517 , - 4372 , - 851 , - 4050 , - 145 , - 1232 , - 3855 , - 4558 , - 5069 , - 1932 , - 2059 , - 1994 , - 3465 , - 3016 , - 2375 , - 3270 , - 2245 , - 1028 , - 1347 , - 4930 , - 3137 , - 2880 , - 703 , - 3518 , - 2685 , - 5116 , - 2171 , - 762 , - 2617 , - 4280 , - 2295 , - 3574 , - 4661 , - 2100 , - 2803 , - 3314 , - 177 , - 304 , - 239 , - 1710 , - 1261 , - 620 , - 1515 , - 490 , - 4457 , - 4776 , - 3175 , - 1382 , - 1125 , - 4132 , - 1763 , - 930 , - 3361 , - 416 , - 4191 , - 862 , - 2525 , - 540 , - 1819 , - 2906 , - 345 , - 1048 , - 1559 , - 3606 , - 3733 , - 3668 , - 5139 , - 4690 , - 4049 , - 4944 , - 3919 , - 2702 , - 3021 , - 1420 , - 4811 , - 4554 , - 2377 , - 8 , - 4359 , - 1606 , - 3845 , - 2436 , - 4291 , - 770 , - 3969 , - 64 , - 1151 , - 3774 , - 4477 , - 4988 , - 1851 , - 1978 , - 1913 , - 3384 , - 2935 , - 2294 , - 3189 , - 2164 , - 947 , - 1266 , - 4849 , - 3056 , - 2799 , - 622 , - 3437 , - 2604 , - 5035 , - 2090 , - 681 , - 2536 , - 4199 , - 2214 , - 3493 , - 4580 , - 2019 , - 2722 , - 3233 , - 96 , - 223 , - 158 , - 1629 , - 1180 , - 539 , - 1434 , - 409 , - 4376 , - 4695 , - 3094 , - 1301 , - 1044 , - 4051 , - 1682 , - 849 , - 3280 , - 335 , - 4110 , - 781 , - 2444 , - 459 , - 1738 , - 2825 , - 264 , - 967 , - 1478 , - 3525 , - 3652 , - 3587 , - 5058 , - 4609 , - 3968 , - 4863 , - 3838 , - 2621 , - 2940 , - 1339 , - 4730 , - 4473 , - 2296 , - 5111 , - 4278 , - 1525 , - 3764 , - 2355 , - 4210 , - 689 , - 3888 , - 5167 , - 1070 , - 3693 , - 4396 , - 4907 , - 1770 , - 1897 , - 1832 , - 3303 , - 2854 , - 2213 , - 3108 , - 2083 , - 866 , - 1185 , - 4768 , - 2975 , - 2718 , - 541 , - 3356 , - 2523 , - 4954 , - 2009 , - 600 , - 2455 , - 4118 , - 2133 , - 3412 , - 4499 , - 1938 , - 2641 , - 3152 , - 15 , - 142 , - 77 , - 1548 , - 1099 , - 458 , - 1353 , - 328 , - 4295 , - 4614 , - 3013 , - 1220 , - 963 , - 3970 , - 1601 , - 768 , - 3199 , - 254 , - 4029 , - 700 , - 2363 , - 378 , - 1657 , - 2744 , - 183 , - 886 , - 1397 , - 3444 , - 3571 , - 3506 , - 4977 , - 4528 , - 3887 , - 4782 , - 3757 , - 2540 , - 2859 , - 1258 , - 4649 , - 4392 , - 2215 , - 5030 , - 4197 , - 1444 , - 3683 , - 2274 , - 4129 , - 608 , - 3807 , - 5086 , - 989 , - 3612 , - 4315 , - 4826 , - 1689 , - 1816 , - 1751 , - 3222 , - 2773 , - 2132 , - 3027 , - 2002 , - 785 , - 1104 , - 4687 , - 2894 , - 2637 , - 460 , - 3275 , - 2442 , - 4873 , - 1928 , - 519 , - 2374 , - 4037 , - 2052 , - 3331 , - 4418 , - 1857 , - 2560 , - 3071 , - 5118 , - 61 , - 5180 , - 1467 , - 1018 , - 377 , - 1272 , - 247 , - 4214 , - 4533 , - 2932 , - 1139 , - 882 , - 3889 , - 1520 , - 687 , - 3118 , - 173 , - 3948 , - 619 , - 2282 , - 297 , - 1576 , - 2663 , - 102 , - 805 , - 1316 , - 3363 , - 3490 , - 3425 , - 4896 , - 4447 , - 3806 , - 4701 , - 3676 , - 2459 , - 2778 , - 1177 , - 4568 , - 4311 , - 2134 , - 4949 , - 4116 , - 1363 , - 3602 , - 2193 , - 4048 , - 527 , - 3726 , - 5005 , - 908 , - 3531 , - 4234 , - 4745 , - 1608 , - 1735 , - 1670 , - 3141 , - 2692 , - 2051 , - 2946 , - 1921 , - 704 , - 1023 , - 4606 , - 2813 , - 2556 , - 379 , - 3194 , - 2361 , - 4792 , - 1847 , - 438 , - 2293 , - 3956 , - 1971 , - 3250 , - 4337 , - 1776 , - 2479 , - 2990 , - 5037 , - 5164 , - 5099 , - 1386 , - 937 , - 296 , - 1191 , - 166 , - 4133 , - 4452 , - 2851 , - 1058 , - 801 , - 3808 , - 1439 , - 606 , - 3037 , - 92 , - 3867 , - 538 , - 2201 , - 216 , - 1495 , - 2582 , - 21 , - 724 , - 1235 , - 3282 , - 3409 , - 3344 , - 4815 , - 4366 , - 3725 , - 4620 , - 3595 , - 2378 , - 2697 , - 1096 , - 4487 , - 4230 , - 2053 , - 4868 , - 4035 , - 1282 , - 3521 , - 2112 , - 3967 , - 446 , - 3645 , - 4924 , - 827 , - 3450 , - 4153 , - 4664 , - 1527 , - 1654 , - 1589 , - 3060 , - 2611 , - 1970 , - 2865 , - 1840 , - 623 , - 942 , - 4525 , - 2732 , - 2475 , - 298 , - 3113 , - 2280 , - 4711 , - 1766 , - 357 , - 2212 , - 3875 , - 1890 , - 3169 , - 4256 , - 1695 , - 2398 , - 2909 , - 4956 , - 5083 , - 5018 , - 1305 , - 856 , - 215 , - 1110 , - 85 , - 4052 , - 4371 , - 2770 , - 977 , - 720 , - 3727 , - 1358 , - 525 , - 2956 , - 11 , - 3786 , - 457 , - 2120 , - 135 , - 1414 , - 2501 , - 5124 , - 643 , - 1154 , - 3201 , - 3328 , - 3263 , - 4734 , - 4285 , - 3644 , - 4539 , - 3514 , - 2297 , - 2616 , - 1015 , - 4406 , - 4149 , - 1972 , - 4787 , - 3954 , - 1201 , - 3440 , - 2031 , - 3886 , - 365 , - 3564 , - 4843 , - 746 , - 3369 , - 4072 , - 4583 , - 1446 , - 1573 , - 1508 , - 2979 , - 2530 , - 1889 , - 2784 , - 1759 , - 542 , - 861 , - 4444 , - 2651 , - 2394 , - 217 , - 3032 , - 2199 , - 4630 , - 1685 , - 276 , - 2131 , - 3794 , - 1809 , - 3088 , - 4175 , - 1614 , - 2317 , - 2828 , - 4875 , - 5002 , - 4937 , - 1224 , - 775 , - 134 , - 1029 , - 4 , - 3971 , - 4290 , - 2689 , - 896 , - 639 , - 3646 , - 1277 , - 444 , - 2875 , - 5114 , - 3705 , - 376 , - 2039 , - 54 , - 1333 , - 2420 , - 5043 , - 562 , - 1073 , - 3120 , - 3247 , - 3182 , - 4653 , - 4204 , - 3563 , - 4458 , - 3433 , - 2216 , - 2535 , - 934 , - 4325 , - 4068 , - 1891 , - 4706 , - 3873 , - 1120 , - 3359 , - 1950 , - 3805 , - 284 , - 3483 , - 4762 , - 665 , - 3288 , - 3991 , - 4502 , - 1365 , - 1492 , - 1427 , - 2898 , - 2449 , - 1808 , - 2703 , - 1678 , - 461 , - 780 , - 4363 , - 2570 , - 2313 , - 136 , - 2951 , - 2118 , - 4549 , - 1604 , - 195 , - 2050 , - 3713 , - 1728 , - 3007 , - 4094 , - 1533 , - 2236 , - 2747 , - 4794 , - 4921 , - 4856 , - 1143 , - 694 , - 53 , - 948 , - 5107 , - 3890 , - 4209 , - 2608 , - 815 , - 558 , - 3565 , - 1196 , - 363 , - 2794 , - 5033 , - 3624 , - 295 , - 1958 , - 5157 , - 1252 , - 2339 , - 4962 , - 481 , - 992 , - 3039 , - 3166 , - 3101 , - 4572 , - 4123 , - 3482 , - 4377 , - 3352 , - 2135 , - 2454 , - 853 , - 4244 , - 3987 , - 1810 , - 4625 , - 3792 , - 1039 , - 3278 , - 1869 , - 3724 , - 203 , - 3402 , - 4681 , - 584 , - 3207 , - 3910 , - 4421 , - 1284 , - 1411 , - 1346 , - 2817 , - 2368 , - 1727 , - 2622 , - 1597 , - 380 , - 699 , - 4282 , - 2489 , - 2232 , - 55 , - 2870 , - 2037 , - 4468 , - 1523 , - 114 , - 1969 , - 3632 , - 1647 , - 2926 , - 4013 , - 1452 , - 2155 , - 2666 , - 4713 , - 4840 , - 4775 , - 1062 , - 613 , - 5156 , - 867 , - 5026 , - 3809 , - 4128 , - 2527 , - 734 , - 477 , - 3484 , - 1115 , - 282 , - 2713 , - 4952 , - 3543 , - 214 , - 1877 , - 5076 , - 1171 , - 2258 , - 4881 , - 400 , - 911 , - 2958 , - 3085 , - 3020 , - 4491 , - 4042 , - 3401 , - 4296 , - 3271 , - 2054 , - 2373 , - 772 , - 4163 , - 3906 , - 1729 , - 4544 , - 3711 , - 958 , - 3197 , - 1788 , - 3643 , - 122 , - 3321 , - 4600 , - 503 , - 3126 , - 3829 , - 4340 , - 1203 , - 1330 , - 1265 , - 2736 , - 2287 , - 1646 , - 2541 , - 1516 , - 299 , - 618 , - 4201 , - 2408 , - 2151 , - 5158 , - 2789 , - 1956 , - 4387 , - 1442 , - 33 , - 1888 , - 3551 , - 1566 , - 2845 , - 3932 , - 1371 , - 2074 , - 2585 , - 4632 , - 4759 , - 4694 , - 981 , - 532 , - 5075 , - 786 , - 4945 , - 3728 , - 4047 , - 2446 , - 653 , - 396 , - 3403 , - 1034 , - 201 , - 2632 , - 4871 , - 3462 , - 133 , - 1796 , - 4995 , - 1090 , - 2177 , - 4800 , - 319 , - 830 , - 2877 , - 3004 , - 2939 , - 4410 , - 3961 , - 3320 , - 4215 , - 3190 , - 1973 , - 2292 , - 691 , - 4082 , - 3825 , - 1648 , - 4463 , - 3630 , - 877 , - 3116 , - 1707 , - 3562 , - 41 , - 3240 , - 4519 , - 422 , - 3045 , - 3748 , - 4259 , - 1122 , - 1249 , - 1184 , - 2655 , - 2206 , - 1565 , - 2460 , - 1435 , - 218 , - 537 , - 4120 , - 2327 , - 2070 , - 5077 , - 2708 , - 1875 , - 4306 , - 1361 , - 5136 , - 1807 , - 3470 , - 1485 , - 2764 , - 3851 , - 1290 , - 1993 , - 2504 , - 4551 , - 4678 , - 4613 , - 900 , - 451 , - 4994 , - 705 , - 4864 , - 3647 , - 3966 , - 2365 , - 572 , - 315 , - 3322 , - 953 , - 120 , - 2551 , - 4790 , - 3381 , - 52 , - 1715 , - 4914 , - 1009 , - 2096 , - 4719 , - 238 , - 749 , - 2796 , - 2923 , - 2858 , - 4329 , - 3880 , - 3239 , - 4134 , - 3109 , - 1892 , - 2211 , - 610 , - 4001 , - 3744 , - 1567 , - 4382 , - 3549 , - 796 , - 3035 , - 1626 , - 3481 , - 5144 , - 3159 , - 4438 , - 341 , - 2964 , - 3667 , - 4178 , - 1041 , - 1168 , - 1103 , - 2574 , - 2125 , - 1484 , - 2379 , - 1354 , - 137 , - 456 , - 4039 , - 2246 , - 1989 , - 4996 , - 2627 , - 1794 , - 4225 , - 1280 , - 5055 , - 1726 , - 3389 , - 1404 , - 2683 , - 3770 , - 1209 , - 1912 , - 2423 , - 4470 , - 4597 , - 4532 , - 819 , - 370 , - 4913 , - 624 , - 4783 , - 3566 , - 3885 , - 2284 , - 491 , - 234 , - 3241 , - 872 , - 39 , - 2470 , - 4709 , - 3300 , - 5155 , - 1634 , - 4833 , - 928 , - 2015 , - 4638 , - 157 , - 668 , - 2715 , - 2842 , - 2777 , - 4248 , - 3799 , - 3158 , - 4053 , - 3028 , - 1811 , - 2130 , - 529 , - 3920 , - 3663 , - 1486 , - 4301 , - 3468 , - 715 , - 2954 , - 1545 , - 3400 , - 5063 , - 3078 , - 4357 , - 260 , - 2883 , - 3586 , - 4097 , - 960 , - 1087 , - 1022 , - 2493 , - 2044 , - 1403 , - 2298 , - 1273 , - 56 , - 375 , - 3958 , - 2165 , - 1908 , - 4915 , - 2546 , - 1713 , - 4144 , - 1199 , - 4974 , - 1645 , - 3308 , - 1323 , - 2602 , - 3689 , - 1128 , - 1831 , - 2342 , - 4389 , - 4516 , - 4451 , - 738 , - 289 , - 4832 , - 543 , - 4702 , - 3485 , - 3804 , - 2203 , - 410 , - 153 , - 3160 , - 791 , - 5142 , - 2389 , - 4628 , - 3219 , - 5074 , - 1553 , - 4752 , - 847 , - 1934 , - 4557 , - 76 , - 587 , - 2634 , - 2761 , - 2696 , - 4167 , - 3718 , - 3077 , - 3972 , - 2947 , - 1730 , - 2049 , - 448 , - 3839 , - 3582 , - 1405 , - 4220 , - 3387 , - 634 , - 2873 , - 1464 , - 3319 , - 4982 , - 2997 , - 4276 , - 179 , - 2802 , - 3505 , - 4016 , - 879 , - 1006 , - 941 , - 2412 , - 1963 , - 1322 , - 2217 , - 1192 , - 5159 , - 294 , - 3877 , - 2084 , - 1827 , - 4834 , - 2465 , - 1632 , - 4063 , - 1118 , - 4893 , - 1564 , - 3227 , - 1242 , - 2521 , - 3608 , - 1047 , - 1750 , - 2261 , - 4308 , - 4435 , - 4370 , - 657 , - 208 , - 4751 , - 462 , - 4621 , - 3404 , - 3723 , - 2122 , - 329 , - 72 , - 3079 , - 710 , - 5061 , - 2308 , - 4547 , - 3138 , - 4993 , - 1472 , - 4671 , - 766 , - 1853 , - 4476 , - 5179 , - 506 , - 2553 , - 2680 , - 2615 , - 4086 , - 3637 , - 2996 , - 3891 , - 2866 , - 1649 , - 1968 , - 367 , - 3758 , - 3501 , - 1324 , - 4139 , - 3306 , - 553 , - 2792 , - 1383 , - 3238 , - 4901 , - 2916 , - 4195 , - 98 , - 2721 , - 3424 , - 3935 , - 798 , - 925 , - 860 , - 2331 , - 1882 , - 1241 , - 2136 , - 1111 , - 5078 , - 213 , - 3796 , - 2003 , - 1746 , - 4753 , - 2384 , - 1551 , - 3982 , - 1037 , - 4812 , - 1483 , - 3146 , - 1161 , - 2440 , - 3527 , - 966 , - 1669 , - 2180 , - 4227 , - 4354 , - 4289 , - 576 , - 127 , - 4670 , - 381 , - 4540 , - 3323 , - 3642 , - 2041 , - 248 , - 5175 , - 2998 , - 629 , - 4980 , - 2227 , - 4466 , - 3057 , - 4912 , - 1391 , - 4590 , - 685 , - 1772 , - 4395 , - 5098 , - 425 , - 2472 , - 2599 , - 2534 , - 4005 , - 3556 , - 2915 , - 3810 , - 2785 , - 1568 , - 1887 , - 286 , - 3677 , - 3420 , - 1243 , - 4058 , - 3225 , - 472 , - 2711 , - 1302 , - 3157 , - 4820 , - 2835 , - 4114 , - 17 , - 2640 , - 3343 , - 3854 , - 717 , - 844 , - 779 , - 2250 , - 1801 , - 1160 , - 2055 , - 1030 , - 4997 , - 132 , - 3715 , - 1922 , - 1665 , - 4672 , - 2303 , - 1470 , - 3901 , - 956 , - 4731 , - 1402 , - 3065 , - 1080 , - 2359 , - 3446 , - 885 , - 1588 , - 2099 , - 4146 , - 4273 , - 4208 , - 495 , - 46 , - 4589 , - 300 , - 4459 , - 3242 , - 3561 , - 1960 , - 167 , - 5094 , - 2917 , - 548 , - 4899 , - 2146 , - 4385 , - 2976 , - 4831 , - 1310 , - 4509 , - 604 , - 1691 , - 4314 , - 5017 , - 344 , - 2391 , - 2518 , - 2453 , - 3924 , - 3475 , - 2834 , - 3729 , - 2704 , - 1487 , - 1806 , - 205 , - 3596 , - 3339 , - 1162 , - 3977 , - 3144 , - 391 , - 2630 , - 1221 , - 3076 , - 4739 , - 2754 , - 4033 , - 5120 , - 2559 , - 3262 , - 3773 , - 636 , - 763 , - 698 , - 2169 , - 1720 , - 1079 , - 1974 , - 949 , - 4916 , - 51 , - 3634 , - 1841 , - 1584 , - 4591 , - 2222 , - 1389 , - 3820 , - 875 , - 4650 , - 1321 , - 2984 , - 999 , - 2278 , - 3365 , - 804 , - 1507 , - 2018 , - 4065 , - 4192 , - 4127 , - 414 , - 5149 , - 4508 , - 219 , - 4378 , - 3161 , - 3480 , - 1879 , - 86 , - 5013 , - 2836 , - 467 , - 4818 , - 2065 , - 4304 , - 2895 , - 4750 , - 1229 , - 4428 , - 523 , - 1610 , - 4233 , - 4936 , - 263 , - 2310 , - 2437 , - 2372 , - 3843 , - 3394 , - 2753 , - 3648 , - 2623 , - 1406 , - 1725 , - 124 , - 3515 , - 3258 , - 1081 , - 3896 , - 3063 , - 310 , - 2549 , - 1140 , - 2995 , - 4658 , - 2673 , - 3952 , - 5039 , - 2478 , - 3181 , - 3692 , - 555 , - 682 , - 617 , - 2088 , - 1639 , - 998 , - 1893 , - 868 , - 4835 , - 5154 , - 3553 , - 1760 , - 1503 , - 4510 , - 2141 , - 1308 , - 3739 , - 794 , - 4569 , - 1240 , - 2903 , - 918 , - 2197 , - 3284 , - 723 , - 1426 , - 1937 , - 3984 , - 4111 , - 4046 , - 333 , - 5068 , - 4427 , - 138 , - 4297 , - 3080 , - 3399 , - 1798 , - 5 , - 4932 , - 2755 , - 386 , - 4737 , - 1984 , - 4223 , - 2814 , - 4669 , - 1148 , - 4347 , - 442 , - 1529 , - 4152 , - 4855 , - 182 , - 2229 , - 2356 , - 2291 , - 3762 , - 3313 , - 2672 , - 3567 , - 2542 , - 1325 , - 1644 , - 43 , - 3434 , - 3177 , - 1000 , - 3815 , - 2982 , - 229 , - 2468 , - 1059 , - 2914 , - 4577 , - 2592 , - 3871 , - 4958 , - 2397 , - 3100 , - 3611 , - 474 , - 601 , - 536 , - 2007 , - 1558 , - 917 , - 1812 , - 787 , - 4754 , - 5073 , - 3472 , - 1679 , - 1422 , - 4429 , - 2060 , - 1227 , - 3658 , - 713 , - 4488 , - 1159 , - 2822 , - 837 , - 2116 , - 3203 , - 642 , - 1345 , - 1856 , - 3903 , - 4030 , - 3965 , - 252 , - 4987 , - 4346 , - 57 , - 4216 , - 2999 , - 3318 , - 1717 , - 5108 , - 4851 , - 2674 , - 305 , - 4656 , - 1903 , - 4142 , - 2733 , - 4588 , - 1067 , - 4266 , - 361 , - 1448 , - 4071 , - 4774 , - 101 , - 2148 , - 2275 , - 2210 , - 3681 , - 3232 , - 2591 , - 3486 , - 2461 , - 1244 , - 1563 , - 5146 , - 3353 , - 3096 , - 919 , - 3734 , - 2901 , - 148 , - 2387 , - 978 , - 2833 , - 4496 , - 2511 , - 3790 , - 4877 , - 2316 , - 3019 , - 3530 , - 393 , - 520 , - 455 , - 1926 , - 1477 , - 836 , - 1731 , - 706 , - 4673 , - 4992 , - 3391 , - 1598 , - 1341 , - 4348 , - 1979 , - 1146 , - 3577 , - 632 , - 4407 , - 1078 , - 2741 , - 756 , - 2035 , - 3122 , - 561 , - 1264 , - 1775 , - 3822 , - 3949 , - 3884 , - 171 , - 4906 , - 4265 , - 5160 , - 4135 , - 2918 , - 3237 , - 1636 , - 5027 , - 4770 , - 2593 , - 224 , - 4575 , - 1822 , - 4061 , - 2652 , - 4507 , - 986 , - 4185 , - 280 , - 1367 , - 3990 , - 4693 , - 20 , - 2067 , - 2194 , - 2129 , - 3600 , - 3151 , - 2510 , - 3405 , - 2380 , - 1163 , - 1482 , - 5065 , - 3272 , - 3015 , - 838 , - 3653 , - 2820 , - 67 , - 2306 , - 897 , - 2752 , - 4415 , - 2430 , - 3709 , - 4796 , - 2235 , - 2938 , - 3449 , - 312 , - 439 , - 374 , - 1845 , - 1396 , - 755 , - 1650 , - 625 , - 4592 , - 4911 , - 3310 , - 1517 , - 1260 , - 4267 , - 1898 , - 1065 , - 3496 , - 551 , - 4326 , - 997 , - 2660 , - 675 , - 1954 , - 3041 , - 480 , - 1183 , - 1694 , - 3741 , - 3868 , - 3803 , - 90 , - 4825 , - 4184 , - 5079 , - 4054 , - 2837 , - 3156 , - 1555 , - 4946 , - 4689 , - 2512 , - 143 , - 4494 , - 1741 , - 3980 , - 2571 , - 4426 , - 905 , - 4104 , - 199 , - 1286 , - 3909 , - 4612 , - 5123 , - 1986 , - 2113 , - 2048 , - 3519 , - 3070 , - 2429 , - 3324 , - 2299 , - 1082 , - 1401 , - 4984 , - 3191 , - 2934 , - 757 , - 3572 , - 2739 , - 5170 , - 2225 , - 816 , - 2671 , - 4334 , - 2349 , - 3628 , - 4715 , - 2154 , - 2857 , - 3368 , - 231 , - 358 , - 293 , - 1764 , - 1315 , - 674 , - 1569 , - 544 , - 4511 , - 4830 , - 3229 , - 1436 , - 1179 , - 4186 , - 1817 , - 984 , - 3415 , - 470 , - 4245 , - 916 , - 2579 , - 594 , - 1873 , - 2960 , - 399 , - 1102 , - 1613 , - 3660 , - 3787 , - 3722 , - 9 , - 4744 , - 4103 , - 4998 , - 3973 , - 2756 , - 3075 , - 1474 , - 4865 , - 4608 , - 2431 , - 62 , - 4413 , - 1660 , - 3899 , - 2490 , - 4345 , - 824 , - 4023 , - 118 , - 1205 , - 3828 , - 4531 , - 5042 , - 1905 , - 2032 , - 1967 , - 3438 , - 2989 , - 2348 , - 3243 , - 2218 , - 1001 , - 1320 , - 4903 , - 3110 , - 2853 , - 676 , - 3491 , - 2658 , - 5089 , - 2144 , - 735 , - 2590 , - 4253 , - 2268 , - 3547 , - 4634 , - 2073 , - 2776 , - 3287 , - 150 , - 277 , - 212 , - 1683 , - 1234 , - 593 , - 1488 , - 463 , - 4430 , - 4749 , - 3148 , - 1355 , - 1098 , - 4105 , - 1736 , - 903 , - 3334 , - 389 , - 4164 , - 835 , - 2498 , - 513 , - 1792 , - 2879 , - 318 , - 1021 , - 1532 , - 3579 , - 3706 , - 3641 , - 5112 , - 4663 , - 4022 , - 4917 , - 3892 , - 2675 , - 2994 , - 1393 , - 4784 , - 4527 , - 2350 , - 5165 , - 4332 , - 1579 , - 3818 , - 2409 , - 4264 , - 743 , - 3942 , - 37 , - 1124 , - 3747 , - 4450 , - 4961 , - 1824 , - 1951 , - 1886 , - 3357 , - 2908 , - 2267 , - 3162 , - 2137 , - 920 , - 1239 , - 4822 , - 3029 , - 2772 , - 595 , - 3410 , - 2577 , - 5008 , - 2063 , - 654 , - 2509 , - 4172 , - 2187 , - 3466 , - 4553 , - 1992 , - 2695 , - 3206 , - 69 , - 196 , - 131 , - 1602 , - 1153 , - 512 , - 1407 , - 382 , - 4349 , - 4668 , - 3067 , - 1274 , - 1017 , - 4024 , - 1655 , - 822 , - 3253 , - 308 , - 4083 , - 754 , - 2417 , - 432 , - 1711 , - 2798 , - 237 , - 940 , - 1451 , - 3498 , - 3625 , - 3560 , - 5031 , - 4582 , - 3941 , - 4836 , - 3811 , - 2594 , - 2913 , - 1312 , - 4703 , - 4446 , - 2269 , - 5084 , - 4251 , - 1498 , - 3737 , - 2328 , - 4183 , - 662 , - 3861 , - 5140 , - 1043 , - 3666 , - 4369 , - 4880 , - 1743 , - 1870 , - 1805 , - 3276 , - 2827 , - 2186 , - 3081 , - 2056 , - 839 , - 1158 , - 4741 , - 2948 , - 2691 , - 514 , - 3329 , - 2496 , - 4927 , - 1982 , - 573 , - 2428 , - 4091 , - 2106 , - 3385 , - 4472 , - 1911 , - 2614 , - 3125 , - 5172 , - 115 , - 50 , - 1521 , - 1072 , - 431 , - 1326 , - 301 , - 4268 , - 4587 , - 2986 , - 1193 , - 936 , - 3943 , - 1574 , - 741 , - 3172 , - 227 , - 4002 , - 673 , - 2336 , - 351 , - 1630 , - 2717 , - 156 , - 859 , - 1370 , - 3417 , - 3544 , - 3479 , - 4950 , - 4501 , - 3860 , - 4755 , - 3730 , - 2513 , - 2832 , - 1231 , - 4622 , - 4365 , - 2188 , - 5003 , - 4170 , - 1417 , - 3656 , - 2247 , - 4102 , - 581 , - 3780 , - 5059 , - 962 , - 3585 , - 4288 , - 4799 , - 1662 , - 1789 , - 1724 , - 3195 , - 2746 , - 2105 , - 3000 , - 1975 , - 758 , - 1077 , - 4660 , - 2867 , - 2610 , - 433 , - 3248 , - 2415 , - 4846 , - 1901 , - 492 , - 2347 , - 4010 , - 2025 , - 3304 , - 4391 , - 1830 , - 2533 , - 3044 , - 5091 , - 34 , - 5153 , - 1440 , - 991 , - 350 , - 1245 , - 220 , - 4187 , - 4506 , - 2905 , - 1112 , - 855 , - 3862 , - 1493 , - 660 , - 3091 , - 146 , - 3921 , - 592 , - 2255 , - 270 , - 1549 , - 2636 , - 75 , - 778 , - 1289 , - 3336 , - 3463 , - 3398 , - 4869 , - 4420 , - 3779 , - 4674 , - 3649 , - 2432 , - 2751 , - 1150 , - 4541 , - 4284 , - 2107 , - 4922 , - 4089 , - 1336 , - 3575 , - 2166 , - 4021 , - 500 , - 3699 , - 4978 , - 881 , - 3504 , - 4207 , - 4718 , - 1581 , - 1708 , - 1643 , - 3114 , - 2665 , - 2024 , - 2919 , - 1894 , - 677 , - 996 , - 4579 , - 2786 , - 2529 , - 352 , - 3167 , - 2334 , - 4765 , - 1820 , - 411 , - 2266 , - 3929 , - 1944 , - 3223 , - 4310 , - 1749 , - 2452 , - 2963 , - 5010 , - 5137 , - 5072 , - 1359 , - 910 , - 269 , - 1164 , - 139 , - 4106 , - 4425 , - 2824 , - 1031 , - 774 , - 3781 , - 1412 , - 579 , - 3010 , - 65 , - 3840 , - 511 , - 2174 , - 189 , - 1468 , - 2555 , - 5178 , - 697 , - 1208 , - 3255 , - 3382 , - 3317 , - 4788 , - 4339 , - 3698 , - 4593 , - 3568 , - 2351 , - 2670 , - 1069 , - 4460 , - 4203 , - 2026 , - 4841 , - 4008 , - 1255 , - 3494 , - 2085 , - 3940 , - 419 , - 3618 , - 4897 , - 800 , - 3423 , - 4126 , - 4637 , - 1500 , - 1627 , - 1562 , - 3033 , - 2584 , - 1943 , - 2838 , - 1813 , - 596 , - 915 , - 4498 , - 2705 , - 2448 , - 271 , - 3086 , - 2253 , - 4684 , - 1739 , - 330 , - 2185 , - 3848 , - 1863 , - 3142 , - 4229 , - 1668 , - 2371 , - 2882 , - 4929 , - 5056 , - 4991 , - 1278 , - 829 , - 188 , - 1083 , - 58 , - 4025 , - 4344 , - 2743 , - 950 , - 693 , - 3700 , - 1331 , - 498 , - 2929 , - 5168 , - 3759 , - 430 , - 2093 , - 108 , - 1387 , - 2474 , - 5097 , - 616 , - 1127 , - 3174 , - 3301 , - 3236 , - 4707 , - 4258 , - 3617 , - 4512 , - 3487 , - 2270 , - 2589 , - 988 , - 4379 , - 4122 , - 1945 , - 4760 , - 3927 , - 1174 , - 3413 , - 2004 , - 3859 , - 338 , - 3537 , - 4816 , - 719 , - 3342 , - 4045 , - 4556 , - 1419 , - 1546 , - 1481 , - 2952 , - 2503 , - 1862 , - 2757 , - 1732 , - 515 , - 834 , - 4417 , - 2624 , - 2367 , - 190 , - 3005 , - 2172 , - 4603 , - 1658 , - 249 , - 2104 , - 3767 , - 1782 , - 3061 , - 4148 , - 1587 , - 2290 , - 2801 , - 4848 , - 4975 , - 4910 , - 1197 , - 748 , - 107 , - 1002 , - 5161 , - 3944 , - 4263 , - 2662 , - 869 , - 612 , - 3619 , - 1250 , - 417 , - 2848 , - 5087 , - 3678 , - 349 , - 2012 , - 27 , - 1306 , - 2393 , - 5016 , - 535 , - 1046 , - 3093 , - 3220 , - 3155 , - 4626 , - 4177 , - 3536 , - 4431 , - 3406 , - 2189 , - 2508 , - 907 , - 4298 , - 4041 , - 1864 , - 4679 , - 3846 , - 1093 , - 3332 , - 1923 , - 3778 , - 257 , - 3456 , - 4735 , - 638 , - 3261 , - 3964 , - 4475 , - 1338 , - 1465 , - 1400 , - 2871 , - 2422 , - 1781 , - 2676 , - 1651 , - 434 , - 753 , - 4336 , - 2543 , - 2286 , - 109 , - 2924 , - 2091 , - 4522 , - 1577 , - 168 , - 2023 , - 3686 , - 1701 , - 2980 , - 4067 , - 1506 , - 2209 , - 2720 , - 4767 , - 4894 , - 4829 , - 1116 , - 667 , - 26 , - 921 , - 5080 , - 3863 , - 4182 , - 2581 , - 788 , - 531 , - 3538 , - 1169 , - 336 , - 2767 , - 5006 , - 3597 , - 268 , - 1931 , - 5130 , - 1225 , - 2312 , - 4935 , - 454 , - 965 , - 3012 , - 3139 , - 3074 , - 4545 , - 4096 , - 3455 , - 4350 , - 3325 , - 2108 , - 2427 , - 826 , - 4217 , - 3960 , - 1783 , - 4598 , - 3765 , - 1012 , - 3251 , - 1842 , - 3697 , - 176 , - 3375 , - 4654 , - 557 , - 3180 , - 3883 , - 4394 , - 1257 , - 1384 , - 1319 , - 2790 , - 2341 , - 1700 , - 2595 , - 1570 , - 353 , - 672 , - 4255 , - 2462 , - 2205 , - 28 , - 2843 , - 2010 , - 4441 , - 1496 , - 87 , - 1942 , - 3605 , - 1620 , - 2899 , - 3986 , - 1425 , - 2128 , - 2639 , - 4686 , - 4813 , - 4748 , - 1035 , - 586 , - 5129 , - 840 , - 4999 , - 3782 , - 4101 , - 2500 , - 707 , - 450 , - 3457 , - 1088 , - 255 , - 2686 , - 4925 , - 3516 , - 187 , - 1850 , - 5049 , - 1144 , - 2231 , - 4854 , - 373 , - 884 , - 2931 , - 3058 , - 2993 , - 4464 , - 4015 , - 3374 , - 4269 , - 3244 , - 2027 , - 2346 , - 745 , - 4136 , - 3879 , - 1702 , - 4517 , - 3684 , - 931 , - 3170 , - 1761 , - 3616 , - 95 , - 3294 , - 4573 , - 476 , - 3099 , - 3802 , - 4313 , - 1176 , - 1303 , - 1238 , - 2709 , - 2260 , - 1619 , - 2514 , - 1489 , - 272 , - 591 , - 4174 , - 2381 , - 2124 , - 5131 , - 2762 , - 1929 , - 4360 , - 1415 , - 6 , - 1861 , - 3524 , - 1539 , - 2818 , - 3905 , - 1344 , - 2047 , - 2558 , - 4605 , - 4732 , - 4667 , - 954 , - 505 , - 5048 , - 759 , - 4918 , - 3701 , - 4020 , - 2419 , - 626 , - 369 , - 3376 , - 1007 , - 174 , - 2605 , - 4844 , - 3435 , - 106 , - 1769 , - 4968 , - 1063 , - 2150 , - 4773 , - 292 , - 803 , - 2850 , - 2977 , - 2912 , - 4383 , - 3934 , - 3293 , - 4188 , - 3163 , - 1946 , - 2265 , - 664 , - 4055 , - 3798 , - 1621 , - 4436 , - 3603 , - 850 , - 3089 , - 1680 , - 3535 , - 14 , - 3213 , - 4492 , - 395 , - 3018 , - 3721 , - 4232 , - 1095 , - 1222 , - 1157 , - 2628 , - 2179 , - 1538 , - 2433 , - 1408 , - 191 , - 510 , - 4093 , - 2300 , - 2043 , - 5050 , - 2681 , - 1848 , - 4279 , - 1334 , - 5109 , - 1780 , - 3443 , - 1458 , - 2737 , - 3824 , - 1263 , - 1966 , - 2477 , - 4524 , - 4651 , - 4586 , - 873 , - 424 , - 4967 , - 678 , - 4837 , - 3620 , - 3939 , - 2338 , - 545 , - 288 , - 3295 , - 926 , - 93 , - 2524 , - 4763 , - 3354 , - 25 , - 1688 , - 4887 , - 982 , - 2069 , - 4692 , - 211 , - 722 , - 2769 , - 2896 , - 2831 , - 4302 , - 3853 , - 3212 , - 4107 , - 3082 , - 1865 , - 2184 , - 583 , - 3974 , - 3717 , - 1540 , - 4355 , - 3522 , - 769 , - 3008 , - 1599 , - 3454 , - 5117 , - 3132 , - 4411 , - 314 , - 2937 , - 3640 , - 4151 , - 1014 , - 1141 , - 1076 , - 2547 , - 2098 , - 1457 , - 2352 , - 1327 , - 110 , - 429 , - 4012 , - 2219 , - 1962 , - 4969 , - 2600 , - 1767 , - 4198 , - 1253 , - 5028 , - 1699 , - 3362 , - 1377 , - 2656 , - 3743 , - 1182 , - 1885 , - 2396 , - 4443 , - 4570 , - 4505 , - 792 , - 343 , - 4886 , - 597 , - 4756 , - 3539 , - 3858 , - 2257 , - 464 , - 207 , - 3214 , - 845 , - 12 , - 2443 , - 4682 , - 3273 , - 5128 , - 1607 , - 4806 , - 901 , - 1988 , - 4611 , - 130 , - 641 , - 2688 , - 2815 , - 2750 , - 4221 , - 3772 , - 3131 , - 4026 , - 3001 , - 1784 , - 2103 , - 502 , - 3893 , - 3636 , - 1459 , - 4274 , - 3441 , - 688 , - 2927 , - 1518 , - 3373 , - 5036 , - 3051 , - 4330 , - 233 , - 2856 , - 3559 , - 4070 , - 933 , - 1060 , - 995 , - 2466 , - 2017 , - 1376 , - 2271 , - 1246 , - 29 , - 348 , - 3931 , - 2138 , - 1881 , - 4888 , - 2519 , - 1686 , - 4117 , - 1172 , - 4947 , - 1618 , - 3281 , - 1296 , - 2575 , - 3662 , - 1101 , - 1804 , - 2315 , - 4362 , - 4489 , - 4424 , - 711 , - 262 , - 4805 , - 516 , - 4675 , - 3458 , - 3777 , - 2176 , - 383 , - 126 , - 3133 , - 764 , - 5115 , - 2362 , - 4601 , - 3192 , - 5047 , - 1526 , - 4725 , - 820 , - 1907 , - 4530 , - 49 , - 560 , - 2607 , - 2734 , - 2669 , - 4140 , - 3691 , - 3050 , - 3945 , - 2920 , - 1703 , - 2022 , - 421 , - 3812 , - 3555 , - 1378 , - 4193 , - 3360 , - 607 , - 2846 , - 1437 , - 3292 , - 4955 , - 2970 , - 4249 , - 152 , - 2775 , - 3478 , - 3989 , - 852 , - 979 , - 914 , - 2385 , - 1936 , - 1295 , - 2190 , - 1165 , - 5132 , - 267 , - 3850 , - 2057 , - 1800 , - 4807 , - 2438 , - 1605 , - 4036 , - 1091 , - 4866 , - 1537 , - 3200 , - 1215 , - 2494 , - 3581 , - 1020 , - 1723 , - 2234 , - 4281 , - 4408 , - 4343 , - 630 , - 181 , - 4724 , - 435 , - 4594 , - 3377 , - 3696 , - 2095 , - 302 , - 45 , - 3052 , - 683 , - 5034 , - 2281 , - 4520 , - 3111 , - 4966 , - 1445 , - 4644 , - 739 , - 1826 , - 4449 , - 5152 , - 479 , - 2526 , - 2653 , - 2588 , - 4059 , - 3610 , - 2969 , - 3864 , - 2839 , - 1622 , - 1941 , - 340 , - 3731 , - 3474 , - 1297 , - 4112 , - 3279 , - 526 , - 2765 , - 1356 , - 3211 , - 4874 , - 2889 , - 4168 , - 71 , - 2694 , - 3397 , - 3908 , - 771 , - 898 , - 833 , - 2304 , - 1855 , - 1214 , - 2109 , - 1084 , - 5051 , - 186 , - 3769 , - 1976 , - 1719 , - 4726 , - 2357 , - 1524 , - 3955 , - 1010 , - 4785 , - 1456 , - 3119 , - 1134 , - 2413 , - 3500 , - 939 , - 1642 , - 2153 , - 4200 , - 4327 , - 4262 , - 549 , - 100 , - 4643 , - 354 , - 4513 , - 3296 , - 3615 , - 2014 , - 221 , - 5148 , - 2971 , - 602 , - 4953 , - 2200 , - 4439 , - 3030 , - 4885 , - 1364 , - 4563 , - 658 , - 1745 , - 4368 , - 5071 , - 398 , - 2445 , - 2572 , - 2507 , - 3978 , - 3529 , - 2888 , - 3783 , - 2758 , - 1541 , - 1860 , - 259 , - 3650 , - 3393 , - 1216 , - 4031 , - 3198 , - 445 , - 2684 , - 1275 , - 3130 , - 4793 , - 2808 , - 4087 , - 5174 , - 2613 , - 3316 , - 3827 , - 690 , - 817 , - 752 , - 2223 , - 1774 , - 1133 , - 2028 , - 1003 , - 4970 , - 105 , - 3688 , - 1895 , - 1638 , - 4645 , - 2276 , - 1443 , - 3874 , - 929 , - 4704 , - 1375 , - 3038 , - 1053 , - 2332 , - 3419 , - 858 , - 1561 , - 2072 , - 4119 , - 4246 , - 4181 , - 468 , - 19 , - 4562 , - 273 , - 4432 , - 3215 , - 3534 , - 1933 , - 140 , - 5067 , - 2890 , - 521 , - 4872 , - 2119 , - 4358 , - 2949 , - 4804 , - 1283 , - 4482 , - 577 , - 1664 , - 4287 , - 4990 , - 317 , - 2364 , - 2491 , - 2426 , - 3897 , - 3448 , - 2807 , - 3702 , - 2677 , - 1460 , - 1779 , - 178 , - 3569 , - 3312 , - 1135 , - 3950 , - 3117 , - 364 , - 2603 , - 1194 , - 3049 , - 4712 , - 2727 , - 4006 , - 5093 , - 2532 , - 3235 , - 3746 , - 609 , - 736 , - 671 , - 2142 , - 1693 , - 1052 , - 1947 , - 922 , - 4889 , - 24 , - 3607 , - 1814 , - 1557 , - 4564 , - 2195 , - 1362 , - 3793 , - 848 , - 4623 , - 1294 , - 2957 , - 972 , - 2251 , - 3338 , - 777 , - 1480 , - 1991 , - 4038 , - 4165 , - 4100 , - 387 , - 5122 , - 4481 , - 192 , - 4351 , - 3134 , - 3453 , - 1852 , - 59 , - 4986 , - 2809 , - 440 , - 4791 , - 2038 , - 4277 , - 2868 , - 4723 , - 1202 , - 4401 , - 496 , - 1583 , - 4206 , - 4909 , - 236 , - 2283 , - 2410 , - 2345 , - 3816 , - 3367 , - 2726 , - 3621 , - 2596 , - 1379 , - 1698 , - 97 , - 3488 , - 3231 , - 1054 , - 3869 , - 3036 , - 283 , - 2522 , - 1113 , - 2968 , - 4631 , - 2646 , - 3925 , - 5012 , - 2451 , - 3154 , - 3665 , - 528 , - 655 , - 590 , - 2061 , - 1612 , - 971 , - 1866 , - 841 , - 4808 , - 5127 , - 3526 , - 1733 , - 1476 , - 4483 , - 2114 , - 1281 , - 3712 , - 767 , - 4542 , - 1213 , - 2876 , - 891 , - 2170 , - 3257 , - 696 , - 1399 , - 1910 , - 3957 , - 4084 , - 4019 , - 306 , - 5041 , - 4400 , - 111 , - 4270 , - 3053 , - 3372 , - 1771 , - 5162 , - 4905 , - 2728 , - 359 , - 4710 , - 1957 , - 4196 , - 2787 , - 4642 , - 1121 , - 4320 , - 415 , - 1502 , - 4125 , - 4828 , - 155 , - 2202 , - 2329 , - 2264 , - 3735 , - 3286 , - 2645 , - 3540 , - 2515 , - 1298 , - 1617 , - 16 , - 3407 , - 3150 , - 973 , - 3788 , - 2955 , - 202 , - 2441 , - 1032 , - 2887 , - 4550 , - 2565 , - 3844 , - 4931 , - 2370 , - 3073 , - 3584 , - 447 , - 574 , - 509 , - 1980 , - 1531 , - 890 , - 1785 , - 760 , - 4727 , - 5046 , - 3445 , - 1652 , - 1395 , - 4402 , - 2033 , - 1200 , - 3631 , - 686 , - 4461 , - 1132 , - 2795 , - 810 , - 2089 , - 3176 , - 615 , - 1318 , - 1829 , - 3876 , - 4003 , - 3938 , - 225 , - 4960 , - 4319 , - 30 , - 4189 , - 2972 , - 3291 , - 1690 , - 5081 , - 4824 , - 2647 , - 278 , - 4629 , - 1876 , - 4115 , - 2706 , - 4561 , - 1040 , - 4239 , - 334 , - 1421 , - 4044 , - 4747 , - 74 , - 2121 , - 2248 , - 2183 , - 3654 , - 3205 , - 2564 , - 3459 , - 2434 , - 1217 , - 1536 , - 5119 , - 3326 , - 3069 , - 892 , - 3707 , - 2874 , - 121 , - 2360 , - 951 , - 2806 , - 4469 , - 2484 , - 3763 , - 4850 , - 2289 , - 2992 , - 3503 , - 366 , - 493 , - 428 , - 1899 , - 1450 , - 809 , - 1704 , - 679 , - 4646 , - 4965 , - 3364 , - 1571 , - 1314 , - 4321 , - 1952 , - 1119 , - 3550 , - 605 , - 4380 , - 1051 , - 2714 , - 729 , - 2008 , - 3095 , - 534 , - 1237 , - 1748 , - 3795 , - 3922 , - 3857 , - 144 , - 4879 , - 4238 , - 5133 , - 4108 , - 2891 , - 3210 , - 1609 , - 5000 , - 4743 , - 2566 , - 197 , - 4548 , - 1795 , - 4034 , - 2625 , - 4480 , - 959 , - 4158 , - 253 , - 1340 , - 3963 , - 4666 , - 5177 , - 2040 , - 2167 , - 2102 , - 3573 , - 3124 , - 2483 , - 3378 , - 2353 , - 1136 , - 1455 , - 5038 , - 3245 , - 2988 , - 811 , - 3626 , - 2793 , - 40 , - 2279 , - 870 , - 2725 , - 4388 , - 2403 , - 3682 , - 4769 , - 2208 , - 2911 , - 3422 , - 285 , - 412 , - 347 , - 1818 , - 1369 , - 728 , - 1623 , - 598 , - 4565 , - 4884 , - 3283 , - 1490 , - 1233 , - 4240 , - 1871 , - 1038 , - 3469 , - 524 , - 4299 , - 970 , - 2633 , - 648 , - 1927 , - 3014 , - 453 , - 1156 , - 1667 , - 3714 , - 3841 , - 3776 , - 63 , - 4798 , - 4157 , - 5052 , - 4027 , - 2810 , - 3129 , - 1528 , - 4919 , - 4662 , - 2485 , - 116 , - 4467 , - 1714 , - 3953 , - 2544 , - 4399 , - 878 , - 4077 , - 172 , - 1259 , - 3882 , - 4585 , - 5096 , - 1959 , - 2086 , - 2021 , - 3492 , - 3043 , - 2402 , - 3297 , - 2272 , - 1055 , - 1374 , - 4957 , - 3164 , - 2907 , - 730 , - 3545 , - 2712 , - 5143 , - 2198 , - 789 , - 2644 , - 4307 , - 2322 , - 3601 , - 4688 , - 2127 , - 2830 , - 3341 , - 204 , - 331 , - 266 , - 1737 , - 1288 , - 647 , - 1542 , - 517 , - 4484 , - 4803 , - 3202 , - 1409 , - 1152 , - 4159 , - 1790 , - 957 , - 3388 , - 443 , - 4218 , - 889 , - 2552 , - 567 , - 1846 , - 2933 , - 372 , - 1075 , - 1586 , - 3633 , - 3760 , - 3695 , - 5166 , - 4717 , - 4076 , - 4971 , - 3946 , - 2729 , - 3048 , - 1447 , - 4838 , - 4581 , - 2404 , - 35 , - 4386 , - 1633 , - 3872 , - 2463 , - 4318 , - 797 , - 3996 , - 91 , - 1178 , - 3801 , - 4504 , - 5015 , - 1878 , - 2005 , - 1940 , - 3411 , - 2962 , - 2321 , - 3216 , - 2191 , - 974 , - 1293 , - 4876 , - 3083 , - 2826 , - 649 , - 3464 , - 2631 , - 5062 , - 2117 , - 708 , - 2563 , - 4226 , - 2241 , - 3520 , - 4607 , - 2046 , - 2749 , - 3260 , - 123 , - 250 , - 185 , - 1656 , - 1207 , - 566 , - 1461 , - 436 , - 4403 , - 4722 , - 3121 , - 1328 , - 1071 , - 4078 , - 1709 , - 876 , - 3307 , - 362 , - 4137 , - 808 , - 2471 , - 486 , - 1765 , - 2852 , - 291 , - 994 , - 1505 , - 3552 , - 3679 , - 3614 , - 5085 , - 4636 , - 3995 , - 4890 , - 3865 , - 2648 , - 2967 , - 1366 , - 4757 , - 4500 , - 2323 , - 5138 , - 4305 , - 1552 , - 3791 , - 2382 , - 4237 , - 716 , - 3915 , - 10 , - 1097 , - 3720 , - 4423 , - 4934 , - 1797 , - 1924 , - 1859 , - 3330 , - 2881 , - 2240 , - 3135 , - 2110 , - 893 , - 1212 , - 4795 , - 3002 , - 2745 , - 568 , - 3383 , - 2550 , - 4981 , - 2036 , - 627 , - 2482 , - 4145 , - 2160 , - 3439 , - 4526 , - 1965 , - 2668 , - 3179 , - 42 , - 169 , - 104 , - 1575 , - 1126 , - 485 , - 1380 , - 355 , - 4322 , - 4641 , - 3040 , - 1247 , - 990 , - 3997 , - 1628 , - 795 , - 3226 , - 281 , - 4056 , - 727 , - 2390 , - 405 , - 1684 , - 2771 , - 210 , - 913 , - 1424 , - 3471 , - 3598 , - 3533 , - 5004 , - 4555 , - 3914 , - 4809 , - 3784 , - 2567 , - 2886 , - 1285 , - 4676 , - 4419 , - 2242 , - 5057 , - 4224 , - 1471 , - 3710 , - 2301 , - 4156 , - 635 , - 3834 , - 5113 , - 1016 , - 3639 , - 4342 , - 4853 , - 1716 , - 1843 , - 1778 , - 3249 , - 2800 , - 2159 , - 3054 , - 2029 , - 812 , - 1131 , - 4714 , - 2921 , - 2664 , - 487 , - 3302 , - 2469 , - 4900 , - 1955 , - 546 , - 2401 , - 4064 , - 2079 , - 3358 , - 4445 , - 1884 , - 2587 , - 3098 , - 5145 , - 88 , - 23 , - 1494 , - 1045 , - 404 , - 1299 , - 274 , - 4241 , - 4560 , - 2959 , - 1166 , - 909 , - 3916 , - 1547 , - 714 , - 3145 , - 200 , - 3975 , - 646 , - 2309 , - 324 , - 1603 , - 2690 , - 129 , - 832 , - 1343 , - 3390 , - 3517 , - 3452 , - 4923 , - 4474 , - 3833 , - 4728 , - 3703 , - 2486 , - 2805 , - 1204 , - 4595 , - 4338 , - 2161 , - 4976 , - 4143 , - 1390 , - 3629 , - 2220 , - 4075 , - 554 , - 3753 , - 5032 , - 935 , - 3558 , - 4261 , - 4772 , - 1635 , - 1762 , - 1697 , - 3168 , - 2719 , - 2078 , - 2973 , - 1948 , - 731 , - 1050 , - 4633 , - 2840 , - 2583 , - 406 , - 3221 , - 2388 , - 4819 , - 1874 , - 465 , - 2320 , - 3983 , - 1998 , - 3277 , - 4364 , - 1803 , - 2506 , - 3017 , - 5064 , - 7 , - 5126 , - 1413 , - 964 , - 323 , - 1218 , - 193 , - 4160 , - 4479 , - 2878 , - 1085 , - 828 , - 3835 , - 1466 , - 633 , - 3064 , - 119 , - 3894 , - 565 , - 2228 , - 243 , - 1522 , - 2609 , - 48 , - 751 , - 1262 , - 3309 , - 3436 , - 3371 , - 4842 , - 4393 , - 3752 , - 4647 , - 3622 , - 2405 , - 2724 , - 1123 , - 4514 , - 4257 , - 2080 , - 4895 , - 4062 , - 1309 , - 3548 , - 2139 , - 3994 , - 473 , - 3672 , - 4951 , - 854 , - 3477 , - 4180 , - 4691 , - 1554 , - 1681 , - 1616 , - 3087 , - 2638 , - 1997 , - 2892 , - 1867 , - 650 , - 969 , - 4552 , - 2759 , - 2502 , - 325 , - 3140 , - 2307 , - 4738 , - 1793 , - 384 , - 2239 , - 3902 , - 1917 , - 3196 , - 4283 , - 1722 , - 2425 , - 2936 , - 4983 , - 5110 , - 5045 , - 1332 , - 883 , - 242 , - 1137 , - 112 , - 4079 , - 4398 , - 2797 , - 1004 , - 747 , - 3754 , - 1385 , - 552 , - 2983 , - 38 , - 3813 , - 484 , - 2147 , - 162 , - 1441 , - 2528 , - 5151 , - 670 , - 1181 , - 3228 , - 3355 , - 3290 , - 4761 , - 4312 , - 3671 , - 4566 , - 3541 , - 2324 , - 2643 , - 1042 , - 4433 , - 4176 , - 1999 , - 4814 , - 3981 , - 1228 , - 3467 , - 2058 , - 3913 , - 392 , - 3591 , - 4870 , - 773 , - 3396 , - 4099 , - 4610 , - 1473 , - 1600 , - 1535 , - 3006 , - 2557 , - 1916 , - 2811 , - 1786 , - 569 , - 888 , - 4471 , - 2678 , - 2421 , - 244 , - 3059 , - 2226 , - 4657 , - 1712 , - 303 , - 2158 , - 3821 , - 1836 , - 3115 , - 4202 , - 1641 , - 2344 , - 2855 , - 4902 , - 5029 , - 4964 , - 1251 , - 802 , - 161 , - 1056 , - 31 , - 3998 , - 4317 , - 2716 , - 923 , - 666 , - 3673 , - 1304 , - 471 , - 2902 , - 5141 , - 3732 , - 403 , - 2066 , - 81 , - 1360 , - 2447 , - 5070 , - 589 , - 1100 , - 3147 , - 3274 , - 3209 , - 4680 , - 4231 , - 3590 , - 4485 , - 3460 , - 2243 , - 2562 , - 961 , - 4352 , - 4095 , - 1918 , - 4733 , - 3900 , - 1147 , - 3386 , - 1977 , - 3832 , - 311 , - 3510 , - 4789 , - 692 , - 3315 , - 4018 , - 4529 , - 1392 , - 1519 , - 1454 , - 2925 , - 2476 , - 1835 , - 2730 , - 1705 , - 488 , - 807 , - 4390 , - 2597 , - 2340 , - 163 , - 2978 , - 2145 , - 4576 , - 1631 , - 222 , - 2077 , - 3740 , - 1755 , - 3034 , - 4121 , - 1560 , - 2263 , - 2774 , - 4821 , - 4948 , - 4883 , - 1170 , - 721 , - 80 , - 975 , - 5134 , - 3917 , - 4236 , - 2635 , - 842 , - 585 , - 3592 , - 1223 , - 390 , - 2821 , - 5060 , - 3651 , - 322 , - 1985 , - 0 , - 2587 , - 4682 , - 1693 , - 2148 , - 1455 , - 2894 , - 1873 , - 1672 , - 2947 , - 3730 , - 4677 , - 3820 , - 1815 , - 1942 , - 4857 , - 3344 , - 3307 , - 2778 , - 2413 , - 244 , - 2175 , - 990 , - 2593 , - 5016 , - 3667 , - 1826 , - 149 , - 1916 , - 2535 , - 38 , - 329 , - 1440 , - 4027 , - 874 , - 3133 , - 3588 , - 2895 , - 4334 , - 3313 , - 3112 , - 4387 , - 5170 , - 869 , - 12 , - 3255 , - 3382 , - 1049 , - 4784 , - 4747 , - 4218 , - 3853 , - 1684 , - 3615 , - 2430 , - 4033 , - 1208 , - 5107 , - 3266 , - 1589 , - 3356 , - 3975 , - 1478 , - 1769 , - 2880 , - 219 , - 2314 , - 4573 , - 5028 , - 4335 , - 526 , - 4753 , - 4552 , - 579 , - 1362 , - 2309 , - 1452 , - 4695 , - 4822 , - 2489 , - 976 , - 939 , - 410 , - 45 , - 3124 , - 5055 , - 3870 , - 225 , - 2648 , - 1299 , - 4706 , - 3029 , - 4796 , - 167 , - 2918 , - 3209 , - 4320 , - 1659 , - 3754 , - 765 , - 1220 , - 527 , - 1966 , - 945 , - 744 , - 2019 , - 2802 , - 3749 , - 2892 , - 887 , - 1014 , - 3929 , - 2416 , - 2379 , - 1850 , - 1485 , - 4564 , - 1247 , - 62 , - 1665 , - 4088 , - 2739 , - 898 , - 4469 , - 988 , - 1607 , - 4358 , - 4649 , - 512 , - 3099 , - 5194 , - 2205 , - 2660 , - 1967 , - 3406 , - 2385 , - 2184 , - 3459 , - 4242 , - 5189 , - 4332 , - 2327 , - 2454 , - 121 , - 3856 , - 3819 , - 3290 , - 2925 , - 756 , - 2687 , - 1502 , - 3105 , - 280 , - 4179 , - 2338 , - 661 , - 2428 , - 3047 , - 550 , - 841 , - 1952 , - 4539 , - 1386 , - 3645 , - 4100 , - 3407 , - 4846 , - 3825 , - 3624 , - 4899 , - 434 , - 1381 , - 524 , - 3767 , - 3894 , - 1561 , - 48 , - 11 , - 4730 , - 4365 , - 2196 , - 4127 , - 2942 , - 4545 , - 1720 , - 371 , - 3778 , - 2101 , - 3868 , - 4487 , - 1990 , - 2281 , - 3392 , - 731 , - 2826 , - 5085 , - 292 , - 4847 , - 1038 , - 17 , - 5064 , - 1091 , - 1874 , - 2821 , - 1964 , - 5207 , - 86 , - 3001 , - 1488 , - 1451 , - 922 , - 557 , - 3636 , - 319 , - 4382 , - 737 , - 3160 , - 1811 , - 5218 , - 3541 , - 60 , - 679 , - 3430 , - 3721 , - 4832 , - 2171 , - 4266 , - 1277 , - 1732 , - 1039 , - 2478 , - 1457 , - 1256 , - 2531 , - 3314 , - 4261 , - 3404 , - 1399 , - 1526 , - 4441 , - 2928 , - 2891 , - 2362 , - 1997 , - 5076 , - 1759 , - 574 , - 2177 , - 4600 , - 3251 , - 1410 , - 4981 , - 1500 , - 2119 , - 4870 , - 5161 , - 1024 , - 3611 , - 458 , - 2717 , - 3172 , - 2479 , - 3918 , - 2897 , - 2696 , - 3971 , - 4754 , - 453 , - 4844 , - 2839 , - 2966 , - 633 , - 4368 , - 4331 , - 3802 , - 3437 , - 1268 , - 3199 , - 2014 , - 3617 , - 792 , - 4691 , - 2850 , - 1173 , - 2940 , - 3559 , - 1062 , - 1353 , - 2464 , - 5051 , - 1898 , - 4157 , - 4612 , - 3919 , - 110 , - 4337 , - 4136 , - 163 , - 946 , - 1893 , - 1036 , - 4279 , - 4406 , - 2073 , - 560 , - 523 , - 5242 , - 4877 , - 2708 , - 4639 , - 3454 , - 5057 , - 2232 , - 883 , - 4290 , - 2613 , - 4380 , - 4999 , - 2502 , - 2793 , - 3904 , - 1243 , - 3338 , - 349 , - 804 , - 111 , - 1550 , - 529 , - 328 , - 1603 , - 2386 , - 3333 , - 2476 , - 471 , - 598 , - 3513 , - 2000 , - 1963 , - 1434 , - 1069 , - 4148 , - 831 , - 4894 , - 1249 , - 3672 , - 2323 , - 482 , - 4053 , - 572 , - 1191 , - 3942 , - 4233 , - 96 , - 2683 , - 4778 , - 1789 , - 2244 , - 1551 , - 2990 , - 1969 , - 1768 , - 3043 , - 3826 , - 4773 , - 3916 , - 1911 , - 2038 , - 4953 , - 3440 , - 3403 , - 2874 , - 2509 , - 340 , - 2271 , - 1086 , - 2689 , - 5112 , - 3763 , - 1922 , - 245 , - 2012 , - 2631 , - 134 , - 425 , - 1536 , - 4123 , - 970 , - 3229 , - 3684 , - 2991 , - 4430 , - 3409 , - 3208 , - 4483 , - 18 , - 965 , - 108 , - 3351 , - 3478 , - 1145 , - 4880 , - 4843 , - 4314 , - 3949 , - 1780 , - 3711 , - 2526 , - 4129 , - 1304 , - 5203 , - 3362 , - 1685 , - 3452 , - 4071 , - 1574 , - 1865 , - 2976 , - 315 , - 2410 , - 4669 , - 5124 , - 4431 , - 622 , - 4849 , - 4648 , - 675 , - 1458 , - 2405 , - 1548 , - 4791 , - 4918 , - 2585 , - 1072 , - 1035 , - 506 , - 141 , - 3220 , - 5151 , - 3966 , - 321 , - 2744 , - 1395 , - 4802 , - 3125 , - 4892 , - 263 , - 3014 , - 3305 , - 4416 , - 1755 , - 3850 , - 861 , - 1316 , - 623 , - 2062 , - 1041 , - 840 , - 2115 , - 2898 , - 3845 , - 2988 , - 983 , - 1110 , - 4025 , - 2512 , - 2475 , - 1946 , - 1581 , - 4660 , - 1343 , - 158 , - 1761 , - 4184 , - 2835 , - 994 , - 4565 , - 1084 , - 1703 , - 4454 , - 4745 , - 608 , - 3195 , - 42 , - 2301 , - 2756 , - 2063 , - 3502 , - 2481 , - 2280 , - 3555 , - 4338 , - 37 , - 4428 , - 2423 , - 2550 , - 217 , - 3952 , - 3915 , - 3386 , - 3021 , - 852 , - 2783 , - 1598 , - 3201 , - 376 , - 4275 , - 2434 , - 757 , - 2524 , - 3143 , - 646 , - 937 , - 2048 , - 4635 , - 1482 , - 3741 , - 4196 , - 3503 , - 4942 , - 3921 , - 3720 , - 4995 , - 530 , - 1477 , - 620 , - 3863 , - 3990 , - 1657 , - 144 , - 107 , - 4826 , - 4461 , - 2292 , - 4223 , - 3038 , - 4641 , - 1816 , - 467 , - 3874 , - 2197 , - 3964 , - 4583 , - 2086 , - 2377 , - 3488 , - 827 , - 2922 , - 5181 , - 388 , - 4943 , - 1134 , - 113 , - 5160 , - 1187 , - 1970 , - 2917 , - 2060 , - 55 , - 182 , - 3097 , - 1584 , - 1547 , - 1018 , - 653 , - 3732 , - 415 , - 4478 , - 833 , - 3256 , - 1907 , - 66 , - 3637 , - 156 , - 775 , - 3526 , - 3817 , - 4928 , - 2267 , - 4362 , - 1373 , - 1828 , - 1135 , - 2574 , - 1553 , - 1352 , - 2627 , - 3410 , - 4357 , - 3500 , - 1495 , - 1622 , - 4537 , - 3024 , - 2987 , - 2458 , - 2093 , - 5172 , - 1855 , - 670 , - 2273 , - 4696 , - 3347 , - 1506 , - 5077 , - 1596 , - 2215 , - 4966 , - 9 , - 1120 , - 3707 , - 554 , - 2813 , - 3268 , - 2575 , - 4014 , - 2993 , - 2792 , - 4067 , - 4850 , - 549 , - 4940 , - 2935 , - 3062 , - 729 , - 4464 , - 4427 , - 3898 , - 3533 , - 1364 , - 3295 , - 2110 , - 3713 , - 888 , - 4787 , - 2946 , - 1269 , - 3036 , - 3655 , - 1158 , - 1449 , - 2560 , - 5147 , - 1994 , - 4253 , - 4708 , - 4015 , - 206 , - 4433 , - 4232 , - 259 , - 1042 , - 1989 , - 1132 , - 4375 , - 4502 , - 2169 , - 656 , - 619 , - 90 , - 4973 , - 2804 , - 4735 , - 3550 , - 5153 , - 2328 , - 979 , - 4386 , - 2709 , - 4476 , - 5095 , - 2598 , - 2889 , - 4000 , - 1339 , - 3434 , - 445 , - 900 , - 207 , - 1646 , - 625 , - 424 , - 1699 , - 2482 , - 3429 , - 2572 , - 567 , - 694 , - 3609 , - 2096 , - 2059 , - 1530 , - 1165 , - 4244 , - 927 , - 4990 , - 1345 , - 3768 , - 2419 , - 578 , - 4149 , - 668 , - 1287 , - 4038 , - 4329 , - 192 , - 2779 , - 4874 , - 1885 , - 2340 , - 1647 , - 3086 , - 2065 , - 1864 , - 3139 , - 3922 , - 4869 , - 4012 , - 2007 , - 2134 , - 5049 , - 3536 , - 3499 , - 2970 , - 2605 , - 436 , - 2367 , - 1182 , - 2785 , - 5208 , - 3859 , - 2018 , - 341 , - 2108 , - 2727 , - 230 , - 521 , - 1632 , - 4219 , - 1066 , - 3325 , - 3780 , - 3087 , - 4526 , - 3505 , - 3304 , - 4579 , - 114 , - 1061 , - 204 , - 3447 , - 3574 , - 1241 , - 4976 , - 4939 , - 4410 , - 4045 , - 1876 , - 3807 , - 2622 , - 4225 , - 1400 , - 51 , - 3458 , - 1781 , - 3548 , - 4167 , - 1670 , - 1961 , - 3072 , - 411 , - 2506 , - 4765 , - 5220 , - 4527 , - 718 , - 4945 , - 4744 , - 771 , - 1554 , - 2501 , - 1644 , - 4887 , - 5014 , - 2681 , - 1168 , - 1131 , - 602 , - 237 , - 3316 , - 5247 , - 4062 , - 417 , - 2840 , - 1491 , - 4898 , - 3221 , - 4988 , - 359 , - 3110 , - 3401 , - 4512 , - 1851 , - 3946 , - 957 , - 1412 , - 719 , - 2158 , - 1137 , - 936 , - 2211 , - 2994 , - 3941 , - 3084 , - 1079 , - 1206 , - 4121 , - 2608 , - 2571 , - 2042 , - 1677 , - 4756 , - 1439 , - 254 , - 1857 , - 4280 , - 2931 , - 1090 , - 4661 , - 1180 , - 1799 , - 4550 , - 4841 , - 704 , - 3291 , - 138 , - 2397 , - 2852 , - 2159 , - 3598 , - 2577 , - 2376 , - 3651 , - 4434 , - 133 , - 4524 , - 2519 , - 2646 , - 313 , - 4048 , - 4011 , - 3482 , - 3117 , - 948 , - 2879 , - 1694 , - 3297 , - 472 , - 4371 , - 2530 , - 853 , - 2620 , - 3239 , - 742 , - 1033 , - 2144 , - 4731 , - 1578 , - 3837 , - 4292 , - 3599 , - 5038 , - 4017 , - 3816 , - 5091 , - 626 , - 1573 , - 716 , - 3959 , - 4086 , - 1753 , - 240 , - 203 , - 4922 , - 4557 , - 2388 , - 4319 , - 3134 , - 4737 , - 1912 , - 563 , - 3970 , - 2293 , - 4060 , - 4679 , - 2182 , - 2473 , - 3584 , - 923 , - 3018 , - 29 , - 484 , - 5039 , - 1230 , - 209 , - 8 , - 1283 , - 2066 , - 3013 , - 2156 , - 151 , - 278 , - 3193 , - 1680 , - 1643 , - 1114 , - 749 , - 3828 , - 511 , - 4574 , - 929 , - 3352 , - 2003 , - 162 , - 3733 , - 252 , - 871 , - 3622 , - 3913 , - 5024 , - 2363 , - 4458 , - 1469 , - 1924 , - 1231 , - 2670 , - 1649 , - 1448 , - 2723 , - 3506 , - 4453 , - 3596 , - 1591 , - 1718 , - 4633 , - 3120 , - 3083 , - 2554 , - 2189 , - 20 , - 1951 , - 766 , - 2369 , - 4792 , - 3443 , - 1602 , - 5173 , - 1692 , - 2311 , - 5062 , - 105 , - 1216 , - 3803 , - 650 , - 2909 , - 3364 , - 2671 , - 4110 , - 3089 , - 2888 , - 4163 , - 4946 , - 645 , - 5036 , - 3031 , - 3158 , - 825 , - 4560 , - 4523 , - 3994 , - 3629 , - 1460 , - 3391 , - 2206 , - 3809 , - 984 , - 4883 , - 3042 , - 1365 , - 3132 , - 3751 , - 1254 , - 1545 , - 2656 , - 5243 , - 2090 , - 4349 , - 4804 , - 4111 , - 302 , - 4529 , - 4328 , - 355 , - 1138 , - 2085 , - 1228 , - 4471 , - 4598 , - 2265 , - 752 , - 715 , - 186 , - 5069 , - 2900 , - 4831 , - 3646 , - 1 , - 2424 , - 1075 , - 4482 , - 2805 , - 4572 , - 5191 , - 2694 , - 2985 , - 4096 , - 1435 , - 3530 , - 541 , - 996 , - 303 , - 1742 , - 721 , - 520 , - 1795 , - 2578 , - 3525 , - 2668 , - 663 , - 790 , - 3705 , - 2192 , - 2155 , - 1626 , - 1261 , - 4340 , - 1023 , - 5086 , - 1441 , - 3864 , - 2515 , - 674 , - 4245 , - 764 , - 1383 , - 4134 , - 4425 , - 288 , - 2875 , - 4970 , - 1981 , - 2436 , - 1743 , - 3182 , - 2161 , - 1960 , - 3235 , - 4018 , - 4965 , - 4108 , - 2103 , - 2230 , - 5145 , - 3632 , - 3595 , - 3066 , - 2701 , - 532 , - 2463 , - 1278 , - 2881 , - 56 , - 3955 , - 2114 , - 437 , - 2204 , - 2823 , - 326 , - 617 , - 1728 , - 4315 , - 1162 , - 3421 , - 3876 , - 3183 , - 4622 , - 3601 , - 3400 , - 4675 , - 210 , - 1157 , - 300 , - 3543 , - 3670 , - 1337 , - 5072 , - 5035 , - 4506 , - 4141 , - 1972 , - 3903 , - 2718 , - 4321 , - 1496 , - 147 , - 3554 , - 1877 , - 3644 , - 4263 , - 1766 , - 2057 , - 3168 , - 507 , - 2602 , - 4861 , - 68 , - 4623 , - 814 , - 5041 , - 4840 , - 867 , - 1650 , - 2597 , - 1740 , - 4983 , - 5110 , - 2777 , - 1264 , - 1227 , - 698 , - 333 , - 3412 , - 95 , - 4158 , - 513 , - 2936 , - 1587 , - 4994 , - 3317 , - 5084 , - 455 , - 3206 , - 3497 , - 4608 , - 1947 , - 4042 , - 1053 , - 1508 , - 815 , - 2254 , - 1233 , - 1032 , - 2307 , - 3090 , - 4037 , - 3180 , - 1175 , - 1302 , - 4217 , - 2704 , - 2667 , - 2138 , - 1773 , - 4852 , - 1535 , - 350 , - 1953 , - 4376 , - 3027 , - 1186 , - 4757 , - 1276 , - 1895 , - 4646 , - 4937 , - 800 , - 3387 , - 234 , - 2493 , - 2948 , - 2255 , - 3694 , - 2673 , - 2472 , - 3747 , - 4530 , - 229 , - 4620 , - 2615 , - 2742 , - 409 , - 4144 , - 4107 , - 3578 , - 3213 , - 1044 , - 2975 , - 1790 , - 3393 , - 568 , - 4467 , - 2626 , - 949 , - 2716 , - 3335 , - 838 , - 1129 , - 2240 , - 4827 , - 1674 , - 3933 , - 4388 , - 3695 , - 5134 , - 4113 , - 3912 , - 5187 , - 722 , - 1669 , - 812 , - 4055 , - 4182 , - 1849 , - 336 , - 299 , - 5018 , - 4653 , - 2484 , - 4415 , - 3230 , - 4833 , - 2008 , - 659 , - 4066 , - 2389 , - 4156 , - 4775 , - 2278 , - 2569 , - 3680 , - 1019 , - 3114 , - 125 , - 580 , - 5135 , - 1326 , - 305 , - 104 , - 1379 , - 2162 , - 3109 , - 2252 , - 247 , - 374 , - 3289 , - 1776 , - 1739 , - 1210 , - 845 , - 3924 , - 607 , - 4670 , - 1025 , - 3448 , - 2099 , - 258 , - 3829 , - 348 , - 967 , - 3718 , - 4009 , - 5120 , - 2459 , - 4554 , - 1565 , - 2020 , - 1327 , - 2766 , - 1745 , - 1544 , - 2819 , - 3602 , - 4549 , - 3692 , - 1687 , - 1814 , - 4729 , - 3216 , - 3179 , - 2650 , - 2285 , - 116 , - 2047 , - 862 , - 2465 , - 4888 , - 3539 , - 1698 , - 21 , - 1788 , - 2407 , - 5158 , - 201 , - 1312 , - 3899 , - 746 , - 3005 , - 3460 , - 2767 , - 4206 , - 3185 , - 2984 , - 4259 , - 5042 , - 741 , - 5132 , - 3127 , - 3254 , - 921 , - 4656 , - 4619 , - 4090 , - 3725 , - 1556 , - 3487 , - 2302 , - 3905 , - 1080 , - 4979 , - 3138 , - 1461 , - 3228 , - 3847 , - 1350 , - 1641 , - 2752 , - 91 , - 2186 , - 4445 , - 4900 , - 4207 , - 398 , - 4625 , - 4424 , - 451 , - 1234 , - 2181 , - 1324 , - 4567 , - 4694 , - 2361 , - 848 , - 811 , - 282 , - 5165 , - 2996 , - 4927 , - 3742 , - 97 , - 2520 , - 1171 , - 4578 , - 2901 , - 4668 , - 39 , - 2790 , - 3081 , - 4192 , - 1531 , - 3626 , - 637 , - 1092 , - 399 , - 1838 , - 817 , - 616 , - 1891 , - 2674 , - 3621 , - 2764 , - 759 , - 886 , - 3801 , - 2288 , - 2251 , - 1722 , - 1357 , - 4436 , - 1119 , - 5182 , - 1537 , - 3960 , - 2611 , - 770 , - 4341 , - 860 , - 1479 , - 4230 , - 4521 , - 384 , - 2971 , - 5066 , - 2077 , - 2532 , - 1839 , - 3278 , - 2257 , - 2056 , - 3331 , - 4114 , - 5061 , - 4204 , - 2199 , - 2326 , - 5241 , - 3728 , - 3691 , - 3162 , - 2797 , - 628 , - 2559 , - 1374 , - 2977 , - 152 , - 4051 , - 2210 , - 533 , - 2300 , - 2919 , - 422 , - 713 , - 1824 , - 4411 , - 1258 , - 3517 , - 3972 , - 3279 , - 4718 , - 3697 , - 3496 , - 4771 , - 306 , - 1253 , - 396 , - 3639 , - 3766 , - 1433 , - 5168 , - 5131 , - 4602 , - 4237 , - 2068 , - 3999 , - 2814 , - 4417 , - 1592 , - 243 , - 3650 , - 1973 , - 3740 , - 4359 , - 1862 , - 2153 , - 3264 , - 603 , - 2698 , - 4957 , - 164 , - 4719 , - 910 , - 5137 , - 4936 , - 963 , - 1746 , - 2693 , - 1836 , - 5079 , - 5206 , - 2873 , - 1360 , - 1323 , - 794 , - 429 , - 3508 , - 191 , - 4254 , - 609 , - 3032 , - 1683 , - 5090 , - 3413 , - 5180 , - 551 , - 3302 , - 3593 , - 4704 , - 2043 , - 4138 , - 1149 , - 1604 , - 911 , - 2350 , - 1329 , - 1128 , - 2403 , - 3186 , - 4133 , - 3276 , - 1271 , - 1398 , - 4313 , - 2800 , - 2763 , - 2234 , - 1869 , - 4948 , - 1631 , - 446 , - 2049 , - 4472 , - 3123 , - 1282 , - 4853 , - 1372 , - 1991 , - 4742 , - 5033 , - 896 , - 3483 , - 330 , - 2589 , - 3044 , - 2351 , - 3790 , - 2769 , - 2568 , - 3843 , - 4626 , - 325 , - 4716 , - 2711 , - 2838 , - 505 , - 4240 , - 4203 , - 3674 , - 3309 , - 1140 , - 3071 , - 1886 , - 3489 , - 664 , - 4563 , - 2722 , - 1045 , - 2812 , - 3431 , - 934 , - 1225 , - 2336 , - 4923 , - 1770 , - 4029 , - 4484 , - 3791 , - 5230 , - 4209 , - 4008 , - 35 , - 818 , - 1765 , - 908 , - 4151 , - 4278 , - 1945 , - 432 , - 395 , - 5114 , - 4749 , - 2580 , - 4511 , - 3326 , - 4929 , - 2104 , - 755 , - 4162 , - 2485 , - 4252 , - 4871 , - 2374 , - 2665 , - 3776 , - 1115 , - 3210 , - 221 , - 676 , - 5231 , - 1422 , - 401 , - 200 , - 1475 , - 2258 , - 3205 , - 2348 , - 343 , - 470 , - 3385 , - 1872 , - 1835 , - 1306 , - 941 , - 4020 , - 703 , - 4766 , - 1121 , - 3544 , - 2195 , - 354 , - 3925 , - 444 , - 1063 , - 3814 , - 4105 , - 5216 , - 2555 , - 4650 , - 1661 , - 2116 , - 1423 , - 2862 , - 1841 , - 1640 , - 2915 , - 3698 , - 4645 , - 3788 , - 1783 , - 1910 , - 4825 , - 3312 , - 3275 , - 2746 , - 2381 , - 212 , - 2143 , - 958 , - 2561 , - 4984 , - 3635 , - 1794 , - 117 , - 1884 , - 2503 , - 6 , - 297 , - 1408 , - 3995 , - 842 , - 3101 , - 3556 , - 2863 , - 4302 , - 3281 , - 3080 , - 4355 , - 5138 , - 837 , - 5228 , - 3223 , - 3350 , - 1017 , - 4752 , - 4715 , - 4186 , - 3821 , - 1652 , - 3583 , - 2398 , - 4001 , - 1176 , - 5075 , - 3234 , - 1557 , - 3324 , - 3943 , - 1446 , - 1737 , - 2848 , - 187 , - 2282 , - 4541 , - 4996 , - 4303 , - 494 , - 4721 , - 4520 , - 547 , - 1330 , - 2277 , - 1420 , - 4663 , - 4790 , - 2457 , - 944 , - 907 , - 378 , - 13 , - 3092 , - 5023 , - 3838 , - 193 , - 2616 , - 1267 , - 4674 , - 2997 , - 4764 , - 135 , - 2886 , - 3177 , - 4288 , - 1627 , - 3722 , - 733 , - 1188 , - 495 , - 1934 , - 913 , - 712 , - 1987 , - 2770 , - 3717 , - 2860 , - 855 , - 982 , - 3897 , - 2384 , - 2347 , - 1818 , - 1453 , - 4532 , - 1215 , - 30 , - 1633 , - 4056 , - 2707 , - 866 , - 4437 , - 956 , - 1575 , - 4326 , - 4617 , - 480 , - 3067 , - 5162 , - 2173 , - 2628 , - 1935 , - 3374 , - 2353 , - 2152 , - 3427 , - 4210 , - 5157 , - 4300 , - 2295 , - 2422 , - 89 , - 3824 , - 3787 , - 3258 , - 2893 , - 724 , - 2655 , - 1470 , - 3073 , - 248 , - 4147 , - 2306 , - 629 , - 2396 , - 3015 , - 518 , - 809 , - 1920 , - 4507 , - 1354 , - 3613 , - 4068 , - 3375 , - 4814 , - 3793 , - 3592 , - 4867 , - 402 , - 1349 , - 492 , - 3735 , - 3862 , - 1529 , - 16 , - 5227 , - 4698 , - 4333 , - 2164 , - 4095 , - 2910 , - 4513 , - 1688 , - 339 , - 3746 , - 2069 , - 3836 , - 4455 , - 1958 , - 2249 , - 3360 , - 699 , - 2794 , - 5053 , - 260 , - 4815 , - 1006 , - 5233 , - 5032 , - 1059 , - 1842 , - 2789 , - 1932 , - 5175 , - 54 , - 2969 , - 1456 , - 1419 , - 890 , - 525 , - 3604 , - 287 , - 4350 , - 705 , - 3128 , - 1779 , - 5186 , - 3509 , - 28 , - 647 , - 3398 , - 3689 , - 4800 , - 2139 , - 4234 , - 1245 , - 1700 , - 1007 , - 2446 , - 1425 , - 1224 , - 2499 , - 3282 , - 4229 , - 3372 , - 1367 , - 1494 , - 4409 , - 2896 , - 2859 , - 2330 , - 1965 , - 5044 , - 1727 , - 542 , - 2145 , - 4568 , - 3219 , - 1378 , - 4949 , - 1468 , - 2087 , - 4838 , - 5129 , - 992 , - 3579 , - 426 , - 2685 , - 3140 , - 2447 , - 3886 , - 2865 , - 2664 , - 3939 , - 4722 , - 421 , - 4812 , - 2807 , - 2934 , - 601 , - 4336 , - 4299 , - 3770 , - 3405 , - 1236 , - 3167 , - 1982 , - 3585 , - 760 , - 4659 , - 2818 , - 1141 , - 2908 , - 3527 , - 1030 , - 1321 , - 2432 , - 5019 , - 1866 , - 4125 , - 4580 , - 3887 , - 78 , - 4305 , - 4104 , - 131 , - 914 , - 1861 , - 1004 , - 4247 , - 4374 , - 2041 , - 528 , - 491 , - 5210 , - 4845 , - 2676 , - 4607 , - 3422 , - 5025 , - 2200 , - 851 , - 4258 , - 2581 , - 4348 , - 4967 , - 2470 , - 2761 , - 3872 , - 1211 , - 3306 , - 317 , - 772 , - 79 , - 1518 , - 497 , - 296 , - 1571 , - 2354 , - 3301 , - 2444 , - 439 , - 566 , - 3481 , - 1968 , - 1931 , - 1402 , - 1037 , - 4116 , - 799 , - 4862 , - 1217 , - 3640 , - 2291 , - 450 , - 4021 , - 540 , - 1159 , - 3910 , - 4201 , - 64 , - 2651 , - 4746 , - 1757 , - 2212 , - 1519 , - 2958 , - 1937 , - 1736 , - 3011 , - 3794 , - 4741 , - 3884 , - 1879 , - 2006 , - 4921 , - 3408 , - 3371 , - 2842 , - 2477 , - 308 , - 2239 , - 1054 , - 2657 , - 5080 , - 3731 , - 1890 , - 213 , - 1980 , - 2599 , - 102 , - 393 , - 1504 , - 4091 , - 938 , - 3197 , - 3652 , - 2959 , - 4398 , - 3377 , - 3176 , - 4451 , - 5234 , - 933 , - 76 , - 3319 , - 3446 , - 1113 , - 4848 , - 4811 , - 4282 , - 3917 , - 1748 , - 3679 , - 2494 , - 4097 , - 1272 , - 5171 , - 3330 , - 1653 , - 3420 , - 4039 , - 1542 , - 1833 , - 2944 , - 283 , - 2378 , - 4637 , - 5092 , - 4399 , - 590 , - 4817 , - 4616 , - 643 , - 1426 , - 2373 , - 1516 , - 4759 , - 4886 , - 2553 , - 1040 , - 1003 , - 474 , - 109 , - 3188 , - 5119 , - 3934 , - 289 , - 2712 , - 1363 , - 4770 , - 3093 , - 4860 , - 231 , - 2982 , - 3273 , - 4384 , - 1723 , - 3818 , - 829 , - 1284 , - 591 , - 2030 , - 1009 , - 808 , - 2083 , - 2866 , - 3813 , - 2956 , - 951 , - 1078 , - 3993 , - 2480 , - 2443 , - 1914 , - 1549 , - 4628 , - 1311 , - 126 , - 1729 , - 4152 , - 2803 , - 962 , - 4533 , - 1052 , - 1671 , - 4422 , - 4713 , - 576 , - 3163 , - 10 , - 2269 , - 2724 , - 2031 , - 3470 , - 2449 , - 2248 , - 3523 , - 4306 , - 5 , - 4396 , - 2391 , - 2518 , - 185 , - 3920 , - 3883 , - 3354 , - 2989 , - 820 , - 2751 , - 1566 , - 3169 , - 344 , - 4243 , - 2402 , - 725 , - 2492 , - 3111 , - 614 , - 905 , - 2016 , - 4603 , - 1450 , - 3709 , - 4164 , - 3471 , - 4910 , - 3889 , - 3688 , - 4963 , - 498 , - 1445 , - 588 , - 3831 , - 3958 , - 1625 , - 112 , - 75 , - 4794 , - 4429 , - 2260 , - 4191 , - 3006 , - 4609 , - 1784 , - 435 , - 3842 , - 2165 , - 3932 , - 4551 , - 2054 , - 2345 , - 3456 , - 795 , - 2890 , - 5149 , - 356 , - 4911 , - 1102 , - 81 , - 5128 , - 1155 , - 1938 , - 2885 , - 2028 , - 23 , - 150 , - 3065 , - 1552 , - 1515 , - 986 , - 621 , - 3700 , - 383 , - 4446 , - 801 , - 3224 , - 1875 , - 34 , - 3605 , - 124 , - 743 , - 3494 , - 3785 , - 4896 , - 2235 , - 4330 , - 1341 , - 1796 , - 1103 , - 2542 , - 1521 , - 1320 , - 2595 , - 3378 , - 4325 , - 3468 , - 1463 , - 1590 , - 4505 , - 2992 , - 2955 , - 2426 , - 2061 , - 5140 , - 1823 , - 638 , - 2241 , - 4664 , - 3315 , - 1474 , - 5045 , - 1564 , - 2183 , - 4934 , - 5225 , - 1088 , - 3675 , - 522 , - 2781 , - 3236 , - 2543 , - 3982 , - 2961 , - 2760 , - 4035 , - 4818 , - 517 , - 4908 , - 2903 , - 3030 , - 697 , - 4432 , - 4395 , - 3866 , - 3501 , - 1332 , - 3263 , - 2078 , - 3681 , - 856 , - 4755 , - 2914 , - 1237 , - 3004 , - 3623 , - 1126 , - 1417 , - 2528 , - 5115 , - 1962 , - 4221 , - 4676 , - 3983 , - 174 , - 4401 , - 4200 , - 227 , - 1010 , - 1957 , - 1100 , - 4343 , - 4470 , - 2137 , - 624 , - 587 , - 58 , - 4941 , - 2772 , - 4703 , - 3518 , - 5121 , - 2296 , - 947 , - 4354 , - 2677 , - 4444 , - 5063 , - 2566 , - 2857 , - 3968 , - 1307 , - 3402 , - 413 , - 868 , - 175 , - 1614 , - 593 , - 392 , - 1667 , - 2450 , - 3397 , - 2540 , - 535 , - 662 , - 3577 , - 2064 , - 2027 , - 1498 , - 1133 , - 4212 , - 895 , - 4958 , - 1313 , - 3736 , - 2387 , - 546 , - 4117 , - 636 , - 1255 , - 4006 , - 4297 , - 160 , - 2747 , - 4842 , - 1853 , - 2308 , - 1615 , - 3054 , - 2033 , - 1832 , - 3107 , - 3890 , - 4837 , - 3980 , - 1975 , - 2102 , - 5017 , - 3504 , - 3467 , - 2938 , - 2573 , - 404 , - 2335 , - 1150 , - 2753 , - 5176 , - 3827 , - 1986 , - 309 , - 2076 , - 2695 , - 198 , - 489 , - 1600 , - 4187 , - 1034 , - 3293 , - 3748 , - 3055 , - 4494 , - 3473 , - 3272 , - 4547 , - 82 , - 1029 , - 172 , - 3415 , - 3542 , - 1209 , - 4944 , - 4907 , - 4378 , - 4013 , - 1844 , - 3775 , - 2590 , - 4193 , - 1368 , - 19 , - 3426 , - 1749 , - 3516 , - 4135 , - 1638 , - 1929 , - 3040 , - 379 , - 2474 , - 4733 , - 5188 , - 4495 , - 686 , - 4913 , - 4712 , - 739 , - 1522 , - 2469 , - 1612 , - 4855 , - 4982 , - 2649 , - 1136 , - 1099 , - 570 , - 205 , - 3284 , - 5215 , - 4030 , - 385 , - 2808 , - 1459 , - 4866 , - 3189 , - 4956 , - 327 , - 3078 , - 3369 , - 4480 , - 1819 , - 3914 , - 925 , - 1380 , - 687 , - 2126 , - 1105 , - 904 , - 2179 , - 2962 , - 3909 , - 3052 , - 1047 , - 1174 , - 4089 , - 2576 , - 2539 , - 2010 , - 1645 , - 4724 , - 1407 , - 222 , - 1825 , - 4248 , - 2899 , - 1058 , - 4629 , - 1148 , - 1767 , - 4518 , - 4809 , - 672 , - 3259 , - 106 , - 2365 , - 2820 , - 2127 , - 3566 , - 2545 , - 2344 , - 3619 , - 4402 , - 101 , - 4492 , - 2487 , - 2614 , - 281 , - 4016 , - 3979 , - 3450 , - 3085 , - 916 , - 2847 , - 1662 , - 3265 , - 440 , - 4339 , - 2498 , - 821 , - 2588 , - 3207 , - 710 , - 1001 , - 2112 , - 4699 , - 1546 , - 3805 , - 4260 , - 3567 , - 5006 , - 3985 , - 3784 , - 5059 , - 594 , - 1541 , - 684 , - 3927 , - 4054 , - 1721 , - 208 , - 171 , - 4890 , - 4525 , - 2356 , - 4287 , - 3102 , - 4705 , - 1880 , - 531 , - 3938 , - 2261 , - 4028 , - 4647 , - 2150 , - 2441 , - 3552 , - 891 , - 2986 , - 5245 , - 452 , - 5007 , - 1198 , - 177 , - 5224 , - 1251 , - 2034 , - 2981 , - 2124 , - 119 , - 246 , - 3161 , - 1648 , - 1611 , - 1082 , - 717 , - 3796 , - 479 , - 4542 , - 897 , - 3320 , - 1971 , - 130 , - 3701 , - 220 , - 839 , - 3590 , - 3881 , - 4992 , - 2331 , - 4426 , - 1437 , - 1892 , - 1199 , - 2638 , - 1617 , - 1416 , - 2691 , - 3474 , - 4421 , - 3564 , - 1559 , - 1686 , - 4601 , - 3088 , - 3051 , - 2522 , - 2157 , - 5236 , - 1919 , - 734 , - 2337 , - 4760 , - 3411 , - 1570 , - 5141 , - 1660 , - 2279 , - 5030 , - 73 , - 1184 , - 3771 , - 618 , - 2877 , - 3332 , - 2639 , - 4078 , - 3057 , - 2856 , - 4131 , - 4914 , - 613 , - 5004 , - 2999 , - 3126 , - 793 , - 4528 , - 4491 , - 3962 , - 3597 , - 1428 , - 3359 , - 2174 , - 3777 , - 952 , - 4851 , - 3010 , - 1333 , - 3100 , - 3719 , - 1222 , - 1513 , - 2624 , - 5211 , - 2058 , - 4317 , - 4772 , - 4079 , - 270 , - 4497 , - 4296 , - 323 , - 1106 , - 2053 , - 1196 , - 4439 , - 4566 , - 2233 , - 720 , - 683 , - 154 , - 5037 , - 2868 , - 4799 , - 3614 , - 5217 , - 2392 , - 1043 , - 4450 , - 2773 , - 4540 , - 5159 , - 2662 , - 2953 , - 4064 , - 1403 , - 3498 , - 509 , - 964 , - 271 , - 1710 , - 689 , - 488 , - 1763 , - 2546 , - 3493 , - 2636 , - 631 , - 758 , - 3673 , - 2160 , - 2123 , - 1594 , - 1229 , - 4308 , - 991 , - 5054 , - 1409 , - 3832 , - 2483 , - 642 , - 4213 , - 732 , - 1351 , - 4102 , - 4393 , - 256 , - 2843 , - 4938 , - 1949 , - 2404 , - 1711 , - 3150 , - 2129 , - 1928 , - 3203 , - 3986 , - 4933 , - 4076 , - 2071 , - 2198 , - 5113 , - 3600 , - 3563 , - 3034 , - 2669 , - 500 , - 2431 , - 1246 , - 2849 , - 24 , - 3923 , - 2082 , - 405 , - 2172 , - 2791 , - 294 , - 585 , - 1696 , - 4283 , - 1130 , - 3389 , - 3844 , - 3151 , - 4590 , - 3569 , - 3368 , - 4643 , - 178 , - 1125 , - 268 , - 3511 , - 3638 , - 1305 , - 5040 , - 5003 , - 4474 , - 4109 , - 1940 , - 3871 , - 2686 , - 4289 , - 1464 , - 115 , - 3522 , - 1845 , - 3612 , - 4231 , - 1734 , - 2025 , - 3136 , - 475 , - 2570 , - 4829 , - 36 , - 4591 , - 782 , - 5009 , - 4808 , - 835 , - 1618 , - 2565 , - 1708 , - 4951 , - 5078 , - 2745 , - 1232 , - 1195 , - 666 , - 301 , - 3380 , - 63 , - 4126 , - 481 , - 2904 , - 1555 , - 4962 , - 3285 , - 5052 , - 423 , - 3174 , - 3465 , - 4576 , - 1915 , - 4010 , - 1021 , - 1476 , - 783 , - 2222 , - 1201 , - 1000 , - 2275 , - 3058 , - 4005 , - 3148 , - 1143 , - 1270 , - 4185 , - 2672 , - 2635 , - 2106 , - 1741 , - 4820 , - 1503 , - 318 , - 1921 , - 4344 , - 2995 , - 1154 , - 4725 , - 1244 , - 1863 , - 4614 , - 4905 , - 768 , - 3355 , - 202 , - 2461 , - 2916 , - 2223 , - 3662 , - 2641 , - 2440 , - 3715 , - 4498 , - 197 , - 4588 , - 2583 , - 2710 , - 377 , - 4112 , - 4075 , - 3546 , - 3181 , - 1012 , - 2943 , - 1758 , - 3361 , - 536 , - 4435 , - 2594 , - 917 , - 2684 , - 3303 , - 806 , - 1097 , - 2208 , - 4795 , - 1642 , - 3901 , - 4356 , - 3663 , - 5102 , - 4081 , - 3880 , - 5155 , - 690 , - 1637 , - 780 , - 4023 , - 4150 , - 1817 , - 304 , - 267 , - 4986 , - 4621 , - 2452 , - 4383 , - 3198 , - 4801 , - 1976 , - 627 , - 4034 , - 2357 , - 4124 , - 4743 , - 2246 , - 2537 , - 3648 , - 987 , - 3082 , - 93 , - 548 , - 5103 , - 1294 , - 273 , - 72 , - 1347 , - 2130 , - 3077 , - 2220 , - 215 , - 342 , - 3257 , - 1744 , - 1707 , - 1178 , - 813 , - 3892 , - 575 , - 4638 , - 993 , - 3416 , - 2067 , - 226 , - 3797 , - 316 , - 935 , - 3686 , - 3977 , - 5088 , - 2427 , - 4522 , - 1533 , - 1988 , - 1295 , - 2734 , - 1713 , - 1512 , - 2787 , - 3570 , - 4517 , - 3660 , - 1655 , - 1782 , - 4697 , - 3184 , - 3147 , - 2618 , - 2253 , - 84 , - 2015 , - 830 , - 2433 , - 4856 , - 3507 , - 1666 , - 5237 , - 1756 , - 2375 , - 5126 , - 169 , - 1280 , - 3867 , - 714 , - 2973 , - 3428 , - 2735 , - 4174 , - 3153 , - 2952 , - 4227 , - 5010 , - 709 , - 5100 , - 3095 , - 3222 , - 889 , - 4624 , - 4587 , - 4058 , - 3693 , - 1524 , - 3455 , - 2270 , - 3873 , - 1048 , - 4947 , - 3106 , - 1429 , - 3196 , - 3815 , - 1318 , - 1609 , - 2720 , - 59 , - 2154 , - 4413 , - 4868 , - 4175 , - 366 , - 4593 , - 4392 , - 419 , - 1202 , - 2149 , - 1292 , - 4535 , - 4662 , - 2329 , - 816 , - 779 , - 250 , - 5133 , - 2964 , - 4895 , - 3710 , - 65 , - 2488 , - 1139 , - 4546 , - 2869 , - 4636 , - 7 , - 2758 , - 3049 , - 4160 , - 1499 , - 3594 , - 605 , - 1060 , - 367 , - 1806 , - 785 , - 584 , - 1859 , - 2642 , - 3589 , - 2732 , - 727 , - 854 , - 3769 , - 2256 , - 2219 , - 1690 , - 1325 , - 4404 , - 1087 , - 5150 , - 1505 , - 3928 , - 2579 , - 738 , - 4309 , - 828 , - 1447 , - 4198 , - 4489 , - 352 , - 2939 , - 5034 , - 2045 , - 2500 , - 1807 , - 3246 , - 2225 , - 2024 , - 3299 , - 4082 , - 5029 , - 4172 , - 2167 , - 2294 , - 5209 , - 3696 , - 3659 , - 3130 , - 2765 , - 596 , - 2527 , - 1342 , - 2945 , - 120 , - 4019 , - 2178 , - 501 , - 2268 , - 2887 , - 390 , - 681 , - 1792 , - 4379 , - 1226 , - 3485 , - 3940 , - 3247 , - 4686 , - 3665 , - 3464 , - 4739 , - 274 , - 1221 , - 364 , - 3607 , - 3734 , - 1401 , - 5136 , - 5099 , - 4570 , - 4205 , - 2036 , - 3967 , - 2782 , - 4385 , - 1560 , - 211 , - 3618 , - 1941 , - 3708 , - 4327 , - 1830 , - 2121 , - 3232 , - 571 , - 2666 , - 4925 , - 132 , - 4687 , - 878 , - 5105 , - 4904 , - 931 , - 1714 , - 2661 , - 1804 , - 5047 , - 5174 , - 2841 , - 1328 , - 1291 , - 762 , - 397 , - 3476 , - 159 , - 4222 , - 577 , - 3000 , - 1651 , - 5058 , - 3381 , - 5148 , - 519 , - 3270 , - 3561 , - 4672 , - 2011 , - 4106 , - 1117 , - 1572 , - 879 , - 2318 , - 1297 , - 1096 , - 2371 , - 3154 , - 4101 , - 3244 , - 1239 , - 1366 , - 4281 , - 2768 , - 2731 , - 2202 , - 1837 , - 4916 , - 1599 , - 414 , - 2017 , - 4440 , - 3091 , - 1250 , - 4821 , - 1340 , - 1959 , - 4710 , - 5001 , - 864 , - 3451 , - 298 , - 2557 , - 3012 , - 2319 , - 3758 , - 2737 , - 2536 , - 3811 , - 4594 , - 293 , - 4684 , - 2679 , - 2806 , - 473 , - 4208 , - 4171 , - 3642 , - 3277 , - 1108 , - 3039 , - 1854 , - 3457 , - 632 , - 4531 , - 2690 , - 1013 , - 2780 , - 3399 , - 902 , - 1193 , - 2304 , - 4891 , - 1738 , - 3997 , - 4452 , - 3759 , - 5198 , - 4177 , - 3976 , - 3 , - 786 , - 1733 , - 876 , - 4119 , - 4246 , - 1913 , - 400 , - 363 , - 5082 , - 4717 , - 2548 , - 4479 , - 3294 , - 4897 , - 2072 , - 723 , - 4130 , - 2453 , - 4220 , - 4839 , - 2342 , - 2633 , - 3744 , - 1083 , - 3178 , - 189 , - 644 , - 5199 , - 1390 , - 369 , - 168 , - 1443 , - 2226 , - 3173 , - 2316 , - 311 , - 438 , - 3353 , - 1840 , - 1803 , - 1274 , - 909 , - 3988 , - 671 , - 4734 , - 1089 , - 3512 , - 2163 , - 322 , - 3893 , - 412 , - 1031 , - 3782 , - 4073 , - 5184 , - 2523 , - 4618 , - 1629 , - 2084 , - 1391 , - 2830 , - 1809 , - 1608 , - 2883 , - 3666 , - 4613 , - 3756 , - 1751 , - 1878 , - 4793 , - 3280 , - 3243 , - 2714 , - 2349 , - 180 , - 2111 , - 926 , - 2529 , - 4952 , - 3603 , - 1762 , - 85 , - 1852 , - 2471 , - 5222 , - 265 , - 1376 , - 3963 , - 810 , - 3069 , - 3524 , - 2831 , - 4270 , - 3249 , - 3048 , - 4323 , - 5106 , - 805 , - 5196 , - 3191 , - 3318 , - 985 , - 4720 , - 4683 , - 4154 , - 3789 , - 1620 , - 3551 , - 2366 , - 3969 , - 1144 , - 5043 , - 3202 , - 1525 , - 3292 , - 3911 , - 1414 , - 1705 , - 2816 , - 155 , - 2250 , - 4509 , - 4964 , - 4271 , - 462 , - 4689 , - 4488 , - 515 , - 1298 , - 2245 , - 1388 , - 4631 , - 4758 , - 2425 , - 912 , - 875 , - 346 , - 5229 , - 3060 , - 4991 , - 3806 , - 161 , - 2584 , - 1235 , - 4642 , - 2965 , - 4732 , - 103 , - 2854 , - 3145 , - 4256 , - 1595 , - 3690 , - 701 , - 1156 , - 463 , - 1902 , - 881 , - 680 , - 1955 , - 2738 , - 3685 , - 2828 , - 823 , - 950 , - 3865 , - 2352 , - 2315 , - 1786 , - 1421 , - 4500 , - 1183 , - 5246 , - 1601 , - 4024 , - 2675 , - 834 , - 4405 , - 924 , - 1543 , - 4294 , - 4585 , - 448 , - 3035 , - 5130 , - 2141 , - 2596 , - 1903 , - 3342 , - 2321 , - 2120 , - 3395 , - 4178 , - 5125 , - 4268 , - 2263 , - 2390 , - 57 , - 3792 , - 3755 , - 3226 , - 2861 , - 692 , - 2623 , - 1438 , - 3041 , - 216 , - 4115 , - 2274 , - 597 , - 2364 , - 2983 , - 486 , - 777 , - 1888 , - 4475 , - 1322 , - 3581 , - 4036 , - 3343 , - 4782 , - 3761 , - 3560 , - 4835 , - 370 , - 1317 , - 460 , - 3703 , - 3830 , - 1497 , - 5232 , - 5195 , - 4666 , - 4301 , - 2132 , - 4063 , - 2878 , - 4481 , - 1656 , - 307 , - 3714 , - 2037 , - 3804 , - 4423 , - 1926 , - 2217 , - 3328 , - 667 , - 2762 , - 5021 , - 228 , - 4783 , - 974 , - 5201 , - 5000 , - 1027 , - 1810 , - 2757 , - 1900 , - 5143 , - 22 , - 2937 , - 1424 , - 1387 , - 858 , - 493 , - 3572 , - 255 , - 4318 , - 673 , - 3096 , - 1747 , - 5154 , - 3477 , - 5244 , - 615 , - 3366 , - 3657 , - 4768 , - 2107 , - 4202 , - 1213 , - 1668 , - 975 , - 2414 , - 1393 , - 1192 , - 2467 , - 3250 , - 4197 , - 3340 , - 1335 , - 1462 , - 4377 , - 2864 , - 2827 , - 2298 , - 1933 , - 5012 , - 1695 , - 510 , - 2113 , - 4536 , - 3187 , - 1346 , - 4917 , - 1436 , - 2055 , - 4806 , - 5097 , - 960 , - 3547 , - 394 , - 2653 , - 3108 , - 2415 , - 3854 , - 2833 , - 2632 , - 3907 , - 4690 , - 389 , - 4780 , - 2775 , - 2902 , - 569 , - 4304 , - 4267 , - 3738 , - 3373 , - 1204 , - 3135 , - 1950 , - 3553 , - 728 , - 4627 , - 2786 , - 1109 , - 2876 , - 3495 , - 998 , - 1289 , - 2400 , - 4987 , - 1834 , - 4093 , - 4548 , - 3855 , - 46 , - 4273 , - 4072 , - 99 , - 882 , - 1829 , - 972 , - 4215 , - 4342 , - 2009 , - 496 , - 459 , - 5178 , - 4813 , - 2644 , - 4575 , - 3390 , - 4993 , - 2168 , - 819 , - 4226 , - 2549 , - 4316 , - 4935 , - 2438 , - 2729 , - 3840 , - 1179 , - 3274 , - 285 , - 740 , - 47 , - 1486 , - 465 , - 264 , - 1539 , - 2322 , - 3269 , - 2412 , - 407 , - 534 , - 3449 , - 1936 , - 1899 , - 1370 , - 1005 , - 4084 , - 767 , - 4830 , - 1185 , - 3608 , - 2259 , - 418 , - 3989 , - 508 , - 1127 , - 3878 , - 4169 , - 32 , - 2619 , - 4714 , - 1725 , - 2180 , - 1487 , - 2926 , - 1905 , - 1704 , - 2979 , - 3762 , - 4709 , - 3852 , - 1847 , - 1974 , - 4889 , - 3376 , - 3339 , - 2810 , - 2445 , - 276 , - 2207 , - 1022 , - 2625 , - 5048 , - 3699 , - 1858 , - 181 , - 1948 , - 2567 , - 70 , - 361 , - 1472 , - 4059 , - 906 , - 3165 , - 3620 , - 2927 , - 4366 , - 3345 , - 3144 , - 4419 , - 5202 , - 901 , - 44 , - 3287 , - 3414 , - 1081 , - 4816 , - 4779 , - 4250 , - 3885 , - 1716 , - 3647 , - 2462 , - 4065 , - 1240 , - 5139 , - 3298 , - 1621 , - 3388 , - 4007 , - 1510 , - 1801 , - 2912 , - 251 , - 2346 , - 4605 , - 5060 , - 4367 , - 558 , - 4785 , - 4584 , - 611 , - 1394 , - 2341 , - 1484 , - 4727 , - 4854 , - 2521 , - 1008 , - 971 , - 442 , - 77 , - 3156 , - 5087 , - 3902 , - 257 , - 2680 , - 1331 , - 4738 , - 3061 , - 4828 , - 199 , - 2950 , - 3241 , - 4352 , - 1691 , - 3786 , - 797 , - 1252 , - 559 , - 1998 , - 977 , - 776 , - 2051 , - 2834 , - 3781 , - 2924 , - 919 , - 1046 , - 3961 , - 2448 , - 2411 , - 1882 , - 1517 , - 4596 , - 1279 , - 94 , - 1697 , - 4120 , - 2771 , - 930 , - 4501 , - 1020 , - 1639 , - 4390 , - 4681 , - 544 , - 3131 , - 5226 , - 2237 , - 2692 , - 1999 , - 3438 , - 2417 , - 2216 , - 3491 , - 4274 , - 5221 , - 4364 , - 2359 , - 2486 , - 153 , - 3888 , - 3851 , - 3322 , - 2957 , - 788 , - 2719 , - 1534 , - 3137 , - 312 , - 4211 , - 2370 , - 693 , - 2460 , - 3079 , - 582 , - 873 , - 1984 , - 4571 , - 1418 , - 3677 , - 4132 , - 3439 , - 4878 , - 3857 , - 3656 , - 4931 , - 466 , - 1413 , - 556 , - 3799 , - 3926 , - 1593 , - 80 , - 43 , - 4762 , - 4397 , - 2228 , - 4159 , - 2974 , - 4577 , - 1752 , - 403 , - 3810 , - 2133 , - 3900 , - 4519 , - 2022 , - 2313 , - 3424 , - 763 , - 2858 , - 5117 , - 324 , - 4879 , - 1070 , - 49 , - 5096 , - 1123 , - 1906 , - 2853 , - 1996 , - 5239 , - 118 , - 3033 , - 1520 , - 1483 , - 954 , - 589 , - 3668 , - 351 , - 4414 , - 769 , - 3192 , - 1843 , - 2 , - 3573 , - 92 , - 711 , - 3462 , - 3753 , - 4864 , - 2203 , - 4298 , - 1309 , - 1764 , - 1071 , - 2510 , - 1489 , - 1288 , - 2563 , - 3346 , - 4293 , - 3436 , - 1431 , - 1558 , - 4473 , - 2960 , - 2923 , - 2394 , - 2029 , - 5108 , - 1791 , - 606 , - 2209 , - 4632 , - 3283 , - 1442 , - 5013 , - 1532 , - 2151 , - 4902 , - 5193 , - 1056 , - 3643 , - 490 , - 2749 , - 3204 , - 2511 , - 3950 , - 2929 , - 2728 , - 4003 , - 4786 , - 485 , - 4876 , - 2871 , - 2998 , - 665 , - 4400 , - 4363 , - 3834 , - 3469 , - 1300 , - 3231 , - 2046 , - 3649 , - 824 , - 4723 , - 2882 , - 1205 , - 2972 , - 3591 , - 1094 , - 1385 , - 2496 , - 5083 , - 1930 , - 4189 , - 4644 , - 3951 , - 142 , - 4369 , - 4168 , - 195 , - 978 , - 1925 , - 1068 , - 4311 , - 4438 , - 2105 , - 592 , - 555 , - 26 , - 4909 , - 2740 , - 4671 , - 3486 , - 5089 , - 2264 , - 915 , - 4322 , - 2645 , - 4412 , - 5031 , - 2534 , - 2825 , - 3936 , - 1275 , - 3370 , - 381 , - 836 , - 143 , - 1582 , - 561 , - 360 , - 1635 , - 2418 , - 3365 , - 2508 , - 503 , - 630 , - 3545 , - 2032 , - 1995 , - 1466 , - 1101 , - 4180 , - 863 , - 4926 , - 1281 , - 3704 , - 2355 , - 514 , - 4085 , - 604 , - 1223 , - 3974 , - 4265 , - 128 , - 2715 , - 4810 , - 1821 , - 2276 , - 1583 , - 3022 , - 2001 , - 1800 , - 3075 , - 3858 , - 4805 , - 3948 , - 1943 , - 2070 , - 4985 , - 3472 , - 3435 , - 2906 , - 2541 , - 372 , - 2303 , - 1118 , - 2721 , - 5144 , - 3795 , - 1954 , - 277 , - 2044 , - 2663 , - 166 , - 457 , - 1568 , - 4155 , - 1002 , - 3261 , - 3716 , - 3023 , - 4462 , - 3441 , - 3240 , - 4515 , - 50 , - 997 , - 140 , - 3383 , - 3510 , - 1177 , - 4912 , - 4875 , - 4346 , - 3981 , - 1812 , - 3743 , - 2558 , - 4161 , - 1336 , - 5235 , - 3394 , - 1717 , - 3484 , - 4103 , - 1606 , - 1897 , - 3008 , - 347 , - 2442 , - 4701 , - 5156 , - 4463 , - 654 , - 4881 , - 4680 , - 707 , - 1490 , - 2437 , - 1580 , - 4823 , - 4950 , - 2617 , - 1104 , - 1067 , - 538 , - 173 , - 3252 , - 5183 , - 3998 , - 353 , - 2776 , - 1427 , - 4834 , - 3157 , - 4924 , - 295 , - 3046 , - 3337 , - 4448 , - 1787 , - 3882 , - 893 , - 1348 , - 655 , - 2094 , - 1073 , - 872 , - 2147 , - 2930 , - 3877 , - 3020 , - 1015 , - 1142 , - 4057 , - 2544 , - 2507 , - 1978 , - 1613 , - 4692 , - 1375 , - 190 , - 1793 , - 4216 , - 2867 , - 1026 , - 4597 , - 1116 , - 1735 , - 4486 , - 4777 , - 640 , - 3227 , - 74 , - 2333 , - 2788 , - 2095 , - 3534 , - 2513 , - 2312 , - 3587 , - 4370 , - 69 , - 4460 , - 2455 , - 2582 , - 249 , - 3984 , - 3947 , - 3418 , - 3053 , - 884 , - 2815 , - 1630 , - 3233 , - 408 , - 4307 , - 2466 , - 789 , - 2556 , - 3175 , - 678 , - 969 , - 2080 , - 4667 , - 1514 , - 3773 , - 4228 , - 3535 , - 4974 , - 3953 , - 3752 , - 5027 , - 562 , - 1509 , - 652 , - 3895 , - 4022 , - 1689 , - 176 , - 139 , - 4858 , - 4493 , - 2324 , - 4255 , - 3070 , - 4673 , - 1848 , - 499 , - 3906 , - 2229 , - 3996 , - 4615 , - 2118 , - 2409 , - 3520 , - 859 , - 2954 , - 5213 , - 420 , - 4975 , - 1166 , - 145 , - 5192 , - 1219 , - 2002 , - 2949 , - 2092 , - 87 , - 214 , - 3129 , - 1616 , - 1579 , - 1050 , - 685 , - 3764 , - 447 , - 4510 , - 865 , - 3288 , - 1939 , - 98 , - 3669 , - 188 , - 807 , - 3558 , - 3849 , - 4960 , - 2299 , - 4394 , - 1405 , - 1860 , - 1167 , - 2606 , - 1585 , - 1384 , - 2659 , - 3442 , - 4389 , - 3532 , - 1527 , - 1654 , - 4569 , - 3056 , - 3019 , - 2490 , - 2125 , - 5204 , - 1887 , - 702 , - 2305 , - 4728 , - 3379 , - 1538 , - 5109 , - 1628 , - 2247 , - 4998 , - 41 , - 1152 , - 3739 , - 586 , - 2845 , - 3300 , - 2607 , - 4046 , - 3025 , - 2824 , - 4099 , - 4882 , - 581 , - 4972 , - 2967 , - 3094 , - 761 , - 4496 , - 4459 , - 3930 , - 3565 , - 1396 , - 3327 , - 2142 , - 3745 , - 920 , - 4819 , - 2978 , - 1301 , - 3068 , - 3687 , - 1190 , - 1481 , - 2592 , - 5179 , - 2026 , - 4285 , - 4740 , - 4047 , - 238 , - 4465 , - 4264 , - 291 , - 1074 , - 2021 , - 1164 , - 4407 , - 4534 , - 2201 , - 688 , - 651 , - 122 , - 5005 , - 2836 , - 4767 , - 3582 , - 5185 , - 2360 , - 1011 , - 4418 , - 2741 , - 4508 , - 5127 , - 2630 , - 2921 , - 4032 , - 1371 , - 3466 , - 477 , - 932 , - 239 , - 1678 , - 657 , - 456 , - 1731 , - 2514 , - 3461 , - 2604 , - 599 , - 726 , - 3641 , - 2128 , - 2091 , - 1562 , - 1197 , - 4276 , - 959 , - 5022 , - 1377 , - 3800 , - 2451 , - 610 , - 4181 , - 700 , - 1319 , - 4070 , - 4361 , - 224 , - 2811 , - 4906 , - 1917 , - 2372 , - 1679 , - 3118 , - 2097 , - 1896 , - 3171 , - 3954 , - 4901 , - 4044 , - 2039 , - 2166 , - 5081 , - 3568 , - 3531 , - 3002 , - 2637 , - 468 , - 2399 , - 1214 , - 2817 , - 5240 , - 3891 , - 2050 , - 373 , - 2140 , - 2759 , - 262 , - 553 , - 1664 , - 4251 , - 1098 , - 3357 , - 3812 , - 3119 , - 4558 , - 3537 , - 3336 , - 4611 , - 146 , - 1093 , - 236 , - 3479 , - 3606 , - 1273 , - 5008 , - 4971 , - 4442 , - 4077 , - 1908 , - 3839 , - 2654 , - 4257 , - 1432 , - 83 , - 3490 , - 1813 , - 3580 , - 4199 , - 1702 , - 1993 , - 3104 , - 443 , - 2538 , - 4797 , - 4 , - 4559 , - 750 , - 4977 , - 4776 , - 803 , - 1586 , - 2533 , - 1676 , - 4919 , - 5046 , - 2713 , - 1200 , - 1163 , - 634 , - 269 , - 3348 , - 31 , - 4094 , - 449 , - 2872 , - 1523 , - 4930 , - 3253 , - 5020 , - 391 , - 3142 , - 3433 , - 4544 , - 1883 , - 3978 , - 989 , - 1444 , - 751 , - 2190 , - 1169 , - 968 , - 2243 , - 3026 , - 3973 , - 3116 , - 1111 , - 1238 , - 4153 , - 2640 , - 2603 , - 2074 , - 1709 , - 4788 , - 1471 , - 286 , - 1889 , - 4312 , - 2963 , - 1122 , - 4693 , - 1212 , - 1831 , - 4582 , - 4873 , - 736 , - 3323 , - 170 , - 2429 , - 2884 , - 2191 , - 3630 , - 2609 , - 2408 , - 3683 , - 4466 , - 165 , - 4556 , - 2551 , - 2678 , - 345 , - 4080 , - 4043 , - 3514 , - 3149 , - 980 , - 2911 , - 1726 , - 3329 , - 504 , - 4403 , - 2562 , - 885 , - 2652 , - 3271 , - 774 , - 1065 , - 2176 , - 4763 , - 1610 , - 3869 , - 4324 , - 3631 , - 5070 , - 4049 , - 3848 , - 5123 , - 658 , - 1605 , - 748 , - 3991 , - 4118 , - 1785 , - 272 , - 235 , - 4954 , - 4589 , - 2420 , - 4351 , - 3166 , - 4769 , - 1944 , - 595 , - 4002 , - 2325 , - 4092 , - 4711 , - 2214 , - 2505 , - 3616 , - 955 , - 3050 , - 61 , - 516 , - 5071 , - 1262 , - 241 , - 40 , - 1315 , - 2098 , - 3045 , - 2188 , - 183 , - 310 , - 3225 , - 1712 , - 1675 , - 1146 , - 781 , - 3860 , - 543 , - 4606 , - 961 , - 3384 , - 2035 , - 194 , - 3765 , - 284 , - 903 , - 3654 , - 3945 , - 5056 , - 2395 , - 4490 , - 1501 , - 1956 , - 1263 , - 2702 , - 1681 , - 1480 , - 2755 , - 3538 , - 4485 , - 3628 , - 1623 , - 1750 , - 4665 , - 3152 , - 3115 , - 2586 , - 2221 , - 52 , - 1983 , - 798 , - 2401 , - 4824 , - 3475 , - 1634 , - 5205 , - 1724 , - 2343 , - 5094 , - 137 , - 1248 , - 3835 , - 682 , - 2941 , - 3396 , - 2703 , - 4142 , - 3121 , - 2920 , - 4195 , - 4978 , - 677 , - 5068 , - 3063 , - 3190 , - 857 , - 4592 , - 4555 , - 4026 , - 3661 , - 1492 , - 3423 , - 2238 , - 3841 , - 1016 , - 4915 , - 3074 , - 1397 , - 3164 , - 3783 , - 1286 , - 1577 , - 2688 , - 27 , - 2122 , - 4381 , - 4836 , - 4143 , - 334 , - 4561 , - 4360 , - 387 , - 1170 , - 2117 , - 1260 , - 4503 , - 4630 , - 2297 , - 784 , - 747 , - 218 , - 5101 , - 2932 , - 4863 , - 3678 , - 33 , - 2456 , - 1107 , - 4514 , - 2837 , - 4604 , - 5223 , - 2726 , - 3017 , - 4128 , - 1467 , - 3562 , - 573 , - 1028 , - 335 , - 1774 , - 753 , - 552 , - 1827 , - 2610 , - 3557 , - 2700 , - 695 , - 822 , - 3737 , - 2224 , - 2187 , - 1658 , - 1293 , - 4372 , - 1055 , - 5118 , - 1473 , - 3896 , - 2547 , - 706 , - 4277 , - 796 , - 1415 , - 4166 , - 4457 , - 320 , - 2907 , - 5002 , - 2013 , - 2468 , - 1775 , - 3214 , - 2193 , - 1992 , - 3267 , - 4050 , - 4997 , - 4140 , - 2135 , - 2262 , - 5177 , - 3664 , - 3627 , - 3098 , - 2733 , - 564 , - 2495 , - 1310 , - 2913 , - 88 , - 3987 , - 2146 , - 469 , - 2236 , - 2855 , - 358 , - 649 , - 1760 , - 4347 , - 1194 , - 3453 , - 3908 , - 3215 , - 4654 , - 3633 , - 3432 , - 4707 , - 242 , - 1189 , - 332 , - 3575 , - 3702 , - 1369 , - 5104 , - 5067 , - 4538 , - 4173 , - 2004 , - 3935 , - 2750 , - 4353 , - 1528 , - 179 , - 3586 , - 1909 , - 3676 , - 4295 , - 1798 , - 2089 , - 3200 , - 539 , - 2634 , - 4893 , - 100 , - 4655 , - 846 , - 5073 , - 4872 , - 899 , - 1682 , - 2629 , - 1772 , - 5015 , - 5142 , - 2809 , - 1296 , - 1259 , - 730 , - 365 , - 3444 , - 127 , - 4190 , - 545 , - 2968 , - 1619 , - 5026 , - 3349 , - 5116 , - 487 , - 3238 , - 3529 , - 4640 , - 1979 , - 4074 , - 1085 , - 1540 , - 847 , - 2286 , - 1265 , - 1064 , - 2339 , - 3122 , - 4069 , - 3212 , - 1207 , - 1334 , - 4249 , - 2736 , - 2699 , - 2170 , - 1805 , - 4884 , - 1567 , - 382 , - 1985 , - 4408 , - 3059 , - 1218 , - 4789 , - 1308 , - 1927 , - 4678 , - 4969 , - 832 , - 3419 , - 266 , - 2525 , - 2980 , - 2287 , - 3726 , - 2705 , - 2504 , - 3779 , - 4562 , - 261 , - 4652 , - 2647 , - 2774 , - 441 , - 4176 , - 4139 , - 3610 , - 3245 , - 1076 , - 3007 , - 1822 , - 3425 , - 600 , - 4499 , - 2658 , - 981 , - 2748 , - 3367 , - 870 , - 1161 , - 2272 , - 4859 , - 1706 , - 3965 , - 4420 , - 3727 , - 5166 , - 4145 , - 3944 , - 5219 , - 754 , - 1701 , - 844 , - 4087 , - 4214 , - 1881 , - 368 , - 331 , - 5050 , - 4685 , - 2516 , - 4447 , - 3262 , - 4865 , - 2040 , - 691 , - 4098 , - 2421 , - 4188 , - 4807 , - 2310 , - 2601 , - 3712 , - 1051 , - 3146 , - 157 , - 612 , - 5167 , - 1358 , - 337 , - 136 , - 1411 , - 2194 , - 3141 , - 2284 , - 279 , - 406 , - 3321 , - 1808 , - 1771 , - 1242 , - 877 , - 3956 , - 639 , - 4702 , - 1057 , - 3480 , - 2131 , - 290 , - 3861 , - 380 , - 999 , - 3750 , - 4041 , - 5152 , - 2491 , - 4586 , - 1597 , - 2052 , - 1359 , - 2798 , - 1777 , - 1576 , - 2851 , - 3634 , - 4581 , - 3724 , - 1719 , - 1846 , - 4761 , - 3248 , - 3211 , - 2682 , - 2317 , - 148 , - 2079 , - 894 , - 2497 , - 4920 , - 3571 , - 1730 , - 53 , - 1820 , - 2439 , - 5190 , - 233 , - 1344 , - 3931 , - 778 , - 3037 , - 3492 , - 2799 , - 4238 , - 3217 , - 3016 , - 4291 , - 5074 , - 773 , - 5164 , - 3159 , - 3286 , - 953 , - 4688 , - 4651 , - 4122 , - 3757 , - 1588 , - 3519 , - 2334 , - 3937 , - 1112 , - 5011 , - 3170 , - 1493 , - 3260 , - 3879 , - 1382 , - 1673 , - 2784 , - 123 , - 2218 , - 4477 , - 4932 , - 4239 , - 430 , - 4657 , - 4456 , - 483 , - 1266 , - 2213 , - 1356 , - 4599 , - 4726 , - 2393 , - 880 , - 843 , - 314 , - 5197 , - 3028 , - 4959 , - 3774 , - 129 , - 2552 , - 1203 , - 4610 , - 2933 , - 4700 , - 71 , - 2822 , - 3113 , - 4224 , - 1563 , - 3658 , - 669 , - 1124 , - 431 , - 1870 , - 849 , - 648 , - 1923 , - 2706 , - 3653 , - 2796 , - 791 , - 918 , - 3833 , - 2320 , - 2283 , - 1754 , - 1389 , - 4468 , - 1151 , - 5214 , - 1569 , - 3992 , - 2643 , - 802 , - 4373 , - 892 , - 1511 , - 4262 , - 4553 , - 416 , - 3003 , - 5098 , - 2109 , - 2564 , - 1871 , - 3310 , - 2289 , - 2088 , - 3363 , - 4146 , - 5093 , - 4236 , - 2231 , - 2358 , - 25 , - 3760 , - 3723 , - 3194 , - 2829 , - 660 , - 2591 , - 1406 , - 3009 , - 184 , - 4083 , - 2242 , - 565 , - 2332 , - 2951 , - 454 , - 745 , - 1856 , - 4443 , - 1290 , - 3549 , - 4004 , - 3311 , - 4750 , - 3729 , - 3528 , - 4803 , - 338 , - 1285 , - 428 , - 3671 , - 3798 , - 1465 , - 5200 , - 5163 , - 4634 , - 4269 , - 2100 , - 4031 , - 2846 , - 4449 , - 1624 , - 275 , - 3682 , - 2005 , - 3772 , - 4391 , - 1894 , - 2185 , - 3296 , - 635 , - 2730 , - 4989 , - 196 , - 4751 , - 942 , - 5169 , - 4968 , - 995 , - 1778 , - 2725 , - 1868 , - 5111 , - 5238 , - 2905 , - 1392 , - 1355 , - 826 , - 461 , - 3540 , - 223 , - 4286 , - 641 , - 3064 , - 1715 , - 5122 , - 3445 , - 5212 , - 583 , - 3334 , - 3625 , - 4736 , - 2075 , - 4170 , - 1181 , - 1636 , - 943 , - 2382 , - 1361 , - 1160 , - 2435 , - 3218 , - 4165 , - 3308 , - 1303 , - 1430 , - 4345 , - 2832 , - 2795 , - 2266 , - 1901 , - 4980 , - 1663 , - 478 , - 2081 , - 4504 , - 3155 , - 1314 , - 4885 , - 1404 , - 2023 , - 4774 , - 5065 , - 928 , - 3515 , - 362 , - 2621 , - 3076 , - 2383 , - 3822 , - 2801 , - 2600 , - 3875 , - 4658 , - 357 , - 4748 , - 2743 , - 2870 , - 537 , - 4272 , - 4235 , - 3706 , - 3341 , - 1172 , - 3103 , - 1918 , - 3521 , - 696 , - 4595 , - 2754 , - 1077 , - 2844 , - 3463 , - 966 , - 1257 , - 2368 , - 4955 , - 1802 , - 4061 , - 4516 , - 3823 , - 14 , - 4241 , - 4040 , - 67 , - 850 , - 1797 , - 940 , - 4183 , - 4310 , - 1977 , - 464 , - 427 , - 5146 , - 4781 , - 2612 , - 4543 , - 3358 , - 4961 , - 2136 , - 787 , - 4194 , - 2517 , - 4284 , - 4903 , - 2406 , - 2697 , - 3808 , - 1147 , - 3242 , - 253 , - 708 , - 15 , - 1454 , - 433 , - 232 , - 1507 , - 2290 , - 3237 , - 2380 , - 375 , - 502 , - 3417 , - 1904 , - 1867 , - 1338 , - 973 , - 4052 , - 735 , - 4798 , - 1153 , - 3576 , - 2227 , - 386 , - 3957 , - 476 , - 1095 , - 3846 , - 4137 , - 0 , - 1907 , - 3482 , - 3397 , - 324 , - 3559 , - 1150 , - 2393 , - 648 , - 5211 , - 4130 , - 1389 , - 972 , - 1551 , - 1798 , - 385 , - 1296 , - 3203 , - 4778 , - 4693 , - 1620 , - 4855 , - 2446 , - 3689 , - 1944 , - 1195 , - 114 , - 2685 , - 2268 , - 2847 , - 3094 , - 1681 , - 2592 , - 4499 , - 762 , - 677 , - 2916 , - 839 , - 3742 , - 4985 , - 3240 , - 2491 , - 1410 , - 3981 , - 3564 , - 4143 , - 4390 , - 2977 , - 3888 , - 483 , - 2058 , - 1973 , - 4212 , - 2135 , - 5038 , - 969 , - 4536 , - 3787 , - 2706 , - 5277 , - 4860 , - 127 , - 374 , - 4273 , - 5184 , - 1779 , - 3354 , - 3269 , - 196 , - 3431 , - 1022 , - 2265 , - 520 , - 5083 , - 4002 , - 1261 , - 844 , - 1423 , - 1670 , - 257 , - 1168 , - 3075 , - 4650 , - 4565 , - 1492 , - 4727 , - 2318 , - 3561 , - 1816 , - 1067 , - 5298 , - 2557 , - 2140 , - 2719 , - 2966 , - 1553 , - 2464 , - 4371 , - 634 , - 549 , - 2788 , - 711 , - 3614 , - 4857 , - 3112 , - 2363 , - 1282 , - 3853 , - 3436 , - 4015 , - 4262 , - 2849 , - 3760 , - 355 , - 1930 , - 1845 , - 4084 , - 2007 , - 4910 , - 841 , - 4408 , - 3659 , - 2578 , - 5149 , - 4732 , - 5311 , - 246 , - 4145 , - 5056 , - 1651 , - 3226 , - 3141 , - 68 , - 3303 , - 894 , - 2137 , - 392 , - 4955 , - 3874 , - 1133 , - 716 , - 1295 , - 1542 , - 129 , - 1040 , - 2947 , - 4522 , - 4437 , - 1364 , - 4599 , - 2190 , - 3433 , - 1688 , - 939 , - 5170 , - 2429 , - 2012 , - 2591 , - 2838 , - 1425 , - 2336 , - 4243 , - 506 , - 421 , - 2660 , - 583 , - 3486 , - 4729 , - 2984 , - 2235 , - 1154 , - 3725 , - 3308 , - 3887 , - 4134 , - 2721 , - 3632 , - 227 , - 1802 , - 1717 , - 3956 , - 1879 , - 4782 , - 713 , - 4280 , - 3531 , - 2450 , - 5021 , - 4604 , - 5183 , - 118 , - 4017 , - 4928 , - 1523 , - 3098 , - 3013 , - 5252 , - 3175 , - 766 , - 2009 , - 264 , - 4827 , - 3746 , - 1005 , - 588 , - 1167 , - 1414 , - 1 , - 912 , - 2819 , - 4394 , - 4309 , - 1236 , - 4471 , - 2062 , - 3305 , - 1560 , - 811 , - 5042 , - 2301 , - 1884 , - 2463 , - 2710 , - 1297 , - 2208 , - 4115 , - 378 , - 293 , - 2532 , - 455 , - 3358 , - 4601 , - 2856 , - 2107 , - 1026 , - 3597 , - 3180 , - 3759 , - 4006 , - 2593 , - 3504 , - 99 , - 1674 , - 1589 , - 3828 , - 1751 , - 4654 , - 585 , - 4152 , - 3403 , - 2322 , - 4893 , - 4476 , - 5055 , - 5302 , - 3889 , - 4800 , - 1395 , - 2970 , - 2885 , - 5124 , - 3047 , - 638 , - 1881 , - 136 , - 4699 , - 3618 , - 877 , - 460 , - 1039 , - 1286 , - 5185 , - 784 , - 2691 , - 4266 , - 4181 , - 1108 , - 4343 , - 1934 , - 3177 , - 1432 , - 683 , - 4914 , - 2173 , - 1756 , - 2335 , - 2582 , - 1169 , - 2080 , - 3987 , - 250 , - 165 , - 2404 , - 327 , - 3230 , - 4473 , - 2728 , - 1979 , - 898 , - 3469 , - 3052 , - 3631 , - 3878 , - 2465 , - 3376 , - 5283 , - 1546 , - 1461 , - 3700 , - 1623 , - 4526 , - 457 , - 4024 , - 3275 , - 2194 , - 4765 , - 4348 , - 4927 , - 5174 , - 3761 , - 4672 , - 1267 , - 2842 , - 2757 , - 4996 , - 2919 , - 510 , - 1753 , - 8 , - 4571 , - 3490 , - 749 , - 332 , - 911 , - 1158 , - 5057 , - 656 , - 2563 , - 4138 , - 4053 , - 980 , - 4215 , - 1806 , - 3049 , - 1304 , - 555 , - 4786 , - 2045 , - 1628 , - 2207 , - 2454 , - 1041 , - 1952 , - 3859 , - 122 , - 37 , - 2276 , - 199 , - 3102 , - 4345 , - 2600 , - 1851 , - 770 , - 3341 , - 2924 , - 3503 , - 3750 , - 2337 , - 3248 , - 5155 , - 1418 , - 1333 , - 3572 , - 1495 , - 4398 , - 329 , - 3896 , - 3147 , - 2066 , - 4637 , - 4220 , - 4799 , - 5046 , - 3633 , - 4544 , - 1139 , - 2714 , - 2629 , - 4868 , - 2791 , - 382 , - 1625 , - 5192 , - 4443 , - 3362 , - 621 , - 204 , - 783 , - 1030 , - 4929 , - 528 , - 2435 , - 4010 , - 3925 , - 852 , - 4087 , - 1678 , - 2921 , - 1176 , - 427 , - 4658 , - 1917 , - 1500 , - 2079 , - 2326 , - 913 , - 1824 , - 3731 , - 5306 , - 5221 , - 2148 , - 71 , - 2974 , - 4217 , - 2472 , - 1723 , - 642 , - 3213 , - 2796 , - 3375 , - 3622 , - 2209 , - 3120 , - 5027 , - 1290 , - 1205 , - 3444 , - 1367 , - 4270 , - 201 , - 3768 , - 3019 , - 1938 , - 4509 , - 4092 , - 4671 , - 4918 , - 3505 , - 4416 , - 1011 , - 2586 , - 2501 , - 4740 , - 2663 , - 254 , - 1497 , - 5064 , - 4315 , - 3234 , - 493 , - 76 , - 655 , - 902 , - 4801 , - 400 , - 2307 , - 3882 , - 3797 , - 724 , - 3959 , - 1550 , - 2793 , - 1048 , - 299 , - 4530 , - 1789 , - 1372 , - 1951 , - 2198 , - 785 , - 1696 , - 3603 , - 5178 , - 5093 , - 2020 , - 5255 , - 2846 , - 4089 , - 2344 , - 1595 , - 514 , - 3085 , - 2668 , - 3247 , - 3494 , - 2081 , - 2992 , - 4899 , - 1162 , - 1077 , - 3316 , - 1239 , - 4142 , - 73 , - 3640 , - 2891 , - 1810 , - 4381 , - 3964 , - 4543 , - 4790 , - 3377 , - 4288 , - 883 , - 2458 , - 2373 , - 4612 , - 2535 , - 126 , - 1369 , - 4936 , - 4187 , - 3106 , - 365 , - 5260 , - 527 , - 774 , - 4673 , - 272 , - 2179 , - 3754 , - 3669 , - 596 , - 3831 , - 1422 , - 2665 , - 920 , - 171 , - 4402 , - 1661 , - 1244 , - 1823 , - 2070 , - 657 , - 1568 , - 3475 , - 5050 , - 4965 , - 1892 , - 5127 , - 2718 , - 3961 , - 2216 , - 1467 , - 386 , - 2957 , - 2540 , - 3119 , - 3366 , - 1953 , - 2864 , - 4771 , - 1034 , - 949 , - 3188 , - 1111 , - 4014 , - 5257 , - 3512 , - 2763 , - 1682 , - 4253 , - 3836 , - 4415 , - 4662 , - 3249 , - 4160 , - 755 , - 2330 , - 2245 , - 4484 , - 2407 , - 5310 , - 1241 , - 4808 , - 4059 , - 2978 , - 237 , - 5132 , - 399 , - 646 , - 4545 , - 144 , - 2051 , - 3626 , - 3541 , - 468 , - 3703 , - 1294 , - 2537 , - 792 , - 43 , - 4274 , - 1533 , - 1116 , - 1695 , - 1942 , - 529 , - 1440 , - 3347 , - 4922 , - 4837 , - 1764 , - 4999 , - 2590 , - 3833 , - 2088 , - 1339 , - 258 , - 2829 , - 2412 , - 2991 , - 3238 , - 1825 , - 2736 , - 4643 , - 906 , - 821 , - 3060 , - 983 , - 3886 , - 5129 , - 3384 , - 2635 , - 1554 , - 4125 , - 3708 , - 4287 , - 4534 , - 3121 , - 4032 , - 627 , - 2202 , - 2117 , - 4356 , - 2279 , - 5182 , - 1113 , - 4680 , - 3931 , - 2850 , - 109 , - 5004 , - 271 , - 518 , - 4417 , - 16 , - 1923 , - 3498 , - 3413 , - 340 , - 3575 , - 1166 , - 2409 , - 664 , - 5227 , - 4146 , - 1405 , - 988 , - 1567 , - 1814 , - 401 , - 1312 , - 3219 , - 4794 , - 4709 , - 1636 , - 4871 , - 2462 , - 3705 , - 1960 , - 1211 , - 130 , - 2701 , - 2284 , - 2863 , - 3110 , - 1697 , - 2608 , - 4515 , - 778 , - 693 , - 2932 , - 855 , - 3758 , - 5001 , - 3256 , - 2507 , - 1426 , - 3997 , - 3580 , - 4159 , - 4406 , - 2993 , - 3904 , - 499 , - 2074 , - 1989 , - 4228 , - 2151 , - 5054 , - 985 , - 4552 , - 3803 , - 2722 , - 5293 , - 4876 , - 143 , - 390 , - 4289 , - 5200 , - 1795 , - 3370 , - 3285 , - 212 , - 3447 , - 1038 , - 2281 , - 536 , - 5099 , - 4018 , - 1277 , - 860 , - 1439 , - 1686 , - 273 , - 1184 , - 3091 , - 4666 , - 4581 , - 1508 , - 4743 , - 2334 , - 3577 , - 1832 , - 1083 , - 2 , - 2573 , - 2156 , - 2735 , - 2982 , - 1569 , - 2480 , - 4387 , - 650 , - 565 , - 2804 , - 727 , - 3630 , - 4873 , - 3128 , - 2379 , - 1298 , - 3869 , - 3452 , - 4031 , - 4278 , - 2865 , - 3776 , - 371 , - 1946 , - 1861 , - 4100 , - 2023 , - 4926 , - 857 , - 4424 , - 3675 , - 2594 , - 5165 , - 4748 , - 15 , - 262 , - 4161 , - 5072 , - 1667 , - 3242 , - 3157 , - 84 , - 3319 , - 910 , - 2153 , - 408 , - 4971 , - 3890 , - 1149 , - 732 , - 1311 , - 1558 , - 145 , - 1056 , - 2963 , - 4538 , - 4453 , - 1380 , - 4615 , - 2206 , - 3449 , - 1704 , - 955 , - 5186 , - 2445 , - 2028 , - 2607 , - 2854 , - 1441 , - 2352 , - 4259 , - 522 , - 437 , - 2676 , - 599 , - 3502 , - 4745 , - 3000 , - 2251 , - 1170 , - 3741 , - 3324 , - 3903 , - 4150 , - 2737 , - 3648 , - 243 , - 1818 , - 1733 , - 3972 , - 1895 , - 4798 , - 729 , - 4296 , - 3547 , - 2466 , - 5037 , - 4620 , - 5199 , - 134 , - 4033 , - 4944 , - 1539 , - 3114 , - 3029 , - 5268 , - 3191 , - 782 , - 2025 , - 280 , - 4843 , - 3762 , - 1021 , - 604 , - 1183 , - 1430 , - 17 , - 928 , - 2835 , - 4410 , - 4325 , - 1252 , - 4487 , - 2078 , - 3321 , - 1576 , - 827 , - 5058 , - 2317 , - 1900 , - 2479 , - 2726 , - 1313 , - 2224 , - 4131 , - 394 , - 309 , - 2548 , - 471 , - 3374 , - 4617 , - 2872 , - 2123 , - 1042 , - 3613 , - 3196 , - 3775 , - 4022 , - 2609 , - 3520 , - 115 , - 1690 , - 1605 , - 3844 , - 1767 , - 4670 , - 601 , - 4168 , - 3419 , - 2338 , - 4909 , - 4492 , - 5071 , - 6 , - 3905 , - 4816 , - 1411 , - 2986 , - 2901 , - 5140 , - 3063 , - 654 , - 1897 , - 152 , - 4715 , - 3634 , - 893 , - 476 , - 1055 , - 1302 , - 5201 , - 800 , - 2707 , - 4282 , - 4197 , - 1124 , - 4359 , - 1950 , - 3193 , - 1448 , - 699 , - 4930 , - 2189 , - 1772 , - 2351 , - 2598 , - 1185 , - 2096 , - 4003 , - 266 , - 181 , - 2420 , - 343 , - 3246 , - 4489 , - 2744 , - 1995 , - 914 , - 3485 , - 3068 , - 3647 , - 3894 , - 2481 , - 3392 , - 5299 , - 1562 , - 1477 , - 3716 , - 1639 , - 4542 , - 473 , - 4040 , - 3291 , - 2210 , - 4781 , - 4364 , - 4943 , - 5190 , - 3777 , - 4688 , - 1283 , - 2858 , - 2773 , - 5012 , - 2935 , - 526 , - 1769 , - 24 , - 4587 , - 3506 , - 765 , - 348 , - 927 , - 1174 , - 5073 , - 672 , - 2579 , - 4154 , - 4069 , - 996 , - 4231 , - 1822 , - 3065 , - 1320 , - 571 , - 4802 , - 2061 , - 1644 , - 2223 , - 2470 , - 1057 , - 1968 , - 3875 , - 138 , - 53 , - 2292 , - 215 , - 3118 , - 4361 , - 2616 , - 1867 , - 786 , - 3357 , - 2940 , - 3519 , - 3766 , - 2353 , - 3264 , - 5171 , - 1434 , - 1349 , - 3588 , - 1511 , - 4414 , - 345 , - 3912 , - 3163 , - 2082 , - 4653 , - 4236 , - 4815 , - 5062 , - 3649 , - 4560 , - 1155 , - 2730 , - 2645 , - 4884 , - 2807 , - 398 , - 1641 , - 5208 , - 4459 , - 3378 , - 637 , - 220 , - 799 , - 1046 , - 4945 , - 544 , - 2451 , - 4026 , - 3941 , - 868 , - 4103 , - 1694 , - 2937 , - 1192 , - 443 , - 4674 , - 1933 , - 1516 , - 2095 , - 2342 , - 929 , - 1840 , - 3747 , - 10 , - 5237 , - 2164 , - 87 , - 2990 , - 4233 , - 2488 , - 1739 , - 658 , - 3229 , - 2812 , - 3391 , - 3638 , - 2225 , - 3136 , - 5043 , - 1306 , - 1221 , - 3460 , - 1383 , - 4286 , - 217 , - 3784 , - 3035 , - 1954 , - 4525 , - 4108 , - 4687 , - 4934 , - 3521 , - 4432 , - 1027 , - 2602 , - 2517 , - 4756 , - 2679 , - 270 , - 1513 , - 5080 , - 4331 , - 3250 , - 509 , - 92 , - 671 , - 918 , - 4817 , - 416 , - 2323 , - 3898 , - 3813 , - 740 , - 3975 , - 1566 , - 2809 , - 1064 , - 315 , - 4546 , - 1805 , - 1388 , - 1967 , - 2214 , - 801 , - 1712 , - 3619 , - 5194 , - 5109 , - 2036 , - 5271 , - 2862 , - 4105 , - 2360 , - 1611 , - 530 , - 3101 , - 2684 , - 3263 , - 3510 , - 2097 , - 3008 , - 4915 , - 1178 , - 1093 , - 3332 , - 1255 , - 4158 , - 89 , - 3656 , - 2907 , - 1826 , - 4397 , - 3980 , - 4559 , - 4806 , - 3393 , - 4304 , - 899 , - 2474 , - 2389 , - 4628 , - 2551 , - 142 , - 1385 , - 4952 , - 4203 , - 3122 , - 381 , - 5276 , - 543 , - 790 , - 4689 , - 288 , - 2195 , - 3770 , - 3685 , - 612 , - 3847 , - 1438 , - 2681 , - 936 , - 187 , - 4418 , - 1677 , - 1260 , - 1839 , - 2086 , - 673 , - 1584 , - 3491 , - 5066 , - 4981 , - 1908 , - 5143 , - 2734 , - 3977 , - 2232 , - 1483 , - 402 , - 2973 , - 2556 , - 3135 , - 3382 , - 1969 , - 2880 , - 4787 , - 1050 , - 965 , - 3204 , - 1127 , - 4030 , - 5273 , - 3528 , - 2779 , - 1698 , - 4269 , - 3852 , - 4431 , - 4678 , - 3265 , - 4176 , - 771 , - 2346 , - 2261 , - 4500 , - 2423 , - 14 , - 1257 , - 4824 , - 4075 , - 2994 , - 253 , - 5148 , - 415 , - 662 , - 4561 , - 160 , - 2067 , - 3642 , - 3557 , - 484 , - 3719 , - 1310 , - 2553 , - 808 , - 59 , - 4290 , - 1549 , - 1132 , - 1711 , - 1958 , - 545 , - 1456 , - 3363 , - 4938 , - 4853 , - 1780 , - 5015 , - 2606 , - 3849 , - 2104 , - 1355 , - 274 , - 2845 , - 2428 , - 3007 , - 3254 , - 1841 , - 2752 , - 4659 , - 922 , - 837 , - 3076 , - 999 , - 3902 , - 5145 , - 3400 , - 2651 , - 1570 , - 4141 , - 3724 , - 4303 , - 4550 , - 3137 , - 4048 , - 643 , - 2218 , - 2133 , - 4372 , - 2295 , - 5198 , - 1129 , - 4696 , - 3947 , - 2866 , - 125 , - 5020 , - 287 , - 534 , - 4433 , - 32 , - 1939 , - 3514 , - 3429 , - 356 , - 3591 , - 1182 , - 2425 , - 680 , - 5243 , - 4162 , - 1421 , - 1004 , - 1583 , - 1830 , - 417 , - 1328 , - 3235 , - 4810 , - 4725 , - 1652 , - 4887 , - 2478 , - 3721 , - 1976 , - 1227 , - 146 , - 2717 , - 2300 , - 2879 , - 3126 , - 1713 , - 2624 , - 4531 , - 794 , - 709 , - 2948 , - 871 , - 3774 , - 5017 , - 3272 , - 2523 , - 1442 , - 4013 , - 3596 , - 4175 , - 4422 , - 3009 , - 3920 , - 515 , - 2090 , - 2005 , - 4244 , - 2167 , - 5070 , - 1001 , - 4568 , - 3819 , - 2738 , - 5309 , - 4892 , - 159 , - 406 , - 4305 , - 5216 , - 1811 , - 3386 , - 3301 , - 228 , - 3463 , - 1054 , - 2297 , - 552 , - 5115 , - 4034 , - 1293 , - 876 , - 1455 , - 1702 , - 289 , - 1200 , - 3107 , - 4682 , - 4597 , - 1524 , - 4759 , - 2350 , - 3593 , - 1848 , - 1099 , - 18 , - 2589 , - 2172 , - 2751 , - 2998 , - 1585 , - 2496 , - 4403 , - 666 , - 581 , - 2820 , - 743 , - 3646 , - 4889 , - 3144 , - 2395 , - 1314 , - 3885 , - 3468 , - 4047 , - 4294 , - 2881 , - 3792 , - 387 , - 1962 , - 1877 , - 4116 , - 2039 , - 4942 , - 873 , - 4440 , - 3691 , - 2610 , - 5181 , - 4764 , - 31 , - 278 , - 4177 , - 5088 , - 1683 , - 3258 , - 3173 , - 100 , - 3335 , - 926 , - 2169 , - 424 , - 4987 , - 3906 , - 1165 , - 748 , - 1327 , - 1574 , - 161 , - 1072 , - 2979 , - 4554 , - 4469 , - 1396 , - 4631 , - 2222 , - 3465 , - 1720 , - 971 , - 5202 , - 2461 , - 2044 , - 2623 , - 2870 , - 1457 , - 2368 , - 4275 , - 538 , - 453 , - 2692 , - 615 , - 3518 , - 4761 , - 3016 , - 2267 , - 1186 , - 3757 , - 3340 , - 3919 , - 4166 , - 2753 , - 3664 , - 259 , - 1834 , - 1749 , - 3988 , - 1911 , - 4814 , - 745 , - 4312 , - 3563 , - 2482 , - 5053 , - 4636 , - 5215 , - 150 , - 4049 , - 4960 , - 1555 , - 3130 , - 3045 , - 5284 , - 3207 , - 798 , - 2041 , - 296 , - 4859 , - 3778 , - 1037 , - 620 , - 1199 , - 1446 , - 33 , - 944 , - 2851 , - 4426 , - 4341 , - 1268 , - 4503 , - 2094 , - 3337 , - 1592 , - 843 , - 5074 , - 2333 , - 1916 , - 2495 , - 2742 , - 1329 , - 2240 , - 4147 , - 410 , - 325 , - 2564 , - 487 , - 3390 , - 4633 , - 2888 , - 2139 , - 1058 , - 3629 , - 3212 , - 3791 , - 4038 , - 2625 , - 3536 , - 131 , - 1706 , - 1621 , - 3860 , - 1783 , - 4686 , - 617 , - 4184 , - 3435 , - 2354 , - 4925 , - 4508 , - 5087 , - 22 , - 3921 , - 4832 , - 1427 , - 3002 , - 2917 , - 5156 , - 3079 , - 670 , - 1913 , - 168 , - 4731 , - 3650 , - 909 , - 492 , - 1071 , - 1318 , - 5217 , - 816 , - 2723 , - 4298 , - 4213 , - 1140 , - 4375 , - 1966 , - 3209 , - 1464 , - 715 , - 4946 , - 2205 , - 1788 , - 2367 , - 2614 , - 1201 , - 2112 , - 4019 , - 282 , - 197 , - 2436 , - 359 , - 3262 , - 4505 , - 2760 , - 2011 , - 930 , - 3501 , - 3084 , - 3663 , - 3910 , - 2497 , - 3408 , - 3 , - 1578 , - 1493 , - 3732 , - 1655 , - 4558 , - 489 , - 4056 , - 3307 , - 2226 , - 4797 , - 4380 , - 4959 , - 5206 , - 3793 , - 4704 , - 1299 , - 2874 , - 2789 , - 5028 , - 2951 , - 542 , - 1785 , - 40 , - 4603 , - 3522 , - 781 , - 364 , - 943 , - 1190 , - 5089 , - 688 , - 2595 , - 4170 , - 4085 , - 1012 , - 4247 , - 1838 , - 3081 , - 1336 , - 587 , - 4818 , - 2077 , - 1660 , - 2239 , - 2486 , - 1073 , - 1984 , - 3891 , - 154 , - 69 , - 2308 , - 231 , - 3134 , - 4377 , - 2632 , - 1883 , - 802 , - 3373 , - 2956 , - 3535 , - 3782 , - 2369 , - 3280 , - 5187 , - 1450 , - 1365 , - 3604 , - 1527 , - 4430 , - 361 , - 3928 , - 3179 , - 2098 , - 4669 , - 4252 , - 4831 , - 5078 , - 3665 , - 4576 , - 1171 , - 2746 , - 2661 , - 4900 , - 2823 , - 414 , - 1657 , - 5224 , - 4475 , - 3394 , - 653 , - 236 , - 815 , - 1062 , - 4961 , - 560 , - 2467 , - 4042 , - 3957 , - 884 , - 4119 , - 1710 , - 2953 , - 1208 , - 459 , - 4690 , - 1949 , - 1532 , - 2111 , - 2358 , - 945 , - 1856 , - 3763 , - 26 , - 5253 , - 2180 , - 103 , - 3006 , - 4249 , - 2504 , - 1755 , - 674 , - 3245 , - 2828 , - 3407 , - 3654 , - 2241 , - 3152 , - 5059 , - 1322 , - 1237 , - 3476 , - 1399 , - 4302 , - 233 , - 3800 , - 3051 , - 1970 , - 4541 , - 4124 , - 4703 , - 4950 , - 3537 , - 4448 , - 1043 , - 2618 , - 2533 , - 4772 , - 2695 , - 286 , - 1529 , - 5096 , - 4347 , - 3266 , - 525 , - 108 , - 687 , - 934 , - 4833 , - 432 , - 2339 , - 3914 , - 3829 , - 756 , - 3991 , - 1582 , - 2825 , - 1080 , - 331 , - 4562 , - 1821 , - 1404 , - 1983 , - 2230 , - 817 , - 1728 , - 3635 , - 5210 , - 5125 , - 2052 , - 5287 , - 2878 , - 4121 , - 2376 , - 1627 , - 546 , - 3117 , - 2700 , - 3279 , - 3526 , - 2113 , - 3024 , - 4931 , - 1194 , - 1109 , - 3348 , - 1271 , - 4174 , - 105 , - 3672 , - 2923 , - 1842 , - 4413 , - 3996 , - 4575 , - 4822 , - 3409 , - 4320 , - 915 , - 2490 , - 2405 , - 4644 , - 2567 , - 158 , - 1401 , - 4968 , - 4219 , - 3138 , - 397 , - 5292 , - 559 , - 806 , - 4705 , - 304 , - 2211 , - 3786 , - 3701 , - 628 , - 3863 , - 1454 , - 2697 , - 952 , - 203 , - 4434 , - 1693 , - 1276 , - 1855 , - 2102 , - 689 , - 1600 , - 3507 , - 5082 , - 4997 , - 1924 , - 5159 , - 2750 , - 3993 , - 2248 , - 1499 , - 418 , - 2989 , - 2572 , - 3151 , - 3398 , - 1985 , - 2896 , - 4803 , - 1066 , - 981 , - 3220 , - 1143 , - 4046 , - 5289 , - 3544 , - 2795 , - 1714 , - 4285 , - 3868 , - 4447 , - 4694 , - 3281 , - 4192 , - 787 , - 2362 , - 2277 , - 4516 , - 2439 , - 30 , - 1273 , - 4840 , - 4091 , - 3010 , - 269 , - 5164 , - 431 , - 678 , - 4577 , - 176 , - 2083 , - 3658 , - 3573 , - 500 , - 3735 , - 1326 , - 2569 , - 824 , - 75 , - 4306 , - 1565 , - 1148 , - 1727 , - 1974 , - 561 , - 1472 , - 3379 , - 4954 , - 4869 , - 1796 , - 5031 , - 2622 , - 3865 , - 2120 , - 1371 , - 290 , - 2861 , - 2444 , - 3023 , - 3270 , - 1857 , - 2768 , - 4675 , - 938 , - 853 , - 3092 , - 1015 , - 3918 , - 5161 , - 3416 , - 2667 , - 1586 , - 4157 , - 3740 , - 4319 , - 4566 , - 3153 , - 4064 , - 659 , - 2234 , - 2149 , - 4388 , - 2311 , - 5214 , - 1145 , - 4712 , - 3963 , - 2882 , - 141 , - 5036 , - 303 , - 550 , - 4449 , - 48 , - 1955 , - 3530 , - 3445 , - 372 , - 3607 , - 1198 , - 2441 , - 696 , - 5259 , - 4178 , - 1437 , - 1020 , - 1599 , - 1846 , - 433 , - 1344 , - 3251 , - 4826 , - 4741 , - 1668 , - 4903 , - 2494 , - 3737 , - 1992 , - 1243 , - 162 , - 2733 , - 2316 , - 2895 , - 3142 , - 1729 , - 2640 , - 4547 , - 810 , - 725 , - 2964 , - 887 , - 3790 , - 5033 , - 3288 , - 2539 , - 1458 , - 4029 , - 3612 , - 4191 , - 4438 , - 3025 , - 3936 , - 531 , - 2106 , - 2021 , - 4260 , - 2183 , - 5086 , - 1017 , - 4584 , - 3835 , - 2754 , - 13 , - 4908 , - 175 , - 422 , - 4321 , - 5232 , - 1827 , - 3402 , - 3317 , - 244 , - 3479 , - 1070 , - 2313 , - 568 , - 5131 , - 4050 , - 1309 , - 892 , - 1471 , - 1718 , - 305 , - 1216 , - 3123 , - 4698 , - 4613 , - 1540 , - 4775 , - 2366 , - 3609 , - 1864 , - 1115 , - 34 , - 2605 , - 2188 , - 2767 , - 3014 , - 1601 , - 2512 , - 4419 , - 682 , - 597 , - 2836 , - 759 , - 3662 , - 4905 , - 3160 , - 2411 , - 1330 , - 3901 , - 3484 , - 4063 , - 4310 , - 2897 , - 3808 , - 403 , - 1978 , - 1893 , - 4132 , - 2055 , - 4958 , - 889 , - 4456 , - 3707 , - 2626 , - 5197 , - 4780 , - 47 , - 294 , - 4193 , - 5104 , - 1699 , - 3274 , - 3189 , - 116 , - 3351 , - 942 , - 2185 , - 440 , - 5003 , - 3922 , - 1181 , - 764 , - 1343 , - 1590 , - 177 , - 1088 , - 2995 , - 4570 , - 4485 , - 1412 , - 4647 , - 2238 , - 3481 , - 1736 , - 987 , - 5218 , - 2477 , - 2060 , - 2639 , - 2886 , - 1473 , - 2384 , - 4291 , - 554 , - 469 , - 2708 , - 631 , - 3534 , - 4777 , - 3032 , - 2283 , - 1202 , - 3773 , - 3356 , - 3935 , - 4182 , - 2769 , - 3680 , - 275 , - 1850 , - 1765 , - 4004 , - 1927 , - 4830 , - 761 , - 4328 , - 3579 , - 2498 , - 5069 , - 4652 , - 5231 , - 166 , - 4065 , - 4976 , - 1571 , - 3146 , - 3061 , - 5300 , - 3223 , - 814 , - 2057 , - 312 , - 4875 , - 3794 , - 1053 , - 636 , - 1215 , - 1462 , - 49 , - 960 , - 2867 , - 4442 , - 4357 , - 1284 , - 4519 , - 2110 , - 3353 , - 1608 , - 859 , - 5090 , - 2349 , - 1932 , - 2511 , - 2758 , - 1345 , - 2256 , - 4163 , - 426 , - 341 , - 2580 , - 503 , - 3406 , - 4649 , - 2904 , - 2155 , - 1074 , - 3645 , - 3228 , - 3807 , - 4054 , - 2641 , - 3552 , - 147 , - 1722 , - 1637 , - 3876 , - 1799 , - 4702 , - 633 , - 4200 , - 3451 , - 2370 , - 4941 , - 4524 , - 5103 , - 38 , - 3937 , - 4848 , - 1443 , - 3018 , - 2933 , - 5172 , - 3095 , - 686 , - 1929 , - 184 , - 4747 , - 3666 , - 925 , - 508 , - 1087 , - 1334 , - 5233 , - 832 , - 2739 , - 4314 , - 4229 , - 1156 , - 4391 , - 1982 , - 3225 , - 1480 , - 731 , - 4962 , - 2221 , - 1804 , - 2383 , - 2630 , - 1217 , - 2128 , - 4035 , - 298 , - 213 , - 2452 , - 375 , - 3278 , - 4521 , - 2776 , - 2027 , - 946 , - 3517 , - 3100 , - 3679 , - 3926 , - 2513 , - 3424 , - 19 , - 1594 , - 1509 , - 3748 , - 1671 , - 4574 , - 505 , - 4072 , - 3323 , - 2242 , - 4813 , - 4396 , - 4975 , - 5222 , - 3809 , - 4720 , - 1315 , - 2890 , - 2805 , - 5044 , - 2967 , - 558 , - 1801 , - 56 , - 4619 , - 3538 , - 797 , - 380 , - 959 , - 1206 , - 5105 , - 704 , - 2611 , - 4186 , - 4101 , - 1028 , - 4263 , - 1854 , - 3097 , - 1352 , - 603 , - 4834 , - 2093 , - 1676 , - 2255 , - 2502 , - 1089 , - 2000 , - 3907 , - 170 , - 85 , - 2324 , - 247 , - 3150 , - 4393 , - 2648 , - 1899 , - 818 , - 3389 , - 2972 , - 3551 , - 3798 , - 2385 , - 3296 , - 5203 , - 1466 , - 1381 , - 3620 , - 1543 , - 4446 , - 377 , - 3944 , - 3195 , - 2114 , - 4685 , - 4268 , - 4847 , - 5094 , - 3681 , - 4592 , - 1187 , - 2762 , - 2677 , - 4916 , - 2839 , - 430 , - 1673 , - 5240 , - 4491 , - 3410 , - 669 , - 252 , - 831 , - 1078 , - 4977 , - 576 , - 2483 , - 4058 , - 3973 , - 900 , - 4135 , - 1726 , - 2969 , - 1224 , - 475 , - 4706 , - 1965 , - 1548 , - 2127 , - 2374 , - 961 , - 1872 , - 3779 , - 42 , - 5269 , - 2196 , - 119 , - 3022 , - 4265 , - 2520 , - 1771 , - 690 , - 3261 , - 2844 , - 3423 , - 3670 , - 2257 , - 3168 , - 5075 , - 1338 , - 1253 , - 3492 , - 1415 , - 4318 , - 249 , - 3816 , - 3067 , - 1986 , - 4557 , - 4140 , - 4719 , - 4966 , - 3553 , - 4464 , - 1059 , - 2634 , - 2549 , - 4788 , - 2711 , - 302 , - 1545 , - 5112 , - 4363 , - 3282 , - 541 , - 124 , - 703 , - 950 , - 4849 , - 448 , - 2355 , - 3930 , - 3845 , - 772 , - 4007 , - 1598 , - 2841 , - 1096 , - 347 , - 4578 , - 1837 , - 1420 , - 1999 , - 2246 , - 833 , - 1744 , - 3651 , - 5226 , - 5141 , - 2068 , - 5303 , - 2894 , - 4137 , - 2392 , - 1643 , - 562 , - 3133 , - 2716 , - 3295 , - 3542 , - 2129 , - 3040 , - 4947 , - 1210 , - 1125 , - 3364 , - 1287 , - 4190 , - 121 , - 3688 , - 2939 , - 1858 , - 4429 , - 4012 , - 4591 , - 4838 , - 3425 , - 4336 , - 931 , - 2506 , - 2421 , - 4660 , - 2583 , - 174 , - 1417 , - 4984 , - 4235 , - 3154 , - 413 , - 5308 , - 575 , - 822 , - 4721 , - 320 , - 2227 , - 3802 , - 3717 , - 644 , - 3879 , - 1470 , - 2713 , - 968 , - 219 , - 4450 , - 1709 , - 1292 , - 1871 , - 2118 , - 705 , - 1616 , - 3523 , - 5098 , - 5013 , - 1940 , - 5175 , - 2766 , - 4009 , - 2264 , - 1515 , - 434 , - 3005 , - 2588 , - 3167 , - 3414 , - 2001 , - 2912 , - 4819 , - 1082 , - 997 , - 3236 , - 1159 , - 4062 , - 5305 , - 3560 , - 2811 , - 1730 , - 4301 , - 3884 , - 4463 , - 4710 , - 3297 , - 4208 , - 803 , - 2378 , - 2293 , - 4532 , - 2455 , - 46 , - 1289 , - 4856 , - 4107 , - 3026 , - 285 , - 5180 , - 447 , - 694 , - 4593 , - 192 , - 2099 , - 3674 , - 3589 , - 516 , - 3751 , - 1342 , - 2585 , - 840 , - 91 , - 4322 , - 1581 , - 1164 , - 1743 , - 1990 , - 577 , - 1488 , - 3395 , - 4970 , - 4885 , - 1812 , - 5047 , - 2638 , - 3881 , - 2136 , - 1387 , - 306 , - 2877 , - 2460 , - 3039 , - 3286 , - 1873 , - 2784 , - 4691 , - 954 , - 869 , - 3108 , - 1031 , - 3934 , - 5177 , - 3432 , - 2683 , - 1602 , - 4173 , - 3756 , - 4335 , - 4582 , - 3169 , - 4080 , - 675 , - 2250 , - 2165 , - 4404 , - 2327 , - 5230 , - 1161 , - 4728 , - 3979 , - 2898 , - 157 , - 5052 , - 319 , - 566 , - 4465 , - 64 , - 1971 , - 3546 , - 3461 , - 388 , - 3623 , - 1214 , - 2457 , - 712 , - 5275 , - 4194 , - 1453 , - 1036 , - 1615 , - 1862 , - 449 , - 1360 , - 3267 , - 4842 , - 4757 , - 1684 , - 4919 , - 2510 , - 3753 , - 2008 , - 1259 , - 178 , - 2749 , - 2332 , - 2911 , - 3158 , - 1745 , - 2656 , - 4563 , - 826 , - 741 , - 2980 , - 903 , - 3806 , - 5049 , - 3304 , - 2555 , - 1474 , - 4045 , - 3628 , - 4207 , - 4454 , - 3041 , - 3952 , - 547 , - 2122 , - 2037 , - 4276 , - 2199 , - 5102 , - 1033 , - 4600 , - 3851 , - 2770 , - 29 , - 4924 , - 191 , - 438 , - 4337 , - 5248 , - 1843 , - 3418 , - 3333 , - 260 , - 3495 , - 1086 , - 2329 , - 584 , - 5147 , - 4066 , - 1325 , - 908 , - 1487 , - 1734 , - 321 , - 1232 , - 3139 , - 4714 , - 4629 , - 1556 , - 4791 , - 2382 , - 3625 , - 1880 , - 1131 , - 50 , - 2621 , - 2204 , - 2783 , - 3030 , - 1617 , - 2528 , - 4435 , - 698 , - 613 , - 2852 , - 775 , - 3678 , - 4921 , - 3176 , - 2427 , - 1346 , - 3917 , - 3500 , - 4079 , - 4326 , - 2913 , - 3824 , - 419 , - 1994 , - 1909 , - 4148 , - 2071 , - 4974 , - 905 , - 4472 , - 3723 , - 2642 , - 5213 , - 4796 , - 63 , - 310 , - 4209 , - 5120 , - 1715 , - 3290 , - 3205 , - 132 , - 3367 , - 958 , - 2201 , - 456 , - 5019 , - 3938 , - 1197 , - 780 , - 1359 , - 1606 , - 193 , - 1104 , - 3011 , - 4586 , - 4501 , - 1428 , - 4663 , - 2254 , - 3497 , - 1752 , - 1003 , - 5234 , - 2493 , - 2076 , - 2655 , - 2902 , - 1489 , - 2400 , - 4307 , - 570 , - 485 , - 2724 , - 647 , - 3550 , - 4793 , - 3048 , - 2299 , - 1218 , - 3789 , - 3372 , - 3951 , - 4198 , - 2785 , - 3696 , - 291 , - 1866 , - 1781 , - 4020 , - 1943 , - 4846 , - 777 , - 4344 , - 3595 , - 2514 , - 5085 , - 4668 , - 5247 , - 182 , - 4081 , - 4992 , - 1587 , - 3162 , - 3077 , - 4 , - 3239 , - 830 , - 2073 , - 328 , - 4891 , - 3810 , - 1069 , - 652 , - 1231 , - 1478 , - 65 , - 976 , - 2883 , - 4458 , - 4373 , - 1300 , - 4535 , - 2126 , - 3369 , - 1624 , - 875 , - 5106 , - 2365 , - 1948 , - 2527 , - 2774 , - 1361 , - 2272 , - 4179 , - 442 , - 357 , - 2596 , - 519 , - 3422 , - 4665 , - 2920 , - 2171 , - 1090 , - 3661 , - 3244 , - 3823 , - 4070 , - 2657 , - 3568 , - 163 , - 1738 , - 1653 , - 3892 , - 1815 , - 4718 , - 649 , - 4216 , - 3467 , - 2386 , - 4957 , - 4540 , - 5119 , - 54 , - 3953 , - 4864 , - 1459 , - 3034 , - 2949 , - 5188 , - 3111 , - 702 , - 1945 , - 200 , - 4763 , - 3682 , - 941 , - 524 , - 1103 , - 1350 , - 5249 , - 848 , - 2755 , - 4330 , - 4245 , - 1172 , - 4407 , - 1998 , - 3241 , - 1496 , - 747 , - 4978 , - 2237 , - 1820 , - 2399 , - 2646 , - 1233 , - 2144 , - 4051 , - 314 , - 229 , - 2468 , - 391 , - 3294 , - 4537 , - 2792 , - 2043 , - 962 , - 3533 , - 3116 , - 3695 , - 3942 , - 2529 , - 3440 , - 35 , - 1610 , - 1525 , - 3764 , - 1687 , - 4590 , - 521 , - 4088 , - 3339 , - 2258 , - 4829 , - 4412 , - 4991 , - 5238 , - 3825 , - 4736 , - 1331 , - 2906 , - 2821 , - 5060 , - 2983 , - 574 , - 1817 , - 72 , - 4635 , - 3554 , - 813 , - 396 , - 975 , - 1222 , - 5121 , - 720 , - 2627 , - 4202 , - 4117 , - 1044 , - 4279 , - 1870 , - 3113 , - 1368 , - 619 , - 4850 , - 2109 , - 1692 , - 2271 , - 2518 , - 1105 , - 2016 , - 3923 , - 186 , - 101 , - 2340 , - 263 , - 3166 , - 4409 , - 2664 , - 1915 , - 834 , - 3405 , - 2988 , - 3567 , - 3814 , - 2401 , - 3312 , - 5219 , - 1482 , - 1397 , - 3636 , - 1559 , - 4462 , - 393 , - 3960 , - 3211 , - 2130 , - 4701 , - 4284 , - 4863 , - 5110 , - 3697 , - 4608 , - 1203 , - 2778 , - 2693 , - 4932 , - 2855 , - 446 , - 1689 , - 5256 , - 4507 , - 3426 , - 685 , - 268 , - 847 , - 1094 , - 4993 , - 592 , - 2499 , - 4074 , - 3989 , - 916 , - 4151 , - 1742 , - 2985 , - 1240 , - 491 , - 4722 , - 1981 , - 1564 , - 2143 , - 2390 , - 977 , - 1888 , - 3795 , - 58 , - 5285 , - 2212 , - 135 , - 3038 , - 4281 , - 2536 , - 1787 , - 706 , - 3277 , - 2860 , - 3439 , - 3686 , - 2273 , - 3184 , - 5091 , - 1354 , - 1269 , - 3508 , - 1431 , - 4334 , - 265 , - 3832 , - 3083 , - 2002 , - 4573 , - 4156 , - 4735 , - 4982 , - 3569 , - 4480 , - 1075 , - 2650 , - 2565 , - 4804 , - 2727 , - 318 , - 1561 , - 5128 , - 4379 , - 3298 , - 557 , - 140 , - 719 , - 966 , - 4865 , - 464 , - 2371 , - 3946 , - 3861 , - 788 , - 4023 , - 1614 , - 2857 , - 1112 , - 363 , - 4594 , - 1853 , - 1436 , - 2015 , - 2262 , - 849 , - 1760 , - 3667 , - 5242 , - 5157 , - 2084 , - 7 , - 2910 , - 4153 , - 2408 , - 1659 , - 578 , - 3149 , - 2732 , - 3311 , - 3558 , - 2145 , - 3056 , - 4963 , - 1226 , - 1141 , - 3380 , - 1303 , - 4206 , - 137 , - 3704 , - 2955 , - 1874 , - 4445 , - 4028 , - 4607 , - 4854 , - 3441 , - 4352 , - 947 , - 2522 , - 2437 , - 4676 , - 2599 , - 190 , - 1433 , - 5000 , - 4251 , - 3170 , - 429 , - 12 , - 591 , - 838 , - 4737 , - 336 , - 2243 , - 3818 , - 3733 , - 660 , - 3895 , - 1486 , - 2729 , - 984 , - 235 , - 4466 , - 1725 , - 1308 , - 1887 , - 2134 , - 721 , - 1632 , - 3539 , - 5114 , - 5029 , - 1956 , - 5191 , - 2782 , - 4025 , - 2280 , - 1531 , - 450 , - 3021 , - 2604 , - 3183 , - 3430 , - 2017 , - 2928 , - 4835 , - 1098 , - 1013 , - 3252 , - 1175 , - 4078 , - 9 , - 3576 , - 2827 , - 1746 , - 4317 , - 3900 , - 4479 , - 4726 , - 3313 , - 4224 , - 819 , - 2394 , - 2309 , - 4548 , - 2471 , - 62 , - 1305 , - 4872 , - 4123 , - 3042 , - 301 , - 5196 , - 463 , - 710 , - 4609 , - 208 , - 2115 , - 3690 , - 3605 , - 532 , - 3767 , - 1358 , - 2601 , - 856 , - 107 , - 4338 , - 1597 , - 1180 , - 1759 , - 2006 , - 593 , - 1504 , - 3411 , - 4986 , - 4901 , - 1828 , - 5063 , - 2654 , - 3897 , - 2152 , - 1403 , - 322 , - 2893 , - 2476 , - 3055 , - 3302 , - 1889 , - 2800 , - 4707 , - 970 , - 885 , - 3124 , - 1047 , - 3950 , - 5193 , - 3448 , - 2699 , - 1618 , - 4189 , - 3772 , - 4351 , - 4598 , - 3185 , - 4096 , - 691 , - 2266 , - 2181 , - 4420 , - 2343 , - 5246 , - 1177 , - 4744 , - 3995 , - 2914 , - 173 , - 5068 , - 335 , - 582 , - 4481 , - 80 , - 1987 , - 3562 , - 3477 , - 404 , - 3639 , - 1230 , - 2473 , - 728 , - 5291 , - 4210 , - 1469 , - 1052 , - 1631 , - 1878 , - 465 , - 1376 , - 3283 , - 4858 , - 4773 , - 1700 , - 4935 , - 2526 , - 3769 , - 2024 , - 1275 , - 194 , - 2765 , - 2348 , - 2927 , - 3174 , - 1761 , - 2672 , - 4579 , - 842 , - 757 , - 2996 , - 919 , - 3822 , - 5065 , - 3320 , - 2571 , - 1490 , - 4061 , - 3644 , - 4223 , - 4470 , - 3057 , - 3968 , - 563 , - 2138 , - 2053 , - 4292 , - 2215 , - 5118 , - 1049 , - 4616 , - 3867 , - 2786 , - 45 , - 4940 , - 207 , - 454 , - 4353 , - 5264 , - 1859 , - 3434 , - 3349 , - 276 , - 3511 , - 1102 , - 2345 , - 600 , - 5163 , - 4082 , - 1341 , - 924 , - 1503 , - 1750 , - 337 , - 1248 , - 3155 , - 4730 , - 4645 , - 1572 , - 4807 , - 2398 , - 3641 , - 1896 , - 1147 , - 66 , - 2637 , - 2220 , - 2799 , - 3046 , - 1633 , - 2544 , - 4451 , - 714 , - 629 , - 2868 , - 791 , - 3694 , - 4937 , - 3192 , - 2443 , - 1362 , - 3933 , - 3516 , - 4095 , - 4342 , - 2929 , - 3840 , - 435 , - 2010 , - 1925 , - 4164 , - 2087 , - 4990 , - 921 , - 4488 , - 3739 , - 2658 , - 5229 , - 4812 , - 79 , - 326 , - 4225 , - 5136 , - 1731 , - 3306 , - 3221 , - 148 , - 3383 , - 974 , - 2217 , - 472 , - 5035 , - 3954 , - 1213 , - 796 , - 1375 , - 1622 , - 209 , - 1120 , - 3027 , - 4602 , - 4517 , - 1444 , - 4679 , - 2270 , - 3513 , - 1768 , - 1019 , - 5250 , - 2509 , - 2092 , - 2671 , - 2918 , - 1505 , - 2416 , - 4323 , - 586 , - 501 , - 2740 , - 663 , - 3566 , - 4809 , - 3064 , - 2315 , - 1234 , - 3805 , - 3388 , - 3967 , - 4214 , - 2801 , - 3712 , - 307 , - 1882 , - 1797 , - 4036 , - 1959 , - 4862 , - 793 , - 4360 , - 3611 , - 2530 , - 5101 , - 4684 , - 5263 , - 198 , - 4097 , - 5008 , - 1603 , - 3178 , - 3093 , - 20 , - 3255 , - 846 , - 2089 , - 344 , - 4907 , - 3826 , - 1085 , - 668 , - 1247 , - 1494 , - 81 , - 992 , - 2899 , - 4474 , - 4389 , - 1316 , - 4551 , - 2142 , - 3385 , - 1640 , - 891 , - 5122 , - 2381 , - 1964 , - 2543 , - 2790 , - 1377 , - 2288 , - 4195 , - 458 , - 373 , - 2612 , - 535 , - 3438 , - 4681 , - 2936 , - 2187 , - 1106 , - 3677 , - 3260 , - 3839 , - 4086 , - 2673 , - 3584 , - 179 , - 1754 , - 1669 , - 3908 , - 1831 , - 4734 , - 665 , - 4232 , - 3483 , - 2402 , - 4973 , - 4556 , - 5135 , - 70 , - 3969 , - 4880 , - 1475 , - 3050 , - 2965 , - 5204 , - 3127 , - 718 , - 1961 , - 216 , - 4779 , - 3698 , - 957 , - 540 , - 1119 , - 1366 , - 5265 , - 864 , - 2771 , - 4346 , - 4261 , - 1188 , - 4423 , - 2014 , - 3257 , - 1512 , - 763 , - 4994 , - 2253 , - 1836 , - 2415 , - 2662 , - 1249 , - 2160 , - 4067 , - 330 , - 245 , - 2484 , - 407 , - 3310 , - 4553 , - 2808 , - 2059 , - 978 , - 3549 , - 3132 , - 3711 , - 3958 , - 2545 , - 3456 , - 51 , - 1626 , - 1541 , - 3780 , - 1703 , - 4606 , - 537 , - 4104 , - 3355 , - 2274 , - 4845 , - 4428 , - 5007 , - 5254 , - 3841 , - 4752 , - 1347 , - 2922 , - 2837 , - 5076 , - 2999 , - 590 , - 1833 , - 88 , - 4651 , - 3570 , - 829 , - 412 , - 991 , - 1238 , - 5137 , - 736 , - 2643 , - 4218 , - 4133 , - 1060 , - 4295 , - 1886 , - 3129 , - 1384 , - 635 , - 4866 , - 2125 , - 1708 , - 2287 , - 2534 , - 1121 , - 2032 , - 3939 , - 202 , - 117 , - 2356 , - 279 , - 3182 , - 4425 , - 2680 , - 1931 , - 850 , - 3421 , - 3004 , - 3583 , - 3830 , - 2417 , - 3328 , - 5235 , - 1498 , - 1413 , - 3652 , - 1575 , - 4478 , - 409 , - 3976 , - 3227 , - 2146 , - 4717 , - 4300 , - 4879 , - 5126 , - 3713 , - 4624 , - 1219 , - 2794 , - 2709 , - 4948 , - 2871 , - 462 , - 1705 , - 5272 , - 4523 , - 3442 , - 701 , - 284 , - 863 , - 1110 , - 5009 , - 608 , - 2515 , - 4090 , - 4005 , - 932 , - 4167 , - 1758 , - 3001 , - 1256 , - 507 , - 4738 , - 1997 , - 1580 , - 2159 , - 2406 , - 993 , - 1904 , - 3811 , - 74 , - 5301 , - 2228 , - 151 , - 3054 , - 4297 , - 2552 , - 1803 , - 722 , - 3293 , - 2876 , - 3455 , - 3702 , - 2289 , - 3200 , - 5107 , - 1370 , - 1285 , - 3524 , - 1447 , - 4350 , - 281 , - 3848 , - 3099 , - 2018 , - 4589 , - 4172 , - 4751 , - 4998 , - 3585 , - 4496 , - 1091 , - 2666 , - 2581 , - 4820 , - 2743 , - 334 , - 1577 , - 5144 , - 4395 , - 3314 , - 573 , - 156 , - 735 , - 982 , - 4881 , - 480 , - 2387 , - 3962 , - 3877 , - 804 , - 4039 , - 1630 , - 2873 , - 1128 , - 379 , - 4610 , - 1869 , - 1452 , - 2031 , - 2278 , - 865 , - 1776 , - 3683 , - 5258 , - 5173 , - 2100 , - 23 , - 2926 , - 4169 , - 2424 , - 1675 , - 594 , - 3165 , - 2748 , - 3327 , - 3574 , - 2161 , - 3072 , - 4979 , - 1242 , - 1157 , - 3396 , - 1319 , - 4222 , - 153 , - 3720 , - 2971 , - 1890 , - 4461 , - 4044 , - 4623 , - 4870 , - 3457 , - 4368 , - 963 , - 2538 , - 2453 , - 4692 , - 2615 , - 206 , - 1449 , - 5016 , - 4267 , - 3186 , - 445 , - 28 , - 607 , - 854 , - 4753 , - 352 , - 2259 , - 3834 , - 3749 , - 676 , - 3911 , - 1502 , - 2745 , - 1000 , - 251 , - 4482 , - 1741 , - 1324 , - 1903 , - 2150 , - 737 , - 1648 , - 3555 , - 5130 , - 5045 , - 1972 , - 5207 , - 2798 , - 4041 , - 2296 , - 1547 , - 466 , - 3037 , - 2620 , - 3199 , - 3446 , - 2033 , - 2944 , - 4851 , - 1114 , - 1029 , - 3268 , - 1191 , - 4094 , - 25 , - 3592 , - 2843 , - 1762 , - 4333 , - 3916 , - 4495 , - 4742 , - 3329 , - 4240 , - 835 , - 2410 , - 2325 , - 4564 , - 2487 , - 78 , - 1321 , - 4888 , - 4139 , - 3058 , - 317 , - 5212 , - 479 , - 726 , - 4625 , - 224 , - 2131 , - 3706 , - 3621 , - 548 , - 3783 , - 1374 , - 2617 , - 872 , - 123 , - 4354 , - 1613 , - 1196 , - 1775 , - 2022 , - 609 , - 1520 , - 3427 , - 5002 , - 4917 , - 1844 , - 5079 , - 2670 , - 3913 , - 2168 , - 1419 , - 338 , - 2909 , - 2492 , - 3071 , - 3318 , - 1905 , - 2816 , - 4723 , - 986 , - 901 , - 3140 , - 1063 , - 3966 , - 5209 , - 3464 , - 2715 , - 1634 , - 4205 , - 3788 , - 4367 , - 4614 , - 3201 , - 4112 , - 707 , - 2282 , - 2197 , - 4436 , - 2359 , - 5262 , - 1193 , - 4760 , - 4011 , - 2930 , - 189 , - 5084 , - 351 , - 598 , - 4497 , - 96 , - 2003 , - 3578 , - 3493 , - 420 , - 3655 , - 1246 , - 2489 , - 744 , - 5307 , - 4226 , - 1485 , - 1068 , - 1647 , - 1894 , - 481 , - 1392 , - 3299 , - 4874 , - 4789 , - 1716 , - 4951 , - 2542 , - 3785 , - 2040 , - 1291 , - 210 , - 2781 , - 2364 , - 2943 , - 3190 , - 1777 , - 2688 , - 4595 , - 858 , - 773 , - 3012 , - 935 , - 3838 , - 5081 , - 3336 , - 2587 , - 1506 , - 4077 , - 3660 , - 4239 , - 4486 , - 3073 , - 3984 , - 579 , - 2154 , - 2069 , - 4308 , - 2231 , - 5134 , - 1065 , - 4632 , - 3883 , - 2802 , - 61 , - 4956 , - 223 , - 470 , - 4369 , - 5280 , - 1875 , - 3450 , - 3365 , - 292 , - 3527 , - 1118 , - 2361 , - 616 , - 5179 , - 4098 , - 1357 , - 940 , - 1519 , - 1766 , - 353 , - 1264 , - 3171 , - 4746 , - 4661 , - 1588 , - 4823 , - 2414 , - 3657 , - 1912 , - 1163 , - 82 , - 2653 , - 2236 , - 2815 , - 3062 , - 1649 , - 2560 , - 4467 , - 730 , - 645 , - 2884 , - 807 , - 3710 , - 4953 , - 3208 , - 2459 , - 1378 , - 3949 , - 3532 , - 4111 , - 4358 , - 2945 , - 3856 , - 451 , - 2026 , - 1941 , - 4180 , - 2103 , - 5006 , - 937 , - 4504 , - 3755 , - 2674 , - 5245 , - 4828 , - 95 , - 342 , - 4241 , - 5152 , - 1747 , - 3322 , - 3237 , - 164 , - 3399 , - 990 , - 2233 , - 488 , - 5051 , - 3970 , - 1229 , - 812 , - 1391 , - 1638 , - 225 , - 1136 , - 3043 , - 4618 , - 4533 , - 1460 , - 4695 , - 2286 , - 3529 , - 1784 , - 1035 , - 5266 , - 2525 , - 2108 , - 2687 , - 2934 , - 1521 , - 2432 , - 4339 , - 602 , - 517 , - 2756 , - 679 , - 3582 , - 4825 , - 3080 , - 2331 , - 1250 , - 3821 , - 3404 , - 3983 , - 4230 , - 2817 , - 3728 , - 323 , - 1898 , - 1813 , - 4052 , - 1975 , - 4878 , - 809 , - 4376 , - 3627 , - 2546 , - 5117 , - 4700 , - 5279 , - 214 , - 4113 , - 5024 , - 1619 , - 3194 , - 3109 , - 36 , - 3271 , - 862 , - 2105 , - 360 , - 4923 , - 3842 , - 1101 , - 684 , - 1263 , - 1510 , - 97 , - 1008 , - 2915 , - 4490 , - 4405 , - 1332 , - 4567 , - 2158 , - 3401 , - 1656 , - 907 , - 5138 , - 2397 , - 1980 , - 2559 , - 2806 , - 1393 , - 2304 , - 4211 , - 474 , - 389 , - 2628 , - 551 , - 3454 , - 4697 , - 2952 , - 2203 , - 1122 , - 3693 , - 3276 , - 3855 , - 4102 , - 2689 , - 3600 , - 195 , - 1770 , - 1685 , - 3924 , - 1847 , - 4750 , - 681 , - 4248 , - 3499 , - 2418 , - 4989 , - 4572 , - 5151 , - 86 , - 3985 , - 4896 , - 1491 , - 3066 , - 2981 , - 5220 , - 3143 , - 734 , - 1977 , - 232 , - 4795 , - 3714 , - 973 , - 556 , - 1135 , - 1382 , - 5281 , - 880 , - 2787 , - 4362 , - 4277 , - 1204 , - 4439 , - 2030 , - 3273 , - 1528 , - 779 , - 5010 , - 2269 , - 1852 , - 2431 , - 2678 , - 1265 , - 2176 , - 4083 , - 346 , - 261 , - 2500 , - 423 , - 3326 , - 4569 , - 2824 , - 2075 , - 994 , - 3565 , - 3148 , - 3727 , - 3974 , - 2561 , - 3472 , - 67 , - 1642 , - 1557 , - 3796 , - 1719 , - 4622 , - 553 , - 4120 , - 3371 , - 2290 , - 4861 , - 4444 , - 5023 , - 5270 , - 3857 , - 4768 , - 1363 , - 2938 , - 2853 , - 5092 , - 3015 , - 606 , - 1849 , - 104 , - 4667 , - 3586 , - 845 , - 428 , - 1007 , - 1254 , - 5153 , - 752 , - 2659 , - 4234 , - 4149 , - 1076 , - 4311 , - 1902 , - 3145 , - 1400 , - 651 , - 4882 , - 2141 , - 1724 , - 2303 , - 2550 , - 1137 , - 2048 , - 3955 , - 218 , - 133 , - 2372 , - 295 , - 3198 , - 4441 , - 2696 , - 1947 , - 866 , - 3437 , - 3020 , - 3599 , - 3846 , - 2433 , - 3344 , - 5251 , - 1514 , - 1429 , - 3668 , - 1591 , - 4494 , - 425 , - 3992 , - 3243 , - 2162 , - 4733 , - 4316 , - 4895 , - 5142 , - 3729 , - 4640 , - 1235 , - 2810 , - 2725 , - 4964 , - 2887 , - 478 , - 1721 , - 5288 , - 4539 , - 3458 , - 717 , - 300 , - 879 , - 1126 , - 5025 , - 624 , - 2531 , - 4106 , - 4021 , - 948 , - 4183 , - 1774 , - 3017 , - 1272 , - 523 , - 4754 , - 2013 , - 1596 , - 2175 , - 2422 , - 1009 , - 1920 , - 3827 , - 90 , - 5 , - 2244 , - 167 , - 3070 , - 4313 , - 2568 , - 1819 , - 738 , - 3309 , - 2892 , - 3471 , - 3718 , - 2305 , - 3216 , - 5123 , - 1386 , - 1301 , - 3540 , - 1463 , - 4366 , - 297 , - 3864 , - 3115 , - 2034 , - 4605 , - 4188 , - 4767 , - 5014 , - 3601 , - 4512 , - 1107 , - 2682 , - 2597 , - 4836 , - 2759 , - 350 , - 1593 , - 5160 , - 4411 , - 3330 , - 589 , - 172 , - 751 , - 998 , - 4897 , - 496 , - 2403 , - 3978 , - 3893 , - 820 , - 4055 , - 1646 , - 2889 , - 1144 , - 395 , - 4626 , - 1885 , - 1468 , - 2047 , - 2294 , - 881 , - 1792 , - 3699 , - 5274 , - 5189 , - 2116 , - 39 , - 2942 , - 4185 , - 2440 , - 1691 , - 610 , - 3181 , - 2764 , - 3343 , - 3590 , - 2177 , - 3088 , - 4995 , - 1258 , - 1173 , - 3412 , - 1335 , - 4238 , - 169 , - 3736 , - 2987 , - 1906 , - 4477 , - 4060 , - 4639 , - 4886 , - 3473 , - 4384 , - 979 , - 2554 , - 2469 , - 4708 , - 2631 , - 222 , - 1465 , - 5032 , - 4283 , - 3202 , - 461 , - 44 , - 623 , - 870 , - 4769 , - 368 , - 2275 , - 3850 , - 3765 , - 692 , - 3927 , - 1518 , - 2761 , - 1016 , - 267 , - 4498 , - 1757 , - 1340 , - 1919 , - 2166 , - 753 , - 1664 , - 3571 , - 5146 , - 5061 , - 1988 , - 5223 , - 2814 , - 4057 , - 2312 , - 1563 , - 482 , - 3053 , - 2636 , - 3215 , - 3462 , - 2049 , - 2960 , - 4867 , - 1130 , - 1045 , - 3284 , - 1207 , - 4110 , - 41 , - 3608 , - 2859 , - 1778 , - 4349 , - 3932 , - 4511 , - 4758 , - 3345 , - 4256 , - 851 , - 2426 , - 2341 , - 4580 , - 2503 , - 94 , - 1337 , - 4904 , - 4155 , - 3074 , - 333 , - 5228 , - 495 , - 742 , - 4641 , - 240 , - 2147 , - 3722 , - 3637 , - 564 , - 3799 , - 1390 , - 2633 , - 888 , - 139 , - 4370 , - 1629 , - 1212 , - 1791 , - 2038 , - 625 , - 1536 , - 3443 , - 5018 , - 4933 , - 1860 , - 5095 , - 2686 , - 3929 , - 2184 , - 1435 , - 354 , - 2925 , - 2508 , - 3087 , - 3334 , - 1921 , - 2832 , - 4739 , - 1002 , - 917 , - 3156 , - 1079 , - 3982 , - 5225 , - 3480 , - 2731 , - 1650 , - 4221 , - 3804 , - 4383 , - 4630 , - 3217 , - 4128 , - 723 , - 2298 , - 2213 , - 4452 , - 2375 , - 5278 , - 1209 , - 4776 , - 4027 , - 2946 , - 205 , - 5100 , - 367 , - 614 , - 4513 , - 112 , - 2019 , - 3594 , - 3509 , - 436 , - 3671 , - 1262 , - 2505 , - 760 , - 11 , - 4242 , - 1501 , - 1084 , - 1663 , - 1910 , - 497 , - 1408 , - 3315 , - 4890 , - 4805 , - 1732 , - 4967 , - 2558 , - 3801 , - 2056 , - 1307 , - 226 , - 2797 , - 2380 , - 2959 , - 3206 , - 1793 , - 2704 , - 4611 , - 874 , - 789 , - 3028 , - 951 , - 3854 , - 5097 , - 3352 , - 2603 , - 1522 , - 4093 , - 3676 , - 4255 , - 4502 , - 3089 , - 4000 , - 595 , - 2170 , - 2085 , - 4324 , - 2247 , - 5150 , - 1081 , - 4648 , - 3899 , - 2818 , - 77 , - 4972 , - 239 , - 486 , - 4385 , - 5296 , - 1891 , - 3466 , - 3381 , - 308 , - 3543 , - 1134 , - 2377 , - 632 , - 5195 , - 4114 , - 1373 , - 956 , - 1535 , - 1782 , - 369 , - 1280 , - 3187 , - 4762 , - 4677 , - 1604 , - 4839 , - 2430 , - 3673 , - 1928 , - 1179 , - 98 , - 2669 , - 2252 , - 2831 , - 3078 , - 1665 , - 2576 , - 4483 , - 746 , - 661 , - 2900 , - 823 , - 3726 , - 4969 , - 3224 , - 2475 , - 1394 , - 3965 , - 3548 , - 4127 , - 4374 , - 2961 , - 3872 , - 467 , - 2042 , - 1957 , - 4196 , - 2119 , - 5022 , - 953 , - 4520 , - 3771 , - 2690 , - 5261 , - 4844 , - 111 , - 358 , - 4257 , - 5168 , - 1763 , - 3338 , - 3253 , - 180 , - 3415 , - 1006 , - 2249 , - 504 , - 5067 , - 3986 , - 1245 , - 828 , - 1407 , - 1654 , - 241 , - 1152 , - 3059 , - 4634 , - 4549 , - 1476 , - 4711 , - 2302 , - 3545 , - 1800 , - 1051 , - 5282 , - 2541 , - 2124 , - 2703 , - 2950 , - 1537 , - 2448 , - 4355 , - 618 , - 533 , - 2772 , - 695 , - 3598 , - 4841 , - 3096 , - 2347 , - 1266 , - 3837 , - 3420 , - 3999 , - 4246 , - 2833 , - 3744 , - 339 , - 1914 , - 1829 , - 4068 , - 1991 , - 4894 , - 825 , - 4392 , - 3643 , - 2562 , - 5133 , - 4716 , - 5295 , - 230 , - 4129 , - 5040 , - 1635 , - 3210 , - 3125 , - 52 , - 3287 , - 878 , - 2121 , - 376 , - 4939 , - 3858 , - 1117 , - 700 , - 1279 , - 1526 , - 113 , - 1024 , - 2931 , - 4506 , - 4421 , - 1348 , - 4583 , - 2174 , - 3417 , - 1672 , - 923 , - 5154 , - 2413 , - 1996 , - 2575 , - 2822 , - 1409 , - 2320 , - 4227 , - 490 , - 405 , - 2644 , - 567 , - 3470 , - 4713 , - 2968 , - 2219 , - 1138 , - 3709 , - 3292 , - 3871 , - 4118 , - 2705 , - 3616 , - 211 , - 1786 , - 1701 , - 3940 , - 1863 , - 4766 , - 697 , - 4264 , - 3515 , - 2434 , - 5005 , - 4588 , - 5167 , - 102 , - 4001 , - 4912 , - 1507 , - 3082 , - 2997 , - 5236 , - 3159 , - 750 , - 1993 , - 248 , - 4811 , - 3730 , - 989 , - 572 , - 1151 , - 1398 , - 5297 , - 896 , - 2803 , - 4378 , - 4293 , - 1220 , - 4455 , - 2046 , - 3289 , - 1544 , - 795 , - 5026 , - 2285 , - 1868 , - 2447 , - 2694 , - 1281 , - 2192 , - 4099 , - 362 , - 277 , - 2516 , - 439 , - 3342 , - 4585 , - 2840 , - 2091 , - 1010 , - 3581 , - 3164 , - 3743 , - 3990 , - 2577 , - 3488 , - 83 , - 1658 , - 1573 , - 3812 , - 1735 , - 4638 , - 569 , - 4136 , - 3387 , - 2306 , - 4877 , - 4460 , - 5039 , - 5286 , - 3873 , - 4784 , - 1379 , - 2954 , - 2869 , - 5108 , - 3031 , - 622 , - 1865 , - 120 , - 4683 , - 3602 , - 861 , - 444 , - 1023 , - 1270 , - 5169 , - 768 , - 2675 , - 4250 , - 4165 , - 1092 , - 4327 , - 1918 , - 3161 , - 1416 , - 667 , - 4898 , - 2157 , - 1740 , - 2319 , - 2566 , - 1153 , - 2064 , - 3971 , - 234 , - 149 , - 2388 , - 311 , - 3214 , - 4457 , - 2712 , - 1963 , - 882 , - 3453 , - 3036 , - 3615 , - 3862 , - 2449 , - 3360 , - 5267 , - 1530 , - 1445 , - 3684 , - 1607 , - 4510 , - 441 , - 4008 , - 3259 , - 2178 , - 4749 , - 4332 , - 4911 , - 5158 , - 3745 , - 4656 , - 1251 , - 2826 , - 2741 , - 4980 , - 2903 , - 494 , - 1737 , - 5304 , - 4555 , - 3474 , - 733 , - 316 , - 895 , - 1142 , - 5041 , - 640 , - 2547 , - 4122 , - 4037 , - 964 , - 4199 , - 1790 , - 3033 , - 1288 , - 539 , - 4770 , - 2029 , - 1612 , - 2191 , - 2438 , - 1025 , - 1936 , - 3843 , - 106 , - 21 , - 2260 , - 183 , - 3086 , - 4329 , - 2584 , - 1835 , - 754 , - 3325 , - 2908 , - 3487 , - 3734 , - 2321 , - 3232 , - 5139 , - 1402 , - 1317 , - 3556 , - 1479 , - 4382 , - 313 , - 3880 , - 3131 , - 2050 , - 4621 , - 4204 , - 4783 , - 5030 , - 3617 , - 4528 , - 1123 , - 2698 , - 2613 , - 4852 , - 2775 , - 366 , - 1609 , - 5176 , - 4427 , - 3346 , - 605 , - 188 , - 767 , - 1014 , - 4913 , - 512 , - 2419 , - 3994 , - 3909 , - 836 , - 4071 , - 1662 , - 2905 , - 1160 , - 411 , - 4642 , - 1901 , - 1484 , - 2063 , - 2310 , - 897 , - 1808 , - 3715 , - 5290 , - 5205 , - 2132 , - 55 , - 2958 , - 4201 , - 2456 , - 1707 , - 626 , - 3197 , - 2780 , - 3359 , - 3606 , - 2193 , - 3104 , - 5011 , - 1274 , - 1189 , - 3428 , - 1351 , - 4254 , - 185 , - 3752 , - 3003 , - 1922 , - 4493 , - 4076 , - 4655 , - 4902 , - 3489 , - 4400 , - 995 , - 2570 , - 2485 , - 4724 , - 2647 , - 238 , - 1481 , - 5048 , - 4299 , - 3218 , - 477 , - 60 , - 639 , - 886 , - 4785 , - 384 , - 2291 , - 3866 , - 3781 , - 708 , - 3943 , - 1534 , - 2777 , - 1032 , - 283 , - 4514 , - 1773 , - 1356 , - 1935 , - 2182 , - 769 , - 1680 , - 3587 , - 5162 , - 5077 , - 2004 , - 5239 , - 2830 , - 4073 , - 2328 , - 1579 , - 498 , - 3069 , - 2652 , - 3231 , - 3478 , - 2065 , - 2976 , - 4883 , - 1146 , - 1061 , - 3300 , - 1223 , - 4126 , - 57 , - 3624 , - 2875 , - 1794 , - 4365 , - 3948 , - 4527 , - 4774 , - 3361 , - 4272 , - 867 , - 2442 , - 2357 , - 4596 , - 2519 , - 110 , - 1353 , - 4920 , - 4171 , - 3090 , - 349 , - 5244 , - 511 , - 758 , - 4657 , - 256 , - 2163 , - 3738 , - 3653 , - 580 , - 3815 , - 1406 , - 2649 , - 904 , - 155 , - 4386 , - 1645 , - 1228 , - 1807 , - 2054 , - 641 , - 1552 , - 3459 , - 5034 , - 4949 , - 1876 , - 5111 , - 2702 , - 3945 , - 2200 , - 1451 , - 370 , - 2941 , - 2524 , - 3103 , - 3350 , - 1937 , - 2848 , - 4755 , - 1018 , - 933 , - 3172 , - 1095 , - 3998 , - 5241 , - 3496 , - 2747 , - 1666 , - 4237 , - 3820 , - 4399 , - 4646 , - 3233 , - 4144 , - 739 , - 2314 , - 2229 , - 4468 , - 2391 , - 5294 , - 1225 , - 4792 , - 4043 , - 2962 , - 221 , - 5116 , - 383 , - 630 , - 4529 , - 128 , - 2035 , - 3610 , - 3525 , - 452 , - 3687 , - 1278 , - 2521 , - 776 , - 27 , - 4258 , - 1517 , - 1100 , - 1679 , - 1926 , - 513 , - 1424 , - 3331 , - 4906 , - 4821 , - 1748 , - 4983 , - 2574 , - 3817 , - 2072 , - 1323 , - 242 , - 2813 , - 2396 , - 2975 , - 3222 , - 1809 , - 2720 , - 4627 , - 890 , - 805 , - 3044 , - 967 , - 3870 , - 5113 , - 3368 , - 2619 , - 1538 , - 4109 , - 3692 , - 4271 , - 4518 , - 3105 , - 4016 , - 611 , - 2186 , - 2101 , - 4340 , - 2263 , - 5166 , - 1097 , - 4664 , - 3915 , - 2834 , - 93 , - 4988 , - 255 , - 502 , - 4401 , - 0 , - 3779 , - 166 , - 5289 , - 3020 , - 4111 , - 3186 , - 245 , - 664 , - 4443 , - 830 , - 577 , - 3684 , - 4775 , - 3850 , - 909 , - 1328 , - 5107 , - 1494 , - 1241 , - 4348 , - 63 , - 4514 , - 1573 , - 1992 , - 395 , - 2158 , - 1905 , - 5012 , - 727 , - 5178 , - 2237 , - 2656 , - 1059 , - 2822 , - 2569 , - 300 , - 1391 , - 466 , - 2901 , - 3320 , - 1723 , - 3486 , - 3233 , - 964 , - 2055 , - 1130 , - 3565 , - 3984 , - 2387 , - 4150 , - 3897 , - 1628 , - 2719 , - 1794 , - 4229 , - 4648 , - 3051 , - 4814 , - 4561 , - 2292 , - 3383 , - 2458 , - 4893 , - 5312 , - 3715 , - 102 , - 5225 , - 2956 , - 4047 , - 3122 , - 181 , - 600 , - 4379 , - 766 , - 513 , - 3620 , - 4711 , - 3786 , - 845 , - 1264 , - 5043 , - 1430 , - 1177 , - 4284 , - 5375 , - 4450 , - 1509 , - 1928 , - 331 , - 2094 , - 1841 , - 4948 , - 663 , - 5114 , - 2173 , - 2592 , - 995 , - 2758 , - 2505 , - 236 , - 1327 , - 402 , - 2837 , - 3256 , - 1659 , - 3422 , - 3169 , - 900 , - 1991 , - 1066 , - 3501 , - 3920 , - 2323 , - 4086 , - 3833 , - 1564 , - 2655 , - 1730 , - 4165 , - 4584 , - 2987 , - 4750 , - 4497 , - 2228 , - 3319 , - 2394 , - 4829 , - 5248 , - 3651 , - 38 , - 5161 , - 2892 , - 3983 , - 3058 , - 117 , - 536 , - 4315 , - 702 , - 449 , - 3556 , - 4647 , - 3722 , - 781 , - 1200 , - 4979 , - 1366 , - 1113 , - 4220 , - 5311 , - 4386 , - 1445 , - 1864 , - 267 , - 2030 , - 1777 , - 4884 , - 599 , - 5050 , - 2109 , - 2528 , - 931 , - 2694 , - 2441 , - 172 , - 1263 , - 338 , - 2773 , - 3192 , - 1595 , - 3358 , - 3105 , - 836 , - 1927 , - 1002 , - 3437 , - 3856 , - 2259 , - 4022 , - 3769 , - 1500 , - 2591 , - 1666 , - 4101 , - 4520 , - 2923 , - 4686 , - 4433 , - 2164 , - 3255 , - 2330 , - 4765 , - 5184 , - 3587 , - 5350 , - 5097 , - 2828 , - 3919 , - 2994 , - 53 , - 472 , - 4251 , - 638 , - 385 , - 3492 , - 4583 , - 3658 , - 717 , - 1136 , - 4915 , - 1302 , - 1049 , - 4156 , - 5247 , - 4322 , - 1381 , - 1800 , - 203 , - 1966 , - 1713 , - 4820 , - 535 , - 4986 , - 2045 , - 2464 , - 867 , - 2630 , - 2377 , - 108 , - 1199 , - 274 , - 2709 , - 3128 , - 1531 , - 3294 , - 3041 , - 772 , - 1863 , - 938 , - 3373 , - 3792 , - 2195 , - 3958 , - 3705 , - 1436 , - 2527 , - 1602 , - 4037 , - 4456 , - 2859 , - 4622 , - 4369 , - 2100 , - 3191 , - 2266 , - 4701 , - 5120 , - 3523 , - 5286 , - 5033 , - 2764 , - 3855 , - 2930 , - 5365 , - 408 , - 4187 , - 574 , - 321 , - 3428 , - 4519 , - 3594 , - 653 , - 1072 , - 4851 , - 1238 , - 985 , - 4092 , - 5183 , - 4258 , - 1317 , - 1736 , - 139 , - 1902 , - 1649 , - 4756 , - 471 , - 4922 , - 1981 , - 2400 , - 803 , - 2566 , - 2313 , - 44 , - 1135 , - 210 , - 2645 , - 3064 , - 1467 , - 3230 , - 2977 , - 708 , - 1799 , - 874 , - 3309 , - 3728 , - 2131 , - 3894 , - 3641 , - 1372 , - 2463 , - 1538 , - 3973 , - 4392 , - 2795 , - 4558 , - 4305 , - 2036 , - 3127 , - 2202 , - 4637 , - 5056 , - 3459 , - 5222 , - 4969 , - 2700 , - 3791 , - 2866 , - 5301 , - 344 , - 4123 , - 510 , - 257 , - 3364 , - 4455 , - 3530 , - 589 , - 1008 , - 4787 , - 1174 , - 921 , - 4028 , - 5119 , - 4194 , - 1253 , - 1672 , - 75 , - 1838 , - 1585 , - 4692 , - 407 , - 4858 , - 1917 , - 2336 , - 739 , - 2502 , - 2249 , - 5356 , - 1071 , - 146 , - 2581 , - 3000 , - 1403 , - 3166 , - 2913 , - 644 , - 1735 , - 810 , - 3245 , - 3664 , - 2067 , - 3830 , - 3577 , - 1308 , - 2399 , - 1474 , - 3909 , - 4328 , - 2731 , - 4494 , - 4241 , - 1972 , - 3063 , - 2138 , - 4573 , - 4992 , - 3395 , - 5158 , - 4905 , - 2636 , - 3727 , - 2802 , - 5237 , - 280 , - 4059 , - 446 , - 193 , - 3300 , - 4391 , - 3466 , - 525 , - 944 , - 4723 , - 1110 , - 857 , - 3964 , - 5055 , - 4130 , - 1189 , - 1608 , - 11 , - 1774 , - 1521 , - 4628 , - 343 , - 4794 , - 1853 , - 2272 , - 675 , - 2438 , - 2185 , - 5292 , - 1007 , - 82 , - 2517 , - 2936 , - 1339 , - 3102 , - 2849 , - 580 , - 1671 , - 746 , - 3181 , - 3600 , - 2003 , - 3766 , - 3513 , - 1244 , - 2335 , - 1410 , - 3845 , - 4264 , - 2667 , - 4430 , - 4177 , - 1908 , - 2999 , - 2074 , - 4509 , - 4928 , - 3331 , - 5094 , - 4841 , - 2572 , - 3663 , - 2738 , - 5173 , - 216 , - 3995 , - 382 , - 129 , - 3236 , - 4327 , - 3402 , - 461 , - 880 , - 4659 , - 1046 , - 793 , - 3900 , - 4991 , - 4066 , - 1125 , - 1544 , - 5323 , - 1710 , - 1457 , - 4564 , - 279 , - 4730 , - 1789 , - 2208 , - 611 , - 2374 , - 2121 , - 5228 , - 943 , - 18 , - 2453 , - 2872 , - 1275 , - 3038 , - 2785 , - 516 , - 1607 , - 682 , - 3117 , - 3536 , - 1939 , - 3702 , - 3449 , - 1180 , - 2271 , - 1346 , - 3781 , - 4200 , - 2603 , - 4366 , - 4113 , - 1844 , - 2935 , - 2010 , - 4445 , - 4864 , - 3267 , - 5030 , - 4777 , - 2508 , - 3599 , - 2674 , - 5109 , - 152 , - 3931 , - 318 , - 65 , - 3172 , - 4263 , - 3338 , - 397 , - 816 , - 4595 , - 982 , - 729 , - 3836 , - 4927 , - 4002 , - 1061 , - 1480 , - 5259 , - 1646 , - 1393 , - 4500 , - 215 , - 4666 , - 1725 , - 2144 , - 547 , - 2310 , - 2057 , - 5164 , - 879 , - 5330 , - 2389 , - 2808 , - 1211 , - 2974 , - 2721 , - 452 , - 1543 , - 618 , - 3053 , - 3472 , - 1875 , - 3638 , - 3385 , - 1116 , - 2207 , - 1282 , - 3717 , - 4136 , - 2539 , - 4302 , - 4049 , - 1780 , - 2871 , - 1946 , - 4381 , - 4800 , - 3203 , - 4966 , - 4713 , - 2444 , - 3535 , - 2610 , - 5045 , - 88 , - 3867 , - 254 , - 1 , - 3108 , - 4199 , - 3274 , - 333 , - 752 , - 4531 , - 918 , - 665 , - 3772 , - 4863 , - 3938 , - 997 , - 1416 , - 5195 , - 1582 , - 1329 , - 4436 , - 151 , - 4602 , - 1661 , - 2080 , - 483 , - 2246 , - 1993 , - 5100 , - 815 , - 5266 , - 2325 , - 2744 , - 1147 , - 2910 , - 2657 , - 388 , - 1479 , - 554 , - 2989 , - 3408 , - 1811 , - 3574 , - 3321 , - 1052 , - 2143 , - 1218 , - 3653 , - 4072 , - 2475 , - 4238 , - 3985 , - 1716 , - 2807 , - 1882 , - 4317 , - 4736 , - 3139 , - 4902 , - 4649 , - 2380 , - 3471 , - 2546 , - 4981 , - 24 , - 3803 , - 190 , - 5313 , - 3044 , - 4135 , - 3210 , - 269 , - 688 , - 4467 , - 854 , - 601 , - 3708 , - 4799 , - 3874 , - 933 , - 1352 , - 5131 , - 1518 , - 1265 , - 4372 , - 87 , - 4538 , - 1597 , - 2016 , - 419 , - 2182 , - 1929 , - 5036 , - 751 , - 5202 , - 2261 , - 2680 , - 1083 , - 2846 , - 2593 , - 324 , - 1415 , - 490 , - 2925 , - 3344 , - 1747 , - 3510 , - 3257 , - 988 , - 2079 , - 1154 , - 3589 , - 4008 , - 2411 , - 4174 , - 3921 , - 1652 , - 2743 , - 1818 , - 4253 , - 4672 , - 3075 , - 4838 , - 4585 , - 2316 , - 3407 , - 2482 , - 4917 , - 5336 , - 3739 , - 126 , - 5249 , - 2980 , - 4071 , - 3146 , - 205 , - 624 , - 4403 , - 790 , - 537 , - 3644 , - 4735 , - 3810 , - 869 , - 1288 , - 5067 , - 1454 , - 1201 , - 4308 , - 23 , - 4474 , - 1533 , - 1952 , - 355 , - 2118 , - 1865 , - 4972 , - 687 , - 5138 , - 2197 , - 2616 , - 1019 , - 2782 , - 2529 , - 260 , - 1351 , - 426 , - 2861 , - 3280 , - 1683 , - 3446 , - 3193 , - 924 , - 2015 , - 1090 , - 3525 , - 3944 , - 2347 , - 4110 , - 3857 , - 1588 , - 2679 , - 1754 , - 4189 , - 4608 , - 3011 , - 4774 , - 4521 , - 2252 , - 3343 , - 2418 , - 4853 , - 5272 , - 3675 , - 62 , - 5185 , - 2916 , - 4007 , - 3082 , - 141 , - 560 , - 4339 , - 726 , - 473 , - 3580 , - 4671 , - 3746 , - 805 , - 1224 , - 5003 , - 1390 , - 1137 , - 4244 , - 5335 , - 4410 , - 1469 , - 1888 , - 291 , - 2054 , - 1801 , - 4908 , - 623 , - 5074 , - 2133 , - 2552 , - 955 , - 2718 , - 2465 , - 196 , - 1287 , - 362 , - 2797 , - 3216 , - 1619 , - 3382 , - 3129 , - 860 , - 1951 , - 1026 , - 3461 , - 3880 , - 2283 , - 4046 , - 3793 , - 1524 , - 2615 , - 1690 , - 4125 , - 4544 , - 2947 , - 4710 , - 4457 , - 2188 , - 3279 , - 2354 , - 4789 , - 5208 , - 3611 , - 5374 , - 5121 , - 2852 , - 3943 , - 3018 , - 77 , - 496 , - 4275 , - 662 , - 409 , - 3516 , - 4607 , - 3682 , - 741 , - 1160 , - 4939 , - 1326 , - 1073 , - 4180 , - 5271 , - 4346 , - 1405 , - 1824 , - 227 , - 1990 , - 1737 , - 4844 , - 559 , - 5010 , - 2069 , - 2488 , - 891 , - 2654 , - 2401 , - 132 , - 1223 , - 298 , - 2733 , - 3152 , - 1555 , - 3318 , - 3065 , - 796 , - 1887 , - 962 , - 3397 , - 3816 , - 2219 , - 3982 , - 3729 , - 1460 , - 2551 , - 1626 , - 4061 , - 4480 , - 2883 , - 4646 , - 4393 , - 2124 , - 3215 , - 2290 , - 4725 , - 5144 , - 3547 , - 5310 , - 5057 , - 2788 , - 3879 , - 2954 , - 13 , - 432 , - 4211 , - 598 , - 345 , - 3452 , - 4543 , - 3618 , - 677 , - 1096 , - 4875 , - 1262 , - 1009 , - 4116 , - 5207 , - 4282 , - 1341 , - 1760 , - 163 , - 1926 , - 1673 , - 4780 , - 495 , - 4946 , - 2005 , - 2424 , - 827 , - 2590 , - 2337 , - 68 , - 1159 , - 234 , - 2669 , - 3088 , - 1491 , - 3254 , - 3001 , - 732 , - 1823 , - 898 , - 3333 , - 3752 , - 2155 , - 3918 , - 3665 , - 1396 , - 2487 , - 1562 , - 3997 , - 4416 , - 2819 , - 4582 , - 4329 , - 2060 , - 3151 , - 2226 , - 4661 , - 5080 , - 3483 , - 5246 , - 4993 , - 2724 , - 3815 , - 2890 , - 5325 , - 368 , - 4147 , - 534 , - 281 , - 3388 , - 4479 , - 3554 , - 613 , - 1032 , - 4811 , - 1198 , - 945 , - 4052 , - 5143 , - 4218 , - 1277 , - 1696 , - 99 , - 1862 , - 1609 , - 4716 , - 431 , - 4882 , - 1941 , - 2360 , - 763 , - 2526 , - 2273 , - 4 , - 1095 , - 170 , - 2605 , - 3024 , - 1427 , - 3190 , - 2937 , - 668 , - 1759 , - 834 , - 3269 , - 3688 , - 2091 , - 3854 , - 3601 , - 1332 , - 2423 , - 1498 , - 3933 , - 4352 , - 2755 , - 4518 , - 4265 , - 1996 , - 3087 , - 2162 , - 4597 , - 5016 , - 3419 , - 5182 , - 4929 , - 2660 , - 3751 , - 2826 , - 5261 , - 304 , - 4083 , - 470 , - 217 , - 3324 , - 4415 , - 3490 , - 549 , - 968 , - 4747 , - 1134 , - 881 , - 3988 , - 5079 , - 4154 , - 1213 , - 1632 , - 35 , - 1798 , - 1545 , - 4652 , - 367 , - 4818 , - 1877 , - 2296 , - 699 , - 2462 , - 2209 , - 5316 , - 1031 , - 106 , - 2541 , - 2960 , - 1363 , - 3126 , - 2873 , - 604 , - 1695 , - 770 , - 3205 , - 3624 , - 2027 , - 3790 , - 3537 , - 1268 , - 2359 , - 1434 , - 3869 , - 4288 , - 2691 , - 4454 , - 4201 , - 1932 , - 3023 , - 2098 , - 4533 , - 4952 , - 3355 , - 5118 , - 4865 , - 2596 , - 3687 , - 2762 , - 5197 , - 240 , - 4019 , - 406 , - 153 , - 3260 , - 4351 , - 3426 , - 485 , - 904 , - 4683 , - 1070 , - 817 , - 3924 , - 5015 , - 4090 , - 1149 , - 1568 , - 5347 , - 1734 , - 1481 , - 4588 , - 303 , - 4754 , - 1813 , - 2232 , - 635 , - 2398 , - 2145 , - 5252 , - 967 , - 42 , - 2477 , - 2896 , - 1299 , - 3062 , - 2809 , - 540 , - 1631 , - 706 , - 3141 , - 3560 , - 1963 , - 3726 , - 3473 , - 1204 , - 2295 , - 1370 , - 3805 , - 4224 , - 2627 , - 4390 , - 4137 , - 1868 , - 2959 , - 2034 , - 4469 , - 4888 , - 3291 , - 5054 , - 4801 , - 2532 , - 3623 , - 2698 , - 5133 , - 176 , - 3955 , - 342 , - 89 , - 3196 , - 4287 , - 3362 , - 421 , - 840 , - 4619 , - 1006 , - 753 , - 3860 , - 4951 , - 4026 , - 1085 , - 1504 , - 5283 , - 1670 , - 1417 , - 4524 , - 239 , - 4690 , - 1749 , - 2168 , - 571 , - 2334 , - 2081 , - 5188 , - 903 , - 5354 , - 2413 , - 2832 , - 1235 , - 2998 , - 2745 , - 476 , - 1567 , - 642 , - 3077 , - 3496 , - 1899 , - 3662 , - 3409 , - 1140 , - 2231 , - 1306 , - 3741 , - 4160 , - 2563 , - 4326 , - 4073 , - 1804 , - 2895 , - 1970 , - 4405 , - 4824 , - 3227 , - 4990 , - 4737 , - 2468 , - 3559 , - 2634 , - 5069 , - 112 , - 3891 , - 278 , - 25 , - 3132 , - 4223 , - 3298 , - 357 , - 776 , - 4555 , - 942 , - 689 , - 3796 , - 4887 , - 3962 , - 1021 , - 1440 , - 5219 , - 1606 , - 1353 , - 4460 , - 175 , - 4626 , - 1685 , - 2104 , - 507 , - 2270 , - 2017 , - 5124 , - 839 , - 5290 , - 2349 , - 2768 , - 1171 , - 2934 , - 2681 , - 412 , - 1503 , - 578 , - 3013 , - 3432 , - 1835 , - 3598 , - 3345 , - 1076 , - 2167 , - 1242 , - 3677 , - 4096 , - 2499 , - 4262 , - 4009 , - 1740 , - 2831 , - 1906 , - 4341 , - 4760 , - 3163 , - 4926 , - 4673 , - 2404 , - 3495 , - 2570 , - 5005 , - 48 , - 3827 , - 214 , - 5337 , - 3068 , - 4159 , - 3234 , - 293 , - 712 , - 4491 , - 878 , - 625 , - 3732 , - 4823 , - 3898 , - 957 , - 1376 , - 5155 , - 1542 , - 1289 , - 4396 , - 111 , - 4562 , - 1621 , - 2040 , - 443 , - 2206 , - 1953 , - 5060 , - 775 , - 5226 , - 2285 , - 2704 , - 1107 , - 2870 , - 2617 , - 348 , - 1439 , - 514 , - 2949 , - 3368 , - 1771 , - 3534 , - 3281 , - 1012 , - 2103 , - 1178 , - 3613 , - 4032 , - 2435 , - 4198 , - 3945 , - 1676 , - 2767 , - 1842 , - 4277 , - 4696 , - 3099 , - 4862 , - 4609 , - 2340 , - 3431 , - 2506 , - 4941 , - 5360 , - 3763 , - 150 , - 5273 , - 3004 , - 4095 , - 3170 , - 229 , - 648 , - 4427 , - 814 , - 561 , - 3668 , - 4759 , - 3834 , - 893 , - 1312 , - 5091 , - 1478 , - 1225 , - 4332 , - 47 , - 4498 , - 1557 , - 1976 , - 379 , - 2142 , - 1889 , - 4996 , - 711 , - 5162 , - 2221 , - 2640 , - 1043 , - 2806 , - 2553 , - 284 , - 1375 , - 450 , - 2885 , - 3304 , - 1707 , - 3470 , - 3217 , - 948 , - 2039 , - 1114 , - 3549 , - 3968 , - 2371 , - 4134 , - 3881 , - 1612 , - 2703 , - 1778 , - 4213 , - 4632 , - 3035 , - 4798 , - 4545 , - 2276 , - 3367 , - 2442 , - 4877 , - 5296 , - 3699 , - 86 , - 5209 , - 2940 , - 4031 , - 3106 , - 165 , - 584 , - 4363 , - 750 , - 497 , - 3604 , - 4695 , - 3770 , - 829 , - 1248 , - 5027 , - 1414 , - 1161 , - 4268 , - 5359 , - 4434 , - 1493 , - 1912 , - 315 , - 2078 , - 1825 , - 4932 , - 647 , - 5098 , - 2157 , - 2576 , - 979 , - 2742 , - 2489 , - 220 , - 1311 , - 386 , - 2821 , - 3240 , - 1643 , - 3406 , - 3153 , - 884 , - 1975 , - 1050 , - 3485 , - 3904 , - 2307 , - 4070 , - 3817 , - 1548 , - 2639 , - 1714 , - 4149 , - 4568 , - 2971 , - 4734 , - 4481 , - 2212 , - 3303 , - 2378 , - 4813 , - 5232 , - 3635 , - 22 , - 5145 , - 2876 , - 3967 , - 3042 , - 101 , - 520 , - 4299 , - 686 , - 433 , - 3540 , - 4631 , - 3706 , - 765 , - 1184 , - 4963 , - 1350 , - 1097 , - 4204 , - 5295 , - 4370 , - 1429 , - 1848 , - 251 , - 2014 , - 1761 , - 4868 , - 583 , - 5034 , - 2093 , - 2512 , - 915 , - 2678 , - 2425 , - 156 , - 1247 , - 322 , - 2757 , - 3176 , - 1579 , - 3342 , - 3089 , - 820 , - 1911 , - 986 , - 3421 , - 3840 , - 2243 , - 4006 , - 3753 , - 1484 , - 2575 , - 1650 , - 4085 , - 4504 , - 2907 , - 4670 , - 4417 , - 2148 , - 3239 , - 2314 , - 4749 , - 5168 , - 3571 , - 5334 , - 5081 , - 2812 , - 3903 , - 2978 , - 37 , - 456 , - 4235 , - 622 , - 369 , - 3476 , - 4567 , - 3642 , - 701 , - 1120 , - 4899 , - 1286 , - 1033 , - 4140 , - 5231 , - 4306 , - 1365 , - 1784 , - 187 , - 1950 , - 1697 , - 4804 , - 519 , - 4970 , - 2029 , - 2448 , - 851 , - 2614 , - 2361 , - 92 , - 1183 , - 258 , - 2693 , - 3112 , - 1515 , - 3278 , - 3025 , - 756 , - 1847 , - 922 , - 3357 , - 3776 , - 2179 , - 3942 , - 3689 , - 1420 , - 2511 , - 1586 , - 4021 , - 4440 , - 2843 , - 4606 , - 4353 , - 2084 , - 3175 , - 2250 , - 4685 , - 5104 , - 3507 , - 5270 , - 5017 , - 2748 , - 3839 , - 2914 , - 5349 , - 392 , - 4171 , - 558 , - 305 , - 3412 , - 4503 , - 3578 , - 637 , - 1056 , - 4835 , - 1222 , - 969 , - 4076 , - 5167 , - 4242 , - 1301 , - 1720 , - 123 , - 1886 , - 1633 , - 4740 , - 455 , - 4906 , - 1965 , - 2384 , - 787 , - 2550 , - 2297 , - 28 , - 1119 , - 194 , - 2629 , - 3048 , - 1451 , - 3214 , - 2961 , - 692 , - 1783 , - 858 , - 3293 , - 3712 , - 2115 , - 3878 , - 3625 , - 1356 , - 2447 , - 1522 , - 3957 , - 4376 , - 2779 , - 4542 , - 4289 , - 2020 , - 3111 , - 2186 , - 4621 , - 5040 , - 3443 , - 5206 , - 4953 , - 2684 , - 3775 , - 2850 , - 5285 , - 328 , - 4107 , - 494 , - 241 , - 3348 , - 4439 , - 3514 , - 573 , - 992 , - 4771 , - 1158 , - 905 , - 4012 , - 5103 , - 4178 , - 1237 , - 1656 , - 59 , - 1822 , - 1569 , - 4676 , - 391 , - 4842 , - 1901 , - 2320 , - 723 , - 2486 , - 2233 , - 5340 , - 1055 , - 130 , - 2565 , - 2984 , - 1387 , - 3150 , - 2897 , - 628 , - 1719 , - 794 , - 3229 , - 3648 , - 2051 , - 3814 , - 3561 , - 1292 , - 2383 , - 1458 , - 3893 , - 4312 , - 2715 , - 4478 , - 4225 , - 1956 , - 3047 , - 2122 , - 4557 , - 4976 , - 3379 , - 5142 , - 4889 , - 2620 , - 3711 , - 2786 , - 5221 , - 264 , - 4043 , - 430 , - 177 , - 3284 , - 4375 , - 3450 , - 509 , - 928 , - 4707 , - 1094 , - 841 , - 3948 , - 5039 , - 4114 , - 1173 , - 1592 , - 5371 , - 1758 , - 1505 , - 4612 , - 327 , - 4778 , - 1837 , - 2256 , - 659 , - 2422 , - 2169 , - 5276 , - 991 , - 66 , - 2501 , - 2920 , - 1323 , - 3086 , - 2833 , - 564 , - 1655 , - 730 , - 3165 , - 3584 , - 1987 , - 3750 , - 3497 , - 1228 , - 2319 , - 1394 , - 3829 , - 4248 , - 2651 , - 4414 , - 4161 , - 1892 , - 2983 , - 2058 , - 4493 , - 4912 , - 3315 , - 5078 , - 4825 , - 2556 , - 3647 , - 2722 , - 5157 , - 200 , - 3979 , - 366 , - 113 , - 3220 , - 4311 , - 3386 , - 445 , - 864 , - 4643 , - 1030 , - 777 , - 3884 , - 4975 , - 4050 , - 1109 , - 1528 , - 5307 , - 1694 , - 1441 , - 4548 , - 263 , - 4714 , - 1773 , - 2192 , - 595 , - 2358 , - 2105 , - 5212 , - 927 , - 2 , - 2437 , - 2856 , - 1259 , - 3022 , - 2769 , - 500 , - 1591 , - 666 , - 3101 , - 3520 , - 1923 , - 3686 , - 3433 , - 1164 , - 2255 , - 1330 , - 3765 , - 4184 , - 2587 , - 4350 , - 4097 , - 1828 , - 2919 , - 1994 , - 4429 , - 4848 , - 3251 , - 5014 , - 4761 , - 2492 , - 3583 , - 2658 , - 5093 , - 136 , - 3915 , - 302 , - 49 , - 3156 , - 4247 , - 3322 , - 381 , - 800 , - 4579 , - 966 , - 713 , - 3820 , - 4911 , - 3986 , - 1045 , - 1464 , - 5243 , - 1630 , - 1377 , - 4484 , - 199 , - 4650 , - 1709 , - 2128 , - 531 , - 2294 , - 2041 , - 5148 , - 863 , - 5314 , - 2373 , - 2792 , - 1195 , - 2958 , - 2705 , - 436 , - 1527 , - 602 , - 3037 , - 3456 , - 1859 , - 3622 , - 3369 , - 1100 , - 2191 , - 1266 , - 3701 , - 4120 , - 2523 , - 4286 , - 4033 , - 1764 , - 2855 , - 1930 , - 4365 , - 4784 , - 3187 , - 4950 , - 4697 , - 2428 , - 3519 , - 2594 , - 5029 , - 72 , - 3851 , - 238 , - 5361 , - 3092 , - 4183 , - 3258 , - 317 , - 736 , - 4515 , - 902 , - 649 , - 3756 , - 4847 , - 3922 , - 981 , - 1400 , - 5179 , - 1566 , - 1313 , - 4420 , - 135 , - 4586 , - 1645 , - 2064 , - 467 , - 2230 , - 1977 , - 5084 , - 799 , - 5250 , - 2309 , - 2728 , - 1131 , - 2894 , - 2641 , - 372 , - 1463 , - 538 , - 2973 , - 3392 , - 1795 , - 3558 , - 3305 , - 1036 , - 2127 , - 1202 , - 3637 , - 4056 , - 2459 , - 4222 , - 3969 , - 1700 , - 2791 , - 1866 , - 4301 , - 4720 , - 3123 , - 4886 , - 4633 , - 2364 , - 3455 , - 2530 , - 4965 , - 8 , - 3787 , - 174 , - 5297 , - 3028 , - 4119 , - 3194 , - 253 , - 672 , - 4451 , - 838 , - 585 , - 3692 , - 4783 , - 3858 , - 917 , - 1336 , - 5115 , - 1502 , - 1249 , - 4356 , - 71 , - 4522 , - 1581 , - 2000 , - 403 , - 2166 , - 1913 , - 5020 , - 735 , - 5186 , - 2245 , - 2664 , - 1067 , - 2830 , - 2577 , - 308 , - 1399 , - 474 , - 2909 , - 3328 , - 1731 , - 3494 , - 3241 , - 972 , - 2063 , - 1138 , - 3573 , - 3992 , - 2395 , - 4158 , - 3905 , - 1636 , - 2727 , - 1802 , - 4237 , - 4656 , - 3059 , - 4822 , - 4569 , - 2300 , - 3391 , - 2466 , - 4901 , - 5320 , - 3723 , - 110 , - 5233 , - 2964 , - 4055 , - 3130 , - 189 , - 608 , - 4387 , - 774 , - 521 , - 3628 , - 4719 , - 3794 , - 853 , - 1272 , - 5051 , - 1438 , - 1185 , - 4292 , - 7 , - 4458 , - 1517 , - 1936 , - 339 , - 2102 , - 1849 , - 4956 , - 671 , - 5122 , - 2181 , - 2600 , - 1003 , - 2766 , - 2513 , - 244 , - 1335 , - 410 , - 2845 , - 3264 , - 1667 , - 3430 , - 3177 , - 908 , - 1999 , - 1074 , - 3509 , - 3928 , - 2331 , - 4094 , - 3841 , - 1572 , - 2663 , - 1738 , - 4173 , - 4592 , - 2995 , - 4758 , - 4505 , - 2236 , - 3327 , - 2402 , - 4837 , - 5256 , - 3659 , - 46 , - 5169 , - 2900 , - 3991 , - 3066 , - 125 , - 544 , - 4323 , - 710 , - 457 , - 3564 , - 4655 , - 3730 , - 789 , - 1208 , - 4987 , - 1374 , - 1121 , - 4228 , - 5319 , - 4394 , - 1453 , - 1872 , - 275 , - 2038 , - 1785 , - 4892 , - 607 , - 5058 , - 2117 , - 2536 , - 939 , - 2702 , - 2449 , - 180 , - 1271 , - 346 , - 2781 , - 3200 , - 1603 , - 3366 , - 3113 , - 844 , - 1935 , - 1010 , - 3445 , - 3864 , - 2267 , - 4030 , - 3777 , - 1508 , - 2599 , - 1674 , - 4109 , - 4528 , - 2931 , - 4694 , - 4441 , - 2172 , - 3263 , - 2338 , - 4773 , - 5192 , - 3595 , - 5358 , - 5105 , - 2836 , - 3927 , - 3002 , - 61 , - 480 , - 4259 , - 646 , - 393 , - 3500 , - 4591 , - 3666 , - 725 , - 1144 , - 4923 , - 1310 , - 1057 , - 4164 , - 5255 , - 4330 , - 1389 , - 1808 , - 211 , - 1974 , - 1721 , - 4828 , - 543 , - 4994 , - 2053 , - 2472 , - 875 , - 2638 , - 2385 , - 116 , - 1207 , - 282 , - 2717 , - 3136 , - 1539 , - 3302 , - 3049 , - 780 , - 1871 , - 946 , - 3381 , - 3800 , - 2203 , - 3966 , - 3713 , - 1444 , - 2535 , - 1610 , - 4045 , - 4464 , - 2867 , - 4630 , - 4377 , - 2108 , - 3199 , - 2274 , - 4709 , - 5128 , - 3531 , - 5294 , - 5041 , - 2772 , - 3863 , - 2938 , - 5373 , - 416 , - 4195 , - 582 , - 329 , - 3436 , - 4527 , - 3602 , - 661 , - 1080 , - 4859 , - 1246 , - 993 , - 4100 , - 5191 , - 4266 , - 1325 , - 1744 , - 147 , - 1910 , - 1657 , - 4764 , - 479 , - 4930 , - 1989 , - 2408 , - 811 , - 2574 , - 2321 , - 52 , - 1143 , - 218 , - 2653 , - 3072 , - 1475 , - 3238 , - 2985 , - 716 , - 1807 , - 882 , - 3317 , - 3736 , - 2139 , - 3902 , - 3649 , - 1380 , - 2471 , - 1546 , - 3981 , - 4400 , - 2803 , - 4566 , - 4313 , - 2044 , - 3135 , - 2210 , - 4645 , - 5064 , - 3467 , - 5230 , - 4977 , - 2708 , - 3799 , - 2874 , - 5309 , - 352 , - 4131 , - 518 , - 265 , - 3372 , - 4463 , - 3538 , - 597 , - 1016 , - 4795 , - 1182 , - 929 , - 4036 , - 5127 , - 4202 , - 1261 , - 1680 , - 83 , - 1846 , - 1593 , - 4700 , - 415 , - 4866 , - 1925 , - 2344 , - 747 , - 2510 , - 2257 , - 5364 , - 1079 , - 154 , - 2589 , - 3008 , - 1411 , - 3174 , - 2921 , - 652 , - 1743 , - 818 , - 3253 , - 3672 , - 2075 , - 3838 , - 3585 , - 1316 , - 2407 , - 1482 , - 3917 , - 4336 , - 2739 , - 4502 , - 4249 , - 1980 , - 3071 , - 2146 , - 4581 , - 5000 , - 3403 , - 5166 , - 4913 , - 2644 , - 3735 , - 2810 , - 5245 , - 288 , - 4067 , - 454 , - 201 , - 3308 , - 4399 , - 3474 , - 533 , - 952 , - 4731 , - 1118 , - 865 , - 3972 , - 5063 , - 4138 , - 1197 , - 1616 , - 19 , - 1782 , - 1529 , - 4636 , - 351 , - 4802 , - 1861 , - 2280 , - 683 , - 2446 , - 2193 , - 5300 , - 1015 , - 90 , - 2525 , - 2944 , - 1347 , - 3110 , - 2857 , - 588 , - 1679 , - 754 , - 3189 , - 3608 , - 2011 , - 3774 , - 3521 , - 1252 , - 2343 , - 1418 , - 3853 , - 4272 , - 2675 , - 4438 , - 4185 , - 1916 , - 3007 , - 2082 , - 4517 , - 4936 , - 3339 , - 5102 , - 4849 , - 2580 , - 3671 , - 2746 , - 5181 , - 224 , - 4003 , - 390 , - 137 , - 3244 , - 4335 , - 3410 , - 469 , - 888 , - 4667 , - 1054 , - 801 , - 3908 , - 4999 , - 4074 , - 1133 , - 1552 , - 5331 , - 1718 , - 1465 , - 4572 , - 287 , - 4738 , - 1797 , - 2216 , - 619 , - 2382 , - 2129 , - 5236 , - 951 , - 26 , - 2461 , - 2880 , - 1283 , - 3046 , - 2793 , - 524 , - 1615 , - 690 , - 3125 , - 3544 , - 1947 , - 3710 , - 3457 , - 1188 , - 2279 , - 1354 , - 3789 , - 4208 , - 2611 , - 4374 , - 4121 , - 1852 , - 2943 , - 2018 , - 4453 , - 4872 , - 3275 , - 5038 , - 4785 , - 2516 , - 3607 , - 2682 , - 5117 , - 160 , - 3939 , - 326 , - 73 , - 3180 , - 4271 , - 3346 , - 405 , - 824 , - 4603 , - 990 , - 737 , - 3844 , - 4935 , - 4010 , - 1069 , - 1488 , - 5267 , - 1654 , - 1401 , - 4508 , - 223 , - 4674 , - 1733 , - 2152 , - 555 , - 2318 , - 2065 , - 5172 , - 887 , - 5338 , - 2397 , - 2816 , - 1219 , - 2982 , - 2729 , - 460 , - 1551 , - 626 , - 3061 , - 3480 , - 1883 , - 3646 , - 3393 , - 1124 , - 2215 , - 1290 , - 3725 , - 4144 , - 2547 , - 4310 , - 4057 , - 1788 , - 2879 , - 1954 , - 4389 , - 4808 , - 3211 , - 4974 , - 4721 , - 2452 , - 3543 , - 2618 , - 5053 , - 96 , - 3875 , - 262 , - 9 , - 3116 , - 4207 , - 3282 , - 341 , - 760 , - 4539 , - 926 , - 673 , - 3780 , - 4871 , - 3946 , - 1005 , - 1424 , - 5203 , - 1590 , - 1337 , - 4444 , - 159 , - 4610 , - 1669 , - 2088 , - 491 , - 2254 , - 2001 , - 5108 , - 823 , - 5274 , - 2333 , - 2752 , - 1155 , - 2918 , - 2665 , - 396 , - 1487 , - 562 , - 2997 , - 3416 , - 1819 , - 3582 , - 3329 , - 1060 , - 2151 , - 1226 , - 3661 , - 4080 , - 2483 , - 4246 , - 3993 , - 1724 , - 2815 , - 1890 , - 4325 , - 4744 , - 3147 , - 4910 , - 4657 , - 2388 , - 3479 , - 2554 , - 4989 , - 32 , - 3811 , - 198 , - 5321 , - 3052 , - 4143 , - 3218 , - 277 , - 696 , - 4475 , - 862 , - 609 , - 3716 , - 4807 , - 3882 , - 941 , - 1360 , - 5139 , - 1526 , - 1273 , - 4380 , - 95 , - 4546 , - 1605 , - 2024 , - 427 , - 2190 , - 1937 , - 5044 , - 759 , - 5210 , - 2269 , - 2688 , - 1091 , - 2854 , - 2601 , - 332 , - 1423 , - 498 , - 2933 , - 3352 , - 1755 , - 3518 , - 3265 , - 996 , - 2087 , - 1162 , - 3597 , - 4016 , - 2419 , - 4182 , - 3929 , - 1660 , - 2751 , - 1826 , - 4261 , - 4680 , - 3083 , - 4846 , - 4593 , - 2324 , - 3415 , - 2490 , - 4925 , - 5344 , - 3747 , - 134 , - 5257 , - 2988 , - 4079 , - 3154 , - 213 , - 632 , - 4411 , - 798 , - 545 , - 3652 , - 4743 , - 3818 , - 877 , - 1296 , - 5075 , - 1462 , - 1209 , - 4316 , - 31 , - 4482 , - 1541 , - 1960 , - 363 , - 2126 , - 1873 , - 4980 , - 695 , - 5146 , - 2205 , - 2624 , - 1027 , - 2790 , - 2537 , - 268 , - 1359 , - 434 , - 2869 , - 3288 , - 1691 , - 3454 , - 3201 , - 932 , - 2023 , - 1098 , - 3533 , - 3952 , - 2355 , - 4118 , - 3865 , - 1596 , - 2687 , - 1762 , - 4197 , - 4616 , - 3019 , - 4782 , - 4529 , - 2260 , - 3351 , - 2426 , - 4861 , - 5280 , - 3683 , - 70 , - 5193 , - 2924 , - 4015 , - 3090 , - 149 , - 568 , - 4347 , - 734 , - 481 , - 3588 , - 4679 , - 3754 , - 813 , - 1232 , - 5011 , - 1398 , - 1145 , - 4252 , - 5343 , - 4418 , - 1477 , - 1896 , - 299 , - 2062 , - 1809 , - 4916 , - 631 , - 5082 , - 2141 , - 2560 , - 963 , - 2726 , - 2473 , - 204 , - 1295 , - 370 , - 2805 , - 3224 , - 1627 , - 3390 , - 3137 , - 868 , - 1959 , - 1034 , - 3469 , - 3888 , - 2291 , - 4054 , - 3801 , - 1532 , - 2623 , - 1698 , - 4133 , - 4552 , - 2955 , - 4718 , - 4465 , - 2196 , - 3287 , - 2362 , - 4797 , - 5216 , - 3619 , - 6 , - 5129 , - 2860 , - 3951 , - 3026 , - 85 , - 504 , - 4283 , - 670 , - 417 , - 3524 , - 4615 , - 3690 , - 749 , - 1168 , - 4947 , - 1334 , - 1081 , - 4188 , - 5279 , - 4354 , - 1413 , - 1832 , - 235 , - 1998 , - 1745 , - 4852 , - 567 , - 5018 , - 2077 , - 2496 , - 899 , - 2662 , - 2409 , - 140 , - 1231 , - 306 , - 2741 , - 3160 , - 1563 , - 3326 , - 3073 , - 804 , - 1895 , - 970 , - 3405 , - 3824 , - 2227 , - 3990 , - 3737 , - 1468 , - 2559 , - 1634 , - 4069 , - 4488 , - 2891 , - 4654 , - 4401 , - 2132 , - 3223 , - 2298 , - 4733 , - 5152 , - 3555 , - 5318 , - 5065 , - 2796 , - 3887 , - 2962 , - 21 , - 440 , - 4219 , - 606 , - 353 , - 3460 , - 4551 , - 3626 , - 685 , - 1104 , - 4883 , - 1270 , - 1017 , - 4124 , - 5215 , - 4290 , - 1349 , - 1768 , - 171 , - 1934 , - 1681 , - 4788 , - 503 , - 4954 , - 2013 , - 2432 , - 835 , - 2598 , - 2345 , - 76 , - 1167 , - 242 , - 2677 , - 3096 , - 1499 , - 3262 , - 3009 , - 740 , - 1831 , - 906 , - 3341 , - 3760 , - 2163 , - 3926 , - 3673 , - 1404 , - 2495 , - 1570 , - 4005 , - 4424 , - 2827 , - 4590 , - 4337 , - 2068 , - 3159 , - 2234 , - 4669 , - 5088 , - 3491 , - 5254 , - 5001 , - 2732 , - 3823 , - 2898 , - 5333 , - 376 , - 4155 , - 542 , - 289 , - 3396 , - 4487 , - 3562 , - 621 , - 1040 , - 4819 , - 1206 , - 953 , - 4060 , - 5151 , - 4226 , - 1285 , - 1704 , - 107 , - 1870 , - 1617 , - 4724 , - 439 , - 4890 , - 1949 , - 2368 , - 771 , - 2534 , - 2281 , - 12 , - 1103 , - 178 , - 2613 , - 3032 , - 1435 , - 3198 , - 2945 , - 676 , - 1767 , - 842 , - 3277 , - 3696 , - 2099 , - 3862 , - 3609 , - 1340 , - 2431 , - 1506 , - 3941 , - 4360 , - 2763 , - 4526 , - 4273 , - 2004 , - 3095 , - 2170 , - 4605 , - 5024 , - 3427 , - 5190 , - 4937 , - 2668 , - 3759 , - 2834 , - 5269 , - 312 , - 4091 , - 478 , - 225 , - 3332 , - 4423 , - 3498 , - 557 , - 976 , - 4755 , - 1142 , - 889 , - 3996 , - 5087 , - 4162 , - 1221 , - 1640 , - 43 , - 1806 , - 1553 , - 4660 , - 375 , - 4826 , - 1885 , - 2304 , - 707 , - 2470 , - 2217 , - 5324 , - 1039 , - 114 , - 2549 , - 2968 , - 1371 , - 3134 , - 2881 , - 612 , - 1703 , - 778 , - 3213 , - 3632 , - 2035 , - 3798 , - 3545 , - 1276 , - 2367 , - 1442 , - 3877 , - 4296 , - 2699 , - 4462 , - 4209 , - 1940 , - 3031 , - 2106 , - 4541 , - 4960 , - 3363 , - 5126 , - 4873 , - 2604 , - 3695 , - 2770 , - 5205 , - 248 , - 4027 , - 414 , - 161 , - 3268 , - 4359 , - 3434 , - 493 , - 912 , - 4691 , - 1078 , - 825 , - 3932 , - 5023 , - 4098 , - 1157 , - 1576 , - 5355 , - 1742 , - 1489 , - 4596 , - 311 , - 4762 , - 1821 , - 2240 , - 643 , - 2406 , - 2153 , - 5260 , - 975 , - 50 , - 2485 , - 2904 , - 1307 , - 3070 , - 2817 , - 548 , - 1639 , - 714 , - 3149 , - 3568 , - 1971 , - 3734 , - 3481 , - 1212 , - 2303 , - 1378 , - 3813 , - 4232 , - 2635 , - 4398 , - 4145 , - 1876 , - 2967 , - 2042 , - 4477 , - 4896 , - 3299 , - 5062 , - 4809 , - 2540 , - 3631 , - 2706 , - 5141 , - 184 , - 3963 , - 350 , - 97 , - 3204 , - 4295 , - 3370 , - 429 , - 848 , - 4627 , - 1014 , - 761 , - 3868 , - 4959 , - 4034 , - 1093 , - 1512 , - 5291 , - 1678 , - 1425 , - 4532 , - 247 , - 4698 , - 1757 , - 2176 , - 579 , - 2342 , - 2089 , - 5196 , - 911 , - 5362 , - 2421 , - 2840 , - 1243 , - 3006 , - 2753 , - 484 , - 1575 , - 650 , - 3085 , - 3504 , - 1907 , - 3670 , - 3417 , - 1148 , - 2239 , - 1314 , - 3749 , - 4168 , - 2571 , - 4334 , - 4081 , - 1812 , - 2903 , - 1978 , - 4413 , - 4832 , - 3235 , - 4998 , - 4745 , - 2476 , - 3567 , - 2642 , - 5077 , - 120 , - 3899 , - 286 , - 33 , - 3140 , - 4231 , - 3306 , - 365 , - 784 , - 4563 , - 950 , - 697 , - 3804 , - 4895 , - 3970 , - 1029 , - 1448 , - 5227 , - 1614 , - 1361 , - 4468 , - 183 , - 4634 , - 1693 , - 2112 , - 515 , - 2278 , - 2025 , - 5132 , - 847 , - 5298 , - 2357 , - 2776 , - 1179 , - 2942 , - 2689 , - 420 , - 1511 , - 586 , - 3021 , - 3440 , - 1843 , - 3606 , - 3353 , - 1084 , - 2175 , - 1250 , - 3685 , - 4104 , - 2507 , - 4270 , - 4017 , - 1748 , - 2839 , - 1914 , - 4349 , - 4768 , - 3171 , - 4934 , - 4681 , - 2412 , - 3503 , - 2578 , - 5013 , - 56 , - 3835 , - 222 , - 5345 , - 3076 , - 4167 , - 3242 , - 301 , - 720 , - 4499 , - 886 , - 633 , - 3740 , - 4831 , - 3906 , - 965 , - 1384 , - 5163 , - 1550 , - 1297 , - 4404 , - 119 , - 4570 , - 1629 , - 2048 , - 451 , - 2214 , - 1961 , - 5068 , - 783 , - 5234 , - 2293 , - 2712 , - 1115 , - 2878 , - 2625 , - 356 , - 1447 , - 522 , - 2957 , - 3376 , - 1779 , - 3542 , - 3289 , - 1020 , - 2111 , - 1186 , - 3621 , - 4040 , - 2443 , - 4206 , - 3953 , - 1684 , - 2775 , - 1850 , - 4285 , - 4704 , - 3107 , - 4870 , - 4617 , - 2348 , - 3439 , - 2514 , - 4949 , - 5368 , - 3771 , - 158 , - 5281 , - 3012 , - 4103 , - 3178 , - 237 , - 656 , - 4435 , - 822 , - 569 , - 3676 , - 4767 , - 3842 , - 901 , - 1320 , - 5099 , - 1486 , - 1233 , - 4340 , - 55 , - 4506 , - 1565 , - 1984 , - 387 , - 2150 , - 1897 , - 5004 , - 719 , - 5170 , - 2229 , - 2648 , - 1051 , - 2814 , - 2561 , - 292 , - 1383 , - 458 , - 2893 , - 3312 , - 1715 , - 3478 , - 3225 , - 956 , - 2047 , - 1122 , - 3557 , - 3976 , - 2379 , - 4142 , - 3889 , - 1620 , - 2711 , - 1786 , - 4221 , - 4640 , - 3043 , - 4806 , - 4553 , - 2284 , - 3375 , - 2450 , - 4885 , - 5304 , - 3707 , - 94 , - 5217 , - 2948 , - 4039 , - 3114 , - 173 , - 592 , - 4371 , - 758 , - 505 , - 3612 , - 4703 , - 3778 , - 837 , - 1256 , - 5035 , - 1422 , - 1169 , - 4276 , - 5367 , - 4442 , - 1501 , - 1920 , - 323 , - 2086 , - 1833 , - 4940 , - 655 , - 5106 , - 2165 , - 2584 , - 987 , - 2750 , - 2497 , - 228 , - 1319 , - 394 , - 2829 , - 3248 , - 1651 , - 3414 , - 3161 , - 892 , - 1983 , - 1058 , - 3493 , - 3912 , - 2315 , - 4078 , - 3825 , - 1556 , - 2647 , - 1722 , - 4157 , - 4576 , - 2979 , - 4742 , - 4489 , - 2220 , - 3311 , - 2386 , - 4821 , - 5240 , - 3643 , - 30 , - 5153 , - 2884 , - 3975 , - 3050 , - 109 , - 528 , - 4307 , - 694 , - 441 , - 3548 , - 4639 , - 3714 , - 773 , - 1192 , - 4971 , - 1358 , - 1105 , - 4212 , - 5303 , - 4378 , - 1437 , - 1856 , - 259 , - 2022 , - 1769 , - 4876 , - 591 , - 5042 , - 2101 , - 2520 , - 923 , - 2686 , - 2433 , - 164 , - 1255 , - 330 , - 2765 , - 3184 , - 1587 , - 3350 , - 3097 , - 828 , - 1919 , - 994 , - 3429 , - 3848 , - 2251 , - 4014 , - 3761 , - 1492 , - 2583 , - 1658 , - 4093 , - 4512 , - 2915 , - 4678 , - 4425 , - 2156 , - 3247 , - 2322 , - 4757 , - 5176 , - 3579 , - 5342 , - 5089 , - 2820 , - 3911 , - 2986 , - 45 , - 464 , - 4243 , - 630 , - 377 , - 3484 , - 4575 , - 3650 , - 709 , - 1128 , - 4907 , - 1294 , - 1041 , - 4148 , - 5239 , - 4314 , - 1373 , - 1792 , - 195 , - 1958 , - 1705 , - 4812 , - 527 , - 4978 , - 2037 , - 2456 , - 859 , - 2622 , - 2369 , - 100 , - 1191 , - 266 , - 2701 , - 3120 , - 1523 , - 3286 , - 3033 , - 764 , - 1855 , - 930 , - 3365 , - 3784 , - 2187 , - 3950 , - 3697 , - 1428 , - 2519 , - 1594 , - 4029 , - 4448 , - 2851 , - 4614 , - 4361 , - 2092 , - 3183 , - 2258 , - 4693 , - 5112 , - 3515 , - 5278 , - 5025 , - 2756 , - 3847 , - 2922 , - 5357 , - 400 , - 4179 , - 566 , - 313 , - 3420 , - 4511 , - 3586 , - 645 , - 1064 , - 4843 , - 1230 , - 977 , - 4084 , - 5175 , - 4250 , - 1309 , - 1728 , - 131 , - 1894 , - 1641 , - 4748 , - 463 , - 4914 , - 1973 , - 2392 , - 795 , - 2558 , - 2305 , - 36 , - 1127 , - 202 , - 2637 , - 3056 , - 1459 , - 3222 , - 2969 , - 700 , - 1791 , - 866 , - 3301 , - 3720 , - 2123 , - 3886 , - 3633 , - 1364 , - 2455 , - 1530 , - 3965 , - 4384 , - 2787 , - 4550 , - 4297 , - 2028 , - 3119 , - 2194 , - 4629 , - 5048 , - 3451 , - 5214 , - 4961 , - 2692 , - 3783 , - 2858 , - 5293 , - 336 , - 4115 , - 502 , - 249 , - 3356 , - 4447 , - 3522 , - 581 , - 1000 , - 4779 , - 1166 , - 913 , - 4020 , - 5111 , - 4186 , - 1245 , - 1664 , - 67 , - 1830 , - 1577 , - 4684 , - 399 , - 4850 , - 1909 , - 2328 , - 731 , - 2494 , - 2241 , - 5348 , - 1063 , - 138 , - 2573 , - 2992 , - 1395 , - 3158 , - 2905 , - 636 , - 1727 , - 802 , - 3237 , - 3656 , - 2059 , - 3822 , - 3569 , - 1300 , - 2391 , - 1466 , - 3901 , - 4320 , - 2723 , - 4486 , - 4233 , - 1964 , - 3055 , - 2130 , - 4565 , - 4984 , - 3387 , - 5150 , - 4897 , - 2628 , - 3719 , - 2794 , - 5229 , - 272 , - 4051 , - 438 , - 185 , - 3292 , - 4383 , - 3458 , - 517 , - 936 , - 4715 , - 1102 , - 849 , - 3956 , - 5047 , - 4122 , - 1181 , - 1600 , - 3 , - 1766 , - 1513 , - 4620 , - 335 , - 4786 , - 1845 , - 2264 , - 667 , - 2430 , - 2177 , - 5284 , - 999 , - 74 , - 2509 , - 2928 , - 1331 , - 3094 , - 2841 , - 572 , - 1663 , - 738 , - 3173 , - 3592 , - 1995 , - 3758 , - 3505 , - 1236 , - 2327 , - 1402 , - 3837 , - 4256 , - 2659 , - 4422 , - 4169 , - 1900 , - 2991 , - 2066 , - 4501 , - 4920 , - 3323 , - 5086 , - 4833 , - 2564 , - 3655 , - 2730 , - 5165 , - 208 , - 3987 , - 374 , - 121 , - 3228 , - 4319 , - 3394 , - 453 , - 872 , - 4651 , - 1038 , - 785 , - 3892 , - 4983 , - 4058 , - 1117 , - 1536 , - 5315 , - 1702 , - 1449 , - 4556 , - 271 , - 4722 , - 1781 , - 2200 , - 603 , - 2366 , - 2113 , - 5220 , - 935 , - 10 , - 2445 , - 2864 , - 1267 , - 3030 , - 2777 , - 508 , - 1599 , - 674 , - 3109 , - 3528 , - 1931 , - 3694 , - 3441 , - 1172 , - 2263 , - 1338 , - 3773 , - 4192 , - 2595 , - 4358 , - 4105 , - 1836 , - 2927 , - 2002 , - 4437 , - 4856 , - 3259 , - 5022 , - 4769 , - 2500 , - 3591 , - 2666 , - 5101 , - 144 , - 3923 , - 310 , - 57 , - 3164 , - 4255 , - 3330 , - 389 , - 808 , - 4587 , - 974 , - 721 , - 3828 , - 4919 , - 3994 , - 1053 , - 1472 , - 5251 , - 1638 , - 1385 , - 4492 , - 207 , - 4658 , - 1717 , - 2136 , - 539 , - 2302 , - 2049 , - 5156 , - 871 , - 5322 , - 2381 , - 2800 , - 1203 , - 2966 , - 2713 , - 444 , - 1535 , - 610 , - 3045 , - 3464 , - 1867 , - 3630 , - 3377 , - 1108 , - 2199 , - 1274 , - 3709 , - 4128 , - 2531 , - 4294 , - 4041 , - 1772 , - 2863 , - 1938 , - 4373 , - 4792 , - 3195 , - 4958 , - 4705 , - 2436 , - 3527 , - 2602 , - 5037 , - 80 , - 3859 , - 246 , - 5369 , - 3100 , - 4191 , - 3266 , - 325 , - 744 , - 4523 , - 910 , - 657 , - 3764 , - 4855 , - 3930 , - 989 , - 1408 , - 5187 , - 1574 , - 1321 , - 4428 , - 143 , - 4594 , - 1653 , - 2072 , - 475 , - 2238 , - 1985 , - 5092 , - 807 , - 5258 , - 2317 , - 2736 , - 1139 , - 2902 , - 2649 , - 380 , - 1471 , - 546 , - 2981 , - 3400 , - 1803 , - 3566 , - 3313 , - 1044 , - 2135 , - 1210 , - 3645 , - 4064 , - 2467 , - 4230 , - 3977 , - 1708 , - 2799 , - 1874 , - 4309 , - 4728 , - 3131 , - 4894 , - 4641 , - 2372 , - 3463 , - 2538 , - 4973 , - 16 , - 3795 , - 182 , - 5305 , - 3036 , - 4127 , - 3202 , - 261 , - 680 , - 4459 , - 846 , - 593 , - 3700 , - 4791 , - 3866 , - 925 , - 1344 , - 5123 , - 1510 , - 1257 , - 4364 , - 79 , - 4530 , - 1589 , - 2008 , - 411 , - 2174 , - 1921 , - 5028 , - 743 , - 5194 , - 2253 , - 2672 , - 1075 , - 2838 , - 2585 , - 316 , - 1407 , - 482 , - 2917 , - 3336 , - 1739 , - 3502 , - 3249 , - 980 , - 2071 , - 1146 , - 3581 , - 4000 , - 2403 , - 4166 , - 3913 , - 1644 , - 2735 , - 1810 , - 4245 , - 4664 , - 3067 , - 4830 , - 4577 , - 2308 , - 3399 , - 2474 , - 4909 , - 5328 , - 3731 , - 118 , - 5241 , - 2972 , - 4063 , - 3138 , - 197 , - 616 , - 4395 , - 782 , - 529 , - 3636 , - 4727 , - 3802 , - 861 , - 1280 , - 5059 , - 1446 , - 1193 , - 4300 , - 15 , - 4466 , - 1525 , - 1944 , - 347 , - 2110 , - 1857 , - 4964 , - 679 , - 5130 , - 2189 , - 2608 , - 1011 , - 2774 , - 2521 , - 252 , - 1343 , - 418 , - 2853 , - 3272 , - 1675 , - 3438 , - 3185 , - 916 , - 2007 , - 1082 , - 3517 , - 3936 , - 2339 , - 4102 , - 3849 , - 1580 , - 2671 , - 1746 , - 4181 , - 4600 , - 3003 , - 4766 , - 4513 , - 2244 , - 3335 , - 2410 , - 4845 , - 5264 , - 3667 , - 54 , - 5177 , - 2908 , - 3999 , - 3074 , - 133 , - 552 , - 4331 , - 718 , - 465 , - 3572 , - 4663 , - 3738 , - 797 , - 1216 , - 4995 , - 1382 , - 1129 , - 4236 , - 5327 , - 4402 , - 1461 , - 1880 , - 283 , - 2046 , - 1793 , - 4900 , - 615 , - 5066 , - 2125 , - 2544 , - 947 , - 2710 , - 2457 , - 188 , - 1279 , - 354 , - 2789 , - 3208 , - 1611 , - 3374 , - 3121 , - 852 , - 1943 , - 1018 , - 3453 , - 3872 , - 2275 , - 4038 , - 3785 , - 1516 , - 2607 , - 1682 , - 4117 , - 4536 , - 2939 , - 4702 , - 4449 , - 2180 , - 3271 , - 2346 , - 4781 , - 5200 , - 3603 , - 5366 , - 5113 , - 2844 , - 3935 , - 3010 , - 69 , - 488 , - 4267 , - 654 , - 401 , - 3508 , - 4599 , - 3674 , - 733 , - 1152 , - 4931 , - 1318 , - 1065 , - 4172 , - 5263 , - 4338 , - 1397 , - 1816 , - 219 , - 1982 , - 1729 , - 4836 , - 551 , - 5002 , - 2061 , - 2480 , - 883 , - 2646 , - 2393 , - 124 , - 1215 , - 290 , - 2725 , - 3144 , - 1547 , - 3310 , - 3057 , - 788 , - 1879 , - 954 , - 3389 , - 3808 , - 2211 , - 3974 , - 3721 , - 1452 , - 2543 , - 1618 , - 4053 , - 4472 , - 2875 , - 4638 , - 4385 , - 2116 , - 3207 , - 2282 , - 4717 , - 5136 , - 3539 , - 5302 , - 5049 , - 2780 , - 3871 , - 2946 , - 5 , - 424 , - 4203 , - 590 , - 337 , - 3444 , - 4535 , - 3610 , - 669 , - 1088 , - 4867 , - 1254 , - 1001 , - 4108 , - 5199 , - 4274 , - 1333 , - 1752 , - 155 , - 1918 , - 1665 , - 4772 , - 487 , - 4938 , - 1997 , - 2416 , - 819 , - 2582 , - 2329 , - 60 , - 1151 , - 226 , - 2661 , - 3080 , - 1483 , - 3246 , - 2993 , - 724 , - 1815 , - 890 , - 3325 , - 3744 , - 2147 , - 3910 , - 3657 , - 1388 , - 2479 , - 1554 , - 3989 , - 4408 , - 2811 , - 4574 , - 4321 , - 2052 , - 3143 , - 2218 , - 4653 , - 5072 , - 3475 , - 5238 , - 4985 , - 2716 , - 3807 , - 2882 , - 5317 , - 360 , - 4139 , - 526 , - 273 , - 3380 , - 4471 , - 3546 , - 605 , - 1024 , - 4803 , - 1190 , - 937 , - 4044 , - 5135 , - 4210 , - 1269 , - 1688 , - 91 , - 1854 , - 1601 , - 4708 , - 423 , - 4874 , - 1933 , - 2352 , - 755 , - 2518 , - 2265 , - 5372 , - 1087 , - 162 , - 2597 , - 3016 , - 1419 , - 3182 , - 2929 , - 660 , - 1751 , - 826 , - 3261 , - 3680 , - 2083 , - 3846 , - 3593 , - 1324 , - 2415 , - 1490 , - 3925 , - 4344 , - 2747 , - 4510 , - 4257 , - 1988 , - 3079 , - 2154 , - 4589 , - 5008 , - 3411 , - 5174 , - 4921 , - 2652 , - 3743 , - 2818 , - 5253 , - 296 , - 4075 , - 462 , - 209 , - 3316 , - 4407 , - 3482 , - 541 , - 960 , - 4739 , - 1126 , - 873 , - 3980 , - 5071 , - 4146 , - 1205 , - 1624 , - 27 , - 1790 , - 1537 , - 4644 , - 359 , - 4810 , - 1869 , - 2288 , - 691 , - 2454 , - 2201 , - 5308 , - 1023 , - 98 , - 2533 , - 2952 , - 1355 , - 3118 , - 2865 , - 596 , - 1687 , - 762 , - 3197 , - 3616 , - 2019 , - 3782 , - 3529 , - 1260 , - 2351 , - 1426 , - 3861 , - 4280 , - 2683 , - 4446 , - 4193 , - 1924 , - 3015 , - 2090 , - 4525 , - 4944 , - 3347 , - 5110 , - 4857 , - 2588 , - 3679 , - 2754 , - 5189 , - 232 , - 4011 , - 398 , - 145 , - 3252 , - 4343 , - 3418 , - 477 , - 896 , - 4675 , - 1062 , - 809 , - 3916 , - 5007 , - 4082 , - 1141 , - 1560 , - 5339 , - 1726 , - 1473 , - 4580 , - 295 , - 4746 , - 1805 , - 2224 , - 627 , - 2390 , - 2137 , - 5244 , - 959 , - 34 , - 2469 , - 2888 , - 1291 , - 3054 , - 2801 , - 532 , - 1623 , - 698 , - 3133 , - 3552 , - 1955 , - 3718 , - 3465 , - 1196 , - 2287 , - 1362 , - 3797 , - 4216 , - 2619 , - 4382 , - 4129 , - 1860 , - 2951 , - 2026 , - 4461 , - 4880 , - 3283 , - 5046 , - 4793 , - 2524 , - 3615 , - 2690 , - 5125 , - 168 , - 3947 , - 334 , - 81 , - 3188 , - 4279 , - 3354 , - 413 , - 832 , - 4611 , - 998 , - 745 , - 3852 , - 4943 , - 4018 , - 1077 , - 1496 , - 5275 , - 1662 , - 1409 , - 4516 , - 231 , - 4682 , - 1741 , - 2160 , - 563 , - 2326 , - 2073 , - 5180 , - 895 , - 5346 , - 2405 , - 2824 , - 1227 , - 2990 , - 2737 , - 468 , - 1559 , - 634 , - 3069 , - 3488 , - 1891 , - 3654 , - 3401 , - 1132 , - 2223 , - 1298 , - 3733 , - 4152 , - 2555 , - 4318 , - 4065 , - 1796 , - 2887 , - 1962 , - 4397 , - 4816 , - 3219 , - 4982 , - 4729 , - 2460 , - 3551 , - 2626 , - 5061 , - 104 , - 3883 , - 270 , - 17 , - 3124 , - 4215 , - 3290 , - 349 , - 768 , - 4547 , - 934 , - 681 , - 3788 , - 4879 , - 3954 , - 1013 , - 1432 , - 5211 , - 1598 , - 1345 , - 4452 , - 167 , - 4618 , - 1677 , - 2096 , - 499 , - 2262 , - 2009 , - 5116 , - 831 , - 5282 , - 2341 , - 2760 , - 1163 , - 2926 , - 2673 , - 404 , - 1495 , - 570 , - 3005 , - 3424 , - 1827 , - 3590 , - 3337 , - 1068 , - 2159 , - 1234 , - 3669 , - 4088 , - 2491 , - 4254 , - 4001 , - 1732 , - 2823 , - 1898 , - 4333 , - 4752 , - 3155 , - 4918 , - 4665 , - 2396 , - 3487 , - 2562 , - 4997 , - 40 , - 3819 , - 206 , - 5329 , - 3060 , - 4151 , - 3226 , - 285 , - 704 , - 4483 , - 870 , - 617 , - 3724 , - 4815 , - 3890 , - 949 , - 1368 , - 5147 , - 1534 , - 1281 , - 4388 , - 103 , - 4554 , - 1613 , - 2032 , - 435 , - 2198 , - 1945 , - 5052 , - 767 , - 5218 , - 2277 , - 2696 , - 1099 , - 2862 , - 2609 , - 340 , - 1431 , - 506 , - 2941 , - 3360 , - 1763 , - 3526 , - 3273 , - 1004 , - 2095 , - 1170 , - 3605 , - 4024 , - 2427 , - 4190 , - 3937 , - 1668 , - 2759 , - 1834 , - 4269 , - 4688 , - 3091 , - 4854 , - 4601 , - 2332 , - 3423 , - 2498 , - 4933 , - 5352 , - 3755 , - 142 , - 5265 , - 2996 , - 4087 , - 3162 , - 221 , - 640 , - 4419 , - 806 , - 553 , - 3660 , - 4751 , - 3826 , - 885 , - 1304 , - 5083 , - 1470 , - 1217 , - 4324 , - 39 , - 4490 , - 1549 , - 1968 , - 371 , - 2134 , - 1881 , - 4988 , - 703 , - 5154 , - 2213 , - 2632 , - 1035 , - 2798 , - 2545 , - 276 , - 1367 , - 442 , - 2877 , - 3296 , - 1699 , - 3462 , - 3209 , - 940 , - 2031 , - 1106 , - 3541 , - 3960 , - 2363 , - 4126 , - 3873 , - 1604 , - 2695 , - 1770 , - 4205 , - 4624 , - 3027 , - 4790 , - 4537 , - 2268 , - 3359 , - 2434 , - 4869 , - 5288 , - 3691 , - 78 , - 5201 , - 2932 , - 4023 , - 3098 , - 157 , - 576 , - 4355 , - 742 , - 489 , - 3596 , - 4687 , - 3762 , - 821 , - 1240 , - 5019 , - 1406 , - 1153 , - 4260 , - 5351 , - 4426 , - 1485 , - 1904 , - 307 , - 2070 , - 1817 , - 4924 , - 639 , - 5090 , - 2149 , - 2568 , - 971 , - 2734 , - 2481 , - 212 , - 1303 , - 378 , - 2813 , - 3232 , - 1635 , - 3398 , - 3145 , - 876 , - 1967 , - 1042 , - 3477 , - 3896 , - 2299 , - 4062 , - 3809 , - 1540 , - 2631 , - 1706 , - 4141 , - 4560 , - 2963 , - 4726 , - 4473 , - 2204 , - 3295 , - 2370 , - 4805 , - 5224 , - 3627 , - 14 , - 5137 , - 2868 , - 3959 , - 3034 , - 93 , - 512 , - 4291 , - 678 , - 425 , - 3532 , - 4623 , - 3698 , - 757 , - 1176 , - 4955 , - 1342 , - 1089 , - 4196 , - 5287 , - 4362 , - 1421 , - 1840 , - 243 , - 2006 , - 1753 , - 4860 , - 575 , - 5026 , - 2085 , - 2504 , - 907 , - 2670 , - 2417 , - 148 , - 1239 , - 314 , - 2749 , - 3168 , - 1571 , - 3334 , - 3081 , - 812 , - 1903 , - 978 , - 3413 , - 3832 , - 2235 , - 3998 , - 3745 , - 1476 , - 2567 , - 1642 , - 4077 , - 4496 , - 2899 , - 4662 , - 4409 , - 2140 , - 3231 , - 2306 , - 4741 , - 5160 , - 3563 , - 5326 , - 5073 , - 2804 , - 3895 , - 2970 , - 29 , - 448 , - 4227 , - 614 , - 361 , - 3468 , - 4559 , - 3634 , - 693 , - 1112 , - 4891 , - 1278 , - 1025 , - 4132 , - 5223 , - 4298 , - 1357 , - 1776 , - 179 , - 1942 , - 1689 , - 4796 , - 511 , - 4962 , - 2021 , - 2440 , - 843 , - 2606 , - 2353 , - 84 , - 1175 , - 250 , - 2685 , - 3104 , - 1507 , - 3270 , - 3017 , - 748 , - 1839 , - 914 , - 3349 , - 3768 , - 2171 , - 3934 , - 3681 , - 1412 , - 2503 , - 1578 , - 4013 , - 4432 , - 2835 , - 4598 , - 4345 , - 2076 , - 3167 , - 2242 , - 4677 , - 5096 , - 3499 , - 5262 , - 5009 , - 2740 , - 3831 , - 2906 , - 5341 , - 384 , - 4163 , - 550 , - 297 , - 3404 , - 4495 , - 3570 , - 629 , - 1048 , - 4827 , - 1214 , - 961 , - 4068 , - 5159 , - 4234 , - 1293 , - 1712 , - 115 , - 1878 , - 1625 , - 4732 , - 447 , - 4898 , - 1957 , - 2376 , - 779 , - 2542 , - 2289 , - 20 , - 1111 , - 186 , - 2621 , - 3040 , - 1443 , - 3206 , - 2953 , - 684 , - 1775 , - 850 , - 3285 , - 3704 , - 2107 , - 3870 , - 3617 , - 1348 , - 2439 , - 1514 , - 3949 , - 4368 , - 2771 , - 4534 , - 4281 , - 2012 , - 3103 , - 2178 , - 4613 , - 5032 , - 3435 , - 5198 , - 4945 , - 2676 , - 3767 , - 2842 , - 5277 , - 320 , - 4099 , - 486 , - 233 , - 3340 , - 4431 , - 3506 , - 565 , - 984 , - 4763 , - 1150 , - 897 , - 4004 , - 5095 , - 4170 , - 1229 , - 1648 , - 51 , - 1814 , - 1561 , - 4668 , - 383 , - 4834 , - 1893 , - 2312 , - 715 , - 2478 , - 2225 , - 5332 , - 1047 , - 122 , - 2557 , - 2976 , - 1379 , - 3142 , - 2889 , - 620 , - 1711 , - 786 , - 3221 , - 3640 , - 2043 , - 3806 , - 3553 , - 1284 , - 2375 , - 1450 , - 3885 , - 4304 , - 2707 , - 4470 , - 4217 , - 1948 , - 3039 , - 2114 , - 4549 , - 4968 , - 3371 , - 5134 , - 4881 , - 2612 , - 3703 , - 2778 , - 5213 , - 256 , - 4035 , - 422 , - 169 , - 3276 , - 4367 , - 3442 , - 501 , - 920 , - 4699 , - 1086 , - 833 , - 3940 , - 5031 , - 4106 , - 1165 , - 1584 , - 5363 , - 1750 , - 1497 , - 4604 , - 319 , - 4770 , - 1829 , - 2248 , - 651 , - 2414 , - 2161 , - 5268 , - 983 , - 58 , - 2493 , - 2912 , - 1315 , - 3078 , - 2825 , - 556 , - 1647 , - 722 , - 3157 , - 3576 , - 1979 , - 3742 , - 3489 , - 1220 , - 2311 , - 1386 , - 3821 , - 4240 , - 2643 , - 4406 , - 4153 , - 1884 , - 2975 , - 2050 , - 4485 , - 4904 , - 3307 , - 5070 , - 4817 , - 2548 , - 3639 , - 2714 , - 5149 , - 192 , - 3971 , - 358 , - 105 , - 3212 , - 4303 , - 3378 , - 437 , - 856 , - 4635 , - 1022 , - 769 , - 3876 , - 4967 , - 4042 , - 1101 , - 1520 , - 5299 , - 1686 , - 1433 , - 4540 , - 255 , - 4706 , - 1765 , - 2184 , - 587 , - 2350 , - 2097 , - 5204 , - 919 , - 5370 , - 2429 , - 2848 , - 1251 , - 3014 , - 2761 , - 492 , - 1583 , - 658 , - 3093 , - 3512 , - 1915 , - 3678 , - 3425 , - 1156 , - 2247 , - 1322 , - 3757 , - 4176 , - 2579 , - 4342 , - 4089 , - 1820 , - 2911 , - 1986 , - 4421 , - 4840 , - 3243 , - 5006 , - 4753 , - 2484 , - 3575 , - 2650 , - 5085 , - 128 , - 3907 , - 294 , - 41 , - 3148 , - 4239 , - 3314 , - 373 , - 792 , - 4571 , - 958 , - 705 , - 3812 , - 4903 , - 3978 , - 1037 , - 1456 , - 5235 , - 1622 , - 1369 , - 4476 , - 191 , - 4642 , - 1701 , - 2120 , - 523 , - 2286 , - 2033 , - 5140 , - 855 , - 5306 , - 2365 , - 2784 , - 1187 , - 2950 , - 2697 , - 428 , - 1519 , - 594 , - 3029 , - 3448 , - 1851 , - 3614 , - 3361 , - 1092 , - 2183 , - 1258 , - 3693 , - 4112 , - 2515 , - 4278 , - 4025 , - 1756 , - 2847 , - 1922 , - 4357 , - 4776 , - 3179 , - 4942 , - 4689 , - 2420 , - 3511 , - 2586 , - 5021 , - 64 , - 3843 , - 230 , - 5353 , - 3084 , - 4175 , - 3250 , - 309 , - 728 , - 4507 , - 894 , - 641 , - 3748 , - 4839 , - 3914 , - 973 , - 1392 , - 5171 , - 1558 , - 1305 , - 4412 , - 127 , - 4578 , - 1637 , - 2056 , - 459 , - 2222 , - 1969 , - 5076 , - 791 , - 5242 , - 2301 , - 2720 , - 1123 , - 2886 , - 2633 , - 364 , - 1455 , - 530 , - 2965 , - 3384 , - 1787 , - 3550 , - 3297 , - 1028 , - 2119 , - 1194 , - 3629 , - 4048 , - 2451 , - 4214 , - 3961 , - 1692 , - 2783 , - 1858 , - 4293 , - 4712 , - 3115 , - 4878 , - 4625 , - 2356 , - 3447 , - 2522 , - 4957 , - 0 , - 3317 , - 2894 , - 2811 , - 1708 , - 3665 , - 1882 , - 439 , - 3416 , - 4013 , - 870 , - 3507 , - 5124 , - 4361 , - 5298 , - 1135 , - 1392 , - 4709 , - 4286 , - 4203 , - 3100 , - 5057 , - 3274 , - 1831 , - 4808 , - 5405 , - 2262 , - 4899 , - 1076 , - 313 , - 1250 , - 2527 , - 2784 , - 661 , - 238 , - 155 , - 4492 , - 1009 , - 4666 , - 3223 , - 760 , - 1357 , - 3654 , - 851 , - 2468 , - 1705 , - 2642 , - 3919 , - 4176 , - 2053 , - 1630 , - 1547 , - 444 , - 2401 , - 618 , - 4615 , - 2152 , - 2749 , - 5046 , - 2243 , - 3860 , - 3097 , - 4034 , - 5311 , - 128 , - 3445 , - 3022 , - 2939 , - 1836 , - 3793 , - 2010 , - 567 , - 3544 , - 4141 , - 998 , - 3635 , - 5252 , - 4489 , - 5426 , - 1263 , - 1520 , - 4837 , - 4414 , - 4331 , - 3228 , - 5185 , - 3402 , - 1959 , - 4936 , - 93 , - 2390 , - 5027 , - 1204 , - 441 , - 1378 , - 2655 , - 2912 , - 789 , - 366 , - 283 , - 4620 , - 1137 , - 4794 , - 3351 , - 888 , - 1485 , - 3782 , - 979 , - 2596 , - 1833 , - 2770 , - 4047 , - 4304 , - 2181 , - 1758 , - 1675 , - 572 , - 2529 , - 746 , - 4743 , - 2280 , - 2877 , - 5174 , - 2371 , - 3988 , - 3225 , - 4162 , - 5439 , - 256 , - 3573 , - 3150 , - 3067 , - 1964 , - 3921 , - 2138 , - 695 , - 3672 , - 4269 , - 1126 , - 3763 , - 5380 , - 4617 , - 114 , - 1391 , - 1648 , - 4965 , - 4542 , - 4459 , - 3356 , - 5313 , - 3530 , - 2087 , - 5064 , - 221 , - 2518 , - 5155 , - 1332 , - 569 , - 1506 , - 2783 , - 3040 , - 917 , - 494 , - 411 , - 4748 , - 1265 , - 4922 , - 3479 , - 1016 , - 1613 , - 3910 , - 1107 , - 2724 , - 1961 , - 2898 , - 4175 , - 4432 , - 2309 , - 1886 , - 1803 , - 700 , - 2657 , - 874 , - 4871 , - 2408 , - 3005 , - 5302 , - 2499 , - 4116 , - 3353 , - 4290 , - 127 , - 384 , - 3701 , - 3278 , - 3195 , - 2092 , - 4049 , - 2266 , - 823 , - 3800 , - 4397 , - 1254 , - 3891 , - 68 , - 4745 , - 242 , - 1519 , - 1776 , - 5093 , - 4670 , - 4587 , - 3484 , - 1 , - 3658 , - 2215 , - 5192 , - 349 , - 2646 , - 5283 , - 1460 , - 697 , - 1634 , - 2911 , - 3168 , - 1045 , - 622 , - 539 , - 4876 , - 1393 , - 5050 , - 3607 , - 1144 , - 1741 , - 4038 , - 1235 , - 2852 , - 2089 , - 3026 , - 4303 , - 4560 , - 2437 , - 2014 , - 1931 , - 828 , - 2785 , - 1002 , - 4999 , - 2536 , - 3133 , - 5430 , - 2627 , - 4244 , - 3481 , - 4418 , - 255 , - 512 , - 3829 , - 3406 , - 3323 , - 2220 , - 4177 , - 2394 , - 951 , - 3928 , - 4525 , - 1382 , - 4019 , - 196 , - 4873 , - 370 , - 1647 , - 1904 , - 5221 , - 4798 , - 4715 , - 3612 , - 129 , - 3786 , - 2343 , - 5320 , - 477 , - 2774 , - 5411 , - 1588 , - 825 , - 1762 , - 3039 , - 3296 , - 1173 , - 750 , - 667 , - 5004 , - 1521 , - 5178 , - 3735 , - 1272 , - 1869 , - 4166 , - 1363 , - 2980 , - 2217 , - 3154 , - 4431 , - 4688 , - 2565 , - 2142 , - 2059 , - 956 , - 2913 , - 1130 , - 5127 , - 2664 , - 3261 , - 118 , - 2755 , - 4372 , - 3609 , - 4546 , - 383 , - 640 , - 3957 , - 3534 , - 3451 , - 2348 , - 4305 , - 2522 , - 1079 , - 4056 , - 4653 , - 1510 , - 4147 , - 324 , - 5001 , - 498 , - 1775 , - 2032 , - 5349 , - 4926 , - 4843 , - 3740 , - 257 , - 3914 , - 2471 , - 8 , - 605 , - 2902 , - 99 , - 1716 , - 953 , - 1890 , - 3167 , - 3424 , - 1301 , - 878 , - 795 , - 5132 , - 1649 , - 5306 , - 3863 , - 1400 , - 1997 , - 4294 , - 1491 , - 3108 , - 2345 , - 3282 , - 4559 , - 4816 , - 2693 , - 2270 , - 2187 , - 1084 , - 3041 , - 1258 , - 5255 , - 2792 , - 3389 , - 246 , - 2883 , - 4500 , - 3737 , - 4674 , - 511 , - 768 , - 4085 , - 3662 , - 3579 , - 2476 , - 4433 , - 2650 , - 1207 , - 4184 , - 4781 , - 1638 , - 4275 , - 452 , - 5129 , - 626 , - 1903 , - 2160 , - 37 , - 5054 , - 4971 , - 3868 , - 385 , - 4042 , - 2599 , - 136 , - 733 , - 3030 , - 227 , - 1844 , - 1081 , - 2018 , - 3295 , - 3552 , - 1429 , - 1006 , - 923 , - 5260 , - 1777 , - 5434 , - 3991 , - 1528 , - 2125 , - 4422 , - 1619 , - 3236 , - 2473 , - 3410 , - 4687 , - 4944 , - 2821 , - 2398 , - 2315 , - 1212 , - 3169 , - 1386 , - 5383 , - 2920 , - 3517 , - 374 , - 3011 , - 4628 , - 3865 , - 4802 , - 639 , - 896 , - 4213 , - 3790 , - 3707 , - 2604 , - 4561 , - 2778 , - 1335 , - 4312 , - 4909 , - 1766 , - 4403 , - 580 , - 5257 , - 754 , - 2031 , - 2288 , - 165 , - 5182 , - 5099 , - 3996 , - 513 , - 4170 , - 2727 , - 264 , - 861 , - 3158 , - 355 , - 1972 , - 1209 , - 2146 , - 3423 , - 3680 , - 1557 , - 1134 , - 1051 , - 5388 , - 1905 , - 122 , - 4119 , - 1656 , - 2253 , - 4550 , - 1747 , - 3364 , - 2601 , - 3538 , - 4815 , - 5072 , - 2949 , - 2526 , - 2443 , - 1340 , - 3297 , - 1514 , - 71 , - 3048 , - 3645 , - 502 , - 3139 , - 4756 , - 3993 , - 4930 , - 767 , - 1024 , - 4341 , - 3918 , - 3835 , - 2732 , - 4689 , - 2906 , - 1463 , - 4440 , - 5037 , - 1894 , - 4531 , - 708 , - 5385 , - 882 , - 2159 , - 2416 , - 293 , - 5310 , - 5227 , - 4124 , - 641 , - 4298 , - 2855 , - 392 , - 989 , - 3286 , - 483 , - 2100 , - 1337 , - 2274 , - 3551 , - 3808 , - 1685 , - 1262 , - 1179 , - 76 , - 2033 , - 250 , - 4247 , - 1784 , - 2381 , - 4678 , - 1875 , - 3492 , - 2729 , - 3666 , - 4943 , - 5200 , - 3077 , - 2654 , - 2571 , - 1468 , - 3425 , - 1642 , - 199 , - 3176 , - 3773 , - 630 , - 3267 , - 4884 , - 4121 , - 5058 , - 895 , - 1152 , - 4469 , - 4046 , - 3963 , - 2860 , - 4817 , - 3034 , - 1591 , - 4568 , - 5165 , - 2022 , - 4659 , - 836 , - 73 , - 1010 , - 2287 , - 2544 , - 421 , - 5438 , - 5355 , - 4252 , - 769 , - 4426 , - 2983 , - 520 , - 1117 , - 3414 , - 611 , - 2228 , - 1465 , - 2402 , - 3679 , - 3936 , - 1813 , - 1390 , - 1307 , - 204 , - 2161 , - 378 , - 4375 , - 1912 , - 2509 , - 4806 , - 2003 , - 3620 , - 2857 , - 3794 , - 5071 , - 5328 , - 3205 , - 2782 , - 2699 , - 1596 , - 3553 , - 1770 , - 327 , - 3304 , - 3901 , - 758 , - 3395 , - 5012 , - 4249 , - 5186 , - 1023 , - 1280 , - 4597 , - 4174 , - 4091 , - 2988 , - 4945 , - 3162 , - 1719 , - 4696 , - 5293 , - 2150 , - 4787 , - 964 , - 201 , - 1138 , - 2415 , - 2672 , - 549 , - 126 , - 43 , - 4380 , - 897 , - 4554 , - 3111 , - 648 , - 1245 , - 3542 , - 739 , - 2356 , - 1593 , - 2530 , - 3807 , - 4064 , - 1941 , - 1518 , - 1435 , - 332 , - 2289 , - 506 , - 4503 , - 2040 , - 2637 , - 4934 , - 2131 , - 3748 , - 2985 , - 3922 , - 5199 , - 16 , - 3333 , - 2910 , - 2827 , - 1724 , - 3681 , - 1898 , - 455 , - 3432 , - 4029 , - 886 , - 3523 , - 5140 , - 4377 , - 5314 , - 1151 , - 1408 , - 4725 , - 4302 , - 4219 , - 3116 , - 5073 , - 3290 , - 1847 , - 4824 , - 5421 , - 2278 , - 4915 , - 1092 , - 329 , - 1266 , - 2543 , - 2800 , - 677 , - 254 , - 171 , - 4508 , - 1025 , - 4682 , - 3239 , - 776 , - 1373 , - 3670 , - 867 , - 2484 , - 1721 , - 2658 , - 3935 , - 4192 , - 2069 , - 1646 , - 1563 , - 460 , - 2417 , - 634 , - 4631 , - 2168 , - 2765 , - 5062 , - 2259 , - 3876 , - 3113 , - 4050 , - 5327 , - 144 , - 3461 , - 3038 , - 2955 , - 1852 , - 3809 , - 2026 , - 583 , - 3560 , - 4157 , - 1014 , - 3651 , - 5268 , - 4505 , - 2 , - 1279 , - 1536 , - 4853 , - 4430 , - 4347 , - 3244 , - 5201 , - 3418 , - 1975 , - 4952 , - 109 , - 2406 , - 5043 , - 1220 , - 457 , - 1394 , - 2671 , - 2928 , - 805 , - 382 , - 299 , - 4636 , - 1153 , - 4810 , - 3367 , - 904 , - 1501 , - 3798 , - 995 , - 2612 , - 1849 , - 2786 , - 4063 , - 4320 , - 2197 , - 1774 , - 1691 , - 588 , - 2545 , - 762 , - 4759 , - 2296 , - 2893 , - 5190 , - 2387 , - 4004 , - 3241 , - 4178 , - 15 , - 272 , - 3589 , - 3166 , - 3083 , - 1980 , - 3937 , - 2154 , - 711 , - 3688 , - 4285 , - 1142 , - 3779 , - 5396 , - 4633 , - 130 , - 1407 , - 1664 , - 4981 , - 4558 , - 4475 , - 3372 , - 5329 , - 3546 , - 2103 , - 5080 , - 237 , - 2534 , - 5171 , - 1348 , - 585 , - 1522 , - 2799 , - 3056 , - 933 , - 510 , - 427 , - 4764 , - 1281 , - 4938 , - 3495 , - 1032 , - 1629 , - 3926 , - 1123 , - 2740 , - 1977 , - 2914 , - 4191 , - 4448 , - 2325 , - 1902 , - 1819 , - 716 , - 2673 , - 890 , - 4887 , - 2424 , - 3021 , - 5318 , - 2515 , - 4132 , - 3369 , - 4306 , - 143 , - 400 , - 3717 , - 3294 , - 3211 , - 2108 , - 4065 , - 2282 , - 839 , - 3816 , - 4413 , - 1270 , - 3907 , - 84 , - 4761 , - 258 , - 1535 , - 1792 , - 5109 , - 4686 , - 4603 , - 3500 , - 17 , - 3674 , - 2231 , - 5208 , - 365 , - 2662 , - 5299 , - 1476 , - 713 , - 1650 , - 2927 , - 3184 , - 1061 , - 638 , - 555 , - 4892 , - 1409 , - 5066 , - 3623 , - 1160 , - 1757 , - 4054 , - 1251 , - 2868 , - 2105 , - 3042 , - 4319 , - 4576 , - 2453 , - 2030 , - 1947 , - 844 , - 2801 , - 1018 , - 5015 , - 2552 , - 3149 , - 6 , - 2643 , - 4260 , - 3497 , - 4434 , - 271 , - 528 , - 3845 , - 3422 , - 3339 , - 2236 , - 4193 , - 2410 , - 967 , - 3944 , - 4541 , - 1398 , - 4035 , - 212 , - 4889 , - 386 , - 1663 , - 1920 , - 5237 , - 4814 , - 4731 , - 3628 , - 145 , - 3802 , - 2359 , - 5336 , - 493 , - 2790 , - 5427 , - 1604 , - 841 , - 1778 , - 3055 , - 3312 , - 1189 , - 766 , - 683 , - 5020 , - 1537 , - 5194 , - 3751 , - 1288 , - 1885 , - 4182 , - 1379 , - 2996 , - 2233 , - 3170 , - 4447 , - 4704 , - 2581 , - 2158 , - 2075 , - 972 , - 2929 , - 1146 , - 5143 , - 2680 , - 3277 , - 134 , - 2771 , - 4388 , - 3625 , - 4562 , - 399 , - 656 , - 3973 , - 3550 , - 3467 , - 2364 , - 4321 , - 2538 , - 1095 , - 4072 , - 4669 , - 1526 , - 4163 , - 340 , - 5017 , - 514 , - 1791 , - 2048 , - 5365 , - 4942 , - 4859 , - 3756 , - 273 , - 3930 , - 2487 , - 24 , - 621 , - 2918 , - 115 , - 1732 , - 969 , - 1906 , - 3183 , - 3440 , - 1317 , - 894 , - 811 , - 5148 , - 1665 , - 5322 , - 3879 , - 1416 , - 2013 , - 4310 , - 1507 , - 3124 , - 2361 , - 3298 , - 4575 , - 4832 , - 2709 , - 2286 , - 2203 , - 1100 , - 3057 , - 1274 , - 5271 , - 2808 , - 3405 , - 262 , - 2899 , - 4516 , - 3753 , - 4690 , - 527 , - 784 , - 4101 , - 3678 , - 3595 , - 2492 , - 4449 , - 2666 , - 1223 , - 4200 , - 4797 , - 1654 , - 4291 , - 468 , - 5145 , - 642 , - 1919 , - 2176 , - 53 , - 5070 , - 4987 , - 3884 , - 401 , - 4058 , - 2615 , - 152 , - 749 , - 3046 , - 243 , - 1860 , - 1097 , - 2034 , - 3311 , - 3568 , - 1445 , - 1022 , - 939 , - 5276 , - 1793 , - 10 , - 4007 , - 1544 , - 2141 , - 4438 , - 1635 , - 3252 , - 2489 , - 3426 , - 4703 , - 4960 , - 2837 , - 2414 , - 2331 , - 1228 , - 3185 , - 1402 , - 5399 , - 2936 , - 3533 , - 390 , - 3027 , - 4644 , - 3881 , - 4818 , - 655 , - 912 , - 4229 , - 3806 , - 3723 , - 2620 , - 4577 , - 2794 , - 1351 , - 4328 , - 4925 , - 1782 , - 4419 , - 596 , - 5273 , - 770 , - 2047 , - 2304 , - 181 , - 5198 , - 5115 , - 4012 , - 529 , - 4186 , - 2743 , - 280 , - 877 , - 3174 , - 371 , - 1988 , - 1225 , - 2162 , - 3439 , - 3696 , - 1573 , - 1150 , - 1067 , - 5404 , - 1921 , - 138 , - 4135 , - 1672 , - 2269 , - 4566 , - 1763 , - 3380 , - 2617 , - 3554 , - 4831 , - 5088 , - 2965 , - 2542 , - 2459 , - 1356 , - 3313 , - 1530 , - 87 , - 3064 , - 3661 , - 518 , - 3155 , - 4772 , - 4009 , - 4946 , - 783 , - 1040 , - 4357 , - 3934 , - 3851 , - 2748 , - 4705 , - 2922 , - 1479 , - 4456 , - 5053 , - 1910 , - 4547 , - 724 , - 5401 , - 898 , - 2175 , - 2432 , - 309 , - 5326 , - 5243 , - 4140 , - 657 , - 4314 , - 2871 , - 408 , - 1005 , - 3302 , - 499 , - 2116 , - 1353 , - 2290 , - 3567 , - 3824 , - 1701 , - 1278 , - 1195 , - 92 , - 2049 , - 266 , - 4263 , - 1800 , - 2397 , - 4694 , - 1891 , - 3508 , - 2745 , - 3682 , - 4959 , - 5216 , - 3093 , - 2670 , - 2587 , - 1484 , - 3441 , - 1658 , - 215 , - 3192 , - 3789 , - 646 , - 3283 , - 4900 , - 4137 , - 5074 , - 911 , - 1168 , - 4485 , - 4062 , - 3979 , - 2876 , - 4833 , - 3050 , - 1607 , - 4584 , - 5181 , - 2038 , - 4675 , - 852 , - 89 , - 1026 , - 2303 , - 2560 , - 437 , - 14 , - 5371 , - 4268 , - 785 , - 4442 , - 2999 , - 536 , - 1133 , - 3430 , - 627 , - 2244 , - 1481 , - 2418 , - 3695 , - 3952 , - 1829 , - 1406 , - 1323 , - 220 , - 2177 , - 394 , - 4391 , - 1928 , - 2525 , - 4822 , - 2019 , - 3636 , - 2873 , - 3810 , - 5087 , - 5344 , - 3221 , - 2798 , - 2715 , - 1612 , - 3569 , - 1786 , - 343 , - 3320 , - 3917 , - 774 , - 3411 , - 5028 , - 4265 , - 5202 , - 1039 , - 1296 , - 4613 , - 4190 , - 4107 , - 3004 , - 4961 , - 3178 , - 1735 , - 4712 , - 5309 , - 2166 , - 4803 , - 980 , - 217 , - 1154 , - 2431 , - 2688 , - 565 , - 142 , - 59 , - 4396 , - 913 , - 4570 , - 3127 , - 664 , - 1261 , - 3558 , - 755 , - 2372 , - 1609 , - 2546 , - 3823 , - 4080 , - 1957 , - 1534 , - 1451 , - 348 , - 2305 , - 522 , - 4519 , - 2056 , - 2653 , - 4950 , - 2147 , - 3764 , - 3001 , - 3938 , - 5215 , - 32 , - 3349 , - 2926 , - 2843 , - 1740 , - 3697 , - 1914 , - 471 , - 3448 , - 4045 , - 902 , - 3539 , - 5156 , - 4393 , - 5330 , - 1167 , - 1424 , - 4741 , - 4318 , - 4235 , - 3132 , - 5089 , - 3306 , - 1863 , - 4840 , - 5437 , - 2294 , - 4931 , - 1108 , - 345 , - 1282 , - 2559 , - 2816 , - 693 , - 270 , - 187 , - 4524 , - 1041 , - 4698 , - 3255 , - 792 , - 1389 , - 3686 , - 883 , - 2500 , - 1737 , - 2674 , - 3951 , - 4208 , - 2085 , - 1662 , - 1579 , - 476 , - 2433 , - 650 , - 4647 , - 2184 , - 2781 , - 5078 , - 2275 , - 3892 , - 3129 , - 4066 , - 5343 , - 160 , - 3477 , - 3054 , - 2971 , - 1868 , - 3825 , - 2042 , - 599 , - 3576 , - 4173 , - 1030 , - 3667 , - 5284 , - 4521 , - 18 , - 1295 , - 1552 , - 4869 , - 4446 , - 4363 , - 3260 , - 5217 , - 3434 , - 1991 , - 4968 , - 125 , - 2422 , - 5059 , - 1236 , - 473 , - 1410 , - 2687 , - 2944 , - 821 , - 398 , - 315 , - 4652 , - 1169 , - 4826 , - 3383 , - 920 , - 1517 , - 3814 , - 1011 , - 2628 , - 1865 , - 2802 , - 4079 , - 4336 , - 2213 , - 1790 , - 1707 , - 604 , - 2561 , - 778 , - 4775 , - 2312 , - 2909 , - 5206 , - 2403 , - 4020 , - 3257 , - 4194 , - 31 , - 288 , - 3605 , - 3182 , - 3099 , - 1996 , - 3953 , - 2170 , - 727 , - 3704 , - 4301 , - 1158 , - 3795 , - 5412 , - 4649 , - 146 , - 1423 , - 1680 , - 4997 , - 4574 , - 4491 , - 3388 , - 5345 , - 3562 , - 2119 , - 5096 , - 253 , - 2550 , - 5187 , - 1364 , - 601 , - 1538 , - 2815 , - 3072 , - 949 , - 526 , - 443 , - 4780 , - 1297 , - 4954 , - 3511 , - 1048 , - 1645 , - 3942 , - 1139 , - 2756 , - 1993 , - 2930 , - 4207 , - 4464 , - 2341 , - 1918 , - 1835 , - 732 , - 2689 , - 906 , - 4903 , - 2440 , - 3037 , - 5334 , - 2531 , - 4148 , - 3385 , - 4322 , - 159 , - 416 , - 3733 , - 3310 , - 3227 , - 2124 , - 4081 , - 2298 , - 855 , - 3832 , - 4429 , - 1286 , - 3923 , - 100 , - 4777 , - 274 , - 1551 , - 1808 , - 5125 , - 4702 , - 4619 , - 3516 , - 33 , - 3690 , - 2247 , - 5224 , - 381 , - 2678 , - 5315 , - 1492 , - 729 , - 1666 , - 2943 , - 3200 , - 1077 , - 654 , - 571 , - 4908 , - 1425 , - 5082 , - 3639 , - 1176 , - 1773 , - 4070 , - 1267 , - 2884 , - 2121 , - 3058 , - 4335 , - 4592 , - 2469 , - 2046 , - 1963 , - 860 , - 2817 , - 1034 , - 5031 , - 2568 , - 3165 , - 22 , - 2659 , - 4276 , - 3513 , - 4450 , - 287 , - 544 , - 3861 , - 3438 , - 3355 , - 2252 , - 4209 , - 2426 , - 983 , - 3960 , - 4557 , - 1414 , - 4051 , - 228 , - 4905 , - 402 , - 1679 , - 1936 , - 5253 , - 4830 , - 4747 , - 3644 , - 161 , - 3818 , - 2375 , - 5352 , - 509 , - 2806 , - 3 , - 1620 , - 857 , - 1794 , - 3071 , - 3328 , - 1205 , - 782 , - 699 , - 5036 , - 1553 , - 5210 , - 3767 , - 1304 , - 1901 , - 4198 , - 1395 , - 3012 , - 2249 , - 3186 , - 4463 , - 4720 , - 2597 , - 2174 , - 2091 , - 988 , - 2945 , - 1162 , - 5159 , - 2696 , - 3293 , - 150 , - 2787 , - 4404 , - 3641 , - 4578 , - 415 , - 672 , - 3989 , - 3566 , - 3483 , - 2380 , - 4337 , - 2554 , - 1111 , - 4088 , - 4685 , - 1542 , - 4179 , - 356 , - 5033 , - 530 , - 1807 , - 2064 , - 5381 , - 4958 , - 4875 , - 3772 , - 289 , - 3946 , - 2503 , - 40 , - 637 , - 2934 , - 131 , - 1748 , - 985 , - 1922 , - 3199 , - 3456 , - 1333 , - 910 , - 827 , - 5164 , - 1681 , - 5338 , - 3895 , - 1432 , - 2029 , - 4326 , - 1523 , - 3140 , - 2377 , - 3314 , - 4591 , - 4848 , - 2725 , - 2302 , - 2219 , - 1116 , - 3073 , - 1290 , - 5287 , - 2824 , - 3421 , - 278 , - 2915 , - 4532 , - 3769 , - 4706 , - 543 , - 800 , - 4117 , - 3694 , - 3611 , - 2508 , - 4465 , - 2682 , - 1239 , - 4216 , - 4813 , - 1670 , - 4307 , - 484 , - 5161 , - 658 , - 1935 , - 2192 , - 69 , - 5086 , - 5003 , - 3900 , - 417 , - 4074 , - 2631 , - 168 , - 765 , - 3062 , - 259 , - 1876 , - 1113 , - 2050 , - 3327 , - 3584 , - 1461 , - 1038 , - 955 , - 5292 , - 1809 , - 26 , - 4023 , - 1560 , - 2157 , - 4454 , - 1651 , - 3268 , - 2505 , - 3442 , - 4719 , - 4976 , - 2853 , - 2430 , - 2347 , - 1244 , - 3201 , - 1418 , - 5415 , - 2952 , - 3549 , - 406 , - 3043 , - 4660 , - 3897 , - 4834 , - 671 , - 928 , - 4245 , - 3822 , - 3739 , - 2636 , - 4593 , - 2810 , - 1367 , - 4344 , - 4941 , - 1798 , - 4435 , - 612 , - 5289 , - 786 , - 2063 , - 2320 , - 197 , - 5214 , - 5131 , - 4028 , - 545 , - 4202 , - 2759 , - 296 , - 893 , - 3190 , - 387 , - 2004 , - 1241 , - 2178 , - 3455 , - 3712 , - 1589 , - 1166 , - 1083 , - 5420 , - 1937 , - 154 , - 4151 , - 1688 , - 2285 , - 4582 , - 1779 , - 3396 , - 2633 , - 3570 , - 4847 , - 5104 , - 2981 , - 2558 , - 2475 , - 1372 , - 3329 , - 1546 , - 103 , - 3080 , - 3677 , - 534 , - 3171 , - 4788 , - 4025 , - 4962 , - 799 , - 1056 , - 4373 , - 3950 , - 3867 , - 2764 , - 4721 , - 2938 , - 1495 , - 4472 , - 5069 , - 1926 , - 4563 , - 740 , - 5417 , - 914 , - 2191 , - 2448 , - 325 , - 5342 , - 5259 , - 4156 , - 673 , - 4330 , - 2887 , - 424 , - 1021 , - 3318 , - 515 , - 2132 , - 1369 , - 2306 , - 3583 , - 3840 , - 1717 , - 1294 , - 1211 , - 108 , - 2065 , - 282 , - 4279 , - 1816 , - 2413 , - 4710 , - 1907 , - 3524 , - 2761 , - 3698 , - 4975 , - 5232 , - 3109 , - 2686 , - 2603 , - 1500 , - 3457 , - 1674 , - 231 , - 3208 , - 3805 , - 662 , - 3299 , - 4916 , - 4153 , - 5090 , - 927 , - 1184 , - 4501 , - 4078 , - 3995 , - 2892 , - 4849 , - 3066 , - 1623 , - 4600 , - 5197 , - 2054 , - 4691 , - 868 , - 105 , - 1042 , - 2319 , - 2576 , - 453 , - 30 , - 5387 , - 4284 , - 801 , - 4458 , - 3015 , - 552 , - 1149 , - 3446 , - 643 , - 2260 , - 1497 , - 2434 , - 3711 , - 3968 , - 1845 , - 1422 , - 1339 , - 236 , - 2193 , - 410 , - 4407 , - 1944 , - 2541 , - 4838 , - 2035 , - 3652 , - 2889 , - 3826 , - 5103 , - 5360 , - 3237 , - 2814 , - 2731 , - 1628 , - 3585 , - 1802 , - 359 , - 3336 , - 3933 , - 790 , - 3427 , - 5044 , - 4281 , - 5218 , - 1055 , - 1312 , - 4629 , - 4206 , - 4123 , - 3020 , - 4977 , - 3194 , - 1751 , - 4728 , - 5325 , - 2182 , - 4819 , - 996 , - 233 , - 1170 , - 2447 , - 2704 , - 581 , - 158 , - 75 , - 4412 , - 929 , - 4586 , - 3143 , - 680 , - 1277 , - 3574 , - 771 , - 2388 , - 1625 , - 2562 , - 3839 , - 4096 , - 1973 , - 1550 , - 1467 , - 364 , - 2321 , - 538 , - 4535 , - 2072 , - 2669 , - 4966 , - 2163 , - 3780 , - 3017 , - 3954 , - 5231 , - 48 , - 3365 , - 2942 , - 2859 , - 1756 , - 3713 , - 1930 , - 487 , - 3464 , - 4061 , - 918 , - 3555 , - 5172 , - 4409 , - 5346 , - 1183 , - 1440 , - 4757 , - 4334 , - 4251 , - 3148 , - 5105 , - 3322 , - 1879 , - 4856 , - 13 , - 2310 , - 4947 , - 1124 , - 361 , - 1298 , - 2575 , - 2832 , - 709 , - 286 , - 203 , - 4540 , - 1057 , - 4714 , - 3271 , - 808 , - 1405 , - 3702 , - 899 , - 2516 , - 1753 , - 2690 , - 3967 , - 4224 , - 2101 , - 1678 , - 1595 , - 492 , - 2449 , - 666 , - 4663 , - 2200 , - 2797 , - 5094 , - 2291 , - 3908 , - 3145 , - 4082 , - 5359 , - 176 , - 3493 , - 3070 , - 2987 , - 1884 , - 3841 , - 2058 , - 615 , - 3592 , - 4189 , - 1046 , - 3683 , - 5300 , - 4537 , - 34 , - 1311 , - 1568 , - 4885 , - 4462 , - 4379 , - 3276 , - 5233 , - 3450 , - 2007 , - 4984 , - 141 , - 2438 , - 5075 , - 1252 , - 489 , - 1426 , - 2703 , - 2960 , - 837 , - 414 , - 331 , - 4668 , - 1185 , - 4842 , - 3399 , - 936 , - 1533 , - 3830 , - 1027 , - 2644 , - 1881 , - 2818 , - 4095 , - 4352 , - 2229 , - 1806 , - 1723 , - 620 , - 2577 , - 794 , - 4791 , - 2328 , - 2925 , - 5222 , - 2419 , - 4036 , - 3273 , - 4210 , - 47 , - 304 , - 3621 , - 3198 , - 3115 , - 2012 , - 3969 , - 2186 , - 743 , - 3720 , - 4317 , - 1174 , - 3811 , - 5428 , - 4665 , - 162 , - 1439 , - 1696 , - 5013 , - 4590 , - 4507 , - 3404 , - 5361 , - 3578 , - 2135 , - 5112 , - 269 , - 2566 , - 5203 , - 1380 , - 617 , - 1554 , - 2831 , - 3088 , - 965 , - 542 , - 459 , - 4796 , - 1313 , - 4970 , - 3527 , - 1064 , - 1661 , - 3958 , - 1155 , - 2772 , - 2009 , - 2946 , - 4223 , - 4480 , - 2357 , - 1934 , - 1851 , - 748 , - 2705 , - 922 , - 4919 , - 2456 , - 3053 , - 5350 , - 2547 , - 4164 , - 3401 , - 4338 , - 175 , - 432 , - 3749 , - 3326 , - 3243 , - 2140 , - 4097 , - 2314 , - 871 , - 3848 , - 4445 , - 1302 , - 3939 , - 116 , - 4793 , - 290 , - 1567 , - 1824 , - 5141 , - 4718 , - 4635 , - 3532 , - 49 , - 3706 , - 2263 , - 5240 , - 397 , - 2694 , - 5331 , - 1508 , - 745 , - 1682 , - 2959 , - 3216 , - 1093 , - 670 , - 587 , - 4924 , - 1441 , - 5098 , - 3655 , - 1192 , - 1789 , - 4086 , - 1283 , - 2900 , - 2137 , - 3074 , - 4351 , - 4608 , - 2485 , - 2062 , - 1979 , - 876 , - 2833 , - 1050 , - 5047 , - 2584 , - 3181 , - 38 , - 2675 , - 4292 , - 3529 , - 4466 , - 303 , - 560 , - 3877 , - 3454 , - 3371 , - 2268 , - 4225 , - 2442 , - 999 , - 3976 , - 4573 , - 1430 , - 4067 , - 244 , - 4921 , - 418 , - 1695 , - 1952 , - 5269 , - 4846 , - 4763 , - 3660 , - 177 , - 3834 , - 2391 , - 5368 , - 525 , - 2822 , - 19 , - 1636 , - 873 , - 1810 , - 3087 , - 3344 , - 1221 , - 798 , - 715 , - 5052 , - 1569 , - 5226 , - 3783 , - 1320 , - 1917 , - 4214 , - 1411 , - 3028 , - 2265 , - 3202 , - 4479 , - 4736 , - 2613 , - 2190 , - 2107 , - 1004 , - 2961 , - 1178 , - 5175 , - 2712 , - 3309 , - 166 , - 2803 , - 4420 , - 3657 , - 4594 , - 431 , - 688 , - 4005 , - 3582 , - 3499 , - 2396 , - 4353 , - 2570 , - 1127 , - 4104 , - 4701 , - 1558 , - 4195 , - 372 , - 5049 , - 546 , - 1823 , - 2080 , - 5397 , - 4974 , - 4891 , - 3788 , - 305 , - 3962 , - 2519 , - 56 , - 653 , - 2950 , - 147 , - 1764 , - 1001 , - 1938 , - 3215 , - 3472 , - 1349 , - 926 , - 843 , - 5180 , - 1697 , - 5354 , - 3911 , - 1448 , - 2045 , - 4342 , - 1539 , - 3156 , - 2393 , - 3330 , - 4607 , - 4864 , - 2741 , - 2318 , - 2235 , - 1132 , - 3089 , - 1306 , - 5303 , - 2840 , - 3437 , - 294 , - 2931 , - 4548 , - 3785 , - 4722 , - 559 , - 816 , - 4133 , - 3710 , - 3627 , - 2524 , - 4481 , - 2698 , - 1255 , - 4232 , - 4829 , - 1686 , - 4323 , - 500 , - 5177 , - 674 , - 1951 , - 2208 , - 85 , - 5102 , - 5019 , - 3916 , - 433 , - 4090 , - 2647 , - 184 , - 781 , - 3078 , - 275 , - 1892 , - 1129 , - 2066 , - 3343 , - 3600 , - 1477 , - 1054 , - 971 , - 5308 , - 1825 , - 42 , - 4039 , - 1576 , - 2173 , - 4470 , - 1667 , - 3284 , - 2521 , - 3458 , - 4735 , - 4992 , - 2869 , - 2446 , - 2363 , - 1260 , - 3217 , - 1434 , - 5431 , - 2968 , - 3565 , - 422 , - 3059 , - 4676 , - 3913 , - 4850 , - 687 , - 944 , - 4261 , - 3838 , - 3755 , - 2652 , - 4609 , - 2826 , - 1383 , - 4360 , - 4957 , - 1814 , - 4451 , - 628 , - 5305 , - 802 , - 2079 , - 2336 , - 213 , - 5230 , - 5147 , - 4044 , - 561 , - 4218 , - 2775 , - 312 , - 909 , - 3206 , - 403 , - 2020 , - 1257 , - 2194 , - 3471 , - 3728 , - 1605 , - 1182 , - 1099 , - 5436 , - 1953 , - 170 , - 4167 , - 1704 , - 2301 , - 4598 , - 1795 , - 3412 , - 2649 , - 3586 , - 4863 , - 5120 , - 2997 , - 2574 , - 2491 , - 1388 , - 3345 , - 1562 , - 119 , - 3096 , - 3693 , - 550 , - 3187 , - 4804 , - 4041 , - 4978 , - 815 , - 1072 , - 4389 , - 3966 , - 3883 , - 2780 , - 4737 , - 2954 , - 1511 , - 4488 , - 5085 , - 1942 , - 4579 , - 756 , - 5433 , - 930 , - 2207 , - 2464 , - 341 , - 5358 , - 5275 , - 4172 , - 689 , - 4346 , - 2903 , - 440 , - 1037 , - 3334 , - 531 , - 2148 , - 1385 , - 2322 , - 3599 , - 3856 , - 1733 , - 1310 , - 1227 , - 124 , - 2081 , - 298 , - 4295 , - 1832 , - 2429 , - 4726 , - 1923 , - 3540 , - 2777 , - 3714 , - 4991 , - 5248 , - 3125 , - 2702 , - 2619 , - 1516 , - 3473 , - 1690 , - 247 , - 3224 , - 3821 , - 678 , - 3315 , - 4932 , - 4169 , - 5106 , - 943 , - 1200 , - 4517 , - 4094 , - 4011 , - 2908 , - 4865 , - 3082 , - 1639 , - 4616 , - 5213 , - 2070 , - 4707 , - 884 , - 121 , - 1058 , - 2335 , - 2592 , - 469 , - 46 , - 5403 , - 4300 , - 817 , - 4474 , - 3031 , - 568 , - 1165 , - 3462 , - 659 , - 2276 , - 1513 , - 2450 , - 3727 , - 3984 , - 1861 , - 1438 , - 1355 , - 252 , - 2209 , - 426 , - 4423 , - 1960 , - 2557 , - 4854 , - 2051 , - 3668 , - 2905 , - 3842 , - 5119 , - 5376 , - 3253 , - 2830 , - 2747 , - 1644 , - 3601 , - 1818 , - 375 , - 3352 , - 3949 , - 806 , - 3443 , - 5060 , - 4297 , - 5234 , - 1071 , - 1328 , - 4645 , - 4222 , - 4139 , - 3036 , - 4993 , - 3210 , - 1767 , - 4744 , - 5341 , - 2198 , - 4835 , - 1012 , - 249 , - 1186 , - 2463 , - 2720 , - 597 , - 174 , - 91 , - 4428 , - 945 , - 4602 , - 3159 , - 696 , - 1293 , - 3590 , - 787 , - 2404 , - 1641 , - 2578 , - 3855 , - 4112 , - 1989 , - 1566 , - 1483 , - 380 , - 2337 , - 554 , - 4551 , - 2088 , - 2685 , - 4982 , - 2179 , - 3796 , - 3033 , - 3970 , - 5247 , - 64 , - 3381 , - 2958 , - 2875 , - 1772 , - 3729 , - 1946 , - 503 , - 3480 , - 4077 , - 934 , - 3571 , - 5188 , - 4425 , - 5362 , - 1199 , - 1456 , - 4773 , - 4350 , - 4267 , - 3164 , - 5121 , - 3338 , - 1895 , - 4872 , - 29 , - 2326 , - 4963 , - 1140 , - 377 , - 1314 , - 2591 , - 2848 , - 725 , - 302 , - 219 , - 4556 , - 1073 , - 4730 , - 3287 , - 824 , - 1421 , - 3718 , - 915 , - 2532 , - 1769 , - 2706 , - 3983 , - 4240 , - 2117 , - 1694 , - 1611 , - 508 , - 2465 , - 682 , - 4679 , - 2216 , - 2813 , - 5110 , - 2307 , - 3924 , - 3161 , - 4098 , - 5375 , - 192 , - 3509 , - 3086 , - 3003 , - 1900 , - 3857 , - 2074 , - 631 , - 3608 , - 4205 , - 1062 , - 3699 , - 5316 , - 4553 , - 50 , - 1327 , - 1584 , - 4901 , - 4478 , - 4395 , - 3292 , - 5249 , - 3466 , - 2023 , - 5000 , - 157 , - 2454 , - 5091 , - 1268 , - 505 , - 1442 , - 2719 , - 2976 , - 853 , - 430 , - 347 , - 4684 , - 1201 , - 4858 , - 3415 , - 952 , - 1549 , - 3846 , - 1043 , - 2660 , - 1897 , - 2834 , - 4111 , - 4368 , - 2245 , - 1822 , - 1739 , - 636 , - 2593 , - 810 , - 4807 , - 2344 , - 2941 , - 5238 , - 2435 , - 4052 , - 3289 , - 4226 , - 63 , - 320 , - 3637 , - 3214 , - 3131 , - 2028 , - 3985 , - 2202 , - 759 , - 3736 , - 4333 , - 1190 , - 3827 , - 4 , - 4681 , - 178 , - 1455 , - 1712 , - 5029 , - 4606 , - 4523 , - 3420 , - 5377 , - 3594 , - 2151 , - 5128 , - 285 , - 2582 , - 5219 , - 1396 , - 633 , - 1570 , - 2847 , - 3104 , - 981 , - 558 , - 475 , - 4812 , - 1329 , - 4986 , - 3543 , - 1080 , - 1677 , - 3974 , - 1171 , - 2788 , - 2025 , - 2962 , - 4239 , - 4496 , - 2373 , - 1950 , - 1867 , - 764 , - 2721 , - 938 , - 4935 , - 2472 , - 3069 , - 5366 , - 2563 , - 4180 , - 3417 , - 4354 , - 191 , - 448 , - 3765 , - 3342 , - 3259 , - 2156 , - 4113 , - 2330 , - 887 , - 3864 , - 4461 , - 1318 , - 3955 , - 132 , - 4809 , - 306 , - 1583 , - 1840 , - 5157 , - 4734 , - 4651 , - 3548 , - 65 , - 3722 , - 2279 , - 5256 , - 413 , - 2710 , - 5347 , - 1524 , - 761 , - 1698 , - 2975 , - 3232 , - 1109 , - 686 , - 603 , - 4940 , - 1457 , - 5114 , - 3671 , - 1208 , - 1805 , - 4102 , - 1299 , - 2916 , - 2153 , - 3090 , - 4367 , - 4624 , - 2501 , - 2078 , - 1995 , - 892 , - 2849 , - 1066 , - 5063 , - 2600 , - 3197 , - 54 , - 2691 , - 4308 , - 3545 , - 4482 , - 319 , - 576 , - 3893 , - 3470 , - 3387 , - 2284 , - 4241 , - 2458 , - 1015 , - 3992 , - 4589 , - 1446 , - 4083 , - 260 , - 4937 , - 434 , - 1711 , - 1968 , - 5285 , - 4862 , - 4779 , - 3676 , - 193 , - 3850 , - 2407 , - 5384 , - 541 , - 2838 , - 35 , - 1652 , - 889 , - 1826 , - 3103 , - 3360 , - 1237 , - 814 , - 731 , - 5068 , - 1585 , - 5242 , - 3799 , - 1336 , - 1933 , - 4230 , - 1427 , - 3044 , - 2281 , - 3218 , - 4495 , - 4752 , - 2629 , - 2206 , - 2123 , - 1020 , - 2977 , - 1194 , - 5191 , - 2728 , - 3325 , - 182 , - 2819 , - 4436 , - 3673 , - 4610 , - 447 , - 704 , - 4021 , - 3598 , - 3515 , - 2412 , - 4369 , - 2586 , - 1143 , - 4120 , - 4717 , - 1574 , - 4211 , - 388 , - 5065 , - 562 , - 1839 , - 2096 , - 5413 , - 4990 , - 4907 , - 3804 , - 321 , - 3978 , - 2535 , - 72 , - 669 , - 2966 , - 163 , - 1780 , - 1017 , - 1954 , - 3231 , - 3488 , - 1365 , - 942 , - 859 , - 5196 , - 1713 , - 5370 , - 3927 , - 1464 , - 2061 , - 4358 , - 1555 , - 3172 , - 2409 , - 3346 , - 4623 , - 4880 , - 2757 , - 2334 , - 2251 , - 1148 , - 3105 , - 1322 , - 5319 , - 2856 , - 3453 , - 310 , - 2947 , - 4564 , - 3801 , - 4738 , - 575 , - 832 , - 4149 , - 3726 , - 3643 , - 2540 , - 4497 , - 2714 , - 1271 , - 4248 , - 4845 , - 1702 , - 4339 , - 516 , - 5193 , - 690 , - 1967 , - 2224 , - 101 , - 5118 , - 5035 , - 3932 , - 449 , - 4106 , - 2663 , - 200 , - 797 , - 3094 , - 291 , - 1908 , - 1145 , - 2082 , - 3359 , - 3616 , - 1493 , - 1070 , - 987 , - 5324 , - 1841 , - 58 , - 4055 , - 1592 , - 2189 , - 4486 , - 1683 , - 3300 , - 2537 , - 3474 , - 4751 , - 5008 , - 2885 , - 2462 , - 2379 , - 1276 , - 3233 , - 1450 , - 7 , - 2984 , - 3581 , - 438 , - 3075 , - 4692 , - 3929 , - 4866 , - 703 , - 960 , - 4277 , - 3854 , - 3771 , - 2668 , - 4625 , - 2842 , - 1399 , - 4376 , - 4973 , - 1830 , - 4467 , - 644 , - 5321 , - 818 , - 2095 , - 2352 , - 229 , - 5246 , - 5163 , - 4060 , - 577 , - 4234 , - 2791 , - 328 , - 925 , - 3222 , - 419 , - 2036 , - 1273 , - 2210 , - 3487 , - 3744 , - 1621 , - 1198 , - 1115 , - 12 , - 1969 , - 186 , - 4183 , - 1720 , - 2317 , - 4614 , - 1811 , - 3428 , - 2665 , - 3602 , - 4879 , - 5136 , - 3013 , - 2590 , - 2507 , - 1404 , - 3361 , - 1578 , - 135 , - 3112 , - 3709 , - 566 , - 3203 , - 4820 , - 4057 , - 4994 , - 831 , - 1088 , - 4405 , - 3982 , - 3899 , - 2796 , - 4753 , - 2970 , - 1527 , - 4504 , - 5101 , - 1958 , - 4595 , - 772 , - 9 , - 946 , - 2223 , - 2480 , - 357 , - 5374 , - 5291 , - 4188 , - 705 , - 4362 , - 2919 , - 456 , - 1053 , - 3350 , - 547 , - 2164 , - 1401 , - 2338 , - 3615 , - 3872 , - 1749 , - 1326 , - 1243 , - 140 , - 2097 , - 314 , - 4311 , - 1848 , - 2445 , - 4742 , - 1939 , - 3556 , - 2793 , - 3730 , - 5007 , - 5264 , - 3141 , - 2718 , - 2635 , - 1532 , - 3489 , - 1706 , - 263 , - 3240 , - 3837 , - 694 , - 3331 , - 4948 , - 4185 , - 5122 , - 959 , - 1216 , - 4533 , - 4110 , - 4027 , - 2924 , - 4881 , - 3098 , - 1655 , - 4632 , - 5229 , - 2086 , - 4723 , - 900 , - 137 , - 1074 , - 2351 , - 2608 , - 485 , - 62 , - 5419 , - 4316 , - 833 , - 4490 , - 3047 , - 584 , - 1181 , - 3478 , - 675 , - 2292 , - 1529 , - 2466 , - 3743 , - 4000 , - 1877 , - 1454 , - 1371 , - 268 , - 2225 , - 442 , - 4439 , - 1976 , - 2573 , - 4870 , - 2067 , - 3684 , - 2921 , - 3858 , - 5135 , - 5392 , - 3269 , - 2846 , - 2763 , - 1660 , - 3617 , - 1834 , - 391 , - 3368 , - 3965 , - 822 , - 3459 , - 5076 , - 4313 , - 5250 , - 1087 , - 1344 , - 4661 , - 4238 , - 4155 , - 3052 , - 5009 , - 3226 , - 1783 , - 4760 , - 5357 , - 2214 , - 4851 , - 1028 , - 265 , - 1202 , - 2479 , - 2736 , - 613 , - 190 , - 107 , - 4444 , - 961 , - 4618 , - 3175 , - 712 , - 1309 , - 3606 , - 803 , - 2420 , - 1657 , - 2594 , - 3871 , - 4128 , - 2005 , - 1582 , - 1499 , - 396 , - 2353 , - 570 , - 4567 , - 2104 , - 2701 , - 4998 , - 2195 , - 3812 , - 3049 , - 3986 , - 5263 , - 80 , - 3397 , - 2974 , - 2891 , - 1788 , - 3745 , - 1962 , - 519 , - 3496 , - 4093 , - 950 , - 3587 , - 5204 , - 4441 , - 5378 , - 1215 , - 1472 , - 4789 , - 4366 , - 4283 , - 3180 , - 5137 , - 3354 , - 1911 , - 4888 , - 45 , - 2342 , - 4979 , - 1156 , - 393 , - 1330 , - 2607 , - 2864 , - 741 , - 318 , - 235 , - 4572 , - 1089 , - 4746 , - 3303 , - 840 , - 1437 , - 3734 , - 931 , - 2548 , - 1785 , - 2722 , - 3999 , - 4256 , - 2133 , - 1710 , - 1627 , - 524 , - 2481 , - 698 , - 4695 , - 2232 , - 2829 , - 5126 , - 2323 , - 3940 , - 3177 , - 4114 , - 5391 , - 208 , - 3525 , - 3102 , - 3019 , - 1916 , - 3873 , - 2090 , - 647 , - 3624 , - 4221 , - 1078 , - 3715 , - 5332 , - 4569 , - 66 , - 1343 , - 1600 , - 4917 , - 4494 , - 4411 , - 3308 , - 5265 , - 3482 , - 2039 , - 5016 , - 173 , - 2470 , - 5107 , - 1284 , - 521 , - 1458 , - 2735 , - 2992 , - 869 , - 446 , - 363 , - 4700 , - 1217 , - 4874 , - 3431 , - 968 , - 1565 , - 3862 , - 1059 , - 2676 , - 1913 , - 2850 , - 4127 , - 4384 , - 2261 , - 1838 , - 1755 , - 652 , - 2609 , - 826 , - 4823 , - 2360 , - 2957 , - 5254 , - 2451 , - 4068 , - 3305 , - 4242 , - 79 , - 336 , - 3653 , - 3230 , - 3147 , - 2044 , - 4001 , - 2218 , - 775 , - 3752 , - 4349 , - 1206 , - 3843 , - 20 , - 4697 , - 194 , - 1471 , - 1728 , - 5045 , - 4622 , - 4539 , - 3436 , - 5393 , - 3610 , - 2167 , - 5144 , - 301 , - 2598 , - 5235 , - 1412 , - 649 , - 1586 , - 2863 , - 3120 , - 997 , - 574 , - 491 , - 4828 , - 1345 , - 5002 , - 3559 , - 1096 , - 1693 , - 3990 , - 1187 , - 2804 , - 2041 , - 2978 , - 4255 , - 4512 , - 2389 , - 1966 , - 1883 , - 780 , - 2737 , - 954 , - 4951 , - 2488 , - 3085 , - 5382 , - 2579 , - 4196 , - 3433 , - 4370 , - 207 , - 464 , - 3781 , - 3358 , - 3275 , - 2172 , - 4129 , - 2346 , - 903 , - 3880 , - 4477 , - 1334 , - 3971 , - 148 , - 4825 , - 322 , - 1599 , - 1856 , - 5173 , - 4750 , - 4667 , - 3564 , - 81 , - 3738 , - 2295 , - 5272 , - 429 , - 2726 , - 5363 , - 1540 , - 777 , - 1714 , - 2991 , - 3248 , - 1125 , - 702 , - 619 , - 4956 , - 1473 , - 5130 , - 3687 , - 1224 , - 1821 , - 4118 , - 1315 , - 2932 , - 2169 , - 3106 , - 4383 , - 4640 , - 2517 , - 2094 , - 2011 , - 908 , - 2865 , - 1082 , - 5079 , - 2616 , - 3213 , - 70 , - 2707 , - 4324 , - 3561 , - 4498 , - 335 , - 592 , - 3909 , - 3486 , - 3403 , - 2300 , - 4257 , - 2474 , - 1031 , - 4008 , - 4605 , - 1462 , - 4099 , - 276 , - 4953 , - 450 , - 1727 , - 1984 , - 5301 , - 4878 , - 4795 , - 3692 , - 209 , - 3866 , - 2423 , - 5400 , - 557 , - 2854 , - 51 , - 1668 , - 905 , - 1842 , - 3119 , - 3376 , - 1253 , - 830 , - 747 , - 5084 , - 1601 , - 5258 , - 3815 , - 1352 , - 1949 , - 4246 , - 1443 , - 3060 , - 2297 , - 3234 , - 4511 , - 4768 , - 2645 , - 2222 , - 2139 , - 1036 , - 2993 , - 1210 , - 5207 , - 2744 , - 3341 , - 198 , - 2835 , - 4452 , - 3689 , - 4626 , - 463 , - 720 , - 4037 , - 3614 , - 3531 , - 2428 , - 4385 , - 2602 , - 1159 , - 4136 , - 4733 , - 1590 , - 4227 , - 404 , - 5081 , - 578 , - 1855 , - 2112 , - 5429 , - 5006 , - 4923 , - 3820 , - 337 , - 3994 , - 2551 , - 88 , - 685 , - 2982 , - 179 , - 1796 , - 1033 , - 1970 , - 3247 , - 3504 , - 1381 , - 958 , - 875 , - 5212 , - 1729 , - 5386 , - 3943 , - 1480 , - 2077 , - 4374 , - 1571 , - 3188 , - 2425 , - 3362 , - 4639 , - 4896 , - 2773 , - 2350 , - 2267 , - 1164 , - 3121 , - 1338 , - 5335 , - 2872 , - 3469 , - 326 , - 2963 , - 4580 , - 3817 , - 4754 , - 591 , - 848 , - 4165 , - 3742 , - 3659 , - 2556 , - 4513 , - 2730 , - 1287 , - 4264 , - 4861 , - 1718 , - 4355 , - 532 , - 5209 , - 706 , - 1983 , - 2240 , - 117 , - 5134 , - 5051 , - 3948 , - 465 , - 4122 , - 2679 , - 216 , - 813 , - 3110 , - 307 , - 1924 , - 1161 , - 2098 , - 3375 , - 3632 , - 1509 , - 1086 , - 1003 , - 5340 , - 1857 , - 74 , - 4071 , - 1608 , - 2205 , - 4502 , - 1699 , - 3316 , - 2553 , - 3490 , - 4767 , - 5024 , - 2901 , - 2478 , - 2395 , - 1292 , - 3249 , - 1466 , - 23 , - 3000 , - 3597 , - 454 , - 3091 , - 4708 , - 3945 , - 4882 , - 719 , - 976 , - 4293 , - 3870 , - 3787 , - 2684 , - 4641 , - 2858 , - 1415 , - 4392 , - 4989 , - 1846 , - 4483 , - 660 , - 5337 , - 834 , - 2111 , - 2368 , - 245 , - 5262 , - 5179 , - 4076 , - 593 , - 4250 , - 2807 , - 344 , - 941 , - 3238 , - 435 , - 2052 , - 1289 , - 2226 , - 3503 , - 3760 , - 1637 , - 1214 , - 1131 , - 28 , - 1985 , - 202 , - 4199 , - 1736 , - 2333 , - 4630 , - 1827 , - 3444 , - 2681 , - 3618 , - 4895 , - 5152 , - 3029 , - 2606 , - 2523 , - 1420 , - 3377 , - 1594 , - 151 , - 3128 , - 3725 , - 582 , - 3219 , - 4836 , - 4073 , - 5010 , - 847 , - 1104 , - 4421 , - 3998 , - 3915 , - 2812 , - 4769 , - 2986 , - 1543 , - 4520 , - 5117 , - 1974 , - 4611 , - 788 , - 25 , - 962 , - 2239 , - 2496 , - 373 , - 5390 , - 5307 , - 4204 , - 721 , - 4378 , - 2935 , - 472 , - 1069 , - 3366 , - 563 , - 2180 , - 1417 , - 2354 , - 3631 , - 3888 , - 1765 , - 1342 , - 1259 , - 156 , - 2113 , - 330 , - 4327 , - 1864 , - 2461 , - 4758 , - 1955 , - 3572 , - 2809 , - 3746 , - 5023 , - 5280 , - 3157 , - 2734 , - 2651 , - 1548 , - 3505 , - 1722 , - 279 , - 3256 , - 3853 , - 710 , - 3347 , - 4964 , - 4201 , - 5138 , - 975 , - 1232 , - 4549 , - 4126 , - 4043 , - 2940 , - 4897 , - 3114 , - 1671 , - 4648 , - 5245 , - 2102 , - 4739 , - 916 , - 153 , - 1090 , - 2367 , - 2624 , - 501 , - 78 , - 5435 , - 4332 , - 849 , - 4506 , - 3063 , - 600 , - 1197 , - 3494 , - 691 , - 2308 , - 1545 , - 2482 , - 3759 , - 4016 , - 1893 , - 1470 , - 1387 , - 284 , - 2241 , - 458 , - 4455 , - 1992 , - 2589 , - 4886 , - 2083 , - 3700 , - 2937 , - 3874 , - 5151 , - 5408 , - 3285 , - 2862 , - 2779 , - 1676 , - 3633 , - 1850 , - 407 , - 3384 , - 3981 , - 838 , - 3475 , - 5092 , - 4329 , - 5266 , - 1103 , - 1360 , - 4677 , - 4254 , - 4171 , - 3068 , - 5025 , - 3242 , - 1799 , - 4776 , - 5373 , - 2230 , - 4867 , - 1044 , - 281 , - 1218 , - 2495 , - 2752 , - 629 , - 206 , - 123 , - 4460 , - 977 , - 4634 , - 3191 , - 728 , - 1325 , - 3622 , - 819 , - 2436 , - 1673 , - 2610 , - 3887 , - 4144 , - 2021 , - 1598 , - 1515 , - 412 , - 2369 , - 586 , - 4583 , - 2120 , - 2717 , - 5014 , - 2211 , - 3828 , - 3065 , - 4002 , - 5279 , - 96 , - 3413 , - 2990 , - 2907 , - 1804 , - 3761 , - 1978 , - 535 , - 3512 , - 4109 , - 966 , - 3603 , - 5220 , - 4457 , - 5394 , - 1231 , - 1488 , - 4805 , - 4382 , - 4299 , - 3196 , - 5153 , - 3370 , - 1927 , - 4904 , - 61 , - 2358 , - 4995 , - 1172 , - 409 , - 1346 , - 2623 , - 2880 , - 757 , - 334 , - 251 , - 4588 , - 1105 , - 4762 , - 3319 , - 856 , - 1453 , - 3750 , - 947 , - 2564 , - 1801 , - 2738 , - 4015 , - 4272 , - 2149 , - 1726 , - 1643 , - 540 , - 2497 , - 714 , - 4711 , - 2248 , - 2845 , - 5142 , - 2339 , - 3956 , - 3193 , - 4130 , - 5407 , - 224 , - 3541 , - 3118 , - 3035 , - 1932 , - 3889 , - 2106 , - 663 , - 3640 , - 4237 , - 1094 , - 3731 , - 5348 , - 4585 , - 82 , - 1359 , - 1616 , - 4933 , - 4510 , - 4427 , - 3324 , - 5281 , - 3498 , - 2055 , - 5032 , - 189 , - 2486 , - 5123 , - 1300 , - 537 , - 1474 , - 2751 , - 3008 , - 885 , - 462 , - 379 , - 4716 , - 1233 , - 4890 , - 3447 , - 984 , - 1581 , - 3878 , - 1075 , - 2692 , - 1929 , - 2866 , - 4143 , - 4400 , - 2277 , - 1854 , - 1771 , - 668 , - 2625 , - 842 , - 4839 , - 2376 , - 2973 , - 5270 , - 2467 , - 4084 , - 3321 , - 4258 , - 95 , - 352 , - 3669 , - 3246 , - 3163 , - 2060 , - 4017 , - 2234 , - 791 , - 3768 , - 4365 , - 1222 , - 3859 , - 36 , - 4713 , - 210 , - 1487 , - 1744 , - 5061 , - 4638 , - 4555 , - 3452 , - 5409 , - 3626 , - 2183 , - 5160 , - 317 , - 2614 , - 5251 , - 1428 , - 665 , - 1602 , - 2879 , - 3136 , - 1013 , - 590 , - 507 , - 4844 , - 1361 , - 5018 , - 3575 , - 1112 , - 1709 , - 4006 , - 1203 , - 2820 , - 2057 , - 2994 , - 4271 , - 4528 , - 2405 , - 1982 , - 1899 , - 796 , - 2753 , - 970 , - 4967 , - 2504 , - 3101 , - 5398 , - 2595 , - 4212 , - 3449 , - 4386 , - 223 , - 480 , - 3797 , - 3374 , - 3291 , - 2188 , - 4145 , - 2362 , - 919 , - 3896 , - 4493 , - 1350 , - 3987 , - 164 , - 4841 , - 338 , - 1615 , - 1872 , - 5189 , - 4766 , - 4683 , - 3580 , - 97 , - 3754 , - 2311 , - 5288 , - 445 , - 2742 , - 5379 , - 1556 , - 793 , - 1730 , - 3007 , - 3264 , - 1141 , - 718 , - 635 , - 4972 , - 1489 , - 5146 , - 3703 , - 1240 , - 1837 , - 4134 , - 1331 , - 2948 , - 2185 , - 3122 , - 4399 , - 4656 , - 2533 , - 2110 , - 2027 , - 924 , - 2881 , - 1098 , - 5095 , - 2632 , - 3229 , - 86 , - 2723 , - 4340 , - 3577 , - 4514 , - 351 , - 608 , - 3925 , - 3502 , - 3419 , - 2316 , - 4273 , - 2490 , - 1047 , - 4024 , - 4621 , - 1478 , - 4115 , - 292 , - 4969 , - 466 , - 1743 , - 2000 , - 5317 , - 4894 , - 4811 , - 3708 , - 225 , - 3882 , - 2439 , - 5416 , - 573 , - 2870 , - 67 , - 1684 , - 921 , - 1858 , - 3135 , - 3392 , - 1269 , - 846 , - 763 , - 5100 , - 1617 , - 5274 , - 3831 , - 1368 , - 1965 , - 4262 , - 1459 , - 3076 , - 2313 , - 3250 , - 4527 , - 4784 , - 2661 , - 2238 , - 2155 , - 1052 , - 3009 , - 1226 , - 5223 , - 2760 , - 3357 , - 214 , - 2851 , - 4468 , - 3705 , - 4642 , - 479 , - 736 , - 4053 , - 3630 , - 3547 , - 2444 , - 4401 , - 2618 , - 1175 , - 4152 , - 4749 , - 1606 , - 4243 , - 420 , - 5097 , - 594 , - 1871 , - 2128 , - 5 , - 5022 , - 4939 , - 3836 , - 353 , - 4010 , - 2567 , - 104 , - 701 , - 2998 , - 195 , - 1812 , - 1049 , - 1986 , - 3263 , - 3520 , - 1397 , - 974 , - 891 , - 5228 , - 1745 , - 5402 , - 3959 , - 1496 , - 2093 , - 4390 , - 1587 , - 3204 , - 2441 , - 3378 , - 4655 , - 4912 , - 2789 , - 2366 , - 2283 , - 1180 , - 3137 , - 1354 , - 5351 , - 2888 , - 3485 , - 342 , - 2979 , - 4596 , - 3833 , - 4770 , - 607 , - 864 , - 4181 , - 3758 , - 3675 , - 2572 , - 4529 , - 2746 , - 1303 , - 4280 , - 4877 , - 1734 , - 4371 , - 548 , - 5225 , - 722 , - 1999 , - 2256 , - 133 , - 5150 , - 5067 , - 3964 , - 481 , - 4138 , - 2695 , - 232 , - 829 , - 3126 , - 323 , - 1940 , - 1177 , - 2114 , - 3391 , - 3648 , - 1525 , - 1102 , - 1019 , - 5356 , - 1873 , - 90 , - 4087 , - 1624 , - 2221 , - 4518 , - 1715 , - 3332 , - 2569 , - 3506 , - 4783 , - 5040 , - 2917 , - 2494 , - 2411 , - 1308 , - 3265 , - 1482 , - 39 , - 3016 , - 3613 , - 470 , - 3107 , - 4724 , - 3961 , - 4898 , - 735 , - 992 , - 4309 , - 3886 , - 3803 , - 2700 , - 4657 , - 2874 , - 1431 , - 4408 , - 5005 , - 1862 , - 4499 , - 676 , - 5353 , - 850 , - 2127 , - 2384 , - 261 , - 5278 , - 5195 , - 4092 , - 609 , - 4266 , - 2823 , - 360 , - 957 , - 3254 , - 451 , - 2068 , - 1305 , - 2242 , - 3519 , - 3776 , - 1653 , - 1230 , - 1147 , - 44 , - 2001 , - 218 , - 4215 , - 1752 , - 2349 , - 4646 , - 1843 , - 3460 , - 2697 , - 3634 , - 4911 , - 5168 , - 3045 , - 2622 , - 2539 , - 1436 , - 3393 , - 1610 , - 167 , - 3144 , - 3741 , - 598 , - 3235 , - 4852 , - 4089 , - 5026 , - 863 , - 1120 , - 4437 , - 4014 , - 3931 , - 2828 , - 4785 , - 3002 , - 1559 , - 4536 , - 5133 , - 1990 , - 4627 , - 804 , - 41 , - 978 , - 2255 , - 2512 , - 389 , - 5406 , - 5323 , - 4220 , - 737 , - 4394 , - 2951 , - 488 , - 1085 , - 3382 , - 579 , - 2196 , - 1433 , - 2370 , - 3647 , - 3904 , - 1781 , - 1358 , - 1275 , - 172 , - 2129 , - 346 , - 4343 , - 1880 , - 2477 , - 4774 , - 1971 , - 3588 , - 2825 , - 3762 , - 5039 , - 5296 , - 3173 , - 2750 , - 2667 , - 1564 , - 3521 , - 1738 , - 295 , - 3272 , - 3869 , - 726 , - 3363 , - 4980 , - 4217 , - 5154 , - 991 , - 1248 , - 4565 , - 4142 , - 4059 , - 2956 , - 4913 , - 3130 , - 1687 , - 4664 , - 5261 , - 2118 , - 4755 , - 932 , - 169 , - 1106 , - 2383 , - 2640 , - 517 , - 94 , - 11 , - 4348 , - 865 , - 4522 , - 3079 , - 616 , - 1213 , - 3510 , - 707 , - 2324 , - 1561 , - 2498 , - 3775 , - 4032 , - 1909 , - 1486 , - 1403 , - 300 , - 2257 , - 474 , - 4471 , - 2008 , - 2605 , - 4902 , - 2099 , - 3716 , - 2953 , - 3890 , - 5167 , - 5424 , - 3301 , - 2878 , - 2795 , - 1692 , - 3649 , - 1866 , - 423 , - 3400 , - 3997 , - 854 , - 3491 , - 5108 , - 4345 , - 5282 , - 1119 , - 1376 , - 4693 , - 4270 , - 4187 , - 3084 , - 5041 , - 3258 , - 1815 , - 4792 , - 5389 , - 2246 , - 4883 , - 1060 , - 297 , - 1234 , - 2511 , - 2768 , - 645 , - 222 , - 139 , - 4476 , - 993 , - 4650 , - 3207 , - 744 , - 1341 , - 3638 , - 835 , - 2452 , - 1689 , - 2626 , - 3903 , - 4160 , - 2037 , - 1614 , - 1531 , - 428 , - 2385 , - 602 , - 4599 , - 2136 , - 2733 , - 5030 , - 2227 , - 3844 , - 3081 , - 4018 , - 5295 , - 112 , - 3429 , - 3006 , - 2923 , - 1820 , - 3777 , - 1994 , - 551 , - 3528 , - 4125 , - 982 , - 3619 , - 5236 , - 4473 , - 5410 , - 1247 , - 1504 , - 4821 , - 4398 , - 4315 , - 3212 , - 5169 , - 3386 , - 1943 , - 4920 , - 77 , - 2374 , - 5011 , - 1188 , - 425 , - 1362 , - 2639 , - 2896 , - 773 , - 350 , - 267 , - 4604 , - 1121 , - 4778 , - 3335 , - 872 , - 1469 , - 3766 , - 963 , - 2580 , - 1817 , - 2754 , - 4031 , - 4288 , - 2165 , - 1742 , - 1659 , - 556 , - 2513 , - 730 , - 4727 , - 2264 , - 2861 , - 5158 , - 2355 , - 3972 , - 3209 , - 4146 , - 5423 , - 240 , - 3557 , - 3134 , - 3051 , - 1948 , - 3905 , - 2122 , - 679 , - 3656 , - 4253 , - 1110 , - 3747 , - 5364 , - 4601 , - 98 , - 1375 , - 1632 , - 4949 , - 4526 , - 4443 , - 3340 , - 5297 , - 3514 , - 2071 , - 5048 , - 205 , - 2502 , - 5139 , - 1316 , - 553 , - 1490 , - 2767 , - 3024 , - 901 , - 478 , - 395 , - 4732 , - 1249 , - 4906 , - 3463 , - 1000 , - 1597 , - 3894 , - 1091 , - 2708 , - 1945 , - 2882 , - 4159 , - 4416 , - 2293 , - 1870 , - 1787 , - 684 , - 2641 , - 858 , - 4855 , - 2392 , - 2989 , - 5286 , - 2483 , - 4100 , - 3337 , - 4274 , - 111 , - 368 , - 3685 , - 3262 , - 3179 , - 2076 , - 4033 , - 2250 , - 807 , - 3784 , - 4381 , - 1238 , - 3875 , - 52 , - 4729 , - 226 , - 1503 , - 1760 , - 5077 , - 4654 , - 4571 , - 3468 , - 5425 , - 3642 , - 2199 , - 5176 , - 333 , - 2630 , - 5267 , - 1444 , - 681 , - 1618 , - 2895 , - 3152 , - 1029 , - 606 , - 523 , - 4860 , - 1377 , - 5034 , - 3591 , - 1128 , - 1725 , - 4022 , - 1219 , - 2836 , - 2073 , - 3010 , - 4287 , - 4544 , - 2421 , - 1998 , - 1915 , - 812 , - 2769 , - 986 , - 4983 , - 2520 , - 3117 , - 5414 , - 2611 , - 4228 , - 3465 , - 4402 , - 239 , - 496 , - 3813 , - 3390 , - 3307 , - 2204 , - 4161 , - 2378 , - 935 , - 3912 , - 4509 , - 1366 , - 4003 , - 180 , - 4857 , - 354 , - 1631 , - 1888 , - 5205 , - 4782 , - 4699 , - 3596 , - 113 , - 3770 , - 2327 , - 5304 , - 461 , - 2758 , - 5395 , - 1572 , - 809 , - 1746 , - 3023 , - 3280 , - 1157 , - 734 , - 651 , - 4988 , - 1505 , - 5162 , - 3719 , - 1256 , - 1853 , - 4150 , - 1347 , - 2964 , - 2201 , - 3138 , - 4415 , - 4672 , - 2549 , - 2126 , - 2043 , - 940 , - 2897 , - 1114 , - 5111 , - 2648 , - 3245 , - 102 , - 2739 , - 4356 , - 3593 , - 4530 , - 367 , - 624 , - 3941 , - 3518 , - 3435 , - 2332 , - 4289 , - 2506 , - 1063 , - 4040 , - 4637 , - 1494 , - 4131 , - 308 , - 4985 , - 482 , - 1759 , - 2016 , - 5333 , - 4910 , - 4827 , - 3724 , - 241 , - 3898 , - 2455 , - 5432 , - 589 , - 2886 , - 83 , - 1700 , - 937 , - 1874 , - 3151 , - 3408 , - 1285 , - 862 , - 779 , - 5116 , - 1633 , - 5290 , - 3847 , - 1384 , - 1981 , - 4278 , - 1475 , - 3092 , - 2329 , - 3266 , - 4543 , - 4800 , - 2677 , - 2254 , - 2171 , - 1068 , - 3025 , - 1242 , - 5239 , - 2776 , - 3373 , - 230 , - 2867 , - 4484 , - 3721 , - 4658 , - 495 , - 752 , - 4069 , - 3646 , - 3563 , - 2460 , - 4417 , - 2634 , - 1191 , - 4168 , - 4765 , - 1622 , - 4259 , - 436 , - 5113 , - 610 , - 1887 , - 2144 , - 21 , - 5038 , - 4955 , - 3852 , - 369 , - 4026 , - 2583 , - 120 , - 717 , - 3014 , - 211 , - 1828 , - 1065 , - 2002 , - 3279 , - 3536 , - 1413 , - 990 , - 907 , - 5244 , - 1761 , - 5418 , - 3975 , - 1512 , - 2109 , - 4406 , - 1603 , - 3220 , - 2457 , - 3394 , - 4671 , - 4928 , - 2805 , - 2382 , - 2299 , - 1196 , - 3153 , - 1370 , - 5367 , - 2904 , - 3501 , - 358 , - 2995 , - 4612 , - 3849 , - 4786 , - 623 , - 880 , - 4197 , - 3774 , - 3691 , - 2588 , - 4545 , - 2762 , - 1319 , - 4296 , - 4893 , - 1750 , - 4387 , - 564 , - 5241 , - 738 , - 2015 , - 2272 , - 149 , - 5166 , - 5083 , - 3980 , - 497 , - 4154 , - 2711 , - 248 , - 845 , - 3142 , - 339 , - 1956 , - 1193 , - 2130 , - 3407 , - 3664 , - 1541 , - 1118 , - 1035 , - 5372 , - 1889 , - 106 , - 4103 , - 1640 , - 2237 , - 4534 , - 1731 , - 3348 , - 2585 , - 3522 , - 4799 , - 5056 , - 2933 , - 2510 , - 2427 , - 1324 , - 3281 , - 1498 , - 55 , - 3032 , - 3629 , - 486 , - 3123 , - 4740 , - 3977 , - 4914 , - 751 , - 1008 , - 4325 , - 3902 , - 3819 , - 2716 , - 4673 , - 2890 , - 1447 , - 4424 , - 5021 , - 1878 , - 4515 , - 692 , - 5369 , - 866 , - 2143 , - 2400 , - 277 , - 5294 , - 5211 , - 4108 , - 625 , - 4282 , - 2839 , - 376 , - 973 , - 3270 , - 467 , - 2084 , - 1321 , - 2258 , - 3535 , - 3792 , - 1669 , - 1246 , - 1163 , - 60 , - 2017 , - 234 , - 4231 , - 1768 , - 2365 , - 4662 , - 1859 , - 3476 , - 2713 , - 3650 , - 4927 , - 5184 , - 3061 , - 2638 , - 2555 , - 1452 , - 3409 , - 1626 , - 183 , - 3160 , - 3757 , - 614 , - 3251 , - 4868 , - 4105 , - 5042 , - 879 , - 1136 , - 4453 , - 4030 , - 3947 , - 2844 , - 4801 , - 3018 , - 1575 , - 4552 , - 5149 , - 2006 , - 4643 , - 820 , - 57 , - 994 , - 2271 , - 2528 , - 405 , - 5422 , - 5339 , - 4236 , - 753 , - 4410 , - 2967 , - 504 , - 1101 , - 3398 , - 595 , - 2212 , - 1449 , - 2386 , - 3663 , - 3920 , - 1797 , - 1374 , - 1291 , - 188 , - 2145 , - 362 , - 4359 , - 1896 , - 2493 , - 4790 , - 1987 , - 3604 , - 2841 , - 3778 , - 5055 , - 5312 , - 3189 , - 2766 , - 2683 , - 1580 , - 3537 , - 1754 , - 311 , - 3288 , - 3885 , - 742 , - 3379 , - 4996 , - 4233 , - 5170 , - 1007 , - 1264 , - 4581 , - 4158 , - 4075 , - 2972 , - 4929 , - 3146 , - 1703 , - 4680 , - 5277 , - 2134 , - 4771 , - 948 , - 185 , - 1122 , - 2399 , - 2656 , - 533 , - 110 , - 27 , - 4364 , - 881 , - 4538 , - 3095 , - 632 , - 1229 , - 3526 , - 723 , - 2340 , - 1577 , - 2514 , - 3791 , - 4048 , - 1925 , - 1502 , - 1419 , - 316 , - 2273 , - 490 , - 4487 , - 2024 , - 2621 , - 4918 , - 2115 , - 3732 , - 2969 , - 3906 , - 5183 , - 0 , - 2879 , - 770 , - 3993 , - 3604 , - 4419 , - 2998 , - 4157 , - 4456 , - 3207 , - 2474 , - 1569 , - 2556 , - 4747 , - 4702 , - 1733 , - 3408 , - 3535 , - 4178 , - 4649 , - 1508 , - 5075 , - 902 , - 4813 , - 2360 , - 3863 , - 378 , - 2225 , - 460 , - 5403 , - 2606 , - 2389 , - 1312 , - 4191 , - 2082 , - 5305 , - 4916 , - 227 , - 4310 , - 5469 , - 264 , - 4519 , - 3786 , - 2881 , - 3868 , - 555 , - 510 , - 3045 , - 4720 , - 4847 , - 5490 , - 457 , - 2820 , - 883 , - 2214 , - 621 , - 3672 , - 5175 , - 1690 , - 3537 , - 1772 , - 1211 , - 3918 , - 3701 , - 2624 , - 5503 , - 3394 , - 1113 , - 724 , - 1539 , - 118 , - 1277 , - 1576 , - 327 , - 5098 , - 4193 , - 5180 , - 1867 , - 1822 , - 4357 , - 528 , - 655 , - 1298 , - 1769 , - 4132 , - 2195 , - 3526 , - 1933 , - 4984 , - 983 , - 3002 , - 4849 , - 3084 , - 2523 , - 5230 , - 5013 , - 3936 , - 1311 , - 4706 , - 2425 , - 2036 , - 2851 , - 1430 , - 2589 , - 2888 , - 1639 , - 906 , - 1 , - 988 , - 3179 , - 3134 , - 165 , - 1840 , - 1967 , - 2610 , - 3081 , - 5444 , - 3507 , - 4838 , - 3245 , - 792 , - 2295 , - 4314 , - 657 , - 4396 , - 3835 , - 1038 , - 821 , - 5248 , - 2623 , - 514 , - 3737 , - 3348 , - 4163 , - 2742 , - 3901 , - 4200 , - 2951 , - 2218 , - 1313 , - 2300 , - 4491 , - 4446 , - 1477 , - 3152 , - 3279 , - 3922 , - 4393 , - 1252 , - 4819 , - 646 , - 4557 , - 2104 , - 3607 , - 122 , - 1969 , - 204 , - 5147 , - 2350 , - 2133 , - 1056 , - 3935 , - 1826 , - 5049 , - 4660 , - 5475 , - 4054 , - 5213 , - 8 , - 4263 , - 3530 , - 2625 , - 3612 , - 299 , - 254 , - 2789 , - 4464 , - 4591 , - 5234 , - 201 , - 2564 , - 627 , - 1958 , - 365 , - 3416 , - 4919 , - 1434 , - 3281 , - 1516 , - 955 , - 3662 , - 3445 , - 2368 , - 5247 , - 3138 , - 857 , - 468 , - 1283 , - 5366 , - 1021 , - 1320 , - 71 , - 4842 , - 3937 , - 4924 , - 1611 , - 1566 , - 4101 , - 272 , - 399 , - 1042 , - 1513 , - 3876 , - 1939 , - 3270 , - 1677 , - 4728 , - 727 , - 2746 , - 4593 , - 2828 , - 2267 , - 4974 , - 4757 , - 3680 , - 1055 , - 4450 , - 2169 , - 1780 , - 2595 , - 1174 , - 2333 , - 2632 , - 1383 , - 650 , - 5249 , - 732 , - 2923 , - 2878 , - 5413 , - 1584 , - 1711 , - 2354 , - 2825 , - 5188 , - 3251 , - 4582 , - 2989 , - 536 , - 2039 , - 4058 , - 401 , - 4140 , - 3579 , - 782 , - 565 , - 4992 , - 2367 , - 258 , - 3481 , - 3092 , - 3907 , - 2486 , - 3645 , - 3944 , - 2695 , - 1962 , - 1057 , - 2044 , - 4235 , - 4190 , - 1221 , - 2896 , - 3023 , - 3666 , - 4137 , - 996 , - 4563 , - 390 , - 4301 , - 1848 , - 3351 , - 5370 , - 1713 , - 5452 , - 4891 , - 2094 , - 1877 , - 800 , - 3679 , - 1570 , - 4793 , - 4404 , - 5219 , - 3798 , - 4957 , - 5256 , - 4007 , - 3274 , - 2369 , - 3356 , - 43 , - 5502 , - 2533 , - 4208 , - 4335 , - 4978 , - 5449 , - 2308 , - 371 , - 1702 , - 109 , - 3160 , - 4663 , - 1178 , - 3025 , - 1260 , - 699 , - 3406 , - 3189 , - 2112 , - 4991 , - 2882 , - 601 , - 212 , - 1027 , - 5110 , - 765 , - 1064 , - 5319 , - 4586 , - 3681 , - 4668 , - 1355 , - 1310 , - 3845 , - 16 , - 143 , - 786 , - 1257 , - 3620 , - 1683 , - 3014 , - 1421 , - 4472 , - 471 , - 2490 , - 4337 , - 2572 , - 2011 , - 4718 , - 4501 , - 3424 , - 799 , - 4194 , - 1913 , - 1524 , - 2339 , - 918 , - 2077 , - 2376 , - 1127 , - 394 , - 4993 , - 476 , - 2667 , - 2622 , - 5157 , - 1328 , - 1455 , - 2098 , - 2569 , - 4932 , - 2995 , - 4326 , - 2733 , - 280 , - 1783 , - 3802 , - 145 , - 3884 , - 3323 , - 526 , - 309 , - 4736 , - 2111 , - 2 , - 3225 , - 2836 , - 3651 , - 2230 , - 3389 , - 3688 , - 2439 , - 1706 , - 801 , - 1788 , - 3979 , - 3934 , - 965 , - 2640 , - 2767 , - 3410 , - 3881 , - 740 , - 4307 , - 134 , - 4045 , - 1592 , - 3095 , - 5114 , - 1457 , - 5196 , - 4635 , - 1838 , - 1621 , - 544 , - 3423 , - 1314 , - 4537 , - 4148 , - 4963 , - 3542 , - 4701 , - 5000 , - 3751 , - 3018 , - 2113 , - 3100 , - 5291 , - 5246 , - 2277 , - 3952 , - 4079 , - 4722 , - 5193 , - 2052 , - 115 , - 1446 , - 5357 , - 2904 , - 4407 , - 922 , - 2769 , - 1004 , - 443 , - 3150 , - 2933 , - 1856 , - 4735 , - 2626 , - 345 , - 5460 , - 771 , - 4854 , - 509 , - 808 , - 5063 , - 4330 , - 3425 , - 4412 , - 1099 , - 1054 , - 3589 , - 5264 , - 5391 , - 530 , - 1001 , - 3364 , - 1427 , - 2758 , - 1165 , - 4216 , - 215 , - 2234 , - 4081 , - 2316 , - 1755 , - 4462 , - 4245 , - 3168 , - 543 , - 3938 , - 1657 , - 1268 , - 2083 , - 662 , - 1821 , - 2120 , - 871 , - 138 , - 4737 , - 220 , - 2411 , - 2366 , - 4901 , - 1072 , - 1199 , - 1842 , - 2313 , - 4676 , - 2739 , - 4070 , - 2477 , - 24 , - 1527 , - 3546 , - 5393 , - 3628 , - 3067 , - 270 , - 53 , - 4480 , - 1855 , - 5250 , - 2969 , - 2580 , - 3395 , - 1974 , - 3133 , - 3432 , - 2183 , - 1450 , - 545 , - 1532 , - 3723 , - 3678 , - 709 , - 2384 , - 2511 , - 3154 , - 3625 , - 484 , - 4051 , - 5382 , - 3789 , - 1336 , - 2839 , - 4858 , - 1201 , - 4940 , - 4379 , - 1582 , - 1365 , - 288 , - 3167 , - 1058 , - 4281 , - 3892 , - 4707 , - 3286 , - 4445 , - 4744 , - 3495 , - 2762 , - 1857 , - 2844 , - 5035 , - 4990 , - 2021 , - 3696 , - 3823 , - 4466 , - 4937 , - 1796 , - 5363 , - 1190 , - 5101 , - 2648 , - 4151 , - 666 , - 2513 , - 748 , - 187 , - 2894 , - 2677 , - 1600 , - 4479 , - 2370 , - 89 , - 5204 , - 515 , - 4598 , - 253 , - 552 , - 4807 , - 4074 , - 3169 , - 4156 , - 843 , - 798 , - 3333 , - 5008 , - 5135 , - 274 , - 745 , - 3108 , - 1171 , - 2502 , - 909 , - 3960 , - 5463 , - 1978 , - 3825 , - 2060 , - 1499 , - 4206 , - 3989 , - 2912 , - 287 , - 3682 , - 1401 , - 1012 , - 1827 , - 406 , - 1565 , - 1864 , - 615 , - 5386 , - 4481 , - 5468 , - 2155 , - 2110 , - 4645 , - 816 , - 943 , - 1586 , - 2057 , - 4420 , - 2483 , - 3814 , - 2221 , - 5272 , - 1271 , - 3290 , - 5137 , - 3372 , - 2811 , - 14 , - 5301 , - 4224 , - 1599 , - 4994 , - 2713 , - 2324 , - 3139 , - 1718 , - 2877 , - 3176 , - 1927 , - 1194 , - 289 , - 1276 , - 3467 , - 3422 , - 453 , - 2128 , - 2255 , - 2898 , - 3369 , - 228 , - 3795 , - 5126 , - 3533 , - 1080 , - 2583 , - 4602 , - 945 , - 4684 , - 4123 , - 1326 , - 1109 , - 32 , - 2911 , - 802 , - 4025 , - 3636 , - 4451 , - 3030 , - 4189 , - 4488 , - 3239 , - 2506 , - 1601 , - 2588 , - 4779 , - 4734 , - 1765 , - 3440 , - 3567 , - 4210 , - 4681 , - 1540 , - 5107 , - 934 , - 4845 , - 2392 , - 3895 , - 410 , - 2257 , - 492 , - 5435 , - 2638 , - 2421 , - 1344 , - 4223 , - 2114 , - 5337 , - 4948 , - 259 , - 4342 , - 5501 , - 296 , - 4551 , - 3818 , - 2913 , - 3900 , - 587 , - 542 , - 3077 , - 4752 , - 4879 , - 18 , - 489 , - 2852 , - 915 , - 2246 , - 653 , - 3704 , - 5207 , - 1722 , - 3569 , - 1804 , - 1243 , - 3950 , - 3733 , - 2656 , - 31 , - 3426 , - 1145 , - 756 , - 1571 , - 150 , - 1309 , - 1608 , - 359 , - 5130 , - 4225 , - 5212 , - 1899 , - 1854 , - 4389 , - 560 , - 687 , - 1330 , - 1801 , - 4164 , - 2227 , - 3558 , - 1965 , - 5016 , - 1015 , - 3034 , - 4881 , - 3116 , - 2555 , - 5262 , - 5045 , - 3968 , - 1343 , - 4738 , - 2457 , - 2068 , - 2883 , - 1462 , - 2621 , - 2920 , - 1671 , - 938 , - 33 , - 1020 , - 3211 , - 3166 , - 197 , - 1872 , - 1999 , - 2642 , - 3113 , - 5476 , - 3539 , - 4870 , - 3277 , - 824 , - 2327 , - 4346 , - 689 , - 4428 , - 3867 , - 1070 , - 853 , - 5280 , - 2655 , - 546 , - 3769 , - 3380 , - 4195 , - 2774 , - 3933 , - 4232 , - 2983 , - 2250 , - 1345 , - 2332 , - 4523 , - 4478 , - 1509 , - 3184 , - 3311 , - 3954 , - 4425 , - 1284 , - 4851 , - 678 , - 4589 , - 2136 , - 3639 , - 154 , - 2001 , - 236 , - 5179 , - 2382 , - 2165 , - 1088 , - 3967 , - 1858 , - 5081 , - 4692 , - 3 , - 4086 , - 5245 , - 40 , - 4295 , - 3562 , - 2657 , - 3644 , - 331 , - 286 , - 2821 , - 4496 , - 4623 , - 5266 , - 233 , - 2596 , - 659 , - 1990 , - 397 , - 3448 , - 4951 , - 1466 , - 3313 , - 1548 , - 987 , - 3694 , - 3477 , - 2400 , - 5279 , - 3170 , - 889 , - 500 , - 1315 , - 5398 , - 1053 , - 1352 , - 103 , - 4874 , - 3969 , - 4956 , - 1643 , - 1598 , - 4133 , - 304 , - 431 , - 1074 , - 1545 , - 3908 , - 1971 , - 3302 , - 1709 , - 4760 , - 759 , - 2778 , - 4625 , - 2860 , - 2299 , - 5006 , - 4789 , - 3712 , - 1087 , - 4482 , - 2201 , - 1812 , - 2627 , - 1206 , - 2365 , - 2664 , - 1415 , - 682 , - 5281 , - 764 , - 2955 , - 2910 , - 5445 , - 1616 , - 1743 , - 2386 , - 2857 , - 5220 , - 3283 , - 4614 , - 3021 , - 568 , - 2071 , - 4090 , - 433 , - 4172 , - 3611 , - 814 , - 597 , - 5024 , - 2399 , - 290 , - 3513 , - 3124 , - 3939 , - 2518 , - 3677 , - 3976 , - 2727 , - 1994 , - 1089 , - 2076 , - 4267 , - 4222 , - 1253 , - 2928 , - 3055 , - 3698 , - 4169 , - 1028 , - 4595 , - 422 , - 4333 , - 1880 , - 3383 , - 5402 , - 1745 , - 5484 , - 4923 , - 2126 , - 1909 , - 832 , - 3711 , - 1602 , - 4825 , - 4436 , - 5251 , - 3830 , - 4989 , - 5288 , - 4039 , - 3306 , - 2401 , - 3388 , - 75 , - 30 , - 2565 , - 4240 , - 4367 , - 5010 , - 5481 , - 2340 , - 403 , - 1734 , - 141 , - 3192 , - 4695 , - 1210 , - 3057 , - 1292 , - 731 , - 3438 , - 3221 , - 2144 , - 5023 , - 2914 , - 633 , - 244 , - 1059 , - 5142 , - 797 , - 1096 , - 5351 , - 4618 , - 3713 , - 4700 , - 1387 , - 1342 , - 3877 , - 48 , - 175 , - 818 , - 1289 , - 3652 , - 1715 , - 3046 , - 1453 , - 4504 , - 503 , - 2522 , - 4369 , - 2604 , - 2043 , - 4750 , - 4533 , - 3456 , - 831 , - 4226 , - 1945 , - 1556 , - 2371 , - 950 , - 2109 , - 2408 , - 1159 , - 426 , - 5025 , - 508 , - 2699 , - 2654 , - 5189 , - 1360 , - 1487 , - 2130 , - 2601 , - 4964 , - 3027 , - 4358 , - 2765 , - 312 , - 1815 , - 3834 , - 177 , - 3916 , - 3355 , - 558 , - 341 , - 4768 , - 2143 , - 34 , - 3257 , - 2868 , - 3683 , - 2262 , - 3421 , - 3720 , - 2471 , - 1738 , - 833 , - 1820 , - 4011 , - 3966 , - 997 , - 2672 , - 2799 , - 3442 , - 3913 , - 772 , - 4339 , - 166 , - 4077 , - 1624 , - 3127 , - 5146 , - 1489 , - 5228 , - 4667 , - 1870 , - 1653 , - 576 , - 3455 , - 1346 , - 4569 , - 4180 , - 4995 , - 3574 , - 4733 , - 5032 , - 3783 , - 3050 , - 2145 , - 3132 , - 5323 , - 5278 , - 2309 , - 3984 , - 4111 , - 4754 , - 5225 , - 2084 , - 147 , - 1478 , - 5389 , - 2936 , - 4439 , - 954 , - 2801 , - 1036 , - 475 , - 3182 , - 2965 , - 1888 , - 4767 , - 2658 , - 377 , - 5492 , - 803 , - 4886 , - 541 , - 840 , - 5095 , - 4362 , - 3457 , - 4444 , - 1131 , - 1086 , - 3621 , - 5296 , - 5423 , - 562 , - 1033 , - 3396 , - 1459 , - 2790 , - 1197 , - 4248 , - 247 , - 2266 , - 4113 , - 2348 , - 1787 , - 4494 , - 4277 , - 3200 , - 575 , - 3970 , - 1689 , - 1300 , - 2115 , - 694 , - 1853 , - 2152 , - 903 , - 170 , - 4769 , - 252 , - 2443 , - 2398 , - 4933 , - 1104 , - 1231 , - 1874 , - 2345 , - 4708 , - 2771 , - 4102 , - 2509 , - 56 , - 1559 , - 3578 , - 5425 , - 3660 , - 3099 , - 302 , - 85 , - 4512 , - 1887 , - 5282 , - 3001 , - 2612 , - 3427 , - 2006 , - 3165 , - 3464 , - 2215 , - 1482 , - 577 , - 1564 , - 3755 , - 3710 , - 741 , - 2416 , - 2543 , - 3186 , - 3657 , - 516 , - 4083 , - 5414 , - 3821 , - 1368 , - 2871 , - 4890 , - 1233 , - 4972 , - 4411 , - 1614 , - 1397 , - 320 , - 3199 , - 1090 , - 4313 , - 3924 , - 4739 , - 3318 , - 4477 , - 4776 , - 3527 , - 2794 , - 1889 , - 2876 , - 5067 , - 5022 , - 2053 , - 3728 , - 3855 , - 4498 , - 4969 , - 1828 , - 5395 , - 1222 , - 5133 , - 2680 , - 4183 , - 698 , - 2545 , - 780 , - 219 , - 2926 , - 2709 , - 1632 , - 4511 , - 2402 , - 121 , - 5236 , - 547 , - 4630 , - 285 , - 584 , - 4839 , - 4106 , - 3201 , - 4188 , - 875 , - 830 , - 3365 , - 5040 , - 5167 , - 306 , - 777 , - 3140 , - 1203 , - 2534 , - 941 , - 3992 , - 5495 , - 2010 , - 3857 , - 2092 , - 1531 , - 4238 , - 4021 , - 2944 , - 319 , - 3714 , - 1433 , - 1044 , - 1859 , - 438 , - 1597 , - 1896 , - 647 , - 5418 , - 4513 , - 5500 , - 2187 , - 2142 , - 4677 , - 848 , - 975 , - 1618 , - 2089 , - 4452 , - 2515 , - 3846 , - 2253 , - 5304 , - 1303 , - 3322 , - 5169 , - 3404 , - 2843 , - 46 , - 5333 , - 4256 , - 1631 , - 5026 , - 2745 , - 2356 , - 3171 , - 1750 , - 2909 , - 3208 , - 1959 , - 1226 , - 321 , - 1308 , - 3499 , - 3454 , - 485 , - 2160 , - 2287 , - 2930 , - 3401 , - 260 , - 3827 , - 5158 , - 3565 , - 1112 , - 2615 , - 4634 , - 977 , - 4716 , - 4155 , - 1358 , - 1141 , - 64 , - 2943 , - 834 , - 4057 , - 3668 , - 4483 , - 3062 , - 4221 , - 4520 , - 3271 , - 2538 , - 1633 , - 2620 , - 4811 , - 4766 , - 1797 , - 3472 , - 3599 , - 4242 , - 4713 , - 1572 , - 5139 , - 966 , - 4877 , - 2424 , - 3927 , - 442 , - 2289 , - 524 , - 5467 , - 2670 , - 2453 , - 1376 , - 4255 , - 2146 , - 5369 , - 4980 , - 291 , - 4374 , - 29 , - 328 , - 4583 , - 3850 , - 2945 , - 3932 , - 619 , - 574 , - 3109 , - 4784 , - 4911 , - 50 , - 521 , - 2884 , - 947 , - 2278 , - 685 , - 3736 , - 5239 , - 1754 , - 3601 , - 1836 , - 1275 , - 3982 , - 3765 , - 2688 , - 63 , - 3458 , - 1177 , - 788 , - 1603 , - 182 , - 1341 , - 1640 , - 391 , - 5162 , - 4257 , - 5244 , - 1931 , - 1886 , - 4421 , - 592 , - 719 , - 1362 , - 1833 , - 4196 , - 2259 , - 3590 , - 1997 , - 5048 , - 1047 , - 3066 , - 4913 , - 3148 , - 2587 , - 5294 , - 5077 , - 4000 , - 1375 , - 4770 , - 2489 , - 2100 , - 2915 , - 1494 , - 2653 , - 2952 , - 1703 , - 970 , - 65 , - 1052 , - 3243 , - 3198 , - 229 , - 1904 , - 2031 , - 2674 , - 3145 , - 4 , - 3571 , - 4902 , - 3309 , - 856 , - 2359 , - 4378 , - 721 , - 4460 , - 3899 , - 1102 , - 885 , - 5312 , - 2687 , - 578 , - 3801 , - 3412 , - 4227 , - 2806 , - 3965 , - 4264 , - 3015 , - 2282 , - 1377 , - 2364 , - 4555 , - 4510 , - 1541 , - 3216 , - 3343 , - 3986 , - 4457 , - 1316 , - 4883 , - 710 , - 4621 , - 2168 , - 3671 , - 186 , - 2033 , - 268 , - 5211 , - 2414 , - 2197 , - 1120 , - 3999 , - 1890 , - 5113 , - 4724 , - 35 , - 4118 , - 5277 , - 72 , - 4327 , - 3594 , - 2689 , - 3676 , - 363 , - 318 , - 2853 , - 4528 , - 4655 , - 5298 , - 265 , - 2628 , - 691 , - 2022 , - 429 , - 3480 , - 4983 , - 1498 , - 3345 , - 1580 , - 1019 , - 3726 , - 3509 , - 2432 , - 5311 , - 3202 , - 921 , - 532 , - 1347 , - 5430 , - 1085 , - 1384 , - 135 , - 4906 , - 4001 , - 4988 , - 1675 , - 1630 , - 4165 , - 336 , - 463 , - 1106 , - 1577 , - 3940 , - 2003 , - 3334 , - 1741 , - 4792 , - 791 , - 2810 , - 4657 , - 2892 , - 2331 , - 5038 , - 4821 , - 3744 , - 1119 , - 4514 , - 2233 , - 1844 , - 2659 , - 1238 , - 2397 , - 2696 , - 1447 , - 714 , - 5313 , - 796 , - 2987 , - 2942 , - 5477 , - 1648 , - 1775 , - 2418 , - 2889 , - 5252 , - 3315 , - 4646 , - 3053 , - 600 , - 2103 , - 4122 , - 465 , - 4204 , - 3643 , - 846 , - 629 , - 5056 , - 2431 , - 322 , - 3545 , - 3156 , - 3971 , - 2550 , - 3709 , - 4008 , - 2759 , - 2026 , - 1121 , - 2108 , - 4299 , - 4254 , - 1285 , - 2960 , - 3087 , - 3730 , - 4201 , - 1060 , - 4627 , - 454 , - 4365 , - 1912 , - 3415 , - 5434 , - 1777 , - 12 , - 4955 , - 2158 , - 1941 , - 864 , - 3743 , - 1634 , - 4857 , - 4468 , - 5283 , - 3862 , - 5021 , - 5320 , - 4071 , - 3338 , - 2433 , - 3420 , - 107 , - 62 , - 2597 , - 4272 , - 4399 , - 5042 , - 9 , - 2372 , - 435 , - 1766 , - 173 , - 3224 , - 4727 , - 1242 , - 3089 , - 1324 , - 763 , - 3470 , - 3253 , - 2176 , - 5055 , - 2946 , - 665 , - 276 , - 1091 , - 5174 , - 829 , - 1128 , - 5383 , - 4650 , - 3745 , - 4732 , - 1419 , - 1374 , - 3909 , - 80 , - 207 , - 850 , - 1321 , - 3684 , - 1747 , - 3078 , - 1485 , - 4536 , - 535 , - 2554 , - 4401 , - 2636 , - 2075 , - 4782 , - 4565 , - 3488 , - 863 , - 4258 , - 1977 , - 1588 , - 2403 , - 982 , - 2141 , - 2440 , - 1191 , - 458 , - 5057 , - 540 , - 2731 , - 2686 , - 5221 , - 1392 , - 1519 , - 2162 , - 2633 , - 4996 , - 3059 , - 4390 , - 2797 , - 344 , - 1847 , - 3866 , - 209 , - 3948 , - 3387 , - 590 , - 373 , - 4800 , - 2175 , - 66 , - 3289 , - 2900 , - 3715 , - 2294 , - 3453 , - 3752 , - 2503 , - 1770 , - 865 , - 1852 , - 4043 , - 3998 , - 1029 , - 2704 , - 2831 , - 3474 , - 3945 , - 804 , - 4371 , - 198 , - 4109 , - 1656 , - 3159 , - 5178 , - 1521 , - 5260 , - 4699 , - 1902 , - 1685 , - 608 , - 3487 , - 1378 , - 4601 , - 4212 , - 5027 , - 3606 , - 4765 , - 5064 , - 3815 , - 3082 , - 2177 , - 3164 , - 5355 , - 5310 , - 2341 , - 4016 , - 4143 , - 4786 , - 5257 , - 2116 , - 179 , - 1510 , - 5421 , - 2968 , - 4471 , - 986 , - 2833 , - 1068 , - 507 , - 3214 , - 2997 , - 1920 , - 4799 , - 2690 , - 409 , - 20 , - 835 , - 4918 , - 573 , - 872 , - 5127 , - 4394 , - 3489 , - 4476 , - 1163 , - 1118 , - 3653 , - 5328 , - 5455 , - 594 , - 1065 , - 3428 , - 1491 , - 2822 , - 1229 , - 4280 , - 279 , - 2298 , - 4145 , - 2380 , - 1819 , - 4526 , - 4309 , - 3232 , - 607 , - 4002 , - 1721 , - 1332 , - 2147 , - 726 , - 1885 , - 2184 , - 935 , - 202 , - 4801 , - 284 , - 2475 , - 2430 , - 4965 , - 1136 , - 1263 , - 1906 , - 2377 , - 4740 , - 2803 , - 4134 , - 2541 , - 88 , - 1591 , - 3610 , - 5457 , - 3692 , - 3131 , - 334 , - 117 , - 4544 , - 1919 , - 5314 , - 3033 , - 2644 , - 3459 , - 2038 , - 3197 , - 3496 , - 2247 , - 1514 , - 609 , - 1596 , - 3787 , - 3742 , - 773 , - 2448 , - 2575 , - 3218 , - 3689 , - 548 , - 4115 , - 5446 , - 3853 , - 1400 , - 2903 , - 4922 , - 1265 , - 5004 , - 4443 , - 1646 , - 1429 , - 352 , - 3231 , - 1122 , - 4345 , - 3956 , - 4771 , - 3350 , - 4509 , - 4808 , - 3559 , - 2826 , - 1921 , - 2908 , - 5099 , - 5054 , - 2085 , - 3760 , - 3887 , - 4530 , - 5001 , - 1860 , - 5427 , - 1254 , - 5165 , - 2712 , - 4215 , - 730 , - 2577 , - 812 , - 251 , - 2958 , - 2741 , - 1664 , - 4543 , - 2434 , - 153 , - 5268 , - 579 , - 4662 , - 317 , - 616 , - 4871 , - 4138 , - 3233 , - 4220 , - 907 , - 862 , - 3397 , - 5072 , - 5199 , - 338 , - 809 , - 3172 , - 1235 , - 2566 , - 973 , - 4024 , - 23 , - 2042 , - 3889 , - 2124 , - 1563 , - 4270 , - 4053 , - 2976 , - 351 , - 3746 , - 1465 , - 1076 , - 1891 , - 470 , - 1629 , - 1928 , - 679 , - 5450 , - 4545 , - 28 , - 2219 , - 2174 , - 4709 , - 880 , - 1007 , - 1650 , - 2121 , - 4484 , - 2547 , - 3878 , - 2285 , - 5336 , - 1335 , - 3354 , - 5201 , - 3436 , - 2875 , - 78 , - 5365 , - 4288 , - 1663 , - 5058 , - 2777 , - 2388 , - 3203 , - 1782 , - 2941 , - 3240 , - 1991 , - 1258 , - 353 , - 1340 , - 3531 , - 3486 , - 517 , - 2192 , - 2319 , - 2962 , - 3433 , - 292 , - 3859 , - 5190 , - 3597 , - 1144 , - 2647 , - 4666 , - 1009 , - 4748 , - 4187 , - 1390 , - 1173 , - 96 , - 2975 , - 866 , - 4089 , - 3700 , - 4515 , - 3094 , - 4253 , - 4552 , - 3303 , - 2570 , - 1665 , - 2652 , - 4843 , - 4798 , - 1829 , - 3504 , - 3631 , - 4274 , - 4745 , - 1604 , - 5171 , - 998 , - 4909 , - 2456 , - 3959 , - 474 , - 2321 , - 556 , - 5499 , - 2702 , - 2485 , - 1408 , - 4287 , - 2178 , - 5401 , - 5012 , - 323 , - 4406 , - 61 , - 360 , - 4615 , - 3882 , - 2977 , - 3964 , - 651 , - 606 , - 3141 , - 4816 , - 4943 , - 82 , - 553 , - 2916 , - 979 , - 2310 , - 717 , - 3768 , - 5271 , - 1786 , - 3633 , - 1868 , - 1307 , - 4014 , - 3797 , - 2720 , - 95 , - 3490 , - 1209 , - 820 , - 1635 , - 214 , - 1373 , - 1672 , - 423 , - 5194 , - 4289 , - 5276 , - 1963 , - 1918 , - 4453 , - 624 , - 751 , - 1394 , - 1865 , - 4228 , - 2291 , - 3622 , - 2029 , - 5080 , - 1079 , - 3098 , - 4945 , - 3180 , - 2619 , - 5326 , - 5109 , - 4032 , - 1407 , - 4802 , - 2521 , - 2132 , - 2947 , - 1526 , - 2685 , - 2984 , - 1735 , - 1002 , - 97 , - 1084 , - 3275 , - 3230 , - 261 , - 1936 , - 2063 , - 2706 , - 3177 , - 36 , - 3603 , - 4934 , - 3341 , - 888 , - 2391 , - 4410 , - 753 , - 4492 , - 3931 , - 1134 , - 917 , - 5344 , - 2719 , - 610 , - 3833 , - 3444 , - 4259 , - 2838 , - 3997 , - 4296 , - 3047 , - 2314 , - 1409 , - 2396 , - 4587 , - 4542 , - 1573 , - 3248 , - 3375 , - 4018 , - 4489 , - 1348 , - 4915 , - 742 , - 4653 , - 2200 , - 3703 , - 218 , - 2065 , - 300 , - 5243 , - 2446 , - 2229 , - 1152 , - 4031 , - 1922 , - 5145 , - 4756 , - 67 , - 4150 , - 5309 , - 104 , - 4359 , - 3626 , - 2721 , - 3708 , - 395 , - 350 , - 2885 , - 4560 , - 4687 , - 5330 , - 297 , - 2660 , - 723 , - 2054 , - 461 , - 3512 , - 5015 , - 1530 , - 3377 , - 1612 , - 1051 , - 3758 , - 3541 , - 2464 , - 5343 , - 3234 , - 953 , - 564 , - 1379 , - 5462 , - 1117 , - 1416 , - 167 , - 4938 , - 4033 , - 5020 , - 1707 , - 1662 , - 4197 , - 368 , - 495 , - 1138 , - 1609 , - 3972 , - 2035 , - 3366 , - 1773 , - 4824 , - 823 , - 2842 , - 4689 , - 2924 , - 2363 , - 5070 , - 4853 , - 3776 , - 1151 , - 4546 , - 2265 , - 1876 , - 2691 , - 1270 , - 2429 , - 2728 , - 1479 , - 746 , - 5345 , - 828 , - 3019 , - 2974 , - 5 , - 1680 , - 1807 , - 2450 , - 2921 , - 5284 , - 3347 , - 4678 , - 3085 , - 632 , - 2135 , - 4154 , - 497 , - 4236 , - 3675 , - 878 , - 661 , - 5088 , - 2463 , - 354 , - 3577 , - 3188 , - 4003 , - 2582 , - 3741 , - 4040 , - 2791 , - 2058 , - 1153 , - 2140 , - 4331 , - 4286 , - 1317 , - 2992 , - 3119 , - 3762 , - 4233 , - 1092 , - 4659 , - 486 , - 4397 , - 1944 , - 3447 , - 5466 , - 1809 , - 44 , - 4987 , - 2190 , - 1973 , - 896 , - 3775 , - 1666 , - 4889 , - 4500 , - 5315 , - 3894 , - 5053 , - 5352 , - 4103 , - 3370 , - 2465 , - 3452 , - 139 , - 94 , - 2629 , - 4304 , - 4431 , - 5074 , - 41 , - 2404 , - 467 , - 1798 , - 205 , - 3256 , - 4759 , - 1274 , - 3121 , - 1356 , - 795 , - 3502 , - 3285 , - 2208 , - 5087 , - 2978 , - 697 , - 308 , - 1123 , - 5206 , - 861 , - 1160 , - 5415 , - 4682 , - 3777 , - 4764 , - 1451 , - 1406 , - 3941 , - 112 , - 239 , - 882 , - 1353 , - 3716 , - 1779 , - 3110 , - 1517 , - 4568 , - 567 , - 2586 , - 4433 , - 2668 , - 2107 , - 4814 , - 4597 , - 3520 , - 895 , - 4290 , - 2009 , - 1620 , - 2435 , - 1014 , - 2173 , - 2472 , - 1223 , - 490 , - 5089 , - 572 , - 2763 , - 2718 , - 5253 , - 1424 , - 1551 , - 2194 , - 2665 , - 5028 , - 3091 , - 4422 , - 2829 , - 376 , - 1879 , - 3898 , - 241 , - 3980 , - 3419 , - 622 , - 405 , - 4832 , - 2207 , - 98 , - 3321 , - 2932 , - 3747 , - 2326 , - 3485 , - 3784 , - 2535 , - 1802 , - 897 , - 1884 , - 4075 , - 4030 , - 1061 , - 2736 , - 2863 , - 3506 , - 3977 , - 836 , - 4403 , - 230 , - 4141 , - 1688 , - 3191 , - 5210 , - 1553 , - 5292 , - 4731 , - 1934 , - 1717 , - 640 , - 3519 , - 1410 , - 4633 , - 4244 , - 5059 , - 3638 , - 4797 , - 5096 , - 3847 , - 3114 , - 2209 , - 3196 , - 5387 , - 5342 , - 2373 , - 4048 , - 4175 , - 4818 , - 5289 , - 2148 , - 211 , - 1542 , - 5453 , - 3000 , - 4503 , - 1018 , - 2865 , - 1100 , - 539 , - 3246 , - 3029 , - 1952 , - 4831 , - 2722 , - 441 , - 52 , - 867 , - 4950 , - 605 , - 904 , - 5159 , - 4426 , - 3521 , - 4508 , - 1195 , - 1150 , - 3685 , - 5360 , - 5487 , - 626 , - 1097 , - 3460 , - 1523 , - 2854 , - 1261 , - 4312 , - 311 , - 2330 , - 4177 , - 2412 , - 1851 , - 4558 , - 4341 , - 3264 , - 639 , - 4034 , - 1753 , - 1364 , - 2179 , - 758 , - 1917 , - 2216 , - 967 , - 234 , - 4833 , - 316 , - 2507 , - 2462 , - 4997 , - 1168 , - 1295 , - 1938 , - 2409 , - 4772 , - 2835 , - 4166 , - 2573 , - 120 , - 1623 , - 3642 , - 5489 , - 3724 , - 3163 , - 366 , - 149 , - 4576 , - 1951 , - 5346 , - 3065 , - 2676 , - 3491 , - 2070 , - 3229 , - 3528 , - 2279 , - 1546 , - 641 , - 1628 , - 3819 , - 3774 , - 805 , - 2480 , - 2607 , - 3250 , - 3721 , - 580 , - 4147 , - 5478 , - 3885 , - 1432 , - 2935 , - 4954 , - 1297 , - 5036 , - 4475 , - 1678 , - 1461 , - 384 , - 3263 , - 1154 , - 4377 , - 3988 , - 4803 , - 3382 , - 4541 , - 4840 , - 3591 , - 2858 , - 1953 , - 2940 , - 5131 , - 5086 , - 2117 , - 3792 , - 3919 , - 4562 , - 5033 , - 1892 , - 5459 , - 1286 , - 5197 , - 2744 , - 4247 , - 762 , - 2609 , - 844 , - 283 , - 2990 , - 2773 , - 1696 , - 4575 , - 2466 , - 185 , - 5300 , - 611 , - 4694 , - 349 , - 648 , - 4903 , - 4170 , - 3265 , - 4252 , - 939 , - 894 , - 3429 , - 5104 , - 5231 , - 370 , - 841 , - 3204 , - 1267 , - 2598 , - 1005 , - 4056 , - 55 , - 2074 , - 3921 , - 2156 , - 1595 , - 4302 , - 4085 , - 3008 , - 383 , - 3778 , - 1497 , - 1108 , - 1923 , - 502 , - 1661 , - 1960 , - 711 , - 5482 , - 4577 , - 60 , - 2251 , - 2206 , - 4741 , - 912 , - 1039 , - 1682 , - 2153 , - 4516 , - 2579 , - 3910 , - 2317 , - 5368 , - 1367 , - 3386 , - 5233 , - 3468 , - 2907 , - 110 , - 5397 , - 4320 , - 1695 , - 5090 , - 2809 , - 2420 , - 3235 , - 1814 , - 2973 , - 3272 , - 2023 , - 1290 , - 385 , - 1372 , - 3563 , - 3518 , - 549 , - 2224 , - 2351 , - 2994 , - 3465 , - 324 , - 3891 , - 5222 , - 3629 , - 1176 , - 2679 , - 4698 , - 1041 , - 4780 , - 4219 , - 1422 , - 1205 , - 128 , - 3007 , - 898 , - 4121 , - 3732 , - 4547 , - 3126 , - 4285 , - 4584 , - 3335 , - 2602 , - 1697 , - 2684 , - 4875 , - 4830 , - 1861 , - 3536 , - 3663 , - 4306 , - 4777 , - 1636 , - 5203 , - 1030 , - 4941 , - 2488 , - 3991 , - 506 , - 2353 , - 588 , - 27 , - 2734 , - 2517 , - 1440 , - 4319 , - 2210 , - 5433 , - 5044 , - 355 , - 4438 , - 93 , - 392 , - 4647 , - 3914 , - 3009 , - 3996 , - 683 , - 638 , - 3173 , - 4848 , - 4975 , - 114 , - 585 , - 2948 , - 1011 , - 2342 , - 749 , - 3800 , - 5303 , - 1818 , - 3665 , - 1900 , - 1339 , - 4046 , - 3829 , - 2752 , - 127 , - 3522 , - 1241 , - 852 , - 1667 , - 246 , - 1405 , - 1704 , - 455 , - 5226 , - 4321 , - 5308 , - 1995 , - 1950 , - 4485 , - 656 , - 783 , - 1426 , - 1897 , - 4260 , - 2323 , - 3654 , - 2061 , - 5112 , - 1111 , - 3130 , - 4977 , - 3212 , - 2651 , - 5358 , - 5141 , - 4064 , - 1439 , - 4834 , - 2553 , - 2164 , - 2979 , - 1558 , - 2717 , - 3016 , - 1767 , - 1034 , - 129 , - 1116 , - 3307 , - 3262 , - 293 , - 1968 , - 2095 , - 2738 , - 3209 , - 68 , - 3635 , - 4966 , - 3373 , - 920 , - 2423 , - 4442 , - 785 , - 4524 , - 3963 , - 1166 , - 949 , - 5376 , - 2751 , - 642 , - 3865 , - 3476 , - 4291 , - 2870 , - 4029 , - 4328 , - 3079 , - 2346 , - 1441 , - 2428 , - 4619 , - 4574 , - 1605 , - 3280 , - 3407 , - 4050 , - 4521 , - 1380 , - 4947 , - 774 , - 4685 , - 2232 , - 3735 , - 250 , - 2097 , - 332 , - 5275 , - 2478 , - 2261 , - 1184 , - 4063 , - 1954 , - 5177 , - 4788 , - 99 , - 4182 , - 5341 , - 136 , - 4391 , - 3658 , - 2753 , - 3740 , - 427 , - 382 , - 2917 , - 4592 , - 4719 , - 5362 , - 329 , - 2692 , - 755 , - 2086 , - 493 , - 3544 , - 5047 , - 1562 , - 3409 , - 1644 , - 1083 , - 3790 , - 3573 , - 2496 , - 5375 , - 3266 , - 985 , - 596 , - 1411 , - 5494 , - 1149 , - 1448 , - 199 , - 4970 , - 4065 , - 5052 , - 1739 , - 1694 , - 4229 , - 400 , - 527 , - 1170 , - 1641 , - 4004 , - 2067 , - 3398 , - 1805 , - 4856 , - 855 , - 2874 , - 4721 , - 2956 , - 2395 , - 5102 , - 4885 , - 3808 , - 1183 , - 4578 , - 2297 , - 1908 , - 2723 , - 1302 , - 2461 , - 2760 , - 1511 , - 778 , - 5377 , - 860 , - 3051 , - 3006 , - 37 , - 1712 , - 1839 , - 2482 , - 2953 , - 5316 , - 3379 , - 4710 , - 3117 , - 664 , - 2167 , - 4186 , - 529 , - 4268 , - 3707 , - 910 , - 693 , - 5120 , - 2495 , - 386 , - 3609 , - 3220 , - 4035 , - 2614 , - 3773 , - 4072 , - 2823 , - 2090 , - 1185 , - 2172 , - 4363 , - 4318 , - 1349 , - 3024 , - 3151 , - 3794 , - 4265 , - 1124 , - 4691 , - 518 , - 4429 , - 1976 , - 3479 , - 5498 , - 1841 , - 76 , - 5019 , - 2222 , - 2005 , - 928 , - 3807 , - 1698 , - 4921 , - 4532 , - 5347 , - 3926 , - 5085 , - 5384 , - 4135 , - 3402 , - 2497 , - 3484 , - 171 , - 126 , - 2661 , - 4336 , - 4463 , - 5106 , - 73 , - 2436 , - 499 , - 1830 , - 237 , - 3288 , - 4791 , - 1306 , - 3153 , - 1388 , - 827 , - 3534 , - 3317 , - 2240 , - 5119 , - 3010 , - 729 , - 340 , - 1155 , - 5238 , - 893 , - 1192 , - 5447 , - 4714 , - 3809 , - 4796 , - 1483 , - 1438 , - 3973 , - 144 , - 271 , - 914 , - 1385 , - 3748 , - 1811 , - 3142 , - 1549 , - 4600 , - 599 , - 2618 , - 4465 , - 2700 , - 2139 , - 4846 , - 4629 , - 3552 , - 927 , - 4322 , - 2041 , - 1652 , - 2467 , - 1046 , - 2205 , - 2504 , - 1255 , - 522 , - 5121 , - 604 , - 2795 , - 2750 , - 5285 , - 1456 , - 1583 , - 2226 , - 2697 , - 5060 , - 3123 , - 4454 , - 2861 , - 408 , - 1911 , - 3930 , - 273 , - 4012 , - 3451 , - 654 , - 437 , - 4864 , - 2239 , - 130 , - 3353 , - 2964 , - 3779 , - 2358 , - 3517 , - 3816 , - 2567 , - 1834 , - 929 , - 1916 , - 4107 , - 4062 , - 1093 , - 2768 , - 2895 , - 3538 , - 4009 , - 868 , - 4435 , - 262 , - 4173 , - 1720 , - 3223 , - 5242 , - 1585 , - 5324 , - 4763 , - 1966 , - 1749 , - 672 , - 3551 , - 1442 , - 4665 , - 4276 , - 5091 , - 3670 , - 4829 , - 5128 , - 3879 , - 3146 , - 2241 , - 3228 , - 5419 , - 5374 , - 2405 , - 4080 , - 4207 , - 4850 , - 5321 , - 2180 , - 243 , - 1574 , - 5485 , - 3032 , - 4535 , - 1050 , - 2897 , - 1132 , - 571 , - 3278 , - 3061 , - 1984 , - 4863 , - 2754 , - 473 , - 84 , - 899 , - 4982 , - 637 , - 936 , - 5191 , - 4458 , - 3553 , - 4540 , - 1227 , - 1182 , - 3717 , - 5392 , - 15 , - 658 , - 1129 , - 3492 , - 1555 , - 2886 , - 1293 , - 4344 , - 343 , - 2362 , - 4209 , - 2444 , - 1883 , - 4590 , - 4373 , - 3296 , - 671 , - 4066 , - 1785 , - 1396 , - 2211 , - 790 , - 1949 , - 2248 , - 999 , - 266 , - 4865 , - 348 , - 2539 , - 2494 , - 5029 , - 1200 , - 1327 , - 1970 , - 2441 , - 4804 , - 2867 , - 4198 , - 2605 , - 152 , - 1655 , - 3674 , - 17 , - 3756 , - 3195 , - 398 , - 181 , - 4608 , - 1983 , - 5378 , - 3097 , - 2708 , - 3523 , - 2102 , - 3261 , - 3560 , - 2311 , - 1578 , - 673 , - 1660 , - 3851 , - 3806 , - 837 , - 2512 , - 2639 , - 3282 , - 3753 , - 612 , - 4179 , - 6 , - 3917 , - 1464 , - 2967 , - 4986 , - 1329 , - 5068 , - 4507 , - 1710 , - 1493 , - 416 , - 3295 , - 1186 , - 4409 , - 4020 , - 4835 , - 3414 , - 4573 , - 4872 , - 3623 , - 2890 , - 1985 , - 2972 , - 5163 , - 5118 , - 2149 , - 3824 , - 3951 , - 4594 , - 5065 , - 1924 , - 5491 , - 1318 , - 5229 , - 2776 , - 4279 , - 794 , - 2641 , - 876 , - 315 , - 3022 , - 2805 , - 1728 , - 4607 , - 2498 , - 217 , - 5332 , - 643 , - 4726 , - 381 , - 680 , - 4935 , - 4202 , - 3297 , - 4284 , - 971 , - 926 , - 3461 , - 5136 , - 5263 , - 402 , - 873 , - 3236 , - 1299 , - 2630 , - 1037 , - 4088 , - 87 , - 2106 , - 3953 , - 2188 , - 1627 , - 4334 , - 4117 , - 3040 , - 415 , - 3810 , - 1529 , - 1140 , - 1955 , - 534 , - 1693 , - 1992 , - 743 , - 10 , - 4609 , - 92 , - 2283 , - 2238 , - 4773 , - 944 , - 1071 , - 1714 , - 2185 , - 4548 , - 2611 , - 3942 , - 2349 , - 5400 , - 1399 , - 3418 , - 5265 , - 3500 , - 2939 , - 142 , - 5429 , - 4352 , - 1727 , - 5122 , - 2841 , - 2452 , - 3267 , - 1846 , - 3005 , - 3304 , - 2055 , - 1322 , - 417 , - 1404 , - 3595 , - 3550 , - 581 , - 2256 , - 2383 , - 3026 , - 3497 , - 356 , - 3923 , - 5254 , - 3661 , - 1208 , - 2711 , - 4730 , - 1073 , - 4812 , - 4251 , - 1454 , - 1237 , - 160 , - 3039 , - 930 , - 4153 , - 3764 , - 4579 , - 3158 , - 4317 , - 4616 , - 3367 , - 2634 , - 1729 , - 2716 , - 4907 , - 4862 , - 1893 , - 3568 , - 3695 , - 4338 , - 4809 , - 1668 , - 5235 , - 1062 , - 4973 , - 2520 , - 4023 , - 538 , - 2385 , - 620 , - 59 , - 2766 , - 2549 , - 1472 , - 4351 , - 2242 , - 5465 , - 5076 , - 387 , - 4470 , - 125 , - 424 , - 4679 , - 3946 , - 3041 , - 4028 , - 715 , - 670 , - 3205 , - 4880 , - 5007 , - 146 , - 617 , - 2980 , - 1043 , - 2374 , - 781 , - 3832 , - 5335 , - 1850 , - 3697 , - 1932 , - 1371 , - 4078 , - 3861 , - 2784 , - 159 , - 3554 , - 1273 , - 884 , - 1699 , - 278 , - 1437 , - 1736 , - 487 , - 5258 , - 4353 , - 5340 , - 2027 , - 1982 , - 4517 , - 688 , - 815 , - 1458 , - 1929 , - 4292 , - 2355 , - 3686 , - 2093 , - 5144 , - 1143 , - 3162 , - 5009 , - 3244 , - 2683 , - 5390 , - 5173 , - 4096 , - 1471 , - 4866 , - 2585 , - 2196 , - 3011 , - 1590 , - 2749 , - 3048 , - 1799 , - 1066 , - 161 , - 1148 , - 3339 , - 3294 , - 325 , - 2000 , - 2127 , - 2770 , - 3241 , - 100 , - 3667 , - 4998 , - 3405 , - 952 , - 2455 , - 4474 , - 817 , - 4556 , - 3995 , - 1198 , - 981 , - 5408 , - 2783 , - 674 , - 3897 , - 3508 , - 4323 , - 2902 , - 4061 , - 4360 , - 3111 , - 2378 , - 1473 , - 2460 , - 4651 , - 4606 , - 1637 , - 3312 , - 3439 , - 4082 , - 4553 , - 1412 , - 4979 , - 806 , - 4717 , - 2264 , - 3767 , - 282 , - 2129 , - 364 , - 5307 , - 2510 , - 2293 , - 1216 , - 4095 , - 1986 , - 5209 , - 4820 , - 131 , - 4214 , - 5373 , - 168 , - 4423 , - 3690 , - 2785 , - 3772 , - 459 , - 414 , - 2949 , - 4624 , - 4751 , - 5394 , - 361 , - 2724 , - 787 , - 2118 , - 525 , - 3576 , - 5079 , - 1594 , - 3441 , - 1676 , - 1115 , - 3822 , - 3605 , - 2528 , - 5407 , - 3298 , - 1017 , - 628 , - 1443 , - 22 , - 1181 , - 1480 , - 231 , - 5002 , - 4097 , - 5084 , - 1771 , - 1726 , - 4261 , - 432 , - 559 , - 1202 , - 1673 , - 4036 , - 2099 , - 3430 , - 1837 , - 4888 , - 887 , - 2906 , - 4753 , - 2988 , - 2427 , - 5134 , - 4917 , - 3840 , - 1215 , - 4610 , - 2329 , - 1940 , - 2755 , - 1334 , - 2493 , - 2792 , - 1543 , - 810 , - 5409 , - 892 , - 3083 , - 3038 , - 69 , - 1744 , - 1871 , - 2514 , - 2985 , - 5348 , - 3411 , - 4742 , - 3149 , - 696 , - 2199 , - 4218 , - 561 , - 4300 , - 3739 , - 942 , - 725 , - 5152 , - 2527 , - 418 , - 3641 , - 3252 , - 4067 , - 2646 , - 3805 , - 4104 , - 2855 , - 2122 , - 1217 , - 2204 , - 4395 , - 4350 , - 1381 , - 3056 , - 3183 , - 3826 , - 4297 , - 1156 , - 4723 , - 550 , - 4461 , - 2008 , - 3511 , - 26 , - 1873 , - 108 , - 5051 , - 2254 , - 2037 , - 960 , - 3839 , - 1730 , - 4953 , - 4564 , - 5379 , - 3958 , - 5117 , - 5416 , - 4167 , - 3434 , - 2529 , - 3516 , - 203 , - 158 , - 2693 , - 4368 , - 4495 , - 5138 , - 105 , - 2468 , - 531 , - 1862 , - 269 , - 3320 , - 4823 , - 1338 , - 3185 , - 1420 , - 859 , - 3566 , - 3349 , - 2272 , - 5151 , - 3042 , - 761 , - 372 , - 1187 , - 5270 , - 925 , - 1224 , - 5479 , - 4746 , - 3841 , - 4828 , - 1515 , - 1470 , - 4005 , - 176 , - 303 , - 946 , - 1417 , - 3780 , - 1843 , - 3174 , - 1581 , - 4632 , - 631 , - 2650 , - 4497 , - 2732 , - 2171 , - 4878 , - 4661 , - 3584 , - 959 , - 4354 , - 2073 , - 1684 , - 2499 , - 1078 , - 2237 , - 2536 , - 1287 , - 554 , - 5153 , - 636 , - 2827 , - 2782 , - 5317 , - 1488 , - 1615 , - 2258 , - 2729 , - 5092 , - 3155 , - 4486 , - 2893 , - 440 , - 1943 , - 3962 , - 305 , - 4044 , - 3483 , - 686 , - 469 , - 4896 , - 2271 , - 162 , - 3385 , - 2996 , - 3811 , - 2390 , - 3549 , - 3848 , - 2599 , - 1866 , - 961 , - 1948 , - 4139 , - 4094 , - 1125 , - 2800 , - 2927 , - 3570 , - 4041 , - 900 , - 4467 , - 294 , - 4205 , - 1752 , - 3255 , - 5274 , - 1617 , - 5356 , - 4795 , - 1998 , - 1781 , - 704 , - 3583 , - 1474 , - 4697 , - 4308 , - 5123 , - 3702 , - 4861 , - 5160 , - 3911 , - 3178 , - 2273 , - 3260 , - 5451 , - 5406 , - 2437 , - 4112 , - 4239 , - 4882 , - 5353 , - 2212 , - 275 , - 1606 , - 13 , - 3064 , - 4567 , - 1082 , - 2929 , - 1164 , - 603 , - 3310 , - 3093 , - 2016 , - 4895 , - 2786 , - 505 , - 116 , - 931 , - 5014 , - 669 , - 968 , - 5223 , - 4490 , - 3585 , - 4572 , - 1259 , - 1214 , - 3749 , - 5424 , - 47 , - 690 , - 1161 , - 3524 , - 1587 , - 2918 , - 1325 , - 4376 , - 375 , - 2394 , - 4241 , - 2476 , - 1915 , - 4622 , - 4405 , - 3328 , - 703 , - 4098 , - 1817 , - 1428 , - 2243 , - 822 , - 1981 , - 2280 , - 1031 , - 298 , - 4897 , - 380 , - 2571 , - 2526 , - 5061 , - 1232 , - 1359 , - 2002 , - 2473 , - 4836 , - 2899 , - 4230 , - 2637 , - 184 , - 1687 , - 3706 , - 49 , - 3788 , - 3227 , - 430 , - 213 , - 4640 , - 2015 , - 5410 , - 3129 , - 2740 , - 3555 , - 2134 , - 3293 , - 3592 , - 2343 , - 1610 , - 705 , - 1692 , - 3883 , - 3838 , - 869 , - 2544 , - 2671 , - 3314 , - 3785 , - 644 , - 4211 , - 38 , - 3949 , - 1496 , - 2999 , - 5018 , - 1361 , - 5100 , - 4539 , - 1742 , - 1525 , - 448 , - 3327 , - 1218 , - 4441 , - 4052 , - 4867 , - 3446 , - 4605 , - 4904 , - 3655 , - 2922 , - 2017 , - 3004 , - 5195 , - 5150 , - 2181 , - 3856 , - 3983 , - 4626 , - 5097 , - 1956 , - 19 , - 1350 , - 5261 , - 2808 , - 4311 , - 826 , - 2673 , - 908 , - 347 , - 3054 , - 2837 , - 1760 , - 4639 , - 2530 , - 249 , - 5364 , - 675 , - 4758 , - 413 , - 712 , - 4967 , - 4234 , - 3329 , - 4316 , - 1003 , - 958 , - 3493 , - 5168 , - 5295 , - 434 , - 905 , - 3268 , - 1331 , - 2662 , - 1069 , - 4120 , - 119 , - 2138 , - 3985 , - 2220 , - 1659 , - 4366 , - 4149 , - 3072 , - 447 , - 3842 , - 1561 , - 1172 , - 1987 , - 566 , - 1725 , - 2024 , - 775 , - 42 , - 4641 , - 124 , - 2315 , - 2270 , - 4805 , - 976 , - 1103 , - 1746 , - 2217 , - 4580 , - 2643 , - 3974 , - 2381 , - 5432 , - 1431 , - 3450 , - 5297 , - 3532 , - 2971 , - 174 , - 5461 , - 4384 , - 1759 , - 5154 , - 2873 , - 2484 , - 3299 , - 1878 , - 3037 , - 3336 , - 2087 , - 1354 , - 449 , - 1436 , - 3627 , - 3582 , - 613 , - 2288 , - 2415 , - 3058 , - 3529 , - 388 , - 3955 , - 5286 , - 3693 , - 1240 , - 2743 , - 4762 , - 1105 , - 4844 , - 4283 , - 1486 , - 1269 , - 192 , - 3071 , - 962 , - 4185 , - 3796 , - 4611 , - 3190 , - 4349 , - 4648 , - 3399 , - 2666 , - 1761 , - 2748 , - 4939 , - 4894 , - 1925 , - 3600 , - 3727 , - 4370 , - 4841 , - 1700 , - 5267 , - 1094 , - 5005 , - 2552 , - 4055 , - 570 , - 2417 , - 652 , - 91 , - 2798 , - 2581 , - 1504 , - 4383 , - 2274 , - 5497 , - 5108 , - 419 , - 4502 , - 157 , - 456 , - 4711 , - 3978 , - 3073 , - 4060 , - 747 , - 702 , - 3237 , - 4912 , - 5039 , - 178 , - 649 , - 3012 , - 1075 , - 2406 , - 813 , - 3864 , - 5367 , - 1882 , - 3729 , - 1964 , - 1403 , - 4110 , - 3893 , - 2816 , - 191 , - 3586 , - 1305 , - 916 , - 1731 , - 310 , - 1469 , - 1768 , - 519 , - 5290 , - 4385 , - 5372 , - 2059 , - 2014 , - 4549 , - 720 , - 847 , - 1490 , - 1961 , - 4324 , - 2387 , - 3718 , - 2125 , - 5176 , - 1175 , - 3194 , - 5041 , - 3276 , - 2715 , - 5422 , - 5205 , - 4128 , - 1503 , - 4898 , - 2617 , - 2228 , - 3043 , - 1622 , - 2781 , - 3080 , - 1831 , - 1098 , - 193 , - 1180 , - 3371 , - 3326 , - 357 , - 2032 , - 2159 , - 2802 , - 3273 , - 132 , - 3699 , - 5030 , - 3437 , - 984 , - 2487 , - 4506 , - 849 , - 4588 , - 4027 , - 1230 , - 1013 , - 5440 , - 2815 , - 706 , - 3929 , - 3540 , - 4355 , - 2934 , - 4093 , - 4392 , - 3143 , - 2410 , - 1505 , - 2492 , - 4683 , - 4638 , - 1669 , - 3344 , - 3471 , - 4114 , - 4585 , - 1444 , - 5011 , - 838 , - 4749 , - 2296 , - 3799 , - 314 , - 2161 , - 396 , - 5339 , - 2542 , - 2325 , - 1248 , - 4127 , - 2018 , - 5241 , - 4852 , - 163 , - 4246 , - 5405 , - 200 , - 4455 , - 3722 , - 2817 , - 3804 , - 491 , - 446 , - 2981 , - 4656 , - 4783 , - 5426 , - 393 , - 2756 , - 819 , - 2150 , - 557 , - 3608 , - 5111 , - 1626 , - 3473 , - 1708 , - 1147 , - 3854 , - 3637 , - 2560 , - 5439 , - 3330 , - 1049 , - 660 , - 1475 , - 54 , - 1213 , - 1512 , - 263 , - 5034 , - 4129 , - 5116 , - 1803 , - 1758 , - 4293 , - 464 , - 591 , - 1234 , - 1705 , - 4068 , - 2131 , - 3462 , - 1869 , - 4920 , - 919 , - 2938 , - 4785 , - 3020 , - 2459 , - 5166 , - 4949 , - 3872 , - 1247 , - 4642 , - 2361 , - 1972 , - 2787 , - 1366 , - 2525 , - 2824 , - 1575 , - 842 , - 5441 , - 924 , - 3115 , - 3070 , - 101 , - 1776 , - 1903 , - 2546 , - 3017 , - 5380 , - 3443 , - 4774 , - 3181 , - 728 , - 2231 , - 4250 , - 593 , - 4332 , - 3771 , - 974 , - 757 , - 5184 , - 2559 , - 450 , - 3673 , - 3284 , - 4099 , - 2678 , - 3837 , - 4136 , - 2887 , - 2154 , - 1249 , - 2236 , - 4427 , - 4382 , - 1413 , - 3088 , - 3215 , - 3858 , - 4329 , - 1188 , - 4755 , - 582 , - 4493 , - 2040 , - 3543 , - 58 , - 1905 , - 140 , - 5083 , - 2286 , - 2069 , - 992 , - 3871 , - 1762 , - 4985 , - 4596 , - 5411 , - 3990 , - 5149 , - 5448 , - 4199 , - 3466 , - 2561 , - 3548 , - 235 , - 190 , - 2725 , - 4400 , - 4527 , - 5170 , - 137 , - 2500 , - 563 , - 1894 , - 301 , - 3352 , - 4855 , - 1370 , - 3217 , - 1452 , - 891 , - 3598 , - 3381 , - 2304 , - 5183 , - 3074 , - 793 , - 404 , - 1219 , - 5302 , - 957 , - 1256 , - 7 , - 4778 , - 3873 , - 4860 , - 1547 , - 1502 , - 4037 , - 208 , - 335 , - 978 , - 1449 , - 3812 , - 1875 , - 3206 , - 1613 , - 4664 , - 663 , - 2682 , - 4529 , - 2764 , - 2203 , - 4910 , - 4693 , - 3616 , - 991 , - 4386 , - 2105 , - 1716 , - 2531 , - 1110 , - 2269 , - 2568 , - 1319 , - 586 , - 5185 , - 668 , - 2859 , - 2814 , - 5349 , - 1520 , - 1647 , - 2290 , - 2761 , - 5124 , - 3187 , - 4518 , - 2925 , - 472 , - 1975 , - 3994 , - 337 , - 4076 , - 3515 , - 718 , - 501 , - 4928 , - 2303 , - 194 , - 3417 , - 3028 , - 3843 , - 2422 , - 3581 , - 3880 , - 2631 , - 1898 , - 993 , - 1980 , - 4171 , - 4126 , - 1157 , - 2832 , - 2959 , - 3602 , - 4073 , - 932 , - 4499 , - 326 , - 4237 , - 1784 , - 3287 , - 5306 , - 1649 , - 5388 , - 4827 , - 2030 , - 1813 , - 736 , - 3615 , - 1506 , - 4729 , - 4340 , - 5155 , - 3734 , - 4893 , - 5192 , - 3943 , - 3210 , - 2305 , - 3292 , - 5483 , - 5438 , - 2469 , - 4144 , - 4271 , - 4914 , - 5385 , - 2244 , - 307 , - 1638 , - 45 , - 3096 , - 4599 , - 1114 , - 2961 , - 1196 , - 635 , - 3342 , - 3125 , - 2048 , - 4927 , - 2818 , - 537 , - 148 , - 963 , - 5046 , - 701 , - 1000 , - 5255 , - 4522 , - 3617 , - 4604 , - 1291 , - 1246 , - 3781 , - 5456 , - 79 , - 722 , - 1193 , - 3556 , - 1619 , - 2950 , - 1357 , - 4408 , - 407 , - 2426 , - 4273 , - 2508 , - 1947 , - 4654 , - 4437 , - 3360 , - 735 , - 4130 , - 1849 , - 1460 , - 2275 , - 854 , - 2013 , - 2312 , - 1063 , - 330 , - 4929 , - 412 , - 2603 , - 2558 , - 5093 , - 1264 , - 1391 , - 2034 , - 2505 , - 4868 , - 2931 , - 4262 , - 2669 , - 216 , - 1719 , - 3738 , - 81 , - 3820 , - 3259 , - 462 , - 245 , - 4672 , - 2047 , - 5442 , - 3161 , - 2772 , - 3587 , - 2166 , - 3325 , - 3624 , - 2375 , - 1642 , - 737 , - 1724 , - 3915 , - 3870 , - 901 , - 2576 , - 2703 , - 3346 , - 3817 , - 676 , - 4243 , - 70 , - 3981 , - 1528 , - 3031 , - 5050 , - 1393 , - 5132 , - 4571 , - 1774 , - 1557 , - 480 , - 3359 , - 1250 , - 4473 , - 4084 , - 4899 , - 3478 , - 4637 , - 4936 , - 3687 , - 2954 , - 2049 , - 3036 , - 5227 , - 5182 , - 2213 , - 3888 , - 4015 , - 4658 , - 5129 , - 1988 , - 51 , - 1382 , - 5293 , - 2840 , - 4343 , - 858 , - 2705 , - 940 , - 379 , - 3086 , - 2869 , - 1792 , - 4671 , - 2562 , - 281 , - 5396 , - 707 , - 4790 , - 445 , - 744 , - 4999 , - 4266 , - 3361 , - 4348 , - 1035 , - 990 , - 3525 , - 5200 , - 5327 , - 466 , - 937 , - 3300 , - 1363 , - 2694 , - 1101 , - 4152 , - 151 , - 2170 , - 4017 , - 2252 , - 1691 , - 4398 , - 4181 , - 3104 , - 479 , - 3874 , - 1593 , - 1204 , - 2019 , - 598 , - 1757 , - 2056 , - 807 , - 74 , - 4673 , - 156 , - 2347 , - 2302 , - 4837 , - 1008 , - 1135 , - 1778 , - 2249 , - 4612 , - 2675 , - 4006 , - 2413 , - 5464 , - 1463 , - 3482 , - 5329 , - 3564 , - 3003 , - 206 , - 5493 , - 4416 , - 1791 , - 5186 , - 2905 , - 2516 , - 3331 , - 1910 , - 3069 , - 3368 , - 2119 , - 1386 , - 481 , - 1468 , - 3659 , - 3614 , - 645 , - 2320 , - 2447 , - 3090 , - 3561 , - 420 , - 3987 , - 5318 , - 3725 , - 1272 , - 2775 , - 4794 , - 1137 , - 4876 , - 4315 , - 1518 , - 1301 , - 224 , - 3103 , - 994 , - 4217 , - 3828 , - 4643 , - 3222 , - 4381 , - 4680 , - 3431 , - 2698 , - 1793 , - 2780 , - 4971 , - 4926 , - 1957 , - 3632 , - 3759 , - 4402 , - 4873 , - 1732 , - 5299 , - 1126 , - 5037 , - 2584 , - 4087 , - 602 , - 2449 , - 684 , - 123 , - 2830 , - 2613 , - 1536 , - 4415 , - 2306 , - 25 , - 5140 , - 451 , - 4534 , - 189 , - 488 , - 4743 , - 4010 , - 3105 , - 4092 , - 779 , - 734 , - 3269 , - 4944 , - 5071 , - 210 , - 681 , - 3044 , - 1107 , - 2438 , - 845 , - 3896 , - 5399 , - 1914 , - 3761 , - 1996 , - 1435 , - 4142 , - 3925 , - 2848 , - 223 , - 3618 , - 1337 , - 948 , - 1763 , - 342 , - 1501 , - 1800 , - 551 , - 5322 , - 4417 , - 5404 , - 2091 , - 2046 , - 4581 , - 752 , - 879 , - 1522 , - 1993 , - 4356 , - 2419 , - 3750 , - 2157 , - 5208 , - 1207 , - 3226 , - 5073 , - 3308 , - 2747 , - 5454 , - 5237 , - 4160 , - 1535 , - 4930 , - 2649 , - 2260 , - 3075 , - 1654 , - 2813 , - 3112 , - 1863 , - 1130 , - 225 , - 1212 , - 3403 , - 3358 , - 389 , - 2064 , - 2191 , - 2834 , - 3305 , - 164 , - 3731 , - 5062 , - 3469 , - 1016 , - 2519 , - 4538 , - 881 , - 4620 , - 4059 , - 1262 , - 1045 , - 5472 , - 2847 , - 738 , - 3961 , - 3572 , - 4387 , - 2966 , - 4125 , - 4424 , - 3175 , - 2442 , - 1537 , - 2524 , - 4715 , - 4670 , - 1701 , - 3376 , - 3503 , - 4146 , - 4617 , - 1476 , - 5043 , - 870 , - 4781 , - 2328 , - 3831 , - 346 , - 2193 , - 428 , - 5371 , - 2574 , - 2357 , - 1280 , - 4159 , - 2050 , - 5273 , - 4884 , - 195 , - 4278 , - 5437 , - 232 , - 4487 , - 3754 , - 2849 , - 3836 , - 523 , - 478 , - 3013 , - 4688 , - 4815 , - 5458 , - 425 , - 2788 , - 851 , - 2182 , - 589 , - 3640 , - 5143 , - 1658 , - 3505 , - 1740 , - 1179 , - 3886 , - 3669 , - 2592 , - 5471 , - 3362 , - 1081 , - 692 , - 1507 , - 86 , - 1245 , - 1544 , - 295 , - 5066 , - 4161 , - 5148 , - 1835 , - 1790 , - 4325 , - 496 , - 623 , - 1266 , - 1737 , - 4100 , - 2163 , - 3494 , - 1901 , - 4952 , - 951 , - 2970 , - 4817 , - 3052 , - 2491 , - 5198 , - 4981 , - 3904 , - 1279 , - 4674 , - 2393 , - 2004 , - 2819 , - 1398 , - 2557 , - 2856 , - 1607 , - 874 , - 5473 , - 956 , - 3147 , - 3102 , - 133 , - 1808 , - 1935 , - 2578 , - 3049 , - 5412 , - 3475 , - 4806 , - 3213 , - 760 , - 2263 , - 4282 , - 625 , - 4364 , - 3803 , - 1006 , - 789 , - 5216 , - 2591 , - 482 , - 3705 , - 3316 , - 4131 , - 2710 , - 3869 , - 4168 , - 2919 , - 2186 , - 1281 , - 2268 , - 4459 , - 4414 , - 1445 , - 3120 , - 3247 , - 3890 , - 4361 , - 1220 , - 4787 , - 614 , - 4525 , - 2072 , - 3575 , - 90 , - 1937 , - 172 , - 5115 , - 2318 , - 2101 , - 1024 , - 3903 , - 1794 , - 5017 , - 4628 , - 5443 , - 4022 , - 5181 , - 5480 , - 4231 , - 3498 , - 2593 , - 3580 , - 267 , - 222 , - 2757 , - 4432 , - 4559 , - 5202 , - 169 , - 2532 , - 595 , - 1926 , - 333 , - 3384 , - 4887 , - 1402 , - 3249 , - 1484 , - 923 , - 3630 , - 3413 , - 2336 , - 5215 , - 3106 , - 825 , - 436 , - 1251 , - 5334 , - 989 , - 1288 , - 39 , - 4810 , - 3905 , - 4892 , - 1579 , - 1534 , - 4069 , - 240 , - 367 , - 1010 , - 1481 , - 3844 , - 1907 , - 3238 , - 1645 , - 4696 , - 695 , - 2714 , - 4561 , - 2796 , - 2235 , - 4942 , - 4725 , - 3648 , - 1023 , - 4418 , - 2137 , - 1748 , - 2563 , - 1142 , - 2301 , - 2600 , - 1351 , - 618 , - 5217 , - 700 , - 2891 , - 2846 , - 5381 , - 1552 , - 1679 , - 2322 , - 2793 , - 5156 , - 3219 , - 4550 , - 2957 , - 504 , - 2007 , - 4026 , - 369 , - 4108 , - 3547 , - 750 , - 533 , - 4960 , - 2335 , - 226 , - 3449 , - 3060 , - 3875 , - 2454 , - 3613 , - 3912 , - 2663 , - 1930 , - 1025 , - 2012 , - 4203 , - 4158 , - 1189 , - 2864 , - 2991 , - 3634 , - 4105 , - 964 , - 4531 , - 358 , - 4269 , - 1816 , - 3319 , - 5338 , - 1681 , - 5420 , - 4859 , - 2062 , - 1845 , - 768 , - 3647 , - 1538 , - 4761 , - 4372 , - 5187 , - 3766 , - 4925 , - 5224 , - 3975 , - 3242 , - 2337 , - 3324 , - 11 , - 5470 , - 2501 , - 4176 , - 4303 , - 4946 , - 5417 , - 2276 , - 339 , - 1670 , - 77 , - 3128 , - 4631 , - 1146 , - 2993 , - 1228 , - 667 , - 3374 , - 3157 , - 2080 , - 4959 , - 2850 , - 569 , - 180 , - 995 , - 5078 , - 733 , - 1032 , - 5287 , - 4554 , - 3649 , - 4636 , - 1323 , - 1278 , - 3813 , - 5488 , - 111 , - 754 , - 1225 , - 3588 , - 1651 , - 2982 , - 1389 , - 4440 , - 439 , - 2458 , - 4305 , - 2540 , - 1979 , - 4686 , - 4469 , - 3392 , - 767 , - 4162 , - 1881 , - 1492 , - 2307 , - 886 , - 2045 , - 2344 , - 1095 , - 362 , - 4961 , - 444 , - 2635 , - 2590 , - 5125 , - 1296 , - 1423 , - 2066 , - 2537 , - 4900 , - 2963 , - 4294 , - 2701 , - 248 , - 1751 , - 3770 , - 113 , - 3852 , - 3291 , - 494 , - 277 , - 4704 , - 2079 , - 5474 , - 3193 , - 2804 , - 3619 , - 2198 , - 3357 , - 3656 , - 2407 , - 1674 , - 769 , - 1756 , - 3947 , - 3902 , - 933 , - 2608 , - 2735 , - 3378 , - 3849 , - 708 , - 4275 , - 102 , - 4013 , - 1560 , - 3063 , - 5082 , - 1425 , - 5164 , - 4603 , - 1806 , - 1589 , - 512 , - 3391 , - 1282 , - 4505 , - 4116 , - 4931 , - 3510 , - 4669 , - 4968 , - 3719 , - 2986 , - 2081 , - 3068 , - 5259 , - 5214 , - 2245 , - 3920 , - 4047 , - 4690 , - 5161 , - 2020 , - 83 , - 1414 , - 5325 , - 2872 , - 4375 , - 890 , - 2737 , - 972 , - 411 , - 3118 , - 2901 , - 1824 , - 4703 , - 2594 , - 313 , - 5428 , - 739 , - 4822 , - 477 , - 776 , - 5031 , - 4298 , - 3393 , - 4380 , - 1067 , - 1022 , - 3557 , - 5232 , - 5359 , - 498 , - 969 , - 3332 , - 1395 , - 2726 , - 1133 , - 4184 , - 183 , - 2202 , - 4049 , - 2284 , - 1723 , - 4430 , - 4213 , - 3136 , - 511 , - 3906 , - 1625 , - 1236 , - 2051 , - 630 , - 1789 , - 2088 , - 839 , - 106 , - 4705 , - 188 , - 2379 , - 2334 , - 4869 , - 1040 , - 1167 , - 1810 , - 2281 , - 4644 , - 2707 , - 4038 , - 2445 , - 5496 , - 1495 , - 3514 , - 5361 , - 3596 , - 3035 , - 238 , - 21 , - 4448 , - 1823 , - 5218 , - 2937 , - 2548 , - 3363 , - 1942 , - 3101 , - 3400 , - 2151 , - 1418 , - 513 , - 1500 , - 3691 , - 3646 , - 677 , - 2352 , - 2479 , - 3122 , - 3593 , - 452 , - 4019 , - 5350 , - 3757 , - 1304 , - 2807 , - 4826 , - 1169 , - 4908 , - 4347 , - 1550 , - 1333 , - 256 , - 3135 , - 1026 , - 4249 , - 3860 , - 4675 , - 3254 , - 4413 , - 4712 , - 3463 , - 2730 , - 1825 , - 2812 , - 5003 , - 4958 , - 1989 , - 3664 , - 3791 , - 4434 , - 4905 , - 1764 , - 5331 , - 1158 , - 5069 , - 2616 , - 4119 , - 634 , - 2481 , - 716 , - 155 , - 2862 , - 2645 , - 1568 , - 4447 , - 2338 , - 57 , - 5172 , - 483 , - 4566 , - 221 , - 520 , - 4775 , - 4042 , - 3137 , - 4124 , - 811 , - 766 , - 3301 , - 4976 , - 5103 , - 242 , - 713 , - 3076 , - 1139 , - 2470 , - 877 , - 3928 , - 5431 , - 1946 , - 3793 , - 2028 , - 1467 , - 4174 , - 3957 , - 2880 , - 255 , - 3650 , - 1369 , - 980 , - 1795 , - 374 , - 1533 , - 1832 , - 583 , - 5354 , - 4449 , - 5436 , - 2123 , - 2078 , - 4613 , - 784 , - 911 , - 1554 , - 2025 , - 4388 , - 2451 , - 3782 , - 2189 , - 5240 , - 1239 , - 3258 , - 5105 , - 3340 , - 2779 , - 5486 , - 5269 , - 4192 , - 1567 , - 4962 , - 2681 , - 2292 , - 3107 , - 1686 , - 2845 , - 3144 , - 1895 , - 1162 , - 257 , - 1244 , - 3435 , - 3390 , - 421 , - 2096 , - 2223 , - 2866 , - 3337 , - 196 , - 3763 , - 5094 , - 3501 , - 1048 , - 2551 , - 4570 , - 913 , - 4652 , - 4091 , - 1294 , - 1077 , - 0 , - 2521 , - 3998 , - 255 , - 3820 , - 4949 , - 5034 , - 5467 , - 2072 , - 1809 , - 502 , - 5111 , - 324 , - 4237 , - 1538 , - 4755 , - 4144 , - 1097 , - 2574 , - 4399 , - 2396 , - 3525 , - 3610 , - 4043 , - 648 , - 385 , - 4646 , - 3687 , - 4468 , - 2813 , - 114 , - 3331 , - 2720 , - 5241 , - 1150 , - 2975 , - 972 , - 2101 , - 2186 , - 2619 , - 4792 , - 4529 , - 3222 , - 2263 , - 3044 , - 1389 , - 4258 , - 1907 , - 1296 , - 3817 , - 5294 , - 1551 , - 5116 , - 677 , - 762 , - 1195 , - 3368 , - 3105 , - 1798 , - 839 , - 1620 , - 5533 , - 2834 , - 483 , - 5440 , - 2393 , - 3870 , - 127 , - 3692 , - 4821 , - 4906 , - 5339 , - 1944 , - 1681 , - 374 , - 4983 , - 196 , - 4109 , - 1410 , - 4627 , - 4016 , - 969 , - 2446 , - 4271 , - 2268 , - 3397 , - 3482 , - 3915 , - 520 , - 257 , - 4518 , - 3559 , - 4340 , - 2685 , - 5554 , - 3203 , - 2592 , - 5113 , - 1022 , - 2847 , - 844 , - 1973 , - 2058 , - 2491 , - 4664 , - 4401 , - 3094 , - 2135 , - 2916 , - 1261 , - 4130 , - 1779 , - 1168 , - 3689 , - 5166 , - 1423 , - 4988 , - 549 , - 634 , - 1067 , - 3240 , - 2977 , - 1670 , - 711 , - 1492 , - 5405 , - 2706 , - 355 , - 5312 , - 2265 , - 3742 , - 5567 , - 3564 , - 4693 , - 4778 , - 5211 , - 1816 , - 1553 , - 246 , - 4855 , - 68 , - 3981 , - 1282 , - 4499 , - 3888 , - 841 , - 2318 , - 4143 , - 2140 , - 3269 , - 3354 , - 3787 , - 392 , - 129 , - 4390 , - 3431 , - 4212 , - 2557 , - 5426 , - 3075 , - 2464 , - 4985 , - 894 , - 2719 , - 716 , - 1845 , - 1930 , - 2363 , - 4536 , - 4273 , - 2966 , - 2007 , - 2788 , - 1133 , - 4002 , - 1651 , - 1040 , - 3561 , - 5038 , - 1295 , - 4860 , - 421 , - 506 , - 939 , - 3112 , - 2849 , - 1542 , - 583 , - 1364 , - 5277 , - 2578 , - 227 , - 5184 , - 2137 , - 3614 , - 5439 , - 3436 , - 4565 , - 4650 , - 5083 , - 1688 , - 1425 , - 118 , - 4727 , - 5508 , - 3853 , - 1154 , - 4371 , - 3760 , - 713 , - 2190 , - 4015 , - 2012 , - 3141 , - 3226 , - 3659 , - 264 , - 1 , - 4262 , - 3303 , - 4084 , - 2429 , - 5298 , - 2947 , - 2336 , - 4857 , - 766 , - 2591 , - 588 , - 1717 , - 1802 , - 2235 , - 4408 , - 4145 , - 2838 , - 1879 , - 2660 , - 1005 , - 3874 , - 1523 , - 912 , - 3433 , - 4910 , - 1167 , - 4732 , - 293 , - 378 , - 811 , - 2984 , - 2721 , - 1414 , - 455 , - 1236 , - 5149 , - 2450 , - 99 , - 5056 , - 2009 , - 3486 , - 5311 , - 3308 , - 4437 , - 4522 , - 4955 , - 1560 , - 1297 , - 5558 , - 4599 , - 5380 , - 3725 , - 1026 , - 4243 , - 3632 , - 585 , - 2062 , - 3887 , - 1884 , - 3013 , - 3098 , - 3531 , - 136 , - 5441 , - 4134 , - 3175 , - 3956 , - 2301 , - 5170 , - 2819 , - 2208 , - 4729 , - 638 , - 2463 , - 460 , - 1589 , - 1674 , - 2107 , - 4280 , - 4017 , - 2710 , - 1751 , - 2532 , - 877 , - 3746 , - 1395 , - 784 , - 3305 , - 4782 , - 1039 , - 4604 , - 165 , - 250 , - 683 , - 2856 , - 2593 , - 1286 , - 327 , - 1108 , - 5021 , - 2322 , - 5539 , - 4928 , - 1881 , - 3358 , - 5183 , - 3180 , - 4309 , - 4394 , - 4827 , - 1432 , - 1169 , - 5430 , - 4471 , - 5252 , - 3597 , - 898 , - 4115 , - 3504 , - 457 , - 1934 , - 3759 , - 1756 , - 2885 , - 2970 , - 3403 , - 8 , - 5313 , - 4006 , - 3047 , - 3828 , - 2173 , - 5042 , - 2691 , - 2080 , - 4601 , - 510 , - 2335 , - 332 , - 1461 , - 1546 , - 1979 , - 4152 , - 3889 , - 2582 , - 1623 , - 2404 , - 749 , - 3618 , - 1267 , - 656 , - 3177 , - 4654 , - 911 , - 4476 , - 37 , - 122 , - 555 , - 2728 , - 2465 , - 1158 , - 199 , - 980 , - 4893 , - 2194 , - 5411 , - 4800 , - 1753 , - 3230 , - 5055 , - 3052 , - 4181 , - 4266 , - 4699 , - 1304 , - 1041 , - 5302 , - 4343 , - 5124 , - 3469 , - 770 , - 3987 , - 3376 , - 329 , - 1806 , - 3631 , - 1628 , - 2757 , - 2842 , - 3275 , - 5448 , - 5185 , - 3878 , - 2919 , - 3700 , - 2045 , - 4914 , - 2563 , - 1952 , - 4473 , - 382 , - 2207 , - 204 , - 1333 , - 1418 , - 1851 , - 4024 , - 3761 , - 2454 , - 1495 , - 2276 , - 621 , - 3490 , - 1139 , - 528 , - 3049 , - 4526 , - 783 , - 4348 , - 5477 , - 5562 , - 427 , - 2600 , - 2337 , - 1030 , - 71 , - 852 , - 4765 , - 2066 , - 5283 , - 4672 , - 1625 , - 3102 , - 4927 , - 2924 , - 4053 , - 4138 , - 4571 , - 1176 , - 913 , - 5174 , - 4215 , - 4996 , - 3341 , - 642 , - 3859 , - 3248 , - 201 , - 1678 , - 3503 , - 1500 , - 2629 , - 2714 , - 3147 , - 5320 , - 5057 , - 3750 , - 2791 , - 3572 , - 1917 , - 4786 , - 2435 , - 1824 , - 4345 , - 254 , - 2079 , - 76 , - 1205 , - 1290 , - 1723 , - 3896 , - 3633 , - 2326 , - 1367 , - 2148 , - 493 , - 3362 , - 1011 , - 400 , - 2921 , - 4398 , - 655 , - 4220 , - 5349 , - 5434 , - 299 , - 2472 , - 2209 , - 902 , - 5511 , - 724 , - 4637 , - 1938 , - 5155 , - 4544 , - 1497 , - 2974 , - 4799 , - 2796 , - 3925 , - 4010 , - 4443 , - 1048 , - 785 , - 5046 , - 4087 , - 4868 , - 3213 , - 514 , - 3731 , - 3120 , - 73 , - 1550 , - 3375 , - 1372 , - 2501 , - 2586 , - 3019 , - 5192 , - 4929 , - 3622 , - 2663 , - 3444 , - 1789 , - 4658 , - 2307 , - 1696 , - 4217 , - 126 , - 1951 , - 5516 , - 1077 , - 1162 , - 1595 , - 3768 , - 3505 , - 2198 , - 1239 , - 2020 , - 365 , - 3234 , - 883 , - 272 , - 2793 , - 4270 , - 527 , - 4092 , - 5221 , - 5306 , - 171 , - 2344 , - 2081 , - 774 , - 5383 , - 596 , - 4509 , - 1810 , - 5027 , - 4416 , - 1369 , - 2846 , - 4671 , - 2668 , - 3797 , - 3882 , - 4315 , - 920 , - 657 , - 4918 , - 3959 , - 4740 , - 3085 , - 386 , - 3603 , - 2992 , - 5513 , - 1422 , - 3247 , - 1244 , - 2373 , - 2458 , - 2891 , - 5064 , - 4801 , - 3494 , - 2535 , - 3316 , - 1661 , - 4530 , - 2179 , - 1568 , - 4089 , - 5566 , - 1823 , - 5388 , - 949 , - 1034 , - 1467 , - 3640 , - 3377 , - 2070 , - 1111 , - 1892 , - 237 , - 3106 , - 755 , - 144 , - 2665 , - 4142 , - 399 , - 3964 , - 5093 , - 5178 , - 43 , - 2216 , - 1953 , - 646 , - 5255 , - 468 , - 4381 , - 1682 , - 4899 , - 4288 , - 1241 , - 2718 , - 4543 , - 2540 , - 3669 , - 3754 , - 4187 , - 792 , - 529 , - 4790 , - 3831 , - 4612 , - 2957 , - 258 , - 3475 , - 2864 , - 5385 , - 1294 , - 3119 , - 1116 , - 2245 , - 2330 , - 2763 , - 4936 , - 4673 , - 3366 , - 2407 , - 3188 , - 1533 , - 4402 , - 2051 , - 1440 , - 3961 , - 5438 , - 1695 , - 5260 , - 821 , - 906 , - 1339 , - 3512 , - 3249 , - 1942 , - 983 , - 1764 , - 109 , - 2978 , - 627 , - 16 , - 2537 , - 4014 , - 271 , - 3836 , - 4965 , - 5050 , - 5483 , - 2088 , - 1825 , - 518 , - 5127 , - 340 , - 4253 , - 1554 , - 4771 , - 4160 , - 1113 , - 2590 , - 4415 , - 2412 , - 3541 , - 3626 , - 4059 , - 664 , - 401 , - 4662 , - 3703 , - 4484 , - 2829 , - 130 , - 3347 , - 2736 , - 5257 , - 1166 , - 2991 , - 988 , - 2117 , - 2202 , - 2635 , - 4808 , - 4545 , - 3238 , - 2279 , - 3060 , - 1405 , - 4274 , - 1923 , - 1312 , - 3833 , - 5310 , - 1567 , - 5132 , - 693 , - 778 , - 1211 , - 3384 , - 3121 , - 1814 , - 855 , - 1636 , - 5549 , - 2850 , - 499 , - 5456 , - 2409 , - 3886 , - 143 , - 3708 , - 4837 , - 4922 , - 5355 , - 1960 , - 1697 , - 390 , - 4999 , - 212 , - 4125 , - 1426 , - 4643 , - 4032 , - 985 , - 2462 , - 4287 , - 2284 , - 3413 , - 3498 , - 3931 , - 536 , - 273 , - 4534 , - 3575 , - 4356 , - 2701 , - 2 , - 3219 , - 2608 , - 5129 , - 1038 , - 2863 , - 860 , - 1989 , - 2074 , - 2507 , - 4680 , - 4417 , - 3110 , - 2151 , - 2932 , - 1277 , - 4146 , - 1795 , - 1184 , - 3705 , - 5182 , - 1439 , - 5004 , - 565 , - 650 , - 1083 , - 3256 , - 2993 , - 1686 , - 727 , - 1508 , - 5421 , - 2722 , - 371 , - 5328 , - 2281 , - 3758 , - 15 , - 3580 , - 4709 , - 4794 , - 5227 , - 1832 , - 1569 , - 262 , - 4871 , - 84 , - 3997 , - 1298 , - 4515 , - 3904 , - 857 , - 2334 , - 4159 , - 2156 , - 3285 , - 3370 , - 3803 , - 408 , - 145 , - 4406 , - 3447 , - 4228 , - 2573 , - 5442 , - 3091 , - 2480 , - 5001 , - 910 , - 2735 , - 732 , - 1861 , - 1946 , - 2379 , - 4552 , - 4289 , - 2982 , - 2023 , - 2804 , - 1149 , - 4018 , - 1667 , - 1056 , - 3577 , - 5054 , - 1311 , - 4876 , - 437 , - 522 , - 955 , - 3128 , - 2865 , - 1558 , - 599 , - 1380 , - 5293 , - 2594 , - 243 , - 5200 , - 2153 , - 3630 , - 5455 , - 3452 , - 4581 , - 4666 , - 5099 , - 1704 , - 1441 , - 134 , - 4743 , - 5524 , - 3869 , - 1170 , - 4387 , - 3776 , - 729 , - 2206 , - 4031 , - 2028 , - 3157 , - 3242 , - 3675 , - 280 , - 17 , - 4278 , - 3319 , - 4100 , - 2445 , - 5314 , - 2963 , - 2352 , - 4873 , - 782 , - 2607 , - 604 , - 1733 , - 1818 , - 2251 , - 4424 , - 4161 , - 2854 , - 1895 , - 2676 , - 1021 , - 3890 , - 1539 , - 928 , - 3449 , - 4926 , - 1183 , - 4748 , - 309 , - 394 , - 827 , - 3000 , - 2737 , - 1430 , - 471 , - 1252 , - 5165 , - 2466 , - 115 , - 5072 , - 2025 , - 3502 , - 5327 , - 3324 , - 4453 , - 4538 , - 4971 , - 1576 , - 1313 , - 6 , - 4615 , - 5396 , - 3741 , - 1042 , - 4259 , - 3648 , - 601 , - 2078 , - 3903 , - 1900 , - 3029 , - 3114 , - 3547 , - 152 , - 5457 , - 4150 , - 3191 , - 3972 , - 2317 , - 5186 , - 2835 , - 2224 , - 4745 , - 654 , - 2479 , - 476 , - 1605 , - 1690 , - 2123 , - 4296 , - 4033 , - 2726 , - 1767 , - 2548 , - 893 , - 3762 , - 1411 , - 800 , - 3321 , - 4798 , - 1055 , - 4620 , - 181 , - 266 , - 699 , - 2872 , - 2609 , - 1302 , - 343 , - 1124 , - 5037 , - 2338 , - 5555 , - 4944 , - 1897 , - 3374 , - 5199 , - 3196 , - 4325 , - 4410 , - 4843 , - 1448 , - 1185 , - 5446 , - 4487 , - 5268 , - 3613 , - 914 , - 4131 , - 3520 , - 473 , - 1950 , - 3775 , - 1772 , - 2901 , - 2986 , - 3419 , - 24 , - 5329 , - 4022 , - 3063 , - 3844 , - 2189 , - 5058 , - 2707 , - 2096 , - 4617 , - 526 , - 2351 , - 348 , - 1477 , - 1562 , - 1995 , - 4168 , - 3905 , - 2598 , - 1639 , - 2420 , - 765 , - 3634 , - 1283 , - 672 , - 3193 , - 4670 , - 927 , - 4492 , - 53 , - 138 , - 571 , - 2744 , - 2481 , - 1174 , - 215 , - 996 , - 4909 , - 2210 , - 5427 , - 4816 , - 1769 , - 3246 , - 5071 , - 3068 , - 4197 , - 4282 , - 4715 , - 1320 , - 1057 , - 5318 , - 4359 , - 5140 , - 3485 , - 786 , - 4003 , - 3392 , - 345 , - 1822 , - 3647 , - 1644 , - 2773 , - 2858 , - 3291 , - 5464 , - 5201 , - 3894 , - 2935 , - 3716 , - 2061 , - 4930 , - 2579 , - 1968 , - 4489 , - 398 , - 2223 , - 220 , - 1349 , - 1434 , - 1867 , - 4040 , - 3777 , - 2470 , - 1511 , - 2292 , - 637 , - 3506 , - 1155 , - 544 , - 3065 , - 4542 , - 799 , - 4364 , - 5493 , - 10 , - 443 , - 2616 , - 2353 , - 1046 , - 87 , - 868 , - 4781 , - 2082 , - 5299 , - 4688 , - 1641 , - 3118 , - 4943 , - 2940 , - 4069 , - 4154 , - 4587 , - 1192 , - 929 , - 5190 , - 4231 , - 5012 , - 3357 , - 658 , - 3875 , - 3264 , - 217 , - 1694 , - 3519 , - 1516 , - 2645 , - 2730 , - 3163 , - 5336 , - 5073 , - 3766 , - 2807 , - 3588 , - 1933 , - 4802 , - 2451 , - 1840 , - 4361 , - 270 , - 2095 , - 92 , - 1221 , - 1306 , - 1739 , - 3912 , - 3649 , - 2342 , - 1383 , - 2164 , - 509 , - 3378 , - 1027 , - 416 , - 2937 , - 4414 , - 671 , - 4236 , - 5365 , - 5450 , - 315 , - 2488 , - 2225 , - 918 , - 5527 , - 740 , - 4653 , - 1954 , - 5171 , - 4560 , - 1513 , - 2990 , - 4815 , - 2812 , - 3941 , - 4026 , - 4459 , - 1064 , - 801 , - 5062 , - 4103 , - 4884 , - 3229 , - 530 , - 3747 , - 3136 , - 89 , - 1566 , - 3391 , - 1388 , - 2517 , - 2602 , - 3035 , - 5208 , - 4945 , - 3638 , - 2679 , - 3460 , - 1805 , - 4674 , - 2323 , - 1712 , - 4233 , - 142 , - 1967 , - 5532 , - 1093 , - 1178 , - 1611 , - 3784 , - 3521 , - 2214 , - 1255 , - 2036 , - 381 , - 3250 , - 899 , - 288 , - 2809 , - 4286 , - 543 , - 4108 , - 5237 , - 5322 , - 187 , - 2360 , - 2097 , - 790 , - 5399 , - 612 , - 4525 , - 1826 , - 5043 , - 4432 , - 1385 , - 2862 , - 4687 , - 2684 , - 3813 , - 3898 , - 4331 , - 936 , - 673 , - 4934 , - 3975 , - 4756 , - 3101 , - 402 , - 3619 , - 3008 , - 5529 , - 1438 , - 3263 , - 1260 , - 2389 , - 2474 , - 2907 , - 5080 , - 4817 , - 3510 , - 2551 , - 3332 , - 1677 , - 4546 , - 2195 , - 1584 , - 4105 , - 14 , - 1839 , - 5404 , - 965 , - 1050 , - 1483 , - 3656 , - 3393 , - 2086 , - 1127 , - 1908 , - 253 , - 3122 , - 771 , - 160 , - 2681 , - 4158 , - 415 , - 3980 , - 5109 , - 5194 , - 59 , - 2232 , - 1969 , - 662 , - 5271 , - 484 , - 4397 , - 1698 , - 4915 , - 4304 , - 1257 , - 2734 , - 4559 , - 2556 , - 3685 , - 3770 , - 4203 , - 808 , - 545 , - 4806 , - 3847 , - 4628 , - 2973 , - 274 , - 3491 , - 2880 , - 5401 , - 1310 , - 3135 , - 1132 , - 2261 , - 2346 , - 2779 , - 4952 , - 4689 , - 3382 , - 2423 , - 3204 , - 1549 , - 4418 , - 2067 , - 1456 , - 3977 , - 5454 , - 1711 , - 5276 , - 837 , - 922 , - 1355 , - 3528 , - 3265 , - 1958 , - 999 , - 1780 , - 125 , - 2994 , - 643 , - 32 , - 2553 , - 4030 , - 287 , - 3852 , - 4981 , - 5066 , - 5499 , - 2104 , - 1841 , - 534 , - 5143 , - 356 , - 4269 , - 1570 , - 4787 , - 4176 , - 1129 , - 2606 , - 4431 , - 2428 , - 3557 , - 3642 , - 4075 , - 680 , - 417 , - 4678 , - 3719 , - 4500 , - 2845 , - 146 , - 3363 , - 2752 , - 5273 , - 1182 , - 3007 , - 1004 , - 2133 , - 2218 , - 2651 , - 4824 , - 4561 , - 3254 , - 2295 , - 3076 , - 1421 , - 4290 , - 1939 , - 1328 , - 3849 , - 5326 , - 1583 , - 5148 , - 709 , - 794 , - 1227 , - 3400 , - 3137 , - 1830 , - 871 , - 1652 , - 5565 , - 2866 , - 515 , - 5472 , - 2425 , - 3902 , - 159 , - 3724 , - 4853 , - 4938 , - 5371 , - 1976 , - 1713 , - 406 , - 5015 , - 228 , - 4141 , - 1442 , - 4659 , - 4048 , - 1001 , - 2478 , - 4303 , - 2300 , - 3429 , - 3514 , - 3947 , - 552 , - 289 , - 4550 , - 3591 , - 4372 , - 2717 , - 18 , - 3235 , - 2624 , - 5145 , - 1054 , - 2879 , - 876 , - 2005 , - 2090 , - 2523 , - 4696 , - 4433 , - 3126 , - 2167 , - 2948 , - 1293 , - 4162 , - 1811 , - 1200 , - 3721 , - 5198 , - 1455 , - 5020 , - 581 , - 666 , - 1099 , - 3272 , - 3009 , - 1702 , - 743 , - 1524 , - 5437 , - 2738 , - 387 , - 5344 , - 2297 , - 3774 , - 31 , - 3596 , - 4725 , - 4810 , - 5243 , - 1848 , - 1585 , - 278 , - 4887 , - 100 , - 4013 , - 1314 , - 4531 , - 3920 , - 873 , - 2350 , - 4175 , - 2172 , - 3301 , - 3386 , - 3819 , - 424 , - 161 , - 4422 , - 3463 , - 4244 , - 2589 , - 5458 , - 3107 , - 2496 , - 5017 , - 926 , - 2751 , - 748 , - 1877 , - 1962 , - 2395 , - 4568 , - 4305 , - 2998 , - 2039 , - 2820 , - 1165 , - 4034 , - 1683 , - 1072 , - 3593 , - 5070 , - 1327 , - 4892 , - 453 , - 538 , - 971 , - 3144 , - 2881 , - 1574 , - 615 , - 1396 , - 5309 , - 2610 , - 259 , - 5216 , - 2169 , - 3646 , - 5471 , - 3468 , - 4597 , - 4682 , - 5115 , - 1720 , - 1457 , - 150 , - 4759 , - 5540 , - 3885 , - 1186 , - 4403 , - 3792 , - 745 , - 2222 , - 4047 , - 2044 , - 3173 , - 3258 , - 3691 , - 296 , - 33 , - 4294 , - 3335 , - 4116 , - 2461 , - 5330 , - 2979 , - 2368 , - 4889 , - 798 , - 2623 , - 620 , - 1749 , - 1834 , - 2267 , - 4440 , - 4177 , - 2870 , - 1911 , - 2692 , - 1037 , - 3906 , - 1555 , - 944 , - 3465 , - 4942 , - 1199 , - 4764 , - 325 , - 410 , - 843 , - 3016 , - 2753 , - 1446 , - 487 , - 1268 , - 5181 , - 2482 , - 131 , - 5088 , - 2041 , - 3518 , - 5343 , - 3340 , - 4469 , - 4554 , - 4987 , - 1592 , - 1329 , - 22 , - 4631 , - 5412 , - 3757 , - 1058 , - 4275 , - 3664 , - 617 , - 2094 , - 3919 , - 1916 , - 3045 , - 3130 , - 3563 , - 168 , - 5473 , - 4166 , - 3207 , - 3988 , - 2333 , - 5202 , - 2851 , - 2240 , - 4761 , - 670 , - 2495 , - 492 , - 1621 , - 1706 , - 2139 , - 4312 , - 4049 , - 2742 , - 1783 , - 2564 , - 909 , - 3778 , - 1427 , - 816 , - 3337 , - 4814 , - 1071 , - 4636 , - 197 , - 282 , - 715 , - 2888 , - 2625 , - 1318 , - 359 , - 1140 , - 5053 , - 2354 , - 3 , - 4960 , - 1913 , - 3390 , - 5215 , - 3212 , - 4341 , - 4426 , - 4859 , - 1464 , - 1201 , - 5462 , - 4503 , - 5284 , - 3629 , - 930 , - 4147 , - 3536 , - 489 , - 1966 , - 3791 , - 1788 , - 2917 , - 3002 , - 3435 , - 40 , - 5345 , - 4038 , - 3079 , - 3860 , - 2205 , - 5074 , - 2723 , - 2112 , - 4633 , - 542 , - 2367 , - 364 , - 1493 , - 1578 , - 2011 , - 4184 , - 3921 , - 2614 , - 1655 , - 2436 , - 781 , - 3650 , - 1299 , - 688 , - 3209 , - 4686 , - 943 , - 4508 , - 69 , - 154 , - 587 , - 2760 , - 2497 , - 1190 , - 231 , - 1012 , - 4925 , - 2226 , - 5443 , - 4832 , - 1785 , - 3262 , - 5087 , - 3084 , - 4213 , - 4298 , - 4731 , - 1336 , - 1073 , - 5334 , - 4375 , - 5156 , - 3501 , - 802 , - 4019 , - 3408 , - 361 , - 1838 , - 3663 , - 1660 , - 2789 , - 2874 , - 3307 , - 5480 , - 5217 , - 3910 , - 2951 , - 3732 , - 2077 , - 4946 , - 2595 , - 1984 , - 4505 , - 414 , - 2239 , - 236 , - 1365 , - 1450 , - 1883 , - 4056 , - 3793 , - 2486 , - 1527 , - 2308 , - 653 , - 3522 , - 1171 , - 560 , - 3081 , - 4558 , - 815 , - 4380 , - 5509 , - 26 , - 459 , - 2632 , - 2369 , - 1062 , - 103 , - 884 , - 4797 , - 2098 , - 5315 , - 4704 , - 1657 , - 3134 , - 4959 , - 2956 , - 4085 , - 4170 , - 4603 , - 1208 , - 945 , - 5206 , - 4247 , - 5028 , - 3373 , - 674 , - 3891 , - 3280 , - 233 , - 1710 , - 3535 , - 1532 , - 2661 , - 2746 , - 3179 , - 5352 , - 5089 , - 3782 , - 2823 , - 3604 , - 1949 , - 4818 , - 2467 , - 1856 , - 4377 , - 286 , - 2111 , - 108 , - 1237 , - 1322 , - 1755 , - 3928 , - 3665 , - 2358 , - 1399 , - 2180 , - 525 , - 3394 , - 1043 , - 432 , - 2953 , - 4430 , - 687 , - 4252 , - 5381 , - 5466 , - 331 , - 2504 , - 2241 , - 934 , - 5543 , - 756 , - 4669 , - 1970 , - 5187 , - 4576 , - 1529 , - 3006 , - 4831 , - 2828 , - 3957 , - 4042 , - 4475 , - 1080 , - 817 , - 5078 , - 4119 , - 4900 , - 3245 , - 546 , - 3763 , - 3152 , - 105 , - 1582 , - 3407 , - 1404 , - 2533 , - 2618 , - 3051 , - 5224 , - 4961 , - 3654 , - 2695 , - 3476 , - 1821 , - 4690 , - 2339 , - 1728 , - 4249 , - 158 , - 1983 , - 5548 , - 1109 , - 1194 , - 1627 , - 3800 , - 3537 , - 2230 , - 1271 , - 2052 , - 397 , - 3266 , - 915 , - 304 , - 2825 , - 4302 , - 559 , - 4124 , - 5253 , - 5338 , - 203 , - 2376 , - 2113 , - 806 , - 5415 , - 628 , - 4541 , - 1842 , - 5059 , - 4448 , - 1401 , - 2878 , - 4703 , - 2700 , - 3829 , - 3914 , - 4347 , - 952 , - 689 , - 4950 , - 3991 , - 4772 , - 3117 , - 418 , - 3635 , - 3024 , - 5545 , - 1454 , - 3279 , - 1276 , - 2405 , - 2490 , - 2923 , - 5096 , - 4833 , - 3526 , - 2567 , - 3348 , - 1693 , - 4562 , - 2211 , - 1600 , - 4121 , - 30 , - 1855 , - 5420 , - 981 , - 1066 , - 1499 , - 3672 , - 3409 , - 2102 , - 1143 , - 1924 , - 269 , - 3138 , - 787 , - 176 , - 2697 , - 4174 , - 431 , - 3996 , - 5125 , - 5210 , - 75 , - 2248 , - 1985 , - 678 , - 5287 , - 500 , - 4413 , - 1714 , - 4931 , - 4320 , - 1273 , - 2750 , - 4575 , - 2572 , - 3701 , - 3786 , - 4219 , - 824 , - 561 , - 4822 , - 3863 , - 4644 , - 2989 , - 290 , - 3507 , - 2896 , - 5417 , - 1326 , - 3151 , - 1148 , - 2277 , - 2362 , - 2795 , - 4968 , - 4705 , - 3398 , - 2439 , - 3220 , - 1565 , - 4434 , - 2083 , - 1472 , - 3993 , - 5470 , - 1727 , - 5292 , - 853 , - 938 , - 1371 , - 3544 , - 3281 , - 1974 , - 1015 , - 1796 , - 141 , - 3010 , - 659 , - 48 , - 2569 , - 4046 , - 303 , - 3868 , - 4997 , - 5082 , - 5515 , - 2120 , - 1857 , - 550 , - 5159 , - 372 , - 4285 , - 1586 , - 4803 , - 4192 , - 1145 , - 2622 , - 4447 , - 2444 , - 3573 , - 3658 , - 4091 , - 696 , - 433 , - 4694 , - 3735 , - 4516 , - 2861 , - 162 , - 3379 , - 2768 , - 5289 , - 1198 , - 3023 , - 1020 , - 2149 , - 2234 , - 2667 , - 4840 , - 4577 , - 3270 , - 2311 , - 3092 , - 1437 , - 4306 , - 1955 , - 1344 , - 3865 , - 5342 , - 1599 , - 5164 , - 725 , - 810 , - 1243 , - 3416 , - 3153 , - 1846 , - 887 , - 1668 , - 13 , - 2882 , - 531 , - 5488 , - 2441 , - 3918 , - 175 , - 3740 , - 4869 , - 4954 , - 5387 , - 1992 , - 1729 , - 422 , - 5031 , - 244 , - 4157 , - 1458 , - 4675 , - 4064 , - 1017 , - 2494 , - 4319 , - 2316 , - 3445 , - 3530 , - 3963 , - 568 , - 305 , - 4566 , - 3607 , - 4388 , - 2733 , - 34 , - 3251 , - 2640 , - 5161 , - 1070 , - 2895 , - 892 , - 2021 , - 2106 , - 2539 , - 4712 , - 4449 , - 3142 , - 2183 , - 2964 , - 1309 , - 4178 , - 1827 , - 1216 , - 3737 , - 5214 , - 1471 , - 5036 , - 597 , - 682 , - 1115 , - 3288 , - 3025 , - 1718 , - 759 , - 1540 , - 5453 , - 2754 , - 403 , - 5360 , - 2313 , - 3790 , - 47 , - 3612 , - 4741 , - 4826 , - 5259 , - 1864 , - 1601 , - 294 , - 4903 , - 116 , - 4029 , - 1330 , - 4547 , - 3936 , - 889 , - 2366 , - 4191 , - 2188 , - 3317 , - 3402 , - 3835 , - 440 , - 177 , - 4438 , - 3479 , - 4260 , - 2605 , - 5474 , - 3123 , - 2512 , - 5033 , - 942 , - 2767 , - 764 , - 1893 , - 1978 , - 2411 , - 4584 , - 4321 , - 3014 , - 2055 , - 2836 , - 1181 , - 4050 , - 1699 , - 1088 , - 3609 , - 5086 , - 1343 , - 4908 , - 469 , - 554 , - 987 , - 3160 , - 2897 , - 1590 , - 631 , - 1412 , - 5325 , - 2626 , - 275 , - 5232 , - 2185 , - 3662 , - 5487 , - 3484 , - 4613 , - 4698 , - 5131 , - 1736 , - 1473 , - 166 , - 4775 , - 5556 , - 3901 , - 1202 , - 4419 , - 3808 , - 761 , - 2238 , - 4063 , - 2060 , - 3189 , - 3274 , - 3707 , - 312 , - 49 , - 4310 , - 3351 , - 4132 , - 2477 , - 5346 , - 2995 , - 2384 , - 4905 , - 814 , - 2639 , - 636 , - 1765 , - 1850 , - 2283 , - 4456 , - 4193 , - 2886 , - 1927 , - 2708 , - 1053 , - 3922 , - 1571 , - 960 , - 3481 , - 4958 , - 1215 , - 4780 , - 341 , - 426 , - 859 , - 3032 , - 2769 , - 1462 , - 503 , - 1284 , - 5197 , - 2498 , - 147 , - 5104 , - 2057 , - 3534 , - 5359 , - 3356 , - 4485 , - 4570 , - 5003 , - 1608 , - 1345 , - 38 , - 4647 , - 5428 , - 3773 , - 1074 , - 4291 , - 3680 , - 633 , - 2110 , - 3935 , - 1932 , - 3061 , - 3146 , - 3579 , - 184 , - 5489 , - 4182 , - 3223 , - 4004 , - 2349 , - 5218 , - 2867 , - 2256 , - 4777 , - 686 , - 2511 , - 508 , - 1637 , - 1722 , - 2155 , - 4328 , - 4065 , - 2758 , - 1799 , - 2580 , - 925 , - 3794 , - 1443 , - 832 , - 3353 , - 4830 , - 1087 , - 4652 , - 213 , - 298 , - 731 , - 2904 , - 2641 , - 1334 , - 375 , - 1156 , - 5069 , - 2370 , - 19 , - 4976 , - 1929 , - 3406 , - 5231 , - 3228 , - 4357 , - 4442 , - 4875 , - 1480 , - 1217 , - 5478 , - 4519 , - 5300 , - 3645 , - 946 , - 4163 , - 3552 , - 505 , - 1982 , - 3807 , - 1804 , - 2933 , - 3018 , - 3451 , - 56 , - 5361 , - 4054 , - 3095 , - 3876 , - 2221 , - 5090 , - 2739 , - 2128 , - 4649 , - 558 , - 2383 , - 380 , - 1509 , - 1594 , - 2027 , - 4200 , - 3937 , - 2630 , - 1671 , - 2452 , - 797 , - 3666 , - 1315 , - 704 , - 3225 , - 4702 , - 959 , - 4524 , - 85 , - 170 , - 603 , - 2776 , - 2513 , - 1206 , - 247 , - 1028 , - 4941 , - 2242 , - 5459 , - 4848 , - 1801 , - 3278 , - 5103 , - 3100 , - 4229 , - 4314 , - 4747 , - 1352 , - 1089 , - 5350 , - 4391 , - 5172 , - 3517 , - 818 , - 4035 , - 3424 , - 377 , - 1854 , - 3679 , - 1676 , - 2805 , - 2890 , - 3323 , - 5496 , - 5233 , - 3926 , - 2967 , - 3748 , - 2093 , - 4962 , - 2611 , - 2000 , - 4521 , - 430 , - 2255 , - 252 , - 1381 , - 1466 , - 1899 , - 4072 , - 3809 , - 2502 , - 1543 , - 2324 , - 669 , - 3538 , - 1187 , - 576 , - 3097 , - 4574 , - 831 , - 4396 , - 5525 , - 42 , - 475 , - 2648 , - 2385 , - 1078 , - 119 , - 900 , - 4813 , - 2114 , - 5331 , - 4720 , - 1673 , - 3150 , - 4975 , - 2972 , - 4101 , - 4186 , - 4619 , - 1224 , - 961 , - 5222 , - 4263 , - 5044 , - 3389 , - 690 , - 3907 , - 3296 , - 249 , - 1726 , - 3551 , - 1548 , - 2677 , - 2762 , - 3195 , - 5368 , - 5105 , - 3798 , - 2839 , - 3620 , - 1965 , - 4834 , - 2483 , - 1872 , - 4393 , - 302 , - 2127 , - 124 , - 1253 , - 1338 , - 1771 , - 3944 , - 3681 , - 2374 , - 1415 , - 2196 , - 541 , - 3410 , - 1059 , - 448 , - 2969 , - 4446 , - 703 , - 4268 , - 5397 , - 5482 , - 347 , - 2520 , - 2257 , - 950 , - 5559 , - 772 , - 4685 , - 1986 , - 5203 , - 4592 , - 1545 , - 3022 , - 4847 , - 2844 , - 3973 , - 4058 , - 4491 , - 1096 , - 833 , - 5094 , - 4135 , - 4916 , - 3261 , - 562 , - 3779 , - 3168 , - 121 , - 1598 , - 3423 , - 1420 , - 2549 , - 2634 , - 3067 , - 5240 , - 4977 , - 3670 , - 2711 , - 3492 , - 1837 , - 4706 , - 2355 , - 1744 , - 4265 , - 174 , - 1999 , - 5564 , - 1125 , - 1210 , - 1643 , - 3816 , - 3553 , - 2246 , - 1287 , - 2068 , - 413 , - 3282 , - 931 , - 320 , - 2841 , - 4318 , - 575 , - 4140 , - 5269 , - 5354 , - 219 , - 2392 , - 2129 , - 822 , - 5431 , - 644 , - 4557 , - 1858 , - 5075 , - 4464 , - 1417 , - 2894 , - 4719 , - 2716 , - 3845 , - 3930 , - 4363 , - 968 , - 705 , - 4966 , - 4007 , - 4788 , - 3133 , - 434 , - 3651 , - 3040 , - 5561 , - 1470 , - 3295 , - 1292 , - 2421 , - 2506 , - 2939 , - 5112 , - 4849 , - 3542 , - 2583 , - 3364 , - 1709 , - 4578 , - 2227 , - 1616 , - 4137 , - 46 , - 1871 , - 5436 , - 997 , - 1082 , - 1515 , - 3688 , - 3425 , - 2118 , - 1159 , - 1940 , - 285 , - 3154 , - 803 , - 192 , - 2713 , - 4190 , - 447 , - 4012 , - 5141 , - 5226 , - 91 , - 2264 , - 2001 , - 694 , - 5303 , - 516 , - 4429 , - 1730 , - 4947 , - 4336 , - 1289 , - 2766 , - 4591 , - 2588 , - 3717 , - 3802 , - 4235 , - 840 , - 577 , - 4838 , - 3879 , - 4660 , - 3005 , - 306 , - 3523 , - 2912 , - 5433 , - 1342 , - 3167 , - 1164 , - 2293 , - 2378 , - 2811 , - 4984 , - 4721 , - 3414 , - 2455 , - 3236 , - 1581 , - 4450 , - 2099 , - 1488 , - 4009 , - 5486 , - 1743 , - 5308 , - 869 , - 954 , - 1387 , - 3560 , - 3297 , - 1990 , - 1031 , - 1812 , - 157 , - 3026 , - 675 , - 64 , - 2585 , - 4062 , - 319 , - 3884 , - 5013 , - 5098 , - 5531 , - 2136 , - 1873 , - 566 , - 5175 , - 388 , - 4301 , - 1602 , - 4819 , - 4208 , - 1161 , - 2638 , - 4463 , - 2460 , - 3589 , - 3674 , - 4107 , - 712 , - 449 , - 4710 , - 3751 , - 4532 , - 2877 , - 178 , - 3395 , - 2784 , - 5305 , - 1214 , - 3039 , - 1036 , - 2165 , - 2250 , - 2683 , - 4856 , - 4593 , - 3286 , - 2327 , - 3108 , - 1453 , - 4322 , - 1971 , - 1360 , - 3881 , - 5358 , - 1615 , - 5180 , - 741 , - 826 , - 1259 , - 3432 , - 3169 , - 1862 , - 903 , - 1684 , - 29 , - 2898 , - 547 , - 5504 , - 2457 , - 3934 , - 191 , - 3756 , - 4885 , - 4970 , - 5403 , - 2008 , - 1745 , - 438 , - 5047 , - 260 , - 4173 , - 1474 , - 4691 , - 4080 , - 1033 , - 2510 , - 4335 , - 2332 , - 3461 , - 3546 , - 3979 , - 584 , - 321 , - 4582 , - 3623 , - 4404 , - 2749 , - 50 , - 3267 , - 2656 , - 5177 , - 1086 , - 2911 , - 908 , - 2037 , - 2122 , - 2555 , - 4728 , - 4465 , - 3158 , - 2199 , - 2980 , - 1325 , - 4194 , - 1843 , - 1232 , - 3753 , - 5230 , - 1487 , - 5052 , - 613 , - 698 , - 1131 , - 3304 , - 3041 , - 1734 , - 775 , - 1556 , - 5469 , - 2770 , - 419 , - 5376 , - 2329 , - 3806 , - 63 , - 3628 , - 4757 , - 4842 , - 5275 , - 1880 , - 1617 , - 310 , - 4919 , - 132 , - 4045 , - 1346 , - 4563 , - 3952 , - 905 , - 2382 , - 4207 , - 2204 , - 3333 , - 3418 , - 3851 , - 456 , - 193 , - 4454 , - 3495 , - 4276 , - 2621 , - 5490 , - 3139 , - 2528 , - 5049 , - 958 , - 2783 , - 780 , - 1909 , - 1994 , - 2427 , - 4600 , - 4337 , - 3030 , - 2071 , - 2852 , - 1197 , - 4066 , - 1715 , - 1104 , - 3625 , - 5102 , - 1359 , - 4924 , - 485 , - 570 , - 1003 , - 3176 , - 2913 , - 1606 , - 647 , - 1428 , - 5341 , - 2642 , - 291 , - 5248 , - 2201 , - 3678 , - 5503 , - 3500 , - 4629 , - 4714 , - 5147 , - 1752 , - 1489 , - 182 , - 4791 , - 4 , - 3917 , - 1218 , - 4435 , - 3824 , - 777 , - 2254 , - 4079 , - 2076 , - 3205 , - 3290 , - 3723 , - 328 , - 65 , - 4326 , - 3367 , - 4148 , - 2493 , - 5362 , - 3011 , - 2400 , - 4921 , - 830 , - 2655 , - 652 , - 1781 , - 1866 , - 2299 , - 4472 , - 4209 , - 2902 , - 1943 , - 2724 , - 1069 , - 3938 , - 1587 , - 976 , - 3497 , - 4974 , - 1231 , - 4796 , - 357 , - 442 , - 875 , - 3048 , - 2785 , - 1478 , - 519 , - 1300 , - 5213 , - 2514 , - 163 , - 5120 , - 2073 , - 3550 , - 5375 , - 3372 , - 4501 , - 4586 , - 5019 , - 1624 , - 1361 , - 54 , - 4663 , - 5444 , - 3789 , - 1090 , - 4307 , - 3696 , - 649 , - 2126 , - 3951 , - 1948 , - 3077 , - 3162 , - 3595 , - 200 , - 5505 , - 4198 , - 3239 , - 4020 , - 2365 , - 5234 , - 2883 , - 2272 , - 4793 , - 702 , - 2527 , - 524 , - 1653 , - 1738 , - 2171 , - 4344 , - 4081 , - 2774 , - 1815 , - 2596 , - 941 , - 3810 , - 1459 , - 848 , - 3369 , - 4846 , - 1103 , - 4668 , - 229 , - 314 , - 747 , - 2920 , - 2657 , - 1350 , - 391 , - 1172 , - 5085 , - 2386 , - 35 , - 4992 , - 1945 , - 3422 , - 5247 , - 3244 , - 4373 , - 4458 , - 4891 , - 1496 , - 1233 , - 5494 , - 4535 , - 5316 , - 3661 , - 962 , - 4179 , - 3568 , - 521 , - 1998 , - 3823 , - 1820 , - 2949 , - 3034 , - 3467 , - 72 , - 5377 , - 4070 , - 3111 , - 3892 , - 2237 , - 5106 , - 2755 , - 2144 , - 4665 , - 574 , - 2399 , - 396 , - 1525 , - 1610 , - 2043 , - 4216 , - 3953 , - 2646 , - 1687 , - 2468 , - 813 , - 3682 , - 1331 , - 720 , - 3241 , - 4718 , - 975 , - 4540 , - 101 , - 186 , - 619 , - 2792 , - 2529 , - 1222 , - 263 , - 1044 , - 4957 , - 2258 , - 5475 , - 4864 , - 1817 , - 3294 , - 5119 , - 3116 , - 4245 , - 4330 , - 4763 , - 1368 , - 1105 , - 5366 , - 4407 , - 5188 , - 3533 , - 834 , - 4051 , - 3440 , - 393 , - 1870 , - 3695 , - 1692 , - 2821 , - 2906 , - 3339 , - 5512 , - 5249 , - 3942 , - 2983 , - 3764 , - 2109 , - 4978 , - 2627 , - 2016 , - 4537 , - 446 , - 2271 , - 268 , - 1397 , - 1482 , - 1915 , - 4088 , - 3825 , - 2518 , - 1559 , - 2340 , - 685 , - 3554 , - 1203 , - 592 , - 3113 , - 4590 , - 847 , - 4412 , - 5541 , - 58 , - 491 , - 2664 , - 2401 , - 1094 , - 135 , - 916 , - 4829 , - 2130 , - 5347 , - 4736 , - 1689 , - 3166 , - 4991 , - 2988 , - 4117 , - 4202 , - 4635 , - 1240 , - 977 , - 5238 , - 4279 , - 5060 , - 3405 , - 706 , - 3923 , - 3312 , - 265 , - 1742 , - 3567 , - 1564 , - 2693 , - 2778 , - 3211 , - 5384 , - 5121 , - 3814 , - 2855 , - 3636 , - 1981 , - 4850 , - 2499 , - 1888 , - 4409 , - 318 , - 2143 , - 140 , - 1269 , - 1354 , - 1787 , - 3960 , - 3697 , - 2390 , - 1431 , - 2212 , - 557 , - 3426 , - 1075 , - 464 , - 2985 , - 4462 , - 719 , - 4284 , - 5413 , - 5498 , - 363 , - 2536 , - 2273 , - 966 , - 7 , - 788 , - 4701 , - 2002 , - 5219 , - 4608 , - 1561 , - 3038 , - 4863 , - 2860 , - 3989 , - 4074 , - 4507 , - 1112 , - 849 , - 5110 , - 4151 , - 4932 , - 3277 , - 578 , - 3795 , - 3184 , - 137 , - 1614 , - 3439 , - 1436 , - 2565 , - 2650 , - 3083 , - 5256 , - 4993 , - 3686 , - 2727 , - 3508 , - 1853 , - 4722 , - 2371 , - 1760 , - 4281 , - 190 , - 2015 , - 12 , - 1141 , - 1226 , - 1659 , - 3832 , - 3569 , - 2262 , - 1303 , - 2084 , - 429 , - 3298 , - 947 , - 336 , - 2857 , - 4334 , - 591 , - 4156 , - 5285 , - 5370 , - 235 , - 2408 , - 2145 , - 838 , - 5447 , - 660 , - 4573 , - 1874 , - 5091 , - 4480 , - 1433 , - 2910 , - 4735 , - 2732 , - 3861 , - 3946 , - 4379 , - 984 , - 721 , - 4982 , - 4023 , - 4804 , - 3149 , - 450 , - 3667 , - 3056 , - 9 , - 1486 , - 3311 , - 1308 , - 2437 , - 2522 , - 2955 , - 5128 , - 4865 , - 3558 , - 2599 , - 3380 , - 1725 , - 4594 , - 2243 , - 1632 , - 4153 , - 62 , - 1887 , - 5452 , - 1013 , - 1098 , - 1531 , - 3704 , - 3441 , - 2134 , - 1175 , - 1956 , - 301 , - 3170 , - 819 , - 208 , - 2729 , - 4206 , - 463 , - 4028 , - 5157 , - 5242 , - 107 , - 2280 , - 2017 , - 710 , - 5319 , - 532 , - 4445 , - 1746 , - 4963 , - 4352 , - 1305 , - 2782 , - 4607 , - 2604 , - 3733 , - 3818 , - 4251 , - 856 , - 593 , - 4854 , - 3895 , - 4676 , - 3021 , - 322 , - 3539 , - 2928 , - 5449 , - 1358 , - 3183 , - 1180 , - 2309 , - 2394 , - 2827 , - 5000 , - 4737 , - 3430 , - 2471 , - 3252 , - 1597 , - 4466 , - 2115 , - 1504 , - 4025 , - 5502 , - 1759 , - 5324 , - 885 , - 970 , - 1403 , - 3576 , - 3313 , - 2006 , - 1047 , - 1828 , - 173 , - 3042 , - 691 , - 80 , - 2601 , - 4078 , - 335 , - 3900 , - 5029 , - 5114 , - 5547 , - 2152 , - 1889 , - 582 , - 5191 , - 404 , - 4317 , - 1618 , - 4835 , - 4224 , - 1177 , - 2654 , - 4479 , - 2476 , - 3605 , - 3690 , - 4123 , - 728 , - 465 , - 4726 , - 3767 , - 4548 , - 2893 , - 194 , - 3411 , - 2800 , - 5321 , - 1230 , - 3055 , - 1052 , - 2181 , - 2266 , - 2699 , - 4872 , - 4609 , - 3302 , - 2343 , - 3124 , - 1469 , - 4338 , - 1987 , - 1376 , - 3897 , - 5374 , - 1631 , - 5196 , - 757 , - 842 , - 1275 , - 3448 , - 3185 , - 1878 , - 919 , - 1700 , - 45 , - 2914 , - 563 , - 5520 , - 2473 , - 3950 , - 207 , - 3772 , - 4901 , - 4986 , - 5419 , - 2024 , - 1761 , - 454 , - 5063 , - 276 , - 4189 , - 1490 , - 4707 , - 4096 , - 1049 , - 2526 , - 4351 , - 2348 , - 3477 , - 3562 , - 3995 , - 600 , - 337 , - 4598 , - 3639 , - 4420 , - 2765 , - 66 , - 3283 , - 2672 , - 5193 , - 1102 , - 2927 , - 924 , - 2053 , - 2138 , - 2571 , - 4744 , - 4481 , - 3174 , - 2215 , - 2996 , - 1341 , - 4210 , - 1859 , - 1248 , - 3769 , - 5246 , - 1503 , - 5068 , - 629 , - 714 , - 1147 , - 3320 , - 3057 , - 1750 , - 791 , - 1572 , - 5485 , - 2786 , - 435 , - 5392 , - 2345 , - 3822 , - 79 , - 3644 , - 4773 , - 4858 , - 5291 , - 1896 , - 1633 , - 326 , - 4935 , - 148 , - 4061 , - 1362 , - 4579 , - 3968 , - 921 , - 2398 , - 4223 , - 2220 , - 3349 , - 3434 , - 3867 , - 472 , - 209 , - 4470 , - 3511 , - 4292 , - 2637 , - 5506 , - 3155 , - 2544 , - 5065 , - 974 , - 2799 , - 796 , - 1925 , - 2010 , - 2443 , - 4616 , - 4353 , - 3046 , - 2087 , - 2868 , - 1213 , - 4082 , - 1731 , - 1120 , - 3641 , - 5118 , - 1375 , - 4940 , - 501 , - 586 , - 1019 , - 3192 , - 2929 , - 1622 , - 663 , - 1444 , - 5357 , - 2658 , - 307 , - 5264 , - 2217 , - 3694 , - 5519 , - 3516 , - 4645 , - 4730 , - 5163 , - 1768 , - 1505 , - 198 , - 4807 , - 20 , - 3933 , - 1234 , - 4451 , - 3840 , - 793 , - 2270 , - 4095 , - 2092 , - 3221 , - 3306 , - 3739 , - 344 , - 81 , - 4342 , - 3383 , - 4164 , - 2509 , - 5378 , - 3027 , - 2416 , - 4937 , - 846 , - 2671 , - 668 , - 1797 , - 1882 , - 2315 , - 4488 , - 4225 , - 2918 , - 1959 , - 2740 , - 1085 , - 3954 , - 1603 , - 992 , - 3513 , - 4990 , - 1247 , - 4812 , - 373 , - 458 , - 891 , - 3064 , - 2801 , - 1494 , - 535 , - 1316 , - 5229 , - 2530 , - 179 , - 5136 , - 2089 , - 3566 , - 5391 , - 3388 , - 4517 , - 4602 , - 5035 , - 1640 , - 1377 , - 70 , - 4679 , - 5460 , - 3805 , - 1106 , - 4323 , - 3712 , - 665 , - 2142 , - 3967 , - 1964 , - 3093 , - 3178 , - 3611 , - 216 , - 5521 , - 4214 , - 3255 , - 4036 , - 2381 , - 5250 , - 2899 , - 2288 , - 4809 , - 718 , - 2543 , - 540 , - 1669 , - 1754 , - 2187 , - 4360 , - 4097 , - 2790 , - 1831 , - 2612 , - 957 , - 3826 , - 1475 , - 864 , - 3385 , - 4862 , - 1119 , - 4684 , - 245 , - 330 , - 763 , - 2936 , - 2673 , - 1366 , - 407 , - 1188 , - 5101 , - 2402 , - 51 , - 5008 , - 1961 , - 3438 , - 5263 , - 3260 , - 4389 , - 4474 , - 4907 , - 1512 , - 1249 , - 5510 , - 4551 , - 5332 , - 3677 , - 978 , - 4195 , - 3584 , - 537 , - 2014 , - 3839 , - 1836 , - 2965 , - 3050 , - 3483 , - 88 , - 5393 , - 4086 , - 3127 , - 3908 , - 2253 , - 5122 , - 2771 , - 2160 , - 4681 , - 590 , - 2415 , - 412 , - 1541 , - 1626 , - 2059 , - 4232 , - 3969 , - 2662 , - 1703 , - 2484 , - 829 , - 3698 , - 1347 , - 736 , - 3257 , - 4734 , - 991 , - 4556 , - 117 , - 202 , - 635 , - 2808 , - 2545 , - 1238 , - 279 , - 1060 , - 4973 , - 2274 , - 5491 , - 4880 , - 1833 , - 3310 , - 5135 , - 3132 , - 4261 , - 4346 , - 4779 , - 1384 , - 1121 , - 5382 , - 4423 , - 5204 , - 3549 , - 850 , - 4067 , - 3456 , - 409 , - 1886 , - 3711 , - 1708 , - 2837 , - 2922 , - 3355 , - 5528 , - 5265 , - 3958 , - 2999 , - 3780 , - 2125 , - 4994 , - 2643 , - 2032 , - 4553 , - 462 , - 2287 , - 284 , - 1413 , - 1498 , - 1931 , - 4104 , - 3841 , - 2534 , - 1575 , - 2356 , - 701 , - 3570 , - 1219 , - 608 , - 3129 , - 4606 , - 863 , - 4428 , - 5557 , - 74 , - 507 , - 2680 , - 2417 , - 1110 , - 151 , - 932 , - 4845 , - 2146 , - 5363 , - 4752 , - 1705 , - 3182 , - 5007 , - 3004 , - 4133 , - 4218 , - 4651 , - 1256 , - 993 , - 5254 , - 4295 , - 5076 , - 3421 , - 722 , - 3939 , - 3328 , - 281 , - 1758 , - 3583 , - 1580 , - 2709 , - 2794 , - 3227 , - 5400 , - 5137 , - 3830 , - 2871 , - 3652 , - 1997 , - 4866 , - 2515 , - 1904 , - 4425 , - 334 , - 2159 , - 156 , - 1285 , - 1370 , - 1803 , - 3976 , - 3713 , - 2406 , - 1447 , - 2228 , - 573 , - 3442 , - 1091 , - 480 , - 3001 , - 4478 , - 735 , - 4300 , - 5429 , - 5514 , - 379 , - 2552 , - 2289 , - 982 , - 23 , - 804 , - 4717 , - 2018 , - 5235 , - 4624 , - 1577 , - 3054 , - 4879 , - 2876 , - 4005 , - 4090 , - 4523 , - 1128 , - 865 , - 5126 , - 4167 , - 4948 , - 3293 , - 594 , - 3811 , - 3200 , - 153 , - 1630 , - 3455 , - 1452 , - 2581 , - 2666 , - 3099 , - 5272 , - 5009 , - 3702 , - 2743 , - 3524 , - 1869 , - 4738 , - 2387 , - 1776 , - 4297 , - 206 , - 2031 , - 28 , - 1157 , - 1242 , - 1675 , - 3848 , - 3585 , - 2278 , - 1319 , - 2100 , - 445 , - 3314 , - 963 , - 352 , - 2873 , - 4350 , - 607 , - 4172 , - 5301 , - 5386 , - 251 , - 2424 , - 2161 , - 854 , - 5463 , - 676 , - 4589 , - 1890 , - 5107 , - 4496 , - 1449 , - 2926 , - 4751 , - 2748 , - 3877 , - 3962 , - 4395 , - 1000 , - 737 , - 4998 , - 4039 , - 4820 , - 3165 , - 466 , - 3683 , - 3072 , - 25 , - 1502 , - 3327 , - 1324 , - 2453 , - 2538 , - 2971 , - 5144 , - 4881 , - 3574 , - 2615 , - 3396 , - 1741 , - 4610 , - 2259 , - 1648 , - 4169 , - 78 , - 1903 , - 5468 , - 1029 , - 1114 , - 1547 , - 3720 , - 3457 , - 2150 , - 1191 , - 1972 , - 317 , - 3186 , - 835 , - 224 , - 2745 , - 4222 , - 479 , - 4044 , - 5173 , - 5258 , - 123 , - 2296 , - 2033 , - 726 , - 5335 , - 548 , - 4461 , - 1762 , - 4979 , - 4368 , - 1321 , - 2798 , - 4623 , - 2620 , - 3749 , - 3834 , - 4267 , - 872 , - 609 , - 4870 , - 3911 , - 4692 , - 3037 , - 338 , - 3555 , - 2944 , - 5465 , - 1374 , - 3199 , - 1196 , - 2325 , - 2410 , - 2843 , - 5016 , - 4753 , - 3446 , - 2487 , - 3268 , - 1613 , - 4482 , - 2131 , - 1520 , - 4041 , - 5518 , - 1775 , - 5340 , - 901 , - 986 , - 1419 , - 3592 , - 3329 , - 2022 , - 1063 , - 1844 , - 189 , - 3058 , - 707 , - 96 , - 2617 , - 4094 , - 351 , - 3916 , - 5045 , - 5130 , - 5563 , - 2168 , - 1905 , - 598 , - 5207 , - 420 , - 4333 , - 1634 , - 4851 , - 4240 , - 1193 , - 2670 , - 4495 , - 2492 , - 3621 , - 3706 , - 4139 , - 744 , - 481 , - 4742 , - 3783 , - 4564 , - 2909 , - 210 , - 3427 , - 2816 , - 5337 , - 1246 , - 3071 , - 1068 , - 2197 , - 2282 , - 2715 , - 4888 , - 4625 , - 3318 , - 2359 , - 3140 , - 1485 , - 4354 , - 2003 , - 1392 , - 3913 , - 5390 , - 1647 , - 5212 , - 773 , - 858 , - 1291 , - 3464 , - 3201 , - 1894 , - 935 , - 1716 , - 61 , - 2930 , - 579 , - 5536 , - 2489 , - 3966 , - 223 , - 3788 , - 4917 , - 5002 , - 5435 , - 2040 , - 1777 , - 470 , - 5079 , - 292 , - 4205 , - 1506 , - 4723 , - 4112 , - 1065 , - 2542 , - 4367 , - 2364 , - 3493 , - 3578 , - 4011 , - 616 , - 353 , - 4614 , - 3655 , - 4436 , - 2781 , - 82 , - 3299 , - 2688 , - 5209 , - 1118 , - 2943 , - 940 , - 2069 , - 2154 , - 2587 , - 4760 , - 4497 , - 3190 , - 2231 , - 3012 , - 1357 , - 4226 , - 1875 , - 1264 , - 3785 , - 5262 , - 1519 , - 5084 , - 645 , - 730 , - 1163 , - 3336 , - 3073 , - 1766 , - 807 , - 1588 , - 5501 , - 2802 , - 451 , - 5408 , - 2361 , - 3838 , - 95 , - 3660 , - 4789 , - 4874 , - 5307 , - 1912 , - 1649 , - 342 , - 4951 , - 164 , - 4077 , - 1378 , - 4595 , - 3984 , - 937 , - 2414 , - 4239 , - 2236 , - 3365 , - 3450 , - 3883 , - 488 , - 225 , - 4486 , - 3527 , - 4308 , - 2653 , - 5522 , - 3171 , - 2560 , - 5081 , - 990 , - 2815 , - 812 , - 1941 , - 2026 , - 2459 , - 4632 , - 4369 , - 3062 , - 2103 , - 2884 , - 1229 , - 4098 , - 1747 , - 1136 , - 3657 , - 5134 , - 1391 , - 4956 , - 517 , - 602 , - 1035 , - 3208 , - 2945 , - 1638 , - 679 , - 1460 , - 5373 , - 2674 , - 323 , - 5280 , - 2233 , - 3710 , - 5535 , - 3532 , - 4661 , - 4746 , - 5179 , - 1784 , - 1521 , - 214 , - 4823 , - 36 , - 3949 , - 1250 , - 4467 , - 3856 , - 809 , - 2286 , - 4111 , - 2108 , - 3237 , - 3322 , - 3755 , - 360 , - 97 , - 4358 , - 3399 , - 4180 , - 2525 , - 5394 , - 3043 , - 2432 , - 4953 , - 862 , - 2687 , - 684 , - 1813 , - 1898 , - 2331 , - 4504 , - 4241 , - 2934 , - 1975 , - 2756 , - 1101 , - 3970 , - 1619 , - 1008 , - 3529 , - 5006 , - 1263 , - 4828 , - 389 , - 474 , - 907 , - 3080 , - 2817 , - 1510 , - 551 , - 1332 , - 5245 , - 2546 , - 195 , - 5152 , - 2105 , - 3582 , - 5407 , - 3404 , - 4533 , - 4618 , - 5051 , - 1656 , - 1393 , - 86 , - 4695 , - 5476 , - 3821 , - 1122 , - 4339 , - 3728 , - 681 , - 2158 , - 3983 , - 1980 , - 3109 , - 3194 , - 3627 , - 232 , - 5537 , - 4230 , - 3271 , - 4052 , - 2397 , - 5266 , - 2915 , - 2304 , - 4825 , - 734 , - 2559 , - 556 , - 1685 , - 1770 , - 2203 , - 4376 , - 4113 , - 2806 , - 1847 , - 2628 , - 973 , - 3842 , - 1491 , - 880 , - 3401 , - 4878 , - 1135 , - 4700 , - 261 , - 346 , - 779 , - 2952 , - 2689 , - 1382 , - 423 , - 1204 , - 5117 , - 2418 , - 67 , - 5024 , - 1977 , - 3454 , - 5279 , - 3276 , - 4405 , - 4490 , - 4923 , - 1528 , - 1265 , - 5526 , - 4567 , - 5348 , - 3693 , - 994 , - 4211 , - 3600 , - 553 , - 2030 , - 3855 , - 1852 , - 2981 , - 3066 , - 3499 , - 104 , - 5409 , - 4102 , - 3143 , - 3924 , - 2269 , - 5138 , - 2787 , - 2176 , - 4697 , - 606 , - 2431 , - 428 , - 1557 , - 1642 , - 2075 , - 4248 , - 3985 , - 2678 , - 1719 , - 2500 , - 845 , - 3714 , - 1363 , - 752 , - 3273 , - 4750 , - 1007 , - 4572 , - 133 , - 218 , - 651 , - 2824 , - 2561 , - 1254 , - 295 , - 1076 , - 4989 , - 2290 , - 5507 , - 4896 , - 1849 , - 3326 , - 5151 , - 3148 , - 4277 , - 4362 , - 4795 , - 1400 , - 1137 , - 5398 , - 4439 , - 5220 , - 3565 , - 866 , - 4083 , - 3472 , - 425 , - 1902 , - 3727 , - 1724 , - 2853 , - 2938 , - 3371 , - 5544 , - 5281 , - 3974 , - 3015 , - 3796 , - 2141 , - 5010 , - 2659 , - 2048 , - 4569 , - 478 , - 2303 , - 300 , - 1429 , - 1514 , - 1947 , - 4120 , - 3857 , - 2550 , - 1591 , - 2372 , - 717 , - 3586 , - 1235 , - 624 , - 3145 , - 4622 , - 879 , - 4444 , - 5 , - 90 , - 523 , - 2696 , - 2433 , - 1126 , - 167 , - 948 , - 4861 , - 2162 , - 5379 , - 4768 , - 1721 , - 3198 , - 5023 , - 3020 , - 4149 , - 4234 , - 4667 , - 1272 , - 1009 , - 5270 , - 4311 , - 5092 , - 3437 , - 738 , - 3955 , - 3344 , - 297 , - 1774 , - 3599 , - 1596 , - 2725 , - 2810 , - 3243 , - 5416 , - 5153 , - 3846 , - 2887 , - 3668 , - 2013 , - 4882 , - 2531 , - 1920 , - 4441 , - 350 , - 2175 , - 172 , - 1301 , - 1386 , - 1819 , - 3992 , - 3729 , - 2422 , - 1463 , - 2244 , - 589 , - 3458 , - 1107 , - 496 , - 3017 , - 4494 , - 751 , - 4316 , - 5445 , - 5530 , - 395 , - 2568 , - 2305 , - 998 , - 39 , - 820 , - 4733 , - 2034 , - 5251 , - 4640 , - 1593 , - 3070 , - 4895 , - 2892 , - 4021 , - 4106 , - 4539 , - 1144 , - 881 , - 5142 , - 4183 , - 4964 , - 3309 , - 610 , - 3827 , - 3216 , - 169 , - 1646 , - 3471 , - 1468 , - 2597 , - 2682 , - 3115 , - 5288 , - 5025 , - 3718 , - 2759 , - 3540 , - 1885 , - 4754 , - 2403 , - 1792 , - 4313 , - 222 , - 2047 , - 44 , - 1173 , - 1258 , - 1691 , - 3864 , - 3601 , - 2294 , - 1335 , - 2116 , - 461 , - 3330 , - 979 , - 368 , - 2889 , - 4366 , - 623 , - 4188 , - 5317 , - 5402 , - 267 , - 2440 , - 2177 , - 870 , - 5479 , - 692 , - 4605 , - 1906 , - 5123 , - 4512 , - 1465 , - 2942 , - 4767 , - 2764 , - 3893 , - 3978 , - 4411 , - 1016 , - 753 , - 5014 , - 4055 , - 4836 , - 3181 , - 482 , - 3699 , - 3088 , - 41 , - 1518 , - 3343 , - 1340 , - 2469 , - 2554 , - 2987 , - 5160 , - 4897 , - 3590 , - 2631 , - 3412 , - 1757 , - 4626 , - 2275 , - 1664 , - 4185 , - 94 , - 1919 , - 5484 , - 1045 , - 1130 , - 1563 , - 3736 , - 3473 , - 2166 , - 1207 , - 1988 , - 333 , - 3202 , - 851 , - 240 , - 2761 , - 4238 , - 495 , - 4060 , - 5189 , - 5274 , - 139 , - 2312 , - 2049 , - 742 , - 5351 , - 564 , - 4477 , - 1778 , - 4995 , - 4384 , - 1337 , - 2814 , - 4639 , - 2636 , - 3765 , - 3850 , - 4283 , - 888 , - 625 , - 4886 , - 3927 , - 4708 , - 3053 , - 354 , - 3571 , - 2960 , - 5481 , - 1390 , - 3215 , - 1212 , - 2341 , - 2426 , - 2859 , - 5032 , - 4769 , - 3462 , - 2503 , - 3284 , - 1629 , - 4498 , - 2147 , - 1536 , - 4057 , - 5534 , - 1791 , - 5356 , - 917 , - 1002 , - 1435 , - 3608 , - 3345 , - 2038 , - 1079 , - 1860 , - 205 , - 3074 , - 723 , - 112 , - 2633 , - 4110 , - 367 , - 3932 , - 5061 , - 5146 , - 11 , - 2184 , - 1921 , - 614 , - 5223 , - 436 , - 4349 , - 1650 , - 4867 , - 4256 , - 1209 , - 2686 , - 4511 , - 2508 , - 3637 , - 3722 , - 4155 , - 760 , - 497 , - 4758 , - 3799 , - 4580 , - 2925 , - 226 , - 3443 , - 2832 , - 5353 , - 1262 , - 3087 , - 1084 , - 2213 , - 2298 , - 2731 , - 4904 , - 4641 , - 3334 , - 2375 , - 3156 , - 1501 , - 4370 , - 2019 , - 1408 , - 3929 , - 5406 , - 1663 , - 5228 , - 789 , - 874 , - 1307 , - 3480 , - 3217 , - 1910 , - 951 , - 1732 , - 77 , - 2946 , - 595 , - 5552 , - 2505 , - 3982 , - 239 , - 3804 , - 4933 , - 5018 , - 5451 , - 2056 , - 1793 , - 486 , - 5095 , - 308 , - 4221 , - 1522 , - 4739 , - 4128 , - 1081 , - 2558 , - 4383 , - 2380 , - 3509 , - 3594 , - 4027 , - 632 , - 369 , - 4630 , - 3671 , - 4452 , - 2797 , - 98 , - 3315 , - 2704 , - 5225 , - 1134 , - 2959 , - 956 , - 2085 , - 2170 , - 2603 , - 4776 , - 4513 , - 3206 , - 2247 , - 3028 , - 1373 , - 4242 , - 1891 , - 1280 , - 3801 , - 5278 , - 1535 , - 5100 , - 661 , - 746 , - 1179 , - 3352 , - 3089 , - 1782 , - 823 , - 1604 , - 5517 , - 2818 , - 467 , - 5424 , - 2377 , - 3854 , - 111 , - 3676 , - 4805 , - 4890 , - 5323 , - 1928 , - 1665 , - 358 , - 4967 , - 180 , - 4093 , - 1394 , - 4611 , - 4000 , - 953 , - 2430 , - 4255 , - 2252 , - 3381 , - 3466 , - 3899 , - 504 , - 241 , - 4502 , - 3543 , - 4324 , - 2669 , - 5538 , - 3187 , - 2576 , - 5097 , - 1006 , - 2831 , - 828 , - 1957 , - 2042 , - 2475 , - 4648 , - 4385 , - 3078 , - 2119 , - 2900 , - 1245 , - 4114 , - 1763 , - 1152 , - 3673 , - 5150 , - 1407 , - 4972 , - 533 , - 618 , - 1051 , - 3224 , - 2961 , - 1654 , - 695 , - 1476 , - 5389 , - 2690 , - 339 , - 5296 , - 2249 , - 3726 , - 5551 , - 3548 , - 4677 , - 4762 , - 5195 , - 1800 , - 1537 , - 230 , - 4839 , - 52 , - 3965 , - 1266 , - 4483 , - 3872 , - 825 , - 2302 , - 4127 , - 2124 , - 3253 , - 3338 , - 3771 , - 376 , - 113 , - 4374 , - 3415 , - 4196 , - 2541 , - 5410 , - 3059 , - 2448 , - 4969 , - 878 , - 2703 , - 700 , - 1829 , - 1914 , - 2347 , - 4520 , - 4257 , - 2950 , - 1991 , - 2772 , - 1117 , - 3986 , - 1635 , - 1024 , - 3545 , - 5022 , - 1279 , - 4844 , - 405 , - 490 , - 923 , - 3096 , - 2833 , - 1526 , - 567 , - 1348 , - 5261 , - 2562 , - 211 , - 5168 , - 2121 , - 3598 , - 5423 , - 3420 , - 4549 , - 4634 , - 5067 , - 1672 , - 1409 , - 102 , - 4711 , - 5492 , - 3837 , - 1138 , - 4355 , - 3744 , - 697 , - 2174 , - 3999 , - 1996 , - 3125 , - 3210 , - 3643 , - 248 , - 5553 , - 4246 , - 3287 , - 4068 , - 2413 , - 5282 , - 2931 , - 2320 , - 4841 , - 750 , - 2575 , - 572 , - 1701 , - 1786 , - 2219 , - 4392 , - 4129 , - 2822 , - 1863 , - 2644 , - 989 , - 3858 , - 1507 , - 896 , - 3417 , - 4894 , - 1151 , - 4716 , - 277 , - 362 , - 795 , - 2968 , - 2705 , - 1398 , - 439 , - 1220 , - 5133 , - 2434 , - 83 , - 5040 , - 1993 , - 3470 , - 5295 , - 3292 , - 4421 , - 4506 , - 4939 , - 1544 , - 1281 , - 5542 , - 4583 , - 5364 , - 3709 , - 1010 , - 4227 , - 3616 , - 569 , - 2046 , - 3871 , - 1868 , - 2997 , - 3082 , - 3515 , - 120 , - 5425 , - 4118 , - 3159 , - 3940 , - 2285 , - 5154 , - 2803 , - 2192 , - 4713 , - 622 , - 2447 , - 444 , - 1573 , - 1658 , - 2091 , - 4264 , - 4001 , - 2694 , - 1735 , - 2516 , - 861 , - 3730 , - 1379 , - 768 , - 3289 , - 4766 , - 1023 , - 4588 , - 149 , - 234 , - 667 , - 2840 , - 2577 , - 1270 , - 311 , - 1092 , - 5005 , - 2306 , - 5523 , - 4912 , - 1865 , - 3342 , - 5167 , - 3164 , - 4293 , - 4378 , - 4811 , - 1416 , - 1153 , - 5414 , - 4455 , - 5236 , - 3581 , - 882 , - 4099 , - 3488 , - 441 , - 1918 , - 3743 , - 1740 , - 2869 , - 2954 , - 3387 , - 5560 , - 5297 , - 3990 , - 3031 , - 3812 , - 2157 , - 5026 , - 2675 , - 2064 , - 4585 , - 494 , - 2319 , - 316 , - 1445 , - 1530 , - 1963 , - 4136 , - 3873 , - 2566 , - 1607 , - 2388 , - 733 , - 3602 , - 1251 , - 640 , - 3161 , - 4638 , - 895 , - 4460 , - 21 , - 106 , - 539 , - 2712 , - 2449 , - 1142 , - 183 , - 964 , - 4877 , - 2178 , - 5395 , - 4784 , - 1737 , - 3214 , - 5039 , - 3036 , - 4165 , - 4250 , - 4683 , - 1288 , - 1025 , - 5286 , - 4327 , - 5108 , - 3453 , - 754 , - 3971 , - 3360 , - 313 , - 1790 , - 3615 , - 1612 , - 2741 , - 2826 , - 3259 , - 5432 , - 5169 , - 3862 , - 2903 , - 3684 , - 2029 , - 4898 , - 2547 , - 1936 , - 4457 , - 366 , - 2191 , - 188 , - 1317 , - 1402 , - 1835 , - 4008 , - 3745 , - 2438 , - 1479 , - 2260 , - 605 , - 3474 , - 1123 , - 512 , - 3033 , - 4510 , - 767 , - 4332 , - 5461 , - 5546 , - 411 , - 2584 , - 2321 , - 1014 , - 55 , - 836 , - 4749 , - 2050 , - 5267 , - 4656 , - 1609 , - 3086 , - 4911 , - 2908 , - 4037 , - 4122 , - 4555 , - 1160 , - 897 , - 5158 , - 4199 , - 4980 , - 3325 , - 626 , - 3843 , - 3232 , - 185 , - 1662 , - 3487 , - 1484 , - 2613 , - 2698 , - 3131 , - 5304 , - 5041 , - 3734 , - 2775 , - 3556 , - 1901 , - 4770 , - 2419 , - 1808 , - 4329 , - 238 , - 2063 , - 60 , - 1189 , - 1274 , - 1707 , - 3880 , - 3617 , - 2310 , - 1351 , - 2132 , - 477 , - 3346 , - 995 , - 384 , - 2905 , - 4382 , - 639 , - 4204 , - 5333 , - 5418 , - 283 , - 2456 , - 2193 , - 886 , - 5495 , - 708 , - 4621 , - 1922 , - 5139 , - 4528 , - 1481 , - 2958 , - 4783 , - 2780 , - 3909 , - 3994 , - 4427 , - 1032 , - 769 , - 5030 , - 4071 , - 4852 , - 3197 , - 498 , - 3715 , - 3104 , - 57 , - 1534 , - 3359 , - 1356 , - 2485 , - 2570 , - 3003 , - 5176 , - 4913 , - 3606 , - 2647 , - 3428 , - 1773 , - 4642 , - 2291 , - 1680 , - 4201 , - 110 , - 1935 , - 5500 , - 1061 , - 1146 , - 1579 , - 3752 , - 3489 , - 2182 , - 1223 , - 2004 , - 349 , - 3218 , - 867 , - 256 , - 2777 , - 4254 , - 511 , - 4076 , - 5205 , - 5290 , - 155 , - 2328 , - 2065 , - 758 , - 5367 , - 580 , - 4493 , - 1794 , - 5011 , - 4400 , - 1353 , - 2830 , - 4655 , - 2652 , - 3781 , - 3866 , - 4299 , - 904 , - 641 , - 4902 , - 3943 , - 4724 , - 3069 , - 370 , - 3587 , - 2976 , - 5497 , - 1406 , - 3231 , - 1228 , - 2357 , - 2442 , - 2875 , - 5048 , - 4785 , - 3478 , - 2519 , - 3300 , - 1645 , - 4514 , - 2163 , - 1552 , - 4073 , - 5550 , - 1807 , - 5372 , - 933 , - 1018 , - 1451 , - 3624 , - 3361 , - 2054 , - 1095 , - 1876 , - 221 , - 3090 , - 739 , - 128 , - 2649 , - 4126 , - 383 , - 3948 , - 5077 , - 5162 , - 27 , - 2200 , - 1937 , - 630 , - 5239 , - 452 , - 4365 , - 1666 , - 4883 , - 4272 , - 1225 , - 2702 , - 4527 , - 2524 , - 3653 , - 3738 , - 4171 , - 776 , - 513 , - 4774 , - 3815 , - 4596 , - 2941 , - 242 , - 3459 , - 2848 , - 5369 , - 1278 , - 3103 , - 1100 , - 2229 , - 2314 , - 2747 , - 4920 , - 4657 , - 3350 , - 2391 , - 3172 , - 1517 , - 4386 , - 2035 , - 1424 , - 3945 , - 5422 , - 1679 , - 5244 , - 805 , - 890 , - 1323 , - 3496 , - 3233 , - 1926 , - 967 , - 1748 , - 93 , - 2962 , - 611 , - 0 , - 4533 , - 4490 , - 5503 , - 1940 , - 5065 , - 3614 , - 3219 , - 3880 , - 5597 , - 2738 , - 935 , - 188 , - 497 , - 1862 , - 4283 , - 2128 , - 1029 , - 986 , - 1999 , - 4068 , - 1561 , - 110 , - 5347 , - 376 , - 2093 , - 4866 , - 3063 , - 2316 , - 2625 , - 3990 , - 779 , - 4256 , - 3157 , - 3114 , - 4127 , - 564 , - 3689 , - 2238 , - 1843 , - 2504 , - 4221 , - 1362 , - 5191 , - 4444 , - 4753 , - 486 , - 2907 , - 752 , - 5285 , - 5242 , - 623 , - 2692 , - 185 , - 4366 , - 3971 , - 4632 , - 717 , - 3490 , - 1687 , - 940 , - 1249 , - 2614 , - 5035 , - 2880 , - 1781 , - 1738 , - 2751 , - 4820 , - 2313 , - 862 , - 467 , - 1128 , - 2845 , - 5618 , - 3815 , - 3068 , - 3377 , - 4742 , - 1531 , - 5008 , - 3909 , - 3866 , - 4879 , - 1316 , - 4441 , - 2990 , - 2595 , - 3256 , - 4973 , - 2114 , - 311 , - 5196 , - 5505 , - 1238 , - 3659 , - 1504 , - 405 , - 362 , - 1375 , - 3444 , - 937 , - 5118 , - 4723 , - 5384 , - 1469 , - 4242 , - 2439 , - 1692 , - 2001 , - 3366 , - 155 , - 3632 , - 2533 , - 2490 , - 3503 , - 5572 , - 3065 , - 1614 , - 1219 , - 1880 , - 3597 , - 738 , - 4567 , - 3820 , - 4129 , - 5494 , - 2283 , - 128 , - 4661 , - 4618 , - 5631 , - 2068 , - 5193 , - 3742 , - 3347 , - 4008 , - 93 , - 2866 , - 1063 , - 316 , - 625 , - 1990 , - 4411 , - 2256 , - 1157 , - 1114 , - 2127 , - 4196 , - 1689 , - 238 , - 5475 , - 504 , - 2221 , - 4994 , - 3191 , - 2444 , - 2753 , - 4118 , - 907 , - 4384 , - 3285 , - 3242 , - 4255 , - 692 , - 3817 , - 2366 , - 1971 , - 2632 , - 4349 , - 1490 , - 5319 , - 4572 , - 4881 , - 614 , - 3035 , - 880 , - 5413 , - 5370 , - 751 , - 2820 , - 313 , - 4494 , - 4099 , - 4760 , - 845 , - 3618 , - 1815 , - 1068 , - 1377 , - 2742 , - 5163 , - 3008 , - 1909 , - 1866 , - 2879 , - 4948 , - 2441 , - 990 , - 595 , - 1256 , - 2973 , - 114 , - 3943 , - 3196 , - 3505 , - 4870 , - 1659 , - 5136 , - 4037 , - 3994 , - 5007 , - 1444 , - 4569 , - 3118 , - 2723 , - 3384 , - 5101 , - 2242 , - 439 , - 5324 , - 1 , - 1366 , - 3787 , - 1632 , - 533 , - 490 , - 1503 , - 3572 , - 1065 , - 5246 , - 4851 , - 5512 , - 1597 , - 4370 , - 2567 , - 1820 , - 2129 , - 3494 , - 283 , - 3760 , - 2661 , - 2618 , - 3631 , - 68 , - 3193 , - 1742 , - 1347 , - 2008 , - 3725 , - 866 , - 4695 , - 3948 , - 4257 , - 5622 , - 2411 , - 256 , - 4789 , - 4746 , - 127 , - 2196 , - 5321 , - 3870 , - 3475 , - 4136 , - 221 , - 2994 , - 1191 , - 444 , - 753 , - 2118 , - 4539 , - 2384 , - 1285 , - 1242 , - 2255 , - 4324 , - 1817 , - 366 , - 5603 , - 632 , - 2349 , - 5122 , - 3319 , - 2572 , - 2881 , - 4246 , - 1035 , - 4512 , - 3413 , - 3370 , - 4383 , - 820 , - 3945 , - 2494 , - 2099 , - 2760 , - 4477 , - 1618 , - 5447 , - 4700 , - 5009 , - 742 , - 3163 , - 1008 , - 5541 , - 5498 , - 879 , - 2948 , - 441 , - 4622 , - 4227 , - 4888 , - 973 , - 3746 , - 1943 , - 1196 , - 1505 , - 2870 , - 5291 , - 3136 , - 2037 , - 1994 , - 3007 , - 5076 , - 2569 , - 1118 , - 723 , - 1384 , - 3101 , - 242 , - 4071 , - 3324 , - 3633 , - 4998 , - 1787 , - 5264 , - 4165 , - 4122 , - 5135 , - 1572 , - 4697 , - 3246 , - 2851 , - 3512 , - 5229 , - 2370 , - 567 , - 5452 , - 129 , - 1494 , - 3915 , - 1760 , - 661 , - 618 , - 1631 , - 3700 , - 1193 , - 5374 , - 4979 , - 8 , - 1725 , - 4498 , - 2695 , - 1948 , - 2257 , - 3622 , - 411 , - 3888 , - 2789 , - 2746 , - 3759 , - 196 , - 3321 , - 1870 , - 1475 , - 2136 , - 3853 , - 994 , - 4823 , - 4076 , - 4385 , - 118 , - 2539 , - 384 , - 4917 , - 4874 , - 255 , - 2324 , - 5449 , - 3998 , - 3603 , - 4264 , - 349 , - 3122 , - 1319 , - 572 , - 881 , - 2246 , - 4667 , - 2512 , - 1413 , - 1370 , - 2383 , - 4452 , - 1945 , - 494 , - 99 , - 760 , - 2477 , - 5250 , - 3447 , - 2700 , - 3009 , - 4374 , - 1163 , - 4640 , - 3541 , - 3498 , - 4511 , - 948 , - 4073 , - 2622 , - 2227 , - 2888 , - 4605 , - 1746 , - 5575 , - 4828 , - 5137 , - 870 , - 3291 , - 1136 , - 37 , - 5626 , - 1007 , - 3076 , - 569 , - 4750 , - 4355 , - 5016 , - 1101 , - 3874 , - 2071 , - 1324 , - 1633 , - 2998 , - 5419 , - 3264 , - 2165 , - 2122 , - 3135 , - 5204 , - 2697 , - 1246 , - 851 , - 1512 , - 3229 , - 370 , - 4199 , - 3452 , - 3761 , - 5126 , - 1915 , - 5392 , - 4293 , - 4250 , - 5263 , - 1700 , - 4825 , - 3374 , - 2979 , - 3640 , - 5357 , - 2498 , - 695 , - 5580 , - 257 , - 1622 , - 4043 , - 1888 , - 789 , - 746 , - 1759 , - 3828 , - 1321 , - 5502 , - 5107 , - 136 , - 1853 , - 4626 , - 2823 , - 2076 , - 2385 , - 3750 , - 539 , - 4016 , - 2917 , - 2874 , - 3887 , - 324 , - 3449 , - 1998 , - 1603 , - 2264 , - 3981 , - 1122 , - 4951 , - 4204 , - 4513 , - 246 , - 2667 , - 512 , - 5045 , - 5002 , - 383 , - 2452 , - 5577 , - 4126 , - 3731 , - 4392 , - 477 , - 3250 , - 1447 , - 700 , - 1009 , - 2374 , - 4795 , - 2640 , - 1541 , - 1498 , - 2511 , - 4580 , - 2073 , - 622 , - 227 , - 888 , - 2605 , - 5378 , - 3575 , - 2828 , - 3137 , - 4502 , - 1291 , - 4768 , - 3669 , - 3626 , - 4639 , - 1076 , - 4201 , - 2750 , - 2355 , - 3016 , - 4733 , - 1874 , - 71 , - 4956 , - 5265 , - 998 , - 3419 , - 1264 , - 165 , - 122 , - 1135 , - 3204 , - 697 , - 4878 , - 4483 , - 5144 , - 1229 , - 4002 , - 2199 , - 1452 , - 1761 , - 3126 , - 5547 , - 3392 , - 2293 , - 2250 , - 3263 , - 5332 , - 2825 , - 1374 , - 979 , - 1640 , - 3357 , - 498 , - 4327 , - 3580 , - 3889 , - 5254 , - 2043 , - 5520 , - 4421 , - 4378 , - 5391 , - 1828 , - 4953 , - 3502 , - 3107 , - 3768 , - 5485 , - 2626 , - 823 , - 76 , - 385 , - 1750 , - 4171 , - 2016 , - 917 , - 874 , - 1887 , - 3956 , - 1449 , - 5630 , - 5235 , - 264 , - 1981 , - 4754 , - 2951 , - 2204 , - 2513 , - 3878 , - 667 , - 4144 , - 3045 , - 3002 , - 4015 , - 452 , - 3577 , - 2126 , - 1731 , - 2392 , - 4109 , - 1250 , - 5079 , - 4332 , - 4641 , - 374 , - 2795 , - 640 , - 5173 , - 5130 , - 511 , - 2580 , - 73 , - 4254 , - 3859 , - 4520 , - 605 , - 3378 , - 1575 , - 828 , - 1137 , - 2502 , - 4923 , - 2768 , - 1669 , - 1626 , - 2639 , - 4708 , - 2201 , - 750 , - 355 , - 1016 , - 2733 , - 5506 , - 3703 , - 2956 , - 3265 , - 4630 , - 1419 , - 4896 , - 3797 , - 3754 , - 4767 , - 1204 , - 4329 , - 2878 , - 2483 , - 3144 , - 4861 , - 2002 , - 199 , - 5084 , - 5393 , - 1126 , - 3547 , - 1392 , - 293 , - 250 , - 1263 , - 3332 , - 825 , - 5006 , - 4611 , - 5272 , - 1357 , - 4130 , - 2327 , - 1580 , - 1889 , - 3254 , - 43 , - 3520 , - 2421 , - 2378 , - 3391 , - 5460 , - 2953 , - 1502 , - 1107 , - 1768 , - 3485 , - 626 , - 4455 , - 3708 , - 4017 , - 5382 , - 2171 , - 16 , - 4549 , - 4506 , - 5519 , - 1956 , - 5081 , - 3630 , - 3235 , - 3896 , - 5613 , - 2754 , - 951 , - 204 , - 513 , - 1878 , - 4299 , - 2144 , - 1045 , - 1002 , - 2015 , - 4084 , - 1577 , - 126 , - 5363 , - 392 , - 2109 , - 4882 , - 3079 , - 2332 , - 2641 , - 4006 , - 795 , - 4272 , - 3173 , - 3130 , - 4143 , - 580 , - 3705 , - 2254 , - 1859 , - 2520 , - 4237 , - 1378 , - 5207 , - 4460 , - 4769 , - 502 , - 2923 , - 768 , - 5301 , - 5258 , - 639 , - 2708 , - 201 , - 4382 , - 3987 , - 4648 , - 733 , - 3506 , - 1703 , - 956 , - 1265 , - 2630 , - 5051 , - 2896 , - 1797 , - 1754 , - 2767 , - 4836 , - 2329 , - 878 , - 483 , - 1144 , - 2861 , - 2 , - 3831 , - 3084 , - 3393 , - 4758 , - 1547 , - 5024 , - 3925 , - 3882 , - 4895 , - 1332 , - 4457 , - 3006 , - 2611 , - 3272 , - 4989 , - 2130 , - 327 , - 5212 , - 5521 , - 1254 , - 3675 , - 1520 , - 421 , - 378 , - 1391 , - 3460 , - 953 , - 5134 , - 4739 , - 5400 , - 1485 , - 4258 , - 2455 , - 1708 , - 2017 , - 3382 , - 171 , - 3648 , - 2549 , - 2506 , - 3519 , - 5588 , - 3081 , - 1630 , - 1235 , - 1896 , - 3613 , - 754 , - 4583 , - 3836 , - 4145 , - 5510 , - 2299 , - 144 , - 4677 , - 4634 , - 15 , - 2084 , - 5209 , - 3758 , - 3363 , - 4024 , - 109 , - 2882 , - 1079 , - 332 , - 641 , - 2006 , - 4427 , - 2272 , - 1173 , - 1130 , - 2143 , - 4212 , - 1705 , - 254 , - 5491 , - 520 , - 2237 , - 5010 , - 3207 , - 2460 , - 2769 , - 4134 , - 923 , - 4400 , - 3301 , - 3258 , - 4271 , - 708 , - 3833 , - 2382 , - 1987 , - 2648 , - 4365 , - 1506 , - 5335 , - 4588 , - 4897 , - 630 , - 3051 , - 896 , - 5429 , - 5386 , - 767 , - 2836 , - 329 , - 4510 , - 4115 , - 4776 , - 861 , - 3634 , - 1831 , - 1084 , - 1393 , - 2758 , - 5179 , - 3024 , - 1925 , - 1882 , - 2895 , - 4964 , - 2457 , - 1006 , - 611 , - 1272 , - 2989 , - 130 , - 3959 , - 3212 , - 3521 , - 4886 , - 1675 , - 5152 , - 4053 , - 4010 , - 5023 , - 1460 , - 4585 , - 3134 , - 2739 , - 3400 , - 5117 , - 2258 , - 455 , - 5340 , - 17 , - 1382 , - 3803 , - 1648 , - 549 , - 506 , - 1519 , - 3588 , - 1081 , - 5262 , - 4867 , - 5528 , - 1613 , - 4386 , - 2583 , - 1836 , - 2145 , - 3510 , - 299 , - 3776 , - 2677 , - 2634 , - 3647 , - 84 , - 3209 , - 1758 , - 1363 , - 2024 , - 3741 , - 882 , - 4711 , - 3964 , - 4273 , - 6 , - 2427 , - 272 , - 4805 , - 4762 , - 143 , - 2212 , - 5337 , - 3886 , - 3491 , - 4152 , - 237 , - 3010 , - 1207 , - 460 , - 769 , - 2134 , - 4555 , - 2400 , - 1301 , - 1258 , - 2271 , - 4340 , - 1833 , - 382 , - 5619 , - 648 , - 2365 , - 5138 , - 3335 , - 2588 , - 2897 , - 4262 , - 1051 , - 4528 , - 3429 , - 3386 , - 4399 , - 836 , - 3961 , - 2510 , - 2115 , - 2776 , - 4493 , - 1634 , - 5463 , - 4716 , - 5025 , - 758 , - 3179 , - 1024 , - 5557 , - 5514 , - 895 , - 2964 , - 457 , - 4638 , - 4243 , - 4904 , - 989 , - 3762 , - 1959 , - 1212 , - 1521 , - 2886 , - 5307 , - 3152 , - 2053 , - 2010 , - 3023 , - 5092 , - 2585 , - 1134 , - 739 , - 1400 , - 3117 , - 258 , - 4087 , - 3340 , - 3649 , - 5014 , - 1803 , - 5280 , - 4181 , - 4138 , - 5151 , - 1588 , - 4713 , - 3262 , - 2867 , - 3528 , - 5245 , - 2386 , - 583 , - 5468 , - 145 , - 1510 , - 3931 , - 1776 , - 677 , - 634 , - 1647 , - 3716 , - 1209 , - 5390 , - 4995 , - 24 , - 1741 , - 4514 , - 2711 , - 1964 , - 2273 , - 3638 , - 427 , - 3904 , - 2805 , - 2762 , - 3775 , - 212 , - 3337 , - 1886 , - 1491 , - 2152 , - 3869 , - 1010 , - 4839 , - 4092 , - 4401 , - 134 , - 2555 , - 400 , - 4933 , - 4890 , - 271 , - 2340 , - 5465 , - 4014 , - 3619 , - 4280 , - 365 , - 3138 , - 1335 , - 588 , - 897 , - 2262 , - 4683 , - 2528 , - 1429 , - 1386 , - 2399 , - 4468 , - 1961 , - 510 , - 115 , - 776 , - 2493 , - 5266 , - 3463 , - 2716 , - 3025 , - 4390 , - 1179 , - 4656 , - 3557 , - 3514 , - 4527 , - 964 , - 4089 , - 2638 , - 2243 , - 2904 , - 4621 , - 1762 , - 5591 , - 4844 , - 5153 , - 886 , - 3307 , - 1152 , - 53 , - 10 , - 1023 , - 3092 , - 585 , - 4766 , - 4371 , - 5032 , - 1117 , - 3890 , - 2087 , - 1340 , - 1649 , - 3014 , - 5435 , - 3280 , - 2181 , - 2138 , - 3151 , - 5220 , - 2713 , - 1262 , - 867 , - 1528 , - 3245 , - 386 , - 4215 , - 3468 , - 3777 , - 5142 , - 1931 , - 5408 , - 4309 , - 4266 , - 5279 , - 1716 , - 4841 , - 3390 , - 2995 , - 3656 , - 5373 , - 2514 , - 711 , - 5596 , - 273 , - 1638 , - 4059 , - 1904 , - 805 , - 762 , - 1775 , - 3844 , - 1337 , - 5518 , - 5123 , - 152 , - 1869 , - 4642 , - 2839 , - 2092 , - 2401 , - 3766 , - 555 , - 4032 , - 2933 , - 2890 , - 3903 , - 340 , - 3465 , - 2014 , - 1619 , - 2280 , - 3997 , - 1138 , - 4967 , - 4220 , - 4529 , - 262 , - 2683 , - 528 , - 5061 , - 5018 , - 399 , - 2468 , - 5593 , - 4142 , - 3747 , - 4408 , - 493 , - 3266 , - 1463 , - 716 , - 1025 , - 2390 , - 4811 , - 2656 , - 1557 , - 1514 , - 2527 , - 4596 , - 2089 , - 638 , - 243 , - 904 , - 2621 , - 5394 , - 3591 , - 2844 , - 3153 , - 4518 , - 1307 , - 4784 , - 3685 , - 3642 , - 4655 , - 1092 , - 4217 , - 2766 , - 2371 , - 3032 , - 4749 , - 1890 , - 87 , - 4972 , - 5281 , - 1014 , - 3435 , - 1280 , - 181 , - 138 , - 1151 , - 3220 , - 713 , - 4894 , - 4499 , - 5160 , - 1245 , - 4018 , - 2215 , - 1468 , - 1777 , - 3142 , - 5563 , - 3408 , - 2309 , - 2266 , - 3279 , - 5348 , - 2841 , - 1390 , - 995 , - 1656 , - 3373 , - 514 , - 4343 , - 3596 , - 3905 , - 5270 , - 2059 , - 5536 , - 4437 , - 4394 , - 5407 , - 1844 , - 4969 , - 3518 , - 3123 , - 3784 , - 5501 , - 2642 , - 839 , - 92 , - 401 , - 1766 , - 4187 , - 2032 , - 933 , - 890 , - 1903 , - 3972 , - 1465 , - 14 , - 5251 , - 280 , - 1997 , - 4770 , - 2967 , - 2220 , - 2529 , - 3894 , - 683 , - 4160 , - 3061 , - 3018 , - 4031 , - 468 , - 3593 , - 2142 , - 1747 , - 2408 , - 4125 , - 1266 , - 5095 , - 4348 , - 4657 , - 390 , - 2811 , - 656 , - 5189 , - 5146 , - 527 , - 2596 , - 89 , - 4270 , - 3875 , - 4536 , - 621 , - 3394 , - 1591 , - 844 , - 1153 , - 2518 , - 4939 , - 2784 , - 1685 , - 1642 , - 2655 , - 4724 , - 2217 , - 766 , - 371 , - 1032 , - 2749 , - 5522 , - 3719 , - 2972 , - 3281 , - 4646 , - 1435 , - 4912 , - 3813 , - 3770 , - 4783 , - 1220 , - 4345 , - 2894 , - 2499 , - 3160 , - 4877 , - 2018 , - 215 , - 5100 , - 5409 , - 1142 , - 3563 , - 1408 , - 309 , - 266 , - 1279 , - 3348 , - 841 , - 5022 , - 4627 , - 5288 , - 1373 , - 4146 , - 2343 , - 1596 , - 1905 , - 3270 , - 59 , - 3536 , - 2437 , - 2394 , - 3407 , - 5476 , - 2969 , - 1518 , - 1123 , - 1784 , - 3501 , - 642 , - 4471 , - 3724 , - 4033 , - 5398 , - 2187 , - 32 , - 4565 , - 4522 , - 5535 , - 1972 , - 5097 , - 3646 , - 3251 , - 3912 , - 5629 , - 2770 , - 967 , - 220 , - 529 , - 1894 , - 4315 , - 2160 , - 1061 , - 1018 , - 2031 , - 4100 , - 1593 , - 142 , - 5379 , - 408 , - 2125 , - 4898 , - 3095 , - 2348 , - 2657 , - 4022 , - 811 , - 4288 , - 3189 , - 3146 , - 4159 , - 596 , - 3721 , - 2270 , - 1875 , - 2536 , - 4253 , - 1394 , - 5223 , - 4476 , - 4785 , - 518 , - 2939 , - 784 , - 5317 , - 5274 , - 655 , - 2724 , - 217 , - 4398 , - 4003 , - 4664 , - 749 , - 3522 , - 1719 , - 972 , - 1281 , - 2646 , - 5067 , - 2912 , - 1813 , - 1770 , - 2783 , - 4852 , - 2345 , - 894 , - 499 , - 1160 , - 2877 , - 18 , - 3847 , - 3100 , - 3409 , - 4774 , - 1563 , - 5040 , - 3941 , - 3898 , - 4911 , - 1348 , - 4473 , - 3022 , - 2627 , - 3288 , - 5005 , - 2146 , - 343 , - 5228 , - 5537 , - 1270 , - 3691 , - 1536 , - 437 , - 394 , - 1407 , - 3476 , - 969 , - 5150 , - 4755 , - 5416 , - 1501 , - 4274 , - 2471 , - 1724 , - 2033 , - 3398 , - 187 , - 3664 , - 2565 , - 2522 , - 3535 , - 5604 , - 3097 , - 1646 , - 1251 , - 1912 , - 3629 , - 770 , - 4599 , - 3852 , - 4161 , - 5526 , - 2315 , - 160 , - 4693 , - 4650 , - 31 , - 2100 , - 5225 , - 3774 , - 3379 , - 4040 , - 125 , - 2898 , - 1095 , - 348 , - 657 , - 2022 , - 4443 , - 2288 , - 1189 , - 1146 , - 2159 , - 4228 , - 1721 , - 270 , - 5507 , - 536 , - 2253 , - 5026 , - 3223 , - 2476 , - 2785 , - 4150 , - 939 , - 4416 , - 3317 , - 3274 , - 4287 , - 724 , - 3849 , - 2398 , - 2003 , - 2664 , - 4381 , - 1522 , - 5351 , - 4604 , - 4913 , - 646 , - 3067 , - 912 , - 5445 , - 5402 , - 783 , - 2852 , - 345 , - 4526 , - 4131 , - 4792 , - 877 , - 3650 , - 1847 , - 1100 , - 1409 , - 2774 , - 5195 , - 3040 , - 1941 , - 1898 , - 2911 , - 4980 , - 2473 , - 1022 , - 627 , - 1288 , - 3005 , - 146 , - 3975 , - 3228 , - 3537 , - 4902 , - 1691 , - 5168 , - 4069 , - 4026 , - 5039 , - 1476 , - 4601 , - 3150 , - 2755 , - 3416 , - 5133 , - 2274 , - 471 , - 5356 , - 33 , - 1398 , - 3819 , - 1664 , - 565 , - 522 , - 1535 , - 3604 , - 1097 , - 5278 , - 4883 , - 5544 , - 1629 , - 4402 , - 2599 , - 1852 , - 2161 , - 3526 , - 315 , - 3792 , - 2693 , - 2650 , - 3663 , - 100 , - 3225 , - 1774 , - 1379 , - 2040 , - 3757 , - 898 , - 4727 , - 3980 , - 4289 , - 22 , - 2443 , - 288 , - 4821 , - 4778 , - 159 , - 2228 , - 5353 , - 3902 , - 3507 , - 4168 , - 253 , - 3026 , - 1223 , - 476 , - 785 , - 2150 , - 4571 , - 2416 , - 1317 , - 1274 , - 2287 , - 4356 , - 1849 , - 398 , - 3 , - 664 , - 2381 , - 5154 , - 3351 , - 2604 , - 2913 , - 4278 , - 1067 , - 4544 , - 3445 , - 3402 , - 4415 , - 852 , - 3977 , - 2526 , - 2131 , - 2792 , - 4509 , - 1650 , - 5479 , - 4732 , - 5041 , - 774 , - 3195 , - 1040 , - 5573 , - 5530 , - 911 , - 2980 , - 473 , - 4654 , - 4259 , - 4920 , - 1005 , - 3778 , - 1975 , - 1228 , - 1537 , - 2902 , - 5323 , - 3168 , - 2069 , - 2026 , - 3039 , - 5108 , - 2601 , - 1150 , - 755 , - 1416 , - 3133 , - 274 , - 4103 , - 3356 , - 3665 , - 5030 , - 1819 , - 5296 , - 4197 , - 4154 , - 5167 , - 1604 , - 4729 , - 3278 , - 2883 , - 3544 , - 5261 , - 2402 , - 599 , - 5484 , - 161 , - 1526 , - 3947 , - 1792 , - 693 , - 650 , - 1663 , - 3732 , - 1225 , - 5406 , - 5011 , - 40 , - 1757 , - 4530 , - 2727 , - 1980 , - 2289 , - 3654 , - 443 , - 3920 , - 2821 , - 2778 , - 3791 , - 228 , - 3353 , - 1902 , - 1507 , - 2168 , - 3885 , - 1026 , - 4855 , - 4108 , - 4417 , - 150 , - 2571 , - 416 , - 4949 , - 4906 , - 287 , - 2356 , - 5481 , - 4030 , - 3635 , - 4296 , - 381 , - 3154 , - 1351 , - 604 , - 913 , - 2278 , - 4699 , - 2544 , - 1445 , - 1402 , - 2415 , - 4484 , - 1977 , - 526 , - 131 , - 792 , - 2509 , - 5282 , - 3479 , - 2732 , - 3041 , - 4406 , - 1195 , - 4672 , - 3573 , - 3530 , - 4543 , - 980 , - 4105 , - 2654 , - 2259 , - 2920 , - 4637 , - 1778 , - 5607 , - 4860 , - 5169 , - 902 , - 3323 , - 1168 , - 69 , - 26 , - 1039 , - 3108 , - 601 , - 4782 , - 4387 , - 5048 , - 1133 , - 3906 , - 2103 , - 1356 , - 1665 , - 3030 , - 5451 , - 3296 , - 2197 , - 2154 , - 3167 , - 5236 , - 2729 , - 1278 , - 883 , - 1544 , - 3261 , - 402 , - 4231 , - 3484 , - 3793 , - 5158 , - 1947 , - 5424 , - 4325 , - 4282 , - 5295 , - 1732 , - 4857 , - 3406 , - 3011 , - 3672 , - 5389 , - 2530 , - 727 , - 5612 , - 289 , - 1654 , - 4075 , - 1920 , - 821 , - 778 , - 1791 , - 3860 , - 1353 , - 5534 , - 5139 , - 168 , - 1885 , - 4658 , - 2855 , - 2108 , - 2417 , - 3782 , - 571 , - 4048 , - 2949 , - 2906 , - 3919 , - 356 , - 3481 , - 2030 , - 1635 , - 2296 , - 4013 , - 1154 , - 4983 , - 4236 , - 4545 , - 278 , - 2699 , - 544 , - 5077 , - 5034 , - 415 , - 2484 , - 5609 , - 4158 , - 3763 , - 4424 , - 509 , - 3282 , - 1479 , - 732 , - 1041 , - 2406 , - 4827 , - 2672 , - 1573 , - 1530 , - 2543 , - 4612 , - 2105 , - 654 , - 259 , - 920 , - 2637 , - 5410 , - 3607 , - 2860 , - 3169 , - 4534 , - 1323 , - 4800 , - 3701 , - 3658 , - 4671 , - 1108 , - 4233 , - 2782 , - 2387 , - 3048 , - 4765 , - 1906 , - 103 , - 4988 , - 5297 , - 1030 , - 3451 , - 1296 , - 197 , - 154 , - 1167 , - 3236 , - 729 , - 4910 , - 4515 , - 5176 , - 1261 , - 4034 , - 2231 , - 1484 , - 1793 , - 3158 , - 5579 , - 3424 , - 2325 , - 2282 , - 3295 , - 5364 , - 2857 , - 1406 , - 1011 , - 1672 , - 3389 , - 530 , - 4359 , - 3612 , - 3921 , - 5286 , - 2075 , - 5552 , - 4453 , - 4410 , - 5423 , - 1860 , - 4985 , - 3534 , - 3139 , - 3800 , - 5517 , - 2658 , - 855 , - 108 , - 417 , - 1782 , - 4203 , - 2048 , - 949 , - 906 , - 1919 , - 3988 , - 1481 , - 30 , - 5267 , - 296 , - 2013 , - 4786 , - 2983 , - 2236 , - 2545 , - 3910 , - 699 , - 4176 , - 3077 , - 3034 , - 4047 , - 484 , - 3609 , - 2158 , - 1763 , - 2424 , - 4141 , - 1282 , - 5111 , - 4364 , - 4673 , - 406 , - 2827 , - 672 , - 5205 , - 5162 , - 543 , - 2612 , - 105 , - 4286 , - 3891 , - 4552 , - 637 , - 3410 , - 1607 , - 860 , - 1169 , - 2534 , - 4955 , - 2800 , - 1701 , - 1658 , - 2671 , - 4740 , - 2233 , - 782 , - 387 , - 1048 , - 2765 , - 5538 , - 3735 , - 2988 , - 3297 , - 4662 , - 1451 , - 4928 , - 3829 , - 3786 , - 4799 , - 1236 , - 4361 , - 2910 , - 2515 , - 3176 , - 4893 , - 2034 , - 231 , - 5116 , - 5425 , - 1158 , - 3579 , - 1424 , - 325 , - 282 , - 1295 , - 3364 , - 857 , - 5038 , - 4643 , - 5304 , - 1389 , - 4162 , - 2359 , - 1612 , - 1921 , - 3286 , - 75 , - 3552 , - 2453 , - 2410 , - 3423 , - 5492 , - 2985 , - 1534 , - 1139 , - 1800 , - 3517 , - 658 , - 4487 , - 3740 , - 4049 , - 5414 , - 2203 , - 48 , - 4581 , - 4538 , - 5551 , - 1988 , - 5113 , - 3662 , - 3267 , - 3928 , - 13 , - 2786 , - 983 , - 236 , - 545 , - 1910 , - 4331 , - 2176 , - 1077 , - 1034 , - 2047 , - 4116 , - 1609 , - 158 , - 5395 , - 424 , - 2141 , - 4914 , - 3111 , - 2364 , - 2673 , - 4038 , - 827 , - 4304 , - 3205 , - 3162 , - 4175 , - 612 , - 3737 , - 2286 , - 1891 , - 2552 , - 4269 , - 1410 , - 5239 , - 4492 , - 4801 , - 534 , - 2955 , - 800 , - 5333 , - 5290 , - 671 , - 2740 , - 233 , - 4414 , - 4019 , - 4680 , - 765 , - 3538 , - 1735 , - 988 , - 1297 , - 2662 , - 5083 , - 2928 , - 1829 , - 1786 , - 2799 , - 4868 , - 2361 , - 910 , - 515 , - 1176 , - 2893 , - 34 , - 3863 , - 3116 , - 3425 , - 4790 , - 1579 , - 5056 , - 3957 , - 3914 , - 4927 , - 1364 , - 4489 , - 3038 , - 2643 , - 3304 , - 5021 , - 2162 , - 359 , - 5244 , - 5553 , - 1286 , - 3707 , - 1552 , - 453 , - 410 , - 1423 , - 3492 , - 985 , - 5166 , - 4771 , - 5432 , - 1517 , - 4290 , - 2487 , - 1740 , - 2049 , - 3414 , - 203 , - 3680 , - 2581 , - 2538 , - 3551 , - 5620 , - 3113 , - 1662 , - 1267 , - 1928 , - 3645 , - 786 , - 4615 , - 3868 , - 4177 , - 5542 , - 2331 , - 176 , - 4709 , - 4666 , - 47 , - 2116 , - 5241 , - 3790 , - 3395 , - 4056 , - 141 , - 2914 , - 1111 , - 364 , - 673 , - 2038 , - 4459 , - 2304 , - 1205 , - 1162 , - 2175 , - 4244 , - 1737 , - 286 , - 5523 , - 552 , - 2269 , - 5042 , - 3239 , - 2492 , - 2801 , - 4166 , - 955 , - 4432 , - 3333 , - 3290 , - 4303 , - 740 , - 3865 , - 2414 , - 2019 , - 2680 , - 4397 , - 1538 , - 5367 , - 4620 , - 4929 , - 662 , - 3083 , - 928 , - 5461 , - 5418 , - 799 , - 2868 , - 361 , - 4542 , - 4147 , - 4808 , - 893 , - 3666 , - 1863 , - 1116 , - 1425 , - 2790 , - 5211 , - 3056 , - 1957 , - 1914 , - 2927 , - 4996 , - 2489 , - 1038 , - 643 , - 1304 , - 3021 , - 162 , - 3991 , - 3244 , - 3553 , - 4918 , - 1707 , - 5184 , - 4085 , - 4042 , - 5055 , - 1492 , - 4617 , - 3166 , - 2771 , - 3432 , - 5149 , - 2290 , - 487 , - 5372 , - 49 , - 1414 , - 3835 , - 1680 , - 581 , - 538 , - 1551 , - 3620 , - 1113 , - 5294 , - 4899 , - 5560 , - 1645 , - 4418 , - 2615 , - 1868 , - 2177 , - 3542 , - 331 , - 3808 , - 2709 , - 2666 , - 3679 , - 116 , - 3241 , - 1790 , - 1395 , - 2056 , - 3773 , - 914 , - 4743 , - 3996 , - 4305 , - 38 , - 2459 , - 304 , - 4837 , - 4794 , - 175 , - 2244 , - 5369 , - 3918 , - 3523 , - 4184 , - 269 , - 3042 , - 1239 , - 492 , - 801 , - 2166 , - 4587 , - 2432 , - 1333 , - 1290 , - 2303 , - 4372 , - 1865 , - 414 , - 19 , - 680 , - 2397 , - 5170 , - 3367 , - 2620 , - 2929 , - 4294 , - 1083 , - 4560 , - 3461 , - 3418 , - 4431 , - 868 , - 3993 , - 2542 , - 2147 , - 2808 , - 4525 , - 1666 , - 5495 , - 4748 , - 5057 , - 790 , - 3211 , - 1056 , - 5589 , - 5546 , - 927 , - 2996 , - 489 , - 4670 , - 4275 , - 4936 , - 1021 , - 3794 , - 1991 , - 1244 , - 1553 , - 2918 , - 5339 , - 3184 , - 2085 , - 2042 , - 3055 , - 5124 , - 2617 , - 1166 , - 771 , - 1432 , - 3149 , - 290 , - 4119 , - 3372 , - 3681 , - 5046 , - 1835 , - 5312 , - 4213 , - 4170 , - 5183 , - 1620 , - 4745 , - 3294 , - 2899 , - 3560 , - 5277 , - 2418 , - 615 , - 5500 , - 177 , - 1542 , - 3963 , - 1808 , - 709 , - 666 , - 1679 , - 3748 , - 1241 , - 5422 , - 5027 , - 56 , - 1773 , - 4546 , - 2743 , - 1996 , - 2305 , - 3670 , - 459 , - 3936 , - 2837 , - 2794 , - 3807 , - 244 , - 3369 , - 1918 , - 1523 , - 2184 , - 3901 , - 1042 , - 4871 , - 4124 , - 4433 , - 166 , - 2587 , - 432 , - 4965 , - 4922 , - 303 , - 2372 , - 5497 , - 4046 , - 3651 , - 4312 , - 397 , - 3170 , - 1367 , - 620 , - 929 , - 2294 , - 4715 , - 2560 , - 1461 , - 1418 , - 2431 , - 4500 , - 1993 , - 542 , - 147 , - 808 , - 2525 , - 5298 , - 3495 , - 2748 , - 3057 , - 4422 , - 1211 , - 4688 , - 3589 , - 3546 , - 4559 , - 996 , - 4121 , - 2670 , - 2275 , - 2936 , - 4653 , - 1794 , - 5623 , - 4876 , - 5185 , - 918 , - 3339 , - 1184 , - 85 , - 42 , - 1055 , - 3124 , - 617 , - 4798 , - 4403 , - 5064 , - 1149 , - 3922 , - 2119 , - 1372 , - 1681 , - 3046 , - 5467 , - 3312 , - 2213 , - 2170 , - 3183 , - 5252 , - 2745 , - 1294 , - 899 , - 1560 , - 3277 , - 418 , - 4247 , - 3500 , - 3809 , - 5174 , - 1963 , - 5440 , - 4341 , - 4298 , - 5311 , - 1748 , - 4873 , - 3422 , - 3027 , - 3688 , - 5405 , - 2546 , - 743 , - 5628 , - 305 , - 1670 , - 4091 , - 1936 , - 837 , - 794 , - 1807 , - 3876 , - 1369 , - 5550 , - 5155 , - 184 , - 1901 , - 4674 , - 2871 , - 2124 , - 2433 , - 3798 , - 587 , - 4064 , - 2965 , - 2922 , - 3935 , - 372 , - 3497 , - 2046 , - 1651 , - 2312 , - 4029 , - 1170 , - 4999 , - 4252 , - 4561 , - 294 , - 2715 , - 560 , - 5093 , - 5050 , - 431 , - 2500 , - 5625 , - 4174 , - 3779 , - 4440 , - 525 , - 3298 , - 1495 , - 748 , - 1057 , - 2422 , - 4843 , - 2688 , - 1589 , - 1546 , - 2559 , - 4628 , - 2121 , - 670 , - 275 , - 936 , - 2653 , - 5426 , - 3623 , - 2876 , - 3185 , - 4550 , - 1339 , - 4816 , - 3717 , - 3674 , - 4687 , - 1124 , - 4249 , - 2798 , - 2403 , - 3064 , - 4781 , - 1922 , - 119 , - 5004 , - 5313 , - 1046 , - 3467 , - 1312 , - 213 , - 170 , - 1183 , - 3252 , - 745 , - 4926 , - 4531 , - 5192 , - 1277 , - 4050 , - 2247 , - 1500 , - 1809 , - 3174 , - 5595 , - 3440 , - 2341 , - 2298 , - 3311 , - 5380 , - 2873 , - 1422 , - 1027 , - 1688 , - 3405 , - 546 , - 4375 , - 3628 , - 3937 , - 5302 , - 2091 , - 5568 , - 4469 , - 4426 , - 5439 , - 1876 , - 5001 , - 3550 , - 3155 , - 3816 , - 5533 , - 2674 , - 871 , - 124 , - 433 , - 1798 , - 4219 , - 2064 , - 965 , - 922 , - 1935 , - 4004 , - 1497 , - 46 , - 5283 , - 312 , - 2029 , - 4802 , - 2999 , - 2252 , - 2561 , - 3926 , - 715 , - 4192 , - 3093 , - 3050 , - 4063 , - 500 , - 3625 , - 2174 , - 1779 , - 2440 , - 4157 , - 1298 , - 5127 , - 4380 , - 4689 , - 422 , - 2843 , - 688 , - 5221 , - 5178 , - 559 , - 2628 , - 121 , - 4302 , - 3907 , - 4568 , - 653 , - 3426 , - 1623 , - 876 , - 1185 , - 2550 , - 4971 , - 2816 , - 1717 , - 1674 , - 2687 , - 4756 , - 2249 , - 798 , - 403 , - 1064 , - 2781 , - 5554 , - 3751 , - 3004 , - 3313 , - 4678 , - 1467 , - 4944 , - 3845 , - 3802 , - 4815 , - 1252 , - 4377 , - 2926 , - 2531 , - 3192 , - 4909 , - 2050 , - 247 , - 5132 , - 5441 , - 1174 , - 3595 , - 1440 , - 341 , - 298 , - 1311 , - 3380 , - 873 , - 5054 , - 4659 , - 5320 , - 1405 , - 4178 , - 2375 , - 1628 , - 1937 , - 3302 , - 91 , - 3568 , - 2469 , - 2426 , - 3439 , - 5508 , - 3001 , - 1550 , - 1155 , - 1816 , - 3533 , - 674 , - 4503 , - 3756 , - 4065 , - 5430 , - 2219 , - 64 , - 4597 , - 4554 , - 5567 , - 2004 , - 5129 , - 3678 , - 3283 , - 3944 , - 29 , - 2802 , - 999 , - 252 , - 561 , - 1926 , - 4347 , - 2192 , - 1093 , - 1050 , - 2063 , - 4132 , - 1625 , - 174 , - 5411 , - 440 , - 2157 , - 4930 , - 3127 , - 2380 , - 2689 , - 4054 , - 843 , - 4320 , - 3221 , - 3178 , - 4191 , - 628 , - 3753 , - 2302 , - 1907 , - 2568 , - 4285 , - 1426 , - 5255 , - 4508 , - 4817 , - 550 , - 2971 , - 816 , - 5349 , - 5306 , - 687 , - 2756 , - 249 , - 4430 , - 4035 , - 4696 , - 781 , - 3554 , - 1751 , - 1004 , - 1313 , - 2678 , - 5099 , - 2944 , - 1845 , - 1802 , - 2815 , - 4884 , - 2377 , - 926 , - 531 , - 1192 , - 2909 , - 50 , - 3879 , - 3132 , - 3441 , - 4806 , - 1595 , - 5072 , - 3973 , - 3930 , - 4943 , - 1380 , - 4505 , - 3054 , - 2659 , - 3320 , - 5037 , - 2178 , - 375 , - 5260 , - 5569 , - 1302 , - 3723 , - 1568 , - 469 , - 426 , - 1439 , - 3508 , - 1001 , - 5182 , - 4787 , - 5448 , - 1533 , - 4306 , - 2503 , - 1756 , - 2065 , - 3430 , - 219 , - 3696 , - 2597 , - 2554 , - 3567 , - 4 , - 3129 , - 1678 , - 1283 , - 1944 , - 3661 , - 802 , - 4631 , - 3884 , - 4193 , - 5558 , - 2347 , - 192 , - 4725 , - 4682 , - 63 , - 2132 , - 5257 , - 3806 , - 3411 , - 4072 , - 157 , - 2930 , - 1127 , - 380 , - 689 , - 2054 , - 4475 , - 2320 , - 1221 , - 1178 , - 2191 , - 4260 , - 1753 , - 302 , - 5539 , - 568 , - 2285 , - 5058 , - 3255 , - 2508 , - 2817 , - 4182 , - 971 , - 4448 , - 3349 , - 3306 , - 4319 , - 756 , - 3881 , - 2430 , - 2035 , - 2696 , - 4413 , - 1554 , - 5383 , - 4636 , - 4945 , - 678 , - 3099 , - 944 , - 5477 , - 5434 , - 815 , - 2884 , - 377 , - 4558 , - 4163 , - 4824 , - 909 , - 3682 , - 1879 , - 1132 , - 1441 , - 2806 , - 5227 , - 3072 , - 1973 , - 1930 , - 2943 , - 5012 , - 2505 , - 1054 , - 659 , - 1320 , - 3037 , - 178 , - 4007 , - 3260 , - 3569 , - 4934 , - 1723 , - 5200 , - 4101 , - 4058 , - 5071 , - 1508 , - 4633 , - 3182 , - 2787 , - 3448 , - 5165 , - 2306 , - 503 , - 5388 , - 65 , - 1430 , - 3851 , - 1696 , - 597 , - 554 , - 1567 , - 3636 , - 1129 , - 5310 , - 4915 , - 5576 , - 1661 , - 4434 , - 2631 , - 1884 , - 2193 , - 3558 , - 347 , - 3824 , - 2725 , - 2682 , - 3695 , - 132 , - 3257 , - 1806 , - 1411 , - 2072 , - 3789 , - 930 , - 4759 , - 4012 , - 4321 , - 54 , - 2475 , - 320 , - 4853 , - 4810 , - 191 , - 2260 , - 5385 , - 3934 , - 3539 , - 4200 , - 285 , - 3058 , - 1255 , - 508 , - 817 , - 2182 , - 4603 , - 2448 , - 1349 , - 1306 , - 2319 , - 4388 , - 1881 , - 430 , - 35 , - 696 , - 2413 , - 5186 , - 3383 , - 2636 , - 2945 , - 4310 , - 1099 , - 4576 , - 3477 , - 3434 , - 4447 , - 884 , - 4009 , - 2558 , - 2163 , - 2824 , - 4541 , - 1682 , - 5511 , - 4764 , - 5073 , - 806 , - 3227 , - 1072 , - 5605 , - 5562 , - 943 , - 3012 , - 505 , - 4686 , - 4291 , - 4952 , - 1037 , - 3810 , - 2007 , - 1260 , - 1569 , - 2934 , - 5355 , - 3200 , - 2101 , - 2058 , - 3071 , - 5140 , - 2633 , - 1182 , - 787 , - 1448 , - 3165 , - 306 , - 4135 , - 3388 , - 3697 , - 5062 , - 1851 , - 5328 , - 4229 , - 4186 , - 5199 , - 1636 , - 4761 , - 3310 , - 2915 , - 3576 , - 5293 , - 2434 , - 631 , - 5516 , - 193 , - 1558 , - 3979 , - 1824 , - 725 , - 682 , - 1695 , - 3764 , - 1257 , - 5438 , - 5043 , - 72 , - 1789 , - 4562 , - 2759 , - 2012 , - 2321 , - 3686 , - 475 , - 3952 , - 2853 , - 2810 , - 3823 , - 260 , - 3385 , - 1934 , - 1539 , - 2200 , - 3917 , - 1058 , - 4887 , - 4140 , - 4449 , - 182 , - 2603 , - 448 , - 4981 , - 4938 , - 319 , - 2388 , - 5513 , - 4062 , - 3667 , - 4328 , - 413 , - 3186 , - 1383 , - 636 , - 945 , - 2310 , - 4731 , - 2576 , - 1477 , - 1434 , - 2447 , - 4516 , - 2009 , - 558 , - 163 , - 824 , - 2541 , - 5314 , - 3511 , - 2764 , - 3073 , - 4438 , - 1227 , - 4704 , - 3605 , - 3562 , - 4575 , - 1012 , - 4137 , - 2686 , - 2291 , - 2952 , - 4669 , - 1810 , - 7 , - 4892 , - 5201 , - 934 , - 3355 , - 1200 , - 101 , - 58 , - 1071 , - 3140 , - 633 , - 4814 , - 4419 , - 5080 , - 1165 , - 3938 , - 2135 , - 1388 , - 1697 , - 3062 , - 5483 , - 3328 , - 2229 , - 2186 , - 3199 , - 5268 , - 2761 , - 1310 , - 915 , - 1576 , - 3293 , - 434 , - 4263 , - 3516 , - 3825 , - 5190 , - 1979 , - 5456 , - 4357 , - 4314 , - 5327 , - 1764 , - 4889 , - 3438 , - 3043 , - 3704 , - 5421 , - 2562 , - 759 , - 12 , - 321 , - 1686 , - 4107 , - 1952 , - 853 , - 810 , - 1823 , - 3892 , - 1385 , - 5566 , - 5171 , - 200 , - 1917 , - 4690 , - 2887 , - 2140 , - 2449 , - 3814 , - 603 , - 4080 , - 2981 , - 2938 , - 3951 , - 388 , - 3513 , - 2062 , - 1667 , - 2328 , - 4045 , - 1186 , - 5015 , - 4268 , - 4577 , - 310 , - 2731 , - 576 , - 5109 , - 5066 , - 447 , - 2516 , - 9 , - 4190 , - 3795 , - 4456 , - 541 , - 3314 , - 1511 , - 764 , - 1073 , - 2438 , - 4859 , - 2704 , - 1605 , - 1562 , - 2575 , - 4644 , - 2137 , - 686 , - 291 , - 952 , - 2669 , - 5442 , - 3639 , - 2892 , - 3201 , - 4566 , - 1355 , - 4832 , - 3733 , - 3690 , - 4703 , - 1140 , - 4265 , - 2814 , - 2419 , - 3080 , - 4797 , - 1938 , - 135 , - 5020 , - 5329 , - 1062 , - 3483 , - 1328 , - 229 , - 186 , - 1199 , - 3268 , - 761 , - 4942 , - 4547 , - 5208 , - 1293 , - 4066 , - 2263 , - 1516 , - 1825 , - 3190 , - 5611 , - 3456 , - 2357 , - 2314 , - 3327 , - 5396 , - 2889 , - 1438 , - 1043 , - 1704 , - 3421 , - 562 , - 4391 , - 3644 , - 3953 , - 5318 , - 2107 , - 5584 , - 4485 , - 4442 , - 5455 , - 1892 , - 5017 , - 3566 , - 3171 , - 3832 , - 5549 , - 2690 , - 887 , - 140 , - 449 , - 1814 , - 4235 , - 2080 , - 981 , - 938 , - 1951 , - 4020 , - 1513 , - 62 , - 5299 , - 328 , - 2045 , - 4818 , - 3015 , - 2268 , - 2577 , - 3942 , - 731 , - 4208 , - 3109 , - 3066 , - 4079 , - 516 , - 3641 , - 2190 , - 1795 , - 2456 , - 4173 , - 1314 , - 5143 , - 4396 , - 4705 , - 438 , - 2859 , - 704 , - 5237 , - 5194 , - 575 , - 2644 , - 137 , - 4318 , - 3923 , - 4584 , - 669 , - 3442 , - 1639 , - 892 , - 1201 , - 2566 , - 4987 , - 2832 , - 1733 , - 1690 , - 2703 , - 4772 , - 2265 , - 814 , - 419 , - 1080 , - 2797 , - 5570 , - 3767 , - 3020 , - 3329 , - 4694 , - 1483 , - 4960 , - 3861 , - 3818 , - 4831 , - 1268 , - 4393 , - 2942 , - 2547 , - 3208 , - 4925 , - 2066 , - 263 , - 5148 , - 5457 , - 1190 , - 3611 , - 1456 , - 357 , - 314 , - 1327 , - 3396 , - 889 , - 5070 , - 4675 , - 5336 , - 1421 , - 4194 , - 2391 , - 1644 , - 1953 , - 3318 , - 107 , - 3584 , - 2485 , - 2442 , - 3455 , - 5524 , - 3017 , - 1566 , - 1171 , - 1832 , - 3549 , - 690 , - 4519 , - 3772 , - 4081 , - 5446 , - 2235 , - 80 , - 4613 , - 4570 , - 5583 , - 2020 , - 5145 , - 3694 , - 3299 , - 3960 , - 45 , - 2818 , - 1015 , - 268 , - 577 , - 1942 , - 4363 , - 2208 , - 1109 , - 1066 , - 2079 , - 4148 , - 1641 , - 190 , - 5427 , - 456 , - 2173 , - 4946 , - 3143 , - 2396 , - 2705 , - 4070 , - 859 , - 4336 , - 3237 , - 3194 , - 4207 , - 644 , - 3769 , - 2318 , - 1923 , - 2584 , - 4301 , - 1442 , - 5271 , - 4524 , - 4833 , - 566 , - 2987 , - 832 , - 5365 , - 5322 , - 703 , - 2772 , - 265 , - 4446 , - 4051 , - 4712 , - 797 , - 3570 , - 1767 , - 1020 , - 1329 , - 2694 , - 5115 , - 2960 , - 1861 , - 1818 , - 2831 , - 4900 , - 2393 , - 942 , - 547 , - 1208 , - 2925 , - 66 , - 3895 , - 3148 , - 3457 , - 4822 , - 1611 , - 5088 , - 3989 , - 3946 , - 4959 , - 1396 , - 4521 , - 3070 , - 2675 , - 3336 , - 5053 , - 2194 , - 391 , - 5276 , - 5585 , - 1318 , - 3739 , - 1584 , - 485 , - 442 , - 1455 , - 3524 , - 1017 , - 5198 , - 4803 , - 5464 , - 1549 , - 4322 , - 2519 , - 1772 , - 2081 , - 3446 , - 235 , - 3712 , - 2613 , - 2570 , - 3583 , - 20 , - 3145 , - 1694 , - 1299 , - 1960 , - 3677 , - 818 , - 4647 , - 3900 , - 4209 , - 5574 , - 2363 , - 208 , - 4741 , - 4698 , - 79 , - 2148 , - 5273 , - 3822 , - 3427 , - 4088 , - 173 , - 2946 , - 1143 , - 396 , - 705 , - 2070 , - 4491 , - 2336 , - 1237 , - 1194 , - 2207 , - 4276 , - 1769 , - 318 , - 5555 , - 584 , - 2301 , - 5074 , - 3271 , - 2524 , - 2833 , - 4198 , - 987 , - 4464 , - 3365 , - 3322 , - 4335 , - 772 , - 3897 , - 2446 , - 2051 , - 2712 , - 4429 , - 1570 , - 5399 , - 4652 , - 4961 , - 694 , - 3115 , - 960 , - 5493 , - 5450 , - 831 , - 2900 , - 393 , - 4574 , - 4179 , - 4840 , - 925 , - 3698 , - 1895 , - 1148 , - 1457 , - 2822 , - 5243 , - 3088 , - 1989 , - 1946 , - 2959 , - 5028 , - 2521 , - 1070 , - 675 , - 1336 , - 3053 , - 194 , - 4023 , - 3276 , - 3585 , - 4950 , - 1739 , - 5216 , - 4117 , - 4074 , - 5087 , - 1524 , - 4649 , - 3198 , - 2803 , - 3464 , - 5181 , - 2322 , - 519 , - 5404 , - 81 , - 1446 , - 3867 , - 1712 , - 613 , - 570 , - 1583 , - 3652 , - 1145 , - 5326 , - 4931 , - 5592 , - 1677 , - 4450 , - 2647 , - 1900 , - 2209 , - 3574 , - 363 , - 3840 , - 2741 , - 2698 , - 3711 , - 148 , - 3273 , - 1822 , - 1427 , - 2088 , - 3805 , - 946 , - 4775 , - 4028 , - 4337 , - 70 , - 2491 , - 336 , - 4869 , - 4826 , - 207 , - 2276 , - 5401 , - 3950 , - 3555 , - 4216 , - 301 , - 3074 , - 1271 , - 524 , - 833 , - 2198 , - 4619 , - 2464 , - 1365 , - 1322 , - 2335 , - 4404 , - 1897 , - 446 , - 51 , - 712 , - 2429 , - 5202 , - 3399 , - 2652 , - 2961 , - 4326 , - 1115 , - 4592 , - 3493 , - 3450 , - 4463 , - 900 , - 4025 , - 2574 , - 2179 , - 2840 , - 4557 , - 1698 , - 5527 , - 4780 , - 5089 , - 822 , - 3243 , - 1088 , - 5621 , - 5578 , - 959 , - 3028 , - 521 , - 4702 , - 4307 , - 4968 , - 1053 , - 3826 , - 2023 , - 1276 , - 1585 , - 2950 , - 5371 , - 3216 , - 2117 , - 2074 , - 3087 , - 5156 , - 2649 , - 1198 , - 803 , - 1464 , - 3181 , - 322 , - 4151 , - 3404 , - 3713 , - 5078 , - 1867 , - 5344 , - 4245 , - 4202 , - 5215 , - 1652 , - 4777 , - 3326 , - 2931 , - 3592 , - 5309 , - 2450 , - 647 , - 5532 , - 209 , - 1574 , - 3995 , - 1840 , - 741 , - 698 , - 1711 , - 3780 , - 1273 , - 5454 , - 5059 , - 88 , - 1805 , - 4578 , - 2775 , - 2028 , - 2337 , - 3702 , - 491 , - 3968 , - 2869 , - 2826 , - 3839 , - 276 , - 3401 , - 1950 , - 1555 , - 2216 , - 3933 , - 1074 , - 4903 , - 4156 , - 4465 , - 198 , - 2619 , - 464 , - 4997 , - 4954 , - 335 , - 2404 , - 5529 , - 4078 , - 3683 , - 4344 , - 429 , - 3202 , - 1399 , - 652 , - 961 , - 2326 , - 4747 , - 2592 , - 1493 , - 1450 , - 2463 , - 4532 , - 2025 , - 574 , - 179 , - 840 , - 2557 , - 5330 , - 3527 , - 2780 , - 3089 , - 4454 , - 1243 , - 4720 , - 3621 , - 3578 , - 4591 , - 1028 , - 4153 , - 2702 , - 2307 , - 2968 , - 4685 , - 1826 , - 23 , - 4908 , - 5217 , - 950 , - 3371 , - 1216 , - 117 , - 74 , - 1087 , - 3156 , - 649 , - 4830 , - 4435 , - 5096 , - 1181 , - 3954 , - 2151 , - 1404 , - 1713 , - 3078 , - 5499 , - 3344 , - 2245 , - 2202 , - 3215 , - 5284 , - 2777 , - 1326 , - 931 , - 1592 , - 3309 , - 450 , - 4279 , - 3532 , - 3841 , - 5206 , - 1995 , - 5472 , - 4373 , - 4330 , - 5343 , - 1780 , - 4905 , - 3454 , - 3059 , - 3720 , - 5437 , - 2578 , - 775 , - 28 , - 337 , - 1702 , - 4123 , - 1968 , - 869 , - 826 , - 1839 , - 3908 , - 1401 , - 5582 , - 5187 , - 216 , - 1933 , - 4706 , - 2903 , - 2156 , - 2465 , - 3830 , - 619 , - 4096 , - 2997 , - 2954 , - 3967 , - 404 , - 3529 , - 2078 , - 1683 , - 2344 , - 4061 , - 1202 , - 5031 , - 4284 , - 4593 , - 326 , - 2747 , - 592 , - 5125 , - 5082 , - 463 , - 2532 , - 25 , - 4206 , - 3811 , - 4472 , - 557 , - 3330 , - 1527 , - 780 , - 1089 , - 2454 , - 4875 , - 2720 , - 1621 , - 1578 , - 2591 , - 4660 , - 2153 , - 702 , - 307 , - 968 , - 2685 , - 5458 , - 3655 , - 2908 , - 3217 , - 4582 , - 1371 , - 4848 , - 3749 , - 3706 , - 4719 , - 1156 , - 4281 , - 2830 , - 2435 , - 3096 , - 4813 , - 1954 , - 151 , - 5036 , - 5345 , - 1078 , - 3499 , - 1344 , - 245 , - 202 , - 1215 , - 3284 , - 777 , - 4958 , - 4563 , - 5224 , - 1309 , - 4082 , - 2279 , - 1532 , - 1841 , - 3206 , - 5627 , - 3472 , - 2373 , - 2330 , - 3343 , - 5412 , - 2905 , - 1454 , - 1059 , - 1720 , - 3437 , - 578 , - 4407 , - 3660 , - 3969 , - 5334 , - 2123 , - 5600 , - 4501 , - 4458 , - 5471 , - 1908 , - 5033 , - 3582 , - 3187 , - 3848 , - 5565 , - 2706 , - 903 , - 156 , - 465 , - 1830 , - 4251 , - 2096 , - 997 , - 954 , - 1967 , - 4036 , - 1529 , - 78 , - 5315 , - 344 , - 2061 , - 4834 , - 3031 , - 2284 , - 2593 , - 3958 , - 747 , - 4224 , - 3125 , - 3082 , - 4095 , - 532 , - 3657 , - 2206 , - 1811 , - 2472 , - 4189 , - 1330 , - 5159 , - 4412 , - 4721 , - 454 , - 2875 , - 720 , - 5253 , - 5210 , - 591 , - 2660 , - 153 , - 4334 , - 3939 , - 4600 , - 685 , - 3458 , - 1655 , - 908 , - 1217 , - 2582 , - 5003 , - 2848 , - 1749 , - 1706 , - 2719 , - 4788 , - 2281 , - 830 , - 435 , - 1096 , - 2813 , - 5586 , - 3783 , - 3036 , - 3345 , - 4710 , - 1499 , - 4976 , - 3877 , - 3834 , - 4847 , - 1284 , - 4409 , - 2958 , - 2563 , - 3224 , - 4941 , - 2082 , - 279 , - 5164 , - 5473 , - 1206 , - 3627 , - 1472 , - 373 , - 330 , - 1343 , - 3412 , - 905 , - 5086 , - 4691 , - 5352 , - 1437 , - 4210 , - 2407 , - 1660 , - 1969 , - 3334 , - 123 , - 3600 , - 2501 , - 2458 , - 3471 , - 5540 , - 3033 , - 1582 , - 1187 , - 1848 , - 3565 , - 706 , - 4535 , - 3788 , - 4097 , - 5462 , - 2251 , - 96 , - 4629 , - 4586 , - 5599 , - 2036 , - 5161 , - 3710 , - 3315 , - 3976 , - 61 , - 2834 , - 1031 , - 284 , - 593 , - 1958 , - 4379 , - 2224 , - 1125 , - 1082 , - 2095 , - 4164 , - 1657 , - 206 , - 5443 , - 472 , - 2189 , - 4962 , - 3159 , - 2412 , - 2721 , - 4086 , - 875 , - 4352 , - 3253 , - 3210 , - 4223 , - 660 , - 3785 , - 2334 , - 1939 , - 2600 , - 4317 , - 1458 , - 5287 , - 4540 , - 4849 , - 582 , - 3003 , - 848 , - 5381 , - 5338 , - 719 , - 2788 , - 281 , - 4462 , - 4067 , - 4728 , - 813 , - 3586 , - 1783 , - 1036 , - 1345 , - 2710 , - 5131 , - 2976 , - 1877 , - 1834 , - 2847 , - 4916 , - 2409 , - 958 , - 563 , - 1224 , - 2941 , - 82 , - 3911 , - 3164 , - 3473 , - 4838 , - 1627 , - 5104 , - 4005 , - 3962 , - 4975 , - 1412 , - 4537 , - 3086 , - 2691 , - 3352 , - 5069 , - 2210 , - 407 , - 5292 , - 5601 , - 1334 , - 3755 , - 1600 , - 501 , - 458 , - 1471 , - 3540 , - 1033 , - 5214 , - 4819 , - 5480 , - 1565 , - 4338 , - 2535 , - 1788 , - 2097 , - 3462 , - 251 , - 3728 , - 2629 , - 2586 , - 3599 , - 36 , - 3161 , - 1710 , - 1315 , - 1976 , - 3693 , - 834 , - 4663 , - 3916 , - 4225 , - 5590 , - 2379 , - 224 , - 4757 , - 4714 , - 95 , - 2164 , - 5289 , - 3838 , - 3443 , - 4104 , - 189 , - 2962 , - 1159 , - 412 , - 721 , - 2086 , - 4507 , - 2352 , - 1253 , - 1210 , - 2223 , - 4292 , - 1785 , - 334 , - 5571 , - 600 , - 2317 , - 5090 , - 3287 , - 2540 , - 2849 , - 4214 , - 1003 , - 4480 , - 3381 , - 3338 , - 4351 , - 788 , - 3913 , - 2462 , - 2067 , - 2728 , - 4445 , - 1586 , - 5415 , - 4668 , - 4977 , - 710 , - 3131 , - 976 , - 5509 , - 5466 , - 847 , - 2916 , - 409 , - 4590 , - 4195 , - 4856 , - 941 , - 3714 , - 1911 , - 1164 , - 1473 , - 2838 , - 5259 , - 3104 , - 2005 , - 1962 , - 2975 , - 5044 , - 2537 , - 1086 , - 691 , - 1352 , - 3069 , - 210 , - 4039 , - 3292 , - 3601 , - 4966 , - 1755 , - 5232 , - 4133 , - 4090 , - 5103 , - 1540 , - 4665 , - 3214 , - 2819 , - 3480 , - 5197 , - 2338 , - 535 , - 5420 , - 97 , - 1462 , - 3883 , - 1728 , - 629 , - 586 , - 1599 , - 3668 , - 1161 , - 5342 , - 4947 , - 5608 , - 1693 , - 4466 , - 2663 , - 1916 , - 2225 , - 3590 , - 379 , - 3856 , - 2757 , - 2714 , - 3727 , - 164 , - 3289 , - 1838 , - 1443 , - 2104 , - 3821 , - 962 , - 4791 , - 4044 , - 4353 , - 86 , - 2507 , - 352 , - 4885 , - 4842 , - 223 , - 2292 , - 5417 , - 3966 , - 3571 , - 4232 , - 317 , - 3090 , - 1287 , - 540 , - 849 , - 2214 , - 4635 , - 2480 , - 1381 , - 1338 , - 2351 , - 4420 , - 1913 , - 462 , - 67 , - 728 , - 2445 , - 5218 , - 3415 , - 2668 , - 2977 , - 4342 , - 1131 , - 4608 , - 3509 , - 3466 , - 4479 , - 916 , - 4041 , - 2590 , - 2195 , - 2856 , - 4573 , - 1714 , - 5543 , - 4796 , - 5105 , - 838 , - 3259 , - 1104 , - 5 , - 5594 , - 975 , - 3044 , - 537 , - 4718 , - 4323 , - 4984 , - 1069 , - 3842 , - 2039 , - 1292 , - 1601 , - 2966 , - 5387 , - 3232 , - 2133 , - 2090 , - 3103 , - 5172 , - 2665 , - 1214 , - 819 , - 1480 , - 3197 , - 338 , - 4167 , - 3420 , - 3729 , - 5094 , - 1883 , - 5360 , - 4261 , - 4218 , - 5231 , - 1668 , - 4793 , - 3342 , - 2947 , - 3608 , - 5325 , - 2466 , - 663 , - 5548 , - 225 , - 1590 , - 4011 , - 1856 , - 757 , - 714 , - 1727 , - 3796 , - 1289 , - 5470 , - 5075 , - 104 , - 1821 , - 4594 , - 2791 , - 2044 , - 2353 , - 3718 , - 507 , - 3984 , - 2885 , - 2842 , - 3855 , - 292 , - 3417 , - 1966 , - 1571 , - 2232 , - 3949 , - 1090 , - 4919 , - 4172 , - 4481 , - 214 , - 2635 , - 480 , - 5013 , - 4970 , - 351 , - 2420 , - 5545 , - 4094 , - 3699 , - 4360 , - 445 , - 3218 , - 1415 , - 668 , - 977 , - 2342 , - 4763 , - 2608 , - 1509 , - 1466 , - 2479 , - 4548 , - 2041 , - 590 , - 195 , - 856 , - 2573 , - 5346 , - 3543 , - 2796 , - 3105 , - 4470 , - 1259 , - 4736 , - 3637 , - 3594 , - 4607 , - 1044 , - 4169 , - 2718 , - 2323 , - 2984 , - 4701 , - 1842 , - 39 , - 4924 , - 5233 , - 966 , - 3387 , - 1232 , - 133 , - 90 , - 1103 , - 3172 , - 665 , - 4846 , - 4451 , - 5112 , - 1197 , - 3970 , - 2167 , - 1420 , - 1729 , - 3094 , - 5515 , - 3360 , - 2261 , - 2218 , - 3231 , - 5300 , - 2793 , - 1342 , - 947 , - 1608 , - 3325 , - 466 , - 4295 , - 3548 , - 3857 , - 5222 , - 2011 , - 5488 , - 4389 , - 4346 , - 5359 , - 1796 , - 4921 , - 3470 , - 3075 , - 3736 , - 5453 , - 2594 , - 791 , - 44 , - 353 , - 1718 , - 4139 , - 1984 , - 885 , - 842 , - 1855 , - 3924 , - 1417 , - 5598 , - 5203 , - 232 , - 1949 , - 4722 , - 2919 , - 2172 , - 2481 , - 3846 , - 635 , - 4112 , - 3013 , - 2970 , - 3983 , - 420 , - 3545 , - 2094 , - 1699 , - 2360 , - 4077 , - 1218 , - 5047 , - 4300 , - 4609 , - 342 , - 2763 , - 608 , - 5141 , - 5098 , - 479 , - 2548 , - 41 , - 4222 , - 3827 , - 4488 , - 573 , - 3346 , - 1543 , - 796 , - 1105 , - 2470 , - 4891 , - 2736 , - 1637 , - 1594 , - 2607 , - 4676 , - 2169 , - 718 , - 323 , - 984 , - 2701 , - 5474 , - 3671 , - 2924 , - 3233 , - 4598 , - 1387 , - 4864 , - 3765 , - 3722 , - 4735 , - 1172 , - 4297 , - 2846 , - 2451 , - 3112 , - 4829 , - 1970 , - 167 , - 5052 , - 5361 , - 1094 , - 3515 , - 1360 , - 261 , - 218 , - 1231 , - 3300 , - 793 , - 4974 , - 4579 , - 5240 , - 1325 , - 4098 , - 2295 , - 1548 , - 1857 , - 3222 , - 11 , - 3488 , - 2389 , - 2346 , - 3359 , - 5428 , - 2921 , - 1470 , - 1075 , - 1736 , - 3453 , - 594 , - 4423 , - 3676 , - 3985 , - 5350 , - 2139 , - 5616 , - 4517 , - 4474 , - 5487 , - 1924 , - 5049 , - 3598 , - 3203 , - 3864 , - 5581 , - 2722 , - 919 , - 172 , - 481 , - 1846 , - 4267 , - 2112 , - 1013 , - 970 , - 1983 , - 4052 , - 1545 , - 94 , - 5331 , - 360 , - 2077 , - 4850 , - 3047 , - 2300 , - 2609 , - 3974 , - 763 , - 4240 , - 3141 , - 3098 , - 4111 , - 548 , - 3673 , - 2222 , - 1827 , - 2488 , - 4205 , - 1346 , - 5175 , - 4428 , - 4737 , - 470 , - 2891 , - 736 , - 5269 , - 5226 , - 607 , - 2676 , - 169 , - 4350 , - 3955 , - 4616 , - 701 , - 3474 , - 1671 , - 924 , - 1233 , - 2598 , - 5019 , - 2864 , - 1765 , - 1722 , - 2735 , - 4804 , - 2297 , - 846 , - 451 , - 1112 , - 2829 , - 5602 , - 3799 , - 3052 , - 3361 , - 4726 , - 1515 , - 4992 , - 3893 , - 3850 , - 4863 , - 1300 , - 4425 , - 2974 , - 2579 , - 3240 , - 4957 , - 2098 , - 295 , - 5180 , - 5489 , - 1222 , - 3643 , - 1488 , - 389 , - 346 , - 1359 , - 3428 , - 921 , - 5102 , - 4707 , - 5368 , - 1453 , - 4226 , - 2423 , - 1676 , - 1985 , - 3350 , - 139 , - 3616 , - 2517 , - 2474 , - 3487 , - 5556 , - 3049 , - 1598 , - 1203 , - 1864 , - 3581 , - 722 , - 4551 , - 3804 , - 4113 , - 5478 , - 2267 , - 112 , - 4645 , - 4602 , - 5615 , - 2052 , - 5177 , - 3726 , - 3331 , - 3992 , - 77 , - 2850 , - 1047 , - 300 , - 609 , - 1974 , - 4395 , - 2240 , - 1141 , - 1098 , - 2111 , - 4180 , - 1673 , - 222 , - 5459 , - 488 , - 2205 , - 4978 , - 3175 , - 2428 , - 2737 , - 4102 , - 891 , - 4368 , - 3269 , - 3226 , - 4239 , - 676 , - 3801 , - 2350 , - 1955 , - 2616 , - 4333 , - 1474 , - 5303 , - 4556 , - 4865 , - 598 , - 3019 , - 864 , - 5397 , - 5354 , - 735 , - 2804 , - 297 , - 4478 , - 4083 , - 4744 , - 829 , - 3602 , - 1799 , - 1052 , - 1361 , - 2726 , - 5147 , - 2992 , - 1893 , - 1850 , - 2863 , - 4932 , - 2425 , - 974 , - 579 , - 1240 , - 2957 , - 98 , - 3927 , - 3180 , - 3489 , - 4854 , - 1643 , - 5120 , - 4021 , - 3978 , - 4991 , - 1428 , - 4553 , - 3102 , - 2707 , - 3368 , - 5085 , - 2226 , - 423 , - 5308 , - 5617 , - 1350 , - 3771 , - 1616 , - 517 , - 474 , - 1487 , - 3556 , - 1049 , - 5230 , - 4835 , - 5496 , - 1581 , - 4354 , - 2551 , - 1804 , - 2113 , - 3478 , - 267 , - 3744 , - 2645 , - 2602 , - 3615 , - 52 , - 3177 , - 1726 , - 1331 , - 1992 , - 3709 , - 850 , - 4679 , - 3932 , - 4241 , - 5606 , - 2395 , - 240 , - 4773 , - 4730 , - 111 , - 2180 , - 5305 , - 3854 , - 3459 , - 4120 , - 205 , - 2978 , - 1175 , - 428 , - 737 , - 2102 , - 4523 , - 2368 , - 1269 , - 1226 , - 2239 , - 4308 , - 1801 , - 350 , - 5587 , - 616 , - 2333 , - 5106 , - 3303 , - 2556 , - 2865 , - 4230 , - 1019 , - 4496 , - 3397 , - 3354 , - 4367 , - 804 , - 3929 , - 2478 , - 2083 , - 2744 , - 4461 , - 1602 , - 5431 , - 4684 , - 4993 , - 726 , - 3147 , - 992 , - 5525 , - 5482 , - 863 , - 2932 , - 425 , - 4606 , - 4211 , - 4872 , - 957 , - 3730 , - 1927 , - 1180 , - 1489 , - 2854 , - 5275 , - 3120 , - 2021 , - 1978 , - 2991 , - 5060 , - 2553 , - 1102 , - 707 , - 1368 , - 3085 , - 226 , - 4055 , - 3308 , - 3617 , - 4982 , - 1771 , - 5248 , - 4149 , - 4106 , - 5119 , - 1556 , - 4681 , - 3230 , - 2835 , - 3496 , - 5213 , - 2354 , - 551 , - 5436 , - 113 , - 1478 , - 3899 , - 1744 , - 645 , - 602 , - 1615 , - 3684 , - 1177 , - 5358 , - 4963 , - 5624 , - 1709 , - 4482 , - 2679 , - 1932 , - 2241 , - 3606 , - 395 , - 3872 , - 2773 , - 2730 , - 3743 , - 180 , - 3305 , - 1854 , - 1459 , - 2120 , - 3837 , - 978 , - 4807 , - 4060 , - 4369 , - 102 , - 2523 , - 368 , - 4901 , - 4858 , - 239 , - 2308 , - 5433 , - 3982 , - 3587 , - 4248 , - 333 , - 3106 , - 1303 , - 556 , - 865 , - 2230 , - 4651 , - 2496 , - 1397 , - 1354 , - 2367 , - 4436 , - 1929 , - 478 , - 83 , - 744 , - 2461 , - 5234 , - 3431 , - 2684 , - 2993 , - 4358 , - 1147 , - 4624 , - 3525 , - 3482 , - 4495 , - 932 , - 4057 , - 2606 , - 2211 , - 2872 , - 4589 , - 1730 , - 5559 , - 4812 , - 5121 , - 854 , - 3275 , - 1120 , - 21 , - 5610 , - 991 , - 3060 , - 553 , - 4734 , - 4339 , - 5000 , - 1085 , - 3858 , - 2055 , - 1308 , - 1617 , - 2982 , - 5403 , - 3248 , - 2149 , - 2106 , - 3119 , - 5188 , - 2681 , - 1230 , - 835 , - 1496 , - 3213 , - 354 , - 4183 , - 3436 , - 3745 , - 5110 , - 1899 , - 5376 , - 4277 , - 4234 , - 5247 , - 1684 , - 4809 , - 3358 , - 2963 , - 3624 , - 5341 , - 2482 , - 679 , - 5564 , - 241 , - 1606 , - 4027 , - 1872 , - 773 , - 730 , - 1743 , - 3812 , - 1305 , - 5486 , - 5091 , - 120 , - 1837 , - 4610 , - 2807 , - 2060 , - 2369 , - 3734 , - 523 , - 4000 , - 2901 , - 2858 , - 3871 , - 308 , - 3433 , - 1982 , - 1587 , - 2248 , - 3965 , - 1106 , - 4935 , - 4188 , - 4497 , - 230 , - 2651 , - 496 , - 5029 , - 4986 , - 367 , - 2436 , - 5561 , - 4110 , - 3715 , - 4376 , - 461 , - 3234 , - 1431 , - 684 , - 993 , - 2358 , - 4779 , - 2624 , - 1525 , - 1482 , - 2495 , - 4564 , - 2057 , - 606 , - 211 , - 872 , - 2589 , - 5362 , - 3559 , - 2812 , - 3121 , - 4486 , - 1275 , - 4752 , - 3653 , - 3610 , - 4623 , - 1060 , - 4185 , - 2734 , - 2339 , - 3000 , - 4717 , - 1858 , - 55 , - 4940 , - 5249 , - 982 , - 3403 , - 1248 , - 149 , - 106 , - 1119 , - 3188 , - 681 , - 4862 , - 4467 , - 5128 , - 1213 , - 3986 , - 2183 , - 1436 , - 1745 , - 3110 , - 5531 , - 3376 , - 2277 , - 2234 , - 3247 , - 5316 , - 2809 , - 1358 , - 963 , - 1624 , - 3341 , - 482 , - 4311 , - 3564 , - 3873 , - 5238 , - 2027 , - 5504 , - 4405 , - 4362 , - 5375 , - 1812 , - 4937 , - 3486 , - 3091 , - 3752 , - 5469 , - 2610 , - 807 , - 60 , - 369 , - 1734 , - 4155 , - 2000 , - 901 , - 858 , - 1871 , - 3940 , - 1433 , - 5614 , - 5219 , - 248 , - 1965 , - 4738 , - 2935 , - 2188 , - 2497 , - 3862 , - 651 , - 4128 , - 3029 , - 2986 , - 3999 , - 436 , - 3561 , - 2110 , - 1715 , - 2376 , - 4093 , - 1234 , - 5063 , - 4316 , - 4625 , - 358 , - 2779 , - 624 , - 5157 , - 5114 , - 495 , - 2564 , - 57 , - 4238 , - 3843 , - 4504 , - 589 , - 3362 , - 1559 , - 812 , - 1121 , - 2486 , - 4907 , - 2752 , - 1653 , - 1610 , - 2623 , - 4692 , - 2185 , - 734 , - 339 , - 1000 , - 2717 , - 5490 , - 3687 , - 2940 , - 3249 , - 4614 , - 1403 , - 4880 , - 3781 , - 3738 , - 4751 , - 1188 , - 4313 , - 2862 , - 2467 , - 3128 , - 4845 , - 1986 , - 183 , - 5068 , - 5377 , - 1110 , - 3531 , - 1376 , - 277 , - 234 , - 1247 , - 3316 , - 809 , - 4990 , - 4595 , - 5256 , - 1341 , - 4114 , - 2311 , - 1564 , - 1873 , - 3238 , - 27 , - 3504 , - 2405 , - 2362 , - 3375 , - 5444 , - 2937 , - 1486 , - 1091 , - 1752 , - 3469 , - 610 , - 4439 , - 3692 , - 4001 , - 5366 , - 2155 , - 0 , - 2939 , - 1250 , - 2053 , - 1076 , - 5439 , - 5174 , - 1705 , - 2152 , - 2243 , - 3402 , - 1357 , - 3228 , - 4743 , - 1630 , - 1009 , - 4304 , - 1547 , - 5554 , - 661 , - 5380 , - 4047 , - 3782 , - 313 , - 760 , - 851 , - 2010 , - 5661 , - 1836 , - 3351 , - 238 , - 5313 , - 2912 , - 155 , - 4162 , - 4965 , - 3988 , - 2655 , - 2390 , - 4617 , - 5064 , - 5155 , - 618 , - 4269 , - 444 , - 1959 , - 4542 , - 3921 , - 1520 , - 4459 , - 2770 , - 3573 , - 2596 , - 1263 , - 998 , - 3225 , - 3672 , - 3763 , - 4922 , - 2877 , - 4748 , - 567 , - 3150 , - 2529 , - 128 , - 3067 , - 1378 , - 2181 , - 1204 , - 5567 , - 5302 , - 1833 , - 2280 , - 2371 , - 3530 , - 1485 , - 3356 , - 4871 , - 1758 , - 1137 , - 4432 , - 1675 , - 5682 , - 789 , - 5508 , - 4175 , - 3910 , - 441 , - 888 , - 979 , - 2138 , - 93 , - 1964 , - 3479 , - 366 , - 5441 , - 3040 , - 283 , - 4290 , - 5093 , - 4116 , - 2783 , - 2518 , - 4745 , - 5192 , - 5283 , - 746 , - 4397 , - 572 , - 2087 , - 4670 , - 4049 , - 1648 , - 4587 , - 2898 , - 3701 , - 2724 , - 1391 , - 1126 , - 3353 , - 3800 , - 3891 , - 5050 , - 3005 , - 4876 , - 695 , - 3278 , - 2657 , - 256 , - 3195 , - 1506 , - 2309 , - 1332 , - 5695 , - 5430 , - 1961 , - 2408 , - 2499 , - 3658 , - 1613 , - 3484 , - 4999 , - 1886 , - 1265 , - 4560 , - 1803 , - 114 , - 917 , - 5636 , - 4303 , - 4038 , - 569 , - 1016 , - 1107 , - 2266 , - 221 , - 2092 , - 3607 , - 494 , - 5569 , - 3168 , - 411 , - 4418 , - 5221 , - 4244 , - 2911 , - 2646 , - 4873 , - 5320 , - 5411 , - 874 , - 4525 , - 700 , - 2215 , - 4798 , - 4177 , - 1776 , - 4715 , - 3026 , - 3829 , - 2852 , - 1519 , - 1254 , - 3481 , - 3928 , - 4019 , - 5178 , - 3133 , - 5004 , - 823 , - 3406 , - 2785 , - 384 , - 3323 , - 1634 , - 2437 , - 1460 , - 127 , - 5558 , - 2089 , - 2536 , - 2627 , - 3786 , - 1741 , - 3612 , - 5127 , - 2014 , - 1393 , - 4688 , - 1931 , - 242 , - 1045 , - 68 , - 4431 , - 4166 , - 697 , - 1144 , - 1235 , - 2394 , - 349 , - 2220 , - 3735 , - 622 , - 1 , - 3296 , - 539 , - 4546 , - 5349 , - 4372 , - 3039 , - 2774 , - 5001 , - 5448 , - 5539 , - 1002 , - 4653 , - 828 , - 2343 , - 4926 , - 4305 , - 1904 , - 4843 , - 3154 , - 3957 , - 2980 , - 1647 , - 1382 , - 3609 , - 4056 , - 4147 , - 5306 , - 3261 , - 5132 , - 951 , - 3534 , - 2913 , - 512 , - 3451 , - 1762 , - 2565 , - 1588 , - 255 , - 5686 , - 2217 , - 2664 , - 2755 , - 3914 , - 1869 , - 3740 , - 5255 , - 2142 , - 1521 , - 4816 , - 2059 , - 370 , - 1173 , - 196 , - 4559 , - 4294 , - 825 , - 1272 , - 1363 , - 2522 , - 477 , - 2348 , - 3863 , - 750 , - 129 , - 3424 , - 667 , - 4674 , - 5477 , - 4500 , - 3167 , - 2902 , - 5129 , - 5576 , - 5667 , - 1130 , - 4781 , - 956 , - 2471 , - 5054 , - 4433 , - 2032 , - 4971 , - 3282 , - 4085 , - 3108 , - 1775 , - 1510 , - 3737 , - 4184 , - 4275 , - 5434 , - 3389 , - 5260 , - 1079 , - 3662 , - 3041 , - 640 , - 3579 , - 1890 , - 2693 , - 1716 , - 383 , - 118 , - 2345 , - 2792 , - 2883 , - 4042 , - 1997 , - 3868 , - 5383 , - 2270 , - 1649 , - 4944 , - 2187 , - 498 , - 1301 , - 324 , - 4687 , - 4422 , - 953 , - 1400 , - 1491 , - 2650 , - 605 , - 2476 , - 3991 , - 878 , - 257 , - 3552 , - 795 , - 4802 , - 5605 , - 4628 , - 3295 , - 3030 , - 5257 , - 8 , - 99 , - 1258 , - 4909 , - 1084 , - 2599 , - 5182 , - 4561 , - 2160 , - 5099 , - 3410 , - 4213 , - 3236 , - 1903 , - 1638 , - 3865 , - 4312 , - 4403 , - 5562 , - 3517 , - 5388 , - 1207 , - 3790 , - 3169 , - 768 , - 3707 , - 2018 , - 2821 , - 1844 , - 511 , - 246 , - 2473 , - 2920 , - 3011 , - 4170 , - 2125 , - 3996 , - 5511 , - 2398 , - 1777 , - 5072 , - 2315 , - 626 , - 1429 , - 452 , - 4815 , - 4550 , - 1081 , - 1528 , - 1619 , - 2778 , - 733 , - 2604 , - 4119 , - 1006 , - 385 , - 3680 , - 923 , - 4930 , - 37 , - 4756 , - 3423 , - 3158 , - 5385 , - 136 , - 227 , - 1386 , - 5037 , - 1212 , - 2727 , - 5310 , - 4689 , - 2288 , - 5227 , - 3538 , - 4341 , - 3364 , - 2031 , - 1766 , - 3993 , - 4440 , - 4531 , - 5690 , - 3645 , - 5516 , - 1335 , - 3918 , - 3297 , - 896 , - 3835 , - 2146 , - 2949 , - 1972 , - 639 , - 374 , - 2601 , - 3048 , - 3139 , - 4298 , - 2253 , - 4124 , - 5639 , - 2526 , - 1905 , - 5200 , - 2443 , - 754 , - 1557 , - 580 , - 4943 , - 4678 , - 1209 , - 1656 , - 1747 , - 2906 , - 861 , - 2732 , - 4247 , - 1134 , - 513 , - 3808 , - 1051 , - 5058 , - 165 , - 4884 , - 3551 , - 3286 , - 5513 , - 264 , - 355 , - 1514 , - 5165 , - 1340 , - 2855 , - 5438 , - 4817 , - 2416 , - 5355 , - 3666 , - 4469 , - 3492 , - 2159 , - 1894 , - 4121 , - 4568 , - 4659 , - 122 , - 3773 , - 5644 , - 1463 , - 4046 , - 3425 , - 1024 , - 3963 , - 2274 , - 3077 , - 2100 , - 767 , - 502 , - 2729 , - 3176 , - 3267 , - 4426 , - 2381 , - 4252 , - 71 , - 2654 , - 2033 , - 5328 , - 2571 , - 882 , - 1685 , - 708 , - 5071 , - 4806 , - 1337 , - 1784 , - 1875 , - 3034 , - 989 , - 2860 , - 4375 , - 1262 , - 641 , - 3936 , - 1179 , - 5186 , - 293 , - 5012 , - 3679 , - 3414 , - 5641 , - 392 , - 483 , - 1642 , - 5293 , - 1468 , - 2983 , - 5566 , - 4945 , - 2544 , - 5483 , - 3794 , - 4597 , - 3620 , - 2287 , - 2022 , - 4249 , - 4696 , - 4787 , - 250 , - 3901 , - 76 , - 1591 , - 4174 , - 3553 , - 1152 , - 4091 , - 2402 , - 3205 , - 2228 , - 895 , - 630 , - 2857 , - 3304 , - 3395 , - 4554 , - 2509 , - 4380 , - 199 , - 2782 , - 2161 , - 5456 , - 2699 , - 1010 , - 1813 , - 836 , - 5199 , - 4934 , - 1465 , - 1912 , - 2003 , - 3162 , - 1117 , - 2988 , - 4503 , - 1390 , - 769 , - 4064 , - 1307 , - 5314 , - 421 , - 5140 , - 3807 , - 3542 , - 73 , - 520 , - 611 , - 1770 , - 5421 , - 1596 , - 3111 , - 5694 , - 5073 , - 2672 , - 5611 , - 3922 , - 4725 , - 3748 , - 2415 , - 2150 , - 4377 , - 4824 , - 4915 , - 378 , - 4029 , - 204 , - 1719 , - 4302 , - 3681 , - 1280 , - 4219 , - 2530 , - 3333 , - 2356 , - 1023 , - 758 , - 2985 , - 3432 , - 3523 , - 4682 , - 2637 , - 4508 , - 327 , - 2910 , - 2289 , - 5584 , - 2827 , - 1138 , - 1941 , - 964 , - 5327 , - 5062 , - 1593 , - 2040 , - 2131 , - 3290 , - 1245 , - 3116 , - 4631 , - 1518 , - 897 , - 4192 , - 1435 , - 5442 , - 549 , - 5268 , - 3935 , - 3670 , - 201 , - 648 , - 739 , - 1898 , - 5549 , - 1724 , - 3239 , - 126 , - 5201 , - 2800 , - 43 , - 4050 , - 4853 , - 3876 , - 2543 , - 2278 , - 4505 , - 4952 , - 5043 , - 506 , - 4157 , - 332 , - 1847 , - 4430 , - 3809 , - 1408 , - 4347 , - 2658 , - 3461 , - 2484 , - 1151 , - 886 , - 3113 , - 3560 , - 3651 , - 4810 , - 2765 , - 4636 , - 455 , - 3038 , - 2417 , - 16 , - 2955 , - 1266 , - 2069 , - 1092 , - 5455 , - 5190 , - 1721 , - 2168 , - 2259 , - 3418 , - 1373 , - 3244 , - 4759 , - 1646 , - 1025 , - 4320 , - 1563 , - 5570 , - 677 , - 5396 , - 4063 , - 3798 , - 329 , - 776 , - 867 , - 2026 , - 5677 , - 1852 , - 3367 , - 254 , - 5329 , - 2928 , - 171 , - 4178 , - 4981 , - 4004 , - 2671 , - 2406 , - 4633 , - 5080 , - 5171 , - 634 , - 4285 , - 460 , - 1975 , - 4558 , - 3937 , - 1536 , - 4475 , - 2786 , - 3589 , - 2612 , - 1279 , - 1014 , - 3241 , - 3688 , - 3779 , - 4938 , - 2893 , - 4764 , - 583 , - 3166 , - 2545 , - 144 , - 3083 , - 1394 , - 2197 , - 1220 , - 5583 , - 5318 , - 1849 , - 2296 , - 2387 , - 3546 , - 1501 , - 3372 , - 4887 , - 1774 , - 1153 , - 4448 , - 1691 , - 2 , - 805 , - 5524 , - 4191 , - 3926 , - 457 , - 904 , - 995 , - 2154 , - 109 , - 1980 , - 3495 , - 382 , - 5457 , - 3056 , - 299 , - 4306 , - 5109 , - 4132 , - 2799 , - 2534 , - 4761 , - 5208 , - 5299 , - 762 , - 4413 , - 588 , - 2103 , - 4686 , - 4065 , - 1664 , - 4603 , - 2914 , - 3717 , - 2740 , - 1407 , - 1142 , - 3369 , - 3816 , - 3907 , - 5066 , - 3021 , - 4892 , - 711 , - 3294 , - 2673 , - 272 , - 3211 , - 1522 , - 2325 , - 1348 , - 15 , - 5446 , - 1977 , - 2424 , - 2515 , - 3674 , - 1629 , - 3500 , - 5015 , - 1902 , - 1281 , - 4576 , - 1819 , - 130 , - 933 , - 5652 , - 4319 , - 4054 , - 585 , - 1032 , - 1123 , - 2282 , - 237 , - 2108 , - 3623 , - 510 , - 5585 , - 3184 , - 427 , - 4434 , - 5237 , - 4260 , - 2927 , - 2662 , - 4889 , - 5336 , - 5427 , - 890 , - 4541 , - 716 , - 2231 , - 4814 , - 4193 , - 1792 , - 4731 , - 3042 , - 3845 , - 2868 , - 1535 , - 1270 , - 3497 , - 3944 , - 4035 , - 5194 , - 3149 , - 5020 , - 839 , - 3422 , - 2801 , - 400 , - 3339 , - 1650 , - 2453 , - 1476 , - 143 , - 5574 , - 2105 , - 2552 , - 2643 , - 3802 , - 1757 , - 3628 , - 5143 , - 2030 , - 1409 , - 4704 , - 1947 , - 258 , - 1061 , - 84 , - 4447 , - 4182 , - 713 , - 1160 , - 1251 , - 2410 , - 365 , - 2236 , - 3751 , - 638 , - 17 , - 3312 , - 555 , - 4562 , - 5365 , - 4388 , - 3055 , - 2790 , - 5017 , - 5464 , - 5555 , - 1018 , - 4669 , - 844 , - 2359 , - 4942 , - 4321 , - 1920 , - 4859 , - 3170 , - 3973 , - 2996 , - 1663 , - 1398 , - 3625 , - 4072 , - 4163 , - 5322 , - 3277 , - 5148 , - 967 , - 3550 , - 2929 , - 528 , - 3467 , - 1778 , - 2581 , - 1604 , - 271 , - 6 , - 2233 , - 2680 , - 2771 , - 3930 , - 1885 , - 3756 , - 5271 , - 2158 , - 1537 , - 4832 , - 2075 , - 386 , - 1189 , - 212 , - 4575 , - 4310 , - 841 , - 1288 , - 1379 , - 2538 , - 493 , - 2364 , - 3879 , - 766 , - 145 , - 3440 , - 683 , - 4690 , - 5493 , - 4516 , - 3183 , - 2918 , - 5145 , - 5592 , - 5683 , - 1146 , - 4797 , - 972 , - 2487 , - 5070 , - 4449 , - 2048 , - 4987 , - 3298 , - 4101 , - 3124 , - 1791 , - 1526 , - 3753 , - 4200 , - 4291 , - 5450 , - 3405 , - 5276 , - 1095 , - 3678 , - 3057 , - 656 , - 3595 , - 1906 , - 2709 , - 1732 , - 399 , - 134 , - 2361 , - 2808 , - 2899 , - 4058 , - 2013 , - 3884 , - 5399 , - 2286 , - 1665 , - 4960 , - 2203 , - 514 , - 1317 , - 340 , - 4703 , - 4438 , - 969 , - 1416 , - 1507 , - 2666 , - 621 , - 2492 , - 4007 , - 894 , - 273 , - 3568 , - 811 , - 4818 , - 5621 , - 4644 , - 3311 , - 3046 , - 5273 , - 24 , - 115 , - 1274 , - 4925 , - 1100 , - 2615 , - 5198 , - 4577 , - 2176 , - 5115 , - 3426 , - 4229 , - 3252 , - 1919 , - 1654 , - 3881 , - 4328 , - 4419 , - 5578 , - 3533 , - 5404 , - 1223 , - 3806 , - 3185 , - 784 , - 3723 , - 2034 , - 2837 , - 1860 , - 527 , - 262 , - 2489 , - 2936 , - 3027 , - 4186 , - 2141 , - 4012 , - 5527 , - 2414 , - 1793 , - 5088 , - 2331 , - 642 , - 1445 , - 468 , - 4831 , - 4566 , - 1097 , - 1544 , - 1635 , - 2794 , - 749 , - 2620 , - 4135 , - 1022 , - 401 , - 3696 , - 939 , - 4946 , - 53 , - 4772 , - 3439 , - 3174 , - 5401 , - 152 , - 243 , - 1402 , - 5053 , - 1228 , - 2743 , - 5326 , - 4705 , - 2304 , - 5243 , - 3554 , - 4357 , - 3380 , - 2047 , - 1782 , - 4009 , - 4456 , - 4547 , - 10 , - 3661 , - 5532 , - 1351 , - 3934 , - 3313 , - 912 , - 3851 , - 2162 , - 2965 , - 1988 , - 655 , - 390 , - 2617 , - 3064 , - 3155 , - 4314 , - 2269 , - 4140 , - 5655 , - 2542 , - 1921 , - 5216 , - 2459 , - 770 , - 1573 , - 596 , - 4959 , - 4694 , - 1225 , - 1672 , - 1763 , - 2922 , - 877 , - 2748 , - 4263 , - 1150 , - 529 , - 3824 , - 1067 , - 5074 , - 181 , - 4900 , - 3567 , - 3302 , - 5529 , - 280 , - 371 , - 1530 , - 5181 , - 1356 , - 2871 , - 5454 , - 4833 , - 2432 , - 5371 , - 3682 , - 4485 , - 3508 , - 2175 , - 1910 , - 4137 , - 4584 , - 4675 , - 138 , - 3789 , - 5660 , - 1479 , - 4062 , - 3441 , - 1040 , - 3979 , - 2290 , - 3093 , - 2116 , - 783 , - 518 , - 2745 , - 3192 , - 3283 , - 4442 , - 2397 , - 4268 , - 87 , - 2670 , - 2049 , - 5344 , - 2587 , - 898 , - 1701 , - 724 , - 5087 , - 4822 , - 1353 , - 1800 , - 1891 , - 3050 , - 1005 , - 2876 , - 4391 , - 1278 , - 657 , - 3952 , - 1195 , - 5202 , - 309 , - 5028 , - 3695 , - 3430 , - 5657 , - 408 , - 499 , - 1658 , - 5309 , - 1484 , - 2999 , - 5582 , - 4961 , - 2560 , - 5499 , - 3810 , - 4613 , - 3636 , - 2303 , - 2038 , - 4265 , - 4712 , - 4803 , - 266 , - 3917 , - 92 , - 1607 , - 4190 , - 3569 , - 1168 , - 4107 , - 2418 , - 3221 , - 2244 , - 911 , - 646 , - 2873 , - 3320 , - 3411 , - 4570 , - 2525 , - 4396 , - 215 , - 2798 , - 2177 , - 5472 , - 2715 , - 1026 , - 1829 , - 852 , - 5215 , - 4950 , - 1481 , - 1928 , - 2019 , - 3178 , - 1133 , - 3004 , - 4519 , - 1406 , - 785 , - 4080 , - 1323 , - 5330 , - 437 , - 5156 , - 3823 , - 3558 , - 89 , - 536 , - 627 , - 1786 , - 5437 , - 1612 , - 3127 , - 14 , - 5089 , - 2688 , - 5627 , - 3938 , - 4741 , - 3764 , - 2431 , - 2166 , - 4393 , - 4840 , - 4931 , - 394 , - 4045 , - 220 , - 1735 , - 4318 , - 3697 , - 1296 , - 4235 , - 2546 , - 3349 , - 2372 , - 1039 , - 774 , - 3001 , - 3448 , - 3539 , - 4698 , - 2653 , - 4524 , - 343 , - 2926 , - 2305 , - 5600 , - 2843 , - 1154 , - 1957 , - 980 , - 5343 , - 5078 , - 1609 , - 2056 , - 2147 , - 3306 , - 1261 , - 3132 , - 4647 , - 1534 , - 913 , - 4208 , - 1451 , - 5458 , - 565 , - 5284 , - 3951 , - 3686 , - 217 , - 664 , - 755 , - 1914 , - 5565 , - 1740 , - 3255 , - 142 , - 5217 , - 2816 , - 59 , - 4066 , - 4869 , - 3892 , - 2559 , - 2294 , - 4521 , - 4968 , - 5059 , - 522 , - 4173 , - 348 , - 1863 , - 4446 , - 3825 , - 1424 , - 4363 , - 2674 , - 3477 , - 2500 , - 1167 , - 902 , - 3129 , - 3576 , - 3667 , - 4826 , - 2781 , - 4652 , - 471 , - 3054 , - 2433 , - 32 , - 2971 , - 1282 , - 2085 , - 1108 , - 5471 , - 5206 , - 1737 , - 2184 , - 2275 , - 3434 , - 1389 , - 3260 , - 4775 , - 1662 , - 1041 , - 4336 , - 1579 , - 5586 , - 693 , - 5412 , - 4079 , - 3814 , - 345 , - 792 , - 883 , - 2042 , - 5693 , - 1868 , - 3383 , - 270 , - 5345 , - 2944 , - 187 , - 4194 , - 4997 , - 4020 , - 2687 , - 2422 , - 4649 , - 5096 , - 5187 , - 650 , - 4301 , - 476 , - 1991 , - 4574 , - 3953 , - 1552 , - 4491 , - 2802 , - 3605 , - 2628 , - 1295 , - 1030 , - 3257 , - 3704 , - 3795 , - 4954 , - 2909 , - 4780 , - 599 , - 3182 , - 2561 , - 160 , - 3099 , - 1410 , - 2213 , - 1236 , - 5599 , - 5334 , - 1865 , - 2312 , - 2403 , - 3562 , - 1517 , - 3388 , - 4903 , - 1790 , - 1169 , - 4464 , - 1707 , - 18 , - 821 , - 5540 , - 4207 , - 3942 , - 473 , - 920 , - 1011 , - 2170 , - 125 , - 1996 , - 3511 , - 398 , - 5473 , - 3072 , - 315 , - 4322 , - 5125 , - 4148 , - 2815 , - 2550 , - 4777 , - 5224 , - 5315 , - 778 , - 4429 , - 604 , - 2119 , - 4702 , - 4081 , - 1680 , - 4619 , - 2930 , - 3733 , - 2756 , - 1423 , - 1158 , - 3385 , - 3832 , - 3923 , - 5082 , - 3037 , - 4908 , - 727 , - 3310 , - 2689 , - 288 , - 3227 , - 1538 , - 2341 , - 1364 , - 31 , - 5462 , - 1993 , - 2440 , - 2531 , - 3690 , - 1645 , - 3516 , - 5031 , - 1918 , - 1297 , - 4592 , - 1835 , - 146 , - 949 , - 5668 , - 4335 , - 4070 , - 601 , - 1048 , - 1139 , - 2298 , - 253 , - 2124 , - 3639 , - 526 , - 5601 , - 3200 , - 443 , - 4450 , - 5253 , - 4276 , - 2943 , - 2678 , - 4905 , - 5352 , - 5443 , - 906 , - 4557 , - 732 , - 2247 , - 4830 , - 4209 , - 1808 , - 4747 , - 3058 , - 3861 , - 2884 , - 1551 , - 1286 , - 3513 , - 3960 , - 4051 , - 5210 , - 3165 , - 5036 , - 855 , - 3438 , - 2817 , - 416 , - 3355 , - 1666 , - 2469 , - 1492 , - 159 , - 5590 , - 2121 , - 2568 , - 2659 , - 3818 , - 1773 , - 3644 , - 5159 , - 2046 , - 1425 , - 4720 , - 1963 , - 274 , - 1077 , - 100 , - 4463 , - 4198 , - 729 , - 1176 , - 1267 , - 2426 , - 381 , - 2252 , - 3767 , - 654 , - 33 , - 3328 , - 571 , - 4578 , - 5381 , - 4404 , - 3071 , - 2806 , - 5033 , - 5480 , - 5571 , - 1034 , - 4685 , - 860 , - 2375 , - 4958 , - 4337 , - 1936 , - 4875 , - 3186 , - 3989 , - 3012 , - 1679 , - 1414 , - 3641 , - 4088 , - 4179 , - 5338 , - 3293 , - 5164 , - 983 , - 3566 , - 2945 , - 544 , - 3483 , - 1794 , - 2597 , - 1620 , - 287 , - 22 , - 2249 , - 2696 , - 2787 , - 3946 , - 1901 , - 3772 , - 5287 , - 2174 , - 1553 , - 4848 , - 2091 , - 402 , - 1205 , - 228 , - 4591 , - 4326 , - 857 , - 1304 , - 1395 , - 2554 , - 509 , - 2380 , - 3895 , - 782 , - 161 , - 3456 , - 699 , - 4706 , - 5509 , - 4532 , - 3199 , - 2934 , - 5161 , - 5608 , - 3 , - 1162 , - 4813 , - 988 , - 2503 , - 5086 , - 4465 , - 2064 , - 5003 , - 3314 , - 4117 , - 3140 , - 1807 , - 1542 , - 3769 , - 4216 , - 4307 , - 5466 , - 3421 , - 5292 , - 1111 , - 3694 , - 3073 , - 672 , - 3611 , - 1922 , - 2725 , - 1748 , - 415 , - 150 , - 2377 , - 2824 , - 2915 , - 4074 , - 2029 , - 3900 , - 5415 , - 2302 , - 1681 , - 4976 , - 2219 , - 530 , - 1333 , - 356 , - 4719 , - 4454 , - 985 , - 1432 , - 1523 , - 2682 , - 637 , - 2508 , - 4023 , - 910 , - 289 , - 3584 , - 827 , - 4834 , - 5637 , - 4660 , - 3327 , - 3062 , - 5289 , - 40 , - 131 , - 1290 , - 4941 , - 1116 , - 2631 , - 5214 , - 4593 , - 2192 , - 5131 , - 3442 , - 4245 , - 3268 , - 1935 , - 1670 , - 3897 , - 4344 , - 4435 , - 5594 , - 3549 , - 5420 , - 1239 , - 3822 , - 3201 , - 800 , - 3739 , - 2050 , - 2853 , - 1876 , - 543 , - 278 , - 2505 , - 2952 , - 3043 , - 4202 , - 2157 , - 4028 , - 5543 , - 2430 , - 1809 , - 5104 , - 2347 , - 658 , - 1461 , - 484 , - 4847 , - 4582 , - 1113 , - 1560 , - 1651 , - 2810 , - 765 , - 2636 , - 4151 , - 1038 , - 417 , - 3712 , - 955 , - 4962 , - 69 , - 4788 , - 3455 , - 3190 , - 5417 , - 168 , - 259 , - 1418 , - 5069 , - 1244 , - 2759 , - 5342 , - 4721 , - 2320 , - 5259 , - 3570 , - 4373 , - 3396 , - 2063 , - 1798 , - 4025 , - 4472 , - 4563 , - 26 , - 3677 , - 5548 , - 1367 , - 3950 , - 3329 , - 928 , - 3867 , - 2178 , - 2981 , - 2004 , - 671 , - 406 , - 2633 , - 3080 , - 3171 , - 4330 , - 2285 , - 4156 , - 5671 , - 2558 , - 1937 , - 5232 , - 2475 , - 786 , - 1589 , - 612 , - 4975 , - 4710 , - 1241 , - 1688 , - 1779 , - 2938 , - 893 , - 2764 , - 4279 , - 1166 , - 545 , - 3840 , - 1083 , - 5090 , - 197 , - 4916 , - 3583 , - 3318 , - 5545 , - 296 , - 387 , - 1546 , - 5197 , - 1372 , - 2887 , - 5470 , - 4849 , - 2448 , - 5387 , - 3698 , - 4501 , - 3524 , - 2191 , - 1926 , - 4153 , - 4600 , - 4691 , - 154 , - 3805 , - 5676 , - 1495 , - 4078 , - 3457 , - 1056 , - 3995 , - 2306 , - 3109 , - 2132 , - 799 , - 534 , - 2761 , - 3208 , - 3299 , - 4458 , - 2413 , - 4284 , - 103 , - 2686 , - 2065 , - 5360 , - 2603 , - 914 , - 1717 , - 740 , - 5103 , - 4838 , - 1369 , - 1816 , - 1907 , - 3066 , - 1021 , - 2892 , - 4407 , - 1294 , - 673 , - 3968 , - 1211 , - 5218 , - 325 , - 5044 , - 3711 , - 3446 , - 5673 , - 424 , - 515 , - 1674 , - 5325 , - 1500 , - 3015 , - 5598 , - 4977 , - 2576 , - 5515 , - 3826 , - 4629 , - 3652 , - 2319 , - 2054 , - 4281 , - 4728 , - 4819 , - 282 , - 3933 , - 108 , - 1623 , - 4206 , - 3585 , - 1184 , - 4123 , - 2434 , - 3237 , - 2260 , - 927 , - 662 , - 2889 , - 3336 , - 3427 , - 4586 , - 2541 , - 4412 , - 231 , - 2814 , - 2193 , - 5488 , - 2731 , - 1042 , - 1845 , - 868 , - 5231 , - 4966 , - 1497 , - 1944 , - 2035 , - 3194 , - 1149 , - 3020 , - 4535 , - 1422 , - 801 , - 4096 , - 1339 , - 5346 , - 453 , - 5172 , - 3839 , - 3574 , - 105 , - 552 , - 643 , - 1802 , - 5453 , - 1628 , - 3143 , - 30 , - 5105 , - 2704 , - 5643 , - 3954 , - 4757 , - 3780 , - 2447 , - 2182 , - 4409 , - 4856 , - 4947 , - 410 , - 4061 , - 236 , - 1751 , - 4334 , - 3713 , - 1312 , - 4251 , - 2562 , - 3365 , - 2388 , - 1055 , - 790 , - 3017 , - 3464 , - 3555 , - 4714 , - 2669 , - 4540 , - 359 , - 2942 , - 2321 , - 5616 , - 2859 , - 1170 , - 1973 , - 996 , - 5359 , - 5094 , - 1625 , - 2072 , - 2163 , - 3322 , - 1277 , - 3148 , - 4663 , - 1550 , - 929 , - 4224 , - 1467 , - 5474 , - 581 , - 5300 , - 3967 , - 3702 , - 233 , - 680 , - 771 , - 1930 , - 5581 , - 1756 , - 3271 , - 158 , - 5233 , - 2832 , - 75 , - 4082 , - 4885 , - 3908 , - 2575 , - 2310 , - 4537 , - 4984 , - 5075 , - 538 , - 4189 , - 364 , - 1879 , - 4462 , - 3841 , - 1440 , - 4379 , - 2690 , - 3493 , - 2516 , - 1183 , - 918 , - 3145 , - 3592 , - 3683 , - 4842 , - 2797 , - 4668 , - 487 , - 3070 , - 2449 , - 48 , - 2987 , - 1298 , - 2101 , - 1124 , - 5487 , - 5222 , - 1753 , - 2200 , - 2291 , - 3450 , - 1405 , - 3276 , - 4791 , - 1678 , - 1057 , - 4352 , - 1595 , - 5602 , - 709 , - 5428 , - 4095 , - 3830 , - 361 , - 808 , - 899 , - 2058 , - 13 , - 1884 , - 3399 , - 286 , - 5361 , - 2960 , - 203 , - 4210 , - 5013 , - 4036 , - 2703 , - 2438 , - 4665 , - 5112 , - 5203 , - 666 , - 4317 , - 492 , - 2007 , - 4590 , - 3969 , - 1568 , - 4507 , - 2818 , - 3621 , - 2644 , - 1311 , - 1046 , - 3273 , - 3720 , - 3811 , - 4970 , - 2925 , - 4796 , - 615 , - 3198 , - 2577 , - 176 , - 3115 , - 1426 , - 2229 , - 1252 , - 5615 , - 5350 , - 1881 , - 2328 , - 2419 , - 3578 , - 1533 , - 3404 , - 4919 , - 1806 , - 1185 , - 4480 , - 1723 , - 34 , - 837 , - 5556 , - 4223 , - 3958 , - 489 , - 936 , - 1027 , - 2186 , - 141 , - 2012 , - 3527 , - 414 , - 5489 , - 3088 , - 331 , - 4338 , - 5141 , - 4164 , - 2831 , - 2566 , - 4793 , - 5240 , - 5331 , - 794 , - 4445 , - 620 , - 2135 , - 4718 , - 4097 , - 1696 , - 4635 , - 2946 , - 3749 , - 2772 , - 1439 , - 1174 , - 3401 , - 3848 , - 3939 , - 5098 , - 3053 , - 4924 , - 743 , - 3326 , - 2705 , - 304 , - 3243 , - 1554 , - 2357 , - 1380 , - 47 , - 5478 , - 2009 , - 2456 , - 2547 , - 3706 , - 1661 , - 3532 , - 5047 , - 1934 , - 1313 , - 4608 , - 1851 , - 162 , - 965 , - 5684 , - 4351 , - 4086 , - 617 , - 1064 , - 1155 , - 2314 , - 269 , - 2140 , - 3655 , - 542 , - 5617 , - 3216 , - 459 , - 4466 , - 5269 , - 4292 , - 2959 , - 2694 , - 4921 , - 5368 , - 5459 , - 922 , - 4573 , - 748 , - 2263 , - 4846 , - 4225 , - 1824 , - 4763 , - 3074 , - 3877 , - 2900 , - 1567 , - 1302 , - 3529 , - 3976 , - 4067 , - 5226 , - 3181 , - 5052 , - 871 , - 3454 , - 2833 , - 432 , - 3371 , - 1682 , - 2485 , - 1508 , - 175 , - 5606 , - 2137 , - 2584 , - 2675 , - 3834 , - 1789 , - 3660 , - 5175 , - 2062 , - 1441 , - 4736 , - 1979 , - 290 , - 1093 , - 116 , - 4479 , - 4214 , - 745 , - 1192 , - 1283 , - 2442 , - 397 , - 2268 , - 3783 , - 670 , - 49 , - 3344 , - 587 , - 4594 , - 5397 , - 4420 , - 3087 , - 2822 , - 5049 , - 5496 , - 5587 , - 1050 , - 4701 , - 876 , - 2391 , - 4974 , - 4353 , - 1952 , - 4891 , - 3202 , - 4005 , - 3028 , - 1695 , - 1430 , - 3657 , - 4104 , - 4195 , - 5354 , - 3309 , - 5180 , - 999 , - 3582 , - 2961 , - 560 , - 3499 , - 1810 , - 2613 , - 1636 , - 303 , - 38 , - 2265 , - 2712 , - 2803 , - 3962 , - 1917 , - 3788 , - 5303 , - 2190 , - 1569 , - 4864 , - 2107 , - 418 , - 1221 , - 244 , - 4607 , - 4342 , - 873 , - 1320 , - 1411 , - 2570 , - 525 , - 2396 , - 3911 , - 798 , - 177 , - 3472 , - 715 , - 4722 , - 5525 , - 4548 , - 3215 , - 2950 , - 5177 , - 5624 , - 19 , - 1178 , - 4829 , - 1004 , - 2519 , - 5102 , - 4481 , - 2080 , - 5019 , - 3330 , - 4133 , - 3156 , - 1823 , - 1558 , - 3785 , - 4232 , - 4323 , - 5482 , - 3437 , - 5308 , - 1127 , - 3710 , - 3089 , - 688 , - 3627 , - 1938 , - 2741 , - 1764 , - 431 , - 166 , - 2393 , - 2840 , - 2931 , - 4090 , - 2045 , - 3916 , - 5431 , - 2318 , - 1697 , - 4992 , - 2235 , - 546 , - 1349 , - 372 , - 4735 , - 4470 , - 1001 , - 1448 , - 1539 , - 2698 , - 653 , - 2524 , - 4039 , - 926 , - 305 , - 3600 , - 843 , - 4850 , - 5653 , - 4676 , - 3343 , - 3078 , - 5305 , - 56 , - 147 , - 1306 , - 4957 , - 1132 , - 2647 , - 5230 , - 4609 , - 2208 , - 5147 , - 3458 , - 4261 , - 3284 , - 1951 , - 1686 , - 3913 , - 4360 , - 4451 , - 5610 , - 3565 , - 5436 , - 1255 , - 3838 , - 3217 , - 816 , - 3755 , - 2066 , - 2869 , - 1892 , - 559 , - 294 , - 2521 , - 2968 , - 3059 , - 4218 , - 2173 , - 4044 , - 5559 , - 2446 , - 1825 , - 5120 , - 2363 , - 674 , - 1477 , - 500 , - 4863 , - 4598 , - 1129 , - 1576 , - 1667 , - 2826 , - 781 , - 2652 , - 4167 , - 1054 , - 433 , - 3728 , - 971 , - 4978 , - 85 , - 4804 , - 3471 , - 3206 , - 5433 , - 184 , - 275 , - 1434 , - 5085 , - 1260 , - 2775 , - 5358 , - 4737 , - 2336 , - 5275 , - 3586 , - 4389 , - 3412 , - 2079 , - 1814 , - 4041 , - 4488 , - 4579 , - 42 , - 3693 , - 5564 , - 1383 , - 3966 , - 3345 , - 944 , - 3883 , - 2194 , - 2997 , - 2020 , - 687 , - 422 , - 2649 , - 3096 , - 3187 , - 4346 , - 2301 , - 4172 , - 5687 , - 2574 , - 1953 , - 5248 , - 2491 , - 802 , - 1605 , - 628 , - 4991 , - 4726 , - 1257 , - 1704 , - 1795 , - 2954 , - 909 , - 2780 , - 4295 , - 1182 , - 561 , - 3856 , - 1099 , - 5106 , - 213 , - 4932 , - 3599 , - 3334 , - 5561 , - 312 , - 403 , - 1562 , - 5213 , - 1388 , - 2903 , - 5486 , - 4865 , - 2464 , - 5403 , - 3714 , - 4517 , - 3540 , - 2207 , - 1942 , - 4169 , - 4616 , - 4707 , - 170 , - 3821 , - 5692 , - 1511 , - 4094 , - 3473 , - 1072 , - 4011 , - 2322 , - 3125 , - 2148 , - 815 , - 550 , - 2777 , - 3224 , - 3315 , - 4474 , - 2429 , - 4300 , - 119 , - 2702 , - 2081 , - 5376 , - 2619 , - 930 , - 1733 , - 756 , - 5119 , - 4854 , - 1385 , - 1832 , - 1923 , - 3082 , - 1037 , - 2908 , - 4423 , - 1310 , - 689 , - 3984 , - 1227 , - 5234 , - 341 , - 5060 , - 3727 , - 3462 , - 5689 , - 440 , - 531 , - 1690 , - 5341 , - 1516 , - 3031 , - 5614 , - 4993 , - 2592 , - 5531 , - 3842 , - 4645 , - 3668 , - 2335 , - 2070 , - 4297 , - 4744 , - 4835 , - 298 , - 3949 , - 124 , - 1639 , - 4222 , - 3601 , - 1200 , - 4139 , - 2450 , - 3253 , - 2276 , - 943 , - 678 , - 2905 , - 3352 , - 3443 , - 4602 , - 2557 , - 4428 , - 247 , - 2830 , - 2209 , - 5504 , - 2747 , - 1058 , - 1861 , - 884 , - 5247 , - 4982 , - 1513 , - 1960 , - 2051 , - 3210 , - 1165 , - 3036 , - 4551 , - 1438 , - 817 , - 4112 , - 1355 , - 5362 , - 469 , - 5188 , - 3855 , - 3590 , - 121 , - 568 , - 659 , - 1818 , - 5469 , - 1644 , - 3159 , - 46 , - 5121 , - 2720 , - 5659 , - 3970 , - 4773 , - 3796 , - 2463 , - 2198 , - 4425 , - 4872 , - 4963 , - 426 , - 4077 , - 252 , - 1767 , - 4350 , - 3729 , - 1328 , - 4267 , - 2578 , - 3381 , - 2404 , - 1071 , - 806 , - 3033 , - 3480 , - 3571 , - 4730 , - 2685 , - 4556 , - 375 , - 2958 , - 2337 , - 5632 , - 2875 , - 1186 , - 1989 , - 1012 , - 5375 , - 5110 , - 1641 , - 2088 , - 2179 , - 3338 , - 1293 , - 3164 , - 4679 , - 1566 , - 945 , - 4240 , - 1483 , - 5490 , - 597 , - 5316 , - 3983 , - 3718 , - 249 , - 696 , - 787 , - 1946 , - 5597 , - 1772 , - 3287 , - 174 , - 5249 , - 2848 , - 91 , - 4098 , - 4901 , - 3924 , - 2591 , - 2326 , - 4553 , - 5000 , - 5091 , - 554 , - 4205 , - 380 , - 1895 , - 4478 , - 3857 , - 1456 , - 4395 , - 2706 , - 3509 , - 2532 , - 1199 , - 934 , - 3161 , - 3608 , - 3699 , - 4858 , - 2813 , - 4684 , - 503 , - 3086 , - 2465 , - 64 , - 3003 , - 1314 , - 2117 , - 1140 , - 5503 , - 5238 , - 1769 , - 2216 , - 2307 , - 3466 , - 1421 , - 3292 , - 4807 , - 1694 , - 1073 , - 4368 , - 1611 , - 5618 , - 725 , - 5444 , - 4111 , - 3846 , - 377 , - 824 , - 915 , - 2074 , - 29 , - 1900 , - 3415 , - 302 , - 5377 , - 2976 , - 219 , - 4226 , - 5029 , - 4052 , - 2719 , - 2454 , - 4681 , - 5128 , - 5219 , - 682 , - 4333 , - 508 , - 2023 , - 4606 , - 3985 , - 1584 , - 4523 , - 2834 , - 3637 , - 2660 , - 1327 , - 1062 , - 3289 , - 3736 , - 3827 , - 4986 , - 2941 , - 4812 , - 631 , - 3214 , - 2593 , - 192 , - 3131 , - 1442 , - 2245 , - 1268 , - 5631 , - 5366 , - 1897 , - 2344 , - 2435 , - 3594 , - 1549 , - 3420 , - 4935 , - 1822 , - 1201 , - 4496 , - 1739 , - 50 , - 853 , - 5572 , - 4239 , - 3974 , - 505 , - 952 , - 1043 , - 2202 , - 157 , - 2028 , - 3543 , - 430 , - 5505 , - 3104 , - 347 , - 4354 , - 5157 , - 4180 , - 2847 , - 2582 , - 4809 , - 5256 , - 5347 , - 810 , - 4461 , - 636 , - 2151 , - 4734 , - 4113 , - 1712 , - 4651 , - 2962 , - 3765 , - 2788 , - 1455 , - 1190 , - 3417 , - 3864 , - 3955 , - 5114 , - 3069 , - 4940 , - 759 , - 3342 , - 2721 , - 320 , - 3259 , - 1570 , - 2373 , - 1396 , - 63 , - 5494 , - 2025 , - 2472 , - 2563 , - 3722 , - 1677 , - 3548 , - 5063 , - 1950 , - 1329 , - 4624 , - 1867 , - 178 , - 981 , - 4 , - 4367 , - 4102 , - 633 , - 1080 , - 1171 , - 2330 , - 285 , - 2156 , - 3671 , - 558 , - 5633 , - 3232 , - 475 , - 4482 , - 5285 , - 4308 , - 2975 , - 2710 , - 4937 , - 5384 , - 5475 , - 938 , - 4589 , - 764 , - 2279 , - 4862 , - 4241 , - 1840 , - 4779 , - 3090 , - 3893 , - 2916 , - 1583 , - 1318 , - 3545 , - 3992 , - 4083 , - 5242 , - 3197 , - 5068 , - 887 , - 3470 , - 2849 , - 448 , - 3387 , - 1698 , - 2501 , - 1524 , - 191 , - 5622 , - 2153 , - 2600 , - 2691 , - 3850 , - 1805 , - 3676 , - 5191 , - 2078 , - 1457 , - 4752 , - 1995 , - 306 , - 1109 , - 132 , - 4495 , - 4230 , - 761 , - 1208 , - 1299 , - 2458 , - 413 , - 2284 , - 3799 , - 686 , - 65 , - 3360 , - 603 , - 4610 , - 5413 , - 4436 , - 3103 , - 2838 , - 5065 , - 5512 , - 5603 , - 1066 , - 4717 , - 892 , - 2407 , - 4990 , - 4369 , - 1968 , - 4907 , - 3218 , - 4021 , - 3044 , - 1711 , - 1446 , - 3673 , - 4120 , - 4211 , - 5370 , - 3325 , - 5196 , - 1015 , - 3598 , - 2977 , - 576 , - 3515 , - 1826 , - 2629 , - 1652 , - 319 , - 54 , - 2281 , - 2728 , - 2819 , - 3978 , - 1933 , - 3804 , - 5319 , - 2206 , - 1585 , - 4880 , - 2123 , - 434 , - 1237 , - 260 , - 4623 , - 4358 , - 889 , - 1336 , - 1427 , - 2586 , - 541 , - 2412 , - 3927 , - 814 , - 193 , - 3488 , - 731 , - 4738 , - 5541 , - 4564 , - 3231 , - 2966 , - 5193 , - 5640 , - 35 , - 1194 , - 4845 , - 1020 , - 2535 , - 5118 , - 4497 , - 2096 , - 5035 , - 3346 , - 4149 , - 3172 , - 1839 , - 1574 , - 3801 , - 4248 , - 4339 , - 5498 , - 3453 , - 5324 , - 1143 , - 3726 , - 3105 , - 704 , - 3643 , - 1954 , - 2757 , - 1780 , - 447 , - 182 , - 2409 , - 2856 , - 2947 , - 4106 , - 2061 , - 3932 , - 5447 , - 2334 , - 1713 , - 5008 , - 2251 , - 562 , - 1365 , - 388 , - 4751 , - 4486 , - 1017 , - 1464 , - 1555 , - 2714 , - 669 , - 2540 , - 4055 , - 942 , - 321 , - 3616 , - 859 , - 4866 , - 5669 , - 4692 , - 3359 , - 3094 , - 5321 , - 72 , - 163 , - 1322 , - 4973 , - 1148 , - 2663 , - 5246 , - 4625 , - 2224 , - 5163 , - 3474 , - 4277 , - 3300 , - 1967 , - 1702 , - 3929 , - 4376 , - 4467 , - 5626 , - 3581 , - 5452 , - 1271 , - 3854 , - 3233 , - 832 , - 3771 , - 2082 , - 2885 , - 1908 , - 575 , - 310 , - 2537 , - 2984 , - 3075 , - 4234 , - 2189 , - 4060 , - 5575 , - 2462 , - 1841 , - 5136 , - 2379 , - 690 , - 1493 , - 516 , - 4879 , - 4614 , - 1145 , - 1592 , - 1683 , - 2842 , - 797 , - 2668 , - 4183 , - 1070 , - 449 , - 3744 , - 987 , - 4994 , - 101 , - 4820 , - 3487 , - 3222 , - 5449 , - 200 , - 291 , - 1450 , - 5101 , - 1276 , - 2791 , - 5374 , - 4753 , - 2352 , - 5291 , - 3602 , - 4405 , - 3428 , - 2095 , - 1830 , - 4057 , - 4504 , - 4595 , - 58 , - 3709 , - 5580 , - 1399 , - 3982 , - 3361 , - 960 , - 3899 , - 2210 , - 3013 , - 2036 , - 703 , - 438 , - 2665 , - 3112 , - 3203 , - 4362 , - 2317 , - 4188 , - 7 , - 2590 , - 1969 , - 5264 , - 2507 , - 818 , - 1621 , - 644 , - 5007 , - 4742 , - 1273 , - 1720 , - 1811 , - 2970 , - 925 , - 2796 , - 4311 , - 1198 , - 577 , - 3872 , - 1115 , - 5122 , - 229 , - 4948 , - 3615 , - 3350 , - 5577 , - 328 , - 419 , - 1578 , - 5229 , - 1404 , - 2919 , - 5502 , - 4881 , - 2480 , - 5419 , - 3730 , - 4533 , - 3556 , - 2223 , - 1958 , - 4185 , - 4632 , - 4723 , - 186 , - 3837 , - 12 , - 1527 , - 4110 , - 3489 , - 1088 , - 4027 , - 2338 , - 3141 , - 2164 , - 831 , - 566 , - 2793 , - 3240 , - 3331 , - 4490 , - 2445 , - 4316 , - 135 , - 2718 , - 2097 , - 5392 , - 2635 , - 946 , - 1749 , - 772 , - 5135 , - 4870 , - 1401 , - 1848 , - 1939 , - 3098 , - 1053 , - 2924 , - 4439 , - 1326 , - 705 , - 4000 , - 1243 , - 5250 , - 357 , - 5076 , - 3743 , - 3478 , - 9 , - 456 , - 547 , - 1706 , - 5357 , - 1532 , - 3047 , - 5630 , - 5009 , - 2608 , - 5547 , - 3858 , - 4661 , - 3684 , - 2351 , - 2086 , - 4313 , - 4760 , - 4851 , - 314 , - 3965 , - 140 , - 1655 , - 4238 , - 3617 , - 1216 , - 4155 , - 2466 , - 3269 , - 2292 , - 959 , - 694 , - 2921 , - 3368 , - 3459 , - 4618 , - 2573 , - 4444 , - 263 , - 2846 , - 2225 , - 5520 , - 2763 , - 1074 , - 1877 , - 900 , - 5263 , - 4998 , - 1529 , - 1976 , - 2067 , - 3226 , - 1181 , - 3052 , - 4567 , - 1454 , - 833 , - 4128 , - 1371 , - 5378 , - 485 , - 5204 , - 3871 , - 3606 , - 137 , - 584 , - 675 , - 1834 , - 5485 , - 1660 , - 3175 , - 62 , - 5137 , - 2736 , - 5675 , - 3986 , - 4789 , - 3812 , - 2479 , - 2214 , - 4441 , - 4888 , - 4979 , - 442 , - 4093 , - 268 , - 1783 , - 4366 , - 3745 , - 1344 , - 4283 , - 2594 , - 3397 , - 2420 , - 1087 , - 822 , - 3049 , - 3496 , - 3587 , - 4746 , - 2701 , - 4572 , - 391 , - 2974 , - 2353 , - 5648 , - 2891 , - 1202 , - 2005 , - 1028 , - 5391 , - 5126 , - 1657 , - 2104 , - 2195 , - 3354 , - 1309 , - 3180 , - 4695 , - 1582 , - 961 , - 4256 , - 1499 , - 5506 , - 613 , - 5332 , - 3999 , - 3734 , - 265 , - 712 , - 803 , - 1962 , - 5613 , - 1788 , - 3303 , - 190 , - 5265 , - 2864 , - 107 , - 4114 , - 4917 , - 3940 , - 2607 , - 2342 , - 4569 , - 5016 , - 5107 , - 570 , - 4221 , - 396 , - 1911 , - 4494 , - 3873 , - 1472 , - 4411 , - 2722 , - 3525 , - 2548 , - 1215 , - 950 , - 3177 , - 3624 , - 3715 , - 4874 , - 2829 , - 4700 , - 519 , - 3102 , - 2481 , - 80 , - 3019 , - 1330 , - 2133 , - 1156 , - 5519 , - 5254 , - 1785 , - 2232 , - 2323 , - 3482 , - 1437 , - 3308 , - 4823 , - 1710 , - 1089 , - 4384 , - 1627 , - 5634 , - 741 , - 5460 , - 4127 , - 3862 , - 393 , - 840 , - 931 , - 2090 , - 45 , - 1916 , - 3431 , - 318 , - 5393 , - 2992 , - 235 , - 4242 , - 5045 , - 4068 , - 2735 , - 2470 , - 4697 , - 5144 , - 5235 , - 698 , - 4349 , - 524 , - 2039 , - 4622 , - 4001 , - 1600 , - 4539 , - 2850 , - 3653 , - 2676 , - 1343 , - 1078 , - 3305 , - 3752 , - 3843 , - 5002 , - 2957 , - 4828 , - 647 , - 3230 , - 2609 , - 208 , - 3147 , - 1458 , - 2261 , - 1284 , - 5647 , - 5382 , - 1913 , - 2360 , - 2451 , - 3610 , - 1565 , - 3436 , - 4951 , - 1838 , - 1217 , - 4512 , - 1755 , - 66 , - 869 , - 5588 , - 4255 , - 3990 , - 521 , - 968 , - 1059 , - 2218 , - 173 , - 2044 , - 3559 , - 446 , - 5521 , - 3120 , - 363 , - 4370 , - 5173 , - 4196 , - 2863 , - 2598 , - 4825 , - 5272 , - 5363 , - 826 , - 4477 , - 652 , - 2167 , - 4750 , - 4129 , - 1728 , - 4667 , - 2978 , - 3781 , - 2804 , - 1471 , - 1206 , - 3433 , - 3880 , - 3971 , - 5130 , - 3085 , - 4956 , - 775 , - 3358 , - 2737 , - 336 , - 3275 , - 1586 , - 2389 , - 1412 , - 79 , - 5510 , - 2041 , - 2488 , - 2579 , - 3738 , - 1693 , - 3564 , - 5079 , - 1966 , - 1345 , - 4640 , - 1883 , - 194 , - 997 , - 20 , - 4383 , - 4118 , - 649 , - 1096 , - 1187 , - 2346 , - 301 , - 2172 , - 3687 , - 574 , - 5649 , - 3248 , - 491 , - 4498 , - 5301 , - 4324 , - 2991 , - 2726 , - 4953 , - 5400 , - 5491 , - 954 , - 4605 , - 780 , - 2295 , - 4878 , - 4257 , - 1856 , - 4795 , - 3106 , - 3909 , - 2932 , - 1599 , - 1334 , - 3561 , - 4008 , - 4099 , - 5258 , - 3213 , - 5084 , - 903 , - 3486 , - 2865 , - 464 , - 3403 , - 1714 , - 2517 , - 1540 , - 207 , - 5638 , - 2169 , - 2616 , - 2707 , - 3866 , - 1821 , - 3692 , - 5207 , - 2094 , - 1473 , - 4768 , - 2011 , - 322 , - 1125 , - 148 , - 4511 , - 4246 , - 777 , - 1224 , - 1315 , - 2474 , - 429 , - 2300 , - 3815 , - 702 , - 81 , - 3376 , - 619 , - 4626 , - 5429 , - 4452 , - 3119 , - 2854 , - 5081 , - 5528 , - 5619 , - 1082 , - 4733 , - 908 , - 2423 , - 5006 , - 4385 , - 1984 , - 4923 , - 3234 , - 4037 , - 3060 , - 1727 , - 1462 , - 3689 , - 4136 , - 4227 , - 5386 , - 3341 , - 5212 , - 1031 , - 3614 , - 2993 , - 592 , - 3531 , - 1842 , - 2645 , - 1668 , - 335 , - 70 , - 2297 , - 2744 , - 2835 , - 3994 , - 1949 , - 3820 , - 5335 , - 2222 , - 1601 , - 4896 , - 2139 , - 450 , - 1253 , - 276 , - 4639 , - 4374 , - 905 , - 1352 , - 1443 , - 2602 , - 557 , - 2428 , - 3943 , - 830 , - 209 , - 3504 , - 747 , - 4754 , - 5557 , - 4580 , - 3247 , - 2982 , - 5209 , - 5656 , - 51 , - 1210 , - 4861 , - 1036 , - 2551 , - 5134 , - 4513 , - 2112 , - 5051 , - 3362 , - 4165 , - 3188 , - 1855 , - 1590 , - 3817 , - 4264 , - 4355 , - 5514 , - 3469 , - 5340 , - 1159 , - 3742 , - 3121 , - 720 , - 3659 , - 1970 , - 2773 , - 1796 , - 463 , - 198 , - 2425 , - 2872 , - 2963 , - 4122 , - 2077 , - 3948 , - 5463 , - 2350 , - 1729 , - 5024 , - 2267 , - 578 , - 1381 , - 404 , - 4767 , - 4502 , - 1033 , - 1480 , - 1571 , - 2730 , - 685 , - 2556 , - 4071 , - 958 , - 337 , - 3632 , - 875 , - 4882 , - 5685 , - 4708 , - 3375 , - 3110 , - 5337 , - 88 , - 179 , - 1338 , - 4989 , - 1164 , - 2679 , - 5262 , - 4641 , - 2240 , - 5179 , - 3490 , - 4293 , - 3316 , - 1983 , - 1718 , - 3945 , - 4392 , - 4483 , - 5642 , - 3597 , - 5468 , - 1287 , - 3870 , - 3249 , - 848 , - 3787 , - 2098 , - 2901 , - 1924 , - 591 , - 326 , - 2553 , - 3000 , - 3091 , - 4250 , - 2205 , - 4076 , - 5591 , - 2478 , - 1857 , - 5152 , - 2395 , - 706 , - 1509 , - 532 , - 4895 , - 4630 , - 1161 , - 1608 , - 1699 , - 2858 , - 813 , - 2684 , - 4199 , - 1086 , - 465 , - 3760 , - 1003 , - 5010 , - 117 , - 4836 , - 3503 , - 3238 , - 5465 , - 216 , - 307 , - 1466 , - 5117 , - 1292 , - 2807 , - 5390 , - 4769 , - 2368 , - 5307 , - 3618 , - 4421 , - 3444 , - 2111 , - 1846 , - 4073 , - 4520 , - 4611 , - 74 , - 3725 , - 5596 , - 1415 , - 3998 , - 3377 , - 976 , - 3915 , - 2226 , - 3029 , - 2052 , - 719 , - 454 , - 2681 , - 3128 , - 3219 , - 4378 , - 2333 , - 4204 , - 23 , - 2606 , - 1985 , - 5280 , - 2523 , - 834 , - 1637 , - 660 , - 5023 , - 4758 , - 1289 , - 1736 , - 1827 , - 2986 , - 941 , - 2812 , - 4327 , - 1214 , - 593 , - 3888 , - 1131 , - 5138 , - 245 , - 4964 , - 3631 , - 3366 , - 5593 , - 344 , - 435 , - 1594 , - 5245 , - 1420 , - 2935 , - 5518 , - 4897 , - 2496 , - 5435 , - 3746 , - 4549 , - 3572 , - 2239 , - 1974 , - 4201 , - 4648 , - 4739 , - 202 , - 3853 , - 28 , - 1543 , - 4126 , - 3505 , - 1104 , - 4043 , - 2354 , - 3157 , - 2180 , - 847 , - 582 , - 2809 , - 3256 , - 3347 , - 4506 , - 2461 , - 4332 , - 151 , - 2734 , - 2113 , - 5408 , - 2651 , - 962 , - 1765 , - 788 , - 5151 , - 4886 , - 1417 , - 1864 , - 1955 , - 3114 , - 1069 , - 2940 , - 4455 , - 1342 , - 721 , - 4016 , - 1259 , - 5266 , - 373 , - 5092 , - 3759 , - 3494 , - 25 , - 472 , - 563 , - 1722 , - 5373 , - 1548 , - 3063 , - 5646 , - 5025 , - 2624 , - 5563 , - 3874 , - 4677 , - 3700 , - 2367 , - 2102 , - 4329 , - 4776 , - 4867 , - 330 , - 3981 , - 156 , - 1671 , - 4254 , - 3633 , - 1232 , - 4171 , - 2482 , - 3285 , - 2308 , - 975 , - 710 , - 2937 , - 3384 , - 3475 , - 4634 , - 2589 , - 4460 , - 279 , - 2862 , - 2241 , - 5536 , - 2779 , - 1090 , - 1893 , - 916 , - 5279 , - 5014 , - 1545 , - 1992 , - 2083 , - 3242 , - 1197 , - 3068 , - 4583 , - 1470 , - 849 , - 4144 , - 1387 , - 5394 , - 501 , - 5220 , - 3887 , - 3622 , - 153 , - 600 , - 691 , - 1850 , - 5501 , - 1676 , - 3191 , - 78 , - 5153 , - 2752 , - 5691 , - 4002 , - 4805 , - 3828 , - 2495 , - 2230 , - 4457 , - 4904 , - 4995 , - 458 , - 4109 , - 284 , - 1799 , - 4382 , - 3761 , - 1360 , - 4299 , - 2610 , - 3413 , - 2436 , - 1103 , - 838 , - 3065 , - 3512 , - 3603 , - 4762 , - 2717 , - 4588 , - 407 , - 2990 , - 2369 , - 5664 , - 2907 , - 1218 , - 2021 , - 1044 , - 5407 , - 5142 , - 1673 , - 2120 , - 2211 , - 3370 , - 1325 , - 3196 , - 4711 , - 1598 , - 977 , - 4272 , - 1515 , - 5522 , - 629 , - 5348 , - 4015 , - 3750 , - 281 , - 728 , - 819 , - 1978 , - 5629 , - 1804 , - 3319 , - 206 , - 5281 , - 2880 , - 123 , - 4130 , - 4933 , - 3956 , - 2623 , - 2358 , - 4585 , - 5032 , - 5123 , - 586 , - 4237 , - 412 , - 1927 , - 4510 , - 3889 , - 1488 , - 4427 , - 2738 , - 3541 , - 2564 , - 1231 , - 966 , - 3193 , - 3640 , - 3731 , - 4890 , - 2845 , - 4716 , - 535 , - 3118 , - 2497 , - 96 , - 3035 , - 1346 , - 2149 , - 1172 , - 5535 , - 5270 , - 1801 , - 2248 , - 2339 , - 3498 , - 1453 , - 3324 , - 4839 , - 1726 , - 1105 , - 4400 , - 1643 , - 5650 , - 757 , - 5476 , - 4143 , - 3878 , - 409 , - 856 , - 947 , - 2106 , - 61 , - 1932 , - 3447 , - 334 , - 5409 , - 3008 , - 251 , - 4258 , - 5061 , - 4084 , - 2751 , - 2486 , - 4713 , - 5160 , - 5251 , - 714 , - 4365 , - 540 , - 2055 , - 4638 , - 4017 , - 1616 , - 4555 , - 2866 , - 3669 , - 2692 , - 1359 , - 1094 , - 3321 , - 3768 , - 3859 , - 5018 , - 2973 , - 4844 , - 663 , - 3246 , - 2625 , - 224 , - 3163 , - 1474 , - 2277 , - 1300 , - 5663 , - 5398 , - 1929 , - 2376 , - 2467 , - 3626 , - 1581 , - 3452 , - 4967 , - 1854 , - 1233 , - 4528 , - 1771 , - 82 , - 885 , - 5604 , - 4271 , - 4006 , - 537 , - 984 , - 1075 , - 2234 , - 189 , - 2060 , - 3575 , - 462 , - 5537 , - 3136 , - 379 , - 4386 , - 5189 , - 4212 , - 2879 , - 2614 , - 4841 , - 5288 , - 5379 , - 842 , - 4493 , - 668 , - 2183 , - 4766 , - 4145 , - 1744 , - 4683 , - 2994 , - 3797 , - 2820 , - 1487 , - 1222 , - 3449 , - 3896 , - 3987 , - 5146 , - 3101 , - 4972 , - 791 , - 3374 , - 2753 , - 352 , - 3291 , - 1602 , - 2405 , - 1428 , - 95 , - 5526 , - 2057 , - 2504 , - 2595 , - 3754 , - 1709 , - 3580 , - 5095 , - 1982 , - 1361 , - 4656 , - 1899 , - 210 , - 1013 , - 36 , - 4399 , - 4134 , - 665 , - 1112 , - 1203 , - 2362 , - 317 , - 2188 , - 3703 , - 590 , - 5665 , - 3264 , - 507 , - 4514 , - 5317 , - 4340 , - 3007 , - 2742 , - 4969 , - 5416 , - 5507 , - 970 , - 4621 , - 796 , - 2311 , - 4894 , - 4273 , - 1872 , - 4811 , - 3122 , - 3925 , - 2948 , - 1615 , - 1350 , - 3577 , - 4024 , - 4115 , - 5274 , - 3229 , - 5100 , - 919 , - 3502 , - 2881 , - 480 , - 3419 , - 1730 , - 2533 , - 1556 , - 223 , - 5654 , - 2185 , - 2632 , - 2723 , - 3882 , - 1837 , - 3708 , - 5223 , - 2110 , - 1489 , - 4784 , - 2027 , - 338 , - 1141 , - 164 , - 4527 , - 4262 , - 793 , - 1240 , - 1331 , - 2490 , - 445 , - 2316 , - 3831 , - 718 , - 97 , - 3392 , - 635 , - 4642 , - 5445 , - 4468 , - 3135 , - 2870 , - 5097 , - 5544 , - 5635 , - 1098 , - 4749 , - 924 , - 2439 , - 5022 , - 4401 , - 2000 , - 4939 , - 3250 , - 4053 , - 3076 , - 1743 , - 1478 , - 3705 , - 4152 , - 4243 , - 5402 , - 3357 , - 5228 , - 1047 , - 3630 , - 3009 , - 608 , - 3547 , - 1858 , - 2661 , - 1684 , - 351 , - 86 , - 2313 , - 2760 , - 2851 , - 4010 , - 1965 , - 3836 , - 5351 , - 2238 , - 1617 , - 4912 , - 2155 , - 466 , - 1269 , - 292 , - 4655 , - 4390 , - 921 , - 1368 , - 1459 , - 2618 , - 573 , - 2444 , - 3959 , - 846 , - 225 , - 3520 , - 763 , - 4770 , - 5573 , - 4596 , - 3263 , - 2998 , - 5225 , - 5672 , - 67 , - 1226 , - 4877 , - 1052 , - 2567 , - 5150 , - 4529 , - 2128 , - 5067 , - 3378 , - 4181 , - 3204 , - 1871 , - 1606 , - 3833 , - 4280 , - 4371 , - 5530 , - 3485 , - 5356 , - 1175 , - 3758 , - 3137 , - 736 , - 3675 , - 1986 , - 2789 , - 1812 , - 479 , - 214 , - 2441 , - 2888 , - 2979 , - 4138 , - 2093 , - 3964 , - 5479 , - 2366 , - 1745 , - 5040 , - 2283 , - 594 , - 1397 , - 420 , - 4783 , - 4518 , - 1049 , - 1496 , - 1587 , - 2746 , - 701 , - 2572 , - 4087 , - 974 , - 353 , - 3648 , - 891 , - 4898 , - 5 , - 4724 , - 3391 , - 3126 , - 5353 , - 104 , - 195 , - 1354 , - 5005 , - 1180 , - 2695 , - 5278 , - 4657 , - 2256 , - 5195 , - 3506 , - 4309 , - 3332 , - 1999 , - 1734 , - 3961 , - 4408 , - 4499 , - 5658 , - 3613 , - 5484 , - 1303 , - 3886 , - 3265 , - 864 , - 3803 , - 2114 , - 2917 , - 1940 , - 607 , - 342 , - 2569 , - 3016 , - 3107 , - 4266 , - 2221 , - 4092 , - 5607 , - 2494 , - 1873 , - 5168 , - 2411 , - 722 , - 1525 , - 548 , - 4911 , - 4646 , - 1177 , - 1624 , - 1715 , - 2874 , - 829 , - 2700 , - 4215 , - 1102 , - 481 , - 3776 , - 1019 , - 5026 , - 133 , - 4852 , - 3519 , - 3254 , - 5481 , - 232 , - 323 , - 1482 , - 5133 , - 1308 , - 2823 , - 5406 , - 4785 , - 2384 , - 5323 , - 3634 , - 4437 , - 3460 , - 2127 , - 1862 , - 4089 , - 4536 , - 4627 , - 90 , - 3741 , - 5612 , - 1431 , - 4014 , - 3393 , - 992 , - 3931 , - 2242 , - 3045 , - 2068 , - 735 , - 470 , - 2697 , - 3144 , - 3235 , - 4394 , - 2349 , - 4220 , - 39 , - 2622 , - 2001 , - 5296 , - 2539 , - 850 , - 1653 , - 676 , - 5039 , - 4774 , - 1305 , - 1752 , - 1843 , - 3002 , - 957 , - 2828 , - 4343 , - 1230 , - 609 , - 3904 , - 1147 , - 5154 , - 261 , - 4980 , - 3647 , - 3382 , - 5609 , - 360 , - 451 , - 1610 , - 5261 , - 1436 , - 2951 , - 5534 , - 4913 , - 2512 , - 5451 , - 3762 , - 4565 , - 3588 , - 2255 , - 1990 , - 4217 , - 4664 , - 4755 , - 218 , - 3869 , - 44 , - 1559 , - 4142 , - 3521 , - 1120 , - 4059 , - 2370 , - 3173 , - 2196 , - 863 , - 598 , - 2825 , - 3272 , - 3363 , - 4522 , - 2477 , - 4348 , - 167 , - 2750 , - 2129 , - 5424 , - 2667 , - 978 , - 1781 , - 804 , - 5167 , - 4902 , - 1433 , - 1880 , - 1971 , - 3130 , - 1085 , - 2956 , - 4471 , - 1358 , - 737 , - 4032 , - 1275 , - 5282 , - 389 , - 5108 , - 3775 , - 3510 , - 41 , - 488 , - 579 , - 1738 , - 5389 , - 1564 , - 3079 , - 5662 , - 5041 , - 2640 , - 5579 , - 3890 , - 4693 , - 3716 , - 2383 , - 2118 , - 4345 , - 4792 , - 4883 , - 346 , - 3997 , - 172 , - 1687 , - 4270 , - 3649 , - 1248 , - 4187 , - 2498 , - 3301 , - 2324 , - 991 , - 726 , - 2953 , - 3400 , - 3491 , - 4650 , - 2605 , - 4476 , - 295 , - 2878 , - 2257 , - 5552 , - 2795 , - 1106 , - 1909 , - 932 , - 5295 , - 5030 , - 1561 , - 2008 , - 2099 , - 3258 , - 1213 , - 3084 , - 4599 , - 1486 , - 865 , - 4160 , - 1403 , - 5410 , - 517 , - 5236 , - 3903 , - 3638 , - 169 , - 616 , - 707 , - 1866 , - 5517 , - 1692 , - 3207 , - 94 , - 5169 , - 2768 , - 11 , - 4018 , - 4821 , - 3844 , - 2511 , - 2246 , - 4473 , - 4920 , - 5011 , - 474 , - 4125 , - 300 , - 1815 , - 4398 , - 3777 , - 1376 , - 4315 , - 2626 , - 3429 , - 2452 , - 1119 , - 854 , - 3081 , - 3528 , - 3619 , - 4778 , - 2733 , - 4604 , - 423 , - 3006 , - 2385 , - 5680 , - 2923 , - 1234 , - 2037 , - 1060 , - 5423 , - 5158 , - 1689 , - 2136 , - 2227 , - 3386 , - 1341 , - 3212 , - 4727 , - 1614 , - 993 , - 4288 , - 1531 , - 5538 , - 645 , - 5364 , - 4031 , - 3766 , - 297 , - 744 , - 835 , - 1994 , - 5645 , - 1820 , - 3335 , - 222 , - 5297 , - 2896 , - 139 , - 4146 , - 4949 , - 3972 , - 2639 , - 2374 , - 4601 , - 5048 , - 5139 , - 602 , - 4253 , - 428 , - 1943 , - 4526 , - 3905 , - 1504 , - 4443 , - 2754 , - 3557 , - 2580 , - 1247 , - 982 , - 3209 , - 3656 , - 3747 , - 4906 , - 2861 , - 4732 , - 551 , - 3134 , - 2513 , - 112 , - 3051 , - 1362 , - 2165 , - 1188 , - 5551 , - 5286 , - 1817 , - 2264 , - 2355 , - 3514 , - 1469 , - 3340 , - 4855 , - 1742 , - 1121 , - 4416 , - 1659 , - 5666 , - 773 , - 5492 , - 4159 , - 3894 , - 425 , - 872 , - 963 , - 2122 , - 77 , - 1948 , - 3463 , - 350 , - 5425 , - 3024 , - 267 , - 4274 , - 5077 , - 4100 , - 2767 , - 2502 , - 4729 , - 5176 , - 5267 , - 730 , - 4381 , - 556 , - 2071 , - 4654 , - 4033 , - 1632 , - 4571 , - 2882 , - 3685 , - 2708 , - 1375 , - 1110 , - 3337 , - 3784 , - 3875 , - 5034 , - 2989 , - 4860 , - 679 , - 3262 , - 2641 , - 240 , - 3179 , - 1490 , - 2293 , - 1316 , - 5679 , - 5414 , - 1945 , - 2392 , - 2483 , - 3642 , - 1597 , - 3468 , - 4983 , - 1870 , - 1249 , - 4544 , - 1787 , - 98 , - 901 , - 5620 , - 4287 , - 4022 , - 553 , - 1000 , - 1091 , - 2250 , - 205 , - 2076 , - 3591 , - 478 , - 5553 , - 3152 , - 395 , - 4402 , - 5205 , - 4228 , - 2895 , - 2630 , - 4857 , - 5304 , - 5395 , - 858 , - 4509 , - 684 , - 2199 , - 4782 , - 4161 , - 1760 , - 4699 , - 3010 , - 3813 , - 2836 , - 1503 , - 1238 , - 3465 , - 3912 , - 4003 , - 5162 , - 3117 , - 4988 , - 807 , - 3390 , - 2769 , - 368 , - 3307 , - 1618 , - 2421 , - 1444 , - 111 , - 5542 , - 2073 , - 2520 , - 2611 , - 3770 , - 1725 , - 3596 , - 5111 , - 1998 , - 1377 , - 4672 , - 1915 , - 226 , - 1029 , - 52 , - 4415 , - 4150 , - 681 , - 1128 , - 1219 , - 2378 , - 333 , - 2204 , - 3719 , - 606 , - 5681 , - 3280 , - 523 , - 4530 , - 5333 , - 4356 , - 3023 , - 2758 , - 4985 , - 5432 , - 5523 , - 986 , - 4637 , - 812 , - 2327 , - 4910 , - 4289 , - 1888 , - 4827 , - 3138 , - 3941 , - 2964 , - 1631 , - 1366 , - 3593 , - 4040 , - 4131 , - 5290 , - 3245 , - 5116 , - 935 , - 3518 , - 2897 , - 496 , - 3435 , - 1746 , - 2549 , - 1572 , - 239 , - 5670 , - 2201 , - 2648 , - 2739 , - 3898 , - 1853 , - 3724 , - 5239 , - 2126 , - 1505 , - 4800 , - 2043 , - 354 , - 1157 , - 180 , - 4543 , - 4278 , - 809 , - 1256 , - 1347 , - 2506 , - 461 , - 2332 , - 3847 , - 734 , - 113 , - 3408 , - 651 , - 4658 , - 5461 , - 4484 , - 3151 , - 2886 , - 5113 , - 5560 , - 5651 , - 1114 , - 4765 , - 940 , - 2455 , - 5038 , - 4417 , - 2016 , - 4955 , - 3266 , - 4069 , - 3092 , - 1759 , - 1494 , - 3721 , - 4168 , - 4259 , - 5418 , - 3373 , - 5244 , - 1063 , - 3646 , - 3025 , - 624 , - 3563 , - 1874 , - 2677 , - 1700 , - 367 , - 102 , - 2329 , - 2776 , - 2867 , - 4026 , - 1981 , - 3852 , - 5367 , - 2254 , - 1633 , - 4928 , - 2171 , - 482 , - 1285 , - 308 , - 4671 , - 4406 , - 937 , - 1384 , - 1475 , - 2634 , - 589 , - 2460 , - 3975 , - 862 , - 241 , - 3536 , - 779 , - 4786 , - 5589 , - 4612 , - 3279 , - 3014 , - 5241 , - 5688 , - 83 , - 1242 , - 4893 , - 1068 , - 2583 , - 5166 , - 4545 , - 2144 , - 5083 , - 3394 , - 4197 , - 3220 , - 1887 , - 1622 , - 3849 , - 4296 , - 4387 , - 5546 , - 3501 , - 5372 , - 1191 , - 3774 , - 3153 , - 752 , - 3691 , - 2002 , - 2805 , - 1828 , - 495 , - 230 , - 2457 , - 2904 , - 2995 , - 4154 , - 2109 , - 3980 , - 5495 , - 2382 , - 1761 , - 5056 , - 2299 , - 610 , - 1413 , - 436 , - 4799 , - 4534 , - 1065 , - 1512 , - 1603 , - 2762 , - 717 , - 2588 , - 4103 , - 990 , - 369 , - 3664 , - 907 , - 4914 , - 21 , - 4740 , - 3407 , - 3142 , - 5369 , - 120 , - 211 , - 1370 , - 5021 , - 1196 , - 2711 , - 5294 , - 4673 , - 2272 , - 5211 , - 3522 , - 4325 , - 3348 , - 2015 , - 1750 , - 3977 , - 4424 , - 4515 , - 5674 , - 3629 , - 5500 , - 1319 , - 3902 , - 3281 , - 880 , - 3819 , - 2130 , - 2933 , - 1956 , - 623 , - 358 , - 2585 , - 3032 , - 3123 , - 4282 , - 2237 , - 4108 , - 5623 , - 2510 , - 1889 , - 5184 , - 2427 , - 738 , - 1541 , - 564 , - 4927 , - 4662 , - 1193 , - 1640 , - 1731 , - 2890 , - 845 , - 2716 , - 4231 , - 1118 , - 497 , - 3792 , - 1035 , - 5042 , - 149 , - 4868 , - 3535 , - 3270 , - 5497 , - 248 , - 339 , - 1498 , - 5149 , - 1324 , - 2839 , - 5422 , - 4801 , - 2400 , - 5339 , - 3650 , - 4453 , - 3476 , - 2143 , - 1878 , - 4105 , - 4552 , - 4643 , - 106 , - 3757 , - 5628 , - 1447 , - 4030 , - 3409 , - 1008 , - 3947 , - 2258 , - 3061 , - 2084 , - 751 , - 486 , - 2713 , - 3160 , - 3251 , - 4410 , - 2365 , - 4236 , - 55 , - 2638 , - 2017 , - 5312 , - 2555 , - 866 , - 1669 , - 692 , - 5055 , - 4790 , - 1321 , - 1768 , - 1859 , - 3018 , - 973 , - 2844 , - 4359 , - 1246 , - 625 , - 3920 , - 1163 , - 5170 , - 277 , - 4996 , - 3663 , - 3398 , - 5625 , - 376 , - 467 , - 1626 , - 5277 , - 1452 , - 2967 , - 5550 , - 4929 , - 2528 , - 5467 , - 3778 , - 4581 , - 3604 , - 2271 , - 2006 , - 4233 , - 4680 , - 4771 , - 234 , - 3885 , - 60 , - 1575 , - 4158 , - 3537 , - 1136 , - 4075 , - 2386 , - 3189 , - 2212 , - 879 , - 614 , - 2841 , - 3288 , - 3379 , - 4538 , - 2493 , - 4364 , - 183 , - 2766 , - 2145 , - 5440 , - 2683 , - 994 , - 1797 , - 820 , - 5183 , - 4918 , - 1449 , - 1896 , - 1987 , - 3146 , - 1101 , - 2972 , - 4487 , - 1374 , - 753 , - 4048 , - 1291 , - 5298 , - 405 , - 5124 , - 3791 , - 3526 , - 57 , - 504 , - 595 , - 1754 , - 5405 , - 1580 , - 3095 , - 5678 , - 5057 , - 2656 , - 5595 , - 3906 , - 4709 , - 3732 , - 2399 , - 2134 , - 4361 , - 4808 , - 4899 , - 362 , - 4013 , - 188 , - 1703 , - 4286 , - 3665 , - 1264 , - 4203 , - 2514 , - 3317 , - 2340 , - 1007 , - 742 , - 2969 , - 3416 , - 3507 , - 4666 , - 2621 , - 4492 , - 311 , - 2894 , - 2273 , - 5568 , - 2811 , - 1122 , - 1925 , - 948 , - 5311 , - 5046 , - 1577 , - 2024 , - 2115 , - 3274 , - 1229 , - 3100 , - 4615 , - 1502 , - 881 , - 4176 , - 1419 , - 5426 , - 533 , - 5252 , - 3919 , - 3654 , - 185 , - 632 , - 723 , - 1882 , - 5533 , - 1708 , - 3223 , - 110 , - 5185 , - 2784 , - 27 , - 4034 , - 4837 , - 3860 , - 2527 , - 2262 , - 4489 , - 4936 , - 5027 , - 490 , - 4141 , - 316 , - 1831 , - 4414 , - 3793 , - 1392 , - 4331 , - 2642 , - 3445 , - 2468 , - 1135 , - 870 , - 3097 , - 3544 , - 3635 , - 4794 , - 2749 , - 4620 , - 439 , - 3022 , - 2401 , - 0 , - 1001 , - 3682 , - 2283 , - 2564 , - 4525 , - 2406 , - 1967 , - 3208 , - 369 , - 4970 , - 5491 , - 1932 , - 53 , - 5614 , - 1335 , - 4496 , - 3577 , - 4338 , - 1019 , - 5140 , - 5181 , - 1142 , - 4543 , - 3864 , - 4865 , - 1786 , - 387 , - 668 , - 2629 , - 510 , - 71 , - 1312 , - 4233 , - 3074 , - 3595 , - 36 , - 3917 , - 3718 , - 5199 , - 2600 , - 1681 , - 2442 , - 4883 , - 3244 , - 3285 , - 5006 , - 2647 , - 1968 , - 2969 , - 5650 , - 4251 , - 4532 , - 733 , - 4374 , - 3935 , - 5176 , - 2337 , - 1178 , - 1699 , - 3900 , - 2021 , - 1822 , - 3303 , - 704 , - 5545 , - 546 , - 2987 , - 1348 , - 1389 , - 3110 , - 751 , - 72 , - 1073 , - 3754 , - 2355 , - 2636 , - 4597 , - 2478 , - 2039 , - 3280 , - 441 , - 5042 , - 5563 , - 2004 , - 125 , - 5686 , - 1407 , - 4568 , - 3649 , - 4410 , - 1091 , - 5212 , - 5253 , - 1214 , - 4615 , - 3936 , - 4937 , - 1858 , - 459 , - 740 , - 2701 , - 582 , - 143 , - 1384 , - 4305 , - 3146 , - 3667 , - 108 , - 3989 , - 3790 , - 5271 , - 2672 , - 1753 , - 2514 , - 4955 , - 3316 , - 3357 , - 5078 , - 2719 , - 2040 , - 3041 , - 5722 , - 4323 , - 4604 , - 805 , - 4446 , - 4007 , - 5248 , - 2409 , - 1250 , - 1771 , - 3972 , - 2093 , - 1894 , - 3375 , - 776 , - 5617 , - 618 , - 3059 , - 1420 , - 1461 , - 3182 , - 823 , - 144 , - 1145 , - 3826 , - 2427 , - 2708 , - 4669 , - 2550 , - 2111 , - 3352 , - 513 , - 5114 , - 5635 , - 2076 , - 197 , - 5758 , - 1479 , - 4640 , - 3721 , - 4482 , - 1163 , - 5284 , - 5325 , - 1286 , - 4687 , - 4008 , - 5009 , - 1930 , - 531 , - 812 , - 2773 , - 654 , - 215 , - 1456 , - 4377 , - 3218 , - 3739 , - 180 , - 4061 , - 3862 , - 5343 , - 2744 , - 1825 , - 2586 , - 5027 , - 3388 , - 3429 , - 5150 , - 2791 , - 2112 , - 3113 , - 34 , - 4395 , - 4676 , - 877 , - 4518 , - 4079 , - 5320 , - 2481 , - 1322 , - 1843 , - 4044 , - 2165 , - 1966 , - 3447 , - 848 , - 5689 , - 690 , - 3131 , - 1492 , - 1533 , - 3254 , - 895 , - 216 , - 1217 , - 3898 , - 2499 , - 2780 , - 4741 , - 2622 , - 2183 , - 3424 , - 585 , - 5186 , - 5707 , - 2148 , - 269 , - 70 , - 1551 , - 4712 , - 3793 , - 4554 , - 1235 , - 5356 , - 5397 , - 1358 , - 4759 , - 4080 , - 5081 , - 2002 , - 603 , - 884 , - 2845 , - 726 , - 287 , - 1528 , - 4449 , - 3290 , - 3811 , - 252 , - 4133 , - 3934 , - 5415 , - 2816 , - 1897 , - 2658 , - 5099 , - 3460 , - 3501 , - 5222 , - 2863 , - 2184 , - 3185 , - 106 , - 4467 , - 4748 , - 949 , - 4590 , - 4151 , - 5392 , - 2553 , - 1394 , - 1915 , - 4116 , - 2237 , - 2038 , - 3519 , - 920 , - 1 , - 762 , - 3203 , - 1564 , - 1605 , - 3326 , - 967 , - 288 , - 1289 , - 3970 , - 2571 , - 2852 , - 4813 , - 2694 , - 2255 , - 3496 , - 657 , - 5258 , - 19 , - 2220 , - 341 , - 142 , - 1623 , - 4784 , - 3865 , - 4626 , - 1307 , - 5428 , - 5469 , - 1430 , - 4831 , - 4152 , - 5153 , - 2074 , - 675 , - 956 , - 2917 , - 798 , - 359 , - 1600 , - 4521 , - 3362 , - 3883 , - 324 , - 4205 , - 4006 , - 5487 , - 2888 , - 1969 , - 2730 , - 5171 , - 3532 , - 3573 , - 5294 , - 2935 , - 2256 , - 3257 , - 178 , - 4539 , - 4820 , - 1021 , - 4662 , - 4223 , - 5464 , - 2625 , - 1466 , - 1987 , - 4188 , - 2309 , - 2110 , - 3591 , - 992 , - 73 , - 834 , - 3275 , - 1636 , - 1677 , - 3398 , - 1039 , - 360 , - 1361 , - 4042 , - 2643 , - 2924 , - 4885 , - 2766 , - 2327 , - 3568 , - 729 , - 5330 , - 91 , - 2292 , - 413 , - 214 , - 1695 , - 4856 , - 3937 , - 4698 , - 1379 , - 5500 , - 5541 , - 1502 , - 4903 , - 4224 , - 5225 , - 2146 , - 747 , - 1028 , - 2989 , - 870 , - 431 , - 1672 , - 4593 , - 3434 , - 3955 , - 396 , - 4277 , - 4078 , - 5559 , - 2960 , - 2041 , - 2802 , - 5243 , - 3604 , - 3645 , - 5366 , - 3007 , - 2328 , - 3329 , - 250 , - 4611 , - 4892 , - 1093 , - 4734 , - 4295 , - 5536 , - 2697 , - 1538 , - 2059 , - 4260 , - 2381 , - 2182 , - 3663 , - 1064 , - 145 , - 906 , - 3347 , - 1708 , - 1749 , - 3470 , - 1111 , - 432 , - 1433 , - 4114 , - 2715 , - 2996 , - 4957 , - 2838 , - 2399 , - 3640 , - 801 , - 5402 , - 163 , - 2364 , - 485 , - 286 , - 1767 , - 4928 , - 4009 , - 4770 , - 1451 , - 5572 , - 5613 , - 1574 , - 4975 , - 4296 , - 5297 , - 2218 , - 819 , - 1100 , - 3061 , - 942 , - 503 , - 1744 , - 4665 , - 3506 , - 4027 , - 468 , - 4349 , - 4150 , - 5631 , - 3032 , - 2113 , - 2874 , - 5315 , - 3676 , - 3717 , - 5438 , - 3079 , - 2400 , - 3401 , - 322 , - 4683 , - 4964 , - 1165 , - 4806 , - 4367 , - 5608 , - 2769 , - 1610 , - 2131 , - 4332 , - 2453 , - 2254 , - 3735 , - 1136 , - 217 , - 978 , - 3419 , - 1780 , - 1821 , - 3542 , - 1183 , - 504 , - 1505 , - 4186 , - 2787 , - 3068 , - 5029 , - 2910 , - 2471 , - 3712 , - 873 , - 5474 , - 235 , - 2436 , - 557 , - 358 , - 1839 , - 5000 , - 4081 , - 4842 , - 1523 , - 5644 , - 5685 , - 1646 , - 5047 , - 4368 , - 5369 , - 2290 , - 891 , - 1172 , - 3133 , - 1014 , - 575 , - 1816 , - 4737 , - 3578 , - 4099 , - 540 , - 4421 , - 4222 , - 5703 , - 3104 , - 2185 , - 2946 , - 5387 , - 3748 , - 3789 , - 5510 , - 3151 , - 2472 , - 3473 , - 394 , - 4755 , - 5036 , - 1237 , - 4878 , - 4439 , - 5680 , - 2841 , - 1682 , - 2203 , - 4404 , - 2525 , - 2326 , - 3807 , - 1208 , - 289 , - 1050 , - 3491 , - 1852 , - 1893 , - 3614 , - 1255 , - 576 , - 1577 , - 4258 , - 2859 , - 3140 , - 5101 , - 2982 , - 2543 , - 3784 , - 945 , - 5546 , - 307 , - 2508 , - 629 , - 430 , - 1911 , - 5072 , - 4153 , - 4914 , - 1595 , - 5716 , - 5757 , - 1718 , - 5119 , - 4440 , - 5441 , - 2362 , - 963 , - 1244 , - 3205 , - 1086 , - 647 , - 1888 , - 4809 , - 3650 , - 4171 , - 612 , - 4493 , - 4294 , - 15 , - 3176 , - 2257 , - 3018 , - 5459 , - 3820 , - 3861 , - 5582 , - 3223 , - 2544 , - 3545 , - 466 , - 4827 , - 5108 , - 1309 , - 4950 , - 4511 , - 5752 , - 2913 , - 1754 , - 2275 , - 4476 , - 2597 , - 2398 , - 3879 , - 1280 , - 361 , - 1122 , - 3563 , - 1924 , - 1965 , - 3686 , - 1327 , - 648 , - 1649 , - 4330 , - 2931 , - 3212 , - 5173 , - 3054 , - 2615 , - 3856 , - 1017 , - 5618 , - 379 , - 2580 , - 701 , - 502 , - 1983 , - 5144 , - 4225 , - 4986 , - 1667 , - 28 , - 69 , - 1790 , - 5191 , - 4512 , - 5513 , - 2434 , - 1035 , - 1316 , - 3277 , - 1158 , - 719 , - 1960 , - 4881 , - 3722 , - 4243 , - 684 , - 4565 , - 4366 , - 87 , - 3248 , - 2329 , - 3090 , - 5531 , - 3892 , - 3933 , - 5654 , - 3295 , - 2616 , - 3617 , - 538 , - 4899 , - 5180 , - 1381 , - 5022 , - 4583 , - 64 , - 2985 , - 1826 , - 2347 , - 4548 , - 2669 , - 2470 , - 3951 , - 1352 , - 433 , - 1194 , - 3635 , - 1996 , - 2037 , - 3758 , - 1399 , - 720 , - 1721 , - 4402 , - 3003 , - 3284 , - 5245 , - 3126 , - 2687 , - 3928 , - 1089 , - 5690 , - 451 , - 2652 , - 773 , - 574 , - 2055 , - 5216 , - 4297 , - 5058 , - 1739 , - 100 , - 141 , - 1862 , - 5263 , - 4584 , - 5585 , - 2506 , - 1107 , - 1388 , - 3349 , - 1230 , - 791 , - 2032 , - 4953 , - 3794 , - 4315 , - 756 , - 4637 , - 4438 , - 159 , - 3320 , - 2401 , - 3162 , - 5603 , - 3964 , - 4005 , - 5726 , - 3367 , - 2688 , - 3689 , - 610 , - 4971 , - 5252 , - 1453 , - 5094 , - 4655 , - 136 , - 3057 , - 1898 , - 2419 , - 4620 , - 2741 , - 2542 , - 4023 , - 1424 , - 505 , - 1266 , - 3707 , - 2068 , - 2109 , - 3830 , - 1471 , - 792 , - 1793 , - 4474 , - 3075 , - 3356 , - 5317 , - 3198 , - 2759 , - 4000 , - 1161 , - 2 , - 523 , - 2724 , - 845 , - 646 , - 2127 , - 5288 , - 4369 , - 5130 , - 1811 , - 172 , - 213 , - 1934 , - 5335 , - 4656 , - 5657 , - 2578 , - 1179 , - 1460 , - 3421 , - 1302 , - 863 , - 2104 , - 5025 , - 3866 , - 4387 , - 828 , - 4709 , - 4510 , - 231 , - 3392 , - 2473 , - 3234 , - 5675 , - 4036 , - 4077 , - 38 , - 3439 , - 2760 , - 3761 , - 682 , - 5043 , - 5324 , - 1525 , - 5166 , - 4727 , - 208 , - 3129 , - 1970 , - 2491 , - 4692 , - 2813 , - 2614 , - 4095 , - 1496 , - 577 , - 1338 , - 3779 , - 2140 , - 2181 , - 3902 , - 1543 , - 864 , - 1865 , - 4546 , - 3147 , - 3428 , - 5389 , - 3270 , - 2831 , - 4072 , - 1233 , - 74 , - 595 , - 2796 , - 917 , - 718 , - 2199 , - 5360 , - 4441 , - 5202 , - 1883 , - 244 , - 285 , - 2006 , - 5407 , - 4728 , - 5729 , - 2650 , - 1251 , - 1532 , - 3493 , - 1374 , - 935 , - 2176 , - 5097 , - 3938 , - 4459 , - 900 , - 4781 , - 4582 , - 303 , - 3464 , - 2545 , - 3306 , - 5747 , - 4108 , - 4149 , - 110 , - 3511 , - 2832 , - 3833 , - 754 , - 5115 , - 5396 , - 1597 , - 5238 , - 4799 , - 280 , - 3201 , - 2042 , - 2563 , - 4764 , - 2885 , - 2686 , - 4167 , - 1568 , - 649 , - 1410 , - 3851 , - 2212 , - 2253 , - 3974 , - 1615 , - 936 , - 1937 , - 4618 , - 3219 , - 3500 , - 5461 , - 3342 , - 2903 , - 4144 , - 1305 , - 146 , - 667 , - 2868 , - 989 , - 790 , - 2271 , - 5432 , - 4513 , - 5274 , - 1955 , - 316 , - 357 , - 2078 , - 5479 , - 4800 , - 41 , - 2722 , - 1323 , - 1604 , - 3565 , - 1446 , - 1007 , - 2248 , - 5169 , - 4010 , - 4531 , - 972 , - 4853 , - 4654 , - 375 , - 3536 , - 2617 , - 3378 , - 59 , - 4180 , - 4221 , - 182 , - 3583 , - 2904 , - 3905 , - 826 , - 5187 , - 5468 , - 1669 , - 5310 , - 4871 , - 352 , - 3273 , - 2114 , - 2635 , - 4836 , - 2957 , - 2758 , - 4239 , - 1640 , - 721 , - 1482 , - 3923 , - 2284 , - 2325 , - 4046 , - 1687 , - 1008 , - 2009 , - 4690 , - 3291 , - 3572 , - 5533 , - 3414 , - 2975 , - 4216 , - 1377 , - 218 , - 739 , - 2940 , - 1061 , - 862 , - 2343 , - 5504 , - 4585 , - 5346 , - 2027 , - 388 , - 429 , - 2150 , - 5551 , - 4872 , - 113 , - 2794 , - 1395 , - 1676 , - 3637 , - 1518 , - 1079 , - 2320 , - 5241 , - 4082 , - 4603 , - 1044 , - 4925 , - 4726 , - 447 , - 3608 , - 2689 , - 3450 , - 131 , - 4252 , - 4293 , - 254 , - 3655 , - 2976 , - 3977 , - 898 , - 5259 , - 5540 , - 1741 , - 5382 , - 4943 , - 424 , - 3345 , - 2186 , - 2707 , - 4908 , - 3029 , - 2830 , - 4311 , - 1712 , - 793 , - 1554 , - 3995 , - 2356 , - 2397 , - 4118 , - 1759 , - 1080 , - 2081 , - 4762 , - 3363 , - 3644 , - 5605 , - 3486 , - 3047 , - 4288 , - 1449 , - 290 , - 811 , - 3012 , - 1133 , - 934 , - 2415 , - 5576 , - 4657 , - 5418 , - 2099 , - 460 , - 501 , - 2222 , - 5623 , - 4944 , - 185 , - 2866 , - 1467 , - 1748 , - 3709 , - 1590 , - 1151 , - 2392 , - 5313 , - 4154 , - 4675 , - 1116 , - 4997 , - 4798 , - 519 , - 3680 , - 2761 , - 3522 , - 203 , - 4324 , - 4365 , - 326 , - 3727 , - 3048 , - 4049 , - 970 , - 5331 , - 5612 , - 1813 , - 5454 , - 5015 , - 496 , - 3417 , - 2258 , - 2779 , - 4980 , - 3101 , - 2902 , - 4383 , - 1784 , - 865 , - 1626 , - 4067 , - 2428 , - 2469 , - 4190 , - 1831 , - 1152 , - 2153 , - 4834 , - 3435 , - 3716 , - 5677 , - 3558 , - 3119 , - 4360 , - 1521 , - 362 , - 883 , - 3084 , - 1205 , - 1006 , - 2487 , - 5648 , - 4729 , - 5490 , - 2171 , - 532 , - 573 , - 2294 , - 5695 , - 5016 , - 257 , - 2938 , - 1539 , - 1820 , - 3781 , - 1662 , - 1223 , - 2464 , - 5385 , - 4226 , - 4747 , - 1188 , - 5069 , - 4870 , - 591 , - 3752 , - 2833 , - 3594 , - 275 , - 4396 , - 4437 , - 398 , - 3799 , - 3120 , - 4121 , - 1042 , - 5403 , - 5684 , - 1885 , - 5526 , - 5087 , - 568 , - 3489 , - 2330 , - 2851 , - 5052 , - 3173 , - 2974 , - 4455 , - 1856 , - 937 , - 1698 , - 4139 , - 2500 , - 2541 , - 4262 , - 1903 , - 1224 , - 2225 , - 4906 , - 3507 , - 3788 , - 5749 , - 3630 , - 3191 , - 4432 , - 1593 , - 434 , - 955 , - 3156 , - 1277 , - 1078 , - 2559 , - 5720 , - 4801 , - 5562 , - 2243 , - 604 , - 645 , - 2366 , - 7 , - 5088 , - 329 , - 3010 , - 1611 , - 1892 , - 3853 , - 1734 , - 1295 , - 2536 , - 5457 , - 4298 , - 4819 , - 1260 , - 5141 , - 4942 , - 663 , - 3824 , - 2905 , - 3666 , - 347 , - 4468 , - 4509 , - 470 , - 3871 , - 3192 , - 4193 , - 1114 , - 5475 , - 5756 , - 1957 , - 5598 , - 5159 , - 640 , - 3561 , - 2402 , - 2923 , - 5124 , - 3245 , - 3046 , - 4527 , - 1928 , - 1009 , - 1770 , - 4211 , - 2572 , - 2613 , - 4334 , - 1975 , - 1296 , - 2297 , - 4978 , - 3579 , - 3860 , - 61 , - 3702 , - 3263 , - 4504 , - 1665 , - 506 , - 1027 , - 3228 , - 1349 , - 1150 , - 2631 , - 32 , - 4873 , - 5634 , - 2315 , - 676 , - 717 , - 2438 , - 79 , - 5160 , - 401 , - 3082 , - 1683 , - 1964 , - 3925 , - 1806 , - 1367 , - 2608 , - 5529 , - 4370 , - 4891 , - 1332 , - 5213 , - 5014 , - 735 , - 3896 , - 2977 , - 3738 , - 419 , - 4540 , - 4581 , - 542 , - 3943 , - 3264 , - 4265 , - 1186 , - 5547 , - 68 , - 2029 , - 5670 , - 5231 , - 712 , - 3633 , - 2474 , - 2995 , - 5196 , - 3317 , - 3118 , - 4599 , - 2000 , - 1081 , - 1842 , - 4283 , - 2644 , - 2685 , - 4406 , - 2047 , - 1368 , - 2369 , - 5050 , - 3651 , - 3932 , - 133 , - 3774 , - 3335 , - 4576 , - 1737 , - 578 , - 1099 , - 3300 , - 1421 , - 1222 , - 2703 , - 104 , - 4945 , - 5706 , - 2387 , - 748 , - 789 , - 2510 , - 151 , - 5232 , - 473 , - 3154 , - 1755 , - 2036 , - 3997 , - 1878 , - 1439 , - 2680 , - 5601 , - 4442 , - 4963 , - 1404 , - 5285 , - 5086 , - 807 , - 3968 , - 3049 , - 3810 , - 491 , - 4612 , - 4653 , - 614 , - 4015 , - 3336 , - 4337 , - 1258 , - 5619 , - 140 , - 2101 , - 5742 , - 5303 , - 784 , - 3705 , - 2546 , - 3067 , - 5268 , - 3389 , - 3190 , - 4671 , - 2072 , - 1153 , - 1914 , - 4355 , - 2716 , - 2757 , - 4478 , - 2119 , - 1440 , - 2441 , - 5122 , - 3723 , - 4004 , - 205 , - 3846 , - 3407 , - 4648 , - 1809 , - 650 , - 1171 , - 3372 , - 1493 , - 1294 , - 2775 , - 176 , - 5017 , - 18 , - 2459 , - 820 , - 861 , - 2582 , - 223 , - 5304 , - 545 , - 3226 , - 1827 , - 2108 , - 4069 , - 1950 , - 1511 , - 2752 , - 5673 , - 4514 , - 5035 , - 1476 , - 5357 , - 5158 , - 879 , - 4040 , - 3121 , - 3882 , - 563 , - 4684 , - 4725 , - 686 , - 4087 , - 3408 , - 4409 , - 1330 , - 5691 , - 212 , - 2173 , - 54 , - 5375 , - 856 , - 3777 , - 2618 , - 3139 , - 5340 , - 3461 , - 3262 , - 4743 , - 2144 , - 1225 , - 1986 , - 4427 , - 2788 , - 2829 , - 4550 , - 2191 , - 1512 , - 2513 , - 5194 , - 3795 , - 4076 , - 277 , - 3918 , - 3479 , - 4720 , - 1881 , - 722 , - 1243 , - 3444 , - 1565 , - 1366 , - 2847 , - 248 , - 5089 , - 90 , - 2531 , - 892 , - 933 , - 2654 , - 295 , - 5376 , - 617 , - 3298 , - 1899 , - 2180 , - 4141 , - 2022 , - 1583 , - 2824 , - 5745 , - 4586 , - 5107 , - 1548 , - 5429 , - 5230 , - 951 , - 4112 , - 3193 , - 3954 , - 635 , - 4756 , - 4797 , - 758 , - 4159 , - 3480 , - 4481 , - 1402 , - 3 , - 284 , - 2245 , - 126 , - 5447 , - 928 , - 3849 , - 2690 , - 3211 , - 5412 , - 3533 , - 3334 , - 4815 , - 2216 , - 1297 , - 2058 , - 4499 , - 2860 , - 2901 , - 4622 , - 2263 , - 1584 , - 2585 , - 5266 , - 3867 , - 4148 , - 349 , - 3990 , - 3551 , - 4792 , - 1953 , - 794 , - 1315 , - 3516 , - 1637 , - 1438 , - 2919 , - 320 , - 5161 , - 162 , - 2603 , - 964 , - 1005 , - 2726 , - 367 , - 5448 , - 689 , - 3370 , - 1971 , - 2252 , - 4213 , - 2094 , - 1655 , - 2896 , - 57 , - 4658 , - 5179 , - 1620 , - 5501 , - 5302 , - 1023 , - 4184 , - 3265 , - 4026 , - 707 , - 4828 , - 4869 , - 830 , - 4231 , - 3552 , - 4553 , - 1474 , - 75 , - 356 , - 2317 , - 198 , - 5519 , - 1000 , - 3921 , - 2762 , - 3283 , - 5484 , - 3605 , - 3406 , - 4887 , - 2288 , - 1369 , - 2130 , - 4571 , - 2932 , - 2973 , - 4694 , - 2335 , - 1656 , - 2657 , - 5338 , - 3939 , - 4220 , - 421 , - 4062 , - 3623 , - 4864 , - 2025 , - 866 , - 1387 , - 3588 , - 1709 , - 1510 , - 2991 , - 392 , - 5233 , - 234 , - 2675 , - 1036 , - 1077 , - 2798 , - 439 , - 5520 , - 761 , - 3442 , - 2043 , - 2324 , - 4285 , - 2166 , - 1727 , - 2968 , - 129 , - 4730 , - 5251 , - 1692 , - 5573 , - 5374 , - 1095 , - 4256 , - 3337 , - 4098 , - 779 , - 4900 , - 4941 , - 902 , - 4303 , - 3624 , - 4625 , - 1546 , - 147 , - 428 , - 2389 , - 270 , - 5591 , - 1072 , - 3993 , - 2834 , - 3355 , - 5556 , - 3677 , - 3478 , - 4959 , - 2360 , - 1441 , - 2202 , - 4643 , - 3004 , - 3045 , - 4766 , - 2407 , - 1728 , - 2729 , - 5410 , - 4011 , - 4292 , - 493 , - 4134 , - 3695 , - 4936 , - 2097 , - 938 , - 1459 , - 3660 , - 1781 , - 1582 , - 3063 , - 464 , - 5305 , - 306 , - 2747 , - 1108 , - 1149 , - 2870 , - 511 , - 5592 , - 833 , - 3514 , - 2115 , - 2396 , - 4357 , - 2238 , - 1799 , - 3040 , - 201 , - 4802 , - 5323 , - 1764 , - 5645 , - 5446 , - 1167 , - 4328 , - 3409 , - 4170 , - 851 , - 4972 , - 5013 , - 974 , - 4375 , - 3696 , - 4697 , - 1618 , - 219 , - 500 , - 2461 , - 342 , - 5663 , - 1144 , - 4065 , - 2906 , - 3427 , - 5628 , - 3749 , - 3550 , - 5031 , - 2432 , - 1513 , - 2274 , - 4715 , - 3076 , - 3117 , - 4838 , - 2479 , - 1800 , - 2801 , - 5482 , - 4083 , - 4364 , - 565 , - 4206 , - 3767 , - 5008 , - 2169 , - 1010 , - 1531 , - 3732 , - 1853 , - 1654 , - 3135 , - 536 , - 5377 , - 378 , - 2819 , - 1180 , - 1221 , - 2942 , - 583 , - 5664 , - 905 , - 3586 , - 2187 , - 2468 , - 4429 , - 2310 , - 1871 , - 3112 , - 273 , - 4874 , - 5395 , - 1836 , - 5717 , - 5518 , - 1239 , - 4400 , - 3481 , - 4242 , - 923 , - 5044 , - 5085 , - 1046 , - 4447 , - 3768 , - 4769 , - 1690 , - 291 , - 572 , - 2533 , - 414 , - 5735 , - 1216 , - 4137 , - 2978 , - 3499 , - 5700 , - 3821 , - 3622 , - 5103 , - 2504 , - 1585 , - 2346 , - 4787 , - 3148 , - 3189 , - 4910 , - 2551 , - 1872 , - 2873 , - 5554 , - 4155 , - 4436 , - 637 , - 4278 , - 3839 , - 5080 , - 2241 , - 1082 , - 1603 , - 3804 , - 1925 , - 1726 , - 3207 , - 608 , - 5449 , - 450 , - 2891 , - 1252 , - 1293 , - 3014 , - 655 , - 5736 , - 977 , - 3658 , - 2259 , - 2540 , - 4501 , - 2382 , - 1943 , - 3184 , - 345 , - 4946 , - 5467 , - 1908 , - 29 , - 5590 , - 1311 , - 4472 , - 3553 , - 4314 , - 995 , - 5116 , - 5157 , - 1118 , - 4519 , - 3840 , - 4841 , - 1762 , - 363 , - 644 , - 2605 , - 486 , - 47 , - 1288 , - 4209 , - 3050 , - 3571 , - 12 , - 3893 , - 3694 , - 5175 , - 2576 , - 1657 , - 2418 , - 4859 , - 3220 , - 3261 , - 4982 , - 2623 , - 1944 , - 2945 , - 5626 , - 4227 , - 4508 , - 709 , - 4350 , - 3911 , - 5152 , - 2313 , - 1154 , - 1675 , - 3876 , - 1997 , - 1798 , - 3279 , - 680 , - 5521 , - 522 , - 2963 , - 1324 , - 1365 , - 3086 , - 727 , - 48 , - 1049 , - 3730 , - 2331 , - 2612 , - 4573 , - 2454 , - 2015 , - 3256 , - 417 , - 5018 , - 5539 , - 1980 , - 101 , - 5662 , - 1383 , - 4544 , - 3625 , - 4386 , - 1067 , - 5188 , - 5229 , - 1190 , - 4591 , - 3912 , - 4913 , - 1834 , - 435 , - 716 , - 2677 , - 558 , - 119 , - 1360 , - 4281 , - 3122 , - 3643 , - 84 , - 3965 , - 3766 , - 5247 , - 2648 , - 1729 , - 2490 , - 4931 , - 3292 , - 3333 , - 5054 , - 2695 , - 2016 , - 3017 , - 5698 , - 4299 , - 4580 , - 781 , - 4422 , - 3983 , - 5224 , - 2385 , - 1226 , - 1747 , - 3948 , - 2069 , - 1870 , - 3351 , - 752 , - 5593 , - 594 , - 3035 , - 1396 , - 1437 , - 3158 , - 799 , - 120 , - 1121 , - 3802 , - 2403 , - 2684 , - 4645 , - 2526 , - 2087 , - 3328 , - 489 , - 5090 , - 5611 , - 2052 , - 173 , - 5734 , - 1455 , - 4616 , - 3697 , - 4458 , - 1139 , - 5260 , - 5301 , - 1262 , - 4663 , - 3984 , - 4985 , - 1906 , - 507 , - 788 , - 2749 , - 630 , - 191 , - 1432 , - 4353 , - 3194 , - 3715 , - 156 , - 4037 , - 3838 , - 5319 , - 2720 , - 1801 , - 2562 , - 5003 , - 3364 , - 3405 , - 5126 , - 2767 , - 2088 , - 3089 , - 10 , - 4371 , - 4652 , - 853 , - 4494 , - 4055 , - 5296 , - 2457 , - 1298 , - 1819 , - 4020 , - 2141 , - 1942 , - 3423 , - 824 , - 5665 , - 666 , - 3107 , - 1468 , - 1509 , - 3230 , - 871 , - 192 , - 1193 , - 3874 , - 2475 , - 2756 , - 4717 , - 2598 , - 2159 , - 3400 , - 561 , - 5162 , - 5683 , - 2124 , - 245 , - 46 , - 1527 , - 4688 , - 3769 , - 4530 , - 1211 , - 5332 , - 5373 , - 1334 , - 4735 , - 4056 , - 5057 , - 1978 , - 579 , - 860 , - 2821 , - 702 , - 263 , - 1504 , - 4425 , - 3266 , - 3787 , - 228 , - 4109 , - 3910 , - 5391 , - 2792 , - 1873 , - 2634 , - 5075 , - 3436 , - 3477 , - 5198 , - 2839 , - 2160 , - 3161 , - 82 , - 4443 , - 4724 , - 925 , - 4566 , - 4127 , - 5368 , - 2529 , - 1370 , - 1891 , - 4092 , - 2213 , - 2014 , - 3495 , - 896 , - 5737 , - 738 , - 3179 , - 1540 , - 1581 , - 3302 , - 943 , - 264 , - 1265 , - 3946 , - 2547 , - 2828 , - 4789 , - 2670 , - 2231 , - 3472 , - 633 , - 5234 , - 5755 , - 2196 , - 317 , - 118 , - 1599 , - 4760 , - 3841 , - 4602 , - 1283 , - 5404 , - 5445 , - 1406 , - 4807 , - 4128 , - 5129 , - 2050 , - 651 , - 932 , - 2893 , - 774 , - 335 , - 1576 , - 4497 , - 3338 , - 3859 , - 300 , - 4181 , - 3982 , - 5463 , - 2864 , - 1945 , - 2706 , - 5147 , - 3508 , - 3549 , - 5270 , - 2911 , - 2232 , - 3233 , - 154 , - 4515 , - 4796 , - 997 , - 4638 , - 4199 , - 5440 , - 2601 , - 1442 , - 1963 , - 4164 , - 2285 , - 2086 , - 3567 , - 968 , - 49 , - 810 , - 3251 , - 1612 , - 1653 , - 3374 , - 1015 , - 336 , - 1337 , - 4018 , - 2619 , - 2900 , - 4861 , - 2742 , - 2303 , - 3544 , - 705 , - 5306 , - 67 , - 2268 , - 389 , - 190 , - 1671 , - 4832 , - 3913 , - 4674 , - 1355 , - 5476 , - 5517 , - 1478 , - 4879 , - 4200 , - 5201 , - 2122 , - 723 , - 1004 , - 2965 , - 846 , - 407 , - 1648 , - 4569 , - 3410 , - 3931 , - 372 , - 4253 , - 4054 , - 5535 , - 2936 , - 2017 , - 2778 , - 5219 , - 3580 , - 3621 , - 5342 , - 2983 , - 2304 , - 3305 , - 226 , - 4587 , - 4868 , - 1069 , - 4710 , - 4271 , - 5512 , - 2673 , - 1514 , - 2035 , - 4236 , - 2357 , - 2158 , - 3639 , - 1040 , - 121 , - 882 , - 3323 , - 1684 , - 1725 , - 3446 , - 1087 , - 408 , - 1409 , - 4090 , - 2691 , - 2972 , - 4933 , - 2814 , - 2375 , - 3616 , - 777 , - 5378 , - 139 , - 2340 , - 461 , - 262 , - 1743 , - 4904 , - 3985 , - 4746 , - 1427 , - 5548 , - 5589 , - 1550 , - 4951 , - 4272 , - 5273 , - 2194 , - 795 , - 1076 , - 3037 , - 918 , - 479 , - 1720 , - 4641 , - 3482 , - 4003 , - 444 , - 4325 , - 4126 , - 5607 , - 3008 , - 2089 , - 2850 , - 5291 , - 3652 , - 3693 , - 5414 , - 3055 , - 2376 , - 3377 , - 298 , - 4659 , - 4940 , - 1141 , - 4782 , - 4343 , - 5584 , - 2745 , - 1586 , - 2107 , - 4308 , - 2429 , - 2230 , - 3711 , - 1112 , - 193 , - 954 , - 3395 , - 1756 , - 1797 , - 3518 , - 1159 , - 480 , - 1481 , - 4162 , - 2763 , - 3044 , - 5005 , - 2886 , - 2447 , - 3688 , - 849 , - 5450 , - 211 , - 2412 , - 533 , - 334 , - 1815 , - 4976 , - 4057 , - 4818 , - 1499 , - 5620 , - 5661 , - 1622 , - 5023 , - 4344 , - 5345 , - 2266 , - 867 , - 1148 , - 3109 , - 990 , - 551 , - 1792 , - 4713 , - 3554 , - 4075 , - 516 , - 4397 , - 4198 , - 5679 , - 3080 , - 2161 , - 2922 , - 5363 , - 3724 , - 3765 , - 5486 , - 3127 , - 2448 , - 3449 , - 370 , - 4731 , - 5012 , - 1213 , - 4854 , - 4415 , - 5656 , - 2817 , - 1658 , - 2179 , - 4380 , - 2501 , - 2302 , - 3783 , - 1184 , - 265 , - 1026 , - 3467 , - 1828 , - 1869 , - 3590 , - 1231 , - 552 , - 1553 , - 4234 , - 2835 , - 3116 , - 5077 , - 2958 , - 2519 , - 3760 , - 921 , - 5522 , - 283 , - 2484 , - 605 , - 406 , - 1887 , - 5048 , - 4129 , - 4890 , - 1571 , - 5692 , - 5733 , - 1694 , - 5095 , - 4416 , - 5417 , - 2338 , - 939 , - 1220 , - 3181 , - 1062 , - 623 , - 1864 , - 4785 , - 3626 , - 4147 , - 588 , - 4469 , - 4270 , - 5751 , - 3152 , - 2233 , - 2994 , - 5435 , - 3796 , - 3837 , - 5558 , - 3199 , - 2520 , - 3521 , - 442 , - 4803 , - 5084 , - 1285 , - 4926 , - 4487 , - 5728 , - 2889 , - 1730 , - 2251 , - 4452 , - 2573 , - 2374 , - 3855 , - 1256 , - 337 , - 1098 , - 3539 , - 1900 , - 1941 , - 3662 , - 1303 , - 624 , - 1625 , - 4306 , - 2907 , - 3188 , - 5149 , - 3030 , - 2591 , - 3832 , - 993 , - 5594 , - 355 , - 2556 , - 677 , - 478 , - 1959 , - 5120 , - 4201 , - 4962 , - 1643 , - 4 , - 45 , - 1766 , - 5167 , - 4488 , - 5489 , - 2410 , - 1011 , - 1292 , - 3253 , - 1134 , - 695 , - 1936 , - 4857 , - 3698 , - 4219 , - 660 , - 4541 , - 4342 , - 63 , - 3224 , - 2305 , - 3066 , - 5507 , - 3868 , - 3909 , - 5630 , - 3271 , - 2592 , - 3593 , - 514 , - 4875 , - 5156 , - 1357 , - 4998 , - 4559 , - 40 , - 2961 , - 1802 , - 2323 , - 4524 , - 2645 , - 2446 , - 3927 , - 1328 , - 409 , - 1170 , - 3611 , - 1972 , - 2013 , - 3734 , - 1375 , - 696 , - 1697 , - 4378 , - 2979 , - 3260 , - 5221 , - 3102 , - 2663 , - 3904 , - 1065 , - 5666 , - 427 , - 2628 , - 749 , - 550 , - 2031 , - 5192 , - 4273 , - 5034 , - 1715 , - 76 , - 117 , - 1838 , - 5239 , - 4560 , - 5561 , - 2482 , - 1083 , - 1364 , - 3325 , - 1206 , - 767 , - 2008 , - 4929 , - 3770 , - 4291 , - 732 , - 4613 , - 4414 , - 135 , - 3296 , - 2377 , - 3138 , - 5579 , - 3940 , - 3981 , - 5702 , - 3343 , - 2664 , - 3665 , - 586 , - 4947 , - 5228 , - 1429 , - 5070 , - 4631 , - 112 , - 3033 , - 1874 , - 2395 , - 4596 , - 2717 , - 2518 , - 3999 , - 1400 , - 481 , - 1242 , - 3683 , - 2044 , - 2085 , - 3806 , - 1447 , - 768 , - 1769 , - 4450 , - 3051 , - 3332 , - 5293 , - 3174 , - 2735 , - 3976 , - 1137 , - 5738 , - 499 , - 2700 , - 821 , - 622 , - 2103 , - 5264 , - 4345 , - 5106 , - 1787 , - 148 , - 189 , - 1910 , - 5311 , - 4632 , - 5633 , - 2554 , - 1155 , - 1436 , - 3397 , - 1278 , - 839 , - 2080 , - 5001 , - 3842 , - 4363 , - 804 , - 4685 , - 4486 , - 207 , - 3368 , - 2449 , - 3210 , - 5651 , - 4012 , - 4053 , - 14 , - 3415 , - 2736 , - 3737 , - 658 , - 5019 , - 5300 , - 1501 , - 5142 , - 4703 , - 184 , - 3105 , - 1946 , - 2467 , - 4668 , - 2789 , - 2590 , - 4071 , - 1472 , - 553 , - 1314 , - 3755 , - 2116 , - 2157 , - 3878 , - 1519 , - 840 , - 1841 , - 4522 , - 3123 , - 3404 , - 5365 , - 3246 , - 2807 , - 4048 , - 1209 , - 50 , - 571 , - 2772 , - 893 , - 694 , - 2175 , - 5336 , - 4417 , - 5178 , - 1859 , - 220 , - 261 , - 1982 , - 5383 , - 4704 , - 5705 , - 2626 , - 1227 , - 1508 , - 3469 , - 1350 , - 911 , - 2152 , - 5073 , - 3914 , - 4435 , - 876 , - 4757 , - 4558 , - 279 , - 3440 , - 2521 , - 3282 , - 5723 , - 4084 , - 4125 , - 86 , - 3487 , - 2808 , - 3809 , - 730 , - 5091 , - 5372 , - 1573 , - 5214 , - 4775 , - 256 , - 3177 , - 2018 , - 2539 , - 4740 , - 2861 , - 2662 , - 4143 , - 1544 , - 625 , - 1386 , - 3827 , - 2188 , - 2229 , - 3950 , - 1591 , - 912 , - 1913 , - 4594 , - 3195 , - 3476 , - 5437 , - 3318 , - 2879 , - 4120 , - 1281 , - 122 , - 643 , - 2844 , - 965 , - 766 , - 2247 , - 5408 , - 4489 , - 5250 , - 1931 , - 292 , - 333 , - 2054 , - 5455 , - 4776 , - 17 , - 2698 , - 1299 , - 1580 , - 3541 , - 1422 , - 983 , - 2224 , - 5145 , - 3986 , - 4507 , - 948 , - 4829 , - 4630 , - 351 , - 3512 , - 2593 , - 3354 , - 35 , - 4156 , - 4197 , - 158 , - 3559 , - 2880 , - 3881 , - 802 , - 5163 , - 5444 , - 1645 , - 5286 , - 4847 , - 328 , - 3249 , - 2090 , - 2611 , - 4812 , - 2933 , - 2734 , - 4215 , - 1616 , - 697 , - 1458 , - 3899 , - 2260 , - 2301 , - 4022 , - 1663 , - 984 , - 1985 , - 4666 , - 3267 , - 3548 , - 5509 , - 3390 , - 2951 , - 4192 , - 1353 , - 194 , - 715 , - 2916 , - 1037 , - 838 , - 2319 , - 5480 , - 4561 , - 5322 , - 2003 , - 364 , - 405 , - 2126 , - 5527 , - 4848 , - 89 , - 2770 , - 1371 , - 1652 , - 3613 , - 1494 , - 1055 , - 2296 , - 5217 , - 4058 , - 4579 , - 1020 , - 4901 , - 4702 , - 423 , - 3584 , - 2665 , - 3426 , - 107 , - 4228 , - 4269 , - 230 , - 3631 , - 2952 , - 3953 , - 874 , - 5235 , - 5516 , - 1717 , - 5358 , - 4919 , - 400 , - 3321 , - 2162 , - 2683 , - 4884 , - 3005 , - 2806 , - 4287 , - 1688 , - 769 , - 1530 , - 3971 , - 2332 , - 2373 , - 4094 , - 1735 , - 1056 , - 2057 , - 4738 , - 3339 , - 3620 , - 5581 , - 3462 , - 3023 , - 4264 , - 1425 , - 266 , - 787 , - 2988 , - 1109 , - 910 , - 2391 , - 5552 , - 4633 , - 5394 , - 2075 , - 436 , - 477 , - 2198 , - 5599 , - 4920 , - 161 , - 2842 , - 1443 , - 1724 , - 3685 , - 1566 , - 1127 , - 2368 , - 5289 , - 4130 , - 4651 , - 1092 , - 4973 , - 4774 , - 495 , - 3656 , - 2737 , - 3498 , - 179 , - 4300 , - 4341 , - 302 , - 3703 , - 3024 , - 4025 , - 946 , - 5307 , - 5588 , - 1789 , - 5430 , - 4991 , - 472 , - 3393 , - 2234 , - 2755 , - 4956 , - 3077 , - 2878 , - 4359 , - 1760 , - 841 , - 1602 , - 4043 , - 2404 , - 2445 , - 4166 , - 1807 , - 1128 , - 2129 , - 4810 , - 3411 , - 3692 , - 5653 , - 3534 , - 3095 , - 4336 , - 1497 , - 338 , - 859 , - 3060 , - 1181 , - 982 , - 2463 , - 5624 , - 4705 , - 5466 , - 2147 , - 508 , - 549 , - 2270 , - 5671 , - 4992 , - 233 , - 2914 , - 1515 , - 1796 , - 3757 , - 1638 , - 1199 , - 2440 , - 5361 , - 4202 , - 4723 , - 1164 , - 5045 , - 4846 , - 567 , - 3728 , - 2809 , - 3570 , - 251 , - 4372 , - 4413 , - 374 , - 3775 , - 3096 , - 4097 , - 1018 , - 5379 , - 5660 , - 1861 , - 5502 , - 5063 , - 544 , - 3465 , - 2306 , - 2827 , - 5028 , - 3149 , - 2950 , - 4431 , - 1832 , - 913 , - 1674 , - 4115 , - 2476 , - 2517 , - 4238 , - 1879 , - 1200 , - 2201 , - 4882 , - 3483 , - 3764 , - 5725 , - 3606 , - 3167 , - 4408 , - 1569 , - 410 , - 931 , - 3132 , - 1253 , - 1054 , - 2535 , - 5696 , - 4777 , - 5538 , - 2219 , - 580 , - 621 , - 2342 , - 5743 , - 5064 , - 305 , - 2986 , - 1587 , - 1868 , - 3829 , - 1710 , - 1271 , - 2512 , - 5433 , - 4274 , - 4795 , - 1236 , - 5117 , - 4918 , - 639 , - 3800 , - 2881 , - 3642 , - 323 , - 4444 , - 4485 , - 446 , - 3847 , - 3168 , - 4169 , - 1090 , - 5451 , - 5732 , - 1933 , - 5574 , - 5135 , - 616 , - 3537 , - 2378 , - 2899 , - 5100 , - 3221 , - 3022 , - 4503 , - 1904 , - 985 , - 1746 , - 4187 , - 2548 , - 2589 , - 4310 , - 1951 , - 1272 , - 2273 , - 4954 , - 3555 , - 3836 , - 37 , - 3678 , - 3239 , - 4480 , - 1641 , - 482 , - 1003 , - 3204 , - 1325 , - 1126 , - 2607 , - 8 , - 4849 , - 5610 , - 2291 , - 652 , - 693 , - 2414 , - 55 , - 5136 , - 377 , - 3058 , - 1659 , - 1940 , - 3901 , - 1782 , - 1343 , - 2584 , - 5505 , - 4346 , - 4867 , - 1308 , - 5189 , - 4990 , - 711 , - 3872 , - 2953 , - 3714 , - 395 , - 4516 , - 4557 , - 518 , - 3919 , - 3240 , - 4241 , - 1162 , - 5523 , - 44 , - 2005 , - 5646 , - 5207 , - 688 , - 3609 , - 2450 , - 2971 , - 5172 , - 3293 , - 3094 , - 4575 , - 1976 , - 1057 , - 1818 , - 4259 , - 2620 , - 2661 , - 4382 , - 2023 , - 1344 , - 2345 , - 5026 , - 3627 , - 3908 , - 109 , - 3750 , - 3311 , - 4552 , - 1713 , - 554 , - 1075 , - 3276 , - 1397 , - 1198 , - 2679 , - 80 , - 4921 , - 5682 , - 2363 , - 724 , - 765 , - 2486 , - 127 , - 5208 , - 449 , - 3130 , - 1731 , - 2012 , - 3973 , - 1854 , - 1415 , - 2656 , - 5577 , - 4418 , - 4939 , - 1380 , - 5261 , - 5062 , - 783 , - 3944 , - 3025 , - 3786 , - 467 , - 4588 , - 4629 , - 590 , - 3991 , - 3312 , - 4313 , - 1234 , - 5595 , - 116 , - 2077 , - 5718 , - 5279 , - 760 , - 3681 , - 2522 , - 3043 , - 5244 , - 3365 , - 3166 , - 4647 , - 2048 , - 1129 , - 1890 , - 4331 , - 2692 , - 2733 , - 4454 , - 2095 , - 1416 , - 2417 , - 5098 , - 3699 , - 3980 , - 181 , - 3822 , - 3383 , - 4624 , - 1785 , - 626 , - 1147 , - 3348 , - 1469 , - 1270 , - 2751 , - 152 , - 4993 , - 5754 , - 2435 , - 796 , - 837 , - 2558 , - 199 , - 5280 , - 521 , - 3202 , - 1803 , - 2084 , - 4045 , - 1926 , - 1487 , - 2728 , - 5649 , - 4490 , - 5011 , - 1452 , - 5333 , - 5134 , - 855 , - 4016 , - 3097 , - 3858 , - 539 , - 4660 , - 4701 , - 662 , - 4063 , - 3384 , - 4385 , - 1306 , - 5667 , - 188 , - 2149 , - 30 , - 5351 , - 832 , - 3753 , - 2594 , - 3115 , - 5316 , - 3437 , - 3238 , - 4719 , - 2120 , - 1201 , - 1962 , - 4403 , - 2764 , - 2805 , - 4526 , - 2167 , - 1488 , - 2489 , - 5170 , - 3771 , - 4052 , - 253 , - 3894 , - 3455 , - 4696 , - 1857 , - 698 , - 1219 , - 3420 , - 1541 , - 1342 , - 2823 , - 224 , - 5065 , - 66 , - 2507 , - 868 , - 909 , - 2630 , - 271 , - 5352 , - 593 , - 3274 , - 1875 , - 2156 , - 4117 , - 1998 , - 1559 , - 2800 , - 5721 , - 4562 , - 5083 , - 1524 , - 5405 , - 5206 , - 927 , - 4088 , - 3169 , - 3930 , - 611 , - 4732 , - 4773 , - 734 , - 4135 , - 3456 , - 4457 , - 1378 , - 5739 , - 260 , - 2221 , - 102 , - 5423 , - 904 , - 3825 , - 2666 , - 3187 , - 5388 , - 3509 , - 3310 , - 4791 , - 2192 , - 1273 , - 2034 , - 4475 , - 2836 , - 2877 , - 4598 , - 2239 , - 1560 , - 2561 , - 5242 , - 3843 , - 4124 , - 325 , - 3966 , - 3527 , - 4768 , - 1929 , - 770 , - 1291 , - 3492 , - 1613 , - 1414 , - 2895 , - 296 , - 5137 , - 138 , - 2579 , - 940 , - 981 , - 2702 , - 343 , - 5424 , - 665 , - 3346 , - 1947 , - 2228 , - 4189 , - 2070 , - 1631 , - 2872 , - 33 , - 4634 , - 5155 , - 1596 , - 5477 , - 5278 , - 999 , - 4160 , - 3241 , - 4002 , - 683 , - 4804 , - 4845 , - 806 , - 4207 , - 3528 , - 4529 , - 1450 , - 51 , - 332 , - 2293 , - 174 , - 5495 , - 976 , - 3897 , - 2738 , - 3259 , - 5460 , - 3581 , - 3382 , - 4863 , - 2264 , - 1345 , - 2106 , - 4547 , - 2908 , - 2949 , - 4670 , - 2311 , - 1632 , - 2633 , - 5314 , - 3915 , - 4196 , - 397 , - 4038 , - 3599 , - 4840 , - 2001 , - 842 , - 1363 , - 3564 , - 1685 , - 1486 , - 2967 , - 368 , - 5209 , - 210 , - 2651 , - 1012 , - 1053 , - 2774 , - 415 , - 5496 , - 737 , - 3418 , - 2019 , - 2300 , - 4261 , - 2142 , - 1703 , - 2944 , - 105 , - 4706 , - 5227 , - 1668 , - 5549 , - 5350 , - 1071 , - 4232 , - 3313 , - 4074 , - 755 , - 4876 , - 4917 , - 878 , - 4279 , - 3600 , - 4601 , - 1522 , - 123 , - 404 , - 2365 , - 246 , - 5567 , - 1048 , - 3969 , - 2810 , - 3331 , - 5532 , - 3653 , - 3454 , - 4935 , - 2336 , - 1417 , - 2178 , - 4619 , - 2980 , - 3021 , - 4742 , - 2383 , - 1704 , - 2705 , - 5386 , - 3987 , - 4268 , - 469 , - 4110 , - 3671 , - 4912 , - 2073 , - 914 , - 1435 , - 3636 , - 1757 , - 1558 , - 3039 , - 440 , - 5281 , - 282 , - 2723 , - 1084 , - 1125 , - 2846 , - 487 , - 5568 , - 809 , - 3490 , - 2091 , - 2372 , - 4333 , - 2214 , - 1775 , - 3016 , - 177 , - 4778 , - 5299 , - 1740 , - 5621 , - 5422 , - 1143 , - 4304 , - 3385 , - 4146 , - 827 , - 4948 , - 4989 , - 950 , - 4351 , - 3672 , - 4673 , - 1594 , - 195 , - 476 , - 2437 , - 318 , - 5639 , - 1120 , - 4041 , - 2882 , - 3403 , - 5604 , - 3725 , - 3526 , - 5007 , - 2408 , - 1489 , - 2250 , - 4691 , - 3052 , - 3093 , - 4814 , - 2455 , - 1776 , - 2777 , - 5458 , - 4059 , - 4340 , - 541 , - 4182 , - 3743 , - 4984 , - 2145 , - 986 , - 1507 , - 3708 , - 1829 , - 1630 , - 3111 , - 512 , - 5353 , - 354 , - 2795 , - 1156 , - 1197 , - 2918 , - 559 , - 5640 , - 881 , - 3562 , - 2163 , - 2444 , - 4405 , - 2286 , - 1847 , - 3088 , - 249 , - 4850 , - 5371 , - 1812 , - 5693 , - 5494 , - 1215 , - 4376 , - 3457 , - 4218 , - 899 , - 5020 , - 5061 , - 1022 , - 4423 , - 3744 , - 4745 , - 1666 , - 267 , - 548 , - 2509 , - 390 , - 5711 , - 1192 , - 4113 , - 2954 , - 3475 , - 5676 , - 3797 , - 3598 , - 5079 , - 2480 , - 1561 , - 2322 , - 4763 , - 3124 , - 3165 , - 4886 , - 2527 , - 1848 , - 2849 , - 5530 , - 4131 , - 4412 , - 613 , - 4254 , - 3815 , - 5056 , - 2217 , - 1058 , - 1579 , - 3780 , - 1901 , - 1702 , - 3183 , - 584 , - 5425 , - 426 , - 2867 , - 1228 , - 1269 , - 2990 , - 631 , - 5712 , - 953 , - 3634 , - 2235 , - 2516 , - 4477 , - 2358 , - 1919 , - 3160 , - 321 , - 4922 , - 5443 , - 1884 , - 5 , - 5566 , - 1287 , - 4448 , - 3529 , - 4290 , - 971 , - 5092 , - 5133 , - 1094 , - 4495 , - 3816 , - 4817 , - 1738 , - 339 , - 620 , - 2581 , - 462 , - 23 , - 1264 , - 4185 , - 3026 , - 3547 , - 5748 , - 3869 , - 3670 , - 5151 , - 2552 , - 1633 , - 2394 , - 4835 , - 3196 , - 3237 , - 4958 , - 2599 , - 1920 , - 2921 , - 5602 , - 4203 , - 4484 , - 685 , - 4326 , - 3887 , - 5128 , - 2289 , - 1130 , - 1651 , - 3852 , - 1973 , - 1774 , - 3255 , - 656 , - 5497 , - 498 , - 2939 , - 1300 , - 1341 , - 3062 , - 703 , - 24 , - 1025 , - 3706 , - 2307 , - 2588 , - 4549 , - 2430 , - 1991 , - 3232 , - 393 , - 4994 , - 5515 , - 1956 , - 77 , - 5638 , - 1359 , - 4520 , - 3601 , - 4362 , - 1043 , - 5164 , - 5205 , - 1166 , - 4567 , - 3888 , - 4889 , - 1810 , - 411 , - 692 , - 2653 , - 534 , - 95 , - 1336 , - 4257 , - 3098 , - 3619 , - 60 , - 3941 , - 3742 , - 5223 , - 2624 , - 1705 , - 2466 , - 4907 , - 3268 , - 3309 , - 5030 , - 2671 , - 1992 , - 2993 , - 5674 , - 4275 , - 4556 , - 757 , - 4398 , - 3959 , - 5200 , - 2361 , - 1202 , - 1723 , - 3924 , - 2045 , - 1846 , - 3327 , - 728 , - 5569 , - 570 , - 3011 , - 1372 , - 1413 , - 3134 , - 775 , - 96 , - 1097 , - 3778 , - 2379 , - 2660 , - 4621 , - 2502 , - 2063 , - 3304 , - 465 , - 5066 , - 5587 , - 2028 , - 149 , - 5710 , - 1431 , - 4592 , - 3673 , - 4434 , - 1115 , - 5236 , - 5277 , - 1238 , - 4639 , - 3960 , - 4961 , - 1882 , - 483 , - 764 , - 2725 , - 606 , - 167 , - 1408 , - 4329 , - 3170 , - 3691 , - 132 , - 4013 , - 3814 , - 5295 , - 2696 , - 1777 , - 2538 , - 4979 , - 3340 , - 3381 , - 5102 , - 2743 , - 2064 , - 3065 , - 5746 , - 4347 , - 4628 , - 829 , - 4470 , - 4031 , - 5272 , - 2433 , - 1274 , - 1795 , - 3996 , - 2117 , - 1918 , - 3399 , - 800 , - 5641 , - 642 , - 3083 , - 1444 , - 1485 , - 3206 , - 847 , - 168 , - 1169 , - 3850 , - 2451 , - 2732 , - 4693 , - 2574 , - 2135 , - 3376 , - 537 , - 5138 , - 5659 , - 2100 , - 221 , - 22 , - 1503 , - 4664 , - 3745 , - 4506 , - 1187 , - 5308 , - 5349 , - 1310 , - 4711 , - 4032 , - 5033 , - 1954 , - 555 , - 836 , - 2797 , - 678 , - 239 , - 1480 , - 4401 , - 3242 , - 3763 , - 204 , - 4085 , - 3886 , - 5367 , - 2768 , - 1849 , - 2610 , - 5051 , - 3412 , - 3453 , - 5174 , - 2815 , - 2136 , - 3137 , - 58 , - 4419 , - 4700 , - 901 , - 4542 , - 4103 , - 5344 , - 2505 , - 1346 , - 1867 , - 4068 , - 2189 , - 1990 , - 3471 , - 872 , - 5713 , - 714 , - 3155 , - 1516 , - 1557 , - 3278 , - 919 , - 240 , - 1241 , - 3922 , - 2523 , - 2804 , - 4765 , - 2646 , - 2207 , - 3448 , - 609 , - 5210 , - 5731 , - 2172 , - 293 , - 94 , - 1575 , - 4736 , - 3817 , - 4578 , - 1259 , - 5380 , - 5421 , - 1382 , - 4783 , - 4104 , - 5105 , - 2026 , - 627 , - 908 , - 2869 , - 750 , - 311 , - 1552 , - 4473 , - 3314 , - 3835 , - 276 , - 4157 , - 3958 , - 5439 , - 2840 , - 1921 , - 2682 , - 5123 , - 3484 , - 3525 , - 5246 , - 2887 , - 2208 , - 3209 , - 130 , - 4491 , - 4772 , - 973 , - 4614 , - 4175 , - 5416 , - 2577 , - 1418 , - 1939 , - 4140 , - 2261 , - 2062 , - 3543 , - 944 , - 25 , - 786 , - 3227 , - 1588 , - 1629 , - 3350 , - 991 , - 312 , - 1313 , - 3994 , - 2595 , - 2876 , - 4837 , - 2718 , - 2279 , - 3520 , - 681 , - 5282 , - 43 , - 2244 , - 365 , - 166 , - 1647 , - 4808 , - 3889 , - 4650 , - 1331 , - 5452 , - 5493 , - 1454 , - 4855 , - 4176 , - 5177 , - 2098 , - 699 , - 980 , - 2941 , - 822 , - 383 , - 1624 , - 4545 , - 3386 , - 3907 , - 348 , - 4229 , - 4030 , - 5511 , - 2912 , - 1993 , - 2754 , - 5195 , - 3556 , - 3597 , - 5318 , - 2959 , - 2280 , - 3281 , - 202 , - 4563 , - 4844 , - 1045 , - 4686 , - 4247 , - 5488 , - 2649 , - 1490 , - 2011 , - 4212 , - 2333 , - 2134 , - 3615 , - 1016 , - 97 , - 858 , - 3299 , - 1660 , - 1701 , - 3422 , - 1063 , - 384 , - 1385 , - 4066 , - 2667 , - 2948 , - 4909 , - 2790 , - 2351 , - 3592 , - 753 , - 5354 , - 115 , - 2316 , - 437 , - 238 , - 1719 , - 4880 , - 3961 , - 4722 , - 1403 , - 5524 , - 5565 , - 1526 , - 4927 , - 4248 , - 5249 , - 2170 , - 771 , - 1052 , - 3013 , - 894 , - 455 , - 1696 , - 4617 , - 3458 , - 3979 , - 420 , - 4301 , - 4102 , - 5583 , - 2984 , - 2065 , - 2826 , - 5267 , - 3628 , - 3669 , - 5390 , - 3031 , - 2352 , - 3353 , - 274 , - 4635 , - 4916 , - 1117 , - 4758 , - 4319 , - 5560 , - 2721 , - 1562 , - 2083 , - 4284 , - 2405 , - 2206 , - 3687 , - 1088 , - 169 , - 930 , - 3371 , - 1732 , - 1773 , - 3494 , - 1135 , - 456 , - 1457 , - 4138 , - 2739 , - 3020 , - 4981 , - 2862 , - 2423 , - 3664 , - 825 , - 5426 , - 187 , - 2388 , - 509 , - 310 , - 1791 , - 4952 , - 4033 , - 4794 , - 1475 , - 5596 , - 5637 , - 1598 , - 4999 , - 4320 , - 5321 , - 2242 , - 843 , - 1124 , - 3085 , - 966 , - 527 , - 1768 , - 4689 , - 3530 , - 4051 , - 492 , - 4373 , - 4174 , - 5655 , - 3056 , - 2137 , - 2898 , - 5339 , - 3700 , - 3741 , - 5462 , - 3103 , - 2424 , - 3425 , - 346 , - 4707 , - 4988 , - 1189 , - 4830 , - 4391 , - 5632 , - 2793 , - 1634 , - 2155 , - 4356 , - 2477 , - 2278 , - 3759 , - 1160 , - 241 , - 1002 , - 3443 , - 1804 , - 1845 , - 3566 , - 1207 , - 528 , - 1529 , - 4210 , - 2811 , - 3092 , - 5053 , - 2934 , - 2495 , - 3736 , - 897 , - 5498 , - 259 , - 2460 , - 581 , - 382 , - 1863 , - 5024 , - 4105 , - 4866 , - 1547 , - 5668 , - 5709 , - 1670 , - 5071 , - 4392 , - 5393 , - 2314 , - 915 , - 1196 , - 3157 , - 1038 , - 599 , - 1840 , - 4761 , - 3602 , - 4123 , - 564 , - 4445 , - 4246 , - 5727 , - 3128 , - 2209 , - 2970 , - 5411 , - 3772 , - 3813 , - 5534 , - 3175 , - 2496 , - 3497 , - 418 , - 4779 , - 5060 , - 1261 , - 4902 , - 4463 , - 5704 , - 2865 , - 1706 , - 2227 , - 4428 , - 2549 , - 2350 , - 3831 , - 1232 , - 313 , - 1074 , - 3515 , - 1876 , - 1917 , - 3638 , - 1279 , - 600 , - 1601 , - 4282 , - 2883 , - 3164 , - 5125 , - 3006 , - 2567 , - 3808 , - 969 , - 5570 , - 331 , - 2532 , - 653 , - 454 , - 1935 , - 5096 , - 4177 , - 4938 , - 1619 , - 5740 , - 21 , - 1742 , - 5143 , - 4464 , - 5465 , - 2386 , - 987 , - 1268 , - 3229 , - 1110 , - 671 , - 1912 , - 4833 , - 3674 , - 4195 , - 636 , - 4517 , - 4318 , - 39 , - 3200 , - 2281 , - 3042 , - 5483 , - 3844 , - 3885 , - 5606 , - 3247 , - 2568 , - 3569 , - 490 , - 4851 , - 5132 , - 1333 , - 4974 , - 4535 , - 16 , - 2937 , - 1778 , - 2299 , - 4500 , - 2621 , - 2422 , - 3903 , - 1304 , - 385 , - 1146 , - 3587 , - 1948 , - 1989 , - 3710 , - 1351 , - 672 , - 1673 , - 4354 , - 2955 , - 3236 , - 5197 , - 3078 , - 2639 , - 3880 , - 1041 , - 5642 , - 403 , - 2604 , - 725 , - 526 , - 2007 , - 5168 , - 4249 , - 5010 , - 1691 , - 52 , - 93 , - 1814 , - 5215 , - 4536 , - 5537 , - 2458 , - 1059 , - 1340 , - 3301 , - 1182 , - 743 , - 1984 , - 4905 , - 3746 , - 4267 , - 708 , - 4589 , - 4390 , - 111 , - 3272 , - 2353 , - 3114 , - 5555 , - 3916 , - 3957 , - 5678 , - 3319 , - 2640 , - 3641 , - 562 , - 4923 , - 5204 , - 1405 , - 5046 , - 4607 , - 88 , - 3009 , - 1850 , - 2371 , - 4572 , - 2693 , - 2494 , - 3975 , - 1376 , - 457 , - 1218 , - 3659 , - 2020 , - 2061 , - 3782 , - 1423 , - 744 , - 1745 , - 4426 , - 3027 , - 3308 , - 5269 , - 3150 , - 2711 , - 3952 , - 1113 , - 5714 , - 475 , - 2676 , - 797 , - 598 , - 2079 , - 5240 , - 4321 , - 5082 , - 1763 , - 124 , - 165 , - 1886 , - 5287 , - 4608 , - 5609 , - 2530 , - 1131 , - 1412 , - 3373 , - 1254 , - 815 , - 2056 , - 4977 , - 3818 , - 4339 , - 780 , - 4661 , - 4462 , - 183 , - 3344 , - 2425 , - 3186 , - 5627 , - 3988 , - 4029 , - 5750 , - 3391 , - 2712 , - 3713 , - 634 , - 4995 , - 5276 , - 1477 , - 5118 , - 4679 , - 160 , - 3081 , - 1922 , - 2443 , - 4644 , - 2765 , - 2566 , - 4047 , - 1448 , - 529 , - 1290 , - 3731 , - 2092 , - 2133 , - 3854 , - 1495 , - 816 , - 1817 , - 4498 , - 3099 , - 3380 , - 5341 , - 3222 , - 2783 , - 4024 , - 1185 , - 26 , - 547 , - 2748 , - 869 , - 670 , - 2151 , - 5312 , - 4393 , - 5154 , - 1835 , - 196 , - 237 , - 1958 , - 5359 , - 4680 , - 5681 , - 2602 , - 1203 , - 1484 , - 3445 , - 1326 , - 887 , - 2128 , - 5049 , - 3890 , - 4411 , - 852 , - 4733 , - 4534 , - 255 , - 3416 , - 2497 , - 3258 , - 5699 , - 4060 , - 4101 , - 62 , - 3463 , - 2784 , - 3785 , - 706 , - 5067 , - 5348 , - 1549 , - 5190 , - 4751 , - 232 , - 3153 , - 1994 , - 2515 , - 4716 , - 2837 , - 2638 , - 4119 , - 1520 , - 601 , - 1362 , - 3803 , - 2164 , - 2205 , - 3926 , - 1567 , - 888 , - 1889 , - 4570 , - 3171 , - 3452 , - 5413 , - 3294 , - 2855 , - 4096 , - 1257 , - 98 , - 619 , - 2820 , - 941 , - 742 , - 2223 , - 5384 , - 4465 , - 5226 , - 1907 , - 268 , - 309 , - 2030 , - 5431 , - 4752 , - 5753 , - 2674 , - 1275 , - 1556 , - 3517 , - 1398 , - 959 , - 2200 , - 5121 , - 3962 , - 4483 , - 924 , - 4805 , - 4606 , - 327 , - 3488 , - 2569 , - 3330 , - 11 , - 4132 , - 4173 , - 134 , - 3535 , - 2856 , - 3857 , - 778 , - 5139 , - 5420 , - 1621 , - 5262 , - 4823 , - 304 , - 3225 , - 2066 , - 2587 , - 4788 , - 2909 , - 2710 , - 4191 , - 1592 , - 673 , - 1434 , - 3875 , - 2236 , - 2277 , - 3998 , - 1639 , - 960 , - 1961 , - 4642 , - 3243 , - 3524 , - 5485 , - 3366 , - 2927 , - 4168 , - 1329 , - 170 , - 691 , - 2892 , - 1013 , - 814 , - 2295 , - 5456 , - 4537 , - 5298 , - 1979 , - 340 , - 381 , - 2102 , - 5503 , - 4824 , - 65 , - 2746 , - 1347 , - 1628 , - 3589 , - 1470 , - 1031 , - 2272 , - 5193 , - 4034 , - 4555 , - 996 , - 4877 , - 4678 , - 399 , - 3560 , - 2641 , - 3402 , - 83 , - 4204 , - 4245 , - 206 , - 3607 , - 2928 , - 3929 , - 850 , - 5211 , - 5492 , - 1693 , - 5334 , - 4895 , - 376 , - 3297 , - 2138 , - 2659 , - 4860 , - 2981 , - 2782 , - 4263 , - 1664 , - 745 , - 1506 , - 3947 , - 2308 , - 2349 , - 4070 , - 1711 , - 1032 , - 2033 , - 4714 , - 3315 , - 3596 , - 5557 , - 3438 , - 2999 , - 4240 , - 1401 , - 242 , - 763 , - 2964 , - 1085 , - 886 , - 2367 , - 5528 , - 4609 , - 5370 , - 2051 , - 412 , - 453 , - 2174 , - 5575 , - 4896 , - 137 , - 2818 , - 1419 , - 1700 , - 3661 , - 1542 , - 1103 , - 2344 , - 5265 , - 4106 , - 4627 , - 1068 , - 4949 , - 4750 , - 471 , - 3632 , - 2713 , - 3474 , - 155 , - 4276 , - 4317 , - 278 , - 3679 , - 3000 , - 4001 , - 922 , - 5283 , - 5564 , - 1765 , - 5406 , - 4967 , - 448 , - 3369 , - 2210 , - 2731 , - 4932 , - 3053 , - 2854 , - 4335 , - 1736 , - 817 , - 1578 , - 4019 , - 2380 , - 2421 , - 4142 , - 1783 , - 1104 , - 2105 , - 4786 , - 3387 , - 3668 , - 5629 , - 3510 , - 3071 , - 4312 , - 1473 , - 314 , - 835 , - 3036 , - 1157 , - 958 , - 2439 , - 5600 , - 4681 , - 5442 , - 2123 , - 484 , - 525 , - 2246 , - 5647 , - 4968 , - 209 , - 2890 , - 1491 , - 1772 , - 3733 , - 1614 , - 1175 , - 2416 , - 5337 , - 4178 , - 4699 , - 1140 , - 5021 , - 4822 , - 543 , - 3704 , - 2785 , - 3546 , - 227 , - 4348 , - 4389 , - 350 , - 3751 , - 3072 , - 4073 , - 994 , - 5355 , - 5636 , - 1837 , - 5478 , - 5039 , - 520 , - 3441 , - 2282 , - 2803 , - 5004 , - 3125 , - 2926 , - 4407 , - 1808 , - 889 , - 1650 , - 4091 , - 2452 , - 2493 , - 4214 , - 1855 , - 1176 , - 2177 , - 4858 , - 3459 , - 3740 , - 5701 , - 3582 , - 3143 , - 4384 , - 1545 , - 386 , - 907 , - 3108 , - 1229 , - 1030 , - 2511 , - 5672 , - 4753 , - 5514 , - 2195 , - 556 , - 597 , - 2318 , - 5719 , - 5040 , - 281 , - 2962 , - 1563 , - 1844 , - 3805 , - 1686 , - 1247 , - 2488 , - 5409 , - 4250 , - 4771 , - 1212 , - 5093 , - 4894 , - 615 , - 3776 , - 2857 , - 3618 , - 299 , - 4420 , - 4461 , - 422 , - 3823 , - 3144 , - 4145 , - 1066 , - 5427 , - 5708 , - 1909 , - 5550 , - 5111 , - 592 , - 3513 , - 2354 , - 2875 , - 5076 , - 3197 , - 2998 , - 4479 , - 1880 , - 961 , - 1722 , - 4163 , - 2524 , - 2565 , - 4286 , - 1927 , - 1248 , - 2249 , - 4930 , - 3531 , - 3812 , - 13 , - 3654 , - 3215 , - 4456 , - 1617 , - 458 , - 979 , - 3180 , - 1301 , - 1102 , - 2583 , - 5744 , - 4825 , - 5586 , - 2267 , - 628 , - 669 , - 2390 , - 31 , - 5112 , - 353 , - 3034 , - 1635 , - 1916 , - 3877 , - 1758 , - 1319 , - 2560 , - 5481 , - 4322 , - 4843 , - 1284 , - 5165 , - 4966 , - 687 , - 3848 , - 2929 , - 3690 , - 371 , - 4492 , - 4533 , - 494 , - 3895 , - 3216 , - 4217 , - 1138 , - 5499 , - 20 , - 1981 , - 5622 , - 5183 , - 664 , - 3585 , - 2426 , - 2947 , - 5148 , - 3269 , - 3070 , - 4551 , - 1952 , - 1033 , - 1794 , - 4235 , - 2596 , - 2637 , - 4358 , - 1999 , - 1320 , - 2321 , - 5002 , - 3603 , - 3884 , - 85 , - 3726 , - 3287 , - 4528 , - 1689 , - 530 , - 1051 , - 3252 , - 1373 , - 1174 , - 2655 , - 56 , - 4897 , - 5658 , - 2339 , - 700 , - 741 , - 2462 , - 103 , - 5184 , - 425 , - 3106 , - 1707 , - 1988 , - 3949 , - 1830 , - 1391 , - 2632 , - 5553 , - 4394 , - 4915 , - 1356 , - 5237 , - 5038 , - 759 , - 3920 , - 3001 , - 3762 , - 443 , - 4564 , - 4605 , - 566 , - 3967 , - 3288 , - 4289 , - 1210 , - 5571 , - 92 , - 2053 , - 5694 , - 5255 , - 736 , - 3657 , - 2498 , - 3019 , - 5220 , - 3341 , - 3142 , - 4623 , - 2024 , - 1105 , - 1866 , - 4307 , - 2668 , - 2709 , - 4430 , - 2071 , - 1392 , - 2393 , - 5074 , - 3675 , - 3956 , - 157 , - 3798 , - 3359 , - 4600 , - 1761 , - 602 , - 1123 , - 3324 , - 1445 , - 1246 , - 2727 , - 128 , - 4969 , - 5730 , - 2411 , - 772 , - 813 , - 2534 , - 175 , - 5256 , - 497 , - 3178 , - 1779 , - 2060 , - 4021 , - 1902 , - 1463 , - 2704 , - 5625 , - 4466 , - 4987 , - 1428 , - 5309 , - 5110 , - 831 , - 3992 , - 3073 , - 3834 , - 515 , - 4636 , - 4677 , - 638 , - 4039 , - 3360 , - 4361 , - 1282 , - 5643 , - 164 , - 2125 , - 6 , - 5327 , - 808 , - 3729 , - 2570 , - 3091 , - 5292 , - 3413 , - 3214 , - 4695 , - 2096 , - 1177 , - 1938 , - 4379 , - 2740 , - 2781 , - 4502 , - 2143 , - 1464 , - 2465 , - 5146 , - 3747 , - 4028 , - 229 , - 3870 , - 3431 , - 4672 , - 1833 , - 674 , - 1195 , - 3396 , - 1517 , - 1318 , - 2799 , - 200 , - 5041 , - 42 , - 2483 , - 844 , - 885 , - 2606 , - 247 , - 5328 , - 569 , - 3250 , - 1851 , - 2132 , - 4093 , - 1974 , - 1535 , - 2776 , - 5697 , - 4538 , - 5059 , - 1500 , - 5381 , - 5182 , - 903 , - 4064 , - 3145 , - 3906 , - 587 , - 4708 , - 4749 , - 710 , - 4111 , - 3432 , - 4433 , - 1354 , - 5715 , - 236 , - 2197 , - 78 , - 5399 , - 880 , - 3801 , - 2642 , - 3163 , - 5364 , - 3485 , - 3286 , - 4767 , - 2168 , - 1249 , - 2010 , - 4451 , - 2812 , - 2853 , - 4574 , - 2215 , - 1536 , - 2537 , - 5218 , - 3819 , - 4100 , - 301 , - 3942 , - 3503 , - 4744 , - 1905 , - 746 , - 1267 , - 3468 , - 1589 , - 1390 , - 2871 , - 272 , - 5113 , - 114 , - 2555 , - 916 , - 957 , - 2678 , - 319 , - 5400 , - 641 , - 3322 , - 1923 , - 2204 , - 4165 , - 2046 , - 1607 , - 2848 , - 9 , - 4610 , - 5131 , - 1572 , - 5453 , - 5254 , - 975 , - 4136 , - 3217 , - 3978 , - 659 , - 4780 , - 4821 , - 782 , - 4183 , - 3504 , - 4505 , - 1426 , - 27 , - 308 , - 2269 , - 150 , - 5471 , - 952 , - 3873 , - 2714 , - 3235 , - 5436 , - 3557 , - 3358 , - 4839 , - 2240 , - 1321 , - 2082 , - 4523 , - 2884 , - 2925 , - 4646 , - 2287 , - 1608 , - 2609 , - 5290 , - 3891 , - 4172 , - 373 , - 4014 , - 3575 , - 4816 , - 1977 , - 818 , - 1339 , - 3540 , - 1661 , - 1462 , - 2943 , - 344 , - 5185 , - 186 , - 2627 , - 988 , - 1029 , - 2750 , - 391 , - 5472 , - 713 , - 3394 , - 1995 , - 2276 , - 4237 , - 2118 , - 1679 , - 2920 , - 81 , - 4682 , - 5203 , - 1644 , - 5525 , - 5326 , - 1047 , - 4208 , - 3289 , - 4050 , - 731 , - 4852 , - 4893 , - 854 , - 4255 , - 3576 , - 4577 , - 1498 , - 99 , - 380 , - 2341 , - 222 , - 5543 , - 1024 , - 3945 , - 2786 , - 3307 , - 5508 , - 3629 , - 3430 , - 4911 , - 2312 , - 1393 , - 2154 , - 4595 , - 2956 , - 2997 , - 4718 , - 2359 , - 1680 , - 2681 , - 5362 , - 3963 , - 4244 , - 445 , - 4086 , - 3647 , - 4888 , - 2049 , - 890 , - 1411 , - 3612 , - 1733 , - 1534 , - 3015 , - 416 , - 5257 , - 258 , - 2699 , - 1060 , - 1101 , - 2822 , - 463 , - 5544 , - 785 , - 3466 , - 2067 , - 2348 , - 4309 , - 2190 , - 1751 , - 2992 , - 153 , - 4754 , - 5275 , - 1716 , - 5597 , - 5398 , - 1119 , - 4280 , - 3361 , - 4122 , - 803 , - 4924 , - 4965 , - 926 , - 4327 , - 3648 , - 4649 , - 1570 , - 171 , - 452 , - 2413 , - 294 , - 5615 , - 1096 , - 4017 , - 2858 , - 3379 , - 5580 , - 3701 , - 3502 , - 4983 , - 2384 , - 1465 , - 2226 , - 4667 , - 3028 , - 3069 , - 4790 , - 2431 , - 1752 , - 2753 , - 5434 , - 4035 , - 4316 , - 517 , - 4158 , - 3719 , - 4960 , - 2121 , - 962 , - 1483 , - 3684 , - 1805 , - 1606 , - 3087 , - 488 , - 5329 , - 330 , - 2771 , - 1132 , - 1173 , - 2894 , - 535 , - 5616 , - 857 , - 3538 , - 2139 , - 2420 , - 4381 , - 2262 , - 1823 , - 3064 , - 225 , - 4826 , - 5347 , - 1788 , - 5669 , - 5470 , - 1191 , - 4352 , - 3433 , - 4194 , - 875 , - 4996 , - 5037 , - 998 , - 4399 , - 3720 , - 4721 , - 1642 , - 243 , - 524 , - 2485 , - 366 , - 5687 , - 1168 , - 4089 , - 2930 , - 3451 , - 5652 , - 3773 , - 3574 , - 5055 , - 2456 , - 1537 , - 2298 , - 4739 , - 3100 , - 3141 , - 4862 , - 2503 , - 1824 , - 2825 , - 5506 , - 4107 , - 4388 , - 589 , - 4230 , - 3791 , - 5032 , - 2193 , - 1034 , - 1555 , - 3756 , - 1877 , - 1678 , - 3159 , - 560 , - 5401 , - 402 , - 2843 , - 1204 , - 1245 , - 2966 , - 607 , - 5688 , - 929 , - 3610 , - 2211 , - 2492 , - 4453 , - 2334 , - 1895 , - 3136 , - 297 , - 4898 , - 5419 , - 1860 , - 5741 , - 5542 , - 1263 , - 4424 , - 3505 , - 4266 , - 947 , - 5068 , - 5109 , - 1070 , - 4471 , - 3792 , - 4793 , - 1714 , - 315 , - 596 , - 2557 , - 438 , - 5759 , - 1240 , - 4161 , - 3002 , - 3523 , - 5724 , - 3845 , - 3646 , - 5127 , - 2528 , - 1609 , - 2370 , - 4811 , - 3172 , - 3213 , - 4934 , - 2575 , - 1896 , - 2897 , - 5578 , - 4179 , - 4460 , - 661 , - 4302 , - 3863 , - 5104 , - 2265 , - 1106 , - 1627 , - 3828 , - 1949 , - 1750 , - 3231 , - 632 , - 5473 , - 474 , - 2915 , - 1276 , - 1317 , - 3038 , - 679 , - 0 , - 1683 , - 3002 , - 2501 , - 4548 , - 1863 , - 4638 , - 5593 , - 3272 , - 2043 , - 450 , - 2861 , - 1996 , - 2223 , - 2086 , - 129 , - 720 , - 2403 , - 3722 , - 3221 , - 5268 , - 2583 , - 5358 , - 489 , - 3992 , - 2763 , - 1170 , - 3581 , - 2716 , - 2943 , - 2806 , - 849 , - 1440 , - 3123 , - 4442 , - 3941 , - 164 , - 3303 , - 254 , - 1209 , - 4712 , - 3483 , - 1890 , - 4301 , - 3436 , - 3663 , - 3526 , - 1569 , - 2160 , - 3843 , - 5162 , - 4661 , - 884 , - 4023 , - 974 , - 1929 , - 5432 , - 4203 , - 2610 , - 5021 , - 4156 , - 4383 , - 4246 , - 2289 , - 2880 , - 4563 , - 58 , - 5381 , - 1604 , - 4743 , - 1694 , - 2649 , - 328 , - 4923 , - 3330 , - 5741 , - 4876 , - 5103 , - 4966 , - 3009 , - 3600 , - 5283 , - 778 , - 277 , - 2324 , - 5463 , - 2414 , - 3369 , - 1048 , - 5643 , - 4050 , - 637 , - 5596 , - 5823 , - 5686 , - 3729 , - 4320 , - 179 , - 1498 , - 997 , - 3044 , - 359 , - 3134 , - 4089 , - 1768 , - 539 , - 4770 , - 1357 , - 492 , - 719 , - 582 , - 4449 , - 5040 , - 899 , - 2218 , - 1717 , - 3764 , - 1079 , - 3854 , - 4809 , - 2488 , - 1259 , - 5490 , - 2077 , - 1212 , - 1439 , - 1302 , - 5169 , - 5760 , - 1619 , - 2938 , - 2437 , - 4484 , - 1799 , - 4574 , - 5529 , - 3208 , - 1979 , - 386 , - 2797 , - 1932 , - 2159 , - 2022 , - 65 , - 656 , - 2339 , - 3658 , - 3157 , - 5204 , - 2519 , - 5294 , - 425 , - 3928 , - 2699 , - 1106 , - 3517 , - 2652 , - 2879 , - 2742 , - 785 , - 1376 , - 3059 , - 4378 , - 3877 , - 100 , - 3239 , - 190 , - 1145 , - 4648 , - 3419 , - 1826 , - 4237 , - 3372 , - 3599 , - 3462 , - 1505 , - 2096 , - 3779 , - 5098 , - 4597 , - 820 , - 3959 , - 910 , - 1865 , - 5368 , - 4139 , - 2546 , - 4957 , - 4092 , - 4319 , - 4182 , - 2225 , - 2816 , - 4499 , - 5818 , - 5317 , - 1540 , - 4679 , - 1630 , - 2585 , - 264 , - 4859 , - 3266 , - 5677 , - 4812 , - 5039 , - 4902 , - 2945 , - 3536 , - 5219 , - 714 , - 213 , - 2260 , - 5399 , - 2350 , - 3305 , - 984 , - 5579 , - 3986 , - 573 , - 5532 , - 5759 , - 5622 , - 3665 , - 4256 , - 115 , - 1434 , - 933 , - 2980 , - 295 , - 3070 , - 4025 , - 1704 , - 475 , - 4706 , - 1293 , - 428 , - 655 , - 518 , - 4385 , - 4976 , - 835 , - 2154 , - 1653 , - 3700 , - 1015 , - 3790 , - 4745 , - 2424 , - 1195 , - 5426 , - 2013 , - 1148 , - 1375 , - 1238 , - 5105 , - 5696 , - 1555 , - 2874 , - 2373 , - 4420 , - 1735 , - 4510 , - 5465 , - 3144 , - 1915 , - 322 , - 2733 , - 1868 , - 2095 , - 1958 , - 1 , - 592 , - 2275 , - 3594 , - 3093 , - 5140 , - 2455 , - 5230 , - 361 , - 3864 , - 2635 , - 1042 , - 3453 , - 2588 , - 2815 , - 2678 , - 721 , - 1312 , - 2995 , - 4314 , - 3813 , - 36 , - 3175 , - 126 , - 1081 , - 4584 , - 3355 , - 1762 , - 4173 , - 3308 , - 3535 , - 3398 , - 1441 , - 2032 , - 3715 , - 5034 , - 4533 , - 756 , - 3895 , - 846 , - 1801 , - 5304 , - 4075 , - 2482 , - 4893 , - 4028 , - 4255 , - 4118 , - 2161 , - 2752 , - 4435 , - 5754 , - 5253 , - 1476 , - 4615 , - 1566 , - 2521 , - 200 , - 4795 , - 3202 , - 5613 , - 4748 , - 4975 , - 4838 , - 2881 , - 3472 , - 5155 , - 650 , - 149 , - 2196 , - 5335 , - 2286 , - 3241 , - 920 , - 5515 , - 3922 , - 509 , - 5468 , - 5695 , - 5558 , - 3601 , - 4192 , - 51 , - 1370 , - 869 , - 2916 , - 231 , - 3006 , - 3961 , - 1640 , - 411 , - 4642 , - 1229 , - 364 , - 591 , - 454 , - 4321 , - 4912 , - 771 , - 2090 , - 1589 , - 3636 , - 951 , - 3726 , - 4681 , - 2360 , - 1131 , - 5362 , - 1949 , - 1084 , - 1311 , - 1174 , - 5041 , - 5632 , - 1491 , - 2810 , - 2309 , - 4356 , - 1671 , - 4446 , - 5401 , - 3080 , - 1851 , - 258 , - 2669 , - 1804 , - 2031 , - 1894 , - 5761 , - 528 , - 2211 , - 3530 , - 3029 , - 5076 , - 2391 , - 5166 , - 297 , - 3800 , - 2571 , - 978 , - 3389 , - 2524 , - 2751 , - 2614 , - 657 , - 1248 , - 2931 , - 4250 , - 3749 , - 5796 , - 3111 , - 62 , - 1017 , - 4520 , - 3291 , - 1698 , - 4109 , - 3244 , - 3471 , - 3334 , - 1377 , - 1968 , - 3651 , - 4970 , - 4469 , - 692 , - 3831 , - 782 , - 1737 , - 5240 , - 4011 , - 2418 , - 4829 , - 3964 , - 4191 , - 4054 , - 2097 , - 2688 , - 4371 , - 5690 , - 5189 , - 1412 , - 4551 , - 1502 , - 2457 , - 136 , - 4731 , - 3138 , - 5549 , - 4684 , - 4911 , - 4774 , - 2817 , - 3408 , - 5091 , - 586 , - 85 , - 2132 , - 5271 , - 2222 , - 3177 , - 856 , - 5451 , - 3858 , - 445 , - 5404 , - 5631 , - 5494 , - 3537 , - 4128 , - 5811 , - 1306 , - 805 , - 2852 , - 167 , - 2942 , - 3897 , - 1576 , - 347 , - 4578 , - 1165 , - 300 , - 527 , - 390 , - 4257 , - 4848 , - 707 , - 2026 , - 1525 , - 3572 , - 887 , - 3662 , - 4617 , - 2296 , - 1067 , - 5298 , - 1885 , - 1020 , - 1247 , - 1110 , - 4977 , - 5568 , - 1427 , - 2746 , - 2245 , - 4292 , - 1607 , - 4382 , - 5337 , - 3016 , - 1787 , - 194 , - 2605 , - 1740 , - 1967 , - 1830 , - 5697 , - 464 , - 2147 , - 3466 , - 2965 , - 5012 , - 2327 , - 5102 , - 233 , - 3736 , - 2507 , - 914 , - 3325 , - 2460 , - 2687 , - 2550 , - 593 , - 1184 , - 2867 , - 4186 , - 3685 , - 5732 , - 3047 , - 5822 , - 953 , - 4456 , - 3227 , - 1634 , - 4045 , - 3180 , - 3407 , - 3270 , - 1313 , - 1904 , - 3587 , - 4906 , - 4405 , - 628 , - 3767 , - 718 , - 1673 , - 5176 , - 3947 , - 2354 , - 4765 , - 3900 , - 4127 , - 3990 , - 2033 , - 2624 , - 4307 , - 5626 , - 5125 , - 1348 , - 4487 , - 1438 , - 2393 , - 72 , - 4667 , - 3074 , - 5485 , - 4620 , - 4847 , - 4710 , - 2753 , - 3344 , - 5027 , - 522 , - 21 , - 2068 , - 5207 , - 2158 , - 3113 , - 792 , - 5387 , - 3794 , - 381 , - 5340 , - 5567 , - 5430 , - 3473 , - 4064 , - 5747 , - 1242 , - 741 , - 2788 , - 103 , - 2878 , - 3833 , - 1512 , - 283 , - 4514 , - 1101 , - 236 , - 463 , - 326 , - 4193 , - 4784 , - 643 , - 1962 , - 1461 , - 3508 , - 823 , - 3598 , - 4553 , - 2232 , - 1003 , - 5234 , - 1821 , - 956 , - 1183 , - 1046 , - 4913 , - 5504 , - 1363 , - 2682 , - 2181 , - 4228 , - 1543 , - 4318 , - 5273 , - 2952 , - 1723 , - 130 , - 2541 , - 1676 , - 1903 , - 1766 , - 5633 , - 400 , - 2083 , - 3402 , - 2901 , - 4948 , - 2263 , - 5038 , - 169 , - 3672 , - 2443 , - 850 , - 3261 , - 2396 , - 2623 , - 2486 , - 529 , - 1120 , - 2803 , - 4122 , - 3621 , - 5668 , - 2983 , - 5758 , - 889 , - 4392 , - 3163 , - 1570 , - 3981 , - 3116 , - 3343 , - 3206 , - 1249 , - 1840 , - 3523 , - 4842 , - 4341 , - 564 , - 3703 , - 654 , - 1609 , - 5112 , - 3883 , - 2290 , - 4701 , - 3836 , - 4063 , - 3926 , - 1969 , - 2560 , - 4243 , - 5562 , - 5061 , - 1284 , - 4423 , - 1374 , - 2329 , - 8 , - 4603 , - 3010 , - 5421 , - 4556 , - 4783 , - 4646 , - 2689 , - 3280 , - 4963 , - 458 , - 5781 , - 2004 , - 5143 , - 2094 , - 3049 , - 728 , - 5323 , - 3730 , - 317 , - 5276 , - 5503 , - 5366 , - 3409 , - 4000 , - 5683 , - 1178 , - 677 , - 2724 , - 39 , - 2814 , - 3769 , - 1448 , - 219 , - 4450 , - 1037 , - 172 , - 399 , - 262 , - 4129 , - 4720 , - 579 , - 1898 , - 1397 , - 3444 , - 759 , - 3534 , - 4489 , - 2168 , - 939 , - 5170 , - 1757 , - 892 , - 1119 , - 982 , - 4849 , - 5440 , - 1299 , - 2618 , - 2117 , - 4164 , - 1479 , - 4254 , - 5209 , - 2888 , - 1659 , - 66 , - 2477 , - 1612 , - 1839 , - 1702 , - 5569 , - 336 , - 2019 , - 3338 , - 2837 , - 4884 , - 2199 , - 4974 , - 105 , - 3608 , - 2379 , - 786 , - 3197 , - 2332 , - 2559 , - 2422 , - 465 , - 1056 , - 2739 , - 4058 , - 3557 , - 5604 , - 2919 , - 5694 , - 825 , - 4328 , - 3099 , - 1506 , - 3917 , - 3052 , - 3279 , - 3142 , - 1185 , - 1776 , - 3459 , - 4778 , - 4277 , - 500 , - 3639 , - 590 , - 1545 , - 5048 , - 3819 , - 2226 , - 4637 , - 3772 , - 3999 , - 3862 , - 1905 , - 2496 , - 4179 , - 5498 , - 4997 , - 1220 , - 4359 , - 1310 , - 2265 , - 5768 , - 4539 , - 2946 , - 5357 , - 4492 , - 4719 , - 4582 , - 2625 , - 3216 , - 4899 , - 394 , - 5717 , - 1940 , - 5079 , - 2030 , - 2985 , - 664 , - 5259 , - 3666 , - 253 , - 5212 , - 5439 , - 5302 , - 3345 , - 3936 , - 5619 , - 1114 , - 613 , - 2660 , - 5799 , - 2750 , - 3705 , - 1384 , - 155 , - 4386 , - 973 , - 108 , - 335 , - 198 , - 4065 , - 4656 , - 515 , - 1834 , - 1333 , - 3380 , - 695 , - 3470 , - 4425 , - 2104 , - 875 , - 5106 , - 1693 , - 828 , - 1055 , - 918 , - 4785 , - 5376 , - 1235 , - 2554 , - 2053 , - 4100 , - 1415 , - 4190 , - 5145 , - 2824 , - 1595 , - 2 , - 2413 , - 1548 , - 1775 , - 1638 , - 5505 , - 272 , - 1955 , - 3274 , - 2773 , - 4820 , - 2135 , - 4910 , - 41 , - 3544 , - 2315 , - 722 , - 3133 , - 2268 , - 2495 , - 2358 , - 401 , - 992 , - 2675 , - 3994 , - 3493 , - 5540 , - 2855 , - 5630 , - 761 , - 4264 , - 3035 , - 1442 , - 3853 , - 2988 , - 3215 , - 3078 , - 1121 , - 1712 , - 3395 , - 4714 , - 4213 , - 436 , - 3575 , - 526 , - 1481 , - 4984 , - 3755 , - 2162 , - 4573 , - 3708 , - 3935 , - 3798 , - 1841 , - 2432 , - 4115 , - 5434 , - 4933 , - 1156 , - 4295 , - 1246 , - 2201 , - 5704 , - 4475 , - 2882 , - 5293 , - 4428 , - 4655 , - 4518 , - 2561 , - 3152 , - 4835 , - 330 , - 5653 , - 1876 , - 5015 , - 1966 , - 2921 , - 600 , - 5195 , - 3602 , - 189 , - 5148 , - 5375 , - 5238 , - 3281 , - 3872 , - 5555 , - 1050 , - 549 , - 2596 , - 5735 , - 2686 , - 3641 , - 1320 , - 91 , - 4322 , - 909 , - 44 , - 271 , - 134 , - 4001 , - 4592 , - 451 , - 1770 , - 1269 , - 3316 , - 631 , - 3406 , - 4361 , - 2040 , - 811 , - 5042 , - 1629 , - 764 , - 991 , - 854 , - 4721 , - 5312 , - 1171 , - 2490 , - 1989 , - 4036 , - 1351 , - 4126 , - 5081 , - 2760 , - 1531 , - 5762 , - 2349 , - 1484 , - 1711 , - 1574 , - 5441 , - 208 , - 1891 , - 3210 , - 2709 , - 4756 , - 2071 , - 4846 , - 5801 , - 3480 , - 2251 , - 658 , - 3069 , - 2204 , - 2431 , - 2294 , - 337 , - 928 , - 2611 , - 3930 , - 3429 , - 5476 , - 2791 , - 5566 , - 697 , - 4200 , - 2971 , - 1378 , - 3789 , - 2924 , - 3151 , - 3014 , - 1057 , - 1648 , - 3331 , - 4650 , - 4149 , - 372 , - 3511 , - 462 , - 1417 , - 4920 , - 3691 , - 2098 , - 4509 , - 3644 , - 3871 , - 3734 , - 1777 , - 2368 , - 4051 , - 5370 , - 4869 , - 1092 , - 4231 , - 1182 , - 2137 , - 5640 , - 4411 , - 2818 , - 5229 , - 4364 , - 4591 , - 4454 , - 2497 , - 3088 , - 4771 , - 266 , - 5589 , - 1812 , - 4951 , - 1902 , - 2857 , - 536 , - 5131 , - 3538 , - 125 , - 5084 , - 5311 , - 5174 , - 3217 , - 3808 , - 5491 , - 986 , - 485 , - 2532 , - 5671 , - 2622 , - 3577 , - 1256 , - 27 , - 4258 , - 845 , - 5804 , - 207 , - 70 , - 3937 , - 4528 , - 387 , - 1706 , - 1205 , - 3252 , - 567 , - 3342 , - 4297 , - 1976 , - 747 , - 4978 , - 1565 , - 700 , - 927 , - 790 , - 4657 , - 5248 , - 1107 , - 2426 , - 1925 , - 3972 , - 1287 , - 4062 , - 5017 , - 2696 , - 1467 , - 5698 , - 2285 , - 1420 , - 1647 , - 1510 , - 5377 , - 144 , - 1827 , - 3146 , - 2645 , - 4692 , - 2007 , - 4782 , - 5737 , - 3416 , - 2187 , - 594 , - 3005 , - 2140 , - 2367 , - 2230 , - 273 , - 864 , - 2547 , - 3866 , - 3365 , - 5412 , - 2727 , - 5502 , - 633 , - 4136 , - 2907 , - 1314 , - 3725 , - 2860 , - 3087 , - 2950 , - 993 , - 1584 , - 3267 , - 4586 , - 4085 , - 308 , - 3447 , - 398 , - 1353 , - 4856 , - 3627 , - 2034 , - 4445 , - 3580 , - 3807 , - 3670 , - 1713 , - 2304 , - 3987 , - 5306 , - 4805 , - 1028 , - 4167 , - 1118 , - 2073 , - 5576 , - 4347 , - 2754 , - 5165 , - 4300 , - 4527 , - 4390 , - 2433 , - 3024 , - 4707 , - 202 , - 5525 , - 1748 , - 4887 , - 1838 , - 2793 , - 472 , - 5067 , - 3474 , - 61 , - 5020 , - 5247 , - 5110 , - 3153 , - 3744 , - 5427 , - 922 , - 421 , - 2468 , - 5607 , - 2558 , - 3513 , - 1192 , - 5787 , - 4194 , - 781 , - 5740 , - 143 , - 6 , - 3873 , - 4464 , - 323 , - 1642 , - 1141 , - 3188 , - 503 , - 3278 , - 4233 , - 1912 , - 683 , - 4914 , - 1501 , - 636 , - 863 , - 726 , - 4593 , - 5184 , - 1043 , - 2362 , - 1861 , - 3908 , - 1223 , - 3998 , - 4953 , - 2632 , - 1403 , - 5634 , - 2221 , - 1356 , - 1583 , - 1446 , - 5313 , - 80 , - 1763 , - 3082 , - 2581 , - 4628 , - 1943 , - 4718 , - 5673 , - 3352 , - 2123 , - 530 , - 2941 , - 2076 , - 2303 , - 2166 , - 209 , - 800 , - 2483 , - 3802 , - 3301 , - 5348 , - 2663 , - 5438 , - 569 , - 4072 , - 2843 , - 1250 , - 3661 , - 2796 , - 3023 , - 2886 , - 929 , - 1520 , - 3203 , - 4522 , - 4021 , - 244 , - 3383 , - 334 , - 1289 , - 4792 , - 3563 , - 1970 , - 4381 , - 3516 , - 3743 , - 3606 , - 1649 , - 2240 , - 3923 , - 5242 , - 4741 , - 964 , - 4103 , - 1054 , - 2009 , - 5512 , - 4283 , - 2690 , - 5101 , - 4236 , - 4463 , - 4326 , - 2369 , - 2960 , - 4643 , - 138 , - 5461 , - 1684 , - 4823 , - 1774 , - 2729 , - 408 , - 5003 , - 3410 , - 5821 , - 4956 , - 5183 , - 5046 , - 3089 , - 3680 , - 5363 , - 858 , - 357 , - 2404 , - 5543 , - 2494 , - 3449 , - 1128 , - 5723 , - 4130 , - 717 , - 5676 , - 79 , - 5766 , - 3809 , - 4400 , - 259 , - 1578 , - 1077 , - 3124 , - 439 , - 3214 , - 4169 , - 1848 , - 619 , - 4850 , - 1437 , - 572 , - 799 , - 662 , - 4529 , - 5120 , - 979 , - 2298 , - 1797 , - 3844 , - 1159 , - 3934 , - 4889 , - 2568 , - 1339 , - 5570 , - 2157 , - 1292 , - 1519 , - 1382 , - 5249 , - 16 , - 1699 , - 3018 , - 2517 , - 4564 , - 1879 , - 4654 , - 5609 , - 3288 , - 2059 , - 466 , - 2877 , - 2012 , - 2239 , - 2102 , - 145 , - 736 , - 2419 , - 3738 , - 3237 , - 5284 , - 2599 , - 5374 , - 505 , - 4008 , - 2779 , - 1186 , - 3597 , - 2732 , - 2959 , - 2822 , - 865 , - 1456 , - 3139 , - 4458 , - 3957 , - 180 , - 3319 , - 270 , - 1225 , - 4728 , - 3499 , - 1906 , - 4317 , - 3452 , - 3679 , - 3542 , - 1585 , - 2176 , - 3859 , - 5178 , - 4677 , - 900 , - 4039 , - 990 , - 1945 , - 5448 , - 4219 , - 2626 , - 5037 , - 4172 , - 4399 , - 4262 , - 2305 , - 2896 , - 4579 , - 74 , - 5397 , - 1620 , - 4759 , - 1710 , - 2665 , - 344 , - 4939 , - 3346 , - 5757 , - 4892 , - 5119 , - 4982 , - 3025 , - 3616 , - 5299 , - 794 , - 293 , - 2340 , - 5479 , - 2430 , - 3385 , - 1064 , - 5659 , - 4066 , - 653 , - 5612 , - 15 , - 5702 , - 3745 , - 4336 , - 195 , - 1514 , - 1013 , - 3060 , - 375 , - 3150 , - 4105 , - 1784 , - 555 , - 4786 , - 1373 , - 508 , - 735 , - 598 , - 4465 , - 5056 , - 915 , - 2234 , - 1733 , - 3780 , - 1095 , - 3870 , - 4825 , - 2504 , - 1275 , - 5506 , - 2093 , - 1228 , - 1455 , - 1318 , - 5185 , - 5776 , - 1635 , - 2954 , - 2453 , - 4500 , - 1815 , - 4590 , - 5545 , - 3224 , - 1995 , - 402 , - 2813 , - 1948 , - 2175 , - 2038 , - 81 , - 672 , - 2355 , - 3674 , - 3173 , - 5220 , - 2535 , - 5310 , - 441 , - 3944 , - 2715 , - 1122 , - 3533 , - 2668 , - 2895 , - 2758 , - 801 , - 1392 , - 3075 , - 4394 , - 3893 , - 116 , - 3255 , - 206 , - 1161 , - 4664 , - 3435 , - 1842 , - 4253 , - 3388 , - 3615 , - 3478 , - 1521 , - 2112 , - 3795 , - 5114 , - 4613 , - 836 , - 3975 , - 926 , - 1881 , - 5384 , - 4155 , - 2562 , - 4973 , - 4108 , - 4335 , - 4198 , - 2241 , - 2832 , - 4515 , - 10 , - 5333 , - 1556 , - 4695 , - 1646 , - 2601 , - 280 , - 4875 , - 3282 , - 5693 , - 4828 , - 5055 , - 4918 , - 2961 , - 3552 , - 5235 , - 730 , - 229 , - 2276 , - 5415 , - 2366 , - 3321 , - 1000 , - 5595 , - 4002 , - 589 , - 5548 , - 5775 , - 5638 , - 3681 , - 4272 , - 131 , - 1450 , - 949 , - 2996 , - 311 , - 3086 , - 4041 , - 1720 , - 491 , - 4722 , - 1309 , - 444 , - 671 , - 534 , - 4401 , - 4992 , - 851 , - 2170 , - 1669 , - 3716 , - 1031 , - 3806 , - 4761 , - 2440 , - 1211 , - 5442 , - 2029 , - 1164 , - 1391 , - 1254 , - 5121 , - 5712 , - 1571 , - 2890 , - 2389 , - 4436 , - 1751 , - 4526 , - 5481 , - 3160 , - 1931 , - 338 , - 2749 , - 1884 , - 2111 , - 1974 , - 17 , - 608 , - 2291 , - 3610 , - 3109 , - 5156 , - 2471 , - 5246 , - 377 , - 3880 , - 2651 , - 1058 , - 3469 , - 2604 , - 2831 , - 2694 , - 737 , - 1328 , - 3011 , - 4330 , - 3829 , - 52 , - 3191 , - 142 , - 1097 , - 4600 , - 3371 , - 1778 , - 4189 , - 3324 , - 3551 , - 3414 , - 1457 , - 2048 , - 3731 , - 5050 , - 4549 , - 772 , - 3911 , - 862 , - 1817 , - 5320 , - 4091 , - 2498 , - 4909 , - 4044 , - 4271 , - 4134 , - 2177 , - 2768 , - 4451 , - 5770 , - 5269 , - 1492 , - 4631 , - 1582 , - 2537 , - 216 , - 4811 , - 3218 , - 5629 , - 4764 , - 4991 , - 4854 , - 2897 , - 3488 , - 5171 , - 666 , - 165 , - 2212 , - 5351 , - 2302 , - 3257 , - 936 , - 5531 , - 3938 , - 525 , - 5484 , - 5711 , - 5574 , - 3617 , - 4208 , - 67 , - 1386 , - 885 , - 2932 , - 247 , - 3022 , - 3977 , - 1656 , - 427 , - 4658 , - 1245 , - 380 , - 607 , - 470 , - 4337 , - 4928 , - 787 , - 2106 , - 1605 , - 3652 , - 967 , - 3742 , - 4697 , - 2376 , - 1147 , - 5378 , - 1965 , - 1100 , - 1327 , - 1190 , - 5057 , - 5648 , - 1507 , - 2826 , - 2325 , - 4372 , - 1687 , - 4462 , - 5417 , - 3096 , - 1867 , - 274 , - 2685 , - 1820 , - 2047 , - 1910 , - 5777 , - 544 , - 2227 , - 3546 , - 3045 , - 5092 , - 2407 , - 5182 , - 313 , - 3816 , - 2587 , - 994 , - 3405 , - 2540 , - 2767 , - 2630 , - 673 , - 1264 , - 2947 , - 4266 , - 3765 , - 5812 , - 3127 , - 78 , - 1033 , - 4536 , - 3307 , - 1714 , - 4125 , - 3260 , - 3487 , - 3350 , - 1393 , - 1984 , - 3667 , - 4986 , - 4485 , - 708 , - 3847 , - 798 , - 1753 , - 5256 , - 4027 , - 2434 , - 4845 , - 3980 , - 4207 , - 4070 , - 2113 , - 2704 , - 4387 , - 5706 , - 5205 , - 1428 , - 4567 , - 1518 , - 2473 , - 152 , - 4747 , - 3154 , - 5565 , - 4700 , - 4927 , - 4790 , - 2833 , - 3424 , - 5107 , - 602 , - 101 , - 2148 , - 5287 , - 2238 , - 3193 , - 872 , - 5467 , - 3874 , - 461 , - 5420 , - 5647 , - 5510 , - 3553 , - 4144 , - 3 , - 1322 , - 821 , - 2868 , - 183 , - 2958 , - 3913 , - 1592 , - 363 , - 4594 , - 1181 , - 316 , - 543 , - 406 , - 4273 , - 4864 , - 723 , - 2042 , - 1541 , - 3588 , - 903 , - 3678 , - 4633 , - 2312 , - 1083 , - 5314 , - 1901 , - 1036 , - 1263 , - 1126 , - 4993 , - 5584 , - 1443 , - 2762 , - 2261 , - 4308 , - 1623 , - 4398 , - 5353 , - 3032 , - 1803 , - 210 , - 2621 , - 1756 , - 1983 , - 1846 , - 5713 , - 480 , - 2163 , - 3482 , - 2981 , - 5028 , - 2343 , - 5118 , - 249 , - 3752 , - 2523 , - 930 , - 3341 , - 2476 , - 2703 , - 2566 , - 609 , - 1200 , - 2883 , - 4202 , - 3701 , - 5748 , - 3063 , - 14 , - 969 , - 4472 , - 3243 , - 1650 , - 4061 , - 3196 , - 3423 , - 3286 , - 1329 , - 1920 , - 3603 , - 4922 , - 4421 , - 644 , - 3783 , - 734 , - 1689 , - 5192 , - 3963 , - 2370 , - 4781 , - 3916 , - 4143 , - 4006 , - 2049 , - 2640 , - 4323 , - 5642 , - 5141 , - 1364 , - 4503 , - 1454 , - 2409 , - 88 , - 4683 , - 3090 , - 5501 , - 4636 , - 4863 , - 4726 , - 2769 , - 3360 , - 5043 , - 538 , - 37 , - 2084 , - 5223 , - 2174 , - 3129 , - 808 , - 5403 , - 3810 , - 397 , - 5356 , - 5583 , - 5446 , - 3489 , - 4080 , - 5763 , - 1258 , - 757 , - 2804 , - 119 , - 2894 , - 3849 , - 1528 , - 299 , - 4530 , - 1117 , - 252 , - 479 , - 342 , - 4209 , - 4800 , - 659 , - 1978 , - 1477 , - 3524 , - 839 , - 3614 , - 4569 , - 2248 , - 1019 , - 5250 , - 1837 , - 972 , - 1199 , - 1062 , - 4929 , - 5520 , - 1379 , - 2698 , - 2197 , - 4244 , - 1559 , - 4334 , - 5289 , - 2968 , - 1739 , - 146 , - 2557 , - 1692 , - 1919 , - 1782 , - 5649 , - 416 , - 2099 , - 3418 , - 2917 , - 4964 , - 2279 , - 5054 , - 185 , - 3688 , - 2459 , - 866 , - 3277 , - 2412 , - 2639 , - 2502 , - 545 , - 1136 , - 2819 , - 4138 , - 3637 , - 5684 , - 2999 , - 5774 , - 905 , - 4408 , - 3179 , - 1586 , - 3997 , - 3132 , - 3359 , - 3222 , - 1265 , - 1856 , - 3539 , - 4858 , - 4357 , - 580 , - 3719 , - 670 , - 1625 , - 5128 , - 3899 , - 2306 , - 4717 , - 3852 , - 4079 , - 3942 , - 1985 , - 2576 , - 4259 , - 5578 , - 5077 , - 1300 , - 4439 , - 1390 , - 2345 , - 24 , - 4619 , - 3026 , - 5437 , - 4572 , - 4799 , - 4662 , - 2705 , - 3296 , - 4979 , - 474 , - 5797 , - 2020 , - 5159 , - 2110 , - 3065 , - 744 , - 5339 , - 3746 , - 333 , - 5292 , - 5519 , - 5382 , - 3425 , - 4016 , - 5699 , - 1194 , - 693 , - 2740 , - 55 , - 2830 , - 3785 , - 1464 , - 235 , - 4466 , - 1053 , - 188 , - 415 , - 278 , - 4145 , - 4736 , - 595 , - 1914 , - 1413 , - 3460 , - 775 , - 3550 , - 4505 , - 2184 , - 955 , - 5186 , - 1773 , - 908 , - 1135 , - 998 , - 4865 , - 5456 , - 1315 , - 2634 , - 2133 , - 4180 , - 1495 , - 4270 , - 5225 , - 2904 , - 1675 , - 82 , - 2493 , - 1628 , - 1855 , - 1718 , - 5585 , - 352 , - 2035 , - 3354 , - 2853 , - 4900 , - 2215 , - 4990 , - 121 , - 3624 , - 2395 , - 802 , - 3213 , - 2348 , - 2575 , - 2438 , - 481 , - 1072 , - 2755 , - 4074 , - 3573 , - 5620 , - 2935 , - 5710 , - 841 , - 4344 , - 3115 , - 1522 , - 3933 , - 3068 , - 3295 , - 3158 , - 1201 , - 1792 , - 3475 , - 4794 , - 4293 , - 516 , - 3655 , - 606 , - 1561 , - 5064 , - 3835 , - 2242 , - 4653 , - 3788 , - 4015 , - 3878 , - 1921 , - 2512 , - 4195 , - 5514 , - 5013 , - 1236 , - 4375 , - 1326 , - 2281 , - 5784 , - 4555 , - 2962 , - 5373 , - 4508 , - 4735 , - 4598 , - 2641 , - 3232 , - 4915 , - 410 , - 5733 , - 1956 , - 5095 , - 2046 , - 3001 , - 680 , - 5275 , - 3682 , - 269 , - 5228 , - 5455 , - 5318 , - 3361 , - 3952 , - 5635 , - 1130 , - 629 , - 2676 , - 5815 , - 2766 , - 3721 , - 1400 , - 171 , - 4402 , - 989 , - 124 , - 351 , - 214 , - 4081 , - 4672 , - 531 , - 1850 , - 1349 , - 3396 , - 711 , - 3486 , - 4441 , - 2120 , - 891 , - 5122 , - 1709 , - 844 , - 1071 , - 934 , - 4801 , - 5392 , - 1251 , - 2570 , - 2069 , - 4116 , - 1431 , - 4206 , - 5161 , - 2840 , - 1611 , - 18 , - 2429 , - 1564 , - 1791 , - 1654 , - 5521 , - 288 , - 1971 , - 3290 , - 2789 , - 4836 , - 2151 , - 4926 , - 57 , - 3560 , - 2331 , - 738 , - 3149 , - 2284 , - 2511 , - 2374 , - 417 , - 1008 , - 2691 , - 4010 , - 3509 , - 5556 , - 2871 , - 5646 , - 777 , - 4280 , - 3051 , - 1458 , - 3869 , - 3004 , - 3231 , - 3094 , - 1137 , - 1728 , - 3411 , - 4730 , - 4229 , - 452 , - 3591 , - 542 , - 1497 , - 5000 , - 3771 , - 2178 , - 4589 , - 3724 , - 3951 , - 3814 , - 1857 , - 2448 , - 4131 , - 5450 , - 4949 , - 1172 , - 4311 , - 1262 , - 2217 , - 5720 , - 4491 , - 2898 , - 5309 , - 4444 , - 4671 , - 4534 , - 2577 , - 3168 , - 4851 , - 346 , - 5669 , - 1892 , - 5031 , - 1982 , - 2937 , - 616 , - 5211 , - 3618 , - 205 , - 5164 , - 5391 , - 5254 , - 3297 , - 3888 , - 5571 , - 1066 , - 565 , - 2612 , - 5751 , - 2702 , - 3657 , - 1336 , - 107 , - 4338 , - 925 , - 60 , - 287 , - 150 , - 4017 , - 4608 , - 467 , - 1786 , - 1285 , - 3332 , - 647 , - 3422 , - 4377 , - 2056 , - 827 , - 5058 , - 1645 , - 780 , - 1007 , - 870 , - 4737 , - 5328 , - 1187 , - 2506 , - 2005 , - 4052 , - 1367 , - 4142 , - 5097 , - 2776 , - 1547 , - 5778 , - 2365 , - 1500 , - 1727 , - 1590 , - 5457 , - 224 , - 1907 , - 3226 , - 2725 , - 4772 , - 2087 , - 4862 , - 5817 , - 3496 , - 2267 , - 674 , - 3085 , - 2220 , - 2447 , - 2310 , - 353 , - 944 , - 2627 , - 3946 , - 3445 , - 5492 , - 2807 , - 5582 , - 713 , - 4216 , - 2987 , - 1394 , - 3805 , - 2940 , - 3167 , - 3030 , - 1073 , - 1664 , - 3347 , - 4666 , - 4165 , - 388 , - 3527 , - 478 , - 1433 , - 4936 , - 3707 , - 2114 , - 4525 , - 3660 , - 3887 , - 3750 , - 1793 , - 2384 , - 4067 , - 5386 , - 4885 , - 1108 , - 4247 , - 1198 , - 2153 , - 5656 , - 4427 , - 2834 , - 5245 , - 4380 , - 4607 , - 4470 , - 2513 , - 3104 , - 4787 , - 282 , - 5605 , - 1828 , - 4967 , - 1918 , - 2873 , - 552 , - 5147 , - 3554 , - 141 , - 5100 , - 5327 , - 5190 , - 3233 , - 3824 , - 5507 , - 1002 , - 501 , - 2548 , - 5687 , - 2638 , - 3593 , - 1272 , - 43 , - 4274 , - 861 , - 5820 , - 223 , - 86 , - 3953 , - 4544 , - 403 , - 1722 , - 1221 , - 3268 , - 583 , - 3358 , - 4313 , - 1992 , - 763 , - 4994 , - 1581 , - 716 , - 943 , - 806 , - 4673 , - 5264 , - 1123 , - 2442 , - 1941 , - 3988 , - 1303 , - 4078 , - 5033 , - 2712 , - 1483 , - 5714 , - 2301 , - 1436 , - 1663 , - 1526 , - 5393 , - 160 , - 1843 , - 3162 , - 2661 , - 4708 , - 2023 , - 4798 , - 5753 , - 3432 , - 2203 , - 610 , - 3021 , - 2156 , - 2383 , - 2246 , - 289 , - 880 , - 2563 , - 3882 , - 3381 , - 5428 , - 2743 , - 5518 , - 649 , - 4152 , - 2923 , - 1330 , - 3741 , - 2876 , - 3103 , - 2966 , - 1009 , - 1600 , - 3283 , - 4602 , - 4101 , - 324 , - 3463 , - 414 , - 1369 , - 4872 , - 3643 , - 2050 , - 4461 , - 3596 , - 3823 , - 3686 , - 1729 , - 2320 , - 4003 , - 5322 , - 4821 , - 1044 , - 4183 , - 1134 , - 2089 , - 5592 , - 4363 , - 2770 , - 5181 , - 4316 , - 4543 , - 4406 , - 2449 , - 3040 , - 4723 , - 218 , - 5541 , - 1764 , - 4903 , - 1854 , - 2809 , - 488 , - 5083 , - 3490 , - 77 , - 5036 , - 5263 , - 5126 , - 3169 , - 3760 , - 5443 , - 938 , - 437 , - 2484 , - 5623 , - 2574 , - 3529 , - 1208 , - 5803 , - 4210 , - 797 , - 5756 , - 159 , - 22 , - 3889 , - 4480 , - 339 , - 1658 , - 1157 , - 3204 , - 519 , - 3294 , - 4249 , - 1928 , - 699 , - 4930 , - 1517 , - 652 , - 879 , - 742 , - 4609 , - 5200 , - 1059 , - 2378 , - 1877 , - 3924 , - 1239 , - 4014 , - 4969 , - 2648 , - 1419 , - 5650 , - 2237 , - 1372 , - 1599 , - 1462 , - 5329 , - 96 , - 1779 , - 3098 , - 2597 , - 4644 , - 1959 , - 4734 , - 5689 , - 3368 , - 2139 , - 546 , - 2957 , - 2092 , - 2319 , - 2182 , - 225 , - 816 , - 2499 , - 3818 , - 3317 , - 5364 , - 2679 , - 5454 , - 585 , - 4088 , - 2859 , - 1266 , - 3677 , - 2812 , - 3039 , - 2902 , - 945 , - 1536 , - 3219 , - 4538 , - 4037 , - 260 , - 3399 , - 350 , - 1305 , - 4808 , - 3579 , - 1986 , - 4397 , - 3532 , - 3759 , - 3622 , - 1665 , - 2256 , - 3939 , - 5258 , - 4757 , - 980 , - 4119 , - 1070 , - 2025 , - 5528 , - 4299 , - 2706 , - 5117 , - 4252 , - 4479 , - 4342 , - 2385 , - 2976 , - 4659 , - 154 , - 5477 , - 1700 , - 4839 , - 1790 , - 2745 , - 424 , - 5019 , - 3426 , - 13 , - 4972 , - 5199 , - 5062 , - 3105 , - 3696 , - 5379 , - 874 , - 373 , - 2420 , - 5559 , - 2510 , - 3465 , - 1144 , - 5739 , - 4146 , - 733 , - 5692 , - 95 , - 5782 , - 3825 , - 4416 , - 275 , - 1594 , - 1093 , - 3140 , - 455 , - 3230 , - 4185 , - 1864 , - 635 , - 4866 , - 1453 , - 588 , - 815 , - 678 , - 4545 , - 5136 , - 995 , - 2314 , - 1813 , - 3860 , - 1175 , - 3950 , - 4905 , - 2584 , - 1355 , - 5586 , - 2173 , - 1308 , - 1535 , - 1398 , - 5265 , - 32 , - 1715 , - 3034 , - 2533 , - 4580 , - 1895 , - 4670 , - 5625 , - 3304 , - 2075 , - 482 , - 2893 , - 2028 , - 2255 , - 2118 , - 161 , - 752 , - 2435 , - 3754 , - 3253 , - 5300 , - 2615 , - 5390 , - 521 , - 4024 , - 2795 , - 1202 , - 3613 , - 2748 , - 2975 , - 2838 , - 881 , - 1472 , - 3155 , - 4474 , - 3973 , - 196 , - 3335 , - 286 , - 1241 , - 4744 , - 3515 , - 1922 , - 4333 , - 3468 , - 3695 , - 3558 , - 1601 , - 2192 , - 3875 , - 5194 , - 4693 , - 916 , - 4055 , - 1006 , - 1961 , - 5464 , - 4235 , - 2642 , - 5053 , - 4188 , - 4415 , - 4278 , - 2321 , - 2912 , - 4595 , - 90 , - 5413 , - 1636 , - 4775 , - 1726 , - 2681 , - 360 , - 4955 , - 3362 , - 5773 , - 4908 , - 5135 , - 4998 , - 3041 , - 3632 , - 5315 , - 810 , - 309 , - 2356 , - 5495 , - 2446 , - 3401 , - 1080 , - 5675 , - 4082 , - 669 , - 5628 , - 31 , - 5718 , - 3761 , - 4352 , - 211 , - 1530 , - 1029 , - 3076 , - 391 , - 3166 , - 4121 , - 1800 , - 571 , - 4802 , - 1389 , - 524 , - 751 , - 614 , - 4481 , - 5072 , - 931 , - 2250 , - 1749 , - 3796 , - 1111 , - 3886 , - 4841 , - 2520 , - 1291 , - 5522 , - 2109 , - 1244 , - 1471 , - 1334 , - 5201 , - 5792 , - 1651 , - 2970 , - 2469 , - 4516 , - 1831 , - 4606 , - 5561 , - 3240 , - 2011 , - 418 , - 2829 , - 1964 , - 2191 , - 2054 , - 97 , - 688 , - 2371 , - 3690 , - 3189 , - 5236 , - 2551 , - 5326 , - 457 , - 3960 , - 2731 , - 1138 , - 3549 , - 2684 , - 2911 , - 2774 , - 817 , - 1408 , - 3091 , - 4410 , - 3909 , - 132 , - 3271 , - 222 , - 1177 , - 4680 , - 3451 , - 1858 , - 4269 , - 3404 , - 3631 , - 3494 , - 1537 , - 2128 , - 3811 , - 5130 , - 4629 , - 852 , - 3991 , - 942 , - 1897 , - 5400 , - 4171 , - 2578 , - 4989 , - 4124 , - 4351 , - 4214 , - 2257 , - 2848 , - 4531 , - 26 , - 5349 , - 1572 , - 4711 , - 1662 , - 2617 , - 296 , - 4891 , - 3298 , - 5709 , - 4844 , - 5071 , - 4934 , - 2977 , - 3568 , - 5251 , - 746 , - 245 , - 2292 , - 5431 , - 2382 , - 3337 , - 1016 , - 5611 , - 4018 , - 605 , - 5564 , - 5791 , - 5654 , - 3697 , - 4288 , - 147 , - 1466 , - 965 , - 3012 , - 327 , - 3102 , - 4057 , - 1736 , - 507 , - 4738 , - 1325 , - 460 , - 687 , - 550 , - 4417 , - 5008 , - 867 , - 2186 , - 1685 , - 3732 , - 1047 , - 3822 , - 4777 , - 2456 , - 1227 , - 5458 , - 2045 , - 1180 , - 1407 , - 1270 , - 5137 , - 5728 , - 1587 , - 2906 , - 2405 , - 4452 , - 1767 , - 4542 , - 5497 , - 3176 , - 1947 , - 354 , - 2765 , - 1900 , - 2127 , - 1990 , - 33 , - 624 , - 2307 , - 3626 , - 3125 , - 5172 , - 2487 , - 5262 , - 393 , - 3896 , - 2667 , - 1074 , - 3485 , - 2620 , - 2847 , - 2710 , - 753 , - 1344 , - 3027 , - 4346 , - 3845 , - 68 , - 3207 , - 158 , - 1113 , - 4616 , - 3387 , - 1794 , - 4205 , - 3340 , - 3567 , - 3430 , - 1473 , - 2064 , - 3747 , - 5066 , - 4565 , - 788 , - 3927 , - 878 , - 1833 , - 5336 , - 4107 , - 2514 , - 4925 , - 4060 , - 4287 , - 4150 , - 2193 , - 2784 , - 4467 , - 5786 , - 5285 , - 1508 , - 4647 , - 1598 , - 2553 , - 232 , - 4827 , - 3234 , - 5645 , - 4780 , - 5007 , - 4870 , - 2913 , - 3504 , - 5187 , - 682 , - 181 , - 2228 , - 5367 , - 2318 , - 3273 , - 952 , - 5547 , - 3954 , - 541 , - 5500 , - 5727 , - 5590 , - 3633 , - 4224 , - 83 , - 1402 , - 901 , - 2948 , - 263 , - 3038 , - 3993 , - 1672 , - 443 , - 4674 , - 1261 , - 396 , - 623 , - 486 , - 4353 , - 4944 , - 803 , - 2122 , - 1621 , - 3668 , - 983 , - 3758 , - 4713 , - 2392 , - 1163 , - 5394 , - 1981 , - 1116 , - 1343 , - 1206 , - 5073 , - 5664 , - 1523 , - 2842 , - 2341 , - 4388 , - 1703 , - 4478 , - 5433 , - 3112 , - 1883 , - 290 , - 2701 , - 1836 , - 2063 , - 1926 , - 5793 , - 560 , - 2243 , - 3562 , - 3061 , - 5108 , - 2423 , - 5198 , - 329 , - 3832 , - 2603 , - 1010 , - 3421 , - 2556 , - 2783 , - 2646 , - 689 , - 1280 , - 2963 , - 4282 , - 3781 , - 4 , - 3143 , - 94 , - 1049 , - 4552 , - 3323 , - 1730 , - 4141 , - 3276 , - 3503 , - 3366 , - 1409 , - 2000 , - 3683 , - 5002 , - 4501 , - 724 , - 3863 , - 814 , - 1769 , - 5272 , - 4043 , - 2450 , - 4861 , - 3996 , - 4223 , - 4086 , - 2129 , - 2720 , - 4403 , - 5722 , - 5221 , - 1444 , - 4583 , - 1534 , - 2489 , - 168 , - 4763 , - 3170 , - 5581 , - 4716 , - 4943 , - 4806 , - 2849 , - 3440 , - 5123 , - 618 , - 117 , - 2164 , - 5303 , - 2254 , - 3209 , - 888 , - 5483 , - 3890 , - 477 , - 5436 , - 5663 , - 5526 , - 3569 , - 4160 , - 19 , - 1338 , - 837 , - 2884 , - 199 , - 2974 , - 3929 , - 1608 , - 379 , - 4610 , - 1197 , - 332 , - 559 , - 422 , - 4289 , - 4880 , - 739 , - 2058 , - 1557 , - 3604 , - 919 , - 3694 , - 4649 , - 2328 , - 1099 , - 5330 , - 1917 , - 1052 , - 1279 , - 1142 , - 5009 , - 5600 , - 1459 , - 2778 , - 2277 , - 4324 , - 1639 , - 4414 , - 5369 , - 3048 , - 1819 , - 226 , - 2637 , - 1772 , - 1999 , - 1862 , - 5729 , - 496 , - 2179 , - 3498 , - 2997 , - 5044 , - 2359 , - 5134 , - 265 , - 3768 , - 2539 , - 946 , - 3357 , - 2492 , - 2719 , - 2582 , - 625 , - 1216 , - 2899 , - 4218 , - 3717 , - 5764 , - 3079 , - 30 , - 985 , - 4488 , - 3259 , - 1666 , - 4077 , - 3212 , - 3439 , - 3302 , - 1345 , - 1936 , - 3619 , - 4938 , - 4437 , - 660 , - 3799 , - 750 , - 1705 , - 5208 , - 3979 , - 2386 , - 4797 , - 3932 , - 4159 , - 4022 , - 2065 , - 2656 , - 4339 , - 5658 , - 5157 , - 1380 , - 4519 , - 1470 , - 2425 , - 104 , - 4699 , - 3106 , - 5517 , - 4652 , - 4879 , - 4742 , - 2785 , - 3376 , - 5059 , - 554 , - 53 , - 2100 , - 5239 , - 2190 , - 3145 , - 824 , - 5419 , - 3826 , - 413 , - 5372 , - 5599 , - 5462 , - 3505 , - 4096 , - 5779 , - 1274 , - 773 , - 2820 , - 135 , - 2910 , - 3865 , - 1544 , - 315 , - 4546 , - 1133 , - 268 , - 495 , - 358 , - 4225 , - 4816 , - 675 , - 1994 , - 1493 , - 3540 , - 855 , - 3630 , - 4585 , - 2264 , - 1035 , - 5266 , - 1853 , - 988 , - 1215 , - 1078 , - 4945 , - 5536 , - 1395 , - 2714 , - 2213 , - 4260 , - 1575 , - 4350 , - 5305 , - 2984 , - 1755 , - 162 , - 2573 , - 1708 , - 1935 , - 1798 , - 5665 , - 432 , - 2115 , - 3434 , - 2933 , - 4980 , - 2295 , - 5070 , - 201 , - 3704 , - 2475 , - 882 , - 3293 , - 2428 , - 2655 , - 2518 , - 561 , - 1152 , - 2835 , - 4154 , - 3653 , - 5700 , - 3015 , - 5790 , - 921 , - 4424 , - 3195 , - 1602 , - 4013 , - 3148 , - 3375 , - 3238 , - 1281 , - 1872 , - 3555 , - 4874 , - 4373 , - 596 , - 3735 , - 686 , - 1641 , - 5144 , - 3915 , - 2322 , - 4733 , - 3868 , - 4095 , - 3958 , - 2001 , - 2592 , - 4275 , - 5594 , - 5093 , - 1316 , - 4455 , - 1406 , - 2361 , - 40 , - 4635 , - 3042 , - 5453 , - 4588 , - 4815 , - 4678 , - 2721 , - 3312 , - 4995 , - 490 , - 5813 , - 2036 , - 5175 , - 2126 , - 3081 , - 760 , - 5355 , - 3762 , - 349 , - 5308 , - 5535 , - 5398 , - 3441 , - 4032 , - 5715 , - 1210 , - 709 , - 2756 , - 71 , - 2846 , - 3801 , - 1480 , - 251 , - 4482 , - 1069 , - 204 , - 431 , - 294 , - 4161 , - 4752 , - 611 , - 1930 , - 1429 , - 3476 , - 791 , - 3566 , - 4521 , - 2200 , - 971 , - 5202 , - 1789 , - 924 , - 1151 , - 1014 , - 4881 , - 5472 , - 1331 , - 2650 , - 2149 , - 4196 , - 1511 , - 4286 , - 5241 , - 2920 , - 1691 , - 98 , - 2509 , - 1644 , - 1871 , - 1734 , - 5601 , - 368 , - 2051 , - 3370 , - 2869 , - 4916 , - 2231 , - 5006 , - 137 , - 3640 , - 2411 , - 818 , - 3229 , - 2364 , - 2591 , - 2454 , - 497 , - 1088 , - 2771 , - 4090 , - 3589 , - 5636 , - 2951 , - 5726 , - 857 , - 4360 , - 3131 , - 1538 , - 3949 , - 3084 , - 3311 , - 3174 , - 1217 , - 1808 , - 3491 , - 4810 , - 4309 , - 532 , - 3671 , - 622 , - 1577 , - 5080 , - 3851 , - 2258 , - 4669 , - 3804 , - 4031 , - 3894 , - 1937 , - 2528 , - 4211 , - 5530 , - 5029 , - 1252 , - 4391 , - 1342 , - 2297 , - 5800 , - 4571 , - 2978 , - 5389 , - 4524 , - 4751 , - 4614 , - 2657 , - 3248 , - 4931 , - 426 , - 5749 , - 1972 , - 5111 , - 2062 , - 3017 , - 696 , - 5291 , - 3698 , - 285 , - 5244 , - 5471 , - 5334 , - 3377 , - 3968 , - 5651 , - 1146 , - 645 , - 2692 , - 7 , - 2782 , - 3737 , - 1416 , - 187 , - 4418 , - 1005 , - 140 , - 367 , - 230 , - 4097 , - 4688 , - 547 , - 1866 , - 1365 , - 3412 , - 727 , - 3502 , - 4457 , - 2136 , - 907 , - 5138 , - 1725 , - 860 , - 1087 , - 950 , - 4817 , - 5408 , - 1267 , - 2586 , - 2085 , - 4132 , - 1447 , - 4222 , - 5177 , - 2856 , - 1627 , - 34 , - 2445 , - 1580 , - 1807 , - 1670 , - 5537 , - 304 , - 1987 , - 3306 , - 2805 , - 4852 , - 2167 , - 4942 , - 73 , - 3576 , - 2347 , - 754 , - 3165 , - 2300 , - 2527 , - 2390 , - 433 , - 1024 , - 2707 , - 4026 , - 3525 , - 5572 , - 2887 , - 5662 , - 793 , - 4296 , - 3067 , - 1474 , - 3885 , - 3020 , - 3247 , - 3110 , - 1153 , - 1744 , - 3427 , - 4746 , - 4245 , - 468 , - 3607 , - 558 , - 1513 , - 5016 , - 3787 , - 2194 , - 4605 , - 3740 , - 3967 , - 3830 , - 1873 , - 2464 , - 4147 , - 5466 , - 4965 , - 1188 , - 4327 , - 1278 , - 2233 , - 5736 , - 4507 , - 2914 , - 5325 , - 4460 , - 4687 , - 4550 , - 2593 , - 3184 , - 4867 , - 362 , - 5685 , - 1908 , - 5047 , - 1998 , - 2953 , - 632 , - 5227 , - 3634 , - 221 , - 5180 , - 5407 , - 5270 , - 3313 , - 3904 , - 5587 , - 1082 , - 581 , - 2628 , - 5767 , - 2718 , - 3673 , - 1352 , - 123 , - 4354 , - 941 , - 76 , - 303 , - 166 , - 4033 , - 4624 , - 483 , - 1802 , - 1301 , - 3348 , - 663 , - 3438 , - 4393 , - 2072 , - 843 , - 5074 , - 1661 , - 796 , - 1023 , - 886 , - 4753 , - 5344 , - 1203 , - 2522 , - 2021 , - 4068 , - 1383 , - 4158 , - 5113 , - 2792 , - 1563 , - 5794 , - 2381 , - 1516 , - 1743 , - 1606 , - 5473 , - 240 , - 1923 , - 3242 , - 2741 , - 4788 , - 2103 , - 4878 , - 9 , - 3512 , - 2283 , - 690 , - 3101 , - 2236 , - 2463 , - 2326 , - 369 , - 960 , - 2643 , - 3962 , - 3461 , - 5508 , - 2823 , - 5598 , - 729 , - 4232 , - 3003 , - 1410 , - 3821 , - 2956 , - 3183 , - 3046 , - 1089 , - 1680 , - 3363 , - 4682 , - 4181 , - 404 , - 3543 , - 494 , - 1449 , - 4952 , - 3723 , - 2130 , - 4541 , - 3676 , - 3903 , - 3766 , - 1809 , - 2400 , - 4083 , - 5402 , - 4901 , - 1124 , - 4263 , - 1214 , - 2169 , - 5672 , - 4443 , - 2850 , - 5261 , - 4396 , - 4623 , - 4486 , - 2529 , - 3120 , - 4803 , - 298 , - 5621 , - 1844 , - 4983 , - 1934 , - 2889 , - 568 , - 5163 , - 3570 , - 157 , - 5116 , - 5343 , - 5206 , - 3249 , - 3840 , - 5523 , - 1018 , - 517 , - 2564 , - 5703 , - 2654 , - 3609 , - 1288 , - 59 , - 4290 , - 877 , - 12 , - 239 , - 102 , - 3969 , - 4560 , - 419 , - 1738 , - 1237 , - 3284 , - 599 , - 3374 , - 4329 , - 2008 , - 779 , - 5010 , - 1597 , - 732 , - 959 , - 822 , - 4689 , - 5280 , - 1139 , - 2458 , - 1957 , - 4004 , - 1319 , - 4094 , - 5049 , - 2728 , - 1499 , - 5730 , - 2317 , - 1452 , - 1679 , - 1542 , - 5409 , - 176 , - 1859 , - 3178 , - 2677 , - 4724 , - 2039 , - 4814 , - 5769 , - 3448 , - 2219 , - 626 , - 3037 , - 2172 , - 2399 , - 2262 , - 305 , - 896 , - 2579 , - 3898 , - 3397 , - 5444 , - 2759 , - 5534 , - 665 , - 4168 , - 2939 , - 1346 , - 3757 , - 2892 , - 3119 , - 2982 , - 1025 , - 1616 , - 3299 , - 4618 , - 4117 , - 340 , - 3479 , - 430 , - 1385 , - 4888 , - 3659 , - 2066 , - 4477 , - 3612 , - 3839 , - 3702 , - 1745 , - 2336 , - 4019 , - 5338 , - 4837 , - 1060 , - 4199 , - 1150 , - 2105 , - 5608 , - 4379 , - 2786 , - 5197 , - 4332 , - 4559 , - 4422 , - 2465 , - 3056 , - 4739 , - 234 , - 5557 , - 1780 , - 4919 , - 1870 , - 2825 , - 504 , - 5099 , - 3506 , - 93 , - 5052 , - 5279 , - 5142 , - 3185 , - 3776 , - 5459 , - 954 , - 453 , - 2500 , - 5639 , - 2590 , - 3545 , - 1224 , - 5819 , - 4226 , - 813 , - 5772 , - 175 , - 38 , - 3905 , - 4496 , - 355 , - 1674 , - 1173 , - 3220 , - 535 , - 3310 , - 4265 , - 1944 , - 715 , - 4946 , - 1533 , - 668 , - 895 , - 758 , - 4625 , - 5216 , - 1075 , - 2394 , - 1893 , - 3940 , - 1255 , - 4030 , - 4985 , - 2664 , - 1435 , - 5666 , - 2253 , - 1388 , - 1615 , - 1478 , - 5345 , - 112 , - 1795 , - 3114 , - 2613 , - 4660 , - 1975 , - 4750 , - 5705 , - 3384 , - 2155 , - 562 , - 2973 , - 2108 , - 2335 , - 2198 , - 241 , - 832 , - 2515 , - 3834 , - 3333 , - 5380 , - 2695 , - 5470 , - 601 , - 4104 , - 2875 , - 1282 , - 3693 , - 2828 , - 3055 , - 2918 , - 961 , - 1552 , - 3235 , - 4554 , - 4053 , - 276 , - 3415 , - 366 , - 1321 , - 4824 , - 3595 , - 2002 , - 4413 , - 3548 , - 3775 , - 3638 , - 1681 , - 2272 , - 3955 , - 5274 , - 4773 , - 996 , - 4135 , - 1086 , - 2041 , - 5544 , - 4315 , - 2722 , - 5133 , - 4268 , - 4495 , - 4358 , - 2401 , - 2992 , - 4675 , - 170 , - 5493 , - 1716 , - 4855 , - 1806 , - 2761 , - 440 , - 5035 , - 3442 , - 29 , - 4988 , - 5215 , - 5078 , - 3121 , - 3712 , - 5395 , - 890 , - 389 , - 2436 , - 5575 , - 2526 , - 3481 , - 1160 , - 5755 , - 4162 , - 749 , - 5708 , - 111 , - 5798 , - 3841 , - 4432 , - 291 , - 1610 , - 1109 , - 3156 , - 471 , - 3246 , - 4201 , - 1880 , - 651 , - 4882 , - 1469 , - 604 , - 831 , - 694 , - 4561 , - 5152 , - 1011 , - 2330 , - 1829 , - 3876 , - 1191 , - 3966 , - 4921 , - 2600 , - 1371 , - 5602 , - 2189 , - 1324 , - 1551 , - 1414 , - 5281 , - 48 , - 1731 , - 3050 , - 2549 , - 4596 , - 1911 , - 4686 , - 5641 , - 3320 , - 2091 , - 498 , - 2909 , - 2044 , - 2271 , - 2134 , - 177 , - 768 , - 2451 , - 3770 , - 3269 , - 5316 , - 2631 , - 5406 , - 537 , - 4040 , - 2811 , - 1218 , - 3629 , - 2764 , - 2991 , - 2854 , - 897 , - 1488 , - 3171 , - 4490 , - 3989 , - 212 , - 3351 , - 302 , - 1257 , - 4760 , - 3531 , - 1938 , - 4349 , - 3484 , - 3711 , - 3574 , - 1617 , - 2208 , - 3891 , - 5210 , - 4709 , - 932 , - 4071 , - 1022 , - 1977 , - 5480 , - 4251 , - 2658 , - 5069 , - 4204 , - 4431 , - 4294 , - 2337 , - 2928 , - 4611 , - 106 , - 5429 , - 1652 , - 4791 , - 1742 , - 2697 , - 376 , - 4971 , - 3378 , - 5789 , - 4924 , - 5151 , - 5014 , - 3057 , - 3648 , - 5331 , - 826 , - 325 , - 2372 , - 5511 , - 2462 , - 3417 , - 1096 , - 5691 , - 4098 , - 685 , - 5644 , - 47 , - 5734 , - 3777 , - 4368 , - 227 , - 1546 , - 1045 , - 3092 , - 407 , - 3182 , - 4137 , - 1816 , - 587 , - 4818 , - 1405 , - 540 , - 767 , - 630 , - 4497 , - 5088 , - 947 , - 2266 , - 1765 , - 3812 , - 1127 , - 3902 , - 4857 , - 2536 , - 1307 , - 5538 , - 2125 , - 1260 , - 1487 , - 1350 , - 5217 , - 5808 , - 1667 , - 2986 , - 2485 , - 4532 , - 1847 , - 4622 , - 5577 , - 3256 , - 2027 , - 434 , - 2845 , - 1980 , - 2207 , - 2070 , - 113 , - 704 , - 2387 , - 3706 , - 3205 , - 5252 , - 2567 , - 5342 , - 473 , - 3976 , - 2747 , - 1154 , - 3565 , - 2700 , - 2927 , - 2790 , - 833 , - 1424 , - 3107 , - 4426 , - 3925 , - 148 , - 3287 , - 238 , - 1193 , - 4696 , - 3467 , - 1874 , - 4285 , - 3420 , - 3647 , - 3510 , - 1553 , - 2144 , - 3827 , - 5146 , - 4645 , - 868 , - 4007 , - 958 , - 1913 , - 5416 , - 4187 , - 2594 , - 5005 , - 4140 , - 4367 , - 4230 , - 2273 , - 2864 , - 4547 , - 42 , - 5365 , - 1588 , - 4727 , - 1678 , - 2633 , - 312 , - 4907 , - 3314 , - 5725 , - 4860 , - 5087 , - 4950 , - 2993 , - 3584 , - 5267 , - 762 , - 261 , - 2308 , - 5447 , - 2398 , - 3353 , - 1032 , - 5627 , - 4034 , - 621 , - 5580 , - 5807 , - 5670 , - 3713 , - 4304 , - 163 , - 1482 , - 981 , - 3028 , - 343 , - 3118 , - 4073 , - 1752 , - 523 , - 4754 , - 1341 , - 476 , - 703 , - 566 , - 4433 , - 5024 , - 883 , - 2202 , - 1701 , - 3748 , - 1063 , - 3838 , - 4793 , - 2472 , - 1243 , - 5474 , - 2061 , - 1196 , - 1423 , - 1286 , - 5153 , - 5744 , - 1603 , - 2922 , - 2421 , - 4468 , - 1783 , - 4558 , - 5513 , - 3192 , - 1963 , - 370 , - 2781 , - 1916 , - 2143 , - 2006 , - 49 , - 640 , - 2323 , - 3642 , - 3141 , - 5188 , - 2503 , - 5278 , - 409 , - 3912 , - 2683 , - 1090 , - 3501 , - 2636 , - 2863 , - 2726 , - 769 , - 1360 , - 3043 , - 4362 , - 3861 , - 84 , - 3223 , - 174 , - 1129 , - 4632 , - 3403 , - 1810 , - 4221 , - 3356 , - 3583 , - 3446 , - 1489 , - 2080 , - 3763 , - 5082 , - 4581 , - 804 , - 3943 , - 894 , - 1849 , - 5352 , - 4123 , - 2530 , - 4941 , - 4076 , - 4303 , - 4166 , - 2209 , - 2800 , - 4483 , - 5802 , - 5301 , - 1524 , - 4663 , - 1614 , - 2569 , - 248 , - 4843 , - 3250 , - 5661 , - 4796 , - 5023 , - 4886 , - 2929 , - 3520 , - 5203 , - 698 , - 197 , - 2244 , - 5383 , - 2334 , - 3289 , - 968 , - 5563 , - 3970 , - 557 , - 5516 , - 5743 , - 5606 , - 3649 , - 4240 , - 99 , - 1418 , - 917 , - 2964 , - 279 , - 3054 , - 4009 , - 1688 , - 459 , - 4690 , - 1277 , - 412 , - 639 , - 502 , - 4369 , - 4960 , - 819 , - 2138 , - 1637 , - 3684 , - 999 , - 3774 , - 4729 , - 2408 , - 1179 , - 5410 , - 1997 , - 1132 , - 1359 , - 1222 , - 5089 , - 5680 , - 1539 , - 2858 , - 2357 , - 4404 , - 1719 , - 4494 , - 5449 , - 3128 , - 1899 , - 306 , - 2717 , - 1852 , - 2079 , - 1942 , - 5809 , - 576 , - 2259 , - 3578 , - 3077 , - 5124 , - 2439 , - 5214 , - 345 , - 3848 , - 2619 , - 1026 , - 3437 , - 2572 , - 2799 , - 2662 , - 705 , - 1296 , - 2979 , - 4298 , - 3797 , - 20 , - 3159 , - 110 , - 1065 , - 4568 , - 3339 , - 1746 , - 4157 , - 3292 , - 3519 , - 3382 , - 1425 , - 2016 , - 3699 , - 5018 , - 4517 , - 740 , - 3879 , - 830 , - 1785 , - 5288 , - 4059 , - 2466 , - 4877 , - 4012 , - 4239 , - 4102 , - 2145 , - 2736 , - 4419 , - 5738 , - 5237 , - 1460 , - 4599 , - 1550 , - 2505 , - 184 , - 4779 , - 3186 , - 5597 , - 4732 , - 4959 , - 4822 , - 2865 , - 3456 , - 5139 , - 634 , - 133 , - 2180 , - 5319 , - 2270 , - 3225 , - 904 , - 5499 , - 3906 , - 493 , - 5452 , - 5679 , - 5542 , - 3585 , - 4176 , - 35 , - 1354 , - 853 , - 2900 , - 215 , - 2990 , - 3945 , - 1624 , - 395 , - 4626 , - 1213 , - 348 , - 575 , - 438 , - 4305 , - 4896 , - 755 , - 2074 , - 1573 , - 3620 , - 935 , - 3710 , - 4665 , - 2344 , - 1115 , - 5346 , - 1933 , - 1068 , - 1295 , - 1158 , - 5025 , - 5616 , - 1475 , - 2794 , - 2293 , - 4340 , - 1655 , - 4430 , - 5385 , - 3064 , - 1835 , - 242 , - 2653 , - 1788 , - 2015 , - 1878 , - 5745 , - 512 , - 2195 , - 3514 , - 3013 , - 5060 , - 2375 , - 5150 , - 281 , - 3784 , - 2555 , - 962 , - 3373 , - 2508 , - 2735 , - 2598 , - 641 , - 1232 , - 2915 , - 4234 , - 3733 , - 5780 , - 3095 , - 46 , - 1001 , - 4504 , - 3275 , - 1682 , - 4093 , - 3228 , - 3455 , - 3318 , - 1361 , - 1952 , - 3635 , - 4954 , - 4453 , - 676 , - 3815 , - 766 , - 1721 , - 5224 , - 3995 , - 2402 , - 4813 , - 3948 , - 4175 , - 4038 , - 2081 , - 2672 , - 4355 , - 5674 , - 5173 , - 1396 , - 4535 , - 1486 , - 2441 , - 120 , - 4715 , - 3122 , - 5533 , - 4668 , - 4895 , - 4758 , - 2801 , - 3392 , - 5075 , - 570 , - 69 , - 2116 , - 5255 , - 2206 , - 3161 , - 840 , - 5435 , - 3842 , - 429 , - 5388 , - 5615 , - 5478 , - 3521 , - 4112 , - 5795 , - 1290 , - 789 , - 2836 , - 151 , - 2926 , - 3881 , - 1560 , - 331 , - 4562 , - 1149 , - 284 , - 511 , - 374 , - 4241 , - 4832 , - 691 , - 2010 , - 1509 , - 3556 , - 871 , - 3646 , - 4601 , - 2280 , - 1051 , - 5282 , - 1869 , - 1004 , - 1231 , - 1094 , - 4961 , - 5552 , - 1411 , - 2730 , - 2229 , - 4276 , - 1591 , - 4366 , - 5321 , - 3000 , - 1771 , - 178 , - 2589 , - 1724 , - 1951 , - 1814 , - 5681 , - 448 , - 2131 , - 3450 , - 2949 , - 4996 , - 2311 , - 5086 , - 217 , - 3720 , - 2491 , - 898 , - 3309 , - 2444 , - 2671 , - 2534 , - 577 , - 1168 , - 2851 , - 4170 , - 3669 , - 5716 , - 3031 , - 5806 , - 937 , - 4440 , - 3211 , - 1618 , - 4029 , - 3164 , - 3391 , - 3254 , - 1297 , - 1888 , - 3571 , - 4890 , - 4389 , - 612 , - 3751 , - 702 , - 1657 , - 5160 , - 3931 , - 2338 , - 4749 , - 3884 , - 4111 , - 3974 , - 2017 , - 2608 , - 4291 , - 5610 , - 5109 , - 1332 , - 4471 , - 1422 , - 2377 , - 56 , - 4651 , - 3058 , - 5469 , - 4604 , - 4831 , - 4694 , - 2737 , - 3328 , - 5011 , - 506 , - 5 , - 2052 , - 5191 , - 2142 , - 3097 , - 776 , - 5371 , - 3778 , - 365 , - 5324 , - 5551 , - 5414 , - 3457 , - 4048 , - 5731 , - 1226 , - 725 , - 2772 , - 87 , - 2862 , - 3817 , - 1496 , - 267 , - 4498 , - 1085 , - 220 , - 447 , - 310 , - 4177 , - 4768 , - 627 , - 1946 , - 1445 , - 3492 , - 807 , - 3582 , - 4537 , - 2216 , - 987 , - 5218 , - 1805 , - 940 , - 1167 , - 1030 , - 4897 , - 5488 , - 1347 , - 2666 , - 2165 , - 4212 , - 1527 , - 4302 , - 5257 , - 2936 , - 1707 , - 114 , - 2525 , - 1660 , - 1887 , - 1750 , - 5617 , - 384 , - 2067 , - 3386 , - 2885 , - 4932 , - 2247 , - 5022 , - 153 , - 3656 , - 2427 , - 834 , - 3245 , - 2380 , - 2607 , - 2470 , - 513 , - 1104 , - 2787 , - 4106 , - 3605 , - 5652 , - 2967 , - 5742 , - 873 , - 4376 , - 3147 , - 1554 , - 3965 , - 3100 , - 3327 , - 3190 , - 1233 , - 1824 , - 3507 , - 4826 , - 4325 , - 548 , - 3687 , - 638 , - 1593 , - 5096 , - 3867 , - 2274 , - 4685 , - 3820 , - 4047 , - 3910 , - 1953 , - 2544 , - 4227 , - 5546 , - 5045 , - 1268 , - 4407 , - 1358 , - 2313 , - 5816 , - 4587 , - 2994 , - 5405 , - 4540 , - 4767 , - 4630 , - 2673 , - 3264 , - 4947 , - 442 , - 5765 , - 1988 , - 5127 , - 2078 , - 3033 , - 712 , - 5307 , - 3714 , - 301 , - 5260 , - 5487 , - 5350 , - 3393 , - 3984 , - 5667 , - 1162 , - 661 , - 2708 , - 23 , - 2798 , - 3753 , - 1432 , - 203 , - 4434 , - 1021 , - 156 , - 383 , - 246 , - 4113 , - 4704 , - 563 , - 1882 , - 1381 , - 3428 , - 743 , - 3518 , - 4473 , - 2152 , - 923 , - 5154 , - 1741 , - 876 , - 1103 , - 966 , - 4833 , - 5424 , - 1283 , - 2602 , - 2101 , - 4148 , - 1463 , - 4238 , - 5193 , - 2872 , - 1643 , - 50 , - 2461 , - 1596 , - 1823 , - 1686 , - 5553 , - 320 , - 2003 , - 3322 , - 2821 , - 4868 , - 2183 , - 4958 , - 89 , - 3592 , - 2363 , - 770 , - 3181 , - 2316 , - 2543 , - 2406 , - 449 , - 1040 , - 2723 , - 4042 , - 3541 , - 5588 , - 2903 , - 5678 , - 809 , - 4312 , - 3083 , - 1490 , - 3901 , - 3036 , - 3263 , - 3126 , - 1169 , - 1760 , - 3443 , - 4762 , - 4261 , - 484 , - 3623 , - 574 , - 1529 , - 5032 , - 3803 , - 2210 , - 4621 , - 3756 , - 3983 , - 3846 , - 1889 , - 2480 , - 4163 , - 5482 , - 4981 , - 1204 , - 4343 , - 1294 , - 2249 , - 5752 , - 4523 , - 2930 , - 5341 , - 4476 , - 4703 , - 4566 , - 2609 , - 3200 , - 4883 , - 378 , - 5701 , - 1924 , - 5063 , - 2014 , - 2969 , - 648 , - 5243 , - 3650 , - 237 , - 5196 , - 5423 , - 5286 , - 3329 , - 3920 , - 5603 , - 1098 , - 597 , - 2644 , - 5783 , - 2734 , - 3689 , - 1368 , - 139 , - 4370 , - 957 , - 92 , - 319 , - 182 , - 4049 , - 4640 , - 499 , - 1818 , - 1317 , - 3364 , - 679 , - 3454 , - 4409 , - 2088 , - 859 , - 5090 , - 1677 , - 812 , - 1039 , - 902 , - 4769 , - 5360 , - 1219 , - 2538 , - 2037 , - 4084 , - 1399 , - 4174 , - 5129 , - 2808 , - 1579 , - 5810 , - 2397 , - 1532 , - 1759 , - 1622 , - 5489 , - 256 , - 1939 , - 3258 , - 2757 , - 4804 , - 2119 , - 4894 , - 25 , - 3528 , - 2299 , - 706 , - 3117 , - 2252 , - 2479 , - 2342 , - 385 , - 976 , - 2659 , - 3978 , - 3477 , - 5524 , - 2839 , - 5614 , - 745 , - 4248 , - 3019 , - 1426 , - 3837 , - 2972 , - 3199 , - 3062 , - 1105 , - 1696 , - 3379 , - 4698 , - 4197 , - 420 , - 3559 , - 510 , - 1465 , - 4968 , - 3739 , - 2146 , - 4557 , - 3692 , - 3919 , - 3782 , - 1825 , - 2416 , - 4099 , - 5418 , - 4917 , - 1140 , - 4279 , - 1230 , - 2185 , - 5688 , - 4459 , - 2866 , - 5277 , - 4412 , - 4639 , - 4502 , - 2545 , - 3136 , - 4819 , - 314 , - 5637 , - 1860 , - 4999 , - 1950 , - 2905 , - 584 , - 5179 , - 3586 , - 173 , - 5132 , - 5359 , - 5222 , - 3265 , - 3856 , - 5539 , - 1034 , - 533 , - 2580 , - 5719 , - 2670 , - 3625 , - 1304 , - 75 , - 4306 , - 893 , - 28 , - 255 , - 118 , - 3985 , - 4576 , - 435 , - 1754 , - 1253 , - 3300 , - 615 , - 3390 , - 4345 , - 2024 , - 795 , - 5026 , - 1613 , - 748 , - 975 , - 838 , - 4705 , - 5296 , - 1155 , - 2474 , - 1973 , - 4020 , - 1335 , - 4110 , - 5065 , - 2744 , - 1515 , - 5746 , - 2333 , - 1468 , - 1695 , - 1558 , - 5425 , - 192 , - 1875 , - 3194 , - 2693 , - 4740 , - 2055 , - 4830 , - 5785 , - 3464 , - 2235 , - 642 , - 3053 , - 2188 , - 2415 , - 2278 , - 321 , - 912 , - 2595 , - 3914 , - 3413 , - 5460 , - 2775 , - 5550 , - 681 , - 4184 , - 2955 , - 1362 , - 3773 , - 2908 , - 3135 , - 2998 , - 1041 , - 1632 , - 3315 , - 4634 , - 4133 , - 356 , - 3495 , - 446 , - 1401 , - 4904 , - 3675 , - 2082 , - 4493 , - 3628 , - 3855 , - 3718 , - 1761 , - 2352 , - 4035 , - 5354 , - 4853 , - 1076 , - 4215 , - 1166 , - 2121 , - 5624 , - 4395 , - 2802 , - 5213 , - 4348 , - 4575 , - 4438 , - 2481 , - 3072 , - 4755 , - 250 , - 5573 , - 1796 , - 4935 , - 1886 , - 2841 , - 520 , - 5115 , - 3522 , - 109 , - 5068 , - 5295 , - 5158 , - 3201 , - 3792 , - 5475 , - 970 , - 469 , - 2516 , - 5655 , - 2606 , - 3561 , - 1240 , - 11 , - 4242 , - 829 , - 5788 , - 191 , - 54 , - 3921 , - 4512 , - 371 , - 1690 , - 1189 , - 3236 , - 551 , - 3326 , - 4281 , - 1960 , - 731 , - 4962 , - 1549 , - 684 , - 911 , - 774 , - 4641 , - 5232 , - 1091 , - 2410 , - 1909 , - 3956 , - 1271 , - 4046 , - 5001 , - 2680 , - 1451 , - 5682 , - 2269 , - 1404 , - 1631 , - 1494 , - 5361 , - 128 , - 1811 , - 3130 , - 2629 , - 4676 , - 1991 , - 4766 , - 5721 , - 3400 , - 2171 , - 578 , - 2989 , - 2124 , - 2351 , - 2214 , - 257 , - 848 , - 2531 , - 3850 , - 3349 , - 5396 , - 2711 , - 5486 , - 617 , - 4120 , - 2891 , - 1298 , - 3709 , - 2844 , - 3071 , - 2934 , - 977 , - 1568 , - 3251 , - 4570 , - 4069 , - 292 , - 3431 , - 382 , - 1337 , - 4840 , - 3611 , - 2018 , - 4429 , - 3564 , - 3791 , - 3654 , - 1697 , - 2288 , - 3971 , - 5290 , - 4789 , - 1012 , - 4151 , - 1102 , - 2057 , - 5560 , - 4331 , - 2738 , - 5149 , - 4284 , - 4511 , - 4374 , - 2417 , - 3008 , - 4691 , - 186 , - 5509 , - 1732 , - 4871 , - 1822 , - 2777 , - 456 , - 5051 , - 3458 , - 45 , - 5004 , - 5231 , - 5094 , - 3137 , - 3728 , - 5411 , - 906 , - 405 , - 2452 , - 5591 , - 2542 , - 3497 , - 1176 , - 5771 , - 4178 , - 765 , - 5724 , - 127 , - 5814 , - 3857 , - 4448 , - 307 , - 1626 , - 1125 , - 3172 , - 487 , - 3262 , - 4217 , - 1896 , - 667 , - 4898 , - 1485 , - 620 , - 847 , - 710 , - 4577 , - 5168 , - 1027 , - 2346 , - 1845 , - 3892 , - 1207 , - 3982 , - 4937 , - 2616 , - 1387 , - 5618 , - 2205 , - 1340 , - 1567 , - 1430 , - 5297 , - 64 , - 1747 , - 3066 , - 2565 , - 4612 , - 1927 , - 4702 , - 5657 , - 3336 , - 2107 , - 514 , - 2925 , - 2060 , - 2287 , - 2150 , - 193 , - 784 , - 2467 , - 3786 , - 3285 , - 5332 , - 2647 , - 5422 , - 553 , - 4056 , - 2827 , - 1234 , - 3645 , - 2780 , - 3007 , - 2870 , - 913 , - 1504 , - 3187 , - 4506 , - 4005 , - 228 , - 3367 , - 318 , - 1273 , - 4776 , - 3547 , - 1954 , - 4365 , - 3500 , - 3727 , - 3590 , - 1633 , - 2224 , - 3907 , - 5226 , - 4725 , - 948 , - 4087 , - 1038 , - 1993 , - 5496 , - 4267 , - 2674 , - 5085 , - 4220 , - 4447 , - 4310 , - 2353 , - 2944 , - 4627 , - 122 , - 5445 , - 1668 , - 4807 , - 1758 , - 2713 , - 392 , - 4987 , - 3394 , - 5805 , - 4940 , - 5167 , - 5030 , - 3073 , - 3664 , - 5347 , - 842 , - 341 , - 2388 , - 5527 , - 2478 , - 3433 , - 1112 , - 5707 , - 4114 , - 701 , - 5660 , - 63 , - 5750 , - 3793 , - 4384 , - 243 , - 1562 , - 1061 , - 3108 , - 423 , - 3198 , - 4153 , - 1832 , - 603 , - 4834 , - 1421 , - 556 , - 783 , - 646 , - 4513 , - 5104 , - 963 , - 2282 , - 1781 , - 3828 , - 1143 , - 3918 , - 4873 , - 2552 , - 1323 , - 5554 , - 2141 , - 1276 , - 1503 , - 1366 , - 5233 , - 0 , - 323 , - 5430 , - 3545 , - 556 , - 2351 , - 3042 , - 2629 , - 1112 , - 4379 , - 654 , - 1713 , - 1668 , - 519 , - 4154 , - 797 , - 2224 , - 2547 , - 1766 , - 5769 , - 2780 , - 4575 , - 5266 , - 4853 , - 3336 , - 715 , - 2878 , - 3937 , - 3892 , - 2743 , - 490 , - 3021 , - 4448 , - 4771 , - 3990 , - 2105 , - 5004 , - 911 , - 1602 , - 1189 , - 5560 , - 2939 , - 5102 , - 273 , - 228 , - 4967 , - 2714 , - 5245 , - 784 , - 1107 , - 326 , - 4329 , - 1340 , - 3135 , - 3826 , - 3413 , - 1896 , - 5163 , - 1438 , - 2497 , - 2452 , - 1303 , - 4938 , - 1581 , - 3008 , - 3331 , - 2550 , - 665 , - 3564 , - 5359 , - 162 , - 5637 , - 4120 , - 1499 , - 3662 , - 4721 , - 4676 , - 3527 , - 1274 , - 3805 , - 5232 , - 5555 , - 4774 , - 2889 , - 5788 , - 1695 , - 2386 , - 1973 , - 456 , - 3723 , - 5886 , - 1057 , - 1012 , - 5751 , - 3498 , - 141 , - 1568 , - 1891 , - 1110 , - 5113 , - 2124 , - 3919 , - 4610 , - 4197 , - 2680 , - 59 , - 2222 , - 3281 , - 3236 , - 2087 , - 5722 , - 2365 , - 3792 , - 4115 , - 3334 , - 1449 , - 4348 , - 255 , - 946 , - 533 , - 4904 , - 2283 , - 4446 , - 5505 , - 5460 , - 4311 , - 2058 , - 4589 , - 128 , - 451 , - 5558 , - 3673 , - 684 , - 2479 , - 3170 , - 2757 , - 1240 , - 4507 , - 782 , - 1841 , - 1796 , - 647 , - 4282 , - 925 , - 2352 , - 2675 , - 1894 , - 9 , - 2908 , - 4703 , - 5394 , - 4981 , - 3464 , - 843 , - 3006 , - 4065 , - 4020 , - 2871 , - 618 , - 3149 , - 4576 , - 4899 , - 4118 , - 2233 , - 5132 , - 1039 , - 1730 , - 1317 , - 5688 , - 3067 , - 5230 , - 401 , - 356 , - 5095 , - 2842 , - 5373 , - 912 , - 1235 , - 454 , - 4457 , - 1468 , - 3263 , - 3954 , - 3541 , - 2024 , - 5291 , - 1566 , - 2625 , - 2580 , - 1431 , - 5066 , - 1709 , - 3136 , - 3459 , - 2678 , - 793 , - 3692 , - 5487 , - 290 , - 5765 , - 4248 , - 1627 , - 3790 , - 4849 , - 4804 , - 3655 , - 1402 , - 3933 , - 5360 , - 5683 , - 4902 , - 3017 , - 28 , - 1823 , - 2514 , - 2101 , - 584 , - 3851 , - 126 , - 1185 , - 1140 , - 5879 , - 3626 , - 269 , - 1696 , - 2019 , - 1238 , - 5241 , - 2252 , - 4047 , - 4738 , - 4325 , - 2808 , - 187 , - 2350 , - 3409 , - 3364 , - 2215 , - 5850 , - 2493 , - 3920 , - 4243 , - 3462 , - 1577 , - 4476 , - 383 , - 1074 , - 661 , - 5032 , - 2411 , - 4574 , - 5633 , - 5588 , - 4439 , - 2186 , - 4717 , - 256 , - 579 , - 5686 , - 3801 , - 812 , - 2607 , - 3298 , - 2885 , - 1368 , - 4635 , - 910 , - 1969 , - 1924 , - 775 , - 4410 , - 1053 , - 2480 , - 2803 , - 2022 , - 137 , - 3036 , - 4831 , - 5522 , - 5109 , - 3592 , - 971 , - 3134 , - 4193 , - 4148 , - 2999 , - 746 , - 3277 , - 4704 , - 5027 , - 4246 , - 2361 , - 5260 , - 1167 , - 1858 , - 1445 , - 5816 , - 3195 , - 5358 , - 529 , - 484 , - 5223 , - 2970 , - 5501 , - 1040 , - 1363 , - 582 , - 4585 , - 1596 , - 3391 , - 4082 , - 3669 , - 2152 , - 5419 , - 1694 , - 2753 , - 2708 , - 1559 , - 5194 , - 1837 , - 3264 , - 3587 , - 2806 , - 921 , - 3820 , - 5615 , - 418 , - 5 , - 4376 , - 1755 , - 3918 , - 4977 , - 4932 , - 3783 , - 1530 , - 4061 , - 5488 , - 5811 , - 5030 , - 3145 , - 156 , - 1951 , - 2642 , - 2229 , - 712 , - 3979 , - 254 , - 1313 , - 1268 , - 119 , - 3754 , - 397 , - 1824 , - 2147 , - 1366 , - 5369 , - 2380 , - 4175 , - 4866 , - 4453 , - 2936 , - 315 , - 2478 , - 3537 , - 3492 , - 2343 , - 90 , - 2621 , - 4048 , - 4371 , - 3590 , - 1705 , - 4604 , - 511 , - 1202 , - 789 , - 5160 , - 2539 , - 4702 , - 5761 , - 5716 , - 4567 , - 2314 , - 4845 , - 384 , - 707 , - 5814 , - 3929 , - 940 , - 2735 , - 3426 , - 3013 , - 1496 , - 4763 , - 1038 , - 2097 , - 2052 , - 903 , - 4538 , - 1181 , - 2608 , - 2931 , - 2150 , - 265 , - 3164 , - 4959 , - 5650 , - 5237 , - 3720 , - 1099 , - 3262 , - 4321 , - 4276 , - 3127 , - 874 , - 3405 , - 4832 , - 5155 , - 4374 , - 2489 , - 5388 , - 1295 , - 1986 , - 1573 , - 56 , - 3323 , - 5486 , - 657 , - 612 , - 5351 , - 3098 , - 5629 , - 1168 , - 1491 , - 710 , - 4713 , - 1724 , - 3519 , - 4210 , - 3797 , - 2280 , - 5547 , - 1822 , - 2881 , - 2836 , - 1687 , - 5322 , - 1965 , - 3392 , - 3715 , - 2934 , - 1049 , - 3948 , - 5743 , - 546 , - 133 , - 4504 , - 1883 , - 4046 , - 5105 , - 5060 , - 3911 , - 1658 , - 4189 , - 5616 , - 51 , - 5158 , - 3273 , - 284 , - 2079 , - 2770 , - 2357 , - 840 , - 4107 , - 382 , - 1441 , - 1396 , - 247 , - 3882 , - 525 , - 1952 , - 2275 , - 1494 , - 5497 , - 2508 , - 4303 , - 4994 , - 4581 , - 3064 , - 443 , - 2606 , - 3665 , - 3620 , - 2471 , - 218 , - 2749 , - 4176 , - 4499 , - 3718 , - 1833 , - 4732 , - 639 , - 1330 , - 917 , - 5288 , - 2667 , - 4830 , - 1 , - 5844 , - 4695 , - 2442 , - 4973 , - 512 , - 835 , - 54 , - 4057 , - 1068 , - 2863 , - 3554 , - 3141 , - 1624 , - 4891 , - 1166 , - 2225 , - 2180 , - 1031 , - 4666 , - 1309 , - 2736 , - 3059 , - 2278 , - 393 , - 3292 , - 5087 , - 5778 , - 5365 , - 3848 , - 1227 , - 3390 , - 4449 , - 4404 , - 3255 , - 1002 , - 3533 , - 4960 , - 5283 , - 4502 , - 2617 , - 5516 , - 1423 , - 2114 , - 1701 , - 184 , - 3451 , - 5614 , - 785 , - 740 , - 5479 , - 3226 , - 5757 , - 1296 , - 1619 , - 838 , - 4841 , - 1852 , - 3647 , - 4338 , - 3925 , - 2408 , - 5675 , - 1950 , - 3009 , - 2964 , - 1815 , - 5450 , - 2093 , - 3520 , - 3843 , - 3062 , - 1177 , - 4076 , - 5871 , - 674 , - 261 , - 4632 , - 2011 , - 4174 , - 5233 , - 5188 , - 4039 , - 1786 , - 4317 , - 5744 , - 179 , - 5286 , - 3401 , - 412 , - 2207 , - 2898 , - 2485 , - 968 , - 4235 , - 510 , - 1569 , - 1524 , - 375 , - 4010 , - 653 , - 2080 , - 2403 , - 1622 , - 5625 , - 2636 , - 4431 , - 5122 , - 4709 , - 3192 , - 571 , - 2734 , - 3793 , - 3748 , - 2599 , - 346 , - 2877 , - 4304 , - 4627 , - 3846 , - 1961 , - 4860 , - 767 , - 1458 , - 1045 , - 5416 , - 2795 , - 4958 , - 129 , - 84 , - 4823 , - 2570 , - 5101 , - 640 , - 963 , - 182 , - 4185 , - 1196 , - 2991 , - 3682 , - 3269 , - 1752 , - 5019 , - 1294 , - 2353 , - 2308 , - 1159 , - 4794 , - 1437 , - 2864 , - 3187 , - 2406 , - 521 , - 3420 , - 5215 , - 18 , - 5493 , - 3976 , - 1355 , - 3518 , - 4577 , - 4532 , - 3383 , - 1130 , - 3661 , - 5088 , - 5411 , - 4630 , - 2745 , - 5644 , - 1551 , - 2242 , - 1829 , - 312 , - 3579 , - 5742 , - 913 , - 868 , - 5607 , - 3354 , - 5885 , - 1424 , - 1747 , - 966 , - 4969 , - 1980 , - 3775 , - 4466 , - 4053 , - 2536 , - 5803 , - 2078 , - 3137 , - 3092 , - 1943 , - 5578 , - 2221 , - 3648 , - 3971 , - 3190 , - 1305 , - 4204 , - 111 , - 802 , - 389 , - 4760 , - 2139 , - 4302 , - 5361 , - 5316 , - 4167 , - 1914 , - 4445 , - 5872 , - 307 , - 5414 , - 3529 , - 540 , - 2335 , - 3026 , - 2613 , - 1096 , - 4363 , - 638 , - 1697 , - 1652 , - 503 , - 4138 , - 781 , - 2208 , - 2531 , - 1750 , - 5753 , - 2764 , - 4559 , - 5250 , - 4837 , - 3320 , - 699 , - 2862 , - 3921 , - 3876 , - 2727 , - 474 , - 3005 , - 4432 , - 4755 , - 3974 , - 2089 , - 4988 , - 895 , - 1586 , - 1173 , - 5544 , - 2923 , - 5086 , - 257 , - 212 , - 4951 , - 2698 , - 5229 , - 768 , - 1091 , - 310 , - 4313 , - 1324 , - 3119 , - 3810 , - 3397 , - 1880 , - 5147 , - 1422 , - 2481 , - 2436 , - 1287 , - 4922 , - 1565 , - 2992 , - 3315 , - 2534 , - 649 , - 3548 , - 5343 , - 146 , - 5621 , - 4104 , - 1483 , - 3646 , - 4705 , - 4660 , - 3511 , - 1258 , - 3789 , - 5216 , - 5539 , - 4758 , - 2873 , - 5772 , - 1679 , - 2370 , - 1957 , - 440 , - 3707 , - 5870 , - 1041 , - 996 , - 5735 , - 3482 , - 125 , - 1552 , - 1875 , - 1094 , - 5097 , - 2108 , - 3903 , - 4594 , - 4181 , - 2664 , - 43 , - 2206 , - 3265 , - 3220 , - 2071 , - 5706 , - 2349 , - 3776 , - 4099 , - 3318 , - 1433 , - 4332 , - 239 , - 930 , - 517 , - 4888 , - 2267 , - 4430 , - 5489 , - 5444 , - 4295 , - 2042 , - 4573 , - 112 , - 435 , - 5542 , - 3657 , - 668 , - 2463 , - 3154 , - 2741 , - 1224 , - 4491 , - 766 , - 1825 , - 1780 , - 631 , - 4266 , - 909 , - 2336 , - 2659 , - 1878 , - 5881 , - 2892 , - 4687 , - 5378 , - 4965 , - 3448 , - 827 , - 2990 , - 4049 , - 4004 , - 2855 , - 602 , - 3133 , - 4560 , - 4883 , - 4102 , - 2217 , - 5116 , - 1023 , - 1714 , - 1301 , - 5672 , - 3051 , - 5214 , - 385 , - 340 , - 5079 , - 2826 , - 5357 , - 896 , - 1219 , - 438 , - 4441 , - 1452 , - 3247 , - 3938 , - 3525 , - 2008 , - 5275 , - 1550 , - 2609 , - 2564 , - 1415 , - 5050 , - 1693 , - 3120 , - 3443 , - 2662 , - 777 , - 3676 , - 5471 , - 274 , - 5749 , - 4232 , - 1611 , - 3774 , - 4833 , - 4788 , - 3639 , - 1386 , - 3917 , - 5344 , - 5667 , - 4886 , - 3001 , - 12 , - 1807 , - 2498 , - 2085 , - 568 , - 3835 , - 110 , - 1169 , - 1124 , - 5863 , - 3610 , - 253 , - 1680 , - 2003 , - 1222 , - 5225 , - 2236 , - 4031 , - 4722 , - 4309 , - 2792 , - 171 , - 2334 , - 3393 , - 3348 , - 2199 , - 5834 , - 2477 , - 3904 , - 4227 , - 3446 , - 1561 , - 4460 , - 367 , - 1058 , - 645 , - 5016 , - 2395 , - 4558 , - 5617 , - 5572 , - 4423 , - 2170 , - 4701 , - 240 , - 563 , - 5670 , - 3785 , - 796 , - 2591 , - 3282 , - 2869 , - 1352 , - 4619 , - 894 , - 1953 , - 1908 , - 759 , - 4394 , - 1037 , - 2464 , - 2787 , - 2006 , - 121 , - 3020 , - 4815 , - 5506 , - 5093 , - 3576 , - 955 , - 3118 , - 4177 , - 4132 , - 2983 , - 730 , - 3261 , - 4688 , - 5011 , - 4230 , - 2345 , - 5244 , - 1151 , - 1842 , - 1429 , - 5800 , - 3179 , - 5342 , - 513 , - 468 , - 5207 , - 2954 , - 5485 , - 1024 , - 1347 , - 566 , - 4569 , - 1580 , - 3375 , - 4066 , - 3653 , - 2136 , - 5403 , - 1678 , - 2737 , - 2692 , - 1543 , - 5178 , - 1821 , - 3248 , - 3571 , - 2790 , - 905 , - 3804 , - 5599 , - 402 , - 5877 , - 4360 , - 1739 , - 3902 , - 4961 , - 4916 , - 3767 , - 1514 , - 4045 , - 5472 , - 5795 , - 5014 , - 3129 , - 140 , - 1935 , - 2626 , - 2213 , - 696 , - 3963 , - 238 , - 1297 , - 1252 , - 103 , - 3738 , - 381 , - 1808 , - 2131 , - 1350 , - 5353 , - 2364 , - 4159 , - 4850 , - 4437 , - 2920 , - 299 , - 2462 , - 3521 , - 3476 , - 2327 , - 74 , - 2605 , - 4032 , - 4355 , - 3574 , - 1689 , - 4588 , - 495 , - 1186 , - 773 , - 5144 , - 2523 , - 4686 , - 5745 , - 5700 , - 4551 , - 2298 , - 4829 , - 368 , - 691 , - 5798 , - 3913 , - 924 , - 2719 , - 3410 , - 2997 , - 1480 , - 4747 , - 1022 , - 2081 , - 2036 , - 887 , - 4522 , - 1165 , - 2592 , - 2915 , - 2134 , - 249 , - 3148 , - 4943 , - 5634 , - 5221 , - 3704 , - 1083 , - 3246 , - 4305 , - 4260 , - 3111 , - 858 , - 3389 , - 4816 , - 5139 , - 4358 , - 2473 , - 5372 , - 1279 , - 1970 , - 1557 , - 40 , - 3307 , - 5470 , - 641 , - 596 , - 5335 , - 3082 , - 5613 , - 1152 , - 1475 , - 694 , - 4697 , - 1708 , - 3503 , - 4194 , - 3781 , - 2264 , - 5531 , - 1806 , - 2865 , - 2820 , - 1671 , - 5306 , - 1949 , - 3376 , - 3699 , - 2918 , - 1033 , - 3932 , - 5727 , - 530 , - 117 , - 4488 , - 1867 , - 4030 , - 5089 , - 5044 , - 3895 , - 1642 , - 4173 , - 5600 , - 35 , - 5142 , - 3257 , - 268 , - 2063 , - 2754 , - 2341 , - 824 , - 4091 , - 366 , - 1425 , - 1380 , - 231 , - 3866 , - 509 , - 1936 , - 2259 , - 1478 , - 5481 , - 2492 , - 4287 , - 4978 , - 4565 , - 3048 , - 427 , - 2590 , - 3649 , - 3604 , - 2455 , - 202 , - 2733 , - 4160 , - 4483 , - 3702 , - 1817 , - 4716 , - 623 , - 1314 , - 901 , - 5272 , - 2651 , - 4814 , - 5873 , - 5828 , - 4679 , - 2426 , - 4957 , - 496 , - 819 , - 38 , - 4041 , - 1052 , - 2847 , - 3538 , - 3125 , - 1608 , - 4875 , - 1150 , - 2209 , - 2164 , - 1015 , - 4650 , - 1293 , - 2720 , - 3043 , - 2262 , - 377 , - 3276 , - 5071 , - 5762 , - 5349 , - 3832 , - 1211 , - 3374 , - 4433 , - 4388 , - 3239 , - 986 , - 3517 , - 4944 , - 5267 , - 4486 , - 2601 , - 5500 , - 1407 , - 2098 , - 1685 , - 168 , - 3435 , - 5598 , - 769 , - 724 , - 5463 , - 3210 , - 5741 , - 1280 , - 1603 , - 822 , - 4825 , - 1836 , - 3631 , - 4322 , - 3909 , - 2392 , - 5659 , - 1934 , - 2993 , - 2948 , - 1799 , - 5434 , - 2077 , - 3504 , - 3827 , - 3046 , - 1161 , - 4060 , - 5855 , - 658 , - 245 , - 4616 , - 1995 , - 4158 , - 5217 , - 5172 , - 4023 , - 1770 , - 4301 , - 5728 , - 163 , - 5270 , - 3385 , - 396 , - 2191 , - 2882 , - 2469 , - 952 , - 4219 , - 494 , - 1553 , - 1508 , - 359 , - 3994 , - 637 , - 2064 , - 2387 , - 1606 , - 5609 , - 2620 , - 4415 , - 5106 , - 4693 , - 3176 , - 555 , - 2718 , - 3777 , - 3732 , - 2583 , - 330 , - 2861 , - 4288 , - 4611 , - 3830 , - 1945 , - 4844 , - 751 , - 1442 , - 1029 , - 5400 , - 2779 , - 4942 , - 113 , - 68 , - 4807 , - 2554 , - 5085 , - 624 , - 947 , - 166 , - 4169 , - 1180 , - 2975 , - 3666 , - 3253 , - 1736 , - 5003 , - 1278 , - 2337 , - 2292 , - 1143 , - 4778 , - 1421 , - 2848 , - 3171 , - 2390 , - 505 , - 3404 , - 5199 , - 2 , - 5477 , - 3960 , - 1339 , - 3502 , - 4561 , - 4516 , - 3367 , - 1114 , - 3645 , - 5072 , - 5395 , - 4614 , - 2729 , - 5628 , - 1535 , - 2226 , - 1813 , - 296 , - 3563 , - 5726 , - 897 , - 852 , - 5591 , - 3338 , - 5869 , - 1408 , - 1731 , - 950 , - 4953 , - 1964 , - 3759 , - 4450 , - 4037 , - 2520 , - 5787 , - 2062 , - 3121 , - 3076 , - 1927 , - 5562 , - 2205 , - 3632 , - 3955 , - 3174 , - 1289 , - 4188 , - 95 , - 786 , - 373 , - 4744 , - 2123 , - 4286 , - 5345 , - 5300 , - 4151 , - 1898 , - 4429 , - 5856 , - 291 , - 5398 , - 3513 , - 524 , - 2319 , - 3010 , - 2597 , - 1080 , - 4347 , - 622 , - 1681 , - 1636 , - 487 , - 4122 , - 765 , - 2192 , - 2515 , - 1734 , - 5737 , - 2748 , - 4543 , - 5234 , - 4821 , - 3304 , - 683 , - 2846 , - 3905 , - 3860 , - 2711 , - 458 , - 2989 , - 4416 , - 4739 , - 3958 , - 2073 , - 4972 , - 879 , - 1570 , - 1157 , - 5528 , - 2907 , - 5070 , - 241 , - 196 , - 4935 , - 2682 , - 5213 , - 752 , - 1075 , - 294 , - 4297 , - 1308 , - 3103 , - 3794 , - 3381 , - 1864 , - 5131 , - 1406 , - 2465 , - 2420 , - 1271 , - 4906 , - 1549 , - 2976 , - 3299 , - 2518 , - 633 , - 3532 , - 5327 , - 130 , - 5605 , - 4088 , - 1467 , - 3630 , - 4689 , - 4644 , - 3495 , - 1242 , - 3773 , - 5200 , - 5523 , - 4742 , - 2857 , - 5756 , - 1663 , - 2354 , - 1941 , - 424 , - 3691 , - 5854 , - 1025 , - 980 , - 5719 , - 3466 , - 109 , - 1536 , - 1859 , - 1078 , - 5081 , - 2092 , - 3887 , - 4578 , - 4165 , - 2648 , - 27 , - 2190 , - 3249 , - 3204 , - 2055 , - 5690 , - 2333 , - 3760 , - 4083 , - 3302 , - 1417 , - 4316 , - 223 , - 914 , - 501 , - 4872 , - 2251 , - 4414 , - 5473 , - 5428 , - 4279 , - 2026 , - 4557 , - 96 , - 419 , - 5526 , - 3641 , - 652 , - 2447 , - 3138 , - 2725 , - 1208 , - 4475 , - 750 , - 1809 , - 1764 , - 615 , - 4250 , - 893 , - 2320 , - 2643 , - 1862 , - 5865 , - 2876 , - 4671 , - 5362 , - 4949 , - 3432 , - 811 , - 2974 , - 4033 , - 3988 , - 2839 , - 586 , - 3117 , - 4544 , - 4867 , - 4086 , - 2201 , - 5100 , - 1007 , - 1698 , - 1285 , - 5656 , - 3035 , - 5198 , - 369 , - 324 , - 5063 , - 2810 , - 5341 , - 880 , - 1203 , - 422 , - 4425 , - 1436 , - 3231 , - 3922 , - 3509 , - 1992 , - 5259 , - 1534 , - 2593 , - 2548 , - 1399 , - 5034 , - 1677 , - 3104 , - 3427 , - 2646 , - 761 , - 3660 , - 5455 , - 258 , - 5733 , - 4216 , - 1595 , - 3758 , - 4817 , - 4772 , - 3623 , - 1370 , - 3901 , - 5328 , - 5651 , - 4870 , - 2985 , - 5884 , - 1791 , - 2482 , - 2069 , - 552 , - 3819 , - 94 , - 1153 , - 1108 , - 5847 , - 3594 , - 237 , - 1664 , - 1987 , - 1206 , - 5209 , - 2220 , - 4015 , - 4706 , - 4293 , - 2776 , - 155 , - 2318 , - 3377 , - 3332 , - 2183 , - 5818 , - 2461 , - 3888 , - 4211 , - 3430 , - 1545 , - 4444 , - 351 , - 1042 , - 629 , - 5000 , - 2379 , - 4542 , - 5601 , - 5556 , - 4407 , - 2154 , - 4685 , - 224 , - 547 , - 5654 , - 3769 , - 780 , - 2575 , - 3266 , - 2853 , - 1336 , - 4603 , - 878 , - 1937 , - 1892 , - 743 , - 4378 , - 1021 , - 2448 , - 2771 , - 1990 , - 105 , - 3004 , - 4799 , - 5490 , - 5077 , - 3560 , - 939 , - 3102 , - 4161 , - 4116 , - 2967 , - 714 , - 3245 , - 4672 , - 4995 , - 4214 , - 2329 , - 5228 , - 1135 , - 1826 , - 1413 , - 5784 , - 3163 , - 5326 , - 497 , - 452 , - 5191 , - 2938 , - 5469 , - 1008 , - 1331 , - 550 , - 4553 , - 1564 , - 3359 , - 4050 , - 3637 , - 2120 , - 5387 , - 1662 , - 2721 , - 2676 , - 1527 , - 5162 , - 1805 , - 3232 , - 3555 , - 2774 , - 889 , - 3788 , - 5583 , - 386 , - 5861 , - 4344 , - 1723 , - 3886 , - 4945 , - 4900 , - 3751 , - 1498 , - 4029 , - 5456 , - 5779 , - 4998 , - 3113 , - 124 , - 1919 , - 2610 , - 2197 , - 680 , - 3947 , - 222 , - 1281 , - 1236 , - 87 , - 3722 , - 365 , - 1792 , - 2115 , - 1334 , - 5337 , - 2348 , - 4143 , - 4834 , - 4421 , - 2904 , - 283 , - 2446 , - 3505 , - 3460 , - 2311 , - 58 , - 2589 , - 4016 , - 4339 , - 3558 , - 1673 , - 4572 , - 479 , - 1170 , - 757 , - 5128 , - 2507 , - 4670 , - 5729 , - 5684 , - 4535 , - 2282 , - 4813 , - 352 , - 675 , - 5782 , - 3897 , - 908 , - 2703 , - 3394 , - 2981 , - 1464 , - 4731 , - 1006 , - 2065 , - 2020 , - 871 , - 4506 , - 1149 , - 2576 , - 2899 , - 2118 , - 233 , - 3132 , - 4927 , - 5618 , - 5205 , - 3688 , - 1067 , - 3230 , - 4289 , - 4244 , - 3095 , - 842 , - 3373 , - 4800 , - 5123 , - 4342 , - 2457 , - 5356 , - 1263 , - 1954 , - 1541 , - 24 , - 3291 , - 5454 , - 625 , - 580 , - 5319 , - 3066 , - 5597 , - 1136 , - 1459 , - 678 , - 4681 , - 1692 , - 3487 , - 4178 , - 3765 , - 2248 , - 5515 , - 1790 , - 2849 , - 2804 , - 1655 , - 5290 , - 1933 , - 3360 , - 3683 , - 2902 , - 1017 , - 3916 , - 5711 , - 514 , - 101 , - 4472 , - 1851 , - 4014 , - 5073 , - 5028 , - 3879 , - 1626 , - 4157 , - 5584 , - 19 , - 5126 , - 3241 , - 252 , - 2047 , - 2738 , - 2325 , - 808 , - 4075 , - 350 , - 1409 , - 1364 , - 215 , - 3850 , - 493 , - 1920 , - 2243 , - 1462 , - 5465 , - 2476 , - 4271 , - 4962 , - 4549 , - 3032 , - 411 , - 2574 , - 3633 , - 3588 , - 2439 , - 186 , - 2717 , - 4144 , - 4467 , - 3686 , - 1801 , - 4700 , - 607 , - 1298 , - 885 , - 5256 , - 2635 , - 4798 , - 5857 , - 5812 , - 4663 , - 2410 , - 4941 , - 480 , - 803 , - 22 , - 4025 , - 1036 , - 2831 , - 3522 , - 3109 , - 1592 , - 4859 , - 1134 , - 2193 , - 2148 , - 999 , - 4634 , - 1277 , - 2704 , - 3027 , - 2246 , - 361 , - 3260 , - 5055 , - 5746 , - 5333 , - 3816 , - 1195 , - 3358 , - 4417 , - 4372 , - 3223 , - 970 , - 3501 , - 4928 , - 5251 , - 4470 , - 2585 , - 5484 , - 1391 , - 2082 , - 1669 , - 152 , - 3419 , - 5582 , - 753 , - 708 , - 5447 , - 3194 , - 5725 , - 1264 , - 1587 , - 806 , - 4809 , - 1820 , - 3615 , - 4306 , - 3893 , - 2376 , - 5643 , - 1918 , - 2977 , - 2932 , - 1783 , - 5418 , - 2061 , - 3488 , - 3811 , - 3030 , - 1145 , - 4044 , - 5839 , - 642 , - 229 , - 4600 , - 1979 , - 4142 , - 5201 , - 5156 , - 4007 , - 1754 , - 4285 , - 5712 , - 147 , - 5254 , - 3369 , - 380 , - 2175 , - 2866 , - 2453 , - 936 , - 4203 , - 478 , - 1537 , - 1492 , - 343 , - 3978 , - 621 , - 2048 , - 2371 , - 1590 , - 5593 , - 2604 , - 4399 , - 5090 , - 4677 , - 3160 , - 539 , - 2702 , - 3761 , - 3716 , - 2567 , - 314 , - 2845 , - 4272 , - 4595 , - 3814 , - 1929 , - 4828 , - 735 , - 1426 , - 1013 , - 5384 , - 2763 , - 4926 , - 97 , - 52 , - 4791 , - 2538 , - 5069 , - 608 , - 931 , - 150 , - 4153 , - 1164 , - 2959 , - 3650 , - 3237 , - 1720 , - 4987 , - 1262 , - 2321 , - 2276 , - 1127 , - 4762 , - 1405 , - 2832 , - 3155 , - 2374 , - 489 , - 3388 , - 5183 , - 5874 , - 5461 , - 3944 , - 1323 , - 3486 , - 4545 , - 4500 , - 3351 , - 1098 , - 3629 , - 5056 , - 5379 , - 4598 , - 2713 , - 5612 , - 1519 , - 2210 , - 1797 , - 280 , - 3547 , - 5710 , - 881 , - 836 , - 5575 , - 3322 , - 5853 , - 1392 , - 1715 , - 934 , - 4937 , - 1948 , - 3743 , - 4434 , - 4021 , - 2504 , - 5771 , - 2046 , - 3105 , - 3060 , - 1911 , - 5546 , - 2189 , - 3616 , - 3939 , - 3158 , - 1273 , - 4172 , - 79 , - 770 , - 357 , - 4728 , - 2107 , - 4270 , - 5329 , - 5284 , - 4135 , - 1882 , - 4413 , - 5840 , - 275 , - 5382 , - 3497 , - 508 , - 2303 , - 2994 , - 2581 , - 1064 , - 4331 , - 606 , - 1665 , - 1620 , - 471 , - 4106 , - 749 , - 2176 , - 2499 , - 1718 , - 5721 , - 2732 , - 4527 , - 5218 , - 4805 , - 3288 , - 667 , - 2830 , - 3889 , - 3844 , - 2695 , - 442 , - 2973 , - 4400 , - 4723 , - 3942 , - 2057 , - 4956 , - 863 , - 1554 , - 1141 , - 5512 , - 2891 , - 5054 , - 225 , - 180 , - 4919 , - 2666 , - 5197 , - 736 , - 1059 , - 278 , - 4281 , - 1292 , - 3087 , - 3778 , - 3365 , - 1848 , - 5115 , - 1390 , - 2449 , - 2404 , - 1255 , - 4890 , - 1533 , - 2960 , - 3283 , - 2502 , - 617 , - 3516 , - 5311 , - 114 , - 5589 , - 4072 , - 1451 , - 3614 , - 4673 , - 4628 , - 3479 , - 1226 , - 3757 , - 5184 , - 5507 , - 4726 , - 2841 , - 5740 , - 1647 , - 2338 , - 1925 , - 408 , - 3675 , - 5838 , - 1009 , - 964 , - 5703 , - 3450 , - 93 , - 1520 , - 1843 , - 1062 , - 5065 , - 2076 , - 3871 , - 4562 , - 4149 , - 2632 , - 11 , - 2174 , - 3233 , - 3188 , - 2039 , - 5674 , - 2317 , - 3744 , - 4067 , - 3286 , - 1401 , - 4300 , - 207 , - 898 , - 485 , - 4856 , - 2235 , - 4398 , - 5457 , - 5412 , - 4263 , - 2010 , - 4541 , - 80 , - 403 , - 5510 , - 3625 , - 636 , - 2431 , - 3122 , - 2709 , - 1192 , - 4459 , - 734 , - 1793 , - 1748 , - 599 , - 4234 , - 877 , - 2304 , - 2627 , - 1846 , - 5849 , - 2860 , - 4655 , - 5346 , - 4933 , - 3416 , - 795 , - 2958 , - 4017 , - 3972 , - 2823 , - 570 , - 3101 , - 4528 , - 4851 , - 4070 , - 2185 , - 5084 , - 991 , - 1682 , - 1269 , - 5640 , - 3019 , - 5182 , - 353 , - 308 , - 5047 , - 2794 , - 5325 , - 864 , - 1187 , - 406 , - 4409 , - 1420 , - 3215 , - 3906 , - 3493 , - 1976 , - 5243 , - 1518 , - 2577 , - 2532 , - 1383 , - 5018 , - 1661 , - 3088 , - 3411 , - 2630 , - 745 , - 3644 , - 5439 , - 242 , - 5717 , - 4200 , - 1579 , - 3742 , - 4801 , - 4756 , - 3607 , - 1354 , - 3885 , - 5312 , - 5635 , - 4854 , - 2969 , - 5868 , - 1775 , - 2466 , - 2053 , - 536 , - 3803 , - 78 , - 1137 , - 1092 , - 5831 , - 3578 , - 221 , - 1648 , - 1971 , - 1190 , - 5193 , - 2204 , - 3999 , - 4690 , - 4277 , - 2760 , - 139 , - 2302 , - 3361 , - 3316 , - 2167 , - 5802 , - 2445 , - 3872 , - 4195 , - 3414 , - 1529 , - 4428 , - 335 , - 1026 , - 613 , - 4984 , - 2363 , - 4526 , - 5585 , - 5540 , - 4391 , - 2138 , - 4669 , - 208 , - 531 , - 5638 , - 3753 , - 764 , - 2559 , - 3250 , - 2837 , - 1320 , - 4587 , - 862 , - 1921 , - 1876 , - 727 , - 4362 , - 1005 , - 2432 , - 2755 , - 1974 , - 89 , - 2988 , - 4783 , - 5474 , - 5061 , - 3544 , - 923 , - 3086 , - 4145 , - 4100 , - 2951 , - 698 , - 3229 , - 4656 , - 4979 , - 4198 , - 2313 , - 5212 , - 1119 , - 1810 , - 1397 , - 5768 , - 3147 , - 5310 , - 481 , - 436 , - 5175 , - 2922 , - 5453 , - 992 , - 1315 , - 534 , - 4537 , - 1548 , - 3343 , - 4034 , - 3621 , - 2104 , - 5371 , - 1646 , - 2705 , - 2660 , - 1511 , - 5146 , - 1789 , - 3216 , - 3539 , - 2758 , - 873 , - 3772 , - 5567 , - 370 , - 5845 , - 4328 , - 1707 , - 3870 , - 4929 , - 4884 , - 3735 , - 1482 , - 4013 , - 5440 , - 5763 , - 4982 , - 3097 , - 108 , - 1903 , - 2594 , - 2181 , - 664 , - 3931 , - 206 , - 1265 , - 1220 , - 71 , - 3706 , - 349 , - 1776 , - 2099 , - 1318 , - 5321 , - 2332 , - 4127 , - 4818 , - 4405 , - 2888 , - 267 , - 2430 , - 3489 , - 3444 , - 2295 , - 42 , - 2573 , - 4000 , - 4323 , - 3542 , - 1657 , - 4556 , - 463 , - 1154 , - 741 , - 5112 , - 2491 , - 4654 , - 5713 , - 5668 , - 4519 , - 2266 , - 4797 , - 336 , - 659 , - 5766 , - 3881 , - 892 , - 2687 , - 3378 , - 2965 , - 1448 , - 4715 , - 990 , - 2049 , - 2004 , - 855 , - 4490 , - 1133 , - 2560 , - 2883 , - 2102 , - 217 , - 3116 , - 4911 , - 5602 , - 5189 , - 3672 , - 1051 , - 3214 , - 4273 , - 4228 , - 3079 , - 826 , - 3357 , - 4784 , - 5107 , - 4326 , - 2441 , - 5340 , - 1247 , - 1938 , - 1525 , - 8 , - 3275 , - 5438 , - 609 , - 564 , - 5303 , - 3050 , - 5581 , - 1120 , - 1443 , - 662 , - 4665 , - 1676 , - 3471 , - 4162 , - 3749 , - 2232 , - 5499 , - 1774 , - 2833 , - 2788 , - 1639 , - 5274 , - 1917 , - 3344 , - 3667 , - 2886 , - 1001 , - 3900 , - 5695 , - 498 , - 85 , - 4456 , - 1835 , - 3998 , - 5057 , - 5012 , - 3863 , - 1610 , - 4141 , - 5568 , - 3 , - 5110 , - 3225 , - 236 , - 2031 , - 2722 , - 2309 , - 792 , - 4059 , - 334 , - 1393 , - 1348 , - 199 , - 3834 , - 477 , - 1904 , - 2227 , - 1446 , - 5449 , - 2460 , - 4255 , - 4946 , - 4533 , - 3016 , - 395 , - 2558 , - 3617 , - 3572 , - 2423 , - 170 , - 2701 , - 4128 , - 4451 , - 3670 , - 1785 , - 4684 , - 591 , - 1282 , - 869 , - 5240 , - 2619 , - 4782 , - 5841 , - 5796 , - 4647 , - 2394 , - 4925 , - 464 , - 787 , - 6 , - 4009 , - 1020 , - 2815 , - 3506 , - 3093 , - 1576 , - 4843 , - 1118 , - 2177 , - 2132 , - 983 , - 4618 , - 1261 , - 2688 , - 3011 , - 2230 , - 345 , - 3244 , - 5039 , - 5730 , - 5317 , - 3800 , - 1179 , - 3342 , - 4401 , - 4356 , - 3207 , - 954 , - 3485 , - 4912 , - 5235 , - 4454 , - 2569 , - 5468 , - 1375 , - 2066 , - 1653 , - 136 , - 3403 , - 5566 , - 737 , - 692 , - 5431 , - 3178 , - 5709 , - 1248 , - 1571 , - 790 , - 4793 , - 1804 , - 3599 , - 4290 , - 3877 , - 2360 , - 5627 , - 1902 , - 2961 , - 2916 , - 1767 , - 5402 , - 2045 , - 3472 , - 3795 , - 3014 , - 1129 , - 4028 , - 5823 , - 626 , - 213 , - 4584 , - 1963 , - 4126 , - 5185 , - 5140 , - 3991 , - 1738 , - 4269 , - 5696 , - 131 , - 5238 , - 3353 , - 364 , - 2159 , - 2850 , - 2437 , - 920 , - 4187 , - 462 , - 1521 , - 1476 , - 327 , - 3962 , - 605 , - 2032 , - 2355 , - 1574 , - 5577 , - 2588 , - 4383 , - 5074 , - 4661 , - 3144 , - 523 , - 2686 , - 3745 , - 3700 , - 2551 , - 298 , - 2829 , - 4256 , - 4579 , - 3798 , - 1913 , - 4812 , - 719 , - 1410 , - 997 , - 5368 , - 2747 , - 4910 , - 81 , - 36 , - 4775 , - 2522 , - 5053 , - 592 , - 915 , - 134 , - 4137 , - 1148 , - 2943 , - 3634 , - 3221 , - 1704 , - 4971 , - 1246 , - 2305 , - 2260 , - 1111 , - 4746 , - 1389 , - 2816 , - 3139 , - 2358 , - 473 , - 3372 , - 5167 , - 5858 , - 5445 , - 3928 , - 1307 , - 3470 , - 4529 , - 4484 , - 3335 , - 1082 , - 3613 , - 5040 , - 5363 , - 4582 , - 2697 , - 5596 , - 1503 , - 2194 , - 1781 , - 264 , - 3531 , - 5694 , - 865 , - 820 , - 5559 , - 3306 , - 5837 , - 1376 , - 1699 , - 918 , - 4921 , - 1932 , - 3727 , - 4418 , - 4005 , - 2488 , - 5755 , - 2030 , - 3089 , - 3044 , - 1895 , - 5530 , - 2173 , - 3600 , - 3923 , - 3142 , - 1257 , - 4156 , - 63 , - 754 , - 341 , - 4712 , - 2091 , - 4254 , - 5313 , - 5268 , - 4119 , - 1866 , - 4397 , - 5824 , - 259 , - 5366 , - 3481 , - 492 , - 2287 , - 2978 , - 2565 , - 1048 , - 4315 , - 590 , - 1649 , - 1604 , - 455 , - 4090 , - 733 , - 2160 , - 2483 , - 1702 , - 5705 , - 2716 , - 4511 , - 5202 , - 4789 , - 3272 , - 651 , - 2814 , - 3873 , - 3828 , - 2679 , - 426 , - 2957 , - 4384 , - 4707 , - 3926 , - 2041 , - 4940 , - 847 , - 1538 , - 1125 , - 5496 , - 2875 , - 5038 , - 209 , - 164 , - 4903 , - 2650 , - 5181 , - 720 , - 1043 , - 262 , - 4265 , - 1276 , - 3071 , - 3762 , - 3349 , - 1832 , - 5099 , - 1374 , - 2433 , - 2388 , - 1239 , - 4874 , - 1517 , - 2944 , - 3267 , - 2486 , - 601 , - 3500 , - 5295 , - 98 , - 5573 , - 4056 , - 1435 , - 3598 , - 4657 , - 4612 , - 3463 , - 1210 , - 3741 , - 5168 , - 5491 , - 4710 , - 2825 , - 5724 , - 1631 , - 2322 , - 1909 , - 392 , - 3659 , - 5822 , - 993 , - 948 , - 5687 , - 3434 , - 77 , - 1504 , - 1827 , - 1046 , - 5049 , - 2060 , - 3855 , - 4546 , - 4133 , - 2616 , - 5883 , - 2158 , - 3217 , - 3172 , - 2023 , - 5658 , - 2301 , - 3728 , - 4051 , - 3270 , - 1385 , - 4284 , - 191 , - 882 , - 469 , - 4840 , - 2219 , - 4382 , - 5441 , - 5396 , - 4247 , - 1994 , - 4525 , - 64 , - 387 , - 5494 , - 3609 , - 620 , - 2415 , - 3106 , - 2693 , - 1176 , - 4443 , - 718 , - 1777 , - 1732 , - 583 , - 4218 , - 861 , - 2288 , - 2611 , - 1830 , - 5833 , - 2844 , - 4639 , - 5330 , - 4917 , - 3400 , - 779 , - 2942 , - 4001 , - 3956 , - 2807 , - 554 , - 3085 , - 4512 , - 4835 , - 4054 , - 2169 , - 5068 , - 975 , - 1666 , - 1253 , - 5624 , - 3003 , - 5166 , - 337 , - 292 , - 5031 , - 2778 , - 5309 , - 848 , - 1171 , - 390 , - 4393 , - 1404 , - 3199 , - 3890 , - 3477 , - 1960 , - 5227 , - 1502 , - 2561 , - 2516 , - 1367 , - 5002 , - 1645 , - 3072 , - 3395 , - 2614 , - 729 , - 3628 , - 5423 , - 226 , - 5701 , - 4184 , - 1563 , - 3726 , - 4785 , - 4740 , - 3591 , - 1338 , - 3869 , - 5296 , - 5619 , - 4838 , - 2953 , - 5852 , - 1759 , - 2450 , - 2037 , - 520 , - 3787 , - 62 , - 1121 , - 1076 , - 5815 , - 3562 , - 205 , - 1632 , - 1955 , - 1174 , - 5177 , - 2188 , - 3983 , - 4674 , - 4261 , - 2744 , - 123 , - 2286 , - 3345 , - 3300 , - 2151 , - 5786 , - 2429 , - 3856 , - 4179 , - 3398 , - 1513 , - 4412 , - 319 , - 1010 , - 597 , - 4968 , - 2347 , - 4510 , - 5569 , - 5524 , - 4375 , - 2122 , - 4653 , - 192 , - 515 , - 5622 , - 3737 , - 748 , - 2543 , - 3234 , - 2821 , - 1304 , - 4571 , - 846 , - 1905 , - 1860 , - 711 , - 4346 , - 989 , - 2416 , - 2739 , - 1958 , - 73 , - 2972 , - 4767 , - 5458 , - 5045 , - 3528 , - 907 , - 3070 , - 4129 , - 4084 , - 2935 , - 682 , - 3213 , - 4640 , - 4963 , - 4182 , - 2297 , - 5196 , - 1103 , - 1794 , - 1381 , - 5752 , - 3131 , - 5294 , - 465 , - 420 , - 5159 , - 2906 , - 5437 , - 976 , - 1299 , - 518 , - 4521 , - 1532 , - 3327 , - 4018 , - 3605 , - 2088 , - 5355 , - 1630 , - 2689 , - 2644 , - 1495 , - 5130 , - 1773 , - 3200 , - 3523 , - 2742 , - 857 , - 3756 , - 5551 , - 354 , - 5829 , - 4312 , - 1691 , - 3854 , - 4913 , - 4868 , - 3719 , - 1466 , - 3997 , - 5424 , - 5747 , - 4966 , - 3081 , - 92 , - 1887 , - 2578 , - 2165 , - 648 , - 3915 , - 190 , - 1249 , - 1204 , - 55 , - 3690 , - 333 , - 1760 , - 2083 , - 1302 , - 5305 , - 2316 , - 4111 , - 4802 , - 4389 , - 2872 , - 251 , - 2414 , - 3473 , - 3428 , - 2279 , - 26 , - 2557 , - 3984 , - 4307 , - 3526 , - 1641 , - 4540 , - 447 , - 1138 , - 725 , - 5096 , - 2475 , - 4638 , - 5697 , - 5652 , - 4503 , - 2250 , - 4781 , - 320 , - 643 , - 5750 , - 3865 , - 876 , - 2671 , - 3362 , - 2949 , - 1432 , - 4699 , - 974 , - 2033 , - 1988 , - 839 , - 4474 , - 1117 , - 2544 , - 2867 , - 2086 , - 201 , - 3100 , - 4895 , - 5586 , - 5173 , - 3656 , - 1035 , - 3198 , - 4257 , - 4212 , - 3063 , - 810 , - 3341 , - 4768 , - 5091 , - 4310 , - 2425 , - 5324 , - 1231 , - 1922 , - 1509 , - 5880 , - 3259 , - 5422 , - 593 , - 548 , - 5287 , - 3034 , - 5565 , - 1104 , - 1427 , - 646 , - 4649 , - 1660 , - 3455 , - 4146 , - 3733 , - 2216 , - 5483 , - 1758 , - 2817 , - 2772 , - 1623 , - 5258 , - 1901 , - 3328 , - 3651 , - 2870 , - 985 , - 3884 , - 5679 , - 482 , - 69 , - 4440 , - 1819 , - 3982 , - 5041 , - 4996 , - 3847 , - 1594 , - 4125 , - 5552 , - 5875 , - 5094 , - 3209 , - 220 , - 2015 , - 2706 , - 2293 , - 776 , - 4043 , - 318 , - 1377 , - 1332 , - 183 , - 3818 , - 461 , - 1888 , - 2211 , - 1430 , - 5433 , - 2444 , - 4239 , - 4930 , - 4517 , - 3000 , - 379 , - 2542 , - 3601 , - 3556 , - 2407 , - 154 , - 2685 , - 4112 , - 4435 , - 3654 , - 1769 , - 4668 , - 575 , - 1266 , - 853 , - 5224 , - 2603 , - 4766 , - 5825 , - 5780 , - 4631 , - 2378 , - 4909 , - 448 , - 771 , - 5878 , - 3993 , - 1004 , - 2799 , - 3490 , - 3077 , - 1560 , - 4827 , - 1102 , - 2161 , - 2116 , - 967 , - 4602 , - 1245 , - 2672 , - 2995 , - 2214 , - 329 , - 3228 , - 5023 , - 5714 , - 5301 , - 3784 , - 1163 , - 3326 , - 4385 , - 4340 , - 3191 , - 938 , - 3469 , - 4896 , - 5219 , - 4438 , - 2553 , - 5452 , - 1359 , - 2050 , - 1637 , - 120 , - 3387 , - 5550 , - 721 , - 676 , - 5415 , - 3162 , - 5693 , - 1232 , - 1555 , - 774 , - 4777 , - 1788 , - 3583 , - 4274 , - 3861 , - 2344 , - 5611 , - 1886 , - 2945 , - 2900 , - 1751 , - 5386 , - 2029 , - 3456 , - 3779 , - 2998 , - 1113 , - 4012 , - 5807 , - 610 , - 197 , - 4568 , - 1947 , - 4110 , - 5169 , - 5124 , - 3975 , - 1722 , - 4253 , - 5680 , - 115 , - 5222 , - 3337 , - 348 , - 2143 , - 2834 , - 2421 , - 904 , - 4171 , - 446 , - 1505 , - 1460 , - 311 , - 3946 , - 589 , - 2016 , - 2339 , - 1558 , - 5561 , - 2572 , - 4367 , - 5058 , - 4645 , - 3128 , - 507 , - 2670 , - 3729 , - 3684 , - 2535 , - 282 , - 2813 , - 4240 , - 4563 , - 3782 , - 1897 , - 4796 , - 703 , - 1394 , - 981 , - 5352 , - 2731 , - 4894 , - 65 , - 20 , - 4759 , - 2506 , - 5037 , - 576 , - 899 , - 118 , - 4121 , - 1132 , - 2927 , - 3618 , - 3205 , - 1688 , - 4955 , - 1230 , - 2289 , - 2244 , - 1095 , - 4730 , - 1373 , - 2800 , - 3123 , - 2342 , - 457 , - 3356 , - 5151 , - 5842 , - 5429 , - 3912 , - 1291 , - 3454 , - 4513 , - 4468 , - 3319 , - 1066 , - 3597 , - 5024 , - 5347 , - 4566 , - 2681 , - 5580 , - 1487 , - 2178 , - 1765 , - 248 , - 3515 , - 5678 , - 849 , - 804 , - 5543 , - 3290 , - 5821 , - 1360 , - 1683 , - 902 , - 4905 , - 1916 , - 3711 , - 4402 , - 3989 , - 2472 , - 5739 , - 2014 , - 3073 , - 3028 , - 1879 , - 5514 , - 2157 , - 3584 , - 3907 , - 3126 , - 1241 , - 4140 , - 47 , - 738 , - 325 , - 4696 , - 2075 , - 4238 , - 5297 , - 5252 , - 4103 , - 1850 , - 4381 , - 5808 , - 243 , - 5350 , - 3465 , - 476 , - 2271 , - 2962 , - 2549 , - 1032 , - 4299 , - 574 , - 1633 , - 1588 , - 439 , - 4074 , - 717 , - 2144 , - 2467 , - 1686 , - 5689 , - 2700 , - 4495 , - 5186 , - 4773 , - 3256 , - 635 , - 2798 , - 3857 , - 3812 , - 2663 , - 410 , - 2941 , - 4368 , - 4691 , - 3910 , - 2025 , - 4924 , - 831 , - 1522 , - 1109 , - 5480 , - 2859 , - 5022 , - 193 , - 148 , - 4887 , - 2634 , - 5165 , - 704 , - 1027 , - 246 , - 4249 , - 1260 , - 3055 , - 3746 , - 3333 , - 1816 , - 5083 , - 1358 , - 2417 , - 2372 , - 1223 , - 4858 , - 1501 , - 2928 , - 3251 , - 2470 , - 585 , - 3484 , - 5279 , - 82 , - 5557 , - 4040 , - 1419 , - 3582 , - 4641 , - 4596 , - 3447 , - 1194 , - 3725 , - 5152 , - 5475 , - 4694 , - 2809 , - 5708 , - 1615 , - 2306 , - 1893 , - 376 , - 3643 , - 5806 , - 977 , - 932 , - 5671 , - 3418 , - 61 , - 1488 , - 1811 , - 1030 , - 5033 , - 2044 , - 3839 , - 4530 , - 4117 , - 2600 , - 5867 , - 2142 , - 3201 , - 3156 , - 2007 , - 5642 , - 2285 , - 3712 , - 4035 , - 3254 , - 1369 , - 4268 , - 175 , - 866 , - 453 , - 4824 , - 2203 , - 4366 , - 5425 , - 5380 , - 4231 , - 1978 , - 4509 , - 48 , - 371 , - 5478 , - 3593 , - 604 , - 2399 , - 3090 , - 2677 , - 1160 , - 4427 , - 702 , - 1761 , - 1716 , - 567 , - 4202 , - 845 , - 2272 , - 2595 , - 1814 , - 5817 , - 2828 , - 4623 , - 5314 , - 4901 , - 3384 , - 763 , - 2926 , - 3985 , - 3940 , - 2791 , - 538 , - 3069 , - 4496 , - 4819 , - 4038 , - 2153 , - 5052 , - 959 , - 1650 , - 1237 , - 5608 , - 2987 , - 5150 , - 321 , - 276 , - 5015 , - 2762 , - 5293 , - 832 , - 1155 , - 374 , - 4377 , - 1388 , - 3183 , - 3874 , - 3461 , - 1944 , - 5211 , - 1486 , - 2545 , - 2500 , - 1351 , - 4986 , - 1629 , - 3056 , - 3379 , - 2598 , - 713 , - 3612 , - 5407 , - 210 , - 5685 , - 4168 , - 1547 , - 3710 , - 4769 , - 4724 , - 3575 , - 1322 , - 3853 , - 5280 , - 5603 , - 4822 , - 2937 , - 5836 , - 1743 , - 2434 , - 2021 , - 504 , - 3771 , - 46 , - 1105 , - 1060 , - 5799 , - 3546 , - 189 , - 1616 , - 1939 , - 1158 , - 5161 , - 2172 , - 3967 , - 4658 , - 4245 , - 2728 , - 107 , - 2270 , - 3329 , - 3284 , - 2135 , - 5770 , - 2413 , - 3840 , - 4163 , - 3382 , - 1497 , - 4396 , - 303 , - 994 , - 581 , - 4952 , - 2331 , - 4494 , - 5553 , - 5508 , - 4359 , - 2106 , - 4637 , - 176 , - 499 , - 5606 , - 3721 , - 732 , - 2527 , - 3218 , - 2805 , - 1288 , - 4555 , - 830 , - 1889 , - 1844 , - 695 , - 4330 , - 973 , - 2400 , - 2723 , - 1942 , - 57 , - 2956 , - 4751 , - 5442 , - 5029 , - 3512 , - 891 , - 3054 , - 4113 , - 4068 , - 2919 , - 666 , - 3197 , - 4624 , - 4947 , - 4166 , - 2281 , - 5180 , - 1087 , - 1778 , - 1365 , - 5736 , - 3115 , - 5278 , - 449 , - 404 , - 5143 , - 2890 , - 5421 , - 960 , - 1283 , - 502 , - 4505 , - 1516 , - 3311 , - 4002 , - 3589 , - 2072 , - 5339 , - 1614 , - 2673 , - 2628 , - 1479 , - 5114 , - 1757 , - 3184 , - 3507 , - 2726 , - 841 , - 3740 , - 5535 , - 338 , - 5813 , - 4296 , - 1675 , - 3838 , - 4897 , - 4852 , - 3703 , - 1450 , - 3981 , - 5408 , - 5731 , - 4950 , - 3065 , - 76 , - 1871 , - 2562 , - 2149 , - 632 , - 3899 , - 174 , - 1233 , - 1188 , - 39 , - 3674 , - 317 , - 1744 , - 2067 , - 1286 , - 5289 , - 2300 , - 4095 , - 4786 , - 4373 , - 2856 , - 235 , - 2398 , - 3457 , - 3412 , - 2263 , - 10 , - 2541 , - 3968 , - 4291 , - 3510 , - 1625 , - 4524 , - 431 , - 1122 , - 709 , - 5080 , - 2459 , - 4622 , - 5681 , - 5636 , - 4487 , - 2234 , - 4765 , - 304 , - 627 , - 5734 , - 3849 , - 860 , - 2655 , - 3346 , - 2933 , - 1416 , - 4683 , - 958 , - 2017 , - 1972 , - 823 , - 4458 , - 1101 , - 2528 , - 2851 , - 2070 , - 185 , - 3084 , - 4879 , - 5570 , - 5157 , - 3640 , - 1019 , - 3182 , - 4241 , - 4196 , - 3047 , - 794 , - 3325 , - 4752 , - 5075 , - 4294 , - 2409 , - 5308 , - 1215 , - 1906 , - 1493 , - 5864 , - 3243 , - 5406 , - 577 , - 532 , - 5271 , - 3018 , - 5549 , - 1088 , - 1411 , - 630 , - 4633 , - 1644 , - 3439 , - 4130 , - 3717 , - 2200 , - 5467 , - 1742 , - 2801 , - 2756 , - 1607 , - 5242 , - 1885 , - 3312 , - 3635 , - 2854 , - 969 , - 3868 , - 5663 , - 466 , - 53 , - 4424 , - 1803 , - 3966 , - 5025 , - 4980 , - 3831 , - 1578 , - 4109 , - 5536 , - 5859 , - 5078 , - 3193 , - 204 , - 1999 , - 2690 , - 2277 , - 760 , - 4027 , - 302 , - 1361 , - 1316 , - 167 , - 3802 , - 445 , - 1872 , - 2195 , - 1414 , - 5417 , - 2428 , - 4223 , - 4914 , - 4501 , - 2984 , - 363 , - 2526 , - 3585 , - 3540 , - 2391 , - 138 , - 2669 , - 4096 , - 4419 , - 3638 , - 1753 , - 4652 , - 559 , - 1250 , - 837 , - 5208 , - 2587 , - 4750 , - 5809 , - 5764 , - 4615 , - 2362 , - 4893 , - 432 , - 755 , - 5862 , - 3977 , - 988 , - 2783 , - 3474 , - 3061 , - 1544 , - 4811 , - 1086 , - 2145 , - 2100 , - 951 , - 4586 , - 1229 , - 2656 , - 2979 , - 2198 , - 313 , - 3212 , - 5007 , - 5698 , - 5285 , - 3768 , - 1147 , - 3310 , - 4369 , - 4324 , - 3175 , - 922 , - 3453 , - 4880 , - 5203 , - 4422 , - 2537 , - 5436 , - 1343 , - 2034 , - 1621 , - 104 , - 3371 , - 5534 , - 705 , - 660 , - 5399 , - 3146 , - 5677 , - 1216 , - 1539 , - 758 , - 4761 , - 1772 , - 3567 , - 4258 , - 3845 , - 2328 , - 5595 , - 1870 , - 2929 , - 2884 , - 1735 , - 5370 , - 2013 , - 3440 , - 3763 , - 2982 , - 1097 , - 3996 , - 5791 , - 594 , - 181 , - 4552 , - 1931 , - 4094 , - 5153 , - 5108 , - 3959 , - 1706 , - 4237 , - 5664 , - 99 , - 5206 , - 3321 , - 332 , - 2127 , - 2818 , - 2405 , - 888 , - 4155 , - 430 , - 1489 , - 1444 , - 295 , - 3930 , - 573 , - 2000 , - 2323 , - 1542 , - 5545 , - 2556 , - 4351 , - 5042 , - 4629 , - 3112 , - 491 , - 2654 , - 3713 , - 3668 , - 2519 , - 266 , - 2797 , - 4224 , - 4547 , - 3766 , - 1881 , - 4780 , - 687 , - 1378 , - 965 , - 5336 , - 2715 , - 4878 , - 49 , - 4 , - 4743 , - 2490 , - 5021 , - 560 , - 883 , - 102 , - 4105 , - 1116 , - 2911 , - 3602 , - 3189 , - 1672 , - 4939 , - 1214 , - 2273 , - 2228 , - 1079 , - 4714 , - 1357 , - 2784 , - 3107 , - 2326 , - 441 , - 3340 , - 5135 , - 5826 , - 5413 , - 3896 , - 1275 , - 3438 , - 4497 , - 4452 , - 3303 , - 1050 , - 3581 , - 5008 , - 5331 , - 4550 , - 2665 , - 5564 , - 1471 , - 2162 , - 1749 , - 232 , - 3499 , - 5662 , - 833 , - 788 , - 5527 , - 3274 , - 5805 , - 1344 , - 1667 , - 886 , - 4889 , - 1900 , - 3695 , - 4386 , - 3973 , - 2456 , - 5723 , - 1998 , - 3057 , - 3012 , - 1863 , - 5498 , - 2141 , - 3568 , - 3891 , - 3110 , - 1225 , - 4124 , - 31 , - 722 , - 309 , - 4680 , - 2059 , - 4222 , - 5281 , - 5236 , - 4087 , - 1834 , - 4365 , - 5792 , - 227 , - 5334 , - 3449 , - 460 , - 2255 , - 2946 , - 2533 , - 1016 , - 4283 , - 558 , - 1617 , - 1572 , - 423 , - 4058 , - 701 , - 2128 , - 2451 , - 1670 , - 5673 , - 2684 , - 4479 , - 5170 , - 4757 , - 3240 , - 619 , - 2782 , - 3841 , - 3796 , - 2647 , - 394 , - 2925 , - 4352 , - 4675 , - 3894 , - 2009 , - 4908 , - 815 , - 1506 , - 1093 , - 5464 , - 2843 , - 5006 , - 177 , - 132 , - 4871 , - 2618 , - 5149 , - 688 , - 1011 , - 230 , - 4233 , - 1244 , - 3039 , - 3730 , - 3317 , - 1800 , - 5067 , - 1342 , - 2401 , - 2356 , - 1207 , - 4842 , - 1485 , - 2912 , - 3235 , - 2454 , - 569 , - 3468 , - 5263 , - 66 , - 5541 , - 4024 , - 1403 , - 3566 , - 4625 , - 4580 , - 3431 , - 1178 , - 3709 , - 5136 , - 5459 , - 4678 , - 2793 , - 5692 , - 1599 , - 2290 , - 1877 , - 360 , - 3627 , - 5790 , - 961 , - 916 , - 5655 , - 3402 , - 45 , - 1472 , - 1795 , - 1014 , - 5017 , - 2028 , - 3823 , - 4514 , - 4101 , - 2584 , - 5851 , - 2126 , - 3185 , - 3140 , - 1991 , - 5626 , - 2269 , - 3696 , - 4019 , - 3238 , - 1353 , - 4252 , - 159 , - 850 , - 437 , - 4808 , - 2187 , - 4350 , - 5409 , - 5364 , - 4215 , - 1962 , - 4493 , - 32 , - 355 , - 5462 , - 3577 , - 588 , - 2383 , - 3074 , - 2661 , - 1144 , - 4411 , - 686 , - 1745 , - 1700 , - 551 , - 4186 , - 829 , - 2256 , - 2579 , - 1798 , - 5801 , - 2812 , - 4607 , - 5298 , - 4885 , - 3368 , - 747 , - 2910 , - 3969 , - 3924 , - 2775 , - 522 , - 3053 , - 4480 , - 4803 , - 4022 , - 2137 , - 5036 , - 943 , - 1634 , - 1221 , - 5592 , - 2971 , - 5134 , - 305 , - 260 , - 4999 , - 2746 , - 5277 , - 816 , - 1139 , - 358 , - 4361 , - 1372 , - 3167 , - 3858 , - 3445 , - 1928 , - 5195 , - 1470 , - 2529 , - 2484 , - 1335 , - 4970 , - 1613 , - 3040 , - 3363 , - 2582 , - 697 , - 3596 , - 5391 , - 194 , - 5669 , - 4152 , - 1531 , - 3694 , - 4753 , - 4708 , - 3559 , - 1306 , - 3837 , - 5264 , - 5587 , - 4806 , - 2921 , - 5820 , - 1727 , - 2418 , - 2005 , - 488 , - 3755 , - 30 , - 1089 , - 1044 , - 5783 , - 3530 , - 173 , - 1600 , - 1923 , - 1142 , - 5145 , - 2156 , - 3951 , - 4642 , - 4229 , - 2712 , - 91 , - 2254 , - 3313 , - 3268 , - 2119 , - 5754 , - 2397 , - 3824 , - 4147 , - 3366 , - 1481 , - 4380 , - 287 , - 978 , - 565 , - 4936 , - 2315 , - 4478 , - 5537 , - 5492 , - 4343 , - 2090 , - 4621 , - 160 , - 483 , - 5590 , - 3705 , - 716 , - 2511 , - 3202 , - 2789 , - 1272 , - 4539 , - 814 , - 1873 , - 1828 , - 679 , - 4314 , - 957 , - 2384 , - 2707 , - 1926 , - 41 , - 2940 , - 4735 , - 5426 , - 5013 , - 3496 , - 875 , - 3038 , - 4097 , - 4052 , - 2903 , - 650 , - 3181 , - 4608 , - 4931 , - 4150 , - 2265 , - 5164 , - 1071 , - 1762 , - 1349 , - 5720 , - 3099 , - 5262 , - 433 , - 388 , - 5127 , - 2874 , - 5405 , - 944 , - 1267 , - 486 , - 4489 , - 1500 , - 3295 , - 3986 , - 3573 , - 2056 , - 5323 , - 1598 , - 2657 , - 2612 , - 1463 , - 5098 , - 1741 , - 3168 , - 3491 , - 2710 , - 825 , - 3724 , - 5519 , - 322 , - 5797 , - 4280 , - 1659 , - 3822 , - 4881 , - 4836 , - 3687 , - 1434 , - 3965 , - 5392 , - 5715 , - 4934 , - 3049 , - 60 , - 1855 , - 2546 , - 2133 , - 616 , - 3883 , - 158 , - 1217 , - 1172 , - 23 , - 3658 , - 301 , - 1728 , - 2051 , - 1270 , - 5273 , - 2284 , - 4079 , - 4770 , - 4357 , - 2840 , - 219 , - 2382 , - 3441 , - 3396 , - 2247 , - 5882 , - 2525 , - 3952 , - 4275 , - 3494 , - 1609 , - 4508 , - 415 , - 1106 , - 693 , - 5064 , - 2443 , - 4606 , - 5665 , - 5620 , - 4471 , - 2218 , - 4749 , - 288 , - 611 , - 5718 , - 3833 , - 844 , - 2639 , - 3330 , - 2917 , - 1400 , - 4667 , - 942 , - 2001 , - 1956 , - 807 , - 4442 , - 1085 , - 2512 , - 2835 , - 2054 , - 169 , - 3068 , - 4863 , - 5554 , - 5141 , - 3624 , - 1003 , - 3166 , - 4225 , - 4180 , - 3031 , - 778 , - 3309 , - 4736 , - 5059 , - 4278 , - 2393 , - 5292 , - 1199 , - 1890 , - 1477 , - 5848 , - 3227 , - 5390 , - 561 , - 516 , - 5255 , - 3002 , - 5533 , - 1072 , - 1395 , - 614 , - 4617 , - 1628 , - 3423 , - 4114 , - 3701 , - 2184 , - 5451 , - 1726 , - 2785 , - 2740 , - 1591 , - 5226 , - 1869 , - 3296 , - 3619 , - 2838 , - 953 , - 3852 , - 5647 , - 450 , - 37 , - 4408 , - 1787 , - 3950 , - 5009 , - 4964 , - 3815 , - 1562 , - 4093 , - 5520 , - 5843 , - 5062 , - 3177 , - 188 , - 1983 , - 2674 , - 2261 , - 744 , - 4011 , - 286 , - 1345 , - 1300 , - 151 , - 3786 , - 429 , - 1856 , - 2179 , - 1398 , - 5401 , - 2412 , - 4207 , - 4898 , - 4485 , - 2968 , - 347 , - 2510 , - 3569 , - 3524 , - 2375 , - 122 , - 2653 , - 4080 , - 4403 , - 3622 , - 1737 , - 4636 , - 543 , - 1234 , - 821 , - 5192 , - 2571 , - 4734 , - 5793 , - 5748 , - 4599 , - 2346 , - 4877 , - 416 , - 739 , - 5846 , - 3961 , - 972 , - 2767 , - 3458 , - 3045 , - 1528 , - 4795 , - 1070 , - 2129 , - 2084 , - 935 , - 4570 , - 1213 , - 2640 , - 2963 , - 2182 , - 297 , - 3196 , - 4991 , - 5682 , - 5269 , - 3752 , - 1131 , - 3294 , - 4353 , - 4308 , - 3159 , - 906 , - 3437 , - 4864 , - 5187 , - 4406 , - 2521 , - 5420 , - 1327 , - 2018 , - 1605 , - 88 , - 3355 , - 5518 , - 689 , - 644 , - 5383 , - 3130 , - 5661 , - 1200 , - 1523 , - 742 , - 4745 , - 1756 , - 3551 , - 4242 , - 3829 , - 2312 , - 5579 , - 1854 , - 2913 , - 2868 , - 1719 , - 5354 , - 1997 , - 3424 , - 3747 , - 2966 , - 1081 , - 3980 , - 5775 , - 578 , - 165 , - 4536 , - 1915 , - 4078 , - 5137 , - 5092 , - 3943 , - 1690 , - 4221 , - 5648 , - 83 , - 5190 , - 3305 , - 316 , - 2111 , - 2802 , - 2389 , - 872 , - 4139 , - 414 , - 1473 , - 1428 , - 279 , - 3914 , - 557 , - 1984 , - 2307 , - 1526 , - 5529 , - 2540 , - 4335 , - 5026 , - 4613 , - 3096 , - 475 , - 2638 , - 3697 , - 3652 , - 2503 , - 250 , - 2781 , - 4208 , - 4531 , - 3750 , - 1865 , - 4764 , - 671 , - 1362 , - 949 , - 5320 , - 2699 , - 4862 , - 33 , - 5876 , - 4727 , - 2474 , - 5005 , - 544 , - 867 , - 86 , - 4089 , - 1100 , - 2895 , - 3586 , - 3173 , - 1656 , - 4923 , - 1198 , - 2257 , - 2212 , - 1063 , - 4698 , - 1341 , - 2768 , - 3091 , - 2310 , - 425 , - 3324 , - 5119 , - 5810 , - 5397 , - 3880 , - 1259 , - 3422 , - 4481 , - 4436 , - 3287 , - 1034 , - 3565 , - 4992 , - 5315 , - 4534 , - 2649 , - 5548 , - 1455 , - 2146 , - 1733 , - 216 , - 3483 , - 5646 , - 817 , - 772 , - 5511 , - 3258 , - 5789 , - 1328 , - 1651 , - 870 , - 4873 , - 1884 , - 3679 , - 4370 , - 3957 , - 2440 , - 5707 , - 1982 , - 3041 , - 2996 , - 1847 , - 5482 , - 2125 , - 3552 , - 3875 , - 3094 , - 1209 , - 4108 , - 15 , - 706 , - 293 , - 4664 , - 2043 , - 4206 , - 5265 , - 5220 , - 4071 , - 1818 , - 4349 , - 5776 , - 211 , - 5318 , - 3433 , - 444 , - 2239 , - 2930 , - 2517 , - 1000 , - 4267 , - 542 , - 1601 , - 1556 , - 407 , - 4042 , - 685 , - 2112 , - 2435 , - 1654 , - 5657 , - 2668 , - 4463 , - 5154 , - 4741 , - 3224 , - 603 , - 2766 , - 3825 , - 3780 , - 2631 , - 378 , - 2909 , - 4336 , - 4659 , - 3878 , - 1993 , - 4892 , - 799 , - 1490 , - 1077 , - 5448 , - 2827 , - 4990 , - 161 , - 116 , - 4855 , - 2602 , - 5133 , - 672 , - 995 , - 214 , - 4217 , - 1228 , - 3023 , - 3714 , - 3301 , - 1784 , - 5051 , - 1326 , - 2385 , - 2340 , - 1191 , - 4826 , - 1469 , - 2896 , - 3219 , - 2438 , - 553 , - 3452 , - 5247 , - 50 , - 5525 , - 4008 , - 1387 , - 3550 , - 4609 , - 4564 , - 3415 , - 1162 , - 3693 , - 5120 , - 5443 , - 4662 , - 2777 , - 5676 , - 1583 , - 2274 , - 1861 , - 344 , - 3611 , - 5774 , - 945 , - 900 , - 5639 , - 3386 , - 29 , - 1456 , - 1779 , - 998 , - 5001 , - 2012 , - 3807 , - 4498 , - 4085 , - 2568 , - 5835 , - 2110 , - 3169 , - 3124 , - 1975 , - 5610 , - 2253 , - 3680 , - 4003 , - 3222 , - 1337 , - 4236 , - 143 , - 834 , - 421 , - 4792 , - 2171 , - 4334 , - 5393 , - 5348 , - 4199 , - 1946 , - 4477 , - 16 , - 339 , - 5446 , - 3561 , - 572 , - 2367 , - 3058 , - 2645 , - 1128 , - 4395 , - 670 , - 1729 , - 1684 , - 535 , - 4170 , - 813 , - 2240 , - 2563 , - 1782 , - 5785 , - 2796 , - 4591 , - 5282 , - 4869 , - 3352 , - 731 , - 2894 , - 3953 , - 3908 , - 2759 , - 506 , - 3037 , - 4464 , - 4787 , - 4006 , - 2121 , - 5020 , - 927 , - 1618 , - 1205 , - 5576 , - 2955 , - 5118 , - 289 , - 244 , - 4983 , - 2730 , - 5261 , - 800 , - 1123 , - 342 , - 4345 , - 1356 , - 3151 , - 3842 , - 3429 , - 1912 , - 5179 , - 1454 , - 2513 , - 2468 , - 1319 , - 4954 , - 1597 , - 3024 , - 3347 , - 2566 , - 681 , - 3580 , - 5375 , - 178 , - 5653 , - 4136 , - 1515 , - 3678 , - 4737 , - 4692 , - 3543 , - 1290 , - 3821 , - 5248 , - 5571 , - 4790 , - 2905 , - 5804 , - 1711 , - 2402 , - 1989 , - 472 , - 3739 , - 14 , - 1073 , - 1028 , - 5767 , - 3514 , - 157 , - 1584 , - 1907 , - 1126 , - 5129 , - 2140 , - 3935 , - 4626 , - 4213 , - 2696 , - 75 , - 2238 , - 3297 , - 3252 , - 2103 , - 5738 , - 2381 , - 3808 , - 4131 , - 3350 , - 1465 , - 4364 , - 271 , - 962 , - 549 , - 4920 , - 2299 , - 4462 , - 5521 , - 5476 , - 4327 , - 2074 , - 4605 , - 144 , - 467 , - 5574 , - 3689 , - 700 , - 2495 , - 3186 , - 2773 , - 1256 , - 4523 , - 798 , - 1857 , - 1812 , - 663 , - 4298 , - 941 , - 2368 , - 2691 , - 1910 , - 25 , - 2924 , - 4719 , - 5410 , - 4997 , - 3480 , - 859 , - 3022 , - 4081 , - 4036 , - 2887 , - 634 , - 3165 , - 4592 , - 4915 , - 4134 , - 2249 , - 5148 , - 1055 , - 1746 , - 1333 , - 5704 , - 3083 , - 5246 , - 417 , - 372 , - 5111 , - 2858 , - 5389 , - 928 , - 1251 , - 470 , - 4473 , - 1484 , - 3279 , - 3970 , - 3557 , - 2040 , - 5307 , - 1582 , - 2641 , - 2596 , - 1447 , - 5082 , - 1725 , - 3152 , - 3475 , - 2694 , - 809 , - 3708 , - 5503 , - 306 , - 5781 , - 4264 , - 1643 , - 3806 , - 4865 , - 4820 , - 3671 , - 1418 , - 3949 , - 5376 , - 5699 , - 4918 , - 3033 , - 44 , - 1839 , - 2530 , - 2117 , - 600 , - 3867 , - 142 , - 1201 , - 1156 , - 7 , - 3642 , - 285 , - 1712 , - 2035 , - 1254 , - 5257 , - 2268 , - 4063 , - 4754 , - 4341 , - 2824 , - 203 , - 2366 , - 3425 , - 3380 , - 2231 , - 5866 , - 2509 , - 3936 , - 4259 , - 3478 , - 1593 , - 4492 , - 399 , - 1090 , - 677 , - 5048 , - 2427 , - 4590 , - 5649 , - 5604 , - 4455 , - 2202 , - 4733 , - 272 , - 595 , - 5702 , - 3817 , - 828 , - 2623 , - 3314 , - 2901 , - 1384 , - 4651 , - 926 , - 1985 , - 1940 , - 791 , - 4426 , - 1069 , - 2496 , - 2819 , - 2038 , - 153 , - 3052 , - 4847 , - 5538 , - 5125 , - 3608 , - 987 , - 3150 , - 4209 , - 4164 , - 3015 , - 762 , - 3293 , - 4720 , - 5043 , - 4262 , - 2377 , - 5276 , - 1183 , - 1874 , - 1461 , - 5832 , - 3211 , - 5374 , - 545 , - 500 , - 5239 , - 2986 , - 5517 , - 1056 , - 1379 , - 598 , - 4601 , - 1612 , - 3407 , - 4098 , - 3685 , - 2168 , - 5435 , - 1710 , - 2769 , - 2724 , - 1575 , - 5210 , - 1853 , - 3280 , - 3603 , - 2822 , - 937 , - 3836 , - 5631 , - 434 , - 21 , - 4392 , - 1771 , - 3934 , - 4993 , - 4948 , - 3799 , - 1546 , - 4077 , - 5504 , - 5827 , - 5046 , - 3161 , - 172 , - 1967 , - 2658 , - 2245 , - 728 , - 3995 , - 270 , - 1329 , - 1284 , - 135 , - 3770 , - 413 , - 1840 , - 2163 , - 1382 , - 5385 , - 2396 , - 4191 , - 4882 , - 4469 , - 2952 , - 331 , - 2494 , - 3553 , - 3508 , - 2359 , - 106 , - 2637 , - 4064 , - 4387 , - 3606 , - 1721 , - 4620 , - 527 , - 1218 , - 805 , - 5176 , - 2555 , - 4718 , - 5777 , - 5732 , - 4583 , - 2330 , - 4861 , - 400 , - 723 , - 5830 , - 3945 , - 956 , - 2751 , - 3442 , - 3029 , - 1512 , - 4779 , - 1054 , - 2113 , - 2068 , - 919 , - 4554 , - 1197 , - 2624 , - 2947 , - 2166 , - 281 , - 3180 , - 4975 , - 5666 , - 5253 , - 3736 , - 1115 , - 3278 , - 4337 , - 4292 , - 3143 , - 890 , - 3421 , - 4848 , - 5171 , - 4390 , - 2505 , - 5404 , - 1311 , - 2002 , - 1589 , - 72 , - 3339 , - 5502 , - 673 , - 628 , - 5367 , - 3114 , - 5645 , - 1184 , - 1507 , - 726 , - 4729 , - 1740 , - 3535 , - 4226 , - 3813 , - 2296 , - 5563 , - 1838 , - 2897 , - 2852 , - 1703 , - 5338 , - 1981 , - 3408 , - 3731 , - 2950 , - 1065 , - 3964 , - 5759 , - 562 , - 149 , - 4520 , - 1899 , - 4062 , - 5121 , - 5076 , - 3927 , - 1674 , - 4205 , - 5632 , - 67 , - 5174 , - 3289 , - 300 , - 2095 , - 2786 , - 2373 , - 856 , - 4123 , - 398 , - 1457 , - 1412 , - 263 , - 3898 , - 541 , - 1968 , - 2291 , - 1510 , - 5513 , - 2524 , - 4319 , - 5010 , - 4597 , - 3080 , - 459 , - 2622 , - 3681 , - 3636 , - 2487 , - 234 , - 2765 , - 4192 , - 4515 , - 3734 , - 1849 , - 4748 , - 655 , - 1346 , - 933 , - 5304 , - 2683 , - 4846 , - 17 , - 5860 , - 4711 , - 2458 , - 4989 , - 528 , - 851 , - 70 , - 4073 , - 1084 , - 2879 , - 3570 , - 3157 , - 1640 , - 4907 , - 1182 , - 2241 , - 2196 , - 1047 , - 4682 , - 1325 , - 2752 , - 3075 , - 2294 , - 409 , - 3308 , - 5103 , - 5794 , - 5381 , - 3864 , - 1243 , - 3406 , - 4465 , - 4420 , - 3271 , - 1018 , - 3549 , - 4976 , - 5299 , - 4518 , - 2633 , - 5532 , - 1439 , - 2130 , - 1717 , - 200 , - 3467 , - 5630 , - 801 , - 756 , - 5495 , - 3242 , - 5773 , - 1312 , - 1635 , - 854 , - 4857 , - 1868 , - 3663 , - 4354 , - 3941 , - 2424 , - 5691 , - 1966 , - 3025 , - 2980 , - 1831 , - 5466 , - 2109 , - 3536 , - 3859 , - 3078 , - 1193 , - 4092 , - 5887 , - 690 , - 277 , - 4648 , - 2027 , - 4190 , - 5249 , - 5204 , - 4055 , - 1802 , - 4333 , - 5760 , - 195 , - 5302 , - 3417 , - 428 , - 2223 , - 2914 , - 2501 , - 984 , - 4251 , - 526 , - 1585 , - 1540 , - 391 , - 4026 , - 669 , - 2096 , - 2419 , - 1638 , - 5641 , - 2652 , - 4447 , - 5138 , - 4725 , - 3208 , - 587 , - 2750 , - 3809 , - 3764 , - 2615 , - 362 , - 2893 , - 4320 , - 4643 , - 3862 , - 1977 , - 4876 , - 783 , - 1474 , - 1061 , - 5432 , - 2811 , - 4974 , - 145 , - 100 , - 4839 , - 2586 , - 5117 , - 656 , - 979 , - 198 , - 4201 , - 1212 , - 3007 , - 3698 , - 3285 , - 1768 , - 5035 , - 1310 , - 2369 , - 2324 , - 1175 , - 4810 , - 1453 , - 2880 , - 3203 , - 2422 , - 537 , - 3436 , - 5231 , - 34 , - 5509 , - 3992 , - 1371 , - 3534 , - 4593 , - 4548 , - 3399 , - 1146 , - 3677 , - 5104 , - 5427 , - 4646 , - 2761 , - 5660 , - 1567 , - 2258 , - 1845 , - 328 , - 3595 , - 5758 , - 929 , - 884 , - 5623 , - 3370 , - 13 , - 1440 , - 1763 , - 982 , - 4985 , - 1996 , - 3791 , - 4482 , - 4069 , - 2552 , - 5819 , - 2094 , - 3153 , - 3108 , - 1959 , - 5594 , - 2237 , - 3664 , - 3987 , - 3206 , - 1321 , - 4220 , - 127 , - 818 , - 405 , - 4776 , - 2155 , - 4318 , - 5377 , - 5332 , - 4183 , - 1930 , - 4461 , - 0 , - 4745 , - 3910 , - 1959 , - 3356 , - 661 , - 4290 , - 851 , - 760 , - 2529 , - 4670 , - 5695 , - 4116 , - 4397 , - 5050 , - 4587 , - 1520 , - 313 , - 5430 , - 3479 , - 4876 , - 2181 , - 5810 , - 2371 , - 2280 , - 4049 , - 238 , - 1263 , - 5636 , - 5917 , - 618 , - 155 , - 3040 , - 1833 , - 998 , - 4999 , - 444 , - 3701 , - 1378 , - 3891 , - 3800 , - 5569 , - 1758 , - 2783 , - 1204 , - 1485 , - 2138 , - 1675 , - 4560 , - 3353 , - 2518 , - 567 , - 1964 , - 5221 , - 2898 , - 5411 , - 5320 , - 1137 , - 3278 , - 4303 , - 2724 , - 3005 , - 3658 , - 3195 , - 128 , - 4873 , - 4038 , - 2087 , - 3484 , - 789 , - 4418 , - 979 , - 888 , - 2657 , - 4798 , - 5823 , - 4244 , - 4525 , - 5178 , - 4715 , - 1648 , - 441 , - 5558 , - 3607 , - 5004 , - 2309 , - 5938 , - 2499 , - 2408 , - 4177 , - 366 , - 1391 , - 5764 , - 93 , - 746 , - 283 , - 3168 , - 1961 , - 1126 , - 5127 , - 572 , - 3829 , - 1506 , - 4019 , - 3928 , - 5697 , - 1886 , - 2911 , - 1332 , - 1613 , - 2266 , - 1803 , - 4688 , - 3481 , - 2646 , - 695 , - 2092 , - 5349 , - 3026 , - 5539 , - 5448 , - 1265 , - 3406 , - 4431 , - 2852 , - 3133 , - 3786 , - 3323 , - 256 , - 5001 , - 4166 , - 2215 , - 3612 , - 917 , - 4546 , - 1107 , - 1016 , - 2785 , - 4926 , - 5951 , - 4372 , - 4653 , - 5306 , - 4843 , - 1776 , - 569 , - 5686 , - 3735 , - 5132 , - 2437 , - 114 , - 2627 , - 2536 , - 4305 , - 494 , - 1519 , - 5892 , - 221 , - 874 , - 411 , - 3296 , - 2089 , - 1254 , - 5255 , - 700 , - 3957 , - 1634 , - 4147 , - 4056 , - 5825 , - 2014 , - 3039 , - 1460 , - 1741 , - 2394 , - 1931 , - 4816 , - 3609 , - 2774 , - 823 , - 2220 , - 5477 , - 3154 , - 5667 , - 5576 , - 1393 , - 3534 , - 4559 , - 2980 , - 3261 , - 3914 , - 3451 , - 384 , - 5129 , - 4294 , - 2343 , - 3740 , - 1045 , - 4674 , - 1235 , - 1144 , - 2913 , - 5054 , - 127 , - 4500 , - 4781 , - 5434 , - 4971 , - 1904 , - 697 , - 5814 , - 3863 , - 5260 , - 2565 , - 242 , - 2755 , - 2664 , - 4433 , - 622 , - 1647 , - 68 , - 349 , - 1002 , - 539 , - 3424 , - 2217 , - 1382 , - 5383 , - 828 , - 4085 , - 1762 , - 4275 , - 4184 , - 1 , - 2142 , - 3167 , - 1588 , - 1869 , - 2522 , - 2059 , - 4944 , - 3737 , - 2902 , - 951 , - 2348 , - 5605 , - 3282 , - 5795 , - 5704 , - 1521 , - 3662 , - 4687 , - 3108 , - 3389 , - 4042 , - 3579 , - 512 , - 5257 , - 4422 , - 2471 , - 3868 , - 1173 , - 4802 , - 1363 , - 1272 , - 3041 , - 5182 , - 255 , - 4628 , - 4909 , - 5562 , - 5099 , - 2032 , - 825 , - 5942 , - 3991 , - 5388 , - 2693 , - 370 , - 2883 , - 2792 , - 4561 , - 750 , - 1775 , - 196 , - 477 , - 1130 , - 667 , - 3552 , - 2345 , - 1510 , - 5511 , - 956 , - 4213 , - 1890 , - 4403 , - 4312 , - 129 , - 2270 , - 3295 , - 1716 , - 1997 , - 2650 , - 2187 , - 5072 , - 3865 , - 3030 , - 1079 , - 2476 , - 5733 , - 3410 , - 5923 , - 5832 , - 1649 , - 3790 , - 4815 , - 3236 , - 3517 , - 4170 , - 3707 , - 640 , - 5385 , - 4550 , - 2599 , - 3996 , - 1301 , - 4930 , - 1491 , - 1400 , - 3169 , - 5310 , - 383 , - 4756 , - 5037 , - 5690 , - 5227 , - 2160 , - 953 , - 118 , - 4119 , - 5516 , - 2821 , - 498 , - 3011 , - 2920 , - 4689 , - 878 , - 1903 , - 324 , - 605 , - 1258 , - 795 , - 3680 , - 2473 , - 1638 , - 5639 , - 1084 , - 4341 , - 2018 , - 4531 , - 4440 , - 257 , - 2398 , - 3423 , - 1844 , - 2125 , - 2778 , - 2315 , - 5200 , - 3993 , - 3158 , - 1207 , - 2604 , - 5861 , - 3538 , - 99 , - 8 , - 1777 , - 3918 , - 4943 , - 3364 , - 3645 , - 4298 , - 3835 , - 768 , - 5513 , - 4678 , - 2727 , - 4124 , - 1429 , - 5058 , - 1619 , - 1528 , - 3297 , - 5438 , - 511 , - 4884 , - 5165 , - 5818 , - 5355 , - 2288 , - 1081 , - 246 , - 4247 , - 5644 , - 2949 , - 626 , - 3139 , - 3048 , - 4817 , - 1006 , - 2031 , - 452 , - 733 , - 1386 , - 923 , - 3808 , - 2601 , - 1766 , - 5767 , - 1212 , - 4469 , - 2146 , - 4659 , - 4568 , - 385 , - 2526 , - 3551 , - 1972 , - 2253 , - 2906 , - 2443 , - 5328 , - 4121 , - 3286 , - 1335 , - 2732 , - 37 , - 3666 , - 227 , - 136 , - 1905 , - 4046 , - 5071 , - 3492 , - 3773 , - 4426 , - 3963 , - 896 , - 5641 , - 4806 , - 2855 , - 4252 , - 1557 , - 5186 , - 1747 , - 1656 , - 3425 , - 5566 , - 639 , - 5012 , - 5293 , - 5946 , - 5483 , - 2416 , - 1209 , - 374 , - 4375 , - 5772 , - 3077 , - 754 , - 3267 , - 3176 , - 4945 , - 1134 , - 2159 , - 580 , - 861 , - 1514 , - 1051 , - 3936 , - 2729 , - 1894 , - 5895 , - 1340 , - 4597 , - 2274 , - 4787 , - 4696 , - 513 , - 2654 , - 3679 , - 2100 , - 2381 , - 3034 , - 2571 , - 5456 , - 4249 , - 3414 , - 1463 , - 2860 , - 165 , - 3794 , - 355 , - 264 , - 2033 , - 4174 , - 5199 , - 3620 , - 3901 , - 4554 , - 4091 , - 1024 , - 5769 , - 4934 , - 2983 , - 4380 , - 1685 , - 5314 , - 1875 , - 1784 , - 3553 , - 5694 , - 767 , - 5140 , - 5421 , - 122 , - 5611 , - 2544 , - 1337 , - 502 , - 4503 , - 5900 , - 3205 , - 882 , - 3395 , - 3304 , - 5073 , - 1262 , - 2287 , - 708 , - 989 , - 1642 , - 1179 , - 4064 , - 2857 , - 2022 , - 71 , - 1468 , - 4725 , - 2402 , - 4915 , - 4824 , - 641 , - 2782 , - 3807 , - 2228 , - 2509 , - 3162 , - 2699 , - 5584 , - 4377 , - 3542 , - 1591 , - 2988 , - 293 , - 3922 , - 483 , - 392 , - 2161 , - 4302 , - 5327 , - 3748 , - 4029 , - 4682 , - 4219 , - 1152 , - 5897 , - 5062 , - 3111 , - 4508 , - 1813 , - 5442 , - 2003 , - 1912 , - 3681 , - 5822 , - 895 , - 5268 , - 5549 , - 250 , - 5739 , - 2672 , - 1465 , - 630 , - 4631 , - 76 , - 3333 , - 1010 , - 3523 , - 3432 , - 5201 , - 1390 , - 2415 , - 836 , - 1117 , - 1770 , - 1307 , - 4192 , - 2985 , - 2150 , - 199 , - 1596 , - 4853 , - 2530 , - 5043 , - 4952 , - 769 , - 2910 , - 3935 , - 2356 , - 2637 , - 3290 , - 2827 , - 5712 , - 4505 , - 3670 , - 1719 , - 3116 , - 421 , - 4050 , - 611 , - 520 , - 2289 , - 4430 , - 5455 , - 3876 , - 4157 , - 4810 , - 4347 , - 1280 , - 73 , - 5190 , - 3239 , - 4636 , - 1941 , - 5570 , - 2131 , - 2040 , - 3809 , - 5950 , - 1023 , - 5396 , - 5677 , - 378 , - 5867 , - 2800 , - 1593 , - 758 , - 4759 , - 204 , - 3461 , - 1138 , - 3651 , - 3560 , - 5329 , - 1518 , - 2543 , - 964 , - 1245 , - 1898 , - 1435 , - 4320 , - 3113 , - 2278 , - 327 , - 1724 , - 4981 , - 2658 , - 5171 , - 5080 , - 897 , - 3038 , - 4063 , - 2484 , - 2765 , - 3418 , - 2955 , - 5840 , - 4633 , - 3798 , - 1847 , - 3244 , - 549 , - 4178 , - 739 , - 648 , - 2417 , - 4558 , - 5583 , - 4004 , - 4285 , - 4938 , - 4475 , - 1408 , - 201 , - 5318 , - 3367 , - 4764 , - 2069 , - 5698 , - 2259 , - 2168 , - 3937 , - 126 , - 1151 , - 5524 , - 5805 , - 506 , - 43 , - 2928 , - 1721 , - 886 , - 4887 , - 332 , - 3589 , - 1266 , - 3779 , - 3688 , - 5457 , - 1646 , - 2671 , - 1092 , - 1373 , - 2026 , - 1563 , - 4448 , - 3241 , - 2406 , - 455 , - 1852 , - 5109 , - 2786 , - 5299 , - 5208 , - 1025 , - 3166 , - 4191 , - 2612 , - 2893 , - 3546 , - 3083 , - 16 , - 4761 , - 3926 , - 1975 , - 3372 , - 677 , - 4306 , - 867 , - 776 , - 2545 , - 4686 , - 5711 , - 4132 , - 4413 , - 5066 , - 4603 , - 1536 , - 329 , - 5446 , - 3495 , - 4892 , - 2197 , - 5826 , - 2387 , - 2296 , - 4065 , - 254 , - 1279 , - 5652 , - 5933 , - 634 , - 171 , - 3056 , - 1849 , - 1014 , - 5015 , - 460 , - 3717 , - 1394 , - 3907 , - 3816 , - 5585 , - 1774 , - 2799 , - 1220 , - 1501 , - 2154 , - 1691 , - 4576 , - 3369 , - 2534 , - 583 , - 1980 , - 5237 , - 2914 , - 5427 , - 5336 , - 1153 , - 3294 , - 4319 , - 2740 , - 3021 , - 3674 , - 3211 , - 144 , - 4889 , - 4054 , - 2103 , - 3500 , - 805 , - 4434 , - 995 , - 904 , - 2673 , - 4814 , - 5839 , - 4260 , - 4541 , - 5194 , - 4731 , - 1664 , - 457 , - 5574 , - 3623 , - 5020 , - 2325 , - 2 , - 2515 , - 2424 , - 4193 , - 382 , - 1407 , - 5780 , - 109 , - 762 , - 299 , - 3184 , - 1977 , - 1142 , - 5143 , - 588 , - 3845 , - 1522 , - 4035 , - 3944 , - 5713 , - 1902 , - 2927 , - 1348 , - 1629 , - 2282 , - 1819 , - 4704 , - 3497 , - 2662 , - 711 , - 2108 , - 5365 , - 3042 , - 5555 , - 5464 , - 1281 , - 3422 , - 4447 , - 2868 , - 3149 , - 3802 , - 3339 , - 272 , - 5017 , - 4182 , - 2231 , - 3628 , - 933 , - 4562 , - 1123 , - 1032 , - 2801 , - 4942 , - 15 , - 4388 , - 4669 , - 5322 , - 4859 , - 1792 , - 585 , - 5702 , - 3751 , - 5148 , - 2453 , - 130 , - 2643 , - 2552 , - 4321 , - 510 , - 1535 , - 5908 , - 237 , - 890 , - 427 , - 3312 , - 2105 , - 1270 , - 5271 , - 716 , - 3973 , - 1650 , - 4163 , - 4072 , - 5841 , - 2030 , - 3055 , - 1476 , - 1757 , - 2410 , - 1947 , - 4832 , - 3625 , - 2790 , - 839 , - 2236 , - 5493 , - 3170 , - 5683 , - 5592 , - 1409 , - 3550 , - 4575 , - 2996 , - 3277 , - 3930 , - 3467 , - 400 , - 5145 , - 4310 , - 2359 , - 3756 , - 1061 , - 4690 , - 1251 , - 1160 , - 2929 , - 5070 , - 143 , - 4516 , - 4797 , - 5450 , - 4987 , - 1920 , - 713 , - 5830 , - 3879 , - 5276 , - 2581 , - 258 , - 2771 , - 2680 , - 4449 , - 638 , - 1663 , - 84 , - 365 , - 1018 , - 555 , - 3440 , - 2233 , - 1398 , - 5399 , - 844 , - 4101 , - 1778 , - 4291 , - 4200 , - 17 , - 2158 , - 3183 , - 1604 , - 1885 , - 2538 , - 2075 , - 4960 , - 3753 , - 2918 , - 967 , - 2364 , - 5621 , - 3298 , - 5811 , - 5720 , - 1537 , - 3678 , - 4703 , - 3124 , - 3405 , - 4058 , - 3595 , - 528 , - 5273 , - 4438 , - 2487 , - 3884 , - 1189 , - 4818 , - 1379 , - 1288 , - 3057 , - 5198 , - 271 , - 4644 , - 4925 , - 5578 , - 5115 , - 2048 , - 841 , - 6 , - 4007 , - 5404 , - 2709 , - 386 , - 2899 , - 2808 , - 4577 , - 766 , - 1791 , - 212 , - 493 , - 1146 , - 683 , - 3568 , - 2361 , - 1526 , - 5527 , - 972 , - 4229 , - 1906 , - 4419 , - 4328 , - 145 , - 2286 , - 3311 , - 1732 , - 2013 , - 2666 , - 2203 , - 5088 , - 3881 , - 3046 , - 1095 , - 2492 , - 5749 , - 3426 , - 5939 , - 5848 , - 1665 , - 3806 , - 4831 , - 3252 , - 3533 , - 4186 , - 3723 , - 656 , - 5401 , - 4566 , - 2615 , - 4012 , - 1317 , - 4946 , - 1507 , - 1416 , - 3185 , - 5326 , - 399 , - 4772 , - 5053 , - 5706 , - 5243 , - 2176 , - 969 , - 134 , - 4135 , - 5532 , - 2837 , - 514 , - 3027 , - 2936 , - 4705 , - 894 , - 1919 , - 340 , - 621 , - 1274 , - 811 , - 3696 , - 2489 , - 1654 , - 5655 , - 1100 , - 4357 , - 2034 , - 4547 , - 4456 , - 273 , - 2414 , - 3439 , - 1860 , - 2141 , - 2794 , - 2331 , - 5216 , - 4009 , - 3174 , - 1223 , - 2620 , - 5877 , - 3554 , - 115 , - 24 , - 1793 , - 3934 , - 4959 , - 3380 , - 3661 , - 4314 , - 3851 , - 784 , - 5529 , - 4694 , - 2743 , - 4140 , - 1445 , - 5074 , - 1635 , - 1544 , - 3313 , - 5454 , - 527 , - 4900 , - 5181 , - 5834 , - 5371 , - 2304 , - 1097 , - 262 , - 4263 , - 5660 , - 2965 , - 642 , - 3155 , - 3064 , - 4833 , - 1022 , - 2047 , - 468 , - 749 , - 1402 , - 939 , - 3824 , - 2617 , - 1782 , - 5783 , - 1228 , - 4485 , - 2162 , - 4675 , - 4584 , - 401 , - 2542 , - 3567 , - 1988 , - 2269 , - 2922 , - 2459 , - 5344 , - 4137 , - 3302 , - 1351 , - 2748 , - 53 , - 3682 , - 243 , - 152 , - 1921 , - 4062 , - 5087 , - 3508 , - 3789 , - 4442 , - 3979 , - 912 , - 5657 , - 4822 , - 2871 , - 4268 , - 1573 , - 5202 , - 1763 , - 1672 , - 3441 , - 5582 , - 655 , - 5028 , - 5309 , - 10 , - 5499 , - 2432 , - 1225 , - 390 , - 4391 , - 5788 , - 3093 , - 770 , - 3283 , - 3192 , - 4961 , - 1150 , - 2175 , - 596 , - 877 , - 1530 , - 1067 , - 3952 , - 2745 , - 1910 , - 5911 , - 1356 , - 4613 , - 2290 , - 4803 , - 4712 , - 529 , - 2670 , - 3695 , - 2116 , - 2397 , - 3050 , - 2587 , - 5472 , - 4265 , - 3430 , - 1479 , - 2876 , - 181 , - 3810 , - 371 , - 280 , - 2049 , - 4190 , - 5215 , - 3636 , - 3917 , - 4570 , - 4107 , - 1040 , - 5785 , - 4950 , - 2999 , - 4396 , - 1701 , - 5330 , - 1891 , - 1800 , - 3569 , - 5710 , - 783 , - 5156 , - 5437 , - 138 , - 5627 , - 2560 , - 1353 , - 518 , - 4519 , - 5916 , - 3221 , - 898 , - 3411 , - 3320 , - 5089 , - 1278 , - 2303 , - 724 , - 1005 , - 1658 , - 1195 , - 4080 , - 2873 , - 2038 , - 87 , - 1484 , - 4741 , - 2418 , - 4931 , - 4840 , - 657 , - 2798 , - 3823 , - 2244 , - 2525 , - 3178 , - 2715 , - 5600 , - 4393 , - 3558 , - 1607 , - 3004 , - 309 , - 3938 , - 499 , - 408 , - 2177 , - 4318 , - 5343 , - 3764 , - 4045 , - 4698 , - 4235 , - 1168 , - 5913 , - 5078 , - 3127 , - 4524 , - 1829 , - 5458 , - 2019 , - 1928 , - 3697 , - 5838 , - 911 , - 5284 , - 5565 , - 266 , - 5755 , - 2688 , - 1481 , - 646 , - 4647 , - 92 , - 3349 , - 1026 , - 3539 , - 3448 , - 5217 , - 1406 , - 2431 , - 852 , - 1133 , - 1786 , - 1323 , - 4208 , - 3001 , - 2166 , - 215 , - 1612 , - 4869 , - 2546 , - 5059 , - 4968 , - 785 , - 2926 , - 3951 , - 2372 , - 2653 , - 3306 , - 2843 , - 5728 , - 4521 , - 3686 , - 1735 , - 3132 , - 437 , - 4066 , - 627 , - 536 , - 2305 , - 4446 , - 5471 , - 3892 , - 4173 , - 4826 , - 4363 , - 1296 , - 89 , - 5206 , - 3255 , - 4652 , - 1957 , - 5586 , - 2147 , - 2056 , - 3825 , - 14 , - 1039 , - 5412 , - 5693 , - 394 , - 5883 , - 2816 , - 1609 , - 774 , - 4775 , - 220 , - 3477 , - 1154 , - 3667 , - 3576 , - 5345 , - 1534 , - 2559 , - 980 , - 1261 , - 1914 , - 1451 , - 4336 , - 3129 , - 2294 , - 343 , - 1740 , - 4997 , - 2674 , - 5187 , - 5096 , - 913 , - 3054 , - 4079 , - 2500 , - 2781 , - 3434 , - 2971 , - 5856 , - 4649 , - 3814 , - 1863 , - 3260 , - 565 , - 4194 , - 755 , - 664 , - 2433 , - 4574 , - 5599 , - 4020 , - 4301 , - 4954 , - 4491 , - 1424 , - 217 , - 5334 , - 3383 , - 4780 , - 2085 , - 5714 , - 2275 , - 2184 , - 3953 , - 142 , - 1167 , - 5540 , - 5821 , - 522 , - 59 , - 2944 , - 1737 , - 902 , - 4903 , - 348 , - 3605 , - 1282 , - 3795 , - 3704 , - 5473 , - 1662 , - 2687 , - 1108 , - 1389 , - 2042 , - 1579 , - 4464 , - 3257 , - 2422 , - 471 , - 1868 , - 5125 , - 2802 , - 5315 , - 5224 , - 1041 , - 3182 , - 4207 , - 2628 , - 2909 , - 3562 , - 3099 , - 32 , - 4777 , - 3942 , - 1991 , - 3388 , - 693 , - 4322 , - 883 , - 792 , - 2561 , - 4702 , - 5727 , - 4148 , - 4429 , - 5082 , - 4619 , - 1552 , - 345 , - 5462 , - 3511 , - 4908 , - 2213 , - 5842 , - 2403 , - 2312 , - 4081 , - 270 , - 1295 , - 5668 , - 5949 , - 650 , - 187 , - 3072 , - 1865 , - 1030 , - 5031 , - 476 , - 3733 , - 1410 , - 3923 , - 3832 , - 5601 , - 1790 , - 2815 , - 1236 , - 1517 , - 2170 , - 1707 , - 4592 , - 3385 , - 2550 , - 599 , - 1996 , - 5253 , - 2930 , - 5443 , - 5352 , - 1169 , - 3310 , - 4335 , - 2756 , - 3037 , - 3690 , - 3227 , - 160 , - 4905 , - 4070 , - 2119 , - 3516 , - 821 , - 4450 , - 1011 , - 920 , - 2689 , - 4830 , - 5855 , - 4276 , - 4557 , - 5210 , - 4747 , - 1680 , - 473 , - 5590 , - 3639 , - 5036 , - 2341 , - 18 , - 2531 , - 2440 , - 4209 , - 398 , - 1423 , - 5796 , - 125 , - 778 , - 315 , - 3200 , - 1993 , - 1158 , - 5159 , - 604 , - 3861 , - 1538 , - 4051 , - 3960 , - 5729 , - 1918 , - 2943 , - 1364 , - 1645 , - 2298 , - 1835 , - 4720 , - 3513 , - 2678 , - 727 , - 2124 , - 5381 , - 3058 , - 5571 , - 5480 , - 1297 , - 3438 , - 4463 , - 2884 , - 3165 , - 3818 , - 3355 , - 288 , - 5033 , - 4198 , - 2247 , - 3644 , - 949 , - 4578 , - 1139 , - 1048 , - 2817 , - 4958 , - 31 , - 4404 , - 4685 , - 5338 , - 4875 , - 1808 , - 601 , - 5718 , - 3767 , - 5164 , - 2469 , - 146 , - 2659 , - 2568 , - 4337 , - 526 , - 1551 , - 5924 , - 253 , - 906 , - 443 , - 3328 , - 2121 , - 1286 , - 5287 , - 732 , - 3989 , - 1666 , - 4179 , - 4088 , - 5857 , - 2046 , - 3071 , - 1492 , - 1773 , - 2426 , - 1963 , - 4848 , - 3641 , - 2806 , - 855 , - 2252 , - 5509 , - 3186 , - 5699 , - 5608 , - 1425 , - 3566 , - 4591 , - 3012 , - 3293 , - 3946 , - 3483 , - 416 , - 5161 , - 4326 , - 2375 , - 3772 , - 1077 , - 4706 , - 1267 , - 1176 , - 2945 , - 5086 , - 159 , - 4532 , - 4813 , - 5466 , - 5003 , - 1936 , - 729 , - 5846 , - 3895 , - 5292 , - 2597 , - 274 , - 2787 , - 2696 , - 4465 , - 654 , - 1679 , - 100 , - 381 , - 1034 , - 571 , - 3456 , - 2249 , - 1414 , - 5415 , - 860 , - 4117 , - 1794 , - 4307 , - 4216 , - 33 , - 2174 , - 3199 , - 1620 , - 1901 , - 2554 , - 2091 , - 4976 , - 3769 , - 2934 , - 983 , - 2380 , - 5637 , - 3314 , - 5827 , - 5736 , - 1553 , - 3694 , - 4719 , - 3140 , - 3421 , - 4074 , - 3611 , - 544 , - 5289 , - 4454 , - 2503 , - 3900 , - 1205 , - 4834 , - 1395 , - 1304 , - 3073 , - 5214 , - 287 , - 4660 , - 4941 , - 5594 , - 5131 , - 2064 , - 857 , - 22 , - 4023 , - 5420 , - 2725 , - 402 , - 2915 , - 2824 , - 4593 , - 782 , - 1807 , - 228 , - 509 , - 1162 , - 699 , - 3584 , - 2377 , - 1542 , - 5543 , - 988 , - 4245 , - 1922 , - 4435 , - 4344 , - 161 , - 2302 , - 3327 , - 1748 , - 2029 , - 2682 , - 2219 , - 5104 , - 3897 , - 3062 , - 1111 , - 2508 , - 5765 , - 3442 , - 3 , - 5864 , - 1681 , - 3822 , - 4847 , - 3268 , - 3549 , - 4202 , - 3739 , - 672 , - 5417 , - 4582 , - 2631 , - 4028 , - 1333 , - 4962 , - 1523 , - 1432 , - 3201 , - 5342 , - 415 , - 4788 , - 5069 , - 5722 , - 5259 , - 2192 , - 985 , - 150 , - 4151 , - 5548 , - 2853 , - 530 , - 3043 , - 2952 , - 4721 , - 910 , - 1935 , - 356 , - 637 , - 1290 , - 827 , - 3712 , - 2505 , - 1670 , - 5671 , - 1116 , - 4373 , - 2050 , - 4563 , - 4472 , - 289 , - 2430 , - 3455 , - 1876 , - 2157 , - 2810 , - 2347 , - 5232 , - 4025 , - 3190 , - 1239 , - 2636 , - 5893 , - 3570 , - 131 , - 40 , - 1809 , - 3950 , - 4975 , - 3396 , - 3677 , - 4330 , - 3867 , - 800 , - 5545 , - 4710 , - 2759 , - 4156 , - 1461 , - 5090 , - 1651 , - 1560 , - 3329 , - 5470 , - 543 , - 4916 , - 5197 , - 5850 , - 5387 , - 2320 , - 1113 , - 278 , - 4279 , - 5676 , - 2981 , - 658 , - 3171 , - 3080 , - 4849 , - 1038 , - 2063 , - 484 , - 765 , - 1418 , - 955 , - 3840 , - 2633 , - 1798 , - 5799 , - 1244 , - 4501 , - 2178 , - 4691 , - 4600 , - 417 , - 2558 , - 3583 , - 2004 , - 2285 , - 2938 , - 2475 , - 5360 , - 4153 , - 3318 , - 1367 , - 2764 , - 69 , - 3698 , - 259 , - 168 , - 1937 , - 4078 , - 5103 , - 3524 , - 3805 , - 4458 , - 3995 , - 928 , - 5673 , - 4838 , - 2887 , - 4284 , - 1589 , - 5218 , - 1779 , - 1688 , - 3457 , - 5598 , - 671 , - 5044 , - 5325 , - 26 , - 5515 , - 2448 , - 1241 , - 406 , - 4407 , - 5804 , - 3109 , - 786 , - 3299 , - 3208 , - 4977 , - 1166 , - 2191 , - 612 , - 893 , - 1546 , - 1083 , - 3968 , - 2761 , - 1926 , - 5927 , - 1372 , - 4629 , - 2306 , - 4819 , - 4728 , - 545 , - 2686 , - 3711 , - 2132 , - 2413 , - 3066 , - 2603 , - 5488 , - 4281 , - 3446 , - 1495 , - 2892 , - 197 , - 3826 , - 387 , - 296 , - 2065 , - 4206 , - 5231 , - 3652 , - 3933 , - 4586 , - 4123 , - 1056 , - 5801 , - 4966 , - 3015 , - 4412 , - 1717 , - 5346 , - 1907 , - 1816 , - 3585 , - 5726 , - 799 , - 5172 , - 5453 , - 154 , - 5643 , - 2576 , - 1369 , - 534 , - 4535 , - 5932 , - 3237 , - 914 , - 3427 , - 3336 , - 5105 , - 1294 , - 2319 , - 740 , - 1021 , - 1674 , - 1211 , - 4096 , - 2889 , - 2054 , - 103 , - 1500 , - 4757 , - 2434 , - 4947 , - 4856 , - 673 , - 2814 , - 3839 , - 2260 , - 2541 , - 3194 , - 2731 , - 5616 , - 4409 , - 3574 , - 1623 , - 3020 , - 325 , - 3954 , - 515 , - 424 , - 2193 , - 4334 , - 5359 , - 3780 , - 4061 , - 4714 , - 4251 , - 1184 , - 5929 , - 5094 , - 3143 , - 4540 , - 1845 , - 5474 , - 2035 , - 1944 , - 3713 , - 5854 , - 927 , - 5300 , - 5581 , - 282 , - 5771 , - 2704 , - 1497 , - 662 , - 4663 , - 108 , - 3365 , - 1042 , - 3555 , - 3464 , - 5233 , - 1422 , - 2447 , - 868 , - 1149 , - 1802 , - 1339 , - 4224 , - 3017 , - 2182 , - 231 , - 1628 , - 4885 , - 2562 , - 5075 , - 4984 , - 801 , - 2942 , - 3967 , - 2388 , - 2669 , - 3322 , - 2859 , - 5744 , - 4537 , - 3702 , - 1751 , - 3148 , - 453 , - 4082 , - 643 , - 552 , - 2321 , - 4462 , - 5487 , - 3908 , - 4189 , - 4842 , - 4379 , - 1312 , - 105 , - 5222 , - 3271 , - 4668 , - 1973 , - 5602 , - 2163 , - 2072 , - 3841 , - 30 , - 1055 , - 5428 , - 5709 , - 410 , - 5899 , - 2832 , - 1625 , - 790 , - 4791 , - 236 , - 3493 , - 1170 , - 3683 , - 3592 , - 5361 , - 1550 , - 2575 , - 996 , - 1277 , - 1930 , - 1467 , - 4352 , - 3145 , - 2310 , - 359 , - 1756 , - 5013 , - 2690 , - 5203 , - 5112 , - 929 , - 3070 , - 4095 , - 2516 , - 2797 , - 3450 , - 2987 , - 5872 , - 4665 , - 3830 , - 1879 , - 3276 , - 581 , - 4210 , - 771 , - 680 , - 2449 , - 4590 , - 5615 , - 4036 , - 4317 , - 4970 , - 4507 , - 1440 , - 233 , - 5350 , - 3399 , - 4796 , - 2101 , - 5730 , - 2291 , - 2200 , - 3969 , - 158 , - 1183 , - 5556 , - 5837 , - 538 , - 75 , - 2960 , - 1753 , - 918 , - 4919 , - 364 , - 3621 , - 1298 , - 3811 , - 3720 , - 5489 , - 1678 , - 2703 , - 1124 , - 1405 , - 2058 , - 1595 , - 4480 , - 3273 , - 2438 , - 487 , - 1884 , - 5141 , - 2818 , - 5331 , - 5240 , - 1057 , - 3198 , - 4223 , - 2644 , - 2925 , - 3578 , - 3115 , - 48 , - 4793 , - 3958 , - 2007 , - 3404 , - 709 , - 4338 , - 899 , - 808 , - 2577 , - 4718 , - 5743 , - 4164 , - 4445 , - 5098 , - 4635 , - 1568 , - 361 , - 5478 , - 3527 , - 4924 , - 2229 , - 5858 , - 2419 , - 2328 , - 4097 , - 286 , - 1311 , - 5684 , - 13 , - 666 , - 203 , - 3088 , - 1881 , - 1046 , - 5047 , - 492 , - 3749 , - 1426 , - 3939 , - 3848 , - 5617 , - 1806 , - 2831 , - 1252 , - 1533 , - 2186 , - 1723 , - 4608 , - 3401 , - 2566 , - 615 , - 2012 , - 5269 , - 2946 , - 5459 , - 5368 , - 1185 , - 3326 , - 4351 , - 2772 , - 3053 , - 3706 , - 3243 , - 176 , - 4921 , - 4086 , - 2135 , - 3532 , - 837 , - 4466 , - 1027 , - 936 , - 2705 , - 4846 , - 5871 , - 4292 , - 4573 , - 5226 , - 4763 , - 1696 , - 489 , - 5606 , - 3655 , - 5052 , - 2357 , - 34 , - 2547 , - 2456 , - 4225 , - 414 , - 1439 , - 5812 , - 141 , - 794 , - 331 , - 3216 , - 2009 , - 1174 , - 5175 , - 620 , - 3877 , - 1554 , - 4067 , - 3976 , - 5745 , - 1934 , - 2959 , - 1380 , - 1661 , - 2314 , - 1851 , - 4736 , - 3529 , - 2694 , - 743 , - 2140 , - 5397 , - 3074 , - 5587 , - 5496 , - 1313 , - 3454 , - 4479 , - 2900 , - 3181 , - 3834 , - 3371 , - 304 , - 5049 , - 4214 , - 2263 , - 3660 , - 965 , - 4594 , - 1155 , - 1064 , - 2833 , - 4974 , - 47 , - 4420 , - 4701 , - 5354 , - 4891 , - 1824 , - 617 , - 5734 , - 3783 , - 5180 , - 2485 , - 162 , - 2675 , - 2584 , - 4353 , - 542 , - 1567 , - 5940 , - 269 , - 922 , - 459 , - 3344 , - 2137 , - 1302 , - 5303 , - 748 , - 4005 , - 1682 , - 4195 , - 4104 , - 5873 , - 2062 , - 3087 , - 1508 , - 1789 , - 2442 , - 1979 , - 4864 , - 3657 , - 2822 , - 871 , - 2268 , - 5525 , - 3202 , - 5715 , - 5624 , - 1441 , - 3582 , - 4607 , - 3028 , - 3309 , - 3962 , - 3499 , - 432 , - 5177 , - 4342 , - 2391 , - 3788 , - 1093 , - 4722 , - 1283 , - 1192 , - 2961 , - 5102 , - 175 , - 4548 , - 4829 , - 5482 , - 5019 , - 1952 , - 745 , - 5862 , - 3911 , - 5308 , - 2613 , - 290 , - 2803 , - 2712 , - 4481 , - 670 , - 1695 , - 116 , - 397 , - 1050 , - 587 , - 3472 , - 2265 , - 1430 , - 5431 , - 876 , - 4133 , - 1810 , - 4323 , - 4232 , - 49 , - 2190 , - 3215 , - 1636 , - 1917 , - 2570 , - 2107 , - 4992 , - 3785 , - 2950 , - 999 , - 2396 , - 5653 , - 3330 , - 5843 , - 5752 , - 1569 , - 3710 , - 4735 , - 3156 , - 3437 , - 4090 , - 3627 , - 560 , - 5305 , - 4470 , - 2519 , - 3916 , - 1221 , - 4850 , - 1411 , - 1320 , - 3089 , - 5230 , - 303 , - 4676 , - 4957 , - 5610 , - 5147 , - 2080 , - 873 , - 38 , - 4039 , - 5436 , - 2741 , - 418 , - 2931 , - 2840 , - 4609 , - 798 , - 1823 , - 244 , - 525 , - 1178 , - 715 , - 3600 , - 2393 , - 1558 , - 5559 , - 1004 , - 4261 , - 1938 , - 4451 , - 4360 , - 177 , - 2318 , - 3343 , - 1764 , - 2045 , - 2698 , - 2235 , - 5120 , - 3913 , - 3078 , - 1127 , - 2524 , - 5781 , - 3458 , - 19 , - 5880 , - 1697 , - 3838 , - 4863 , - 3284 , - 3565 , - 4218 , - 3755 , - 688 , - 5433 , - 4598 , - 2647 , - 4044 , - 1349 , - 4978 , - 1539 , - 1448 , - 3217 , - 5358 , - 431 , - 4804 , - 5085 , - 5738 , - 5275 , - 2208 , - 1001 , - 166 , - 4167 , - 5564 , - 2869 , - 546 , - 3059 , - 2968 , - 4737 , - 926 , - 1951 , - 372 , - 653 , - 1306 , - 843 , - 3728 , - 2521 , - 1686 , - 5687 , - 1132 , - 4389 , - 2066 , - 4579 , - 4488 , - 305 , - 2446 , - 3471 , - 1892 , - 2173 , - 2826 , - 2363 , - 5248 , - 4041 , - 3206 , - 1255 , - 2652 , - 5909 , - 3586 , - 147 , - 56 , - 1825 , - 3966 , - 4991 , - 3412 , - 3693 , - 4346 , - 3883 , - 816 , - 5561 , - 4726 , - 2775 , - 4172 , - 1477 , - 5106 , - 1667 , - 1576 , - 3345 , - 5486 , - 559 , - 4932 , - 5213 , - 5866 , - 5403 , - 2336 , - 1129 , - 294 , - 4295 , - 5692 , - 2997 , - 674 , - 3187 , - 3096 , - 4865 , - 1054 , - 2079 , - 500 , - 781 , - 1434 , - 971 , - 3856 , - 2649 , - 1814 , - 5815 , - 1260 , - 4517 , - 2194 , - 4707 , - 4616 , - 433 , - 2574 , - 3599 , - 2020 , - 2301 , - 2954 , - 2491 , - 5376 , - 4169 , - 3334 , - 1383 , - 2780 , - 85 , - 3714 , - 275 , - 184 , - 1953 , - 4094 , - 5119 , - 3540 , - 3821 , - 4474 , - 4011 , - 944 , - 5689 , - 4854 , - 2903 , - 4300 , - 1605 , - 5234 , - 1795 , - 1704 , - 3473 , - 5614 , - 687 , - 5060 , - 5341 , - 42 , - 5531 , - 2464 , - 1257 , - 422 , - 4423 , - 5820 , - 3125 , - 802 , - 3315 , - 3224 , - 4993 , - 1182 , - 2207 , - 628 , - 909 , - 1562 , - 1099 , - 3984 , - 2777 , - 1942 , - 5943 , - 1388 , - 4645 , - 2322 , - 4835 , - 4744 , - 561 , - 2702 , - 3727 , - 2148 , - 2429 , - 3082 , - 2619 , - 5504 , - 4297 , - 3462 , - 1511 , - 2908 , - 213 , - 3842 , - 403 , - 312 , - 2081 , - 4222 , - 5247 , - 3668 , - 3949 , - 4602 , - 4139 , - 1072 , - 5817 , - 4982 , - 3031 , - 4428 , - 1733 , - 5362 , - 1923 , - 1832 , - 3601 , - 5742 , - 815 , - 5188 , - 5469 , - 170 , - 5659 , - 2592 , - 1385 , - 550 , - 4551 , - 5948 , - 3253 , - 930 , - 3443 , - 3352 , - 5121 , - 1310 , - 2335 , - 756 , - 1037 , - 1690 , - 1227 , - 4112 , - 2905 , - 2070 , - 119 , - 1516 , - 4773 , - 2450 , - 4963 , - 4872 , - 689 , - 2830 , - 3855 , - 2276 , - 2557 , - 3210 , - 2747 , - 5632 , - 4425 , - 3590 , - 1639 , - 3036 , - 341 , - 3970 , - 531 , - 440 , - 2209 , - 4350 , - 5375 , - 3796 , - 4077 , - 4730 , - 4267 , - 1200 , - 5945 , - 5110 , - 3159 , - 4556 , - 1861 , - 5490 , - 2051 , - 1960 , - 3729 , - 5870 , - 943 , - 5316 , - 5597 , - 298 , - 5787 , - 2720 , - 1513 , - 678 , - 4679 , - 124 , - 3381 , - 1058 , - 3571 , - 3480 , - 5249 , - 1438 , - 2463 , - 884 , - 1165 , - 1818 , - 1355 , - 4240 , - 3033 , - 2198 , - 247 , - 1644 , - 4901 , - 2578 , - 5091 , - 5000 , - 817 , - 2958 , - 3983 , - 2404 , - 2685 , - 3338 , - 2875 , - 5760 , - 4553 , - 3718 , - 1767 , - 3164 , - 469 , - 4098 , - 659 , - 568 , - 2337 , - 4478 , - 5503 , - 3924 , - 4205 , - 4858 , - 4395 , - 1328 , - 121 , - 5238 , - 3287 , - 4684 , - 1989 , - 5618 , - 2179 , - 2088 , - 3857 , - 46 , - 1071 , - 5444 , - 5725 , - 426 , - 5915 , - 2848 , - 1641 , - 806 , - 4807 , - 252 , - 3509 , - 1186 , - 3699 , - 3608 , - 5377 , - 1566 , - 2591 , - 1012 , - 1293 , - 1946 , - 1483 , - 4368 , - 3161 , - 2326 , - 375 , - 1772 , - 5029 , - 2706 , - 5219 , - 5128 , - 945 , - 3086 , - 4111 , - 2532 , - 2813 , - 3466 , - 3003 , - 5888 , - 4681 , - 3846 , - 1895 , - 3292 , - 597 , - 4226 , - 787 , - 696 , - 2465 , - 4606 , - 5631 , - 4052 , - 4333 , - 4986 , - 4523 , - 1456 , - 249 , - 5366 , - 3415 , - 4812 , - 2117 , - 5746 , - 2307 , - 2216 , - 3985 , - 174 , - 1199 , - 5572 , - 5853 , - 554 , - 91 , - 2976 , - 1769 , - 934 , - 4935 , - 380 , - 3637 , - 1314 , - 3827 , - 3736 , - 5505 , - 1694 , - 2719 , - 1140 , - 1421 , - 2074 , - 1611 , - 4496 , - 3289 , - 2454 , - 503 , - 1900 , - 5157 , - 2834 , - 5347 , - 5256 , - 1073 , - 3214 , - 4239 , - 2660 , - 2941 , - 3594 , - 3131 , - 64 , - 4809 , - 3974 , - 2023 , - 3420 , - 725 , - 4354 , - 915 , - 824 , - 2593 , - 4734 , - 5759 , - 4180 , - 4461 , - 5114 , - 4651 , - 1584 , - 377 , - 5494 , - 3543 , - 4940 , - 2245 , - 5874 , - 2435 , - 2344 , - 4113 , - 302 , - 1327 , - 5700 , - 29 , - 682 , - 219 , - 3104 , - 1897 , - 1062 , - 5063 , - 508 , - 3765 , - 1442 , - 3955 , - 3864 , - 5633 , - 1822 , - 2847 , - 1268 , - 1549 , - 2202 , - 1739 , - 4624 , - 3417 , - 2582 , - 631 , - 2028 , - 5285 , - 2962 , - 5475 , - 5384 , - 1201 , - 3342 , - 4367 , - 2788 , - 3069 , - 3722 , - 3259 , - 192 , - 4937 , - 4102 , - 2151 , - 3548 , - 853 , - 4482 , - 1043 , - 952 , - 2721 , - 4862 , - 5887 , - 4308 , - 4589 , - 5242 , - 4779 , - 1712 , - 505 , - 5622 , - 3671 , - 5068 , - 2373 , - 50 , - 2563 , - 2472 , - 4241 , - 430 , - 1455 , - 5828 , - 157 , - 810 , - 347 , - 3232 , - 2025 , - 1190 , - 5191 , - 636 , - 3893 , - 1570 , - 4083 , - 3992 , - 5761 , - 1950 , - 2975 , - 1396 , - 1677 , - 2330 , - 1867 , - 4752 , - 3545 , - 2710 , - 759 , - 2156 , - 5413 , - 3090 , - 5603 , - 5512 , - 1329 , - 3470 , - 4495 , - 2916 , - 3197 , - 3850 , - 3387 , - 320 , - 5065 , - 4230 , - 2279 , - 3676 , - 981 , - 4610 , - 1171 , - 1080 , - 2849 , - 4990 , - 63 , - 4436 , - 4717 , - 5370 , - 4907 , - 1840 , - 633 , - 5750 , - 3799 , - 5196 , - 2501 , - 178 , - 2691 , - 2600 , - 4369 , - 558 , - 1583 , - 4 , - 285 , - 938 , - 475 , - 3360 , - 2153 , - 1318 , - 5319 , - 764 , - 4021 , - 1698 , - 4211 , - 4120 , - 5889 , - 2078 , - 3103 , - 1524 , - 1805 , - 2458 , - 1995 , - 4880 , - 3673 , - 2838 , - 887 , - 2284 , - 5541 , - 3218 , - 5731 , - 5640 , - 1457 , - 3598 , - 4623 , - 3044 , - 3325 , - 3978 , - 3515 , - 448 , - 5193 , - 4358 , - 2407 , - 3804 , - 1109 , - 4738 , - 1299 , - 1208 , - 2977 , - 5118 , - 191 , - 4564 , - 4845 , - 5498 , - 5035 , - 1968 , - 761 , - 5878 , - 3927 , - 5324 , - 2629 , - 306 , - 2819 , - 2728 , - 4497 , - 686 , - 1711 , - 132 , - 413 , - 1066 , - 603 , - 3488 , - 2281 , - 1446 , - 5447 , - 892 , - 4149 , - 1826 , - 4339 , - 4248 , - 65 , - 2206 , - 3231 , - 1652 , - 1933 , - 2586 , - 2123 , - 5008 , - 3801 , - 2966 , - 1015 , - 2412 , - 5669 , - 3346 , - 5859 , - 5768 , - 1585 , - 3726 , - 4751 , - 3172 , - 3453 , - 4106 , - 3643 , - 576 , - 5321 , - 4486 , - 2535 , - 3932 , - 1237 , - 4866 , - 1427 , - 1336 , - 3105 , - 5246 , - 319 , - 4692 , - 4973 , - 5626 , - 5163 , - 2096 , - 889 , - 54 , - 4055 , - 5452 , - 2757 , - 434 , - 2947 , - 2856 , - 4625 , - 814 , - 1839 , - 260 , - 541 , - 1194 , - 731 , - 3616 , - 2409 , - 1574 , - 5575 , - 1020 , - 4277 , - 1954 , - 4467 , - 4376 , - 193 , - 2334 , - 3359 , - 1780 , - 2061 , - 2714 , - 2251 , - 5136 , - 3929 , - 3094 , - 1143 , - 2540 , - 5797 , - 3474 , - 35 , - 5896 , - 1713 , - 3854 , - 4879 , - 3300 , - 3581 , - 4234 , - 3771 , - 704 , - 5449 , - 4614 , - 2663 , - 4060 , - 1365 , - 4994 , - 1555 , - 1464 , - 3233 , - 5374 , - 447 , - 4820 , - 5101 , - 5754 , - 5291 , - 2224 , - 1017 , - 182 , - 4183 , - 5580 , - 2885 , - 562 , - 3075 , - 2984 , - 4753 , - 942 , - 1967 , - 388 , - 669 , - 1322 , - 859 , - 3744 , - 2537 , - 1702 , - 5703 , - 1148 , - 4405 , - 2082 , - 4595 , - 4504 , - 321 , - 2462 , - 3487 , - 1908 , - 2189 , - 2842 , - 2379 , - 5264 , - 4057 , - 3222 , - 1271 , - 2668 , - 5925 , - 3602 , - 163 , - 72 , - 1841 , - 3982 , - 5007 , - 3428 , - 3709 , - 4362 , - 3899 , - 832 , - 5577 , - 4742 , - 2791 , - 4188 , - 1493 , - 5122 , - 1683 , - 1592 , - 3361 , - 5502 , - 575 , - 4948 , - 5229 , - 5882 , - 5419 , - 2352 , - 1145 , - 310 , - 4311 , - 5708 , - 3013 , - 690 , - 3203 , - 3112 , - 4881 , - 1070 , - 2095 , - 516 , - 797 , - 1450 , - 987 , - 3872 , - 2665 , - 1830 , - 5831 , - 1276 , - 4533 , - 2210 , - 4723 , - 4632 , - 449 , - 2590 , - 3615 , - 2036 , - 2317 , - 2970 , - 2507 , - 5392 , - 4185 , - 3350 , - 1399 , - 2796 , - 101 , - 3730 , - 291 , - 200 , - 1969 , - 4110 , - 5135 , - 3556 , - 3837 , - 4490 , - 4027 , - 960 , - 5705 , - 4870 , - 2919 , - 4316 , - 1621 , - 5250 , - 1811 , - 1720 , - 3489 , - 5630 , - 703 , - 5076 , - 5357 , - 58 , - 5547 , - 2480 , - 1273 , - 438 , - 4439 , - 5836 , - 3141 , - 818 , - 3331 , - 3240 , - 5009 , - 1198 , - 2223 , - 644 , - 925 , - 1578 , - 1115 , - 4000 , - 2793 , - 1958 , - 7 , - 1404 , - 4661 , - 2338 , - 4851 , - 4760 , - 577 , - 2718 , - 3743 , - 2164 , - 2445 , - 3098 , - 2635 , - 5520 , - 4313 , - 3478 , - 1527 , - 2924 , - 229 , - 3858 , - 419 , - 328 , - 2097 , - 4238 , - 5263 , - 3684 , - 3965 , - 4618 , - 4155 , - 1088 , - 5833 , - 4998 , - 3047 , - 4444 , - 1749 , - 5378 , - 1939 , - 1848 , - 3617 , - 5758 , - 831 , - 5204 , - 5485 , - 186 , - 5675 , - 2608 , - 1401 , - 566 , - 4567 , - 12 , - 3269 , - 946 , - 3459 , - 3368 , - 5137 , - 1326 , - 2351 , - 772 , - 1053 , - 1706 , - 1243 , - 4128 , - 2921 , - 2086 , - 135 , - 1532 , - 4789 , - 2466 , - 4979 , - 4888 , - 705 , - 2846 , - 3871 , - 2292 , - 2573 , - 3226 , - 2763 , - 5648 , - 4441 , - 3606 , - 1655 , - 3052 , - 357 , - 3986 , - 547 , - 456 , - 2225 , - 4366 , - 5391 , - 3812 , - 4093 , - 4746 , - 4283 , - 1216 , - 9 , - 5126 , - 3175 , - 4572 , - 1877 , - 5506 , - 2067 , - 1976 , - 3745 , - 5886 , - 959 , - 5332 , - 5613 , - 314 , - 5803 , - 2736 , - 1529 , - 694 , - 4695 , - 140 , - 3397 , - 1074 , - 3587 , - 3496 , - 5265 , - 1454 , - 2479 , - 900 , - 1181 , - 1834 , - 1371 , - 4256 , - 3049 , - 2214 , - 263 , - 1660 , - 4917 , - 2594 , - 5107 , - 5016 , - 833 , - 2974 , - 3999 , - 2420 , - 2701 , - 3354 , - 2891 , - 5776 , - 4569 , - 3734 , - 1783 , - 3180 , - 485 , - 4114 , - 675 , - 584 , - 2353 , - 4494 , - 5519 , - 3940 , - 4221 , - 4874 , - 4411 , - 1344 , - 137 , - 5254 , - 3303 , - 4700 , - 2005 , - 5634 , - 2195 , - 2104 , - 3873 , - 62 , - 1087 , - 5460 , - 5741 , - 442 , - 5931 , - 2864 , - 1657 , - 822 , - 4823 , - 268 , - 3525 , - 1202 , - 3715 , - 3624 , - 5393 , - 1582 , - 2607 , - 1028 , - 1309 , - 1962 , - 1499 , - 4384 , - 3177 , - 2342 , - 391 , - 1788 , - 5045 , - 2722 , - 5235 , - 5144 , - 961 , - 3102 , - 4127 , - 2548 , - 2829 , - 3482 , - 3019 , - 5904 , - 4697 , - 3862 , - 1911 , - 3308 , - 613 , - 4242 , - 803 , - 712 , - 2481 , - 4622 , - 5647 , - 4068 , - 4349 , - 5002 , - 4539 , - 1472 , - 265 , - 5382 , - 3431 , - 4828 , - 2133 , - 5762 , - 2323 , - 2232 , - 4001 , - 190 , - 1215 , - 5588 , - 5869 , - 570 , - 107 , - 2992 , - 1785 , - 950 , - 4951 , - 396 , - 3653 , - 1330 , - 3843 , - 3752 , - 5521 , - 1710 , - 2735 , - 1156 , - 1437 , - 2090 , - 1627 , - 4512 , - 3305 , - 2470 , - 519 , - 1916 , - 5173 , - 2850 , - 5363 , - 5272 , - 1089 , - 3230 , - 4255 , - 2676 , - 2957 , - 3610 , - 3147 , - 80 , - 4825 , - 3990 , - 2039 , - 3436 , - 741 , - 4370 , - 931 , - 840 , - 2609 , - 4750 , - 5775 , - 4196 , - 4477 , - 5130 , - 4667 , - 1600 , - 393 , - 5510 , - 3559 , - 4956 , - 2261 , - 5890 , - 2451 , - 2360 , - 4129 , - 318 , - 1343 , - 5716 , - 45 , - 698 , - 235 , - 3120 , - 1913 , - 1078 , - 5079 , - 524 , - 3781 , - 1458 , - 3971 , - 3880 , - 5649 , - 1838 , - 2863 , - 1284 , - 1565 , - 2218 , - 1755 , - 4640 , - 3433 , - 2598 , - 647 , - 2044 , - 5301 , - 2978 , - 5491 , - 5400 , - 1217 , - 3358 , - 4383 , - 2804 , - 3085 , - 3738 , - 3275 , - 208 , - 4953 , - 4118 , - 2167 , - 3564 , - 869 , - 4498 , - 1059 , - 968 , - 2737 , - 4878 , - 5903 , - 4324 , - 4605 , - 5258 , - 4795 , - 1728 , - 521 , - 5638 , - 3687 , - 5084 , - 2389 , - 66 , - 2579 , - 2488 , - 4257 , - 446 , - 1471 , - 5844 , - 173 , - 826 , - 363 , - 3248 , - 2041 , - 1206 , - 5207 , - 652 , - 3909 , - 1586 , - 4099 , - 4008 , - 5777 , - 1966 , - 2991 , - 1412 , - 1693 , - 2346 , - 1883 , - 4768 , - 3561 , - 2726 , - 775 , - 2172 , - 5429 , - 3106 , - 5619 , - 5528 , - 1345 , - 3486 , - 4511 , - 2932 , - 3213 , - 3866 , - 3403 , - 336 , - 5081 , - 4246 , - 2295 , - 3692 , - 997 , - 4626 , - 1187 , - 1096 , - 2865 , - 5006 , - 79 , - 4452 , - 4733 , - 5386 , - 4923 , - 1856 , - 649 , - 5766 , - 3815 , - 5212 , - 2517 , - 194 , - 2707 , - 2616 , - 4385 , - 574 , - 1599 , - 20 , - 301 , - 954 , - 491 , - 3376 , - 2169 , - 1334 , - 5335 , - 780 , - 4037 , - 1714 , - 4227 , - 4136 , - 5905 , - 2094 , - 3119 , - 1540 , - 1821 , - 2474 , - 2011 , - 4896 , - 3689 , - 2854 , - 903 , - 2300 , - 5557 , - 3234 , - 5747 , - 5656 , - 1473 , - 3614 , - 4639 , - 3060 , - 3341 , - 3994 , - 3531 , - 464 , - 5209 , - 4374 , - 2423 , - 3820 , - 1125 , - 4754 , - 1315 , - 1224 , - 2993 , - 5134 , - 207 , - 4580 , - 4861 , - 5514 , - 5051 , - 1984 , - 777 , - 5894 , - 3943 , - 5340 , - 2645 , - 322 , - 2835 , - 2744 , - 4513 , - 702 , - 1727 , - 148 , - 429 , - 1082 , - 619 , - 3504 , - 2297 , - 1462 , - 5463 , - 908 , - 4165 , - 1842 , - 4355 , - 4264 , - 81 , - 2222 , - 3247 , - 1668 , - 1949 , - 2602 , - 2139 , - 5024 , - 3817 , - 2982 , - 1031 , - 2428 , - 5685 , - 3362 , - 5875 , - 5784 , - 1601 , - 3742 , - 4767 , - 3188 , - 3469 , - 4122 , - 3659 , - 592 , - 5337 , - 4502 , - 2551 , - 3948 , - 1253 , - 4882 , - 1443 , - 1352 , - 3121 , - 5262 , - 335 , - 4708 , - 4989 , - 5642 , - 5179 , - 2112 , - 905 , - 70 , - 4071 , - 5468 , - 2773 , - 450 , - 2963 , - 2872 , - 4641 , - 830 , - 1855 , - 276 , - 557 , - 1210 , - 747 , - 3632 , - 2425 , - 1590 , - 5591 , - 1036 , - 4293 , - 1970 , - 4483 , - 4392 , - 209 , - 2350 , - 3375 , - 1796 , - 2077 , - 2730 , - 2267 , - 5152 , - 3945 , - 3110 , - 1159 , - 2556 , - 5813 , - 3490 , - 51 , - 5912 , - 1729 , - 3870 , - 4895 , - 3316 , - 3597 , - 4250 , - 3787 , - 720 , - 5465 , - 4630 , - 2679 , - 4076 , - 1381 , - 5010 , - 1571 , - 1480 , - 3249 , - 5390 , - 463 , - 4836 , - 5117 , - 5770 , - 5307 , - 2240 , - 1033 , - 198 , - 4199 , - 5596 , - 2901 , - 578 , - 3091 , - 3000 , - 4769 , - 958 , - 1983 , - 404 , - 685 , - 1338 , - 875 , - 3760 , - 2553 , - 1718 , - 5719 , - 1164 , - 4421 , - 2098 , - 4611 , - 4520 , - 337 , - 2478 , - 3503 , - 1924 , - 2205 , - 2858 , - 2395 , - 5280 , - 4073 , - 3238 , - 1287 , - 2684 , - 5941 , - 3618 , - 179 , - 88 , - 1857 , - 3998 , - 5023 , - 3444 , - 3725 , - 4378 , - 3915 , - 848 , - 5593 , - 4758 , - 2807 , - 4204 , - 1509 , - 5138 , - 1699 , - 1608 , - 3377 , - 5518 , - 591 , - 4964 , - 5245 , - 5898 , - 5435 , - 2368 , - 1161 , - 326 , - 4327 , - 5724 , - 3029 , - 706 , - 3219 , - 3128 , - 4897 , - 1086 , - 2111 , - 532 , - 813 , - 1466 , - 1003 , - 3888 , - 2681 , - 1846 , - 5847 , - 1292 , - 4549 , - 2226 , - 4739 , - 4648 , - 465 , - 2606 , - 3631 , - 2052 , - 2333 , - 2986 , - 2523 , - 5408 , - 4201 , - 3366 , - 1415 , - 2812 , - 117 , - 3746 , - 307 , - 216 , - 1985 , - 4126 , - 5151 , - 3572 , - 3853 , - 4506 , - 4043 , - 976 , - 5721 , - 4886 , - 2935 , - 4332 , - 1637 , - 5266 , - 1827 , - 1736 , - 3505 , - 5646 , - 719 , - 5092 , - 5373 , - 74 , - 5563 , - 2496 , - 1289 , - 454 , - 4455 , - 5852 , - 3157 , - 834 , - 3347 , - 3256 , - 5025 , - 1214 , - 2239 , - 660 , - 941 , - 1594 , - 1131 , - 4016 , - 2809 , - 1974 , - 23 , - 1420 , - 4677 , - 2354 , - 4867 , - 4776 , - 593 , - 2734 , - 3759 , - 2180 , - 2461 , - 3114 , - 2651 , - 5536 , - 4329 , - 3494 , - 1543 , - 2940 , - 245 , - 3874 , - 435 , - 344 , - 2113 , - 4254 , - 5279 , - 3700 , - 3981 , - 4634 , - 4171 , - 1104 , - 5849 , - 5014 , - 3063 , - 4460 , - 1765 , - 5394 , - 1955 , - 1864 , - 3633 , - 5774 , - 847 , - 5220 , - 5501 , - 202 , - 5691 , - 2624 , - 1417 , - 582 , - 4583 , - 28 , - 3285 , - 962 , - 3475 , - 3384 , - 5153 , - 1342 , - 2367 , - 788 , - 1069 , - 1722 , - 1259 , - 4144 , - 2937 , - 2102 , - 151 , - 1548 , - 4805 , - 2482 , - 4995 , - 4904 , - 721 , - 2862 , - 3887 , - 2308 , - 2589 , - 3242 , - 2779 , - 5664 , - 4457 , - 3622 , - 1671 , - 3068 , - 373 , - 4002 , - 563 , - 472 , - 2241 , - 4382 , - 5407 , - 3828 , - 4109 , - 4762 , - 4299 , - 1232 , - 25 , - 5142 , - 3191 , - 4588 , - 1893 , - 5522 , - 2083 , - 1992 , - 3761 , - 5902 , - 975 , - 5348 , - 5629 , - 330 , - 5819 , - 2752 , - 1545 , - 710 , - 4711 , - 156 , - 3413 , - 1090 , - 3603 , - 3512 , - 5281 , - 1470 , - 2495 , - 916 , - 1197 , - 1850 , - 1387 , - 4272 , - 3065 , - 2230 , - 279 , - 1676 , - 4933 , - 2610 , - 5123 , - 5032 , - 849 , - 2990 , - 4015 , - 2436 , - 2717 , - 3370 , - 2907 , - 5792 , - 4585 , - 3750 , - 1799 , - 3196 , - 501 , - 4130 , - 691 , - 600 , - 2369 , - 4510 , - 5535 , - 3956 , - 4237 , - 4890 , - 4427 , - 1360 , - 153 , - 5270 , - 3319 , - 4716 , - 2021 , - 5650 , - 2211 , - 2120 , - 3889 , - 78 , - 1103 , - 5476 , - 5757 , - 458 , - 5947 , - 2880 , - 1673 , - 838 , - 4839 , - 284 , - 3541 , - 1218 , - 3731 , - 3640 , - 5409 , - 1598 , - 2623 , - 1044 , - 1325 , - 1978 , - 1515 , - 4400 , - 3193 , - 2358 , - 407 , - 1804 , - 5061 , - 2738 , - 5251 , - 5160 , - 977 , - 3118 , - 4143 , - 2564 , - 2845 , - 3498 , - 3035 , - 5920 , - 4713 , - 3878 , - 1927 , - 3324 , - 629 , - 4258 , - 819 , - 728 , - 2497 , - 4638 , - 5663 , - 4084 , - 4365 , - 5018 , - 4555 , - 1488 , - 281 , - 5398 , - 3447 , - 4844 , - 2149 , - 5778 , - 2339 , - 2248 , - 4017 , - 206 , - 1231 , - 5604 , - 5885 , - 586 , - 123 , - 3008 , - 1801 , - 966 , - 4967 , - 412 , - 3669 , - 1346 , - 3859 , - 3768 , - 5537 , - 1726 , - 2751 , - 1172 , - 1453 , - 2106 , - 1643 , - 4528 , - 3321 , - 2486 , - 535 , - 1932 , - 5189 , - 2866 , - 5379 , - 5288 , - 1105 , - 3246 , - 4271 , - 2692 , - 2973 , - 3626 , - 3163 , - 96 , - 4841 , - 4006 , - 2055 , - 3452 , - 757 , - 4386 , - 947 , - 856 , - 2625 , - 4766 , - 5791 , - 4212 , - 4493 , - 5146 , - 4683 , - 1616 , - 409 , - 5526 , - 3575 , - 4972 , - 2277 , - 5906 , - 2467 , - 2376 , - 4145 , - 334 , - 1359 , - 5732 , - 61 , - 714 , - 251 , - 3136 , - 1929 , - 1094 , - 5095 , - 540 , - 3797 , - 1474 , - 3987 , - 3896 , - 5665 , - 1854 , - 2879 , - 1300 , - 1581 , - 2234 , - 1771 , - 4656 , - 3449 , - 2614 , - 663 , - 2060 , - 5317 , - 2994 , - 5507 , - 5416 , - 1233 , - 3374 , - 4399 , - 2820 , - 3101 , - 3754 , - 3291 , - 224 , - 4969 , - 4134 , - 2183 , - 3580 , - 885 , - 4514 , - 1075 , - 984 , - 2753 , - 4894 , - 5919 , - 4340 , - 4621 , - 5274 , - 4811 , - 1744 , - 537 , - 5654 , - 3703 , - 5100 , - 2405 , - 82 , - 2595 , - 2504 , - 4273 , - 462 , - 1487 , - 5860 , - 189 , - 842 , - 379 , - 3264 , - 2057 , - 1222 , - 5223 , - 668 , - 3925 , - 1602 , - 4115 , - 4024 , - 5793 , - 1982 , - 3007 , - 1428 , - 1709 , - 2362 , - 1899 , - 4784 , - 3577 , - 2742 , - 791 , - 2188 , - 5445 , - 3122 , - 5635 , - 5544 , - 1361 , - 3502 , - 4527 , - 2948 , - 3229 , - 3882 , - 3419 , - 352 , - 5097 , - 4262 , - 2311 , - 3708 , - 1013 , - 4642 , - 1203 , - 1112 , - 2881 , - 5022 , - 95 , - 4468 , - 4749 , - 5402 , - 4939 , - 1872 , - 665 , - 5782 , - 3831 , - 5228 , - 2533 , - 210 , - 2723 , - 2632 , - 4401 , - 590 , - 1615 , - 36 , - 317 , - 970 , - 507 , - 3392 , - 2185 , - 1350 , - 5351 , - 796 , - 4053 , - 1730 , - 4243 , - 4152 , - 5921 , - 2110 , - 3135 , - 1556 , - 1837 , - 2490 , - 2027 , - 4912 , - 3705 , - 2870 , - 919 , - 2316 , - 5573 , - 3250 , - 5763 , - 5672 , - 1489 , - 3630 , - 4655 , - 3076 , - 3357 , - 4010 , - 3547 , - 480 , - 5225 , - 4390 , - 2439 , - 3836 , - 1141 , - 4770 , - 1331 , - 1240 , - 3009 , - 5150 , - 223 , - 4596 , - 4877 , - 5530 , - 5067 , - 2000 , - 793 , - 5910 , - 3959 , - 5356 , - 2661 , - 338 , - 2851 , - 2760 , - 4529 , - 718 , - 1743 , - 164 , - 445 , - 1098 , - 635 , - 3520 , - 2313 , - 1478 , - 5479 , - 924 , - 4181 , - 1858 , - 4371 , - 4280 , - 97 , - 2238 , - 3263 , - 1684 , - 1965 , - 2618 , - 2155 , - 5040 , - 3833 , - 2998 , - 1047 , - 2444 , - 5701 , - 3378 , - 5891 , - 5800 , - 1617 , - 3758 , - 4783 , - 3204 , - 3485 , - 4138 , - 3675 , - 608 , - 5353 , - 4518 , - 2567 , - 3964 , - 1269 , - 4898 , - 1459 , - 1368 , - 3137 , - 5278 , - 351 , - 4724 , - 5005 , - 5658 , - 5195 , - 2128 , - 921 , - 86 , - 4087 , - 5484 , - 2789 , - 466 , - 2979 , - 2888 , - 4657 , - 846 , - 1871 , - 292 , - 573 , - 1226 , - 763 , - 3648 , - 2441 , - 1606 , - 5607 , - 1052 , - 4309 , - 1986 , - 4499 , - 4408 , - 225 , - 2366 , - 3391 , - 1812 , - 2093 , - 2746 , - 2283 , - 5168 , - 3961 , - 3126 , - 1175 , - 2572 , - 5829 , - 3506 , - 67 , - 5928 , - 1745 , - 3886 , - 4911 , - 3332 , - 3613 , - 4266 , - 3803 , - 736 , - 5481 , - 4646 , - 2695 , - 4092 , - 1397 , - 5026 , - 1587 , - 1496 , - 3265 , - 5406 , - 479 , - 4852 , - 5133 , - 5786 , - 5323 , - 2256 , - 1049 , - 214 , - 4215 , - 5612 , - 2917 , - 594 , - 3107 , - 3016 , - 4785 , - 974 , - 1999 , - 420 , - 701 , - 1354 , - 891 , - 3776 , - 2569 , - 1734 , - 5735 , - 1180 , - 4437 , - 2114 , - 4627 , - 4536 , - 353 , - 2494 , - 3519 , - 1940 , - 2221 , - 2874 , - 2411 , - 5296 , - 4089 , - 3254 , - 1303 , - 2700 , - 5 , - 3634 , - 195 , - 104 , - 1873 , - 4014 , - 5039 , - 3460 , - 3741 , - 4394 , - 3931 , - 864 , - 5609 , - 4774 , - 2823 , - 4220 , - 1525 , - 5154 , - 1715 , - 1624 , - 3393 , - 5534 , - 607 , - 4980 , - 5261 , - 5914 , - 5451 , - 2384 , - 1177 , - 342 , - 4343 , - 5740 , - 3045 , - 722 , - 3235 , - 3144 , - 4913 , - 1102 , - 2127 , - 548 , - 829 , - 1482 , - 1019 , - 3904 , - 2697 , - 1862 , - 5863 , - 1308 , - 4565 , - 2242 , - 4755 , - 4664 , - 481 , - 2622 , - 3647 , - 2068 , - 2349 , - 3002 , - 2539 , - 5424 , - 4217 , - 3382 , - 1431 , - 2828 , - 133 , - 3762 , - 323 , - 232 , - 2001 , - 4142 , - 5167 , - 3588 , - 3869 , - 4522 , - 4059 , - 992 , - 5737 , - 4902 , - 2951 , - 4348 , - 1653 , - 5282 , - 1843 , - 1752 , - 3521 , - 5662 , - 735 , - 5108 , - 5389 , - 90 , - 5579 , - 2512 , - 1305 , - 470 , - 4471 , - 5868 , - 3173 , - 850 , - 3363 , - 3272 , - 5041 , - 1230 , - 2255 , - 676 , - 957 , - 1610 , - 1147 , - 4032 , - 2825 , - 1990 , - 39 , - 1436 , - 4693 , - 2370 , - 4883 , - 4792 , - 609 , - 2750 , - 3775 , - 2196 , - 2477 , - 3130 , - 2667 , - 5552 , - 4345 , - 3510 , - 1559 , - 2956 , - 261 , - 3890 , - 451 , - 360 , - 2129 , - 4270 , - 5295 , - 3716 , - 3997 , - 4650 , - 4187 , - 1120 , - 5865 , - 5030 , - 3079 , - 4476 , - 1781 , - 5410 , - 1971 , - 1880 , - 3649 , - 5790 , - 863 , - 5236 , - 5517 , - 218 , - 5707 , - 2640 , - 1433 , - 598 , - 4599 , - 44 , - 3301 , - 978 , - 3491 , - 3400 , - 5169 , - 1358 , - 2383 , - 804 , - 1085 , - 1738 , - 1275 , - 4160 , - 2953 , - 2118 , - 167 , - 1564 , - 4821 , - 2498 , - 5011 , - 4920 , - 737 , - 2878 , - 3903 , - 2324 , - 2605 , - 3258 , - 2795 , - 5680 , - 4473 , - 3638 , - 1687 , - 3084 , - 389 , - 4018 , - 579 , - 488 , - 2257 , - 4398 , - 5423 , - 3844 , - 4125 , - 4778 , - 4315 , - 1248 , - 41 , - 5158 , - 3207 , - 4604 , - 1909 , - 5538 , - 2099 , - 2008 , - 3777 , - 5918 , - 991 , - 5364 , - 5645 , - 346 , - 5835 , - 2768 , - 1561 , - 726 , - 4727 , - 172 , - 3429 , - 1106 , - 3619 , - 3528 , - 5297 , - 1486 , - 2511 , - 932 , - 1213 , - 1866 , - 1403 , - 4288 , - 3081 , - 2246 , - 295 , - 1692 , - 4949 , - 2626 , - 5139 , - 5048 , - 865 , - 3006 , - 4031 , - 2452 , - 2733 , - 3386 , - 2923 , - 5808 , - 4601 , - 3766 , - 1815 , - 3212 , - 517 , - 4146 , - 707 , - 616 , - 2385 , - 4526 , - 5551 , - 3972 , - 4253 , - 4906 , - 4443 , - 1376 , - 169 , - 5286 , - 3335 , - 4732 , - 2037 , - 5666 , - 2227 , - 2136 , - 3905 , - 94 , - 1119 , - 5492 , - 5773 , - 474 , - 11 , - 2896 , - 1689 , - 854 , - 4855 , - 300 , - 3557 , - 1234 , - 3747 , - 3656 , - 5425 , - 1614 , - 2639 , - 1060 , - 1341 , - 1994 , - 1531 , - 4416 , - 3209 , - 2374 , - 423 , - 1820 , - 5077 , - 2754 , - 5267 , - 5176 , - 993 , - 3134 , - 4159 , - 2580 , - 2861 , - 3514 , - 3051 , - 5936 , - 4729 , - 3894 , - 1943 , - 3340 , - 645 , - 4274 , - 835 , - 744 , - 2513 , - 4654 , - 5679 , - 4100 , - 4381 , - 5034 , - 4571 , - 1504 , - 297 , - 5414 , - 3463 , - 4860 , - 2165 , - 5794 , - 2355 , - 2264 , - 4033 , - 222 , - 1247 , - 5620 , - 5901 , - 602 , - 139 , - 3024 , - 1817 , - 982 , - 4983 , - 428 , - 3685 , - 1362 , - 3875 , - 3784 , - 5553 , - 1742 , - 2767 , - 1188 , - 1469 , - 2122 , - 1659 , - 4544 , - 3337 , - 2502 , - 551 , - 1948 , - 5205 , - 2882 , - 5395 , - 5304 , - 1121 , - 3262 , - 4287 , - 2708 , - 2989 , - 3642 , - 3179 , - 112 , - 4857 , - 4022 , - 2071 , - 3468 , - 773 , - 4402 , - 963 , - 872 , - 2641 , - 4782 , - 5807 , - 4228 , - 4509 , - 5162 , - 4699 , - 1632 , - 425 , - 5542 , - 3591 , - 4988 , - 2293 , - 5922 , - 2483 , - 2392 , - 4161 , - 350 , - 1375 , - 5748 , - 77 , - 730 , - 267 , - 3152 , - 1945 , - 1110 , - 5111 , - 556 , - 3813 , - 1490 , - 4003 , - 3912 , - 5681 , - 1870 , - 2895 , - 1316 , - 1597 , - 2250 , - 1787 , - 4672 , - 3465 , - 2630 , - 679 , - 2076 , - 5333 , - 3010 , - 5523 , - 5432 , - 1249 , - 3390 , - 4415 , - 2836 , - 3117 , - 3770 , - 3307 , - 240 , - 4985 , - 4150 , - 2199 , - 3596 , - 901 , - 4530 , - 1091 , - 1000 , - 2769 , - 4910 , - 5935 , - 4356 , - 4637 , - 5290 , - 4827 , - 1760 , - 553 , - 5670 , - 3719 , - 5116 , - 2421 , - 98 , - 2611 , - 2520 , - 4289 , - 478 , - 1503 , - 5876 , - 205 , - 858 , - 395 , - 3280 , - 2073 , - 1238 , - 5239 , - 684 , - 3941 , - 1618 , - 4131 , - 4040 , - 5809 , - 1998 , - 3023 , - 1444 , - 1725 , - 2378 , - 1915 , - 4800 , - 3593 , - 2758 , - 807 , - 2204 , - 5461 , - 3138 , - 5651 , - 5560 , - 1377 , - 3518 , - 4543 , - 2964 , - 3245 , - 3898 , - 3435 , - 368 , - 5113 , - 4278 , - 2327 , - 3724 , - 1029 , - 4658 , - 1219 , - 1128 , - 2897 , - 5038 , - 111 , - 4484 , - 4765 , - 5418 , - 4955 , - 1888 , - 681 , - 5798 , - 3847 , - 5244 , - 2549 , - 226 , - 2739 , - 2648 , - 4417 , - 606 , - 1631 , - 52 , - 333 , - 986 , - 523 , - 3408 , - 2201 , - 1366 , - 5367 , - 812 , - 4069 , - 1746 , - 4259 , - 4168 , - 5937 , - 2126 , - 3151 , - 1572 , - 1853 , - 2506 , - 2043 , - 4928 , - 3721 , - 2886 , - 935 , - 2332 , - 5589 , - 3266 , - 5779 , - 5688 , - 1505 , - 3646 , - 4671 , - 3092 , - 3373 , - 4026 , - 3563 , - 496 , - 5241 , - 4406 , - 2455 , - 3852 , - 1157 , - 4786 , - 1347 , - 1256 , - 3025 , - 5166 , - 239 , - 4612 , - 4893 , - 5546 , - 5083 , - 2016 , - 809 , - 5926 , - 3975 , - 5372 , - 2677 , - 354 , - 2867 , - 2776 , - 4545 , - 734 , - 1759 , - 180 , - 461 , - 1114 , - 651 , - 3536 , - 2329 , - 1494 , - 5495 , - 940 , - 4197 , - 1874 , - 4387 , - 4296 , - 113 , - 2254 , - 3279 , - 1700 , - 1981 , - 2634 , - 2171 , - 5056 , - 3849 , - 3014 , - 1063 , - 2460 , - 5717 , - 3394 , - 5907 , - 5816 , - 1633 , - 3774 , - 4799 , - 3220 , - 3501 , - 4154 , - 3691 , - 624 , - 5369 , - 4534 , - 2583 , - 3980 , - 1285 , - 4914 , - 1475 , - 1384 , - 3153 , - 5294 , - 367 , - 4740 , - 5021 , - 5674 , - 5211 , - 2144 , - 937 , - 102 , - 4103 , - 5500 , - 2805 , - 482 , - 2995 , - 2904 , - 4673 , - 862 , - 1887 , - 308 , - 589 , - 1242 , - 779 , - 3664 , - 2457 , - 1622 , - 5623 , - 1068 , - 4325 , - 2002 , - 4515 , - 4424 , - 241 , - 2382 , - 3407 , - 1828 , - 2109 , - 2762 , - 2299 , - 5184 , - 3977 , - 3142 , - 1191 , - 2588 , - 5845 , - 3522 , - 83 , - 5944 , - 1761 , - 3902 , - 4927 , - 3348 , - 3629 , - 4282 , - 3819 , - 752 , - 5497 , - 4662 , - 2711 , - 4108 , - 1413 , - 5042 , - 1603 , - 1512 , - 3281 , - 5422 , - 495 , - 4868 , - 5149 , - 5802 , - 5339 , - 2272 , - 1065 , - 230 , - 4231 , - 5628 , - 2933 , - 610 , - 3123 , - 3032 , - 4801 , - 990 , - 2015 , - 436 , - 717 , - 1370 , - 907 , - 3792 , - 2585 , - 1750 , - 5751 , - 1196 , - 4453 , - 2130 , - 4643 , - 4552 , - 369 , - 2510 , - 3535 , - 1956 , - 2237 , - 2890 , - 2427 , - 5312 , - 4105 , - 3270 , - 1319 , - 2716 , - 21 , - 3650 , - 211 , - 120 , - 1889 , - 4030 , - 5055 , - 3476 , - 3757 , - 4410 , - 3947 , - 880 , - 5625 , - 4790 , - 2839 , - 4236 , - 1541 , - 5170 , - 1731 , - 1640 , - 3409 , - 5550 , - 623 , - 4996 , - 5277 , - 5930 , - 5467 , - 2400 , - 1193 , - 358 , - 4359 , - 5756 , - 3061 , - 738 , - 3251 , - 3160 , - 4929 , - 1118 , - 2143 , - 564 , - 845 , - 1498 , - 1035 , - 3920 , - 2713 , - 1878 , - 5879 , - 1324 , - 4581 , - 2258 , - 4771 , - 4680 , - 497 , - 2638 , - 3663 , - 2084 , - 2365 , - 3018 , - 2555 , - 5440 , - 4233 , - 3398 , - 1447 , - 2844 , - 149 , - 3778 , - 339 , - 248 , - 2017 , - 4158 , - 5183 , - 3604 , - 3885 , - 4538 , - 4075 , - 1008 , - 5753 , - 4918 , - 2967 , - 4364 , - 1669 , - 5298 , - 1859 , - 1768 , - 3537 , - 5678 , - 751 , - 5124 , - 5405 , - 106 , - 5595 , - 2528 , - 1321 , - 486 , - 4487 , - 5884 , - 3189 , - 866 , - 3379 , - 3288 , - 5057 , - 1246 , - 2271 , - 692 , - 973 , - 1626 , - 1163 , - 4048 , - 2841 , - 2006 , - 55 , - 1452 , - 4709 , - 2386 , - 4899 , - 4808 , - 625 , - 2766 , - 3791 , - 2212 , - 2493 , - 3146 , - 2683 , - 5568 , - 4361 , - 3526 , - 1575 , - 2972 , - 277 , - 3906 , - 467 , - 376 , - 2145 , - 4286 , - 5311 , - 3732 , - 4013 , - 4666 , - 4203 , - 1136 , - 5881 , - 5046 , - 3095 , - 4492 , - 1797 , - 5426 , - 1987 , - 1896 , - 3665 , - 5806 , - 879 , - 5252 , - 5533 , - 234 , - 5723 , - 2656 , - 1449 , - 614 , - 4615 , - 60 , - 3317 , - 994 , - 3507 , - 3416 , - 5185 , - 1374 , - 2399 , - 820 , - 1101 , - 1754 , - 1291 , - 4176 , - 2969 , - 2134 , - 183 , - 1580 , - 4837 , - 2514 , - 5027 , - 4936 , - 753 , - 2894 , - 3919 , - 2340 , - 2621 , - 3274 , - 2811 , - 5696 , - 4489 , - 3654 , - 1703 , - 3100 , - 405 , - 4034 , - 595 , - 504 , - 2273 , - 4414 , - 5439 , - 3860 , - 4141 , - 4794 , - 4331 , - 1264 , - 57 , - 5174 , - 3223 , - 4620 , - 1925 , - 5554 , - 2115 , - 2024 , - 3793 , - 5934 , - 1007 , - 5380 , - 5661 , - 362 , - 5851 , - 2784 , - 1577 , - 742 , - 4743 , - 188 , - 3445 , - 1122 , - 3635 , - 3544 , - 5313 , - 1502 , - 2527 , - 948 , - 1229 , - 1882 , - 1419 , - 4304 , - 3097 , - 2262 , - 311 , - 1708 , - 4965 , - 2642 , - 5155 , - 5064 , - 881 , - 3022 , - 4047 , - 2468 , - 2749 , - 3402 , - 2939 , - 5824 , - 4617 , - 3782 , - 1831 , - 3228 , - 533 , - 4162 , - 723 , - 632 , - 2401 , - 4542 , - 5567 , - 3988 , - 4269 , - 4922 , - 4459 , - 1392 , - 185 , - 5302 , - 3351 , - 4748 , - 2053 , - 5682 , - 2243 , - 2152 , - 3921 , - 110 , - 1135 , - 5508 , - 5789 , - 490 , - 27 , - 2912 , - 1705 , - 870 , - 4871 , - 316 , - 3573 , - 1250 , - 3763 , - 3672 , - 5441 , - 1630 , - 2655 , - 1076 , - 1357 , - 2010 , - 1547 , - 4432 , - 3225 , - 2390 , - 439 , - 1836 , - 5093 , - 2770 , - 5283 , - 5192 , - 1009 , - 3150 , - 4175 , - 2596 , - 2877 , - 3530 , - 3067 , - 0 , - 421 , - 4038 , - 5587 , - 2812 , - 2481 , - 2338 , - 3135 , - 2616 , - 1533 , - 3646 , - 3691 , - 5428 , - 3593 , - 1946 , - 1239 , - 5232 , - 2645 , - 3254 , - 1795 , - 2028 , - 4705 , - 1554 , - 5359 , - 1832 , - 3757 , - 2862 , - 5915 , - 4644 , - 5817 , - 1162 , - 3463 , - 4448 , - 4869 , - 2470 , - 4019 , - 1244 , - 913 , - 770 , - 1567 , - 1048 , - 5981 , - 2078 , - 2123 , - 3860 , - 2025 , - 378 , - 5687 , - 3664 , - 1077 , - 1686 , - 227 , - 460 , - 3137 , - 6002 , - 3791 , - 264 , - 2189 , - 1294 , - 4347 , - 3076 , - 4249 , - 5610 , - 1895 , - 2880 , - 3301 , - 902 , - 2451 , - 5692 , - 5361 , - 5218 , - 6015 , - 5496 , - 4413 , - 510 , - 555 , - 2292 , - 457 , - 4826 , - 4119 , - 2096 , - 5525 , - 118 , - 4675 , - 4908 , - 1569 , - 4434 , - 2223 , - 4712 , - 621 , - 5742 , - 2779 , - 1508 , - 2681 , - 4042 , - 327 , - 1312 , - 1733 , - 5350 , - 883 , - 4124 , - 3793 , - 3650 , - 4447 , - 3928 , - 2845 , - 4958 , - 5003 , - 724 , - 4905 , - 3258 , - 2551 , - 528 , - 3957 , - 4566 , - 3107 , - 3340 , - 1 , - 2866 , - 655 , - 3144 , - 5069 , - 4174 , - 1211 , - 5956 , - 1113 , - 2474 , - 4775 , - 5760 , - 165 , - 3782 , - 5331 , - 2556 , - 2225 , - 2082 , - 2879 , - 2360 , - 1277 , - 3390 , - 3435 , - 5172 , - 3337 , - 1690 , - 983 , - 4976 , - 2389 , - 2998 , - 1539 , - 1772 , - 4449 , - 1298 , - 5103 , - 1576 , - 3501 , - 2606 , - 5659 , - 4388 , - 5561 , - 906 , - 3207 , - 4192 , - 4613 , - 2214 , - 3763 , - 988 , - 657 , - 514 , - 1311 , - 792 , - 5725 , - 1822 , - 1867 , - 3604 , - 1769 , - 122 , - 5431 , - 3408 , - 821 , - 1430 , - 5987 , - 204 , - 2881 , - 5746 , - 3535 , - 8 , - 1933 , - 1038 , - 4091 , - 2820 , - 3993 , - 5354 , - 1639 , - 2624 , - 3045 , - 646 , - 2195 , - 5436 , - 5105 , - 4962 , - 5759 , - 5240 , - 4157 , - 254 , - 299 , - 2036 , - 201 , - 4570 , - 3863 , - 1840 , - 5269 , - 5878 , - 4419 , - 4652 , - 1313 , - 4178 , - 1967 , - 4456 , - 365 , - 5486 , - 2523 , - 1252 , - 2425 , - 3786 , - 71 , - 1056 , - 1477 , - 5094 , - 627 , - 3868 , - 3537 , - 3394 , - 4191 , - 3672 , - 2589 , - 4702 , - 4747 , - 468 , - 4649 , - 3002 , - 2295 , - 272 , - 3701 , - 4310 , - 2851 , - 3084 , - 5761 , - 2610 , - 399 , - 2888 , - 4813 , - 3918 , - 955 , - 5700 , - 857 , - 2218 , - 4519 , - 5504 , - 5925 , - 3526 , - 5075 , - 2300 , - 1969 , - 1826 , - 2623 , - 2104 , - 1021 , - 3134 , - 3179 , - 4916 , - 3081 , - 1434 , - 727 , - 4720 , - 2133 , - 2742 , - 1283 , - 1516 , - 4193 , - 1042 , - 4847 , - 1320 , - 3245 , - 2350 , - 5403 , - 4132 , - 5305 , - 650 , - 2951 , - 3936 , - 4357 , - 1958 , - 3507 , - 732 , - 401 , - 258 , - 1055 , - 536 , - 5469 , - 1566 , - 1611 , - 3348 , - 1513 , - 5882 , - 5175 , - 3152 , - 565 , - 1174 , - 5731 , - 5964 , - 2625 , - 5490 , - 3279 , - 5768 , - 1677 , - 782 , - 3835 , - 2564 , - 3737 , - 5098 , - 1383 , - 2368 , - 2789 , - 390 , - 1939 , - 5180 , - 4849 , - 4706 , - 5503 , - 4984 , - 3901 , - 6014 , - 43 , - 1780 , - 5961 , - 4314 , - 3607 , - 1584 , - 5013 , - 5622 , - 4163 , - 4396 , - 1057 , - 3922 , - 1711 , - 4200 , - 109 , - 5230 , - 2267 , - 996 , - 2169 , - 3530 , - 5831 , - 800 , - 1221 , - 4838 , - 371 , - 3612 , - 3281 , - 3138 , - 3935 , - 3416 , - 2333 , - 4446 , - 4491 , - 212 , - 4393 , - 2746 , - 2039 , - 16 , - 3445 , - 4054 , - 2595 , - 2828 , - 5505 , - 2354 , - 143 , - 2632 , - 4557 , - 3662 , - 699 , - 5444 , - 601 , - 1962 , - 4263 , - 5248 , - 5669 , - 3270 , - 4819 , - 2044 , - 1713 , - 1570 , - 2367 , - 1848 , - 765 , - 2878 , - 2923 , - 4660 , - 2825 , - 1178 , - 471 , - 4464 , - 1877 , - 2486 , - 1027 , - 1260 , - 3937 , - 786 , - 4591 , - 1064 , - 2989 , - 2094 , - 5147 , - 3876 , - 5049 , - 394 , - 2695 , - 3680 , - 4101 , - 1702 , - 3251 , - 476 , - 145 , - 2 , - 799 , - 280 , - 5213 , - 1310 , - 1355 , - 3092 , - 1257 , - 5626 , - 4919 , - 2896 , - 309 , - 918 , - 5475 , - 5708 , - 2369 , - 5234 , - 3023 , - 5512 , - 1421 , - 526 , - 3579 , - 2308 , - 3481 , - 4842 , - 1127 , - 2112 , - 2533 , - 134 , - 1683 , - 4924 , - 4593 , - 4450 , - 5247 , - 4728 , - 3645 , - 5758 , - 5803 , - 1524 , - 5705 , - 4058 , - 3351 , - 1328 , - 4757 , - 5366 , - 3907 , - 4140 , - 801 , - 3666 , - 1455 , - 3944 , - 5869 , - 4974 , - 2011 , - 740 , - 1913 , - 3274 , - 5575 , - 544 , - 965 , - 4582 , - 115 , - 3356 , - 3025 , - 2882 , - 3679 , - 3160 , - 2077 , - 4190 , - 4235 , - 5972 , - 4137 , - 2490 , - 1783 , - 5776 , - 3189 , - 3798 , - 2339 , - 2572 , - 5249 , - 2098 , - 5903 , - 2376 , - 4301 , - 3406 , - 443 , - 5188 , - 345 , - 1706 , - 4007 , - 4992 , - 5413 , - 3014 , - 4563 , - 1788 , - 1457 , - 1314 , - 2111 , - 1592 , - 509 , - 2622 , - 2667 , - 4404 , - 2569 , - 922 , - 215 , - 4208 , - 1621 , - 2230 , - 771 , - 1004 , - 3681 , - 530 , - 4335 , - 808 , - 2733 , - 1838 , - 4891 , - 3620 , - 4793 , - 138 , - 2439 , - 3424 , - 3845 , - 1446 , - 2995 , - 220 , - 5905 , - 5762 , - 543 , - 24 , - 4957 , - 1054 , - 1099 , - 2836 , - 1001 , - 5370 , - 4663 , - 2640 , - 53 , - 662 , - 5219 , - 5452 , - 2113 , - 4978 , - 2767 , - 5256 , - 1165 , - 270 , - 3323 , - 2052 , - 3225 , - 4586 , - 871 , - 1856 , - 2277 , - 5894 , - 1427 , - 4668 , - 4337 , - 4194 , - 4991 , - 4472 , - 3389 , - 5502 , - 5547 , - 1268 , - 5449 , - 3802 , - 3095 , - 1072 , - 4501 , - 5110 , - 3651 , - 3884 , - 545 , - 3410 , - 1199 , - 3688 , - 5613 , - 4718 , - 1755 , - 484 , - 1657 , - 3018 , - 5319 , - 288 , - 709 , - 4326 , - 5875 , - 3100 , - 2769 , - 2626 , - 3423 , - 2904 , - 1821 , - 3934 , - 3979 , - 5716 , - 3881 , - 2234 , - 1527 , - 5520 , - 2933 , - 3542 , - 2083 , - 2316 , - 4993 , - 1842 , - 5647 , - 2120 , - 4045 , - 3150 , - 187 , - 4932 , - 89 , - 1450 , - 3751 , - 4736 , - 5157 , - 2758 , - 4307 , - 1532 , - 1201 , - 1058 , - 1855 , - 1336 , - 253 , - 2366 , - 2411 , - 4148 , - 2313 , - 666 , - 5975 , - 3952 , - 1365 , - 1974 , - 515 , - 748 , - 3425 , - 274 , - 4079 , - 552 , - 2477 , - 1582 , - 4635 , - 3364 , - 4537 , - 5898 , - 2183 , - 3168 , - 3589 , - 1190 , - 2739 , - 5980 , - 5649 , - 5506 , - 287 , - 5784 , - 4701 , - 798 , - 843 , - 2580 , - 745 , - 5114 , - 4407 , - 2384 , - 5813 , - 406 , - 4963 , - 5196 , - 1857 , - 4722 , - 2511 , - 5000 , - 909 , - 14 , - 3067 , - 1796 , - 2969 , - 4330 , - 615 , - 1600 , - 2021 , - 5638 , - 1171 , - 4412 , - 4081 , - 3938 , - 4735 , - 4216 , - 3133 , - 5246 , - 5291 , - 1012 , - 5193 , - 3546 , - 2839 , - 816 , - 4245 , - 4854 , - 3395 , - 3628 , - 289 , - 3154 , - 943 , - 3432 , - 5357 , - 4462 , - 1499 , - 228 , - 1401 , - 2762 , - 5063 , - 32 , - 453 , - 4070 , - 5619 , - 2844 , - 2513 , - 2370 , - 3167 , - 2648 , - 1565 , - 3678 , - 3723 , - 5460 , - 3625 , - 1978 , - 1271 , - 5264 , - 2677 , - 3286 , - 1827 , - 2060 , - 4737 , - 1586 , - 5391 , - 1864 , - 3789 , - 2894 , - 5947 , - 4676 , - 5849 , - 1194 , - 3495 , - 4480 , - 4901 , - 2502 , - 4051 , - 1276 , - 945 , - 802 , - 1599 , - 1080 , - 6013 , - 2110 , - 2155 , - 3892 , - 2057 , - 410 , - 5719 , - 3696 , - 1109 , - 1718 , - 259 , - 492 , - 3169 , - 18 , - 3823 , - 296 , - 2221 , - 1326 , - 4379 , - 3108 , - 4281 , - 5642 , - 1927 , - 2912 , - 3333 , - 934 , - 2483 , - 5724 , - 5393 , - 5250 , - 31 , - 5528 , - 4445 , - 542 , - 587 , - 2324 , - 489 , - 4858 , - 4151 , - 2128 , - 5557 , - 150 , - 4707 , - 4940 , - 1601 , - 4466 , - 2255 , - 4744 , - 653 , - 5774 , - 2811 , - 1540 , - 2713 , - 4074 , - 359 , - 1344 , - 1765 , - 5382 , - 915 , - 4156 , - 3825 , - 3682 , - 4479 , - 3960 , - 2877 , - 4990 , - 5035 , - 756 , - 4937 , - 3290 , - 2583 , - 560 , - 3989 , - 4598 , - 3139 , - 3372 , - 33 , - 2898 , - 687 , - 3176 , - 5101 , - 4206 , - 1243 , - 5988 , - 1145 , - 2506 , - 4807 , - 5792 , - 197 , - 3814 , - 5363 , - 2588 , - 2257 , - 2114 , - 2911 , - 2392 , - 1309 , - 3422 , - 3467 , - 5204 , - 3369 , - 1722 , - 1015 , - 5008 , - 2421 , - 3030 , - 1571 , - 1804 , - 4481 , - 1330 , - 5135 , - 1608 , - 3533 , - 2638 , - 5691 , - 4420 , - 5593 , - 938 , - 3239 , - 4224 , - 4645 , - 2246 , - 3795 , - 1020 , - 689 , - 546 , - 1343 , - 824 , - 5757 , - 1854 , - 1899 , - 3636 , - 1801 , - 154 , - 5463 , - 3440 , - 853 , - 1462 , - 3 , - 236 , - 2913 , - 5778 , - 3567 , - 40 , - 1965 , - 1070 , - 4123 , - 2852 , - 4025 , - 5386 , - 1671 , - 2656 , - 3077 , - 678 , - 2227 , - 5468 , - 5137 , - 4994 , - 5791 , - 5272 , - 4189 , - 286 , - 331 , - 2068 , - 233 , - 4602 , - 3895 , - 1872 , - 5301 , - 5910 , - 4451 , - 4684 , - 1345 , - 4210 , - 1999 , - 4488 , - 397 , - 5518 , - 2555 , - 1284 , - 2457 , - 3818 , - 103 , - 1088 , - 1509 , - 5126 , - 659 , - 3900 , - 3569 , - 3426 , - 4223 , - 3704 , - 2621 , - 4734 , - 4779 , - 500 , - 4681 , - 3034 , - 2327 , - 304 , - 3733 , - 4342 , - 2883 , - 3116 , - 5793 , - 2642 , - 431 , - 2920 , - 4845 , - 3950 , - 987 , - 5732 , - 889 , - 2250 , - 4551 , - 5536 , - 5957 , - 3558 , - 5107 , - 2332 , - 2001 , - 1858 , - 2655 , - 2136 , - 1053 , - 3166 , - 3211 , - 4948 , - 3113 , - 1466 , - 759 , - 4752 , - 2165 , - 2774 , - 1315 , - 1548 , - 4225 , - 1074 , - 4879 , - 1352 , - 3277 , - 2382 , - 5435 , - 4164 , - 5337 , - 682 , - 2983 , - 3968 , - 4389 , - 1990 , - 3539 , - 764 , - 433 , - 290 , - 1087 , - 568 , - 5501 , - 1598 , - 1643 , - 3380 , - 1545 , - 5914 , - 5207 , - 3184 , - 597 , - 1206 , - 5763 , - 5996 , - 2657 , - 5522 , - 3311 , - 5800 , - 1709 , - 814 , - 3867 , - 2596 , - 3769 , - 5130 , - 1415 , - 2400 , - 2821 , - 422 , - 1971 , - 5212 , - 4881 , - 4738 , - 5535 , - 5016 , - 3933 , - 30 , - 75 , - 1812 , - 5993 , - 4346 , - 3639 , - 1616 , - 5045 , - 5654 , - 4195 , - 4428 , - 1089 , - 3954 , - 1743 , - 4232 , - 141 , - 5262 , - 2299 , - 1028 , - 2201 , - 3562 , - 5863 , - 832 , - 1253 , - 4870 , - 403 , - 3644 , - 3313 , - 3170 , - 3967 , - 3448 , - 2365 , - 4478 , - 4523 , - 244 , - 4425 , - 2778 , - 2071 , - 48 , - 3477 , - 4086 , - 2627 , - 2860 , - 5537 , - 2386 , - 175 , - 2664 , - 4589 , - 3694 , - 731 , - 5476 , - 633 , - 1994 , - 4295 , - 5280 , - 5701 , - 3302 , - 4851 , - 2076 , - 1745 , - 1602 , - 2399 , - 1880 , - 797 , - 2910 , - 2955 , - 4692 , - 2857 , - 1210 , - 503 , - 4496 , - 1909 , - 2518 , - 1059 , - 1292 , - 3969 , - 818 , - 4623 , - 1096 , - 3021 , - 2126 , - 5179 , - 3908 , - 5081 , - 426 , - 2727 , - 3712 , - 4133 , - 1734 , - 3283 , - 508 , - 177 , - 34 , - 831 , - 312 , - 5245 , - 1342 , - 1387 , - 3124 , - 1289 , - 5658 , - 4951 , - 2928 , - 341 , - 950 , - 5507 , - 5740 , - 2401 , - 5266 , - 3055 , - 5544 , - 1453 , - 558 , - 3611 , - 2340 , - 3513 , - 4874 , - 1159 , - 2144 , - 2565 , - 166 , - 1715 , - 4956 , - 4625 , - 4482 , - 5279 , - 4760 , - 3677 , - 5790 , - 5835 , - 1556 , - 5737 , - 4090 , - 3383 , - 1360 , - 4789 , - 5398 , - 3939 , - 4172 , - 833 , - 3698 , - 1487 , - 3976 , - 5901 , - 5006 , - 2043 , - 772 , - 1945 , - 3306 , - 5607 , - 576 , - 997 , - 4614 , - 147 , - 3388 , - 3057 , - 2914 , - 3711 , - 3192 , - 2109 , - 4222 , - 4267 , - 6004 , - 4169 , - 2522 , - 1815 , - 5808 , - 3221 , - 3830 , - 2371 , - 2604 , - 5281 , - 2130 , - 5935 , - 2408 , - 4333 , - 3438 , - 475 , - 5220 , - 377 , - 1738 , - 4039 , - 5024 , - 5445 , - 3046 , - 4595 , - 1820 , - 1489 , - 1346 , - 2143 , - 1624 , - 541 , - 2654 , - 2699 , - 4436 , - 2601 , - 954 , - 247 , - 4240 , - 1653 , - 2262 , - 803 , - 1036 , - 3713 , - 562 , - 4367 , - 840 , - 2765 , - 1870 , - 4923 , - 3652 , - 4825 , - 170 , - 2471 , - 3456 , - 3877 , - 1478 , - 3027 , - 252 , - 5937 , - 5794 , - 575 , - 56 , - 4989 , - 1086 , - 1131 , - 2868 , - 1033 , - 5402 , - 4695 , - 2672 , - 85 , - 694 , - 5251 , - 5484 , - 2145 , - 5010 , - 2799 , - 5288 , - 1197 , - 302 , - 3355 , - 2084 , - 3257 , - 4618 , - 903 , - 1888 , - 2309 , - 5926 , - 1459 , - 4700 , - 4369 , - 4226 , - 5023 , - 4504 , - 3421 , - 5534 , - 5579 , - 1300 , - 5481 , - 3834 , - 3127 , - 1104 , - 4533 , - 5142 , - 3683 , - 3916 , - 577 , - 3442 , - 1231 , - 3720 , - 5645 , - 4750 , - 1787 , - 516 , - 1689 , - 3050 , - 5351 , - 320 , - 741 , - 4358 , - 5907 , - 3132 , - 2801 , - 2658 , - 3455 , - 2936 , - 1853 , - 3966 , - 4011 , - 5748 , - 3913 , - 2266 , - 1559 , - 5552 , - 2965 , - 3574 , - 2115 , - 2348 , - 5025 , - 1874 , - 5679 , - 2152 , - 4077 , - 3182 , - 219 , - 4964 , - 121 , - 1482 , - 3783 , - 4768 , - 5189 , - 2790 , - 4339 , - 1564 , - 1233 , - 1090 , - 1887 , - 1368 , - 285 , - 2398 , - 2443 , - 4180 , - 2345 , - 698 , - 6007 , - 3984 , - 1397 , - 2006 , - 547 , - 780 , - 3457 , - 306 , - 4111 , - 584 , - 2509 , - 1614 , - 4667 , - 3396 , - 4569 , - 5930 , - 2215 , - 3200 , - 3621 , - 1222 , - 2771 , - 6012 , - 5681 , - 5538 , - 319 , - 5816 , - 4733 , - 830 , - 875 , - 2612 , - 777 , - 5146 , - 4439 , - 2416 , - 5845 , - 438 , - 4995 , - 5228 , - 1889 , - 4754 , - 2543 , - 5032 , - 941 , - 46 , - 3099 , - 1828 , - 3001 , - 4362 , - 647 , - 1632 , - 2053 , - 5670 , - 1203 , - 4444 , - 4113 , - 3970 , - 4767 , - 4248 , - 3165 , - 5278 , - 5323 , - 1044 , - 5225 , - 3578 , - 2871 , - 848 , - 4277 , - 4886 , - 3427 , - 3660 , - 321 , - 3186 , - 975 , - 3464 , - 5389 , - 4494 , - 1531 , - 260 , - 1433 , - 2794 , - 5095 , - 64 , - 485 , - 4102 , - 5651 , - 2876 , - 2545 , - 2402 , - 3199 , - 2680 , - 1597 , - 3710 , - 3755 , - 5492 , - 3657 , - 2010 , - 1303 , - 5296 , - 2709 , - 3318 , - 1859 , - 2092 , - 4769 , - 1618 , - 5423 , - 1896 , - 3821 , - 2926 , - 5979 , - 4708 , - 5881 , - 1226 , - 3527 , - 4512 , - 4933 , - 2534 , - 4083 , - 1308 , - 977 , - 834 , - 1631 , - 1112 , - 29 , - 2142 , - 2187 , - 3924 , - 2089 , - 442 , - 5751 , - 3728 , - 1141 , - 1750 , - 291 , - 524 , - 3201 , - 50 , - 3855 , - 328 , - 2253 , - 1358 , - 4411 , - 3140 , - 4313 , - 5674 , - 1959 , - 2944 , - 3365 , - 966 , - 2515 , - 5756 , - 5425 , - 5282 , - 63 , - 5560 , - 4477 , - 574 , - 619 , - 2356 , - 521 , - 4890 , - 4183 , - 2160 , - 5589 , - 182 , - 4739 , - 4972 , - 1633 , - 4498 , - 2287 , - 4776 , - 685 , - 5806 , - 2843 , - 1572 , - 2745 , - 4106 , - 391 , - 1376 , - 1797 , - 5414 , - 947 , - 4188 , - 3857 , - 3714 , - 4511 , - 3992 , - 2909 , - 5022 , - 5067 , - 788 , - 4969 , - 3322 , - 2615 , - 592 , - 4021 , - 4630 , - 3171 , - 3404 , - 65 , - 2930 , - 719 , - 3208 , - 5133 , - 4238 , - 1275 , - 4 , - 1177 , - 2538 , - 4839 , - 5824 , - 229 , - 3846 , - 5395 , - 2620 , - 2289 , - 2146 , - 2943 , - 2424 , - 1341 , - 3454 , - 3499 , - 5236 , - 3401 , - 1754 , - 1047 , - 5040 , - 2453 , - 3062 , - 1603 , - 1836 , - 4513 , - 1362 , - 5167 , - 1640 , - 3565 , - 2670 , - 5723 , - 4452 , - 5625 , - 970 , - 3271 , - 4256 , - 4677 , - 2278 , - 3827 , - 1052 , - 721 , - 578 , - 1375 , - 856 , - 5789 , - 1886 , - 1931 , - 3668 , - 1833 , - 186 , - 5495 , - 3472 , - 885 , - 1494 , - 35 , - 268 , - 2945 , - 5810 , - 3599 , - 72 , - 1997 , - 1102 , - 4155 , - 2884 , - 4057 , - 5418 , - 1703 , - 2688 , - 3109 , - 710 , - 2259 , - 5500 , - 5169 , - 5026 , - 5823 , - 5304 , - 4221 , - 318 , - 363 , - 2100 , - 265 , - 4634 , - 3927 , - 1904 , - 5333 , - 5942 , - 4483 , - 4716 , - 1377 , - 4242 , - 2031 , - 4520 , - 429 , - 5550 , - 2587 , - 1316 , - 2489 , - 3850 , - 135 , - 1120 , - 1541 , - 5158 , - 691 , - 3932 , - 3601 , - 3458 , - 4255 , - 3736 , - 2653 , - 4766 , - 4811 , - 532 , - 4713 , - 3066 , - 2359 , - 336 , - 3765 , - 4374 , - 2915 , - 3148 , - 5825 , - 2674 , - 463 , - 2952 , - 4877 , - 3982 , - 1019 , - 5764 , - 921 , - 2282 , - 4583 , - 5568 , - 5989 , - 3590 , - 5139 , - 2364 , - 2033 , - 1890 , - 2687 , - 2168 , - 1085 , - 3198 , - 3243 , - 4980 , - 3145 , - 1498 , - 791 , - 4784 , - 2197 , - 2806 , - 1347 , - 1580 , - 4257 , - 1106 , - 4911 , - 1384 , - 3309 , - 2414 , - 5467 , - 4196 , - 5369 , - 714 , - 3015 , - 4000 , - 4421 , - 2022 , - 3571 , - 796 , - 465 , - 322 , - 1119 , - 600 , - 5533 , - 1630 , - 1675 , - 3412 , - 1577 , - 5946 , - 5239 , - 3216 , - 629 , - 1238 , - 5795 , - 12 , - 2689 , - 5554 , - 3343 , - 5832 , - 1741 , - 846 , - 3899 , - 2628 , - 3801 , - 5162 , - 1447 , - 2432 , - 2853 , - 454 , - 2003 , - 5244 , - 4913 , - 4770 , - 5567 , - 5048 , - 3965 , - 62 , - 107 , - 1844 , - 9 , - 4378 , - 3671 , - 1648 , - 5077 , - 5686 , - 4227 , - 4460 , - 1121 , - 3986 , - 1775 , - 4264 , - 173 , - 5294 , - 2331 , - 1060 , - 2233 , - 3594 , - 5895 , - 864 , - 1285 , - 4902 , - 435 , - 3676 , - 3345 , - 3202 , - 3999 , - 3480 , - 2397 , - 4510 , - 4555 , - 276 , - 4457 , - 2810 , - 2103 , - 80 , - 3509 , - 4118 , - 2659 , - 2892 , - 5569 , - 2418 , - 207 , - 2696 , - 4621 , - 3726 , - 763 , - 5508 , - 665 , - 2026 , - 4327 , - 5312 , - 5733 , - 3334 , - 4883 , - 2108 , - 1777 , - 1634 , - 2431 , - 1912 , - 829 , - 2942 , - 2987 , - 4724 , - 2889 , - 1242 , - 535 , - 4528 , - 1941 , - 2550 , - 1091 , - 1324 , - 4001 , - 850 , - 4655 , - 1128 , - 3053 , - 2158 , - 5211 , - 3940 , - 5113 , - 458 , - 2759 , - 3744 , - 4165 , - 1766 , - 3315 , - 540 , - 209 , - 66 , - 863 , - 344 , - 5277 , - 1374 , - 1419 , - 3156 , - 1321 , - 5690 , - 4983 , - 2960 , - 373 , - 982 , - 5539 , - 5772 , - 2433 , - 5298 , - 3087 , - 5576 , - 1485 , - 590 , - 3643 , - 2372 , - 3545 , - 4906 , - 1191 , - 2176 , - 2597 , - 198 , - 1747 , - 4988 , - 4657 , - 4514 , - 5311 , - 4792 , - 3709 , - 5822 , - 5867 , - 1588 , - 5769 , - 4122 , - 3415 , - 1392 , - 4821 , - 5430 , - 3971 , - 4204 , - 865 , - 3730 , - 1519 , - 4008 , - 5933 , - 5038 , - 2075 , - 804 , - 1977 , - 3338 , - 5639 , - 608 , - 1029 , - 4646 , - 179 , - 3420 , - 3089 , - 2946 , - 3743 , - 3224 , - 2141 , - 4254 , - 4299 , - 20 , - 4201 , - 2554 , - 1847 , - 5840 , - 3253 , - 3862 , - 2403 , - 2636 , - 5313 , - 2162 , - 5967 , - 2440 , - 4365 , - 3470 , - 507 , - 5252 , - 409 , - 1770 , - 4071 , - 5056 , - 5477 , - 3078 , - 4627 , - 1852 , - 1521 , - 1378 , - 2175 , - 1656 , - 573 , - 2686 , - 2731 , - 4468 , - 2633 , - 986 , - 279 , - 4272 , - 1685 , - 2294 , - 835 , - 1068 , - 3745 , - 594 , - 4399 , - 872 , - 2797 , - 1902 , - 4955 , - 3684 , - 4857 , - 202 , - 2503 , - 3488 , - 3909 , - 1510 , - 3059 , - 284 , - 5969 , - 5826 , - 607 , - 88 , - 5021 , - 1118 , - 1163 , - 2900 , - 1065 , - 5434 , - 4727 , - 2704 , - 117 , - 726 , - 5283 , - 5516 , - 2177 , - 5042 , - 2831 , - 5320 , - 1229 , - 334 , - 3387 , - 2116 , - 3289 , - 4650 , - 935 , - 1920 , - 2341 , - 5958 , - 1491 , - 4732 , - 4401 , - 4258 , - 5055 , - 4536 , - 3453 , - 5566 , - 5611 , - 1332 , - 5513 , - 3866 , - 3159 , - 1136 , - 4565 , - 5174 , - 3715 , - 3948 , - 609 , - 3474 , - 1263 , - 3752 , - 5677 , - 4782 , - 1819 , - 548 , - 1721 , - 3082 , - 5383 , - 352 , - 773 , - 4390 , - 5939 , - 3164 , - 2833 , - 2690 , - 3487 , - 2968 , - 1885 , - 3998 , - 4043 , - 5780 , - 3945 , - 2298 , - 1591 , - 5584 , - 2997 , - 3606 , - 2147 , - 2380 , - 5057 , - 1906 , - 5711 , - 2184 , - 4109 , - 3214 , - 251 , - 4996 , - 153 , - 1514 , - 3815 , - 4800 , - 5221 , - 2822 , - 4371 , - 1596 , - 1265 , - 1122 , - 1919 , - 1400 , - 317 , - 2430 , - 2475 , - 4212 , - 2377 , - 730 , - 23 , - 4016 , - 1429 , - 2038 , - 579 , - 812 , - 3489 , - 338 , - 4143 , - 616 , - 2541 , - 1646 , - 4699 , - 3428 , - 4601 , - 5962 , - 2247 , - 3232 , - 3653 , - 1254 , - 2803 , - 28 , - 5713 , - 5570 , - 351 , - 5848 , - 4765 , - 862 , - 907 , - 2644 , - 809 , - 5178 , - 4471 , - 2448 , - 5877 , - 470 , - 5027 , - 5260 , - 1921 , - 4786 , - 2575 , - 5064 , - 973 , - 78 , - 3131 , - 1860 , - 3033 , - 4394 , - 679 , - 1664 , - 2085 , - 5702 , - 1235 , - 4476 , - 4145 , - 4002 , - 4799 , - 4280 , - 3197 , - 5310 , - 5355 , - 1076 , - 5257 , - 3610 , - 2903 , - 880 , - 4309 , - 4918 , - 3459 , - 3692 , - 353 , - 3218 , - 1007 , - 3496 , - 5421 , - 4526 , - 1563 , - 292 , - 1465 , - 2826 , - 5127 , - 96 , - 517 , - 4134 , - 5683 , - 2908 , - 2577 , - 2434 , - 3231 , - 2712 , - 1629 , - 3742 , - 3787 , - 5524 , - 3689 , - 2042 , - 1335 , - 5328 , - 2741 , - 3350 , - 1891 , - 2124 , - 4801 , - 1650 , - 5455 , - 1928 , - 3853 , - 2958 , - 6011 , - 4740 , - 5913 , - 1258 , - 3559 , - 4544 , - 4965 , - 2566 , - 4115 , - 1340 , - 1009 , - 866 , - 1663 , - 1144 , - 61 , - 2174 , - 2219 , - 3956 , - 2121 , - 474 , - 5783 , - 3760 , - 1173 , - 1782 , - 323 , - 556 , - 3233 , - 82 , - 3887 , - 360 , - 2285 , - 1390 , - 4443 , - 3172 , - 4345 , - 5706 , - 1991 , - 2976 , - 3397 , - 998 , - 2547 , - 5788 , - 5457 , - 5314 , - 95 , - 5592 , - 4509 , - 606 , - 651 , - 2388 , - 553 , - 4922 , - 4215 , - 2192 , - 5621 , - 214 , - 4771 , - 5004 , - 1665 , - 4530 , - 2319 , - 4808 , - 717 , - 5838 , - 2875 , - 1604 , - 2777 , - 4138 , - 423 , - 1408 , - 1829 , - 5446 , - 979 , - 4220 , - 3889 , - 3746 , - 4543 , - 4024 , - 2941 , - 5054 , - 5099 , - 820 , - 5001 , - 3354 , - 2647 , - 624 , - 4053 , - 4662 , - 3203 , - 3436 , - 97 , - 2962 , - 751 , - 3240 , - 5165 , - 4270 , - 1307 , - 36 , - 1209 , - 2570 , - 4871 , - 5856 , - 261 , - 3878 , - 5427 , - 2652 , - 2321 , - 2178 , - 2975 , - 2456 , - 1373 , - 3486 , - 3531 , - 5268 , - 3433 , - 1786 , - 1079 , - 5072 , - 2485 , - 3094 , - 1635 , - 1868 , - 4545 , - 1394 , - 5199 , - 1672 , - 3597 , - 2702 , - 5755 , - 4484 , - 5657 , - 1002 , - 3303 , - 4288 , - 4709 , - 2310 , - 3859 , - 1084 , - 753 , - 610 , - 1407 , - 888 , - 5821 , - 1918 , - 1963 , - 3700 , - 1865 , - 218 , - 5527 , - 3504 , - 917 , - 1526 , - 67 , - 300 , - 2977 , - 5842 , - 3631 , - 104 , - 2029 , - 1134 , - 4187 , - 2916 , - 4089 , - 5450 , - 1735 , - 2720 , - 3141 , - 742 , - 2291 , - 5532 , - 5201 , - 5058 , - 5855 , - 5336 , - 4253 , - 350 , - 395 , - 2132 , - 297 , - 4666 , - 3959 , - 1936 , - 5365 , - 5974 , - 4515 , - 4748 , - 1409 , - 4274 , - 2063 , - 4552 , - 461 , - 5582 , - 2619 , - 1348 , - 2521 , - 3882 , - 167 , - 1152 , - 1573 , - 5190 , - 723 , - 3964 , - 3633 , - 3490 , - 4287 , - 3768 , - 2685 , - 4798 , - 4843 , - 564 , - 4745 , - 3098 , - 2391 , - 368 , - 3797 , - 4406 , - 2947 , - 3180 , - 5857 , - 2706 , - 495 , - 2984 , - 4909 , - 4014 , - 1051 , - 5796 , - 953 , - 2314 , - 4615 , - 5600 , - 5 , - 3622 , - 5171 , - 2396 , - 2065 , - 1922 , - 2719 , - 2200 , - 1117 , - 3230 , - 3275 , - 5012 , - 3177 , - 1530 , - 823 , - 4816 , - 2229 , - 2838 , - 1379 , - 1612 , - 4289 , - 1138 , - 4943 , - 1416 , - 3341 , - 2446 , - 5499 , - 4228 , - 5401 , - 746 , - 3047 , - 4032 , - 4453 , - 2054 , - 3603 , - 828 , - 497 , - 354 , - 1151 , - 632 , - 5565 , - 1662 , - 1707 , - 3444 , - 1609 , - 5978 , - 5271 , - 3248 , - 661 , - 1270 , - 5827 , - 44 , - 2721 , - 5586 , - 3375 , - 5864 , - 1773 , - 878 , - 3931 , - 2660 , - 3833 , - 5194 , - 1479 , - 2464 , - 2885 , - 486 , - 2035 , - 5276 , - 4945 , - 4802 , - 5599 , - 5080 , - 3997 , - 94 , - 139 , - 1876 , - 41 , - 4410 , - 3703 , - 1680 , - 5109 , - 5718 , - 4259 , - 4492 , - 1153 , - 4018 , - 1807 , - 4296 , - 205 , - 5326 , - 2363 , - 1092 , - 2265 , - 3626 , - 5927 , - 896 , - 1317 , - 4934 , - 467 , - 3708 , - 3377 , - 3234 , - 4031 , - 3512 , - 2429 , - 4542 , - 4587 , - 308 , - 4489 , - 2842 , - 2135 , - 112 , - 3541 , - 4150 , - 2691 , - 2924 , - 5601 , - 2450 , - 239 , - 2728 , - 4653 , - 3758 , - 795 , - 5540 , - 697 , - 2058 , - 4359 , - 5344 , - 5765 , - 3366 , - 4915 , - 2140 , - 1809 , - 1666 , - 2463 , - 1944 , - 861 , - 2974 , - 3019 , - 4756 , - 2921 , - 1274 , - 567 , - 4560 , - 1973 , - 2582 , - 1123 , - 1356 , - 4033 , - 882 , - 4687 , - 1160 , - 3085 , - 2190 , - 5243 , - 3972 , - 5145 , - 490 , - 2791 , - 3776 , - 4197 , - 1798 , - 3347 , - 572 , - 241 , - 98 , - 895 , - 376 , - 5309 , - 1406 , - 1451 , - 3188 , - 1353 , - 5722 , - 5015 , - 2992 , - 405 , - 1014 , - 5571 , - 5804 , - 2465 , - 5330 , - 3119 , - 5608 , - 1517 , - 622 , - 3675 , - 2404 , - 3577 , - 4938 , - 1223 , - 2208 , - 2629 , - 230 , - 1779 , - 5020 , - 4689 , - 4546 , - 5343 , - 4824 , - 3741 , - 5854 , - 5899 , - 1620 , - 5801 , - 4154 , - 3447 , - 1424 , - 4853 , - 5462 , - 4003 , - 4236 , - 897 , - 3762 , - 1551 , - 4040 , - 5965 , - 5070 , - 2107 , - 836 , - 2009 , - 3370 , - 5671 , - 640 , - 1061 , - 4678 , - 211 , - 3452 , - 3121 , - 2978 , - 3775 , - 3256 , - 2173 , - 4286 , - 4331 , - 52 , - 4233 , - 2586 , - 1879 , - 5872 , - 3285 , - 3894 , - 2435 , - 2668 , - 5345 , - 2194 , - 5999 , - 2472 , - 4397 , - 3502 , - 539 , - 5284 , - 441 , - 1802 , - 4103 , - 5088 , - 5509 , - 3110 , - 4659 , - 1884 , - 1553 , - 1410 , - 2207 , - 1688 , - 605 , - 2718 , - 2763 , - 4500 , - 2665 , - 1018 , - 311 , - 4304 , - 1717 , - 2326 , - 867 , - 1100 , - 3777 , - 626 , - 4431 , - 904 , - 2829 , - 1934 , - 4987 , - 3716 , - 4889 , - 234 , - 2535 , - 3520 , - 3941 , - 1542 , - 3091 , - 316 , - 6001 , - 5858 , - 639 , - 120 , - 5053 , - 1150 , - 1195 , - 2932 , - 1097 , - 5466 , - 4759 , - 2736 , - 149 , - 758 , - 5315 , - 5548 , - 2209 , - 5074 , - 2863 , - 5352 , - 1261 , - 366 , - 3419 , - 2148 , - 3321 , - 4682 , - 967 , - 1952 , - 2373 , - 5990 , - 1523 , - 4764 , - 4433 , - 4290 , - 5087 , - 4568 , - 3485 , - 5598 , - 5643 , - 1364 , - 5545 , - 3898 , - 3191 , - 1168 , - 4597 , - 5206 , - 3747 , - 3980 , - 641 , - 3506 , - 1295 , - 3784 , - 5709 , - 4814 , - 1851 , - 580 , - 1753 , - 3114 , - 5415 , - 384 , - 805 , - 4422 , - 5971 , - 3196 , - 2865 , - 2722 , - 3519 , - 3000 , - 1917 , - 4030 , - 4075 , - 5812 , - 3977 , - 2330 , - 1623 , - 5616 , - 3029 , - 3638 , - 2179 , - 2412 , - 5089 , - 1938 , - 5743 , - 2216 , - 4141 , - 3246 , - 283 , - 5028 , - 185 , - 1546 , - 3847 , - 4832 , - 5253 , - 2854 , - 4403 , - 1628 , - 1297 , - 1154 , - 1951 , - 1432 , - 349 , - 2462 , - 2507 , - 4244 , - 2409 , - 762 , - 55 , - 4048 , - 1461 , - 2070 , - 611 , - 844 , - 3521 , - 370 , - 4175 , - 648 , - 2573 , - 1678 , - 4731 , - 3460 , - 4633 , - 5994 , - 2279 , - 3264 , - 3685 , - 1286 , - 2835 , - 60 , - 5745 , - 5602 , - 383 , - 5880 , - 4797 , - 894 , - 939 , - 2676 , - 841 , - 5210 , - 4503 , - 2480 , - 5909 , - 502 , - 5059 , - 5292 , - 1953 , - 4818 , - 2607 , - 5096 , - 1005 , - 110 , - 3163 , - 1892 , - 3065 , - 4426 , - 711 , - 1696 , - 2117 , - 5734 , - 1267 , - 4508 , - 4177 , - 4034 , - 4831 , - 4312 , - 3229 , - 5342 , - 5387 , - 1108 , - 5289 , - 3642 , - 2935 , - 912 , - 4341 , - 4950 , - 3491 , - 3724 , - 385 , - 3250 , - 1039 , - 3528 , - 5453 , - 4558 , - 1595 , - 324 , - 1497 , - 2858 , - 5159 , - 128 , - 549 , - 4166 , - 5715 , - 2940 , - 2609 , - 2466 , - 3263 , - 2744 , - 1661 , - 3774 , - 3819 , - 5556 , - 3721 , - 2074 , - 1367 , - 5360 , - 2773 , - 3382 , - 1923 , - 2156 , - 4833 , - 1682 , - 5487 , - 1960 , - 3885 , - 2990 , - 27 , - 4772 , - 5945 , - 1290 , - 3591 , - 4576 , - 4997 , - 2598 , - 4147 , - 1372 , - 1041 , - 898 , - 1695 , - 1176 , - 93 , - 2206 , - 2251 , - 3988 , - 2153 , - 506 , - 5815 , - 3792 , - 1205 , - 1814 , - 355 , - 588 , - 3265 , - 114 , - 3919 , - 392 , - 2317 , - 1422 , - 4475 , - 3204 , - 4377 , - 5738 , - 2023 , - 3008 , - 3429 , - 1030 , - 2579 , - 5820 , - 5489 , - 5346 , - 127 , - 5624 , - 4541 , - 638 , - 683 , - 2420 , - 585 , - 4954 , - 4247 , - 2224 , - 5653 , - 246 , - 4803 , - 5036 , - 1697 , - 4562 , - 2351 , - 4840 , - 749 , - 5870 , - 2907 , - 1636 , - 2809 , - 4170 , - 455 , - 1440 , - 1861 , - 5478 , - 1011 , - 4252 , - 3921 , - 3778 , - 4575 , - 4056 , - 2973 , - 5086 , - 5131 , - 852 , - 5033 , - 3386 , - 2679 , - 656 , - 4085 , - 4694 , - 3235 , - 3468 , - 129 , - 2994 , - 783 , - 3272 , - 5197 , - 4302 , - 1339 , - 68 , - 1241 , - 2602 , - 4903 , - 5888 , - 293 , - 3910 , - 5459 , - 2684 , - 2353 , - 2210 , - 3007 , - 2488 , - 1405 , - 3518 , - 3563 , - 5300 , - 3465 , - 1818 , - 1111 , - 5104 , - 2517 , - 3126 , - 1667 , - 1900 , - 4577 , - 1426 , - 5231 , - 1704 , - 3629 , - 2734 , - 5787 , - 4516 , - 5689 , - 1034 , - 3335 , - 4320 , - 4741 , - 2342 , - 3891 , - 1116 , - 785 , - 642 , - 1439 , - 920 , - 5853 , - 1950 , - 1995 , - 3732 , - 1897 , - 250 , - 5559 , - 3536 , - 949 , - 1558 , - 99 , - 332 , - 3009 , - 5874 , - 3663 , - 136 , - 2061 , - 1166 , - 4219 , - 2948 , - 4121 , - 5482 , - 1767 , - 2752 , - 3173 , - 774 , - 2323 , - 5564 , - 5233 , - 5090 , - 5887 , - 5368 , - 4285 , - 382 , - 427 , - 2164 , - 329 , - 4698 , - 3991 , - 1968 , - 5397 , - 6006 , - 4547 , - 4780 , - 1441 , - 4306 , - 2095 , - 4584 , - 493 , - 5614 , - 2651 , - 1380 , - 2553 , - 3914 , - 199 , - 1184 , - 1605 , - 5222 , - 755 , - 3996 , - 3665 , - 3522 , - 4319 , - 3800 , - 2717 , - 4830 , - 4875 , - 596 , - 4777 , - 3130 , - 2423 , - 400 , - 3829 , - 4438 , - 2979 , - 3212 , - 5889 , - 2738 , - 527 , - 3016 , - 4941 , - 4046 , - 1083 , - 5828 , - 985 , - 2346 , - 4647 , - 5632 , - 37 , - 3654 , - 5203 , - 2428 , - 2097 , - 1954 , - 2751 , - 2232 , - 1149 , - 3262 , - 3307 , - 5044 , - 3209 , - 1562 , - 855 , - 4848 , - 2261 , - 2870 , - 1411 , - 1644 , - 4321 , - 1170 , - 4975 , - 1448 , - 3373 , - 2478 , - 5531 , - 4260 , - 5433 , - 778 , - 3079 , - 4064 , - 4485 , - 2086 , - 3635 , - 860 , - 529 , - 386 , - 1183 , - 664 , - 5597 , - 1694 , - 1739 , - 3476 , - 1641 , - 6010 , - 5303 , - 3280 , - 693 , - 1302 , - 5859 , - 76 , - 2753 , - 5618 , - 3407 , - 5896 , - 1805 , - 910 , - 3963 , - 2692 , - 3865 , - 5226 , - 1511 , - 2496 , - 2917 , - 518 , - 2067 , - 5308 , - 4977 , - 4834 , - 5631 , - 5112 , - 4029 , - 126 , - 171 , - 1908 , - 73 , - 4442 , - 3735 , - 1712 , - 5141 , - 5750 , - 4291 , - 4524 , - 1185 , - 4050 , - 1839 , - 4328 , - 237 , - 5358 , - 2395 , - 1124 , - 2297 , - 3658 , - 5959 , - 928 , - 1349 , - 4966 , - 499 , - 3740 , - 3409 , - 3266 , - 4063 , - 3544 , - 2461 , - 4574 , - 4619 , - 340 , - 4521 , - 2874 , - 2167 , - 144 , - 3573 , - 4182 , - 2723 , - 2956 , - 5633 , - 2482 , - 271 , - 2760 , - 4685 , - 3790 , - 827 , - 5572 , - 729 , - 2090 , - 4391 , - 5376 , - 5797 , - 3398 , - 4947 , - 2172 , - 1841 , - 1698 , - 2495 , - 1976 , - 893 , - 3006 , - 3051 , - 4788 , - 2953 , - 1306 , - 599 , - 4592 , - 2005 , - 2614 , - 1155 , - 1388 , - 4065 , - 914 , - 4719 , - 1192 , - 3117 , - 2222 , - 5275 , - 4004 , - 5177 , - 522 , - 2823 , - 3808 , - 4229 , - 1830 , - 3379 , - 604 , - 273 , - 130 , - 927 , - 408 , - 5341 , - 1438 , - 1483 , - 3220 , - 1385 , - 5754 , - 5047 , - 3024 , - 437 , - 1046 , - 5603 , - 5836 , - 2497 , - 5362 , - 3151 , - 5640 , - 1549 , - 654 , - 3707 , - 2436 , - 3609 , - 4970 , - 1255 , - 2240 , - 2661 , - 262 , - 1811 , - 5052 , - 4721 , - 4578 , - 5375 , - 4856 , - 3773 , - 5886 , - 5931 , - 1652 , - 5833 , - 4186 , - 3479 , - 1456 , - 4885 , - 5494 , - 4035 , - 4268 , - 929 , - 3794 , - 1583 , - 4072 , - 5997 , - 5102 , - 2139 , - 868 , - 2041 , - 3402 , - 5703 , - 672 , - 1093 , - 4710 , - 243 , - 3484 , - 3153 , - 3010 , - 3807 , - 3288 , - 2205 , - 4318 , - 4363 , - 84 , - 4265 , - 2618 , - 1911 , - 5904 , - 3317 , - 3926 , - 2467 , - 2700 , - 5377 , - 2226 , - 15 , - 2504 , - 4429 , - 3534 , - 571 , - 5316 , - 473 , - 1834 , - 4135 , - 5120 , - 5541 , - 3142 , - 4691 , - 1916 , - 1585 , - 1442 , - 2239 , - 1720 , - 637 , - 2750 , - 2795 , - 4532 , - 2697 , - 1050 , - 343 , - 4336 , - 1749 , - 2358 , - 899 , - 1132 , - 3809 , - 658 , - 4463 , - 936 , - 2861 , - 1966 , - 5019 , - 3748 , - 4921 , - 266 , - 2567 , - 3552 , - 3973 , - 1574 , - 3123 , - 348 , - 17 , - 5890 , - 671 , - 152 , - 5085 , - 1182 , - 1227 , - 2964 , - 1129 , - 5498 , - 4791 , - 2768 , - 181 , - 790 , - 5347 , - 5580 , - 2241 , - 5106 , - 2895 , - 5384 , - 1293 , - 398 , - 3451 , - 2180 , - 3353 , - 4714 , - 999 , - 1984 , - 2405 , - 6 , - 1555 , - 4796 , - 4465 , - 4322 , - 5119 , - 4600 , - 3517 , - 5630 , - 5675 , - 1396 , - 5577 , - 3930 , - 3223 , - 1200 , - 4629 , - 5238 , - 3779 , - 4012 , - 673 , - 3538 , - 1327 , - 3816 , - 5741 , - 4846 , - 1883 , - 612 , - 1785 , - 3146 , - 5447 , - 416 , - 837 , - 4454 , - 6003 , - 3228 , - 2897 , - 2754 , - 3551 , - 3032 , - 1949 , - 4062 , - 4107 , - 5844 , - 4009 , - 2362 , - 1655 , - 5648 , - 3061 , - 3670 , - 2211 , - 2444 , - 5121 , - 1970 , - 5775 , - 2248 , - 4173 , - 3278 , - 315 , - 5060 , - 217 , - 1578 , - 3879 , - 4864 , - 5285 , - 2886 , - 4435 , - 1660 , - 1329 , - 1186 , - 1983 , - 1464 , - 381 , - 2494 , - 2539 , - 4276 , - 2441 , - 794 , - 87 , - 4080 , - 1493 , - 2102 , - 643 , - 876 , - 3553 , - 402 , - 4207 , - 680 , - 2605 , - 1710 , - 4763 , - 3492 , - 4665 , - 10 , - 2311 , - 3296 , - 3717 , - 1318 , - 2867 , - 92 , - 5777 , - 5634 , - 415 , - 5912 , - 4829 , - 926 , - 971 , - 2708 , - 873 , - 5242 , - 4535 , - 2512 , - 5941 , - 534 , - 5091 , - 5324 , - 1985 , - 4850 , - 2639 , - 5128 , - 1037 , - 142 , - 3195 , - 1924 , - 3097 , - 4458 , - 743 , - 1728 , - 2149 , - 5766 , - 1299 , - 4540 , - 4209 , - 4066 , - 4863 , - 4344 , - 3261 , - 5374 , - 5419 , - 1140 , - 5321 , - 3674 , - 2967 , - 944 , - 4373 , - 4982 , - 3523 , - 3756 , - 417 , - 3282 , - 1071 , - 3560 , - 5485 , - 4590 , - 1627 , - 356 , - 1529 , - 2890 , - 5191 , - 160 , - 581 , - 4198 , - 5747 , - 2972 , - 2641 , - 2498 , - 3295 , - 2776 , - 1693 , - 3806 , - 3851 , - 5588 , - 3753 , - 2106 , - 1399 , - 5392 , - 2805 , - 3414 , - 1955 , - 2188 , - 4865 , - 1714 , - 5519 , - 1992 , - 3917 , - 3022 , - 59 , - 4804 , - 5977 , - 1322 , - 3623 , - 4608 , - 5029 , - 2630 , - 4179 , - 1404 , - 1073 , - 930 , - 1727 , - 1208 , - 125 , - 2238 , - 2283 , - 4020 , - 2185 , - 538 , - 5847 , - 3824 , - 1237 , - 1846 , - 387 , - 620 , - 3297 , - 146 , - 3951 , - 424 , - 2349 , - 1454 , - 4507 , - 3236 , - 4409 , - 5770 , - 2055 , - 3040 , - 3461 , - 1062 , - 2611 , - 5852 , - 5521 , - 5378 , - 159 , - 5656 , - 4573 , - 670 , - 715 , - 2452 , - 617 , - 4986 , - 4279 , - 2256 , - 5685 , - 278 , - 4835 , - 5068 , - 1729 , - 4594 , - 2383 , - 4872 , - 781 , - 5902 , - 2939 , - 1668 , - 2841 , - 4202 , - 487 , - 1472 , - 1893 , - 5510 , - 1043 , - 4284 , - 3953 , - 3810 , - 4607 , - 4088 , - 3005 , - 5118 , - 5163 , - 884 , - 5065 , - 3418 , - 2711 , - 688 , - 4117 , - 4726 , - 3267 , - 3500 , - 161 , - 3026 , - 815 , - 3304 , - 5229 , - 4334 , - 1371 , - 100 , - 1273 , - 2634 , - 4935 , - 5920 , - 325 , - 3942 , - 5491 , - 2716 , - 2385 , - 2242 , - 3039 , - 2520 , - 1437 , - 3550 , - 3595 , - 5332 , - 3497 , - 1850 , - 1143 , - 5136 , - 2549 , - 3158 , - 1699 , - 1932 , - 4609 , - 1458 , - 5263 , - 1736 , - 3661 , - 2766 , - 5819 , - 4548 , - 5721 , - 1066 , - 3367 , - 4352 , - 4773 , - 2374 , - 3923 , - 1148 , - 817 , - 674 , - 1471 , - 952 , - 5885 , - 1982 , - 2027 , - 3764 , - 1929 , - 282 , - 5591 , - 3568 , - 981 , - 1590 , - 131 , - 364 , - 3041 , - 5906 , - 3695 , - 168 , - 2093 , - 1198 , - 4251 , - 2980 , - 4153 , - 5514 , - 1799 , - 2784 , - 3205 , - 806 , - 2355 , - 5596 , - 5265 , - 5122 , - 5919 , - 5400 , - 4317 , - 414 , - 459 , - 2196 , - 361 , - 4730 , - 4023 , - 2000 , - 5429 , - 22 , - 4579 , - 4812 , - 1473 , - 4338 , - 2127 , - 4616 , - 525 , - 5646 , - 2683 , - 1412 , - 2585 , - 3946 , - 231 , - 1216 , - 1637 , - 5254 , - 787 , - 4028 , - 3697 , - 3554 , - 4351 , - 3832 , - 2749 , - 4862 , - 4907 , - 628 , - 4809 , - 3162 , - 2455 , - 432 , - 3861 , - 4470 , - 3011 , - 3244 , - 5921 , - 2770 , - 559 , - 3048 , - 4973 , - 4078 , - 1115 , - 5860 , - 1017 , - 2378 , - 4679 , - 5664 , - 69 , - 3686 , - 5235 , - 2460 , - 2129 , - 1986 , - 2783 , - 2264 , - 1181 , - 3294 , - 3339 , - 5076 , - 3241 , - 1594 , - 887 , - 4880 , - 2293 , - 2902 , - 1443 , - 1676 , - 4353 , - 1202 , - 5007 , - 1480 , - 3405 , - 2510 , - 5563 , - 4292 , - 5465 , - 810 , - 3111 , - 4096 , - 4517 , - 2118 , - 3667 , - 892 , - 561 , - 418 , - 1215 , - 696 , - 5629 , - 1726 , - 1771 , - 3508 , - 1673 , - 26 , - 5335 , - 3312 , - 725 , - 1334 , - 5891 , - 108 , - 2785 , - 5650 , - 3439 , - 5928 , - 1837 , - 942 , - 3995 , - 2724 , - 3897 , - 5258 , - 1543 , - 2528 , - 2949 , - 550 , - 2099 , - 5340 , - 5009 , - 4866 , - 5663 , - 5144 , - 4061 , - 158 , - 203 , - 1940 , - 105 , - 4474 , - 3767 , - 1744 , - 5173 , - 5782 , - 4323 , - 4556 , - 1217 , - 4082 , - 1871 , - 4360 , - 269 , - 5390 , - 2427 , - 1156 , - 2329 , - 3690 , - 5991 , - 960 , - 1381 , - 4998 , - 531 , - 3772 , - 3441 , - 3298 , - 4095 , - 3576 , - 2493 , - 4606 , - 4651 , - 372 , - 4553 , - 2906 , - 2199 , - 176 , - 3605 , - 4214 , - 2755 , - 2988 , - 5665 , - 2514 , - 303 , - 2792 , - 4717 , - 3822 , - 859 , - 5604 , - 761 , - 2122 , - 4423 , - 5408 , - 5829 , - 3430 , - 4979 , - 2204 , - 1873 , - 1730 , - 2527 , - 2008 , - 925 , - 3038 , - 3083 , - 4820 , - 2985 , - 1338 , - 631 , - 4624 , - 2037 , - 2646 , - 1187 , - 1420 , - 4097 , - 946 , - 4751 , - 1224 , - 3149 , - 2254 , - 5307 , - 4036 , - 5209 , - 554 , - 2855 , - 3840 , - 4261 , - 1862 , - 3411 , - 636 , - 305 , - 162 , - 959 , - 440 , - 5373 , - 1470 , - 1515 , - 3252 , - 1417 , - 5786 , - 5079 , - 3056 , - 469 , - 1078 , - 5635 , - 5868 , - 2529 , - 5394 , - 3183 , - 5672 , - 1581 , - 686 , - 3739 , - 2468 , - 3641 , - 5002 , - 1287 , - 2272 , - 2693 , - 294 , - 1843 , - 5084 , - 4753 , - 4610 , - 5407 , - 4888 , - 3805 , - 5918 , - 5963 , - 1684 , - 5865 , - 4218 , - 3511 , - 1488 , - 4917 , - 5526 , - 4067 , - 4300 , - 961 , - 3826 , - 1615 , - 4104 , - 13 , - 5134 , - 2171 , - 900 , - 2073 , - 3434 , - 5735 , - 704 , - 1125 , - 4742 , - 275 , - 3516 , - 3185 , - 3042 , - 3839 , - 3320 , - 2237 , - 4350 , - 4395 , - 116 , - 4297 , - 2650 , - 1943 , - 5936 , - 3349 , - 3958 , - 2499 , - 2732 , - 5409 , - 2258 , - 47 , - 2536 , - 4461 , - 3566 , - 603 , - 5348 , - 505 , - 1866 , - 4167 , - 5152 , - 5573 , - 3174 , - 4723 , - 1948 , - 1617 , - 1474 , - 2271 , - 1752 , - 669 , - 2782 , - 2827 , - 4564 , - 2729 , - 1082 , - 375 , - 4368 , - 1781 , - 2390 , - 931 , - 1164 , - 3841 , - 690 , - 4495 , - 968 , - 2893 , - 1998 , - 5051 , - 3780 , - 4953 , - 298 , - 2599 , - 3584 , - 4005 , - 1606 , - 3155 , - 380 , - 49 , - 5922 , - 703 , - 184 , - 5117 , - 1214 , - 1259 , - 2996 , - 1161 , - 5530 , - 4823 , - 2800 , - 213 , - 822 , - 5379 , - 5612 , - 2273 , - 5138 , - 2927 , - 5416 , - 1325 , - 430 , - 3483 , - 2212 , - 3385 , - 4746 , - 1031 , - 2016 , - 2437 , - 38 , - 1587 , - 4828 , - 4497 , - 4354 , - 5151 , - 4632 , - 3549 , - 5662 , - 5707 , - 1428 , - 5609 , - 3962 , - 3255 , - 1232 , - 4661 , - 5270 , - 3811 , - 4044 , - 705 , - 3570 , - 1359 , - 3848 , - 5773 , - 4878 , - 1915 , - 644 , - 1817 , - 3178 , - 5479 , - 448 , - 869 , - 4486 , - 19 , - 3260 , - 2929 , - 2786 , - 3583 , - 3064 , - 1981 , - 4094 , - 4139 , - 5876 , - 4041 , - 2394 , - 1687 , - 5680 , - 3093 , - 3702 , - 2243 , - 2476 , - 5153 , - 2002 , - 5807 , - 2280 , - 4205 , - 3310 , - 347 , - 5092 , - 249 , - 1610 , - 3911 , - 4896 , - 5317 , - 2918 , - 4467 , - 1692 , - 1361 , - 1218 , - 2015 , - 1496 , - 413 , - 2526 , - 2571 , - 4308 , - 2473 , - 826 , - 119 , - 4112 , - 1525 , - 2134 , - 675 , - 908 , - 3585 , - 434 , - 4239 , - 712 , - 2637 , - 1742 , - 4795 , - 3524 , - 4697 , - 42 , - 2343 , - 3328 , - 3749 , - 1350 , - 2899 , - 124 , - 5809 , - 5666 , - 447 , - 5944 , - 4861 , - 958 , - 1003 , - 2740 , - 905 , - 5274 , - 4567 , - 2544 , - 5973 , - 566 , - 5123 , - 5356 , - 2017 , - 4882 , - 2671 , - 5160 , - 1069 , - 174 , - 3227 , - 1956 , - 3129 , - 4490 , - 775 , - 1760 , - 2181 , - 5798 , - 1331 , - 4572 , - 4241 , - 4098 , - 4895 , - 4376 , - 3293 , - 5406 , - 5451 , - 1172 , - 5353 , - 3706 , - 2999 , - 976 , - 4405 , - 5014 , - 3555 , - 3788 , - 449 , - 3314 , - 1103 , - 3592 , - 5517 , - 4622 , - 1659 , - 388 , - 1561 , - 2922 , - 5223 , - 192 , - 613 , - 4230 , - 5779 , - 3004 , - 2673 , - 2530 , - 3327 , - 2808 , - 1725 , - 3838 , - 3883 , - 5620 , - 3785 , - 2138 , - 1431 , - 5424 , - 2837 , - 3446 , - 1987 , - 2220 , - 4897 , - 1746 , - 5551 , - 2024 , - 3949 , - 3054 , - 91 , - 4836 , - 6009 , - 1354 , - 3655 , - 4640 , - 5061 , - 2662 , - 4211 , - 1436 , - 1105 , - 962 , - 1759 , - 1240 , - 157 , - 2270 , - 2315 , - 4052 , - 2217 , - 570 , - 5879 , - 3856 , - 1269 , - 1878 , - 419 , - 652 , - 3329 , - 178 , - 3983 , - 456 , - 2381 , - 1486 , - 4539 , - 3268 , - 4441 , - 5802 , - 2087 , - 3072 , - 3493 , - 1094 , - 2643 , - 5884 , - 5553 , - 5410 , - 191 , - 5688 , - 4605 , - 702 , - 747 , - 2484 , - 649 , - 5018 , - 4311 , - 2288 , - 5717 , - 310 , - 4867 , - 5100 , - 1761 , - 4626 , - 2415 , - 4904 , - 813 , - 5934 , - 2971 , - 1700 , - 2873 , - 4234 , - 519 , - 1504 , - 1925 , - 5542 , - 1075 , - 4316 , - 3985 , - 3842 , - 4639 , - 4120 , - 3037 , - 5150 , - 5195 , - 916 , - 5097 , - 3450 , - 2743 , - 720 , - 4149 , - 4758 , - 3299 , - 3532 , - 193 , - 3058 , - 847 , - 3336 , - 5261 , - 4366 , - 1403 , - 132 , - 1305 , - 2666 , - 4967 , - 5952 , - 357 , - 3974 , - 5523 , - 2748 , - 2417 , - 2274 , - 3071 , - 2552 , - 1469 , - 3582 , - 3627 , - 5364 , - 3529 , - 1882 , - 1175 , - 5168 , - 2581 , - 3190 , - 1731 , - 1964 , - 4641 , - 1490 , - 5295 , - 1768 , - 3693 , - 2798 , - 5851 , - 4580 , - 5753 , - 1098 , - 3399 , - 4384 , - 4805 , - 2406 , - 3955 , - 1180 , - 849 , - 706 , - 1503 , - 984 , - 5917 , - 2014 , - 2059 , - 3796 , - 1961 , - 314 , - 5623 , - 3600 , - 1013 , - 1622 , - 163 , - 396 , - 3073 , - 5938 , - 3727 , - 200 , - 2125 , - 1230 , - 4283 , - 3012 , - 4185 , - 5546 , - 1831 , - 2816 , - 3237 , - 838 , - 2387 , - 5628 , - 5297 , - 5154 , - 5951 , - 5432 , - 4349 , - 446 , - 491 , - 2228 , - 393 , - 4762 , - 4055 , - 2032 , - 5461 , - 54 , - 4611 , - 4844 , - 1505 , - 4370 , - 2159 , - 4648 , - 557 , - 5678 , - 2715 , - 1444 , - 2617 , - 3978 , - 263 , - 1248 , - 1669 , - 5286 , - 819 , - 4060 , - 3729 , - 3586 , - 4383 , - 3864 , - 2781 , - 4894 , - 4939 , - 660 , - 4841 , - 3194 , - 2487 , - 464 , - 3893 , - 4502 , - 3043 , - 3276 , - 5953 , - 2802 , - 591 , - 3080 , - 5005 , - 4110 , - 1147 , - 5892 , - 1049 , - 2410 , - 4711 , - 5696 , - 101 , - 3718 , - 5267 , - 2492 , - 2161 , - 2018 , - 2815 , - 2296 , - 1213 , - 3326 , - 3371 , - 5108 , - 3273 , - 1626 , - 919 , - 4912 , - 2325 , - 2934 , - 1475 , - 1708 , - 4385 , - 1234 , - 5039 , - 1512 , - 3437 , - 2542 , - 5595 , - 4324 , - 5497 , - 842 , - 3143 , - 4128 , - 4549 , - 2150 , - 3699 , - 924 , - 593 , - 450 , - 1247 , - 728 , - 5661 , - 1758 , - 1803 , - 3540 , - 1705 , - 58 , - 5367 , - 3344 , - 757 , - 1366 , - 5923 , - 140 , - 2817 , - 5682 , - 3471 , - 5960 , - 1869 , - 974 , - 4027 , - 2756 , - 3929 , - 5290 , - 1575 , - 2560 , - 2981 , - 582 , - 2131 , - 5372 , - 5041 , - 4898 , - 5695 , - 5176 , - 4093 , - 190 , - 235 , - 1972 , - 137 , - 4506 , - 3799 , - 1776 , - 5205 , - 5814 , - 4355 , - 4588 , - 1249 , - 4114 , - 1903 , - 4392 , - 301 , - 5422 , - 2459 , - 1188 , - 2361 , - 3722 , - 7 , - 992 , - 1413 , - 5030 , - 563 , - 3804 , - 3473 , - 3330 , - 4127 , - 3608 , - 2525 , - 4638 , - 4683 , - 404 , - 4585 , - 2938 , - 2231 , - 208 , - 3637 , - 4246 , - 2787 , - 3020 , - 5697 , - 2546 , - 335 , - 2824 , - 4749 , - 3854 , - 891 , - 5636 , - 793 , - 2154 , - 4455 , - 5440 , - 5861 , - 3462 , - 5011 , - 2236 , - 1905 , - 1762 , - 2559 , - 2040 , - 957 , - 3070 , - 3115 , - 4852 , - 3017 , - 1370 , - 663 , - 4656 , - 2069 , - 2678 , - 1219 , - 1452 , - 4129 , - 978 , - 4783 , - 1256 , - 3181 , - 2286 , - 5339 , - 4068 , - 5241 , - 586 , - 2887 , - 3872 , - 4293 , - 1894 , - 3443 , - 668 , - 337 , - 194 , - 991 , - 472 , - 5405 , - 1502 , - 1547 , - 3284 , - 1449 , - 5818 , - 5111 , - 3088 , - 501 , - 1110 , - 5667 , - 5900 , - 2561 , - 5426 , - 3215 , - 5704 , - 1613 , - 718 , - 3771 , - 2500 , - 3673 , - 5034 , - 1319 , - 2304 , - 2725 , - 326 , - 1875 , - 5116 , - 4785 , - 4642 , - 5439 , - 4920 , - 3837 , - 5950 , - 5995 , - 1716 , - 5897 , - 4250 , - 3543 , - 1520 , - 4949 , - 5558 , - 4099 , - 4332 , - 993 , - 3858 , - 1647 , - 4136 , - 45 , - 5166 , - 2203 , - 932 , - 2105 , - 3466 , - 5767 , - 736 , - 1157 , - 4774 , - 307 , - 3548 , - 3217 , - 3074 , - 3871 , - 3352 , - 2269 , - 4382 , - 4427 , - 148 , - 4329 , - 2682 , - 1975 , - 5968 , - 3381 , - 3990 , - 2531 , - 2764 , - 5441 , - 2290 , - 79 , - 2568 , - 4493 , - 3598 , - 635 , - 5380 , - 537 , - 1898 , - 4199 , - 5184 , - 5605 , - 3206 , - 4755 , - 1980 , - 1649 , - 1506 , - 2303 , - 1784 , - 701 , - 2814 , - 2859 , - 4596 , - 2761 , - 1114 , - 407 , - 4400 , - 1813 , - 2422 , - 963 , - 1196 , - 3873 , - 722 , - 4527 , - 1000 , - 2925 , - 2030 , - 5083 , - 3812 , - 4985 , - 330 , - 2631 , - 3616 , - 4037 , - 1638 , - 3187 , - 412 , - 81 , - 5954 , - 735 , - 216 , - 5149 , - 1246 , - 1291 , - 3028 , - 1193 , - 5562 , - 4855 , - 2832 , - 245 , - 854 , - 5411 , - 5644 , - 2305 , - 5170 , - 2959 , - 5448 , - 1357 , - 462 , - 3515 , - 2244 , - 3417 , - 4778 , - 1063 , - 2048 , - 2469 , - 70 , - 1619 , - 4860 , - 4529 , - 4386 , - 5183 , - 4664 , - 3581 , - 5694 , - 5739 , - 1460 , - 5641 , - 3994 , - 3287 , - 1264 , - 4693 , - 5302 , - 3843 , - 4076 , - 737 , - 3602 , - 1391 , - 3880 , - 5805 , - 4910 , - 1947 , - 676 , - 1849 , - 3210 , - 5511 , - 480 , - 901 , - 4518 , - 51 , - 3292 , - 2961 , - 2818 , - 3615 , - 3096 , - 2013 , - 4126 , - 4171 , - 5908 , - 4073 , - 2426 , - 1719 , - 5712 , - 3125 , - 3734 , - 2275 , - 2508 , - 5185 , - 2034 , - 5839 , - 2312 , - 4237 , - 3342 , - 379 , - 5124 , - 281 , - 1642 , - 3943 , - 4928 , - 5349 , - 2950 , - 4499 , - 1724 , - 1393 , - 1250 , - 2047 , - 1528 , - 445 , - 2558 , - 2603 , - 4340 , - 2505 , - 858 , - 151 , - 4144 , - 1557 , - 2166 , - 707 , - 940 , - 3617 , - 466 , - 4271 , - 744 , - 2669 , - 1774 , - 4827 , - 3556 , - 4729 , - 74 , - 2375 , - 3360 , - 3781 , - 1382 , - 2931 , - 156 , - 5841 , - 5698 , - 479 , - 5976 , - 4893 , - 990 , - 1035 , - 2772 , - 937 , - 5306 , - 4599 , - 2576 , - 6005 , - 598 , - 5155 , - 5388 , - 2049 , - 4914 , - 2703 , - 5192 , - 1101 , - 206 , - 3259 , - 1988 , - 3161 , - 4522 , - 807 , - 1792 , - 2213 , - 5830 , - 1363 , - 4604 , - 4273 , - 4130 , - 4927 , - 4408 , - 3325 , - 5438 , - 5483 , - 1204 , - 5385 , - 3738 , - 3031 , - 1008 , - 4437 , - 5046 , - 3587 , - 3820 , - 481 , - 3346 , - 1135 , - 3624 , - 5549 , - 4654 , - 1691 , - 420 , - 1593 , - 2954 , - 5255 , - 224 , - 645 , - 4262 , - 5811 , - 3036 , - 2705 , - 2562 , - 3359 , - 2840 , - 1757 , - 3870 , - 3915 , - 5652 , - 3817 , - 2170 , - 1463 , - 5456 , - 2869 , - 3478 , - 2019 , - 2252 , - 4929 , - 1778 , - 5583 , - 2056 , - 3981 , - 3086 , - 123 , - 4868 , - 25 , - 1386 , - 3687 , - 4672 , - 5093 , - 2694 , - 4243 , - 1468 , - 1137 , - 994 , - 1791 , - 1272 , - 189 , - 2302 , - 2347 , - 4084 , - 2249 , - 602 , - 5911 , - 3888 , - 1301 , - 1910 , - 451 , - 684 , - 3361 , - 210 , - 4015 , - 488 , - 2413 , - 1518 , - 4571 , - 3300 , - 4473 , - 5834 , - 2119 , - 3104 , - 3525 , - 1126 , - 2675 , - 5916 , - 5585 , - 5442 , - 223 , - 5720 , - 4637 , - 734 , - 779 , - 2516 , - 681 , - 5050 , - 4343 , - 2320 , - 5749 , - 342 , - 4899 , - 5132 , - 1793 , - 4658 , - 2447 , - 4936 , - 845 , - 5966 , - 3003 , - 1732 , - 2905 , - 4266 , - 551 , - 1536 , - 1957 , - 5574 , - 1107 , - 4348 , - 4017 , - 3874 , - 4671 , - 4152 , - 3069 , - 5182 , - 5227 , - 948 , - 5129 , - 3482 , - 2775 , - 752 , - 4181 , - 4790 , - 3331 , - 3564 , - 225 , - 3090 , - 879 , - 3368 , - 5293 , - 4398 , - 1435 , - 164 , - 1337 , - 2698 , - 4999 , - 5984 , - 389 , - 4006 , - 5555 , - 2780 , - 2449 , - 2306 , - 3103 , - 2584 , - 1501 , - 3614 , - 3659 , - 5396 , - 3561 , - 1914 , - 1207 , - 5200 , - 2613 , - 3222 , - 1763 , - 1996 , - 4673 , - 1522 , - 5327 , - 1800 , - 3725 , - 2830 , - 5883 , - 4612 , - 5785 , - 1130 , - 3431 , - 4416 , - 4837 , - 2438 , - 3987 , - 1212 , - 881 , - 738 , - 1535 , - 1016 , - 5949 , - 2046 , - 2091 , - 3828 , - 1993 , - 346 , - 5655 , - 3632 , - 1045 , - 1654 , - 195 , - 428 , - 3105 , - 5970 , - 3759 , - 232 , - 2157 , - 1262 , - 4315 , - 3044 , - 4217 , - 5578 , - 1863 , - 2848 , - 3269 , - 870 , - 2419 , - 5660 , - 5329 , - 5186 , - 5983 , - 5464 , - 4381 , - 478 , - 523 , - 2260 , - 425 , - 4794 , - 4087 , - 2064 , - 5493 , - 86 , - 4643 , - 4876 , - 1537 , - 4402 , - 2191 , - 4680 , - 589 , - 5710 , - 2747 , - 1476 , - 2649 , - 4010 , - 295 , - 1280 , - 1701 , - 5318 , - 851 , - 4092 , - 3761 , - 3618 , - 4415 , - 3896 , - 2813 , - 4926 , - 4971 , - 692 , - 4873 , - 3226 , - 2519 , - 496 , - 3925 , - 4534 , - 3075 , - 3308 , - 5985 , - 2834 , - 623 , - 3112 , - 5037 , - 4142 , - 1179 , - 5924 , - 1081 , - 2442 , - 4743 , - 5728 , - 133 , - 3750 , - 5299 , - 2524 , - 2193 , - 2050 , - 2847 , - 2328 , - 1245 , - 3358 , - 3403 , - 5140 , - 3305 , - 1658 , - 951 , - 4944 , - 2357 , - 2966 , - 1507 , - 1740 , - 4417 , - 1266 , - 5071 , - 1544 , - 3469 , - 2574 , - 5627 , - 4356 , - 5529 , - 874 , - 3175 , - 4160 , - 4581 , - 2182 , - 3731 , - 956 , - 625 , - 482 , - 1279 , - 760 , - 5693 , - 1790 , - 1835 , - 3572 , - 1737 , - 90 , - 5399 , - 3376 , - 789 , - 1398 , - 5955 , - 172 , - 2849 , - 5714 , - 3503 , - 5992 , - 1901 , - 1006 , - 4059 , - 2788 , - 3961 , - 5322 , - 1607 , - 2592 , - 3013 , - 614 , - 2163 , - 5404 , - 5073 , - 4930 , - 5727 , - 5208 , - 4125 , - 222 , - 267 , - 2004 , - 169 , - 4538 , - 3831 , - 1808 , - 5237 , - 5846 , - 4387 , - 4620 , - 1281 , - 4146 , - 1935 , - 4424 , - 333 , - 5454 , - 2491 , - 1220 , - 2393 , - 3754 , - 39 , - 1024 , - 1445 , - 5062 , - 595 , - 3836 , - 3505 , - 3362 , - 4159 , - 3640 , - 2557 , - 4670 , - 4715 , - 436 , - 4617 , - 2970 , - 2263 , - 240 , - 3669 , - 4278 , - 2819 , - 3052 , - 5729 , - 2578 , - 367 , - 2856 , - 4781 , - 3886 , - 923 , - 5668 , - 825 , - 2186 , - 4487 , - 5472 , - 5893 , - 3494 , - 5043 , - 2268 , - 1937 , - 1794 , - 2591 , - 2072 , - 989 , - 3102 , - 3147 , - 4884 , - 3049 , - 1402 , - 695 , - 4688 , - 2101 , - 2710 , - 1251 , - 1484 , - 4161 , - 1010 , - 4815 , - 1288 , - 3213 , - 2318 , - 5371 , - 4100 , - 5273 , - 618 , - 2919 , - 3904 , - 4325 , - 1926 , - 3475 , - 700 , - 369 , - 226 , - 1023 , - 504 , - 5437 , - 1534 , - 1579 , - 3316 , - 1481 , - 5850 , - 5143 , - 3120 , - 533 , - 1142 , - 5699 , - 5932 , - 2593 , - 5458 , - 3247 , - 5736 , - 1645 , - 750 , - 3803 , - 2532 , - 3705 , - 5066 , - 1351 , - 2336 , - 2757 , - 358 , - 1907 , - 5148 , - 4817 , - 4674 , - 5471 , - 4952 , - 3869 , - 5982 , - 11 , - 1748 , - 5929 , - 4282 , - 3575 , - 1552 , - 4981 , - 5590 , - 4131 , - 4364 , - 1025 , - 3890 , - 1679 , - 4168 , - 77 , - 5198 , - 2235 , - 964 , - 2137 , - 3498 , - 5799 , - 768 , - 1189 , - 4806 , - 339 , - 3580 , - 3249 , - 3106 , - 3903 , - 3384 , - 2301 , - 4414 , - 4459 , - 180 , - 4361 , - 2714 , - 2007 , - 6000 , - 3413 , - 4022 , - 2563 , - 2796 , - 5473 , - 2322 , - 111 , - 2600 , - 4525 , - 3630 , - 667 , - 5412 , - 569 , - 1930 , - 4231 , - 5216 , - 5637 , - 3238 , - 4787 , - 2012 , - 1681 , - 1538 , - 2335 , - 1816 , - 733 , - 2846 , - 2891 , - 4628 , - 2793 , - 1146 , - 439 , - 4432 , - 1845 , - 2454 , - 995 , - 1228 , - 3905 , - 754 , - 4559 , - 1032 , - 2957 , - 2062 , - 5115 , - 3844 , - 5017 , - 362 , - 2663 , - 3648 , - 4069 , - 1670 , - 3219 , - 444 , - 113 , - 5986 , - 767 , - 248 , - 5181 , - 1278 , - 1323 , - 3060 , - 1225 , - 5594 , - 4887 , - 2864 , - 277 , - 886 , - 5443 , - 5676 , - 2337 , - 5202 , - 2991 , - 5480 , - 1389 , - 494 , - 3547 , - 2276 , - 3449 , - 4810 , - 1095 , - 2080 , - 2501 , - 102 , - 1651 , - 4892 , - 4561 , - 4418 , - 5215 , - 4696 , - 3613 , - 5726 , - 5771 , - 1492 , - 5673 , - 4026 , - 3319 , - 1296 , - 4725 , - 5334 , - 3875 , - 4108 , - 769 , - 3634 , - 1423 , - 3912 , - 5837 , - 4942 , - 1979 , - 708 , - 1881 , - 3242 , - 5543 , - 512 , - 933 , - 4550 , - 83 , - 3324 , - 2993 , - 2850 , - 3647 , - 3128 , - 2045 , - 4158 , - 4203 , - 5940 , - 4105 , - 2458 , - 1751 , - 5744 , - 3157 , - 3766 , - 2307 , - 2540 , - 5217 , - 2066 , - 5871 , - 2344 , - 4269 , - 3374 , - 411 , - 5156 , - 313 , - 1674 , - 3975 , - 4960 , - 5381 , - 2982 , - 4531 , - 1756 , - 1425 , - 1282 , - 2079 , - 1560 , - 477 , - 2590 , - 2635 , - 4372 , - 2537 , - 890 , - 183 , - 4176 , - 1589 , - 2198 , - 739 , - 972 , - 3649 , - 498 , - 4303 , - 776 , - 2701 , - 1806 , - 4859 , - 3588 , - 4761 , - 106 , - 2407 , - 3392 , - 3813 , - 1414 , - 2963 , - 188 , - 5873 , - 5730 , - 511 , - 6008 , - 4925 , - 1022 , - 1067 , - 2804 , - 969 , - 5338 , - 4631 , - 2608 , - 21 , - 630 , - 5187 , - 5420 , - 2081 , - 4946 , - 2735 , - 5224 , - 1133 , - 238 , - 3291 , - 2020 , - 3193 , - 4554 , - 839 , - 1824 , - 2245 , - 5862 , - 1395 , - 4636 , - 4305 , - 4162 , - 4959 , - 4440 , - 3357 , - 5470 , - 5515 , - 1236 , - 5417 , - 3770 , - 3063 , - 1040 , - 4469 , - 5078 , - 3619 , - 3852 , - 513 , - 3378 , - 1167 , - 3656 , - 5581 , - 4686 , - 1723 , - 452 , - 1625 , - 2986 , - 5287 , - 256 , - 677 , - 4294 , - 5843 , - 3068 , - 2737 , - 2594 , - 3391 , - 2872 , - 1789 , - 3902 , - 3947 , - 5684 , - 3849 , - 2202 , - 1495 , - 5488 , - 2901 , - 3510 , - 2051 , - 2284 , - 4961 , - 1810 , - 5615 , - 2088 , - 4013 , - 3118 , - 155 , - 4900 , - 57 , - 1418 , - 3719 , - 4704 , - 5125 , - 2726 , - 4275 , - 1500 , - 1169 , - 1026 , - 1823 , - 1304 , - 221 , - 2334 , - 2379 , - 4116 , - 2281 , - 634 , - 5943 , - 3920 , - 1333 , - 1942 , - 483 , - 716 , - 3393 , - 242 , - 4047 , - 520 , - 2445 , - 1550 , - 4603 , - 3332 , - 4505 , - 5866 , - 2151 , - 3136 , - 3557 , - 1158 , - 2707 , - 5948 , - 5617 , - 5474 , - 255 , - 5752 , - 4669 , - 766 , - 811 , - 2548 , - 713 , - 5082 , - 4375 , - 2352 , - 5781 , - 374 , - 4931 , - 5164 , - 1825 , - 4690 , - 2479 , - 4968 , - 877 , - 5998 , - 3035 , - 1764 , - 2937 , - 4298 , - 583 , - 1568 , - 1989 , - 5606 , - 1139 , - 4380 , - 4049 , - 3906 , - 4703 , - 4184 , - 3101 , - 5214 , - 5259 , - 980 , - 5161 , - 3514 , - 2807 , - 784 , - 4213 , - 4822 , - 3363 , - 3596 , - 257 , - 3122 , - 911 , - 3400 , - 5325 , - 4430 , - 1467 , - 196 , - 1369 , - 2730 , - 5031 , - 0 , - 93 , - 3606 , - 5979 , - 2652 , - 1225 , - 3218 , - 4071 , - 5304 , - 2357 , - 2830 , - 2163 , - 1876 , - 3489 , - 2442 , - 255 , - 4528 , - 4621 , - 2054 , - 4427 , - 1100 , - 5753 , - 1666 , - 2519 , - 3752 , - 805 , - 1278 , - 611 , - 324 , - 1937 , - 890 , - 4783 , - 2976 , - 3069 , - 502 , - 2875 , - 5628 , - 4201 , - 114 , - 967 , - 2200 , - 5333 , - 5806 , - 5139 , - 4852 , - 385 , - 5418 , - 3231 , - 1424 , - 1517 , - 5030 , - 1323 , - 4076 , - 2649 , - 4642 , - 5495 , - 648 , - 3781 , - 4254 , - 3587 , - 3300 , - 4913 , - 3866 , - 1679 , - 5952 , - 6045 , - 3478 , - 5851 , - 2524 , - 1097 , - 3090 , - 3943 , - 5176 , - 2229 , - 2702 , - 2035 , - 1748 , - 3361 , - 2314 , - 127 , - 4400 , - 4493 , - 1926 , - 4299 , - 972 , - 5625 , - 1538 , - 2391 , - 3624 , - 677 , - 1150 , - 483 , - 196 , - 1809 , - 762 , - 4655 , - 2848 , - 2941 , - 374 , - 2747 , - 5500 , - 4073 , - 6066 , - 839 , - 2072 , - 5205 , - 5678 , - 5011 , - 4724 , - 257 , - 5290 , - 3103 , - 1296 , - 1389 , - 4902 , - 1195 , - 3948 , - 2521 , - 4514 , - 5367 , - 520 , - 3653 , - 4126 , - 3459 , - 3172 , - 4785 , - 3738 , - 1551 , - 5824 , - 5917 , - 3350 , - 5723 , - 2396 , - 969 , - 2962 , - 3815 , - 5048 , - 2101 , - 2574 , - 1907 , - 1620 , - 3233 , - 2186 , - 6079 , - 4272 , - 4365 , - 1798 , - 4171 , - 844 , - 5497 , - 1410 , - 2263 , - 3496 , - 549 , - 1022 , - 355 , - 68 , - 1681 , - 634 , - 4527 , - 2720 , - 2813 , - 246 , - 2619 , - 5372 , - 3945 , - 5938 , - 711 , - 1944 , - 5077 , - 5550 , - 4883 , - 4596 , - 129 , - 5162 , - 2975 , - 1168 , - 1261 , - 4774 , - 1067 , - 3820 , - 2393 , - 4386 , - 5239 , - 392 , - 3525 , - 3998 , - 3331 , - 3044 , - 4657 , - 3610 , - 1423 , - 5696 , - 5789 , - 3222 , - 5595 , - 2268 , - 841 , - 2834 , - 3687 , - 4920 , - 1973 , - 2446 , - 1779 , - 1492 , - 3105 , - 2058 , - 5951 , - 4144 , - 4237 , - 1670 , - 4043 , - 716 , - 5369 , - 1282 , - 2135 , - 3368 , - 421 , - 894 , - 227 , - 6020 , - 1553 , - 506 , - 4399 , - 2592 , - 2685 , - 118 , - 2491 , - 5244 , - 3817 , - 5810 , - 583 , - 1816 , - 4949 , - 5422 , - 4755 , - 4468 , - 1 , - 5034 , - 2847 , - 1040 , - 1133 , - 4646 , - 939 , - 3692 , - 2265 , - 4258 , - 5111 , - 264 , - 3397 , - 3870 , - 3203 , - 2916 , - 4529 , - 3482 , - 1295 , - 5568 , - 5661 , - 3094 , - 5467 , - 2140 , - 713 , - 2706 , - 3559 , - 4792 , - 1845 , - 2318 , - 1651 , - 1364 , - 2977 , - 1930 , - 5823 , - 4016 , - 4109 , - 1542 , - 3915 , - 588 , - 5241 , - 1154 , - 2007 , - 3240 , - 293 , - 766 , - 99 , - 5892 , - 1425 , - 378 , - 4271 , - 2464 , - 2557 , - 6070 , - 2363 , - 5116 , - 3689 , - 5682 , - 455 , - 1688 , - 4821 , - 5294 , - 4627 , - 4340 , - 5953 , - 4906 , - 2719 , - 912 , - 1005 , - 4518 , - 811 , - 3564 , - 2137 , - 4130 , - 4983 , - 136 , - 3269 , - 3742 , - 3075 , - 2788 , - 4401 , - 3354 , - 1167 , - 5440 , - 5533 , - 2966 , - 5339 , - 2012 , - 585 , - 2578 , - 3431 , - 4664 , - 1717 , - 2190 , - 1523 , - 1236 , - 2849 , - 1802 , - 5695 , - 3888 , - 3981 , - 1414 , - 3787 , - 460 , - 5113 , - 1026 , - 1879 , - 3112 , - 165 , - 638 , - 6051 , - 5764 , - 1297 , - 250 , - 4143 , - 2336 , - 2429 , - 5942 , - 2235 , - 4988 , - 3561 , - 5554 , - 327 , - 1560 , - 4693 , - 5166 , - 4499 , - 4212 , - 5825 , - 4778 , - 2591 , - 784 , - 877 , - 4390 , - 683 , - 3436 , - 2009 , - 4002 , - 4855 , - 8 , - 3141 , - 3614 , - 2947 , - 2660 , - 4273 , - 3226 , - 1039 , - 5312 , - 5405 , - 2838 , - 5211 , - 1884 , - 457 , - 2450 , - 3303 , - 4536 , - 1589 , - 2062 , - 1395 , - 1108 , - 2721 , - 1674 , - 5567 , - 3760 , - 3853 , - 1286 , - 3659 , - 332 , - 4985 , - 898 , - 1751 , - 2984 , - 37 , - 510 , - 5923 , - 5636 , - 1169 , - 122 , - 4015 , - 2208 , - 2301 , - 5814 , - 2107 , - 4860 , - 3433 , - 5426 , - 199 , - 1432 , - 4565 , - 5038 , - 4371 , - 4084 , - 5697 , - 4650 , - 2463 , - 656 , - 749 , - 4262 , - 555 , - 3308 , - 1881 , - 3874 , - 4727 , - 5960 , - 3013 , - 3486 , - 2819 , - 2532 , - 4145 , - 3098 , - 911 , - 5184 , - 5277 , - 2710 , - 5083 , - 1756 , - 329 , - 2322 , - 3175 , - 4408 , - 1461 , - 1934 , - 1267 , - 980 , - 2593 , - 1546 , - 5439 , - 3632 , - 3725 , - 1158 , - 3531 , - 204 , - 4857 , - 770 , - 1623 , - 2856 , - 5989 , - 382 , - 5795 , - 5508 , - 1041 , - 6074 , - 3887 , - 2080 , - 2173 , - 5686 , - 1979 , - 4732 , - 3305 , - 5298 , - 71 , - 1304 , - 4437 , - 4910 , - 4243 , - 3956 , - 5569 , - 4522 , - 2335 , - 528 , - 621 , - 4134 , - 427 , - 3180 , - 1753 , - 3746 , - 4599 , - 5832 , - 2885 , - 3358 , - 2691 , - 2404 , - 4017 , - 2970 , - 783 , - 5056 , - 5149 , - 2582 , - 4955 , - 1628 , - 201 , - 2194 , - 3047 , - 4280 , - 1333 , - 1806 , - 1139 , - 852 , - 2465 , - 1418 , - 5311 , - 3504 , - 3597 , - 1030 , - 3403 , - 76 , - 4729 , - 642 , - 1495 , - 2728 , - 5861 , - 254 , - 5667 , - 5380 , - 913 , - 5946 , - 3759 , - 1952 , - 2045 , - 5558 , - 1851 , - 4604 , - 3177 , - 5170 , - 6023 , - 1176 , - 4309 , - 4782 , - 4115 , - 3828 , - 5441 , - 4394 , - 2207 , - 400 , - 493 , - 4006 , - 299 , - 3052 , - 1625 , - 3618 , - 4471 , - 5704 , - 2757 , - 3230 , - 2563 , - 2276 , - 3889 , - 2842 , - 655 , - 4928 , - 5021 , - 2454 , - 4827 , - 1500 , - 73 , - 2066 , - 2919 , - 4152 , - 1205 , - 1678 , - 1011 , - 724 , - 2337 , - 1290 , - 5183 , - 3376 , - 3469 , - 902 , - 3275 , - 6028 , - 4601 , - 514 , - 1367 , - 2600 , - 5733 , - 126 , - 5539 , - 5252 , - 785 , - 5818 , - 3631 , - 1824 , - 1917 , - 5430 , - 1723 , - 4476 , - 3049 , - 5042 , - 5895 , - 1048 , - 4181 , - 4654 , - 3987 , - 3700 , - 5313 , - 4266 , - 2079 , - 272 , - 365 , - 3878 , - 171 , - 2924 , - 1497 , - 3490 , - 4343 , - 5576 , - 2629 , - 3102 , - 2435 , - 2148 , - 3761 , - 2714 , - 527 , - 4800 , - 4893 , - 2326 , - 4699 , - 1372 , - 6025 , - 1938 , - 2791 , - 4024 , - 1077 , - 1550 , - 883 , - 596 , - 2209 , - 1162 , - 5055 , - 3248 , - 3341 , - 774 , - 3147 , - 5900 , - 4473 , - 386 , - 1239 , - 2472 , - 5605 , - 6078 , - 5411 , - 5124 , - 657 , - 5690 , - 3503 , - 1696 , - 1789 , - 5302 , - 1595 , - 4348 , - 2921 , - 4914 , - 5767 , - 920 , - 4053 , - 4526 , - 3859 , - 3572 , - 5185 , - 4138 , - 1951 , - 144 , - 237 , - 3750 , - 43 , - 2796 , - 1369 , - 3362 , - 4215 , - 5448 , - 2501 , - 2974 , - 2307 , - 2020 , - 3633 , - 2586 , - 399 , - 4672 , - 4765 , - 2198 , - 4571 , - 1244 , - 5897 , - 1810 , - 2663 , - 3896 , - 949 , - 1422 , - 755 , - 468 , - 2081 , - 1034 , - 4927 , - 3120 , - 3213 , - 646 , - 3019 , - 5772 , - 4345 , - 258 , - 1111 , - 2344 , - 5477 , - 5950 , - 5283 , - 4996 , - 529 , - 5562 , - 3375 , - 1568 , - 1661 , - 5174 , - 1467 , - 4220 , - 2793 , - 4786 , - 5639 , - 792 , - 3925 , - 4398 , - 3731 , - 3444 , - 5057 , - 4010 , - 1823 , - 16 , - 109 , - 3622 , - 5995 , - 2668 , - 1241 , - 3234 , - 4087 , - 5320 , - 2373 , - 2846 , - 2179 , - 1892 , - 3505 , - 2458 , - 271 , - 4544 , - 4637 , - 2070 , - 4443 , - 1116 , - 5769 , - 1682 , - 2535 , - 3768 , - 821 , - 1294 , - 627 , - 340 , - 1953 , - 906 , - 4799 , - 2992 , - 3085 , - 518 , - 2891 , - 5644 , - 4217 , - 130 , - 983 , - 2216 , - 5349 , - 5822 , - 5155 , - 4868 , - 401 , - 5434 , - 3247 , - 1440 , - 1533 , - 5046 , - 1339 , - 4092 , - 2665 , - 4658 , - 5511 , - 664 , - 3797 , - 4270 , - 3603 , - 3316 , - 4929 , - 3882 , - 1695 , - 5968 , - 6061 , - 3494 , - 5867 , - 2540 , - 1113 , - 3106 , - 3959 , - 5192 , - 2245 , - 2718 , - 2051 , - 1764 , - 3377 , - 2330 , - 143 , - 4416 , - 4509 , - 1942 , - 4315 , - 988 , - 5641 , - 1554 , - 2407 , - 3640 , - 693 , - 1166 , - 499 , - 212 , - 1825 , - 778 , - 4671 , - 2864 , - 2957 , - 390 , - 2763 , - 5516 , - 4089 , - 2 , - 855 , - 2088 , - 5221 , - 5694 , - 5027 , - 4740 , - 273 , - 5306 , - 3119 , - 1312 , - 1405 , - 4918 , - 1211 , - 3964 , - 2537 , - 4530 , - 5383 , - 536 , - 3669 , - 4142 , - 3475 , - 3188 , - 4801 , - 3754 , - 1567 , - 5840 , - 5933 , - 3366 , - 5739 , - 2412 , - 985 , - 2978 , - 3831 , - 5064 , - 2117 , - 2590 , - 1923 , - 1636 , - 3249 , - 2202 , - 15 , - 4288 , - 4381 , - 1814 , - 4187 , - 860 , - 5513 , - 1426 , - 2279 , - 3512 , - 565 , - 1038 , - 371 , - 84 , - 1697 , - 650 , - 4543 , - 2736 , - 2829 , - 262 , - 2635 , - 5388 , - 3961 , - 5954 , - 727 , - 1960 , - 5093 , - 5566 , - 4899 , - 4612 , - 145 , - 5178 , - 2991 , - 1184 , - 1277 , - 4790 , - 1083 , - 3836 , - 2409 , - 4402 , - 5255 , - 408 , - 3541 , - 4014 , - 3347 , - 3060 , - 4673 , - 3626 , - 1439 , - 5712 , - 5805 , - 3238 , - 5611 , - 2284 , - 857 , - 2850 , - 3703 , - 4936 , - 1989 , - 2462 , - 1795 , - 1508 , - 3121 , - 2074 , - 5967 , - 4160 , - 4253 , - 1686 , - 4059 , - 732 , - 5385 , - 1298 , - 2151 , - 3384 , - 437 , - 910 , - 243 , - 6036 , - 1569 , - 522 , - 4415 , - 2608 , - 2701 , - 134 , - 2507 , - 5260 , - 3833 , - 5826 , - 599 , - 1832 , - 4965 , - 5438 , - 4771 , - 4484 , - 17 , - 5050 , - 2863 , - 1056 , - 1149 , - 4662 , - 955 , - 3708 , - 2281 , - 4274 , - 5127 , - 280 , - 3413 , - 3886 , - 3219 , - 2932 , - 4545 , - 3498 , - 1311 , - 5584 , - 5677 , - 3110 , - 5483 , - 2156 , - 729 , - 2722 , - 3575 , - 4808 , - 1861 , - 2334 , - 1667 , - 1380 , - 2993 , - 1946 , - 5839 , - 4032 , - 4125 , - 1558 , - 3931 , - 604 , - 5257 , - 1170 , - 2023 , - 3256 , - 309 , - 782 , - 115 , - 5908 , - 1441 , - 394 , - 4287 , - 2480 , - 2573 , - 6 , - 2379 , - 5132 , - 3705 , - 5698 , - 471 , - 1704 , - 4837 , - 5310 , - 4643 , - 4356 , - 5969 , - 4922 , - 2735 , - 928 , - 1021 , - 4534 , - 827 , - 3580 , - 2153 , - 4146 , - 4999 , - 152 , - 3285 , - 3758 , - 3091 , - 2804 , - 4417 , - 3370 , - 1183 , - 5456 , - 5549 , - 2982 , - 5355 , - 2028 , - 601 , - 2594 , - 3447 , - 4680 , - 1733 , - 2206 , - 1539 , - 1252 , - 2865 , - 1818 , - 5711 , - 3904 , - 3997 , - 1430 , - 3803 , - 476 , - 5129 , - 1042 , - 1895 , - 3128 , - 181 , - 654 , - 6067 , - 5780 , - 1313 , - 266 , - 4159 , - 2352 , - 2445 , - 5958 , - 2251 , - 5004 , - 3577 , - 5570 , - 343 , - 1576 , - 4709 , - 5182 , - 4515 , - 4228 , - 5841 , - 4794 , - 2607 , - 800 , - 893 , - 4406 , - 699 , - 3452 , - 2025 , - 4018 , - 4871 , - 24 , - 3157 , - 3630 , - 2963 , - 2676 , - 4289 , - 3242 , - 1055 , - 5328 , - 5421 , - 2854 , - 5227 , - 1900 , - 473 , - 2466 , - 3319 , - 4552 , - 1605 , - 2078 , - 1411 , - 1124 , - 2737 , - 1690 , - 5583 , - 3776 , - 3869 , - 1302 , - 3675 , - 348 , - 5001 , - 914 , - 1767 , - 3000 , - 53 , - 526 , - 5939 , - 5652 , - 1185 , - 138 , - 4031 , - 2224 , - 2317 , - 5830 , - 2123 , - 4876 , - 3449 , - 5442 , - 215 , - 1448 , - 4581 , - 5054 , - 4387 , - 4100 , - 5713 , - 4666 , - 2479 , - 672 , - 765 , - 4278 , - 571 , - 3324 , - 1897 , - 3890 , - 4743 , - 5976 , - 3029 , - 3502 , - 2835 , - 2548 , - 4161 , - 3114 , - 927 , - 5200 , - 5293 , - 2726 , - 5099 , - 1772 , - 345 , - 2338 , - 3191 , - 4424 , - 1477 , - 1950 , - 1283 , - 996 , - 2609 , - 1562 , - 5455 , - 3648 , - 3741 , - 1174 , - 3547 , - 220 , - 4873 , - 786 , - 1639 , - 2872 , - 6005 , - 398 , - 5811 , - 5524 , - 1057 , - 10 , - 3903 , - 2096 , - 2189 , - 5702 , - 1995 , - 4748 , - 3321 , - 5314 , - 87 , - 1320 , - 4453 , - 4926 , - 4259 , - 3972 , - 5585 , - 4538 , - 2351 , - 544 , - 637 , - 4150 , - 443 , - 3196 , - 1769 , - 3762 , - 4615 , - 5848 , - 2901 , - 3374 , - 2707 , - 2420 , - 4033 , - 2986 , - 799 , - 5072 , - 5165 , - 2598 , - 4971 , - 1644 , - 217 , - 2210 , - 3063 , - 4296 , - 1349 , - 1822 , - 1155 , - 868 , - 2481 , - 1434 , - 5327 , - 3520 , - 3613 , - 1046 , - 3419 , - 92 , - 4745 , - 658 , - 1511 , - 2744 , - 5877 , - 270 , - 5683 , - 5396 , - 929 , - 5962 , - 3775 , - 1968 , - 2061 , - 5574 , - 1867 , - 4620 , - 3193 , - 5186 , - 6039 , - 1192 , - 4325 , - 4798 , - 4131 , - 3844 , - 5457 , - 4410 , - 2223 , - 416 , - 509 , - 4022 , - 315 , - 3068 , - 1641 , - 3634 , - 4487 , - 5720 , - 2773 , - 3246 , - 2579 , - 2292 , - 3905 , - 2858 , - 671 , - 4944 , - 5037 , - 2470 , - 4843 , - 1516 , - 89 , - 2082 , - 2935 , - 4168 , - 1221 , - 1694 , - 1027 , - 740 , - 2353 , - 1306 , - 5199 , - 3392 , - 3485 , - 918 , - 3291 , - 6044 , - 4617 , - 530 , - 1383 , - 2616 , - 5749 , - 142 , - 5555 , - 5268 , - 801 , - 5834 , - 3647 , - 1840 , - 1933 , - 5446 , - 1739 , - 4492 , - 3065 , - 5058 , - 5911 , - 1064 , - 4197 , - 4670 , - 4003 , - 3716 , - 5329 , - 4282 , - 2095 , - 288 , - 381 , - 3894 , - 187 , - 2940 , - 1513 , - 3506 , - 4359 , - 5592 , - 2645 , - 3118 , - 2451 , - 2164 , - 3777 , - 2730 , - 543 , - 4816 , - 4909 , - 2342 , - 4715 , - 1388 , - 6041 , - 1954 , - 2807 , - 4040 , - 1093 , - 1566 , - 899 , - 612 , - 2225 , - 1178 , - 5071 , - 3264 , - 3357 , - 790 , - 3163 , - 5916 , - 4489 , - 402 , - 1255 , - 2488 , - 5621 , - 14 , - 5427 , - 5140 , - 673 , - 5706 , - 3519 , - 1712 , - 1805 , - 5318 , - 1611 , - 4364 , - 2937 , - 4930 , - 5783 , - 936 , - 4069 , - 4542 , - 3875 , - 3588 , - 5201 , - 4154 , - 1967 , - 160 , - 253 , - 3766 , - 59 , - 2812 , - 1385 , - 3378 , - 4231 , - 5464 , - 2517 , - 2990 , - 2323 , - 2036 , - 3649 , - 2602 , - 415 , - 4688 , - 4781 , - 2214 , - 4587 , - 1260 , - 5913 , - 1826 , - 2679 , - 3912 , - 965 , - 1438 , - 771 , - 484 , - 2097 , - 1050 , - 4943 , - 3136 , - 3229 , - 662 , - 3035 , - 5788 , - 4361 , - 274 , - 1127 , - 2360 , - 5493 , - 5966 , - 5299 , - 5012 , - 545 , - 5578 , - 3391 , - 1584 , - 1677 , - 5190 , - 1483 , - 4236 , - 2809 , - 4802 , - 5655 , - 808 , - 3941 , - 4414 , - 3747 , - 3460 , - 5073 , - 4026 , - 1839 , - 32 , - 125 , - 3638 , - 6011 , - 2684 , - 1257 , - 3250 , - 4103 , - 5336 , - 2389 , - 2862 , - 2195 , - 1908 , - 3521 , - 2474 , - 287 , - 4560 , - 4653 , - 2086 , - 4459 , - 1132 , - 5785 , - 1698 , - 2551 , - 3784 , - 837 , - 1310 , - 643 , - 356 , - 1969 , - 922 , - 4815 , - 3008 , - 3101 , - 534 , - 2907 , - 5660 , - 4233 , - 146 , - 999 , - 2232 , - 5365 , - 5838 , - 5171 , - 4884 , - 417 , - 5450 , - 3263 , - 1456 , - 1549 , - 5062 , - 1355 , - 4108 , - 2681 , - 4674 , - 5527 , - 680 , - 3813 , - 4286 , - 3619 , - 3332 , - 4945 , - 3898 , - 1711 , - 5984 , - 6077 , - 3510 , - 5883 , - 2556 , - 1129 , - 3122 , - 3975 , - 5208 , - 2261 , - 2734 , - 2067 , - 1780 , - 3393 , - 2346 , - 159 , - 4432 , - 4525 , - 1958 , - 4331 , - 1004 , - 5657 , - 1570 , - 2423 , - 3656 , - 709 , - 1182 , - 515 , - 228 , - 1841 , - 794 , - 4687 , - 2880 , - 2973 , - 406 , - 2779 , - 5532 , - 4105 , - 18 , - 871 , - 2104 , - 5237 , - 5710 , - 5043 , - 4756 , - 289 , - 5322 , - 3135 , - 1328 , - 1421 , - 4934 , - 1227 , - 3980 , - 2553 , - 4546 , - 5399 , - 552 , - 3685 , - 4158 , - 3491 , - 3204 , - 4817 , - 3770 , - 1583 , - 5856 , - 5949 , - 3382 , - 5755 , - 2428 , - 1001 , - 2994 , - 3847 , - 5080 , - 2133 , - 2606 , - 1939 , - 1652 , - 3265 , - 2218 , - 31 , - 4304 , - 4397 , - 1830 , - 4203 , - 876 , - 5529 , - 1442 , - 2295 , - 3528 , - 581 , - 1054 , - 387 , - 100 , - 1713 , - 666 , - 4559 , - 2752 , - 2845 , - 278 , - 2651 , - 5404 , - 3977 , - 5970 , - 743 , - 1976 , - 5109 , - 5582 , - 4915 , - 4628 , - 161 , - 5194 , - 3007 , - 1200 , - 1293 , - 4806 , - 1099 , - 3852 , - 2425 , - 4418 , - 5271 , - 424 , - 3557 , - 4030 , - 3363 , - 3076 , - 4689 , - 3642 , - 1455 , - 5728 , - 5821 , - 3254 , - 5627 , - 2300 , - 873 , - 2866 , - 3719 , - 4952 , - 2005 , - 2478 , - 1811 , - 1524 , - 3137 , - 2090 , - 5983 , - 4176 , - 4269 , - 1702 , - 4075 , - 748 , - 5401 , - 1314 , - 2167 , - 3400 , - 453 , - 926 , - 259 , - 6052 , - 1585 , - 538 , - 4431 , - 2624 , - 2717 , - 150 , - 2523 , - 5276 , - 3849 , - 5842 , - 615 , - 1848 , - 4981 , - 5454 , - 4787 , - 4500 , - 33 , - 5066 , - 2879 , - 1072 , - 1165 , - 4678 , - 971 , - 3724 , - 2297 , - 4290 , - 5143 , - 296 , - 3429 , - 3902 , - 3235 , - 2948 , - 4561 , - 3514 , - 1327 , - 5600 , - 5693 , - 3126 , - 5499 , - 2172 , - 745 , - 2738 , - 3591 , - 4824 , - 1877 , - 2350 , - 1683 , - 1396 , - 3009 , - 1962 , - 5855 , - 4048 , - 4141 , - 1574 , - 3947 , - 620 , - 5273 , - 1186 , - 2039 , - 3272 , - 325 , - 798 , - 131 , - 5924 , - 1457 , - 410 , - 4303 , - 2496 , - 2589 , - 22 , - 2395 , - 5148 , - 3721 , - 5714 , - 487 , - 1720 , - 4853 , - 5326 , - 4659 , - 4372 , - 5985 , - 4938 , - 2751 , - 944 , - 1037 , - 4550 , - 843 , - 3596 , - 2169 , - 4162 , - 5015 , - 168 , - 3301 , - 3774 , - 3107 , - 2820 , - 4433 , - 3386 , - 1199 , - 5472 , - 5565 , - 2998 , - 5371 , - 2044 , - 617 , - 2610 , - 3463 , - 4696 , - 1749 , - 2222 , - 1555 , - 1268 , - 2881 , - 1834 , - 5727 , - 3920 , - 4013 , - 1446 , - 3819 , - 492 , - 5145 , - 1058 , - 1911 , - 3144 , - 197 , - 670 , - 3 , - 5796 , - 1329 , - 282 , - 4175 , - 2368 , - 2461 , - 5974 , - 2267 , - 5020 , - 3593 , - 5586 , - 359 , - 1592 , - 4725 , - 5198 , - 4531 , - 4244 , - 5857 , - 4810 , - 2623 , - 816 , - 909 , - 4422 , - 715 , - 3468 , - 2041 , - 4034 , - 4887 , - 40 , - 3173 , - 3646 , - 2979 , - 2692 , - 4305 , - 3258 , - 1071 , - 5344 , - 5437 , - 2870 , - 5243 , - 1916 , - 489 , - 2482 , - 3335 , - 4568 , - 1621 , - 2094 , - 1427 , - 1140 , - 2753 , - 1706 , - 5599 , - 3792 , - 3885 , - 1318 , - 3691 , - 364 , - 5017 , - 930 , - 1783 , - 3016 , - 69 , - 542 , - 5955 , - 5668 , - 1201 , - 154 , - 4047 , - 2240 , - 2333 , - 5846 , - 2139 , - 4892 , - 3465 , - 5458 , - 231 , - 1464 , - 4597 , - 5070 , - 4403 , - 4116 , - 5729 , - 4682 , - 2495 , - 688 , - 781 , - 4294 , - 587 , - 3340 , - 1913 , - 3906 , - 4759 , - 5992 , - 3045 , - 3518 , - 2851 , - 2564 , - 4177 , - 3130 , - 943 , - 5216 , - 5309 , - 2742 , - 5115 , - 1788 , - 361 , - 2354 , - 3207 , - 4440 , - 1493 , - 1966 , - 1299 , - 1012 , - 2625 , - 1578 , - 5471 , - 3664 , - 3757 , - 1190 , - 3563 , - 236 , - 4889 , - 802 , - 1655 , - 2888 , - 6021 , - 414 , - 5827 , - 5540 , - 1073 , - 26 , - 3919 , - 2112 , - 2205 , - 5718 , - 2011 , - 4764 , - 3337 , - 5330 , - 103 , - 1336 , - 4469 , - 4942 , - 4275 , - 3988 , - 5601 , - 4554 , - 2367 , - 560 , - 653 , - 4166 , - 459 , - 3212 , - 1785 , - 3778 , - 4631 , - 5864 , - 2917 , - 3390 , - 2723 , - 2436 , - 4049 , - 3002 , - 815 , - 5088 , - 5181 , - 2614 , - 4987 , - 1660 , - 233 , - 2226 , - 3079 , - 4312 , - 1365 , - 1838 , - 1171 , - 884 , - 2497 , - 1450 , - 5343 , - 3536 , - 3629 , - 1062 , - 3435 , - 108 , - 4761 , - 674 , - 1527 , - 2760 , - 5893 , - 286 , - 5699 , - 5412 , - 945 , - 5978 , - 3791 , - 1984 , - 2077 , - 5590 , - 1883 , - 4636 , - 3209 , - 5202 , - 6055 , - 1208 , - 4341 , - 4814 , - 4147 , - 3860 , - 5473 , - 4426 , - 2239 , - 432 , - 525 , - 4038 , - 331 , - 3084 , - 1657 , - 3650 , - 4503 , - 5736 , - 2789 , - 3262 , - 2595 , - 2308 , - 3921 , - 2874 , - 687 , - 4960 , - 5053 , - 2486 , - 4859 , - 1532 , - 105 , - 2098 , - 2951 , - 4184 , - 1237 , - 1710 , - 1043 , - 756 , - 2369 , - 1322 , - 5215 , - 3408 , - 3501 , - 934 , - 3307 , - 6060 , - 4633 , - 546 , - 1399 , - 2632 , - 5765 , - 158 , - 5571 , - 5284 , - 817 , - 5850 , - 3663 , - 1856 , - 1949 , - 5462 , - 1755 , - 4508 , - 3081 , - 5074 , - 5927 , - 1080 , - 4213 , - 4686 , - 4019 , - 3732 , - 5345 , - 4298 , - 2111 , - 304 , - 397 , - 3910 , - 203 , - 2956 , - 1529 , - 3522 , - 4375 , - 5608 , - 2661 , - 3134 , - 2467 , - 2180 , - 3793 , - 2746 , - 559 , - 4832 , - 4925 , - 2358 , - 4731 , - 1404 , - 6057 , - 1970 , - 2823 , - 4056 , - 1109 , - 1582 , - 915 , - 628 , - 2241 , - 1194 , - 5087 , - 3280 , - 3373 , - 806 , - 3179 , - 5932 , - 4505 , - 418 , - 1271 , - 2504 , - 5637 , - 30 , - 5443 , - 5156 , - 689 , - 5722 , - 3535 , - 1728 , - 1821 , - 5334 , - 1627 , - 4380 , - 2953 , - 4946 , - 5799 , - 952 , - 4085 , - 4558 , - 3891 , - 3604 , - 5217 , - 4170 , - 1983 , - 176 , - 269 , - 3782 , - 75 , - 2828 , - 1401 , - 3394 , - 4247 , - 5480 , - 2533 , - 3006 , - 2339 , - 2052 , - 3665 , - 2618 , - 431 , - 4704 , - 4797 , - 2230 , - 4603 , - 1276 , - 5929 , - 1842 , - 2695 , - 3928 , - 981 , - 1454 , - 787 , - 500 , - 2113 , - 1066 , - 4959 , - 3152 , - 3245 , - 678 , - 3051 , - 5804 , - 4377 , - 290 , - 1143 , - 2376 , - 5509 , - 5982 , - 5315 , - 5028 , - 561 , - 5594 , - 3407 , - 1600 , - 1693 , - 5206 , - 1499 , - 4252 , - 2825 , - 4818 , - 5671 , - 824 , - 3957 , - 4430 , - 3763 , - 3476 , - 5089 , - 4042 , - 1855 , - 48 , - 141 , - 3654 , - 6027 , - 2700 , - 1273 , - 3266 , - 4119 , - 5352 , - 2405 , - 2878 , - 2211 , - 1924 , - 3537 , - 2490 , - 303 , - 4576 , - 4669 , - 2102 , - 4475 , - 1148 , - 5801 , - 1714 , - 2567 , - 3800 , - 853 , - 1326 , - 659 , - 372 , - 1985 , - 938 , - 4831 , - 3024 , - 3117 , - 550 , - 2923 , - 5676 , - 4249 , - 162 , - 1015 , - 2248 , - 5381 , - 5854 , - 5187 , - 4900 , - 433 , - 5466 , - 3279 , - 1472 , - 1565 , - 5078 , - 1371 , - 4124 , - 2697 , - 4690 , - 5543 , - 696 , - 3829 , - 4302 , - 3635 , - 3348 , - 4961 , - 3914 , - 1727 , - 6000 , - 13 , - 3526 , - 5899 , - 2572 , - 1145 , - 3138 , - 3991 , - 5224 , - 2277 , - 2750 , - 2083 , - 1796 , - 3409 , - 2362 , - 175 , - 4448 , - 4541 , - 1974 , - 4347 , - 1020 , - 5673 , - 1586 , - 2439 , - 3672 , - 725 , - 1198 , - 531 , - 244 , - 1857 , - 810 , - 4703 , - 2896 , - 2989 , - 422 , - 2795 , - 5548 , - 4121 , - 34 , - 887 , - 2120 , - 5253 , - 5726 , - 5059 , - 4772 , - 305 , - 5338 , - 3151 , - 1344 , - 1437 , - 4950 , - 1243 , - 3996 , - 2569 , - 4562 , - 5415 , - 568 , - 3701 , - 4174 , - 3507 , - 3220 , - 4833 , - 3786 , - 1599 , - 5872 , - 5965 , - 3398 , - 5771 , - 2444 , - 1017 , - 3010 , - 3863 , - 5096 , - 2149 , - 2622 , - 1955 , - 1668 , - 3281 , - 2234 , - 47 , - 4320 , - 4413 , - 1846 , - 4219 , - 892 , - 5545 , - 1458 , - 2311 , - 3544 , - 597 , - 1070 , - 403 , - 116 , - 1729 , - 682 , - 4575 , - 2768 , - 2861 , - 294 , - 2667 , - 5420 , - 3993 , - 5986 , - 759 , - 1992 , - 5125 , - 5598 , - 4931 , - 4644 , - 177 , - 5210 , - 3023 , - 1216 , - 1309 , - 4822 , - 1115 , - 3868 , - 2441 , - 4434 , - 5287 , - 440 , - 3573 , - 4046 , - 3379 , - 3092 , - 4705 , - 3658 , - 1471 , - 5744 , - 5837 , - 3270 , - 5643 , - 2316 , - 889 , - 2882 , - 3735 , - 4968 , - 2021 , - 2494 , - 1827 , - 1540 , - 3153 , - 2106 , - 5999 , - 4192 , - 4285 , - 1718 , - 4091 , - 764 , - 5417 , - 1330 , - 2183 , - 3416 , - 469 , - 942 , - 275 , - 6068 , - 1601 , - 554 , - 4447 , - 2640 , - 2733 , - 166 , - 2539 , - 5292 , - 3865 , - 5858 , - 631 , - 1864 , - 4997 , - 5470 , - 4803 , - 4516 , - 49 , - 5082 , - 2895 , - 1088 , - 1181 , - 4694 , - 987 , - 3740 , - 2313 , - 4306 , - 5159 , - 312 , - 3445 , - 3918 , - 3251 , - 2964 , - 4577 , - 3530 , - 1343 , - 5616 , - 5709 , - 3142 , - 5515 , - 2188 , - 761 , - 2754 , - 3607 , - 4840 , - 1893 , - 2366 , - 1699 , - 1412 , - 3025 , - 1978 , - 5871 , - 4064 , - 4157 , - 1590 , - 3963 , - 636 , - 5289 , - 1202 , - 2055 , - 3288 , - 341 , - 814 , - 147 , - 5940 , - 1473 , - 426 , - 4319 , - 2512 , - 2605 , - 38 , - 2411 , - 5164 , - 3737 , - 5730 , - 503 , - 1736 , - 4869 , - 5342 , - 4675 , - 4388 , - 6001 , - 4954 , - 2767 , - 960 , - 1053 , - 4566 , - 859 , - 3612 , - 2185 , - 4178 , - 5031 , - 184 , - 3317 , - 3790 , - 3123 , - 2836 , - 4449 , - 3402 , - 1215 , - 5488 , - 5581 , - 3014 , - 5387 , - 2060 , - 633 , - 2626 , - 3479 , - 4712 , - 1765 , - 2238 , - 1571 , - 1284 , - 2897 , - 1850 , - 5743 , - 3936 , - 4029 , - 1462 , - 3835 , - 508 , - 5161 , - 1074 , - 1927 , - 3160 , - 213 , - 686 , - 19 , - 5812 , - 1345 , - 298 , - 4191 , - 2384 , - 2477 , - 5990 , - 2283 , - 5036 , - 3609 , - 5602 , - 375 , - 1608 , - 4741 , - 5214 , - 4547 , - 4260 , - 5873 , - 4826 , - 2639 , - 832 , - 925 , - 4438 , - 731 , - 3484 , - 2057 , - 4050 , - 4903 , - 56 , - 3189 , - 3662 , - 2995 , - 2708 , - 4321 , - 3274 , - 1087 , - 5360 , - 5453 , - 2886 , - 5259 , - 1932 , - 505 , - 2498 , - 3351 , - 4584 , - 1637 , - 2110 , - 1443 , - 1156 , - 2769 , - 1722 , - 5615 , - 3808 , - 3901 , - 1334 , - 3707 , - 380 , - 5033 , - 946 , - 1799 , - 3032 , - 85 , - 558 , - 5971 , - 5684 , - 1217 , - 170 , - 4063 , - 2256 , - 2349 , - 5862 , - 2155 , - 4908 , - 3481 , - 5474 , - 247 , - 1480 , - 4613 , - 5086 , - 4419 , - 4132 , - 5745 , - 4698 , - 2511 , - 704 , - 797 , - 4310 , - 603 , - 3356 , - 1929 , - 3922 , - 4775 , - 6008 , - 3061 , - 3534 , - 2867 , - 2580 , - 4193 , - 3146 , - 959 , - 5232 , - 5325 , - 2758 , - 5131 , - 1804 , - 377 , - 2370 , - 3223 , - 4456 , - 1509 , - 1982 , - 1315 , - 1028 , - 2641 , - 1594 , - 5487 , - 3680 , - 3773 , - 1206 , - 3579 , - 252 , - 4905 , - 818 , - 1671 , - 2904 , - 6037 , - 430 , - 5843 , - 5556 , - 1089 , - 42 , - 3935 , - 2128 , - 2221 , - 5734 , - 2027 , - 4780 , - 3353 , - 5346 , - 119 , - 1352 , - 4485 , - 4958 , - 4291 , - 4004 , - 5617 , - 4570 , - 2383 , - 576 , - 669 , - 4182 , - 475 , - 3228 , - 1801 , - 3794 , - 4647 , - 5880 , - 2933 , - 3406 , - 2739 , - 2452 , - 4065 , - 3018 , - 831 , - 5104 , - 5197 , - 2630 , - 5003 , - 1676 , - 249 , - 2242 , - 3095 , - 4328 , - 1381 , - 1854 , - 1187 , - 900 , - 2513 , - 1466 , - 5359 , - 3552 , - 3645 , - 1078 , - 3451 , - 124 , - 4777 , - 690 , - 1543 , - 2776 , - 5909 , - 302 , - 5715 , - 5428 , - 961 , - 5994 , - 3807 , - 2000 , - 2093 , - 5606 , - 1899 , - 4652 , - 3225 , - 5218 , - 6071 , - 1224 , - 4357 , - 4830 , - 4163 , - 3876 , - 5489 , - 4442 , - 2255 , - 448 , - 541 , - 4054 , - 347 , - 3100 , - 1673 , - 3666 , - 4519 , - 5752 , - 2805 , - 3278 , - 2611 , - 2324 , - 3937 , - 2890 , - 703 , - 4976 , - 5069 , - 2502 , - 4875 , - 1548 , - 121 , - 2114 , - 2967 , - 4200 , - 1253 , - 1726 , - 1059 , - 772 , - 2385 , - 1338 , - 5231 , - 3424 , - 3517 , - 950 , - 3323 , - 6076 , - 4649 , - 562 , - 1415 , - 2648 , - 5781 , - 174 , - 5587 , - 5300 , - 833 , - 5866 , - 3679 , - 1872 , - 1965 , - 5478 , - 1771 , - 4524 , - 3097 , - 5090 , - 5943 , - 1096 , - 4229 , - 4702 , - 4035 , - 3748 , - 5361 , - 4314 , - 2127 , - 320 , - 413 , - 3926 , - 219 , - 2972 , - 1545 , - 3538 , - 4391 , - 5624 , - 2677 , - 3150 , - 2483 , - 2196 , - 3809 , - 2762 , - 575 , - 4848 , - 4941 , - 2374 , - 4747 , - 1420 , - 6073 , - 1986 , - 2839 , - 4072 , - 1125 , - 1598 , - 931 , - 644 , - 2257 , - 1210 , - 5103 , - 3296 , - 3389 , - 822 , - 3195 , - 5948 , - 4521 , - 434 , - 1287 , - 2520 , - 5653 , - 46 , - 5459 , - 5172 , - 705 , - 5738 , - 3551 , - 1744 , - 1837 , - 5350 , - 1643 , - 4396 , - 2969 , - 4962 , - 5815 , - 968 , - 4101 , - 4574 , - 3907 , - 3620 , - 5233 , - 4186 , - 1999 , - 192 , - 285 , - 3798 , - 91 , - 2844 , - 1417 , - 3410 , - 4263 , - 5496 , - 2549 , - 3022 , - 2355 , - 2068 , - 3681 , - 2634 , - 447 , - 4720 , - 4813 , - 2246 , - 4619 , - 1292 , - 5945 , - 1858 , - 2711 , - 3944 , - 997 , - 1470 , - 803 , - 516 , - 2129 , - 1082 , - 4975 , - 3168 , - 3261 , - 694 , - 3067 , - 5820 , - 4393 , - 306 , - 1159 , - 2392 , - 5525 , - 5998 , - 5331 , - 5044 , - 577 , - 5610 , - 3423 , - 1616 , - 1709 , - 5222 , - 1515 , - 4268 , - 2841 , - 4834 , - 5687 , - 840 , - 3973 , - 4446 , - 3779 , - 3492 , - 5105 , - 4058 , - 1871 , - 64 , - 157 , - 3670 , - 6043 , - 2716 , - 1289 , - 3282 , - 4135 , - 5368 , - 2421 , - 2894 , - 2227 , - 1940 , - 3553 , - 2506 , - 319 , - 4592 , - 4685 , - 2118 , - 4491 , - 1164 , - 5817 , - 1730 , - 2583 , - 3816 , - 869 , - 1342 , - 675 , - 388 , - 2001 , - 954 , - 4847 , - 3040 , - 3133 , - 566 , - 2939 , - 5692 , - 4265 , - 178 , - 1031 , - 2264 , - 5397 , - 5870 , - 5203 , - 4916 , - 449 , - 5482 , - 3295 , - 1488 , - 1581 , - 5094 , - 1387 , - 4140 , - 2713 , - 4706 , - 5559 , - 712 , - 3845 , - 4318 , - 3651 , - 3364 , - 4977 , - 3930 , - 1743 , - 6016 , - 29 , - 3542 , - 5915 , - 2588 , - 1161 , - 3154 , - 4007 , - 5240 , - 2293 , - 2766 , - 2099 , - 1812 , - 3425 , - 2378 , - 191 , - 4464 , - 4557 , - 1990 , - 4363 , - 1036 , - 5689 , - 1602 , - 2455 , - 3688 , - 741 , - 1214 , - 547 , - 260 , - 1873 , - 826 , - 4719 , - 2912 , - 3005 , - 438 , - 2811 , - 5564 , - 4137 , - 50 , - 903 , - 2136 , - 5269 , - 5742 , - 5075 , - 4788 , - 321 , - 5354 , - 3167 , - 1360 , - 1453 , - 4966 , - 1259 , - 4012 , - 2585 , - 4578 , - 5431 , - 584 , - 3717 , - 4190 , - 3523 , - 3236 , - 4849 , - 3802 , - 1615 , - 5888 , - 5981 , - 3414 , - 5787 , - 2460 , - 1033 , - 3026 , - 3879 , - 5112 , - 2165 , - 2638 , - 1971 , - 1684 , - 3297 , - 2250 , - 63 , - 4336 , - 4429 , - 1862 , - 4235 , - 908 , - 5561 , - 1474 , - 2327 , - 3560 , - 613 , - 1086 , - 419 , - 132 , - 1745 , - 698 , - 4591 , - 2784 , - 2877 , - 310 , - 2683 , - 5436 , - 4009 , - 6002 , - 775 , - 2008 , - 5141 , - 5614 , - 4947 , - 4660 , - 193 , - 5226 , - 3039 , - 1232 , - 1325 , - 4838 , - 1131 , - 3884 , - 2457 , - 4450 , - 5303 , - 456 , - 3589 , - 4062 , - 3395 , - 3108 , - 4721 , - 3674 , - 1487 , - 5760 , - 5853 , - 3286 , - 5659 , - 2332 , - 905 , - 2898 , - 3751 , - 4984 , - 2037 , - 2510 , - 1843 , - 1556 , - 3169 , - 2122 , - 6015 , - 4208 , - 4301 , - 1734 , - 4107 , - 780 , - 5433 , - 1346 , - 2199 , - 3432 , - 485 , - 958 , - 291 , - 4 , - 1617 , - 570 , - 4463 , - 2656 , - 2749 , - 182 , - 2555 , - 5308 , - 3881 , - 5874 , - 647 , - 1880 , - 5013 , - 5486 , - 4819 , - 4532 , - 65 , - 5098 , - 2911 , - 1104 , - 1197 , - 4710 , - 1003 , - 3756 , - 2329 , - 4322 , - 5175 , - 328 , - 3461 , - 3934 , - 3267 , - 2980 , - 4593 , - 3546 , - 1359 , - 5632 , - 5725 , - 3158 , - 5531 , - 2204 , - 777 , - 2770 , - 3623 , - 4856 , - 1909 , - 2382 , - 1715 , - 1428 , - 3041 , - 1994 , - 5887 , - 4080 , - 4173 , - 1606 , - 3979 , - 652 , - 5305 , - 1218 , - 2071 , - 3304 , - 357 , - 830 , - 163 , - 5956 , - 1489 , - 442 , - 4335 , - 2528 , - 2621 , - 54 , - 2427 , - 5180 , - 3753 , - 5746 , - 519 , - 1752 , - 4885 , - 5358 , - 4691 , - 4404 , - 6017 , - 4970 , - 2783 , - 976 , - 1069 , - 4582 , - 875 , - 3628 , - 2201 , - 4194 , - 5047 , - 200 , - 3333 , - 3806 , - 3139 , - 2852 , - 4465 , - 3418 , - 1231 , - 5504 , - 5597 , - 3030 , - 5403 , - 2076 , - 649 , - 2642 , - 3495 , - 4728 , - 1781 , - 2254 , - 1587 , - 1300 , - 2913 , - 1866 , - 5759 , - 3952 , - 4045 , - 1478 , - 3851 , - 524 , - 5177 , - 1090 , - 1943 , - 3176 , - 229 , - 702 , - 35 , - 5828 , - 1361 , - 314 , - 4207 , - 2400 , - 2493 , - 6006 , - 2299 , - 5052 , - 3625 , - 5618 , - 391 , - 1624 , - 4757 , - 5230 , - 4563 , - 4276 , - 5889 , - 4842 , - 2655 , - 848 , - 941 , - 4454 , - 747 , - 3500 , - 2073 , - 4066 , - 4919 , - 72 , - 3205 , - 3678 , - 3011 , - 2724 , - 4337 , - 3290 , - 1103 , - 5376 , - 5469 , - 2902 , - 5275 , - 1948 , - 521 , - 2514 , - 3367 , - 4600 , - 1653 , - 2126 , - 1459 , - 1172 , - 2785 , - 1738 , - 5631 , - 3824 , - 3917 , - 1350 , - 3723 , - 396 , - 5049 , - 962 , - 1815 , - 3048 , - 101 , - 574 , - 5987 , - 5700 , - 1233 , - 186 , - 4079 , - 2272 , - 2365 , - 5878 , - 2171 , - 4924 , - 3497 , - 5490 , - 263 , - 1496 , - 4629 , - 5102 , - 4435 , - 4148 , - 5761 , - 4714 , - 2527 , - 720 , - 813 , - 4326 , - 619 , - 3372 , - 1945 , - 3938 , - 4791 , - 6024 , - 3077 , - 3550 , - 2883 , - 2596 , - 4209 , - 3162 , - 975 , - 5248 , - 5341 , - 2774 , - 5147 , - 1820 , - 393 , - 2386 , - 3239 , - 4472 , - 1525 , - 1998 , - 1331 , - 1044 , - 2657 , - 1610 , - 5503 , - 3696 , - 3789 , - 1222 , - 3595 , - 268 , - 4921 , - 834 , - 1687 , - 2920 , - 6053 , - 446 , - 5859 , - 5572 , - 1105 , - 58 , - 3951 , - 2144 , - 2237 , - 5750 , - 2043 , - 4796 , - 3369 , - 5362 , - 135 , - 1368 , - 4501 , - 4974 , - 4307 , - 4020 , - 5633 , - 4586 , - 2399 , - 592 , - 685 , - 4198 , - 491 , - 3244 , - 1817 , - 3810 , - 4663 , - 5896 , - 2949 , - 3422 , - 2755 , - 2468 , - 4081 , - 3034 , - 847 , - 5120 , - 5213 , - 2646 , - 5019 , - 1692 , - 265 , - 2258 , - 3111 , - 4344 , - 1397 , - 1870 , - 1203 , - 916 , - 2529 , - 1482 , - 5375 , - 3568 , - 3661 , - 1094 , - 3467 , - 140 , - 4793 , - 706 , - 1559 , - 2792 , - 5925 , - 318 , - 5731 , - 5444 , - 977 , - 6010 , - 3823 , - 2016 , - 2109 , - 5622 , - 1915 , - 4668 , - 3241 , - 5234 , - 7 , - 1240 , - 4373 , - 4846 , - 4179 , - 3892 , - 5505 , - 4458 , - 2271 , - 464 , - 557 , - 4070 , - 363 , - 3116 , - 1689 , - 3682 , - 4535 , - 5768 , - 2821 , - 3294 , - 2627 , - 2340 , - 3953 , - 2906 , - 719 , - 4992 , - 5085 , - 2518 , - 4891 , - 1564 , - 137 , - 2130 , - 2983 , - 4216 , - 1269 , - 1742 , - 1075 , - 788 , - 2401 , - 1354 , - 5247 , - 3440 , - 3533 , - 966 , - 3339 , - 12 , - 4665 , - 578 , - 1431 , - 2664 , - 5797 , - 190 , - 5603 , - 5316 , - 849 , - 5882 , - 3695 , - 1888 , - 1981 , - 5494 , - 1787 , - 4540 , - 3113 , - 5106 , - 5959 , - 1112 , - 4245 , - 4718 , - 4051 , - 3764 , - 5377 , - 4330 , - 2143 , - 336 , - 429 , - 3942 , - 235 , - 2988 , - 1561 , - 3554 , - 4407 , - 5640 , - 2693 , - 3166 , - 2499 , - 2212 , - 3825 , - 2778 , - 591 , - 4864 , - 4957 , - 2390 , - 4763 , - 1436 , - 9 , - 2002 , - 2855 , - 4088 , - 1141 , - 1614 , - 947 , - 660 , - 2273 , - 1226 , - 5119 , - 3312 , - 3405 , - 838 , - 3211 , - 5964 , - 4537 , - 450 , - 1303 , - 2536 , - 5669 , - 62 , - 5475 , - 5188 , - 721 , - 5754 , - 3567 , - 1760 , - 1853 , - 5366 , - 1659 , - 4412 , - 2985 , - 4978 , - 5831 , - 984 , - 4117 , - 4590 , - 3923 , - 3636 , - 5249 , - 4202 , - 2015 , - 208 , - 301 , - 3814 , - 107 , - 2860 , - 1433 , - 3426 , - 4279 , - 5512 , - 2565 , - 3038 , - 2371 , - 2084 , - 3697 , - 2650 , - 463 , - 4736 , - 4829 , - 2262 , - 4635 , - 1308 , - 5961 , - 1874 , - 2727 , - 3960 , - 1013 , - 1486 , - 819 , - 532 , - 2145 , - 1098 , - 4991 , - 3184 , - 3277 , - 710 , - 3083 , - 5836 , - 4409 , - 322 , - 1175 , - 2408 , - 5541 , - 6014 , - 5347 , - 5060 , - 593 , - 5626 , - 3439 , - 1632 , - 1725 , - 5238 , - 1531 , - 4284 , - 2857 , - 4850 , - 5703 , - 856 , - 3989 , - 4462 , - 3795 , - 3508 , - 5121 , - 4074 , - 1887 , - 80 , - 173 , - 3686 , - 6059 , - 2732 , - 1305 , - 3298 , - 4151 , - 5384 , - 2437 , - 2910 , - 2243 , - 1956 , - 3569 , - 2522 , - 335 , - 4608 , - 4701 , - 2134 , - 4507 , - 1180 , - 5833 , - 1746 , - 2599 , - 3832 , - 885 , - 1358 , - 691 , - 404 , - 2017 , - 970 , - 4863 , - 3056 , - 3149 , - 582 , - 2955 , - 5708 , - 4281 , - 194 , - 1047 , - 2280 , - 5413 , - 5886 , - 5219 , - 4932 , - 465 , - 5498 , - 3311 , - 1504 , - 1597 , - 5110 , - 1403 , - 4156 , - 2729 , - 4722 , - 5575 , - 728 , - 3861 , - 4334 , - 3667 , - 3380 , - 4993 , - 3946 , - 1759 , - 6032 , - 45 , - 3558 , - 5931 , - 2604 , - 1177 , - 3170 , - 4023 , - 5256 , - 2309 , - 2782 , - 2115 , - 1828 , - 3441 , - 2394 , - 207 , - 4480 , - 4573 , - 2006 , - 4379 , - 1052 , - 5705 , - 1618 , - 2471 , - 3704 , - 757 , - 1230 , - 563 , - 276 , - 1889 , - 842 , - 4735 , - 2928 , - 3021 , - 454 , - 2827 , - 5580 , - 4153 , - 66 , - 919 , - 2152 , - 5285 , - 5758 , - 5091 , - 4804 , - 337 , - 5370 , - 3183 , - 1376 , - 1469 , - 4982 , - 1275 , - 4028 , - 2601 , - 4594 , - 5447 , - 600 , - 3733 , - 4206 , - 3539 , - 3252 , - 4865 , - 3818 , - 1631 , - 5904 , - 5997 , - 3430 , - 5803 , - 2476 , - 1049 , - 3042 , - 3895 , - 5128 , - 2181 , - 2654 , - 1987 , - 1700 , - 3313 , - 2266 , - 79 , - 4352 , - 4445 , - 1878 , - 4251 , - 924 , - 5577 , - 1490 , - 2343 , - 3576 , - 629 , - 1102 , - 435 , - 148 , - 1761 , - 714 , - 4607 , - 2800 , - 2893 , - 326 , - 2699 , - 5452 , - 4025 , - 6018 , - 791 , - 2024 , - 5157 , - 5630 , - 4963 , - 4676 , - 209 , - 5242 , - 3055 , - 1248 , - 1341 , - 4854 , - 1147 , - 3900 , - 2473 , - 4466 , - 5319 , - 472 , - 3605 , - 4078 , - 3411 , - 3124 , - 4737 , - 3690 , - 1503 , - 5776 , - 5869 , - 3302 , - 5675 , - 2348 , - 921 , - 2914 , - 3767 , - 5000 , - 2053 , - 2526 , - 1859 , - 1572 , - 3185 , - 2138 , - 6031 , - 4224 , - 4317 , - 1750 , - 4123 , - 796 , - 5449 , - 1362 , - 2215 , - 3448 , - 501 , - 974 , - 307 , - 20 , - 1633 , - 586 , - 4479 , - 2672 , - 2765 , - 198 , - 2571 , - 5324 , - 3897 , - 5890 , - 663 , - 1896 , - 5029 , - 5502 , - 4835 , - 4548 , - 81 , - 5114 , - 2927 , - 1120 , - 1213 , - 4726 , - 1019 , - 3772 , - 2345 , - 4338 , - 5191 , - 344 , - 3477 , - 3950 , - 3283 , - 2996 , - 4609 , - 3562 , - 1375 , - 5648 , - 5741 , - 3174 , - 5547 , - 2220 , - 793 , - 2786 , - 3639 , - 4872 , - 1925 , - 2398 , - 1731 , - 1444 , - 3057 , - 2010 , - 5903 , - 4096 , - 4189 , - 1622 , - 3995 , - 668 , - 5321 , - 1234 , - 2087 , - 3320 , - 373 , - 846 , - 179 , - 5972 , - 1505 , - 458 , - 4351 , - 2544 , - 2637 , - 70 , - 2443 , - 5196 , - 3769 , - 5762 , - 535 , - 1768 , - 4901 , - 5374 , - 4707 , - 4420 , - 6033 , - 4986 , - 2799 , - 992 , - 1085 , - 4598 , - 891 , - 3644 , - 2217 , - 4210 , - 5063 , - 216 , - 3349 , - 3822 , - 3155 , - 2868 , - 4481 , - 3434 , - 1247 , - 5520 , - 5613 , - 3046 , - 5419 , - 2092 , - 665 , - 2658 , - 3511 , - 4744 , - 1797 , - 2270 , - 1603 , - 1316 , - 2929 , - 1882 , - 5775 , - 3968 , - 4061 , - 1494 , - 3867 , - 540 , - 5193 , - 1106 , - 1959 , - 3192 , - 245 , - 718 , - 51 , - 5844 , - 1377 , - 330 , - 4223 , - 2416 , - 2509 , - 6022 , - 2315 , - 5068 , - 3641 , - 5634 , - 407 , - 1640 , - 4773 , - 5246 , - 4579 , - 4292 , - 5905 , - 4858 , - 2671 , - 864 , - 957 , - 4470 , - 763 , - 3516 , - 2089 , - 4082 , - 4935 , - 88 , - 3221 , - 3694 , - 3027 , - 2740 , - 4353 , - 3306 , - 1119 , - 5392 , - 5485 , - 2918 , - 5291 , - 1964 , - 537 , - 2530 , - 3383 , - 4616 , - 1669 , - 2142 , - 1475 , - 1188 , - 2801 , - 1754 , - 5647 , - 3840 , - 3933 , - 1366 , - 3739 , - 412 , - 5065 , - 978 , - 1831 , - 3064 , - 117 , - 590 , - 6003 , - 5716 , - 1249 , - 202 , - 4095 , - 2288 , - 2381 , - 5894 , - 2187 , - 4940 , - 3513 , - 5506 , - 279 , - 1512 , - 4645 , - 5118 , - 4451 , - 4164 , - 5777 , - 4730 , - 2543 , - 736 , - 829 , - 4342 , - 635 , - 3388 , - 1961 , - 3954 , - 4807 , - 6040 , - 3093 , - 3566 , - 2899 , - 2612 , - 4225 , - 3178 , - 991 , - 5264 , - 5357 , - 2790 , - 5163 , - 1836 , - 409 , - 2402 , - 3255 , - 4488 , - 1541 , - 2014 , - 1347 , - 1060 , - 2673 , - 1626 , - 5519 , - 3712 , - 3805 , - 1238 , - 3611 , - 284 , - 4937 , - 850 , - 1703 , - 2936 , - 6069 , - 462 , - 5875 , - 5588 , - 1121 , - 74 , - 3967 , - 2160 , - 2253 , - 5766 , - 2059 , - 4812 , - 3385 , - 5378 , - 151 , - 1384 , - 4517 , - 4990 , - 4323 , - 4036 , - 5649 , - 4602 , - 2415 , - 608 , - 701 , - 4214 , - 507 , - 3260 , - 1833 , - 3826 , - 4679 , - 5912 , - 2965 , - 3438 , - 2771 , - 2484 , - 4097 , - 3050 , - 863 , - 5136 , - 5229 , - 2662 , - 5035 , - 1708 , - 281 , - 2274 , - 3127 , - 4360 , - 1413 , - 1886 , - 1219 , - 932 , - 2545 , - 1498 , - 5391 , - 3584 , - 3677 , - 1110 , - 3483 , - 156 , - 4809 , - 722 , - 1575 , - 2808 , - 5941 , - 334 , - 5747 , - 5460 , - 993 , - 6026 , - 3839 , - 2032 , - 2125 , - 5638 , - 1931 , - 4684 , - 3257 , - 5250 , - 23 , - 1256 , - 4389 , - 4862 , - 4195 , - 3908 , - 5521 , - 4474 , - 2287 , - 480 , - 573 , - 4086 , - 379 , - 3132 , - 1705 , - 3698 , - 4551 , - 5784 , - 2837 , - 3310 , - 2643 , - 2356 , - 3969 , - 2922 , - 735 , - 5008 , - 5101 , - 2534 , - 4907 , - 1580 , - 153 , - 2146 , - 2999 , - 4232 , - 1285 , - 1758 , - 1091 , - 804 , - 2417 , - 1370 , - 5263 , - 3456 , - 3549 , - 982 , - 3355 , - 28 , - 4681 , - 594 , - 1447 , - 2680 , - 5813 , - 206 , - 5619 , - 5332 , - 865 , - 5898 , - 3711 , - 1904 , - 1997 , - 5510 , - 1803 , - 4556 , - 3129 , - 5122 , - 5975 , - 1128 , - 4261 , - 4734 , - 4067 , - 3780 , - 5393 , - 4346 , - 2159 , - 352 , - 445 , - 3958 , - 251 , - 3004 , - 1577 , - 3570 , - 4423 , - 5656 , - 2709 , - 3182 , - 2515 , - 2228 , - 3841 , - 2794 , - 607 , - 4880 , - 4973 , - 2406 , - 4779 , - 1452 , - 25 , - 2018 , - 2871 , - 4104 , - 1157 , - 1630 , - 963 , - 676 , - 2289 , - 1242 , - 5135 , - 3328 , - 3421 , - 854 , - 3227 , - 5980 , - 4553 , - 466 , - 1319 , - 2552 , - 5685 , - 78 , - 5491 , - 5204 , - 737 , - 5770 , - 3583 , - 1776 , - 1869 , - 5382 , - 1675 , - 4428 , - 3001 , - 4994 , - 5847 , - 1000 , - 4133 , - 4606 , - 3939 , - 3652 , - 5265 , - 4218 , - 2031 , - 224 , - 317 , - 3830 , - 123 , - 2876 , - 1449 , - 3442 , - 4295 , - 5528 , - 2581 , - 3054 , - 2387 , - 2100 , - 3713 , - 2666 , - 479 , - 4752 , - 4845 , - 2278 , - 4651 , - 1324 , - 5977 , - 1890 , - 2743 , - 3976 , - 1029 , - 1502 , - 835 , - 548 , - 2161 , - 1114 , - 5007 , - 3200 , - 3293 , - 726 , - 3099 , - 5852 , - 4425 , - 338 , - 1191 , - 2424 , - 5557 , - 6030 , - 5363 , - 5076 , - 609 , - 5642 , - 3455 , - 1648 , - 1741 , - 5254 , - 1547 , - 4300 , - 2873 , - 4866 , - 5719 , - 872 , - 4005 , - 4478 , - 3811 , - 3524 , - 5137 , - 4090 , - 1903 , - 96 , - 189 , - 3702 , - 6075 , - 2748 , - 1321 , - 3314 , - 4167 , - 5400 , - 2453 , - 2926 , - 2259 , - 1972 , - 3585 , - 2538 , - 351 , - 4624 , - 4717 , - 2150 , - 4523 , - 1196 , - 5849 , - 1762 , - 2615 , - 3848 , - 901 , - 1374 , - 707 , - 420 , - 2033 , - 986 , - 4879 , - 3072 , - 3165 , - 598 , - 2971 , - 5724 , - 4297 , - 210 , - 1063 , - 2296 , - 5429 , - 5902 , - 5235 , - 4948 , - 481 , - 5514 , - 3327 , - 1520 , - 1613 , - 5126 , - 1419 , - 4172 , - 2745 , - 4738 , - 5591 , - 744 , - 3877 , - 4350 , - 3683 , - 3396 , - 5009 , - 3962 , - 1775 , - 6048 , - 61 , - 3574 , - 5947 , - 2620 , - 1193 , - 3186 , - 4039 , - 5272 , - 2325 , - 2798 , - 2131 , - 1844 , - 3457 , - 2410 , - 223 , - 4496 , - 4589 , - 2022 , - 4395 , - 1068 , - 5721 , - 1634 , - 2487 , - 3720 , - 773 , - 1246 , - 579 , - 292 , - 1905 , - 858 , - 4751 , - 2944 , - 3037 , - 470 , - 2843 , - 5596 , - 4169 , - 82 , - 935 , - 2168 , - 5301 , - 5774 , - 5107 , - 4820 , - 353 , - 5386 , - 3199 , - 1392 , - 1485 , - 4998 , - 1291 , - 4044 , - 2617 , - 4610 , - 5463 , - 616 , - 3749 , - 4222 , - 3555 , - 3268 , - 4881 , - 3834 , - 1647 , - 5920 , - 6013 , - 3446 , - 5819 , - 2492 , - 1065 , - 3058 , - 3911 , - 5144 , - 2197 , - 2670 , - 2003 , - 1716 , - 3329 , - 2282 , - 95 , - 4368 , - 4461 , - 1894 , - 4267 , - 940 , - 5593 , - 1506 , - 2359 , - 3592 , - 645 , - 1118 , - 451 , - 164 , - 1777 , - 730 , - 4623 , - 2816 , - 2909 , - 342 , - 2715 , - 5468 , - 4041 , - 6034 , - 807 , - 2040 , - 5173 , - 5646 , - 4979 , - 4692 , - 225 , - 5258 , - 3071 , - 1264 , - 1357 , - 4870 , - 1163 , - 3916 , - 2489 , - 4482 , - 5335 , - 488 , - 3621 , - 4094 , - 3427 , - 3140 , - 4753 , - 3706 , - 1519 , - 5792 , - 5885 , - 3318 , - 5691 , - 2364 , - 937 , - 2930 , - 3783 , - 5016 , - 2069 , - 2542 , - 1875 , - 1588 , - 3201 , - 2154 , - 6047 , - 4240 , - 4333 , - 1766 , - 4139 , - 812 , - 5465 , - 1378 , - 2231 , - 3464 , - 517 , - 990 , - 323 , - 36 , - 1649 , - 602 , - 4495 , - 2688 , - 2781 , - 214 , - 2587 , - 5340 , - 3913 , - 5906 , - 679 , - 1912 , - 5045 , - 5518 , - 4851 , - 4564 , - 97 , - 5130 , - 2943 , - 1136 , - 1229 , - 4742 , - 1035 , - 3788 , - 2361 , - 4354 , - 5207 , - 360 , - 3493 , - 3966 , - 3299 , - 3012 , - 4625 , - 3578 , - 1391 , - 5664 , - 5757 , - 3190 , - 5563 , - 2236 , - 809 , - 2802 , - 3655 , - 4888 , - 1941 , - 2414 , - 1747 , - 1460 , - 3073 , - 2026 , - 5919 , - 4112 , - 4205 , - 1638 , - 4011 , - 684 , - 5337 , - 1250 , - 2103 , - 3336 , - 389 , - 862 , - 195 , - 5988 , - 1521 , - 474 , - 4367 , - 2560 , - 2653 , - 86 , - 2459 , - 5212 , - 3785 , - 5778 , - 551 , - 1784 , - 4917 , - 5390 , - 4723 , - 4436 , - 6049 , - 5002 , - 2815 , - 1008 , - 1101 , - 4614 , - 907 , - 3660 , - 2233 , - 4226 , - 5079 , - 232 , - 3365 , - 3838 , - 3171 , - 2884 , - 4497 , - 3450 , - 1263 , - 5536 , - 5629 , - 3062 , - 5435 , - 2108 , - 681 , - 2674 , - 3527 , - 4760 , - 1813 , - 2286 , - 1619 , - 1332 , - 2945 , - 1898 , - 5791 , - 3984 , - 4077 , - 1510 , - 3883 , - 556 , - 5209 , - 1122 , - 1975 , - 3208 , - 261 , - 734 , - 67 , - 5860 , - 1393 , - 346 , - 4239 , - 2432 , - 2525 , - 6038 , - 2331 , - 5084 , - 3657 , - 5650 , - 423 , - 1656 , - 4789 , - 5262 , - 4595 , - 4308 , - 5921 , - 4874 , - 2687 , - 880 , - 973 , - 4486 , - 779 , - 3532 , - 2105 , - 4098 , - 4951 , - 104 , - 3237 , - 3710 , - 3043 , - 2756 , - 4369 , - 3322 , - 1135 , - 5408 , - 5501 , - 2934 , - 5307 , - 1980 , - 553 , - 2546 , - 3399 , - 4632 , - 1685 , - 2158 , - 1491 , - 1204 , - 2817 , - 1770 , - 5663 , - 3856 , - 3949 , - 1382 , - 3755 , - 428 , - 5081 , - 994 , - 1847 , - 3080 , - 133 , - 606 , - 6019 , - 5732 , - 1265 , - 218 , - 4111 , - 2304 , - 2397 , - 5910 , - 2203 , - 4956 , - 3529 , - 5522 , - 295 , - 1528 , - 4661 , - 5134 , - 4467 , - 4180 , - 5793 , - 4746 , - 2559 , - 752 , - 845 , - 4358 , - 651 , - 3404 , - 1977 , - 3970 , - 4823 , - 6056 , - 3109 , - 3582 , - 2915 , - 2628 , - 4241 , - 3194 , - 1007 , - 5280 , - 5373 , - 2806 , - 5179 , - 1852 , - 425 , - 2418 , - 3271 , - 4504 , - 1557 , - 2030 , - 1363 , - 1076 , - 2689 , - 1642 , - 5535 , - 3728 , - 3821 , - 1254 , - 3627 , - 300 , - 4953 , - 866 , - 1719 , - 2952 , - 5 , - 478 , - 5891 , - 5604 , - 1137 , - 90 , - 3983 , - 2176 , - 2269 , - 5782 , - 2075 , - 4828 , - 3401 , - 5394 , - 167 , - 1400 , - 4533 , - 5006 , - 4339 , - 4052 , - 5665 , - 4618 , - 2431 , - 624 , - 717 , - 4230 , - 523 , - 3276 , - 1849 , - 3842 , - 4695 , - 5928 , - 2981 , - 3454 , - 2787 , - 2500 , - 4113 , - 3066 , - 879 , - 5152 , - 5245 , - 2678 , - 5051 , - 1724 , - 297 , - 2290 , - 3143 , - 4376 , - 1429 , - 1902 , - 1235 , - 948 , - 2561 , - 1514 , - 5407 , - 3600 , - 3693 , - 1126 , - 3499 , - 172 , - 4825 , - 738 , - 1591 , - 2824 , - 5957 , - 350 , - 5763 , - 5476 , - 1009 , - 6042 , - 3855 , - 2048 , - 2141 , - 5654 , - 1947 , - 4700 , - 3273 , - 5266 , - 39 , - 1272 , - 4405 , - 4878 , - 4211 , - 3924 , - 5537 , - 4490 , - 2303 , - 496 , - 589 , - 4102 , - 395 , - 3148 , - 1721 , - 3714 , - 4567 , - 5800 , - 2853 , - 3326 , - 2659 , - 2372 , - 3985 , - 2938 , - 751 , - 5024 , - 5117 , - 2550 , - 4923 , - 1596 , - 169 , - 2162 , - 3015 , - 4248 , - 1301 , - 1774 , - 1107 , - 820 , - 2433 , - 1386 , - 5279 , - 3472 , - 3565 , - 998 , - 3371 , - 44 , - 4697 , - 610 , - 1463 , - 2696 , - 5829 , - 222 , - 5635 , - 5348 , - 881 , - 5914 , - 3727 , - 1920 , - 2013 , - 5526 , - 1819 , - 4572 , - 3145 , - 5138 , - 5991 , - 1144 , - 4277 , - 4750 , - 4083 , - 3796 , - 5409 , - 4362 , - 2175 , - 368 , - 461 , - 3974 , - 267 , - 3020 , - 1593 , - 3586 , - 4439 , - 5672 , - 2725 , - 3198 , - 2531 , - 2244 , - 3857 , - 2810 , - 623 , - 4896 , - 4989 , - 2422 , - 4795 , - 1468 , - 41 , - 2034 , - 2887 , - 4120 , - 1173 , - 1646 , - 979 , - 692 , - 2305 , - 1258 , - 5151 , - 3344 , - 3437 , - 870 , - 3243 , - 5996 , - 4569 , - 482 , - 1335 , - 2568 , - 5701 , - 94 , - 5507 , - 5220 , - 753 , - 5786 , - 3599 , - 1792 , - 1885 , - 5398 , - 1691 , - 4444 , - 3017 , - 5010 , - 5863 , - 1016 , - 4149 , - 4622 , - 3955 , - 3668 , - 5281 , - 4234 , - 2047 , - 240 , - 333 , - 3846 , - 139 , - 2892 , - 1465 , - 3458 , - 4311 , - 5544 , - 2597 , - 3070 , - 2403 , - 2116 , - 3729 , - 2682 , - 495 , - 4768 , - 4861 , - 2294 , - 4667 , - 1340 , - 5993 , - 1906 , - 2759 , - 3992 , - 1045 , - 1518 , - 851 , - 564 , - 2177 , - 1130 , - 5023 , - 3216 , - 3309 , - 742 , - 3115 , - 5868 , - 4441 , - 354 , - 1207 , - 2440 , - 5573 , - 6046 , - 5379 , - 5092 , - 625 , - 5658 , - 3471 , - 1664 , - 1757 , - 5270 , - 1563 , - 4316 , - 2889 , - 4882 , - 5735 , - 888 , - 4021 , - 4494 , - 3827 , - 3540 , - 5153 , - 4106 , - 1919 , - 112 , - 205 , - 3718 , - 11 , - 2764 , - 1337 , - 3330 , - 4183 , - 5416 , - 2469 , - 2942 , - 2275 , - 1988 , - 3601 , - 2554 , - 367 , - 4640 , - 4733 , - 2166 , - 4539 , - 1212 , - 5865 , - 1778 , - 2631 , - 3864 , - 917 , - 1390 , - 723 , - 436 , - 2049 , - 1002 , - 4895 , - 3088 , - 3181 , - 614 , - 2987 , - 5740 , - 4313 , - 226 , - 1079 , - 2312 , - 5445 , - 5918 , - 5251 , - 4964 , - 497 , - 5530 , - 3343 , - 1536 , - 1629 , - 5142 , - 1435 , - 4188 , - 2761 , - 4754 , - 5607 , - 760 , - 3893 , - 4366 , - 3699 , - 3412 , - 5025 , - 3978 , - 1791 , - 6064 , - 77 , - 3590 , - 5963 , - 2636 , - 1209 , - 3202 , - 4055 , - 5288 , - 2341 , - 2814 , - 2147 , - 1860 , - 3473 , - 2426 , - 239 , - 4512 , - 4605 , - 2038 , - 4411 , - 1084 , - 5737 , - 1650 , - 2503 , - 3736 , - 789 , - 1262 , - 595 , - 308 , - 1921 , - 874 , - 4767 , - 2960 , - 3053 , - 486 , - 2859 , - 5612 , - 4185 , - 98 , - 951 , - 2184 , - 5317 , - 5790 , - 5123 , - 4836 , - 369 , - 5402 , - 3215 , - 1408 , - 1501 , - 5014 , - 1307 , - 4060 , - 2633 , - 4626 , - 5479 , - 632 , - 3765 , - 4238 , - 3571 , - 3284 , - 4897 , - 3850 , - 1663 , - 5936 , - 6029 , - 3462 , - 5835 , - 2508 , - 1081 , - 3074 , - 3927 , - 5160 , - 2213 , - 2686 , - 2019 , - 1732 , - 3345 , - 2298 , - 111 , - 4384 , - 4477 , - 1910 , - 4283 , - 956 , - 5609 , - 1522 , - 2375 , - 3608 , - 661 , - 1134 , - 467 , - 180 , - 1793 , - 746 , - 4639 , - 2832 , - 2925 , - 358 , - 2731 , - 5484 , - 4057 , - 6050 , - 823 , - 2056 , - 5189 , - 5662 , - 4995 , - 4708 , - 241 , - 5274 , - 3087 , - 1280 , - 1373 , - 4886 , - 1179 , - 3932 , - 2505 , - 4498 , - 5351 , - 504 , - 3637 , - 4110 , - 3443 , - 3156 , - 4769 , - 3722 , - 1535 , - 5808 , - 5901 , - 3334 , - 5707 , - 2380 , - 953 , - 2946 , - 3799 , - 5032 , - 2085 , - 2558 , - 1891 , - 1604 , - 3217 , - 2170 , - 6063 , - 4256 , - 4349 , - 1782 , - 4155 , - 828 , - 5481 , - 1394 , - 2247 , - 3480 , - 533 , - 1006 , - 339 , - 52 , - 1665 , - 618 , - 4511 , - 2704 , - 2797 , - 230 , - 2603 , - 5356 , - 3929 , - 5922 , - 695 , - 1928 , - 5061 , - 5534 , - 4867 , - 4580 , - 113 , - 5146 , - 2959 , - 1152 , - 1245 , - 4758 , - 1051 , - 3804 , - 2377 , - 4370 , - 5223 , - 376 , - 3509 , - 3982 , - 3315 , - 3028 , - 4641 , - 3594 , - 1407 , - 5680 , - 5773 , - 3206 , - 5579 , - 2252 , - 825 , - 2818 , - 3671 , - 4904 , - 1957 , - 2430 , - 1763 , - 1476 , - 3089 , - 2042 , - 5935 , - 4128 , - 4221 , - 1654 , - 4027 , - 700 , - 5353 , - 1266 , - 2119 , - 3352 , - 405 , - 878 , - 211 , - 6004 , - 1537 , - 490 , - 4383 , - 2576 , - 2669 , - 102 , - 2475 , - 5228 , - 3801 , - 5794 , - 567 , - 1800 , - 4933 , - 5406 , - 4739 , - 4452 , - 6065 , - 5018 , - 2831 , - 1024 , - 1117 , - 4630 , - 923 , - 3676 , - 2249 , - 4242 , - 5095 , - 248 , - 3381 , - 3854 , - 3187 , - 2900 , - 4513 , - 3466 , - 1279 , - 5552 , - 5645 , - 3078 , - 5451 , - 2124 , - 697 , - 2690 , - 3543 , - 4776 , - 1829 , - 2302 , - 1635 , - 1348 , - 2961 , - 1914 , - 5807 , - 4000 , - 4093 , - 1526 , - 3899 , - 572 , - 5225 , - 1138 , - 1991 , - 3224 , - 277 , - 750 , - 83 , - 5876 , - 1409 , - 362 , - 4255 , - 2448 , - 2541 , - 6054 , - 2347 , - 5100 , - 3673 , - 5666 , - 439 , - 1672 , - 4805 , - 5278 , - 4611 , - 4324 , - 5937 , - 4890 , - 2703 , - 896 , - 989 , - 4502 , - 795 , - 3548 , - 2121 , - 4114 , - 4967 , - 120 , - 3253 , - 3726 , - 3059 , - 2772 , - 4385 , - 3338 , - 1151 , - 5424 , - 5517 , - 2950 , - 5323 , - 1996 , - 569 , - 2562 , - 3415 , - 4648 , - 1701 , - 2174 , - 1507 , - 1220 , - 2833 , - 1786 , - 5679 , - 3872 , - 3965 , - 1398 , - 3771 , - 444 , - 5097 , - 1010 , - 1863 , - 3096 , - 149 , - 622 , - 6035 , - 5748 , - 1281 , - 234 , - 4127 , - 2320 , - 2413 , - 5926 , - 2219 , - 4972 , - 3545 , - 5538 , - 311 , - 1544 , - 4677 , - 5150 , - 4483 , - 4196 , - 5809 , - 4762 , - 2575 , - 768 , - 861 , - 4374 , - 667 , - 3420 , - 1993 , - 3986 , - 4839 , - 6072 , - 3125 , - 3598 , - 2931 , - 2644 , - 4257 , - 3210 , - 1023 , - 5296 , - 5389 , - 2822 , - 5195 , - 1868 , - 441 , - 2434 , - 3287 , - 4520 , - 1573 , - 2046 , - 1379 , - 1092 , - 2705 , - 1658 , - 5551 , - 3744 , - 3837 , - 1270 , - 3643 , - 316 , - 4969 , - 882 , - 1735 , - 2968 , - 21 , - 494 , - 5907 , - 5620 , - 1153 , - 106 , - 3999 , - 2192 , - 2285 , - 5798 , - 2091 , - 4844 , - 3417 , - 5410 , - 183 , - 1416 , - 4549 , - 5022 , - 4355 , - 4068 , - 5681 , - 4634 , - 2447 , - 640 , - 733 , - 4246 , - 539 , - 3292 , - 1865 , - 3858 , - 4711 , - 5944 , - 2997 , - 3470 , - 2803 , - 2516 , - 4129 , - 3082 , - 895 , - 5168 , - 5261 , - 2694 , - 5067 , - 1740 , - 313 , - 2306 , - 3159 , - 4392 , - 1445 , - 1918 , - 1251 , - 964 , - 2577 , - 1530 , - 5423 , - 3616 , - 3709 , - 1142 , - 3515 , - 188 , - 4841 , - 754 , - 1607 , - 2840 , - 5973 , - 366 , - 5779 , - 5492 , - 1025 , - 6058 , - 3871 , - 2064 , - 2157 , - 5670 , - 1963 , - 4716 , - 3289 , - 5282 , - 55 , - 1288 , - 4421 , - 4894 , - 4227 , - 3940 , - 5553 , - 4506 , - 2319 , - 512 , - 605 , - 4118 , - 411 , - 3164 , - 1737 , - 3730 , - 4583 , - 5816 , - 2869 , - 3342 , - 2675 , - 2388 , - 4001 , - 2954 , - 767 , - 5040 , - 5133 , - 2566 , - 4939 , - 1612 , - 185 , - 2178 , - 3031 , - 4264 , - 1317 , - 1790 , - 1123 , - 836 , - 2449 , - 1402 , - 5295 , - 3488 , - 3581 , - 1014 , - 3387 , - 60 , - 4713 , - 626 , - 1479 , - 2712 , - 5845 , - 238 , - 5651 , - 5364 , - 897 , - 5930 , - 3743 , - 1936 , - 2029 , - 5542 , - 1835 , - 4588 , - 3161 , - 5154 , - 6007 , - 1160 , - 4293 , - 4766 , - 4099 , - 3812 , - 5425 , - 4378 , - 2191 , - 384 , - 477 , - 3990 , - 283 , - 3036 , - 1609 , - 3602 , - 4455 , - 5688 , - 2741 , - 3214 , - 2547 , - 2260 , - 3873 , - 2826 , - 639 , - 4912 , - 5005 , - 2438 , - 4811 , - 1484 , - 57 , - 2050 , - 2903 , - 4136 , - 1189 , - 1662 , - 995 , - 708 , - 2321 , - 1274 , - 5167 , - 3360 , - 3453 , - 886 , - 3259 , - 6012 , - 4585 , - 498 , - 1351 , - 2584 , - 5717 , - 110 , - 5523 , - 5236 , - 769 , - 5802 , - 3615 , - 1808 , - 1901 , - 5414 , - 1707 , - 4460 , - 3033 , - 5026 , - 5879 , - 1032 , - 4165 , - 4638 , - 3971 , - 3684 , - 5297 , - 4250 , - 2063 , - 256 , - 349 , - 3862 , - 155 , - 2908 , - 1481 , - 3474 , - 4327 , - 5560 , - 2613 , - 3086 , - 2419 , - 2132 , - 3745 , - 2698 , - 511 , - 4784 , - 4877 , - 2310 , - 4683 , - 1356 , - 6009 , - 1922 , - 2775 , - 4008 , - 1061 , - 1534 , - 867 , - 580 , - 2193 , - 1146 , - 5039 , - 3232 , - 3325 , - 758 , - 3131 , - 5884 , - 4457 , - 370 , - 1223 , - 2456 , - 5589 , - 6062 , - 5395 , - 5108 , - 641 , - 5674 , - 3487 , - 1680 , - 1773 , - 5286 , - 1579 , - 4332 , - 2905 , - 4898 , - 5751 , - 904 , - 4037 , - 4510 , - 3843 , - 3556 , - 5169 , - 4122 , - 1935 , - 128 , - 221 , - 3734 , - 27 , - 2780 , - 1353 , - 3346 , - 4199 , - 5432 , - 2485 , - 2958 , - 2291 , - 2004 , - 3617 , - 2570 , - 383 , - 4656 , - 4749 , - 2182 , - 4555 , - 1228 , - 5881 , - 1794 , - 2647 , - 3880 , - 933 , - 1406 , - 739 , - 452 , - 2065 , - 1018 , - 4911 , - 3104 , - 3197 , - 630 , - 3003 , - 5756 , - 4329 , - 242 , - 1095 , - 2328 , - 5461 , - 5934 , - 5267 , - 4980 , - 513 , - 5546 , - 3359 , - 1552 , - 1645 , - 5158 , - 1451 , - 4204 , - 2777 , - 4770 , - 5623 , - 776 , - 3909 , - 4382 , - 3715 , - 3428 , - 5041 , - 3994 , - 1807 , - 0 , - 5015 , - 3310 , - 1029 , - 4316 , - 883 , - 3018 , - 4577 , - 5560 , - 5967 , - 5798 , - 5053 , - 3732 , - 1835 , - 5506 , - 2457 , - 4976 , - 775 , - 2142 , - 2933 , - 3148 , - 2787 , - 1850 , - 337 , - 4392 , - 1727 , - 4630 , - 813 , - 2564 , - 3739 , - 4338 , - 4361 , - 3808 , - 2679 , - 974 , - 4837 , - 1980 , - 4691 , - 682 , - 2241 , - 3224 , - 3631 , - 3462 , - 2717 , - 1396 , - 5643 , - 3170 , - 121 , - 2640 , - 4583 , - 5950 , - 597 , - 812 , - 451 , - 5658 , - 4145 , - 2056 , - 5535 , - 2294 , - 4621 , - 228 , - 1403 , - 2002 , - 2025 , - 1472 , - 343 , - 4782 , - 2501 , - 5788 , - 2355 , - 4490 , - 6049 , - 888 , - 1295 , - 1126 , - 381 , - 5204 , - 3307 , - 834 , - 3929 , - 304 , - 2247 , - 3614 , - 4405 , - 4620 , - 4259 , - 3322 , - 1809 , - 5864 , - 3199 , - 6102 , - 2285 , - 4036 , - 5211 , - 5810 , - 5833 , - 5280 , - 4151 , - 2446 , - 165 , - 3452 , - 19 , - 2154 , - 3713 , - 4696 , - 5103 , - 4934 , - 4189 , - 2868 , - 971 , - 4642 , - 1593 , - 4112 , - 6055 , - 1278 , - 2069 , - 2284 , - 1923 , - 986 , - 5617 , - 3528 , - 863 , - 3766 , - 6093 , - 1700 , - 2875 , - 3474 , - 3497 , - 2944 , - 1815 , - 110 , - 3973 , - 1116 , - 3827 , - 5962 , - 1377 , - 2360 , - 2767 , - 2598 , - 1853 , - 532 , - 4779 , - 2306 , - 5401 , - 1776 , - 3719 , - 5086 , - 5877 , - 6092 , - 5731 , - 4794 , - 3281 , - 1192 , - 4671 , - 1430 , - 3757 , - 5508 , - 539 , - 1138 , - 1161 , - 608 , - 5623 , - 3918 , - 1637 , - 4924 , - 1491 , - 3626 , - 5185 , - 24 , - 431 , - 262 , - 5661 , - 4340 , - 2443 , - 6114 , - 3065 , - 5584 , - 1383 , - 2750 , - 3541 , - 3756 , - 3395 , - 2458 , - 945 , - 5000 , - 2335 , - 5238 , - 1421 , - 3172 , - 4347 , - 4946 , - 4969 , - 4416 , - 3287 , - 1582 , - 5445 , - 2588 , - 5299 , - 1290 , - 2849 , - 3832 , - 4239 , - 4070 , - 3325 , - 2004 , - 107 , - 3778 , - 729 , - 3248 , - 5191 , - 414 , - 1205 , - 1420 , - 1059 , - 122 , - 4753 , - 2664 , - 6143 , - 2902 , - 5229 , - 836 , - 2011 , - 2610 , - 2633 , - 2080 , - 951 , - 5390 , - 3109 , - 252 , - 2963 , - 5098 , - 513 , - 1496 , - 1903 , - 1734 , - 989 , - 5812 , - 3915 , - 1442 , - 4537 , - 912 , - 2855 , - 4222 , - 5013 , - 5228 , - 4867 , - 3930 , - 2417 , - 328 , - 3807 , - 566 , - 2893 , - 4644 , - 5819 , - 274 , - 297 , - 5888 , - 4759 , - 3054 , - 773 , - 4060 , - 627 , - 2762 , - 4321 , - 5304 , - 5711 , - 5542 , - 4797 , - 3476 , - 1579 , - 5250 , - 2201 , - 4720 , - 519 , - 1886 , - 2677 , - 2892 , - 2531 , - 1594 , - 81 , - 4136 , - 1471 , - 4374 , - 557 , - 2308 , - 3483 , - 4082 , - 4105 , - 3552 , - 2423 , - 718 , - 4581 , - 1724 , - 4435 , - 426 , - 1985 , - 2968 , - 3375 , - 3206 , - 2461 , - 1140 , - 5387 , - 2914 , - 6009 , - 2384 , - 4327 , - 5694 , - 341 , - 556 , - 195 , - 5402 , - 3889 , - 1800 , - 5279 , - 2038 , - 4365 , - 6116 , - 1147 , - 1746 , - 1769 , - 1216 , - 87 , - 4526 , - 2245 , - 5532 , - 2099 , - 4234 , - 5793 , - 632 , - 1039 , - 870 , - 125 , - 4948 , - 3051 , - 578 , - 3673 , - 48 , - 1991 , - 3358 , - 4149 , - 4364 , - 4003 , - 3066 , - 1553 , - 5608 , - 2943 , - 5846 , - 2029 , - 3780 , - 4955 , - 5554 , - 5577 , - 5024 , - 3895 , - 2190 , - 6053 , - 3196 , - 5907 , - 1898 , - 3457 , - 4440 , - 4847 , - 4678 , - 3933 , - 2612 , - 715 , - 4386 , - 1337 , - 3856 , - 5799 , - 1022 , - 1813 , - 2028 , - 1667 , - 730 , - 5361 , - 3272 , - 607 , - 3510 , - 5837 , - 1444 , - 2619 , - 3218 , - 3241 , - 2688 , - 1559 , - 5998 , - 3717 , - 860 , - 3571 , - 5706 , - 1121 , - 2104 , - 2511 , - 2342 , - 1597 , - 276 , - 4523 , - 2050 , - 5145 , - 1520 , - 3463 , - 4830 , - 5621 , - 5836 , - 5475 , - 4538 , - 3025 , - 936 , - 4415 , - 1174 , - 3501 , - 5252 , - 283 , - 882 , - 905 , - 352 , - 5367 , - 3662 , - 1381 , - 4668 , - 1235 , - 3370 , - 4929 , - 5912 , - 175 , - 6 , - 5405 , - 4084 , - 2187 , - 5858 , - 2809 , - 5328 , - 1127 , - 2494 , - 3285 , - 3500 , - 3139 , - 2202 , - 689 , - 4744 , - 2079 , - 4982 , - 1165 , - 2916 , - 4091 , - 4690 , - 4713 , - 4160 , - 3031 , - 1326 , - 5189 , - 2332 , - 5043 , - 1034 , - 2593 , - 3576 , - 3983 , - 3814 , - 3069 , - 1748 , - 5995 , - 3522 , - 473 , - 2992 , - 4935 , - 158 , - 949 , - 1164 , - 803 , - 6010 , - 4497 , - 2408 , - 5887 , - 2646 , - 4973 , - 580 , - 1755 , - 2354 , - 2377 , - 1824 , - 695 , - 5134 , - 2853 , - 6140 , - 2707 , - 4842 , - 257 , - 1240 , - 1647 , - 1478 , - 733 , - 5556 , - 3659 , - 1186 , - 4281 , - 656 , - 2599 , - 3966 , - 4757 , - 4972 , - 4611 , - 3674 , - 2161 , - 72 , - 3551 , - 310 , - 2637 , - 4388 , - 5563 , - 18 , - 41 , - 5632 , - 4503 , - 2798 , - 517 , - 3804 , - 371 , - 2506 , - 4065 , - 5048 , - 5455 , - 5286 , - 4541 , - 3220 , - 1323 , - 4994 , - 1945 , - 4464 , - 263 , - 1630 , - 2421 , - 2636 , - 2275 , - 1338 , - 5969 , - 3880 , - 1215 , - 4118 , - 301 , - 2052 , - 3227 , - 3826 , - 3849 , - 3296 , - 2167 , - 462 , - 4325 , - 1468 , - 4179 , - 170 , - 1729 , - 2712 , - 3119 , - 2950 , - 2205 , - 884 , - 5131 , - 2658 , - 5753 , - 2128 , - 4071 , - 5438 , - 85 , - 300 , - 6083 , - 5146 , - 3633 , - 1544 , - 5023 , - 1782 , - 4109 , - 5860 , - 891 , - 1490 , - 1513 , - 960 , - 5975 , - 4270 , - 1989 , - 5276 , - 1843 , - 3978 , - 5537 , - 376 , - 783 , - 614 , - 6013 , - 4692 , - 2795 , - 322 , - 3417 , - 5936 , - 1735 , - 3102 , - 3893 , - 4108 , - 3747 , - 2810 , - 1297 , - 5352 , - 2687 , - 5590 , - 1773 , - 3524 , - 4699 , - 5298 , - 5321 , - 4768 , - 3639 , - 1934 , - 5797 , - 2940 , - 5651 , - 1642 , - 3201 , - 4184 , - 4591 , - 4422 , - 3677 , - 2356 , - 459 , - 4130 , - 1081 , - 3600 , - 5543 , - 766 , - 1557 , - 1772 , - 1411 , - 474 , - 5105 , - 3016 , - 351 , - 3254 , - 5581 , - 1188 , - 2363 , - 2962 , - 2985 , - 2432 , - 1303 , - 5742 , - 3461 , - 604 , - 3315 , - 5450 , - 865 , - 1848 , - 2255 , - 2086 , - 1341 , - 20 , - 4267 , - 1794 , - 4889 , - 1264 , - 3207 , - 4574 , - 5365 , - 5580 , - 5219 , - 4282 , - 2769 , - 680 , - 4159 , - 918 , - 3245 , - 4996 , - 27 , - 626 , - 649 , - 96 , - 5111 , - 3406 , - 1125 , - 4412 , - 979 , - 3114 , - 4673 , - 5656 , - 6063 , - 5894 , - 5149 , - 3828 , - 1931 , - 5602 , - 2553 , - 5072 , - 871 , - 2238 , - 3029 , - 3244 , - 2883 , - 1946 , - 433 , - 4488 , - 1823 , - 4726 , - 909 , - 2660 , - 3835 , - 4434 , - 4457 , - 3904 , - 2775 , - 1070 , - 4933 , - 2076 , - 4787 , - 778 , - 2337 , - 3320 , - 3727 , - 3558 , - 2813 , - 1492 , - 5739 , - 3266 , - 217 , - 2736 , - 4679 , - 6046 , - 693 , - 908 , - 547 , - 5754 , - 4241 , - 2152 , - 5631 , - 2390 , - 4717 , - 324 , - 1499 , - 2098 , - 2121 , - 1568 , - 439 , - 4878 , - 2597 , - 5884 , - 2451 , - 4586 , - 1 , - 984 , - 1391 , - 1222 , - 477 , - 5300 , - 3403 , - 930 , - 4025 , - 400 , - 2343 , - 3710 , - 4501 , - 4716 , - 4355 , - 3418 , - 1905 , - 5960 , - 3295 , - 54 , - 2381 , - 4132 , - 5307 , - 5906 , - 5929 , - 5376 , - 4247 , - 2542 , - 261 , - 3548 , - 115 , - 2250 , - 3809 , - 4792 , - 5199 , - 5030 , - 4285 , - 2964 , - 1067 , - 4738 , - 1689 , - 4208 , - 7 , - 1374 , - 2165 , - 2380 , - 2019 , - 1082 , - 5713 , - 3624 , - 959 , - 3862 , - 45 , - 1796 , - 2971 , - 3570 , - 3593 , - 3040 , - 1911 , - 206 , - 4069 , - 1212 , - 3923 , - 6058 , - 1473 , - 2456 , - 2863 , - 2694 , - 1949 , - 628 , - 4875 , - 2402 , - 5497 , - 1872 , - 3815 , - 5182 , - 5973 , - 44 , - 5827 , - 4890 , - 3377 , - 1288 , - 4767 , - 1526 , - 3853 , - 5604 , - 635 , - 1234 , - 1257 , - 704 , - 5719 , - 4014 , - 1733 , - 5020 , - 1587 , - 3722 , - 5281 , - 120 , - 527 , - 358 , - 5757 , - 4436 , - 2539 , - 66 , - 3161 , - 5680 , - 1479 , - 2846 , - 3637 , - 3852 , - 3491 , - 2554 , - 1041 , - 5096 , - 2431 , - 5334 , - 1517 , - 3268 , - 4443 , - 5042 , - 5065 , - 4512 , - 3383 , - 1678 , - 5541 , - 2684 , - 5395 , - 1386 , - 2945 , - 3928 , - 4335 , - 4166 , - 3421 , - 2100 , - 203 , - 3874 , - 825 , - 3344 , - 5287 , - 510 , - 1301 , - 1516 , - 1155 , - 218 , - 4849 , - 2760 , - 95 , - 2998 , - 5325 , - 932 , - 2107 , - 2706 , - 2729 , - 2176 , - 1047 , - 5486 , - 3205 , - 348 , - 3059 , - 5194 , - 609 , - 1592 , - 1999 , - 1830 , - 1085 , - 5908 , - 4011 , - 1538 , - 4633 , - 1008 , - 2951 , - 4318 , - 5109 , - 5324 , - 4963 , - 4026 , - 2513 , - 424 , - 3903 , - 662 , - 2989 , - 4740 , - 5915 , - 370 , - 393 , - 5984 , - 4855 , - 3150 , - 869 , - 4156 , - 723 , - 2858 , - 4417 , - 5400 , - 5807 , - 5638 , - 4893 , - 3572 , - 1675 , - 5346 , - 2297 , - 4816 , - 615 , - 1982 , - 2773 , - 2988 , - 2627 , - 1690 , - 177 , - 4232 , - 1567 , - 4470 , - 653 , - 2404 , - 3579 , - 4178 , - 4201 , - 3648 , - 2519 , - 814 , - 4677 , - 1820 , - 4531 , - 522 , - 2081 , - 3064 , - 3471 , - 3302 , - 2557 , - 1236 , - 5483 , - 3010 , - 6105 , - 2480 , - 4423 , - 5790 , - 437 , - 652 , - 291 , - 5498 , - 3985 , - 1896 , - 5375 , - 2134 , - 4461 , - 68 , - 1243 , - 1842 , - 1865 , - 1312 , - 183 , - 4622 , - 2341 , - 5628 , - 2195 , - 4330 , - 5889 , - 728 , - 1135 , - 966 , - 221 , - 5044 , - 3147 , - 674 , - 3769 , - 144 , - 2087 , - 3454 , - 4245 , - 4460 , - 4099 , - 3162 , - 1649 , - 5704 , - 3039 , - 5942 , - 2125 , - 3876 , - 5051 , - 5650 , - 5673 , - 5120 , - 3991 , - 2286 , - 5 , - 3292 , - 6003 , - 1994 , - 3553 , - 4536 , - 4943 , - 4774 , - 4029 , - 2708 , - 811 , - 4482 , - 1433 , - 3952 , - 5895 , - 1118 , - 1909 , - 2124 , - 1763 , - 826 , - 5457 , - 3368 , - 703 , - 3606 , - 5933 , - 1540 , - 2715 , - 3314 , - 3337 , - 2784 , - 1655 , - 6094 , - 3813 , - 956 , - 3667 , - 5802 , - 1217 , - 2200 , - 2607 , - 2438 , - 1693 , - 372 , - 4619 , - 2146 , - 5241 , - 1616 , - 3559 , - 4926 , - 5717 , - 5932 , - 5571 , - 4634 , - 3121 , - 1032 , - 4511 , - 1270 , - 3597 , - 5348 , - 379 , - 978 , - 1001 , - 448 , - 5463 , - 3758 , - 1477 , - 4764 , - 1331 , - 3466 , - 5025 , - 6008 , - 271 , - 102 , - 5501 , - 4180 , - 2283 , - 5954 , - 2905 , - 5424 , - 1223 , - 2590 , - 3381 , - 3596 , - 3235 , - 2298 , - 785 , - 4840 , - 2175 , - 5078 , - 1261 , - 3012 , - 4187 , - 4786 , - 4809 , - 4256 , - 3127 , - 1422 , - 5285 , - 2428 , - 5139 , - 1130 , - 2689 , - 3672 , - 4079 , - 3910 , - 3165 , - 1844 , - 6091 , - 3618 , - 569 , - 3088 , - 5031 , - 254 , - 1045 , - 1260 , - 899 , - 6106 , - 4593 , - 2504 , - 5983 , - 2742 , - 5069 , - 676 , - 1851 , - 2450 , - 2473 , - 1920 , - 791 , - 5230 , - 2949 , - 92 , - 2803 , - 4938 , - 353 , - 1336 , - 1743 , - 1574 , - 829 , - 5652 , - 3755 , - 1282 , - 4377 , - 752 , - 2695 , - 4062 , - 4853 , - 5068 , - 4707 , - 3770 , - 2257 , - 168 , - 3647 , - 406 , - 2733 , - 4484 , - 5659 , - 114 , - 137 , - 5728 , - 4599 , - 2894 , - 613 , - 3900 , - 467 , - 2602 , - 4161 , - 5144 , - 5551 , - 5382 , - 4637 , - 3316 , - 1419 , - 5090 , - 2041 , - 4560 , - 359 , - 1726 , - 2517 , - 2732 , - 2371 , - 1434 , - 6065 , - 3976 , - 1311 , - 4214 , - 397 , - 2148 , - 3323 , - 3922 , - 3945 , - 3392 , - 2263 , - 558 , - 4421 , - 1564 , - 4275 , - 266 , - 1825 , - 2808 , - 3215 , - 3046 , - 2301 , - 980 , - 5227 , - 2754 , - 5849 , - 2224 , - 4167 , - 5534 , - 181 , - 396 , - 35 , - 5242 , - 3729 , - 1640 , - 5119 , - 1878 , - 4205 , - 5956 , - 987 , - 1586 , - 1609 , - 1056 , - 6071 , - 4366 , - 2085 , - 5372 , - 1939 , - 4074 , - 5633 , - 472 , - 879 , - 710 , - 6109 , - 4788 , - 2891 , - 418 , - 3513 , - 6032 , - 1831 , - 3198 , - 3989 , - 4204 , - 3843 , - 2906 , - 1393 , - 5448 , - 2783 , - 5686 , - 1869 , - 3620 , - 4795 , - 5394 , - 5417 , - 4864 , - 3735 , - 2030 , - 5893 , - 3036 , - 5747 , - 1738 , - 3297 , - 4280 , - 4687 , - 4518 , - 3773 , - 2452 , - 555 , - 4226 , - 1177 , - 3696 , - 5639 , - 862 , - 1653 , - 1868 , - 1507 , - 570 , - 5201 , - 3112 , - 447 , - 3350 , - 5677 , - 1284 , - 2459 , - 3058 , - 3081 , - 2528 , - 1399 , - 5838 , - 3557 , - 700 , - 3411 , - 5546 , - 961 , - 1944 , - 2351 , - 2182 , - 1437 , - 116 , - 4363 , - 1890 , - 4985 , - 1360 , - 3303 , - 4670 , - 5461 , - 5676 , - 5315 , - 4378 , - 2865 , - 776 , - 4255 , - 1014 , - 3341 , - 5092 , - 123 , - 722 , - 745 , - 192 , - 5207 , - 3502 , - 1221 , - 4508 , - 1075 , - 3210 , - 4769 , - 5752 , - 15 , - 5990 , - 5245 , - 3924 , - 2027 , - 5698 , - 2649 , - 5168 , - 967 , - 2334 , - 3125 , - 3340 , - 2979 , - 2042 , - 529 , - 4584 , - 1919 , - 4822 , - 1005 , - 2756 , - 3931 , - 4530 , - 4553 , - 4000 , - 2871 , - 1166 , - 5029 , - 2172 , - 4883 , - 874 , - 2433 , - 3416 , - 3823 , - 3654 , - 2909 , - 1588 , - 5835 , - 3362 , - 313 , - 2832 , - 4775 , - 6142 , - 789 , - 1004 , - 643 , - 5850 , - 4337 , - 2248 , - 5727 , - 2486 , - 4813 , - 420 , - 1595 , - 2194 , - 2217 , - 1664 , - 535 , - 4974 , - 2693 , - 5980 , - 2547 , - 4682 , - 97 , - 1080 , - 1487 , - 1318 , - 573 , - 5396 , - 3499 , - 1026 , - 4121 , - 496 , - 2439 , - 3806 , - 4597 , - 4812 , - 4451 , - 3514 , - 2001 , - 6056 , - 3391 , - 150 , - 2477 , - 4228 , - 5403 , - 6002 , - 6025 , - 5472 , - 4343 , - 2638 , - 357 , - 3644 , - 211 , - 2346 , - 3905 , - 4888 , - 5295 , - 5126 , - 4381 , - 3060 , - 1163 , - 4834 , - 1785 , - 4304 , - 103 , - 1470 , - 2261 , - 2476 , - 2115 , - 1178 , - 5809 , - 3720 , - 1055 , - 3958 , - 141 , - 1892 , - 3067 , - 3666 , - 3689 , - 3136 , - 2007 , - 302 , - 4165 , - 1308 , - 4019 , - 10 , - 1569 , - 2552 , - 2959 , - 2790 , - 2045 , - 724 , - 4971 , - 2498 , - 5593 , - 1968 , - 3911 , - 5278 , - 6069 , - 140 , - 5923 , - 4986 , - 3473 , - 1384 , - 4863 , - 1622 , - 3949 , - 5700 , - 731 , - 1330 , - 1353 , - 800 , - 5815 , - 4110 , - 1829 , - 5116 , - 1683 , - 3818 , - 5377 , - 216 , - 623 , - 454 , - 5853 , - 4532 , - 2635 , - 162 , - 3257 , - 5776 , - 1575 , - 2942 , - 3733 , - 3948 , - 3587 , - 2650 , - 1137 , - 5192 , - 2527 , - 5430 , - 1613 , - 3364 , - 4539 , - 5138 , - 5161 , - 4608 , - 3479 , - 1774 , - 5637 , - 2780 , - 5491 , - 1482 , - 3041 , - 4024 , - 4431 , - 4262 , - 3517 , - 2196 , - 299 , - 3970 , - 921 , - 3440 , - 5383 , - 606 , - 1397 , - 1612 , - 1251 , - 314 , - 4945 , - 2856 , - 191 , - 3094 , - 5421 , - 1028 , - 2203 , - 2802 , - 2825 , - 2272 , - 1143 , - 5582 , - 3301 , - 444 , - 3155 , - 5290 , - 705 , - 1688 , - 2095 , - 1926 , - 1181 , - 6004 , - 4107 , - 1634 , - 4729 , - 1104 , - 3047 , - 4414 , - 5205 , - 5420 , - 5059 , - 4122 , - 2609 , - 520 , - 3999 , - 758 , - 3085 , - 4836 , - 6011 , - 466 , - 489 , - 6080 , - 4951 , - 3246 , - 965 , - 4252 , - 819 , - 2954 , - 4513 , - 5496 , - 5903 , - 5734 , - 4989 , - 3668 , - 1771 , - 5442 , - 2393 , - 4912 , - 711 , - 2078 , - 2869 , - 3084 , - 2723 , - 1786 , - 273 , - 4328 , - 1663 , - 4566 , - 749 , - 2500 , - 3675 , - 4274 , - 4297 , - 3744 , - 2615 , - 910 , - 4773 , - 1916 , - 4627 , - 618 , - 2177 , - 3160 , - 3567 , - 3398 , - 2653 , - 1332 , - 5579 , - 3106 , - 57 , - 2576 , - 4519 , - 5886 , - 533 , - 748 , - 387 , - 5594 , - 4081 , - 1992 , - 5471 , - 2230 , - 4557 , - 164 , - 1339 , - 1938 , - 1961 , - 1408 , - 279 , - 4718 , - 2437 , - 5724 , - 2291 , - 4426 , - 5985 , - 824 , - 1231 , - 1062 , - 317 , - 5140 , - 3243 , - 770 , - 3865 , - 240 , - 2183 , - 3550 , - 4341 , - 4556 , - 4195 , - 3258 , - 1745 , - 5800 , - 3135 , - 6038 , - 2221 , - 3972 , - 5147 , - 5746 , - 5769 , - 5216 , - 4087 , - 2382 , - 101 , - 3388 , - 6099 , - 2090 , - 3649 , - 4632 , - 5039 , - 4870 , - 4125 , - 2804 , - 907 , - 4578 , - 1529 , - 4048 , - 5991 , - 1214 , - 2005 , - 2220 , - 1859 , - 922 , - 5553 , - 3464 , - 799 , - 3702 , - 6029 , - 1636 , - 2811 , - 3410 , - 3433 , - 2880 , - 1751 , - 46 , - 3909 , - 1052 , - 3763 , - 5898 , - 1313 , - 2296 , - 2703 , - 2534 , - 1789 , - 468 , - 4715 , - 2242 , - 5337 , - 1712 , - 3655 , - 5022 , - 5813 , - 6028 , - 5667 , - 4730 , - 3217 , - 1128 , - 4607 , - 1366 , - 3693 , - 5444 , - 475 , - 1074 , - 1097 , - 544 , - 5559 , - 3854 , - 1573 , - 4860 , - 1427 , - 3562 , - 5121 , - 6104 , - 367 , - 198 , - 5597 , - 4276 , - 2379 , - 6050 , - 3001 , - 5520 , - 1319 , - 2686 , - 3477 , - 3692 , - 3331 , - 2394 , - 881 , - 4936 , - 2271 , - 5174 , - 1357 , - 3108 , - 4283 , - 4882 , - 4905 , - 4352 , - 3223 , - 1518 , - 5381 , - 2524 , - 5235 , - 1226 , - 2785 , - 3768 , - 4175 , - 4006 , - 3261 , - 1940 , - 43 , - 3714 , - 665 , - 3184 , - 5127 , - 350 , - 1141 , - 1356 , - 995 , - 58 , - 4689 , - 2600 , - 6079 , - 2838 , - 5165 , - 772 , - 1947 , - 2546 , - 2569 , - 2016 , - 887 , - 5326 , - 3045 , - 188 , - 2899 , - 5034 , - 449 , - 1432 , - 1839 , - 1670 , - 925 , - 5748 , - 3851 , - 1378 , - 4473 , - 848 , - 2791 , - 4158 , - 4949 , - 5164 , - 4803 , - 3866 , - 2353 , - 264 , - 3743 , - 502 , - 2829 , - 4580 , - 5755 , - 210 , - 233 , - 5824 , - 4695 , - 2990 , - 709 , - 3996 , - 563 , - 2698 , - 4257 , - 5240 , - 5647 , - 5478 , - 4733 , - 3412 , - 1515 , - 5186 , - 2137 , - 4656 , - 455 , - 1822 , - 2613 , - 2828 , - 2467 , - 1530 , - 17 , - 4072 , - 1407 , - 4310 , - 493 , - 2244 , - 3419 , - 4018 , - 4041 , - 3488 , - 2359 , - 654 , - 4517 , - 1660 , - 4371 , - 362 , - 1921 , - 2904 , - 3311 , - 3142 , - 2397 , - 1076 , - 5323 , - 2850 , - 5945 , - 2320 , - 4263 , - 5630 , - 277 , - 492 , - 131 , - 5338 , - 3825 , - 1736 , - 5215 , - 1974 , - 4301 , - 6052 , - 1083 , - 1682 , - 1705 , - 1152 , - 23 , - 4462 , - 2181 , - 5468 , - 2035 , - 4170 , - 5729 , - 568 , - 975 , - 806 , - 61 , - 4884 , - 2987 , - 514 , - 3609 , - 6128 , - 1927 , - 3294 , - 4085 , - 4300 , - 3939 , - 3002 , - 1489 , - 5544 , - 2879 , - 5782 , - 1965 , - 3716 , - 4891 , - 5490 , - 5513 , - 4960 , - 3831 , - 2126 , - 5989 , - 3132 , - 5843 , - 1834 , - 3393 , - 4376 , - 4783 , - 4614 , - 3869 , - 2548 , - 651 , - 4322 , - 1273 , - 3792 , - 5735 , - 958 , - 1749 , - 1964 , - 1603 , - 666 , - 5297 , - 3208 , - 543 , - 3446 , - 5773 , - 1380 , - 2555 , - 3154 , - 3177 , - 2624 , - 1495 , - 5934 , - 3653 , - 796 , - 3507 , - 5642 , - 1057 , - 2040 , - 2447 , - 2278 , - 1533 , - 212 , - 4459 , - 1986 , - 5081 , - 1456 , - 3399 , - 4766 , - 5557 , - 5772 , - 5411 , - 4474 , - 2961 , - 872 , - 4351 , - 1110 , - 3437 , - 5188 , - 219 , - 818 , - 841 , - 288 , - 5303 , - 3598 , - 1317 , - 4604 , - 1171 , - 3306 , - 4865 , - 5848 , - 111 , - 6086 , - 5341 , - 4020 , - 2123 , - 5794 , - 2745 , - 5264 , - 1063 , - 2430 , - 3221 , - 3436 , - 3075 , - 2138 , - 625 , - 4680 , - 2015 , - 4918 , - 1101 , - 2852 , - 4027 , - 4626 , - 4649 , - 4096 , - 2967 , - 1262 , - 5125 , - 2268 , - 4979 , - 970 , - 2529 , - 3512 , - 3919 , - 3750 , - 3005 , - 1684 , - 5931 , - 3458 , - 409 , - 2928 , - 4871 , - 94 , - 885 , - 1100 , - 739 , - 5946 , - 4433 , - 2344 , - 5823 , - 2582 , - 4909 , - 516 , - 1691 , - 2290 , - 2313 , - 1760 , - 631 , - 5070 , - 2789 , - 6076 , - 2643 , - 4778 , - 193 , - 1176 , - 1583 , - 1414 , - 669 , - 5492 , - 3595 , - 1122 , - 4217 , - 592 , - 2535 , - 3902 , - 4693 , - 4908 , - 4547 , - 3610 , - 2097 , - 8 , - 3487 , - 246 , - 2573 , - 4324 , - 5499 , - 6098 , - 6121 , - 5568 , - 4439 , - 2734 , - 453 , - 3740 , - 307 , - 2442 , - 4001 , - 4984 , - 5391 , - 5222 , - 4477 , - 3156 , - 1259 , - 4930 , - 1881 , - 4400 , - 199 , - 1566 , - 2357 , - 2572 , - 2211 , - 1274 , - 5905 , - 3816 , - 1151 , - 4054 , - 237 , - 1988 , - 3163 , - 3762 , - 3785 , - 3232 , - 2103 , - 398 , - 4261 , - 1404 , - 4115 , - 106 , - 1665 , - 2648 , - 3055 , - 2886 , - 2141 , - 820 , - 5067 , - 2594 , - 5689 , - 2064 , - 4007 , - 5374 , - 21 , - 236 , - 6019 , - 5082 , - 3569 , - 1480 , - 4959 , - 1718 , - 4045 , - 5796 , - 827 , - 1426 , - 1449 , - 896 , - 5911 , - 4206 , - 1925 , - 5212 , - 1779 , - 3914 , - 5473 , - 312 , - 719 , - 550 , - 5949 , - 4628 , - 2731 , - 258 , - 3353 , - 5872 , - 1671 , - 3038 , - 3829 , - 4044 , - 3683 , - 2746 , - 1233 , - 5288 , - 2623 , - 5526 , - 1709 , - 3460 , - 4635 , - 5234 , - 5257 , - 4704 , - 3575 , - 1870 , - 5733 , - 2876 , - 5587 , - 1578 , - 3137 , - 4120 , - 4527 , - 4358 , - 3613 , - 2292 , - 395 , - 4066 , - 1017 , - 3536 , - 5479 , - 702 , - 1493 , - 1708 , - 1347 , - 410 , - 5041 , - 2952 , - 287 , - 3190 , - 5517 , - 1124 , - 2299 , - 2898 , - 2921 , - 2368 , - 1239 , - 5678 , - 3397 , - 540 , - 3251 , - 5386 , - 801 , - 1784 , - 2191 , - 2022 , - 1277 , - 6100 , - 4203 , - 1730 , - 4825 , - 1200 , - 3143 , - 4510 , - 5301 , - 5516 , - 5155 , - 4218 , - 2705 , - 616 , - 4095 , - 854 , - 3181 , - 4932 , - 6107 , - 562 , - 585 , - 32 , - 5047 , - 3342 , - 1061 , - 4348 , - 915 , - 3050 , - 4609 , - 5592 , - 5999 , - 5830 , - 5085 , - 3764 , - 1867 , - 5538 , - 2489 , - 5008 , - 807 , - 2174 , - 2965 , - 3180 , - 2819 , - 1882 , - 369 , - 4424 , - 1759 , - 4662 , - 845 , - 2596 , - 3771 , - 4370 , - 4393 , - 3840 , - 2711 , - 1006 , - 4869 , - 2012 , - 4723 , - 714 , - 2273 , - 3256 , - 3663 , - 3494 , - 2749 , - 1428 , - 5675 , - 3202 , - 153 , - 2672 , - 4615 , - 5982 , - 629 , - 844 , - 483 , - 5690 , - 4177 , - 2088 , - 5567 , - 2326 , - 4653 , - 260 , - 1435 , - 2034 , - 2057 , - 1504 , - 375 , - 4814 , - 2533 , - 5820 , - 2387 , - 4522 , - 6081 , - 920 , - 1327 , - 1158 , - 413 , - 5236 , - 3339 , - 866 , - 3961 , - 336 , - 2279 , - 3646 , - 4437 , - 4652 , - 4291 , - 3354 , - 1841 , - 5896 , - 3231 , - 6134 , - 2317 , - 4068 , - 5243 , - 5842 , - 5865 , - 5312 , - 4183 , - 2478 , - 197 , - 3484 , - 51 , - 2186 , - 3745 , - 4728 , - 5135 , - 4966 , - 4221 , - 2900 , - 1003 , - 4674 , - 1625 , - 4144 , - 6087 , - 1310 , - 2101 , - 2316 , - 1955 , - 1018 , - 5649 , - 3560 , - 895 , - 3798 , - 6125 , - 1732 , - 2907 , - 3506 , - 3529 , - 2976 , - 1847 , - 142 , - 4005 , - 1148 , - 3859 , - 5994 , - 1409 , - 2392 , - 2799 , - 2630 , - 1885 , - 564 , - 4811 , - 2338 , - 5433 , - 1808 , - 3751 , - 5118 , - 5909 , - 6124 , - 5763 , - 4826 , - 3313 , - 1224 , - 4703 , - 1462 , - 3789 , - 5540 , - 571 , - 1170 , - 1193 , - 640 , - 5655 , - 3950 , - 1669 , - 4956 , - 1523 , - 3658 , - 5217 , - 56 , - 463 , - 294 , - 5693 , - 4372 , - 2475 , - 2 , - 3097 , - 5616 , - 1415 , - 2782 , - 3573 , - 3788 , - 3427 , - 2490 , - 977 , - 5032 , - 2367 , - 5270 , - 1453 , - 3204 , - 4379 , - 4978 , - 5001 , - 4448 , - 3319 , - 1614 , - 5477 , - 2620 , - 5331 , - 1322 , - 2881 , - 3864 , - 4271 , - 4102 , - 3357 , - 2036 , - 139 , - 3810 , - 761 , - 3280 , - 5223 , - 446 , - 1237 , - 1452 , - 1091 , - 154 , - 4785 , - 2696 , - 31 , - 2934 , - 5261 , - 868 , - 2043 , - 2642 , - 2665 , - 2112 , - 983 , - 5422 , - 3141 , - 284 , - 2995 , - 5130 , - 545 , - 1528 , - 1935 , - 1766 , - 1021 , - 5844 , - 3947 , - 1474 , - 4569 , - 944 , - 2887 , - 4254 , - 5045 , - 5260 , - 4899 , - 3962 , - 2449 , - 360 , - 3839 , - 598 , - 2925 , - 4676 , - 5851 , - 306 , - 329 , - 5920 , - 4791 , - 3086 , - 805 , - 4092 , - 659 , - 2794 , - 4353 , - 5336 , - 5743 , - 5574 , - 4829 , - 3508 , - 1611 , - 5282 , - 2233 , - 4752 , - 551 , - 1918 , - 2709 , - 2924 , - 2563 , - 1626 , - 113 , - 4168 , - 1503 , - 4406 , - 589 , - 2340 , - 3515 , - 4114 , - 4137 , - 3584 , - 2455 , - 750 , - 4613 , - 1756 , - 4467 , - 458 , - 2017 , - 3000 , - 3407 , - 3238 , - 2493 , - 1172 , - 5419 , - 2946 , - 6041 , - 2416 , - 4359 , - 5726 , - 373 , - 588 , - 227 , - 5434 , - 3921 , - 1832 , - 5311 , - 2070 , - 4397 , - 4 , - 1179 , - 1778 , - 1801 , - 1248 , - 119 , - 4558 , - 2277 , - 5564 , - 2131 , - 4266 , - 5825 , - 664 , - 1071 , - 902 , - 157 , - 4980 , - 3083 , - 610 , - 3705 , - 80 , - 2023 , - 3390 , - 4181 , - 4396 , - 4035 , - 3098 , - 1585 , - 5640 , - 2975 , - 5878 , - 2061 , - 3812 , - 4987 , - 5586 , - 5609 , - 5056 , - 3927 , - 2222 , - 6085 , - 3228 , - 5939 , - 1930 , - 3489 , - 4472 , - 4879 , - 4710 , - 3965 , - 2644 , - 747 , - 4418 , - 1369 , - 3888 , - 5831 , - 1054 , - 1845 , - 2060 , - 1699 , - 762 , - 5393 , - 3304 , - 639 , - 3542 , - 5869 , - 1476 , - 2651 , - 3250 , - 3273 , - 2720 , - 1591 , - 6030 , - 3749 , - 892 , - 3603 , - 5738 , - 1153 , - 2136 , - 2543 , - 2374 , - 1629 , - 308 , - 4555 , - 2082 , - 5177 , - 1552 , - 3495 , - 4862 , - 5653 , - 5868 , - 5507 , - 4570 , - 3057 , - 968 , - 4447 , - 1206 , - 3533 , - 5284 , - 315 , - 914 , - 937 , - 384 , - 5399 , - 3694 , - 1413 , - 4700 , - 1267 , - 3402 , - 4961 , - 5944 , - 207 , - 38 , - 5437 , - 4116 , - 2219 , - 5890 , - 2841 , - 5360 , - 1159 , - 2526 , - 3317 , - 3532 , - 3171 , - 2234 , - 721 , - 4776 , - 2111 , - 5014 , - 1197 , - 2948 , - 4123 , - 4722 , - 4745 , - 4192 , - 3063 , - 1358 , - 5221 , - 2364 , - 5075 , - 1066 , - 2625 , - 3608 , - 4015 , - 3846 , - 3101 , - 1780 , - 6027 , - 3554 , - 505 , - 3024 , - 4967 , - 190 , - 981 , - 1196 , - 835 , - 6042 , - 4529 , - 2440 , - 5919 , - 2678 , - 5005 , - 612 , - 1787 , - 2386 , - 2409 , - 1856 , - 727 , - 5166 , - 2885 , - 28 , - 2739 , - 4874 , - 289 , - 1272 , - 1679 , - 1510 , - 765 , - 5588 , - 3691 , - 1218 , - 4313 , - 688 , - 2631 , - 3998 , - 4789 , - 5004 , - 4643 , - 3706 , - 2193 , - 104 , - 3583 , - 342 , - 2669 , - 4420 , - 5595 , - 50 , - 73 , - 5664 , - 4535 , - 2830 , - 549 , - 3836 , - 403 , - 2538 , - 4097 , - 5080 , - 5487 , - 5318 , - 4573 , - 3252 , - 1355 , - 5026 , - 1977 , - 4496 , - 295 , - 1662 , - 2453 , - 2668 , - 2307 , - 1370 , - 6001 , - 3912 , - 1247 , - 4150 , - 333 , - 2084 , - 3259 , - 3858 , - 3881 , - 3328 , - 2199 , - 494 , - 4357 , - 1500 , - 4211 , - 202 , - 1761 , - 2744 , - 3151 , - 2982 , - 2237 , - 916 , - 5163 , - 2690 , - 5785 , - 2160 , - 4103 , - 5470 , - 117 , - 332 , - 6115 , - 5178 , - 3665 , - 1576 , - 5055 , - 1814 , - 4141 , - 5892 , - 923 , - 1522 , - 1545 , - 992 , - 6007 , - 4302 , - 2021 , - 5308 , - 1875 , - 4010 , - 5569 , - 408 , - 815 , - 646 , - 6045 , - 4724 , - 2827 , - 354 , - 3449 , - 5968 , - 1767 , - 3134 , - 3925 , - 4140 , - 3779 , - 2842 , - 1329 , - 5384 , - 2719 , - 5622 , - 1805 , - 3556 , - 4731 , - 5330 , - 5353 , - 4800 , - 3671 , - 1966 , - 5829 , - 2972 , - 5683 , - 1674 , - 3233 , - 4216 , - 4623 , - 4454 , - 3709 , - 2388 , - 491 , - 4162 , - 1113 , - 3632 , - 5575 , - 798 , - 1589 , - 1804 , - 1443 , - 506 , - 5137 , - 3048 , - 383 , - 3286 , - 5613 , - 1220 , - 2395 , - 2994 , - 3017 , - 2464 , - 1335 , - 5774 , - 3493 , - 636 , - 3347 , - 5482 , - 897 , - 1880 , - 2287 , - 2118 , - 1373 , - 52 , - 4299 , - 1826 , - 4921 , - 1296 , - 3239 , - 4606 , - 5397 , - 5612 , - 5251 , - 4314 , - 2801 , - 712 , - 4191 , - 950 , - 3277 , - 5028 , - 59 , - 658 , - 681 , - 128 , - 5143 , - 3438 , - 1157 , - 4444 , - 1011 , - 3146 , - 4705 , - 5688 , - 6095 , - 5926 , - 5181 , - 3860 , - 1963 , - 5634 , - 2585 , - 5104 , - 903 , - 2270 , - 3061 , - 3276 , - 2915 , - 1978 , - 465 , - 4520 , - 1855 , - 4758 , - 941 , - 2692 , - 3867 , - 4466 , - 4489 , - 3936 , - 2807 , - 1102 , - 4965 , - 2108 , - 4819 , - 810 , - 2369 , - 3352 , - 3759 , - 3590 , - 2845 , - 1524 , - 5771 , - 3298 , - 249 , - 2768 , - 4711 , - 6078 , - 725 , - 940 , - 579 , - 5786 , - 4273 , - 2184 , - 5663 , - 2422 , - 4749 , - 356 , - 1531 , - 2130 , - 2153 , - 1600 , - 471 , - 4910 , - 2629 , - 5916 , - 2483 , - 4618 , - 33 , - 1016 , - 1423 , - 1254 , - 509 , - 5332 , - 3435 , - 962 , - 4057 , - 432 , - 2375 , - 3742 , - 4533 , - 4748 , - 4387 , - 3450 , - 1937 , - 5992 , - 3327 , - 86 , - 2413 , - 4164 , - 5339 , - 5938 , - 5961 , - 5408 , - 4279 , - 2574 , - 293 , - 3580 , - 147 , - 2282 , - 3841 , - 4824 , - 5231 , - 5062 , - 4317 , - 2996 , - 1099 , - 4770 , - 1721 , - 4240 , - 39 , - 1406 , - 2197 , - 2412 , - 2051 , - 1114 , - 5745 , - 3656 , - 991 , - 3894 , - 77 , - 1828 , - 3003 , - 3602 , - 3625 , - 3072 , - 1943 , - 238 , - 4101 , - 1244 , - 3955 , - 6090 , - 1505 , - 2488 , - 2895 , - 2726 , - 1981 , - 660 , - 4907 , - 2434 , - 5529 , - 1904 , - 3847 , - 5214 , - 6005 , - 76 , - 5859 , - 4922 , - 3409 , - 1320 , - 4799 , - 1558 , - 3885 , - 5636 , - 667 , - 1266 , - 1289 , - 736 , - 5751 , - 4046 , - 1765 , - 5052 , - 1619 , - 3754 , - 5313 , - 152 , - 559 , - 390 , - 5789 , - 4468 , - 2571 , - 98 , - 3193 , - 5712 , - 1511 , - 2878 , - 3669 , - 3884 , - 3523 , - 2586 , - 1073 , - 5128 , - 2463 , - 5366 , - 1549 , - 3300 , - 4475 , - 5074 , - 5097 , - 4544 , - 3415 , - 1710 , - 5573 , - 2716 , - 5427 , - 1418 , - 2977 , - 3960 , - 4367 , - 4198 , - 3453 , - 2132 , - 235 , - 3906 , - 857 , - 3376 , - 5319 , - 542 , - 1333 , - 1548 , - 1187 , - 250 , - 4881 , - 2792 , - 127 , - 3030 , - 5357 , - 964 , - 2139 , - 2738 , - 2761 , - 2208 , - 1079 , - 5518 , - 3237 , - 380 , - 3091 , - 5226 , - 641 , - 1624 , - 2031 , - 1862 , - 1117 , - 5940 , - 4043 , - 1570 , - 4665 , - 1040 , - 2983 , - 4350 , - 5141 , - 5356 , - 4995 , - 4058 , - 2545 , - 456 , - 3935 , - 694 , - 3021 , - 4772 , - 5947 , - 402 , - 425 , - 6016 , - 4887 , - 3182 , - 901 , - 4188 , - 755 , - 2890 , - 4449 , - 5432 , - 5839 , - 5670 , - 4925 , - 3604 , - 1707 , - 5378 , - 2329 , - 4848 , - 647 , - 2014 , - 2805 , - 3020 , - 2659 , - 1722 , - 209 , - 4264 , - 1599 , - 4502 , - 685 , - 2436 , - 3611 , - 4210 , - 4233 , - 3680 , - 2551 , - 846 , - 4709 , - 1852 , - 4563 , - 554 , - 2113 , - 3096 , - 3503 , - 3334 , - 2589 , - 1268 , - 5515 , - 3042 , - 6137 , - 2512 , - 4455 , - 5822 , - 469 , - 684 , - 323 , - 5530 , - 4017 , - 1928 , - 5407 , - 2166 , - 4493 , - 100 , - 1275 , - 1874 , - 1897 , - 1344 , - 215 , - 4654 , - 2373 , - 5660 , - 2227 , - 4362 , - 5921 , - 760 , - 1167 , - 998 , - 253 , - 5076 , - 3179 , - 706 , - 3801 , - 176 , - 2119 , - 3486 , - 4277 , - 4492 , - 4131 , - 3194 , - 1681 , - 5736 , - 3071 , - 5974 , - 2157 , - 3908 , - 5083 , - 5682 , - 5705 , - 5152 , - 4023 , - 2318 , - 37 , - 3324 , - 6035 , - 2026 , - 3585 , - 4568 , - 4975 , - 4806 , - 4061 , - 2740 , - 843 , - 4514 , - 1465 , - 3984 , - 5927 , - 1150 , - 1941 , - 2156 , - 1795 , - 858 , - 5489 , - 3400 , - 735 , - 3638 , - 5965 , - 1572 , - 2747 , - 3346 , - 3369 , - 2816 , - 1687 , - 6126 , - 3845 , - 988 , - 3699 , - 5834 , - 1249 , - 2232 , - 2639 , - 2470 , - 1725 , - 404 , - 4651 , - 2178 , - 5273 , - 1648 , - 3591 , - 4958 , - 5749 , - 5964 , - 5603 , - 4666 , - 3153 , - 1064 , - 4543 , - 1302 , - 3629 , - 5380 , - 411 , - 1010 , - 1033 , - 480 , - 5495 , - 3790 , - 1509 , - 4796 , - 1363 , - 3498 , - 5057 , - 6040 , - 303 , - 134 , - 5533 , - 4212 , - 2315 , - 5986 , - 2937 , - 5456 , - 1255 , - 2622 , - 3413 , - 3628 , - 3267 , - 2330 , - 817 , - 4872 , - 2207 , - 5110 , - 1293 , - 3044 , - 4219 , - 4818 , - 4841 , - 4288 , - 3159 , - 1454 , - 5317 , - 2460 , - 5171 , - 1162 , - 2721 , - 3704 , - 4111 , - 3942 , - 3197 , - 1876 , - 6123 , - 3650 , - 601 , - 3120 , - 5063 , - 286 , - 1077 , - 1292 , - 931 , - 6138 , - 4625 , - 2536 , - 6015 , - 2774 , - 5101 , - 708 , - 1883 , - 2482 , - 2505 , - 1952 , - 823 , - 5262 , - 2981 , - 124 , - 2835 , - 4970 , - 385 , - 1368 , - 1775 , - 1606 , - 861 , - 5684 , - 3787 , - 1314 , - 4409 , - 784 , - 2727 , - 4094 , - 4885 , - 5100 , - 4739 , - 3802 , - 2289 , - 200 , - 3679 , - 438 , - 2765 , - 4516 , - 5691 , - 146 , - 169 , - 5760 , - 4631 , - 2926 , - 645 , - 3932 , - 499 , - 2634 , - 4193 , - 5176 , - 5583 , - 5414 , - 4669 , - 3348 , - 1451 , - 5122 , - 2073 , - 4592 , - 391 , - 1758 , - 2549 , - 2764 , - 2403 , - 1466 , - 6097 , - 4008 , - 1343 , - 4246 , - 429 , - 2180 , - 3355 , - 3954 , - 3977 , - 3424 , - 2295 , - 590 , - 4453 , - 1596 , - 4307 , - 298 , - 1857 , - 2840 , - 3247 , - 3078 , - 2333 , - 1012 , - 5259 , - 2786 , - 5881 , - 2256 , - 4199 , - 5566 , - 213 , - 428 , - 67 , - 5274 , - 3761 , - 1672 , - 5151 , - 1910 , - 4237 , - 5988 , - 1019 , - 1618 , - 1641 , - 1088 , - 6103 , - 4398 , - 2117 , - 5404 , - 1971 , - 4106 , - 5665 , - 504 , - 911 , - 742 , - 6141 , - 4820 , - 2923 , - 450 , - 3545 , - 6064 , - 1863 , - 3230 , - 4021 , - 4236 , - 3875 , - 2938 , - 1425 , - 5480 , - 2815 , - 5718 , - 1901 , - 3652 , - 4827 , - 5426 , - 5449 , - 4896 , - 3767 , - 2062 , - 5925 , - 3068 , - 5779 , - 1770 , - 3329 , - 4312 , - 4719 , - 4550 , - 3805 , - 2484 , - 587 , - 4258 , - 1209 , - 3728 , - 5671 , - 894 , - 1685 , - 1900 , - 1539 , - 602 , - 5233 , - 3144 , - 479 , - 3382 , - 5709 , - 1316 , - 2491 , - 3090 , - 3113 , - 2560 , - 1431 , - 5870 , - 3589 , - 732 , - 3443 , - 5578 , - 993 , - 1976 , - 2383 , - 2214 , - 1469 , - 148 , - 4395 , - 1922 , - 5017 , - 1392 , - 3335 , - 4702 , - 5493 , - 5708 , - 5347 , - 4410 , - 2897 , - 808 , - 4287 , - 1046 , - 3373 , - 5124 , - 155 , - 754 , - 777 , - 224 , - 5239 , - 3534 , - 1253 , - 4540 , - 1107 , - 3242 , - 4801 , - 5784 , - 47 , - 6022 , - 5277 , - 3956 , - 2059 , - 5730 , - 2681 , - 5200 , - 999 , - 2366 , - 3157 , - 3372 , - 3011 , - 2074 , - 561 , - 4616 , - 1951 , - 4854 , - 1037 , - 2788 , - 3963 , - 4562 , - 4585 , - 4032 , - 2903 , - 1198 , - 5061 , - 2204 , - 4915 , - 906 , - 2465 , - 3448 , - 3855 , - 3686 , - 2941 , - 1620 , - 5867 , - 3394 , - 345 , - 2864 , - 4807 , - 30 , - 821 , - 1036 , - 675 , - 5882 , - 4369 , - 2280 , - 5759 , - 2518 , - 4845 , - 452 , - 1627 , - 2226 , - 2249 , - 1696 , - 567 , - 5006 , - 2725 , - 6012 , - 2579 , - 4714 , - 129 , - 1112 , - 1519 , - 1350 , - 605 , - 5428 , - 3531 , - 1058 , - 4153 , - 528 , - 2471 , - 3838 , - 4629 , - 4844 , - 4483 , - 3546 , - 2033 , - 6088 , - 3423 , - 182 , - 2509 , - 4260 , - 5435 , - 6034 , - 6057 , - 5504 , - 4375 , - 2670 , - 389 , - 3676 , - 243 , - 2378 , - 3937 , - 4920 , - 5327 , - 5158 , - 4413 , - 3092 , - 1195 , - 4866 , - 1817 , - 4336 , - 135 , - 1502 , - 2293 , - 2508 , - 2147 , - 1210 , - 5841 , - 3752 , - 1087 , - 3990 , - 173 , - 1924 , - 3099 , - 3698 , - 3721 , - 3168 , - 2039 , - 334 , - 4197 , - 1340 , - 4051 , - 42 , - 1601 , - 2584 , - 2991 , - 2822 , - 2077 , - 756 , - 5003 , - 2530 , - 5625 , - 2000 , - 3943 , - 5310 , - 6101 , - 172 , - 5955 , - 5018 , - 3505 , - 1416 , - 4895 , - 1654 , - 3981 , - 5732 , - 763 , - 1362 , - 1385 , - 832 , - 5847 , - 4142 , - 1861 , - 5148 , - 1715 , - 3850 , - 5409 , - 248 , - 655 , - 486 , - 5885 , - 4564 , - 2667 , - 194 , - 3289 , - 5808 , - 1607 , - 2974 , - 3765 , - 3980 , - 3619 , - 2682 , - 1169 , - 5224 , - 2559 , - 5462 , - 1645 , - 3396 , - 4571 , - 5170 , - 5193 , - 4640 , - 3511 , - 1806 , - 5669 , - 2812 , - 5523 , - 1514 , - 3073 , - 4056 , - 4463 , - 4294 , - 3549 , - 2228 , - 331 , - 4002 , - 953 , - 3472 , - 5415 , - 638 , - 1429 , - 1644 , - 1283 , - 346 , - 4977 , - 2888 , - 223 , - 3126 , - 5453 , - 1060 , - 2235 , - 2834 , - 2857 , - 2304 , - 1175 , - 5614 , - 3333 , - 476 , - 3187 , - 5322 , - 737 , - 1720 , - 2127 , - 1958 , - 1213 , - 6036 , - 4139 , - 1666 , - 4761 , - 1136 , - 3079 , - 4446 , - 5237 , - 5452 , - 5091 , - 4154 , - 2641 , - 552 , - 4031 , - 790 , - 3117 , - 4868 , - 6043 , - 498 , - 521 , - 6112 , - 4983 , - 3278 , - 997 , - 4284 , - 851 , - 2986 , - 4545 , - 5528 , - 5935 , - 5766 , - 5021 , - 3700 , - 1803 , - 5474 , - 2425 , - 4944 , - 743 , - 2110 , - 2901 , - 3116 , - 2755 , - 1818 , - 305 , - 4360 , - 1695 , - 4598 , - 781 , - 2532 , - 3707 , - 4306 , - 4329 , - 3776 , - 2647 , - 942 , - 4805 , - 1948 , - 4659 , - 650 , - 2209 , - 3192 , - 3599 , - 3430 , - 2685 , - 1364 , - 5611 , - 3138 , - 89 , - 2608 , - 4551 , - 5918 , - 565 , - 780 , - 419 , - 5626 , - 4113 , - 2024 , - 5503 , - 2262 , - 4589 , - 196 , - 1371 , - 1970 , - 1993 , - 1440 , - 311 , - 4750 , - 2469 , - 5756 , - 2323 , - 4458 , - 6017 , - 856 , - 1263 , - 1094 , - 349 , - 5172 , - 3275 , - 802 , - 3897 , - 272 , - 2215 , - 3582 , - 4373 , - 4588 , - 4227 , - 3290 , - 1777 , - 5832 , - 3167 , - 6070 , - 2253 , - 4004 , - 5179 , - 5778 , - 5801 , - 5248 , - 4119 , - 2414 , - 133 , - 3420 , - 6131 , - 2122 , - 3681 , - 4664 , - 5071 , - 4902 , - 4157 , - 2836 , - 939 , - 4610 , - 1561 , - 4080 , - 6023 , - 1246 , - 2037 , - 2252 , - 1891 , - 954 , - 5585 , - 3496 , - 831 , - 3734 , - 6061 , - 1668 , - 2843 , - 3442 , - 3465 , - 2912 , - 1783 , - 78 , - 3941 , - 1084 , - 3795 , - 5930 , - 1345 , - 2328 , - 2735 , - 2566 , - 1821 , - 500 , - 4747 , - 2274 , - 5369 , - 1744 , - 3687 , - 5054 , - 5845 , - 6060 , - 5699 , - 4762 , - 3249 , - 1160 , - 4639 , - 1398 , - 3725 , - 5476 , - 507 , - 1106 , - 1129 , - 576 , - 5591 , - 3886 , - 1605 , - 4892 , - 1459 , - 3594 , - 5153 , - 6136 , - 399 , - 230 , - 5629 , - 4308 , - 2411 , - 6082 , - 3033 , - 5552 , - 1351 , - 2718 , - 3509 , - 3724 , - 3363 , - 2426 , - 913 , - 4968 , - 2303 , - 5206 , - 1389 , - 3140 , - 4315 , - 4914 , - 4937 , - 4384 , - 3255 , - 1550 , - 5413 , - 2556 , - 5267 , - 1258 , - 2817 , - 3800 , - 4207 , - 4038 , - 3293 , - 1972 , - 75 , - 3746 , - 697 , - 3216 , - 5159 , - 382 , - 1173 , - 1388 , - 1027 , - 90 , - 4721 , - 2632 , - 6111 , - 2870 , - 5197 , - 804 , - 1979 , - 2578 , - 2601 , - 2048 , - 919 , - 5358 , - 3077 , - 220 , - 2931 , - 5066 , - 481 , - 1464 , - 1871 , - 1702 , - 957 , - 5780 , - 3883 , - 1410 , - 4505 , - 880 , - 2823 , - 4190 , - 4981 , - 5196 , - 4835 , - 3898 , - 2385 , - 296 , - 3775 , - 534 , - 2861 , - 4612 , - 5787 , - 242 , - 265 , - 5856 , - 4727 , - 3022 , - 741 , - 4028 , - 595 , - 2730 , - 4289 , - 5272 , - 5679 , - 5510 , - 4765 , - 3444 , - 1547 , - 5218 , - 2169 , - 4688 , - 487 , - 1854 , - 2645 , - 2860 , - 2499 , - 1562 , - 49 , - 4104 , - 1439 , - 4342 , - 525 , - 2276 , - 3451 , - 4050 , - 4073 , - 3520 , - 2391 , - 686 , - 4549 , - 1692 , - 4403 , - 394 , - 1953 , - 2936 , - 3343 , - 3174 , - 2429 , - 1108 , - 5355 , - 2882 , - 5977 , - 2352 , - 4295 , - 5662 , - 309 , - 524 , - 163 , - 5370 , - 3857 , - 1768 , - 5247 , - 2006 , - 4333 , - 6084 , - 1115 , - 1714 , - 1737 , - 1184 , - 55 , - 4494 , - 2213 , - 5500 , - 2067 , - 4202 , - 5761 , - 600 , - 1007 , - 838 , - 93 , - 4916 , - 3019 , - 546 , - 3641 , - 16 , - 1959 , - 3326 , - 4117 , - 4332 , - 3971 , - 3034 , - 1521 , - 5576 , - 2911 , - 5814 , - 1997 , - 3748 , - 4923 , - 5522 , - 5545 , - 4992 , - 3863 , - 2158 , - 6021 , - 3164 , - 5875 , - 1866 , - 3425 , - 4408 , - 4815 , - 4646 , - 3901 , - 2580 , - 683 , - 4354 , - 1305 , - 3824 , - 5767 , - 990 , - 1781 , - 1996 , - 1635 , - 698 , - 5329 , - 3240 , - 575 , - 3478 , - 5805 , - 1412 , - 2587 , - 3186 , - 3209 , - 2656 , - 1527 , - 5966 , - 3685 , - 828 , - 3539 , - 5674 , - 1089 , - 2072 , - 2479 , - 2310 , - 1565 , - 244 , - 4491 , - 2018 , - 5113 , - 1488 , - 3431 , - 4798 , - 5589 , - 5804 , - 5443 , - 4506 , - 2993 , - 904 , - 4383 , - 1142 , - 3469 , - 5220 , - 251 , - 850 , - 873 , - 320 , - 5335 , - 3630 , - 1349 , - 4636 , - 1203 , - 3338 , - 4897 , - 5880 , - 143 , - 6118 , - 5373 , - 4052 , - 2155 , - 5826 , - 2777 , - 5296 , - 1095 , - 2462 , - 3253 , - 3468 , - 3107 , - 2170 , - 657 , - 4712 , - 2047 , - 4950 , - 1133 , - 2884 , - 4059 , - 4658 , - 4681 , - 4128 , - 2999 , - 1294 , - 5157 , - 2300 , - 5011 , - 1002 , - 2561 , - 3544 , - 3951 , - 3782 , - 3037 , - 1716 , - 5963 , - 3490 , - 441 , - 2960 , - 4903 , - 126 , - 917 , - 1132 , - 771 , - 5978 , - 4465 , - 2376 , - 5855 , - 2614 , - 4941 , - 548 , - 1723 , - 2322 , - 2345 , - 1792 , - 663 , - 5102 , - 2821 , - 6108 , - 2675 , - 4810 , - 225 , - 1208 , - 1615 , - 1446 , - 701 , - 5524 , - 3627 , - 1154 , - 4249 , - 624 , - 2567 , - 3934 , - 4725 , - 4940 , - 4579 , - 3642 , - 2129 , - 40 , - 3519 , - 278 , - 2605 , - 4356 , - 5531 , - 6130 , - 9 , - 5600 , - 4471 , - 2766 , - 485 , - 3772 , - 339 , - 2474 , - 4033 , - 5016 , - 5423 , - 5254 , - 4509 , - 3188 , - 1291 , - 4962 , - 1913 , - 4432 , - 231 , - 1598 , - 2389 , - 2604 , - 2243 , - 1306 , - 5937 , - 3848 , - 1183 , - 4086 , - 269 , - 2020 , - 3195 , - 3794 , - 3817 , - 3264 , - 2135 , - 430 , - 4293 , - 1436 , - 4147 , - 138 , - 1697 , - 2680 , - 3087 , - 2918 , - 2173 , - 852 , - 5099 , - 2626 , - 5721 , - 2096 , - 4039 , - 5406 , - 53 , - 268 , - 6051 , - 5114 , - 3601 , - 1512 , - 4991 , - 1750 , - 4077 , - 5828 , - 859 , - 1458 , - 1481 , - 928 , - 5943 , - 4238 , - 1957 , - 5244 , - 1811 , - 3946 , - 5505 , - 344 , - 751 , - 582 , - 5981 , - 4660 , - 2763 , - 290 , - 3385 , - 5904 , - 1703 , - 3070 , - 3861 , - 4076 , - 3715 , - 2778 , - 1265 , - 5320 , - 2655 , - 5558 , - 1741 , - 3492 , - 4667 , - 5266 , - 5289 , - 4736 , - 3607 , - 1902 , - 5765 , - 2908 , - 5619 , - 1610 , - 3169 , - 4152 , - 4559 , - 4390 , - 3645 , - 2324 , - 427 , - 4098 , - 1049 , - 3568 , - 5511 , - 734 , - 1525 , - 1740 , - 1379 , - 442 , - 5073 , - 2984 , - 319 , - 3222 , - 5549 , - 1156 , - 2331 , - 2930 , - 2953 , - 2400 , - 1271 , - 5710 , - 3429 , - 572 , - 3283 , - 5418 , - 833 , - 1816 , - 2223 , - 2054 , - 1309 , - 6132 , - 4235 , - 1762 , - 4857 , - 1232 , - 3175 , - 4542 , - 5333 , - 5548 , - 5187 , - 4250 , - 2737 , - 648 , - 4127 , - 886 , - 3213 , - 4964 , - 6139 , - 594 , - 617 , - 64 , - 5079 , - 3374 , - 1093 , - 4380 , - 947 , - 3082 , - 4641 , - 5624 , - 6031 , - 5862 , - 5117 , - 3796 , - 1899 , - 5570 , - 2521 , - 5040 , - 839 , - 2206 , - 2997 , - 3212 , - 2851 , - 1914 , - 401 , - 4456 , - 1791 , - 4694 , - 877 , - 2628 , - 3803 , - 4402 , - 4425 , - 3872 , - 2743 , - 1038 , - 4901 , - 2044 , - 4755 , - 746 , - 2305 , - 3288 , - 3695 , - 3526 , - 2781 , - 1460 , - 5707 , - 3234 , - 185 , - 2704 , - 4647 , - 6014 , - 661 , - 876 , - 515 , - 5722 , - 4209 , - 2120 , - 5599 , - 2358 , - 4685 , - 292 , - 1467 , - 2066 , - 2089 , - 1536 , - 407 , - 4846 , - 2565 , - 5852 , - 2419 , - 4554 , - 6113 , - 952 , - 1359 , - 1190 , - 445 , - 5268 , - 3371 , - 898 , - 3993 , - 368 , - 2311 , - 3678 , - 4469 , - 4684 , - 4323 , - 3386 , - 1873 , - 5928 , - 3263 , - 22 , - 2349 , - 4100 , - 5275 , - 5874 , - 5897 , - 5344 , - 4215 , - 2510 , - 229 , - 3516 , - 83 , - 2218 , - 3777 , - 4760 , - 5167 , - 4998 , - 4253 , - 2932 , - 1035 , - 4706 , - 1657 , - 4176 , - 6119 , - 1342 , - 2133 , - 2348 , - 1987 , - 1050 , - 5681 , - 3592 , - 927 , - 3830 , - 13 , - 1764 , - 2939 , - 3538 , - 3561 , - 3008 , - 1879 , - 174 , - 4037 , - 1180 , - 3891 , - 6026 , - 1441 , - 2424 , - 2831 , - 2662 , - 1917 , - 596 , - 4843 , - 2370 , - 5465 , - 1840 , - 3783 , - 5150 , - 5941 , - 12 , - 5795 , - 4858 , - 3345 , - 1256 , - 4735 , - 1494 , - 3821 , - 5572 , - 603 , - 1202 , - 1225 , - 672 , - 5687 , - 3982 , - 1701 , - 4988 , - 1555 , - 3690 , - 5249 , - 88 , - 495 , - 326 , - 5725 , - 4404 , - 2507 , - 34 , - 3129 , - 5648 , - 1447 , - 2814 , - 3605 , - 3820 , - 3459 , - 2522 , - 1009 , - 5064 , - 2399 , - 5302 , - 1485 , - 3236 , - 4411 , - 5010 , - 5033 , - 4480 , - 3351 , - 1646 , - 5509 , - 2652 , - 5363 , - 1354 , - 2913 , - 3896 , - 4303 , - 4134 , - 3389 , - 2068 , - 171 , - 3842 , - 793 , - 3312 , - 5255 , - 478 , - 1269 , - 1484 , - 1123 , - 186 , - 4817 , - 2728 , - 63 , - 2966 , - 5293 , - 900 , - 2075 , - 2674 , - 2697 , - 2144 , - 1015 , - 5454 , - 3173 , - 316 , - 3027 , - 5162 , - 577 , - 1560 , - 1967 , - 1798 , - 1053 , - 5876 , - 3979 , - 1506 , - 4601 , - 976 , - 2919 , - 4286 , - 5077 , - 5292 , - 4931 , - 3994 , - 2481 , - 392 , - 3871 , - 630 , - 2957 , - 4708 , - 5883 , - 338 , - 361 , - 5952 , - 4823 , - 3118 , - 837 , - 4124 , - 691 , - 2826 , - 4385 , - 5368 , - 5775 , - 5606 , - 4861 , - 3540 , - 1643 , - 5314 , - 2265 , - 4784 , - 583 , - 1950 , - 2741 , - 2956 , - 2595 , - 1658 , - 145 , - 4200 , - 1535 , - 4438 , - 621 , - 2372 , - 3547 , - 4146 , - 4169 , - 3616 , - 2487 , - 782 , - 4645 , - 1788 , - 4499 , - 490 , - 2049 , - 3032 , - 3439 , - 3270 , - 2525 , - 1204 , - 5451 , - 2978 , - 6073 , - 2448 , - 4391 , - 5758 , - 405 , - 620 , - 259 , - 5466 , - 3953 , - 1864 , - 5343 , - 2102 , - 4429 , - 36 , - 1211 , - 1810 , - 1833 , - 1280 , - 151 , - 4590 , - 2309 , - 5596 , - 2163 , - 4298 , - 5857 , - 696 , - 1103 , - 934 , - 189 , - 5012 , - 3115 , - 642 , - 3737 , - 112 , - 2055 , - 3422 , - 4213 , - 4428 , - 4067 , - 3130 , - 1617 , - 5672 , - 3007 , - 5910 , - 2093 , - 3844 , - 5019 , - 5618 , - 5641 , - 5088 , - 3959 , - 2254 , - 6117 , - 3260 , - 5971 , - 1962 , - 3521 , - 4504 , - 4911 , - 4742 , - 3997 , - 2676 , - 779 , - 4450 , - 1401 , - 3920 , - 5863 , - 1086 , - 1877 , - 2092 , - 1731 , - 794 , - 5425 , - 3336 , - 671 , - 3574 , - 5901 , - 1508 , - 2683 , - 3282 , - 3305 , - 2752 , - 1623 , - 6062 , - 3781 , - 924 , - 3635 , - 5770 , - 1185 , - 2168 , - 2575 , - 2406 , - 1661 , - 340 , - 4587 , - 2114 , - 5209 , - 1584 , - 3527 , - 4894 , - 5685 , - 5900 , - 5539 , - 4602 , - 3089 , - 1000 , - 4479 , - 1238 , - 3565 , - 5316 , - 347 , - 946 , - 969 , - 416 , - 5431 , - 3726 , - 1445 , - 4732 , - 1299 , - 3434 , - 4993 , - 5976 , - 239 , - 70 , - 5469 , - 4148 , - 2251 , - 5922 , - 2873 , - 5392 , - 1191 , - 2558 , - 3349 , - 3564 , - 3203 , - 2266 , - 753 , - 4808 , - 2143 , - 5046 , - 1229 , - 2980 , - 4155 , - 4754 , - 4777 , - 4224 , - 3095 , - 1390 , - 5253 , - 2396 , - 5107 , - 1098 , - 2657 , - 3640 , - 4047 , - 3878 , - 3133 , - 1812 , - 6059 , - 3586 , - 537 , - 3056 , - 4999 , - 222 , - 1013 , - 1228 , - 867 , - 6074 , - 4561 , - 2472 , - 5951 , - 2710 , - 5037 , - 644 , - 1819 , - 2418 , - 2441 , - 1888 , - 759 , - 5198 , - 2917 , - 60 , - 2771 , - 4906 , - 321 , - 1304 , - 1711 , - 1542 , - 797 , - 5620 , - 3723 , - 1250 , - 4345 , - 720 , - 2663 , - 4030 , - 4821 , - 5036 , - 4675 , - 3738 , - 2225 , - 136 , - 3615 , - 374 , - 2701 , - 4452 , - 5627 , - 82 , - 105 , - 5696 , - 4567 , - 2862 , - 581 , - 3868 , - 435 , - 2570 , - 4129 , - 5112 , - 5519 , - 5350 , - 4605 , - 3284 , - 1387 , - 5058 , - 2009 , - 4528 , - 327 , - 1694 , - 2485 , - 2700 , - 2339 , - 1402 , - 6033 , - 3944 , - 1279 , - 4182 , - 365 , - 2116 , - 3291 , - 3890 , - 3913 , - 3360 , - 2231 , - 526 , - 4389 , - 1532 , - 4243 , - 234 , - 1793 , - 2776 , - 3183 , - 3014 , - 2269 , - 948 , - 5195 , - 2722 , - 5817 , - 2192 , - 4135 , - 5502 , - 149 , - 364 , - 3 , - 5210 , - 3697 , - 1608 , - 5087 , - 1846 , - 4173 , - 5924 , - 955 , - 1554 , - 1577 , - 1024 , - 6039 , - 4334 , - 2053 , - 5340 , - 1907 , - 4042 , - 5601 , - 440 , - 847 , - 678 , - 6077 , - 4756 , - 2859 , - 386 , - 3481 , - 6000 , - 1799 , - 3166 , - 3957 , - 4172 , - 3811 , - 2874 , - 1361 , - 5416 , - 2751 , - 5654 , - 1837 , - 3588 , - 4763 , - 5362 , - 5385 , - 4832 , - 3703 , - 1998 , - 5861 , - 3004 , - 5715 , - 1706 , - 3265 , - 4248 , - 4655 , - 4486 , - 3741 , - 2420 , - 523 , - 4194 , - 1145 , - 3664 , - 5607 , - 830 , - 1621 , - 1836 , - 1475 , - 538 , - 5169 , - 3080 , - 415 , - 3318 , - 5645 , - 1252 , - 2427 , - 3026 , - 3049 , - 2496 , - 1367 , - 5806 , - 3525 , - 668 , - 3379 , - 5514 , - 929 , - 1912 , - 2319 , - 2150 , - 1405 , - 84 , - 4331 , - 1858 , - 4953 , - 1328 , - 3271 , - 4638 , - 5429 , - 5644 , - 5283 , - 4346 , - 2833 , - 744 , - 4223 , - 982 , - 3309 , - 5060 , - 91 , - 690 , - 713 , - 160 , - 5175 , - 3470 , - 1189 , - 4476 , - 1043 , - 3178 , - 4737 , - 5720 , - 6127 , - 5958 , - 5213 , - 3892 , - 1995 , - 5666 , - 2617 , - 5136 , - 935 , - 2302 , - 3093 , - 3308 , - 2947 , - 2010 , - 497 , - 4552 , - 1887 , - 4790 , - 973 , - 2724 , - 3899 , - 4498 , - 4521 , - 3968 , - 2839 , - 1134 , - 4997 , - 2140 , - 4851 , - 842 , - 2401 , - 3384 , - 3791 , - 3622 , - 2877 , - 1556 , - 5803 , - 3330 , - 281 , - 2800 , - 4743 , - 6110 , - 757 , - 972 , - 611 , - 5818 , - 4305 , - 2216 , - 5695 , - 2454 , - 4781 , - 388 , - 1563 , - 2162 , - 2185 , - 1632 , - 503 , - 4942 , - 2661 , - 5948 , - 2515 , - 4650 , - 65 , - 1048 , - 1455 , - 1286 , - 541 , - 5364 , - 3467 , - 994 , - 4089 , - 464 , - 2407 , - 3774 , - 4565 , - 4780 , - 4419 , - 3482 , - 1969 , - 6024 , - 3359 , - 118 , - 2445 , - 4196 , - 5371 , - 5970 , - 5993 , - 5440 , - 4311 , - 2606 , - 325 , - 3612 , - 179 , - 2314 , - 3873 , - 4856 , - 5263 , - 5094 , - 4349 , - 3028 , - 1131 , - 4802 , - 1753 , - 4272 , - 71 , - 1438 , - 2229 , - 2444 , - 2083 , - 1146 , - 5777 , - 3688 , - 1023 , - 3926 , - 109 , - 1860 , - 3035 , - 3634 , - 3657 , - 3104 , - 1975 , - 270 , - 4133 , - 1276 , - 3987 , - 6122 , - 1537 , - 2520 , - 2927 , - 2758 , - 2013 , - 692 , - 4939 , - 2466 , - 5561 , - 1936 , - 3879 , - 5246 , - 6037 , - 108 , - 5891 , - 4954 , - 3441 , - 1352 , - 4831 , - 1590 , - 3917 , - 5668 , - 699 , - 1298 , - 1321 , - 768 , - 5783 , - 4078 , - 1797 , - 5084 , - 1651 , - 3786 , - 5345 , - 184 , - 591 , - 422 , - 5821 , - 4500 , - 2603 , - 130 , - 3225 , - 5744 , - 1543 , - 2910 , - 3701 , - 3916 , - 3555 , - 2618 , - 1105 , - 5160 , - 2495 , - 5398 , - 1581 , - 3332 , - 4507 , - 5106 , - 5129 , - 4576 , - 3447 , - 1742 , - 5605 , - 2748 , - 5459 , - 1450 , - 3009 , - 3992 , - 4399 , - 4230 , - 3485 , - 2164 , - 267 , - 3938 , - 889 , - 3408 , - 5351 , - 574 , - 1365 , - 1580 , - 1219 , - 282 , - 4913 , - 2824 , - 159 , - 3062 , - 5389 , - 996 , - 2171 , - 2770 , - 2793 , - 2240 , - 1111 , - 5550 , - 3269 , - 412 , - 3123 , - 5258 , - 673 , - 1656 , - 2063 , - 1894 , - 1149 , - 5972 , - 4075 , - 1602 , - 4697 , - 1072 , - 3015 , - 4382 , - 5173 , - 5388 , - 5027 , - 4090 , - 2577 , - 488 , - 3967 , - 726 , - 3053 , - 4804 , - 5979 , - 434 , - 457 , - 6048 , - 4919 , - 3214 , - 933 , - 4220 , - 787 , - 2922 , - 4481 , - 5464 , - 5871 , - 5702 , - 4957 , - 3636 , - 1739 , - 5410 , - 2361 , - 4880 , - 679 , - 2046 , - 2837 , - 3052 , - 2691 , - 1754 , - 241 , - 4296 , - 1631 , - 4534 , - 717 , - 2468 , - 3643 , - 4242 , - 4265 , - 3712 , - 2583 , - 878 , - 4741 , - 1884 , - 4595 , - 586 , - 2145 , - 3128 , - 3535 , - 3366 , - 2621 , - 1300 , - 5547 , - 3074 , - 25 , - 2544 , - 4487 , - 5854 , - 501 , - 716 , - 355 , - 5562 , - 4049 , - 1960 , - 5439 , - 2198 , - 4525 , - 132 , - 1307 , - 1906 , - 1929 , - 1376 , - 247 , - 4686 , - 2405 , - 5692 , - 2259 , - 4394 , - 5953 , - 792 , - 1199 , - 1030 , - 285 , - 5108 , - 3211 , - 738 , - 3833 , - 208 , - 2151 , - 3518 , - 4309 , - 4524 , - 4163 , - 3226 , - 1713 , - 5768 , - 3103 , - 6006 , - 2189 , - 3940 , - 5115 , - 5714 , - 5737 , - 5184 , - 4055 , - 2350 , - 69 , - 3356 , - 6067 , - 2058 , - 3617 , - 4600 , - 5007 , - 4838 , - 4093 , - 2772 , - 875 , - 4546 , - 1497 , - 4016 , - 5959 , - 1182 , - 1973 , - 2188 , - 1827 , - 890 , - 5521 , - 3432 , - 767 , - 3670 , - 5997 , - 1604 , - 2779 , - 3378 , - 3401 , - 2848 , - 1719 , - 14 , - 3877 , - 1020 , - 3731 , - 5866 , - 1281 , - 2264 , - 2671 , - 2502 , - 1757 , - 436 , - 4683 , - 2210 , - 5305 , - 1680 , - 3623 , - 4990 , - 5781 , - 5996 , - 5635 , - 4698 , - 3185 , - 1096 , - 4575 , - 1334 , - 3661 , - 5412 , - 443 , - 1042 , - 1065 , - 512 , - 5527 , - 3822 , - 1541 , - 4828 , - 1395 , - 3530 , - 5089 , - 6072 , - 335 , - 166 , - 5565 , - 4244 , - 2347 , - 6018 , - 2969 , - 5488 , - 1287 , - 2654 , - 3445 , - 3660 , - 3299 , - 2362 , - 849 , - 4904 , - 2239 , - 5142 , - 1325 , - 3076 , - 4251 , - 4850 , - 4873 , - 4320 , - 3191 , - 1486 , - 5349 , - 2492 , - 5203 , - 1194 , - 2753 , - 3736 , - 4143 , - 3974 , - 3229 , - 1908 , - 11 , - 3682 , - 633 , - 3152 , - 5095 , - 318 , - 1109 , - 1324 , - 963 , - 26 , - 4657 , - 2568 , - 6047 , - 2806 , - 5133 , - 740 , - 1915 , - 2514 , - 2537 , - 1984 , - 855 , - 5294 , - 3013 , - 156 , - 2867 , - 5002 , - 417 , - 1400 , - 1807 , - 1638 , - 893 , - 5716 , - 3819 , - 1346 , - 4441 , - 816 , - 2759 , - 4126 , - 4917 , - 5132 , - 4771 , - 3834 , - 2321 , - 232 , - 3711 , - 470 , - 2797 , - 4548 , - 5723 , - 178 , - 201 , - 5792 , - 4663 , - 2958 , - 677 , - 3964 , - 531 , - 2666 , - 4225 , - 5208 , - 5615 , - 5446 , - 4701 , - 3380 , - 1483 , - 5154 , - 2105 , - 4624 , - 423 , - 1790 , - 2581 , - 2796 , - 2435 , - 1498 , - 6129 , - 4040 , - 1375 , - 4278 , - 461 , - 2212 , - 3387 , - 3986 , - 4009 , - 3456 , - 2327 , - 622 , - 4485 , - 1628 , - 4339 , - 330 , - 1889 , - 2872 , - 3279 , - 3110 , - 2365 , - 1044 , - 5291 , - 2818 , - 5913 , - 2288 , - 4231 , - 5598 , - 245 , - 460 , - 99 , - 5306 , - 3793 , - 1704 , - 5183 , - 1942 , - 4269 , - 6020 , - 1051 , - 1650 , - 1673 , - 1120 , - 6135 , - 4430 , - 2149 , - 5436 , - 2003 , - 4138 , - 5697 , - 536 , - 943 , - 774 , - 29 , - 4852 , - 2955 , - 482 , - 3577 , - 6096 , - 1895 , - 3262 , - 4053 , - 4268 , - 3907 , - 2970 , - 1457 , - 5512 , - 2847 , - 5750 , - 1933 , - 3684 , - 4859 , - 5458 , - 5481 , - 4928 , - 3799 , - 2094 , - 5957 , - 3100 , - 5811 , - 1802 , - 3361 , - 4344 , - 4751 , - 4582 , - 3837 , - 2516 , - 619 , - 4290 , - 1241 , - 3760 , - 5703 , - 926 , - 1717 , - 1932 , - 1571 , - 634 , - 5265 , - 3176 , - 511 , - 3414 , - 5741 , - 1348 , - 2523 , - 3122 , - 3145 , - 2592 , - 1463 , - 5902 , - 3621 , - 764 , - 3475 , - 5610 , - 1025 , - 2008 , - 2415 , - 2246 , - 1501 , - 180 , - 4427 , - 1954 , - 5049 , - 1424 , - 3367 , - 4734 , - 5525 , - 5740 , - 5379 , - 4442 , - 2929 , - 840 , - 4319 , - 1078 , - 3405 , - 5156 , - 187 , - 786 , - 809 , - 256 , - 5271 , - 3566 , - 1285 , - 4572 , - 1139 , - 3274 , - 4833 , - 5816 , - 79 , - 6054 , - 5309 , - 3988 , - 2091 , - 5762 , - 2713 , - 5232 , - 1031 , - 2398 , - 3189 , - 3404 , - 3043 , - 2106 , - 593 , - 4648 , - 1983 , - 4886 , - 1069 , - 2820 , - 3995 , - 4594 , - 4617 , - 4064 , - 2935 , - 1230 , - 5093 , - 2236 , - 4947 , - 938 , - 2497 , - 3480 , - 3887 , - 3718 , - 2973 , - 1652 , - 5899 , - 3426 , - 377 , - 2896 , - 4839 , - 62 , - 853 , - 1068 , - 707 , - 5914 , - 4401 , - 2312 , - 5791 , - 2550 , - 4877 , - 484 , - 1659 , - 2258 , - 2281 , - 1728 , - 599 , - 5038 , - 2757 , - 6044 , - 2611 , - 4746 , - 161 , - 1144 , - 1551 , - 1382 , - 637 , - 5460 , - 3563 , - 1090 , - 4185 , - 560 , - 2503 , - 3870 , - 4661 , - 4876 , - 4515 , - 3578 , - 2065 , - 6120 , - 3455 , - 214 , - 2541 , - 4292 , - 5467 , - 6066 , - 6089 , - 5536 , - 4407 , - 2702 , - 421 , - 3708 , - 275 , - 2410 , - 3969 , - 4952 , - 5359 , - 5190 , - 4445 , - 3124 , - 1227 , - 4898 , - 1849 , - 4368 , - 167 , - 1534 , - 2325 , - 2540 , - 2179 , - 1242 , - 5873 , - 3784 , - 1119 , - 4022 , - 205 , - 1956 , - 3131 , - 3730 , - 3753 , - 3200 , - 2071 , - 366 , - 4229 , - 1372 , - 4083 , - 74 , - 1633 , - 2616 , - 3023 , - 2854 , - 2109 , - 788 , - 5035 , - 2562 , - 5657 , - 2032 , - 3975 , - 5342 , - 6133 , - 204 , - 5987 , - 5050 , - 3537 , - 1448 , - 4927 , - 1686 , - 4013 , - 5764 , - 795 , - 1394 , - 1417 , - 864 , - 5879 , - 4174 , - 1893 , - 5180 , - 1747 , - 3882 , - 5441 , - 280 , - 687 , - 518 , - 5917 , - 4596 , - 2699 , - 226 , - 3321 , - 5840 , - 1639 , - 3006 , - 3797 , - 4012 , - 3651 , - 2714 , - 1201 , - 5256 , - 2591 , - 5494 , - 1677 , - 3428 , - 4603 , - 5202 , - 5225 , - 4672 , - 3543 , - 1838 , - 5701 , - 2844 , - 5555 , - 1546 , - 3105 , - 4088 , - 4495 , - 4326 , - 3581 , - 2260 , - 363 , - 4034 , - 985 , - 3504 , - 5447 , - 670 , - 1461 , - 1676 , - 1315 , - 378 , - 5009 , - 2920 , - 255 , - 3158 , - 5485 , - 1092 , - 2267 , - 2866 , - 2889 , - 2336 , - 1207 , - 5646 , - 3365 , - 508 , - 3219 , - 5354 , - 769 , - 1752 , - 2159 , - 1990 , - 1245 , - 6068 , - 4171 , - 1698 , - 4793 , - 1168 , - 3111 , - 4478 , - 5269 , - 5484 , - 5123 , - 4186 , - 2673 , - 584 , - 4063 , - 822 , - 3149 , - 4900 , - 6075 , - 530 , - 553 , -}; -#endif diff --git a/openair1/PHY/CODING/lte_interleaver2.h b/openair1/PHY/CODING/lte_interleaver2.h deleted file mode 100644 index 60b2fa6d1f..0000000000 --- a/openair1/PHY/CODING/lte_interleaver2.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -unsigned short f1f2mat_old[2*188] = {3, 10, - 7, 12, - 19, 42, - 7, 16, - 7, 18, - 11, 20, - 5, 22, - 11, 24, - 7, 26, - 41, 84, - 103, 90, - 15, 32, - 9, 34, - 17, 108, - 9, 38, - 21, 120, - 101, 84, - 21, 44, - 57, 46, - 23, 48, - 13, 50, - 27, 52, - 11, 36, - 27, 56, - 85, 58, - 29, 60, - 33, 62, - 15, 32, - 17, 198, - 33, 68, - 103, 210, - 19, 36, - 19, 74, - 37, 76, - 19, 78, - 21, 120, - 21, 82, - 115, 84, - 193, 86, - 21, 44, - 133, 90, - 81, 46, - 45, 94, - 23, 48, - 243, 98, - 151, 40, - 155, 102, - 25, 52, - 51, 106, - 47, 72, - 91, 110, - 29, 168, - 29, 114, - 247, 58, - 29, 118, - 89, 180, - 91, 122, - 157, 62, - 55, 84, - 31, 64, - 17, 66, - 35, 68, - 227, 420, - 65, 96, - 19, 74, - 37, 76, - 41, 234, - 39, 80, - 185, 82, - 43, 252, - 21, 86, - 155, 44, - 79, 120, - 139, 92, - 23, 94, - 217, 48, - 25, 98, - 17, 80, - 127, 102, - 25, 52, - 239, 106, - 17, 48, - 137, 110, - 215, 112, - 29, 114, - 15, 58, - 147, 118, - 29, 60, - 59, 122, - 65, 124, - 55, 84, - 31, 64, - 17, 66, - 171, 204, - 67, 140, - 35, 72, - 19, 74, - 39, 76, - 19, 78, - 199, 240, - 21, 82, - 211, 252, - 21, 86, - 43, 88, - 149, 60, - 45, 92, - 49, 846, - 71, 48, - 13, 28, - 17, 80, - 25, 102, - 183, 104, - 55, 954, - 127, 96, - 27, 110, - 29, 112, - 29, 114, - 57, 116, - 45, 354, - 31, 120, - 59, 610, - 185, 124, - 113, 420, - 31, 64, - 17, 66, - 171, 136, - 209, 420, - 253, 216, - 367, 444, - 265, 456, - 181, 468, - 39, 80, - 27, 164, - 127, 504, - 143, 172, - 43, 88, - 29, 300, - 45, 92, - 157, 188, - 47, 96, - 13, 28, - 111, 240, - 443, 204, - 51, 104, - 51, 212, - 451, 192, - 257, 220, - 57, 336, - 313, 228, - 271, 232, - 179, 236, - 331, 120, - 363, 244, - 375, 248, - 127, 168, - 31, 64, - 33, 130, - 43, 264, - 33, 134, - 477, 408, - 35, 138, - 233, 280, - 357, 142, - 337, 480, - 37, 146, - 71, 444, - 71, 120, - 37, 152, - 39, 462, - 127, 234, - 39, 158, - 39, 80, - 31, 96, - 113, 902, - 41, 166, - 251, 336, - 43, 170, - 21, 86, - 43, 174, - 45, 176, - 45, 178, - 161, 120, - 89, 182, - 323, 184, - 47, 186, - 23, 94, - 47, 190, - 263, 480 - }; diff --git a/openair1/PHY/INIT/init_top.c b/openair1/PHY/INIT/init_top.c index acafe6b66b..6f48f295d2 100644 --- a/openair1/PHY/INIT/init_top.c +++ b/openair1/PHY/INIT/init_top.c @@ -67,8 +67,6 @@ void generate_qpsk_table(void) void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms) { - crcTableInit(); - ccodedot11_init(); ccodedot11_init_inv(); diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 55ac76d2f6..247204cb06 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -255,12 +255,7 @@ void phy_config_request(PHY_Config_t *phy_config) { "prach_starting_subframe_periodicity[0] %d < prach_numPetitionPerPreambleAttempt[0] %d\n", fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0], fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]); -#if 0 - AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] > 0, - "prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]==0\n"); -#else - LOG_E(PHY,"***DJP*** removed assert on preamble fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]:%d expecting >0 %s:%d\n\n\n", fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0], __FILE__, __LINE__); -#endif + fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[0] = cfg->emtc_config.prach_ce_level_0_configuration_index.value; fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[0] = cfg->emtc_config.prach_ce_level_0_frequency_offset.value; fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[0] = cfg->emtc_config.prach_ce_level_0_hopping_enable.value; @@ -471,7 +466,7 @@ void phy_config_sib2_eNB(uint8_t Mod_id, } */ -void phy_config_sib13_eNB(uint8_t Mod_id,int CC_id,int mbsfn_Area_idx, +void phy_config_sib13_eNB(module_id_t Mod_id,int CC_id,int mbsfn_Area_idx, long mbsfn_AreaId_r9) { @@ -491,8 +486,7 @@ void phy_config_sib13_eNB(uint8_t Mod_id,int CC_id,int mbsfn_Area_idx, void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *eNB) { - - uint8_t UE_id; + uint16_t UE_id; struct PhysicalConfigDedicated *physicalConfigDedicated; LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; diff --git a/openair1/PHY/INIT/lte_init_ru.c b/openair1/PHY/INIT/lte_init_ru.c index b06e4c40af..c6ac0819cd 100644 --- a/openair1/PHY/INIT/lte_init_ru.c +++ b/openair1/PHY/INIT/lte_init_ru.c @@ -109,7 +109,7 @@ int phy_init_RU(RU_t *ru) { AssertFatal(RC.nb_L1_inst <= NUMBER_OF_eNB_MAX,"eNB instances %d > %d\n", RC.nb_L1_inst,NUMBER_OF_eNB_MAX); - LOG_E(PHY,"[INIT] %s() RC.nb_L1_inst:%d \n", __FUNCTION__, RC.nb_L1_inst); + LOG_D(PHY,"[INIT] %s() RC.nb_L1_inst:%d \n", __FUNCTION__, RC.nb_L1_inst); for (i=0; iSIPeriod = SIperiod; } -void phy_config_sib2_ue(uint8_t Mod_id,int CC_id, +void phy_config_sib2_ue(module_id_t Mod_id,int CC_id, uint8_t eNB_id, RadioResourceConfigCommonSIB_t *radioResourceConfigCommon, ARFCN_ValueEUTRA_t *ul_CarrierFreq, @@ -179,7 +179,7 @@ void phy_config_sib2_ue(uint8_t Mod_id,int CC_id, } -void phy_config_sib13_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,int mbsfn_Area_idx, +void phy_config_sib13_ue(module_id_t Mod_id,int CC_id,uint8_t eNB_id,int mbsfn_Area_idx, long mbsfn_AreaId_r9) { @@ -201,7 +201,7 @@ void phy_config_sib13_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,int mbsfn_Area_ /* * Configures UE MAC and PHY with radioResourceCommon received in mobilityControlInfo IE during Handover */ -void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, MobilityControlInfo_t *mobilityControlInfo, uint8_t ho_failed) +void phy_config_afterHO_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_id, MobilityControlInfo_t *mobilityControlInfo, uint8_t ho_failed) { if(mobilityControlInfo!=NULL) { @@ -324,7 +324,7 @@ void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, Mobility } } -void phy_config_meas_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,uint8_t n_adj_cells,unsigned int *adj_cell_id) +void phy_config_meas_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index,uint8_t n_adj_cells,unsigned int *adj_cell_id) { PHY_MEASUREMENTS *phy_meas = &PHY_vars_UE_g[Mod_id][CC_id]->measurements; @@ -353,7 +353,7 @@ void phy_config_dedicated_scell_ue(uint8_t Mod_id, #endif -void phy_config_harq_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id, +void phy_config_harq_ue(module_id_t Mod_id,int CC_id,uint8_t eNB_id, uint16_t max_harq_tx ) { @@ -363,7 +363,7 @@ void phy_config_harq_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id, extern uint16_t beta_cqi[16]; -void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id, +void phy_config_dedicated_ue(module_id_t Mod_id,int CC_id,uint8_t eNB_id, struct PhysicalConfigDedicated *physicalConfigDedicated ) { @@ -709,6 +709,7 @@ int init_lte_ue_signal(PHY_VARS_UE *ue, for (i=0; inb_antennas_rx; i++) { common_vars->rxdata[i] = (int32_t*) malloc16_clear( (fp->samples_per_tti*10+2048)*sizeof(int32_t) ); + LOG_I(PHY,"common_vars->rxdata[%d] %p\n",i,common_vars->rxdata[i]); common_vars->common_vars_rx_data_per_thread[0].rxdataF[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->ofdm_symbol_size*14) ); common_vars->common_vars_rx_data_per_thread[1].rxdataF[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->ofdm_symbol_size*14) ); } diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c index e7c4ced5d3..3b8a26125d 100644 --- a/openair1/PHY/INIT/lte_parms.c +++ b/openair1/PHY/INIT/lte_parms.c @@ -100,6 +100,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf) frame_parms->first_carrier_offset = 1536-600; frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2; frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2; + } else { frame_parms->ofdm_symbol_size = 2048; @@ -148,7 +149,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf) frame_parms->N_RBGS = 2; frame_parms->N_RBG = 13; - break; case 15: @@ -159,6 +159,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf) frame_parms->nb_prefix_samples0>>=(3-log2_osf); frame_parms->N_RBGS = 2; frame_parms->N_RBG = 8; + break; case 6: @@ -169,6 +170,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf) frame_parms->nb_prefix_samples0>>=(4-log2_osf); frame_parms->N_RBGS = 1; frame_parms->N_RBG = 6; + break; default: diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c index 2b7873cc29..e268a5b061 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c @@ -34,7 +34,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms, PHY_VARS_UE *ue, - unsigned char eNB_id, + module_id_t eNB_id, uint8_t subframe, unsigned char clear, short coef) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c index 3bf4c40ade..7f4f87dac2 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c @@ -79,7 +79,7 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms, #ifdef DEBUG_PHY sprintf(fname,"srs_ch_estimates_time_%d%d.m",ind,aa); sprintf(vname,"srs_time_%d%d",ind,aa); - write_output(fname,vname,lte_eNB_srs->srs_ch_estimates_time[aa],frame_parms->ofdm_symbol_size*2,2,1); + LOG_M(fname,vname,lte_eNB_srs->srs_ch_estimates_time[aa],frame_parms->ofdm_symbol_size*2,2,1); #endif } @@ -112,7 +112,7 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms, } -int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,uint8_t UE_id) +int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,module_id_t UE_id) { int temp, i, aa, max_pos=0, max_val=0; short Re,Im; diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c index 06ef4a5d1a..74d6248d15 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c @@ -35,7 +35,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms, PHY_VARS_UE *ue, - unsigned char eNB_id, + module_id_t eNB_id, uint8_t subframe, unsigned char clear, short coef) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 8d1fb20d6b..43c0350efb 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -28,7 +28,7 @@ //#define DEBUG_BF_CH int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, - uint8_t eNB_id, + module_id_t eNB_id, uint8_t eNB_offset, unsigned char Ns, unsigned char p, @@ -81,7 +81,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, //generate ue specific pilots lprime = symbol/3-1; lte_dl_ue_spec_rx(phy_vars_ue,uespec_pilot,Ns,5,lprime,0,dlsch0_harq->nb_rb); - //write_output("uespec_pilot_rx.m","uespec_pilot",uespec_pilot,300,1,1); + //LOG_M("uespec_pilot_rx.m","uespec_pilot",uespec_pilot,300,1,1); if (frame_parms->Ncp==0){ if (symbol==3 || symbol==6 || symbol==9 || symbol==12) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c index a72563f7e6..f7c4a3ead3 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c @@ -29,7 +29,7 @@ #include "SCHED_UE/sched_UE.h" int lte_dl_channel_estimation(PHY_VARS_UE *ue, - uint8_t eNB_id, + module_id_t eNB_id, uint8_t eNB_offset, unsigned char Ns, unsigned char p, diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c index c4fc80a8c1..1a0611b962 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c @@ -26,7 +26,7 @@ //#define DEBUG_CH int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *ue, - uint8_t eNB_id, + module_id_t eNB_id, uint8_t eNB_offset, int subframe, unsigned char l) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c index b416ff9e79..a881773910 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c @@ -34,7 +34,7 @@ int32_t rx_power_avg_eNB[3]; void lte_eNB_I0_measurements(PHY_VARS_eNB *eNB, int subframe, - unsigned char eNB_id, + module_id_t eNB_id, unsigned char clear) { @@ -115,8 +115,8 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *eNB, } void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB, - unsigned char eNB_id, - unsigned char UE_id, + module_id_t eNB_id, + module_id_t UE_id, unsigned char init_averaging) { LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms; diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c index 587dbed6c5..0ff4650867 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c @@ -275,9 +275,9 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com #ifdef DEBUG_PHY - write_output("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1); - write_output("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1); - write_output("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1); + LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1); + LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1); + LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1); #endif return (1); } @@ -466,10 +466,10 @@ int lte_sync_time(int **rxdata, ///rx data in time domain #ifdef DEBUG_PHY if (debug_cnt == 0) { - write_output("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2); - write_output("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2); - write_output("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2); - write_output("rxdata0.m","rxd0",rxdata[0],length<<1,1,1); + LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2); + LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2); + LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2); + LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1); // exit(-1); } else { debug_cnt++; diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c index fd7b8d601a..e8225aa1fd 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c @@ -67,7 +67,7 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq) for (i=0; i<38400*4; i+=3072) { // steps of 200 us with 100 us overlap, 0 to 5s - // write_output("rxsig0.m","rxs0",ue->lte_ue_common_vars.rxdata[0],30720,1,1); + // LOG_M("rxsig0.m","rxs0",ue->lte_ue_common_vars.rxdata[0],30720,1,1); //for (i = 15360-3072*2; i<15360+3072+1; i+=3072) { @@ -87,9 +87,9 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq) /* printf("i %d: sp %p\n",i,sp); if (i==12288) { - write_output("scan6144F.m","s6144F",sp,6144,1,1); - write_output("scan6144.m","s6144",rxp,6144,1,1); - write_output("pss0_6144.m","pss0",pss6144_0_0,256,1,1); + LOG_M("scan6144F.m","s6144F",sp,6144,1,1); + LOG_M("scan6144.m","s6144",rxp,6144,1,1); + LOG_M("pss0_6144.m","pss0",pss6144_0_0,256,1,1); }*/ for (f = -2000; f<2000; f++) { // this is -10MHz to 10 MHz in 5 kHz steps @@ -272,10 +272,10 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq) if (i==12288) { sprintf(fname,"corr256F_%d.m",abs(f)); sprintf(vname,"c256F_%d",abs(f)); - write_output(fname,vname,autocorr0,256,1,1); + LOG_M(fname,vname,autocorr0,256,1,1); sprintf(fname,"corr256_%d.m",abs(f)); sprintf(vname,"c256_%d",abs(f)); - write_output(fname,vname,tmp_t,256,1,1); + LOG_M(fname,vname,tmp_t,256,1,1); }*/ memset((void*)autocorr0_t,0,256*4); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index 199fc2d846..bf22802145 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -55,7 +55,7 @@ void print_ints(char *s,int *x) } -int16_t get_PL(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) +int16_t get_PL(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index) { PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id]; @@ -81,7 +81,7 @@ int16_t get_PL(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) } -uint8_t get_n_adj_cells (uint8_t Mod_id,uint8_t CC_id) +uint8_t get_n_adj_cells (module_id_t Mod_id,uint8_t CC_id) { PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id]; @@ -92,7 +92,7 @@ uint8_t get_n_adj_cells (uint8_t Mod_id,uint8_t CC_id) return 0; } -uint32_t get_rx_total_gain_dB (uint8_t Mod_id,uint8_t CC_id) +uint32_t get_rx_total_gain_dB (module_id_t Mod_id,uint8_t CC_id) { PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id]; @@ -102,7 +102,7 @@ uint32_t get_rx_total_gain_dB (uint8_t Mod_id,uint8_t CC_id) return 0xFFFFFFFF; } -uint32_t get_RSSI (uint8_t Mod_id,uint8_t CC_id) +uint32_t get_RSSI (module_id_t Mod_id,uint8_t CC_id) { PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id]; @@ -112,7 +112,7 @@ uint32_t get_RSSI (uint8_t Mod_id,uint8_t CC_id) return 0xFFFFFFFF; } -double get_RSRP(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) +double get_RSRP(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index) { AssertFatal(PHY_vars_UE_g!=NULL,"PHY_vars_UE_g is null\n"); @@ -128,7 +128,7 @@ double get_RSRP(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) return -140.0; } -uint32_t get_RSRQ(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) +uint32_t get_RSRQ(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index) { PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id]; @@ -139,7 +139,7 @@ uint32_t get_RSRQ(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) return 0xFFFFFFFF; } -int8_t set_RSRP_filtered(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rsrp) +int8_t set_RSRP_filtered(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rsrp) { PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id]; @@ -153,7 +153,7 @@ int8_t set_RSRP_filtered(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rs return -1; } -int8_t set_RSRQ_filtered(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rsrq) +int8_t set_RSRQ_filtered(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rsrq) { PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id]; diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c index 74ef6798c7..48441765b4 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c @@ -37,7 +37,7 @@ static int16_t ru_90c[2*128] = {32767, 0,32766, -402,32758, -804,32746, -1206,32 int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB, eNB_rxtx_proc_t *proc, - uint8_t UE_id, + module_id_t UE_id, unsigned char l, unsigned char Ns) { @@ -105,9 +105,9 @@ int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32))); #ifdef DEBUG_CH if (Ns==0) - write_output("drs_seq0.m","drsseq0",ul_ref_sigs_rx[u][v][Msc_RS_idx],2*Msc_RS,2,1); + LOG_M("drs_seq0.m","drsseq0",ul_ref_sigs_rx[u][v][Msc_RS_idx],2*Msc_RS,2,1); else - write_output("drs_seq1.m","drsseq1",ul_ref_sigs_rx[u][v][Msc_RS_idx],2*Msc_RS,2,1); + LOG_M("drs_seq1.m","drsseq1",ul_ref_sigs_rx[u][v][Msc_RS_idx],2*Msc_RS,2,1); #endif @@ -228,7 +228,7 @@ int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32))); if((cyclic_shift != 0)) { // Compensating for the phase shift introduced at the transmitte #ifdef DEBUG_CH - write_output("drs_est_pre.m","drsest_pre",ul_ch_estimates[0],300*12,1,1); + LOG_M("drs_est_pre.m","drsest_pre",ul_ch_estimates[0],300*12,1,1); #endif for(i=symbol_offset; isrs[eNB_id], 0x7FFF, subframe)==-1) { - LOG_E(PHY,"lte_srs_channel_estimation: Error in generate_srs_rx\n"); + LOG_E(PHY,"lte_srs_channel_estimation: Error in generate_srs\n"); return(-1); } @@ -466,8 +466,8 @@ int32_t lte_srs_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms, srs_vars->srs_ch_estimates[aa]); #endif - //write_output("eNB_rxF.m","rxF",&common_vars->rxdataF[0][aa][2*frame_parms->ofdm_symbol_size*symbol],2*(frame_parms->ofdm_symbol_size),2,1); - //write_output("eNB_srs.m","srs_eNB",common_vars->srs,(frame_parms->ofdm_symbol_size),1,1); + //LOG_M("eNB_rxF.m","rxF",&common_vars->rxdataF[0][aa][2*frame_parms->ofdm_symbol_size*symbol],2*(frame_parms->ofdm_symbol_size),2,1); + //LOG_M("eNB_srs.m","srs_eNB",common_vars->srs,(frame_parms->ofdm_symbol_size),1,1); mult_cpx_conj_vector((int16_t*) &common_vars->rxdataF[aa][2*frame_parms->ofdm_symbol_size*symbol], @@ -480,7 +480,7 @@ int32_t lte_srs_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms, #ifdef DEBUG_SRS sprintf(fname,"srs_ch_est%d.m",aa); sprintf(vname,"srs_est%d",aa); - write_output(fname,vname,srs_vars->srs_ch_estimates[aa],frame_parms->ofdm_symbol_size,1,1); + LOG_M(fname,vname,srs_vars->srs_ch_estimates[aa],frame_parms->ofdm_symbol_size,1,1); #endif } diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c index 56d8aaf1df..1eabfd6c36 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c @@ -256,9 +256,9 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *ue, -//extern int write_output(const char *,const char *,void *,int,int,char); +//extern int LOG_M(const char *,const char *,void *,int,int,char); // flag change eren -extern int write_output(const char *,const char *,void *,int,int,char); +extern int LOG_M(const char *,const char *,void *,int,int,char); main() { @@ -317,10 +317,10 @@ main() 0); - write_output("dl_cell_spec00.m","dl_cs00",output00,1024,1,1); - write_output("dl_cell_spec01.m","dl_cs01",output01,1024,1,1); - write_output("dl_cell_spec10.m","dl_cs10",output10,1024,1,1); - write_output("dl_cell_spec11.m","dl_cs11",output11,1024,1,1); + LOG_M("dl_cell_spec00.m","dl_cs00",output00,1024,1,1); + LOG_M("dl_cell_spec01.m","dl_cs01",output01,1024,1,1); + LOG_M("dl_cell_spec10.m","dl_cs10",output10,1024,1,1); + LOG_M("dl_cell_spec11.m","dl_cs11",output11,1024,1,1); } #endif diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c index fc03299f2b..2c5240e143 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c @@ -317,9 +317,9 @@ int lte_dl_ue_spec_rx(PHY_VARS_UE *ue, -//extern int write_output(const char *,const char *,void *,int,int,char); +//extern int LOG_M(const char *,const char *,void *,int,int,char); // flag change eren -extern int write_output(const char *,const char *,void *,int,int,char); +extern int LOG_M(const char *,const char *,void *,int,int,char); main() { @@ -378,10 +378,10 @@ main() 0); - write_output("dl_ue_spec00.m","dl_cs00",output00,1024,1,1); - write_output("dl_ue_spec01.m","dl_cs01",output01,1024,1,1); - write_output("dl_ue_spec10.m","dl_cs10",output10,1024,1,1); - write_output("dl_ue_spec11.m","dl_cs11",output11,1024,1,1); + LOG_M("dl_ue_spec00.m","dl_cs00",output00,1024,1,1); + LOG_M("dl_ue_spec01.m","dl_cs01",output01,1024,1,1); + LOG_M("dl_ue_spec10.m","dl_cs10",output10,1024,1,1); + LOG_M("dl_ue_spec11.m","dl_cs11",output11,1024,1,1); } diff --git a/openair1/PHY/LTE_REFSIG/lte_gold.c b/openair1/PHY/LTE_REFSIG/lte_gold.c index 78fae8b8f3..c5e48d8364 100644 --- a/openair1/PHY/LTE_REFSIG/lte_gold.c +++ b/openair1/PHY/LTE_REFSIG/lte_gold.c @@ -44,7 +44,6 @@ N_{ID}^{cell = 0..503 void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14],uint16_t Nid_cell) { - unsigned char ns,l,Ncp=1-frame_parms->Ncp; unsigned int n,x1,x2;//,x1tmp,x2tmp; @@ -54,7 +53,7 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14] x2 = Ncp + (Nid_cell<<1) + - (((1+(Nid_cell<<1))*(1 + (((frame_parms->Ncp==0)?4:3)*l) + (7*(1+ns))))<<10); //cinit + (((1+(Nid_cell<<1))*(1 + (((frame_parms->Ncp==0)?4:3)*l) + (7*(1+ns))))<<10); //cinit //x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit //n = 0 x1 = 1+ (1<<31); @@ -81,7 +80,7 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14] } } -void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS) +void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS) { unsigned char ns,l; @@ -169,41 +168,6 @@ void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_ } } -/*! \brief gold sequenquence generator -\param x1 -\param x2 this should be set to c_init if reset=1 -\param reset resets the generator -\return 32 bits of the gold sequence -*/ -unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char reset) -{ - int n; - - if (reset) { - *x1 = 1+ (1<<31); - *x2=*x2 ^ ((*x2 ^ (*x2>>1) ^ (*x2>>2) ^ (*x2>>3))<<31); - - // skip first 50 double words (1600 bits) - // printf("n=0 : x1 %x, x2 %x\n",x1,x2); - for (n=1; n<50; n++) { - *x1 = (*x1>>1) ^ (*x1>>4); - *x1 = *x1 ^ (*x1<<31) ^ (*x1<<28); - *x2 = (*x2>>1) ^ (*x2>>2) ^ (*x2>>3) ^ (*x2>>4); - *x2 = *x2 ^ (*x2<<31) ^ (*x2<<30) ^ (*x2<<29) ^ (*x2<<28); - } - } - - *x1 = (*x1>>1) ^ (*x1>>4); - *x1 = *x1 ^ (*x1<<31) ^ (*x1<<28); - *x2 = (*x2>>1) ^ (*x2>>2) ^ (*x2>>3) ^ (*x2>>4); - *x2 = *x2 ^ (*x2<<31) ^ (*x2<<30) ^ (*x2<<29) ^ (*x2<<28); - return(*x1^*x2); - // printf("n=%d : c %x\n",n,x1^x2); - -} - - - #ifdef LTE_GOLD_MAIN main() { diff --git a/openair1/PHY/LTE_REFSIG/lte_refsig.h b/openair1/PHY/LTE_REFSIG/lte_refsig.h index 27788e5e1a..1bac0d14fc 100644 --- a/openair1/PHY/LTE_REFSIG/lte_refsig.h +++ b/openair1/PHY/LTE_REFSIG/lte_refsig.h @@ -36,7 +36,7 @@ \param reset resets the generator \return 32 bits of the gold sequence */ -unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char reset); +uint32_t lte_gold_generic(uint32_t *x1, uint32_t *x2, uint8_t reset); /*!\brief This function generates the LTE Gold sequence (36-211, Sec 7.2), specifically for DL reference signals. @@ -45,8 +45,7 @@ unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char @param Nid_cell Cell Id (to compute sequences for local and adjacent cells) */ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14],uint16_t Nid_cell); - -void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS); +void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS); void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_t Nid_cell, uint16_t n_rnti); diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index d8a13bbbfd..2a59407be3 100755 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -57,8 +57,8 @@ -static uint8_t d[3*(MAX_DCI_SIZE_BITS + 16) + 96]; -static uint8_t w[3*3*(MAX_DCI_SIZE_BITS+16)]; +//static uint8_t d[3*(MAX_DCI_SIZE_BITS + 16) + 96]; +//static uint8_t w[3*3*(MAX_DCI_SIZE_BITS+16)]; void dci_encoding(uint8_t *a, uint8_t A, @@ -70,6 +70,8 @@ void dci_encoding(uint8_t *a, uint8_t D = (A + 16); uint32_t RCC; + uint8_t d[3*(MAX_DCI_SIZE_BITS + 16) + 96]; + uint8_t w[3*3*(MAX_DCI_SIZE_BITS+16)]; #ifdef DEBUG_DCI_ENCODING int32_t i; @@ -169,7 +171,7 @@ uint8_t *generate_dci0(uint8_t *dci, return(e+coded_bits); } -uint32_t Y; +//uint32_t Y; @@ -368,16 +370,12 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols, if (dci_alloc[i].L == (uint8_t)L) { - #ifdef DEBUG_DCI_ENCODING - if (dci_alloc[i].rnti==0x1234) - LOG_D(PHY,"Generating DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x), rnti %x\n",i,num_dci,dci_alloc[i].firstCCE,dci_alloc[i].dci_length,dci_alloc[i].L, + LOG_D(PHY,"Generating DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x), rnti %x\n", + i,num_dci,dci_alloc[i].firstCCE,dci_alloc[i].dci_length,dci_alloc[i].L, *(unsigned int*)dci_alloc[i].dci_pdu, dci_alloc[i].rnti); - dump_dci(frame_parms,&dci_alloc[i]); - #endif if (dci_alloc[i].firstCCE>=0) { -//printf("generate DCI .%d rnti %d length %d\n", subframe, dci_alloc[i].rnti, dci_alloc[i].dci_length); e_ptr = generate_dci0(dci_alloc[i].dci_pdu, e+(72*dci_alloc[i].firstCCE), dci_alloc[i].dci_length, diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 048eb20068..c3a309a424 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -48,10 +48,10 @@ #include "dci_tools_common_extern.h" #include "transport_proto.h" -int8_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type) +int16_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type) { - uint8_t i; - int8_t first_free_index=-1; + uint16_t i; + int16_t first_free_index=-1; AssertFatal(eNB!=NULL,"eNB is null\n"); for (i=0; irnti_type == 2 ) && (rel8->rnti != SI_RNTI) && (rel8->rnti != P_RNTI)) dci_alloc->ra_flag = 1; UE_id = find_dlsch(rel8->rnti,eNB,SEARCH_EXIST_OR_FREE); - AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n"); - AssertFatal(UE_id= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX); + if( (UE_id<0) || (UE_id>=NUMBER_OF_UE_MAX) ){ + LOG_E(PHY,"illegal UE_id found!!! rnti %04x UE_id %d\n",rel8->rnti,UE_id); + return; + } + //AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n"); + //AssertFatal(UE_id= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX); dlsch0 = eNB->dlsch[UE_id][0]; dlsch1 = eNB->dlsch[UE_id][1]; @@ -298,7 +302,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t } dlsch0_harq->ndi = rel8->new_data_indicator_1; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif if (rel8->rnti_type == 2) dlsch0_harq->round = 0; @@ -475,10 +483,14 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t dlsch0_harq->mcs = rel8->mcs_1; dlsch0_harq->Qm = 2; dlsch0_harq->TBS = TBStable[I_mcs][NPRB-1]; - dlsch0->harq_ids[subframe] = rel8->harq_process; + dlsch0->harq_ids[frame%2][subframe] = rel8->harq_process; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif dlsch0->rnti = rel8->rnti; - dlsch0->harq_ids[subframe] = rel8->harq_process; + //dlsch0->harq_ids[subframe] = rel8->harq_process; if (dlsch0_harq->round == 0) dlsch0_harq->status = ACTIVE; @@ -490,7 +502,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t case NFAPI_DL_DCI_FORMAT_1: dci_alloc->format = format1; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif LOG_D(PHY,"SFN/SF:%04d%d proc:TX:SFN/SF:%04d%d: Programming DLSCH for Format 1 DCI, harq_pid %d\n",frame,subframe,proc->frame_tx,subframe,rel8->harq_process); @@ -635,7 +651,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t dlsch0_harq->dl_power_off = 1; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif @@ -651,7 +671,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t } LOG_D(PHY,"DCI: Set harq_ids[%d] to %d (%p)\n",subframe,rel8->harq_process,dlsch0); - dlsch0->harq_ids[subframe] = rel8->harq_process; + dlsch0->harq_ids[frame%2][subframe] = rel8->harq_process; dlsch0->harq_mask |= (1<harq_process); @@ -818,8 +838,8 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t dlsch0->subframe_tx[subframe] = 1; - dlsch0->harq_ids[subframe] = rel8->harq_process; - dlsch1->harq_ids[subframe] = rel8->harq_process; + dlsch0->harq_ids[frame%2][subframe] = rel8->harq_process; + dlsch1->harq_ids[frame%2][subframe] = rel8->harq_process; // printf("Setting DLSCH harq id %d to subframe %d\n",harq_pid,subframe); @@ -846,19 +866,32 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t // assume both TBs are active dlsch0_harq->Nl = 1; dlsch1_harq->Nl = 1; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; + dlsch1->active[subframe] = 1; +#else dlsch0->active = 1; dlsch1->active = 1; +#endif dlsch0->harq_mask |= (1<harq_process); dlsch1->harq_mask |= (1<harq_process); // check if either TB is disabled (see 36-213 V11.3 Section ) if ((dlsch0_harq->rvidx == 1) && (dlsch0_harq->mcs == 0)) { +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 0; +#else dlsch0->active = 0; +#endif dlsch0->harq_mask &= ~(1<harq_process); } if ((dlsch1_harq->rvidx == 1) && (dlsch1_harq->mcs == 0)) { +#ifdef PHY_TX_THREAD + dlsch1->active[subframe]= 0; +#else dlsch1->active = 0; +#endif dlsch1->harq_mask &= ~(1<harq_process); } @@ -870,8 +903,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1]; dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch0_harq->nb_rb-1]; +#ifdef PHY_TX_THREAD + if ((dlsch0->active[subframe]==1) && (dlsch1->active[subframe]==1)) { +#else if ((dlsch0->active==1) && (dlsch1->active==1)) { - +#endif dlsch0_harq->mimo_mode = LARGE_CDD; dlsch1_harq->mimo_mode = LARGE_CDD; dlsch0_harq->dl_power_off = 1; @@ -881,7 +917,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t dlsch1_harq->mimo_mode = ALAMOUTI; } } else if (fp->nb_antenna_ports_eNB == 4) { // 4 antenna case +#ifdef PHY_TX_THREAD + if ((dlsch0->active[subframe]==1) && (dlsch1->active[subframe]==1)) { +#else if ((dlsch0->active==1) && (dlsch1->active==1)) { +#endif switch (rel8->precoding_information) { case 0: // one layer per transport block dlsch0_harq->mimo_mode = LARGE_CDD; @@ -921,7 +961,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t LOG_E(PHY,"Illegal value (3) for TPMI in Format 2A DCI\n"); break; } +#ifdef PHY_TX_THREAD + } else if (dlsch0->active[subframe] == 1) { +#else } else if (dlsch0->active == 1) { +#endif switch (rel8->precoding_information) { case 0: // one layer per transport block dlsch0_harq->mimo_mode = ALAMOUTI; @@ -941,7 +985,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t LOG_E(PHY,"Illegal value %d for TPMI in Format 2A DCI with one transport block enabled\n",rel8->precoding_information); break; } +#ifdef PHY_TX_THREAD + } else if (dlsch1->active[subframe] == 1) { +#else } else if (dlsch1->active == 1) { +#endif switch (rel8->precoding_information) { case 0: // one layer per transport block dlsch0_harq->mimo_mode = ALAMOUTI; @@ -967,10 +1015,18 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t } // reset HARQ process if this is the first transmission +#ifdef PHY_TX_THREAD + if ((dlsch0->active[subframe]==1) && (dlsch0_harq->round == 0)) +#else if ((dlsch0->active==1) && (dlsch0_harq->round == 0)) +#endif dlsch0_harq->status = ACTIVE; +#ifdef PHY_TX_THREAD + if ((dlsch1->active[subframe]==1) && (dlsch1_harq->round == 0)) +#else if ((dlsch1->active==1) && (dlsch1_harq->round == 0)) +#endif dlsch1_harq->status = ACTIVE; dlsch0->rnti = rel8->rnti; @@ -1144,8 +1200,13 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t printf("RV0 = %d, RV1 = %d. MCS0 = %d, MCS1=%d\n", rel8->redundancy_version_1, rel8->redundancy_version_2, rel8->mcs_1, rel8->mcs_2); #endif if (TB0_active && TB1_active && rel8->transport_block_to_codeword_swap_flag==0) { +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; + dlsch1->active[subframe] = 1; +#else dlsch0->active = 1; dlsch1->active = 1; +#endif dlsch0->harq_mask |= (1<harq_process); dlsch1->harq_mask |= (1<harq_process); dlsch0_harq = dlsch0->harq_processes[rel8->harq_process]; @@ -1167,8 +1228,13 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t else if (TB0_active && TB1_active && rel8->transport_block_to_codeword_swap_flag==1) { dlsch0 = eNB->dlsch[UE_id][1]; dlsch1 = eNB->dlsch[UE_id][0]; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; + dlsch1->active[subframe] = 1; +#else dlsch0->active = 1; dlsch1->active = 1; +#endif dlsch0->harq_mask |= (1<harq_process); dlsch1->harq_mask |= (1<harq_process); @@ -1186,7 +1252,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t dlsch1_harq->codeword=0; } else if (TB0_active && (TB1_active==0)) { +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif dlsch0->harq_mask |= (1<harq_process); dlsch0_harq = dlsch0->harq_processes[rel8->harq_process]; dlsch0_harq->mcs = rel8->mcs_1; @@ -1201,7 +1271,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t #endif } else if ((TB0_active==0) && TB1_active) { +#ifdef PHY_TX_THREAD + dlsch1->active[subframe] = 1; +#else dlsch1->active = 1; +#endif dlsch1->harq_mask |= (1<harq_process); dlsch1_harq = dlsch1->harq_processes[rel8->harq_process]; dlsch1_harq->mcs = rel8->mcs_2; @@ -1219,11 +1293,11 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t if (dlsch0 != NULL){ dlsch0->subframe_tx[subframe] = 1; - dlsch0->harq_ids[subframe] = rel8->harq_process; + dlsch0->harq_ids[frame%2][subframe] = rel8->harq_process; } if (dlsch1_harq != NULL){ - dlsch1->harq_ids[subframe] = rel8->harq_process; + dlsch1->harq_ids[frame%2][subframe] = rel8->harq_process; } @@ -1434,6 +1508,7 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d LTE_DL_eNB_HARQ_t *dlsch0_harq=NULL; int UE_id; int subframe = proc->subframe_tx; + int frame = proc->frame_tx; dci_alloc->firstCCE = rel13->ecce_index; dci_alloc->L = rel13->aggregation_level; @@ -1452,8 +1527,12 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d if (rel13->rnti_type == 2 ) dci_alloc->ra_flag = 1; UE_id = find_dlsch(rel13->rnti,eNB,SEARCH_EXIST_OR_FREE); - AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n"); - AssertFatal(UE_id= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX); + if( (UE_id<0) || (UE_id>=NUMBER_OF_UE_MAX) ){ + LOG_E(PHY,"illegal UE_id found!!! rnti %04x UE_id %d\n",rel13->rnti,UE_id); + return; + } + //AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n"); + //AssertFatal(UE_id= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX); dlsch0 = eNB->dlsch[UE_id][0]; dlsch0_harq = dlsch0->harq_processes[rel13->harq_process]; @@ -1465,7 +1544,11 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d case 10: // Format 6-1A dci_alloc->format = format6_1A; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif switch (fp->N_RB_DL) { case 25: @@ -1521,7 +1604,11 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d break; case 11: // Format 6-1B dci_alloc->format = format6_1B; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif switch (fp->N_RB_DL) { case 25: @@ -1564,7 +1651,11 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d } case 12: // Format 6-2 dci_alloc->format = format6_2; +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif switch (fp->N_RB_DL) { case 25: dci_alloc->dci_length = sizeof_DCI6_2_5MHz_t; @@ -1647,8 +1738,12 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d //LOG_E(PHY,"Invalid beamforming mode %dL\n", beamforming_mode); dlsch0_harq->dl_power_off = 1; - + +#ifdef PHY_TX_THREAD + dlsch0->active[subframe] = 1; +#else dlsch0->active = 1; +#endif dlsch0->harq_mask |= (1<harq_process); @@ -1661,7 +1756,7 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d } - dlsch0->harq_ids[subframe] = rel13->harq_process; + dlsch0->harq_ids[frame%2][subframe] = rel13->harq_process; @@ -1692,6 +1787,8 @@ void fill_dci0(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, uint32_t ndi = pdu->dci_pdu_rel8.new_data_indication_1; + uint16_t UE_id = -1; + #ifdef T_TRACER T(T_ENB_PHY_ULSCH_UE_DCI, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(pdu->dci_pdu_rel8.rnti), T_INT(((frame*10+subframe+4) % 8) /* TODO: correct harq pid */), @@ -1837,16 +1934,23 @@ void fill_dci0(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, DevParam (frame_parms->N_RB_DL, 0, 0); break; } + + if(frame_parms->frame_type == TDD){ + UE_id = find_ulsch(pdu->dci_pdu_rel8.rnti, eNB,SEARCH_EXIST_OR_FREE); + if(UE_id != -1){ + eNB->ulsch[UE_id]->harq_processes[pdu->dci_pdu_rel8.harq_pid]->V_UL_DAI = dai +1; + } + } } -void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame,int subframe) +void fill_ulsch(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame,int subframe) { uint8_t harq_pid; - uint8_t UE_id; + //uint8_t UE_id; boolean_t new_ulsch = (find_ulsch(ulsch_pdu->ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST)==-1) ? TRUE : FALSE; - AssertFatal((UE_id=find_ulsch(ulsch_pdu->ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE))>=0, - "No existing/free UE ULSCH for rnti %x\n",ulsch_pdu->ulsch_pdu_rel8.rnti); + //AssertFatal((UE_id=find_ulsch(ulsch_pdu->ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE))>=0, + // "No existing/free UE ULSCH for rnti %x\n",ulsch_pdu->ulsch_pdu_rel8.rnti); LTE_eNB_ULSCH_t *ulsch=eNB->ulsch[UE_id]; LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms; @@ -1864,7 +1968,10 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame ulsch->harq_processes[harq_pid]->first_rb = ulsch_pdu->ulsch_pdu_rel8.resource_block_start; ulsch->harq_processes[harq_pid]->nb_rb = ulsch_pdu->ulsch_pdu_rel8.number_of_resource_blocks; - AssertFatal(ulsch->harq_processes[harq_pid]->nb_rb>0,"nb_rb = 0\n"); + //AssertFatal(ulsch->harq_processes[harq_pid]->nb_rb>0,"nb_rb = 0\n"); + if(ulsch->harq_processes[harq_pid]->nb_rb == 0){ + LOG_E(PHY, "fill_ulsch UE_id %d nb_rb = 0\n", UE_id); + } ulsch->harq_processes[harq_pid]->dci_alloc = 1; ulsch->harq_processes[harq_pid]->rar_alloc = 0; @@ -1891,14 +1998,16 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame else if(ulsch->harq_processes[harq_pid]->n_DMRS == 7) ulsch->harq_processes[harq_pid]->n_DMRS2 = 9; - LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d, Subframe %d Programming PUSCH with n_DMRS2 %d (cshift %d) ulsch:ndi:%d ulsch_pdu:ndi:%d new_ulsch:%d status:%d ulsch_pdu:rvidx:%d\n", + LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d, Subframe %d Programming PUSCH with n_DMRS2 %d (cshift %d) ulsch:ndi:%d ulsch_pdu:ndi:%d new_ulsch:%d status:%d ulsch_pdu:rvidx:%d ulsch_pdu->ulsch_pdu_rel8.size %d\n", eNB->Mod_id,harq_pid,frame,subframe, ulsch->harq_processes[harq_pid]->n_DMRS2, ulsch->harq_processes[harq_pid]->n_DMRS, ulsch->harq_processes[harq_pid]->ndi, ulsch_pdu->ulsch_pdu_rel8.new_data_indication, new_ulsch, ulsch->harq_processes[harq_pid]->status, - ulsch_pdu->ulsch_pdu_rel8.redundancy_version); + ulsch_pdu->ulsch_pdu_rel8.redundancy_version, + ulsch_pdu->ulsch_pdu_rel8.size); ulsch->harq_processes[harq_pid]->rvidx = ulsch_pdu->ulsch_pdu_rel8.redundancy_version; + if(ulsch_pdu->ulsch_pdu_rel8.modulation_type!=0) ulsch->harq_processes[harq_pid]->Qm = ulsch_pdu->ulsch_pdu_rel8.modulation_type; // Set O_ACK to 0 by default, will be set of DLSCH is scheduled and needs to be ulsch->harq_processes[harq_pid]->O_ACK = 0; @@ -1919,9 +2028,12 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame // will be set if MAC has activated ULSCH_CQI_RI_PDU or ULSCH_CQI_HARQ_RI_PDU ulsch->harq_processes[harq_pid]->Or1 = 0; ulsch->harq_processes[harq_pid]->Or2 = 0; - } - else ulsch->harq_processes[harq_pid]->round++; - + } + else { + ulsch->harq_processes[harq_pid]->round++; + ulsch->harq_processes[harq_pid]->TBS = ulsch_pdu->ulsch_pdu_rel8.size<<3; + ulsch->harq_processes[harq_pid]->Msc_initial = 12*ulsch_pdu->ulsch_pdu_rel8.number_of_resource_blocks; + } ulsch->rnti = ulsch_pdu->ulsch_pdu_rel8.rnti; LOG_D(PHY,"Filling ULSCH %x (UE_id %d) (new_ulsch %d) for Frame %d, Subframe %d : harq_pid %d, status %d, handled %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d \n", ulsch->rnti, diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c index 8f0f8a6cab..9a1aa279b0 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c @@ -165,49 +165,6 @@ int8_t delta_PUSCH_acc[4] = {-1,0,1,3}; int8_t *delta_PUCCH_lut = delta_PUSCH_acc; -uint8_t get_pmi(uint8_t N_RB_DL, MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb) -{ - /* - MIMO_mode_t mode = dlsch_harq->mimo_mode; - uint32_t pmi_alloc = dlsch_harq->pmi_alloc; - */ - - switch (N_RB_DL) { - case 6: // 1 PRB per subband - if (mode <= PUSCH_PRECODING1) - return((pmi_alloc>>(rb<<1))&3); - else - return((pmi_alloc>>rb)&1); - - break; - - default: - case 25: // 4 PRBs per subband - if (mode <= PUSCH_PRECODING1) - return((pmi_alloc>>((rb>>2)<<1))&3); - else - return((pmi_alloc>>(rb>>2))&1); - - break; - - case 50: // 6 PRBs per subband - if (mode <= PUSCH_PRECODING1) - return((pmi_alloc>>((rb/6)<<1))&3); - else - return((pmi_alloc>>(rb/6))&1); - - break; - - case 100: // 8 PRBs per subband - if (mode <= PUSCH_PRECODING1) - return((pmi_alloc>>((rb>>3)<<1))&3); - else - return((pmi_alloc>>(rb>>3))&1); - - break; - } -} - uint32_t check_phich_reg(LTE_DL_FRAME_PARMS *frame_parms,uint32_t kprime,uint8_t lprime,uint8_t mi) { @@ -330,7 +287,7 @@ void conv_eMTC_rballoc(uint16_t resource_block_coding, uint32_t N_RB_DL, uint32_t *rb_alloc) { - + int narrowband = resource_block_coding>>5; int RIV = resource_block_coding&31; int N_NB_DL = N_RB_DL/6; @@ -346,7 +303,7 @@ void conv_eMTC_rballoc(uint16_t resource_block_coding, rb_alloc[2] = 0; rb_alloc[3] = 0; rb_alloc[ind] = alloc< 26) rb_alloc[ind+1] = alloc>>(6-(ind_mod-26)); + if (ind_mod > 26) rb_alloc[ind+1] = alloc>>(6-(ind_mod-26)); } void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t *rb_alloc2) @@ -410,7 +367,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t // bit mask across if ((rb_alloc2[0]>>31)==1) rb_alloc2[1] |= 1; - + if ((rb_alloc&1) != 0) rb_alloc2[1] |= (3<<16); break; @@ -420,7 +377,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t for (i=0; i<25; i++) { if ((rb_alloc&(1<<(24-i))) != 0) rb_alloc2[(4*i)>>5] |= (0xf<<((4*i)%32)); - + // printf("rb_alloc2[%d] (type 0) %x (%d)\n",(4*i)>>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<tdd_config) { - case 1: - if ((subframe==2) || - (subframe==3) || - (subframe==7) || - (subframe==8)) - switch (subframe) { - case 2: - case 3: - ret = (subframe-2); - break; + switch (subframe) { + case 2: + case 3: + ret = (subframe-2); + break; - case 7: - case 8: - ret = (subframe-5); - break; + case 7: + case 8: + ret = (subframe-5); + break; - default: - LOG_E(PHY,"subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframe,frame_parms->tdd_config); - ret = (255); - break; - } + default: + LOG_E(PHY,"subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframe,frame_parms->tdd_config); + ret = (255); + break; + } break; @@ -1052,10 +1004,13 @@ uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n) uint8_t ul_subframe = 255; if ((frame_parms->frame_type == TDD) && - (frame_parms->tdd_config == 1) && - ((n==1)||(n==6))) // tdd_config 0,1 SF 1,5 - ul_subframe = ((n+6)%10); - else if ((frame_parms->frame_type == TDD) && + (frame_parms->tdd_config == 1)) { + if ((n==1)||(n==6)) { // tdd_config 0,1 SF 1,5 + ul_subframe = ((n+6)%10); + } else if ((n==4)||(n==9)) { + ul_subframe = ((n+4)%10); + } + } else if ((frame_parms->frame_type == TDD) && (frame_parms->tdd_config == 6) && ((n==0)||(n==1)||(n==5)||(n==6))) ul_subframe = ((n+7)%10); @@ -1063,10 +1018,10 @@ uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n) (frame_parms->tdd_config == 6) && (n==9)) // tdd_config 6 SF 9 ul_subframe = ((n+5)%10); - else + else ul_subframe = ((n+4)%10); - AssertFatal(frame_parms->frame_type == FDD || subframe_select(frame_parms,ul_subframe) == SF_UL,"illegal ul_subframe %d (n %d)\n",ul_subframe,n); + if ( (subframe_select(frame_parms,ul_subframe) != SF_UL) && (frame_parms->frame_type == TDD)) return(255); LOG_D(PHY, "subframe %d: PUSCH subframe = %d\n", n, ul_subframe); return ul_subframe; @@ -1075,10 +1030,13 @@ uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n) uint8_t ul_subframe2pdcch_alloc_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n) { if ((frame_parms->frame_type == TDD) && - (frame_parms->tdd_config == 1) && - ((n==7)||(n==2))) // tdd_config 0,1 SF 1,5 - return((n==7)? 1 : 6); - else if ((frame_parms->frame_type == TDD) && + (frame_parms->tdd_config == 1)) { + if ((n==7)||(n==2)) { // tdd_config 0,1 SF 1,5 + return((n==7)? 1 : 6); + } else if ((n==3)||(n==8)) { + return((n==3)? 9 : 4); + } + } else if ((frame_parms->frame_type == TDD) && (frame_parms->tdd_config == 6) && ((n==7)||(n==8)||(n==2)||(n==3))) return((n+3)%10); @@ -1088,6 +1046,9 @@ uint8_t ul_subframe2pdcch_alloc_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t return(9); else return((n+6)%10); + + LOG_E(PHY, "%s %s:%i pdcch allocation error\n",__FUNCTION__,__FILE__,__LINE__); + return 0; } uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t n) @@ -1096,9 +1057,9 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui if ((frame_parms->frame_type == TDD) && (frame_parms->tdd_config == 1) && - ((n==1)||(n==6))) // tdd_config 0,1 SF 1,5 - ul_frame = (frame + (n==1 ? 0 : 1)); - else if ((frame_parms->frame_type == TDD) && + ((n==1)||(n==6)||(n==4)||(n==9))) { // tdd_config 0,1 SF 1,5 + ul_frame = (frame + (n < 5 ? 0 : 1)); + } else if ((frame_parms->frame_type == TDD) && (frame_parms->tdd_config == 6) && ((n==0)||(n==1)||(n==5)||(n==6))) ul_frame = (frame + (n>=5 ? 1 : 0)); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 4309815ad2..6a7bc46708 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -148,8 +148,8 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_ }*/ - for (i=0; i<10; i++) - dlsch->harq_ids[i] = Mdlharq; + for (i=0; i<20; i++) + dlsch->harq_ids[i/10][i%10] = Mdlharq; for (i=0; iharq_processes[i] = (LTE_DL_eNB_HARQ_t *)malloc16(sizeof(LTE_DL_eNB_HARQ_t)); @@ -227,11 +227,16 @@ void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch) if (dlsch) { Mdlharq = dlsch->Mdlharq; dlsch->rnti = 0; +#ifdef PHY_TX_THREAD + for (i=0; i<10; i++) + dlsch->active[i] = 0; +#else dlsch->active = 0; +#endif dlsch->harq_mask = 0; - for (i=0; i<10; i++) - dlsch->harq_ids[i] = Mdlharq; + for (i=0; i<20; i++) + dlsch->harq_ids[i/10][i%10] = Mdlharq; for (i=0; iharq_processes[i]) { @@ -260,8 +265,6 @@ int dlsch_encoding_2threads0(te_params *tep) { unsigned int total_worker = tep->total_worker; unsigned int current_worker = tep->current_worker; - unsigned short iind; - unsigned short nb_rb = dlsch->harq_processes[harq_pid]->nb_rb; unsigned int Kr=0,Kr_bytes,r,r_offset=0; // unsigned short m=dlsch->harq_processes[harq_pid]->mcs; @@ -280,28 +283,10 @@ int dlsch_encoding_2threads0(te_params *tep) { Kr_bytes = Kr>>3; - // get interleaver index for Turbo code (lookup in Table 5.1.3-3 36-212, V8.6 2009-03, p. 13-14) - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - printf("dlsch_coding: Illegal codeword size %d!!!\n",Kr_bytes); - return(-1); - } - - - encoder(dlsch->harq_processes[harq_pid]->c[r], Kr>>3, &dlsch->harq_processes[harq_pid]->d[r][96], - (r==0) ? dlsch->harq_processes[harq_pid]->F : 0, - f1f2mat_old[iind*2], // f1 (see 36121-820, page 14) - f1f2mat_old[(iind*2)+1] // f2 (see 36121-820, page 14) + (r==0) ? dlsch->harq_processes[harq_pid]->F : 0 ); dlsch->harq_processes[harq_pid]->RTC[r] = sub_block_interleaving_turbo(4+(Kr_bytes*8), @@ -411,9 +396,12 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, eNB_proc_t *proc = &eNB->proc; unsigned int G; unsigned int crc=1; - unsigned short iind; - unsigned char harq_pid = dlsch->harq_ids[subframe]; + unsigned char harq_pid = dlsch->harq_ids[frame%2][subframe]; + if(harq_pid >= dlsch->Mdlharq) { + LOG_E(PHY,"dlsch_encoding_2threads illegal harq_pid %d\n", harq_pid); + return(-1); + } unsigned short nb_rb = dlsch->harq_processes[harq_pid]->nb_rb; unsigned int A; unsigned char mod_order; @@ -496,28 +484,11 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB, Kr_bytes = Kr>>3; - // get interleaver index for Turbo code (lookup in Table 5.1.3-3 36-212, V8.6 2009-03, p. 13-14) - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - printf("dlsch_coding: Illegal codeword size %d!!!\n",Kr_bytes); - return(-1); - } - - start_meas(te_stats); encoder(dlsch->harq_processes[harq_pid]->c[r], Kr>>3, &dlsch->harq_processes[harq_pid]->d[r][96], - (r==0) ? dlsch->harq_processes[harq_pid]->F : 0, - f1f2mat_old[iind*2], // f1 (see 36121-820, page 14) - f1f2mat_old[(iind*2)+1] // f2 (see 36121-820, page 14) + (r==0) ? dlsch->harq_processes[harq_pid]->F : 0 ); stop_meas(te_stats); @@ -628,7 +599,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, { int encoding_return = 0; unsigned int L,C,B; - B = dlsch->harq_processes[dlsch->harq_ids[subframe]]->B; + B = dlsch->harq_processes[dlsch->harq_ids[frame%2][subframe]]->B; if(B<=6144) { L=0; @@ -643,7 +614,6 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, C = C+1; } } -//LOG_I(PHY,"segmentation number C = %d\n", C);////////////********added if(C >= 8 && get_nprocs()>=16 && codingw)//one main three worker { @@ -729,10 +699,13 @@ int dlsch_encoding(PHY_VARS_eNB *eNB, unsigned int G; unsigned int crc=1; - unsigned short iind; LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms; - unsigned char harq_pid = dlsch->harq_ids[subframe]; + unsigned char harq_pid = dlsch->harq_ids[frame%2][subframe]; + if(harq_pid >= dlsch->Mdlharq) { + LOG_E(PHY,"dlsch_encoding illegal harq_pid %d\n", harq_pid); + return(-1); + } unsigned short nb_rb = dlsch->harq_processes[harq_pid]->nb_rb; unsigned int A; unsigned char mod_order; @@ -800,21 +773,6 @@ int dlsch_encoding(PHY_VARS_eNB *eNB, Kr_bytes = Kr>>3; - // get interleaver index for Turbo code (lookup in Table 5.1.3-3 36-212, V8.6 2009-03, p. 13-14) - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - printf("dlsch_coding: Illegal codeword size %d!!!\n",Kr_bytes); - return(-1); - } - - #ifdef DEBUG_DLSCH_CODING printf("Generating Code Segment %d (%d bits)\n",r,Kr); // generate codewords @@ -826,22 +784,17 @@ int dlsch_encoding(PHY_VARS_eNB *eNB, #endif -#ifdef DEBUG_DLSCH_CODING - printf("Encoding ... iind %d f1 %d, f2 %d\n",iind,f1f2mat_old[iind*2],f1f2mat_old[(iind*2)+1]); -#endif start_meas(te_stats); encoder(dlsch->harq_processes[harq_pid]->c[r], Kr>>3, &dlsch->harq_processes[harq_pid]->d[r][96], - (r==0) ? dlsch->harq_processes[harq_pid]->F : 0, - f1f2mat_old[iind*2], // f1 (see 36121-820, page 14) - f1f2mat_old[(iind*2)+1] // f2 (see 36121-820, page 14) + (r==0) ? dlsch->harq_processes[harq_pid]->F : 0 ); stop_meas(te_stats); #ifdef DEBUG_DLSCH_CODING if (r==0) - write_output("enc_output0.m","enc0",&dlsch->harq_processes[harq_pid]->d[r][96],(3*8*Kr_bytes)+12,1,4); + LOG_M("enc_output0.m","enc0",&dlsch->harq_processes[harq_pid]->d[r][96],(3*8*Kr_bytes)+12,1,4); #endif start_meas(i_stats); @@ -888,7 +841,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB, #ifdef DEBUG_DLSCH_CODING if (r==dlsch->harq_processes[harq_pid]->C-1) - write_output("enc_output.m","enc",dlsch->harq_processes[harq_pid]->e,r_offset,1,4); + LOG_M("enc_output.m","enc",dlsch->harq_processes[harq_pid]->e,r_offset,1,4); #endif } diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 13a7f0aa32..8f3cd9dba3 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -37,9 +37,9 @@ #include "PHY/LTE_TRANSPORT/transport_eNB.h" #include "UTIL/LOG/vcd_signal_dumper.h" #include "PHY/LTE_TRANSPORT/transport_proto.h" - +#include "PHY/LTE_TRANSPORT/transport_common_proto.h" //#define DEBUG_DLSCH_MODULATION -#define NEW_ALLOC_RE +//#define NEW_ALLOC_RE //#define is_not_pilot(pilots,re,nushift,use2ndpilots) ((pilots==0) || ((re!=nushift) && (re!=nushift+6)&&((re!=nushift+3)||(use2ndpilots==1))&&((re!=nushift+9)||(use2ndpilots==1)))?1:0) @@ -706,6 +706,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB, int *P2_SHIFT) { + uint8_t *x0 = NULL; MIMO_mode_t mimo_mode = -1; @@ -714,8 +715,8 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB, int first_layer0 = -1; //= dlsch0_harq->first_layer; int Nlayers0 = -1; // = dlsch0_harq->Nlayers; - uint8_t mod_order0=0; - uint8_t mod_order1=0; + uint8_t mod_order0=0; + uint8_t mod_order1=0; uint8_t precoder_index0,precoder_index1; uint8_t *x1=NULL; @@ -2077,6 +2078,7 @@ inline int check_skip_dc(int rb,LTE_DL_FRAME_PARMS *frame_parms) { int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, int32_t **txdataF, int16_t amp, + int frame, uint32_t subframe_offset, uint8_t num_pdcch_symbols, LTE_eNB_DLSCH_t *dlsch0, @@ -2102,8 +2104,6 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8],qpsk_table_a1[2],qpsk_table_b1[2]; int16_t *qam_table_s0=NULL,*qam_table_s1=NULL; -#ifdef NEW_ALLOC_RE - /* TODO: variable to be removed? */ int (*allocate_REs)(PHY_VARS_eNB*, int **, uint32_t*, @@ -2125,7 +2125,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, uint8_t, int *, int *); -#endif + int P1_SHIFT[13],P2_SHIFT[13]; int offset,nushiftmod3; @@ -2149,7 +2149,11 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, if ((dlsch0 != NULL) && (dlsch1 != NULL)){ - harq_pid = dlsch0->harq_ids[subframe_offset]; + harq_pid = dlsch0->harq_ids[frame%2][subframe_offset]; + if(harq_pid >= dlsch0->Mdlharq) { + LOG_E(PHY,"illegal harq_pid %d\n", harq_pid); + return(-1); + } dlsch0_harq = dlsch0->harq_processes[harq_pid]; mimo_mode = dlsch0_harq->mimo_mode; mod_order0 = dlsch0_harq->Qm; @@ -2166,7 +2170,11 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, }else if ((dlsch0 != NULL) && (dlsch1 == NULL)){ - harq_pid = dlsch0->harq_ids[subframe_offset]; + harq_pid = dlsch0->harq_ids[frame%2][subframe_offset]; + if(harq_pid >= dlsch0->Mdlharq) { + LOG_E(PHY,"illegal harq_pid %d\n", harq_pid); + return(-1); + } dlsch0_harq = dlsch0->harq_processes[harq_pid]; mimo_mode = dlsch0_harq->mimo_mode; mod_order0 = dlsch0_harq->Qm; @@ -2183,7 +2191,11 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, }else if ((dlsch0 == NULL) && (dlsch1 != NULL)){ - harq_pid = dlsch1->harq_ids[subframe_offset]; + harq_pid = dlsch1->harq_ids[frame%2][subframe_offset]; + if(harq_pid >= dlsch1->Mdlharq) { + LOG_E(PHY,"illegal harq_pid %d\n", harq_pid); + return(-1); + } dlsch1_harq = dlsch1->harq_processes[harq_pid]; mimo_mode = dlsch1_harq->mimo_mode; mod_order0 = dlsch1_harq->Qm; @@ -2359,53 +2371,36 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, re_offset = frame_parms->first_carrier_offset; symbol_offset = (uint32_t)frame_parms->ofdm_symbol_size*(l+(subframe_offset*nsymb)); - -#ifdef NEW_ALLOC_RE - /* TODO: remove this code? */ allocate_REs = allocate_REs_in_RB; -#endif switch (mod_order0) { case 2: qam_table_s0 = NULL; if (pilots) { qam_table_s0 = qpsk_table_b0; -#ifdef NEW_ALLOC_RE - // TODO: remove this code? // allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ? allocate_REs_in_RB_pilots_QPSK_siso : allocate_REs_in_RB; -#endif } else { qam_table_s0 = qpsk_table_a0; -#ifdef NEW_ALLOC_RE - // TODO: remove this code? // allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ? allocate_REs_in_RB_no_pilots_QPSK_siso : allocate_REs_in_RB; -#endif - } break; case 4: if (pilots) { qam_table_s0 = qam16_table_b0; -#ifdef NEW_ALLOC_RE - /* TODO: remove this code? */ allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ? allocate_REs_in_RB_pilots_16QAM_siso : allocate_REs_in_RB; -#endif } else { qam_table_s0 = qam16_table_a0; -#ifdef NEW_ALLOC_RE - /* TODO: remove this code? */ allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ? allocate_REs_in_RB_no_pilots_16QAM_siso : allocate_REs_in_RB; -#endif } break; @@ -2413,21 +2408,15 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, case 6: if (pilots) { qam_table_s0 = qam64_table_b0; -#ifdef NEW_ALLOC_RE - /* TODO: remove this code? */ allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ? allocate_REs_in_RB_pilots_64QAM_siso : allocate_REs_in_RB; -#endif } else { qam_table_s0 = qam64_table_a0; -#ifdef NEW_ALLOC_RE - /* TODO: remove this code? */ allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ? allocate_REs_in_RB_no_pilots_64QAM_siso : allocate_REs_in_RB; -#endif } break; @@ -2436,10 +2425,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, switch (mod_order1) { case 2: qam_table_s1 = NULL; -#ifdef NEW_ALLOC_RE - /* TODO: remove this code? */ allocate_REs = allocate_REs_in_RB; -#endif if (pilots) { qam_table_s1 = qpsk_table_b1; } diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c b/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c index c1f80c40a4..f582021fca 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c @@ -34,47 +34,20 @@ #include "PHY/defs_eNB.h" #include "PHY/defs_UE.h" +#include "PHY/LTE_REFSIG/lte_refsig.h" #include "PHY/CODING/coding_extern.h" #include "PHY/CODING/lte_interleaver_inline.h" #include "transport_eNB.h" #include "PHY/phy_extern.h" #include "UTIL/LOG/vcd_signal_dumper.h" -static inline unsigned int lte_gold_scram(unsigned int *x1, unsigned int *x2, unsigned char reset) __attribute__((always_inline)); -static inline unsigned int lte_gold_scram(unsigned int *x1, unsigned int *x2, unsigned char reset) -{ - int n; - - if (reset) { - *x1 = 1+ (1<<31); - *x2=*x2 ^ ((*x2 ^ (*x2>>1) ^ (*x2>>2) ^ (*x2>>3))<<31); - - // skip first 50 double words (1600 bits) - // printf("n=0 : x1 %x, x2 %x\n",x1,x2); - for (n=1; n<50; n++) { - *x1 = (*x1>>1) ^ (*x1>>4); - *x1 = *x1 ^ (*x1<<31) ^ (*x1<<28); - *x2 = (*x2>>1) ^ (*x2>>2) ^ (*x2>>3) ^ (*x2>>4); - *x2 = *x2 ^ (*x2<<31) ^ (*x2<<30) ^ (*x2<<29) ^ (*x2<<28); - } - } - - *x1 = (*x1>>1) ^ (*x1>>4); - *x1 = *x1 ^ (*x1<<31) ^ (*x1<<28); - *x2 = (*x2>>1) ^ (*x2>>2) ^ (*x2>>3) ^ (*x2>>4); - *x2 = *x2 ^ (*x2<<31) ^ (*x2<<30) ^ (*x2<<29) ^ (*x2<<28); - return(*x1^*x2); - // printf("n=%d : c %x\n",n,x1^x2); - -} - void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, int mbsfn_flag, LTE_eNB_DLSCH_t *dlsch, - int harq_pid, + int harq_pid, int G, uint8_t q, - uint16_t frame, + uint16_t frame, uint8_t Ns) { @@ -92,13 +65,27 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, uint8_t Nacc=4; uint16_t j0,j,idelta; uint16_t i = (Ns>>1) + (10*frame); +#ifdef PHY_TX_THREAD + uint16_t i0 = dlsch->harq_processes[harq_pid]->i0; +#else uint16_t i0 = dlsch->i0; +#endif +#ifdef PHY_TX_THREAD + if (dlsch->harq_processes[harq_pid]->sib1_br_flag==1) Nacc=1; +#else if (dlsch->sib1_br_flag==1) Nacc=1; +#endif else if (dlsch->rnti == 0xFFFF || dlsch->rnti == 0xFFFE) Nacc = (frame_parms->frame_type == TDD) ? 10 : 4; +#ifdef PHY_TX_THREAD + // Note: above SC-RNTI will also have to be added when/if implemented + else if (dlsch->harq_processes[harq_pid]->CEmode == CEmodeA) Nacc=1; + else if (dlsch->harq_processes[harq_pid]->CEmode == CEmodeB) Nacc = (frame_parms->frame_type == TDD) ? 10 : 4; +#else // Note: above SC-RNTI will also have to be added when/if implemented else if (dlsch->CEmode == CEmodeA) Nacc=1; else if (dlsch->CEmode == CEmodeB) Nacc = (frame_parms->frame_type == TDD) ? 10 : 4; +#endif if (frame_parms->frame_type == FDD || Nacc == 1) idelta = 0; else idelta = Nacc-2; @@ -111,7 +98,11 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, // x1 is set in lte_gold_generic if (mbsfn_flag == 0) { #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) +#ifdef PHY_TX_THREAD + if (dlsch->harq_processes[harq_pid]->i0 != 0xFFFF) { +#else if (dlsch->i0 != 0xFFFF) { +#endif // rule for BL/CE UEs from Section 6.3.1 in 36.211 x2= (dlsch->rnti<<14) + (q<<13) + ((((j0+j)*Nacc)%10)<<9) + frame_parms->Nid_cell; if ((frame&1023) < 200) LOG_D(PHY,"Scrambling init for (i0 %d, i %d, j0 %d, j %d, Nacc %d) => x2 %d\n",i0,i,j0,j,Nacc,x2); @@ -130,7 +121,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, printf("scrambling: rnti %x, q %d, Ns %d, Nid_cell %d, G %d x2 %x\n",dlsch->rnti,q,Ns,frame_parms->Nid_cell, G, x2); #endif #endif - s = lte_gold_scram(&x1, &x2, 1); + s = lte_gold_generic(&x1, &x2, 1); for (n=0; n<(1+(G>>5)); n++) { @@ -179,7 +170,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, - s = lte_gold_scram(&x1, &x2, 0); + s = lte_gold_generic(&x1, &x2, 0); e += 32; } @@ -225,7 +216,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms, #ifdef DEBUG_SCRAMBLING printf("unscrambling: rnti %x, q %d, Ns %d, Nid_cell %d G %d, x2 %x\n",dlsch->rnti,q,Ns,frame_parms->Nid_cell,G,x2); #endif - s = lte_gold_scram(&x1, &x2, 1); + s = lte_gold_generic(&x1, &x2, 1); for (i=0; i<(1+(G>>5)); i++) { for (j=0; j<32; j++,k++) { @@ -238,7 +229,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms, #endif } - s = lte_gold_scram(&x1, &x2, 0); + s = lte_gold_generic(&x1, &x2, 0); } } diff --git a/openair1/PHY/LTE_TRANSPORT/if5_tools.c b/openair1/PHY/LTE_TRANSPORT/if5_tools.c index 06b4a4ad80..0ad1381205 100644 --- a/openair1/PHY/LTE_TRANSPORT/if5_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/if5_tools.c @@ -297,7 +297,7 @@ void send_IF5(RU_t *ru, openair0_timestamp proc_timestamp, int subframe, uint8_t #ifdef DEBUG_DL_MOBIPASS if(subframe==0) { if (dummy_cnt==100) { - write_output("txsigmb.m","txs",(void*)dummy_buffer, fp->samples_per_tti,1, 5); + LOG_M("txsigmb.m","txs",(void*)dummy_buffer, fp->samples_per_tti,1, 5); exit(-1); } else { dummy_cnt++; @@ -601,7 +601,7 @@ void recv_IF5(RU_t *ru, openair0_timestamp *proc_timestamp, int subframe, uint16 if (rxe > 0){ LOG_I(PHY,"[Mobipass] frame:%d, subframe:%d, energy %d\n", (*proc_timestamp/(10*fp->samples_per_tti))&1023,subframe, rxe); - // write_output("rxsigmb.m","rxs",(void*)dummy_buffer_rx, fp->samples_per_tti,1, 5); + // LOG_M("rxsigmb.m","rxs",(void*)dummy_buffer_rx, fp->samples_per_tti,1, 5); // exit(-1); } } diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c index eae88a6afe..a27c6dbc90 100644 --- a/openair1/PHY/LTE_TRANSPORT/pbch.c +++ b/openair1/PHY/LTE_TRANSPORT/pbch.c @@ -281,7 +281,7 @@ int generate_pbch(LTE_eNB_PBCH *eNB_pbch, #endif #ifdef DEBUG_PBCH - write_output("pbch_encoded_output2.m","pbch_encoded_out2", + LOG_M"pbch_encoded_output2.m","pbch_encoded_out2", pbch_coded_data2, pbch_coded_bits, 1, @@ -308,7 +308,7 @@ int generate_pbch(LTE_eNB_PBCH *eNB_pbch, #ifdef DEBUG_PBCH if (frame_mod4==0) { - write_output("pbch_e.m","pbch_e", + LOG_M"pbch_e.m","pbch_e", eNB_pbch->pbch_e, pbch_E, 1, @@ -325,7 +325,7 @@ int generate_pbch(LTE_eNB_PBCH *eNB_pbch, pbch_E); #ifdef DEBUG_PBCH if (frame_mod4==0) { - write_output("pbch_e_s.m","pbch_e_s", + LOG_M"pbch_e_s.m","pbch_e_s", eNB_pbch->pbch_e, pbch_E, 1, diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index 90dca2337e..5614f67955 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -108,6 +108,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, int prach_ifft_cnt=0; #endif #ifdef PRACH_DEBUG + int en=0; int en0=0; #endif @@ -229,7 +230,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, #ifdef PRACH_DEBUG int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti); int8_t dbEn0 = dB_fixed(en0); - int8_t rach_dBm = dbEn0 - eNB->rx_total_gain_dB; + int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB; #ifdef PRACH_WRITE_OUTPUT_DEBUG if (dbEn0>32 && prach[0]!= NULL) @@ -239,14 +240,14 @@ void rx_prach0(PHY_VARS_eNB *eNB, char buffer[80]; //counter++; sprintf(buffer, "%s%d", "/tmp/prach_rx",counter); - write_output(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13); + LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13); } #endif if (dbEn0>32) { #ifdef PRACH_WRITE_OUTPUT_DEBUG - if (prach[0]!= NULL) write_output("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1); + if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1); #endif LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d rach_dBm:%d rxdata:%p index:%d\n",ru->idx,br_flag,ce_level,frame,subframe,fp->samples_per_tti,prach[aa],dbEn0,ru->N_TA_offset,rach_dBm,ru->common.rxdata[aa], (subframe*fp->samples_per_tti)-ru->N_TA_offset); } @@ -466,7 +467,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, } else if (eNB!=NULL) { #ifdef PRACH_DEBUG - int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); + en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en); #endif } @@ -614,11 +615,11 @@ void rx_prach0(PHY_VARS_eNB *eNB, memset(prachF, 0, sizeof(int16_t)*2*1024 ); #if defined(PRACH_WRITE_OUTPUT_DEBUG) - if (prach[0]!= NULL) write_output("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1); + if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1); #endif - // write_output("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1); - // write_output("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1); - // write_output("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1); + // LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1); + // LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1); + // LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1); for (aa=0;aaprach_config_common.prach_ConfigInfo.prach_ConfigIndex; int prach_mask = is_prach_subframe0(frame_parms,prach_ConfigIndex,frame,subframe); -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) int i; for (i=0;i<4;i++) { diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c index e7aa11d30a..7a6e2c9724 100644 --- a/openair1/PHY/LTE_TRANSPORT/pucch.c +++ b/openair1/PHY/LTE_TRANSPORT/pucch.c @@ -795,25 +795,11 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, for (j=0;jpucch1_stats_cnt[j][i]=0; eNB->pucch1ab_stats_cnt[j][i]=0; - } - } -#if defined(USRP_REC_PLAY) - // It's probably bad to do this statically only once. - // Looks like the above is incomplete. - // Such reset needs to be done once a UE PHY structure is being used/re-used - // Don't know if this is ever possible in current architecture - for (i=0;i<10240;i++) { - for (j=0;jpucch1_stats[j][i]=0; +#if defined(USRP_REC_PLAY) // not 100% sure eNB->pucch1_stats_thres[j][i]=0; +#endif } } - for (i=0;i<20480;i++) { - for (j=0;jpucch1ab_stats[j][i]=0; - } - } -#endif first_call=0; } @@ -1103,7 +1089,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, #endif #ifdef DEBUG_PUCCH_RX - LOG_D(PHY,"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,eNB->measurements.n0_subband_power_tot_dBm[6],pucch1_thres,phase_max); + LOG_I(PHY,"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,eNB->measurements.n0_subband_power_tot_dBm[6],pucch1_thres,phase_max); #endif @@ -1116,7 +1102,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, /* if (eNB->pucch1_stats_cnt[UE_id][subframe] == 0) { - write_output("pucch_debug.m","pucch_energy", + LOG_M("pucch_debug.m","pucch_energy", &eNB->pucch1_stats[UE_id][(subframe<<10)], 1024,1,2); AssertFatal(0,"Exiting for PUCCH 1 debug\n"); @@ -1236,6 +1222,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, #if defined(USRP_REC_PLAY) // It looks like the value is a bit messy when RF is replayed. // For instance i assume to skip pucch1_thres from the test below. + // Not 100% sure if (sigma2_dB<(dB_fixed(stat_max))) {// #else if (sigma2_dB<(dB_fixed(stat_max)-pucch1_thres)) {// @@ -1366,7 +1353,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, LOG_D(PHY,"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)\n",subframe,stat_re,stat_im, (subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe])); - LOG_D(PHY,"PUCCH 1a/b: subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres); + LOG_D(PHY,"PUCCH 1a/b: subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres); eNB->pucch1ab_stats[UE_id][(subframe<<11) + 2*(eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_re); eNB->pucch1ab_stats[UE_id][(subframe<<11) + 1+2*(eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_im); diff --git a/openair1/PHY/LTE_TRANSPORT/transport_common.h b/openair1/PHY/LTE_TRANSPORT/transport_common.h index 167e2b111a..130c973774 100644 --- a/openair1/PHY/LTE_TRANSPORT/transport_common.h +++ b/openair1/PHY/LTE_TRANSPORT/transport_common.h @@ -105,7 +105,7 @@ typedef enum { -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) typedef enum { CEmodeA = 0, CEmodeB = 1 @@ -138,7 +138,7 @@ typedef enum { HARQ_SR_CQI } UCI_type_t; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) typedef enum { NOCE, CEMODEA, @@ -183,7 +183,7 @@ typedef struct { PRACH_TDD_PREAMBLE_MAP_elem map[6]; } PRACH_TDD_PREAMBLE_MAP; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) typedef struct { uint16_t slss_id; diff --git a/openair1/PHY/LTE_TRANSPORT/transport_eNB.h b/openair1/PHY/LTE_TRANSPORT/transport_eNB.h index 3013dfb218..d1dd595d35 100644 --- a/openair1/PHY/LTE_TRANSPORT/transport_eNB.h +++ b/openair1/PHY/LTE_TRANSPORT/transport_eNB.h @@ -125,6 +125,15 @@ typedef struct { uint8_t first_layer; /// codeword this transport block is mapped to uint8_t codeword; +#ifdef PHY_TX_THREAD +#ifdef Rel14 + /// indicator that this DLSCH corresponds to SIB1-BR, needed for c_init for scrambling + uint8_t sib1_br_flag; + /// initial absolute subframe (see 36.211 Section 6.3.1), needed for c_init for scrambling + uint16_t i0; + CEmode_t CEmode; +#endif +#endif } LTE_DL_eNB_HARQ_t; @@ -138,7 +147,11 @@ typedef struct { /// Allocated RNTI (0 means DLSCH_t is not currently used) uint16_t rnti; /// Active flag for baseband transmitter processing +#ifdef PHY_TX_THREAD + uint8_t active[10]; +#else uint8_t active; +#endif /// HARQ process mask, indicates which processes are currently active uint16_t harq_mask; /// Indicator of TX activation per subframe. Used during PUCCH detection for ACK/NAK. @@ -146,7 +159,7 @@ typedef struct { /// First CCE of last PDSCH scheduling per subframe. Again used during PUCCH detection for ACK/NAK. uint8_t nCCE[10]; /// Process ID's per subframe. Used to associate received ACKs on PUSCH/PUCCH to DLSCH harq process ids - uint8_t harq_ids[10]; + uint8_t harq_ids[2][10]; /// Window size (in outgoing transport blocks) for fine-grain rate adaptation uint8_t ra_window_size; /// First-round error threshold for fine-grain rate adaptation @@ -169,6 +182,7 @@ typedef struct { int16_t sqrt_rho_a; /// amplitude of PDSCH (compared to RS) in symbols containing pilots int16_t sqrt_rho_b; +#ifndef PHY_TX_THREAD #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// indicator that this DLSCH corresponds to SIB1-BR, needed for c_init for scrambling uint8_t sib1_br_flag; @@ -176,6 +190,7 @@ typedef struct { uint16_t i0; CEmode_t CEmode; #endif +#endif } LTE_eNB_DLSCH_t; diff --git a/openair1/PHY/LTE_TRANSPORT/transport_proto.h b/openair1/PHY/LTE_TRANSPORT/transport_proto.h index 5547c308e9..37ac335d02 100644 --- a/openair1/PHY/LTE_TRANSPORT/transport_proto.h +++ b/openair1/PHY/LTE_TRANSPORT/transport_proto.h @@ -241,6 +241,7 @@ int32_t allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB, int32_t dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, int32_t **txdataF, int16_t amp, + int frame, uint32_t sub_frame_offset, uint8_t num_pdcch_symbols, LTE_eNB_DLSCH_t *dlsch0, @@ -418,7 +419,7 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,mDCI_ALLOC_t *d void fill_dci0(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc, nfapi_hi_dci0_dci_pdu *pdu); -void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame,int subframe); +void fill_ulsch(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame,int subframe); int generate_eNB_ulsch_params_from_rar(PHY_VARS_eNB *eNB, unsigned char *rar_pdu, @@ -577,7 +578,7 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,RU_t *ru, uint16_t *max_preamble_energy, uint16_t *max_preamble_delay, uint16_t Nf, uint8_t tdd_mapindex -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , uint8_t br_flag #endif @@ -611,11 +612,11 @@ void conv_eMTC_rballoc(uint16_t resource_block_coding, uint32_t N_RB_DL, uint32_t *rb_alloc); -int8_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type); +int16_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type); -int8_t find_ulsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type); +int16_t find_ulsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type); -int8_t find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type); +int16_t find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type); /**@}*/ #endif diff --git a/openair1/PHY/LTE_TRANSPORT/uci_tools.c b/openair1/PHY/LTE_TRANSPORT/uci_tools.c index 539d5476ab..88c652133b 100644 --- a/openair1/PHY/LTE_TRANSPORT/uci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/uci_tools.c @@ -37,10 +37,9 @@ //#define DEBUG_UCI 1 -int8_t find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type) { - uint8_t i; - int8_t first_free_index=-1; - +int16_t find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type) { + uint16_t i; + int16_t first_free_index=-1; AssertFatal(eNB!=NULL,"eNB is null\n"); for (i=0; iuci_vars[i].active >0) && diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 50f469011f..48cc5d0063 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -228,7 +228,7 @@ int ulsch_decoding_data_2thread0(td_params* tdp) { int harq_pid = tdp->harq_pid; int llr8_flag = tdp->llr8_flag; - unsigned int r,r_offset=0,Kr,Kr_bytes,iind; + unsigned int r,r_offset=0,Kr,Kr_bytes; uint8_t crc_type; int offset = 0; int ret = 1; @@ -240,7 +240,7 @@ int ulsch_decoding_data_2thread0(td_params* tdp) { uint32_t E=0; uint32_t Gp,GpmodC,Nl=1; uint32_t C = ulsch_harq->C; - decoder_if_t tc; + decoder_if_t *tc; if (llr8_flag == 0) tc = decoder16; @@ -260,18 +260,6 @@ int ulsch_decoding_data_2thread0(td_params* tdp) { Kr_bytes = Kr>>3; - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - AssertFatal(1==0,"ulsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes); - } - // This is stolen from rate-matching algorithm to get the value of E Gp = G/Nl/Q_m; @@ -304,23 +292,6 @@ int ulsch_decoding_data_2thread0(td_params* tdp) { Kr_bytes = Kr>>3; - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - LOG_E(PHY,"ulsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes); - return(-1); - } - -#ifdef DEBUG_ULSCH_DECODING - printf("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? ulsch_harq->F : 0); -#endif - memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short)); ulsch_harq->RTC[r] = generate_dummy_w(4+(Kr_bytes*8), (uint8_t*)&dummy_w[r][0], @@ -366,14 +337,12 @@ int ulsch_decoding_data_2thread0(td_params* tdp) { else crc_type = CRC24_B; - + ret = tc(&ulsch_harq->d[r][96], NULL, ulsch_harq->c[r], NULL, Kr, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], ulsch->max_turbo_iterations,//MAX_TURBO_ITERATIONS, crc_type, (r==0) ? ulsch_harq->F : 0, @@ -444,7 +413,7 @@ void *td_thread(void *param) { int ulsch_decoding_data_2thread(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) { eNB_proc_t *proc = &eNB->proc; - unsigned int r,r_offset=0,Kr,Kr_bytes,iind; + unsigned int r,r_offset=0,Kr,Kr_bytes; uint8_t crc_type; int offset = 0; int ret = 1; @@ -455,7 +424,7 @@ int ulsch_decoding_data_2thread(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr int G = ulsch_harq->G; unsigned int E; int Cby2; - decoder_if_t tc; + decoder_if_t *tc; struct timespec wait; @@ -516,23 +485,6 @@ int ulsch_decoding_data_2thread(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr Kr_bytes = Kr>>3; - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - LOG_E(PHY,"ulsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes); - return(-1); - } - -#ifdef DEBUG_ULSCH_DECODING - printf("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? ulsch_harq->F : 0); -#endif - memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short)); ulsch_harq->RTC[r] = generate_dummy_w(4+(Kr_bytes*8), (uint8_t*)&dummy_w[r][0], @@ -589,8 +541,6 @@ int ulsch_decoding_data_2thread(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr ulsch_harq->c[r], NULL, Kr, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], ulsch->max_turbo_iterations,//MAX_TURBO_ITERATIONS, crc_type, (r==0) ? ulsch_harq->F : 0, @@ -640,7 +590,7 @@ int ulsch_decoding_data_2thread(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) { - unsigned int r,r_offset=0,Kr,Kr_bytes,iind; + unsigned int r,r_offset=0,Kr,Kr_bytes; uint8_t crc_type; int offset = 0; int ret = 1; @@ -650,7 +600,7 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) int G = ulsch_harq->G; unsigned int E; - decoder_if_t tc; + decoder_if_t *tc; if (llr8_flag == 0) tc = *decoder16; @@ -669,23 +619,6 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) Kr_bytes = Kr>>3; - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - LOG_E(PHY,"ulsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes); - return(-1); - } - -#ifdef DEBUG_ULSCH_DECODING - printf("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? ulsch_harq->F : 0); -#endif - memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short)); ulsch_harq->RTC[r] = generate_dummy_w(4+(Kr_bytes*8), (uint8_t*)&dummy_w[r][0], @@ -734,7 +667,8 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) crc_type = CRC24_A; else crc_type = CRC24_B; - + + start_meas(&eNB->ulsch_turbo_decoding_stats); ret = tc(&ulsch_harq->d[r][96], @@ -742,8 +676,6 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) ulsch_harq->c[r], NULL, Kr, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], ulsch->max_turbo_iterations,//MAX_TURBO_ITERATIONS, crc_type, (r==0) ? ulsch_harq->F : 0, @@ -915,8 +847,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, nb_rb); //#endif - - if (ulsch_harq->round == 0) { + //if (ulsch_harq->round == 0) { // delete for RB shortage pattern // This is a new packet, so compute quantities regarding segmentation ulsch_harq->B = A+24; lte_segmentation(NULL, @@ -929,8 +860,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, &ulsch_harq->Kminus, &ulsch_harq->F); // CLEAR LLR's HERE for first packet in process - } - + //} // printf("after segmentation c[%d] = %p\n",0,ulsch_harq->c[0]); sumKr = 0; diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c index 0ffe3d735b..1a51a56cc9 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c @@ -1024,20 +1024,6 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext, #endif } - - - - - - - - - - - - - - void ulsch_channel_level(int32_t **drs_ch_estimates_ext, LTE_DL_FRAME_PARMS *frame_parms, int32_t *avg, @@ -1047,24 +1033,23 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext, int16_t rb; uint8_t aarx; #if defined(__x86_64__) || defined(__i386__) - __m128i avg128U; __m128i *ul_ch128; + __m128 avg128U; #elif defined(__arm__) - int16x4_t *ul_ch128; int32x4_t avg128U; + int16x4_t *ul_ch128; #endif - for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level #if defined(__x86_64__) || defined(__i386__) - avg128U = _mm_setzero_si128(); + avg128U = _mm_setzero_ps(); ul_ch128=(__m128i *)drs_ch_estimates_ext[aarx]; for (rb=0; rbrxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1); - //write_output("ulsch_chest.m","drs_est",pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1); + //LOG_M("rxdataF_ext.m","rxF_ext",pusch_vars->rxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1); + //LOG_M("ulsch_chest.m","drs_est",pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1); ulsch_channel_level(pusch_vars->drs_ch_estimates, @@ -1365,70 +1350,70 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB, eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch); sprintf(fname,"/tmp/ulsch_r%d_d",round); sprintf(vname,"/tmp/ulsch_r%d_dseq",round); - write_output(fname,vname,&eNB->ulsch[UE_id]->harq_processes[harq_pid]->d[0][96], + LOG_M(fname,vname,&eNB->ulsch[UE_id]->harq_processes[harq_pid]->d[0][96], eNB->ulsch[UE_id]->harq_processes[harq_pid]->Kplus*3,1,0); if (eNB->common_vars.rxdata) { sprintf(fname,"/tmp/rxsig0_r%d.m",round); sprintf(vname,"rxs0_r%d",round); - write_output(fname,vname, &eNB->common_vars.rxdata[0][0],eNB->frame_parms.samples_per_tti*10,1,1); + LOG_M(fname,vname, &eNB->common_vars.rxdata[0][0],eNB->frame_parms.samples_per_tti*10,1,1); if (eNB->frame_parms.nb_antennas_rx>1) if (eNB->common_vars.rxdata) { sprintf(fname,"/tmp/rxsig1_r%d.m",round); sprintf(vname,"rxs1_r%d",round); - write_output(fname,vname, &eNB->common_vars.rxdata[1][0],eNB->frame_parms.samples_per_tti*10,1,1); + LOG_M(fname,vname, &eNB->common_vars.rxdata[1][0],eNB->frame_parms.samples_per_tti*10,1,1); } } sprintf(fname,"/tmp/rxsigF0_r%d.m",round); sprintf(vname,"rxsF0_r%d",round); - write_output(fname,vname, (void*)&eNB->common_vars.rxdataF[0][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M(fname,vname, (void*)&eNB->common_vars.rxdataF[0][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1); if (eNB->frame_parms.nb_antennas_rx>1) { sprintf(fname,"/tmp/rxsigF1_r%d.m",round); sprintf(vname,"rxsF1_r%d",round); - write_output(vname,fname, &eNB->common_vars.rxdataF[1][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M(vname,fname, &eNB->common_vars.rxdataF[1][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1); } sprintf(fname,"/tmp/rxsigF0_ext_r%d.m",round); sprintf(vname,"rxsF0_ext_r%d",round); - write_output(fname,vname, &eNB->pusch_vars[UE_id]->rxdataF_ext[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); + LOG_M(fname,vname, &eNB->pusch_vars[UE_id]->rxdataF_ext[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); if (eNB->frame_parms.nb_antennas_rx>1) { sprintf(fname,"/tmp/rxsigF1_ext_r%d.m",round); sprintf(vname,"rxsF1_ext_r%d",round); - write_output(fname,vname,&eNB->pusch_vars[UE_id]->rxdataF_ext[1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); + LOG_M(fname,vname,&eNB->pusch_vars[UE_id]->rxdataF_ext[1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); } /* - if (eNB->srs_vars[UE_id].srs_ch_estimates) write_output("/tmp/srs_est0.m","srsest0",eNB->srs_vars[UE_id].srs_ch_estimates[0],eNB->frame_parms.ofdm_symbol_size,1,1); + if (eNB->srs_vars[UE_id].srs_ch_estimates) LOG_M("/tmp/srs_est0.m","srsest0",eNB->srs_vars[UE_id].srs_ch_estimates[0],eNB->frame_parms.ofdm_symbol_size,1,1); if (eNB->frame_parms.nb_antennas_rx>1) - if (eNB->srs_vars[UE_id].srs_ch_estimates) write_output("/tmp/srs_est1.m","srsest1",eNB->srs_vars[UE_id].srs_ch_estimates[1],eNB->frame_parms.ofdm_symbol_size,1,1); + if (eNB->srs_vars[UE_id].srs_ch_estimates) LOG_M("/tmp/srs_est1.m","srsest1",eNB->srs_vars[UE_id].srs_ch_estimates[1],eNB->frame_parms.ofdm_symbol_size,1,1); */ sprintf(fname,"/tmp/drs_est0_r%d.m",round); sprintf(vname,"drsest0_r%d",round); - write_output(fname,vname,eNB->pusch_vars[UE_id]->drs_ch_estimates[0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); + LOG_M(fname,vname,eNB->pusch_vars[UE_id]->drs_ch_estimates[0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); if (eNB->frame_parms.nb_antennas_rx>1) { sprintf(fname,"/tmp/drs_est1_r%d.m",round); sprintf(vname,"drsest1_r%d",round); - write_output(fname,vname,eNB->pusch_vars[UE_id]->drs_ch_estimates[1],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); + LOG_M(fname,vname,eNB->pusch_vars[UE_id]->drs_ch_estimates[1],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); } sprintf(fname,"/tmp/ulsch0_rxF_comp0_r%d.m",round); sprintf(vname,"ulsch0_rxF_comp0_r%d",round); - write_output(fname,vname,&eNB->pusch_vars[UE_id]->rxdataF_comp[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); - // write_output("ulsch_rxF_comp1.m","ulsch0_rxF_comp1",&eNB->pusch_vars[UE_id]->rxdataF_comp[0][1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); + LOG_M(fname,vname,&eNB->pusch_vars[UE_id]->rxdataF_comp[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); + // LOG_M("ulsch_rxF_comp1.m","ulsch0_rxF_comp1",&eNB->pusch_vars[UE_id]->rxdataF_comp[0][1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); sprintf(fname,"/tmp/ulsch_rxF_llr_r%d.m",round); sprintf(vname,"ulsch_llr_r%d",round); - write_output(fname,vname,eNB->pusch_vars[UE_id]->llr, + LOG_M(fname,vname,eNB->pusch_vars[UE_id]->llr, eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12*eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm *eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch,1,0); sprintf(fname,"/tmp/ulsch_ch_mag_r%d.m",round); sprintf(vname,"ulsch_ch_mag_r%d",round); - write_output(fname,vname,&eNB->pusch_vars[UE_id]->ul_ch_mag[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); - // write_output("ulsch_ch_mag1.m","ulsch_ch_mag1",&eNB->pusch_vars[UE_id]->ul_ch_mag[1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); + LOG_M(fname,vname,&eNB->pusch_vars[UE_id]->ul_ch_mag[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); + // LOG_M("ulsch_ch_mag1.m","ulsch_ch_mag1",&eNB->pusch_vars[UE_id]->ul_ch_mag[1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1); //#endif } diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c index 82dedd9bc9..61228e52c4 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c @@ -943,7 +943,7 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format, } } - if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) + if (dci_format == format1A && ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti))) { NPRB = (TPC&1) + 2; switch (N_RB_DL) { @@ -960,8 +960,8 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format, RIV_max = RIV_max100; break; } - } - else + } + else if (dci_format == format1A) { switch (N_RB_DL) { case 6: @@ -996,13 +996,13 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format, } - if(dci_format == format1) + else if (dci_format == format1) { NPRB = conv_nprb(rah, rballoc, N_RB_DL); } - if(rballoc > RIV_max) + if(dci_format == format1A && rballoc > RIV_max) { // LOG_I(PHY,"bad dci rballoc rballoc %d RIV_max %lld \n",rballoc, RIV_max); // DCI false detection diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dci_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/dci_ue.c index f7afb08286..d783f8dce8 100755 --- a/openair1/PHY/LTE_UE_TRANSPORT/dci_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dci_ue.c @@ -1357,7 +1357,7 @@ int32_t rx_pdcch(PHY_VARS_UE *ue, if (subframe==5) { printf("Writing output s0\n"); - write_output("rxF_comp_d0.m","rxF_c_d",&pdcch_vars[eNB_id]->rxdataF_comp[0][0*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); + LOG_M("rxF_comp_d0.m","rxF_c_d",&pdcch_vars[eNB_id]->rxdataF_comp[0][0*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); } #endif @@ -1435,7 +1435,7 @@ int32_t rx_pdcch(PHY_VARS_UE *ue, #ifdef DEBUG_PHY if (subframe==5) { - write_output("rxF_comp_ds.m","rxF_c_ds",&pdcch_vars[eNB_id]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); + LOG_M("rxF_comp_ds.m","rxF_c_ds",&pdcch_vars[eNB_id]->rxdataF_comp[0][s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); } #endif @@ -1460,7 +1460,7 @@ int32_t rx_pdcch(PHY_VARS_UE *ue, (char *)pdcch_vars[eNB_id]->llr, s); /*#ifdef DEBUG_PHY - write_output("llr8_seq.m","llr8",&pdcch_vars[eNB_id]->llr[s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,4); + LOG_M("llr8_seq.m","llr8",&pdcch_vars[eNB_id]->llr[s*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,4); #endif*/ } diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c index 30f7733be2..dc9534b1fd 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c @@ -38,7 +38,7 @@ #include "UTIL/LOG/vcd_signal_dumper.h" #include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h" //#define DEBUG_DLSCH_DECODING -//#define UE_DEBUG_TRACE 1 +#define UE_DEBUG_TRACE 1 void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch) @@ -176,7 +176,6 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, uint32_t A,E; uint32_t G; uint32_t ret,offset; - uint16_t iind; // uint8_t dummy_channel_output[(3*8*block_length)+12]; short dummy_w[MAX_NUM_DLSCH_SEGMENTS][3*(6144+64)]; uint32_t r,r_offset=0,Kr,Kr_bytes,err_flag=0; @@ -206,9 +205,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, time_stats_t *); #endif -decoder_if_t tc; - - +decoder_if_t *tc; if (!dlsch_llr) { @@ -237,17 +234,13 @@ decoder_if_t tc; } if (llr8_flag == 0) { - //#ifdef __AVX2__ -#if 0 - tc_2cw = phy_threegpplte_turbo_decoder16avx2; -#endif tc = decoder16; } else { - AssertFatal (harq_process->TBS >= 256 , "Mismatch flag nbRB=%d TBS=%d mcs=%d Qm=%d RIV=%d round=%d \n", - harq_process->nb_rb, harq_process->TBS,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round); - tc = decoder8; + AssertFatal (harq_process->TBS >= 256 , "Mismatch flag nbRB=%d TBS=%d mcs=%d Qm=%d RIV=%d round=%d \n", + harq_process->nb_rb, harq_process->TBS,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round); + tc = decoder8; } @@ -343,23 +336,6 @@ decoder_if_t tc; Kr_bytes = Kr>>3; - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes); - return(dlsch->max_turbo_iterations); - } - -#ifdef DEBUG_DLSCH_DECODING - printf("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? harq_process->F : 0); -#endif - #if UE_TIMING_TRACE start_meas(dlsch_rate_unmatching_stats); #endif @@ -429,8 +405,8 @@ decoder_if_t tc; #ifdef DEBUG_DLSCH_DECODING /* if (r==0) { - write_output("decoder_llr.m","decllr",dlsch_llr,G,1,0); - write_output("decoder_in.m","dec",&harq_process->d[0][96],(3*8*Kr_bytes)+12,1,0); + LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0); + LOG_M("decoder_in.m","dec",&harq_process->d[0][96],(3*8*Kr_bytes)+12,1,0); } printf("decoder input(segment %d) :",r); @@ -480,8 +456,6 @@ decoder_if_t tc; harq_process->c[r], NULL, Kr, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], dlsch->max_turbo_iterations, crc_type, (r==0) ? harq_process->F : 0, @@ -508,8 +482,6 @@ decoder_if_t tc; (&harq_process->d[r][96], harq_process->c[r], Kr, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], dlsch->max_turbo_iterations, crc_type, (r==0) ? harq_process->F : 0, @@ -551,8 +523,6 @@ decoder_if_t tc; harq_process->c[r-1], harq_process->c[r], Kr, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], dlsch->max_turbo_iterations, crc_type, (r==0) ? harq_process->F : 0, @@ -568,8 +538,6 @@ decoder_if_t tc; (&harq_process->d[r-1][96], harq_process->c[r-1], Kr_last, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], dlsch->max_turbo_iterations, crc_type, (r==0) ? harq_process->F : 0, @@ -594,8 +562,6 @@ decoder_if_t tc; (&harq_process->d[r-1][96], harq_process->c[r-1], Kr_last, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], dlsch->max_turbo_iterations, crc_type, (r==0) ? harq_process->F : 0, @@ -616,8 +582,6 @@ decoder_if_t tc; (&harq_process->d[r][96], harq_process->c[r], Kr, - f1f2mat_old[iind*2], - f1f2mat_old[(iind*2)+1], dlsch->max_turbo_iterations, crc_type, (r==0) ? harq_process->F : 0, @@ -760,7 +724,6 @@ int dlsch_encoding_SIC(PHY_VARS_UE *ue, unsigned int G; unsigned int crc=1; - unsigned short iind; LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; unsigned char harq_pid = ue->dlsch[subframe&2][0][0]->rnti; @@ -830,21 +793,6 @@ int dlsch_encoding_SIC(PHY_VARS_UE *ue, Kr_bytes = Kr>>3; - // get interleaver index for Turbo code (lookup in Table 5.1.3-3 36-212, V8.6 2009-03, p. 13-14) - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - printf("dlsch_coding: Illegal codeword size %d!!!\n",Kr_bytes); - return(-1); - } - - #ifdef DEBUG_DLSCH_CODING printf("Generating Code Segment %d (%d bits)\n",r,Kr); // generate codewords @@ -856,22 +804,17 @@ int dlsch_encoding_SIC(PHY_VARS_UE *ue, #endif -#ifdef DEBUG_DLSCH_CODING - printf("Encoding ... iind %d f1 %d, f2 %d\n",iind,f1f2mat_old[iind*2],f1f2mat_old[(iind*2)+1]); -#endif start_meas(te_stats); encoder(dlsch->harq_processes[harq_pid]->c[r], Kr>>3, &dlsch->harq_processes[harq_pid]->d[r][96], - (r==0) ? dlsch->harq_processes[harq_pid]->F : 0, - f1f2mat_old[iind*2], // f1 (see 36121-820, page 14) - f1f2mat_old[(iind*2)+1] // f2 (see 36121-820, page 14) + (r==0) ? dlsch->harq_processes[harq_pid]->F : 0 ); stop_meas(te_stats); #ifdef DEBUG_DLSCH_CODING if (r==0) - write_output("enc_output0.m","enc0",&dlsch->harq_processes[harq_pid]->d[r][96],(3*8*Kr_bytes)+12,1,4); + LOG_M("enc_output0.m","enc0",&dlsch->harq_processes[harq_pid]->d[r][96],(3*8*Kr_bytes)+12,1,4); #endif start_meas(i_stats); @@ -918,7 +861,7 @@ int dlsch_encoding_SIC(PHY_VARS_UE *ue, #ifdef DEBUG_DLSCH_CODING if (r==dlsch->harq_processes[harq_pid]->C-1) - write_output("enc_output.m","enc",dlsch->harq_processes[harq_pid]->e,r_offset,1,4); + LOG_M("enc_output.m","enc",dlsch->harq_processes[harq_pid]->e,r_offset,1,4); #endif } diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index 665d5cead0..a414c85c16 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -36,8 +36,18 @@ #include "transport_proto_ue.h" #include "PHY/sse_intrin.h" #include "T.h" +#include +#include +#include +#include +#include +#include +#include +#include "linear_preprocessing_rec.h" #define NOCYGWIN_STATIC +//#define DEBUG_MMSE + /* dynamic shift for LLR computation for TM3/4 * set as command line argument, see lte-softmodem.c @@ -103,6 +113,7 @@ int rx_pdsch(PHY_VARS_UE *ue, int avg[4]; int avg_0[2]; int avg_1[2]; + unsigned short mmse_flag=0; #if UE_TIMING_TRACE uint8_t slot = 0; @@ -440,14 +451,15 @@ int rx_pdsch(PHY_VARS_UE *ue, ((dlsch0_harq->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) && (dlsch0_harq->mimo_mode <=DUALSTREAM_PUSCH_PRECODING))) { - dlsch_channel_level_TM34(pdsch_vars[eNB_id]->dl_ch_estimates_ext, - frame_parms, - pdsch_vars[eNB_id]->pmi_ext, - avg_0, - avg_1, - symbol, - nb_rb, - dlsch0_harq->mimo_mode); + dlsch_channel_level_TM34(pdsch_vars[eNB_id]->dl_ch_estimates_ext, + frame_parms, + pdsch_vars[eNB_id]->pmi_ext, + avg_0, + avg_1, + symbol, + nb_rb, + mmse_flag, + dlsch0_harq->mimo_mode); LOG_D(PHY,"Channel Level TM34 avg_0 %d, avg_1 %d, rx_type %d, rx_standard %d, dlsch_demod_shift %d \n", avg_0[0], avg_1[0], rx_type, rx_standard, dlsch_demod_shift); @@ -546,6 +558,27 @@ int rx_pdsch(PHY_VARS_UE *ue, #if UE_TIMING_TRACE start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); #endif + + if (rx_type==rx_IC_dual_stream && mmse_flag==1){ + + precode_channel_est(pdsch_vars[eNB_id]->dl_ch_estimates_ext, + frame_parms, + pdsch_vars[eNB_id], + symbol, + nb_rb, + dlsch0_harq->mimo_mode); + + mmse_processing_oai(pdsch_vars[eNB_id], + frame_parms, + measurements, + first_symbol_flag, + dlsch0_harq->mimo_mode, + mmse_flag, + 0.0, + symbol, + nb_rb); + } + // Now channel compensation if (dlsch0_harq->mimo_moderxdataF_ext, @@ -561,9 +594,10 @@ int rx_pdsch(PHY_VARS_UE *ue, nb_rb, pdsch_vars[eNB_id]->log2_maxh, measurements); // log2_maxh+I0_shift - /*if (symbol == 5) { - write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); - } */ + if (symbol == 5) { + LOG_M("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); + } + if ((rx_type==rx_IC_single_stream) && (eNB_id_in_connected_eNB)) { dlsch_channel_compensation(pdsch_vars[eNB_id_i]->rxdataF_ext, @@ -579,12 +613,10 @@ int rx_pdsch(PHY_VARS_UE *ue, nb_rb, pdsch_vars[eNB_id]->log2_maxh, measurements); // log2_maxh+I0_shift -#ifdef DEBUG_PHY if (symbol == 5) { - write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); - write_output("rxF_comp_i.m","rxF_c_i",&pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); + LOG_M("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); + LOG_M("rxF_comp_i.m","rxF_c_i",&pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); } -#endif dlsch_dual_stream_correlation(frame_parms, symbol, @@ -607,16 +639,17 @@ int rx_pdsch(PHY_VARS_UE *ue, dlsch0_harq->round, dlsch0_harq->mimo_mode, nb_rb, + mmse_flag, pdsch_vars[eNB_id]->log2_maxh0, pdsch_vars[eNB_id]->log2_maxh1); - /* if (symbol == 5) { - write_output("rxF_comp_d00.m","rxF_c_d00",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM - write_output("rxF_comp_d01.m","rxF_c_d01",&pdsch_vars[eNB_id]->rxdataF_comp0[1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 - write_output("rxF_comp_d10.m","rxF_c_d10",&pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 - write_output("rxF_comp_d11.m","rxF_c_d11",&pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be QAM - } */ + if (symbol == 5) { + LOG_M("rxF_comp_d00.m","rxF_c_d00",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM + LOG_M("rxF_comp_d01.m","rxF_c_d01",&pdsch_vars[eNB_id]->rxdataF_comp0[1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 + LOG_M("rxF_comp_d10.m","rxF_c_d10",&pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 + LOG_M("rxF_comp_d11.m","rxF_c_d11",&pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be QAM + } // compute correlation between signal and interference channels (rho12 and rho21) - dlsch_dual_stream_correlation(frame_parms, // this is doing h11'*h12 and h21'*h22 + dlsch_dual_stream_correlation(frame_parms, // this is doing h11'*h12 and h21'*h22 symbol, nb_rb, pdsch_vars[eNB_id]->dl_ch_estimates_ext, @@ -634,13 +667,12 @@ int rx_pdsch(PHY_VARS_UE *ue, pdsch_vars[eNB_id]->log2_maxh1); // printf("rho stream2 =%d\n",&pdsch_vars[eNB_id]->dl_ch_rho2_ext ); //printf("TM3 log2_maxh : %d\n",pdsch_vars[eNB_id]->log2_maxh); - /* if (symbol == 5) { - write_output("rho0_0.m","rho0_0",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM - write_output("rho2_0.m","rho2_0",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 - write_output("rho0_1.m.m","rho0_1",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 - write_output("rho2_1.m","rho2_1",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be QAM - } */ - + if (symbol == 5) { + LOG_M("rho0_0.m","rho0_0",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM + LOG_M("rho2_0.m","rho2_0",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 + LOG_M("rho0_1.m.m","rho0_1",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 + LOG_M("rho2_1.m","rho2_1",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be QAM + } } else if (dlsch0_harq->mimo_moden_connected_eNB) && (dlsch0_harq->dl_power_off==0)) { dlsch_channel_compensation_TM56(pdsch_vars[eNB_id]->rxdataF_ext, @@ -690,12 +722,11 @@ int rx_pdsch(PHY_VARS_UE *ue, nb_rb, pdsch_vars[eNB_id]->log2_maxh, dlsch0_harq->dl_power_off); -#ifdef DEBUG_PHY if (symbol==5) { - write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); - write_output("rxF_comp_i.m","rxF_c_i",&pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); + LOG_M("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); + LOG_M("rxF_comp_i.m","rxF_c_i",&pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1); } -#endif + dlsch_dual_stream_correlation(frame_parms, symbol, nb_rb, @@ -765,10 +796,10 @@ int rx_pdsch(PHY_VARS_UE *ue, symbol, nb_rb, 1); - /* if (symbol == 5) { - write_output("rho0_mrc.m","rho0_0",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM - write_output("rho2_mrc.m","rho2_0",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 - } */ + if (symbol == 5) { + LOG_M("rho0_mrc.m","rho0_0",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM + LOG_M("rho2_mrc.m","rho2_0",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0 + } } } else { dlsch_detection_mrc(frame_parms, @@ -1185,10 +1216,11 @@ int rx_pdsch(PHY_VARS_UE *ue, #if DISABLE_LOG_X printf("[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); #else - LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); + LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); #endif #endif -// Please keep it: useful for debugging + + // Please keep it: useful for debugging #if 0 if( (symbol == 13) && (subframe==0) && (dlsch0_harq->Qm == 6) /*&& (nb_rb==25)*/) { @@ -1196,29 +1228,29 @@ int rx_pdsch(PHY_VARS_UE *ue, if(1) { #if 1 - write_output("rxdataF0.m" , "rxdataF0", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1); - //write_output("rxdataF1.m" , "rxdataF1", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1); - write_output("dl_ch_estimates00.m", "dl_ch_estimates00", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0],14*frame_parms->ofdm_symbol_size,1,1); - //write_output("dl_ch_estimates01.m", "dl_ch_estimates01", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0],14*frame_parms->ofdm_symbol_size,1,1); - //write_output("dl_ch_estimates10.m", "dl_ch_estimates10", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0],14*frame_parms->ofdm_symbol_size,1,1); - //write_output("dl_ch_estimates11.m", "dl_ch_estimates11", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0],14*frame_parms->ofdm_symbol_size,1,1); + LOG_M("rxdataF0.m" , "rxdataF0", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1); + //LOG_M("rxdataF1.m" , "rxdataF1", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1); + LOG_M("dl_ch_estimates00.m", "dl_ch_estimates00", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0],14*frame_parms->ofdm_symbol_size,1,1); + //LOG_M("dl_ch_estimates01.m", "dl_ch_estimates01", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0],14*frame_parms->ofdm_symbol_size,1,1); + //LOG_M("dl_ch_estimates10.m", "dl_ch_estimates10", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0],14*frame_parms->ofdm_symbol_size,1,1); + //LOG_M("dl_ch_estimates11.m", "dl_ch_estimates11", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0],14*frame_parms->ofdm_symbol_size,1,1); - //write_output("rxdataF_ext00.m" , "rxdataF_ext00", &pdsch_vars[eNB_id]->rxdataF_ext[0][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("rxdataF_ext01.m" , "rxdataF_ext01", &pdsch_vars[eNB_id]->rxdataF_ext[1][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("rxdataF_ext10.m" , "rxdataF_ext10", &pdsch_vars[eNB_id]->rxdataF_ext[2][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("rxdataF_ext11.m" , "rxdataF_ext11", &pdsch_vars[eNB_id]->rxdataF_ext[3][0],14*frame_parms->N_RB_DL*12,1,1); - write_output("dl_ch_estimates_ext00.m", "dl_ch_estimates_ext00", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("dl_ch_estimates_ext01.m", "dl_ch_estimates_ext01", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[1][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("dl_ch_estimates_ext10.m", "dl_ch_estimates_ext10", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[2][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("dl_ch_estimates_ext11.m", "dl_ch_estimates_ext11", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[3][0],14*frame_parms->N_RB_DL*12,1,1); - write_output("rxdataF_comp00.m","rxdataF_comp00", &pdsch_vars[eNB_id]->rxdataF_comp0[0][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("rxdataF_comp01.m","rxdataF_comp01", &pdsch_vars[eNB_id]->rxdataF_comp0[1][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("rxdataF_comp10.m","rxdataF_comp10", &pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][0][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("rxdataF_comp11.m","rxdataF_comp11", &pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][1][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("rxdataF_ext00.m" , "rxdataF_ext00", &pdsch_vars[eNB_id]->rxdataF_ext[0][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("rxdataF_ext01.m" , "rxdataF_ext01", &pdsch_vars[eNB_id]->rxdataF_ext[1][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("rxdataF_ext10.m" , "rxdataF_ext10", &pdsch_vars[eNB_id]->rxdataF_ext[2][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("rxdataF_ext11.m" , "rxdataF_ext11", &pdsch_vars[eNB_id]->rxdataF_ext[3][0],14*frame_parms->N_RB_DL*12,1,1); + LOG_M("dl_ch_estimates_ext00.m", "dl_ch_estimates_ext00", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("dl_ch_estimates_ext01.m", "dl_ch_estimates_ext01", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[1][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("dl_ch_estimates_ext10.m", "dl_ch_estimates_ext10", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[2][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("dl_ch_estimates_ext11.m", "dl_ch_estimates_ext11", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[3][0],14*frame_parms->N_RB_DL*12,1,1); + LOG_M("rxdataF_comp00.m","rxdataF_comp00", &pdsch_vars[eNB_id]->rxdataF_comp0[0][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("rxdataF_comp01.m","rxdataF_comp01", &pdsch_vars[eNB_id]->rxdataF_comp0[1][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("rxdataF_comp10.m","rxdataF_comp10", &pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][0][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("rxdataF_comp11.m","rxdataF_comp11", &pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][1][0],14*frame_parms->N_RB_DL*12,1,1); #endif - write_output("llr0.m","llr0", &pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); - //write_output("llr1.m","llr1", &pdsch_vars[eNB_id]->llr[1][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); + LOG_M("llr0.m","llr0", &pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); + //LOG_M("llr1.m","llr1", &pdsch_vars[eNB_id]->llr[1][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); AssertFatal(0," "); @@ -1281,15 +1313,14 @@ void dlsch_channel_compensation(int **rxdataF_ext, QAM_amp128b = _mm_set1_epi16(QAM64_n2); } - // printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol); - for (aarx=0; aarxnb_antennas_rx; aarx++) { - dl_ch128 = (__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128 = (__m128i *)&dl_ch_mag[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128b = (__m128i *)&dl_ch_magb[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; + //print_shorts("dl_ch128[0]=",&dl_ch128[0]);*/ + dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - rxdataF_comp128 = (__m128i *)&rxdataF_comp[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; for (rb=0; rbnb_antennas_rx; aarx++) { - dl_ch128 = (int16x4_t*)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128 = (int16x8_t*)&dl_ch_mag[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128b = (int16x8_t*)&dl_ch_magb[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch128 = (int16x4_t*)&dl_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128 = (int16x8_t*)&dl_ch_mag[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128b = (int16x8_t*)&dl_ch_magb[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (int16x4_t*)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - rxdataF_comp128 = (int16x4x2_t*)&rxdataF_comp[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128 = (int16x4x2_t*)&rxdataF_comp[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; for (rb=0; rb2) { @@ -1708,6 +1738,204 @@ void dlsch_channel_compensation(int **rxdataF_ext, #endif } +void dlsch_channel_compensation_core(int **rxdataF_ext, + int **dl_ch_estimates_ext, + int **dl_ch_mag, + int **dl_ch_magb, + int **rxdataF_comp, + int **rho, + unsigned char n_tx, + unsigned char n_rx, + unsigned char mod_order, + unsigned char output_shift, + int length, + int start_point) + +{ + + unsigned short ii; + int length_mod8 = 0; + int length2; + __m128i *dl_ch128,*dl_ch_mag128,*dl_ch_mag128b, *dl_ch128_2, *rxdataF128,*rxdataF_comp128,*rho128; + __m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp128,QAM_amp128b; + int aatx = 0, aarx = 0; + + for (aatx=0; aatx>3; + + for (ii=0; ii2) { + // get channel amplitude if not QPSK + + mmtmpD0 = _mm_madd_epi16(dl_ch128[0],dl_ch128[0]); + mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift); + + mmtmpD1 = _mm_madd_epi16(dl_ch128[1],dl_ch128[1]); + mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift); + + mmtmpD0 = _mm_packs_epi32(mmtmpD0,mmtmpD1); + + // store channel magnitude here in a new field of dlsch + + dl_ch_mag128[0] = _mm_unpacklo_epi16(mmtmpD0,mmtmpD0); + dl_ch_mag128b[0] = dl_ch_mag128[0]; + dl_ch_mag128[0] = _mm_mulhi_epi16(dl_ch_mag128[0],QAM_amp128); + dl_ch_mag128[0] = _mm_slli_epi16(dl_ch_mag128[0],1); + //print_ints("Re(ch):",(int16_t*)&mmtmpD0); + //print_shorts("QAM_amp:",(int16_t*)&QAM_amp128); + //print_shorts("mag:",(int16_t*)&dl_ch_mag128[0]); + dl_ch_mag128[1] = _mm_unpackhi_epi16(mmtmpD0,mmtmpD0); + dl_ch_mag128b[1] = dl_ch_mag128[1]; + dl_ch_mag128[1] = _mm_mulhi_epi16(dl_ch_mag128[1],QAM_amp128); + dl_ch_mag128[1] = _mm_slli_epi16(dl_ch_mag128[1],1); + + dl_ch_mag128b[0] = _mm_mulhi_epi16(dl_ch_mag128b[0],QAM_amp128b); + dl_ch_mag128b[0] = _mm_slli_epi16(dl_ch_mag128b[0],1); + + dl_ch_mag128b[1] = _mm_mulhi_epi16(dl_ch_mag128b[1],QAM_amp128b); + dl_ch_mag128b[1] = _mm_slli_epi16(dl_ch_mag128b[1],1); + + } + + // multiply by conjugated channel + mmtmpD0 = _mm_madd_epi16(dl_ch128[0],rxdataF128[0]); + + // mmtmpD0 contains real part of 4 consecutive outputs (32-bit) + mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[0],_MM_SHUFFLE(2,3,0,1)); + mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1)); + mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)&conjugate[0]); + // print_ints("im",&mmtmpD1); + mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[0]); + // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit) + mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift); + // print_ints("re(shift)",&mmtmpD0); + mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift); + // print_ints("im(shift)",&mmtmpD1); + mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1); + mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1); + // print_ints("c0",&mmtmpD2); + // print_ints("c1",&mmtmpD3); + rxdataF_comp128[0] = _mm_packs_epi32(mmtmpD2,mmtmpD3); + // print_shorts("rx:",rxdataF128); + // print_shorts("ch:",dl_ch128); + // print_shorts("pack:",rxdataF_comp128); + + // multiply by conjugated channel + mmtmpD0 = _mm_madd_epi16(dl_ch128[1],rxdataF128[1]); + // mmtmpD0 contains real part of 4 consecutive outputs (32-bit) + mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[1],_MM_SHUFFLE(2,3,0,1)); + mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1)); + mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate); + mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[1]); + // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit) + mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift); + mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift); + mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1); + mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1); + + rxdataF_comp128[1] = _mm_packs_epi32(mmtmpD2,mmtmpD3); + // print_shorts("rx:",rxdataF128+1); + // print_shorts("ch:",dl_ch128+1); + //print_shorts("pack:",rxdataF_comp128+1); + + dl_ch128+=2; + dl_ch_mag128+=2; + dl_ch_mag128b+=2; + rxdataF128+=2; + rxdataF_comp128+=2; + } + }else { + printf ("Channel Compensation: Received number of subcarriers is not multiple of 8, \n" + "need to adapt the code!\n"); + } + } + } + +/*This part of code makes sense only for processing in 2x2 blocks*/ + if (rho) { + + + for (aarx=0; aarx>3; + + for (ii=0; iipmi_ext; + + symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; + + if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) + pilots=1; + + for (aarx=0;aarxnb_antennas_rx;aarx++) { + + dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; // this is h11 + dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; // this is h12 + + for (rb=0; rbnb_antennas_rx;aarx++) { - /* if (aarx==0) { - output_shift=output_shift0; - } - else { - output_shift=output_shift1; - } */ - - // printf("antenna %d\n", aarx); - // printf("symbol %d, rx antenna %d\n", symbol, aarx); - dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; // this is h11 dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; // this is h12 - - dl_ch_mag0_128 = (__m128i *)&dl_ch_mag0[aarx][symbol*frame_parms->N_RB_DL*12]; //responsible for x1 dl_ch_mag0_128b = (__m128i *)&dl_ch_magb0[aarx][symbol*frame_parms->N_RB_DL*12];//responsible for x1 dl_ch_mag1_128 = (__m128i *)&dl_ch_mag1[aarx][symbol*frame_parms->N_RB_DL*12]; //responsible for x2. always coming from tx2 @@ -2367,48 +2647,37 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms, rxdataF_comp1_128 = (__m128i *)&rxdataF_comp1[aarx][symbol*frame_parms->N_RB_DL*12]; //result of multipl with MF x2 on antenna of interest for (rb=0; rb2) { @@ -2537,7 +2806,7 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms, // print_shorts("rx:",rxdataF128); // print_shorts("ch:",dl_ch0_128); - // print_shorts("pack:",rxdataF_comp0_128); + //print_shorts("pack:",rxdataF_comp0_128); // multiply by conjugated channel mmtmpD0 = _mm_madd_epi16(dl_ch0_128[1],rxdataF128[1]); @@ -2756,36 +3025,31 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms, rxdataF_comp1_128 = (int16x8_t*)&rxdataF_comp1[aarx][symbol*frame_parms->N_RB_DL*12]; for (rb=0; rb2) { @@ -3010,19 +3274,15 @@ void dlsch_dual_stream_correlation(LTE_DL_FRAME_PARMS *frame_parms, for (aarx=0; aarxnb_antennas_rx; aarx++) { - - - //printf ("antenna %d", aarx); dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; if (dl_ch_estimates_ext_i == NULL) // TM3/4 - dl_ch128i = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch128i = (__m128i *)&dl_ch_estimates_ext[aarx + frame_parms->nb_antennas_rx][symbol*frame_parms->N_RB_DL*12]; else dl_ch128i = (__m128i *)&dl_ch_estimates_ext_i[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch_rho128 = (__m128i *)&dl_ch_rho_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - for (rb=0; rb=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - - if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) { - pilots=1; - } - - // printf("Dual stream correlation (%p)\n",dl_ch_estimates_ext_i); - - for (aarx=0; aarxnb_antennas_rx; aarx++) { - - if (aarx==0) { - output_shift=output_shift0; - } - else { - output_shift=output_shift1; - } - - //printf ("antenna %d", aarx); - dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - - if (dl_ch_estimates_ext_i == NULL) // TM3/4 - dl_ch128i = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; - else - dl_ch128i = (__m128i *)&dl_ch_estimates_ext_i[aarx][symbol*frame_parms->N_RB_DL*12]; - - dl_ch_rho128 = (__m128i *)&dl_ch_rho_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - - - for (rb=0; rbrxdataF_comp0; int **rxdataF_comp1 = pdsch_vars->rxdataF_comp1[harq_pid][round]; @@ -3379,66 +3521,120 @@ void dlsch_detection_mrc_TM34(LTE_DL_FRAME_PARMS *frame_parms, int **dl_ch_magb0 = pdsch_vars->dl_ch_magb0; int **dl_ch_magb1 = pdsch_vars->dl_ch_magb1[harq_pid][round]; - if (frame_parms->nb_antennas_rx>1) { - - rxdataF_comp128_0 = (__m128i *)&rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12]; - rxdataF_comp128_1 = (__m128i *)&rxdataF_comp0[1][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128_0 = (__m128i *)&dl_ch_mag0[0][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128_1 = (__m128i *)&dl_ch_mag0[1][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128_0b = (__m128i *)&dl_ch_magb0[0][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128_1b = (__m128i *)&dl_ch_magb0[1][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_0 = (__m128i *)&rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_1 = (__m128i *)&rxdataF_comp0[1][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_0 = (__m128i *)&dl_ch_mag0[0][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_1 = (__m128i *)&dl_ch_mag0[1][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_0b = (__m128i *)&dl_ch_magb0[0][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_1b = (__m128i *)&dl_ch_magb0[1][symbol*frame_parms->N_RB_DL*12]; + rho128_0 = (__m128i *) &dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12]; + rho128_1 = (__m128i *) &dl_ch_rho2_ext[1][symbol*frame_parms->N_RB_DL*12]; // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation) - for (i=0;inb_antennas_rx>2) { - // if (rho) { - rho128_0 = (__m128i *) &dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12]; - rho128_1 = (__m128i *) &dl_ch_rho2_ext[1][symbol*frame_parms->N_RB_DL*12]; - for (i=0;iN_RB_DL*12]; + rxdataF_comp128_3 = (__m128i *)&rxdataF_comp0[3][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_2 = (__m128i *)&dl_ch_mag0[2][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_3 = (__m128i *)&dl_ch_mag0[3][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_2b = (__m128i *)&dl_ch_magb0[2][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_3b = (__m128i *)&dl_ch_magb0[3][symbol*frame_parms->N_RB_DL*12]; + rho128_2 = (__m128i *) &dl_ch_rho2_ext[2][symbol*frame_parms->N_RB_DL*12]; + rho128_3 = (__m128i *) &dl_ch_rho2_ext[3][symbol*frame_parms->N_RB_DL*12]; + /*rxdataF_comp*/ + rxdataF_comp128_2[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_2[i],1),_mm_srai_epi16(rxdataF_comp128_3[i],1)); + rxdataF_comp128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_0[i],1),_mm_srai_epi16(rxdataF_comp128_2[i],1)); + /*dl_ch_mag*/ + dl_ch_mag128_2[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_2[i],1),_mm_srai_epi16(dl_ch_mag128_3[i],1)); + dl_ch_mag128_0[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0[i],1),_mm_srai_epi16(dl_ch_mag128_2[i],1)); + /*dl_ch_mag*/ + dl_ch_mag128_2b[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_2b[i],1),_mm_srai_epi16(dl_ch_mag128_3b[i],1)); + dl_ch_mag128_0b[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0b[i],1),_mm_srai_epi16(dl_ch_mag128_2b[i],1)); + /*rho*/ + rho128_2[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_2[i],1),_mm_srai_epi16(rho128_3[i],1)); + rho128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_0[i],1),_mm_srai_epi16(rho128_2[i],1)); + } + } if (dual_stream_UE == 1) { - rho128_i0 = (__m128i *) &dl_ch_rho_ext[0][symbol*frame_parms->N_RB_DL*12]; - rho128_i1 = (__m128i *) &dl_ch_rho_ext[1][symbol*frame_parms->N_RB_DL*12]; + + __m128i *dl_ch_mag128_i0, *dl_ch_mag128_i1; + __m128i *dl_ch_mag128_i0b, *dl_ch_mag128_i1b; + __m128i *rho128_i0, *rho128_i1; + __m128i *rxdataF_comp128_i0, *rxdataF_comp128_i1; + rxdataF_comp128_i0 = (__m128i *)&rxdataF_comp1[0][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_i1 = (__m128i *)&rxdataF_comp1[1][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128_i0 = (__m128i *)&dl_ch_mag1[0][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128_i1 = (__m128i *)&dl_ch_mag1[1][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128_i0b = (__m128i *)&dl_ch_magb1[0][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128_i1b = (__m128i *)&dl_ch_magb1[1][symbol*frame_parms->N_RB_DL*12]; + rho128_i0 = (__m128i *) &dl_ch_rho_ext[0][symbol*frame_parms->N_RB_DL*12]; + rho128_i1 = (__m128i *) &dl_ch_rho_ext[1][symbol*frame_parms->N_RB_DL*12]; + + for (i=0;inb_antennas_rx>2) { + + __m128i *rxdataF_comp128_i2 = NULL; + __m128i *rxdataF_comp128_i3 = NULL; + __m128i *dl_ch_mag128_i2 = NULL; + __m128i *dl_ch_mag128_i3 = NULL; + __m128i *dl_ch_mag128_i2b = NULL; + __m128i *dl_ch_mag128_i3b = NULL; + __m128i *rho128_i2 = NULL; + __m128i *rho128_i3 = NULL; + + rxdataF_comp128_i2 = (__m128i *)&rxdataF_comp1[2][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_i3 = (__m128i *)&rxdataF_comp1[3][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_i2 = (__m128i *)&dl_ch_mag1[2][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_i3 = (__m128i *)&dl_ch_mag1[3][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_i2b = (__m128i *)&dl_ch_magb1[2][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_i3b = (__m128i *)&dl_ch_magb1[3][symbol*frame_parms->N_RB_DL*12]; + rho128_i2 = (__m128i *) &dl_ch_rho_ext[2][symbol*frame_parms->N_RB_DL*12]; + rho128_i3 = (__m128i *) &dl_ch_rho_ext[3][symbol*frame_parms->N_RB_DL*12]; + + + /*rxdataF_comp*/ + rxdataF_comp128_i2[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_i2[i],1),_mm_srai_epi16(rxdataF_comp128_i3[i],1)); + rxdataF_comp128_i0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_i0[i],1),_mm_srai_epi16(rxdataF_comp128_i2[i],1)); + /*dl_ch_mag*/ + dl_ch_mag128_i2[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_i2[i],1),_mm_srai_epi16(dl_ch_mag128_i3[i],1)); + dl_ch_mag128_i0[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_i0[i],1),_mm_srai_epi16(dl_ch_mag128_i2[i],1)); + /*dl_ch_mag*/ + dl_ch_mag128_i2b[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_i2b[i],1),_mm_srai_epi16(dl_ch_mag128_i3b[i],1)); + dl_ch_mag128_i0b[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_i0b[i],1),_mm_srai_epi16(dl_ch_mag128_i2b[i],1)); + /*rho*/ + rho128_i2[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_i2[i],1),_mm_srai_epi16(rho128_i3[i],1)); + rho128_i0[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_i0[i],1),_mm_srai_epi16(rho128_i2[i],1)); + } } } - _mm_empty(); _m_empty(); } - - void dlsch_scale_channel(int **dl_ch_estimates_ext, LTE_DL_FRAME_PARMS *frame_parms, LTE_UE_DLSCH_t **dlsch_ue, @@ -3464,7 +3660,7 @@ void dlsch_scale_channel(int **dl_ch_estimates_ext, // Determine scaling amplitude based the symbol ch_amp = ((pilots) ? (dlsch_ue[0]->sqrt_rho_b) : (dlsch_ue[0]->sqrt_rho_a)); - + LOG_D(PHY,"Scaling PDSCH Chest in OFDM symbol %d by %d, pilots %d nb_rb %d NCP %d symbol %d\n",symbol_mod,ch_amp,pilots,nb_rb,frame_parms->Ncp,symbol); // printf("Scaling PDSCH Chest in OFDM symbol %d by %d\n",symbol_mod,ch_amp); @@ -3500,7 +3696,6 @@ void dlsch_scale_channel(int **dl_ch_estimates_ext, #endif } - //compute average channel_level on each (TX,RX) antenna pair void dlsch_channel_level(int **dl_ch_estimates_ext, LTE_DL_FRAME_PARMS *frame_parms, @@ -3510,6 +3705,7 @@ void dlsch_channel_level(int **dl_ch_estimates_ext, { #if defined(__x86_64__)||defined(__i386__) + //printf("symbol = %d\n", symbol); short rb; unsigned char aatx,aarx,nre=12,symbol_mod; @@ -3527,21 +3723,23 @@ void dlsch_channel_level(int **dl_ch_estimates_ext, //nb_rb*nre = y * 2^x int16_t x = factor2(nb_rb*nre); int16_t y = (nb_rb*nre)>>x; - //printf("nb_rb*nre = %d = %d * 2^(%d)\n",nb_rb*nre,y,x); for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { - //clear average level + //clear average level + //printf("aatx = %d, aarx = %d, aatx*frame_parms->nb_antennas_rx + aarx] = %d \n", aatx, aarx, aatx*frame_parms->nb_antennas_rx + aarx); + avg128D = _mm_setzero_si128(); // 5 is always a symbol with no pilots for both normal and extended prefix - dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + + dl_ch128=(__m128i *)&dl_ch_estimates_ext[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; for (rb=0;rbnb_antennas_rx + aarx] =(((int32_t*)&avg128D)[0] + + ((int32_t*)&avg128D)[1] + + ((int32_t*)&avg128D)[2] + + ((int32_t*)&avg128D)[3])/y; + } _mm_empty(); _m_empty(); @@ -3588,7 +3785,7 @@ void dlsch_channel_level(int **dl_ch_estimates_ext, avg128D = vdupq_n_s32(0); // 5 is always a symbol with no pilots for both normal and extended prefix - dl_ch128=(int16x4_t *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch128=(int16x4_t *)&dl_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; for (rb=0; rbNcp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) { + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==0)) { dl_ch128+=4; } else { avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[4],dl_ch128[4])); @@ -3615,6 +3812,113 @@ void dlsch_channel_level(int **dl_ch_estimates_ext, */ } + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==0)) + nre=8; + else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==1)) + nre=10; + else + nre=12; + + avg[aatx*frame_parms->nb_antennas_rx + aarx] = (((int32_t*)&avg128D)[0] + + ((int32_t*)&avg128D)[1] + + ((int32_t*)&avg128D)[2] + + ((int32_t*)&avg128D)[3])/(nb_rb*nre); + + //printf("Channel level : %d\n",avg[aatx*(frame_parms->nb_antennas_rx-1) + aarx]); + } +#endif + +} + +void dlsch_channel_level_core(int **dl_ch_estimates_ext, + int32_t *avg, + int n_tx, + int n_rx, + int length, + int start_point) +{ + +#if defined(__x86_64__)||defined(__i386__) + + short ii; + int aatx,aarx; + int length_mod8; + int length2; + __m128i *dl_ch128, avg128D; + + int16_t x = factor2(length); + int16_t y = (length)>>x; + + for (aatx=0; aatx>3; + + for (ii=0;ii=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; + + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) + for (aarx=0; aarxnb_antennas_rx; aarx++) { + //clear average level + avg128D = vdupq_n_s32(0); + // 5 is always a symbol with no pilots for both normal and extended prefix + + dl_ch128=(int16x4_t *)&dl_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + + for (rb=0; rbNcp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) { + dl_ch128+=4; + } else { + avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[4],dl_ch128[4])); + avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[5],dl_ch128[5])); + dl_ch128+=6; + } + } + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) nre=8; @@ -3623,19 +3927,709 @@ void dlsch_channel_level(int **dl_ch_estimates_ext, else nre=12; - avg[(aatx<<1)+aarx] = (((int32_t*)&avg128D)[0] + - ((int32_t*)&avg128D)[1] + - ((int32_t*)&avg128D)[2] + - ((int32_t*)&avg128D)[3])/(nb_rb*nre); + avg[aatx*frame_parms->nb_antennas_rx + aarx] = (((int32_t*)&avg128D)[0] + + ((int32_t*)&avg128D)[1] + + ((int32_t*)&avg128D)[2] + + ((int32_t*)&avg128D)[3])/(nb_rb*nre); - // printf("Channel level : %d\n",avg[(aatx<<1)+aarx]); + //printf("Channel level : %d\n",avg[aatx*(frame_parms->nb_antennas_rx-1) + aarx]); } - - #endif + } -//compute average channel_level of effective (precoded) channel +void dlsch_channel_level_median(int **dl_ch_estimates_ext, + int32_t *median, + int n_tx, + int n_rx, + int length, + int start_point) +{ + +#if defined(__x86_64__)||defined(__i386__) + + short ii; + int aatx,aarx; + int length_mod4; + int length2; + int max = 0, min=0; + int norm_pack; + __m128i *dl_ch128, norm128D; + + int16_t x = factor2(length); + int16_t y = (length)>>x; + + for (aatx=0; aatx>2; + + for (ii=0;ii max) + max = norm_pack; + if (norm_pack < min) + min = norm_pack; + + dl_ch128+=1; + } + + median[aatx*n_rx + aarx] = (max+min)>>1; + + // printf("Channel level median [%d]: %d\n",aatx*n_rx + aarx, median[aatx*n_rx + aarx]); + } + } + + _mm_empty(); + _m_empty(); + +#elif defined(__arm__) + + short rb; + unsigned char aatx,aarx,nre=12,symbol_mod; + int32x4_t norm128D; + int16x4_t *dl_ch128; + + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++){ + for (aarx=0; aarxnb_antennas_rx; aarx++) { + max = 0; + min = 0; + norm128D = vdupq_n_s32(0); + + dl_ch128=(int16x4_t *)&dl_ch_estimates_ext[aatx*n_rx + aarx][start_point]; + + length_mod8=length&3; + length2 = length>>2; + + for (ii=0;ii max) + max = norm_pack; + if (norm_pack < min) + min = norm_pack; + + dl_ch128+=1; + } + + median[aatx*n_rx + aarx] = (max+min)>>1; + + //printf("Channel level median [%d]: %d\n",aatx*n_rx + aarx, median[aatx*n_rx + aarx]); + } + } +#endif + +} + +void mmse_processing_oai(LTE_UE_PDSCH *pdsch_vars, + LTE_DL_FRAME_PARMS *frame_parms, + PHY_MEASUREMENTS *measurements, + unsigned char first_symbol_flag, + MIMO_mode_t mimo_mode, + unsigned short mmse_flag, + int noise_power, + unsigned char symbol, + unsigned short nb_rb){ + + int **rxdataF_ext = pdsch_vars->rxdataF_ext; + int **dl_ch_estimates_ext = pdsch_vars->dl_ch_estimates_ext; + unsigned char *pmi_ext = pdsch_vars->pmi_ext; + int avg_00[frame_parms->nb_antenna_ports_eNB*frame_parms->nb_antennas_rx]; + int avg_01[frame_parms->nb_antenna_ports_eNB*frame_parms->nb_antennas_rx]; + int symbol_mod, length, start_point, nre; + + symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; + + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) + nre=8; + else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB==1)) + nre=10; + else + nre=12; + + length = nre*nb_rb; + start_point = symbol*nb_rb*12; + + + mmse_processing_core(rxdataF_ext, + dl_ch_estimates_ext, + noise_power, + frame_parms->nb_antenna_ports_eNB, + frame_parms->nb_antennas_rx, + length, + start_point); + + + /*dlsch_channel_aver_band(dl_ch_estimates_ext, + frame_parms, + chan_avg, + symbol, + nb_rb); + + + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) + for (aarx=0; aarxnb_antennas_rx; aarx++) { + H[aatx*frame_parms->nb_antennas_rx + aarx] = (float)(chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].r/(32768.0)) + I*(float)(chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].i/(32768.0)); + // printf("H [%d] = (%f, %f) \n", aatx*frame_parms->nb_antennas_rx + aarx, creal(H[aatx*frame_parms->nb_antennas_rx + aarx]), cimag(H[aatx*frame_parms->nb_antennas_rx + aarx])); + }*/ + + if (first_symbol_flag == 1){ + dlsch_channel_level_TM34(dl_ch_estimates_ext, + frame_parms, + pmi_ext, + avg_00, + avg_01, + symbol, + nb_rb, + mmse_flag, + mimo_mode); + + avg_00[0] = (log2_approx(avg_00[0])/2) + dlsch_demod_shift+4;// + 2 ;//+ 4; + avg_01[0] = (log2_approx(avg_01[0])/2) + dlsch_demod_shift+4;// + 2 ;//+ 4; + pdsch_vars->log2_maxh0 = cmax(avg_00[0],0); + pdsch_vars->log2_maxh1 = cmax(avg_01[0],0); + } +} + +void mmse_processing_core(int32_t **rxdataF_ext, + int32_t **dl_ch_estimates_ext, + int noise_power, + int n_tx, + int n_rx, + int length, + int start_point){ + + int aatx, aarx, re; + float imag; + float real; + + + float complex **W_MMSE= malloc(n_tx*n_rx*sizeof(float complex*)); + for (int j=0; j max) + max = fabs(creal(W_MMSE_re[aatx*n_rx + aarx])); + if (fabs(cimag(W_MMSE_re[aatx*n_rx + aarx])) > max) + max = fabs(cimag(W_MMSE_re[aatx*n_rx + aarx])); + } + } + } + one_over_max = 1.0/max; + + for (re=0; re=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; + + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) + nre=8; + else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB==1)) + nre=10; + else + nre=12; + + for (aatx=0; aatxnb_antennas_tx; aatx++){ + for (aarx=0; aarxnb_antennas_rx; aarx++) { + dl_ch128=(__m128i *)&dl_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + avg128D = _mm_setzero_si128(); + // print_shorts("avg128D 1",&avg128D); + + for (rb=0;rbnb_antennas_rx + aarx, nb_rb*nre, rb); + print_shorts("aver dl_ch128",&dl_ch128[0]); + print_shorts("aver dl_ch128",&dl_ch128[1]); + print_shorts("aver dl_ch128",&dl_ch128[2]); + avg128D = _mm_add_epi16(avg128D, dl_ch128[0]);*/ + //print_shorts("avg128D 2",&avg128D); + + avg128D = _mm_add_epi16(avg128D, dl_ch128[1]); + // print_shorts("avg128D 3",&avg128D); + + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) { + dl_ch128+=2; + }else { + avg128D = _mm_add_epi16(avg128D,dl_ch128[2]); + // print_shorts("avg128D 4",&avg128D); + dl_ch128+=3; + } + } + + chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].r =(((int16_t*)&avg128D)[0] + + ((int16_t*)&avg128D)[2] + + ((int16_t*)&avg128D)[4] + + ((int16_t*)&avg128D)[6])/(nb_rb*nre); + // printf("symb %d chan_avg re [%d] = %d\n", symbol, aatx*frame_parms->nb_antennas_rx + aarx, chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].r); + + + + chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].i =(((int16_t*)&avg128D)[1] + + ((int16_t*)&avg128D)[3] + + ((int16_t*)&avg128D)[5] + + ((int16_t*)&avg128D)[7])/(nb_rb*nre); + // printf("symb %d chan_avg im [%d] = %d\n", symbol, aatx*frame_parms->nb_antennas_rx + aarx, chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].i); + + //printf("symb %d chan_avg im [%d] = %d\n", symbol, aatx*frame_parms->nb_antennas_rx + aarx, chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].i); + + + chan_est_avg[aatx*frame_parms->nb_antennas_rx + aarx] = (((int32_t)chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].i)<<16)|(((int32_t)chan_avg[aatx*frame_parms->nb_antennas_rx + aarx].r) & 0xffff); + + //printf("symb %d chan_est_avg [%d] = %d\n", symbol, aatx*frame_parms->nb_antennas_rx + aarx, chan_est_avg[aatx*frame_parms->nb_antennas_rx + aarx]); + + dl_ch128=(__m128i *)&dl_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + + for (rb=0;rbnb_antennas_rx + aarx]); + dl_ch128[1] = _mm_set1_epi32(chan_est_avg[aatx*frame_parms->nb_antennas_rx + aarx]); + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) { + dl_ch128+=2; + }else { + dl_ch128[2] = _mm_set1_epi32(chan_est_avg[aatx*frame_parms->nb_antennas_rx + aarx]); + dl_ch128+=3; + } + } + } + } + + _mm_empty(); + _m_empty(); + +#elif defined(__arm__) +#endif + } + +void rxdataF_to_float(int32_t **rxdataF_ext, + float complex **rxdataF_f, + int n_rx, + int length, + int start_point) +{ + short re; + int aarx; + int16_t imag; + int16_t real; + + for (aarx=0; aarx> 16); + real = (int16_t) (rxdataF_ext[aarx][start_point + re] & 0xffff); + rxdataF_f[aarx][re] = (float)(real/(32768.0)) + I*(float)(imag/(32768.0)); +#ifdef DEBUG_MMSE + if (re==0){ + printf("rxdataF_to_float: aarx = %d, real= %d, imag = %d\n", aarx, real, imag); + //printf("rxdataF_to_float: rxdataF_ext[%d][%d] = %d\n", aarx, start_point + re, rxdataF_ext[aarx][start_point + re]); + //printf("rxdataF_to_float: ant %d, re = %d, rxdataF_f real = %f, rxdataF_f imag = %f \n", aarx, re, creal(rxdataF_f[aarx][re]), cimag(rxdataF_f[aarx][re])); + } +#endif + } + } +} + + + +void chan_est_to_float(int32_t **dl_ch_estimates_ext, + float complex **dl_ch_estimates_ext_f, + int n_tx, + int n_rx, + int length, + int start_point) +{ + short re; + int aatx,aarx; + int16_t imag; + int16_t real; + + for (aatx=0; aatx> 16); + real = (int16_t) (dl_ch_estimates_ext[aatx*n_rx + aarx][start_point+ re] & 0xffff); + dl_ch_estimates_ext_f[aatx*n_rx + aarx][re] = (float)(real/(32768.0)) + I*(float)(imag/(32768.0)); +#ifdef DEBUG_MMSE + if (re==0){ + printf("ant %d, re = %d, real = %d, imag = %d \n", aatx*n_rx + aarx, re, real, imag); + printf("ant %d, re = %d, real = %f, imag = %f \n", aatx*n_rx + aarx, re, creal(dl_ch_estimates_ext_f[aatx*n_rx + aarx][re]), cimag(dl_ch_estimates_ext_f[aatx*n_rx + aarx][re])); + } +#endif + } + } + } +} + +void float_to_chan_est(int32_t **dl_ch_estimates_ext, + float complex **dl_ch_estimates_ext_f, + int n_tx, + int n_rx, + int length, + int start_point) +{ + + short re; + int aarx, aatx; + int16_t imag; + int16_t real; + + for (aatx=0; aatx=1) + imag = 0x7FFF; + else + imag = cimag(dl_ch_estimates_ext_f[aatx*n_rx + aarx][re])*32768; + if (creal(dl_ch_estimates_ext_f[aatx*n_rx + aarx][re])<-1) + real = 0x8000; + else if (creal(dl_ch_estimates_ext_f[aatx*n_rx + aarx][re])>=1) + real = 0x7FFF; + else + real = creal(dl_ch_estimates_ext_f[aatx*n_rx + aarx][re])*32768; + + dl_ch_estimates_ext[aatx*n_rx + aarx][start_point + re] = (((int32_t)imag)<<16)|((int32_t)real & 0xffff); +#ifdef DEBUG_MMSE + if (re==0){ + printf(" float_to_chan_est: chan est real = %f, chan est imag = %f\n",creal(dl_ch_estimates_ext_f[aatx*n_rx + aarx][re]), cimag(dl_ch_estimates_ext_f[aatx*n_rx + aarx][re])); + printf("float_to_chan_est: real fixed = %d, imag fixed = %d\n", real, imag); + printf("float_to_chan_est: ant %d, re = %d, dl_ch_estimates_ext = %d \n", aatx*n_rx + aarx, re, dl_ch_estimates_ext[aatx*n_rx + aarx][start_point + re]); + } +#endif + } + } + } +} + + +void float_to_rxdataF(int32_t **rxdataF_ext, + float complex **rxdataF_f, + int n_tx, + int n_rx, + int length, + int start_point) +{ + + short re; + int aarx; + int16_t imag; + int16_t real; + + for (aarx=0; aarx=1) + imag = 0x7FFF; + else + imag = cimag(rxdataF_f[aarx][re])*32768; + if (creal(rxdataF_f[aarx][re])<-1) + real = 0x8000; + else if (creal(rxdataF_f[aarx][re])>=1) + real = 0x7FFF; + else + real = creal(rxdataF_f[aarx][re])*32768; + rxdataF_ext[aarx][start_point + re] = (((int32_t)imag)<<16)|(((int32_t)real) & 0xffff); +#ifdef DEBUG_MMSE + if (re==0){ + printf(" float_to_rxdataF: real = %f, imag = %f\n",creal(rxdataF_f[aarx][re]), cimag(rxdataF_f[aarx][re])); + printf("float_to_rxdataF: real fixed = %d, imag fixed = %d\n", real, imag); + printf("float_to_rxdataF: ant %d, re = %d, rxdataF_ext = %d \n", aarx, re, rxdataF_ext[aarx][start_point + re]); + } +#endif + } + } +} + + +void mult_mmse_rxdataF(float complex** Wmmse, + float complex** rxdataF_ext_f, + int n_tx, + int n_rx, + int length, + int start_point) +{ + short re; + int aarx, aatx; + + + float complex* rxdata_re = malloc(n_rx*sizeof(float complex)); + float complex* rxdata_mmse_re = malloc(n_rx*sizeof(float complex)); + float complex* Wmmse_re = malloc(n_tx*n_rx*sizeof(float complex)); + + for (re=0;re=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - - //clear average level - avg128D = _mm_setzero_si128(); - avg[0] = 0; - avg[1] = 0; - // 5 is always a symbol with no pilots for both normal and extended prefix - - if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) - nre=8; - else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB==1)) - nre=10; - else - nre=12; - - for (aarx=0; aarxnb_antennas_rx; aarx++) { - dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; - - for (rb=0; rbNcp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) { - dl_ch0_128+=2; - dl_ch1_128+=2; - } - else { - dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[2]); - dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[2]); - - if (mimo_mode==LARGE_CDD) - prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp); - else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1) - prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp); - else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj) - prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp); - - // mmtmpD2 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp); - avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp)); - - dl_ch0_128+=3; - dl_ch1_128+=3; - } - } - - avg[aarx] = (((int*)&avg128D)[0])/(nb_rb*nre) + - (((int*)&avg128D)[1])/(nb_rb*nre) + - (((int*)&avg128D)[2])/(nb_rb*nre) + - (((int*)&avg128D)[3])/(nb_rb*nre); - } - - // choose maximum of the 2 effective channels - avg[0] = cmax(avg[0],avg[1]); - - _mm_empty(); - _m_empty(); - -#elif defined(__arm__) - -#endif -}*/ - //compute average channel_level of effective (precoded) channel void dlsch_channel_level_TM56(int **dl_ch_estimates_ext, LTE_DL_FRAME_PARMS *frame_parms, @@ -6030,84 +6927,84 @@ void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe,unsigned int *c sprintf(fname,"dlsch%d_rxF_r%d_ext0.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_ext0",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb,1,1); if (ue->frame_parms.nb_antennas_rx >1) { sprintf(fname,"dlsch%d_rxF_r%d_ext1.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_ext1",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_ext[1],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_ext[1],12*N_RB_DL*nsymb,1,1); } sprintf(fname,"dlsch%d_ch_r%d_ext00.m",eNB_id,round); sprintf(vname,"dl%d_ch_r%d_ext00",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1); if (ue->transmission_mode[eNB_id]==7){ sprintf(fname,"dlsch%d_bf_ch_r%d.m",eNB_id,round); sprintf(vname,"dl%d_bf_ch_r%d",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_bf_ch_estimates[0],512*nsymb,1,1); - //write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0],512,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_bf_ch_estimates[0],512*nsymb,1,1); + //LOG_M(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0],512,1,1); sprintf(fname,"dlsch%d_bf_ch_r%d_ext00.m",eNB_id,round); sprintf(vname,"dl%d_bf_ch_r%d_ext00",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_bf_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_bf_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1); } if (ue->frame_parms.nb_antennas_rx == 2) { sprintf(fname,"dlsch%d_ch_r%d_ext01.m",eNB_id,round); sprintf(vname,"dl%d_ch_r%d_ext01",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1); } if (ue->frame_parms.nb_antenna_ports_eNB == 2) { sprintf(fname,"dlsch%d_ch_r%d_ext10.m",eNB_id,round); sprintf(vname,"dl%d_ch_r%d_ext10",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1); if (ue->frame_parms.nb_antennas_rx == 2) { sprintf(fname,"dlsch%d_ch_r%d_ext11.m",eNB_id,round); sprintf(vname,"dl%d_ch_r%d_ext11",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1); } } sprintf(fname,"dlsch%d_rxF_r%d_uespec0.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_uespec0",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_uespec_pilots[0],12*N_RB_DL,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_uespec_pilots[0],12*N_RB_DL,1,1); /* - write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1); - write_output("dlsch%d_ch_ext10.m","dl10_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1); - write_output("dlsch%d_ch_ext11.m","dl11_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1); + LOG_M("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1); + LOG_M("dlsch%d_ch_ext10.m","dl10_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1); + LOG_M("dlsch%d_ch_ext11.m","dl11_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1); */ sprintf(fname,"dlsch%d_r%d_rho.m",eNB_id,round); sprintf(vname,"dl_rho_r%d_%d",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_rho_ext[harq_pid][round][0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_rho_ext[harq_pid][round][0],12*N_RB_DL*nsymb,1,1); sprintf(fname,"dlsch%d_r%d_rho2.m",eNB_id,round); sprintf(vname,"dl_rho2_r%d_%d",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_rho2_ext[0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_rho2_ext[0],12*N_RB_DL*nsymb,1,1); sprintf(fname,"dlsch%d_rxF_r%d_comp0.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_comp0",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1); if (ue->frame_parms.nb_antenna_ports_eNB == 2) { sprintf(fname,"dlsch%d_rxF_r%d_comp1.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_comp1",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_comp1[harq_pid][round][0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_comp1[harq_pid][round][0],12*N_RB_DL*nsymb,1,1); } sprintf(fname,"dlsch%d_rxF_r%d_llr.m",eNB_id,round); sprintf(vname,"dl%d_r%d_llr",eNB_id,round); - write_output(fname,vname, ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->llr[0],coded_bits_per_codeword[0],1,0); + LOG_M(fname,vname, ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->llr[0],coded_bits_per_codeword[0],1,0); sprintf(fname,"dlsch%d_r%d_mag1.m",eNB_id,round); sprintf(vname,"dl%d_r%d_mag1",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb,1,1); sprintf(fname,"dlsch%d_r%d_mag2.m",eNB_id,round); sprintf(vname,"dl%d_r%d_mag2",eNB_id,round); - write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb,1,1); + LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb,1,1); // printf("log2_maxh = %d\n",ue->pdsch_vars[eNB_id]->log2_maxh); } diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c index 525c8db676..ea3f100504 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c @@ -642,7 +642,7 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, uint32_t *rxF = (uint32_t*)&rxdataF_comp[0][((int32_t)symbol*frame_parms->N_RB_DL*12)]; uint32_t *llr32; - int i,len; + int len; uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol; /* @@ -681,19 +681,28 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, dlsch_llr, llr32); */ - //printf("ll32p=%p , dlsch_llr=%p, symbol=%d, flag=%d \n", llr32, dlsch_llr, symbol, first_symbol_flag); - for (i=0; iN_RB_DL*12)]; + int32_t *ch_mag = (int32_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; + int32_t *llr32; -#if defined(__x86_64__) || defined(__i386__) - __m128i *rxF = (__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; - __m128i *ch_mag; - __m128i llr128[2]; - uint32_t *llr32; -#elif defined(__arm__) - int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; - int16x8_t *ch_mag; - int16x8_t xmm0; - int16_t *llr16; -#endif - - - int i,len; + int len; unsigned char symbol_mod,len_mod4=0; - -#if defined(__x86_64__) || defined(__i386__) if (first_symbol_flag==1) { - llr32 = (uint32_t*)dlsch_llr; + llr32 = (int32_t*)dlsch_llr; } else { - llr32 = (uint32_t*)*llr32p; + llr32 = (int32_t*)*llr32p; } -#elif defined(__arm__) - if (first_symbol_flag==1) { - llr16 = (int16_t*)dlsch_llr; - } else { - llr16 = (int16_t*)*llr32p; - } -#endif symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; -#if defined(__x86_64__) || defined(__i386__) - ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; -#elif defined(__arm__) - ch_mag = (int16x8_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; -#endif if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { if (frame_parms->nb_antenna_ports_eNB!=1) len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); @@ -881,18 +866,45 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, len>>=2; // length in quad words (4 REs) // printf("len>>=2=%d\n", len); len+=(len_mod4==0 ? 0 : 1); - // printf("len+=%d\n", len); - for (i=0; iN_RB_DL*12)]; - __m128i *ch_mag,*ch_magb; -#elif defined(__arm__) - int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; - int16x8_t *ch_mag,*ch_magb,xmm1,xmm2; -#endif - int i,len,len2; + int32_t *rxF = (int32_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + int32_t *ch_mag = (int32_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; + int32_t *ch_magb = (int32_t*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; + int len,len2; unsigned char symbol_mod,len_mod4; short *llr; int16_t *llr2; @@ -1079,13 +1091,6 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; -#if defined(__x86_64__) || defined(__i386__) - ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; - ch_magb = (__m128i*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; -#elif defined(__arm__) - ch_mag = (int16x8_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; - ch_magb = (int16x8_t*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; -#endif if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { if (frame_parms->nb_antenna_ports_eNB!=1) len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); @@ -1115,18 +1120,49 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, len2=len>>2; // length in quad words (4 REs) len2+=((len_mod4==0)?0:1); - for (i=0; icommon_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); + LOG_M("rxdata0.m","rxd0",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); exit(-1); */ sync_pos = lte_sync_time(ue->common_vars.rxdata, frame_parms, (int *)&ue->common_vars.eNb_id); - // write_output("rxdata1.m","rxd1",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); + // LOG_M("rxdata1.m","rxd1",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); if (sync_pos >= frame_parms->nb_prefix_samples) sync_pos2 = sync_pos - frame_parms->nb_prefix_samples; else @@ -325,7 +325,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) init_frame_parms(&ue->frame_parms,1); lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell); ret = pbch_detection(ue,mode); - // write_output("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); + // LOG_M("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n", @@ -372,7 +372,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) init_frame_parms(&ue->frame_parms,1); lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell); ret = pbch_detection(ue,mode); - // write_output("rxdata3.m","rxd3",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); + // LOG_M("rxdata3.m","rxd3",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n", frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret); @@ -387,6 +387,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) // Now TDD normal prefix frame_parms->Ncp=NORMAL; frame_parms->frame_type=TDD; + frame_parms->tdd_config=1; init_frame_parms(frame_parms,1); if (sync_pos >= frame_parms->nb_prefix_samples) @@ -415,7 +416,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell); ret = pbch_detection(ue,mode); - // write_output("rxdata4.m","rxd4",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); + // LOG_M("rxdata4.m","rxd4",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n", @@ -426,6 +427,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) // Now TDD extended prefix frame_parms->Ncp=EXTENDED; frame_parms->frame_type=TDD; + frame_parms->tdd_config=1; init_frame_parms(frame_parms,1); sync_pos2 = sync_pos - frame_parms->nb_prefix_samples; @@ -452,7 +454,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell); ret = pbch_detection(ue,mode); - // write_output("rxdata5.m","rxd5",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); + // LOG_M("rxdata5.m","rxd5",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n", frame_parms->Nid_cell,metric_tdd_ecp,phase_tdd_ecp,flip_tdd_ecp,ret); @@ -493,17 +495,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) #endif // send sync status to higher layers later when timing offset converge to target timing -#if OAISIM - if (ue->mac_enabled==1) { - LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id); - //mac_resynch(); - dl_phy_sync_success(ue->Mod_id,ue->proc.proc_rxtx[0].frame_rx,0,1);//ue->common_vars.eNb_id); - ue->UE_mode[0] = PRACH; - } - else { - ue->UE_mode[0] = PUSCH; - } -#endif generate_pcfich_reg_mapping(frame_parms); generate_phich_reg_mapping(frame_parms); diff --git a/openair1/PHY/LTE_UE_TRANSPORT/phich_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/phich_ue.c index 669e0937c6..2e999a42bc 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/phich_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/phich_ue.c @@ -369,7 +369,7 @@ void rx_phich(PHY_VARS_UE *ue, if (HI16>0) { //NACK if (ue->ulsch_Msg3_active[eNB_id] == 1) { - LOG_D(PHY,"[UE %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received NAK (%d) nseq %d, ngroup %d\n", + LOG_I(PHY,"[UE %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received NAK (%d) nseq %d, ngroup %d\n", ue->Mod_id,harq_pid, proc->frame_rx, subframe, @@ -379,7 +379,7 @@ void rx_phich(PHY_VARS_UE *ue, ulsch->f_pusch += delta_PUSCH_acc[ulsch->harq_processes[harq_pid]->TPC]; - LOG_D(PHY,"[PUSCH %d] AbsSubframe %d.%d: f_pusch (ACC) %d, adjusting by %d (TPC %d)\n", + LOG_I(PHY,"[PUSCH %d] AbsSubframe %d.%d: f_pusch (ACC) %d, adjusting by %d (TPC %d)\n", harq_pid,proc->frame_rx,subframe,ulsch->f_pusch, delta_PUSCH_acc[ulsch->harq_processes[harq_pid]->TPC], ulsch->harq_processes[harq_pid]->TPC); diff --git a/openair1/PHY/LTE_UE_TRANSPORT/pmch_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/pmch_ue.c index d944491b63..d2cb9a71a9 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/pmch_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/pmch_ue.c @@ -49,40 +49,40 @@ void dump_mch(PHY_VARS_UE *ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,in sprintf(fname,"mch_rxF_ext0.m"); sprintf(vname,"pmch_rxF_ext0"); - write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M(fname,vname,ue->pdsch_vars_MCH[eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb_pmch,1,1); sprintf(fname,"mch_ch_ext00.m"); sprintf(vname,"pmch_ch_ext00"); - write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb_pmch,1,1); /* - write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb_pmch,1,1); - write_output("dlsch%d_ch_ext10.m","dl10_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb_pmch,1,1); - write_output("dlsch%d_ch_ext11.m","dl11_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb_pmch,1,1); - write_output("dlsch%d_rho.m","dl_rho",pdsch_vars[eNB_id]->rho[0],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M("dlsch%d_ch_ext10.m","dl10_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M("dlsch%d_ch_ext11.m","dl11_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M("dlsch%d_rho.m","dl_rho",pdsch_vars[eNB_id]->rho[0],12*N_RB_DL*nsymb_pmch,1,1); */ sprintf(fname,"mch_rxF_comp0.m"); sprintf(vname,"pmch_rxF_comp0"); - write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M(fname,vname,ue->pdsch_vars_MCH[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb_pmch,1,1); sprintf(fname,"mch_rxF_llr.m"); sprintf(vname,"pmch_llr"); - write_output(fname,vname, ue->pdsch_vars_MCH[eNB_id]->llr[0],coded_bits_per_codeword,1,0); + LOG_M(fname,vname, ue->pdsch_vars_MCH[eNB_id]->llr[0],coded_bits_per_codeword,1,0); sprintf(fname,"mch_mag1.m"); sprintf(vname,"pmch_mag1"); - write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb_pmch,1,1); sprintf(fname,"mch_mag2.m"); sprintf(vname,"pmch_mag2"); - write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb_pmch,1,1); + LOG_M(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb_pmch,1,1); - write_output("mch00_ch0.m","pmch00_ch0", + LOG_M("mch00_ch0.m","pmch00_ch0", &(ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]), ue->frame_parms.ofdm_symbol_size*12,1,1); - write_output("rxsig_mch.m","rxs_mch", + LOG_M("rxsig_mch.m","rxs_mch", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti], ue->frame_parms.samples_per_tti,1,1); /* if (PHY_vars_eNB_g) - write_output("txsig_mch.m","txs_mch", + LOG_M("txsig_mch.m","txs_mch", &PHY_vars_eNB_g[0][0]->common_vars.txdata[0][0][subframe*ue->frame_parms.samples_per_tti], ue->frame_parms.samples_per_tti,1,1);*/ } diff --git a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c index 02d0c9aa4f..6d71f5e366 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c @@ -41,6 +41,8 @@ #include "../LTE_TRANSPORT/prach_extern.h" +//#define PRACH_DEBUG 1 + int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint16_t Nf ) { @@ -98,7 +100,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 #else //normal case (simulation) prach_start = subframe*ue->frame_parms.samples_per_tti-ue->N_TA_offset; - LOG_D(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id, + LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id, prach_start, ue->rx_offset, ue->hw_timing_advance, @@ -523,9 +525,9 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 #if defined(PRACH_WRITE_OUTPUT_DEBUG) - write_output("prach_txF0.m","prachtxF0",prachF,prach_len-Ncp,1,1); - write_output("prach_tx0.m","prachtx0",prach+(Ncp<<1),prach_len-Ncp,1,1); - write_output("txsig.m","txs",(int16_t*)(&ue->common_vars.txdata[0][0]),2*ue->frame_parms.samples_per_tti,1,1); + LOG_M("prach_txF0.m","prachtxF0",prachF,prach_len-Ncp,1,1); + LOG_M("prach_tx0.m","prachtx0",prach+(Ncp<<1),prach_len-Ncp,1,1); + LOG_M("txsig.m","txs",(int16_t*)(&ue->common_vars.txdata[0][0]),2*ue->frame_parms.samples_per_tti,1,1); exit(-1); #endif diff --git a/openair1/PHY/LTE_UE_TRANSPORT/rar_tools_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/rar_tools_ue.c index 03df4e7f69..f7451d165e 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/rar_tools_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/rar_tools_ue.c @@ -182,7 +182,7 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue, // initialize power control based on PRACH power ulsch->f_pusch = delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC] + get_deltaP_rampup(ue->Mod_id,ue->CC_id); - LOG_D(PHY,"[UE %d][PUSCH PC] Initializing f_pusch to %d dB, TPC %d (delta_PUSCH_msg2 %d dB), deltaP_rampup %d dB\n", + LOG_I(PHY,"[UE %d][PUSCH PC] Initializing f_pusch to %d dB, TPC %d (delta_PUSCH_msg2 %d dB), deltaP_rampup %d dB\n", ue->Mod_id,ulsch->f_pusch,ulsch->harq_processes[harq_pid]->TPC,delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC], get_deltaP_rampup(ue->Mod_id,ue->CC_id)); diff --git a/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c b/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c index 45508fcff2..e3ad16978d 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c @@ -220,113 +220,6 @@ int generate_srs_tx_emul(PHY_VARS_UE *phy_vars_ue,uint8_t subframe) return(0); } -#if 0 -int generate_srs_rx(LTE_DL_FRAME_PARMS *frame_parms, - SOUNDINGRS_UL_CONFIG_DEDICATED *soundingrs_ul_config_dedicated, - int *txdataF) -{ - - uint16_t msrsb=0,Nb=0,nb,b,msrs0=0,k,Msc_RS,Msc_RS_idx,carrier_pos; - uint16_t *Msc_idx_ptr; - int k0; - uint8_t Bsrs = soundingrs_ul_config_dedicated->srs_Bandwidth; - uint8_t Csrs = frame_parms->soundingrs_ul_config_common.srs_BandwidthConfig; - uint8_t n_RRC = soundingrs_ul_config_dedicated->freqDomainPosition; - uint8_t kTC = soundingrs_ul_config_dedicated->transmissionComb; - - if (frame_parms->N_RB_UL < 41) { - msrs0 = msrsb_6_40[Csrs][0]; - msrsb = msrsb_6_40[Csrs][Bsrs]; - Nb = Nb_6_40[Csrs][Bsrs]; - } else if (frame_parms->N_RB_UL < 61) { - msrs0 = msrsb_41_60[Csrs][0]; - msrsb = msrsb_41_60[Csrs][Bsrs]; - Nb = Nb_41_60[Csrs][Bsrs]; - } else if (frame_parms->N_RB_UL < 81) { - msrs0 = msrsb_61_80[Csrs][0]; - msrsb = msrsb_61_80[Csrs][Bsrs]; - Nb = Nb_61_80[Csrs][Bsrs]; - } else if (frame_parms->N_RB_UL <111) { - msrs0 = msrsb_81_110[Csrs][0]; - msrsb = msrsb_81_110[Csrs][Bsrs]; - Nb = Nb_81_110[Csrs][Bsrs]; - } - - Msc_RS = msrsb * 6; - k0 = (((frame_parms->N_RB_UL>>1)-(msrs0>>1))*12) + kTC; - nb = (4*n_RRC/msrsb)%Nb; - - for (b=0; b<=Bsrs; b++) { - k0 += 2*nb*Msc_RS; - } - - if (k0<0) { - LOG_E(PHY,"Invalid parameter set msrs0=%d, msrsb=%d, Nb=%d => nb=%d, k0=%d\n",msrs0,msrsb,Nb,nb,k0); - return(-1); - } - - Msc_idx_ptr = (uint16_t*) bsearch((uint16_t*) &Msc_RS, (uint16_t*) dftsizes, 33, sizeof(uint16_t), compareints); - - if (Msc_idx_ptr) - Msc_RS_idx = Msc_idx_ptr - dftsizes; - else { - LOG_E(PHY,"generate_srs: index for Msc_RS=%d not found\n",Msc_RS); - return(-1); - } - -#ifdef DEBUG_SRS - LOG_I(PHY,"generate_srs_rx: Msc_RS = %d, Msc_RS_idx = %d, k0=%d\n",Msc_RS, Msc_RS_idx,k0); -#endif - - carrier_pos = (frame_parms->first_carrier_offset + k0) % frame_parms->ofdm_symbol_size; - - for (k=0; k= frame_parms->ofdm_symbol_size) - carrier_pos=1; - } - - /* - for (k=0;k= 0) && (ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1] >= 0)) { - ((short*) txdataF)[4*(symbol_offset + carrier_pos)] = ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+1] = ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+2] = -ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+3] = ONE_OVER_SQRT2_Q15; - } - else if ((ul_ref_sigs[0][0][Msc_RS_idx][k<<1] >= 0) && (ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1] < 0)) { - ((short*) txdataF)[4*(symbol_offset + carrier_pos)] = ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+1] = -ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+2] = ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+3] = ONE_OVER_SQRT2_Q15; - } - else if ((ul_ref_sigs[0][0][Msc_RS_idx][k<<1] < 0) && (ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1] >= 0)) { - ((short*) txdataF)[4*(symbol_offset + carrier_pos)] = -ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+1] = ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+2] = -ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+3] = -ONE_OVER_SQRT2_Q15; - } - else if ((ul_ref_sigs[0][0][Msc_RS_idx][k<<1] < 0) && (ul_ref_sigs[0][0][Msc_RS_idx][(k<<1)+1] < 0)) { - ((short*) txdataF)[4*(symbol_offset + carrier_pos)] = -ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+1] = -ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+2] = ONE_OVER_SQRT2_Q15; - ((short*) txdataF)[4*(symbol_offset + carrier_pos)+3] = -ONE_OVER_SQRT2_Q15; - } - - carrier_pos+=2; - if (carrier_pos >= frame_parms->ofdm_symbol_size) - carrier_pos=0; - } - */ - - // write_output("srs_rx.m","srsrx",txdataF,1024,2,1); - return(0); -} -#endif - #ifdef MAIN main() { diff --git a/openair1/PHY/LTE_UE_TRANSPORT/sss_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/sss_ue.c index aee5d6bcf9..7087b83bca 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/sss_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/sss_ue.c @@ -313,10 +313,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_ pss_ext, sss0_ext,0); /* - write_output("rxsig0.m","rxs0",&ue->common_vars.rxdata[0][0],ue->frame_parms.samples_per_tti,1,1); - write_output("rxdataF0.m","rxF0",&ue->common_vars.rxdataF[0][0],2*14*ue->frame_parms.ofdm_symbol_size,2,1); - write_output("pss_ext0.m","pssext0",pss_ext,72,1,1); - write_output("sss0_ext0.m","sss0ext0",sss0_ext,72,1,1); + LOG_M("rxsig0.m","rxs0",&ue->common_vars.rxdata[0][0],ue->frame_parms.samples_per_tti,1,1); + LOG_M("rxdataF0.m","rxF0",&ue->common_vars.rxdataF[0][0],2*14*ue->frame_parms.ofdm_symbol_size,2,1); + LOG_M("pss_ext0.m","pssext0",pss_ext,72,1,1); + LOG_M("sss0_ext0.m","sss0ext0",sss0_ext,72,1,1); */ // get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS @@ -326,7 +326,7 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_ pss_ext, sss0_ext); - // write_output("sss0_comp0.m","sss0comp0",sss0_ext,72,1,1); + // LOG_M("sss0_comp0.m","sss0comp0",sss0_ext,72,1,1); if (ue->frame_parms.frame_type == FDD) { // FDD @@ -364,7 +364,7 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_ pss_ext, sss5_ext,5); - // write_output("sss5_ext0.m","sss5ext0",sss5_ext,72,1,1); + // LOG_M("sss5_ext0.m","sss5ext0",sss5_ext,72,1,1); // get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS // and do channel estimation and compensation based on PSS diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h index 9b3a95a14a..49b9e8b808 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h +++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h @@ -106,6 +106,22 @@ void qpsk_qpsk(int16_t *stream0_in, @param nb_rb number of RBs for this allocation @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param llr128p pointer to pointer to symbol in dlsch_llr*/ + +void qpsk_llr(int16_t *stream0_in, + int16_t *stream0_out, + int length); + +void qam16_llr(int16_t *stream0_in, + int16_t *chan_magn, + int16_t *llr, + int length); + +void qam64_llr(int16_t *stream0_in, + int16_t *chan_magn, + int16_t *chan_magn_b, + int16_t *llr, + int length); + int32_t dlsch_qpsk_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, int32_t **rxdataF_comp, int32_t **rxdataF_comp_i, @@ -816,6 +832,19 @@ void dlsch_channel_compensation(int32_t **rxdataF_ext, uint8_t output_shift, PHY_MEASUREMENTS *phy_measurements); +void dlsch_channel_compensation_core(int **rxdataF_ext, + int **dl_ch_estimates_ext, + int **dl_ch_mag, + int **dl_ch_magb, + int **rxdataF_comp, + int **rho, + unsigned char n_tx, + unsigned char n_rx, + unsigned char mod_order, + unsigned char output_shift, + int length, + int start_point); + void dlsch_dual_stream_correlation(LTE_DL_FRAME_PARMS *frame_parms, unsigned char symbol, unsigned short nb_rb, @@ -912,6 +941,7 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms, int round, MIMO_mode_t mimo_mode, unsigned short nb_rb, + unsigned short mmse_flag, unsigned char output_shift0, unsigned char output_shift1); @@ -929,6 +959,20 @@ void dlsch_channel_level(int32_t **dl_ch_estimates_ext, uint8_t pilots_flag, uint16_t nb_rb); +void dlsch_channel_level_core(int32_t **dl_ch_estimates_ext, + int32_t *avg, + int n_tx, + int n_rx, + int length, + int start_point); + +void dlsch_channel_level_median(int **dl_ch_estimates_ext, + int32_t *median, + int n_tx, + int n_rx, + int length, + int start_point); + void dlsch_channel_level_TM34(int **dl_ch_estimates_ext, LTE_DL_FRAME_PARMS *frame_parms, @@ -937,6 +981,7 @@ void dlsch_channel_level_TM34(int **dl_ch_estimates_ext, int *avg_1, uint8_t symbol, unsigned short nb_rb, + unsigned int mmse_flag, MIMO_mode_t mimo_mode); @@ -1672,14 +1717,10 @@ double computeRhoB_UE(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated, LTE_UE_DLSCH_t *dlsch_ue); */ -uint8_t get_prach_prb_offset(LTE_DL_FRAME_PARMS *frame_parms, - uint8_t prach_ConfigIndex, +uint8_t get_prach_prb_offset(LTE_DL_FRAME_PARMS *frame_parms, + uint8_t prach_ConfigIndex, uint8_t n_ra_prboffset, uint8_t tdd_mapindex, uint16_t Nf); - - - - /**@}*/ #endif diff --git a/openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c index d913a6f779..211744d459 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c @@ -191,7 +191,6 @@ uint32_t ulsch_encoding(uint8_t *a, // uint16_t offset; uint32_t crc=1; - uint16_t iind; uint32_t A; uint8_t Q_m=0; uint32_t Kr=0,Kr_bytes,r,r_offset=0; @@ -335,22 +334,6 @@ uint32_t ulsch_encoding(uint8_t *a, Kr_bytes = Kr>>3; - // get interleaver index for Turbo code (lookup in Table 5.1.3-3 36-212, V8.6 2009-03, p. 13-14) - if (Kr_bytes<=64) - iind = (Kr_bytes-5); - else if (Kr_bytes <=128) - iind = 59 + ((Kr_bytes-64)>>1); - else if (Kr_bytes <= 256) - iind = 91 + ((Kr_bytes-128)>>2); - else if (Kr_bytes <= 768) - iind = 123 + ((Kr_bytes-256)>>3); - else { - LOG_E(PHY,"ulsch_coding: Illegal codeword size %d!!!\n",Kr_bytes); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT); - return(-1); - } - - #ifdef DEBUG_ULSCH_CODING printf("Generating Code Segment %d (%d bits)\n",r,Kr); // generate codewords @@ -364,22 +347,17 @@ uint32_t ulsch_encoding(uint8_t *a, // offset=0; -#ifdef DEBUG_ULSCH_CODING - printf("Encoding ... iind %d f1 %d, f2 %d\n",iind,f1f2mat_old[iind*2],f1f2mat_old[(iind*2)+1]); -#endif start_meas(te_stats); encoder(ulsch->harq_processes[harq_pid]->c[r], Kr>>3, &ulsch->harq_processes[harq_pid]->d[r][96], - (r==0) ? ulsch->harq_processes[harq_pid]->F : 0, - f1f2mat_old[iind*2], // f1 (see 36212-820, page 14) - f1f2mat_old[(iind*2)+1] // f2 (see 36212-820, page 14) + (r==0) ? ulsch->harq_processes[harq_pid]->F : 0 ); stop_meas(te_stats); #ifdef DEBUG_ULSCH_CODING if (r==0) - write_output("enc_output0.m","enc0",&ulsch->harq_processes[harq_pid]->d[r][96],(3*8*Kr_bytes)+12,1,4); + LOG_M("enc_output0.m","enc0",&ulsch->harq_processes[harq_pid]->d[r][96],(3*8*Kr_bytes)+12,1,4); #endif start_meas(i_stats); @@ -549,7 +527,7 @@ uint32_t ulsch_encoding(uint8_t *a, #ifdef DEBUG_ULSCH_CODING if (r==ulsch->harq_processes[harq_pid]->C-1) - write_output("enc_output.m","enc",ulsch->e,r_offset,1,4); + LOG_M("enc_output.m","enc",ulsch->e,r_offset,1,4); #endif } diff --git a/openair1/PHY/MODULATION/ul_7_5_kHz.c b/openair1/PHY/MODULATION/ul_7_5_kHz.c index 3d1d9c2b04..d27a305a5d 100644 --- a/openair1/PHY/MODULATION/ul_7_5_kHz.c +++ b/openair1/PHY/MODULATION/ul_7_5_kHz.c @@ -83,6 +83,9 @@ void remove_7_5_kHz(RU_t *ru,uint8_t slot) len = frame_parms->samples_per_tti/2; + AssertFatal(slot_offset<10*frame_parms->samples_per_tti, + "slot_offset %d >= %d\n",slot_offset,10*frame_parms->samples_per_tti); + for (aa=0; aanb_rx; aa++) { #if defined(__x86_64__) || defined(__i386__) diff --git a/openair1/PHY/TOOLS/file_output.c b/openair1/PHY/TOOLS/file_output.c deleted file mode 100644 index 1e0b31a47f..0000000000 --- a/openair1/PHY/TOOLS/file_output.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include -#include -#include - - -int write_output(const char *fname,const char *vname,void *data,int length,int dec,char format) -{ - - FILE *fp=NULL; - int i; - - - printf("Writing %d elements of type %d to %s\n",length,format,fname); - - - if (format == 10 || format ==11 || format == 12 || format == 13 || format == 14) { - fp = fopen(fname,"a+"); - } else if (format != 10 && format !=11 && format != 12 && format != 13 && format != 14) { - fp = fopen(fname,"w+"); - } - - - - if (fp== NULL) { - printf("[OPENAIR][FILE OUTPUT] Cannot open file %s\n",fname); - return(-1); - } - - if (format != 10 && format !=11 && format != 12 && format != 13 && format != 14) - fprintf(fp,"%s = [",vname); - - - switch (format) { - case 0: // real 16-bit - - for (i=0; i 0)) - fprintf(fp,"%d + j*(%d),",((short *)data)[i],((short *)data)[i+1]); - else if (i == 2*(length-1)) - fprintf(fp,"%d + j*(%d);",((short *)data)[i],((short *)data)[i+1]); - else if (i == 0) - fprintf(fp,"\n%d + j*(%d),",((short *)data)[i],((short *)data)[i+1]); - - - - } - - break; - - case 11 : //case eren 16 bit real for channel magnitudes: - for (i=0; i 0)) - fprintf(fp,"%d,",((short *)data)[i]); - else if (i == (length-1)) - fprintf(fp,"%d;",((short *)data)[i]); - else if (i == 0) - fprintf(fp,"\n%d,",((short *)data)[i]); - } - - printf("\n erennnnnnnnnnnnnnn: length :%d",length); - break; - - case 12 : // case eren for log2_maxh real unsigned 8 bit - fprintf(fp,"%d \n",((unsigned char *)&data)[0]); - break; - - } - - if (format != 10 && format !=11 && format !=12 && format != 13 && format != 15) { - fprintf(fp,"];\n"); - fclose(fp); - return(0); - } else if (format == 10 || format ==11 || format == 12 || format == 13 || format == 15) { - fclose(fp); - return(0); - } - - return 0; -} diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 9a5a504ec4..4bf6afd1fd 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -2511,25 +2511,6 @@ const static int16_t tw64[96] __attribute__((aligned(32))) = { -23170,-23170,-28898,-15447,-32138,-6393,-32610,3211, -30273,12539,-25330,20787,-18205,27244,-9512,31356 }; - -#if 0 -/* this is defined but not used, let's comment */ -const static int16_t tw64rep[192] __attribute__((aligned(32))) = { -32767,0,32609,-3212,32137,-6393,31356,-9512,32767,0,32609,-3212,32137,-6393,31356,-9512, -30272,-12540,28897,-15447,27244,-18205,25329,-20788,30272,-12540,28897,-15447,27244,-18205,25329,-20788, -23169,-23170,20787,-25330,18204,-27245,15446,-28898,23169,-23170,20787,-25330,18204,-27245,15446,-28898, -12539,-30273,9511,-31357,6392,-32138,3211,-32610,12539,-30273,9511,-31357,6392,-32138,3211,-32610, -32767,0,32137,-6393,30272,-12540,27244,-18205,32767,0,32137,-6393,30272,-12540,27244,-18205, -23169,-23170,18204,-27245,12539,-30273,6392,-32138,23169,-23170,18204,-27245,12539,-30273,6392,-32138, -0,-32767,-6393,-32138,-12540,-30273,-18205,-27245,0,-32767,-6393,-32138,-12540,-30273,-18205,-27245, --23170,-23170,-27245,-18205,-30273,-12540,-32138,-6393,-23170,-23170,-27245,-18205,-30273,-12540,-32138,-6393, -32767,0,31356,-9512,27244,-18205,20787,-25330,32767,0,31356,-9512,27244,-18205,20787,-25330, -12539,-30273,3211,-32610,-6393,-32138,-15447,-28898,12539,-30273,3211,-32610,-6393,-32138,-15447,-28898, --23170,-23170,-28898,-15447,-32138,-6393,-32610,3211,-23170,-23170,-28898,-15447,-32138,-6393,-32610,3211, --30273,12539,-25330,20787,-18205,27244,-9512,31356,-30273,12539,-25330,20787,-18205,27244,-9512,31356 - }; -#endif - const static int16_t tw64a[96] __attribute__((aligned(32))) = { 32767,0,32609,3212,32137,6393,31356,9512, 30272,12540,28897,15447,27244,18205,25329,20788, @@ -2544,24 +2525,6 @@ const static int16_t tw64a[96] __attribute__((aligned(32))) = { -23170,23170,-28898,15447,-32138,6393,-32610,-3211, -30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356 }; -#if 0 -/* this is defined but not used, let's comment */ -const static int16_t tw64arep[192] __attribute__((aligned(32))) = { -32767,0,32609,3212,32137,6393,31356,9512,32767,0,32609,3212,32137,6393,31356,9512, -30272,12540,28897,15447,27244,18205,25329,20788,30272,12540,28897,15447,27244,18205,25329,20788, -23169,23170,20787,25330,18204,27245,15446,28898,23169,23170,20787,25330,18204,27245,15446,28898, -12539,30273,9511,31357,6392,32138,3211,32610,12539,30273,9511,31357,6392,32138,3211,32610, -32767,0,32137,6393,30272,12540,27244,18205,32767,0,32137,6393,30272,12540,27244,18205, -23169,23170,18204,27245,12539,30273,6392,32138,23169,23170,18204,27245,12539,30273,6392,32138, -0,32767,-6393,32138,-12540,30273,-18205,27245,0,32767,-6393,32138,-12540,30273,-18205,27245, --23170,23170,-27245,18205,-30273,12540,-32138,6393,-23170,23170,-27245,18205,-30273,12540,-32138,6393, -32767,0,31356,9512,27244,18205,20787,25330,32767,0,31356,9512,27244,18205,20787,25330, -12539,30273,3211,32610,-6393,32138,-15447,28898,12539,30273,3211,32610,-6393,32138,-15447,28898, --23170,23170,-28898,15447,-32138,6393,-32610,-3211,-23170,23170,-28898,15447,-32138,6393,-32610,-3211, --30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356,-30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356 - }; -#endif - const static int16_t tw64b[96] __attribute__((aligned(32))) = { 0,32767,-3212,32609,-6393,32137,-9512,31356, -12540,30272,-15447,28897,-18205,27244,-20788,25329, @@ -2576,25 +2539,6 @@ const static int16_t tw64b[96] __attribute__((aligned(32))) = { -23170,-23170,-15447,-28898,-6393,-32138,3211,-32610, 12539,-30273,20787,-25330,27244,-18205,31356,-9512 }; - -#if 0 -/* this is defined but not used, let's comment */ -const static int16_t tw64brep[192] __attribute__((aligned(32))) = { -0,32767,-3212,32609,-6393,32137,-9512,31356,0,32767,-3212,32609,-6393,32137,-9512,31356, --12540,30272,-15447,28897,-18205,27244,-20788,25329,-12540,30272,-15447,28897,-18205,27244,-20788,25329, --23170,23169,-25330,20787,-27245,18204,-28898,15446,-23170,23169,-25330,20787,-27245,18204,-28898,15446, --30273,12539,-31357,9511,-32138,6392,-32610,3211,-30273,12539,-31357,9511,-32138,6392,-32610,3211, -0,32767,-6393,32137,-12540,30272,-18205,27244,0,32767,-6393,32137,-12540,30272,-18205,27244, --23170,23169,-27245,18204,-30273,12539,-32138,6392,-23170,23169,-27245,18204,-30273,12539,-32138,6392, --32767,0,-32138,-6393,-30273,-12540,-27245,-18205,-32767,0,-32138,-6393,-30273,-12540,-27245,-18205, --23170,-23170,-18205,-27245,-12540,-30273,-6393,-32138,-23170,-23170,-18205,-27245,-12540,-30273,-6393,-32138, -0,32767,-9512,31356,-18205,27244,-25330,20787,0,32767,-9512,31356,-18205,27244,-25330,20787, --30273,12539,-32610,3211,-32138,-6393,-28898,-15447,-30273,12539,-32610,3211,-32138,-6393,-28898,-15447, --23170,-23170,-15447,-28898,-6393,-32138,3211,-32610,-23170,-23170,-15447,-28898,-6393,-32138,3211,-32610, -12539,-30273,20787,-25330,27244,-18205,31356,-9512,12539,-30273,20787,-25330,27244,-18205,31356,-9512 - }; -#endif - const static int16_t tw64c[96] __attribute__((aligned(32))) = { 0,32767,3212,32609,6393,32137,9512,31356, 12540,30272,15447,28897,18205,27244,20788,25329, @@ -2609,26 +2553,6 @@ const static int16_t tw64c[96] __attribute__((aligned(32))) = { 23170,-23170,15447,-28898,6393,-32138,-3211,-32610, -12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512 }; - -#if 0 -/* this is defined but not used, let's comment */ -const static int16_t tw64crep[192] __attribute__((aligned(32))) = { -0,32767,3212,32609,6393,32137,9512,31356,0,32767,3212,32609,6393,32137,9512,31356, -12540,30272,15447,28897,18205,27244,20788,25329,12540,30272,15447,28897,18205,27244,20788,25329, -23170,23169,25330,20787,27245,18204,28898,15446,23170,23169,25330,20787,27245,18204,28898,15446, -30273,12539,31357,9511,32138,6392,32610,3211,30273,12539,31357,9511,32138,6392,32610,3211, -0,32767,6393,32137,12540,30272,18205,27244,0,32767,6393,32137,12540,30272,18205,27244, -23170,23169,27245,18204,30273,12539,32138,6392,23170,23169,27245,18204,30273,12539,32138,6392, -32767,0,32138,-6393,30273,-12540,27245,-18205,32767,0,32138,-6393,30273,-12540,27245,-18205, -23170,-23170,18205,-27245,12540,-30273,6393,-32138,23170,-23170,18205,-27245,12540,-30273,6393,-32138, -0,32767,9512,31356,18205,27244,25330,20787,0,32767,9512,31356,18205,27244,25330,20787, -30273,12539,32610,3211,32138,-6393,28898,-15447,30273,12539,32610,3211,32138,-6393,28898,-15447, -23170,-23170,15447,-28898,6393,-32138,-3211,-32610,23170,-23170,15447,-28898,6393,-32138,-3211,-32610, --12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512,-12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512 - }; -#endif - - #if defined(__x86_64__) || defined(__i386__) #define simd_q15_t __m128i #define simdshort_q15_t __m64 @@ -3164,8 +3088,8 @@ void dft128(int16_t *x,int16_t *y,int scale) dft64((int16_t*)(xtmp),(int16_t*)ytmp,1); dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1); - /* write_output("dft128a.m","dfta",ytmp,64,1,1); - write_output("dft128b.m","dftb",ytmp+16,64,1,1);*/ + /* LOG_M("dft128a.m","dfta",ytmp,64,1,1); + LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/ for (i=0; i<16; i++) { bfly2_16(ytmpp,ytmpp+16, @@ -3216,7 +3140,7 @@ void dft128(int16_t *x,int16_t *y,int scale) } - /* write_output("dft128out.m","dft128",y,128,1,1); + /* LOG_M("dft128out.m","dft128",y,128,1,1); exit(-1);*/ _mm_empty(); _m_empty(); @@ -3243,15 +3167,15 @@ void dft128(int16_t *x,int16_t *y,int scale) transpose4_ooff_simd256(x256+12,xtmp+6,8); transpose4_ooff_simd256(x256+14,xtmp+7,8); - /* write_output("dft128ina_256.m","dftina",xtmp,64,1,1); - write_output("dft128inb_256.m","dftinb",xtmp+8,64,1,1); + /* LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1); + LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1); */ dft64((int16_t*)(xtmp),(int16_t*)ytmp,1); dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1); - /*write_output("dft128outa_256.m","dftouta",ytmp,64,1,1); - write_output("dft128outb_256.m","dftoutb",ytmp+8,64,1,1); + /*LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1); + LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1); */ for (i=0; i<8; i++) { @@ -3286,7 +3210,7 @@ void dft128(int16_t *x,int16_t *y,int scale) } - /* write_output("dft128.m","dft",y256,128,1,1); + /* LOG_M("dft128.m","dft",y256,128,1,1); exit(-1);*/ } @@ -5487,9 +5411,9 @@ void dft1536(int16_t *input, int16_t *output, int scale) tmpo[2][i] = tmpo[2][i<<1]; }*/ - // write_output("out0.m","o0",tmpo[0],2048,1,1); - // write_output("out1.m","o1",tmpo[1],2048,1,1); - // write_output("out2.m","o2",tmpo[2],2048,1,1); + // LOG_M("out0.m","o0",tmpo[0],2048,1,1); + // LOG_M("out1.m","o1",tmpo[1],2048,1,1); + // LOG_M("out2.m","o2",tmpo[2],2048,1,1); for (i=0,i2=0; i<1024; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i), @@ -5559,10 +5483,10 @@ void idft6144(int16_t *input, int16_t *output) tmpo[2][i] = tmpo[2][i<<1]; }*/ - // write_output("in.m","in",input,6144,1,1); - // write_output("out0.m","o0",tmpo[0],2048,1,1); - // write_output("out1.m","o1",tmpo[1],2048,1,1); - // write_output("out2.m","o2",tmpo[2],2048,1,1); + // LOG_M("in.m","in",input,6144,1,1); + // LOG_M("out0.m","o0",tmpo[0],2048,1,1); + // LOG_M("out1.m","o1",tmpo[1],2048,1,1); + // LOG_M("out2.m","o2",tmpo[2],2048,1,1); for (i=0,i2=0; i<4096; i+=8,i2+=4) { ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), @@ -5570,7 +5494,7 @@ void idft6144(int16_t *input, int16_t *output) (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); } - // write_output("out.m","out",output,6144,1,1); + // LOG_M("out.m","out",output,6144,1,1); _mm_empty(); _m_empty(); @@ -5600,9 +5524,9 @@ void dft6144(int16_t *input, int16_t *output) tmpo[2][i] = tmpo[2][i<<1]; }*/ - // write_output("out0.m","o0",tmpo[0],2048,1,1); - // write_output("out1.m","o1",tmpo[1],2048,1,1); - // write_output("out2.m","o2",tmpo[2],2048,1,1); + // LOG_M("out0.m","o0",tmpo[0],2048,1,1); + // LOG_M("out1.m","o1",tmpo[1],2048,1,1); + // LOG_M("out2.m","o2",tmpo[2],2048,1,1); for (i=0,i2=0; i<4096; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), @@ -5639,9 +5563,9 @@ void dft12288(int16_t *input, int16_t *output) tmpo[2][i] = tmpo[2][i<<1]; }*/ - // write_output("out0.m","o0",tmpo[0],4096,1,1); - // write_output("out1.m","o1",tmpo[1],4096,1,1); - // write_output("out2.m","o2",tmpo[2],4096,1,1); + // LOG_M("out0.m","o0",tmpo[0],4096,1,1); + // LOG_M("out1.m","o1",tmpo[1],4096,1,1); + // LOG_M("out2.m","o2",tmpo[2],4096,1,1); for (i=0,i2=0; i<8192; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), @@ -5670,10 +5594,10 @@ void idft12288(int16_t *input, int16_t *output) idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); /* - write_output("in.m","in",input,12288,1,1); - write_output("out0.m","o0",tmpo[0],4096,1,1); - write_output("out1.m","o1",tmpo[1],4096,1,1); - write_output("out2.m","o2",tmpo[2],4096,1,1); + LOG_M("in.m","in",input,12288,1,1); + LOG_M("out0.m","o0",tmpo[0],4096,1,1); + LOG_M("out1.m","o1",tmpo[1],4096,1,1); + LOG_M("out2.m","o2",tmpo[2],4096,1,1); */ for (i=0,i2=0; i<8192; i+=8,i2+=4) { ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), @@ -5684,7 +5608,7 @@ void idft12288(int16_t *input, int16_t *output) _mm_empty(); _m_empty(); - // write_output("out.m","out",output,6144,1,1); + // LOG_M("out.m","out",output,6144,1,1); } #include "twiddle18432.h" @@ -5765,9 +5689,9 @@ void dft24576(int16_t *input, int16_t *output) tmpo[2][i] = tmpo[2][i<<1]; }*/ - // write_output("out0.m","o0",tmpo[0],8192,1,1); - // write_output("out1.m","o1",tmpo[1],8192,1,1); - // write_output("out2.m","o2",tmpo[2],8192,1,1); + // LOG_M("out0.m","o0",tmpo[0],8192,1,1); + // LOG_M("out1.m","o1",tmpo[1],8192,1,1); + // LOG_M("out2.m","o2",tmpo[2],8192,1,1); for (i=0,i2=0; i<16384; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i), @@ -5777,7 +5701,7 @@ void dft24576(int16_t *input, int16_t *output) _mm_empty(); _m_empty(); - // write_output("out.m","out",output,24576,1,1); + // LOG_M("out.m","out",output,24576,1,1); } void idft24576(int16_t *input, int16_t *output) @@ -5797,10 +5721,10 @@ void idft24576(int16_t *input, int16_t *output) idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); /* - write_output("in.m","in",input,24576,1,1); - write_output("out0.m","o0",tmpo[0],8192,1,1); - write_output("out1.m","o1",tmpo[1],8192,1,1); - write_output("out2.m","o2",tmpo[2],8192,1,1); + LOG_M("in.m","in",input,24576,1,1); + LOG_M("out0.m","o0",tmpo[0],8192,1,1); + LOG_M("out1.m","o1",tmpo[1],8192,1,1); + LOG_M("out2.m","o2",tmpo[2],8192,1,1); */ for (i=0,i2=0; i<16384; i+=8,i2+=4) { @@ -5812,7 +5736,7 @@ void idft24576(int16_t *input, int16_t *output) _mm_empty(); _m_empty(); - // write_output("out.m","out",output,24576,1,1); + // LOG_M("out.m","out",output,24576,1,1); } /// THIS SECTION IS FOR ALL PUSCH DFTS (i.e. radix 2^a * 3^b * 4^c * 5^d) @@ -18996,9 +18920,9 @@ int main(int argc, char**argv) } printf("\n\n64-point (%f cycles, #trials %d)\n",(double)ts.diff/(double)ts.trials,ts.trials); - // write_output("x64.m","x64",x,64,1,1); - write_output("y64.m","y64",y,64,1,1); - write_output("x64.m","x64",x,64,1,1); + // LOG_M("x64.m","x64",x,64,1,1); + LOG_M("y64.m","y64",y,64,1,1); + LOG_M("x64.m","x64",x,64,1,1); /* printf("X: "); @@ -19042,8 +18966,8 @@ int main(int argc, char**argv) } printf("\n\n128-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); - write_output("y128.m","y128",y,128,1,1); - write_output("x128.m","x128",x,128,1,1); + LOG_M("y128.m","y128",y,128,1,1); + LOG_M("x128.m","x128",x,128,1,1); /* printf("X: "); for (i=0;i<32;i++) @@ -19084,8 +19008,8 @@ int main(int argc, char**argv) } printf("\n\n256-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); - write_output("y256.m","y256",y,256,1,1); - write_output("x256.m","x256",x,256,1,1); + LOG_M("y256.m","y256",y,256,1,1); + LOG_M("x256.m","x256",x,256,1,1); memset((void*)&x[0],0,512*sizeof(int32_t)); for (i=2;i<302;i++) { @@ -19109,8 +19033,8 @@ int main(int argc, char**argv) } printf("\n\n512-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); - write_output("y512.m","y512",y,512,1,1); - write_output("x512.m","x512",x,512,1,1); + LOG_M("y512.m","y512",y,512,1,1); + LOG_M("x512.m","x512",x,512,1,1); /* printf("X: "); for (i=0;i<64;i++) @@ -19144,8 +19068,8 @@ int main(int argc, char**argv) } printf("\n\n1024-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); - write_output("y1024.m","y1024",y,1024,1,1); - write_output("x1024.m","x1024",x,1024,1,1); + LOG_M("y1024.m","y1024",y,1024,1,1); + LOG_M("x1024.m","x1024",x,1024,1,1); memset((void*)x,0,2048*sizeof(int32_t)); for (i=2;i<1202;i++) { @@ -19169,8 +19093,8 @@ int main(int argc, char**argv) } printf("\n\n2048-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); - write_output("y2048.m","y2048",y,2048,1,1); - write_output("x2048.m","x2048",x,2048,1,1); + LOG_M("y2048.m","y2048",y,2048,1,1); + LOG_M("x2048.m","x2048",x,2048,1,1); memset((void*)x,0,2048*sizeof(int32_t)); for (i=2;i<2402;i++) { @@ -19194,8 +19118,8 @@ int main(int argc, char**argv) } printf("\n\n4096-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); - write_output("y4096.m","y4096",y,4096,1,1); - write_output("x4096.m","x4096",x,4096,1,1); + LOG_M("y4096.m","y4096",y,4096,1,1); + LOG_M("x4096.m","x4096",x,4096,1,1); memset((void*)x,0,8192*sizeof(int32_t)); for (i=2;i<4802;i++) { @@ -19218,8 +19142,8 @@ int main(int argc, char**argv) } printf("\n\n8192-point(%f cycles)\n",(double)ts.diff/(double)ts.trials); - write_output("y8192.m","y8192",y,8192,1,1); - write_output("x8192.m","x8192",x,8192,1,1); + LOG_M("y8192.m","y8192",y,8192,1,1); + LOG_M("x8192.m","x8192",x,8192,1,1); return(0); } diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index e3b04babdc..e09cfb5ed8 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -282,17 +282,6 @@ void bit8_txmux(int32_t length,int32_t offset); void bit8_rxdemux(int32_t length,int32_t offset); -/*!\fn int32_t write_output(const char *fname, const char *vname, void *data, int length, int dec, char format); -\brief Write output file from signal data -@param fname output file name -@param vname output vector name (for MATLAB/OCTAVE) -@param data point to data -@param length length of data vector to output -@param dec decimation level -@param format data format (0 = real 16-bit, 1 = complex 16-bit,2 real 32-bit, 3 complex 32-bit,4 = real 8-bit, 5 = complex 8-bit) -*/ -int32_t write_output(const char *fname, const char *vname, void *data, int length, int dec, char format); - void Zero_Buffer(void *,uint32_t); void Zero_Buffer_nommx(void *buf,uint32_t length); diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h index e36b88c036..f079794a34 100644 --- a/openair1/PHY/defs_UE.h +++ b/openair1/PHY/defs_UE.h @@ -69,6 +69,38 @@ #include #include "assertions.h" +#ifdef MEX +#include "mex.h" +# define msg mexPrintf +# undef LOG_D +# undef LOG_E +# undef LOG_I +# undef LOG_N +# undef LOG_T +# undef LOG_W +# undef LOG_M +# define LOG_D(x, ...) mexPrintf(__VA_ARGS__) +# define LOG_E(x, ...) mexPrintf(__VA_ARGS__) +# define LOG_I(x, ...) mexPrintf(__VA_ARGS__) +# define LOG_N(x, ...) mexPrintf(__VA_ARGS__) +# define LOG_T(x, ...) mexPrintf(__VA_ARGS__) +# define LOG_W(x, ...) mexPrintf(__VA_ARGS__) +# define LOG_M(x, ...) mexPrintf(__VA_ARGS__) +#else +# ifdef OPENAIR2 +# if ENABLE_RAL +# include "collection/hashtable/hashtable.h" +# include "COMMON/ral_messages_types.h" +# include "UTIL/queue.h" +# endif +# include "log.h" +# define msg(aRGS...) LOG_D(PHY, ##aRGS) +# else +# define msg printf +# endif +#endif + + /// Context data structure for RX/TX portion of subframe processing typedef struct { @@ -161,12 +193,12 @@ typedef struct { UE_rxtx_proc_t proc_rxtx[RX_NB_TH]; } UE_proc_t; -/// Panos: Structure holding timer_thread related elements (phy_stub_UE mode) +/// Structure holding timer_thread related elements (phy_stub_UE mode) typedef struct { pthread_t pthread_timer; - /// Panos: mutex for waiting SF ticking + /// mutex for waiting SF ticking pthread_mutex_t mutex_ticking; - /// Panos: \brief ticking var for ticking thread. + /// \brief ticking var for ticking thread. /// \internal This variable is protected by \ref mutex_ticking. int ticking_var; /// condition variable for timer_thread; @@ -273,13 +305,13 @@ typedef struct { /// - first index: rx antenna [0..nb_antennas_rx[ /// - second index: symbol [0..28*ofdm_symbol_size[ int32_t **rxdataF; - + /// \brief Hold the channel estimates in frequency domain. /// - first index: eNB id [0..6] (hard coded) /// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx /// - third index: samples? [0..symbols_per_tti*(ofdm_symbol_size+LTE_CE_FILTER_LENGTH)[ int32_t **dl_ch_estimates[7]; - + /// \brief Hold the channel estimates in time domain (used for tracking). /// - first index: eNB id [0..6] (hard coded) /// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx @@ -848,7 +880,7 @@ typedef struct { /// RF and Interface devices per CC - openair0_device rfdevice; + openair0_device rfdevice; } PHY_VARS_UE; /* this structure is used to pass both UE phy vars and diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h index c253488a20..1387c78995 100644 --- a/openair1/PHY/defs_common.h +++ b/openair1/PHY/defs_common.h @@ -72,13 +72,11 @@ #include -#include "targets/ARCH/COMMON/common_lib.h" #include "targets/COMMON/openairinterface5g_limits.h" #include "types.h" #include "nfapi_interface.h" //#include "defs.h" -#include "openair2/COMMON/platform_types.h" #define RX_NB_TH_MAX 2 #define RX_NB_TH 2 @@ -159,7 +157,7 @@ typedef struct { PRACH_CONFIG_INFO prach_ConfigInfo; } PRACH_CONFIG_COMMON; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// PRACH-eMTC-Config from 36.331 RRC spec typedef struct { @@ -192,7 +190,7 @@ typedef struct { /// prach_Config_enabled=1 means enabled. \vr{[0..1]} uint8_t prach_Config_enabled; /// PRACH Configuration Information -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) PRACH_eMTC_CONFIG_INFO prach_ConfigInfo; #endif } PRACH_eMTC_CONFIG_COMMON; @@ -644,7 +642,7 @@ typedef struct { uint8_t nb_antenna_ports_eNB; /// PRACH_CONFIG PRACH_CONFIG_COMMON prach_config_common; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// PRACH_eMTC_CONFIG PRACH_eMTC_CONFIG_COMMON prach_emtc_config_common; #endif @@ -678,7 +676,8 @@ typedef struct { uint16_t phich_reg[MAX_NUM_PHICH_GROUPS][3]; struct MBSFN_SubframeConfig *mbsfn_SubframeConfig[MAX_MBSFN_AREA]; - + /// for fair RR scheduler + uint32_t ue_multiple_max; } LTE_DL_FRAME_PARMS; typedef enum { @@ -958,13 +957,11 @@ extern int sync_var; #define DECODE_NUM_FPTR 13 -typedef uint8_t(*decoder_if_t)(int16_t *y, +typedef uint8_t(decoder_if_t)(int16_t *y, int16_t *y2, uint8_t *decoded_bytes, uint8_t *decoded_bytes2, uint16_t n, - uint16_t f1, - uint16_t f2, uint8_t max_iterations, uint8_t crc_type, uint8_t F, @@ -976,17 +973,15 @@ typedef uint8_t(*decoder_if_t)(int16_t *y, time_stats_t *intl1_stats, time_stats_t *intl2_stats); -typedef uint8_t(*encoder_if_t)(uint8_t *input, +typedef uint8_t(encoder_if_t)(uint8_t *input, uint16_t input_length_bytes, uint8_t *output, - uint8_t F, - uint16_t interleaver_f1, - uint16_t interleaver_f2); + uint8_t F); static inline void wait_sync(char *thread_name) { - printf( "waiting for sync (%s)\n",thread_name); + printf( "waiting for sync (%s,%d/%p,%p,%p)\n",thread_name,sync_var,&sync_var,&sync_cond,&sync_mutex); pthread_mutex_lock( &sync_mutex ); while (sync_var<0) diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h index 8aea1dcd27..c58fffe0ef 100644 --- a/openair1/PHY/defs_eNB.h +++ b/openair1/PHY/defs_eNB.h @@ -229,6 +229,34 @@ typedef struct RU_proc_t_s { int num_slaves; /// array of pointers to slaves struct RU_proc_t_s **slave_proc; +#ifdef PHY_TX_THREAD + /// pthread structure for PRACH thread + pthread_t pthread_phy_tx; + pthread_mutex_t mutex_phy_tx; + pthread_cond_t cond_phy_tx; + /// \internal This variable is protected by \ref mutex_phy_tx. + int instance_cnt_phy_tx; + /// frame to act upon for transmission + int frame_phy_tx; + /// subframe to act upon for transmission + int subframe_phy_tx; + /// timestamp to send to "slave rru" + openair0_timestamp timestamp_phy_tx; + /// pthread structure for RF TX thread + pthread_t pthread_rf_tx; + pthread_mutex_t mutex_rf_tx; + pthread_cond_t cond_rf_tx; + /// \internal This variable is protected by \ref mutex_rf_tx. + int instance_cnt_rf_tx; +#endif +#if defined(PRE_SCD_THREAD) + pthread_t pthread_pre_scd; + /// condition variable for time processing thread + pthread_cond_t cond_pre_scd; + /// mutex for time thread + pthread_mutex_t mutex_pre_scd; + int instance_pre_scd; +#endif /// pipeline ready state int ru_rx_ready; int ru_tx_ready; @@ -332,7 +360,7 @@ typedef struct RU_t_s{ int (*wakeup_rxtx)(struct PHY_VARS_eNB_s *eNB, struct RU_t_s *ru); /// function pointer to wakeup routine in lte-enb. void (*wakeup_prach_eNB)(struct PHY_VARS_eNB_s *eNB,struct RU_t_s *ru,int frame,int subframe); -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// function pointer to wakeup routine in lte-enb. void (*wakeup_prach_eNB_br)(struct PHY_VARS_eNB_s *eNB,struct RU_t_s *ru,int frame,int subframe); #endif @@ -457,7 +485,7 @@ typedef struct RRU_config_s { int prach_FreqOffset[MAX_BANDS_PER_RRU]; /// prach_ConfigIndex for IF4p5 int prach_ConfigIndex[MAX_BANDS_PER_RRU]; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) int emtc_prach_CElevel_enable[MAX_BANDS_PER_RRU][4]; /// emtc_prach_FreqOffset for IF4p5 per CE Level int emtc_prach_FreqOffset[MAX_BANDS_PER_RRU][4]; @@ -592,7 +620,7 @@ typedef struct { int32_t **prach_ifft[4]; /// repetition number -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// indicator of first frame in a group of PRACH repetitions int first_frame[4]; /// current repetition for each CE level @@ -679,7 +707,7 @@ typedef struct eNB_proc_t_s { int subframe_rx; /// subframe to act upon for PRACH int subframe_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// subframe to act upon for reception of prach BL/CE UEs int subframe_prach_br; #endif @@ -689,7 +717,7 @@ typedef struct eNB_proc_t_s { int frame_tx; /// frame to act upon for PRACH int frame_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// frame to act upon for PRACH BL/CE UEs int frame_prach_br; #endif @@ -699,7 +727,7 @@ typedef struct eNB_proc_t_s { int instance_cnt_te; /// \internal This variable is protected by \ref mutex_prach. int instance_cnt_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// \internal This variable is protected by \ref mutex_prach for BL/CE UEs. int instance_cnt_prach_br; #endif @@ -721,7 +749,7 @@ typedef struct eNB_proc_t_s { pthread_attr_t attr_single; /// pthread attributes for prach processing thread pthread_attr_t attr_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// pthread attributes for prach processing thread BL/CE UEs pthread_attr_t attr_prach_br; #endif @@ -735,7 +763,7 @@ typedef struct eNB_proc_t_s { struct sched_param sched_param_single; /// scheduling parameters for prach thread struct sched_param sched_param_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// scheduling parameters for prach thread struct sched_param sched_param_prach_br; #endif @@ -747,7 +775,7 @@ typedef struct eNB_proc_t_s { pthread_t pthread_te; /// pthread structure for PRACH thread pthread_t pthread_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// pthread structure for PRACH thread BL/CE UEs pthread_t pthread_prach_br; #endif @@ -757,7 +785,7 @@ typedef struct eNB_proc_t_s { pthread_cond_t cond_te; /// condition variable for PRACH processing thread; pthread_cond_t cond_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// condition variable for PRACH processing thread BL/CE UEs; pthread_cond_t cond_prach_br; #endif @@ -769,7 +797,7 @@ typedef struct eNB_proc_t_s { pthread_mutex_t mutex_te; /// mutex for PRACH thread pthread_mutex_t mutex_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// mutex for PRACH thread for BL/CE UEs pthread_mutex_t mutex_prach_br; #endif @@ -785,7 +813,7 @@ typedef struct eNB_proc_t_s { int RU_mask; /// mask for RUs serving eNB (PRACH) int RU_mask_prach; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// mask for RUs serving eNB (PRACH) int RU_mask_prach_br; #endif diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index 8ffe1fabf4..d649dce100 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -33,11 +33,6 @@ #ifndef __PHY_IMPLEMENTATION_DEFS_LTE_H__ #define __PHY_IMPLEMENTATION_DEFS_LTE_H__ - - - - - typedef struct { /// \brief Holds the transmit data in the frequency domain. /// - first index: rx antenna [0..nb_antennas_rx[ @@ -73,9 +68,4 @@ typedef struct { int32_t **tdd_calib_coeffs; } RU_COMMON; - - - - - #endif diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h index 8b31b60162..df1f6f4693 100644 --- a/openair1/PHY/impl_defs_top.h +++ b/openair1/PHY/impl_defs_top.h @@ -287,9 +287,9 @@ typedef struct { #ifndef malloc16 # ifdef __AVX2__ -# define malloc16(x) memalign(32,x) +# define malloc16(x) memalign(32,x+32) # else -# define malloc16(x) memalign(16,x) +# define malloc16(x) memalign(16,x+16) # endif #endif #define free16(y,x) free(y) @@ -306,9 +306,9 @@ typedef struct { static inline void* malloc16_clear( size_t size ) { #ifdef __AVX2__ - void* ptr = memalign(32, size); + void* ptr = memalign(32, size+32); #else - void* ptr = memalign(16, size); + void* ptr = memalign(16, size+16); #endif DevAssert(ptr); memset( ptr, 0, size ); diff --git a/openair1/PHY/phy_extern.h b/openair1/PHY/phy_extern.h index 4cb3cc538f..ece40bd7b4 100644 --- a/openair1/PHY/phy_extern.h +++ b/openair1/PHY/phy_extern.h @@ -70,7 +70,6 @@ extern char mode_string[4][20]; -extern unsigned char NB_RU; #ifndef OPENAIR2 extern unsigned char NB_eNB_INST; diff --git a/openair1/PHY/phy_extern_ue.h b/openair1/PHY/phy_extern_ue.h index 98dbfb886e..964c9977b3 100644 --- a/openair1/PHY/phy_extern_ue.h +++ b/openair1/PHY/phy_extern_ue.h @@ -65,7 +65,6 @@ extern int flagMag; extern char mode_string[4][20]; -extern unsigned char NB_RU; #ifndef OPENAIR2 extern unsigned char NB_eNB_INST; diff --git a/openair1/PHY/phy_vars.h b/openair1/PHY/phy_vars.h index 783a151046..ea7d2e5033 100644 --- a/openair1/PHY/phy_vars.h +++ b/openair1/PHY/phy_vars.h @@ -38,7 +38,6 @@ int16_t *primary_synch1_time; int16_t *primary_synch2_time; -#include "PHY/CODING/coding_vars.h" #include "PHY/LTE_TRANSPORT/transport_vars.h" #include "PHY/MODULATION/modulation_vars.h" @@ -67,7 +66,6 @@ char mode_string[4][20] = {"NOT SYNCHED","PRACH","RAR","PUSCH"}; #include "SIMULATION/ETH_TRANSPORT/vars.h" -unsigned char NB_RU=0; #ifndef OPENAIR2 unsigned char NB_eNB_INST=0; diff --git a/openair1/PHY/phy_vars_ue.h b/openair1/PHY/phy_vars_ue.h index c323d1eade..0d29b03f63 100644 --- a/openair1/PHY/phy_vars_ue.h +++ b/openair1/PHY/phy_vars_ue.h @@ -39,7 +39,6 @@ int16_t *primary_synch1_time; int16_t *primary_synch2_time; -#include "PHY/CODING/coding_vars.h" //PHY_VARS *PHY_vars; #ifndef OCP_FRAMEWORK @@ -61,7 +60,6 @@ char mode_string[4][20] = {"NOT SYNCHED","PRACH","RAR","PUSCH"}; #include "SIMULATION/ETH_TRANSPORT/vars.h" -unsigned char NB_RU=0; #ifndef OPENAIR2 unsigned char NB_eNB_INST=0; diff --git a/openair1/SCHED/fapi_l1.c b/openair1/SCHED/fapi_l1.c index 798a279c90..ad72c3d9f5 100644 --- a/openair1/SCHED/fapi_l1.c +++ b/openair1/SCHED/fapi_l1.c @@ -157,41 +157,35 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr int harq_pid; UE_id = find_dlsch(rel8->rnti,eNB,SEARCH_EXIST_OR_FREE); - AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n"); - AssertFatal(UE_id= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX); + if( (UE_id<0) || (UE_id>=NUMBER_OF_UE_MAX) ){ + LOG_E(PHY,"illegal UE_id found!!! rnti %04x UE_id %d\n",rel8->rnti,UE_id); + return; + } + //AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n"); + //AssertFatal(UE_id= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX); dlsch0 = eNB->dlsch[UE_id][0]; dlsch1 = eNB->dlsch[UE_id][1]; #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - if ((rel13->pdsch_payload_type < 2) && (rel13->ue_type>0)) dlsch0->harq_ids[subframe] = 0; + if ((rel13->pdsch_payload_type < 2) && (rel13->ue_type>0)) dlsch0->harq_ids[frame%2][subframe] = 0; #endif - harq_pid = dlsch0->harq_ids[subframe]; -/*LOG_I(PHY,"handle_nfapi_dlsch_pdu subframe = %d harq_ids = [%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]\n", subframe,dlsch0->harq_ids[0], - dlsch0->harq_ids[1], - dlsch0->harq_ids[2], - dlsch0->harq_ids[3], - dlsch0->harq_ids[4], - dlsch0->harq_ids[5], - dlsch0->harq_ids[6], - dlsch0->harq_ids[7], - dlsch0->harq_ids[8], - dlsch0->harq_ids[9]);*/////////////*********added + harq_pid = dlsch0->harq_ids[frame%2][subframe]; AssertFatal((harq_pid>=0) && (harq_pid<8),"harq_pid %d not in 0...7 frame:%d subframe:%d subframe(TX):%d rnti:%x UE_id:%d dlsch0[harq_ids:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]\n", harq_pid, frame,subframe, proc->subframe_tx,rel8->rnti,UE_id, - dlsch0->harq_ids[0], - dlsch0->harq_ids[1], - dlsch0->harq_ids[2], - dlsch0->harq_ids[3], - dlsch0->harq_ids[4], - dlsch0->harq_ids[5], - dlsch0->harq_ids[6], - dlsch0->harq_ids[7], - dlsch0->harq_ids[8], - dlsch0->harq_ids[9] + dlsch0->harq_ids[frame%2][0], + dlsch0->harq_ids[frame%2][1], + dlsch0->harq_ids[frame%2][2], + dlsch0->harq_ids[frame%2][3], + dlsch0->harq_ids[frame%2][4], + dlsch0->harq_ids[frame%2][5], + dlsch0->harq_ids[frame%2][6], + dlsch0->harq_ids[frame%2][7], + dlsch0->harq_ids[frame%2][8], + dlsch0->harq_ids[frame%2][9] ); dlsch0_harq = dlsch0->harq_processes[harq_pid]; dlsch1_harq = dlsch1->harq_processes[harq_pid]; @@ -200,11 +194,19 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr // compute DL power control parameters eNB->pdsch_config_dedicated[UE_id].p_a = rel8->pa; +#ifdef PHY_TX_THREAD + if (dlsch0->active[proc->subframe_tx]){ +# else if (dlsch0->active){ +#endif computeRhoA_eNB(rel8->pa, dlsch0,dlsch0_harq->dl_power_off, eNB->frame_parms.nb_antenna_ports_eNB); computeRhoB_eNB(rel8->pa,eNB->frame_parms.pdsch_config_common.p_b,eNB->frame_parms.nb_antenna_ports_eNB,dlsch0,dlsch0_harq->dl_power_off); } +#ifdef PHY_TX_THREAD + if (dlsch1->active[proc->subframe_tx]){ +#else if (dlsch1->active){ +#endif computeRhoA_eNB(rel8->pa, dlsch1,dlsch1_harq->dl_power_off, eNB->frame_parms.nb_antenna_ports_eNB); computeRhoB_eNB(rel8->pa,eNB->frame_parms.pdsch_config_common.p_b,eNB->frame_parms.nb_antenna_ports_eNB,dlsch1,dlsch1_harq->dl_power_off); } @@ -212,10 +214,17 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr dlsch0_harq->pdsch_start = eNB->pdcch_vars[subframe & 1].num_pdcch_symbols; if (dlsch0_harq->round==0) { //get pointer to SDU if this a new SDU - AssertFatal(sdu!=NULL,"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d subframe %d]: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d : sdu is null for pdu_index %d dlsch0_harq[round:%d SFN/SF:%d%d pdu:%p mcs:%d ndi:%d pdschstart:%d]\n", - frame,subframe, - proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid, - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index,dlsch0_harq->round,dlsch0_harq->frame,dlsch0_harq->subframe,dlsch0_harq->pdu,dlsch0_harq->mcs,dlsch0_harq->ndi,dlsch0_harq->pdsch_start); + if(sdu == NULL) { + LOG_E(PHY,"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d subframe %d]: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d : sdu is null for pdu_index %d dlsch0_harq[round:%d SFN/SF:%d%d pdu:%p mcs:%d ndi:%d pdschstart:%d]\n", + frame,subframe, + proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid, + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index,dlsch0_harq->round,dlsch0_harq->frame,dlsch0_harq->subframe,dlsch0_harq->pdu,dlsch0_harq->mcs,dlsch0_harq->ndi,dlsch0_harq->pdsch_start); + return; + } + //AssertFatal(sdu!=NULL,"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d subframe %d]: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d : sdu is null for pdu_index %d dlsch0_harq[round:%d SFN/SF:%d%d pdu:%p mcs:%d ndi:%d pdschstart:%d]\n", + // frame,subframe, + // proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid, + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index,dlsch0_harq->round,dlsch0_harq->frame,dlsch0_harq->subframe,dlsch0_harq->pdu,dlsch0_harq->mcs,dlsch0_harq->ndi,dlsch0_harq->pdsch_start); if (rel8->rnti != 0xFFFF) LOG_D(PHY,"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d, subframe %d]: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d\n", frame,subframe,proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid); if (codeword_index == 0) dlsch0_harq->pdu = sdu; @@ -228,7 +237,11 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr } #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) +#ifdef PHY_TX_THREAD + dlsch0_harq->sib1_br_flag=0; +#else dlsch0->sib1_br_flag=0; +#endif if ((rel13->pdsch_payload_type <2) && (rel13->ue_type>0)) { // this is a BR/CE UE and SIB1-BR/SI-BR dlsch0->rnti = 0xFFFF; @@ -236,7 +249,11 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr dlsch0->Mdlharq = 4; dlsch0->Nsoft = 25344; +#ifdef PHY_TX_THREAD + if (rel13->pdsch_payload_type == 0) dlsch0_harq->sib1_br_flag=1; +#else if (rel13->pdsch_payload_type == 0) dlsch0->sib1_br_flag=1; +#endif // configure PDSCH switch (eNB->frame_parms.N_RB_DL) { @@ -263,7 +280,11 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr dlsch0_harq->rb_alloc[3] = localRIV2alloc_LUT100_3[rel8->resource_block_coding]; } +#ifdef PHY_TX_THREAD + dlsch0->active[proc->subframe_tx]= 1; +#else dlsch0->active = 1; +#endif dlsch0_harq->nb_rb = 6; dlsch0_harq->vrb_type = LOCALIZED; @@ -278,12 +299,21 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_pr dlsch0_harq->codeword = 0; dlsch0_harq->pdsch_start = rel10->pdsch_start; } +#ifdef PHY_TX_THREAD + dlsch0_harq->i0 = rel13->initial_transmission_sf_io; +#else dlsch0->i0 = rel13->initial_transmission_sf_io; #endif +#endif + #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) LOG_D(PHY,"dlsch->i0:%04x dlsch0_harq[pdsch_start:%d nb_rb:%d vrb_type:%d rvidx:%d Nl:%d mimo_mode:%d dl_power_off:%d round:%d status:%d TBS:%d Qm:%d codeword:%d rb_alloc:%d] rel8[length:%d]\n", +#ifdef PHY_TX_THREAD + dlsch0_harq->i0, +#else dlsch0->i0, +#endif dlsch0_harq->pdsch_start, dlsch0_harq->nb_rb, dlsch0_harq->vrb_type, dlsch0_harq->rvidx, dlsch0_harq->Nl, dlsch0_harq->mimo_mode, dlsch0_harq->dl_power_off, dlsch0_harq->round, dlsch0_harq->status, dlsch0_harq->TBS, dlsch0_harq->Qm, dlsch0_harq->codeword, dlsch0_harq->rb_alloc[0], rel8->length ); @@ -316,6 +346,10 @@ void handle_ulsch_harq_pdu( ulsch_harq->subframe = subframe; ulsch_harq->O_ACK = harq_information->harq_information_rel10.harq_size; ulsch->beta_offset_harqack_times8 = to_beta_offset_harqack[harq_information->harq_information_rel10.delta_offset_harq]; + if (eNB->frame_parms.frame_type == TDD) { + if (harq_information->harq_information_rel10.ack_nack_mode==0) //bundling + ulsch->bundling = 1; + } } uint16_t to_beta_offset_ri[16]={9,13,16,20,25,32,40,50,64,80,101,127,160,0,0,0}; @@ -540,8 +574,7 @@ void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, uint16_t frame,uint8_t subframe,uint8_t srs_present) { nfapi_ul_config_ulsch_pdu_rel8_t *rel8 = &ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8; - - int8_t UE_id; + int16_t UE_id; // check if we have received a dci for this ue and ulsch descriptor is configured @@ -550,14 +583,14 @@ void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, "No existing UE ULSCH for rnti %x\n",rel8->rnti); LOG_D(PHY,"Applying UL config for UE %d, rnti %x for frame %d, subframe %d, modulation %d, rvidx %d\n", UE_id,rel8->rnti,frame,subframe,rel8->modulation_type,rel8->redundancy_version); - fill_ulsch(eNB,&ul_config_pdu->ulsch_pdu,frame,subframe); + fill_ulsch(eNB,UE_id,&ul_config_pdu->ulsch_pdu,frame,subframe); } else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE) { AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE))>=0, "No available UE ULSCH for rnti %x\n",ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti); - fill_ulsch(eNB,&ul_config_pdu->ulsch_harq_pdu.ulsch_pdu,frame,subframe); + fill_ulsch(eNB,UE_id,&ul_config_pdu->ulsch_harq_pdu.ulsch_pdu,frame,subframe); handle_ulsch_harq_pdu(eNB, UE_id, ul_config_pdu, &ul_config_pdu->ulsch_harq_pdu.harq_information, frame, subframe); @@ -566,7 +599,7 @@ void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti, eNB,SEARCH_EXIST_OR_FREE))>=0, "No available UE ULSCH for rnti %x\n",ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti); - fill_ulsch(eNB,&ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu,frame,subframe); + fill_ulsch(eNB,UE_id,&ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu,frame,subframe); handle_ulsch_cqi_ri_pdu(eNB,UE_id,ul_config_pdu,frame,subframe); } @@ -574,7 +607,7 @@ void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_cqi_harq_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti, eNB,SEARCH_EXIST_OR_FREE))>=0, "No available UE ULSCH for rnti %x\n",ul_config_pdu->ulsch_cqi_harq_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti); - fill_ulsch(eNB,&ul_config_pdu->ulsch_cqi_harq_ri_pdu.ulsch_pdu,frame,subframe); + fill_ulsch(eNB,UE_id,&ul_config_pdu->ulsch_cqi_harq_ri_pdu.ulsch_pdu,frame,subframe); handle_ulsch_cqi_harq_ri_pdu(eNB,UE_id,ul_config_pdu,frame,subframe); handle_ulsch_harq_pdu(eNB, UE_id, ul_config_pdu, &ul_config_pdu->ulsch_cqi_harq_ri_pdu.harq_information, frame, subframe); @@ -665,13 +698,19 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) eNB->pdcch_vars[subframe&1].num_dci = 0; eNB->phich_vars[subframe&1].num_hi = 0; - LOG_D(PHY,"NFAPI: Sched_INFO:SFN/SF:%04d%d DL_req:SFN/SF:%04d%d:dl_pdu:%d tx_req:SFN/SF:%04d%d:pdus:%d hi_dci0:SFN/SF:%04d%d:pdus:%d ul_cfg:SFN/SF:%04d%d:pdus:%d num_pdcch_symbols:%d\n", - frame,subframe, - NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),number_dl_pdu, - NFAPI_SFNSF2SFN(TX_req->sfn_sf),NFAPI_SFNSF2SF(TX_req->sfn_sf),TX_req->tx_request_body.number_of_pdus, - NFAPI_SFNSF2SFN(HI_DCI0_req->sfn_sf),NFAPI_SFNSF2SF(HI_DCI0_req->sfn_sf),number_hi_dci0_pdu, - NFAPI_SFNSF2SFN(UL_req->sfn_sf),NFAPI_SFNSF2SF(UL_req->sfn_sf),number_ul_pdu, - eNB->pdcch_vars[subframe&1].num_pdcch_symbols); + LOG_D(PHY,"NFAPI: Sched_INFO:SFN/SF:%04d%d DL_req:SFN/SF:%04d%d:dl_pdu:%d tx_req:SFN/SF:%04d%d:pdus:%d\n", + frame,subframe, + NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),number_dl_pdu, + NFAPI_SFNSF2SFN(TX_req->sfn_sf),NFAPI_SFNSF2SF(TX_req->sfn_sf),TX_req->tx_request_body.number_of_pdus + ); + LOG_D(PHY,"NFAPI: hi_dci0:SFN/SF:%04d%d:pdus:%d\n", + NFAPI_SFNSF2SFN(HI_DCI0_req->sfn_sf),NFAPI_SFNSF2SF(HI_DCI0_req->sfn_sf),number_hi_dci0_pdu + ); + if(UL_req!=NULL) + LOG_D(PHY,"NFAPI: ul_cfg:SFN/SF:%04d%d:pdus:%d num_pdcch_symbols:%d\n", + NFAPI_SFNSF2SFN(UL_req->sfn_sf),NFAPI_SFNSF2SF(UL_req->sfn_sf),number_ul_pdu, + eNB->pdcch_vars[subframe&1].num_pdcch_symbols); + int do_oai =0; int dont_send =0; @@ -682,7 +721,6 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) LOG_D(PHY,"NFAPI: Clearing dci allocations for potential UL subframe %d\n",ul_subframe); harq_pid = subframe2harq_pid(fp,ul_frame,ul_subframe); -//LOG_I(PHY,"schedule_response %d.%d UL %d.%d harq_pid = %d\n", frame, subframe, ul_frame, ul_subframe, harq_pid);/////////////*********added // clear DCI allocation maps for new subframe @@ -696,10 +734,9 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) } for (i=0;idl_config_request_body.dl_config_pdu_list[i]; - //LOG_I(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type);/////////////*********LOG_D with mark out + //LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type); switch (dl_config_pdu->pdu_type) { case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE: -//LOG_I(PHY,"NFAPI: dl_pdu %d : type %d executing handle_nfapi_dci_dl_pdu()\n",i,dl_config_pdu->pdu_type);/////////////*********added handle_nfapi_dci_dl_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu); eNB->pdcch_vars[NFAPI_SFNSF2SF(DL_req->sfn_sf)&1].num_dci++; //LOG_E(PHY,"Incremented num_dci:%d but already set??? dl_config:num_dci:%d\n", eNB->pdcch_vars[subframe&1].num_dci, number_dci); @@ -747,9 +784,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) (dlsch_pdu_rel8->transport_blocks>0), "dlsch_pdu_rel8->transport_blocks = %d not in [1,2]\n", dlsch_pdu_rel8->transport_blocks); - if (1)//(sdu != NULL) + if (1)//sdu != NULL) { -//LOG_I(PHY,"NFAPI: executing handle_nfapi_dlsch_pdu()\n");/////////////*********added handle_nfapi_dlsch_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu, dlsch_pdu_rel8->transport_blocks-1, sdu); } else diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c index 81679f199c..4871499af8 100644 --- a/openair1/SCHED/phy_procedures_lte_common.c +++ b/openair1/SCHED/phy_procedures_lte_common.c @@ -336,6 +336,29 @@ unsigned char ul_ACK_subframe2_dl_subframe(LTE_DL_FRAME_PARMS *frame_parms,unsig return(0); } +int ul_ACK_subframe2_dl_frame(LTE_DL_FRAME_PARMS *frame_parms,int frame, unsigned char subframe,unsigned char subframe_tx) +{ + + if (frame_parms->frame_type == FDD) { + return (((subframe_tx > subframe ) ? frame-1 : frame)+1024)%1024; + } else { + switch (frame_parms->tdd_config) { + case 1: + return(((subframe_tx > subframe ) ? frame-1 : frame)+1024)%1024; + break; + case 3: + //TODO + break; + case 4: + //TODO + break; + } + } + + return(0); +} + + unsigned char ul_ACK_subframe2_M(LTE_DL_FRAME_PARMS *frame_parms,unsigned char subframe) { @@ -343,6 +366,23 @@ unsigned char ul_ACK_subframe2_M(LTE_DL_FRAME_PARMS *frame_parms,unsigned char s return(1); } else { switch (frame_parms->tdd_config) { + case 1: + return 1; // don't ACK special subframe for now + if (subframe == 2) { // ACK subframes 5 and 6 + return(2); + } else if (subframe == 3) { // ACK subframe 9 + return(1); // To be updated + } else if (subframe == 7) { // ACK subframes 0 and 1 + return(2); // To be updated + } else if (subframe == 8) { // ACK subframe 4 + return(1); // To be updated + } else { + LOG_E(PHY,"phy_procedures_lte_common.c/subframe2_dl_harq_pid: illegal subframe %d for tdd_config %d\n", + subframe,frame_parms->tdd_config); + return(0); + } + + break; case 3: if (subframe == 2) { // ACK subframes 5 and 6 return(2); // should be 3 @@ -381,23 +421,6 @@ unsigned char ul_ACK_subframe2_M(LTE_DL_FRAME_PARMS *frame_parms,unsigned char s } break; - - case 1: - if (subframe == 2) { // ACK subframes 5 and 6 - return(2); - } else if (subframe == 3) { // ACK subframe 9 - return(1); // To be updated - } else if (subframe == 7) { // ACK subframes 0 and 1 - return(2); // To be updated - } else if (subframe == 8) { // ACK subframe 4 - return(1); // To be updated - } else { - LOG_E(PHY,"phy_procedures_lte_common.c/subframe2_dl_harq_pid: illegal subframe %d for tdd_config %d\n", - subframe,frame_parms->tdd_config); - return(0); - } - - break; } } @@ -428,7 +451,7 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms, o_ACK[cw_idx] = harq_ack[subframe_dl0].ack; status = harq_ack[subframe_dl0].send_harq_status; - //LOG_I(PHY,"dl subframe %d send_harq_status %d cw_idx %d, reset %d\n",subframe_dl0, status, cw_idx, do_reset); + LOG_D(PHY,"dl subframe %d send_harq_status %d cw_idx %d, reset %d\n",subframe_dl0, status, cw_idx, do_reset); if(do_reset) harq_ack[subframe_dl0].send_harq_status = 0; //printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]); @@ -608,7 +631,7 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms, pN_bundled[0] = harq_ack[subframe_rx].vDAI_UL; status = harq_ack[subframe_dl0].send_harq_status + harq_ack[subframe_dl1].send_harq_status + harq_ack[subframe_dl2].send_harq_status + harq_ack[subframe_dl3].send_harq_status; - LOG_I(PHY,"TDD Config3 UL Sfn %d, dl Sfn0 %d status %d o_Ack %d, dl Sfn1 %d status %d o_Ack %d dl Sfn2 %d status %d o_Ack %d dl Sfn3 %d status %d o_Ack %d subframe_rx %d N_bundled %d status %d\n", + LOG_D(PHY,"TDD Config3 UL Sfn %d, dl Sfn0 %d status %d o_Ack %d, dl Sfn1 %d status %d o_Ack %d dl Sfn2 %d status %d o_Ack %d dl Sfn3 %d status %d o_Ack %d subframe_rx %d N_bundled %d status %d\n", subframe_tx, subframe_dl0, harq_ack[subframe_dl0].send_harq_status,harq_ack[subframe_dl0].ack, subframe_dl1, harq_ack[subframe_dl1].send_harq_status,harq_ack[subframe_dl1].ack, subframe_dl2, harq_ack[subframe_dl2].send_harq_status,harq_ack[subframe_dl2].ack, diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 6af022f27d..6b23133c40 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -55,7 +55,7 @@ extern uint8_t nfapi_mode; -int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint8_t UE_id,uint8_t harq_pid, uint8_t bw_factor) +int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint16_t UE_id,uint8_t harq_pid, uint8_t bw_factor) { uint32_t Nre,sumKr,MPR_x100,Kr,r; @@ -195,10 +195,20 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,int frame, int subframe) { // generate Cell-Specific Reference Signals for both slots VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,1); + + if(subframe_select(fp,subframe) == SF_S) + generate_pilots_slot(eNB, + txdataF, + AMP, + subframe<<1,1); + else generate_pilots_slot(eNB, txdataF, AMP, subframe<<1,0); + + // check that 2nd slot is for DL + // check that 2nd slot is for DL if (subframe_select(fp,subframe) == SF_DL) generate_pilots_slot(eNB, @@ -434,15 +444,19 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, dlsch_modulation(eNB, eNB->common_vars.txdataF, AMP, + frame, subframe, dlsch_harq->pdsch_start, dlsch, dlsch1); - stop_meas(&eNB->dlsch_modulation_stats); + stop_meas(&eNB->dlsch_modulation_stats); } - +#ifdef PHY_TX_THREAD + dlsch->active[subframe] = 0; +#else dlsch->active = 0; +#endif dlsch_harq->round++; LOG_D(PHY,"Generating DLSCH/PDSCH dlsch_harq[round:%d]\n",dlsch_harq->round); @@ -459,7 +473,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, int subframe=proc->subframe_tx; uint32_t i,aa; uint8_t harq_pid; - int8_t UE_id=0; + int16_t UE_id=0; uint8_t num_pdcch_symbols=0; uint8_t num_dci=0; uint8_t ul_subframe; @@ -513,7 +527,6 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, if (ul_subframe < 10) { // This means that there is a potential UL subframe that will be scheduled here for (i=0; iulsch[i]) { ulsch_harq = eNB->ulsch[i]->harq_processes[harq_pid]; @@ -544,11 +557,8 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, - // num_pdcch_symbols = DCI_pdu->num_pdcch_symbols; num_pdcch_symbols = eNB->pdcch_vars[subframe&1].num_pdcch_symbols; num_dci = eNB->pdcch_vars[subframe&1].num_dci; - // LOG_D(PHY,"num_pdcch_symbols %"PRIu8",(dci common %"PRIu8", dci uespec %"PRIu8"\n",num_pdcch_symbols, - // DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci); LOG_D(PHY,"num_pdcch_symbols %"PRIu8",number dci %"PRIu8"\n",num_pdcch_symbols, num_dci); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO,num_pdcch_symbols); @@ -558,7 +568,6 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, if (num_dci > 0) LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (num_dci %"PRIu8") num_pdcch_symbols:%d\n",eNB->Mod_id,frame, subframe, num_dci, num_pdcch_symbols); - //LOG_D(PHY,"Before generate_dci_top num_pdcch_symbols:%d num_dci:%d dci_alloc:dci_length:%d\n", num_pdcch_symbols, num_dci, eNB->pdcch_vars[subframe&1].dci_alloc[0].dci_length); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,1); @@ -579,7 +588,6 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,1); // Now scan UE specific DLSCH LTE_eNB_DLSCH_t *dlsch0,*dlsch1; -//LOG_I(PHY,"phy_procedures_eNB_TX before dlsch0 %d.%d UL %d.%d harq_pid == %d \n", frame, subframe, ul_frame, ul_subframe, harq_pid);////////////********added for (UE_id=0; UE_iddlsch[(uint8_t)UE_id][0]; @@ -587,10 +595,14 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, if ((dlsch0)&& (dlsch0->rnti>0)&& +#ifdef PHY_TX_THREAD + (dlsch0->active[subframe] == 1)) { +#else (dlsch0->active == 1)) { +#endif // get harq_pid - harq_pid = dlsch0->harq_ids[subframe]; + harq_pid = dlsch0->harq_ids[frame%2][subframe]; AssertFatal(harq_pid>=0,"harq_pid is negative\n"); if (harq_pid>=8) @@ -615,8 +627,12 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, else if ((dlsch0)&& - (dlsch0->rnti>0)&& - (dlsch0->active == 0)) { + (dlsch0->rnti>0)&& +#ifdef PHY_TX_THREAD + (dlsch0->active[subframe] == 0)) { +#else + (dlsch0->active == 0)) { +#endif // clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later) dlsch0->subframe_tx[subframe]=0; @@ -687,7 +703,7 @@ void fill_sr_indication(PHY_VARS_eNB *eNB,uint16_t rnti,int frame,int subframe,u pdu->rx_ue_information.tl.tag = NFAPI_RX_UE_INFORMATION_TAG; pdu->rx_ue_information.rnti = rnti; - int SNRtimes10 = dB_fixed_times10(stat) - 200;//(10*eNB->measurements.n0_power_dB[0]); + int SNRtimes10 = dB_fixed_times10(stat) - 300;//(10*eNB->measurements.n0_power_dB[0]); pdu->ul_cqi_information.tl.tag = NFAPI_UL_CQI_INFORMATION_TAG; @@ -711,7 +727,6 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) int i; LTE_eNB_UCI *uci; uint16_t tdd_multiplexing_mask=0; - int res; for (i=0;iN_RB_UL); break; } - + SR_payload = 0; switch (uci->type) { case SR: case HARQ_SR: metric_SR = rx_pucch(eNB, - uci->pucch_fmt, - i, - uci->n_pucch_1_0_sr[0], - 0, // n2_pucch - uci->srs_active, // shortened format - &SR_payload, - frame, - subframe, - PUCCH1_THRES); - LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR is %d (SR n1pucch is %d)\n", + uci->pucch_fmt, + i, + uci->n_pucch_1_0_sr[0], + 0, // n2_pucch + uci->srs_active, // shortened format + &SR_payload, + frame, + subframe, + PUCCH1_THRES); + LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR is %d (uci.type %d SR n1pucch is %d)\n", eNB->Mod_id, uci->rnti, frame, subframe, SR_payload, + uci->type, uci->n_pucch_1_0_sr[0]); if (uci->type == SR) { if (SR_payload == 1) { fill_sr_indication(eNB,uci->rnti,frame,subframe,metric_SR); - continue; + break; } else { - continue; + break; } } case HARQ: @@ -828,13 +844,44 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) frame,subframe, pucch_b0b1[0][0],metric[0]); - uci->stat = metric[0]; + uci->stat = metric[0]; fill_uci_harq_indication(eNB,uci,frame,subframe,pucch_b0b1[0],0,0xffff); } else { // frame_type == TDD + LOG_D(PHY,"Frame %d Subframe %d Demodulating PUCCH (UCI %d) for ACK/NAK (uci->pucch_fmt %d,uci->type %d.uci->frame %d, uci->subframe %d): n1_pucch0 %d SR_payload %d\n", + frame,subframe,i, + uci->pucch_fmt,uci->type, + uci->frame,uci->subframe,uci->n_pucch_1[0][0], + SR_payload); +#if 1 + metric[0] = rx_pucch(eNB, + uci->pucch_fmt, + i, + uci->n_pucch_1[0][0], + 0, //n2_pucch + uci->srs_active, // shortened format + pucch_b0b1[0], + frame, + subframe, + PUCCH1a_THRES); + if (uci->type==HARQ_SR && metric[0] > metric_SR) SR_payload = 0; + else if (SR_payload == 1) fill_sr_indication(eNB,uci->rnti,frame,subframe,metric_SR); - + if (uci->type==HARQ_SR && metric[0] <= metric_SR) { + SR_payload = 1; + metric[0] = rx_pucch(eNB, + pucch_format1b, + i, + uci->n_pucch_1_0_sr[0], + 0, //n2_pucch + uci->srs_active, // shortened format + pucch_b0b1[0], + frame, + subframe, + PUCCH1a_THRES); + } +#else // if SR was detected, use the n1_pucch from SR if (SR_payload==1) { #ifdef DEBUG_PHY_PROC @@ -881,25 +928,28 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) } - - +#ifdef DEBUG_PHY_PROC + LOG_D(PHY,"RNTI %x type %d SR_payload %d Frame %d Subframe %d pucch_b0b1[0][0] %d pucch_b0b1[0][1] %d pucch_b0b1[1][0] %d pucch_b0b1[1][1] %d \n", + uci->rnti,uci->type,SR_payload,frame,subframe,pucch_b0b1[0][0],pucch_b0b1[0][1],pucch_b0b1[1][0],pucch_b0b1[1][1]); +#endif +#endif if (SR_payload == 1) { // this implements Table 7.3.1 from 36.213 if (pucch_b0b1[0][0] == 4) { // there isn't a likely transmission harq_ack[0] = 4; // DTX } - else if (pucch_b0b1[1][0] == 1 && pucch_b0b1[1][1] == 1) { // 1/4/7 ACKs + else if (pucch_b0b1[0][0] == 1 && pucch_b0b1[0][1] == 1) { // 1/4/7 ACKs harq_ack[0] = 1; } - else if (pucch_b0b1[1][0] == 1 && pucch_b0b1[1][1] != 1) { // 2/5/8 ACKs + else if (pucch_b0b1[0][0] == 1 && pucch_b0b1[0][1] != 1) { // 2/5/8 ACKs harq_ack[0] = 2; } - else if (pucch_b0b1[1][0] != 1 && pucch_b0b1[1][1] == 1) { // 3/6/9 ACKs + else if (pucch_b0b1[0][0] != 1 && pucch_b0b1[0][1] == 1) { // 3/6/9 ACKs harq_ack[0] = 3; } - else if (pucch_b0b1[1][0] != 1 && pucch_b0b1[1][1] != 1) { // 0 ACKs, or at least one DL assignment missed + else if (pucch_b0b1[0][0] != 1 && pucch_b0b1[0][1] != 1) { // 0 ACKs, or at least one DL assignment missed harq_ack[0] = 0; } - uci->stat = metric[0]; + uci->stat = metric[0]; fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,2,0xffff); // special_bundling mode } else if ((uci->tdd_bundling == 0) && (uci->num_pucch_resources==2)){ // multiplexing + no SR, implement Table 10.1.3-5 (Rel14) for multiplexing with M=2 @@ -941,7 +991,7 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) } } } - uci->stat = max(metric[0],metric[1]); + uci->stat = max(metric[0],metric[1]); fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,1,tdd_multiplexing_mask); // multiplexing mode } //else if ((uci->tdd_bundling == 0) && (res==2)) else if ((uci->tdd_bundling == 0) && (uci->num_pucch_resources==3)){ // multiplexing + no SR, implement Table 10.1.3-6 (Rel14) for multiplexing with M=3 @@ -1160,13 +1210,14 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) } } } - uci->stat = max_metric; + uci->stat = max_metric; fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,1,tdd_multiplexing_mask); // multiplexing mode } // else if ((uci->tdd_bundling == 0) && (res==4)) else { // bundling harq_ack[0] = pucch_b0b1[0][0]; harq_ack[1] = pucch_b0b1[0][1]; - uci->stat = metric[0]; + uci->stat = metric[0]; + LOG_D(PHY,"bundling: (%d,%d), metric %d\n",harq_ack[0],harq_ack[1],uci->stat); fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,0,0xffff); // special_bundling mode } @@ -1212,8 +1263,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) const int subframe = proc->subframe_rx; const int frame = proc->frame_rx; - if (fp->frame_type == FDD) harq_pid = ((10*frame) + subframe)&7; - else harq_pid = subframe%10; + harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe); for (i=0; iulsch[i]; @@ -1236,84 +1286,85 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) int rb2 = rb+ulsch_harq->first_rb; eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31)); } - + LOG_D(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d \n", eNB->Mod_id, frame, subframe, i); - + nPRS = fp->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]; - + ulsch->cyclicShift = (ulsch_harq->n_DMRS2 + - fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift + - nPRS)%12; - + fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift + + nPRS)%12; + AssertFatal(ulsch_harq->TBS>0,"illegal TBS %d\n",ulsch_harq->TBS); LOG_D(PHY, - "[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, ), O_ACK %d, beta_cqi %d \n", - eNB->Mod_id,harq_pid,frame,subframe, - ulsch_harq->dci_alloc, - ulsch_harq->rar_alloc, - ulsch_harq->round, - ulsch_harq->first_rb, - ulsch_harq->nb_rb, - ulsch_harq->Qm, - ulsch_harq->TBS, - ulsch_harq->rvidx, - ulsch->cyclicShift, - ulsch_harq->n_DMRS2, - fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift, - ulsch_harq->O_ACK, - ulsch->beta_offset_cqi_times8); - - start_meas(&eNB->ulsch_demodulation_stats); - - rx_ulsch(eNB,proc, i); - - stop_meas(&eNB->ulsch_demodulation_stats); - - start_meas(&eNB->ulsch_decoding_stats); - - ret = ulsch_decoding(eNB,proc, - i, - 0, // control_only_flag - ulsch_harq->V_UL_DAI, - ulsch_harq->nb_rb>20 ? 1 : 0); - - stop_meas(&eNB->ulsch_decoding_stats); - - LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d ulsch_harq->cqi_crc_status:%d ackBits:%d ulsch_decoding_stats[t:%lld max:%lld]\n", + "[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, ), O_ACK %d, beta_cqi %d \n", + eNB->Mod_id,harq_pid,frame,subframe, + ulsch_harq->dci_alloc, + ulsch_harq->rar_alloc, + ulsch_harq->round, + ulsch_harq->first_rb, + ulsch_harq->nb_rb, + ulsch_harq->Qm, + ulsch_harq->TBS, + ulsch_harq->rvidx, + ulsch->cyclicShift, + ulsch_harq->n_DMRS2, + fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift, + ulsch_harq->O_ACK, + ulsch->beta_offset_cqi_times8); + + start_meas(&eNB->ulsch_demodulation_stats); + + rx_ulsch(eNB,proc, i); + + stop_meas(&eNB->ulsch_demodulation_stats); + + start_meas(&eNB->ulsch_decoding_stats); + + ret = ulsch_decoding(eNB,proc, + i, + 0, // control_only_flag + ulsch_harq->V_UL_DAI, + ulsch_harq->nb_rb>20 ? 1 : 0); + + stop_meas(&eNB->ulsch_decoding_stats); + + LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d ulsch_harq->cqi_crc_status:%d ackBits:%d ulsch_decoding_stats[t:%lld max:%lld]\n", eNB->Mod_id,harq_pid, frame,subframe, ulsch->rnti, dB_fixed(eNB->pusch_vars[i]->ulsch_power[0]), dB_fixed(eNB->pusch_vars[i]->ulsch_power[1]), - 20,//eNB->measurements.n0_power_dB[0], - 20,//eNB->measurements.n0_power_dB[1], + 30,//eNB->measurements.n0_power_dB[0], + 30,//eNB->measurements.n0_power_dB[1], ulsch_harq->o_ACK[0], ulsch_harq->o_ACK[1], ret, ulsch_harq->cqi_crc_status, ulsch_harq->O_ACK, eNB->ulsch_decoding_stats.diff_now, eNB->ulsch_decoding_stats.max); - - //compute the expected ULSCH RX power (for the stats) - ulsch_harq->delta_TF = get_hundred_times_delta_IF_eNB(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered - - if (ulsch_harq->cqi_crc_status == 1) { + + //compute the expected ULSCH RX power (for the stats) + ulsch_harq->delta_TF = get_hundred_times_delta_IF_eNB(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered + + if (ulsch_harq->cqi_crc_status == 1) { #ifdef DEBUG_PHY_PROC - //if (((frame%10) == 0) || (frame < 50)) - print_CQI(ulsch_harq->o,ulsch_harq->uci_format,0,fp->N_RB_DL); + //if (((frame%10) == 0) || (frame < 50)) + print_CQI(ulsch_harq->o,ulsch_harq->uci_format,0,fp->N_RB_DL); #endif - + fill_ulsch_cqi_indication(eNB,frame,subframe, ulsch_harq, ulsch->rnti); + } - + if (ret == (1+MAX_TURBO_ITERATIONS)) { - T(T_ENB_PHY_ULSCH_UE_NACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti), - T_INT(harq_pid)); - + T(T_ENB_PHY_ULSCH_UE_NACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti), + T_INT(harq_pid)); + fill_crc_indication(eNB,i,frame,subframe,1); // indicate NAK to MAC fill_rx_indication(eNB,i,frame,subframe); // indicate SDU to MAC - + LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n", eNB->Mod_id,harq_pid, frame,subframe, i, @@ -1321,24 +1372,24 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) ulsch->Mlimit, ulsch_harq->o_ACK[0], ulsch_harq->o_ACK[1]); - + if (ulsch_harq->round >= 3) { - ulsch_harq->status = SCH_IDLE; - ulsch_harq->handled = 0; - ulsch->harq_mask &= ~(1 << harq_pid); - ulsch_harq->round = 0; - } + ulsch_harq->status = SCH_IDLE; + ulsch_harq->handled = 0; + ulsch->harq_mask &= ~(1 << harq_pid); + ulsch_harq->round = 0; + } #if defined(MESSAGE_CHART_GENERATOR_PHY) MSC_LOG_RX_DISCARDED_MESSAGE( - MSC_PHY_ENB,MSC_PHY_UE, - NULL,0, - "%05u:%02u ULSCH received rnti %x harq id %u round %d", - frame,subframe, - ulsch->rnti,harq_pid, - ulsch_harq->round-1 - ); + MSC_PHY_ENB,MSC_PHY_UE, + NULL,0, + "%05u:%02u ULSCH received rnti %x harq id %u round %d", + frame,subframe, + ulsch->rnti,harq_pid, + ulsch_harq->round-1 + ); #endif - + /* Mark the HARQ process to release it later if max transmission reached * (see below). * MAC does not send the max transmission count, we have to deal with it @@ -1377,10 +1428,10 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) LOG_T(PHY,"\n"); #endif #endif - } // ulsch not in error + } // ulsch not in error if (ulsch_harq->O_ACK>0) fill_ulsch_harq_indication(eNB,ulsch_harq,ulsch->rnti,frame,subframe,ulsch->bundling); - + LOG_D(PHY,"[eNB %d] Frame %d subframe %d: received ULSCH harq_pid %d for UE %d, ret = %d, CQI CRC Status %d, ACK %d,%d, ulsch_errors %d/%d\n", eNB->Mod_id,frame,subframe, harq_pid, @@ -1517,7 +1568,7 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe) pdu->rx_indication_rel8.timing_advance = timing_advance_update; // estimate UL_CQI for MAC (from antenna port 0 only) - int SNRtimes10 = dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) - 200;//(10*eNB->measurements.n0_power_dB[0]); + int SNRtimes10 = dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) - 300;//(10*eNB->measurements.n0_power_dB[0]); if (SNRtimes10 < -640) pdu->rx_indication_rel8.ul_cqi=0; else if (SNRtimes10 > 635) pdu->rx_indication_rel8.ul_cqi=255; @@ -1539,7 +1590,7 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui LTE_eNB_DLSCH_t *dlsch0=NULL,*dlsch1=NULL; LTE_DL_eNB_HARQ_t *dlsch0_harq=NULL,*dlsch1_harq=NULL; int harq_pid; - int subframe_tx; + int subframe_tx,frame_tx; int M,m; AssertFatal(UE_id!=-1,"no existing dlsch context\n"); @@ -1549,7 +1600,9 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui if (eNB->frame_parms.frame_type == FDD) { subframe_tx = (subframe+6)%10; - harq_pid = dlsch0->harq_ids[subframe_tx]; + frame_tx = ul_ACK_subframe2_dl_frame(&eNB->frame_parms,frame,subframe,subframe_tx); + harq_pid = dlsch0->harq_ids[frame_tx%2][subframe_tx]; // or just use 0 for fdd? + AssertFatal((harq_pid>=0) && (harq_pid<10),"harq_pid %d not in 0...9\n",harq_pid); dlsch0_harq = dlsch0->harq_processes[harq_pid]; dlsch1_harq = dlsch1->harq_processes[harq_pid]; @@ -1574,9 +1627,10 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui subframe_tx = ul_ACK_subframe2_dl_subframe(&eNB->frame_parms, subframe, m); + frame_tx = ul_ACK_subframe2_dl_frame(&eNB->frame_parms,frame,subframe,subframe_tx); if (((1< 0) { - harq_pid = dlsch0->harq_ids[subframe_tx]; - if ((harq_pid>=0) && (harq_pid<10)) { + harq_pid = dlsch0->harq_ids[frame_tx%2][subframe_tx]; + if ((harq_pid>=0) && (harq_pidMdlharq)) { dlsch0_harq = dlsch0->harq_processes[harq_pid]; dlsch1_harq = dlsch1->harq_processes[harq_pid]; AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n"); @@ -1609,7 +1663,7 @@ int getM(PHY_VARS_eNB *eNB,int frame,int subframe) { LTE_eNB_DLSCH_t *dlsch0=NULL,*dlsch1=NULL; LTE_DL_eNB_HARQ_t *dlsch0_harq=NULL,*dlsch1_harq=NULL; int harq_pid; - int subframe_tx; + int subframe_tx,frame_tx; int m; M=ul_ACK_subframe2_M(&eNB->frame_parms, @@ -1619,7 +1673,10 @@ int getM(PHY_VARS_eNB *eNB,int frame,int subframe) { subframe_tx = ul_ACK_subframe2_dl_subframe(&eNB->frame_parms, subframe, m); - harq_pid = dlsch0->harq_ids[subframe_tx]; + frame_tx = ul_ACK_subframe2_dl_frame(&eNB->frame_parms,frame, + subframe,subframe_tx); + harq_pid = dlsch0->harq_ids[frame_tx%2][subframe_tx]; + if (harq_pid>=0 && harq_pid<10) { dlsch0_harq = dlsch0->harq_processes[harq_pid]; dlsch1_harq = dlsch1->harq_processes[harq_pid]; @@ -1668,15 +1725,11 @@ void fill_ulsch_cqi_indication(PHY_VARS_eNB *eNB,uint16_t frame,uint8_t subframe void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,uint16_t rnti, int frame,int subframe,int bundling) { int UE_id = find_dlsch(rnti,eNB,SEARCH_EXIST); - //AssertFatal(UE_id>=0,"UE_id doesn't exist\n"); - - if (UE_id < 0) - { - LOG_E(PHY,"%s(eNB, ulsch_harq, rnti:%04x, frame:%d, subframe:%d, bundling:%d) harq_pdus:%d - Could not find rnti - abort fill of ulsch harq ind\n", __FUNCTION__, rnti, frame, subframe, bundling,eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs); + if( (UE_id<0) || (UE_id>=NUMBER_OF_UE_MAX) ){ + LOG_E(PHY,"illegal UE_id found!!! rnti %04x UE_id %d\n",rnti,UE_id); return; } - - LOG_D(PHY,"%s(eNB, ulsch_harq, rnti:%04x, frame:%d, subframe:%d, bundling:%d) harq_pdus:%d O_ACK:%d\n", __FUNCTION__, rnti, frame, subframe, bundling,eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs,ulsch_harq->O_ACK); + //AssertFatal(UE_id>=0,"UE_id doesn't exist\n"); pthread_mutex_lock(&eNB->UL_INFO_mutex); nfapi_harq_indication_pdu_t *pdu = &eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list[eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs]; @@ -1708,12 +1761,17 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq, #if T_TRACER /* TODO: get correct harq pid */ - if (ulsch_harq->o_ACK[i] != 1) - T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe), - T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[(subframe+6)%10])); - else - T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe), - T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[(subframe+6)%10])); + { + int subframe_tx = (subframe+6)%10; + int frame_tx = subframe_tx >= 6 ? (frame+1023)%1024 : frame; + if (ulsch_harq->o_ACK[i] != 1) { + T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe), + T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx])); + } else { + T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe), + T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx])); + } + } #endif } } @@ -1728,7 +1786,7 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq, for (i=0;iO_ACK;i++) { AssertFatal(ulsch_harq->o_ACK[i] == 0 || ulsch_harq->o_ACK[i] == 1, "harq_ack[%d] is %d, should be 1,2 or 4\n",i,ulsch_harq->o_ACK[i]); - pdu->harq_indication_tdd_rel13.harq_data[0].multiplex.value_0 = 2-ulsch_harq->o_ACK[i]; + pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 2-ulsch_harq->o_ACK[i]; // release DLSCH if needed /* TODO: review this code, it's most certainly wrong. * We have to release the proper HARQ in case of ACK or NACK if max retransmission reached. @@ -1784,7 +1842,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB, // estimate UL_CQI for MAC (from antenna port 0 only) pdu->ul_cqi_information.tl.tag = NFAPI_UL_CQI_INFORMATION_TAG; - int SNRtimes10 = dB_fixed_times10(uci->stat) - 200;//(10*eNB->measurements.n0_power_dB[0]); + int SNRtimes10 = dB_fixed_times10(uci->stat) - 300;//(10*eNB->measurements.n0_power_dB[0]); if (SNRtimes10 < -100) LOG_I(PHY,"uci->stat %d \n",uci->stat); @@ -1806,12 +1864,17 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB, #if T_TRACER - if (harq_ack[0] != 1) - T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe), - T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[(subframe+6)%10])); - else - T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe), - T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[(subframe+6)%10])); + { + int subframe_tx = (subframe+6)%10; + int frame_tx = subframe_tx >= 6 ? (frame+1023)%1024 : frame; + if (harq_ack[0] != 1) { + T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe), + T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx])); + } else { + T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe), + T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx])); + } + } #endif } else if (uci->pucch_fmt == pucch_format1b) { @@ -1835,13 +1898,14 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB, pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG; pdu->harq_indication_tdd_rel13.mode = tdd_mapping_mode; - + LOG_D(PHY,"%s(eNB, uci_harq format %d, rnti:%04x, frame:%d, subframe:%d, tdd_mapping_mode:%d) harq_ack[0]:%d harq_ack[1]:%d\n", __FUNCTION__, uci->pucch_fmt,uci->rnti, frame, subframe, tdd_mapping_mode,harq_ack[0],harq_ack[1]); switch (tdd_mapping_mode) { case 0: // bundling if (uci->pucch_fmt == pucch_format1a) { pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG; pdu->harq_indication_tdd_rel13.number_of_ack_nack = 1; + LOG_D(PHY,"bundling, pucch1a, number of ack nack %d\n",pdu->harq_indication_tdd_rel13.number_of_ack_nack); AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[0] == 4, "harq_ack[0] is %d, should be 1,2 or 4\n",harq_ack[0]); pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = harq_ack[0]; // release all bundled DLSCH if needed @@ -1897,32 +1961,44 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB, case 2: // special bundling (SR collision) pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG; pdu->harq_indication_tdd_rel13.number_of_ack_nack = 1; + pdu->harq_indication_tdd_rel13.mode = 0; int tdd_config5_sf2scheds=0; if (eNB->frame_parms.tdd_config==5) tdd_config5_sf2scheds = getM(eNB,frame,subframe); switch (harq_ack[0]) { case 0: + case 4: + pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0; /* TODO: release_harq here? this whole code looks suspicious */ break; case 1: // check if M=1,4,7 if (uci->num_pucch_resources == 1 || uci->num_pucch_resources == 4 || tdd_config5_sf2scheds == 1 || tdd_config5_sf2scheds == 4 || tdd_config5_sf2scheds == 7) { + pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1; release_harq(eNB,UE_id,0,frame,subframe,0xffff, 1); release_harq(eNB,UE_id,1,frame,subframe,0xffff, 1); + }else{ + pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0; } break; case 2: // check if M=2,5,8 if (uci->num_pucch_resources == 2 || tdd_config5_sf2scheds == 2 || tdd_config5_sf2scheds == 5 || tdd_config5_sf2scheds == 8) { + pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1; release_harq(eNB,UE_id,0,frame,subframe,0xffff, 1); release_harq(eNB,UE_id,1,frame,subframe,0xffff, 1); + }else{ + pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0; } break; case 3: // check if M=3,6,9 if (uci->num_pucch_resources == 3 || tdd_config5_sf2scheds == 3 || tdd_config5_sf2scheds == 6 || tdd_config5_sf2scheds == 9) { + pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1; release_harq(eNB,UE_id,0,frame,subframe,0xffff, 1); release_harq(eNB,UE_id,1,frame,subframe,0xffff, 1); + }else{ + pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0; } break; } diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c index 202524ef86..056ce0a429 100644 --- a/openair1/SCHED/ru_procedures.c +++ b/openair1/SCHED/ru_procedures.c @@ -64,7 +64,6 @@ void feptx0(RU_t *ru,int slot) { //int dummy_tx_b[7680*2] __attribute__((aligned(32))); unsigned int aa,slot_offset; - int i, tx_offset; int slot_sizeF = (fp->ofdm_symbol_size)* ((fp->Ncp==1) ? 6 : 7); int subframe = ru->proc.subframe_tx; @@ -111,7 +110,7 @@ void feptx0(RU_t *ru,int slot) { } */ // TDD: turn on tx switch N_TA_offset before by setting buffer in these samples to 0 - if ((slot == 0) && +/* if ((slot == 0) && (fp->frame_type == TDD) && ((fp->tdd_config==0) || (fp->tdd_config==1) || @@ -128,7 +127,7 @@ void feptx0(RU_t *ru,int slot) { ru->common.txdata[aa][tx_offset] = 0x00000000; } - } + }*/ } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+slot , 0); } @@ -344,25 +343,27 @@ void feptx_ofdm(RU_t *ru) { } } */ - if ((fp->frame_type == TDD) && - ((fp->tdd_config==0) || - (fp->tdd_config==1) || - (fp->tdd_config==2) || - (fp->tdd_config==6)) && - ((subframe==0) || (subframe==5))) { - // turn on tx switch N_TA_offset before - //LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,ru->N_TA_offset,slot_offset); - for (i=0; iN_TA_offset; i++) { - tx_offset = (int)slot_offset+i-ru->N_TA_offset/2; - if (tx_offset<0) - tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti; - - if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti)) - tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti; - - ru->common.txdata[aa][tx_offset] = 0x00000000; - } - } + +// if ((fp->frame_type == TDD) && +// ((fp->tdd_config==0) || +// (fp->tdd_config==1) || +// (fp->tdd_config==2) || +// (fp->tdd_config==6)) && +// ((subframe==0) || (subframe==5))) { +// // turn on tx switch N_TA_offset before +// //LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,ru->N_TA_offset,slot_offset); +// for (i=0; iN_TA_offset; i++) { +// tx_offset = (int)slot_offset+i-ru->N_TA_offset/2; +// if (tx_offset<0) +// tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti; +// +// if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti)) +// tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti; +// +// ru->common.txdata[aa][tx_offset] = 0x00000000; +// } +// } + stop_meas(&ru->ofdm_mod_stats); LOG_D(PHY,"feptx_ofdm (TXPATH): frame %d, subframe %d: txp (time %p) %d dB, txp (freq) %d dB\n", ru->proc.frame_tx,subframe,txdata,dB_fixed(signal_energy((int32_t*)txdata,fp->samples_per_tti)), @@ -410,11 +411,6 @@ void feptx_prec(RU_t *ru) { aa); } } -#if 0 - LOG_D(PHY,"feptx_prec: frame %d, subframe %d: txp (freq) %d dB\n", - ru->proc.frame_tx,subframe, - dB_fixed(signal_energy_nodc(ru->common.txdataF_BF[0],2*fp->symbols_per_tti*fp->ofdm_symbol_size))); -#endif } } } diff --git a/openair1/SCHED/sched_common.h b/openair1/SCHED/sched_common.h index 30de6dbb4a..e579110a78 100644 --- a/openair1/SCHED/sched_common.h +++ b/openair1/SCHED/sched_common.h @@ -30,7 +30,7 @@ #include "PHY/defs_eNB.h" #include "PHY/defs_UE.h" - +#include "TDD-Config.h" /*! \brief Function to compute subframe Number(DL and S) as a function of Frame type and TDD Configuration @param frame_parms Pointer to DL frame parameter descriptor @returns Subframe Number (DL,S) @@ -322,9 +322,7 @@ LTE_DL_FRAME_PARMS *get_lte_frame_parms(module_id_t Mod_id, uint8_t CC_id); MU_MIMO_mode* get_mu_mimo_mode (module_id_t Mod_id, uint8_t CC_id, rnti_t rnti); int16_t get_hundred_times_delta_IF(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t harq_pid); - -int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t harq_pid, uint8_t bw_factor); - +int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint16_t UE_id,uint8_t harq_pid, uint8_t bw_factor); int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid); int16_t get_target_pusch_rx_power(module_id_t module_idP, uint8_t CC_id); @@ -343,6 +341,12 @@ int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subf void compute_srs_pos(lte_frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); + +/* from here: prototype added to remove compilation warnings, doc to be written by the author of the function */ + +int ul_ACK_subframe2_dl_frame(LTE_DL_FRAME_PARMS *frame_parms,int frame, unsigned char subframe,unsigned char subframe_tx); + +void get_retransmission_timing(TDD_Config_t *tdd_Config, frame_t *frameP, sub_frame_t *subframeP); /*@}*/ diff --git a/openair1/SCHED/sched_eNB.h b/openair1/SCHED/sched_eNB.h index e03b7f6b62..cf6c5815f2 100644 --- a/openair1/SCHED/sched_eNB.h +++ b/openair1/SCHED/sched_eNB.h @@ -127,7 +127,7 @@ void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc); @param phy_vars_eNB Pointer to eNB variables on which to act @param br_flag indicator for eMTC PRACH */ -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) void prach_procedures(PHY_VARS_eNB *eNB, int br_flag); #else @@ -208,7 +208,7 @@ LTE_eNB_UE_stats* get_UE_stats(uint8_t Mod_id, uint8_t CC_id,uint16_t rnti); lte_subframe_t get_subframe_direction(uint8_t Mod_id,uint8_t CC_id,uint8_t subframe); -int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t harq_pid, uint8_t bw_factor); +int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint16_t UE_id,uint8_t harq_pid, uint8_t bw_factor); int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid); diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index da788d343c..fc095f49a9 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -99,20 +99,20 @@ void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subf subframe, ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]); - write_output("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1); - write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1); - write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_estimates_ext[0],300*nsymb,1,1); + LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1); + LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_estimates_ext[0],300*nsymb,1,1); /* - write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); - write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); - write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); - write_output("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); + LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); + LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); + LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); + LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); */ - write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_comp0[0],300*12,1,1); - write_output("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->llr[0],coded_bits_per_codeword,1,0); + LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_comp0[0],300*12,1,1); + LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->llr[0],coded_bits_per_codeword,1,0); - write_output("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_mag0,300*12,1,1); - write_output("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_magb0,300*12,1,1); + LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_mag0,300*12,1,1); + LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_magb0,300*12,1,1); } void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe) @@ -139,22 +139,22 @@ void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols, coded_bits_per_codeword); - write_output("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1); + LOG_M("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1); - write_output("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1); - write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1); - write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1); + LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1); /* - write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); - write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); - write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); - write_output("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); + LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); + LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); + LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); + LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); */ - write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_SI[0]->rxdataF_comp0[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1); - write_output("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_SI[0]->llr[0],coded_bits_per_codeword,1,0); + LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_SI[0]->rxdataF_comp0[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1); + LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_SI[0]->llr[0],coded_bits_per_codeword,1,0); - write_output("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_SI[0]->dl_ch_mag0,300*nsymb,1,1); - write_output("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_SI[0]->dl_ch_magb0,300*nsymb,1,1); + LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_SI[0]->dl_ch_mag0,300*nsymb,1,1); + LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_SI[0]->dl_ch_magb0,300*nsymb,1,1); sleep(1); exit(-1); } @@ -204,9 +204,14 @@ void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb) { - int gain_dB = power_dBm - power_max_dBm; + int gain_dB; double gain_lin; + if (power_dBm<=power_max_dBm) + gain_dB = power_dBm - power_max_dBm; + else + gain_dB = 0; + gain_lin = pow(10,.1*gain_dB); AssertFatal((nb_rb >0) && (nb_rb <= N_RB_UL),"Illegal nb_rb/N_RB_UL combination (%d/%d)\n",nb_rb,N_RB_UL); return((int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb))); @@ -236,23 +241,23 @@ void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols, coded_bits_per_codeword); - write_output("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1); - write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1); - write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1); + LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1); + LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1); /* - write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); - write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); - write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); - write_output("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); + LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); + LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); + LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); + LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); */ - write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_ra[0]->rxdataF_comp0[0],300*nsymb,1,1); - write_output("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_ra[0]->llr[0],coded_bits_per_codeword,1,0); + LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_ra[0]->rxdataF_comp0[0],300*nsymb,1,1); + LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_ra[0]->llr[0],coded_bits_per_codeword,1,0); - write_output("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_ra[0]->dl_ch_mag0,300*nsymb,1,1); - write_output("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_ra[0]->dl_ch_magb0,300*nsymb,1,1); + LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_ra[0]->dl_ch_mag0,300*nsymb,1,1); + LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_ra[0]->dl_ch_magb0,300*nsymb,1,1); } -void phy_reset_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) +void phy_reset_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index) { // This flushes ALL DLSCH and ULSCH harq buffers of ALL connected eNBs...add the eNB_index later @@ -352,7 +357,7 @@ void process_timing_advance_rar(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint16_t ti } -void process_timing_advance(uint8_t Mod_id,uint8_t CC_id,int16_t timing_advance) +void process_timing_advance(module_id_t Mod_id,uint8_t CC_id,int16_t timing_advance) { // uint32_t frame = PHY_vars_UE_g[Mod_id]->frame; @@ -507,7 +512,6 @@ void ue_compute_srs_occasion(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id { int Mod_id = ue->Mod_id; int CC_id = ue->CC_id; - // Panos: Substitute call to ue_get_SR() with the filled ue_SR_config->SR_payload (0, or 1). SR_payload = ue_get_SR(Mod_id, CC_id, frame_tx, @@ -1237,46 +1241,48 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt if (empty_subframe) { //#if 1 + overflow = ulsch_start - 9*frame_parms->samples_per_tti; + for (aa=0; aanb_antennas_tx; aa++) { + + if (overflow > 0) + { + memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*(frame_parms->samples_per_tti-overflow)); + memset(&ue->common_vars.txdata[aa][0],0,4*overflow); + } + else + { + memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*frame_parms->samples_per_tti); + } + } + /*#else overflow = ulsch_start - 9*frame_parms->samples_per_tti; for (aa=0; aanb_antennas_tx; aa++) { - - if (overflow > 0) - { - memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*(frame_parms->samples_per_tti-overflow)); - memset(&ue->common_vars.txdata[aa][0],0,4*overflow); - } - else - { - memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*frame_parms->samples_per_tti); - } + for (k=ulsch_start; ksamples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++) { + ((short*)ue->common_vars.txdata[aa])[2*k] = 0; + ((short*)ue->common_vars.txdata[aa])[2*k+1] = 0; } -/*#else - overflow = ulsch_start - 9*frame_parms->samples_per_tti; - for (aa=0; aanb_antennas_tx; aa++) { - for (k=ulsch_start; ksamples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++) { - ((short*)ue->common_vars.txdata[aa])[2*k] = 0; - ((short*)ue->common_vars.txdata[aa])[2*k+1] = 0; - } - - for (k=0; kcommon_vars.txdata[aa])[2*k] = 0; - ((short*)ue->common_vars.txdata[aa])[2*k+1] = 0; - } + + for (k=0; kcommon_vars.txdata[aa])[2*k] = 0; + ((short*)ue->common_vars.txdata[aa])[2*k+1] = 0; } -#endif*/ - return; + } + #endif*/ + return; } //#endif -// if ((frame_tx%100) == 0) - LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n", - ue->Mod_id,frame_tx,subframe_tx, - ulsch_start, - ue->rx_offset, - ue->hw_timing_advance, - ue->timing_advance, - ue->N_TA_offset); - +/* + LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d, signal energy %d dB\n", + ue->Mod_id,frame_tx,subframe_tx, + ulsch_start, + ue->rx_offset, + ue->hw_timing_advance, + ue->timing_advance, + ue->N_TA_offset, + dB_fixed(signal_energy(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size], + nsymb*frame_parms->ofdm_symbol_size))); +*/ for (aa=0; aanb_antennas_tx; aa++) { if (frame_parms->Ncp == 1) @@ -1299,7 +1305,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt #endif nsymb>>1, &ue->frame_parms); - + normal_prefix_mod(&ue->common_vars.txdataF[aa][((subframe_tx*nsymb)+(nsymb>>1))*frame_parms->ofdm_symbol_size], #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) dummy_tx_buffer+(frame_parms->samples_per_tti>>1), @@ -1308,7 +1314,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt #endif nsymb>>1, &ue->frame_parms); - } + } #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) apply_7_5_kHz(ue,dummy_tx_buffer,0); @@ -1336,11 +1342,11 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt // handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on for (k=ulsch_start - (frame_parms->samples_per_tti>>1) ; kcommon_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE; + ue->common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE; else if (k>(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)) - ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE; + ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE; else - ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE; + ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE; } #endif #endif @@ -1350,7 +1356,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt if( (crash == 1) && (subframe_tx == 0) ) { LOG_E(PHY,"***** DUMP TX Signal [ulsch_start %d] *****\n",ulsch_start); - write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1); + LOG_M("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1); } */ @@ -2173,29 +2179,29 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin case pucch_format1a: case pucch_format1b: { - if (ue->mac_enabled == 1) { - Po_PUCCH = pucch_power_cntl(ue,proc,subframe_tx,eNB_id,format); - } - else { - Po_PUCCH = ue->tx_power_max_dBm; - } - ue->tx_power_dBm[subframe_tx] = Po_PUCCH; - ue->tx_total_RE[subframe_tx] = 12; - + if (ue->mac_enabled == 1) { + Po_PUCCH = pucch_power_cntl(ue,proc,subframe_tx,eNB_id,format); + } + else { + Po_PUCCH = ue->tx_power_max_dBm; + } + ue->tx_power_dBm[subframe_tx] = Po_PUCCH; + ue->tx_total_RE[subframe_tx] = 12; + #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) - tx_amp = get_tx_amp(Po_PUCCH, - ue->tx_power_max_dBm, - ue->frame_parms.N_RB_UL, - 1); + tx_amp = get_tx_amp(Po_PUCCH, + ue->tx_power_max_dBm, + ue->frame_parms.N_RB_UL, + 1); #else - tx_amp = AMP; + tx_amp = AMP; #endif #if T_TRACER - T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]), - T_INT(tx_amp),T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id))); + T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]), + T_INT(tx_amp),T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id))); #endif - -#ifdef UE_DEBUG_TRACE + + //#ifdef UE_DEBUG_TRACE if(format == pucch_format1) { LOG_D(PHY,"[UE %d][SR %x] AbsSubframe %d.%d Generating PUCCH 1 (SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d\n", @@ -2236,7 +2242,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin tx_amp); } } -#endif + //#endif #if T_TRACER if(pucch_payload[0]) @@ -2388,30 +2394,32 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t)); } + if (subframe_select(&ue->frame_parms,proc->subframe_tx) == SF_UL || + ue->frame_parms.frame_type == FDD) { + if (ue->UE_mode[eNB_id] != PRACH ) { + // check cell srs subframe and ue srs subframe. This has an impact on pusch encoding + isSubframeSRS = is_srs_occasion_common(&ue->frame_parms,proc->frame_tx,proc->subframe_tx); - if (ue->UE_mode[eNB_id] != PRACH) { - // check cell srs subframe and ue srs subframe. This has an impact on pusch encoding - isSubframeSRS = is_srs_occasion_common(&ue->frame_parms,proc->frame_tx,proc->subframe_tx); - - ue_compute_srs_occasion(ue,proc,eNB_id,isSubframeSRS); - - ue_ulsch_uespec_procedures(ue,proc,eNB_id,abstraction_flag); - - LOG_D(PHY,"ULPOWERS After ulsch_uespec_procedures : ue->tx_power_dBm[%d]=%d, NPRB %d\n", - subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_total_RE[subframe_tx]); - } - - if (ue->UE_mode[eNB_id] == PUSCH) { + ue_compute_srs_occasion(ue,proc,eNB_id,isSubframeSRS); + + ue_ulsch_uespec_procedures(ue,proc,eNB_id,abstraction_flag); + + LOG_D(PHY,"ULPOWERS After ulsch_uespec_procedures : ue->tx_power_dBm[%d]=%d, NPRB %d\n", + subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_total_RE[subframe_tx]); + } + + if (ue->UE_mode[eNB_id] == PUSCH) { // check if we need to use PUCCH 1a/1b ue_pucch_procedures(ue,proc,eNB_id,abstraction_flag); // check if we need to use SRS ue_srs_procedures(ue,proc,eNB_id,abstraction_flag); - } // UE_mode==PUSCH + } // UE_mode==PUSCH - + } - + LOG_D(PHY,"doing ulsch_common_procedures (%d.%d): generate_ul_signal %d\n",frame_tx,subframe_tx, + ue->generate_ul_signal[eNB_id]); ulsch_common_procedures(ue,proc, (ue->generate_ul_signal[eNB_id] == 0)); if ((ue->UE_mode[eNB_id] == PRACH) && @@ -2487,8 +2495,8 @@ void phy_procedures_UE_S_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_f ue->common_vars.txdata[aa][i] = 0x00010001; #else //this is the normal case - memset(&ue->common_vars.txdata[aa][0],0, - (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti)*sizeof(int32_t)); + // memset(&ue->common_vars.txdata[aa][0],0, + // (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti)*sizeof(int32_t)); #endif //else EXMIMO } @@ -2661,6 +2669,9 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0); } + // if this is the first PBCH after initial synchronization, make L1 state = PRACH + if (ue->UE_mode[eNB_id]==NOT_SYNCHED) ue->UE_mode[eNB_id] = PRACH; + if (first_run) { first_run = 0; @@ -2733,22 +2744,21 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin LOG_I(PHY,"[UE %d] rx_offset %d\n",ue->Mod_id,ue->rx_offset); - write_output("rxsig0.m","rxs0", ue->common_vars.rxdata[0],ue->frame_parms.samples_per_tti,1,1); + LOG_M("rxsig0.m","rxs0", ue->common_vars.rxdata[0],ue->frame_parms.samples_per_tti,1,1); - write_output("H00.m","h00",&(ue->common_vars.dl_ch_estimates[0][0][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1); - write_output("H10.m","h10",&(ue->common_vars.dl_ch_estimates[0][2][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1); + LOG_M("H00.m","h00",&(ue->common_vars.dl_ch_estimates[0][0][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1); + LOG_M("H10.m","h10",&(ue->common_vars.dl_ch_estimates[0][2][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1); - write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],8*ue->frame_parms.ofdm_symbol_size,1,1); - write_output("PBCH_rxF0_ext.m","pbch0_ext",ue->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1); - write_output("PBCH_rxF0_comp.m","pbch0_comp",ue->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1); - write_output("PBCH_rxF_llr.m","pbch_llr",ue->pbch_vars[0]->llr,(ue->frame_parms.Ncp==0) ? 1920 : 1728,1,4); + LOG_M("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],8*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("PBCH_rxF0_ext.m","pbch0_ext",ue->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1); + LOG_M("PBCH_rxF0_comp.m","pbch0_comp",ue->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1); + LOG_M("PBCH_rxF_llr.m","pbch_llr",ue->pbch_vars[0]->llr,(ue->frame_parms.Ncp==0) ? 1920 : 1728,1,4); exit(-1); */ ue->pbch_vars[eNB_id]->pdu_errors_conseq++; ue->pbch_vars[eNB_id]->pdu_errors++; - // Panos: Substitute call to rrc_out_of_sync_ind() with fill_bch_incication(sync=0). if (ue->mac_enabled == 1) rrc_out_of_sync_ind(ue->Mod_id,frame_rx,eNB_id); else AssertFatal(ue->pbch_vars[eNB_id]->pdu_errors_conseq<100, "More that 100 consecutive PBCH errors! Exiting!\n"); @@ -2783,6 +2793,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint uint8_t next1_thread_id = ue->current_thread_id[subframe_rx]== (RX_NB_TH-1) ? 0:(ue->current_thread_id[subframe_rx]+1); uint8_t next2_thread_id = next1_thread_id== (RX_NB_TH-1) ? 0:(next1_thread_id+1); + LOG_D(PHY,"DCI Decoding procedure in %d.%d\n",frame_rx,subframe_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_IN); #if UE_TIMING_TRACE start_meas(&ue->dlsch_rx_pdcch_stats); @@ -3423,7 +3434,6 @@ void process_rar(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, runmode_t mo subframe_rx, ue->prach_resources[eNB_id]->ra_PreambleIndex); - // Panos: Substitute call to ue_process_rar() with call to fill_dlsch_rar_indication() timing_advance = ue_process_rar(ue->Mod_id, ue->CC_id, frame_rx, @@ -3596,16 +3606,14 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, stop_meas(&ue->dlsch_unscrambling_stats); #endif -#if 0 - LOG_I(PHY," ------ start turbo decoder for AbsSubframe %d.%d / %d ------ \n", frame_rx, subframe_rx, harq_pid); - LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->nb_rb); - LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> rb_alloc_even %x \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->rb_alloc_even); - LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Qm %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->Qm); - LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Nl %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->Nl); - LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> G %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->G); - LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->Kmimo); - LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols); -#endif + LOG_D(PHY," ------ start turbo decoder for AbsSubframe %d.%d / %d ------ \n", frame_rx, subframe_rx, harq_pid); + LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->nb_rb); + LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> rb_alloc_even %x \n", frame_rx, subframe_rx, harq_pid, (unsigned int)((intptr_t)dlsch0->harq_processes[harq_pid]->rb_alloc_even)); + LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Qm %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->Qm); + LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Nl %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->Nl); + LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> G %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->G); + LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->Kmimo); + LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols); #if UE_TIMING_TRACE start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); @@ -3662,15 +3670,13 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, stop_meas(&ue->dlsch_unscrambling_stats); #endif -#if 0 - LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->nb_rb); - LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> rb_alloc_even %x \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->rb_alloc_even); - LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Qm %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->Qm); - LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Nl %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->Nl); - LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> G %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->G); - LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->Kmimo); - LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols); -#endif + LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->nb_rb); + LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> rb_alloc_even %x \n", frame_rx, subframe_rx, harq_pid, (uint16_t)((intptr_t)dlsch1->harq_processes[harq_pid]->rb_alloc_even)); + LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Qm %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->Qm); + LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Nl %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->Nl); + LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> G %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->G); + LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->Kmimo); + LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols); #if UE_TIMING_TRACE start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); @@ -3754,7 +3760,6 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, switch (pdsch) { case PDSCH: - // Panos: Substitute call to ue_send_sdu() with call to fill_dlsch_indication() ue_send_sdu(ue->Mod_id, CC_id, frame_rx, @@ -3764,7 +3769,6 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, eNB_id); break; case SI_PDSCH: - // Panos: Substitute call with call to fill_dlsch_indication() ue_decode_si(ue->Mod_id, CC_id, frame_rx, @@ -3773,7 +3777,6 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3); break; case P_PDSCH: - // Panos: Substitute call with call to fill_dlsch_indication() ue_decode_p(ue->Mod_id, CC_id, frame_rx, @@ -3782,7 +3785,6 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3); break; case RA_PDSCH: - // Panos: Substitute with call to fill_dlsch_rar_indication() process_rar(ue,proc,eNB_id,mode,abstraction_flag); break; case PDSCH1: @@ -4419,11 +4421,9 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *pr /**** End Subframe FE Processing ****/ -#if 0 //Trigger LLR parallelized for Slot 1 - proc->dci_slot0_available=1; - printf("Set available dci slot0 to 1 AbsSubframe %d.%d \n",frame_rx%1024,subframe_rx); -#endif + //proc->dci_slot0_available=1; + //printf("Set available dci slot0 to 1 AbsSubframe %d.%d \n",frame_rx%1024,subframe_rx); /**** Pdsch Procedure Slot0 ****/ // start main thread for Pdsch Procedure (slot0) @@ -5014,19 +5014,19 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id, #if 0 if(subframe_rx==5 && ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20){ - //write_output("decoder_llr.m","decllr",dlsch_llr,G,1,0); - //write_output("llr.m","llr", &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); + //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0); + //LOG_M("llr.m","llr", &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); - write_output("rxdataF0_current.m" , "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); - //write_output("rxdataF0_previous.m" , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("rxdataF0_current.m" , "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); + //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); - //write_output("rxdataF0_previous.m" , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); + //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); - write_output("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); - write_output("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1); - write_output("rxdataF_comp00.m","rxdataF_comp00", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1); - //write_output("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1); - //write_output("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1); + LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1); + LOG_M("rxdataF_comp00.m","rxdataF_comp00", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1); + //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1); AssertFatal (0,""); } @@ -5236,7 +5236,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u } if ((subframe_select(&ue->frame_parms,subframe_tx)==SF_S) && - (slot==1)) { + (slot==1)) { phy_procedures_UE_S_TX(ue,eNB_id,abstraction_flag); } diff --git a/openair1/SCHED_UE/pusch_pc.c b/openair1/SCHED_UE/pusch_pc.c index 90c17099a0..fa38d42c60 100644 --- a/openair1/SCHED_UE/pusch_pc.c +++ b/openair1/SCHED_UE/pusch_pc.c @@ -114,7 +114,7 @@ void pusch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_ else if (ue->ulsch[eNB_id]->PHR > 40) ue->ulsch[eNB_id]->PHR = 40; - LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubframe %d.%d: nb_rb: %d, Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n", + LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubframe %d.%d: nb_rb: %d, Po_PUSCH %d dBm : tx power max %d , Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n", ue->Mod_id,harq_pid,proc->frame_tx,proc->subframe_tx,nb_rb, ue->ulsch[eNB_id]->Po_PUSCH, ue->tx_power_max_dBm, diff --git a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c index 8cf9e13212..fa4ffcc6da 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c @@ -99,7 +99,7 @@ multicast_link_init(void) SOCK_DGRAM, &group_list[group].port, &sin); - LOG_D(EMU, "multicast_link_init(): Created socket %d for group %d, port %d\n", + LOG_D(PHY, "multicast_link_init(): Created socket %d for group %d, port %d\n", group_list[group].socket,group,group_list[group].port); /* Used so we can re-bind to our port while a previous connection is still @@ -107,17 +107,17 @@ multicast_link_init(void) */ if (setsockopt(group_list[group].socket, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, sizeof (reuse_addr)) < 0) { - LOG_E(EMU, "[MULTICAST] ERROR : setsockopt:SO_REUSEADDR, exiting ..."); + LOG_E(PHY, "[MULTICAST] ERROR : setsockopt:SO_REUSEADDR, exiting ..."); exit (EXIT_FAILURE); } if (multicast_if != NULL) { if (setsockopt(group_list[group].socket, SOL_SOCKET,SO_BINDTODEVICE, multicast_if, strlen(multicast_if)) < 0) { - LOG_E(EMU, + LOG_E(PHY, "[MULTICAST] ERROR : setsockopt:SO_BINDTODEVICE on interface %s, exiting ...\n", multicast_if); - LOG_E(EMU, + LOG_E(PHY, "[MULTICAST] make sure that you have a root privilage or run with sudo -E \n"); exit (EXIT_FAILURE); } @@ -132,7 +132,7 @@ multicast_link_init(void) if (setsockopt (group_list[group].socket, IPPROTO_IP, IP_MULTICAST_LOOP, &multicast_loop, sizeof (multicast_loop)) < 0) { - LOG_E(EMU, + LOG_E(PHY, "[MULTICAST] ERROR: %s line %d multicast_link_main_loop() IP_MULTICAST_LOOP %m", __FILE__, __LINE__); exit (EXIT_FAILURE); @@ -143,13 +143,13 @@ multicast_link_init(void) command.imr_interface.s_addr = htonl (INADDR_ANY); if (command.imr_multiaddr.s_addr == -1) { - LOG_E(EMU, "[MULTICAST] ERROR: %s line %d NO MULTICAST", __FILE__, __LINE__); + LOG_E(PHY, "[MULTICAST] ERROR: %s line %d NO MULTICAST", __FILE__, __LINE__); exit (EXIT_FAILURE); } if (setsockopt (group_list[group].socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &command, sizeof (command)) < 0) { - LOG_E(EMU, "[MULTICAST] ERROR: %s line %d IP_ADD_MEMBERSHIP %m", __FILE__, + LOG_E(PHY, "[MULTICAST] ERROR: %s line %d IP_ADD_MEMBERSHIP %m", __FILE__, __LINE__); exit (EXIT_FAILURE); } @@ -202,13 +202,13 @@ multicast_link_read_data (int groupP) if ((groupP < MULTICAST_LINK_NUM_GROUPS) && (groupP >= 0)) { if ((num_bytes = recvfrom (group_list[groupP].socket, group_list[groupP].rx_buffer, 40000, 0, 0, 0)) < 0) { - LOG_E(EMU, "[MULTICAST] recvfrom has failed (%d:%s)\n (%s:%d)\n", + LOG_E(PHY, "[MULTICAST] recvfrom has failed (%d:%s)\n (%s:%d)\n", errno, strerror(errno), __FILE__, __LINE__); } else { rx_handler(num_bytes,group_list[groupP].rx_buffer); } } else { - LOG_E(EMU, "[MULTICAST] ERROR: groupP out of bounds %d\n", groupP); + LOG_E(PHY, "[MULTICAST] ERROR: groupP out of bounds %d\n", groupP); } } @@ -242,7 +242,7 @@ multicast_link_write_sock(int groupP, char *dataP, uint32_t sizeP) if ((num = sendto (group_list[groupP].socket, dataP, sizeP, 0, (struct sockaddr *) &group_list[groupP].sock_remote_addr, sizeof (group_list[groupP].sock_remote_addr))) < 0) { - LOG_E(EMU, "[MULTICAST] sendto has failed (%d:%s)\n (%s:%d)\n", + LOG_E(PHY, "[MULTICAST] sendto has failed (%d:%s)\n (%s:%d)\n", errno, strerror(errno), __FILE__, __LINE__); } @@ -274,22 +274,19 @@ int multicast_link_read_data_from_sock(uint8_t is_master) multicast_link_build_select_list (); - LOG_D(EMU, "Stuck on select with timeout %s\n", + LOG_D(PHY, "Stuck on select with timeout %s\n", timeout_p == NULL ? "infinite" : "15000 usecs"); readsocks = select(highsock + 1, &socks, (fd_set *) 0, (fd_set *) 0, timeout_p); if (readsocks < 0) { - LOG_E(EMU, "Multicast select failed (%d:%s)\n", errno, strerror(errno)); + LOG_E(PHY, "Multicast select failed (%d:%s)\n", errno, strerror(errno)); exit(EXIT_FAILURE); } else if (readsocks > 0) { -#ifdef DEBUG_EMU - LOG_D(EMU, "Multicast Normal read\n"); -#endif multicast_link_read(); } else { /* Timeout */ - LOG_I(EMU, "Multicast select time-out\n"); + LOG_I(PHY, "Multicast select time-out\n"); return 1; } @@ -311,21 +308,21 @@ void multicast_link_start(void (*rx_handlerP) (unsigned int, char *), rx_handler = rx_handlerP; multicast_group = _multicast_group; multicast_if = multicast_ifname; - LOG_I(EMU, "[MULTICAST] LINK START on interface=%s for group=%d: handler=%p\n", + LOG_I(PHY, "[MULTICAST] LINK START on interface=%s for group=%d: handler=%p\n", (multicast_if == NULL) ? "not specified" : multicast_if, multicast_group, rx_handler); multicast_link_init (); #if ! defined(ENABLE_NEW_MULTICAST) - LOG_D(EMU, "[MULTICAST] multicast link start thread\n"); + LOG_D(PHY, "[MULTICAST] multicast link start thread\n"); if (pthread_create (&main_loop_thread, NULL, multicast_link_main_loop, NULL) != 0) { - LOG_E(EMU, "[MULTICAST LINK] Error in pthread_create (%d:%s)\n", + LOG_E(PHY, "[MULTICAST LINK] Error in pthread_create (%d:%s)\n", errno, strerror(errno)); exit(EXIT_FAILURE); } else { pthread_detach(main_loop_thread); // disassociate from parent - LOG_I(EMU, "[MULTICAST LINK] Thread detached\n"); + LOG_I(PHY, "[MULTICAST LINK] Thread detached\n"); } #endif diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 77b8c0e674..909c40512d 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -185,8 +185,8 @@ void DL_channel(RU_t *ru,PHY_VARS_UE *UE,uint subframe,int awgn_flag,double SNR, // fill in perfect channel estimates freq_channel(eNB2UE[round],UE->frame_parms.N_RB_DL,12*UE->frame_parms.N_RB_DL + 1); /* - write_output("channel.m","ch",eNB2UE[round]->ch[0],eNB2UE[round]->channel_length,1,8); - write_output("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL + 1,1,8); + LOG_M("channel.m","ch",eNB2UE[round]->ch[0],eNB2UE[round]->channel_length,1,8); + LOG_M("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL + 1,1,8); */ } } @@ -521,6 +521,7 @@ int main(int argc, char **argv) int k,i,j,aa; int re; + int s,Kr,Kr_bytes; double SNR,snr0=-2.0,snr1,rate = 0; @@ -1137,10 +1138,10 @@ int main(int argc, char **argv) } else { eNB->te = dlsch_encoding_2threads; - extern void init_td_thread(PHY_VARS_eNB *, pthread_attr_t *); - extern void init_te_thread(PHY_VARS_eNB *, pthread_attr_t *); - init_td_thread(eNB,NULL); - init_te_thread(eNB,NULL); + extern void init_td_thread(PHY_VARS_eNB *); + extern void init_te_thread(PHY_VARS_eNB *); + init_td_thread(eNB); + init_te_thread(eNB); } // callback functions required for phy_procedures_tx @@ -1306,7 +1307,9 @@ int main(int argc, char **argv) } */ + UE->pdcch_vars[UE->current_thread_id[subframe]][0]->crnti = n_rnti; + UE->n_connected_eNB = 1; printf("Allocating %dx%d eNB->UE channel descriptor\n",eNB->frame_parms.nb_antennas_tx,UE->frame_parms.nb_antennas_rx); eNB2UE[0] = new_channel_desc_scm(eNB->frame_parms.nb_antennas_tx, @@ -1318,8 +1321,10 @@ int main(int argc, char **argv) rx_sample_offset, 0); + reset_meas(&eNB2UE[0]->random_channel); + reset_meas(&eNB2UE[0]->interp_time); if(num_rounds>1) { - for(n=1; n<4; n++) + for(n=1; n<4; n++) { eNB2UE[n] = new_channel_desc_scm(eNB->frame_parms.nb_antennas_tx, UE->frame_parms.nb_antennas_rx, channel_model, @@ -1328,8 +1333,11 @@ int main(int argc, char **argv) forgetting_factor, rx_sample_offset, 0); + reset_meas(&eNB2UE[n]->random_channel); + reset_meas(&eNB2UE[n]->interp_time); + } } - + if (eNB2UE[0]==NULL) { printf("Problem generating channel model. Exiting.\n"); exit(-1); @@ -1662,13 +1670,13 @@ int main(int argc, char **argv) if (n_frames==1) { printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB); - write_output("txsig0.m","txs0", &ru->common.txdata[0][subframe* eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti,1,1); + LOG_M("txsig0.m","txs0", &ru->common.txdata[0][subframe* eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti,1,1); if (transmission_mode<7) { - write_output("txsigF0.m","txsF0x", &ru->common.txdataF_BF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + LOG_M("txsigF0.m","txsF0x", &ru->common.txdataF_BF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); } else if (transmission_mode == 7) { - write_output("txsigF0.m","txsF0", &ru->common.txdataF_BF[5][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); - write_output("txsigF0_BF.m","txsF0_BF", &ru->common.txdataF_BF[0][0],eNB->frame_parms.ofdm_symbol_size,1,1); + LOG_M("txsigF0.m","txsF0", &ru->common.txdataF_BF[5][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + LOG_M("txsigF0_BF.m","txsF0_BF", &ru->common.txdataF_BF[0][0],eNB->frame_parms.ofdm_symbol_size,1,1); } } } @@ -1734,14 +1742,14 @@ int main(int argc, char **argv) printf("DCI not received\n"); dci_errors[round]++; - write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); - write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); + LOG_M("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); + LOG_M("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); - write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNB_id]->rxdataF_comp[0],4*300,1,1); - write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNB_id]->llr,2400,1,4); + LOG_M("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNB_id]->rxdataF_comp[0],4*300,1,1); + LOG_M("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNB_id]->llr,2400,1,4); - write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); - write_output("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); + LOG_M("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); exit(-1); @@ -1774,38 +1782,38 @@ int main(int argc, char **argv) */ } - write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); - write_output("ch0.m","ch0",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8); + LOG_M("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); + LOG_M("ch0.m","ch0",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8); if (eNB->frame_parms.nb_antennas_tx>1) - write_output("ch1.m","ch1",eNB2UE[0]->ch[eNB->frame_parms.nb_antennas_rx],eNB2UE[0]->channel_length,1,8); + LOG_M("ch1.m","ch1",eNB2UE[0]->ch[eNB->frame_parms.nb_antennas_rx],eNB2UE[0]->channel_length,1,8); //common vars - write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); + LOG_M("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); - write_output("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (UE->frame_parms.nb_antennas_rx>1) { - write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); - write_output("rxsigF1.m","rxsF1", UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); + LOG_M("rxsigF1.m","rxsF1", UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); } - write_output("dlsch00_r0.m","dl00_r0", + LOG_M("dlsch00_r0.m","dl00_r0", &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (UE->frame_parms.nb_antennas_rx>1) - write_output("dlsch01_r0.m","dl01_r0", + LOG_M("dlsch01_r0.m","dl01_r0", &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (eNB->frame_parms.nb_antennas_tx>1) - write_output("dlsch10_r0.m","dl10_r0", + LOG_M("dlsch10_r0.m","dl10_r0", &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1)) - write_output("dlsch11_r0.m","dl11_r0", + LOG_M("dlsch11_r0.m","dl11_r0", &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0]), UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1); @@ -1814,14 +1822,14 @@ int main(int argc, char **argv) dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round, UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid); - write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); + LOG_M("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); //pdcch_vars - write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); - write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); + LOG_M("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); + LOG_M("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); - write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNB_id]->rxdataF_comp[0],4*300,1,1); - write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNB_id]->llr,2400,1,4); + LOG_M("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNB_id]->rxdataF_comp[0],4*300,1,1); + LOG_M("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNB_id]->llr,2400,1,4); } @@ -1869,31 +1877,31 @@ int main(int argc, char **argv) sprintf(fname,"rxsig0_r%d.m",round); sprintf(vname,"rxs0_r%d",round); - write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); + LOG_M(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); sprintf(fname,"rxsigF0_r%d.m",round); sprintf(vname,"rxs0F_r%d",round); - write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (UE->frame_parms.nb_antennas_rx>1) { sprintf(fname,"rxsig1_r%d.m",round); sprintf(vname,"rxs1_r%d.m",round); - write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); + LOG_M(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); sprintf(fname,"rxsigF1_r%d.m",round); sprintf(vname,"rxs1F_r%d.m",round); - write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); } sprintf(fname,"dlsch00_r%d.m",round); sprintf(vname,"dl00_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (UE->frame_parms.nb_antennas_rx>1) { sprintf(fname,"dlsch01_r%d.m",round); sprintf(vname,"dl01_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0]), UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1); } @@ -1901,7 +1909,7 @@ int main(int argc, char **argv) if (eNB->frame_parms.nb_antennas_tx>1) { sprintf(fname,"dlsch10_r%d.m",round); sprintf(vname,"dl10_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0]), UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1); } @@ -1909,7 +1917,7 @@ int main(int argc, char **argv) if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1)) { sprintf(fname,"dlsch11_r%d.m",round); sprintf(vname,"dl11_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0]), UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1); } @@ -1918,16 +1926,16 @@ int main(int argc, char **argv) dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round, UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid); - //write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); - //write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); - //write_output("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); - //write_output("dlsch_w.m","w",UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); + //LOG_M("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); + //LOG_M("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); + //LOG_M("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); + //LOG_M("dlsch_w.m","w",UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); //pdcch_vars - write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); - write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); + LOG_M("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); + LOG_M("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); - write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNB_id]->rxdataF_comp[0],4*300,1,1); - write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNB_id]->llr,2400,1,4); + LOG_M("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNB_id]->rxdataF_comp[0],4*300,1,1); + LOG_M("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNB_id]->llr,2400,1,4); if (round == 3) exit(-1); } diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c index 90ba1ec804..0c942df275 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c @@ -3426,6 +3426,7 @@ int main(int argc, char **argv) re_allocated = dlsch_modulation(eNB, eNB->common_vars.txdataF[eNB_id], AMP, + frame, subframe, num_pdcch_symbols, ((TB0_active == 1)? eNB->dlsch[k][0]: NULL), @@ -3471,9 +3472,9 @@ int main(int argc, char **argv) &eNB->frame_parms); if (n_frames==2) { - write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + LOG_M("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); if (eNB->frame_parms.nb_antennas_tx>1) - write_output("txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + LOG_M("txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); } tx_lev = 0; @@ -3485,9 +3486,9 @@ int main(int argc, char **argv) tx_lev_dB = (unsigned int) dB_fixed(tx_lev); if (n_frames==2) { - write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + LOG_M("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); if (eNB->frame_parms.nb_antennas_tx>1) - write_output("txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + LOG_M("txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); } tx_lev = 0; @@ -3500,7 +3501,7 @@ int main(int argc, char **argv) if (n_frames==2) { printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB); - write_output("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe*eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti,1,1); + LOG_M("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe*eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti,1,1); } } // printf("Copying tx ..., nsymb %d (n_tx %d), awgn %d\n",nsymb,eNB->frame_parms.nb_antennas_tx,awgn_flag); @@ -3552,8 +3553,8 @@ int main(int argc, char **argv) } if (UE->perfect_ce==1){ freq_channel(eNB2UE[round],UE->frame_parms.N_RB_DL,12*UE->frame_parms.N_RB_DL + 1); - // write_output("channel.m","ch",eNB2UE[round]->ch[0],eNB2UE[round]->channel_length,1,8); - // write_output("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL +1,1,8); + // LOG_M("channel.m","ch",eNB2UE[round]->ch[0],eNB2UE[round]->channel_length,1,8); + // LOG_M("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL +1,1,8); } } @@ -4155,10 +4156,10 @@ int main(int argc, char **argv) sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round, TB); sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, TB); - write_output(fname,vname, UE->pdsch_vars[UE->current_thread_id[subframe]][0]->llr[UE->dlsch[UE->current_thread_id[subframe]][0][TB]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][TB]->current_harq_pid]->codeword],coded_bits_per_codeword[TB],1,0); + LOG_M(fname,vname, UE->pdsch_vars[UE->current_thread_id[subframe]][0]->llr[UE->dlsch[UE->current_thread_id[subframe]][0][TB]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][TB]->current_harq_pid]->codeword],coded_bits_per_codeword[TB],1,0); sprintf(fname,"dlsch_cw%d_e.m", TB); sprintf(vname,"dlschcw%d_e", TB); - write_output(fname, vname,eNB->dlsch[0][TB]->harq_processes[0]->e,coded_bits_per_codeword[TB],1,4); + LOG_M(fname, vname,eNB->dlsch[0][TB]->harq_processes[0]->e,coded_bits_per_codeword[TB],1,4); uncoded_ber=0; printf("trials=%d\n", trials); @@ -4174,7 +4175,7 @@ int main(int argc, char **argv) avg_ber += uncoded_ber; sprintf(fname,"cw%d_uncoded_ber_bit.m", TB); sprintf(vname,"uncoded_ber_bit_cw%d", TB); - write_output(fname, vname,uncoded_ber_bit,coded_bits_per_codeword[TB],1,0); + LOG_M(fname, vname,uncoded_ber_bit,coded_bits_per_codeword[TB],1,0); printf("cw %d, uncoded ber %f\n",TB,uncoded_ber); free(uncoded_ber_bit); @@ -4425,9 +4426,9 @@ int main(int argc, char **argv) &UE->dlsch_eNB[0][0], coded_bits_per_codeword[0]); - // write_output("sic_buffer.m","sic", *sic_buffer,re_allocated,1,1); - // write_output("rxdataF_comp1.m","rxF_comp1", *UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid][round],14*12*25,1,1); - // write_output("rxdataF_rho.m","rho", *UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid][round],14*12*25,1,1); + // LOG_M("sic_buffer.m","sic", *sic_buffer,re_allocated,1,1); + // LOG_M("rxdataF_comp1.m","rxF_comp1", *UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid][round],14*12*25,1,1); + // LOG_M("rxdataF_rho.m","rho", *UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid][round],14*12*25,1,1); switch (get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs)){ @@ -4482,7 +4483,7 @@ int main(int argc, char **argv) printf("[DLSIM] TB1 is mapped into CW%d\n", UE->dlsch[UE->current_thread_id[subframe]][0][1]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][1]->current_harq_pid]->codeword); #endif - // write_output("rxdata_llr1.m","llr1", UE->pdsch_vars[eNB_id]->llr[1],re_allocated*2,1,0); + // LOG_M("rxdata_llr1.m","llr1", UE->pdsch_vars[eNB_id]->llr[1],re_allocated*2,1,0); // replace cw_sic with TB+1 UE->dlsch[UE->current_thread_id[subframe]][0][1]->rnti = (common_flag==0) ? n_rnti: SI_RNTI; @@ -4508,10 +4509,10 @@ int main(int argc, char **argv) AssertFatal(uncoded_ber_bit, "uncoded_ber_bit==NULL"); sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round,1); sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, 1); - write_output(fname,vname, UE->pdsch_vars[UE->current_thread_id[subframe]][0]->llr[1],coded_bits_per_codeword[1],1,0); + LOG_M(fname,vname, UE->pdsch_vars[UE->current_thread_id[subframe]][0]->llr[1],coded_bits_per_codeword[1],1,0); sprintf(fname,"dlsch_cw%d_e.m", 1); sprintf(vname,"dlschcw%d_e", 1); - write_output(fname, vname,eNB->dlsch[0][1]->harq_processes[0]->e,coded_bits_per_codeword[1],1,4); + LOG_M(fname, vname,eNB->dlsch[0][1]->harq_processes[0]->e,coded_bits_per_codeword[1],1,4); uncoded_ber=0; printf("trials=%d\n", trials); for (i=0;icommon_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); + LOG_M(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); sprintf(fname,"rxsigF0_r%d.m",round); sprintf(vname,"rxs0F_r%d",round); - write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1); + LOG_M(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1); if (UE->frame_parms.nb_antennas_rx>1) { sprintf(fname,"rxsig1_r%d.m",round); sprintf(vname,"rxs1_r%d",round); - write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); + LOG_M(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); sprintf(fname,"rxsig1F_r%d.m",round); sprintf(vname,"rxs1F_r%d",round); - write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1); + LOG_M(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1); } //channel - write_output("chanF11.m","chF11",eNB2UE[0]->chF[0],12*NB_RB,1,8); - write_output("chan11.m","ch11",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8); + LOG_M("chanF11.m","chF11",eNB2UE[0]->chF[0],12*NB_RB,1,8); + LOG_M("chan11.m","ch11",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8); if (eNB->frame_parms.nb_antennas_rx==2 && eNB->frame_parms.nb_antennas_tx==1 ){ - write_output("chan21.m","ch21",eNB2UE[0]->ch[1],eNB2UE[0]->channel_length,1,8); + LOG_M("chan21.m","ch21",eNB2UE[0]->ch[1],eNB2UE[0]->channel_length,1,8); } if (eNB->frame_parms.nb_antennas_tx>1){ - write_output("chan12.m","ch12",eNB2UE[0]->ch[1],eNB2UE[0]->channel_length,1,8); + LOG_M("chan12.m","ch12",eNB2UE[0]->ch[1],eNB2UE[0]->channel_length,1,8); if ( eNB->frame_parms.nb_antennas_rx>1){ - write_output("chan21.m","ch21",eNB2UE[0]->ch[2],eNB2UE[0]->channel_length,1,8); - write_output("chan22.m","ch22",eNB2UE[0]->ch[3],eNB2UE[0]->channel_length,1,8); + LOG_M("chan21.m","ch21",eNB2UE[0]->ch[2],eNB2UE[0]->channel_length,1,8); + LOG_M("chan22.m","ch22",eNB2UE[0]->ch[3],eNB2UE[0]->channel_length,1,8); } } //channel estimates sprintf(fname,"dlsch00_r%d.m",round); sprintf(vname,"dl00_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (UE->frame_parms.nb_antennas_rx>1) { sprintf(fname,"dlsch01_r%d.m",round); sprintf(vname,"dl01_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); } if (eNB->frame_parms.nb_antennas_tx>1) { sprintf(fname,"dlsch10_r%d.m",round); sprintf(vname,"dl10_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); } if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1)) { sprintf(fname,"dlsch11_r%d.m",round); sprintf(vname,"dl11_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); } //pdsch_vars dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round, UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid); /* - write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); - write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); - write_output("dlsch_eNB_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); - write_output("dlsch_UE_w.m","w",UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); + LOG_M("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); + LOG_M("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); + LOG_M("dlsch_eNB_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); + LOG_M("dlsch_UE_w.m","w",UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); */ //pdcch_vars - write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); - write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); + LOG_M("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); + LOG_M("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); - write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id]->rxdataF_comp[0],4*300,1,1); - write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id]->llr,2400,1,4); + LOG_M("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id]->rxdataF_comp[0],4*300,1,1); + LOG_M("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id]->llr,2400,1,4); if (round == 3) exit(-1); } @@ -5181,11 +5182,6 @@ int main(int argc, char **argv) #endif } -#if 0 - thr_cw0_tm4_nonconst = rate[0]*get_Qm(PHY_vars_eNB->dlsch[0][0]->harq_processes[0]->mcs)* \ - ((double)(round_trials[0][0]-dci_errors)/((double)round_trials[0][0] + round_trials[0][1] + round_trials[0][2] + round_trials[0][3])); - printf("Throughput cw0 noncnstr = %f \n", thr_cw0_tm4_nonconst); -#endif //FOR CW1 /*thr_cw1[0] = rate[1]*get_Qm(PHY_vars_eNB->dlsch[0][1]->harq_processes[0]->mcs)*(1-((double)errs[0][0]/(double)round_trials[0][0])) \ *(1-((double)errs[1][0]/(double)round_trials[1][0])); diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c index 3c4b3d0cd3..b41dd5536c 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c @@ -2679,6 +2679,7 @@ PMI_FEEDBACK: re_allocated = dlsch_modulation(eNB, eNB->common_vars.txdataF[eNB_id], AMP, + frame, subframe, num_pdcch_symbols, eNB->dlsch[k][0], @@ -2849,16 +2850,16 @@ PMI_FEEDBACK: if (n_frames==1) { if (transmission_mode<7) - write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], + LOG_M("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); else if (transmission_mode==7) - write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][5][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], + LOG_M("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][5][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); - write_output("txsigF0_BF.m","txsF0_BF", &eNB->common_vars.txdataF_BF[eNB_id][0][0], + LOG_M("txsigF0_BF.m","txsF0_BF", &eNB->common_vars.txdataF_BF[eNB_id][0][0], eNB->frame_parms.ofdm_symbol_size,1,1); if (eNB->frame_parms.nb_antennas_tx>1)// to be updated - write_output("txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], + LOG_M("txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); } tx_lev = 0; @@ -2873,8 +2874,8 @@ PMI_FEEDBACK: if (n_frames==1) { printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB); - write_output("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe*eNB->frame_parms.samples_per_tti],eNB->frame_parms.samples_per_tti,1,1); - // write_output("txsig0.m","txs0",&eNB->common_vars.txdata[eNB_id][0][0*eNB->frame_parms.samples_per_tti],eNB->frame_parms.samples_per_tti*10,1,1); + LOG_M("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe*eNB->frame_parms.samples_per_tti],eNB->frame_parms.samples_per_tti,1,1); + // LOG_M("txsig0.m","txs0",&eNB->common_vars.txdata[eNB_id][0][0*eNB->frame_parms.samples_per_tti],eNB->frame_parms.samples_per_tti*10,1,1); } } @@ -2895,8 +2896,8 @@ PMI_FEEDBACK: break; } printf("Read in %d samples\n",i/4); - write_output("txsig0.m","txs0", txdata[0],2*frame_parms->samples_per_tti,1,1); - // write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],2*frame_parms->samples_per_tti,1,1); + // LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); tx_lev = signal_energy(&txdata[0][0], OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); tx_lev_dB = (unsigned int) dB_fixed(tx_lev); @@ -2942,8 +2943,8 @@ PMI_FEEDBACK: // fill in perfect channel estimates freq_channel(eNB2UE[round],UE->frame_parms.N_RB_DL,12*UE->frame_parms.N_RB_DL + 1); /* - write_output("channel.m","ch",eNB2UE[round]->ch[0],eNB2UE[round]->channel_length,1,8); - write_output("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL + 1,1,8); + LOG_M("channel.m","ch",eNB2UE[round]->ch[0],eNB2UE[round]->channel_length,1,8); + LOG_M("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL + 1,1,8); */ } } @@ -3482,52 +3483,52 @@ PMI_FEEDBACK: if (test_perf ==0 ) { if ((n_frames==1) && (Ns==(2+(2*subframe))) && (l==0)) { - write_output("ch0.m","ch0",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8); + LOG_M("ch0.m","ch0",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8); if (eNB->frame_parms.nb_antennas_tx>1) - write_output("ch1.m","ch1",eNB2UE[0]->ch[eNB->frame_parms.nb_antennas_rx],eNB2UE[0]->channel_length,1,8); + LOG_M("ch1.m","ch1",eNB2UE[0]->ch[eNB->frame_parms.nb_antennas_rx],eNB2UE[0]->channel_length,1,8); //common vars - //write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); - write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][subframe*UE->frame_parms.samples_per_tti],UE->frame_parms.samples_per_tti,1,1); - //write_output("rxsigF0.m","rxsF0", &UE->common_vars.rxdataF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); - write_output("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); + //LOG_M("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); + LOG_M("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][subframe*UE->frame_parms.samples_per_tti],UE->frame_parms.samples_per_tti,1,1); + //LOG_M("rxsigF0.m","rxsF0", &UE->common_vars.rxdataF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (UE->frame_parms.nb_antennas_rx>1) { - write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); - write_output("rxsigF1.m","rxsF1", UE->common_vars..common_vars_rx_data_per_thread[UE->current_thread_id[subframe]]rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); + LOG_M("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); + LOG_M("rxsigF1.m","rxsF1", UE->common_vars..common_vars_rx_data_per_thread[UE->current_thread_id[subframe]]rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1); } - write_output("dlsch00_r0.m","dl00_r0", + LOG_M("dlsch00_r0.m","dl00_r0", &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (UE->frame_parms.nb_antennas_rx>1) - write_output("dlsch01_r0.m","dl01_r0", + LOG_M("dlsch01_r0.m","dl01_r0", &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (eNB->frame_parms.nb_antennas_tx>1) - write_output("dlsch10_r0.m","dl10_r0", + LOG_M("dlsch10_r0.m","dl10_r0", &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1)) - write_output("dlsch11_r0.m","dl11_r0", + LOG_M("dlsch11_r0.m","dl11_r0", &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0]), UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1); //pdsch_vars dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round); //dump_dlsch2(UE,eNB_id_i,coded_bits_per_codeword); - write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); + LOG_M("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); //pdcch_vars - write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); - write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); + LOG_M("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); + LOG_M("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); - write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1); - write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[eNB_id]->llr,2400,1,4); + LOG_M("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1); + LOG_M("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[eNB_id]->llr,2400,1,4); } } @@ -3577,7 +3578,7 @@ PMI_FEEDBACK: avg_ber += uncoded_ber; if (n_frames==1) - write_output("uncoded_ber_bit.m","uncoded_ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); + LOG_M("uncoded_ber_bit.m","uncoded_ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); start_meas(&UE->dlsch_unscrambling_stats); @@ -3690,30 +3691,30 @@ PMI_FEEDBACK: sprintf(fname,"rxsig0_r%d.m",round); sprintf(vname,"rxs0_r%d",round); - write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); + LOG_M(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1); sprintf(fname,"rxsigF0_r%d.m",round); sprintf(vname,"rxs0F_r%d",round); - write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1); + LOG_M(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1); if (UE->frame_parms.nb_antennas_rx>1) { sprintf(fname,"rxsig1_r%d.m",round); sprintf(vname,"rxs1_r%d.m",round); - write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); + LOG_M(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1); sprintf(fname,"rxsig1F_r%d.m",round); sprintf(vname,"rxs1F_r%d.m",round); - write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1); + LOG_M(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1); } sprintf(fname,"dlsch00_r%d.m",round); sprintf(vname,"dl00_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]), UE->frame_parms.ofdm_symbol_size*nsymb,1,1); if (UE->frame_parms.nb_antennas_rx>1) { sprintf(fname,"dlsch01_r%d.m",round); sprintf(vname,"dl01_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0]), UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1); } @@ -3721,7 +3722,7 @@ PMI_FEEDBACK: if (eNB->frame_parms.nb_antennas_tx>1) { sprintf(fname,"dlsch10_r%d.m",round); sprintf(vname,"dl10_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0]), UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1); } @@ -3729,7 +3730,7 @@ PMI_FEEDBACK: if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1)) { sprintf(fname,"dlsch11_r%d.m",round); sprintf(vname,"dl11_r%d",round); - write_output(fname,vname, + LOG_M(fname,vname, &(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0]), UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1); } @@ -3737,10 +3738,10 @@ PMI_FEEDBACK: //pdsch_vars dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round); /* - write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); - write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); - write_output("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); - write_output("dlsch_w.m","w",UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); + LOG_M("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); + LOG_M("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); + LOG_M("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); + LOG_M("dlsch_w.m","w",UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); */ if (round == 3) exit(-1); diff --git a/openair1/SIMULATION/LTE_PHY/dummy_functions.c b/openair1/SIMULATION/LTE_PHY/dummy_functions.c index ac96d53b0f..586193484d 100644 --- a/openair1/SIMULATION/LTE_PHY/dummy_functions.c +++ b/openair1/SIMULATION/LTE_PHY/dummy_functions.c @@ -60,7 +60,7 @@ void ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, uint8_t * sdu, uint16_t sdu_len, uint8_t eNB_index, uint8_t sync_area){} -int ue_query_mch(uint8_t Mod_id, uint8_t CC_id, uint32_t frame, +int ue_query_mch(module_id_t Mod_id, uint8_t CC_id, uint32_t frame, sub_frame_t subframe, uint8_t eNB_index, uint8_t * sync_area, uint8_t * mcch_active){ return(0);} diff --git a/openair1/SIMULATION/LTE_PHY/framegen.c b/openair1/SIMULATION/LTE_PHY/framegen.c index 0adc07ff97..f5b1e6d45e 100644 --- a/openair1/SIMULATION/LTE_PHY/framegen.c +++ b/openair1/SIMULATION/LTE_PHY/framegen.c @@ -625,9 +625,9 @@ int main(int argc, char **argv) char fname[64], vname[64]; sprintf(fname, "txsig%d.m", frame); sprintf(vname, "txs%d", frame); - write_output(fname, vname, PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][0], FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M(fname, vname, PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][0], FRAME_LENGTH_COMPLEX_SAMPLES,1,1); if (frame == 0) - write_output("txsigF0.m", "txsF0", PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][0], frame_parms->ofdm_symbol_size*14*10, 1, 1); + LOG_M("txsigF0.m", "txsF0", PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][0], frame_parms->ofdm_symbol_size*14*10, 1, 1); }//frame } diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c index fbe75fed16..9910c97af8 100644 --- a/openair1/SIMULATION/LTE_PHY/mbmssim.c +++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c @@ -381,10 +381,10 @@ int main(int argc, char **argv) CYCLIC_PREFIX); if (n_frames==1) { - write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[0][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], + LOG_M("txsigF0.m","txsF0", &eNB->common_vars.txdataF[0][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); //if (eNB->frame_parms.nb_antennas_tx>1) - //write_output("txsigF1.m","txsF1", &eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + //LOG_M("txsigF1.m","txsF1", &eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); } tx_lev = 0; @@ -399,7 +399,7 @@ int main(int argc, char **argv) if (n_frames==1) { printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB); - // write_output("txsig0.m","txs0", &eNB->common_vars.txdata[0][0][subframe* eNB->frame_parms.samples_per_tti], + // LOG_M("txsig0.m","txs0", &eNB->common_vars.txdata[0][0][subframe* eNB->frame_parms.samples_per_tti], // eNB->frame_parms.samples_per_tti,1,1); } diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c index d1e25da5c3..f44ed7b3a2 100644 --- a/openair1/SIMULATION/LTE_PHY/pbchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c @@ -657,12 +657,12 @@ int main(int argc, char **argv) } - // write_output("pilotsF.m","rsF",txdataF[0],frame_parms->ofdm_symbol_size,1,1); + // LOG_M("pilotsF.m","rsF",txdataF[0],frame_parms->ofdm_symbol_size,1,1); - write_output("txsigF0.m","txsF0", eNB->common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF0.m","txsF0", eNB->common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); if (eNB->frame_parms.nb_antennas_tx>1) - write_output("txsigF1.m","txsF1", eNB->common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF1.m","txsF1", eNB->common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); tx_lev = 0; tx_lev1 = 0; @@ -710,10 +710,10 @@ int main(int argc, char **argv) OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); } - write_output("txsigF0_1.m","txsF0_1", eNB1->common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF0_1.m","txsF0_1", eNB1->common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); if (eNB1->frame_parms.nb_antennas_tx>1) - write_output("txsigF1_1.m","txsF1_1", eNB1->common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF1_1.m","txsF1_1", eNB1->common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); } if (interf2>-20) { @@ -736,28 +736,28 @@ int main(int argc, char **argv) OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); } - write_output("txsigF0_2.m","txsF0_2", eNB2->common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF0_2.m","txsF0_2", eNB2->common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); if (eNB2->frame_parms.nb_antennas_tx>1) - write_output("txsigF1_2.m","txsF1_2", eNB2->common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF1_2.m","txsF1_2", eNB2->common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); } // tx_lev_dB = (unsigned int) dB_fixed(tx_lev); - write_output("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); if (frame_parms->nb_antennas_tx>1) - write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("txsig0_1.m","txs0_1", eNB1->common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0_1.m","txs0_1", eNB1->common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); if (frame_parms->nb_antennas_tx>1) - write_output("txsig1_1.m","txs1_1", eNB1->common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig1_1.m","txs1_1", eNB1->common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("txsig0_2.m","txs0_2", eNB2->common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0_2.m","txs0_2", eNB2->common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); if (frame_parms->nb_antennas_tx>1) - write_output("txsig1_2.m","txs1_2", eNB2->common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig1_2.m","txs1_2", eNB2->common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); } else { //read in from file i=0; @@ -782,8 +782,8 @@ int main(int argc, char **argv) } printf("Read in %d samples\n",i/4); - write_output("txsig0.m","txs0", txdata[0],2*frame_parms->samples_per_tti,1,1); - // write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],2*frame_parms->samples_per_tti,1,1); + // LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); tx_lev = signal_energy(&txdata[0][0], OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); // tx_lev_dB = (unsigned int) dB_fixed(tx_lev); @@ -960,7 +960,7 @@ int main(int argc, char **argv) if (l==((eNB->frame_parms.Ncp==0)?4:3)) { //sprintf(fname,"dl_ch00_%d.m",l); //sprintf(vname,"dl_ch00_%d",l); - //write_output(fname,vname,&(common_vars->dl_ch_estimates[0][frame_parms->ofdm_symbol_size*(l%6)]),frame_parms->ofdm_symbol_size,1,1); + //LOG_M(fname,vname,&(common_vars->dl_ch_estimates[0][frame_parms->ofdm_symbol_size*(l%6)]),frame_parms->ofdm_symbol_size,1,1); lte_est_freq_offset(UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].dl_ch_estimates[0], &UE->frame_parms, @@ -1050,16 +1050,16 @@ int main(int argc, char **argv) if (n_frames==1) { - write_output("H00.m","h00",&(UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); + LOG_M("H00.m","h00",&(UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); if (n_tx==2) - write_output("H10.m","h10",&(UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); + LOG_M("H10.m","h10",&(UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); - write_output("rxsig0.m","rxs0", UE->common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("rxsigF0.m","rxsF0", UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1); - write_output("PBCH_rxF0_ext.m","pbch0_ext",UE->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1); - write_output("PBCH_rxF0_comp.m","pbch0_comp",UE->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1); - write_output("PBCH_rxF_llr.m","pbch_llr",UE->pbch_vars[0]->llr,(frame_parms->Ncp==0) ? 1920 : 1728,1,4); + LOG_M("rxsig0.m","rxs0", UE->common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("rxsigF0.m","rxsF0", UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1); + LOG_M("PBCH_rxF0_ext.m","pbch0_ext",UE->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1); + LOG_M("PBCH_rxF0_comp.m","pbch0_comp",UE->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1); + LOG_M("PBCH_rxF_llr.m","pbch_llr",UE->pbch_vars[0]->llr,(frame_parms->Ncp==0) ? 1920 : 1728,1,4); } diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index ef0e221491..ac442ae5e9 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -787,8 +787,8 @@ int main(int argc, char **argv) } printf("Read in %d samples\n",i/4); - write_output("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - // write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + // LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); tx_lev = signal_energy(&txdata[0][0], OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); tx_lev_dB = (unsigned int) dB_fixed(tx_lev); @@ -949,13 +949,13 @@ int main(int argc, char **argv) } - // write_output("pilotsF.m","rsF",txdataF[0],lte_eNB->frame_parms.ofdm_symbol_size,1,1); + // LOG_M("pilotsF.m","rsF",txdataF[0],lte_eNB->frame_parms.ofdm_symbol_size,1,1); if (n_frames==1) { - write_output("txsigF0.m","txsF0", eNB->common_vars.txdataF[eNb_id][0],4*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF0.m","txsF0", eNB->common_vars.txdataF[eNb_id][0],4*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX,1,1); if (eNB->frame_parms.nb_antenna_ports_eNB > 1) - write_output("txsigF1.m","txsF1", eNB->common_vars.txdataF[eNb_id][1],4*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF1.m","txsF1", eNB->common_vars.txdataF[eNb_id][1],4*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX,1,1); } tx_lev = 0; @@ -1009,7 +1009,7 @@ int main(int argc, char **argv) 2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES,0); } - //write_output("channel0.m","chan0",ch[0],channel_length,1,8); + //LOG_M("channel0.m","chan0",ch[0],channel_length,1,8); // scale by path_loss = NOW - P_noise //sigma2 = pow(10,sigma2_dB/10); @@ -1056,8 +1056,8 @@ int main(int argc, char **argv) // fill in perfect channel estimates freq_channel(eNB2UE,UE->frame_parms.N_RB_DL,12*UE->frame_parms.N_RB_DL + 1); - //write_output("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8); - //write_output("channelF.m","chF",desc1->chF[0],nb_samples,1,8); + //LOG_M("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8); + //LOG_M("channelF.m","chF",desc1->chF[0],nb_samples,1,8); for(k=0; knb_antennas_tx; aa++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { @@ -1084,7 +1084,7 @@ int main(int argc, char **argv) if (l==((eNB->frame_parms.Ncp==0)?4:3)) { - // write_output("H00.m","h00",&(UE->common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); + // LOG_M("H00.m","h00",&(UE->common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); // do PDCCH procedures here UE->pdcch_vars[0][0]->crnti = n_rnti; @@ -1206,27 +1206,27 @@ int main(int argc, char **argv) if (n_frames==1) { - write_output("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); if (n_tx>1) - write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("rxsig0.m","rxs0", UE->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); - write_output("rxsigF0.m","rxsF0", UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1); + LOG_M("rxsig0.m","rxs0", UE->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); + LOG_M("rxsigF0.m","rxsF0", UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1); if (n_rx>1) { - write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],10*frame_parms->samples_per_tti,1,1); - write_output("rxsigF1.m","rxsF1", UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[1],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1); + LOG_M("rxsig1.m","rxs1", UE->common_vars.rxdata[1],10*frame_parms->samples_per_tti,1,1); + LOG_M("rxsigF1.m","rxsF1", UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[1],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1); } - write_output("H00.m","h00",&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); + LOG_M("H00.m","h00",&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); if (n_tx==2) - write_output("H10.m","h10",&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); + LOG_M("H10.m","h10",&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1); - write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",UE->pdcch_vars[0][eNb_id]->rxdataF_ext[0],3*12*UE->frame_parms.N_RB_DL,1,1); - write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNb_id]->rxdataF_comp[0],4*12*UE->frame_parms.N_RB_DL,1,1); - write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNb_id]->llr,2400,1,4); + LOG_M("pdcch_rxF_ext0.m","pdcch_rxF_ext0",UE->pdcch_vars[0][eNb_id]->rxdataF_ext[0],3*12*UE->frame_parms.N_RB_DL,1,1); + LOG_M("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNb_id]->rxdataF_comp[0],4*12*UE->frame_parms.N_RB_DL,1,1); + LOG_M("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNb_id]->llr,2400,1,4); } lte_sync_time_free(); diff --git a/openair1/SIMULATION/LTE_PHY/prachsim.c b/openair1/SIMULATION/LTE_PHY/prachsim.c index 58f89bd65b..7475017d85 100644 --- a/openair1/SIMULATION/LTE_PHY/prachsim.c +++ b/openair1/SIMULATION/LTE_PHY/prachsim.c @@ -425,8 +425,8 @@ int main(int argc, char **argv) /* tx_lev_dB not used later, no need to set */ //tx_lev_dB = (unsigned int) dB_fixed(tx_lev); - write_output("txsig0_new.m","txs0", &txdata[0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1); - //write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0_new.m","txs0", &txdata[0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1); + //LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); // multipath channel dump_prach_config(&eNB->frame_parms,subframe); @@ -521,13 +521,13 @@ int main(int argc, char **argv) else printf("preamble %d : energy %d, delay %d\n",i,preamble_energy_list[i],preamble_delay_list[i]); - write_output("prach0.m","prach0", &txdata[0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1); - write_output("prachF0.m","prachF0", &eNB->prach_vars.prachF[0],24576,1,1); - write_output("rxsig0.m","rxs0", + LOG_M("prach0.m","prach0", &txdata[0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1); + LOG_M("prachF0.m","prachF0", &eNB->prach_vars.prachF[0],24576,1,1); + LOG_M("rxsig0.m","rxs0", &eNB->common_vars.rxdata[0][0][subframe*frame_parms->samples_per_tti], frame_parms->samples_per_tti,1,1); - write_output("rxsigF0.m","rxsF0", eNB->prach_vars.rxsigF[0],6144,1,1); - write_output("prach_preamble.m","prachp",&eNB->X_u[0],839,1,1); + LOG_M("rxsigF0.m","rxsF0", eNB->prach_vars.rxsigF[0],6144,1,1); + LOG_M("prach_preamble.m","prachp",&eNB->X_u[0],839,1,1); } } diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c index d49367c4db..b9e059529b 100644 --- a/openair1/SIMULATION/LTE_PHY/pucchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c @@ -391,7 +391,7 @@ int main(int argc, char **argv) subframe, //subframe n_rnti); //rnti } - write_output("txsigF0.m","txsF0", &UE->common_vars.txdataF[0][2*subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX],OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*nsymb,1,1); + LOG_M("txsigF0.m","txsF0", &UE->common_vars.txdataF[0][2*subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX],OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*nsymb,1,1); tx_lev = 0; @@ -424,8 +424,8 @@ int main(int argc, char **argv) - write_output("txsig0.m","txs0", txdata[0], FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - //write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0], FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + //LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); // multipath channel @@ -606,10 +606,10 @@ int main(int argc, char **argv) } if (n_frames==1) { - //write_output("txsig0.m","txs0", &txdata[0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1); - write_output("txsig0pucch.m", "txs0", &txdata[0][0], FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("rxsig0.m","rxs0", &eNB->common_vars.rxdata[0][0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1); - write_output("rxsigF0.m","rxsF0", &eNB->common_vars.rxdataF[0][0][0],512*nsymb*2,2,1); + //LOG_M("txsig0.m","txs0", &txdata[0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1); + LOG_M("txsig0pucch.m", "txs0", &txdata[0][0], FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("rxsig0.m","rxs0", &eNB->common_vars.rxdata[0][0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1); + LOG_M("rxsigF0.m","rxsF0", &eNB->common_vars.rxdataF[0][0][0],512*nsymb*2,2,1); } diff --git a/openair1/SIMULATION/LTE_PHY/scansim.c b/openair1/SIMULATION/LTE_PHY/scansim.c index 69aee01b32..cb419f57c2 100644 --- a/openair1/SIMULATION/LTE_PHY/scansim.c +++ b/openair1/SIMULATION/LTE_PHY/scansim.c @@ -521,10 +521,10 @@ int main(int argc, char **argv) pbch_pdu, pbch_phase); */ - write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) - write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); tx_lev = 0; tx_lev1 = 0; @@ -553,10 +553,10 @@ int main(int argc, char **argv) } - write_output("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); if (frame_parms->nb_antennas_tx>1) - write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); // multipath channel diff --git a/openair1/SIMULATION/LTE_PHY/syncsim.c b/openair1/SIMULATION/LTE_PHY/syncsim.c index e491944ccf..59116bc5e1 100644 --- a/openair1/SIMULATION/LTE_PHY/syncsim.c +++ b/openair1/SIMULATION/LTE_PHY/syncsim.c @@ -1108,12 +1108,12 @@ int main(int argc, char **argv) 5); */ - // write_output("pilotsF.m","rsF",txdataF[0],lte_frame_parms->ofdm_symbol_size,1,1); + // LOG_M("pilotsF.m","rsF",txdataF[0],lte_frame_parms->ofdm_symbol_size,1,1); #ifdef IFFT_FPGA - write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][0],300*120,1,4); + LOG_M("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][0],300*120,1,4); if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) - write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][1],300*120,1,4); + LOG_M("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][1],300*120,1,4); for (i=0; i<10; i++) debug_msg("%08x\n",((unsigned int*)&PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][1*(PHY_vars_eNB->lte_frame_parms.N_RB_DL*12)*(PHY_vars_eNB->lte_frame_parms.symbols_per_tti>>1)])[i]); @@ -1134,10 +1134,10 @@ int main(int argc, char **argv) //printf("l=%d\n",l); } - write_output("txsigF20.m","txsF20", txdataF2[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF20.m","txsF20", txdataF2[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) - write_output("txsigF21.m","txsF21", txdataF2[1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF21.m","txsF21", txdataF2[1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); tx_lev=0; @@ -1162,10 +1162,10 @@ int main(int argc, char **argv) } #else - write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) - write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); tx_lev = 0; @@ -1237,10 +1237,10 @@ int main(int argc, char **argv) - write_output("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); if (frame_parms->nb_antennas_tx>1) - write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); } else if ((oai_hw_input==0)&&(oai_hw_output==0)) { //read in from file i=0; @@ -1264,8 +1264,8 @@ int main(int argc, char **argv) } printf("Read in %d samples (%d)\n",i,FRAME_LENGTH_COMPLEX_SAMPLES); - write_output("txsig0.m","txs0", txdata[0],10*frame_parms->samples_per_tti,1,1); - // write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],10*frame_parms->samples_per_tti,1,1); + // LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); tx_lev = signal_energy(&txdata[0][0], OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); } else { // get from OAI HW @@ -1678,19 +1678,19 @@ int main(int argc, char **argv) if (n_frames==1) { - write_output("H00.m","h00",&(PHY_vars_UE[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1); + LOG_M("H00.m","h00",&(PHY_vars_UE[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1); if (n_tx==2) - write_output("H10.m","h10",&(PHY_vars_UE[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1); + LOG_M("H10.m","h10",&(PHY_vars_UE[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1); - write_output("rxsig0.m","rxs0", PHY_vars_UE[0]->lte_ue_common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("rxsigF0.m","rxsF0", PHY_vars_UE[0]->lte_ue_common_vars.rxdataF[0],NUMBER_OF_OFDM_CARRIERS*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,2,1); - write_output("PBCH_rxF0_ext.m","pbch0_ext",PHY_vars_UE[0]->lte_ue_pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1); - write_output("PBCH_rxF0_comp.m","pbch0_comp",PHY_vars_UE[0]->lte_ue_pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1); - write_output("PBCH_rxF_llr.m","pbch_llr",PHY_vars_UE[0]->lte_ue_pbch_vars[0]->llr,(frame_parms->Ncp==0) ? 1920 : 1728,1,4); - write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",PHY_vars_UE[0]->lte_ue_pdcch_vars[eNb_id]->rxdataF_ext[0],3*300,1,1); - write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",PHY_vars_UE[0]->lte_ue_pdcch_vars[eNb_id]->rxdataF_comp[0],4*300,1,1); - write_output("pdcch_rxF_llr.m","pdcch_llr",PHY_vars_UE[0]->lte_ue_pdcch_vars[eNb_id]->llr,2400,1,4); + LOG_M("rxsig0.m","rxs0", PHY_vars_UE[0]->lte_ue_common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("rxsigF0.m","rxsF0", PHY_vars_UE[0]->lte_ue_common_vars.rxdataF[0],NUMBER_OF_OFDM_CARRIERS*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,2,1); + LOG_M("PBCH_rxF0_ext.m","pbch0_ext",PHY_vars_UE[0]->lte_ue_pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1); + LOG_M("PBCH_rxF0_comp.m","pbch0_comp",PHY_vars_UE[0]->lte_ue_pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1); + LOG_M("PBCH_rxF_llr.m","pbch_llr",PHY_vars_UE[0]->lte_ue_pbch_vars[0]->llr,(frame_parms->Ncp==0) ? 1920 : 1728,1,4); + LOG_M("pdcch_rxF_ext0.m","pdcch_rxF_ext0",PHY_vars_UE[0]->lte_ue_pdcch_vars[eNb_id]->rxdataF_ext[0],3*300,1,1); + LOG_M("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",PHY_vars_UE[0]->lte_ue_pdcch_vars[eNb_id]->rxdataF_comp[0],4*300,1,1); + LOG_M("pdcch_rxF_llr.m","pdcch_llr",PHY_vars_UE[0]->lte_ue_pdcch_vars[eNb_id]->llr,2400,1,4); coded_bits_per_codeword = get_G(&PHY_vars_UE[0]->lte_frame_parms, PHY_vars_UE[0]->dlsch_ue[0][0]->nb_rb, diff --git a/openair1/SIMULATION/LTE_PHY/test.c b/openair1/SIMULATION/LTE_PHY/test.c index b7781ce690..06785f7cdc 100644 --- a/openair1/SIMULATION/LTE_PHY/test.c +++ b/openair1/SIMULATION/LTE_PHY/test.c @@ -281,8 +281,8 @@ int main(int argc, char **argv) #endif - write_output("rxsig0.m","rxs0",rxdata[0],lte_frame_parms->samples_per_tti>>1,1,1); - write_output("rxsig1.m","rxs1",rxdata[1],lte_frame_parms->samples_per_tti>>1,1,1); + LOG_M("rxsig0.m","rxs0",rxdata[0],lte_frame_parms->samples_per_tti>>1,1,1); + LOG_M("rxsig1.m","rxs1",rxdata[1],lte_frame_parms->samples_per_tti>>1,1,1); #ifdef IFFT_FPGA diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 22cac37193..c4ea5d5ffb 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -126,7 +126,6 @@ fill_nfapi_ulsch_config_request(nfapi_ul_config_request_pdu_t *ul_config_pdu, { memset((void *) ul_config_pdu, 0, sizeof(nfapi_ul_config_request_pdu_t)); - // printf("filling ul_config_pdu: modulation type %d, rvidx %d\n",modulation_type,redundancy_version); ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; ul_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_ul_config_ulsch_pdu)); @@ -147,6 +146,8 @@ fill_nfapi_ulsch_config_request(nfapi_ul_config_request_pdu_t *ul_config_pdu, ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs = n_srs; ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = size; + //printf("Filling ul_config_pdu : Q %d, TBS %d, rv %d, ndi %d\n", modulation_type,size,redundancy_version,new_data_indication); + if (cqi_req == 1) { // Add CQI portion ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE; @@ -183,6 +184,7 @@ void fill_ulsch_dci(PHY_VARS_eNB *eNB, int mcs, int modulation_type, int ndi, + int TBS, int cqi_flag, uint8_t beta_CQI, uint8_t beta_RI, @@ -191,7 +193,7 @@ void fill_ulsch_dci(PHY_VARS_eNB *eNB, nfapi_ul_config_request_body_t *ul_req=&sched_resp->UL_req->ul_config_request_body; int harq_pid = ((frame*10)+subframe)&7; - // printf("ulsch in frame %d, subframe %d => harq_pid %d, mcs %d, ndi %d\n",frame,subframe,harq_pid,mcs,ndi); + //printf("ulsch in frame %d, subframe %d => harq_pid %d, mcs %d, ndi %d\n",frame,subframe,harq_pid,mcs,ndi); switch (eNB->frame_parms.N_RB_UL) { case 6: @@ -297,7 +299,7 @@ void fill_ulsch_dci(PHY_VARS_eNB *eNB, 0, // ul_tx_mode 0, // current_tx_nb 0, // n_srs - get_TBS_UL(mcs,nb_rb)); + TBS); sched_resp->UL_req->header.message_id = NFAPI_UL_CONFIG_REQUEST; ul_req->number_of_pdus=1; @@ -446,14 +448,14 @@ int main(int argc, char **argv) "cannot load configuration module, exiting\n"); logInit(); - /* + // enable these lines if you need debug info // however itti will catch all signals, so ctrl-c won't work anymore // alternatively you can disable ITTI completely in CMakeLists.txt - itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL); - set_comp_log(PHY,LOG_DEBUG,LOG_MED,1); - set_glog(LOG_DEBUG,LOG_MED); - */ + //itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL); + //set_comp_log(PHY,LOG_DEBUG,LOG_MED,1); + //set_glog(LOG_DEBUG,LOG_MED); + while ((c = getopt (argc, argv, "hapZEbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:LF")) != -1) { switch (c) { @@ -887,9 +889,9 @@ int main(int argc, char **argv) if (parallel_flag == 1) { extern void init_fep_thread(PHY_VARS_eNB *, pthread_attr_t *); - extern void init_td_thread(PHY_VARS_eNB *, pthread_attr_t *); + extern void init_td_thread(PHY_VARS_eNB *); init_fep_thread(eNB,NULL); - init_td_thread(eNB,NULL); + init_td_thread(eNB); } // Create transport channel structures for 2 transport blocks (MIMO) for (i=0; i<2; i++) { @@ -1048,8 +1050,8 @@ int main(int argc, char **argv) } printf("Read in %d samples\n",i/4); - // write_output("txsig0UL.m","txs0", txdata[0],2*frame_parms->samples_per_tti,1,1); - // write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + // LOG_M("txsig0UL.m","txs0", txdata[0],2*frame_parms->samples_per_tti,1,1); + // LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); tx_lev = signal_energy(&txdata[0][0], OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); tx_lev_dB = (unsigned int) dB_fixed(tx_lev); @@ -1142,7 +1144,7 @@ int main(int argc, char **argv) else if (mcs < 21) modulation_type = 4; else if (mcs < 29) modulation_type = 6; - fill_ulsch_dci(eNB,proc_rxtx->frame_rx,subframe,&sched_resp,14,(void*)&UL_alloc_pdu,first_rb,nb_rb,(round==0)?mcs:(28+rvidx[round]),modulation_type,ndi,cqi_flag,beta_CQI,beta_RI,cqi_size); + fill_ulsch_dci(eNB,proc_rxtx->frame_rx,subframe,&sched_resp,14,(void*)&UL_alloc_pdu,first_rb,nb_rb,(round==0)?mcs:(28+rvidx[round]),modulation_type,ndi,get_TBS_UL(mcs,nb_rb),cqi_flag,beta_CQI,beta_RI,cqi_size); UE->ulsch_Msg3_active[eNB_id] = 0; UE->ul_power_control_dedicated[eNB_id].accumulationEnabled=1; @@ -1202,9 +1204,9 @@ int main(int argc, char **argv) if (n_frames==1) { - write_output("txsigF0UL.m","txsF0", &UE->common_vars.txdataF[0][eNB->frame_parms.ofdm_symbol_size*nsymb*subframe],eNB->frame_parms.ofdm_symbol_size*nsymb,1, + LOG_M("txsigF0UL.m","txsF0", &UE->common_vars.txdataF[0][eNB->frame_parms.ofdm_symbol_size*nsymb*subframe],eNB->frame_parms.ofdm_symbol_size*nsymb,1, 1); - //write_output("txsigF1.m","txsF1", UE->common_vars.txdataF[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + //LOG_M("txsigF1.m","txsF1", UE->common_vars.txdataF[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); } } // input_fd == NULL @@ -1212,8 +1214,8 @@ int main(int argc, char **argv) tx_lev_dB = (unsigned int) dB_fixed_times10(tx_lev); if (n_frames==1) { - write_output("txsig0UL.m","txs0", &txdata[0][eNB->frame_parms.samples_per_tti*subframe],2*frame_parms->samples_per_tti,1,1); - // write_output("txsig1UL.m","txs1", &txdata[1][eNB->frame_parms.samples_per_tti*subframe],2*frame_parms->samples_per_tti,1,1); + LOG_M("txsig0UL.m","txs0", &txdata[0][eNB->frame_parms.samples_per_tti*subframe],2*frame_parms->samples_per_tti,1,1); + // LOG_M("txsig1UL.m","txs1", &txdata[1][eNB->frame_parms.samples_per_tti*subframe],2*frame_parms->samples_per_tti,1,1); } //AWGN @@ -1312,8 +1314,8 @@ int main(int argc, char **argv) if (n_frames<=10) { printf("SNRmeas %f\n",SNRmeas); - write_output("rxsig0UL.m","rxs0", &ru->common.rxdata[0][eNB->frame_parms.samples_per_tti*subframe],eNB->frame_parms.samples_per_tti,1,1); - if (eNB->frame_parms.nb_antennas_rx>1) write_output("rxsig1UL.m","rxs1", &ru->common.rxdata[1][eNB->frame_parms.samples_per_tti*subframe],eNB->frame_parms.samples_per_tti,1,1); + LOG_M("rxsig0UL.m","rxs0", &ru->common.rxdata[0][eNB->frame_parms.samples_per_tti*subframe],eNB->frame_parms.samples_per_tti,1,1); + if (eNB->frame_parms.nb_antennas_rx>1) LOG_M("rxsig1UL.m","rxs1", &ru->common.rxdata[1][eNB->frame_parms.samples_per_tti*subframe],eNB->frame_parms.samples_per_tti,1,1); } @@ -1324,7 +1326,6 @@ int main(int argc, char **argv) ru->feprx(ru); phy_procedures_eNB_uespec_RX(eNB,proc_rxtx); - if (cqi_flag > 0) { cqi_error = 0; @@ -1830,8 +1831,8 @@ int main(int argc, char **argv) // - //write_output("chestim_f.m","chestf",eNB->pusch_vars[0]->drs_ch_estimates[0][0],300*12,2,1); - // write_output("chestim_t.m","chestt",eNB->pusch_vars[0]->drs_ch_estimates_time[0][0], (frame_parms->ofdm_symbol_size)*2,2,1); + //LOG_M("chestim_f.m","chestf",eNB->pusch_vars[0]->drs_ch_estimates[0][0],300*12,2,1); + // LOG_M("chestim_t.m","chestt",eNB->pusch_vars[0]->drs_ch_estimates_time[0][0], (frame_parms->ofdm_symbol_size)*2,2,1); }//ch realization diff --git a/openair1/SIMULATION/LTE_PHY/ulsim2.c b/openair1/SIMULATION/LTE_PHY/ulsim2.c index 6a474332e8..69d4dc2e3f 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim2.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim2.c @@ -179,8 +179,8 @@ int main(int argc, char **argv) generate_drs_puch(lte_frame_parms,lte_ue_common_vars->txdataF[0],AMP,0,first_rb,nb_rb); #ifdef IFFT_FPGA - write_output("txsigF0.m","txsF0", lte_ue_common_vars->txdataF[0],300*120,1,4); - //write_output("txsigF1.m","txsF1", lte_ue_common_vars->txdataF[1],300*120,1,4); + LOG_M("txsigF0.m","txsF0", lte_ue_common_vars->txdataF[0],300*120,1,4); + //LOG_M("txsigF1.m","txsF1", lte_ue_common_vars->txdataF[1],300*120,1,4); // do talbe lookup and write results to txdataF2 for (aa=0; aanb_antennas_tx; aa++) { @@ -197,8 +197,8 @@ int main(int argc, char **argv) printf("l=%d\n",l); } - write_output("txsigF20.m","txsF20", txdataF2[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); - //write_output("txsigF21.m","txsF21", txdataF2[1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF20.m","txsF20", txdataF2[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + //LOG_M("txsigF21.m","txsF21", txdataF2[1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); for (aa=0; aanb_antennas_tx; aa++) PHY_ofdm_mod(txdataF2[aa], // input @@ -211,8 +211,8 @@ int main(int argc, char **argv) CYCLIC_PREFIX); #else - write_output("txsigF0.m","txsF0", lte_ue_common_vars->txdataF[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); - //write_output("txsigF1.m","txsF1", lte_ue_common_vars->txdataF[1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + LOG_M("txsigF0.m","txsF0", lte_ue_common_vars->txdataF[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); + //LOG_M("txsigF1.m","txsF1", lte_ue_common_vars->txdataF[1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); for (aa=0; aanb_antennas_tx; aa++) { PHY_ofdm_mod(lte_ue_common_vars->txdataF[aa], // input @@ -228,8 +228,8 @@ int main(int argc, char **argv) #endif - write_output("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - //write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("txsig0.m","txs0", txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + //LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); // multipath channel randominit(0); @@ -253,7 +253,7 @@ int main(int argc, char **argv) channel_length, 0); - //write_output("channel0.m","chan0",ch[0],channel_length,1,8); + //LOG_M("channel0.m","chan0",ch[0],channel_length,1,8); // scale by path_loss = NOW - P_noise //sigma2 = pow(10,sigma2_dB/10); @@ -304,8 +304,8 @@ int main(int argc, char **argv) } } - write_output("rxsig0.m","rxs0", lte_eNB_common_vars->rxdata[eNb_id][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("rxsig1.m","rxs1", lte_eNB_common_vars->rxdata[eNb_id][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("rxsig0.m","rxs0", lte_eNB_common_vars->rxdata[eNb_id][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); + LOG_M("rxsig1.m","rxs1", lte_eNB_common_vars->rxdata[eNb_id][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); /* // optional: read rx_frame from file @@ -351,15 +351,15 @@ int main(int argc, char **argv) } - write_output("rxsigF0.m","rxsF0", lte_eNB_common_vars->rxdataF[0][0],512*12*2,2,1); - write_output("rxsigF1.m","rxsF1", lte_eNB_common_vars->rxdataF[0][1],512*12*2,2,1); - write_output("srs_seq.m","srs",lte_eNB_common_vars->srs,2*lte_frame_parms->ofdm_symbol_size,2,1); - write_output("srs_est0.m","srsest0",lte_eNB_common_vars->srs_ch_estimates[0][0],512,1,1); - write_output("srs_est1.m","srsest1",lte_eNB_common_vars->srs_ch_estimates[0][1],512,1,1); - write_output("rxsigF0_ext.m","rxsF0_ext", lte_eNB_ulsch_vars[0]->rxdataF_ext[0][0],300*12*2,2,1); - write_output("rxsigF1_ext.m","rxsF1_ext", lte_eNB_ulsch_vars[0]->rxdataF_ext[0][1],300*12*2,2,1); - write_output("drs_est0.m","drsest0",lte_eNB_ulsch_vars[0]->drs_ch_estimates[0][0],300*12,1,1); - write_output("drs_est1.m","drsest1",lte_eNB_ulsch_vars[0]->drs_ch_estimates[0][1],300*12,1,1); + LOG_M("rxsigF0.m","rxsF0", lte_eNB_common_vars->rxdataF[0][0],512*12*2,2,1); + LOG_M("rxsigF1.m","rxsF1", lte_eNB_common_vars->rxdataF[0][1],512*12*2,2,1); + LOG_M("srs_seq.m","srs",lte_eNB_common_vars->srs,2*lte_frame_parms->ofdm_symbol_size,2,1); + LOG_M("srs_est0.m","srsest0",lte_eNB_common_vars->srs_ch_estimates[0][0],512,1,1); + LOG_M("srs_est1.m","srsest1",lte_eNB_common_vars->srs_ch_estimates[0][1],512,1,1); + LOG_M("rxsigF0_ext.m","rxsF0_ext", lte_eNB_ulsch_vars[0]->rxdataF_ext[0][0],300*12*2,2,1); + LOG_M("rxsigF1_ext.m","rxsF1_ext", lte_eNB_ulsch_vars[0]->rxdataF_ext[0][1],300*12*2,2,1); + LOG_M("drs_est0.m","drsest0",lte_eNB_ulsch_vars[0]->drs_ch_estimates[0][0],300*12,1,1); + LOG_M("drs_est1.m","drsest1",lte_eNB_ulsch_vars[0]->drs_ch_estimates[0][1],300*12,1,1); #ifdef IFFT_FPGA diff --git a/openair1/SIMULATION/LTE_PHY/unitary_defs.h b/openair1/SIMULATION/LTE_PHY/unitary_defs.h index c33b72f649..133656a562 100644 --- a/openair1/SIMULATION/LTE_PHY/unitary_defs.h +++ b/openair1/SIMULATION/LTE_PHY/unitary_defs.h @@ -20,7 +20,7 @@ */ openair0_device openair0; -int oai_exit=0; +volatile int oai_exit=0; void exit_fun(const char *s) { exit(-1); } diff --git a/openair1/SIMULATION/RF/adc.c b/openair1/SIMULATION/RF/adc.c index 3bf70a203a..e424131c6f 100644 --- a/openair1/SIMULATION/RF/adc.c +++ b/openair1/SIMULATION/RF/adc.c @@ -38,12 +38,7 @@ void adc(double *r_re[2], for (aa=0; aa 30000) { - //("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) ); - } } - //printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) ); } } diff --git a/openair1/SIMULATION/RF/dac.c b/openair1/SIMULATION/RF/dac.c index b09bd20374..15fdaa8c01 100644 --- a/openair1/SIMULATION/RF/dac.c +++ b/openair1/SIMULATION/RF/dac.c @@ -26,7 +26,7 @@ #include "rf.h" void dac(double *s_re[2], double *s_im[2], - uint32_t **input, + int32_t **input, uint32_t input_offset, uint32_t nb_tx_antennas, uint32_t length, @@ -76,7 +76,7 @@ void dac(double *s_re[2], double dac_fixed_gain(double *s_re[2], double *s_im[2], - uint32_t **input, + int32_t **input, uint32_t input_offset, uint32_t nb_tx_antennas, uint32_t length, diff --git a/openair1/SIMULATION/RF/rf.c b/openair1/SIMULATION/RF/rf.c index 51b7e7524d..e317fbd154 100644 --- a/openair1/SIMULATION/RF/rf.c +++ b/openair1/SIMULATION/RF/rf.c @@ -31,9 +31,9 @@ extern void randominit(void); extern double gaussdouble(double,double); //free(input_data); -//extern int write_output(const char *,const char *,void *,int,int,char); +//extern int LOG_M(const char *,const char *,void *,int,int,char); //flag change -extern int write_output(const char *,const char *,void *,int,int,char); +extern int LOG_M(const char *,const char *,void *,int,int,char); */ //double pn[1024]; @@ -337,11 +337,11 @@ int main(int argc, char* argv[]) length, 12); - write_output("s_im.m","s_im",s_im[0],length,1,7); - write_output("s_re.m","s_re",s_re[0],length,1,7); - write_output("r_im.m","r_im",r_im[0],length,1,7); - write_output("r_re.m","r_re",r_re[0],length,1,7); - write_output("input.m","rfin",input[0],length,1,1); - write_output("output.m","rfout",output[0],length,1,1); + LOG_M("s_im.m","s_im",s_im[0],length,1,7); + LOG_M("s_re.m","s_re",s_re[0],length,1,7); + LOG_M("r_im.m","r_im",r_im[0],length,1,7); + LOG_M("r_re.m","r_re",r_re[0],length,1,7); + LOG_M("input.m","rfin",input[0],length,1,1); + LOG_M("output.m","rfout",output[0],length,1,1); } #endif diff --git a/openair1/SIMULATION/RF/rf.h b/openair1/SIMULATION/RF/rf.h index 65055bc71a..d37fa3ed48 100644 --- a/openair1/SIMULATION/RF/rf.h +++ b/openair1/SIMULATION/RF/rf.h @@ -69,14 +69,14 @@ void adc(double *r_re[2], double *r_im[2], unsigned int input_offset, unsigned int output_offset, - int **output, + int32_t **output, unsigned int nb_rx_antennas, unsigned int length, unsigned char B); void dac(double *s_re[2], double *s_im[2], - unsigned int **input, + int32_t **input, unsigned int input_offset, unsigned int nb_tx_antennas, unsigned int length, @@ -87,7 +87,7 @@ void dac(double *s_re[2], double dac_fixed_gain(double *s_re[2], double *s_im[2], - unsigned int **input, + int32_t **input, unsigned int input_offset, unsigned int nb_tx_antennas, unsigned int length, diff --git a/openair1/SIMULATION/TOOLS/rangen_double.c b/openair1/SIMULATION/TOOLS/rangen_double.c index 6dcdd9418e..82b1557a5b 100644 --- a/openair1/SIMULATION/TOOLS/rangen_double.c +++ b/openair1/SIMULATION/TOOLS/rangen_double.c @@ -63,33 +63,6 @@ void randominit(unsigned seed_init) } #endif -#if 0 -void randominit(unsigned seed_init) -{ - int i; - // this need to be integrated with the existing rng, like taus: navid - LOG_D(PHY,"Initializing random number generator, seed %x\n",seed_init); - - seed_init = 62110; - - if (seed_init == 0) { - srand((unsigned)time(NULL)); - - seed = (unsigned int) rand(); - } else { - seed = seed_init; - } - - if (seed % 2 == 0) seed += 1; /* seed and mod are relative prime */ - - for (i=1; i<=97; i++) { - seed = a*seed; /* mod 2**32 */ - ir[i]= seed; /* initialize the shuffle table */ - } - - iy=1; -} -#endif /*!\brief Uniform linear congruential random number generator on \f$[0,1)\f$. Returns a double-precision floating-point number.*/ double uniformrandom(void) diff --git a/openair1/SIMULATION/TOOLS/sim.h b/openair1/SIMULATION/TOOLS/sim.h index 420e5d0072..bde7b92506 100644 --- a/openair1/SIMULATION/TOOLS/sim.h +++ b/openair1/SIMULATION/TOOLS/sim.h @@ -22,7 +22,7 @@ #ifndef __SIMULATION_TOOLS_DEFS_H__ #define __SIMULATION_TOOLS_DEFS_H__ #include "PHY/defs_common.h" - +#include /** @defgroup _numerical_ Useful Numerical Functions *@{ The present clause specifies several numerical functions for testing of digital communication systems. @@ -181,6 +181,31 @@ typedef enum { EPA_high, } SCM_t; +#include "platform_constants.h" + +typedef struct { + channel_desc_t *RU2UE[NUMBER_OF_RU_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs]; + channel_desc_t *UE2RU[NUMBER_OF_UE_MAX][NUMBER_OF_RU_MAX][MAX_NUM_CCs]; + double r_re_DL[NUMBER_OF_UE_MAX][2][30720]; + double r_im_DL[NUMBER_OF_UE_MAX][2][30720]; + double r_re_UL[NUMBER_OF_eNB_MAX][2][30720]; + double r_im_UL[NUMBER_OF_eNB_MAX][2][30720]; + int RU_output_mask[NUMBER_OF_UE_MAX]; + int UE_output_mask[NUMBER_OF_RU_MAX]; + pthread_mutex_t RU_output_mutex[NUMBER_OF_UE_MAX]; + pthread_mutex_t UE_output_mutex[NUMBER_OF_RU_MAX]; + pthread_mutex_t subframe_mutex; + int subframe_ru_mask; + int subframe_UE_mask; + openair0_timestamp current_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs]; + openair0_timestamp current_UE_rx_timestamp[MAX_MOBILES_PER_ENB][MAX_NUM_CCs]; + openair0_timestamp last_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs]; + openair0_timestamp last_UE_rx_timestamp[MAX_MOBILES_PER_ENB][MAX_NUM_CCs]; + double ru_amp[NUMBER_OF_RU_MAX]; + pthread_t rfsim_thread; +} sim_t; + + /** \brief This routine initializes a new channel descriptor \param nb_tx Number of TX antennas @@ -373,6 +398,20 @@ void multipath_tv_channel(channel_desc_t *desc, double N_RB2sampling_rate(uint16_t N_RB); double N_RB2channel_bandwidth(uint16_t N_RB); +#include "targets/RT/USER/rfsim.h" + +void do_DL_sig(sim_t *sim, + uint16_t subframe, + uint32_t offset, + uint32_t length, + uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *ue_frame_parms, + uint8_t UE_id, + int CC_id); + +void do_UL_sig(sim_t *sim, + uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, + uint32_t frame,int ru_id,uint8_t CC_id); + #endif diff --git a/openair1/SIMULATION/TOOLS/taus.c b/openair1/SIMULATION/TOOLS/taus.c index 0be7952da7..e2409df533 100644 --- a/openair1/SIMULATION/TOOLS/taus.c +++ b/openair1/SIMULATION/TOOLS/taus.c @@ -65,35 +65,6 @@ void set_taus_seed(unsigned int seed_init) } #endif -#if 0 - void set_taus_seed(unsigned int seed_init) -{ - - struct drand48_data buffer; - unsigned long result = 0; - s0 = (unsigned int)0x1e23d852; - s1 = (unsigned int)0x81f38a1c; - s2 = (unsigned int)0xfe1a133e; - - return; - - if (seed_init == 0) { - s0 = (unsigned int)time(NULL); - s1 = (unsigned int)time(NULL); - s2 = (unsigned int)time(NULL); - } else { - // Use reentrant version of rand48 to ensure that no conflicts with other generators occur */ - srand48_r((long int)seed_init, &buffer); - mrand48_r(&buffer, (long int *)&result); - s0 = result; - mrand48_r(&buffer, (long int *)&result); - s1 = result; - mrand48_r(&buffer, (long int *)&result); - s2 = result; - } -} -#endif - #ifdef MAIN main() diff --git a/openair2/COMMON/gtpv1_u_messages_types.h b/openair2/COMMON/gtpv1_u_messages_types.h index c3c9c6b7c7..4d09062beb 100644 --- a/openair2/COMMON/gtpv1_u_messages_types.h +++ b/openair2/COMMON/gtpv1_u_messages_types.h @@ -22,7 +22,7 @@ #ifndef GTPV1_U_MESSAGES_TYPES_H_ #define GTPV1_U_MESSAGES_TYPES_H_ -#include "asn1_constants.h" +#include "asn_constant.h" #define GTPV1U_MAX_BEARERS_PER_UE max_val_DRB_Identity diff --git a/openair2/COMMON/mac_rrc_primitives.h b/openair2/COMMON/mac_rrc_primitives.h index fb229bf951..d902de15d9 100644 --- a/openair2/COMMON/mac_rrc_primitives.h +++ b/openair2/COMMON/mac_rrc_primitives.h @@ -365,7 +365,7 @@ typedef struct { #endif ); unsigned int (*mac_rlc_data_req)(module_id_t, unsigned int, const unsigned int,char* -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,uint32_t ,uint32_t #endif @@ -373,7 +373,7 @@ typedef struct { void (*mac_rlc_data_ind)(module_id_t, logical_chan_id_t, char*, tb_size_t, num_tb_t, crc_t* ); mac_rlc_status_resp_t (*mac_rlc_status_ind) (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, sub_frame_t subframeP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP, logical_chan_id_t channel_idP, tb_size_t tb_sizeP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,uint32_t sourceL2Id ,uint32_t destinationL2Id #endif diff --git a/openair2/COMMON/platform_constants.h b/openair2/COMMON/platform_constants.h index 917c149833..9aa912a01e 100644 --- a/openair2/COMMON/platform_constants.h +++ b/openair2/COMMON/platform_constants.h @@ -29,9 +29,9 @@ ***************************************************************************/ #ifdef CMAKER -#include "asn1_constants.h" +#include "asn_constant.h" #else -#include "RRC/LITE/MESSAGES/asn1_constants.h" +#include "RRC/LTE/MESSAGES/asn1_constants.h" #endif #ifndef __PLATFORM_CONSTANTS_H__ @@ -67,16 +67,23 @@ # define MAX_MODULES NB_MODULES_MAX -#ifdef LARGE_SCALE +#ifndef UE_EXPANSION +# ifdef LARGE_SCALE # define MAX_MOBILES_PER_ENB 128 # define MAX_MOBILES_PER_ENB_NB_IoT 128 # define MAX_eNB 2 -#else +# else # define MAX_MOBILES_PER_ENB 16 # define MAX_MOBILES_PER_ENB_NB_IoT 16 # define MAX_eNB 2 +# endif +#else +# define MAX_MOBILES_PER_ENB 256 +# define MAX_MOBILES_PER_ENB_NB_IoT 256 +# define MAX_eNB 2 #endif + #define MAX_MANAGED_ENB_PER_MOBILE 2 ///NB-IOT diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h index bb8fa7bb1c..3f736e5b3c 100644 --- a/openair2/COMMON/platform_types.h +++ b/openair2/COMMON/platform_types.h @@ -68,7 +68,7 @@ typedef int32_t sdu_size_t; typedef uint32_t frame_t; typedef int32_t sframe_t; typedef uint32_t sub_frame_t; -typedef uint8_t module_id_t; +typedef uint16_t module_id_t; typedef uint8_t slice_id_t; typedef uint8_t eNB_index_t; typedef uint16_t ue_id_t; diff --git a/openair2/COMMON/ral_messages_types.h b/openair2/COMMON/ral_messages_types.h index 22e3b5143f..fa90c4a3b2 100644 --- a/openair2/COMMON/ral_messages_types.h +++ b/openair2/COMMON/ral_messages_types.h @@ -21,7 +21,7 @@ #ifndef RAL_MESSAGES_TYPES_H_ #define RAL_MESSAGES_TYPES_H_ -#include "asn1_constants.h" +#include "asn_constant.h" #include "platform_types.h" #include "commonDef.h" /* 802.21 mappings with the RRC protocol : diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 5625c9fab5..4a0137d4b6 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -35,7 +35,7 @@ #ifdef CMAKER #include "SystemInformationBlockType2.h" #else -#include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h" +#include "RRC/LTE/MESSAGES/SystemInformationBlockType2.h" #endif #include "SL-OffsetIndicator-r12.h" #include "SubframeBitmapSL-r12.h" @@ -123,9 +123,9 @@ typedef struct RrcConfigurationReq_s { long pucch_delta_shift[MAX_NUM_CCs]; long pucch_nRB_CQI[MAX_NUM_CCs]; long pucch_nCS_AN[MAX_NUM_CCs]; -#if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) +//#if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) long pucch_n1_AN[MAX_NUM_CCs]; -#endif +//#endif long pdsch_referenceSignalPower[MAX_NUM_CCs]; long pdsch_p_b[MAX_NUM_CCs]; long pusch_n_SB[MAX_NUM_CCs]; @@ -174,6 +174,7 @@ typedef struct RrcConfigurationReq_s { long ue_TimersAndConstants_n310[MAX_NUM_CCs]; long ue_TimersAndConstants_n311[MAX_NUM_CCs]; long ue_TransmissionMode[MAX_NUM_CCs]; + long ue_multiple_max[MAX_NUM_CCs]; //TTN - for D2D //SIB18 @@ -219,13 +220,10 @@ typedef struct RrcConfigurationReq_s { char* discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf[MAX_NUM_CCs]; long discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size[MAX_NUM_CCs]; long discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused[MAX_NUM_CCs]; - - - - - } RrcConfigurationReq; + #define MAX_NUM_NBIOT_CELEVELS 3 + typedef struct NbIoTRrcConfigurationReq_s { uint32_t cell_identity; diff --git a/openair2/COMMON/s1ap_messages_def.h b/openair2/COMMON/s1ap_messages_def.h index d81bd87ed5..f98782f19e 100644 --- a/openair2/COMMON/s1ap_messages_def.h +++ b/openair2/COMMON/s1ap_messages_def.h @@ -38,7 +38,7 @@ MESSAGE_DEF(S1AP_E_RAB_MODIFY_RESPONSE_LOG , MESSAGE_PRIORITY_MED, IttiMsgTex MESSAGE_DEF(S1AP_PAGING_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_paging_log) MESSAGE_DEF(S1AP_E_RAB_RELEASE_REQUEST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_e_rab_release_request_log) MESSAGE_DEF(S1AP_E_RAB_RELEASE_RESPONSE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_e_rab_release_response_log) -MESSAGE_DEF(S1AP_E_RAB_ERROR_INDICATION_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_error_indication_log) +MESSAGE_DEF(S1AP_ERROR_INDICATION_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_error_indication_log) /* eNB application layer -> S1AP messages */ MESSAGE_DEF(S1AP_REGISTER_ENB_REQ , MESSAGE_PRIORITY_MED, s1ap_register_enb_req_t , s1ap_register_enb_req) diff --git a/openair2/ENB_APP/MACRLC_paramdef.h b/openair2/ENB_APP/MACRLC_paramdef.h index 4e732fe942..ef7d598785 100644 --- a/openair2/ENB_APP/MACRLC_paramdef.h +++ b/openair2/ENB_APP/MACRLC_paramdef.h @@ -53,7 +53,10 @@ #define CONFIG_STRING_MACRLC_REMOTE_S_PORTC "remote_s_portc" #define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd" #define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd" - +#define CONFIG_STRING_MACRLC_SCHED_MODE "scheduler_mode" +#define CONFIG_STRING_MACRLC_PHY_TEST_MODE "phy_test_mode" +#define CONFIG_MACRLC_PUSCH10xSNR "puSch10xSnr" +#define CONFIG_MACRLC_PUCCH10xSNR "puCch10xSnr" /*-------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* MacRLC configuration parameters */ @@ -77,6 +80,10 @@ {CONFIG_STRING_MACRLC_REMOTE_S_PORTC, NULL, 0, uptr:NULL, defintval:50020, TYPE_UINT, 0}, \ {CONFIG_STRING_MACRLC_LOCAL_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \ {CONFIG_STRING_MACRLC_REMOTE_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \ +{CONFIG_STRING_MACRLC_SCHED_MODE, NULL, 0, strptr:NULL, defstrval:"default", TYPE_STRING, 0}, \ +{CONFIG_STRING_MACRLC_PHY_TEST_MODE, NULL, 0, uptr:NULL, defintval:1, TYPE_UINT, 0}, \ +{CONFIG_MACRLC_PUSCH10xSNR, NULL, 0, iptr:NULL, defintval:200, TYPE_INT, 0}, \ +{CONFIG_MACRLC_PUCCH10xSNR, NULL, 0, iptr:NULL, defintval:200, TYPE_INT, 0}, \ } #define MACRLC_CC_IDX 0 #define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1 @@ -95,4 +102,8 @@ #define MACRLC_REMOTE_S_PORTC_IDX 14 #define MACRLC_LOCAL_S_PORTD_IDX 15 #define MACRLC_REMOTE_S_PORTD_IDX 16 +#define MACRLC_SCHED_MODE_IDX 17 +#define MACRLC_PHY_TEST_IDX 18 +#define MACRLC_PUSCH10xSNR_IDX 19 +#define MACRLC_PUCCH10xSNR_IDX 20 /*---------------------------------------------------------------------------------------------------------------------------------------------------------*/ diff --git a/openair2/ENB_APP/NB_IoT_config.c b/openair2/ENB_APP/NB_IoT_config.c index 09e22ef845..08c3d30fa3 100644 --- a/openair2/ENB_APP/NB_IoT_config.c +++ b/openair2/ENB_APP/NB_IoT_config.c @@ -42,7 +42,7 @@ #endif #include "SystemInformationBlockType2.h" -#include "PHY/extern.h" +#include "PHY/phy_extern.h" #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h" #include "common/config/config_userapi.h" #include "RRC_config_tools.h" diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index d1b1b75026..345ad599c8 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -102,6 +102,7 @@ void RCconfig_flexran() ue_TimersAndConstants_n310, ue_TimersAndConstants_n311, ue_TransmissionMode; + int32_t ue_multiple_max = 0; e_SL_CP_Len_r12 rxPool_sc_CP_Len; e_SL_PeriodComm_r12 rxPool_sc_Period; @@ -229,47 +230,6 @@ void RCconfig_flexran() } -/*void UE_config_stub_pnf(void) { - int j; - paramdef_t L1_Params[] = L1PARAMS_DESC; - paramlist_def_t L1_ParamList = {CONFIG_STRING_L1_LIST,NULL,0}; - - config_getlist( &L1_ParamList,L1_Params,sizeof(L1_Params)/sizeof(paramdef_t), NULL); - if (L1_ParamList.numelt > 0) { - for (j=0; jeth_params_n.remote_addr, RC.eNB[j][0]->eth_params_n.remote_portc, RC.eNB[j][0]->eth_params_n.my_addr, RC.eNB[j][0]->eth_params_n.my_portd, RC.eNB[j][0]->eth_params_n .remote_portd); } else { // other midhaul - //printf("Panos-D: RCconfig_L1 12 \n"); } }// j=0..num_inst printf("Initializing northbound interface for L1\n"); @@ -387,6 +346,8 @@ void RCconfig_macrlc() { RC.nb_mac_CC = (int*)malloc(RC.nb_macrlc_inst*sizeof(int)); for (j=0;jpuSch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH10xSNR_IDX ].iptr); + RC.mac[j]->puCch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH10xSNR_IDX ].iptr); RC.nb_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr); //RC.mac[j]->phy_test = *(MacRLC_ParamList.paramarray[j][MACRLC_PHY_TEST_IDX].iptr); //printf("PHY_TEST = %d,%d\n", RC.mac[j]->phy_test, j); @@ -427,7 +388,17 @@ void RCconfig_macrlc() { printf("**************** RETURNED FROM configure_nfapi_vnf() vnf_port:%d\n", RC.mac[j]->eth_params_s.my_portc); } else { // other midhaul AssertFatal(1==0,"MACRLC %d: %s unknown southbound midhaul\n",j,*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr)); - } + } + if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_SCHED_MODE_IDX].strptr), "default") == 0){ + global_scheduler_mode=SCHED_MODE_DEFAULT; + printf("sched mode = default %d [%s]\n",global_scheduler_mode,*(MacRLC_ParamList.paramarray[j][MACRLC_SCHED_MODE_IDX].strptr)); + }else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_SCHED_MODE_IDX].strptr), "fairRR") == 0){ + global_scheduler_mode=SCHED_MODE_FAIR_RR; + printf("sched mode = fairRR %d [%s]\n",global_scheduler_mode,*(MacRLC_ParamList.paramarray[j][MACRLC_SCHED_MODE_IDX].strptr)); + }else{ + global_scheduler_mode=SCHED_MODE_DEFAULT; + printf("sched mode = default %d [%s]\n",global_scheduler_mode,*(MacRLC_ParamList.paramarray[j][MACRLC_SCHED_MODE_IDX].strptr)); + } }// j=0..num_inst } else {// MacRLC_ParamList.numelt > 0 AssertFatal (0, @@ -521,6 +492,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { int32_t ue_TimersAndConstants_n311 = 0; int32_t ue_TransmissionMode = 0; + int32_t ue_multiple_max = 0; + //TTN - for D2D //SIB18 const char* rxPool_sc_CP_Len = NULL; @@ -567,7 +540,6 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { libconfig_int discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size = 0; libconfig_int discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0; - int32_t srb1_timer_poll_retransmit = 0; int32_t srb1_timer_reordering = 0; int32_t srb1_timer_status_prohibit = 0; @@ -918,13 +890,11 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { RC.config_file_name, i, prach_zero_correlation); RRC_CONFIGURATION_REQ (msg_p).prach_freq_offset[j] = prach_freq_offset; - if ((prach_freq_offset <0) || (prach_freq_offset > 94)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_freq_offset choice: 0..94!\n", RC.config_file_name, i, prach_freq_offset); - RRC_CONFIGURATION_REQ (msg_p).pucch_delta_shift[j] = pucch_delta_shift-1; if ((pucch_delta_shift <1) || (pucch_delta_shift > 3)) @@ -946,7 +916,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_nCS_AN choice: 0..7!\n", RC.config_file_name, i, pucch_nCS_AN); -#if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) +//#if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) RRC_CONFIGURATION_REQ (msg_p).pucch_n1_AN[j] = pucch_n1_AN; if ((pucch_n1_AN <0) || (pucch_n1_AN > 2047)) @@ -954,7 +924,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_n1_AN choice: 0..2047!\n", RC.config_file_name, i, pucch_n1_AN); -#endif +//#endif RRC_CONFIGURATION_REQ (msg_p).pdsch_referenceSignalPower[j] = pdsch_referenceSignalPower; if ((pdsch_referenceSignalPower <-60) || (pdsch_referenceSignalPower > 50)) @@ -1580,6 +1550,34 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { break; } + RRC_CONFIGURATION_REQ (msg_p).ue_multiple_max[j] = ue_multiple_max; + + switch (N_RB_DL) { + case 25: + if ((ue_multiple_max < 1) || (ue_multiple_max > 4)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..4!\n", + RC.config_file_name, i, ue_multiple_max); + break; + case 50: + if ((ue_multiple_max < 1) || (ue_multiple_max > 8)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..8!\n", + RC.config_file_name, i, ue_multiple_max); + break; + case 100: + if ((ue_multiple_max < 1) || (ue_multiple_max > 16)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..16!\n", + RC.config_file_name, i, ue_multiple_max); + break; + default: + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for N_RB_DL choice: 25,50,100 !\n", + RC.config_file_name, i, N_RB_DL); + break; + } + //TTN - for D2D //SIB18 if (strcmp(rxPool_sc_CP_Len,"normal")==0) { diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h index aeac43ee1c..96156a4bc4 100644 --- a/openair2/ENB_APP/enb_config.h +++ b/openair2/ENB_APP/enb_config.h @@ -44,7 +44,7 @@ #include "SystemInformationBlockType2.h" #include "rrc_messages_types.h" #else -#include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h" +#include "RRC/LTE/MESSAGES/SystemInformationBlockType2.h" #endif #include "intertask_interface_types.h" #include "RRC/LTE/rrc_defs.h" diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h index d5e8579686..23b4c2a837 100755 --- a/openair2/ENB_APP/enb_paramdef.h +++ b/openair2/ENB_APP/enb_paramdef.h @@ -304,6 +304,7 @@ typedef enum { #define ENB_CONFIG_STRING_UETIMERS_N310 "ue_TimersAndConstants_n310" #define ENB_CONFIG_STRING_UETIMERS_N311 "ue_TimersAndConstants_n311" #define ENB_CONFIG_STRING_UE_TRANSMISSION_MODE "ue_TransmissionMode" +#define ENB_CONFIG_STRING_UE_MULTIPLE_MAX "ue_multiple_max" //TTN - for D2D //SIB18 @@ -490,7 +491,7 @@ typedef enum { {ENB_CONFIG_STRING_PUCCH_DELTA_SHIFT, NULL, 0, iptr:&pucch_delta_shift, defintval:1, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_PUCCH_NRB_CQI, NULL, 0, iptr:&pucch_nRB_CQI, defintval:1, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_PUCCH_NCS_AN, NULL, 0, iptr:&pucch_nCS_AN, defintval:0, TYPE_UINT, 0}, \ -{ENB_CONFIG_STRING_PUCCH_N1_AN, NULL, 0, iptr:&pucch_n1_AN, defintval:32, TYPE_UINT, 0}, \ +{ENB_CONFIG_STRING_PUCCH_N1_AN, NULL, 0, iptr:&pucch_n1_AN, defintval:0, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_PDSCH_RS_EPRE, NULL, 0, iptr:&pdsch_referenceSignalPower, defintval:-29, TYPE_INT, 0}, \ {ENB_CONFIG_STRING_PDSCH_PB, NULL, 0, iptr:&pdsch_p_b, defintval:0, TYPE_INT, 0}, \ {ENB_CONFIG_STRING_PUSCH_N_SB, NULL, 0, iptr:&pusch_n_SB, defintval:1, TYPE_INT, 0}, \ @@ -538,6 +539,7 @@ typedef enum { {ENB_CONFIG_STRING_UETIMERS_N310, NULL, 0, iptr:&ue_TimersAndConstants_n310, defintval:20, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_UETIMERS_N311, NULL, 0, iptr:&ue_TimersAndConstants_n311, defintval:1, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_UE_TRANSMISSION_MODE, NULL, 0, iptr:&ue_TransmissionMode, defintval:1, TYPE_UINT, 0}, \ +{ENB_CONFIG_STRING_UE_MULTIPLE_MAX, NULL, 0, iptr:&ue_multiple_max, defintval:4, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_RXPOOL_SC_CP_LEN, NULL, 0, strptr:(char **)&rxPool_sc_CP_Len, defstrval:"normal", TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_RXPOOL_SC_PRIOD, NULL, 0, strptr:(char **)&rxPool_sc_Period, defstrval:"sf40", TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_RXPOOL_DATA_CP_LEN, NULL, 0, strptr:(char **)&rxPool_data_CP_Len, defstrval:"normal", TYPE_STRING, 0}, \ @@ -808,4 +810,44 @@ typedef enum { #define CONFIG_STRING_MACRLC_CONFIG "macrlc_config" +/* MACRLC configuration parameters names */ +#define CONFIG_STRING_MACRLC_CC "num_cc" +#define CONFIG_STRING_MACRLC_TRANSPORT_N_PREFERENCE "tr_n_preference" +#define CONFIG_STRING_MACRLC_LOCAL_N_IF_NAME "local_n_if_name" +#define CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS "local_n_address" +#define CONFIG_STRING_MACRLC_REMOTE_N_ADDRESS "remote_n_address" +#define CONFIG_STRING_MACRLC_LOCAL_N_PORTC "local_n_portc" +#define CONFIG_STRING_MACRLC_REMOTE_N_PORTC "remote_n_portc" +#define CONFIG_STRING_MACRLC_LOCAL_N_PORTD "local_n_portd" +#define CONFIG_STRING_MACRLC_REMOTE_N_PORTD "remote_n_portd" +#define CONFIG_STRING_MACRLC_TRANSPORT_S_PREFERENCE "tr_s_preference" +#define CONFIG_STRING_MACRLC_LOCAL_S_IF_NAME "local_s_if_name" +#define CONFIG_STRING_MACRLC_LOCAL_S_ADDRESS "local_s_address" +#define CONFIG_STRING_MACRLC_REMOTE_S_ADDRESS "remote_s_address" +#define CONFIG_STRING_MACRLC_LOCAL_S_PORTC "local_s_portc" +#define CONFIG_STRING_MACRLC_REMOTE_S_PORTC "remote_s_portc" +#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd" +#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd" +#define CONFIG_STRING_MACRLC_SCHED_MODE "scheduler_mode" +#define CONFIG_STRING_MACRLC_PHY_TEST_MODE "phy_test_mode" +#define MACRLC_CC_IDX 0 +#define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1 +#define MACRLC_LOCAL_N_IF_NAME_IDX 2 +#define MACRLC_LOCAL_N_ADDRESS_IDX 3 +#define MACRLC_REMOTE_N_ADDRESS_IDX 4 +#define MACRLC_LOCAL_N_PORTC_IDX 5 +#define MACRLC_REMOTE_N_PORTC_IDX 6 +#define MACRLC_LOCAL_N_PORTD_IDX 7 +#define MACRLC_REMOTE_N_PORTD_IDX 8 +#define MACRLC_TRANSPORT_S_PREFERENCE_IDX 9 +#define MACRLC_LOCAL_S_IF_NAME_IDX 10 +#define MACRLC_LOCAL_S_ADDRESS_IDX 11 +#define MACRLC_REMOTE_S_ADDRESS_IDX 12 +#define MACRLC_LOCAL_S_PORTC_IDX 13 +#define MACRLC_REMOTE_S_PORTC_IDX 14 +#define MACRLC_LOCAL_S_PORTD_IDX 15 +#define MACRLC_REMOTE_S_PORTD_IDX 16 +#define MACRLC_SCHED_MODE_IDX 17 +#define MACRLC_PHY_TEST_IDX 18 +/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/ diff --git a/openair2/ENB_APP/flexran_agent_defs.h b/openair2/ENB_APP/flexran_agent_defs.h index aa71dd33fa..57265b38b7 100644 --- a/openair2/ENB_APP/flexran_agent_defs.h +++ b/openair2/ENB_APP/flexran_agent_defs.h @@ -102,7 +102,7 @@ typedef enum { } ran_name_t; typedef uint8_t xid_t; -typedef uint8_t mid_t; // module or enb id +typedef uint16_t mid_t; // module or enb id typedef uint8_t lcid_t; typedef int32_t err_code_t; diff --git a/openair2/ENB_APP/flexran_agent_ran_api.c b/openair2/ENB_APP/flexran_agent_ran_api.c index 2e5bccd935..e39d676061 100644 --- a/openair2/ENB_APP/flexran_agent_ran_api.c +++ b/openair2/ENB_APP/flexran_agent_ran_api.c @@ -141,7 +141,7 @@ rlc_buffer_occupancy_t flexran_get_tx_queue_size(mid_t mod_id, mid_t ue_id, logi frame_t frame = flexran_get_current_frame(mod_id); sub_frame_t subframe = flexran_get_current_subframe(mod_id); mac_rlc_status_resp_t rlc_status = mac_rlc_status_ind(mod_id,rnti, mod_id, frame, subframe, ENB_FLAG_YES,MBMS_FLAG_NO, channel_id, 0 -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -154,7 +154,7 @@ rlc_buffer_occupancy_t flexran_get_num_pdus_buffer(mid_t mod_id, mid_t ue_id, lo frame_t frame = flexran_get_current_frame(mod_id); sub_frame_t subframe = flexran_get_current_subframe(mod_id); mac_rlc_status_resp_t rlc_status = mac_rlc_status_ind(mod_id,rnti, mod_id, frame, subframe, ENB_FLAG_YES,MBMS_FLAG_NO, channel_id, 0 -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -167,7 +167,7 @@ frame_t flexran_get_hol_delay(mid_t mod_id, mid_t ue_id, logical_chan_id_t chann frame_t frame = flexran_get_current_frame(mod_id); sub_frame_t subframe = flexran_get_current_subframe(mod_id); mac_rlc_status_resp_t rlc_status = mac_rlc_status_ind(mod_id, rnti, mod_id, frame, subframe, ENB_FLAG_YES, MBMS_FLAG_NO, channel_id, 0 -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c index 78e4ca04ab..929c0fad24 100644 --- a/openair2/LAYER2/MAC/config.c +++ b/openair2/LAYER2/MAC/config.c @@ -218,7 +218,7 @@ void config_mib(int Mod_idP, cfg->rf_config.dl_channel_bandwidth.value = to_prb(dl_BandwidthP); cfg->rf_config.dl_channel_bandwidth.tl.tag = NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG; cfg->num_tlv++; - LOG_E(PHY,"%s() dl_BandwidthP:%d\n", __FUNCTION__, dl_BandwidthP); + LOG_D(PHY,"%s() dl_BandwidthP:%d\n", __FUNCTION__, dl_BandwidthP); cfg->rf_config.ul_channel_bandwidth.value = to_prb(dl_BandwidthP); cfg->rf_config.ul_channel_bandwidth.tl.tag = NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG; @@ -727,7 +727,7 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN); - LOG_E(MAC, "RC.mac:%p mib:%p\n", RC.mac, mib); + LOG_D(MAC, "RC.mac:%p mib:%p\n", RC.mac, mib); if (mib != NULL) { if (RC.mac == NULL) @@ -962,8 +962,8 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP, } #endif - - LOG_E(MAC, "%s() %s:%d RC.mac[Mod_idP]->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.mac[Mod_idP]->if_inst->PHY_config_req); + + LOG_D(MAC, "%s() %s:%d RC.mac[Mod_idP]->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.mac[Mod_idP]->if_inst->PHY_config_req); // if in nFAPI mode if ( @@ -987,6 +987,7 @@ rrc_mac_config_req_eNB(module_id_t Mod_idP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); } - + RC.mac[Mod_idP]->scheduler_mode = global_scheduler_mode; + return(0); } diff --git a/openair2/LAYER2/MAC/config_NB_IoT.h b/openair2/LAYER2/MAC/config_NB_IoT.h index 0e497e3b0f..fb8c85ebed 100644 --- a/openair2/LAYER2/MAC/config_NB_IoT.h +++ b/openair2/LAYER2/MAC/config_NB_IoT.h @@ -21,7 +21,7 @@ typedef enum operationModeInf{ iNB_IoTand_DifferentPCI_r13 = 2, guardband_r13 = 3, standalone_r13 = 4 -}operationModeInf_t; +} operationModeInf_t; ///SIB1_SchedulingInfo_NB_IoT_r13 typedef enum si_Periodicity{ @@ -32,14 +32,14 @@ typedef enum si_Periodicity{ si_Periodicity_rf1024=10240, si_Periodicity_rf2048=20480, si_Periodicity_rf4096=40960 -}si_Periodicity_NB_IoT; +} si_Periodicity_NB_IoT; typedef enum si_RepetitionPattern{ si_RepetitionPattern_every2ndRF=0, si_RepetitionPattern_every4thRF, si_RepetitionPattern_every8thRF, si_RepetitionPattern_every16thRF -}si_RepetitionPattern_NB_IoT; +} si_RepetitionPattern_NB_IoT; typedef enum sib_MappingInfo{ sib2_v=0x1, @@ -48,7 +48,7 @@ typedef enum sib_MappingInfo{ sib5_v=0x8, sib14_v=0x10, sib16_v=0x20 -}sib_MappingInfo_NB_IoT; +} sib_MappingInfo_NB_IoT; typedef enum si_TB{ si_TB_56=2, @@ -59,7 +59,7 @@ typedef enum si_TB{ si_TB_440=8, si_TB_552=8, si_TB_680=8 -}si_TB_NB_IoT; +} si_TB_NB_IoT; ///RACH_ConfigCommon configuration @@ -72,7 +72,7 @@ typedef enum ra_ResponseWindowSize{ ra_ResponseWindowSize_pp7=7, ra_ResponseWindowSize_pp8=8, ra_ResponseWindowSize_pp10=10 -}ra_ResponseWindowSize_NB_IoT; +} ra_ResponseWindowSize_NB_IoT; typedef enum mac_ContentionResolutionTimer{ mac_ContentionResolutionTimer_pp1=1, @@ -83,7 +83,7 @@ typedef enum mac_ContentionResolutionTimer{ mac_ContentionResolutionTimer_pp16=16, mac_ContentionResolutionTimer_pp32=32, mac_ContentionResolutionTimer_pp64=64 -}mac_ContentionResolutionTimer_NB_IoT; +} mac_ContentionResolutionTimer_NB_IoT; ///NPRACH_ConfigSIB configuration @@ -96,7 +96,7 @@ typedef enum nprach_Periodicity{ nprach_Periodicity_ms640=640, nprach_Periodicity_ms1280=1280, nprach_Periodicity_ms2560=2560 -}nprach_Periodicity_NB_IoT; +} nprach_Periodicity_NB_IoT; typedef enum nprach_StartTime{ nprach_StartTime_ms8=8, @@ -107,7 +107,7 @@ typedef enum nprach_StartTime{ nprach_StartTime_ms256=256, nprach_StartTime_ms512=512, nprach_StartTime_ms1024=1024 -}nprach_StartTime_NB_IoT; +} nprach_StartTime_NB_IoT; typedef enum nprach_SubcarrierOffset{ nprach_SubcarrierOffset_n0=0, @@ -117,21 +117,21 @@ typedef enum nprach_SubcarrierOffset{ nprach_SubcarrierOffset_n2=2, nprach_SubcarrierOffset_n18=18, nprach_SubcarrierOffset_n34=34 -}nprach_SubcarrierOffset_NB_IoT; +} nprach_SubcarrierOffset_NB_IoT; typedef enum nprach_NumSubcarriers{ nprach_NumSubcarriers_n12=12, nprach_NumSubcarriers_n24=24, nprach_NumSubcarriers_n36=36, nprach_NumSubcarriers_n48=48 -}nprach_NumSubcarriers_NB_IoT; +} nprach_NumSubcarriers_NB_IoT; typedef enum nprach_SubcarrierMSG3_RangeStart{ nprach_SubcarrierMSG3_RangeStart_zero=0, nprach_SubcarrierMSG3_RangeStart_oneThird=1/3, nprach_SubcarrierMSG3_RangeStart_twoThird=2/3, nprach_SubcarrierMSG3_RangeStart_one=1 -}nprach_SubcarrierMSG3_RangeStart_NB_IoT; +} nprach_SubcarrierMSG3_RangeStart_NB_IoT; typedef enum maxNumPreambleAttemptCE{ maxNumPreambleAttemptCE_n3=3, @@ -141,7 +141,7 @@ typedef enum maxNumPreambleAttemptCE{ maxNumPreambleAttemptCE_n7=7, maxNumPreambleAttemptCE_n8=8, maxNumPreambleAttemptCE_n10=10 -}maxNumPreambleAttemptCE_NB_IoT; +} maxNumPreambleAttemptCE_NB_IoT; typedef enum numRepetitionsPerPreambleAttempt{ numRepetitionsPerPreambleAttempt_n1=1, @@ -152,7 +152,7 @@ typedef enum numRepetitionsPerPreambleAttempt{ numRepetitionsPerPreambleAttempt_n32=32, numRepetitionsPerPreambleAttempt_n64=64, numRepetitionsPerPreambleAttempt_n128=128 -}numRepetitionsPerPreambleAttempt_NB_IoT; +} numRepetitionsPerPreambleAttempt_NB_IoT; typedef enum npdcch_NumRepetitions_RA{ npdcch_NumRepetitions_RA_r1=1, @@ -167,7 +167,7 @@ typedef enum npdcch_NumRepetitions_RA{ npdcch_NumRepetitions_RA_r512=512, npdcch_NumRepetitions_RA_r1024=1024, npdcch_NumRepetitions_RA_r2048=2048 -}npdcch_NumRepetitions_RA_NB_IoT; +} npdcch_NumRepetitions_RA_NB_IoT; typedef enum npdcch_StartSF_CSS_RA{ npdcch_StartSF_CSS_RA_v1dot5=3/2, @@ -178,14 +178,14 @@ typedef enum npdcch_StartSF_CSS_RA{ npdcch_StartSF_CSS_RA_v32=32, npdcch_StartSF_CSS_RA_v48=48, npdcch_StartSF_CSS_RA_v64=64 -}npdcch_StartSF_CSS_RA_NB_IoT; +} npdcch_StartSF_CSS_RA_NB_IoT; typedef enum npdcch_Offset_RA{ zero=0, oneEighth=1/8, oneFourth=1/4, threeEighth=3/8 -}npdcch_Offset_RA_NB_IoT; +} npdcch_Offset_RA_NB_IoT; typedef enum si_window_length_e{ ms160=160, @@ -195,7 +195,7 @@ typedef enum si_window_length_e{ ms960=960, ms1280=1280, ms1600=1600 -}si_window_length_t; +} si_window_length_t; typedef enum si_periodicity_e{ rf64=640, @@ -205,14 +205,14 @@ typedef enum si_periodicity_e{ rf1024=10240, rf2048=20480, rf4096=40960 -}si_periodicity_t; +} si_periodicity_t; typedef enum si_repetition_pattern_e{ every2ndRF=20, every4thRF=40, every8thRF=80, every16thRF=160 -}si_repetition_pattern_t; +} si_repetition_pattern_t; typedef enum si_tb_e{ b56=2, @@ -223,7 +223,7 @@ typedef enum si_tb_e{ b440=8, b552=8, b680=8 -}si_tb_t; +} si_tb_t; typedef struct sibs_NB_IoT_sched_s{ @@ -232,21 +232,21 @@ typedef struct sibs_NB_IoT_sched_s{ sib_MappingInfo_NB_IoT sib_mapping_info; //bit vector si_tb_t si_tb; -}sibs_NB_IoT_sched_t; +} sibs_NB_IoT_sched_t; ///-------------------------------------------------------MAC--------------------------------------------------------------------/// typedef struct sib1_NB_IoT_sched_s{ int repetitions; // 4, 8, 16 int starting_rf; -}sib1_NB_IoT_sched_t; +} sib1_NB_IoT_sched_t; typedef struct { uint32_t mac_ra_ResponseWindowSize_NB_IoT; uint32_t mac_ContentionResolutionTimer_NB_IoT; -}mac_RACH_ConfigCommon_NB_IoT; +} mac_RACH_ConfigCommon_NB_IoT; typedef struct { @@ -262,7 +262,7 @@ typedef struct { uint32_t mac_npdcch_StartSF_CSS_RA_NB_IoT; // G uint32_t mac_npdcch_Offset_RA_NB_IoT; // alpha offset -}mac_NPRACH_ConfigSIB_NB_IoT; +} mac_NPRACH_ConfigSIB_NB_IoT; typedef struct{ //npdcch-NumRepetitions-r13 @@ -271,7 +271,7 @@ typedef struct{ double G; //npdcch-Offset-USS-r13 double a_offset; -}npdcch_ConfigDedicated_NB_IoT; +} npdcch_ConfigDedicated_NB_IoT; typedef struct rrc_config_NB_IoT_s{ @@ -296,6 +296,6 @@ typedef struct rrc_config_NB_IoT_s{ ///NPDCCH Dedicated config npdcch_ConfigDedicated_NB_IoT npdcch_ConfigDedicated[3]; -}rrc_config_NB_IoT_t; +} rrc_config_NB_IoT_t; #endif diff --git a/openair2/LAYER2/MAC/config_ue.c b/openair2/LAYER2/MAC/config_ue.c index 0b27955dad..c837304d9c 100644 --- a/openair2/LAYER2/MAC/config_ue.c +++ b/openair2/LAYER2/MAC/config_ue.c @@ -138,7 +138,7 @@ rrc_mac_config_req_ue(module_id_t Mod_idP, #ifdef CBA , uint8_t num_active_cba_groups, uint16_t cba_rnti #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,config_action_t config_action ,const uint32_t * const sourceL2Id ,const uint32_t * const destinationL2Id @@ -590,7 +590,7 @@ rrc_mac_config_req_ue(module_id_t Mod_idP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); //for D2D - #if defined(Rel10) || defined(Rel14) + #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) switch (config_action) { case CONFIG_ACTION_ADD: if (sourceL2Id){ diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index cb34f6f508..c108a141d8 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -51,6 +51,9 @@ #include "flexran_agent_extern.h" #include "flexran_agent_mac.h" +/* for fair round robin SCHED */ +#include "eNB_scheduler_fairRR.h" + #if defined(ENABLE_ITTI) #include "intertask_interface.h" #endif @@ -359,8 +362,9 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id, // check uplink failure if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer > 0) && (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 0)) { - LOG_I(MAC, "UE %d rnti %x: UL Failure timer %d \n", UE_id, rnti, - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); + if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer == 1) + LOG_I(MAC, "UE %d rnti %x: UL Failure timer %d \n", UE_id, rnti, + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); if (UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent == 0) { UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 1; @@ -385,23 +389,24 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id, DL_req[CC_id].dl_config_request_body.number_dci++; DL_req[CC_id].dl_config_request_body.number_pdu++; DL_req[CC_id].dl_config_request_body.tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG; - LOG_I(MAC, + LOG_D(MAC, "UE %d rnti %x: sending PDCCH order for RAPROC (failure timer %d), resource_block_coding %d \n", UE_id, rnti, UE_list->UE_sched_ctrl[UE_id].ul_failure_timer, dl_config_pdu->dci_dl_pdu. dci_dl_pdu_rel8.resource_block_coding); } else { // ra_pdcch_sent==1 - LOG_I(MAC, + LOG_D(MAC, "UE %d rnti %x: sent PDCCH order for RAPROC waiting (failure timer %d) \n", UE_id, rnti, UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); - if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer % 40) == 0) UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 0; // resend every 4 frames + if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer % 80) == 0) UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 0; // resend every 8 frames } UE_list->UE_sched_ctrl[UE_id].ul_failure_timer++; // check threshold - if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer > 20000) { + if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer > 4000) { + // note: probably ul_failure_timer should be less than UE radio link failure time(see T310/N310/N311) // inform RRC of failure and clear timer LOG_I(MAC, "UE %d rnti %x: UL Failure after repeated PDCCH orders: Triggering RRC \n", @@ -418,16 +423,6 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id, } } } // ul_failure_timer>0 - -#if 0 - /* U-plane inactivity timer is disabled. Uncomment to re-enable. */ - UE_list->UE_sched_ctrl[UE_id].uplane_inactivity_timer++; - if(UE_list->UE_sched_ctrl[UE_id].uplane_inactivity_timer > (U_PLANE_INACTIVITY_VALUE*subframe_num(&RC.eNB[module_idP][CC_id]->frame_parms))){ - LOG_D(MAC,"UE %d rnti %x: U-Plane Failure after repeated PDCCH orders: Triggering RRC \n",UE_id,rnti); - mac_eNB_rrc_uplane_failure(module_idP,CC_id,frameP,subframeP,rnti); - UE_list->UE_sched_ctrl[UE_id].uplane_inactivity_timer = 0; - }// time > 60s -#endif } void @@ -436,7 +431,7 @@ clear_nfapi_information(eNB_MAC_INST * eNB, int CC_idP, { nfapi_dl_config_request_t *DL_req = &eNB->DL_req[0]; nfapi_ul_config_request_t *UL_req = &eNB->UL_req[0]; - nfapi_hi_dci0_request_t *HI_DCI0_req = &eNB->HI_DCI0_req[0]; + nfapi_hi_dci0_request_t *HI_DCI0_req = &eNB->HI_DCI0_req[CC_idP][subframeP]; nfapi_tx_request_t *TX_req = &eNB->TX_req[0]; eNB->pdu_index[CC_idP] = 0; @@ -449,8 +444,8 @@ clear_nfapi_information(eNB_MAC_INST * eNB, int CC_idP, DL_req[CC_idP].dl_config_request_body.number_pdsch_rnti = 0; DL_req[CC_idP].dl_config_request_body.transmission_power_pcfich = 6000; - HI_DCI0_req[CC_idP].hi_dci0_request_body.sfnsf = subframeP + (frameP<<4); - HI_DCI0_req[CC_idP].hi_dci0_request_body.number_of_dci = 0; + HI_DCI0_req->hi_dci0_request_body.sfnsf = subframeP + (frameP<<4); + HI_DCI0_req->hi_dci0_request_body.number_of_dci = 0; UL_req[CC_idP].ul_config_request_body.number_of_pdus = 0; @@ -532,7 +527,6 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, // refresh UE list based on UEs dropped by PHY in previous subframe for (i = 0; i < MAX_MOBILES_PER_ENB; i++) { if (UE_list->active[i]) { - rnti = UE_RNTI(module_idP, i); CC_id = UE_PCCID(module_idP, i); @@ -570,14 +564,21 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, if(RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer >= RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer_thres) { RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer = 0; - for (int ue_id_l = 0; ue_id_l < MAX_MOBILES_PER_ENB; ue_id_l++) { - if (reestablish_rnti_map[ue_id_l][0] == rnti) { - // clear currentC-RNTI from map - reestablish_rnti_map[ue_id_l][0] = 0; - reestablish_rnti_map[ue_id_l][1] = 0; - break; + //clear reestablish_rnti_map + if(RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer_thres >20){ + for (int ue_id_l = 0; ue_id_l < MAX_MOBILES_PER_ENB; ue_id_l++) { + if (reestablish_rnti_map[ue_id_l][0] == rnti) { + // clear currentC-RNTI from map + reestablish_rnti_map[ue_id_l][0] = 0; + reestablish_rnti_map[ue_id_l][1] = 0; + break; + } } - } + + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, rnti, 0, 0,module_idP); + rrc_rlc_remove_ue(&ctxt); + pdcp_remove_UE(&ctxt); + } // Note: This should not be done in the MAC! for (int ii=0; iiulsch[ii]; @@ -617,13 +618,15 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, } } } + +#if (!defined(PRE_SCD_THREAD)) PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frameP, subframeP, module_idP); pdcp_run(&ctxt); - rrc_rx_tx(&ctxt, CC_id); +#endif #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) @@ -637,6 +640,22 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, #endif + static int debug_flag=0; + void (*schedule_ulsch_p)(module_id_t module_idP, frame_t frameP, sub_frame_t subframe)=NULL; + void (*schedule_ue_spec_p)(module_id_t module_idP, frame_t frameP, sub_frame_t subframe, int *mbsfn_flag)=NULL; + if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_DEFAULT){ + schedule_ulsch_p = schedule_ulsch; + schedule_ue_spec_p = schedule_dlsch; + }else if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR){ + memset(dlsch_ue_select, 0, sizeof(dlsch_ue_select)); + schedule_ulsch_p = schedule_ulsch_fairRR; + schedule_ue_spec_p = schedule_ue_spec_fairRR; + } + if(debug_flag==0){ + LOG_E(MAC,"SCHED_MODE=%d\n",RC.mac[module_idP]->scheduler_mode); + debug_flag=1; + } + // This schedules MIB if ((subframeP == 0) && (frameP & 3) == 0) @@ -653,17 +672,25 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, // This schedules SRS in subframeP schedule_SRS(module_idP, frameP, subframeP); // This schedules ULSCH in subframeP (dci0) - schedule_ulsch(module_idP, frameP, subframeP); + if (schedule_ulsch_p != NULL) { + schedule_ulsch_p(module_idP, frameP, subframeP); + } else { + LOG_E(MAC," %s %d: schedule_ulsch_p is NULL, function not called\n",__FILE__,__LINE__); + } // This schedules UCI_SR in subframeP schedule_SR(module_idP, frameP, subframeP); // This schedules UCI_CSI in subframeP schedule_CSI(module_idP, frameP, subframeP); // This schedules DLSCH in subframeP - schedule_dlsch(module_idP, frameP, subframeP, mbsfn_status); + if (schedule_ue_spec_p != NULL) { + schedule_ue_spec_p(module_idP, frameP, subframeP, mbsfn_status); + } else { + LOG_E(MAC," %s %d: schedule_ue_spec_p is NULL, function not called\n",__FILE__,__LINE__); + } + } else{ schedule_ulsch_phy_test(module_idP,frameP,subframeP); -//LOG_I(MAC,"frameP = %d .subframeP = %d\n", frameP, subframeP);/////////////*********added schedule_ue_spec_phy_test(module_idP,frameP,subframeP,mbsfn_status); } @@ -671,8 +698,10 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, flexran_agent_send_update_stats(module_idP); // Allocate CCEs for good after scheduling is done - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) - allocate_CCEs(module_idP, CC_id, subframeP, 0); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + if(cc[CC_id].tdd_Config == NULL || !(is_UL_sf(&cc[CC_id],subframeP))) + allocate_CCEs(module_idP, CC_id, frameP, subframeP, 2); + } stop_meas(&RC.mac[module_idP]->eNB_scheduler); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index 6a528a9930..a04ad64a1f 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -50,6 +50,7 @@ #include "RRC/LTE/rrc_extern.h" #include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h" +#include "SCHED/sched_common.h" //#include "LAYER2/MAC/pre_processor.c" #include "pdcp.h" @@ -62,6 +63,7 @@ #include "T.h" #include "common/ran_context.h" +#include "LAYER2/MAC/eNB_scheduler_fairRR.h" extern RAN_CONTEXT_t RC; @@ -106,10 +108,10 @@ add_msg3(module_id_t module_idP, int CC_id, RA_t * ra, frame_t frameP, nfapi_ul_config_request_t *ul_req; nfapi_ul_config_request_body_t *ul_req_body; nfapi_ul_config_request_pdu_t *ul_config_pdu; - nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_id]; - nfapi_hi_dci0_request_body_t *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body; + nfapi_hi_dci0_request_t *hi_dci0_req; + nfapi_hi_dci0_request_body_t *hi_dci0_req_body; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu; - + uint8_t sf_ahead_dl; uint8_t rvseq[4] = { 0, 2, 3, 1 }; @@ -211,6 +213,9 @@ add_msg3(module_id_t module_idP, int CC_id, RA_t * ra, frame_t frameP, LOG_D(MAC, "MSG3: UL_CONFIG SFN/SF:%d number_of_pdus:%d ra->msg3_round:%d\n", NFAPI_SFNSF2DEC(ul_req->sfn_sf), ul_req_body->number_of_pdus, ra->msg3_round); if (ra->msg3_round != 0) { // program HI too + sf_ahead_dl = ul_subframe2_k_phich(cc, subframeP); + hi_dci0_req = &mac->HI_DCI0_req[CC_id][(subframeP+sf_ahead_dl)%10]; + hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body; hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci + hi_dci0_req_body->number_of_hi]; memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t)); @@ -225,7 +230,7 @@ add_msg3(module_id_t module_idP, int CC_id, RA_t * ra, frame_t frameP, hi_dci0_req_body->sfnsf = sfnsf_add_subframe(ra->Msg3_frame, ra->Msg3_subframe, 0); hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG; - hi_dci0_req->sfn_sf = sfnsf_add_subframe(ra->Msg3_frame, ra->Msg3_subframe, 4); + hi_dci0_req->sfn_sf = sfnsf_add_subframe(frameP, subframeP, sf_ahead_dl); hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST; if (nfapi_mode) { @@ -283,7 +288,7 @@ generate_Msg2(module_id_t module_idP, int CC_idP, frame_t frameP, LOG_D(MAC,"absSF:%d absSF_Msg2:%d ra->rach_resource_type:%d\n",absSF,absSF_Msg2,ra->rach_resource_type); - if (absSF > absSF_Msg2) + if (absSF < absSF_Msg2) return; // we're not ready yet, need to be to start == if (cc[CC_idP].radioResourceConfigCommon_BR) { @@ -486,6 +491,9 @@ generate_Msg2(module_id_t module_idP, int CC_idP, frame_t frameP, TX_req->segments[0].segment_length = 7; TX_req->segments[0].segment_data = cc[CC_idP].RAR_pdu.payload; mac->TX_req[CC_idP].tx_request_body.number_of_pdus++; + if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR){ + set_dl_ue_select_msg2(CC_idP, 4, -1, ra->rnti); + } } } @@ -587,6 +595,9 @@ generate_Msg2(module_id_t module_idP, int CC_idP, frame_t frameP, TX_req->segments[0].segment_data = cc[CC_idP].RAR_pdu.payload; mac->TX_req[CC_idP].tx_request_body.number_of_pdus++; + if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR){ + set_dl_ue_select_msg2(CC_idP, 4, -1, ra->rnti); + } } // PDCCH CCE allocation is feasible } // Msg2 frame/subframe condition } // else BL/CE @@ -693,17 +704,17 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, // set HARQ process round to 0 for this UE - if (cc->tdd_Config) - ra->harq_pid = ((frameP * 10) + subframeP) % 10; - else - ra->harq_pid = ((frameP * 10) + subframeP) & 7; + ra->harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frameP ,subframeP); /* // Get RRCConnectionSetup for Piggyback rrc_sdu_length = mac_rrc_data_req(module_idP, CC_idP, frameP, CCCH, 1, // 1 transport block &cc[CC_idP].CCCH_pdu.payload[0], 0); // not used in this case - - AssertFatal(rrc_sdu_length > 0, - "[MAC][eNB Scheduler] CCCH not allocated\n"); + if(rrc_sdu_length <= 0) { + LOG_D(MAC,"[MAC][eNB Scheduler] CCCH not allocated (%d)\n",rrc_sdu_length); + return; + } + //AssertFatal(rrc_sdu_length > 0, + //"[MAC][eNB Scheduler] CCCH not allocated\n"); LOG_D(MAC, @@ -987,6 +998,9 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, module_idP, CC_idP, frameP, UE_RNTI(module_idP,UE_id), rrc_sdu_length); } + if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR){ + set_dl_ue_select_msg4(CC_idP, 4, UE_id, ra->rnti); + } } // Msg4 frame/subframe } // msg4_mpdcch_repetition_count } // rach_resource_type > 0 @@ -994,7 +1008,7 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, #endif { // This is normal LTE case - LOG_D(MAC, "Panos-D: generate_Msg4 1 ra->Msg4_frame SFN/SF: %d.%d, frameP SFN/SF: %d.%d FOR eNB_Mod: %d \n", ra->Msg4_frame, ra->Msg4_subframe, frameP, subframeP, module_idP); + LOG_D(MAC, "generate_Msg4 1 ra->Msg4_frame SFN/SF: %d.%d, frameP SFN/SF: %d.%d FOR eNB_Mod: %d \n", ra->Msg4_frame, ra->Msg4_subframe, frameP, subframeP, module_idP); if ((ra->Msg4_frame == frameP) && (ra->Msg4_subframe == subframeP)) { // Get RRCConnectionSetup for Piggyback @@ -1086,10 +1100,8 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, "Frame %d, Subframe %d: Preparing for Msg4 retransmission currently %d.%d\n", frameP, subframeP, ra->Msg4_frame, ra->Msg4_subframe); - if (ra->Msg4_subframe > 1) - ra->Msg4_frame++; - ra->Msg4_frame &= 1023; - ra->Msg4_subframe = (ra->Msg4_subframe + 8) % 10; + get_retransmission_timing(mac->common_channels[CC_idP].tdd_Config,&ra->Msg4_frame,&ra->Msg4_subframe); + LOG_D(MAC, "Frame %d, Subframe %d: Msg4 retransmission in %d.%d\n", frameP, subframeP, ra->Msg4_frame, @@ -1097,9 +1109,7 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, lcid = 0; // put HARQ process round to 0 - if (cc->tdd_Config) ra->harq_pid = ((frameP * 10) + subframeP) % 10; - else - ra->harq_pid = ((frameP * 10) + subframeP) & 7; + ra->harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frameP ,subframeP); UE_list->UE_sched_ctrl[UE_id].round[CC_idP][ra->harq_pid] = 0; if ((ra->msg4_TBsize - rrc_sdu_length - msg4_header) <= 2) { @@ -1194,7 +1204,9 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, UE_id), rrc_sdu_length); } - + if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR){ + set_dl_ue_select_msg4(CC_idP, 4, UE_id, ra->rnti); + } } // CCE Allocation feasible } // msg4 frame/subframe } // else rach_resource_type @@ -1316,7 +1328,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP, ra->rnti, round, frameP, subframeP); // DLSCH Config //DJP - fix this pdu_index = -1 - LOG_D(MAC, "Panos:D: check_Msg4_retransmission() before fill_nfapi_dlsch_config() with pdu_index = -1 \n"); + LOG_D(MAC, "check_Msg4_retransmission() before fill_nfapi_dlsch_config() with pdu_index = -1 \n"); fill_nfapi_dlsch_config(mac, dl_req_body, ra->msg4_TBsize, -1 /* retransmission, no pdu_index */ @@ -1339,6 +1351,9 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP, (cc->p_eNB == 1) ? 1 : 2, // transmission mode 1, // num_bf_prb_per_subband 1); // num_bf_vector + if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR){ + set_dl_ue_select_msg4(CC_idP, 4, UE_id, ra->rnti); + } } else LOG_D(MAC, "msg4 retransmission for rnti %x (round %d) fsf %d/%d CCE allocation failed!\n", @@ -1355,10 +1370,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP, dci_dl_pdu_rel8.cce_idx); // prepare frame for retransmission - if (ra->Msg4_subframe > 1) - ra->Msg4_frame++; - ra->Msg4_frame &= 1023; - ra->Msg4_subframe = (ra->Msg4_subframe + 8) % 10; + get_retransmission_timing(mac->common_channels[CC_idP].tdd_Config,&ra->Msg4_frame,&ra->Msg4_subframe); LOG_W(MAC, "[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Msg4 not acknowledged, adding ue specific dci (rnti %x) for RA (Msg4 Retransmission round %d in %d.%d)\n", @@ -1376,6 +1388,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP, UE_id = find_UE_id(module_idP, ra->rnti); DevAssert(UE_id != -1); mac->UE_list.UE_template[UE_PCCID(module_idP, UE_id)][UE_id].configured = TRUE; + cancel_ra_proc(module_idP, CC_idP, frameP, ra->rnti); } } @@ -1406,7 +1419,7 @@ schedule_RA(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) if (ra->state == MSG2) generate_Msg2(module_idP, CC_id, frameP, subframeP, ra); - else if (ra->state == MSG4) + else if (ra->state == MSG4 && ra->Msg4_frame == frameP && ra->Msg4_subframe == subframeP ) generate_Msg4(module_idP, CC_id, frameP, subframeP, ra); else if (ra->state == WAITMSG4ACK) check_Msg4_retransmission(module_idP, CC_id, frameP, @@ -1442,6 +1455,8 @@ initiate_ra_proc(module_id_t module_idP, struct PRACH_ConfigSIB_v1310 *ext4_prach = NULL; PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13 = NULL; + + static uint8_t failure_cnt = 0; if (cc->radioResourceConfigCommon_BR && cc->radioResourceConfigCommon_BR->ext4) { @@ -1494,11 +1509,22 @@ initiate_ra_proc(module_id_t module_idP, ra[i].msg4_mpdcch_repetition_cnt = 0; #endif - // DJP - this is because VNF is 2 subframes ahead of PNF and TX needs 4 subframes - if (nfapi_mode) - offset = 7; - else - offset = 5; + + //TODO Fill in other TDD config. What about nfapi_mode? + if(cc->tdd_Config!=NULL){ + switch(cc->tdd_Config->subframeAssignment){ + default: printf("%s:%d: TODO\n", __FILE__, __LINE__); abort(); + case 1 : + offset = 6; + break; + } + }else{//FDD + // DJP - this is because VNF is 2 subframes ahead of PNF and TX needs 4 subframes + if (nfapi_mode) + offset = 7; + else + offset = 5; + } add_subframe(&msg2_frame, &msg2_subframe, offset); @@ -1545,6 +1571,7 @@ initiate_ra_proc(module_id_t module_idP, } ra[i].RA_rnti = ra_rnti; ra[i].preamble_index = preamble_index; + failure_cnt = 0; LOG_D(MAC, "[eNB %d][RAPROC] CC_id %d Frame %d Activating RAR generation in Frame %d, subframe %d for process %d, rnti %x, state %d\n", module_idP, CC_id, frameP, ra[i].Msg2_frame, @@ -1557,6 +1584,13 @@ initiate_ra_proc(module_id_t module_idP, LOG_E(MAC, "[eNB %d][RAPROC] FAILURE: CC_id %d Frame %d Initiating RA procedure for preamble index %d\n", module_idP, CC_id, frameP, preamble_index); + + failure_cnt++; + if(failure_cnt > 20) { + LOG_E(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Clear Random access information\n", module_idP, CC_id, frameP); + clear_ra_proc(module_idP, CC_id, frameP); + } + } void @@ -1579,6 +1613,22 @@ cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, ra[i].RRC_timer = 20; ra[i].rnti = 0; ra[i].msg3_round = 0; + LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Canceled RA procedure for UE rnti %x\n", module_idP, CC_id, frameP, rnti); } } } + +void clear_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP) +{ + unsigned char i; + RA_t *ra = (RA_t *) & RC.mac[module_idP]->common_channels[CC_id].ra[0]; + + for (i = 0; i < NB_RA_PROC_MAX; i++) { + LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Clear Random access information rnti %x\n", module_idP, CC_id, frameP, ra[i].rnti); + ra[i].state = IDLE; + ra[i].timing_offset = 0; + ra[i].RRC_timer = 20; + ra[i].rnti = 0; + ra[i].msg3_round = 0; + } +} diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index 0c44946d73..e498b62a27 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -368,21 +368,23 @@ set_ul_DAI(int module_idP, int UE_idP, int CC_idP, int frameP, case 1: switch (subframeP) { + case 0: case 1: UE_list->UE_template[CC_idP][UE_idP].DAI_ul[7] = DAI; break; case 4: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[8] = DAI; - break; + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[8] = DAI; + break; + case 5: case 6: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[2] = DAI; - break; + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[2] = DAI; + break; case 9: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[3] = DAI; - break; + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[3] = DAI; + break; } case 2: @@ -595,12 +597,6 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, int header_length_last; int header_length_total; -#if 0 - if (UE_list->head == -1) { - return; - } -#endif - start_meas(&eNB->schedule_dlsch); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH, VCD_FUNCTION_IN); @@ -632,8 +628,7 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, break; case 6: case 7: - if ((tdd_sfa != 1) && (tdd_sfa != 2) && (tdd_sfa != 4) - && (tdd_sfa != 5)) + if ((tdd_sfa != 3) && (tdd_sfa != 4) && (tdd_sfa != 5)) return; break; case 8: @@ -642,8 +637,7 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, return; break; case 9: - if ((tdd_sfa != 1) && (tdd_sfa != 3) && (tdd_sfa != 4) - && (tdd_sfa != 6)) + if (tdd_sfa == 0) return; break; @@ -761,19 +755,10 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, CC_id, UE_id, subframeP, S_DL_NONE); continue; } -#warning RK->CR This old API call has to be revisited for FAPI, or logic must be changed -#if 0 - /* add "fake" DCI to have CCE_allocation_infeasible work properly for next allocations */ - /* if we don't add it, next allocations may succeed but overall allocations may fail */ - /* will be removed at the end of this function */ - add_ue_spec_dci(&eNB->common_channels[CC_id].DCI_pdu, &(char[]) { - 0}, rnti, 1, aggregation, 1, format1, 0); -#endif nb_available_rb = ue_sched_ctl->pre_nb_available_rbs[CC_id]; - if (cc->tdd_Config) harq_pid = ((frameP * 10) + subframeP) % 10; - else harq_pid = ((frameP * 10) + subframeP) & 7; + harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frameP ,subframeP); round = ue_sched_ctl->round[CC_id][harq_pid]; @@ -832,7 +817,7 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, if (cc[CC_id].tdd_Config != NULL) { UE_list->UE_template[CC_id][UE_id].DAI++; update_ul_dci(module_idP, CC_id, rnti, - UE_list->UE_template[CC_id][UE_id].DAI); + UE_list->UE_template[CC_id][UE_id].DAI, subframeP); LOG_D(MAC, "DAI update: CC_id %d subframeP %d: UE %d, DAI %d\n", CC_id, subframeP, UE_id, @@ -1005,7 +990,7 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, if (TBS - ta_len - header_length_total - sdu_length_total - 3 > 0) { rlc_status = mac_rlc_status_ind(module_idP, rnti, module_idP, frameP, subframeP, ENB_FLAG_YES, MBMS_FLAG_NO, DCCH, TBS - ta_len - header_length_total - sdu_length_total - 3 -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -1020,11 +1005,62 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, sdu_lengths[0] = mac_rlc_data_req(module_idP, rnti, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, DCCH, TBS, //not used (char *)&dlsch_buffer[0] -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); + pthread_mutex_lock(&rrc_release_freelist); + if((rrc_release_info.num_UEs > 0) && (rlc_am_mui.rrc_mui_num > 0)){ + uint16_t release_total = 0; + for(uint16_t release_num = 0;release_num < NUMBER_OF_UE_MAX;release_num++){ + if(rrc_release_info.RRC_release_ctrl[release_num].flag > 0){ + release_total++; + }else{ + continue; + } + + if(rrc_release_info.RRC_release_ctrl[release_num].flag == 1){ + if(rrc_release_info.RRC_release_ctrl[release_num].rnti == rnti){ + for(uint16_t mui_num = 0;mui_num < rlc_am_mui.rrc_mui_num;mui_num++){ + if(rrc_release_info.RRC_release_ctrl[release_num].rrc_eNB_mui == rlc_am_mui.rrc_mui[mui_num]){ + rrc_release_info.RRC_release_ctrl[release_num].flag = 3; + LOG_D(MAC,"DLSCH Release send:index %d rnti %x mui %d mui_num %d flag 1->3\n",release_num,rnti,rlc_am_mui.rrc_mui[mui_num],mui_num); + break; + } + } + } + } + if(rrc_release_info.RRC_release_ctrl[release_num].flag == 2){ + if(rrc_release_info.RRC_release_ctrl[release_num].rnti == rnti){ + for(uint16_t mui_num = 0;mui_num < rlc_am_mui.rrc_mui_num;mui_num++){ + if(rrc_release_info.RRC_release_ctrl[release_num].rrc_eNB_mui == rlc_am_mui.rrc_mui[mui_num]){ + rrc_release_info.RRC_release_ctrl[release_num].flag = 4; + LOG_D(MAC,"DLSCH Release send:index %d rnti %x mui %d mui_num %d flag 2->4\n",release_num,rnti,rlc_am_mui.rrc_mui[mui_num],mui_num); + break; + } + } + } + } + if(release_total >= rrc_release_info.num_UEs) + break; + } + } + pthread_mutex_unlock(&rrc_release_freelist); + + RA_t *ra = &eNB->common_channels[CC_id].ra[0]; + for (uint8_t ra_ii = 0; ra_ii < NB_RA_PROC_MAX; ra_ii++) { + if((ra[ra_ii].rnti == rnti) && (ra[ra_ii].state == MSGCRNTI)){ + for(uint16_t mui_num = 0;mui_num < rlc_am_mui.rrc_mui_num;mui_num++){ + if(ra[ra_ii].crnti_rrc_mui == rlc_am_mui.rrc_mui[mui_num]){ + ra[ra_ii].crnti_harq_pid = harq_pid; + ra[ra_ii].state = MSGCRNTI_ACK; + break; + } + } + } + } + T(T_ENB_MAC_UE_DL_SDU, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP), T_INT(harq_pid), T_INT(DCCH), @@ -1063,7 +1099,7 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, if (TBS - ta_len - header_length_total - sdu_length_total - 3 > 0) { rlc_status = mac_rlc_status_ind(module_idP, rnti, module_idP, frameP, subframeP, ENB_FLAG_YES, MBMS_FLAG_NO, DCCH + 1, TBS - ta_len - header_length_total - sdu_length_total - 3 -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -1079,7 +1115,7 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, sdu_lengths[num_sdus] += mac_rlc_data_req(module_idP, rnti, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, DCCH + 1, TBS, //not used (char *)&dlsch_buffer[sdu_length_total] -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -1134,7 +1170,7 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, MBMS_FLAG_NO, lcid, TBS - ta_len - header_length_total - sdu_length_total - 3 -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -1152,7 +1188,7 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, rnti, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, lcid, TBS, //not used (char *)&dlsch_buffer[sdu_length_total] -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -1316,12 +1352,6 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, dlsch_buffer, sdu_length_total); // memcpy(RC.mac[0].DLSCH_pdu[0][0].payload[0][offset],dcch_buffer,sdu_lengths[0]); -#if 0 - // fill remainder of DLSCH with random data - for (j = 0; j < (TBS - sdu_length_total - offset); j++) { - UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset + sdu_length_total + j] = (char) (taus() & 0xff); - } -#endif // fill remainder of DLSCH with 0 for (j = 0; j < (TBS - sdu_length_total - offset); j++) { UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset + sdu_length_total + j] = 0; @@ -1368,18 +1398,18 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, if (cc[CC_id].tdd_Config != NULL) { // TDD UE_list->UE_template[CC_id][UE_id].DAI++; update_ul_dci(module_idP, CC_id, rnti, - UE_list->UE_template[CC_id][UE_id]. - DAI); + UE_list->UE_template[CC_id][UE_id].DAI, + subframeP); } // do PUCCH power control // this is the normalized RX power eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; - /* TODO: fix how we deal with power, unit is not dBm, it's special from nfapi */ - normalized_rx_power = ue_sched_ctl->pucch1_snr[CC_id]; - target_rx_power = 208; - + /* unit is not dBm, it's special from nfapi */ + // converting to dBm: ToDo: Noise power hard coded to 30 + normalized_rx_power = (5*ue_sched_ctl->pucch1_snr[CC_id]-640)/10+30; + target_rx_power= eNB->puCch10xSnr/10 + 30; // this assumes accumulated tpc // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out int32_t framex10psubframe = UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame * 10 + UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe; @@ -1583,8 +1613,7 @@ fill_DLSCH_dci(module_id_t module_idP, // clear scheduling flag eNB_dlsch_info[module_idP][CC_id][UE_id].status = S_DL_WAITING; rnti = UE_RNTI(module_idP, UE_id); - if (cc->tdd_Config) harq_pid = ((frameP * 10) + subframeP) % 10; - else harq_pid = ((frameP * 10) + subframeP) & 7; + harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frameP ,subframeP); nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; /// Synchronizing rballoc with rballoc_sub @@ -1663,12 +1692,12 @@ unsigned char *get_dlsch_sdu(module_id_t module_idP, //------------------------------------------------------------------------------ void update_ul_dci(module_id_t module_idP, - uint8_t CC_idP, rnti_t rntiP, uint8_t daiP) + uint8_t CC_idP, rnti_t rntiP, uint8_t daiP, sub_frame_t subframe) //------------------------------------------------------------------------------ { nfapi_hi_dci0_request_t *HI_DCI0_req = - &RC.mac[module_idP]->HI_DCI0_req[CC_idP]; + &RC.mac[module_idP]->HI_DCI0_req[CC_idP][subframe]; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &HI_DCI0_req->hi_dci0_request_body.hi_dci0_pdu_list[0]; COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_idP]; @@ -1677,7 +1706,7 @@ update_ul_dci(module_id_t module_idP, if (cc->tdd_Config != NULL) { // TDD for (i = 0; - i hi_dci0_request_body.number_of_dci + HI_DCI0_req->hi_dci0_request_body.number_of_dci; + i hi_dci0_request_body.number_of_dci + HI_DCI0_req->hi_dci0_request_body.number_of_hi; i++) { if ((hi_dci0_pdu[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE) && @@ -1816,21 +1845,9 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) LOG_D(MAC,"[eNB %d] Frame %d subframe %d: PCCH->PCH CC_id %d UE_id %d, Received %d bytes \n", module_idP, frameP, subframeP, CC_id,i, pcch_sdu_length); #ifdef FORMAT1C //NO SIB - if ((subframeP == 1 || subframeP == 2 || subframeP == 4 || subframeP == 6 || subframeP == 9) || + if ((subframeP == 0 || subframeP == 1 || subframeP == 2 || subframeP == 4 || subframeP == 6 || subframeP == 9) || (subframeP == 5 && ((frameP % 2) != 0 && (frameP % 8) != 1))) { switch (n_rb_dl) { -#if 0 - case 6: - n_gap = n_rb_dl/2; /* expect: 3 */ - n_vrb_dl = 2*((n_gap < (n_rb_dl - n_gap)) ? n_gap : (n_rb_dl - n_gap));; /* expect: 6 */ - first_rb = 0; - break; - case 15: - n_gap = GAP_MAP[2][0]; /* expect: 8 */ - n_vrb_dl = 2*((n_gap < (n_rb_dl - n_gap)) ? n_gap : (n_rb_dl - n_gap)); /* expect: 14 */ - first_rb = 6; - break; -#endif case 25: n_gap = GAP_MAP[3][0]; /* expect: 12 */ n_vrb_dl = 2*((n_gap < (n_rb_dl - n_gap)) ? n_gap : (n_rb_dl - n_gap)); /* expect: 24 */ @@ -1857,18 +1874,6 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) } } else if (subframeP == 5 && ((frameP % 2) == 0 || (frameP % 8) == 1)) { // SIB + paging switch (n_rb_dl) { -#if 0 - case 6: - n_gap = n_rb_dl/2; /* expect: 3 */ - n_vrb_dl = 2*((n_gap < (n_rb_dl - n_gap)) ? n_gap : (n_rb_dl - n_gap));; /* expect: 6 */ - first_rb = 0; - break; - case 15: - n_gap = GAP_MAP[2][0]; /* expect: 8 */ - n_vrb_dl = 2*((n_gap < (n_rb_dl - n_gap)) ? n_gap : (n_rb_dl - n_gap)); /* expect: 14 */ - first_rb = 10; - break; -#endif case 25: n_gap = GAP_MAP[3][0]; /* expect: 12 */ n_vrb_dl = 2*((n_gap < (n_rb_dl - n_gap)) ? n_gap : (n_rb_dl - n_gap)); /* expect: 24 */ @@ -1935,7 +1940,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) } #else //NO SIB - if ((subframeP == 1 || subframeP == 2 || subframeP == 4 || subframeP == 6 || subframeP == 9) || + if ((subframeP == 0 || subframeP == 1 || subframeP == 2 || subframeP == 4 || subframeP == 6 || subframeP == 9) || (subframeP == 5 && ((frameP % 2) != 0 && (frameP % 8) != 1))) { switch (n_rb_dl) { case 25: @@ -2027,6 +2032,10 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) LOG_D(MAC,"Frame %d: Subframe %d : Adding common DCI for P_RNTI\n", frameP,subframeP); dl_req->number_dci++; dl_req->number_pdu++; + dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG; + eNB->DL_req[CC_id].sfn_sf = frameP<<4 | subframeP; + eNB->DL_req[CC_id].header.message_id = NFAPI_DL_CONFIG_REQUEST; + dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; @@ -2067,6 +2076,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) TX_req->num_segments = 1; TX_req->segments[0].segment_length = pcch_sdu_length; TX_req->segments[0].segment_data = cc[CC_id].PCCH_pdu.payload; + eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG; eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; } else { LOG_E(MAC,"[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A/1C for Paging\n",module_idP, CC_id, frameP, subframeP); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c index bcaa30e3c1..80ee6376ae 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c @@ -633,7 +633,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, MTCH, TBS - header_len_mcch - header_len_msi - sdu_length_total - header_len_mtch -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -652,7 +652,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES, MTCH, 0, //not used (char *) &mch_buffer[sdu_length_total] -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index 5faf0e0064..68cc6a797d 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -94,7 +94,7 @@ schedule_ue_spec_phy_test( nb_rb = conv_nprb(0,rb_alloc,N_RB_DL); TBS = get_TBS_DL(mcs,nb_rb); - /*LOG_I(MAC,"schedule_ue_spec_phy_test: subframe %d/%d: nb_rb=%d, TBS=%d, mcs=%d harq_pid=%d (rb_alloc=%x, N_RB_DL=%d) pdu_number = %d \n", frameP, subframeP, nb_rb, TBS, mcs, harq_pid, rb_alloc, N_RB_DL, dl_req->number_pdu);*////////////********LOG_D to LOG_I + LOG_D(MAC,"schedule_ue_spec_phy_test: subframe %d/%d: nb_rb=%d, TBS=%d, mcs=%d harq_pid=%d (rb_alloc=%x, N_RB_DL=%d) pdu_number = %d \n", frameP, subframeP, nb_rb, TBS, mcs, harq_pid, rb_alloc, N_RB_DL, dl_req->number_pdu); dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); @@ -124,8 +124,8 @@ schedule_ue_spec_phy_test( LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, dai %d, mcs %d\n", module_idP,CC_id,harq_pid,dai,mcs); } else { - /*LOG_I(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", - module_idP,CC_id,harq_pid,mcs);*////////////********added + LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", + module_idP,CC_id,harq_pid,mcs); } LOG_D(MAC,"Checking feasibility pdu %d (new sdu)\n",dl_req->number_pdu); @@ -135,7 +135,6 @@ schedule_ue_spec_phy_test( //ue_sched_ctl->round[CC_id][harq_pid] = 0; dl_req->number_dci++; dl_req->number_pdu++; -//LOG_I(MAC,"phy-test DL number of dci = %d pdu = %d \n", dl_req->number_dci, dl_req->number_pdu);////////////********added eNB->DL_req[CC_id].sfn_sf = frameP<<4 | subframeP; //eNB->DL_req[CC_id].header.message_id = NFAPI_DL_CONFIG_REQUEST; @@ -151,7 +150,6 @@ schedule_ue_spec_phy_test( AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated is NULL\n"); AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->pdsch_ConfigDedicated!=NULL,"physicalConfigDedicated->pdsch_ConfigDedicated is NULL\n"); */ -//LOG_I(MAC,"pdu_index = %d \n", eNB->pdu_index[CC_id]);////////////********added fill_nfapi_dlsch_config(eNB, @@ -205,25 +203,28 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s int32_t target_rx_power= 178; int CC_id = 0; int nb_rb = 96; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = eNB->common_channels; - UE_list_t *UE_list=&eNB->UE_list; + eNB_MAC_INST *mac = RC.mac[module_idP]; + COMMON_channels_t *cc = &mac->common_channels[0]; + UE_list_t *UE_list=&mac->UE_list; UE_TEMPLATE *UE_template; UE_sched_ctrl *UE_sched_ctrl; int sched_frame=frameP; int sched_subframe = (subframeP+4)%10; + uint16_t ul_req_index; + uint8_t dlsch_flag; if (sched_subframeHI_DCI0_req[CC_id].hi_dci0_request_body; + nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_id][subframeP]; + nfapi_hi_dci0_request_body_t *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu; //nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req->ul_config_pdu_list[0];; - nfapi_ul_config_request_body_t *ul_req = &eNB->UL_req[CC_id].ul_config_request_body; + nfapi_ul_config_request_body_t *ul_req = &mac->UL_req[CC_id].ul_config_request_body; - eNB->UL_req[CC_id].sfn_sf = (sched_frame<<4) + sched_subframe; - eNB->HI_DCI0_req[CC_id].sfn_sf = (frameP<<4)+subframeP; + //mac->UL_req[CC_id].sfn_sf = (sched_frame<<4) + sched_subframe; + hi_dci0_req->sfn_sf = (frameP << 4) + subframeP; for (CC_id=0; CC_idUE_sched_ctrl[UE_id]; harq_pid = subframe2harqpid(&cc[CC_id],sched_frame,sched_subframe); - //LOG_I(MAC,"Scheduling for frame %d, subframe %d => harq_pid %d\n",sched_frame,sched_subframe,harq_pid);////////////********added RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP] = UE_template->TBS_UL[harq_pid]; @@ -247,7 +247,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s //compute the expected ULSCH RX power (for the stats) // this is the normalized RX power and this should be constant (regardless of mcs - normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id]; + normalized_rx_power = (5*UE_sched_ctrl->pusch_snr[CC_id]-640)/10+30; // new transmission @@ -283,7 +283,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s // save it for a potential retransmission UE_template->cshift[harq_pid] = cshift; - hi_dci0_pdu = &hi_dci0_req->hi_dci0_pdu_list[eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_dci+eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_hi]; + hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci + hi_dci0_req_body->number_of_hi]; memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t)); hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_DCI_PDU_TYPE; hi_dci0_pdu->pdu_size = 2+sizeof(nfapi_hi_dci0_dci_pdu); @@ -300,18 +300,28 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tpc = tpc; hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cqi_csi_request = cqi_req; hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dl_assignment_index = UE_template->DAI_ul[sched_subframe]; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.harq_pid = harq_pid; - eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_dci++; - + hi_dci0_req_body->number_of_dci++; + ul_req_index = 0; + dlsch_flag = 0; + for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){ + if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){ + dlsch_flag = 1; + LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index); + break; + } + } + // Add UL_config PDUs - fill_nfapi_ulsch_config_request_rel8(&ul_req->ul_config_pdu_list[ul_req->number_of_pdus], + fill_nfapi_ulsch_config_request_rel8(& ul_req->ul_config_pdu_list[ul_req_index], cqi_req, cc, 0,//UE_template->physicalConfigDedicated, get_tmode(module_idP,CC_id,UE_id), - eNB->ul_handle, + mac->ul_handle,//eNB->ul_handle, rnti, first_rb[CC_id], // resource_block_start nb_rb, // number_of_resource_blocks @@ -327,9 +337,9 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s 0, // n_srs get_TBS_UL(mcs,nb_rb) ); -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) if (UE_template->rach_resource_type>0) { // This is a BL/CE UE allocation - fill_nfapi_ulsch_config_request_emtc(&ul_req->ul_config_pdu_list[ul_req->number_of_pdus], + fill_nfapi_ulsch_config_request_emtc(&ul_req->ul_config_pdu_list[ul_req_index], UE_template->rach_resource_type>2 ? 2 : 1, 1, //total_number_of_repetitions 1, //repetition_number @@ -337,7 +347,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s } #endif ul_req->number_of_pdus = 1; - eNB->ul_handle++; + mac->ul_handle++; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index fbb125cf72..7c84b15bee 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -55,8 +55,10 @@ #define ENABLE_MAC_PAYLOAD_DEBUG #define DEBUG_eNB_SCHEDULER 1 +extern uint16_t frame_cnt; #include "common/ran_context.h" +#include "SCHED/sched_common.h" extern RAN_CONTEXT_t RC; @@ -555,11 +557,61 @@ int is_UL_sf(COMMON_channels_t * ccP, sub_frame_t subframeP) } } +int is_S_sf(COMMON_channels_t * ccP, sub_frame_t subframeP) +{ + // if FDD return dummy value + if (ccP->tdd_Config == NULL) + return (0); + + switch (subframeP) { + case 1: + return (1); + break; + + case 6: + if(ccP->tdd_Config->subframeAssignment == 0 || ccP->tdd_Config->subframeAssignment == 1 + || ccP->tdd_Config->subframeAssignment == 2 || ccP->tdd_Config->subframeAssignment == 6) + return (1); + break; + + default: + return (0); + break; + } + return 0; +} + +uint8_t ul_subframe2_k_phich(COMMON_channels_t * cc, sub_frame_t ul_subframe){ + + if(cc->tdd_Config){//TODO fill other tdd config + switch(cc->tdd_Config->subframeAssignment){ + case 0: + break; + case 1: + if(ul_subframe == 2 || ul_subframe == 7) + return 4; + else if(ul_subframe == 3 || ul_subframe == 8) + return 6; + else return 255; + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + break; + } + } + return 4; //idk sf_ahead? +} + uint16_t get_pucch1_absSF(COMMON_channels_t * cc, uint16_t dlsch_absSF) { uint16_t sf, f, nextf; - if (cc->tdd_Config == NULL) { //FDD n+4 + if (cc->tdd_Config == NULL) { //FDD n+4 return ((dlsch_absSF + 4) % 10240); } else { sf = dlsch_absSF % 10; @@ -568,72 +620,93 @@ uint16_t get_pucch1_absSF(COMMON_channels_t * cc, uint16_t dlsch_absSF) switch (cc->tdd_Config->subframeAssignment) { case 0: - AssertFatal(1 == 0, "SFA 0 to be filled in now, :-)\n"); + if ((sf == 0) || (sf == 5)) + return ((10 * f) + sf + 4)% 10240; // ACK/NAK in SF 4,9 same frame + else if (sf == 6) + return ((10 * nextf) + 2)% 10240; // ACK/NAK in SF 2 next frame + else if (sf == 1) + return ((10 * f) + 7)% 10240; // ACK/NAK in SF 7 same frame + else + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 0\n", + sf); + break; case 1: if ((sf == 5) || (sf == 6)) - return ((10 * nextf) + 2); // ACK/NAK in SF 2 next frame + return ((10 * nextf) + 2)% 10240; // ACK/NAK in SF 2 next frame else if (sf == 9) - return ((10 * nextf) + 3); // ACK/NAK in SF 3 next frame + return ((10 * nextf) + 3)% 10240; // ACK/NAK in SF 3 next frame else if ((sf == 0) || (sf == 1)) - return ((10 * f) + 2); // ACK/NAK in SF 7 same frame + return ((10 * f) + 7)% 10240; // ACK/NAK in SF 7 same frame + else if (sf == 4) + return ((10 * f) + 8)% 10240; // ACK/NAK in SF 8 same frame else - AssertFatal(1 == 0, - "Impossible dlsch subframe %d for TDD configuration 3\n", - sf); + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 1\n", + sf); break; case 2: if ((sf == 4) || (sf == 5) || (sf == 6) || (sf == 8)) - return ((10 * nextf) + 2); // ACK/NAK in SF 2 next frame + return ((10 * nextf) + 2)% 10240; // ACK/NAK in SF 2 next frame else if (sf == 9) - return ((10 * nextf) + 7); // ACK/NAK in SF 7 next frame + return ((10 * nextf) + 7)% 10240; // ACK/NAK in SF 7 next frame else if ((sf == 0) || (sf == 1) || (sf == 3)) - return ((10 * f) + 7); // ACK/NAK in SF 7 same frame + return ((10 * f) + 7)% 10240; // ACK/NAK in SF 7 same frame else - AssertFatal(1 == 0, - "Impossible dlsch subframe %d for TDD configuration 3\n", - sf); + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 2\n", + sf); break; case 3: if ((sf == 5) || (sf == 6) || (sf == 7) || (sf == 8) - || (sf == 9)) - return ((10 * nextf) + (sf >> 1)); // ACK/NAK in 2,3,4 resp. next frame + || (sf == 9)) + return ((10 * nextf) + ((sf-1) >> 1))% 10240; // ACK/NAK in 2,3,4 resp. next frame else if (sf == 1) - return ((10 * nextf) + 2); // ACK/NAK in 2 next frame + return ((10 * nextf) + 2)% 10240; // ACK/NAK in 2 next frame else if (sf == 0) - return ((10 * f) + 4); // ACK/NAK in 4 same frame + return ((10 * f) + 4)% 10240; // ACK/NAK in 4 same frame else - AssertFatal(1 == 0, - "Impossible dlsch subframe %d for TDD configuration 3\n", - sf); + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 3\n", + sf); break; case 4: if ((sf == 6) || (sf == 7) || (sf == 8) || (sf == 9)) - return (((10 * nextf) + 3) % 10240); // ACK/NAK in SF 3 next frame + return (((10 * nextf) + 3) % 10240); // ACK/NAK in SF 3 next frame else if ((sf == 0) || (sf == 1) || (sf == 4) || (sf == 5)) - return (((10 * nextf) + 2) % 10240); // ACK/NAK in SF 2 next frame + return (((10 * nextf) + 2) % 10240); // ACK/NAK in SF 2 next frame else - AssertFatal(1 == 0, - "Impossible dlsch subframe %d for TDD configuration 4\n", - sf); + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 4\n", + sf); break; case 5: if ((sf == 0) || (sf == 1) || (sf == 3) || (sf == 4) - || (sf == 5) || (sf == 6) || (sf == 7) || (sf == 8)) - return (((10 * nextf) + 2) % 10240); // ACK/NAK in SF 3 next frame + || (sf == 5) || (sf == 6) || (sf == 7) || (sf == 8)) + return (((10 * nextf) + 2) % 10240); // ACK/NAK in SF 3 next frame else if (sf == 9) - return (((10 * (1 + nextf)) + 2) % 10240); // ACK/NAK in SF 2 next frame + return (((10 * (1 + nextf)) + 2) % 10240); // ACK/NAK in SF 2 next frame else - AssertFatal(1 == 0, - "Impossible dlsch subframe %d for TDD configuration 5\n", - sf); + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 5\n", + sf); break; case 6: - AssertFatal(1 == 0, "SFA 6 To be filled in now, :-)\n"); + if ((sf == 5) || (sf == 6)) + return ((10 * f) + sf + 7)% 10240; // ACK/NAK in SF 2,3 next frame + else if (sf == 9) + return ((10 * nextf) + 4)% 10240; // ACK/NAK in SF 4 next frame + else if ((sf == 1) || (sf == 0)) + return ((10 * f) + sf + 7)% 10240; // ACK/NAK in SF 7 same frame + else + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 6\n", + sf); break; default: AssertFatal(1 == 0, "Illegal TDD subframe Assigment %d\n", - (int) cc->tdd_Config->subframeAssignment); + (int) cc->tdd_Config->subframeAssignment); break; } } @@ -1156,7 +1229,7 @@ program_dlsch_acknak(module_id_t module_idP, int CC_idP, int UE_idP, } } - if (ulsch_harq_information) fill_nfapi_ulsch_harq_information(module_idP, CC_idP, rnti, ulsch_harq_information); + if (ulsch_harq_information) fill_nfapi_ulsch_harq_information(module_idP, CC_idP, rnti, ulsch_harq_information, subframeP); if (harq_information) fill_nfapi_harq_information(module_idP, CC_idP, rnti, @@ -1164,9 +1237,9 @@ program_dlsch_acknak(module_id_t module_idP, int CC_idP, int UE_idP, harq_information, cce_idx); } -uint8_t get_V_UL_DAI(module_id_t module_idP, int CC_idP, uint16_t rntiP) +uint8_t get_V_UL_DAI(module_id_t module_idP, int CC_idP, uint16_t rntiP,sub_frame_t subframeP) { - nfapi_hi_dci0_request_body_t *HI_DCI0_req = &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; + nfapi_hi_dci0_request_body_t *HI_DCI0_req = &RC.mac[module_idP]->HI_DCI0_req[CC_idP][subframeP].hi_dci0_request_body; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &HI_DCI0_req->hi_dci0_pdu_list[0]; for (int i = 0; i < HI_DCI0_req->number_of_dci; i++) { @@ -1181,7 +1254,8 @@ void fill_nfapi_ulsch_harq_information(module_id_t module_idP, int CC_idP, uint16_t rntiP, - nfapi_ul_config_ulsch_harq_information *harq_information) + nfapi_ul_config_ulsch_harq_information *harq_information, + sub_frame_t subframeP) { eNB_MAC_INST *eNB = RC.mac[module_idP]; COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; @@ -1232,7 +1306,7 @@ fill_nfapi_ulsch_harq_information(module_id_t module_ harq_information->harq_information_rel10.harq_size = 1; else { if (harq_information->harq_information_rel10.ack_nack_mode == 1) - harq_information->harq_information_rel10.harq_size = get_V_UL_DAI(module_idP, CC_idP, rntiP); + harq_information->harq_information_rel10.harq_size = get_V_UL_DAI(module_idP, CC_idP, rntiP, subframeP); else harq_information->harq_information_rel10.harq_size = 1; } @@ -1242,7 +1316,7 @@ fill_nfapi_ulsch_harq_information(module_id_t module_ harq_information->harq_information_rel10.harq_size = 2; } else { if (harq_information->harq_information_rel10.ack_nack_mode == 1) - harq_information->harq_information_rel10.harq_size = get_V_UL_DAI(module_idP, CC_idP, rntiP); + harq_information->harq_information_rel10.harq_size = get_V_UL_DAI(module_idP, CC_idP, rntiP, subframeP); else harq_information->harq_information_rel10.harq_size = 2; } @@ -1250,6 +1324,26 @@ fill_nfapi_ulsch_harq_information(module_id_t module_ } // get Tmode } +uint8_t Np[6][4]= {{0,1,3,5}, + {0,3,8,13}, + {0,5,13,22}, + {0,11,27,44}, + {0,16,41,66}, + {0,22,55,88}}; + +// This is part of the PUCCH allocation procedure (see Section 10.1 36.213) +uint16_t getNp(int dl_Bandwidth,uint8_t nCCE,uint8_t plus1) +{ + AssertFatal(dl_Bandwidth<6,"dl_Bandwidth %d>5\n",dl_Bandwidth); + + if (nCCE>=Np[dl_Bandwidth][2]) + return(Np[dl_Bandwidth][2+plus1]); + else if (nCCE>=Np[dl_Bandwidth][1]) + return(Np[dl_Bandwidth][1+plus1]); + else + return(Np[dl_Bandwidth][0+plus1]); +} + void fill_nfapi_harq_information(module_id_t module_idP, int CC_idP, @@ -1266,13 +1360,6 @@ fill_nfapi_harq_information(module_id_t module_idP, AssertFatal(UE_id >= 0, "UE_id cannot be found, impossible\n"); AssertFatal(UE_list != NULL, "UE_list is null\n"); -#if 0 - /* TODO: revisit, don't use Assert, it's perfectly possible to - * have physicalConfigDedicated NULL here - */ - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated != NULL, - "physicalConfigDedicated for rnti %x is null\n", rntiP); -#endif harq_information->harq_information_rel11.tl.tag = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL11_TAG; harq_information->harq_information_rel11.num_ant_ports = 1; @@ -1284,19 +1371,22 @@ fill_nfapi_harq_information(module_id_t module_idP, case 6: case 7: if (cc->tdd_Config != NULL) { - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated != NULL, - "pucch_ConfigDedicated is null for TDD!\n"); - if ((UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode != NULL) +// AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated != NULL, +// "pucch_ConfigDedicated is null for TDD!\n"); + if (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated != NULL + && UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated != NULL + && (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode != NULL) && (*UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode == PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing)) - { - harq_information->harq_information_rel10_tdd.harq_size = 2; // 2-bit ACK/NAK - harq_information->harq_information_rel10_tdd.ack_nack_mode = 1; // multiplexing - } else { - harq_information->harq_information_rel10_tdd.harq_size = 1; // 1-bit ACK/NAK - harq_information->harq_information_rel10_tdd.ack_nack_mode = 0; // bundling + { + harq_information->harq_information_rel10_tdd.harq_size = 2; // 2-bit ACK/NAK + harq_information->harq_information_rel10_tdd.ack_nack_mode = 1; // multiplexing + } else { + harq_information->harq_information_rel10_tdd.harq_size = 1; // 1-bit ACK/NAK + harq_information->harq_information_rel10_tdd.ack_nack_mode = 0; // bundling } harq_information->harq_information_rel10_tdd.tl.tag = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL10_TDD_TAG; - harq_information->harq_information_rel10_tdd.n_pucch_1_0 = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP; + harq_information->harq_information_rel10_tdd.n_pucch_1_0 = getNp(cc->mib->message.dl_Bandwidth,cce_idxP,0) + + cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP; harq_information->harq_information_rel10_tdd.number_of_pucch_resources = 1; } else { harq_information->harq_information_rel9_fdd.tl.tag = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL9_FDD_TAG; @@ -1374,7 +1464,7 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST * eNB, nfapi_dl_config_request_body_t * dl_req, uint16_t length, - uint16_t pdu_index, + int16_t pdu_index, uint16_t rnti, uint8_t resource_allocation_type, uint8_t @@ -1434,7 +1524,7 @@ uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body, uint16_t absSF, uint16_t pdu_length, - uint16_t pdu_index, + int16_t pdu_index, uint8_t *pdu) { nfapi_tx_request_pdu_t *TX_req = &tx_req_body->tx_pdu_list[tx_req_body->number_of_pdus]; @@ -1485,7 +1575,8 @@ fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t *ul_config_pd ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks = number_of_resource_blocks; if (mcs < 11) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 2; else if (mcs < 21) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 4; - else ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 6; + else if(mcs < 29) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 6; + else ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 0; ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms = cyclic_shift_2_for_drms; ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_enabled_flag = frequency_hopping_enabled_flag; ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits = frequency_hopping_bits; @@ -1902,7 +1993,6 @@ int rrc_mac_remove_ue(module_id_t mod_idP, rnti_t rntiP) //------------------------------------------------------------------------------ { - int i; int j; UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; int UE_id = find_UE_id(mod_idP,rntiP); @@ -1967,17 +2057,30 @@ int rrc_mac_remove_ue(module_id_t mod_idP, rnti_t rntiP) eNB_dlsch_info[mod_idP][pCC_id][UE_id].serving_num = 0; // check if this has an RA process active - RA_t *ra; - for (i = 0; i < NB_RA_PROC_MAX; i++) { - ra = (RA_t *) & RC.mac[mod_idP]->common_channels[pCC_id].ra[i]; - if (ra->rnti == rntiP) { - ra->state = IDLE; - ra->timing_offset = 0; - ra->RRC_timer = 20; - ra->rnti = 0; - //break; + if(find_RA_id(mod_idP, pCC_id, rntiP) != -1) { + cancel_ra_proc(mod_idP, pCC_id, 0, rntiP); + } + + pthread_mutex_lock(&rrc_release_freelist); + if(rrc_release_info.num_UEs > 0){ + uint16_t release_total = 0; + for(uint16_t release_num = 0;release_num < NUMBER_OF_UE_MAX;release_num++){ + if(rrc_release_info.RRC_release_ctrl[release_num].flag > 0){ + release_total++; + }else{ + continue; + } + if(rrc_release_info.RRC_release_ctrl[release_num].rnti == rntiP){ + rrc_release_info.RRC_release_ctrl[release_num].flag = 0; + rrc_release_info.num_UEs--; + release_total--; + } + if(release_total >= rrc_release_info.num_UEs){ + break; + } } } + pthread_mutex_unlock(&rrc_release_freelist); return 0; } @@ -2766,13 +2869,13 @@ get_nCCE_max(COMMON_channels_t * cc, int num_pdcch_symbols, int subframe) // Allocate the CCEs int -allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) +allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP, int test_onlyP) { int *CCE_table = RC.mac[module_idP]->CCE_table[CC_idP]; nfapi_dl_config_request_body_t *DL_req = &RC.mac[module_idP]->DL_req[CC_idP].dl_config_request_body; nfapi_hi_dci0_request_body_t *HI_DCI0_req = - &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; + &RC.mac[module_idP]->HI_DCI0_req[CC_idP][subframeP].hi_dci0_request_body; nfapi_dl_config_request_pdu_t *dl_config_pdu = &DL_req->dl_config_pdu_list[0]; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = @@ -2783,6 +2886,17 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) int fCCE; int i, j, idci; int nCCE = 0; + int max_symbol; + + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; + int ackNAK_absSF = get_pucch1_absSF(cc, (frameP*10+subframeP)); + if (cc->tdd_Config!=NULL && is_S_sf(cc,subframeP) > 0) + max_symbol = 2; + else + max_symbol = 3; + + nfapi_ul_config_request_body_t *ul_req = &eNB->UL_req_tmp[CC_idP][ackNAK_absSF % 10].ul_config_request_body; LOG_D(MAC, "Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)\n", @@ -2811,7 +2925,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) if (nCCE + (dl_config_pdu[i].dci_dl_pdu. dci_dl_pdu_rel8.aggregation_level) > nCCE_max) { - if (DL_req->number_pdcch_ofdm_symbols == 3) + if (DL_req->number_pdcch_ofdm_symbols == max_symbol) goto failed; LOG_D(MAC, "Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n", @@ -2833,7 +2947,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) dci_dl_pdu.dci_dl_pdu_rel8.rnti, subframeP); if (fCCE == -1) { - if (DL_req->number_pdcch_ofdm_symbols == 3) { + if (DL_req->number_pdcch_ofdm_symbols == max_symbol) { LOG_D(MAC, "subframe %d: Dropping Allocation for RNTI %x\n", subframeP, @@ -2876,7 +2990,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) // the allocation is feasible, rnti rule passes nCCE += dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level; LOG_D(MAC, "Allocating at nCCE %d\n", fCCE); - if (test_onlyP == 0) { + if ((test_onlyP%2) == 0) { dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx = fCCE; LOG_D(MAC, "Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d\n", @@ -2904,7 +3018,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) nCCE, nCCE_max, DL_req->number_pdcch_ofdm_symbols); if (nCCE + (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level) > nCCE_max) { - if (DL_req->number_pdcch_ofdm_symbols == 3) + if (DL_req->number_pdcch_ofdm_symbols == max_symbol) goto failed; LOG_D(MAC, "Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n", @@ -2925,7 +3039,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8. rnti, subframeP); if (fCCE == -1) { - if (DL_req->number_pdcch_ofdm_symbols == 3) { + if (DL_req->number_pdcch_ofdm_symbols == max_symbol) { LOG_D(MAC, "subframe %d: Dropping Allocation for RNTI %x\n", subframeP, @@ -2965,7 +3079,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) // the allocation is feasible, rnti rule passes nCCE += hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level; LOG_D(MAC, "Allocating at nCCE %d\n", fCCE); - if (test_onlyP == 0) { + if ((test_onlyP%2) == 0) { hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.cce_index = fCCE; LOG_D(MAC, "Allocate CCEs subframe %d, test %d\n", subframeP, test_onlyP); @@ -2989,7 +3103,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) DL_req->number_pdcch_ofdm_symbols); if (nCCE + (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level) > nCCE_max) { - if (DL_req->number_pdcch_ofdm_symbols == 3) + if (DL_req->number_pdcch_ofdm_symbols == max_symbol) goto failed; LOG_D(MAC, "Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n", @@ -3007,7 +3121,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti, subframeP); if (fCCE == -1) { - if (DL_req->number_pdcch_ofdm_symbols == 3) { + if (DL_req->number_pdcch_ofdm_symbols == max_symbol) { LOG_I(MAC, "subframe %d: Dropping Allocation for RNTI %x\n", subframeP, @@ -3015,7 +3129,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) rnti); for (j = 0; j <= i; j++) { if (dl_config_pdu[j].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) - LOG_I(MAC, + LOG_D(MAC, "DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", j, DL_req->number_dci + HI_DCI0_req->number_of_dci, @@ -3047,11 +3161,25 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) // the allocation is feasible, rnti rule passes nCCE += dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level; LOG_D(MAC, "Allocating at nCCE %d\n", fCCE); - if (test_onlyP == 0) { + if ((test_onlyP%2) == 0) { dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx = fCCE; LOG_D(MAC, "Allocate CCEs subframe %d, test %d\n", subframeP, test_onlyP); } + if ((test_onlyP/2) == 1) { + for(int ack_int = 0;ack_int < ul_req->number_of_pdus; ack_int++){ + if(((ul_req->ul_config_pdu_list[ack_int].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE) || + (ul_req->ul_config_pdu_list[ack_int].pdu_type == NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE)) && + (ul_req->ul_config_pdu_list[ack_int].uci_harq_pdu.ue_information.ue_information_rel8.rnti == dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti)){ + if (cc->tdd_Config==NULL) + ul_req->ul_config_pdu_list[ack_int].uci_harq_pdu.harq_information.harq_information_rel9_fdd.n_pucch_1_0 = + cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + fCCE; + else + ul_req->ul_config_pdu_list[ack_int].uci_harq_pdu.harq_information.harq_information_rel10_tdd.n_pucch_1_0 = + cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + fCCE + getNp(cc->mib->message.dl_Bandwidth,fCCE,0) ; + } + } + } idci++; } } // for i = 0 ... num_DL_DCIs @@ -3134,7 +3262,7 @@ CCE_allocation_infeasible(int module_idP, { nfapi_dl_config_request_body_t *DL_req = &RC.mac[module_idP]->DL_req[CC_idP].dl_config_request_body; nfapi_dl_config_request_pdu_t *dl_config_pdu = &DL_req->dl_config_pdu_list[DL_req->number_pdu]; - nfapi_hi_dci0_request_body_t *HI_DCI0_req = &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; + nfapi_hi_dci0_request_body_t *HI_DCI0_req = &RC.mac[module_idP]->HI_DCI0_req[CC_idP][subframe].hi_dci0_request_body; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci + HI_DCI0_req->number_of_hi]; int ret; boolean_t res = FALSE; @@ -3158,7 +3286,7 @@ CCE_allocation_infeasible(int module_idP, dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. aggregation_level, dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type); - ret = allocate_CCEs(module_idP, CC_idP, subframe, 0); + ret = allocate_CCEs(module_idP, CC_idP, 0, subframe, 0); if (ret == -1) res = TRUE; DL_req->number_pdu--; } @@ -3173,7 +3301,7 @@ CCE_allocation_infeasible(int module_idP, hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti = rnti; hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level = aggregation; HI_DCI0_req->number_of_dci++; - ret = allocate_CCEs(module_idP, CC_idP, subframe, 0); + ret = allocate_CCEs(module_idP, CC_idP, 0, subframe, 0); if (ret == -1) res = TRUE; HI_DCI0_req->number_of_dci--; } @@ -3181,6 +3309,204 @@ CCE_allocation_infeasible(int module_idP, return res; } +void get_retransmission_timing(TDD_Config_t *tdd_Config, frame_t *frameP, + sub_frame_t *subframeP) +{ + + if (tdd_Config == NULL) + { + if (*subframeP > 1) + *frameP = (*frameP + 1) % 1024; + *subframeP = (*subframeP + 8) % 10; + } + else + { + switch (tdd_Config->subframeAssignment)//TODO fill in other TDD configs + { + default: printf("%s:%d: TODO\n", __FILE__, __LINE__); abort(); + case 1: + if (*subframeP == 0 || *subframeP == 5) + { + *subframeP += 19; + *frameP = (*frameP + *subframeP/10) % 1024; + *subframeP %= 10; + } + else if (*subframeP == 4 || *subframeP == 9) + { + *subframeP += 16; + *frameP = (*frameP + *subframeP/10) % 1024; + *subframeP %= 10; + } + else + { + AssertFatal(2 == 1, + "Illegal dl subframe %d for tdd config %ld\n", *subframeP, + tdd_Config->subframeAssignment); + } + break; + } + } +} + +uint8_t get_dl_subframe_count(int tdd_config_sfa, sub_frame_t subframeP){ + + uint8_t tdd1[10] = {1,-1,-1,-1,2,3,-1,-1,-1,4}; // special subframes 1,6 are excluded + + switch(tdd_config_sfa){// TODO fill in other tdd configs + case 1 : + return tdd1[subframeP]; + break; + } + return -1; +} + +uint8_t frame_subframe2_dl_harq_pid(TDD_Config_t *tdd_Config, int abs_frameP, sub_frame_t subframeP){ + int harq_pid; + if(tdd_Config){ + + switch(tdd_Config->subframeAssignment){ //TODO fill in other tdd config + case 1: + harq_pid = (((frame_cnt*1024 + abs_frameP) * 4) - 1 + get_dl_subframe_count(tdd_Config->subframeAssignment,subframeP))%7;//4 dl subframe in a frame + if(harq_pid < 0) + harq_pid += 7; + LOG_D(MAC,"[frame_subframe2_dl_harq_pid] (%d,%d) calculate harq_pid ((( %d * 1024 + %d) *4) - 1 + %d) = %d \n", + (abs_frameP+1024)%1024,subframeP,frame_cnt,abs_frameP, + get_dl_subframe_count(tdd_Config->subframeAssignment,subframeP),harq_pid); + return harq_pid; + break; + } + }else{ + return ((abs_frameP*10)+subframeP)&7; + } + return -1; +} + +unsigned char ul_ACK_subframe2M(TDD_Config_t *tdd_Config,unsigned char subframe) +{ + + if (tdd_Config == NULL) { + return(1); + } else { + switch (tdd_Config->subframeAssignment) { + case 1: + return 1; // don't ACK special subframe for now + if (subframe == 2) { // ACK subframes 5 and 6 + return(2); + } else if (subframe == 3) { // ACK subframe 9 + return(1); // To be updated + } else if (subframe == 7) { // ACK subframes 0 and 1 + return(2); // To be updated + } else if (subframe == 8) { // ACK subframe 4 + return(1); // To be updated + } else { + AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n", + subframe,tdd_Config->subframeAssignment); + + } + + break; + case 3: + if (subframe == 2) { // ACK subframes 5 and 6 + return(2); // should be 3 + } else if (subframe == 3) { // ACK subframes 7 and 8 + return(2); // To be updated + } else if (subframe == 4) { // ACK subframes 9 and 0 + return(2); + } else { + AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n", + subframe,tdd_Config->subframeAssignment); + } + + break; + + case 4: + if (subframe == 2) { // ACK subframes 0,4 and 5 + return(3); // should be 4 + } else if (subframe == 3) { // ACK subframes 6,7,8 and 9 + return(4); + } else { + AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n", + subframe,tdd_Config->subframeAssignment); + } + + break; + + case 5: + if (subframe == 2) { // ACK subframes 0,3,4,5,6,7,8 and 9 + return(8); // should be 3 + } else { + AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n", + subframe,tdd_Config->subframeAssignment); + } + + break; + } + } + + return(0); +} + +unsigned char ul_ACK_subframe2dl_subframe(TDD_Config_t *tdd_Config,unsigned char subframe,unsigned char ACK_index) +{ + + if (tdd_Config == NULL) { + return((subframe<4) ? subframe+6 : subframe-4); + } else { + switch (tdd_Config->subframeAssignment) { + case 3: + if (subframe == 2) { // ACK subframes 5 and 6 + if (ACK_index==2) + return(1); + + return(5+ACK_index); + } else if (subframe == 3) { // ACK subframes 7 and 8 + return(7+ACK_index); // To be updated + } else if (subframe == 4) { // ACK subframes 9 and 0 + return((9+ACK_index)%10); + } else { + AssertFatal(1==0,"illegal subframe %d for tdd_config->subframeAssignment %d\n", + subframe,tdd_Config->subframeAssignment); + } + + break; + + case 4: + if (subframe == 2) { // ACK subframes 0, 4 and 5 + //if (ACK_index==2) + // return(1); TBC + if (ACK_index==2) + return(0); + + return(4+ACK_index); + } else if (subframe == 3) { // ACK subframes 6, 7 8 and 9 + return(6+ACK_index); // To be updated + } else { + AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n", + subframe,tdd_Config->subframeAssignment); + } + + break; + + case 1: + if (subframe == 2) { // ACK subframes 5 and 6 + return(5+ACK_index); + } else if (subframe == 3) { // ACK subframe 9 + return(9); // To be updated + } else if (subframe == 7) { // ACK subframes 0 and 1 + return(ACK_index); // To be updated + } else if (subframe == 8) { // ACK subframe 4 + return(4); // To be updated + } else { + AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n", + subframe,tdd_Config->subframeAssignment); + } + + break; + } + } + + return(0); +} void extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, @@ -3198,9 +3524,12 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, int pCCid = UE_list->pCC_id[UE_id]; int spatial_bundling = 0; int tmode[5]; - int i, j; + int i, j, m; uint8_t *pdu; - + sub_frame_t subframe_tx; + int frame_tx; + uint8_t harq_pid; + #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) if (UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated != NULL && UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->pucch_ConfigDedicated != NULL && @@ -3211,21 +3540,66 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, && (format == 1)))) spatial_bundling = 1; #endif - for (i = 0; i < numCC; i++) tmode[i] = get_tmode(mod_idP, i, UE_id); - + if (cc->tdd_Config) { harq_indication_tdd = (nfapi_harq_indication_tdd_rel13_t *) harq_indication; // pdu = &harq_indication_tdd->harq_tb_n[0]; - + num_ack_nak = harq_indication_tdd->number_of_ack_nack; - + switch (harq_indication_tdd->mode) { - case 0: // Format 1a/b - AssertFatal(numCC == 1, - "numCC %d > 1, should not be using Format1a/b\n", - numCC); + case 0: // Format 1a/b bundling + AssertFatal(numCC == 1, "numCC %d > 1, should not be using Format1a/b\n", numCC); + int M = ul_ACK_subframe2M(cc->tdd_Config,subframeP); + for(m=0;mtdd_Config,subframeP,m); + if(frameP==1023&&subframeP>5) + frame_tx=-1; + else + frame_tx = subframeP < 4 ? frameP -1 : frameP; + harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frame_tx,subframe_tx); + RA_t *ra = &RC.mac[mod_idP]->common_channels[CC_idP].ra[0]; + + if(num_ack_nak==1){ + if(harq_indication_tdd->harq_data[0].bundling.value_0==1){ //ack + sched_ctl->round[CC_idP][harq_pid] = 8; // release HARQ process + sched_ctl->tbcnt[CC_idP][harq_pid] = 0; + LOG_D(MAC,"frame %d subframe %d Acking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]); + }else{ //nack + if( sched_ctl->round[CC_idP][harq_pid]<8) sched_ctl->round[CC_idP][harq_pid]++; + if (sched_ctl->round[CC_idP][harq_pid] == 4) { + sched_ctl->round[CC_idP][harq_pid] = 8; // release HARQ process + sched_ctl->tbcnt[CC_idP][harq_pid] = 0; + } + LOG_D(MAC,"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]); + if(sched_ctl->round[CC_idP][harq_pid] == 8){ + for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) { + if((ra[ra_i].rnti == rnti) && (ra[ra_i].state == WAITMSG4ACK)){ + //Msg NACK num to MAC ,remove UE + // add UE info to freeList + LOG_I(RRC, "put UE %x into freeList\n", rnti); + put_UE_in_freelist(mod_idP, rnti, 1); + } + } + } + } + } + for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) { + if ((ra[ra_i].rnti == rnti) && (ra[ra_i].state == MSGCRNTI_ACK) && (ra[ra_i].crnti_harq_pid == harq_pid)) { + LOG_D(MAC,"CRNTI Reconfiguration: ACK %d rnti %x round %d frame %d subframe %d \n",harq_indication_tdd->harq_data[0].bundling.value_0,rnti,sched_ctl->round[CC_idP][harq_pid],frameP,subframeP); + if(num_ack_nak == 1 && harq_indication_tdd->harq_data[0].bundling.value_0 == 1) { + cancel_ra_proc(mod_idP, CC_idP, frameP, ra[ra_i].rnti); + }else{ + if(sched_ctl->round[CC_idP][harq_pid] == 7){ + cancel_ra_proc(mod_idP, CC_idP, frameP, ra[ra_i].rnti); + } + } + break; + } + } + } break; case 1: // Channel Selection break; @@ -3241,7 +3615,7 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, num_ack_nak = harq_indication_fdd->number_of_ack_nack; pdu = &harq_indication_fdd->harq_tb_n[0]; - uint8_t harq_pid = ((10 * frameP) + subframeP + 10236) & 7; + harq_pid = ((10 * frameP) + subframeP + 10236) & 7; LOG_D(MAC,"frame %d subframe %d harq_pid %d mode %d tmode[0] %d num_ack_nak %d round %d\n",frameP,subframeP,harq_pid,harq_indication_fdd->mode,tmode[0],num_ack_nak,sched_ctl->round[CC_idP][harq_pid]); @@ -3265,6 +3639,22 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, LOG_D(MAC, "Received %d for harq_pid %d\n", pdu[0], harq_pid); + RA_t *ra = &RC.mac[mod_idP]->common_channels[CC_idP].ra[0]; + for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) { + if ((ra[ra_i].rnti == rnti) && (ra[ra_i].state == MSGCRNTI_ACK) && + (ra[ra_i].crnti_harq_pid == harq_pid)) { + LOG_D(MAC,"CRNTI Reconfiguration: ACK %d rnti %x round %d frame %d subframe %d \n",pdu[0],rnti,sched_ctl->round[CC_idP][harq_pid],frameP,subframeP); + if(pdu[0] == 1){ + cancel_ra_proc(mod_idP, CC_idP, frameP, ra[ra_i].rnti); + }else{ + if(sched_ctl->round[CC_idP][harq_pid] == 7){ + cancel_ra_proc(mod_idP, CC_idP, frameP, ra[ra_i].rnti); + } + } + break; + } + } + if (pdu[0] == 1) { // ACK sched_ctl->round[CC_idP][harq_pid] = 8; // release HARQ process sched_ctl->tbcnt[CC_idP][harq_pid] = 0; @@ -3274,6 +3664,16 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, sched_ctl->round[CC_idP][harq_pid] = 8; // release HARQ process sched_ctl->tbcnt[CC_idP][harq_pid] = 0; } + if (sched_ctl->round[CC_idP][harq_pid] == 8){ + for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) { + if((ra[ra_i].rnti == rnti) && (ra[ra_i].state == WAITMSG4ACK)){ + //Msg NACK num to MAC ,remove UE + // add UE info to freeList + LOG_I(RRC, "put UE %x into freeList\n", rnti); + put_UE_in_freelist(mod_idP, rnti, 1); + } + } + } } } else { // one or two ACK/NAK bits @@ -4011,6 +4411,10 @@ cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, extract_pusch_csi(mod_idP, CC_idP, UE_id, frameP, subframeP, pdu, rel9->length); + LOG_D(MAC,"Frame %d Subframe %d update CQI:%d\n",frameP,subframeP,sched_ctl->dl_cqi[CC_idP]); + + sched_ctl->cqi_req_flag &= (~(1 << subframeP)); + sched_ctl->cqi_received = 1; } // timing advance @@ -4036,14 +4440,6 @@ SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, "[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d on CC_id %d\n", mod_idP, rntiP, frameP, subframeP, UE_id, cc_idP); -#if 0 - UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - - /* for the moment don't use ul_cqi from SR, value is too different from harq */ - sched_ctl->pucch1_snr[cc_idP] = ul_cqi; - sched_ctl->pucch1_cqi_update[cc_idP] = 1; -#endif - UE_list->UE_template[cc_idP][UE_id].ul_SR = 1; UE_list->UE_template[cc_idP][UE_id].ul_active = TRUE; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME @@ -4089,8 +4485,11 @@ static int nack_or_dtx_reported( int i; if (cc->tdd_Config) { - AssertFatal(0==1, "TDD to be done. FAPI structures (see nfapi_harq_indication_tdd_rel13_t) are not clean. To be cleaned as well?\n"); - abort(); + nfapi_harq_indication_tdd_rel13_t *hi = &harq_pdu->harq_indication_tdd_rel13; + for (i = 0; i < hi->number_of_ack_nack; hi++) + if (hi->harq_data[0].bundling.value_0 != 1) //only bundling is used for tdd for now + return 1; + return 0; } else { nfapi_harq_indication_fdd_rel13_t *hi = &harq_pdu->harq_indication_fdd_rel13; for (i = 0; i < hi->number_of_ack_nack; hi++) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 16f1607289..055d3e3419 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -107,6 +107,7 @@ char *ul_scheduler_type[MAX_NUM_SLICES] = {"schedule_ulsch_rnti", "schedule_ulsch_rnti", "schedule_ulsch_rnti" }; +extern mui_t rrc_eNB_mui; /* Slice Function Pointer */ slice_scheduler_ul slice_sched_ul[MAX_NUM_SLICES] = {0}; @@ -157,8 +158,8 @@ rx_sdu(const module_id_t enb_mod_idP, if (UE_id != -1) { LOG_D(MAC, - "[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n", - enb_mod_idP, harq_pid, CC_idP, + "[eNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n", + enb_mod_idP, harq_pid, CC_idP,frameP,subframeP, UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid], current_rnti, UE_id, ul_cqi); @@ -190,12 +191,16 @@ rx_sdu(const module_id_t enb_mod_idP, if (UE_list->UE_template[CC_idP][UE_id].scheduled_ul_bytes < 0) UE_list->UE_template[CC_idP][UE_id].scheduled_ul_bytes = 0; } else { // we've got an error - LOG_D(MAC, - "[eNB %d][PUSCH %d] CC_id %d ULSCH in error in round %d, ul_cqi %d\n", - enb_mod_idP, harq_pid, CC_idP, + LOG_I(MAC, + "[eNB %d][PUSCH %d] CC_id %d %d.%d ULSCH in error in round %d, ul_cqi %d\n", + enb_mod_idP, harq_pid, CC_idP,frameP,subframeP, UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid], ul_cqi); + if(ul_cqi>200){ // too high energy pattern + UE_list->UE_sched_ctrl[UE_id].pusch_snr[CC_idP] = ul_cqi; + } + // AssertFatal(1==0,"ulsch in error\n"); if (UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] == 3) { UE_list->UE_sched_ctrl[UE_id].ul_scheduled &= (~(1 << harq_pid)); @@ -207,6 +212,9 @@ rx_sdu(const module_id_t enb_mod_idP, UE_list->UE_template[CC_idP][UE_id].scheduled_ul_bytes -= UE_list->UE_template[CC_idP][UE_id].TBS_UL[harq_pid]; if (UE_list->UE_template[CC_idP][UE_id].scheduled_ul_bytes < 0) UE_list->UE_template[CC_idP][UE_id].scheduled_ul_bytes = 0; + + if (find_RA_id(enb_mod_idP, CC_idP, current_rnti) != -1) + cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti); } else UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid]++; @@ -216,7 +224,9 @@ rx_sdu(const module_id_t enb_mod_idP, LOG_D(MAC, "Programming PHICH NACK for rnti %x harq_pid %d (first_rb %d)\n", current_rnti, harq_pid, first_rb); - nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_idP]; + nfapi_hi_dci0_request_t *hi_dci0_req; + uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_idP] , subframeP); + hi_dci0_req = &mac->HI_DCI0_req[CC_idP][(subframeP+sf_ahead_dl)%10]; nfapi_hi_dci0_request_body_t *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci + hi_dci0_req_body->number_of_hi]; @@ -230,7 +240,7 @@ rx_sdu(const module_id_t enb_mod_idP, hi_dci0_req_body->number_of_hi++; hi_dci0_req_body->sfnsf = sfnsf_add_subframe(frameP,subframeP, 0); hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG; - hi_dci0_req->sfn_sf = sfnsf_add_subframe(frameP,subframeP, 4); + hi_dci0_req->sfn_sf = sfnsf_add_subframe(frameP,subframeP, sf_ahead_dl); hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST; return; @@ -260,7 +270,7 @@ rx_sdu(const module_id_t enb_mod_idP, (int) mac->common_channels[CC_idP]. radioResourceConfigCommon->rach_ConfigCommon. maxHARQ_Msg3Tx); - if (ra[RA_id].msg3_round == mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx - 1) { + if (ra[RA_id].msg3_round >= mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx - 1) { cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti); } @@ -268,8 +278,9 @@ rx_sdu(const module_id_t enb_mod_idP, first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid]; ra[RA_id].msg3_round++; // prepare handling of retransmission - ra[RA_id].Msg3_frame = (ra[RA_id].Msg3_frame + ((ra[RA_id].Msg3_subframe > 1) ? 1 : 0)) % 1024; - ra[RA_id].Msg3_subframe = (ra[RA_id].Msg3_subframe + 8) % 10; + get_Msg3allocret(&mac->common_channels[CC_idP], + ra[RA_id].Msg3_subframe, ra[RA_id].Msg3_frame, + &ra[RA_id].Msg3_frame, &ra[RA_id].Msg3_subframe); add_msg3(enb_mod_idP, CC_idP, &ra[RA_id], frameP, subframeP); } @@ -278,13 +289,19 @@ rx_sdu(const module_id_t enb_mod_idP, return; } } else { - LOG_D(MAC, + LOG_W(MAC, "Cannot find UE or RA corresponding to ULSCH rnti %x, dropping it\n", - current_rnti);////////////******** LOG_W into LOG_D + current_rnti); return; } payload_ptr = parse_ulsch_header(sduP, &num_ce, &num_sdu, rx_ces, rx_lcids, rx_lengths, sdu_lenP); + if(payload_ptr == NULL){ + LOG_E(MAC,"[eNB %d][PUSCH %d] CC_id %d ulsch header unknown lcid(rnti %x, UE_id %d)\n", + enb_mod_idP, harq_pid, CC_idP,current_rnti, UE_id); + return; + } + T(T_ENB_MAC_UE_UL_PDU, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(current_rnti), T_INT(frameP), T_INT(subframeP), T_INT(harq_pid), T_INT(sdu_lenP), T_INT(num_ce), T_INT(num_sdu)); @@ -332,8 +349,8 @@ rx_sdu(const module_id_t enb_mod_idP, enb_mod_idP, frameP, subframeP, CC_idP, rx_ces[i], i, num_ce, old_rnti, old_UE_id); /* receiving CRNTI means that the current rnti has to go away */ - cancel_ra_proc(enb_mod_idP, CC_idP, frameP, - current_rnti); + //cancel_ra_proc(enb_mod_idP, CC_idP, frameP, + // current_rnti); if (old_UE_id != -1) { /* TODO: if the UE did random access (followed by a MAC uplink with * CRNTI) because none of its scheduling request was granted, then @@ -346,16 +363,45 @@ rx_sdu(const module_id_t enb_mod_idP, * We have to take care of this. As the code is, nothing is done and * the UE state in the eNB is wrong. */ - UE_id = old_UE_id; - UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer = 0; - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0; - if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync > 0) { - UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync = 0; - mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, - subframeP, old_rnti); - } - current_rnti = old_rnti; - } + for (ii = 0; ii < NB_RA_PROC_MAX; ii++) { + ra = &mac->common_channels[CC_idP].ra[ii]; + if ((ra->rnti == current_rnti) && (ra->state != IDLE)) { + mac_rrc_data_ind(enb_mod_idP, + CC_idP, + frameP, subframeP, + old_rnti, + DCCH, + (uint8_t *) payload_ptr, + rx_lengths[i], + 0); + // prepare transmission of Msg4(RRCConnectionReconfiguration) + ra->state = MSGCRNTI; + LOG_I(MAC, + "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) RRCConnectionReconfiguration(Msg4)\n", + enb_mod_idP, frameP, subframeP, CC_idP, old_rnti, old_UE_id); + + UE_id = old_UE_id; + current_rnti = old_rnti; + ra->rnti = old_rnti; + ra->crnti_rrc_mui = rrc_eNB_mui-1; + ra->crnti_harq_pid = -1; + //clear timer + UE_list->UE_sched_ctrl[UE_id].uplane_inactivity_timer = 0; + UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer = 0; + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0; + if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync > 0) { + UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync = 0; + mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, + subframeP, old_rnti); + } + UE_list->UE_template[CC_idP][UE_id].ul_SR = 1; + UE_list->UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 1; + break; + } + } + } else { + cancel_ra_proc(enb_mod_idP, CC_idP, frameP,current_rnti); + } crnti_rx = 1; payload_ptr += 2; break; @@ -550,8 +596,9 @@ rx_sdu(const module_id_t enb_mod_idP, ra[ii].rach_resource_type #endif )) == -1) { - AssertFatal(1 == 0, - "[MAC][eNB] Max user count reached\n"); + LOG_E(MAC,"[MAC][eNB] Max user count reached\n"); + cancel_ra_proc(enb_mod_idP, CC_idP, frameP,current_rnti); + break; // kill RA procedure } else LOG_D(MAC, @@ -584,10 +631,22 @@ rx_sdu(const module_id_t enb_mod_idP, - // Program Msg4 PDCCH+DLSCH/MPDCCH transmission 4 subframes from now, // Check if this is ok for BL/CE, or if the rule is different - ra->Msg4_frame = frameP + ((subframeP > 5) ? 1 : 0); - ra->Msg4_subframe = (subframeP + 4) % 10; + if(mac->common_channels[CC_idP].tdd_Config!=NULL){ + switch(mac->common_channels[CC_idP].tdd_Config->subframeAssignment){ + case 1: + ra->Msg4_frame = frameP + ((subframeP > 2) ? 1 : 0); + ra->Msg4_subframe = (subframeP + 7) % 10; + break; + default: printf("%s:%d: TODO\n", __FILE__, __LINE__); abort(); + // TODO need to be complete for other tdd configs. + } + }else{ + // Program Msg4 PDCCH+DLSCH/MPDCCH transmission 4 subframes from now, // Check if this is ok for BL/CE, or if the rule is different + ra->Msg4_frame = frameP + ((subframeP > 5) ? 1 : 0); + ra->Msg4_subframe = (subframeP + 4) % 10; + } + UE_list->UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 0; } // if process is active } // loop on RA processes @@ -714,7 +773,10 @@ rx_sdu(const module_id_t enb_mod_idP, LOG_D(MAC, "Programming PHICH ACK for rnti %x harq_pid %d (first_rb %d)\n", current_rnti, harq_pid, first_rb); - nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_idP]; + nfapi_hi_dci0_request_t *hi_dci0_req; + uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_idP] , subframeP); + hi_dci0_req = &mac->HI_DCI0_req[CC_idP][(subframeP+sf_ahead_dl)%10]; + nfapi_hi_dci0_request_body_t *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci + hi_dci0_req_body->number_of_hi]; @@ -728,7 +790,7 @@ rx_sdu(const module_id_t enb_mod_idP, hi_dci0_req_body->number_of_hi++; hi_dci0_req_body->sfnsf = sfnsf_add_subframe(frameP,subframeP, 0); hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG; - hi_dci0_req->sfn_sf = sfnsf_add_subframe(frameP,subframeP, 4); + hi_dci0_req->sfn_sf = sfnsf_add_subframe(frameP,subframeP, sf_ahead_dl); hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST; /* NN--> FK: we could either check the payload, or use a phy helper to detect a false msg3 */ @@ -848,7 +910,8 @@ unsigned char *parse_ulsch_header(unsigned char *mac_header, ce_len++; } else { LOG_E(MAC, "unknown CE %d \n", lcid); - AssertFatal(1 == 0, "unknown CE"); + //AssertFatal(1 == 0, "unknown CE"); + return NULL; } } } @@ -895,6 +958,7 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP, start_meas(&mac->schedule_ulsch); + int sched_frame=frameP; int sched_subframe = (subframeP + 4) % 10; cc = &mac->common_channels[0]; @@ -904,8 +968,10 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP, tdd_sfa = cc->tdd_Config->subframeAssignment; switch (subframeP) { case 0: - if ((tdd_sfa == 0) || (tdd_sfa == 3) || (tdd_sfa == 6)) + if ((tdd_sfa == 0) || (tdd_sfa == 3)) sched_subframe = 4; + else if (tdd_sfa == 6) + sched_subframe = 7; else return; break; @@ -914,6 +980,8 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP, sched_subframe = 7; else if (tdd_sfa == 6) sched_subframe = 8; + else + return; break; default: return; @@ -936,12 +1004,12 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP, if (tdd_sfa == 0) sched_subframe = 9; else if (tdd_sfa == 6) - sched_subframe = 3; + sched_subframe = 2; else return; break; case 6: - if (tdd_sfa == 1) + if (tdd_sfa == 0 || tdd_sfa == 1) sched_subframe = 2; else if (tdd_sfa == 6) sched_subframe = 3; @@ -951,21 +1019,23 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP, case 7: return; case 8: - if ((tdd_sfa >= 2) || (tdd_sfa <= 5)) - sched_subframe = 2; + if ((tdd_sfa >= 2) && (tdd_sfa <= 5)) + sched_subframe = 2; else - return; + return; break; case 9: if ((tdd_sfa == 1) || (tdd_sfa == 3) || (tdd_sfa == 4)) - sched_subframe = 3; + sched_subframe = 3; else if (tdd_sfa == 6) - sched_subframe = 4; + sched_subframe = 4; else - return; + return; break; } } + if (sched_subframe < subframeP) sched_frame++; + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { @@ -1112,8 +1182,7 @@ schedule_ulsch_rnti(module_id_t module_idP, uint8_t status = 0; uint8_t rb_table_index = -1; uint32_t cqi_req, cshift, ndi, tpc; - int32_t normalized_rx_power; - int32_t target_rx_power = -90; + int32_t normalized_rx_power, target_rx_power; static int32_t tpc_accumulated = 0; int n; int CC_id = 0; @@ -1126,19 +1195,21 @@ schedule_ulsch_rnti(module_id_t module_idP, UE_sched_ctrl *UE_sched_ctrl; int sched_frame = frameP; int rvidx_tab[4] = { 0, 2, 3, 1 }; + uint16_t ul_req_index; + uint8_t dlsch_flag; if (sched_subframeP < subframeP) sched_frame++; - nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_id]; + nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_id][subframeP]; nfapi_hi_dci0_request_body_t *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body; nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu; nfapi_ul_config_request_t *ul_req_tmp = &mac->UL_req_tmp[CC_id][sched_subframeP]; nfapi_ul_config_request_body_t *ul_req_tmp_body = &ul_req_tmp->ul_config_request_body; - + nfapi_ul_config_ulsch_harq_information *ulsch_harq_information; //LOG_D(MAC, "entering ulsch preprocesor\n"); - ulsch_scheduler_pre_processor(module_idP, slice_id, frameP, subframeP, first_rb); + ulsch_scheduler_pre_processor(module_idP, slice_id, frameP, subframeP, sched_subframeP, first_rb); //LOG_D(MAC, "exiting ulsch preprocesor\n"); @@ -1261,25 +1332,32 @@ schedule_ulsch_rnti(module_id_t module_idP, // reset the scheduling request UE_template->ul_SR = 0; status = mac_eNB_get_rrc_status(module_idP, rnti); - if (status < RRC_CONNECTED) - cqi_req = 0; - else if (UE_sched_ctrl->cqi_req_timer > 30) { - if (nfapi_mode) { - cqi_req = 0; - } else { - cqi_req = 1; + cqi_req = 0; + + if (status >= RRC_CONNECTED && UE_sched_ctrl->cqi_req_timer > 30) { + if (UE_sched_ctrl->cqi_received == 0) { + if (nfapi_mode) { + cqi_req = 0; + } else { + cqi_req = 1; + UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP; + } } - UE_sched_ctrl->cqi_req_timer = 0; - } else - cqi_req = 0; + else if (UE_sched_ctrl->cqi_received == 1) { + UE_sched_ctrl->cqi_req_flag = 0; + UE_sched_ctrl->cqi_received = 0; + UE_sched_ctrl->cqi_req_timer = 0; + } + } //power control //compute the expected ULSCH RX power (for the stats) // this is the normalized RX power and this should be constant (regardless of mcs - normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id]; - target_rx_power = 178; - + //is not in dBm, unit from nfapi, converting to dBm: ToDo: Noise power hard coded to 30 + normalized_rx_power = (5*UE_sched_ctrl->pusch_snr[CC_id]-640)/10+30; + target_rx_power= mac->puSch10xSnr/10 + 30; + //printf("\n mac->puSch10xSnr = %d, normalized_rx_power = %d, target_rx_power = %d \n",mac->puSch10xSnr,normalized_rx_power,target_rx_power); // this assumes accumulated tpc // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame * 10 + UE_template->pusch_tpc_tx_subframe; @@ -1404,9 +1482,10 @@ schedule_ulsch_rnti(module_id_t module_idP, hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tpc = tpc; hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cqi_csi_request = cqi_req; hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dl_assignment_index = UE_template->DAI_ul[sched_subframeP]; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.harq_pid = harq_pid; hi_dci0_req_body->number_of_dci++; - hi_dci0_req_body->sfnsf = sfnsf_add_subframe(frameP, subframeP, 4); + hi_dci0_req_body->sfnsf = sfnsf_add_subframe(sched_frame, sched_subframeP, 0); //(frameP, subframeP, 4); hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG; hi_dci0_req->sfn_sf = frameP<<4|subframeP; // sfnsf_add_subframe(sched_frame, sched_subframeP, 0); // sunday! @@ -1418,8 +1497,18 @@ schedule_ulsch_rnti(module_id_t module_idP, harq_pid, frameP, subframeP, UE_id, rnti, sched_frame, sched_subframeP); + ul_req_index = 0; + dlsch_flag = 0; + for(ul_req_index = 0;ul_req_index < ul_req_tmp_body->number_of_pdus;ul_req_index++){ + if(ul_req_tmp_body->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){ + dlsch_flag = 1; + LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index); + break; + } + } + // Add UL_config PDUs - fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp_body->ul_config_pdu_list[ul_req_tmp_body->number_of_pdus], cqi_req, cc, UE_template->physicalConfigDedicated, get_tmode(module_idP, CC_id, UE_id), mac->ul_handle, rnti, first_rb[CC_id], // resource_block_start + fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp_body->ul_config_pdu_list[ul_req_index], cqi_req, cc, UE_template->physicalConfigDedicated, get_tmode(module_idP, CC_id, UE_id), mac->ul_handle, rnti, first_rb[CC_id], // resource_block_start rb_table[rb_table_index], // number_of_resource_blocks UE_template->mcs_UL[harq_pid], cshift, // cyclic_shift_2_for_drms 0, // frequency_hopping_enabled_flag @@ -1437,29 +1526,48 @@ schedule_ulsch_rnti(module_id_t module_idP, [rb_table_index])); #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) if (UE_template->rach_resource_type > 0) { // This is a BL/CE UE allocation - fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp_body->ul_config_pdu_list[ul_req_tmp_body->number_of_pdus], UE_template->rach_resource_type > 2 ? 2 : 1, 1, //total_number_of_repetitions + fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp_body->ul_config_pdu_list[ul_req_index], UE_template->rach_resource_type > 2 ? 2 : 1, 1, //total_number_of_repetitions 1, //repetition_number (frameP * 10) + subframeP); } #endif + if(dlsch_flag == 1){ + if(cqi_req == 1){ + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].pdu_type = NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE; + ulsch_harq_information = &ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_cqi_harq_ri_pdu.harq_information; + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.tl.tag=NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG; + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial = 0; // last symbol not punctured + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks = rb_table[rb_table_index]; + + }else{ + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].pdu_type = NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE; + ulsch_harq_information = &ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_harq_pdu.harq_information; + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.tl.tag = NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG; + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial = 0; // last symbol not punctured + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks = rb_table[rb_table_index]; + } + fill_nfapi_ulsch_harq_information(module_idP, CC_id,rnti, ulsch_harq_information,subframeP); + }else{ + ul_req_tmp_body->number_of_pdus++; + } + ul_req_tmp->header.message_id = NFAPI_UL_CONFIG_REQUEST; - ul_req_tmp_body->number_of_pdus++; ul_req_tmp_body->tl.tag = NFAPI_UL_CONFIG_REQUEST_BODY_TAG; mac->ul_handle++; uint16_t ul_sched_frame = sched_frame; uint16_t ul_sched_subframeP = sched_subframeP; - add_subframe(&ul_sched_frame, &ul_sched_subframeP, 2); + //add_subframe(&ul_sched_frame, &ul_sched_subframeP, 2); ul_req_tmp->sfn_sf = ul_sched_frame<<4|ul_sched_subframeP; add_ue_ulsch_info(module_idP, CC_id, UE_id, subframeP, S_UL_SCHEDULED); - //LOG_D(MAC, "[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", module_idP, CC_id, frameP, subframeP, UE_id); + LOG_D(MAC, "[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", module_idP, CC_id, frameP, subframeP, UE_id); LOG_D(MAC,"[PUSCH %d] SFN/SF:%04d%d UL_CFG:SFN/SF:%04d%d CQI:%d for UE %d/%x\n", harq_pid,frameP,subframeP,ul_sched_frame,ul_sched_subframeP,cqi_req,UE_id,rnti); // increment first rb for next UE allocation @@ -1472,40 +1580,21 @@ schedule_ulsch_rnti(module_id_t module_idP, T_INT(first_rb[CC_id]), T_INT(rb_table[rb_table_index]), T_INT(round)); -#if 0 - /* This is done in rx_sdu, as it has to. - * Since the code is a bit different, let's keep this version here for review, in case of problem. - */ - // fill in NAK information - - hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci + hi_dci0_req_body->number_of_hi]; - memset((void *) hi_dci0_pdu, 0, - sizeof(nfapi_hi_dci0_request_pdu_t)); - hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_HI_PDU_TYPE; - hi_dci0_pdu->pdu_size = 2 + sizeof(nfapi_hi_dci0_hi_pdu); - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.tl.tag = NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start = UE_template->first_rb_ul[harq_pid]; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms = UE_template->cshift[harq_pid]; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value = 0; - hi_dci0_req_body->number_of_hi++; - hi_dci0_req_body->sfnsf = sfnsf_add_subframe(sched_frame, sched_subframeP, 0); - hi_dci0_req->sfn_sf = frameP<<4|subframeP; - hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST; - - LOG_D(MAC, - "[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, round %d)\n", - module_idP, harq_pid, rnti, CC_id, frameP, - subframeP, UE_id, UE_template->mcs_UL[harq_pid], - UE_template->first_rb_ul[harq_pid], - UE_template->nb_rb_ul[harq_pid], - UE_template->TBS_UL[harq_pid], round); -#endif // Add UL_config PDUs LOG_D(MAC, "[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n", harq_pid, frameP, subframeP, UE_id, rnti, sched_frame, sched_subframeP); - fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp_body->ul_config_pdu_list[ul_req_tmp_body->number_of_pdus], cqi_req, cc, UE_template->physicalConfigDedicated, get_tmode(module_idP, CC_id, UE_id), mac->ul_handle, rnti, UE_template->first_rb_ul[harq_pid], // resource_block_start + ul_req_index = 0; + dlsch_flag = 0; + for(ul_req_index = 0;ul_req_index < ul_req_tmp_body->number_of_pdus;ul_req_index++){ + if(ul_req_tmp_body->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){ + dlsch_flag = 1; + LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index); + break; + } + } + fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp_body->ul_config_pdu_list[ul_req_index], cqi_req, cc, UE_template->physicalConfigDedicated, get_tmode(module_idP, CC_id, UE_id), mac->ul_handle, rnti, UE_template->first_rb_ul[harq_pid], // resource_block_start UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks UE_template->mcs_UL[harq_pid], cshift, // cyclic_shift_2_for_drms 0, // frequency_hopping_enabled_flag @@ -1520,14 +1609,33 @@ schedule_ulsch_rnti(module_id_t module_idP, TBS_UL[harq_pid]); #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) if (UE_template->rach_resource_type > 0) { // This is a BL/CE UE allocation - fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp_body->ul_config_pdu_list[ul_req_tmp_body->number_of_pdus], UE_template->rach_resource_type > 2 ? 2 : 1, 1, //total_number_of_repetitions + fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp_body->ul_config_pdu_list[ul_req_index], UE_template->rach_resource_type > 2 ? 2 : 1, 1, //total_number_of_repetitions 1, //repetition_number (frameP * 10) + subframeP); } #endif - ul_req_tmp_body->number_of_pdus++; + if(dlsch_flag == 1){ + if(cqi_req == 1){ + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].pdu_type = NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE; + ulsch_harq_information = &ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_cqi_harq_ri_pdu.harq_information; + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.tl.tag=NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG; + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial = 0; // last symbol not punctured + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks = UE_template->nb_rb_ul[harq_pid]; + + }else{ + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].pdu_type = NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE; + ulsch_harq_information = &ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_harq_pdu.harq_information; + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.tl.tag = NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG; + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial = 0; // last symbol not punctured + ul_req_tmp_body->ul_config_pdu_list[ul_req_index].ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks = UE_template->nb_rb_ul[harq_pid]; + } + fill_nfapi_ulsch_harq_information(module_idP, CC_id,rnti, ulsch_harq_information,subframeP); + }else{ + ul_req_tmp_body->number_of_pdus++; + } + mac->ul_handle++; ul_req_tmp_body->tl.tag = NFAPI_UL_CONFIG_REQUEST_BODY_TAG; diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h index fac596f406..d9e914f087 100644 --- a/openair2/LAYER2/MAC/mac.h +++ b/openair2/LAYER2/MAC/mac.h @@ -87,7 +87,7 @@ #define PCCH_PAYLOAD_SIZE_MAX 128 #define RAR_PAYLOAD_SIZE_MAX 128 -#define SCH_PAYLOAD_SIZE_MAX 4096 +#define SCH_PAYLOAD_SIZE_MAX 8192 #define DCH_PAYLOAD_SIZE_MAX 4096 /// Logical channel ids from 36-311 (Note BCCH is not specified in 36-311, uses the same as first DRB) @@ -130,11 +130,7 @@ /*!\brief Maximum number od control elemenets */ #define MAX_NUM_CE 5 /*!\brief Maximum number of random access process */ -#if defined(USRP_REC_PLAY) -#define NB_RA_PROC_MAX 1 -#else #define NB_RA_PROC_MAX 4 -#endif /*!\brief size of buffer status report table */ #define BSR_TABLE_SIZE 64 /*!\brief The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 */ @@ -328,7 +324,6 @@ typedef struct { uint8_t Buffer_size0:6; } __attribute__ ((__packed__)) BSR_LONG; -// Panos: /*!\brief mac control element: sidelink buffer status report */ typedef struct { uint8_t DST_1:4; @@ -511,7 +506,9 @@ typedef enum { MSG2, WAITMSG3, MSG4, - WAITMSG4ACK + WAITMSG4ACK, + MSGCRNTI, + MSGCRNTI_ACK } RA_state; /*!\brief UE ULSCH scheduling states*/ @@ -541,6 +538,12 @@ typedef enum { CBA_RS /// random allocation } CBA_POLICY; +/*!\brief scheduler mode */ +typedef enum { + SCHED_MODE_DEFAULT = 0, /// default cheduler + SCHED_MODE_FAIR_RR /// fair raund robin +} SCHEDULER_MODES; + /*! \brief temporary struct for ULSCH sched */ typedef struct { @@ -948,7 +951,10 @@ typedef struct { int16_t ta_update; uint16_t ul_consecutive_errors; int32_t context_active_timer; + /// timer for regular CQI request on PUSCH int32_t cqi_req_timer; + /// indicator that CQI was received on PUSCH when requested + int32_t cqi_received; int32_t ul_inactivity_timer; int32_t ul_failure_timer; uint32_t ue_reestablishment_reject_timer; @@ -984,7 +990,9 @@ typedef struct { uint8_t aperiodic_wideband_cqi1[NFAPI_CC_MAX]; uint8_t aperiodic_wideband_pmi1[NFAPI_CC_MAX]; uint8_t dl_cqi[NFAPI_CC_MAX]; - int32_t uplane_inactivity_timer; + int32_t uplane_inactivity_timer; + uint8_t crnti_reconfigurationcomplete_flag; + uint8_t cqi_req_flag; } UE_sched_ctrl; /*! \brief eNB template for the Random access information */ typedef struct { @@ -1043,6 +1051,8 @@ typedef struct { uint8_t msg2_narrowband; uint8_t msg34_narrowband; #endif + int32_t crnti_rrc_mui; + int8_t crnti_harq_pid; } RA_t; @@ -1092,6 +1102,22 @@ typedef struct { } UE_list_t; +/*! \brief deleting control information*/ +typedef struct { + ///rnti of UE + rnti_t rnti; + ///remove UE context flag + boolean_t removeContextFlg; +} UE_free_ctrl; +/*! \brief REMOVE UE list used by eNB to order UEs/CC for deleting*/ +typedef struct { + /// deleting control info + UE_free_ctrl UE_free_ctrl[NUMBER_OF_UE_MAX+1]; + int num_UEs; + int head_freelist; ///the head position of the delete list + int tail_freelist; ///the tail position of the delete list +} UE_free_list_t; + /*! \brief eNB common channels */ typedef struct { int physCellId; @@ -1180,7 +1206,7 @@ typedef struct eNB_MAC_INST_s { /// Common cell resources COMMON_channels_t common_channels[NFAPI_CC_MAX]; /// current PDU index (BCH,MCH,DLSCH) - uint16_t pdu_index[NFAPI_CC_MAX]; + int16_t pdu_index[NFAPI_CC_MAX]; /// NFAPI Config Request Structure nfapi_config_request_t config[NFAPI_CC_MAX]; @@ -1201,9 +1227,9 @@ typedef struct eNB_MAC_INST_s { nfapi_ul_config_request_t UL_req_tmp[NFAPI_CC_MAX][10]; /// Preallocated HI_DCI0 pdu list nfapi_hi_dci0_request_pdu_t - hi_dci0_pdu_list[NFAPI_CC_MAX][MAX_NUM_HI_DCI0_PDU]; + hi_dci0_pdu_list[NFAPI_CC_MAX][10][MAX_NUM_HI_DCI0_PDU]; /// NFAPI HI/DCI0 Config Request Structure - nfapi_hi_dci0_request_t HI_DCI0_req[NFAPI_CC_MAX]; + nfapi_hi_dci0_request_t HI_DCI0_req[NFAPI_CC_MAX][10]; /// Prealocated TX pdu list nfapi_tx_request_pdu_t tx_request_pdu[NFAPI_CC_MAX][MAX_NUM_TX_REQUEST_PDU]; @@ -1242,6 +1268,13 @@ typedef struct eNB_MAC_INST_s { time_stats_t rx_ulsch_sdu; // include rlc_data_ind /// processing time of eNB PCH scheduler time_stats_t schedule_pch; + + UE_free_list_t UE_free_list; + /// for scheduling selection + SCHEDULER_MODES scheduler_mode; + + int32_t puSch10xSnr; + int32_t puCch10xSnr; } eNB_MAC_INST; /* @@ -1400,12 +1433,12 @@ typedef struct { RAR_PDU RAR_pdu; /// Incoming DLSCH pdu for PHY DLSCH_PDU DLSCH_pdu[MAX_MOBILES_PER_ENB][2]; -#ifdef Rel14 - int sltx_active; - SLSCH_t slsch; - SLDCH_t sldch; - ULSCH_PDU slsch_pdu; - int slsch_lcid; +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) + int sltx_active; + SLSCH_t slsch; + SLDCH_t sldch; + ULSCH_PDU slsch_pdu; + int slsch_lcid; #endif /// number of attempt for rach uint8_t RA_attempt_number; @@ -1491,13 +1524,13 @@ typedef struct { time_stats_t rx_si; /// UE PCCH rx processing time including RLC interface (mac_rrc_data_ind) time_stats_t rx_p; - /// Panos: Mutex for nfapi UL_INFO + /// Mutex for nfapi UL_INFO pthread_mutex_t UL_INFO_mutex; - /// Panos: UE_Mode variable should be used in the case of Phy_stub operation since we won't have access to PHY_VARS_UE + /// UE_Mode variable should be used in the case of Phy_stub operation since we won't have access to PHY_VARS_UE /// where the UE_mode originally is for the full stack operation mode. The transitions between the states of the UE_Mode /// will be triggered within phy_stub_ue.c in this case UE_MODE_t UE_mode[NUMBER_OF_CONNECTED_eNB_MAX]; - /// Panos: Phy_stub mode: Boolean variable to distinguish whether a Msg3 or a regular ULSCH data pdu should be generated + /// Phy_stub mode: Boolean variable to distinguish whether a Msg3 or a regular ULSCH data pdu should be generated /// after the reception of NFAPI_UL_CONFIG_ULSCH_PDU_TYPE. uint8_t first_ULSCH_Tx; uint8_t SI_Decoded; @@ -1513,6 +1546,23 @@ typedef struct { uint8_t n_adj_cells; } neigh_cell_id_t; +typedef struct { + volatile uint8_t flag; + rnti_t rnti; + mui_t rrc_eNB_mui; +}RRC_release_ctrl; + +typedef struct { + uint16_t num_UEs; + RRC_release_ctrl RRC_release_ctrl[NUMBER_OF_UE_MAX]; +} RRC_release_list_t; + +typedef struct { + uint8_t rrc_mui_num; + mui_t rrc_mui[128]; +}mac_rlc_am_muilist_t; + #include "mac_proto.h" + /*@}*/ #endif /*__LAYER2_MAC_DEFS_H__ */ diff --git a/openair2/LAYER2/MAC/mac_extern.h b/openair2/LAYER2/MAC/mac_extern.h index 4ac7cf4d58..ca72882471 100644 --- a/openair2/LAYER2/MAC/mac_extern.h +++ b/openair2/LAYER2/MAC/mac_extern.h @@ -76,4 +76,14 @@ extern uint32_t RRC_CONNECTION_FLAG; extern uint8_t rb_table[34]; +#if defined(PRE_SCD_THREAD) +extern uint16_t pre_nb_rbs_required[2][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; +extern uint8_t dlsch_ue_select_tbl_in_use; +extern uint8_t new_dlsch_ue_select_tbl_in_use; +extern boolean_t pre_scd_activeUE[NUMBER_OF_UE_MAX]; +extern eNB_UE_STATS pre_scd_eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; +#endif + +extern mac_rlc_am_muilist_t rlc_am_mui; +extern SCHEDULER_MODES global_scheduler_mode; #endif //DEF_H diff --git a/openair2/LAYER2/MAC/mac_proto.h b/openair2/LAYER2/MAC/mac_proto.h index d648f9def7..aba8c26d92 100644 --- a/openair2/LAYER2/MAC/mac_proto.h +++ b/openair2/LAYER2/MAC/mac_proto.h @@ -135,8 +135,7 @@ void schedule_ulsch_rnti(module_id_t module_idP, slice_id_t slice_idP, frame_t f @param subframe Index of subframe @param mbsfn_flag Indicates that this subframe is for MCH/MCCH */ -void fill_DLSCH_dci(module_id_t module_idP, frame_t frameP, - sub_frame_t subframe, int *mbsfn_flag); +void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,int *mbsfn_flag); /** \brief UE specific DLSCH scheduling. Retrieves next ue to be schduled from round-robin scheduler and gets the appropriate harq_pid for the subframe from PHY. If the process is active and requires a retransmission, it schedules the retransmission with the same PRB count and MCS as the first transmission. Otherwise it consults RLC for DCCH/DTCH SDUs (status with maximum number of available PRBS), builds the MAC header (timing advance sent by default) and copies @param Mod_id Instance ID of eNB @@ -314,6 +313,9 @@ void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, @param Msg3_frame frame where scheduling takes place @param Msg3_subframe subframe where scheduling takes place */ + +void clear_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP); + void set_msg3_subframe(module_id_t Mod_id, int CC_id, int frame, @@ -427,7 +429,7 @@ int get_nCCE_offset(int *CCE_table, const unsigned short rnti, const unsigned char subframe); -int allocate_CCEs(int module_idP, int CC_idP, int subframe, int test_only); +int allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP, int test_only); boolean_t CCE_allocation_infeasible(int module_idP, int CC_idP, @@ -439,6 +441,7 @@ void set_ue_dai(sub_frame_t subframeP, int UE_id, uint8_t CC_id, uint8_t tdd_config, UE_list_t * UE_list); +uint8_t frame_subframe2_dl_harq_pid(TDD_Config_t *tdd_Config, int abs_frameP, sub_frame_t subframeP); /** \brief First stage of PCH Scheduling. Gets a PCH SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs). @param Mod_id Instance ID of eNB @param frame Frame index @@ -543,7 +546,7 @@ void ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, @param[out] sync_area return the sync area @param[out] mcch_active flag indicating whether this MCCH is active in this SF */ -int ue_query_mch(uint8_t Mod_id, uint8_t CC_id, uint32_t frame, +int ue_query_mch(module_id_t Mod_id, uint8_t CC_id, uint32_t frame, sub_frame_t subframe, uint8_t eNB_index, uint8_t * sync_area, uint8_t * mcch_active); @@ -673,6 +676,8 @@ int add_new_ue(module_id_t Mod_id, int CC_id, rnti_t rnti, int harq_pid ); int rrc_mac_remove_ue(module_id_t Mod_id, rnti_t rntiP); +void store_dlsch_buffer(module_id_t Mod_id, slice_id_t slice_id, frame_t frameP, sub_frame_t subframeP); +void assign_rbs_required(module_id_t Mod_id, slice_id_t slice_id, frame_t frameP, sub_frame_t subframe, uint16_t nb_rbs_required[NFAPI_CC_MAX][MAX_MOBILES_PER_ENB], int min_rb_unit[NFAPI_CC_MAX]); int maxround(module_id_t Mod_id, uint16_t rnti, int frame, sub_frame_t subframe, uint8_t ul_flag); @@ -683,9 +688,17 @@ int UE_num_active_CC(UE_list_t * listP, int ue_idP); int UE_PCCID(module_id_t mod_idP, int ue_idP); rnti_t UE_RNTI(module_id_t mod_idP, int ue_idP); +uint8_t find_rb_table_index(uint8_t average_rbs); + +void set_ul_DAI(int module_idP, + int UE_idP, + int CC_idP, + int frameP, + int subframeP); void ulsch_scheduler_pre_processor(module_id_t module_idP, slice_id_t slice_id, int frameP, sub_frame_t subframeP, + unsigned char sched_subframeP, uint16_t * first_rb); void store_ulsch_buffer(module_id_t module_idP, int frameP, sub_frame_t subframeP); @@ -694,6 +707,7 @@ void assign_max_mcs_min_rb(module_id_t module_idP, int slice_id, int frameP, sub_frame_t subframeP, uint16_t * first_rb); void adjust_bsr_info(int buffer_occupancy, uint16_t TBS, UE_TEMPLATE * UE_template); + int phy_stats_exist(module_id_t Mod_id, int rnti); void sort_UEs(module_id_t Mod_idP, slice_id_t slice_id, int frameP, sub_frame_t subframeP); @@ -860,7 +874,7 @@ uint32_t allocate_prbs_sub(int nb_rb, int N_RB_DL, int N_RBG, uint8_t * rballoc); void update_ul_dci(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, - uint8_t dai); + uint8_t dai, sub_frame_t subframe); int get_bw_index(module_id_t module_id, uint8_t CC_id); @@ -1018,10 +1032,10 @@ int rrc_mac_config_req_ue(module_id_t module_idP, , uint8_t num_active_cba_groups, uint16_t cba_rnti #endif -#if defined(Rel14) - ,config_action_t config_action - ,const uint32_t * const sourceL2Id - ,const uint32_t * const destinationL2Id +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) + ,config_action_t config_action + ,const uint32_t * const sourceL2Id + ,const uint32_t * const destinationL2Id #endif ); @@ -1046,6 +1060,12 @@ uint16_t mac_computeRIV(uint16_t N_RB_DL, uint16_t RBstart, int get_phich_resource_times6(COMMON_channels_t * cc); +uint8_t frame_subframe2_dl_harq_pid(TDD_Config_t *tdd_Config, int abs_frameP, sub_frame_t subframeP); + +uint8_t ul_subframe2_k_phich(COMMON_channels_t * cc, sub_frame_t ul_subframe); + +unsigned char ul_ACK_subframe2M(TDD_Config_t *tdd_Config,unsigned char subframe); + int to_rbg(int dl_Bandwidth); int to_prb(int dl_Bandwidth); @@ -1091,7 +1111,7 @@ void extract_pusch_csi(module_id_t mod_idP, int CC_idP, int UE_id, uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t * tx_req_body, uint16_t absSF, uint16_t pdu_length, - uint16_t pdu_index, uint8_t * pdu); + int16_t pdu_index, uint8_t * pdu); void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t * ul_config_pdu, uint8_t cqi_req, @@ -1131,7 +1151,7 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP, int UE_idP, void fill_nfapi_dlsch_config(eNB_MAC_INST * eNB, nfapi_dl_config_request_body_t * dl_req, - uint16_t length, uint16_t pdu_index, + uint16_t length, int16_t pdu_index, uint16_t rnti, uint8_t resource_allocation_type, uint8_t @@ -1165,7 +1185,8 @@ void fill_nfapi_ulsch_harq_information(module_id_t module_idP, int CC_idP, uint16_t rntiP, nfapi_ul_config_ulsch_harq_information - * harq_information); + * harq_information, + sub_frame_t subframeP); uint16_t fill_nfapi_uci_acknak(module_id_t module_idP, int CC_idP, @@ -1214,11 +1235,20 @@ uint32_t from_earfcn(int eutra_bandP, uint32_t dl_earfcn); int32_t get_uldl_offset(int eutra_bandP); int l2_init_ue(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active); +#if defined(PRE_SCD_THREAD) +void pre_scd_nb_rbs_required( module_id_t module_idP, + frame_t frameP, + sub_frame_t subframeP, + int min_rb_unit[MAX_NUM_CCs], + uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX]); +#endif /*Slice related functions */ uint16_t flexran_nb_rbs_allowed_slice(float rb_percentage, int total_rbs); int ue_slice_membership(int UE_id, int slice_id); +/* from here: prototypes to get rid of compilation warnings: doc to be written by function author */ +uint8_t ul_subframe2_k_phich(COMMON_channels_t * cc, sub_frame_t ul_subframe); #endif /** @}*/ diff --git a/openair2/LAYER2/MAC/mac_vars.h b/openair2/LAYER2/MAC/mac_vars.h index 5b00387de6..76842afd38 100644 --- a/openair2/LAYER2/MAC/mac_vars.h +++ b/openair2/LAYER2/MAC/mac_vars.h @@ -142,4 +142,6 @@ DCI2_5MHz_2A_TDD_t DLSCH_alloc_pdu2; DCI1E_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu1E; +mac_rlc_am_muilist_t rlc_am_mui; +SCHEDULER_MODES global_scheduler_mode; #endif diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index 062ead2a20..30ee279c94 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -58,23 +58,28 @@ void mac_top_init_eNB(void) RC.nb_macrlc_inst); if (RC.nb_macrlc_inst > 0) { - RC.mac = - (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst * - sizeof(eNB_MAC_INST *)); + if (RC.mac == NULL){ + RC.mac = + (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst * + sizeof(eNB_MAC_INST *)); + bzero(RC.mac, RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *)); + } AssertFatal(RC.mac != NULL, "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); for (i = 0; i < RC.nb_macrlc_inst; i++) { - RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST)); - AssertFatal(RC.mac != NULL, - "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", - RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), - RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); - LOG_D(MAC, - "[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n", - sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac); - bzero(RC.mac[i], sizeof(eNB_MAC_INST)); + if (RC.mac[i] == NULL) { + RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST)); + AssertFatal(RC.mac[i] != NULL, + "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", + RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), + RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); + LOG_D(MAC, + "[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n", + sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac); + bzero(RC.mac[i], sizeof(eNB_MAC_INST)); + } RC.mac[i]->Mod_id = i; for (j = 0; j < MAX_NUM_CCs; j++) { RC.mac[i]->DL_req[j].dl_config_request_body. @@ -85,9 +90,10 @@ void mac_top_init_eNB(void) RC.mac[i]->UL_req_tmp[j][k]. ul_config_request_body.ul_config_pdu_list = RC.mac[i]->ul_config_pdu_list_tmp[j][k]; - RC.mac[i]->HI_DCI0_req[j]. - hi_dci0_request_body.hi_dci0_pdu_list = - RC.mac[i]->hi_dci0_pdu_list[j]; + for(int sf=0;sf<10;sf++){ + RC.mac[i]->HI_DCI0_req[j][sf].hi_dci0_request_body.hi_dci0_pdu_list =RC.mac[i]->hi_dci0_pdu_list[j][sf]; + } + RC.mac[i]->TX_req[j].tx_request_body.tx_pdu_list = RC.mac[i]->tx_request_pdu[j]; RC.mac[i]->ul_handle = 0; diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c index e9b3befc1c..c9fef11fc2 100644 --- a/openair2/LAYER2/MAC/pre_processor.c +++ b/openair2/LAYER2/MAC/pre_processor.c @@ -129,12 +129,12 @@ store_dlsch_buffer(module_id_t Mod_id, slice_id_t slice_id, frame_t frameP, rnti = UE_RNTI(Mod_id, UE_id); - for (i = 0; i < MAX_NUM_LCID; i++) { // loop over all the logical channels + for (i = 0; i < MAX_NUM_LCID; i++) { // loop over all the logical channels rlc_status = mac_rlc_status_ind(Mod_id, rnti, Mod_id, frameP, subframeP, ENB_FLAG_YES, MBMS_FLAG_NO, i, 0 -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -318,10 +318,8 @@ maxround(module_id_t Mod_id, uint16_t rnti, int frame, cc = &RC.mac[Mod_id]->common_channels[CC_id]; UE_id = find_UE_id(Mod_id, rnti); - if (cc->tdd_Config) - harq_pid = ((frame * 10) + subframe) % 10; - else - harq_pid = ((frame * 10) + subframe) & 7; + + harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frame ,subframe); round = UE_list->UE_sched_ctrl[UE_id].round[CC_id][harq_pid]; if (round > round_max) { @@ -432,36 +430,6 @@ static int ue_dl_compare(const void *_a, const void *_b, void *_params) } return 0; -#if 0 - /* The above order derives from the following. */ - if (round2 > round1) { // Check first if one of the UEs has an active HARQ process which needs service and swap order - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } else if (round2 == round1) { - // RK->NN : I guess this is for fairness in the scheduling. This doesn't make sense unless all UEs have the same configuration of logical channels. This should be done on the sum of all information that has to be sent. And still it wouldn't ensure fairness. It should be based on throughput seen by each UE or maybe using the head_sdu_creation_time, i.e. swap UEs if one is waiting longer for service. - // for(j=0;jUE_template[pCC_id1][UE_id1].dl_buffer_info[1] + - UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[2]) < - (UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[1] + - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[2])) { - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } else if (UE_list->UE_template[pCC_id1] - [UE_id1].dl_buffer_head_sdu_creation_time_max < - UE_list->UE_template[pCC_id2] - [UE_id2].dl_buffer_head_sdu_creation_time_max) { - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } else if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_total < - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_total) { - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } else if (cqi1 < cqi2) { - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } - } -#endif } void decode_sorting_policy(module_id_t Mod_idP, slice_id_t slice_id) { @@ -501,8 +469,6 @@ void sort_UEs(module_id_t Mod_idP, slice_id_t slice_id, int frameP, sub_frame_t continue; if ((rnti = UE_RNTI(Mod_idP, i)) == NOT_A_RNTI) continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; if (!ue_slice_membership(i, slice_id)) continue; @@ -522,78 +488,6 @@ void sort_UEs(module_id_t Mod_idP, slice_id_t slice_id, int frameP, sub_frame_t } else { UE_list->head = -1; } - -#if 0 - - - int UE_id1, UE_id2; - int pCC_id1, pCC_id2; - int cqi1, cqi2, round1, round2; - int i = 0, ii = 0; //,j=0; - rnti_t rnti1, rnti2; - - UE_list_t *UE_list = &RC.mac[Mod_idP]->UE_list; - - for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { - - for (ii = UE_list->next[i]; ii >= 0; ii = UE_list->next[ii]) { - - UE_id1 = i; - rnti1 = UE_RNTI(Mod_idP, UE_id1); - if (rnti1 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[UE_id1].ul_out_of_sync == 1) - continue; - pCC_id1 = UE_PCCID(Mod_idP, UE_id1); - cqi1 = maxcqi(Mod_idP, UE_id1); // - round1 = maxround(Mod_idP, rnti1, frameP, subframeP, 0); - - UE_id2 = ii; - rnti2 = UE_RNTI(Mod_idP, UE_id2); - if (rnti2 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[UE_id2].ul_out_of_sync == 1) - continue; - cqi2 = maxcqi(Mod_idP, UE_id2); - round2 = maxround(Mod_idP, rnti2, frameP, subframeP, 0); //mac_xface->get_ue_active_harq_pid(Mod_id,rnti2,subframe,&harq_pid2,&round2,0); - pCC_id2 = UE_PCCID(Mod_idP, UE_id2); - - if (round2 > round1) { // Check first if one of the UEs has an active HARQ process which needs service and swap order - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } else if (round2 == round1) { - // RK->NN : I guess this is for fairness in the scheduling. This doesn't make sense unless all UEs have the same configuration of logical channels. This should be done on the sum of all information that has to be sent. And still it wouldn't ensure fairness. It should be based on throughput seen by each UE or maybe using the head_sdu_creation_time, i.e. swap UEs if one is waiting longer for service. - // for(j=0;jUE_template[pCC_id1][UE_id1]. - dl_buffer_info[1] + - UE_list->UE_template[pCC_id1][UE_id1]. - dl_buffer_info[2]) < - (UE_list->UE_template[pCC_id2][UE_id2]. - dl_buffer_info[1] + - UE_list->UE_template[pCC_id2][UE_id2]. - dl_buffer_info[2])) { - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } else if (UE_list->UE_template[pCC_id1] - [UE_id1].dl_buffer_head_sdu_creation_time_max < - UE_list->UE_template[pCC_id2] - [UE_id2].dl_buffer_head_sdu_creation_time_max) { - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } else if (UE_list->UE_template[pCC_id1][UE_id1]. - dl_buffer_total < - UE_list->UE_template[pCC_id2][UE_id2]. - dl_buffer_total) { - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } else if (cqi1 < cqi2) { - swap_UEs(UE_list, UE_id1, UE_id2, 0); - } - } - } - } -#endif } void dlsch_scheduler_pre_processor_accounting(module_id_t Mod_id, @@ -638,8 +532,6 @@ void dlsch_scheduler_pre_processor_accounting(module_id_t Mod_id, if (rnti == NOT_A_RNTI) continue; - if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 1) - continue; if (!ue_slice_membership(UE_id, slice_id)) continue; @@ -719,8 +611,6 @@ void dlsch_scheduler_pre_processor_accounting(module_id_t Mod_id, if (rnti == NOT_A_RNTI) continue; - if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 1) - continue; if (!ue_slice_membership(UE_id, slice_id)) continue; @@ -728,11 +618,7 @@ void dlsch_scheduler_pre_processor_accounting(module_id_t Mod_id, CC_id = UE_list->ordered_CCids[ii][UE_id]; ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; cc = &RC.mac[Mod_id]->common_channels[CC_id]; - // TODO Can we use subframe2harqpid() here? - if (cc->tdd_Config) - harq_pid = ((frameP * 10) + subframeP) % 10; - else - harq_pid = ((frameP * 10) + subframeP) & 7; + harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frameP ,subframeP); round = ue_sched_ctl->round[CC_id][harq_pid]; // control channel or retransmission @@ -797,8 +683,6 @@ void dlsch_scheduler_pre_processor_accounting(module_id_t Mod_id, // LOG_D(MAC,"UE %d rnti 0x\n", UE_id, rnti ); if (rnti == NOT_A_RNTI) continue; - if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 1) - continue; if (!ue_slice_membership(UE_id, slice_id)) continue; @@ -1401,11 +1285,12 @@ dlsch_scheduler_pre_processor_allocate(module_id_t Mod_id, /// ULSCH PRE_PROCESSOR - -void -ulsch_scheduler_pre_processor(module_id_t module_idP, - slice_id_t slice_id, int frameP, - sub_frame_t subframeP, uint16_t * first_rb) +void ulsch_scheduler_pre_processor(module_id_t module_idP, + slice_id_t slice_id, + int frameP, + sub_frame_t subframeP, + unsigned char sched_subframeP, + uint16_t *first_rb) { int16_t i; @@ -1530,7 +1415,7 @@ ulsch_scheduler_pre_processor(module_id_t module_idP, CC_id = UE_list->ordered_ULCCids[n][UE_id]; UE_template = &UE_list->UE_template[CC_id][UE_id]; harq_pid = subframe2harqpid(&RC.mac[module_idP]->common_channels[CC_id], - frameP, subframeP); + frameP, sched_subframeP); // mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&harq_pid,&round,openair_harq_UL); @@ -1601,23 +1486,8 @@ ulsch_scheduler_pre_processor(module_id_t module_idP, } } } - -#if 0 - /* this logging is wrong, ue_sched_ctl may not be valid here - * TODO: fix - */ - for (CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++) { - - if (total_allocated_rbs[CC_id] > 0) { - LOG_D(MAC, "[eNB %d] total RB allocated for all UEs = %d/%d\n", - module_idP, total_allocated_rbs[CC_id], - ue_sched_ctl->max_rbs_allowed_slice_uplink[CC_id][slice_id] - first_rb[CC_id]); - } - } -#endif } - void assign_max_mcs_min_rb(module_id_t module_idP, int slice_id, int frameP, sub_frame_t subframeP, uint16_t * first_rb) @@ -1801,31 +1671,6 @@ static int ue_ul_compare(const void *_a, const void *_b, void *_params) return 1; return 0; - -#if 0 - /* The above order derives from the following. - * The last case is not handled: "if (UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer > 0 )" - * I don't think it makes a big difference. - */ - if (round2 > round1) { - swap_UEs(UE_list, UE_id1, UE_id2, 1); - } else if (round2 == round1) { - if (UE_list->UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] < - UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0]) { - swap_UEs(UE_list, UE_id1, UE_id2, 1); - } else if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer < - UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer) { - swap_UEs(UE_list, UE_id1, UE_id2, 1); - } else if (UE_list->UE_template[pCCid1][UE_id1]. - pre_assigned_mcs_ul < - UE_list->UE_template[pCCid2][UE_id2]. - pre_assigned_mcs_ul) { - if (UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer > 0) { - swap_UEs(UE_list, UE_id1, UE_id2, 1); - } - } - } -#endif } void sort_ue_ul(module_id_t module_idP, int frameP, sub_frame_t subframeP) @@ -1860,71 +1705,4 @@ void sort_ue_ul(module_id_t module_idP, int frameP, sub_frame_t subframeP) } else { UE_list->head_ul = -1; } - -#if 0 - int UE_id1, UE_id2; - int pCCid1, pCCid2; - int round1, round2; - int i = 0, ii = 0; - rnti_t rnti1, rnti2; - - UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; - - for (i = UE_list->head_ul; i >= 0; i = UE_list->next_ul[i]) { - - //LOG_I(MAC,"sort ue ul i %d\n",i); - for (ii = UE_list->next_ul[i]; ii >= 0; ii = UE_list->next_ul[ii]) { - //LOG_I(MAC,"sort ul ue 2 ii %d\n",ii); - - UE_id1 = i; - rnti1 = UE_RNTI(module_idP, UE_id1); - - if (rnti1 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; - - - pCCid1 = UE_PCCID(module_idP, UE_id1); - round1 = maxround(module_idP, rnti1, frameP, subframeP, 1); - - UE_id2 = ii; - rnti2 = UE_RNTI(module_idP, UE_id2); - - if (rnti2 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[UE_id2].ul_out_of_sync == 1) - continue; - - pCCid2 = UE_PCCID(module_idP, UE_id2); - round2 = maxround(module_idP, rnti2, frameP, subframeP, 1); - - if (round2 > round1) { - swap_UEs(UE_list, UE_id1, UE_id2, 1); - } else if (round2 == round1) { - if (UE_list-> - UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] < - UE_list->UE_template[pCCid2][UE_id2]. - ul_buffer_info[LCGID0]) { - swap_UEs(UE_list, UE_id1, UE_id2, 1); - } else if (UE_list->UE_template[pCCid1][UE_id1]. - ul_total_buffer < - UE_list->UE_template[pCCid2][UE_id2]. - ul_total_buffer) { - swap_UEs(UE_list, UE_id1, UE_id2, 1); - } else if (UE_list-> - UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul - < - UE_list-> - UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul) - { - if (UE_list->UE_template[pCCid2][UE_id2]. - ul_total_buffer > 0) { - swap_UEs(UE_list, UE_id1, UE_id2, 1); - } - } - } - } - } -#endif } diff --git a/openair2/LAYER2/MAC/proto_NB_IoT.h b/openair2/LAYER2/MAC/proto_NB_IoT.h index 6e6d98eba1..913e3ebcce 100644 --- a/openair2/LAYER2/MAC/proto_NB_IoT.h +++ b/openair2/LAYER2/MAC/proto_NB_IoT.h @@ -33,7 +33,7 @@ #include "openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h" #include "LAYER2/MAC/defs_NB_IoT.h" #include "COMMON/platform_types.h" -#include "openair2/RRC/LITE/defs_NB_IoT.h" +#include "openair2/RRC/LTE/defs_NB_IoT.h" /** \addtogroup _mac * @{ */ diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c index 5a66645e3d..c6dc605a27 100644 --- a/openair2/LAYER2/MAC/ra_procedures.c +++ b/openair2/LAYER2/MAC/ra_procedures.c @@ -299,8 +299,8 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP, int CC_id, uint8_t Size = 0; UE_MODE_t UE_mode; - // Panos: Modification for phy_stub_ue operation - if(nfapi_mode == 3) { // Panos: phy_stub_ue mode + // Modification for phy_stub_ue operation + if(nfapi_mode == 3) { // phy_stub_ue mode UE_mode = UE_mac_inst[module_idP].UE_mode[0]; LOG_D(MAC, "ue_get_rach , UE_mode: %d", UE_mode); } @@ -410,7 +410,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP, int CC_id, UE_mac_inst[module_idP].crnti, eNB_indexP, frameP, subframeP, ENB_FLAG_NO, MBMS_FLAG_NO, DCCH, 6 -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -431,7 +431,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP, int CC_id, sdu_lengths[0] = mac_rlc_data_req(module_idP, UE_mac_inst[module_idP].crnti, eNB_indexP, frameP, ENB_FLAG_NO, MBMS_FLAG_NO, DCCH, 6, //not used (char *) &ulsch_buff[0] -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c index d97ab6580e..9e5824fdd3 100644 --- a/openair2/LAYER2/MAC/rar_tools.c +++ b/openair2/LAYER2/MAC/rar_tools.c @@ -71,7 +71,16 @@ fill_rar(const module_id_t module_idP, ra->timing_offset /= 16; //T_A = N_TA/16, where N_TA should be on a 30.72Msps rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4)); // 7 MSBs of timing advance + divide by 4 rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4 - ra->msg3_first_rb = 6; + COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id]; + if(N_RB_UL == 25){ + ra->msg3_first_rb = 1; + }else{ + if (cc->tdd_Config && N_RB_UL == 100) { + ra->msg3_first_rb = 3; + } else { + ra->msg3_first_rb = 2; + } + } ra->msg3_nb_rb = 1; uint16_t rballoc = mac_computeRIV(N_RB_UL, ra->msg3_first_rb, ra->msg3_nb_rb); // first PRB only for UL Grant rar[1] |= (rballoc >> 7) & 7; // Hopping = 0 (bit 3), 3 MSBs of rballoc @@ -80,6 +89,7 @@ fill_rar(const module_id_t module_idP, ra->msg3_TPC = 3; ra->msg3_ULdelay = 0; ra->msg3_cqireq = 0; + ra->msg3_round = 0; rar[2] |= ((ra->msg3_mcs & 0x8) >> 3); // mcs 10 rar[3] = (((ra->msg3_mcs & 0x7) << 5)) | ((ra->msg3_TPC & 7) << 2) | diff --git a/openair2/LAYER2/MAC/rar_tools_ue.c b/openair2/LAYER2/MAC/rar_tools_ue.c index 7d24e4c0af..44f0f51582 100644 --- a/openair2/LAYER2/MAC/rar_tools_ue.c +++ b/openair2/LAYER2/MAC/rar_tools_ue.c @@ -93,7 +93,7 @@ uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const fra } LOG_I(MAC, - "[eNB %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n", + "[UE %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n", module_idP, frameP, *(uint8_t *) rarh, rar[0], rar[1], rar[2], rar[3], rar[4], rar[5], rarh->RAPID, preamble_index); #ifdef DEBUG_RAR diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index 948f6c08d0..592ba42b26 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -475,8 +475,8 @@ ue_send_sdu(module_id_t module_idP, LOG_E(MAC, "[UE %d][RAPROC] Contention detected, RA failed\n", module_idP); - if(nfapi_mode == 3) { // Panos: phy_stub mode - // Panos: Modification for phy_stub mode operation here. We only need to make sure that the ue_mode is back to + if(nfapi_mode == 3) { // phy_stub mode + // Modification for phy_stub mode operation here. We only need to make sure that the ue_mode is back to // PRACH state. LOG_I(MAC, "nfapi_mode3: Setting UE_mode BACK to PRACH 1\n"); UE_mac_inst[module_idP].UE_mode[eNB_index] = PRACH; @@ -502,7 +502,7 @@ ue_send_sdu(module_id_t module_idP, RA_contention_resolution_timer_active = 0; if(nfapi_mode == 3) // phy_stub mode { - //Panos: Modification for phy_stub mode operation here. We only need to change the ue_mode to PUSCH + // Modification for phy_stub mode operation here. We only need to change the ue_mode to PUSCH UE_mac_inst[module_idP].UE_mode[eNB_index] = PUSCH; } else { // Full stack mode @@ -519,7 +519,7 @@ ue_send_sdu(module_id_t module_idP, payload_ptr[0]); #endif - // Panos: Eliminate call to process_timing_advance for the phy_stub UE operation mode. Is this correct? + // Eliminate call to process_timing_advance for the phy_stub UE operation mode. Is this correct? if (nfapi_mode!=3) { process_timing_advance(module_idP,CC_id,payload_ptr[0]); @@ -881,17 +881,6 @@ void ue_send_sl_sdu(module_id_t module_idP, } else { //SL_DISCOVERY uint16_t len = sdu_len; LOG_I( MAC, "SL DISCOVERY \n"); - // Panos: Ask TTN if we should be calling mac_rrc_data_ind_ue() instead of mac_rrc_data_ind() now! - /*mac_rrc_data_ind(module_idP, - CC_id, - frameP,subframeP, - UE_mac_inst[module_idP].crnti, - SL_DISCOVERY, - sdu, //(uint8_t*)&UE_mac_inst[Mod_id].SL_Discovery[0].Rx_buffer.Payload[0], - len, - ENB_FLAG_NO, - eNB_index, - 0);*/ mac_rrc_data_ind_ue(module_idP, CC_id, frameP,subframeP, @@ -1623,7 +1612,6 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, uint8_t * ulsch_buffer, uint16_t buflen, uint8_t * access_mode) { - //LOG_I(MAC, "Panos-D: UE[%d] In ue_get_sdu() 1 \n", module_idP); uint8_t total_rlc_pdu_header_len = 0, rlc_pdu_header_len_last = 0; uint16_t buflen_remain = 0; uint8_t bsr_len = 0, bsr_ce_len = 0, bsr_header_len = 0; @@ -1853,7 +1841,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, lcid, buflen_remain, (char *)&ulsch_buff[sdu_length_total] -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -1997,7 +1985,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, // build PHR and update the timers if (phr_ce_len == sizeof(POWER_HEADROOM_CMD)) { if(nfapi_mode ==3){ - //Panos: Substitute with a static value for the MAC layer abstraction (phy_stub mode) + //Substitute with a static value for the MAC layer abstraction (phy_stub mode) phr_p->PH = 40; } else{ @@ -2212,7 +2200,6 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, buflen - sdu_length_total - payload_offset); // cycle through SDUs and place in ulsch_buffer if (sdu_length_total) { - //LOG_I(MAC, "Panos-D: [UE %d] ue_get_sdu() 2 before copying to ulsch_buffer, SFN/SF: %d/%d \n \n \n", module_idP, frameP, subframe); memcpy(&ulsch_buffer[payload_offset], ulsch_buff, sdu_length_total); } @@ -2466,8 +2453,8 @@ ue_scheduler(const module_id_t module_idP, LOG_E(MAC, "Module id %u Contention resolution timer expired, RA failed\n", module_idP); - if(nfapi_mode == 3) { // Panos: phy_stub mode - // Panos: Modification for phy_stub mode operation here. We only need to make sure that the ue_mode is back to + if(nfapi_mode == 3) { // phy_stub mode + // Modification for phy_stub mode operation here. We only need to make sure that the ue_mode is back to // PRACH state. LOG_I(MAC, "nfapi_mode3: Setting UE_mode to PRACH 2 \n"); UE_mac_inst[module_idP].UE_mode[eNB_indexP] = PRACH; @@ -2840,7 +2827,7 @@ update_bsr(module_id_t module_idP, frame_t frameP, rlc_status = mac_rlc_status_ind(module_idP, UE_mac_inst[module_idP].crnti,eNB_index,frameP,subframeP,ENB_FLAG_NO,MBMS_FLAG_NO, lcid, 0xFFFF //TBS is not used in RLC at this step, set a special value for debug -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -3201,16 +3188,6 @@ SLDCH_t *ue_get_sldch(module_id_t Mod_id,int CC_id,frame_t frame_tx,sub_frame_t //UE_MAC_INST *ue = &UE_mac_inst[Mod_id]; SLDCH_t *sldch = &UE_mac_inst[Mod_id].sldch; - // Panos: Ask TTN if we should be calling mac_rrc_data_req_ue() instead of mac_rrc_data_req() now! - /*sldch->payload_length = mac_rrc_data_req(Mod_id, - CC_id, - frame_tx, - SL_DISCOVERY, - 1, - (char*)(sldch->payload), //&UE_mac_inst[Mod_id].SL_Discovery[0].Tx_buffer.Payload[0], - 0, - 0, //eNB_indexP - 0);*/ sldch->payload_length = mac_rrc_data_req_ue(Mod_id, CC_id, @@ -3291,7 +3268,7 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_ ue->slsch_lcid, req, (char*)(ue->slsch_pdu.payload + sizeof(SLSCH_SUBHEADER_24_Bit_DST_LONG)) -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,ue->sourceL2Id, ue->destinationL2Id #endif diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index c77f33e308..c6ce37c98d 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -83,7 +83,7 @@ boolean_t pdcp_data_req( const sdu_size_t sdu_buffer_sizeP, unsigned char *const sdu_buffer_pP, const pdcp_transmission_mode_t modeP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t * const sourceL2Id ,const uint32_t * const destinationL2Id #endif @@ -170,7 +170,7 @@ boolean_t pdcp_data_req( sdu_buffer_sizeP); #endif rlc_status = rlc_data_req(ctxt_pP, srb_flagP, MBMS_FLAG_YES, rb_idP, muiP, confirmP, sdu_buffer_sizeP, pdcp_pdu_p -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); @@ -360,7 +360,7 @@ boolean_t pdcp_data_req( LOG_F(PDCP,"\n"); #endif rlc_status = rlc_data_req(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP, confirmP, pdcp_pdu_size, pdcp_pdu_p -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,sourceL2Id ,destinationL2Id #endif @@ -595,9 +595,7 @@ pdcp_data_ind( } if (pdcp_is_rx_seq_number_valid(sequence_number, pdcp_p, srb_flagP) == TRUE) { -#if 0 LOG_T(PDCP, "Incoming PDU has a sequence number (%d) in accordance with RX window\n", sequence_number); -#endif /* if (dc == PDCP_DATA_PDU ) LOG_D(PDCP, "Passing piggybacked SDU to NAS driver...\n"); else @@ -612,13 +610,9 @@ pdcp_data_ind( * XXX Till we implement in-sequence delivery and duplicate discarding * mechanism all out-of-order packets will be delivered to RRC/IP */ -#if 0 - LOG_D(PDCP, "Ignoring PDU...\n"); - free_mem_block(sdu_buffer, __func__); + LOG_W(PDCP, "Ignoring PDU...\n"); + free_mem_block(sdu_buffer_pP, __func__); return FALSE; -#else - //LOG_W(PDCP, "Delivering out-of-order SDU to upper layer...\n"); -#endif } // SRB1/2: control-plane data @@ -866,7 +860,7 @@ pdcp_data_ind( void pdcp_update_stats(const protocol_ctxt_t* const ctxt_pP){ - uint8_t pdcp_uid = 0; + uint16_t pdcp_uid = 0; uint8_t rb_id = 0; // these stats are measured for both eNB and UE on per seond basis @@ -982,7 +976,7 @@ pdcp_run ( RRC_DCCH_DATA_REQ (msg_p).sdu_size, RRC_DCCH_DATA_REQ (msg_p).sdu_p, RRC_DCCH_DATA_REQ (msg_p).mode -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , NULL, NULL #endif ); @@ -1019,29 +1013,6 @@ pdcp_run ( } } while(msg_p != NULL); -# if 0 - { - MessageDef *msg_resp_p; - - msg_resp_p = itti_alloc_new_message(TASK_PDCP_ENB, MESSAGE_TEST); - - itti_send_msg_to_task(TASK_RRC_ENB, 1, msg_resp_p); - } - { - MessageDef *msg_resp_p; - - msg_resp_p = itti_alloc_new_message(TASK_PDCP_ENB, MESSAGE_TEST); - - itti_send_msg_to_task(TASK_ENB_APP, 2, msg_resp_p); - } - { - MessageDef *msg_resp_p; - - msg_resp_p = itti_alloc_new_message(TASK_PDCP_ENB, MESSAGE_TEST); - - itti_send_msg_to_task(TASK_MAC_ENB, 3, msg_resp_p); - } -# endif #endif // IP/NAS -> PDCP traffic : TX, read the pkt from the upper layer buffer diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h index 6fd0621644..054bb5fac4 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h @@ -34,34 +34,6 @@ #ifndef __PDCP_H__ # define __PDCP_H__ //----------------------------------------------------------------------------- -# ifdef PDCP_C -# define private_pdcp(x) x -# define protected_pdcp(x) x -# define public_pdcp(x) x -# else -# define private_pdcp(x) -# define public_pdcp(x) extern x -# ifdef PDCP_FIFO_C -# define protected_pdcp(x) extern x -# else -# define protected_pdcp(x) -# endif -# endif - -# ifdef PDCP_FIFO_C -# define private_pdcp_fifo(x) x -# define protected_pdcp_fifo(x) x -# define public_pdcp_fifo(x) x -# else -# define private_pdcp_fifo(x) -# define public_pdcp_fifo(x) extern x -# ifdef PDCP_C -# define protected_pdcp_fifo(x) extern x -# else -# define protected_pdcp_fifo(x) -# endif -# endif -//----------------------------------------------------------------------------- #ifndef NON_ACCESS_STRATUM #include "UTIL/MEM/mem_block.h" #include "UTIL/LISTS/list.h" @@ -94,41 +66,41 @@ extern int pdcp_instance_cnt; int init_pdcp_thread(void); void cleanup_pdcp_thread(void); -public_pdcp(uint32_t Pdcp_stats_tx_window_ms[MAX_NUM_CCs][MAX_MOBILES_PER_ENB]); -public_pdcp(uint32_t Pdcp_stats_tx_bytes[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_bytes_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_bytes_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_sn[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_throughput_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_aiat[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_aiat_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_aiat_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_tx_iat[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); +uint32_t Pdcp_stats_tx_window_ms[MAX_NUM_CCs][MAX_MOBILES_PER_ENB]; +uint32_t Pdcp_stats_tx_bytes[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_bytes_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_bytes_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_sn[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_throughput_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_aiat[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_aiat_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_aiat_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_tx_iat[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; -public_pdcp(uint32_t Pdcp_stats_rx_window_ms[MAX_NUM_CCs][MAX_MOBILES_PER_ENB]); -public_pdcp(uint32_t Pdcp_stats_rx[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_bytes[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_bytes_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_bytes_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_sn[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_goodput_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_aiat[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_aiat_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_aiat_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_iat[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); -public_pdcp(uint32_t Pdcp_stats_rx_outoforder[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]); +uint32_t Pdcp_stats_rx_window_ms[MAX_NUM_CCs][MAX_MOBILES_PER_ENB]; +uint32_t Pdcp_stats_rx[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_bytes[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_bytes_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_bytes_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_sn[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_goodput_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_aiat[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_aiat_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_aiat_tmp_w[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_iat[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; +uint32_t Pdcp_stats_rx_outoforder[MAX_NUM_CCs][MAX_MOBILES_PER_ENB][NB_RB_MAX]; -public_pdcp(void pdcp_update_perioidical_stats(const protocol_ctxt_t* const ctxt_pP)); +void pdcp_update_perioidical_stats(const protocol_ctxt_t* const ctxt_pP); /*Packet Probing for agent PDCP*/ -//public_pdcp(uint64_t *pdcp_packet_counter); -//public_pdcp(uint64_t *pdcp_size_packet); +//uint64_t *pdcp_packet_counter; +//uint64_t *pdcp_size_packet; typedef struct pdcp_enb_s { // used for eNB stats generation uint16_t uid[MAX_MOBILES_PER_ENB]; @@ -141,7 +113,7 @@ typedef struct pdcp_enb_s { } pdcp_enb_t; -public_pdcp(pdcp_enb_t pdcp_enb[MAX_NUM_CCs]); +pdcp_enb_t pdcp_enb[MAX_NUM_CCs]; typedef struct pdcp_stats_s { time_stats_t pdcp_run; @@ -251,7 +223,7 @@ typedef struct pdcp_mbms_s { * \note None * @ingroup _pdcp */ -public_pdcp(boolean_t pdcp_data_req( +boolean_t pdcp_data_req( protocol_ctxt_t* ctxt_pP, const srb_flag_t srb_flagP, const rb_id_t rb_id, @@ -260,11 +232,11 @@ public_pdcp(boolean_t pdcp_data_req( const sdu_size_t sdu_buffer_size, unsigned char* const sdu_buffer, const pdcp_transmission_mode_t mode -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t * const sourceL2Id ,const uint32_t * const destinationL2Id #endif - )); + ); /*! \fn boolean_t pdcp_data_ind(const protocol_ctxt_t* const, srb_flag_t, MBMS_flag_t, rb_id_t, sdu_size_t, mem_block_t*, boolean_t) * \brief This functions handles data transfer indications coming from RLC @@ -279,13 +251,13 @@ public_pdcp(boolean_t pdcp_data_req( * \note None * @ingroup _pdcp */ -public_pdcp(boolean_t pdcp_data_ind( +boolean_t pdcp_data_ind( const protocol_ctxt_t* const ctxt_pP, const srb_flag_t srb_flagP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_id, const sdu_size_t sdu_buffer_size, - mem_block_t* const sdu_buffer)); + mem_block_t* const sdu_buffer); /*! \fn void rrc_pdcp_config_req(const protocol_ctxt_t* const ,uint32_t,rb_id_t,uint8_t) * \brief This functions initializes relevant PDCP entity @@ -297,12 +269,12 @@ public_pdcp(boolean_t pdcp_data_ind( * \note None * @ingroup _pdcp */ -public_pdcp(void rrc_pdcp_config_req ( +void rrc_pdcp_config_req ( const protocol_ctxt_t* const ctxt_pP, const srb_flag_t srb_flagP, const uint32_t actionP, const rb_id_t rb_idP, - const uint8_t security_modeP);) + const uint8_t security_modeP); /*! \fn bool rrc_pdcp_config_asn1_req (const protocol_ctxt_t* const , SRB_ToAddModList_t* srb2add_list, DRB_ToAddModList_t* drb2add_list, DRB_ToReleaseList_t* drb2release_list) * \brief Function for RRC to configure a Radio Bearer. @@ -318,8 +290,7 @@ public_pdcp(void rrc_pdcp_config_req ( * \param[in] defaultDRB Default DRB ID * \return A status about the processing, OK or error code. */ -public_pdcp( - boolean_t rrc_pdcp_config_asn1_req ( +boolean_t rrc_pdcp_config_asn1_req ( const protocol_ctxt_t* const ctxt_pP, SRB_ToAddModList_t *const srb2add_list, DRB_ToAddModList_t *const drb2add_list, @@ -332,7 +303,7 @@ public_pdcp( ,PMCH_InfoList_r9_t *pmch_InfoList_r9 #endif ,rb_id_t *const defaultDRB - )); + ); /*! \fn boolean_t pdcp_config_req_asn1 (const protocol_ctxt_t* const ctxt_pP, srb_flag_t srb_flagP, uint32_t action, rb_id_t rb_id, uint8_t rb_sn, uint8_t rb_report, uint16_t header_compression_profile, uint8_t security_mode) * \brief Function for RRC to configure a Radio Bearer. @@ -354,7 +325,7 @@ public_pdcp( * \param[in] kUPenc User-Plane encryption key * \return A status about the processing, OK or error code. */ -public_pdcp(boolean_t pdcp_config_req_asn1 ( +boolean_t pdcp_config_req_asn1 ( const protocol_ctxt_t* const ctxt_pP, pdcp_t *const pdcp_pP, const srb_flag_t srb_flagP, @@ -369,22 +340,22 @@ public_pdcp(boolean_t pdcp_config_req_asn1 ( const uint8_t security_mode, uint8_t *const kRRCenc, uint8_t *const kRRCint, - uint8_t *const kUPenc)); + uint8_t *const kUPenc); /*! \fn void pdcp_add_UE(const protocol_ctxt_t* const ctxt_pP) * \brief Function (for RRC) to add a new UE in PDCP module * \param[in] ctxt_pP Running context. * \return A status about the processing, OK or error code. */ -public_pdcp(void pdcp_add_UE(const protocol_ctxt_t* const ctxt_pP)); +void pdcp_add_UE(const protocol_ctxt_t* const ctxt_pP); /*! \fn boolean_t pdcp_remove_UE(const protocol_ctxt_t* const ctxt_pP) * \brief Function for RRC to remove UE from PDCP module hashtable * \param[in] ctxt_pP Running context. * \return A status about the processing, OK or error code. */ -public_pdcp(boolean_t pdcp_remove_UE( - const protocol_ctxt_t* const ctxt_pP)); +boolean_t pdcp_remove_UE( + const protocol_ctxt_t* const ctxt_pP); /*! \fn void rrc_pdcp_config_release( const protocol_ctxt_t* const, rb_id_t) * \brief This functions is unused @@ -394,7 +365,7 @@ public_pdcp(boolean_t pdcp_remove_UE( * \note None * @ingroup _pdcp */ -//public_pdcp(void rrc_pdcp_config_release ( const protocol_ctxt_t* const ctxt_pP, rb_id_t);) +//void rrc_pdcp_config_release ( const protocol_ctxt_t* const ctxt_pP, rb_id_t); /*! \fn void pdcp_run(const protocol_ctxt_t* const ctxt_pP) * \brief Runs PDCP entity to let it handle incoming/outgoing SDUs @@ -403,27 +374,23 @@ public_pdcp(boolean_t pdcp_remove_UE( * \note None * @ingroup _pdcp */ -public_pdcp(void pdcp_run ( - const protocol_ctxt_t* const ctxt_pP);) -public_pdcp(int pdcp_module_init (void);) -public_pdcp(void pdcp_module_cleanup (void);) -public_pdcp(void pdcp_layer_init (void);) -public_pdcp(void pdcp_layer_cleanup (void);) +void pdcp_run ( + const protocol_ctxt_t* const ctxt_pP); +int pdcp_module_init (void); +void pdcp_module_cleanup (void); +void pdcp_layer_init (void); +void pdcp_layer_cleanup (void); #if defined(PDCP_USE_NETLINK_QUEUES) -public_pdcp(int pdcp_netlink_init (void);) +int pdcp_netlink_init (void); #endif #define PDCP2NW_DRIVER_FIFO 21 #define NW_DRIVER2PDCP_FIFO 22 -protected_pdcp_fifo(int pdcp_fifo_flush_sdus ( - const protocol_ctxt_t* const ctxt_pP);) -protected_pdcp_fifo(int pdcp_fifo_read_input_sdus_remaining_bytes ( - const protocol_ctxt_t* const ctxt_pP);) -protected_pdcp_fifo(int pdcp_fifo_read_input_sdus ( - const protocol_ctxt_t* const ctxt_pP);) -protected_pdcp_fifo(void pdcp_fifo_read_input_sdus_from_otg ( - const protocol_ctxt_t* const ctxt_pP);) +int pdcp_fifo_flush_sdus ( const protocol_ctxt_t* const ctxt_pP); +int pdcp_fifo_read_input_sdus_remaining_bytes ( const protocol_ctxt_t* const ctxt_pP); +int pdcp_fifo_read_input_sdus ( const protocol_ctxt_t* const ctxt_pP); +void pdcp_fifo_read_input_sdus_from_otg ( const protocol_ctxt_t* const ctxt_pP); //----------------------------------------------------------------------------- @@ -437,7 +404,7 @@ typedef struct pdcp_data_req_header_s { sdu_size_t data_size; signed int inst; ip_traffic_type_t traffic_type; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) uint32_t sourceL2Id; uint32_t destinationL2Id; #endif @@ -448,7 +415,7 @@ typedef struct pdcp_data_ind_header_s { sdu_size_t data_size; signed int inst; ip_traffic_type_t dummy_traffic_type; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) uint32_t sourceL2Id; uint32_t destinationL2Id; #endif @@ -462,7 +429,7 @@ struct pdcp_netlink_element_s { }; //TTN for D2D (PC5S) -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #define PDCP_SOCKET_PORT_NO 9999 //temporary value #define PC5_SIGNALLING_PAYLOAD_SIZE 100 //should be updated with a correct value int pdcp_pc5_sockfd; @@ -497,17 +464,6 @@ typedef struct { #endif - -#if 0 -/* - * Missing PDU information struct, a copy of this will be enqueued - * into pdcp.missing_pdus for every missing PDU - */ -typedef struct pdcp_missing_pdu_info_t { - pdcp_sn_t sequence_number; -} pdcp_missing_pdu_info_t; -#endif - /* * PDCP limit values */ @@ -531,31 +487,31 @@ typedef struct pdcp_missing_pdu_info_t { #define PDCP_SN_12BIT 12 -protected_pdcp(signed int pdcp_2_nas_irq;) -public_pdcp(pdcp_stats_t UE_pdcp_stats[MAX_MOBILES_PER_ENB];) -public_pdcp(pdcp_stats_t eNB_pdcp_stats[NUMBER_OF_eNB_MAX];) -//protected_pdcp(pdcp_t pdcp_array_srb_ue[MAX_MOBILES_PER_ENB][2];) -//protected_pdcp(pdcp_t pdcp_array_drb_ue[MAX_MOBILES_PER_ENB][maxDRB];) -//public_pdcp(pdcp_t pdcp_array_srb_eNB[NUMBER_OF_eNB_MAX][MAX_MOBILES_PER_ENB][2];) -//protected_pdcp(pdcp_t pdcp_array_drb_eNB[NUMBER_OF_eNB_MAX][MAX_MOBILES_PER_ENB][maxDRB];) +signed int pdcp_2_nas_irq; +pdcp_stats_t UE_pdcp_stats[MAX_MOBILES_PER_ENB]; +pdcp_stats_t eNB_pdcp_stats[NUMBER_OF_eNB_MAX]; +//pdcp_t pdcp_array_srb_ue[MAX_MOBILES_PER_ENB][2]; +//pdcp_t pdcp_array_drb_ue[MAX_MOBILES_PER_ENB][maxDRB]; +//pdcp_t pdcp_array_srb_eNB[NUMBER_OF_eNB_MAX][MAX_MOBILES_PER_ENB][2]; +//pdcp_t pdcp_array_drb_eNB[NUMBER_OF_eNB_MAX][MAX_MOBILES_PER_ENB][maxDRB]; // for UE code conly -protected_pdcp(rnti_t pdcp_UE_UE_module_id_to_rnti[MAX_MOBILES_PER_ENB];) -protected_pdcp(rnti_t pdcp_eNB_UE_instance_to_rnti[MAX_MOBILES_PER_ENB];) // for noS1 mode -protected_pdcp(unsigned int pdcp_eNB_UE_instance_to_rnti_index;) +rnti_t pdcp_UE_UE_module_id_to_rnti[MAX_MOBILES_PER_ENB]; +rnti_t pdcp_eNB_UE_instance_to_rnti[MAX_MOBILES_PER_ENB]; // for noS1 mode +unsigned int pdcp_eNB_UE_instance_to_rnti_index; #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) -public_pdcp(pdcp_mbms_t pdcp_mbms_array_ue[MAX_MOBILES_PER_ENB][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h -public_pdcp(pdcp_mbms_t pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h +pdcp_mbms_t pdcp_mbms_array_ue[MAX_MOBILES_PER_ENB][maxServiceCount][maxSessionPerPMCH]; // some constants from openair2/RRC/LTE/MESSAGES/asn1_constants.h +pdcp_mbms_t pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH]; // some constants from openair2/RRC/LTE/MESSAGES/asn1_constants.h #endif -protected_pdcp(sdu_size_t pdcp_output_sdu_bytes_to_write;) -protected_pdcp(sdu_size_t pdcp_output_header_bytes_to_write;) -protected_pdcp(list_t pdcp_sdu_list;) -protected_pdcp(int pdcp_sent_a_sdu;) -protected_pdcp(pdcp_data_req_header_t pdcp_input_header;) -protected_pdcp(unsigned char pdcp_input_sdu_buffer[MAX_IP_PACKET_SIZE];) -protected_pdcp(sdu_size_t pdcp_input_index_header;) -protected_pdcp(sdu_size_t pdcp_input_sdu_size_read;) -protected_pdcp(sdu_size_t pdcp_input_sdu_remaining_size_to_read;) +sdu_size_t pdcp_output_sdu_bytes_to_write; +sdu_size_t pdcp_output_header_bytes_to_write; +list_t pdcp_sdu_list; +int pdcp_sent_a_sdu; +pdcp_data_req_header_t pdcp_input_header; +unsigned char pdcp_input_sdu_buffer[MAX_IP_PACKET_SIZE]; +sdu_size_t pdcp_input_index_header; +sdu_size_t pdcp_input_sdu_size_read; +sdu_size_t pdcp_input_sdu_remaining_size_to_read; #define PDCP_COLL_KEY_VALUE(mODULE_iD, rNTI, iS_eNB, rB_iD, iS_sRB) \ ((hash_key_t)mODULE_iD | \ @@ -586,7 +542,7 @@ protected_pdcp(sdu_size_t pdcp_input_sdu_remaining_size_to_read;) (((hash_key_t)(sESSION_ID)) << 37) | \ (((hash_key_t)(0x0000000000000001)) << 63)) -public_pdcp(hash_table_t *pdcp_coll_p;) +hash_table_t *pdcp_coll_p; #endif /*@}*/ diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c index abec97ddfd..0ef6893d08 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c @@ -45,6 +45,7 @@ configure_pdcp_req (struct pdcp_entity *pdcpP, void *rlcP, uint8_t rlc_sap_typeP mem_block *mb; mb = get_free_mem_block (sizeof (struct cpdcp_primitive), __func__); + if(mb==NULL) return; ((struct cpdcp_primitive *) mb->data)->type = CPDCP_CONFIG_REQ; ((struct cpdcp_primitive *) mb->data)->primitive.config_req.rlc_sap = rlcP; ((struct cpdcp_primitive *) mb->data)->primitive.config_req.rlc_type_sap = rlc_sap_typeP; diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c index be3d4fd434..ec605faa71 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c @@ -202,7 +202,7 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) cont = 0; //TTN - for D2D (PC5S) -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) sidelink_pc5s_element *sl_pc5s_msg_recv = NULL; char send_buf[BUFSIZE]; int rb_id = ((pdcp_data_ind_header_t *)(sdu_p->data))->rb_id; @@ -452,7 +452,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) pdcp_data_req(&ctxt, SRB_FLAG_NO, rab_id, RLC_MUI_UNDEFINED, RLC_SDU_CONFIRM_NO, len, (unsigned char *)nl_rx_buf, PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , NULL, NULL #endif ); @@ -488,10 +488,9 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) pdcp_t* pdcp_p = NULL; //TTN for D2D (PC5S) -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) int prose_addr_len; char send_buf[BUFSIZE], receive_buf[BUFSIZE]; - // Panos: Remove the following definitions due to warnings of unused variables. //int optval; int bytes_received; sidelink_pc5s_element *sl_pc5s_msg_recv = NULL; @@ -568,7 +567,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) data_p->pdcp_read_header.data_size, data_p->data, pdcp_mode -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); @@ -596,7 +595,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) data_p->pdcp_read_header.data_size, data_p->data, PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); @@ -613,7 +612,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) data_p->pdcp_read_header.data_size, data_p->data, PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); @@ -633,7 +632,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) //TTN for D2D (PC5S) -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) prose_addr_len = sizeof(prose_pdcp_addr); // receive a message from ProSe App memset(receive_buf, 0, BUFSIZE); @@ -775,7 +774,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) pc5s_header->data_size, (unsigned char *)receive_buf, PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,&pc5s_header->sourceL2Id ,&pc5s_header->destinationL2Id #endif @@ -833,7 +832,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) pc5s_header->data_size, (unsigned char *)receive_buf, PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,&pc5s_header->sourceL2Id ,&pc5s_header->destinationL2Id #endif @@ -980,7 +979,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) pdcp_read_header_g.data_size, (unsigned char *)NLMSG_DATA(nas_nlh_rx), PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); @@ -1017,7 +1016,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) pdcp_read_header_g.data_size, (unsigned char *)NLMSG_DATA(nas_nlh_rx), PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); @@ -1083,7 +1082,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) pdcp_read_header_g.data_size, (unsigned char *)NLMSG_DATA(nas_nlh_rx), PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,&pdcp_read_header_g.sourceL2Id ,&pdcp_read_header_g.destinationL2Id #endif @@ -1141,7 +1140,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) pdcp_read_header_g.data_size, (unsigned char *)NLMSG_DATA(nas_nlh_rx), PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,&pdcp_read_header_g.sourceL2Id ,&pdcp_read_header_g.destinationL2Id #endif @@ -1189,7 +1188,7 @@ void pdcp_fifo_read_input_sdus_from_otg (const protocol_ctxt_t* const ctxt_pP) } //TTN for D2D (PC5S) -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) void pdcp_pc5_socket_init() { diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h index a939543432..291ec5e2a7 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h @@ -53,7 +53,7 @@ extern int reception_from_rohc_bs(void); extern BOOL pdcp_data_ind (module_id_t module_idP, rb_id_t rab_idP, sdu_size_t data_sizeP, mem_block_t * sduP, uint8_t is_data_plane); extern BOOL pdcp_data_req (module_id_t module_id, uint32_t frame, uint8_t eNB_flag, rb_id_t rab_id, uint32_t muiP, uint32_t confirmP, sdu_size_t sdu_buffer_size, unsigned char* sdu_buffer, uint8_t is_data_pdu -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t * const sourceL2Id ,const uint32_t * const destinationL2Id #endif diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c index 949858c1e5..b8ec487935 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c @@ -128,9 +128,7 @@ boolean_t pdcp_advance_rx_window(pdcp_t* pdcp_entity) * Update sequence numbering state and Hyper Frame Number if SN has already reached * its max value (see 5.1 PDCP Data Transfer Procedures) */ -#if 0 LOG_D(PDCP, "Advancing RX window...\n"); -#endif if (pdcp_entity->next_pdcp_rx_sn == pdcp_calculate_max_seq_num_for_given_size(pdcp_entity->seq_num_size)) { pdcp_entity->next_pdcp_rx_sn = 0; @@ -152,9 +150,7 @@ boolean_t pdcp_is_rx_seq_number_valid(uint16_t seq_num, pdcp_t* pdcp_entity,srb_ uint16_t reordering_window = 0; -#if 0 LOG_D(PDCP, "Incoming RX Sequence number is %04d\n", seq_num); -#endif if (pdcp_is_seq_num_size_valid(pdcp_entity) == FALSE || pdcp_is_seq_num_valid(seq_num, pdcp_entity->seq_num_size) == FALSE) { return FALSE; @@ -165,9 +161,7 @@ boolean_t pdcp_is_rx_seq_number_valid(uint16_t seq_num, pdcp_t* pdcp_entity,srb_ * (and to build PDCP Control PDU for PDCP status report) */ if (pdcp_mark_current_pdu_as_received(seq_num, pdcp_entity) == TRUE) { -#if 0 - LOG_I(PDCP, "Received sequence number successfuly marked\n"); -#endif + LOG_D(PDCP, "Received sequence number successfuly marked\n"); } else { LOG_W(PDCP, "Cannot mark received sequence number on the bitmap!\n"); } @@ -192,13 +186,11 @@ boolean_t pdcp_is_rx_seq_number_valid(uint16_t seq_num, pdcp_t* pdcp_entity,srb_ // same the old next_pdcp_rx_sn to revert otherwise pdcp_entity->next_pdcp_rx_sn_before_integrity = pdcp_entity->next_pdcp_rx_sn; -#if 0 if (seq_num != pdcp_entity->next_pdcp_rx_sn) { LOG_D(PDCP,"Re-adjusting the sequence number to %d\n", seq_num); } -#endif //set Next_PDCP_RX_SN to the received PDCP SN +1 ; pdcp_entity->next_pdcp_rx_sn = seq_num; pdcp_advance_rx_window(pdcp_entity); // + 1, and check if it is larger than Maximum_PDCP_SN: @@ -247,9 +239,7 @@ boolean_t pdcp_is_rx_seq_number_valid(uint16_t seq_num, pdcp_t* pdcp_entity,srb_ //set Next_PDCP_RX_SN to the received PDCP SN +1 ; pdcp_entity->next_pdcp_rx_sn = seq_num; pdcp_advance_rx_window(pdcp_entity); // + 1, anc check if it is larger than Maximum_PDCP_SN: -#if 0 LOG_D(PDCP,"Re-adjusting the sequence number to %d\n", seq_num); -#endif } else if (seq_num < pdcp_entity->next_pdcp_rx_sn) { // use COUNT based on RX_HFN and the received PDCP SN for deciphering the PDCP PDU; pdcp_entity->rx_hfn_offset = 0; @@ -311,12 +301,8 @@ boolean_t pdcp_mark_current_pdu_as_received(uint16_t seq_num, pdcp_t* pdcp_entit /* * Set relevant bit */ -#if 0 LOG_D(PDCP, "Marking %d. bit of %d. octet of status bitmap\n", (seq_num % 8) + 1, octet_index); -#endif util_mark_nth_bit_of_octet(&pdcp_entity->missing_pdu_bitmap[octet_index], seq_num % 8); -#if 0 util_print_binary_representation((uint8_t*)"Current state of relevant octet: ", pdcp_entity->missing_pdu_bitmap[octet_index]); -#endif return TRUE; } diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c index 0e9452cf21..6951b27074 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c @@ -200,7 +200,7 @@ void config_req_rlc_am ( const protocol_ctxt_t* const ctxt_pP, const srb_flag_t srb_flagP, - rlc_am_info_t * const config_am_pP, + const rlc_am_info_t * config_am_pP, const rb_id_t rb_idP, const logical_chan_id_t chan_idP ) @@ -509,6 +509,7 @@ rlc_am_rx ( default: LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT" TX UNKNOWN PROTOCOL STATE 0x%02X\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP, rlc), rlc->protocol_state); + list_free (&data_indP.data); } } @@ -551,7 +552,9 @@ rlc_am_mac_status_indication ( rlc->last_absolute_subframe_status_indication = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP); - rlc->nb_bytes_requested_by_mac = tb_sizeP; + if (tb_sizeP > 0) { + rlc->nb_bytes_requested_by_mac = tb_sizeP; + } status_resp.buffer_occupancy_in_bytes = rlc_am_get_buffer_occupancy_in_bytes(ctxt_pP, rlc); @@ -585,7 +588,6 @@ rlc_am_mac_status_indication ( sdu_size = ((rlc_am_tx_sdu_management_t *) (rlc->input_sdus[rlc->current_sdu_index].mem_block->data))->sdu_size; sdu_remaining_size = ((rlc_am_tx_sdu_management_t *) (rlc->input_sdus[rlc->current_sdu_index].mem_block->data))->sdu_remaining_size; - status_resp.head_sdu_remaining_size_to_send = sdu_remaining_size; if (sdu_size == sdu_remaining_size) { diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h index 040145f7f0..952082187e 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h @@ -35,21 +35,6 @@ # ifndef __RLC_AM_H__ # define __RLC_AM_H__ -# ifdef RLC_AM_C -# define private_rlc_am(x) -# define protected_rlc_am(x) -# define public_rlc_am(x) -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am(x) -# define protected_rlc_am(x) extern x -# define public_rlc_am(x) extern x -# else -# define private_rlc_am(x) -# define protected_rlc_am(x) -# define public_rlc_am(x) extern x -# endif -# endif # include "platform_types.h" # include "rlc_def.h" # include "rlc_def_lte.h" @@ -117,9 +102,9 @@ * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -public_rlc_am(void rlc_am_release ( +void rlc_am_release ( const protocol_ctxt_t* const ctxtP, - rlc_am_entity_t * const rlc_pP);) + rlc_am_entity_t * const rlc_pP); /** @addtogroup _rlc_am_init_impl_ * @{ @@ -133,12 +118,14 @@ public_rlc_am(void rlc_am_release ( * \param[in] rb_idP Radio bearer identifier. * \param[in] chan_idP Transport channel identifier. */ -public_rlc_am(void config_req_rlc_am ( - const protocol_ctxt_t* const ctxtP, - const srb_flag_t srb_flagP, - const rlc_am_info_t * const config_amP, - const rb_id_t rb_idP, - const logical_chan_id_t chan_idP);) +void +config_req_rlc_am ( + const protocol_ctxt_t* const ctxt_pP, + const srb_flag_t srb_flagP, + const rlc_am_info_t * config_am_pP, + const rb_id_t rb_idP, + const logical_chan_id_t chan_idP +); /*! \fn void config_req_rlc_am_asn1 (const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, struct RLC_Config__am * config_amP, rb_id_t rb_idP, logical_chan_id_t chan_idP) * \brief Configure the UL and DL parameters of the RLC AM with the asn1c autogenerated pameters structs @@ -148,12 +135,12 @@ public_rlc_am(void config_req_rlc_am ( * \param[in] rb_idP Radio bearer identifier. * \param[in] chan_idP Transport channel identifier. */ -public_rlc_am(void config_req_rlc_am_asn1 ( +void config_req_rlc_am_asn1 ( const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const struct RLC_Config__am * const config_amP, const rb_id_t rb_idP, - const logical_chan_id_t chan_idP);) + const logical_chan_id_t chan_idP); /** @} */ @@ -218,7 +205,7 @@ public_rlc_am(void config_req_rlc_am_asn1 ( * \param[out] stat_timer_poll_retransmit_timed_out Number of times the timer "poll_retransmit" has timed-out. * \param[out] stat_timer_status_prohibit_timed_out Number of times the timer "status_prohibit" has timed-out. */ -public_rlc_am(void rlc_am_stat_req ( +void rlc_am_stat_req ( const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, unsigned int* stat_tx_pdcp_sdu, @@ -247,14 +234,18 @@ public_rlc_am(void rlc_am_stat_req ( unsigned int* stat_rx_control_bytes, unsigned int* stat_timer_reordering_timed_out, unsigned int* stat_timer_poll_retransmit_timed_out, - unsigned int* stat_timer_status_prohibit_timed_out);) + unsigned int* stat_timer_status_prohibit_timed_out); /*! \fn void rlc_am_get_pdus (const protocol_ctxt_t* const ctxtP, void * const rlc_pP) * \brief Request the segmentation of SDUs based on status previously sent by MAC. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -private_rlc_am( void rlc_am_get_pdus (const protocol_ctxt_t* const ctxtP,void * const rlc_pP);) +void +rlc_am_get_pdus ( + const protocol_ctxt_t* const ctxt_pP, + rlc_am_entity_t * const rlc_pP +); /*! \fn void rlc_am_rx (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, struct mac_data_ind data_indication) * \brief Process the received PDUs from lower layer. @@ -262,7 +253,7 @@ private_rlc_am( void rlc_am_get_pdus (const protocol_ctxt_t* const ctxtP,v * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] data_indication PDUs from MAC. */ -protected_rlc_am( void rlc_am_rx (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, struct mac_data_ind);) +void rlc_am_rx (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, struct mac_data_ind); /*! \fn struct mac_status_resp rlc_am_mac_status_indication (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, uint16_t tbs_sizeP, struct mac_status_ind tx_statusP,const eNB_flag_t enb_flagP) * \brief Request the maximum number of bytes that can be served by RLC instance to MAC and fix the amount of bytes requested by MAC for next RLC transmission. @@ -273,14 +264,14 @@ protected_rlc_am( void rlc_am_rx (const protocol_ctxt_t* const ctxtP,void * * \param[in] enb_flagP eNB or UE flag indication. * \return The maximum number of bytes that can be served by RLC instance to MAC. */ -public_rlc_am( struct mac_status_resp rlc_am_mac_status_indication (const protocol_ctxt_t* const ctxtP, void * const rlc_pP, uint16_t tbs_sizeP, struct mac_status_ind tx_statusP,const eNB_flag_t enb_flagP);) +struct mac_status_resp rlc_am_mac_status_indication (const protocol_ctxt_t* const ctxtP, void * const rlc_pP, uint16_t tbs_sizeP, struct mac_status_ind tx_statusP,const eNB_flag_t enb_flagP); /*! \fn void rlc_am_set_nb_bytes_requested_by_mac (void * const rlc_pP,const tb_size_t tb_sizeP) * \brief Set available TBS for RLC Tx just before am_mac_data_request. Used for UE only. * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] tb_sizeP Available Tx Transport Block size in bytes. */ -public_rlc_am( void rlc_am_set_nb_bytes_requested_by_mac (void * const rlc_pP,const tb_size_t tb_sizeP);) +void rlc_am_set_nb_bytes_requested_by_mac (void * const rlc_pP,const tb_size_t tb_sizeP); /*! \fn struct mac_data_req rlc_am_mac_data_request (const protocol_ctxt_t* const ctxtP,void * const rlc_pP,const eNB_flag_t enb_flagP) * \brief Gives PDUs to lower layer MAC. @@ -289,7 +280,7 @@ public_rlc_am( void rlc_am_set_nb_bytes_requested_by_mac (void * const * \param[in] enb_flagP eNB or UE flag * \return A PDU of the previously requested number of bytes, and the updated maximum number of bytes that can be served by RLC instance to MAC for next RLC transmission. */ -public_rlc_am( struct mac_data_req rlc_am_mac_data_request (const protocol_ctxt_t* const ctxtP,void * const rlc_pP,const eNB_flag_t enb_flagP);) +struct mac_data_req rlc_am_mac_data_request (const protocol_ctxt_t* const ctxtP,void * const rlc_pP,const eNB_flag_t enb_flagP); /*! \fn void rlc_am_mac_data_indication (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, struct mac_data_ind data_indP) * \brief Receive PDUs from lower layer MAC. @@ -297,14 +288,14 @@ public_rlc_am( struct mac_data_req rlc_am_mac_data_request (const protocol_ct * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] data_indP PDUs from MAC. */ -public_rlc_am( void rlc_am_mac_data_indication (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, struct mac_data_ind data_indP);) +void rlc_am_mac_data_indication (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, struct mac_data_ind data_indP); /*! \fn uint32_t rlc_am_get_buffer_occupancy_in_bytes (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP) * \brief Get Tx Buffer Occupancy. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -public_rlc_am( uint32_t rlc_am_get_buffer_occupancy_in_bytes (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP);) +uint32_t rlc_am_get_buffer_occupancy_in_bytes (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP); /*! \fn void rlc_am_data_req (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, mem_block_t *sduP) * \brief Interface with higher layers, buffer higher layer SDUS for transmission. @@ -312,6 +303,6 @@ public_rlc_am( uint32_t rlc_am_get_buffer_occupancy_in_bytes (const protocol_ * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] sduP SDU. (A struct rlc_am_data_req is mapped on sduP->data.) */ -public_rlc_am( void rlc_am_data_req (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, mem_block_t *sduP);) +void rlc_am_data_req (const protocol_ctxt_t* const ctxtP,void * const rlc_pP, mem_block_t *sduP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c index 996dd96f35..3159eccc0c 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c @@ -42,8 +42,17 @@ void rlc_am_free_in_sdu( { if (index_in_bufferP <= RLC_AM_SDU_CONTROL_BUFFER_SIZE) { /* BugFix: SDU shall have been already freed during initial PDU segmentation or concatenation !! */ +//Assertion(eNB)_PRAN_DesignDocument_annex No.761 + if(rlcP->input_sdus[index_in_bufferP].mem_block != NULL) + { + LOG_E(RLC, "RLC AM Tx SDU Conf: Data Part is not empty index=%d LcId=%d\n", + index_in_bufferP,rlcP->channel_id); + return; + } +/* AssertFatal(rlcP->input_sdus[index_in_bufferP].mem_block == NULL, "RLC AM Tx SDU Conf: Data Part is not empty index=%d LcId=%d\n", index_in_bufferP,rlcP->channel_id); +*/ /* if (rlcP->input_sdus[index_in_bufferP].mem_block != NULL) { free_mem_block(rlcP->input_sdus[index_in_bufferP].mem_block, __func__); @@ -121,8 +130,13 @@ rlc_am_pdu_sdu_data_cnf( for (pdu_sdu_index = 0; pdu_sdu_index < rlc_pP->tx_data_pdu_buffer[snP % RLC_AM_WINDOW_SIZE].nb_sdus; pdu_sdu_index++) { sdu_index = rlc_pP->tx_data_pdu_buffer[snP % RLC_AM_WINDOW_SIZE].sdus_index[pdu_sdu_index]; - assert(sdu_index >= 0); - assert(sdu_index < RLC_AM_SDU_CONTROL_BUFFER_SIZE); + //assert(sdu_index >= 0); + //assert(sdu_index < RLC_AM_SDU_CONTROL_BUFFER_SIZE); + if(sdu_index < 0 || sdu_index >= RLC_AM_SDU_CONTROL_BUFFER_SIZE) { + LOG_E(RLC, "sdu_index error. sdu_index %d, pdu_sdu_index %d\n", sdu_index, pdu_sdu_index); + continue; + } + rlc_pP->input_sdus[sdu_index].nb_pdus_ack += 1; if ((rlc_pP->input_sdus[sdu_index].nb_pdus_ack == rlc_pP->input_sdus[sdu_index].nb_pdus) && diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h index 43503a1b3a..bc97490c90 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h @@ -34,22 +34,6 @@ */ # ifndef __RLC_AM_IN_SDU_H__ # define __RLC_AM_IN_SDU_H__ -//----------------------------------------------------------------------------- -# ifdef RLC_AM_IN_SDU_C -# define private_rlc_am_in_sdu(x) x -# define protected_rlc_am_in_sdu(x) x -# define public_rlc_am_in_sdu(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_in_sdu(x) -# define protected_rlc_am_in_sdu(x) extern x -# define public_rlc_am_in_sdu(x) extern x -# else -# define private_rlc_am_in_sdu(x) -# define protected_rlc_am_in_sdu(x) -# define public_rlc_am_in_sdu(x) extern x -# endif -# endif /*! \fn void rlc_am_free_in_sdu (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP, unsigned int index_in_bufferP) * \brief Free a higher layer SDU stored in input_sdus[] buffer. * \param[in] ctxtP Running context. @@ -57,7 +41,7 @@ * \param[in] index_in_bufferP Position index of the SDU. * \note Update also the RLC AM instance variables nb_sdu, current_sdu_index, nb_sdu_no_segmented. */ -protected_rlc_am_in_sdu(void rlc_am_free_in_sdu (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP, unsigned int index_in_bufferP);) +void rlc_am_free_in_sdu (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP, unsigned int index_in_bufferP); /*! \fn void rlc_am_free_in_sdu_data (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP, unsigned int index_in_bufferP) @@ -67,7 +51,7 @@ protected_rlc_am_in_sdu(void rlc_am_free_in_sdu (const protocol_ctxt_t* con * \param[in] index_in_bufferP Position index of the SDU. * \note This procedure is called when the SDU segmentation is done for this SDU. Update also the RLC AM instance variable nb_sdu_no_segmented. */ -protected_rlc_am_in_sdu(void rlc_am_free_in_sdu_data (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP, unsigned int index_in_bufferP);) +void rlc_am_free_in_sdu_data (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP, unsigned int index_in_bufferP); /*! \fn signed int rlc_am_in_sdu_is_empty(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP) @@ -76,7 +60,7 @@ protected_rlc_am_in_sdu(void rlc_am_free_in_sdu_data (const protocol_ctxt_t* con * \param[in] rlcP RLC AM protocol instance pointer. * \return 1 if the buffer is empty, else 0. */ -protected_rlc_am_in_sdu(signed int rlc_am_in_sdu_is_empty(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP);) +signed int rlc_am_in_sdu_is_empty(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP); /*! \fn void rlc_am_pdu_sdu_data_cnf(const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t* const rlc_pP,const rlc_sn_t snP) * \brief Process SDU cnf of a ACKED PDU for all SDUs concatenated in this PDU. @@ -84,6 +68,6 @@ protected_rlc_am_in_sdu(signed int rlc_am_in_sdu_is_empty(const protocol_ctxt_t* * \param[in] rlcP RLC AM protocol instance pointer. * \param[in] snP Sequence number of the PDU. */ -protected_rlc_am_in_sdu(void rlc_am_pdu_sdu_data_cnf(const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t* const rlc_pP,const rlc_sn_t snP);) +void rlc_am_pdu_sdu_data_cnf(const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t* const rlc_pP,const rlc_sn_t snP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h index c69fd3766e..9de54cd3d5 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h @@ -37,21 +37,6 @@ # include "UTIL/MEM/mem_block.h" //----------------------------------------------------------------------------- -# ifdef RLC_AM_INIT_C -# define private_rlc_am_init(x) x -# define protected_rlc_am_init(x) x -# define public_rlc_am_init(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_init(x) -# define protected_rlc_am_init(x) extern x -# define public_rlc_am_init(x) extern x -# else -# define private_rlc_am_init(x) -# define protected_rlc_am_init(x) -# define public_rlc_am_init(x) extern x -# endif -# endif //----------------------------------------------------------------------------- #include "platform_types.h" #include "platform_constants.h" @@ -76,13 +61,13 @@ typedef volatile struct { * \param[in] ctxtP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -public_rlc_am_init( void rlc_am_init (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t* rlc_pP);) +void rlc_am_init (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t* rlc_pP); /*! \fn void rlc_am_cleanup(rlc_am_entity_t *const rlc_pP) * \brief Free all memory resources allocated and kept by this RLC AM instance. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -public_rlc_am_init( void rlc_am_cleanup(rlc_am_entity_t* rlc_pP);) +void rlc_am_cleanup(rlc_am_entity_t* rlc_pP); /*! \fn void rlc_am_configure(const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, uint16_t max_retx_thresholdP, uint16_t poll_pduP, uint16_t poll_byteP, uint32_t t_poll_retransmitP, uint32_t t_reorderingP, uint32_t t_status_prohibitP) * \brief Set RLC AM protocol parameters. @@ -96,14 +81,14 @@ AMD PDU. * \param[in] t_reorderingP This timer is used by the receiving side of an AM RLC entity in order to detect loss of RLC PDUs at lower layer, value in frames. * \param[in] t_status_prohibitP This timer is used by the receiving side of an AM RLC entity in order to prohibit transmission of a STATUS PDU, value in frames. */ -public_rlc_am_init( void rlc_am_configure(const protocol_ctxt_t* const ctxtP, +void rlc_am_configure(const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, const uint16_t max_retx_thresholdP, const uint16_t poll_pduP, const uint16_t poll_byteP, const uint32_t t_poll_retransmitP, const uint32_t t_reorderingP, - const uint32_t t_status_prohibitP);) + const uint32_t t_status_prohibitP); /*! \fn void rlc_am_set_debug_infos(const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, const srb_flag_t srb_flagP, const rb_id_t rb_idP) @@ -114,6 +99,6 @@ public_rlc_am_init( void rlc_am_configure(const protocol_ctxt_t* const ctxtP, * \param[in] rb_idP Radio bearer identifier. * \param[in] chan_idP Transport channel identifier. */ -public_rlc_am_init( void rlc_am_set_debug_infos(const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, const logical_chan_id_t chan_idP);) +void rlc_am_set_debug_infos(const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, const logical_chan_id_t chan_idP); /** @} */ #endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c index 83b0dfd46b..8b5776dfe7 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c @@ -57,7 +57,12 @@ rlc_am_reassembly ( if (rlc_pP->output_sdu_in_construction == NULL) { rlc_pP->output_sdu_in_construction = get_free_mem_block (RLC_SDU_MAX_SIZE, __func__); rlc_pP->output_sdu_size_to_write = 0; - assert(rlc_pP->output_sdu_in_construction != NULL); + //assert(rlc_pP->output_sdu_in_construction != NULL); + if(rlc_pP->output_sdu_in_construction == NULL) { + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[REASSEMBLY PAYLOAD] output_sdu_in_construction is NULL\n", + PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); + return; + } } if (rlc_pP->output_sdu_in_construction != NULL) { @@ -198,10 +203,16 @@ rlc_am_send_sdu ( PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); //msg("[RLC_AM][MOD %d] Freeing mem_block ...\n", rlc_pP->module_id); //free_mem_block (rlc_pP->output_sdu_in_construction, __func__); +//Assertion(eNB)_PRAN_DesignDocument_annex No.764 + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT" SEND SDU REQUESTED %d bytes\n", + PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), + rlc_pP->output_sdu_size_to_write); +/* AssertFatal(3==4, PROTOCOL_RLC_AM_CTXT_FMT" SEND SDU REQUESTED %d bytes", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->output_sdu_size_to_write); +*/ } rlc_pP->output_sdu_size_to_write = 0; @@ -270,7 +281,9 @@ rlc_am_reassemble_pdu( break; default: - assert(0 != 0); +//Assertion(eNB)_PRAN_DesignDocument_annex No.1428 + LOG_E(RLC, "RLC_E_FIXED_PART_DATA_FIELD_FOLLOW error pdu_info->fi[%d]\n", pdu_info->fi); +// assert(0 != 0); } } else { switch (pdu_info->fi) { @@ -386,7 +399,9 @@ rlc_am_reassemble_pdu( break; default: - assert(1 != 1); +//Assertion(eNB)_PRAN_DesignDocument_annex No.1429 + LOG_E(RLC, "not RLC_E_FIXED_PART_DATA_FIELD_FOLLOW error pdu_info->fi[%d]\n", pdu_info->fi); +// assert(1 != 1); } } diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h index 82148a4a37..bf9bd58fb5 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h @@ -34,27 +34,12 @@ */ #ifndef __RLC_AM_REASSEMBLY_H__ # define __RLC_AM_REASSEMBLY_H__ -# ifdef RLC_AM_REASSEMBLY_C -# define private_rlc_am_reassembly(x) x -# define protected_rlc_am_reassembly(x) x -# define public_rlc_am_reassembly(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_reassembly(x) -# define protected_rlc_am_reassembly(x) extern x -# define public_rlc_am_reassembly(x) extern x -# else -# define private_rlc_am_reassembly(x) -# define protected_rlc_am_reassembly(x) -# define public_rlc_am_reassembly(x) extern x -# endif -# endif /*! \fn void rlc_am_clear_rx_sdu (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP) * \brief Reset the data cursor index in the output SDU buffer to zero. * \param[in] ctxtP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -private_rlc_am_reassembly( void rlc_am_clear_rx_sdu (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP);) +void rlc_am_clear_rx_sdu (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP); /*! \fn void rlc_am_reassembly (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pPuint8_t * srcP, int32_t lengthP) * \brief Concatenate datas at the tail of the output SDU in construction. This SDU in construction will be sent to higher layer. @@ -63,14 +48,14 @@ private_rlc_am_reassembly( void rlc_am_clear_rx_sdu (const protocol_ctxt_t* co * \param[in] srcP Pointer on data to be reassemblied. * \param[in] lengthP Length of data to be reassemblied. */ -private_rlc_am_reassembly( void rlc_am_reassembly (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, uint8_t * srcP, int32_t lengthP);) +void rlc_am_reassembly (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, uint8_t * srcP, int32_t lengthP); /*! \fn void rlc_am_send_sdu (rlc_am_entity_t *rlc_pP,frame_t frameP) * \brief Send the output SDU in construction to higher layer. * \param[in] ctxtP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -private_rlc_am_reassembly( void rlc_am_send_sdu (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP);) +void rlc_am_send_sdu (const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP); /*! \fn void rlc_am_reassemble_pdu(const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, const mem_block_t* const tb_pP,boolean_t free_rlc_pdu) * \brief Reassembly a RLC AM PDU, depending of the content of this PDU, data will be reassemblied to the current output SDU, the current will be sent to higher layers or not, after or before the reassembly, or no send of SDU will be triggered, depending on FI field in PDU header. @@ -79,7 +64,7 @@ private_rlc_am_reassembly( void rlc_am_send_sdu (const protocol_ctxt_t* co * \param[in] tb_pP RLC AM PDU embedded in a mem_block_t. * \param[in] free_rlc_pdu Flag for freeing RLC AM PDU after reassembly. */ -protected_rlc_am_reassembly( void rlc_am_reassemble_pdu(const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, mem_block_t* const tb_pP,boolean_t free_rlc_pdu);) +void rlc_am_reassemble_pdu(const protocol_ctxt_t* const ctxtP, rlc_am_entity_t * const rlc_pP, mem_block_t* const tb_pP,boolean_t free_rlc_pdu); /** @} */ #endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c index be4b43d1a0..83dec8653a 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c @@ -47,9 +47,15 @@ rlc_am_get_data_pdu_infos( pdu_info_pP->d_c = header_pP->b1 >> 7; pdu_info_pP->num_li = 0; - +//Assertion(eNB)_PRAN_DesignDocument_annex No.766 + if(pdu_info_pP->d_c == 0) + { + LOG_E(RLC, "RLC AM Rx PDU Data D/C Header Error LcId=%d\n", rlc_pP->channel_id); + return -2; + } +/* AssertFatal (pdu_info_pP->d_c != 0, "RLC AM Rx PDU Data D/C Header Error LcId=%d\n", rlc_pP->channel_id); - +*/ pdu_info_pP->rf = (header_pP->b1 >> 6) & 0x01; pdu_info_pP->p = (header_pP->b1 >> 5) & 0x01; pdu_info_pP->fi = (header_pP->b1 >> 3) & 0x03; @@ -264,9 +270,17 @@ rlc_am_receive_routing ( rlc_pP->stat_rx_control_pdu += 1; rlc_am_receive_process_control_pdu (ctxt_pP, rlc_pP, tb_p, &first_byte_p, &tb_size_in_bytes); // Test if remaining bytes not processed (up to know, highest probability is bug in MAC) +//Assertion(eNB)_PRAN_DesignDocument_annex No.767 + if(tb_size_in_bytes != 0) + { + LOG_E(RLC, "Remaining %d bytes following a control PDU\n", + tb_size_in_bytes); + } +/* AssertFatal( tb_size_in_bytes == 0, "Remaining %d bytes following a control PDU", tb_size_in_bytes); +*/ } LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RX ROUTING] VR(R)=%03d VR(MR)=%03d\n", @@ -396,14 +410,20 @@ rlc_am_receive_process_data_pdu ( } if (pdu_info_p->sn == rlc_pP->vr_r) { +mem_block_t* cursor_p = rlc_pP->receiver_buffer.head; +rlc_am_rx_pdu_management_t * pdu_cursor_mgnt_p = (rlc_am_rx_pdu_management_t *) (cursor_p->data); +if( (((rlc_am_rx_pdu_management_t*)(tb_pP->data))->all_segments_received) == (pdu_cursor_mgnt_p->all_segments_received)){ if (((rlc_am_rx_pdu_management_t*)(tb_pP->data))->all_segments_received) { rlc_am_rx_update_vr_r(ctxt_pP, rlc_pP, tb_pP); rlc_pP->vr_mr = (rlc_pP->vr_r + RLC_AM_WINDOW_SIZE) & RLC_AM_SN_MASK; } - reassemble = rlc_am_rx_check_vr_reassemble(ctxt_pP, rlc_pP); //TODO : optimization : check whether a reassembly is needed by looking at LI, FI, SO, etc... - +}else{ + LOG_E(RLC, "BAD all_segments_received!!! discard buffer!!!\n"); + /* Discard received block if out of window, duplicate or header error */ + free_mem_block (tb_pP, __func__); +} } //FNA: fix check VrX out of receiving window diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h index 9d2978b0f8..fdbd95873d 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h @@ -34,21 +34,6 @@ */ # ifndef __RLC_AM_RECEIVER_H__ # define __RLC_AM_RECEIVER_H__ -# ifdef RLC_AM_RECEIVER_C -# define private_rlc_am_receiver(x) x -# define protected_rlc_am_receiver(x) x -# define public_rlc_am_receiver(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_receiver(x) -# define protected_rlc_am_receiver(x) extern x -# define public_rlc_am_receiver(x) extern x -# else -# define private_rlc_am_receiver(x) -# define protected_rlc_am_receiver(x) -# define public_rlc_am_receiver(x) extern x -# endif -# endif /*! \fn signed int rlc_am_get_data_pdu_infos( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t * const rlc_pP,rlc_am_pdu_sn_10_t* headerP, int16_t sizeP, rlc_am_pdu_info_t* pdu_infoP) * \brief Extract PDU informations (header fields, data size, etc) from the serialized PDU. * \param[in] ctxt_pP Running context. @@ -58,12 +43,12 @@ * \param[in] pdu_infoP Structure containing extracted informations from PDU. * \return 0 if no error was encountered during the parsing of the PDU, else -1; */ -protected_rlc_am_receiver( signed int rlc_am_get_data_pdu_infos( +signed int rlc_am_get_data_pdu_infos( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t * const rlc_pP, rlc_am_pdu_sn_10_t* headerP, int16_t sizeP, - rlc_am_pdu_info_t* pdu_infoP)); + rlc_am_pdu_info_t* pdu_infoP); /*! \fn void rlc_am_display_data_pdu_infos(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, rlc_am_pdu_info_t* pdu_infoP) * \brief Display RLC AM PDU informations. @@ -71,7 +56,7 @@ protected_rlc_am_receiver( signed int rlc_am_get_data_pdu_infos( * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] pdu_infoP Structure containing extracted informations of a PDU. */ -protected_rlc_am_receiver( void rlc_am_display_data_pdu_infos(const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t * const rlc_pP, rlc_am_pdu_info_t* pdu_infoP);) +void rlc_am_display_data_pdu_infos(const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t * const rlc_pP, rlc_am_pdu_info_t* pdu_infoP); /*! \fn void rlc_am_rx_update_vr_ms(const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t * const rlc_pP,mem_block_t* tb_pP) * \brief Update RLC AM protocol variable VR(MS). @@ -80,7 +65,7 @@ protected_rlc_am_receiver( void rlc_am_display_data_pdu_infos(const protocol_ctx * \param[in] tb_pP PDU embedded in a mem_block_t struct. * \note It is assumed that the sequence number of the transport block is equal to VR(MS) */ -protected_rlc_am_receiver( void rlc_am_rx_update_vr_ms(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP);) +void rlc_am_rx_update_vr_ms(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP); /*! \fn void rlc_am_rx_update_vr_r (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP,mem_block_t* tb_pP) * \brief Update RLC AM protocol variable VR(R). @@ -89,7 +74,7 @@ protected_rlc_am_receiver( void rlc_am_rx_update_vr_ms(const protocol_ctxt_t* co * \param[in] tb_pP PDU embedded in a mem_block_t struct. * \note It is assumed that the sequence number of the transport block is equal to VR(R) */ -protected_rlc_am_receiver( void rlc_am_rx_update_vr_r (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP);) +void rlc_am_rx_update_vr_r (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP); /*! \fn void rlc_am_receive_routing (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, struct mac_data_ind data_indP) * \brief Convert transport blocks received from MAC layer into RLC AM PDUs, and dispatch to the right processing block these PDUS upon their type (CONTROL/DATA). @@ -97,7 +82,7 @@ protected_rlc_am_receiver( void rlc_am_rx_update_vr_r (const protocol_ctxt_t* co * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] data_indP Transport blocks received from MAC layer. */ -protected_rlc_am_receiver( void rlc_am_receive_routing (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, struct mac_data_ind data_indP)); +void rlc_am_receive_routing (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, struct mac_data_ind data_indP); /*! \fn void rlc_am_receive_process_data_pdu (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP, uint8_t* first_byteP, uint16_t tb_size_in_bytesP) * \brief Process an incoming data PDU received from MAC layer. @@ -107,7 +92,7 @@ protected_rlc_am_receiver( void rlc_am_receive_routing (const protocol_ctxt_t* c * \param[in] first_byteP Pointer on first byte of the PDU. * \param[in] tb_size_in_bytesP Transport block size in bytes (same as PDU size in bytes). */ -private_rlc_am_receiver( void rlc_am_receive_process_data_pdu (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP, uint8_t* first_byteP, - uint16_t tb_size_in_bytesP)); +void rlc_am_receive_process_data_pdu (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP, uint8_t* first_byteP, + uint16_t tb_size_in_bytesP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c index 42e8498623..cdf93a7af6 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c @@ -60,10 +60,14 @@ boolean_t rlc_am_nack_pdu ( sdu_size_t pdu_data_to_retx = 0; if (mb_p != NULL) { - assert(so_startP <= so_endP); - + //assert(so_startP <= so_endP); + if(so_startP > so_endP) { + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[NACK-PDU] ERROR NACK MISSING PDU, so_startP %d, so_endP %d\n", + PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),so_startP, so_endP); + status = FALSE; + } // Handle full PDU NACK first - if ((so_startP == 0) && (so_endP == 0x7FFF)) { + else if ((so_startP == 0) && (so_endP == 0x7FFF)) { if ((prev_nack_snP != snP) && (tx_data_pdu_buffer_p->flags.ack == 0) && (tx_data_pdu_buffer_p->flags.max_retransmit == 0)) { pdu_data_to_retx = tx_data_pdu_buffer_p->payload_size; /* Increment VtReTxNext if this is the first NACK or if some segments have already been transmitted */ @@ -82,12 +86,17 @@ boolean_t rlc_am_nack_pdu ( snP, so_stopP); #endif - assert(tx_data_pdu_buffer_p->nack_so_start < tx_data_pdu_buffer_p->payload_size); + //assert(tx_data_pdu_buffer_p->nack_so_start < tx_data_pdu_buffer_p->payload_size); + if(tx_data_pdu_buffer_p->nack_so_start >= tx_data_pdu_buffer_p->payload_size){ + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[NACK-PDU] ERROR NACK MISSING PDU, nack_so_start %d, payload_size %d\n", + PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),tx_data_pdu_buffer_p->nack_so_start, tx_data_pdu_buffer_p->payload_size); + status = FALSE; + } } else { status = FALSE; } - } + } else if (tx_data_pdu_buffer_p->flags.max_retransmit == 0) { // Handle Segment offset if (so_endP == 0x7FFF) { @@ -163,36 +172,6 @@ boolean_t rlc_am_nack_pdu ( rlc_pP->retrans_num_pdus ++; } } - - /* TODO: Move this part in UL SCH processing */ -#if 0 - if (rlc_pP->tx_data_pdu_buffer[snP].retx_count >= rlc_pP->max_retx_threshold) { - for (pdu_sdu_index = 0; pdu_sdu_index < rlc_pP->tx_data_pdu_buffer[snP].nb_sdus; pdu_sdu_index++) { - sdu_index = rlc_pP->tx_data_pdu_buffer[snP].sdus_index[pdu_sdu_index]; - assert(pdu_sdu_index < RLC_AM_MAX_SDU_IN_PDU); - assert(sdu_index < RLC_AM_SDU_CONTROL_BUFFER_SIZE); - rlc_pP->input_sdus[sdu_index].nb_pdus_ack += 1; - - if (rlc_pP->input_sdus[sdu_index].nb_pdus_ack == rlc_pP->input_sdus[sdu_index].nb_pdus) { -#if TEST_RLC_AM - rlc_am_v9_3_0_test_data_conf (rlc_pP->module_id, rlc_pP->rb_id, rlc_pP->input_sdus[sdu_index].mui, RLC_SDU_CONFIRM_NO); -#else - rlc_data_conf(ctxt_pP, rlc_pP->rb_id, rlc_pP->input_sdus[sdu_index].mui, RLC_SDU_CONFIRM_NO, rlc_pP->is_data_plane); -#endif - rlc_pP->stat_tx_pdcp_sdu_discarded += 1; - rlc_pP->stat_tx_pdcp_bytes_discarded += rlc_pP->input_sdus[sdu_index].sdu_size; - MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ - "0 "PROTOCOL_RLC_AM_MSC_FMT" Dropped SDU mui %u cause max_retx %u reached",\ - PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), - rlc_pP->input_sdus[sdu_index].mui, - rlc_pP->max_retx_threshold); - - rlc_am_free_in_sdu(ctxt_pP, rlc_pP, sdu_index); - - } - } - } -#endif } else { LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[NACK-PDU] ERROR NACK MISSING PDU SN %05d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), @@ -225,9 +204,18 @@ void rlc_am_ack_pdu ( } if (tx_data_pdu_buffer->retx_payload_size) { +//Assertion(eNB)_PRAN_DesignDocument_annex No.768 + if(tx_data_pdu_buffer->flags.ack != 0) + { + LOG_E(RLC, "RLC AM Rx Status Report sn=%d acked twice but is pending for Retx vtA=%d vtS=%d LcId=%d\n", + snP, rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + return; + } +/* AssertFatal (tx_data_pdu_buffer->flags.ack == 0, "RLC AM Rx Status Report sn=%d acked twice but is pending for Retx vtA=%d vtS=%d LcId=%d\n", snP, rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); +*/ rlc_pP->retrans_num_bytes_to_retransmit -= tx_data_pdu_buffer->retx_payload_size; tx_data_pdu_buffer->retx_payload_size = 0; tx_data_pdu_buffer->num_holes = 0; @@ -256,15 +244,23 @@ mem_block_t* rlc_am_retransmit_get_copy ( const rlc_sn_t snP) { mem_block_t* mb_original_p = rlc_pP->tx_data_pdu_buffer[snP % RLC_AM_WINDOW_SIZE].mem_block; - +//Assertion(eNB)_PRAN_DesignDocument_annex No.784 + if(mb_original_p == NULL) + { + LOG_E(RLC,"RLC AM PDU Copy Error: Empty block sn=%d vtA=%d vtS=%d LcId=%d !\n", + snP,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal (mb_original_p != NULL, "RLC AM PDU Copy Error: Empty block sn=%d vtA=%d vtS=%d LcId=%d !\n", snP,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); - +*/ rlc_am_tx_data_pdu_management_t *pdu_mngt = &rlc_pP->tx_data_pdu_buffer[snP % RLC_AM_WINDOW_SIZE]; /* We need to allocate a new buffer and copy to it because header content may change for Polling bit */ int size = pdu_mngt->header_and_payload_size + sizeof(struct mac_tb_req); mem_block_t* mb_copy = get_free_mem_block(size, __func__); + if(mb_copy == NULL) return NULL; memcpy(mb_copy->data, mb_original_p->data, size); rlc_am_pdu_sn_10_t *pdu_p = (rlc_am_pdu_sn_10_t*) (&mb_copy->data[sizeof(struct mac_tb_req)]); @@ -295,20 +291,43 @@ mem_block_t* rlc_am_retransmit_get_am_segment( uint8_t li_bit_offset = 4; /* toggle between 0 and 4 */ uint8_t li_jump_offset = 1; /* toggle between 1 and 2 */ - +//Assertion(eNB)_PRAN_DesignDocument_annex No.774 + if(mb_original_p == NULL) + { + LOG_E(RLC,"RLC AM PDU Segment Error: Empty block sn=%d vtA=%d vtS=%d LcId=%d !\n", + sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal (mb_original_p != NULL, "RLC AM PDU Segment Error: Empty block sn=%d vtA=%d vtS=%d LcId=%d !\n", sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); - - +*/ +//Assertion(eNB)_PRAN_DesignDocument_annex No.775 + if(pdu_mngt->payload != mb_original_p->data + sizeof(struct mac_tb_req) + pdu_mngt->header_and_payload_size - pdu_mngt->payload_size) + { + LOG_E(RLC,"RLC AM PDU Segment Error: Inconsistent data pointers p1=%p p2=%p sn = %d total size = %d data size = %d LcId=%d !\n", + pdu_mngt->payload,mb_original_p->data + sizeof(struct mac_tb_req),pdu_mngt->header_and_payload_size,pdu_mngt->payload_size,sn,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal (pdu_mngt->payload == mb_original_p->data + sizeof(struct mac_tb_req) + pdu_mngt->header_and_payload_size - pdu_mngt->payload_size, "RLC AM PDU Segment Error: Inconsistent data pointers p1=%p p2=%p sn = %d total size = %d data size = %d LcId=%d !\n", pdu_mngt->payload,mb_original_p->data + sizeof(struct mac_tb_req),pdu_mngt->header_and_payload_size,pdu_mngt->payload_size,sn,rlc_pP->channel_id); - +*/ /* Init ReTx Hole list if not configured, ie the whole PDU has to be retransmitted */ if (pdu_mngt->num_holes == 0) { +//Assertion(eNB)_PRAN_DesignDocument_annex No.776 + if(pdu_mngt->retx_payload_size != pdu_mngt->payload_size) + { + LOG_E(RLC,"RLC AM PDU ReTx Segment: Expecting full PDU size ReTxSize=%d DataSize=%d sn=%d vtA=%d vtS=%d LcId=%d !\n", + pdu_mngt->retx_payload_size,pdu_mngt->payload_size,sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal (pdu_mngt->retx_payload_size == pdu_mngt->payload_size,"RLC AM PDU ReTx Segment: Expecting full PDU size ReTxSize=%d DataSize=%d sn=%d vtA=%d vtS=%d LcId=%d !\n", pdu_mngt->retx_payload_size,pdu_mngt->payload_size,sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); +*/ pdu_mngt->retx_hole_index = 0; pdu_mngt->hole_so_start[0] = 0; pdu_mngt->hole_so_stop[0] = pdu_mngt->payload_size - 1; @@ -318,11 +337,18 @@ mem_block_t* rlc_am_retransmit_get_am_segment( /* Init SO Start and SO Stop */ retx_so_start = pdu_mngt->hole_so_start[pdu_mngt->retx_hole_index]; retx_so_stop = pdu_mngt->hole_so_stop[pdu_mngt->retx_hole_index]; - +//Assertion(eNB)_PRAN_DesignDocument_annex No.777 + if((retx_so_start > retx_so_stop) || (retx_so_stop - retx_so_start + 1 > pdu_mngt->payload_size)) + { + LOG_E(RLC,"RLC AM Tx PDU Segment Data SO Error: retx_so_start=%d retx_so_stop=%d OriginalPDUDataLength=%d sn=%d LcId=%d!\n", + retx_so_start,retx_so_stop,pdu_mngt->payload_size,sn,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal ((retx_so_start <= retx_so_stop) && (retx_so_stop - retx_so_start + 1 <= pdu_mngt->payload_size), "RLC AM Tx PDU Segment Data SO Error: retx_so_start=%d retx_so_stop=%d OriginalPDUDataLength=%d sn=%d LcId=%d!\n", retx_so_start,retx_so_stop,pdu_mngt->payload_size,sn,rlc_pP->channel_id); - +*/ /* Init FI to the same value as original PDU */ fi_start = (!(RLC_AM_PDU_GET_FI_START(*(pdu_mngt->first_byte)))); fi_end = (!(RLC_AM_PDU_GET_FI_END(*(pdu_mngt->first_byte)))); @@ -339,6 +365,7 @@ mem_block_t* rlc_am_retransmit_get_am_segment( *payload_sizeP = retx_so_stop - retx_so_start + 1; mem_pdu_segment_p = get_free_mem_block((*payload_sizeP + RLC_AM_PDU_SEGMENT_HEADER_MIN_SIZE + sizeof(struct mac_tb_req)), __func__); + if(mem_pdu_segment_p == NULL) return NULL; pdu_segment_header_p = (uint8_t *)&mem_pdu_segment_p->data[sizeof(struct mac_tb_req)]; ((struct mac_tb_req*)(mem_pdu_segment_p->data))->data_ptr = pdu_segment_header_p; ((struct mac_tb_req*)(mem_pdu_segment_p->data))->tb_size = RLC_AM_PDU_SEGMENT_HEADER_MIN_SIZE + *payload_sizeP; @@ -408,8 +435,17 @@ mem_block_t* rlc_am_retransmit_get_am_segment( /* Set FI Start if retx_so_start = cumulated data size */ fi_start = TRUE; /* there must be at least one SDU more */ +//Assertion(eNB)_PRAN_DesignDocument_annex No.778 + if(sdu_index >= pdu_mngt->nb_sdus) + { + LOG_E(RLC,"RLC AM Tx PDU Segment Error: sdu_index=%d nb_sdus=%d sn=%d LcId=%d !\n", + sdu_index,pdu_mngt->nb_sdus,sn,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal (sdu_index < pdu_mngt->nb_sdus, "RLC AM Tx PDU Segment Error: sdu_index=%d nb_sdus=%d sn=%d LcId=%d !\n", sdu_index,pdu_mngt->nb_sdus,sn,rlc_pP->channel_id); +*/ if (sdu_index < pdu_mngt->nb_sdus - 1) { temp_read = ((*pdu_original_header_p) << 8) | (*(pdu_original_header_p + 1)); @@ -487,17 +523,33 @@ mem_block_t* rlc_am_retransmit_get_am_segment( /* Set number of LIs in the segment */ num_LIs_pdu_segment = sdu_segment_index - 1; - +//Assertion(eNB)_PRAN_DesignDocument_annex No.779 + if(num_LIs_pdu_segment > pdu_mngt->nb_sdus - 1) + { + LOG_E(RLC, "RLC AM Tx PDU Segment Data Error: nbLISegment=%d nbLIPDU=%d sn=%d LcId=%d !\n", + num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,sn,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal (num_LIs_pdu_segment <= pdu_mngt->nb_sdus - 1, "RLC AM Tx PDU Segment Data Error: nbLISegment=%d nbLIPDU=%d sn=%d LcId=%d !\n", num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,sn,rlc_pP->channel_id); - +*/ /* Bound to available TBS taking into account min PDU segment header*/ sdu_segment_index = 0; while ((sdu_segment_index < num_LIs_pdu_segment + 1) && (rlc_pP->nb_bytes_requested_by_mac > *payload_sizeP + RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index))) { +//Assertion(eNB)_PRAN_DesignDocument_annex No.780 + if(sdus_segment_size[sdu_segment_index] <= 0) + { + LOG_E(RLC, "RLC AM Tx PDU Segment Data Error: EMpty LI index=%d numLISegment=%d numLIPDU=%d PDULength=%d SOStart=%d SOStop=%d sn=%d LcId=%d !\n", + sdu_segment_index,num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,pdu_mngt->payload_size,retx_so_start,retx_so_stop,sn,rlc_pP->channel_id); + sdu_segment_index++; + continue; + } +/* AssertFatal (sdus_segment_size[sdu_segment_index] > 0, "RLC AM Tx PDU Segment Data Error: EMpty LI index=%d numLISegment=%d numLIPDU=%d PDULength=%d SOStart=%d SOStop=%d sn=%d LcId=%d !\n", sdu_segment_index,num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,pdu_mngt->payload_size,retx_so_start,retx_so_stop,sn,rlc_pP->channel_id); - +*/ /* Add next sdu_segment_index to data part */ if (RLC_AM_PDU_SEGMENT_HEADER_SIZE(sdu_segment_index) + (*payload_sizeP) + sdus_segment_size[sdu_segment_index] <= rlc_pP->nb_bytes_requested_by_mac) { @@ -519,11 +571,18 @@ mem_block_t* rlc_am_retransmit_get_am_segment( /* update retx_so_stop */ retx_so_stop = retx_so_start + (*payload_sizeP) - 1; - +//Assertion(eNB)_PRAN_DesignDocument_annex No.781 + if((retx_so_stop > pdu_mngt->payload_size - 1) || (retx_so_stop - retx_so_start + 1 >= pdu_mngt->payload_size)) + { + LOG_E(RLC,"RLC AM Tx PDU Segment Data Error: retx_so_stop=%d OriginalPDUDataLength=%d SOStart=%d SegmentLength=%d numLISegment=%d numLIPDU=%d sn=%d LcId=%d !\n", + retx_so_stop,pdu_mngt->payload_size,retx_so_start,*payload_sizeP,num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,sn,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal ((retx_so_stop <= pdu_mngt->payload_size - 1) && (retx_so_stop - retx_so_start + 1 < pdu_mngt->payload_size), "RLC AM Tx PDU Segment Data Error: retx_so_stop=%d OriginalPDUDataLength=%d SOStart=%d SegmentLength=%d numLISegment=%d numLIPDU=%d sn=%d LcId=%d !\n", retx_so_stop,pdu_mngt->payload_size,retx_so_start,*payload_sizeP,num_LIs_pdu_segment,pdu_mngt->nb_sdus - 1,sn,rlc_pP->channel_id); - +*/ /* init FI End to FALSE if retx_so_stop is not end of PDU */ if (retx_so_stop != pdu_mngt->payload_size - 1) { @@ -541,16 +600,33 @@ mem_block_t* rlc_am_retransmit_get_am_segment( fi_end = TRUE; } } - +//Assertion(eNB)_PRAN_DesignDocument_annex No.782 + if(data_size != *payload_sizeP) + { + LOG_E(RLC,"RLC AM Tx PDU Segment Data Error: SduSum=%d Data=%d sn=%d LcId=%d !\n", + data_size,*payload_sizeP,sn,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal (data_size == *payload_sizeP, "RLC AM Tx PDU Segment Data Error: SduSum=%d Data=%d sn=%d LcId=%d !\n", data_size,*payload_sizeP,sn,rlc_pP->channel_id); - +*/ /* Allocation */ +//Assertion(eNB)_PRAN_DesignDocument_annex No.783 + if(header_segment_length + *payload_sizeP > pdu_mngt->header_and_payload_size + 2) + { + LOG_E(RLC, "RLC AM PDU Segment Error: Hdr=%d Data=%d Original Hdr+Data =%d sn=%d LcId=%d !\n", + header_segment_length,*payload_sizeP,pdu_mngt->header_and_payload_size,sn,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal (header_segment_length + *payload_sizeP <= pdu_mngt->header_and_payload_size + 2, "RLC AM PDU Segment Error: Hdr=%d Data=%d Original Hdr+Data =%d sn=%d LcId=%d !\n", header_segment_length,*payload_sizeP,pdu_mngt->header_and_payload_size,sn,rlc_pP->channel_id); +*/ mem_pdu_segment_p = get_free_mem_block((*payload_sizeP + header_segment_length + sizeof(struct mac_tb_req)), __func__); + if(mem_pdu_segment_p == NULL) return NULL; pdu_segment_header_p = (uint8_t *)&mem_pdu_segment_p->data[sizeof(struct mac_tb_req)]; ((struct mac_tb_req*)(mem_pdu_segment_p->data))->data_ptr = pdu_segment_header_p; ((struct mac_tb_req*)(mem_pdu_segment_p->data))->tb_size = header_segment_length + *payload_sizeP; @@ -662,472 +738,6 @@ mem_block_t* rlc_am_retransmit_get_am_segment( return mem_pdu_segment_p; } -#if 0 -//----------------------------------------------------------------------------- -mem_block_t* rlc_am_retransmit_get_subsegment( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP, - const rlc_sn_t snP, - sdu_size_t * const sizeP /* in-out*/) -{ - - // 5.2 ARQ procedures - // ARQ procedures are only performed by an AM RLC entity. - // 5.2.1 Retransmission - // The transmitting side of an AM RLC entity can receive a negative acknowledgement (notification of reception failure - // by its peer AM RLC entity) for an AMD PDU or a portion of an AMD PDU by the following: - // - STATUS PDU from its peer AM RLC entity. - // - // When receiving a negative acknowledgement for an AMD PDU or a portion of an AMD PDU by a STATUS PDU from - // its peer AM RLC entity, the transmitting side of the AM RLC entity shall: - // - if the SN of the corresponding AMD PDU falls within the range VT(A) <= SN < VT(S): - // - consider the AMD PDU or the portion of the AMD PDU for which a negative acknowledgement was - // received for retransmission. - // - // When an AMD PDU or a portion of an AMD PDU is considered for retransmission, the transmitting side of the AM - // RLC entity shall: - // - if the AMD PDU is considered for retransmission for the first time: - // - set the RETX_COUNT associated with the AMD PDU to zero; - // - else, if it (the AMD PDU or the portion of the AMD PDU that is considered for retransmission) is not pending - // for retransmission already, or a portion of it is not pending for retransmission already: - // - increment the RETX_COUNT; - // - if RETX_COUNT = maxRetxThreshold: - // - indicate to upper layers that max retransmission has been reached. - // - // When retransmitting an AMD PDU, the transmitting side of an AM RLC entity shall: - // - if the AMD PDU can entirely fit within the total size of RLC PDU(s) indicated by lower layer at the particular - // transmission opportunity: - // - deliver the AMD PDU as it is except for the P field (the P field should be set according to sub clause 5.2.2) to - // lower layer; - // - otherwise: - // - segment the AMD PDU, form a new AMD PDU segment which will fit within the total size of RLC PDU(s) - // indicated by lower layer at the particular transmission opportunity and deliver the new AMD PDU segment - // to lower layer. - // - // When retransmitting a portion of an AMD PDU, the transmitting side of an AM RLC entity shall: - // - segment the portion of the AMD PDU as necessary, form a new AMD PDU segment which will fit within the - // total size of RLC PDU(s) indicated by lower layer at the particular transmission opportunity and deliver the new - // AMD PDU segment to lower layer. - // - // When forming a new AMD PDU segment, the transmitting side of an AM RLC entity shall: - // - only map the Data field of the original AMD PDU to the Data field of the new AMD PDU segment; - // - set the header of the new AMD PDU segment in accordance with the description in sub clause 6.; - // - set the P field according to sub clause 5.2.2. - - mem_block_t* mb_original_p = rlc_pP->tx_data_pdu_buffer[snP].mem_block; - - if (mb_original_p != NULL) { - mem_block_t* mb_sub_segment_p = get_free_mem_block(*sizeP + sizeof(struct mac_tb_req), __func__); - rlc_am_pdu_sn_10_t* pdu_original_p = (rlc_am_pdu_sn_10_t*) (&mb_original_p->data[sizeof(struct mac_tb_req)]); - rlc_am_pdu_sn_10_t* pdu_sub_segment_p = (rlc_am_pdu_sn_10_t*) (&mb_sub_segment_p->data[sizeof(struct mac_tb_req)]); - rlc_am_pdu_info_t pdu_info; - int max_copy_payload_size; - //LG avoid WARNING int test_max_copy_payload_size; - int test_pdu_copy_size = 0; - - ((struct mac_tb_req*)(mb_sub_segment_p->data))->data_ptr = (uint8_t*)&(mb_sub_segment_p->data[sizeof(struct mac_tb_req)]); - - if (rlc_am_get_data_pdu_infos(ctxt_pP, rlc_pP, pdu_original_p, rlc_pP->tx_data_pdu_buffer[snP].header_and_payload_size, &pdu_info) >= 0) { - int li_index = 0; - int start_offset = rlc_pP->tx_data_pdu_buffer[snP].nack_so_start; - int stop_offset = rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop; - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] ORIGINAL PDU SN %04d:\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP); - rlc_am_display_data_pdu_infos(ctxt_pP, rlc_pP, &pdu_info); - - // all 15 bits set to 1 (indicate that the missing portion of the AMD PDU includes all bytes - // to the last byte of the AMD PDU) - if (stop_offset == 0x7FFF) { - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = rlc_pP->tx_data_pdu_buffer[snP].payload_size - 1; - stop_offset = rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop; - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] UPDATED RETRANS PDU SN %04d nack_so_stop FROM 0x7FFF to %05d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - stop_offset); - } - - // FIXED PART AMD PDU SEGMENT HEADER - // 6.2.1.5 AMD PDU segment - // AMD PDU segment consists of a Data field and an AMD PDU segment header. - // - // AMD PDU segment header consists of a fixed part (fields that are present for every AMD PDU segment) and an - // extension part (fields that are present for an AMD PDU segment when necessary). The fixed part of the AMD PDU - // segment header itself is byte aligned and consists of a D/C, a RF, a P, a FI, an E, a SN, a LSF and a SO. The extension - // part of the AMD PDU segment header itself is byte aligned and consists of E(s) and LI(s). - // - // An AMD PDU segment header consists of an extension part only when more than one Data field elements are present - // in the AMD PDU segment, in which case an E and a LI are present for every Data field element except the last. - // Furthermore, when an AMD PDU segment header consists of an odd number of LI(s), four padding bits follow after the - // last LI. - - pdu_sub_segment_p->b1 = (pdu_original_p->b1 & 0x83) | 0x40; - pdu_sub_segment_p->b2 = pdu_original_p->b2; - pdu_sub_segment_p->data[0] = ((uint8_t)(start_offset >> 8)); - pdu_sub_segment_p->data[1] = ((uint8_t)(start_offset & 0xFF)); - - *sizeP = *sizeP - 4; - - - int continue_fill_pdu_with_pdu = 1; - int test_pdu_remaining_size = *sizeP; - int test_num_li = 0; - int fill_num_li ; - int test_li_sum = 0; - int not_test_fi = 0; // by default not 1st byte and not last byte af a SDU - int test_start_offset; - unsigned int test_li_length_in_bytes = 1; - int16_t test_li_list[RLC_AM_MAX_SDU_IN_PDU]; - uint8_t* fill_payload_p; - //int test_fi_last_byte_pdu_is_last_byte_sdu = 0; - //int test_fi_first_byte_pdu_is_first_byte_sdu = 0; - - rlc_am_e_li_t* e_li_sub_segment = (rlc_am_e_li_t*)(&pdu_sub_segment_p->data[2]); - //int first_enter_in_start_offset_lt_li_sum = 1; - int not_fi_original = ((pdu_original_p->b1 & 0x18) >> 3) ^ 3; - - //------------------------------------------------------- - // set MAX payload size that can be copied - // first constraint : the size of the hole to retransmit - rlc_am_get_next_hole(ctxt_pP, rlc_pP, snP, &start_offset, &stop_offset); - max_copy_payload_size = stop_offset - start_offset + 1; - assert(max_copy_payload_size > 0); - assert(test_pdu_remaining_size > 0); - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] HOLE FOUND SO %d -> %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - start_offset, - stop_offset); - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] ORIGINAL FI %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - (pdu_original_p->b1 & 0x18) >> 3); - - // second constraint the size of the pdu_p requested by MAC layer - if (max_copy_payload_size > test_pdu_remaining_size) { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] CUT max_copy_payload_size with test_pdu_remaining_size %d -> %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - max_copy_payload_size, - test_pdu_remaining_size); - max_copy_payload_size = test_pdu_remaining_size; - } - - - if (start_offset == 0) { - not_test_fi = (not_fi_original & 0x02); - } - - test_start_offset = start_offset; - - //.find the li corresponding to the nack_so_start (start_offset) - if (pdu_info.num_li > 0) { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] ORIGINAL NUM LI %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - pdu_info.num_li); - - while ((li_index < pdu_info.num_li) && (continue_fill_pdu_with_pdu)) { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] FIND LI %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - pdu_info.li_list[li_index]); - - if (max_copy_payload_size > test_pdu_remaining_size) { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] CUT max_copy_payload_size with test_pdu_remaining_size %d -> %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - max_copy_payload_size, - test_pdu_remaining_size); - max_copy_payload_size = test_pdu_remaining_size; - } - - assert(max_copy_payload_size >= 0); - assert(test_pdu_remaining_size >= 0); - - test_li_sum += pdu_info.li_list[li_index]; - - //--------------------------------------------------------------- - if (test_start_offset < test_li_sum) { - - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] test_start_offset < test_li_sum %d < %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - test_start_offset, - test_li_sum); - /*if (test_max_copy_payload_size > (test_li_sum - test_start_offset)) { - #if TRACE_RLC_AM_RESEGMENT - LOG_D(RLC, "[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u][RE-SEGMENT] CUT test_max_copy_payload_size with test_li_sum - test_start_offset %d -> %d\n",ctxt_pP->frame, rlc_pP->module_id, rlc_pP->rb_id, test_max_copy_payload_size, test_li_sum - test_start_offset); - #endif - test_max_copy_payload_size = test_li_sum - test_start_offset; - }*/ - - if ((max_copy_payload_size + test_start_offset) < test_li_sum) { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] (max_copy_payload_size %d + test_start_offset %d) < test_li_sum %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - max_copy_payload_size, - test_start_offset, - test_li_sum); - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] COPY SO %d -> %d %d BYTES\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - test_start_offset , - test_start_offset + max_copy_payload_size - 1, - max_copy_payload_size ); - assert(max_copy_payload_size > 0); - continue_fill_pdu_with_pdu = 0; - test_pdu_copy_size = test_pdu_copy_size + max_copy_payload_size; - test_start_offset = test_start_offset + max_copy_payload_size; - not_test_fi = not_test_fi & 0x02; // clear b0, last byte does not correspond to last byte of a SDU - max_copy_payload_size = 0; - - } else if ((max_copy_payload_size + test_start_offset) == test_li_sum) { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] (max_copy_payload_size + test_start_offset) == test_li_sum %d == %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - (max_copy_payload_size + test_start_offset) , - test_li_sum); - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] COPY SO %d -> %d %d BYTES\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - test_start_offset , - test_start_offset + max_copy_payload_size - 1, - max_copy_payload_size ); - assert(max_copy_payload_size > 0); - continue_fill_pdu_with_pdu = 0; - test_pdu_copy_size = test_pdu_copy_size + max_copy_payload_size; - test_start_offset = test_start_offset + max_copy_payload_size; - not_test_fi = not_test_fi | 0x01;// set b0, last byte does correspond to last byte of a SDU - max_copy_payload_size = 0; - - } else if ((max_copy_payload_size + test_start_offset - (test_li_length_in_bytes ^ 3)) > test_li_sum) { - LOG_T(RLC, - PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] (max_copy_payload_size + test_start_offset - (test_li_length_in_bytes ^ 3)) > test_li_sum %d > %d\n SET LI %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - (max_copy_payload_size + test_start_offset) + (test_li_length_in_bytes ^ 3), - test_li_sum, - test_li_sum - test_start_offset); - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] COPY SO %d -> %d %d BYTES\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - test_start_offset , - test_li_sum - 1, - test_li_sum - test_start_offset ); - assert((test_li_sum - test_start_offset) > 0); - test_li_list[test_num_li++] = test_li_sum - test_start_offset; - test_pdu_copy_size = test_pdu_copy_size + test_li_sum - test_start_offset; - test_li_length_in_bytes = test_li_length_in_bytes ^ 3; - - test_pdu_remaining_size = test_pdu_remaining_size - test_li_sum + test_start_offset - - test_li_length_in_bytes; - - max_copy_payload_size = max_copy_payload_size - test_li_sum + test_start_offset - test_li_length_in_bytes; - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] NOW max_copy_payload_size %d BYTES test_start_offset %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - max_copy_payload_size, - test_li_sum); - // normally the next while itereation will add bytes to PDU - //not_test_fi = not_test_fi | 0x01; // set b0, last byte does correspond to last byte of a SDU - test_start_offset = test_li_sum; - - } else { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] (test_max_copy_payload_size + test_start_offset ) > test_li_sum %d > %d\n NO REMAINING SIZE FOR LI", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - (max_copy_payload_size + test_start_offset), - test_li_sum); - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] COPY SO %d -> %d %d BYTES\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - test_start_offset , - test_li_sum - 1, - test_li_sum - test_start_offset ); - assert((test_li_sum - test_start_offset) > 0); - continue_fill_pdu_with_pdu = 0; - test_pdu_copy_size = test_pdu_copy_size + test_li_sum - test_start_offset; - - test_pdu_remaining_size = test_pdu_remaining_size - test_li_sum + test_start_offset; - - max_copy_payload_size = max_copy_payload_size - test_li_sum + test_start_offset; - test_start_offset = test_li_sum; - not_test_fi = not_test_fi | 0x01; // set b0, last byte does correspond to last byte of a SDU - } - - //--------------------------------------------------------------- - // start offset start at the begining of a SDU - // and it cant be the first data field of the original PDU - } else if (test_start_offset == test_li_sum) { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] (test_start_offset == test_li_sum) %d == %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - test_start_offset , - test_li_sum); - - if ((test_num_li == 0) && (test_pdu_copy_size == 0)) { - not_test_fi = not_test_fi | 0x02; // set b1, first byte does correspond to first byte of a SDU - } - } - - li_index = li_index + 1; - } - - if ((continue_fill_pdu_with_pdu > 0) && - (li_index == pdu_info.num_li) && - (pdu_info.hidden_size > 0) && - (test_pdu_remaining_size > 0) && - (max_copy_payload_size > 0) ) { - - if (max_copy_payload_size > test_pdu_remaining_size) { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] TRYING HIDDEN SIZE...CUT max_copy_payload_size with test_pdu_remaining_size %d -> %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - max_copy_payload_size, - test_pdu_remaining_size); - max_copy_payload_size = test_pdu_remaining_size; - } - - // remaining bytes to fill, redundant check, but ... - if ((max_copy_payload_size + test_start_offset) >= (pdu_info.hidden_size + test_li_sum)) { - test_pdu_copy_size += (pdu_info.hidden_size + test_li_sum - test_start_offset); - LOG_T(RLC, - PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] COPYING WHOLE REMAINING SIZE %d (max_copy_payload_size %d, test_start_offset %d, pdu_info.hidden_size %d test_li_sum %d test_pdu_copy_size %d)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - pdu_info.hidden_size + test_li_sum - test_start_offset, - max_copy_payload_size, - test_start_offset, - pdu_info.hidden_size, - test_li_sum, - test_pdu_copy_size); - test_start_offset = pdu_info.hidden_size + test_li_sum; - not_test_fi = (not_test_fi & 0x2) | (not_fi_original & 0x1); // set b0 idendical to the b0 of the non segmented PDU - } else { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] COPYING REMAINING SIZE %d (/%d)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - max_copy_payload_size, - pdu_info.hidden_size); - test_pdu_copy_size += max_copy_payload_size; - test_start_offset = test_start_offset + max_copy_payload_size; - not_test_fi = not_test_fi & 0x2; // clear b0 because no SDU ending in this PDU - } - } - } else { // num_li == 0 - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] (num_li == 0)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); - test_pdu_copy_size = max_copy_payload_size; - - if ((stop_offset == (start_offset + max_copy_payload_size - 1)) && (stop_offset == rlc_pP->tx_data_pdu_buffer[snP].payload_size - 1)) { - not_test_fi = (not_test_fi & 0x2) | (not_fi_original & 0x1); // set b0 idendical to the b0 of the non segmented PDU - } else { - not_test_fi = not_test_fi & 0x2; // clear b0 because no SDU ending in this PDU - } - } - - //--------------------------------------------------------------- - /*if (stop_offset == (rlc_pP->tx_data_pdu_buffer[snP].payload_size - 1)) { - test_fi = (test_fi & 0x02) | (fi_original & 0x01); - }*/ - //--------------------------------------------------------------- - // write FI field in header - //--------------------------------------------------------------- - pdu_sub_segment_p->b1 = pdu_sub_segment_p->b1 | (((not_test_fi << 3) ^ 0x18) & 0x18); - //--------------------------------------------------------------- - // fill the segment pdu_p with Lis and data - //--------------------------------------------------------------- - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] fill the segment pdu_p with Lis and data, test_num_li %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), test_num_li); - - if (test_num_li > 0) { - pdu_sub_segment_p->b1 = pdu_sub_segment_p->b1 | 0x04; // set E bit - test_li_length_in_bytes = 1; - - for (fill_num_li=0; fill_num_li < test_num_li; fill_num_li++) { - test_li_length_in_bytes = test_li_length_in_bytes ^ 3; - - if (test_li_length_in_bytes == 2) { - if (fill_num_li == (test_num_li - 1)) { - e_li_sub_segment->b1 = 0; - } else { - e_li_sub_segment->b1 = 0x80; - } - - e_li_sub_segment->b1 = e_li_sub_segment->b1 | (test_li_list[fill_num_li] >> 4); - e_li_sub_segment->b2 = test_li_list[fill_num_li] << 4; - fill_payload_p = (uint8_t*)(&e_li_sub_segment->b3); - *sizeP = *sizeP - 2; - } else { - if (fill_num_li != (test_num_li - 1)) { - e_li_sub_segment->b2 = e_li_sub_segment->b2 | 0x08; - } - - e_li_sub_segment->b2 = e_li_sub_segment->b2 | (test_li_list[fill_num_li] >> 8); - e_li_sub_segment->b3 = test_li_list[fill_num_li] & 0xFF; - e_li_sub_segment++; - fill_payload_p = (uint8_t*)e_li_sub_segment; - *sizeP = *sizeP - 1; - } - - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] ADD LI %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - test_li_list[fill_num_li]); - } - } else { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] ADD NO LI\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); - fill_payload_p = (uint8_t*)e_li_sub_segment; - } - - //--------------------------------------------------------------- - // copy payload to retransmit - //--------------------------------------------------------------- - memcpy(fill_payload_p, - &rlc_pP->tx_data_pdu_buffer[snP].payload[start_offset], - test_pdu_copy_size); - - ((struct mac_tb_req*)(mb_sub_segment_p->data))->tb_size = (tb_size_t)(((uint64_t)fill_payload_p)+ test_pdu_copy_size) - ((uint64_t)(&pdu_sub_segment_p->b1)); - - // set LSF - if ((test_pdu_copy_size + start_offset) == rlc_pP->tx_data_pdu_buffer[snP].payload_size) { - pdu_sub_segment_p->data[0] = pdu_sub_segment_p->data[0] | 0x80; - - rlc_pP->tx_data_pdu_buffer[snP].flags.retransmit = 0; - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] RE-SEND DATA PDU SN %04d SO %d %d BYTES PAYLOAD %d BYTES LSF!\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - start_offset, - ((struct mac_tb_req*)(mb_sub_segment_p->data))->tb_size, - test_pdu_copy_size); - } else { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] RE-SEND DATA PDU SN %04d SO %d %d BYTES PAYLOAD %d BYTES\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - start_offset, - ((struct mac_tb_req*)(mb_sub_segment_p->data))->tb_size, - test_pdu_copy_size); - } - - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] *sizeP %d = *sizeP %d - test_pdu_copy_size %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - *sizeP - test_pdu_copy_size, *sizeP, - test_pdu_copy_size); - - *sizeP = *sizeP - test_pdu_copy_size; - //--------------------------------------------------------------- - // update nack_so_start - //--------------------------------------------------------------- - rlc_am_remove_hole(ctxt_pP, rlc_pP, snP, start_offset, test_pdu_copy_size+start_offset - 1); - //rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = rlc_pP->tx_data_pdu_buffer[snP].nack_so_start + test_pdu_copy_size; - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] RE-SEND DATA PDU SN %04d NOW nack_so_start %d nack_so_stop %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop); - /*if (rlc_pP->tx_data_pdu_buffer[snP].nack_so_start == rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop) { - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = 0; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = 0x7FFF; - }*/ - } else { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] COULD NOT GET INFO FOR DATA PDU SN %04d -> RETURN NULL\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP); - return NULL; - } - return mb_sub_segment_p; - } else { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RE-SEGMENT] RE-SEND DATA PDU SN %04d BUT NO PDU AVAILABLE -> RETURN NULL\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP); - assert(3==4); - return NULL; - } -} -#endif //----------------------------------------------------------------------------- void rlc_am_tx_buffer_display ( const protocol_ctxt_t* const ctxt_pP, @@ -1170,7 +780,11 @@ void rlc_am_tx_buffer_display ( LOG_D(RLC, "SO:%04d->%04d)\t", tx_data_pdu_buffer_p->nack_so_start, tx_data_pdu_buffer_p->nack_so_stop); } else { for (i=0; inum_holes; i++) { - assert(i < RLC_AM_MAX_HOLES_REPORT_PER_PDU); + //assert(i < RLC_AM_MAX_HOLES_REPORT_PER_PDU); + if(i >= RLC_AM_MAX_HOLES_REPORT_PER_PDU) { + LOG_E(RLC, "num_holes error. %d %d %d\n", tx_data_pdu_buffer_p->num_holes, i, RLC_AM_MAX_HOLES_REPORT_PER_PDU); + break; + } LOG_D(RLC, "SO:%04d->%04d)\t", tx_data_pdu_buffer_p->hole_so_start[i], tx_data_pdu_buffer_p->hole_so_stop[i]); } } @@ -1193,22 +807,50 @@ mem_block_t * rlc_am_get_pdu_to_retransmit( rlc_sn_t sn_end = rlc_pP->vt_s; mem_block_t* pdu_p = NULL; rlc_am_tx_data_pdu_management_t* tx_data_pdu_management; - +//Assertion(eNB)_PRAN_DesignDocument_annex No.769 + if((rlc_pP->retrans_num_pdus <= 0) || (rlc_pP->vt_a == rlc_pP->vt_s)) + { + LOG_E(RLC, "RLC AM ReTx start process Error: NbPDUtoRetx=%d vtA=%d vtS=%d LcId=%d !\n", + rlc_pP->retrans_num_pdus,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + return NULL; + } +/* AssertFatal ((rlc_pP->retrans_num_pdus > 0) && (rlc_pP->vt_a != rlc_pP->vt_s), "RLC AM ReTx start process Error: NbPDUtoRetx=%d vtA=%d vtS=%d LcId=%d !\n", rlc_pP->retrans_num_pdus,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); - +*/ do { tx_data_pdu_management = &rlc_pP->tx_data_pdu_buffer[sn % RLC_AM_WINDOW_SIZE]; if ((tx_data_pdu_management->flags.retransmit) && (tx_data_pdu_management->flags.max_retransmit == 0)) { +//Assertion(eNB)_PRAN_DesignDocument_annex No.770 + if(tx_data_pdu_management->sn != sn) + { + LOG_E(RLC, "RLC AM ReTx PDU Error: SN Error pdu_sn=%d sn=%d vtA=%d vtS=%d LcId=%d !\n", + tx_data_pdu_management->sn,sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + } +//Assertion(eNB)_PRAN_DesignDocument_annex No.771 + else if(tx_data_pdu_management->flags.transmitted != 1) + { + LOG_E(RLC, "RLC AM ReTx PDU Error: State Error sn=%d vtA=%d vtS=%d LcId=%d !\n", + sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + } +//Assertion(eNB)_PRAN_DesignDocument_annex No.772 + else if(tx_data_pdu_management->retx_payload_size <= 0) + { + LOG_E(RLC, "RLC AM ReTx PDU Error: No Data to Retx sn=%d vtA=%d vtS=%d LcId=%d !\n", + sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + } + else + { +/* AssertFatal (tx_data_pdu_management->sn == sn, "RLC AM ReTx PDU Error: SN Error pdu_sn=%d sn=%d vtA=%d vtS=%d LcId=%d !\n", tx_data_pdu_management->sn,sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); AssertFatal (tx_data_pdu_management->flags.transmitted == 1, "RLC AM ReTx PDU Error: State Error sn=%d vtA=%d vtS=%d LcId=%d !\n", sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); AssertFatal (tx_data_pdu_management->retx_payload_size > 0, "RLC AM ReTx PDU Error: No Data to Retx sn=%d vtA=%d vtS=%d LcId=%d !\n", sn,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); - +*/ /* Either the whole RLC PDU is to be transmitted and there is enough MAC TBS or there is minimum TBS size for transmitting 1 AM PDU segment */ if ((tx_data_pdu_management->retx_payload_size == tx_data_pdu_management->payload_size) && (rlc_pP->nb_bytes_requested_by_mac >= tx_data_pdu_management->header_and_payload_size)) { @@ -1256,9 +898,18 @@ mem_block_t * rlc_am_get_pdu_to_retransmit( if (pdu_p != NULL) { +//Assertion(eNB)_PRAN_DesignDocument_annex No.773 + if((tx_data_pdu_management->retx_payload_size < pdu_data_size)|| (rlc_pP->retrans_num_bytes_to_retransmit < pdu_data_size)) + { + LOG_E(RLC, "RLC AM ReTx PDU Segment Error: DataSize=%d PDUReTxsize=%d TotalReTxsize=%d sn=%d LcId=%d !\n", + pdu_data_size,tx_data_pdu_management->retx_payload_size,rlc_pP->retrans_num_bytes_to_retransmit,sn,rlc_pP->channel_id); + } + else + { +/* AssertFatal ((tx_data_pdu_management->retx_payload_size >= pdu_data_size) && (rlc_pP->retrans_num_bytes_to_retransmit >= pdu_data_size), "RLC AM ReTx PDU Segment Error: DataSize=%d PDUReTxsize=%d TotalReTxsize=%d sn=%d LcId=%d !\n", pdu_data_size,tx_data_pdu_management->retx_payload_size,rlc_pP->retrans_num_bytes_to_retransmit,sn,rlc_pP->channel_id); - +*/ tx_data_pdu_management->retx_payload_size -= pdu_data_size; rlc_pP->retrans_num_bytes_to_retransmit -= pdu_data_size; if (tx_data_pdu_management->retx_payload_size == 0) @@ -1276,6 +927,7 @@ mem_block_t * rlc_am_get_pdu_to_retransmit( rlc_pP->stat_tx_retransmit_bytes += pdu_data_size; rlc_pP->stat_tx_retransmit_bytes_by_status += pdu_data_size; + }//Assertion(eNB)_PRAN_DesignDocument_annex No.773 } } else @@ -1300,101 +952,10 @@ mem_block_t * rlc_am_get_pdu_to_retransmit( break; } + }//Assertion(eNB)_PRAN_DesignDocument_annex No.770 No.771 No.772 } - sn = RLC_AM_NEXT_SN(sn); } while((sn != sn_end) && (rlc_pP->retrans_num_pdus > 0)); return pdu_p; } - -#if 0 -//----------------------------------------------------------------------------- -void rlc_am_retransmit_any_pdu( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP) -{ - rlc_sn_t sn = (rlc_pP->vt_s - 1) & RLC_AM_SN_MASK; - rlc_sn_t sn_end = (rlc_pP->vt_a - 1) & RLC_AM_SN_MASK; - int found_pdu = 0; - rlc_sn_t found_pdu_sn = 0; // avoid warning - mem_block_t* pdu_p = NULL; - rlc_am_pdu_sn_10_t* pdu_sn_10_p = NULL; - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[FORCE-TRAFFIC] rlc_am_retransmit_any_pdu()\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); - - while (sn != sn_end) { - if (rlc_pP->tx_data_pdu_buffer[sn].mem_block != NULL) { - if (!found_pdu) { - found_pdu = 1; - found_pdu_sn = sn; - } - - if (rlc_pP->tx_data_pdu_buffer[sn].header_and_payload_size <= rlc_pP->nb_bytes_requested_by_mac) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[FORCE-TRAFFIC] RE-SEND DATA PDU SN %04d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - sn); -#if MESSAGE_CHART_GENERATOR_RLC_MAC - MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ - "0 "PROTOCOL_RLC_AM_MSC_FMT" RTX any pdu found SN %u",\ - PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), sn); -#endif - rlc_am_nack_pdu (ctxt_pP, rlc_pP, sn, 0, 0x7FFF); - // no need for update rlc_pP->nb_bytes_requested_by_mac - pdu_p = rlc_am_retransmit_get_copy(ctxt_pP, rlc_pP, sn); - pdu_sn_10_p = (rlc_am_pdu_sn_10_t*) (&pdu_p->data[sizeof(struct mac_tb_req)]); - rlc_am_pdu_polling(ctxt_pP, rlc_pP, pdu_sn_10_p, rlc_pP->tx_data_pdu_buffer[sn].header_and_payload_size,false); - //BugFix: polling is checked and done in function above ! - //pdu_sn_10_p->b1 = pdu_sn_10_p->b1 | 0x20; - //BugFix : pdu_without_poll and byte_without_poll are reset only if a Poll is transmitted - //rlc_pP->c_pdu_without_poll = 0; - //rlc_pP->c_byte_without_poll = 0; - //rlc_pP->poll_sn = (rlc_pP->vt_s -1) & RLC_AM_SN_MASK; - rlc_pP->stat_tx_data_pdu += 1; - rlc_pP->stat_tx_retransmit_pdu += 1; - rlc_pP->stat_tx_data_bytes += ((struct mac_tb_req*)(pdu_p->data))->tb_size; - rlc_pP->stat_tx_retransmit_bytes += ((struct mac_tb_req*)(pdu_p->data))->tb_size; - list_add_tail_eurecom (pdu_p, &rlc_pP->pdus_to_mac_layer); - return; - } - } - - sn = (sn - 1) & RLC_AM_SN_MASK; - } - - // no pdu_p with correct size has been found - // so re-segment a pdu_p if possible - if (found_pdu) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[FORCE-TRAFFIC] SEND SEGMENT OF DATA PDU SN %04d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - found_pdu_sn); - - if (rlc_pP->nb_bytes_requested_by_mac > 4) { -#if MESSAGE_CHART_GENERATOR_RLC_MAC - MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ - "0 "PROTOCOL_RLC_AM_MSC_FMT" RTX any pdu found SN %u (subseg)",\ - PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), found_pdu_sn); -#endif - rlc_am_nack_pdu (ctxt_pP, rlc_pP, found_pdu_sn, 0, 0x7FFF); - pdu_p = rlc_am_retransmit_get_subsegment(ctxt_pP, rlc_pP, found_pdu_sn, &rlc_pP->nb_bytes_requested_by_mac); - pdu_sn_10_p = (rlc_am_pdu_sn_10_t*) (&pdu_p->data[sizeof(struct mac_tb_req)]); - rlc_am_pdu_polling(ctxt_pP, rlc_pP, pdu_sn_10_p, rlc_pP->tx_data_pdu_buffer[found_pdu_sn].header_and_payload_size,false); - pdu_sn_10_p->b1 = pdu_sn_10_p->b1 | 0x20; - rlc_pP->c_pdu_without_poll = 0; - rlc_pP->c_byte_without_poll = 0; - //rlc_pP->poll_sn = (rlc_pP->vt_s -1) & RLC_AM_SN_MASK; - rlc_pP->stat_tx_data_pdu += 1; - rlc_pP->stat_tx_retransmit_pdu += 1; - rlc_pP->stat_tx_data_bytes += ((struct mac_tb_req*)(pdu_p->data))->tb_size; - rlc_pP->stat_tx_retransmit_bytes += ((struct mac_tb_req*)(pdu_p->data))->tb_size; - list_add_tail_eurecom (pdu_p, &rlc_pP->pdus_to_mac_layer); - return; - } else { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[FORCE-TRAFFIC] ... BUT NOT ENOUGH BYTES ALLOWED BY MAC %0d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - rlc_pP->nb_bytes_requested_by_mac); - } - } -} -#endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h index 60fefab84b..fc52689314 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h @@ -35,21 +35,6 @@ # ifndef __RLC_AM_RETRANSMIT_H__ # define __RLC_AM_RETRANSMIT_H__ //----------------------------------------------------------------------------- -# ifdef RLC_AM_RETRANSMIT_C -# define private_rlc_am_retransmit(x) x -# define protected_rlc_am_retransmit(x) x -# define public_rlc_am_retransmit(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_retransmit(x) -# define protected_rlc_am_retransmit(x) extern x -# define public_rlc_am_retransmit(x) extern x -# else -# define private_rlc_am_retransmit(x) -# define protected_rlc_am_retransmit(x) -# define public_rlc_am_retransmit(x) extern x -# endif -# endif /*! \fn boolean_t rlc_am_nack_pdu (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP, int16_t snP, int16_t prev_nack_snP,sdu_size_t so_startP, sdu_size_t so_endP) * \brief The RLC AM PDU which have the sequence number snP is marked NACKed with segment offset fields. * \param[in] ctxtP Running context. @@ -61,13 +46,13 @@ * \return OK/KO * \note It may appear a new hole in the retransmission buffer depending on the segment offset informations. Depending on the state of the retransmission buffer, negative confirmation can be sent to higher layers about the drop by the RLC AM instance of a particular SDU. */ -protected_rlc_am_retransmit(boolean_t rlc_am_nack_pdu ( +boolean_t rlc_am_nack_pdu ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, const rlc_sn_t snP, const rlc_sn_t prev_nack_snP, sdu_size_t so_startP, - sdu_size_t so_endP);) + sdu_size_t so_endP); /*! \fn void rlc_am_ack_pdu (const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t *rlcP, rlc_sn_t snP) * \brief The RLC AM PDU which have the sequence number snP is marked ACKed. @@ -77,11 +62,11 @@ protected_rlc_am_retransmit(boolean_t rlc_am_nack_pdu ( * \param[in] free_pdu Boolean indicating that the PDU can be freed because smaller than new vtA. * \note Depending on the state of the retransmission buffer, positive confirmation can be sent to higher layers about the receiving by the peer RLC AM instance of a particular SDU. */ -protected_rlc_am_retransmit(void rlc_am_ack_pdu ( +void rlc_am_ack_pdu ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, const rlc_sn_t snP, - boolean_t free_pdu);) + boolean_t free_pdu); /*! \fn mem_block_t* rlc_am_retransmit_get_copy (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *rlcP, rlc_sn_t snP) * \brief The RLC AM PDU which have the sequence number snP is marked ACKed. @@ -90,12 +75,10 @@ protected_rlc_am_retransmit(void rlc_am_ack_pdu ( * \param[in] snP Sequence number of the PDU to be copied. * \return A copy of the PDU having sequence number equal to parameter snP. */ -protected_rlc_am_retransmit(mem_block_t* rlc_am_retransmit_get_copy ( +mem_block_t* rlc_am_retransmit_get_copy ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, - const rlc_sn_t snP)); - -#if 0 + const rlc_sn_t snP); /*! \fn mem_block_t* rlc_am_retransmit_get_subsegment (const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t *rlcP,rlc_sn_t snP, sdu_size_t *sizeP) * \brief The RLC AM PDU which have the sequence number snP is marked ACKed. * \param[in] ctxtP Running context. @@ -104,32 +87,29 @@ protected_rlc_am_retransmit(mem_block_t* rlc_am_retransmit_get_copy ( * \param[in,out] sizeP Maximum size allowed for the subsegment, it is updated with the amount of bytes not used (sizeP[out] = sizeP[in] - size of segment). * \return A copy of a segment of the PDU having sequence number equal to parameter snP. */ -protected_rlc_am_retransmit(mem_block_t* rlc_am_retransmit_get_subsegment ( +mem_block_t* rlc_am_retransmit_get_subsegment ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, const rlc_sn_t snP, - sdu_size_t *const sizeP)); -#endif - + sdu_size_t *const sizeP); /*! \fn mem_block_t* rlc_am_get_pdu_to_retransmit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* rlcP) * \brief Find a PDU or PDU segment to retransmit. * \param[in] ctxtP Running context. * \param[in] rlcP RLC AM protocol instance pointer. * \return A copy of the retransmitted PDU or PDU segment or NULL if TBS was not big enough */ -protected_rlc_am_retransmit(mem_block_t* rlc_am_get_pdu_to_retransmit( +mem_block_t* rlc_am_get_pdu_to_retransmit( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlcP);) -#if 0 + + rlc_am_entity_t* const rlcP); /*! \fn void rlc_am_retransmit_any_pdu(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* rlcP) * \brief Retransmit any PDU in order to unblock peer entity, if no suitable PDU is found (depending on requested MAC size) to be retransmitted, then try to retransmit a subsegment of any PDU. * \param[in] ctxtP Running context. * \param[in] rlcP RLC AM protocol instance pointer. */ -protected_rlc_am_retransmit(void rlc_am_retransmit_any_pdu( +void rlc_am_retransmit_any_pdu( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlcP);) -#endif + rlc_am_entity_t* const rlcP); /*! \fn void rlc_am_tx_buffer_display (const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t* rlcP, char* message_pP) * \brief Display the dump of the retransmission buffer. @@ -137,9 +117,9 @@ protected_rlc_am_retransmit(void rlc_am_retransmit_any_pdu( * \param[in] rlcP RLC AM protocol instance pointer. * \param[in] message_pP Message to be displayed along with the display of the dump of the retransmission buffer. */ -protected_rlc_am_retransmit(void rlc_am_tx_buffer_display ( +void rlc_am_tx_buffer_display ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, - char* const message_pP);) + char* const message_pP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c index c0ce57708b..abe7d3310c 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c @@ -53,8 +53,17 @@ boolean_t rlc_am_rx_check_vr_reassemble( if (pdu_info_p->rf) { pdu_cursor_mgnt_p = (rlc_am_rx_pdu_management_t *) (cursor_p->data); next_waited_so = 0; +//Assertion(eNB)_PRAN_DesignDocument_annex No.785 + if(pdu_cursor_mgnt_p->all_segments_received <= 0) + { + LOG_E(RLC, "AM Rx Check Reassembly head SN=%d with PDU segments != vrR=%d should be fully received LCID=%d\n", + sn_ref,rlc_pP->vr_r,rlc_pP->channel_id); + return FALSE; + } +/* AssertFatal(pdu_cursor_mgnt_p->all_segments_received > 0,"AM Rx Check Reassembly head SN=%d with PDU segments != vrR=%d should be fully received LCID=%d\n", sn_ref,rlc_pP->vr_r,rlc_pP->channel_id); +*/ while ((cursor_p != NULL) && (pdu_info_p->sn == sn_ref) && (pdu_info_p->so == next_waited_so)) { if (pdu_cursor_mgnt_p->segment_reassembled == RLC_AM_RX_PDU_SEGMENT_REASSEMBLE_NO) { pdu_cursor_mgnt_p->segment_reassembled = RLC_AM_RX_PDU_SEGMENT_REASSEMBLE_PENDING; @@ -80,8 +89,17 @@ boolean_t rlc_am_rx_check_vr_reassemble( if ((cursor_p != NULL) && (pdu_info_p->sn == rlc_pP->vr_r)) { pdu_cursor_mgnt_p = (rlc_am_rx_pdu_management_t *) (cursor_p->data); next_waited_so = 0; +//Assertion(eNB)_PRAN_DesignDocument_annex No.786 + if(pdu_cursor_mgnt_p->all_segments_received != 0) + { + LOG_E(RLC, "AM Rx Check Reassembly vr=%d should be partly received SNHead=%d LCID=%d\n", + rlc_pP->vr_r,sn_ref,rlc_pP->channel_id); + return FALSE; + } +/* AssertFatal(pdu_cursor_mgnt_p->all_segments_received == 0,"AM Rx Check Reassembly vr=%d should be partly received SNHead=%d LCID=%d\n", rlc_pP->vr_r,sn_ref,rlc_pP->channel_id); +*/ while ((cursor_p != NULL) && (pdu_info_p->sn == rlc_pP->vr_r) && (pdu_info_p->so == next_waited_so)) { if (pdu_cursor_mgnt_p->segment_reassembled == RLC_AM_RX_PDU_SEGMENT_REASSEMBLE_NO) { pdu_cursor_mgnt_p->segment_reassembled = RLC_AM_RX_PDU_SEGMENT_REASSEMBLE_PENDING; @@ -100,8 +118,17 @@ boolean_t rlc_am_rx_check_vr_reassemble( pdu_cursor_mgnt_p = (rlc_am_rx_pdu_management_t *) (cursor_p->data); next_waited_so = 0; +//Assertion(eNB)_PRAN_DesignDocument_annex No.787 + if(pdu_cursor_mgnt_p->all_segments_received != 0) + { + LOG_E(RLC, "AM Rx Check Reassembly SNHead=vr=%d should be partly received LCID=%d\n", + rlc_pP->vr_r,rlc_pP->channel_id); + return FALSE; + } +/* AssertFatal(pdu_cursor_mgnt_p->all_segments_received == 0,"AM Rx Check Reassembly SNHead=vr=%d should be partly received LCID=%d\n", rlc_pP->vr_r,rlc_pP->channel_id); +*/ while ((cursor_p != NULL) && (pdu_info_p->sn == rlc_pP->vr_r) && (pdu_info_p->so == next_waited_so)) { if (pdu_cursor_mgnt_p->segment_reassembled == RLC_AM_RX_PDU_SEGMENT_REASSEMBLE_NO) { pdu_cursor_mgnt_p->segment_reassembled = RLC_AM_RX_PDU_SEGMENT_REASSEMBLE_PENDING; @@ -333,8 +360,15 @@ rlc_am_rx_pdu_status_t rlc_am_rx_list_handle_pdu_segment( /*****************************************************/ // 1) Find previous cursor to the PDU to insert /*****************************************************/ +//Assertion(eNB)_PRAN_DesignDocument_annex No.791 + if(cursor_p == NULL) + { + LOG_E(RLC, "AM Rx PDU Error, received buffer empty LcID=%d\n",rlc_pP->channel_id); + return RLC_AM_DATA_PDU_STATUS_HEADER_ERROR; + } +/* AssertFatal(cursor_p != NULL,"AM Rx PDU Error, received buffer empty LcID=%d\n",rlc_pP->channel_id); - +*/ do { pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; @@ -483,11 +517,20 @@ rlc_am_rx_pdu_status_t rlc_am_rx_list_handle_pdu_segment( } } +//Assertion(eNB)_PRAN_DesignDocument_annex No.792 + if((so_start_segment > so_end_segment) || (pdu_rx_info_p->so > so_start_segment) || + (so_end_segment > pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1)) + { + LOG_E(RLC, " AM RX PDU Segment Duplicate elimination error FirstSO=0 OldSOStart=%d OldSOEnd=%d newSOStart=%d newSOEnd =%d SN=%d\n", + pdu_rx_info_p->so,pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1,so_start_segment,so_end_segment,pdu_rx_info_p->sn); + return RLC_AM_DATA_PDU_STATUS_AM_SEGMENT_DUPLICATE; + } +/* AssertFatal((so_start_segment <= so_end_segment) && (pdu_rx_info_p->so <= so_start_segment) && (so_end_segment <= pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1), " AM RX PDU Segment Duplicate elimination error FirstSO=0 OldSOStart=%d OldSOEnd=%d newSOStart=%d newSOEnd =%d SN=%d\n", pdu_rx_info_p->so,pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1,so_start_segment,so_end_segment,pdu_rx_info_p->sn); - +*/ } // end pdu_info_cursor_p->so == 0 else { // Handle most likely case : PDU Segment without duplicate is inserted before first stored PDU segment @@ -527,12 +570,20 @@ rlc_am_rx_pdu_status_t rlc_am_rx_list_handle_pdu_segment( so_end_segment = pdu_info_cursor_p->so - 1; } } - +//Assertion(eNB)_PRAN_DesignDocument_annex No.793 + if((so_start_segment > so_end_segment) || + (so_end_segment > pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1)) + { + LOG_E(RLC, " AM RX PDU Segment Duplicate elimination at the end error FirstSO!=0 SOStart=%d OldSOEnd=%d newSOEnd =%d SN=%d\n", + pdu_rx_info_p->so,pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1,so_end_segment,pdu_rx_info_p->sn); + return RLC_AM_DATA_PDU_STATUS_AM_SEGMENT_DUPLICATE; + } +/* AssertFatal((so_start_segment <= so_end_segment) && (so_end_segment <= pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1), " AM RX PDU Segment Duplicate elimination at the end error FirstSO!=0 SOStart=%d OldSOEnd=%d newSOEnd =%d SN=%d\n", pdu_rx_info_p->so,pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1,so_end_segment,pdu_rx_info_p->sn); - +*/ } else { // Second Case: Duplicate at the begining and potentially at the end @@ -618,21 +669,38 @@ rlc_am_rx_pdu_status_t rlc_am_rx_list_handle_pdu_segment( so_end_segment = pdu_info_cursor_p->so - 1; } } - +//Assertion(eNB)_PRAN_DesignDocument_annex No.794 + if((so_start_segment > so_end_segment) || (pdu_rx_info_p->so > so_start_segment) || + (so_end_segment > pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1)) + { + LOG_E(RLC, " AM RX PDU Segment Duplicate elimination error FirstSO!=0 OldSOStart=%d OldSOEnd=%d newSOStart=%d newSOEnd =%d SN=%d\n", + pdu_rx_info_p->so,pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1,so_start_segment,so_end_segment,pdu_rx_info_p->sn); + return RLC_AM_DATA_PDU_STATUS_AM_SEGMENT_DUPLICATE; + } +/* AssertFatal((so_start_segment <= so_end_segment) && (pdu_rx_info_p->so <= so_start_segment) && (so_end_segment <= pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1), " AM RX PDU Segment Duplicate elimination error FirstSO!=0 OldSOStart=%d OldSOEnd=%d newSOStart=%d newSOEnd =%d SN=%d\n", pdu_rx_info_p->so,pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1,so_start_segment,so_end_segment,pdu_rx_info_p->sn); +*/ } } // end pdu_info_cursor_p->so != 0 /* Last step : duplicate bytes had been removed, build a new PDU segment */ +//Assertion(eNB)_PRAN_DesignDocument_annex No.795 + if((pdu_rx_info_p->so == so_start_segment) && (so_end_segment == pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1)) + { + LOG_E(RLC, " AM RX PDU Segment Duplicate elimination error FirstSO!=0 OldSOStart=%d OldSOEnd=%d newSOStart=%d newSOEnd =%d SN=%d\n", + pdu_rx_info_p->so,pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1,so_start_segment,so_end_segment,pdu_rx_info_p->sn); + return RLC_AM_DATA_PDU_STATUS_AM_SEGMENT_DUPLICATE; + } +/* AssertFatal((pdu_rx_info_p->so != so_start_segment) || (so_end_segment != pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1), " AM RX PDU Segment Duplicate elimination error FirstSO!=0 OldSOStart=%d OldSOEnd=%d newSOStart=%d newSOEnd =%d SN=%d\n", pdu_rx_info_p->so,pdu_rx_info_p->so + pdu_rx_info_p->payload_size - 1,so_start_segment,so_end_segment,pdu_rx_info_p->sn); - +*/ mem_block_t* trunc_segment = create_new_segment_from_pdu(tb_pP,so_start_segment - pdu_rx_info_p->so,so_end_segment - so_start_segment + 1); if (trunc_segment != NULL) { LOG_I(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[PROCESS RX PDU SEGMENT] CREATE SEGMENT FROM SEGMENT OFFSET=%d DATA LENGTH=%d SN=%d\n", @@ -672,8 +740,15 @@ rlc_am_rx_pdu_status_t rlc_am_rx_list_handle_pdu( /*****************************************************/ // 1) Find previous cursor to the PDU to insert /*****************************************************/ +//Assertion(eNB)_PRAN_DesignDocument_annex No.788 + if(cursor_p == NULL) + { + LOG_E(RLC, "AM Rx PDU Error, received buffer empty LcID=%d\n",rlc_pP->channel_id); + return RLC_AM_DATA_PDU_STATUS_HEADER_ERROR; + } +/* AssertFatal(cursor_p != NULL,"AM Rx PDU Error, received buffer empty LcID=%d\n",rlc_pP->channel_id); - +*/ do { pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; @@ -749,9 +824,25 @@ rlc_am_rx_pdu_status_t rlc_am_rx_list_handle_pdu( else { /* First update cursor until discontinuity */ previous_cursor_p = cursor_p; +//Assertion(eNB)_PRAN_DesignDocument_annex No.789 + if(pdu_info_cursor_p->rf == 0) + { + LOG_E(RLC, "AM Rx PDU Error, stored SN=%d should be a PDU segment\n",pdu_info_cursor_p->sn); + return RLC_AM_DATA_PDU_STATUS_HEADER_ERROR; + } +/* AssertFatal(pdu_info_cursor_p->rf != 0,"AM Rx PDU Error, stored SN=%d should be a PDU segment\n",pdu_info_cursor_p->sn); +*/ +//Assertion(eNB)_PRAN_DesignDocument_annex No.790 + if(((rlc_am_rx_pdu_management_t *) (cursor_p->data))->all_segments_received != 0) + { + LOG_E(RLC, "AM Rx PDU Error, stored SN=%d already fully received\n",pdu_info_cursor_p->sn); + return RLC_AM_DATA_PDU_STATUS_SN_DUPLICATE; + } +/* AssertFatal(((rlc_am_rx_pdu_management_t *) (cursor_p->data))->all_segments_received == 0, "AM Rx PDU Error, stored SN=%d already fully received\n",pdu_info_cursor_p->sn); +*/ sdu_size_t next_waited_so = 0; while ((cursor_p != NULL) && (pdu_info_cursor_p->sn == pdu_rx_info_p->sn) && (pdu_info_cursor_p->so == next_waited_so)) { next_waited_so += pdu_info_cursor_p->payload_size; @@ -836,459 +927,6 @@ rlc_am_rx_list_check_duplicate_insert_pdu( return pdu_status; } -#if 0 -// returns 0 if success -// returns neg value if failure -//----------------------------------------------------------------------------- -signed int -rlc_am_rx_list_insert_pdu( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP, - mem_block_t* const tb_pP) -{ - rlc_am_pdu_info_t* pdu_info_p = &((rlc_am_rx_pdu_management_t*)(tb_pP->data))->pdu_info; - rlc_am_pdu_info_t* pdu_info_cursor_p = NULL; - rlc_am_pdu_info_t* pdu_info_previous_cursor_p = NULL; - mem_block_t* cursor_p = NULL; - mem_block_t* previous_cursor_p = NULL; - cursor_p = rlc_pP->receiver_buffer.head; - // it is assumed this pdu is in rx window - - //TODO : check for duplicate - // should be rewrite - /* look for previous SN */ - - if (cursor_p) { - if (rlc_pP->vr_mr < rlc_pP->vr_r) { - if (pdu_info_p->sn >= rlc_pP->vr_r) { - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - - while ((cursor_p != NULL) && (pdu_info_cursor_p->sn >= rlc_pP->vr_r)) { // LG added = - if (pdu_info_p->sn < pdu_info_cursor_p->sn) { - if (previous_cursor_p != NULL) { - pdu_info_previous_cursor_p = &((rlc_am_rx_pdu_management_t*)(previous_cursor_p->data))->pdu_info; - - if (pdu_info_previous_cursor_p->sn == pdu_info_p->sn) { - if (pdu_info_p->rf != pdu_info_previous_cursor_p->rf) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d WRONG RF -> DROPPED (vr(mr) < vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } else if (pdu_info_p->rf == 1) { - if ((pdu_info_previous_cursor_p->so + pdu_info_previous_cursor_p->payload_size - 1) >= pdu_info_p->so) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SO OVERLAP -> DROPPED (vr(mr) < vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - } - } - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) > vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_insert_before_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - - } else if (pdu_info_p->sn == pdu_info_cursor_p->sn) { - if (pdu_info_cursor_p->rf == 0) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } else if (pdu_info_p->rf == 1) { - if ((pdu_info_p->so + pdu_info_p->payload_size - 1) < pdu_info_cursor_p->so) { - - if (previous_cursor_p != NULL) { - pdu_info_previous_cursor_p = &((rlc_am_rx_pdu_management_t*)(previous_cursor_p->data))->pdu_info; - - if (pdu_info_previous_cursor_p->sn == pdu_info_cursor_p->sn) { - if ((pdu_info_previous_cursor_p->so + pdu_info_previous_cursor_p->payload_size - 1) < pdu_info_p->so) { - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SEGMENT OFFSET %05d (vr(mr) < vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn, - pdu_info_p->so); - list2_insert_before_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d OVERLAP PREVIOUS SO DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - } - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SEGMENT OFFSET %05d (vr(mr) < vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn, - pdu_info_p->so); - list2_insert_before_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - - } else if (pdu_info_p->so <= pdu_info_cursor_p->so) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d OVERLAP SO DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - - previous_cursor_p = cursor_p; - cursor_p = cursor_p->next; - - if (cursor_p != NULL) { - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - } - } - - if (cursor_p != NULL) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_insert_before_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - } else { - if (pdu_info_cursor_p->rf == 0) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r) and vr(h) > vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_add_tail(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } else if ((pdu_info_p->rf == 1) && (pdu_info_cursor_p->rf == 1) && (pdu_info_p->sn == pdu_info_cursor_p->sn)) { - if ((pdu_info_cursor_p->so + pdu_info_cursor_p->payload_size - 1) < pdu_info_p->so) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r) and vr(h) > vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_add_tail(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } else if (pdu_info_p->sn != pdu_info_cursor_p->sn) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r) and vr(h) > vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_add_tail(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } - } - - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } else { // (pdu_info_p->sn < rlc_pP->vr_r) - cursor_p = rlc_pP->receiver_buffer.tail; - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - - while ((cursor_p != NULL) && (pdu_info_cursor_p->sn < rlc_pP->vr_r)) { - //pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - if (pdu_info_p->sn > pdu_info_cursor_p->sn) { - if (previous_cursor_p != NULL) { - pdu_info_previous_cursor_p = &((rlc_am_rx_pdu_management_t*)(previous_cursor_p->data))->pdu_info; - - if (pdu_info_previous_cursor_p->sn == pdu_info_cursor_p->sn) { - if (pdu_info_p->rf != pdu_info_previous_cursor_p->rf) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d WRONG RF -> DROPPED (vr(mr) < vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, pdu_info_p->sn); - return -2; - } else if (pdu_info_p->rf == 1) { - if ((pdu_info_p->so + pdu_info_p->payload_size - 1) >= pdu_info_previous_cursor_p->so) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SO OVERLAP -> DROPPED (vr(mr) < vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - } - } - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_insert_after_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - } else if (pdu_info_p->sn == pdu_info_cursor_p->sn) { - if (pdu_info_cursor_p->rf == 0) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } else if (pdu_info_p->rf == 1) { - if ((pdu_info_cursor_p->so + pdu_info_cursor_p->payload_size - 1) < pdu_info_p->so) { - - if (previous_cursor_p != NULL) { - pdu_info_previous_cursor_p = &((rlc_am_rx_pdu_management_t*)(previous_cursor_p->data))->pdu_info; - - if (pdu_info_previous_cursor_p->sn == pdu_info_cursor_p->sn) { - if ((pdu_info_p->so + pdu_info_p->payload_size - 1) < pdu_info_previous_cursor_p->so) { - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SEGMENT OFFSET %05d (vr(mr) < vr(r) and sn < vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn, - pdu_info_p->so); - list2_insert_after_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d OVERLAP PREVIOUS SO DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - } - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SEGMENT OFFSET %05d (vr(mr) < vr(r) and sn < vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn, - pdu_info_p->so); - list2_insert_after_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - - } else if (pdu_info_cursor_p->so <= pdu_info_p->so) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d OVERLAP SO DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - - previous_cursor_p = cursor_p; - cursor_p = cursor_p->previous; - - if (cursor_p != NULL) { - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - } - } - - if (cursor_p != NULL) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r) and sn < vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_insert_after_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - } else { - if (pdu_info_cursor_p->rf == 0) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r) and vr(h) > vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_add_tail(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } else if ((pdu_info_p->rf == 1) && (pdu_info_cursor_p->rf == 1) && (pdu_info_p->sn == pdu_info_cursor_p->sn)) { - if ((pdu_info_cursor_p->so + pdu_info_cursor_p->payload_size - 1) < pdu_info_p->so) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r) and vr(h) > vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_add_tail(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } else if (pdu_info_p->sn != pdu_info_cursor_p->sn) { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) < vr(r) and vr(h) > vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_add_tail(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } - } - - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } else { // (pdu_info_p->vr_mr > rlc_pP->vr_r), > and not >= - // FAR MORE SIMPLE CASE - while (cursor_p != NULL) { - //msg ("[FRAME %05u][%s][RLC_AM][MOD %u/%u][RB %u][INSERT PDU] LINE %d cursor_p %p\n", ctxt_pP->frame, rlc_pP->module_id, rlc_pP->rb_id, __LINE__, cursor_p); - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - - if (pdu_info_p->sn < pdu_info_cursor_p->sn) { - - if (previous_cursor_p != NULL) { - pdu_info_previous_cursor_p = &((rlc_am_rx_pdu_management_t*)(previous_cursor_p->data))->pdu_info; - - if (pdu_info_previous_cursor_p->sn == pdu_info_p->sn) { - if (pdu_info_p->rf != pdu_info_previous_cursor_p->rf) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d WRONG RF -> DROPPED (vr(mr) > vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } else if (pdu_info_p->rf == 1) { - if ((pdu_info_previous_cursor_p->so + pdu_info_previous_cursor_p->payload_size - 1) >= pdu_info_p->so) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SO OVERLAP -> DROPPED (vr(mr) > vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - } - } - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) > vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_insert_before_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - - } else if (pdu_info_p->sn == pdu_info_cursor_p->sn) { - if (pdu_info_cursor_p->rf == 0) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d WRONG RF -> DROPPED (vr(mr) > vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } else if (pdu_info_p->rf == 1) { - - if ((pdu_info_p->so + pdu_info_p->payload_size - 1) < pdu_info_cursor_p->so) { - - if (previous_cursor_p != NULL) { - pdu_info_previous_cursor_p = &((rlc_am_rx_pdu_management_t*)(previous_cursor_p->data))->pdu_info; - - if (pdu_info_previous_cursor_p->sn == pdu_info_cursor_p->sn) { - if ((pdu_info_previous_cursor_p->so + pdu_info_previous_cursor_p->payload_size - 1) < pdu_info_p->so) { - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SEGMENT OFFSET %05d (vr(mr) > vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn, - pdu_info_p->so); - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] PREVIOUS SO %d PAYLOAD SIZE %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - pdu_info_previous_cursor_p->so, - pdu_info_previous_cursor_p->payload_size); - list2_insert_before_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d OVERLAP PREVIOUS SO DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - } - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d SEGMENT OFFSET %05d (vr(mr) > vr(r) and sn >= vr(r))\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn, - pdu_info_p->so); - list2_insert_before_element(tb_pP, cursor_p, &rlc_pP->receiver_buffer); - return 0; - } else if (pdu_info_p->so <= pdu_info_cursor_p->so) { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d OVERLAP SO DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } - - previous_cursor_p = cursor_p; - cursor_p = cursor_p->next; - } - - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (vr(mr) > vr(r))(last inserted)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - - // pdu_info_cursor_p can not be NULL here - if (pdu_info_p->sn == pdu_info_cursor_p->sn) { - if ((pdu_info_cursor_p->so + pdu_info_cursor_p->payload_size - 1) < pdu_info_p->so) { - list2_add_tail(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d OVERLAP SO DUPLICATE -> DROPPED\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -2; - } - } else { - list2_add_tail(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } - } - } else { - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d (only inserted)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - list2_add_head(tb_pP, &rlc_pP->receiver_buffer); - return 0; - } - - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[INSERT PDU] LINE %d RX PDU SN %04d DROPPED @4\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_info_p->sn); - return -1; -} -#endif //----------------------------------------------------------------------------- void @@ -1558,7 +1196,8 @@ list2_insert_before_element ( return element_to_insert_pP; } else { - assert(2==1); + //assert(2==1); + LOG_E(RLC, "list2_insert_before_element error. element_to_insert_pP %p, element_pP %p\n", element_to_insert_pP,element_pP); return NULL; } } @@ -1585,7 +1224,8 @@ list2_insert_after_element ( return element_to_insert_pP; } else { - assert(2==1); + //assert(2==1); + LOG_E(RLC, "list2_insert_after_element error. element_to_insert_pP %p, element_pP %p\n", element_to_insert_pP,element_pP); return NULL; } } @@ -1635,7 +1275,12 @@ rlc_am_rx_list_display ( //if (cursor_p == cursor_p->next) { // rlc_am_v9_3_0_test_print_trace(); //} - assert(cursor_p != cursor_p->next); + //assert(cursor_p != cursor_p->next); + if(cursor_p == cursor_p->next) + { + LOG_E(RLC, "rlc_am_rx_list_display error. cursor_p %p, cursor_p->next %p\n", cursor_p, cursor_p->next); + break; + } cursor_p = cursor_p->next; loop++; } diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h index 9dcc75223d..fd8704964d 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h @@ -38,22 +38,6 @@ # include "UTIL/MEM/mem_block.h" //----------------------------------------------------------------------------- -# ifdef RLC_AM_RX_LIST_C -# define private_rlc_am_rx_list(x) x -# define protected_rlc_am_rx_list(x) x -# define public_rlc_am_rx_list(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_rx_list(x) -# define protected_rlc_am_rx_list(x) extern x -# define public_rlc_am_rx_list(x) extern x -# else -# define private_rlc_am_rx_list(x) -# define protected_rlc_am_rx_list(x) -# define public_rlc_am_rx_list(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- #include "platform_types.h" #include "platform_constants.h" //#include "PHY/defs.h" @@ -66,9 +50,8 @@ * \param[in] tbP A PDU embedded in a mem_block_t. * \return Zero if the PDU could be inserted in the RX buffer, a negative value if the PDU could not be inserted. */ -protected_rlc_am_rx_list( rlc_am_rx_pdu_status_t rlc_am_rx_list_check_duplicate_insert_pdu(const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t* const rlc_pP,mem_block_t* const tb_pP);) +rlc_am_rx_pdu_status_t rlc_am_rx_list_check_duplicate_insert_pdu(const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t* const rlc_pP,mem_block_t* const tb_pP); -#if 0 /*! \fn signed int rlc_am_rx_list_insert_pdu(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP , mem_block_t* const tbP) * \brief Insert a PDU in the RX buffer (implemented with a list). * \param[in] ctxt_pP Running context. @@ -76,8 +59,7 @@ protected_rlc_am_rx_list( rlc_am_rx_pdu_status_t rlc_am_rx_list_check_duplicate_ * \param[in] tbP A PDU embedded in a mem_block_t. * \return Zero if the PDU could be inserted in the RX buffer, a negative value if the PDU could not be inserted. */ -protected_rlc_am_rx_list( signed int rlc_am_rx_list_insert_pdu(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, mem_block_t* const tbP);) -#endif +signed int rlc_am_rx_list_insert_pdu(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, mem_block_t* const tbP); /*! \fn boolean_t rlc_am_rx_check_vr_reassemble(const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP) * \brief Check if reassembly taking into account potential new vrR value @@ -85,7 +67,7 @@ protected_rlc_am_rx_list( signed int rlc_am_rx_list_insert_pdu(const protocol_ct * \param[in] rlcP RLC AM protocol instance pointer. * \return TRUE if reassembly must be done, FALSE else */ -protected_rlc_am_rx_list( boolean_t rlc_am_rx_check_vr_reassemble(const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP);) +boolean_t rlc_am_rx_check_vr_reassemble(const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_rx_check_all_byte_segments(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, mem_block_t* const tbP) * \brief Check if all sub-segments of a PDU are received, if yes then call rlc_am_rx_mark_all_segments_received() procedure. @@ -93,7 +75,7 @@ protected_rlc_am_rx_list( boolean_t rlc_am_rx_check_vr_reassemble(const protocol * \param[in] rlcP RLC AM protocol instance pointer. * \param[in] tbP A PDU embedded in a mem_block_t. */ -protected_rlc_am_rx_list( void rlc_am_rx_check_all_byte_segments(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, mem_block_t* const tbP);) +void rlc_am_rx_check_all_byte_segments(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, mem_block_t* const tbP); /*! \fn void rlc_am_rx_mark_all_segments_received (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, mem_block_t* const first_segment_tbP) * \brief Mark all PDUs having the same sequence number as first_segment_tbP with the information that all segments have been received. @@ -101,14 +83,14 @@ protected_rlc_am_rx_list( void rlc_am_rx_check_all_byte_segments(const protocol_ * \param[in] rlcP RLC AM protocol instance pointer. * \param[in] first_segment_tbP A PDU embedded in a mem_block_t, it is the first PDU in the RX buffer (list) that have its sequence number. */ -protected_rlc_am_rx_list( void rlc_am_rx_mark_all_segments_received(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, mem_block_t* const first_segment_tbP);) +void rlc_am_rx_mark_all_segments_received(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, mem_block_t* const first_segment_tbP); /*! \fn void rlc_am_rx_list_reassemble_rlc_sdus(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP) * \brief Reassembly all SDUS that it is possible to reassembly by parsing the RX buffer and looking for PDUs having the flag 'all segments received'. * \param[in] ctxt_pP Running context. * \param[in] rlcP RLC AM protocol instance pointer. */ -protected_rlc_am_rx_list( void rlc_am_rx_list_reassemble_rlc_sdus(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP);) +void rlc_am_rx_list_reassemble_rlc_sdus(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP); /*! \fn mem_block_t* list2_insert_before_element (mem_block_t * element_to_insertP, mem_block_t * elementP, list2_t * listP) * \brief Insert a PDU embedded in a mem_block_t in a list at a position before a designated element of the list. @@ -116,7 +98,7 @@ protected_rlc_am_rx_list( void rlc_am_rx_list_reassemble_rlc_sdus(const protocol * \param[in] elementP Element in the list. * \param[in] listP List where elements are linked. */ -public_rlc_am_rx_list( mem_block_t* list2_insert_before_element (mem_block_t * element_to_insertP, mem_block_t * elementP, list2_t * listP);) +mem_block_t* list2_insert_before_element (mem_block_t * element_to_insertP, mem_block_t * elementP, list2_t * listP); /*! \fn mem_block_t* list2_insert_after_element (mem_block_t * element_to_insertP, mem_block_t * elementP, list2_t * listP) * \brief Insert a PDU embedded in a mem_block_t in a list at a position after a designated element of the list. @@ -124,13 +106,13 @@ public_rlc_am_rx_list( mem_block_t* list2_insert_before_element (mem_block_t * e * \param[in] elementP Element in the list. * \param[in] listP List where elements are linked. */ -public_rlc_am_rx_list( mem_block_t* list2_insert_after_element (mem_block_t * element_to_insertP, mem_block_t * elementP, list2_t * listP);) +mem_block_t* list2_insert_after_element (mem_block_t * element_to_insertP, mem_block_t * elementP, list2_t * listP); /*! \fn void rlc_am_rx_list_display (const rlc_am_entity_t* const rlcP, char* messageP) * \brief Display the dump of the RX buffer. * \param[in] rlcP RLC AM protocol instance pointer. * \param[in] messageP Message to be displayed along with the display of the dump of the RX buffer. */ -protected_rlc_am_rx_list( void rlc_am_rx_list_display (const rlc_am_entity_t* const rlcP, char* messageP);) +void rlc_am_rx_list_display (const rlc_am_entity_t* const rlcP, char* messageP); /** @} */ #endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c index fe99e137a4..03dd524a5c 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c @@ -299,7 +299,12 @@ void rlc_am_segment_10 ( pdu_mngt_p->sdus_index[pdu_mngt_p->nb_sdus++] = sdu_buffer_index; sdu_mngt_p->pdus_index[sdu_mngt_p->nb_pdus++] = rlc_pP->vt_s % RLC_AM_PDU_RETRANSMISSION_BUFFER_SIZE; - assert(sdu_mngt_p->nb_pdus < RLC_AM_MAX_SDU_FRAGMENTS); + //assert(sdu_mngt_p->nb_pdus < RLC_AM_MAX_SDU_FRAGMENTS); + if(sdu_mngt_p->nb_pdus >= RLC_AM_MAX_SDU_FRAGMENTS) { + LOG_E(RLC,PROTOCOL_RLC_AM_CTXT_FMT"[SEGMENT] loop error. %d %d\n", + PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->nb_pdus, RLC_AM_MAX_SDU_FRAGMENTS); + break; + } sdu_buffer_index = (sdu_buffer_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE; } @@ -353,6 +358,8 @@ void rlc_am_segment_10 ( PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), pdu_remaining_size); //msg ("[FRAME %05d][%s][RLC_AM][MOD %u/%u][RB %u][SEGMENT] pdu_mem_p %p pdu_p %p pdu_p->data %p data %p data_sdu_p %p pdu_remaining_size %d\n", rlc_pP->module_id, rlc_pP->rb_id, ctxt_pP->frame, pdu_mem_p, pdu_p, pdu_p->data, data, data_sdu_p,pdu_remaining_size); + rlc_am_mui.rrc_mui[rlc_am_mui.rrc_mui_num] = sdu_mngt_p->mui; + rlc_am_mui.rrc_mui_num++; memcpy(data, data_sdu_p, pdu_remaining_size); pdu_mngt_p->payload_size += pdu_remaining_size; @@ -371,6 +378,9 @@ void rlc_am_segment_10 ( LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEGMENT] Exactly Filling remaining PDU with %d remaining bytes of SDU\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), pdu_remaining_size); + rlc_am_mui.rrc_mui[rlc_am_mui.rrc_mui_num] = sdu_mngt_p->mui; + rlc_am_mui.rrc_mui_num++; + memcpy(data, data_sdu_p, pdu_remaining_size); pdu_mngt_p->payload_size += pdu_remaining_size; @@ -387,6 +397,8 @@ void rlc_am_segment_10 ( continue_fill_pdu_with_sdu = 0; pdu_remaining_size = 0; } else if ((sdu_mngt_p->sdu_remaining_size + (li_length_in_bytes ^ 3)) < pdu_remaining_size ) { + rlc_am_mui.rrc_mui[rlc_am_mui.rrc_mui_num] = sdu_mngt_p->mui; + rlc_am_mui.rrc_mui_num++; if (fill_num_li == (RLC_AM_MAX_SDU_IN_PDU - 1)) { LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEGMENT] [SIZE %d] REACHING RLC_AM_MAX_SDU_IN_PDU LIs -> STOP SEGMENTATION FOR THIS PDU SDU\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), @@ -462,11 +474,14 @@ void rlc_am_segment_10 ( rlc_pP->current_sdu_index = (rlc_pP->current_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE; } } else { - LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEGMENT] Filling PDU with %d all remaining bytes of SDU and reduce TB size by %d bytes\n", + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEGMENT] Filling PDU with %d all remaining bytes of SDU and reduce TB size by %d bytes\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size, pdu_remaining_size - sdu_mngt_p->sdu_remaining_size); - assert(1!=1); + //assert(1!=1); + rlc_am_mui.rrc_mui[rlc_am_mui.rrc_mui_num] = sdu_mngt_p->mui; + rlc_am_mui.rrc_mui_num++; + memcpy(data, data_sdu_p, sdu_mngt_p->sdu_remaining_size); pdu_mngt_p->payload_size += sdu_mngt_p->sdu_remaining_size; pdu_remaining_size = pdu_remaining_size - sdu_mngt_p->sdu_remaining_size; @@ -520,7 +535,11 @@ void rlc_am_segment_10 ( pdu_tb_req_p->data_ptr = (unsigned char*)pdu_p; pdu_tb_req_p->tb_size = data_pdu_size - pdu_remaining_size; //#warning "why 3000: changed to RLC_SDU_MAX_SIZE " - assert(pdu_tb_req_p->tb_size < RLC_SDU_MAX_SIZE ); + //assert(pdu_tb_req_p->tb_size < RLC_SDU_MAX_SIZE ); + if(pdu_tb_req_p->tb_size >= RLC_SDU_MAX_SIZE) { + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEGMENT] tb_size error. %d, %d\n", + PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),pdu_tb_req_p->tb_size, RLC_SDU_MAX_SIZE); + } rlc_am_pdu_polling(ctxt_pP, rlc_pP, pdu_p, pdu_mngt_p->payload_size,true); //list_add_tail_eurecom (pdu_mem_p, &rlc_pP->segmentation_pdu_list); diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h index aa5cb6dceb..dc754d08e4 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h @@ -35,21 +35,6 @@ # ifndef __RLC_AM_SEGMENT_H__ # define __RLC_AM_SEGMENT_H__ //----------------------------------------------------------------------------- -# ifdef RLC_AM_SEGMENT_C -# define private_rlc_am_segment(x) x -# define protected_rlc_am_segment(x) x -# define public_rlc_am_segment(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_segment(x) -# define protected_rlc_am_segment(x) extern x -# define public_rlc_am_segment(x) extern x -# else -# define private_rlc_am_segment(x) -# define protected_rlc_am_segment(x) -# define public_rlc_am_segment(x) extern x -# endif -# endif /*! \fn void rlc_am_pdu_polling (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, rlc_am_pdu_sn_10_t *pduP, int16_t payload_sizeP,boolean_t is_new_pdu) * \brief Set or not the poll bit in the PDU header depending on RLC AM protocol variables. @@ -58,13 +43,13 @@ * \param[in] pduP Pointer on the header of the PDU in order to be able to set the poll bit if necessary. * \param[in] payload_sizeP Size of the payload of the PDU. */ -protected_rlc_am_segment(void rlc_am_pdu_polling (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, rlc_am_pdu_sn_10_t *pduP, int16_t payload_sizeP,boolean_t is_new_pdu);) +void rlc_am_pdu_polling (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, rlc_am_pdu_sn_10_t *pduP, int16_t payload_sizeP,boolean_t is_new_pdu); /*! \fn void rlc_am_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlcP) * \brief Segment a PDU with 10 bits sequence number, based on segmentation information given by MAC (size to transmit). * \param[in] ctxt_pP Running context. * \param[in] rlcP RLC AM protocol instance pointer. */ -protected_rlc_am_segment(void rlc_am_segment_10 (const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t *const rlcP);) +void rlc_am_segment_10 (const protocol_ctxt_t* const ctxt_pP,rlc_am_entity_t *const rlcP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c index 1da5bbc441..a696f9a9f1 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c @@ -19,301 +19,4 @@ * contact@openairinterface.org */ -#if 0 -#define RLC_AM_MODULE 1 -#define RLC_AM_SEGMENT_HOLES_C 1 -//----------------------------------------------------------------------------- -#include "rlc_am.h" -#include "LAYER2/MAC/extern.h" -#include "UTIL/LOG/log.h" - -//----------------------------------------------------------------------------- -void rlc_am_clear_holes ( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP, - const rlc_sn_t snP) -{ - rlc_pP->tx_data_pdu_buffer[snP].num_holes = 0; -} -//----------------------------------------------------------------------------- -void rlc_am_shift_down_holes ( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP, - const rlc_sn_t snP, - const int indexP) -{ - int i; - - for (i=indexP; i < rlc_pP->tx_data_pdu_buffer[snP].num_holes - 1; i++) { - rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i] = rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i+1]; - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i] = rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i+1]; - } - - rlc_pP->tx_data_pdu_buffer[snP].num_holes = rlc_pP->tx_data_pdu_buffer[snP].num_holes - 1; -} -//----------------------------------------------------------------------------- -void rlc_am_shift_up_holes ( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP, - const rlc_sn_t snP, - const int indexP) -{ - // shift include indexP - int i; - - for (i=rlc_pP->tx_data_pdu_buffer[snP].num_holes; i > indexP; i--) { - rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i] = rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i-1]; - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i] = rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i-1]; - } - - rlc_pP->tx_data_pdu_buffer[snP].num_holes = rlc_pP->tx_data_pdu_buffer[snP].num_holes + 1; - assert(rlc_pP->tx_data_pdu_buffer[snP].num_holes < RLC_AM_MAX_HOLES_REPORT_PER_PDU); -} -//----------------------------------------------------------------------------- -void rlc_am_remove_hole ( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP, - const rlc_sn_t snP, - const sdu_size_t so_startP, - const sdu_size_t so_stopP) -{ - int i; -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, - PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] REMOVE HOLE SN %04d so_startP %05d so_stopP %05d rlc_pP->tx_data_pdu_buffer[snP].nack_so_start %05d rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop %05d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - so_startP, - so_stopP, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop); -#endif - assert(so_startP <= so_stopP); - - if (rlc_pP->tx_data_pdu_buffer[snP].num_holes == 0) { - assert(so_startP == rlc_pP->tx_data_pdu_buffer[snP].nack_so_start); - assert(so_stopP <= rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop); -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] REMOVE HOLE SN %04d MODIFIED nack_so_start %05d->%05d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start, - so_stopP+1); -#endif - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = so_stopP+1; - - if (rlc_pP->tx_data_pdu_buffer[snP].nack_so_start >= rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop) { - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = 0; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = 0x7FFF; - } - } else { - // normally should be removed in increasing order... - for (i = 0; i < rlc_pP->tx_data_pdu_buffer[snP].num_holes; i++) { - if (so_startP <= rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i]) { - if (so_stopP >= rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i]) { - rlc_am_shift_down_holes(ctxt_pP, rlc_pP, snP, i); - i = i - 1; - } else { - rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i] = so_stopP; - - if (rlc_pP->tx_data_pdu_buffer[snP].num_holes == 0) { - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = 0; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = 0x7FFF; - } else { - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[0]; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[rlc_pP->tx_data_pdu_buffer[snP].num_holes - 1]; - } - -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] REMOVE HOLE SN %04d NOW nack_so_start %05d nack_so_stop %05d num holes %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop, - rlc_pP->tx_data_pdu_buffer[snP].num_holes); -#endif - return; - } - } else if (so_startP > rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i]) { - if (so_startP <= rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i]) { - if (so_stopP < rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i]) { - // BAD CASE: 1 HOLE IS SPLITTED IN 2 HOLES - rlc_am_shift_up_holes(ctxt_pP, rlc_pP, snP, i+1); - rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i+1] = so_startP+1; - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i+1] = rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i]; - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i] = so_startP - 1; - } else { - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i] = so_startP; - } - } - } - } - - if (rlc_pP->tx_data_pdu_buffer[snP].num_holes == 0) { - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = 0; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = 0x7FFF; - } else { - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[0]; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[rlc_pP->tx_data_pdu_buffer[snP].num_holes - 1]; - } - } - -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] REMOVE HOLE SN %04d NOW nack_so_start %05d nack_so_stop %05d num holes %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start, - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop, - rlc_pP->tx_data_pdu_buffer[snP].num_holes); -#endif - assert(rlc_pP->tx_data_pdu_buffer[snP].nack_so_start < rlc_pP->tx_data_pdu_buffer[snP].payload_size); -} -//----------------------------------------------------------------------------- -void rlc_am_get_next_hole ( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP, - const rlc_sn_t snP, - sdu_size_t* const so_startP, - sdu_size_t* const so_stopP) -{ - if (rlc_pP->tx_data_pdu_buffer[snP].num_holes == 0) { - *so_startP = rlc_pP->tx_data_pdu_buffer[snP].nack_so_start; - *so_stopP = rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop; -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] rlc_am_get_next_hole(SN %04d) %05d->%05d (NUM HOLES == 0)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - *so_startP, - *so_stopP); -#endif - } else { - *so_startP = rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[0]; - *so_stopP = rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[0]; -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] rlc_am_get_next_hole(SN %04d) %05d->%05d (NUM HOLES == %d)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - *so_startP, - *so_stopP, - rlc_pP->tx_data_pdu_buffer[snP].num_holes); -#endif - } -} -//----------------------------------------------------------------------------- -void rlc_am_add_hole ( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP, - const rlc_sn_t snP, - const sdu_size_t so_startP, - sdu_size_t so_stopP) -{ - int i, hole_index; - - assert(so_startP <= so_stopP); - assert(so_startP < 0x7FFF); - assert(so_stopP <= 0x7FFF); - - - // if global NACK - if ((so_startP == 0) && ((so_stopP == 0x7FFF) || (so_stopP == rlc_pP->tx_data_pdu_buffer[snP].payload_size - 1))) { - rlc_pP->tx_data_pdu_buffer[snP].num_holes = 0; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = so_startP; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = so_stopP; -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] SN %04d GLOBAL NACK 0->%05d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - so_stopP); -#endif - assert(rlc_pP->tx_data_pdu_buffer[snP].nack_so_start < rlc_pP->tx_data_pdu_buffer[snP].payload_size); - return; - } - - if (so_stopP == 0x7FFF) { - so_stopP = rlc_pP->tx_data_pdu_buffer[snP].payload_size - 1; - } - - // first hole - if (rlc_pP->tx_data_pdu_buffer[snP].num_holes == 0) { - rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[0] = so_startP; - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop [0] = so_stopP; - - rlc_pP->tx_data_pdu_buffer[snP].num_holes = 1; - - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = so_startP; - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = so_stopP; -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] FIRST HOLE SN %04d GLOBAL NACK %05d->%05d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - snP, - so_startP, - so_stopP); -#endif - assert(rlc_pP->tx_data_pdu_buffer[snP].nack_so_start < rlc_pP->tx_data_pdu_buffer[snP].payload_size); - return; - } - - hole_index = 0; - - while (hole_index < rlc_pP->tx_data_pdu_buffer[snP].num_holes) { - if (so_stopP < rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[hole_index]) { - assert(rlc_pP->tx_data_pdu_buffer[snP].num_holes < RLC_AM_MAX_HOLES_REPORT_PER_PDU); - - if (hole_index > 0) { - assert(so_startP > rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[hole_index-1]); - } - - for (i=rlc_pP->tx_data_pdu_buffer[snP].num_holes; i >= hole_index; i--) { - rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i] = rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[i-1]; - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i] = rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[i-1]; - } - - rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[hole_index] = so_startP; - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[hole_index] = so_stopP; - - // update nack "window" vars nack_so_start, nack_so_stop - if (hole_index == 0) { - rlc_pP->tx_data_pdu_buffer[snP].nack_so_start = so_startP; - } - - rlc_pP->tx_data_pdu_buffer[snP].num_holes += 1; -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] INSERT %d th HOLE SN %04d GLOBAL NACK %05d->%05d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - rlc_pP->tx_data_pdu_buffer[snP].num_holes, - snP, - so_startP, - so_stopP); -#endif - assert(rlc_pP->tx_data_pdu_buffer[snP].nack_so_start < rlc_pP->tx_data_pdu_buffer[snP].payload_size); - assert(rlc_pP->tx_data_pdu_buffer[snP].num_holes < RLC_AM_MAX_HOLES_REPORT_PER_PDU); - return; - } - - hole_index = hole_index + 1; - } - - // if here insert to the "tail" - if (so_startP > rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[hole_index - 1]) { - assert(rlc_pP->tx_data_pdu_buffer[snP].num_holes < RLC_AM_MAX_HOLES_REPORT_PER_PDU); - rlc_pP->tx_data_pdu_buffer[snP].hole_so_start[hole_index] = so_startP; - rlc_pP->tx_data_pdu_buffer[snP].hole_so_stop[hole_index] = so_stopP; - rlc_pP->tx_data_pdu_buffer[snP].num_holes += 1; - // update nack "window" vars nack_so_start, nack_so_stop - rlc_pP->tx_data_pdu_buffer[snP].nack_so_stop = so_stopP; -#if TRACE_RLC_AM_HOLE - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] INSERT THE %d th LAST HOLE SN %04d GLOBAL NACK %05d->%05d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - rlc_pP->tx_data_pdu_buffer[snP].num_holes, - snP, - so_startP, - so_stopP); -#endif - } else { - assert(1==2); - } - - assert(rlc_pP->tx_data_pdu_buffer[snP].num_holes < RLC_AM_MAX_HOLES_REPORT_PER_PDU); - assert(rlc_pP->tx_data_pdu_buffer[snP].nack_so_start < rlc_pP->tx_data_pdu_buffer[snP].payload_size); -} -#endif +/* This file is empty. Might be deleted ? */ diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h index 7c22697ac4..0b237b07f4 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h @@ -32,35 +32,19 @@ * @ingroup _rlc_am_internal_segment_impl_ * @{ */ -#if 0 #ifndef __RLC_AM_SEGMENT_HOLES_H__ # define __RLC_AM_SEGMENT_HOLES_H__ //----------------------------------------------------------------------------- -# ifdef RLC_AM_SEGMENT_HOLES_C -# define private_rlc_am_segments_holes(x) x -# define protected_rlc_am_segments_holes(x) x -# define public_rlc_am_segments_holes(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_segments_holes(x) -# define protected_rlc_am_segments_holes(x) extern x -# define public_rlc_am_segments_holes(x) extern x -# else -# define private_rlc_am_segments_holes(x) -# define protected_rlc_am_segments_holes(x) -# define public_rlc_am_segments_holes(x) extern x -# endif -# endif /*! \fn void rlc_am_clear_holes (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlcP, rlc_sn_t snP) * \brief Remove all marked holes for PDU with sequence number "snP". * \param[in] ctxt_pP Running context. * \param[in] rlcP RLC AM protocol instance pointer. * \param[in] snP Sequence number. */ -protected_rlc_am_segments_holes(void rlc_am_clear_holes ( +void rlc_am_clear_holes ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, - const rlc_sn_t snP);) + const rlc_sn_t snP); /*! \fn void rlc_am_remove_hole (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlcP, rlc_sn_t snP, sdu_size_t so_startP, sdu_size_t so_stopP) * \brief Remove for PDU with sequence number "snP" a NACK for byte segment offset [so_startP, so_stopP]. @@ -70,12 +54,12 @@ protected_rlc_am_segments_holes(void rlc_am_clear_holes ( * \param[in] so_startP Start of segment offset. * \param[in] so_stopP End of segment offset. */ -protected_rlc_am_segments_holes(void rlc_am_remove_hole ( +void rlc_am_remove_hole ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, const rlc_sn_t snP, const sdu_size_t so_startP, - const sdu_size_t so_stopP);) + const sdu_size_t so_stopP); /*! \fn void rlc_am_get_next_hole (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlcP, rlc_sn_t snP, sdu_size_t* so_startP, sdu_size_t* so_stopP) * \brief Get for PDU with sequence number "snP" the first hole start and stop parameters. @@ -85,12 +69,12 @@ protected_rlc_am_segments_holes(void rlc_am_remove_hole ( * \param[in,out] so_startP Start of segment offset. * \param[in,out] so_stopP End of segment offset. */ -protected_rlc_am_segments_holes(void rlc_am_get_next_hole ( +void rlc_am_get_next_hole ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, const rlc_sn_t snP, sdu_size_t* const so_startP, - sdu_size_t* const so_stopP);) + sdu_size_t* const so_stopP); /*! \fn void rlc_am_add_hole (const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlcP, rlc_sn_t snP, sdu_size_t so_startP, sdu_size_t so_stopP) * \brief Mark for PDU with sequence number "snP" a NACK for byte segment offset [so_startP, so_stopP]. @@ -100,12 +84,11 @@ protected_rlc_am_segments_holes(void rlc_am_get_next_hole ( * \param[in,out] so_startP Start of segment offset. * \param[in,out] so_stopP End of segment offset. */ -protected_rlc_am_segments_holes(void rlc_am_add_hole ( +void rlc_am_add_hole ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, const rlc_sn_t snP, const sdu_size_t so_startP, - sdu_size_t so_stopP);) + sdu_size_t so_stopP); /** @} */ #endif -#endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c index 3ace3cc51f..7def8e01fc 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c @@ -153,7 +153,10 @@ rlc_am_write16_bit_field( signed int bits_to_writeP, const uint16_t valueP) { - assert(bits_to_writeP <= 16); + //assert(bits_to_writeP <= 16); + if(bits_to_writeP > 16) { + LOG_E(RLC, "bits_to_writeP error. %d\n", bits_to_writeP); + } if (bits_to_writeP > 8) { rlc_am_write8_bit_field(data_ppP,bit_pos_pP, bits_to_writeP - 8, (uint8_t)(valueP >> 8)); @@ -211,6 +214,9 @@ rlc_am_get_control_pdu_infos( if (!pdu_info_pP->nack_list[pdu_info_pP->num_nack - 1].e1) { nack_to_read = 0; *total_size_pP = *total_size_pP - (sdu_size_t)((uint64_t)byte_pos_p + (uint64_t)((bit_pos + 7)/8) - (uint64_t)header_pP); + if (*total_size_pP != 0) { + LOG_E(RLC, "[RLC_AM_GET_CONTROL_PDU_INFOS][FIRST]header_pP->b1=%d,header_pP->b2=%d\n",header_pP->b1,header_pP->b2); + } return 0; } @@ -224,7 +230,9 @@ rlc_am_get_control_pdu_infos( } else { *total_size_pP = *total_size_pP - 2; } - + if (*total_size_pP != 0) { + LOG_E(RLC, "[RLC_AM_GET_CONTROL_PDU_INFOS][SECOND]header_pP->b1=%d,header_pP->b2=%d\n",header_pP->b1,header_pP->b2); + } return 0; } else { return -1; @@ -308,8 +316,13 @@ rlc_am_receive_process_control_pdu( // POLL_SN: // - if t-PollRetransmit is running: // - stop and reset t-PollRetransmit. - assert(ack_sn < RLC_AM_SN_MODULO); - assert(rlc_pP->control_pdu_info.num_nack < RLC_AM_MAX_NACK_IN_STATUS_PDU); + //assert(ack_sn < RLC_AM_SN_MODULO); + //assert(rlc_pP->control_pdu_info.num_nack < RLC_AM_MAX_NACK_IN_STATUS_PDU); + if(ack_sn >= RLC_AM_SN_MODULO || rlc_pP->control_pdu_info.num_nack >= RLC_AM_MAX_NACK_IN_STATUS_PDU) { + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT" illegal ack_sn %d, num_nack %d\n", + PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), ack_sn, rlc_pP->control_pdu_info.num_nack); + return; + } /* Note : ackSn can be equal to current vtA only in case the status pdu contains a list of nack_sn with same value = vtA with SOStart/SOEnd */ /* and meaning the report is not complete due to not enough ressources to fill all SOStart/SOEnd of this NACK_SN */ @@ -387,13 +400,15 @@ rlc_am_receive_process_control_pdu( } else { - LOG_N(RLC, PROTOCOL_RLC_AM_CTXT_FMT" WARNING CONTROL PDU ACK SN %d OUT OF WINDOW vtA=%d vtS=%d\n", + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT" WARNING CONTROL PDU ACK SN %d OUT OF WINDOW vtA=%d vtS=%d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),ack_sn,rlc_pP->vt_a,rlc_pP->vt_s); + *tb_size_in_bytes_pP = 0; status = FALSE; } } else { - LOG_W(RLC, PROTOCOL_RLC_AM_CTXT_FMT" ERROR IN DECODING CONTROL PDU\n", + LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT" ERROR IN DECODING CONTROL PDU\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); + *tb_size_in_bytes_pP = 0; status = FALSE; } @@ -610,10 +625,13 @@ rlc_am_send_status_pdu( /* Now process all Segments of sn_cursor if PDU not fully received */ if ((!status_report_completed) && (all_segments_received == 0) && (sn_cursor != rlc_pP->vr_ms)) { - AssertFatal (sn_nack == sn_cursor, "RLC AM Tx Status PDU Data sn_nack=%d and sn_cursor=%d should be equal LcId=%d\n",sn_nack,sn_cursor, rlc_pP->channel_id); + //AssertFatal (sn_nack == sn_cursor, "RLC AM Tx Status PDU Data sn_nack=%d and sn_cursor=%d should be equal LcId=%d\n",sn_nack,sn_cursor, rlc_pP->channel_id); + if(sn_nack != sn_cursor){ + LOG_E(RLC, "RLC AM Tx Status PDU Data sn_nack=%d and sn_cursor=%d should be equal LcId=%d\n",sn_nack,sn_cursor, rlc_pP->channel_id); + } /* First ensure there is enough TBS for at least 1 SOStart/SOEnd, else break */ - if ((nb_bits_transmitted + RLC_AM_SN_BITS + (RLC_AM_PDU_E_BITS << 1) + (RLC_AM_STATUS_PDU_SO_LENGTH << 1)) <= nb_bits_to_transmit) { + else if ((nb_bits_transmitted + RLC_AM_SN_BITS + (RLC_AM_PDU_E_BITS << 1) + (RLC_AM_STATUS_PDU_SO_LENGTH << 1)) <= nb_bits_to_transmit) { /* Init loop flags */ /* Check lsf */ segment_loop_end = (pdu_info_cursor_p->lsf == 1); @@ -756,8 +774,14 @@ rlc_am_send_status_pdu( } // End main while NACK_SN /* Clear E1 of last nack_sn entry */ - AssertFatal ((control_pdu_info.num_nack) || (all_segments_received == 0), "RLC AM Tx Status PDU Data Error no NACK_SN vrR=%d vrMS=%d lastSN_NACK=%d Completed=%d NbBytesAvailable=%d LcId=%d\n", - rlc_pP->vr_r,rlc_pP->vr_ms,sn_nack,status_report_completed,(nb_bits_to_transmit >> 3),rlc_pP->channel_id); +// AssertFatal ((control_pdu_info.num_nack) || (all_segments_received == 0), "RLC AM Tx Status PDU Data Error no NACK_SN vrR=%d vrMS=%d lastSN_NACK=%d Completed=%d NbBytesAvailable=%d LcId=%d\n", +// rlc_pP->vr_r,rlc_pP->vr_ms,sn_nack,status_report_completed,(nb_bits_to_transmit >> 3),rlc_pP->channel_id); + if (!((control_pdu_info.num_nack) || (all_segments_received == 0))){ + LOG_E(RLC, "RLC AM Tx Status PDU Data Error no NACK_SN vrR=%d vrMS=%d lastSN_NACK=%d Completed=%d NbBytesAvailable=%d LcId=%d\n", + rlc_pP->vr_r,rlc_pP->vr_ms,sn_nack,status_report_completed,(nb_bits_to_transmit >> 3),rlc_pP->channel_id); + return; + } + if (control_pdu_info.num_nack) { control_pdu_info.nack_list[control_pdu_info.num_nack - 1].e1 = 0; } @@ -795,8 +819,13 @@ rlc_am_send_status_pdu( /* encode the control pdu */ pdu_size = (nb_bits_transmitted + 7) >> 3; - AssertFatal (pdu_size <= rlc_pP->nb_bytes_requested_by_mac, "RLC AM Tx Status PDU Data size=%d bigger than remaining TBS=%d nb_bits_transmitted=%d LcId=%d\n", +// AssertFatal (pdu_size <= rlc_pP->nb_bytes_requested_by_mac, "RLC AM Tx Status PDU Data size=%d bigger than remaining TBS=%d nb_bits_transmitted=%d LcId=%d\n", +// pdu_size,rlc_pP->nb_bytes_requested_by_mac,nb_bits_transmitted, rlc_pP->channel_id); + if(pdu_size > rlc_pP->nb_bytes_requested_by_mac){ + LOG_E(RLC, "RLC AM Tx Status PDU Data size=%d bigger than remaining TBS=%d nb_bits_transmitted=%d LcId=%d\n", pdu_size,rlc_pP->nb_bytes_requested_by_mac,nb_bits_transmitted, rlc_pP->channel_id); + return; + } #if TRACE_RLC_AM_STATUS_CREATION @@ -806,6 +835,7 @@ rlc_am_send_status_pdu( pdu_size); #endif tb_p = get_free_mem_block(sizeof(struct mac_tb_req) + pdu_size, __func__); + if(tb_p == NULL) return; memset(tb_p->data, 0, sizeof(struct mac_tb_req) + pdu_size); //estimation only ((struct mac_tb_req*)(tb_p->data))->tb_size = pdu_size; ((struct mac_tb_req*)(tb_p->data))->data_ptr = (uint8_t*)&(tb_p->data[sizeof(struct mac_tb_req)]); @@ -824,8 +854,14 @@ rlc_am_send_status_pdu( nb_bits_to_transmit >> 3); #endif - AssertFatal (pdu_size == ((nb_bits_transmitted + 7) >> 3), "RLC AM Tx Status PDU Data encoding size=%d different than expected=%d LcId=%d\n", +// AssertFatal (pdu_size == ((nb_bits_transmitted + 7) >> 3), "RLC AM Tx Status PDU Data encoding size=%d different than expected=%d LcId=%d\n", +// pdu_size,((nb_bits_transmitted + 7) >> 3), rlc_pP->channel_id); + if(pdu_size != ((nb_bits_transmitted + 7) >> 3)){ + LOG_E(RLC, "RLC AM Tx Status PDU Data encoding size=%d different than expected=%d LcId=%d\n", pdu_size,((nb_bits_transmitted + 7) >> 3), rlc_pP->channel_id); + pdu_size = 0; + return; + } // remaining bytes to transmit for RLC (retrans pdus and new data pdus) rlc_pP->nb_bytes_requested_by_mac = rlc_pP->nb_bytes_requested_by_mac - pdu_size; @@ -837,344 +873,3 @@ rlc_am_send_status_pdu( } -#if 0 -//----------------------------------------------------------------------------- -void -rlc_am_send_status_pdu_backup( - const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP -) -{ - // When STATUS reporting has been triggered, the receiving side of an AM RLC entity shall: - // - if t-StatusProhibit is not running: - // - at the first transmission opportunity indicated by lower layer, construct a STATUS PDU and deliver it to lower layer; - // - else: - // - at the first transmission opportunity indicated by lower layer after t-StatusProhibit expires, construct a single - // STATUS PDU even if status reporting was triggered several times while t-StatusProhibit was running and - // deliver it to lower layer; - // - // When a STATUS PDU has been delivered to lower layer, the receiving side of an AM RLC entity shall: - // - start t-StatusProhibit. - // - // When constructing a STATUS PDU, the AM RLC entity shall: - // - for the AMD PDUs with SN such that VR(R) <= SN < VR(MR) that has not been completely received yet, in - // increasing SN of PDUs and increasing byte segment order within PDUs, starting with SN = VR(R) up to - // the point where the resulting STATUS PDU still fits to the total size of RLC PDU(s) indicated by lower layer: - // - for an AMD PDU for which no byte segments have been received yet:: - // - include in the STATUS PDU a NACK_SN which is set to the SN of the AMD PDU; - // - for a continuous sequence of byte segments of a partly received AMD PDU that have not been received yet: - // - include in the STATUS PDU a set of NACK_SN, SOstart and SOend - // - set the ACK_SN to the SN of the next not received RLC Data PDU which is not indicated as missing in the - // resulting STATUS PDU. - - signed int nb_bits_to_transmit = rlc_pP->nb_bytes_requested_by_mac << 3; - rlc_am_control_pdu_info_t control_pdu_info; - rlc_am_pdu_info_t *pdu_info_cursor_p = NULL; - rlc_sn_t previous_sn_cursor = (rlc_pP->vr_r - 1) & RLC_AM_SN_MASK; - rlc_sn_t sn_cursor = 0; - mem_block_t *cursor_p = rlc_pP->receiver_buffer.head; - int all_segments_received = 0; - int waited_so = 0; - mem_block_t *tb_p = NULL; - sdu_size_t pdu_size = 0; - - memset(&control_pdu_info, 0, sizeof(rlc_am_control_pdu_info_t)); - // header size - nb_bits_to_transmit = nb_bits_to_transmit - 15; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] nb_bits_to_transmit %d (15 already allocated for header)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - nb_bits_to_transmit); - rlc_am_rx_list_display(rlc_pP, " DISPLAY BEFORE CONSTRUCTION OF STATUS REPORT"); -#endif - - - if (cursor_p != NULL) { - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - sn_cursor = pdu_info_cursor_p->sn; - - while (!(RLC_AM_SN_IN_WINDOW(sn_cursor, rlc_pP->vr_r))) { - cursor_p = cursor_p->next; - previous_sn_cursor = sn_cursor; - - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - sn_cursor = pdu_info_cursor_p->sn; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d FIND VR(R) <= SN sn_cursor %04d -> %04d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - previous_sn_cursor, - sn_cursor); -#endif - } - - // 12 bits = size of NACK_SN field + E1, E2 bits - // 42 bits = size of NACK_SN field + SO_START, SO_END fields, E1, E2 bits - while ((cursor_p != NULL) && (nb_bits_to_transmit >= 12)) { - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - all_segments_received = ((rlc_am_rx_pdu_management_t*)(cursor_p->data))->all_segments_received; - sn_cursor = pdu_info_cursor_p->sn; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d LOOPING sn_cursor %04d previous sn_cursor %04d \n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - sn_cursor, - previous_sn_cursor); -#endif - - // ------------------------------------------------------------------------------- - // case resegmentation : several PDUs related to the same SN queued in list - // ------------------------------------------------------------------------------- - if (sn_cursor == previous_sn_cursor) { - do { - cursor_p = cursor_p->next; - - if (cursor_p != NULL) { - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - all_segments_received = ((rlc_am_rx_pdu_management_t*)(cursor_p->data))->all_segments_received; - sn_cursor = pdu_info_cursor_p->sn; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d NOW sn_cursor %04d \n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - sn_cursor); -#endif - } else { - if (all_segments_received) { - control_pdu_info.ack_sn = (sn_cursor + 1) & RLC_AM_SN_MASK; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING ACK SN %04d \n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - control_pdu_info.ack_sn); -#endif - } else { - control_pdu_info.ack_sn = (previous_sn_cursor + 1) & RLC_AM_SN_MASK; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING ACK SN %04d (CASE PREVIOUS SN)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - control_pdu_info.ack_sn); -#endif - } - - goto end_push_nack; - } - } while ((cursor_p != NULL) && (sn_cursor == previous_sn_cursor)); - } - - // ------------------------------------------------------------------------------- - // simple case, PDU(s) is/are missing - // ------------------------------------------------------------------------------- - while (((previous_sn_cursor + 1) & RLC_AM_SN_MASK) != sn_cursor) { - if (nb_bits_to_transmit > 12) { - previous_sn_cursor = (previous_sn_cursor + 1) & RLC_AM_SN_MASK; - control_pdu_info.nack_list[control_pdu_info.num_nack].nack_sn = previous_sn_cursor; - control_pdu_info.nack_list[control_pdu_info.num_nack].so_start = 0; - control_pdu_info.nack_list[control_pdu_info.num_nack].so_end = 0x7ff; - control_pdu_info.nack_list[control_pdu_info.num_nack].e1 = 1; - control_pdu_info.nack_list[control_pdu_info.num_nack].e2 = 0; - control_pdu_info.num_nack += 1; - nb_bits_to_transmit = nb_bits_to_transmit - 12; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING NACK %04d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - previous_sn_cursor); -#endif - } else { - control_pdu_info.ack_sn = (previous_sn_cursor + 1) & RLC_AM_SN_MASK; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d NO MORE BITS FOR SENDING NACK %04d -> ABORT AND SET FINAL ACK %04d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - previous_sn_cursor, - control_pdu_info.ack_sn); -#endif - goto end_push_nack; - } - } - - // ------------------------------------------------------------------------------- - // not so simple case, a resegmented PDU(s) is missing - // ------------------------------------------------------------------------------- - if (all_segments_received == 0) { - waited_so = 0; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] if (all_segments_received == 0) \n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); -#endif - - do { - if (pdu_info_cursor_p->so > waited_so) { - if (nb_bits_to_transmit >= 42) { - control_pdu_info.nack_list[control_pdu_info.num_nack].nack_sn = sn_cursor; - control_pdu_info.nack_list[control_pdu_info.num_nack].so_start = waited_so; - control_pdu_info.nack_list[control_pdu_info.num_nack].so_end = pdu_info_cursor_p->so - 1; - control_pdu_info.nack_list[control_pdu_info.num_nack].e1 = 1; - control_pdu_info.nack_list[control_pdu_info.num_nack].e2 = 1; - control_pdu_info.num_nack += 1; - nb_bits_to_transmit = nb_bits_to_transmit - 42; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING NACK %04d SO START %05d SO END %05d (CASE SO %d > WAITED SO %d)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - sn_cursor, - waited_so, - pdu_info_cursor_p->so - 1, - pdu_info_cursor_p->so, - waited_so); -#endif - - if (pdu_info_cursor_p->lsf == 1) { // last segment flag - //waited_so = 0x7FF; - waited_so = 0x7FFF; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d SN %04d SET WAITED SO 0x7FFF)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, sn_cursor); -#endif - //break; - } else { - waited_so = pdu_info_cursor_p->so + pdu_info_cursor_p->payload_size; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d SN %04d SET WAITED SO %d @1\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - sn_cursor, - waited_so); -#endif - } - } else { - control_pdu_info.ack_sn = sn_cursor; - goto end_push_nack; - } - } else { //else { // pdu_info_cursor_p->so <= waited_so - waited_so = pdu_info_cursor_p->so + pdu_info_cursor_p->payload_size; - - if (pdu_info_cursor_p->lsf == 1) { // last segment flag - //waited_so = 0x7FF; - waited_so = 0x7FFF; - } - -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d SN %04d SET WAITED SO %d @2\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - sn_cursor, waited_so); -#endif - } - - cursor_p = cursor_p->next; - - if (cursor_p != NULL) { - pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; - all_segments_received = ((rlc_am_rx_pdu_management_t*)(cursor_p->data))->all_segments_received; - previous_sn_cursor = sn_cursor; - sn_cursor = pdu_info_cursor_p->sn; - } else { - // LG control_pdu_info.ack_sn = (previous_sn_cursor + 1) & RLC_AM_SN_MASK; - control_pdu_info.ack_sn = previous_sn_cursor; - goto end_push_nack; - } - } while ((cursor_p != NULL) && (sn_cursor == previous_sn_cursor)); - - // may be last segment of PDU not received - //if ((sn_cursor != previous_sn_cursor) && (waited_so != 0x7FF)) { - if ((sn_cursor != previous_sn_cursor) && (waited_so != 0x7FFF)) { - if (nb_bits_to_transmit >= 42) { - control_pdu_info.nack_list[control_pdu_info.num_nack].nack_sn = previous_sn_cursor; - control_pdu_info.nack_list[control_pdu_info.num_nack].so_start = waited_so; - //control_pdu_info.nack_list[control_pdu_info.num_nack].so_end = 0x7FF; - control_pdu_info.nack_list[control_pdu_info.num_nack].so_end = 0x7FFF; - control_pdu_info.nack_list[control_pdu_info.num_nack].e1 = 1; - control_pdu_info.nack_list[control_pdu_info.num_nack].e2 = 1; - control_pdu_info.num_nack += 1; - nb_bits_to_transmit = nb_bits_to_transmit - 42; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING NACK %04d SO START %05d SO END %05d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - previous_sn_cursor, - waited_so, - 0x7FFF); -#endif - } else { - control_pdu_info.ack_sn = previous_sn_cursor; - goto end_push_nack; - } - } - - waited_so = 0; - } else { - waited_so = 0; - cursor_p = cursor_p->next; - previous_sn_cursor = sn_cursor; - } - } - - control_pdu_info.ack_sn = (previous_sn_cursor + 1) & RLC_AM_SN_MASK; - } else { - control_pdu_info.ack_sn = rlc_pP->vr_r; -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING ACK %04d = VR(R)\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - control_pdu_info.ack_sn); -#endif - } - -end_push_nack: - - if (control_pdu_info.num_nack > 0) { - control_pdu_info.nack_list[control_pdu_info.num_nack - 1].e1 = 0; - } - - //msg ("[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u] nb_bits_to_transmit %d\n", - // rlc_pP->module_id, rlc_pP->rb_id, ctxt_pP->frame,nb_bits_to_transmit); - -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING ACK %04d NUM NACK %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - control_pdu_info.ack_sn, - control_pdu_info.num_nack); -#endif - // encode the control pdu - pdu_size = rlc_pP->nb_bytes_requested_by_mac - ((nb_bits_to_transmit - 7 )>> 3); - -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d forecast pdu_size %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - __LINE__, - pdu_size); -#endif - tb_p = get_free_mem_block(sizeof(struct mac_tb_req) + pdu_size, __func__); - memset(tb_p->data, 0, sizeof(struct mac_tb_req) + pdu_size); - //estimation only ((struct mac_tb_req*)(tb_p->data))->tb_size = pdu_size; - ((struct mac_tb_req*)(tb_p->data))->data_ptr = (uint8_t*)&(tb_p->data[sizeof(struct mac_tb_req)]); - - // warning reuse of pdu_size - pdu_size = rlc_am_write_status_pdu(ctxt_pP, rlc_pP,(rlc_am_pdu_sn_10_t*)(((struct mac_tb_req*)(tb_p->data))->data_ptr), &control_pdu_info); - ((struct mac_tb_req*)(tb_p->data))->tb_size = pdu_size; - //assert((((struct mac_tb_req*)(tb_p->data))->tb_size) < 3000); - -#if TRACE_RLC_AM_STATUS_CREATION - LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] SEND STATUS PDU SIZE %d, rlc_pP->nb_bytes_requested_by_mac %d, nb_bits_to_transmit>>3 %d\n", - PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), - pdu_size, - rlc_pP->nb_bytes_requested_by_mac, - nb_bits_to_transmit >> 3); -#endif - assert(pdu_size == (rlc_pP->nb_bytes_requested_by_mac - (nb_bits_to_transmit >> 3))); - - // remaining bytes to transmit for RLC (retrans pdus and new data pdus) - rlc_pP->nb_bytes_requested_by_mac = rlc_pP->nb_bytes_requested_by_mac - pdu_size; - // put pdu in trans - list_add_head(tb_p, &rlc_pP->control_pdu_list); - rlc_pP->stat_tx_control_pdu += 1; - rlc_pP->stat_tx_control_bytes += pdu_size; - -} -#endif - diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h index 41f214d7c6..a84b25c8e5 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h @@ -37,21 +37,6 @@ # include "UTIL/MEM/mem_block.h" //----------------------------------------------------------------------------- -# ifdef RLC_AM_STATUS_REPORT_C -# define private_rlc_am_status_report(x) x -# define protected_rlc_am_status_report(x) x -# define public_rlc_am_status_report(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_status_report(x) -# define protected_rlc_am_status_report(x) extern x -# define public_rlc_am_status_report(x) extern x -# else -# define private_rlc_am_status_report(x) -# define protected_rlc_am_status_report(x) -# define public_rlc_am_status_report(x) extern x -# endif -# endif //----------------------------------------------------------------------------- #include "platform_types.h" #include "platform_constants.h" @@ -65,7 +50,7 @@ * \param[in] bits_to_readP Number of bits to read (max 16). * \return Value read on 16 bits, bits read are shifted to least significant bits of returned short value. */ -protected_rlc_am_status_report( uint16_t rlc_am_read_bit_field (uint8_t** dataP, unsigned int* bit_posP, const signed int bits_to_readP);) +uint16_t rlc_am_read_bit_field (uint8_t** dataP, unsigned int* bit_posP, const signed int bits_to_readP); /*! \fn void rlc_am_write8_bit_field(uint8_t** dataP, unsigned int* bit_posP, signed int bits_to_writeP, const uint8_t valueP) * \brief Write N bits (max 8) in a byte area seen as a bit-field with the help of a byte index and a modulo 8 bit index. @@ -74,7 +59,7 @@ protected_rlc_am_status_report( uint16_t rlc_am_read_bit_field * \param[in] bits_to_writeP Number of bits to write (max 8). * \param[in] valueP Value to write. */ -protected_rlc_am_status_report(void rlc_am_write8_bit_field(uint8_t** dataP, unsigned int* bit_posP, signed int bits_to_writeP, const uint8_t valueP);) +void rlc_am_write8_bit_field(uint8_t** dataP, unsigned int* bit_posP, signed int bits_to_writeP, const uint8_t valueP); /*! \fn void rlc_am_write16_bit_field(uint8_t** dataP, unsigned int* bit_posP, signed int bits_to_writeP, const uint16_t valueP) * \brief Write N bits (max 16) in a byte area seen as a bit-field with the help of a byte index and a modulo 8 bit index. @@ -83,11 +68,11 @@ protected_rlc_am_status_report(void rlc_am_write8_bit_field(uint8_t** dat * \param[in] bits_to_writeP Number of bits to write (max 16). * \param[in] valueP Value to write. */ -protected_rlc_am_status_report(void rlc_am_write16_bit_field( +void rlc_am_write16_bit_field( uint8_t** dataP, unsigned int* bit_posP, signed int bits_to_writeP, - const uint16_t valueP);) + const uint16_t valueP); /*! \fn signed int rlc_am_get_control_pdu_infos (rlc_am_pdu_sn_10_t* const headerP, sdu_size_t * const total_sizeP, rlc_am_control_pdu_info_t* const pdu_infoP) * \brief Retrieve control PDU informations from a serialized control PDU. @@ -95,16 +80,16 @@ protected_rlc_am_status_report(void rlc_am_write16_bit_field( * \param[in] total_size_pP Pointer on PDU size in bytes. * \param[in,out] pdu_infoP Struct containing interpreted PDU control informations. */ -protected_rlc_am_status_report( signed int rlc_am_get_control_pdu_infos ( +signed int rlc_am_get_control_pdu_infos ( rlc_am_pdu_sn_10_t* const headerP, sdu_size_t * const total_size_pP, - rlc_am_control_pdu_info_t* const pdu_infoP);) + rlc_am_control_pdu_info_t* const pdu_infoP); /*! \fn void rlc_am_display_control_pdu_infos(const rlc_am_control_pdu_info_t* const pdu_infoP) * \brief Dump on LOG output the informations contained in the pdu_infoP structure. * \param[in] pdu_infoP Struct containing interpreted PDU control informations. */ -protected_rlc_am_status_report( void rlc_am_display_control_pdu_infos(const rlc_am_control_pdu_info_t* const pdu_infoP);) +void rlc_am_display_control_pdu_infos(const rlc_am_control_pdu_info_t* const pdu_infoP); /*! \fn void rlc_am_receive_process_control_pdu(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, mem_block_t* const tbP, uint8_t* first_byte, const uint16_t tb_size_in_bytes) * \brief Process the informations contained in the control PDU. @@ -114,12 +99,12 @@ protected_rlc_am_status_report( void rlc_am_display_control_pdu_infos(const rlc_ * \param[in] first_byte Pointer on first byte of control PDU. * \param[in] tb_size_in_bytes Pointer on size of serialized control PDU in bytes. */ -protected_rlc_am_status_report( void rlc_am_receive_process_control_pdu( +void rlc_am_receive_process_control_pdu( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, mem_block_t* const tbP, uint8_t** first_byte, - sdu_size_t * const tb_size_in_bytes);) + sdu_size_t * const tb_size_in_bytes); /*! \fn int rlc_am_write_status_pdu(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, rlc_am_pdu_sn_10_t* const rlc_am_pdu_sn_10P, rlc_am_control_pdu_info_t* const pdu_infoP) * \brief Remove all marked holes for PDU with sequence number "snP". @@ -129,19 +114,19 @@ protected_rlc_am_status_report( void rlc_am_receive_process_control_pdu( * \param[in] pdu_infoP Struct containing PDU control informations elements. * \return The number of bytes that have been written. */ -protected_rlc_am_status_report(int rlc_am_write_status_pdu( +int rlc_am_write_status_pdu( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP, rlc_am_pdu_sn_10_t* const rlc_am_pdu_sn_10P, - rlc_am_control_pdu_info_t* const pdu_infoP);) + rlc_am_control_pdu_info_t* const pdu_infoP); /*! \fn void rlc_am_send_status_pdu(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Send a status PDU based on the receiver buffer content. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_status_report(void rlc_am_send_status_pdu( +void rlc_am_send_status_pdu( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t *const rlc_pP);) + rlc_am_entity_t *const rlc_pP); /** @} */ #endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c index ff969c0b6e..d9eb6de7cc 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c @@ -534,7 +534,7 @@ void rlc_am_v9_3_0_test_send_sdu(rlc_am_entity_t *am_txP, int sdu_indexP) assert(g_send_id_write_index[am_txP->rb_id] < TEST_MAX_SEND_SDU); } else { printf("Out of memory error\n"); - exit(-1); +// exit(-1); } } //----------------------------------------------------------------------------- @@ -577,7 +577,7 @@ void rlc_am_v9_3_0_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct ma data_indP->no_tb += 1; } else { printf("Out of memory error\n"); - exit(-1); +// exit(-1); } } else { printf("[RLC-LOOP] DROPPING 1 TB\n"); diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h index b42800e15f..6be3867b10 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h @@ -32,34 +32,19 @@ */ # ifndef __RLC_AM_TEST_H__ # define __RLC_AM_TEST_H__ -# ifdef RLC_AM_TEST_C -# define private_rlc_am_test(x) x -# define protected_rlc_am_test(x) x -# define public_rlc_am_test(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_test(x) -# define protected_rlc_am_test(x) extern x -# define public_rlc_am_test(x) extern x -# else -# define private_rlc_am_test(x) -# define protected_rlc_am_test(x) -# define public_rlc_am_test(x) extern x -# endif -# endif -public_rlc_am_test(rlc_am_entity_t g_am_tx;) -public_rlc_am_test(rlc_am_entity_t g_am_rx;) +rlc_am_entity_t g_am_tx; +rlc_am_entity_t g_am_rx; -protected_rlc_am_test(void rlc_am_v9_3_0_test_windows();) -protected_rlc_am_test(void rlc_am_v9_3_0_test_read_write_bit_field();) -protected_rlc_am_test(void rlc_am_v9_3_0_test_data_conf(module_id_t module_idP, rb_id_t rb_idP, mui_t muiP, rlc_tx_status_t statusP);) -protected_rlc_am_test(void rlc_am_v9_3_0_test_send_sdu(rlc_am_entity_t *am_txP, int sdu_indexP);) -protected_rlc_am_test(void rlc_am_v9_3_0_test_exchange_pdus(rlc_am_entity_t *am_txP,rlc_am_entity_t *am_RxP, - uint16_t bytes_txP,uint16_t bytes_rxP);) -protected_rlc_am_test(void rlc_am_v9_3_0_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_data_req *data_requestP, int* drop_countP, int *tx_packetsP, int* dropped_tx_packetsP);) -protected_rlc_am_test(void rlc_am_v9_3_0_test_data_ind (module_id_t module_idP, rb_id_t rb_idP, sdu_size_t sizeP, - mem_block_t *sduP);) -protected_rlc_am_test(void rlc_am_v9_3_0_test_tx_rx();) -public_rlc_am_test( void rlc_am_v9_3_0_test_print_trace (void);) -public_rlc_am_test( void rlc_am_v9_3_0_test()); +void rlc_am_v9_3_0_test_windows(); +void rlc_am_v9_3_0_test_read_write_bit_field(); +void rlc_am_v9_3_0_test_data_conf(module_id_t module_idP, rb_id_t rb_idP, mui_t muiP, rlc_tx_status_t statusP); +void rlc_am_v9_3_0_test_send_sdu(rlc_am_entity_t *am_txP, int sdu_indexP); +void rlc_am_v9_3_0_test_exchange_pdus(rlc_am_entity_t *am_txP,rlc_am_entity_t *am_RxP, + uint16_t bytes_txP,uint16_t bytes_rxP); +void rlc_am_v9_3_0_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_data_req *data_requestP, int* drop_countP, int *tx_packetsP, int* dropped_tx_packetsP); +void rlc_am_v9_3_0_test_data_ind (module_id_t module_idP, rb_id_t rb_idP, sdu_size_t sizeP, + mem_block_t *sduP); +void rlc_am_v9_3_0_test_tx_rx(); +void rlc_am_v9_3_0_test_print_trace (void); +void rlc_am_v9_3_0_test(); # endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c index 1e3b8b916d..cae0153062 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c @@ -87,9 +87,16 @@ rlc_am_check_timer_poll_retransmit( /* Look for the first retransmittable PDU starting from vtS - 1 */ while (sn != sn_end) { - tx_data_pdu_buffer_p = &rlc_pP->tx_data_pdu_buffer[sn % RLC_AM_WINDOW_SIZE]; - AssertFatal (tx_data_pdu_buffer_p->mem_block != NULL, "RLC AM Tpoll Retx expiry sn=%d ack=%d is empty vtA=%d vtS=%d LcId=%d\n", - sn, tx_data_pdu_buffer_p->flags.ack,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + tx_data_pdu_buffer_p = &rlc_pP->tx_data_pdu_buffer[sn % RLC_AM_WINDOW_SIZE]; + //AssertFatal (tx_data_pdu_buffer_p->mem_block != NULL, "RLC AM Tpoll Retx expiry sn=%d ack=%d is empty vtA=%d vtS=%d LcId=%d\n", + // sn, tx_data_pdu_buffer_p->flags.ack,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + if(tx_data_pdu_buffer_p->mem_block == NULL){ + LOG_E(RLC, "RLC AM Tpoll Retx expiry sn=%d ack=%d is empty vtA=%d vtS=%d LcId=%d\n", + sn, tx_data_pdu_buffer_p->flags.ack,rlc_pP->vt_a,rlc_pP->vt_s,rlc_pP->channel_id); + sn = RLC_AM_PREV_SN(sn); + continue; + } + if ((tx_data_pdu_buffer_p->flags.ack == 0) && (tx_data_pdu_buffer_p->flags.max_retransmit == 0)) { tx_data_pdu_buffer_p->flags.retransmit = 1; tx_data_pdu_buffer_p->retx_payload_size = tx_data_pdu_buffer_p->payload_size; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h index c5d49268c4..5f8fd5bedc 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h @@ -35,21 +35,6 @@ #ifndef __RLC_AM_TIMER_POLL_RETRANSMIT_H__ # define __RLC_AM_TIMER_POLL_RETRANSMIT_H__ -# ifdef RLC_AM_TIMER_POLL_RETRANSMIT_C -# define private_rlc_am_timer_poll_retransmit(x) x -# define protected_rlc_am_timer_poll_retransmit(x) x -# define public_rlc_am_timer_poll_retransmit(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_timer_poll_retransmit(x) -# define protected_rlc_am_timer_poll_retransmit(x) extern x -# define public_rlc_am_timer_poll_retransmit(x) extern x -# else -# define private_rlc_am_timer_poll_retransmit(x) -# define protected_rlc_am_timer_poll_retransmit(x) -# define public_rlc_am_timer_poll_retransmit(x) extern x -# endif -# endif /*! \fn void rlc_am_check_timer_poll_retransmit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Check if timer Poll-retransmit has timed-out, if so it is stopped and has the status "timed-out". @@ -57,9 +42,9 @@ * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_timer_poll_retransmit(void rlc_am_check_timer_poll_retransmit( +void rlc_am_check_timer_poll_retransmit( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP)); + rlc_am_entity_t* const rlc_pP); /*! \fn int rlc_am_is_timer_poll_retransmit_timed_out(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Boolean function, check if timer Poll-retransmit has timed-out. @@ -67,9 +52,9 @@ protected_rlc_am_timer_poll_retransmit(void rlc_am_check_timer_poll_retransmit( * \param[in] rlc_pP RLC AM protocol instance pointer. * \return 1 if timer Poll-retransmit has timed-out, else 0. */ -protected_rlc_am_timer_poll_retransmit(int rlc_am_is_timer_poll_retransmit_timed_out( +int rlc_am_is_timer_poll_retransmit_timed_out( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP);) + rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_stop_and_reset_timer_poll_retransmit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Stop and reset the timer Poll-retransmit. @@ -77,9 +62,9 @@ protected_rlc_am_timer_poll_retransmit(int rlc_am_is_timer_poll_retransmit_time * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_timer_poll_retransmit(void rlc_am_stop_and_reset_timer_poll_retransmit( +void rlc_am_stop_and_reset_timer_poll_retransmit( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP);) + rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_start_timer_poll_retransmit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Re-arm (based on RLC AM config parameter) and start timer Poll-retransmit. @@ -87,9 +72,9 @@ protected_rlc_am_timer_poll_retransmit(void rlc_am_stop_and_reset_timer_poll_ret * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] frame Frame index */ -protected_rlc_am_timer_poll_retransmit(void rlc_am_start_timer_poll_retransmit( +void rlc_am_start_timer_poll_retransmit( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP);) + rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_init_timer_poll_retransmit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, const uint32_t time_outP) * \brief Initialize the timer Poll-retransmit with RLC AM time-out config parameter. @@ -97,9 +82,9 @@ protected_rlc_am_timer_poll_retransmit(void rlc_am_start_timer_poll_retransmit( * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] time_outP Time-out in frame units. */ -protected_rlc_am_timer_poll_retransmit(void rlc_am_init_timer_poll_retransmit( +void rlc_am_init_timer_poll_retransmit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, - const uint32_t time_outP);) + const uint32_t time_outP); /** @} */ #endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c index fd0feceeb0..19b9b41ca6 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c @@ -70,7 +70,12 @@ rlc_am_check_timer_reordering( PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP)); #endif - AssertFatal (rlc_pP->vr_x != RLC_SN_UNDEFINED, "RLC AM TReordering Expiry vrX not defined LcId=%d\n", rlc_pP->channel_id); + //AssertFatal (rlc_pP->vr_x != RLC_SN_UNDEFINED, "RLC AM TReordering Expiry vrX not defined LcId=%d\n", rlc_pP->channel_id); + if(rlc_pP->vr_x == RLC_SN_UNDEFINED){ + LOG_E(RLC, "RLC AM TReordering Expiry vrX not defined LcId=%d\n", rlc_pP->channel_id); + return; + } + rlc_pP->t_reordering.running = 0; rlc_pP->t_reordering.timed_out = 1; @@ -81,8 +86,12 @@ rlc_am_check_timer_reordering( cursor = rlc_pP->receiver_buffer.head; rlc_usn_t vr_ms_new = rlc_pP->vr_x; - AssertFatal (cursor != NULL, "RLC AM TReordering Expiry Rx PDU list empty LcId=%d\n", rlc_pP->channel_id); - + //AssertFatal (cursor != NULL, "RLC AM TReordering Expiry Rx PDU list empty LcId=%d\n", rlc_pP->channel_id); + if(cursor == NULL){ + LOG_E(RLC, "RLC AM TReordering Expiry Rx PDU list empty LcId=%d\n", rlc_pP->channel_id); + return; + } + /* go to memblock up to vrX*/ pdu_info = &((rlc_am_rx_pdu_management_t*)(cursor->data))->pdu_info; while ((cursor != NULL) && (RLC_AM_DIFF_SN(pdu_info->sn,rlc_pP->vr_r) < RLC_AM_DIFF_SN(vr_ms_new,rlc_pP->vr_r))) { diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h index a2876d9169..bca3e83763 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h @@ -34,48 +34,33 @@ */ #ifndef __RLC_AM_TIMER_REORDERING_H__ # define __RLC_AM_TIMER_REORDERING_H__ -# ifdef RLC_AM_TIMER_POLL_REORDERING_C -# define private_rlc_am_timer_reordering(x) x -# define protected_rlc_am_timer_reordering(x) x -# define public_rlc_am_timer_reordering(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_timer_reordering(x) -# define protected_rlc_am_timer_reordering(x) extern x -# define public_rlc_am_timer_reordering(x) extern x -# else -# define private_rlc_am_timer_reordering(x) -# define protected_rlc_am_timer_reordering(x) -# define public_rlc_am_timer_reordering(x) extern x -# endif -# endif /*! \fn void rlc_am_check_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Check if timer reordering has timed-out, if so it is stopped and has the status "timed-out". * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_timer_reordering(void rlc_am_check_timer_reordering( +void rlc_am_check_timer_reordering( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP)); + rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_stop_and_reset_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Stop and reset the timer reordering. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_timer_reordering(void rlc_am_stop_and_reset_timer_reordering( +void rlc_am_stop_and_reset_timer_reordering( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP);) + rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_start_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Re-arm (based on RLC AM config parameter) and start timer reordering. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_timer_reordering(void rlc_am_start_timer_reordering( +void rlc_am_start_timer_reordering( const protocol_ctxt_t* const ctxt_pP, - rlc_am_entity_t* const rlc_pP);) + rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_init_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, const uint32_t time_outP) * \brief Initialize the timer reordering with RLC AM time-out config parameter. @@ -83,9 +68,9 @@ protected_rlc_am_timer_reordering(void rlc_am_start_timer_reordering( * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] time_outP Time-out in frameP units. */ -protected_rlc_am_timer_reordering(void rlc_am_init_timer_reordering( +void rlc_am_init_timer_reordering( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, - const uint32_t time_outP);) + const uint32_t time_outP); /** @} */ #endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h index 31ff985e41..0480741859 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h @@ -34,42 +34,28 @@ */ #ifndef __RLC_AM_TIMER_STATUS_PROHIBIT_H__ # define __RLC_AM_TIMER_STATUS_PROHIBIT_H__ -# ifdef RLC_AM_TIMER_STATUS_PROHIBIT_C -# define private_rlc_am_timer_status_prohibit(x) x -# define protected_rlc_am_timer_status_prohibit(x) x -# define public_rlc_am_timer_status_prohibit(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_timer_status_prohibit(x) -# define protected_rlc_am_timer_status_prohibit(x) extern x -# define public_rlc_am_timer_status_prohibit(x) extern x -# else -# define private_rlc_am_timer_status_prohibit(x) -# define protected_rlc_am_timer_status_prohibit(x) -# define public_rlc_am_timer_status_prohibit(x) extern x -# endif -# endif + /*! \fn void rlc_am_check_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Check if timer status-prohibit has timed-out, if so it is stopped and has the status "timed-out". * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_timer_status_prohibit(void rlc_am_check_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP)); +void rlc_am_check_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_stop_and_reset_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Stop and reset the timer status-prohibit. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_timer_status_prohibit(void rlc_am_stop_and_reset_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP);) +void rlc_am_stop_and_reset_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_start_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) * \brief Re-arm (based on RLC AM config parameter) and start timer status-prohibit. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC AM protocol instance pointer. */ -protected_rlc_am_timer_status_prohibit(void rlc_am_start_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP);) +void rlc_am_start_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP); /*! \fn void rlc_am_init_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, const uint32_t time_outP) * \brief Initialize the timer status-prohibit with RLC AM time-out config parameter. @@ -77,6 +63,6 @@ protected_rlc_am_timer_status_prohibit(void rlc_am_start_timer_status_prohibit(c * \param[in] rlc_pP RLC AM protocol instance pointer. * \param[in] time_outP Time-out in frameP units. */ -protected_rlc_am_timer_status_prohibit(void rlc_am_init_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, const uint32_t time_outP);) +void rlc_am_init_timer_status_prohibit(const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, const uint32_t time_outP); /** @} */ #endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h index aff78a15c6..be49e94120 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h @@ -35,21 +35,6 @@ # ifndef __RLC_AM_WINDOWS_H__ # define __RLC_AM_WINDOWS_H__ //----------------------------------------------------------------------------- -# ifdef RLC_AM_WINDOWS_C -# define private_rlc_am_windows(x) x -# define protected_rlc_am_windows(x) x -# define public_rlc_am_windows(x) x -# else -# ifdef RLC_AM_MODULE -# define private_rlc_am_windows(x) -# define protected_rlc_am_windows(x) extern x -# define public_rlc_am_windows(x) extern x -# else -# define private_rlc_am_windows(x) -# define protected_rlc_am_windows(x) -# define public_rlc_am_windows(x) extern x -# endif -# endif /*! \fn signed int rlc_am_in_tx_window(const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) * \brief Boolean function, check if sequence number is VT(A) <= snP < VT(MS). @@ -58,10 +43,10 @@ * \param[in] snP Sequence number. * \return 1 if snP in tx window, else 0. */ -protected_rlc_am_windows(signed int rlc_am_in_tx_window( +signed int rlc_am_in_tx_window( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, - const rlc_sn_t snP);) + const rlc_sn_t snP); /*! \fn signed int rlc_am_in_rx_window(const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) * \brief Boolean function, check if sequence number is VR(R) <= snP < VR(MR). @@ -70,10 +55,10 @@ protected_rlc_am_windows(signed int rlc_am_in_tx_window( * \param[in] snP Sequence number. * \return 1 if snP in rx window, else 0. */ -protected_rlc_am_windows(signed int rlc_am_in_rx_window( +signed int rlc_am_in_rx_window( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, - const rlc_sn_t snP);) + const rlc_sn_t snP); /*! \fn signed int rlc_am_sn_gte_vr_h (const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) * \brief Boolean function, check if sequence number is greater than or equal VR(R). @@ -82,10 +67,10 @@ protected_rlc_am_windows(signed int rlc_am_in_rx_window( * \param[in] snP Sequence number. * \return 1 if sequence number is greater than or equal VR(R), else 0. */ -protected_rlc_am_windows(signed int rlc_am_sn_gte_vr_h ( +signed int rlc_am_sn_gte_vr_h ( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, - const rlc_sn_t snP);) + const rlc_sn_t snP); /*! \fn signed int rlc_am_sn_gte_vr_x (const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) * \brief Boolean function, check if sequence number is greater than or equal VR(X). @@ -94,10 +79,10 @@ protected_rlc_am_windows(signed int rlc_am_sn_gte_vr_h ( * \param[in] snP Sequence number. * \return 1 if sequence number is greater than or equal VR(X), else 0. */ -protected_rlc_am_windows(signed int rlc_am_sn_gte_vr_x ( +signed int rlc_am_sn_gte_vr_x ( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, - const rlc_sn_t snP);) + const rlc_sn_t snP); /*! \fn signed int rlc_am_sn_gt_vr_ms (const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) * \brief Boolean function, check if sequence number is greater than VR(MS). @@ -106,10 +91,10 @@ protected_rlc_am_windows(signed int rlc_am_sn_gte_vr_x ( * \param[in] snP Sequence number. * \return 1 if sequence number is greater than VR(MS), else 0. */ -protected_rlc_am_windows(signed int rlc_am_sn_gt_vr_ms( +signed int rlc_am_sn_gt_vr_ms( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, - const rlc_sn_t snP);) + const rlc_sn_t snP); /*! \fn signed int rlc_am_tx_sn1_gt_sn2 (const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP, const rlc_sn_t sn1P, const rlc_sn_t sn2P) * \brief Boolean function, in the context of the tx window, check if sn1P is greater than sn2P. @@ -119,11 +104,11 @@ protected_rlc_am_windows(signed int rlc_am_sn_gt_vr_ms( * \param[in] sn2P Sequence number. * \return 1 if sn1P is greater than sn2P, else 0. */ -protected_rlc_am_windows(signed int rlc_am_tx_sn1_gt_sn2( +signed int rlc_am_tx_sn1_gt_sn2( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, const rlc_sn_t sn1P, - const rlc_sn_t sn2P);) + const rlc_sn_t sn2P); /*! \fn signed int rlc_am_rx_sn1_gt_sn2(const protocol_ctxt_t* const ctxt_pP,const rlc_am_entity_t* const rlc_pP, const rlc_sn_t sn1P, const rlc_sn_t sn2P) * \brief Boolean function, in the context of the rx window, check if sn1P is greater than sn2P. @@ -133,10 +118,10 @@ protected_rlc_am_windows(signed int rlc_am_tx_sn1_gt_sn2( * \param[in] sn2P Sequence number. * \return 1 if sn1P is greater than sn2P, else 0. */ -protected_rlc_am_windows(signed int rlc_am_rx_sn1_gt_sn2( +signed int rlc_am_rx_sn1_gt_sn2( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, const rlc_sn_t sn1P, - const rlc_sn_t sn2P);) + const rlc_sn_t sn2P); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h index a0049e4c2a..a5bd0b9ef5 100644 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h @@ -34,21 +34,6 @@ */ # ifndef __RLC_TM_H__ # define __RLC_TM_H__ -# ifdef RLC_TM_C -# define private_rlc_tm(x) -# define protected_rlc_tm(x) -# define public_rlc_tm(x) -# else -# ifdef RLC_TM_MODULE -# define private_rlc_tm(x) -# define protected_rlc_tm(x) extern x -# define public_rlc_tm(x) extern x -# else -# define private_rlc_tm(x) -# define protected_rlc_tm(x) -# define public_rlc_tm(x) extern x -# endif -# endif # include "platform_types.h" # include "rlc_def.h" # include "rlc_def_lte.h" @@ -75,21 +60,21 @@ * \param[in] srcP SDU data pointer. * \param[in] length_in_bitsP Length of SDU in bits. */ -private_rlc_tm(void rlc_tm_send_sdu ( +void rlc_tm_send_sdu ( const protocol_ctxt_t* const ctxt_pP, rlc_tm_entity_t * const rlc_pP, const boolean_t error_indicationP, uint8_t * const srcP, - const sdu_size_t length_in_bitsP);) + const sdu_size_t length_in_bitsP); /*! \fn void rlc_tm_no_segment (const protocol_ctxt_t* const ctxt_pP, rlc_tm_entity_t * const rlcP) * \brief Schedule a SDU to be transmited by lower layers. * \param[in] ctxtP Running context. * \param[in] rlcP RLC TM protocol instance pointer. */ -private_rlc_tm(void rlc_tm_no_segment ( +void rlc_tm_no_segment ( const protocol_ctxt_t* const ctxt_pP, - rlc_tm_entity_t *const rlcP);) + rlc_tm_entity_t *const rlcP); /*! \fn void rlc_tm_rx (const protocol_ctxt_t* const ctxt_pP,void *const rlcP, struct mac_data_ind data_indP) * \brief Process the received PDUs from lower layer. @@ -97,10 +82,10 @@ private_rlc_tm(void rlc_tm_no_segment ( * \param[in] rlcP RLC TM protocol instance pointer. * \param[in] data_indP PDUs from MAC. */ -private_rlc_tm( void rlc_tm_rx ( +void rlc_tm_rx ( const protocol_ctxt_t* const ctxt_pP, void *const rlcP, - struct mac_data_ind data_indP);) + struct mac_data_ind data_indP); /*! \fn struct mac_status_resp rlc_tm_mac_status_indication (const protocol_ctxt_t* const ctxt_pP, void * const rlcP, const uint16_t tbs_sizeP, struct mac_status_ind tx_statusP) @@ -111,11 +96,12 @@ private_rlc_tm( void rlc_tm_rx ( * \param[in] tx_statusP Transmission status given by MAC on previous MAC transmission of the PDU. * \return The maximum number of bytes that can be served by RLC instance to MAC. */ -public_rlc_tm( struct mac_status_resp rlc_tm_mac_status_indication ( - const protocol_ctxt_t* const ctxt_pP, - void * const rlcP, - const uint16_t tb_sizeP, - struct mac_status_ind tx_statusP);) +struct mac_status_resp +rlc_tm_mac_status_indication ( + const protocol_ctxt_t* const ctxt_pP, + void * const rlc_pP, + const tb_size_t tb_sizeP, + struct mac_status_ind tx_statusP); /*! \fn struct mac_data_req rlc_tm_mac_data_request (const protocol_ctxt_t* const ctxt_pP, void * const rlcP) @@ -124,9 +110,9 @@ public_rlc_tm( struct mac_status_resp rlc_tm_mac_status_indication ( * \param[in] rlcP RLC TM protocol instance pointer. * \return A PDU of the previously requested number of bytes, and the updated maximum number of bytes that can be served by RLC instance to MAC for next RLC transmission. */ -public_rlc_tm( struct mac_data_req rlc_tm_mac_data_request ( +struct mac_data_req rlc_tm_mac_data_request ( const protocol_ctxt_t* const ctxt_pP, - void * const rlcP);) + void * const rlcP); /*! \fn void rlc_tm_mac_data_indication (const protocol_ctxt_t* const ctxt_pP,void * const rlcP, struct mac_data_ind data_indP) @@ -135,10 +121,10 @@ public_rlc_tm( struct mac_data_req rlc_tm_mac_data_request ( * \param[in] rlcP RLC TM protocol instance pointer. * \param[in] data_indP PDUs from MAC. */ -public_rlc_tm( void rlc_tm_mac_data_indication ( +void rlc_tm_mac_data_indication ( const protocol_ctxt_t* const ctxt_pP, void * const rlcP, - struct mac_data_ind data_indP);) + struct mac_data_ind data_indP); /*! \fn void rlc_tm_data_req (const protocol_ctxt_t* const ctxt_pP,void * const rlcP, mem_block_t * const sduP) @@ -147,10 +133,10 @@ public_rlc_tm( void rlc_tm_mac_data_indication ( * \param[in] rlcP RLC TM protocol instance pointer. * \param[in] sduP SDU. (A struct rlc_tm_data_req is mapped on sduP->data.) */ -public_rlc_tm( void rlc_tm_data_req ( +void rlc_tm_data_req ( const protocol_ctxt_t* const ctxt_pP, void * const rlcP, - mem_block_t * const sduP);) + mem_block_t * const sduP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c index 70c1f37221..78d7cc515f 100644 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c @@ -83,6 +83,7 @@ void rlc_tm_init ( if ((rlcP->input_sdus_alloc == NULL) && (rlcP->size_input_sdus_buffer > 0)) { rlcP->input_sdus_alloc = get_free_mem_block (rlcP->size_input_sdus_buffer * sizeof (void *), __func__); + if(rlcP->input_sdus_alloc == NULL) return; rlcP->input_sdus = (mem_block_t **) (rlcP->input_sdus_alloc->data); memset (rlcP->input_sdus, 0, rlcP->size_input_sdus_buffer * sizeof (void *)); } diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h index 35e6c792ae..c6ab681819 100644 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h @@ -42,21 +42,6 @@ //# include "rlc.h" # include "platform_types.h" //----------------------------------------------------------------------------- -# ifdef RLC_TM_INIT_C -# define private_rlc_tm_init(x) x -# define protected_rlc_tm_init(x) x -# define public_rlc_tm_init(x) x -# else -# ifdef RLC_TM_MODULE -# define private_rlc_tm_init(x) -# define protected_rlc_tm_init(x) extern x -# define public_rlc_tm_init(x) extern x -# else -# define private_rlc_tm_init(x) -# define protected_rlc_tm_init(x) -# define public_rlc_tm_init(x) extern x -# endif -# endif typedef volatile struct rlc_tm_info_s { uint8_t is_uplink_downlink; @@ -75,35 +60,35 @@ typedef volatile struct rlc_tm_info_s { * \param[in] rb_idP Radio bearer identifier. * \param[in] chan_idP Transport channel identifier. */ -public_rlc_tm_init( void config_req_rlc_tm ( +void config_req_rlc_tm ( const protocol_ctxt_t* const ctxt_pP, const srb_flag_t srb_flagP, const rlc_tm_info_t * const config_tmP, const rb_id_t rb_idP, - const logical_chan_id_t chan_idP);) + const logical_chan_id_t chan_idP); /*! \fn void rlc_tm_init (const protocol_ctxt_t* const ctxt_pP, rlc_tm_entity_t * const rlcP) * \brief Initialize a RLC TM protocol instance, initialize all variables, lists, allocate buffers for making this instance ready to be configured with protocol configuration parameters. After this initialization the RLC TM protocol instance will be in RLC_NULL_STATE state. * \param[in] rlcP RLC TM protocol instance pointer. */ -protected_rlc_tm_init(void rlc_tm_init ( +void rlc_tm_init ( const protocol_ctxt_t* const ctxt_pP, - rlc_tm_entity_t * const rlcP);) + rlc_tm_entity_t * const rlcP); /*! \fn void rlc_tm_reset_state_variables (const protocol_ctxt_t* const ctxt_pP, rlc_tm_entity_t * const rlcP) * \brief Reset protocol variables and state variables to initial values. * \param[in] rlcP RLC TM protocol instance pointer. */ -protected_rlc_tm_init(void rlc_tm_reset_state_variables ( +void rlc_tm_reset_state_variables ( const protocol_ctxt_t* const ctxt_pP, - rlc_tm_entity_t * const rlcP);) + rlc_tm_entity_t * const rlcP); /*! \fn void rlc_tm_cleanup(rlc_tm_entity_t * const rlcP) * \brief Free all allocated memory (lists and buffers) previously allocated by this RLC TM instance. * \param[in] rlcP RLC TM protocol instance pointer. */ -public_rlc_tm_init( void rlc_tm_cleanup( - rlc_tm_entity_t * const rlcP);) +void rlc_tm_cleanup( + rlc_tm_entity_t * const rlcP); /*! \fn void rlc_tm_configure(const protocol_ctxt_t* const ctxt_pP,rlc_tm_entity_t * const rlcP, const boolean_t is_uplink_downlinkP) * \brief Configure RLC TM protocol parameters. @@ -111,10 +96,10 @@ public_rlc_tm_init( void rlc_tm_cleanup( * \param[in] is_uplink_downlinkP Is this instance is TRANSMITTER_ONLY, RECEIVER_ONLY, or TRANSMITTER_AND_RECEIVER. */ -protected_rlc_tm_init(void rlc_tm_configure( +void rlc_tm_configure( const protocol_ctxt_t* const ctxt_pP, rlc_tm_entity_t * const rlcP, - const boolean_t is_uplink_downlinkP);) + const boolean_t is_uplink_downlinkP); /*! \fn void rlc_tm_set_debug_infos(const protocol_ctxt_t* const ctxt_pP, rlc_tm_entity_t * const rlcP, const rb_id_t rb_idP, const srb_flag_t srb_flagP) * \brief Set debug informations for a RLC TM protocol instance, these informations are only for trace purpose. @@ -123,12 +108,12 @@ protected_rlc_tm_init(void rlc_tm_configure( * \param[in] rb_idP Radio bearer identifier. * \param[in] chan_idP Transport channel identifier */ -protected_rlc_tm_init(void rlc_tm_set_debug_infos( +void rlc_tm_set_debug_infos( const protocol_ctxt_t* const ctxt_pP, rlc_tm_entity_t * const rlcP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, - const logical_chan_id_t chan_idP);) + const logical_chan_id_t chan_idP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c index 0be2ef1686..d8f151a5ff 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c @@ -421,6 +421,7 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TX UNKNOWN PROTOCOL STATE %02X hex\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,l_rlc_p), l_rlc_p->protocol_state); + list_free (&data_indP.data); } } @@ -567,7 +568,13 @@ rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP,cons l_rlc_p->stat_tx_data_pdu += 1; l_rlc_p->stat_tx_data_bytes += tb_size_in_bytes; - AssertFatal( tb_size_in_bytes > 0 , "RLC UM PDU LENGTH %d", tb_size_in_bytes); + //AssertFatal( tb_size_in_bytes > 0 , "RLC UM PDU LENGTH %d", tb_size_in_bytes); + if(tb_size_in_bytes <= 0) { + LOG_E(RLC, "RLC UM PDU LENGTH %d\n", tb_size_in_bytes); + tb_p = tb_p->next; + continue; + } + #if TRACE_RLC_UM_PDU || MESSAGE_CHART_GENERATOR rlc_um_get_pdu_infos(ctxt_pP, l_rlc_p,(rlc_um_pdu_sn_10_t*) ((struct mac_tb_req*) (tb_p->data))->data_ptr, tb_size_in_bytes, &pdu_info, l_rlc_p->rx_sn_length); #endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h index abf4f8ad6e..f2f91ff68e 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h @@ -34,21 +34,6 @@ */ # ifndef __RLC_UM_H__ # define __RLC_UM_H__ -# ifdef RLC_UM_C -# define private_rlc_um(x) -# define protected_rlc_um(x) -# define public_rlc_um(x) -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um(x) -# define protected_rlc_um(x) extern x -# define public_rlc_um(x) extern x -# else -# define private_rlc_um(x) -# define protected_rlc_um(x) -# define public_rlc_um(x) extern x -# endif -# endif # include # include "platform_types.h" # include "rlc_def.h" @@ -141,40 +126,40 @@ * \param[out] stat_rx_data_bytes_out_of_window Number of data bytes received out of the receive window. * \param[out] stat_timer_reordering_timed_out Number of times the timer "reordering" has timed-out. */ -public_rlc_um(void rlc_um_stat_req (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, - unsigned int* stat_tx_pdcp_sdu, - unsigned int* stat_tx_pdcp_bytes, - unsigned int* stat_tx_pdcp_sdu_discarded, - unsigned int* stat_tx_pdcp_bytes_discarded, - unsigned int* stat_tx_data_pdu, - unsigned int* stat_tx_data_bytes, - unsigned int* stat_rx_pdcp_sdu, - unsigned int* stat_rx_pdcp_bytes, - unsigned int* stat_rx_data_pdus_duplicate, - unsigned int* stat_rx_data_bytes_duplicate, - unsigned int* stat_rx_data_pdu, - unsigned int* stat_rx_data_bytes, - unsigned int* stat_rx_data_pdu_dropped, - unsigned int* stat_rx_data_bytes_dropped, - unsigned int* stat_rx_data_pdu_out_of_window, - unsigned int* stat_rx_data_bytes_out_of_window, - unsigned int* stat_timer_reordering_timed_out);) +void rlc_um_stat_req (rlc_um_entity_t *rlc_pP, + unsigned int* stat_tx_pdcp_sdu, + unsigned int* stat_tx_pdcp_bytes, + unsigned int* stat_tx_pdcp_sdu_discarded, + unsigned int* stat_tx_pdcp_bytes_discarded, + unsigned int* stat_tx_data_pdu, + unsigned int* stat_tx_data_bytes, + unsigned int* stat_rx_pdcp_sdu, + unsigned int* stat_rx_pdcp_bytes, + unsigned int* stat_rx_data_pdus_duplicate, + unsigned int* stat_rx_data_bytes_duplicate, + unsigned int* stat_rx_data_pdu, + unsigned int* stat_rx_data_bytes, + unsigned int* stat_rx_data_pdu_dropped, + unsigned int* stat_rx_data_bytes_dropped, + unsigned int* stat_rx_data_pdu_out_of_window, + unsigned int* stat_rx_data_bytes_out_of_window, + unsigned int* stat_timer_reordering_timed_out); /*! \fn void rlc_um_get_pdus (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP) * \brief Request the segmentation of SDUs based on status previously sent by MAC. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC UM protocol instance pointer. */ -private_rlc_um( void rlc_um_get_pdus (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP);) - +void +rlc_um_get_pdus (const protocol_ctxt_t* const ctxt_pP, void *argP); /*! \fn void rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, struct mac_data_ind data_indication) * \brief Process the received PDUs from lower layer. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] data_indication PDUs from MAC. */ -protected_rlc_um( void rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, struct mac_data_ind data_indication);) - +void +rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind data_indP); /*! \fn struct mac_status_resp rlc_um_mac_status_indication (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, uint16_t tbs_sizeP, struct mac_status_ind tx_statusP) * \brief Request the maximum number of bytes that can be served by RLC instance to MAC and fix the amount of bytes requested by MAC for next RLC transmission. * \param[in] ctxt_pP Running context. @@ -183,14 +168,19 @@ protected_rlc_um( void rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, rlc_ * \param[in] tx_statusP Transmission status given by MAC on previous MAC transmission of the PDU. * \return The maximum number of bytes that can be served by RLC instance to MAC. */ -public_rlc_um( struct mac_status_resp rlc_um_mac_status_indication (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, uint16_t tbs_sizeP, struct mac_status_ind tx_statusP, const eNB_flag_t enb_flagP);) +struct mac_status_resp +rlc_um_mac_status_indication (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, uint16_t tbs_sizeP, struct mac_status_ind tx_statusP,const eNB_flag_t enb_flagP); /*! \fn void rlc_um_set_nb_bytes_requested_by_mac (rlc_um_entity_t * const rlc_pP, const tb_size_t tb_sizeP) * \brief Set available TBS size for MAC Tx. * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] tb_sizeP remaining TBS in bytes. */ -public_rlc_um( void rlc_um_set_nb_bytes_requested_by_mac (rlc_um_entity_t * const rlc_pP, const tb_size_t tb_sizeP);) +void +rlc_um_set_nb_bytes_requested_by_mac ( + void * rlc_pP, + const tb_size_t tb_sizeP +); /*! \fn struct mac_data_req rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP,const eNB_flag_t enb_flagP) * \brief Gives PDUs to lower layer MAC. @@ -199,8 +189,8 @@ public_rlc_um( void rlc_um_set_nb_bytes_requested_by_mac (rlc_um_entity_t * \param[in] enb_flagP eNB or UE flag. * \return A PDU of the previously requested number of bytes, and the updated maximum number of bytes that can be served by RLC instance to MAC for next RLC transmission. */ -public_rlc_um( struct mac_data_req rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP,const eNB_flag_t enb_flagP);) - +struct mac_data_req +rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP,const eNB_flag_t enb_flagP); /*! \fn void rlc_um_mac_data_indication (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP,struct mac_data_ind data_indP) * \brief Receive PDUs from lower layer MAC. @@ -208,13 +198,12 @@ public_rlc_um( struct mac_data_req rlc_um_mac_data_request (const protocol_ct * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] data_indP PDUs from MAC. */ -public_rlc_um( void rlc_um_mac_data_indication (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, struct mac_data_ind data_indP);) /*! \fn uint32_t rlc_um_get_buffer_occupancy (rlc_um_entity_t *rlc_pP) * \brief Gets Tx Buffer Occupancy. * \param[in] rlc_pP RLC UM protocol instance pointer.) */ -public_rlc_um( uint32_t rlc_um_get_buffer_occupancy (rlc_um_entity_t *rlc_pP);) +uint32_t rlc_um_get_buffer_occupancy (rlc_um_entity_t *rlc_pP); /*! \fn void rlc_um_data_req (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, mem_block_t *sduP) * \brief Interface with higher layers, buffer higher layer SDUS for transmission. @@ -222,6 +211,9 @@ public_rlc_um( uint32_t rlc_um_get_buffer_occupancy (rlc_um_entity_t *rlc_pP) * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] sduP SDU. (A struct rlc_um_data_req is mapped on sduP->data.) */ -public_rlc_um( void rlc_um_data_req (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, mem_block_t *sduP);) +void +rlc_um_mac_data_indication (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, struct mac_data_ind data_indP); +void +rlc_um_data_req (const protocol_ctxt_t *const ctxt_pP, void *rlc_pP, mem_block_t *sdu_pP) ; /** @} */ # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c index fcd88acbb7..21cfa57b64 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c @@ -94,7 +94,7 @@ void config_req_rlc_um_asn1 ( const DL_UM_RLC_t * const dl_rlc_pP, const rb_id_t rb_idP, const logical_chan_id_t chan_idP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t sourceL2Id ,const uint32_t destinationL2Id #endif @@ -111,16 +111,31 @@ void config_req_rlc_um_asn1 ( #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) if (mbms_flagP) { - AssertFatal(dl_rlc_pP, "No RLC UM DL config"); - AssertFatal(ul_rlc_pP == NULL, "RLC UM UL config present"); + //AssertFatal(dl_rlc_pP, "No RLC UM DL config"); + if(dl_rlc_pP == NULL) { + LOG_E(RLC, "No RLC UM DL config\n"); + return; + } + //AssertFatal(ul_rlc_pP == NULL, "RLC UM UL config present"); + if(ul_rlc_pP != NULL) { + LOG_E(RLC, "RLC UM UL config present\n"); + return; + } + key = RLC_COLL_KEY_MBMS_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, mbms_service_idP, mbms_session_idP); h_rc = hashtable_get(rlc_coll_p, key, (void**)&rlc_union_p); - AssertFatal (h_rc == HASH_TABLE_OK, "RLC NOT FOUND enb id %u rnti %i enb flag %u service id %u, session id %u", - ctxt_pP->module_id, - ctxt_pP->rnti, - ctxt_pP->enb_flag, - mbms_service_idP, - mbms_session_idP); + //AssertFatal (h_rc == HASH_TABLE_OK, "RLC NOT FOUND enb id %u rnti %i enb flag %u service id %u, session id %u", + // ctxt_pP->module_id, + // ctxt_pP->rnti, + // ctxt_pP->enb_flag, + // mbms_service_idP, + // mbms_session_idP); + if(h_rc != HASH_TABLE_OK) { + LOG_E(RLC, "RLC NOT FOUND enb id %u rnti %i enb flag %u service id %u, session id %u\n", + ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, mbms_service_idP, mbms_session_idP); + return; + } + rlc_p = &rlc_union_p->rlc.um; } if ((sourceL2Id >0 ) && (destinationL2Id >0)){ @@ -131,12 +146,17 @@ void config_req_rlc_um_asn1 ( key = RLC_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, rb_idP, srb_flagP); } h_rc = hashtable_get(rlc_coll_p, key, (void**)&rlc_union_p); - AssertFatal (h_rc == HASH_TABLE_OK, "RLC NOT FOUND enb id %u ue id %i enb flag %u rb id %u, srb flag %u", - ctxt_pP->module_id, - ctxt_pP->rnti, - ctxt_pP->enb_flag, - rb_idP, - srb_flagP); + //AssertFatal (h_rc == HASH_TABLE_OK, "RLC NOT FOUND enb id %u ue id %i enb flag %u rb id %u, srb flag %u", + // ctxt_pP->module_id, + // ctxt_pP->rnti, + // ctxt_pP->enb_flag, + // rb_idP, + // srb_flagP); + if(h_rc != HASH_TABLE_OK) { + LOG_E(RLC, "RLC NOT FOUND enb id %u ue id %i enb flag %u rb id %u, srb flag %u\n", + ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, rb_idP, srb_flagP); + return; + } rlc_p = &rlc_union_p->rlc.um; //----------------------------------------------------------------------------- @@ -277,7 +297,11 @@ rlc_um_init ( ) { - AssertFatal(rlc_pP, "Bad RLC UM pointer (NULL)"); + //AssertFatal(rlc_pP, "Bad RLC UM pointer (NULL)"); + if(rlc_pP == NULL) { + LOG_E(RLC, "Bad RLC UM pointer (NULL)\n"); + return; + } if (rlc_pP->initialized) { LOG_D(RLC,PROTOCOL_RLC_UM_CTXT_FMT" [INIT] ALREADY DONE, DOING NOTHING\n", diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h index fc64e95d99..524b75fe16 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h @@ -43,21 +43,6 @@ # include "DL-UM-RLC.h" # include "UL-UM-RLC.h" //----------------------------------------------------------------------------- -# ifdef RLC_UM_CONTROL_PRIMITIVES_C -# define private_rlc_um_control_primitives(x) x -# define protected_rlc_um_control_primitives(x) x -# define public_rlc_um_control_primitives(x) x -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um_control_primitives(x) -# define protected_rlc_um_control_primitives(x) extern x -# define public_rlc_um_control_primitives(x) extern x -# else -# define private_rlc_um_control_primitives(x) -# define protected_rlc_um_control_primitives(x) -# define public_rlc_um_control_primitives(x) extern x -# endif -# endif typedef volatile struct { uint32_t is_uplink_downlink; @@ -79,12 +64,12 @@ typedef volatile struct { * \param[in] rb_idP Radio bearer identifier. * \param[in] chan_idP Transport channel identifier. */ -public_rlc_um_control_primitives( void config_req_rlc_um ( +void config_req_rlc_um ( const protocol_ctxt_t* const ctxt_pP, const srb_flag_t srb_flagP, const rlc_um_info_t * const config_umP, const rb_id_t rb_idP, - const logical_chan_id_t chan_idP);) + const logical_chan_id_t chan_idP); /*! \fn void config_req_rlc_um_asn1 ( * const protocol_ctxt_t* const ctxt_pP, @@ -106,7 +91,7 @@ public_rlc_um_control_primitives( void config_req_rlc_um ( * \param[in] rb_idP Radio bearer identifier. * \param[in] chan_idP Transport channel identifier. */ -public_rlc_um_control_primitives( void config_req_rlc_um_asn1 ( +void config_req_rlc_um_asn1 ( const protocol_ctxt_t* const ctxt_pP, const srb_flag_t srb_flagP, const MBMS_flag_t mbms_flagP, @@ -116,36 +101,36 @@ public_rlc_um_control_primitives( void config_req_rlc_um_asn1 ( const DL_UM_RLC_t * const dl_rlc_pP, const rb_id_t rb_idP, const logical_chan_id_t chan_idP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t sourceL2Id ,const uint32_t destinationL2Id #endif - );) + ); /*! \fn void rlc_um_init (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP) * \brief Initialize a RLC UM protocol instance, initialize all variables, lists, allocate buffers for making this instance ready to be configured with protocol configuration parameters. After this initialization the RLC UM protocol instance will be in RLC_NULL_STATE state. * \param[in] ctxtP Running context. * \param[in] rlc_pP RLC UM protocol instance pointer. */ -protected_rlc_um_control_primitives(void rlc_um_init ( +void rlc_um_init ( const protocol_ctxt_t* const ctxt_pP, - rlc_um_entity_t * const rlc_pP);) + rlc_um_entity_t * const rlc_pP); /*! \fn void rlc_um_reset_state_variables (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP) * \brief Reset protocol variables and state variables to initial values. * \param[in] ctxtP Running context. * \param[in] rlc_pP RLC UM protocol instance pointer. */ -protected_rlc_um_control_primitives(void rlc_um_reset_state_variables ( +void rlc_um_reset_state_variables ( const protocol_ctxt_t* const ctxt_pP, - rlc_um_entity_t * const rlc_pP);) + rlc_um_entity_t * const rlc_pP); /*! \fn void rlc_um_cleanup(rlc_um_entity_t * const rlc_pP) * \brief Free all allocated memory (lists and buffers) previously allocated by this RLC UM instance. * \param[in] rlc_pP RLC UM protocol instance pointer. */ -public_rlc_um_control_primitives( void rlc_um_cleanup( - rlc_um_entity_t * const rlc_pP);) +void rlc_um_cleanup( + rlc_um_entity_t * const rlc_pP); /*! \fn void rlc_um_configure( * const protocol_ctxt_t* const ctxt_pP, @@ -162,13 +147,13 @@ public_rlc_um_control_primitives( void rlc_um_cleanup( * \param[in] tx_sn_field_lengthP Length of the sequence number, 5 or 10 bits in transmission. * \param[in] is_mXchP Is the radio bearer for MCCH, MTCH. */ -protected_rlc_um_control_primitives(void rlc_um_configure( +void rlc_um_configure( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *const rlc_pP, const uint32_t timer_reorderingP, const uint32_t rx_sn_field_lengthP, const uint32_t tx_sn_field_lengthP, - const uint32_t is_mXchP);) + const uint32_t is_mXchP); /*! \fn void rlc_um_set_debug_infos( * const protocol_ctxt_t* const ctxt_pP, @@ -182,11 +167,11 @@ protected_rlc_um_control_primitives(void rlc_um_configure( * \param[in] rb_idP Radio bearer identifier. * \param[in] chan_idP Transport channel identifier. */ -protected_rlc_um_control_primitives(void rlc_um_set_debug_infos( +void rlc_um_set_debug_infos( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, - const logical_chan_id_t chan_idP);) + const logical_chan_id_t chan_idP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c index fe71839231..9405fb7ec1 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c @@ -32,7 +32,6 @@ #include "list.h" #include "UTIL/LOG/log.h" #include "UTIL/LOG/vcd_signal_dumper.h" - //----------------------------------------------------------------------------- signed int rlc_um_get_pdu_infos( const protocol_ctxt_t* const ctxt_pP, @@ -47,7 +46,11 @@ signed int rlc_um_get_pdu_infos( pdu_info_pP->num_li = 0; - AssertFatal( total_sizeP > 0 , "RLC UM PDU LENGTH %d", total_sizeP); + //AssertFatal( total_sizeP > 0 , "RLC UM PDU LENGTH %d", total_sizeP); + if(total_sizeP <= 0) { + LOG_E(RLC, "RLC UM PDU LENGTH %d\n", total_sizeP); + return -1; + } if (sn_lengthP == 10) { pdu_info_pP->fi = (header_pP->b1 >> 3) & 0x03; @@ -62,7 +65,11 @@ signed int rlc_um_get_pdu_infos( pdu_info_pP->header_size = 1; pdu_info_pP->payload = &header_pP->b2; } else { - AssertFatal( sn_lengthP == 5 || sn_lengthP == 10, "RLC UM SN LENGTH %d", sn_lengthP); + //AssertFatal( sn_lengthP == 5 || sn_lengthP == 10, "RLC UM SN LENGTH %d", sn_lengthP); + if(!(sn_lengthP == 5 || sn_lengthP == 10)) { + LOG_E(RLC, "RLC UM SN LENGTH %d\n", sn_lengthP); + return -1; + } } @@ -77,15 +84,23 @@ signed int rlc_um_get_pdu_infos( li_length_in_bytes = li_length_in_bytes ^ 3; if (li_length_in_bytes == 2) { - AssertFatal( total_sizeP >= ((uint64_t)(&e_li_p->b2) - (uint64_t)header_pP), - "DECODING PDU TOO FAR PDU size %d", total_sizeP); + //AssertFatal( total_sizeP >= ((uint64_t)(&e_li_p->b2) - (uint64_t)header_pP), + // "DECODING PDU TOO FAR PDU size %d", total_sizeP); + if(total_sizeP < ((uint64_t)(&e_li_p->b2) - (uint64_t)header_pP)) { + LOG_E(RLC, "DECODING PDU TOO FAR PDU size %d\n", total_sizeP); + return -1; + } pdu_info_pP->li_list[pdu_info_pP->num_li] = ((uint16_t)(e_li_p->b1 << 4)) & 0x07F0; pdu_info_pP->li_list[pdu_info_pP->num_li] |= (((uint8_t)(e_li_p->b2 >> 4)) & 0x000F); li_to_read = e_li_p->b1 & 0x80; pdu_info_pP->header_size += 2; } else { - AssertFatal( total_sizeP >= ((uint64_t)(&e_li_p->b3) - (uint64_t)header_pP), - "DECODING PDU TOO FAR PDU size %d", total_sizeP); + //AssertFatal( total_sizeP >= ((uint64_t)(&e_li_p->b3) - (uint64_t)header_pP), + // "DECODING PDU TOO FAR PDU size %d", total_sizeP); + if(total_sizeP < ((uint64_t)(&e_li_p->b3) - (uint64_t)header_pP)) { + LOG_E(RLC, "DECODING PDU TOO FAR PDU size %d\n", total_sizeP); + return -1; + } pdu_info_pP->li_list[pdu_info_pP->num_li] = ((uint16_t)(e_li_p->b2 << 8)) & 0x0700; pdu_info_pP->li_list[pdu_info_pP->num_li] |= e_li_p->b3; li_to_read = e_li_p->b2 & 0x08; @@ -93,10 +108,16 @@ signed int rlc_um_get_pdu_infos( pdu_info_pP->header_size += 1; } - AssertFatal( pdu_info_pP->num_li <= RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU, - PROTOCOL_RLC_UM_CTXT_FMT"[GET PDU INFO] SN %04d TOO MANY LIs ", + //AssertFatal( pdu_info_pP->num_li <= RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU, + // PROTOCOL_RLC_UM_CTXT_FMT"[GET PDU INFO] SN %04d TOO MANY LIs ", + // PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), + // pdu_info_pP->sn); + if(pdu_info_pP->num_li > RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU) { + LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT"[GET PDU INFO] SN %04d TOO MANY LIs \n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), pdu_info_pP->sn); + return -1; + } sum_li += pdu_info_pP->li_list[pdu_info_pP->num_li]; pdu_info_pP->num_li = pdu_info_pP->num_li + 1; @@ -308,9 +329,17 @@ rlc_um_try_reassembly( __LINE__); #endif } - AssertFatal(size >= 0, "invalid size!"); - AssertFatal((e==0) || (e==1), "invalid e!"); - AssertFatal((fi >= 0) && (fi <= 3), "invalid fi!"); + //AssertFatal(size >= 0, "invalid size!"); + //AssertFatal((e==0) || (e==1), "invalid e!"); + //AssertFatal((fi >= 0) && (fi <= 3), "invalid fi!"); + if((size < 0) || ((e!=0) && (e!=1)) || ((fi < 0) || (fi > 3))){ + LOG_E(RLC, "invalid size %d, e %d, fi %d\n", size, e, fi); + sn = (sn + 1) % rlc_pP->rx_sn_modulo; + if ((sn == rlc_pP->vr_uh) || (sn == end_snP)) { + continue_reassembly = 0; + } + continue; + } if (e == RLC_E_FIXED_PART_DATA_FIELD_FOLLOW) { switch (fi) { @@ -400,11 +429,14 @@ rlc_um_try_reassembly( break; default: - AssertFatal( 0 , PROTOCOL_RLC_UM_CTXT_FMT" fi=%d! TRY REASSEMBLY SHOULD NOT GO HERE (%s:%u)\n", - PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), - fi, - __FILE__, - __LINE__); + //AssertFatal( 0 , PROTOCOL_RLC_UM_CTXT_FMT" fi=%d! TRY REASSEMBLY SHOULD NOT GO HERE (%s:%u)\n", + // PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), + // fi, + // __FILE__, + // __LINE__); + LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" fi=%d! TRY REASSEMBLY SHOULD NOT GO HERE (%s:%u)\n", + PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), fi, __FILE__, __LINE__); + } } else { if (rlc_um_read_length_indicators(&data_p, e_li_p, li_array, &num_li, &size ) >= 0) { @@ -543,11 +575,14 @@ rlc_um_try_reassembly( // data_p is already ok, done by last loop above rlc_um_reassembly (ctxt_pP, rlc_pP, data_p, size); } else { - AssertFatal( 0 !=0, PROTOCOL_RLC_UM_CTXT_FMT" size=%d! SHOULD NOT GO HERE (%s:%u)\n", - PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), - size, - __FILE__, - __LINE__); + //AssertFatal( 0 !=0, PROTOCOL_RLC_UM_CTXT_FMT" size=%d! SHOULD NOT GO HERE (%s:%u)\n", + // PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), + // size, + // __FILE__, + // __LINE__); + LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" size=%d! SHOULD NOT GO HERE (%s:%u)\n", + PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), size, __FILE__, __LINE__); + //rlc_pP->stat_rx_data_pdu_dropped += 1; rlc_pP->stat_rx_data_bytes_dropped += size; } diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h index f62cddfbca..e0dccf2eee 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h @@ -40,21 +40,6 @@ # include "rlc_um_constants.h" # include "list.h" //----------------------------------------------------------------------------- -# ifdef RLC_UM_DAR_C -# define private_rlc_um_dar(x) x -# define protected_rlc_um_dar(x) x -# define public_rlc_um_dar(x) x -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um_dar(x) -# define protected_rlc_um_dar(x) extern x -# define public_rlc_um_dar(x) extern x -# else -# define private_rlc_um_dar(x) -# define protected_rlc_um_dar(x) -# define public_rlc_um_dar(x) extern x -# endif -# endif /*! \fn signed int rlc_um_get_pdu_infos(const protocol_ctxt_t* const ctxt_pP,const rlc_um_entity_t * const rlc_pP,rlc_um_pdu_sn_10_t* header_pP, int16_t total_sizeP, rlc_um_pdu_info_t* pdu_info_pP, uint8_t sn_lengthP) * \brief Extract PDU informations (header fields, data size, etc) from the serialized PDU. * \param[in] ctxt_pP Running context. @@ -65,13 +50,13 @@ * \param[in] sn_lengthP Sequence number length in bits in PDU header (5 or 10). * \return 0 if no error was encountered during the parsing of the PDU, else -1; */ -protected_rlc_um_dar( signed int rlc_um_get_pdu_infos( +signed int rlc_um_get_pdu_infos( const protocol_ctxt_t* const ctxt_pP, const rlc_um_entity_t * const rlc_pP, rlc_um_pdu_sn_10_t * const header_pP, const sdu_size_t total_sizeP, rlc_um_pdu_info_t * const pdu_info_pP, - const uint8_t sn_lengthP)); + const uint8_t sn_lengthP); /*! \fn int rlc_um_read_length_indicators(unsigned char**data_ppP, rlc_um_e_li_t* e_li_pP, unsigned int* li_array_pP, unsigned int *num_li_pP, sdu_size_t *data_size_pP) * \brief Reset protocol variables and state variables to initial values. @@ -82,7 +67,7 @@ protected_rlc_um_dar( signed int rlc_um_get_pdu_infos( * \param[in,out] data_size_pP Pointer on data size. * \return 0 if no error was encountered during the parsing of the PDU, else -1; */ -private_rlc_um_dar( int rlc_um_read_length_indicators(unsigned char**data_ppP, rlc_um_e_li_t* e_li_pP, unsigned int* li_array_pP, unsigned int *num_li_pP, sdu_size_t *data_size_pP)); +int rlc_um_read_length_indicators(unsigned char**data_ppP, rlc_um_e_li_t* e_li_pP, unsigned int* li_array_pP, unsigned int *num_li_pP, sdu_size_t *data_size_pP); /*! \fn void rlc_um_try_reassembly (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, rlc_sn_t start_snP, rlc_sn_t end_snP) * \brief Try reassembly PDUs from DAR buffer, starting at sequence number snP. @@ -92,7 +77,7 @@ private_rlc_um_dar( int rlc_um_read_length_indicators(unsigned char**data_ppP, * \param[in] start_snP First PDU to be reassemblied if possible. * \param[in] end_snP Last excluded highest sequence number of PDU to be reassemblied. */ -private_rlc_um_dar( void rlc_um_try_reassembly (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const rlc_sn_t start_snP, const rlc_sn_t end_snP)); +void rlc_um_try_reassembly (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const rlc_sn_t start_snP, const rlc_sn_t end_snP); /*! \fn void rlc_um_check_timer_reordering(rlc_um_entity_t * const rlc_pP,frame_t frameP) * \brief Check if timer reordering has timed-out, if so it is stopped and has the status "timed-out". @@ -100,7 +85,7 @@ private_rlc_um_dar( void rlc_um_try_reassembly (const protocol_ctxt_t* con * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] frameP Frame index */ -protected_rlc_um_dar(void rlc_um_check_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *const rlc_pP)); +void rlc_um_check_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *const rlc_pP); /*! \fn void rlc_um_stop_and_reset_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP) * \brief Stop and reset the timer reordering. @@ -108,7 +93,7 @@ protected_rlc_um_dar(void rlc_um_check_timer_reordering(const protocol_ctxt_t* c * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] frameP Frame index. */ -protected_rlc_um_dar(void rlc_um_stop_and_reset_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *const rlc_pP);) +void rlc_um_stop_and_reset_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *const rlc_pP); /*! \fn void rlc_um_start_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP) * \brief Re-arm (based on RLC UM config parameter) and start timer reordering. @@ -116,7 +101,7 @@ protected_rlc_um_dar(void rlc_um_stop_and_reset_timer_reordering(const protocol_ * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] frameP Frame index. */ -protected_rlc_um_dar(void rlc_um_start_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP);) +void rlc_um_start_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP); /*! \fn void rlc_um_init_timer_reordering(rlc_um_entity_t * const rlc_pP, const uint32_t ms_durationP) * \brief Initialize the timer reordering with RLC UM time-out config parameter. @@ -124,14 +109,14 @@ protected_rlc_um_dar(void rlc_um_start_timer_reordering(const protocol_ctxt_t* c * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] ms_durationP Duration in milliseconds units. */ -protected_rlc_um_dar(void rlc_um_init_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint32_t ms_durationP);) +void rlc_um_init_timer_reordering(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint32_t ms_durationP); /*! \fn void rlc_um_check_timer_dar_time_out(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP,) * \brief Check if t-Reordering expires and take the appropriate actions as described in 3GPP specifications. * \param[in] ctxt_pP Running context. * \param[in] rlc_pP RLC UM protocol instance pointer. */ -protected_rlc_um_dar( void rlc_um_check_timer_dar_time_out(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP)); +void rlc_um_check_timer_dar_time_out(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP); /*! \fn mem_block_t *rlc_um_remove_pdu_from_dar_buffer(rlc_um_entity_t * const rlc_pP, uint16_t snP) * \brief Remove the PDU with sequence number snP from the DAR buffer and return it. @@ -140,7 +125,7 @@ protected_rlc_um_dar( void rlc_um_check_timer_dar_time_out(const protocol_ctxt_ * \param[in] snP Sequence number. * \return The PDU stored in the DAR buffer having sequence number snP, else return NULL. */ -private_rlc_um_dar( mem_block_t *rlc_um_remove_pdu_from_dar_buffer(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint16_t snP)); +mem_block_t *rlc_um_remove_pdu_from_dar_buffer(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint16_t snP); /*! \fn mem_block_t *rlc_um_remove_pdu_from_dar_buffer(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint16_t snP) * \brief Get the PDU with sequence number snP from the DAR buffer. @@ -149,7 +134,7 @@ private_rlc_um_dar( mem_block_t *rlc_um_remove_pdu_from_dar_buffer(const protoc * \param[in] snP Sequence number. * \return The PDU stored in the DAR buffer having sequence number snP, else return NULL. */ -protected_rlc_um_dar(mem_block_t* rlc_um_get_pdu_from_dar_buffer(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint16_t snP)); +mem_block_t* rlc_um_get_pdu_from_dar_buffer(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint16_t snP); /*! \fn signed int rlc_um_in_window(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP,rlc_sn_t lower_boundP, rlc_sn_t snP, rlc_sn_t higher_boundP) * \brief Compute if the sequence number of a PDU is in a window . @@ -160,7 +145,7 @@ protected_rlc_um_dar(mem_block_t* rlc_um_get_pdu_from_dar_buffer(const protocol_ * \param[in] higher_boundP Higher bound of a window. * \return -2 if lower_boundP > sn, -1 if higher_boundP < sn, 0 if lower_boundP < sn < higher_boundP, 1 if lower_boundP == sn, 2 if higher_boundP == sn, 3 if higher_boundP == sn == lower_boundP. */ -protected_rlc_um_dar(signed int rlc_um_in_window(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const rlc_sn_t lower_boundP, const rlc_sn_t snP, const rlc_sn_t higher_boundP)); +signed int rlc_um_in_window(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const rlc_sn_t lower_boundP, const rlc_sn_t snP, const rlc_sn_t higher_boundP); /*! \fn signed int rlc_um_in_reordering_window(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const rlc_sn_t snP) * \brief Compute if the sequence number of a PDU is in a window . @@ -169,7 +154,7 @@ protected_rlc_um_dar(signed int rlc_um_in_window(const protocol_ctxt_t* const ct * \param[in] snP Sequence number of a theorical PDU. * \return 0 if snP is in reordering window, else -1. */ -protected_rlc_um_dar(signed int rlc_um_in_reordering_window(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const rlc_sn_t snP)); +signed int rlc_um_in_reordering_window(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const rlc_sn_t snP); /*! \fn void rlc_um_receive_process_dar (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, mem_block_t *pdu_mem_pP,rlc_um_pdu_sn_10_t * const pdu_pP, const sdu_size_t tb_sizeP) * \brief Apply the DAR process for a PDU: put it in DAR buffer and try to reassembly or discard it. @@ -179,7 +164,7 @@ protected_rlc_um_dar(signed int rlc_um_in_reordering_window(const protocol_ctxt_ * \param[in] pdu_pP Pointer on the header of the UM PDU. * \param[in] tb_sizeP Size of the UM PDU. */ -protected_rlc_um_dar(void rlc_um_receive_process_dar (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, mem_block_t * pdu_mem_pP,rlc_um_pdu_sn_10_t * const pdu_pP, - const sdu_size_t tb_sizeP)); +void rlc_um_receive_process_dar (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, mem_block_t * pdu_mem_pP,rlc_um_pdu_sn_10_t * const pdu_pP, + const sdu_size_t tb_sizeP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c index bc61ed302e..fa0bf4b288 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c @@ -52,7 +52,7 @@ rlc_um_fsm_notify_event ( LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM WARNING PROTOCOL ERROR - EVENT %02X hex NOT EXPECTED FROM NULL_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), eventP); - AssertFatal(1==0,"RLC-UM FSM WARNING PROTOCOL ERROR - EVENT NOT EXPECTED FROM NULL_STATE"); + //AssertFatal(1==0,"RLC-UM FSM WARNING PROTOCOL ERROR - EVENT NOT EXPECTED FROM NULL_STATE"); return 0; } diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h index 1f7310803b..14ad253dcc 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h @@ -35,21 +35,6 @@ # ifndef __RLC_UM_FSM_PROTO_EXTERN_H__ # define __RLC_UM_FSM_PROTO_EXTERN_H__ //----------------------------------------------------------------------------- -# ifdef RLC_UM_FSM_C -# define private_rlc_um_fsm(x) x -# define protected_rlc_um_fsm(x) x -# define public_rlc_um_fsm(x) x -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um_fsm(x) -# define protected_rlc_um_fsm(x) extern x -# define public_rlc_um_fsm(x) extern x -# else -# define private_rlc_um_fsm(x) -# define protected_rlc_um_fsm(x) -# define public_rlc_um_fsm(x) extern x -# endif -# endif # include "platform_types.h" # include "rlc_um_entity.h" //----------------------------------------------------------------------------- @@ -65,6 +50,6 @@ * \return 1 if no error was encountered, 0 if the event was not processed. * \Note This FSM is not LTE 9.3.0 compliant, it has to be modified or removed. */ -protected_rlc_um_fsm(int rlc_um_fsm_notify_event (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP, uint8_t eventP)); +int rlc_um_fsm_notify_event (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP, uint8_t eventP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h index 95aac89623..defdd1364e 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h @@ -35,21 +35,6 @@ # ifndef __RLC_UM_REASSEMBLY_PROTO_EXTERN_H__ # define __RLC_UM_REASSEMBLY_PROTO_EXTERN_H__ //----------------------------------------------------------------------------- -# ifdef RLC_UM_REASSEMBLY_C -# define private_rlc_um_reassembly(x) x -# define protected_rlc_um_reassembly(x) x -# define public_rlc_um_reassembly(x) x -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um_reassembly(x) -# define protected_rlc_um_reassembly(x) extern x -# define public_rlc_um_reassembly(x) extern x -# else -# define private_rlc_um_reassembly(x) -# define protected_rlc_um_reassembly(x) -# define public_rlc_um_reassembly(x) extern x -# endif -# endif # include "rlc_um_entity.h" //----------------------------------------------------------------------------- /*! \fn void rlc_um_clear_rx_sdu (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP) @@ -57,7 +42,7 @@ * \param[in] ctxtP Running context. * \param[in] rlcP RLC UM protocol instance pointer. */ -protected_rlc_um_reassembly(void rlc_um_clear_rx_sdu (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP)); +void rlc_um_clear_rx_sdu (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP); /*! \fn void rlc_um_reassembly (uint8_t * srcP, int32_t lengthP, rlc_um_entity_t *rlcP, frame_t frame) * \brief Reassembly lengthP bytes to the end of the SDU in construction. @@ -66,13 +51,13 @@ protected_rlc_um_reassembly(void rlc_um_clear_rx_sdu (const protocol_ctxt_t* con * \param[in] srcP Pointer on data to be reassemblied. * \param[in] lengthP Length to reassembly. */ -protected_rlc_um_reassembly(void rlc_um_reassembly (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP, uint8_t * srcP, int32_t lengthP)); +void rlc_um_reassembly (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP, uint8_t * srcP, int32_t lengthP); /*! \fn void rlc_um_send_sdu (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP) * \brief Send SDU if any reassemblied to upper layer. * \param[in] ctxtP Running context. * \param[in] rlcP RLC UM protocol instance pointer. */ -protected_rlc_um_reassembly(void rlc_um_send_sdu (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP)); +void rlc_um_send_sdu (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h index 5e93f272fd..84df8ac77c 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h @@ -33,22 +33,6 @@ */ # ifndef __RLC_UM_RECEIVER_PROTO_EXTERN_H__ # define __RLC_UM_RECEIVER_PROTO_EXTERN_H__ -# ifdef RLC_UM_RECEIVER_C -# define private_rlc_um_receiver(x) x -# define protected_rlc_um_receiver(x) x -# define public_rlc_um_receiver(x) x -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um_receiver(x) -# define protected_rlc_um_receiver(x) extern x -# define public_rlc_um_receiver(x) extern x -# else -# define private_rlc_um_receiver(x) -# define protected_rlc_um_receiver(x) -# define public_rlc_um_receiver(x) extern x -# endif -# endif - # include "rlc_um_entity.h" # include "mac_primitives.h" @@ -57,7 +41,7 @@ * \param[in] ctxtP Running context. * \param[in] rlc_pP RLC UM protocol instance pointer. */ -protected_rlc_um_receiver( void rlc_um_display_rx_window(const protocol_ctxt_t* const ctxtP, rlc_um_entity_t * const rlc_pP);) +void rlc_um_display_rx_window(const protocol_ctxt_t* const ctxtP, rlc_um_entity_t * const rlc_pP); /*! \fn void rlc_um_receive (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t * const rlc_pP, struct mac_data_ind data_indP) * \brief Handle the MAC data indication, retreive the transport blocks and send them one by one to the DAR process. @@ -65,6 +49,6 @@ protected_rlc_um_receiver( void rlc_um_display_rx_window(const protocol_ctxt_t* * \param[in] rlc_pP RLC UM protocol instance pointer. * \param[in] data_indP Data indication structure containing transport block received from MAC layer. */ -protected_rlc_um_receiver( void rlc_um_receive (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t * const rlc_pP, struct mac_data_ind data_indP)); +void rlc_um_receive (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t * const rlc_pP, struct mac_data_ind data_indP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c index 98a44ceeeb..91ae265f17 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c @@ -411,7 +411,11 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP #if TRACE_RLC_PAYLOAD rlc_util_print_hex_octets(RLC, pdu_mem_p->data, data_pdu_size); #endif - AssertFatal( pdu_tb_req_p->tb_size > 0 , "SEGMENT10: FINAL RLC UM PDU LENGTH %d", pdu_tb_req_p->tb_size); + //AssertFatal( pdu_tb_req_p->tb_size > 0 , "SEGMENT10: FINAL RLC UM PDU LENGTH %d", pdu_tb_req_p->tb_size); + if(pdu_tb_req_p->tb_size <= 0) { + LOG_E(RLC, "SEGMENT10: FINAL RLC UM PDU LENGTH %d\n", pdu_tb_req_p->tb_size); + break; + } pdu_p = NULL; pdu_mem_p = NULL; @@ -744,13 +748,11 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) sdu_mngt_p = NULL; } else { -#if TRACE_RLC_UM_SEGMENT - LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Filling PDU with %d all remaining bytes of SDU and reduce TB size by %d bytes\n", + LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Filling PDU with %d all remaining bytes of SDU and reduce TB size by %d bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size, pdu_remaining_size - sdu_mngt_p->sdu_remaining_size); -#endif - assert(1!=1); + //assert(1!=1); memcpy(data, data_sdu_p, sdu_mngt_p->sdu_remaining_size); // reduce the size of the PDU continue_fill_pdu_with_sdu = 0; @@ -792,7 +794,11 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) #if TRACE_RLC_PAYLOAD rlc_util_print_hex_octets(RLC, (unsigned char*)pdu_mem_p->data, data_pdu_size); #endif - AssertFatal( pdu_tb_req_p->tb_size > 0 , "SEGMENT5: FINAL RLC UM PDU LENGTH %d", pdu_tb_req_p->tb_size); + //AssertFatal( pdu_tb_req_p->tb_size > 0 , "SEGMENT5: FINAL RLC UM PDU LENGTH %d", pdu_tb_req_p->tb_size); + if(pdu_tb_req_p->tb_size <= 0) { + LOG_E(RLC, "SEGMENT5: FINAL RLC UM PDU LENGTH %d\n", pdu_tb_req_p->tb_size); + break; + } pdu_p = NULL; pdu_mem_p = NULL; diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h index 9794f9a502..0d52f1a896 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h @@ -40,27 +40,12 @@ # include "rlc_um_constants.h" # include "list.h" //----------------------------------------------------------------------------- -# ifdef RLC_UM_SEGMENT_C -# define private_rlc_um_segment(x) x -# define protected_rlc_um_segment(x) x -# define public_rlc_um_segment(x) x -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um_segment(x) -# define protected_rlc_um_segment(x) extern x -# define public_rlc_um_segment(x) extern x -# else -# define private_rlc_um_segment(x) -# define protected_rlc_um_segment(x) -# define public_rlc_um_segment(x) extern x -# endif -# endif /*! \fn void rlc_um_segment_10 (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP) * \brief Segmentation procedure with 10 bits sequence number, segment the first SDU in buffer and create a PDU of the size (nb_bytes_to_transmit) requested by MAC if possible and put it in the list "pdus_to_mac_layer". * \param[in] ctxtP Running context. * \param[in] rlcP RLC UM protocol instance pointer. */ -protected_rlc_um_segment(void rlc_um_segment_10 (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP)); +void rlc_um_segment_10 (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP); /*! \fn void rlc_um_segment_5 (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP) @@ -68,6 +53,6 @@ protected_rlc_um_segment(void rlc_um_segment_10 (const protocol_ctxt_t* const ct * \param[in] ctxtP Running context. * \param[in] rlcP RLC UM protocol instance pointer. */ -protected_rlc_um_segment(void rlc_um_segment_5 (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP)); +void rlc_um_segment_5 (const protocol_ctxt_t* const ctxtP, rlc_um_entity_t *rlcP); /** @} */ # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c index 2c1fa9333f..4d238ea841 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c @@ -317,7 +317,7 @@ void rlc_um_v9_3_0_test_send_sdu(rlc_um_entity_t *um_txP, int sdu_indexP) assert(g_send_id_write_index[um_txP->rb_id] < TEST_MAX_SEND_SDU); } else { printf("Out of memory error\n"); - exit(-1); +// exit(-1); } } @@ -406,9 +406,8 @@ void rlc_um_v9_3_0_test_mac_rlc_loop (struct mac_data_ind* data_indP, struct ma if (*drop_countP == 0) { tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size, __func__); - memset(tb_dst->data, 0, sizeof (mac_rlc_max_rx_header_size_t) + tb_size); - if (tb_dst != NULL) { + memset(tb_dst->data, 0, sizeof (mac_rlc_max_rx_header_size_t) + tb_size); //printf("[RLC-LOOP] Testing tb_dst (1)\n"); check_free_mem_block(tb_dst, __func__); tb_dst->next = NULL; @@ -427,7 +426,7 @@ void rlc_um_v9_3_0_test_mac_rlc_loop (struct mac_data_ind* data_indP, struct ma check_free_mem_block(tb_dst, __func__); } else { printf("Out of memory error\n"); - exit(-1); +// exit(-1); } } else { printf("[RLC-LOOP] DROPPING 1 TB\n"); diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h index 2c874b8d24..6da464aa28 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h @@ -21,37 +21,22 @@ # ifndef __RLC_UM_TEST_H__ # define __RLC_UM_TEST_H__ -# ifdef RLC_UM_TEST_C -# define private_rlc_um_test(x) x -# define protected_rlc_um_test(x) x -# define public_rlc_um_test(x) x -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um_test(x) -# define protected_rlc_um_test(x) extern x -# define public_rlc_um_test(x) extern x -# else -# define private_rlc_um_test(x) -# define protected_rlc_um_test(x) -# define public_rlc_um_test(x) extern x -# endif -# endif -public_rlc_um_test(rlc_um_entity_t um_tx;) -public_rlc_um_test(rlc_um_entity_t um_rx;) +rlc_um_entity_t um_tx; +rlc_um_entity_t um_rx; -protected_rlc_um_test(void rlc_um_v9_3_0_test_windows_5(void);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_windows_10(void);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_data_conf(module_id_t module_idP, rb_id_t rb_idP, mui_t muiP, rlc_tx_status_t statusP);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_send_sdu(rlc_um_entity_t *um_txP, int sdu_indexP);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_exchange_pdus(rlc_um_entity_t *um_txP,rlc_um_entity_t *um_RxP, uint16_t bytes_txP,uint16_t bytes_rxP);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_exchange_delayed_pdus(rlc_um_entity_t *um_txP, rlc_um_entity_t *um_rxP, uint16_t bytes_txP, uint16_t bytes_rxP, signed int time_tx_delayedP, - signed int time_rx_delayedP, int is_frame_incrementedP);) -protected_rlc_um_test(void rlc_um_v9_3_0_buffer_delayed_rx_mac_data_ind(struct mac_data_ind* data_ind_rxP, signed int time_tx_delayedP);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_data_req *data_requestP, int* drop_countP, int *tx_packetsP, int* dropped_tx_packetsP);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_data_ind (module_id_t module_idP, rb_id_t rb_idP, sdu_size_t sizeP, - mem_block_t *sduP);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_tx_rx_10(void);) -protected_rlc_um_test(void rlc_um_v9_3_0_test_tx_rx_5(void);) -public_rlc_um_test( void rlc_um_v9_3_0_test_print_trace (void);) -public_rlc_um_test( void rlc_um_v9_3_0_test(void)); +void rlc_um_v9_3_0_test_windows_5(void); +void rlc_um_v9_3_0_test_windows_10(void); +void rlc_um_v9_3_0_test_data_conf(module_id_t module_idP, rb_id_t rb_idP, mui_t muiP, rlc_tx_status_t statusP); +void rlc_um_v9_3_0_test_send_sdu(rlc_um_entity_t *um_txP, int sdu_indexP); +void rlc_um_v9_3_0_test_exchange_pdus(rlc_um_entity_t *um_txP,rlc_um_entity_t *um_RxP, uint16_t bytes_txP,uint16_t bytes_rxP); +void rlc_um_v9_3_0_test_exchange_delayed_pdus(rlc_um_entity_t *um_txP, rlc_um_entity_t *um_rxP, uint16_t bytes_txP, uint16_t bytes_rxP, signed int time_tx_delayedP, + signed int time_rx_delayedP, int is_frame_incrementedP); +void rlc_um_v9_3_0_buffer_delayed_rx_mac_data_ind(struct mac_data_ind* data_ind_rxP, signed int time_tx_delayedP); +void rlc_um_v9_3_0_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_data_req *data_requestP, int* drop_countP, int *tx_packetsP, int* dropped_tx_packetsP); +void rlc_um_v9_3_0_test_data_ind (module_id_t module_idP, rb_id_t rb_idP, sdu_size_t sizeP, + mem_block_t *sduP); +void rlc_um_v9_3_0_test_tx_rx_10(void); +void rlc_um_v9_3_0_test_tx_rx_5(void); +void rlc_um_v9_3_0_test_print_trace (void); +void rlc_um_v9_3_0_test(void); # endif diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h index 261183ad1d..598518f1c8 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h @@ -37,21 +37,6 @@ # include "rlc_um_structs.h" # include "rlc_um_constants.h" //----------------------------------------------------------------------------- -# ifdef RLC_UM_VERY_SIMPLE_TEST_C -# define private_rlc_um_very_simple_test(x) x -# define protected_rlc_um_very_simple_test(x) x -# define public_rlc_um_very_simple_test(x) x -# else -# ifdef RLC_UM_MODULE -# define private_rlc_um_very_simple_test(x) -# define protected_rlc_um_very_simple_test(x) extern x -# define public_rlc_um_very_simple_test(x) extern x -# else -# define private_rlc_um_very_simple_test(x) -# define protected_rlc_um_very_simple_test(x) -# define public_rlc_um_very_simple_test(x) extern x -# endif -# endif #define RLC_UM_TEST_SDU_TYPE_TCPIP 0 #define RLC_UM_TEST_SDU_TYPE_VOIP 1 #define RLC_UM_TEST_SDU_TYPE_SMALL 2 @@ -61,5 +46,5 @@ #define voip_sdu "Nos tests montrent que le nouveau Toshiba MK7559GSXP, un disque dur de 750 Go" #define very_small_sdu "NoS tEsTs MoNtReNt" -public_rlc_um_very_simple_test(void rlc_um_test_send_sdu (rlc_um_entity_t* rlcP, uint32_t frame, unsigned int sdu_typeP)); +void rlc_um_test_send_sdu (rlc_um_entity_t* rlcP, uint32_t frame, unsigned int sdu_typeP); # endif diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c index 99a0b494ac..045fcbc601 100644 --- a/openair2/LAYER2/RLC/rlc.c +++ b/openair2/LAYER2/RLC/rlc.c @@ -30,6 +30,7 @@ #include "rlc.h" #include "mem_block.h" #include "../MAC/mac_extern.h" +#include "LAYER2/RLC/UM_v9.3.0/rlc_um.h" #include "UTIL/LOG/log.h" #include "UTIL/OCG/OCG_vars.h" #include "UTIL/LOG/vcd_signal_dumper.h" @@ -135,7 +136,12 @@ rlc_op_status_t rlc_stat_req ( hash_key_t key = HASHTABLE_NOT_A_KEY_VALUE; hashtable_rc_t h_rc; - AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + //AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + if(rb_idP >= NB_RB_MAX){ + LOG_E(RLC, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + return RLC_OP_STATUS_BAD_PARAMETER; + } + key = RLC_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, rb_idP, srb_flagP); h_rc = hashtable_get(rlc_coll_p, key, (void**)&rlc_union_p); @@ -221,8 +227,7 @@ rlc_op_status_t rlc_stat_req ( *stat_rx_data_bytes_out_of_window = 0; *stat_timer_poll_retransmit_timed_out = 0; *stat_timer_status_prohibit_timed_out = 0; - rlc_um_stat_req (ctxt_pP, - &rlc_union_p->rlc.um, + rlc_um_stat_req (&rlc_union_p->rlc.um, stat_tx_pdcp_sdu, stat_tx_pdcp_bytes, stat_tx_pdcp_sdu_discarded, @@ -315,7 +320,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, confirm_t confirmP, sdu_size_t sdu_sizeP, mem_block_t *sdu_pP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t * const sourceL2Id ,const uint32_t * const destinationL2Id #endif @@ -353,13 +358,30 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, #endif if (MBMS_flagP) { - AssertFatal (rb_idP < NB_RB_MBMS_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MBMS_MAX); + //AssertFatal (rb_idP < NB_RB_MBMS_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MBMS_MAX); + if(rb_idP >= NB_RB_MBMS_MAX){ + LOG_E(RLC, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MBMS_MAX); + return RLC_OP_STATUS_BAD_PARAMETER; + } } else { - AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + //AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + if(rb_idP >= NB_RB_MAX){ + LOG_E(RLC, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + return RLC_OP_STATUS_BAD_PARAMETER; + } } - DevAssert(sdu_pP != NULL); - DevCheck(sdu_sizeP > 0, sdu_sizeP, 0, 0); + //DevAssert(sdu_pP != NULL); + if(sdu_pP == NULL){ + LOG_E(RLC, "sdu_pP == NULL\n"); + return RLC_OP_STATUS_BAD_PARAMETER; + } + + //DevCheck(sdu_sizeP > 0, sdu_sizeP, 0, 0); + if(sdu_sizeP <= 0) { + LOG_E(RLC, "sdu_sizeP %d, file %s, line %d\n", sdu_sizeP, __FILE__ ,__LINE__); + return RLC_OP_STATUS_BAD_PARAMETER; + } #if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) DevCheck(MBMS_flagP == 0, MBMS_flagP, 0, 0); @@ -396,6 +418,8 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, } else { rlc_mode = RLC_MODE_NONE; //AssertFatal (0 , "RLC not configured key %ju\n", key); + LOG_E(RLC, "not configured key %lu\n", key); + return RLC_OP_STATUS_OUT_OF_RESSOURCES; } if (MBMS_flagP == 0) { @@ -440,6 +464,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, return RLC_OP_STATUS_OK; } else { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); + free_mem_block(sdu_pP, __func__); return RLC_OP_STATUS_INTERNAL_ERROR; } @@ -473,6 +498,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, return RLC_OP_STATUS_OK; } else { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); + free_mem_block(sdu_pP, __func__); return RLC_OP_STATUS_INTERNAL_ERROR; } @@ -495,6 +521,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, } else { //handle_event(ERROR,"FILE %s FONCTION rlc_data_req() LINE %s : out of memory\n", __FILE__, __LINE__); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); + free_mem_block(sdu_pP, __func__); return RLC_OP_STATUS_INTERNAL_ERROR; } @@ -529,6 +556,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP, return RLC_OP_STATUS_OK; } else { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RLC_DATA_REQ,VCD_FUNCTION_OUT); + free_mem_block(sdu_pP, __func__); return RLC_OP_STATUS_BAD_PARAMETER; } } else { @@ -622,7 +650,11 @@ rlc_module_init (void) rlc_rrc_data_conf = NULL; rlc_coll_p = hashtable_create ((maxDRB + 2) * 16, NULL, rb_free_rlc_union); - AssertFatal(rlc_coll_p != NULL, "UNRECOVERABLE error, RLC hashtable_create failed"); + //AssertFatal(rlc_coll_p != NULL, "UNRECOVERABLE error, RLC hashtable_create failed"); + if(rlc_coll_p == NULL) { + LOG_E(RLC, "UNRECOVERABLE error, RLC hashtable_create failed\n"); + return -1; + } for (module_id1=0; module_id1 < MAX_MOBILES_PER_ENB; module_id1++) { #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h index e3787d8417..424fcbd98e 100644 --- a/openair2/LAYER2/RLC/rlc.h +++ b/openair2/LAYER2/RLC/rlc.h @@ -44,7 +44,7 @@ # include "rlc_am_structs.h" # include "rlc_tm_structs.h" # include "rlc_um_structs.h" -# include "asn1_constants.h" +# include "asn_constant.h" # include "UTIL/LOG/log.h" # include "mem_block.h" //# include "PHY/defs.h" @@ -59,49 +59,8 @@ #include "PMCH-InfoList-r9.h" #endif -#ifdef CMAKER typedef uint64_t hash_key_t; #define HASHTABLE_NOT_A_KEY_VALUE ((uint64_t)-1) -#endif -//----------------------------------------------------------------------------- -# ifdef RLC_MAC_C -# define private_rlc_mac(x) x -# define public_rlc_mac(x) x -# else -# define private_rlc_mac(x) -# define public_rlc_mac(x) extern x -# endif - -# ifdef RLC_MPLS_C -# define private_rlc_mpls(x) x -# define public_rlc_mpls(x) x -# else -# define private_rlc_mpls(x) -# define public_rlc_mpls(x) extern x -# endif - -# ifdef RLC_RRC_C -# define private_rlc_rrc(x) x -# define public_rlc_rrc(x) x -# else -# define private_rlc_rrc(x) -# define public_rlc_rrc(x) extern x -# endif - -# ifdef RLC_C -# define private_rlc(x) x -# define protected_rlc(x) x -# define public_rlc(x) x -# else -# define private_rlc(x) -# if defined(RLC_MAC_C) || defined(RLC_MPLS_C) || defined(RLC_RRC_C) || defined(RLC_AM_C) || defined(RLC_TM_C) || defined(RLC_UM_C) || defined (PDCP_C) -# define protected_rlc(x) extern x -# else -# define protected_rlc(x) -# endif -# define public_rlc(x) extern x -# endif - //----------------------------------------------------------------------------- #define RLC_OP_STATUS_OK 1 @@ -176,17 +135,17 @@ typedef struct { #define RLC_MAX_MBMS_LC (maxSessionPerPMCH * maxServiceCount) #define RLC_MAX_LC ((max_val_DRB_Identity+1)* MAX_MOBILES_PER_ENB) -protected_rlc(void (*rlc_rrc_data_ind)( +void (*rlc_rrc_data_ind)( const protocol_ctxt_t* const ctxtP, const rb_id_t rb_idP, const sdu_size_t sdu_sizeP, - const uint8_t * const sduP);) + const uint8_t * const sduP); -protected_rlc(void (*rlc_rrc_data_conf)( +void (*rlc_rrc_data_conf)( const protocol_ctxt_t* const ctxtP, const rb_id_t rb_idP, const mui_t muiP, - const rlc_tx_status_t statusP);) + const rlc_tx_status_t statusP); typedef void (rrc_data_ind_cb_t)( const protocol_ctxt_t* const ctxtP, @@ -234,10 +193,10 @@ typedef struct rlc_mbms_id_s { # define maxSessionPerPMCH 1 # endif #endif -//public_rlc(rlc_mbms_t rlc_mbms_array_ue[MAX_MOBILES_PER_ENB][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h -//public_rlc(rlc_mbms_t rlc_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h -public_rlc(rlc_mbms_id_t rlc_mbms_lcid2service_session_id_ue[MAX_MOBILES_PER_ENB][RLC_MAX_MBMS_LC];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h -public_rlc(rlc_mbms_id_t rlc_mbms_lcid2service_session_id_eNB[MAX_eNB][RLC_MAX_MBMS_LC];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h +//rlc_mbms_t rlc_mbms_array_ue[MAX_MOBILES_PER_ENB][maxServiceCount][maxSessionPerPMCH]; // some constants from openair2/RRC/LTE/MESSAGES/asn1_constants.h +//rlc_mbms_t rlc_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH]; // some constants from openair2/RRC/LTE/MESSAGES/asn1_constants.h +rlc_mbms_id_t rlc_mbms_lcid2service_session_id_ue[MAX_MOBILES_PER_ENB][RLC_MAX_MBMS_LC]; // some constants from openair2/RRC/LTE/MESSAGES/asn1_constants.h +rlc_mbms_id_t rlc_mbms_lcid2service_session_id_eNB[MAX_eNB][RLC_MAX_MBMS_LC]; // some constants from openair2/RRC/LTE/MESSAGES/asn1_constants.h #define rlc_mbms_enb_get_lcid_by_rb_id(Enb_mOD,rB_iD) rlc_mbms_rbid2lcid_eNB[Enb_mOD][rB_iD] ; @@ -253,8 +212,8 @@ public_rlc(rlc_mbms_id_t rlc_mbms_lcid2service_session_id_eNB[MAX_eNB][RL rlc_mbms_rbid2lcid_ue[uE_mOD][rB_iD] = lOG_cH_iD; \ } while (0); -public_rlc(logical_chan_id_t rlc_mbms_rbid2lcid_ue [MAX_MOBILES_PER_ENB][NB_RB_MBMS_MAX];) /*!< \brief Pairing logical channel identifier with radio bearer identifer. */ -public_rlc(logical_chan_id_t rlc_mbms_rbid2lcid_eNB[MAX_eNB][NB_RB_MBMS_MAX];) /*!< \brief Pairing logical channel identifier with radio bearer identifer. */ +logical_chan_id_t rlc_mbms_rbid2lcid_ue [MAX_MOBILES_PER_ENB][NB_RB_MBMS_MAX]; /*!< \brief Pairing logical channel identifier with radio bearer identifer. */ +logical_chan_id_t rlc_mbms_rbid2lcid_eNB[MAX_eNB][NB_RB_MBMS_MAX]; /*!< \brief Pairing logical channel identifier with radio bearer identifer. */ #define RLC_COLL_KEY_VALUE(eNB_iD, rNTI, iS_eNB, rB_iD, iS_sRB) \ @@ -302,7 +261,7 @@ public_rlc(logical_chan_id_t rlc_mbms_rbid2lcid_eNB[MAX_eNB][NB_RB_MBMS_MAX]; (((hash_key_t)(sESSION_ID)) << 37) | \ (((hash_key_t)(0x0000000000000001)) << 63)) -public_rlc(hash_table_t *rlc_coll_p;) +hash_table_t *rlc_coll_p; /*! \fn tbs_size_t mac_rlc_serialize_tb (char* bufferP, list_t transport_blocksP) * \brief Serialize a list of transport blocks coming from RLC in order to be processed by MAC. @@ -310,7 +269,7 @@ public_rlc(hash_table_t *rlc_coll_p;) * \param[in] transport_blocksP List of transport blocks. * \return The amount of bytes that have been written due to serialization. */ -private_rlc_mac(tbs_size_t mac_rlc_serialize_tb (char*, list_t);) +tbs_size_t mac_rlc_serialize_tb (char*, list_t); /*! \fn struct mac_data_ind mac_rlc_deserialize_tb (char* bufferP, tb_size_t tb_sizeP, num_tb_t num_tbP, crc_t *crcsP) * \brief Serialize a list of transport blocks coming from RLC in order to be processed by MAC. @@ -320,7 +279,7 @@ private_rlc_mac(tbs_size_t mac_rlc_serialize_tb (char*, list_t);) * \param[in] crcsP Array of CRC for each transport block. * \return A mac_data_ind structure containing a list of transport blocks. */ -private_rlc_mac(struct mac_data_ind mac_rlc_deserialize_tb (char*, tb_size_t, num_tb_t, crc_t *);) +struct mac_data_ind mac_rlc_deserialize_tb (char*, tb_size_t, num_tb_t, crc_t *); //----------------------------------------------------------------------------- @@ -336,14 +295,14 @@ private_rlc_mac(struct mac_data_ind mac_rlc_deserialize_tb (char*, tb_size_t, * \param[in] pmch_info_listP eMBMS pmch info list to be created. * \return A status about the processing, OK or error code. */ -public_rlc_rrc( rlc_op_status_t rrc_rlc_config_asn1_req ( +rlc_op_status_t rrc_rlc_config_asn1_req ( const protocol_ctxt_t* const, const SRB_ToAddModList_t* const , const DRB_ToAddModList_t* const , const DRB_ToReleaseList_t* const , const PMCH_InfoList_r9_t * const pmch_info_listP , const uint32_t , - const uint32_t );) + const uint32_t ); #else /*! \fn rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t* const ctxtP, const SRB_ToAddModList_t* const srb2add_listP, const DRB_ToAddModList_t* const drb2add_listP, const DRB_ToReleaseList_t* const drb2release_listP) * \brief Function for RRC to configure a Radio Bearer. @@ -353,11 +312,11 @@ public_rlc_rrc( rlc_op_status_t rrc_rlc_config_asn1_req ( * \param[in] drb2release_listP DRB configuration list to be released. * \return A status about the processing, OK or error code. */ -public_rlc_rrc( rlc_op_status_t rrc_rlc_config_asn1_req ( +rlc_op_status_t rrc_rlc_config_asn1_req ( const protocol_ctxt_t* const, const SRB_ToAddModList_t* const , const DRB_ToAddModList_t* const , - const DRB_ToReleaseList_t* const );) + const DRB_ToReleaseList_t* const ); #endif @@ -366,8 +325,8 @@ public_rlc_rrc( rlc_op_status_t rrc_rlc_config_asn1_req ( * struct pointed by of the rlcu_pP parameter. Free the rlc_union_t struct also. * \param[in] rlcu_pP Pointer on the rlc_union_t struct. */ -public_rlc_rrc(void - rb_free_rlc_union (void *rlcu_pP);) +void + rb_free_rlc_union (void *rlcu_pP); /*! \fn rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const ctxtP) @@ -375,7 +334,7 @@ public_rlc_rrc(void * \param[in] ctxtP Running context. * \return A status about the processing, OK or error code. */ -public_rlc_rrc(rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const);) +rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const); /*! \fn rlc_op_status_t rrc_rlc_remove_rlc (const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_idP) @@ -386,7 +345,7 @@ public_rlc_rrc(rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const); * \param[in] rb_idP Radio bearer identifier. * \return A status about the processing, OK or error code. */ -public_rlc_rrc(rlc_op_status_t rrc_rlc_remove_rlc (const protocol_ctxt_t* const, const srb_flag_t, const MBMS_flag_t, const rb_id_t );) +rlc_op_status_t rrc_rlc_remove_rlc (const protocol_ctxt_t* const, const srb_flag_t, const MBMS_flag_t, const rb_id_t ); /*! \fn rlc_union_t* rrc_rlc_add_rlc (const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_idP, logical_chan_id_t chan_idP, rlc_mode_t rlc_modeP) * \brief Add a RLC protocol instance to a radio bearer. @@ -398,12 +357,12 @@ public_rlc_rrc(rlc_op_status_t rrc_rlc_remove_rlc (const protocol_ctxt_t* cons * \param[in] rlc_modeP Mode of RLC (AM, UM, TM). * \return A status about the processing, OK or error code. */ -private_rlc_rrc(rlc_union_t* rrc_rlc_add_rlc (const protocol_ctxt_t* const, const srb_flag_t, const MBMS_flag_t MBMS_flagP, const rb_id_t, logical_chan_id_t, rlc_mode_t -#ifdef Rel14 +rlc_union_t* rrc_rlc_add_rlc (const protocol_ctxt_t* const, const srb_flag_t, const MBMS_flag_t MBMS_flagP, const rb_id_t, logical_chan_id_t, rlc_mode_t +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t sourceL2Id, const uint32_t destinationL2Id #endif -);) +); /*! \fn rlc_op_status_t rrc_rlc_config_req ( const protocol_ctxt_t* const ctxtP, @@ -421,13 +380,13 @@ private_rlc_rrc(rlc_union_t* rrc_rlc_add_rlc (const protocol_ctxt_t* const * \param[in] rlc_infoP RLC configuration parameters issued from Radio Resource Manager. * \return A status about the processing, OK or error code. */ -public_rlc_rrc( rlc_op_status_t rrc_rlc_config_req ( +rlc_op_status_t rrc_rlc_config_req ( const protocol_ctxt_t* const, const srb_flag_t, const MBMS_flag_t, config_action_t, const rb_id_t, - rlc_info_t );) + rlc_info_t ); /*! \fn rlc_op_status_t rrc_rlc_data_req (const protocol_ctxt_t* const ctxtP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_idP, mui_t muiP, confirm_t confirmP, sdu_size_t sdu_sizeP, char* sduP) * \brief Function for RRC to send a SDU through a Signalling Radio Bearer. @@ -440,14 +399,14 @@ public_rlc_rrc( rlc_op_status_t rrc_rlc_config_req ( * \param[in] sduP SDU. * \return A status about the processing, OK or error code. */ -public_rlc_rrc( rlc_op_status_t rrc_rlc_data_req (const protocol_ctxt_t* const , const MBMS_flag_t, const rb_id_t, mui_t, confirm_t, sdu_size_t, char *);) +rlc_op_status_t rrc_rlc_data_req (const protocol_ctxt_t* const , const MBMS_flag_t, const rb_id_t, mui_t, confirm_t, sdu_size_t, char *); /*! \fn void rrc_rlc_register_rrc ( void (*rrc_data_indP) (const protocol_ctxt_t* const ctxtP, const rb_id_t rb_idP, sdu_size_t sdu_sizeP, char* sduP), void (*rrc_data_confP) (const protocol_ctxt_t* const ctxtP, const rb_id_t rb_idP, mui_t muiP, rlc_tx_status_t statusP) * \brief This function is called by RRC to register its DATA-INDICATE and DATA-CONFIRM handlers to RLC layer. * \param[in] rrc_data_indP Pointer on RRC data indicate function. * \param[in] rrc_data_confP Pointer on RRC data confirm callback function. */ -public_rlc_rrc(void rrc_rlc_register_rrc (rrc_data_ind_cb_t rrc_data_indP, rrc_data_conf_cb_t rrc_data_confP);) +void rrc_rlc_register_rrc (rrc_data_ind_cb_t rrc_data_indP, rrc_data_conf_cb_t rrc_data_confP); //----------------------------------------------------------------------------- // PUBLIC INTERFACE WITH MAC @@ -464,12 +423,12 @@ public_rlc_rrc(void rrc_rlc_register_rrc (rrc_data_ind_cb_t rrc_data_indP, rrc_d * \param [in,out] bufferP Memory area to fill with the bytes requested by MAC. * \return A status about the processing, OK or error code. */ -public_rlc_mac(tbs_size_t mac_rlc_data_req (const module_id_t, const rnti_t, const eNB_index_t, const frame_t, const eNB_flag_t, const MBMS_flag_t, logical_chan_id_t, const tb_size_t,char* -#ifdef Rel14 +tbs_size_t mac_rlc_data_req (const module_id_t, const rnti_t, const eNB_index_t, const frame_t, const eNB_flag_t, const MBMS_flag_t, logical_chan_id_t, const tb_size_t,char* +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t sourceL2Id ,const uint32_t destinationL2Id #endif -);) +); /*! \fn void mac_rlc_data_ind (const module_id_t mod_idP, const rnti_t rntiP, const frame_t frameP, const eNB_flag_t eNB_flagP, const MBMS_flag_t MBMS_flagP, logical_chan_id_t rb_idP, uint32_t frameP, char* bufferP, tb_size_t tb_sizeP, num_tb_t num_tbP, crc_t *crcs) * \brief Interface with MAC layer, deserialize the transport blocks sent by MAC, then map data indication to the RLC instance corresponding to the radio bearer identifier. @@ -484,8 +443,8 @@ public_rlc_mac(tbs_size_t mac_rlc_data_req (const module_id_t, co * \param[in] num_tbP Number of transport blocks. * \param[in] crcs Array of CRC decoding. */ -public_rlc_mac(void mac_rlc_data_ind (const module_id_t, const rnti_t, const eNB_index_t,const frame_t, const eNB_flag_t, const MBMS_flag_t, logical_chan_id_t, char*, tb_size_t, num_tb_t, - crc_t* );) +void mac_rlc_data_ind (const module_id_t, const rnti_t, const eNB_index_t,const frame_t, const eNB_flag_t, const MBMS_flag_t, logical_chan_id_t, char*, tb_size_t, num_tb_t, + crc_t* ); /*! \fn mac_rlc_status_resp_t mac_rlc_status_ind (const module_id_t mod_idP, const rnti_t rntiP, const frame_t frameP, const sub_frame_t subframeP, const eNB_flag_t eNB_flagP, const MBMS_flag_t MBMS_flagP, logical_chan_id_t rb_idP, tb_size_t tb_sizeP) * \brief Interface with MAC layer, request and set the number of bytes scheduled for transmission by the RLC instance corresponding to the radio bearer identifier. @@ -499,12 +458,12 @@ public_rlc_mac(void mac_rlc_data_ind (const module_id_t, co * \param[in] tb_sizeP Size of a transport block set in bytes. * \return The maximum number of bytes that the RLC instance can send in the next transmission sequence. */ -public_rlc_mac(mac_rlc_status_resp_t mac_rlc_status_ind (const module_id_t, const rnti_t, const eNB_index_t, const frame_t, const sub_frame_t, const eNB_flag_t, const MBMS_flag_t, logical_chan_id_t, tb_size_t -#ifdef Rel14 +mac_rlc_status_resp_t mac_rlc_status_ind (const module_id_t, const rnti_t, const eNB_index_t, const frame_t, const sub_frame_t, const eNB_flag_t, const MBMS_flag_t, logical_chan_id_t, tb_size_t +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t sourceL2Id ,const uint32_t destinationL2Id #endif - );) + ); /*! \fn rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t module_idP, const rnti_t rntiP, const eNB_index_t eNB_index, const frame_t frameP, const sub_frame_t subframeP,const eNB_flag_t enb_flagP, const logical_chan_id_t channel_idP) * \brief Interface with MAC layer, UE only: request and get the number of bytes scheduled for transmission by the RLC instance corresponding to the radio bearer identifier. @@ -516,7 +475,7 @@ public_rlc_mac(mac_rlc_status_resp_t mac_rlc_status_ind (const module_id_t, co * \param[in] channel_idP Logical Channel identifier. * \return The maximum number of bytes that the RLC instance can send in the next transmission sequence. */ -public_rlc_mac(rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t, const rnti_t, const eNB_index_t, const frame_t, const sub_frame_t, const eNB_flag_t, const logical_chan_id_t );) +rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t, const rnti_t, const eNB_index_t, const frame_t, const sub_frame_t, const eNB_flag_t, const logical_chan_id_t ); //----------------------------------------------------------------------------- // RLC methods //----------------------------------------------------------------------------- @@ -527,10 +486,10 @@ public_rlc_mac(rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const mod * @param dataP Pointer to data buffer to be displayed * @param sizeP Number of octets in data buffer */ -public_rlc(void rlc_util_print_hex_octets( +void rlc_util_print_hex_octets( const comp_name_t componentP, unsigned char* const dataP, - const signed long sizeP);) + const signed long sizeP); @@ -546,7 +505,7 @@ public_rlc(void rlc_util_print_hex_octets( * \param[in] sduP SDU. * \return A status about the processing, OK or error code. */ -public_rlc(rlc_op_status_t rlc_data_req ( +rlc_op_status_t rlc_data_req ( const protocol_ctxt_t* const, const srb_flag_t, const MBMS_flag_t , @@ -555,11 +514,11 @@ public_rlc(rlc_op_status_t rlc_data_req ( const confirm_t , const sdu_size_t , mem_block_t * const -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t * const ,const uint32_t * const #endif - );) + ); /*! \fn void rlc_data_ind (const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_idP, const sdu_size_t sdu_sizeP, mem_block_t* sduP) { * \brief Interface with higher layers, route SDUs coming from RLC protocol instances to upper layer instance. @@ -570,13 +529,13 @@ public_rlc(rlc_op_status_t rlc_data_req ( * \param[in] sdu_sizeP Size of SDU in bytes. * \param[in] sduP SDU. */ -public_rlc(void rlc_data_ind( +void rlc_data_ind( const protocol_ctxt_t* const, const srb_flag_t, const MBMS_flag_t , const rb_id_t, const sdu_size_t, - mem_block_t* const);) + mem_block_t* const); /*! \fn void rlc_data_conf (const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, const mui_t muiP, const rlc_tx_status_t statusP) @@ -587,12 +546,12 @@ public_rlc(void rlc_data_ind( * \param[in] muiP Message Unit identifier. * \param[in] statusP Status of the transmission (RLC_SDU_CONFIRM_YES, RLC_SDU_CONFIRM_NO). */ -public_rlc(void rlc_data_conf( +void rlc_data_conf( const protocol_ctxt_t* const, const srb_flag_t, const rb_id_t, const mui_t, - const rlc_tx_status_t );) + const rlc_tx_status_t ); /*! \fn rlc_op_status_t rlc_stat_req ( @@ -662,7 +621,7 @@ public_rlc(void rlc_data_conf( * \param[out] stat_timer_status_prohibit_timed_out Number of times the timer "status_prohibit" has timed-out. */ -public_rlc(rlc_op_status_t rlc_stat_req ( +rlc_op_status_t rlc_stat_req ( const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, @@ -693,12 +652,12 @@ public_rlc(rlc_op_status_t rlc_stat_req ( unsigned int* const stat_rx_control_bytes, unsigned int* const stat_timer_reordering_timed_out, unsigned int* const stat_timer_poll_retransmit_timed_out, - unsigned int* const stat_timer_status_prohibit_timed_out);) + unsigned int* const stat_timer_status_prohibit_timed_out); /*! \fn int rlc_module_init(void) * \brief RAZ the memory of the RLC layer, initialize the memory pool manager (mem_block_t structures mainly used in RLC module). */ -public_rlc(int rlc_module_init(void);) +int rlc_module_init(void); /** @} */ diff --git a/openair2/LAYER2/RLC/rlc_mac.c b/openair2/LAYER2/RLC/rlc_mac.c index c4fc2872c6..ef94dd6f97 100644 --- a/openair2/LAYER2/RLC/rlc_mac.c +++ b/openair2/LAYER2/RLC/rlc_mac.c @@ -30,6 +30,7 @@ //----------------------------------------------------------------------------- #define RLC_MAC_C #include "rlc.h" +#include "LAYER2/RLC/UM_v9.3.0/rlc_um.h" #include "LAYER2/MAC/mac_extern.h" #include "UTIL/LOG/log.h" #include "UTIL/OCG/OCG_vars.h" @@ -127,7 +128,7 @@ tbs_size_t mac_rlc_data_req( const logical_chan_id_t channel_idP, const tb_size_t tb_sizeP, char *buffer_pP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t sourceL2Id ,const uint32_t destinationL2Id #endif @@ -157,9 +158,17 @@ tbs_size_t mac_rlc_data_req( #endif // DEBUG_MAC_INTERFACE if (MBMS_flagP) { - AssertFatal (channel_idP < RLC_MAX_MBMS_LC, "channel id is too high (%u/%d)!\n", channel_idP, RLC_MAX_MBMS_LC); + //AssertFatal (channel_idP < RLC_MAX_MBMS_LC, "channel id is too high (%u/%d)!\n", channel_idP, RLC_MAX_MBMS_LC); + if(channel_idP >= RLC_MAX_MBMS_LC){ + LOG_E(RLC, "channel id is too high (%u/%d)!\n", channel_idP, RLC_MAX_MBMS_LC); + return 0; + } } else { - AssertFatal (channel_idP < NB_RB_MAX, "channel id is too high (%u/%d)!\n", channel_idP, NB_RB_MAX); + //AssertFatal (channel_idP < NB_RB_MAX, "channel id is too high (%u/%d)!\n", channel_idP, NB_RB_MAX); + if(channel_idP >= NB_RB_MAX){ + LOG_E(RLC, "channel id is too high (%u/%d)!\n", channel_idP, NB_RB_MAX); + return 0; + } } if (MBMS_flagP) { @@ -171,7 +180,7 @@ tbs_size_t mac_rlc_data_req( } } else { key = RLC_COLL_KEY_LCID_VALUE(module_idP, rntiP, enb_flagP, channel_idP, srb_flag); -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) if ((sourceL2Id > 0) && (destinationL2Id > 0)) key = RLC_COLL_KEY_LCID_SOURCE_DEST_VALUE(module_idP, rntiP, enb_flagP, channel_idP, sourceL2Id, destinationL2Id, srb_flag); #endif @@ -183,7 +192,8 @@ tbs_size_t mac_rlc_data_req( rlc_mode = rlc_union_p->mode; } else { rlc_mode = RLC_MODE_NONE; - AssertFatal (0 , "RLC not configured lcid %u RNTI %x!\n", channel_idP, rntiP); + //AssertFatal (0 , "RLC not configured lcid %u RNTI %x!\n", channel_idP, rntiP); + LOG_E(RLC, "RLC not configured lcid %u RNTI %x!\n", channel_idP, rntiP); } switch (rlc_mode) { @@ -192,6 +202,7 @@ tbs_size_t mac_rlc_data_req( break; case RLC_MODE_AM: + rlc_am_mui.rrc_mui_num = 0; if (!enb_flagP) rlc_am_set_nb_bytes_requested_by_mac(&rlc_union_p->rlc.am,tb_sizeP); data_request = rlc_am_mac_data_request(&ctxt, &rlc_union_p->rlc.am,enb_flagP); ret_tb_size =mac_rlc_serialize_tb(buffer_pP, data_request.data); @@ -224,7 +235,7 @@ tbs_size_t mac_rlc_data_req( void mac_rlc_data_ind ( const module_id_t module_idP, const rnti_t rntiP, - const module_id_t eNB_index, + const eNB_index_t eNB_index, const frame_t frameP, const eNB_flag_t enb_flagP, const MBMS_flag_t MBMS_flagP, @@ -289,6 +300,7 @@ void mac_rlc_data_ind ( switch (rlc_mode) { case RLC_MODE_NONE: //handle_event(WARNING,"FILE %s FONCTION mac_rlc_data_ind() LINE %s : no radio bearer configured :%d\n", __FILE__, __LINE__, channel_idP); + list_free (&data_ind.data); break; case RLC_MODE_AM: @@ -318,7 +330,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind( const MBMS_flag_t MBMS_flagP, const logical_chan_id_t channel_idP, const tb_size_t tb_sizeP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t sourceL2Id ,const uint32_t destinationL2Id #endif @@ -351,25 +363,22 @@ mac_rlc_status_resp_t mac_rlc_status_ind( key = RLC_COLL_KEY_MBMS_VALUE(module_idP, rntiP, enb_flagP, mbms_id_p->service_id, mbms_id_p->session_id); } else { -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) if ((sourceL2Id > 0) && (destinationL2Id > 0)) { key = RLC_COLL_KEY_SOURCE_DEST_VALUE(module_idP, rntiP, enb_flagP, channel_idP, sourceL2Id, destinationL2Id, srb_flag); } else #endif { - //LOG_I(RLC, "Panos-D mac_rlc_status_ind 1 enb_flagP: %d, channel_idP: %d, srb_flag: %d \n", enb_flagP, channel_idP, srb_flag); key = RLC_COLL_KEY_LCID_VALUE(module_idP, rntiP, enb_flagP, channel_idP, srb_flag); } } - //LOG_I(RLC, "Panos-D mac_rlc_status_ind 2 enb_flagP: %d, channel_idP: %d, srb_flag: %d \n", enb_flagP, channel_idP, srb_flag); h_rc = hashtable_get(rlc_coll_p, key, (void**)&rlc_union_p); if (h_rc == HASH_TABLE_OK) { rlc_mode = rlc_union_p->mode; } else { rlc_mode = RLC_MODE_NONE; - //LOG_D(RLC , "Panos-D: mac_rlc_status_ind() In RLC_MODE_NONE \n"); //LOG_W(RLC , "[%s] RLC not configured lcid %u module %u!\n", __FUNCTION__, channel_idP, module_idP); //LOG_D(RLC , "[%s] RLC not configured rb id %u lcid %u module %u!\n", __FUNCTION__, rb_id, channel_idP, ue_module_idP); } @@ -441,8 +450,12 @@ rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind( /* Assumptions : for UE only */ /* At each TTI, Buffer Occupancy is first computed in mac_rlc_status_ind called by MAC ue_scheduler() function */ /* Then this function is called during MAC multiplexing ue_get_sdu(), and it may be call several times for the same bearer if it is in AM mode and there are several PDU types to transmit */ - AssertFatal(enb_flagP == FALSE,"RLC Tx mac_rlc_get_buffer_occupancy_ind function is not implemented for eNB LcId=%d\n", channel_idP); - + //AssertFatal(enb_flagP == FALSE,"RLC Tx mac_rlc_get_buffer_occupancy_ind function is not implemented for eNB LcId=%d\n", channel_idP); + if(enb_flagP != FALSE){ + LOG_E(RLC, "Tx mac_rlc_get_buffer_occupancy_ind function is not implemented for eNB LcId=%u\n", channel_idP); + return 0; + } + key = RLC_COLL_KEY_LCID_VALUE(module_idP, rntiP, enb_flagP, channel_idP, srb_flag); diff --git a/openair2/LAYER2/RLC/rlc_mpls.c b/openair2/LAYER2/RLC/rlc_mpls.c index 900741fe26..8c6cea379b 100644 --- a/openair2/LAYER2/RLC/rlc_mpls.c +++ b/openair2/LAYER2/RLC/rlc_mpls.c @@ -41,7 +41,7 @@ rlc_op_status_t mpls_rlc_data_req ( //----------------------------------------------------------------------------- // third arg should be set to 1 or 0 return rlc_data_req(ctxtP, SRB_FLAG_NO, MBMS_FLAG_NO, rb_idP, RLC_MUI_UNDEFINED, RLC_SDU_CONFIRM_NO, sdu_sizeP, sduP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); diff --git a/openair2/LAYER2/RLC/rlc_rrc.c b/openair2/LAYER2/RLC/rlc_rrc.c index 34e4dee37a..63fa212c31 100644 --- a/openair2/LAYER2/RLC/rlc_rrc.c +++ b/openair2/LAYER2/RLC/rlc_rrc.c @@ -107,7 +107,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP case RLC_Config_PR_am: if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_AM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -127,7 +127,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP case RLC_Config_PR_um_Bi_Directional: if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_UM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -141,7 +141,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.um_Bi_Directional.ul_UM_RLC, &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.um_Bi_Directional.dl_UM_RLC, rb_id, lc_id -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -155,7 +155,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP case RLC_Config_PR_um_Uni_Directional_UL: if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_UM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -169,7 +169,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.um_Uni_Directional_UL.ul_UM_RLC, NULL, rb_id, lc_id -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -183,7 +183,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP case RLC_Config_PR_um_Uni_Directional_DL: if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_UM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -197,7 +197,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP NULL, &srb_toaddmod_p->rlc_Config->choice.explicitValue.choice.um_Uni_Directional_DL.dl_UM_RLC, rb_id, lc_id -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -230,7 +230,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP config_am_pP->ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t4; if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, rb_id, lc_id, RLC_MODE_AM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -299,7 +299,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP case RLC_Config_PR_am: if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_NO, MBMS_FLAG_NO, drb_id, lc_id, RLC_MODE_AM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -315,7 +315,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP case RLC_Config_PR_um_Bi_Directional: if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_NO, MBMS_FLAG_NO, drb_id, lc_id, RLC_MODE_UM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,sourceL2Id, destinationL2Id #endif @@ -329,7 +329,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP &drb_toaddmod_p->rlc_Config->choice.um_Bi_Directional.ul_UM_RLC, &drb_toaddmod_p->rlc_Config->choice.um_Bi_Directional.dl_UM_RLC, drb_id, lc_id -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,sourceL2Id, destinationL2Id #endif @@ -340,7 +340,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP case RLC_Config_PR_um_Uni_Directional_UL: if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_NO, MBMS_FLAG_NO, drb_id, lc_id, RLC_MODE_UM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -354,7 +354,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP &drb_toaddmod_p->rlc_Config->choice.um_Uni_Directional_UL.ul_UM_RLC, NULL, drb_id, lc_id -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -364,7 +364,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP case RLC_Config_PR_um_Uni_Directional_DL: if (rrc_rlc_add_rlc (ctxt_pP, SRB_FLAG_NO, MBMS_FLAG_NO, drb_id, lc_id, RLC_MODE_UM -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -378,7 +378,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP NULL, &drb_toaddmod_p->rlc_Config->choice.um_Uni_Directional_DL.dl_UM_RLC, drb_id, lc_id -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -444,7 +444,10 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP rb_id, lc_id, RLC_MODE_UM, 0, 0); - AssertFatal(rlc_union_p != NULL, "ADD MBMS RLC UM FAILED"); + //AssertFatal(rlc_union_p != NULL, "ADD MBMS RLC UM FAILED"); + if(rlc_union_p == NULL){ + LOG_E(RLC, "ADD MBMS RLC UM FAILED\n"); + } } LOG_D(RLC, PROTOCOL_CTXT_FMT" CONFIG REQ MBMS ASN1 LC ID %u RB ID %u SESSION ID %u SERVICE ID %u\n", @@ -466,7 +469,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP NULL, &dl_um_rlc, rb_id, lc_id -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -586,7 +589,11 @@ rlc_op_status_t rrc_rlc_remove_rlc ( } - AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + //AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + if(rb_idP >= NB_RB_MAX){ + LOG_E(RLC, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + return RLC_OP_STATUS_BAD_PARAMETER; + } h_rc = hashtable_get(rlc_coll_p, key, (void**)&rlc_union_p); @@ -647,7 +654,7 @@ rlc_union_t* rrc_rlc_add_rlc ( const rb_id_t rb_idP, const logical_chan_id_t chan_idP, const rlc_mode_t rlc_modeP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t sourceL2Id, const uint32_t destinationL2Id #endif @@ -667,8 +674,17 @@ rlc_union_t* rrc_rlc_add_rlc ( if (MBMS_flagP == FALSE) { - AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); - AssertFatal (chan_idP < RLC_MAX_LC, "LC id is too high (%u/%d)!\n", chan_idP, RLC_MAX_LC); + //AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + //AssertFatal (chan_idP < RLC_MAX_LC, "LC id is too high (%u/%d)!\n", chan_idP, RLC_MAX_LC); + if(rb_idP >= NB_RB_MAX){ + LOG_E(RLC, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + return NULL; + } + if(chan_idP >= RLC_MAX_LC){ + LOG_E(RLC, "LC id is too high (%u/%d)!\n", chan_idP, RLC_MAX_LC); + return NULL; + } + } #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) @@ -709,8 +725,12 @@ rlc_union_t* rrc_rlc_add_rlc ( (srb_flagP) ? "SRB" : "DRB", rb_idP, (srb_flagP) ? "SRB" : "DRB"); - AssertFatal(rlc_union_p->mode == rlc_modeP, "Error rrc_rlc_add_rlc , already exist but RLC mode differ"); - return rlc_union_p; + //AssertFatal(rlc_union_p->mode == rlc_modeP, "Error rrc_rlc_add_rlc , already exist but RLC mode differ"); + if(rlc_union_p->mode != rlc_modeP){ + LOG_E(RLC, "Error rrc_rlc_add_rlc , already exist but RLC mode differ\n"); + return NULL; + } + return rlc_union_p; } else if (h_rc == HASH_TABLE_KEY_NOT_EXISTS) { rlc_union_p = calloc(1, sizeof(rlc_union_t)); h_rc = hashtable_insert(rlc_coll_p, key, rlc_union_p); @@ -772,13 +792,17 @@ rlc_op_status_t rrc_rlc_config_req ( PROTOCOL_CTXT_ARGS(ctxt_pP), rb_idP); - AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + //AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + if(rb_idP >= NB_RB_MAX){ + LOG_E(RLC, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); + return RLC_OP_STATUS_BAD_PARAMETER; + } switch (actionP) { case CONFIG_ACTION_ADD: if (rrc_rlc_add_rlc(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, rb_idP, rlc_infoP.rlc_mode -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif @@ -857,7 +881,7 @@ rlc_op_status_t rrc_rlc_data_req ( if (sdu != NULL) { memcpy (sdu->data, sduP, sdu_sizeP); return rlc_data_req(ctxt_pP, SRB_FLAG_YES, MBMS_flagP, rb_idP, muiP, confirmP, sdu_sizeP, sdu -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); diff --git a/openair2/NETWORK_DRIVER/UE_IP/common.c b/openair2/NETWORK_DRIVER/UE_IP/common.c index e8ff5fc7ac..84f425ef3c 100644 --- a/openair2/NETWORK_DRIVER/UE_IP/common.c +++ b/openair2/NETWORK_DRIVER/UE_IP/common.c @@ -248,7 +248,7 @@ ue_ip_common_ip2wireless( //--------------------------------------------------------------------------- struct pdcp_data_req_header_s pdcph; ue_ip_priv_t *priv_p=netdev_priv(ue_ip_dev[instP]); -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ipversion_t *ipv_p = NULL; unsigned int hard_header_len = 0; unsigned char *src_addr = 0; diff --git a/openair2/NETWORK_DRIVER/UE_IP/device.c b/openair2/NETWORK_DRIVER/UE_IP/device.c index 36c6afe914..d9a9149685 100644 --- a/openair2/NETWORK_DRIVER/UE_IP/device.c +++ b/openair2/NETWORK_DRIVER/UE_IP/device.c @@ -99,15 +99,29 @@ void *ue_ip_interrupt(void) } #endif //NETLINK //--------------------------------------------------------------------------- +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)) +void ue_ip_timer(struct timer_list *t) +#else void ue_ip_timer(unsigned long dataP) +#endif { //--------------------------------------------------------------------------- - ue_ip_priv_t *priv_p=(ue_ip_priv_t *)dataP; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)) + ue_ip_priv_t *priv_p = from_timer(priv_p, t, timer); +#else + ue_ip_priv_t *priv_p = (ue_ip_priv_t *)dataP; +#endif + spin_lock(&priv_p->lock); - (priv_p->timer).function=ue_ip_timer; - (priv_p->timer).expires=jiffies+UE_IP_TIMER_TICK; - (priv_p->timer).data=dataP; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)) + mod_timer(&priv_p->timer, jiffies + UE_IP_TIMER_TICK); +#else + (priv_p->timer).function = ue_ip_timer; + (priv_p->timer).expires = jiffies + UE_IP_TIMER_TICK; + (priv_p->timer).data = dataP; add_timer(&priv_p->timer); +#endif + spin_unlock(&priv_p->lock); return; // add_timer(&gpriv->timer); @@ -137,10 +151,15 @@ int ue_ip_open(struct net_device *dev_pP) netif_wake_queue(dev_pP); } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)) + timer_setup(&(priv_p->timer), ue_ip_timer, 0); + (priv_p->timer).expires = jiffies+UE_IP_TIMER_TICK; +#else init_timer(&priv_p->timer); (priv_p->timer).expires = jiffies+UE_IP_TIMER_TICK; (priv_p->timer).data = (unsigned long)priv_p; (priv_p->timer).function = ue_ip_timer; +#endif //add_timer(&priv_p->timer); printk("[UE_IP_DRV][%s] name = %s\n", __FUNCTION__, dev_pP->name); @@ -236,7 +255,7 @@ int ue_ip_hard_start_xmit(struct sk_buff *skb_pP, struct net_device *dev_pP) // End debug information netif_stop_queue(dev_pP); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0) || RHEL_RELEASE_CODE >= 1796 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0) || (defined RHEL_RELEASE_CODE && RHEL_RELEASE_CODE >= 1796) netif_trans_update(dev_pP); #else dev_pP->trans_start = jiffies; @@ -312,7 +331,7 @@ void ue_ip_tx_timeout(struct net_device *dev_pP) printk("[UE_IP_DRV][%s] begin\n", __FUNCTION__); // (ue_ip_priv_t *)(dev_pP->priv_p)->stats.tx_errors++; (priv_p->stats).tx_errors++; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0) || RHEL_RELEASE_CODE >= 1796 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0) || (defined RHEL_RELEASE_CODE && RHEL_RELEASE_CODE >= 1796) netif_trans_update(dev_pP); #else dev_pP->trans_start = jiffies; diff --git a/openair2/NETWORK_DRIVER/UE_IP/local.h b/openair2/NETWORK_DRIVER/UE_IP/local.h index 976222967d..e590109b13 100644 --- a/openair2/NETWORK_DRIVER/UE_IP/local.h +++ b/openair2/NETWORK_DRIVER/UE_IP/local.h @@ -57,6 +57,7 @@ #include "platform_types.h" #include "sap.h" +#define MAKE_VERSION(a,b,c) ((a)*256+(b)*16+(c)) typedef struct ue_ip_priv_s { int irq; @@ -89,7 +90,7 @@ typedef struct pdcp_data_req_header_s { sdu_size_t data_size; signed int inst; ip_traffic_type_t traffic_type; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) uint32_t sourceL2Id; uint32_t destinationL2Id; #endif @@ -100,7 +101,7 @@ typedef struct pdcp_data_ind_header_s { sdu_size_t data_size; signed int inst; ip_traffic_type_t dummy_traffic_type; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) uint32_t sourceL2Id; uint32_t destinationL2Id; #endif diff --git a/openair2/PHY_INTERFACE/IF_Module.c b/openair2/PHY_INTERFACE/IF_Module.c index 997f42019f..bd9f4bb8b2 100644 --- a/openair2/PHY_INTERFACE/IF_Module.c +++ b/openair2/PHY_INTERFACE/IF_Module.c @@ -17,7 +17,7 @@ extern int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind); extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind); extern uint8_t nfapi_mode; extern uint16_t sf_ahead; - +uint16_t frame_cnt=0; void handle_rach(UL_IND_t *UL_info) { int i; @@ -237,24 +237,6 @@ void handle_ulsch(UL_IND_t *UL_info) { #define C do { size = 0; put(0); } while (0) #define A(...) do { char t[4096]; sprintf(t, __VA_ARGS__); append_string(t); } while (0) -#if 0 - -/* eats lots of ms at startup, disrupts realtime */ -static char *s; -static int size; -static int maxsize; - -static void put(char x) -{ - if (size == maxsize) { - maxsize += 32768; - s = realloc(s, maxsize); if (s == NULL) abort(); - } - s[size++] = x; -} - -#else - /* eats nothing at startup, but fixed size */ #define SMAX 65536 static char s[SMAX]; @@ -267,8 +249,6 @@ static void put(char x) s[size++] = x; } -#endif - static void append_string(char *t) { size--; @@ -546,6 +526,10 @@ void UL_indication(UL_IND_t *UL_info) UL_info->frame,UL_info->subframe, module_id,CC_id, UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs, UL_info->cqi_ind.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs); + if(UL_info->frame==1023&&UL_info->subframe==6){ // dl scheduling (0,0) + frame_cnt= (frame_cnt + 1)%7; // to prevent frame_cnt get too big + LOG_D(MAC,"current (%d,%d) frame count dl is %d\n",UL_info->frame,UL_info->subframe,frame_cnt); + } if (nfapi_mode != 1) { @@ -574,7 +558,11 @@ void UL_indication(UL_IND_t *UL_info) handle_harq(UL_info); // clear HI prior to handling ULSCH - mac->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_hi = 0; + uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_id] , UL_info->subframe); + if(sf_ahead_dl!=255){ + mac->HI_DCI0_req[CC_id][(UL_info->subframe+sf_ahead_dl)%10].hi_dci0_request_body.number_of_hi = 0; + LOG_D(MAC,"current (%d,%d) clear HI_DCI0_req[0][%d]\n",UL_info->frame,UL_info->subframe,(UL_info->subframe+sf_ahead_dl)%10); + } handle_ulsch(UL_info); @@ -593,9 +581,9 @@ void UL_indication(UL_IND_t *UL_info) sched_info->frame = (UL_info->frame + ((UL_info->subframe>(9-sf_ahead)) ? 1 : 0)) % 1024; sched_info->subframe = (UL_info->subframe+sf_ahead)%10; sched_info->DL_req = &mac->DL_req[CC_id]; - sched_info->HI_DCI0_req = &mac->HI_DCI0_req[CC_id]; + sched_info->HI_DCI0_req = &mac->HI_DCI0_req[CC_id][sched_info->subframe]; if ((mac->common_channels[CC_id].tdd_Config==NULL) || - (is_UL_sf(&mac->common_channels[CC_id],(sched_info->subframe+sf_ahead)%10)>0)) + (is_UL_sf(&mac->common_channels[CC_id],sched_info->subframe)>0)) sched_info->UL_req = &mac->UL_req[CC_id]; else sched_info->UL_req = NULL; diff --git a/openair2/PHY_INTERFACE/UE_MAC_interface.h b/openair2/PHY_INTERFACE/UE_MAC_interface.h index 0e4777d0b0..d010109f99 100644 --- a/openair2/PHY_INTERFACE/UE_MAC_interface.h +++ b/openair2/PHY_INTERFACE/UE_MAC_interface.h @@ -192,14 +192,14 @@ typedef struct{ }UE_MAC_BCH_indication_body_t; -// Panos: Corresponding to inputs of MAC functions: ue_send_sdu(), ue_decode_si(), ue_decode_p(). +// Corresponding to inputs of MAC functions: ue_send_sdu(), ue_decode_si(), ue_decode_p(). typedef struct{ uint8_t* data; uint16_t data_len; }UE_MAC_dlsch_pdu; -// Panos: Corresponding to inputs of MAC function: process_rar(). +// Corresponding to inputs of MAC function: process_rar(). typedef struct{ rnti_t ra_rnti; uint8_t* rar_input_buffer; // Originating from PHY diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.c b/openair2/PHY_INTERFACE/phy_stub_UE.c index 588cde5231..299c12a7a0 100644 --- a/openair2/PHY_INTERFACE/phy_stub_UE.c +++ b/openair2/PHY_INTERFACE/phy_stub_UE.c @@ -68,7 +68,7 @@ void fill_rx_indication_UE_MAC(module_id_t Mod_id,int frame,int subframe, UL_IND pdu->data = ulsch_buffer; // estimate timing advance for MAC //sync_pos = lte_est_timing_advance_pusch(eNB,UE_id); - timing_advance_update = 0; //Panos: Don't know what to put here + timing_advance_update = 0; // Don't know what to put here pdu->rx_indication_rel8.timing_advance = timing_advance_update; int SNRtimes10 = 640; @@ -105,10 +105,10 @@ void fill_sr_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_I pdu->instance_length = 0; // don't know what to do with this // pdu->rx_ue_information.handle = handle; pdu->rx_ue_information.tl.tag = NFAPI_RX_UE_INFORMATION_TAG; - pdu->rx_ue_information.rnti = rnti; //UE_mac_inst[Mod_id].crnti;; //Panos: Is this the right RNTI? + pdu->rx_ue_information.rnti = rnti; //UE_mac_inst[Mod_id].crnti - // Panos dependency from PHY not sure how to substitute this. Should we hardcode it? + // dependency from PHY not sure how to substitute this. Should we hardcode it? //int SNRtimes10 = dB_fixed_times10(stat) - 200;//(10*eNB->measurements.n0_power_dB[0]); int SNRtimes10 = 640; @@ -130,7 +130,7 @@ void fill_crc_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_ pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex); - //Panos: REMEMBER HAVE EXCHANGED THE FOLLOWING TWO LINES HERE! + // REMEMBER HAVE EXCHANGED THE FOLLOWING TWO LINES HERE! nfapi_crc_indication_pdu_t *pdu = &UL_INFO->crc_ind.crc_indication_body.crc_pdu_list[UL_INFO->crc_ind.crc_indication_body.number_of_crcs]; UL_INFO->crc_ind.sfn_sf = frame<<4| subframe; @@ -172,9 +172,9 @@ void fill_rach_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL UL_INFO->rach_ind.rach_indication_body.preamble_list = (nfapi_preamble_pdu_t*)malloc(UL_INFO->rach_ind.rach_indication_body.number_of_preambles*sizeof(nfapi_preamble_pdu_t)); UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.tl.tag = NFAPI_PREAMBLE_REL8_TAG; - UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance = 0; //Panos: Not sure about that + UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance = 0; // Not sure about that - //Panos: The two following should get extracted from the call to get_prach_resources(). + //The two following should get extracted from the call to get_prach_resources(). UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble = ra_PreambleIndex; UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti = ra_RNTI; //UL_INFO->rach_ind.rach_indication_body.number_of_preambles++; @@ -191,7 +191,7 @@ void fill_rach_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti, UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel13.rach_resource_type); - //Panos: This function is currently defined only in the nfapi-RU-RAU-split so we should call it when we merge + // This function is currently defined only in the nfapi-RU-RAU-split so we should call it when we merge // with that branch. oai_nfapi_rach_ind(&UL_INFO->rach_ind); free(UL_INFO->rach_ind.rach_indication_body.preamble_list); @@ -210,12 +210,12 @@ void fill_ulsch_cqi_indication_UE_MAC(int Mod_id, uint16_t frame,uint8_t subfram pdu->rx_ue_information.tl.tag = NFAPI_RX_UE_INFORMATION_TAG; pdu->rx_ue_information.rnti = rnti; - //Panos: Since we assume that CRC flag is always 0 (ACK) I guess that data_offset should always be 0. + // Since we assume that CRC flag is always 0 (ACK) I guess that data_offset should always be 0. pdu->cqi_indication_rel9.data_offset = 0; // by default set O to rank 1 value //pdu->cqi_indication_rel9.length = (ulsch_harq->Or1>>3) + ((ulsch_harq->Or1&7) > 0 ? 1 : 0); - // Panos: Not useful field for our case + // Not useful field for our case pdu->cqi_indication_rel9.tl.tag = NFAPI_CQI_INDICATION_REL9_TAG; pdu->cqi_indication_rel9.length = 0; pdu->cqi_indication_rel9.ri[0] = 0; @@ -225,7 +225,7 @@ void fill_ulsch_cqi_indication_UE_MAC(int Mod_id, uint16_t frame,uint8_t subfram pdu->cqi_indication_rel9.number_of_cc_reported = 1; pdu->ul_cqi_information.channel = 1; // PUSCH - //Panos: Not sure how to substitute this. This should be the actual CQI value? So can + // Not sure how to substitute this. This should be the actual CQI value? So can // we hardcode it to a specific value? //memcpy((void*)raw_pdu->pdu,ulsch_harq->o,pdu->cqi_indication_rel9.length); raw_pdu->pdu[0] = 7; @@ -255,18 +255,18 @@ void fill_ulsch_harq_indication_UE_MAC(int Mod_id, int frame,int subframe, UL_IN pdu->rx_ue_information.tl.tag = NFAPI_RX_UE_INFORMATION_TAG; pdu->rx_ue_information.rnti = rnti; - //Panos: For now we consider only FDD + // For now we consider only FDD //if (eNB->frame_parms.frame_type == FDD) { pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG; pdu->harq_indication_fdd_rel13.mode = 0; pdu->harq_indication_fdd_rel13.number_of_ack_nack = harq_information->harq_information_rel10.harq_size; - //Panos: Could this be wrong? Is the number_of_ack_nack field equivalent to O_ACK? + // Could this be wrong? Is the number_of_ack_nack field equivalent to O_ACK? //pdu->harq_indication_fdd_rel13.number_of_ack_nack = ulsch_harq->O_ACK; for (i=0;iharq_information_rel10.harq_size;i++) { - pdu->harq_indication_fdd_rel13.harq_tb_n[i] = 1; //Panos: Assuming always an ACK (No NACK or DTX) + pdu->harq_indication_fdd_rel13.harq_tb_n[i] = 1; // Assuming always an ACK (No NACK or DTX) } @@ -319,7 +319,7 @@ void fill_uci_harq_indication_UE_MAC(int Mod_id, pdu->harq_indication_fdd_rel13.number_of_ack_nack = 1; //AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[0] == 4, "harq_ack[0] is %d, should be 1,2 or 4\n",harq_ack[0]); - pdu->harq_indication_fdd_rel13.harq_tb_n[0] = 1; //Panos: Assuming always an ACK (No NACK or DTX) + pdu->harq_indication_fdd_rel13.harq_tb_n[0] = 1; // Assuming always an ACK (No NACK or DTX) } @@ -328,8 +328,8 @@ void fill_uci_harq_indication_UE_MAC(int Mod_id, pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG; pdu->harq_indication_fdd_rel13.mode = 0; pdu->harq_indication_fdd_rel13.number_of_ack_nack = 2; - pdu->harq_indication_fdd_rel13.harq_tb_n[0] = 1; //Panos: Assuming always an ACK (No NACK or DTX) - pdu->harq_indication_fdd_rel13.harq_tb_n[1] = 1; //Panos: Assuming always an ACK (No NACK or DTX) + pdu->harq_indication_fdd_rel13.harq_tb_n[0] = 1; // Assuming always an ACK (No NACK or DTX) + pdu->harq_indication_fdd_rel13.harq_tb_n[1] = 1; // Assuming always an ACK (No NACK or DTX) } else AssertFatal(1==0,"only format 1a/b for now, received \n"); @@ -362,15 +362,14 @@ void handle_nfapi_ul_pdu_UE_MAC(module_id_t Mod_id, fill_crc_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, 0, index, rnti); fill_rx_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, UE_mac_inst[Mod_id].RA_prach_resources.Msg3,buflen, rnti, index); Msg3_transmitted(Mod_id, 0, frame, 0); - // Panos: Modification + // Modification UE_mac_inst[Mod_id].UE_mode[0] = PUSCH; UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; - // Panos: This should be done after the reception of the respective hi_dci0 + // This should be done after the reception of the respective hi_dci0 //UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; } else { - //LOG_I(MAC, "Panos-D: handle_nfapi_ul_pdu_UE_MAC 2.3 \n"); ue_get_sdu( Mod_id, 0, frame, subframe, 0, ulsch_buffer, buflen, &access_mode); fill_crc_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, 0, index, rnti); fill_rx_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, ulsch_buffer,buflen, rnti, index); @@ -393,12 +392,11 @@ void handle_nfapi_ul_pdu_UE_MAC(module_id_t Mod_id, fill_rx_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, UE_mac_inst[Mod_id].RA_prach_resources.Msg3,buflen, rnti, index); Msg3_transmitted(Mod_id, 0, frame, 0); //UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; - // Panos: Modification + // Modification UE_mac_inst[Mod_id].UE_mode[0] = PUSCH; UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; } else { - //LOG_I(MAC, "Panos-D: handle_nfapi_ul_pdu_UE_MAC 3.1 \n"); ue_get_sdu( Mod_id, 0, frame, subframe, 0, ulsch_buffer, buflen, &access_mode); fill_crc_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, 0, index, rnti); fill_rx_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, ulsch_buffer,buflen, rnti, index); @@ -421,7 +419,7 @@ void handle_nfapi_ul_pdu_UE_MAC(module_id_t Mod_id, fill_rx_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, UE_mac_inst[Mod_id].RA_prach_resources.Msg3,buflen, rnti, index); Msg3_transmitted(Mod_id, 0, frame, 0); //UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; - // Panos: Modification + // Modification UE_mac_inst[Mod_id].UE_mode[0] = PUSCH; UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; } @@ -448,7 +446,7 @@ void handle_nfapi_ul_pdu_UE_MAC(module_id_t Mod_id, fill_rx_indication_UE_MAC(Mod_id, frame, subframe, UL_INFO, UE_mac_inst[Mod_id].RA_prach_resources.Msg3,buflen, rnti, index); Msg3_transmitted(Mod_id, 0, frame, 0); //UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; - // Panos: Modification + // Modification UE_mac_inst[Mod_id].UE_mode[0] = PUSCH; UE_mac_inst[Mod_id].first_ULSCH_Tx = 0; } @@ -788,13 +786,9 @@ int hi_dci0_req_UE_MAC(nfapi_hi_dci0_request_t* req, module_id_t Mod_id) int memcpy_dl_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request_t* req) { - //module_id_t Mod_id = 0; //Panos: Currently static (only for one UE) but this should change. - //for (Mod_id=0; Mod_idheader = req->header; dl_config_req->sfn_sf = req->sfn_sf; @@ -822,10 +816,6 @@ int memcpy_dl_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request int memcpy_ul_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request_t* req) { - //LOG_D(MAC, "Panos-D: memcpy_ul_config_req 1 \n"); - - //module_id_t Mod_id = 0; //Panos: Currently static (only for one UE) but this should change. - //for (Mod_id=0; Mod_idtx_request_body.number_of_pdus; tx_request_pdu_list = (nfapi_tx_request_pdu_t*) calloc(tx_req_num_elems, sizeof(nfapi_tx_request_pdu_t)); @@ -884,7 +872,6 @@ int memcpy_hi_dci0_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* { //if(req!=0){ - //module_id_t Mod_id = 0; //Panos: Currently static (only for one UE) but this should change. //for (Mod_id=0; Mod_idcarrier[CC_id].SIB1, RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1); -#if 0 //defined(ENABLE_ITTI) - { - MessageDef *message_p; - int sib1_size = RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1; - int sdu_size = sizeof(RRC_MAC_BCCH_DATA_REQ (message_p).sdu); - - if (sib1_size > sdu_size) { - LOG_E(RRC, "SIB1 SDU larger than BCCH SDU buffer size (%d, %d)", sib1_size, sdu_size); - sib1_size = sdu_size; - } - - message_p = itti_alloc_new_message (TASK_RRC_ENB, RRC_MAC_BCCH_DATA_REQ); - RRC_MAC_BCCH_DATA_REQ (message_p).frame = frameP; - RRC_MAC_BCCH_DATA_REQ (message_p).sdu_size = sib1_size; - memset (RRC_MAC_BCCH_DATA_REQ (message_p).sdu, 0, BCCH_SDU_SIZE); - memcpy (RRC_MAC_BCCH_DATA_REQ (message_p).sdu, - RC.rrc[Mod_idP]->carrier[CC_id].SIB1, - sib1_size); - RRC_MAC_BCCH_DATA_REQ (message_p).enb_index = eNB_index; - - itti_send_msg_to_task (TASK_MAC_ENB, ENB_MODULE_ID_TO_INSTANCE(Mod_idP), message_p); - } -#endif - #ifdef DEBUG_RRC LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP); @@ -137,30 +113,6 @@ mac_rrc_data_req( RC.rrc[Mod_idP]->carrier[CC_id].SIB23, RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23); -#if 0 //defined(ENABLE_ITTI) - { - MessageDef *message_p; - int sib23_size = RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23; - int sdu_size = sizeof(RRC_MAC_BCCH_DATA_REQ (message_p).sdu); - - if (sib23_size > sdu_size) { - LOG_E(RRC, "SIB23 SDU larger than BCCH SDU buffer size (%d, %d)", sib23_size, sdu_size); - sib23_size = sdu_size; - } - - message_p = itti_alloc_new_message (TASK_RRC_ENB, RRC_MAC_BCCH_DATA_REQ); - RRC_MAC_BCCH_DATA_REQ (message_p).frame = frameP; - RRC_MAC_BCCH_DATA_REQ (message_p).sdu_size = sib23_size; - memset (RRC_MAC_BCCH_DATA_REQ (message_p).sdu, 0, BCCH_SDU_SIZE); - memcpy (RRC_MAC_BCCH_DATA_REQ (message_p).sdu, - RC.rrc[Mod_idP]->carrier[CC_id].SIB23, - sib23_size); - RRC_MAC_BCCH_DATA_REQ (message_p).enb_index = eNB_index; - - itti_send_msg_to_task (TASK_MAC_ENB, ENB_MODULE_ID_TO_INSTANCE(Mod_idP), message_p); - } -#endif - #ifdef DEBUG_RRC LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP); @@ -179,6 +131,7 @@ mac_rrc_data_req( mib->message.systemFrameNumber.buf = &sfn; enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_BCH_Message, + NULL, (void*)mib, carrier->MIB, 24); @@ -205,28 +158,6 @@ mac_rrc_data_req( if(Srb_info->Tx_buffer.payload_size>0) { //Fill buffer LOG_D(RRC,"[eNB %d] CCCH (%p) has %d bytes (dest: %p, src %p)\n",Mod_idP,Srb_info,Srb_info->Tx_buffer.payload_size,buffer_pP,Srb_info->Tx_buffer.Payload); -#if 0 // defined(ENABLE_ITTI) - { - MessageDef *message_p; - int ccch_size = Srb_info->Tx_buffer.payload_size; - int sdu_size = sizeof(RRC_MAC_CCCH_DATA_REQ (message_p).sdu); - - if (ccch_size > sdu_size) { - LOG_E(RRC, "SDU larger than CCCH SDU buffer size (%d, %d)", ccch_size, sdu_size); - ccch_size = sdu_size; - } - - message_p = itti_alloc_new_message (TASK_RRC_ENB, RRC_MAC_CCCH_DATA_REQ); - RRC_MAC_CCCH_DATA_REQ (message_p).frame = frameP; - RRC_MAC_CCCH_DATA_REQ (message_p).sdu_size = ccch_size; - memset (RRC_MAC_CCCH_DATA_REQ (message_p).sdu, 0, CCCH_SDU_SIZE); - memcpy (RRC_MAC_CCCH_DATA_REQ (message_p).sdu, Srb_info->Tx_buffer.Payload, ccch_size); - RRC_MAC_CCCH_DATA_REQ (message_p).enb_index = eNB_index; - - itti_send_msg_to_task (TASK_MAC_ENB, ENB_MODULE_ID_TO_INSTANCE(Mod_idP), message_p); - } -#endif - memcpy(buffer_pP,Srb_info->Tx_buffer.Payload,Srb_info->Tx_buffer.payload_size); Sdu_size = Srb_info->Tx_buffer.payload_size; Srb_info->Tx_buffer.payload_size=0; @@ -243,28 +174,6 @@ mac_rrc_data_req( LOG_D(RRC,"[eNB %d] PCCH (%p) has %d bytes\n",Mod_idP,&RC.rrc[Mod_idP]->carrier[CC_id].paging[mbsfn_sync_area], RC.rrc[Mod_idP]->carrier[CC_id].sizeof_paging[mbsfn_sync_area]); -#if 0 //defined(ENABLE_ITTI) - { - MessageDef *message_p; - int pcch_size = RC.rrc[Mod_idP]->arrier[CC_id].sizeof_paging[mbsfn_sync_area]; - int sdu_size = sizeof(RRC_MAC_PCCH_DATA_REQ (message_p).sdu); - - if (pcch_size > sdu_size) { - LOG_E(RRC, "SDU larger than PCCH SDU buffer size (%d, %d)", pcch_size, sdu_size); - pcch_size = sdu_size; - } - - message_p = itti_alloc_new_message (TASK_RRC_ENB, RRC_MAC_PCCH_DATA_REQ); - RRC_MAC_PCCH_DATA_REQ (message_p).frame = frameP; - RRC_MAC_PCCH_DATA_REQ (message_p).sdu_size = pcch_size; - memset (RRC_MAC_PCCH_DATA_REQ (message_p).sdu, 0, PCCH_SDU_SIZE); - memcpy (RRC_MAC_PCCH_DATA_REQ (message_p).sdu, RC.rrc[Mod_idP]->carrier[CC_id].paging[mbsfn_sync_area], pcch_size); - RRC_MAC_PCCH_DATA_REQ (message_p).enb_index = eNB_index; - - itti_send_msg_to_task (TASK_MAC_ENB, ENB_MODULE_ID_TO_INSTANCE(Mod_idP), message_p); - } -#endif - memcpy(buffer_pP, RC.rrc[Mod_idP]->carrier[CC_id].paging[mbsfn_sync_area], RC.rrc[Mod_idP]->carrier[CC_id].sizeof_paging[mbsfn_sync_area]); Sdu_size = RC.rrc[Mod_idP]->carrier[CC_id].sizeof_paging[mbsfn_sync_area]; RC.rrc[Mod_idP]->carrier[CC_id].sizeof_paging[mbsfn_sync_area] = 0; @@ -280,32 +189,6 @@ mac_rrc_data_req( return 0; // this parameter is set in function init_mcch in rrc_eNB.c } - -#if 0 // defined(ENABLE_ITTI) - { - MessageDef *message_p; - int mcch_size = RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; - int sdu_size = sizeof(RRC_MAC_MCCH_DATA_REQ (message_p).sdu); - - if (mcch_size > sdu_size) { - LOG_E(RRC, "SDU larger than MCCH SDU buffer size (%d, %d)", mcch_size, sdu_size); - mcch_size = sdu_size; - } - - message_p = itti_alloc_new_message (TASK_RRC_ENB, RRC_MAC_MCCH_DATA_REQ); - RRC_MAC_MCCH_DATA_REQ (message_p).frame = frameP; - RRC_MAC_MCCH_DATA_REQ (message_p).sdu_size = mcch_size; - memset (RRC_MAC_MCCH_DATA_REQ (message_p).sdu, 0, MCCH_SDU_SIZE); - memcpy (RRC_MAC_MCCH_DATA_REQ (message_p).sdu, - RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area], - mcch_size); - RRC_MAC_MCCH_DATA_REQ (message_p).enb_index = eNB_index; - RRC_MAC_MCCH_DATA_REQ (message_p).mbsfn_sync_area = mbsfn_sync_area; - - itti_send_msg_to_task (TASK_MAC_ENB, ENB_MODULE_ID_TO_INSTANCE(Mod_idP), message_p); - } -#endif - memcpy(&buffer_pP[0], RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area], RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]); @@ -376,42 +259,27 @@ mac_rrc_data_ind( */ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, rntiP, frameP, sub_frameP,0); + if((srb_idP & RAB_OFFSET) == CCCH) { Srb_info = &RC.rrc[module_idP]->carrier[CC_id].Srb0; LOG_D(RRC,"[eNB %d] Received SDU for CCCH on SRB %d\n",module_idP,Srb_info->Srb_id); -#if 0 //defined(ENABLE_ITTI) - { - MessageDef *message_p; - int msg_sdu_size = sizeof(RRC_MAC_CCCH_DATA_IND (message_p).sdu); - - if (sdu_lenP > msg_sdu_size) { - LOG_E(RRC, "SDU larger than CCCH SDU buffer size (%d, %d)", sdu_lenP, msg_sdu_size); - sdu_size = msg_sdu_size; - } else { - sdu_size = sdu_lenP; - } - - message_p = itti_alloc_new_message (TASK_MAC_ENB, RRC_MAC_CCCH_DATA_IND); - RRC_MAC_CCCH_DATA_IND (message_p).frame = frameP; - RRC_MAC_CCCH_DATA_IND (message_p).sub_frame = sub_frameP; - RRC_MAC_CCCH_DATA_IND (message_p).rnti = rntiP; - RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = sdu_size; - RRC_MAC_CCCH_DATA_IND (message_p).CC_id = CC_id; - memset (RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE); - memcpy (RRC_MAC_CCCH_DATA_IND (message_p).sdu, sduP, sdu_size); - LOG_D(RRC,"[eNB %d] Sending message to RRC task\n",module_idP); - itti_send_msg_to_task (TASK_RRC_ENB, ctxt.instance, message_p); - } -#else - // msg("\n******INST %d Srb_info %p, Srb_id=%d****\n\n",Mod_id,Srb_info,Srb_info->Srb_id); if (sdu_lenP > 0) { memcpy(Srb_info->Rx_buffer.Payload,sduP,sdu_lenP); Srb_info->Rx_buffer.payload_size = sdu_lenP; rrc_eNB_decode_ccch(&ctxt, Srb_info, CC_id); } - -#endif + } + if((srb_idP & RAB_OFFSET) == DCCH) { + struct rrc_eNB_ue_context_s* ue_context_p = NULL; + ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt.module_id],rntiP); + if(ue_context_p){ + rrc_eNB_generate_defaultRRCConnectionReconfiguration(&ctxt, + ue_context_p, + 0); + ue_context_p->ue_context.Status = RRC_RECONFIGURED; + } + } return(0); diff --git a/openair2/RRC/LTE/L2_interface_common.c b/openair2/RRC/LTE/L2_interface_common.c index d72cc2f5be..155c0ebb90 100644 --- a/openair2/RRC/LTE/L2_interface_common.c +++ b/openair2/RRC/LTE/L2_interface_common.c @@ -57,6 +57,11 @@ rrc_data_req( ) //------------------------------------------------------------------------------ { + if(sdu_sizeP == 255) + { + LOG_I(RRC,"sdu_sizeP == 255"); + return FALSE; + } MSC_LOG_TX_MESSAGE( ctxt_pP->enb_flag ? MSC_RRC_ENB : MSC_RRC_UE, ctxt_pP->enb_flag ? MSC_PDCP_ENB : MSC_PDCP_UE, diff --git a/openair2/RRC/LTE/L2_interface_ue.c b/openair2/RRC/LTE/L2_interface_ue.c index 569e2f008b..1b0b2fa775 100644 --- a/openair2/RRC/LTE/L2_interface_ue.c +++ b/openair2/RRC/LTE/L2_interface_ue.c @@ -67,7 +67,7 @@ mac_rrc_data_req_ue( #endif -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) LOG_D(RRC,"[UE %d] Frame %d Filling SL DISCOVERY SRB_ID %d\n",Mod_idP,frameP,Srb_id); LOG_D(RRC,"[UE %d] Frame %d buffer_pP status %d,\n",Mod_idP,frameP, UE_rrc_inst[Mod_idP].SL_Discovery[eNB_index].Tx_buffer.payload_size); @@ -331,7 +331,7 @@ rrc_data_req_ue( sdu_sizeP, buffer_pP, modeP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); @@ -403,7 +403,6 @@ void rrc_in_sync_ind(module_id_t Mod_idP, frame_t frameP, uint16_t eNB_index) UE_rrc_inst[Mod_idP].Info[eNB_index].N310_cnt=0; if (UE_rrc_inst[Mod_idP].Info[eNB_index].T310_active==1) { - LOG_D(RRC, "Panos-D: rrc_in_sync_ind 1 \n"); UE_rrc_inst[Mod_idP].Info[eNB_index].N311_cnt++; } diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg.c b/openair2/RRC/LTE/MESSAGES/asn1_msg.c index 81282059a1..533f2b6a2c 100644 --- a/openair2/RRC/LTE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LTE/MESSAGES/asn1_msg.c @@ -241,6 +241,7 @@ uint8_t do_MIB(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t phich #endif enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_BCH_Message, + NULL, (void*)mib, carrier->MIB, 24); @@ -320,6 +321,7 @@ uint8_t do_MIB_SL(const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, enc_rval = uper_encode_to_buffer(&asn_DEF_SBCCH_SL_BCH_Message, + NULL, (void*)mib_sl, UE_rrc_inst[ctxt_pP->module_id].MIB, 24); @@ -477,22 +479,6 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier, ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,&sib_type); ASN_SEQUENCE_ADD(&(*sib1)->schedulingInfoList.list,&schedulingInfo); -#if 0 - /* TODO: this is disabled for the moment because OAI UE does - * not connect to OAI eNB with the current software. - * See also TODO comment in do_SIB23. - */ - //TTN - This is for SIB18 - sib_type=SIB_Type_sibType18_v1250; - ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,&sib_type); - ASN_SEQUENCE_ADD(&(*sib1)->schedulingInfoList.list,&schedulingInfo); - - //TTN - This is for SIB19 - sib_type=SIB_Type_sibType19_v1250; - ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,&sib_type); - ASN_SEQUENCE_ADD(&(*sib1)->schedulingInfoList.list,&schedulingInfo); -#endif - // ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,NULL); #if defined(ENABLE_ITTI) @@ -525,6 +511,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier, xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message, + NULL, (void*)bcch_message, buffer, 100); @@ -598,7 +585,7 @@ uint8_t do_SIB23(uint8_t Mod_id, uint8_t MBMS_flag = RC.rrc[Mod_id]->carrier[CC_id].MBMS_flag; #endif -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) //TTN - for D2D SystemInformationBlockType18_r12_t **sib18 = &RC.rrc[Mod_id]->carrier[CC_id].sib18; SystemInformationBlockType19_r12_t **sib19 = &RC.rrc[Mod_id]->carrier[CC_id].sib19; @@ -649,7 +636,7 @@ uint8_t do_SIB23(uint8_t Mod_id, #endif -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) //TTN - for D2D sib18_part = CALLOC(1,sizeof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member)); sib19_part = CALLOC(1,sizeof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member)); @@ -673,11 +660,6 @@ uint8_t do_SIB23(uint8_t Mod_id, (*sib2)->ac_BarringInfo = NULL; #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) -#if 0 - (*sib2)->ssac_BarringForMMTEL_Voice_r9 = NULL; - (*sib2)->ssac_BarringForMMTEL_Video_r9 = NULL; - (*sib2)->ac_BarringForCSFB_r10 = NULL; -#endif (*sib2)->ext1 = NULL; (*sib2)->ext2 = NULL; #endif @@ -761,10 +743,10 @@ uint8_t do_SIB23(uint8_t Mod_id, = configuration->pucch_nRB_CQI[CC_id]; (*sib2)->radioResourceConfigCommon.pucch_ConfigCommon.nCS_AN = configuration->pucch_nCS_AN[CC_id]; -#if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) +//#if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) (*sib2)->radioResourceConfigCommon.pucch_ConfigCommon.n1PUCCH_AN = configuration->pucch_n1_AN[CC_id]; -#endif +//#endif // SRS Config if (configuration->srs_enable[CC_id]==1) { @@ -970,12 +952,6 @@ uint8_t do_SIB23(uint8_t Mod_id, /// (*SIB3) #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) (*sib3)->ext1 = NULL; -#if 0 - (*sib3)->s_IntraSearch_v920=NULL; - (*sib3)->s_NonIntraSearch_v920=NULL; - (*sib3)->q_QualMin_r9=NULL; - (*sib3)->threshServingLowQ_r9=NULL; -#endif #endif (*sib3)->cellReselectionInfoCommon.q_Hyst=SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB4; @@ -1003,7 +979,7 @@ uint8_t do_SIB23(uint8_t Mod_id, // SIB13 // fill in all elements of SIB13 if present -#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) +#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) if (MBMS_flag > 0 ) { // Notification for mcch change @@ -1063,7 +1039,7 @@ uint8_t do_SIB23(uint8_t Mod_id, #endif -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) //TTN - for D2D // SIB18 //commRxPool_r12 @@ -1375,26 +1351,13 @@ uint8_t do_SIB23(uint8_t Mod_id, if (MBMS_flag > 0) { ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list,sib13_part); } - -#if 0 - /* TODO: this is disabled for the moment. - * Maybe we shouldn't put this together with SIBs 2/3. - * The problem is that the MAC message is now 92 bytes, which - * is too much in the SIB scheduler (the scheduler allocates - * 4 RBs with max MCS 8). - */ - //for D2D - ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list, sib18_part); - ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list, sib19_part); - ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list, sib21_part); -#endif - #endif #ifdef XER_PRINT xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message, + NULL, (void*)bcch_message, buffer, 900); @@ -1483,6 +1446,7 @@ uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv) enc_rval = uper_encode_to_buffer(&asn_DEF_UL_CCCH_Message, + NULL, (void*)&ul_ccch_msg, buffer, 100); @@ -1650,6 +1614,7 @@ uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_Destinatio enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, + NULL, (void*)&ul_dcch_msg, buffer, 100); @@ -1734,6 +1699,7 @@ uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uin */ enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, + NULL, (void*)&ul_dcch_msg, buffer, 100); @@ -1794,6 +1760,7 @@ do_RRCConnectionReconfigurationComplete( rrcConnectionReconfigurationComplete->criticalExtensions.choice.rrcConnectionReconfigurationComplete_r8.nonCriticalExtension=NULL; enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, + NULL, (void*)&ul_dcch_msg, buffer, 100); @@ -1860,6 +1827,8 @@ do_RRCConnectionSetup( RRCConnectionSetup_t* rrcConnectionSetup = NULL; + LTE_DL_FRAME_PARMS *frame_parms = &RC.eNB[ctxt_pP->module_id][CC_id]->frame_parms; + memset((void *)&dl_ccch_msg,0,sizeof(DL_CCCH_Message_t)); dl_ccch_msg.message.present = DL_CCCH_MessageType_PR_c1; dl_ccch_msg.message.choice.c1.present = DL_CCCH_MessageType__c1_PR_rrcConnectionSetup; @@ -2125,7 +2094,28 @@ do_RRCConnectionSetup( // SchedulingRequestConfig physicalConfigDedicated2->schedulingRequestConfig->present = SchedulingRequestConfig_PR_setup; - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = 71 - ue_context_pP->local_uid/10;//ue_context_pP->local_uid; + if (carrier->sib1->tdd_Config == NULL) { + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = 71 - ue_context_pP->local_uid/10;//ue_context_pP->local_uid; + } else { + switch (carrier->sib1->tdd_Config->subframeAssignment) { + case 1: + switch(frame_parms->N_RB_UL){ + case 25: + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = 15 - ue_context_pP->local_uid/4; + break; + case 50: + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = 31 - ue_context_pP->local_uid/4; + break; + case 100: + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = 63 - ue_context_pP->local_uid/4; + break; + } + break; + default: + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = 71 - ue_context_pP->local_uid/10;//ue_context_pP->local_uid; + break; + } + } if (carrier->sib1->tdd_Config == NULL) { // FDD physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 5+(ue_context_pP->local_uid%10); // Isr = 5 (every 10 subframes, offset=2+UE_id mod3) @@ -2181,12 +2171,16 @@ do_RRCConnectionSetup( xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, + NULL, (void*)&dl_ccch_msg, buffer, 100); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) { @@ -2252,12 +2246,16 @@ do_SecurityModeCommand( xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message, + NULL, (void*)&dl_dcch_msg, buffer, 100); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) { @@ -2328,12 +2326,16 @@ do_UECapabilityEnquiry( xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message, + NULL, (void*)&dl_dcch_msg, buffer, 100); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) { @@ -2529,12 +2531,16 @@ do_RRCConnectionReconfiguration( } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message, + NULL, (void*)&dl_dcch_msg, buffer, RRC_BUF_SIZE); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %zd)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #ifdef XER_PRINT xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)&dl_dcch_msg); #endif @@ -2742,12 +2748,16 @@ do_RRCConnectionReestablishment( xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, + NULL, (void*)&dl_ccch_msg, buffer, 100); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) { @@ -2800,12 +2810,16 @@ do_RRCConnectionReestablishmentReject( xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, + NULL, (void*)&dl_ccch_msg, buffer, 100); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) { @@ -2859,12 +2873,16 @@ do_RRCConnectionReject( xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, + NULL, (void*)&dl_ccch_msg, buffer, 100); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %ld)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) { @@ -2921,6 +2939,7 @@ uint8_t do_RRCConnectionRelease( sizeof(*rrcConnectionRelease->criticalExtensions.choice.c1.choice.rrcConnectionRelease_r8.nonCriticalExtension)); enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message, + NULL, (void*)&dl_dcch_msg, buffer, RRC_BUF_SIZE); @@ -3048,12 +3067,16 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, xer_fprint(stdout,&asn_DEF_MCCH_Message,(void*)mcch_message); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_MCCH_Message, + NULL, (void*)mcch_message, buffer, 100); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) { @@ -3177,15 +3200,16 @@ uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_ measurementReport->criticalExtensions.choice.c1.choice.measurementReport_r8.measResults.measResultNeighCells->choice.measResultListEUTRA=*(measResultListEUTRA2); enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, + NULL, (void*)&ul_dcch_msg, buffer, 100); - - - - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) { @@ -3310,10 +3334,13 @@ uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, ue_paging_identity_t ue_pagin LOG_D(RRC, "[eNB %d] do_Paging paging_record: cn_Domain %ld, ue_paging_identity.presenceMask %d, PagingRecordList.count %d\n", Mod_id, paging_record_p->cn_Domain, ue_paging_identity.presenceMask, pcch_msg.message.choice.c1.choice.paging.pagingRecordList->list.count); - enc_rval = uper_encode_to_buffer(&asn_DEF_PCCH_Message, (void*)&pcch_msg, buffer, RRC_BUF_SIZE); - - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); + enc_rval = uper_encode_to_buffer(&asn_DEF_PCCH_Message, NULL, (void*)&pcch_msg, buffer, RRC_BUF_SIZE); + if(enc_rval.encoded == -1) + { + LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + return -1; + } #ifdef XER_PRINT xer_fprint(stdout, &asn_DEF_PCCH_Message, (void*)&pcch_msg); #endif @@ -3483,6 +3510,7 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname) xer_fprint(stdout,&asn_DEF_UE_EUTRA_Capability,(void *)UE_EUTRA_Capability); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_UE_EUTRA_Capability, + NULL, (void*)UE_EUTRA_Capability, &UECapability.sdu[0], MAX_UE_CAPABILITY_SIZE); diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c index 2d91828861..9ab99c72b1 100644 --- a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c +++ b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c @@ -131,6 +131,7 @@ uint8_t do_MIB_NB_IoT( (uint32_t)hsfn_LSB); enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_BCH_Message_NB, + NULL, (void*)mib_NB_IoT, carrier->MIB_NB_IoT, 100); @@ -387,6 +388,7 @@ uint8_t do_SIB1_NB_IoT(uint8_t Mod_id, int CC_id, enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB, + NULL, (void*)bcch_message, carrier->SIB1_NB_IoT, 100); @@ -669,6 +671,7 @@ uint8_t do_SIB23_NB_IoT(uint8_t Mod_id, xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB, + NULL, (void*)bcch_message, carrier->SIB23_NB_IoT, 900); @@ -888,6 +891,7 @@ uint8_t do_RRCConnectionSetup_NB_IoT( xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB, + NULL, (void*)&dl_ccch_msg_NB_IoT, buffer, 100); @@ -939,6 +943,7 @@ uint8_t do_SecurityModeCommand_NB_IoT( xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB, + NULL, (void*)&dl_dcch_msg_NB_IoT, buffer, 100); @@ -1000,6 +1005,7 @@ uint8_t do_UECapabilityEnquiry_NB_IoT( xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB, + NULL, (void*)&dl_dcch_msg_NB_IoT, buffer, 100); @@ -1094,6 +1100,7 @@ uint16_t do_RRCConnectionReconfiguration_NB_IoT( rrcConnectionReconfiguration_NB->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r13.fullConfig_r13 = NULL; enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB, + NULL, (void*)&dl_dcch_msg_NB_IoT, buffer, RRC_BUF_SIZE); @@ -1140,6 +1147,7 @@ uint8_t do_RRCConnectionReestablishmentReject_NB_IoT( xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB, + NULL, (void*)&dl_ccch_msg_NB_IoT, buffer, 100); @@ -1210,6 +1218,7 @@ uint8_t do_RRCConnectionReject_NB_IoT( xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg); #endif enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB, + NULL, (void*)&dl_ccch_msg_NB_IoT, buffer, 100); @@ -1336,6 +1345,7 @@ uint8_t do_RRCConnectionReestablishment_NB_IoT( rrcConnectionReestablishment_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionReestablishment_r13.nextHopChainingCount_r13=0; enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB, + NULL, (void*)&dl_ccch_msg_NB_IoT, buffer, RRC_BUF_SIZE); @@ -1405,6 +1415,7 @@ uint8_t do_RRCConnectionRelease_NB_IoT( sizeof(*rrcConnectionRelease_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionRelease_r13.nonCriticalExtension)); enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB, + NULL, (void*)&dl_dcch_msg_NB_IoT, buffer, RRC_BUF_SIZE);//check diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.h b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.h index 6fb073f80d..6b56be1022 100644 --- a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.h +++ b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.h @@ -44,7 +44,7 @@ #include /* for _ASN_DEFAULT_STACK_MAX */ -#include "RRC/LITE/defs_NB_IoT.h" +#include "RRC/LTE/defs_NB_IoT.h" /* * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) diff --git a/openair2/RRC/LTE/defs_NB_IoT.h b/openair2/RRC/LTE/defs_NB_IoT.h index 7da9c014f1..0cc8a37bc0 100644 --- a/openair2/RRC/LTE/defs_NB_IoT.h +++ b/openair2/RRC/LTE/defs_NB_IoT.h @@ -18,7 +18,7 @@ * contact@openairinterface.org */ -/*! \file RRC/LITE/defs_NB_IoT.h +/*! \file RRC/LTE/defs_NB_IoT.h * \brief NB-IoT RRC struct definitions and function prototypes * \author Navid Nikaein, Raymond Knopp and Michele Paffetti * \date 2010 - 2014, 2017 diff --git a/openair2/RRC/LTE/rrc_UE.c b/openair2/RRC/LTE/rrc_UE.c index f4fae43db3..2d754a1ea7 100644 --- a/openair2/RRC/LTE/rrc_UE.c +++ b/openair2/RRC/LTE/rrc_UE.c @@ -85,7 +85,7 @@ #include "openair2/LAYER2/MAC/mac_extern.h" -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #include "SL-Preconfiguration-r12.h" //for D2D @@ -138,7 +138,7 @@ static void rrc_ue_generate_RRCConnectionReconfigurationComplete( const protocol static void rrc_ue_generate_MeasurementReport(protocol_ctxt_t* const ctxt_pP, uint8_t eNB_index ); static uint8_t check_trigger_meas_event( - uint8_t module_idP, + module_id_t module_idP, frame_t frameP, uint8_t eNB_index, uint8_t ue_cnx_index, @@ -454,7 +454,7 @@ void init_SL_preconfig(UE_RRC_INST *UE, const uint8_t eNB_index ) UE->DRB_configList, (DRB_ToReleaseList_t*) NULL, 0xff, NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) , (PMCH_InfoList_r9_t *) NULL #endif ,NULL); @@ -463,7 +463,7 @@ void init_SL_preconfig(UE_RRC_INST *UE, const uint8_t eNB_index ) (SRB_ToAddModList_t*)NULL, UE->DRB_configList, (DRB_ToReleaseList_t*)NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,(PMCH_InfoList_r9_t *)NULL #endif ); @@ -472,24 +472,6 @@ void init_SL_preconfig(UE_RRC_INST *UE, const uint8_t eNB_index ) #endif -#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) -//----------------------------------------------------------------------------- -#if 0 -void init_MCCH_UE(module_id_t ue_mod_idP, uint8_t eNB_index) -{ - int i; - UE_rrc_inst[ue_mod_idP].sizeof_MCCH_MESSAGE[eNB_index] = 0; - UE_rrc_inst[ue_mod_idP].MCCH_MESSAGE[eNB_index] = (uint8_t *)malloc16(32); - UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index] = (MBSFNAreaConfiguration_r9_t *)malloc16(sizeof(MBSFNAreaConfiguration_r9_t)); - - for (i=0; i<8; i++) { // MAX MBSFN Area - UE_rrc_inst[ue_mod_idP].Info[eNB_index].MCCHStatus[i] = 0; - - } -} -#endif -#endif - //----------------------------------------------------------------------------- void openair_rrc_ue_init_security( const protocol_ctxt_t* const ctxt_pP ) { @@ -522,7 +504,7 @@ char openair_rrc_ue_init( const module_id_t ue_mod_idP, const unsigned char eNB_ rrc_set_state (ue_mod_idP, RRC_STATE_INACTIVE); rrc_set_sub_state (ue_mod_idP, RRC_SUB_STATE_INACTIVE); - LOG_D(RRC,"[UE %d] INIT State = RRC_IDLE (eNB %d)\n",ctxt.module_id,eNB_index); + LOG_I(RRC,"[UE %d] INIT State = RRC_IDLE (eNB %d)\n",ctxt.module_id,eNB_index); UE_rrc_inst[ctxt.module_id].Info[eNB_index].State=RRC_IDLE; UE_rrc_inst[ctxt.module_id].Info[eNB_index].T300_active = 0; UE_rrc_inst[ctxt.module_id].Info[eNB_index].T304_active = 0; @@ -630,22 +612,6 @@ static const char const nas_attach_req_imsi[] = { }; #endif /* !(defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)) */ -#if 0 -/* NAS Attach request with GUTI */ -static const char const nas_attach_req_guti[] = { - 0x07, 0x41, - /* EPS Mobile identity = GUTI */ - 0x71, 0x0B, 0xF6, 0x12, 0xF2, 0x01, 0x80, 0x00, 0x01, 0xE0, 0x00, - 0xDA, 0x1F, - /* End of EPS Mobile Identity */ - 0x02, 0xE0, 0xE0, 0x00, 0x20, 0x02, 0x03, - 0xD0, 0x11, 0x27, 0x1A, 0x80, 0x80, 0x21, 0x10, 0x01, 0x00, 0x00, - 0x10, 0x81, 0x06, 0x00, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x0A, 0x00, 0x52, 0x12, 0xF2, - 0x01, 0x27, 0x11, -}; -#endif - //----------------------------------------------------------------------------- void rrc_t310_expiration( @@ -786,7 +752,6 @@ int rrc_ue_decode_ccch( const protocol_ctxt_t* const ctxt_pP, const SRB_INFO* co char message_string[10000]; size_t message_string_size; - //LOG_I(RRC, "Panos-D: rrc_ue_decode_ccch, Before xer_sprint() \n"); if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_DL_CCCH_Message, (void *)dl_ccch_msg)) > 0) { MessageDef *msg_p; @@ -1094,7 +1059,7 @@ rrc_ue_process_measConfig( 0, 0 #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -1613,7 +1578,7 @@ rrc_ue_process_radioResourceConfigDedicated( 0, 0 #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -1678,7 +1643,7 @@ rrc_ue_process_radioResourceConfigDedicated( 0, 0 #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -1792,7 +1757,7 @@ rrc_ue_process_radioResourceConfigDedicated( UE_rrc_inst[ue_mod_idP].num_active_cba_groups, // UE_rrc_inst[ue_mod_idP].cba_rnti[0] #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -1961,6 +1926,7 @@ rrc_ue_process_securityModeCommand( ctxt_pP->module_id,ctxt_pP->frame, ctxt_pP->subframe, eNB_index, securityModeCommand->rrc_TransactionIdentifier); enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, + NULL, (void*)&ul_dcch_msg, buffer, 100); @@ -1977,7 +1943,6 @@ rrc_ue_process_securityModeCommand( char message_string[20000]; size_t message_string_size; - //LOG_I(RRC, "Panos-D: rrc_ue_process_securityModeCommand, Before xer_sprint() \n"); if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_DCCH_Message, (void *) &ul_dcch_msg)) > 0) { MessageDef *msg_p; @@ -2075,7 +2040,7 @@ rrc_ue_process_ueCapabilityEnquiry( &ul_dcch_msg.message.choice.c1.choice.ueCapabilityInformation.criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list, &ue_CapabilityRAT_Container); - enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, (void*) &ul_dcch_msg, buffer, 100); + enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, NULL, (void*) &ul_dcch_msg, buffer, 100); AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n", enc_rval.failed_type->name, enc_rval.encoded); @@ -2089,7 +2054,6 @@ rrc_ue_process_ueCapabilityEnquiry( char message_string[20000]; size_t message_string_size; - //LOG_I(RRC, "Panos-D: rrc_ue_process_ueCapabilityEnquiry, Before xer_sprint() \n"); if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_DCCH_Message, (void *) &ul_dcch_msg)) > 0) { MessageDef *msg_p; @@ -2394,7 +2358,7 @@ rrc_ue_process_mobilityControlInfo( ,0, 0 #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -2484,7 +2448,6 @@ rrc_ue_decode_dcch( char message_string[30000]; size_t message_string_size; - //LOG_I(RRC, "Panos-D: rrc_ue_decode_dcch, Before xer_sprint() \n"); if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_DL_DCCH_Message, (void *)dl_dcch_msg)) > 0) { msg_p = itti_alloc_new_message_sized (TASK_RRC_UE, RRC_DL_DCCH, message_string_size + sizeof (IttiMsgText)); msg_p->ittiMsg.rrc_dl_dcch.size = message_string_size; @@ -3020,7 +2983,6 @@ int decode_BCCH_DLSCH_Message( char message_string[15000]; size_t message_string_size; - //LOG_I(RRC, "Panos-D: decode_BCCH_DLSCH_Message, Before xer_sprint() \n"); if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_BCCH_DL_SCH_Message, (void *)bcch_message)) > 0) { MessageDef *msg_p; @@ -3046,8 +3008,6 @@ int decode_BCCH_DLSCH_Message( sizeof(SystemInformationBlockType1_t) ); LOG_D( RRC, "[UE %"PRIu8"] Decoding First SIB1\n", ctxt_pP->module_id ); - //LOG_I( RRC, "Panos-D: decode_BCCH_DLSCH_Message1 BEFORE decode_SIB1"); - //printf("Panos-D: decode_BCCH_DLSCH_Message1 BEFORE decode_SIB1"); decode_SIB1( ctxt_pP, eNB_index, rsrq, rsrp ); } } @@ -3063,11 +3023,9 @@ int decode_BCCH_DLSCH_Message( &bcch_message->message.choice.c1.choice.systemInformation, sizeof(SystemInformation_t) ); - LOG_D( RRC, "[UE %"PRIu8"] Decoding SI for frameP %"PRIu32"\n", + LOG_I( RRC, "[UE %"PRIu8"] Decoding SI for frameP %"PRIu32"\n", ctxt_pP->module_id, ctxt_pP->frame ); - //LOG_I( RRC, "Panos-D: decode_BCCH_DLSCH_Message1 BEFORE OTHER decode_SI"); - //printf("Panos-D: decode_BCCH_DLSCH_Message1 BEFORE OTHER decode_SI"); decode_SI( ctxt_pP, eNB_index ); //if (nfapi_mode == 3) UE_mac_inst[ctxt_pP->module_id].SI_Decoded = 1; @@ -3282,7 +3240,7 @@ int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, 0, 0 #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -3290,6 +3248,7 @@ int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, #endif ); + LOG_I(RRC,"Setting SIStatus bit 0 to 1\n"); UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1; UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1systemInfoValueTag = sib1->systemInfoValueTag; @@ -3915,12 +3874,10 @@ uint64_t arfcn_to_freq(long arfcn) { //----------------------------------------------------------------------------- int decode_SI( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index ) { - //LOG_D( RRC, "Panos-D: decode_SI 1 \n"); SystemInformation_t** si = &UE_rrc_inst[ctxt_pP->module_id].si[eNB_index]; int new_sib = 0; SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; - //LOG_D( RRC, "Panos-D: decode_SI 2 \n"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI, VCD_FUNCTION_IN ); // Dump contents @@ -3929,20 +3886,16 @@ uint64_t arfcn_to_freq(long arfcn) { LOG_D( RRC, "[UE] (*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count %d\n", (*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count ); } else { - //LOG_D( RRC, "Panos-D: decode_SI 2.3 \n"); LOG_D( RRC, "[UE] Unknown criticalExtension version (not Rel8)\n" ); return -1; } - LOG_D( RRC, "Panos-D: decode_SI 3 \n"); for (int i=0; i<(*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count; i++) { - //LOG_I( RRC, "Panos-D: SI count %d\n", i ); struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *typeandinfo; typeandinfo = (*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.array[i]; switch(typeandinfo->present) { case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2: - //LOG_D( RRC, "Panos-D: decode_SI 4 \n"); if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&2) == 0) { UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=2; new_sib=1; @@ -3981,7 +3934,7 @@ uint64_t arfcn_to_freq(long arfcn) { ,0, 0 #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -4032,7 +3985,6 @@ uint64_t arfcn_to_freq(long arfcn) { break; // case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2 case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3: - //LOG_D( RRC, "Panos-D: decode_SI 5 \n"); if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&4) == 0) { UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=4; new_sib=1; @@ -4167,7 +4119,7 @@ uint64_t arfcn_to_freq(long arfcn) { ,0, 0 #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -4178,7 +4130,7 @@ uint64_t arfcn_to_freq(long arfcn) { } #endif -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) //SIB18 case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib18_v1250: if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&8192) == 0) { @@ -4398,7 +4350,7 @@ void ue_meas_filtering( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_ LOG_I(RRC, "[UE %d] Frame %d : Generating Measurement Report for eNB %d\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index); result = pdcp_data_req(ctxt_pP, SRB_FLAG_YES, DCCH, rrc_mui++, 0, size, buffer, PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); @@ -4694,7 +4646,7 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB 0, 0 #endif -#if defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) , 0, NULL, @@ -5270,7 +5222,7 @@ openair_rrc_top_init_ue( #endif -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /* TODO: this is disabled for the moment because the standard UE * crashes when calling this function. */ @@ -5516,7 +5468,7 @@ rrc_ue_process_sidelink_radioResourceConfig( } } -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) //----------------------------------------------------------- void rrc_control_socket_init(){ @@ -5748,7 +5700,7 @@ void *rrc_control_socket_thread_fct(void *arg) UE->DRB_configList, (DRB_ToReleaseList_t*) NULL, 0xff, NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) , (PMCH_InfoList_r9_t *) NULL #endif ,NULL); @@ -5758,7 +5710,7 @@ void *rrc_control_socket_thread_fct(void *arg) (SRB_ToAddModList_t*)NULL, UE->DRB_configList, (DRB_ToReleaseList_t*)NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,(PMCH_InfoList_r9_t *)NULL , 0, 0 #endif @@ -5768,7 +5720,7 @@ void *rrc_control_socket_thread_fct(void *arg) (SRB_ToAddModList_t*)NULL, UE->DRB_configList, (DRB_ToReleaseList_t*)NULL -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,(PMCH_InfoList_r9_t *)NULL , sourceL2Id, groupL2Id #endif @@ -5779,7 +5731,7 @@ void *rrc_control_socket_thread_fct(void *arg) rrc_mac_config_req_ue(module_id,0,0, //eNB_index =0 (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) (SCellToAddMod_r10_t *)NULL, //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, #endif @@ -5796,7 +5748,7 @@ void *rrc_control_socket_thread_fct(void *arg) NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,0, (MBSFN_AreaInfoList_r9_t *)NULL, (PMCH_InfoList_r9_t *)NULL @@ -5807,7 +5759,7 @@ void *rrc_control_socket_thread_fct(void *arg) 0, 0 #endif -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,CONFIG_ACTION_ADD, &sourceL2Id, &groupL2Id @@ -5851,7 +5803,7 @@ void *rrc_control_socket_thread_fct(void *arg) rrc_mac_config_req_ue(module_id,0,0, //eNB_index =0 (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, - #if defined(Rel10) || defined(Rel14) + #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) (SCellToAddMod_r10_t *)NULL, //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, #endif @@ -5868,7 +5820,7 @@ void *rrc_control_socket_thread_fct(void *arg) NULL, NULL, NULL - #if defined(Rel10) || defined(Rel14) + #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,0, (MBSFN_AreaInfoList_r9_t *)NULL, (PMCH_InfoList_r9_t *)NULL @@ -5879,7 +5831,7 @@ void *rrc_control_socket_thread_fct(void *arg) 0, 0 #endif - #if defined(Rel10) || defined(Rel14) + #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,CONFIG_ACTION_REMOVE, &sourceL2Id, &destinationL2Id @@ -5996,7 +5948,7 @@ void *rrc_control_socket_thread_fct(void *arg) UE->DRB_configList, (DRB_ToReleaseList_t*) NULL, 0xff, NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) , (PMCH_InfoList_r9_t *) NULL #endif ,NULL); @@ -6006,7 +5958,7 @@ void *rrc_control_socket_thread_fct(void *arg) (SRB_ToAddModList_t*)NULL, UE->DRB_configList, (DRB_ToReleaseList_t*)NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,(PMCH_InfoList_r9_t *)NULL , 0, 0 #endif @@ -6016,7 +5968,7 @@ void *rrc_control_socket_thread_fct(void *arg) (SRB_ToAddModList_t*)NULL, UE->DRB_configList, (DRB_ToReleaseList_t*)NULL -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,(PMCH_InfoList_r9_t *)NULL , sourceL2Id, destinationL2Id #endif @@ -6027,7 +5979,7 @@ void *rrc_control_socket_thread_fct(void *arg) rrc_mac_config_req_ue(module_id,0,0, //eNB_index =0 (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) (SCellToAddMod_r10_t *)NULL, //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, #endif @@ -6044,7 +5996,7 @@ void *rrc_control_socket_thread_fct(void *arg) NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,0, (MBSFN_AreaInfoList_r9_t *)NULL, (PMCH_InfoList_r9_t *)NULL @@ -6055,7 +6007,7 @@ void *rrc_control_socket_thread_fct(void *arg) 0, 0 #endif -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,CONFIG_ACTION_ADD, &sourceL2Id, &destinationL2Id @@ -6180,7 +6132,7 @@ void *rrc_control_socket_thread_fct(void *arg) UE->DRB_configList, (DRB_ToReleaseList_t*) NULL, 0xff, NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) , (PMCH_InfoList_r9_t *) NULL #endif ,NULL); @@ -6190,7 +6142,7 @@ void *rrc_control_socket_thread_fct(void *arg) (SRB_ToAddModList_t*)NULL, UE->DRB_configList, (DRB_ToReleaseList_t*)NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,(PMCH_InfoList_r9_t *)NULL , 0, 0 #endif @@ -6202,7 +6154,7 @@ void *rrc_control_socket_thread_fct(void *arg) (SRB_ToAddModList_t*)NULL, UE->DRB_configList, (DRB_ToReleaseList_t*)NULL -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,(PMCH_InfoList_r9_t *)NULL , sourceL2Id, destinationL2Id #endif @@ -6212,7 +6164,7 @@ void *rrc_control_socket_thread_fct(void *arg) rrc_mac_config_req_ue(module_id,0,0, //eNB_index =0 (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) (SCellToAddMod_r10_t *)NULL, //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, #endif @@ -6229,7 +6181,7 @@ void *rrc_control_socket_thread_fct(void *arg) NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,0, (MBSFN_AreaInfoList_r9_t *)NULL, (PMCH_InfoList_r9_t *)NULL @@ -6240,7 +6192,7 @@ void *rrc_control_socket_thread_fct(void *arg) 0, 0 #endif -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,CONFIG_ACTION_ADD, &sourceL2Id, &destinationL2Id @@ -6251,7 +6203,7 @@ void *rrc_control_socket_thread_fct(void *arg) rrc_mac_config_req_ue(module_id,0,0, //eNB_index =0 (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) (SCellToAddMod_r10_t *)NULL, //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, #endif @@ -6268,7 +6220,7 @@ void *rrc_control_socket_thread_fct(void *arg) NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,0, (MBSFN_AreaInfoList_r9_t *)NULL, (PMCH_InfoList_r9_t *)NULL @@ -6279,7 +6231,7 @@ void *rrc_control_socket_thread_fct(void *arg) 0, 0 #endif -#if defined(Rel10) || defined(Rel14) +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) ,CONFIG_ACTION_ADD, &sourceL2Id, NULL diff --git a/openair2/RRC/LTE/rrc_UE_ral.c b/openair2/RRC/LTE/rrc_UE_ral.c index 0cb0943fcb..c972d280d5 100644 --- a/openair2/RRC/LTE/rrc_UE_ral.c +++ b/openair2/RRC/LTE/rrc_UE_ral.c @@ -33,8 +33,8 @@ #include "rrc_UE_ral.h" #include "assertions.h" #include "collection/hashtable/obj_hashtable.h" -#include "RRC/LITE/defs.h" -#include "RRC/LITE/extern.h" +#include "RRC/LTE/defs.h" +#include "RRC/LTE/extern.h" //----------------------------------------------------------------------------- diff --git a/openair2/RRC/LTE/rrc_UE_ral.h b/openair2/RRC/LTE/rrc_UE_ral.h index e2b4a3dadb..dfa971d28c 100644 --- a/openair2/RRC/LTE/rrc_UE_ral.h +++ b/openair2/RRC/LTE/rrc_UE_ral.h @@ -30,21 +30,6 @@ #ifndef __RRC_UE_RAL_H__ # define __RRC_UE_RAL_H__ //----------------------------------------------------------------------------- -# ifdef RRC_UE_RAL_C -# define private_rrc_ue_ral(x) x -# define protected_rrc_ue_ral(x) x -# define public_rrc_ue_ral(x) x -# else -# ifdef RRC_UE -# define private_rrc_ue_ral(x) -# define protected_rrc_ue_ral(x) extern x -# define public_rrc_ue_ral(x) extern x -# else -# define private_rrc_ue_ral(x) -# define protected_rrc_ue_ral(x) -# define public_rrc_ue_ral(x) extern x -# endif -# endif //----------------------------------------------------------------------------- #include #include @@ -58,7 +43,7 @@ #include "ral_messages_types.h" #include "defs.h" -private_rrc_ue_ral( int rrc_ue_ral_delete_all_thresholds_type (unsigned int mod_idP, ral_link_param_type_t *param_type_pP);) -private_rrc_ue_ral( int rrc_ue_ral_delete_threshold (unsigned int mod_idP, ral_link_param_type_t *param_type_pP, ral_threshold_t *threshold_pP);) -protected_rrc_ue_ral(int rrc_ue_ral_handle_configure_threshold_request(unsigned int mod_idP, MessageDef *msg_pP);) +int rrc_ue_ral_delete_all_thresholds_type (unsigned int mod_idP, ral_link_param_type_t *param_type_pP); +int rrc_ue_ral_delete_threshold (unsigned int mod_idP, ral_link_param_type_t *param_type_pP, ral_threshold_t *threshold_pP); +int rrc_ue_ral_handle_configure_threshold_request(unsigned int mod_idP, MessageDef *msg_pP); #endif diff --git a/openair2/RRC/LTE/rrc_defs.h b/openair2/RRC/LTE/rrc_defs.h index 4719eebd61..e21cb9255a 100644 --- a/openair2/RRC/LTE/rrc_defs.h +++ b/openair2/RRC/LTE/rrc_defs.h @@ -192,7 +192,9 @@ void *send_UE_status_notification(void *); #include "AS-Context.h" #include "UE-EUTRA-Capability.h" #include "MeasResults.h" +#if (RRC_VERSION >= MAKE_VERSION(12, 0, 0)) #include "SidelinkUEInformation-r12.h" +#endif /* for ImsiMobileIdentity_t */ #include "MobileIdentity.h" @@ -382,11 +384,7 @@ typedef enum SL_TRIGGER_e { // #define NUM_MAX_CBA_GROUP 4 // in the platform_constants /* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */ -#if defined(USRP_REC_PLAY) -#define RRC_TRANSACTION_IDENTIFIER_NUMBER 1 -#else #define RRC_TRANSACTION_IDENTIFIER_NUMBER 3 -#endif typedef struct { unsigned short transport_block_size; /*!< \brief Minimum PDU size in bytes provided by RLC to MAC layer interface */ @@ -602,6 +600,7 @@ typedef struct eNB_RRC_UE_s { uint32_t ue_reestablishment_timer; uint32_t ue_reestablishment_timer_thres; uint8_t e_rab_release_command_flag; + int8_t reestablishment_xid; } eNB_RRC_UE_t; typedef uid_t ue_uid_t; @@ -760,7 +759,7 @@ typedef struct UE_RRC_INST_s { SystemInformationBlockType10_t *sib10[NB_CNX_UE]; SystemInformationBlockType11_t *sib11[NB_CNX_UE]; uint8_t *MIB; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) //SIB18 SystemInformationBlockType18_r12_t *sib18[NB_CNX_UE]; SystemInformationBlockType19_r12_t *sib19[NB_CNX_UE]; @@ -828,7 +827,7 @@ typedef struct UE_RRC_INST_s { CipheringAlgorithm_r12_t ciphering_algorithm; e_SecurityAlgorithmConfig__integrityProtAlgorithm integrity_algorithm; -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) /// Used for Sidelink Preconfiguration DRB_ToAddModList_t *DRB_configList; #endif diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index e3e6018445..22926ddad9 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -29,12 +29,15 @@ */ #define RRC_ENB #define RRC_ENB_C - +#include +#include /* for _ASN_DEFAULT_STACK_MAX */ +#include #include "rrc_defs.h" #include "rrc_extern.h" #include "assertions.h" #include "common/ran_context.h" #include "asn1_conversions.h" +#include "asn_internal.h" #include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h" #include "LAYER2/RLC/rlc.h" #include "LAYER2/MAC/mac_proto.h" @@ -555,7 +558,7 @@ static void init_MBMS( NULL, // DRB_ToReleaseList &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9) -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,0, 0 #endif ); @@ -671,18 +674,6 @@ rrc_eNB_get_next_free_ue_context( ctxt_pP->rnti); if (ue_context_p == NULL) { -#if 0 - RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) { - if (ue_context_p->ue_context.random_ue_identity == ue_identityP) { - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Cannot create new UE context, already exist rand UE id 0x%"PRIx64", uid %u\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_identityP, - ue_context_p->local_uid); - return NULL; - } - } -#endif ue_context_p = rrc_eNB_allocate_new_UE_context(RC.rrc[ctxt_pP->module_id]); if (ue_context_p == NULL) { @@ -710,55 +701,6 @@ rrc_eNB_get_next_free_ue_context( } } -#if 0 //!defined(ENABLE_USE_MME) -void rrc_eNB_emulation_notify_ue_module_id( - const module_id_t ue_module_idP, - const rnti_t rntiP, - const uint8_t cell_identity_byte0P, - const uint8_t cell_identity_byte1P, - const uint8_t cell_identity_byte2P, - const uint8_t cell_identity_byte3P) -{ - LOG_I(RRC, "Panos-D: rrc_eNB_emulation_notify_ue_module_id 1 \n"); - module_id_t enb_module_id; - struct rrc_eNB_ue_context_s* ue_context_p = NULL; - int CC_id; - - // find enb_module_id - for (enb_module_id = 0; enb_module_id < NUMBER_OF_eNB_MAX; enb_module_id++) { - if(enb_module_id>0){ /*FIX LATER*/ - return; - } - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - if (&RC.rrc[enb_module_id]->carrier[CC_id].sib1 != NULL) { - if ( - (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[0] == cell_identity_byte0P) && - (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[1] == cell_identity_byte1P) && - (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[2] == cell_identity_byte2P) && - (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[3] == cell_identity_byte3P) - ) { - ue_context_p = rrc_eNB_get_ue_context( - RC.rrc[enb_module_id], - rntiP - ); - - if (NULL != ue_context_p) { - oai_emulation.info.eNB_ue_local_uid_to_ue_module_id[enb_module_id][ue_context_p->local_uid] = ue_module_idP; - } - - //return; - } - } - } - oai_emulation.info.eNB_ue_module_id_to_rnti[enb_module_id][ue_module_idP] = rntiP; - } - - AssertFatal(enb_module_id == NUMBER_OF_eNB_MAX, - "Cell identity not found for ue module id %u rnti %x", - ue_module_idP, rntiP); -} -#endif - //----------------------------------------------------------------------------- void rrc_eNB_free_mem_UE_context( @@ -903,14 +845,10 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s* (void)ue_module_id; #endif rnti_t rnti = ue_context_pP->ue_context.rnti; - int i, j , CC_id, pdu_number; - LTE_eNB_ULSCH_t *ulsch = NULL; - LTE_eNB_DLSCH_t *dlsch = NULL; - nfapi_ul_config_request_body_t *ul_req_tmp = NULL; - PHY_VARS_eNB *eNB_PHY = NULL; - eNB_MAC_INST *eNB_MAC = RC.mac[enb_mod_idP]; - - AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB inst invalid (%d/%d) for UE %x!", enb_mod_idP, NB_eNB_INST, rnti); + if (enb_mod_idP >= NB_eNB_INST) { + LOG_I(RRC, "eNB inst invalid (%d/%d) for UE %x!\n",enb_mod_idP, NB_eNB_INST,rnti); + return; + } /* ue_context_p = rrc_eNB_get_ue_context( &RC.rrc[enb_mod_idP], rntiP @@ -921,8 +859,9 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s* LOG_W(RRC, "[eNB %d] Removing UE RNTI %x\n", enb_mod_idP, rnti); #if defined(ENABLE_USE_MME) - if( ue_context_pP->ue_context.ul_failure_timer >= 8 ) { - LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti); + if((ue_context_pP->ue_context.ul_failure_timer >= 20000) && + (mac_eNB_get_rrc_status(enb_mod_idP,rnti) >= RRC_CONNECTED)) { + LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti); rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered) * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before @@ -933,57 +872,135 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s* return; } #endif - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - eNB_PHY = RC.eNB[enb_mod_idP][CC_id]; - for (i=0; iulsch[i]; - if((ulsch != NULL) && (ulsch->rnti == rnti)){ - void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch); - LOG_I(RRC, "clean_eNb_ulsch UE %x \n", rnti); - clean_eNb_ulsch(ulsch); - } - } - for (i=0; idlsch[i][0]; - if((dlsch != NULL) && (dlsch->rnti == rnti)){ - void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch); - LOG_I(RRC, "clean_eNb_dlsch UE %x \n", rnti); - clean_eNb_dlsch(dlsch); - } - } - - if (rrc_agent_registered[enb_mod_idP]) { - agent_rrc_xface[enb_mod_idP]->flexran_agent_notify_ue_state_change(enb_mod_idP, - rnti, PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED); - } - - for(j = 0; j < 10; j++){ - ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; - if(ul_req_tmp){ - pdu_number = ul_req_tmp->number_of_pdus; - for(int pdu_index = pdu_number-1; pdu_index >= 0; pdu_index--){ - if(ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == rnti){ - LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", rnti, pdu_index, pdu_number); - if(pdu_index < pdu_number -1){ - memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index+1], (pdu_number-1-pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); - } - ul_req_tmp->number_of_pdus--; - } - } - } - } - } - rrc_mac_remove_ue(enb_mod_idP,rnti); - rrc_rlc_remove_ue(&ctxt); - pdcp_remove_UE(&ctxt); - - rrc_eNB_remove_ue_context( - &ctxt, - RC.rrc[enb_mod_idP], - (struct rrc_eNB_ue_context_s*) ue_context_pP); + // add UE info to freeList + LOG_I(RRC, "put UE %x into freeList\n", rnti); + put_UE_in_freelist(enb_mod_idP, rnti, 1); } } +void remove_UE_from_freelist(module_id_t mod_id, rnti_t rnti) +{ + + eNB_MAC_INST *eNB_MAC = RC.mac[mod_id]; + pthread_mutex_lock(&lock_ue_freelist); + UE_free_list_t *free_list = &eNB_MAC->UE_free_list; + free_list->UE_free_ctrl[free_list->head_freelist].rnti = 0; + free_list->head_freelist = (free_list->head_freelist + 1) % (NUMBER_OF_UE_MAX+1); + free_list->num_UEs--; + pthread_mutex_unlock(&lock_ue_freelist); +} + +void put_UE_in_freelist(module_id_t mod_id, rnti_t rnti, boolean_t removeFlag) +{ + UE_free_list_t *free_list = NULL; + eNB_MAC_INST *eNB_MAC = RC.mac[mod_id]; + pthread_mutex_lock(&lock_ue_freelist); + free_list = &eNB_MAC->UE_free_list; + free_list->UE_free_ctrl[free_list->tail_freelist].rnti = rnti; + free_list->UE_free_ctrl[free_list->tail_freelist].removeContextFlg = removeFlag; + free_list->num_UEs++; + free_list->tail_freelist = (free_list->tail_freelist + 1) % (NUMBER_OF_UE_MAX+1); + pthread_mutex_unlock(&lock_ue_freelist); +} + +void release_UE_in_freeList(module_id_t mod_id) +{ + int i, j , CC_id, pdu_number; + protocol_ctxt_t ctxt; + LTE_eNB_ULSCH_t *ulsch = NULL; + LTE_eNB_DLSCH_t *dlsch = NULL; + nfapi_ul_config_request_body_t *ul_req_tmp = NULL; + PHY_VARS_eNB *eNB_PHY = NULL; + struct rrc_eNB_ue_context_s *ue_context_pP = NULL; + eNB_MAC_INST *eNB_MAC = RC.mac[mod_id]; + boolean_t remove_UEContext; + rnti_t rnti; + int head, tail, ue_num; + + pthread_mutex_lock(&lock_ue_freelist); + head = eNB_MAC->UE_free_list.head_freelist; + tail = eNB_MAC->UE_free_list.tail_freelist; + if(head == tail){ + pthread_mutex_unlock(&lock_ue_freelist); + return; + } + if(tail < head){ + tail = head + eNB_MAC->UE_free_list.num_UEs; + } + pthread_mutex_unlock(&lock_ue_freelist); + + for(ue_num = head; ue_num < tail; ue_num++){ + ue_num = ue_num % (NUMBER_OF_UE_MAX+1); + rnti = eNB_MAC->UE_free_list.UE_free_ctrl[ue_num].rnti; + if(rnti != 0){ + remove_UEContext = eNB_MAC->UE_free_list.UE_free_ctrl[ue_num].removeContextFlg; + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, rnti, 0, 0,mod_id); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + eNB_PHY = RC.eNB[mod_id][CC_id]; + for (i=0; iulsch[i]; + if((ulsch != NULL) && (ulsch->rnti == rnti)){ + void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch); + LOG_I(RRC, "clean_eNb_ulsch ulsch[%d] UE %x\n", i, rnti); + clean_eNb_ulsch(ulsch); + } + if(eNB_PHY->uci_vars[i].rnti == rnti){ + LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti); + memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI)); + } + } + for (i=0; idlsch[i][0]; + if((dlsch != NULL) && (dlsch->rnti == rnti)){ + void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch); + LOG_I(RRC, "clean_eNb_dlsch dlsch[%d] UE %x \n", i, rnti); + clean_eNb_dlsch(dlsch); + } + } + + if (rrc_agent_registered[mod_id]) { + agent_rrc_xface[mod_id]->flexran_agent_notify_ue_state_change(mod_id, + rnti, PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED); + } + + for(j = 0; j < 10; j++){ + ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; + if(ul_req_tmp){ + pdu_number = ul_req_tmp->number_of_pdus; + for(int pdu_index = pdu_number-1; pdu_index >= 0; pdu_index--){ + if((ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == rnti) || + (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_harq_pdu.ue_information.ue_information_rel8.rnti == rnti) || + (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_cqi_pdu.ue_information.ue_information_rel8.rnti == rnti) || + (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_sr_pdu.ue_information.ue_information_rel8.rnti == rnti) || + (ul_req_tmp->ul_config_pdu_list[pdu_index].srs_pdu.srs_pdu_rel8.rnti == rnti)){ + LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", rnti, pdu_index, pdu_number); + if(pdu_index < pdu_number -1){ + memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index+1], (pdu_number-1-pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); + } + ul_req_tmp->number_of_pdus--; + } + } + } + } + } + rrc_mac_remove_ue(mod_id,rnti); + rrc_rlc_remove_ue(&ctxt); + pdcp_remove_UE(&ctxt); + + if(remove_UEContext){ + ue_context_pP = rrc_eNB_get_ue_context( + RC.rrc[mod_id],rnti); + if(ue_context_pP){ + rrc_eNB_remove_ue_context(&ctxt,RC.rrc[mod_id], + (struct rrc_eNB_ue_context_s*) ue_context_pP); + } + } + LOG_I(RRC, "[release_UE_in_freeList] remove UE %x from freeList\n", rnti); + remove_UE_from_freelist(mod_id, rnti); + } + } +} + //----------------------------------------------------------------------------- void rrc_eNB_process_RRCConnectionSetupComplete( @@ -1292,21 +1309,26 @@ rrc_eNB_generate_RRCConnectionReestablishment( ue_context_pP->ue_context.rnti, RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReestablishment (bytes %d)\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - // activate release timer, if RRCComplete not received after 10 frames, remove UE - //ue_context_pP->ue_context.ue_release_timer = 1; - // remove UE after 10 frames after RRCConnectionReestablishmentRelease is triggered - //ue_context_pP->ue_context.ue_release_timer_thres = 100; - // activate release timer, if RRCComplete not received after 100 frames, remove UE int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; + if(UE_id != -1){ + // activate release timer, if RRCComplete not received after 100 frames, remove UE + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; + // remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 1000; + }else{ + LOG_E(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" Generating RRCConnectionReestablishment without UE_id(MAC) rnti %x\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti); + } + // activate release timer, if RRCComplete not received after 100 frames, remove UE + ue_context_pP->ue_context.ue_reestablishment_timer = 1; // remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 1000; + ue_context_pP->ue_context.ue_reestablishment_timer_thres = 1000; } //----------------------------------------------------------------------------- @@ -1360,12 +1382,15 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( uint8_t next_xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); ue_context_pP->ue_context.Status = RRC_CONNECTED; + ue_context_pP->ue_context.reestablishment_xid = next_xid; SRB_configList2 = &ue_context_pP->ue_context.SRB_configList2[xid]; // get old configuration of SRB2 if (*SRB_configList2 != NULL) { - LOG_D(RRC, "SRB_configList2(%p) count is %d\n SRB_configList2->list.array[0] addr is %p", + if((*SRB_configList2)->list.count!=0){ + LOG_D(RRC, "SRB_configList2(%p) count is %d\n SRB_configList2->list.array[0] addr is %p", SRB_configList2, (*SRB_configList2)->list.count, (*SRB_configList2)->list.array[0]); + } for (i = 0; (i < (*SRB_configList2)->list.count) && (i < 3); i++) { if ((*SRB_configList2)->list.array[i]->srb_Identity == 2 ){ LOG_D(RRC, "get SRB2_config from (ue_context_pP->ue_context.SRB_configList2[%d])\n", xid); @@ -1377,9 +1402,13 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( SRB_configList2 = &ue_context_pP->ue_context.SRB_configList2[next_xid]; DRB_configList2 = &ue_context_pP->ue_context.DRB_configList2[next_xid]; - if (*SRB_configList2) { - free(*SRB_configList2); - LOG_D(RRC, "free(ue_context_pP->ue_context.SRB_configList2[%d])\n", next_xid); + if(SRB_configList2!=NULL){ + if (*SRB_configList2) { + free(*SRB_configList2); + LOG_D(RRC, "free(ue_context_pP->ue_context.SRB_configList2[%d])\n", next_xid); + } + }else{ + LOG_E(RRC, "SRB_configList2 is null\n"); } *SRB_configList2 = CALLOC(1, sizeof(**SRB_configList2)); if (SRB2_config != NULL) { @@ -1399,9 +1428,13 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( - if (*DRB_configList2) { - free(*DRB_configList2); - LOG_D(RRC, "free(ue_context_pP->ue_context.DRB_configList2[%d])\n", next_xid); + if(DRB_configList2!=NULL){ + if (*DRB_configList2) { + free(*DRB_configList2); + LOG_D(RRC, "free(ue_context_pP->ue_context.DRB_configList2[%d])\n", next_xid); + } + }else{ + LOG_E(RRC, "DRB_configList2 is null\n"); } *DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2)); @@ -1441,7 +1474,7 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req)); for (j = 0, i = 0; i < NB_RB_MAX; i++) { - if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED) { + if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED || ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_DONE) { create_tunnel_req.eps_bearer_id[j] = ue_context_pP->ue_context.e_rab[i].param.e_rab_id; create_tunnel_req.sgw_S1u_teid[j] = ue_context_pP->ue_context.e_rab[i].param.gtp_teid; @@ -1858,74 +1891,81 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( } #endif + if(size==65535){ + LOG_E(RRC,"RRC decode err!!! do_RRCConnectionReconfiguration\n"); + put_UE_in_freelist(ctxt_pP->module_id, reestablish_rnti, 0); + return; + }else{ + LOG_I(RRC, + "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE id %x)\n", + ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - LOG_I(RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE id %x)\n", - ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n", + ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); - LOG_D(RRC, - "[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n", - ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); + MSC_LOG_TX_MESSAGE( + MSC_RRC_ENB, + MSC_RRC_UE, + buffer, + size, + MSC_AS_TIME_FMT" rrcConnectionReconfiguration UE %x MUI %d size %u", + MSC_AS_TIME_ARGS(ctxt_pP), + ue_context_pP->ue_context.rnti, + rrc_eNB_mui, + size); - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" rrcConnectionReconfiguration UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); - - // delete UE data of prior RNTI. UE use current RNTI. - protocol_ctxt_t ctxt_prior = *ctxt_pP; - ctxt_prior.rnti = reestablish_rnti; - - LTE_eNB_ULSCH_t *ulsch = NULL; - nfapi_ul_config_request_body_t *ul_req_tmp = NULL; - PHY_VARS_eNB *eNB_PHY = NULL; - eNB_MAC_INST *eNB_MAC = RC.mac[ctxt_prior.module_id]; - for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - eNB_PHY = RC.eNB[ctxt_prior.module_id][CC_id]; - for (int i=0; iulsch[i]; - if((ulsch != NULL) && (ulsch->rnti == ctxt_prior.rnti)){ - void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch); - LOG_I(RRC, "clean_eNb_ulsch UE %x \n", ctxt_prior.rnti); - clean_eNb_ulsch(ulsch); - break; - } - } - - for(int j = 0; j < 10; j++){ - ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; - if(ul_req_tmp){ - int pdu_number = ul_req_tmp->number_of_pdus; - for(int pdu_index = pdu_number-1; pdu_index >= 0; pdu_index--){ - if(ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == ctxt_prior.rnti){ - LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", ctxt_prior.rnti, pdu_index, pdu_number); - if(pdu_index < pdu_number -1){ - memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index+1], (pdu_number-1-pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); - } - ul_req_tmp->number_of_pdus--; - } - } - } - } + rrc_data_req( + ctxt_pP, + DCCH, + rrc_eNB_mui++, + SDU_CONFIRM_NO, + size, + buffer, + PDCP_TRANSMISSION_MODE_CONTROL); } - rrc_mac_remove_ue(ctxt_prior.module_id, ctxt_prior.rnti); - rrc_rlc_remove_ue(&ctxt_prior); - pdcp_remove_UE(&ctxt_prior); + // delete UE data of prior RNTI. UE use current RNTI. +// protocol_ctxt_t ctxt_prior = *ctxt_pP; +// ctxt_prior.rnti = reestablish_rnti; +// +// LTE_eNB_ULSCH_t *ulsch = NULL; +// nfapi_ul_config_request_body_t *ul_req_tmp = NULL; +// PHY_VARS_eNB *eNB_PHY = NULL; +// eNB_MAC_INST *eNB_MAC = RC.mac[ctxt_prior.module_id]; +// for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { +// eNB_PHY = RC.eNB[ctxt_prior.module_id][CC_id]; +// for (int i=0; iulsch[i]; +// if((ulsch != NULL) && (ulsch->rnti == ctxt_prior.rnti)){ +// void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch); +// LOG_I(RRC, "clean_eNb_ulsch UE %x \n", ctxt_prior.rnti); +// clean_eNb_ulsch(ulsch); +// break; +// } +// } +// +// for(int j = 0; j < 10; j++){ +// ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; +// if(ul_req_tmp){ +// int pdu_number = ul_req_tmp->number_of_pdus; +// for(int pdu_index = pdu_number-1; pdu_index >= 0; pdu_index--){ +// if(ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == ctxt_prior.rnti){ +// LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", ctxt_prior.rnti, pdu_index, pdu_number); +// if(pdu_index < pdu_number -1){ +// memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index+1], (pdu_number-1-pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); +// } +// ul_req_tmp->number_of_pdus--; +// } +// } +// } +// } +// } +// rrc_mac_remove_ue(ctxt_prior.module_id, ctxt_prior.rnti); +// rrc_rlc_remove_ue(&ctxt_prior); +// pdcp_remove_UE(&ctxt_prior); + // add UE info to freeList for RU_thread to remove the UE instead of remove it here + LOG_I(RRC, "[RRCConnectionReestablishment]put UE %x into freeList\n", reestablish_rnti); + put_UE_in_freelist(ctxt_pP->module_id, reestablish_rnti, 0); } //----------------------------------------------------------------------------- @@ -1941,8 +1981,14 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject( int cnt; #endif int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 20; + if(UE_id != -1){ + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 20; + }else{ + LOG_E(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" Generating RRCConnectionReestablishmentReject without UE_id(MAC) rnti %x\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti); + } T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); @@ -1993,19 +2039,18 @@ rrc_eNB_generate_RRCConnectionRelease( T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); memset(buffer, 0, RRC_BUF_SIZE); - size = do_RRCConnectionRelease(ctxt_pP->module_id, buffer,rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id)); // set release timer //ue_context_pP->ue_context.ue_release_timer=1; // remove UE after 10 frames after RRCConnectionRelease is triggered //ue_context_pP->ue_context.ue_release_timer_thres=100; // set release timer - ue_context_pP->ue_context.ue_release_timer_rrc = 1; +// ue_context_pP->ue_context.ue_release_timer_rrc = 1; // remove UE after 10 frames after RRCConnectionRelease is triggered - ue_context_pP->ue_context.ue_release_timer_thres_rrc = 100; +// ue_context_pP->ue_context.ue_release_timer_thres_rrc = 100; ue_context_pP->ue_context.ue_reestablishment_timer = 0; ue_context_pP->ue_context.ue_release_timer = 0; - ue_context_pP->ue_context.ue_release_timer_s1 = 0; + //ue_context_pP->ue_context.ue_release_timer_s1 = 0; LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate RRCConnectionRelease (bytes %d)\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), @@ -2028,7 +2073,23 @@ rrc_eNB_generate_RRCConnectionRelease( ue_context_pP->ue_context.rnti, rrc_eNB_mui, size); - + pthread_mutex_lock(&rrc_release_freelist); + for(uint16_t release_num = 0;release_num < NUMBER_OF_UE_MAX;release_num++){ + if(rrc_release_info.RRC_release_ctrl[release_num].flag == 0){ + if(ue_context_pP->ue_context.ue_release_timer_s1 > 0){ + rrc_release_info.RRC_release_ctrl[release_num].flag = 1; + }else{ + rrc_release_info.RRC_release_ctrl[release_num].flag = 2; + } + rrc_release_info.RRC_release_ctrl[release_num].rnti = ctxt_pP->rnti; + rrc_release_info.RRC_release_ctrl[release_num].rrc_eNB_mui = rrc_eNB_mui; + rrc_release_info.num_UEs++; + LOG_D(RRC,"Generate DLSCH Release send: index %d rnti %x mui %d flag %d \n",release_num, + ctxt_pP->rnti, rrc_eNB_mui,rrc_release_info.RRC_release_ctrl[release_num].flag); + break; + } + } + pthread_mutex_unlock(&rrc_release_freelist); rrc_data_req( ctxt_pP, DCCH, @@ -4383,11 +4444,16 @@ check_handovers( ue_context_p->ue_context.handover_info->size, ue_context_p->ue_context.handover_info->buf, PDCP_TRANSMISSION_MODE_CONTROL -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); - AssertFatal(result == TRUE, "PDCP data request failed!\n"); + //AssertFatal(result == TRUE, "PDCP data request failed!\n"); + if(result != TRUE) + { + LOG_I(RRC, "PDCP data request failed!\n"); + return; + } ue_context_p->ue_context.handover_info->ho_complete = 0xF2; } } @@ -5773,9 +5839,6 @@ rrc_eNB_generate_RRCConnectionSetup( PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - // activate release timer, if RRCSetupComplete not received after 10 frames, remove UE - //ue_context_pP->ue_context.ue_release_timer=1; - // remove UE after 10 frames after RRCConnectionRelease is triggered //ue_context_pP->ue_context.ue_release_timer_thres=100; // activate release timer, if RRCSetupComplete not received after 100 frames, remove UE ue_context_pP->ue_context.ue_release_timer=1; @@ -6125,26 +6188,57 @@ rrc_eNB_decode_ccch( break; } int UE_id = find_UE_id(ctxt_pP->module_id, c_rnti); - if(ue_context_p->ue_context.ue_reestablishment_timer > 0 || RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer > 0){ - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishment(Previous) don't complete, let's reject the UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); + if(UE_id == -1){ + LOG_E(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishmentRequest without UE_id(MAC) rnti %x, let's reject the UE\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),c_rnti); rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, ue_context_p, CC_id); break; } + + if((RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer > 0) && + (RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres > 20)){ + LOG_E(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" RCConnectionReestablishmentComplete(Previous) don't receive, delete the Previous UE\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1000; + ue_context_p->ue_context.ue_reestablishment_timer = 0; + } + + if(ue_context_p->ue_context.ue_reestablishment_timer > 0){ + LOG_E(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" RRRCConnectionReconfigurationComplete(Previous) don't receive, delete the Previous UE\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); + ue_context_p->ue_context.Status = RRC_RECONFIGURED; + protocol_ctxt_t ctxt_old_p; + PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt_old_p, + ctxt_pP->instance, + ENB_FLAG_YES, + c_rnti, + ctxt_pP->frame, + ctxt_pP->subframe); + rrc_eNB_process_RRCConnectionReconfigurationComplete(&ctxt_old_p, + ue_context_p, + ue_context_p->ue_context.reestablishment_xid); + for (uint8_t e_rab = 0; e_rab < ue_context_p->ue_context.nb_of_e_rabs; e_rab++) { + if (ue_context_p->ue_context.e_rab[e_rab].status == E_RAB_STATUS_DONE) { + ue_context_p->ue_context.e_rab[e_rab].status = E_RAB_STATUS_ESTABLISHED; + } else { + ue_context_p->ue_context.e_rab[e_rab].status = E_RAB_STATUS_FAILED; + } + } + } LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" UE context: %p\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), ue_context_p); + /* reset timers */ ue_context_p->ue_context.ul_failure_timer = 0; ue_context_p->ue_context.ue_release_timer = 0; ue_context_p->ue_context.ue_reestablishment_timer = 0; ue_context_p->ue_context.ue_release_timer_s1 = 0; ue_context_p->ue_context.ue_release_timer_rrc = 0; - - /* reset timers */ - ue_context_p->ue_context.ul_failure_timer = 0; - ue_context_p->ue_context.ue_release_timer = 0; + ue_context_p->ue_context.reestablishment_xid = -1; // insert C-RNTI to map for (i = 0; i < MAX_MOBILES_PER_ENB; i++) { @@ -6272,26 +6366,18 @@ rrc_eNB_decode_ccch( rrcConnectionRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionRequest.criticalExtensions.choice.rrcConnectionRequest_r8; { if (InitialUE_Identity_PR_randomValue == rrcConnectionRequest->ue_Identity.present) { - AssertFatal(rrcConnectionRequest->ue_Identity.choice.randomValue.size == 5, - "wrong InitialUE-Identity randomValue size, expected 5, provided %d", - rrcConnectionRequest->ue_Identity.choice.randomValue.size); + if(rrcConnectionRequest->ue_Identity.choice.randomValue.size != 5) + { + LOG_I(RRC, "wrong InitialUE-Identity randomValue size, expected 5, provided %d", + rrcConnectionRequest->ue_Identity.choice.randomValue.size); + return -1; + } memcpy(((uint8_t*) & random_value) + 3, rrcConnectionRequest->ue_Identity.choice.randomValue.buf, rrcConnectionRequest->ue_Identity.choice.randomValue.size); /* if there is already a registered UE (with another RNTI) with this random_value, * the current one must be removed from MAC/PHY (zombie UE) */ -#if 0 - if ((ue_context_p = rrc_eNB_ue_context_random_exist(ctxt_pP, random_value))) { - LOG_W(RRC, "new UE rnti %x (coming with random value) is already there as UE %x, removing %x from MAC/PHY\n", - ctxt_pP->rnti, ue_context_p->ue_context.rnti, ctxt_pP->rnti); - rrc_mac_remove_ue(ctxt_pP->module_id, ctxt_pP->rnti); - ue_context_p = NULL; - return 0; - } else { - ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, random_value); - } -#endif if ((ue_context_p = rrc_eNB_ue_context_random_exist(ctxt_pP, random_value))) { LOG_W(RRC, "new UE rnti %x (coming with random value) is already there as UE %x, removing %x from MAC/PHY\n", ctxt_pP->rnti, ue_context_p->ue_context.rnti, ue_context_p->ue_context.rnti); @@ -6321,6 +6407,7 @@ rrc_eNB_decode_ccch( ue_context_p->ue_context.ue_reestablishment_timer = 0; ue_context_p->ue_context.ue_release_timer_s1 = 0; ue_context_p->ue_context.ue_release_timer_rrc = 0; + ue_context_p->ue_context.reestablishment_xid = -1; } else { LOG_I(RRC," S-TMSI doesn't exist, setting Initialue_identity_s_TMSI.m_tmsi to %p => %x\n",ue_context_p,m_tmsi); // ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, NOT_A_RANDOM_UE_IDENTITY); @@ -6600,6 +6687,11 @@ rrc_eNB_decode_dcch( break; case UL_DCCH_MessageType__c1_PR_measurementReport: + // to avoid segmentation fault + if(!ue_context_p){ + LOG_I(RRC, "Processing measurementReport UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); + break; + } LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RLC RB %02d --- RLC_DATA_IND " "%d bytes (measurementReport) ---> RRC_eNB\n", @@ -6614,6 +6706,11 @@ rrc_eNB_decode_dcch( break; case UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete: + // to avoid segmentation fault + if(!ue_context_p){ + LOG_I(RRC, "Processing RRCConnectionReconfigurationComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); + break; + } #ifdef RRC_MSG_PRINT LOG_F(RRC,"[MSG] RRC Connection Reconfiguration Complete\n"); @@ -6644,18 +6741,44 @@ rrc_eNB_decode_dcch( present == RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) { /*NN: revise the condition */ + /*FK: left the condition as is for the case MME is used (S1 mode) but setting dedicated_DRB = 1 otherwise (noS1 mode) so that no second RRCReconfiguration message activationg more DRB is sent as this causes problems with the nasmesh driver.*/ +#if defined(ENABLE_USE_MME) if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){ dedicated_DRB = 1; LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - }else { + //clear + int16_t UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); + if(UE_id == -1){ + LOG_E(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReconfigurationComplete without rnti %x, fault\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti); + break; + } + if(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag == 1){ + LOG_I(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld) C-RNTI Complete\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); + dedicated_DRB = 2; + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 0; + } + } else { dedicated_DRB = 0; ue_context_p->ue_context.Status = RRC_RECONFIGURED; - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); + LOG_I(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); } + ue_context_p->ue_context.reestablishment_xid = -1; +#else + dedicated_DRB = 1; + ue_context_p->ue_context.Status = RRC_RECONFIGURED; + LOG_I(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); +#endif + rrc_eNB_process_RRCConnectionReconfigurationComplete( ctxt_pP, ue_context_p, @@ -6712,7 +6835,7 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { ue_context_p, ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); } - }else { + }else if(dedicated_DRB == 0){ if(ue_context_p->ue_context.reestablishment_cause == ReestablishmentCause_spare1){ rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP(ctxt_pP, ue_context_p); @@ -6726,7 +6849,15 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { } } } - } + }else if(dedicated_DRB == 2){ + for (uint8_t e_rab = 0; e_rab < ue_context_p->ue_context.nb_of_e_rabs; e_rab++) { + if (ue_context_p->ue_context.e_rab[e_rab].status == E_RAB_STATUS_DONE) { + ue_context_p->ue_context.e_rab[e_rab].status = E_RAB_STATUS_ESTABLISHED; + } else { + ue_context_p->ue_context.e_rab[e_rab].status = E_RAB_STATUS_FAILED; + } + } + } } #else // establish a dedicated bearer if (dedicated_DRB == 0 ) { @@ -6769,8 +6900,6 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { DCCH, sdu_sizeP); { - int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 0; rnti_t reestablish_rnti = 0; // select C-RNTI from map for (i = 0; i < MAX_MOBILES_PER_ENB; i++) { @@ -6794,6 +6923,16 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); break; } + //clear + int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); + if(UE_id == -1){ + LOG_E(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishmentComplete without UE_id(MAC) rnti %x, fault\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti); + break; + } + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 0; + ue_context_p->ue_context.ue_reestablishment_timer = 0; if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionReestablishmentComplete.criticalExtensions.present == RRCConnectionReestablishmentComplete__criticalExtensions_PR_rrcConnectionReestablishmentComplete_r8) { @@ -6816,6 +6955,11 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { break; case UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete: + // to avoid segmentation fault + if(!ue_context_p){ + LOG_I(RRC, "Processing RRCConnectionSetupComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); + break; + } #ifdef RRC_MSG_PRINT LOG_F(RRC,"[MSG] RRC Connection SetupComplete\n"); @@ -6871,7 +7015,11 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { case UL_DCCH_MessageType__c1_PR_securityModeComplete: T(T_ENB_RRC_SECURITY_MODE_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - + // to avoid segmentation fault + if(!ue_context_p){ + LOG_I(RRC, "Processing securityModeComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); + break; + } #ifdef RRC_MSG_PRINT LOG_F(RRC,"[MSG] RRC Security Mode Complete\n"); @@ -6956,7 +7104,11 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { case UL_DCCH_MessageType__c1_PR_ueCapabilityInformation: T(T_ENB_RRC_UE_CAPABILITY_INFORMATION, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - + // to avoid segmentation fault + if(!ue_context_p){ + LOG_I(RRC, "Processing ueCapabilityInformation UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); + break; + } #ifdef RRC_MSG_PRINT LOG_F(RRC,"[MSG] RRC UECapablility Information \n"); @@ -6993,8 +7145,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { LOG_I(RRC, "got UE capabilities for UE %x\n", ctxt_pP->rnti); if (ue_context_p->ue_context.UE_Capability) { LOG_I(RRC, "freeing old UE capabilities for UE %x\n", ctxt_pP->rnti); - asn_DEF_UE_EUTRA_Capability.free_struct(&asn_DEF_UE_EUTRA_Capability, - ue_context_p->ue_context.UE_Capability, 0); + ASN_STRUCT_FREE(asn_DEF_UE_EUTRA_Capability, + ue_context_p->ue_context.UE_Capability); ue_context_p->ue_context.UE_Capability = 0; } dec_rval = uper_decode(NULL, @@ -7014,8 +7166,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Failed to decode UE capabilities (%zu bytes)\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), dec_rval.consumed); - asn_DEF_UE_EUTRA_Capability.free_struct(&asn_DEF_UE_EUTRA_Capability, - ue_context_p->ue_context.UE_Capability, 0); + ASN_STRUCT_FREE(asn_DEF_UE_EUTRA_Capability, + ue_context_p->ue_context.UE_Capability); ue_context_p->ue_context.UE_Capability = 0; } @@ -7050,6 +7202,11 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { case UL_DCCH_MessageType__c1_PR_ulInformationTransfer: T(T_ENB_RRC_UL_INFORMATION_TRANSFER, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + // to avoid segmentation fault + if(!ue_context_p){ + LOG_I(RRC, "Processing ulInformationTransfer UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); + break; + } LOG_D(RRC,"[MSG] RRC UL Information Transfer \n"); #ifdef RRC_MSG_PRINT @@ -7243,6 +7400,10 @@ rrc_enb_task( int CC_id; protocol_ctxt_t ctxt; + + pthread_mutex_init(&lock_ue_freelist, NULL); + pthread_mutex_init(&rrc_release_freelist, NULL); + memset(&rrc_release_info,0,sizeof(RRC_release_list_t)); itti_mark_task_ready(TASK_RRC_ENB); LOG_I(RRC,"Entering main loop of RRC message task\n"); while (1) { @@ -7280,9 +7441,10 @@ rrc_enb_task( LOG_I(RRC,"Decoding CCCH : inst %d, CC_id %d, ctxt %p, sib_info_p->Rx_buffer.payload_size %d\n", instance,CC_id,&ctxt, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); - AssertFatal(RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size < RRC_BUFFER_SIZE_MAX, - "CCCH message has size %d > %d\n", - RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size,RRC_BUFFER_SIZE_MAX); + if (RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size >= RRC_BUFFER_SIZE_MAX) { + LOG_I(RRC, "CCCH message has size %d > %d\n",RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size,RRC_BUFFER_SIZE_MAX); + break; + } memcpy(srb_info_p->Rx_buffer.Payload, RRC_MAC_CCCH_DATA_IND(msg_p).sdu, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); @@ -7310,7 +7472,10 @@ rrc_enb_task( // Message buffer has been processed, free it now. result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), RRC_DCCH_DATA_IND(msg_p).sdu_p); - AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); + if (result != EXIT_SUCCESS) { + LOG_I(RRC, "Failed to free memory (%d)!\n",result); + break; + } break; # if defined(ENABLE_USE_MME) @@ -7358,8 +7523,8 @@ rrc_enb_task( /* Nothing to do. Apparently everything is done in S1AP processing */ //LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n", //instance, msg_name_p); - if (rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti) - && rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_rrc > 0) { + if (rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti) + && rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_rrc > 0) { rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_rrc = rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_thres_rrc; } @@ -7379,7 +7544,10 @@ rrc_enb_task( } result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), msg_p); - AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); + if (result != EXIT_SUCCESS) { + LOG_I(RRC, "Failed to free memory (%d)!\n",result); + continue; + } msg_p = NULL; } } @@ -7455,7 +7623,6 @@ rrc_eNB_process_SidelinkUEInformation( { SL_DestinationInfoList_r12_t *destinationInfoList; int n_destinations = 0; - int ue_type = 0; int n_discoveryMessages = 0; LOG_I(RRC, @@ -7503,7 +7670,6 @@ rrc_eNB_process_SidelinkUEInformation( if ((sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension != NULL) &&(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13 != NULL)) { if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.count > 0) { n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.count; - ue_type = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13; destinationInfoList = CALLOC(1, sizeof(SL_DestinationInfoList_r12_t)); for (int i=0; i< n_destinations; i++ ){ //sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.array[i]); @@ -7519,7 +7685,6 @@ rrc_eNB_process_SidelinkUEInformation( if ((sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension != NULL) && (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13 != NULL)) { if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.count > 0){ n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.count; - ue_type = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13; destinationInfoList = CALLOC(1, sizeof(SL_DestinationInfoList_r12_t)); for (int i=0; i< n_destinations; i++ ){ //sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.array[i]); @@ -7592,7 +7757,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink( (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)NULL, (SL_CommConfig_r12_t*)&sl_CommConfig, (SL_DiscConfig_r12_t*)NULL - #if defined(Rel10) || defined(Rel14) + #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) , (SCellToAddMod_r10_t*)NULL #endif ); @@ -7615,7 +7780,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink( (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)NULL, (SL_CommConfig_r12_t*)NULL, (SL_DiscConfig_r12_t*)&sl_DiscConfig - #if defined(Rel10) || defined(Rel14) + #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) , (SCellToAddMod_r10_t*)NULL #endif ); @@ -7744,6 +7909,7 @@ rrc_rx_tx( // check for UL failure RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) { + ctxt_pP->rnti = ue_context_p->ue_id_rnti; if ((ctxt_pP->frame == 0) && (ctxt_pP->subframe==0)) { if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) { LOG_I(RRC,"UE rnti %x:S-TMSI %x failure timer %d/8\n", @@ -7759,7 +7925,7 @@ rrc_rx_tx( } if (ue_context_p->ue_context.ul_failure_timer>0) { ue_context_p->ue_context.ul_failure_timer++; - if (ue_context_p->ue_context.ul_failure_timer >= 8) { + if (ue_context_p->ue_context.ul_failure_timer >= 20000) { // remove UE after 20 seconds after MAC has indicated UL failure LOG_I(RRC,"Removing UE %x instance\n",ue_context_p->ue_context.rnti); ue_to_be_removed = ue_context_p; @@ -7772,7 +7938,15 @@ rrc_rx_tx( ue_context_p->ue_context.ue_release_timer_thres_s1) { LOG_I(RRC,"Removing UE %x instance Because of UE_CONTEXT_RELEASE_COMMAND not received after %d ms from sending request\n", ue_context_p->ue_context.rnti, ue_context_p->ue_context.ue_release_timer_thres_s1); +// ue_context_p->ue_context.ue_release_timer_s1 = 0; +#if defined(ENABLE_USE_MME) +#if defined(ENABLE_ITTI) + rrc_eNB_generate_RRCConnectionRelease(ctxt_pP, ue_context_p); +#endif +#else ue_to_be_removed = ue_context_p; +#endif + ue_context_p->ue_context.ue_release_timer_s1 = 0; break; } } @@ -7782,10 +7956,75 @@ rrc_rx_tx( if (ue_context_p->ue_context.ue_release_timer_rrc >= ue_context_p->ue_context.ue_release_timer_thres_rrc) { LOG_I(RRC,"Removing UE %x instance After UE_CONTEXT_RELEASE_Complete\n", ue_context_p->ue_context.rnti); + ue_context_p->ue_context.ue_release_timer_rrc = 0; ue_to_be_removed = ue_context_p; + ue_context_p->ue_context.ue_release_timer_rrc = 0; break; } } + pthread_mutex_lock(&rrc_release_freelist); + if(rrc_release_info.num_UEs > 0){ + uint16_t release_total = 0; + for(uint16_t release_num = 0;release_num < NUMBER_OF_UE_MAX;release_num++){ + if(rrc_release_info.RRC_release_ctrl[release_num].flag > 0){ + release_total++; + } + if( (rrc_release_info.RRC_release_ctrl[release_num].flag > 2) && + (rrc_release_info.RRC_release_ctrl[release_num].rnti == ue_context_p->ue_context.rnti)){ + ue_context_p->ue_context.ue_release_timer_rrc = 1; + ue_context_p->ue_context.ue_release_timer_thres_rrc = 100; +#if defined(ENABLE_USE_MME) +#if defined(ENABLE_ITTI) + int e_rab; + MessageDef *msg_complete_p = NULL; + MessageDef *msg_delete_tunnels_p = NULL; + uint32_t eNB_ue_s1ap_id = ue_context_p->ue_context.eNB_ue_s1ap_id; + if(rrc_release_info.RRC_release_ctrl[release_num].flag == 4){ + MSC_LOG_TX_MESSAGE( + MSC_RRC_ENB, + MSC_S1AP_ENB, + NULL,0, + "0 S1AP_UE_CONTEXT_RELEASE_COMPLETE eNB_ue_s1ap_id 0x%06"PRIX32" ", + eNB_ue_s1ap_id); + msg_complete_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_COMPLETE); + S1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id; + itti_send_msg_to_task(TASK_S1AP, ctxt_pP->module_id, msg_complete_p); + } + MSC_LOG_TX_MESSAGE(MSC_RRC_ENB, MSC_GTPU_ENB, NULL,0, "0 GTPV1U_ENB_DELETE_TUNNEL_REQ rnti %x ", eNB_ue_s1ap_id); + msg_delete_tunnels_p = itti_alloc_new_message(TASK_RRC_ENB, GTPV1U_ENB_DELETE_TUNNEL_REQ); + memset(>PV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p), 0, sizeof(GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p))); + // do not wait response + GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).rnti = ue_context_p->ue_context.rnti; + for (e_rab = 0; e_rab < ue_context_p->ue_context.nb_of_e_rabs; e_rab++) { + GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).eps_bearer_id[GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).num_erab++] = + ue_context_p->ue_context.enb_gtp_ebi[e_rab]; + // erase data + ue_context_p->ue_context.enb_gtp_teid[e_rab] = 0; + memset(&ue_context_p->ue_context.enb_gtp_addrs[e_rab], 0, sizeof(ue_context_p->ue_context.enb_gtp_addrs[e_rab])); + ue_context_p->ue_context.enb_gtp_ebi[e_rab] = 0; + } + itti_send_msg_to_task(TASK_GTPV1_U, ctxt_pP->module_id, msg_delete_tunnels_p); + struct rrc_ue_s1ap_ids_s *rrc_ue_s1ap_ids = NULL; + rrc_ue_s1ap_ids = rrc_eNB_S1AP_get_ue_ids( + RC.rrc[ctxt_pP->module_id], + 0, + eNB_ue_s1ap_id); + if (NULL != rrc_ue_s1ap_ids) { + rrc_eNB_S1AP_remove_ue_ids( + RC.rrc[ctxt_pP->module_id], + rrc_ue_s1ap_ids); + } +#endif +#endif + rrc_release_info.RRC_release_ctrl[release_num].flag = 0; + rrc_release_info.num_UEs--; + break; + } + if(release_total >= rrc_release_info.num_UEs) + break; + } + } + pthread_mutex_unlock(&rrc_release_freelist); if (ue_context_p->ue_context.ue_reestablishment_timer>0) { ue_context_p->ue_context.ue_reestablishment_timer++; @@ -7798,25 +8037,27 @@ rrc_rx_tx( break; } } + if (ue_context_p->ue_context.ue_release_timer>0) { ue_context_p->ue_context.ue_release_timer++; if (ue_context_p->ue_context.ue_release_timer >= ue_context_p->ue_context.ue_release_timer_thres) { - LOG_I(RRC,"Removing UE %x instance, Release timer: %d, Release timer thres.: %d \n",ue_context_p->ue_context.rnti, ue_context_p->ue_context.ue_release_timer, ue_context_p->ue_context.ue_release_timer_thres); + LOG_I(RRC,"Removing UE %x instance\n",ue_context_p->ue_context.rnti); ue_to_be_removed = ue_context_p; + ue_context_p->ue_context.ue_release_timer = 0; break; } } } if (ue_to_be_removed) { - if(ue_to_be_removed->ue_context.ul_failure_timer >= 8) { + if(ue_to_be_removed->ue_context.ul_failure_timer >= 20000) { ue_to_be_removed->ue_context.ue_release_timer_s1 = 1; ue_to_be_removed->ue_context.ue_release_timer_thres_s1 = 100; ue_to_be_removed->ue_context.ue_release_timer = 0; ue_to_be_removed->ue_context.ue_reestablishment_timer = 0; } rrc_eNB_free_UE(ctxt_pP->module_id,ue_to_be_removed); - if(ue_to_be_removed->ue_context.ul_failure_timer >= 8){ + if(ue_to_be_removed->ue_context.ul_failure_timer >= 20000){ ue_to_be_removed->ue_context.ul_failure_timer = 0; } } diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c index a250151a80..c0c143fc3a 100644 --- a/openair2/RRC/LTE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c @@ -58,7 +58,7 @@ #include "RRC/LTE/rrc_eNB_GTPV1U.h" #include "TLVDecoder.h" -#include "S1ap-NAS-PDU.h" +#include "S1AP_NAS-PDU.h" #include "flexran_agent_common_internal.h" extern RAN_CONTEXT_t RC; @@ -678,7 +678,8 @@ void rrc_eNB_send_S1AP_UE_CAPABILITIES_IND( return; } - asn_enc_rval_t ret = uper_encode_to_buffer(&asn_DEF_UECapabilityInformation, ueCapabilityInformation, buf, 4096); + asn_enc_rval_t ret = uper_encode_to_buffer(&asn_DEF_UECapabilityInformation, NULL, ueCapabilityInformation, buf, 4096); + if (ret.encoded == -1) abort(); memset(&rac, 0, sizeof(UERadioAccessCapabilityInformation_t)); @@ -692,7 +693,9 @@ void rrc_eNB_send_S1AP_UE_CAPABILITIES_IND( /* 8192 is arbitrary, should be big enough */ buf2 = malloc16(8192); if (buf2 == NULL) abort(); - ret = uper_encode_to_buffer(&asn_DEF_UERadioAccessCapabilityInformation, &rac, buf2, 8192); + + ret = uper_encode_to_buffer(&asn_DEF_UERadioAccessCapabilityInformation, NULL, &rac, buf2, 8192); + if (ret.encoded == -1) abort(); MessageDef *msg_p; @@ -1289,62 +1292,6 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch instance, eNB_ue_s1ap_id); */ - { - int e_rab; - //int mod_id = 0; - MessageDef *msg_delete_tunnels_p = NULL; - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_GTPU_ENB, - NULL,0, - "0 GTPV1U_ENB_DELETE_TUNNEL_REQ rnti %x ", - eNB_ue_s1ap_id); - - msg_delete_tunnels_p = itti_alloc_new_message(TASK_RRC_ENB, GTPV1U_ENB_DELETE_TUNNEL_REQ); - memset(>PV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p), - 0, - sizeof(GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p))); - - // do not wait response - GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).rnti = ue_context_p->ue_context.rnti; - - for (e_rab = 0; e_rab < ue_context_p->ue_context.nb_of_e_rabs; e_rab++) { - GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).eps_bearer_id[GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).num_erab++] = - ue_context_p->ue_context.enb_gtp_ebi[e_rab]; - // erase data - ue_context_p->ue_context.enb_gtp_teid[e_rab] = 0; - memset(&ue_context_p->ue_context.enb_gtp_addrs[e_rab], 0, sizeof(ue_context_p->ue_context.enb_gtp_addrs[e_rab])); - ue_context_p->ue_context.enb_gtp_ebi[e_rab] = 0; - } - - itti_send_msg_to_task(TASK_GTPV1_U, instance, msg_delete_tunnels_p); - - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_S1AP_ENB, - NULL,0, - "0 S1AP_UE_CONTEXT_RELEASE_COMPLETE eNB_ue_s1ap_id 0x%06"PRIX32" ", - eNB_ue_s1ap_id); - - MessageDef *msg_complete_p = NULL; - msg_complete_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_COMPLETE); - S1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id; - itti_send_msg_to_task(TASK_S1AP, instance, msg_complete_p); - - rrc_ue_s1ap_ids = rrc_eNB_S1AP_get_ue_ids( - RC.rrc[instance], - UE_INITIAL_ID_INVALID, - eNB_ue_s1ap_id); - - if (NULL != rrc_ue_s1ap_ids) { - rrc_eNB_S1AP_remove_ue_ids( - RC.rrc[instance], - rrc_ue_s1ap_ids); - } - } - return (0); } } @@ -1993,7 +1940,7 @@ int rrc_eNB_process_PAGING_IND(MessageDef *msg_p, const char *msg_name, instance /* insert data to UE_PF_PO or update data in UE_PF_PO */ pthread_mutex_lock(&ue_pf_po_mutex); - uint8_t i = 0; + uint16_t i = 0; for (i = 0; i < MAX_MOBILES_PER_ENB; i++) { if ((UE_PF_PO[CC_id][i].enable_flag == TRUE && UE_PF_PO[CC_id][i].ue_index_value == (uint16_t)(S1AP_PAGING_IND(msg_p).ue_index_value)) || (UE_PF_PO[CC_id][i].enable_flag != TRUE)) { @@ -2039,6 +1986,11 @@ int rrc_eNB_process_PAGING_IND(MessageDef *msg_p, const char *msg_name, instance buffer, S1AP_PAGING_IND(msg_p).ue_paging_identity, S1AP_PAGING_IND(msg_p).cn_domain); + if(length == -1) + { + LOG_I(RRC, "do_Paging error"); + return -1; + } message_buffer = itti_malloc (TASK_RRC_ENB, TASK_PDCP_ENB, length); /* Uses a new buffer to avoid issue with PDCP buffer content that could be changed by PDCP (asynchronous message handling). */ memcpy (message_buffer, buffer, length); diff --git a/openair2/RRC/LTE/rrc_eNB_UE_context.c b/openair2/RRC/LTE/rrc_eNB_UE_context.c index 0ae3d7ca15..1e344f2747 100644 --- a/openair2/RRC/LTE/rrc_eNB_UE_context.c +++ b/openair2/RRC/LTE/rrc_eNB_UE_context.c @@ -155,9 +155,6 @@ rrc_eNB_get_ue_context( memset(&temp, 0, sizeof(struct rrc_eNB_ue_context_s)); /* eNB ue rrc id = 24 bits wide */ temp.ue_id_rnti = rntiP; -#if 0 - return RB_FIND(rrc_ue_tree_s, &rrc_instance_pP->rrc_ue_head, &temp); -#endif struct rrc_eNB_ue_context_s *ue_context_p = NULL; ue_context_p = RB_FIND(rrc_ue_tree_s, &rrc_instance_pP->rrc_ue_head, &temp); if ( ue_context_p != NULL) { diff --git a/openair2/RRC/LTE/rrc_eNB_ral.c b/openair2/RRC/LTE/rrc_eNB_ral.c index 94e25a6eeb..db20eb4a28 100644 --- a/openair2/RRC/LTE/rrc_eNB_ral.c +++ b/openair2/RRC/LTE/rrc_eNB_ral.c @@ -33,8 +33,8 @@ #include "rrc_eNB_ral.h" #include "assertions.h" #include "collection/hashtable/obj_hashtable.h" -#include "RRC/LITE/defs.h" -#include "RRC/LITE/extern.h" +#include "RRC/LTE/defs.h" +#include "RRC/LTE/extern.h" //----------------------------------------------------------------------------- diff --git a/openair2/RRC/LTE/rrc_eNB_ral.h b/openair2/RRC/LTE/rrc_eNB_ral.h index 143537e45c..bfdcdc1d53 100644 --- a/openair2/RRC/LTE/rrc_eNB_ral.h +++ b/openair2/RRC/LTE/rrc_eNB_ral.h @@ -30,21 +30,6 @@ #ifndef __RRC_ENB_RAL_H__ # define __RRC_ENB_RAL_H__ //----------------------------------------------------------------------------- -# ifdef RRC_ENB_RAL_C -# define private_rrc_enb_ral(x) x -# define protected_rrc_enb_ral(x) x -# define public_rrc_enb_ral(x) x -# else -# ifdef RRC_ENB -# define private_rrc_enb_ral(x) -# define protected_rrc_enb_ral(x) extern x -# define public_rrc_enb_ral(x) extern x -# else -# define private_rrc_enb_ral(x) -# define protected_rrc_enb_ral(x) -# define public_rrc_enb_ral(x) extern x -# endif -# endif //----------------------------------------------------------------------------- #include #include @@ -59,9 +44,9 @@ #include "defs.h" -private_rrc_enb_ral( int rrc_enb_ral_delete_all_thresholds_type (unsigned int mod_idP, ral_link_param_type_t *param_type_pP);) -private_rrc_enb_ral( int rrc_enb_ral_delete_threshold (unsigned int mod_idP, ral_link_param_type_t* param_type_pP, - ral_threshold_t* threshold_pP);) -protected_rrc_enb_ral(int rrc_enb_ral_handle_configure_threshold_request(unsigned int mod_idP, MessageDef *msg_pP);) +int rrc_enb_ral_delete_all_thresholds_type (unsigned int mod_idP, ral_link_param_type_t *param_type_pP); +int rrc_enb_ral_delete_threshold (unsigned int mod_idP, ral_link_param_type_t* param_type_pP, + ral_threshold_t* threshold_pP); +int rrc_enb_ral_handle_configure_threshold_request(unsigned int mod_idP, MessageDef *msg_pP); #endif diff --git a/openair2/RRC/LTE/rrc_proto.h b/openair2/RRC/LTE/rrc_proto.h index 0218456ccb..e16391aef1 100644 --- a/openair2/RRC/LTE/rrc_proto.h +++ b/openair2/RRC/LTE/rrc_proto.h @@ -106,7 +106,7 @@ rrc_ue_decode_dcch( const uint8_t eNB_indexP ); -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) int decode_SL_Discovery_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, @@ -628,5 +628,11 @@ void openair_rrc_top_init_ue( uint8_t cba_group_active, uint8_t HO_active ); +pthread_mutex_t rrc_release_freelist; +RRC_release_list_t rrc_release_info; +pthread_mutex_t lock_ue_freelist; +void remove_UE_from_freelist(module_id_t mod_id, rnti_t rnti); +void put_UE_in_freelist(module_id_t mod_id, rnti_t rnti, boolean_t removeFlag); +void release_UE_in_freeList(module_id_t mod_id); /** @}*/ diff --git a/openair2/UTIL/CLI/cli_if.h b/openair2/UTIL/CLI/cli_if.h index 539ecd465a..858cb6bc76 100644 --- a/openair2/UTIL/CLI/cli_if.h +++ b/openair2/UTIL/CLI/cli_if.h @@ -38,30 +38,14 @@ extern "C" { #endif -# ifdef COMPONENT_CLI -# ifdef COMPONENT_CLI_IF -# define private_cli_if(x) x -# define friend_cli_if(x) x -# define public_cli_if(x) x -# else -# define private_cli_if(x) -# define friend_cli_if(x) extern x -# define public_cli_if(x) extern x -# endif -# else -# define private_cli_if(x) -# define friend_cli_if(x) -# define public_cli_if(x) extern x -# endif - /** @defgroup _cli_if Interfaces of CLI * @{*/ -public_cli_if( void cli_init (void); ) -public_cli_if( int cli_server_init(cli_handler_t handler); ) -public_cli_if(void cli_server_cleanup(void);) -public_cli_if(void cli_server_recv(const void * data, socklen_t len);) +void cli_init (void); +int cli_server_init(cli_handler_t handler); +void cli_server_cleanup(void); +void cli_server_recv(const void * data, socklen_t len); /* @}*/ #ifdef __cplusplus diff --git a/openair2/UTIL/FIFO/pad_list.h b/openair2/UTIL/FIFO/pad_list.h index ecafed7cc4..2a9ef9893f 100644 --- a/openair2/UTIL/FIFO/pad_list.h +++ b/openair2/UTIL/FIFO/pad_list.h @@ -32,21 +32,6 @@ #include "types.h" //----------------------------------------------------------------------------- -# ifdef list_C -# define private_list(x) x -# define public_list(x) x -# else -# define private_list(x) -# define public_list(x) extern x -# endif -# ifdef LIST2_C -# define private_list2(x) x -# define public_list2(x) x -# else -# define private_list2(x) -# define public_list2(x) extern x -# endif -//----------------------------------------------------------------------------- typedef struct Job_List_s { Job_elt_t *head; @@ -67,36 +52,36 @@ typedef struct Packet_OTG_List_s { } Packet_OTG_List_t; //----------------------------------------------------------------------------- -public_list( void job_list_init (Job_List_t*);) -public_list( void job_list_free (Job_List_t* listP);) -public_list( Job_elt_t* job_list_get_head (Job_List_t*);) -public_list( Job_elt_t* job_list_remove_head (Job_List_t* );) -public_list( Job_elt_t* job_list_remove_element (Job_elt_t*, Job_List_t*);) -public_list( void job_list_add_head (Job_elt_t* , Job_List_t* );) -public_list( void job_list_add_tail_eurecom (Job_elt_t* , Job_List_t* );) -public_list( void job_list_add_list (Job_List_t* , Job_List_t* );) -public_list( void job_list_display (Job_List_t* );) +void job_list_init (Job_List_t*); +void job_list_free (Job_List_t* listP); +Job_elt_t* job_list_get_head (Job_List_t*); +Job_elt_t* job_list_remove_head (Job_List_t* ); +Job_elt_t* job_list_remove_element (Job_elt_t*, Job_List_t*); +void job_list_add_head (Job_elt_t* , Job_List_t* ); +void job_list_add_tail_eurecom (Job_elt_t* , Job_List_t* ); +void job_list_add_list (Job_List_t* , Job_List_t* ); +void job_list_display (Job_List_t* ); -public_list( void event_list_init (Event_List_t*);) -public_list( void event_list_free (Event_List_t* listP);) -public_list( Event_elt_t* event_list_get_head (Event_List_t*);) -public_list( Event_elt_t* event_list_remove_head (Event_List_t* );) -public_list( Event_elt_t* event_list_remove_element (Event_elt_t*, Event_List_t*);) -public_list( void event_list_add_head (Event_elt_t* , Event_List_t* );) -public_list( void event_list_add_element (Event_elt_t* , Event_elt_t* , Event_List_t* );) -public_list( void event_list_add_tail_eurecom (Event_elt_t* , Event_List_t* );) -public_list( void event_list_add_list (Event_List_t* , Event_List_t* );) -public_list( void event_list_display (Event_List_t* );) +void event_list_init (Event_List_t*); +void event_list_free (Event_List_t* listP); +Event_elt_t* event_list_get_head (Event_List_t*); +Event_elt_t* event_list_remove_head (Event_List_t* ); +Event_elt_t* event_list_remove_element (Event_elt_t*, Event_List_t*); +void event_list_add_head (Event_elt_t* , Event_List_t* ); +void event_list_add_element (Event_elt_t* , Event_elt_t* , Event_List_t* ); +void event_list_add_tail_eurecom (Event_elt_t* , Event_List_t* ); +void event_list_add_list (Event_List_t* , Event_List_t* ); +void event_list_display (Event_List_t* ); -public_list( void pkt_list_init (Packet_OTG_List_t*);) -public_list( void pkt_list_free (Packet_OTG_List_t* listP);) -public_list( Packet_otg_elt_t* pkt_list_get_head (Packet_OTG_List_t*);) -public_list( Packet_otg_elt_t* pkt_list_remove_head (Packet_OTG_List_t* );) -public_list( Packet_otg_elt_t* pkt_list_remove_element (Packet_otg_elt_t*, Packet_OTG_List_t*);) -public_list( void pkt_list_add_head (Packet_otg_elt_t* , Packet_OTG_List_t* );) -public_list( void pkt_list_add_element (Packet_otg_elt_t* , Packet_otg_elt_t* , Packet_OTG_List_t* );) -public_list( void pkt_list_add_tail_eurecom (Packet_otg_elt_t* , Packet_OTG_List_t* );) -public_list( void pkt_list_add_list (Packet_OTG_List_t* , Packet_OTG_List_t* );) -public_list( void pkt_list_display (Packet_OTG_List_t* );) +void pkt_list_init (Packet_OTG_List_t*); +void pkt_list_free (Packet_OTG_List_t* listP); +Packet_otg_elt_t* pkt_list_get_head (Packet_OTG_List_t*); +Packet_otg_elt_t* pkt_list_remove_head (Packet_OTG_List_t* ); +Packet_otg_elt_t* pkt_list_remove_element (Packet_otg_elt_t*, Packet_OTG_List_t*); +void pkt_list_add_head (Packet_otg_elt_t* , Packet_OTG_List_t* ); +void pkt_list_add_element (Packet_otg_elt_t* , Packet_otg_elt_t* , Packet_OTG_List_t* ); +void pkt_list_add_tail_eurecom (Packet_otg_elt_t* , Packet_OTG_List_t* ); +void pkt_list_add_list (Packet_OTG_List_t* , Packet_OTG_List_t* ); +void pkt_list_display (Packet_OTG_List_t* ); #endif diff --git a/openair2/UTIL/LISTS/list.h b/openair2/UTIL/LISTS/list.h index 864804c591..bf4d7e7580 100644 --- a/openair2/UTIL/LISTS/list.h +++ b/openair2/UTIL/LISTS/list.h @@ -39,66 +39,36 @@ #ifndef __LIST_H__ # define __LIST_H__ -# include "UTIL/MEM/mem_block.h" //----------------------------------------------------------------------------- -# ifdef LIST_C -# define private_list(x) x -# define public_list(x) x -# else -# define private_list(x) -# define public_list(x) extern x -# endif -# ifdef LIST2_C -# define private_list2(x) x -# define public_list2(x) x -# else -# define private_list2(x) -# define public_list2(x) extern x -# endif //----------------------------------------------------------------------------- -#include "platform_constants.h" #include #include #include -#define LIST_NAME_MAX_CHAR 32 +#include "UTIL/MEM/mem_block.h" - -typedef struct { - struct mem_block_t *head; - struct mem_block_t *tail; - int nb_elements; - char name[LIST_NAME_MAX_CHAR]; -} list2_t; //----------------------------------------------------------------------------- -typedef struct { - struct mem_block_t *head; - struct mem_block_t *tail; - int nb_elements; - char name[LIST_NAME_MAX_CHAR]; -} list_t; +void list_init (list_t* , char *); +void list_free (list_t* listP); +mem_block_t* list_get_head (list_t*); +mem_block_t* list_remove_head (list_t* ); +mem_block_t* list_remove_element (mem_block_t*, list_t*); +void list_add_head (mem_block_t* , list_t* ); +void list_add_tail_eurecom (mem_block_t* , list_t* ); +void list_add_list (list_t* , list_t* ); +void list_display (list_t* ); //----------------------------------------------------------------------------- -public_list( void list_init (list_t* , char *);) -public_list( void list_free (list_t* listP);) -public_list( mem_block_t* list_get_head (list_t*);) -public_list( mem_block_t* list_remove_head (list_t* );) -public_list( mem_block_t* list_remove_element (mem_block_t*, list_t*);) -public_list( void list_add_head (mem_block_t* , list_t* );) -public_list( void list_add_tail_eurecom (mem_block_t* , list_t* );) -public_list( void list_add_list (list_t* , list_t* );) -public_list( void list_display (list_t* );) -//----------------------------------------------------------------------------- -public_list2( void list2_init (list2_t*, char*);) -public_list2( void list2_free (list2_t* );) -public_list2( mem_block_t* list2_get_head (list2_t*);) -public_list2( mem_block_t* list2_get_tail (list2_t*);) -public_list2( mem_block_t* list2_remove_element (mem_block_t* , list2_t* );) -public_list2( mem_block_t* list2_remove_head (list2_t* );) -public_list2( mem_block_t* list2_remove_tail (list2_t* );) -public_list2( void list2_add_head (mem_block_t* , list2_t* );) -public_list2( void list2_add_tail (mem_block_t* , list2_t* );) -public_list2( void list2_add_list (list2_t* , list2_t* );) -public_list2( void list2_display (list2_t* );) +void list2_init (list2_t*, char*); +void list2_free (list2_t* ); +mem_block_t* list2_get_head (list2_t*); +mem_block_t* list2_get_tail (list2_t*); +mem_block_t* list2_remove_element (mem_block_t* , list2_t* ); +mem_block_t* list2_remove_head (list2_t* ); +mem_block_t* list2_remove_tail (list2_t* ); +void list2_add_head (mem_block_t* , list2_t* ); +void list2_add_tail (mem_block_t* , list2_t* ); +void list2_add_list (list2_t* , list2_t* ); +void list2_display (list2_t* ); //----------------------------------------------------------------------------- /* The following lists are used for sorting numbers */ #ifndef LINUX_LIST @@ -126,11 +96,11 @@ struct list { }; #endif //----------------------------------------------------------------------------- -public_list2( void push_front (struct list*, double); ) -public_list2( void initialize (struct list*); ) -public_list2( void del (struct list*); ) -public_list2( void totable (double*, struct list*);) -public_list2( int compare (const void * a, const void * b);) -public_list2( int32_t calculate_median(struct list *loc_list);) +void push_front (struct list*, double); +void initialize (struct list*); +void del (struct list*); +void totable (double*, struct list*); +int compare (const void * a, const void * b); +int32_t calculate_median(struct list *loc_list); #endif diff --git a/openair2/UTIL/LOG/log.c b/openair2/UTIL/LOG/log.c index ff6a5cd573..3690d0be9d 100644 --- a/openair2/UTIL/LOG/log.c +++ b/openair2/UTIL/LOG/log.c @@ -49,6 +49,26 @@ // main log variables +typedef struct { + char* buf_p; + int buf_index; + int enable_flag; +} log_mem_cnt_t; + +log_mem_cnt_t log_mem_d[2]; +int log_mem_flag=0; +int log_mem_multi=1; +volatile int log_mem_side=0; +pthread_mutex_t log_mem_lock; +pthread_cond_t log_mem_notify; +pthread_t log_mem_thread; +int log_mem_file_cnt=0; +volatile int log_mem_write_flag=0; +volatile int log_mem_write_side=0; + +char __log_mem_filename[1024]={0}; +char * log_mem_filename = &__log_mem_filename[0]; + mapping log_level_names[] = { {"emerg", LOG_EMERG}, {"alert", LOG_ALERT}, @@ -60,6 +80,7 @@ mapping log_level_names[] = { {"debug", LOG_DEBUG}, {"file", LOG_FILE}, {"trace", LOG_TRACE}, + {"matlab", LOG_MATLAB}, {NULL, -1} }; mapping log_verbosity_names[] = { @@ -93,25 +114,181 @@ static char *log_level_highlight_end[] = {LOG_RESET, LOG_RESET, LOG_RESET, LOG static log_instance_type_t log_instance_type; #endif +int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format) +{ + + FILE *fp=NULL; + int i; + + + //printf("Writing %d elements of type %d to %s\n",length,format,fname); + + + if (format == 10 || format ==11 || format == 12 || format == 13 || format == 14) { + fp = fopen(fname,"a+"); + } else if (format != 10 && format !=11 && format != 12 && format != 13 && format != 14) { + fp = fopen(fname,"w+"); + } + + + + if (fp== NULL) { + printf("[OPENAIR][FILE OUTPUT] Cannot open file %s\n",fname); + return(-1); + } + + if (format != 10 && format !=11 && format != 12 && format != 13 && format != 14) + fprintf(fp,"%s = [",vname); + + + switch (format) { + case 0: // real 16-bit + + for (i=0; i 0)) + fprintf(fp,"%d + j*(%d),",((short *)data)[i],((short *)data)[i+1]); + else if (i == 2*(length-1)) + fprintf(fp,"%d + j*(%d);",((short *)data)[i],((short *)data)[i+1]); + else if (i == 0) + fprintf(fp,"\n%d + j*(%d),",((short *)data)[i],((short *)data)[i+1]); + + + + } + + break; + + case 11 : //case eren 16 bit real for channel magnitudes: + for (i=0; i 0)) + fprintf(fp,"%d,",((short *)data)[i]); + else if (i == (length-1)) + fprintf(fp,"%d;",((short *)data)[i]); + else if (i == 0) + fprintf(fp,"\n%d,",((short *)data)[i]); + } + + printf("\n erennnnnnnnnnnnnnn: length :%d",length); + break; + + case 12 : // case eren for log2_maxh real unsigned 8 bit + fprintf(fp,"%d \n",((unsigned char *)&data)[0]); + break; + + } + + if (format != 10 && format !=11 && format !=12 && format != 13 && format != 15) { + fprintf(fp,"];\n"); + fclose(fp); + return(0); + } else if (format == 10 || format ==11 || format == 12 || format == 13 || format == 15) { + fclose(fp); + return(0); + } + + return 0; +} + /* get log parameters from configuration file */ void log_getconfig(log_t *g_log) { char *gloglevel = NULL; char *glogverbo = NULL; int level,verbosity; paramdef_t logparams_defaults[] = LOG_GLOBALPARAMS_DESC; - paramdef_t logparams_level[MAX_LOG_COMPONENTS]; - paramdef_t logparams_verbosity[MAX_LOG_COMPONENTS]; - paramdef_t logparams_logfile[MAX_LOG_COMPONENTS]; + paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS]; + paramdef_t logparams_verbosity[MAX_LOG_PREDEF_COMPONENTS]; + paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS]; int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX); if (ret <0) { fprintf(stderr,"[LOG] init aborted, configuration couldn't be performed"); return; } - memset(logparams_level, 0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS); - memset(logparams_verbosity,0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS); - memset(logparams_logfile, 0, sizeof(paramdef_t)*MAX_LOG_COMPONENTS); - for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { + + memset(logparams_level, 0, sizeof(paramdef_t)*MAX_LOG_PREDEF_COMPONENTS); + memset(logparams_verbosity,0, sizeof(paramdef_t)*MAX_LOG_PREDEF_COMPONENTS); + memset(logparams_logfile, 0, sizeof(paramdef_t)*MAX_LOG_PREDEF_COMPONENTS); + for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) { if(g_log->log_component[i].name == NULL) { g_log->log_component[i].name = malloc(16); sprintf((char *)g_log->log_component[i].name,"comp%i?",i); @@ -133,24 +310,63 @@ void log_getconfig(log_t *g_log) { /* */ logparams_level[i].defstrval = gloglevel; logparams_verbosity[i].defstrval = glogverbo; - + logparams_logfile[i].defstrval = malloc(strlen(g_log->log_component[i].name) + 16); + sprintf(logparams_logfile[i].defstrval,"/tmp/oai%s.log",g_log->log_component[i].name); + logparams_logfile[i].numelt = 0; + logparams_verbosity[i].numelt = 0; + logparams_level[i].numelt = 0; logparams_level[i].type = TYPE_STRING; logparams_verbosity[i].type = TYPE_STRING; logparams_logfile[i].type = TYPE_UINT; logparams_logfile[i].paramflags = logparams_logfile[i].paramflags|PARAMFLAG_BOOL; } - config_get( logparams_level, MAX_LOG_COMPONENTS,CONFIG_STRING_LOG_PREFIX); - config_get( logparams_verbosity,MAX_LOG_COMPONENTS,CONFIG_STRING_LOG_PREFIX); - config_get( logparams_logfile, MAX_LOG_COMPONENTS,CONFIG_STRING_LOG_PREFIX); - for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { + config_get( logparams_level, MAX_LOG_PREDEF_COMPONENTS,CONFIG_STRING_LOG_PREFIX); + config_get( logparams_verbosity,MAX_LOG_PREDEF_COMPONENTS,CONFIG_STRING_LOG_PREFIX); + config_get( logparams_logfile, MAX_LOG_PREDEF_COMPONENTS,CONFIG_STRING_LOG_PREFIX); + for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) { verbosity = map_str_to_int(log_verbosity_names,*(logparams_verbosity[i].strptr)); level = map_str_to_int(log_level_names, *(logparams_level[i].strptr)); set_comp_log(i, level,verbosity,1); - set_component_filelog(*(logparams_logfile[i].uptr)); + /* HOTFIX: the following statement crashes, it is thus commented + * TODO: proper fix + */ + /*set_component_filelog(*(logparams_logfile[i].uptr));*/ + if ( logparams_logfile[i].defstrval != NULL) { + free (logparams_logfile[i].defstrval); + } } } +int register_log_component(char *name, char *fext, int compidx) +{ +int computed_compidx=compidx; + + if (strlen(fext) > 3) { + fext[3]=0; /* limit log file extension to 3 chars */ + } + if (compidx < 0) { /* this is not a pre-defined component */ + for (int i = MAX_LOG_PREDEF_COMPONENTS; i< MAX_LOG_COMPONENTS; i++) { + if (g_log->log_component[i].name == NULL) { + computed_compidx=i; + break; + } + } + } + if (computed_compidx >= 0 && computed_compidx log_component[computed_compidx].name = strdup(name); + g_log->log_component[computed_compidx].level = LOG_ALERT; + g_log->log_component[computed_compidx].flag = LOG_MED; + g_log->log_component[computed_compidx].interval = 1; + g_log->log_component[computed_compidx].fd = 0; + g_log->log_component[computed_compidx].filelog = 0; + g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/.%s rounded to ^2 */ + sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext); + } else { + fprintf(stderr,"{LOG} %s %d Couldn't register componemt %s\n",__FILE__,__LINE__,name); + } +return computed_compidx; +} int logInit (void) { @@ -164,287 +380,54 @@ int logInit (void) #if ! defined(CN_BUILD) - g_log->log_component[PHY].name = "PHY"; - g_log->log_component[PHY].level = LOG_EMERG; - g_log->log_component[PHY].flag = LOG_MED; - g_log->log_component[PHY].interval = 1; - g_log->log_component[PHY].fd = 0; - g_log->log_component[PHY].filelog = 0; - g_log->log_component[PHY].filelog_name = "/tmp/phy.log"; - g_log->log_component[MAC].name = "MAC"; - g_log->log_component[MAC].level = LOG_EMERG; - g_log->log_component[MAC].flag = LOG_MED; - g_log->log_component[MAC].interval = 1; - g_log->log_component[MAC].fd = 0; - g_log->log_component[MAC].filelog = 0; - g_log->log_component[MAC].filelog_name = "/tmp/mac.log"; + register_log_component("PHY","log",PHY); + register_log_component("MAC","log",MAC); + register_log_component("OPT","log",OPT); + register_log_component("RLC","log",RLC); + register_log_component("PDCP","log",PDCP); + register_log_component("RRC","log",RRC); + register_log_component("SIM","log",SIM); + register_log_component("OMG","csv",OMG); + register_log_component("OTG","log",OTG); + register_log_component("OTG_LATENCY","dat",OTG_LATENCY); + register_log_component("OTG_LATENCY_BG","dat",OTG_LATENCY_BG); + register_log_component("OTG_GP","dat",OTG_GP); + register_log_component("OTG_GP_BG","dat",OTG_GP_BG); + register_log_component("OTG_JITTER","dat",OTG_JITTER); + register_log_component("OCG","",OCG); + register_log_component("PERF","",PERF); + register_log_component("OIP","",OIP); + register_log_component("CLI","",CLI); + register_log_component("MSC","log",MSC); + register_log_component("OCM","log",OCM); + register_log_component("HW","",HW); + register_log_component("OSA","",OSA); + register_log_component("eRAL","",RAL_ENB); + register_log_component("mRAL","",RAL_UE); + register_log_component("ENB_APP","log",ENB_APP); + register_log_component("FLEXRAN_AGENT","log",FLEXRAN_AGENT); + register_log_component("TMR","",TMR); + register_log_component("USIM","txt",USIM); - g_log->log_component[OPT].name = "OPT"; - g_log->log_component[OPT].level = LOG_EMERG; - g_log->log_component[OPT].flag = LOG_MED; - g_log->log_component[OPT].interval = 1; - g_log->log_component[OPT].fd = 0; - g_log->log_component[OPT].filelog = 0; - g_log->log_component[OPT].filelog_name = ""; - - g_log->log_component[RLC].name = "RLC"; - g_log->log_component[RLC].level = LOG_INFO; - g_log->log_component[RLC].flag = LOG_MED; - g_log->log_component[RLC].interval = 1; - g_log->log_component[RLC].fd = 0; - g_log->log_component[RLC].filelog = 0; - g_log->log_component[RLC].filelog_name = "/tmp/rlc.log"; - - g_log->log_component[PDCP].name = "PDCP"; - g_log->log_component[PDCP].level = LOG_INFO; - g_log->log_component[PDCP].flag = LOG_MED; - g_log->log_component[PDCP].interval = 1; - g_log->log_component[PDCP].fd = 0; - g_log->log_component[PDCP].filelog = 0; - g_log->log_component[PDCP].filelog_name = "/tmp/pdcp.log"; - - g_log->log_component[RRC].name = "RRC"; - g_log->log_component[RRC].level = LOG_TRACE; - g_log->log_component[RRC].flag = LOG_MED; - g_log->log_component[RRC].interval = 1; - g_log->log_component[RRC].fd = 0; - g_log->log_component[RRC].filelog = 0; - g_log->log_component[RRC].filelog_name = "/tmp/rrc.log"; - - g_log->log_component[EMU].name = "EMU"; - g_log->log_component[EMU].level = LOG_EMERG; - g_log->log_component[EMU].flag = LOG_MED; - g_log->log_component[EMU].interval = 1; - g_log->log_component[EMU].fd = 0; - g_log->log_component[EMU].filelog = 0; - g_log->log_component[EMU].filelog_name = ""; - - g_log->log_component[OMG].name = "OMG"; - g_log->log_component[OMG].level = LOG_EMERG; - g_log->log_component[OMG].flag = LOG_MED; - g_log->log_component[OMG].interval = 1; - g_log->log_component[OMG].fd = 0; - g_log->log_component[OMG].filelog = 0; - g_log->log_component[OMG].filelog_name = "/tmp/omg.csv"; - - g_log->log_component[OTG].name = "OTG"; - g_log->log_component[OTG].level = LOG_EMERG; - g_log->log_component[OTG].flag = LOG_MED; - g_log->log_component[OTG].interval = 1; - g_log->log_component[OTG].fd = 0; - g_log->log_component[OTG].filelog = 0; - g_log->log_component[OTG].filelog_name = "/tmp/otg.log"; - - g_log->log_component[OTG_LATENCY].name = "OTG_LATENCY"; - g_log->log_component[OTG_LATENCY].level = LOG_EMERG; - g_log->log_component[OTG_LATENCY].flag = LOG_MED; - g_log->log_component[OTG_LATENCY].interval = 1; - g_log->log_component[OTG_LATENCY].fd = 0; - g_log->log_component[OTG_LATENCY].filelog = 0; - g_log->log_component[OTG_LATENCY].filelog_name = "/tmp/otg_latency.dat"; - - g_log->log_component[OTG_LATENCY_BG].name = "OTG_LATENCY_BG"; - g_log->log_component[OTG_LATENCY_BG].level = LOG_EMERG; - g_log->log_component[OTG_LATENCY_BG].flag = LOG_MED; - g_log->log_component[OTG_LATENCY_BG].interval = 1; - g_log->log_component[OTG_LATENCY_BG].fd = 0; - g_log->log_component[OTG_LATENCY_BG].filelog = 0; - g_log->log_component[OTG_LATENCY_BG].filelog_name = "/tmp/otg_latency_bg.dat"; - - g_log->log_component[OTG_GP].name = "OTG_GP"; - g_log->log_component[OTG_GP].level = LOG_EMERG; - g_log->log_component[OTG_GP].flag = LOG_MED; - g_log->log_component[OTG_GP].interval = 1; - g_log->log_component[OTG_GP].fd = 0; - g_log->log_component[OTG_GP].filelog = 0; - g_log->log_component[OTG_GP].filelog_name = "/tmp/otg_goodput.dat"; - - g_log->log_component[OTG_GP_BG].name = "OTG_GP_BG"; - g_log->log_component[OTG_GP_BG].level = LOG_EMERG; - g_log->log_component[OTG_GP_BG].flag = LOG_MED; - g_log->log_component[OTG_GP_BG].interval = 1; - g_log->log_component[OTG_GP_BG].fd = 0; - g_log->log_component[OTG_GP_BG].filelog = 0; - g_log->log_component[OTG_GP_BG].filelog_name = "/tmp/otg_goodput_bg.dat"; - - g_log->log_component[OTG_JITTER].name = "OTG_JITTER"; - g_log->log_component[OTG_JITTER].level = LOG_EMERG; - g_log->log_component[OTG_JITTER].flag = LOG_MED; - g_log->log_component[OTG_JITTER].interval = 1; - g_log->log_component[OTG_JITTER].fd = 0; - g_log->log_component[OTG_JITTER].filelog = 0; - g_log->log_component[OTG_JITTER].filelog_name = "/tmp/otg_jitter.dat"; - - g_log->log_component[OCG].name = "OCG"; - g_log->log_component[OCG].level = LOG_EMERG; - g_log->log_component[OCG].flag = LOG_MED; - g_log->log_component[OCG].interval = 1; - g_log->log_component[OCG].fd = 0; - g_log->log_component[OCG].filelog = 0; - g_log->log_component[OCG].filelog_name = ""; - - g_log->log_component[PERF].name = "PERF"; - g_log->log_component[PERF].level = LOG_EMERG; - g_log->log_component[PERF].flag = LOG_MED; - g_log->log_component[PERF].interval = 1; - g_log->log_component[PERF].fd = 0; - g_log->log_component[PERF].filelog = 0; - g_log->log_component[PERF].filelog_name = ""; - - g_log->log_component[OIP].name = "OIP"; - g_log->log_component[OIP].level = LOG_EMERG; - g_log->log_component[OIP].flag = LOG_MED; - g_log->log_component[OIP].interval = 1; - g_log->log_component[OIP].fd = 0; - g_log->log_component[OIP].filelog = 0; - g_log->log_component[OIP].filelog_name = ""; - - g_log->log_component[CLI].name = "CLI"; - g_log->log_component[CLI].level = LOG_EMERG; - g_log->log_component[CLI].flag = LOG_MED; - g_log->log_component[CLI].interval = 1; - g_log->log_component[CLI].fd = 0; - g_log->log_component[CLI].filelog = 0; - g_log->log_component[CLI].filelog_name = ""; - - g_log->log_component[MSC].name = "MSC"; - g_log->log_component[MSC].level = LOG_EMERG; - g_log->log_component[MSC].flag = LOG_MED; - g_log->log_component[MSC].interval = 1; - g_log->log_component[MSC].fd = 0; - g_log->log_component[MSC].filelog = 0; - g_log->log_component[MSC].filelog_name = "/tmp/msc.log"; - - g_log->log_component[OCM].name = "OCM"; - g_log->log_component[OCM].level = LOG_EMERG; - g_log->log_component[OCM].flag = LOG_MED; - g_log->log_component[OCM].interval = 1; - g_log->log_component[OCM].fd = 0; - g_log->log_component[OCM].filelog = 0; - g_log->log_component[OCM].filelog_name = "/tmp/ocm.log"; - - g_log->log_component[HW].name = "HW"; - g_log->log_component[HW].level = LOG_EMERG; - g_log->log_component[HW].flag = LOG_MED; - g_log->log_component[HW].interval = 1; - g_log->log_component[HW].fd = 0; - g_log->log_component[HW].filelog = 0; - g_log->log_component[HW].filelog_name = ""; - - g_log->log_component[OSA].name = "OSA"; - g_log->log_component[OSA].level = LOG_EMERG; - g_log->log_component[OSA].flag = LOG_MED; - g_log->log_component[OSA].interval = 1; - g_log->log_component[OSA].fd = 0; - g_log->log_component[OSA].filelog = 0; - g_log->log_component[OSA].filelog_name = ""; - - g_log->log_component[RAL_ENB].name = "eRAL"; - g_log->log_component[RAL_ENB].level = LOG_EMERG; - g_log->log_component[RAL_ENB].flag = LOG_MED; - g_log->log_component[RAL_ENB].interval = 1; - g_log->log_component[RAL_ENB].fd = 0; - g_log->log_component[RAL_ENB].filelog = 0; - g_log->log_component[RAL_ENB].filelog_name = ""; - - g_log->log_component[RAL_UE].name = "mRAL"; - g_log->log_component[RAL_UE].level = LOG_EMERG; - g_log->log_component[RAL_UE].flag = LOG_MED; - g_log->log_component[RAL_UE].interval = 1; - g_log->log_component[RAL_UE].fd = 0; - g_log->log_component[RAL_UE].filelog = 0; - g_log->log_component[RAL_UE].filelog_name = ""; - - g_log->log_component[ENB_APP].name = "ENB_APP"; - g_log->log_component[ENB_APP].level = LOG_EMERG; - g_log->log_component[ENB_APP].flag = LOG_MED; - g_log->log_component[ENB_APP].interval = 1; - g_log->log_component[ENB_APP].fd = 0; - g_log->log_component[ENB_APP].filelog = 0; - g_log->log_component[ENB_APP].filelog_name = ""; - - g_log->log_component[FLEXRAN_AGENT].name = "FLEXRAN_AGENT"; - g_log->log_component[FLEXRAN_AGENT].level = LOG_DEBUG; - g_log->log_component[FLEXRAN_AGENT].flag = LOG_MED; - g_log->log_component[FLEXRAN_AGENT].interval = 1; - g_log->log_component[FLEXRAN_AGENT].fd = 0; - g_log->log_component[FLEXRAN_AGENT].filelog = 0; - g_log->log_component[FLEXRAN_AGENT].filelog_name = ""; - - g_log->log_component[TMR].name = "TMR"; - g_log->log_component[TMR].level = LOG_EMERG; - g_log->log_component[TMR].flag = LOG_MED; - g_log->log_component[TMR].interval = 1; - g_log->log_component[TMR].fd = 0; - g_log->log_component[TMR].filelog = 0; - g_log->log_component[TMR].filelog_name = ""; - - g_log->log_component[USIM].name = "USIM"; - g_log->log_component[USIM].level = LOG_DEBUG; - g_log->log_component[USIM].flag = LOG_NONE; - g_log->log_component[USIM].interval = 1; - g_log->log_component[USIM].fd = 0; - g_log->log_component[USIM].filelog = 0; - g_log->log_component[USIM].filelog_name = "/tmp/usim.txt"; /* following log component are used for the localization*/ - g_log->log_component[LOCALIZE].name = "LOCALIZE"; - g_log->log_component[LOCALIZE].level = LOG_EMERG; - g_log->log_component[LOCALIZE].flag = LOG_MED; - g_log->log_component[LOCALIZE].interval = 1; - g_log->log_component[LOCALIZE].fd = 0; - g_log->log_component[LOCALIZE].filelog = 0; - g_log->log_component[LOCALIZE].filelog_name = "/tmp/localize.log"; + register_log_component("LOCALIZE","log",LOCALIZE); #endif // ! defined(CN_BUILD) - - g_log->log_component[NAS].name = "NAS"; - g_log->log_component[NAS].level = LOG_TRACE; - g_log->log_component[NAS].flag = LOG_MED; - g_log->log_component[NAS].interval = 1; - g_log->log_component[NAS].fd = 0; - g_log->log_component[NAS].filelog = 0; - g_log->log_component[NAS].filelog_name = "/tmp/nas.log"; - - g_log->log_component[UDP_].name = "UDP"; - g_log->log_component[UDP_].level = LOG_EMERG; + register_log_component("NAS","log",NAS); + register_log_component("UDP","",UDP_); g_log->log_component[UDP_].flag = LOG_FULL; - g_log->log_component[UDP_].interval = 1; - g_log->log_component[UDP_].fd = 0; - g_log->log_component[UDP_].filelog = 0; - g_log->log_component[UDP_].filelog_name = ""; - g_log->log_component[GTPU].name = "GTPV1U"; - g_log->log_component[GTPU].level = LOG_EMERG; + register_log_component("GTPV1U","",GTPU); g_log->log_component[GTPU].flag = LOG_FULL; - g_log->log_component[GTPU].interval = 1; - g_log->log_component[GTPU].fd = 0; - g_log->log_component[GTPU].filelog = 0; - g_log->log_component[GTPU].filelog_name = ""; - g_log->log_component[S1AP].name = "S1AP"; - g_log->log_component[S1AP].level = LOG_EMERG; + register_log_component("S1AP","",S1AP); g_log->log_component[S1AP].flag = LOG_FULL; - g_log->log_component[S1AP].interval = 1; - g_log->log_component[S1AP].fd = 0; - g_log->log_component[S1AP].filelog = 0; - g_log->log_component[S1AP].filelog_name = ""; - g_log->log_component[SCTP].name = "SCTP"; - g_log->log_component[SCTP].level = LOG_EMERG; - g_log->log_component[SCTP].flag = LOG_MED; - g_log->log_component[SCTP].interval = 1; - g_log->log_component[SCTP].fd = 0; - g_log->log_component[SCTP].filelog = 0; - g_log->log_component[SCTP].filelog_name = ""; + register_log_component("SCTP","",SCTP); + register_log_component("RRH","",RRH); - g_log->log_component[RRH].name = "RRH"; - g_log->log_component[RRH].level = LOG_EMERG; - g_log->log_component[RRH].flag = LOG_MED; - g_log->log_component[RRH].interval = 1; - g_log->log_component[RRH].fd = 0; - g_log->log_component[RRH].filelog = 0; - g_log->log_component[RRH].filelog_name = ""; + g_log->level2string[LOG_EMERG] = "G"; //EMERG g_log->level2string[LOG_ALERT] = "A"; // ALERT @@ -456,6 +439,7 @@ int logInit (void) g_log->level2string[LOG_DEBUG] = "D"; // DEBUG g_log->level2string[LOG_FILE] = "F"; // file g_log->level2string[LOG_TRACE] = "T"; // TRACE + g_log->level2string[LOG_MATLAB] = "M"; // MATLAB g_log->onlinelog = 1; //online log file g_log->syslog = 0; @@ -474,7 +458,7 @@ int logInit (void) if (g_log->syslog) { #if ! defined(CN_BUILD) - openlog(g_log->log_component[EMU].name, LOG_PID, g_log->config.facility); + openlog(g_log->log_component[SIM].name, LOG_PID, g_log->config.facility); #endif // ! defined(CN_BUILD) } log_getconfig(g_log); @@ -489,13 +473,96 @@ int logInit (void) O_WRONLY | O_CREAT | O_APPEND, 0666); } } - + // set all unused component items to 0, they are for non predefined components + for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { + memset(&(g_log->log_component[i]),0,sizeof(log_component_t)); + } printf("log init done\n"); return 0; } -void nfapi_log(char *file, char *func, int line, int comp, int level, const char* format, va_list args) + +extern int oai_exit; +void log_mem_write(void) +{ + int fp; + char f_name[1024]; + struct timespec slp_tm; + slp_tm.tv_sec = 0; + slp_tm.tv_nsec = 10000; + + pthread_setname_np( pthread_self(), "log_mem_write"); + + while (!oai_exit) { + pthread_mutex_lock(&log_mem_lock); + log_mem_write_flag=0; + pthread_cond_wait(&log_mem_notify, &log_mem_lock); + log_mem_write_flag=1; + pthread_mutex_unlock(&log_mem_lock); + // write! + if(log_mem_d[log_mem_write_side].enable_flag==0){ + if(log_mem_file_cnt>1){ + log_mem_file_cnt=1; + printf("log over write!!!\n"); + } + snprintf(f_name,1024, "%s_%d.log",log_mem_filename,log_mem_file_cnt); + fp=open(f_name, O_WRONLY | O_CREAT, 0666); + int ret = write(fp, log_mem_d[log_mem_write_side].buf_p, log_mem_d[log_mem_write_side].buf_index); + if ( ret < 0) { + fprintf(stderr,"{LOG} %s %d Couldn't write in %s \n",__FILE__,__LINE__,f_name); + exit(EXIT_FAILURE); + } + close(fp); + log_mem_file_cnt++; + log_mem_d[log_mem_write_side].buf_index=0; + log_mem_d[log_mem_write_side].enable_flag=1; + }else{ + printf("If you'd like to write log, you should set enable flag to 0!!!\n"); + nanosleep(&slp_tm,NULL); + } + } +} + +int logInit_log_mem (void) +{ + if(log_mem_flag==1){ + if(log_mem_multi==1){ + printf("log-mem multi!!!\n"); + log_mem_d[0].buf_p = malloc(LOG_MEM_SIZE); + log_mem_d[0].buf_index=0; + log_mem_d[0].enable_flag=1; + log_mem_d[1].buf_p = malloc(LOG_MEM_SIZE); + log_mem_d[1].buf_index=0; + log_mem_d[1].enable_flag=1; + log_mem_side=0; + if ((pthread_mutex_init (&log_mem_lock, NULL) != 0) + || (pthread_cond_init (&log_mem_notify, NULL) != 0)) { + log_mem_d[1].enable_flag=0; + return -1; + } + pthread_create(&log_mem_thread, NULL, (void *(*)(void *))log_mem_write, (void*)NULL); + }else{ + printf("log-mem single!!!\n"); + log_mem_d[0].buf_p = malloc(LOG_MEM_SIZE); + log_mem_d[0].buf_index=0; + log_mem_d[0].enable_flag=1; + log_mem_d[1].enable_flag=0; + log_mem_side=0; + } + }else{ + log_mem_d[0].buf_p=NULL; + log_mem_d[1].buf_p=NULL; + log_mem_d[0].enable_flag=0; + log_mem_d[1].enable_flag=0; + } + + printf("log init done\n"); + + return 0; +} + +void nfapi_log(const char *file, const char *func, int line, int comp, int level, const char* format,va_list args) { //logRecord_mt(file,func,line, pthread_self(), comp, level, format, ##args) int len = 0; @@ -513,6 +580,7 @@ void nfapi_log(char *file, char *func, int line, int comp, int level, const char (void)log_start; (void)log_end; + c = &g_log->log_component[comp]; // do not apply filtering for LOG_F @@ -604,22 +672,45 @@ void nfapi_log(char *file, char *func, int line, int comp, int level, const char va_end(args); // OAI printf compatibility - if ((g_log->onlinelog == 1) && (level != LOG_FILE)) -#ifdef RTAI - if (len > MAX_LOG_TOTAL) { - rt_printk ("[OPENAIR] FIFO_PRINTF WROTE OUTSIDE ITS MEMORY BOUNDARY : ERRORS WILL OCCUR\n"); + if ((g_log->onlinelog == 1) && (level != LOG_FILE)) { + if(log_mem_flag==1){ + if(log_mem_d[log_mem_side].enable_flag==1){ + int temp_index; + temp_index=log_mem_d[log_mem_side].buf_index; + if(temp_index+len+1 < LOG_MEM_SIZE){ + log_mem_d[log_mem_side].buf_index+=len; + memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); + }else{ + log_mem_d[log_mem_side].enable_flag=0; + if(log_mem_d[1-log_mem_side].enable_flag==1){ + temp_index=log_mem_d[1-log_mem_side].buf_index; + if(temp_index+len+1 < LOG_MEM_SIZE){ + log_mem_d[1-log_mem_side].buf_index+=len; + log_mem_side=1-log_mem_side; + memcpy(&log_mem_d[log_mem_side].buf_p[temp_index],log_buffer,len); + /* write down !*/ + if (pthread_mutex_lock(&log_mem_lock) != 0) { + return; + } + if(log_mem_write_flag==0){ + log_mem_write_side=1-log_mem_side; + if(pthread_cond_signal(&log_mem_notify) != 0) { + } + } + if(pthread_mutex_unlock(&log_mem_lock) != 0) { + return; + } + }else{ + log_mem_d[1-log_mem_side].enable_flag=0; + } + } + } + } + }else{ + fwrite(log_buffer, len, 1, stdout); } - - if (len > 0) { - rtf_put (FIFO_PRINTF_NO, log_buffer, len); } -#else - fwrite(log_buffer, len, 1, stdout); -#endif - -#ifndef RTAI - if (g_log->syslog) { syslog(g_log->level, "%s", log_buffer); } @@ -636,14 +727,6 @@ void nfapi_log(char *file, char *func, int line, int comp, int level, const char } } -#else - - // online print messges - if ((g_log->log_component[comp].filelog) && (level == LOG_FILE)) { - printf(log_buffer); - } - -#endif #if defined(ENABLE_ITTI) @@ -785,46 +868,13 @@ void nfapi_log(char *file, char *func, int line, int comp, int level, const char } #endif -#if 0 - LOG_params log_params; - int len; +} - len = vsnprintf(log_params.l_buff_info, MAX_LOG_INFO-1, format, args); - - //2 first parameters must be passed as 'const' to the thread function - log_params.file = strdup(file); - log_params.func = strdup(func); - log_params.line = line; - log_params.comp = PHY;//comp; - log_params.level = 6; // INFO - level; - log_params.format = format; - log_params.len = len; - - if (pthread_mutex_lock(&log_lock) != 0) { - return; - } - - log_list_tail++; - log_list[log_list_tail - 1] = log_params; - - if (log_list_tail >= 1000) { - log_list_tail = 0; - } - - if (log_list_nb_elements < 1000) { - log_list_nb_elements++; - } - - if(pthread_cond_signal(&log_notify) != 0) { - pthread_mutex_unlock(&log_lock); - return; - } - - if(pthread_mutex_unlock(&log_lock) != 0) { - return; - } - -#endif +void logRecord_mt(const char *file, const char *func, int line, int comp, int level, const char* format, ... ) +{ + va_list args; + va_start(args, format); + nfapi_log(file,func,line,comp,level, format,args); } //log record: add to a list @@ -1026,542 +1076,14 @@ void *log_thread_function(void *list) } #endif -#if 0 -/* This function does not work. When multiple threads call it at the same time - * for the same component, both threads end up using the same buffer. - * The output is the completely messed up/wrong. - * Kept in case the fix below is not correct or acceptable. - */ -//log record, format, and print: executed in the main thread (mt) -void logRecord_mt(const char *file, const char *func, int line, int comp, - int level, const char *format, ...) -{ - int len = 0; - va_list args; - log_component_t *c; - char *log_start; - char *log_end; - /* for no gcc warnings */ - (void)log_start; - (void)log_end; - - c = &g_log->log_component[comp]; - - // do not apply filtering for LOG_F - // only log messages which are enabled and are below the global log level and component's level threshold - if ((level != LOG_FILE) && ((level > c->level) || (level > g_log->level))) { - /* if ((level != LOG_FILE) && - ((level > c->level) || - (level > g_log->level) || - ( c->level > g_log->level))) { - */ - return; - } - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_LOG_RECORD, - VCD_FUNCTION_IN); - - va_start(args, format); - - // adjust syslog level for TRACE messages - if (g_log->syslog) { - if (g_log->level > LOG_DEBUG) { - g_log->level = LOG_DEBUG; - } - } - - // make sure that for log trace the extra info is only printed once, reset when the level changes - if ((level == LOG_FILE) || (c->flag == LOG_NONE) || (level == LOG_TRACE)) { - log_start = c->log_buffer; - len = vsnprintf(c->log_buffer, MAX_LOG_TOTAL-1, format, args); - log_end = c->log_buffer + len; - } else { - if ( (g_log->flag & FLAG_COLOR) || (c->flag & FLAG_COLOR) ) { - len += snprintf(&c->log_buffer[len], MAX_LOG_TOTAL - len, "%s", - log_level_highlight_start[level]); - } - - log_start = c->log_buffer + len; - - if ( (g_log->flag & FLAG_COMP) || (c->flag & FLAG_COMP) ) { - len += snprintf(&c->log_buffer[len], MAX_LOG_TOTAL - len, "[%s]", - g_log->log_component[comp].name); - } - - if ( (g_log->flag & FLAG_LEVEL) || (c->flag & FLAG_LEVEL) ) { - len += snprintf(&c->log_buffer[len], MAX_LOG_TOTAL - len, "[%s]", - g_log->level2string[level]); - } - - if ( (g_log->flag & FLAG_FUNCT) || (c->flag & FLAG_FUNCT) ) { - len += snprintf(&c->log_buffer[len], MAX_LOG_TOTAL - len, "[%s] ", - func); - } - - if ( (g_log->flag & FLAG_FILE_LINE) || (c->flag & FLAG_FILE_LINE) ) { - len += snprintf(&c->log_buffer[len], MAX_LOG_TOTAL - len, "[%s:%d]", - file, line); - } - - len += vsnprintf(&c->log_buffer[len], MAX_LOG_TOTAL - len, format, args); - log_end = c->log_buffer + len; - - if ( (g_log->flag & FLAG_COLOR) || (c->flag & FLAG_COLOR) ) { - len += snprintf(&c->log_buffer[len], MAX_LOG_TOTAL - len, "%s", - log_level_highlight_end[level]); - } - } - - va_end(args); - - // OAI printf compatibility - if ((g_log->onlinelog == 1) && (level != LOG_FILE)) - fwrite(c->log_buffer, len, 1, stdout); - - if (g_log->syslog) { - syslog(g_log->level, "%s", c->log_buffer); - } - - if (g_log->filelog) { - if (write(gfd, c->log_buffer, len) < len) { - // TODO assert ? - } - } - - if ((g_log->log_component[comp].filelog) && (level == LOG_FILE)) { - if (write(g_log->log_component[comp].fd, c->log_buffer, len) < len) { - // TODO assert ? - } - } - -#if defined(ENABLE_ITTI) - - if (level <= LOG_DEBUG) { - task_id_t origin_task_id = TASK_UNKNOWN; - MessagesIds messages_id; - MessageDef *message_p; - size_t message_string_size; - char *message_msg_p; - - message_string_size = log_end - log_start; - -#if !defined(DISABLE_ITTI_DETECT_SUB_TASK_ID) - - /* Try to identify sub task ID from log information (comp, log_instance_type) */ - switch (comp) { - case PHY: - switch (log_instance_type) { - case LOG_INSTANCE_ENB: - origin_task_id = TASK_PHY_ENB; - break; - - case LOG_INSTANCE_UE: - origin_task_id = TASK_PHY_UE; - break; - - default: - break; - } - - break; - - case MAC: - switch (log_instance_type) { - case LOG_INSTANCE_ENB: - origin_task_id = TASK_MAC_ENB; - break; - - case LOG_INSTANCE_UE: - origin_task_id = TASK_MAC_UE; - - default: - break; - } - - break; - - case RLC: - switch (log_instance_type) { - case LOG_INSTANCE_ENB: - origin_task_id = TASK_RLC_ENB; - break; - - case LOG_INSTANCE_UE: - origin_task_id = TASK_RLC_UE; - - default: - break; - } - - break; - - case PDCP: - switch (log_instance_type) { - case LOG_INSTANCE_ENB: - origin_task_id = TASK_PDCP_ENB; - break; - - case LOG_INSTANCE_UE: - origin_task_id = TASK_PDCP_UE; - - default: - break; - } - - break; - - default: - break; - } - -#endif - - switch (level) { - case LOG_EMERG: - case LOG_ALERT: - case LOG_CRIT: - case LOG_ERR: - messages_id = ERROR_LOG; - break; - - case LOG_WARNING: - messages_id = WARNING_LOG; - break; - - case LOG_NOTICE: - messages_id = NOTICE_LOG; - break; - - case LOG_INFO: - messages_id = INFO_LOG; - break; - - default: - messages_id = DEBUG_LOG; - break; - } - - message_p = itti_alloc_new_message_sized(origin_task_id, messages_id, message_string_size); - - switch (level) { - case LOG_EMERG: - case LOG_ALERT: - case LOG_CRIT: - case LOG_ERR: - message_msg_p = (char *) &message_p->ittiMsg.error_log; - break; - - case LOG_WARNING: - message_msg_p = (char *) &message_p->ittiMsg.warning_log; - break; - - case LOG_NOTICE: - message_msg_p = (char *) &message_p->ittiMsg.notice_log; - break; - - case LOG_INFO: - message_msg_p = (char *) &message_p->ittiMsg.info_log; - break; - - default: - message_msg_p = (char *) &message_p->ittiMsg.debug_log; - break; - } - - memcpy(message_msg_p, log_start, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - } - -#endif - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_LOG_RECORD, - VCD_FUNCTION_OUT); -} -#endif /* #if 0 */ - -//log record, format, and print: executed in the main thread (mt) -void logRecord_mt(const char *file, const char *func, int line, int comp, - int level, const char *format, ...) -{ - int len = 0; - va_list args; - log_component_t *c; - char *log_start; - char *log_end; - /* The main difference with the version above is the use of this local log_buffer. - * The other difference is the return value of snprintf which was not used - * correctly. It was not a big problem because in practice MAX_LOG_TOTAL is - * big enough so that the buffer is never full. - */ - char log_buffer[MAX_LOG_TOTAL]; - - /* for no gcc warnings */ - (void)log_start; - (void)log_end; - - c = &g_log->log_component[comp]; - - // do not apply filtering for LOG_F - // only log messages which are enabled and are below the global log level and component's level threshold - if ((level != LOG_FILE) && ((level > c->level) || (level > g_log->level))) { - /* if ((level != LOG_FILE) && - ((level > c->level) || - (level > g_log->level) || - ( c->level > g_log->level))) { - */ - return; - } - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_LOG_RECORD, - VCD_FUNCTION_IN); - - va_start(args, format); - - // adjust syslog level for TRACE messages - if (g_log->syslog) { - if (g_log->level > LOG_DEBUG) { - g_log->level = LOG_DEBUG; - } - } - - // make sure that for log trace the extra info is only printed once, reset when the level changes - if ((level == LOG_FILE) || (c->flag == LOG_NONE) || (level == LOG_TRACE)) { - log_start = log_buffer; - len = vsnprintf(log_buffer, MAX_LOG_TOTAL, format, args); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - log_end = log_buffer + len; - } else { - if ( (g_log->flag & FLAG_COLOR) || (c->flag & FLAG_COLOR) ) { - len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "%s", - log_level_highlight_start[level]); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - } - - log_start = log_buffer + len; - - if ( (g_log->flag & FLAG_COMP) || (c->flag & FLAG_COMP) ) { - len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "[%s]", - g_log->log_component[comp].name); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - } - - if ( (g_log->flag & FLAG_LEVEL) || (c->flag & FLAG_LEVEL) ) { - len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "[%s]", - g_log->level2string[level]); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - } - - if ( (g_log->flag & FLAG_THREAD) || (c->flag & FLAG_THREAD) ) { -# define THREAD_NAME_LEN 128 - char threadname[THREAD_NAME_LEN]; - if (pthread_getname_np(pthread_self(), threadname, THREAD_NAME_LEN) != 0) - { - perror("pthread_getname_np : "); - } else { - len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "[%s]", threadname); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - } -# undef THREAD_NAME_LEN - } - - if ( (g_log->flag & FLAG_FUNCT) || (c->flag & FLAG_FUNCT) ) { - len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "[%s] ", - func); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - } - - if ( (g_log->flag & FLAG_FILE_LINE) || (c->flag & FLAG_FILE_LINE) ) { - len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "[%s:%d]", - file, line); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - } - - len += vsnprintf(&log_buffer[len], MAX_LOG_TOTAL - len, format, args); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - log_end = log_buffer + len; - - if ( (g_log->flag & FLAG_COLOR) || (c->flag & FLAG_COLOR) ) { - len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "%s", - log_level_highlight_end[level]); - if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL; - } - } - - va_end(args); - - // OAI printf compatibility - if ((g_log->onlinelog == 1) && (level != LOG_FILE)) - fwrite(log_buffer, len, 1, stdout); - - if (g_log->syslog) { - syslog(g_log->level, "%s", log_buffer); - } - - if (g_log->filelog) { - if (write(gfd, log_buffer, len) < len) { - // TODO assert ? - } - } - - if ((g_log->log_component[comp].filelog) && (level == LOG_FILE)) { - if (write(g_log->log_component[comp].fd, log_buffer, len) < len) { - // TODO assert ? - } - } - -#if defined(ENABLE_ITTI) - - if (level <= LOG_DEBUG) { - task_id_t origin_task_id = TASK_UNKNOWN; - MessagesIds messages_id; - MessageDef *message_p; - size_t message_string_size; - char *message_msg_p; - - message_string_size = log_end - log_start; - -#if !defined(DISABLE_ITTI_DETECT_SUB_TASK_ID) - - /* Try to identify sub task ID from log information (comp, log_instance_type) */ - switch (comp) { - case PHY: - switch (log_instance_type) { - case LOG_INSTANCE_ENB: - origin_task_id = TASK_PHY_ENB; - break; - - case LOG_INSTANCE_UE: - origin_task_id = TASK_PHY_UE; - break; - - default: - break; - } - - break; - - case MAC: - switch (log_instance_type) { - case LOG_INSTANCE_ENB: - origin_task_id = TASK_MAC_ENB; - break; - - case LOG_INSTANCE_UE: - origin_task_id = TASK_MAC_UE; - - default: - break; - } - - break; - - case RLC: - switch (log_instance_type) { - case LOG_INSTANCE_ENB: - origin_task_id = TASK_RLC_ENB; - break; - - case LOG_INSTANCE_UE: - origin_task_id = TASK_RLC_UE; - - default: - break; - } - - break; - - case PDCP: - switch (log_instance_type) { - case LOG_INSTANCE_ENB: - origin_task_id = TASK_PDCP_ENB; - break; - - case LOG_INSTANCE_UE: - origin_task_id = TASK_PDCP_UE; - - default: - break; - } - - break; - - default: - break; - } - -#endif - - switch (level) { - case LOG_EMERG: - case LOG_ALERT: - case LOG_CRIT: - case LOG_ERR: - messages_id = ERROR_LOG; - break; - - case LOG_WARNING: - messages_id = WARNING_LOG; - break; - - case LOG_NOTICE: - messages_id = NOTICE_LOG; - break; - - case LOG_INFO: - messages_id = INFO_LOG; - break; - - default: - messages_id = DEBUG_LOG; - break; - } - - message_p = itti_alloc_new_message_sized(origin_task_id, messages_id, message_string_size); - - switch (level) { - case LOG_EMERG: - case LOG_ALERT: - case LOG_CRIT: - case LOG_ERR: - message_msg_p = (char *) &message_p->ittiMsg.error_log; - break; - - case LOG_WARNING: - message_msg_p = (char *) &message_p->ittiMsg.warning_log; - break; - - case LOG_NOTICE: - message_msg_p = (char *) &message_p->ittiMsg.notice_log; - break; - - case LOG_INFO: - message_msg_p = (char *) &message_p->ittiMsg.info_log; - break; - - default: - message_msg_p = (char *) &message_p->ittiMsg.debug_log; - break; - } - - memcpy(message_msg_p, log_start, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - } - -#endif - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_LOG_RECORD, - VCD_FUNCTION_OUT); -} int set_log(int component, int level, int interval) { /* Checking parameters */ DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS), component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS); - DevCheck((level <= LOG_TRACE) && (level >= LOG_EMERG), level, LOG_TRACE, + DevCheck((level < NUM_LOG_LEVEL) && (level >= LOG_EMERG), level, NUM_LOG_LEVEL, LOG_EMERG); DevCheck((interval >= 0) && (interval <= 0xFF), interval, 0, 0xFF); @@ -1595,19 +1117,11 @@ int set_comp_log(int component, int level, int verbosity, int interval) /* Checking parameters */ DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS), component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS); - DevCheck((level <= LOG_TRACE) && (level >= LOG_EMERG), level, LOG_TRACE, + DevCheck((level < NUM_LOG_LEVEL) && (level >= LOG_EMERG), level, NUM_LOG_LEVEL, LOG_EMERG); DevCheck((interval >= 0) && (interval <= 0xFF), interval, 0, 0xFF); -#if 0 - if ((verbosity == LOG_NONE) || (verbosity == LOG_LOW) || - (verbosity == LOG_MED) || (verbosity == LOG_FULL) || - (verbosity == LOG_HIGH)) { - g_log->log_component[component].flag = verbosity; - } -#else g_log->log_component[component].flag = verbosity; -#endif g_log->log_component[component].level = level; g_log->log_component[component].interval = interval; @@ -1720,7 +1234,51 @@ void log_set_instance_type (log_instance_type_t instance) log_instance_type = instance; } #endif + +void output_log_mem(void){ + int fp; + char f_name[1024]; + if(log_mem_flag==1){ + log_mem_d[0].enable_flag=0; + log_mem_d[1].enable_flag=0; + usleep(10); // wait for log writing + while(log_mem_write_flag==1){ + usleep(100); + } + if(log_mem_multi==1){ + snprintf(f_name,1024, "%s_%d.log",log_mem_filename,log_mem_file_cnt); + fp=open(f_name, O_WRONLY | O_CREAT, 0666); + int ret = write(fp, log_mem_d[0].buf_p, log_mem_d[0].buf_index); + if ( ret < 0) { + fprintf(stderr,"{LOG} %s %d Couldn't write in %s \n",__FILE__,__LINE__,f_name); + exit(EXIT_FAILURE); + } + close(fp); + free(log_mem_d[0].buf_p); + + snprintf(f_name,1024, "%s_%d.log",log_mem_filename,log_mem_file_cnt); + fp=open(f_name, O_WRONLY | O_CREAT, 0666); + ret = write(fp, log_mem_d[1].buf_p, log_mem_d[1].buf_index); + if ( ret < 0) { + fprintf(stderr,"{LOG} %s %d Couldn't write in %s \n",__FILE__,__LINE__,f_name); + exit(EXIT_FAILURE); + } + close(fp); + free(log_mem_d[1].buf_p); + }else{ + fp=open(log_mem_filename, O_WRONLY | O_CREAT, 0666); + int ret = write(fp, log_mem_d[0].buf_p, log_mem_d[0].buf_index); + if ( ret < 0) { + fprintf(stderr,"{LOG} %s %d Couldn't write in %s \n",__FILE__,__LINE__,log_mem_filename); + exit(EXIT_FAILURE); + } + close(fp); + free(log_mem_d[0].buf_p); + } + } +} + #ifdef LOG_TEST int main(int argc, char *argv[]) @@ -1737,16 +1295,16 @@ int main(int argc, char *argv[]) int test_log(void) { LOG_ENTER(MAC); // because the default level is DEBUG - LOG_I(EMU, "1 Starting OAI logs version %s Build date: %s on %s\n", + LOG_I(SIM, "1 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_D(MAC, "1 debug MAC \n"); LOG_N(MAC, "1 notice MAC \n"); LOG_W(MAC, "1 warning MAC \n"); - set_comp_log(EMU, LOG_INFO, FLAG_ONLINE); + set_comp_log(SIM, LOG_INFO, FLAG_ONLINE); set_comp_log(MAC, LOG_WARNING, 0); - LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n", + LOG_I(SIM, "2 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_E(MAC, "2 emerge MAC\n"); LOG_D(MAC, "2 debug MAC \n"); @@ -1758,7 +1316,7 @@ int test_log(void) set_comp_log(MAC, LOG_NOTICE, 1); LOG_ENTER(MAC); - LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n", + LOG_I(SIM, "3 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_D(MAC, "3 debug MAC \n"); LOG_N(MAC, "3 notice MAC \n"); @@ -1766,10 +1324,10 @@ int test_log(void) LOG_I(MAC, "3 info MAC \n"); set_comp_log(MAC, LOG_DEBUG,1); - set_comp_log(EMU, LOG_DEBUG,1); + set_comp_log(SIM, LOG_DEBUG,1); LOG_ENTER(MAC); - LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n", + LOG_I(SIM, "4 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_D(MAC, "4 debug MAC \n"); LOG_N(MAC, "4 notice MAC \n"); @@ -1778,7 +1336,7 @@ int test_log(void) set_comp_log(MAC, LOG_DEBUG,0); - set_comp_log(EMU, LOG_DEBUG,0); + set_comp_log(SIM, LOG_DEBUG,0); LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); @@ -1789,7 +1347,7 @@ int test_log(void) set_comp_log(MAC, LOG_TRACE,0X07F); - set_comp_log(EMU, LOG_TRACE,0X07F); + set_comp_log(SIM, LOG_TRACE,0X07F); LOG_ENTER(MAC); LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n", diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h index d0ac13dac3..2e7aeb5663 100644 --- a/openair2/UTIL/LOG/log.h +++ b/openair2/UTIL/LOG/log.h @@ -92,7 +92,8 @@ extern "C" { # define LOG_DEBUG 7 /*!< \brief debug-level messages */ # define LOG_FILE 8 /*!< \brief message sequence chart -level */ # define LOG_TRACE 9 /*!< \brief trace-level messages */ -#define NUM_LOG_LEVEL 10 /*!< \brief the number of message levels users have with LOG */ +# define LOG_MATLAB 10 /*!< \brief output to matlab file */ +#define NUM_LOG_LEVEL 11 /*!< \brief the number of message levels users have with LOG */ /* @}*/ @@ -150,7 +151,7 @@ typedef enum { MIN_LOG_COMPONENTS = 0, PHY = MIN_LOG_COMPONENTS, MAC, - EMU, + SIM, OCG, OMG, OPT, @@ -185,10 +186,13 @@ typedef enum { LOCALIZE, RRH, X2AP, - MAX_LOG_COMPONENTS, + LOADER, + MAX_LOG_PREDEF_COMPONENTS, } comp_name_t; +#define MAX_LOG_DYNALLOC_COMPONENTS 20 +#define MAX_LOG_COMPONENTS (MAX_LOG_PREDEF_COMPONENTS + MAX_LOG_DYNALLOC_COMPONENTS) //#define msg printf typedef struct { @@ -230,6 +234,7 @@ typedef struct { int syslog; int filelog; char* filelog_name; + int async; // asynchronous mode, via dedicated log thread + log buffer } log_t; typedef struct LOG_params { @@ -253,6 +258,11 @@ typedef enum log_instance_type_e { void log_set_instance_type (log_instance_type_t instance); #endif +#define LOG_MEM_SIZE 100*1024*1024 +#define LOG_MEM_FILE "./logmem.log" +int logInit_log_mem(void); +void output_log_mem(void); + #ifdef LOG_MAIN log_t *g_log; #else @@ -283,18 +293,28 @@ char *map_int_to_str(mapping *map, int val); void logClean (void); int is_newline( char *str, int size); void *log_thread_function(void * list); - +int register_log_component(char *name, char *fext, int compidx); /** @defgroup _logIt logIt function * @ingroup _macro * @brief Macro used to call tr_log_full_ex with file, function and line information * @{*/ -#ifdef LOG_NO_THREAD + #define logIt(component, level, format, args...) (g_log->log_component[component].interval?logRecord_mt(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args):(void)0) -#else //default -#define logIt(component, level, format, args...) (g_log->log_component[component].interval?logRecord(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args):(void)0) -#endif + + /* @}*/ +/*!\fn int32_t write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, char format); +\brief Write output file from signal data +@param fname output file name +@param vname output vector name (for MATLAB/OCTAVE) +@param data point to data +@param length length of data vector to output +@param dec decimation level +@param format data format (0 = real 16-bit, 1 = complex 16-bit,2 real 32-bit, 3 complex 32-bit,4 = real 8-bit, 5 = complex 8-bit) +*/ +int32_t write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, char format); + /*----------------macro definitions for reading log configuration from the config module */ #define CONFIG_STRING_LOG_PREFIX "log_config" @@ -306,15 +326,16 @@ void *log_thread_function(void * list); #define LOG_CONFIG_LEVEL_FORMAT "%s_log_level" #define LOG_CONFIG_VERBOSITY_FORMAT "%s_log_verbosity" #define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile" + /*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* LOG globalconfiguration parameters */ -/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/* optname help paramflags XXXptr defXXXval type numelt */ /*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/ #define LOG_GLOBALPARAMS_DESC { \ -{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, NULL, 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \ -{LOG_CONFIG_STRING_GLOBAL_LOG_VERBOSITY,NULL, 0, strptr:(char **)&glogverbo, defstrval:log_verbosity_names[2].name, TYPE_STRING, 0}, \ -{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, NULL, 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0, }, \ -{LOG_CONFIG_STRING_GLOBAL_LOG_INFILE, NULL, 0, iptr:&(g_log->filelog), defintval:0, TYPE_INT, 0, }, \ +{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, NULL, 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \ +{LOG_CONFIG_STRING_GLOBAL_LOG_VERBOSITY,NULL, 0, strptr:(char **)&glogverbo, defstrval:log_verbosity_names[2].name, TYPE_STRING, 0}, \ +{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, NULL, 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0}, \ +{LOG_CONFIG_STRING_GLOBAL_LOG_INFILE, NULL, 0, iptr:&(g_log->filelog), defintval:0, TYPE_INT, 0}, \ } /*----------------------------------------------------------------------------------*/ /** @defgroup _debugging debugging macros @@ -322,43 +343,32 @@ void *log_thread_function(void * list); * @brief Macro used to call logIt function with different message levels * @{*/ -// debugging macros +// debugging macros(g_log->log_component[component].interval?logRecord_mt(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args):(void)0) # if T_TRACER # include "T.h" -# define LOG_I(c, x...) T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) -# define LOG_W(c, x...) T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) -# define LOG_E(c, x...) T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) -# define LOG_D(c, x...) T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) -# define LOG_T(c, x...) T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) +# define LOG_I(c, x...) do { if (T_stdout) { logIt(c, LOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0) +# define LOG_W(c, x...) do { if (T_stdout) { logIt(c, LOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0) +# define LOG_E(c, x...) do { if (T_stdout) { logIt(c, LOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0) +# define LOG_D(c, x...) do { if (T_stdout) { logIt(c, LOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0) +# define LOG_T(c, x...) do { if (T_stdout) { logIt(c, LOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0) +# define LOG_G(c, x...) do { if (T_stdout) { logIt(c, LOG_EMERG, x) ;}} while (0) /* */ +# define LOG_A(c, x...) do { if (T_stdout) { logIt(c, LOG_ALERT, x) ;}} while (0) /* */ +# define LOG_C(c, x...) do { if (T_stdout) { logIt(c, LOG_CRIT, x) ;}} while (0) /* */ +# define LOG_N(c, x...) do { if (T_stdout) { logIt(c, LOG_NOTICE, x) ;}} while (0) /* */ +# define LOG_F(c, x...) do { if (T_stdout) { logIt(c, LOG_FILE, x) ;}} while (0) /* */ +# define LOG_M(file, vector, data, len, dec, format) write_file_matlab(file, vector, data, len, dec, format)/* */ +# else /* T_TRACER */ +# define LOG_I(c, x...) /* */ +# define LOG_W(c, x...) /* */ +# define LOG_E(c, x...) /* */ +# define LOG_D(c, x...) /* */ +# define LOG_T(c, x...) /* */ # define LOG_G(c, x...) /* */ # define LOG_A(c, x...) /* */ # define LOG_C(c, x...) /* */ # define LOG_N(c, x...) /* */ # define LOG_F(c, x...) /* */ -# else /* T_TRACER */ -# if DISABLE_LOG_X -# define LOG_I(c, x...) /* */ -# define LOG_W(c, x...) /* */ -# define LOG_E(c, x...) /* */ -# define LOG_D(c, x...) /* */ -# define LOG_T(c, x...) /* */ -# define LOG_G(c, x...) /* */ -# define LOG_A(c, x...) /* */ -# define LOG_C(c, x...) /* */ -# define LOG_N(c, x...) /* */ -# define LOG_F(c, x...) /* */ -# else /*DISABLE_LOG_X*/ -# define LOG_G(c, x...) logIt(c, LOG_EMERG, x) -# define LOG_A(c, x...) logIt(c, LOG_ALERT, x) -# define LOG_C(c, x...) logIt(c, LOG_CRIT, x) -# define LOG_E(c, x...) logIt(c, LOG_ERR, x) -# define LOG_W(c, x...) logIt(c, LOG_WARNING, x) -# define LOG_N(c, x...) logIt(c, LOG_NOTICE, x) -# define LOG_I(c, x...) logIt(c, LOG_INFO, x) -# define LOG_D(c, x...) logIt(c, LOG_DEBUG, x) -# define LOG_F(c, x...) logIt(c, LOG_FILE, x) // log to a file, useful for the MSC chart generation -# define LOG_T(c, x...) logIt(c, LOG_TRACE, x) -# endif /*DISABLE_LOG_X*/ +# define LOG_M(file, vector, data, len, dec, format) /* */ # endif /* T_TRACER */ /* @}*/ diff --git a/openair2/UTIL/LOG/log_extern.h b/openair2/UTIL/LOG/log_extern.h index 611487ffea..0e7c49cc8d 100644 --- a/openair2/UTIL/LOG/log_extern.h +++ b/openair2/UTIL/LOG/log_extern.h @@ -32,3 +32,6 @@ extern int log_shutdown; extern mapping log_level_names[]; extern mapping log_verbosity_names[]; + +extern int log_mem_flag; +extern char * log_mem_filename; diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index a026cfb081..607fe85703 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -89,9 +89,6 @@ const char* eurecomVariablesNames[] = { "subframe_TX1_UE", "subframe_RX0_UE", "subframe_RX1_UE", - "missed_slot_enb", - "daq_mbox", - "rx_offset_mbox", "ue_rx_offset", "diff2", "hw_subframe", @@ -222,7 +219,10 @@ const char* eurecomFunctionsNames[] = { "ue_lock_mutex_rxtx_for_cnt_decrement1", "ue_lock_mutex_rxtx_for_cnt_increment0", "ue_lock_mutex_rxtx_for_cnt_increment1", - + /* simulation signals */ + "do_DL_sig", + "do_UL_sig", + "UE_trx_read", /* RRH signals */ "eNB_tx", "eNB_rx", diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index a47cdc059d..3c722ac49a 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -65,9 +65,6 @@ typedef enum { VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_UE, VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_UE, VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_UE, - VCD_SIGNAL_DUMPER_VARIABLES_MISSED_SLOTS_ENB, - VCD_SIGNAL_DUMPER_VARIABLES_DAQ_MBOX, - VCD_SIGNAL_DUMPER_VARIABLES_UE_OFFSET_MBOX, VCD_SIGNAL_DUMPER_VARIABLES_UE_RX_OFFSET, VCD_SIGNAL_DUMPER_VARIABLES_DIFF, VCD_SIGNAL_DUMPER_VARIABLES_HW_SUBFRAME, @@ -199,7 +196,10 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1, - + /* SIMULATION signals */ + VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_DL_SIGNAL, + VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_UL_SIGNAL, + VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_UE_TRX_READ, /* RRH signals */ VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX, VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX, @@ -447,28 +447,13 @@ extern int ouput_vcd; #include "T.h" -#define VCD_SIGNAL_DUMPER_INIT(x) /* nothing */ -#define VCD_SIGNAL_DUMPER_CLOSE() /* nothing */ -#define VCD_SIGNAL_DUMPER_CREATE_HEADER() /* nothing */ #define VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(var, val) T_VCD_VARIABLE(var, val) #define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(var, val) T_VCD_FUNCTION(var, val) - -#else /* T_TRACER */ - -#if defined(ENABLE_VCD) - #define VCD_SIGNAL_DUMPER_INIT(aRgUmEnT) vcd_signal_dumper_init(aRgUmEnT) - #define VCD_SIGNAL_DUMPER_CLOSE() vcd_signal_dumper_close() - #define VCD_SIGNAL_DUMPER_CREATE_HEADER() vcd_signal_dumper_create_header() - #define VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(vAr1,vAr2) vcd_signal_dumper_dump_variable_by_name(vAr1,vAr2) - #define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(vAr1,vAr2) vcd_signal_dumper_dump_function_by_name(vAr1,vAr2) #else - #define VCD_SIGNAL_DUMPER_INIT(aRgUmEnT) - #define VCD_SIGNAL_DUMPER_CLOSE() - #define VCD_SIGNAL_DUMPER_CREATE_HEADER() - #define VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(vAr1,vAr2) - #define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(vAr1,vAr2) -#endif +#define VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(var, val) +#define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(var, val) + #endif /* T_TRACER */ #endif /* !defined (VCD_SIGNAL_DUMPER_H_) */ diff --git a/openair2/UTIL/MEM/mem_block.c b/openair2/UTIL/MEM/mem_block.c index 39447001fa..6d1a289f08 100644 --- a/openair2/UTIL/MEM/mem_block.c +++ b/openair2/UTIL/MEM/mem_block.c @@ -275,9 +275,9 @@ get_free_mem_block (uint32_t sizeP, const char* caller) } while (pool_selected++ < 12); LOG_E(PHY, "[MEM_MNGT][ERROR][FATAL] failed allocating MEM_BLOCK size %d byes (pool_selected=%d size=%d)\n", sizeP, pool_selected, size); - display_mem_load(); - AssertFatal(1==0,"get_free_mem_block failed"); - +// display_mem_load(); +// AssertFatal(1==0,"get_free_mem_block failed"); + LOG_E(MAC,"[MEM_MNGT][ERROR][FATAL] get_free_mem_block failed!!!\n"); #ifdef MEMBLOCK_BIG_LOCK if (pthread_mutex_unlock(&mtex)) abort(); #endif diff --git a/openair2/UTIL/MEM/mem_block.h b/openair2/UTIL/MEM/mem_block.h index e967380269..a0455899e3 100644 --- a/openair2/UTIL/MEM/mem_block.h +++ b/openair2/UTIL/MEM/mem_block.h @@ -32,13 +32,7 @@ # define __MEM_BLOCK_H__ #include -#ifdef MEM_BLOCK_C -# define public_mem_block(x) x -# define private_mem_block(x) x -#else -# define public_mem_block(x) extern x -# define private_mem_block(x) -#endif +#include "openair2/COMMON/platform_constants.h" //----------------------------------------------------------------------------- typedef struct mem_block_t { @@ -47,21 +41,20 @@ typedef struct mem_block_t { unsigned char pool_id; unsigned char *data; } mem_block_t; -#include "UTIL/LISTS/list.h" //----------------------------------------------------------------------------- -public_mem_block(void *pool_buffer_init (void);) -public_mem_block(void *pool_buffer_clean (void *arg);) -public_mem_block(void free_mem_block (mem_block_t * leP, const char* caller);) -public_mem_block(mem_block_t* get_free_mem_block (uint32_t sizeP, const char* caller);) -public_mem_block(mem_block_t *get_free_copy_mem_block (void);) -public_mem_block(mem_block_t *get_free_copy_mem_block_up (void);) -public_mem_block(mem_block_t *copy_mem_block (mem_block_t * leP, mem_block_t * destP);) -public_mem_block(void display_mem_load (void);) +void *pool_buffer_init (void); +void *pool_buffer_clean (void *arg); +void free_mem_block (mem_block_t * leP, const char* caller); +mem_block_t* get_free_mem_block (uint32_t sizeP, const char* caller); +mem_block_t *get_free_copy_mem_block (void); +mem_block_t *get_free_copy_mem_block_up (void); +mem_block_t *copy_mem_block (mem_block_t * leP, mem_block_t * destP); +void display_mem_load (void); -public_mem_block(void check_mem_area (void);) -private_mem_block(void check_free_mem_block (mem_block_t * leP);) +void check_mem_area (void); +void check_free_mem_block (mem_block_t * leP); # define MEM_SCALE MAX_MOBILES_PER_ENB // definition of the size of the allocated memory area # define MEM_MNGT_MB0_BLOCK_SIZE 64 @@ -139,9 +132,26 @@ private_mem_block(void check_free_mem_block (mem_block_t * leP);) # define MEM_MNGT_NB_ELEMENTS MEM_MNGT_MB0_NB_BLOCKS + MEM_MNGT_MB1_NB_BLOCKS + MEM_MNGT_MB2_NB_BLOCKS + MEM_MNGT_MB3_NB_BLOCKS + MEM_MNGT_MB4_NB_BLOCKS + MEM_MNGT_MB5_NB_BLOCKS + MEM_MNGT_MB6_NB_BLOCKS + MEM_MNGT_MB7_NB_BLOCKS + MEM_MNGT_MB8_NB_BLOCKS + MEM_MNGT_MB9_NB_BLOCKS + MEM_MNGT_MB10_NB_BLOCKS + MEM_MNGT_MB11_NB_BLOCKS + MEM_MNGT_MB12_NB_BLOCKS + MEM_MNGT_MBCOPY_NB_BLOCKS # define MEM_MNGT_POOL_ID_COPY 13 +#define LIST_NAME_MAX_CHAR 32 -private_mem_block(typedef struct { +typedef struct { + struct mem_block_t *head; + struct mem_block_t *tail; + int nb_elements; + char name[LIST_NAME_MAX_CHAR]; +} list2_t; +//----------------------------------------------------------------------------- +typedef struct { + struct mem_block_t *head; + struct mem_block_t *tail; + int nb_elements; + char name[LIST_NAME_MAX_CHAR]; +} list_t; + + + +typedef struct { //----------------------------------------------------------- // basic memory management //----------------------------------------------------------- @@ -161,9 +171,9 @@ private_mem_block(typedef struct { mem_block_t mem_blocks[MEM_MNGT_NB_ELEMENTS]; list_t mem_lists[14]; -} mem_pool;) +} mem_pool; -private_mem_block(mem_pool mem_block_var;) +mem_pool mem_block_var; #endif diff --git a/openair2/UTIL/OPT/packet-mac-lte.h b/openair2/UTIL/OPT/packet-mac-lte.h index 84c6254d9f..d0bb60f6b5 100644 --- a/openair2/UTIL/OPT/packet-mac-lte.h +++ b/openair2/UTIL/OPT/packet-mac-lte.h @@ -46,17 +46,6 @@ #define DIRECTION_DOWNLINK 1 /* SR: no need to declare following part: */ -#if 0 -/* rntiType */ -#define NO_RNTI 0 -#define P_RNTI 1 -#define RA_RNTI 2 -#define C_RNTI 3 -#define SI_RNTI 4 -#define SPS_RNTI 5 -#define M_RNTI 6 -#endif - typedef enum mac_lte_oob_event { ltemac_send_preamble, ltemac_send_sr, @@ -153,35 +142,6 @@ typedef struct mac_lte_info { guint16 oob_rnti[MAX_SRs]; } mac_lte_info; -/* SR: no need to declare following part: */ -#if 0 -typedef struct mac_lte_tap_info { - /* Info from context */ - guint16 rnti; - guint16 ueid; - guint8 rntiType; - guint8 isPredefinedData; - guint8 crcStatusValid; - mac_lte_crc_status crcStatus; - guint8 direction; - - guint8 isPHYRetx; - guint16 ueInTTI; - - nstime_t time; - - /* Number of bytes (which part is used depends upon context settings) */ - guint32 single_number_of_bytes; - guint32 bytes_for_lcid[11]; - guint32 sdus_for_lcid[11]; - guint8 number_of_rars; - - /* Number of padding bytes includes padding subheaders and trailing padding */ - guint16 padding_bytes; - guint16 raw_length; -} mac_lte_tap_info; -#endif - /* Accessor function to check if a frame was considered to be ReTx */ //int is_mac_lte_frame_retx(packet_info *pinfo, guint8 direction); diff --git a/openair2/UTIL/TIMER/umts_timer.c b/openair2/UTIL/TIMER/umts_timer.c index 9bbb6c2df9..1691fac363 100644 --- a/openair2/UTIL/TIMER/umts_timer.c +++ b/openair2/UTIL/TIMER/umts_timer.c @@ -94,6 +94,7 @@ umts_add_timer_list_up (list2_t * atimer_listP, void (*procP) (void *, void *), uint8_t inserted = 0; mb = get_free_mem_block (sizeof (struct timer_unit), __func__); + if(mb==NULL) return NULL; ((struct timer_unit *) (mb->data))->proc = procP; ((struct timer_unit *) (mb->data))->protocol = protocolP; ((struct timer_unit *) (mb->data))->timer_id = timer_idP; diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile deleted file mode 100755 index 265a3d9e24..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile +++ /dev/null @@ -1,81 +0,0 @@ -include Makefile.inc -OBJS=$(addprefix MESSAGES/,${ASN_MODULE_SOURCES:.c=.o}) - -CFLAGS += -DEMIT_ASN_DEBUG=1 -CFLAGS += -Wall -CFLAGS += -g - - -OBJS += x2ap_decoder.o -OBJS += x2ap_encoder.o -OBJS += x2ap_common.o - -#X2AP_SERVER_SRC = sctp_primitives_server.c -#X2AP_SERVER_SRC += x2ap_server_main.c -#X2AP_SERVER_OBJS = $(X2AP_SERVER_SRC:.c=.o) - -X2AP_CLIENT_SRC = sctp_primitives_client.c -X2AP_CLIENT_SRC += x2ap_client_main.c -X2AP_CLIENT_OBJS = $(X2AP_CLIENT_SRC:.c=.o) - - -libx2ap_messages.a:$(OBJS) - $(AR) rcsv libx2ap_messages.a $(OBJS) - -asn1fromtool: - asn1c -gen-PER -fnative-types -fskeletons-copy X2AP-CommonDataTypes.asn X2AP-Constants.asn X2AP-IEs.asn \ - X2AP-PDU.asn - - -asn1fromscript: - python ../asn1tostruct.py -f X2AP-PDU-Contents.asn -d - -all: server x2ap_client_main - -server: server.o libx2ap_messages.a generating_messages.o sctp_primitives_client.o x2ap_pdu_decoder.o - $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) -o $@ $^ -lsctp -lpthread libx2ap_messages.a - - -$(OBJS): %.o : %.c - $(CC) $(CFLAGS) -I. -o $@ -c $< - - -$(X2AP_SERVER_OBJS): %.o : %.c - $(CC) -c $(CFLAGS) -I. $< -o $@ - -$(X2AP_CLIENT_OBJS): %.o : %.c - $(CC) -c $(CFLAGS) $< -o $@ - -x2ap_server_main.o: x2ap_server_main.c - $(CC) $(CFLAGS) -I. $^ -o $@ -lsctp \ - -lpthread - -x2ap_client_main: $(X2AP_CLIENT_OBJS) - $(CC) $(CFLAGS) $^ -o $@ -lsctp \ - -lpthread - -server.o: server.c - $(CC) $(CFLAGS) -I. $^ -o $@ -lsctp \ - -lpthread - - - -x2ap_pdu_decoder.o: x2ap_pdu_decoder.c - $(CC) $(CFLAGS) -I. -o $@ -c $< - -x2ap_pdu_encoder.o: x2ap_pdu_encoder.c - $(CC) $(CFLAGS) -I. -o $@ -c $< - -sctp_primitives_server.o: sctp_primitives_server.c - $(CC) $(CFLAGS) -o $@ -c $< - - -generating_messages.o: generating_messages.c - $(CC) $(CFLAGS) -I. -o $@ -c $< - - - -clean: - rm -f $(OBJS) - - diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile.inc b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile.inc deleted file mode 100644 index 2b7ddb97b9..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/Makefile.inc +++ /dev/null @@ -1,462 +0,0 @@ -ASN_MODULE_SOURCES= \ - Criticality.c \ - Presence.c \ - PrivateIE-ID.c \ - ProcedureCode.c \ - ProtocolIE-ID.c \ - TriggeringMessage.c \ - IE-Extensions.c \ - AS-SecurityInformation.c \ - AllocationAndRetentionPriority.c \ - ActivatedCellList.c \ - ActivatedCellList-Item.c \ - BitRate.c \ - BroadcastPLMNs-Item.c \ - CapacityValue.c \ - CellCapacityClassValue.c \ - CellToReport-List.c \ - CellToReport-Item.c \ - CellMeasurementResult-List.c \ - CellMeasurementResult-Item.c \ - ReportingPeriodicity.c \ - Cause.c \ - CauseMisc.c \ - CauseProtocol.c \ - CauseRadioNetwork.c \ - CauseTransport.c \ - Cell-Size.c \ - CellInformation-List.c \ - CellInformation-Item.c \ - CellType.c \ - CompositeAvailableCapacityGroup.c \ - CompositeAvailableCapacity.c \ - COUNTvalue.c \ - CriticalityDiagnostics.c \ - CriticalityDiagnostics-IE-List.c \ - CriticalityDiagnostics-IE-Elm.c \ - CRNTI.c \ - CyclicPrefixDL.c \ - CyclicPrefixUL.c \ - DeactivationIndication.c \ - DL-Forwarding.c \ - E-RABs-Admitted-List.c \ - E-RABs-Admitted-Item.c \ - E-RABs-ToBeSetup-List.c \ - E-RABs-ToBeSetup-Item.c \ - E-RABs-SubjectToStatusTransfer-List.c \ - E-RABs-SubjectToStatusTransfer-Item.c \ - EARFCN.c \ - FDD-Info.c \ - TDD-Info.c \ - EUTRA-Mode-Info.c \ - ECGI.c \ - ENB-ID.c \ - EncryptionAlgorithms.c \ - EPLMNs.c \ - E-RAB-ID.c \ - E-RAB-Level-QoS-Parameters.c \ - E-RAB-List.c \ - E-RAB-Item.c \ - EUTRANCellIdentifier.c \ - EUTRANTraceID.c \ - EventType.c \ - ForbiddenInterRATs.c \ - ForbiddenTAs.c \ - ForbiddenTAs-Item.c \ - ForbiddenTACs.c \ - ForbiddenLAs.c \ - ForbiddenLAs-Item.c \ - ForbiddenLACs.c \ - Fourframes.c \ - GBR-QosInformation.c \ - GlobalENB-ID.c \ - GTPtunnelEndpoint.c \ - GTP-TEI.c \ - GUGroupIDList.c \ - GU-Group-ID.c \ - GUMMEI.c \ - HandoverReportType.c \ - HandoverRestrictionList.c \ - HFN.c \ - HWLoadIndicator.c \ - IntegrityProtectionAlgorithms.c \ - InterfacesToTrace.c \ - Key-eNodeB-Star.c \ - LAC.c \ - LastVisitedCell-Item.c \ - LastVisitedEUTRANCellInformation.c \ - LastVisitedUTRANCellInformation.c \ - LastVisitedGERANCellInformation.c \ - LoadIndicator.c \ - LocationReportingInformation.c \ - MME-Group-ID.c \ - MME-Code.c \ - Measurement-ID.c \ - MBSFN-Subframe-Infolist.c \ - MBSFN-Subframe-Info.c \ - MobilityParametersModificationRange.c \ - MobilityParametersInformation.c \ - Neighbour-Information.c \ - Neighbour-Information-Elm.c \ - NextHopChainingCount.c \ - Number-of-Antennaports.c \ - Oneframe.c \ - PDCP-SN.c \ - PCI.c \ - PLMN-Identity.c \ - PRACH-Configuration.c \ - Pre-emptionCapability.c \ - Pre-emptionVulnerability.c \ - PriorityLevel.c \ - QCI.c \ - ReceiveStatusofULPDCPSDUs.c \ - Registration-Request.c \ - RelativeNarrowbandTxPower.c \ - ReportArea.c \ - ReportCharacteristics.c \ - RNTP-Threshold.c \ - RRC-Context.c \ - RadioResourceStatus.c \ - DL-GBR-PRB-usage.c \ - UL-GBR-PRB-usage.c \ - DL-non-GBR-PRB-usage.c \ - UL-non-GBR-PRB-usage.c \ - DL-Total-PRB-usage.c \ - UL-Total-PRB-usage.c \ - RadioframeAllocationPeriod.c \ - RadioframeAllocationOffset.c \ - S1TNLLoadIndicator.c \ - ServedCellsToActivate.c \ - ServedCellsToActivate-Item.c \ - ServedCellsToModify.c \ - ServedCellsToModify-Item.c \ - Old-ECGIs.c \ - ServedCells.c \ - ServedCellItem.c \ - ServedCell-Information.c \ - ShortMAC-I.c \ - SRVCCOperationPossible.c \ - SubframeAssignment.c \ - SpecialSubframe-Info.c \ - SpecialSubframePatterns.c \ - SubscriberProfileIDforRFP.c \ - SubframeAllocation.c \ - TAC.c \ - TargeteNBtoSource-eNBTransparentContainer.c \ - TimeToWait.c \ - Time-UE-StayedInCell.c \ - TraceActivation.c \ - TraceCollectionEntityIPAddress.c \ - TraceDepth.c \ - Transmission-Bandwidth.c \ - TransportLayerAddress.c \ - TypeOfError.c \ - UE-HistoryInformation.c \ - UE-S1AP-ID.c \ - UE-ID.c \ - UEAggregateMaximumBitRate.c \ - UESecurityCapabilities.c \ - UE-ContextInformation.c \ - UL-InterferenceOverloadIndication.c \ - UL-InterferenceOverloadIndication-Item.c \ - UL-HighInterferenceIndicationInfo.c \ - UL-HighInterferenceIndicationInfo-Item.c \ - UL-HighInterferenceIndication.c \ - UE-RLF-Report-Container.c \ - IE.c \ - PDU.c \ - InitiatingMessage.c \ - SuccessfulOutcome.c \ - UnsuccessfulOutcome.c \ - HandoverRequest.c \ - HandoverRequestAcknowledge.c \ - HandoverPreparationFailure.c \ - SNStatusTransfer.c \ - UEContextRelease.c \ - HandoverCancel.c \ - HandoverReport.c \ - ErrorIndication.c \ - ResetRequest.c \ - ResetResponse.c \ - X2SetupRequest.c \ - X2SetupResponse.c \ - X2SetupFailure.c \ - LoadInformation.c \ - ENBConfigurationUpdate.c \ - ENBConfigurationUpdateAcknowledge.c \ - ENBConfigurationUpdateFailure.c \ - ResourceStatusRequest.c \ - ResourceStatusResponse.c \ - ResourceStatusFailure.c \ - ResourceStatusUpdate.c \ - RLFIndication.c \ - PrivateMessage.c \ - MobilityChangeRequest.c \ - MobilityChangeAcknowledge.c \ - MobilityChangeFailure.c \ - CellActivationRequest.c \ - CellActivationResponse.c \ - CellActivationFailure.c - -ASN_MODULE_HEADERS= \ - Criticality.h \ - Presence.h \ - PrivateIE-ID.h \ - ProcedureCode.h \ - ProtocolIE-ID.h \ - TriggeringMessage.h \ - IE-Extensions.h \ - AS-SecurityInformation.h \ - AllocationAndRetentionPriority.h \ - ActivatedCellList.h \ - ActivatedCellList-Item.h \ - BitRate.h \ - BroadcastPLMNs-Item.h \ - CapacityValue.h \ - CellCapacityClassValue.h \ - CellToReport-List.h \ - CellToReport-Item.h \ - CellMeasurementResult-List.h \ - CellMeasurementResult-Item.h \ - ReportingPeriodicity.h \ - Cause.h \ - CauseMisc.h \ - CauseProtocol.h \ - CauseRadioNetwork.h \ - CauseTransport.h \ - Cell-Size.h \ - CellInformation-List.h \ - CellInformation-Item.h \ - CellType.h \ - CompositeAvailableCapacityGroup.h \ - CompositeAvailableCapacity.h \ - COUNTvalue.h \ - CriticalityDiagnostics.h \ - CriticalityDiagnostics-IE-List.h \ - CriticalityDiagnostics-IE-Elm.h \ - CRNTI.h \ - CyclicPrefixDL.h \ - CyclicPrefixUL.h \ - DeactivationIndication.h \ - DL-Forwarding.h \ - E-RABs-Admitted-List.h \ - E-RABs-Admitted-Item.h \ - E-RABs-ToBeSetup-List.h \ - E-RABs-ToBeSetup-Item.h \ - E-RABs-SubjectToStatusTransfer-List.h \ - E-RABs-SubjectToStatusTransfer-Item.h \ - EARFCN.h \ - FDD-Info.h \ - TDD-Info.h \ - EUTRA-Mode-Info.h \ - ECGI.h \ - ENB-ID.h \ - EncryptionAlgorithms.h \ - EPLMNs.h \ - E-RAB-ID.h \ - E-RAB-Level-QoS-Parameters.h \ - E-RAB-List.h \ - E-RAB-Item.h \ - EUTRANCellIdentifier.h \ - EUTRANTraceID.h \ - EventType.h \ - ForbiddenInterRATs.h \ - ForbiddenTAs.h \ - ForbiddenTAs-Item.h \ - ForbiddenTACs.h \ - ForbiddenLAs.h \ - ForbiddenLAs-Item.h \ - ForbiddenLACs.h \ - Fourframes.h \ - GBR-QosInformation.h \ - GlobalENB-ID.h \ - GTPtunnelEndpoint.h \ - GTP-TEI.h \ - GUGroupIDList.h \ - GU-Group-ID.h \ - GUMMEI.h \ - HandoverReportType.h \ - HandoverRestrictionList.h \ - HFN.h \ - HWLoadIndicator.h \ - IntegrityProtectionAlgorithms.h \ - InterfacesToTrace.h \ - Key-eNodeB-Star.h \ - LAC.h \ - LastVisitedCell-Item.h \ - LastVisitedEUTRANCellInformation.h \ - LastVisitedUTRANCellInformation.h \ - LastVisitedGERANCellInformation.h \ - LoadIndicator.h \ - LocationReportingInformation.h \ - MME-Group-ID.h \ - MME-Code.h \ - Measurement-ID.h \ - MBSFN-Subframe-Infolist.h \ - MBSFN-Subframe-Info.h \ - MobilityParametersModificationRange.h \ - MobilityParametersInformation.h \ - Neighbour-Information.h \ - Neighbour-Information-Elm.h \ - NextHopChainingCount.h \ - Number-of-Antennaports.h \ - Oneframe.h \ - PDCP-SN.h \ - PCI.h \ - PLMN-Identity.h \ - PRACH-Configuration.h \ - Pre-emptionCapability.h \ - Pre-emptionVulnerability.h \ - PriorityLevel.h \ - QCI.h \ - ReceiveStatusofULPDCPSDUs.h \ - Registration-Request.h \ - RelativeNarrowbandTxPower.h \ - ReportArea.h \ - ReportCharacteristics.h \ - RNTP-Threshold.h \ - RRC-Context.h \ - RadioResourceStatus.h \ - DL-GBR-PRB-usage.h \ - UL-GBR-PRB-usage.h \ - DL-non-GBR-PRB-usage.h \ - UL-non-GBR-PRB-usage.h \ - DL-Total-PRB-usage.h \ - vUL-Total-PRB-usage.h \ - RadioframeAllocationPeriod.h \ - RadioframeAllocationOffset.h \ - S1TNLLoadIndicator.h \ - ServedCellsToActivate.h \ - ServedCellsToActivate-Item.h \ - ServedCellsToModify.h \ - ServedCellsToModify-Item.h \ - Old-ECGIs.h \ - ServedCells.h \ - ServedCellItem.h \ - ServedCell-Information.h \ - ShortMAC-I.h \ - SRVCCOperationPossible.h \ - SubframeAssignment.h \ - SpecialSubframe-Info.h \ - SpecialSubframePatterns.h \ - SubscriberProfileIDforRFP.h \ - SubframeAllocation.h \ - TAC.h \ - TargeteNBtoSource-eNBTransparentContainer.h \ - TimeToWait.h \ - Time-UE-StayedInCell.h \ - TraceActivation.h \ - TraceCollectionEntityIPAddress.h \ - TraceDepth.h \ - Transmission-Bandwidth.h \ - TransportLayerAddress.h \ - TypeOfError.h \ - UE-HistoryInformation.h \ - UE-S1AP-ID.h \ - UE-ID.h \ - UEAggregateMaximumBitRate.h \ - UESecurityCapabilities.h \ - UE-ContextInformation.h \ - UL-InterferenceOverloadIndication.h \ - UL-InterferenceOverloadIndication-Item.h \ - UL-HighInterferenceIndicationInfo.h \ - UL-HighInterferenceIndicationInfo-Item.h \ - UL-HighInterferenceIndication.h \ - UE-RLF-Report-Container.h \ - IE.h \ - PDU.h \ - InitiatingMessage.h \ - SuccessfulOutcome.h \ - UnsuccessfulOutcome.h \ - HandoverRequest.h \ - HandoverRequestAcknowledge.h \ - HandoverPreparationFailure.h \ - SNStatusTransfer.h \ - UEContextRelease.h \ - HandoverCancel.h \ - HandoverReport.h \ - ErrorIndication.h \ - ResetRequest.h \ - ResetResponse.h \ - X2SetupRequest.h \ - X2SetupResponse.h \ - X2SetupFailure.h \ - LoadInformation.h \ - ENBConfigurationUpdate.h \ - ENBConfigurationUpdateAcknowledge.h \ - ENBConfigurationUpdateFailure.h \ - ResourceStatusRequest.h \ - ResourceStatusResponse.h \ - ResourceStatusFailure.h \ - ResourceStatusUpdate.h \ - RLFIndication.h \ - PrivateMessage.h \ - MobilityChangeRequest.h \ - MobilityChangeAcknowledge.h \ - MobilityChangeFailure.h \ - CellActivationRequest.h \ - CellActivationResponse.h \ - CellActivationFailure.h - -ASN_MODULE_HEADERS+=ANY.h -ASN_MODULE_SOURCES+=ANY.c -ASN_MODULE_HEADERS+=BOOLEAN.h -ASN_MODULE_SOURCES+=BOOLEAN.c -ASN_MODULE_HEADERS+=INTEGER.h -ASN_MODULE_HEADERS+=NativeEnumerated.h -ASN_MODULE_SOURCES+=INTEGER.c -ASN_MODULE_HEADERS+=NULL.h -ASN_MODULE_SOURCES+=NULL.c -ASN_MODULE_SOURCES+=NativeEnumerated.c -ASN_MODULE_HEADERS+=NativeInteger.h -ASN_MODULE_SOURCES+=NativeInteger.c -ASN_MODULE_HEADERS+=OBJECT_IDENTIFIER.h -ASN_MODULE_SOURCES+=OBJECT_IDENTIFIER.c -ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h -ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.c -ASN_MODULE_HEADERS+=asn_SET_OF.h -ASN_MODULE_SOURCES+=asn_SET_OF.c -ASN_MODULE_HEADERS+=constr_CHOICE.h -ASN_MODULE_SOURCES+=constr_CHOICE.c -ASN_MODULE_HEADERS+=constr_SEQUENCE.h -ASN_MODULE_SOURCES+=constr_SEQUENCE.c -ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h -ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.c -ASN_MODULE_HEADERS+=constr_SET_OF.h -ASN_MODULE_SOURCES+=constr_SET_OF.c -ASN_MODULE_HEADERS+=asn_application.h -ASN_MODULE_HEADERS+=asn_system.h -ASN_MODULE_HEADERS+=asn_codecs.h -ASN_MODULE_HEADERS+=asn_internal.h -ASN_MODULE_HEADERS+=OCTET_STRING.h -ASN_MODULE_SOURCES+=OCTET_STRING.c -ASN_MODULE_HEADERS+=BIT_STRING.h -ASN_MODULE_SOURCES+=BIT_STRING.c -ASN_MODULE_SOURCES+=asn_codecs_prim.c -ASN_MODULE_HEADERS+=asn_codecs_prim.h -ASN_MODULE_HEADERS+=ber_tlv_length.h -ASN_MODULE_SOURCES+=ber_tlv_length.c -ASN_MODULE_HEADERS+=ber_tlv_tag.h -ASN_MODULE_SOURCES+=ber_tlv_tag.c -ASN_MODULE_HEADERS+=ber_decoder.h -ASN_MODULE_SOURCES+=ber_decoder.c -ASN_MODULE_HEADERS+=der_encoder.h -ASN_MODULE_SOURCES+=der_encoder.c -ASN_MODULE_HEADERS+=constr_TYPE.h -ASN_MODULE_SOURCES+=constr_TYPE.c -ASN_MODULE_HEADERS+=constraints.h -ASN_MODULE_SOURCES+=constraints.c -ASN_MODULE_HEADERS+=xer_support.h -ASN_MODULE_SOURCES+=xer_support.c -ASN_MODULE_HEADERS+=xer_decoder.h -ASN_MODULE_SOURCES+=xer_decoder.c -ASN_MODULE_HEADERS+=xer_encoder.h -ASN_MODULE_SOURCES+=xer_encoder.c -ASN_MODULE_HEADERS+=per_support.h -ASN_MODULE_SOURCES+=per_support.c -ASN_MODULE_HEADERS+=per_decoder.h -ASN_MODULE_SOURCES+=per_decoder.c -ASN_MODULE_HEADERS+=per_encoder.h -ASN_MODULE_SOURCES+=per_encoder.c -ASN_MODULE_HEADERS+=per_opentype.h -ASN_MODULE_SOURCES+=per_opentype.c diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-CommonDataTypes.asn b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-CommonDataTypes.asn deleted file mode 100644 index da628fd3eb..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-CommonDataTypes.asn +++ /dev/null @@ -1,126 +0,0 @@ --- ************************************************************** --- --- Common definitions --- --- ************************************************************** - -X2AP-CommonDataTypes { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-CommonDataTypes (3) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- Extension constants --- --- ************************************************************** - -maxPrivateIEs INTEGER ::= 65535 -maxProtocolExtensions INTEGER ::= 65535 -maxProtocolIEs INTEGER ::= 65535 - --- ************************************************************** --- --- Common Data Types --- --- ************************************************************** - -Criticality ::= ENUMERATED { reject, ignore, notify } - -Presence ::= ENUMERATED { optional, conditional, mandatory } - -PrivateIE-ID ::= CHOICE { - local INTEGER (0.. maxPrivateIEs), - global OBJECT IDENTIFIER -} - -ProcedureCode ::= INTEGER { - id-handoverPreparation (0), - id-handoverCancel (1), - id-loadIndication (2), - id-errorIndication (3), - id-snStatusTransfer (4), - id-uEContextRelease (5), - id-x2Setup (6), - id-reset (7), - id-eNBConfigurationUpdate (8), - id-resourceStatusReportingInitiation (9), - id-resourceStatusReporting (10), - id-privateMessage (11), - id-mobilitySettingsChange (12), - id-rLFIndication (13), - id-handoverReport (14), - id-cellActivation (15) -} (0..255) - - -ProtocolIE-ID ::= INTEGER { - id-E-RABs-Admitted-Item (0), - id-E-RABs-Admitted-List (1), - id-E-RAB-Item (2), - id-E-RABs-NotAdmitted-List (3), - id-E-RABs-ToBeSetup-Item (4), - id-Cause (5), - id-CellInformation (6), - id-CellInformation-Item (7), - id-New-eNB-UE-X2AP-ID (9), - id-Old-eNB-UE-X2AP-ID (10), - id-TargetCell-ID (11), - id-TargeteNBtoSource-eNBTransparentContainer (12), - id-TraceActivation (13), - id-UE-ContextInformation (14), - id-UE-HistoryInformation (15), - id-UE-X2AP-ID (16), - id-CriticalityDiagnostics (17), - id-E-RABs-SubjectToStatusTransfer-List (18), - id-E-RABs-SubjectToStatusTransfer-Item (19), - id-ServedCells (20), - id-GlobalENB-ID (21), - id-TimeToWait (22), - id-GUMMEI-ID (23), - id-GUGroupIDList (24), - id-ServedCellsToAdd (25), - id-ServedCellsToModify (26), - id-ServedCellsToDelete (27), - id-Registration-Request (28), - id-CellToReport (29), - id-ReportingPeriodicity (30), - id-CellToReport-Item (31), - id-CellMeasurementResult (32), - id-CellMeasurementResult-Item (33), - id-GUGroupIDToAddList (34), - id-GUGroupIDToDeleteList (35), - id-SRVCCOperationPossible (36), - id-Measurement-ID (37), - id-ReportCharacteristics (38), - id-ENB1-Measurement-ID (39), - id-ENB2-Measurement-ID (40), - id-Number-of-Antennaports (41), - id-CompositeAvailableCapacityGroup (42), - id-ENB1-Cell-ID (43), - id-ENB2-Cell-ID (44), - id-ENB2-Proposed-Mobility-Parameters (45), - id-ENB1-Mobility-Parameters (46), - id-ENB2-Mobility-Parameters-Modification-Range (47), - id-FailureCellPCI (48), - id-Re-establishmentCellECGI (49), - id-FailureCellCRNTI (50), - id-ShortMAC-I (51), - id-SourceCellECGI (52), - id-FailureCellECGI (53), - id-HandoverReportType (54), - id-PRACH-Configuration (55), - id-MBSFN-Subframe-Info (56), - id-ServedCellsToActivate (57), - id-ActivatedCellList (58), - id-DeactivationIndication (59), - id-UE-RLF-Report-Container (60) -} (0..maxProtocolIEs) - - -TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} - -END \ No newline at end of file diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-Constants.asn b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-Constants.asn deleted file mode 100644 index 62a80cfc64..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-Constants.asn +++ /dev/null @@ -1,138 +0,0 @@ --- ************************************************************** --- --- Constant definitions --- --- ************************************************************** - -X2AP-Constants { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-Constants (4) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - ProcedureCode, - ProtocolIE-ID -FROM X2AP-CommonDataTypes; - --- ************************************************************** --- --- Elementary Procedures --- --- ************************************************************** - -id-handoverPreparation ProcedureCode ::= 0 -id-handoverCancel ProcedureCode ::= 1 -id-loadIndication ProcedureCode ::= 2 -id-errorIndication ProcedureCode ::= 3 -id-snStatusTransfer ProcedureCode ::= 4 -id-uEContextRelease ProcedureCode ::= 5 -id-x2Setup ProcedureCode ::= 6 -id-reset ProcedureCode ::= 7 -id-eNBConfigurationUpdate ProcedureCode ::= 8 -id-resourceStatusReportingInitiation ProcedureCode ::= 9 -id-resourceStatusReporting ProcedureCode ::= 10 -id-privateMessage ProcedureCode ::= 11 -id-mobilitySettingsChange ProcedureCode ::= 12 -id-rLFIndication ProcedureCode ::= 13 -id-handoverReport ProcedureCode ::= 14 -id-cellActivation ProcedureCode ::= 15 - - - --- ************************************************************** --- --- Lists --- --- ************************************************************** - -maxEARFCN INTEGER ::= 65535 -maxInterfaces INTEGER ::= 16 -maxCellineNB INTEGER ::= 256 -maxnoofBearers INTEGER ::= 256 -maxNrOfErrors INTEGER ::= 256 -maxnoofPDCP-SN INTEGER ::= 16 -- FFS Value to be checked -maxnoofEPLMNs INTEGER ::= 15 -maxnoofEPLMNsPlusOne INTEGER ::= 16 -maxnoofForbLACs INTEGER ::= 4096 -maxnoofForbTACs INTEGER ::= 4096 -maxnoofBPLMNs INTEGER ::= 6 -maxnoofNeighbours INTEGER ::= 512 -maxnoofPRBs INTEGER ::= 110 -maxPools INTEGER ::= 16 -maxnoofCells INTEGER ::= 16 -maxnoofMBSFN INTEGER ::= 8 - - - - --- ************************************************************** --- --- IEs --- --- ************************************************************** - -id-E-RABs-Admitted-Item ProtocolIE-ID ::= 0 -id-E-RABs-Admitted-List ProtocolIE-ID ::= 1 -id-E-RAB-Item ProtocolIE-ID ::= 2 -id-E-RABs-NotAdmitted-List ProtocolIE-ID ::= 3 -id-E-RABs-ToBeSetup-Item ProtocolIE-ID ::= 4 -id-Cause ProtocolIE-ID ::= 5 -id-CellInformation ProtocolIE-ID ::= 6 -id-CellInformation-Item ProtocolIE-ID ::= 7 -id-New-eNB-UE-X2AP-ID ProtocolIE-ID ::= 9 -id-Old-eNB-UE-X2AP-ID ProtocolIE-ID ::= 10 -id-TargetCell-ID ProtocolIE-ID ::= 11 -id-TargeteNBtoSource-eNBTransparentContainer ProtocolIE-ID ::= 12 -id-TraceActivation ProtocolIE-ID ::= 13 -id-UE-ContextInformation ProtocolIE-ID ::= 14 -id-UE-HistoryInformation ProtocolIE-ID ::= 15 -id-UE-X2AP-ID ProtocolIE-ID ::= 16 -id-CriticalityDiagnostics ProtocolIE-ID ::= 17 -id-E-RABs-SubjectToStatusTransfer-List ProtocolIE-ID ::= 18 -id-E-RABs-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 19 -id-ServedCells ProtocolIE-ID ::= 20 -id-GlobalENB-ID ProtocolIE-ID ::= 21 -id-TimeToWait ProtocolIE-ID ::= 22 -id-GUMMEI-ID ProtocolIE-ID ::= 23 -id-GUGroupIDList ProtocolIE-ID ::= 24 -id-ServedCellsToAdd ProtocolIE-ID ::= 25 -id-ServedCellsToModify ProtocolIE-ID ::= 26 -id-ServedCellsToDelete ProtocolIE-ID ::= 27 -id-Registration-Request ProtocolIE-ID ::= 28 -id-CellToReport ProtocolIE-ID ::= 29 -id-ReportingPeriodicity ProtocolIE-ID ::= 30 -id-CellToReport-Item ProtocolIE-ID ::= 31 -id-CellMeasurementResult ProtocolIE-ID ::= 32 -id-CellMeasurementResult-Item ProtocolIE-ID ::= 33 -id-GUGroupIDToAddList ProtocolIE-ID ::= 34 -id-GUGroupIDToDeleteList ProtocolIE-ID ::= 35 -id-SRVCCOperationPossible ProtocolIE-ID ::= 36 -id-Measurement-ID ProtocolIE-ID ::= 37 -id-ReportCharacteristics ProtocolIE-ID ::= 38 -id-ENB1-Measurement-ID ProtocolIE-ID ::= 39 -id-ENB2-Measurement-ID ProtocolIE-ID ::= 40 -id-Number-of-Antennaports ProtocolIE-ID ::= 41 -id-CompositeAvailableCapacityGroup ProtocolIE-ID ::= 42 -id-ENB1-Cell-ID ProtocolIE-ID ::= 43 -id-ENB2-Cell-ID ProtocolIE-ID ::= 44 -id-ENB2-Proposed-Mobility-Parameters ProtocolIE-ID ::= 45 -id-ENB1-Mobility-Parameters ProtocolIE-ID ::= 46 -id-ENB2-Mobility-Parameters-Modification-Range ProtocolIE-ID ::= 47 -id-FailureCellPCI ProtocolIE-ID ::= 48 -id-Re-establishmentCellECGI ProtocolIE-ID ::= 49 -id-FailureCellCRNTI ProtocolIE-ID ::= 50 -id-ShortMAC-I ProtocolIE-ID ::= 51 -id-SourceCellECGI ProtocolIE-ID ::= 52 -id-FailureCellECGI ProtocolIE-ID ::= 53 -id-HandoverReportType ProtocolIE-ID ::= 54 -id-PRACH-Configuration ProtocolIE-ID ::= 55 -id-MBSFN-Subframe-Info ProtocolIE-ID ::= 56 -id-ServedCellsToActivate ProtocolIE-ID ::= 57 -id-ActivatedCellList ProtocolIE-ID ::= 58 -id-DeactivationIndication ProtocolIE-ID ::= 59 -id-UE-RLF-Report-Container ProtocolIE-ID ::= 60 - -END \ No newline at end of file diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-Containers.asn b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-Containers.asn deleted file mode 100644 index 7cf4220142..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-Containers.asn +++ /dev/null @@ -1,194 +0,0 @@ --- ************************************************************** --- --- Container definitions --- --- ************************************************************** - -X2AP-Containers { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-Containers (5) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - maxPrivateIEs, - maxProtocolExtensions, - maxProtocolIEs, - Criticality, - Presence, - PrivateIE-ID, - ProtocolIE-ID -FROM X2AP-CommonDataTypes; - --- ************************************************************** --- --- Class Definition for Protocol IEs --- --- ************************************************************** - -X2AP-PROTOCOL-IES ::= CLASS { - &id ProtocolIE-ID UNIQUE, - &criticality Criticality, - &Value, - &presence Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - TYPE &Value - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Protocol IEs --- --- ************************************************************** - -X2AP-PROTOCOL-IES-PAIR ::= CLASS { - &id ProtocolIE-ID UNIQUE, - &firstCriticality Criticality, - &FirstValue, - &secondCriticality Criticality, - &SecondValue, - &presence Presence -} -WITH SYNTAX { - ID &id - FIRST CRITICALITY &firstCriticality - FIRST TYPE &FirstValue - SECOND CRITICALITY &secondCriticality - SECOND TYPE &SecondValue - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Protocol Extensions --- --- ************************************************************** - -X2AP-PROTOCOL-EXTENSION ::= CLASS { - &id ProtocolIE-ID UNIQUE, - &criticality Criticality, - &Extension, - &presence Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - EXTENSION &Extension - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Private IEs --- --- ************************************************************** - -X2AP-PRIVATE-IES ::= CLASS { - &id PrivateIE-ID, - &criticality Criticality, - &Value, - &presence Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - TYPE &Value - PRESENCE &presence -} - --- ************************************************************** --- --- Container for Protocol IEs --- --- ************************************************************** - -ProtocolIE-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= - SEQUENCE (SIZE (0..maxProtocolIEs)) OF - ProtocolIE-Field {{IEsSetParam}} - -ProtocolIE-Single-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= - ProtocolIE-Field {{IEsSetParam}} - -ProtocolIE-Field {X2AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { - id X2AP-PROTOCOL-IES.&id ({IEsSetParam}), - criticality X2AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), - value X2AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) -} - --- ************************************************************** --- --- Container for Protocol IE Pairs --- --- ************************************************************** - -ProtocolIE-ContainerPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= - SEQUENCE (SIZE (0..maxProtocolIEs)) OF - ProtocolIE-FieldPair {{IEsSetParam}} - -ProtocolIE-FieldPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { - id X2AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), - firstCriticality X2AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), - firstValue X2AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), - secondCriticality X2AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), - secondValue X2AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) -} - --- ************************************************************** --- --- Container Lists for Protocol IE Containers --- --- ************************************************************** - -ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES : IEsSetParam} ::= - SEQUENCE (SIZE (lowerBound..upperBound)) OF - ProtocolIE-Container {{IEsSetParam}} - -ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= - SEQUENCE (SIZE (lowerBound..upperBound)) OF - ProtocolIE-ContainerPair {{IEsSetParam}} - --- ************************************************************** --- --- Container for Protocol Extensions --- --- ************************************************************** - -ProtocolExtensionContainer {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= - SEQUENCE (SIZE (1..maxProtocolExtensions)) OF - ProtocolExtensionField {{ExtensionSetParam}} - -ProtocolExtensionField {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { - id X2AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), - criticality X2AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), - extensionValue X2AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) -} - --- ************************************************************** --- --- Container for Private IEs --- --- ************************************************************** - -PrivateIE-Container {X2AP-PRIVATE-IES : IEsSetParam} ::= - SEQUENCE (SIZE (1..maxPrivateIEs)) OF - PrivateIE-Field {{IEsSetParam}} - -PrivateIE-Field {X2AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { - id X2AP-PRIVATE-IES.&id ({IEsSetParam}), - criticality X2AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), - value X2AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) -} - -END \ No newline at end of file diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-IEs.asn b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-IEs.asn deleted file mode 100644 index 26cb154fc4..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-IEs.asn +++ /dev/null @@ -1,989 +0,0 @@ --- ************************************************************** --- --- Information Element Definitions --- --- ************************************************************** - -X2AP-IEs { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-IEs (2) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - - id-E-RAB-Item, - id-Number-of-Antennaports, - id-MBSFN-Subframe-Info, - id-PRACH-Configuration, - - maxnoofBearers, - maxCellineNB, - maxEARFCN, - maxInterfaces, - - maxnoofBPLMNs, - maxnoofCells, - maxnoofEPLMNs, - maxnoofEPLMNsPlusOne, - maxnoofForbLACs, - maxnoofForbTACs, - maxnoofNeighbours, - maxnoofPRBs, - maxNrOfErrors, - maxPools, - maxnoofMBSFN - -FROM X2AP-Constants - - Criticality, - ProcedureCode, - ProtocolIE-ID, - TriggeringMessage, - maxProtocolExtensions - -FROM X2AP-CommonDataTypes - - IE -FROM X2AP-PDU; - -IE-Extensions ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF IE - --- A - -AS-SecurityInformation ::= SEQUENCE { - key-eNodeB-star Key-eNodeB-Star, - nextHopChainingCount NextHopChainingCount, - -- iE-Extensions ProtocolExtensionContainer { { AS-SecurityInformation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -AllocationAndRetentionPriority ::= SEQUENCE { - priorityLevel PriorityLevel, - pre-emptionCapability Pre-emptionCapability, - pre-emptionVulnerability Pre-emptionVulnerability, - -- iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ActivatedCellList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ActivatedCellList-Item - -ActivatedCellList-Item::= SEQUENCE { - ecgi ECGI, - -- iE-Extensions ProtocolExtensionContainer { { ActivatedCellList-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- B - - -BitRate ::= INTEGER (0..10000000000) -BroadcastPLMNs-Item ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF PLMN-Identity - - --- C - -CapacityValue ::= INTEGER (0..100) - -CellCapacityClassValue ::= INTEGER (1..100, ...) - -CellToReport-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF IE - -CellToReport-Item ::= SEQUENCE { - cell-ID ECGI, - -- iE-Extensions ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CellMeasurementResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF IE - -CellMeasurementResult-Item ::= SEQUENCE { - cell-ID ECGI, - hWOverLoadIndicator HWLoadIndicator OPTIONAL, - s1TNLOverLoadIndicator S1TNLLoadIndicator OPTIONAL, - radioResourceStatus RadioResourceStatus OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {CellMeasurementResult-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ReportingPeriodicity ::= ENUMERATED { - one-thousand-ms, - two-thousand-ms, - five-thousand-ms, - ten-thousand-ms, - ... -} - -Cause ::= CHOICE { - radioNetwork CauseRadioNetwork, - transport CauseTransport, - protocol CauseProtocol, - misc CauseMisc, - ... -} - -CauseMisc ::= ENUMERATED { - control-processing-overload, - hardware-failure, - om-intervention, - not-enough-user-plane-processing-resources, - unspecified, - ... -} - -CauseProtocol ::= ENUMERATED { - transfer-syntax-error, - abstract-syntax-error-reject, - abstract-syntax-error-ignore-and-notify, - message-not-compatible-with-receiver-state, - semantic-error, - unspecified, - abstract-syntax-error-falsely-constructed-message, - ... -} - -CauseRadioNetwork ::= ENUMERATED { - handover-desirable-for-radio-reasons, - time-critical-handover, - resource-optimisation-handover, - reduce-load-in-serving-cell, - partial-handover, - unknown-new-eNB-UE-X2AP-ID, - unknown-old-eNB-UE-X2AP-ID, - unknown-pair-of-UE-X2AP-ID, - ho-target-not-allowed, - tx2relocoverall-expiry, - trelocprep-expiry, - cell-not-available, - no-radio-resources-available-in-target-cell, - invalid-MME-GroupID, - unknown-MME-Code, - encryption-and-or-integrity-protection-algorithms-not-supported, - reportCharacteristicsEmpty, - noReportPeriodicity, - existingMeasurementID, - unknown-eNB-Measurement-ID, - measurement-temporarily-not-available, - unspecified, - ..., - load-balancing, - handover-optimisation, - value-out-of-allowed-range, - multiple-E-RAB-ID-instances, - switch-off-ongoing, - not-supported-QCI-value - -} - -CauseTransport ::= ENUMERATED { - transport-resource-unavailable, - unspecified, - ... -} - -Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ... } - -CellInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF IE - -CellInformation-Item ::= SEQUENCE { - cell-ID ECGI, - ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication OPTIONAL, - ul-HighInterferenceIndicationInfo UL-HighInterferenceIndicationInfo OPTIONAL, - relativeNarrowbandTxPower RelativeNarrowbandTxPower OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {CellInformation-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CellType ::= SEQUENCE { - cell-Size Cell-Size, - -- iE-Extensions ProtocolExtensionContainer { { CellType-ExtIEs}} OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CompositeAvailableCapacityGroup ::= SEQUENCE { - dL-CompositeAvailableCapacity CompositeAvailableCapacity, - uL-CompositeAvailableCapacity CompositeAvailableCapacity, - -- iE-Extensions ProtocolExtensionContainer { { CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CompositeAvailableCapacity ::= SEQUENCE { - cellCapacityClassValue CellCapacityClassValue OPTIONAL, - capacityValue CapacityValue, - -- iE-Extensions ProtocolExtensionContainer { { CompositeAvailableCapacity-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -COUNTvalue ::= SEQUENCE { - pDCP-SN PDCP-SN, - hFN HFN, - -- iE-Extensions ProtocolExtensionContainer { { COUNTvalue-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CriticalityDiagnostics ::= SEQUENCE { - procedureCode ProcedureCode OPTIONAL, - triggeringMessage TriggeringMessage OPTIONAL, - procedureCriticality Criticality OPTIONAL, - iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF CriticalityDiagnostics-IE-Elm - -CriticalityDiagnostics-IE-Elm ::= SEQUENCE { - iECriticality Criticality, - iE-ID ProtocolIE-ID, - typeOfError TypeOfError, - -- iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CRNTI ::= BIT STRING (SIZE (16)) - -CyclicPrefixDL ::= ENUMERATED { - normal, - extended, - ... -} - -CyclicPrefixUL ::= ENUMERATED { - normal, - extended, - ... -} - - --- D - -DeactivationIndication::= ENUMERATED { - deactivated, - ... -} - -DL-Forwarding ::= ENUMERATED { - dL-forwardingProposed, - ... -} - --- E - -E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF IE - -E-RABs-Admitted-Item ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - uL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, - dL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF IE - -E-RABs-ToBeSetup-Item ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, - dL-Forwarding DL-Forwarding OPTIONAL, - uL-GTPtunnelEndpoint GTPtunnelEndpoint, - -- iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF IE - -E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, - uL-COUNTvalue COUNTvalue, - dL-COUNTvalue COUNTvalue, - -- iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -EARFCN ::= INTEGER (0..maxEARFCN) - -FDD-Info ::= SEQUENCE { - uL-EARFCN EARFCN, - dL-EARFCN EARFCN, - uL-Transmission-Bandwidth Transmission-Bandwidth, - dL-Transmission-Bandwidth Transmission-Bandwidth, - -- iE-Extensions ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TDD-Info ::= SEQUENCE { - eARFCN EARFCN, - transmission-Bandwidth Transmission-Bandwidth, - subframeAssignment SubframeAssignment, - specialSubframe-Info SpecialSubframe-Info, - -- iE-Extensions ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -EUTRA-Mode-Info ::= CHOICE { - fDD FDD-Info, - tDD TDD-Info, - ... -} - -ECGI ::= SEQUENCE { - pLMN-Identity PLMN-Identity, - eUTRANcellIdentifier EUTRANCellIdentifier, - -- iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ENB-ID ::= CHOICE { - macro-eNB-ID BIT STRING (SIZE (20)), - home-eNB-ID BIT STRING (SIZE (28)), - ... -} - -EncryptionAlgorithms ::= BIT STRING (SIZE (16, ...)) - -EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMN-Identity - -E-RAB-ID ::= INTEGER (0..15, ...) - -E-RAB-Level-QoS-Parameters ::= SEQUENCE { - qCI QCI, - allocationAndRetentionPriority AllocationAndRetentionPriority, - gbrQosInformation GBR-QosInformation OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { { E-RAB-Level-QoS-Parameters-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RAB-List ::= SEQUENCE (SIZE(1.. maxnoofBearers)) OF IE - -E-RAB-Item ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - cause Cause, - -- iE-Extensions ProtocolExtensionContainer { {E-RAB-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) - -EUTRANTraceID ::= OCTET STRING (SIZE (8)) - - -EventType ::= ENUMERATED{ - change-of-serving-cell, - ... -} - - --- F - -ForbiddenInterRATs ::= ENUMERATED { - all, - geran, - utran, - cdma2000, - ..., - geranandutran, - cdma2000andutran - -} - -ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item - -ForbiddenTAs-Item ::= SEQUENCE { - pLMN-Identity PLMN-Identity, - forbiddenTACs ForbiddenTACs, - -- iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC - -ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item - -ForbiddenLAs-Item ::= SEQUENCE { - pLMN-Identity PLMN-Identity, - forbiddenLACs ForbiddenLACs, - -- iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC - -Fourframes ::= BIT STRING (SIZE (24)) - --- G - -GBR-QosInformation ::= SEQUENCE { - e-RAB-MaximumBitrateDL BitRate, - e-RAB-MaximumBitrateUL BitRate, - e-RAB-GuaranteedBitrateDL BitRate, - e-RAB-GuaranteedBitrateUL BitRate, - -- iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -GlobalENB-ID ::= SEQUENCE { - pLMN-Identity PLMN-Identity, - eNB-ID ENB-ID, - -- iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -GTPtunnelEndpoint ::= SEQUENCE { - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEI, - -- iE-Extensions ProtocolExtensionContainer { {GTPtunnelEndpoint-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -GTP-TEI ::= OCTET STRING (SIZE (4)) - -GUGroupIDList ::= SEQUENCE (SIZE (1..maxPools)) OF GU-Group-ID - - -GU-Group-ID ::= SEQUENCE { - pLMN-Identity PLMN-Identity, - mME-Group-ID MME-Group-ID, - -- iE-Extensions ProtocolExtensionContainer { {GU-Group-ID-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -GUMMEI ::= SEQUENCE { - - gU-Group-ID GU-Group-ID, - mME-Code MME-Code, - -- iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- H - -HandoverReportType ::= ENUMERATED { - hoTooEarly, - hoToWrongCell, - ... -} - -HandoverRestrictionList ::= SEQUENCE { - servingPLMN PLMN-Identity, - equivalentPLMNs EPLMNs OPTIONAL, - forbiddenTAs ForbiddenTAs OPTIONAL, - forbiddenLAs ForbiddenLAs OPTIONAL, - forbiddenInterRATs ForbiddenInterRATs OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -HFN ::= INTEGER (0..1048575) - -HWLoadIndicator ::= SEQUENCE { - dLHWLoadIndicator LoadIndicator, - uLHWLoadIndicator LoadIndicator, - -- iE-Extensions ProtocolExtensionContainer { { HWLoadIndicator-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- I - -IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16, ...)) - -InterfacesToTrace ::= BIT STRING (SIZE (8)) --- J --- K - - -Key-eNodeB-Star ::= BIT STRING (SIZE(256)) - --- L - - -LAC ::= OCTET STRING (SIZE (2)) --(EXCEPT ('0000'H|'FFFE'H)) - -LastVisitedCell-Item ::= CHOICE { - e-UTRAN-Cell LastVisitedEUTRANCellInformation, - uTRAN-Cell LastVisitedUTRANCellInformation, - gERAN-Cell LastVisitedGERANCellInformation, - ... -} - -LastVisitedEUTRANCellInformation ::= SEQUENCE { - global-Cell-ID ECGI, - cellType CellType, - time-UE-StayedInCell Time-UE-StayedInCell, - -- iE-Extensions ProtocolExtensionContainer { { LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -LastVisitedUTRANCellInformation ::= OCTET STRING - -LastVisitedGERANCellInformation ::= CHOICE { - undefined NULL, - ... -} - - -LoadIndicator ::= ENUMERATED { - lowLoad, - mediumLoad, - highLoad, - overLoad, - ... -} - - - -LocationReportingInformation ::= SEQUENCE { - eventType EventType, - reportArea ReportArea, - -- iE-Extensions ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- M - - -MME-Group-ID ::= OCTET STRING (SIZE (2)) - -MME-Code ::= OCTET STRING (SIZE (1)) - -Measurement-ID ::= INTEGER (1..4095, ...) - -MBSFN-Subframe-Infolist::= SEQUENCE (SIZE(1.. maxnoofMBSFN)) OF MBSFN-Subframe-Info - -MBSFN-Subframe-Info ::= SEQUENCE { - radioframeAllocationPeriod RadioframeAllocationPeriod, - radioframeAllocationOffset RadioframeAllocationOffset, - subframeAllocation SubframeAllocation, - -- iE-Extensions ProtocolExtensionContainer { { MBSFN-Subframe-Info-ExtIEs } } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -MobilityParametersModificationRange ::= SEQUENCE { - handoverTriggerChangeLowerLimit INTEGER (-20..20), - handoverTriggerChangeUpperLimit INTEGER (-20..20), - ... -} - -MobilityParametersInformation ::= SEQUENCE { - handoverTriggerChange INTEGER (-20..20), - ... -} - - --- N - -Neighbour-Information ::= SEQUENCE (SIZE (0..maxnoofNeighbours)) OF Neighbour-Information-Elm - -Neighbour-Information-Elm ::= SEQUENCE { - eCGI ECGI, - pCI PCI, - eARFCN EARFCN, - -- iE-Extensions ProtocolExtensionContainer { {Neighbour-Information-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -NextHopChainingCount ::= INTEGER (0..7) - -Number-of-Antennaports ::= ENUMERATED { - an1, - an2, - an4, - ... -} - --- O - -Oneframe ::= BIT STRING (SIZE (6)) - --- P - -PDCP-SN ::= INTEGER (0..4095) - -PCI ::= INTEGER (0..503, ...) - - -PLMN-Identity ::= OCTET STRING (SIZE(3)) - -PRACH-Configuration ::= SEQUENCE { - rootSequenceIndex INTEGER (0..837), - zeroCorrelationIndex INTEGER (0..15), - highSpeedFlag BOOLEAN, - prach-FreqOffset INTEGER (0..94), - prach-ConfigIndex INTEGER (0..63) OPTIONAL, -- present for TDD -- - -- iE-Extensions ProtocolExtensionContainer { {PRACH-Configuration-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -Pre-emptionCapability ::= ENUMERATED { - shall-not-trigger-pre-emption, - may-trigger-pre-emption -} - -Pre-emptionVulnerability ::= ENUMERATED { - not-pre-emptable, - pre-emptable -} - -PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) - --- Q - -QCI ::= INTEGER (0..255) - --- R - - -ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) - -Registration-Request ::= ENUMERATED { - start, - stop, - ... -} - -RelativeNarrowbandTxPower ::= SEQUENCE { - - rNTP-PerPRB BIT STRING (SIZE(6..110, ...)), - rNTP-Threshold RNTP-Threshold, - numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, - p-B INTEGER (0..3,...), - pDCCH-InterferenceImpact INTEGER (0..4,...), - -- iE-Extensions ProtocolExtensionContainer { { RelativeNarrowbandTxPower-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ReportArea ::= ENUMERATED{ - ecgi, - ... -} - -ReportCharacteristics ::= BIT STRING (SIZE (32)) - -RNTP-Threshold ::= ENUMERATED { - minusInfinity, - minusEleven, - minusTen, - minusNine, - minusEight, - minusSeven, - minusSix, - minusFive, - minusFour, - minusThree, - minusTwo, - minusOne, - zero, - one, - two, - three, - ... -} - -RRC-Context ::= OCTET STRING - - -RadioResourceStatus ::= SEQUENCE { - dL-GBR-PRB-usage DL-GBR-PRB-usage, - uL-GBR-PRB-usage UL-GBR-PRB-usage, - dL-non-GBR-PRB-usage DL-non-GBR-PRB-usage, - uL-non-GBR-PRB-usage UL-non-GBR-PRB-usage, - dL-Total-PRB-usage DL-Total-PRB-usage, - uL-Total-PRB-usage UL-Total-PRB-usage, - -- iE-Extensions ProtocolExtensionContainer { {RadioResourceStatus-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -DL-GBR-PRB-usage::= INTEGER (0..100) - -UL-GBR-PRB-usage::= INTEGER (0..100) - -DL-non-GBR-PRB-usage::= INTEGER (0..100) - -UL-non-GBR-PRB-usage::= INTEGER (0..100) - -DL-Total-PRB-usage::= INTEGER (0..100) - -UL-Total-PRB-usage::= INTEGER (0..100) - -RadioframeAllocationPeriod ::= ENUMERATED{ - n1, - n2, - n4, - n8, - n16, - n32, - ... -} - -RadioframeAllocationOffset ::= INTEGER (0..7, ...) - --- S - -S1TNLLoadIndicator ::= SEQUENCE { - dLS1TNLLoadIndicator LoadIndicator, - uLS1TNLLoadIndicator LoadIndicator, - -- iE-Extensions ProtocolExtensionContainer { { S1TNLLoadIndicator-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ServedCellsToActivate::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToActivate-Item - -ServedCellsToActivate-Item::= SEQUENCE { - ecgi ECGI, - -- iE-Extensions ProtocolExtensionContainer { { ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ServedCellsToModify::= SEQUENCE (SIZE (1..maxCellineNB)) OF IE - -ServedCellsToModify-Item::= SEQUENCE { - old-ecgi ECGI, - servedCellInfo ServedCell-Information, - neighbour-Info Neighbour-Information OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { { ServedCellsToModify-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -Old-ECGIs::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI - -ServedCells ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF ServedCellItem - -ServedCellItem ::= SEQUENCE { - servedCellInfo ServedCell-Information, - neighbour-Info Neighbour-Information OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ServedCell-Information ::= SEQUENCE { - pCI PCI, - cellId ECGI, - tAC TAC, - broadcastPLMNs BroadcastPLMNs-Item, - eUTRA-Mode-Info EUTRA-Mode-Info, - -- iE-Extensions ProtocolExtensionContainer { {ServedCell-Information-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ShortMAC-I ::= BIT STRING (SIZE(16)) - -SRVCCOperationPossible ::= ENUMERATED { - possible, - ... -} - -SubframeAssignment ::= ENUMERATED { - sa0, - sa1, - sa2, - sa3, - sa4, - sa5, - sa6, - ... -} - -SpecialSubframe-Info ::= SEQUENCE { - specialSubframePatterns SpecialSubframePatterns, - cyclicPrefixDL CyclicPrefixDL, - cyclicPrefixUL CyclicPrefixUL, - -- iE-Extensions ProtocolExtensionContainer { { SpecialSubframe-Info-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -SpecialSubframePatterns ::= ENUMERATED { - ssp0, - ssp1, - ssp2, - ssp3, - ssp4, - ssp5, - ssp6, - ssp7, - ssp8, - ... -} - -SubscriberProfileIDforRFP ::= INTEGER (1..256) - -SubframeAllocation ::= CHOICE { - oneframe Oneframe, - fourframes Fourframes, - ... -} - --- T - -TAC ::= OCTET STRING (SIZE (2)) - -TargeteNBtoSource-eNBTransparentContainer ::= OCTET STRING - - -TimeToWait ::= ENUMERATED { - v1s, - v2s, - v5s, - v10s, - v20s, - v60s, - ... -} - -Time-UE-StayedInCell ::= INTEGER (0..4095) - - -TraceActivation ::= SEQUENCE { - eUTRANTraceID EUTRANTraceID, - interfacesToTrace InterfacesToTrace, - traceDepth TraceDepth, - traceCollectionEntityIPAddress TraceCollectionEntityIPAddress, - -- iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TraceCollectionEntityIPAddress ::= BIT STRING (SIZE(1..160, ...)) - -TraceDepth ::= ENUMERATED { - minimum, - medium, - maximum, - minimumWithoutVendorSpecificExtension, - mediumWithoutVendorSpecificExtension, - maximumWithoutVendorSpecificExtension, - ... -} - -Transmission-Bandwidth ::= ENUMERATED { - bw6, - bw15, - bw25, - bw50, - bw75, - bw100, - ... -} - -TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) - -TypeOfError ::= ENUMERATED { - not-understood, - missing, - ... -} - --- U - -UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item - - -UE-S1AP-ID ::= INTEGER (0.. 4294967295) - -UE-X2AP-ID ::= INTEGER (0..4095) -- Value FFS - -UEAggregateMaximumBitRate ::= SEQUENCE { - uEaggregateMaximumBitRateDownlink BitRate, - uEaggregateMaximumBitRateUplink BitRate, - -- iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrate-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -UESecurityCapabilities ::= SEQUENCE { - encryptionAlgorithms EncryptionAlgorithms, - integrityProtectionAlgorithms IntegrityProtectionAlgorithms, - -- iE-Extensions ProtocolExtensionContainer { { UESecurityCapabilities-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -UE-ContextInformation ::= SEQUENCE { - mME-UE-S1AP-ID UE-S1AP-ID, - uESecurityCapabilities UESecurityCapabilities, - aS-SecurityInformation AS-SecurityInformation, - uEaggregateMaximumBitRate UEAggregateMaximumBitRate, - subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, - e-RABs-ToBeSetup-List E-RABs-ToBeSetup-List, - rRC-Context RRC-Context, - handoverRestrictionList HandoverRestrictionList OPTIONAL, - locationReportingInformation LocationReportingInformation OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {UE-ContextInformation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -UL-InterferenceOverloadIndication ::= SEQUENCE (SIZE(1..maxnoofPRBs)) OF UL-InterferenceOverloadIndication-Item - -UL-InterferenceOverloadIndication-Item ::= ENUMERATED { - high-interference, - medium-interference, - low-interference, - ... -} - -UL-HighInterferenceIndicationInfo ::= SEQUENCE (SIZE(1..maxCellineNB)) OF UL-HighInterferenceIndicationInfo-Item - -UL-HighInterferenceIndicationInfo-Item ::= SEQUENCE { - target-Cell-ID ECGI, - ul-interferenceindication UL-HighInterferenceIndication, - -- iE-Extensions ProtocolExtensionContainer { { UL-HighInterferenceIndicationInfo-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...)) - -UE-RLF-Report-Container::= OCTET STRING --- This IE is a transparent container and shall be encoded as the rlfReport field contained in the UEInformationResponse message as defined in TS 36.331 [9] - --- V --- W --- X --- Y --- Z - -END diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Contents.asn b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Contents.asn deleted file mode 100644 index 69d32f8085..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Contents.asn +++ /dev/null @@ -1,951 +0,0 @@ --- ************************************************************** --- --- PDU definitions for X2AP. --- --- ************************************************************** - -X2AP-PDU-Contents { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-PDU-Contents (1) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - - AS-SecurityInformation, - Cause, - CompositeAvailableCapacityGroup, - COUNTvalue, - CriticalityDiagnostics, - CRNTI, - DeactivationIndication, - DL-Forwarding, - ECGI, - E-RAB-ID, - E-RAB-Level-QoS-Parameters, - E-RAB-List, - EUTRANTraceID, - GlobalENB-ID, - GTPtunnelEndpoint, - GUGroupIDList, - GUMMEI, - HandoverReportType, - HandoverRestrictionList, - LocationReportingInformation, - Neighbour-Information, - PCI, - PDCP-SN, - PLMN-Identity, - ReceiveStatusofULPDCPSDUs, - Registration-Request, - RelativeNarrowbandTxPower, - RadioResourceStatus, - UE-RLF-Report-Container, - RRC-Context, - ServedCell-Information, - ServedCells, - ShortMAC-I, - SRVCCOperationPossible, - SubscriberProfileIDforRFP, - TargeteNBtoSource-eNBTransparentContainer, - TimeToWait, - TraceActivation, - TraceDepth, - - TransportLayerAddress, - UEAggregateMaximumBitRate, - UE-HistoryInformation, - UE-S1AP-ID, - UESecurityCapabilities, - UE-X2AP-ID, - UL-HighInterferenceIndicationInfo, - UL-InterferenceOverloadIndication, - HWLoadIndicator, - S1TNLLoadIndicator, - Measurement-ID, - ReportCharacteristics, - MobilityParametersInformation, - MobilityParametersModificationRange - - - - -FROM X2AP-IEs - - PrivateIE-Container{}, - ProtocolExtensionContainer{}, - ProtocolIE-Container{}, - ProtocolIE-ContainerList{}, - ProtocolIE-ContainerPair{}, - ProtocolIE-ContainerPairList{}, - ProtocolIE-Single-Container{}, - X2AP-PRIVATE-IES, - X2AP-PROTOCOL-EXTENSION, - X2AP-PROTOCOL-IES, - X2AP-PROTOCOL-IES-PAIR -FROM X2AP-Containers - - - id-ActivatedCellList, - id-Cause, - id-CellInformation, - id-CellInformation-Item, - id-CellMeasurementResult, - id-CellMeasurementResult-Item, - id-CellToReport, - id-CellToReport-Item, - id-CompositeAvailableCapacityGroup, - id-CriticalityDiagnostics, - id-DeactivationIndication, - id-E-RABs-Admitted-Item, - id-E-RABs-Admitted-List, - id-E-RABs-NotAdmitted-List, - id-E-RABs-SubjectToStatusTransfer-List, - id-E-RABs-SubjectToStatusTransfer-Item, - id-E-RABs-ToBeSetup-Item, - id-GlobalENB-ID, - id-GUGroupIDList, - id-GUGroupIDToAddList, - id-GUGroupIDToDeleteList, - id-GUMMEI-ID, - id-New-eNB-UE-X2AP-ID, - id-Old-eNB-UE-X2AP-ID, - id-Registration-Request, - id-ReportingPeriodicity, - id-ServedCells, - id-ServedCellsToActivate, - id-ServedCellsToAdd, - id-ServedCellsToModify, - id-ServedCellsToDelete, - id-SRVCCOperationPossible, - id-TargetCell-ID, - id-TargeteNBtoSource-eNBTransparentContainer, - id-TimeToWait, - id-TraceActivation, - id-UE-ContextInformation, - id-UE-HistoryInformation, - id-UE-X2AP-ID, - id-Measurement-ID, - id-ReportCharacteristics, - id-ENB1-Measurement-ID, - id-ENB2-Measurement-ID, - id-ENB1-Cell-ID, - id-ENB2-Cell-ID, - id-ENB2-Proposed-Mobility-Parameters, - id-ENB1-Mobility-Parameters, - id-ENB2-Mobility-Parameters-Modification-Range, - id-FailureCellPCI, - id-Re-establishmentCellECGI, - id-FailureCellCRNTI, - id-ShortMAC-I, - id-SourceCellECGI, - id-FailureCellECGI, - id-HandoverReportType, - id-UE-RLF-Report-Container, - - - maxCellineNB, - maxnoofBearers, - maxnoofPDCP-SN - -FROM X2AP-Constants; - --- ************************************************************** --- --- HANDOVER REQUEST --- --- ************************************************************** - -HandoverRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{HandoverRequest-IEs}}, - ... -} - -HandoverRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | - { ID id-TargetCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory } | - { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory } | - { ID id-UE-ContextInformation CRITICALITY reject TYPE UE-ContextInformation PRESENCE mandatory } | - { ID id-UE-HistoryInformation CRITICALITY ignore TYPE UE-HistoryInformation PRESENCE mandatory } | - { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional } | - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }, - ... -} - -UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetup-ItemIEs} } - -E-RABs-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE E-RABs-ToBeSetup-Item PRESENCE mandatory }, - ... -} - -E-RABs-ToBeSetup-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- HANDOVER REQUEST ACKNOWLEDGE --- --- ************************************************************** - -HandoverRequestAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{HandoverRequestAcknowledge-IEs}}, - ... -} - -HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory} | - { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE E-RABs-Admitted-List PRESENCE mandatory} | - { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional} | - { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -E-RAB-List ::= SEQUENCE (SIZE(1.. maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RAB-ItemIEs} } - -E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ItemIEs} } - -E-RABs-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-E-RABs-Admitted-Item CRITICALITY ignore TYPE E-RABs-Admitted-Item PRESENCE mandatory } -} - -E-RABs-Admitted-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- HANDOVER PREPARATION FAILURE --- --- ************************************************************** - -HandoverPreparationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{HandoverPreparationFailure-IEs}}, - ... -} - -HandoverPreparationFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - - ... -} - --- ************************************************************** --- --- Handover Report --- --- ************************************************************** - -HandoverReport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{HandoverReport-IEs}}, - ... -} - -HandoverReport-IEs X2AP-PROTOCOL-IES ::= { - { ID id-HandoverReportType CRITICALITY ignore TYPE HandoverReportType PRESENCE mandatory}| - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | - { ID id-SourceCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| - { ID id-FailureCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory} | - { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to “HO to Wrong Cell” -- , - ... -} - --- ************************************************************** --- --- SN Status Transfer --- --- ************************************************************** - -SNStatusTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{SNStatusTransfer-IEs}}, - ... -} - -SNStatusTransfer-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory} | - { ID id-E-RABs-SubjectToStatusTransfer-List CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-List PRESENCE mandatory} , - ... -} - -E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { { E-RABs-SubjectToStatusTransfer-ItemIEs} } - -E-RABs-SubjectToStatusTransfer-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-E-RABs-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-Item PRESENCE mandatory } -} - -E-RABs-SubjectToStatusTransfer-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- UE Context Release --- --- ************************************************************** - -UEContextRelease ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UEContextRelease-IEs}}, - ... -} - -UEContextRelease-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory} , - ... -} - - --- ************************************************************** --- --- HANDOVER CANCEL --- --- ************************************************************** - -HandoverCancel ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{HandoverCancel-IEs}}, - ... -} - -HandoverCancel-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- ERROR INDICATION --- --- ************************************************************** - -ErrorIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, - ... -} - -ErrorIndication-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional} , - ... -} - --- ************************************************************** --- --- Reset Request --- --- ************************************************************** - -ResetRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ResetRequest-IEs}}, - ... -} - -ResetRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- Reset Response --- --- ************************************************************** - -ResetResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ResetResponse-IEs}}, - ... -} - -ResetResponse-IEs X2AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- X2 SETUP REQUEST --- --- ************************************************************** - -X2SetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}}, - ... -} - -X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory} | - { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory} | - { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}, -... -} - - - --- ************************************************************** --- --- X2 SETUP RESPONSE --- --- ************************************************************** - -X2SetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}}, - ... -} - -X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { - { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory} | - { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory} | - { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - - --- ************************************************************** --- --- X2 SETUP FAILURE --- --- ************************************************************** - -X2SetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2SetupFailure-IEs}}, - ... -} - -X2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | - { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - - ... -} - --- ************************************************************** --- --- LOAD INFORMATION --- --- ************************************************************** - -LoadInformation ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{LoadInformation-IEs}}, - ... -} - -LoadInformation-IEs X2AP-PROTOCOL-IES ::= { - { ID id-CellInformation CRITICALITY ignore TYPE CellInformation-List PRESENCE mandatory} , - ... -} - -CellInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellInformation-ItemIEs} } - -CellInformation-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-CellInformation-Item CRITICALITY ignore TYPE CellInformation-Item PRESENCE mandatory } -} - -CellInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE --- --- ************************************************************** - -ENBConfigurationUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ENBConfigurationUpdate-IEs}}, - ... -} - -ENBConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ServedCellsToAdd CRITICALITY reject TYPE ServedCells PRESENCE optional} | - { ID id-ServedCellsToModify CRITICALITY reject TYPE ServedCellsToModify PRESENCE optional} | - { ID id-ServedCellsToDelete CRITICALITY reject TYPE Old-ECGIs PRESENCE optional} | - { ID id-GUGroupIDToAddList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional} | - { ID id-GUGroupIDToDeleteList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}, - ... -} - -ServedCellsToModify::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToModify-Item - -ServedCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { -{ ID id-DeactivationIndication CRITICALITY ignore EXTENSION DeactivationIndication PRESENCE optional }, - ... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE ACKNOWLEDGE --- --- ************************************************************** - -ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateAcknowledge-IEs}}, - ... -} - -ENBConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, -... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE FAIURE --- --- ************************************************************** - -ENBConfigurationUpdateFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateFailure-IEs}}, - ... -} - -ENBConfigurationUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - - --- ************************************************************** --- --- Resource Status Request --- --- ************************************************************** - -ResourceStatusRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ResourceStatusRequest-IEs}}, - ... -} - -ResourceStatusRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| - { ID id-ENB2-Measurement-ID CRITICALITY ignore TYPE Measurement-ID PRESENCE conditional}|-- The IE shall be present if the Registration Request IE is set to “Stop”-- - { ID id-Registration-Request CRITICALITY reject TYPE Registration-Request PRESENCE mandatory} | - { ID id-ReportCharacteristics CRITICALITY reject TYPE ReportCharacteristics PRESENCE optional} | - { ID id-CellToReport CRITICALITY ignore TYPE CellToReport-List PRESENCE mandatory} | - { ID id-ReportingPeriodicity CRITICALITY ignore TYPE ReportingPeriodicity PRESENCE optional} , - ... -} - - -CellToReport-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellToReport-ItemIEs} } - -CellToReport-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-CellToReport-Item CRITICALITY ignore TYPE CellToReport-Item PRESENCE mandatory } -} - -CellToReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Resource Status Response --- --- ************************************************************** - -ResourceStatusResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ResourceStatusResponse-IEs}}, - ... -} - -ResourceStatusResponse-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| - { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- Resource Status Failure --- --- ************************************************************** - -ResourceStatusFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ResourceStatusFailure-IEs}}, - ... -} - -ResourceStatusFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| - { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- Resource Status Update --- --- ************************************************************** - -ResourceStatusUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ResourceStatusUpdate-IEs}}, - ... -} - -ResourceStatusUpdate-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| - { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| - { ID id-CellMeasurementResult CRITICALITY ignore TYPE CellMeasurementResult-List PRESENCE mandatory}, - ... -} - -CellMeasurementResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellMeasurementResult-ItemIEs} } - -CellMeasurementResult-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-CellMeasurementResult-Item CRITICALITY ignore TYPE CellMeasurementResult-Item PRESENCE mandatory } -} - -CellMeasurementResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { -{ - ID id-CompositeAvailableCapacityGroup CRITICALITY ignore EXTENSION CompositeAvailableCapacityGroup PRESENCE optional }, - ... -} - --- ************************************************************** --- --- PRIVATE MESSAGE --- --- ************************************************************** - -PrivateMessage ::= SEQUENCE { - privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, - ... -} - -PrivateMessage-IEs X2AP-PRIVATE-IES ::= { - ... -} - --- ************************************************************** --- --- MOBILITY CHANGE REQUEST --- --- ************************************************************** - -MobilityChangeRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{MobilityChangeRequest-IEs}}, - ... -} - -MobilityChangeRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory }| - { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory }| - { ID id-ENB1-Mobility-Parameters CRITICALITY ignore TYPE MobilityParametersInformation PRESENCE optional }| - { ID id-ENB2-Proposed-Mobility-Parameters CRITICALITY reject TYPE MobilityParametersInformation PRESENCE mandatory }| - { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- MOBILITY CHANGE ACKNOWLEDGE --- --- ************************************************************** - -MobilityChangeAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{MobilityChangeAcknowledge-IEs}}, - ... -} - -MobilityChangeAcknowledge-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory }| - { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- MOBILITY CHANGE FAILURE --- --- ************************************************************** - -MobilityChangeFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{MobilityChangeFailure-IEs}}, - ... -} - -MobilityChangeFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory }| - { ID id-ENB2-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-ENB2-Mobility-Parameters-Modification-Range CRITICALITY ignore TYPE MobilityParametersModificationRange PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- Radio Link Failure Indication --- --- ************************************************************** - -RLFIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{RLFIndication-IEs}}, - ... -} - -RLFIndication-IEs X2AP-PROTOCOL-IES ::= { - { ID id-FailureCellPCI CRITICALITY ignore TYPE PCI PRESENCE mandatory}| - { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| - { ID id-FailureCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE mandatory}| - { ID id-ShortMAC-I CRITICALITY ignore TYPE ShortMAC-I PRESENCE optional}| - { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- Cell Activation Request --- --- ************************************************************** - -CellActivationRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{CellActivationRequest-IEs}}, - ... -} - -CellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ServedCellsToActivate CRITICALITY reject TYPE ServedCellsToActivate PRESENCE mandatory }, - ... -} - -ServedCellsToActivate::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToActivate-Item - -ServedCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Cell Activation Response --- --- ************************************************************** - -CellActivationResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{CellActivationResponse-IEs}}, - ... -} - -CellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ActivatedCellList CRITICALITY ignore TYPE ActivatedCellList PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -ActivatedCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - ---************************************************************** --- --- CELL ACTIVATION FAILURE --- --- ************************************************************** - -CellActivationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{CellActivationFailure-IEs}}, - ... -} - -CellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -AS-SecurityInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -AllocationAndRetentionPriority-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -CompositeAvailableCapacityGroup-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -CompositeAvailableCapacity-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -CriticalityDiagnostics-IE-List-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -ECGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RAB-Level-QoS-Parameters-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -GBR-QosInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -GlobalENB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -GTPtunnelEndpoint-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -GU-Group-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -GUMMEI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -HandoverRestrictionList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -HWLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -LastVisitedEUTRANCellInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -LocationReportingInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::={ - ... -} - -MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -Neighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -PRACH-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -RelativeNarrowbandTxPower-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -RadioResourceStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -SpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -TraceActivation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -UEAggregate-MaximumBitrate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -UL-HighInterferenceIndicationInfo-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RAB-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-E-RAB-Item CRITICALITY ignore TYPE E-RAB-Item PRESENCE mandatory }, - ... -} - -ServedCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - { ID id-Number-of-Antennaports CRITICALITY ignore EXTENSION Number-of-Antennaports PRESENCE optional }| - { ID id-PRACH-Configuration CRITICALITY ignore EXTENSION PRACH-Configuration PRESENCE optional }| - { ID id-MBSFN-Subframe-Info CRITICALITY ignore EXTENSION MBSFN-Subframe-Infolist PRESENCE optional }, - ... -} - -END \ No newline at end of file diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Definitions.asn b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Definitions.asn deleted file mode 100755 index f722d5a146..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Definitions.asn +++ /dev/null @@ -1,240 +0,0 @@ --- ************************************************************** --- --- Elementary Procedure definitions --- --- ************************************************************** -X2AP-PDU-Descriptions { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-PDU-Descriptions (0) } -DEFINITIONS AUTOMATIC TAGS ::= -BEGIN --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** -IMPORTS -Criticality, -ProcedureCode -FROM X2AP-CommonDataTypes -CellActivationRequest, -CellActivationResponse, -CellActivationFailure, -ENBConfigurationUpdate, -ENBConfigurationUpdateAcknowledge, -ENBConfigurationUpdateFailure, -ErrorIndication, -HandoverCancel, -HandoverReport, -HandoverPreparationFailure, -HandoverRequest, -HandoverRequestAcknowledge, -LoadInformation, -PrivateMessage, -ResetRequest, -ResetResponse, -ResourceStatusFailure, -ResourceStatusRequest, -ResourceStatusResponse, -ResourceStatusUpdate, -RLFIndication, -SNStatusTransfer, -UEContextRelease, -X2SetupFailure, X2SetupRequest, -X2SetupResponse, -MobilityChangeRequest, -MobilityChangeAcknowledge, -MobilityChangeFailure -FROM X2AP-PDU-Contents -id-cellActivation, -id-eNBConfigurationUpdate, -id-errorIndication, -id-handoverCancel, -id-handoverReport, -id-handoverPreparation, -id-loadIndication, -id-privateMessage, -id-reset, -id-resourceStatusReporting, -id-resourceStatusReportingInitiation, -id-rLFIndication, -id-snStatusTransfer, -id-uEContextRelease, -id-x2Setup, -id-mobilitySettingsChange -FROM X2AP-Constants; --- ************************************************************** --- --- Interface Elementary Procedure Class --- --- ************************************************************** -X2AP-ELEMENTARY-PROCEDURE ::= CLASS { -&InitiatingMessage , -&SuccessfulOutcome OPTIONAL, -&UnsuccessfulOutcome OPTIONAL, -&procedureCode ProcedureCode UNIQUE, -&criticality Criticality DEFAULT ignore -} -WITH SYNTAX { -INITIATING MESSAGE &InitiatingMessage -[SUCCESSFUL OUTCOME &SuccessfulOutcome] -[UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] -PROCEDURE CODE &procedureCode -[CRITICALITY &criticality] -} --- ************************************************************** --- --- Interface PDU Definition --- --- ************************************************************** -X2AP-PDU ::= CHOICE { -initiatingMessage InitiatingMessage, -successfulOutcome SuccessfulOutcome, -unsuccessfulOutcome UnsuccessfulOutcome, -... -} -InitiatingMessage ::= SEQUENCE { -procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), -criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), -value X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} -SuccessfulOutcome ::= SEQUENCE { -procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), -criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), -value X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} -UnsuccessfulOutcome ::= SEQUENCE { -procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), -criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), -value X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} --- ************************************************************** --- --- Interface Elementary Procedure List --- --- ************************************************************** -X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= { -X2AP-ELEMENTARY-PROCEDURES-CLASS-1 | -X2AP-ELEMENTARY-PROCEDURES-CLASS-2 , -... -} -X2AP-ELEMENTARY-PROCEDURES-CLASS-1 X2AP-ELEMENTARY-PROCEDURE ::= { -handoverPreparation | -reset | -x2Setup | -resourceStatusReportingInitiation | -eNBConfigurationUpdate | -mobilitySettingsChange | -cellActivation , -... -} -X2AP-ELEMENTARY-PROCEDURES-CLASS-2 X2AP-ELEMENTARY-PROCEDURE ::= { -snStatusTransfer | -uEContextRelease | -handoverCancel | -errorIndication | -resourceStatusReporting | -loadIndication | -privateMessage | -rLFIndication | handoverReport, -... -} --- ************************************************************** --- --- Interface Elementary Procedures --- --- ************************************************************** -handoverPreparation X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE HandoverRequest -SUCCESSFUL OUTCOME HandoverRequestAcknowledge -UNSUCCESSFUL OUTCOME HandoverPreparationFailure -PROCEDURE CODE id-handoverPreparation -CRITICALITY reject -} -snStatusTransfer X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE SNStatusTransfer -PROCEDURE CODE id-snStatusTransfer -CRITICALITY ignore -} -uEContextRelease X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE UEContextRelease -PROCEDURE CODE id-uEContextRelease -CRITICALITY ignore -} -handoverCancel X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE HandoverCancel -PROCEDURE CODE id-handoverCancel -CRITICALITY ignore -} -handoverReport X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE HandoverReport -PROCEDURE CODE id-handoverReport -CRITICALITY ignore -} -errorIndication X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE ErrorIndication -PROCEDURE CODE id-errorIndication -CRITICALITY ignore -} -reset X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE ResetRequest -SUCCESSFUL OUTCOME ResetResponse -PROCEDURE CODE id-reset -CRITICALITY reject -} -x2Setup X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE X2SetupRequest -SUCCESSFUL OUTCOME X2SetupResponse -UNSUCCESSFUL OUTCOME X2SetupFailure -PROCEDURE CODE id-x2Setup -CRITICALITY reject -} -loadIndication X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE LoadInformation -PROCEDURE CODE id-loadIndication -CRITICALITY ignore -} -eNBConfigurationUpdate X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE ENBConfigurationUpdate -SUCCESSFUL OUTCOME ENBConfigurationUpdateAcknowledge -UNSUCCESSFUL OUTCOME ENBConfigurationUpdateFailure -PROCEDURE CODE id-eNBConfigurationUpdate -CRITICALITY reject -} -resourceStatusReportingInitiation X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE ResourceStatusRequest -SUCCESSFUL OUTCOME ResourceStatusResponse -UNSUCCESSFUL OUTCOME ResourceStatusFailure -PROCEDURE CODE id-resourceStatusReportingInitiation -CRITICALITY reject -} -resourceStatusReporting X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE ResourceStatusUpdate -PROCEDURE CODE id-resourceStatusReporting -CRITICALITY ignore -} -rLFIndication X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE RLFIndication -PROCEDURE CODE id-rLFIndication -CRITICALITY ignore -} -privateMessage X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE PrivateMessage -PROCEDURE CODE id-privateMessage -CRITICALITY ignore -} -mobilitySettingsChange X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE MobilityChangeRequest -SUCCESSFUL OUTCOME MobilityChangeAcknowledge -UNSUCCESSFUL OUTCOME MobilityChangeFailure -PROCEDURE CODE id-mobilitySettingsChange -CRITICALITY reject -} -cellActivation X2AP-ELEMENTARY-PROCEDURE ::= { -INITIATING MESSAGE CellActivationRequest -SUCCESSFUL OUTCOME CellActivationResponse -UNSUCCESSFUL OUTCOME CellActivationFailure -PROCEDURE CODE id-cellActivation -CRITICALITY reject -} -END \ No newline at end of file diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Descriptions.asn b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Descriptions.asn deleted file mode 100644 index 2a28a5b1d8..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU-Descriptions.asn +++ /dev/null @@ -1,241 +0,0 @@ --- ************************************************************** --- --- Elementary Procedure definitions --- --- ************************************************************** -X2AP-PDU-Descriptions { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-PDU-Descriptions (0) } -DEFINITIONS AUTOMATIC TAGS ::= -BEGIN --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** -IMPORTS - Criticality, - ProcedureCode - FROM X2AP-CommonDataTypes - CellActivationRequest, - CellActivationResponse, - CellActivationFailure, - ENBConfigurationUpdate, - ENBConfigurationUpdateAcknowledge, - ENBConfigurationUpdateFailure, - ErrorIndication, - HandoverCancel, - HandoverReport, - HandoverPreparationFailure, - HandoverRequest, - HandoverRequestAcknowledge, - LoadInformation, - PrivateMessage, - ResetRequest, - ResetResponse, - ResourceStatusFailure, - ResourceStatusRequest, - ResourceStatusResponse, - ResourceStatusUpdate, - RLFIndication, - SNStatusTransfer, - UEContextRelease, - X2SetupFailure, X2SetupRequest, - X2SetupResponse, - MobilityChangeRequest, - MobilityChangeAcknowledge, - MobilityChangeFailure - FROM X2AP-PDU-Contents - id-cellActivation, - id-eNBConfigurationUpdate, - id-errorIndication, - id-handoverCancel, - id-handoverReport, - id-handoverPreparation, - id-loadIndication, - id-privateMessage, - id-reset, - id-resourceStatusReporting, - id-resourceStatusReportingInitiation, - id-rLFIndication, - id-snStatusTransfer, - id-uEContextRelease, - id-x2Setup, - id-mobilitySettingsChange - FROM X2AP-Constants; - --- ************************************************************** --- --- Interface Elementary Procedure Class --- --- ************************************************************** -X2AP-ELEMENTARY-PROCEDURE ::= CLASS { - &InitiatingMessage , - &SuccessfulOutcome OPTIONAL, - &UnsuccessfulOutcome OPTIONAL, - &procedureCode ProcedureCode UNIQUE, - &criticality Criticality DEFAULT ignore -} -WITH SYNTAX { - INITIATING MESSAGE &InitiatingMessage - [SUCCESSFUL OUTCOME &SuccessfulOutcome] - [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] - PROCEDURE CODE &procedureCode - [CRITICALITY &criticality] -} --- ************************************************************** --- --- Interface PDU Definition --- --- ************************************************************** -X2AP-PDU ::= CHOICE { - initiatingMessage InitiatingMessage, - successfulOutcome SuccessfulOutcome, - unsuccessfulOutcome UnsuccessfulOutcome, - ... -} -InitiatingMessage ::= SEQUENCE { - procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), - criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} -SuccessfulOutcome ::= SEQUENCE { - procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), - criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} -UnsuccessfulOutcome ::= SEQUENCE { - procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), - criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} --- ************************************************************** --- --- Interface Elementary Procedure List --- --- ************************************************************** -X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= { - X2AP-ELEMENTARY-PROCEDURES-CLASS-1 | - X2AP-ELEMENTARY-PROCEDURES-CLASS-2 , - ... -} -X2AP-ELEMENTARY-PROCEDURES-CLASS-1 X2AP-ELEMENTARY-PROCEDURE ::= { - handoverPreparation | - reset | - x2Setup | - resourceStatusReportingInitiation | - eNBConfigurationUpdate | - mobilitySettingsChange | - cellActivation , - ... -} -X2AP-ELEMENTARY-PROCEDURES-CLASS-2 X2AP-ELEMENTARY-PROCEDURE ::= { - snStatusTransfer | - uEContextRelease | - handoverCancel | - errorIndication | - resourceStatusReporting | - loadIndication | - privateMessage | - rLFIndication | handoverReport, - ... -} --- ************************************************************** --- --- Interface Elementary Procedures --- --- ************************************************************** -handoverPreparation X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverRequest - SUCCESSFUL OUTCOME HandoverRequestAcknowledge - UNSUCCESSFUL OUTCOME HandoverPreparationFailure - PROCEDURE CODE id-handoverPreparation - CRITICALITY reject -} -snStatusTransfer X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE SNStatusTransfer - PROCEDURE CODE id-snStatusTransfer - CRITICALITY ignore -} -uEContextRelease X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UEContextRelease - PROCEDURE CODE id-uEContextRelease - CRITICALITY ignore -} -handoverCancel X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverCancel - PROCEDURE CODE id-handoverCancel - CRITICALITY ignore -} -handoverReport X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverReport - PROCEDURE CODE id-handoverReport - CRITICALITY ignore -} -errorIndication X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ErrorIndication - PROCEDURE CODE id-errorIndication - CRITICALITY ignore -} -reset X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ResetRequest - SUCCESSFUL OUTCOME ResetResponse - PROCEDURE CODE id-reset - CRITICALITY reject -} -x2Setup X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE X2SetupRequest - SUCCESSFUL OUTCOME X2SetupResponse - UNSUCCESSFUL OUTCOME X2SetupFailure - PROCEDURE CODE id-x2Setup - CRITICALITY reject -} -loadIndication X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE LoadInformation - PROCEDURE CODE id-loadIndication - CRITICALITY ignore -} -eNBConfigurationUpdate X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBConfigurationUpdate - SUCCESSFUL OUTCOME ENBConfigurationUpdateAcknowledge - UNSUCCESSFUL OUTCOME ENBConfigurationUpdateFailure - PROCEDURE CODE id-eNBConfigurationUpdate - CRITICALITY reject -} -resourceStatusReportingInitiation X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ResourceStatusRequest - SUCCESSFUL OUTCOME ResourceStatusResponse - UNSUCCESSFUL OUTCOME ResourceStatusFailure - PROCEDURE CODE id-resourceStatusReportingInitiation - CRITICALITY reject -} -resourceStatusReporting X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ResourceStatusUpdate - PROCEDURE CODE id-resourceStatusReporting - CRITICALITY ignore -} -rLFIndication X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE RLFIndication - PROCEDURE CODE id-rLFIndication - CRITICALITY ignore -} -privateMessage X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE PrivateMessage - PROCEDURE CODE id-privateMessage - CRITICALITY ignore -} -mobilitySettingsChange X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MobilityChangeRequest - SUCCESSFUL OUTCOME MobilityChangeAcknowledge - UNSUCCESSFUL OUTCOME MobilityChangeFailure - PROCEDURE CODE id-mobilitySettingsChange - CRITICALITY reject -} -cellActivation X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE CellActivationRequest - SUCCESSFUL OUTCOME CellActivationResponse - UNSUCCESSFUL OUTCOME CellActivationFailure - PROCEDURE CODE id-cellActivation - CRITICALITY reject -} -END diff --git a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU.asn b/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU.asn deleted file mode 100644 index 326987472e..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R.UNKNOWN/X2AP-PDU.asn +++ /dev/null @@ -1,199 +0,0 @@ --- ************************************************************** --- --- PDU definitions for X2AP. --- --- ************************************************************** - -X2AP-PDU { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-PDU (1) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - - maxProtocolIEs, - Criticality, - ProcedureCode, - ProtocolIE-ID -FROM X2AP-CommonDataTypes; - -IE ::= SEQUENCE { - id ProtocolIE-ID, - criticality Criticality, - value ANY -} - -X2AP-PDU ::= CHOICE { - initiatingMessage InitiatingMessage, - successfulOutcome SuccessfulOutcome, - unsuccessfulOutcome UnsuccessfulOutcome, - ... -} - -InitiatingMessage ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -SuccessfulOutcome ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -UnsuccessfulOutcome ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -HandoverRequest ::= SEQUENCE { - handoverRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverRequestAcknowledge ::= SEQUENCE { - handoverRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverPreparationFailure ::= SEQUENCE { - handoverPreparationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -SNStatusTransfer ::= SEQUENCE { - snStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextRelease ::= SEQUENCE { - ueContextRelease-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverCancel ::= SEQUENCE { - handoverCancel-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverReport ::= SEQUENCE { - handoverReport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ErrorIndication ::= SEQUENCE { - errorIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ResetRequest ::= SEQUENCE { - resetRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ResetResponse ::= SEQUENCE { - resetResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -X2SetupRequest ::= SEQUENCE { - x2SetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -X2SetupResponse ::= SEQUENCE { - x2SetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -X2SetupFailure ::= SEQUENCE { - x2SetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -LoadInformation ::= SEQUENCE { - loadInformation-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdate ::= SEQUENCE { - eNBConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - eNBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdateFailure ::= SEQUENCE { - eNBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ResourceStatusRequest ::= SEQUENCE { - resourceStatusRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ResourceStatusResponse ::= SEQUENCE { - resourceStatusResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ResourceStatusFailure ::= SEQUENCE { - resourceStatusFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ResourceStatusUpdate ::= SEQUENCE { - resourceStatusUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -RLFIndication ::= SEQUENCE { - rlfIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PrivateMessage ::= SEQUENCE { - privateMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MobilityChangeRequest ::= SEQUENCE { - mobilityChangeRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MobilityChangeAcknowledge ::= SEQUENCE { - mobilityChangeAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MobilityChangeFailure ::= SEQUENCE { - mobilityChangeFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -CellActivationRequest ::= SEQUENCE { - cellActivationRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -CellActivationResponse ::= SEQUENCE { - cellActivationResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -CellActivationFailure ::= SEQUENCE { - cellActivationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -END \ No newline at end of file diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/Makefile.inc b/openair2/X2AP/MESSAGES/ASN1/R11.2/Makefile.inc deleted file mode 100755 index 8dd84743c8..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/Makefile.inc +++ /dev/null @@ -1,462 +0,0 @@ -X2AP_ASN_MODULE_SOURCES= \ - X2ap-Criticality.c \ - X2ap-Presence.c \ - X2ap-PrivateIE-ID.c \ - X2ap-ProcedureCode.c \ - X2ap-ProtocolIE-ID.c \ - X2ap-TriggeringMessage.c \ - X2ap-IE-Extensions.c \ - X2ap-AS-SecurityInformation.c \ - X2ap-AllocationAndRetentionPriority.c \ - X2ap-ActivatedCellList.c \ - X2ap-ActivatedCellList-Item.c \ - X2ap-BitRate.c \ - X2ap-BroadcastPLMNs-Item.c \ - X2ap-CapacityValue.c \ - X2ap-CellCapacityClassValue.c \ - X2ap-CellToReport-List.c \ - X2ap-CellToReport-Item.c \ - X2ap-CellMeasurementResult-List.c \ - X2ap-CellMeasurementResult-Item.c \ - X2ap-ReportingPeriodicity.c \ - X2ap-Cause.c \ - X2ap-CauseMisc.c \ - X2ap-CauseProtocol.c \ - X2ap-CauseRadioNetwork.c \ - X2ap-CauseTransport.c \ - X2ap-Cell-Size.c \ - X2ap-CellInformation-List.c \ - X2ap-CellInformation-Item.c \ - X2ap-CellType.c \ - X2ap-CompositeAvailableCapacityGroup.c \ - X2ap-CompositeAvailableCapacity.c \ - X2ap-COUNTvalue.c \ - X2ap-CriticalityDiagnostics.c \ - X2ap-CriticalityDiagnostics-IE-List.c \ - X2ap-CriticalityDiagnostics-IE-Elm.c \ - X2ap-CRNTI.c \ - X2ap-CyclicPrefixDL.c \ - X2ap-CyclicPrefixUL.c \ - X2ap-DeactivationIndication.c \ - X2ap-DL-Forwarding.c \ - X2ap-E-RABs-Admitted-List.c \ - X2ap-E-RABs-Admitted-Item.c \ - X2ap-E-RABs-ToBeSetup-List.c \ - X2ap-E-RABs-ToBeSetup-Item.c \ - X2ap-E-RABs-SubjectToStatusTransfer-List.c \ - X2ap-E-RABs-SubjectToStatusTransfer-Item.c \ - X2ap-EARFCN.c \ - X2ap-FDD-Info.c \ - X2ap-TDD-Info.c \ - X2ap-EUTRA-Mode-Info.c \ - X2ap-ECGI.c \ - X2ap-ENB-ID.c \ - X2ap-EncryptionAlgorithms.c \ - X2ap-EPLMNs.c \ - X2ap-E-RAB-ID.c \ - X2ap-E-RAB-Level-QoS-Parameters.c \ - X2ap-E-RAB-List.c \ - X2ap-E-RAB-Item.c \ - X2ap-EUTRANCellIdentifier.c \ - X2ap-EUTRANTraceID.c \ - X2ap-EventType.c \ - X2ap-ForbiddenInterRATs.c \ - X2ap-ForbiddenTAs.c \ - X2ap-ForbiddenTAs-Item.c \ - X2ap-ForbiddenTACs.c \ - X2ap-ForbiddenLAs.c \ - X2ap-ForbiddenLAs-Item.c \ - X2ap-ForbiddenLACs.c \ - X2ap-Fourframes.c \ - X2ap-GBR-QosInformation.c \ - X2ap-GlobalENB-ID.c \ - X2ap-GTPtunnelEndpoint.c \ - X2ap-GTP-TEI.c \ - X2ap-GUGroupIDList.c \ - X2ap-GU-Group-ID.c \ - X2ap-GUMMEI.c \ - X2ap-HandoverReportType.c \ - X2ap-HandoverRestrictionList.c \ - X2ap-HFN.c \ - X2ap-HWLoadIndicator.c \ - X2ap-IntegrityProtectionAlgorithms.c \ - X2ap-InterfacesToTrace.c \ - X2ap-Key-eNodeB-Star.c \ - X2ap-LAC.c \ - X2ap-LastVisitedCell-Item.c \ - X2ap-LastVisitedEUTRANCellInformation.c \ - X2ap-LastVisitedUTRANCellInformation.c \ - X2ap-LastVisitedGERANCellInformation.c \ - X2ap-LoadIndicator.c \ - X2ap-LocationReportingInformation.c \ - X2ap-MME-Group-ID.c \ - X2ap-MME-Code.c \ - X2ap-Measurement-ID.c \ - X2ap-MBSFN-Subframe-Infolist.c \ - X2ap-MBSFN-Subframe-Info.c \ - X2ap-MobilityParametersModificationRange.c \ - X2ap-MobilityParametersInformation.c \ - X2ap-Neighbour-Information.c \ - X2ap-Neighbour-Information-Elm.c \ - X2ap-NextHopChainingCount.c \ - X2ap-Number-of-Antennaports.c \ - X2ap-Oneframe.c \ - X2ap-PDCP-SN.c \ - X2ap-PCI.c \ - X2ap-PLMN-Identity.c \ - X2ap-PRACH-Configuration.c \ - X2ap-Pre-emptionCapability.c \ - X2ap-Pre-emptionVulnerability.c \ - X2ap-PriorityLevel.c \ - X2ap-QCI.c \ - X2ap-ReceiveStatusofULPDCPSDUs.c \ - X2ap-Registration-Request.c \ - X2ap-RelativeNarrowbandTxPower.c \ - X2ap-ReportArea.c \ - X2ap-ReportCharacteristics.c \ - X2ap-RNTP-Threshold.c \ - X2ap-RRC-Context.c \ - X2ap-RadioResourceStatus.c \ - X2ap-DL-GBR-PRB-usage.c \ - X2ap-UL-GBR-PRB-usage.c \ - X2ap-DL-non-GBR-PRB-usage.c \ - X2ap-UL-non-GBR-PRB-usage.c \ - X2ap-DL-Total-PRB-usage.c \ - X2ap-UL-Total-PRB-usage.c \ - X2ap-RadioframeAllocationPeriod.c \ - X2ap-RadioframeAllocationOffset.c \ - X2ap-S1TNLLoadIndicator.c \ - X2ap-ServedCellsToActivate.c \ - X2ap-ServedCellsToActivate-Item.c \ - X2ap-ServedCellsToModify.c \ - X2ap-ServedCellsToModify-Item.c \ - X2ap-Old-ECGIs.c \ - X2ap-ServedCells.c \ - X2ap-ServedCellItem.c \ - X2ap-ServedCell-Information.c \ - X2ap-ShortMAC-I.c \ - X2ap-SRVCCOperationPossible.c \ - X2ap-SubframeAssignment.c \ - X2ap-SpecialSubframe-Info.c \ - X2ap-SpecialSubframePatterns.c \ - X2ap-SubscriberProfileIDforRFP.c \ - X2ap-SubframeAllocation.c \ - X2ap-TAC.c \ - X2ap-TargeteNBtoSource-eNBTransparentContainer.c \ - X2ap-TimeToWait.c \ - X2ap-Time-UE-StayedInCell.c \ - X2ap-TraceActivation.c \ - X2ap-TraceCollectionEntityIPAddress.c \ - X2ap-TraceDepth.c \ - X2ap-Transmission-Bandwidth.c \ - X2ap-TransportLayerAddress.c \ - X2ap-TypeOfError.c \ - X2ap-UE-HistoryInformation.c \ - X2ap-UE-S1AP-ID.c \ - X2ap-UE-X2AP-ID.c \ - X2ap-UEAggregateMaximumBitRate.c \ - X2ap-UESecurityCapabilities.c \ - X2ap-UE-ContextInformation.c \ - X2ap-UL-InterferenceOverloadIndication.c \ - X2ap-UL-InterferenceOverloadIndication-Item.c \ - X2ap-UL-HighInterferenceIndicationInfo.c \ - X2ap-UL-HighInterferenceIndicationInfo-Item.c \ - X2ap-UL-HighInterferenceIndication.c \ - X2ap-UE-RLF-Report-Container.c \ - X2ap-IE.c \ - X2AP-PDU.c \ - X2ap-InitiatingMessage.c \ - X2ap-SuccessfulOutcome.c \ - X2ap-UnsuccessfulOutcome.c \ - X2ap-HandoverRequest.c \ - X2ap-HandoverRequestAcknowledge.c \ - X2ap-HandoverPreparationFailure.c \ - X2ap-SNStatusTransfer.c \ - X2ap-UEContextRelease.c \ - X2ap-HandoverCancel.c \ - X2ap-HandoverReport.c \ - X2ap-ErrorIndication.c \ - X2ap-ResetRequest.c \ - X2ap-ResetResponse.c \ - X2ap-X2SetupRequest.c \ - X2ap-X2SetupResponse.c \ - X2ap-X2SetupFailure.c \ - X2ap-LoadInformation.c \ - X2ap-ENBConfigurationUpdate.c \ - X2ap-ENBConfigurationUpdateAcknowledge.c \ - X2ap-ENBConfigurationUpdateFailure.c \ - X2ap-ResourceStatusRequest.c \ - X2ap-ResourceStatusResponse.c \ - X2ap-ResourceStatusFailure.c \ - X2ap-ResourceStatusUpdate.c \ - X2ap-RLFIndication.c \ - X2ap-PrivateMessage.c \ - X2ap-MobilityChangeRequest.c \ - X2ap-MobilityChangeAcknowledge.c \ - X2ap-MobilityChangeFailure.c \ - X2ap-CellActivationRequest.c \ - X2ap-CellActivationResponse.c \ - X2ap-CellActivationFailure.c - -X2AP_ASN_MODULE_HEADERS= \ - X2ap-Criticality.h \ - X2ap-Presence.h \ - X2ap-PrivateIE-ID.h \ - X2ap-ProcedureCode.h \ - X2ap-ProtocolIE-ID.h \ - X2ap-TriggeringMessage.h \ - X2ap-IE-Extensions.h \ - X2ap-AS-SecurityInformation.h \ - X2ap-AllocationAndRetentionPriority.h \ - X2ap-ActivatedCellList.h \ - X2ap-ActivatedCellList-Item.h \ - X2ap-BitRate.h \ - X2ap-BroadcastPLMNs-Item.h \ - X2ap-CapacityValue.h \ - X2ap-CellCapacityClassValue.h \ - X2ap-CellToReport-List.h \ - X2ap-CellToReport-Item.h \ - X2ap-CellMeasurementResult-List.h \ - X2ap-CellMeasurementResult-Item.h \ - X2ap-ReportingPeriodicity.h \ - X2ap-Cause.h \ - X2ap-CauseMisc.h \ - X2ap-CauseProtocol.h \ - X2ap-CauseRadioNetwork.h \ - X2ap-CauseTransport.h \ - X2ap-Cell-Size.h \ - X2ap-CellInformation-List.h \ - X2ap-CellInformation-Item.h \ - X2ap-CellType.h \ - X2ap-CompositeAvailableCapacityGroup.h \ - X2ap-CompositeAvailableCapacity.h \ - X2ap-COUNTvalue.h \ - X2ap-CriticalityDiagnostics.h \ - X2ap-CriticalityDiagnostics-IE-List.h \ - X2ap-CriticalityDiagnostics-IE-Elm.h \ - X2ap-CRNTI.h \ - X2ap-CyclicPrefixDL.h \ - X2ap-CyclicPrefixUL.h \ - X2ap-DeactivationIndication.h \ - X2ap-DL-Forwarding.h \ - X2ap-E-RABs-Admitted-List.h \ - X2ap-E-RABs-Admitted-Item.h \ - X2ap-E-RABs-ToBeSetup-List.h \ - X2ap-E-RABs-ToBeSetup-Item.h \ - X2ap-E-RABs-SubjectToStatusTransfer-List.h \ - X2ap-E-RABs-SubjectToStatusTransfer-Item.h \ - X2ap-EARFCN.h \ - X2ap-FDD-Info.h \ - X2ap-TDD-Info.h \ - X2ap-EUTRA-Mode-Info.h \ - X2ap-ECGI.h \ - X2ap-ENB-ID.h \ - X2ap-EncryptionAlgorithms.h \ - X2ap-EPLMNs.h \ - X2ap-E-RAB-ID.h \ - X2ap-E-RAB-Level-QoS-Parameters.h \ - X2ap-E-RAB-List.h \ - X2ap-E-RAB-Item.h \ - X2ap-EUTRANCellIdentifier.h \ - X2ap-EUTRANTraceID.h \ - X2ap-EventType.h \ - X2ap-ForbiddenInterRATs.h \ - X2ap-ForbiddenTAs.h \ - X2ap-ForbiddenTAs-Item.h \ - X2ap-ForbiddenTACs.h \ - X2ap-ForbiddenLAs.h \ - X2ap-ForbiddenLAs-Item.h \ - X2ap-ForbiddenLACs.h \ - X2ap-Fourframes.h \ - X2ap-GBR-QosInformation.h \ - X2ap-GlobalENB-ID.h \ - X2ap-GTPtunnelEndpoint.h \ - X2ap-GTP-TEI.h \ - X2ap-GUGroupIDList.h \ - X2ap-GU-Group-ID.h \ - X2ap-GUMMEI.h \ - X2ap-HandoverReportType.h \ - X2ap-HandoverRestrictionList.h \ - X2ap-HFN.h \ - X2ap-HWLoadIndicator.h \ - X2ap-IntegrityProtectionAlgorithms.h \ - X2ap-InterfacesToTrace.h \ - X2ap-Key-eNodeB-Star.h \ - X2ap-LAC.h \ - X2ap-LastVisitedCell-Item.h \ - X2ap-LastVisitedEUTRANCellInformation.h \ - X2ap-LastVisitedUTRANCellInformation.h \ - X2ap-LastVisitedGERANCellInformation.h \ - X2ap-LoadIndicator.h \ - X2ap-LocationReportingInformation.h \ - X2ap-MME-Group-ID.h \ - X2ap-MME-Code.h \ - X2ap-Measurement-ID.h \ - X2ap-MBSFN-Subframe-Infolist.h \ - X2ap-MBSFN-Subframe-Info.h \ - X2ap-MobilityParametersModificationRange.h \ - X2ap-MobilityParametersInformation.h \ - X2ap-Neighbour-Information.h \ - X2ap-Neighbour-Information-Elm.h \ - X2ap-NextHopChainingCount.h \ - X2ap-Number-of-Antennaports.h \ - X2ap-Oneframe.h \ - X2ap-PDCP-SN.h \ - X2ap-PCI.h \ - X2ap-PLMN-Identity.h \ - X2ap-PRACH-Configuration.h \ - X2ap-Pre-emptionCapability.h \ - X2ap-Pre-emptionVulnerability.h \ - X2ap-PriorityLevel.h \ - X2ap-QCI.h \ - X2ap-ReceiveStatusofULPDCPSDUs.h \ - X2ap-Registration-Request.h \ - X2ap-RelativeNarrowbandTxPower.h \ - X2ap-ReportArea.h \ - X2ap-ReportCharacteristics.h \ - X2ap-RNTP-Threshold.h \ - X2ap-RRC-Context.h \ - X2ap-RadioResourceStatus.h \ - X2ap-DL-GBR-PRB-usage.h \ - X2ap-UL-GBR-PRB-usage.h \ - X2ap-DL-non-GBR-PRB-usage.h \ - X2ap-UL-non-GBR-PRB-usage.h \ - X2ap-DL-Total-PRB-usage.h \ - vUL-Total-PRB-usage.h \ - X2ap-RadioframeAllocationPeriod.h \ - X2ap-RadioframeAllocationOffset.h \ - X2ap-S1TNLLoadIndicator.h \ - X2ap-ServedCellsToActivate.h \ - X2ap-ServedCellsToActivate-Item.h \ - X2ap-ServedCellsToModify.h \ - X2ap-ServedCellsToModify-Item.h \ - X2ap-Old-ECGIs.h \ - X2ap-ServedCells.h \ - X2ap-ServedCellItem.h \ - X2ap-ServedCell-Information.h \ - X2ap-ShortMAC-I.h \ - X2ap-SRVCCOperationPossible.h \ - X2ap-SubframeAssignment.h \ - X2ap-SpecialSubframe-Info.h \ - X2ap-SpecialSubframePatterns.h \ - X2ap-SubscriberProfileIDforRFP.h \ - X2ap-SubframeAllocation.h \ - X2ap-TAC.h \ - X2ap-TargeteNBtoSource-eNBTransparentContainer.h \ - X2ap-TimeToWait.h \ - X2ap-Time-UE-StayedInCell.h \ - X2ap-TraceActivation.h \ - X2ap-TraceCollectionEntityIPAddress.h \ - X2ap-TraceDepth.h \ - X2ap-Transmission-Bandwidth.h \ - X2ap-TransportLayerAddress.h \ - X2ap-TypeOfError.h \ - X2ap-UE-HistoryInformation.h \ - X2ap-UE-S1AP-ID.h \ - X2ap-UE-X2AP-ID.h \ - X2ap-UEAggregateMaximumBitRate.h \ - X2ap-UESecurityCapabilities.h \ - X2ap-UE-ContextInformation.h \ - X2ap-UL-InterferenceOverloadIndication.h \ - X2ap-UL-InterferenceOverloadIndication-Item.h \ - X2ap-UL-HighInterferenceIndicationInfo.h \ - X2ap-UL-HighInterferenceIndicationInfo-Item.h \ - X2ap-UL-HighInterferenceIndication.h \ - X2ap-UE-RLF-Report-Container.h \ - X2ap-IE.h \ - X2ap-X2AP-PDU.h \ - X2ap-InitiatingMessage.h \ - X2ap-SuccessfulOutcome.h \ - X2ap-UnsuccessfulOutcome.h \ - X2ap-HandoverRequest.h \ - X2ap-HandoverRequestAcknowledge.h \ - X2ap-HandoverPreparationFailure.h \ - X2ap-SNStatusTransfer.h \ - X2ap-UEContextRelease.h \ - X2ap-HandoverCancel.h \ - X2ap-HandoverReport.h \ - X2ap-ErrorIndication.h \ - X2ap-ResetRequest.h \ - X2ap-ResetResponse.h \ - X2ap-X2SetupRequest.h \ - X2ap-X2SetupResponse.h \ - X2ap-X2SetupFailure.h \ - X2ap-LoadInformation.h \ - X2ap-ENBConfigurationUpdate.h \ - X2ap-ENBConfigurationUpdateAcknowledge.h \ - X2ap-ENBConfigurationUpdateFailure.h \ - X2ap-ResourceStatusRequest.h \ - X2ap-ResourceStatusResponse.h \ - X2ap-ResourceStatusFailure.h \ - X2ap-ResourceStatusUpdate.h \ - X2ap-RLFIndication.h \ - X2ap-PrivateMessage.h \ - X2ap-MobilityChangeRequest.h \ - X2ap-MobilityChangeAcknowledge.h \ - X2ap-MobilityChangeFailure.h \ - X2ap-CellActivationRequest.h \ - X2ap-CellActivationResponse.h \ - X2ap-CellActivationFailure.h - -X2AP_ASN_MODULE_HEADERS+=ANY.h -X2AP_ASN_MODULE_SOURCES+=ANY.o -X2AP_ASN_MODULE_HEADERS+=BOOLEAN.h -X2AP_ASN_MODULE_SOURCES+=BOOLEAN.o -X2AP_ASN_MODULE_HEADERS+=INTEGER.h -X2AP_ASN_MODULE_HEADERS+=NativeEnumerated.h -X2AP_ASN_MODULE_SOURCES+=INTEGER.o -X2AP_ASN_MODULE_HEADERS+=NULL.h -X2AP_ASN_MODULE_SOURCES+=NULL.o -X2AP_ASN_MODULE_SOURCES+=NativeEnumerated.o -X2AP_ASN_MODULE_HEADERS+=NativeInteger.h -X2AP_ASN_MODULE_SOURCES+=NativeInteger.o -X2AP_ASN_MODULE_HEADERS+=OBJECT_IDENTIFIER.h -X2AP_ASN_MODULE_SOURCES+=OBJECT_IDENTIFIER.o -X2AP_ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h -X2AP_ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.o -X2AP_ASN_MODULE_HEADERS+=asn_SET_OF.h -X2AP_ASN_MODULE_SOURCES+=asn_SET_OF.o -X2AP_ASN_MODULE_HEADERS+=constr_CHOICE.h -X2AP_ASN_MODULE_SOURCES+=constr_CHOICE.o -X2AP_ASN_MODULE_HEADERS+=constr_SEQUENCE.h -X2AP_ASN_MODULE_SOURCES+=constr_SEQUENCE.o -X2AP_ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h -X2AP_ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.o -X2AP_ASN_MODULE_HEADERS+=constr_SET_OF.h -X2AP_ASN_MODULE_SOURCES+=constr_SET_OF.o -X2AP_ASN_MODULE_HEADERS+=asn_application.h -X2AP_ASN_MODULE_HEADERS+=asn_system.h -X2AP_ASN_MODULE_HEADERS+=asn_codecs.h -X2AP_ASN_MODULE_HEADERS+=asn_internal.h -X2AP_ASN_MODULE_HEADERS+=OCTET_STRING.h -X2AP_ASN_MODULE_SOURCES+=OCTET_STRING.o -X2AP_ASN_MODULE_HEADERS+=BIT_STRING.h -X2AP_ASN_MODULE_SOURCES+=BIT_STRING.o -X2AP_ASN_MODULE_SOURCES+=asn_codecs_prim.o -X2AP_ASN_MODULE_HEADERS+=asn_codecs_prim.h -X2AP_ASN_MODULE_HEADERS+=ber_tlv_length.h -X2AP_ASN_MODULE_SOURCES+=ber_tlv_length.o -X2AP_ASN_MODULE_HEADERS+=ber_tlv_tag.h -X2AP_ASN_MODULE_SOURCES+=ber_tlv_tag.o -X2AP_ASN_MODULE_HEADERS+=ber_decoder.h -X2AP_ASN_MODULE_SOURCES+=ber_decoder.o -X2AP_ASN_MODULE_HEADERS+=der_encoder.h -X2AP_ASN_MODULE_SOURCES+=der_encoder.o -X2AP_ASN_MODULE_HEADERS+=constr_TYPE.h -X2AP_ASN_MODULE_SOURCES+=constr_TYPE.o -X2AP_ASN_MODULE_HEADERS+=constraints.h -X2AP_ASN_MODULE_SOURCES+=constraints.o -X2AP_ASN_MODULE_HEADERS+=xer_support.h -X2AP_ASN_MODULE_SOURCES+=xer_support.o -X2AP_ASN_MODULE_HEADERS+=xer_decoder.h -X2AP_ASN_MODULE_SOURCES+=xer_decoder.o -X2AP_ASN_MODULE_HEADERS+=xer_encoder.h -X2AP_ASN_MODULE_SOURCES+=xer_encoder.o -X2AP_ASN_MODULE_HEADERS+=per_support.h -X2AP_ASN_MODULE_SOURCES+=per_support.o -X2AP_ASN_MODULE_HEADERS+=per_decoder.h -X2AP_ASN_MODULE_SOURCES+=per_decoder.o -X2AP_ASN_MODULE_HEADERS+=per_encoder.h -X2AP_ASN_MODULE_SOURCES+=per_encoder.o -X2AP_ASN_MODULE_HEADERS+=per_opentype.h -X2AP_ASN_MODULE_SOURCES+=per_opentype.o diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-CommonDataTypes.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-CommonDataTypes.asn deleted file mode 100755 index 410a7d19dd..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-CommonDataTypes.asn +++ /dev/null @@ -1,142 +0,0 @@ -X2AP-CommonDataTypes { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-CommonDataTypes (3) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- Extension constants --- --- ************************************************************** - -x2ap-maxPrivateIEs INTEGER ::= 65535 -x2ap-maxProtocolExtensions INTEGER ::= 65535 -x2ap-maxProtocolIEs INTEGER ::= 65535 - --- ************************************************************** --- --- Common Data Types --- --- ************************************************************** - -X2ap-Criticality ::= ENUMERATED { reject, ignore, notify } - -X2ap-Presence ::= ENUMERATED { optional, conditional, mandatory } - -X2ap-PrivateIE-ID ::= CHOICE { - local INTEGER (0.. x2ap-maxPrivateIEs), - global OBJECT IDENTIFIER -} - ---X2ap-ProcedureCode ::= INTEGER (0..255) -X2ap-ProcedureCode ::= INTEGER { - id-handoverPreparation (0), - id-handoverCancel (1), - id-loadIndication (2), - id-errorIndication (3), - id-snStatusTransfer (4), - id-uEContextRelease (5), - id-x2Setup (6), - id-reset (7), - id-eNBConfigurationUpdate (8), - id-resourceStatusReportingInitiation (9), - id-resourceStatusReporting (10), - id-privateMessage (11), - id-mobilitySettingsChange (12), - id-rLFIndication (13), - id-handoverReport (14), - id-cellActivation (15) -} (0..255) - ---X2ap-ProtocolIE-ID ::= INTEGER (0..x2ap-maxProtocolIEs) -X2ap-ProtocolIE-ID ::= INTEGER { - id-E-RABs-Admitted-Item (0), - id-E-RABs-Admitted-List (1), - id-E-RAB-Item (2), - id-E-RABs-NotAdmitted-List (3), - id-E-RABs-ToBeSetup-Item (4), - id-Cause (5), - id-CellInformation (6), - id-CellInformation-Item (7), - id-New-eNB-UE-X2AP-ID (9), - id-Old-eNB-UE-X2AP-ID (10), - id-TargetCell-ID (11), - id-TargeteNBtoSource-eNBTransparentContainer (12), - id-TraceActivation (13), - id-UE-ContextInformation (14), - id-UE-HistoryInformation (15), - id-UE-X2AP-ID (16), - id-CriticalityDiagnostics (17), - id-E-RABs-SubjectToStatusTransfer-List (18), - id-E-RABs-SubjectToStatusTransfer-Item (19), - id-ServedCells (20), - id-GlobalENB-ID (21), - id-TimeToWait (22), - id-GUMMEI-ID (23), - id-GUGroupIDList (24), - id-ServedCellsToAdd (25), - id-ServedCellsToModify (26), - id-ServedCellsToDelete (27), - id-Registration-Request (28), - id-CellToReport (29), - id-ReportingPeriodicity (30), - id-CellToReport-Item (31), - id-CellMeasurementResult (32), - id-CellMeasurementResult-Item (33), - id-GUGroupIDToAddList (34), - id-GUGroupIDToDeleteList (35), - id-SRVCCOperationPossible (36), - id-Measurement-ID (37), - id-ReportCharacteristics (38), - id-ENB1-Measurement-ID (39), - id-ENB2-Measurement-ID (40), - id-Number-of-Antennaports (41), - id-CompositeAvailableCapacityGroup (42), - id-ENB1-Cell-ID (43), - id-ENB2-Cell-ID (44), - id-ENB2-Proposed-Mobility-Parameters (45), - id-ENB1-Mobility-Parameters (46), - id-ENB2-Mobility-Parameters-Modification-Range (47), - id-FailureCellPCI (48), - id-Re-establishmentCellECGI (49), - id-FailureCellCRNTI (50), - id-ShortMAC-I (51), - id-SourceCellECGI (52), - id-FailureCellECGI (53), - id-HandoverReportType (54), - id-PRACH-Configuration (55), - id-MBSFN-Subframe-Info (56), - id-ServedCellsToActivate (57), - id-ActivatedCellList (58), - id-DeactivationIndication (59), - id-UE-RLF-Report-Container (60), - id-ABSInformation (61), - id-InvokeIndication (62), - id-ABS-Status (63), - id-PartialSuccessIndicator (64), - id-MeasurementInitiationResult-List (65), - id-MeasurementInitiationResult-Item (66), - id-MeasurementFailureCause-Item (67), - id-CompleteFailureCauseInformation-List (68), - id-CompleteFailureCauseInformation-Item (69), - id-CSG-Id (70), - id-CSGMembershipStatus (71), - id-MDTConfiguration (72), - id-ManagementBasedMDTallowed (74), - id-RRCConnSetupIndicator (75), - id-NeighbourTAC (76), - id-Time-UE-StayedInCell-EnhancedGranularity (77), - id-RRCConnReestabIndicator (78), - id-MBMS-Service-Area-List (79), - id-HO-cause (80), - id-TargetCellInUTRAN (81), - id-MultibandInfoList (84) -} (0..x2ap-maxProtocolIEs) - - -X2ap-TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} - -END diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-Constants.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-Constants.asn deleted file mode 100755 index 4740da1949..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-Constants.asn +++ /dev/null @@ -1,162 +0,0 @@ --- ************************************************************** --- --- Constant definitions --- --- ************************************************************** - -X2AP-Constants { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-Constants (4) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - X2ap-ProcedureCode, - X2ap-ProtocolIE-ID -FROM X2AP-CommonDataTypes; - --- ************************************************************** --- --- Elementary Procedures --- --- ************************************************************** - -id-handoverPreparation X2ap-ProcedureCode ::= 0 -id-handoverCancel X2ap-ProcedureCode ::= 1 -id-loadIndication X2ap-ProcedureCode ::= 2 -id-errorIndication X2ap-ProcedureCode ::= 3 -id-snStatusTransfer X2ap-ProcedureCode ::= 4 -id-uEContextRelease X2ap-ProcedureCode ::= 5 -id-x2Setup X2ap-ProcedureCode ::= 6 -id-reset X2ap-ProcedureCode ::= 7 -id-eNBConfigurationUpdate X2ap-ProcedureCode ::= 8 -id-resourceStatusReportingInitiation X2ap-ProcedureCode ::= 9 -id-resourceStatusReporting X2ap-ProcedureCode ::= 10 -id-privateMessage X2ap-ProcedureCode ::= 11 -id-mobilitySettingsChange X2ap-ProcedureCode ::= 12 -id-rLFIndication X2ap-ProcedureCode ::= 13 -id-handoverReport X2ap-ProcedureCode ::= 14 -id-cellActivation X2ap-ProcedureCode ::= 15 - - - --- ************************************************************** --- --- Lists --- --- ************************************************************** - -x2ap-maxEARFCN INTEGER ::= 65535 -x2ap-maxInterfaces INTEGER ::= 16 -x2ap-maxCellineNB INTEGER ::= 256 -x2ap-maxnoofBands INTEGER ::= 16 -x2ap-maxnoofBearers INTEGER ::= 256 -x2ap-maxNrOfErrors INTEGER ::= 256 -x2ap-maxnoofPDCP-SN INTEGER ::= 16 -x2ap-maxnoofEPLMNs INTEGER ::= 15 -x2ap-maxnoofEPLMNsPlusOne INTEGER ::= 16 -x2ap-maxnoofForbLACs INTEGER ::= 4096 -x2ap-maxnoofForbTACs INTEGER ::= 4096 -x2ap-maxnoofBPLMNs INTEGER ::= 6 -x2ap-maxnoofNeighbours INTEGER ::= 512 -x2ap-maxnoofPRBs INTEGER ::= 110 -x2ap-maxPools INTEGER ::= 16 -x2ap-maxnoofCells INTEGER ::= 16 -x2ap-maxnoofMBSFN INTEGER ::= 8 -x2ap-maxFailedMeasObjects INTEGER ::= 32 -x2ap-maxnoofCellIDforMDT INTEGER ::= 32 -x2ap-maxnoofTAforMDT INTEGER ::= 8 -x2ap-maxnoofMBMSServiceAreaIdentities INTEGER ::= 256 - - --- ************************************************************** --- --- IEs --- --- ************************************************************** - -id-E-RABs-Admitted-Item X2ap-ProtocolIE-ID ::= 0 -id-E-RABs-Admitted-List X2ap-ProtocolIE-ID ::= 1 -id-E-RAB-Item X2ap-ProtocolIE-ID ::= 2 -id-E-RABs-NotAdmitted-List X2ap-ProtocolIE-ID ::= 3 -id-E-RABs-ToBeSetup-Item X2ap-ProtocolIE-ID ::= 4 -id-Cause X2ap-ProtocolIE-ID ::= 5 -id-CellInformation X2ap-ProtocolIE-ID ::= 6 -id-CellInformation-Item X2ap-ProtocolIE-ID ::= 7 -id-New-eNB-UE-X2AP-ID X2ap-ProtocolIE-ID ::= 9 -id-Old-eNB-UE-X2AP-ID X2ap-ProtocolIE-ID ::= 10 -id-TargetCell-ID X2ap-ProtocolIE-ID ::= 11 -id-TargeteNBtoSource-eNBTransparentContainer X2ap-ProtocolIE-ID ::= 12 -id-TraceActivation X2ap-ProtocolIE-ID ::= 13 -id-UE-ContextInformation X2ap-ProtocolIE-ID ::= 14 -id-UE-HistoryInformation X2ap-ProtocolIE-ID ::= 15 -id-UE-X2AP-ID X2ap-ProtocolIE-ID ::= 16 -id-CriticalityDiagnostics X2ap-ProtocolIE-ID ::= 17 -id-E-RABs-SubjectToStatusTransfer-List X2ap-ProtocolIE-ID ::= 18 -id-E-RABs-SubjectToStatusTransfer-Item X2ap-ProtocolIE-ID ::= 19 -id-ServedCells X2ap-ProtocolIE-ID ::= 20 -id-GlobalENB-ID X2ap-ProtocolIE-ID ::= 21 -id-TimeToWait X2ap-ProtocolIE-ID ::= 22 -id-GUMMEI-ID X2ap-ProtocolIE-ID ::= 23 -id-GUGroupIDList X2ap-ProtocolIE-ID ::= 24 -id-ServedCellsToAdd X2ap-ProtocolIE-ID ::= 25 -id-ServedCellsToModify X2ap-ProtocolIE-ID ::= 26 -id-ServedCellsToDelete X2ap-ProtocolIE-ID ::= 27 -id-Registration-Request X2ap-ProtocolIE-ID ::= 28 -id-CellToReport X2ap-ProtocolIE-ID ::= 29 -id-ReportingPeriodicity X2ap-ProtocolIE-ID ::= 30 -id-CellToReport-Item X2ap-ProtocolIE-ID ::= 31 -id-CellMeasurementResult X2ap-ProtocolIE-ID ::= 32 -id-CellMeasurementResult-Item X2ap-ProtocolIE-ID ::= 33 -id-GUGroupIDToAddList X2ap-ProtocolIE-ID ::= 34 -id-GUGroupIDToDeleteList X2ap-ProtocolIE-ID ::= 35 -id-SRVCCOperationPossible X2ap-ProtocolIE-ID ::= 36 -id-Measurement-ID X2ap-ProtocolIE-ID ::= 37 -id-ReportCharacteristics X2ap-ProtocolIE-ID ::= 38 -id-ENB1-Measurement-ID X2ap-ProtocolIE-ID ::= 39 -id-ENB2-Measurement-ID X2ap-ProtocolIE-ID ::= 40 -id-Number-of-Antennaports X2ap-ProtocolIE-ID ::= 41 -id-CompositeAvailableCapacityGroup X2ap-ProtocolIE-ID ::= 42 -id-ENB1-Cell-ID X2ap-ProtocolIE-ID ::= 43 -id-ENB2-Cell-ID X2ap-ProtocolIE-ID ::= 44 -id-ENB2-Proposed-Mobility-Parameters X2ap-ProtocolIE-ID ::= 45 -id-ENB1-Mobility-Parameters X2ap-ProtocolIE-ID ::= 46 -id-ENB2-Mobility-Parameters-Modification-Range X2ap-ProtocolIE-ID ::= 47 -id-FailureCellPCI X2ap-ProtocolIE-ID ::= 48 -id-Re-establishmentCellECGI X2ap-ProtocolIE-ID ::= 49 -id-FailureCellCRNTI X2ap-ProtocolIE-ID ::= 50 -id-ShortMAC-I X2ap-ProtocolIE-ID ::= 51 -id-SourceCellECGI X2ap-ProtocolIE-ID ::= 52 -id-FailureCellECGI X2ap-ProtocolIE-ID ::= 53 -id-HandoverReportType X2ap-ProtocolIE-ID ::= 54 -id-PRACH-Configuration X2ap-ProtocolIE-ID ::= 55 -id-MBSFN-Subframe-Info X2ap-ProtocolIE-ID ::= 56 -id-ServedCellsToActivate X2ap-ProtocolIE-ID ::= 57 -id-ActivatedCellList X2ap-ProtocolIE-ID ::= 58 -id-DeactivationIndication X2ap-ProtocolIE-ID ::= 59 -id-UE-RLF-Report-Container X2ap-ProtocolIE-ID ::= 60 -id-ABSInformation X2ap-ProtocolIE-ID ::= 61 -id-InvokeIndication X2ap-ProtocolIE-ID ::= 62 -id-ABS-Status X2ap-ProtocolIE-ID ::= 63 -id-PartialSuccessIndicator X2ap-ProtocolIE-ID ::= 64 -id-MeasurementInitiationResult-List X2ap-ProtocolIE-ID ::= 65 -id-MeasurementInitiationResult-Item X2ap-ProtocolIE-ID ::= 66 -id-MeasurementFailureCause-Item X2ap-ProtocolIE-ID ::= 67 -id-CompleteFailureCauseInformation-List X2ap-ProtocolIE-ID ::= 68 -id-CompleteFailureCauseInformation-Item X2ap-ProtocolIE-ID ::= 69 -id-CSG-Id X2ap-ProtocolIE-ID ::= 70 -id-CSGMembershipStatus X2ap-ProtocolIE-ID ::= 71 -id-MDTConfiguration X2ap-ProtocolIE-ID ::= 72 -id-ManagementBasedMDTallowed X2ap-ProtocolIE-ID ::= 74 -id-RRCConnSetupIndicator X2ap-ProtocolIE-ID ::= 75 -id-NeighbourTAC X2ap-ProtocolIE-ID ::= 76 -id-Time-UE-StayedInCell-EnhancedGranularity X2ap-ProtocolIE-ID ::= 77 -id-RRCConnReestabIndicator X2ap-ProtocolIE-ID ::= 78 -id-MBMS-Service-Area-List X2ap-ProtocolIE-ID ::= 79 -id-HO-cause X2ap-ProtocolIE-ID ::= 80 -id-TargetCellInUTRAN X2ap-ProtocolIE-ID ::= 81 -id-MultibandInfoList X2ap-ProtocolIE-ID ::= 84 - -END diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-Containers.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-Containers.asn deleted file mode 100755 index 020eeccf9d..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-Containers.asn +++ /dev/null @@ -1,195 +0,0 @@ --- ************************************************************** --- --- Container definitions --- --- ************************************************************** - -X2AP-Containers { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-Containers (5) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - x2ap-maxPrivateIEs, - x2ap-maxProtocolExtensions, - x2ap-maxProtocolIEs, - X2ap-Criticality, - X2ap-Presence, - X2ap-PrivateIE-ID, - X2ap-ProtocolIE-ID -FROM X2AP-CommonDataTypes; - --- ************************************************************** --- --- Class Definition for Protocol IEs --- --- ************************************************************** - -X2AP-PROTOCOL-IES ::= CLASS { - &id X2ap-ProtocolIE-ID UNIQUE, - &criticality X2ap-Criticality, - &Value, - &presence X2ap-Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - TYPE &Value - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Protocol IEs --- --- ************************************************************** - -X2AP-PROTOCOL-IES-PAIR ::= CLASS { - &id X2ap-ProtocolIE-ID UNIQUE, - &firstCriticality X2ap-Criticality, - &FirstValue, - &secondCriticality X2ap-Criticality, - &SecondValue, - &presence X2ap-Presence -} -WITH SYNTAX { - ID &id - FIRST CRITICALITY &firstCriticality - FIRST TYPE &FirstValue - SECOND CRITICALITY &secondCriticality - SECOND TYPE &SecondValue - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Protocol Extensions --- --- ************************************************************** - -X2AP-PROTOCOL-EXTENSION ::= CLASS { - &id X2ap-ProtocolIE-ID UNIQUE, - &criticality X2ap-Criticality, - &Extension, - &presence X2ap-Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - EXTENSION &Extension - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Private IEs --- --- ************************************************************** - -X2AP-PRIVATE-IES ::= CLASS { - &id X2ap-PrivateIE-ID, - &criticality X2ap-Criticality, - &Value, - &presence X2ap-Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - TYPE &Value - PRESENCE &presence -} - --- ************************************************************** --- --- Container for Protocol IEs --- --- ************************************************************** - -ProtocolIE-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= - SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF - ProtocolIE-Field {{IEsSetParam}} - -ProtocolIE-Single-Container {X2AP-PROTOCOL-IES : IEsSetParam} ::= - ProtocolIE-Field {{IEsSetParam}} - -ProtocolIE-Field {X2AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { - id X2AP-PROTOCOL-IES.&id ({IEsSetParam}), - criticality X2AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), - value X2AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) -} - --- ************************************************************** --- --- Container for Protocol IE Pairs --- --- ************************************************************** - -ProtocolIE-ContainerPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= - SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF - ProtocolIE-FieldPair {{IEsSetParam}} - -ProtocolIE-FieldPair {X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { - id X2AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), - firstCriticality X2AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), - firstValue X2AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), - secondCriticality X2AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), - secondValue X2AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) -} - --- ************************************************************** --- --- Container Lists for Protocol IE Containers --- --- ************************************************************** - -ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES : IEsSetParam} ::= - SEQUENCE (SIZE (lowerBound..upperBound)) OF - ProtocolIE-Container {{IEsSetParam}} - -ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, X2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= - SEQUENCE (SIZE (lowerBound..upperBound)) OF - ProtocolIE-ContainerPair {{IEsSetParam}} - --- ************************************************************** --- --- Container for Protocol Extensions --- --- ************************************************************** - -ProtocolExtensionContainer {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= - SEQUENCE (SIZE (1..x2ap-maxProtocolExtensions)) OF - ProtocolExtensionField {{ExtensionSetParam}} - -ProtocolExtensionField {X2AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { - id X2AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), - criticality X2AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), - extensionValue X2AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) -} - - --- ************************************************************** --- --- Container for Private IEs --- --- ************************************************************** - -PrivateIE-Container {X2AP-PRIVATE-IES : IEsSetParam} ::= - SEQUENCE (SIZE (1..x2ap-maxPrivateIEs)) OF - PrivateIE-Field {{IEsSetParam}} - -PrivateIE-Field {X2AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { - id X2AP-PRIVATE-IES.&id ({IEsSetParam}), - criticality X2AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), - value X2AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) -} - -END diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn deleted file mode 100755 index c76319bb71..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn +++ /dev/null @@ -1,1447 +0,0 @@ --- ************************************************************** --- --- Information Element Definitions --- --- ************************************************************** - -X2AP-IEs { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-IEs (2) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - id-E-RAB-Item, - id-Number-of-Antennaports, - id-MBSFN-Subframe-Info, - id-PRACH-Configuration, - id-CSG-Id, - id-MDTConfiguration, - id-MultibandInfoList, - id-NeighbourTAC, - id-Time-UE-StayedInCell-EnhancedGranularity, - id-MBMS-Service-Area-List, - id-HO-cause, - x2ap-maxCellineNB, - x2ap-maxEARFCN, - x2ap-maxInterfaces, - x2ap-maxFailedMeasObjects, - x2ap-maxnoofBands, - x2ap-maxnoofBearers, - x2ap-maxnoofBPLMNs, - x2ap-maxnoofCells, - x2ap-maxnoofEPLMNs, - x2ap-maxnoofEPLMNsPlusOne, - x2ap-maxnoofForbLACs, - x2ap-maxnoofForbTACs, - x2ap-maxnoofNeighbours, - x2ap-maxnoofPRBs, - x2ap-maxNrOfErrors, - x2ap-maxPools, - x2ap-maxnoofMBSFN, - x2ap-maxnoofTAforMDT, - x2ap-maxnoofCellIDforMDT, - x2ap-maxnoofMBMSServiceAreaIdentities -FROM X2AP-Constants - - x2ap-maxProtocolExtensions, - X2ap-Criticality, - X2ap-ProcedureCode, - X2ap-ProtocolIE-ID, - X2ap-TriggeringMessage -FROM X2AP-CommonDataTypes - --- ProtocolExtensionContainer{}, --- ProtocolIE-Single-Container{}, - X2AP-PROTOCOL-EXTENSION --- X2AP-PROTOCOL-IES -FROM X2AP-Containers - - X2ap-IE -FROM X2AP-PDU; - ---EURECOM ADD -X2ap-IE-Extensions ::= SEQUENCE (SIZE (1..x2ap-maxProtocolExtensions)) OF X2ap-IE - --- A -X2ap-ActivatedCellList ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ActivatedCellList-Item -X2ap-ActivatedCellList-Item ::= SEQUENCE { - ecgi X2ap-ECGI, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ActivatedCellList-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ABSInformation ::= CHOICE { - fdd X2ap-ABSInformationFDD, - tdd X2ap-ABSInformationTDD, - abs-inactive NULL, - ... -} - -X2ap-ABSInformationFDD ::= SEQUENCE { - abs-pattern-info BIT STRING (SIZE(40)), - numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, - measurement-subset BIT STRING (SIZE(40)), --- iE-Extensions ProtocolExtensionContainer { { X2ap-ABSInformationFDD-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ABSInformationTDD ::= SEQUENCE { - abs-pattern-info BIT STRING (SIZE(1..70, ...)), ---EURECOM COMMENT numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, - numberOfCellSpecificAntennaPortsTDD ENUMERATED {one, two, four, ...}, - measurement-subset BIT STRING (SIZE(1..70, ...)), ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ABSInformationTDD-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ABS-Status ::= SEQUENCE { - dL-ABS-status X2ap-DL-ABS-status, - usableABSInformation X2ap-UsableABSInformation, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-ABS-Status-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ABS-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-DL-ABS-status::= INTEGER (0..100) - -X2ap-AS-SecurityInformation ::= SEQUENCE { - key-eNodeB-star X2ap-Key-eNodeB-Star, - nextHopChainingCount X2ap-NextHopChainingCount, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-AS-SecurityInformation-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-AS-SecurityInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - -X2ap-AllocationAndRetentionPriority ::= SEQUENCE { - priorityLevel X2ap-PriorityLevel, - pre-emptionCapability X2ap-Pre-emptionCapability, - pre-emptionVulnerability X2ap-Pre-emptionVulnerability, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-AllocationAndRetentionPriority-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-AreaScopeOfMDT ::= CHOICE { - cellBased X2ap-CellBasedMDT, - tABased X2ap-TABasedMDT, - pLMNWide NULL, - ... -} - --- B - - -X2ap-BitRate ::= INTEGER (0..10000000000) -X2ap-BroadcastPLMNs-Item ::= SEQUENCE (SIZE(1..x2ap-maxnoofBPLMNs)) OF X2ap-PLMN-Identity - - --- C - -X2ap-CapacityValue ::= INTEGER (0..100) - -X2ap-CellCapacityClassValue ::= INTEGER (1..100, ...) - -X2ap-Cause ::= CHOICE { - radioNetwork X2ap-CauseRadioNetwork, - transport X2ap-CauseTransport, - protocol X2ap-CauseProtocol, - misc X2ap-CauseMisc, - ... -} - -X2ap-CauseMisc ::= ENUMERATED { - control-processing-overload, - hardware-failure, - om-intervention, - not-enough-user-plane-processing-resources, - unspecified, - ... -} - -X2ap-CauseProtocol ::= ENUMERATED { - transfer-syntax-error, - abstract-syntax-error-reject, - abstract-syntax-error-ignore-and-notify, - message-not-compatible-with-receiver-state, - semantic-error, - unspecified, - abstract-syntax-error-falsely-constructed-message, - ... -} - -X2ap-CauseRadioNetwork ::= ENUMERATED { - handover-desirable-for-radio-reasons, - time-critical-handover, - resource-optimisation-handover, - reduce-load-in-serving-cell, - partial-handover, - unknown-new-eNB-UE-X2AP-ID, - unknown-old-eNB-UE-X2AP-ID, - unknown-pair-of-UE-X2AP-ID, - ho-target-not-allowed, - tx2relocoverall-expiry, - trelocprep-expiry, - cell-not-available, - no-radio-resources-available-in-target-cell, - invalid-MME-GroupID, - unknown-MME-Code, - encryption-and-or-integrity-protection-algorithms-not-supported, - reportCharacteristicsEmpty, - noReportPeriodicity, - existingMeasurementID, - unknown-eNB-Measurement-ID, - measurement-temporarily-not-available, - unspecified, - ..., - load-balancing, - handover-optimisation, - value-out-of-allowed-range, - multiple-E-RAB-ID-instances, - switch-off-ongoing, - not-supported-QCI-value, - measurement-not-supported-for-the-object - -} - -X2ap-CauseTransport ::= ENUMERATED { - transport-resource-unavailable, - unspecified, - ... -} - -X2ap-CellBasedMDT::= SEQUENCE { - cellIdListforMDT X2ap-CellIdListforMDT, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-CellBasedMDT-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CellBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-CellIdListforMDT ::= SEQUENCE (SIZE(1..x2ap-maxnoofCellIDforMDT)) OF X2ap-ECGI - -X2ap-Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ... } - - -X2ap-CellType ::= SEQUENCE { - cell-Size X2ap-Cell-Size, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-CellType-ExtIEs}} OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} -X2ap-CellToReport-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE ---ProtocolIE-Single-Container { {X2ap-CellToReport-ItemIEs} } - -X2ap-CellToReport-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions X2ap-ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-MeasurementFailureCause-List ::= SEQUENCE (SIZE (1..x2ap-maxFailedMeasObjects)) OF X2ap-IE - -X2ap-MeasurementFailureCause-Item ::= SEQUENCE { - measurementFailedReportCharacteristics X2ap-ReportCharacteristics, - cause X2ap-Cause, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-MeasurementFailureCause-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CellInformation-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE ---ProtocolIE-Single-Container { {X2ap-CellInformation-ItemIEs} } - -X2ap-CellInformation-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, - ul-InterferenceOverloadIndication X2ap-UL-InterferenceOverloadIndication OPTIONAL, - ul-HighInterferenceIndicationInfo X2ap-UL-HighInterferenceIndicationInfo OPTIONAL, - relativeNarrowbandTxPower X2ap-RelativeNarrowbandTxPower OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-CellInformation-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CompositeAvailableCapacityGroup ::= SEQUENCE { - dL-CompositeAvailableCapacity X2ap-CompositeAvailableCapacity, - uL-CompositeAvailableCapacity X2ap-CompositeAvailableCapacity, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CompositeAvailableCapacityGroup-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-CompositeAvailableCapacity ::= SEQUENCE { - cellCapacityClassValue X2ap-CellCapacityClassValue OPTIONAL, - capacityValue X2ap-CapacityValue, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-CompositeAvailableCapacity-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CompositeAvailableCapacity-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-COUNTvalue ::= SEQUENCE { - pDCP-SN X2ap-PDCP-SN, - hFN X2ap-HFN, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-COUNTvalue-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-CompleteFailureCauseInformation-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE ---ProtocolIE-Single-Container { {X2ap-CompleteFailureCauseInformation-ItemIEs} } - -X2ap-CompleteFailureCauseInformation-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, - measurementFailureCause-List X2ap-MeasurementFailureCause-List, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-CompleteFailureCauseInformation-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CellMeasurementResult-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE ---ProtocolIE-Single-Container { {X2ap-CellMeasurementResult-ItemIEs} } - -X2ap-CellMeasurementResult-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, - hWLoadIndicator X2ap-HWLoadIndicator OPTIONAL, - s1TNLLoadIndicator X2ap-S1TNLLoadIndicator OPTIONAL, - radioResourceStatus X2ap-RadioResourceStatus OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions X2ap-ProtocolExtensionContainer { {X2ap-CellMeasurementResult-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CriticalityDiagnostics ::= SEQUENCE { - procedureCode X2ap-ProcedureCode OPTIONAL, - triggeringMessage X2ap-TriggeringMessage OPTIONAL, - procedureCriticality X2ap-Criticality OPTIONAL, - iEsCriticalityDiagnostics X2ap-CriticalityDiagnostics-IE-List OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-CriticalityDiagnostics-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - - -X2ap-CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..x2ap-maxNrOfErrors)) OF - SEQUENCE { - iECriticality X2ap-Criticality, - iE-ID X2ap-ProtocolIE-ID, - typeOfError X2ap-TypeOfError, - --EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-CriticalityDiagnostics-IE-List-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-CRNTI ::= BIT STRING (SIZE (16)) - -X2ap-CSGMembershipStatus ::= ENUMERATED { - member, - not-member -} - -X2ap-CSG-Id ::= BIT STRING (SIZE (27)) - -X2ap-CyclicPrefixDL ::= ENUMERATED { - normal, - extended, - ... -} - -X2ap-CyclicPrefixUL ::= ENUMERATED { - normal, - extended, - ... -} - - --- D - -X2ap-DeactivationIndication::= ENUMERATED { - deactivated, - ... -} - -X2ap-DL-Forwarding ::= ENUMERATED { - dL-forwardingProposed, - ... -} - -X2ap-DL-GBR-PRB-usage::= INTEGER (0..100) - -X2ap-DL-non-GBR-PRB-usage::= INTEGER (0..100) - -X2ap-DL-Total-PRB-usage::= INTEGER (0..100) - --- E - -X2ap-EARFCN ::= INTEGER (0..x2ap-maxEARFCN) - -X2ap-FDD-Info ::= SEQUENCE { - uL-EARFCN X2ap-EARFCN, - dL-EARFCN X2ap-EARFCN, - uL-Transmission-Bandwidth X2ap-Transmission-Bandwidth, - dL-Transmission-Bandwidth X2ap-Transmission-Bandwidth, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-FDD-Info-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-TDD-Info ::= SEQUENCE { - eARFCN X2ap-EARFCN, - transmission-Bandwidth X2ap-Transmission-Bandwidth, - subframeAssignment X2ap-SubframeAssignment, - specialSubframe-Info X2ap-SpecialSubframe-Info, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-TDD-Info-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} -X2ap-TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-EUTRA-Mode-Info ::= CHOICE { - fDD X2ap-FDD-Info, - tDD X2ap-TDD-Info, - ... -} - -X2ap-ECGI ::= SEQUENCE { - pLMN-Identity X2ap-PLMN-Identity, - eUTRANcellIdentifier X2ap-EUTRANCellIdentifier, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-ECGI-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ECGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ENB-ID ::= CHOICE { - macro-eNB-ID BIT STRING (SIZE (20)), - home-eNB-ID BIT STRING (SIZE (28)), - ... -} - -X2ap-EncryptionAlgorithms ::= BIT STRING (SIZE (16, ...)) - -X2ap-EPLMNs ::= SEQUENCE (SIZE(1..x2ap-maxnoofEPLMNs)) OF X2ap-PLMN-Identity - -X2ap-E-RAB-ID ::= INTEGER (0..15, ...) - -X2ap-E-RAB-Level-QoS-Parameters ::= SEQUENCE { - qCI X2ap-QCI, - allocationAndRetentionPriority X2ap-AllocationAndRetentionPriority, - gbrQosInformation X2ap-GBR-QosInformation OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-E-RAB-Level-QoS-Parameters-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-E-RAB-Level-QoS-Parameters-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - ---EURECOM X2ap-E-RAB-List ::= SEQUENCE (SIZE(1.. x2ap-maxnoofBearers)) OF ProtocolIE-Single-Container { {X2ap-E-RAB-ItemIEs} } -X2ap-E-RAB-List ::= SEQUENCE (SIZE (1.. x2ap-maxnoofBearers)) OF X2ap-IE - ---EURECOMX2ap-E-RAB-ItemIEs X2AP-PROTOCOL-IES ::= { ---EURECOM { ID id-E-RAB-Item CRITICALITY ignore TYPE X2ap-E-RAB-Item PRESENCE mandatory }, ---EURECOM ... ---EURECOM} - -X2ap-E-RAB-Item ::= SEQUENCE { - e-RAB-ID X2ap-E-RAB-ID, - cause X2ap-Cause, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RAB-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..x2ap-maxnoofBearers)) OF X2ap-IE - -X2ap-E-RABs-ToBeSetup-Item ::= SEQUENCE { - e-RAB-ID X2ap-E-RAB-ID, - e-RAB-Level-QoS-Parameters X2ap-E-RAB-Level-QoS-Parameters, - dL-Forwarding X2ap-DL-Forwarding OPTIONAL, - uL-GTPtunnelEndpoint X2ap-GTPtunnelEndpoint, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..x2ap-maxnoofBearers)) OF X2ap-IE ---ProtocolIE-Single-Container { {X2ap-E-RABs-Admitted-ItemIEs} } - -X2ap-E-RABs-Admitted-Item ::= SEQUENCE { - e-RAB-ID X2ap-E-RAB-ID, - uL-GTP-TunnelEndpoint X2ap-GTPtunnelEndpoint OPTIONAL, - dL-GTP-TunnelEndpoint X2ap-GTPtunnelEndpoint OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..x2ap-maxnoofBearers)) OF X2ap-IE ---ProtocolIE-Single-Container { { X2ap-E-RABs-SubjectToStatusTransfer-ItemIEs} } - -X2ap-E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { - e-RAB-ID X2ap-E-RAB-ID, - - receiveStatusofULPDCPSDUs X2ap-ReceiveStatusofULPDCPSDUs OPTIONAL, - uL-COUNTvalue X2ap-COUNTvalue, - dL-COUNTvalue X2ap-COUNTvalue, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) - -X2ap-EUTRANTraceID ::= OCTET STRING (SIZE (8)) - - -X2ap-EventType ::= ENUMERATED{ - change-of-serving-cell, - ... -} - - --- F - -X2ap-ForbiddenInterRATs ::= ENUMERATED { - all, - geran, - utran, - cdma2000, - ..., - geranandutran, - cdma2000andutran - -} - -X2ap-ForbiddenTAs ::= SEQUENCE (SIZE(1.. x2ap-maxnoofEPLMNsPlusOne)) OF X2ap-ForbiddenTAs-Item - -X2ap-ForbiddenTAs-Item ::= SEQUENCE { - pLMN-Identity X2ap-PLMN-Identity, - forbiddenTACs X2ap-ForbiddenTACs, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-ForbiddenTAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ForbiddenTACs ::= SEQUENCE (SIZE(1..x2ap-maxnoofForbTACs)) OF X2ap-TAC - -X2ap-ForbiddenLAs ::= SEQUENCE (SIZE(1..x2ap-maxnoofEPLMNsPlusOne)) OF X2ap-ForbiddenLAs-Item - -X2ap-ForbiddenLAs-Item ::= SEQUENCE { - pLMN-Identity X2ap-PLMN-Identity, - forbiddenLACs X2ap-ForbiddenLACs, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-ForbiddenLAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ForbiddenLACs ::= SEQUENCE (SIZE(1..x2ap-maxnoofForbLACs)) OF X2ap-LAC - -X2ap-Fourframes ::= BIT STRING (SIZE (24)) - -X2ap-FreqBandIndicator ::= INTEGER (1..64) - --- G - -X2ap-GBR-QosInformation ::= SEQUENCE { - e-RAB-MaximumBitrateDL X2ap-BitRate, - e-RAB-MaximumBitrateUL X2ap-BitRate, - e-RAB-GuaranteedBitrateDL X2ap-BitRate, - e-RAB-GuaranteedBitrateUL X2ap-BitRate, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-GBR-QosInformation-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-GBR-QosInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-GlobalENB-ID ::= SEQUENCE { - pLMN-Identity X2ap-PLMN-Identity, - eNB-ID X2ap-ENB-ID, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-GlobalENB-ID-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-GlobalENB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-GTPtunnelEndpoint ::= SEQUENCE { - transportLayerAddress X2ap-TransportLayerAddress, - gTP-TEID X2ap-GTP-TEI, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-GTPtunnelEndpoint-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-GTPtunnelEndpoint-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-GTP-TEI ::= OCTET STRING (SIZE (4)) - -X2ap-GUGroupIDList ::= SEQUENCE (SIZE (1..x2ap-maxPools)) OF X2ap-GU-Group-ID - - -X2ap-GU-Group-ID ::= SEQUENCE { - pLMN-Identity X2ap-PLMN-Identity, - mME-Group-ID X2ap-MME-Group-ID, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-GU-Group-ID-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-GU-Group-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - -X2ap-GUMMEI ::= SEQUENCE { - - gU-Group-ID X2ap-GU-Group-ID, - mME-Code X2ap-MME-Code, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-GUMMEI-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-GUMMEI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- H - -X2ap-HandoverReportType ::= ENUMERATED { - hoTooEarly, - hoToWrongCell, - ..., - interRATpingpong -} - -X2ap-HandoverRestrictionList ::= SEQUENCE { - servingPLMN X2ap-PLMN-Identity, - equivalentPLMNs X2ap-EPLMNs OPTIONAL, - forbiddenTAs X2ap-ForbiddenTAs OPTIONAL, - forbiddenLAs X2ap-ForbiddenLAs OPTIONAL, - forbiddenInterRATs X2ap-ForbiddenInterRATs OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-HandoverRestrictionList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-HFN ::= INTEGER (0..1048575) - -X2ap-HWLoadIndicator ::= SEQUENCE { - dLHWLoadIndicator X2ap-LoadIndicator, - uLHWLoadIndicator X2ap-LoadIndicator, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-HWLoadIndicator-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-HWLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- I - -X2ap-InvokeIndication ::= ENUMERATED{ - abs-information, - ... -} - -X2ap-IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16, ...)) - -X2ap-InterfacesToTrace ::= BIT STRING (SIZE (8)) --- J --- K - - -X2ap-Key-eNodeB-Star ::= BIT STRING (SIZE(256)) - --- L - - -X2ap-LAC ::= OCTET STRING (SIZE (2)) --(EXCEPT ('0000'H|'FFFE'H)) - -X2ap-LastVisitedCell-Item ::= CHOICE { - e-UTRAN-Cell X2ap-LastVisitedEUTRANCellInformation, - uTRAN-Cell X2ap-LastVisitedUTRANCellInformation, - gERAN-Cell X2ap-LastVisitedGERANCellInformation, - ... -} - -X2ap-LastVisitedEUTRANCellInformation ::= SEQUENCE { - global-Cell-ID X2ap-ECGI, - cellType X2ap-CellType, - time-UE-StayedInCell X2ap-Time-UE-StayedInCell, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-LastVisitedEUTRANCellInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { --- Extension for Rel-11 to support enhanced granularity for time UE stayed in cell -- ---EURECOM { ID id-Time-UE-StayedInCell-EnhancedGranularity CRITICALITY ignore EXTENSION X2ap-Time-UE-StayedInCell-EnhancedGranularity PRESENCE optional}| ---EURECOM { ID id-HO-cause CRITICALITY ignore EXTENSION X2ap-Cause PRESENCE optional}, - ... -} - -X2ap-LastVisitedUTRANCellInformation ::= OCTET STRING - -X2ap-LastVisitedGERANCellInformation ::= CHOICE { - undefined NULL, - ... -} - - -X2ap-LoadIndicator ::= ENUMERATED { - lowLoad, - mediumLoad, - highLoad, - overLoad, - ... -} - - - -X2ap-LocationReportingInformation ::= SEQUENCE { - eventType X2ap-EventType, - reportArea X2ap-ReportArea, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-LocationReportingInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::={ - ... -} - --- M - -X2ap-MDT-Activation ::= ENUMERATED { - immediate-MDT-only, - immediate-MDT-and-Trace, - ... -} - - -X2ap-MeasurementInitiationResult-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE ---ProtocolIE-Single-Container { { X2ap-MeasurementInitiationResult-ItemIEs} } - -X2ap-MeasurementInitiationResult-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, - measurementFailureCause-List X2ap-MeasurementFailureCause-List OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-MeasurementInitiationResult-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-MDT-Configuration ::= SEQUENCE { - mdt-Activation X2ap-MDT-Activation, - areaScopeOfMDT X2ap-AreaScopeOfMDT, - measurementsToActivate X2ap-MeasurementsToActivate, - reportingTriggerMDT X2ap-ReportingTriggerMDT, - thresholdeventA2 X2ap-ThresholdEventA2 OPTIONAL, --- Included in case of event-triggered reporting for measurement M1 - periodicReportingMDT X2ap-PeriodicReportingMDT OPTIONAL, --- Included in case of periodic reporting ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-MDT-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-MeasurementsToActivate::= BIT STRING (SIZE (8)) - -X2ap-MeasurementThresholdA2 ::= CHOICE { - threshold-RSRP X2ap-Threshold-RSRP, - threshold-RSRQ X2ap-Threshold-RSRQ, - ... -} - -X2ap-MME-Group-ID ::= OCTET STRING (SIZE (2)) - -X2ap-MME-Code ::= OCTET STRING (SIZE (1)) - -X2ap-Measurement-ID ::= INTEGER (1..4095, ...) - -X2ap-MBMS-Service-Area-Identity-List ::= SEQUENCE (SIZE(1.. x2ap-maxnoofMBMSServiceAreaIdentities)) OF X2ap-MBMS-Service-Area-Identity - -X2ap-MBMS-Service-Area-Identity ::= OCTET STRING (SIZE (2)) - -X2ap-MBSFN-Subframe-Infolist::= SEQUENCE (SIZE(1.. x2ap-maxnoofMBSFN)) OF X2ap-MBSFN-Subframe-Info - -X2ap-MBSFN-Subframe-Info ::= SEQUENCE { - radioframeAllocationPeriod X2ap-RadioframeAllocationPeriod, - radioframeAllocationOffset X2ap-RadioframeAllocationOffset, - subframeAllocation X2ap-SubframeAllocation, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { MBSFN-Subframe-Info-ExtIEs } } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ManagementBasedMDTallowed ::= ENUMERATED {allowed, ...} - -X2ap-MobilityParametersModificationRange ::= SEQUENCE { - handoverTriggerChangeLowerLimit INTEGER (-20..20), - handoverTriggerChangeUpperLimit INTEGER (-20..20), - ... -} - -X2ap-MobilityParametersInformation ::= SEQUENCE { - handoverTriggerChange INTEGER (-20..20), - ... -} - -X2ap-MultibandInfoList ::= SEQUENCE (SIZE(1..x2ap-maxnoofBands)) OF X2ap-BandInfo - - -X2ap-BandInfo ::= SEQUENCE { - freqBandIndicator X2ap-FreqBandIndicator, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { BandInfo-ExtIEs } } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-BandInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- N - -X2ap-Neighbour-Information ::= SEQUENCE (SIZE (0..x2ap-maxnoofNeighbours)) OF X2ap-Neighbour-Information-Elm - -X2ap-Neighbour-Information-Elm ::= SEQUENCE { - eCGI X2ap-ECGI, - pCI X2ap-PCI, - eARFCN X2ap-EARFCN, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-Neighbour-Information-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-Neighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ---LG { ID id-NeighbourTAC CRITICALITY ignore EXTENSION TAC PRESENCE optional}, - ... -} - -X2ap-NextHopChainingCount ::= INTEGER (0..7) - -X2ap-Number-of-Antennaports ::= ENUMERATED { - an1, - an2, - an4, - ... -} - --- O - -X2ap-Old-ECGIs::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ECGI - -X2ap-Oneframe ::= BIT STRING (SIZE (6)) - --- P -X2ap-PartialSuccessIndicator ::= ENUMERATED { - partial-success-allowed, -... -} - -X2ap-PDCP-SN ::= INTEGER (0..4095) - -X2ap-PCI ::= INTEGER (0..503, ...) - -X2ap-PeriodicReportingMDT ::= SEQUENCE { - reportInterval X2ap-ReportIntervalMDT, - reportAmount X2ap-ReportAmountMDT, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { PeriodicReportingMDT-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-PeriodicReportingMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-PLMN-Identity ::= OCTET STRING (SIZE(3)) - -X2ap-PRACH-Configuration ::= SEQUENCE { - rootSequenceIndex INTEGER (0..837), - zeroCorrelationIndex INTEGER (0..15), - highSpeedFlag BOOLEAN, - prach-FreqOffset INTEGER (0..94), - prach-ConfigIndex INTEGER (0..63) OPTIONAL, -- present for TDD -- ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {PRACH-Configuration-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-PRACH-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-Pre-emptionCapability ::= ENUMERATED { - shall-not-trigger-pre-emption, - may-trigger-pre-emption -} - -X2ap-Pre-emptionVulnerability ::= ENUMERATED { - not-pre-emptable, - pre-emptable -} - -X2ap-PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) - --- Q - -X2ap-QCI ::= INTEGER (0..255) - --- R - -X2ap-ReportingPeriodicity ::= ENUMERATED { - one-thousand-ms, - two-thousand-ms, - five-thousand-ms, - ten-thousand-ms, -... -} - -X2ap-RadioframeAllocationOffset ::= INTEGER (0..7, ...) - -X2ap-RadioframeAllocationPeriod ::= ENUMERATED{ - n1, - n2, - n4, - n8, - n16, - n32, - ... -} - - -X2ap-RadioResourceStatus ::= SEQUENCE { - dL-GBR-PRB-usage X2ap-DL-GBR-PRB-usage, - uL-GBR-PRB-usage X2ap-UL-GBR-PRB-usage, - dL-non-GBR-PRB-usage X2ap-DL-non-GBR-PRB-usage, - uL-non-GBR-PRB-usage X2ap-UL-non-GBR-PRB-usage, - dL-Total-PRB-usage X2ap-DL-Total-PRB-usage, - uL-Total-PRB-usage X2ap-UL-Total-PRB-usage, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {RadioResourceStatus-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-RadioResourceStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) - -X2ap-Registration-Request ::= ENUMERATED { - start, - stop, - ... -} - -X2ap-RelativeNarrowbandTxPower ::= SEQUENCE { - - rNTP-PerPRB BIT STRING (SIZE(6..110, ...)), - rNTP-Threshold X2ap-RNTP-Threshold, ---EURECOM COMMENT numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, - numberOfCellSpecificAntennaPortsTxPower ENUMERATED {one, two, four, ...}, - p-B INTEGER (0..3,...), - pDCCH-InterferenceImpact INTEGER (0..4,...), ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { RelativeNarrowbandTxPower-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-RelativeNarrowbandTxPower-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity} - -X2ap-ReportArea ::= ENUMERATED{ - ecgi, - ... -} - -X2ap-ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60} - -X2ap-ReportCharacteristics ::= BIT STRING (SIZE (32)) - -X2ap-ReportingTriggerMDT::= ENUMERATED{ - periodic, - a2eventtriggered, - ... -} - -X2ap-RNTP-Threshold ::= ENUMERATED { - minusInfinity, - minusEleven, - minusTen, - minusNine, - minusEight, - minusSeven, - minusSix, - minusFive, - minusFour, - minusThree, - minusTwo, - minusOne, - zero, - one, - two, - three, - ... -} - -X2ap-RRC-Context ::= OCTET STRING - -X2ap-RRCConnReestabIndicator ::= ENUMERATED { - reconfigurationFailure, handoverFailure, otherFailure, ... -} --- The values correspond to the values of ReestablishmentCause reported from the UE in the RRCConnectionReestablishmentRequest, as defined in TS 36.331 [9] - -X2ap-RRCConnSetupIndicator::= ENUMERATED { - rrcConnSetup, - ... -} - --- S -X2ap-ServedCellsToActivate::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ServedCellsToActivate-Item - -X2ap-ServedCellsToActivate-Item ::= SEQUENCE { - ecgi X2ap-ECGI, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-S1TNLLoadIndicator ::= SEQUENCE { - dLS1TNLLoadIndicator X2ap-LoadIndicator, - uLS1TNLLoadIndicator X2ap-LoadIndicator, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { S1TNLLoadIndicator-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - - - -X2ap-ServedCells ::= SEQUENCE (SIZE (1.. x2ap-maxCellineNB)) OF X2ap-ServedCellItem - - -X2ap-ServedCellItem ::= SEQUENCE { - servedCellInfo X2ap-ServedCell-Information, - neighbour-Info X2ap-Neighbour-Information OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-ServedCellsToModify::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ServedCellsToModify-Item - -X2ap-ServedCellsToModify-Item ::= SEQUENCE { - old-ecgi X2ap-ECGI, - servedCellInfo X2ap-ServedCell-Information, - neighbour-Info X2ap-Neighbour-Information OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ServedCellsToModify-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ServedCell-Information ::= SEQUENCE { - pCI X2ap-PCI, - cellId X2ap-ECGI, - tAC X2ap-TAC, - broadcastPLMNs X2ap-BroadcastPLMNs-Item, - eUTRA-Mode-Info X2ap-EUTRA-Mode-Info, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-ServedCell-Information-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ServedCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ---EURECOM { ID id-Number-of-Antennaports CRITICALITY ignore EXTENSION X2ap-Number-of-Antennaports PRESENCE optional }| ---EURECOM { ID id-PRACH-Configuration CRITICALITY ignore EXTENSION X2ap-PRACH-Configuration PRESENCE optional }| ---EURECOM { ID id-MBSFN-Subframe-Info CRITICALITY ignore EXTENSION X2ap-MBSFN-Subframe-Infolist PRESENCE optional }| ---EURECOM { ID id-CSG-Id CRITICALITY ignore EXTENSION X2ap-CSG-Id PRESENCE optional }| ---EURECOM { ID id-MBMS-Service-Area-List CRITICALITY ignore EXTENSION X2ap-MBMS-Service-Area-Identity-List PRESENCE optional }| ---EURECOM { ID id-MultibandInfoList CRITICALITY ignore EXTENSION X2ap-MultibandInfoList PRESENCE optional }, - ... -} - -X2ap-ShortMAC-I ::= BIT STRING (SIZE(16)) - -X2ap-SRVCCOperationPossible ::= ENUMERATED { - possible, - ... -} - -X2ap-SubframeAssignment ::= ENUMERATED { - sa0, - sa1, - sa2, - sa3, - sa4, - sa5, - sa6, - ... -} - -X2ap-SpecialSubframe-Info ::= SEQUENCE { - specialSubframePatterns X2ap-SpecialSubframePatterns, - cyclicPrefixDL X2ap-CyclicPrefixDL, - cyclicPrefixUL X2ap-CyclicPrefixUL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { SpecialSubframe-Info-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-SpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - -X2ap-SpecialSubframePatterns ::= ENUMERATED { - ssp0, - ssp1, - ssp2, - ssp3, - ssp4, - ssp5, - ssp6, - ssp7, - ssp8, - ..., - ssp9 -} - -X2ap-SubscriberProfileIDforRFP ::= INTEGER (1..256) - -X2ap-SubframeAllocation ::= CHOICE { - oneframe X2ap-Oneframe, - fourframes X2ap-Fourframes, - ... -} - --- T - -X2ap-TAC ::= OCTET STRING (SIZE (2)) - -X2ap-TABasedMDT::= SEQUENCE { - tAListforMDT X2ap-TAListforMDT, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-TABasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-TAListforMDT ::= SEQUENCE (SIZE(1..x2ap-maxnoofTAforMDT)) OF X2ap-TAC - -X2ap-TargetCellInUTRAN ::= OCTET STRING -- This IE is to be encoded according to the UTRAN Cell ID in the Last Visited UTRAN Cell Information IE in TS 25.413 [24] - -X2ap-ThresholdEventA2 ::= SEQUENCE { - measurementThreshold X2ap-MeasurementThresholdA2, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { ThresholdEventA2-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-ThresholdEventA2-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-TargeteNBtoSource-eNBTransparentContainer ::= OCTET STRING - -X2ap-Threshold-RSRP ::= INTEGER(0..97) - -X2ap-Threshold-RSRQ ::= INTEGER(0..34) - -X2ap-TimeToWait ::= ENUMERATED { - v1s, - v2s, - v5s, - v10s, - v20s, - v60s, - ... -} - -X2ap-Time-UE-StayedInCell ::= INTEGER (0..4095) - -X2ap-Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950) - - -X2ap-TraceActivation ::= SEQUENCE { - eUTRANTraceID X2ap-EUTRANTraceID, - interfacesToTrace X2ap-InterfacesToTrace, -traceDepth X2ap-TraceDepth, -traceCollectionEntityIPAddress X2ap-TraceCollectionEntityIPAddress, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-TraceActivation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ---EURECOM { ID id-MDTConfiguration CRITICALITY ignore EXTENSION X2ap-MDT-Configuration PRESENCE optional}, - ... -} - -X2ap-TraceCollectionEntityIPAddress ::= BIT STRING (SIZE(1..160, ...)) - -X2ap-TraceDepth ::= ENUMERATED { - minimum, - medium, - maximum, - minimumWithoutVendorSpecificExtension, - mediumWithoutVendorSpecificExtension, - maximumWithoutVendorSpecificExtension, - ... -} - - - - -X2ap-Transmission-Bandwidth ::= ENUMERATED { - bw6, - bw15, - bw25, - bw50, - bw75, - bw100, - ... -} - -X2ap-TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) - -X2ap-TypeOfError ::= ENUMERATED { - not-understood, - missing, - ... -} - - --- U - -X2ap-UE-HistoryInformation ::= SEQUENCE (SIZE(1..x2ap-maxnoofCells)) OF X2ap-LastVisitedCell-Item - - -X2ap-UE-S1AP-ID ::= INTEGER (0.. 4294967295) - -X2ap-UE-X2AP-ID ::= INTEGER (0..4095) - -X2ap-UEAggregateMaximumBitRate ::= SEQUENCE { - uEaggregateMaximumBitRateDownlink X2ap-BitRate, - uEaggregateMaximumBitRateUplink X2ap-BitRate, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrate-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-UEAggregate-MaximumBitrate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-UESecurityCapabilities ::= SEQUENCE { - encryptionAlgorithms X2ap-EncryptionAlgorithms, - integrityProtectionAlgorithms X2ap-IntegrityProtectionAlgorithms, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { UESecurityCapabilities-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, -... -} - -X2ap-UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-UE-ContextInformation ::= SEQUENCE { - mME-UE-S1AP-ID X2ap-UE-S1AP-ID, - uESecurityCapabilities X2ap-UESecurityCapabilities, - aS-SecurityInformation X2ap-AS-SecurityInformation, - uEaggregateMaximumBitRate X2ap-UEAggregateMaximumBitRate, - subscriberProfileIDforRFP X2ap-SubscriberProfileIDforRFP OPTIONAL, - e-RABs-ToBeSetup-List X2ap-E-RABs-ToBeSetup-List, - rRC-Context X2ap-RRC-Context, - handoverRestrictionList X2ap-HandoverRestrictionList OPTIONAL, - locationReportingInformation X2ap-LocationReportingInformation OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-UE-ContextInformation-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-UL-GBR-PRB-usage::= INTEGER (0..100) - -X2ap-UL-non-GBR-PRB-usage::= INTEGER (0..100) - -X2ap-UL-Total-PRB-usage::= INTEGER (0..100) - -X2ap-UL-InterferenceOverloadIndication ::= SEQUENCE (SIZE(1..x2ap-maxnoofPRBs)) OF X2ap-UL-InterferenceOverloadIndication-Item - -X2ap-UL-InterferenceOverloadIndication-Item ::= ENUMERATED { - high-interference, - medium-interference, - low-interference, - ... -} - -X2ap-UL-HighInterferenceIndicationInfo ::= SEQUENCE (SIZE(1..x2ap-maxCellineNB)) OF X2ap-UL-HighInterferenceIndicationInfo-Item - -X2ap-UL-HighInterferenceIndicationInfo-Item ::= SEQUENCE { - target-Cell-ID X2ap-ECGI, - ul-interferenceindication X2ap-UL-HighInterferenceIndication, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { UL-HighInterferenceIndicationInfo-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-UL-HighInterferenceIndicationInfo-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...)) - -X2ap-UE-RLF-Report-Container::= OCTET STRING --- This IE is a transparent container and shall be encoded as the rlfReport field contained in the UEInformationResponse message as defined in TS 36.331 [9] - -X2ap-UsableABSInformation ::= CHOICE { - fdd X2ap-UsableABSInformationFDD, - tdd X2ap-UsableABSInformationTDD, - ... -} - -X2ap-UsableABSInformationFDD ::= SEQUENCE { - usable-abs-pattern-info BIT STRING (SIZE(40)), ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { UsableABSInformationFDD-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-UsableABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-UsableABSInformationTDD ::= SEQUENCE { - usaable-abs-pattern-info BIT STRING (SIZE(1..70, ...)), ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { UsableABSInformationTDD-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - -X2ap-UsableABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- V --- W --- X --- Y --- Z - -END - diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn deleted file mode 100755 index d0a3546a15..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn +++ /dev/null @@ -1,892 +0,0 @@ --- ************************************************************** --- --- PDU definitions for X2AP. --- --- ************************************************************** - -X2AP-PDU-Contents { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-PDU-Contents (1) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - X2ap-ABSInformation, - X2ap-ABS-Status, - X2ap-AS-SecurityInformation, - X2ap-Cause, - X2ap-CompositeAvailableCapacityGroup, - X2ap-COUNTvalue, - X2ap-CriticalityDiagnostics, - X2ap-CRNTI, - X2ap-CSGMembershipStatus, - X2ap-CSG-Id, - X2ap-DeactivationIndication, - X2ap-DL-Forwarding, - X2ap-ECGI, - X2ap-E-RAB-ID, - X2ap-E-RAB-Level-QoS-Parameters, - X2ap-E-RAB-List, - X2ap-EUTRANTraceID, - X2ap-GlobalENB-ID, - X2ap-GTPtunnelEndpoint, - X2ap-GUGroupIDList, - X2ap-GUMMEI, - X2ap-HandoverReportType, - X2ap-HandoverRestrictionList, - X2ap-InvokeIndication, - X2ap-LocationReportingInformation, - X2ap-MDT-Configuration, - X2ap-ManagementBasedMDTallowed, - X2ap-Neighbour-Information, - X2ap-PCI, - X2ap-PDCP-SN, - X2ap-PLMN-Identity, - X2ap-ReceiveStatusofULPDCPSDUs, - X2ap-Registration-Request, - X2ap-RelativeNarrowbandTxPower, - X2ap-RadioResourceStatus, - X2ap-RRCConnReestabIndicator, - X2ap-RRCConnSetupIndicator, - X2ap-UE-RLF-Report-Container, - X2ap-RRC-Context, - X2ap-ServedCell-Information, - X2ap-ServedCells, - X2ap-ShortMAC-I, - X2ap-SRVCCOperationPossible, - X2ap-SubscriberProfileIDforRFP, - X2ap-TargetCellInUTRAN, - X2ap-TargeteNBtoSource-eNBTransparentContainer, - X2ap-TimeToWait, - X2ap-TraceActivation, - X2ap-TraceDepth, - - X2ap-TransportLayerAddress, - X2ap-UEAggregateMaximumBitRate, - X2ap-UE-HistoryInformation, - X2ap-UE-S1AP-ID, - X2ap-UESecurityCapabilities, - X2ap-UE-X2AP-ID, - X2ap-UL-HighInterferenceIndicationInfo, - X2ap-UL-InterferenceOverloadIndication, - X2ap-HWLoadIndicator, - X2ap-S1TNLLoadIndicator, - X2ap-Measurement-ID, - X2ap-ReportCharacteristics, - X2ap-MobilityParametersInformation, - X2ap-MobilityParametersModificationRange - - - - -FROM X2AP-IEs - - PrivateIE-Container{}, - ProtocolExtensionContainer{}, - ProtocolIE-Container{}, - ProtocolIE-ContainerList{}, - ProtocolIE-ContainerPair{}, - ProtocolIE-ContainerPairList{}, - ProtocolIE-Single-Container{}, - X2AP-PRIVATE-IES, - X2AP-PROTOCOL-EXTENSION, - X2AP-PROTOCOL-IES, - X2AP-PROTOCOL-IES-PAIR -FROM X2AP-Containers - - id-ABSInformation, - id-ActivatedCellList, - id-Cause, - id-CellInformation, - id-CellInformation-Item, - id-CellMeasurementResult, - id-CellMeasurementResult-Item, - id-CellToReport, - id-CellToReport-Item, - id-CompositeAvailableCapacityGroup, - id-CriticalityDiagnostics, - id-DeactivationIndication, - id-E-RABs-Admitted-Item, - id-E-RABs-Admitted-List, - id-E-RABs-NotAdmitted-List, - id-E-RABs-SubjectToStatusTransfer-List, - id-E-RABs-SubjectToStatusTransfer-Item, - id-E-RABs-ToBeSetup-Item, - id-GlobalENB-ID, - id-GUGroupIDList, - id-GUGroupIDToAddList, - id-GUGroupIDToDeleteList, - id-GUMMEI-ID, - id-InvokeIndication, - id-New-eNB-UE-X2AP-ID, - id-Old-eNB-UE-X2AP-ID, - id-Registration-Request, - id-ReportingPeriodicity, - id-ServedCells, - id-ServedCellsToActivate, - id-ServedCellsToAdd, - id-ServedCellsToModify, - id-ServedCellsToDelete, - id-SRVCCOperationPossible, - id-TargetCell-ID, - id-TargeteNBtoSource-eNBTransparentContainer, - id-TimeToWait, - id-TraceActivation, - id-UE-ContextInformation, - id-UE-HistoryInformation, - id-UE-X2AP-ID, - id-Measurement-ID, - id-ReportCharacteristics, - id-ENB1-Measurement-ID, - id-ENB2-Measurement-ID, - id-ENB1-Cell-ID, - id-ENB2-Cell-ID, - id-ENB2-Proposed-Mobility-Parameters, - id-ENB1-Mobility-Parameters, - id-ENB2-Mobility-Parameters-Modification-Range, - id-FailureCellPCI, - id-Re-establishmentCellECGI, - id-FailureCellCRNTI, - id-ShortMAC-I, - id-SourceCellECGI, - id-FailureCellECGI, - id-HandoverReportType, - id-UE-RLF-Report-Container, - id-PartialSuccessIndicator, - id-MeasurementInitiationResult-List, - id-MeasurementInitiationResult-Item, - id-MeasurementFailureCause-Item, - id-CompleteFailureCauseInformation-List, - id-CompleteFailureCauseInformation-Item, - id-CSGMembershipStatus, - id-CSG-Id, - id-MDTConfiguration, - id-ManagementBasedMDTallowed, - id-ABS-Status, - id-RRCConnSetupIndicator, - id-RRCConnReestabIndicator, - id-TargetCellInUTRAN, - - x2ap-maxCellineNB, - x2ap-maxnoofBearers, - x2ap-maxnoofPDCP-SN, - x2ap-maxFailedMeasObjects, - x2ap-maxnoofCellIDforMDT, - x2ap-maxnoofTAforMDT - -FROM X2AP-Constants; - --- ************************************************************** --- --- HANDOVER REQUEST --- --- ************************************************************** - -X2ap-HandoverRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-HandoverRequest-IEs}}, - ... -} - -X2ap-HandoverRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE X2ap-UE-X2AP-ID PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory }| - { ID id-TargetCell-ID CRITICALITY reject TYPE X2ap-ECGI PRESENCE mandatory }| - { ID id-GUMMEI-ID CRITICALITY reject TYPE X2ap-GUMMEI PRESENCE mandatory }| - { ID id-UE-ContextInformation CRITICALITY reject TYPE X2ap-UE-ContextInformation PRESENCE mandatory }| - { ID id-UE-HistoryInformation CRITICALITY ignore TYPE X2ap-UE-HistoryInformation PRESENCE mandatory }| - { ID id-TraceActivation CRITICALITY ignore TYPE X2ap-TraceActivation PRESENCE optional}| - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE X2ap-SRVCCOperationPossible PRESENCE optional}| - { ID id-CSGMembershipStatus CRITICALITY reject TYPE X2ap-CSGMembershipStatus PRESENCE optional}, - ... -} - - -X2ap-UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { -{ ID id-ManagementBasedMDTallowed CRITICALITY ignore EXTENSION X2ap-ManagementBasedMDTallowed PRESENCE optional }, - ... -} - -X2ap-E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..x2ap-maxnoofBearers)) OF ProtocolIE-Single-Container { {X2ap-E-RABs-ToBeSetup-ItemIEs} } - -X2ap-E-RABs-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE X2ap-E-RABs-ToBeSetup-Item PRESENCE mandatory }, - ... -} - -X2ap-E-RABs-ToBeSetup-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- HANDOVER REQUEST ACKNOWLEDGE --- --- ************************************************************** - -X2ap-HandoverRequestAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-HandoverRequestAcknowledge-IEs}}, - ... -} - -X2ap-HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE X2ap-E-RABs-Admitted-List PRESENCE mandatory} | - { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE X2ap-E-RAB-List PRESENCE optional} | - { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE X2ap-TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - -X2ap-E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..x2ap-maxnoofBearers)) OF ProtocolIE-Single-Container { {X2ap-E-RABs-Admitted-ItemIEs} } - -X2ap-E-RABs-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-E-RABs-Admitted-Item CRITICALITY ignore TYPE X2ap-E-RABs-Admitted-Item PRESENCE mandatory } -} - -X2ap-E-RABs-Admitted-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- HANDOVER PREPARATION FAILURE --- --- ************************************************************** - -X2ap-HandoverPreparationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-HandoverPreparationFailure-IEs}}, - ... -} - -X2ap-HandoverPreparationFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - - ... -} - --- ************************************************************** --- --- Handover Report --- --- ************************************************************** - -X2ap-HandoverReport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-HandoverReport-IEs}}, - ... -} - -X2ap-HandoverReport-IEs X2AP-PROTOCOL-IES ::= { - { ID id-HandoverReportType CRITICALITY ignore TYPE X2ap-HandoverReportTYPE X2ap-PRESENCE mandatory}| - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory} | - { ID id-SourceCellECGI CRITICALITY ignore TYPE X2ap-ECGI PRESENCE mandatory}| - { ID id-FailureCellECGI CRITICALITY ignore TYPE X2ap-ECGI PRESENCE mandatory} | - { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE X2ap-ECGI PRESENCE conditional} -- The IE shall be present if the Handover Report TYPE X2ap-IE is set to “HO to Wrong Cell” -- | - { ID id-TargetCellInUTRAN CRITICALITY ignore TYPE X2ap-TargetCellInUTRAN PRESENCE conditional} -- The IE shall be present if the Handover Report TYPE X2ap-IE is set to "InterRAT ping-pong" --, - ... -} - --- ************************************************************** --- --- SN Status Transfer --- --- ************************************************************** - -X2ap-SNStatusTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-SNStatusTransfer-IEs}}, - ... -} - -X2ap-SNStatusTransfer-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-E-RABs-SubjectToStatusTransfer-List CRITICALITY ignore TYPE X2ap-E-RABs-SubjectToStatusTransfer-List PRESENCE mandatory} , - ... -} - -X2ap-E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..x2ap-maxnoofBearers)) OF ProtocolIE-Single-Container { { X2ap-E-RABs-SubjectToStatusTransfer-ItemIEs} } - -X2ap-E-RABs-SubjectToStatusTransfer-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-E-RABs-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE X2ap-E-RABs-SubjectToStatusTransfer-Item PRESENCE mandatory } -} - -X2ap-E-RABs-SubjectToStatusTransfer-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - - - - --- ************************************************************** --- --- UE Context Release --- --- ************************************************************** - -X2ap-UEContextRelease ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-UEContextRelease-IEs}}, - ... -} - -X2ap-UEContextRelease-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} , - ... -} - - --- ************************************************************** --- --- HANDOVER CANCEL --- --- ************************************************************** - -X2ap-HandoverCancel ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-HandoverCancel-IEs}}, - ... -} - -X2ap-HandoverCancel-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-UE-X2AP-ID PRESENCE optional} | - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- ERROR INDICATION --- --- ************************************************************** - -X2ap-ErrorIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ErrorIndication-IEs}}, - ... -} - -X2ap-ErrorIndication-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-UE-X2AP-ID PRESENCE optional} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-UE-X2AP-ID PRESENCE optional} | - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE optional} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional} , - ... -} - --- ************************************************************** --- --- Reset Request --- --- ************************************************************** - -X2ap-ResetRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ResetRequest-IEs}}, - ... -} - -X2ap-ResetRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- Reset Response --- --- ************************************************************** - -X2ap-ResetResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ResetResponse-IEs}}, - ... -} - -X2ap-ResetResponse-IEs X2AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- X2 SETUP REQUEST --- --- ************************************************************** - -X2SetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}}, - ... -} - -X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-GlobalENB-ID CRITICALITY reject TYPE X2ap-GlobalENB-ID PRESENCE mandatory} | - { ID id-ServedCells CRITICALITY reject TYPE X2ap-ServedCells PRESENCE mandatory} | - { ID id-GUGroupIDList CRITICALITY reject TYPE X2ap-GUGroupIDList PRESENCE optional}, -... -} - - - --- ************************************************************** --- --- X2 SETUP RESPONSE --- --- ************************************************************** - -X2SetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}}, - ... -} - -X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { - { ID id-GlobalENB-ID CRITICALITY reject TYPE X2ap-GlobalENB-ID PRESENCE mandatory} | - { ID id-ServedCells CRITICALITY reject TYPE X2ap-ServedCells PRESENCE mandatory} | - { ID id-GUGroupIDList CRITICALITY reject TYPE X2ap-GUGroupIDList PRESENCE optional}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - - - --- ************************************************************** --- --- X2 SETUP FAILURE --- --- ************************************************************** - -X2SetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2SetupFailure-IEs}}, - ... -} - -X2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory} | - { ID id-TimeToWait CRITICALITY ignore TYPE X2ap-TimeToWait PRESENCE optional} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - - ... -} - - - --- ************************************************************** --- --- LOAD INFORMATION --- --- ************************************************************** - -X2ap-LoadInformation ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-LoadInformation-IEs}}, - ... -} - -X2ap-LoadInformation-IEs X2AP-PROTOCOL-IES ::= { - { ID id-CellInformation CRITICALITY ignore TYPE X2ap-CellInformation-List PRESENCE mandatory} , - ... -} - -X2ap-CellInformation-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF ProtocolIE-Single-Container { {X2ap-CellInformation-ItemIEs} } - -X2ap-CellInformation-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-CellInformation-Item CRITICALITY ignore TYPE X2ap-CellInformation-Item PRESENCE mandatory } -} - - -X2ap-CellInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { -{ ID id-ABSInformation CRITICALITY ignore EXTENSION X2ap-ABSInformation PRESENCE optional }| -{ ID id-InvokeIndication CRITICALITY ignore EXTENSION X2ap-InvokeIndication PRESENCE optional }, - ... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE --- --- ************************************************************** - -X2ap-ENBConfigurationUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ENBConfigurationUpdate-IEs}}, - ... -} - -X2ap-ENBConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ServedCellsToAdd CRITICALITY reject TYPE X2ap-ServedCells PRESENCE optional} | - { ID id-ServedCellsToModify CRITICALITY reject TYPE X2ap-ServedCellsToModify PRESENCE optional} | - { ID id-ServedCellsToDelete CRITICALITY reject TYPE X2ap-Old-ECGIs PRESENCE optional} | - { ID id-GUGroupIDToAddList CRITICALITY reject TYPE X2ap-GUGroupIDList PRESENCE optional} | - { ID id-GUGroupIDToDeleteList CRITICALITY reject TYPE X2ap-GUGroupIDList PRESENCE optional}, - ... -} - -X2ap-ServedCellsToModify::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ServedCellsToModify-Item - - -ServedCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { -{ ID id-DeactivationIndication CRITICALITY ignore EXTENSION X2ap-DeactivationIndication PRESENCE optional }, - ... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE ACKNOWLEDGE --- --- ************************************************************** - -X2ap-ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ENBConfigurationUpdateAcknowledge-IEs}}, - ... -} - -X2ap-ENBConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, -... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE FAIURE --- --- ************************************************************** - -X2ap-ENBConfigurationUpdateFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ENBConfigurationUpdateFailure-IEs}}, - ... -} - -X2ap-ENBConfigurationUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE X2ap-TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - - - --- ************************************************************** --- --- Resource Status Request --- --- ************************************************************** - -X2ap-ResourceStatusRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ResourceStatusRequest-IEs}}, - ... -} - -X2ap-ResourceStatusRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE X2ap-Measurement-ID PRESENCE mandatory}| - { ID id-ENB2-Measurement-ID CRITICALITY ignore TYPE X2ap-Measurement-ID PRESENCE conditional}|-- The IE shall be present if the Registration Request IE is set to “Stop”-- - { ID id-Registration-Request CRITICALITY reject TYPE X2ap-Registration-Request PRESENCE mandatory}| - { ID id-ReportCharacteristics CRITICALITY reject TYPE X2ap-ReportCharacteristics PRESENCE optional}| - { ID id-CellToReport CRITICALITY ignore TYPE X2ap-CellToReport-List PRESENCE mandatory}| - { ID id-ReportingPeriodicity CRITICALITY ignore TYPE X2ap-ReportingPeriodicity PRESENCE optional}| - { ID id-PartialSuccessIndicator CRITICALITY ignore TYPE X2ap-PartialSuccessIndicator PRESENCE optional}, - ... -} - - -X2ap-CellToReport-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF ProtocolIE-Single-Container { {X2ap-CellToReport-ItemIEs} } - -X2ap-CellToReport-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-CellToReport-Item CRITICALITY ignore TYPE X2ap-CellToReport-Item PRESENCE mandatory } -} - - - -X2ap-CellToReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - - -X2ap-ReportingPeriodicity ::= ENUMERATED { - one-thousand-ms, - two-thousand-ms, - five-thousand-ms, - ten-thousand-ms, -... -} - -X2ap-PartialSuccessIndicator ::= ENUMERATED { - partial-success-allowed, -... -} - --- ************************************************************** --- --- Resource Status Response --- --- ************************************************************** - -X2ap-ResourceStatusResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ResourceStatusResponse-IEs}}, - ... -} - -X2ap-ResourceStatusResponse-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE X2ap-Measurement-ID PRESENCE mandatory}| - { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE X2ap-Measurement-ID PRESENCE mandatory}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional}| - { ID id-MeasurementInitiationResult-List CRITICALITY ignore TYPE X2ap-MeasurementInitiationResult-List PRESENCE optional}, - ... -} - - -X2ap-MeasurementInitiationResult-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF ProtocolIE-Single-Container { { X2ap-MeasurementInitiationResult-ItemIEs} } - -X2ap-MeasurementInitiationResult-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-MeasurementInitiationResult-Item CRITICALITY ignore TYPE X2ap-MeasurementInitiationResult-Item PRESENCE mandatory} -} - - - -X2ap-MeasurementInitiationResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2ap-MeasurementFailureCause-List ::= SEQUENCE (SIZE (1..x2ap-maxFailedMeasObjects)) OF ProtocolIE-Single-Container { { X2ap-MeasurementFailureCause-ItemIEs} } - -X2ap-MeasurementFailureCause-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-MeasurementFailureCause-Item CRITICALITY ignore TYPE X2ap-MeasurementFailureCause-Item PRESENCE mandatory} -} - - -X2ap-MeasurementFailureCause-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Resource Status Failure --- --- ************************************************************** - -X2ap-ResourceStatusFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ResourceStatusFailure-IEs}}, - ... -} - -X2ap-ResourceStatusFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE X2ap-Measurement-ID PRESENCE mandatory}| - { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE X2ap-Measurement-ID PRESENCE mandatory}| - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional}| - { ID id-CompleteFailureCauseInformation-List CRITICALITY ignore TYPE X2ap-CompleteFailureCauseInformation-List PRESENCE optional}, - ... -} - -X2ap-CompleteFailureCauseInformation-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF ProtocolIE-Single-Container { {X2ap-CompleteFailureCauseInformation-ItemIEs} } - -X2ap-CompleteFailureCauseInformation-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-CompleteFailureCauseInformation-Item CRITICALITY ignore TYPE X2ap-CompleteFailureCauseInformation-Item PRESENCE mandatory} -} - -X2ap-CompleteFailureCauseInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Resource Status Update --- --- ************************************************************** - -X2ap-ResourceStatusUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-ResourceStatusUpdate-IEs}}, - ... -} - -X2ap-ResourceStatusUpdate-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE X2ap-Measurement-ID PRESENCE mandatory}| - { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE X2ap-Measurement-ID PRESENCE mandatory}| - { ID id-CellMeasurementResult CRITICALITY ignore TYPE X2ap-CellMeasurementResult-List PRESENCE mandatory}, - ... -} - -X2ap-CellMeasurementResult-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF ProtocolIE-Single-Container { {X2ap-CellMeasurementResult-ItemIEs} } - -X2ap-CellMeasurementResult-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-CellMeasurementResult-Item CRITICALITY ignore TYPE X2ap-CellMeasurementResult-Item PRESENCE mandatory } -} - -X2ap-CellMeasurementResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - { ID id-CompositeAvailableCapacityGroup CRITICALITY ignore EXTENSION X2ap-CompositeAvailableCapacityGroup PRESENCE optional}| - { ID id-ABS-Status CRITICALITY ignore EXTENSION X2ap-ABS-Status PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- PRIVATE MESSAGE --- --- ************************************************************** - -X2ap-PrivateMessage ::= SEQUENCE { - privateIEs PrivateIE-Container {{X2ap-PrivateMessage-IEs}}, - ... -} - -X2ap-PrivateMessage-IEs X2AP-PRIVATE-IES ::= { - ... -} - --- ************************************************************** --- --- MOBILITY CHANGE REQUEST --- --- ************************************************************** - -X2ap-MobilityChangeRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-MobilityChangeRequest-IEs}}, - ... -} - -X2ap-MobilityChangeRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Cell-ID CRITICALITY reject TYPE X2ap-ECGI PRESENCE mandatory }| - { ID id-ENB2-Cell-ID CRITICALITY reject TYPE X2ap-ECGI PRESENCE mandatory }| - { ID id-ENB1-Mobility-Parameters CRITICALITY ignore TYPE X2ap-MobilityParametersInformation PRESENCE optional }| - { ID id-ENB2-Proposed-Mobility-Parameters CRITICALITY reject TYPE X2ap-MobilityParametersInformation PRESENCE mandatory }| - { ID id-Cause CRITICALITY reject TYPE X2ap-Cause PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- MOBILITY CHANGE ACKNOWLEDGE --- --- ************************************************************** - -X2ap-MobilityChangeAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-MobilityChangeAcknowledge-IEs}}, - ... -} - -X2ap-MobilityChangeAcknowledge-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Cell-ID CRITICALITY reject TYPE X2ap-ECGI PRESENCE mandatory }| - { ID id-ENB2-Cell-ID CRITICALITY reject TYPE X2ap-ECGI PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- MOBILITY CHANGE FAILURE --- --- ************************************************************** - -X2ap-MobilityChangeFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-MobilityChangeFailure-IEs}}, - ... -} - -X2ap-MobilityChangeFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ENB1-Cell-ID CRITICALITY ignore TYPE X2ap-ECGI PRESENCE mandatory }| - { ID id-ENB2-Cell-ID CRITICALITY ignore TYPE X2ap-ECGI PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory }| - { ID id-ENB2-Mobility-Parameters-Modification-Range CRITICALITY ignore TYPE X2ap-MobilityParametersModificationRange PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- Radio Link Failure Indication --- --- ************************************************************** - -X2ap-RLFIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-RLFIndication-IEs}}, - ... -} - -X2ap-RLFIndication-IEs X2AP-PROTOCOL-IES ::= { - { ID id-FailureCellPCI CRITICALITY ignore TYPE X2ap-PCI PRESENCE mandatory}| - { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE X2ap-ECGI PRESENCE mandatory}| - { ID id-FailureCellCRNTI CRITICALITY ignore TYPE X2ap-CRNTI PRESENCE mandatory}| - { ID id-ShortMAC-I CRITICALITY ignore TYPE X2ap-ShortMAC-I PRESENCE optional}| - { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE X2ap-UE-RLF-Report-Container PRESENCE optional}| - { ID id-RRCConnSetupIndicator CRITICALITY reject TYPE X2ap-RRCConnSetupIndicator PRESENCE optional}| - { ID id-RRCConnReestabIndicator CRITICALITY ignore TYPE X2ap-RRCConnReestabIndicator PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- Cell Activation Request --- --- ************************************************************** - -X2ap-CellActivationRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-CellActivationRequest-IEs}}, - ... -} - -X2ap-CellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ServedCellsToActivate CRITICALITY reject TYPE X2ap-ServedCellsToActivate PRESENCE mandatory }, - ... -} - -X2ap-ServedCellsToActivate::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ServedCellsToActivate-Item - - -X2ap-ServedCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Cell Activation Response --- --- ************************************************************** - -X2ap-CellActivationResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-CellActivationResponse-IEs}}, - ... -} - -X2ap-CellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { - { ID id-ActivatedCellList CRITICALITY ignore TYPE X2ap-ActivatedCellList PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - -X2ap-ActivatedCellList ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ActivatedCellList-Item - - - -X2ap-ActivatedCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { - ... -} - ---************************************************************** --- --- CELL ACTIVATION FAILURE --- --- ************************************************************** - -X2ap-CellActivationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-CellActivationFailure-IEs}}, - ... -} - -X2ap-CellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - -END diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Descriptions.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Descriptions.asn deleted file mode 100755 index 9722ec8559..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Descriptions.asn +++ /dev/null @@ -1,243 +0,0 @@ --- ************************************************************** --- --- Elementary Procedure definitions --- --- ************************************************************** -X2AP-PDU-Descriptions { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-PDU-Descriptions (0) } -DEFINITIONS AUTOMATIC TAGS ::= -BEGIN --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** -IMPORTS - X2ap-Criticality, - X2ap-ProcedureCode -FROM X2AP-CommonDataTypes - - X2ap-CellActivationRequest, - X2ap-CellActivationResponse, - X2ap-CellActivationFailure, - X2ap-ENBConfigurationUpdate, - X2ap-ENBConfigurationUpdateAcknowledge, - X2ap-ENBConfigurationUpdateFailure, - X2ap-ErrorIndication, - X2ap-HandoverCancel, - X2ap-HandoverReport, - X2ap-HandoverPreparationFailure, - X2ap-HandoverRequest, - X2ap-HandoverRequestAcknowledge, - X2ap-LoadInformation, - X2ap-PrivateMessage, - X2ap-ResetRequest, - X2ap-ResetResponse, - X2ap-ResourceStatusFailure, - X2ap-ResourceStatusRequest, - X2ap-ResourceStatusResponse, - X2ap-ResourceStatusUpdate, - X2ap-RLFIndication, - X2ap-SNStatusTransfer, - X2ap-UEContextRelease, - X2SetupFailure, X2SetupRequest, - X2SetupResponse, - X2ap-MobilityChangeRequest, - X2ap-MobilityChangeAcknowledge, - X2ap-MobilityChangeFailure -FROM X2AP-PDU-Contents - - id-cellActivation, - id-eNBConfigurationUpdate, - id-errorIndication, - id-handoverCancel, - id-handoverReport, - id-handoverPreparation, - id-loadIndication, - id-privateMessage, - id-reset, - id-resourceStatusReporting, - id-resourceStatusReportingInitiation, - id-rLFIndication, - id-snStatusTransfer, - id-uEContextRelease, - id-x2Setup, - id-mobilitySettingsChange -FROM X2AP-Constants; - --- ************************************************************** --- --- Interface Elementary Procedure Class --- --- ************************************************************** -X2AP-ELEMENTARY-PROCEDURE ::= CLASS { - &InitiatingMessage , - &SuccessfulOutcome OPTIONAL, - &UnsuccessfulOutcome OPTIONAL, - &procedureCode ProcedureCode UNIQUE, - &criticality Criticality DEFAULT ignore -} -WITH SYNTAX { - INITIATING MESSAGE &InitiatingMessage - [SUCCESSFUL OUTCOME &SuccessfulOutcome] - [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] - PROCEDURE CODE &procedureCode - [CRITICALITY &criticality] -} --- ************************************************************** --- --- Interface PDU Definition --- --- ************************************************************** -X2AP-PDU ::= CHOICE { - initiatingMessage InitiatingMessage, - successfulOutcome SuccessfulOutcome, - unsuccessfulOutcome UnsuccessfulOutcome, - ... -} -InitiatingMessage ::= SEQUENCE { - procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), - criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} -SuccessfulOutcome ::= SEQUENCE { - procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), - criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} -UnsuccessfulOutcome ::= SEQUENCE { - procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), - criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} --- ************************************************************** --- --- Interface Elementary Procedure List --- --- ************************************************************** -X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= { - X2AP-ELEMENTARY-PROCEDURES-CLASS-1 | - X2AP-ELEMENTARY-PROCEDURES-CLASS-2 , - ... -} -X2AP-ELEMENTARY-PROCEDURES-CLASS-1 X2AP-ELEMENTARY-PROCEDURE ::= { - handoverPreparation | - reset | - x2Setup | - resourceStatusReportingInitiation | - eNBConfigurationUpdate | - mobilitySettingsChange | - cellActivation , - ... -} -X2AP-ELEMENTARY-PROCEDURES-CLASS-2 X2AP-ELEMENTARY-PROCEDURE ::= { - snStatusTransfer | - uEContextRelease | - handoverCancel | - errorIndication | - resourceStatusReporting | - loadIndication | - privateMessage | - rLFIndication | handoverReport, - ... -} --- ************************************************************** --- --- Interface Elementary Procedures --- --- ************************************************************** -handoverPreparation X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverRequest - SUCCESSFUL OUTCOME HandoverRequestAcknowledge - UNSUCCESSFUL OUTCOME HandoverPreparationFailure - PROCEDURE CODE id-handoverPreparation - CRITICALITY reject -} -snStatusTransfer X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE SNStatusTransfer - PROCEDURE CODE id-snStatusTransfer - CRITICALITY ignore -} -uEContextRelease X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UEContextRelease - PROCEDURE CODE id-uEContextRelease - CRITICALITY ignore -} -handoverCancel X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverCancel - PROCEDURE CODE id-handoverCancel - CRITICALITY ignore -} -handoverReport X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverReport - PROCEDURE CODE id-handoverReport - CRITICALITY ignore -} -errorIndication X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ErrorIndication - PROCEDURE CODE id-errorIndication - CRITICALITY ignore -} -reset X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ResetRequest - SUCCESSFUL OUTCOME ResetResponse - PROCEDURE CODE id-reset - CRITICALITY reject -} -x2Setup X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE X2SetupRequest - SUCCESSFUL OUTCOME X2SetupResponse - UNSUCCESSFUL OUTCOME X2SetupFailure - PROCEDURE CODE id-x2Setup - CRITICALITY reject -} -loadIndication X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE LoadInformation - PROCEDURE CODE id-loadIndication - CRITICALITY ignore -} -eNBConfigurationUpdate X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBConfigurationUpdate - SUCCESSFUL OUTCOME ENBConfigurationUpdateAcknowledge - UNSUCCESSFUL OUTCOME ENBConfigurationUpdateFailure - PROCEDURE CODE id-eNBConfigurationUpdate - CRITICALITY reject -} -resourceStatusReportingInitiation X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ResourceStatusRequest - SUCCESSFUL OUTCOME ResourceStatusResponse - UNSUCCESSFUL OUTCOME ResourceStatusFailure - PROCEDURE CODE id-resourceStatusReportingInitiation - CRITICALITY reject -} -resourceStatusReporting X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ResourceStatusUpdate - PROCEDURE CODE id-resourceStatusReporting - CRITICALITY ignore -} -rLFIndication X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE RLFIndication - PROCEDURE CODE id-rLFIndication - CRITICALITY ignore -} -privateMessage X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE PrivateMessage - PROCEDURE CODE id-privateMessage - CRITICALITY ignore -} -mobilitySettingsChange X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MobilityChangeRequest - SUCCESSFUL OUTCOME MobilityChangeAcknowledge - UNSUCCESSFUL OUTCOME MobilityChangeFailure - PROCEDURE CODE id-mobilitySettingsChange - CRITICALITY reject -} -cellActivation X2AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE CellActivationRequest - SUCCESSFUL OUTCOME CellActivationResponse - UNSUCCESSFUL OUTCOME CellActivationFailure - PROCEDURE CODE id-cellActivation - CRITICALITY reject -} -END diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn deleted file mode 100755 index 330c19b279..0000000000 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn +++ /dev/null @@ -1,199 +0,0 @@ --- ************************************************************** --- --- PDU definitions for X2AP. --- --- ************************************************************** - -X2AP-PDU { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) x2ap (2) version1 (1) x2ap-PDU (1) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - - x2ap-maxProtocolIEs, - X2ap-Criticality, - X2ap-ProcedureCode, - X2ap-ProtocolIE-ID -FROM X2AP-CommonDataTypes; - -X2ap-IE ::= SEQUENCE { - id X2ap-ProtocolIE-ID, - criticality X2ap-Criticality, - value ANY -} - -X2AP-PDU ::= CHOICE { - initiatingMessage X2ap-InitiatingMessage, - successfulOutcome X2ap-SuccessfulOutcome, - unsuccessfulOutcome X2ap-UnsuccessfulOutcome, - ... -} - -X2ap-InitiatingMessage ::= SEQUENCE { - procedureCode X2ap-ProcedureCode, - criticality X2ap-Criticality, - value ANY -} - -X2ap-SuccessfulOutcome ::= SEQUENCE { - procedureCode X2ap-ProcedureCode, - criticality X2ap-Criticality, - value ANY -} - -X2ap-UnsuccessfulOutcome ::= SEQUENCE { - procedureCode X2ap-ProcedureCode, - criticality X2ap-Criticality, - value ANY -} - -X2ap-HandoverRequest ::= SEQUENCE { - x2ap-HandoverRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-HandoverRequestAcknowledge ::= SEQUENCE { - x2ap-HandoverRequestAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-HandoverPreparationFailure ::= SEQUENCE { - x2ap-HandoverPreparationFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-SNStatusTransfer ::= SEQUENCE { - x2ap-SNStatusTransfer-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-UEContextRelease ::= SEQUENCE { - x2ap-UEContextRelease-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-HandoverCancel ::= SEQUENCE { - x2ap-HandoverCancel-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-HandoverReport ::= SEQUENCE { - x2ap-HandoverReport-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ErrorIndication ::= SEQUENCE { - x2ap-ErrorIndication-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ResetRequest ::= SEQUENCE { - x2ap-ResetRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ResetResponse ::= SEQUENCE { - x2ap-ResetResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2SetupRequest ::= SEQUENCE { - x2SetupRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2SetupResponse ::= SEQUENCE { - x2SetupResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2SetupFailure ::= SEQUENCE { - x2SetupFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-LoadInformation ::= SEQUENCE { - x2ap-LoadInformation-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ENBConfigurationUpdate ::= SEQUENCE { - x2ap-ENBConfigurationUpdate-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - x2ap-ENBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ENBConfigurationUpdateFailure ::= SEQUENCE { - x2ap-ENBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ResourceStatusRequest ::= SEQUENCE { - x2ap-ResourceStatusRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ResourceStatusResponse ::= SEQUENCE { - x2ap-ResourceStatusResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ResourceStatusFailure ::= SEQUENCE { - x2ap-ResourceStatusFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-ResourceStatusUpdate ::= SEQUENCE { - x2ap-ResourceStatusUpdate-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-RLFIndication ::= SEQUENCE { - x2ap-RLFIndication-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-PrivateMessage ::= SEQUENCE { - x2ap-PrivateMessage-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-MobilityChangeRequest ::= SEQUENCE { - x2ap-MobilityChangeRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-MobilityChangeAcknowledge ::= SEQUENCE { - x2ap-MobilityChangeAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-MobilityChangeFailure ::= SEQUENCE { - x2ap-MobilityChangeFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-CellActivationRequest ::= SEQUENCE { - x2ap-CellActivationRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-CellActivationResponse ::= SEQUENCE { - x2ap-CellActivationResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -X2ap-CellActivationFailure ::= SEQUENCE { - x2ap-CellActivationFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, - ... -} - -END diff --git a/openair2/X2AP/x2ap_common.c b/openair2/X2AP/x2ap_common.c index d92f2c69bb..2ac875155d 100644 --- a/openair2/X2AP/x2ap_common.c +++ b/openair2/X2AP/x2ap_common.c @@ -29,7 +29,7 @@ #include #include "x2ap_common.h" -#include "X2AP-PDU.h" +#include "X2AP_X2AP-PDU.h" int asn_debug = 0; int asn1_xer_print = 0; @@ -55,29 +55,27 @@ inline void ASN_DEBUG(const char *fmt, ...) ssize_t x2ap_generate_initiating_message( uint8_t **buffer, uint32_t *length, - X2ap_ProcedureCode_t procedureCode, - X2ap_Criticality_t criticality, + X2AP_ProcedureCode_t procedureCode, + X2AP_Criticality_t criticality, asn_TYPE_descriptor_t *td, void *sptr) { - X2AP_PDU_t pdu; + X2AP_X2AP_PDU_t pdu; ssize_t encoded; - - memset(&pdu, 0, sizeof(X2AP_PDU_t)); - - pdu.present = X2AP_PDU_PR_initiatingMessage; + memset(&pdu, 0, sizeof(X2AP_X2AP_PDU_t)); + pdu.present = X2AP_X2AP_PDU_PR_initiatingMessage; pdu.choice.initiatingMessage.procedureCode = procedureCode; pdu.choice.initiatingMessage.criticality = criticality; ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr); if (asn1_xer_print) { - xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)&pdu); + xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu); } /* We can safely free list of IE from sptr */ ASN_STRUCT_FREE_CONTENTS_ONLY(*td, sptr); - if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, &pdu, + if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_X2AP_PDU, 0, &pdu, (void **)buffer)) < 0) { return -1; } @@ -89,107 +87,68 @@ ssize_t x2ap_generate_initiating_message( ssize_t x2ap_generate_successfull_outcome( uint8_t **buffer, uint32_t *length, - X2ap_ProcedureCode_t procedureCode, - X2ap_Criticality_t criticality, + X2AP_ProcedureCode_t procedureCode, + X2AP_Criticality_t criticality, asn_TYPE_descriptor_t *td, void *sptr) { - X2AP_PDU_t pdu; + X2AP_X2AP_PDU_t pdu; ssize_t encoded; - - memset(&pdu, 0, sizeof(X2AP_PDU_t)); - - pdu.present = X2AP_PDU_PR_successfulOutcome; + memset(&pdu, 0, sizeof(X2AP_X2AP_PDU_t)); + pdu.present = X2AP_X2AP_PDU_PR_successfulOutcome; pdu.choice.successfulOutcome.procedureCode = procedureCode; pdu.choice.successfulOutcome.criticality = criticality; ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr); if (asn1_xer_print) { - xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)&pdu); + xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu); } /* We can safely free list of IE from sptr */ ASN_STRUCT_FREE_CONTENTS_ONLY(*td, sptr); - if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, &pdu, + if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_X2AP_PDU, 0, &pdu, (void **)buffer)) < 0) { return -1; } *length = encoded; - return encoded; } ssize_t x2ap_generate_unsuccessfull_outcome( uint8_t **buffer, uint32_t *length, - X2ap_ProcedureCode_t procedureCode, - X2ap_Criticality_t criticality, + X2AP_ProcedureCode_t procedureCode, + X2AP_Criticality_t criticality, asn_TYPE_descriptor_t *td, void *sptr) { - X2AP_PDU_t pdu; + X2AP_X2AP_PDU_t pdu; ssize_t encoded; - - memset(&pdu, 0, sizeof(X2AP_PDU_t)); - - pdu.present = X2AP_PDU_PR_unsuccessfulOutcome; + memset(&pdu, 0, sizeof(X2AP_X2AP_PDU_t)); + pdu.present = X2AP_X2AP_PDU_PR_unsuccessfulOutcome; pdu.choice.successfulOutcome.procedureCode = procedureCode; pdu.choice.successfulOutcome.criticality = criticality; ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr); if (asn1_xer_print) { - xer_fprint(stdout, &asn_DEF_X2AP_PDU, (void *)&pdu); + xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu); } /* We can safely free list of IE from sptr */ ASN_STRUCT_FREE_CONTENTS_ONLY(*td, sptr); - if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, &pdu, + if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_X2AP_PDU, 0, &pdu, (void **)buffer)) < 0) { return -1; } *length = encoded; - return encoded; } -X2ap_IE_t *x2ap_new_ie( - X2ap_ProtocolIE_ID_t id, - X2ap_Criticality_t criticality, - asn_TYPE_descriptor_t *type, - void *sptr) -{ - X2ap_IE_t *buff; - - if ((buff = malloc(sizeof(X2ap_IE_t))) == NULL) { - // Possible error on malloc - return NULL; - } - - memset((void *)buff, 0, sizeof(X2ap_IE_t)); - - buff->id = id; - buff->criticality = criticality; - - if (ANY_fromType_aper(&buff->value, type, sptr) < 0) { - fprintf(stderr, "Encoding of %s failed\n", type->name); - free(buff); - return NULL; - } - - if (asn1_xer_print) - if (xer_fprint(stdout, &asn_DEF_X2ap_IE, buff) < 0) { - free(buff); - return NULL; - } - - return buff; -} - -void x2ap_handle_criticality(X2ap_Criticality_t criticality) +void x2ap_handle_criticality(X2AP_Criticality_t criticality) { } diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h index b7c9361476..1a4889f0f0 100644 --- a/openair2/X2AP/x2ap_common.h +++ b/openair2/X2AP/x2ap_common.h @@ -23,247 +23,17 @@ # include "config.h" #endif -#include "X2ap-ABSInformationFDD.h" -#include "X2ap-ABSInformation.h" -#include "X2ap-ABSInformationTDD.h" -#include "X2ap-ABS-Status.h" -#include "X2ap-ActivatedCellList.h" -#include "X2ap-AllocationAndRetentionPriority.h" -#include "X2ap-AreaScopeOfMDT.h" -#include "X2ap-AS-SecurityInformation.h" -#include "X2ap-BandInfo.h" -#include "X2ap-BitRate.h" -#include "X2ap-BroadcastPLMNs-Item.h" - -#include "X2ap-CapacityValue.h" -#include "X2ap-Cause.h" -#include "X2ap-CauseMisc.h" -#include "X2ap-CauseProtocol.h" -#include "X2ap-CauseRadioNetwork.h" -#include "X2ap-CauseTransport.h" -#include "X2ap-CellActivationFailure.h" -#include "X2ap-CellActivationRequest.h" -#include "X2ap-CellActivationResponse.h" -#include "X2ap-CellBasedMDT.h" -#include "X2ap-CellCapacityClassValue.h" -#include "X2ap-CellIdListforMDT.h" -#include "X2ap-CellInformation-Item.h" -#include "X2ap-CellInformation-List.h" -#include "X2ap-Cell-Size.h" -#include "X2ap-CellToReport-Item.h" -#include "X2ap-CellToReport-List.h" -#include "X2ap-CellType.h" -#include "X2ap-CellMeasurementResult-Item.h" -#include "X2ap-CellMeasurementResult-List.h" -#include "X2ap-CompleteFailureCauseInformation-Item.h" -#include "X2ap-CompleteFailureCauseInformation-List.h" -#include "X2ap-CompositeAvailableCapacityGroup.h" -#include "X2ap-CompositeAvailableCapacity.h" -#include "X2ap-COUNTvalue.h" -#include "X2ap-CriticalityDiagnostics.h" -#include "X2ap-CriticalityDiagnostics-IE-List.h" -#include "X2ap-Criticality.h" -#include "X2ap-CRNTI.h" -#include "X2ap-CSG-Id.h" -#include "X2ap-CSGMembershipStatus.h" -#include "X2ap-CyclicPrefixDL.h" -#include "X2ap-CyclicPrefixUL.h" -#include "X2ap-DeactivationIndication.h" -#include "X2ap-DL-ABS-status.h" -#include "X2ap-DL-Forwarding.h" -#include "X2ap-DL-GBR-PRB-usage.h" -#include "X2ap-DL-non-GBR-PRB-usage.h" -#include "X2ap-DL-Total-PRB-usage.h" -#include "X2ap-EARFCN.h" -#include "X2ap-ECGI.h" -#include "X2ap-ENB-ID.h" -#include "X2ap-ENBConfigurationUpdateFailure.h" -#include "X2ap-ENBConfigurationUpdateAcknowledge.h" -#include "X2ap-ENBConfigurationUpdate.h" -#include "X2ap-EncryptionAlgorithms.h" -#include "X2ap-EPLMNs.h" -#include "X2ap-E-RAB-ID.h" -#include "X2ap-E-RAB-Item.h" -#include "X2ap-E-RABs-Admitted-List.h" -#include "X2ap-E-RAB-Level-QoS-Parameters.h" -#include "X2ap-E-RAB-List.h" -#include "X2ap-E-RABs-SubjectToStatusTransfer-Item.h" -#include "X2ap-E-RABs-Admitted-Item.h" -#include "X2ap-E-RABs-SubjectToStatusTransfer-List.h" -#include "X2ap-ErrorIndication.h" -#include "X2ap-EUTRA-Mode-Info.h" -#include "X2ap-EUTRANCellIdentifier.h" -#include "X2ap-EUTRANTraceID.h" -#include "X2ap-EventType.h" - -#include "X2ap-FDD-Info.h" -#include "X2ap-ForbiddenInterRATs.h" -#include "X2ap-ForbiddenLACs.h" -#include "X2ap-ForbiddenLAs.h" -#include "X2ap-ForbiddenLAs-Item.h" -#include "X2ap-ForbiddenTACs.h" -#include "X2ap-ForbiddenTAs.h" -#include "X2ap-ForbiddenTAs-Item.h" -#include "X2ap-Fourframes.h" -#include "X2ap-FreqBandIndicator.h" -#include "X2ap-GBR-QosInformation.h" -#include "X2ap-GlobalENB-ID.h" -#include "X2ap-GTP-TEI.h" -#include "X2ap-GTPtunnelEndpoint.h" -#include "X2ap-GU-Group-ID.h" -#include "X2ap-GUGroupIDList.h" -#include "X2ap-GUMMEI.h" -#include "X2ap-HandoverCancel.h" -#include "X2ap-HandoverReportType.h" -#include "X2ap-HandoverRequest.h" -#include "X2ap-HandoverReport.h" -#include "X2ap-HandoverRestrictionList.h" -#include "X2ap-HandoverPreparationFailure.h" -#include "X2ap-HandoverRequestAcknowledge.h" - -#include "X2ap-HFN.h" -#include "X2ap-HWLoadIndicator.h" -#include "X2ap-IE-Extensions.h" -#include "X2ap-IE.h" -#include "X2ap-IntegrityProtectionAlgorithms.h" -#include "X2ap-InterfacesToTrace.h" -#include "X2ap-InvokeIndication.h" -#include "X2ap-Key-eNodeB-Star.h" -#include "X2ap-LAC.h" -#include "X2ap-LastVisitedCell-Item.h" -#include "X2ap-LastVisitedEUTRANCellInformation.h" -#include "X2ap-LastVisitedGERANCellInformation.h" -#include "X2ap-LastVisitedUTRANCellInformation.h" -#include "X2ap-LoadIndicator.h" -#include "X2ap-LoadInformation.h" -#include "X2ap-LocationReportingInformation.h" -#include "X2ap-ManagementBasedMDTallowed.h" -#include "X2ap-MBMS-Service-Area-Identity.h" -#include "X2ap-MBMS-Service-Area-Identity-List.h" -#include "X2ap-MBSFN-Subframe-Info.h" -#include "X2ap-MBSFN-Subframe-Infolist.h" -#include "X2ap-MDT-Activation.h" -#include "X2ap-MDT-Configuration.h" -#include "X2ap-Measurement-ID.h" -#include "X2ap-MeasurementsToActivate.h" -#include "X2ap-MeasurementThresholdA2.h" -#include "X2ap-MeasurementInitiationResult-Item.h" -#include "X2ap-MeasurementInitiationResult-List.h" - -#include "X2ap-MeasurementFailureCause-Item.h" -#include "X2ap-MME-Code.h" -#include "X2ap-MME-Group-ID.h" -#include "X2ap-MobilityChangeAcknowledge.h" -#include "X2ap-MobilityChangeFailure.h" -#include "X2ap-MobilityChangeRequest.h" -#include "X2ap-MobilityParametersInformation.h" -#include "X2ap-MobilityParametersModificationRange.h" -#include "X2ap-MultibandInfoList.h" -#include "X2ap-Neighbour-Information.h" -#include "X2ap-NextHopChainingCount.h" -#include "X2ap-Number-of-Antennaports.h" -#include "X2ap-Oneframe.h" -#include "X2ap-Old-ECGIs.h" -#include "X2ap-PartialSuccessIndicator.h" -#include "X2ap-PCI.h" -#include "X2ap-PDCP-SN.h" -#include "X2AP-PDU.h" -#include "X2ap-PeriodicReportingMDT.h" -#include "X2ap-PLMN-Identity.h" -#include "X2ap-PRACH-Configuration.h" -#include "X2ap-Pre-emptionCapability.h" -#include "X2ap-Pre-emptionVulnerability.h" -#include "X2ap-Presence.h" -#include "X2ap-PriorityLevel.h" -#include "X2ap-PrivateIE-ID.h" -#include "X2ap-ProcedureCode.h" -#include "X2ap-ProtocolIE-ID.h" -#include "X2ap-QCI.h" -#include "X2ap-RadioframeAllocationOffset.h" -#include "X2ap-RadioframeAllocationPeriod.h" -#include "X2ap-RadioResourceStatus.h" -#include "X2ap-ReceiveStatusofULPDCPSDUs.h" -#include "X2ap-Registration-Request.h" -#include "X2ap-RelativeNarrowbandTxPower.h" -#include "X2ap-ReportAmountMDT.h" -#include "X2ap-ReportArea.h" -#include "X2ap-ReportCharacteristics.h" -#include "X2ap-ReportingTriggerMDT.h" -#include "X2ap-ReportIntervalMDT.h" -#include "X2ap-ReportingPeriodicity.h" -#include "X2ap-ResourceStatusFailure.h" -#include "X2ap-ResourceStatusResponse.h" -#include "X2ap-ResourceStatusUpdate.h" - -#include "X2ap-RNTP-Threshold.h" -#include "X2ap-RRCConnReestabIndicator.h" -#include "X2ap-RRCConnSetupIndicator.h" -#include "X2ap-RRC-Context.h" -#include "X2ap-RLFIndication.h" -#include "X2ap-ResourceStatusRequest.h" -#include "X2ap-S1TNLLoadIndicator.h" -//nclude "X2ap-ServedCellInformation.h" -#include "X2ap-ServedCells.h" -#include "X2ap-ServedCellsToModify.h" -#include "X2ap-ServedCellsToActivate.h" -#include "X2ap-ShortMAC-I.h" -#include "X2ap-SpecialSubframe-Info.h" -#include "X2ap-SpecialSubframePatterns.h" -#include "X2ap-SRVCCOperationPossible.h" -#include "X2ap-SubframeAllocation.h" -#include "X2ap-SubframeAssignment.h" -#include "X2ap-SubscriberProfileIDforRFP.h" -#include "X2ap-SNStatusTransfer.h" - -#include "X2ap-TABasedMDT.h" -#include "X2ap-TAC.h" -#include "X2ap-TAListforMDT.h" -#include "X2ap-TargetCellInUTRAN.h" -#include "X2ap-TargeteNBtoSource-eNBTransparentContainer.h" -#include "X2ap-TDD-Info.h" -#include "X2ap-ThresholdEventA2.h" -#include "X2ap-Threshold-RSRP.h" -#include "X2ap-Threshold-RSRQ.h" -#include "X2ap-TimeToWait.h" -#include "X2ap-Time-UE-StayedInCell-EnhancedGranularity.h" -#include "X2ap-Time-UE-StayedInCell.h" -#include "X2ap-E-RABs-ToBeSetup-Item.h" -#include "X2ap-TraceActivation.h" -#include "X2ap-TraceCollectionEntityIPAddress.h" -#include "X2ap-TraceDepth.h" -#include "X2ap-Transmission-Bandwidth.h" -#include "X2ap-TransportLayerAddress.h" -#include "X2ap-TriggeringMessage.h" -#include "X2ap-TypeOfError.h" -#include "X2ap-UEAggregateMaximumBitRate.h" -#include "X2ap-UE-ContextInformation.h" -#include "X2ap-UE-HistoryInformation.h" -#include "X2ap-UE-RLF-Report-Container.h" -#include "X2ap-UE-S1AP-ID.h" -#include "X2ap-UE-X2AP-ID.h" -#include "X2ap-UEContextRelease.h" -#include "X2ap-UESecurityCapabilities.h" -#include "X2ap-UL-GBR-PRB-usage.h" -#include "X2ap-UL-HighInterferenceIndication.h" -#include "X2ap-UL-HighInterferenceIndicationInfo.h" -#include "X2ap-UL-HighInterferenceIndicationInfo-Item.h" -#include "X2ap-UL-InterferenceOverloadIndication.h" -#include "X2ap-UL-InterferenceOverloadIndication-Item.h" -#include "X2ap-UL-non-GBR-PRB-usage.h" -#include "X2ap-UL-Total-PRB-usage.h" -#include "X2ap-UsableABSInformationFDD.h" -#include "X2ap-UsableABSInformation.h" -#include "X2ap-UsableABSInformationTDD.h" - -#include "X2ap-ResetResponse.h" -#include "X2ap-ResetRequest.h" -#include "X2SetupFailure.h" -#include "X2SetupRequest.h" -#include "X2SetupResponse.h" - -#include "X2ap-Old-ECGIs.h" -#include "X2ap-Criticality.h" -#include "X2ap-ProcedureCode.h" +#include "X2AP_ProtocolIE-Field.h" +#include "X2AP_X2AP-PDU.h" +#include "X2AP_InitiatingMessage.h" +#include "X2AP_SuccessfulOutcome.h" +#include "X2AP_UnsuccessfulOutcome.h" +#include "X2AP_ProtocolIE-Field.h" +#include "X2AP_ProtocolIE-FieldPair.h" +#include "X2AP_ProtocolIE-ContainerPair.h" +#include "X2AP_ProtocolExtensionField.h" +#include "X2AP_ProtocolExtensionContainer.h" +#include "X2AP_asn_constant.h" #ifndef X2AP_COMMON_H_ #define X2AP_COMMON_H_ @@ -301,6 +71,21 @@ extern int asn1_xer_print; # define X2AP_DEBUG(x, args...) do { fprintf(stdout, "[X2AP][D]"x, ##args); } while(0) #endif +#define X2AP_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID, mandatory) \ + do {\ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; \ + ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + if (mandatory) DevAssert(ie != NULL); \ + } while(0) + //Forward declaration struct x2ap_message_s; @@ -323,8 +108,8 @@ typedef int (*x2ap_message_decoded_callback)( ssize_t x2ap_generate_successfull_outcome( uint8_t **buffer, uint32_t *length, - X2ap_ProcedureCode_t procedureCode, - X2ap_Criticality_t criticality, + X2AP_ProcedureCode_t procedureCode, + X2AP_Criticality_t criticality, asn_TYPE_descriptor_t *td, void *sptr); @@ -340,8 +125,8 @@ ssize_t x2ap_generate_successfull_outcome( ssize_t x2ap_generate_initiating_message( uint8_t **buffer, uint32_t *length, - X2ap_ProcedureCode_t procedureCode, - X2ap_Criticality_t criticality, + X2AP_ProcedureCode_t procedureCode, + X2AP_Criticality_t criticality, asn_TYPE_descriptor_t *td, void *sptr); @@ -357,28 +142,15 @@ ssize_t x2ap_generate_initiating_message( ssize_t x2ap_generate_unsuccessfull_outcome( uint8_t **buffer, uint32_t *length, - X2ap_ProcedureCode_t procedureCode, - X2ap_Criticality_t criticality, + X2AP_ProcedureCode_t procedureCode, + X2AP_Criticality_t criticality, asn_TYPE_descriptor_t *td, void *sptr); -/** \brief Generate a new IE - \param id Protocol ie id of the IE - \param criticality Criticality of the IE - \param type ASN1 type descriptor of the IE value - \param sptr Structure to be encoded in the value field - @returns a pointer to the newly created IE structure or NULL in case of failure - **/ -X2ap_IE_t *x2ap_new_ie( - X2ap_ProtocolIE_ID_t id, - X2ap_Criticality_t criticality, - asn_TYPE_descriptor_t *type, - void *sptr); - /** \brief Handle criticality \param criticality Criticality of the IE @returns void **/ -void x2ap_handle_criticality(X2ap_Criticality_t criticality); +void x2ap_handle_criticality(X2AP_Criticality_t criticality); #endif /* X2AP_COMMON_H_ */ diff --git a/openair3/COMMON/s1ap_messages_def.h b/openair3/COMMON/s1ap_messages_def.h index f0d7ba086f..ffb9aa4236 100644 --- a/openair3/COMMON/s1ap_messages_def.h +++ b/openair3/COMMON/s1ap_messages_def.h @@ -32,6 +32,7 @@ MESSAGE_DEF(S1AP_INITIAL_UE_MESSAGE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_REQ_LOG, MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_ue_context_release_req_log) MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_COMMAND_LOG, MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_ue_context_release_command_log) MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_ue_context_release_log) +MESSAGE_DEF(S1AP_ERROR_INDICATION_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_error_indication_log) MESSAGE_DEF(S1AP_UE_CAPABILITIES_IND , MESSAGE_PRIORITY_MED, s1ap_ue_cap_ind_t , s1ap_ue_cap_ind) MESSAGE_DEF(S1AP_ENB_DEREGISTERED_IND , MESSAGE_PRIORITY_MED, s1ap_eNB_deregistered_ind_t , s1ap_eNB_deregistered_ind) diff --git a/openair3/COMMON/security_types.h b/openair3/COMMON/security_types.h index 0eedc6201f..eb55e44d77 100644 --- a/openair3/COMMON/security_types.h +++ b/openair3/COMMON/security_types.h @@ -31,10 +31,6 @@ #include #include -#if 0 -#include "queue.h" -#endif - #ifndef SECURITY_TYPES_H_ #define SECURITY_TYPES_H_ @@ -113,11 +109,6 @@ typedef struct eutran_vector_s { res_t xres; uint8_t autn[AUTN_LENGTH_OCTETS]; uint8_t kasme[KASME_LENGTH_OCTETS]; - - /* one UE can have multiple vectors so use STAILQ lists for easy management */ -#if 0 - STAILQ_ENTRY(eutran_vector_s) entries; -#endif } eutran_vector_t; #define FC_KASME (0x10) diff --git a/openair3/GTPV1-U/gtpv1u_eNB.c b/openair3/GTPV1-U/gtpv1u_eNB.c index 784245c0d3..e9eec349dc 100644 --- a/openair3/GTPV1-U/gtpv1u_eNB.c +++ b/openair3/GTPV1-U/gtpv1u_eNB.c @@ -63,7 +63,7 @@ extern boolean_t pdcp_data_req( const sdu_size_t sdu_buffer_sizeP, unsigned char *const sdu_buffer_pP, const pdcp_transmission_mode_t modeP -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,const uint32_t * const sourceL2Id ,const uint32_t * const destinationL2Id #endif @@ -363,7 +363,7 @@ NwGtpv1uRcT gtpv1u_eNB_process_stack_req( buffer_len, buffer, PDCP_TRANSMISSION_MODE_DATA -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,NULL, NULL #endif ); diff --git a/openair3/GTPV1-U/gtpv1u_eNB_defs.h b/openair3/GTPV1-U/gtpv1u_eNB_defs.h index 8f8cff2e87..ddd996625e 100644 --- a/openair3/GTPV1-U/gtpv1u_eNB_defs.h +++ b/openair3/GTPV1-U/gtpv1u_eNB_defs.h @@ -28,7 +28,7 @@ */ #include "hashtable.h" -#include "asn1_constants.h" +#include "asn_constant.h" #ifndef GTPV1U_ENB_DEFS_H_ #define GTPV1U_ENB_DEFS_H_ diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c index 068ee5db6a..44c12659b8 100644 --- a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c +++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c @@ -290,31 +290,6 @@ int encode_activate_default_eps_bearer_context_request(activate_default_eps_bear encoded += encode_result; } -#if 0 /* LW: force Protocol Configuration Options to be included in the ESM message */ - { -#define CONFIGURATION_PROTOCOL_PPP 0 - -#define PROTOCOL_ID_IPCP 0x8021 -#define PROTOCOL_ID_DNS_SERVER_IPV4_ADDRESS 0x000D - - /* Force this item to be present */ - activate_default_eps_bearer_context_request->presencemask |= ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT; - /* Fill this item with data from PFT trace */ - activate_default_eps_bearer_context_request->protocolconfigurationoptions.configurationprotol = CONFIGURATION_PROTOCOL_PPP; - activate_default_eps_bearer_context_request->protocolconfigurationoptions.protocolid = PROTOCOL_ID_IPCP; - activate_default_eps_bearer_context_request->protocolconfigurationoptions.lengthofprotocolid = 16; /* Size of PROTOCOL_ID_IPCP */ - activate_default_eps_bearer_context_request->protocolconfigurationoptions.protocolidcontents.value = (uint8_t *) - /* PROTOCOL_ID_IPCP data */ - "\x03\x00\x00\x10\x81\x06\xC0\xA8\x0C\x64\x83\x06\xC0\xA8\x6A\x0C"; - /* Additional parameters PROTOCOL_ID_DNS_SERVER_IPV4_ADDRESS data */ - //"\x00\x0d\x04\x52\x61\x00\x78" - /* Additional parameters PROTOCOL_ID_DNS_SERVER_IPV4_ADDRESS data */ - //"\x00\x0d\x04\x52\x61\x01\x78"; - //activate_default_eps_bearer_context_request->protocolconfigurationoptions.protocolidcontents.length = 16 + 7 + 7; - activate_default_eps_bearer_context_request->protocolconfigurationoptions.protocolidcontents.length = 16; - } -#endif - if ((activate_default_eps_bearer_context_request->presencemask & ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT) == ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT) { if ((encode_result = diff --git a/openair3/NAS/COMMON/IES/EsmMessageContainer.c b/openair3/NAS/COMMON/IES/EsmMessageContainer.c index 2268b657f0..e33c06c71d 100644 --- a/openair3/NAS/COMMON/IES/EsmMessageContainer.c +++ b/openair3/NAS/COMMON/IES/EsmMessageContainer.c @@ -86,10 +86,6 @@ int encode_esm_message_container(EsmMessageContainer *esmmessagecontainer, uint8 encoded += encode_result; ENCODE_U16(lenPtr, encode_result, encoded); -#if 0 - lenPtr[1] = (((encoded - 2 - ((iei > 0) ? 1: 0))) & 0x0000ff00) >> 8; - lenPtr[0] = ((encoded - 2 - ((iei > 0) ? 1: 0))) & 0x000000ff; -#endif return encoded; } diff --git a/openair3/NAS/COMMON/IES/MobileIdentity.h b/openair3/NAS/COMMON/IES/MobileIdentity.h index 37f4d4ac30..fd747307de 100644 --- a/openair3/NAS/COMMON/IES/MobileIdentity.h +++ b/openair3/NAS/COMMON/IES/MobileIdentity.h @@ -97,37 +97,6 @@ typedef struct imeisv_s{ uint8_t parity:4; } imeisv_t; -#if 0 -typedef struct imeisv_s { - uint8_t length; - union { - struct { - uint8_t tac2:4; - uint8_t tac1:4; - uint8_t tac4:4; - uint8_t tac3:4; - uint8_t tac6:4; - uint8_t tac5:4; - uint8_t tac8:4; - uint8_t tac7:4; - uint8_t snr2:4; - uint8_t snr1:4; - uint8_t snr4:4; - uint8_t snr3:4; - uint8_t snr6:4; - uint8_t snr5:4; - uint8_t svn2:4; - uint8_t svn1:4; -#define EVEN_PARITY 0 -#define IMEI_ODD_PARITY 0xf - uint8_t parity:4; - } num; -#define IMEISV_BCD8_SIZE 9 - uint8_t value[IMEISV_BCD8_SIZE]; - } u; -} imeisv_t; -#endif - typedef ImsiMobileIdentity_t ImeiMobileIdentity_t; typedef imeisv_t ImeisvMobileIdentity_t; typedef ImsiMobileIdentity_t TmsiMobileIdentity_t; diff --git a/openair3/NAS/COMMON/UTIL/device.c b/openair3/NAS/COMMON/UTIL/device.c index 7ad2879b90..f8f1b9727b 100644 --- a/openair3/NAS/COMMON/UTIL/device.c +++ b/openair3/NAS/COMMON/UTIL/device.c @@ -175,16 +175,6 @@ void device_close(void* id) ssize_t device_read(void* id, char* buffer, size_t len) { const device_id_t* devid = (device_id_t*)(id); -#if 0 - ssize_t rbytes = read(devid->fd, buffer, len); - - if (rbytes < 0) { - return RETURNerror; - } - -#endif - - //#if 0 ssize_t rbytes = 0; do { @@ -198,8 +188,6 @@ ssize_t device_read(void* id, char* buffer, size_t len) } while ( (buffer[rbytes-1] != '\r') && (buffer[rbytes-1] != '\n') && (buffer[rbytes-1] != '\0') ); - //#endif - return rbytes; } diff --git a/openair3/NAS/COMMON/commonDef.h b/openair3/NAS/COMMON/commonDef.h index 84d97fc4a8..e9f769db55 100644 --- a/openair3/NAS/COMMON/commonDef.h +++ b/openair3/NAS/COMMON/commonDef.h @@ -314,17 +314,6 @@ typedef struct { */ #define TAI_LIST_T(SIZE) struct {Byte_t n_tais; tai_t tai[SIZE];} -#if 0 -/* - * User notification callback, executed whenever a change of data with - * respect of network information (e.g. network registration and/or - * location change, new PLMN becomes available) is notified by the - * EPS Mobility Management sublayer - */ -typedef int (*emm_indication_callback_t) (Stat_t, tac_t, ci_t, AcT_t, - const char*, size_t); -#endif - typedef enum eps_protocol_discriminator_e { /* Protocol discriminator identifier for EPS Mobility Management */ EPS_MOBILITY_MANAGEMENT_MESSAGE = 0x7, diff --git a/openair3/NAS/COMMON/networkDef.h b/openair3/NAS/COMMON/networkDef.h index e3e8e1f08b..5390eac2f0 100644 --- a/openair3/NAS/COMMON/networkDef.h +++ b/openair3/NAS/COMMON/networkDef.h @@ -260,15 +260,6 @@ typedef struct { network_pkf_t* pkf[NET_PACKET_FILTER_MAX]; } network_tft_t; -#if 0 -/* - * User notification callback, executed whenever a change of status with - * respect of PDN connection or EPS bearer context is notified by the EPS - * Session Management sublayer - */ -typedef int (*esm_indication_callback_t) (int, network_pdn_state_t); -#endif - /****************************************************************************/ /******************** G L O B A L V A R I A B L E S ********************/ /****************************************************************************/ diff --git a/openair3/NAS/TEST/AS_SIMULATOR/nas_process.c b/openair3/NAS/TEST/AS_SIMULATOR/nas_process.c index 17ad99715b..9b2245acd0 100644 --- a/openair3/NAS/TEST/AS_SIMULATOR/nas_process.c +++ b/openair3/NAS/TEST/AS_SIMULATOR/nas_process.c @@ -338,14 +338,8 @@ _attach_accept( { int index = 0; -#if 0 - /* T3412 timer value */ - index += snprintf(buffer + index, length - index, "T3412 = "); - index += gprsTimer(buffer + index, length - index, &msg->t3412value); - /* TAI list */ - index += snprintf(buffer + index, length - index, ", "); - index += taiList(buffer + index, length - index, &msg->tailist); -#endif + /* T3412 timer value (TBD) */ + /* TAI list (TBD) */ /* GUTI */ if (msg->presencemask & ATTACH_ACCEPT_GUTI_PRESENT) { diff --git a/openair3/NAS/TEST/USER/user_simulator.c b/openair3/NAS/TEST/USER/user_simulator.c index ec16b3453f..fa015df30a 100644 --- a/openair3/NAS/TEST/USER/user_simulator.c +++ b/openair3/NAS/TEST/USER/user_simulator.c @@ -225,23 +225,6 @@ int main (int argc, const char* argv[]) break; } -#if 0 - /* Send the AT command one byte at a time (serial port simulation) */ - const char* pbuffer = _user_simulator_send_buffer; - - while (*pbuffer) { - int sbytes = USER_SEND(pbuffer++, 1); - - if (sbytes == RETURNerror) { - perror("ERROR\t: Failed to send data to the NAS sublayer"); - break; - } - - (void)poll(0, 0, 10); - } - -#endif - (void)poll(0, 0, 100); } diff --git a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-CommonDataTypes.asn b/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-CommonDataTypes.asn deleted file mode 100644 index 17ce65521e..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-CommonDataTypes.asn +++ /dev/null @@ -1,232 +0,0 @@ --- ************************************************************** --- --- Common definitions --- --- ************************************************************** - -S1AP-CommonDataTypes { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-CommonDataTypes (3) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -S1ap-Criticality ::= ENUMERATED { reject, ignore, notify } - -S1ap-Presence ::= ENUMERATED { optional, conditional, mandatory } - -S1ap-PrivateIE-ID ::= CHOICE { - local INTEGER (0..65535), - global OBJECT IDENTIFIER -} - -S1ap-ProcedureCode ::= INTEGER { - id-HandoverPreparation(0), - id-HandoverResourceAllocation(1), - id-HandoverNotification(2), - id-PathSwitchRequest(3), - id-HandoverCancel(4), - id-E-RABSetup(5), - id-E-RABModify(6), - id-E-RABRelease(7), - id-E-RABReleaseIndication(8), - id-InitialContextSetup(9), - id-Paging(10), - id-downlinkNASTransport(11), - id-initialUEMessage(12), - id-uplinkNASTransport(13), - id-Reset(14), - id-ErrorIndication(15), - id-NASNonDeliveryIndication(16), - id-S1Setup(17), - id-UEContextReleaseRequest(18), - id-DownlinkS1cdma2000tunneling(19), - id-UplinkS1cdma2000tunneling(20), - id-UEContextModification(21), - id-UECapabilityInfoIndication(22), - id-UEContextRelease(23), - id-eNBStatusTransfer(24), - id-MMEStatusTransfer(25), - id-DeactivateTrace(26), - id-TraceStart(27), - id-TraceFailureIndication(28), - id-ENBConfigurationUpdate(29), - id-MMEConfigurationUpdate(30), - id-LocationReportingControl(31), - id-LocationReportingFailureIndication(32), - id-LocationReport(33), - id-OverloadStart(34), - id-OverloadStop(35), - id-WriteReplaceWarning(36), - id-eNBDirectInformationTransfer(37), - id-MMEDirectInformationTransfer(38), - id-PrivateMessage(39), - id-eNBConfigurationTransfer(40), - id-MMEConfigurationTransfer(41), - id-CellTrafficTrace(42), - id-Kill(43), - id-downlinkUEAssociatedLPPaTransport(44), - id-uplinkUEAssociatedLPPaTransport(45), - id-downlinkNonUEAssociatedLPPaTransport(46), - id-uplinkNonUEAssociatedLPPaTransport(47) -} (0..255) - -S1ap-ProtocolExtensionID ::= INTEGER (0..65535) - -S1ap-ProtocolIE-ID ::= INTEGER { - id-MME-UE-S1AP-ID (0), - id-HandoverType (1), - id-Cause (2), - id-SourceID (3), - id-TargetID (4), - id-eNB-UE-S1AP-ID (8), - id-E-RABSubjecttoDataForwardingList (12), - id-E-RABtoReleaseListHOCmd (13), - id-E-RABDataForwardingItem (14), - id-E-RABReleaseItemBearerRelComp (15), - id-E-RABToBeSetupListBearerSUReq (16), - id-E-RABToBeSetupItemBearerSUReq (17), - id-E-RABAdmittedList (18), - id-E-RABFailedToSetupListHOReqAck (19), - id-E-RABAdmittedItem (20), - id-E-RABFailedToSetupItemHOReqAck (21), - id-E-RABToBeSwitchedDLList (22), - id-E-RABToBeSwitchedDLItem (23), - id-E-RABToBeSetupListCtxtSUReq (24), - id-TraceActivation (25), - id-NAS-PDU (26), - id-E-RABToBeSetupItemHOReq (27), - id-E-RABSetupListBearerSURes (28), - id-E-RABFailedToSetupListBearerSURes (29), - id-E-RABToBeModifiedListBearerModReq (30), - id-E-RABModifyListBearerModRes (31), - id-E-RABFailedToModifyList (32), - id-E-RABToBeReleasedList (33), - id-E-RABFailedToReleaseList (34), - id-E-RABItem (35), - id-E-RABToBeModifiedItemBearerModReq (36), - id-E-RABModifyItemBearerModRes (37), - id-E-RABReleaseItem (38), - id-E-RABSetupItemBearerSURes (39), - id-SecurityContext (40), - id-HandoverRestrictionList (41), - id-UEPagingID (43), - id-pagingDRX (44), - id-TAIList (46), - id-TAIItem (47), - id-E-RABFailedToSetupListCtxtSURes (48), - id-E-RABReleaseItemHOCmd (49), - id-E-RABSetupItemCtxtSURes (50), - id-E-RABSetupListCtxtSURes (51), - id-E-RABToBeSetupItemCtxtSUReq (52), - id-E-RABToBeSetupListHOReq (53), - id-GERANtoLTEHOInformationRes (55), - id-UTRANtoLTEHOInformationRes (57), - id-CriticalityDiagnostics (58), - id-Global-ENB-ID (59), - id-eNBname (60), - id-MMEname (61), - id-ServedPLMNs (63), - id-SupportedTAs (64), - id-TimeToWait (65), - id-uEaggregateMaximumBitrate (66), - id-TAI (67), - id-E-RABReleaseListBearerRelComp (69), - id-cdma2000PDU (70), - id-cdma2000RATType (71), - id-cdma2000SectorID (72), - id-SecurityKey (73), - id-UERadioCapability (74), - id-GUMMEI-ID (75), - id-E-RABInformationListItem (78), - id-Direct-Forwarding-Path-Availability (79), - id-UEIdentityIndexValue (80), - id-cdma2000HOStatus (83), - id-cdma2000HORequiredIndication (84), - id-E-UTRAN-Trace-ID (86), - id-RelativeMMECapacity (87), - id-SourceMME-UE-S1AP-ID (88), - id-Bearers-SubjectToStatusTransfer-Item (89), - id-eNB-StatusTransfer-TransparentContainer (90), - id-UE-associatedLogicalS1-ConnectionItem (91), - id-ResetType (92), - id-UE-associatedLogicalS1-ConnectionListResAck (93), - id-E-RABToBeSwitchedULItem (94), - id-E-RABToBeSwitchedULList (95), - id-S-TMSI (96), - id-cdma2000OneXRAND (97), - id-RequestType (98), - id-UE-S1AP-IDs (99), - id-EUTRAN-CGI (100), - id-OverloadResponse (101), - id-cdma2000OneXSRVCCInfo (102), - id-E-RABFailedToBeReleasedList (103), - id-Source-ToTarget-TransparentContainer (104), - id-ServedGUMMEIs (105), - id-SubscriberProfileIDforRFP (106), - id-UESecurityCapabilities (107), - id-CSFallbackIndicator (108), - id-CNDomain (109), - id-E-RABReleasedList (110), - id-MessageIdentifier (111), - id-SerialNumber (112), - id-WarningAreaList (113), - id-RepetitionPeriod (114), - id-NumberofBroadcastRequest (115), - id-WarningType (116), - id-WarningSecurityInfo (117), - id-DataCodingScheme (118), - id-WarningMessageContents (119), - id-BroadcastCompletedAreaList (120), - id-Inter-SystemInformationTransferTypeEDT (121), - id-Inter-SystemInformationTransferTypeMDT (122), - id-Target-ToSource-TransparentContainer (123), - id-SRVCCOperationPossible (124), - id-SRVCCHOIndication (125), - id-NAS-DownlinkCount (126), - id-CSG-Id (127), - id-CSG-IdList (128), - id-SONConfigurationTransferECT (129), - id-SONConfigurationTransferMCT (130), - id-TraceCollectionEntityIPAddress (131), - id-MSClassmark2 (132), - id-MSClassmark3 (133), - id-RRC-Establishment-Cause (134), - id-NASSecurityParametersfromE-UTRAN (135), - id-NASSecurityParameterstoE-UTRAN (136), - id-DefaultPagingDRX (137), - id-Source-ToTarget-TransparentContainer-Secondary (138), - id-Target-ToSource-TransparentContainer-Secondary (139), - id-EUTRANRoundTripDelayEstimationInfo (140), - id-BroadcastCancelledAreaList (141), - id-ConcurrentWarningMessageIndicator (142), - id-Data-Forwarding-Not-Possible (143), - id-ExtendedRepetitionPeriod (144), - id-CellAccessMode (145), - id-CSGMembershipStatus (146), - id-LPPa-PDU (147), - id-Routing-ID (148), - id-Time-Synchronization-Info (149), - id-PS-ServiceNotAvailable (150), - id-PagingPriority (151), - id-x2TNLConfigurationInfo (152), - id-eNBX2ExtendedTransportLayerAddresses (153), - id-GUMMEIList (154), - id-GW-TransportLayerAddress (155), - id-Correlation-ID (156), - id-SourceMME-GUMMEI (157), - id-MME-UE-S1AP-ID-2 (158), - id-RegisteredLAI (159), - id-RelayNode-Indicator (160), - id-TrafficLoadReductionIndication (161), - id-MDTConfiguration (162), - id-MMERelaySupportIndicator (163), - id-GWContextReleaseIndication (164), - id-ManagementBasedMDTAllowed (165), - id-PrivacyIndicator (166) -} (0..65535) - -S1ap-TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessfull-outcome } - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-Constants.asn b/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-Constants.asn deleted file mode 100644 index 98af5fbffb..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-Constants.asn +++ /dev/null @@ -1,283 +0,0 @@ --- ************************************************************** --- --- Constant definitions --- --- ************************************************************** - -S1AP-Constants { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Constants (4) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - S1ap-ProcedureCode, - S1ap-ProtocolIE-ID - -FROM S1AP-CommonDataTypes; - - --- ************************************************************** --- --- Elementary Procedures --- --- ************************************************************** - -id-HandoverPreparation S1ap-ProcedureCode ::= 0 -id-HandoverResourceAllocation S1ap-ProcedureCode ::= 1 -id-HandoverNotification S1ap-ProcedureCode ::= 2 -id-PathSwitchRequest S1ap-ProcedureCode ::= 3 -id-HandoverCancel S1ap-ProcedureCode ::= 4 -id-E-RABSetup S1ap-ProcedureCode ::= 5 -id-E-RABModify S1ap-ProcedureCode ::= 6 -id-E-RABRelease S1ap-ProcedureCode ::= 7 -id-E-RABReleaseIndication S1ap-ProcedureCode ::= 8 -id-InitialContextSetup S1ap-ProcedureCode ::= 9 -id-Paging S1ap-ProcedureCode ::= 10 -id-downlinkNASTransport S1ap-ProcedureCode ::= 11 -id-initialUEMessage S1ap-ProcedureCode ::= 12 -id-uplinkNASTransport S1ap-ProcedureCode ::= 13 -id-Reset S1ap-ProcedureCode::= 14 -id-ErrorIndication S1ap-ProcedureCode ::= 15 -id-NASNonDeliveryIndication S1ap-ProcedureCode ::= 16 -id-S1Setup S1ap-ProcedureCode ::= 17 -id-UEContextReleaseRequest S1ap-ProcedureCode ::= 18 -id-DownlinkS1cdma2000tunneling S1ap-ProcedureCode ::= 19 -id-UplinkS1cdma2000tunneling S1ap-ProcedureCode ::= 20 -id-UEContextModification S1ap-ProcedureCode ::= 21 -id-UECapabilityInfoIndication S1ap-ProcedureCode ::= 22 -id-UEContextRelease S1ap-ProcedureCode ::= 23 -id-eNBStatusTransfer S1ap-ProcedureCode ::= 24 -id-MMEStatusTransfer S1ap-ProcedureCode ::= 25 -id-DeactivateTrace S1ap-ProcedureCode ::= 26 -id-TraceStart S1ap-ProcedureCode ::= 27 -id-TraceFailureIndication S1ap-ProcedureCode ::= 28 -id-ENBConfigurationUpdate S1ap-ProcedureCode ::= 29 -id-MMEConfigurationUpdate S1ap-ProcedureCode ::= 30 -id-LocationReportingControl S1ap-ProcedureCode ::= 31 -id-LocationReportingFailureIndication S1ap-ProcedureCode ::= 32 -id-LocationReport S1ap-ProcedureCode ::= 33 -id-OverloadStart S1ap-ProcedureCode ::= 34 -id-OverloadStop S1ap-ProcedureCode ::= 35 -id-WriteReplaceWarning S1ap-ProcedureCode ::= 36 -id-eNBDirectInformationTransfer S1ap-ProcedureCode ::= 37 -id-MMEDirectInformationTransfer S1ap-ProcedureCode ::= 38 -id-PrivateMessage S1ap-ProcedureCode ::= 39 -id-eNBConfigurationTransfer S1ap-ProcedureCode ::= 40 -id-MMEConfigurationTransfer S1ap-ProcedureCode ::= 41 -id-CellTrafficTrace S1ap-ProcedureCode ::= 42 -id-Kill S1ap-ProcedureCode ::= 43 -id-downlinkUEAssociatedLPPaTransport S1ap-ProcedureCode ::= 44 -id-uplinkUEAssociatedLPPaTransport S1ap-ProcedureCode ::= 45 -id-downlinkNonUEAssociatedLPPaTransport S1ap-ProcedureCode ::= 46 -id-uplinkNonUEAssociatedLPPaTransport S1ap-ProcedureCode ::= 47 - --- ************************************************************** --- --- Extension constants --- --- ************************************************************** - -s1ap-maxPrivateIEs INTEGER ::= 65535 -s1ap-maxProtocolExtensions INTEGER ::= 65535 -s1ap-maxProtocolIEs INTEGER ::= 65535 --- ************************************************************** --- --- Lists --- --- ************************************************************** - -s1ap-maxNrOfCSGs INTEGER ::= 256 -s1ap-maxNrOfE-RABs INTEGER ::= 256 -s1ap-maxnoofTAIs INTEGER ::= 256 -s1ap-maxnoofTACs INTEGER ::= 256 -s1ap-maxNrOfErrors INTEGER ::= 256 -s1ap-maxnoofBPLMNs INTEGER ::= 6 -s1ap-maxnoofPLMNsPerMME INTEGER ::= 32 -s1ap-maxnoofEPLMNs INTEGER ::= 15 -s1ap-maxnoofEPLMNsPlusOne INTEGER ::= 16 -s1ap-maxnoofForbLACs INTEGER ::= 4096 -s1ap-maxnoofForbTACs INTEGER ::= 4096 -s1ap-maxNrOfIndividualS1ConnectionsToReset INTEGER ::= 256 -s1ap-maxnoofCells INTEGER ::= 16 -s1ap-maxnoofTAIforWarning INTEGER ::= 65535 -s1ap-maxnoofCellID INTEGER ::= 65535 -s1ap-maxnoofEmergencyAreaID INTEGER ::= 65535 -s1ap-maxnoofCellinTAI INTEGER ::= 65535 -s1ap-maxnoofCellinEAI INTEGER ::= 65535 -s1ap-maxnoofeNBX2TLAs INTEGER ::= 2 -s1ap-maxnoofeNBX2ExtTLAs INTEGER ::= 16 -s1ap-maxnoofeNBX2GTPTLAs INTEGER ::= 16 -s1ap-maxnoofRATs INTEGER ::= 8 -s1ap-maxnoofGroupIDs INTEGER ::= 65535 -s1ap-maxnoofMMECs INTEGER ::= 256 -s1ap-maxnoofCellIDforMDT INTEGER ::= 32 -s1ap-maxnoofTAforMDT INTEGER ::= 8 - - --- ************************************************************** --- --- IEs --- --- ************************************************************** - -id-MME-UE-S1AP-ID S1ap-ProtocolIE-ID ::= 0 -id-HandoverType S1ap-ProtocolIE-ID ::= 1 -id-Cause S1ap-ProtocolIE-ID ::= 2 -id-SourceID S1ap-ProtocolIE-ID ::= 3 -id-TargetID S1ap-ProtocolIE-ID ::= 4 -id-eNB-UE-S1AP-ID S1ap-ProtocolIE-ID ::= 8 -id-E-RABSubjecttoDataForwardingList S1ap-ProtocolIE-ID ::= 12 -id-E-RABtoReleaseListHOCmd S1ap-ProtocolIE-ID ::= 13 -id-E-RABDataForwardingItem S1ap-ProtocolIE-ID ::= 14 -id-E-RABReleaseItemBearerRelComp S1ap-ProtocolIE-ID ::= 15 -id-E-RABToBeSetupListBearerSUReq S1ap-ProtocolIE-ID ::= 16 -id-E-RABToBeSetupItemBearerSUReq S1ap-ProtocolIE-ID ::= 17 -id-E-RABAdmittedList S1ap-ProtocolIE-ID ::= 18 -id-E-RABFailedToSetupListHOReqAck S1ap-ProtocolIE-ID ::= 19 -id-E-RABAdmittedItem S1ap-ProtocolIE-ID ::= 20 -id-E-RABFailedtoSetupItemHOReqAck S1ap-ProtocolIE-ID ::= 21 -id-E-RABToBeSwitchedDLList S1ap-ProtocolIE-ID ::= 22 -id-E-RABToBeSwitchedDLItem S1ap-ProtocolIE-ID ::= 23 -id-E-RABToBeSetupListCtxtSUReq S1ap-ProtocolIE-ID ::= 24 -id-TraceActivation S1ap-ProtocolIE-ID ::= 25 -id-NAS-PDU S1ap-ProtocolIE-ID ::= 26 -id-E-RABToBeSetupItemHOReq S1ap-ProtocolIE-ID ::= 27 -id-E-RABSetupListBearerSURes S1ap-ProtocolIE-ID ::= 28 -id-E-RABFailedToSetupListBearerSURes S1ap-ProtocolIE-ID ::= 29 -id-E-RABToBeModifiedListBearerModReq S1ap-ProtocolIE-ID ::= 30 -id-E-RABModifyListBearerModRes S1ap-ProtocolIE-ID ::= 31 -id-E-RABFailedToModifyList S1ap-ProtocolIE-ID ::= 32 -id-E-RABToBeReleasedList S1ap-ProtocolIE-ID ::= 33 -id-E-RABFailedToReleaseList S1ap-ProtocolIE-ID ::= 34 -id-E-RABItem S1ap-ProtocolIE-ID ::= 35 -id-E-RABToBeModifiedItemBearerModReq S1ap-ProtocolIE-ID ::= 36 -id-E-RABModifyItemBearerModRes S1ap-ProtocolIE-ID ::= 37 -id-E-RABReleaseItem S1ap-ProtocolIE-ID ::= 38 -id-E-RABSetupItemBearerSURes S1ap-ProtocolIE-ID ::= 39 -id-SecurityContext S1ap-ProtocolIE-ID ::= 40 -id-HandoverRestrictionList S1ap-ProtocolIE-ID ::= 41 -id-UEPagingID S1ap-ProtocolIE-ID ::= 43 -id-pagingDRX S1ap-ProtocolIE-ID ::= 44 -id-TAIList S1ap-ProtocolIE-ID ::= 46 -id-TAIItem S1ap-ProtocolIE-ID ::= 47 -id-E-RABFailedToSetupListCtxtSURes S1ap-ProtocolIE-ID ::= 48 -id-E-RABReleaseItemHOCmd S1ap-ProtocolIE-ID ::= 49 -id-E-RABSetupItemCtxtSURes S1ap-ProtocolIE-ID ::= 50 -id-E-RABSetupListCtxtSURes S1ap-ProtocolIE-ID ::= 51 -id-E-RABToBeSetupItemCtxtSUReq S1ap-ProtocolIE-ID ::= 52 -id-E-RABToBeSetupListHOReq S1ap-ProtocolIE-ID ::= 53 -id-GERANtoLTEHOInformationRes S1ap-ProtocolIE-ID ::= 55 -id-UTRANtoLTEHOInformationRes S1ap-ProtocolIE-ID ::= 57 -id-CriticalityDiagnostics S1ap-ProtocolIE-ID ::= 58 -id-Global-ENB-ID S1ap-ProtocolIE-ID ::= 59 -id-eNBname S1ap-ProtocolIE-ID ::= 60 -id-MMEname S1ap-ProtocolIE-ID ::= 61 -id-ServedPLMNs S1ap-ProtocolIE-ID ::= 63 -id-SupportedTAs S1ap-ProtocolIE-ID ::= 64 -id-TimeToWait S1ap-ProtocolIE-ID ::= 65 -id-uEaggregateMaximumBitrate S1ap-ProtocolIE-ID ::= 66 -id-TAI S1ap-ProtocolIE-ID ::= 67 -id-E-RABReleaseListBearerRelComp S1ap-ProtocolIE-ID ::= 69 -id-cdma2000PDU S1ap-ProtocolIE-ID ::= 70 -id-cdma2000RATType S1ap-ProtocolIE-ID ::= 71 -id-cdma2000SectorID S1ap-ProtocolIE-ID ::= 72 -id-SecurityKey S1ap-ProtocolIE-ID ::= 73 -id-UERadioCapability S1ap-ProtocolIE-ID ::= 74 -id-GUMMEI-ID S1ap-ProtocolIE-ID ::= 75 -id-E-RABInformationListItem S1ap-ProtocolIE-ID ::= 78 -id-Direct-Forwarding-Path-Availability S1ap-ProtocolIE-ID ::= 79 -id-UEIdentityIndexValue S1ap-ProtocolIE-ID ::= 80 -id-cdma2000HOStatus S1ap-ProtocolIE-ID ::= 83 -id-cdma2000HORequiredIndication S1ap-ProtocolIE-ID ::= 84 -id-E-UTRAN-Trace-ID S1ap-ProtocolIE-ID ::= 86 -id-RelativeMMECapacity S1ap-ProtocolIE-ID ::= 87 -id-SourceMME-UE-S1AP-ID S1ap-ProtocolIE-ID ::= 88 -id-Bearers-SubjectToStatusTransfer-Item S1ap-ProtocolIE-ID ::= 89 -id-eNB-StatusTransfer-TransparentContainer S1ap-ProtocolIE-ID ::= 90 -id-UE-associatedLogicalS1-ConnectionItem S1ap-ProtocolIE-ID ::= 91 -id-ResetType S1ap-ProtocolIE-ID ::= 92 -id-UE-associatedLogicalS1-ConnectionListResAck S1ap-ProtocolIE-ID ::= 93 -id-E-RABToBeSwitchedULItem S1ap-ProtocolIE-ID ::= 94 -id-E-RABToBeSwitchedULList S1ap-ProtocolIE-ID ::= 95 -id-S-TMSI S1ap-ProtocolIE-ID ::= 96 -id-cdma2000OneXRAND S1ap-ProtocolIE-ID ::= 97 -id-RequestType S1ap-ProtocolIE-ID ::= 98 -id-UE-S1AP-IDs S1ap-ProtocolIE-ID ::= 99 -id-EUTRAN-CGI S1ap-ProtocolIE-ID ::= 100 -id-OverloadResponse S1ap-ProtocolIE-ID ::= 101 -id-cdma2000OneXSRVCCInfo S1ap-ProtocolIE-ID ::= 102 -id-E-RABFailedToBeReleasedList S1ap-ProtocolIE-ID ::= 103 -id-Source-ToTarget-TransparentContainer S1ap-ProtocolIE-ID ::= 104 -id-ServedGUMMEIs S1ap-ProtocolIE-ID ::= 105 -id-SubscriberProfileIDforRFP S1ap-ProtocolIE-ID ::= 106 -id-UESecurityCapabilities S1ap-ProtocolIE-ID ::= 107 -id-CSFallbackIndicator S1ap-ProtocolIE-ID ::= 108 -id-CNDomain S1ap-ProtocolIE-ID ::= 109 -id-E-RABReleasedList S1ap-ProtocolIE-ID ::= 110 -id-MessageIdentifier S1ap-ProtocolIE-ID ::= 111 -id-SerialNumber S1ap-ProtocolIE-ID ::= 112 -id-WarningAreaList S1ap-ProtocolIE-ID ::= 113 -id-RepetitionPeriod S1ap-ProtocolIE-ID ::= 114 -id-NumberofBroadcastRequest S1ap-ProtocolIE-ID ::= 115 -id-WarningType S1ap-ProtocolIE-ID ::= 116 -id-WarningSecurityInfo S1ap-ProtocolIE-ID ::= 117 -id-DataCodingScheme S1ap-ProtocolIE-ID ::= 118 -id-WarningMessageContents S1ap-ProtocolIE-ID ::= 119 -id-BroadcastCompletedAreaList S1ap-ProtocolIE-ID ::= 120 -id-Inter-SystemInformationTransferTypeEDT S1ap-ProtocolIE-ID ::= 121 -id-Inter-SystemInformationTransferTypeMDT S1ap-ProtocolIE-ID ::= 122 -id-Target-ToSource-TransparentContainer S1ap-ProtocolIE-ID ::= 123 -id-SRVCCOperationPossible S1ap-ProtocolIE-ID ::= 124 -id-SRVCCHOIndication S1ap-ProtocolIE-ID ::= 125 -id-NAS-DownlinkCount S1ap-ProtocolIE-ID ::= 126 -id-CSG-Id S1ap-ProtocolIE-ID ::= 127 -id-CSG-IdList S1ap-ProtocolIE-ID ::= 128 -id-SONConfigurationTransferECT S1ap-ProtocolIE-ID ::= 129 -id-SONConfigurationTransferMCT S1ap-ProtocolIE-ID ::= 130 -id-TraceCollectionEntityIPAddress S1ap-ProtocolIE-ID ::= 131 -id-MSClassmark2 S1ap-ProtocolIE-ID ::= 132 -id-MSClassmark3 S1ap-ProtocolIE-ID ::= 133 -id-RRC-Establishment-Cause S1ap-ProtocolIE-ID ::= 134 -id-NASSecurityParametersfromE-UTRAN S1ap-ProtocolIE-ID ::= 135 -id-NASSecurityParameterstoE-UTRAN S1ap-ProtocolIE-ID ::= 136 -id-DefaultPagingDRX S1ap-ProtocolIE-ID ::= 137 -id-Source-ToTarget-TransparentContainer-Secondary S1ap-ProtocolIE-ID ::= 138 -id-Target-ToSource-TransparentContainer-Secondary S1ap-ProtocolIE-ID ::= 139 -id-EUTRANRoundTripDelayEstimationInfo S1ap-ProtocolIE-ID ::= 140 -id-BroadcastCancelledAreaList S1ap-ProtocolIE-ID ::= 141 -id-ConcurrentWarningMessageIndicator S1ap-ProtocolIE-ID ::= 142 -id-Data-Forwarding-Not-Possible S1ap-ProtocolIE-ID ::= 143 -id-ExtendedRepetitionPeriod S1ap-ProtocolIE-ID ::= 144 -id-CellAccessMode S1ap-ProtocolIE-ID ::= 145 -id-CSGMembershipStatus S1ap-ProtocolIE-ID ::= 146 -id-LPPa-PDU S1ap-ProtocolIE-ID ::= 147 -id-Routing-ID S1ap-ProtocolIE-ID ::= 148 -id-Time-Synchronization-Info S1ap-ProtocolIE-ID ::= 149 -id-PS-ServiceNotAvailable S1ap-ProtocolIE-ID ::= 150 -id-PagingPriority S1ap-ProtocolIE-ID ::= 151 -id-x2TNLConfigurationInfo S1ap-ProtocolIE-ID ::= 152 -id-eNBX2ExtendedTransportLayerAddresses S1ap-ProtocolIE-ID ::= 153 -id-GUMMEIList S1ap-ProtocolIE-ID ::= 154 -id-GW-TransportLayerAddress S1ap-ProtocolIE-ID ::= 155 -id-Correlation-ID S1ap-ProtocolIE-ID ::= 156 -id-SourceMME-GUMMEI S1ap-ProtocolIE-ID ::= 157 -id-MME-UE-S1AP-ID-2 S1ap-ProtocolIE-ID ::= 158 -id-RegisteredLAI S1ap-ProtocolIE-ID ::= 159 -id-RelayNode-Indicator S1ap-ProtocolIE-ID ::= 160 -id-TrafficLoadReductionIndication S1ap-ProtocolIE-ID ::= 161 -id-MDTConfiguration S1ap-ProtocolIE-ID ::= 162 -id-MMERelaySupportIndicator S1ap-ProtocolIE-ID ::= 163 -id-GWContextReleaseIndication S1ap-ProtocolIE-ID ::= 164 -id-ManagementBasedMDTAllowed S1ap-ProtocolIE-ID ::= 165 -id-PrivacyIndicator S1ap-ProtocolIE-ID ::= 166 - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-Containers.asn b/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-Containers.asn deleted file mode 100644 index b3dc098148..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-Containers.asn +++ /dev/null @@ -1,197 +0,0 @@ --- ************************************************************** --- --- Container definitions --- --- ************************************************************** - -S1AP-Containers { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Containers (5) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - S1ap-Criticality, - S1ap-Presence, - S1ap-PrivateIE-ID, - S1ap-ProtocolExtensionID, - S1ap-ProtocolIE-ID -FROM S1AP-CommonDataTypes - - s1ap-maxPrivateIEs, - s1ap-maxProtocolExtensions, - s1ap-maxProtocolIEs -FROM S1AP-Constants; - --- ************************************************************** --- --- Class Definition for Protocol IEs --- --- ************************************************************** - -S1AP-PROTOCOL-IES ::= CLASS { - &id S1ap-ProtocolIE-ID UNIQUE, - &criticality S1ap-Criticality, - &Value, - &presence S1ap-Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - TYPE &Value - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Protocol IEs --- --- ************************************************************** - -S1AP-PROTOCOL-IES-PAIR ::= CLASS { - &id S1ap-ProtocolIE-ID UNIQUE, - &firstCriticality S1ap-Criticality, - &FirstValue, - &secondCriticality S1ap-Criticality, - &SecondValue, - &presence S1ap-Presence -} -WITH SYNTAX { - ID &id - FIRST CRITICALITY &firstCriticality - FIRST TYPE &FirstValue - SECOND CRITICALITY &secondCriticality - SECOND TYPE &SecondValue - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Protocol Extensions --- --- ************************************************************** - -S1AP-PROTOCOL-EXTENSION ::= CLASS { - &id S1ap-ProtocolExtensionID UNIQUE, - &criticality S1ap-Criticality, - &Extension, - &presence S1ap-Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - EXTENSION &Extension - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Private IEs --- --- ************************************************************** - -S1AP-PRIVATE-IES ::= CLASS { - &id S1ap-PrivateIE-ID, - &criticality S1ap-Criticality, - &Value, - &presence S1ap-Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - TYPE &Value - PRESENCE &presence -} - --- ************************************************************** --- --- Container for Protocol IEs --- --- ************************************************************** - -ProtocolIE-Container {S1AP-PROTOCOL-IES : IEsSetParam} ::= - SEQUENCE (SIZE (0..maxProtocolIEs)) OF - ProtocolIE-Field {{IEsSetParam}} - -ProtocolIE-SingleContainer {S1AP-PROTOCOL-IES : IEsSetParam} ::= - ProtocolIE-Field {{IEsSetParam}} - -ProtocolIE-Field {S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { - id S1AP-PROTOCOL-IES.&id ({IEsSetParam}), - criticality S1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), - value S1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) -} - --- ************************************************************** --- --- Container for Protocol IE Pairs --- --- ************************************************************** - -ProtocolIE-ContainerPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= - SEQUENCE (SIZE (0..maxProtocolIEs)) OF - ProtocolIE-FieldPair {{IEsSetParam}} - -ProtocolIE-FieldPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { - id S1AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), - firstCriticality S1AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), - firstValue S1AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), - secondCriticality S1AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), - secondValue S1AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) -} - --- ************************************************************** --- --- Container Lists for Protocol IE Containers --- --- ************************************************************** - -ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES : IEsSetParam} ::= - SEQUENCE (SIZE (lowerBound..upperBound)) OF - ProtocolIE-SingleContainer {{IEsSetParam}} - -ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= - SEQUENCE (SIZE (lowerBound..upperBound)) OF - ProtocolIE-ContainerPair {{IEsSetParam}} - --- ************************************************************** --- --- Container for Protocol Extensions --- --- ************************************************************** - -ProtocolExtensionContainer {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= - SEQUENCE (SIZE (1..maxProtocolExtensions)) OF - ProtocolExtensionField {{ExtensionSetParam}} - -ProtocolExtensionField {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { - id S1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), - criticality S1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), - extensionValue S1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) -} - --- ************************************************************** --- --- Container for Private IEs --- --- ************************************************************** - -PrivateIE-Container {S1AP-PRIVATE-IES : IEsSetParam } ::= - SEQUENCE (SIZE (1.. maxPrivateIEs)) OF - PrivateIE-Field {{IEsSetParam}} - -PrivateIE-Field {S1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { - id S1AP-PRIVATE-IES.&id ({IEsSetParam}), - criticality S1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), - value S1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) -} - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-IEs.asn b/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-IEs.asn deleted file mode 100644 index 4fa0160c9b..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-IEs.asn +++ /dev/null @@ -1,1422 +0,0 @@ --- ************************************************************** --- --- Information Element Definitions --- --- ************************************************************** - -S1AP-IEs { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-IEs (2) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - s1ap-id-E-RABInformationListItem, - s1ap-id-E-RABItem, - s1ap-id-Bearers-SubjectToStatusTransfer-Item, - s1ap-id-Time-Synchronization-Info, - s1ap-id-x2TNLConfigurationInfo, - s1ap-id-eNBX2ExtendedTransportLayerAddresses, - s1ap-id-MDTConfiguration, - s1ap-maxNrOfCSGs, - s1ap-maxNrOfE-RABs, - s1ap-maxNrOfErrors, - s1ap-maxnoofBPLMNs, - s1ap-maxnoofPLMNsPerMME, - s1ap-maxnoofTACs, - s1ap-maxnoofEPLMNs, - s1ap-maxnoofEPLMNsPlusOne, - s1ap-maxnoofForbLACs, - s1ap-maxnoofForbTACs, - s1ap-maxnoofCells, - s1ap-maxnoofCellID, - s1ap-maxnoofEmergencyAreaID, - s1ap-maxnoofTAIforWarning, - s1ap-maxnoofCellinTAI, - s1ap-maxnoofCellinEAI, - s1ap-maxnoofeNBX2TLAs, - s1ap-maxnoofeNBX2ExtTLAs, - s1ap-maxnoofeNBX2GTPTLAs, - s1ap-maxnoofRATs, - s1ap-maxnoofGroupIDs, - s1ap-maxnoofMMECs, - s1ap-maxnoofTAforMDT, - s1ap-maxnoofCellIDforMDT, - s1ap-maxProtocolExtensions, - s1ap-maxNrOfIndividualS1ConnectionsToReset, - s1ap-maxnoofTAIs - -FROM S1AP-Constants - - S1ap-IE -FROM S1AP-PDU - - S1ap-Criticality, - S1ap-ProcedureCode, - S1ap-ProtocolIE-ID, - S1ap-TriggeringMessage -FROM S1AP-CommonDataTypes; - -S1ap-IE-Extensions ::= SEQUENCE (SIZE (1..s1ap-maxProtocolExtensions)) OF S1ap-IE - --- A - -S1ap-AreaScopeOfMDT ::= CHOICE { - cellBased S1ap-CellBasedMDT, - tABased S1ap-TABasedMDT, - pLMNWide NULL, - ... -} - -S1ap-AllocationAndRetentionPriority ::= SEQUENCE { - priorityLevel S1ap-PriorityLevel, - pre-emptionCapability S1ap-Pre-emptionCapability, - pre-emptionVulnerability S1ap-Pre-emptionVulnerability, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - --- B - -S1ap-Bearers-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE - -S1ap-Bearers-SubjectToStatusTransfer-Item ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - uL-COUNTvalue S1ap-COUNTvalue, - dL-COUNTvalue S1ap-COUNTvalue, - receiveStatusofULPDCPSDUs S1ap-ReceiveStatusofULPDCPSDUs OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-BitRate ::= INTEGER (0..10000000000) - -S1ap-BPLMNs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofBPLMNs)) OF S1ap-PLMNidentity - -S1ap-BroadcastCancelledAreaList ::= CHOICE { - cellID-Cancelled S1ap-CellID-Cancelled, - tAI-Cancelled S1ap-TAI-Cancelled, - emergencyAreaID-Cancelled S1ap-EmergencyAreaID-Cancelled, - ... -} - -S1ap-BroadcastCompletedAreaList ::= CHOICE { - cellID-Broadcast S1ap-CellID-Broadcast, - tAI-Broadcast S1ap-TAI-Broadcast, - emergencyAreaID-Broadcast S1ap-EmergencyAreaID-Broadcast, - ... -} - - --- C - -S1ap-CancelledCellinEAI ::= SEQUENCE (SIZE(1..s1ap-maxnoofCellinEAI)) OF S1ap-CancelledCellinEAI-Item - -S1ap-CancelledCellinEAI-Item ::= SEQUENCE { - eCGI S1ap-EUTRAN-CGI, - numberOfBroadcasts S1ap-NumberOfBroadcasts, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CancelledCellinTAI ::= SEQUENCE (SIZE(1..s1ap-maxnoofCellinTAI)) OF S1ap-CancelledCellinTAI-Item - -S1ap-CancelledCellinTAI-Item ::= SEQUENCE{ - eCGI S1ap-EUTRAN-CGI, - numberOfBroadcasts S1ap-NumberOfBroadcasts, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-Cause ::= CHOICE { - radioNetwork S1ap-CauseRadioNetwork, - transport S1ap-CauseTransport, - nas S1ap-CauseNas, - protocol S1ap-CauseProtocol, - misc S1ap-CauseMisc, - ... -} - -S1ap-CauseMisc ::= ENUMERATED { - control-processing-overload, - not-enough-user-plane-processing-resources, - hardware-failure, - om-intervention, - unspecified, - unknown-PLMN, - ... -} - -S1ap-CauseProtocol ::= ENUMERATED { - transfer-syntax-error, - abstract-syntax-error-reject, - abstract-syntax-error-ignore-and-notify, - message-not-compatible-with-receiver-state, - semantic-error, - abstract-syntax-error-falsely-constructed-message, - unspecified, - ... -} - -S1ap-CauseRadioNetwork ::= ENUMERATED { - unspecified, - tx2relocoverall-expiry, - successful-handover, - release-due-to-eutran-generated-reason, - handover-cancelled, - partial-handover, - ho-failure-in-target-EPC-eNB-or-target-system, - ho-target-not-allowed, - tS1relocoverall-expiry, - tS1relocprep-expiry, - cell-not-available, - unknown-targetID, - no-radio-resources-available-in-target-cell, - unknown-mme-ue-s1ap-id, - unknown-enb-ue-s1ap-id, - unknown-pair-ue-s1ap-id, - handover-desirable-for-radio-reason, - time-critical-handover, - resource-optimisation-handover, - reduce-load-in-serving-cell, - user-inactivity, - radio-connection-with-ue-lost, - load-balancing-tau-required, - cs-fallback-triggered, - ue-not-available-for-ps-service, - radio-resources-not-available, - failure-in-radio-interface-procedure, - invals1ap-id-qos-combination, - interrat-redirection, - interaction-with-other-procedure, - unknown-E-RAB-ID, - multiple-E-RAB-ID-instances, - encryption-and-or-integrity-protection-algorithms-not-supported, - s1-intra-system-handover-triggered, - s1-inter-system-handover-triggered, - x2-handover-triggered, - ..., - redirection-towards-1xRTT, - not-supported-QCI-value, - invals1ap-id-CSG-Id - -} - -S1ap-CauseTransport ::= ENUMERATED { - transport-resource-unavailable, - unspecified, - ... -} - -S1ap-CauseNas ::= ENUMERATED { - normal-release, - authentication-failure, - detach, - unspecified, - ..., - csg-subscription-expiry -} - -S1ap-CellAccessMode ::= ENUMERATED { - hybrid, - ... -} - -S1ap-CellIdentity ::= BIT STRING (SIZE (28)) - -S1ap-CellID-Broadcast ::= SEQUENCE (SIZE(1..s1ap-maxnoofCellID)) OF S1ap-CellID-Broadcast-Item - -S1ap-CellID-Broadcast-Item ::= SEQUENCE { - eCGI S1ap-EUTRAN-CGI, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CellID-Cancelled::= SEQUENCE (SIZE(1..s1ap-maxnoofCellID)) OF S1ap-CellID-Cancelled-Item - -S1ap-CellID-Cancelled-Item ::= SEQUENCE { - eCGI S1ap-EUTRAN-CGI, - numberOfBroadcasts S1ap-NumberOfBroadcasts, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CellBasedMDT::= SEQUENCE { - cellIdListforMDT S1ap-CellIdListforMDT, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CellIdListforMDT ::= SEQUENCE (SIZE(1..s1ap-maxnoofCellIDforMDT)) OF S1ap-EUTRAN-CGI - -S1ap-Cdma2000PDU ::= OCTET STRING - -S1ap-Cdma2000RATType ::= ENUMERATED { - hRPD, - onexRTT, - ... -} - -S1ap-Cdma2000SectorID ::= OCTET STRING - -S1ap-Cdma2000HOStatus ::= ENUMERATED { - hOSuccess, - hOFailure, - ... -} - -S1ap-Cdma2000HORequiredIndication ::= ENUMERATED { - true, - ... -} - -S1ap-Cdma2000OneXSRVCCInfo ::= SEQUENCE { - cdma2000OneXMEID S1ap-Cdma2000OneXMEID, - cdma2000OneXMSI S1ap-Cdma2000OneXMSI, - cdma2000OneXPilot S1ap-Cdma2000OneXPilot, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-Cdma2000OneXMEID ::= OCTET STRING - -S1ap-Cdma2000OneXMSI ::= OCTET STRING - -S1ap-Cdma2000OneXPilot ::= OCTET STRING - -S1ap-Cdma2000OneXRAND ::= OCTET STRING - -S1ap-Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ...} - -S1ap-CellType ::= SEQUENCE { - cell-Size S1ap-Cell-Size, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CGI ::= SEQUENCE { - pLMNidentity S1ap-PLMNidentity, - lAC S1ap-LAC, - cI S1ap-CI, - rAC S1ap-RAC OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CI ::= OCTET STRING (SIZE (2)) - -S1ap-CNDomain ::= ENUMERATED { - ps, - cs -} - -S1ap-ConcurrentWarningMessageIndicator ::= ENUMERATED { - true -} - -S1ap-Correlation-ID ::= OCTET STRING (SIZE (4)) - -S1ap-CSFallbackIndicator ::= ENUMERATED { - cs-fallback-required, - ..., - cs-fallback-high-priority -} - -S1ap-CSG-Id ::= BIT STRING (SIZE (27)) - - -S1ap-CSG-IdList ::= SEQUENCE (SIZE (1..s1ap-maxNrOfCSGs)) OF S1ap-CSG-IdList-Item - -S1ap-CSG-IdList-Item ::= SEQUENCE { - cSG-Id S1ap-CSG-Id, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CSGMembershipStatus ::= ENUMERATED { - member, - not-member -} - - -S1ap-COUNTvalue ::= SEQUENCE { - pDCP-SN S1ap-PDCP-SN, - hFN S1ap-HFN, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CriticalityDiagnostics ::= SEQUENCE { - procedureCode S1ap-ProcedureCode OPTIONAL, - triggeringMessage S1ap-TriggeringMessage OPTIONAL, - procedureCriticality S1ap-Criticality OPTIONAL, - iEsCriticalityDiagnostics S1ap-CriticalityDiagnostics-IE-List OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..s1ap-maxNrOfErrors)) OF S1ap-CriticalityDiagnostics-IE-Item - -S1ap-CriticalityDiagnostics-IE-Item ::= SEQUENCE { - iECriticality S1ap-Criticality, - iE-ID S1ap-ProtocolIE-ID, - typeOfError S1ap-TypeOfError, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - --- D - -S1ap-DataCodingScheme ::= BIT STRING (SIZE (8)) - -S1ap-DL-Forwarding ::= ENUMERATED { - dL-Forwarding-proposed, - ... -} - -S1ap-Direct-Forwarding-Path-Availability ::= ENUMERATED { - directPathAvailable, - ... -} - -S1ap-Data-Forwarding-Not-Possible ::= ENUMERATED { - data-Forwarding-not-Possible, - ... -} - --- E - -S1ap-ECGIList ::= SEQUENCE (SIZE(1..s1ap-maxnoofCellID)) OF S1ap-EUTRAN-CGI - -S1ap-EmergencyAreaIDList ::= SEQUENCE (SIZE(1..s1ap-maxnoofEmergencyAreaID)) OF S1ap-EmergencyAreaID - -S1ap-EmergencyAreaID ::= OCTET STRING (SIZE (3)) - -S1ap-EmergencyAreaID-Broadcast ::= SEQUENCE (SIZE(1..s1ap-maxnoofEmergencyAreaID)) OF S1ap-EmergencyAreaID-Broadcast-Item - -S1ap-EmergencyAreaID-Broadcast-Item ::= SEQUENCE { - emergencyAreaID S1ap-EmergencyAreaID, - completedCellinEAI S1ap-CompletedCellinEAI, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-EmergencyAreaID-Cancelled ::= SEQUENCE (SIZE(1..s1ap-maxnoofEmergencyAreaID)) OF S1ap-EmergencyAreaID-Cancelled-Item - -S1ap-EmergencyAreaID-Cancelled-Item ::= SEQUENCE { - emergencyAreaID S1ap-EmergencyAreaID, - cancelledCellinEAI S1ap-CancelledCellinEAI, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-CompletedCellinEAI ::= SEQUENCE (SIZE(1..s1ap-maxnoofCellinEAI)) OF S1ap-CompletedCellinEAI-Item - -S1ap-CompletedCellinEAI-Item ::= SEQUENCE { - eCGI S1ap-EUTRAN-CGI, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-ENB-ID ::= CHOICE { - macroENB-ID BIT STRING (SIZE(20)), - homeENB-ID BIT STRING (SIZE(28)), - ... -} - -S1ap-GERAN-Cell-ID ::= SEQUENCE { - lAI S1ap-LAI, - rAC S1ap-RAC, - cI S1ap-CI, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-Global-ENB-ID ::= SEQUENCE { - pLMNidentity S1ap-PLMNidentity, - eNB-ID S1ap-ENB-ID, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-GUMMEIList::= SEQUENCE (SIZE (1.. s1ap-maxnoofMMECs)) OF S1ap-GUMMEI - -S1ap-ENB-StatusTransfer-TransparentContainer ::= SEQUENCE { - bearers-SubjectToStatusTransferList S1ap-Bearers-SubjectToStatusTransfer-List, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-ENB-UE-S1AP-ID ::= INTEGER (0..16777215) - -S1ap-ENBname ::= PrintableString (SIZE (1..150,...)) - -S1ap-ENBX2TLAs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofeNBX2TLAs)) OF S1ap-TransportLayerAddress - -S1ap-EncryptionAlgorithms ::= BIT STRING (SIZE (16,...)) - -S1ap-EPLMNs ::= SEQUENCE (SIZE(1..s1ap-maxnoofEPLMNs)) OF S1ap-PLMNidentity - -S1ap-EventType ::= ENUMERATED { - direct, - change-of-serve-cell, - stop-change-of-serve-cell, - ... -} - -S1ap-E-RAB-ID ::= INTEGER (0..15, ...) - -S1ap-E-RABDataForwardingItem ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - dL-transportLayerAddress S1ap-TransportLayerAddress OPTIONAL, - dL-gTP-TEID S1ap-GTP-TEID OPTIONAL, - uL-TransportLayerAddress S1ap-TransportLayerAddress OPTIONAL, - uL-GTP-TEID S1ap-GTP-TEID OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { { E-RABDataForwardingItem-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABToBeSetupItemHOReq ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - transportLayerAddress S1ap-TransportLayerAddress, - gTP-TEID S1ap-GTP-TEID, - e-RABlevelQosParameters S1ap-E-RABLevelQoSParameters, - -- iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemHOReq-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABAdmittedItem ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - transportLayerAddress S1ap-TransportLayerAddress, - gTP-TEID S1ap-GTP-TEID, - dL-transportLayerAddress S1ap-TransportLayerAddress OPTIONAL, - dL-gTP-TEID S1ap-GTP-TEID OPTIONAL, - uL-TransportLayerAddress S1ap-TransportLayerAddress OPTIONAL, - uL-GTP-TEID S1ap-GTP-TEID OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {E-RABAdmittedItem-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABToBeSwitchedDLItem ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - transportLayerAddress S1ap-TransportLayerAddress, - gTP-TEID S1ap-GTP-TEID, - -- iE-Extensions ProtocolExtensionContainer { { E-RABToBeSwitchedDLItem-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABToBeSwitchedULItem ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - transportLayerAddress S1ap-TransportLayerAddress, - gTP-TEID S1ap-GTP-TEID, - -- iE-Extensions ProtocolExtensionContainer { { E-RABToBeSwitchedULItem-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABToBeSetupItemBearerSUReq ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - e-RABlevelQoSParameters S1ap-E-RABLevelQoSParameters, - transportLayerAddress S1ap-TransportLayerAddress, - gTP-TEID S1ap-GTP-TEID, - nAS-PDU S1ap-NAS-PDU, - -- iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemBearerSUReqExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABSetupItemBearerSURes ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - transportLayerAddress S1ap-TransportLayerAddress, - gTP-TEID S1ap-GTP-TEID, - -- iE-Extensions ProtocolExtensionContainer { {E-RABSetupItemBearerSUResExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABToBeModifiedItemBearerModReq ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - e-RABLevelQoSParameters S1ap-E-RABLevelQoSParameters, - nAS-PDU S1ap-NAS-PDU, - -- iE-Extensions ProtocolExtensionContainer { {E-RABToBeModifyItemBearerModReqExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABReleaseItemBearerRelComp ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - -- iE-Extensions ProtocolExtensionContainer { {E-RABReleaseItemBearerRelCompExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABToBeSetupItemCtxtSUReq ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - e-RABlevelQoSParameters S1ap-E-RABLevelQoSParameters, - transportLayerAddress S1ap-TransportLayerAddress, - gTP-TEID S1ap-GTP-TEID, - nAS-PDU S1ap-NAS-PDU OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABSetupItemCtxtSURes ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - transportLayerAddress S1ap-TransportLayerAddress, - gTP-TEID S1ap-GTP-TEID, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABToBeModifiedListBearerModReq ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABReleaseListBearerRelComp ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABInformationList ::= SEQUENCE (SIZE (1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABToBeSetupListCtxtSUReq ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABSetupListCtxtSURes ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABDataForwardingList ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABSetupListBearerSURes ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABFailedToSetupListHOReqAck ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABToBeSetupListBearerSUReq ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABAdmittedList ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABToBeSwitchedDLList ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABToBeSwitchedULList ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABModifyListBearerModRes ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE -S1ap-E-RABToBeSetupListHOReq ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE - -S1ap-TAIList::= SEQUENCE (SIZE(1.. s1ap-maxnoofTAIs)) OF S1ap-IE -S1ap-UE-associatedLogicalS1-ConnectionListRes ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfIndividualS1ConnectionsToReset)) OF S1ap-IE -S1ap-UE-associatedLogicalS1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfIndividualS1ConnectionsToReset)) OF S1ap-IE - -S1ap-E-RABModifyItemBearerModRes ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - -- iE-Extensions ProtocolExtensionContainer { {E-RABModifyItemBearerModResExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABFailedToSetupItemHOReqAck ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - cause S1ap-Cause, - -- iE-Extensions ProtocolExtensionContainer { { E-RABFailedToSetupItemHOReqAckExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABInformationListItem ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - dL-Forwarding S1ap-DL-Forwarding OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {E-RABInformationListItem-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - --- E-RABList ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABItemIEs} } -S1ap-E-RABList ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF S1ap-IE - -S1ap-E-RABItem ::= SEQUENCE { - e-RAB-ID S1ap-E-RAB-ID, - cause S1ap-Cause, - -- iE-Extensions ProtocolExtensionContainer { {E-RABItem-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-E-RABLevelQoSParameters ::= SEQUENCE { - qCI S1ap-QCI, - allocationRetentionPriority S1ap-AllocationAndRetentionPriority, - gbrQosInformation S1ap-GBR-QosInformation OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {E-RABQoSParameters-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-EUTRAN-CGI ::= SEQUENCE { - pLMNidentity S1ap-PLMNidentity, - cell-ID S1ap-CellIdentity, - -- iE-Extensions ProtocolExtensionContainer { {EUTRAN-CGI-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-EUTRANRoundTripDelayEstimationInfo ::= INTEGER (0..2047) - -S1ap-ExtendedRNC-ID ::= INTEGER (4096..65535) - -S1ap-ExtendedRepetitionPeriod ::= INTEGER (4096..131071) - --- F - -S1ap-ForbiddenInterRATs ::= ENUMERATED { - all, - geran, - utran, - cdma2000, - ..., - geranandutran, - cdma2000andutran - -} - -S1ap-ForbiddenTAs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofEPLMNsPlusOne)) OF S1ap-ForbiddenTAs-Item - -S1ap-ForbiddenTAs-Item ::= SEQUENCE { - pLMN-Identity S1ap-PLMNidentity, - forbiddenTACs S1ap-ForbiddenTACs, - -- iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-ForbiddenTACs ::= SEQUENCE (SIZE(1..s1ap-maxnoofForbTACs)) OF S1ap-TAC - -S1ap-ForbiddenLAs ::= SEQUENCE (SIZE(1..s1ap-maxnoofEPLMNsPlusOne)) OF S1ap-ForbiddenLAs-Item - -S1ap-ForbiddenLAs-Item ::= SEQUENCE { - pLMN-Identity S1ap-PLMNidentity, - forbiddenLACs S1ap-ForbiddenLACs, - -- iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-ForbiddenLACs ::= SEQUENCE (SIZE(1..s1ap-maxnoofForbLACs)) OF S1ap-LAC - --- G - -S1ap-GBR-QosInformation ::= SEQUENCE { - e-RAB-MaximumBitrateDL S1ap-BitRate, - e-RAB-MaximumBitrateUL S1ap-BitRate, - e-RAB-GuaranteedBitrateDL S1ap-BitRate, - e-RAB-GuaranteedBitrateUL S1ap-BitRate, - -- iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-GTP-TEID ::= OCTET STRING (SIZE (4)) - -S1ap-GUMMEI ::= SEQUENCE { - pLMN-Identity S1ap-PLMNidentity, - mME-Group-ID S1ap-MME-Group-ID, - mME-Code S1ap-MME-Code, - -- iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-GWContextReleaseIndication ::= ENUMERATED { - true, - ... -} - --- H - -S1ap-HandoverRestrictionList ::= SEQUENCE { - servingPLMN S1ap-PLMNidentity, - equivalentPLMNs S1ap-EPLMNs OPTIONAL, - forbiddenTAs S1ap-ForbiddenTAs OPTIONAL, - forbiddenLAs S1ap-ForbiddenLAs OPTIONAL, - forbiddenInterRATs S1ap-ForbiddenInterRATs OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-HandoverType ::= ENUMERATED { - intralte, - ltetoutran, - ltetogeran, - utrantolte, - gerantolte, - ... -} - -S1ap-HFN ::= INTEGER (0..1048575) - --- I - -S1ap-ImmediateMDT ::= SEQUENCE { - measurementsToActivate S1ap-MeasurementsToActivate, - reportingTriggerMDT S1ap-ReportingTriggerMDT, - thresholdeventA2 S1ap-ThresholdEventA2 OPTIONAL, --- Included in case of event-triggered reporting for measurement M1 - periodicReportingMDT S1ap-PeriodicReportingMDT OPTIONAL, --- Included in case of periodic reporting - -- iE-Extensions ProtocolExtensionContainer { { ImmediateMDT-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-IMSI ::= OCTET STRING (SIZE (3..8)) - -S1ap-IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) - -S1ap-InterfacesToTrace ::= BIT STRING (SIZE (8)) - -S1ap-Inter-SystemInformationTransferType ::= CHOICE { - rIMTransfer S1ap-RIMTransfer, - ... -} - --- J --- K --- L - - -S1ap-LAC ::= OCTET STRING (SIZE (2)) - -S1ap-LAI ::= SEQUENCE { - pLMNidentity S1ap-PLMNidentity, - lAC S1ap-LAC, - -- iE-Extensions ProtocolExtensionContainer { {LAI-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-LastVisitedCell-Item ::= CHOICE { - e-UTRAN-Cell S1ap-LastVisitedEUTRANCellInformation, - uTRAN-Cell S1ap-LastVisitedUTRANCellInformation, - gERAN-Cell S1ap-LastVisitedGERANCellInformation, - ... -} - -S1ap-LastVisitedEUTRANCellInformation ::= SEQUENCE { - global-Cell-ID S1ap-EUTRAN-CGI, - cellType S1ap-CellType, - time-UE-StayedInCell S1ap-Time-UE-StayedInCell, - -- iE-Extensions ProtocolExtensionContainer { { LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-LastVisitedUTRANCellInformation ::= OCTET STRING - -S1ap-LastVisitedGERANCellInformation ::= CHOICE { - undefined NULL, - ... -} - -S1ap-L3-Information ::= OCTET STRING --- This is a dummy IE used only as a reference to the actual definition in relevant specification. - -S1ap-LPPa-PDU ::= OCTET STRING - -S1ap-LoggedMDT ::= SEQUENCE { - loggingInterval S1ap-LoggingInterval, - loggingDuration S1ap-LoggingDuration, - -- iE-Extensions ProtocolExtensionContainer { {LoggedMDT-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-LoggingInterval ::= ENUMERATED {ms128, ms256, ms512, ms1024, ms2048, ms3072, ms4096, ms6144} - -S1ap-LoggingDuration ::= ENUMERATED {m10, m20, m40, m60, m90, m120} - --- M - -S1ap-MDT-Activation ::= ENUMERATED { - immediate-MDT-only, - immediate-MDT-and-Trace, - logged-MDT-only, - ... -} - -S1ap-MDT-Configuration ::= SEQUENCE { - mdt-Activation S1ap-MDT-Activation, - areaScopeOfMDT S1ap-AreaScopeOfMDT, - mDTMode S1ap-MDTMode, - -- iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-ManagementBasedMDTAllowed ::= ENUMERATED {allowed, ...} - -S1ap-PrivacyIndicator ::= ENUMERATED { - immediate-MDT, - logged-MDT, - ... -} - -S1ap-MDTMode ::= CHOICE { - immediateMDT S1ap-ImmediateMDT, - loggedMDT S1ap-LoggedMDT, - ... -} - -S1ap-MeasurementsToActivate ::= BIT STRING (SIZE (8)) - -S1ap-MeasurementThresholdA2 ::= CHOICE { - threshold-RSRP S1ap-Threshold-RSRP, - threshold-RSRQ S1ap-Threshold-RSRQ, - ... -} - -S1ap-MessageIdentifier ::= BIT STRING (SIZE (16)) - -S1ap-MMEname ::= PrintableString (SIZE (1..150,...)) - -S1ap-MMERelaySupportIndicator ::= ENUMERATED {true, ...} - -S1ap-MME-Group-ID ::= OCTET STRING (SIZE (2)) - -S1ap-MME-Code ::= OCTET STRING (SIZE (1)) - -S1ap-MME-UE-S1AP-ID ::= INTEGER (0..4294967295) -S1ap-M-TMSI ::= OCTET STRING (SIZE (4)) - -S1ap-MSClassmark2 ::= OCTET STRING -S1ap-MSClassmark3 ::= OCTET STRING - --- N - -S1ap-NAS-PDU ::= OCTET STRING - -S1ap-NASSecurityParametersfromE-UTRAN ::= OCTET STRING - -S1ap-NASSecurityParameterstoE-UTRAN ::= OCTET STRING - -S1ap-NumberofBroadcastRequest ::= INTEGER (0..65535) - -S1ap-NumberOfBroadcasts ::= INTEGER (0..65535) - --- O -S1ap-OldBSS-ToNewBSS-Information ::= OCTET STRING --- This is a dummy IE used only as a reference to the actual definition in relevant specification. - -S1ap-OverloadAction ::= ENUMERATED { - reject-non-emergency-mo-dt, - reject-rrc-cr-signalling, - permit-emergency-sessions-and-mobile-terminated-services-only, - ..., - permit-high-priority-sessions-and-mobile-terminated-services-only, - reject-delay-tolerant-access -} - -S1ap-OverloadResponse ::= CHOICE { - overloadAction S1ap-OverloadAction, - ... -} - - --- P - -S1ap-PagingDRX ::= ENUMERATED { - v32, - v64, - v128, - v256, - ... - } - -S1ap-PagingPriority ::= ENUMERATED { - priolevel1, - priolevel2, - priolevel3, - priolevel4, - priolevel5, - priolevel6, - priolevel7, - priolevel8, - ... -} - -S1ap-PDCP-SN ::= INTEGER (0..4095) - -S1ap-PeriodicReportingMDT ::= SEQUENCE { - reportInterval S1ap-ReportIntervalMDT, - reportAmount S1ap-ReportAmountMDT, - -- iE-Extensions ProtocolExtensionContainer { { PeriodicReportingMDT-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-PLMNidentity ::= S1ap-TBCD-STRING - -S1ap-Pre-emptionCapability ::= ENUMERATED { - shall-not-trigger-pre-emption, - may-trigger-pre-emption -} - -S1ap-Pre-emptionVulnerability ::= ENUMERATED { - not-pre-emptable, - pre-emptable -} - -S1ap-PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) - -S1ap-PS-ServiceNotAvailable ::= ENUMERATED { - ps-service-not-available, - ... -} - --- Q - -S1ap-QCI ::= INTEGER (0..255) - --- R - -S1ap-ResetType ::= CHOICE { - s1-Interface S1ap-ResetAll, - partOfS1-Interface S1ap-UE-associatedLogicalS1-ConnectionListRes, - ... -} - -S1ap-ResetAll ::= ENUMERATED { - reset-all, - ... -} - -S1ap-ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) - -S1ap-RelativeMMECapacity ::= INTEGER (0..255) - -S1ap-RelayNode-Indicator ::= ENUMERATED { - true, - ... -} - -S1ap-RAC ::= OCTET STRING (SIZE (1)) - -S1ap-ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity} - -S1ap-ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60} - -S1ap-ReportingTriggerMDT ::= ENUMERATED{ - periodic, - a2eventtriggered, - ... -} - -S1ap-RequestType ::= SEQUENCE { - eventType S1ap-EventType, - reportArea S1ap-ReportArea, - -- iE-Extensions ProtocolExtensionContainer { { RequestType-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-RIMTransfer ::= SEQUENCE { - rIMInformation S1ap-RIMInformation, - rIMRoutingAddress S1ap-RIMRoutingAddress OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { { RIMTransfer-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-RIMInformation ::= OCTET STRING - -S1ap-RIMRoutingAddress ::= CHOICE { - gERAN-Cell-ID S1ap-GERAN-Cell-ID, - ..., - targetRNC-ID S1ap-TargetRNC-ID -} - -S1ap-ReportArea ::= ENUMERATED { - ecgi, - ... -} - -S1ap-RepetitionPeriod ::= INTEGER (0..4095) - -S1ap-RNC-ID ::= INTEGER (0..4095) - -S1ap-RRC-Container ::= OCTET STRING - -S1ap-RRC-Establishment-Cause ::= ENUMERATED { - emergency, - highPriorityAccess, - mt-Access, - mo-Signalling, - mo-Data, - ..., - delay-TolerantAccess -} - -S1ap-Routing-ID ::= INTEGER (0..255) - --- S - - -S1ap-SecurityKey ::= BIT STRING (SIZE(256)) - -S1ap-SecurityContext ::= SEQUENCE { - nextHopChainingCount INTEGER (0..7), - nextHopParameter S1ap-SecurityKey, - -- iE-Extensions ProtocolExtensionContainer { { SecurityContext-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-SerialNumber ::= BIT STRING (SIZE (16)) - -S1ap-SONInformation ::= CHOICE{ - sONInformationRequest S1ap-SONInformationRequest, - sONInformationReply S1ap-SONInformationReply, - ... -} - -S1ap-SONInformationRequest ::= ENUMERATED { - x2TNL-Configuration-Info, - ..., - time-Synchronization-Info -} - -S1ap-SONInformationReply ::= SEQUENCE { - x2TNLConfigurationInfo S1ap-X2TNLConfigurationInfo OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer {{SONInformationReply-ExtIEs}} OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-SONConfigurationTransfer ::= SEQUENCE { - targeteNB-ID S1ap-TargeteNB-ID, - sourceeNB-ID S1ap-SourceeNB-ID, - sONInformation S1ap-SONInformation, - -- iE-Extensions ProtocolExtensionContainer { { SONConfigurationTransfer-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-Source-ToTarget-TransparentContainer ::= OCTET STRING --- This IE includes a transparent container from the source RAN node to the target RAN node. --- The octets of the OCTET STRING are encoded according to the specifications of the target system. - -S1ap-SourceBSS-ToTargetBSS-TransparentContainer ::= OCTET STRING --- This is a dummy IE used only as a reference to the actual definition in relevant specification. - -S1ap-SourceeNB-ID ::= SEQUENCE { - global-ENB-ID S1ap-Global-ENB-ID, - selected-TAI S1ap-TAI, - -- iE-Extensions ProtocolExtensionContainer { {SourceeNB-ID-ExtIEs} } OPTIONAL - iE-Extensions S1ap-IE-Extensions OPTIONAL -} - -S1ap-SRVCCOperationPossible ::= ENUMERATED { - possible, - ... -} - -S1ap-SRVCCHOIndication ::= ENUMERATED { - pSandCS, - cSonly, - ... -} - -S1ap-SourceeNB-ToTargeteNB-TransparentContainer ::= SEQUENCE { - rRC-Container S1ap-RRC-Container, - e-RABInformationList S1ap-E-RABInformationList OPTIONAL, - targetCell-ID S1ap-EUTRAN-CGI, - subscriberProfileIDforRFP S1ap-SubscriberProfileIDforRFP OPTIONAL, - uE-HistoryInformation S1ap-UE-HistoryInformation, - -- iE-Extensions ProtocolExtensionContainer { {SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-SourceRNC-ToTargetRNC-TransparentContainer ::= OCTET STRING --- This is a dummy IE used only as a reference to the actual definition in relevant specification. - - -S1ap-ServedGUMMEIs ::= SEQUENCE (SIZE (1.. s1ap-maxnoofRATs)) OF S1ap-ServedGUMMEIsItem - -S1ap-ServedGUMMEIsItem ::= SEQUENCE { - servedPLMNs S1ap-ServedPLMNs, - servedGroupIDs S1ap-ServedGroupIDs, - servedMMECs S1ap-ServedMMECs, - -- iE-Extensions ProtocolExtensionContainer { {ServedGUMMEIsItem-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-ServedGroupIDs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofGroupIDs)) OF S1ap-MME-Group-ID -S1ap-ServedMMECs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofMMECs)) OF S1ap-MME-Code - -S1ap-ServedPLMNs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofPLMNsPerMME)) OF S1ap-PLMNidentity - -S1ap-SubscriberProfileIDforRFP ::= INTEGER (1..256) - -S1ap-SupportedTAs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofTACs)) OF S1ap-SupportedTAs-Item - -S1ap-SupportedTAs-Item ::= SEQUENCE { - tAC S1ap-TAC, - broadcastPLMNs S1ap-BPLMNs, - -- iE-Extensions ProtocolExtensionContainer { {SupportedTAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-StratumLevel ::= INTEGER (0..3, ...) - -S1ap-SynchronizationStatus ::= ENUMERATED { synchronous, asynchronous, ... } - -S1ap-TimeSynchronizationInfo ::= SEQUENCE { - stratumLevel S1ap-StratumLevel, - synchronizationStatus S1ap-SynchronizationStatus, - -- iE-Extensions ProtocolExtensionContainer { { TimeSynchronizationInfo-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-S-TMSI ::= SEQUENCE { - mMEC S1ap-MME-Code, - m-TMSI S1ap-M-TMSI, - -- iE-Extensions ProtocolExtensionContainer { {S-TMSI-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - --- T - -S1ap-TAC ::= OCTET STRING (SIZE (2)) - -S1ap-TAIListforWarning ::= SEQUENCE (SIZE(1..s1ap-maxnoofTAIforWarning)) OF S1ap-TAI - -S1ap-TAI ::= SEQUENCE { - pLMNidentity S1ap-PLMNidentity, - tAC S1ap-TAC, - -- iE-Extensions ProtocolExtensionContainer { {TAI-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TAIItem ::= SEQUENCE { - tAI S1ap-TAI, - -- iE-Extensions ProtocolExtensionContainer { {TAIItemExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TAI-Broadcast ::= SEQUENCE (SIZE(1..s1ap-maxnoofTAIforWarning)) OF S1ap-TAI-Broadcast-Item - -S1ap-TAI-Broadcast-Item ::= SEQUENCE { - tAI S1ap-TAI, - completedCellinTAI S1ap-CompletedCellinTAI, - -- iE-Extensions ProtocolExtensionContainer { {TAI-Broadcast-Item-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TAI-Cancelled ::= SEQUENCE (SIZE(1..s1ap-maxnoofTAIforWarning)) OF S1ap-TAI-Cancelled-Item - -S1ap-TAI-Cancelled-Item ::= SEQUENCE { - tAI S1ap-TAI, - cancelledCellinTAI S1ap-CancelledCellinTAI, - -- iE-Extensions ProtocolExtensionContainer { {TAI-Cancelled-Item-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TABasedMDT ::= SEQUENCE { - tAListforMDT S1ap-TAListforMDT, - -- iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TAListforMDT ::= SEQUENCE (SIZE(1..s1ap-maxnoofTAforMDT)) OF S1ap-TAC - -S1ap-CompletedCellinTAI ::= SEQUENCE (SIZE(1..s1ap-maxnoofCellinTAI)) OF S1ap-CompletedCellinTAI-Item - -S1ap-CompletedCellinTAI-Item ::= SEQUENCE{ - eCGI S1ap-EUTRAN-CGI, - -- iE-Extensions ProtocolExtensionContainer { {CompletedCellinTAI-Item-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TBCD-STRING ::= OCTET STRING (SIZE (3)) - -S1ap-TargetID ::= CHOICE { - targeteNB-ID S1ap-TargeteNB-ID, - targetRNC-ID S1ap-TargetRNC-ID, - cGI S1ap-CGI, - ... -} - -S1ap-TargeteNB-ID ::= SEQUENCE { - global-ENB-ID S1ap-Global-ENB-ID, - selected-TAI S1ap-TAI, - -- iE-Extensions ProtocolExtensionContainer { {TargeteNB-ID-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TargetRNC-ID ::= SEQUENCE { - lAI S1ap-LAI, - rAC S1ap-RAC OPTIONAL, - rNC-ID S1ap-RNC-ID, - extendedRNC-ID S1ap-ExtendedRNC-ID OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { {TargetRNC-ID-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TargeteNB-ToSourceeNB-TransparentContainer ::= SEQUENCE { - rRC-Container S1ap-RRC-Container, - -- iE-Extensions ProtocolExtensionContainer { {TargeteNB-ToSourceeNB-TransparentContainer-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-Target-ToSource-TransparentContainer ::= OCTET STRING --- This IE includes a transparent container from the target RAN node to the source RAN node. --- The octets of the OCTET STRING are coded according to the specifications of the target system. - -S1ap-TargetRNC-ToSourceRNC-TransparentContainer ::= OCTET STRING --- This is a dummy IE used only as a reference to the actual definition in relevant specification. - -S1ap-TargetBSS-ToSourceBSS-TransparentContainer ::= OCTET STRING --- This is a dummy IE used only as a reference to the actual definition in relevant specification. - -S1ap-ThresholdEventA2 ::= SEQUENCE { - measurementThreshold S1ap-MeasurementThresholdA2, - -- iE-Extensions ProtocolExtensionContainer { { ThresholdEventA2-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-Threshold-RSRP ::= INTEGER(0..97) - -S1ap-Threshold-RSRQ ::= INTEGER(0..34) - -S1ap-TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} - -S1ap-Time-UE-StayedInCell ::= INTEGER (0..4095) - -S1ap-TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) - -S1ap-TraceActivation ::= SEQUENCE { - e-UTRAN-Trace-ID S1ap-E-UTRAN-Trace-ID, - interfacesToTrace S1ap-InterfacesToTrace, - traceDepth S1ap-TraceDepth, - traceCollectionEntityIPAddress S1ap-TransportLayerAddress, - -- iE-Extensions ProtocolExtensionContainer { { TraceActivation-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-TraceDepth ::= ENUMERATED { - minimum, - medium, - s1ap-maximum, - minimumWithoutVendorSpecificExtension, - mediumWithoutVendorSpecificExtension, - s1ap-maximumWithoutVendorSpecificExtension, - ... -} - -S1ap-E-UTRAN-Trace-ID ::= OCTET STRING (SIZE (8)) - -S1ap-TrafficLoadReductionIndication ::= INTEGER (1..99) - -S1ap-TypeOfError ::= ENUMERATED { - not-understood, - missing, - ... -} - --- U - -S1ap-UEAggregateMaximumBitrate ::= SEQUENCE { - uEaggregateMaximumBitRateDL S1ap-BitRate, - uEaggregateMaximumBitRateUL S1ap-BitRate, - -- iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrates-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-UE-S1AP-IDs ::= CHOICE{ - uE-S1AP-ID-pair S1ap-UE-S1AP-ID-pair, - mME-UE-S1AP-ID S1ap-MME-UE-S1AP-ID, - ... -} - -S1ap-UE-S1AP-ID-pair ::= SEQUENCE{ - mME-UE-S1AP-ID S1ap-MME-UE-S1AP-ID, - eNB-UE-S1AP-ID S1ap-ENB-UE-S1AP-ID, - -- iE-Extensions ProtocolExtensionContainer { {S1ap-UE-S1AP-ID-pair-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-UE-associatedLogicalS1-ConnectionItem ::= SEQUENCE { - mME-UE-S1AP-ID S1ap-MME-UE-S1AP-ID OPTIONAL, - eNB-UE-S1AP-ID S1ap-ENB-UE-S1AP-ID OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { { UE-associatedLogicalS1-ConnectionItemExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-UEIdentityIndexValue ::= BIT STRING (SIZE (10)) - -S1ap-UE-HistoryInformation ::= SEQUENCE (SIZE(1..s1ap-maxnoofCells)) OF S1ap-LastVisitedCell-Item - -S1ap-UEPagingID ::= CHOICE { - s-TMSI S1ap-S-TMSI, - iMSI S1ap-IMSI, - ... -} - -S1ap-UERadioCapability ::= OCTET STRING - -S1ap-UESecurityCapabilities ::= SEQUENCE { - encryptionAlgorithms S1ap-EncryptionAlgorithms, - integrityProtectionAlgorithms S1ap-IntegrityProtectionAlgorithms, - -- iE-Extensions ProtocolExtensionContainer { { UESecurityCapabilities-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, -... -} - --- V --- W - -S1ap-WarningAreaList ::= CHOICE { - cellIDList S1ap-ECGIList, - trackingAreaListforWarning S1ap-TAIListforWarning, - emergencyAreaIDList S1ap-EmergencyAreaIDList, - ... -} - - -S1ap-WarningType ::= OCTET STRING (SIZE (2)) - -S1ap-WarningSecurityInfo ::= OCTET STRING (SIZE (50)) - - -S1ap-WarningMessageContents ::= OCTET STRING (SIZE(1..9600)) - - --- X - - -S1ap-X2TNLConfigurationInfo ::= SEQUENCE { - eNBX2TransportLayerAddresses S1ap-ENBX2TLAs, - -- iE-Extensions ProtocolExtensionContainer { { X2TNLConfigurationInfo-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-ENBX2ExtTLAs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofeNBX2ExtTLAs)) OF S1ap-ENBX2ExtTLA - -S1ap-ENBX2ExtTLA ::= SEQUENCE { - iPsecTLA S1ap-TransportLayerAddress OPTIONAL, - gTPTLAa S1ap-ENBX2GTPTLAs OPTIONAL, - -- iE-Extensions ProtocolExtensionContainer { { ENBX2ExtTLA-ExtIEs} } OPTIONAL, - iE-Extensions S1ap-IE-Extensions OPTIONAL, - ... -} - -S1ap-ENBX2GTPTLAs ::= SEQUENCE (SIZE(1.. s1ap-maxnoofeNBX2GTPTLAs)) OF S1ap-TransportLayerAddress - --- Y --- Z - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU-Contents.asn b/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU-Contents.asn deleted file mode 100644 index 767466d745..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU-Contents.asn +++ /dev/null @@ -1,2409 +0,0 @@ - - --- ************************************************************** --- --- PDU definitions for S1AP. --- --- ************************************************************** - -S1AP-PDU-Contents { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Contents (1) } - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - - S1ap-UEAggregateMaximumBitrate, - S1ap-Cause, - S1ap-CellAccessMode, - S1ap-Cdma2000HORequiredIndication, - S1ap-Cdma2000HOStatus, - S1ap-Cdma2000OneXSRVCCInfo, - S1ap-Cdma2000OneXRAND, - S1ap-Cdma2000PDU, - S1ap-Cdma2000RATType, - S1ap-Cdma2000SectorID, - S1ap-EUTRANRoundTripDelayEstimationInfo, - S1ap-CNDomain, - S1ap-ConcurrentWarningMessageIndicator, - S1ap-CriticalityDiagnostics, - S1ap-CSFallbackIndicator, - S1ap-CSG-Id, - S1ap-CSG-IdList, - S1ap-CSGMembershipStatus, - S1ap-Data-Forwarding-Not-Possible, - S1ap-Direct-Forwarding-Path-Availability, - S1ap-Global-ENB-ID, - S1ap-EUTRAN-CGI, - S1ap-ENBname, - S1ap-ENB-StatusTransfer-TransparentContainer, - S1ap-ENB-UE-S1AP-ID, - S1ap-ExtendedRepetitionPeriod, - S1ap-GTP-TEID, - S1ap-GUMMEI, - S1ap-HandoverRestrictionList, - S1ap-HandoverType, - S1ap-LAI, - S1ap-LPPa-PDU, - S1ap-ManagementBasedMDTAllowed, - S1ap-MMEname, - S1ap-MMERelaySupportIndicator, - S1ap-MME-UE-S1AP-ID, - S1ap-MSClassmark2, - S1ap-MSClassmark3, - S1ap-NAS-PDU, - S1ap-NASSecurityParametersfromE-UTRAN, - S1ap-NASSecurityParameterstoE-UTRAN, - S1ap-OverloadResponse, - S1ap-PagingDRX, - S1ap-PagingPriority, - S1ap-PLMNidentity, - S1ap-RIMTransfer, - S1ap-RelativeMMECapacity, - S1ap-RequestType, - S1ap-E-RAB-ID, - S1ap-E-RABLevelQoSParameters, - S1ap-E-RABList, - S1ap-RelayNode-Indicator, - S1ap-Routing-ID, - S1ap-SecurityKey, - S1ap-SecurityContext, - S1ap-ServedGUMMEIs, - S1ap-SONConfigurationTransfer, - S1ap-Source-ToTarget-TransparentContainer, - S1ap-SourceBSS-ToTargetBSS-TransparentContainer, - S1ap-SourceeNB-ToTargeteNB-TransparentContainer, - S1ap-SourceRNC-ToTargetRNC-TransparentContainer, - S1ap-SubscriberProfileIDforRFP, - S1ap-SRVCCOperationPossible, - S1ap-SRVCCHOIndication, - S1ap-SupportedTAs, - S1ap-TAI, - S1ap-Target-ToSource-TransparentContainer, - S1ap-TargetBSS-ToSourceBSS-TransparentContainer, - S1ap-TargeteNB-ToSourceeNB-TransparentContainer, - S1ap-TargetID, - S1ap-TargetRNC-ToSourceRNC-TransparentContainer, - S1ap-TimeToWait, - S1ap-TraceActivation, - S1ap-TrafficLoadReductionIndication, - S1ap-E-UTRAN-Trace-ID, - S1ap-TransportLayerAddress, - S1ap-UEIdentityIndexValue, - S1ap-UEPagingID, - S1ap-UERadioCapability, - S1ap-UE-S1AP-IDs, - S1ap-UE-associatedLogicalS1-ConnectionItem, - S1ap-UESecurityCapabilities, - S1ap-S-TMSI, - S1ap-MessageIdentifier, - S1ap-SerialNumber, - S1ap-WarningAreaList, - S1ap-RepetitionPeriod, - S1ap-NumberofBroadcastRequest, - S1ap-WarningType, - S1ap-WarningSecurityInfo, - S1ap-DataCodingScheme, - S1ap-WarningMessageContents, - S1ap-BroadcastCompletedAreaList, - S1ap-RRC-Establishment-Cause, - S1ap-BroadcastCancelledAreaList, - S1ap-PS-ServiceNotAvailable, - S1ap-GUMMEIList, - S1ap-Correlation-ID, - S1ap-GWContextReleaseIndication, - S1ap-PrivacyIndicator -S1ap-FROM S1AP-IEs - - PrivateIE-Container{}, - ProtocolExtensionContainer{}, - ProtocolIE-Container{}, - ProtocolIE-ContainerList{}, - ProtocolIE-ContainerPair{}, - ProtocolIE-ContainerPairList{}, - ProtocolIE-SingleContainer{}, - S1AP-PRIVATE-IES, - S1AP-PROTOCOL-EXTENSION, - S1AP-PROTOCOL-IES, - S1AP-PROTOCOL-IES-PAIR -S1ap-FROM S1AP-Containers - - id-uEaggregateMaximumBitrate, - id-Cause, - id-CellAccessMode, - id-cdma2000HORequiredIndication, - id-cdma2000HOStatus, - id-cdma2000OneXSRVCCInfo, - id-cdma2000OneXRAND, - id-cdma2000PDU, - id-cdma2000RATType, - id-cdma2000SectorID, - id-EUTRANRoundTripDelayEstimationInfo, - id-CNDomain, - id-ConcurrentWarningMessageIndicator, - id-CriticalityDiagnostics, - id-CSFallbackIndicator, - id-CSG-Id, - id-CSG-IdList, - id-CSGMembershipStatus, - id-Data-Forwarding-Not-Possible, - id-DefaultPagingDRX, - id-Direct-Forwarding-Path-Availability, - id-Global-ENB-ID, - id-EUTRAN-CGI, - id-eNBname, - id-eNB-StatusTransfer-TransparentContainer, - id-eNB-UE-S1AP-ID, - id-GERANtoLTEHOInformationRes, - id-GUMMEI-ID, - id-HandoverRestrictionList, - id-HandoverType, - id-InitialContextSetup, - id-Inter-SystemInformationTransferTypeEDT, - id-Inter-SystemInformationTransferTypeMDT, - id-LPPa-PDU, - id-NAS-DownlinkCount, - id-ManagementBasedMDTAllowed, - id-MMEname, - id-MME-UE-S1AP-ID, - id-MSClassmark2, - id-MSClassmark3, - id-NAS-PDU, - id-NASSecurityParametersfromE-UTRAN, - id-NASSecurityParameterstoE-UTRAN, - id-OverloadResponse, - id-pagingDRX, - id-PagingPriority, - id-RelativeMMECapacity, - id-RequestType, - id-Routing-ID, - id-E-RABAdmittedItem, - id-E-RABAdmittedList, - id-E-RABDataForwardingItem, - id-E-RABFailedToModifyList, - id-E-RABFailedToReleaseList, - id-E-RABFailedToSetupItemHOReqAck, - id-E-RABFailedToSetupListBearerSURes, - id-E-RABFailedToSetupListCtxtSURes, - id-E-RABFailedToSetupListHOReqAck, - id-E-RABFailedToBeReleasedList, - id-E-RABModify, - id-E-RABModifyItemBearerModRes, - id-E-RABModifyListBearerModRes, - id-E-RABRelease, - id-E-RABReleaseItemBearerRelComp, - id-E-RABReleaseItemHOCmd, - id-E-RABReleaseListBearerRelComp, - id-E-RABReleaseIndication, - id-E-RABSetup, - id-E-RABSetupItemBearerSURes, - id-E-RABSetupItemCtxtSURes, - id-E-RABSetupListBearerSURes, - id-E-RABSetupListCtxtSURes, - id-E-RABSubjecttoDataForwardingList, - id-E-RABToBeModifiedItemBearerModReq, - id-E-RABToBeModifiedListBearerModReq, - id-E-RABToBeReleasedList, - id-E-RABReleasedList, - id-E-RABToBeSetupItemBearerSUReq, - id-E-RABToBeSetupItemCtxtSUReq, - id-E-RABToBeSetupItemHOReq, - id-E-RABToBeSetupListBearerSUReq, - id-E-RABToBeSetupListCtxtSUReq, - id-E-RABToBeSetupListHOReq, - id-E-RABToBeSwitchedDLItem, - id-E-RABToBeSwitchedDLList, - id-E-RABToBeSwitchedULList, - id-E-RABToBeSwitchedULItem, - id-E-RABtoReleaseListHOCmd, - id-SecurityKey, - id-SecurityContext, - id-ServedGUMMEIs, - id-SONConfigurationTransferECT, - id-SONConfigurationTransferMCT, - id-Source-ToTarget-TransparentContainer, - id-Source-ToTarget-TransparentContainer-Secondary, - id-SourceMME-UE-S1AP-ID, - id-SRVCCOperationPossible, - id-SRVCCHOIndication, - id-SubscriberProfileIDforRFP, - id-SupportedTAs, - id-S-TMSI, - id-TAI, - id-TAIItem, - id-TAIList, - id-Target-ToSource-TransparentContainer, - id-Target-ToSource-TransparentContainer-Secondary, - id-TargetID, - id-TimeToWait, - id-TraceActivation, - id-TrafficLoadReductionIndication, - id-E-UTRAN-Trace-ID, - id-UEIdentityIndexValue, - id-UEPagingID, - id-UERadioCapability, - id-UTRANtoLTEHOInformationRes, - id-UE-associatedLogicalS1-ConnectionListResAck, - id-UE-associatedLogicalS1-ConnectionItem, - id-UESecurityCapabilities, - id-UE-S1AP-IDs, - id-ResetType, - id-MessageIdentifier, - id-SerialNumber, - id-WarningAreaList, - id-RepetitionPeriod, - id-NumberofBroadcastRequest, - id-WarningType, - id-WarningSecurityInfo, - id-DataCodingScheme, - id-WarningMessageContents, - id-BroadcastCompletedAreaList, - id-BroadcastCancelledAreaList, - id-RRC-Establishment-Cause, - id-TraceCollectionEntityIPAddress, - s1ap-maxnoofTAIs, - s1ap-maxNrOfErrors, - s1ap-maxNrOfE-RABs, - s1ap-maxNrOfIndividualS1ConnectionsToReset, - s1ap-maxnoofEmergencyAreaID, - s1ap-maxnoofCellID, - s1ap-maxnoofTAIforWarning, - s1ap-maxnoofCellinTAI, - s1ap-maxnoofCellinEAI, - id-ExtendedRepetitionPeriod, - id-PS-ServiceNotAvailable, - id-RegisteredLAI, - id-GUMMEIList, - id-SourceMME-GUMMEI, - id-MME-UE-S1AP-ID-2, - id-GW-TransportLayerAddress, - id-RelayNode-Indicator, - id-Correlation-ID, - id-MMERelaySupportIndicator, - id-GWContextReleaseIndication, - id-PrivacyIndicator - - -S1ap-FROM S1AP-Constants; - --- ************************************************************** --- --- Common Container Lists --- --- ************************************************************** - -E-RAB-IE-ContainerList { S1AP-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, s1ap-maxNrOfE-RABs, {IEsSetParam} } -E-RAB-IE-ContainerPairList { S1AP-PROTOCOL-IES-PAIR : IEsSetParam } ::= ProtocolIE-ContainerPairList { 1, s1ap-maxNrOfE-RABs, {IEsSetParam} } -ProtocolError-IE-ContainerList { S1AP-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, s1ap-maxNrOfE-RABs, {IEsSetParam} } - --- ************************************************************** --- --- HANDOVER PREPARATION ELEMENTARY PROCEDURE --- --- ************************************************************** - -S1ap-Bearers-SubjectToStatusTransfer-ItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-Bearers-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE S1ap-Bearers-SubjectToStatusTransfer-Item PRESENCE mandatory }, - ... -} - -S1ap-E-RABInformationItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABInformationListItem CRITICALITY ignore TYPE S1ap-E-RABInformationListItem PRESENCE mandatory }, - ... -} - -S1ap-E-RABItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABItem CRITICALITY ignore TYPE S1ap-E-RABItem PRESENCE mandatory }, - ... -} - -S1ap-SONInformationReply-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - -- Extension for Release 9 to transfer Time synchronization information -- - {ID id-Time-Synchronization-Info CRITICALITY ignore EXTENSION S1ap-TimeSynchronizationInfo PRESENCE optional}, - ... -} - -S1ap-SONConfigurationTransfer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - -- Extension for Release 10 to transfer the IP addresses of the eNB initiating the ANR action -- - {ID id-x2TNLConfigurationInfo CRITICALITY ignore EXTENSION S1ap-X2TNLConfigurationInfo PRESENCE conditional - -- This IE shall be present if the SON Information IE contains the SON Information Request IE and the SON Information Request IE is set to “X2TNL Configuration Info” -- }, - ... -} - -S1ap-SourceeNB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-ServedGUMMEIsItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-SupportedTAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-S-TMSI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TimeSynchronizationInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TAI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TAI-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TAI-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TABasedMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CompletedCellinTAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TargeteNB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TargetRNC-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TargeteNB-ToSourceeNB-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-ThresholdEventA2-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-TraceActivation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - -- Extension for Rel-10 to support MDT -- - { ID id-MDTConfiguration CRITICALITY ignore EXTENSION S1ap-MDT-Configuration PRESENCE optional }, - ... -} - -S1ap-UEAggregate-MaximumBitrates-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-UE-S1AP-ID-pair-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-UE-associatedLogicalS1-ConnectionItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-UESecurityCapabilities-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-X2TNLConfigurationInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - -- Extension for Release 10 to transfer the IPsec and U-plane addresses during ANR action -- - {ID id-eNBX2ExtendedTransportLayerAddresses CRITICALITY ignore EXTENSION S1ap-ENBX2ExtTLAs PRESENCE optional}, - ... -} - -S1ap-ENBX2ExtTLA-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-AllocationAndRetentionPriority-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-Bearers-SubjectToStatusTransfer-ItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CancelledCellinEAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CancelledCellinTAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CellID-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CellID-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CellBasedMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-Cdma2000OneXSRVCCInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CellType-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CGI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CSG-IdList-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-COUNTvalue-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CompletedCellinEAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CriticalityDiagnostics-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-CriticalityDiagnostics-IE-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-EmergencyAreaID-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-EmergencyAreaID-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-ENB-StatusTransfer-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-E-RABInformationListItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-E-RABItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-E-RABQoSParameters-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-EUTRAN-CGI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-ForbiddenTAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-ForbiddenLAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-GBR-QosInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-GERAN-Cell-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-GlobalENB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-GUMMEI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-HandoverRestrictionList-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-ImmediateMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-LAI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-LastVisitedEUTRANCellInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-LoggedMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-MDT-Configuration-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-PeriodicReportingMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-RequestType-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-RIMTransfer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-SecurityContext-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-Bearers-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { { S1ap-Bearers-SubjectToStatusTransfer-ItemIEs } } - -S1ap-E-RABInformationList ::= SEQUENCE (SIZE (1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { { S1ap-E-RABInformationItemIEs } } - --- ************************************************************** --- --- Handover Required --- --- ************************************************************** - -S1ap-HandoverRequired ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-HandoverRequiredIEs} }, - ... -} - -S1ap-HandoverRequiredIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-HandoverType CRITICALITY reject TYPE S1ap-HandoverType PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-TargetID CRITICALITY reject TYPE S1ap-TargetID PRESENCE mandatory }| - { ID id-Direct-Forwarding-Path-Availability CRITICALITY ignore TYPE S1ap-Direct-Forwarding-Path-Availability PRESENCE optional }| - { ID id-SRVCCHOIndication CRITICALITY reject TYPE S1ap-SRVCCHOIndication PRESENCE optional }| - { ID id-Source-ToTarget-TransparentContainer CRITICALITY reject TYPE S1ap-Source-ToTarget-TransparentContainer PRESENCE mandatory }| - { ID id-Source-ToTarget-TransparentContainer-Secondary CRITICALITY reject TYPE S1ap-Source-ToTarget-TransparentContainer PRESENCE optional }| - { ID id-MSClassmark2 CRITICALITY reject TYPE S1ap-MSClassmark2 PRESENCE conditional }| - { ID id-MSClassmark3 CRITICALITY ignore TYPE S1ap-MSClassmark3 PRESENCE conditional }| - { ID id-CSG-Id CRITICALITY reject TYPE S1ap-CSG-Id PRESENCE optional }| - { ID id-CellAccessMode CRITICALITY reject TYPE S1ap-CellAccessMode PRESENCE optional }| - { ID id-PS-ServiceNotAvailable CRITICALITY ignore TYPE S1ap-PS-ServiceNotAvailable PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- Handover Command --- --- ************************************************************** - -S1ap-HandoverCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-HandoverCommandIEs} }, - ... -} - -S1ap-HandoverCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-HandoverType CRITICALITY reject TYPE S1ap-HandoverType PRESENCE mandatory } | - { ID id-NASSecurityParametersfromE-UTRAN CRITICALITY reject TYPE S1ap-NASSecurityParametersfromE-UTRAN PRESENCE conditional - -- This IE shall be present if HandoverType IE is set to value "LTEtoUTRAN" or "LTEtoGERAN" -- }| - { ID id-E-RABSubjecttoDataForwardingList CRITICALITY ignore TYPE S1ap-E-RABDataForwardingList PRESENCE optional } | - { ID id-E-RABtoReleaseListHOCmd CRITICALITY ignore TYPE S1ap-E-RABList PRESENCE optional } | - { ID id-Target-ToSource-TransparentContainer CRITICALITY reject TYPE S1ap-Target-ToSource-TransparentContainer PRESENCE mandatory }| - { ID id-Target-ToSource-TransparentContainer-Secondary CRITICALITY reject TYPE S1ap-Target-ToSource-TransparentContainer PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - -S1ap-E-RABDataForwardingList ::= E-RAB-IE-ContainerList { {S1ap-E-RABDataForwardingItemIEs} } - -S1ap-E-RABDataForwardingItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABDataForwardingItem CRITICALITY ignore TYPE S1ap-E-RABDataForwardingItem PRESENCE mandatory }, - ... -} - -S1ap-E-RABDataForwardingItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-E-RABList ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {S1ap-E-RABItemIEs} } - --- ************************************************************** --- --- Handover Preparation Failure --- --- ************************************************************** - -S1ap-HandoverPreparationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-HandoverPreparationFailureIEs} }, - ... -} - -S1ap-HandoverPreparationFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER RESOURCE ALLOCATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Request --- --- ************************************************************** - -S1ap-HandoverRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-HandoverRequestIEs} }, - ... -} - -S1ap-HandoverRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory}| - { ID id-HandoverType CRITICALITY reject TYPE S1ap-HandoverType PRESENCE mandatory}| - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory}| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE S1ap-UEAggregateMaximumBitrate PRESENCE mandatory}| - { ID id-E-RABToBeSetupListHOReq CRITICALITY reject TYPE S1ap-E-RABToBeSetupListHOReq PRESENCE mandatory}| - { ID id-Source-ToTarget-TransparentContainer CRITICALITY reject TYPE S1ap-Source-ToTarget-TransparentContainer PRESENCE mandatory}| - { ID id-UESecurityCapabilities CRITICALITY reject TYPE S1ap-UESecurityCapabilities PRESENCE mandatory}| - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE S1ap-HandoverRestrictionList PRESENCE optional}| - { ID id-TraceActivation CRITICALITY ignore TYPE S1ap-TraceActivation PRESENCE optional}| - { ID id-RequestType CRITICALITY ignore TYPE S1ap-RequestType PRESENCE optional}| - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE S1ap-SRVCCOperationPossible PRESENCE optional}| - { ID id-SecurityContext CRITICALITY reject TYPE S1ap-SecurityContext PRESENCE mandatory}| - { ID id-NASSecurityParameterstoE-UTRAN CRITICALITY reject TYPE S1ap-NASSecurityParameterstoE-UTRAN PRESENCE conditional - -- This IE shall be present if the Handover Type IE is set to the value "UTRANtoLTE" or "GERANtoLTE" --}| - { ID id-CSG-Id CRITICALITY reject TYPE S1ap-CSG-Id PRESENCE optional}| - { ID id-CSGMembershipStatus CRITICALITY ignore TYPE S1ap-CSGMembershipStatus PRESENCE optional}| - { ID id-GUMMEI-ID CRITICALITY ignore TYPE S1ap-GUMMEI PRESENCE optional}| - { ID id-MME-UE-S1AP-ID-2 CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE optional}| - { ID id-ManagementBasedMDTAllowed CRITICALITY ignore TYPE S1ap-ManagementBasedMDTAllowed PRESENCE optional}, - ... -} - -S1ap-E-RABToBeSetupListHOReq ::= E-RAB-IE-ContainerList { {S1ap-E-RABToBeSetupItemHOReqIEs} } - -S1ap-E-RABToBeSetupItemHOReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemHOReq CRITICALITY reject TYPE S1ap-E-RABToBeSetupItemHOReq PRESENCE mandatory }, - ... -} - -S1ap-E-RABToBeSetupItemHOReq-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - {ID id-Data-Forwarding-Not-Possible CRITICALITY ignore EXTENSION S1ap-Data-Forwarding-Not-Possible PRESENCE optional}, - ... -} - --- ************************************************************** --- --- Handover Request Acknowledge --- --- ************************************************************** - -S1ap-HandoverRequestAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-HandoverRequestAcknowledgeIEs} }, - ... -} - -S1ap-HandoverRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-E-RABAdmittedList CRITICALITY ignore TYPE S1ap-E-RABAdmittedList PRESENCE mandatory } | - { ID id-E-RABFailedToSetupListHOReqAck CRITICALITY ignore TYPE S1ap-E-RABFailedToSetupListHOReqAck PRESENCE optional } | - { ID id-Target-ToSource-TransparentContainer CRITICALITY reject TYPE S1ap-Target-ToSource-TransparentContainer PRESENCE mandatory }| - { ID id-CSG-Id CRITICALITY ignore TYPE S1ap-CSG-Id PRESENCE optional } | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - -S1ap-E-RABAdmittedList ::= E-RAB-IE-ContainerList { {S1ap-E-RABAdmittedItemIEs} } - -S1ap-E-RABAdmittedItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABAdmittedItem CRITICALITY ignore TYPE S1ap-E-RABAdmittedItem PRESENCE mandatory }, - ... -} - -S1ap-E-RABAdmittedItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S1ap-E-RABFailedToSetupListHOReqAck ::= E-RAB-IE-ContainerList { {S1ap-E-RABFailedToSetupItemHOReqAckIEs} } - -S1ap-E-RABFailedToSetupItemHOReqAckIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABFailedToSetupItemHOReqAck CRITICALITY ignore TYPE S1ap-E-RABFailedToSetupItemHOReqAck PRESENCE mandatory }, - ... -} - -S1ap-E-RABFailedToSetupItemHOReqAck ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - cause Cause, - iE-Extensions ProtocolExtensionContainer { { S1ap-E-RABFailedToSetupItemHOReqAckExtIEs} } OPTIONAL, - ... -} - -S1ap-E-RABFailedToSetupItemHOReqAckExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Handover Failure --- --- ************************************************************** - -S1ap-HandoverFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-HandoverFailureIEs} }, - ... -} - -S1ap-HandoverFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER NOTIFICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Notify --- --- ************************************************************** - -S1ap-HandoverNotify ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-HandoverNotifyIEs} }, - ... -} - -S1ap-HandoverNotifyIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE S1ap-EUTRAN-CGI PRESENCE mandatory}| - { ID id-TAI CRITICALITY ignore TYPE S1ap-TAI PRESENCE mandatory}, - ... -} - --- ************************************************************** --- --- PATH SWITCH REQUEST ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Path Switch Request --- --- ************************************************************** - -S1ap-PathSwitchRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-PathSwitchRequestIEs} }, - ... -} - -S1ap-PathSwitchRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory}| - { ID id-E-RABToBeSwitchedDLList CRITICALITY reject TYPE S1ap-E-RABToBeSwitchedDLList PRESENCE mandatory}| - { ID id-SourceMME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory}| - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE S1ap-EUTRAN-CGI PRESENCE mandatory}| - { ID id-TAI CRITICALITY ignore TYPE S1ap-TAI PRESENCE mandatory}| - { ID id-UESecurityCapabilities CRITICALITY ignore TYPE S1ap-UESecurityCapabilities PRESENCE mandatory}| - { ID id-CSG-Id CRITICALITY ignore TYPE S1ap-CSG-Id PRESENCE optional}| - { ID id-CellAccessMode CRITICALITY ignore TYPE S1ap-CellAccessMode PRESENCE optional}| - { ID id-SourceMME-GUMMEI CRITICALITY ignore TYPE S1ap-GUMMEI PRESENCE optional}, - ... -} - -S1ap-E-RABToBeSwitchedDLList ::= E-RAB-IE-ContainerList { {S1ap-E-RABToBeSwitchedDLItemIEs} } - -S1ap-E-RABToBeSwitchedDLItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSwitchedDLItem CRITICALITY reject TYPE S1ap-E-RABToBeSwitchedDLItem PRESENCE mandatory }, - ... -} - -S1ap-E-RABToBeSwitchedDLItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Path Switch Request Acknowledge --- --- ************************************************************** - -S1ap-PathSwitchRequestAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-PathSwitchRequestAcknowledgeIEs} }, - ... -} - -S1ap-PathSwitchRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory}| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory}| - { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE S1ap-UEAggregateMaximumBitrate PRESENCE optional}| - { ID id-E-RABToBeSwitchedULList CRITICALITY ignore TYPE S1ap-E-RABToBeSwitchedULList PRESENCE optional}| - { ID id-E-RABToBeReleasedList CRITICALITY ignore TYPE S1ap-E-RABList PRESENCE optional}| - { ID id-SecurityContext CRITICALITY reject TYPE S1ap-SecurityContext PRESENCE mandatory}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional}| - { ID id-MME-UE-S1AP-ID-2 CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE optional}, - ... -} - -S1ap-E-RABToBeSwitchedULList ::= E-RAB-IE-ContainerList { {S1ap-E-RABToBeSwitchedULItemIEs} } - -S1ap-E-RABToBeSwitchedULItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSwitchedULItem CRITICALITY ignore TYPE S1ap-E-RABToBeSwitchedULItem PRESENCE mandatory }, - ... -} - -S1ap-E-RABToBeSwitchedULItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Path Switch Request Failure --- --- ************************************************************** - -S1ap-PathSwitchRequestFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-PathSwitchRequestFailureIEs} }, - ... -} - -S1ap-PathSwitchRequestFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER CANCEL ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Cancel --- --- ************************************************************** - -S1ap-HandoverCancel ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-HandoverCancelIEs} }, - ... -} - -S1ap-HandoverCancelIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- Handover Cancel Request Acknowledge --- --- ************************************************************** - -S1ap-HandoverCancelAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-HandoverCancelAcknowledgeIEs} }, - ... -} - -S1ap-HandoverCancelAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- E-RAB SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Setup Request --- --- ************************************************************** - -S1ap-E-RABSetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-E-RABSetupRequestIEs} }, - ... -} - -S1ap-E-RABSetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE S1ap-UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeSetupListBearerSUReq CRITICALITY reject TYPE S1ap-E-RABToBeSetupListBearerSUReq PRESENCE mandatory }, - ... -} - -S1ap-E-RABToBeSetupListBearerSUReq ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {S1ap-E-RABToBeSetupItemBearerSUReqIEs} } - -S1ap-E-RABToBeSetupItemBearerSUReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemBearerSUReq CRITICALITY reject TYPE S1ap-E-RABToBeSetupItemBearerSUReq PRESENCE mandatory }, - ... -} - -S1ap-E-RABToBeSetupItemBearerSUReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - { ID id-Correlation-ID CRITICALITY ignore EXTENSION S1ap-Correlation-ID PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- E-RAB Setup Response --- --- ************************************************************** - -S1ap-E-RABSetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-E-RABSetupResponseIEs} }, - ... -} - -S1ap-E-RABSetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABSetupListBearerSURes CRITICALITY ignore TYPE S1ap-E-RABSetupListBearerSURes PRESENCE optional }| - { ID id-E-RABFailedToSetupListBearerSURes CRITICALITY ignore TYPE S1ap-E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - - -S1ap-E-RABSetupListBearerSURes ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {S1ap-E-RABSetupItemBearerSUResIEs} } - -S1ap-E-RABSetupItemBearerSUResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABSetupItemBearerSURes CRITICALITY ignore TYPE S1ap-E-RABSetupItemBearerSURes PRESENCE mandatory }, - ... -} - -S1ap-E-RABSetupItemBearerSUResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- E-RAB MODIFY ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Modify Request --- --- ************************************************************** - -S1ap-E-RABModifyRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-E-RABModifyRequestIEs} }, - ... -} - -S1ap-E-RABModifyRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE S1ap-UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeModifiedListBearerModReq CRITICALITY reject TYPE S1ap-E-RABToBeModifiedListBearerModReq PRESENCE mandatory }, - ... -} - -S1ap-E-RABToBeModifiedListBearerModReq ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {S1ap-E-RABToBeModifiedItemBearerModReqIEs} } - -S1ap-E-RABToBeModifiedItemBearerModReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeModifiedItemBearerModReq CRITICALITY reject TYPE S1ap-E-RABToBeModifiedItemBearerModReq PRESENCE mandatory }, - ... -} - -S1ap-E-RABToBeModifyItemBearerModReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- E-RAB Modify Response --- --- ************************************************************** - -S1ap-E-RABModifyResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-E-RABModifyResponseIEs} }, - ... -} - -S1ap-E-RABModifyResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABModifyListBearerModRes CRITICALITY ignore TYPE S1ap-E-RABModifyListBearerModRes PRESENCE optional }| - { ID id-E-RABFailedToModifyList CRITICALITY ignore TYPE S1ap-E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - - -S1ap-E-RABModifyListBearerModRes ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {S1ap-E-RABModifyItemBearerModResIEs} } - -S1ap-E-RABModifyItemBearerModResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABModifyItemBearerModRes CRITICALITY ignore TYPE S1ap-E-RABModifyItemBearerModRes PRESENCE mandatory }, - ... -} - -S1ap-E-RABModifyItemBearerModResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- E-RAB RELEASE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Release Command --- --- ************************************************************** - -S1ap-E-RABReleaseCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-E-RABReleaseCommandIEs} }, - ... -} - -S1ap-E-RABReleaseCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE S1ap-UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeReleasedList CRITICALITY ignore TYPE S1ap-E-RABList PRESENCE mandatory }| - { ID id-NAS-PDU CRITICALITY ignore TYPE S1ap-NAS-PDU PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- E-RAB Release Response --- --- ************************************************************** - -S1ap-E-RABReleaseResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-E-RABReleaseResponseIEs } }, - ... -} - -S1ap-E-RABReleaseResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABReleaseListBearerRelComp CRITICALITY ignore TYPE S1ap-E-RABReleaseListBearerRelComp PRESENCE optional }| - { ID id-E-RABFailedToReleaseList CRITICALITY ignore TYPE S1ap-E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - - -S1ap-E-RABReleaseListBearerRelComp ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {S1ap-E-RABReleaseItemBearerRelCompIEs} } - -S1ap-E-RABReleaseItemBearerRelCompIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABReleaseItemBearerRelComp CRITICALITY ignore TYPE S1ap-E-RABReleaseItemBearerRelComp PRESENCE mandatory }, - ... -} - -S1ap-E-RABReleaseItemBearerRelCompExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- E-RAB RELEASE INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Release Indication --- --- ************************************************************** - -S1ap-E-RABReleaseIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-E-RABReleaseIndicationIEs} }, - ... -} - -S1ap-E-RABReleaseIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABReleasedList CRITICALITY ignore TYPE S1ap-E-RABList PRESENCE mandatory }, - ... -} --- ************************************************************** --- --- INITIAL CONTEXT SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Initial Context Setup Request --- --- ************************************************************** - -S1ap-InitialContextSetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-InitialContextSetupRequestIEs} }, - ... -} - -S1ap-InitialContextSetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory}| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory}| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE S1ap-UEAggregateMaximumBitrate PRESENCE mandatory}| - { ID id-E-RABToBeSetupListCtxtSUReq CRITICALITY reject TYPE S1ap-E-RABToBeSetupListCtxtSUReq PRESENCE mandatory}| - { ID id-UESecurityCapabilities CRITICALITY reject TYPE S1ap-UESecurityCapabilities PRESENCE mandatory}| - { ID id-SecurityKey CRITICALITY reject TYPE S1ap-SecurityKey PRESENCE mandatory}| - { ID id-TraceActivation CRITICALITY ignore TYPE S1ap-TraceActivation PRESENCE optional}| - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE S1ap-HandoverRestrictionList PRESENCE optional}| - { ID id-UERadioCapability CRITICALITY ignore TYPE S1ap-UERadioCapability PRESENCE optional}| - { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE S1ap-SubscriberProfileIDforRFP PRESENCE optional}| - { ID id-CSFallbackIndicator CRITICALITY reject TYPE S1ap-CSFallbackIndicator PRESENCE optional}| - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE S1ap-SRVCCOperationPossible PRESENCE optional}| - { ID id-CSGMembershipStatus CRITICALITY ignore TYPE S1ap-CSGMembershipStatus PRESENCE optional}| - { ID id-RegisteredLAI CRITICALITY ignore TYPE S1ap-LAI PRESENCE optional}| - { ID id-GUMMEI-ID CRITICALITY ignore TYPE S1ap-GUMMEI PRESENCE optional}| - { ID id-MME-UE-S1AP-ID-2 CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE optional}| - { ID id-ManagementBasedMDTAllowed CRITICALITY ignore TYPE S1ap-ManagementBasedMDTAllowed PRESENCE optional}, - ... -} - -S1ap-E-RABToBeSetupListCtxtSUReq ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {S1ap-E-RABToBeSetupItemCtxtSUReqIEs} } - -S1ap-E-RABToBeSetupItemCtxtSUReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemCtxtSUReq CRITICALITY reject TYPE S1ap-E-RABToBeSetupItemCtxtSUReq PRESENCE mandatory }, - ... -} - -S1ap-E-RABToBeSetupItemCtxtSUReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - { ID id-Correlation-ID CRITICALITY ignore EXTENSION S1ap-Correlation-ID PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- Initial Context Setup Response --- --- ************************************************************** - -S1ap-InitialContextSetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-InitialContextSetupResponseIEs} }, - ... -} - -S1ap-InitialContextSetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABSetupListCtxtSURes CRITICALITY ignore TYPE S1ap-E-RABSetupListCtxtSURes PRESENCE mandatory }| - { ID id-E-RABFailedToSetupListCtxtSURes CRITICALITY ignore TYPE S1ap-E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - -S1ap-E-RABSetupListCtxtSURes ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {S1ap-E-RABSetupItemCtxtSUResIEs} } - -S1ap-E-RABSetupItemCtxtSUResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABSetupItemCtxtSURes CRITICALITY ignore TYPE S1ap-E-RABSetupItemCtxtSURes PRESENCE mandatory }, - ... -} - -S1ap-E-RABSetupItemCtxtSUResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Initial Context Setup Failure --- --- ************************************************************** - -S1ap-InitialContextSetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-InitialContextSetupFailureIEs} }, - ... -} - -S1ap-InitialContextSetupFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- PAGING ELEMENTARY PROCEDURE --- --- ************************************************************** - - --- ************************************************************** --- --- Paging --- --- ************************************************************** - -S1ap-Paging ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-PagingIEs}}, - ... -} - -S1ap-PagingIEs S1AP-PROTOCOL-IES ::= { - { ID id-UEIdentityIndexValue CRITICALITY ignore TYPE S1ap-UEIdentityIndexValue PRESENCE mandatory}| - { ID id-UEPagingID CRITICALITY ignore TYPE S1ap-UEPagingID PRESENCE mandatory}| - { ID id-pagingDRX CRITICALITY ignore TYPE S1ap-PagingDRX PRESENCE optional}| - { ID id-CNDomain CRITICALITY ignore TYPE S1ap-CNDomain PRESENCE mandatory}| - { ID id-TAIList CRITICALITY ignore TYPE S1ap-TAIList PRESENCE mandatory}| - { ID id-CSG-IdList CRITICALITY ignore TYPE S1ap-CSG-IdList PRESENCE optional}| - { ID id-PagingPriority CRITICALITY ignore TYPE S1ap-PagingPriority PRESENCE optional}, - ... -} - -S1ap-TAIList::= SEQUENCE (SIZE(1.. s1ap-maxnoofTAIs)) OF ProtocolIE-SingleContainer {{S1ap-TAIItemIEs}} - -S1ap-TAIItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-TAIItem CRITICALITY ignore TYPE S1ap-TAIItem PRESENCE mandatory }, - ... -} - -S1ap-TAIItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- UE CONTEXT RELEASE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE CONTEXT RELEASE REQUEST --- --- ************************************************************** - -S1ap-UEContextReleaseRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-UEContextReleaseRequest-IEs}}, - ... -} - -S1ap-UEContextReleaseRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory}| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory}| - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory}| - { ID id-GWContextReleaseIndication CRITICALITY reject TYPE S1ap-GWContextReleaseIndication PRESENCE optional}, - ... -} - --- ************************************************************** --- --- UE Context Release Command --- --- ************************************************************** - -S1ap-UEContextReleaseCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-UEContextReleaseCommand-IEs}}, - ... -} - -S1ap-UEContextReleaseCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-UE-S1AP-IDs CRITICALITY reject TYPE S1ap-UE-S1AP-IDs PRESENCE mandatory} | - - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- UE Context Release Complete --- --- ************************************************************** - -S1ap-UEContextReleaseComplete ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-UEContextReleaseComplete-IEs}}, - ... -} - -S1ap-UEContextReleaseCompleteIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- UE CONTEXT MODIFICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE Context Modification Request --- --- ************************************************************** - -S1ap-UEContextModificationRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-UEContextModificationRequestIEs} }, - ... -} - -S1ap-UEContextModificationRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory}| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory}| - { ID id-SecurityKey CRITICALITY reject TYPE S1ap-SecurityKey PRESENCE optional}| - { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE S1ap-SubscriberProfileIDforRFP PRESENCE optional}| - { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE S1ap-UEAggregateMaximumBitrate PRESENCE optional}| - { ID id-CSFallbackIndicator CRITICALITY reject TYPE S1ap-CSFallbackIndicator PRESENCE optional}| - { ID id-UESecurityCapabilities CRITICALITY reject TYPE S1ap-UESecurityCapabilities PRESENCE optional}| - { ID id-CSGMembershipStatus CRITICALITY ignore TYPE S1ap-CSGMembershipStatus PRESENCE optional}| - { ID id-RegisteredLAI CRITICALITY ignore TYPE S1ap-LAI PRESENCE optional}, - ... -} --- ************************************************************** --- --- UE Context Modification Response --- --- ************************************************************** - -S1ap-UEContextModificationResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-UEContextModificationResponseIEs} }, - ... -} - -S1ap-UEContextModificationResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -}-- ************************************************************** --- --- UE Context Modification Failure --- --- ************************************************************** - -S1ap-UEContextModificationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-UEContextModificationFailureIEs} }, - ... -} - -S1ap-UEContextModificationFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- NAS TRANSPORT ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- DOWNLINK NAS TRANSPORT --- --- ************************************************************** - -S1ap-DownlinkNASTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-DownlinkNASTransport-IEs}}, - ... -} - -S1ap-DownlinkNASTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE S1ap-NAS-PDU PRESENCE mandatory} | - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE S1ap-HandoverRestrictionList PRESENCE optional} | - { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE S1ap-SubscriberProfileIDforRFP PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- INITIAL UE MESSAGE --- --- ************************************************************** - -S1ap-InitialUEMessage ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-InitialUEMessage-IEs}}, - ... -} - -S1ap-InitialUEMessageIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE S1ap-NAS-PDU PRESENCE mandatory} | - { ID id-TAI CRITICALITY reject TYPE S1ap-TAI PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE S1ap-EUTRAN-CGI PRESENCE mandatory} | - { ID id-RRC-Establishment-Cause CRITICALITY ignore TYPE S1ap-RRC-Establishment-Cause PRESENCE mandatory} | - { ID id-S-TMSI CRITICALITY reject TYPE S1ap-S-TMSI PRESENCE optional} | - { ID id-CSG-Id CRITICALITY reject TYPE S1ap-CSG-Id PRESENCE optional} | - { ID id-GUMMEI-ID CRITICALITY reject TYPE S1ap-GUMMEI PRESENCE optional} | - { ID id-CellAccessMode CRITICALITY reject TYPE S1ap-CellAccessMode PRESENCE optional} | - { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE S1ap-TransportLayerAddress PRESENCE optional} | - { ID id-RelayNode-Indicator CRITICALITY reject TYPE S1ap-RelayNode-Indicator PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- UPLINK NAS TRANSPORT --- --- ************************************************************** - -S1ap-UplinkNASTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-UplinkNASTransport-IEs}}, - ... -} - -S1ap-UplinkNASTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE S1ap-NAS-PDU PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE S1ap-EUTRAN-CGI PRESENCE mandatory} | - { ID id-TAI CRITICALITY ignore TYPE S1ap-TAI PRESENCE mandatory} | - { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE S1ap-TransportLayerAddress PRESENCE optional}, - ... -} --- ************************************************************** --- --- NAS NON DELIVERY INDICATION --- --- ************************************************************** - -S1ap-NASNonDeliveryIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-NASNonDeliveryIndication-IEs}}, - ... -} - -S1ap-NASNonDeliveryIndication-IEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY ignore TYPE S1ap-NAS-PDU PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- RESET ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Reset --- --- ************************************************************** - -S1ap-Reset ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-ResetIEs} }, - ... -} - -S1ap-ResetIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-ResetType CRITICALITY reject TYPE S1ap-ResetType PRESENCE mandatory }, - ... -} - -S1ap-UE-associatedLogicalS1-ConnectionListRes ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfIndividualS1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { S1ap-UE-associatedLogicalS1-ConnectionItemRes } } - -S1ap-UE-associatedLogicalS1-ConnectionItemRes S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionItem CRITICALITY reject TYPE S1ap-UE-associatedLogicalS1-ConnectionItem PRESENCE mandatory }, - ... -} - - --- ************************************************************** --- --- Reset Acknowledge --- --- ************************************************************** - -S1ap-ResetAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-ResetAcknowledgeIEs} }, - ... -} - -S1ap-ResetAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionListResAck CRITICALITY ignore TYPE S1ap-UE-associatedLogicalS1-ConnectionListResAck PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - -S1ap-UE-associatedLogicalS1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. s1ap-maxNrOfIndividualS1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { S1ap-UE-associatedLogicalS1-ConnectionItemResAck } } - -S1ap-UE-associatedLogicalS1-ConnectionItemResAck S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionItem CRITICALITY ignore TYPE S1ap-UE-associatedLogicalS1-ConnectionItem PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- ERROR INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Error Indication --- --- ************************************************************** - -S1ap-ErrorIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-ErrorIndicationIEs}}, - ... -} - -S1ap-ErrorIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-MME-UE-S1AP-ID PRESENCE optional } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE S1ap-ENB-UE-S1AP-ID PRESENCE optional } | - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE optional } | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional } , - ... -} - --- ************************************************************** --- --- S1 SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- S1 Setup Request --- --- ************************************************************** - -S1ap-S1SetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-S1SetupRequestIEs} }, - ... -} - -S1ap-S1SetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-Global-ENB-ID CRITICALITY reject TYPE S1ap-Global-ENB-ID PRESENCE mandatory}| - { ID id-eNBname CRITICALITY ignore TYPE S1ap-ENBname PRESENCE optional}| - { ID id-SupportedTAs CRITICALITY reject TYPE S1ap-SupportedTAs PRESENCE mandatory}| - { ID id-DefaultPagingDRX CRITICALITY ignore TYPE S1ap-PagingDRX PRESENCE mandatory}| - { ID id-CSG-IdList CRITICALITY reject TYPE S1ap-CSG-IdList PRESENCE optional}, - ... -} - --- ************************************************************** --- --- S1 Setup Response --- --- ************************************************************** - -S1ap-S1SetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-S1SetupResponseIEs} }, - ... -} - - -S1ap-S1SetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MMEname CRITICALITY ignore TYPE S1ap-MMEname PRESENCE optional}| - { ID id-ServedGUMMEIs CRITICALITY reject TYPE S1ap-ServedGUMMEIs PRESENCE mandatory}| - { ID id-RelativeMMECapacity CRITICALITY ignore TYPE S1ap-RelativeMMECapacity PRESENCE mandatory}| - { ID id-MMERelaySupportIndicator CRITICALITY ignore TYPE S1ap-MMERelaySupportIndicator PRESENCE optional}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional}, - ... -} - --- ************************************************************** --- --- S1 Setup Failure --- --- ************************************************************** - -S1ap-S1SetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-S1SetupFailureIEs} }, - ... -} - -S1ap-S1SetupFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE S1ap-TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Configuration Update --- --- ************************************************************** - -S1ap-ENBConfigurationUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-ENBConfigurationUpdateIEs} }, - ... -} - -S1ap-ENBConfigurationUpdateIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNBname CRITICALITY ignore TYPE S1ap-ENBname PRESENCE optional }| - { ID id-SupportedTAs CRITICALITY reject TYPE S1ap-SupportedTAs PRESENCE optional }| - { ID id-CSG-IdList CRITICALITY reject TYPE S1ap-CSG-IdList PRESENCE optional}| - { ID id-DefaultPagingDRX CRITICALITY ignore TYPE S1ap-PagingDRX PRESENCE optional }, - ... -} - --- ************************************************************** --- --- eNB Configuration Update Acknowledge --- --- ************************************************************** - -S1ap-ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-ENBConfigurationUpdateAcknowledgeIEs} }, - ... -} - - -S1ap-ENBConfigurationUpdateAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- eNB Configuration Update Failure --- --- ************************************************************** - -S1ap-ENBConfigurationUpdateFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-ENBConfigurationUpdateFailureIEs} }, - ... -} - -S1ap-ENBConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE S1ap-TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, -... -} - - --- ************************************************************** --- --- MME Configuration UPDATE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Configuration Update --- --- ************************************************************** - -S1ap-MMEConfigurationUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-MMEConfigurationUpdateIEs} }, - ... -} - -S1ap-MMEConfigurationUpdateIEs S1AP-PROTOCOL-IES ::= { - { ID id-MMEname CRITICALITY ignore TYPE S1ap-MMEname PRESENCE optional }| - { ID id-ServedGUMMEIs CRITICALITY reject TYPE S1ap-ServedGUMMEIs PRESENCE optional }| - { ID id-RelativeMMECapacity CRITICALITY reject TYPE S1ap-RelativeMMECapacity PRESENCE optional}, - ... -} - --- ************************************************************** --- --- MME Configuration Update Acknowledge --- --- ************************************************************** - -S1ap-MMEConfigurationUpdateAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-MMEConfigurationUpdateAcknowledgeIEs} }, - ... -} - - -S1ap-MMEConfigurationUpdateAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- MME Configuration Update Failure --- --- ************************************************************** - -S1ap-MMEConfigurationUpdateFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-MMEConfigurationUpdateFailureIEs} }, - ... -} - -S1ap-MMEConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE S1ap-TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- DOWNLINK S1 CDMA2000 TUNNELING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Downlink S1 CDMA2000 Tunneling --- --- ************************************************************** - -S1ap-DownlinkS1cdma2000tunneling ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-DownlinkS1cdma2000tunnelingIEs} }, - ... -} - -S1ap-DownlinkS1cdma2000tunnelingIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-E-RABSubjecttoDataForwardingList CRITICALITY ignore TYPE S1ap-E-RABDataForwardingList PRESENCE optional } | - { ID id-cdma2000HOStatus CRITICALITY ignore TYPE S1ap-Cdma2000HOStatus PRESENCE optional } | - { ID id-cdma2000RATType CRITICALITY reject TYPE S1ap-Cdma2000RATType PRESENCE mandatory } | - { ID id-cdma2000PDU CRITICALITY reject TYPE S1ap-Cdma2000PDU PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- UPLINK S1 CDMA2000 TUNNELING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Uplink S1 CDMA2000 Tunneling --- --- ************************************************************** - -S1ap-UplinkS1cdma2000tunneling ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-UplinkS1cdma2000tunnelingIEs} }, - ... -} - -S1ap-UplinkS1cdma2000tunnelingIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-cdma2000RATType CRITICALITY reject TYPE S1ap-Cdma2000RATType PRESENCE mandatory } | - { ID id-cdma2000SectorID CRITICALITY reject TYPE S1ap-Cdma2000SectorID PRESENCE mandatory } | - { ID id-cdma2000HORequiredIndication CRITICALITY ignore TYPE S1ap-Cdma2000HORequiredIndication PRESENCE optional } | - { ID id-cdma2000OneXSRVCCInfo CRITICALITY reject TYPE S1ap-Cdma2000OneXSRVCCInfo PRESENCE optional } | - { ID id-cdma2000OneXRAND CRITICALITY reject TYPE S1ap-Cdma2000OneXRAND PRESENCE optional } | - { ID id-cdma2000PDU CRITICALITY reject TYPE S1ap-Cdma2000PDU PRESENCE mandatory }| - { ID id-EUTRANRoundTripDelayEstimationInfo CRITICALITY ignore TYPE S1ap-EUTRANRoundTripDelayEstimationInfo PRESENCE optional}, - -- Extension for Release 9 to assist target HRPD access with the acquisition of the UE -- - ... -} - - --- ************************************************************** --- --- UE CAPABILITY INFO INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE Capability Info Indication --- --- ************************************************************** - -S1ap-UECapabilityInfoIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-UECapabilityInfoIndicationIEs} }, - ... -} - -S1ap-UECapabilityInfoIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-UERadioCapability CRITICALITY ignore TYPE S1ap-UERadioCapability PRESENCE mandatory } , - ... -} - --- ************************************************************** --- --- eNB STATUS TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Status Transfer --- --- ************************************************************** - -S1ap-ENBStatusTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-ENBStatusTransferIEs} }, - ... -} - -S1ap-ENBStatusTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-StatusTransfer-TransparentContainer CRITICALITY reject TYPE S1ap-ENB-StatusTransfer-TransparentContainer PRESENCE mandatory} , - ... -} - - --- ************************************************************** --- --- MME STATUS TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Status Transfer --- --- ************************************************************** - -S1ap-MMEStatusTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-MMEStatusTransferIEs} }, - ... -} - -S1ap-MMEStatusTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-StatusTransfer-TransparentContainer CRITICALITY reject TYPE S1ap-ENB-StatusTransfer-TransparentContainer PRESENCE mandatory} , - ... -} - - --- ************************************************************** --- --- TRACE ELEMENTARY PROCEDURES --- --- ************************************************************** --- ************************************************************** --- --- Trace Start --- --- ************************************************************** - -S1ap-TraceStart ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-TraceStartIEs} }, - ... -} - -S1ap-TraceStartIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-TraceActivation CRITICALITY ignore TYPE S1ap-TraceActivation PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- Trace Failure Indication --- --- ************************************************************** - -S1ap-TraceFailureIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-TraceFailureIndicationIEs} }, - ... -} - -S1ap-TraceFailureIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE S1ap-E-UTRAN-Trace-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- DEACTIVATE TRACE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- DEACTIVATE TRACE --- --- ************************************************************** - -S1ap-DeactivateTrace ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-DeactivateTraceIEs} }, - ... -} - -S1ap-DeactivateTraceIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE S1ap-E-UTRAN-Trace-ID PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- CELL TRAFFIC TRACE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- CELL TRAFFIC TRACE --- --- ************************************************************** - -S1ap-CellTrafficTrace ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-CellTrafficTraceIEs } }, - ... -} - -S1ap-CellTrafficTraceIEs S1AP-PROTOCOL-IES ::= { - {ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory}| - {ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory}| - {ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE S1ap-E-UTRAN-Trace-ID PRESENCE mandatory}| - {ID id-EUTRAN-CGI CRITICALITY ignore TYPE S1ap-EUTRAN-CGI PRESENCE mandatory}| - {ID id-TraceCollectionEntityIPAddress CRITICALITY ignore TYPE S1ap-TransportLayerAddress PRESENCE mandatory}| - {ID id-PrivacyIndicator CRITICALITY ignore TYPE S1ap-PrivacyIndicator PRESENCE optional}, - ... -} - --- ************************************************************** --- --- LOCATION ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- Location Reporting Control --- --- ************************************************************** - -S1ap-LocationReportingControl ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-LocationReportingControlIEs} }, - ... -} - -S1ap-LocationReportingControlIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-RequestType CRITICALITY ignore TYPE S1ap-RequestType PRESENCE mandatory } , - ... -} - --- ************************************************************** --- --- Location Report Failure Indication --- --- ************************************************************** - -S1ap-LocationReportingFailureIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-LocationReportingFailureIndicationIEs} }, - ... -} - -S1ap-LocationReportingFailureIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE S1ap-Cause PRESENCE mandatory}, - ... -} - --- ************************************************************** --- --- Location Report --- --- ************************************************************** - -S1ap-LocationReport ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { S1ap-LocationReportIEs} }, - ... -} - -S1ap-LocationReportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE S1ap-EUTRAN-CGI PRESENCE mandatory} | - { ID id-TAI CRITICALITY ignore TYPE S1ap-TAI PRESENCE mandatory} | - { ID id-RequestType CRITICALITY ignore TYPE S1ap-RequestType PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- OVERLOAD ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- Overload Start --- --- ************************************************************** - -S1ap-OverloadStart ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-OverloadStartIEs} }, - ... -} - -S1ap-OverloadStartIEs S1AP-PROTOCOL-IES ::= { - { ID id-OverloadResponse CRITICALITY reject TYPE S1ap-OverloadResponse PRESENCE mandatory}| - { ID id-GUMMEIList CRITICALITY ignore TYPE S1ap-GUMMEIList PRESENCE optional}| - { ID id-TrafficLoadReductionIndication CRITICALITY ignore TYPE S1ap-TrafficLoadReductionIndication PRESENCE optional}, - ... -} --- ************************************************************** --- --- Overload Stop --- --- ************************************************************** - -S1ap-OverloadStop ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-OverloadStopIEs} }, - ... -} - -S1ap-OverloadStopIEs S1AP-PROTOCOL-IES ::= { -{ ID id-GUMMEIList CRITICALITY ignore TYPE S1ap-GUMMEIList PRESENCE optional }, - ... -} --- ************************************************************** --- --- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Write-Replace Warning Request --- --- ************************************************************** - - -S1ap-WriteReplaceWarningRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-WriteReplaceWarningRequestIEs} }, - ... -} - -S1ap-WriteReplaceWarningRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE S1ap-MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE S1ap-SerialNumber PRESENCE mandatory }| - { ID id-WarningAreaList CRITICALITY ignore TYPE S1ap-WarningAreaList PRESENCE optional }| - { ID id-RepetitionPeriod CRITICALITY reject TYPE S1ap-RepetitionPeriod PRESENCE mandatory }| - { ID id-ExtendedRepetitionPeriod CRITICALITY reject TYPE S1ap-ExtendedRepetitionPeriod PRESENCE optional }| - { ID id-NumberofBroadcastRequest CRITICALITY reject TYPE S1ap-NumberofBroadcastRequest PRESENCE mandatory }| - { ID id-WarningType CRITICALITY ignore TYPE S1ap-WarningType PRESENCE optional }| - { ID id-WarningSecurityInfo CRITICALITY ignore TYPE S1ap-WarningSecurityInfo PRESENCE optional }| - { ID id-DataCodingScheme CRITICALITY ignore TYPE S1ap-DataCodingScheme PRESENCE optional }| - { ID id-WarningMessageContents CRITICALITY ignore TYPE S1ap-WarningMessageContents PRESENCE optional }| - { ID id-ConcurrentWarningMessageIndicator CRITICALITY reject TYPE S1ap-ConcurrentWarningMessageIndicator PRESENCE optional }, - ... -} --- ************************************************************** --- --- Write-Replace Warning Response --- --- ************************************************************** - -S1ap-WriteReplaceWarningResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-WriteReplaceWarningResponseIEs} }, - ... -} - -S1ap-WriteReplaceWarningResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE S1ap-MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE S1ap-SerialNumber PRESENCE mandatory }| - { ID id-BroadcastCompletedAreaList CRITICALITY ignore TYPE S1ap-BroadcastCompletedAreaList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- eNB DIRECT INFORMATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Direct Information Transfer --- --- ************************************************************** - -S1ap-ENBDirectInformationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ S1ap-ENBDirectInformationTransferIEs}}, - ... -} - -S1ap-ENBDirectInformationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-Inter-SystemInformationTransferTypeEDT CRITICALITY reject TYPE S1ap-Inter-SystemInformationTransferType PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- MME DIRECT INFORMATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Direct Information Transfer --- --- ************************************************************** - -S1ap-MMEDirectInformationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ S1ap-MMEDirectInformationTransferIEs}}, - ... -} - -S1ap-MMEDirectInformationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-Inter-SystemInformationTransferTypeMDT CRITICALITY reject TYPE S1ap-Inter-SystemInformationTransferType PRESENCE mandatory} , - ... -} --- ************************************************************** --- --- eNB CONFIGURATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Configuration Transfer --- --- ************************************************************** - -S1ap-ENBConfigurationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ S1ap-ENBConfigurationTransferIEs}}, - ... -} - -S1ap-ENBConfigurationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-SONConfigurationTransferECT CRITICALITY ignore TYPE S1ap-SONConfigurationTransfer PRESENCE optional} , - ... -} - --- ************************************************************** --- --- MME CONFIGURATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Configuration Transfer --- --- ************************************************************** - -S1ap-MMEConfigurationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ S1ap-MMEConfigurationTransferIEs}}, - ... -} - -S1ap-MMEConfigurationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-SONConfigurationTransferMCT CRITICALITY ignore TYPE S1ap-SONConfigurationTransfer PRESENCE optional} , - ... -} - --- ************************************************************** --- --- PRIVATE MESSAGE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Private Message --- --- ************************************************************** - -S1ap-PrivateMessage ::= SEQUENCE { - privateIEs PrivateIE-Container {{S1ap-PrivateMessageIEs}}, - ... -} - -S1ap-PrivateMessageIEs S1AP-PRIVATE-IES ::= { - ... -} - --- ************************************************************** --- --- Kill Request --- --- ************************************************************** - - -S1ap-KillRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-KillRequestIEs} }, - ... -} - -S1ap-KillRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE S1ap-MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE S1ap-SerialNumber PRESENCE mandatory }| - { ID id-WarningAreaList CRITICALITY ignore TYPE S1ap-WarningAreaList PRESENCE optional }, - ... -} - --- ************************************************************** --- --- Kill Response --- --- ************************************************************** - -S1ap-KillResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1ap-KillResponseIEs} }, - ... -} - -S1ap-KillResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE S1ap-MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE S1ap-SerialNumber PRESENCE mandatory }| - { ID id-BroadcastCancelledAreaList CRITICALITY ignore TYPE S1ap-BroadcastCancelledAreaList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE S1ap-CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- LPPA TRANSPORT ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- DOWNLINK UE ASSOCIATED LPPA TRANSPORT --- --- ************************************************************** - -S1ap-DownlinkUEAssociatedLPPaTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-DownlinkUEAssociatedLPPaTransport-IEs}}, - ... -} - -S1ap-DownlinkUEAssociatedLPPaTransport-IEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Routing-ID CRITICALITY reject TYPE S1ap-Routing-ID PRESENCE mandatory } | - { ID id-LPPa-PDU CRITICALITY reject TYPE S1ap-LPPa-PDU PRESENCE mandatory } , - ... -} - --- ************************************************************** --- --- UPLINK UE ASSOCIATED LPPA TRANSPORT --- --- ************************************************************** - -S1ap-UplinkUEAssociatedLPPaTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-UplinkUEAssociatedLPPaTransport-IEs}}, - ... -} - -S1ap-UplinkUEAssociatedLPPaTransport-IEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE S1ap-MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE S1ap-ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-Routing-ID CRITICALITY reject TYPE S1ap-Routing-ID PRESENCE mandatory} | - { ID id-LPPa-PDU CRITICALITY reject TYPE S1ap-LPPa-PDU PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- DOWNLINK NON UE ASSOCIATED LPPA TRANSPORT --- --- ************************************************************** - -S1ap-DownlinkNonUEAssociatedLPPaTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-DownlinkNonUEAssociatedLPPaTransport-IEs}}, - ... -} - -S1ap-DownlinkNonUEAssociatedLPPaTransport-IEs S1AP-PROTOCOL-IES ::= { - { ID id-Routing-ID CRITICALITY reject TYPE S1ap-Routing-ID PRESENCE mandatory} | - { ID id-LPPa-PDU CRITICALITY reject TYPE S1ap-LPPa-PDU PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- UPLINK NON UE ASSOCIATED LPPA TRANSPORT --- --- ************************************************************** - -S1ap-UplinkNonUEAssociatedLPPaTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{S1ap-UplinkNonUEAssociatedLPPaTransport-IEs}}, - ... -} - -S1ap-UplinkNonUEAssociatedLPPaTransport-IEs S1AP-PROTOCOL-IES ::= { - { ID id-Routing-ID CRITICALITY reject TYPE S1ap-Routing-ID PRESENCE mandatory} | - { ID id-LPPa-PDU CRITICALITY reject TYPE S1ap-LPPa-PDU PRESENCE mandatory} , - ... -} - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU-Descriptions.asn b/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU-Descriptions.asn deleted file mode 100644 index 591410de06..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU-Descriptions.asn +++ /dev/null @@ -1,590 +0,0 @@ --- ************************************************************** --- --- Elementary Procedure definitions --- --- ************************************************************** - -S1AP-PDU-Descriptions { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Descriptions (0)} - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - S1ap-Criticality, - S1ap-ProcedureCode -FROM S1AP-CommonDataTypes - - S1ap-CellTrafficTrace, - S1ap-DeactivateTrace, - S1ap-DownlinkUEAssociatedLPPaTransport, - S1ap-DownlinkNASTransport, - S1ap-DownlinkNonUEAssociatedLPPaTransport, - S1ap-DownlinkS1cdma2000tunneling, - S1ap-ENBDirectInformationTransfer, - S1ap-ENBStatusTransfer, - S1ap-ENBConfigurationUpdate, - S1ap-ENBConfigurationUpdateAcknowledge, - S1ap-ENBConfigurationUpdateFailure, - S1ap-ErrorIndication, - S1ap-HandoverCancel, - S1ap-HandoverCancelAcknowledge, - S1ap-HandoverCommand, - S1ap-HandoverFailure, - S1ap-HandoverNotify, - S1ap-HandoverPreparationFailure, - S1ap-HandoverRequest, - S1ap-HandoverRequestAcknowledge, - S1ap-HandoverRequired, - S1ap-InitialContextSetupFailure, - S1ap-InitialContextSetupRequest, - S1ap-InitialContextSetupResponse, - S1ap-InitialUEMessage, - S1ap-KillRequest, - S1ap-KillResponse, - S1ap-LocationReportingControl, - S1ap-LocationReportingFailureIndication, - S1ap-LocationReport, - S1ap-MMEConfigurationUpdate, - S1ap-MMEConfigurationUpdateAcknowledge, - S1ap-MMEConfigurationUpdateFailure, - S1ap-MMEDirectInformationTransfer, - S1ap-MMEStatusTransfer, - S1ap-NASNonDeliveryIndication, - S1ap-OverloadStart, - S1ap-OverloadStop, - S1ap-Paging, - S1ap-PathSwitchRequest, - S1ap-PathSwitchRequestAcknowledge, - S1ap-PathSwitchRequestFailure, - S1ap-PrivateMessage, - S1ap-Reset, - S1ap-ResetAcknowledge, - S1ap-S1SetupFailure, - S1ap-S1SetupRequest, - S1ap-S1SetupResponse, - E-S1ap-RABModifyRequest, - E-S1ap-RABModifyResponse, - E-S1ap-RABReleaseCommand, - E-S1ap-RABReleaseResponse, - E-S1ap-RABReleaseIndication, - E-S1ap-RABSetupRequest, - E-S1ap-RABSetupResponse, - S1ap-TraceFailureIndication, - S1ap-TraceStart, - S1ap-UECapabilityInfoIndication, - S1ap-UEContextModificationFailure, - S1ap-UEContextModificationRequest, - S1ap-UEContextModificationResponse, - S1ap-UEContextReleaseCommand, - S1ap-UEContextReleaseComplete, - S1ap-UEContextReleaseRequest, - S1ap-UplinkUEAssociatedLPPaTransport, - S1ap-UplinkNASTransport, - S1ap-UplinkNonUEAssociatedLPPaTransport, - S1ap-UplinkS1cdma2000tunneling, - S1ap-WriteReplaceWarningRequest, - S1ap-WriteReplaceWarningResponse, - S1ap-ENBConfigurationTransfer, - S1ap-MMEConfigurationTransfer - -FROM S1AP-PDU-Contents - - id-CellTrafficTrace, - id-DeactivateTrace, - id-downlinkUEAssociatedLPPaTransport, - id-downlinkNASTransport, - id-downlinkNonUEAssociatedLPPaTransport, - id-DownlinkS1cdma2000tunneling, - id-eNBStatusTransfer, - id-ErrorIndication, - id-HandoverCancel, - id-HandoverNotification, - id-HandoverPreparation, - id-HandoverResourceAllocation, - id-InitialContextSetup, - id-initialUEMessage, - id-ENBConfigurationUpdate, - id-Kill, - id-LocationReportingControl, - id-LocationReportingFailureIndication, - id-LocationReport, - id-eNBDirectInformationTransfer, - id-MMEConfigurationUpdate, - id-MMEDirectInformationTransfer, - id-MMEStatusTransfer, - id-NASNonDeliveryIndication, - id-OverloadStart, - id-OverloadStop, - id-Paging, - id-PathSwitchRequest, - id-PrivateMessage, - id-Reset, - id-S1Setup, - id-E-RABModify, - id-E-RABRelease, - id-E-RABReleaseIndication, - id-E-RABSetup, - id-TraceFailureIndication, - id-TraceStart, - id-UECapabilityInfoIndication, - id-UEContextModification, - id-UEContextRelease, - id-UEContextReleaseRequest, - id-uplinkUEAssociatedLPPaTransport, - id-uplinkNASTransport, - id-uplinkNonUEAssociatedLPPaTransport, - id-UplinkS1cdma2000tunneling, - id-WriteReplaceWarning, - id-eNBConfigurationTransfer, - id-MMEConfigurationTransfer -FROM S1AP-Constants; - - --- ************************************************************** --- --- Interface Elementary Procedure Class --- --- ************************************************************** - -S1AP-ELEMENTARY-PROCEDURE ::= CLASS { - &InitiatingMessage , - &SuccessfulOutcome OPTIONAL, - &UnsuccessfulOutcome OPTIONAL, - &procedureCode ProcedureCode UNIQUE, - &criticality Criticality DEFAULT ignore -} -WITH SYNTAX { - INITIATING MESSAGE &InitiatingMessage - [SUCCESSFUL OUTCOME &SuccessfulOutcome] - [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] - PROCEDURE CODE &procedureCode - [CRITICALITY &criticality] -} - --- ************************************************************** --- --- Interface PDU Definition --- --- ************************************************************** - -S1AP-PDU ::= CHOICE { - initiatingMessage InitiatingMessage, - successfulOutcome SuccessfulOutcome, - unsuccessfulOutcome UnsuccessfulOutcome, - ... -} - -InitiatingMessage ::= SEQUENCE { - procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), - criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value S1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} - -SuccessfulOutcome ::= SEQUENCE { - procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), - criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value S1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} - -UnsuccessfulOutcome ::= SEQUENCE { - procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), - criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value S1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} - --- ************************************************************** --- --- Interface Elementary Procedure List --- --- ************************************************************** - -S1AP-ELEMENTARY-PROCEDURES S1AP-ELEMENTARY-PROCEDURE ::= { - S1AP-ELEMENTARY-PROCEDURES-CLASS-1 | - S1AP-ELEMENTARY-PROCEDURES-CLASS-2, - ... -} - - -S1AP-ELEMENTARY-PROCEDURES-CLASS-1 S1AP-ELEMENTARY-PROCEDURE ::= { - handoverPreparation | - handoverResourceAllocation | - pathSwitchRequest | - e-RABSetup | - e-RABModify | - e-RABRelease | - initialContextSetup | - handoverCancel | - kill | - reset | - s1Setup | - uEContextModification | - uEContextRelease | - eNBConfigurationUpdate | - mMEConfigurationUpdate | - writeReplaceWarning , - ... -} - -S1AP-ELEMENTARY-PROCEDURES-CLASS-2 S1AP-ELEMENTARY-PROCEDURE ::= { - handoverNotification | - e-RABReleaseIndication | - paging | - downlinkNASTransport | - initialUEMessage | - uplinkNASTransport | - errorIndication | - nASNonDeliveryIndication | - uEContextReleaseRequest | - downlinkS1cdma2000tunneling | - uplinkS1cdma2000tunneling | - uECapabilityInfoIndication | - eNBStatusTransfer | - mMEStatusTransfer | - deactivateTrace | - traceStart | - traceFailureIndication | - cellTrafficTrace | - locationReportingControl | - locationReportingFailureIndication | - locationReport | - overloadStart | - overloadStop | - eNBDirectInformationTransfer | - mMEDirectInformationTransfer | - eNBConfigurationTransfer | - mMEConfigurationTransfer | - privateMessage , - ..., - downlinkUEAssociatedLPPaTransport | - uplinkUEAssociatedLPPaTransport | - downlinkNonUEAssociatedLPPaTransport | - uplinkNonUEAssociatedLPPaTransport -} - --- ************************************************************** --- --- Interface Elementary Procedures --- --- ************************************************************** - -handoverPreparation S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverRequired - SUCCESSFUL OUTCOME HandoverCommand - UNSUCCESSFUL OUTCOME HandoverPreparationFailure - PROCEDURE CODE id-HandoverPreparation - CRITICALITY reject -} - -handoverResourceAllocation S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverRequest - SUCCESSFUL OUTCOME HandoverRequestAcknowledge - UNSUCCESSFUL OUTCOME HandoverFailure - PROCEDURE CODE id-HandoverResourceAllocation - CRITICALITY reject -} - -handoverNotification S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverNotify - PROCEDURE CODE id-HandoverNotification - CRITICALITY ignore -} - -pathSwitchRequest S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE PathSwitchRequest - SUCCESSFUL OUTCOME PathSwitchRequestAcknowledge - UNSUCCESSFUL OUTCOME PathSwitchRequestFailure - PROCEDURE CODE id-PathSwitchRequest - CRITICALITY reject -} - -e-RABSetup S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE E-RABSetupRequest - SUCCESSFUL OUTCOME E-RABSetupResponse - PROCEDURE CODE id-E-RABSetup - CRITICALITY reject -} - -e-RABModify S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE E-RABModifyRequest - SUCCESSFUL OUTCOME E-RABModifyResponse - PROCEDURE CODE id-E-RABModify - CRITICALITY reject -} - -e-RABRelease S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE E-RABReleaseCommand - SUCCESSFUL OUTCOME E-RABReleaseResponse - PROCEDURE CODE id-E-RABRelease - CRITICALITY reject -} - -e-RABReleaseIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE E-RABReleaseIndication - PROCEDURE CODE id-E-RABReleaseIndication - CRITICALITY ignore -} - -initialContextSetup S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE InitialContextSetupRequest - SUCCESSFUL OUTCOME InitialContextSetupResponse - UNSUCCESSFUL OUTCOME InitialContextSetupFailure - PROCEDURE CODE id-InitialContextSetup - CRITICALITY reject -} - -uEContextReleaseRequest S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UEContextReleaseRequest - PROCEDURE CODE id-UEContextReleaseRequest - CRITICALITY ignore -} - -paging S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE Paging - PROCEDURE CODE id-Paging - CRITICALITY ignore -} - -downlinkNASTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DownlinkNASTransport - PROCEDURE CODE id-downlinkNASTransport - CRITICALITY ignore -} - -initialUEMessage S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE InitialUEMessage - PROCEDURE CODE id-initialUEMessage - CRITICALITY ignore -} - -uplinkNASTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UplinkNASTransport - PROCEDURE CODE id-uplinkNASTransport - CRITICALITY ignore -} -nASNonDeliveryIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE NASNonDeliveryIndication - PROCEDURE CODE id-NASNonDeliveryIndication - CRITICALITY ignore -} - -handoverCancel S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverCancel - SUCCESSFUL OUTCOME HandoverCancelAcknowledge - PROCEDURE CODE id-HandoverCancel - CRITICALITY reject -} - -reset S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE Reset - SUCCESSFUL OUTCOME ResetAcknowledge - PROCEDURE CODE id-Reset - CRITICALITY reject -} - -errorIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ErrorIndication - PROCEDURE CODE id-ErrorIndication - CRITICALITY ignore -} - -s1Setup S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE S1SetupRequest - SUCCESSFUL OUTCOME S1SetupResponse - UNSUCCESSFUL OUTCOME S1SetupFailure - PROCEDURE CODE id-S1Setup - CRITICALITY reject -} - -eNBConfigurationUpdate S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBConfigurationUpdate - SUCCESSFUL OUTCOME ENBConfigurationUpdateAcknowledge - UNSUCCESSFUL OUTCOME ENBConfigurationUpdateFailure - PROCEDURE CODE id-ENBConfigurationUpdate - CRITICALITY reject -} - -mMEConfigurationUpdate S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MMEConfigurationUpdate - SUCCESSFUL OUTCOME MMEConfigurationUpdateAcknowledge - UNSUCCESSFUL OUTCOME MMEConfigurationUpdateFailure - PROCEDURE CODE id-MMEConfigurationUpdate - CRITICALITY reject -} - -downlinkS1cdma2000tunneling S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DownlinkS1cdma2000tunneling - PROCEDURE CODE id-DownlinkS1cdma2000tunneling - CRITICALITY ignore -} - -uplinkS1cdma2000tunneling S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UplinkS1cdma2000tunneling - PROCEDURE CODE id-UplinkS1cdma2000tunneling - CRITICALITY ignore -} - -uEContextModification S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UEContextModificationRequest - SUCCESSFUL OUTCOME UEContextModificationResponse - UNSUCCESSFUL OUTCOME UEContextModificationFailure - - PROCEDURE CODE id-UEContextModification - CRITICALITY reject -} - -uECapabilityInfoIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UECapabilityInfoIndication - PROCEDURE CODE id-UECapabilityInfoIndication - CRITICALITY ignore -} - -uEContextRelease S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UEContextReleaseCommand - SUCCESSFUL OUTCOME UEContextReleaseComplete - PROCEDURE CODE id-UEContextRelease - CRITICALITY reject -} - -eNBStatusTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBStatusTransfer - PROCEDURE CODE id-eNBStatusTransfer - CRITICALITY ignore -} - -mMEStatusTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MMEStatusTransfer - PROCEDURE CODE id-MMEStatusTransfer - CRITICALITY ignore -} - -deactivateTrace S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DeactivateTrace - PROCEDURE CODE id-DeactivateTrace - CRITICALITY ignore -} - -traceStart S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE TraceStart - PROCEDURE CODE id-TraceStart - CRITICALITY ignore -} - -traceFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE TraceFailureIndication - PROCEDURE CODE id-TraceFailureIndication - CRITICALITY ignore -} -cellTrafficTrace S1AP-ELEMENTARY-PROCEDURE ::={ -INITIATING MESSAGE CellTrafficTrace -PROCEDURE CODE id-CellTrafficTrace -CRITICALITY ignore -} - -locationReportingControl S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE LocationReportingControl - PROCEDURE CODE id-LocationReportingControl - CRITICALITY ignore -} - -locationReportingFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE LocationReportingFailureIndication - PROCEDURE CODE id-LocationReportingFailureIndication - CRITICALITY ignore -} - -locationReport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE LocationReport - PROCEDURE CODE id-LocationReport - CRITICALITY ignore -} - -overloadStart S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE OverloadStart - PROCEDURE CODE id-OverloadStart - CRITICALITY ignore -} - -overloadStop S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE OverloadStop - PROCEDURE CODE id-OverloadStop - CRITICALITY reject -} - -writeReplaceWarning S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE WriteReplaceWarningRequest - SUCCESSFUL OUTCOME WriteReplaceWarningResponse - PROCEDURE CODE id-WriteReplaceWarning - CRITICALITY reject -} - -eNBDirectInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBDirectInformationTransfer - PROCEDURE CODE id-eNBDirectInformationTransfer - CRITICALITY ignore -} - -mMEDirectInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MMEDirectInformationTransfer - PROCEDURE CODE id-MMEDirectInformationTransfer - CRITICALITY ignore -} - -eNBConfigurationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBConfigurationTransfer - PROCEDURE CODE id-eNBConfigurationTransfer - CRITICALITY ignore -} - -mMEConfigurationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MMEConfigurationTransfer - PROCEDURE CODE id-MMEConfigurationTransfer - CRITICALITY ignore -} - - -privateMessage S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE PrivateMessage - PROCEDURE CODE id-PrivateMessage - CRITICALITY ignore -} - -kill S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE KillRequest - SUCCESSFUL OUTCOME KillResponse - PROCEDURE CODE id-Kill - CRITICALITY reject -} - -downlinkUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DownlinkUEAssociatedLPPaTransport - PROCEDURE CODE id-downlinkUEAssociatedLPPaTransport - CRITICALITY ignore -} - -uplinkUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UplinkUEAssociatedLPPaTransport - PROCEDURE CODE id-uplinkUEAssociatedLPPaTransport - CRITICALITY ignore -} -downlinkNonUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DownlinkNonUEAssociatedLPPaTransport - PROCEDURE CODE id-downlinkNonUEAssociatedLPPaTransport - CRITICALITY ignore -} - -uplinkNonUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UplinkNonUEAssociatedLPPaTransport - PROCEDURE CODE id-uplinkNonUEAssociatedLPPaTransport - CRITICALITY ignore -} - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU.asn b/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU.asn deleted file mode 100644 index f0042af1c1..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R10.5/S1AP-PDU.asn +++ /dev/null @@ -1,412 +0,0 @@ -S1AP-PDU { - itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) - eps-Access (21) modules (3) s1ap (1) version1 (1) -} - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - S1ap-Criticality, - S1ap-ProcedureCode, - S1ap-ProtocolIE-ID - -FROM S1AP-CommonDataTypes - - s1ap-maxProtocolIEs - -FROM S1AP-Constants; - -S1AP-PDU ::= CHOICE { - initiatingMessage S1ap-InitiatingMessage, - successfulOutcome S1ap-SuccessfulOutcome, - unsuccessfulOutcome S1ap-UnsuccessfulOutcome, - ... -} - -S1ap-InitiatingMessage ::= SEQUENCE { - procedureCode S1ap-ProcedureCode, - criticality S1ap-Criticality, - value ANY -} - -S1ap-SuccessfulOutcome ::= SEQUENCE { - procedureCode S1ap-ProcedureCode, - criticality S1ap-Criticality, - value ANY -} - -S1ap-UnsuccessfulOutcome ::= SEQUENCE { - procedureCode S1ap-ProcedureCode, - criticality S1ap-Criticality, - value ANY -} - -S1ap-HandoverRequired ::= SEQUENCE { - s1ap-HandoverRequired-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-HandoverCommand ::= SEQUENCE { - s1ap-HandoverCommand-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-HandoverPreparationFailure ::= SEQUENCE { - s1ap-HandoverPreparationFailure-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-HandoverRequest ::= SEQUENCE { - s1ap-HandoverRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-HandoverRequestAcknowledge ::= SEQUENCE { - s1ap-HandoverRequestAcknowledge-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-HandoverFailure ::= SEQUENCE { - s1ap-HandoverFailure-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-HandoverNotify ::= SEQUENCE { - s1ap-HandoverNotify-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-PathSwitchRequest ::= SEQUENCE { - s1ap-PathSwitchRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-PathSwitchRequestAcknowledge ::= SEQUENCE { - s1ap-PathSwitchRequestAcknowledge-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-PathSwitchRequestFailure ::= SEQUENCE { - s1ap-PathSwitchRequestFailure-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-E-RABSetupRequest ::= SEQUENCE { - s1ap-E-RABSetupRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-E-RABSetupResponse ::= SEQUENCE { - s1ap-E-RABSetupResponse-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-E-RABModifyRequest ::= SEQUENCE { - s1ap-E-RABModifyRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-E-RABModifyResponse ::= SEQUENCE { - s1ap-E-RABModifyResponse-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-E-RABReleaseIndication ::= SEQUENCE { - s1ap-E-RABReleaseIndication-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-E-RABReleaseCommand ::= SEQUENCE { - s1ap-E-RABReleaseCommand-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-E-RABReleaseResponse ::= SEQUENCE { - s1ap-E-RABReleaseResponse-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-InitialContextSetupRequest ::= SEQUENCE { - s1ap-InitialContextSetupRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-InitialContextSetupResponse ::= SEQUENCE { - s1ap-InitialContextSetupResponse-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-InitialContextSetupFailure ::= SEQUENCE { - s1ap-InitialContextSetupFailure-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UEContextReleaseRequest ::= SEQUENCE { - s1ap-UEContextReleaseRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-Paging ::= SEQUENCE { - s1ap-Paging-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-DownlinkNASTransport ::= SEQUENCE { - s1ap-DownlinkNASTransport-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-InitialUEMessage ::= SEQUENCE { - s1ap-InitialUEMessage-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UplinkNASTransport ::= SEQUENCE { - s1ap-UplinkNASTransport-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-NASNonDeliveryIndication ::= SEQUENCE { - s1ap-NASNonDeliveryIndication-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-HandoverCancel ::= SEQUENCE { - s1ap-HandoverCancel-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-HandoverCancelAcknowledge ::= SEQUENCE { - s1ap-HandoverCancelAcknowledge-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-Reset ::= SEQUENCE { - s1ap-Reset-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-ResetAcknowledge ::= SEQUENCE { - s1ap-ResetAcknowledge-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-S1SetupResponse ::= SEQUENCE { - s1ap-S1SetupResponse-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-S1SetupRequest ::= SEQUENCE { - s1ap-S1SetupRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-S1SetupFailure ::= SEQUENCE { - s1ap-S1SetupFailure-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-ErrorIndication ::= SEQUENCE { - s1ap-ErrorIndication-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-ENBConfigurationUpdate ::= SEQUENCE { - s1ap-ENBConfigurationUpdate-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - s1ap-ENBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-ENBConfigurationUpdateFailure ::= SEQUENCE { - s1ap-ENBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-MMEConfigurationUpdate ::= SEQUENCE { - s1ap-MMEConfigurationUpdate-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-MMEConfigurationUpdateAcknowledge ::= SEQUENCE { - s1ap-MMEConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-MMEConfigurationUpdateFailure ::= SEQUENCE { - s1ap-MMEConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-DownlinkS1cdma2000tunneling ::= SEQUENCE { - s1ap-DownlinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UplinkS1cdma2000tunneling ::= SEQUENCE { - s1ap-UplinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UEContextModificationRequest ::= SEQUENCE { - s1ap-UEContextModificationRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UEContextModificationResponse ::= SEQUENCE { - s1ap-UEContextModificationResponse-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UEContextModificationFailure ::= SEQUENCE { - s1ap-UEContextModificationFailure-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UECapabilityInfoIndication ::= SEQUENCE { - s1ap-UECapabilityInfoIndication-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UEContextReleaseCommand ::= SEQUENCE { - s1ap-UEContextReleaseCommand-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UEContextReleaseComplete ::= SEQUENCE { - s1ap-UEContextReleaseComplete-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-ENBStatusTransfer ::= SEQUENCE { - s1ap-ENBStatusTransfer-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-MMEStatusTransfer ::= SEQUENCE { - s1ap-MMEStatusTransfer-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-DeactivateTrace ::= SEQUENCE { - s1ap-DeactivateTrace-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-TraceStart ::= SEQUENCE { - s1ap-TraceStart-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-TraceFailureIndication ::= SEQUENCE { - s1ap-TraceFailureIndication-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-CellTrafficTrace ::= SEQUENCE { - s1ap-CellTrafficTrace-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-LocationReportingControl ::= SEQUENCE { - s1ap-LocationReportingControl-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-LocationReportingFailureIndication ::= SEQUENCE { - s1ap-LocationReportingFailureIndication-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-LocationReport ::= SEQUENCE { - s1ap-LocationReport-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-OverloadStart ::= SEQUENCE { - s1ap-OverloadStart-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-OverloadStop ::= SEQUENCE { - s1ap-OverloadStop-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-WriteReplaceWarningRequest ::= SEQUENCE { - s1ap-WriteReplaceWarningRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-WriteReplaceWarningResponse ::= SEQUENCE { - s1ap-WriteReplaceWarningResponse-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-ENBDirectInformationTransfer ::= SEQUENCE { - s1ap-ENBDirectInformationTransfer-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-MMEDirectInformationTransfer ::= SEQUENCE { - s1ap-MMEDirectInformationTransfer-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-ENBConfigurationTransfer ::= SEQUENCE { - s1ap-ENBConfigurationTransfer-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-MMEConfigurationTransfer ::= SEQUENCE { - s1ap-MMEConfigurationTransfer-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-PrivateMessage ::= SEQUENCE { - s1ap-PrivateMessage-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-KillRequest ::= SEQUENCE { - s1ap-KillRequest-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-KillResponse ::= SEQUENCE { - s1ap-KillResponse-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-DownlinkUEAssociatedLPPaTransport ::= SEQUENCE { - s1ap-DownlinkUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UplinkUEAssociatedLPPaTransport ::= SEQUENCE { - s1ap-UplinkUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-DownlinkNonUEAssociatedLPPaTransport ::= SEQUENCE { - s1ap-DownlinkNonUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-UplinkNonUEAssociatedLPPaTransport ::= SEQUENCE { - s1ap-UplinkNonUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..s1ap-maxProtocolIEs)) OF S1ap-IE, - ... -} - -S1ap-IE ::= SEQUENCE { - id S1ap-ProtocolIE-ID, - criticality S1ap-Criticality, - value ANY -} - -END \ No newline at end of file diff --git a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-CommonDataTypes.asn b/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-CommonDataTypes.asn deleted file mode 100644 index 3b86547186..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-CommonDataTypes.asn +++ /dev/null @@ -1,201 +0,0 @@ --- ************************************************************** --- --- Common definitions --- --- ************************************************************** - -S1AP-CommonDataTypes { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-CommonDataTypes (3) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -Criticality ::= ENUMERATED { reject, ignore, notify } - -Presence ::= ENUMERATED { optional, conditional, mandatory } - -PrivateIE-ID ::= CHOICE { - local INTEGER (0..65535), - global OBJECT IDENTIFIER -} - ---ProcedureCode ::= INTEGER (0..255) -ProcedureCode ::= INTEGER { -id-HandoverPreparation(0), -id-HandoverResourceAllocation(1), -id-HandoverNotification(2), -id-PathSwitchRequest(3), -id-HandoverCancel(4), -id-E-RABSetup(5), -id-E-RABModify(6), -id-E-RABRelease(7), -id-E-RABReleaseIndication(8), -id-InitialContextSetup(9), -id-Paging(10), -id-downlinkNASTransport(11), -id-initialUEMessage(12), -id-uplinkNASTransport(13), -id-Reset(14), -id-ErrorIndication(15), -id-NASNonDeliveryIndication(16), -id-S1Setup(17), -id-UEContextReleaseRequest(18), -id-DownlinkS1cdma2000tunneling(19), -id-UplinkS1cdma2000tunneling(20), -id-UEContextModification(21), -id-UECapabilityInfoIndication(22), -id-UEContextRelease(23), -id-eNBStatusTransfer(24), -id-MMEStatusTransfer(25), -id-DeactivateTrace(26), -id-TraceStart(27), -id-TraceFailureIndication(28), -id-ENBConfigurationUpdate(29), -id-MMEConfigurationUpdate(30), -id-LocationReportingControl(31), -id-LocationReportingFailureIndication(32), -id-LocationReport(33), -id-OverloadStart(34), -id-OverloadStop(35), -id-WriteReplaceWarning(36), -id-eNBDirectInformationTransfer(37), -id-MMEDirectInformationTransfer(38), -id-PrivateMessage(39), -id-eNBConfigurationTransfer(40), -id-MMEConfigurationTransfer(41), -id-CellTrafficTrace(42) -} (0..255) - -ProtocolExtensionID ::= INTEGER (0..65535) - -ProtocolIE-ID ::= INTEGER { -id-MME-UE-S1AP-ID(0), -id-HandoverType(1), -id-Cause(2), -id-SourceID(3), -id-TargetID (4), -id-eNB-UE-S1AP-ID(8), -id-E-RABSubjecttoDataForwardingList(12), -id-E-RABtoReleaseListHOCmd(13), -id-E-RABDataForwardingItem(14), -id-E-RABReleaseItemBearerRelComp(15), -id-E-RABToBeSetupListBearerSUReq(16), -id-E-RABToBeSetupItemBearerSUReq(17), -id-E-RABAdmittedList(18), -id-E-RABFailedToSetupListHOReqAck(19), -id-E-RABAdmittedItem(20), -id-E-RABFailedtoSetupItemHOReqAck(21), -id-E-RABToBeSwitchedDLList(22), -id-E-RABToBeSwitchedDLItem(23), -id-E-RABToBeSetupListCtxtSUReq(24), -id-TraceActivation(25), -id-NAS-PDU(26), -id-E-RABToBeSetupItemHOReq(27), -id-E-RABSetupListBearerSURes(28), -id-E-RABFailedToSetupListBearerSURes(29), -id-E-RABToBeModifiedListBearerModReq(30), -id-E-RABModifyListBearerModRes(31), -id-E-RABFailedToModifyList(32), -id-E-RABToBeReleasedList(33), -id-E-RABFailedToReleaseList(34), -id-E-RABItem(35), -id-E-RABToBeModifiedItemBearerModReq(36), -id-E-RABModifyItemBearerModRes(37), -id-E-RABReleaseItem(38), -id-E-RABSetupItemBearerSURes(39), -id-SecurityContext(40), -id-HandoverRestrictionList(41), -id-UEPagingID(43), -id-pagingDRX(44), -id-TAIList(46), -id-TAIItem(47), -id-E-RABFailedToSetupListCtxtSURes(48), -id-E-RABReleaseItemHOCmd(49), -id-E-RABSetupItemCtxtSURes(50), -id-E-RABSetupListCtxtSURes(51), -id-E-RABToBeSetupItemCtxtSUReq(52), -id-E-RABToBeSetupListHOReq(53), -id-GERANtoLTEHOInformationRes(55), -id-UTRANtoLTEHOInformationRes(57), -id-CriticalityDiagnostics(58), -id-Global-ENB-ID(59), -id-eNBname(60), -id-MMEname(61), -id-ServedPLMNs(63), -id-SupportedTAs(64), -id-TimeToWait(65), -id-uEaggregateMaximumBitrate(66), -id-TAI(67), -id-E-RABReleaseListBearerRelComp(69), -id-cdma2000PDU(70), -id-cdma2000RATType(71), -id-cdma2000SectorID(72), -id-SecurityKey(73), -id-UERadioCapability(74), -id-GUMMEI-ID(75), -id-E-RABInformationListItem(78), -id-Direct-Forwarding-Path-Availability(79), -id-UEIdentityIndexValue(80), -id-cdma2000HOStatus(83), -id-cdma2000HORequiredIndication(84), -id-E-UTRAN-Trace-ID(86), -id-RelativeMMECapacity(87), -id-SourceMME-UE-S1AP-ID(88), -id-Bearers-SubjectToStatusTransfer-Item(89), -id-eNB-StatusTransfer-TransparentContainer(90), -id-UE-associatedLogicalS1-ConnectionItem(91), -id-ResetType(92), -id-UE-associatedLogicalS1-ConnectionListResAck(93), -id-E-RABToBeSwitchedULItem(94), -id-E-RABToBeSwitchedULList(95), -id-S-TMSI(96), -id-cdma2000OneXRAND(97), -id-RequestType(98), -id-UE-S1AP-IDs(99), -id-EUTRAN-CGI(100), -id-OverloadResponse(101), -id-cdma2000OneXSRVCCInfo(102), -id-E-RABFailedToBeReleasedList(103), -id-Source-ToTarget-TransparentContainer(104), -id-ServedGUMMEIs(105), -id-SubscriberProfileIDforRFP(106), -id-UESecurityCapabilities(107), -id-CSFallbackIndicator(108), -id-CNDomain(109), -id-E-RABReleasedList(110), -id-MessageIdentifier(111), -id-SerialNumber(112), -id-WarningAreaList(113), -id-RepetitionPeriod(114), -id-NumberofBroadcastRequest(115), -id-WarningType(116), -id-WarningSecurityInfo(117), -id-DataCodingScheme(118), -id-WarningMessageContents(119), -id-BroadcastCompletedAreaList(120), -id-Inter-SystemInformationTransferTypeEDT(121), -id-Inter-SystemInformationTransferTypeMDT(122), -id-Target-ToSource-TransparentContainer(123), -id-SRVCCOperationPossible(124), -id-SRVCCHOIndication(125), -id-NAS-DownlinkCount(126), -id-CSG-Id(127), -id-CSG-IdList(128), -id-SONConfigurationTransferECT(129), -id-SONConfigurationTransferMCT(130), -id-TraceCollectionEntityIPAddress(131), -id-MSClassmark2(132), -id-MSClassmark3(133), -id-RRC-Establishment-Cause(134), -id-NASSecurityParametersfromE-UTRAN(135), -id-NASSecurityParameterstoE-UTRAN(136), -id-DefaultPagingDRX(137), -id-Source-ToTarget-TransparentContainer-Secondary(138), -id-Target-ToSource-TransparentContainer-Secondary(139) -} (0..65535) - -TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessfull-outcome } - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-Constants.asn b/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-Constants.asn deleted file mode 100644 index debbafd79d..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-Constants.asn +++ /dev/null @@ -1,249 +0,0 @@ --- ************************************************************** --- --- Constant definitions --- --- ************************************************************** - -S1AP-Constants { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Constants (4) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - - -IMPORTS - ProcedureCode, - ProtocolIE-ID - -FROM S1AP-CommonDataTypes; - - --- ************************************************************** --- --- Elementary Procedures --- --- ************************************************************** - -id-HandoverPreparation ProcedureCode ::= 0 -id-HandoverResourceAllocation ProcedureCode ::= 1 -id-HandoverNotification ProcedureCode ::= 2 -id-PathSwitchRequest ProcedureCode ::= 3 -id-HandoverCancel ProcedureCode ::= 4 -id-E-RABSetup ProcedureCode ::= 5 -id-E-RABModify ProcedureCode ::= 6 -id-E-RABRelease ProcedureCode ::= 7 -id-E-RABReleaseIndication ProcedureCode ::= 8 -id-InitialContextSetup ProcedureCode ::= 9 -id-Paging ProcedureCode ::= 10 -id-downlinkNASTransport ProcedureCode ::= 11 -id-initialUEMessage ProcedureCode ::= 12 -id-uplinkNASTransport ProcedureCode ::= 13 -id-Reset ProcedureCode ::= 14 -id-ErrorIndication ProcedureCode ::= 15 -id-NASNonDeliveryIndication ProcedureCode ::= 16 -id-S1Setup ProcedureCode ::= 17 -id-UEContextReleaseRequest ProcedureCode ::= 18 -id-DownlinkS1cdma2000tunneling ProcedureCode ::= 19 -id-UplinkS1cdma2000tunneling ProcedureCode ::= 20 -id-UEContextModification ProcedureCode ::= 21 -id-UECapabilityInfoIndication ProcedureCode ::= 22 -id-UEContextRelease ProcedureCode ::= 23 -id-eNBStatusTransfer ProcedureCode ::= 24 -id-MMEStatusTransfer ProcedureCode ::= 25 -id-DeactivateTrace ProcedureCode ::= 26 -id-TraceStart ProcedureCode ::= 27 -id-TraceFailureIndication ProcedureCode ::= 28 -id-ENBConfigurationUpdate ProcedureCode ::= 29 -id-MMEConfigurationUpdate ProcedureCode ::= 30 -id-LocationReportingControl ProcedureCode ::= 31 -id-LocationReportingFailureIndication ProcedureCode ::= 32 -id-LocationReport ProcedureCode ::= 33 -id-OverloadStart ProcedureCode ::= 34 -id-OverloadStop ProcedureCode ::= 35 -id-WriteReplaceWarning ProcedureCode ::= 36 -id-eNBDirectInformationTransfer ProcedureCode ::= 37 -id-MMEDirectInformationTransfer ProcedureCode ::= 38 -id-PrivateMessage ProcedureCode ::= 39 -id-eNBConfigurationTransfer ProcedureCode ::= 40 -id-MMEConfigurationTransfer ProcedureCode ::= 41 -id-CellTrafficTrace ProcedureCode ::= 42 - --- ************************************************************** --- --- Extension constants --- --- ************************************************************** - -maxPrivateIEs INTEGER ::= 65535 -maxProtocolExtensions INTEGER ::= 65535 -maxProtocolIEs INTEGER ::= 65535 --- ************************************************************** --- --- Lists --- --- ************************************************************** - -maxNrOfCSGs INTEGER ::= 256 -maxNrOfE-RABs INTEGER ::= 256 -maxnoofTAIs INTEGER ::= 256 -maxnoofTACs INTEGER ::= 256 -maxNrOfErrors INTEGER ::= 256 -maxnoofBPLMNs INTEGER ::= 6 -maxnoofPLMNsPerMME INTEGER ::= 32 -maxnoofEPLMNs INTEGER ::= 15 -maxnoofEPLMNsPlusOne INTEGER ::= 16 -maxnoofForbLACs INTEGER ::= 4096 -maxnoofForbTACs INTEGER ::= 4096 -maxNrOfIndividualS1ConnectionsToReset INTEGER ::= 256 -maxnoofCells INTEGER ::= 16 -maxnoofTAIforWarning INTEGER ::= 65535 -maxnoofCellID INTEGER ::= 65535 -maxnoofEmergencyAreaID INTEGER ::= 65535 -maxnoofCellinTAI INTEGER ::= 65535 -maxnoofCellinEAI INTEGER ::= 65535 -maxnoofeNBX2TLAs INTEGER ::= 2 -maxnoofRATs INTEGER ::= 8 -maxnoofGroupIDs INTEGER ::= 65535 -maxnoofMMECs INTEGER ::= 256 - - - - --- ************************************************************** --- --- IEs --- --- ************************************************************** - -id-MME-UE-S1AP-ID ProtocolIE-ID ::= 0 -id-HandoverType ProtocolIE-ID ::= 1 -id-Cause ProtocolIE-ID ::= 2 -id-SourceID ProtocolIE-ID ::= 3 -id-TargetID ProtocolIE-ID ::= 4 -id-eNB-UE-S1AP-ID ProtocolIE-ID ::= 8 -id-E-RABSubjecttoDataForwardingList ProtocolIE-ID ::= 12 -id-E-RABtoReleaseListHOCmd ProtocolIE-ID ::= 13 -id-E-RABDataForwardingItem ProtocolIE-ID ::= 14 -id-E-RABReleaseItemBearerRelComp ProtocolIE-ID ::= 15 -id-E-RABToBeSetupListBearerSUReq ProtocolIE-ID ::= 16 -id-E-RABToBeSetupItemBearerSUReq ProtocolIE-ID ::= 17 -id-E-RABAdmittedList ProtocolIE-ID ::= 18 -id-E-RABFailedToSetupListHOReqAck ProtocolIE-ID ::= 19 -id-E-RABAdmittedItem ProtocolIE-ID ::= 20 -id-E-RABFailedtoSetupItemHOReqAck ProtocolIE-ID ::= 21 -id-E-RABToBeSwitchedDLList ProtocolIE-ID ::= 22 -id-E-RABToBeSwitchedDLItem ProtocolIE-ID ::= 23 -id-E-RABToBeSetupListCtxtSUReq ProtocolIE-ID ::= 24 -id-TraceActivation ProtocolIE-ID ::= 25 -id-NAS-PDU ProtocolIE-ID ::= 26 -id-E-RABToBeSetupItemHOReq ProtocolIE-ID ::= 27 -id-E-RABSetupListBearerSURes ProtocolIE-ID ::= 28 -id-E-RABFailedToSetupListBearerSURes ProtocolIE-ID ::= 29 -id-E-RABToBeModifiedListBearerModReq ProtocolIE-ID ::= 30 -id-E-RABModifyListBearerModRes ProtocolIE-ID ::= 31 -id-E-RABFailedToModifyList ProtocolIE-ID ::= 32 -id-E-RABToBeReleasedList ProtocolIE-ID ::= 33 -id-E-RABFailedToReleaseList ProtocolIE-ID ::= 34 -id-E-RABItem ProtocolIE-ID ::= 35 -id-E-RABToBeModifiedItemBearerModReq ProtocolIE-ID ::= 36 -id-E-RABModifyItemBearerModRes ProtocolIE-ID ::= 37 -id-E-RABReleaseItem ProtocolIE-ID ::= 38 -id-E-RABSetupItemBearerSURes ProtocolIE-ID ::= 39 -id-SecurityContext ProtocolIE-ID ::= 40 -id-HandoverRestrictionList ProtocolIE-ID ::= 41 -id-UEPagingID ProtocolIE-ID ::= 43 -id-pagingDRX ProtocolIE-ID ::= 44 -id-TAIList ProtocolIE-ID ::= 46 -id-TAIItem ProtocolIE-ID ::= 47 -id-E-RABFailedToSetupListCtxtSURes ProtocolIE-ID ::= 48 -id-E-RABReleaseItemHOCmd ProtocolIE-ID ::= 49 -id-E-RABSetupItemCtxtSURes ProtocolIE-ID ::= 50 -id-E-RABSetupListCtxtSURes ProtocolIE-ID ::= 51 -id-E-RABToBeSetupItemCtxtSUReq ProtocolIE-ID ::= 52 -id-E-RABToBeSetupListHOReq ProtocolIE-ID ::= 53 -id-GERANtoLTEHOInformationRes ProtocolIE-ID ::= 55 -id-UTRANtoLTEHOInformationRes ProtocolIE-ID ::= 57 -id-CriticalityDiagnostics ProtocolIE-ID ::= 58 -id-Global-ENB-ID ProtocolIE-ID ::= 59 -id-eNBname ProtocolIE-ID ::= 60 -id-MMEname ProtocolIE-ID ::= 61 -id-ServedPLMNs ProtocolIE-ID ::= 63 -id-SupportedTAs ProtocolIE-ID ::= 64 -id-TimeToWait ProtocolIE-ID ::= 65 -id-uEaggregateMaximumBitrate ProtocolIE-ID ::= 66 -id-TAI ProtocolIE-ID ::= 67 -id-E-RABReleaseListBearerRelComp ProtocolIE-ID ::= 69 -id-cdma2000PDU ProtocolIE-ID ::= 70 -id-cdma2000RATType ProtocolIE-ID ::= 71 -id-cdma2000SectorID ProtocolIE-ID ::= 72 -id-SecurityKey ProtocolIE-ID ::= 73 -id-UERadioCapability ProtocolIE-ID ::= 74 -id-GUMMEI-ID ProtocolIE-ID ::= 75 -id-E-RABInformationListItem ProtocolIE-ID ::= 78 -id-Direct-Forwarding-Path-Availability ProtocolIE-ID ::= 79 -id-UEIdentityIndexValue ProtocolIE-ID ::= 80 -id-cdma2000HOStatus ProtocolIE-ID ::= 83 -id-cdma2000HORequiredIndication ProtocolIE-ID ::= 84 -id-E-UTRAN-Trace-ID ProtocolIE-ID ::= 86 -id-RelativeMMECapacity ProtocolIE-ID ::= 87 -id-SourceMME-UE-S1AP-ID ProtocolIE-ID ::= 88 -id-Bearers-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 89 -id-eNB-StatusTransfer-TransparentContainer ProtocolIE-ID ::= 90 -id-UE-associatedLogicalS1-ConnectionItem ProtocolIE-ID ::= 91 -id-ResetType ProtocolIE-ID ::= 92 -id-UE-associatedLogicalS1-ConnectionListResAck ProtocolIE-ID ::= 93 -id-E-RABToBeSwitchedULItem ProtocolIE-ID ::= 94 -id-E-RABToBeSwitchedULList ProtocolIE-ID ::= 95 -id-S-TMSI ProtocolIE-ID ::= 96 -id-cdma2000OneXRAND ProtocolIE-ID ::= 97 -id-RequestType ProtocolIE-ID ::= 98 -id-UE-S1AP-IDs ProtocolIE-ID ::= 99 -id-EUTRAN-CGI ProtocolIE-ID ::= 100 -id-OverloadResponse ProtocolIE-ID ::= 101 -id-cdma2000OneXSRVCCInfo ProtocolIE-ID ::= 102 -id-E-RABFailedToBeReleasedList ProtocolIE-ID ::= 103 -id-Source-ToTarget-TransparentContainer ProtocolIE-ID ::= 104 -id-ServedGUMMEIs ProtocolIE-ID ::= 105 -id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 106 -id-UESecurityCapabilities ProtocolIE-ID ::= 107 -id-CSFallbackIndicator ProtocolIE-ID ::= 108 -id-CNDomain ProtocolIE-ID ::= 109 -id-E-RABReleasedList ProtocolIE-ID ::= 110 -id-MessageIdentifier ProtocolIE-ID ::= 111 -id-SerialNumber ProtocolIE-ID ::= 112 -id-WarningAreaList ProtocolIE-ID ::= 113 -id-RepetitionPeriod ProtocolIE-ID ::= 114 -id-NumberofBroadcastRequest ProtocolIE-ID ::= 115 -id-WarningType ProtocolIE-ID ::= 116 -id-WarningSecurityInfo ProtocolIE-ID ::= 117 -id-DataCodingScheme ProtocolIE-ID ::= 118 -id-WarningMessageContents ProtocolIE-ID ::= 119 -id-BroadcastCompletedAreaList ProtocolIE-ID ::= 120 -id-Inter-SystemInformationTransferTypeEDT ProtocolIE-ID ::= 121 -id-Inter-SystemInformationTransferTypeMDT ProtocolIE-ID ::= 122 -id-Target-ToSource-TransparentContainer ProtocolIE-ID ::= 123 -id-SRVCCOperationPossible ProtocolIE-ID ::= 124 -id-SRVCCHOIndication ProtocolIE-ID ::= 125 -id-NAS-DownlinkCount ProtocolIE-ID ::= 126 -id-CSG-Id ProtocolIE-ID ::= 127 -id-CSG-IdList ProtocolIE-ID ::= 128 -id-SONConfigurationTransferECT ProtocolIE-ID ::= 129 -id-SONConfigurationTransferMCT ProtocolIE-ID ::= 130 -id-TraceCollectionEntityIPAddress ProtocolIE-ID ::= 131 -id-MSClassmark2 ProtocolIE-ID ::= 132 -id-MSClassmark3 ProtocolIE-ID ::= 133 -id-RRC-Establishment-Cause ProtocolIE-ID ::= 134 -id-NASSecurityParametersfromE-UTRAN ProtocolIE-ID ::= 135 -id-NASSecurityParameterstoE-UTRAN ProtocolIE-ID ::= 136 -id-DefaultPagingDRX ProtocolIE-ID ::= 137 -id-Source-ToTarget-TransparentContainer-Secondary ProtocolIE-ID ::= 138 -id-Target-ToSource-TransparentContainer-Secondary ProtocolIE-ID ::= 139 -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-IEs.asn b/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-IEs.asn deleted file mode 100644 index 6f76164b08..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-IEs.asn +++ /dev/null @@ -1,1401 +0,0 @@ --- ************************************************************** --- --- Information Element Definitions --- --- ************************************************************** - -S1AP-IEs { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-IEs (2) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - id-E-RABInformationListItem, - id-E-RABItem, - id-Bearers-SubjectToStatusTransfer-Item, - maxNrOfCSGs, - maxNrOfE-RABs, - maxNrOfErrors, - maxnoofBPLMNs, - maxnoofPLMNsPerMME, - maxnoofTACs, - maxnoofEPLMNs, - maxnoofEPLMNsPlusOne, - maxnoofForbLACs, - maxnoofForbTACs, - maxnoofCells, - maxnoofCellID, - maxnoofEmergencyAreaID, - maxnoofTAIforWarning, - maxnoofCellinTAI, - maxnoofCellinEAI, - maxnoofeNBX2TLAs, - maxnoofRATs, - maxnoofGroupIDs, - maxnoofMMECs, - maxProtocolExtensions, - maxNrOfIndividualS1ConnectionsToReset, - maxnoofTAIs, - maxProtocolIEs -FROM S1AP-Constants - - IE -FROM S1AP-PDU - - Criticality, - ProcedureCode, - ProtocolIE-ID, - ProtocolExtensionID, - TriggeringMessage -FROM S1AP-CommonDataTypes; - -IE-Extensions ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF IE --- A - - -AllocationAndRetentionPriority ::= SEQUENCE { - priorityLevel PriorityLevel, - pre-emptionCapability Pre-emptionCapability, - pre-emptionVulnerability Pre-emptionVulnerability, --- iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -AllocationAndRetentionPriority-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - --- B - -Bearers-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -Bearers-SubjectToStatusTransfer-Item ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - uL-COUNTvalue COUNTvalue, - dL-COUNTvalue COUNTvalue, - receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -Bearers-SubjectToStatusTransfer-ItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -BitRate ::= INTEGER (0..10000000000) - -BPLMNs ::= SEQUENCE (SIZE(1.. maxnoofBPLMNs)) OF PLMNidentity - -BroadcastCompletedAreaList ::= CHOICE { - cellID-Broadcast CellID-Broadcast, - tAI-Broadcast TAI-Broadcast, - emergencyAreaID-Broadcast EmergencyAreaID-Broadcast, - ... -} - - --- C - -Cause ::= CHOICE { - radioNetwork CauseRadioNetwork, - transport CauseTransport, - nas CauseNas, - protocol CauseProtocol, - misc CauseMisc, - ... -} - -CauseMisc ::= ENUMERATED { - control-processing-overload, - not-enough-user-plane-processing-resources, - hardware-failure, - om-intervention, - unspecified, - unknown-PLMN, -... -} - -CauseProtocol ::= ENUMERATED { - transfer-syntax-error, - abstract-syntax-error-reject, - abstract-syntax-error-ignore-and-notify, - message-not-compatible-with-receiver-state, - semantic-error, - abstract-syntax-error-falsely-constructed-message, - unspecified, - ... -} - -CauseRadioNetwork ::= ENUMERATED { - unspecified, - tx2relocoverall-expiry, - successful-handover, - release-due-to-eutran-generated-reason, - handover-cancelled, - partial-handover, - ho-failure-in-target-EPC-eNB-or-target-system, - ho-target-not-allowed, - tS1relocoverall-expiry, - tS1relocprep-expiry, - cell-not-available, - unknown-targetID, - no-radio-resources-available-in-target-cell, - unknown-mme-ue-s1ap-id, - unknown-enb-ue-s1ap-id, - unknown-pair-ue-s1ap-id, - handover-desirable-for-radio-reason, - time-critical-handover, - resource-optimisation-handover, - reduce-load-in-serving-cell, - user-inactivity, - radio-connection-with-ue-lost, - load-balancing-tau-required, - cs-fallback-triggered, - ue-not-available-for-ps-service, - radio-resources-not-available, - failure-in-radio-interface-procedure, - invalid-qos-combination, - interrat-redirection, - interaction-with-other-procedure, - unknown-E-RAB-ID, - multiple-E-RAB-ID-instances, - encryption-and-or-integrity-protection-algorithms-not-supported, - s1-intra-system-handover-triggered, - s1-inter-system-handover-triggered, - x2-handover-triggered, - ..., - redirection-towards-1xRTT, - not-supported-QCI-value - -} - -CauseTransport ::= ENUMERATED { - transport-resource-unavailable, - unspecified, - ... -} - -CauseNas ::= ENUMERATED { - normal-release, - authentication-failure, - detach, - unspecified, - ... -} - -CellIdentity ::= BIT STRING (SIZE (28)) - -CellID-Broadcast ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF CellID-Broadcast-Item - -CellID-Broadcast-Item ::= SEQUENCE { - eCGI EUTRAN-CGI, --- iE-Extensions ProtocolExtensionContainer { {CellID-Broadcast-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -CellID-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - -Cdma2000PDU ::= OCTET STRING - -Cdma2000RATType ::= ENUMERATED { - hRPD, - onexRTT, - ... -} - -Cdma2000SectorID ::= OCTET STRING - -Cdma2000HOStatus ::= ENUMERATED { - hOSuccess, - hOFailure, - ... -} - -Cdma2000HORequiredIndication ::= ENUMERATED { - true, - ... -} - -Cdma2000OneXSRVCCInfo ::= SEQUENCE { - cdma2000OneXMEID Cdma2000OneXMEID, - cdma2000OneXMSI Cdma2000OneXMSI, - cdma2000OneXPilot Cdma2000OneXPilot, --- iE-Extensions ProtocolExtensionContainer { {Cdma2000OneXSRVCCInfo-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -Cdma2000OneXSRVCCInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -Cdma2000OneXMEID ::= OCTET STRING - -Cdma2000OneXMSI ::= OCTET STRING - -Cdma2000OneXPilot ::= OCTET STRING - -Cdma2000OneXRAND ::= OCTET STRING - - -Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ...} - -CellType ::= SEQUENCE { - cell-Size Cell-Size, --- iE-Extensions ProtocolExtensionContainer { { CellType-ExtIEs}} OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -CellType-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -CGI ::= SEQUENCE { - pLMNidentity PLMNidentity, - lAC LAC, - cI CI, - rAC RAC OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { {CGI-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -CGI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -CI ::= OCTET STRING (SIZE (2)) - -CNDomain ::= ENUMERATED { - ps, - cs -} - -CSFallbackIndicator ::= ENUMERATED { - cs-fallback-required, - ..., - cs-fallback-high-priority -} - -CSG-Id ::= BIT STRING (SIZE (27)) - - -CSG-IdList ::= SEQUENCE (SIZE (1..maxNrOfCSGs)) OF CSG-IdList-Item - -CSG-IdList-Item ::= SEQUENCE { - cSG-Id CSG-Id, --- iE-Extensions ProtocolExtensionContainer { {CSG-IdList-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -CSG-IdList-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -COUNTvalue ::= SEQUENCE { - pDCP-SN PDCP-SN, - hFN HFN, --- iE-Extensions ProtocolExtensionContainer { {COUNTvalue-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -COUNTvalue-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -CriticalityDiagnostics ::= SEQUENCE { - procedureCode ProcedureCode OPTIONAL, - triggeringMessage TriggeringMessage OPTIONAL, - procedureCriticality Criticality OPTIONAL, - iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, --- iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-ExtIEs}} OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - ---CriticalityDiagnostics-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { --- ... ---} - -CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF CriticalityDiagnostics-IE-Item - -CriticalityDiagnostics-IE-Item ::= SEQUENCE { - iECriticality Criticality, - iE-ID ProtocolIE-ID, - typeOfError TypeOfError, --- iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-IE-Item-ExtIEs}} OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - ---CriticalityDiagnostics-IE-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { --- ... ---} - - --- D - -DataCodingScheme ::= BIT STRING (SIZE (8)) - -DL-Forwarding ::= ENUMERATED { - dL-Forwarding-proposed, - ... -} - -Direct-Forwarding-Path-Availability ::= ENUMERATED { - directPathAvailable, - ... -} - --- E - -E-RABToBeModifiedListBearerModReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeModifiedItemBearerModReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABLevelQoSParameters E-RABLevelQoSParameters, - nAS-PDU NAS-PDU, --- iE-Extensions ProtocolExtensionContainer { {E-RABToBeModifyItemBearerModReqExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABReleaseListBearerRelComp ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABReleaseItemBearerRelComp ::= SEQUENCE { - e-RAB-ID E-RAB-ID, --- iE-Extensions ProtocolExtensionContainer { {E-RABReleaseItemBearerRelCompExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABDataForwardingList ::= SEQUENCE (SIZE (0..maxNrOfE-RABs)) OF IE - -E-RABDataForwardingItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - dL-transportLayerAddress TransportLayerAddress OPTIONAL, - dL-gTP-TEID GTP-TEID OPTIONAL, - uL-TransportLayerAddress TransportLayerAddress OPTIONAL, - uL-GTP-TEID GTP-TEID OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { { E-RABDataForwardingItem-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSetupListCtxtSUReq ::= SEQUENCE (SIZE(1..maxNrOfE-RABs)) OF IE - -E-RABToBeSetupItemCtxtSUReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABlevelQoSParameters E-RABLevelQoSParameters, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - nAS-PDU NAS-PDU OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemCtxtSUReqExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABSetupListBearerSURes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABSetupItemBearerSURes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, --- iE-Extensions ProtocolExtensionContainer { {E-RABSetupItemBearerSUResExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABFailedtoSetupListHOReqAck ::= SEQUENCE (SIZE (0..maxNrOfE-RABs)) OF IE - -E-RABFailedToSetupItemHOReqAck ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - cause Cause, --- iE-Extensions ProtocolExtensionContainer { { E-RABFailedToSetupItemHOReqAckExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSetupListBearerSUReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeSetupItemBearerSUReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABlevelQoSParameters E-RABLevelQoSParameters, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - nAS-PDU NAS-PDU, --- iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemBearerSUReqExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABAdmittedList ::= SEQUENCE (SIZE (0..maxNrOfE-RABs)) OF IE - -E-RABAdmittedItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - dL-transportLayerAddress TransportLayerAddress OPTIONAL, - dL-gTP-TEID GTP-TEID OPTIONAL, - uL-TransportLayerAddress TransportLayerAddress OPTIONAL, - uL-GTP-TEID GTP-TEID OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { {E-RABAdmittedItem-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSwitchedDLList ::= SEQUENCE (SIZE (0..maxNrOfE-RABs)) OF IE - -E-RABToBeSwitchedDLItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, --- iE-Extensions ProtocolExtensionContainer { { E-RABToBeSwitchedDLItem-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSwitchedULList ::= SEQUENCE (SIZE (0..maxNrOfE-RABs)) OF IE - -E-RABToBeSwitchedULItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, --- iE-Extensions ProtocolExtensionContainer { { E-RABToBeSwitchedULItem-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABModifyListBearerModRes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABModifyItemBearerModRes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABSetupListCtxtSURes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABSetupItemCtxtSURes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, --- iE-Extensions ProtocolExtensionContainer { {E-RABSetupItemCtxtSUResExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSetupListHOReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeSetupItemHOReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - e-RABlevelQosParameters E-RABLevelQoSParameters, --- iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemHOReq-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ECGIList ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF EUTRAN-CGI - -EmergencyAreaIDList ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID - -EmergencyAreaID ::= OCTET STRING (SIZE (3)) - -EmergencyAreaID-Broadcast ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID-Broadcast-Item - -EmergencyAreaID-Broadcast-Item ::= SEQUENCE { - emergencyAreaID EmergencyAreaID, - completedCellinEAI CompletedCellinEAI, --- iE-Extensions ProtocolExtensionContainer { {EmergencyAreaID-Broadcast-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - ---EmergencyAreaID-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { --- ... ---} - - -CompletedCellinEAI ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CompletedCellinEAI-Item - -CompletedCellinEAI-Item ::= SEQUENCE { - eCGI EUTRAN-CGI, --- iE-Extensions ProtocolExtensionContainer { {CompletedCellinEAI-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -/* -CompletedCellinEAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -ENB-ID ::= CHOICE { - macroENB-ID BIT STRING (SIZE(20)), - homeENB-ID BIT STRING (SIZE(28)), - ... -} - -GERAN-Cell-ID ::= SEQUENCE { - lAI LAI, - rAC RAC, - cI CI, --- iE-Extensions ProtocolExtensionContainer { { GERAN-Cell-ID-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - ---GERAN-Cell-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { --- ... ---} - -Global-ENB-ID ::= SEQUENCE { - pLMNidentity PLMNidentity, - eNB-ID ENB-ID, - --iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - ---GlobalENB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { --- ... ---} - - -ENB-StatusTransfer-TransparentContainer ::= SEQUENCE { - bearers-SubjectToStatusTransfer-List Bearers-SubjectToStatusTransfer-List, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ENB-UE-S1AP-ID ::= INTEGER (0..16777215) - -ENBname ::= PrintableString (SIZE (1..150,...)) - -ENBX2TLAs ::= SEQUENCE (SIZE(1.. maxnoofeNBX2TLAs)) OF TransportLayerAddress - -EncryptionAlgorithms ::= BIT STRING (SIZE (16,...)) - -EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMNidentity -EventType ::= ENUMERATED { - direct, - change-of-serve-cell, - stop-change-of-serve-cell, - ... -} - -E-RAB-ID ::= INTEGER (0..15, ...) - ---E-RABInformationList ::= SEQUENCE (SIZE (1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { { E-RABInformationListIEs } } -E-RABInformationList ::= SEQUENCE (SIZE (1.. maxNrOfE-RABs)) OF IE - ---E-RABInformationListIEs S1AP-PROTOCOL-IES ::= { --- { ID id-E-RABInformationListItem CRITICALITY ignore TYPE E-RABInformationListItem PRESENCE mandatory }, --- ... ---} - -E-RABInformationListItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - dL-Forwarding DL-Forwarding OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { {E-RABInformationListItem-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -E-RABInformationListItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - ---E-RABList ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABItemIEs} } -E-RABList ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ANY - ---E-RABItemIEs S1AP-PROTOCOL-IES ::= { --- { ID id-E-RABItem CRITICALITY ignore TYPE E-RABItem PRESENCE mandatory }, --- ... ---} - -E-RABItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - cause Cause, --- iE-Extensions ProtocolExtensionContainer { {E-RABItem-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -E-RABItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - - - -E-RABLevelQoSParameters ::= SEQUENCE { - qCI QCI, - allocationRetentionPriority AllocationAndRetentionPriority, - gbrQosInformation GBR-QosInformation OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { {E-RABQoSParameters-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -E-RABQoSParameters-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - -EUTRAN-CGI ::= SEQUENCE { - pLMNidentity PLMNidentity, - cell-ID CellIdentity, --- iE-Extensions ProtocolExtensionContainer { {EUTRAN-CGI-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -EUTRAN-CGI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -ExtendedRNC-ID ::= INTEGER (4096..65535) - --- F - -ForbiddenInterRATs ::= ENUMERATED { - all, - geran, - utran, - cdma2000, - ... -} - -ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item - -ForbiddenTAs-Item ::= SEQUENCE { - pLMN-Identity PLMNidentity, - forbiddenTACs ForbiddenTACs, --- iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -ForbiddenTAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC - -ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item - -ForbiddenLAs-Item ::= SEQUENCE { - pLMN-Identity PLMNidentity, - forbiddenLACs ForbiddenLACs, --- iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -ForbiddenLAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC - --- G - -GBR-QosInformation ::= SEQUENCE { - e-RAB-MaximumBitrateDL BitRate, - e-RAB-MaximumBitrateUL BitRate, - e-RAB-GuaranteedBitrateDL BitRate, - e-RAB-GuaranteedBitrateUL BitRate, --- iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -GBR-QosInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - -GTP-TEID ::= OCTET STRING (SIZE (4)) - -GUMMEI ::= SEQUENCE { - pLMN-Identity PLMNidentity, - mME-Group-ID MME-Group-ID, - mME-Code MME-Code, --- iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -GUMMEI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - --- H - -HandoverRestrictionList ::= SEQUENCE { - servingPLMN PLMNidentity, - equivalentPLMNs EPLMNs OPTIONAL, - forbiddenTAs ForbiddenTAs OPTIONAL, - forbiddenLAs ForbiddenLAs OPTIONAL, - forbiddenInterRATs ForbiddenInterRATs OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -HandoverRestrictionList-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -HandoverType ::= ENUMERATED { - intralte, - ltetoutran, - ltetogeran, - utrantolte, - gerantolte, - ... -} - -HFN ::= INTEGER (0..1048575) - --- I - -Inter-SystemInformationTransferType ::= CHOICE { - rIMTransfer RIMTransfer, - ... -} - -IMSI ::= OCTET STRING (SIZE (3..8)) - -IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) - -InterfacesToTrace ::= BIT STRING (SIZE (8)) - - - --- J --- K --- L - - -LAC ::= OCTET STRING (SIZE (2)) - -LAI ::= SEQUENCE { - pLMNidentity PLMNidentity, - lAC LAC, --- iE-Extensions ProtocolExtensionContainer { {LAI-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -LAI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -LastVisitedCell-Item ::= CHOICE { - e-UTRAN-Cell LastVisitedEUTRANCellInformation, - uTRAN-Cell LastVisitedUTRANCellInformation, - gERAN-Cell LastVisitedGERANCellInformation, - ... -} -LastVisitedEUTRANCellInformation ::= SEQUENCE { - global-Cell-ID EUTRAN-CGI, - cellType CellType, - time-UE-StayedInCell Time-UE-StayedInCell, --- iE-Extensions ProtocolExtensionContainer { { LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -LastVisitedEUTRANCellInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ -LastVisitedUTRANCellInformation ::= OCTET STRING - -LastVisitedGERANCellInformation ::= CHOICE { - undefined NULL, - ... -} - -L3-Information ::= OCTET STRING - - --- M - -MessageIdentifier ::= BIT STRING (SIZE (16)) - -MMEname ::= PrintableString (SIZE (1..150,...)) - -MME-Group-ID ::= OCTET STRING (SIZE (2)) - -MME-Code ::= OCTET STRING (SIZE (1)) - -MME-UE-S1AP-ID ::= INTEGER (0..4294967295) -M-TMSI ::= OCTET STRING (SIZE (4)) - -MSClassmark2 ::= OCTET STRING -MSClassmark3 ::= OCTET STRING - --- N - -NAS-PDU ::= OCTET STRING - -NASSecurityParametersfromE-UTRAN ::= OCTET STRING - -NASSecurityParameterstoE-UTRAN ::= OCTET STRING - -NumberofBroadcastRequest ::= INTEGER (0..65535) - -NumberOfBroadcasts ::= INTEGER (0..65535) - --- O -OldBSS-ToNewBSS-Information ::= OCTET STRING - -OverloadAction ::= ENUMERATED { - reject-non-emergency-mo-dt, - reject-all-rrc-cr-signalling, - permit-emergency-sessions-only, - ... -} - -OverloadResponse ::= CHOICE { - overloadAction OverloadAction, - ... -} - - --- P - -PagingDRX ::= ENUMERATED { - v32, - v64, - v128, - v256, - ... - } - -PDCP-SN ::= INTEGER (0..4095) - -PLMNidentity ::= TBCD-STRING ---PLMNidentity ::= OCTET STRING (SIZE (3)) - -Pre-emptionCapability ::= ENUMERATED { - shall-not-trigger-pre-emption, - may-trigger-pre-emption -} - -Pre-emptionVulnerability ::= ENUMERATED { - not-pre-emptable, - pre-emptable -} - -PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) - - --- Q - -QCI ::= INTEGER (0..255) - --- R - -ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) - -RelativeMMECapacity ::= INTEGER (0..255) - -RAC ::= OCTET STRING (SIZE (1)) - - -RequestType ::= SEQUENCE { - eventType EventType, - reportArea ReportArea, --- iE-Extensions ProtocolExtensionContainer { { RequestType-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -/* -RequestType-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -ResetType ::= CHOICE { - s1-Interface ResetAll, - partOfS1-Interface UE-associatedLogicalS1-ConnectionListRes, - ... -} - -ResetAll ::= ENUMERATED { - reset-all, - ... -} - -RIMTransfer ::= SEQUENCE { - rIMInformation RIMInformation, - rIMRoutingAddress RIMRoutingAddress OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { { RIMTransfer-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, -... -} -/* -RIMTransfer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -RIMInformation ::= OCTET STRING - -RIMRoutingAddress ::= CHOICE { - gERAN-Cell-ID GERAN-Cell-ID, - ... -} - -ReportArea ::= ENUMERATED { - ecgi, - ... -} - -RepetitionPeriod ::= INTEGER (0..4095) - - -RNC-ID ::= INTEGER (0..4095) - -RRC-Container ::= OCTET STRING - -RRC-Establishment-Cause ::= ENUMERATED { - emergency, - highPriorityAccess, - mt-Access, - mo-Signalling, - mo-Data, - ... -} - --- S - - -SecurityKey ::= BIT STRING (SIZE(256)) - - - -SecurityContext ::= SEQUENCE { - nextHopChainingCount INTEGER (0..7), - nextHopParameter SecurityKey, --- iE-Extensions ProtocolExtensionContainer { { SecurityContext-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -/* -SecurityContext-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -SerialNumber ::= BIT STRING (SIZE (16)) - -SONInformation ::= CHOICE{ - sONInformationRequest SONInformationRequest, - sONInformationReply SONInformationReply, - ... -} - -SONInformationRequest ::= ENUMERATED { - x2TNL-Configuration-Info, - ... -} - -SONInformationReply ::= SEQUENCE { - x2TNLConfigurationInfo X2TNLConfigurationInfo OPTIONAL, --- iE-Extensions ProtocolExtensionContainer {{SONInformationReply-ExtIEs}} OPTIONAL, - iE-Extensions-Container IE-Extensions OPTIONAL, - ... -} -/* -SONInformationReply-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - -SONConfigurationTransfer ::= SEQUENCE { - targeteNB-ID TargeteNB-ID, - sourceeNB-ID SourceeNB-ID, - sONInformation SONInformation, --- iE-Extensions ProtocolExtensionContainer { { SONConfigurationTransfer-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, -... -} -/* -SONConfigurationTransfer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - - -Source-ToTarget-TransparentContainer ::= OCTET STRING - -SourceBSS-ToTargetBSS-TransparentContainer ::= OCTET STRING -SourceeNB-ID ::= SEQUENCE { - global-ENB-ID Global-ENB-ID, - selected-TAI TAI, --- iE-Extensions ProtocolExtensionContainer { {SourceeNB-ID-ExtIEs} } OPTIONAL - iE-Extensions IE-Extensions OPTIONAL -} -/* -SourceeNB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -SRVCCOperationPossible ::= ENUMERATED { - possible, - ... -} - -SRVCCHOIndication ::= ENUMERATED { - pSandCS, - cSonly, - ... -} - -SourceeNB-ToTargeteNB-TransparentContainer ::= SEQUENCE { - rRC-Container RRC-Container, - e-RABInformationList E-RABInformationList OPTIONAL, - targetCell-ID EUTRAN-CGI, - subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, - uE-HistoryInformation UE-HistoryInformation, --- iE-Extensions ProtocolExtensionContainer { {SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - -SourceRNC-ToTargetRNC-TransparentContainer ::= OCTET STRING - - -ServedGUMMEIs ::= SEQUENCE (SIZE (1.. maxnoofRATs)) OF ServedGUMMEIsItem - -ServedGUMMEIsItem ::= SEQUENCE { - servedPLMNs ServedPLMNs, - servedGroupIDs ServedGroupIDs, - servedMMECs ServedMMECs, --- iE-Extensions ProtocolExtensionContainer { {ServedGUMMEIsItem-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -ServedGUMMEIsItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -ServedGroupIDs ::= SEQUENCE (SIZE(1.. maxnoofGroupIDs)) OF MME-Group-ID -ServedMMECs ::= SEQUENCE (SIZE(1.. maxnoofMMECs)) OF MME-Code - -ServedPLMNs ::= SEQUENCE (SIZE(1.. maxnoofPLMNsPerMME)) OF PLMNidentity - -SubscriberProfileIDforRFP ::= INTEGER (1..256) - -SupportedTAs ::= SEQUENCE (SIZE(1.. maxnoofTACs)) OF SupportedTAs-Item - -SupportedTAs-Item ::= SEQUENCE { - tAC TAC, - broadcastPLMNs BPLMNs, --- iE-Extensions ProtocolExtensionContainer { {SupportedTAs-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -SupportedTAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -S-TMSI ::= SEQUENCE { - mMEC MME-Code, - m-TMSI M-TMSI, --- iE-Extensions ProtocolExtensionContainer { {S-TMSI-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -S-TMSI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - --- T - -TAC ::= OCTET STRING (SIZE (2)) - -TAIListforWarning ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI - -TAIList ::= SEQUENCE (SIZE(1..maxnoofTAIs)) OF IE - -TAIItem ::= SEQUENCE { - tAI TAI, --- iE-Extensions ProtocolExtensionContainer { {TAIItemExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TAI ::= SEQUENCE { - pLMNidentity PLMNidentity, - tAC TAC, --- iE-Extensions ProtocolExtensionContainer { {TAI-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -TAI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -TAI-Broadcast ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI-Broadcast-Item - -TAI-Broadcast-Item ::= SEQUENCE { - tAI TAI, - completedCellinTAI CompletedCellinTAI, --- iE-Extensions ProtocolExtensionContainer { {TAI-Broadcast-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -TAI-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -CompletedCellinTAI ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CompletedCellinTAI-Item - -CompletedCellinTAI-Item ::= SEQUENCE{ - eCGI EUTRAN-CGI, --- iE-Extensions ProtocolExtensionContainer { {CompletedCellinTAI-Item-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -CompletedCellinTAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -TBCD-STRING ::= OCTET STRING (SIZE (3)) - -TargetID ::= CHOICE { - targeteNB-ID TargeteNB-ID, - targetRNC-ID TargetRNC-ID, - cGI CGI, - ... -} - -TargeteNB-ID ::= SEQUENCE { - global-ENB-ID Global-ENB-ID, - selected-TAI TAI, --- iE-Extensions ProtocolExtensionContainer { {TargeteNB-ID-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -TargeteNB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -TargetRNC-ID ::= SEQUENCE { - lAI LAI, - rAC RAC OPTIONAL, - rNC-ID RNC-ID, - extendedRNC-ID ExtendedRNC-ID OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { {TargetRNC-ID-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -/* -TargetRNC-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - -TargeteNB-ToSourceeNB-TransparentContainer ::= SEQUENCE { - rRC-Container RRC-Container, --- iE-Extensions ProtocolExtensionContainer { {TargeteNB-ToSourceeNB-TransparentContainer-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -TargeteNB-ToSourceeNB-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -Target-ToSource-TransparentContainer ::= OCTET STRING -TargetRNC-ToSourceRNC-TransparentContainer ::= OCTET STRING -TargetBSS-ToSourceBSS-TransparentContainer ::= OCTET STRING - -TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} - -Time-UE-StayedInCell ::= INTEGER (0..4095) - -TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) - -TraceActivation ::= SEQUENCE { - e-UTRAN-Trace-ID E-UTRAN-Trace-ID, - interfacesToTrace InterfacesToTrace, -traceDepth TraceDepth, -traceCollectionEntityIPAddress TransportLayerAddress, --- iE-Extensions ProtocolExtensionContainer { { TraceActivation-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -TraceActivation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -TraceDepth ::= ENUMERATED { - minimum, - medium, - maximum, - minimumWithoutVendorSpecificExtension, - mediumWithoutVendorSpecificExtension, - maximumWithoutVendorSpecificExtension, - ... -} - -E-UTRAN-Trace-ID ::= OCTET STRING (SIZE (8)) - -TypeOfError ::= ENUMERATED { - not-understood, - missing, - ... -} - --- U - -UEAggregateMaximumBitrate ::= SEQUENCE { - uEaggregateMaximumBitRateDL BitRate, - uEaggregateMaximumBitRateUL BitRate, --- iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrates-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -UEAggregate-MaximumBitrates-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - - -UE-S1AP-IDs ::= CHOICE{ - uE-S1AP-ID-pair UE-S1AP-ID-pair, - mME-UE-S1AP-ID MME-UE-S1AP-ID, - ... -} - -UE-S1AP-ID-pair ::= SEQUENCE{ - mME-UE-S1AP-ID MME-UE-S1AP-ID, - eNB-UE-S1AP-ID ENB-UE-S1AP-ID, --- iE-Extensions ProtocolExtensionContainer { {UE-S1AP-ID-pair-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -UE-S1AP-ID-pair-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - - ---WARNING: not the right IE definition... -UE-associatedLogicalS1-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxNrOfIndividualS1ConnectionsToReset)) OF IE - -UE-associatedLogicalS1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxNrOfIndividualS1ConnectionsToReset)) OF IE - -UE-associatedLogicalS1-ConnectionItemRes ::= SET { - ue-associatedLogicalS1-ConnectionItemRes-ies UE-associatedLogicalS1-ConnectionItem, - ... -} - -UE-associatedLogicalS1-ConnectionItem ::= SEQUENCE { - mME-UE-S1AP-ID MME-UE-S1AP-ID OPTIONAL, - eNB-UE-S1AP-ID ENB-UE-S1AP-ID OPTIONAL, --- iE-Extensions ProtocolExtensionContainer { { UE-associatedLogicalS1-ConnectionItemExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -/* -UE-associatedLogicalS1-ConnectionItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - -UEIdentityIndexValue ::= BIT STRING (SIZE (10)) - -UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item - -UEPagingID ::= CHOICE { - s-TMSI S-TMSI, - iMSI IMSI, - ... - } - -UERadioCapability ::= OCTET STRING - -UESecurityCapabilities ::= SEQUENCE { - encryptionAlgorithms EncryptionAlgorithms, - integrityProtectionAlgorithms IntegrityProtectionAlgorithms, --- iE-Extensions ProtocolExtensionContainer { { UESecurityCapabilities-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, -... -} -/* -UESecurityCapabilities-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - --- V --- W - -WarningAreaList ::= CHOICE { - cellIDList ECGIList, - trackingAreaListforWarning TAIListforWarning, - emergencyAreaIDList EmergencyAreaIDList, - ... -} - - -WarningType ::= OCTET STRING (SIZE (2)) - -WarningSecurityInfo ::= OCTET STRING (SIZE (50)) - - -WarningMessageContents ::= OCTET STRING (SIZE(1..9600)) - - --- X - - -X2TNLConfigurationInfo ::= SEQUENCE { - eNBX2TransportLayerAddresses ENBX2TLAs, --- iE-Extensions ProtocolExtensionContainer { { X2TNLConfigurationInfo-ExtIEs} } OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} -/* -X2TNLConfigurationInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -}*/ - --- Y --- Z - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU-Contents.asn b/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU-Contents.asn deleted file mode 100644 index 1fc0f3bc5b..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU-Contents.asn +++ /dev/null @@ -1,2069 +0,0 @@ --- ************************************************************** --- --- PDU definitions for S1AP. --- --- ************************************************************** - -S1AP-PDU-Contents { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Contents (1) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - - UEAggregateMaximumBitrate, - Cause, - Cdma2000HORequiredIndication, - Cdma2000HOStatus, - Cdma2000OneXSRVCCInfo, - Cdma2000OneXRAND, - Cdma2000PDU, - Cdma2000RATType, - Cdma2000SectorID, - CNDomain, - CriticalityDiagnostics, - CSFallbackIndicator, - CSG-Id, - CSG-IdList, - Direct-Forwarding-Path-Availability, - Global-ENB-ID, - EUTRAN-CGI, - ENBname, - ENB-StatusTransfer-TransparentContainer, - ENB-UE-S1AP-ID, - GTP-TEID, - GUMMEI, - HandoverRestrictionList, - HandoverType, - MMEname, - MME-UE-S1AP-ID, - MSClassmark2, - MSClassmark3, - NAS-PDU, - NASSecurityParametersfromE-UTRAN, - NASSecurityParameterstoE-UTRAN, - OverloadResponse, - PagingDRX, - PLMNidentity, - RIMTransfer, - RelativeMMECapacity, - RequestType, - E-RAB-ID, - E-RABLevelQoSParameters, - E-RABList, - SecurityKey, - SecurityContext, - ServedGUMMEIs, - SONConfigurationTransfer, - Source-ToTarget-TransparentContainer, - SourceBSS-ToTargetBSS-TransparentContainer, - SourceeNB-ToTargeteNB-TransparentContainer, - SourceRNC-ToTargetRNC-TransparentContainer, - SubscriberProfileIDforRFP, - SRVCCOperationPossible, - SRVCCHOIndication, - SupportedTAs, - TAI, - Target-ToSource-TransparentContainer, - TargetBSS-ToSourceBSS-TransparentContainer, - TargeteNB-ToSourceeNB-TransparentContainer, - TargetID, - TargetRNC-ToSourceRNC-TransparentContainer, - TimeToWait, - TraceActivation, - E-UTRAN-Trace-ID, - TransportLayerAddress, - UEIdentityIndexValue, - UEPagingID, - UERadioCapability, - UE-S1AP-IDs, - UE-associatedLogicalS1-ConnectionItem, - UESecurityCapabilities, - S-TMSI, - MessageIdentifier, - SerialNumber, - WarningAreaList, - RepetitionPeriod, - NumberofBroadcastRequest, - WarningType, - WarningSecurityInfo, - DataCodingScheme, - WarningMessageContents, - BroadcastCompletedAreaList, - RRC-Establishment-Cause - -FROM S1AP-IEs - - - id-uEaggregateMaximumBitrate, - id-Cause, - id-cdma2000HORequiredIndication, - id-cdma2000HOStatus, - id-cdma2000OneXSRVCCInfo, - id-cdma2000OneXRAND, - id-cdma2000PDU, - id-cdma2000RATType, - id-cdma2000SectorID, - id-CNDomain, - id-CriticalityDiagnostics, - id-CSFallbackIndicator, - id-CSG-Id, - id-CSG-IdList, - id-DefaultPagingDRX, - id-Direct-Forwarding-Path-Availability, - id-Global-ENB-ID, - id-EUTRAN-CGI, - id-eNBname, - id-eNB-StatusTransfer-TransparentContainer, - id-eNB-UE-S1AP-ID, - id-GERANtoLTEHOInformationRes, - id-GUMMEI-ID, - id-HandoverRestrictionList, - id-HandoverType, - id-InitialContextSetup, - id-Inter-SystemInformationTransferTypeEDT, - id-Inter-SystemInformationTransferTypeMDT, - id-NAS-DownlinkCount, - id-MMEname, - id-MME-UE-S1AP-ID, - id-MSClassmark2, - id-MSClassmark3, - id-NAS-PDU, - id-NASSecurityParametersfromE-UTRAN, - id-NASSecurityParameterstoE-UTRAN, - id-OverloadResponse, - id-pagingDRX, - id-RelativeMMECapacity, - id-RequestType, - id-E-RABAdmittedItem, - id-E-RABAdmittedList, - id-E-RABDataForwardingItem, - id-E-RABFailedToModifyList, - id-E-RABFailedToReleaseList, - id-E-RABFailedtoSetupItemHOReqAck, - id-E-RABFailedToSetupListBearerSURes, - id-E-RABFailedToSetupListCtxtSURes, - id-E-RABFailedToSetupListHOReqAck, - id-E-RABFailedToBeReleasedList, - id-E-RABModify, - id-E-RABModifyItemBearerModRes, - id-E-RABModifyListBearerModRes, - id-E-RABRelease, - id-E-RABReleaseItemBearerRelComp, - id-E-RABReleaseItemHOCmd, - id-E-RABReleaseListBearerRelComp, - id-E-RABReleaseIndication, - id-E-RABSetup, - id-E-RABSetupItemBearerSURes, - id-E-RABSetupItemCtxtSURes, - id-E-RABSetupListBearerSURes, - id-E-RABSetupListCtxtSURes, - id-E-RABSubjecttoDataForwardingList, - id-E-RABToBeModifiedItemBearerModReq, - id-E-RABToBeModifiedListBearerModReq, - id-E-RABToBeReleasedList, - id-E-RABReleasedList, - id-E-RABToBeSetupItemBearerSUReq, - id-E-RABToBeSetupItemCtxtSUReq, - id-E-RABToBeSetupItemHOReq, - id-E-RABToBeSetupListBearerSUReq, - id-E-RABToBeSetupListCtxtSUReq, - id-E-RABToBeSetupListHOReq, - id-E-RABToBeSwitchedDLItem, - id-E-RABToBeSwitchedDLList, - id-E-RABToBeSwitchedULList, - id-E-RABToBeSwitchedULItem, - id-E-RABtoReleaseListHOCmd, - id-SecurityKey, - id-SecurityContext, - id-ServedGUMMEIs, - id-SONConfigurationTransferECT, - id-SONConfigurationTransferMCT, - id-Source-ToTarget-TransparentContainer, - id-Source-ToTarget-TransparentContainer-Secondary, - id-SourceMME-UE-S1AP-ID, - id-SRVCCOperationPossible, - id-SRVCCHOIndication, - id-SubscriberProfileIDforRFP, - id-SupportedTAs, - id-S-TMSI, - id-TAI, - id-TAIItem, - id-TAIList, - id-Target-ToSource-TransparentContainer, - id-Target-ToSource-TransparentContainer-Secondary, - id-TargetID, - id-TimeToWait, - id-TraceActivation, - id-E-UTRAN-Trace-ID, - id-UEIdentityIndexValue, - id-UEPagingID, - id-UERadioCapability, - id-UTRANtoLTEHOInformationRes, - id-UE-associatedLogicalS1-ConnectionListResAck, - id-UE-associatedLogicalS1-ConnectionItem, - id-UESecurityCapabilities, - id-UE-S1AP-IDs, - id-ResetType, - id-MessageIdentifier, - id-SerialNumber, - id-WarningAreaList, - id-RepetitionPeriod, - id-NumberofBroadcastRequest, - id-WarningType, - id-WarningSecurityInfo, - id-DataCodingScheme, - id-WarningMessageContents, - id-BroadcastCompletedAreaList, - id-RRC-Establishment-Cause, - id-TraceCollectionEntityIPAddress, - maxnoofTAIs, - maxNrOfErrors, - maxNrOfE-RABs, - maxNrOfIndividualS1ConnectionsToReset, - maxnoofEmergencyAreaID, - maxnoofCellID, - maxnoofTAIforWarning, - maxnoofCellinTAI, - maxnoofCellinEAI - - -FROM S1AP-Constants; - - --- ************************************************************** --- --- Common Container Lists --- --- ************************************************************** - -E-RAB-IE-ContainerList { S1AP-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, maxNrOfE-RABs, {IEsSetParam} } -E-RAB-IE-ContainerPairList { S1AP-PROTOCOL-IES-PAIR : IEsSetParam } ::= ProtocolIE-ContainerPairList { 1, maxNrOfE-RABs, {IEsSetParam} } -ProtocolError-IE-ContainerList { S1AP-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, maxNrOfE-RABs, {IEsSetParam} } - --- ************************************************************** --- --- HANDOVER PREPARATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Required --- --- ************************************************************** - -HandoverRequired ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverRequiredIEs} }, - ... -} - -HandoverRequiredIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | - { ID id-TargetID CRITICALITY reject TYPE TargetID PRESENCE mandatory } | - { ID id-Direct-Forwarding-Path-Availability CRITICALITY ignore TYPE Direct-Forwarding-Path-Availability PRESENCE optional } | - { ID id-SRVCCHOIndication CRITICALITY reject TYPE SRVCCHOIndication PRESENCE optional }| - { ID id-Source-ToTarget-TransparentContainer CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE mandatory }| - { ID id-Source-ToTarget-TransparentContainer-Secondary CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE optional }| - { ID id-MSClassmark2 CRITICALITY reject TYPE MSClassmark2 PRESENCE conditional }| - { ID id-MSClassmark3 CRITICALITY ignore TYPE MSClassmark3 PRESENCE conditional }, - ... -} - - --- ************************************************************** --- --- Handover Command --- --- ************************************************************** - -HandoverCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverCommandIEs} }, - ... -} - -HandoverCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory } | - { ID id-NASSecurityParametersfromE-UTRAN CRITICALITY reject TYPE NASSecurityParametersfromE-UTRAN PRESENCE conditional - -- This IE shall be present if HandoverType IE is set to value "LTEtoUTRAN" or "LTEtoGERAN" -- }| - { ID id-E-RABSubjecttoDataForwardingList CRITICALITY ignore TYPE E-RABDataForwardingList PRESENCE optional } | - { ID id-E-RABtoReleaseListHOCmd CRITICALITY ignore TYPE E-RABList PRESENCE optional } | - { ID id-Target-ToSource-TransparentContainer CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE mandatory }| - { ID id-Target-ToSource-TransparentContainer-Secondary CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -E-RABDataForwardingList ::= E-RAB-IE-ContainerList { {E-RABDataForwardingItemIEs} } - -E-RABDataForwardingItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABDataForwardingItem CRITICALITY ignore TYPE E-RABDataForwardingItem PRESENCE mandatory }, - ... -} - -E-RABDataForwardingItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - dL-transportLayerAddress TransportLayerAddress OPTIONAL, - dL-gTP-TEID GTP-TEID OPTIONAL, - uL-TransportLayerAddress TransportLayerAddress OPTIONAL, - uL-GTP-TEID GTP-TEID OPTIONAL, - iE-Extensions ProtocolExtensionContainer { { E-RABDataForwardingItem-ExtIEs} } OPTIONAL, - ... -} - -E-RABDataForwardingItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- Handover Preparation Failure --- --- ************************************************************** - -HandoverPreparationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverPreparationFailureIEs} }, - ... -} - -HandoverPreparationFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER RESOURCE ALLOCATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Request --- --- ************************************************************** - -HandoverRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {HandoverRequestIEs} }, - ... -} - -HandoverRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE mandatory }| - { ID id-E-RABToBeSetupListHOReq CRITICALITY reject TYPE E-RABToBeSetupListHOReq PRESENCE mandatory } | - { ID id-Source-ToTarget-TransparentContainer CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE mandatory } | - { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory }| - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional }| - { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }| - { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE optional }| - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }| - { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE mandatory}| - { ID id-NASSecurityParameterstoE-UTRAN CRITICALITY reject TYPE NASSecurityParameterstoE-UTRAN PRESENCE conditional - -- This IE shall be present if the Handover Type IE is set to the value "UTRANtoLTE" or "GERANtoLTE" -- }, - ... -} - -E-RABToBeSetupListHOReq ::= E-RAB-IE-ContainerList { {E-RABToBeSetupItemHOReqIEs} } - -E-RABToBeSetupItemHOReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemHOReq CRITICALITY reject TYPE E-RABToBeSetupItemHOReq PRESENCE mandatory }, - ... -} - -E-RABToBeSetupItemHOReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - e-RABlevelQosParameters E-RABLevelQoSParameters, - iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemHOReq-ExtIEs} } OPTIONAL, - ... -} - -E-RABToBeSetupItemHOReq-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Handover Request Acknowledge --- --- ************************************************************** - -HandoverRequestAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {HandoverRequestAcknowledgeIEs} }, - ... -} - -HandoverRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-E-RABAdmittedList CRITICALITY ignore TYPE E-RABAdmittedList PRESENCE mandatory } | - { ID id-E-RABFailedToSetupListHOReqAck CRITICALITY ignore TYPE E-RABFailedtoSetupListHOReqAck PRESENCE optional } | - { ID id-Target-ToSource-TransparentContainer CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -E-RABAdmittedList ::= E-RAB-IE-ContainerList { {E-RABAdmittedItemIEs} } - -E-RABAdmittedItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABAdmittedItem CRITICALITY ignore TYPE E-RABAdmittedItem PRESENCE mandatory }, - ... -} - -E-RABAdmittedItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - dL-transportLayerAddress TransportLayerAddress OPTIONAL, - dL-gTP-TEID GTP-TEID OPTIONAL, - uL-TransportLayerAddress TransportLayerAddress OPTIONAL, - uL-GTP-TEID GTP-TEID OPTIONAL, - iE-Extensions ProtocolExtensionContainer { {E-RABAdmittedItem-ExtIEs} } OPTIONAL, - ... -} - -E-RABAdmittedItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RABFailedtoSetupListHOReqAck ::= E-RAB-IE-ContainerList { {E-RABFailedtoSetupItemHOReqAckIEs} } - -E-RABFailedtoSetupItemHOReqAckIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABFailedtoSetupItemHOReqAck CRITICALITY ignore TYPE E-RABFailedToSetupItemHOReqAck PRESENCE mandatory }, - ... -} - -E-RABFailedToSetupItemHOReqAck ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - cause Cause, - iE-Extensions ProtocolExtensionContainer { { E-RABFailedToSetupItemHOReqAckExtIEs} } OPTIONAL, - ... -} - -E-RABFailedToSetupItemHOReqAckExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Handover Failure --- --- ************************************************************** - -HandoverFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverFailureIEs} }, - ... -} - -HandoverFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER NOTIFICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Notify --- --- ************************************************************** - -HandoverNotify ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverNotifyIEs} }, - ... -} - -HandoverNotifyIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| - { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}, - ... -} - --- ************************************************************** --- --- PATH SWITCH REQUEST ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Path Switch Request --- --- ************************************************************** - -PathSwitchRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { PathSwitchRequestIEs} }, - ... -} - -PathSwitchRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABToBeSwitchedDLList CRITICALITY reject TYPE E-RABToBeSwitchedDLList PRESENCE mandatory }| - { ID id-SourceMME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| - { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}| - { ID id-UESecurityCapabilities CRITICALITY ignore TYPE UESecurityCapabilities PRESENCE mandatory }, - ... -} - -E-RABToBeSwitchedDLList ::= SEQUENCE (SIZE (0..maxProtocolIEs)) OF E-RAB-IE-ContainerList { {E-RABToBeSwitchedDLItemIEs} } - -E-RABToBeSwitchedDLItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSwitchedDLItem CRITICALITY reject TYPE E-RABToBeSwitchedDLItem PRESENCE mandatory }, - ... -} - -E-RABToBeSwitchedDLItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions ProtocolExtensionContainer { { E-RABToBeSwitchedDLItem-ExtIEs} } OPTIONAL, - ... -} - -E-RABToBeSwitchedDLItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Path Switch Request Acknowledge --- --- ************************************************************** - -PathSwitchRequestAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { PathSwitchRequestAcknowledgeIEs} }, - ... -} - -PathSwitchRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeSwitchedULList CRITICALITY ignore TYPE E-RABToBeSwitchedULList PRESENCE optional }| - { ID id-E-RABToBeReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE mandatory}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -E-RABToBeSwitchedULList ::= E-RAB-IE-ContainerList { {E-RABToBeSwitchedULItemIEs} } - -E-RABToBeSwitchedULItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSwitchedULItem CRITICALITY ignore TYPE E-RABToBeSwitchedULItem PRESENCE mandatory }, - ... -} - -E-RABToBeSwitchedULItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions ProtocolExtensionContainer { { E-RABToBeSwitchedULItem-ExtIEs} } OPTIONAL, - ... -} - -E-RABToBeSwitchedULItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Path Switch Request Failure --- --- ************************************************************** - -PathSwitchRequestFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { PathSwitchRequestFailureIEs} }, - ... -} - -PathSwitchRequestFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER CANCEL ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Cancel --- --- ************************************************************** - -HandoverCancel ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverCancelIEs} }, - ... -} - -HandoverCancelIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- Handover Cancel Request Acknowledge --- --- ************************************************************** - -HandoverCancelAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverCancelAcknowledgeIEs} }, - ... -} - -HandoverCancelAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- E-RAB SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Setup Request --- --- ************************************************************** - -E-RABSetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABSetupRequestIEs} }, - ... -} - -E-RABSetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeSetupListBearerSUReq CRITICALITY reject TYPE E-RABToBeSetupListBearerSUReq PRESENCE mandatory }, - ... -} - -E-RABToBeSetupListBearerSUReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeSetupItemBearerSUReqIEs} } - -E-RABToBeSetupItemBearerSUReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemBearerSUReq CRITICALITY reject TYPE E-RABToBeSetupItemBearerSUReq PRESENCE mandatory }, - ... -} - -E-RABToBeSetupItemBearerSUReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABlevelQoSParameters E-RABLevelQoSParameters, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - nAS-PDU NAS-PDU, - iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemBearerSUReqExtIEs} } OPTIONAL, - ... -} - - -E-RABToBeSetupItemBearerSUReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- E-RAB Setup Response --- --- ************************************************************** - -E-RABSetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABSetupResponseIEs} }, - ... -} - -E-RABSetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABSetupListBearerSURes CRITICALITY ignore TYPE E-RABSetupListBearerSURes PRESENCE optional }| - { ID id-E-RABFailedToSetupListBearerSURes CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - -E-RABSetupListBearerSURes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABSetupItemBearerSUResIEs} } - -E-RABSetupItemBearerSUResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABSetupItemBearerSURes CRITICALITY ignore TYPE E-RABSetupItemBearerSURes PRESENCE mandatory }, - ... -} - -E-RABSetupItemBearerSURes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions ProtocolExtensionContainer { {E-RABSetupItemBearerSUResExtIEs} } OPTIONAL, - ... -} - - -E-RABSetupItemBearerSUResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- E-RAB MODIFY ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Modify Request --- --- ************************************************************** - -E-RABModifyRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABModifyRequestIEs} }, - ... -} - -E-RABModifyRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeModifiedListBearerModReq CRITICALITY reject TYPE E-RABToBeModifiedListBearerModReq PRESENCE mandatory }, - ... -} - -E-RABToBeModifiedListBearerModReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeModifiedItemBearerModReqIEs} } - -E-RABToBeModifiedItemBearerModReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeModifiedItemBearerModReq CRITICALITY reject TYPE E-RABToBeModifiedItemBearerModReq PRESENCE mandatory }, - ... -} - -E-RABToBeModifiedItemBearerModReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABLevelQoSParameters E-RABLevelQoSParameters, - nAS-PDU NAS-PDU, - iE-Extensions ProtocolExtensionContainer { {E-RABToBeModifyItemBearerModReqExtIEs} } OPTIONAL, - ... -} - - -E-RABToBeModifyItemBearerModReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- E-RAB Modify Response --- --- ************************************************************** - -E-RABModifyResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABModifyResponseIEs} }, - ... -} - -E-RABModifyResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABModifyListBearerModRes CRITICALITY ignore TYPE E-RABModifyListBearerModRes PRESENCE optional }| - { ID id-E-RABFailedToModifyList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - -E-RABModifyListBearerModRes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABModifyItemBearerModResIEs} } - -E-RABModifyItemBearerModResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABModifyItemBearerModRes CRITICALITY ignore TYPE E-RABModifyItemBearerModRes PRESENCE mandatory }, - ... -} - -E-RABModifyItemBearerModRes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - iE-Extensions ProtocolExtensionContainer { {E-RABModifyItemBearerModResExtIEs} } OPTIONAL, - ... -} - - -E-RABModifyItemBearerModResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - - --- ************************************************************** --- --- E-RAB RELEASE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Release Command --- --- ************************************************************** - -E-RABReleaseCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABReleaseCommandIEs} }, - ... -} - -E-RABReleaseCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE mandatory }| - { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- E-RAB Release Response --- --- ************************************************************** - -E-RABReleaseResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { E-RABReleaseResponseIEs } }, - ... -} - -E-RABReleaseResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABReleaseListBearerRelComp CRITICALITY ignore TYPE E-RABReleaseListBearerRelComp PRESENCE optional }| - { ID id-E-RABFailedToReleaseList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - -E-RABReleaseListBearerRelComp ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABReleaseItemBearerRelCompIEs} } - -E-RABReleaseItemBearerRelCompIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABReleaseItemBearerRelComp CRITICALITY ignore TYPE E-RABReleaseItemBearerRelComp PRESENCE mandatory }, - ... -} - -E-RABReleaseItemBearerRelComp ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - iE-Extensions ProtocolExtensionContainer { {E-RABReleaseItemBearerRelCompExtIEs} } OPTIONAL, - ... -} - - -E-RABReleaseItemBearerRelCompExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- E-RAB RELEASE INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Release Indication --- --- ************************************************************** - -E-RABReleaseIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABReleaseIndicationIEs} }, - ... -} - -E-RABReleaseIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE mandatory }, - ... -} --- ************************************************************** --- --- INITIAL CONTEXT SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Initial Context Setup Request --- --- ************************************************************** - -InitialContextSetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {InitialContextSetupRequestIEs} }, - ... -} - -InitialContextSetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE mandatory }| - { ID id-E-RABToBeSetupListCtxtSUReq CRITICALITY reject TYPE E-RABToBeSetupListCtxtSUReq PRESENCE mandatory }| - { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory }| - { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE mandatory }| - { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }| - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional }| - { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }| - { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional }| - { ID id-CSFallbackIndicator CRITICALITY reject TYPE CSFallbackIndicator PRESENCE optional }| - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }, - ... -} - - - - -E-RABToBeSetupListCtxtSUReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeSetupItemCtxtSUReqIEs} } - -E-RABToBeSetupItemCtxtSUReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemCtxtSUReq CRITICALITY reject TYPE E-RABToBeSetupItemCtxtSUReq PRESENCE mandatory }, - ... -} - -E-RABToBeSetupItemCtxtSUReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABlevelQoSParameters E-RABLevelQoSParameters, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - nAS-PDU NAS-PDU OPTIONAL, - iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemCtxtSUReqExtIEs} } OPTIONAL, - ... -} - - -E-RABToBeSetupItemCtxtSUReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Initial Context Setup Response --- --- ************************************************************** - -InitialContextSetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {InitialContextSetupResponseIEs} }, - ... -} - -InitialContextSetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABSetupListCtxtSURes CRITICALITY ignore TYPE E-RABSetupListCtxtSURes PRESENCE mandatory }| - { ID id-E-RABFailedToSetupListCtxtSURes CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - -E-RABSetupListCtxtSURes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABSetupItemCtxtSUResIEs} } - -E-RABSetupItemCtxtSUResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABSetupItemCtxtSURes CRITICALITY ignore TYPE E-RABSetupItemCtxtSURes PRESENCE mandatory }, - ... -} - -E-RABSetupItemCtxtSURes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions ProtocolExtensionContainer { {E-RABSetupItemCtxtSUResExtIEs} } OPTIONAL, - ... -} - - -E-RABSetupItemCtxtSUResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Initial Context Setup Failure --- --- ************************************************************** - -InitialContextSetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {InitialContextSetupFailureIEs} }, - ... -} - -InitialContextSetupFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- PAGING ELEMENTARY PROCEDURE --- --- ************************************************************** - - --- ************************************************************** --- --- Paging --- --- ************************************************************** - -Paging ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{PagingIEs}}, - ... -} - -PagingIEs S1AP-PROTOCOL-IES ::= { - { ID id-UEIdentityIndexValue CRITICALITY ignore TYPE UEIdentityIndexValue PRESENCE mandatory } | - { ID id-UEPagingID CRITICALITY ignore TYPE UEPagingID PRESENCE mandatory } | - { ID id-pagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional } | - { ID id-CNDomain CRITICALITY ignore TYPE CNDomain PRESENCE mandatory } | - { ID id-TAIList CRITICALITY ignore TYPE TAIList PRESENCE mandatory }| - { ID id-CSG-IdList CRITICALITY ignore TYPE CSG-IdList PRESENCE optional }, - ... -} - -TAIList::= SEQUENCE (SIZE(1.. maxnoofTAIs)) OF ProtocolIE-SingleContainer {{TAIItemIEs}} - -TAIItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-TAIItem CRITICALITY ignore TYPE TAIItem PRESENCE mandatory }, - ... -} - -TAIItem ::= SEQUENCE { - tAI TAI, - iE-Extensions ProtocolExtensionContainer { {TAIItemExtIEs} } OPTIONAL, - ... -} - - -TAIItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- UE CONTEXT RELEASE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE CONTEXT RELEASE REQUEST --- --- ************************************************************** - -UEContextReleaseRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UEContextReleaseRequest-IEs}}, - ... -} - -UEContextReleaseRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- UE Context Release Command --- --- ************************************************************** - -UEContextReleaseCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UEContextReleaseCommand-IEs}}, - ... -} - -UEContextReleaseCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-UE-S1AP-IDs CRITICALITY reject TYPE UE-S1AP-IDs PRESENCE mandatory} | - - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- UE Context Release Complete --- --- ************************************************************** - -UEContextReleaseComplete ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UEContextReleaseComplete-IEs}}, - ... -} - -UEContextReleaseCompleteIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- UE CONTEXT MODIFICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE Context Modification Request --- --- ************************************************************** - -UEContextModificationRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { UEContextModificationRequestIEs} }, - ... -} - -UEContextModificationRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE optional }| - { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional }| - { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-CSFallbackIndicator CRITICALITY reject TYPE CSFallbackIndicator PRESENCE optional }, - ... -} --- ************************************************************** --- --- UE Context Modification Response --- --- ************************************************************** - -UEContextModificationResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { UEContextModificationResponseIEs} }, - ... -} - -UEContextModificationResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -}-- ************************************************************** --- --- UE Context Modification Failure --- --- ************************************************************** - -UEContextModificationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { UEContextModificationFailureIEs} }, - ... -} - -UEContextModificationFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- NAS TRANSPORT ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- DOWNLINK NAS TRANSPORT --- --- ************************************************************** - -DownlinkNASTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{DownlinkNASTransport-IEs}}, - ... -} - -DownlinkNASTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory} | - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- INITIAL UE MESSAGE --- --- ************************************************************** - -InitialUEMessage ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{InitialUEMessage-IEs}}, - ... -} - -InitialUEMessageIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory} | - { ID id-TAI CRITICALITY reject TYPE TAI PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory} | - { ID id-RRC-Establishment-Cause CRITICALITY ignore TYPE RRC-Establishment-Cause PRESENCE mandatory} | - { ID id-S-TMSI CRITICALITY reject TYPE S-TMSI PRESENCE optional} | - { ID id-CSG-Id CRITICALITY reject TYPE CSG-Id PRESENCE optional} | - { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- UPLINK NAS TRANSPORT --- --- ************************************************************** - -UplinkNASTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UplinkNASTransport-IEs}}, - ... -} - -UplinkNASTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| - { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}, - ... -} --- ************************************************************** --- --- NAS NON DELIVERY INDICATION --- --- ************************************************************** - -NASNonDeliveryIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{NASNonDeliveryIndication-IEs}}, - ... -} - -NASNonDeliveryIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- RESET ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Reset --- --- ************************************************************** - -Reset ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ResetIEs} }, - ... -} - -ResetIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory }, - ... -} - -ResetType ::= CHOICE { - s1-Interface ResetAll, - partOfS1-Interface UE-associatedLogicalS1-ConnectionListRes, - ... -} - - - -ResetAll ::= ENUMERATED { - reset-all, - ... -} - -UE-associatedLogicalS1-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxNrOfIndividualS1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalS1-ConnectionItemRes } } - -UE-associatedLogicalS1-ConnectionItemRes S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionItem CRITICALITY reject TYPE UE-associatedLogicalS1-ConnectionItem PRESENCE mandatory }, - ... -} - - --- ************************************************************** --- --- Reset Acknowledge --- --- ************************************************************** - -ResetAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ResetAcknowledgeIEs} }, - ... -} - -ResetAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionListResAck CRITICALITY ignore TYPE UE-associatedLogicalS1-ConnectionListResAck PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -UE-associatedLogicalS1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxNrOfIndividualS1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalS1-ConnectionItemResAck } } - -UE-associatedLogicalS1-ConnectionItemResAck S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionItem CRITICALITY ignore TYPE UE-associatedLogicalS1-ConnectionItem PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- ERROR INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Error Indication --- --- ************************************************************** - -ErrorIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ErrorIndicationIEs}}, - ... -} - -ErrorIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE optional } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE optional } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional } | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } , - ... -} - --- ************************************************************** --- --- S1 SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- S1 Setup Request --- --- ************************************************************** - -S1SetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1SetupRequestIEs} }, - ... -} - -S1SetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-Global-ENB-ID CRITICALITY reject TYPE Global-ENB-ID PRESENCE mandatory}| - { ID id-eNBname CRITICALITY ignore TYPE ENBname PRESENCE optional}| - { ID id-SupportedTAs CRITICALITY reject TYPE SupportedTAs PRESENCE mandatory}| - { ID id-DefaultPagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE mandatory}| - { ID id-CSG-IdList CRITICALITY reject TYPE CSG-IdList PRESENCE optional}, - ... -} - --- ************************************************************** --- --- S1 Setup Response --- --- ************************************************************** - -S1SetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1SetupResponseIEs} }, - ... -} - - -S1SetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MMEname CRITICALITY ignore TYPE MMEname PRESENCE optional }| - { ID id-ServedGUMMEIs CRITICALITY reject TYPE ServedGUMMEIs PRESENCE mandatory }| - { ID id-RelativeMMECapacity CRITICALITY ignore TYPE RelativeMMECapacity PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- S1 Setup Failure --- --- ************************************************************** - -S1SetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1SetupFailureIEs} }, - ... -} - -S1SetupFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Configuration Update --- --- ************************************************************** - -ENBConfigurationUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateIEs} }, - ... -} - -ENBConfigurationUpdateIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNBname CRITICALITY ignore TYPE ENBname PRESENCE optional }| - { ID id-SupportedTAs CRITICALITY reject TYPE SupportedTAs PRESENCE optional }| - { ID id-CSG-IdList CRITICALITY reject TYPE CSG-IdList PRESENCE optional}| - { ID id-DefaultPagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional }, - ... -} - --- ************************************************************** --- --- eNB Configuration Update Acknowledge --- --- ************************************************************** - -ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateAcknowledgeIEs} }, - ... -} - - -ENBConfigurationUpdateAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- eNB Configuration Update Failure --- --- ************************************************************** - -ENBConfigurationUpdateFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateFailureIEs} }, - ... -} - -ENBConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, -... -} - - --- ************************************************************** --- --- MME Configuration UPDATE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Configuration Update --- --- ************************************************************** - -MMEConfigurationUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateIEs} }, - ... -} - -MMEConfigurationUpdateIEs S1AP-PROTOCOL-IES ::= { - { ID id-MMEname CRITICALITY ignore TYPE MMEname PRESENCE optional }| - { ID id-ServedGUMMEIs CRITICALITY reject TYPE ServedGUMMEIs PRESENCE optional }| - { ID id-RelativeMMECapacity CRITICALITY reject TYPE RelativeMMECapacity PRESENCE optional}, - ... -} - --- ************************************************************** --- --- MME Configuration Update Acknowledge --- --- ************************************************************** - -MMEConfigurationUpdateAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateAcknowledgeIEs} }, - ... -} - - -MMEConfigurationUpdateAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- MME Configuration Update Failure --- --- ************************************************************** - -MMEConfigurationUpdateFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateFailureIEs} }, - ... -} - -MMEConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- DOWNLINK S1 CDMA2000 TUNNELING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Downlink S1 CDMA2000 Tunneling --- --- ************************************************************** - -DownlinkS1cdma2000tunneling ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {DownlinkS1cdma2000tunnelingIEs} }, - ... -} - -DownlinkS1cdma2000tunnelingIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-E-RABSubjecttoDataForwardingList CRITICALITY ignore TYPE E-RABDataForwardingList PRESENCE optional } | - { ID id-cdma2000HOStatus CRITICALITY ignore TYPE Cdma2000HOStatus PRESENCE optional } | - { ID id-cdma2000RATType CRITICALITY reject TYPE Cdma2000RATType PRESENCE mandatory } | - { ID id-cdma2000PDU CRITICALITY reject TYPE Cdma2000PDU PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- UPLINK S1 CDMA2000 TUNNELING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Uplink S1 CDMA2000 Tunneling --- --- ************************************************************** - -UplinkS1cdma2000tunneling ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {UplinkS1cdma2000tunnelingIEs} }, - ... -} - -UplinkS1cdma2000tunnelingIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-cdma2000RATType CRITICALITY reject TYPE Cdma2000RATType PRESENCE mandatory } | - { ID id-cdma2000SectorID CRITICALITY reject TYPE Cdma2000SectorID PRESENCE mandatory } | - { ID id-cdma2000HORequiredIndication CRITICALITY ignore TYPE Cdma2000HORequiredIndication PRESENCE optional } | - { ID id-cdma2000OneXSRVCCInfo CRITICALITY reject TYPE Cdma2000OneXSRVCCInfo PRESENCE optional } | - { ID id-cdma2000OneXRAND CRITICALITY reject TYPE Cdma2000OneXRAND PRESENCE optional } | - { ID id-cdma2000PDU CRITICALITY reject TYPE Cdma2000PDU PRESENCE mandatory }, - ... -} - - --- ************************************************************** --- --- UE CAPABILITY INFO INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE Capability Info Indication --- --- ************************************************************** - -UECapabilityInfoIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { UECapabilityInfoIndicationIEs} }, - ... -} - -UECapabilityInfoIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE mandatory } , - ... -} - --- ************************************************************** --- --- eNB STATUS TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Status Transfer --- --- ************************************************************** - -ENBStatusTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ENBStatusTransferIEs} }, - ... -} - -ENBStatusTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-StatusTransfer-TransparentContainer CRITICALITY reject TYPE ENB-StatusTransfer-TransparentContainer PRESENCE mandatory} , - ... -} - - --- ************************************************************** --- --- MME STATUS TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Status Transfer --- --- ************************************************************** - -MMEStatusTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {MMEStatusTransferIEs} }, - ... -} - -MMEStatusTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-StatusTransfer-TransparentContainer CRITICALITY reject TYPE ENB-StatusTransfer-TransparentContainer PRESENCE mandatory} , - ... -} - - --- ************************************************************** --- --- TRACE ELEMENTARY PROCEDURES --- --- ************************************************************** --- ************************************************************** --- --- Trace Start --- --- ************************************************************** - -TraceStart ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {TraceStartIEs} }, - ... -} - -TraceStartIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- Trace Failure Indication --- --- ************************************************************** - -TraceFailureIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {TraceFailureIndicationIEs} }, - ... -} - -TraceFailureIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- DEACTIVATE TRACE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- DEACTIVATE TRACE --- --- ************************************************************** - -DeactivateTrace ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { DeactivateTraceIEs} }, - ... -} - -DeactivateTraceIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- CELL TRAFFIC TRACE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- CELL TRAFFIC TRACE --- --- ************************************************************** - -CellTrafficTrace ::= SEQUENCE { -protocolIEs ProtocolIE-Container { { CellTrafficTraceIEs } }, -... -} - -CellTrafficTraceIEs S1AP-PROTOCOL-IES ::= { - {ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - {ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - {ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory}| - {ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| - {ID id-TraceCollectionEntityIPAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- LOCATION ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- Location Reporting Control --- --- ************************************************************** - -LocationReportingControl ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { LocationReportingControlIEs} }, - ... -} - -LocationReportingControlIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE mandatory } , - ... -} - --- ************************************************************** --- --- Location Report Failure Indication --- --- ************************************************************** - -LocationReportingFailureIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { LocationReportingFailureIndicationIEs} }, - ... -} - -LocationReportingFailureIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, - ... -} - --- ************************************************************** --- --- Location Report --- --- ************************************************************** - -LocationReport ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { LocationReportIEs} }, - ... -} - -LocationReportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory} | - { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory} | - { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- OVERLOAD ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- Overload Start --- --- ************************************************************** - -OverloadStart ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {OverloadStartIEs} }, - ... -} - -OverloadStartIEs S1AP-PROTOCOL-IES ::= { - { ID id-OverloadResponse CRITICALITY reject TYPE OverloadResponse PRESENCE mandatory }, - ... -} --- ************************************************************** --- --- Overload Stop --- --- ************************************************************** - -OverloadStop ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {OverloadStopIEs} }, - ... -} - -OverloadStopIEs S1AP-PROTOCOL-IES ::= { - ... -} --- ************************************************************** --- --- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Write-Replace Warning Request --- --- ************************************************************** - - -WriteReplaceWarningRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {WriteReplaceWarningRequestIEs} }, - ... -} - -WriteReplaceWarningRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| - { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional }| - { ID id-RepetitionPeriod CRITICALITY reject TYPE RepetitionPeriod PRESENCE mandatory }| - { ID id-NumberofBroadcastRequest CRITICALITY reject TYPE NumberofBroadcastRequest PRESENCE mandatory }| - { ID id-WarningType CRITICALITY ignore TYPE WarningType PRESENCE optional }| - { ID id-WarningSecurityInfo CRITICALITY ignore TYPE WarningSecurityInfo PRESENCE optional }| - { ID id-DataCodingScheme CRITICALITY ignore TYPE DataCodingScheme PRESENCE optional }| - { ID id-WarningMessageContents CRITICALITY ignore TYPE WarningMessageContents PRESENCE optional }, - ... -} --- ************************************************************** --- --- Write-Replace Warning Response --- --- ************************************************************** - -WriteReplaceWarningResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {WriteReplaceWarningResponseIEs} }, - ... -} - -WriteReplaceWarningResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| - { ID id-BroadcastCompletedAreaList CRITICALITY ignore TYPE BroadcastCompletedAreaList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, - ... -} - --- ************************************************************** --- --- eNB DIRECT INFORMATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Direct Information Transfer --- --- ************************************************************** - -ENBDirectInformationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ ENBDirectInformationTransferIEs}}, - ... -} - -ENBDirectInformationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-Inter-SystemInformationTransferTypeEDT CRITICALITY reject TYPE Inter-SystemInformationTransferType PRESENCE mandatory} , - ... -} - -Inter-SystemInformationTransferType ::= CHOICE { - rIMTransfer RIMTransfer, - ... -} - --- ************************************************************** --- --- MME DIRECT INFORMATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Direct Information Transfer --- --- ************************************************************** - -MMEDirectInformationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ MMEDirectInformationTransferIEs}}, - ... -} - -MMEDirectInformationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-Inter-SystemInformationTransferTypeMDT CRITICALITY reject TYPE Inter-SystemInformationTransferType PRESENCE mandatory} , - ... -} --- ************************************************************** --- --- eNB CONFIGURATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Configuration Transfer --- --- ************************************************************** - -ENBConfigurationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ ENBConfigurationTransferIEs}}, - ... -} - -ENBConfigurationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-SONConfigurationTransferECT CRITICALITY ignore TYPE SONConfigurationTransfer PRESENCE optional} , - ... -} - --- ************************************************************** --- --- MME CONFIGURATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Configuration Transfer --- --- ************************************************************** - -MMEConfigurationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ MMEConfigurationTransferIEs}}, - ... -} - -MMEConfigurationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-SONConfigurationTransferMCT CRITICALITY ignore TYPE SONConfigurationTransfer PRESENCE optional} , - ... -} - --- ************************************************************** --- --- PRIVATE MESSAGE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Private Message --- --- ************************************************************** - -PrivateMessage ::= SEQUENCE { - privateIEs PrivateIE-Container {{PrivateMessageIEs}}, - ... -} - -PrivateMessageIEs S1AP-PRIVATE-IES ::= { - ... -} - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU.asn b/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU.asn deleted file mode 100644 index d2c50b417c..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R8.10/S1AP-PDU.asn +++ /dev/null @@ -1,663 +0,0 @@ -S1AP-PDU { - itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) - eps-Access (21) modules (3) s1ap (1) version1 (1) -} - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - - UEAggregateMaximumBitrate, - Cause, - Cdma2000HORequiredIndication, - Cdma2000HOStatus, - Cdma2000OneXSRVCCInfo, - Cdma2000OneXRAND, - Cdma2000PDU, - Cdma2000RATType, - Cdma2000SectorID, - CNDomain, - CriticalityDiagnostics, - CSFallbackIndicator, - CSG-Id, - CSG-IdList, - Direct-Forwarding-Path-Availability, - Global-ENB-ID, - EUTRAN-CGI, - ENBname, - ENB-StatusTransfer-TransparentContainer, - ENB-UE-S1AP-ID, - GTP-TEID, - GUMMEI, - HandoverRestrictionList, - HandoverType, - MMEname, - MME-UE-S1AP-ID, - MSClassmark2, - MSClassmark3, - NAS-PDU, - NASSecurityParametersfromE-UTRAN, - NASSecurityParameterstoE-UTRAN, - OverloadResponse, - PagingDRX, - PLMNidentity, - RIMTransfer, - RelativeMMECapacity, - RequestType, - E-RAB-ID, - E-RABLevelQoSParameters, - E-RABList, - SecurityKey, - SecurityContext, - ServedGUMMEIs, - SONConfigurationTransfer, - Source-ToTarget-TransparentContainer, - SourceBSS-ToTargetBSS-TransparentContainer, - SourceeNB-ToTargeteNB-TransparentContainer, - SourceRNC-ToTargetRNC-TransparentContainer, - SubscriberProfileIDforRFP, - SRVCCOperationPossible, - SRVCCHOIndication, - SupportedTAs, - TAI, - Target-ToSource-TransparentContainer, - TargetBSS-ToSourceBSS-TransparentContainer, - TargeteNB-ToSourceeNB-TransparentContainer, - TargetID, - TargetRNC-ToSourceRNC-TransparentContainer, - TimeToWait, - TraceActivation, - E-UTRAN-Trace-ID, - TransportLayerAddress, - UEIdentityIndexValue, - UEPagingID, - UERadioCapability, - UE-S1AP-IDs, - UE-associatedLogicalS1-ConnectionItem, - UESecurityCapabilities, - S-TMSI, - MessageIdentifier, - SerialNumber, - WarningAreaList, - RepetitionPeriod, - NumberofBroadcastRequest, - WarningType, - WarningSecurityInfo, - DataCodingScheme, - WarningMessageContents, - BroadcastCompletedAreaList, - RRC-Establishment-Cause - -FROM S1AP-IEs - - ProcedureCode, - Criticality, - ProtocolIE-ID - -FROM S1AP-CommonDataTypes - - - id-uEaggregateMaximumBitrate, - id-Cause, - id-cdma2000HORequiredIndication, - id-cdma2000HOStatus, - id-cdma2000OneXSRVCCInfo, - id-cdma2000OneXRAND, - id-cdma2000PDU, - id-cdma2000RATType, - id-cdma2000SectorID, - id-CNDomain, - id-CriticalityDiagnostics, - id-CSFallbackIndicator, - id-CSG-Id, - id-CSG-IdList, - id-DefaultPagingDRX, - id-Direct-Forwarding-Path-Availability, - id-Global-ENB-ID, - id-EUTRAN-CGI, - id-eNBname, - id-eNB-StatusTransfer-TransparentContainer, - id-eNB-UE-S1AP-ID, - id-GERANtoLTEHOInformationRes, - id-GUMMEI-ID, - id-HandoverRestrictionList, - id-HandoverType, - id-InitialContextSetup, - id-Inter-SystemInformationTransferTypeEDT, - id-Inter-SystemInformationTransferTypeMDT, - id-NAS-DownlinkCount, - id-MMEname, - id-MME-UE-S1AP-ID, - id-MSClassmark2, - id-MSClassmark3, - id-NAS-PDU, - id-NASSecurityParametersfromE-UTRAN, - id-NASSecurityParameterstoE-UTRAN, - id-OverloadResponse, - id-pagingDRX, - id-RelativeMMECapacity, - id-RequestType, - id-E-RABAdmittedItem, - id-E-RABAdmittedList, - id-E-RABDataForwardingItem, - id-E-RABFailedToModifyList, - id-E-RABFailedToReleaseList, - id-E-RABFailedtoSetupItemHOReqAck, - id-E-RABFailedToSetupListBearerSURes, - id-E-RABFailedToSetupListCtxtSURes, - id-E-RABFailedToSetupListHOReqAck, - id-E-RABFailedToBeReleasedList, - id-E-RABModify, - id-E-RABModifyItemBearerModRes, - id-E-RABModifyListBearerModRes, - id-E-RABRelease, - id-E-RABReleaseItemBearerRelComp, - id-E-RABReleaseItemHOCmd, - id-E-RABReleaseListBearerRelComp, - id-E-RABReleaseIndication, - id-E-RABSetup, - id-E-RABSetupItemBearerSURes, - id-E-RABSetupItemCtxtSURes, - id-E-RABSetupListBearerSURes, - id-E-RABSetupListCtxtSURes, - id-E-RABSubjecttoDataForwardingList, - id-E-RABToBeModifiedItemBearerModReq, - id-E-RABToBeModifiedListBearerModReq, - id-E-RABToBeReleasedList, - id-E-RABReleasedList, - id-E-RABToBeSetupItemBearerSUReq, - id-E-RABToBeSetupItemCtxtSUReq, - id-E-RABToBeSetupItemHOReq, - id-E-RABToBeSetupListBearerSUReq, - id-E-RABToBeSetupListCtxtSUReq, - id-E-RABToBeSetupListHOReq, - id-E-RABToBeSwitchedDLItem, - id-E-RABToBeSwitchedDLList, - id-E-RABToBeSwitchedULList, - id-E-RABToBeSwitchedULItem, - id-E-RABtoReleaseListHOCmd, - id-SecurityKey, - id-SecurityContext, - id-ServedGUMMEIs, - id-SONConfigurationTransferECT, - id-SONConfigurationTransferMCT, - id-Source-ToTarget-TransparentContainer, - id-Source-ToTarget-TransparentContainer-Secondary, - id-SourceMME-UE-S1AP-ID, - id-SRVCCOperationPossible, - id-SRVCCHOIndication, - id-SubscriberProfileIDforRFP, - id-SupportedTAs, - id-S-TMSI, - id-TAI, - id-TAIItem, - id-TAIList, - id-Target-ToSource-TransparentContainer, - id-Target-ToSource-TransparentContainer-Secondary, - id-TargetID, - id-TimeToWait, - id-TraceActivation, - id-E-UTRAN-Trace-ID, - id-UEIdentityIndexValue, - id-UEPagingID, - id-UERadioCapability, - id-UTRANtoLTEHOInformationRes, - id-UE-associatedLogicalS1-ConnectionListResAck, - id-UE-associatedLogicalS1-ConnectionItem, - id-UESecurityCapabilities, - id-UE-S1AP-IDs, - id-ResetType, - id-MessageIdentifier, - id-SerialNumber, - id-WarningAreaList, - id-RepetitionPeriod, - id-NumberofBroadcastRequest, - id-WarningType, - id-WarningSecurityInfo, - id-DataCodingScheme, - id-WarningMessageContents, - id-BroadcastCompletedAreaList, - id-RRC-Establishment-Cause, - id-TraceCollectionEntityIPAddress, - maxnoofTAIs, - maxNrOfErrors, - maxNrOfE-RABs, - maxNrOfIndividualS1ConnectionsToReset, - maxnoofEmergencyAreaID, - maxnoofCellID, - maxnoofTAIforWarning, - maxnoofCellinTAI, - maxnoofCellinEAI, - - id-CellTrafficTrace, - id-DeactivateTrace, - id-downlinkNASTransport, - id-DownlinkS1cdma2000tunneling, - id-eNBStatusTransfer, - id-ErrorIndication, - id-HandoverCancel, - id-HandoverNotification, - id-HandoverPreparation, - id-HandoverResourceAllocation, - id-InitialContextSetup, - id-initialUEMessage, - id-ENBConfigurationUpdate, - id-LocationReportingControl, - id-LocationReportingFailureIndication, - id-LocationReport, - id-eNBDirectInformationTransfer, - id-MMEConfigurationUpdate, - id-MMEDirectInformationTransfer, - id-MMEStatusTransfer, - id-NASNonDeliveryIndication, - id-OverloadStart, - id-OverloadStop, - id-Paging, - id-PathSwitchRequest, - id-PrivateMessage, - id-Reset, - id-S1Setup, - id-E-RABModify, - id-E-RABRelease, - id-E-RABReleaseIndication, - id-E-RABSetup, - id-TraceFailureIndication, - id-TraceStart, - id-UECapabilityInfoIndication, - id-UEContextModification, - id-UEContextRelease, - id-UEContextReleaseRequest, - id-uplinkNASTransport, - id-UplinkS1cdma2000tunneling, - id-WriteReplaceWarning, - id-eNBConfigurationTransfer, - id-MMEConfigurationTransfer, - maxProtocolIEs -FROM S1AP-Constants; - --- ************************************************************** --- --- S1 SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - -S1AP-ELEMENTARY-PROCEDURE ::= CLASS { - &InitiatingMessage , - &SuccessfulOutcome OPTIONAL, - &UnsuccessfulOutcome OPTIONAL, - &procedureCode ProcedureCode UNIQUE, - &criticality Criticality DEFAULT ignore -} -WITH SYNTAX { - INITIATING MESSAGE &InitiatingMessage - [SUCCESSFUL OUTCOME &SuccessfulOutcome] - [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] - PROCEDURE CODE &procedureCode - [CRITICALITY &criticality] -} - -S1AP-PDU ::= CHOICE { - initiatingMessage InitiatingMessage, - successfulOutcome SuccessfulOutcome, - unsuccessfulOutcome UnsuccessfulOutcome, - ... -} - -InitiatingMessage ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -SuccessfulOutcome ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -UnsuccessfulOutcome ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -HandoverRequired ::= SEQUENCE { - handoverRequired-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverCommand ::= SEQUENCE { - handoverCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverPreparationFailure ::= SEQUENCE { - handoverPreparationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverRequest ::= SEQUENCE { - handoverRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverRequestAcknowledge ::= SEQUENCE { - handoverRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverFailure ::= SEQUENCE { - handoverFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverNotify ::= SEQUENCE { - handoverNotify-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PathSwitchRequest ::= SEQUENCE { - pathSwitchRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PathSwitchRequestAcknowledge ::= SEQUENCE { - pathSwitchRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PathSwitchRequestFailure ::= SEQUENCE { - pathSwitchRequestFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABSetupRequest ::= SEQUENCE { - e-RABSetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABSetupResponse ::= SEQUENCE { - e-RABSetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABModifyRequest ::= SEQUENCE { - e-RABModifyRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABModifyResponse ::= SEQUENCE { - e-RABModifyResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABReleaseIndication ::= SEQUENCE { - e-RABReleaseIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABReleaseCommand ::= SEQUENCE { - e-RABReleaseCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABReleaseResponse ::= SEQUENCE { - e-RABReleaseResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -InitialContextSetupRequest ::= SEQUENCE { - initialContextSetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -InitialContextSetupResponse ::= SEQUENCE { - initialContextSetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -InitialContextSetupFailure ::= SEQUENCE { - initialContextSetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextReleaseRequest ::= SEQUENCE { - ueContextReleaseRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -Paging ::= SEQUENCE { - paging-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -DownlinkNASTransport ::= SEQUENCE { - downlinkNASTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -InitialUEMessage ::= SEQUENCE { - initialUEMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UplinkNASTransport ::= SEQUENCE { - uplinkNASTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -NASNonDeliveryIndication ::= SEQUENCE { - nasNonDeliveryIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverCancel ::= SEQUENCE { - handoverCancel-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverCancelAcknowledge ::= SEQUENCE { - handoverCancelAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -Reset ::= SEQUENCE { - reset-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ResetAcknowledge ::= SEQUENCE { - resetAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -S1SetupResponse ::= SEQUENCE { - s1SetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -S1SetupRequest ::= SEQUENCE { - s1SetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -S1SetupFailure ::= SEQUENCE -{ - s1SetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ErrorIndication ::= SEQUENCE { - errorIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdate ::= SEQUENCE { - eNBConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - eNBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdateFailure ::= SEQUENCE { - eNBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEConfigurationUpdate ::= SEQUENCE { - mmeConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEConfigurationUpdateAcknowledge ::= SEQUENCE { - mmeConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEConfigurationUpdateFailure ::= SEQUENCE { - mmeConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -DownlinkS1cdma2000tunneling ::= SEQUENCE { - downlinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UplinkS1cdma2000tunneling ::= SEQUENCE { - uplinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextModificationRequest ::= SEQUENCE { - ueContextModificationRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextModificationResponse ::= SEQUENCE { - ueContextModificationResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextModificationFailure ::= SEQUENCE { - ueContextModificationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UECapabilityInfoIndication ::= SEQUENCE { - ueCapabilityInfoIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextReleaseCommand ::= SEQUENCE { - ueContextReleaseCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextReleaseComplete ::= SEQUENCE { - ueContextReleaseComplete-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBStatusTransfer ::= SEQUENCE { - eNBStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEStatusTransfer ::= SEQUENCE { - mmeStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -DeactivateTrace ::= SEQUENCE { - deactivateTrace-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -TraceStart ::= SEQUENCE { - traceStart-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -TraceFailureIndication ::= SEQUENCE { - traceFailureIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -CellTrafficTrace ::= SEQUENCE { - cellTrafficTrace-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -LocationReportingControl ::= SEQUENCE { - locationReportingControl-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -LocationReportingFailureIndication ::= SEQUENCE { - locationReportingFailureIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -LocationReport ::= SEQUENCE { - locationReport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -OverloadStart ::= SEQUENCE { - overloadStart-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -OverloadStop ::= SEQUENCE { - overloadStop-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -WriteReplaceWarningRequest ::= SEQUENCE { - writeReplaceWarningRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -WriteReplaceWarningResponse ::= SEQUENCE { - writeReplaceWarningResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBDirectInformationTransfer ::= SEQUENCE { - eNBDirectInformationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEDirectInformationTransfer ::= SEQUENCE { - mmeDirectInformationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationTransfer ::= SEQUENCE { - eNBConfigurationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEConfigurationTransfer ::= SEQUENCE { - mmeConfigurationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PrivateMessage ::= SEQUENCE { - privateMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -IE ::= SEQUENCE { - id ProtocolIE-ID, - criticality Criticality, - value ANY -} - -END diff --git a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-CommonDataTypes.asn b/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-CommonDataTypes.asn deleted file mode 100644 index b1295c34ff..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-CommonDataTypes.asn +++ /dev/null @@ -1,217 +0,0 @@ --- ************************************************************** --- --- Common definitions --- --- ************************************************************** - -S1AP-CommonDataTypes { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-CommonDataTypes (3) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -Criticality ::= ENUMERATED { reject, ignore, notify } - -Presence ::= ENUMERATED { optional, conditional, mandatory } - -PrivateIE-ID ::= CHOICE { - local INTEGER (0..65535), - global OBJECT IDENTIFIER -} - -ProcedureCode ::= INTEGER { - id-HandoverPreparation(0), - id-HandoverResourceAllocation(1), - id-HandoverNotification(2), - id-PathSwitchRequest(3), - id-HandoverCancel(4), - id-E-RABSetup(5), - id-E-RABModify(6), - id-E-RABRelease(7), - id-E-RABReleaseIndication(8), - id-InitialContextSetup(9), - id-Paging(10), - id-downlinkNASTransport(11), - id-initialUEMessage(12), - id-uplinkNASTransport(13), - id-Reset(14), - id-ErrorIndication(15), - id-NASNonDeliveryIndication(16), - id-S1Setup(17), - id-UEContextReleaseRequest(18), - id-DownlinkS1cdma2000tunneling(19), - id-UplinkS1cdma2000tunneling(20), - id-UEContextModification(21), - id-UECapabilityInfoIndication(22), - id-UEContextRelease(23), - id-eNBStatusTransfer(24), - id-MMEStatusTransfer(25), - id-DeactivateTrace(26), - id-TraceStart(27), - id-TraceFailureIndication(28), - id-ENBConfigurationUpdate(29), - id-MMEConfigurationUpdate(30), - id-LocationReportingControl(31), - id-LocationReportingFailureIndication(32), - id-LocationReport(33), - id-OverloadStart(34), - id-OverloadStop(35), - id-WriteReplaceWarning(36), - id-eNBDirectInformationTransfer(37), - id-MMEDirectInformationTransfer(38), - id-PrivateMessage(39), - id-eNBConfigurationTransfer(40), - id-MMEConfigurationTransfer(41), - id-CellTrafficTrace(42), - id-Kill(43), - id-downlinkUEAssociatedLPPaTransport(44), - id-uplinkUEAssociatedLPPaTransport(45), - id-downlinkNonUEAssociatedLPPaTransport(46), - id-uplinkNonUEAssociatedLPPaTransport(47) -} (0..255) - -ProtocolExtensionID ::= INTEGER (0..65535) - -ProtocolIE-ID ::= INTEGER { - id-MME-UE-S1AP-ID(0), - id-HandoverType(1), - id-Cause(2), - id-SourceID(3), - id-TargetID (4), - id-eNB-UE-S1AP-ID(8), - id-E-RABSubjecttoDataForwardingList(12), - id-E-RABtoReleaseListHOCmd(13), - id-E-RABDataForwardingItem(14), - id-E-RABReleaseItemBearerRelComp(15), - id-E-RABToBeSetupListBearerSUReq(16), - id-E-RABToBeSetupItemBearerSUReq(17), - id-E-RABAdmittedList(18), - id-E-RABFailedToSetupListHOReqAck(19), - id-E-RABAdmittedItem(20), - id-E-RABFailedtoSetupItemHOReqAck(21), - id-E-RABToBeSwitchedDLList(22), - id-E-RABToBeSwitchedDLItem(23), - id-E-RABToBeSetupListCtxtSUReq(24), - id-TraceActivation(25), - id-NAS-PDU(26), - id-E-RABToBeSetupItemHOReq(27), - id-E-RABSetupListBearerSURes(28), - id-E-RABFailedToSetupListBearerSURes(29), - id-E-RABToBeModifiedListBearerModReq(30), - id-E-RABModifyListBearerModRes(31), - id-E-RABFailedToModifyList(32), - id-E-RABToBeReleasedList(33), - id-E-RABFailedToReleaseList(34), - id-E-RABItem(35), - id-E-RABToBeModifiedItemBearerModReq(36), - id-E-RABModifyItemBearerModRes(37), - id-E-RABReleaseItem(38), - id-E-RABSetupItemBearerSURes(39), - id-SecurityContext(40), - id-HandoverRestrictionList(41), - id-UEPagingID(43), - id-pagingDRX(44), - id-TAIList(46), - id-TAIItem(47), - id-E-RABFailedToSetupListCtxtSURes(48), - id-E-RABReleaseItemHOCmd(49), - id-E-RABSetupItemCtxtSURes(50), - id-E-RABSetupListCtxtSURes(51), - id-E-RABToBeSetupItemCtxtSUReq(52), - id-E-RABToBeSetupListHOReq(53), - id-GERANtoLTEHOInformationRes(55), - id-UTRANtoLTEHOInformationRes(57), - id-CriticalityDiagnostics(58), - id-Global-ENB-ID(59), - id-eNBname(60), - id-MMEname(61), - id-ServedPLMNs(63), - id-SupportedTAs(64), - id-TimeToWait(65), - id-uEaggregateMaximumBitrate(66), - id-TAI(67), - id-E-RABReleaseListBearerRelComp(69), - id-cdma2000PDU(70), - id-cdma2000RATType(71), - id-cdma2000SectorID(72), - id-SecurityKey(73), - id-UERadioCapability(74), - id-GUMMEI-ID(75), - id-E-RABInformationListItem(78), - id-Direct-Forwarding-Path-Availability(79), - id-UEIdentityIndexValue(80), - id-cdma2000HOStatus(83), - id-cdma2000HORequiredIndication(84), - id-E-UTRAN-Trace-ID(86), - id-RelativeMMECapacity(87), - id-SourceMME-UE-S1AP-ID(88), - id-Bearers-SubjectToStatusTransfer-Item(89), - id-eNB-StatusTransfer-TransparentContainer(90), - id-UE-associatedLogicalS1-ConnectionItem(91), - id-ResetType(92), - id-UE-associatedLogicalS1-ConnectionListResAck(93), - id-E-RABToBeSwitchedULItem(94), - id-E-RABToBeSwitchedULList(95), - id-S-TMSI(96), - id-cdma2000OneXRAND(97), - id-RequestType(98), - id-UE-S1AP-IDs(99), - id-EUTRAN-CGI(100), - id-OverloadResponse(101), - id-cdma2000OneXSRVCCInfo(102), - id-E-RABFailedToBeReleasedList(103), - id-Source-ToTarget-TransparentContainer(104), - id-ServedGUMMEIs(105), - id-SubscriberProfileIDforRFP(106), - id-UESecurityCapabilities(107), - id-CSFallbackIndicator(108), - id-CNDomain(109), - id-E-RABReleasedList(110), - id-MessageIdentifier(111), - id-SerialNumber(112), - id-WarningAreaList(113), - id-RepetitionPeriod(114), - id-NumberofBroadcastRequest(115), - id-WarningType(116), - id-WarningSecurityInfo(117), - id-DataCodingScheme(118), - id-WarningMessageContents(119), - id-BroadcastCompletedAreaList(120), - id-Inter-SystemInformationTransferTypeEDT(121), - id-Inter-SystemInformationTransferTypeMDT(122), - id-Target-ToSource-TransparentContainer(123), - id-SRVCCOperationPossible(124), - id-SRVCCHOIndication(125), - id-NAS-DownlinkCount(126), - id-CSG-Id(127), - id-CSG-IdList(128), - id-SONConfigurationTransferECT(129), - id-SONConfigurationTransferMCT(130), - id-TraceCollectionEntityIPAddress(131), - id-MSClassmark2(132), - id-MSClassmark3(133), - id-RRC-Establishment-Cause(134), - id-NASSecurityParametersfromE-UTRAN(135), - id-NASSecurityParameterstoE-UTRAN(136), - id-DefaultPagingDRX(137), - id-Source-ToTarget-TransparentContainer-Secondary(138), - id-Target-ToSource-TransparentContainer-Secondary(139), - id-EUTRANRoundTripDelayEstimationInfo(140), - id-BroadcastCancelledAreaList(141), - id-ConcurrentWarningMessageIndicator(142), - id-Data-Forwarding-Not-Possible(143), - id-ExtendedRepetitionPeriod(144), - id-CellAccessMode(145), - id-CSGMembershipStatus(146), - id-LPPa-PDU(147), - id-Routing-ID(148), - id-Time-Synchronization-Info(149), - id-PS-ServiceNotAvailable(150), - id-RegisteredLAI(159) -} (0..65535) - -TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessfull-outcome } - -END \ No newline at end of file diff --git a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-Constants.asn b/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-Constants.asn deleted file mode 100644 index d8b56eebb8..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-Constants.asn +++ /dev/null @@ -1,265 +0,0 @@ --- ************************************************************** --- --- Constant definitions --- --- ************************************************************** - -S1AP-Constants { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Constants (4) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - ProcedureCode, - ProtocolIE-ID - -FROM S1AP-CommonDataTypes; - - --- ************************************************************** --- --- Elementary Procedures --- --- ************************************************************** - -id-HandoverPreparation ProcedureCode ::= 0 -id-HandoverResourceAllocation ProcedureCode ::= 1 -id-HandoverNotification ProcedureCode ::= 2 -id-PathSwitchRequest ProcedureCode ::= 3 -id-HandoverCancel ProcedureCode ::= 4 -id-E-RABSetup ProcedureCode ::= 5 -id-E-RABModify ProcedureCode ::= 6 -id-E-RABRelease ProcedureCode ::= 7 -id-E-RABReleaseIndication ProcedureCode ::= 8 -id-InitialContextSetup ProcedureCode ::= 9 -id-Paging ProcedureCode ::= 10 -id-downlinkNASTransport ProcedureCode ::= 11 -id-initialUEMessage ProcedureCode ::= 12 -id-uplinkNASTransport ProcedureCode ::= 13 -id-Reset ProcedureCode::= 14 -id-ErrorIndication ProcedureCode ::= 15 -id-NASNonDeliveryIndication ProcedureCode ::= 16 -id-S1Setup ProcedureCode ::= 17 -id-UEContextReleaseRequest ProcedureCode ::= 18 -id-DownlinkS1cdma2000tunneling ProcedureCode ::= 19 -id-UplinkS1cdma2000tunneling ProcedureCode ::= 20 -id-UEContextModification ProcedureCode ::= 21 -id-UECapabilityInfoIndication ProcedureCode ::= 22 -id-UEContextRelease ProcedureCode ::= 23 -id-eNBStatusTransfer ProcedureCode ::= 24 -id-MMEStatusTransfer ProcedureCode ::= 25 -id-DeactivateTrace ProcedureCode ::= 26 -id-TraceStart ProcedureCode ::= 27 -id-TraceFailureIndication ProcedureCode ::= 28 -id-ENBConfigurationUpdate ProcedureCode ::= 29 -id-MMEConfigurationUpdate ProcedureCode ::= 30 -id-LocationReportingControl ProcedureCode ::= 31 -id-LocationReportingFailureIndication ProcedureCode ::= 32 -id-LocationReport ProcedureCode ::= 33 -id-OverloadStart ProcedureCode ::= 34 -id-OverloadStop ProcedureCode ::= 35 -id-WriteReplaceWarning ProcedureCode ::= 36 -id-eNBDirectInformationTransfer ProcedureCode ::= 37 -id-MMEDirectInformationTransfer ProcedureCode ::= 38 -id-PrivateMessage ProcedureCode ::= 39 -id-eNBConfigurationTransfer ProcedureCode ::= 40 -id-MMEConfigurationTransfer ProcedureCode ::= 41 -id-CellTrafficTrace ProcedureCode ::= 42 -id-Kill ProcedureCode ::= 43 -id-downlinkUEAssociatedLPPaTransport ProcedureCode ::= 44 -id-uplinkUEAssociatedLPPaTransport ProcedureCode ::= 45 -id-downlinkNonUEAssociatedLPPaTransport ProcedureCode ::= 46 -id-uplinkNonUEAssociatedLPPaTransport ProcedureCode ::= 47 - --- ************************************************************** --- --- Extension constants --- --- ************************************************************** - -maxPrivateIEs INTEGER ::= 65535 -maxProtocolExtensions INTEGER ::= 65535 -maxProtocolIEs INTEGER ::= 65535 --- ************************************************************** --- --- Lists --- --- ************************************************************** - -maxNrOfCSGs INTEGER ::= 256 -maxNrOfE-RABs INTEGER ::= 256 -maxnoofTAIs INTEGER ::= 256 -maxnoofTACs INTEGER ::= 256 -maxNrOfErrors INTEGER ::= 256 -maxnoofBPLMNs INTEGER ::= 6 -maxnoofPLMNsPerMME INTEGER ::= 32 -maxnoofEPLMNs INTEGER ::= 15 -maxnoofEPLMNsPlusOne INTEGER ::= 16 -maxnoofForbLACs INTEGER ::= 4096 -maxnoofForbTACs INTEGER ::= 4096 -maxNrOfIndividualS1ConnectionsToReset INTEGER ::= 256 -maxnoofCells INTEGER ::= 16 -maxnoofTAIforWarning INTEGER ::= 65535 -maxnoofCellID INTEGER ::= 65535 -maxnoofEmergencyAreaID INTEGER ::= 65535 -maxnoofCellinTAI INTEGER ::= 65535 -maxnoofCellinEAI INTEGER ::= 65535 -maxnoofeNBX2TLAs INTEGER ::= 2 -maxnoofRATs INTEGER ::= 8 -maxnoofGroupIDs INTEGER ::= 65535 -maxnoofMMECs INTEGER ::= 256 - - - --- ************************************************************** --- --- IEs --- --- ************************************************************** - -id-MME-UE-S1AP-ID ProtocolIE-ID ::= 0 -id-HandoverType ProtocolIE-ID ::= 1 -id-Cause ProtocolIE-ID ::= 2 -id-SourceID ProtocolIE-ID ::= 3 -id-TargetID ProtocolIE-ID ::= 4 -id-eNB-UE-S1AP-ID ProtocolIE-ID ::= 8 -id-E-RABSubjecttoDataForwardingList ProtocolIE-ID ::= 12 -id-E-RABtoReleaseListHOCmd ProtocolIE-ID ::= 13 -id-E-RABDataForwardingItem ProtocolIE-ID ::= 14 -id-E-RABReleaseItemBearerRelComp ProtocolIE-ID ::= 15 -id-E-RABToBeSetupListBearerSUReq ProtocolIE-ID ::= 16 -id-E-RABToBeSetupItemBearerSUReq ProtocolIE-ID ::= 17 -id-E-RABAdmittedList ProtocolIE-ID ::= 18 -id-E-RABFailedToSetupListHOReqAck ProtocolIE-ID ::= 19 -id-E-RABAdmittedItem ProtocolIE-ID ::= 20 -id-E-RABFailedtoSetupItemHOReqAck ProtocolIE-ID ::= 21 -id-E-RABToBeSwitchedDLList ProtocolIE-ID ::= 22 -id-E-RABToBeSwitchedDLItem ProtocolIE-ID ::= 23 -id-E-RABToBeSetupListCtxtSUReq ProtocolIE-ID ::= 24 -id-TraceActivation ProtocolIE-ID ::= 25 -id-NAS-PDU ProtocolIE-ID ::= 26 -id-E-RABToBeSetupItemHOReq ProtocolIE-ID ::= 27 -id-E-RABSetupListBearerSURes ProtocolIE-ID ::= 28 -id-E-RABFailedToSetupListBearerSURes ProtocolIE-ID ::= 29 -id-E-RABToBeModifiedListBearerModReq ProtocolIE-ID ::= 30 -id-E-RABModifyListBearerModRes ProtocolIE-ID ::= 31 -id-E-RABFailedToModifyList ProtocolIE-ID ::= 32 -id-E-RABToBeReleasedList ProtocolIE-ID ::= 33 -id-E-RABFailedToReleaseList ProtocolIE-ID ::= 34 -id-E-RABItem ProtocolIE-ID ::= 35 -id-E-RABToBeModifiedItemBearerModReq ProtocolIE-ID ::= 36 -id-E-RABModifyItemBearerModRes ProtocolIE-ID ::= 37 -id-E-RABReleaseItem ProtocolIE-ID ::= 38 -id-E-RABSetupItemBearerSURes ProtocolIE-ID ::= 39 -id-SecurityContext ProtocolIE-ID ::= 40 -id-HandoverRestrictionList ProtocolIE-ID ::= 41 -id-UEPagingID ProtocolIE-ID ::= 43 -id-pagingDRX ProtocolIE-ID ::= 44 -id-TAIList ProtocolIE-ID ::= 46 -id-TAIItem ProtocolIE-ID ::= 47 -id-E-RABFailedToSetupListCtxtSURes ProtocolIE-ID ::= 48 -id-E-RABReleaseItemHOCmd ProtocolIE-ID ::= 49 -id-E-RABSetupItemCtxtSURes ProtocolIE-ID ::= 50 -id-E-RABSetupListCtxtSURes ProtocolIE-ID ::= 51 -id-E-RABToBeSetupItemCtxtSUReq ProtocolIE-ID ::= 52 -id-E-RABToBeSetupListHOReq ProtocolIE-ID ::= 53 -id-GERANtoLTEHOInformationRes ProtocolIE-ID ::= 55 -id-UTRANtoLTEHOInformationRes ProtocolIE-ID ::= 57 -id-CriticalityDiagnostics ProtocolIE-ID ::= 58 -id-Global-ENB-ID ProtocolIE-ID ::= 59 -id-eNBname ProtocolIE-ID ::= 60 -id-MMEname ProtocolIE-ID ::= 61 -id-ServedPLMNs ProtocolIE-ID ::= 63 -id-SupportedTAs ProtocolIE-ID ::= 64 -id-TimeToWait ProtocolIE-ID ::= 65 -id-uEaggregateMaximumBitrate ProtocolIE-ID ::= 66 -id-TAI ProtocolIE-ID ::= 67 -id-E-RABReleaseListBearerRelComp ProtocolIE-ID ::= 69 -id-cdma2000PDU ProtocolIE-ID ::= 70 -id-cdma2000RATType ProtocolIE-ID ::= 71 -id-cdma2000SectorID ProtocolIE-ID ::= 72 -id-SecurityKey ProtocolIE-ID ::= 73 -id-UERadioCapability ProtocolIE-ID ::= 74 -id-GUMMEI-ID ProtocolIE-ID ::= 75 -id-E-RABInformationListItem ProtocolIE-ID ::= 78 -id-Direct-Forwarding-Path-Availability ProtocolIE-ID ::= 79 -id-UEIdentityIndexValue ProtocolIE-ID ::= 80 -id-cdma2000HOStatus ProtocolIE-ID ::= 83 -id-cdma2000HORequiredIndication ProtocolIE-ID ::= 84 -id-E-UTRAN-Trace-ID ProtocolIE-ID ::= 86 -id-RelativeMMECapacity ProtocolIE-ID ::= 87 -id-SourceMME-UE-S1AP-ID ProtocolIE-ID ::= 88 -id-Bearers-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 89 -id-eNB-StatusTransfer-TransparentContainer ProtocolIE-ID ::= 90 -id-UE-associatedLogicalS1-ConnectionItem ProtocolIE-ID ::= 91 -id-ResetType ProtocolIE-ID ::= 92 -id-UE-associatedLogicalS1-ConnectionListResAck ProtocolIE-ID ::= 93 -id-E-RABToBeSwitchedULItem ProtocolIE-ID ::= 94 -id-E-RABToBeSwitchedULList ProtocolIE-ID ::= 95 -id-S-TMSI ProtocolIE-ID ::= 96 -id-cdma2000OneXRAND ProtocolIE-ID ::= 97 -id-RequestType ProtocolIE-ID ::= 98 -id-UE-S1AP-IDs ProtocolIE-ID ::= 99 -id-EUTRAN-CGI ProtocolIE-ID ::= 100 -id-OverloadResponse ProtocolIE-ID ::= 101 -id-cdma2000OneXSRVCCInfo ProtocolIE-ID ::= 102 -id-E-RABFailedToBeReleasedList ProtocolIE-ID ::= 103 -id-Source-ToTarget-TransparentContainer ProtocolIE-ID ::= 104 -id-ServedGUMMEIs ProtocolIE-ID ::= 105 -id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 106 -id-UESecurityCapabilities ProtocolIE-ID ::= 107 -id-CSFallbackIndicator ProtocolIE-ID ::= 108 -id-CNDomain ProtocolIE-ID ::= 109 -id-E-RABReleasedList ProtocolIE-ID ::= 110 -id-MessageIdentifier ProtocolIE-ID ::= 111 -id-SerialNumber ProtocolIE-ID ::= 112 -id-WarningAreaList ProtocolIE-ID ::= 113 -id-RepetitionPeriod ProtocolIE-ID ::= 114 -id-NumberofBroadcastRequest ProtocolIE-ID ::= 115 -id-WarningType ProtocolIE-ID ::= 116 -id-WarningSecurityInfo ProtocolIE-ID ::= 117 -id-DataCodingScheme ProtocolIE-ID ::= 118 -id-WarningMessageContents ProtocolIE-ID ::= 119 -id-BroadcastCompletedAreaList ProtocolIE-ID ::= 120 -id-Inter-SystemInformationTransferTypeEDT ProtocolIE-ID ::= 121 -id-Inter-SystemInformationTransferTypeMDT ProtocolIE-ID ::= 122 -id-Target-ToSource-TransparentContainer ProtocolIE-ID ::= 123 -id-SRVCCOperationPossible ProtocolIE-ID ::= 124 -id-SRVCCHOIndication ProtocolIE-ID ::= 125 -id-NAS-DownlinkCount ProtocolIE-ID ::= 126 -id-CSG-Id ProtocolIE-ID ::= 127 -id-CSG-IdList ProtocolIE-ID ::= 128 -id-SONConfigurationTransferECT ProtocolIE-ID ::= 129 -id-SONConfigurationTransferMCT ProtocolIE-ID ::= 130 -id-TraceCollectionEntityIPAddress ProtocolIE-ID ::= 131 -id-MSClassmark2 ProtocolIE-ID ::= 132 -id-MSClassmark3 ProtocolIE-ID ::= 133 -id-RRC-Establishment-Cause ProtocolIE-ID ::= 134 -id-NASSecurityParametersfromE-UTRAN ProtocolIE-ID ::= 135 -id-NASSecurityParameterstoE-UTRAN ProtocolIE-ID ::= 136 -id-DefaultPagingDRX ProtocolIE-ID ::= 137 -id-Source-ToTarget-TransparentContainer-Secondary ProtocolIE-ID ::= 138 -id-Target-ToSource-TransparentContainer-Secondary ProtocolIE-ID ::= 139 -id-EUTRANRoundTripDelayEstimationInfo ProtocolIE-ID ::= 140 -id-BroadcastCancelledAreaList ProtocolIE-ID ::= 141 -id-ConcurrentWarningMessageIndicator ProtocolIE-ID ::= 142 -id-Data-Forwarding-Not-Possible ProtocolIE-ID ::= 143 -id-ExtendedRepetitionPeriod ProtocolIE-ID ::= 144 -id-CellAccessMode ProtocolIE-ID ::= 145 -id-CSGMembershipStatus ProtocolIE-ID ::= 146 -id-LPPa-PDU ProtocolIE-ID ::= 147 -id-Routing-ID ProtocolIE-ID ::= 148 -id-Time-Synchronization-Info ProtocolIE-ID ::= 149 -id-PS-ServiceNotAvailable ProtocolIE-ID ::= 150 -id-RegisteredLAI ProtocolIE-ID ::= 159 - -END \ No newline at end of file diff --git a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-Containers.asn b/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-Containers.asn deleted file mode 100644 index 1e356a29a4..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-Containers.asn +++ /dev/null @@ -1,197 +0,0 @@ --- ************************************************************** --- --- Container definitions --- --- ************************************************************** - -S1AP-Containers { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Containers (5) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - Criticality, - Presence, - PrivateIE-ID, - ProtocolExtensionID, - ProtocolIE-ID -FROM S1AP-CommonDataTypes - - maxPrivateIEs, - maxProtocolExtensions, - maxProtocolIEs -FROM S1AP-Constants; - --- ************************************************************** --- --- Class Definition for Protocol IEs --- --- ************************************************************** - -S1AP-PROTOCOL-IES ::= CLASS { - &id ProtocolIE-ID UNIQUE, - &criticality Criticality, - &Value, - &presence Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - TYPE &Value - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Protocol IEs --- --- ************************************************************** - -S1AP-PROTOCOL-IES-PAIR ::= CLASS { - &id ProtocolIE-ID UNIQUE, - &firstCriticality Criticality, - &FirstValue, - &secondCriticality Criticality, - &SecondValue, - &presence Presence -} -WITH SYNTAX { - ID &id - FIRST CRITICALITY &firstCriticality - FIRST TYPE &FirstValue - SECOND CRITICALITY &secondCriticality - SECOND TYPE &SecondValue - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Protocol Extensions --- --- ************************************************************** - -S1AP-PROTOCOL-EXTENSION ::= CLASS { - &id ProtocolExtensionID UNIQUE, - &criticality Criticality, - &Extension, - &presence Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - EXTENSION &Extension - PRESENCE &presence -} - --- ************************************************************** --- --- Class Definition for Private IEs --- --- ************************************************************** - -S1AP-PRIVATE-IES ::= CLASS { - &id PrivateIE-ID, - &criticality Criticality, - &Value, - &presence Presence -} -WITH SYNTAX { - ID &id - CRITICALITY &criticality - TYPE &Value - PRESENCE &presence -} - --- ************************************************************** --- --- Container for Protocol IEs --- --- ************************************************************** - -ProtocolIE-Container {S1AP-PROTOCOL-IES : IEsSetParam} ::= - SEQUENCE (SIZE (0..maxProtocolIEs)) OF - ProtocolIE-Field {{IEsSetParam}} - -ProtocolIE-SingleContainer {S1AP-PROTOCOL-IES : IEsSetParam} ::= - ProtocolIE-Field {{IEsSetParam}} - -ProtocolIE-Field {S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { - id S1AP-PROTOCOL-IES.&id ({IEsSetParam}), - criticality S1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), - value S1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) -} - --- ************************************************************** --- --- Container for Protocol IE Pairs --- --- ************************************************************** - -ProtocolIE-ContainerPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= - SEQUENCE (SIZE (0..maxProtocolIEs)) OF - ProtocolIE-FieldPair {{IEsSetParam}} - -ProtocolIE-FieldPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { - id S1AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), - firstCriticality S1AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), - firstValue S1AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), - secondCriticality S1AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), - secondValue S1AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) -} - --- ************************************************************** --- --- Container Lists for Protocol IE Containers --- --- ************************************************************** - -ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES : IEsSetParam} ::= - SEQUENCE (SIZE (lowerBound..upperBound)) OF - ProtocolIE-SingleContainer {{IEsSetParam}} - -ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= - SEQUENCE (SIZE (lowerBound..upperBound)) OF - ProtocolIE-ContainerPair {{IEsSetParam}} - --- ************************************************************** --- --- Container for Protocol Extensions --- --- ************************************************************** - -ProtocolExtensionContainer {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= - SEQUENCE (SIZE (1..maxProtocolExtensions)) OF - ProtocolExtensionField {{ExtensionSetParam}} - -ProtocolExtensionField {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { - id S1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), - criticality S1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), - extensionValue S1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) -} - --- ************************************************************** --- --- Container for Private IEs --- --- ************************************************************** - -PrivateIE-Container {S1AP-PRIVATE-IES : IEsSetParam } ::= - SEQUENCE (SIZE (1.. maxPrivateIEs)) OF - PrivateIE-Field {{IEsSetParam}} - -PrivateIE-Field {S1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { - id S1AP-PRIVATE-IES.&id ({IEsSetParam}), - criticality S1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), - value S1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) -} - -END \ No newline at end of file diff --git a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-IEs.asn b/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-IEs.asn deleted file mode 100644 index 535aa91ee0..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-IEs.asn +++ /dev/null @@ -1,1213 +0,0 @@ --- ************************************************************** --- --- Information Element Definitions --- --- ************************************************************** - -S1AP-IEs { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-IEs (2) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - id-E-RABInformationListItem, - id-E-RABItem, - id-Bearers-SubjectToStatusTransfer-Item, - id-Time-Synchronization-Info, - maxNrOfCSGs, - maxNrOfE-RABs, - maxNrOfErrors, - maxnoofBPLMNs, - maxnoofPLMNsPerMME, - maxnoofTACs, - maxnoofEPLMNs, - maxnoofEPLMNsPlusOne, - maxnoofForbLACs, - maxnoofForbTACs, - maxnoofCells, - maxnoofCellID, - maxnoofEmergencyAreaID, - maxnoofTAIforWarning, - maxnoofCellinTAI, - maxnoofCellinEAI, - maxnoofeNBX2TLAs, - maxnoofRATs, - maxnoofGroupIDs, - maxnoofMMECs, - maxProtocolExtensions, - maxnoofTAIs, - maxNrOfIndividualS1ConnectionsToReset - - -FROM S1AP-Constants - - IE -FROM S1AP-PDU - - Criticality, - ProcedureCode, - ProtocolIE-ID, - TriggeringMessage -FROM S1AP-CommonDataTypes; - -IE-Extensions ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF IE - --- A - - -AllocationAndRetentionPriority ::= SEQUENCE { - priorityLevel PriorityLevel, - pre-emptionCapability Pre-emptionCapability, - pre-emptionVulnerability Pre-emptionVulnerability, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- B - -Bearers-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxNrOfE-RABs)) OF IE - -Bearers-SubjectToStatusTransfer-Item ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - uL-COUNTvalue COUNTvalue, - dL-COUNTvalue COUNTvalue, - receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -BitRate ::= INTEGER (0..10000000000) - -BPLMNs ::= SEQUENCE (SIZE(1.. maxnoofBPLMNs)) OF PLMNidentity - -BroadcastCancelledAreaList ::= CHOICE { - cellID-Cancelled CellID-Cancelled, - tAI-Cancelled TAI-Cancelled, - emergencyAreaID-Cancelled EmergencyAreaID-Cancelled, - ... -} - -BroadcastCompletedAreaList ::= CHOICE { - cellID-Broadcast CellID-Broadcast, - tAI-Broadcast TAI-Broadcast, - emergencyAreaID-Broadcast EmergencyAreaID-Broadcast, - ... -} - - --- C - -CancelledCellinEAI ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CancelledCellinEAI-Item - -CancelledCellinEAI-Item ::= SEQUENCE { - eCGI EUTRAN-CGI, - numberOfBroadcasts NumberOfBroadcasts, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CancelledCellinTAI ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CancelledCellinTAI-Item - -CancelledCellinTAI-Item ::= SEQUENCE{ - eCGI EUTRAN-CGI, - numberOfBroadcasts NumberOfBroadcasts, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -Cause ::= CHOICE { - radioNetwork CauseRadioNetwork, - transport CauseTransport, - nas CauseNas, - protocol CauseProtocol, - misc CauseMisc, - ... -} - -CauseMisc ::= ENUMERATED { - control-processing-overload, - not-enough-user-plane-processing-resources, - hardware-failure, - om-intervention, - unspecified, - unknown-PLMN, -... -} - -CauseProtocol ::= ENUMERATED { - transfer-syntax-error, - abstract-syntax-error-reject, - abstract-syntax-error-ignore-and-notify, - message-not-compatible-with-receiver-state, - semantic-error, - abstract-syntax-error-falsely-constructed-message, - unspecified, - ... -} - -CauseRadioNetwork ::= ENUMERATED { - unspecified, - tx2relocoverall-expiry, - successful-handover, - release-due-to-eutran-generated-reason, - handover-cancelled, - partial-handover, - ho-failure-in-target-EPC-eNB-or-target-system, - ho-target-not-allowed, - tS1relocoverall-expiry, - tS1relocprep-expiry, - cell-not-available, - unknown-targetID, - no-radio-resources-available-in-target-cell, - unknown-mme-ue-s1ap-id, - unknown-enb-ue-s1ap-id, - unknown-pair-ue-s1ap-id, - handover-desirable-for-radio-reason, - time-critical-handover, - resource-optimisation-handover, - reduce-load-in-serving-cell, - user-inactivity, - radio-connection-with-ue-lost, - load-balancing-tau-required, - cs-fallback-triggered, - ue-not-available-for-ps-service, - radio-resources-not-available, - failure-in-radio-interface-procedure, - invalid-qos-combination, - interrat-redirection, - interaction-with-other-procedure, - unknown-E-RAB-ID, - multiple-E-RAB-ID-instances, - encryption-and-or-integrity-protection-algorithms-not-supported, - s1-intra-system-handover-triggered, - s1-inter-system-handover-triggered, - x2-handover-triggered, - ..., - redirection-towards-1xRTT, - not-supported-QCI-value, - invalid-CSG-Id - -} - -CauseTransport ::= ENUMERATED { - transport-resource-unavailable, - unspecified, - ... -} - -CauseNas ::= ENUMERATED { - normal-release, - authentication-failure, - detach, - unspecified, - ..., - csg-subscription-expiry -} - -CellAccessMode ::= ENUMERATED { - hybrid, - ... -} - -CellIdentity ::= BIT STRING (SIZE (28)) - -CellID-Broadcast ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF CellID-Broadcast-Item - -CellID-Broadcast-Item ::= SEQUENCE { - eCGI EUTRAN-CGI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CellID-Cancelled::= SEQUENCE (SIZE(1..maxnoofCellID)) OF CellID-Cancelled-Item - -CellID-Cancelled-Item ::= SEQUENCE { - eCGI EUTRAN-CGI, - numberOfBroadcasts NumberOfBroadcasts, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -Cdma2000PDU ::= OCTET STRING - -Cdma2000RATType ::= ENUMERATED { - hRPD, - onexRTT, - ... -} - -Cdma2000SectorID ::= OCTET STRING - -Cdma2000HOStatus ::= ENUMERATED { - hOSuccess, - hOFailure, - ... -} - -Cdma2000HORequiredIndication ::= ENUMERATED { - true, - ... -} - -Cdma2000OneXSRVCCInfo ::= SEQUENCE { - cdma2000OneXMEID Cdma2000OneXMEID, - cdma2000OneXMSI Cdma2000OneXMSI, - cdma2000OneXPilot Cdma2000OneXPilot, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -Cdma2000OneXMEID ::= OCTET STRING - -Cdma2000OneXMSI ::= OCTET STRING - -Cdma2000OneXPilot ::= OCTET STRING - -Cdma2000OneXRAND ::= OCTET STRING - - -Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ...} - -CellType ::= SEQUENCE { - cell-Size Cell-Size, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CGI ::= SEQUENCE { - pLMNidentity PLMNidentity, - lAC LAC, - cI CI, - rAC RAC OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CI ::= OCTET STRING (SIZE (2)) - -CNDomain ::= ENUMERATED { - ps, - cs -} - -ConcurrentWarningMessageIndicator ::= ENUMERATED { - true -} -CSFallbackIndicator ::= ENUMERATED { - cs-fallback-required, - ..., - cs-fallback-high-priority -} - -CSG-Id ::= BIT STRING (SIZE (27)) - - -CSG-IdList ::= SEQUENCE (SIZE (1..maxNrOfCSGs)) OF CSG-IdList-Item - -CSG-IdList-Item ::= SEQUENCE { - cSG-Id CSG-Id, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CSGMembershipStatus ::= ENUMERATED { - member, - not-member -} - - -COUNTvalue ::= SEQUENCE { - pDCP-SN PDCP-SN, - hFN HFN, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CriticalityDiagnostics ::= SEQUENCE { - procedureCode ProcedureCode OPTIONAL, - triggeringMessage TriggeringMessage OPTIONAL, - procedureCriticality Criticality OPTIONAL, - iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF CriticalityDiagnostics-IE-Item - -CriticalityDiagnostics-IE-Item ::= SEQUENCE { - iECriticality Criticality, - iE-ID ProtocolIE-ID, - typeOfError TypeOfError, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- D - -DataCodingScheme ::= BIT STRING (SIZE (8)) - -DL-Forwarding ::= ENUMERATED { - dL-Forwarding-proposed, - ... -} - -Direct-Forwarding-Path-Availability ::= ENUMERATED { - directPathAvailable, - ... -} - -Data-Forwarding-Not-Possible ::= ENUMERATED { - data-Forwarding-not-Possible, - ... -} - --- E - -ECGIList ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF EUTRAN-CGI - -EmergencyAreaIDList ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID - -EmergencyAreaID ::= OCTET STRING (SIZE (3)) - -EmergencyAreaID-Broadcast ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID-Broadcast-Item - -EmergencyAreaID-Broadcast-Item ::= SEQUENCE { - emergencyAreaID EmergencyAreaID, - completedCellinEAI CompletedCellinEAI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -EmergencyAreaID-Cancelled ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID-Cancelled-Item - -EmergencyAreaID-Cancelled-Item ::= SEQUENCE { - emergencyAreaID EmergencyAreaID, - cancelledCellinEAI CancelledCellinEAI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABList ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeSwitchedULList ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeSwitchedDLList ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeSetupListBearerSUReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABDataForwardingList ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeSetupListHOReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABAdmittedList ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABFailedtoSetupListHOReqAck ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeSetupListCtxtSUReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABSetupListBearerSURes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABToBeModifiedListBearerModReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABSetupListCtxtSURes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABReleaseListBearerRelComp ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABModifyListBearerModRes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF IE - -E-RABModifyItemBearerModRes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSetupItemCtxtSUReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABlevelQoSParameters E-RABLevelQoSParameters, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - nAS-PDU NAS-PDU OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeModifiedItemBearerModReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABLevelQoSParameters E-RABLevelQoSParameters, - nAS-PDU NAS-PDU, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABSetupItemCtxtSURes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABSetupItemBearerSURes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSwitchedDLItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSwitchedULItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSetupItemHOReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - e-RABlevelQosParameters E-RABLevelQoSParameters, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSetupItemBearerSUReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABlevelQoSParameters E-RABLevelQoSParameters, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - nAS-PDU NAS-PDU, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABDataForwardingItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - dL-transportLayerAddress TransportLayerAddress OPTIONAL, - dL-gTP-TEID GTP-TEID OPTIONAL, - uL-TransportLayerAddress TransportLayerAddress OPTIONAL, - uL-GTP-TEID GTP-TEID OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABAdmittedItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - dL-transportLayerAddress TransportLayerAddress OPTIONAL, - dL-gTP-TEID GTP-TEID OPTIONAL, - uL-TransportLayerAddress TransportLayerAddress OPTIONAL, - uL-GTP-TEID GTP-TEID OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABFailedToSetupItemHOReqAck ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - cause Cause, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABReleaseItemBearerRelComp ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CompletedCellinEAI ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CompletedCellinEAI-Item - -CompletedCellinEAI-Item ::= SEQUENCE { - eCGI EUTRAN-CGI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ENB-ID ::= CHOICE { - macroENB-ID BIT STRING (SIZE(20)), - homeENB-ID BIT STRING (SIZE(28)), - ... -} - -GERAN-Cell-ID ::= SEQUENCE { - lAI LAI, - rAC RAC, - cI CI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -Global-ENB-ID ::= SEQUENCE { - pLMNidentity PLMNidentity, - eNB-ID ENB-ID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ENB-StatusTransfer-TransparentContainer ::= SEQUENCE { - bearers-SubjectToStatusTransfer-List Bearers-SubjectToStatusTransfer-List, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ENB-UE-S1AP-ID ::= INTEGER (0..16777215) - -ENBname ::= PrintableString (SIZE (1..150,...)) - -ENBX2TLAs ::= SEQUENCE (SIZE(1.. maxnoofeNBX2TLAs)) OF TransportLayerAddress - -EncryptionAlgorithms ::= BIT STRING (SIZE (16,...)) - -EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMNidentity -EventType ::= ENUMERATED { - direct, - change-of-serve-cell, - stop-change-of-serve-cell, - ... -} - -E-RAB-ID ::= INTEGER (0..15, ...) - -E-RABInformationListItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - dL-Forwarding DL-Forwarding OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - cause Cause, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABLevelQoSParameters ::= SEQUENCE { - qCI QCI, - allocationRetentionPriority AllocationAndRetentionPriority, - gbrQosInformation GBR-QosInformation OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -EUTRAN-CGI ::= SEQUENCE { - pLMNidentity PLMNidentity, - cell-ID CellIdentity, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -EUTRANRoundTripDelayEstimationInfo ::= INTEGER (0..2047) - -ExtendedRNC-ID ::= INTEGER (4096..65535) - -ExtendedRepetitionPeriod ::= INTEGER (4096..131071) - --- F - -ForbiddenInterRATs ::= ENUMERATED { - all, - geran, - utran, - cdma2000, - ..., - geranandutran, - cdma2000andutran - -} - -ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item - -ForbiddenTAs-Item ::= SEQUENCE { - pLMN-Identity PLMNidentity, - forbiddenTACs ForbiddenTACs, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC - -ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item - -ForbiddenLAs-Item ::= SEQUENCE { - pLMN-Identity PLMNidentity, - forbiddenLACs ForbiddenLACs, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC - --- G - -GBR-QosInformation ::= SEQUENCE { - e-RAB-MaximumBitrateDL BitRate, - e-RAB-MaximumBitrateUL BitRate, - e-RAB-GuaranteedBitrateDL BitRate, - e-RAB-GuaranteedBitrateUL BitRate, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -GTP-TEID ::= OCTET STRING (SIZE (4)) - -GUMMEI ::= SEQUENCE { - pLMN-Identity PLMNidentity, - mME-Group-ID MME-Group-ID, - mME-Code MME-Code, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- H - -HandoverRestrictionList ::= SEQUENCE { - servingPLMN PLMNidentity, - equivalentPLMNs EPLMNs OPTIONAL, - forbiddenTAs ForbiddenTAs OPTIONAL, - forbiddenLAs ForbiddenLAs OPTIONAL, - forbiddenInterRATs ForbiddenInterRATs OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -HandoverType ::= ENUMERATED { - intralte, - ltetoutran, - ltetogeran, - utrantolte, - gerantolte, - ... -} - -HFN ::= INTEGER (0..1048575) - --- I - -IMSI ::= OCTET STRING (SIZE (3..8)) - -IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) - -InterfacesToTrace ::= BIT STRING (SIZE (8)) - -Inter-SystemInformationTransferType ::= CHOICE { - rIMTransfer RIMTransfer, - ... -} - --- J --- K --- L - - -LAC ::= OCTET STRING (SIZE (2)) - -LAI ::= SEQUENCE { - pLMNidentity PLMNidentity, - lAC LAC, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -LastVisitedCell-Item ::= CHOICE { - e-UTRAN-Cell LastVisitedEUTRANCellInformation, - uTRAN-Cell LastVisitedUTRANCellInformation, - gERAN-Cell LastVisitedGERANCellInformation, - ... -} -LastVisitedEUTRANCellInformation ::= SEQUENCE { - global-Cell-ID EUTRAN-CGI, - cellType CellType, - time-UE-StayedInCell Time-UE-StayedInCell, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -LastVisitedUTRANCellInformation ::= OCTET STRING - -LastVisitedGERANCellInformation ::= CHOICE { - undefined NULL, - ... -} - -L3-Information ::= OCTET STRING - -LPPa-PDU ::= OCTET STRING - --- M - -MessageIdentifier ::= BIT STRING (SIZE (16)) - -MMEname ::= PrintableString (SIZE (1..150,...)) - -MME-Group-ID ::= OCTET STRING (SIZE (2)) - -MME-Code ::= OCTET STRING (SIZE (1)) - -MME-UE-S1AP-ID ::= INTEGER (0..4294967295) -M-TMSI ::= OCTET STRING (SIZE (4)) - -MSClassmark2 ::= OCTET STRING -MSClassmark3 ::= OCTET STRING - --- N - -NAS-PDU ::= OCTET STRING - -NASSecurityParametersfromE-UTRAN ::= OCTET STRING - -NASSecurityParameterstoE-UTRAN ::= OCTET STRING - -NumberofBroadcastRequest ::= INTEGER (0..65535) - -NumberOfBroadcasts ::= INTEGER (0..65535) - --- O -OldBSS-ToNewBSS-Information ::= OCTET STRING - -OverloadAction ::= ENUMERATED { -reject-non-emergency-mo-dt, -reject-all-rrc-cr-signalling, -permit-emergency-sessions-and-mobile-terminated-services-only, - ... -} - -OverloadResponse ::= CHOICE { - overloadAction OverloadAction, - ... -} - - --- P - -PagingDRX ::= ENUMERATED { - v32, - v64, - v128, - v256, - ... - } - -PDCP-SN ::= INTEGER (0..4095) - -PLMNidentity ::= TBCD-STRING - -Pre-emptionCapability ::= ENUMERATED { - shall-not-trigger-pre-emption, - may-trigger-pre-emption -} - -Pre-emptionVulnerability ::= ENUMERATED { - not-pre-emptable, - pre-emptable -} - -PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) - -PS-ServiceNotAvailable ::= ENUMERATED { - ps-service-not-available, - ... -} - --- Q - -QCI ::= INTEGER (0..255) - --- R - -ResetType ::= CHOICE { - s1-Interface ResetAll, - partOfS1-Interface UE-associatedLogicalS1-ConnectionListRes, - ... -} - -ResetAll ::= ENUMERATED { - reset-all, - ... -} - -ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) - -RelativeMMECapacity ::= INTEGER (0..255) - -RAC ::= OCTET STRING (SIZE (1)) - - -RequestType ::= SEQUENCE { - eventType EventType, - reportArea ReportArea, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -RIMTransfer ::= SEQUENCE { - rIMInformation RIMInformation, - rIMRoutingAddress RIMRoutingAddress OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -RIMInformation ::= OCTET STRING - -RIMRoutingAddress ::= CHOICE { - gERAN-Cell-ID GERAN-Cell-ID, - ..., - targetRNC-ID TargetRNC-ID -} - -ReportArea ::= ENUMERATED { - ecgi, - ... -} - -RepetitionPeriod ::= INTEGER (0..4095) - - -RNC-ID ::= INTEGER (0..4095) - -RRC-Container ::= OCTET STRING - -RRC-Establishment-Cause ::= ENUMERATED { - emergency, - highPriorityAccess, - mt-Access, - mo-Signalling, - mo-Data, - ... -} - -Routing-ID ::= INTEGER (0..255) - --- S - - -SecurityKey ::= BIT STRING (SIZE(256)) - - - -SecurityContext ::= SEQUENCE { - nextHopChainingCount INTEGER (0..7), - nextHopParameter SecurityKey, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -SerialNumber ::= BIT STRING (SIZE (16)) - -SONInformation ::= CHOICE{ - sONInformationRequest SONInformationRequest, - sONInformationReply SONInformationReply, - ... -} - -SONInformationRequest ::= ENUMERATED { - x2TNL-Configuration-Info, - ..., - time-Synchronization-Info} - -SONInformationReply ::= SEQUENCE { - x2TNLConfigurationInfo X2TNLConfigurationInfo OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -SONConfigurationTransfer ::= SEQUENCE { - targeteNB-ID TargeteNB-ID, - sourceeNB-ID SourceeNB-ID, - sONInformation SONInformation, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -Source-ToTarget-TransparentContainer ::= OCTET STRING - -SourceBSS-ToTargetBSS-TransparentContainer ::= OCTET STRING - -SourceeNB-ID ::= SEQUENCE { - global-ENB-ID Global-ENB-ID, - selected-TAI TAI, - iE-Extensions IE-Extensions OPTIONAL -} - -SRVCCOperationPossible ::= ENUMERATED { - possible, - ... -} - -SRVCCHOIndication ::= ENUMERATED { - pSandCS, - cSonly, - ... -} - -SourceeNB-ToTargeteNB-TransparentContainer ::= SEQUENCE { - rRC-Container RRC-Container, - e-RABInformationList E-RABInformationList OPTIONAL, - targetCell-ID EUTRAN-CGI, - subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, - uE-HistoryInformation UE-HistoryInformation, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABInformationList ::= SEQUENCE (SIZE (1.. maxNrOfE-RABs)) OF IE - -SourceRNC-ToTargetRNC-TransparentContainer ::= OCTET STRING - - -ServedGUMMEIs ::= SEQUENCE (SIZE (1.. maxnoofRATs)) OF ServedGUMMEIsItem - -ServedGUMMEIsItem ::= SEQUENCE { - servedPLMNs ServedPLMNs, - servedGroupIDs ServedGroupIDs, - servedMMECs ServedMMECs, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -ServedGroupIDs ::= SEQUENCE (SIZE(1.. maxnoofGroupIDs)) OF MME-Group-ID -ServedMMECs ::= SEQUENCE (SIZE(1.. maxnoofMMECs)) OF MME-Code - -ServedPLMNs ::= SEQUENCE (SIZE(1.. maxnoofPLMNsPerMME)) OF PLMNidentity - -SubscriberProfileIDforRFP ::= INTEGER (1..256) - -SupportedTAs ::= SEQUENCE (SIZE(1.. maxnoofTACs)) OF SupportedTAs-Item - -SupportedTAs-Item ::= SEQUENCE { - tAC TAC, - broadcastPLMNs BPLMNs, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -StratumLevel ::= INTEGER (0..3, ...) - -SynchronizationStatus ::= ENUMERATED { synchronous, asynchronous, ... } - -TimeSynchronizationInfo ::= SEQUENCE { - stratumLevel StratumLevel, - synchronizationStatus SynchronizationStatus, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -S-TMSI ::= SEQUENCE { - mMEC MME-Code, - m-TMSI M-TMSI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- T - -TAC ::= OCTET STRING (SIZE (2)) - -TAIListforWarning ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI - -TAI ::= SEQUENCE { - pLMNidentity PLMNidentity, - tAC TAC, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TAI-Broadcast ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI-Broadcast-Item - -TAI-Broadcast-Item ::= SEQUENCE { - tAI TAI, - completedCellinTAI CompletedCellinTAI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TAI-Cancelled ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI-Cancelled-Item - -TAI-Cancelled-Item ::= SEQUENCE { - tAI TAI, - cancelledCellinTAI CancelledCellinTAI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TAIList ::= SEQUENCE (SIZE(1..maxnoofTAIs)) OF IE - -TAIItem ::= SEQUENCE { - tAI TAI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -CompletedCellinTAI ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CompletedCellinTAI-Item - -CompletedCellinTAI-Item ::= SEQUENCE{ - eCGI EUTRAN-CGI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TBCD-STRING ::= OCTET STRING (SIZE (3)) - -TargetID ::= CHOICE { - targeteNB-ID TargeteNB-ID, - targetRNC-ID TargetRNC-ID, - cGI CGI, - ... -} - -TargeteNB-ID ::= SEQUENCE { - global-ENB-ID Global-ENB-ID, - selected-TAI TAI, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TargetRNC-ID ::= SEQUENCE { - lAI LAI, - rAC RAC OPTIONAL, - rNC-ID RNC-ID, - extendedRNC-ID ExtendedRNC-ID OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TargeteNB-ToSourceeNB-TransparentContainer ::= SEQUENCE { - rRC-Container RRC-Container, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -Target-ToSource-TransparentContainer ::= OCTET STRING -TargetRNC-ToSourceRNC-TransparentContainer ::= OCTET STRING -TargetBSS-ToSourceBSS-TransparentContainer ::= OCTET STRING - -TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} - -Time-UE-StayedInCell ::= INTEGER (0..4095) - -TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) - -TraceActivation ::= SEQUENCE { - e-UTRAN-Trace-ID E-UTRAN-Trace-ID, - interfacesToTrace InterfacesToTrace, -traceDepth TraceDepth, -traceCollectionEntityIPAddress TransportLayerAddress, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -TraceDepth ::= ENUMERATED { - minimum, - medium, - maximum, - minimumWithoutVendorSpecificExtension, - mediumWithoutVendorSpecificExtension, - maximumWithoutVendorSpecificExtension, - ... -} - -E-UTRAN-Trace-ID ::= OCTET STRING (SIZE (8)) - -TypeOfError ::= ENUMERATED { - not-understood, - missing, - ... -} - --- U - -UE-associatedLogicalS1-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxNrOfIndividualS1ConnectionsToReset)) OF IE - -UE-associatedLogicalS1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxNrOfIndividualS1ConnectionsToReset)) OF IE - -UEAggregateMaximumBitrate ::= SEQUENCE { - uEaggregateMaximumBitRateDL BitRate, - uEaggregateMaximumBitRateUL BitRate, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -UE-S1AP-IDs ::= CHOICE{ - uE-S1AP-ID-pair UE-S1AP-ID-pair, - mME-UE-S1AP-ID MME-UE-S1AP-ID, - ... -} - -UE-S1AP-ID-pair ::= SEQUENCE{ - mME-UE-S1AP-ID MME-UE-S1AP-ID, - eNB-UE-S1AP-ID ENB-UE-S1AP-ID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -UE-associatedLogicalS1-ConnectionItem ::= SEQUENCE { - mME-UE-S1AP-ID MME-UE-S1AP-ID OPTIONAL, - eNB-UE-S1AP-ID ENB-UE-S1AP-ID OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -UEIdentityIndexValue ::= BIT STRING (SIZE (10)) - -UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item - -UEPagingID ::= CHOICE { - s-TMSI S-TMSI, - iMSI IMSI, - ... - } - -UERadioCapability ::= OCTET STRING - -UESecurityCapabilities ::= SEQUENCE { - encryptionAlgorithms EncryptionAlgorithms, - integrityProtectionAlgorithms IntegrityProtectionAlgorithms, - iE-Extensions IE-Extensions OPTIONAL, -... -} - --- V --- W - -WarningAreaList ::= CHOICE { - cellIDList ECGIList, - trackingAreaListforWarning TAIListforWarning, - emergencyAreaIDList EmergencyAreaIDList, - ... -} - - -WarningType ::= OCTET STRING (SIZE (2)) - -WarningSecurityInfo ::= OCTET STRING (SIZE (50)) - - -WarningMessageContents ::= OCTET STRING (SIZE(1..9600)) - - --- X - - -X2TNLConfigurationInfo ::= SEQUENCE { - eNBX2TransportLayerAddresses ENBX2TLAs, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - --- Y --- Z - -END \ No newline at end of file diff --git a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU-Contents.asn b/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU-Contents.asn deleted file mode 100644 index d3d4189e0f..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU-Contents.asn +++ /dev/null @@ -1,2419 +0,0 @@ --- ************************************************************** --- --- PDU definitions for S1AP. --- --- ************************************************************** - -S1AP-PDU-Contents { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Contents (1) } - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - - UEAggregateMaximumBitrate, - Cause, - CellAccessMode, - Cdma2000HORequiredIndication, - Cdma2000HOStatus, - Cdma2000OneXSRVCCInfo, - Cdma2000OneXRAND, - Cdma2000PDU, - Cdma2000RATType, - Cdma2000SectorID, - EUTRANRoundTripDelayEstimationInfo, - CNDomain, - ConcurrentWarningMessageIndicator, - CriticalityDiagnostics, - CSFallbackIndicator, - CSG-Id, - CSG-IdList, - CSGMembershipStatus, - Data-Forwarding-Not-Possible, - Direct-Forwarding-Path-Availability, - Global-ENB-ID, - EUTRAN-CGI, - ENBname, - ENB-StatusTransfer-TransparentContainer, - ENB-UE-S1AP-ID, - ExtendedRepetitionPeriod, - GTP-TEID, - GUMMEI, - HandoverRestrictionList, - HandoverType, - LAI, - LPPa-PDU, - MMEname, - MME-UE-S1AP-ID, - MSClassmark2, - MSClassmark3, - NAS-PDU, - NASSecurityParametersfromE-UTRAN, - NASSecurityParameterstoE-UTRAN, - OverloadResponse, - PagingDRX, - PLMNidentity, - RIMTransfer, - RelativeMMECapacity, - RequestType, - E-RAB-ID, - E-RABLevelQoSParameters, - E-RABList, -Routing-ID, - SecurityKey, - SecurityContext, - ServedGUMMEIs, - SONConfigurationTransfer, - Source-ToTarget-TransparentContainer, - SourceBSS-ToTargetBSS-TransparentContainer, - SourceeNB-ToTargeteNB-TransparentContainer, - SourceRNC-ToTargetRNC-TransparentContainer, - SubscriberProfileIDforRFP, - SRVCCOperationPossible, - SRVCCHOIndication, - SupportedTAs, - TAI, - Target-ToSource-TransparentContainer, - TargetBSS-ToSourceBSS-TransparentContainer, - TargeteNB-ToSourceeNB-TransparentContainer, - TargetID, - TargetRNC-ToSourceRNC-TransparentContainer, - TimeToWait, - TraceActivation, - E-UTRAN-Trace-ID, - TransportLayerAddress, - UEIdentityIndexValue, - UEPagingID, - UERadioCapability, - UE-S1AP-IDs, - UE-associatedLogicalS1-ConnectionItem, - UESecurityCapabilities, - S-TMSI, - MessageIdentifier, - SerialNumber, - WarningAreaList, - RepetitionPeriod, - NumberofBroadcastRequest, - WarningType, - WarningSecurityInfo, - DataCodingScheme, - WarningMessageContents, - BroadcastCompletedAreaList, - RRC-Establishment-Cause, - BroadcastCancelledAreaList, - PS-ServiceNotAvailable - -FROM S1AP-IEs - - PrivateIE-Container{}, - ProtocolExtensionContainer{}, - ProtocolIE-Container{}, - ProtocolIE-ContainerList{}, - ProtocolIE-ContainerPair{}, - ProtocolIE-ContainerPairList{}, - ProtocolIE-SingleContainer{}, - S1AP-PRIVATE-IES, - S1AP-PROTOCOL-EXTENSION, - S1AP-PROTOCOL-IES, - S1AP-PROTOCOL-IES-PAIR -FROM S1AP-Containers - - - id-uEaggregateMaximumBitrate, - id-Cause, - id-CellAccessMode, - id-cdma2000HORequiredIndication, - id-cdma2000HOStatus, - id-cdma2000OneXSRVCCInfo, - id-cdma2000OneXRAND, - id-cdma2000PDU, - id-cdma2000RATType, - id-cdma2000SectorID, - id-EUTRANRoundTripDelayEstimationInfo, - id-CNDomain, - id-ConcurrentWarningMessageIndicator, - id-CriticalityDiagnostics, - id-CSFallbackIndicator, - id-CSG-Id, - id-CSG-IdList, - id-CSGMembershipStatus, - id-Data-Forwarding-Not-Possible, - id-DefaultPagingDRX, - id-Direct-Forwarding-Path-Availability, - id-Global-ENB-ID, - id-EUTRAN-CGI, - id-eNBname, - id-eNB-StatusTransfer-TransparentContainer, - id-eNB-UE-S1AP-ID, - id-GERANtoLTEHOInformationRes, - id-GUMMEI-ID, - id-HandoverRestrictionList, - id-HandoverType, - id-InitialContextSetup, - id-Inter-SystemInformationTransferTypeEDT, - id-Inter-SystemInformationTransferTypeMDT, - id-LPPa-PDU, - id-NAS-DownlinkCount, - id-MMEname, - id-MME-UE-S1AP-ID, - id-MSClassmark2, - id-MSClassmark3, - id-NAS-PDU, - id-NASSecurityParametersfromE-UTRAN, - id-NASSecurityParameterstoE-UTRAN, - id-OverloadResponse, - id-pagingDRX, - id-RelativeMMECapacity, - id-RequestType, - id-Routing-ID, - id-E-RABAdmittedItem, - id-E-RABAdmittedList, - id-E-RABDataForwardingItem, - id-E-RABFailedToModifyList, - id-E-RABFailedToReleaseList, - id-E-RABFailedtoSetupItemHOReqAck, - id-E-RABFailedToSetupListBearerSURes, - id-E-RABFailedToSetupListCtxtSURes, - id-E-RABFailedToSetupListHOReqAck, - id-E-RABFailedToBeReleasedList, - id-E-RABModify, - id-E-RABModifyItemBearerModRes, - id-E-RABModifyListBearerModRes, - id-E-RABRelease, - id-E-RABReleaseItemBearerRelComp, - id-E-RABReleaseItemHOCmd, - id-E-RABReleaseListBearerRelComp, - id-E-RABReleaseIndication, - id-E-RABSetup, - id-E-RABSetupItemBearerSURes, - id-E-RABSetupItemCtxtSURes, - id-E-RABSetupListBearerSURes, - id-E-RABSetupListCtxtSURes, - id-E-RABSubjecttoDataForwardingList, - id-E-RABToBeModifiedItemBearerModReq, - id-E-RABToBeModifiedListBearerModReq, - id-E-RABToBeReleasedList, - id-E-RABReleasedList, - id-E-RABToBeSetupItemBearerSUReq, - id-E-RABToBeSetupItemCtxtSUReq, - id-E-RABToBeSetupItemHOReq, - id-E-RABToBeSetupListBearerSUReq, - id-E-RABToBeSetupListCtxtSUReq, - id-E-RABToBeSetupListHOReq, - id-E-RABToBeSwitchedDLItem, - id-E-RABToBeSwitchedDLList, - id-E-RABToBeSwitchedULList, - id-E-RABToBeSwitchedULItem, - id-E-RABtoReleaseListHOCmd, - id-SecurityKey, - id-SecurityContext, - id-ServedGUMMEIs, - id-SONConfigurationTransferECT, - id-SONConfigurationTransferMCT, - id-Source-ToTarget-TransparentContainer, - id-Source-ToTarget-TransparentContainer-Secondary, - id-SourceMME-UE-S1AP-ID, - id-SRVCCOperationPossible, - id-SRVCCHOIndication, - id-SubscriberProfileIDforRFP, - id-SupportedTAs, - id-S-TMSI, - id-TAI, - id-TAIItem, - id-TAIList, - id-Target-ToSource-TransparentContainer, - id-Target-ToSource-TransparentContainer-Secondary, - id-TargetID, - id-TimeToWait, - id-TraceActivation, - id-E-UTRAN-Trace-ID, - id-UEIdentityIndexValue, - id-UEPagingID, - id-UERadioCapability, - id-UTRANtoLTEHOInformationRes, - id-UE-associatedLogicalS1-ConnectionListResAck, - id-UE-associatedLogicalS1-ConnectionItem, - id-UESecurityCapabilities, - id-UE-S1AP-IDs, - id-ResetType, - id-MessageIdentifier, - id-SerialNumber, - id-WarningAreaList, - id-RepetitionPeriod, - id-NumberofBroadcastRequest, - id-WarningType, - id-WarningSecurityInfo, - id-DataCodingScheme, - id-WarningMessageContents, - id-BroadcastCompletedAreaList, - id-BroadcastCancelledAreaList, - id-RRC-Establishment-Cause, - id-TraceCollectionEntityIPAddress, maxnoofTAIs, - maxNrOfErrors, - maxNrOfE-RABs, - maxNrOfIndividualS1ConnectionsToReset, - maxnoofEmergencyAreaID, - maxnoofCellID, - maxnoofTAIforWarning, - maxnoofCellinTAI, - maxnoofCellinEAI, - id-ExtendedRepetitionPeriod, - id-PS-ServiceNotAvailable, - id-RegisteredLAI - - -FROM S1AP-Constants; - --- ************************************************************** --- --- Common Container Lists --- --- ************************************************************** - -E-RAB-IE-ContainerList { S1AP-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, maxNrOfE-RABs, {IEsSetParam} } -E-RAB-IE-ContainerPairList { S1AP-PROTOCOL-IES-PAIR : IEsSetParam } ::= ProtocolIE-ContainerPairList { 1, maxNrOfE-RABs, {IEsSetParam} } -ProtocolError-IE-ContainerList { S1AP-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, maxNrOfE-RABs, {IEsSetParam} } - --- ************************************************************** --- --- HANDOVER PREPARATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Required --- --- ************************************************************** - -HandoverRequired ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverRequiredIEs} }, - ... -} - -HandoverRequiredIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-TargetID CRITICALITY reject TYPE TargetID PRESENCE mandatory }| - { ID id-Direct-Forwarding-Path-Availability CRITICALITY ignore TYPE Direct-Forwarding-Path-Availability PRESENCE optional }| - { ID id-SRVCCHOIndication CRITICALITY reject TYPE SRVCCHOIndication PRESENCE optional }| - { ID id-Source-ToTarget-TransparentContainer CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE mandatory }| - { ID id-Source-ToTarget-TransparentContainer-Secondary CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE optional }| - { ID id-MSClassmark2 CRITICALITY reject TYPE MSClassmark2 PRESENCE conditional }| - { ID id-MSClassmark3 CRITICALITY ignore TYPE MSClassmark3 PRESENCE conditional }| - { ID id-CSG-Id CRITICALITY reject TYPE CSG-Id PRESENCE optional }| - { ID id-CellAccessMode CRITICALITY reject TYPE CellAccessMode PRESENCE optional }| - { ID id-PS-ServiceNotAvailable CRITICALITY ignore TYPE PS-ServiceNotAvailable PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- Handover Command --- --- ************************************************************** - -HandoverCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverCommandIEs} }, - ... -} - -HandoverCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory } | - { ID id-NASSecurityParametersfromE-UTRAN CRITICALITY reject TYPE NASSecurityParametersfromE-UTRAN PRESENCE conditional - -- This IE shall be present if HandoverType IE is set to value "LTEtoUTRAN" or "LTEtoGERAN" -- }| - { ID id-E-RABSubjecttoDataForwardingList CRITICALITY ignore TYPE E-RABDataForwardingList PRESENCE optional } | - { ID id-E-RABtoReleaseListHOCmd CRITICALITY ignore TYPE E-RABList PRESENCE optional } | - { ID id-Target-ToSource-TransparentContainer CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE mandatory }| - { ID id-Target-ToSource-TransparentContainer-Secondary CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -E-RABDataForwardingList ::= E-RAB-IE-ContainerList { {E-RABDataForwardingItemIEs} } - -E-RABDataForwardingItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABDataForwardingItem CRITICALITY ignore TYPE E-RABDataForwardingItem PRESENCE mandatory }, - ... -} - -E-RABDataForwardingItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- Handover Preparation Failure --- --- ************************************************************** - -HandoverPreparationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverPreparationFailureIEs} }, - ... -} - -HandoverPreparationFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER RESOURCE ALLOCATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Request --- --- ************************************************************** - -HandoverRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {HandoverRequestIEs} }, - ... -} - -HandoverRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE mandatory }| - { ID id-E-RABToBeSetupListHOReq CRITICALITY reject TYPE E-RABToBeSetupListHOReq PRESENCE mandatory } | - { ID id-Source-ToTarget-TransparentContainer CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE mandatory } | - { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory }| - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional }| - { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }| - { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE optional }| - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }| - { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE mandatory}| - { ID id-NASSecurityParameterstoE-UTRAN CRITICALITY reject TYPE NASSecurityParameterstoE-UTRAN PRESENCE conditional - -- This IE shall be present if the Handover Type IE is set to the value "UTRANtoLTE" or "GERANtoLTE" -- } | - { ID id-CSG-Id CRITICALITY reject TYPE CSG-Id PRESENCE optional} | - { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional} , - ... -} - -E-RABToBeSetupListHOReq ::= E-RAB-IE-ContainerList { {E-RABToBeSetupItemHOReqIEs} } - -E-RABToBeSetupItemHOReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemHOReq CRITICALITY reject TYPE E-RABToBeSetupItemHOReq PRESENCE mandatory }, - ... -} - -E-RABToBeSetupItemHOReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - e-RABlevelQosParameters E-RABLevelQoSParameters, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABToBeSetupItemHOReq-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - {ID id-Data-Forwarding-Not-Possible CRITICALITY ignore EXTENSION Data-Forwarding-Not-Possible PRESENCE optional}, - ... -} - --- ************************************************************** --- --- Handover Request Acknowledge --- --- ************************************************************** - -HandoverRequestAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {HandoverRequestAcknowledgeIEs} }, - ... -} - -HandoverRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-E-RABAdmittedList CRITICALITY ignore TYPE E-RABAdmittedList PRESENCE mandatory } | - { ID id-E-RABFailedToSetupListHOReqAck CRITICALITY ignore TYPE E-RABFailedtoSetupListHOReqAck PRESENCE optional } | - { ID id-Target-ToSource-TransparentContainer CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE mandatory }| - { ID id-CSG-Id CRITICALITY ignore TYPE CSG-Id PRESENCE optional } | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -E-RABAdmittedList ::= E-RAB-IE-ContainerList { {E-RABAdmittedItemIEs} } - -E-RABAdmittedItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABAdmittedItem CRITICALITY ignore TYPE E-RABAdmittedItem PRESENCE mandatory }, - ... -} - -E-RABAdmittedItem ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - dL-transportLayerAddress TransportLayerAddress OPTIONAL, - dL-gTP-TEID GTP-TEID OPTIONAL, - uL-TransportLayerAddress TransportLayerAddress OPTIONAL, - uL-GTP-TEID GTP-TEID OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABAdmittedItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RABFailedtoSetupListHOReqAck ::= E-RAB-IE-ContainerList { {E-RABFailedtoSetupItemHOReqAckIEs} } - -E-RABFailedtoSetupItemHOReqAckIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABFailedtoSetupItemHOReqAck CRITICALITY ignore TYPE E-RABFailedToSetupItemHOReqAck PRESENCE mandatory }, - ... -} - -E-RABFailedToSetupItemHOReqAck ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - cause Cause, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - -E-RABFailedToSetupItemHOReqAckExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Handover Failure --- --- ************************************************************** - -HandoverFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverFailureIEs} }, - ... -} - -HandoverFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER NOTIFICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Notify --- --- ************************************************************** - -HandoverNotify ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverNotifyIEs} }, - ... -} - -HandoverNotifyIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| - { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}, - ... -} - --- ************************************************************** --- --- PATH SWITCH REQUEST ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Path Switch Request --- --- ************************************************************** - -PathSwitchRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { PathSwitchRequestIEs} }, - ... -} - -PathSwitchRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABToBeSwitchedDLList CRITICALITY reject TYPE E-RABToBeSwitchedDLList PRESENCE mandatory }| - { ID id-SourceMME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| - { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}| - { ID id-UESecurityCapabilities CRITICALITY ignore TYPE UESecurityCapabilities PRESENCE mandatory }, - ... -} - -E-RABToBeSwitchedDLList ::= E-RAB-IE-ContainerList { {E-RABToBeSwitchedDLItemIEs} } - -E-RABToBeSwitchedDLItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSwitchedDLItem CRITICALITY reject TYPE E-RABToBeSwitchedDLItem PRESENCE mandatory }, - ... -} - -E-RABToBeSwitchedDLItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- Path Switch Request Acknowledge --- --- ************************************************************** - -PathSwitchRequestAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { PathSwitchRequestAcknowledgeIEs} }, - ... -} - -PathSwitchRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeSwitchedULList CRITICALITY ignore TYPE E-RABToBeSwitchedULList PRESENCE optional }| - { ID id-E-RABToBeReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE mandatory}| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -E-RABToBeSwitchedULList ::= E-RAB-IE-ContainerList { {E-RABToBeSwitchedULItemIEs} } - -E-RABToBeSwitchedULItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSwitchedULItem CRITICALITY ignore TYPE E-RABToBeSwitchedULItem PRESENCE mandatory }, - ... -} - -E-RABToBeSwitchedULItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Path Switch Request Failure --- --- ************************************************************** - -PathSwitchRequestFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { PathSwitchRequestFailureIEs} }, - ... -} - -PathSwitchRequestFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- HANDOVER CANCEL ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Handover Cancel --- --- ************************************************************** - -HandoverCancel ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverCancelIEs} }, - ... -} - -HandoverCancelIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- Handover Cancel Request Acknowledge --- --- ************************************************************** - -HandoverCancelAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { HandoverCancelAcknowledgeIEs} }, - ... -} - -HandoverCancelAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- E-RAB SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Setup Request --- --- ************************************************************** - -E-RABSetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABSetupRequestIEs} }, - ... -} - -E-RABSetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeSetupListBearerSUReq CRITICALITY reject TYPE E-RABToBeSetupListBearerSUReq PRESENCE mandatory }, - ... -} - -E-RABToBeSetupListBearerSUReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeSetupItemBearerSUReqIEs} } - -E-RABToBeSetupItemBearerSUReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemBearerSUReq CRITICALITY reject TYPE E-RABToBeSetupItemBearerSUReq PRESENCE mandatory }, - ... -} - -E-RABToBeSetupItemBearerSUReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- E-RAB Setup Response --- --- ************************************************************** - -E-RABSetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABSetupResponseIEs} }, - ... -} - -E-RABSetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABSetupListBearerSURes CRITICALITY ignore TYPE E-RABSetupListBearerSURes PRESENCE optional }| - { ID id-E-RABFailedToSetupListBearerSURes CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - -E-RABSetupListBearerSURes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABSetupItemBearerSUResIEs} } - -E-RABSetupItemBearerSUResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABSetupItemBearerSURes CRITICALITY ignore TYPE E-RABSetupItemBearerSURes PRESENCE mandatory }, - ... -} - -E-RABSetupItemBearerSURes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - - -E-RABSetupItemBearerSUResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- E-RAB MODIFY ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Modify Request --- --- ************************************************************** - -E-RABModifyRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABModifyRequestIEs} }, - ... -} - -E-RABModifyRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeModifiedListBearerModReq CRITICALITY reject TYPE E-RABToBeModifiedListBearerModReq PRESENCE mandatory }, - ... -} - -E-RABToBeModifiedListBearerModReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeModifiedItemBearerModReqIEs} } - -E-RABToBeModifiedItemBearerModReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeModifiedItemBearerModReq CRITICALITY reject TYPE E-RABToBeModifiedItemBearerModReq PRESENCE mandatory }, - ... -} - -E-RABToBeModifiedItemBearerModReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABLevelQoSParameters E-RABLevelQoSParameters, - nAS-PDU NAS-PDU, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - - -E-RABToBeModifyItemBearerModReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- E-RAB Modify Response --- --- ************************************************************** - -E-RABModifyResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABModifyResponseIEs} }, - ... -} - -E-RABModifyResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABModifyListBearerModRes CRITICALITY ignore TYPE E-RABModifyListBearerModRes PRESENCE optional }| - { ID id-E-RABFailedToModifyList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - -E-RABModifyListBearerModRes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABModifyItemBearerModResIEs} } - -E-RABModifyItemBearerModResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABModifyItemBearerModRes CRITICALITY ignore TYPE E-RABModifyItemBearerModRes PRESENCE mandatory }, - ... -} - -E-RABModifyItemBearerModRes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - - -E-RABModifyItemBearerModResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - - --- ************************************************************** --- --- E-RAB RELEASE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Release Command --- --- ************************************************************** - -E-RABReleaseCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABReleaseCommandIEs} }, - ... -} - -E-RABReleaseCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| - { ID id-E-RABToBeReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE mandatory }| - { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- E-RAB Release Response --- --- ************************************************************** - -E-RABReleaseResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { E-RABReleaseResponseIEs } }, - ... -} - -E-RABReleaseResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABReleaseListBearerRelComp CRITICALITY ignore TYPE E-RABReleaseListBearerRelComp PRESENCE optional }| - { ID id-E-RABFailedToReleaseList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - -E-RABReleaseListBearerRelComp ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABReleaseItemBearerRelCompIEs} } - -E-RABReleaseItemBearerRelCompIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABReleaseItemBearerRelComp CRITICALITY ignore TYPE E-RABReleaseItemBearerRelComp PRESENCE mandatory }, - ... -} - -E-RABReleaseItemBearerRelCompExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - - --- ************************************************************** --- --- E-RAB RELEASE INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- E-RAB Release Indication --- --- ************************************************************** - -E-RABReleaseIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {E-RABReleaseIndicationIEs} }, - ... -} - -E-RABReleaseIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE mandatory }, - ... -} --- ************************************************************** --- --- INITIAL CONTEXT SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Initial Context Setup Request --- --- ************************************************************** - -InitialContextSetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {InitialContextSetupRequestIEs} }, - ... -} - -InitialContextSetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| - { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE mandatory}| - { ID id-E-RABToBeSetupListCtxtSUReq CRITICALITY reject TYPE E-RABToBeSetupListCtxtSUReq PRESENCE mandatory}| - { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory}| - { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE mandatory}| - { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| - { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional}| - { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| - { ID id-CSFallbackIndicator CRITICALITY reject TYPE CSFallbackIndicator PRESENCE optional}| - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| - { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| - { ID id-RegisteredLAI CRITICALITY ignore TYPE LAI PRESENCE optional}, - ... -} - - - - -E-RABToBeSetupListCtxtSUReq ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeSetupItemCtxtSUReqIEs} } - -E-RABToBeSetupItemCtxtSUReqIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABToBeSetupItemCtxtSUReq CRITICALITY reject TYPE E-RABToBeSetupItemCtxtSUReq PRESENCE mandatory }, - ... -} - -E-RABToBeSetupItemCtxtSUReq ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - e-RABlevelQoSParameters E-RABLevelQoSParameters, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - nAS-PDU NAS-PDU OPTIONAL, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - - -E-RABToBeSetupItemCtxtSUReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Initial Context Setup Response --- --- ************************************************************** - -InitialContextSetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {InitialContextSetupResponseIEs} }, - ... -} - -InitialContextSetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-E-RABSetupListCtxtSURes CRITICALITY ignore TYPE E-RABSetupListCtxtSURes PRESENCE mandatory }| - { ID id-E-RABFailedToSetupListCtxtSURes CRITICALITY ignore TYPE E-RABList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - -E-RABSetupListCtxtSURes ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABSetupItemCtxtSUResIEs} } - -E-RABSetupItemCtxtSUResIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABSetupItemCtxtSURes CRITICALITY ignore TYPE E-RABSetupItemCtxtSURes PRESENCE mandatory }, - ... -} - -E-RABSetupItemCtxtSURes ::= SEQUENCE { - e-RAB-ID E-RAB-ID, - transportLayerAddress TransportLayerAddress, - gTP-TEID GTP-TEID, - iE-Extensions IE-Extensions OPTIONAL, - ... -} - - -E-RABSetupItemCtxtSUResExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - - --- ************************************************************** --- --- Initial Context Setup Failure --- --- ************************************************************** - -InitialContextSetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {InitialContextSetupFailureIEs} }, - ... -} - -InitialContextSetupFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- PAGING ELEMENTARY PROCEDURE --- --- ************************************************************** - - --- ************************************************************** --- --- Paging --- --- ************************************************************** - -Paging ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{PagingIEs}}, - ... -} - -PagingIEs S1AP-PROTOCOL-IES ::= { - { ID id-UEIdentityIndexValue CRITICALITY ignore TYPE UEIdentityIndexValue PRESENCE mandatory } | - { ID id-UEPagingID CRITICALITY ignore TYPE UEPagingID PRESENCE mandatory } | - { ID id-pagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional } | - { ID id-CNDomain CRITICALITY ignore TYPE CNDomain PRESENCE mandatory } | - { ID id-TAIList CRITICALITY ignore TYPE TAIList PRESENCE mandatory }| - { ID id-CSG-IdList CRITICALITY ignore TYPE CSG-IdList PRESENCE optional }, - ... -} - -TAIList::= SEQUENCE (SIZE(1.. maxnoofTAIs)) OF ProtocolIE-SingleContainer {{TAIItemIEs}} - -TAIItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-TAIItem CRITICALITY ignore TYPE TAIItem PRESENCE mandatory }, - ... -} - -TAIItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - --- ************************************************************** --- --- UE CONTEXT RELEASE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE CONTEXT RELEASE REQUEST --- --- ************************************************************** - -UEContextReleaseRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UEContextReleaseRequestIEs}}, - ... -} - -UEContextReleaseRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- UE Context Release Command --- --- ************************************************************** - -UEContextReleaseCommand ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UEContextReleaseCommandIEs}}, - ... -} - -UEContextReleaseCommandIEs S1AP-PROTOCOL-IES ::= { - { ID id-UE-S1AP-IDs CRITICALITY reject TYPE UE-S1AP-IDs PRESENCE mandatory} | - - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- UE Context Release Complete --- --- ************************************************************** - -UEContextReleaseComplete ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UEContextReleaseCompleteIEs}}, - ... -} - -UEContextReleaseCompleteIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- UE CONTEXT MODIFICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE Context Modification Request --- --- ************************************************************** - -UEContextModificationRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { UEContextModificationRequestIEs} }, - ... -} - -UEContextModificationRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| - { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE optional}| - { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| - { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE UEAggregateMaximumBitrate PRESENCE optional}| - { ID id-CSFallbackIndicator CRITICALITY reject TYPE CSFallbackIndicator PRESENCE optional}| - { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE optional}| - { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| - { ID id-RegisteredLAI CRITICALITY ignore TYPE LAI PRESENCE optional}, - ... -} --- ************************************************************** --- --- UE Context Modification Response --- --- ************************************************************** - -UEContextModificationResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { UEContextModificationResponseIEs} }, - ... -} - -UEContextModificationResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -}-- ************************************************************** --- --- UE Context Modification Failure --- --- ************************************************************** - -UEContextModificationFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { UEContextModificationFailureIEs} }, - ... -} - -UEContextModificationFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- NAS TRANSPORT ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- DOWNLINK NAS TRANSPORT --- --- ************************************************************** - -DownlinkNASTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{DownlinkNASTransportIEs}}, - ... -} - -DownlinkNASTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory} | - { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional }, - ... -} - - --- ************************************************************** --- --- INITIAL UE MESSAGE --- --- ************************************************************** - -InitialUEMessage ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{InitialUEMessageIEs}}, - ... -} - -InitialUEMessageIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory} | - { ID id-TAI CRITICALITY reject TYPE TAI PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory} | - { ID id-RRC-Establishment-Cause CRITICALITY ignore TYPE RRC-Establishment-Cause PRESENCE mandatory} | - { ID id-S-TMSI CRITICALITY reject TYPE S-TMSI PRESENCE optional} | - { ID id-CSG-Id CRITICALITY reject TYPE CSG-Id PRESENCE optional} | - { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE optional} | - { ID id-CellAccessMode CRITICALITY reject TYPE CellAccessMode PRESENCE optional}, - ... -} - - --- ************************************************************** --- --- UPLINK NAS TRANSPORT --- --- ************************************************************** - -UplinkNASTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UplinkNASTransportIEs}}, - ... -} - -UplinkNASTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| - { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}, - ... -} --- ************************************************************** --- --- NAS NON DELIVERY INDICATION --- --- ************************************************************** - -NASNonDeliveryIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{NASNonDeliveryIndicationIEs}}, - ... -} - -NASNonDeliveryIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- RESET ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Reset --- --- ************************************************************** - -Reset ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ResetIEs} }, - ... -} - -ResetIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory }, - ... -} - -ResetType ::= CHOICE { - s1-Interface ResetAll, - partOfS1-Interface UE-associatedLogicalS1-ConnectionListRes, - ... -} - - - -ResetAll ::= ENUMERATED { - reset-all, - ... -} - -UE-associatedLogicalS1-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxNrOfIndividualS1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalS1-ConnectionItemRes } } - -UE-associatedLogicalS1-ConnectionItemRes S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionItem CRITICALITY reject TYPE UE-associatedLogicalS1-ConnectionItem PRESENCE mandatory }, - ... -} - - --- ************************************************************** --- --- Reset Acknowledge --- --- ************************************************************** - -ResetAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ResetAcknowledgeIEs} }, - ... -} - -ResetAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionListResAck CRITICALITY ignore TYPE UE-associatedLogicalS1-ConnectionListResAck PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - -UE-associatedLogicalS1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxNrOfIndividualS1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalS1-ConnectionItemResAck } } - -UE-associatedLogicalS1-ConnectionItemResAck S1AP-PROTOCOL-IES ::= { - { ID id-UE-associatedLogicalS1-ConnectionItem CRITICALITY ignore TYPE UE-associatedLogicalS1-ConnectionItem PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- ERROR INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Error Indication --- --- ************************************************************** - -ErrorIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ErrorIndicationIEs}}, - ... -} - -ErrorIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE optional } | - { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE optional } | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional } | - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } , - ... -} - --- ************************************************************** --- --- S1 SETUP ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- S1 Setup Request --- --- ************************************************************** - -S1SetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1SetupRequestIEs} }, - ... -} - -S1SetupRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-Global-ENB-ID CRITICALITY reject TYPE Global-ENB-ID PRESENCE mandatory}| - { ID id-eNBname CRITICALITY ignore TYPE ENBname PRESENCE optional}| - { ID id-SupportedTAs CRITICALITY reject TYPE SupportedTAs PRESENCE mandatory}| - { ID id-DefaultPagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE mandatory}| - { ID id-CSG-IdList CRITICALITY reject TYPE CSG-IdList PRESENCE optional}, - ... -} - --- ************************************************************** --- --- S1 Setup Response --- --- ************************************************************** - -S1SetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1SetupResponseIEs} }, - ... -} - - -S1SetupResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MMEname CRITICALITY ignore TYPE MMEname PRESENCE optional }| - { ID id-ServedGUMMEIs CRITICALITY reject TYPE ServedGUMMEIs PRESENCE mandatory }| - { ID id-RelativeMMECapacity CRITICALITY ignore TYPE RelativeMMECapacity PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- S1 Setup Failure --- --- ************************************************************** - -S1SetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {S1SetupFailureIEs} }, - ... -} - -S1SetupFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- ENB CONFIGURATION UPDATE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Configuration Update --- --- ************************************************************** - -ENBConfigurationUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateIEs} }, - ... -} - -ENBConfigurationUpdateIEs S1AP-PROTOCOL-IES ::= { - { ID id-eNBname CRITICALITY ignore TYPE ENBname PRESENCE optional }| - { ID id-SupportedTAs CRITICALITY reject TYPE SupportedTAs PRESENCE optional }| - { ID id-CSG-IdList CRITICALITY reject TYPE CSG-IdList PRESENCE optional}| - { ID id-DefaultPagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional }, - ... -} - --- ************************************************************** --- --- eNB Configuration Update Acknowledge --- --- ************************************************************** - -ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateAcknowledgeIEs} }, - ... -} - - -ENBConfigurationUpdateAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- eNB Configuration Update Failure --- --- ************************************************************** - -ENBConfigurationUpdateFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateFailureIEs} }, - ... -} - -ENBConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, -... -} - - --- ************************************************************** --- --- MME Configuration UPDATE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Configuration Update --- --- ************************************************************** - -MMEConfigurationUpdate ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateIEs} }, - ... -} - -MMEConfigurationUpdateIEs S1AP-PROTOCOL-IES ::= { - { ID id-MMEname CRITICALITY ignore TYPE MMEname PRESENCE optional }| - { ID id-ServedGUMMEIs CRITICALITY reject TYPE ServedGUMMEIs PRESENCE optional }| - { ID id-RelativeMMECapacity CRITICALITY reject TYPE RelativeMMECapacity PRESENCE optional}, - ... -} - --- ************************************************************** --- --- MME Configuration Update Acknowledge --- --- ************************************************************** - -MMEConfigurationUpdateAcknowledge ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateAcknowledgeIEs} }, - ... -} - - -MMEConfigurationUpdateAcknowledgeIEs S1AP-PROTOCOL-IES ::= { - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- MME Configuration Update Failure --- --- ************************************************************** - -MMEConfigurationUpdateFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateFailureIEs} }, - ... -} - -MMEConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| - { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- DOWNLINK S1 CDMA2000 TUNNELING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Downlink S1 CDMA2000 Tunneling --- --- ************************************************************** - -DownlinkS1cdma2000tunneling ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {DownlinkS1cdma2000tunnelingIEs} }, - ... -} - -DownlinkS1cdma2000tunnelingIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-E-RABSubjecttoDataForwardingList CRITICALITY ignore TYPE E-RABDataForwardingList PRESENCE optional } | - { ID id-cdma2000HOStatus CRITICALITY ignore TYPE Cdma2000HOStatus PRESENCE optional } | - { ID id-cdma2000RATType CRITICALITY reject TYPE Cdma2000RATType PRESENCE mandatory } | - { ID id-cdma2000PDU CRITICALITY reject TYPE Cdma2000PDU PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- UPLINK S1 CDMA2000 TUNNELING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Uplink S1 CDMA2000 Tunneling --- --- ************************************************************** - -UplinkS1cdma2000tunneling ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {UplinkS1cdma2000tunnelingIEs} }, - ... -} - -UplinkS1cdma2000tunnelingIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-cdma2000RATType CRITICALITY reject TYPE Cdma2000RATType PRESENCE mandatory } | - { ID id-cdma2000SectorID CRITICALITY reject TYPE Cdma2000SectorID PRESENCE mandatory } | - { ID id-cdma2000HORequiredIndication CRITICALITY ignore TYPE Cdma2000HORequiredIndication PRESENCE optional } | - { ID id-cdma2000OneXSRVCCInfo CRITICALITY reject TYPE Cdma2000OneXSRVCCInfo PRESENCE optional } | - { ID id-cdma2000OneXRAND CRITICALITY reject TYPE Cdma2000OneXRAND PRESENCE optional } | - { ID id-cdma2000PDU CRITICALITY reject TYPE Cdma2000PDU PRESENCE mandatory }| - { ID id-EUTRANRoundTripDelayEstimationInfo CRITICALITY ignore TYPE EUTRANRoundTripDelayEstimationInfo PRESENCE optional}, - -- Extension for Release 9 to assist target HRPD access with the acquisition of the UE -- - ... -} - - --- ************************************************************** --- --- UE CAPABILITY INFO INDICATION ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- UE Capability Info Indication --- --- ************************************************************** - -UECapabilityInfoIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { UECapabilityInfoIndicationIEs} }, - ... -} - -UECapabilityInfoIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE mandatory } , - ... -} - --- ************************************************************** --- --- eNB STATUS TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Status Transfer --- --- ************************************************************** - -ENBStatusTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {ENBStatusTransferIEs} }, - ... -} - -ENBStatusTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-StatusTransfer-TransparentContainer CRITICALITY reject TYPE ENB-StatusTransfer-TransparentContainer PRESENCE mandatory} , - ... -} - - --- ************************************************************** --- --- MME STATUS TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Status Transfer --- --- ************************************************************** - -MMEStatusTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {MMEStatusTransferIEs} }, - ... -} - -MMEStatusTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-StatusTransfer-TransparentContainer CRITICALITY reject TYPE ENB-StatusTransfer-TransparentContainer PRESENCE mandatory} , - ... -} - - --- ************************************************************** --- --- TRACE ELEMENTARY PROCEDURES --- --- ************************************************************** --- ************************************************************** --- --- Trace Start --- --- ************************************************************** - -TraceStart ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {TraceStartIEs} }, - ... -} - -TraceStartIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- Trace Failure Indication --- --- ************************************************************** - -TraceFailureIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {TraceFailureIndicationIEs} }, - ... -} - -TraceFailureIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- DEACTIVATE TRACE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- DEACTIVATE TRACE --- --- ************************************************************** - -DeactivateTrace ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { DeactivateTraceIEs} }, - ... -} - -DeactivateTraceIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- CELL TRAFFIC TRACE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- CELL TRAFFIC TRACE --- --- ************************************************************** - -CellTrafficTrace ::= SEQUENCE { -protocolIEs ProtocolIE-Container { { CellTrafficTraceIEs } }, -... -} - -CellTrafficTraceIEs S1AP-PROTOCOL-IES ::= { - {ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - {ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - {ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory}| - {ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| - {ID id-TraceCollectionEntityIPAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE mandatory }, - ... -} - --- ************************************************************** --- --- LOCATION ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- Location Reporting Control --- --- ************************************************************** - -LocationReportingControl ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { LocationReportingControlIEs} }, - ... -} - -LocationReportingControlIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE mandatory } , - ... -} - --- ************************************************************** --- --- Location Report Failure Indication --- --- ************************************************************** - -LocationReportingFailureIndication ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { LocationReportingFailureIndicationIEs} }, - ... -} - -LocationReportingFailureIndicationIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, - ... -} - --- ************************************************************** --- --- Location Report --- --- ************************************************************** - -LocationReport ::= SEQUENCE { - protocolIEs ProtocolIE-Container { { LocationReportIEs} }, - ... -} - -LocationReportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory} | - { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory} | - { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- OVERLOAD ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- Overload Start --- --- ************************************************************** - -OverloadStart ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {OverloadStartIEs} }, - ... -} - -OverloadStartIEs S1AP-PROTOCOL-IES ::= { - { ID id-OverloadResponse CRITICALITY reject TYPE OverloadResponse PRESENCE mandatory }, - ... -} --- ************************************************************** --- --- Overload Stop --- --- ************************************************************** - -OverloadStop ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {OverloadStopIEs} }, - ... -} - -OverloadStopIEs S1AP-PROTOCOL-IES ::= { - ... -} --- ************************************************************** --- --- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Write-Replace Warning Request --- --- ************************************************************** - - -WriteReplaceWarningRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {WriteReplaceWarningRequestIEs} }, - ... -} - -WriteReplaceWarningRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| - { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional }| - { ID id-RepetitionPeriod CRITICALITY reject TYPE RepetitionPeriod PRESENCE mandatory }| - { ID id-ExtendedRepetitionPeriod CRITICALITY reject TYPE ExtendedRepetitionPeriod PRESENCE optional }| - { ID id-NumberofBroadcastRequest CRITICALITY reject TYPE NumberofBroadcastRequest PRESENCE mandatory }| - { ID id-WarningType CRITICALITY ignore TYPE WarningType PRESENCE optional }| - { ID id-WarningSecurityInfo CRITICALITY ignore TYPE WarningSecurityInfo PRESENCE optional }| - { ID id-DataCodingScheme CRITICALITY ignore TYPE DataCodingScheme PRESENCE optional }| - { ID id-WarningMessageContents CRITICALITY ignore TYPE WarningMessageContents PRESENCE optional }| - { ID id-ConcurrentWarningMessageIndicator CRITICALITY reject TYPE ConcurrentWarningMessageIndicator PRESENCE optional }, - ... -} --- ************************************************************** --- --- Write-Replace Warning Response --- --- ************************************************************** - -WriteReplaceWarningResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {WriteReplaceWarningResponseIEs} }, - ... -} - -WriteReplaceWarningResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| - { ID id-BroadcastCompletedAreaList CRITICALITY ignore TYPE BroadcastCompletedAreaList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- eNB DIRECT INFORMATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Direct Information Transfer --- --- ************************************************************** - -ENBDirectInformationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ ENBDirectInformationTransferIEs}}, - ... -} - -ENBDirectInformationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-Inter-SystemInformationTransferTypeEDT CRITICALITY reject TYPE Inter-SystemInformationTransferType PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- MME DIRECT INFORMATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Direct Information Transfer --- --- ************************************************************** - -MMEDirectInformationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ MMEDirectInformationTransferIEs}}, - ... -} - -MMEDirectInformationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-Inter-SystemInformationTransferTypeMDT CRITICALITY reject TYPE Inter-SystemInformationTransferType PRESENCE mandatory} , - ... -} --- ************************************************************** --- --- eNB CONFIGURATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- eNB Configuration Transfer --- --- ************************************************************** - -ENBConfigurationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ ENBConfigurationTransferIEs}}, - ... -} - -ENBConfigurationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-SONConfigurationTransferECT CRITICALITY ignore TYPE SONConfigurationTransfer PRESENCE optional} , - ... -} - --- ************************************************************** --- --- MME CONFIGURATION TRANSFER ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- MME Configuration Transfer --- --- ************************************************************** - -MMEConfigurationTransfer ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{ MMEConfigurationTransferIEs}}, - ... -} - -MMEConfigurationTransferIEs S1AP-PROTOCOL-IES ::= { - { ID id-SONConfigurationTransferMCT CRITICALITY ignore TYPE SONConfigurationTransfer PRESENCE optional} , - ... -} - --- ************************************************************** --- --- PRIVATE MESSAGE ELEMENTARY PROCEDURE --- --- ************************************************************** - --- ************************************************************** --- --- Private Message --- --- ************************************************************** - -PrivateMessage ::= SEQUENCE { - privateIEs PrivateIE-Container {{PrivateMessageIEs}}, - ... -} - -PrivateMessageIEs S1AP-PRIVATE-IES ::= { - ... -} - --- ************************************************************** --- --- Kill Request --- --- ************************************************************** - - -KillRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {KillRequestIEs} }, - ... -} - -KillRequestIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| - { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional }, - ... -} - --- ************************************************************** --- --- Kill Response --- --- ************************************************************** - -KillResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container { {KillResponseIEs} }, - ... -} - -KillResponseIEs S1AP-PROTOCOL-IES ::= { - { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| - { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| - { ID id-BroadcastCancelledAreaList CRITICALITY ignore TYPE BroadcastCancelledAreaList PRESENCE optional }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, - ... -} - --- ************************************************************** --- --- LPPA TRANSPORT ELEMENTARY PROCEDURES --- --- ************************************************************** - --- ************************************************************** --- --- DOWNLINK UE ASSOCIATED LPPA TRANSPORT --- --- ************************************************************** - -DownlinkUEAssociatedLPPaTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{DownlinkUEAssociatedLPPaTransportIEs}}, - ... -} - -DownlinkUEAssociatedLPPaTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory } | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory } | - { ID id-Routing-ID CRITICALITY reject TYPE Routing-ID PRESENCE mandatory } | - { ID id-LPPa-PDU CRITICALITY reject TYPE LPPa-PDU PRESENCE mandatory } , - ... -} - --- ************************************************************** --- --- UPLINK UE ASSOCIATED LPPA TRANSPORT --- --- ************************************************************** - -UplinkUEAssociatedLPPaTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UplinkUEAssociatedLPPaTransportIEs}}, - ... -} - -UplinkUEAssociatedLPPaTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory} | - { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory} | - { ID id-Routing-ID CRITICALITY reject TYPE Routing-ID PRESENCE mandatory} | - { ID id-LPPa-PDU CRITICALITY reject TYPE LPPa-PDU PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- DOWNLINK NON UE ASSOCIATED LPPA TRANSPORT --- --- ************************************************************** - -DownlinkNonUEAssociatedLPPaTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{DownlinkNonUEAssociatedLPPaTransportIEs}}, - ... -} - -DownlinkNonUEAssociatedLPPaTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-Routing-ID CRITICALITY reject TYPE Routing-ID PRESENCE mandatory} | - { ID id-LPPa-PDU CRITICALITY reject TYPE LPPa-PDU PRESENCE mandatory} , - ... -} - --- ************************************************************** --- --- UPLINK NON UE ASSOCIATED LPPA TRANSPORT --- --- ************************************************************** - -UplinkNonUEAssociatedLPPaTransport ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{UplinkNonUEAssociatedLPPaTransportIEs}}, - ... -} - -UplinkNonUEAssociatedLPPaTransportIEs S1AP-PROTOCOL-IES ::= { - { ID id-Routing-ID CRITICALITY reject TYPE Routing-ID PRESENCE mandatory} | - { ID id-LPPa-PDU CRITICALITY reject TYPE LPPa-PDU PRESENCE mandatory} , - ... -} - -Bearers-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { { Bearers-SubjectToStatusTransfer-ItemIEs } } - -Bearers-SubjectToStatusTransfer-ItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-Bearers-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE Bearers-SubjectToStatusTransfer-Item PRESENCE mandatory }, - ... -} - -E-RABInformationList ::= SEQUENCE (SIZE (1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { { E-RABInformationItemIEs } } - -E-RABInformationItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABInformationListItem CRITICALITY ignore TYPE E-RABInformationListItem PRESENCE mandatory }, - ... -} - -E-RABList ::= SEQUENCE (SIZE(1.. maxNrOfE-RABs)) OF ProtocolIE-SingleContainer { {E-RABItemIEs} } - -E-RABItemIEs S1AP-PROTOCOL-IES ::= { - { ID id-E-RABItem CRITICALITY ignore TYPE E-RABItem PRESENCE mandatory }, - ... -} - - -SONInformationReply-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - -- Extension for Release 9 to transfer Time synchronization information -- - {ID id-Time-Synchronization-Info CRITICALITY ignore EXTENSION TimeSynchronizationInfo PRESENCE optional}, - ... -} - -AllocationAndRetentionPriority-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -Bearers-SubjectToStatusTransfer-ItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CancelledCellinEAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CancelledCellinTAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CellID-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CellID-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -Cdma2000OneXSRVCCInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CellType-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CGI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CSG-IdList-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -COUNTvalue-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CriticalityDiagnostics-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CriticalityDiagnostics-IE-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -EmergencyAreaID-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -EmergencyAreaID-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CompletedCellinEAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -GERAN-Cell-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -ENB-StatusTransfer-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RABInformationListItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RABItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -E-RABQoSParameters-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -EUTRAN-CGI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -ForbiddenTAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -ForbiddenLAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -GBR-QosInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -GUMMEI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -HandoverRestrictionList-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -LAI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -LastVisitedEUTRANCellInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -RequestType-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -RIMTransfer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -SecurityContext-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -SONConfigurationTransfer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -SourceeNB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -ServedGUMMEIsItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -SupportedTAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -TimeSynchronizationInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -TAI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -TAI-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -TAI-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -CompletedCellinTAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -S-TMSI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -TargeteNB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -TargetRNC-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -TargeteNB-ToSourceeNB-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -TraceActivation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -UEAggregate-MaximumBitrates-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -UE-associatedLogicalS1-ConnectionItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -UESecurityCapabilities-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -GlobalENB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -X2TNLConfigurationInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -UE-S1AP-ID-pair-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { - ... -} - -END \ No newline at end of file diff --git a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU-Descriptions.asn b/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU-Descriptions.asn deleted file mode 100644 index cf7114f480..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU-Descriptions.asn +++ /dev/null @@ -1,591 +0,0 @@ --- ************************************************************** --- --- Elementary Procedure definitions --- --- ************************************************************** - -S1AP-PDU-Descriptions { -itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) -eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Descriptions (0)} - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- ************************************************************** --- --- IE parameter types from other modules. --- --- ************************************************************** - -IMPORTS - Criticality, - ProcedureCode -FROM S1AP-CommonDataTypes - - CellTrafficTrace, - DeactivateTrace, - DownlinkUEAssociatedLPPaTransport, - DownlinkNASTransport, - DownlinkNonUEAssociatedLPPaTransport, - DownlinkS1cdma2000tunneling, - ENBDirectInformationTransfer, - ENBStatusTransfer, - ENBConfigurationUpdate, - ENBConfigurationUpdateAcknowledge, - ENBConfigurationUpdateFailure, - ErrorIndication, - HandoverCancel, - HandoverCancelAcknowledge, - HandoverCommand, - HandoverFailure, - HandoverNotify, - HandoverPreparationFailure, - HandoverRequest, - HandoverRequestAcknowledge, - HandoverRequired, - InitialContextSetupFailure, - InitialContextSetupRequest, - InitialContextSetupResponse, - InitialUEMessage, - KillRequest, - KillResponse, - LocationReportingControl, - LocationReportingFailureIndication, - LocationReport, - MMEConfigurationUpdate, - MMEConfigurationUpdateAcknowledge, - MMEConfigurationUpdateFailure, - MMEDirectInformationTransfer, - MMEStatusTransfer, - NASNonDeliveryIndication, - OverloadStart, - OverloadStop, - Paging, - PathSwitchRequest, - PathSwitchRequestAcknowledge, - PathSwitchRequestFailure, - PrivateMessage, - Reset, - ResetAcknowledge, - S1SetupFailure, - S1SetupRequest, - S1SetupResponse, - E-RABModifyRequest, - E-RABModifyResponse, - E-RABReleaseCommand, - E-RABReleaseResponse, - E-RABReleaseIndication, - E-RABSetupRequest, - E-RABSetupResponse, - TraceFailureIndication, - TraceStart, - UECapabilityInfoIndication, - UEContextModificationFailure, - UEContextModificationRequest, - UEContextModificationResponse, - UEContextReleaseCommand, - UEContextReleaseComplete, - UEContextReleaseRequest, - UplinkUEAssociatedLPPaTransport, - UplinkNASTransport, - UplinkNonUEAssociatedLPPaTransport, - UplinkS1cdma2000tunneling, - WriteReplaceWarningRequest, - WriteReplaceWarningResponse, - ENBConfigurationTransfer, - MMEConfigurationTransfer - - -FROM S1AP-PDU-Contents - - id-CellTrafficTrace, - id-DeactivateTrace, - id-downlinkUEAssociatedLPPaTransport, - id-downlinkNASTransport, - id-downlinkNonUEAssociatedLPPaTransport, - id-DownlinkS1cdma2000tunneling, - id-eNBStatusTransfer, - id-ErrorIndication, - id-HandoverCancel, - id-HandoverNotification, - id-HandoverPreparation, - id-HandoverResourceAllocation, - id-InitialContextSetup, - id-initialUEMessage, - id-ENBConfigurationUpdate, - id-Kill, - id-LocationReportingControl, - id-LocationReportingFailureIndication, - id-LocationReport, - id-eNBDirectInformationTransfer, - id-MMEConfigurationUpdate, - id-MMEDirectInformationTransfer, - id-MMEStatusTransfer, - id-NASNonDeliveryIndication, - id-OverloadStart, - id-OverloadStop, - id-Paging, - id-PathSwitchRequest, - id-PrivateMessage, - id-Reset, - id-S1Setup, - id-E-RABModify, - id-E-RABRelease, - id-E-RABReleaseIndication, - id-E-RABSetup, - id-TraceFailureIndication, - id-TraceStart, - id-UECapabilityInfoIndication, - id-UEContextModification, - id-UEContextRelease, - id-UEContextReleaseRequest, - id-uplinkUEAssociatedLPPaTransport, - id-uplinkNASTransport, - id-uplinkNonUEAssociatedLPPaTransport, - id-UplinkS1cdma2000tunneling, - id-WriteReplaceWarning, - id-eNBConfigurationTransfer, - id-MMEConfigurationTransfer -FROM S1AP-Constants; - - --- ************************************************************** --- --- Interface Elementary Procedure Class --- --- ************************************************************** - -S1AP-ELEMENTARY-PROCEDURE ::= CLASS { - &InitiatingMessage , - &SuccessfulOutcome OPTIONAL, - &UnsuccessfulOutcome OPTIONAL, - &procedureCode ProcedureCode UNIQUE, - &criticality Criticality DEFAULT ignore -} -WITH SYNTAX { - INITIATING MESSAGE &InitiatingMessage - [SUCCESSFUL OUTCOME &SuccessfulOutcome] - [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] - PROCEDURE CODE &procedureCode - [CRITICALITY &criticality] -} - --- ************************************************************** --- --- Interface PDU Definition --- --- ************************************************************** - -S1AP-PDU ::= CHOICE { - initiatingMessage InitiatingMessage, - successfulOutcome SuccessfulOutcome, - unsuccessfulOutcome UnsuccessfulOutcome, - ... -} - -InitiatingMessage ::= SEQUENCE { - procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), - criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value S1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} - -SuccessfulOutcome ::= SEQUENCE { - procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), - criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value S1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} - -UnsuccessfulOutcome ::= SEQUENCE { - procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), - criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), - value S1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) -} - --- ************************************************************** --- --- Interface Elementary Procedure List --- --- ************************************************************** - -S1AP-ELEMENTARY-PROCEDURES S1AP-ELEMENTARY-PROCEDURE ::= { - S1AP-ELEMENTARY-PROCEDURES-CLASS-1 | - S1AP-ELEMENTARY-PROCEDURES-CLASS-2, - ... -} - - -S1AP-ELEMENTARY-PROCEDURES-CLASS-1 S1AP-ELEMENTARY-PROCEDURE ::= { - handoverPreparation | - handoverResourceAllocation | - pathSwitchRequest | - e-RABSetup | - e-RABModify | - e-RABRelease | - initialContextSetup | - handoverCancel | - kill | - reset | - s1Setup | - uEContextModification | - uEContextRelease | - eNBConfigurationUpdate | - mMEConfigurationUpdate | - writeReplaceWarning , - ... -} - -S1AP-ELEMENTARY-PROCEDURES-CLASS-2 S1AP-ELEMENTARY-PROCEDURE ::= { - handoverNotification | - e-RABReleaseIndication | - paging | - downlinkNASTransport | - initialUEMessage | - uplinkNASTransport | - errorIndication | - nASNonDeliveryIndication | - uEContextReleaseRequest | - downlinkS1cdma2000tunneling | - uplinkS1cdma2000tunneling | - uECapabilityInfoIndication | - eNBStatusTransfer | - mMEStatusTransfer | - deactivateTrace | - traceStart | - traceFailureIndication | - cellTrafficTrace | - locationReportingControl | - locationReportingFailureIndication | - locationReport | - overloadStart | - overloadStop | - eNBDirectInformationTransfer | - mMEDirectInformationTransfer | - eNBConfigurationTransfer | - mMEConfigurationTransfer | - privateMessage , - ..., - downlinkUEAssociatedLPPaTransport | - uplinkUEAssociatedLPPaTransport | - downlinkNonUEAssociatedLPPaTransport | - uplinkNonUEAssociatedLPPaTransport -} - --- ************************************************************** --- --- Interface Elementary Procedures --- --- ************************************************************** - -handoverPreparation S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverRequired - SUCCESSFUL OUTCOME HandoverCommand - UNSUCCESSFUL OUTCOME HandoverPreparationFailure - PROCEDURE CODE id-HandoverPreparation - CRITICALITY reject -} - -handoverResourceAllocation S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverRequest - SUCCESSFUL OUTCOME HandoverRequestAcknowledge - UNSUCCESSFUL OUTCOME HandoverFailure - PROCEDURE CODE id-HandoverResourceAllocation - CRITICALITY reject -} - -handoverNotification S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverNotify - PROCEDURE CODE id-HandoverNotification - CRITICALITY ignore -} - -pathSwitchRequest S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE PathSwitchRequest - SUCCESSFUL OUTCOME PathSwitchRequestAcknowledge - UNSUCCESSFUL OUTCOME PathSwitchRequestFailure - PROCEDURE CODE id-PathSwitchRequest - CRITICALITY reject -} - -e-RABSetup S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE E-RABSetupRequest - SUCCESSFUL OUTCOME E-RABSetupResponse - PROCEDURE CODE id-E-RABSetup - CRITICALITY reject -} - -e-RABModify S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE E-RABModifyRequest - SUCCESSFUL OUTCOME E-RABModifyResponse - PROCEDURE CODE id-E-RABModify - CRITICALITY reject -} - -e-RABRelease S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE E-RABReleaseCommand - SUCCESSFUL OUTCOME E-RABReleaseResponse - PROCEDURE CODE id-E-RABRelease - CRITICALITY reject -} - -e-RABReleaseIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE E-RABReleaseIndication - PROCEDURE CODE id-E-RABReleaseIndication - CRITICALITY ignore -} - -initialContextSetup S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE InitialContextSetupRequest - SUCCESSFUL OUTCOME InitialContextSetupResponse - UNSUCCESSFUL OUTCOME InitialContextSetupFailure - PROCEDURE CODE id-InitialContextSetup - CRITICALITY reject -} - -uEContextReleaseRequest S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UEContextReleaseRequest - PROCEDURE CODE id-UEContextReleaseRequest - CRITICALITY ignore -} - -paging S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE Paging - PROCEDURE CODE id-Paging - CRITICALITY ignore -} - -downlinkNASTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DownlinkNASTransport - PROCEDURE CODE id-downlinkNASTransport - CRITICALITY ignore -} - -initialUEMessage S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE InitialUEMessage - PROCEDURE CODE id-initialUEMessage - CRITICALITY ignore -} - -uplinkNASTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UplinkNASTransport - PROCEDURE CODE id-uplinkNASTransport - CRITICALITY ignore -} -nASNonDeliveryIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE NASNonDeliveryIndication - PROCEDURE CODE id-NASNonDeliveryIndication - CRITICALITY ignore -} - -handoverCancel S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE HandoverCancel - SUCCESSFUL OUTCOME HandoverCancelAcknowledge - PROCEDURE CODE id-HandoverCancel - CRITICALITY reject -} - -reset S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE Reset - SUCCESSFUL OUTCOME ResetAcknowledge - PROCEDURE CODE id-Reset - CRITICALITY reject -} - -errorIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ErrorIndication - PROCEDURE CODE id-ErrorIndication - CRITICALITY ignore -} - -s1Setup S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE S1SetupRequest - SUCCESSFUL OUTCOME S1SetupResponse - UNSUCCESSFUL OUTCOME S1SetupFailure - PROCEDURE CODE id-S1Setup - CRITICALITY reject -} - -eNBConfigurationUpdate S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBConfigurationUpdate - SUCCESSFUL OUTCOME ENBConfigurationUpdateAcknowledge - UNSUCCESSFUL OUTCOME ENBConfigurationUpdateFailure - PROCEDURE CODE id-ENBConfigurationUpdate - CRITICALITY reject -} - -mMEConfigurationUpdate S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MMEConfigurationUpdate - SUCCESSFUL OUTCOME MMEConfigurationUpdateAcknowledge - UNSUCCESSFUL OUTCOME MMEConfigurationUpdateFailure - PROCEDURE CODE id-MMEConfigurationUpdate - CRITICALITY reject -} - -downlinkS1cdma2000tunneling S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DownlinkS1cdma2000tunneling - PROCEDURE CODE id-DownlinkS1cdma2000tunneling - CRITICALITY ignore -} - -uplinkS1cdma2000tunneling S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UplinkS1cdma2000tunneling - PROCEDURE CODE id-UplinkS1cdma2000tunneling - CRITICALITY ignore -} - -uEContextModification S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UEContextModificationRequest - SUCCESSFUL OUTCOME UEContextModificationResponse - UNSUCCESSFUL OUTCOME UEContextModificationFailure - - PROCEDURE CODE id-UEContextModification - CRITICALITY reject -} - -uECapabilityInfoIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UECapabilityInfoIndication - PROCEDURE CODE id-UECapabilityInfoIndication - CRITICALITY ignore -} - -uEContextRelease S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UEContextReleaseCommand - SUCCESSFUL OUTCOME UEContextReleaseComplete - PROCEDURE CODE id-UEContextRelease - CRITICALITY reject -} - -eNBStatusTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBStatusTransfer - PROCEDURE CODE id-eNBStatusTransfer - CRITICALITY ignore -} - -mMEStatusTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MMEStatusTransfer - PROCEDURE CODE id-MMEStatusTransfer - CRITICALITY ignore -} - -deactivateTrace S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DeactivateTrace - PROCEDURE CODE id-DeactivateTrace - CRITICALITY ignore -} - -traceStart S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE TraceStart - PROCEDURE CODE id-TraceStart - CRITICALITY ignore -} - -traceFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE TraceFailureIndication - PROCEDURE CODE id-TraceFailureIndication - CRITICALITY ignore -} -cellTrafficTrace S1AP-ELEMENTARY-PROCEDURE ::={ - INITIATING MESSAGE CellTrafficTrace - PROCEDURE CODE id-CellTrafficTrace - CRITICALITY ignore -} - -locationReportingControl S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE LocationReportingControl - PROCEDURE CODE id-LocationReportingControl - CRITICALITY ignore -} - -locationReportingFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE LocationReportingFailureIndication - PROCEDURE CODE id-LocationReportingFailureIndication - CRITICALITY ignore -} - -locationReport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE LocationReport - PROCEDURE CODE id-LocationReport - CRITICALITY ignore -} - -overloadStart S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE OverloadStart - PROCEDURE CODE id-OverloadStart - CRITICALITY ignore -} - -overloadStop S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE OverloadStop - PROCEDURE CODE id-OverloadStop - CRITICALITY reject -} - -writeReplaceWarning S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE WriteReplaceWarningRequest - SUCCESSFUL OUTCOME WriteReplaceWarningResponse - PROCEDURE CODE id-WriteReplaceWarning - CRITICALITY reject -} - -eNBDirectInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBDirectInformationTransfer - PROCEDURE CODE id-eNBDirectInformationTransfer - CRITICALITY ignore -} - -mMEDirectInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MMEDirectInformationTransfer - PROCEDURE CODE id-MMEDirectInformationTransfer - CRITICALITY ignore -} - -eNBConfigurationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE ENBConfigurationTransfer - PROCEDURE CODE id-eNBConfigurationTransfer - CRITICALITY ignore -} - -mMEConfigurationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE MMEConfigurationTransfer - PROCEDURE CODE id-MMEConfigurationTransfer - CRITICALITY ignore -} - - -privateMessage S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE PrivateMessage - PROCEDURE CODE id-PrivateMessage - CRITICALITY ignore -} - -kill S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE KillRequest - SUCCESSFUL OUTCOME KillResponse - PROCEDURE CODE id-Kill - CRITICALITY reject -} - -downlinkUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DownlinkUEAssociatedLPPaTransport - PROCEDURE CODE id-downlinkUEAssociatedLPPaTransport - CRITICALITY ignore -} - -uplinkUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UplinkUEAssociatedLPPaTransport - PROCEDURE CODE id-uplinkUEAssociatedLPPaTransport - CRITICALITY ignore -} -downlinkNonUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE DownlinkNonUEAssociatedLPPaTransport - PROCEDURE CODE id-downlinkNonUEAssociatedLPPaTransport - CRITICALITY ignore -} - -uplinkNonUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { - INITIATING MESSAGE UplinkNonUEAssociatedLPPaTransport - PROCEDURE CODE id-uplinkNonUEAssociatedLPPaTransport - CRITICALITY ignore -} - -END \ No newline at end of file diff --git a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU.asn b/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU.asn deleted file mode 100644 index 9a818d4e24..0000000000 --- a/openair3/S1AP/MESSAGES/ASN1/R9.8/S1AP-PDU.asn +++ /dev/null @@ -1,413 +0,0 @@ -S1AP-PDU { - itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) - eps-Access (21) modules (3) s1ap (1) version1 (1) -} - -DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - -IMPORTS - Criticality, - ProcedureCode, - ProtocolIE-ID - -FROM S1AP-CommonDataTypes - - maxProtocolIEs - -FROM S1AP-Constants; - -S1AP-PDU ::= CHOICE { - initiatingMessage InitiatingMessage, - successfulOutcome SuccessfulOutcome, - unsuccessfulOutcome UnsuccessfulOutcome, - ... -} - -InitiatingMessage ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -SuccessfulOutcome ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -UnsuccessfulOutcome ::= SEQUENCE { - procedureCode ProcedureCode, - criticality Criticality, - value ANY -} - -HandoverRequired ::= SEQUENCE { - handoverRequired-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverCommand ::= SEQUENCE { - handoverCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverPreparationFailure ::= SEQUENCE { - handoverPreparationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverRequest ::= SEQUENCE { - handoverRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverRequestAcknowledge ::= SEQUENCE { - handoverRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverFailure ::= SEQUENCE { - handoverFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverNotify ::= SEQUENCE { - handoverNotify-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PathSwitchRequest ::= SEQUENCE { - pathSwitchRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PathSwitchRequestAcknowledge ::= SEQUENCE { - pathSwitchRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PathSwitchRequestFailure ::= SEQUENCE { - pathSwitchRequestFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABSetupRequest ::= SEQUENCE { - e-RABSetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABSetupResponse ::= SEQUENCE { - e-RABSetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABModifyRequest ::= SEQUENCE { - e-RABModifyRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABModifyResponse ::= SEQUENCE { - e-RABModifyResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABReleaseIndication ::= SEQUENCE { - e-RABReleaseIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABReleaseCommand ::= SEQUENCE { - e-RABReleaseCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -E-RABReleaseResponse ::= SEQUENCE { - e-RABReleaseResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -InitialContextSetupRequest ::= SEQUENCE { - initialContextSetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -InitialContextSetupResponse ::= SEQUENCE { - initialContextSetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -InitialContextSetupFailure ::= SEQUENCE { - initialContextSetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextReleaseRequest ::= SEQUENCE { - ueContextReleaseRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -Paging ::= SEQUENCE { - paging-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -DownlinkNASTransport ::= SEQUENCE { - downlinkNASTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -InitialUEMessage ::= SEQUENCE { - initialUEMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UplinkNASTransport ::= SEQUENCE { - uplinkNASTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -NASNonDeliveryIndication ::= SEQUENCE { - nasNonDeliveryIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverCancel ::= SEQUENCE { - handoverCancel-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -HandoverCancelAcknowledge ::= SEQUENCE { - handoverCancelAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -Reset ::= SEQUENCE { - reset-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ResetAcknowledge ::= SEQUENCE { - resetAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -S1SetupResponse ::= SEQUENCE { - s1SetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -S1SetupRequest ::= SEQUENCE { - s1SetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -S1SetupFailure ::= SEQUENCE -{ - s1SetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ErrorIndication ::= SEQUENCE { - errorIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdate ::= SEQUENCE { - eNBConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - eNBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationUpdateFailure ::= SEQUENCE { - eNBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEConfigurationUpdate ::= SEQUENCE { - mmeConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEConfigurationUpdateAcknowledge ::= SEQUENCE { - mmeConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEConfigurationUpdateFailure ::= SEQUENCE { - mmeConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -DownlinkS1cdma2000tunneling ::= SEQUENCE { - downlinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UplinkS1cdma2000tunneling ::= SEQUENCE { - uplinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextModificationRequest ::= SEQUENCE { - ueContextModificationRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextModificationResponse ::= SEQUENCE { - ueContextModificationResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextModificationFailure ::= SEQUENCE { - ueContextModificationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UECapabilityInfoIndication ::= SEQUENCE { - ueCapabilityInfoIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextReleaseCommand ::= SEQUENCE { - ueContextReleaseCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UEContextReleaseComplete ::= SEQUENCE { - ueContextReleaseComplete-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBStatusTransfer ::= SEQUENCE { - eNBStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEStatusTransfer ::= SEQUENCE { - mmeStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -DeactivateTrace ::= SEQUENCE { - deactivateTrace-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -TraceStart ::= SEQUENCE { - traceStart-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -TraceFailureIndication ::= SEQUENCE { - traceFailureIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -CellTrafficTrace ::= SEQUENCE { - cellTrafficTrace-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -LocationReportingControl ::= SEQUENCE { - locationReportingControl-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -LocationReportingFailureIndication ::= SEQUENCE { - locationReportingFailureIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -LocationReport ::= SEQUENCE { - locationReport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -OverloadStart ::= SEQUENCE { - overloadStart-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -OverloadStop ::= SEQUENCE { - overloadStop-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -WriteReplaceWarningRequest ::= SEQUENCE { - writeReplaceWarningRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -WriteReplaceWarningResponse ::= SEQUENCE { - writeReplaceWarningResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBDirectInformationTransfer ::= SEQUENCE { - eNBDirectInformationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEDirectInformationTransfer ::= SEQUENCE { - mmeDirectInformationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -ENBConfigurationTransfer ::= SEQUENCE { - eNBConfigurationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -MMEConfigurationTransfer ::= SEQUENCE { - mmeConfigurationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -PrivateMessage ::= SEQUENCE { - privateMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -KillRequest ::= SEQUENCE { - killRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -KillResponse ::= SEQUENCE { - killResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -DownlinkUEAssociatedLPPaTransport ::= SEQUENCE { - downlinkUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UplinkUEAssociatedLPPaTransport ::= SEQUENCE { - uplinkUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -DownlinkNonUEAssociatedLPPaTransport ::= SEQUENCE { - downlinkNonUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -UplinkNonUEAssociatedLPPaTransport ::= SEQUENCE { - uplinkNonUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE, - ... -} - -IE ::= SEQUENCE { - id ProtocolIE-ID, - criticality Criticality, - value ANY -} - -END \ No newline at end of file diff --git a/openair3/S1AP/s1ap_common.c b/openair3/S1AP/s1ap_common.c index 0bd132a228..7c4f970af2 100644 --- a/openair3/S1AP/s1ap_common.c +++ b/openair3/S1AP/s1ap_common.c @@ -22,7 +22,7 @@ /*! \file s1ap_common.c * \brief s1ap procedures for both eNB and MME * \author Sebastien ROUX and Navid Nikaein - * \email navid.nikaein@eurecom.fr + * \email navid.nikaein@eurecom.fr * \date 2012-2015 * \version 0.1 */ @@ -30,7 +30,7 @@ #include #include "s1ap_common.h" -#include "S1AP-PDU.h" +#include "S1AP_S1AP-PDU.h" int asn_debug = 0; int asn1_xer_print = 0; @@ -53,144 +53,6 @@ inline void ASN_DEBUG(const char *fmt, ...) } #endif -ssize_t s1ap_generate_initiating_message( - uint8_t **buffer, - uint32_t *length, - e_S1ap_ProcedureCode procedureCode, - S1ap_Criticality_t criticality, - asn_TYPE_descriptor_t *td, - void *sptr) +void s1ap_handle_criticality(S1AP_Criticality_t criticality) { - S1AP_PDU_t pdu; - ssize_t encoded; - - memset(&pdu, 0, sizeof(S1AP_PDU_t)); - - pdu.present = S1AP_PDU_PR_initiatingMessage; - pdu.choice.initiatingMessage.procedureCode = procedureCode; - pdu.choice.initiatingMessage.criticality = criticality; - ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr); - - if (asn1_xer_print) { - xer_fprint(stdout, &asn_DEF_S1AP_PDU, (void *)&pdu); - } - - /* We can safely free list of IE from sptr */ - ASN_STRUCT_FREE_CONTENTS_ONLY(*td, sptr); - - if ((encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &pdu, - (void **)buffer)) < 0) { - return -1; - } - - *length = encoded; - return encoded; -} - -ssize_t s1ap_generate_successfull_outcome( - uint8_t **buffer, - uint32_t *length, - e_S1ap_ProcedureCode procedureCode, - S1ap_Criticality_t criticality, - asn_TYPE_descriptor_t *td, - void *sptr) -{ - S1AP_PDU_t pdu; - ssize_t encoded; - - memset(&pdu, 0, sizeof(S1AP_PDU_t)); - - pdu.present = S1AP_PDU_PR_successfulOutcome; - pdu.choice.successfulOutcome.procedureCode = procedureCode; - pdu.choice.successfulOutcome.criticality = criticality; - ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr); - - if (asn1_xer_print) { - xer_fprint(stdout, &asn_DEF_S1AP_PDU, (void *)&pdu); - } - - /* We can safely free list of IE from sptr */ - ASN_STRUCT_FREE_CONTENTS_ONLY(*td, sptr); - - if ((encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &pdu, - (void **)buffer)) < 0) { - return -1; - } - - *length = encoded; - - return encoded; -} - -ssize_t s1ap_generate_unsuccessfull_outcome( - uint8_t **buffer, - uint32_t *length, - e_S1ap_ProcedureCode procedureCode, - S1ap_Criticality_t criticality, - asn_TYPE_descriptor_t *td, - void *sptr) -{ - S1AP_PDU_t pdu; - ssize_t encoded; - - memset(&pdu, 0, sizeof(S1AP_PDU_t)); - - pdu.present = S1AP_PDU_PR_unsuccessfulOutcome; - pdu.choice.successfulOutcome.procedureCode = procedureCode; - pdu.choice.successfulOutcome.criticality = criticality; - ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr); - - if (asn1_xer_print) { - xer_fprint(stdout, &asn_DEF_S1AP_PDU, (void *)&pdu); - } - - /* We can safely free list of IE from sptr */ - ASN_STRUCT_FREE_CONTENTS_ONLY(*td, sptr); - - if ((encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &pdu, - (void **)buffer)) < 0) { - return -1; - } - - *length = encoded; - - return encoded; -} - -S1ap_IE_t *s1ap_new_ie( - S1ap_ProtocolIE_ID_t id, - S1ap_Criticality_t criticality, - asn_TYPE_descriptor_t *type, - void *sptr) -{ - S1ap_IE_t *buff; - - if ((buff = malloc(sizeof(S1ap_IE_t))) == NULL) { - // Possible error on malloc - return NULL; - } - - memset((void *)buff, 0, sizeof(S1ap_IE_t)); - - buff->id = id; - buff->criticality = criticality; - - if (ANY_fromType_aper(&buff->value, type, sptr) < 0) { - fprintf(stderr, "Encoding of %s failed\n", type->name); - free(buff); - return NULL; - } - - if (asn1_xer_print) - if (xer_fprint(stdout, &asn_DEF_S1ap_IE, buff) < 0) { - free(buff); - return NULL; - } - - return buff; -} - -void s1ap_handle_criticality(S1ap_Criticality_t criticality) -{ - } diff --git a/openair3/S1AP/s1ap_common.h b/openair3/S1AP/s1ap_common.h index a327e18b02..f1a00d3c34 100644 --- a/openair3/S1AP/s1ap_common.h +++ b/openair3/S1AP/s1ap_common.h @@ -39,343 +39,19 @@ extern int asn_debug; inline void ASN_DEBUG(const char *fmt, ...); #endif -#include "S1ap-Criticality.h" -#include "S1ap-Presence.h" -#include "S1ap-PrivateIE-ID.h" -#include "S1ap-ProcedureCode.h" -#include "S1ap-ProtocolExtensionID.h" -#include "S1ap-ProtocolIE-ID.h" -#include "S1ap-TriggeringMessage.h" -#include "S1ap-AllocationAndRetentionPriority.h" -#include "S1ap-Bearers-SubjectToStatusTransfer-List.h" -#include "S1ap-Bearers-SubjectToStatusTransfer-Item.h" -#include "S1ap-BitRate.h" -#include "S1ap-BPLMNs.h" -#include "S1ap-BroadcastCompletedAreaList.h" -#include "S1ap-Cause.h" -#include "S1ap-CauseMisc.h" -#include "S1ap-CauseProtocol.h" -#include "S1ap-CauseRadioNetwork.h" -#include "S1ap-CauseTransport.h" -#include "S1ap-CauseNas.h" -#include "S1ap-CellIdentity.h" -#include "S1ap-CellID-Broadcast.h" -#include "S1ap-CellID-Broadcast-Item.h" -#include "S1ap-Cdma2000PDU.h" -#include "S1ap-Cdma2000RATType.h" -#include "S1ap-Cdma2000SectorID.h" -#include "S1ap-Cdma2000HOStatus.h" -#include "S1ap-Cdma2000HORequiredIndication.h" -#include "S1ap-Cdma2000OneXSRVCCInfo.h" -#include "S1ap-Cdma2000OneXMEID.h" -#include "S1ap-Cdma2000OneXMSI.h" -#include "S1ap-Cdma2000OneXPilot.h" -#include "S1ap-Cdma2000OneXRAND.h" -#include "S1ap-Cell-Size.h" -#include "S1ap-CellType.h" -#include "S1ap-CGI.h" -#include "S1ap-CI.h" -#include "S1ap-CNDomain.h" -#include "S1ap-CSFallbackIndicator.h" -#include "S1ap-CSG-Id.h" -#include "S1ap-CSG-IdList.h" -#include "S1ap-CSG-IdList-Item.h" -#include "S1ap-COUNTvalue.h" -#include "S1ap-DataCodingScheme.h" -#include "S1ap-DL-Forwarding.h" -#include "S1ap-Direct-Forwarding-Path-Availability.h" -#include "S1ap-ECGIList.h" -#include "S1ap-EmergencyAreaIDList.h" -#include "S1ap-EmergencyAreaID.h" -#include "S1ap-EmergencyAreaID-Broadcast.h" -#include "S1ap-EmergencyAreaID-Broadcast-Item.h" -#include "S1ap-CompletedCellinEAI.h" -#include "S1ap-CompletedCellinEAI-Item.h" -#include "S1ap-ENB-ID.h" -#include "S1ap-GERAN-Cell-ID.h" -#include "S1ap-Global-ENB-ID.h" -#include "S1ap-ENB-StatusTransfer-TransparentContainer.h" -#include "S1ap-ENBname.h" -#include "S1ap-ENBX2TLAs.h" -#include "S1ap-EncryptionAlgorithms.h" -#include "S1ap-EPLMNs.h" -#include "S1ap-EventType.h" -#include "S1ap-E-RAB-ID.h" -#include "S1ap-E-RABInformationList.h" -#include "S1ap-E-RABInformationListItem.h" -#include "S1ap-E-RABList.h" -#include "S1ap-E-RABItem.h" -#include "S1ap-E-RABLevelQoSParameters.h" -#include "S1ap-EUTRAN-CGI.h" -#include "S1ap-ExtendedRNC-ID.h" -#include "S1ap-ForbiddenInterRATs.h" -#include "S1ap-ForbiddenTAs.h" -#include "S1ap-ForbiddenTAs-Item.h" -#include "S1ap-ForbiddenTACs.h" -#include "S1ap-ForbiddenLAs.h" -#include "S1ap-ForbiddenLAs-Item.h" -#include "S1ap-ForbiddenLACs.h" -#include "S1ap-GBR-QosInformation.h" -#include "S1ap-GTP-TEID.h" -#include "S1ap-GUMMEI.h" -#include "S1ap-HandoverRestrictionList.h" -#include "S1ap-HandoverType.h" -#include "S1ap-HFN.h" -#include "S1ap-IMSI.h" -#include "S1ap-IntegrityProtectionAlgorithms.h" -#include "S1ap-InterfacesToTrace.h" -#include "S1ap-LAC.h" -#include "S1ap-LAI.h" -#include "S1ap-LastVisitedCell-Item.h" -#include "S1ap-LastVisitedEUTRANCellInformation.h" -#include "S1ap-LastVisitedUTRANCellInformation.h" -#include "S1ap-LastVisitedGERANCellInformation.h" -#include "S1ap-L3-Information.h" -#include "S1ap-MessageIdentifier.h" -#include "S1ap-MMEname.h" -#include "S1ap-MME-Group-ID.h" -#include "S1ap-MME-Code.h" -#include "S1ap-M-TMSI.h" -#include "S1ap-MSClassmark2.h" -#include "S1ap-MSClassmark3.h" -#include "S1ap-NAS-PDU.h" -#include "S1ap-NASSecurityParametersfromE-UTRAN.h" -#include "S1ap-NASSecurityParameterstoE-UTRAN.h" -#include "S1ap-NumberofBroadcastRequest.h" -#include "S1ap-NumberOfBroadcasts.h" -#include "S1ap-OldBSS-ToNewBSS-Information.h" -#include "S1ap-OverloadAction.h" -#include "S1ap-OverloadResponse.h" -#include "S1ap-PagingDRX.h" -#include "S1ap-PDCP-SN.h" -#include "S1ap-PLMNidentity.h" -#include "S1ap-Pre-emptionCapability.h" -#include "S1ap-Pre-emptionVulnerability.h" -#include "S1ap-PriorityLevel.h" -#include "S1ap-QCI.h" -#include "S1ap-ReceiveStatusofULPDCPSDUs.h" -#include "S1ap-RelativeMMECapacity.h" -#include "S1ap-RAC.h" -#include "S1ap-RequestType.h" -#include "S1ap-RIMTransfer.h" -#include "S1ap-RIMInformation.h" -#include "S1ap-RIMRoutingAddress.h" -#include "S1ap-ReportArea.h" -#include "S1ap-RepetitionPeriod.h" -#include "S1ap-RNC-ID.h" -#include "S1ap-RRC-Container.h" -#include "S1ap-RRC-Establishment-Cause.h" -#include "S1ap-SecurityKey.h" -#include "S1ap-SecurityContext.h" -#include "S1ap-SerialNumber.h" -#include "S1ap-SONInformation.h" -#include "S1ap-SONInformationRequest.h" -#include "S1ap-SONInformationReply.h" -#include "S1ap-SONConfigurationTransfer.h" -#include "S1ap-Source-ToTarget-TransparentContainer.h" -#include "S1ap-SourceBSS-ToTargetBSS-TransparentContainer.h" -#include "S1ap-SourceeNB-ID.h" -#include "S1ap-SRVCCOperationPossible.h" -#include "S1ap-SRVCCHOIndication.h" -#include "S1ap-SourceeNB-ToTargeteNB-TransparentContainer.h" -#include "S1ap-SourceRNC-ToTargetRNC-TransparentContainer.h" -#include "S1ap-ServedGUMMEIs.h" -#include "S1ap-ServedGUMMEIsItem.h" -#include "S1ap-ServedGroupIDs.h" -#include "S1ap-ServedMMECs.h" -#include "S1ap-ServedPLMNs.h" -#include "S1ap-SubscriberProfileIDforRFP.h" -#include "S1ap-SupportedTAs.h" -#include "S1ap-SupportedTAs-Item.h" -#include "S1ap-S-TMSI.h" -#include "S1ap-TAC.h" -#include "S1ap-TAIItem.h" -#include "S1ap-TAIList.h" -#include "S1ap-TAIListforWarning.h" -#include "S1ap-TAI.h" -#include "S1ap-TAI-Broadcast.h" -#include "S1ap-TAI-Broadcast-Item.h" -#include "S1ap-CompletedCellinTAI.h" -#include "S1ap-CompletedCellinTAI-Item.h" -#include "S1ap-TargetID.h" -#include "S1ap-TargeteNB-ID.h" -#include "S1ap-TargetRNC-ID.h" -#include "S1ap-TargeteNB-ToSourceeNB-TransparentContainer.h" -#include "S1ap-Target-ToSource-TransparentContainer.h" -#include "S1ap-TargetRNC-ToSourceRNC-TransparentContainer.h" -#include "S1ap-TargetBSS-ToSourceBSS-TransparentContainer.h" -#include "S1ap-TimeToWait.h" -#include "S1ap-Time-UE-StayedInCell.h" -#include "S1ap-TransportLayerAddress.h" -#include "S1ap-TraceActivation.h" -#include "S1ap-TraceDepth.h" -#include "S1ap-E-UTRAN-Trace-ID.h" -#include "S1ap-TypeOfError.h" -#include "S1ap-UEAggregateMaximumBitrate.h" -#include "S1ap-UE-associatedLogicalS1-ConnectionItem.h" -#include "S1ap-UEIdentityIndexValue.h" -#include "S1ap-UE-HistoryInformation.h" -#include "S1ap-UEPagingID.h" -#include "S1ap-UERadioCapability.h" -#include "S1ap-UESecurityCapabilities.h" -#include "S1ap-WarningAreaList.h" -#include "S1ap-WarningType.h" -#include "S1ap-WarningSecurityInfo.h" -#include "S1ap-WarningMessageContents.h" -#include "S1ap-X2TNLConfigurationInfo.h" -#include "S1ap-CriticalityDiagnostics.h" -#include "S1ap-CriticalityDiagnostics-IE-List.h" -#include "S1ap-CriticalityDiagnostics-IE-Item.h" -#include "S1ap-ResetType.h" -#include "S1ap-Inter-SystemInformationTransferType.h" -#include "S1ap-UE-S1AP-IDs.h" -#include "S1ap-UE-S1AP-ID-pair.h" -#include "S1ap-MME-UE-S1AP-ID.h" -#include "S1ap-ENB-UE-S1AP-ID.h" -#include "S1ap-TBCD-STRING.h" -#include "S1ap-InitiatingMessage.h" -#include "S1ap-SuccessfulOutcome.h" -#include "S1ap-UnsuccessfulOutcome.h" -#include "S1ap-HandoverRequired.h" -#include "S1ap-HandoverCommand.h" -#include "S1ap-HandoverNotify.h" -#include "S1ap-HandoverPreparationFailure.h" -#include "S1ap-HandoverRequest.h" -#include "S1ap-HandoverRequestAcknowledge.h" -#include "S1ap-HandoverFailure.h" -#include "S1ap-PathSwitchRequest.h" -#include "S1ap-PathSwitchRequestAcknowledge.h" -#include "S1ap-PathSwitchRequestFailure.h" -#include "S1ap-E-RABSetupRequest.h" -#include "S1ap-E-RABSetupResponse.h" -#include "S1ap-E-RABModifyRequest.h" -#include "S1ap-E-RABModifyResponse.h" -#include "S1ap-E-RABReleaseIndication.h" -#include "S1ap-E-RABReleaseCommand.h" -#include "S1ap-E-RABReleaseResponse.h" -#include "S1ap-InitialContextSetupRequest.h" -#include "S1ap-InitialContextSetupResponse.h" -#include "S1ap-InitialContextSetupFailure.h" -#include "S1ap-UEContextReleaseRequest.h" -#include "S1ap-Paging.h" -#include "S1ap-DownlinkNASTransport.h" -#include "S1ap-InitialUEMessage.h" -#include "S1ap-UplinkNASTransport.h" -#include "S1ap-NASNonDeliveryIndication.h" -#include "S1ap-HandoverCancel.h" -#include "S1ap-HandoverCancelAcknowledge.h" -#include "S1ap-Reset.h" -#include "S1ap-ResetAcknowledge.h" -#include "S1ap-S1SetupResponse.h" -#include "S1ap-S1SetupRequest.h" -#include "S1ap-S1SetupFailure.h" -#include "S1ap-ErrorIndication.h" -#include "S1ap-ENBConfigurationUpdate.h" -#include "S1ap-ENBConfigurationUpdateAcknowledge.h" -#include "S1ap-ENBConfigurationUpdateFailure.h" -#include "S1ap-MMEConfigurationUpdate.h" -#include "S1ap-MMEConfigurationUpdateAcknowledge.h" -#include "S1ap-MMEConfigurationUpdateFailure.h" -#include "S1ap-DownlinkS1cdma2000tunneling.h" -#include "S1ap-UplinkS1cdma2000tunneling.h" -#include "S1ap-UEContextModificationRequest.h" -#include "S1ap-UEContextModificationResponse.h" -#include "S1ap-UEContextModificationFailure.h" -#include "S1ap-UECapabilityInfoIndication.h" -#include "S1ap-UEContextReleaseCommand.h" -#include "S1ap-UEContextReleaseComplete.h" -#include "S1ap-ENBStatusTransfer.h" -#include "S1ap-MMEStatusTransfer.h" -#include "S1ap-DeactivateTrace.h" -#include "S1ap-TraceStart.h" -#include "S1ap-TraceFailureIndication.h" -#include "S1ap-CellTrafficTrace.h" -#include "S1ap-LocationReportingControl.h" -#include "S1ap-LocationReportingFailureIndication.h" -#include "S1ap-LocationReport.h" -#include "S1ap-OverloadStart.h" -#include "S1ap-OverloadStop.h" -#include "S1ap-WriteReplaceWarningRequest.h" -#include "S1ap-WriteReplaceWarningResponse.h" -#include "S1ap-ENBDirectInformationTransfer.h" -#include "S1ap-MMEDirectInformationTransfer.h" -#include "S1ap-ENBConfigurationTransfer.h" -#include "S1ap-MMEConfigurationTransfer.h" -#include "S1ap-PrivateMessage.h" -#include "S1ap-E-RABReleaseItemBearerRelComp.h" -#include "S1ap-E-RABToBeSwitchedDLList.h" -#include "S1ap-E-RABToBeSwitchedDLItem.h" -#include "S1ap-E-RABToBeSwitchedULList.h" -#include "S1ap-E-RABToBeSwitchedULItem.h" -#include "S1ap-E-RABToBeSetupListBearerSUReq.h" -#include "S1ap-E-RABToBeSetupItemBearerSUReq.h" -#include "S1ap-E-RABDataForwardingList.h" -#include "S1ap-E-RABDataForwardingItem.h" -#include "S1ap-E-RABToBeSetupListHOReq.h" -#include "S1ap-E-RABToBeSetupItemHOReq.h" -#include "S1ap-E-RABAdmittedList.h" -#include "S1ap-E-RABAdmittedItem.h" -#include "S1ap-E-RABFailedToSetupListHOReqAck.h" -#include "S1ap-E-RABToBeSetupItemCtxtSUReq.h" -#include "S1ap-E-RABToBeSetupListCtxtSUReq.h" -#include "S1ap-E-RABSetupItemBearerSURes.h" -#include "S1ap-E-RABSetupListBearerSURes.h" -#include "S1ap-E-RABSetupItemCtxtSURes.h" -#include "S1ap-E-RABSetupListCtxtSURes.h" -#include "S1ap-E-RABReleaseListBearerRelComp.h" -#include "S1ap-E-RABModifyItemBearerModRes.h" -#include "S1ap-E-RABModifyListBearerModRes.h" -#include "S1ap-E-RABFailedToSetupItemHOReqAck.h" -#include "S1ap-E-RABFailedToSetupListHOReqAck.h" -#include "S1ap-E-RABToBeModifiedItemBearerModReq.h" -#include "S1ap-E-RABToBeModifiedListBearerModReq.h" -#include "S1ap-UE-associatedLogicalS1-ConnectionListResAck.h" -#include "S1ap-IE.h" -#include "S1AP-PDU.h" - -#if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) -# include "S1ap-BroadcastCancelledAreaList.h" -# include "S1ap-CancelledCellinEAI.h" -# include "S1ap-CancelledCellinEAI-Item.h" -# include "S1ap-CancelledCellinTAI.h" -# include "S1ap-CancelledCellinTAI-Item.h" -# include "S1ap-CellAccessMode.h" -# include "S1ap-CellID-Cancelled.h" -# include "S1ap-CellID-Cancelled-Item.h" -# include "S1ap-ConcurrentWarningMessageIndicator.h" -# include "S1ap-CSGMembershipStatus.h" -# include "S1ap-Data-Forwarding-Not-Possible.h" -# include "S1ap-EmergencyAreaID-Cancelled.h" -# include "S1ap-EmergencyAreaID-Cancelled-Item.h" -# include "S1ap-E-RABList.h" -# include "S1ap-EUTRANRoundTripDelayEstimationInfo.h" -# include "S1ap-ExtendedRepetitionPeriod.h" -# include "S1ap-LPPa-PDU.h" -# include "S1ap-PS-ServiceNotAvailable.h" -# include "S1ap-Routing-ID.h" -# include "S1ap-StratumLevel.h" -# include "S1ap-SynchronizationStatus.h" -# include "S1ap-TimeSynchronizationInfo.h" -# include "S1ap-TAI-Cancelled.h" -# include "S1ap-TAI-Cancelled-Item.h" -# include "S1ap-KillRequest.h" -# include "S1ap-KillResponse.h" -# include "S1ap-DownlinkUEAssociatedLPPaTransport.h" -# include "S1ap-UplinkUEAssociatedLPPaTransport.h" -# include "S1ap-DownlinkNonUEAssociatedLPPaTransport.h" -# include "S1ap-UplinkNonUEAssociatedLPPaTransport.h" -#endif /* #if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) */ - -#if (S1AP_VERSION >= MAKE_VERSION(10, 0, 0)) -# include "S1ap-PagingPriority.h" -# include "S1ap-RelayNode-Indicator.h" -# include "S1ap-GWContextReleaseIndication.h" -# include "S1ap-MMERelaySupportIndicator.h" -# include "S1ap-ManagementBasedMDTAllowed.h" -# include "S1ap-PrivacyIndicator.h" -# include "S1ap-TrafficLoadReductionIndication.h" -# include "S1ap-GUMMEIList.h" -#endif /* #if (S1AP_VERSION >= MAKE_VERSION(10, 0, 0)) */ +#include "S1AP_ProtocolIE-Field.h" +#include "S1AP_S1AP-PDU.h" +#include "S1AP_InitiatingMessage.h" +#include "S1AP_SuccessfulOutcome.h" +#include "S1AP_UnsuccessfulOutcome.h" +#include "S1AP_ProtocolIE-Field.h" +#include "S1AP_ProtocolIE-FieldPair.h" +#include "S1AP_ProtocolIE-ContainerPair.h" +#include "S1AP_ProtocolExtensionField.h" +#include "S1AP_ProtocolExtensionContainer.h" +#include "S1AP_asn_constant.h" +#include "S1AP_SupportedTAs-Item.h" +#include "S1AP_ServedGUMMEIsItem.h" /* Checking version of ASN1C compiler */ #if (ASN1C_ENVIRONMENT_VERSION < ASN1C_MINIMUM_VERSION) @@ -411,84 +87,33 @@ extern int asn1_xer_print; # define S1AP_DEBUG(x, args...) do { fprintf(stdout, "[S1AP][D]"x, ##args); } while(0) #endif -//Forward declaration -struct s1ap_message_s; +#define S1AP_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID, mandatory) \ + do {\ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; \ + ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + if (mandatory) DevAssert(ie != NULL); \ + } while(0) /** \brief Function callback prototype. **/ typedef int (*s1ap_message_decoded_callback)( - uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p + uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu ); -/** \brief Encode a successfull outcome message - \param buffer pointer to buffer in which data will be encoded - \param length pointer to the length of buffer - \param procedureCode Procedure code for the message - \param criticality Criticality of the message - \param td ASN1C type descriptor of the sptr - \param sptr Deferenced pointer to the structure to encode - @returns size in bytes encded on success or 0 on failure - **/ -ssize_t s1ap_generate_successfull_outcome( - uint8_t **buffer, - uint32_t *length, - e_S1ap_ProcedureCode procedureCode, - S1ap_Criticality_t criticality, - asn_TYPE_descriptor_t *td, - void *sptr); - -/** \brief Encode an initiating message - \param buffer pointer to buffer in which data will be encoded - \param length pointer to the length of buffer - \param procedureCode Procedure code for the message - \param criticality Criticality of the message - \param td ASN1C type descriptor of the sptr - \param sptr Deferenced pointer to the structure to encode - @returns size in bytes encded on success or 0 on failure - **/ -ssize_t s1ap_generate_initiating_message( - uint8_t **buffer, - uint32_t *length, - e_S1ap_ProcedureCode procedureCode, - S1ap_Criticality_t criticality, - asn_TYPE_descriptor_t *td, - void *sptr); - -/** \brief Encode an unsuccessfull outcome message - \param buffer pointer to buffer in which data will be encoded - \param length pointer to the length of buffer - \param procedureCode Procedure code for the message - \param criticality Criticality of the message - \param td ASN1C type descriptor of the sptr - \param sptr Deferenced pointer to the structure to encode - @returns size in bytes encded on success or 0 on failure - **/ -ssize_t s1ap_generate_unsuccessfull_outcome( - uint8_t **buffer, - uint32_t *length, - e_S1ap_ProcedureCode procedureCode, - S1ap_Criticality_t criticality, - asn_TYPE_descriptor_t *td, - void *sptr); - -/** \brief Generate a new IE - \param id Protocol ie id of the IE - \param criticality Criticality of the IE - \param type ASN1 type descriptor of the IE value - \param sptr Structure to be encoded in the value field - @returns a pointer to the newly created IE structure or NULL in case of failure - **/ -S1ap_IE_t *s1ap_new_ie(S1ap_ProtocolIE_ID_t id, - S1ap_Criticality_t criticality, - asn_TYPE_descriptor_t *type, - void *sptr); - /** \brief Handle criticality \param criticality Criticality of the IE @returns void **/ -void s1ap_handle_criticality(S1ap_Criticality_t criticality); +void s1ap_handle_criticality(S1AP_Criticality_t criticality); #endif /* S1AP_COMMON_H_ */ diff --git a/openair3/S1AP/s1ap_eNB.c b/openair3/S1AP/s1ap_eNB.c index 8085c239c3..2a6db4a5ce 100644 --- a/openair3/S1AP/s1ap_eNB.c +++ b/openair3/S1AP/s1ap_eNB.c @@ -20,8 +20,8 @@ */ /*! \file s1ap_eNB.c - * \brief S1AP eNB task - * \author S. Roux and Navid Nikaein + * \brief S1AP eNB task + * \author S. Roux and Navid Nikaein * \date 2010 - 2015 * \email: navid.nikaein@eurecom.fr * \version 1.0 @@ -42,7 +42,6 @@ #include "s1ap_eNB_default_values.h" #include "s1ap_common.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_defs.h" #include "s1ap_eNB.h" @@ -104,7 +103,7 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p, sctp_new_association_req_t *sctp_new_association_req_p = NULL; s1ap_eNB_mme_data_t *s1ap_mme_data_p = NULL; struct s1ap_eNB_mme_data_s *mme = NULL; - + DevAssert(instance_p != NULL); DevAssert(mme_ip_address != NULL); @@ -125,25 +124,25 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p, memcpy(&sctp_new_association_req_p->local_address, local_ip_addr, sizeof(*local_ip_addr)); - + S1AP_INFO("[eNB %d] check the mme registration state\n",instance_p->instance); - + mme = s1ap_eNB_get_MME_from_instance(instance_p); if ( mme == NULL ) { - + /* Create new MME descriptor */ s1ap_mme_data_p = calloc(1, sizeof(*s1ap_mme_data_p)); DevAssert(s1ap_mme_data_p != NULL); - + s1ap_mme_data_p->cnx_id = s1ap_eNB_fetch_add_global_cnx_id(); sctp_new_association_req_p->ulp_cnx_id = s1ap_mme_data_p->cnx_id; - + s1ap_mme_data_p->assoc_id = -1; s1ap_mme_data_p->s1ap_eNB_instance = instance_p; - + STAILQ_INIT(&s1ap_mme_data_p->served_gummei); - + /* Insert the new descriptor in list of known MME * but not yet associated. */ @@ -156,25 +155,23 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p, sctp_new_association_req_p->ulp_cnx_id = mme->cnx_id; S1AP_INFO("[eNB %d] MME already registered, retrive the data (state %d, cnx %d, mme_nb %d, mme_pending_nb %d)\n", - instance_p->instance, - mme->state, mme->cnx_id, - instance_p->s1ap_mme_nb, instance_p->s1ap_mme_pending_nb); + instance_p->instance, + mme->state, mme->cnx_id, + instance_p->s1ap_mme_nb, instance_p->s1ap_mme_pending_nb); /*s1ap_mme_data_p->cnx_id = mme->cnx_id; sctp_new_association_req_p->ulp_cnx_id = mme->cnx_id; - + s1ap_mme_data_p->assoc_id = -1; s1ap_mme_data_p->s1ap_eNB_instance = instance_p; - */ + */ } else { - S1AP_WARN("[eNB %d] MME already registered but not in the waiting state, retrive the data (state %d, cnx %d, mme_nb %d, mme_pending_nb %d)\n", - instance_p->instance, - mme->state, mme->cnx_id, - instance_p->s1ap_mme_nb, instance_p->s1ap_mme_pending_nb); - + instance_p->instance, + mme->state, mme->cnx_id, + instance_p->s1ap_mme_nb, instance_p->s1ap_mme_pending_nb); } - + itti_send_msg_to_task(TASK_SCTP, instance_p->instance, message_p); } @@ -188,9 +185,8 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t * /* Look if the provided instance already exists */ new_instance = s1ap_eNB_get_instance(instance); - - - if (new_instance != NULL) { + + if (new_instance != NULL) { /* Checks if it is a retry on the same eNB */ DevCheck(new_instance->eNB_id == s1ap_register_eNB->eNB_id, new_instance->eNB_id, s1ap_register_eNB->eNB_id, 0); DevCheck(new_instance->cell_type == s1ap_register_eNB->cell_type, new_instance->cell_type, s1ap_register_eNB->cell_type, 0); @@ -221,9 +217,9 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t * s1ap_eNB_insert_new_instance(new_instance); S1AP_INFO("Registered new eNB[%d] and %s eNB id %u\n", - instance, - s1ap_register_eNB->cell_type == CELL_MACRO_ENB ? "macro" : "home", - s1ap_register_eNB->eNB_id); + instance, + s1ap_register_eNB->cell_type == CELL_MACRO_ENB ? "macro" : "home", + s1ap_register_eNB->eNB_id); } DevCheck(s1ap_register_eNB->nb_mme <= S1AP_MAX_NB_MME_IP_ADDRESS, @@ -232,7 +228,7 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t * /* Trying to connect to provided list of MME ip address */ for (index = 0; index < s1ap_register_eNB->nb_mme; index++) { s1ap_eNB_register_mme(new_instance, - &s1ap_register_eNB->mme_ip_address[index], + &s1ap_register_eNB->mme_ip_address[index], &s1ap_register_eNB->enb_ip_address, s1ap_register_eNB->sctp_in_streams, s1ap_register_eNB->sctp_out_streams); @@ -425,12 +421,11 @@ void *s1ap_eNB_task(void *arg) static int s1ap_eNB_generate_s1_setup_request( s1ap_eNB_instance_t *instance_p, s1ap_eNB_mme_data_t *s1ap_mme_data_p) { - s1ap_message message; - - S1ap_S1SetupRequestIEs_t *s1SetupRequest_p; - S1ap_PLMNidentity_t plmnIdentity; - S1ap_SupportedTAs_Item_t ta; - + S1AP_S1AP_PDU_t pdu; + S1AP_S1SetupRequest_t *out; + S1AP_S1SetupRequestIEs_t *ie; + S1AP_SupportedTAs_Item_t *ta; + S1AP_PLMNidentity_t *plmn; uint8_t *buffer; uint32_t len; int ret = 0; @@ -438,43 +433,101 @@ static int s1ap_eNB_generate_s1_setup_request( DevAssert(instance_p != NULL); DevAssert(s1ap_mme_data_p != NULL); - memset(&message, 0, sizeof(s1ap_message)); - - message.direction = S1AP_PDU_PR_initiatingMessage; - message.procedureCode = S1ap_ProcedureCode_id_S1Setup; - message.criticality = S1ap_Criticality_reject; - - s1SetupRequest_p = &message.msg.s1ap_S1SetupRequestIEs; - memset((void *)&plmnIdentity, 0, sizeof(S1ap_PLMNidentity_t)); - - memset((void *)&ta, 0, sizeof(S1ap_SupportedTAs_Item_t)); - s1ap_mme_data_p->state = S1AP_ENB_STATE_WAITING; - s1SetupRequest_p->global_ENB_ID.eNB_ID.present = S1ap_ENB_ID_PR_macroENB_ID; - MACRO_ENB_ID_TO_BIT_STRING(instance_p->eNB_id, - &s1SetupRequest_p->global_ENB_ID.eNB_ID.choice.macroENB_ID); + /* Prepare the S1AP message to encode */ + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_initiatingMessage; + pdu.choice.initiatingMessage.procedureCode = S1AP_ProcedureCode_id_S1Setup; + pdu.choice.initiatingMessage.criticality = S1AP_Criticality_reject; + pdu.choice.initiatingMessage.value.present = S1AP_InitiatingMessage__value_PR_S1SetupRequest; + out = &pdu.choice.initiatingMessage.value.choice.S1SetupRequest; + + /* mandatory */ + ie = (S1AP_S1SetupRequestIEs_t *)calloc(1, sizeof(S1AP_S1SetupRequestIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_Global_ENB_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_S1SetupRequestIEs__value_PR_Global_ENB_ID; MCC_MNC_TO_PLMNID(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length, - &s1SetupRequest_p->global_ENB_ID.pLMNidentity); + &ie->value.choice.Global_ENB_ID.pLMNidentity); + ie->value.choice.Global_ENB_ID.eNB_ID.present = S1AP_ENB_ID_PR_macroENB_ID; + MACRO_ENB_ID_TO_BIT_STRING(instance_p->eNB_id, + &ie->value.choice.Global_ENB_ID.eNB_ID.choice.macroENB_ID); + S1AP_INFO("%d -> %02x%02x%02x\n", instance_p->eNB_id, + ie->value.choice.Global_ENB_ID.eNB_ID.choice.macroENB_ID.buf[0], + ie->value.choice.Global_ENB_ID.eNB_ID.choice.macroENB_ID.buf[1], + ie->value.choice.Global_ENB_ID.eNB_ID.choice.macroENB_ID.buf[2]); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - S1AP_INFO("%d -> %02x%02x%02x\n", instance_p->eNB_id, s1SetupRequest_p->global_ENB_ID.eNB_ID.choice.macroENB_ID.buf[0], s1SetupRequest_p->global_ENB_ID.eNB_ID.choice.macroENB_ID.buf[1], - s1SetupRequest_p->global_ENB_ID.eNB_ID.choice.macroENB_ID.buf[2]); - - INT16_TO_OCTET_STRING(instance_p->tac, &ta.tAC); - MCC_MNC_TO_TBCD(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length, &plmnIdentity); - - ASN_SEQUENCE_ADD(&ta.broadcastPLMNs.list, &plmnIdentity); - ASN_SEQUENCE_ADD(&s1SetupRequest_p->supportedTAs.list, &ta); - - s1SetupRequest_p->defaultPagingDRX = instance_p->default_drx; - - if (instance_p->eNB_name != NULL) { - s1SetupRequest_p->presenceMask |= S1AP_S1SETUPREQUESTIES_ENBNAME_PRESENT; - OCTET_STRING_fromBuf(&s1SetupRequest_p->eNBname, instance_p->eNB_name, + /* optional */ + if (instance_p->eNB_name) { + ie = (S1AP_S1SetupRequestIEs_t *)calloc(1, sizeof(S1AP_S1SetupRequestIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNBname; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_S1SetupRequestIEs__value_PR_ENBname; + OCTET_STRING_fromBuf(&ie->value.choice.ENBname, instance_p->eNB_name, strlen(instance_p->eNB_name)); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); } - if (s1ap_eNB_encode_pdu(&message, &buffer, &len) < 0) { + /* mandatory */ + ie = (S1AP_S1SetupRequestIEs_t *)calloc(1, sizeof(S1AP_S1SetupRequestIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_SupportedTAs; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_S1SetupRequestIEs__value_PR_SupportedTAs; + { + ta = (S1AP_SupportedTAs_Item_t *)calloc(1, sizeof(S1AP_SupportedTAs_Item_t)); + INT16_TO_OCTET_STRING(instance_p->tac, &ta->tAC); + { + plmn = (S1AP_PLMNidentity_t *)calloc(1, sizeof(S1AP_PLMNidentity_t)); + MCC_MNC_TO_TBCD(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length, plmn); + ASN_SEQUENCE_ADD(&ta->broadcastPLMNs.list, plmn); + } + ASN_SEQUENCE_ADD(&ie->value.choice.SupportedTAs.list, ta); + } + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + /* mandatory */ + ie = (S1AP_S1SetupRequestIEs_t *)calloc(1, sizeof(S1AP_S1SetupRequestIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_DefaultPagingDRX; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_S1SetupRequestIEs__value_PR_PagingDRX; + ie->value.choice.PagingDRX = instance_p->default_drx; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + /* optional */ + if (0) { + ie = (S1AP_S1SetupRequestIEs_t *)calloc(1, sizeof(S1AP_S1SetupRequestIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CSG_IdList; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_S1SetupRequestIEs__value_PR_CSG_IdList; + // ie->value.choice.CSG_IdList = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ +#if (S1AP_VERSION >= MAKE_VERSION(13, 0, 0)) + if (0) { + ie = (S1AP_S1SetupRequestIEs_t *)calloc(1, sizeof(S1AP_S1SetupRequestIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_UE_RetentionInformation; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_S1SetupRequestIEs__value_PR_UE_RetentionInformation; + // ie->value.choice.UE_RetentionInformation = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_S1SetupRequestIEs_t *)calloc(1, sizeof(S1AP_S1SetupRequestIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_NB_IoT_DefaultPagingDRX; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_S1SetupRequestIEs__value_PR_NB_IoT_DefaultPagingDRX; + // ie->value.choice.NB_IoT_DefaultPagingDRX = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(14, 0, 0)) */ + + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &len) < 0) { S1AP_ERROR("Failed to encode S1 setup request\n"); return -1; } diff --git a/openair3/S1AP/s1ap_eNB_context_management_procedures.c b/openair3/S1AP/s1ap_eNB_context_management_procedures.c index 49c5ed28ac..6063eca2c3 100644 --- a/openair3/S1AP/s1ap_eNB_context_management_procedures.c +++ b/openair3/S1AP/s1ap_eNB_context_management_procedures.c @@ -20,8 +20,8 @@ */ /*! \file s1ap_eNB_context_management_procedures.c - * \brief S1AP context management procedures - * \author S. Roux and Navid Nikaein + * \brief S1AP context management procedures + * \author S. Roux and Navid Nikaein * \date 2010 - 2015 * \email: navid.nikaein@eurecom.fr * \version 1.0 @@ -41,7 +41,6 @@ #include "s1ap_eNB_itti_messaging.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_encoder.h" #include "s1ap_eNB_nnsf.h" #include "s1ap_eNB_ue_context.h" @@ -54,16 +53,13 @@ int s1ap_ue_context_release_complete(instance_t instance, s1ap_ue_release_complete_t *ue_release_complete_p) { - s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; - struct s1ap_eNB_ue_context_s *ue_context_p = NULL; - - S1ap_UEContextReleaseCompleteIEs_t *ue_ctxt_release_complete_ies_p = NULL; - - s1ap_message message; - + s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; + struct s1ap_eNB_ue_context_s *ue_context_p = NULL; + S1AP_S1AP_PDU_t pdu; + S1AP_UEContextReleaseComplete_t *out; + S1AP_UEContextReleaseComplete_IEs_t *ie; uint8_t *buffer; uint32_t length; - int ret = -1; /* Retrieve the S1AP eNB instance associated with Mod_id */ s1ap_eNB_instance_p = s1ap_eNB_get_instance(instance); @@ -72,9 +68,9 @@ int s1ap_ue_context_release_complete(instance_t instance, DevAssert(s1ap_eNB_instance_p != NULL); /*RB_FOREACH(ue_context_p, s1ap_ue_map, &s1ap_eNB_instance_p->s1ap_ue_head) { - S1AP_WARN("in s1ap_ue_map: UE context eNB_ue_s1ap_id %u mme_ue_s1ap_id %u state %u\n", - ue_context_p->eNB_ue_s1ap_id, ue_context_p->mme_ue_s1ap_id, - ue_context_p->ue_state); + S1AP_WARN("in s1ap_ue_map: UE context eNB_ue_s1ap_id %u mme_ue_s1ap_id %u state %u\n", + ue_context_p->eNB_ue_s1ap_id, ue_context_p->mme_ue_s1ap_id, + ue_context_p->ue_state); }*/ if ((ue_context_p = s1ap_eNB_get_ue_context(s1ap_eNB_instance_p, ue_release_complete_p->eNB_ue_s1ap_id)) == NULL) { @@ -85,20 +81,71 @@ int s1ap_ue_context_release_complete(instance_t instance, } /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_successfulOutcome; + pdu.choice.successfulOutcome.procedureCode = S1AP_ProcedureCode_id_UEContextRelease; + pdu.choice.successfulOutcome.criticality = S1AP_Criticality_reject; + pdu.choice.successfulOutcome.value.present = S1AP_SuccessfulOutcome__value_PR_UEContextReleaseComplete; + out = &pdu.choice.successfulOutcome.value.choice.UEContextReleaseComplete; - message.direction = S1AP_PDU_PR_successfulOutcome; - message.procedureCode = S1ap_ProcedureCode_id_UEContextRelease; - //message.criticality = S1ap_Criticality_reject; + /* mandatory */ + ie = (S1AP_UEContextReleaseComplete_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseComplete_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UEContextReleaseComplete_IEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - ue_ctxt_release_complete_ies_p = &message.msg.s1ap_UEContextReleaseCompleteIEs; + /* mandatory */ + ie = (S1AP_UEContextReleaseComplete_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseComplete_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UEContextReleaseComplete_IEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = ue_release_complete_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - ue_ctxt_release_complete_ies_p->eNB_UE_S1AP_ID = ue_release_complete_p->eNB_ue_s1ap_id; - ue_ctxt_release_complete_ies_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; - //ue_ctxt_release_complete_ies_p->criticalityDiagnostics - //ue_ctxt_release_complete_ies_p->presenceMask + /* optional */ + if (0) { + ie = (S1AP_UEContextReleaseComplete_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseComplete_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CriticalityDiagnostics; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UEContextReleaseComplete_IEs__value_PR_CriticalityDiagnostics; + // ie->value.choice.CriticalityDiagnostics = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + /* release 12, optional */ +#if (S1AP_VERSION >= MAKE_VERSION(12, 0, 0)) + if (0) { + ie = (S1AP_UEContextReleaseComplete_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseComplete_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_UserLocationInformation; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UEContextReleaseComplete_IEs__value_PR_UserLocationInformation; + // ie->value.choice.UserLocationInformation = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* release 13, optional */ +#if (S1AP_VERSION >= MAKE_VERSION(13, 0, 0)) + if (0) { + ie = (S1AP_UEContextReleaseComplete_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseComplete_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_InformationOnRecommendedCellsAndENBsForPaging; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UEContextReleaseComplete_IEs__value_PR_InformationOnRecommendedCellsAndENBsForPaging; + // ie->value.choice.InformationOnRecommendedCellsAndENBsForPaging = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + ie = (S1AP_UEContextReleaseComplete_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseComplete_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CellIdentifierAndCELevelForCECapableUEs; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UEContextReleaseComplete_IEs__value_PR_CellIdentifierAndCELevelForCECapableUEs; + // ie->value.choice.CellIdentifierAndCELevelForCECapableUEs = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(13, 0, 0)) */ +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(12, 0, 0)) */ + + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { /* Encode procedure has failed... */ S1AP_ERROR("Failed to encode UE context release complete\n"); return -1; @@ -111,20 +158,16 @@ int s1ap_ue_context_release_complete(instance_t instance, length, MSC_AS_TIME_FMT" UEContextRelease successfulOutcome eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0, //MSC_AS_TIME_ARGS(ctxt_pP), - ue_ctxt_release_complete_ies_p->eNB_UE_S1AP_ID, - ue_ctxt_release_complete_ies_p->mme_ue_s1ap_id); + ue_release_complete_p->eNB_ue_s1ap_id, + ue_context_p->mme_ue_s1ap_id); /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, length, ue_context_p->tx_stream); - //LG s1ap_eNB_itti_send_sctp_close_association(s1ap_eNB_instance_p->instance, - // ue_context_p->mme_ref->assoc_id); - - - + // ue_context_p->mme_ref->assoc_id); // release UE context struct s1ap_eNB_ue_context_s *ue_context2_p = NULL; @@ -138,25 +181,25 @@ int s1ap_ue_context_release_complete(instance_t instance, ue_context_p->eNB_ue_s1ap_id); } /*RB_FOREACH(ue_context_p, s1ap_ue_map, &s1ap_eNB_instance_p->s1ap_ue_head) { - S1AP_WARN("in s1ap_ue_map: UE context eNB_ue_s1ap_id %u mme_ue_s1ap_id %u state %u\n", - ue_context_p->eNB_ue_s1ap_id, ue_context_p->mme_ue_s1ap_id, - ue_context_p->ue_state); + S1AP_WARN("in s1ap_ue_map: UE context eNB_ue_s1ap_id %u mme_ue_s1ap_id %u state %u\n", + ue_context_p->eNB_ue_s1ap_id, ue_context_p->mme_ue_s1ap_id, + ue_context_p->ue_state); }*/ - return ret; + return 0; } int s1ap_ue_context_release_req(instance_t instance, s1ap_ue_release_req_t *ue_release_req_p) { - s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; - struct s1ap_eNB_ue_context_s *ue_context_p = NULL; - S1ap_UEContextReleaseRequestIEs_t *ue_ctxt_release_request_ies_p = NULL; - s1ap_message message; - uint8_t *buffer = NULL; - uint32_t length; - + s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; + struct s1ap_eNB_ue_context_s *ue_context_p = NULL; + S1AP_S1AP_PDU_t pdu; + S1AP_UEContextReleaseRequest_t *out; + S1AP_UEContextReleaseRequest_IEs_t *ie; + uint8_t *buffer = NULL; + uint32_t length; /* Retrieve the S1AP eNB instance associated with Mod_id */ s1ap_eNB_instance_p = s1ap_eNB_get_instance(instance); @@ -172,50 +215,82 @@ int s1ap_ue_context_release_req(instance_t instance, } /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_initiatingMessage; + pdu.choice.initiatingMessage.procedureCode = S1AP_ProcedureCode_id_UEContextReleaseRequest; + pdu.choice.initiatingMessage.criticality = S1AP_Criticality_ignore; + pdu.choice.initiatingMessage.value.present = S1AP_InitiatingMessage__value_PR_UEContextReleaseRequest; + out = &pdu.choice.initiatingMessage.value.choice.UEContextReleaseRequest; - message.direction = S1AP_PDU_PR_initiatingMessage; - message.procedureCode = S1ap_ProcedureCode_id_UEContextReleaseRequest; - //message.criticality = S1ap_Criticality_reject; + /* mandatory */ + ie = (S1AP_UEContextReleaseRequest_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseRequest_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UEContextReleaseRequest_IEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - ue_ctxt_release_request_ies_p = &message.msg.s1ap_UEContextReleaseRequestIEs; + /* mandatory */ + ie = (S1AP_UEContextReleaseRequest_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseRequest_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UEContextReleaseRequest_IEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = ue_release_req_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - ue_ctxt_release_request_ies_p->eNB_UE_S1AP_ID = ue_release_req_p->eNB_ue_s1ap_id; - ue_ctxt_release_request_ies_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; + /* mandatory */ + ie = (S1AP_UEContextReleaseRequest_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseRequest_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_Cause; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UEContextReleaseRequest_IEs__value_PR_Cause; switch (ue_release_req_p->cause) { - case S1AP_CAUSE_NOTHING: - ue_ctxt_release_request_ies_p->cause.present = S1ap_Cause_PR_NOTHING; - break; + case S1AP_Cause_PR_radioNetwork: + ie->value.choice.Cause.present = S1AP_Cause_PR_radioNetwork; + ie->value.choice.Cause.choice.radioNetwork = ue_release_req_p->cause_value; + break; - case S1AP_CAUSE_RADIO_NETWORK: - ue_ctxt_release_request_ies_p->cause.present = S1ap_Cause_PR_radioNetwork; - ue_ctxt_release_request_ies_p->cause.choice.radioNetwork = ue_release_req_p->cause_value; - break; + case S1AP_Cause_PR_transport: + ie->value.choice.Cause.present = S1AP_Cause_PR_transport; + ie->value.choice.Cause.choice.transport = ue_release_req_p->cause_value; + break; - case S1AP_CAUSE_TRANSPORT: - ue_ctxt_release_request_ies_p->cause.present = S1ap_Cause_PR_transport; - ue_ctxt_release_request_ies_p->cause.choice.transport = ue_release_req_p->cause_value; - break; + case S1AP_Cause_PR_nas: + ie->value.choice.Cause.present = S1AP_Cause_PR_nas; + ie->value.choice.Cause.choice.nas = ue_release_req_p->cause_value; + break; - case S1AP_CAUSE_NAS: - ue_ctxt_release_request_ies_p->cause.present = S1ap_Cause_PR_nas; - ue_ctxt_release_request_ies_p->cause.choice.nas = ue_release_req_p->cause_value; - break; + case S1AP_Cause_PR_protocol: + ie->value.choice.Cause.present = S1AP_Cause_PR_protocol; + ie->value.choice.Cause.choice.protocol = ue_release_req_p->cause_value; + break; - case S1AP_CAUSE_PROTOCOL: - ue_ctxt_release_request_ies_p->cause.present = S1ap_Cause_PR_protocol; - ue_ctxt_release_request_ies_p->cause.choice.protocol = ue_release_req_p->cause_value; - break; + case S1AP_Cause_PR_misc: + ie->value.choice.Cause.present = S1AP_Cause_PR_misc; + ie->value.choice.Cause.choice.misc = ue_release_req_p->cause_value; + break; - case S1AP_CAUSE_MISC: - default: - ue_ctxt_release_request_ies_p->cause.present = S1ap_Cause_PR_misc; - ue_ctxt_release_request_ies_p->cause.choice.misc = ue_release_req_p->cause_value; - break; + case S1AP_Cause_PR_NOTHING: + default: + ie->value.choice.Cause.present = S1AP_Cause_PR_NOTHING; + break; } - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + /* optional */ +#if (S1AP_VERSION >= MAKE_VERSION(10, 0, 0)) + if (0) { + ie = (S1AP_UEContextReleaseRequest_IEs_t *)calloc(1, sizeof(S1AP_UEContextReleaseRequest_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_GWContextReleaseIndication; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UEContextReleaseRequest_IEs__value_PR_GWContextReleaseIndication; + ie->value.choice.GWContextReleaseIndication = TRUE; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(10, 0, 0)) */ + + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { /* Encode procedure has failed... */ S1AP_ERROR("Failed to encode UE context release complete\n"); return -1; @@ -228,8 +303,8 @@ int s1ap_ue_context_release_req(instance_t instance, length, MSC_AS_TIME_FMT" UEContextReleaseRequest initiatingMessage eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - ue_ctxt_release_request_ies_p->eNB_UE_S1AP_ID, - ue_ctxt_release_request_ies_p->mme_ue_s1ap_id); + ue_release_req_p->eNB_ue_s1ap_id, + ue_context_p->mme_ue_s1ap_id); /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, diff --git a/openair3/S1AP/s1ap_eNB_decoder.c b/openair3/S1AP/s1ap_eNB_decoder.c index 447ca2c81b..c12374f758 100644 --- a/openair3/S1AP/s1ap_eNB_decoder.c +++ b/openair3/S1AP/s1ap_eNB_decoder.c @@ -34,251 +34,185 @@ #include "intertask_interface.h" #include "s1ap_common.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_decoder.h" -static int s1ap_eNB_decode_initiating_message(s1ap_message *message, - S1ap_InitiatingMessage_t *initiating_p) +static int s1ap_eNB_decode_initiating_message(S1AP_S1AP_PDU_t *pdu) { - int ret = -1; MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; MessagesIds message_id; + asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} }; + DevAssert(pdu != NULL); - DevAssert(initiating_p != NULL); + switch(pdu->choice.initiatingMessage.procedureCode) { + case S1AP_ProcedureCode_id_downlinkNASTransport: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_DOWNLINK_NAS_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, + res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_downlink_nas_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_downlink_nas_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - message_string = calloc(10000, sizeof(char)); + case S1AP_ProcedureCode_id_InitialContextSetup: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_INITIAL_CONTEXT_SETUP_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, + res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_initial_context_setup_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_initial_context_setup_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - s1ap_string_total_size = 0; + case S1AP_ProcedureCode_id_UEContextRelease: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_UE_CONTEXT_RELEASE_COMMAND_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, + res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_ue_context_release_command_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_ue_context_release_command_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - message->procedureCode = initiating_p->procedureCode; - message->criticality = initiating_p->criticality; + case S1AP_ProcedureCode_id_Paging: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_PAGING_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, + res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_paging_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_paging_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + S1AP_INFO("Paging initiating message\n"); + free(res.buffer); + break; - switch(initiating_p->procedureCode) { - case S1ap_ProcedureCode_id_downlinkNASTransport: - ret = s1ap_decode_s1ap_downlinknastransporties( - &message->msg.s1ap_DownlinkNASTransportIEs, - &initiating_p->value); - s1ap_xer_print_s1ap_downlinknastransport(s1ap_xer__print2sp, - message_string, - message); - message_id = S1AP_DOWNLINK_NAS_LOG; - message_string_size = strlen(message_string); - message_p = itti_alloc_new_message_sized(TASK_S1AP, - message_id, - message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_downlink_nas_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_downlink_nas_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; + case S1AP_ProcedureCode_id_E_RABSetup: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_E_RAB_SETUP_REQUEST_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, + res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_e_rab_setup_request_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_e_rab_setup_request_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + S1AP_INFO("E_RABSetup initiating message\n"); + break; - case S1ap_ProcedureCode_id_InitialContextSetup: - ret = s1ap_decode_s1ap_initialcontextsetuprequesties( - &message->msg.s1ap_InitialContextSetupRequestIEs, &initiating_p->value); - s1ap_xer_print_s1ap_initialcontextsetuprequest(s1ap_xer__print2sp, message_string, message); - message_id = S1AP_INITIAL_CONTEXT_SETUP_LOG; - message_string_size = strlen(message_string); - message_p = itti_alloc_new_message_sized(TASK_S1AP, - message_id, - message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_initial_context_setup_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; + case S1AP_ProcedureCode_id_E_RABModify: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_E_RAB_MODIFY_REQUEST_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, + res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_e_rab_modify_request_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_e_rab_modify_request_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + S1AP_INFO("E_RABModify initiating message\n"); + break; - case S1ap_ProcedureCode_id_UEContextRelease: - ret = s1ap_decode_s1ap_uecontextreleasecommandies( - &message->msg.s1ap_UEContextReleaseCommandIEs, &initiating_p->value); - s1ap_xer_print_s1ap_uecontextreleasecommand(s1ap_xer__print2sp, message_string, message); - message_id = S1AP_UE_CONTEXT_RELEASE_COMMAND_LOG; - message_string_size = strlen(message_string); - message_p = itti_alloc_new_message_sized(TASK_S1AP, - message_id, - message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_ue_context_release_command_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_ue_context_release_command_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; + case S1AP_ProcedureCode_id_E_RABRelease: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_E_RAB_RELEASE_REQUEST_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, + res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_e_rab_release_request_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_e_rab_release_request_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + S1AP_INFO("TODO E_RABRelease initiating message\n"); + break; - case S1ap_ProcedureCode_id_Paging: - ret = s1ap_decode_s1ap_pagingies( - &message->msg.s1ap_PagingIEs, &initiating_p->value); - s1ap_xer_print_s1ap_paging(s1ap_xer__print2sp, message_string, message); - message_id = S1AP_PAGING_LOG; - message_string_size = strlen(message_string); - message_p = itti_alloc_new_message_sized(TASK_S1AP, - message_id, - message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_paging_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_paging_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - S1AP_INFO("Paging initiating message\n"); - free(message_string); - break; + case S1AP_ProcedureCode_id_ErrorIndication: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_ERROR_INDICATION_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, + res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_error_indication_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_error_indication_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + S1AP_INFO("TODO ErrorIndication initiating message\n"); + break; - - case S1ap_ProcedureCode_id_E_RABSetup: - ret = s1ap_decode_s1ap_e_rabsetuprequesties( - &message->msg.s1ap_E_RABSetupRequestIEs, &initiating_p->value); - //s1ap_xer_print_s1ap_e_rabsetuprequest(s1ap_xer__print2sp, message_string, message); - message_id = S1AP_E_RAB_SETUP_REQUEST_LOG; - message_string_size = strlen(message_string); - message_p = itti_alloc_new_message_sized(TASK_S1AP, - message_id, - message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_e_rab_setup_request_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_e_rab_setup_request_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - S1AP_INFO("E_RABSetup initiating message\n"); - break; - - case S1ap_ProcedureCode_id_E_RABModify: - ret = s1ap_decode_s1ap_e_rabmodifyrequesties( - &message->msg.s1ap_E_RABModifyRequestIEs, &initiating_p->value); - message_id = S1AP_E_RAB_MODIFY_REQUEST_LOG; - message_string_size = strlen(message_string); - message_p = itti_alloc_new_message_sized(TASK_S1AP, - message_id, - message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_e_rab_modify_request_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_e_rab_modify_request_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - S1AP_INFO("E_RABModify initiating message\n"); - break; - - case S1ap_ProcedureCode_id_E_RABRelease: - ret = s1ap_decode_s1ap_e_rabreleasecommandies( - &message->msg.s1ap_E_RABReleaseCommandIEs, &initiating_p->value); - s1ap_xer_print_s1ap_e_rabreleasecommand(s1ap_xer__print2sp, message_string, message); - message_id = S1AP_E_RAB_RELEASE_REQUEST_LOG; - message_string_size = strlen(message_string); - message_p = itti_alloc_new_message_sized(TASK_S1AP, - message_id, - message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_e_rab_release_request_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_e_rab_release_request_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - S1AP_INFO("TODO E_RABRelease nitiating message\n"); - break; - - case S1ap_ProcedureCode_id_ErrorIndication: - ret = s1ap_decode_s1ap_errorindicationies( - &message->msg.s1ap_ErrorIndicationIEs, &initiating_p->value); - s1ap_xer_print_s1ap_errorindication(s1ap_xer__print2sp, message_string, message); - message_id = S1AP_E_RAB_ERROR_INDICATION_LOG; - message_string_size = strlen(message_string); - message_p = itti_alloc_new_message_sized(TASK_S1AP, - message_id, - message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_e_rab_release_request_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_error_indication_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - S1AP_INFO("ErrorIndication initiating message\n"); - break; - - default: - S1AP_ERROR("Unknown procedure ID (%d) for initiating message\n", - (int)initiating_p->procedureCode); - AssertFatal( 0 , "Unknown procedure ID (%d) for initiating message\n", - (int)initiating_p->procedureCode); - return -1; + default: + S1AP_ERROR("Unknown procedure ID (%d) for initiating message\n", + (int)pdu->choice.initiatingMessage.procedureCode); + AssertFatal( 0, "Unknown procedure ID (%d) for initiating message\n", + (int)pdu->choice.initiatingMessage.procedureCode); + return -1; } - - return ret; + return 0; } -static int s1ap_eNB_decode_successful_outcome(s1ap_message *message, - S1ap_SuccessfulOutcome_t *successfullOutcome_p) +static int s1ap_eNB_decode_successful_outcome(S1AP_S1AP_PDU_t *pdu) { - int ret = -1; MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; MessagesIds message_id; + asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} }; + DevAssert(pdu != NULL); - DevAssert(successfullOutcome_p != NULL); + switch(pdu->choice.successfulOutcome.procedureCode) { + case S1AP_ProcedureCode_id_S1Setup: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_S1_SETUP_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_s1_setup_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_s1_setup_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - message_string = malloc(sizeof(char) * 10000); - memset((void*)message_string,0,sizeof(char) * 10000); - - s1ap_string_total_size = 0; - - message->procedureCode = successfullOutcome_p->procedureCode; - message->criticality = successfullOutcome_p->criticality; - - switch(successfullOutcome_p->procedureCode) { - case S1ap_ProcedureCode_id_S1Setup: - ret = s1ap_decode_s1ap_s1setupresponseies( - &message->msg.s1ap_S1SetupResponseIEs, &successfullOutcome_p->value); - s1ap_xer_print_s1ap_s1setupresponse(s1ap_xer__print2sp, message_string, message); - message_id = S1AP_S1_SETUP_LOG; - break; - - default: - S1AP_ERROR("Unknown procedure ID (%d) for successfull outcome message\n", - (int)successfullOutcome_p->procedureCode); - return -1; + default: + S1AP_ERROR("Unknown procedure ID (%d) for successfull outcome message\n", + (int)pdu->choice.successfulOutcome.procedureCode); + return -1; } - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_s1_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_s1_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; + return 0; } -static int s1ap_eNB_decode_unsuccessful_outcome(s1ap_message *message, - S1ap_UnsuccessfulOutcome_t *unSuccessfullOutcome_p) +static int s1ap_eNB_decode_unsuccessful_outcome(S1AP_S1AP_PDU_t *pdu) { - int ret = -1; - DevAssert(unSuccessfullOutcome_p != NULL); + MessageDef *message_p; + MessagesIds message_id; + asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} }; + DevAssert(pdu != NULL); - message->procedureCode = unSuccessfullOutcome_p->procedureCode; - message->criticality = unSuccessfullOutcome_p->criticality; + switch(pdu->choice.unsuccessfulOutcome.procedureCode) { + case S1AP_ProcedureCode_id_S1Setup: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_S1_SETUP_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_s1_setup_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_s1_setup_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - switch(unSuccessfullOutcome_p->procedureCode) { - case S1ap_ProcedureCode_id_S1Setup: - return s1ap_decode_s1ap_s1setupfailureies( - &message->msg.s1ap_S1SetupFailureIEs, &unSuccessfullOutcome_p->value); - - default: - S1AP_ERROR("Unknown procedure ID (%d) for unsuccessfull outcome message\n", - (int)unSuccessfullOutcome_p->procedureCode); - break; + default: + S1AP_ERROR("Unknown procedure ID (%d) for unsuccessfull outcome message\n", + (int)pdu->choice.unsuccessfulOutcome.procedureCode); + return -1; } - return ret; + return 0; } -int s1ap_eNB_decode_pdu(s1ap_message *message, const uint8_t * const buffer, +int s1ap_eNB_decode_pdu(S1AP_S1AP_PDU_t *pdu, const uint8_t *const buffer, const uint32_t length) { - S1AP_PDU_t pdu; - S1AP_PDU_t *pdu_p = &pdu; asn_dec_rval_t dec_ret; + DevAssert(pdu != NULL); DevAssert(buffer != NULL); - memset((void *)pdu_p, 0, sizeof(S1AP_PDU_t)); - dec_ret = aper_decode(NULL, - &asn_DEF_S1AP_PDU, - (void **)&pdu_p, + &asn_DEF_S1AP_S1AP_PDU, + (void **)&pdu, buffer, length, 0, @@ -289,24 +223,19 @@ int s1ap_eNB_decode_pdu(s1ap_message *message, const uint8_t * const buffer, return -1; } - message->direction = pdu_p->present; + switch(pdu->present) { + case S1AP_S1AP_PDU_PR_initiatingMessage: + return s1ap_eNB_decode_initiating_message(pdu); - switch(pdu_p->present) { - case S1AP_PDU_PR_initiatingMessage: - return s1ap_eNB_decode_initiating_message(message, - &pdu_p->choice.initiatingMessage); + case S1AP_S1AP_PDU_PR_successfulOutcome: + return s1ap_eNB_decode_successful_outcome(pdu); - case S1AP_PDU_PR_successfulOutcome: - return s1ap_eNB_decode_successful_outcome(message, - &pdu_p->choice.successfulOutcome); + case S1AP_S1AP_PDU_PR_unsuccessfulOutcome: + return s1ap_eNB_decode_unsuccessful_outcome(pdu); - case S1AP_PDU_PR_unsuccessfulOutcome: - return s1ap_eNB_decode_unsuccessful_outcome(message, - &pdu_p->choice.unsuccessfulOutcome); - - default: - S1AP_DEBUG("Unknown presence (%d) or not implemented\n", (int)pdu_p->present); - break; + default: + S1AP_DEBUG("Unknown presence (%d) or not implemented\n", (int)pdu->present); + break; } return -1; diff --git a/openair3/S1AP/s1ap_eNB_decoder.h b/openair3/S1AP/s1ap_eNB_decoder.h index f321f8227f..c8116a3a08 100644 --- a/openair3/S1AP/s1ap_eNB_decoder.h +++ b/openair3/S1AP/s1ap_eNB_decoder.h @@ -20,12 +20,11 @@ */ #include -#include "s1ap_ies_defs.h" #ifndef S1AP_ENB_DECODER_H_ #define S1AP_ENB_DECODER_H_ -int s1ap_eNB_decode_pdu(s1ap_message *message, const uint8_t * const buffer, +int s1ap_eNB_decode_pdu(S1AP_S1AP_PDU_t *pdu, const uint8_t *const buffer, const uint32_t length) __attribute__ ((warn_unused_result)); #endif /* S1AP_ENB_DECODER_H_ */ diff --git a/openair3/S1AP/s1ap_eNB_encoder.c b/openair3/S1AP/s1ap_eNB_encoder.c index 7bd8bc09aa..bc0c69792d 100644 --- a/openair3/S1AP/s1ap_eNB_encoder.c +++ b/openair3/S1AP/s1ap_eNB_encoder.c @@ -32,615 +32,251 @@ #include #include "assertions.h" - #include "conversions.h" - #include "intertask_interface.h" - #include "s1ap_common.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_encoder.h" -static inline int s1ap_eNB_encode_initiating(s1ap_message *message, +static inline int s1ap_eNB_encode_initiating(S1AP_S1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len); -static inline int s1ap_eNB_encode_successfull_outcome(s1ap_message *message, +static inline int s1ap_eNB_encode_successfull_outcome(S1AP_S1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len); -static inline int s1ap_eNB_encode_unsuccessfull_outcome(s1ap_message *message, +static inline int s1ap_eNB_encode_unsuccessfull_outcome(S1AP_S1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len); -static inline int s1ap_eNB_encode_s1_setup_request( - S1ap_S1SetupRequestIEs_t *s1SetupRequestIEs, uint8_t **buffer, uint32_t *length); - -static inline int s1ap_eNB_encode_trace_failure(S1ap_TraceFailureIndicationIEs_t - *trace_failure_ies_p, uint8_t **buffer, - uint32_t *length); - -static inline int s1ap_eNB_encode_initial_ue_message(S1ap_InitialUEMessageIEs_t - *initialUEmessageIEs_p, uint8_t **buffer, - uint32_t *length); - -static inline int s1ap_eNB_encode_uplink_nas_transport(S1ap_UplinkNASTransportIEs_t - *uplinkNASTransportIEs, - uint8_t **buffer, - uint32_t *length); - -static inline int s1ap_eNB_encode_ue_capability_info_indication( - S1ap_UECapabilityInfoIndicationIEs_t *ueCapabilityInfoIndicationIEs, - uint8_t **buffer, - uint32_t *length); - -static inline int s1ap_eNB_encode_initial_context_setup_response( - S1ap_InitialContextSetupResponseIEs_t *initialContextSetupResponseIEs, - uint8_t **buffer, - uint32_t *length); - -static inline -int s1ap_eNB_encode_nas_non_delivery( - S1ap_NASNonDeliveryIndication_IEs_t *nasNonDeliveryIndicationIEs, - uint8_t **buffer, - uint32_t *length); - -static inline -int s1ap_eNB_encode_ue_context_release_complete( - S1ap_UEContextReleaseCompleteIEs_t *s1ap_UEContextReleaseCompleteIEs, - uint8_t **buffer, - uint32_t *length); - -static inline -int s1ap_eNB_encode_ue_context_release_request( - S1ap_UEContextReleaseRequestIEs_t *s1ap_UEContextReleaseRequestIEs, - uint8_t **buffer, - uint32_t *length); - -static inline -int s1ap_eNB_encode_e_rab_setup_response(S1ap_E_RABSetupResponseIEs_t *E_RABSetupResponseIEs, - uint8_t **buffer, - uint32_t *length); - -static inline -int s1ap_eNB_encode_e_rab_modify_response(S1ap_E_RABModifyResponseIEs_t *E_RABModifyResponseIEs, - uint8_t **buffer, - uint32_t *length); - -static inline -int s1ap_eNB_encode_e_rab_release_response(S1ap_E_RABReleaseResponseIEs_t *s1ap_E_RABReleaseResponseIEs, - uint8_t **buffer, - uint32_t *length); - -int s1ap_eNB_encode_pdu(s1ap_message *message, uint8_t **buffer, uint32_t *len) +int s1ap_eNB_encode_pdu(S1AP_S1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) { - DevAssert(message != NULL); + int ret = -1; + DevAssert(pdu != NULL); DevAssert(buffer != NULL); DevAssert(len != NULL); - switch(message->direction) { - case S1AP_PDU_PR_initiatingMessage: - return s1ap_eNB_encode_initiating(message, buffer, len); + switch(pdu->present) { + case S1AP_S1AP_PDU_PR_initiatingMessage: + ret = s1ap_eNB_encode_initiating(pdu, buffer, len); + break; - case S1AP_PDU_PR_successfulOutcome: - return s1ap_eNB_encode_successfull_outcome(message, buffer, len); + case S1AP_S1AP_PDU_PR_successfulOutcome: + ret = s1ap_eNB_encode_successfull_outcome(pdu, buffer, len); + break; - case S1AP_PDU_PR_unsuccessfulOutcome: - return s1ap_eNB_encode_unsuccessfull_outcome(message, buffer, len); + case S1AP_S1AP_PDU_PR_unsuccessfulOutcome: + ret = s1ap_eNB_encode_unsuccessfull_outcome(pdu, buffer, len); + break; - default: - S1AP_DEBUG("Unknown message outcome (%d) or not implemented", - (int)message->direction); - break; + default: + S1AP_DEBUG("Unknown message outcome (%d) or not implemented", + (int)pdu->present); + return -1; } - return -1; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_S1AP_S1AP_PDU, pdu); + return ret; } static inline -int s1ap_eNB_encode_initiating(s1ap_message *s1ap_message_p, +int s1ap_eNB_encode_initiating(S1AP_S1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) { - int ret = -1; MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; MessagesIds message_id; + asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} }; + DevAssert(pdu != NULL); - DevAssert(s1ap_message_p != NULL); + switch(pdu->choice.initiatingMessage.procedureCode) { + case S1AP_ProcedureCode_id_S1Setup: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_S1_SETUP_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_s1_setup_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_s1_setup_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - message_string = calloc(10000, sizeof(char)); + case S1AP_ProcedureCode_id_uplinkNASTransport: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_UPLINK_NAS_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_uplink_nas_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_uplink_nas_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - s1ap_string_total_size = 0; + case S1AP_ProcedureCode_id_UECapabilityInfoIndication: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_UE_CAPABILITY_IND_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_ue_capability_ind_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_ue_capability_ind_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - switch(s1ap_message_p->procedureCode) { - case S1ap_ProcedureCode_id_S1Setup: - ret = s1ap_eNB_encode_s1_setup_request( - &s1ap_message_p->msg.s1ap_S1SetupRequestIEs, buffer, len); - s1ap_xer_print_s1ap_s1setuprequest(s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_S1_SETUP_LOG; - break; + case S1AP_ProcedureCode_id_initialUEMessage: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_INITIAL_UE_MESSAGE_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_initial_ue_message_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_initial_ue_message_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - case S1ap_ProcedureCode_id_uplinkNASTransport: - ret = s1ap_eNB_encode_uplink_nas_transport( - &s1ap_message_p->msg.s1ap_UplinkNASTransportIEs, buffer, len); - s1ap_xer_print_s1ap_uplinknastransport(s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_UPLINK_NAS_LOG; - break; + case S1AP_ProcedureCode_id_NASNonDeliveryIndication: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_NAS_NON_DELIVERY_IND_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_nas_non_delivery_ind_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_nas_non_delivery_ind_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - case S1ap_ProcedureCode_id_UECapabilityInfoIndication: - ret = s1ap_eNB_encode_ue_capability_info_indication( - &s1ap_message_p->msg.s1ap_UECapabilityInfoIndicationIEs, buffer, len); - s1ap_xer_print_s1ap_uecapabilityinfoindication(s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_UE_CAPABILITY_IND_LOG; - break; + case S1AP_ProcedureCode_id_UEContextReleaseRequest: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_UE_CONTEXT_RELEASE_REQ_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_ue_context_release_req_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_ue_context_release_req_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - case S1ap_ProcedureCode_id_initialUEMessage: - ret = s1ap_eNB_encode_initial_ue_message( - &s1ap_message_p->msg.s1ap_InitialUEMessageIEs, buffer, len); - s1ap_xer_print_s1ap_initialuemessage(s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_INITIAL_UE_MESSAGE_LOG; - break; - - case S1ap_ProcedureCode_id_NASNonDeliveryIndication: - ret = s1ap_eNB_encode_nas_non_delivery( - &s1ap_message_p->msg.s1ap_NASNonDeliveryIndication_IEs, buffer, len); - s1ap_xer_print_s1ap_nasnondeliveryindication_(s1ap_xer__print2sp, - message_string, s1ap_message_p); - message_id = S1AP_NAS_NON_DELIVERY_IND_LOG; - break; - - case S1ap_ProcedureCode_id_UEContextReleaseRequest: - ret = s1ap_eNB_encode_ue_context_release_request( - &s1ap_message_p->msg.s1ap_UEContextReleaseRequestIEs, buffer, len); - s1ap_xer_print_s1ap_uecontextreleaserequest(s1ap_xer__print2sp, - message_string, s1ap_message_p); - message_id = S1AP_UE_CONTEXT_RELEASE_REQ_LOG; - break; - - - default: - S1AP_DEBUG("Unknown procedure ID (%d) for initiating message\n", - (int)s1ap_message_p->procedureCode); - return ret; - break; + default: + S1AP_DEBUG("Unknown procedure ID (%d) for initiating message\n", + (int)pdu->choice.initiatingMessage.procedureCode); + return -1; } - message_string_size = strlen(message_string); + if (asn1_xer_print) { + xer_fprint(stdout, &asn_DEF_S1AP_S1AP_PDU, (void *)pdu); + } - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_s1_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_s1_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; + memset(&res, 0, sizeof(res)); + res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_S1AP_S1AP_PDU, pdu); + *buffer = res.buffer; + *len = res.result.encoded; + return 0; } static inline -int s1ap_eNB_encode_successfull_outcome(s1ap_message *s1ap_message_p, +int s1ap_eNB_encode_successfull_outcome(S1AP_S1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) { - int ret = -1; MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; MessagesIds message_id; + asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} }; + DevAssert(pdu != NULL); - DevAssert(s1ap_message_p != NULL); + switch(pdu->choice.successfulOutcome.procedureCode) { + case S1AP_ProcedureCode_id_InitialContextSetup: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_INITIAL_CONTEXT_SETUP_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_initial_context_setup_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_initial_context_setup_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - message_string = calloc(10000, sizeof(char)); + case S1AP_ProcedureCode_id_UEContextRelease: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_UE_CONTEXT_RELEASE_COMPLETE_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_ue_context_release_complete_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_ue_context_release_complete_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - s1ap_string_total_size = 0; - message_string_size = strlen(message_string); + case S1AP_ProcedureCode_id_E_RABSetup: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_E_RAB_SETUP_RESPONSE_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_e_rab_setup_response_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_e_rab_setup_response_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + S1AP_INFO("E_RABSetup successful message\n"); + break; + case S1AP_ProcedureCode_id_E_RABModify: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_E_RAB_MODIFY_RESPONSE_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_e_rab_modify_response_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_e_rab_modify_response_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + S1AP_INFO("E_RABModify successful message\n"); + break; - switch(s1ap_message_p->procedureCode) { - case S1ap_ProcedureCode_id_InitialContextSetup: - ret = s1ap_eNB_encode_initial_context_setup_response( - &s1ap_message_p->msg.s1ap_InitialContextSetupResponseIEs, buffer, len); + case S1AP_ProcedureCode_id_E_RABRelease: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_E_RAB_RELEASE_RESPONSE_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_e_rab_release_response_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_e_rab_release_response_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + S1AP_INFO("E_RAB Release successful message\n"); + break; - s1ap_xer_print_s1ap_initialcontextsetupresponse(s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_INITIAL_CONTEXT_SETUP_LOG; - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_initial_context_setup_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; - - case S1ap_ProcedureCode_id_UEContextRelease: - ret = s1ap_eNB_encode_ue_context_release_complete( - &s1ap_message_p->msg.s1ap_UEContextReleaseCompleteIEs, buffer, len); - s1ap_xer_print_s1ap_uecontextreleasecomplete(s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_UE_CONTEXT_RELEASE_COMPLETE_LOG; - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_ue_context_release_complete_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_ue_context_release_complete_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; - - case S1ap_ProcedureCode_id_E_RABSetup: - - ret = s1ap_eNB_encode_e_rab_setup_response ( - &s1ap_message_p->msg.s1ap_E_RABSetupResponseIEs, buffer, len); - //s1ap_xer_print_s1ap_e_rabsetupresponse (s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_E_RAB_SETUP_RESPONSE_LOG ; - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_e_rab_setup_response_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_e_rab_setup_response_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - S1AP_INFO("E_RABSetup successful message\n"); - break; - - case S1ap_ProcedureCode_id_E_RABModify: - ret = s1ap_eNB_encode_e_rab_modify_response ( - &s1ap_message_p->msg.s1ap_E_RABModifyResponseIEs, buffer, len); - message_id = S1AP_E_RAB_MODIFY_RESPONSE_LOG ; - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_e_rab_modify_response_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_e_rab_modify_response_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - S1AP_INFO("E_RABModify successful message\n"); - break; - - case S1ap_ProcedureCode_id_E_RABRelease: - ret = s1ap_eNB_encode_e_rab_release_response ( - &s1ap_message_p->msg.s1ap_E_RABReleaseResponseIEs, buffer, len); - s1ap_xer_print_s1ap_e_rabreleaseresponse(s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_E_RAB_RELEASE_RESPONSE_LOG ; - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_e_rab_release_response_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_e_rab_release_response_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - S1AP_INFO("E_RAB Release successful message\n"); - break; - - default: - S1AP_WARN("Unknown procedure ID (%d) for successfull outcome message\n", - (int)s1ap_message_p->procedureCode); - return ret; - break; + default: + S1AP_WARN("Unknown procedure ID (%d) for successfull outcome message\n", + (int)pdu->choice.successfulOutcome.procedureCode); + return -1; } + if (asn1_xer_print) { + xer_fprint(stdout, &asn_DEF_S1AP_S1AP_PDU, (void *)pdu); + } - return ret; + memset(&res, 0, sizeof(res)); + res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_S1AP_S1AP_PDU, pdu); + *buffer = res.buffer; + *len = res.result.encoded; + return 0; } static inline -int s1ap_eNB_encode_unsuccessfull_outcome(s1ap_message *s1ap_message_p, +int s1ap_eNB_encode_unsuccessfull_outcome(S1AP_S1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) { - int ret = -1; MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; MessagesIds message_id; + asn_encode_to_new_buffer_result_t res = { NULL, {0, NULL, NULL} }; + DevAssert(pdu != NULL); - DevAssert(s1ap_message_p != NULL); + switch(pdu->choice.unsuccessfulOutcome.procedureCode) { + case S1AP_ProcedureCode_id_InitialContextSetup: + res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_S1AP_S1AP_PDU, pdu); + message_id = S1AP_INITIAL_CONTEXT_SETUP_LOG; + message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, res.result.encoded + sizeof (IttiMsgText)); + message_p->ittiMsg.s1ap_initial_context_setup_log.size = res.result.encoded; + memcpy(&message_p->ittiMsg.s1ap_initial_context_setup_log.text, res.buffer, res.result.encoded); + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + free(res.buffer); + break; - message_string = calloc(10000, sizeof(char)); - - s1ap_string_total_size = 0; - - switch(s1ap_message_p->procedureCode) { - case S1ap_ProcedureCode_id_InitialContextSetup: - // ret = s1ap_encode_s1ap_initialcontextsetupfailureies( - // &s1ap_message_p->ittiMsg.s1ap_InitialContextSetupFailureIEs, buffer, len); - s1ap_xer_print_s1ap_initialcontextsetupfailure(s1ap_xer__print2sp, message_string, s1ap_message_p); - message_id = S1AP_INITIAL_CONTEXT_SETUP_LOG; - break; - - default: - S1AP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n", - (int)s1ap_message_p->procedureCode); - return ret; - break; + default: + S1AP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n", + (int)pdu->choice.unsuccessfulOutcome.procedureCode); + return -1; } - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_initial_context_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; -} - -static inline -int s1ap_eNB_encode_ue_capability_info_indication( - S1ap_UECapabilityInfoIndicationIEs_t *ueCapabilityInfoIndicationIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_UECapabilityInfoIndication_t ueCapabilityInfoIndication; - S1ap_UECapabilityInfoIndication_t *ueCapabilityInfoIndication_p = - &ueCapabilityInfoIndication; - - memset((void *)ueCapabilityInfoIndication_p, 0, sizeof(ueCapabilityInfoIndication)); - - if (s1ap_encode_s1ap_uecapabilityinfoindicationies( - ueCapabilityInfoIndication_p, ueCapabilityInfoIndicationIEs) < 0) { - return -1; + if (asn1_xer_print) { + xer_fprint(stdout, &asn_DEF_S1AP_S1AP_PDU, (void *)pdu); } - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_UECapabilityInfoIndication, - S1ap_Criticality_ignore, - &asn_DEF_S1ap_UECapabilityInfoIndication, - ueCapabilityInfoIndication_p); -} - -static inline -int s1ap_eNB_encode_uplink_nas_transport( - S1ap_UplinkNASTransportIEs_t *uplinkNASTransportIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_UplinkNASTransport_t uplinkNASTransport; - S1ap_UplinkNASTransport_t *uplinkNASTransport_p = &uplinkNASTransport; - - memset((void *)uplinkNASTransport_p, 0, sizeof(uplinkNASTransport)); - - if (s1ap_encode_s1ap_uplinknastransporties( - uplinkNASTransport_p, uplinkNASTransportIEs) < 0) { - return -1; - } - - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_uplinkNASTransport, - S1ap_Criticality_ignore, - &asn_DEF_S1ap_UplinkNASTransport, - uplinkNASTransport_p); -} - -static inline -int s1ap_eNB_encode_nas_non_delivery( - S1ap_NASNonDeliveryIndication_IEs_t *nasNonDeliveryIndicationIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_NASNonDeliveryIndication_t nasNonDeliveryIndication; - S1ap_NASNonDeliveryIndication_t *nasNonDeliveryIndication_p = &nasNonDeliveryIndication; - - memset((void *)nasNonDeliveryIndication_p, 0, sizeof(nasNonDeliveryIndication)); - - if (s1ap_encode_s1ap_nasnondeliveryindication_ies( - nasNonDeliveryIndication_p, nasNonDeliveryIndicationIEs) < 0) { - return -1; - } - - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_NASNonDeliveryIndication, - S1ap_Criticality_ignore, - &asn_DEF_S1ap_NASNonDeliveryIndication, - nasNonDeliveryIndication_p); -} - -static inline -int s1ap_eNB_encode_s1_setup_request( - S1ap_S1SetupRequestIEs_t *s1SetupRequestIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_S1SetupRequest_t s1SetupRequest; - S1ap_S1SetupRequest_t *s1SetupRequest_p = &s1SetupRequest; - - memset((void *)s1SetupRequest_p, 0, sizeof(s1SetupRequest)); - - if (s1ap_encode_s1ap_s1setuprequesties(s1SetupRequest_p, s1SetupRequestIEs) < 0) { - return -1; - } - - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_S1Setup, - S1ap_Criticality_reject, - &asn_DEF_S1ap_S1SetupRequest, - s1SetupRequest_p); -} - -static inline -int s1ap_eNB_encode_initial_ue_message( - S1ap_InitialUEMessageIEs_t *initialUEmessageIEs_p, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_InitialUEMessage_t initialUEMessage; - S1ap_InitialUEMessage_t *initialUEMessage_p = &initialUEMessage; - - memset((void *)initialUEMessage_p, 0, sizeof(initialUEMessage)); - - if (s1ap_encode_s1ap_initialuemessageies( - initialUEMessage_p, initialUEmessageIEs_p) < 0) { - return -1; - } - - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_initialUEMessage, - S1ap_Criticality_ignore, - &asn_DEF_S1ap_InitialUEMessage, - initialUEMessage_p); -} - -static inline -int s1ap_eNB_encode_trace_failure( - S1ap_TraceFailureIndicationIEs_t *trace_failure_ies_p, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_TraceFailureIndication_t trace_failure; - S1ap_TraceFailureIndication_t *trace_failure_p = &trace_failure; - - memset((void *)trace_failure_p, 0, sizeof(trace_failure)); - - if (s1ap_encode_s1ap_tracefailureindicationies( - trace_failure_p, trace_failure_ies_p) < 0) { - return -1; - } - - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_TraceFailureIndication, - S1ap_Criticality_reject, - &asn_DEF_S1ap_TraceFailureIndication, - trace_failure_p); -} - -static inline -int s1ap_eNB_encode_initial_context_setup_response( - S1ap_InitialContextSetupResponseIEs_t *initialContextSetupResponseIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_InitialContextSetupResponse_t initial_context_setup_response; - S1ap_InitialContextSetupResponse_t *initial_context_setup_response_p = - &initial_context_setup_response; - - memset((void *)initial_context_setup_response_p, 0, - sizeof(initial_context_setup_response)); - - if (s1ap_encode_s1ap_initialcontextsetupresponseies( - initial_context_setup_response_p, initialContextSetupResponseIEs) < 0) { - return -1; - } - - return s1ap_generate_successfull_outcome(buffer, - length, - S1ap_ProcedureCode_id_InitialContextSetup, - S1ap_Criticality_reject, - &asn_DEF_S1ap_InitialContextSetupResponse, - initial_context_setup_response_p); -} - -static inline -int s1ap_eNB_encode_ue_context_release_complete( - S1ap_UEContextReleaseCompleteIEs_t *s1ap_UEContextReleaseCompleteIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_UEContextReleaseComplete_t ue_context_release_complete; - S1ap_UEContextReleaseComplete_t *ue_context_release_complete_p = - &ue_context_release_complete; - - memset((void *)ue_context_release_complete_p, 0, - sizeof(ue_context_release_complete)); - - if (s1ap_encode_s1ap_uecontextreleasecompleteies( - ue_context_release_complete_p, s1ap_UEContextReleaseCompleteIEs) < 0) { - return -1; - } - - return s1ap_generate_successfull_outcome(buffer, - length, - S1ap_ProcedureCode_id_UEContextRelease, - S1ap_Criticality_reject, - &asn_DEF_S1ap_UEContextReleaseComplete, - ue_context_release_complete_p); -} - -static inline -int s1ap_eNB_encode_ue_context_release_request( - S1ap_UEContextReleaseRequestIEs_t *s1ap_UEContextReleaseRequestIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_UEContextReleaseRequest_t ue_context_release_request; - S1ap_UEContextReleaseRequest_t *ue_context_release_request_p = - &ue_context_release_request; - - memset((void *)ue_context_release_request_p, 0, - sizeof(ue_context_release_request)); - - if (s1ap_encode_s1ap_uecontextreleaserequesties( - ue_context_release_request_p, s1ap_UEContextReleaseRequestIEs) < 0) { - return -1; - } - - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_UEContextReleaseRequest, - S1ap_Criticality_reject, - &asn_DEF_S1ap_UEContextReleaseRequest, - ue_context_release_request_p); -} - -static inline -int s1ap_eNB_encode_e_rab_setup_response(S1ap_E_RABSetupResponseIEs_t *s1ap_E_RABSetupResponseIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_E_RABSetupResponse_t e_rab_setup_response; - S1ap_E_RABSetupResponse_t *e_rab_setup_response_p = &e_rab_setup_response; - - memset((void *)e_rab_setup_response_p, 0, - sizeof(e_rab_setup_response)); - - if (s1ap_encode_s1ap_e_rabsetupresponseies (e_rab_setup_response_p, s1ap_E_RABSetupResponseIEs) < 0) { - return -1; - } - - return s1ap_generate_successfull_outcome(buffer, - length, - S1ap_ProcedureCode_id_E_RABSetup, - S1ap_Criticality_reject, - &asn_DEF_S1ap_E_RABSetupResponse, - e_rab_setup_response_p); -} - -static inline -int s1ap_eNB_encode_e_rab_modify_response(S1ap_E_RABModifyResponseIEs_t *s1ap_E_RABModifyResponseIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_E_RABModifyResponse_t e_rab_modify_response; - S1ap_E_RABModifyResponse_t *e_rab_modify_response_p = &e_rab_modify_response; - - memset((void *)e_rab_modify_response_p, 0, - sizeof(e_rab_modify_response)); - - if (s1ap_encode_s1ap_e_rabmodifyresponseies (e_rab_modify_response_p, s1ap_E_RABModifyResponseIEs) < 0) { - return -1; - } - - return s1ap_generate_successfull_outcome(buffer, - length, - S1ap_ProcedureCode_id_E_RABModify, - S1ap_Criticality_reject, - &asn_DEF_S1ap_E_RABModifyResponse, - e_rab_modify_response_p); -} -static inline -int s1ap_eNB_encode_e_rab_release_response(S1ap_E_RABReleaseResponseIEs_t *s1ap_E_RABReleaseResponseIEs, - uint8_t **buffer, - uint32_t *length) -{ - S1ap_E_RABReleaseResponse_t e_rab_release_response; - S1ap_E_RABReleaseResponse_t *e_rab_release_response_p = &e_rab_release_response; - - memset((void *)e_rab_release_response_p, 0, - sizeof(e_rab_release_response)); - - if (s1ap_encode_s1ap_e_rabreleaseresponseies (e_rab_release_response_p, s1ap_E_RABReleaseResponseIEs) < 0) { - return -1; - } - - return s1ap_generate_successfull_outcome(buffer, - length, - S1ap_ProcedureCode_id_E_RABRelease, - S1ap_Criticality_reject, - &asn_DEF_S1ap_E_RABReleaseResponse, - e_rab_release_response_p); + memset(&res, 0, sizeof(res)); + res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_S1AP_S1AP_PDU, pdu); + *buffer = res.buffer; + *len = res.result.encoded; + return 0; } diff --git a/openair3/S1AP/s1ap_eNB_encoder.h b/openair3/S1AP/s1ap_eNB_encoder.h index 5b135a3f76..9ff5f032e7 100644 --- a/openair3/S1AP/s1ap_eNB_encoder.h +++ b/openair3/S1AP/s1ap_eNB_encoder.h @@ -22,7 +22,7 @@ #ifndef S1AP_ENB_ENCODER_H_ #define S1AP_ENB_ENCODER_H_ -int s1ap_eNB_encode_pdu(s1ap_message *message, uint8_t **buffer, uint32_t *len) +int s1ap_eNB_encode_pdu(S1AP_S1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *len) __attribute__ ((warn_unused_result)); #endif /* S1AP_ENB_ENCODER_H_ */ diff --git a/openair3/S1AP/s1ap_eNB_handlers.c b/openair3/S1AP/s1ap_eNB_handlers.c index ab5f93a16d..1d8bdb11e4 100644 --- a/openair3/S1AP/s1ap_eNB_handlers.c +++ b/openair3/S1AP/s1ap_eNB_handlers.c @@ -34,7 +34,6 @@ #include "asn1_conversions.h" #include "s1ap_common.h" -#include "s1ap_ies_defs.h" // #include "s1ap_eNB.h" #include "s1ap_eNB_defs.h" #include "s1ap_eNB_handlers.h" @@ -54,47 +53,46 @@ static int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message_p); + S1AP_S1AP_PDU_t *pdu); static int s1ap_eNB_handle_s1_setup_failure(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message_p); + S1AP_S1AP_PDU_t *pdu); static int s1ap_eNB_handle_error_indication(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p); + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); static int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p); + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); static int s1ap_eNB_handle_ue_context_release_command(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *s1ap_message_p); - + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); static int s1ap_eNB_handle_e_rab_setup_request(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *s1ap_message_p); + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); static int s1ap_eNB_handle_paging(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p); + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); static int s1ap_eNB_handle_e_rab_modify_request(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *s1ap_message_p); + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); static int s1ap_eNB_handle_e_rab_release_command(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *s1ap_message_p); + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); /* Handlers matrix. Only eNB related procedure present here */ s1ap_message_decoded_callback messages_callback[][3] = { @@ -147,7 +145,7 @@ s1ap_message_decoded_callback messages_callback[][3] = { { 0, 0, 0 }, /* UplinkUEAssociatedLPPaTransport */ { 0, 0, 0 }, /* DownlinkNonUEAssociatedLPPaTransport */ { 0, 0, 0 }, /* UplinkNonUEAssociatedLPPaTransport */ -#endif +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) */ }; static const char *s1ap_direction2String[] = { @@ -202,54 +200,60 @@ void s1ap_handle_s1_setup_message(s1ap_eNB_mme_data_t *mme_desc_p, int sctp_shut } int s1ap_eNB_handle_message(uint32_t assoc_id, int32_t stream, - const uint8_t * const data, const uint32_t data_length) + const uint8_t *const data, const uint32_t data_length) { - struct s1ap_message_s message; + S1AP_S1AP_PDU_t pdu; + int ret; DevAssert(data != NULL); - memset(&message, 0, sizeof(struct s1ap_message_s)); + memset(&pdu, 0, sizeof(pdu)); - if (s1ap_eNB_decode_pdu(&message, data, data_length) < 0) { + if (s1ap_eNB_decode_pdu(&pdu, data, data_length) < 0) { S1AP_ERROR("Failed to decode PDU\n"); return -1; } /* Checking procedure Code and direction of message */ - if (message.procedureCode > sizeof(messages_callback) / (3 * sizeof( + if (pdu.choice.initiatingMessage.procedureCode > sizeof(messages_callback) / (3 * sizeof( s1ap_message_decoded_callback)) - || (message.direction > S1AP_PDU_PR_unsuccessfulOutcome)) { + || (pdu.present > S1AP_S1AP_PDU_PR_unsuccessfulOutcome)) { S1AP_ERROR("[SCTP %d] Either procedureCode %ld or direction %d exceed expected\n", - assoc_id, message.procedureCode, message.direction); + assoc_id, pdu.choice.initiatingMessage.procedureCode, pdu.present); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_S1AP_S1AP_PDU, &pdu); return -1; } /* No handler present. * This can mean not implemented or no procedure for eNB (wrong direction). */ - if (messages_callback[message.procedureCode][message.direction-1] == NULL) { + if (messages_callback[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1] == NULL) { S1AP_ERROR("[SCTP %d] No handler for procedureCode %ld in %s\n", - assoc_id, message.procedureCode, - s1ap_direction2String[message.direction]); + assoc_id, pdu.choice.initiatingMessage.procedureCode, + s1ap_direction2String[pdu.present - 1]); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_S1AP_S1AP_PDU, &pdu); return -1; } /* Calling the right handler */ - return (*messages_callback[message.procedureCode][message.direction-1]) - (assoc_id, stream, &message); + ret = (*messages_callback[pdu.choice.initiatingMessage.procedureCode][pdu.present - 1]) + (assoc_id, stream, &pdu); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_S1AP_S1AP_PDU, &pdu); + return ret; } static int s1ap_eNB_handle_s1_setup_failure(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message_p) + S1AP_S1AP_PDU_t *pdu) { - S1ap_S1SetupFailureIEs_t *s1_setup_failure_p; + S1AP_S1SetupFailure_t *container; + S1AP_S1SetupFailureIEs_t *ie; s1ap_eNB_mme_data_t *mme_desc_p; - DevAssert(message_p != NULL); + DevAssert(pdu != NULL); - s1_setup_failure_p = &message_p->msg.s1ap_S1SetupFailureIEs; + container = &pdu->choice.unsuccessfulOutcome.value.choice.S1SetupFailure; /* S1 Setup Failure == Non UE-related procedure -> stream 0 */ if (stream != 0) { @@ -263,8 +267,11 @@ int s1ap_eNB_handle_s1_setup_failure(uint32_t assoc_id, return -1; } - if ((s1_setup_failure_p->cause.present == S1ap_Cause_PR_misc) && - (s1_setup_failure_p->cause.choice.misc == S1ap_CauseMisc_unspecified)) { + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_S1SetupFailureIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_Cause, true); + + if ((ie->value.choice.Cause.present == S1AP_Cause_PR_misc) && + (ie->value.choice.Cause.choice.misc == S1AP_CauseMisc_unspecified)) { S1AP_WARN("Received s1 setup failure for MME... MME is not ready\n"); } else { S1AP_ERROR("Received s1 setup failure for MME... please check your parameters\n"); @@ -279,15 +286,16 @@ int s1ap_eNB_handle_s1_setup_failure(uint32_t assoc_id, static int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message_p) + S1AP_S1AP_PDU_t *pdu) { - S1ap_S1SetupResponseIEs_t *s1SetupResponse_p; + S1AP_S1SetupResponse_t *container; + S1AP_S1SetupResponseIEs_t *ie; s1ap_eNB_mme_data_t *mme_desc_p; int i; - DevAssert(message_p != NULL); + DevAssert(pdu != NULL); - s1SetupResponse_p = &message_p->msg.s1ap_S1SetupResponseIEs; + container = &pdu->choice.successfulOutcome.value.choice.S1SetupResponse; /* S1 Setup Response == Non UE-related procedure -> stream 0 */ if (stream != 0) { @@ -302,32 +310,33 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, return -1; } + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_S1SetupResponseIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_ServedGUMMEIs, true); /* The list of served gummei can contain at most 8 elements. * LTE related gummei is the first element in the list, i.e with an id of 0. */ - S1AP_DEBUG("servedGUMMEIs.list.count %d\n",s1SetupResponse_p->servedGUMMEIs.list.count); - DevAssert(s1SetupResponse_p->servedGUMMEIs.list.count > 0); - DevAssert(s1SetupResponse_p->servedGUMMEIs.list.count <= 8); + S1AP_DEBUG("servedGUMMEIs.list.count %d\n", ie->value.choice.ServedGUMMEIs.list.count); + DevAssert(ie->value.choice.ServedGUMMEIs.list.count > 0); + DevAssert(ie->value.choice.ServedGUMMEIs.list.count <= S1AP_maxnoofRATs); - - for (i = 0; i < s1SetupResponse_p->servedGUMMEIs.list.count; i++) { - struct S1ap_ServedGUMMEIsItem *gummei_item_p; - struct served_gummei_s *new_gummei_p; + for (i = 0; i < ie->value.choice.ServedGUMMEIs.list.count; i++) { + S1AP_ServedGUMMEIsItem_t *gummei_item_p; + struct served_gummei_s *new_gummei_p; int j; - gummei_item_p = (struct S1ap_ServedGUMMEIsItem *) - s1SetupResponse_p->servedGUMMEIs.list.array[i]; + gummei_item_p = ie->value.choice.ServedGUMMEIs.list.array[i]; new_gummei_p = calloc(1, sizeof(struct served_gummei_s)); STAILQ_INIT(&new_gummei_p->served_plmns); STAILQ_INIT(&new_gummei_p->served_group_ids); STAILQ_INIT(&new_gummei_p->mme_codes); - - S1AP_DEBUG("servedPLMNs.list.count %d\n",gummei_item_p->servedPLMNs.list.count); + + S1AP_DEBUG("servedPLMNs.list.count %d\n", gummei_item_p->servedPLMNs.list.count); + for (j = 0; j < gummei_item_p->servedPLMNs.list.count; j++) { - S1ap_PLMNidentity_t *plmn_identity_p; + S1AP_PLMNidentity_t *plmn_identity_p; struct plmn_identity_s *new_plmn_identity_p; - + plmn_identity_p = gummei_item_p->servedPLMNs.list.array[j]; new_plmn_identity_p = calloc(1, sizeof(struct plmn_identity_s)); TBCD_TO_MCC_MNC(plmn_identity_p, new_plmn_identity_p->mcc, @@ -337,7 +346,7 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, } for (j = 0; j < gummei_item_p->servedGroupIDs.list.count; j++) { - S1ap_MME_Group_ID_t *mme_group_id_p; + S1AP_MME_Group_ID_t *mme_group_id_p; struct served_group_id_s *new_group_id_p; mme_group_id_p = gummei_item_p->servedGroupIDs.list.array[j]; @@ -348,7 +357,7 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, } for (j = 0; j < gummei_item_p->servedMMECs.list.count; j++) { - S1ap_MME_Code_t *mme_code_p; + S1AP_MME_Code_t *mme_code_p; struct mme_code_s *new_mme_code_p; mme_code_p = gummei_item_p->servedMMECs.list.array[j]; @@ -362,19 +371,20 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, STAILQ_INSERT_TAIL(&mme_desc_p->served_gummei, new_gummei_p, next); } - /* Free contents of the list */ - ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_S1ap_ServedGUMMEIs, - (void *)&s1SetupResponse_p->servedGUMMEIs); /* Set the capacity of this MME */ - mme_desc_p->relative_mme_capacity = s1SetupResponse_p->relativeMMECapacity; + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_S1SetupResponseIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_RelativeMMECapacity, true); + mme_desc_p->relative_mme_capacity = ie->value.choice.RelativeMMECapacity; /* Optionaly set the mme name */ - if (s1SetupResponse_p->presenceMask & S1AP_S1SETUPRESPONSEIES_MMENAME_PRESENT) { - mme_desc_p->mme_name = calloc(s1SetupResponse_p->mmEname.size + 1, sizeof(char)); - memcpy(mme_desc_p->mme_name, s1SetupResponse_p->mmEname.buf, - s1SetupResponse_p->mmEname.size); + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_S1SetupResponseIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_MMEname, false); + if (ie) { + mme_desc_p->mme_name = calloc(ie->value.choice.MMEname.size + 1, sizeof(char)); + memcpy(mme_desc_p->mme_name, ie->value.choice.MMEname.buf, + ie->value.choice.MMEname.size); /* Convert the mme name to a printable string */ - mme_desc_p->mme_name[s1SetupResponse_p->mmEname.size] = '\0'; + mme_desc_p->mme_name[ie->value.choice.MMEname.size] = '\0'; } /* The association is now ready as eNB and MME know parameters of each other. @@ -384,75 +394,22 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb ++; s1ap_handle_s1_setup_message(mme_desc_p, 0); -#if 0 - /* We call back our self - * -> generate a dummy initial UE message - */ - { - s1ap_nas_first_req_t s1ap_nas_first_req; - - memset(&s1ap_nas_first_req, 0, sizeof(s1ap_nas_first_req_t)); - - s1ap_nas_first_req.rnti = 0xC03A; - s1ap_nas_first_req.establishment_cause = RRC_CAUSE_MO_DATA; - s1ap_nas_first_req.ue_identity.presenceMask = UE_IDENTITIES_gummei; - - s1ap_nas_first_req.ue_identity.gummei.mcc = 208; - s1ap_nas_first_req.ue_identity.gummei.mnc = 34; - s1ap_nas_first_req.ue_identity.gummei.mme_code = 0; - s1ap_nas_first_req.ue_identity.gummei.mme_group_id = 0; - - /* NAS Attach request with IMSI */ - static uint8_t nas_attach_req_imsi[] = { - 0x07, 0x41, - /* EPS Mobile identity = IMSI */ - 0x71, 0x08, 0x29, 0x80, 0x43, 0x21, 0x43, 0x65, 0x87, - 0xF9, - /* End of EPS Mobile Identity */ - 0x02, 0xE0, 0xE0, 0x00, 0x20, 0x02, 0x03, - 0xD0, 0x11, 0x27, 0x1A, 0x80, 0x80, 0x21, 0x10, 0x01, 0x00, 0x00, - 0x10, 0x81, 0x06, 0x00, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x0A, 0x00, 0x52, 0x12, 0xF2, - 0x01, 0x27, 0x11, - }; - - /* NAS Attach request with GUTI */ - static uint8_t nas_attach_req_guti[] = { - 0x07, 0x41, - /* EPS Mobile identity = IMSI */ - 0x71, 0x0B, 0xF6, 0x12, 0xF2, 0x01, 0x80, 0x00, 0x01, 0xE0, 0x00, - 0xDA, 0x1F, - /* End of EPS Mobile Identity */ - 0x02, 0xE0, 0xE0, 0x00, 0x20, 0x02, 0x03, - 0xD0, 0x11, 0x27, 0x1A, 0x80, 0x80, 0x21, 0x10, 0x01, 0x00, 0x00, - 0x10, 0x81, 0x06, 0x00, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x0A, 0x00, 0x52, 0x12, 0xF2, - 0x01, 0x27, 0x11, - }; - - s1ap_nas_first_req.nas_pdu.buffer = nas_attach_req_guti; - s1ap_nas_first_req.nas_pdu.length = sizeof(nas_attach_req_guti); - - s1ap_eNB_handle_nas_first_req(mme_desc_p->s1ap_eNB_instance->instance, - &s1ap_nas_first_req); - } -#endif - return 0; } static -int s1ap_eNB_handle_error_indication(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p) +int s1ap_eNB_handle_error_indication(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu) { - S1ap_ErrorIndicationIEs_t *s1_error_indication_p; + S1AP_ErrorIndication_t *container; + S1AP_ErrorIndicationIEs_t *ie; s1ap_eNB_mme_data_t *mme_desc_p; - DevAssert(message_p != NULL); + DevAssert(pdu != NULL); - s1_error_indication_p = &message_p->msg.s1ap_ErrorIndicationIEs; + container = &pdu->choice.initiatingMessage.value.choice.ErrorIndication; /* S1 Setup Failure == Non UE-related procedure -> stream 0 */ if (stream != 0) { @@ -465,232 +422,257 @@ int s1ap_eNB_handle_error_indication(uint32_t assoc_id, "MME context\n", assoc_id); return -1; } - if ( s1_error_indication_p->presenceMask & S1AP_ERRORINDICATIONIES_MME_UE_S1AP_ID_PRESENT) { - S1AP_WARN("Received S1 Error indication MME UE S1AP ID 0x%lx\n", s1_error_indication_p->mme_ue_s1ap_id); - } - if ( s1_error_indication_p->presenceMask & S1AP_ERRORINDICATIONIES_ENB_UE_S1AP_ID_PRESENT) { - S1AP_WARN("Received S1 Error indication eNB UE S1AP ID 0x%lx\n", s1_error_indication_p->eNB_UE_S1AP_ID); + + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_ErrorIndicationIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID, false); + + /* optional */ + if (!ie) { + S1AP_WARN("Received S1 Error indication MME UE S1AP ID 0x%lx\n", ie->value.choice.MME_UE_S1AP_ID); } - if ( s1_error_indication_p->presenceMask & S1AP_ERRORINDICATIONIES_CAUSE_PRESENT) { - switch(s1_error_indication_p->cause.present) { - case S1ap_Cause_PR_NOTHING: - S1AP_WARN("Received S1 Error indication cause NOTHING\n"); - break; - case S1ap_Cause_PR_radioNetwork: - switch (s1_error_indication_p->cause.choice.radioNetwork) { - case S1ap_CauseRadioNetwork_unspecified: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unspecified\n"); + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_ErrorIndicationIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID, false); + + /* optional */ + if (!ie) { + S1AP_WARN("Received S1 Error indication eNB UE S1AP ID 0x%lx\n", ie->value.choice.ENB_UE_S1AP_ID); + } + + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_ErrorIndicationIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_Cause, false); + + /* optional */ + if (ie) { + switch(ie->value.choice.Cause.present) { + case S1AP_Cause_PR_NOTHING: + S1AP_WARN("Received S1 Error indication cause NOTHING\n"); + break; + + case S1AP_Cause_PR_radioNetwork: + switch (ie->value.choice.Cause.choice.radioNetwork) { + case S1AP_CauseRadioNetwork_unspecified: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_unspecified\n"); break; - case S1ap_CauseRadioNetwork_tx2relocoverall_expiry: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_tx2relocoverall_expiry\n"); + case S1AP_CauseRadioNetwork_tx2relocoverall_expiry: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_tx2relocoverall_expiry\n"); break; - case S1ap_CauseRadioNetwork_successful_handover: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_successful_handover\n"); + case S1AP_CauseRadioNetwork_successful_handover: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_successful_handover\n"); break; - case S1ap_CauseRadioNetwork_release_due_to_eutran_generated_reason: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_release_due_to_eutran_generated_reason\n"); + case S1AP_CauseRadioNetwork_release_due_to_eutran_generated_reason: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_release_due_to_eutran_generated_reason\n"); break; - case S1ap_CauseRadioNetwork_handover_cancelled: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_handover_cancelled\n"); + case S1AP_CauseRadioNetwork_handover_cancelled: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_handover_cancelled\n"); break; - case S1ap_CauseRadioNetwork_partial_handover: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_partial_handover\n"); + case S1AP_CauseRadioNetwork_partial_handover: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_partial_handover\n"); break; - case S1ap_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system\n"); + case S1AP_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system\n"); break; - case S1ap_CauseRadioNetwork_ho_target_not_allowed: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_ho_target_not_allowed\n"); + case S1AP_CauseRadioNetwork_ho_target_not_allowed: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_ho_target_not_allowed\n"); break; - case S1ap_CauseRadioNetwork_tS1relocoverall_expiry: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_tS1relocoverall_expiry\n"); + case S1AP_CauseRadioNetwork_tS1relocoverall_expiry: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_tS1relocoverall_expiry\n"); break; - case S1ap_CauseRadioNetwork_tS1relocprep_expiry: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_tS1relocprep_expiry\n"); + case S1AP_CauseRadioNetwork_tS1relocprep_expiry: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_tS1relocprep_expiry\n"); break; - case S1ap_CauseRadioNetwork_cell_not_available: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_cell_not_available\n"); + case S1AP_CauseRadioNetwork_cell_not_available: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_cell_not_available\n"); break; - case S1ap_CauseRadioNetwork_unknown_targetID: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_targetID\n"); + case S1AP_CauseRadioNetwork_unknown_targetID: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_unknown_targetID\n"); break; - case S1ap_CauseRadioNetwork_no_radio_resources_available_in_target_cell: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_no_radio_resources_available_in_target_cell\n"); + case S1AP_CauseRadioNetwork_no_radio_resources_available_in_target_cell: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_no_radio_resources_available_in_target_cell\n"); break; - case S1ap_CauseRadioNetwork_unknown_mme_ue_s1ap_id: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_mme_ue_s1ap_id\n"); + case S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id\n"); break; - case S1ap_CauseRadioNetwork_unknown_enb_ue_s1ap_id: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_enb_ue_s1ap_id\n"); + case S1AP_CauseRadioNetwork_unknown_enb_ue_s1ap_id: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_unknown_enb_ue_s1ap_id\n"); break; - case S1ap_CauseRadioNetwork_unknown_pair_ue_s1ap_id: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_pair_ue_s1ap_id\n"); + case S1AP_CauseRadioNetwork_unknown_pair_ue_s1ap_id: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_unknown_pair_ue_s1ap_id\n"); break; - case S1ap_CauseRadioNetwork_handover_desirable_for_radio_reason: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_handover_desirable_for_radio_reason\n"); + case S1AP_CauseRadioNetwork_handover_desirable_for_radio_reason: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_handover_desirable_for_radio_reason\n"); break; - case S1ap_CauseRadioNetwork_time_critical_handover: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_time_critical_handover\n"); + case S1AP_CauseRadioNetwork_time_critical_handover: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_time_critical_handover\n"); break; - case S1ap_CauseRadioNetwork_resource_optimisation_handover: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_resource_optimisation_handover\n"); + case S1AP_CauseRadioNetwork_resource_optimisation_handover: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_resource_optimisation_handover\n"); break; - case S1ap_CauseRadioNetwork_reduce_load_in_serving_cell: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_reduce_load_in_serving_cell\n"); + case S1AP_CauseRadioNetwork_reduce_load_in_serving_cell: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_reduce_load_in_serving_cell\n"); break; - case S1ap_CauseRadioNetwork_user_inactivity: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_user_inactivity\n"); + case S1AP_CauseRadioNetwork_user_inactivity: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_user_inactivity\n"); break; - case S1ap_CauseRadioNetwork_radio_connection_with_ue_lost: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_radio_connection_with_ue_lost\n"); + case S1AP_CauseRadioNetwork_radio_connection_with_ue_lost: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_radio_connection_with_ue_lost\n"); break; - case S1ap_CauseRadioNetwork_load_balancing_tau_required: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_load_balancing_tau_required\n"); + case S1AP_CauseRadioNetwork_load_balancing_tau_required: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_load_balancing_tau_required\n"); break; - case S1ap_CauseRadioNetwork_cs_fallback_triggered: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_cs_fallback_triggered\n"); + case S1AP_CauseRadioNetwork_cs_fallback_triggered: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_cs_fallback_triggered\n"); break; - case S1ap_CauseRadioNetwork_ue_not_available_for_ps_service: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_ue_not_available_for_ps_service\n"); + case S1AP_CauseRadioNetwork_ue_not_available_for_ps_service: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_ue_not_available_for_ps_service\n"); break; - case S1ap_CauseRadioNetwork_radio_resources_not_available: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_radio_resources_not_available\n"); + case S1AP_CauseRadioNetwork_radio_resources_not_available: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_radio_resources_not_available\n"); break; - case S1ap_CauseRadioNetwork_failure_in_radio_interface_procedure: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_failure_in_radio_interface_procedure\n"); + case S1AP_CauseRadioNetwork_failure_in_radio_interface_procedure: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_failure_in_radio_interface_procedure\n"); break; - case S1ap_CauseRadioNetwork_invals1ap_id_qos_combination: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_invals1ap_id_qos_combination\n"); + case S1AP_CauseRadioNetwork_invalid_qos_combination: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_invals1ap_id_qos_combination\n"); break; - case S1ap_CauseRadioNetwork_interrat_redirection: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_interrat_redirection\n"); + case S1AP_CauseRadioNetwork_interrat_redirection: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_interrat_redirection\n"); break; - case S1ap_CauseRadioNetwork_interaction_with_other_procedure: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_interaction_with_other_procedure\n"); + case S1AP_CauseRadioNetwork_interaction_with_other_procedure: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_interaction_with_other_procedure\n"); break; - case S1ap_CauseRadioNetwork_unknown_E_RAB_ID: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_E_RAB_ID\n"); + case S1AP_CauseRadioNetwork_unknown_E_RAB_ID: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_unknown_E_RAB_ID\n"); break; - case S1ap_CauseRadioNetwork_multiple_E_RAB_ID_instances: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_multiple_E_RAB_ID_instances\n"); + case S1AP_CauseRadioNetwork_multiple_E_RAB_ID_instances: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_multiple_E_RAB_ID_instances\n"); break; - case S1ap_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported\n"); + case S1AP_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported\n"); break; - case S1ap_CauseRadioNetwork_s1_intra_system_handover_triggered: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_s1_intra_system_handover_triggered\n"); + case S1AP_CauseRadioNetwork_s1_intra_system_handover_triggered: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_s1_intra_system_handover_triggered\n"); break; - case S1ap_CauseRadioNetwork_s1_inter_system_handover_triggered: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_s1_inter_system_handover_triggered\n"); + case S1AP_CauseRadioNetwork_s1_inter_system_handover_triggered: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_s1_inter_system_handover_triggered\n"); break; - case S1ap_CauseRadioNetwork_x2_handover_triggered: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_x2_handover_triggered\n"); + case S1AP_CauseRadioNetwork_x2_handover_triggered: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_x2_handover_triggered\n"); break; - case S1ap_CauseRadioNetwork_redirection_towards_1xRTT: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_redirection_towards_1xRTT\n"); + case S1AP_CauseRadioNetwork_redirection_towards_1xRTT: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_redirection_towards_1xRTT\n"); break; - case S1ap_CauseRadioNetwork_not_supported_QCI_value: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_not_supported_QCI_value\n"); + case S1AP_CauseRadioNetwork_not_supported_QCI_value: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_not_supported_QCI_value\n"); break; - case S1ap_CauseRadioNetwork_invals1ap_id_CSG_Id: - S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_invals1ap_id_CSG_Id\n"); +#if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) + case S1AP_CauseRadioNetwork_invalid_CSG_Id: + S1AP_WARN("Received S1 Error indication S1AP_CauseRadioNetwork_invals1ap_id_CSG_Id\n"); break; - default: +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) */ + + default: S1AP_WARN("Received S1 Error indication cause radio network case not handled\n"); - } - break; + } + break; - case S1ap_Cause_PR_transport: - switch (s1_error_indication_p->cause.choice.transport) { - case S1ap_CauseTransport_transport_resource_unavailable: - S1AP_WARN("Received S1 Error indication S1ap_CauseTransport_transport_resource_unavailable\n"); + case S1AP_Cause_PR_transport: + switch (ie->value.choice.Cause.choice.transport) { + case S1AP_CauseTransport_transport_resource_unavailable: + S1AP_WARN("Received S1 Error indication S1AP_CauseTransport_transport_resource_unavailable\n"); break; - case S1ap_CauseTransport_unspecified: - S1AP_WARN("Received S1 Error indication S1ap_CauseTransport_unspecified\n"); + case S1AP_CauseTransport_unspecified: + S1AP_WARN("Received S1 Error indication S1AP_CauseTransport_unspecified\n"); break; - default: + default: S1AP_WARN("Received S1 Error indication cause transport case not handled\n"); - } - break; + } + break; - case S1ap_Cause_PR_nas: - switch (s1_error_indication_p->cause.choice.nas) { - case S1ap_CauseNas_normal_release: - S1AP_WARN("Received S1 Error indication S1ap_CauseNas_normal_release\n"); + case S1AP_Cause_PR_nas: + switch (ie->value.choice.Cause.choice.nas) { + case S1AP_CauseNas_normal_release: + S1AP_WARN("Received S1 Error indication S1AP_CauseNas_normal_release\n"); break; - case S1ap_CauseNas_authentication_failure: - S1AP_WARN("Received S1 Error indication S1ap_CauseNas_authentication_failure\n"); + case S1AP_CauseNas_authentication_failure: + S1AP_WARN("Received S1 Error indication S1AP_CauseNas_authentication_failure\n"); break; - case S1ap_CauseNas_detach: - S1AP_WARN("Received S1 Error indication S1ap_CauseNas_detach\n"); + case S1AP_CauseNas_detach: + S1AP_WARN("Received S1 Error indication S1AP_CauseNas_detach\n"); break; - case S1ap_CauseNas_unspecified: - S1AP_WARN("Received S1 Error indication S1ap_CauseNas_unspecified\n"); + case S1AP_CauseNas_unspecified: + S1AP_WARN("Received S1 Error indication S1AP_CauseNas_unspecified\n"); break; - case S1ap_CauseNas_csg_subscription_expiry: - S1AP_WARN("Received S1 Error indication S1ap_CauseNas_csg_subscription_expiry\n"); +#if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) + case S1AP_CauseNas_csg_subscription_expiry: + S1AP_WARN("Received S1 Error indication S1AP_CauseNas_csg_subscription_expiry\n"); break; - default: +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) */ + default: S1AP_WARN("Received S1 Error indication cause nas case not handled\n"); - } - break; + } - case S1ap_Cause_PR_protocol: - switch (s1_error_indication_p->cause.choice.protocol) { - case S1ap_CauseProtocol_transfer_syntax_error: - S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_transfer_syntax_error\n"); + break; + + case S1AP_Cause_PR_protocol: + switch (ie->value.choice.Cause.choice.protocol) { + case S1AP_CauseProtocol_transfer_syntax_error: + S1AP_WARN("Received S1 Error indication S1AP_CauseProtocol_transfer_syntax_error\n"); break; - case S1ap_CauseProtocol_abstract_syntax_error_reject: - S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_abstract_syntax_error_reject\n"); + case S1AP_CauseProtocol_abstract_syntax_error_reject: + S1AP_WARN("Received S1 Error indication S1AP_CauseProtocol_abstract_syntax_error_reject\n"); break; - case S1ap_CauseProtocol_abstract_syntax_error_ignore_and_notify: - S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_abstract_syntax_error_ignore_and_notify\n"); + case S1AP_CauseProtocol_abstract_syntax_error_ignore_and_notify: + S1AP_WARN("Received S1 Error indication S1AP_CauseProtocol_abstract_syntax_error_ignore_and_notify\n"); break; - case S1ap_CauseProtocol_message_not_compatible_with_receiver_state: - S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_message_not_compatible_with_receiver_state\n"); + case S1AP_CauseProtocol_message_not_compatible_with_receiver_state: + S1AP_WARN("Received S1 Error indication S1AP_CauseProtocol_message_not_compatible_with_receiver_state\n"); break; - case S1ap_CauseProtocol_semantic_error: - S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_semantic_error\n"); + case S1AP_CauseProtocol_semantic_error: + S1AP_WARN("Received S1 Error indication S1AP_CauseProtocol_semantic_error\n"); break; - case S1ap_CauseProtocol_abstract_syntax_error_falsely_constructed_message: - S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_abstract_syntax_error_falsely_constructed_message\n"); + case S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message: + S1AP_WARN("Received S1 Error indication S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message\n"); break; - case S1ap_CauseProtocol_unspecified: - S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_unspecified\n"); + case S1AP_CauseProtocol_unspecified: + S1AP_WARN("Received S1 Error indication S1AP_CauseProtocol_unspecified\n"); break; - default: + default: S1AP_WARN("Received S1 Error indication cause protocol case not handled\n"); - } - break; + } + break; - case S1ap_Cause_PR_misc: - switch (s1_error_indication_p->cause.choice.protocol) { - case S1ap_CauseMisc_control_processing_overload: - S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_control_processing_overload\n"); + case S1AP_Cause_PR_misc: + switch (ie->value.choice.Cause.choice.protocol) { + case S1AP_CauseMisc_control_processing_overload: + S1AP_WARN("Received S1 Error indication S1AP_CauseMisc_control_processing_overload\n"); + break; + case S1AP_CauseMisc_not_enough_user_plane_processing_resources: + S1AP_WARN("Received S1 Error indication S1AP_CauseMisc_not_enough_user_plane_processing_resources\n"); + break; + case S1AP_CauseMisc_hardware_failure: + S1AP_WARN("Received S1 Error indication S1AP_CauseMisc_hardware_failure\n"); + break; + case S1AP_CauseMisc_om_intervention: + S1AP_WARN("Received S1 Error indication S1AP_CauseMisc_om_intervention\n"); + break; + case S1AP_CauseMisc_unspecified: + S1AP_WARN("Received S1 Error indication S1AP_CauseMisc_unspecified\n"); + break; + case S1AP_CauseMisc_unknown_PLMN: + S1AP_WARN("Received S1 Error indication S1AP_CauseMisc_unknown_PLMN\n"); break; - case S1ap_CauseMisc_not_enough_user_plane_processing_resources: - S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_not_enough_user_plane_processing_resources\n"); - break; - case S1ap_CauseMisc_hardware_failure: - S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_hardware_failure\n"); - break; - case S1ap_CauseMisc_om_intervention: - S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_om_intervention\n"); - break; - case S1ap_CauseMisc_unspecified: - S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_unspecified\n"); - break; - case S1ap_CauseMisc_unknown_PLMN: - S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_unknown_PLMN\n"); - break; default: S1AP_WARN("Received S1 Error indication cause misc case not handled\n"); } - break; + break; } } - if ( s1_error_indication_p->presenceMask & S1AP_ERRORINDICATIONIES_CRITICALITYDIAGNOSTICS_PRESENT) { + + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_ErrorIndicationIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_CriticalityDiagnostics, false); + + if (ie) { // TODO continue } // TODO continue @@ -700,20 +682,22 @@ int s1ap_eNB_handle_error_indication(uint32_t assoc_id, static -int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, +int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *s1ap_message_p) + S1AP_S1AP_PDU_t *pdu) { int i; - s1ap_eNB_mme_data_t *mme_desc_p = NULL; s1ap_eNB_ue_context_t *ue_desc_p = NULL; MessageDef *message_p = NULL; + S1AP_InitialContextSetupRequest_t *container; + S1AP_InitialContextSetupRequestIEs_t *ie; + S1AP_ENB_UE_S1AP_ID_t enb_ue_s1ap_id; + S1AP_MME_UE_S1AP_ID_t mme_ue_s1ap_id; - S1ap_InitialContextSetupRequestIEs_t *initialContextSetupRequest_p; - DevAssert(s1ap_message_p != NULL); + DevAssert(pdu != NULL); - initialContextSetupRequest_p = &s1ap_message_p->msg.s1ap_InitialContextSetupRequestIEs; + container = &pdu->choice.initiatingMessage.value.choice.InitialContextSetupRequest; if ((mme_desc_p = s1ap_eNB_get_MME(NULL, assoc_id, 0)) == NULL) { S1AP_ERROR("[SCTP %d] Received initial context setup request for non " @@ -721,11 +705,21 @@ int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, return -1; } + /* id-MME-UE-S1AP-ID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_InitialContextSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID, true); + mme_ue_s1ap_id = ie->value.choice.MME_UE_S1AP_ID; + + /* id-eNB-UE-S1AP-ID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_InitialContextSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID, true); + enb_ue_s1ap_id = ie->value.choice.ENB_UE_S1AP_ID; + if ((ue_desc_p = s1ap_eNB_get_ue_context(mme_desc_p->s1ap_eNB_instance, - initialContextSetupRequest_p->eNB_UE_S1AP_ID)) == NULL) { + enb_ue_s1ap_id)) == NULL) { S1AP_ERROR("[SCTP %d] Received initial context setup request for non " "existing UE context 0x%06lx\n", assoc_id, - initialContextSetupRequest_p->eNB_UE_S1AP_ID); + enb_ue_s1ap_id); return -1; } @@ -738,7 +732,7 @@ int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, ue_desc_p->rx_stream = stream; - ue_desc_p->mme_ue_s1ap_id = initialContextSetupRequest_p->mme_ue_s1ap_id; + ue_desc_p->mme_ue_s1ap_id = mme_ue_s1ap_id; message_p = itti_alloc_new_message(TASK_S1AP, S1AP_INITIAL_CONTEXT_SETUP_REQ); @@ -746,26 +740,25 @@ int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, ue_desc_p->ue_initial_id = 0; S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).eNB_ue_s1ap_id = ue_desc_p->eNB_ue_s1ap_id; + + /* id-uEaggregateMaximumBitrate */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_InitialContextSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_uEaggregateMaximumBitrate, true); + asn_INTEGER2ulong(&(ie->value.choice.UEAggregateMaximumBitrate.uEaggregateMaximumBitRateUL), + &(S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).ue_ambr.br_ul)); + asn_INTEGER2ulong(&(ie->value.choice.UEAggregateMaximumBitrate.uEaggregateMaximumBitRateDL), + &(S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).ue_ambr.br_dl)); + + /* id-E-RABToBeSetupListCtxtSUReq */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_InitialContextSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_E_RABToBeSetupListCtxtSUReq, true); + S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).nb_of_e_rabs = - initialContextSetupRequest_p->e_RABToBeSetupListCtxtSUReq.s1ap_E_RABToBeSetupItemCtxtSUReq.count; - - S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).ue_ambr.br_ul = 64;// TO DO(bitrate_t)(initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateUL); - S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).ue_ambr.br_dl = 1024;//(bitrate_t)(initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL); - - S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).security_capabilities.encryption_algorithms = - BIT_STRING_to_uint16(&initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms); - S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).security_capabilities.integrity_algorithms = - BIT_STRING_to_uint16(&initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms); - - /* Copy the security key */ - memcpy(&S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).security_key, - initialContextSetupRequest_p->securityKey.buf, initialContextSetupRequest_p->securityKey.size); - - for (i = 0; i < initialContextSetupRequest_p->e_RABToBeSetupListCtxtSUReq.s1ap_E_RABToBeSetupItemCtxtSUReq.count; i++) { - S1ap_E_RABToBeSetupItemCtxtSUReq_t *item_p; - - item_p = (S1ap_E_RABToBeSetupItemCtxtSUReq_t *)initialContextSetupRequest_p->e_RABToBeSetupListCtxtSUReq.s1ap_E_RABToBeSetupItemCtxtSUReq.array[i]; + ie->value.choice.E_RABToBeSetupListCtxtSUReq.list.count; + for (i = 0; i < ie->value.choice.E_RABToBeSetupListCtxtSUReq.list.count; i++) { + S1AP_E_RABToBeSetupItemCtxtSUReq_t *item_p; + item_p = &(((S1AP_E_RABToBeSetupItemCtxtSUReqIEs_t *)ie->value.choice.E_RABToBeSetupListCtxtSUReq.list.array[i])->value.choice.E_RABToBeSetupItemCtxtSUReq); S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).e_rab_param[i].e_rab_id = item_p->e_RAB_ID; if (item_p->nAS_PDU != NULL) { @@ -776,7 +769,7 @@ int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, malloc(sizeof(uint8_t) * item_p->nAS_PDU->size); memcpy(S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).e_rab_param[i].nas_pdu.buffer, - item_p->nAS_PDU->buf, item_p->nAS_PDU->size); + item_p->nAS_PDU->buf, item_p->nAS_PDU->size); S1AP_DEBUG("Received NAS message with the E_RAB setup procedure\n"); } else { S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).e_rab_param[i].nas_pdu.length = 0; @@ -803,6 +796,20 @@ int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, item_p->e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionVulnerability; } + /* id-UESecurityCapabilities */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_InitialContextSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_UESecurityCapabilities, true); + S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).security_capabilities.encryption_algorithms = + BIT_STRING_to_uint16(&ie->value.choice.UESecurityCapabilities.encryptionAlgorithms); + S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).security_capabilities.integrity_algorithms = + BIT_STRING_to_uint16(&ie->value.choice.UESecurityCapabilities.integrityProtectionAlgorithms); + + /* id-SecurityKey : Copy the security key */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_InitialContextSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_SecurityKey, true); + memcpy(&S1AP_INITIAL_CONTEXT_SETUP_REQ(message_p).security_key, + ie->value.choice.SecurityKey.buf, ie->value.choice.SecurityKey.size); + itti_send_msg_to_task(TASK_RRC_ENB, ue_desc_p->eNB_instance->instance, message_p); return 0; @@ -810,18 +817,21 @@ int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, static -int s1ap_eNB_handle_ue_context_release_command(uint32_t assoc_id, +int s1ap_eNB_handle_ue_context_release_command(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *s1ap_message_p) + S1AP_S1AP_PDU_t *pdu) { s1ap_eNB_mme_data_t *mme_desc_p = NULL; s1ap_eNB_ue_context_t *ue_desc_p = NULL; MessageDef *message_p = NULL; + S1AP_MME_UE_S1AP_ID_t mme_ue_s1ap_id; + S1AP_ENB_UE_S1AP_ID_t enb_ue_s1ap_id; + S1AP_UEContextReleaseCommand_t *container; + S1AP_UEContextReleaseCommand_IEs_t *ie; - S1ap_UEContextReleaseCommandIEs_t *ueContextReleaseCommand_p; - DevAssert(s1ap_message_p != NULL); + DevAssert(pdu != NULL); - ueContextReleaseCommand_p = &s1ap_message_p->msg.s1ap_UEContextReleaseCommandIEs; + container = &pdu->choice.initiatingMessage.value.choice.UEContextReleaseCommand; if ((mme_desc_p = s1ap_eNB_get_MME(NULL, assoc_id, 0)) == NULL) { S1AP_ERROR("[SCTP %d] Received UE context release command for non " @@ -829,80 +839,85 @@ int s1ap_eNB_handle_ue_context_release_command(uint32_t assoc_id, return -1; } - S1ap_MME_UE_S1AP_ID_t mme_ue_s1ap_id; - S1ap_ENB_UE_S1AP_ID_t enb_ue_s1ap_id; + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_UEContextReleaseCommand_IEs_t, ie, container, + S1AP_ProtocolIE_ID_id_UE_S1AP_IDs, true); - switch (ueContextReleaseCommand_p->uE_S1AP_IDs.present) { - case S1ap_UE_S1AP_IDs_PR_uE_S1AP_ID_pair: - enb_ue_s1ap_id = ueContextReleaseCommand_p->uE_S1AP_IDs.choice.uE_S1AP_ID_pair.eNB_UE_S1AP_ID; - mme_ue_s1ap_id = ueContextReleaseCommand_p->uE_S1AP_IDs.choice.uE_S1AP_ID_pair.mME_UE_S1AP_ID; + switch (ie->value.choice.UE_S1AP_IDs.present) { + case S1AP_UE_S1AP_IDs_PR_uE_S1AP_ID_pair: + enb_ue_s1ap_id = ie->value.choice.UE_S1AP_IDs.choice.uE_S1AP_ID_pair.eNB_UE_S1AP_ID; + mme_ue_s1ap_id = ie->value.choice.UE_S1AP_IDs.choice.uE_S1AP_ID_pair.mME_UE_S1AP_ID; - MSC_LOG_RX_MESSAGE( - MSC_S1AP_ENB, - MSC_S1AP_MME, - NULL,0, - "0 UEContextRelease/%s eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" len %u", - s1ap_direction2String[s1ap_message_p->direction], - enb_ue_s1ap_id, - mme_ue_s1ap_id); + MSC_LOG_RX_MESSAGE( + MSC_S1AP_ENB, + MSC_S1AP_MME, + NULL,0, + "0 UEContextRelease/%s eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" len %u", + s1ap_direction2String[pdu->present - 1], + enb_ue_s1ap_id, + mme_ue_s1ap_id); - if ((ue_desc_p = s1ap_eNB_get_ue_context(mme_desc_p->s1ap_eNB_instance, - enb_ue_s1ap_id)) == NULL) { - S1AP_ERROR("[SCTP %d] Received UE context release command for non " - "existing UE context 0x%06lx\n", - assoc_id, - enb_ue_s1ap_id); - /*MessageDef *msg_complete_p; - msg_complete_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_COMPLETE); - S1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).eNB_ue_s1ap_id = enb_ue_s1ap_id; - itti_send_msg_to_task(TASK_S1AP, ue_desc_p->eNB_instance->instance <=> 0, msg_complete_p); - */ + if ((ue_desc_p = s1ap_eNB_get_ue_context(mme_desc_p->s1ap_eNB_instance, + enb_ue_s1ap_id)) == NULL) { + S1AP_ERROR("[SCTP %d] Received UE context release command for non " + "existing UE context 0x%06lx\n", + assoc_id, + enb_ue_s1ap_id); + /*MessageDef *msg_complete_p; + msg_complete_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_COMPLETE); + S1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).eNB_ue_s1ap_id = enb_ue_s1ap_id; + itti_send_msg_to_task(TASK_S1AP, ue_desc_p->eNB_instance->instance <=> 0, msg_complete_p); + */ + return -1; + } else { + MSC_LOG_TX_MESSAGE( + MSC_S1AP_ENB, + MSC_RRC_ENB, + NULL,0, + "0 S1AP_UE_CONTEXT_RELEASE_COMMAND/%d eNB_ue_s1ap_id "S1AP_UE_ID_FMT" ", + enb_ue_s1ap_id); + message_p = itti_alloc_new_message(TASK_S1AP, S1AP_UE_CONTEXT_RELEASE_COMMAND); + S1AP_UE_CONTEXT_RELEASE_COMMAND(message_p).eNB_ue_s1ap_id = enb_ue_s1ap_id; + itti_send_msg_to_task(TASK_RRC_ENB, ue_desc_p->eNB_instance->instance, message_p); + return 0; + } + + break; + + //#warning "TODO mapping mme_ue_s1ap_id enb_ue_s1ap_id?" + + case S1AP_UE_S1AP_IDs_PR_mME_UE_S1AP_ID: + mme_ue_s1ap_id = ie->value.choice.UE_S1AP_IDs.choice.uE_S1AP_ID_pair.mME_UE_S1AP_ID; + S1AP_ERROR("TO DO mapping mme_ue_s1ap_id enb_ue_s1ap_id"); + (void)mme_ue_s1ap_id; /* TODO: remove - it's to remove gcc warning about unused var */ + + case S1AP_UE_S1AP_IDs_PR_NOTHING: + default: + S1AP_ERROR("S1AP_UE_CONTEXT_RELEASE_COMMAND not processed, missing info elements"); return -1; - } else { - MSC_LOG_TX_MESSAGE( - MSC_S1AP_ENB, - MSC_RRC_ENB, - NULL,0, - "0 S1AP_UE_CONTEXT_RELEASE_COMMAND/%d eNB_ue_s1ap_id "S1AP_UE_ID_FMT" ", - enb_ue_s1ap_id); - - message_p = itti_alloc_new_message(TASK_S1AP, S1AP_UE_CONTEXT_RELEASE_COMMAND); - S1AP_UE_CONTEXT_RELEASE_COMMAND(message_p).eNB_ue_s1ap_id = enb_ue_s1ap_id; - itti_send_msg_to_task(TASK_RRC_ENB, ue_desc_p->eNB_instance->instance, message_p); - return 0; - } - - break; - -//#warning "TODO mapping mme_ue_s1ap_id enb_ue_s1ap_id?" - - case S1ap_UE_S1AP_IDs_PR_mME_UE_S1AP_ID: - mme_ue_s1ap_id = ueContextReleaseCommand_p->uE_S1AP_IDs.choice.mME_UE_S1AP_ID; - S1AP_ERROR("TO DO mapping mme_ue_s1ap_id enb_ue_s1ap_id"); - (void)mme_ue_s1ap_id; /* TODO: remove - it's to remove gcc warning about unused var */ - - case S1ap_UE_S1AP_IDs_PR_NOTHING: - default: - S1AP_ERROR("S1AP_UE_CONTEXT_RELEASE_COMMAND not processed, missing info elements"); - return -1; } + + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_UEContextReleaseCommand_IEs_t, ie, container, + S1AP_ProtocolIE_ID_id_Cause, true); + /* TBD */ } static -int s1ap_eNB_handle_e_rab_setup_request(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *s1ap_message_p) { - +int s1ap_eNB_handle_e_rab_setup_request(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu) +{ int i; + S1AP_MME_UE_S1AP_ID_t mme_ue_s1ap_id; + S1AP_ENB_UE_S1AP_ID_t enb_ue_s1ap_id; + s1ap_eNB_mme_data_t *mme_desc_p = NULL; + s1ap_eNB_ue_context_t *ue_desc_p = NULL; + MessageDef *message_p = NULL; + S1AP_E_RABSetupRequest_t *container; + S1AP_E_RABSetupRequestIEs_t *ie; - s1ap_eNB_mme_data_t *mme_desc_p = NULL; - s1ap_eNB_ue_context_t *ue_desc_p = NULL; - MessageDef *message_p = NULL; + DevAssert(pdu != NULL); - S1ap_E_RABSetupRequestIEs_t *s1ap_E_RABSetupRequest; - DevAssert(s1ap_message_p != NULL); - - s1ap_E_RABSetupRequest = &s1ap_message_p->msg.s1ap_E_RABSetupRequestIEs; + container = &pdu->choice.initiatingMessage.value.choice.E_RABSetupRequest; if ((mme_desc_p = s1ap_eNB_get_MME(NULL, assoc_id, 0)) == NULL) { S1AP_ERROR("[SCTP %d] Received initial context setup request for non " @@ -910,12 +925,21 @@ int s1ap_eNB_handle_e_rab_setup_request(uint32_t assoc_id, return -1; } - + /* id-MME-UE-S1AP-ID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID, true); + mme_ue_s1ap_id = ie->value.choice.MME_UE_S1AP_ID; + + /* id-eNB-UE-S1AP-ID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID, true); + enb_ue_s1ap_id = ie->value.choice.ENB_UE_S1AP_ID; + if ((ue_desc_p = s1ap_eNB_get_ue_context(mme_desc_p->s1ap_eNB_instance, - s1ap_E_RABSetupRequest->eNB_UE_S1AP_ID)) == NULL) { + enb_ue_s1ap_id)) == NULL) { S1AP_ERROR("[SCTP %d] Received initial context setup request for non " "existing UE context 0x%06lx\n", assoc_id, - s1ap_E_RABSetupRequest->eNB_UE_S1AP_ID); + enb_ue_s1ap_id); return -1; } @@ -928,25 +952,26 @@ int s1ap_eNB_handle_e_rab_setup_request(uint32_t assoc_id, ue_desc_p->rx_stream = stream; - if ( ue_desc_p->mme_ue_s1ap_id != s1ap_E_RABSetupRequest->mme_ue_s1ap_id){ - S1AP_WARN("UE context mme_ue_s1ap_id is different form that of the message (%d != %ld)", - ue_desc_p->mme_ue_s1ap_id, s1ap_E_RABSetupRequest->mme_ue_s1ap_id); - + if ( ue_desc_p->mme_ue_s1ap_id != mme_ue_s1ap_id) { + S1AP_WARN("UE context mme_ue_s1ap_id is different form that of the message (%d != %ld)", + ue_desc_p->mme_ue_s1ap_id, mme_ue_s1ap_id); } + message_p = itti_alloc_new_message(TASK_S1AP, S1AP_E_RAB_SETUP_REQ); - + S1AP_E_RAB_SETUP_REQ(message_p).ue_initial_id = ue_desc_p->ue_initial_id; - - S1AP_E_RAB_SETUP_REQ(message_p).mme_ue_s1ap_id = s1ap_E_RABSetupRequest->mme_ue_s1ap_id; - S1AP_E_RAB_SETUP_REQ(message_p).eNB_ue_s1ap_id = s1ap_E_RABSetupRequest->eNB_UE_S1AP_ID; - - S1AP_E_RAB_SETUP_REQ(message_p).nb_e_rabs_tosetup = - s1ap_E_RABSetupRequest->e_RABToBeSetupListBearerSUReq.s1ap_E_RABToBeSetupItemBearerSUReq.count; - - for (i = 0; i < s1ap_E_RABSetupRequest->e_RABToBeSetupListBearerSUReq.s1ap_E_RABToBeSetupItemBearerSUReq.count; i++) { - S1ap_E_RABToBeSetupItemBearerSUReq_t *item_p; - - item_p = (S1ap_E_RABToBeSetupItemBearerSUReq_t *)s1ap_E_RABSetupRequest->e_RABToBeSetupListBearerSUReq.s1ap_E_RABToBeSetupItemBearerSUReq.array[i]; + S1AP_E_RAB_SETUP_REQ(message_p).mme_ue_s1ap_id = mme_ue_s1ap_id; + S1AP_E_RAB_SETUP_REQ(message_p).eNB_ue_s1ap_id = enb_ue_s1ap_id; + + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABSetupRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_E_RABToBeSetupListBearerSUReq, true); + S1AP_E_RAB_SETUP_REQ(message_p).nb_e_rabs_tosetup = + ie->value.choice.E_RABToBeSetupListBearerSUReq.list.count; + + for (i = 0; i < ie->value.choice.E_RABToBeSetupListBearerSUReq.list.count; i++) { + S1AP_E_RABToBeSetupItemBearerSUReq_t *item_p; + + item_p = &(((S1AP_E_RABToBeSetupItemBearerSUReqIEs_t *)ie->value.choice.E_RABToBeSetupListBearerSUReq.list.array[i])->value.choice.E_RABToBeSetupItemBearerSUReq); S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].e_rab_id = item_p->e_RAB_ID; @@ -957,12 +982,12 @@ int s1ap_eNB_handle_e_rab_setup_request(uint32_t assoc_id, S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].nas_pdu.buffer = malloc(sizeof(uint8_t) * item_p->nAS_PDU.size); memcpy(S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].nas_pdu.buffer, - item_p->nAS_PDU.buf, item_p->nAS_PDU.size); + item_p->nAS_PDU.buf, item_p->nAS_PDU.size); // S1AP_INFO("received a NAS PDU with size %d (%02x.%02x)\n",S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].nas_pdu.length, item_p->nAS_PDU.buf[0], item_p->nAS_PDU.buf[1]); } else { S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].nas_pdu.length = 0; S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].nas_pdu.buffer = NULL; - + S1AP_WARN("NAS PDU is not provided, generate a E_RAB_SETUP Failure (TBD) back to MME \n"); // return -1; } @@ -973,10 +998,10 @@ int s1ap_eNB_handle_e_rab_setup_request(uint32_t assoc_id, S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].sgw_addr.length = item_p->transportLayerAddress.size * 8 - item_p->transportLayerAddress.bits_unused; - /* S1AP_INFO("sgw addr %s len: %d (size %d, index %d)\n", - S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].sgw_addr.buffer, - S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].sgw_addr.length, - item_p->transportLayerAddress.size, i); + /* S1AP_INFO("sgw addr %s len: %d (size %d, index %d)\n", + S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].sgw_addr.buffer, + S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].sgw_addr.length, + item_p->transportLayerAddress.size, i); */ /* GTP tunnel endpoint ID */ OCTET_STRING_TO_INT32(&item_p->gTP_TEID, S1AP_E_RAB_SETUP_REQ(message_p).e_rab_setup_params[i].gtp_teid); @@ -999,20 +1024,22 @@ int s1ap_eNB_handle_e_rab_setup_request(uint32_t assoc_id, static int s1ap_eNB_handle_paging(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *s1ap_message_p) + uint32_t stream, + S1AP_S1AP_PDU_t *pdu) { - S1ap_PagingIEs_t *paging_p; s1ap_eNB_mme_data_t *mme_desc_p = NULL; s1ap_eNB_instance_t *s1ap_eNB_instance = NULL; MessageDef *message_p = NULL; + S1AP_Paging_t *container; + S1AP_PagingIEs_t *ie; + + DevAssert(pdu != NULL); + + container = &pdu->choice.initiatingMessage.value.choice.Paging; - DevAssert(s1ap_message_p != NULL); // received Paging Message from MME S1AP_DEBUG("[SCTP %d] Received Paging Message From MME\n",assoc_id); - paging_p = &s1ap_message_p->msg.s1ap_PagingIEs; - /* Paging procedure -> stream != 0 */ if (stream == 0) { S1AP_ERROR("[SCTP %d] Received Paging procedure on stream (%d)\n", @@ -1035,177 +1062,143 @@ int s1ap_eNB_handle_paging(uint32_t assoc_id, message_p = itti_alloc_new_message(TASK_S1AP, S1AP_PAGING_IND); - /* convert S1ap_PagingIEs_t to s1ap_paging_ind_t */ - /* convert UE Identity Index value */ - S1AP_PAGING_IND(message_p).ue_index_value = BIT_STRING_to_uint32(&paging_p->ueIdentityIndexValue); + /* convert S1AP_PagingIEs_t to s1ap_paging_ind_t */ + /* id-UEIdentityIndexValue : convert UE Identity Index value */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_PagingIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_UEIdentityIndexValue, true); + S1AP_PAGING_IND(message_p).ue_index_value = BIT_STRING_to_uint32(&ie->value.choice.UEIdentityIndexValue); S1AP_DEBUG("[SCTP %d] Received Paging ue_index_value (%d)\n", - assoc_id,(uint32_t)S1AP_PAGING_IND(message_p).ue_index_value); + assoc_id,(uint32_t)S1AP_PAGING_IND(message_p).ue_index_value); S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code = 0; S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi = 0; + /* id-UEPagingID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_PagingIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_UEPagingID, true); /* convert UE Paging Identity */ - if (paging_p->uePagingID.present == S1ap_UEPagingID_PR_s_TMSI) { - S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_s_tmsi; - OCTET_STRING_TO_INT8(&paging_p->uePagingID.choice.s_TMSI.mMEC, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code); - OCTET_STRING_TO_INT32(&paging_p->uePagingID.choice.s_TMSI.m_TMSI, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi); - } else if (paging_p->uePagingID.present == S1ap_UEPagingID_PR_iMSI) { - S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_imsi; - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length = 0; - for (int i = 0; i < paging_p->uePagingID.choice.iMSI.size; i++) { - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i] = (uint8_t)(paging_p->uePagingID.choice.iMSI.buf[i] & 0x0F ); - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length++; - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1] = (uint8_t)((paging_p->uePagingID.choice.iMSI.buf[i]>>4) & 0x0F); - LOG_D(S1AP,"paging : i %d %d imsi %d %d \n",2*i,2*i+1,S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1]); - if (S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1] == 0x0F) { - if(i != paging_p->uePagingID.choice.iMSI.size - 1){ - /* invalid paging_p->uePagingID.choise.iMSI.buffer */ - S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI error(i %d 0x0F)\n", assoc_id,i); - return -1; - } - } else { - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length++; - } - } - if (S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length >= S1AP_IMSI_LENGTH) { - /* invalid paging_p->uePagingID.choise.iMSI.size */ - S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI.size(%d) is over IMSI length(%d)\n", assoc_id, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length, S1AP_IMSI_LENGTH); + if (ie->value.choice.UEPagingID.present == S1AP_UEPagingID_PR_s_TMSI) { + S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_s_tmsi; + OCTET_STRING_TO_INT8(&ie->value.choice.UEPagingID.choice.s_TMSI.mMEC, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code); + OCTET_STRING_TO_INT32(&ie->value.choice.UEPagingID.choice.s_TMSI.m_TMSI, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi); + } else if (ie->value.choice.UEPagingID.present == S1AP_UEPagingID_PR_iMSI) { + S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_imsi; + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length = 0; + + for (int i = 0; i < ie->value.choice.UEPagingID.choice.iMSI.size; i++) { + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i] = (uint8_t)(ie->value.choice.UEPagingID.choice.iMSI.buf[i] & 0x0F ); + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length++; + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1] = (uint8_t)((ie->value.choice.UEPagingID.choice.iMSI.buf[i]>>4) & 0x0F); + LOG_D(S1AP,"paging : i %d %d imsi %d %d \n",2*i,2*i+1,S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1]); + + if (S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1] == 0x0F) { + if(i != ie->value.choice.UEPagingID.choice.iMSI.size - 1) { + /* invalid paging_p->uePagingID.choise.iMSI.buffer */ + S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI error(i %d 0x0F)\n", assoc_id,i); return -1; - } -} else { - /* invalid paging_p->uePagingID.present */ - S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.present(%d) is unknown\n", assoc_id, paging_p->uePagingID.present); + } + } else { + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length++; + } + } + + if (S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length >= S1AP_IMSI_LENGTH) { + /* invalid paging_p->uePagingID.choise.iMSI.size */ + S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI.size(%d) is over IMSI length(%d)\n", assoc_id, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length, S1AP_IMSI_LENGTH); return -1; + } + } else { + /* invalid paging_p->uePagingID.present */ + S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.present(%d) is unknown\n", assoc_id, ie->value.choice.UEPagingID.present); + return -1; } -#if 0 - /* convert Paging DRX(optional) */ - if (paging_p->presenceMask & S1AP_PAGINGIES_PAGINGDRX_PRESENT) { - switch(paging_p->pagingDRX) { - case S1ap_PagingDRX_v32: - S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_32; - break; - case S1ap_PagingDRX_v64: - S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_64; - break; - case S1ap_PagingDRX_v128: - S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_128; - break; - case S1ap_PagingDRX_v256: - S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256; - break; - default: - // when UE Paging DRX is no value - S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256; - break; - } - } -#endif S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256; - /* convert cnDomain */ - if (paging_p->cnDomain == S1ap_CNDomain_ps) { - S1AP_PAGING_IND(message_p).cn_domain = CN_DOMAIN_PS; - } else if (paging_p->cnDomain == S1ap_CNDomain_cs) { - S1AP_PAGING_IND(message_p).cn_domain = CN_DOMAIN_CS; + /* id-pagingDRX */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_PagingIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_pagingDRX, false); + + /* optional */ + if (ie) { + S1AP_PAGING_IND(message_p).paging_drx = ie->value.choice.PagingDRX; } else { - /* invalid paging_p->cnDomain */ - S1AP_ERROR("[SCTP %d] Received Paging : cnDomain(%ld) is unknown\n", assoc_id, paging_p->cnDomain); - return -1; + S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256; + } + + /* */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_PagingIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_CNDomain, true); + + /* id-CNDomain : convert cnDomain */ + if (ie->value.choice.CNDomain == S1AP_CNDomain_ps) { + S1AP_PAGING_IND(message_p).cn_domain = CN_DOMAIN_PS; + } else if (ie->value.choice.CNDomain == S1AP_CNDomain_cs) { + S1AP_PAGING_IND(message_p).cn_domain = CN_DOMAIN_CS; + } else { + /* invalid paging_p->cnDomain */ + S1AP_ERROR("[SCTP %d] Received Paging : cnDomain(%ld) is unknown\n", assoc_id, ie->value.choice.CNDomain); + return -1; } memset (&S1AP_PAGING_IND(message_p).plmn_identity[0], 0, sizeof(plmn_identity_t)*256); memset (&S1AP_PAGING_IND(message_p).tac[0], 0, sizeof(int16_t)*256); S1AP_PAGING_IND(message_p).tai_size = 0; - for (int i = 0; i < paging_p->taiList.s1ap_TAIItem.count; i++) { - S1AP_INFO("[SCTP %d] Received Paging taiList: i %d, count %d\n", assoc_id, i, paging_p->taiList.s1ap_TAIItem.count); - S1ap_TAIItem_t s1ap_TAIItem; - memset (&s1ap_TAIItem, 0, sizeof(S1ap_TAIItem_t)); + /* id-TAIList */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_PagingIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_TAIList, true); + S1AP_INFO("[SCTP %d] Received Paging taiList: count %d\n", assoc_id, ie->value.choice.TAIList.list.count); - memcpy(&s1ap_TAIItem, paging_p->taiList.s1ap_TAIItem.array[i], sizeof(S1ap_TAIItem_t)); - - TBCD_TO_MCC_MNC(&s1ap_TAIItem.tAI.pLMNidentity, S1AP_PAGING_IND(message_p).plmn_identity[i].mcc, - S1AP_PAGING_IND(message_p).plmn_identity[i].mnc, - S1AP_PAGING_IND(message_p).plmn_identity[i].mnc_digit_length); - OCTET_STRING_TO_INT16(&s1ap_TAIItem.tAI.tAC, S1AP_PAGING_IND(message_p).tac[i]); - S1AP_PAGING_IND(message_p).tai_size++; - S1AP_DEBUG("[SCTP %d] Received Paging: MCC %d, MNC %d, TAC %d\n", assoc_id, S1AP_PAGING_IND(message_p).plmn_identity[i].mcc, S1AP_PAGING_IND(message_p).plmn_identity[i].mnc, S1AP_PAGING_IND(message_p).tac[i]); + for (int i = 0; i < ie->value.choice.TAIList.list.count; i++) { + S1AP_TAIItem_t *item_p; + item_p = &(((S1AP_TAIItemIEs_t *)ie->value.choice.TAIList.list.array[i])->value.choice.TAIItem); + TBCD_TO_MCC_MNC(&(item_p->tAI.pLMNidentity), S1AP_PAGING_IND(message_p).plmn_identity[i].mcc, + S1AP_PAGING_IND(message_p).plmn_identity[i].mnc, + S1AP_PAGING_IND(message_p).plmn_identity[i].mnc_digit_length); + OCTET_STRING_TO_INT16(&(item_p->tAI.tAC), S1AP_PAGING_IND(message_p).tac[i]); + S1AP_PAGING_IND(message_p).tai_size++; + S1AP_DEBUG("[SCTP %d] Received Paging: MCC %d, MNC %d, TAC %d\n", assoc_id, + S1AP_PAGING_IND(message_p).plmn_identity[i].mcc, + S1AP_PAGING_IND(message_p).plmn_identity[i].mnc, + S1AP_PAGING_IND(message_p).tac[i]); } -#if 0 - // CSG Id(optional) List is not used - if (paging_p->presenceMask & S1AP_PAGINGIES_CSG_IDLIST_PRESENT) { - // TODO - } - /* convert pagingPriority (optional) if has value */ - if (paging_p->presenceMask & S1AP_PAGINGIES_PAGINGPRIORITY_PRESENT) { - switch(paging_p->pagingPriority) { - case S1ap_PagingPriority_priolevel1: - S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL1; - break; - case S1ap_PagingPriority_priolevel2: - S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL2; - break; - case S1ap_PagingPriority_priolevel3: - S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL3; - break; - case S1ap_PagingPriority_priolevel4: - S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL4; - break; - case S1ap_PagingPriority_priolevel5: - S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL5; - break; - case S1ap_PagingPriority_priolevel6: - S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL6; - break; - case S1ap_PagingPriority_priolevel7: - S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL7; - break; - case S1ap_PagingPriority_priolevel8: - S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL8; - break; - default: - /* invalid paging_p->pagingPriority */ - S1AP_ERROR("[SCTP %d] Received paging : pagingPriority(%ld) is invalid\n", assoc_id, paging_p->pagingPriority); - return -1; - } - } -#endif //paging parameter values S1AP_DEBUG("[SCTP %d] Received Paging parameters: ue_index_value %d cn_domain %d paging_drx %d paging_priority %d\n",assoc_id, - S1AP_PAGING_IND(message_p).ue_index_value, S1AP_PAGING_IND(message_p).cn_domain, - S1AP_PAGING_IND(message_p).paging_drx, S1AP_PAGING_IND(message_p).paging_priority); + S1AP_PAGING_IND(message_p).ue_index_value, S1AP_PAGING_IND(message_p).cn_domain, + S1AP_PAGING_IND(message_p).paging_drx, S1AP_PAGING_IND(message_p).paging_priority); S1AP_DEBUG("[SCTP %d] Received Paging parameters(ue): presenceMask %d s_tmsi.m_tmsi %d s_tmsi.mme_code %d IMSI length %d (0-5) %d%d%d%d%d%d\n",assoc_id, - S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi, - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length, - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[0], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[1], - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[3], - S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[4], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[5]); + S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi, + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length, + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[0], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[1], + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[3], + S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[4], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[5]); /* send message to RRC */ itti_send_msg_to_task(TASK_RRC_ENB, s1ap_eNB_instance->instance, message_p); - - return 0; + + return 0; } static int s1ap_eNB_handle_e_rab_modify_request(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *s1ap_message_p) { + uint32_t stream, + S1AP_S1AP_PDU_t *pdu) +{ + int i, nb_of_e_rabs_failed; + s1ap_eNB_mme_data_t *mme_desc_p = NULL; + s1ap_eNB_ue_context_t *ue_desc_p = NULL; + MessageDef *message_p = NULL; + S1AP_E_RABModifyRequest_t *container; + S1AP_E_RABModifyRequestIEs_t *ie; + S1AP_ENB_UE_S1AP_ID_t enb_ue_s1ap_id; + S1AP_MME_UE_S1AP_ID_t mme_ue_s1ap_id; - int i; + DevAssert(pdu != NULL); - s1ap_eNB_mme_data_t *mme_desc_p = NULL; - s1ap_eNB_ue_context_t *ue_desc_p = NULL; - MessageDef *message_p = NULL; - int nb_of_e_rabs_failed = 0; - - S1ap_E_RABModifyRequestIEs_t *s1ap_E_RABModifyRequest; - DevAssert(s1ap_message_p != NULL); - - s1ap_E_RABModifyRequest = &s1ap_message_p->msg.s1ap_E_RABModifyRequestIEs; + container = &pdu->choice.initiatingMessage.value.choice.E_RABModifyRequest; if ((mme_desc_p = s1ap_eNB_get_MME(NULL, assoc_id, 0)) == NULL) { S1AP_ERROR("[SCTP %d] Received E-RAB modify request for non " @@ -1213,12 +1206,21 @@ int s1ap_eNB_handle_e_rab_modify_request(uint32_t assoc_id, return -1; } + /* id-MME-UE-S1AP-ID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABModifyRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID, true); + mme_ue_s1ap_id = ie->value.choice.MME_UE_S1AP_ID; + + /* id-eNB-UE-S1AP-ID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABModifyRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID, true); + enb_ue_s1ap_id = ie->value.choice.ENB_UE_S1AP_ID; if ((ue_desc_p = s1ap_eNB_get_ue_context(mme_desc_p->s1ap_eNB_instance, - s1ap_E_RABModifyRequest->eNB_UE_S1AP_ID)) == NULL) { + enb_ue_s1ap_id)) == NULL) { S1AP_ERROR("[SCTP %d] Received E-RAB modify request for non " "existing UE context 0x%06lx\n", assoc_id, - s1ap_E_RABModifyRequest->eNB_UE_S1AP_ID); + enb_ue_s1ap_id); return -1; } @@ -1231,22 +1233,25 @@ int s1ap_eNB_handle_e_rab_modify_request(uint32_t assoc_id, ue_desc_p->rx_stream = stream; - if ( ue_desc_p->mme_ue_s1ap_id != s1ap_E_RABModifyRequest->mme_ue_s1ap_id){ + if (ue_desc_p->mme_ue_s1ap_id != mme_ue_s1ap_id) { S1AP_WARN("UE context mme_ue_s1ap_id is different form that of the message (%d != %ld)", - ue_desc_p->mme_ue_s1ap_id, s1ap_E_RABModifyRequest->mme_ue_s1ap_id); + ue_desc_p->mme_ue_s1ap_id, mme_ue_s1ap_id); message_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_E_RAB_MODIFY_RESP); - S1AP_E_RAB_MODIFY_RESP (message_p).eNB_ue_s1ap_id = s1ap_E_RABModifyRequest->eNB_UE_S1AP_ID; -// S1AP_E_RAB_MODIFY_RESP (msg_fail_p).e_rabs[S1AP_MAX_E_RAB]; - S1AP_E_RAB_MODIFY_RESP (message_p).nb_of_e_rabs = 0; + S1AP_E_RAB_MODIFY_RESP (message_p).eNB_ue_s1ap_id = enb_ue_s1ap_id; - for(nb_of_e_rabs_failed = 0; nb_of_e_rabs_failed < s1ap_E_RABModifyRequest->e_RABToBeModifiedListBearerModReq.s1ap_E_RABToBeModifiedItemBearerModReq.count; nb_of_e_rabs_failed++) { - S1AP_E_RAB_MODIFY_RESP (message_p).e_rabs_failed[nb_of_e_rabs_failed].e_rab_id = - ((S1ap_E_RABToBeModifiedItemBearerModReq_t *)s1ap_E_RABModifyRequest->e_RABToBeModifiedListBearerModReq.s1ap_E_RABToBeModifiedItemBearerModReq.array[nb_of_e_rabs_failed])->e_RAB_ID; - S1AP_E_RAB_MODIFY_RESP (message_p).e_rabs_failed[nb_of_e_rabs_failed].cause = S1AP_CAUSE_RADIO_NETWORK; - S1AP_E_RAB_MODIFY_RESP (message_p).e_rabs_failed[nb_of_e_rabs_failed].cause_value = 13;//S1ap_CauseRadioNetwork_unknown_mme_ue_s1ap_id; + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABModifyRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_E_RABToBeModifiedListBearerModReq, true); + + for(nb_of_e_rabs_failed = 0; nb_of_e_rabs_failed < ie->value.choice.E_RABToBeModifiedListBearerModReq.list.count; nb_of_e_rabs_failed++) { + S1AP_E_RABToBeModifiedItemBearerModReq_t *item_p; + item_p = &(((S1AP_E_RABToBeModifiedItemBearerModReqIEs_t *) + ie->value.choice.E_RABToBeModifiedListBearerModReq.list.array[nb_of_e_rabs_failed])->value.choice.E_RABToBeModifiedItemBearerModReq); + S1AP_E_RAB_MODIFY_RESP(message_p).e_rabs_failed[nb_of_e_rabs_failed].e_rab_id = item_p->e_RAB_ID; + S1AP_E_RAB_MODIFY_RESP(message_p).e_rabs_failed[nb_of_e_rabs_failed].cause = S1AP_Cause_PR_radioNetwork; + S1AP_E_RAB_MODIFY_RESP(message_p).e_rabs_failed[nb_of_e_rabs_failed].cause_value = S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id; } - S1AP_E_RAB_MODIFY_RESP (message_p).nb_of_e_rabs_failed = nb_of_e_rabs_failed; + S1AP_E_RAB_MODIFY_RESP(message_p).nb_of_e_rabs_failed = nb_of_e_rabs_failed; s1ap_eNB_e_rab_modify_resp(mme_desc_p->s1ap_eNB_instance->instance, &S1AP_E_RAB_MODIFY_RESP(message_p)); @@ -1259,17 +1264,18 @@ int s1ap_eNB_handle_e_rab_modify_request(uint32_t assoc_id, S1AP_E_RAB_MODIFY_REQ(message_p).ue_initial_id = ue_desc_p->ue_initial_id; - S1AP_E_RAB_MODIFY_REQ(message_p).mme_ue_s1ap_id = s1ap_E_RABModifyRequest->mme_ue_s1ap_id; - S1AP_E_RAB_MODIFY_REQ(message_p).eNB_ue_s1ap_id = s1ap_E_RABModifyRequest->eNB_UE_S1AP_ID; + S1AP_E_RAB_MODIFY_REQ(message_p).mme_ue_s1ap_id = mme_ue_s1ap_id; + S1AP_E_RAB_MODIFY_REQ(message_p).eNB_ue_s1ap_id = enb_ue_s1ap_id; + /* id-E-RABToBeModifiedListBearerModReq */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABModifyRequestIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_E_RABToBeModifiedListBearerModReq, true); S1AP_E_RAB_MODIFY_REQ(message_p).nb_e_rabs_tomodify = - s1ap_E_RABModifyRequest->e_RABToBeModifiedListBearerModReq.s1ap_E_RABToBeModifiedItemBearerModReq.count; - - for (i = 0; i < s1ap_E_RABModifyRequest->e_RABToBeModifiedListBearerModReq.s1ap_E_RABToBeModifiedItemBearerModReq.count; i++) { - S1ap_E_RABToBeModifiedItemBearerModReq_t *item_p; - - item_p = (S1ap_E_RABToBeModifiedItemBearerModReq_t *)s1ap_E_RABModifyRequest->e_RABToBeModifiedListBearerModReq.s1ap_E_RABToBeModifiedItemBearerModReq.array[i]; + ie->value.choice.E_RABToBeModifiedListBearerModReq.list.count; + for (i = 0; i < ie->value.choice.E_RABToBeModifiedListBearerModReq.list.count; i++) { + S1AP_E_RABToBeModifiedItemBearerModReq_t *item_p; + item_p = &(((S1AP_E_RABToBeModifiedItemBearerModReqIEs_t *)ie->value.choice.E_RABToBeModifiedListBearerModReq.list.array[i])->value.choice.E_RABToBeModifiedItemBearerModReq); S1AP_E_RAB_MODIFY_REQ(message_p).e_rab_modify_params[i].e_rab_id = item_p->e_RAB_ID; // check for the NAS PDU @@ -1306,26 +1312,40 @@ int s1ap_eNB_handle_e_rab_modify_request(uint32_t assoc_id, static int s1ap_eNB_handle_e_rab_release_command(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *s1ap_message_p) { - + S1AP_S1AP_PDU_t *pdu) +{ int i; - s1ap_eNB_mme_data_t *mme_desc_p = NULL; s1ap_eNB_ue_context_t *ue_desc_p = NULL; MessageDef *message_p = NULL; + S1AP_E_RABReleaseCommand_t *container; + S1AP_E_RABReleaseCommandIEs_t *ie; + S1AP_ENB_UE_S1AP_ID_t enb_ue_s1ap_id; + S1AP_MME_UE_S1AP_ID_t mme_ue_s1ap_id; + + DevAssert(pdu != NULL); + + container = &pdu->choice.initiatingMessage.value.choice.E_RABReleaseCommand; - S1ap_E_RABReleaseCommandIEs_t *s1ap_E_RABReleaseCommand; - DevAssert(s1ap_message_p != NULL); - s1ap_E_RABReleaseCommand = &s1ap_message_p->msg.s1ap_E_RABReleaseCommandIEs; - if ((mme_desc_p = s1ap_eNB_get_MME(NULL, assoc_id, 0)) == NULL) { S1AP_ERROR("[SCTP %d] Received E-RAB release command for non existing MME context\n", assoc_id); return -1; } + + /* id-MME-UE-S1AP-ID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABReleaseCommandIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID, true); + mme_ue_s1ap_id = ie->value.choice.MME_UE_S1AP_ID; + + /* id-eNB-UE-S1AP-ID */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABReleaseCommandIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID, true); + enb_ue_s1ap_id = ie->value.choice.ENB_UE_S1AP_ID; + if ((ue_desc_p = s1ap_eNB_get_ue_context(mme_desc_p->s1ap_eNB_instance, - s1ap_E_RABReleaseCommand->eNB_UE_S1AP_ID)) == NULL) { + enb_ue_s1ap_id)) == NULL) { S1AP_ERROR("[SCTP %d] Received E-RAB release command for non existing UE context 0x%06lx\n", assoc_id, - s1ap_E_RABReleaseCommand->eNB_UE_S1AP_ID); + ie->value.choice.ENB_UE_S1AP_ID); return -1; } @@ -1338,38 +1358,43 @@ int s1ap_eNB_handle_e_rab_release_command(uint32_t assoc_id, ue_desc_p->rx_stream = stream; - if ( ue_desc_p->mme_ue_s1ap_id != s1ap_E_RABReleaseCommand->mme_ue_s1ap_id){ + if (ue_desc_p->mme_ue_s1ap_id != mme_ue_s1ap_id) { S1AP_WARN("UE context mme_ue_s1ap_id is different form that of the message (%d != %ld)", - ue_desc_p->mme_ue_s1ap_id, s1ap_E_RABReleaseCommand->mme_ue_s1ap_id); + ue_desc_p->mme_ue_s1ap_id, mme_ue_s1ap_id); } S1AP_DEBUG("[SCTP %d] Received E-RAB release command for eNB_UE_S1AP_ID %ld mme_ue_s1ap_id %ld\n", - assoc_id, s1ap_E_RABReleaseCommand->eNB_UE_S1AP_ID, s1ap_E_RABReleaseCommand->mme_ue_s1ap_id); + assoc_id, enb_ue_s1ap_id, mme_ue_s1ap_id); - message_p = itti_alloc_new_message(TASK_S1AP, S1AP_E_RAB_RELEASE_COMMAND); - - S1AP_E_RAB_RELEASE_COMMAND(message_p).eNB_ue_s1ap_id = s1ap_E_RABReleaseCommand->eNB_UE_S1AP_ID; - S1AP_E_RAB_RELEASE_COMMAND(message_p).mme_ue_s1ap_id = s1ap_E_RABReleaseCommand->mme_ue_s1ap_id; - if(s1ap_E_RABReleaseCommand->nas_pdu.size > 0 ){ - S1AP_E_RAB_RELEASE_COMMAND(message_p).nas_pdu.length = s1ap_E_RABReleaseCommand->nas_pdu.size; + message_p = itti_alloc_new_message(TASK_S1AP, S1AP_E_RAB_RELEASE_COMMAND); + S1AP_E_RAB_RELEASE_COMMAND(message_p).eNB_ue_s1ap_id = enb_ue_s1ap_id; + S1AP_E_RAB_RELEASE_COMMAND(message_p).mme_ue_s1ap_id = mme_ue_s1ap_id; + /* id-NAS-PDU */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABReleaseCommandIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_NAS_PDU, false); + if(ie && ie->value.choice.NAS_PDU.size > 0) { + S1AP_E_RAB_RELEASE_COMMAND(message_p).nas_pdu.length = ie->value.choice.NAS_PDU.size; S1AP_E_RAB_RELEASE_COMMAND(message_p).nas_pdu.buffer = - malloc(sizeof(uint8_t) * s1ap_E_RABReleaseCommand->nas_pdu.size); - + malloc(sizeof(uint8_t) * ie->value.choice.NAS_PDU.size); memcpy(S1AP_E_RAB_RELEASE_COMMAND(message_p).nas_pdu.buffer, - s1ap_E_RABReleaseCommand->nas_pdu.buf, - s1ap_E_RABReleaseCommand->nas_pdu.size); + ie->value.choice.NAS_PDU.buf, + ie->value.choice.NAS_PDU.size); } else { - S1AP_E_RAB_RELEASE_COMMAND(message_p).nas_pdu.length = 0; - S1AP_E_RAB_RELEASE_COMMAND(message_p).nas_pdu.buffer = NULL; + S1AP_E_RAB_RELEASE_COMMAND(message_p).nas_pdu.length = 0; + S1AP_E_RAB_RELEASE_COMMAND(message_p).nas_pdu.buffer = NULL; } - S1AP_E_RAB_RELEASE_COMMAND(message_p).nb_e_rabs_torelease = s1ap_E_RABReleaseCommand->e_RABToBeReleasedList.s1ap_E_RABItem.count; - for(i=0; i < s1ap_E_RABReleaseCommand->e_RABToBeReleasedList.s1ap_E_RABItem.count; i++){ - S1ap_E_RABItem_t *item_p; - item_p = (S1ap_E_RABItem_t*)s1ap_E_RABReleaseCommand->e_RABToBeReleasedList.s1ap_E_RABItem.array[i]; - S1AP_E_RAB_RELEASE_COMMAND(message_p).e_rab_release_params[i].e_rab_id = item_p->e_RAB_ID; - S1AP_DEBUG("[SCTP] Received E-RAB release command for e-rab id %ld\n", item_p->e_RAB_ID); + /* id-E-RABToBeReleasedList */ + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_E_RABReleaseCommandIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_E_RABToBeReleasedList, true); + S1AP_E_RAB_RELEASE_COMMAND(message_p).nb_e_rabs_torelease = ie->value.choice.E_RABList.list.count; + + for (i = 0; i < ie->value.choice.E_RABList.list.count; i++) { + S1AP_E_RABItem_t *item_p; + item_p = &(((S1AP_E_RABItemIEs_t *)ie->value.choice.E_RABList.list.array[i])->value.choice.E_RABItem); + S1AP_E_RAB_RELEASE_COMMAND(message_p).e_rab_release_params[i].e_rab_id = item_p->e_RAB_ID; + S1AP_DEBUG("[SCTP] Received E-RAB release command for e-rab id %ld\n", item_p->e_RAB_ID); } itti_send_msg_to_task(TASK_RRC_ENB, ue_desc_p->eNB_instance->instance, message_p); diff --git a/openair3/S1AP/s1ap_eNB_itti_messaging.c b/openair3/S1AP/s1ap_eNB_itti_messaging.c index a0cdfd2dbc..f10c5bc623 100644 --- a/openair3/S1AP/s1ap_eNB_itti_messaging.c +++ b/openair3/S1AP/s1ap_eNB_itti_messaging.c @@ -56,7 +56,8 @@ void s1ap_eNB_itti_send_nas_downlink_ind(instance_t instance, s1ap_downlink_nas->ue_initial_id = ue_initial_id; s1ap_downlink_nas->eNB_ue_s1ap_id = eNB_ue_s1ap_id; - s1ap_downlink_nas->nas_pdu.buffer = nas_pdu; + s1ap_downlink_nas->nas_pdu.buffer = malloc(sizeof(uint8_t) * nas_pdu_length); + memcpy(s1ap_downlink_nas->nas_pdu.buffer, nas_pdu, nas_pdu_length); s1ap_downlink_nas->nas_pdu.length = nas_pdu_length; itti_send_msg_to_task(TASK_RRC_ENB, instance, message_p); diff --git a/openair3/S1AP/s1ap_eNB_nas_procedures.c b/openair3/S1AP/s1ap_eNB_nas_procedures.c index d6d9b52c07..f2f84de32d 100644 --- a/openair3/S1AP/s1ap_eNB_nas_procedures.c +++ b/openair3/S1AP/s1ap_eNB_nas_procedures.c @@ -21,7 +21,7 @@ /*! \file s1ap_eNB_nas_procedures.c * \brief S1AP eNb NAS procedure handler - * \author S. Roux and Navid Nikaein + * \author S. Roux and Navid Nikaein * \date 2010 - 2015 * \email: navid.nikaein@eurecom.fr * \version 1.0 @@ -41,7 +41,6 @@ #include "s1ap_eNB_itti_messaging.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_encoder.h" #include "s1ap_eNB_nnsf.h" #include "s1ap_eNB_ue_context.h" @@ -57,11 +56,9 @@ int s1ap_eNB_handle_nas_first_req( s1ap_eNB_instance_t *instance_p = NULL; struct s1ap_eNB_mme_data_s *mme_desc_p = NULL; struct s1ap_eNB_ue_context_s *ue_desc_p = NULL; - - s1ap_message message; - - S1ap_InitialUEMessageIEs_t *initial_ue_message_p = NULL; - + S1AP_S1AP_PDU_t pdu; + S1AP_InitialUEMessage_t *out; + S1AP_InitialUEMessage_IEs_t *ie; uint8_t *buffer = NULL; uint32_t length = 0; @@ -71,12 +68,12 @@ int s1ap_eNB_handle_nas_first_req( instance_p = s1ap_eNB_get_instance(instance); DevAssert(instance_p != NULL); - memset(&message, 0, sizeof(s1ap_message)); - - message.direction = S1AP_PDU_PR_initiatingMessage; - message.procedureCode = S1ap_ProcedureCode_id_initialUEMessage; - - initial_ue_message_p = &message.msg.s1ap_InitialUEMessageIEs; + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_initiatingMessage; + pdu.choice.initiatingMessage.procedureCode = S1AP_ProcedureCode_id_initialUEMessage; + pdu.choice.initiatingMessage.criticality = S1AP_Criticality_ignore; + pdu.choice.initiatingMessage.value.present = S1AP_InitiatingMessage__value_PR_InitialUEMessage; + out = &pdu.choice.initiatingMessage.value.choice.InitialUEMessage; /* Select the MME corresponding to the provided GUMMEI. */ if (s1ap_nas_first_req_p->ue_identity.presenceMask & UE_IDENTITIES_gummei) { @@ -144,63 +141,248 @@ int s1ap_eNB_handle_nas_first_req( } } while(1); - initial_ue_message_p->eNB_UE_S1AP_ID = ue_desc_p->eNB_ue_s1ap_id; - /* Prepare the NAS PDU */ - initial_ue_message_p->nas_pdu.buf = s1ap_nas_first_req_p->nas_pdu.buffer; - initial_ue_message_p->nas_pdu.size = s1ap_nas_first_req_p->nas_pdu.length; + /* mandatory */ + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = ue_desc_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - /* Set the establishment cause according to those provided by RRC */ - DevCheck(s1ap_nas_first_req_p->establishment_cause < RRC_CAUSE_LAST, - s1ap_nas_first_req_p->establishment_cause, RRC_CAUSE_LAST, 0); - initial_ue_message_p->rrC_Establishment_Cause = s1ap_nas_first_req_p->establishment_cause; - - if (s1ap_nas_first_req_p->ue_identity.presenceMask & UE_IDENTITIES_s_tmsi) { - S1AP_DEBUG("S_TMSI_PRESENT\n"); - initial_ue_message_p->presenceMask |= S1AP_INITIALUEMESSAGEIES_S_TMSI_PRESENT; - - MME_CODE_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.s_tmsi.mme_code, - &initial_ue_message_p->s_tmsi.mMEC); - M_TMSI_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.s_tmsi.m_tmsi, - &initial_ue_message_p->s_tmsi.m_TMSI); - } - - if (s1ap_nas_first_req_p->ue_identity.presenceMask & UE_IDENTITIES_gummei) { - S1AP_DEBUG("GUMMEI_ID_PRESENT\n"); - initial_ue_message_p->presenceMask |= S1AP_INITIALUEMESSAGEIES_GUMMEI_ID_PRESENT; - - MCC_MNC_TO_PLMNID( - s1ap_nas_first_req_p->ue_identity.gummei.mcc, - s1ap_nas_first_req_p->ue_identity.gummei.mnc, - s1ap_nas_first_req_p->ue_identity.gummei.mnc_len, - &initial_ue_message_p->gummei_id.pLMN_Identity); - - MME_GID_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.gummei.mme_group_id, - &initial_ue_message_p->gummei_id.mME_Group_ID); - MME_CODE_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.gummei.mme_code, - &initial_ue_message_p->gummei_id.mME_Code); - } + /* mandatory */ + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_NAS_PDU; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_NAS_PDU; +#if 1 + ie->value.choice.NAS_PDU.buf = s1ap_nas_first_req_p->nas_pdu.buffer; +#else + ie->value.choice.NAS_PDU.buf = malloc(s1ap_nas_first_req_p->nas_pdu.length); + memcpy(ie->value.choice.NAS_PDU.buf, + s1ap_nas_first_req_p->nas_pdu.buffer, + s1ap_nas_first_req_p->nas_pdu.length); +#endif + ie->value.choice.NAS_PDU.size = s1ap_nas_first_req_p->nas_pdu.length; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + /* mandatory */ + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_TAI; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_TAI; /* Assuming TAI is the TAI from the cell */ - INT16_TO_OCTET_STRING(instance_p->tac, &initial_ue_message_p->tai.tAC); + INT16_TO_OCTET_STRING(instance_p->tac, &ie->value.choice.TAI.tAC); MCC_MNC_TO_PLMNID(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length, - &initial_ue_message_p->tai.pLMNidentity); + &ie->value.choice.TAI.pLMNidentity); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + /* mandatory */ + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_EUTRAN_CGI; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_EUTRAN_CGI; /* Set the EUTRAN CGI * The cell identity is defined on 28 bits but as we use macro enb id, * we have to pad. */ -//#warning "TODO get cell id from RRC" + //#warning "TODO get cell id from RRC" MACRO_ENB_ID_TO_CELL_IDENTITY(instance_p->eNB_id, - 0, // Cell ID - &initial_ue_message_p->eutran_cgi.cell_ID); + 0, // Cell ID + &ie->value.choice.EUTRAN_CGI.cell_ID); MCC_MNC_TO_TBCD(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length, - &initial_ue_message_p->eutran_cgi.pLMNidentity); + &ie->value.choice.EUTRAN_CGI.pLMNidentity); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + /* Set the establishment cause according to those provided by RRC */ + DevCheck(s1ap_nas_first_req_p->establishment_cause < RRC_CAUSE_LAST, + s1ap_nas_first_req_p->establishment_cause, RRC_CAUSE_LAST, 0); + + /* mandatory */ + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_RRC_Establishment_Cause; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_RRC_Establishment_Cause; + ie->value.choice.RRC_Establishment_Cause = s1ap_nas_first_req_p->establishment_cause; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + /* optional */ + if (s1ap_nas_first_req_p->ue_identity.presenceMask & UE_IDENTITIES_s_tmsi) { + S1AP_DEBUG("S_TMSI_PRESENT\n"); + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_S_TMSI; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_S_TMSI; + MME_CODE_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.s_tmsi.mme_code, + &ie->value.choice.S_TMSI.mMEC); + M_TMSI_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.s_tmsi.m_tmsi, + &ie->value.choice.S_TMSI.m_TMSI); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CSG_Id; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_CSG_Id; + // ie->value.choice.CSG_Id = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (s1ap_nas_first_req_p->ue_identity.presenceMask & UE_IDENTITIES_gummei) { + S1AP_DEBUG("GUMMEI_ID_PRESENT\n"); + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_GUMMEI_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_GUMMEI; + MCC_MNC_TO_PLMNID( + s1ap_nas_first_req_p->ue_identity.gummei.mcc, + s1ap_nas_first_req_p->ue_identity.gummei.mnc, + s1ap_nas_first_req_p->ue_identity.gummei.mnc_len, + &ie->value.choice.GUMMEI.pLMN_Identity); + MME_GID_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.gummei.mme_group_id, + &ie->value.choice.GUMMEI.mME_Group_ID); + MME_CODE_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.gummei.mme_code, + &ie->value.choice.GUMMEI.mME_Code); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ +#if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CellAccessMode; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_CellAccessMode; + // ie->value.choice.CellAccessMode = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ +#if (S1AP_VERSION >= MAKE_VERSION(10, 0, 0)) + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_GW_TransportLayerAddress; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_TransportLayerAddress; + // ie->value.choice.TransportLayerAddress =; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_RelayNode_Indicator; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_RelayNode_Indicator; + // ie->value.choice.RelayNode_Indicator =; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + +#if (S1AP_VERSION >= MAKE_VERSION(11, 0, 0)) + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_GUMMEIType; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_GUMMEIType; + // ie->value.choice.GUMMEIType =; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ /* release 11 */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_Tunnel_Information_for_BBF; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_TunnelInformation; + // ie->value.choice.TunnelInformation =; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_SIPTO_L_GW_TransportLayerAddress; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_TransportLayerAddress; + // ie->value.choice.TransportLayerAddress = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_LHN_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_LHN_ID; + // ie->value.choice.LHN_ID = ue_release_req_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + +#if (S1AP_VERSION >= MAKE_VERSION(13, 0, 0)) + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_Group_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_MME_Group_ID; + // ie->value.choice.MME_Group_ID =; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_UE_Usage_Type; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_UE_Usage_Type; + // ie->value.choice.UE_Usage_Type =; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CE_mode_B_SupportIndicator; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_CE_mode_B_SupportIndicator; + // ie->value.choice.CE_mode_B_SupportIndicator = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + +#if (S1AP_VERSION >= MAKE_VERSION(14, 0, 0)) + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_DCN_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_DCN_ID; + // ie->value.choice.DCN_ID = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_InitialUEMessage_IEs_t *)calloc(1, sizeof(S1AP_InitialUEMessage_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_Coverage_Level; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialUEMessage_IEs__value_PR_Coverage_Level; + // ie->value.choice.Coverage_Level = ue_release_req_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(14, 0, 0)) */ +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(13, 0, 0)) */ +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(11, 0, 0)) */ +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(10, 0, 0)) */ +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(9, 0, 0)) */ + + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { /* Failed to encode message */ DevMessage("Failed to encode initial UE message\n"); } @@ -235,7 +417,7 @@ int s1ap_eNB_handle_nas_first_req( 0, MSC_AS_TIME_FMT" initialUEMessage initiatingMessage eNB_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - initial_ue_message_p->eNB_UE_S1AP_ID); + ue_desc_p->eNB_ue_s1ap_id); /* Send encoded message over sctp */ s1ap_eNB_itti_send_sctp_data_req(instance_p->instance, mme_desc_p->assoc_id, @@ -245,20 +427,19 @@ int s1ap_eNB_handle_nas_first_req( } //------------------------------------------------------------------------------ -int s1ap_eNB_handle_nas_downlink(const uint32_t assoc_id, - const uint32_t stream, - struct s1ap_message_s* message_p) +int s1ap_eNB_handle_nas_downlink(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu) //------------------------------------------------------------------------------ { - const S1ap_DownlinkNASTransportIEs_t *downlink_NAS_transport_p = NULL; - - s1ap_eNB_mme_data_t *mme_desc_p = NULL; - s1ap_eNB_ue_context_t *ue_desc_p = NULL; - s1ap_eNB_instance_t *s1ap_eNB_instance = NULL; - - DevAssert(message_p != NULL); - - downlink_NAS_transport_p = &message_p->msg.s1ap_DownlinkNASTransportIEs; + s1ap_eNB_mme_data_t *mme_desc_p = NULL; + s1ap_eNB_ue_context_t *ue_desc_p = NULL; + s1ap_eNB_instance_t *s1ap_eNB_instance = NULL; + S1AP_DownlinkNASTransport_t *container; + S1AP_DownlinkNASTransport_IEs_t *ie; + S1AP_ENB_UE_S1AP_ID_t enb_ue_s1ap_id; + S1AP_MME_UE_S1AP_ID_t mme_ue_s1ap_id; + DevAssert(pdu != NULL); /* UE-related procedure -> stream != 0 */ if (stream == 0) { @@ -276,18 +457,28 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t assoc_id, s1ap_eNB_instance = mme_desc_p->s1ap_eNB_instance; + /* Prepare the S1AP message to encode */ + container = &pdu->choice.initiatingMessage.value.choice.DownlinkNASTransport; + + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_DownlinkNASTransport_IEs_t, ie, container, + S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID, true); + mme_ue_s1ap_id = ie->value.choice.MME_UE_S1AP_ID; + + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_DownlinkNASTransport_IEs_t, ie, container, + S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID, true); + enb_ue_s1ap_id = ie->value.choice.ENB_UE_S1AP_ID; + if ((ue_desc_p = s1ap_eNB_get_ue_context(s1ap_eNB_instance, - downlink_NAS_transport_p->eNB_UE_S1AP_ID)) == NULL) { + enb_ue_s1ap_id)) == NULL) { MSC_LOG_RX_DISCARDED_MESSAGE( MSC_S1AP_ENB, MSC_S1AP_MME, - (const char *)downlink_NAS_transport_p, - sizeof(S1ap_DownlinkNASTransportIEs_t), + (const char *)NULL, + NULL, MSC_AS_TIME_FMT" downlinkNASTransport eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - downlink_NAS_transport_p->eNB_UE_S1AP_ID, - downlink_NAS_transport_p->mme_ue_s1ap_id); - + enb_ue_s1ap_id, + mme_ue_s1ap_id); /* TODO: fix this log - the original version is suspicious (twice downlink_NAS_transport_p->eNB_UE_S1AP_ID?) */ /*S1AP_ERROR("[SCTP %d] Received NAS downlink message for non existing UE context eNB_UE_S1AP_ID: 0x%"PRIx32" %u\n", assoc_id, @@ -295,12 +486,12 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t assoc_id, downlink_NAS_transport_p->eNB_UE_S1AP_ID);*/ S1AP_ERROR("[SCTP %d] Received NAS downlink message for non existing UE context eNB_UE_S1AP_ID: 0x%lx\n", assoc_id, - downlink_NAS_transport_p->eNB_UE_S1AP_ID); + enb_ue_s1ap_id); return -1; } if (0 == ue_desc_p->rx_stream) { - ue_desc_p->rx_stream = stream; + ue_desc_p->rx_stream = stream; } else if (stream != ue_desc_p->rx_stream) { S1AP_ERROR("[SCTP %d] Received UE-related procedure on stream %u, expecting %u\n", assoc_id, stream, ue_desc_p->rx_stream); @@ -311,13 +502,13 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t assoc_id, * UE s1ap id. */ if (ue_desc_p->mme_ue_s1ap_id == 0) { - ue_desc_p->mme_ue_s1ap_id = downlink_NAS_transport_p->mme_ue_s1ap_id; + ue_desc_p->mme_ue_s1ap_id = mme_ue_s1ap_id; } else { /* We already have a mme ue s1ap id check the received is the same */ - if (ue_desc_p->mme_ue_s1ap_id != downlink_NAS_transport_p->mme_ue_s1ap_id) { + if (ue_desc_p->mme_ue_s1ap_id != mme_ue_s1ap_id) { S1AP_ERROR("[SCTP %d] Mismatch in MME UE S1AP ID (0x%lx != 0x%"PRIx32"\n", assoc_id, - downlink_NAS_transport_p->mme_ue_s1ap_id, + mme_ue_s1ap_id, ue_desc_p->mme_ue_s1ap_id ); return -1; @@ -327,19 +518,21 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t assoc_id, MSC_LOG_RX_MESSAGE( MSC_S1AP_ENB, MSC_S1AP_MME, - (const char *)downlink_NAS_transport_p, - sizeof(S1ap_DownlinkNASTransportIEs_t), + (const char *)NULL, + NULL, MSC_AS_TIME_FMT" downlinkNASTransport eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - downlink_NAS_transport_p->eNB_UE_S1AP_ID, - downlink_NAS_transport_p->mme_ue_s1ap_id); + enb_ue_s1ap_id, + mme_ue_s1ap_id); + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_DownlinkNASTransport_IEs_t, ie, container, + S1AP_ProtocolIE_ID_id_NAS_PDU, true); /* Forward the NAS PDU to RRC */ s1ap_eNB_itti_send_nas_downlink_ind(s1ap_eNB_instance->instance, ue_desc_p->ue_initial_id, ue_desc_p->eNB_ue_s1ap_id, - downlink_NAS_transport_p->nas_pdu.buf, - downlink_NAS_transport_p->nas_pdu.size); + ie->value.choice.NAS_PDU.buf, + ie->value.choice.NAS_PDU.size); // LG: Why set to 0 ?? //ue_desc_p->ue_initial_id = 0; @@ -351,14 +544,13 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t assoc_id, int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_p) //------------------------------------------------------------------------------ { - struct s1ap_eNB_ue_context_s *ue_context_p; - s1ap_eNB_instance_t *s1ap_eNB_instance_p; - S1ap_UplinkNASTransportIEs_t *uplink_NAS_transport_p; - - s1ap_message message; - + struct s1ap_eNB_ue_context_s *ue_context_p; + s1ap_eNB_instance_t *s1ap_eNB_instance_p; + S1AP_S1AP_PDU_t pdu; + S1AP_UplinkNASTransport_t *out; + S1AP_UplinkNASTransport_IEs_t *ie; uint8_t *buffer; - uint32_t length; + uint32_t length; DevAssert(s1ap_uplink_nas_p != NULL); @@ -385,40 +577,102 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_ } /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_initiatingMessage; + pdu.choice.initiatingMessage.procedureCode = S1AP_ProcedureCode_id_uplinkNASTransport; + pdu.choice.initiatingMessage.criticality = S1AP_Criticality_ignore; + pdu.choice.initiatingMessage.value.present = S1AP_InitiatingMessage__value_PR_UplinkNASTransport; + out = &pdu.choice.initiatingMessage.value.choice.UplinkNASTransport; - message.direction = S1AP_PDU_PR_initiatingMessage; - message.procedureCode = S1ap_ProcedureCode_id_uplinkNASTransport; + /* mandatory */ + ie = (S1AP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(S1AP_UplinkNASTransport_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - uplink_NAS_transport_p = &message.msg.s1ap_UplinkNASTransportIEs; + /* mandatory */ + ie = (S1AP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(S1AP_UplinkNASTransport_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = ue_context_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - uplink_NAS_transport_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; - uplink_NAS_transport_p->eNB_UE_S1AP_ID = ue_context_p->eNB_ue_s1ap_id; - - uplink_NAS_transport_p->nas_pdu.buf = s1ap_uplink_nas_p->nas_pdu.buffer; - uplink_NAS_transport_p->nas_pdu.size = s1ap_uplink_nas_p->nas_pdu.length; + /* mandatory */ + ie = (S1AP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(S1AP_UplinkNASTransport_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_NAS_PDU; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_NAS_PDU; + ie->value.choice.NAS_PDU.buf = s1ap_uplink_nas_p->nas_pdu.buffer; + ie->value.choice.NAS_PDU.size = s1ap_uplink_nas_p->nas_pdu.length; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + /* mandatory */ + ie = (S1AP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(S1AP_UplinkNASTransport_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_EUTRAN_CGI; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_EUTRAN_CGI; MCC_MNC_TO_PLMNID( s1ap_eNB_instance_p->mcc, s1ap_eNB_instance_p->mnc, s1ap_eNB_instance_p->mnc_digit_length, - &uplink_NAS_transport_p->eutran_cgi.pLMNidentity); - -//#warning "TODO get cell id from RRC" + &ie->value.choice.EUTRAN_CGI.pLMNidentity); + //#warning "TODO get cell id from RRC" MACRO_ENB_ID_TO_CELL_IDENTITY(s1ap_eNB_instance_p->eNB_id, - 0, - &uplink_NAS_transport_p->eutran_cgi.cell_ID); + 0, + &ie->value.choice.EUTRAN_CGI.cell_ID); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - /* MCC/MNC should be repeated in TAI and EUTRAN CGI */ + /* mandatory */ + ie = (S1AP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(S1AP_UplinkNASTransport_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_TAI; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_TAI; MCC_MNC_TO_PLMNID( s1ap_eNB_instance_p->mcc, s1ap_eNB_instance_p->mnc, s1ap_eNB_instance_p->mnc_digit_length, - &uplink_NAS_transport_p->tai.pLMNidentity); + &ie->value.choice.TAI.pLMNidentity); + TAC_TO_ASN1(s1ap_eNB_instance_p->tac, &ie->value.choice.TAI.tAC); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - TAC_TO_ASN1(s1ap_eNB_instance_p->tac, &uplink_NAS_transport_p->tai.tAC); + /* optional */ +#if (S1AP_VERSION >= MAKE_VERSION(10, 0, 0)) + if (0) { + ie = (S1AP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(S1AP_UplinkNASTransport_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_GW_TransportLayerAddress; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_TransportLayerAddress; + // ie->value.choice.TransportLayerAddress = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + /* optional */ +#if (S1AP_VERSION >= MAKE_VERSION(14, 0, 0)) + if (0) { + ie = (S1AP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(S1AP_UplinkNASTransport_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_SIPTO_L_GW_TransportLayerAddress; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_TransportLayerAddress; + // ie->value.choice.TransportLayerAddress = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_UplinkNASTransport_IEs_t *)calloc(1, sizeof(S1AP_UplinkNASTransport_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_LHN_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UplinkNASTransport_IEs__value_PR_LHN_ID; + // ie->value.choice.LHN_ID =; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(14, 0, 0)) */ +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(10, 0, 0)) */ + + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { S1AP_ERROR("Failed to encode uplink NAS transport\n"); /* Encode procedure has failed... */ return -1; @@ -431,9 +685,8 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_ 0, MSC_AS_TIME_FMT" uplinkNASTransport initiatingMessage eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - uplink_NAS_transport_p->eNB_UE_S1AP_ID, - uplink_NAS_transport_p->mme_ue_s1ap_id); - + ue_context_p->eNB_ue_s1ap_id, + ue_context_p->mme_ue_s1ap_id); /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, @@ -445,19 +698,17 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_ //------------------------------------------------------------------------------ -void s1ap_eNB_nas_non_delivery_ind(instance_t instance, - s1ap_nas_non_delivery_ind_t *s1ap_nas_non_delivery_ind) +int s1ap_eNB_nas_non_delivery_ind(instance_t instance, + s1ap_nas_non_delivery_ind_t *s1ap_nas_non_delivery_ind) //------------------------------------------------------------------------------ { - struct s1ap_eNB_ue_context_s *ue_context_p; - s1ap_eNB_instance_t *s1ap_eNB_instance_p; - - S1ap_NASNonDeliveryIndication_IEs_t *nas_non_delivery_p; - - s1ap_message message; - + struct s1ap_eNB_ue_context_s *ue_context_p; + s1ap_eNB_instance_t *s1ap_eNB_instance_p; + S1AP_S1AP_PDU_t pdu; + S1AP_NASNonDeliveryIndication_t *out; + S1AP_NASNonDeliveryIndication_IEs_t *ie; uint8_t *buffer; - uint32_t length; + uint32_t length; DevAssert(s1ap_nas_non_delivery_ind != NULL); @@ -473,50 +724,77 @@ void s1ap_eNB_nas_non_delivery_ind(instance_t instance, MSC_S1AP_ENB, MSC_AS_TIME_FMT" Sent of NAS_NON_DELIVERY_IND to MME failed, no context for eNB_ue_s1ap_id %06x", s1ap_nas_non_delivery_ind->eNB_ue_s1ap_id); - return; + return -1; } /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_initiatingMessage; + pdu.choice.initiatingMessage.procedureCode = S1AP_ProcedureCode_id_NASNonDeliveryIndication; + pdu.choice.initiatingMessage.criticality = S1AP_Criticality_ignore; + pdu.choice.initiatingMessage.value.present = S1AP_InitiatingMessage__value_PR_NASNonDeliveryIndication; + out = &pdu.choice.initiatingMessage.value.choice.NASNonDeliveryIndication; - message.direction = S1AP_PDU_PR_initiatingMessage; - message.procedureCode = S1ap_ProcedureCode_id_NASNonDeliveryIndication; + /* mandatory */ + ie = (S1AP_NASNonDeliveryIndication_IEs_t *)calloc(1, sizeof(S1AP_NASNonDeliveryIndication_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_NASNonDeliveryIndication_IEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - nas_non_delivery_p = &message.msg.s1ap_NASNonDeliveryIndication_IEs; - nas_non_delivery_p->eNB_UE_S1AP_ID = ue_context_p->eNB_ue_s1ap_id; - nas_non_delivery_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; - nas_non_delivery_p->nas_pdu.buf = s1ap_nas_non_delivery_ind->nas_pdu.buffer; - nas_non_delivery_p->nas_pdu.size = s1ap_nas_non_delivery_ind->nas_pdu.length; + /* mandatory */ + ie = (S1AP_NASNonDeliveryIndication_IEs_t *)calloc(1, sizeof(S1AP_NASNonDeliveryIndication_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_NASNonDeliveryIndication_IEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = ue_context_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + /* mandatory */ + ie = (S1AP_NASNonDeliveryIndication_IEs_t *)calloc(1, sizeof(S1AP_NASNonDeliveryIndication_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_NAS_PDU; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_NASNonDeliveryIndication_IEs__value_PR_NAS_PDU; + ie->value.choice.NAS_PDU.buf = s1ap_nas_non_delivery_ind->nas_pdu.buffer; + ie->value.choice.NAS_PDU.size = s1ap_nas_non_delivery_ind->nas_pdu.length; + + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + /* mandatory */ + ie = (S1AP_NASNonDeliveryIndication_IEs_t *)calloc(1, sizeof(S1AP_NASNonDeliveryIndication_IEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_Cause; + ie->criticality = S1AP_Criticality_ignore; /* Send a dummy cause */ - nas_non_delivery_p->cause.present = S1ap_Cause_PR_radioNetwork; - nas_non_delivery_p->cause.choice.radioNetwork = S1ap_CauseRadioNetwork_radio_connection_with_ue_lost; + ie->value.present = S1AP_NASNonDeliveryIndication_IEs__value_PR_Cause; + ie->value.choice.Cause.present = S1AP_Cause_PR_radioNetwork; + ie->value.choice.Cause.choice.radioNetwork = S1AP_CauseRadioNetwork_radio_connection_with_ue_lost; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { S1AP_ERROR("Failed to encode NAS NON delivery indication\n"); /* Encode procedure has failed... */ MSC_LOG_EVENT( MSC_S1AP_ENB, MSC_AS_TIME_FMT" Sent of NAS_NON_DELIVERY_IND to MME failed (encoding)"); - return; + return -1; } - MSC_LOG_TX_MESSAGE( MSC_S1AP_ENB, MSC_S1AP_MME, - (const char *)s1ap_nas_non_delivery_ind, - sizeof(s1ap_nas_non_delivery_ind_t), + (const char *)buffer, + length, MSC_AS_TIME_FMT" NASNonDeliveryIndication initiatingMessage eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - nas_non_delivery_p->eNB_UE_S1AP_ID, - nas_non_delivery_p->mme_ue_s1ap_id); - + ue_context_p->eNB_ue_s1ap_id, + ue_context_p->mme_ue_s1ap_id); /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, length, ue_context_p->tx_stream); + return 0; } //------------------------------------------------------------------------------ @@ -524,16 +802,13 @@ int s1ap_eNB_initial_ctxt_resp( instance_t instance, s1ap_initial_context_setup_resp_t *initial_ctxt_resp_p) //------------------------------------------------------------------------------ { - s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; - struct s1ap_eNB_ue_context_s *ue_context_p = NULL; - - S1ap_InitialContextSetupResponseIEs_t *initial_ies_p = NULL; - - s1ap_message message; - - uint8_t *buffer = NULL; + s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; + struct s1ap_eNB_ue_context_s *ue_context_p = NULL; + S1AP_S1AP_PDU_t pdu; + S1AP_InitialContextSetupResponse_t *out; + S1AP_InitialContextSetupResponseIEs_t *ie; + uint8_t *buffer = NULL; uint32_t length; - int ret = -1; int i; /* Retrieve the S1AP eNB instance associated with Mod_id */ @@ -562,40 +837,119 @@ int s1ap_eNB_initial_ctxt_resp( } /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_successfulOutcome; + pdu.choice.successfulOutcome.procedureCode = S1AP_ProcedureCode_id_InitialContextSetup; + pdu.choice.successfulOutcome.criticality = S1AP_Criticality_reject; + pdu.choice.successfulOutcome.value.present = S1AP_SuccessfulOutcome__value_PR_InitialContextSetupResponse; + out = &pdu.choice.successfulOutcome.value.choice.InitialContextSetupResponse; - message.direction = S1AP_PDU_PR_successfulOutcome; - message.procedureCode = S1ap_ProcedureCode_id_InitialContextSetup; + /* mandatory */ + ie = (S1AP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(S1AP_InitialContextSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialContextSetupResponseIEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - initial_ies_p = &message.msg.s1ap_InitialContextSetupResponseIEs; + /* mandatory */ + ie = (S1AP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(S1AP_InitialContextSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialContextSetupResponseIEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = initial_ctxt_resp_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - initial_ies_p->eNB_UE_S1AP_ID = initial_ctxt_resp_p->eNB_ue_s1ap_id; - initial_ies_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; + /* mandatory */ + ie = (S1AP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(S1AP_InitialContextSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_RABSetupListCtxtSURes; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialContextSetupResponseIEs__value_PR_E_RABSetupListCtxtSURes; for (i = 0; i < initial_ctxt_resp_p->nb_of_e_rabs; i++) { - S1ap_E_RABSetupItemCtxtSURes_t *new_item; - - new_item = calloc(1, sizeof(S1ap_E_RABSetupItemCtxtSURes_t)); - - new_item->e_RAB_ID = initial_ctxt_resp_p->e_rabs[i].e_rab_id; - GTP_TEID_TO_ASN1(initial_ctxt_resp_p->e_rabs[i].gtp_teid, &new_item->gTP_TEID); - new_item->transportLayerAddress.buf = initial_ctxt_resp_p->e_rabs[i].eNB_addr.buffer; - new_item->transportLayerAddress.size = initial_ctxt_resp_p->e_rabs[i].eNB_addr.length; - new_item->transportLayerAddress.bits_unused = 0; - - S1AP_DEBUG("initial_ctxt_resp_p: e_rab ID %ld, enb_addr %d.%d.%d.%d, SIZE %d \n", - new_item->e_RAB_ID, - new_item->transportLayerAddress.buf[0], - new_item->transportLayerAddress.buf[1], - new_item->transportLayerAddress.buf[2], - new_item->transportLayerAddress.buf[3], - new_item->transportLayerAddress.size); - - ASN_SEQUENCE_ADD(&initial_ies_p->e_RABSetupListCtxtSURes.s1ap_E_RABSetupItemCtxtSURes, - new_item); + S1AP_E_RABSetupItemCtxtSUResIEs_t *item; + /* mandatory */ + item = (S1AP_E_RABSetupItemCtxtSUResIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupItemCtxtSUResIEs_t)); + item->id = S1AP_ProtocolIE_ID_id_E_RABSetupItemCtxtSURes; + item->criticality = S1AP_Criticality_ignore; + item->value.present = S1AP_E_RABSetupItemCtxtSUResIEs__value_PR_E_RABSetupItemCtxtSURes; + item->value.choice.E_RABSetupItemCtxtSURes.e_RAB_ID = initial_ctxt_resp_p->e_rabs[i].e_rab_id; + GTP_TEID_TO_ASN1(initial_ctxt_resp_p->e_rabs[i].gtp_teid, &item->value.choice.E_RABSetupItemCtxtSURes.gTP_TEID); + item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.buf = malloc(initial_ctxt_resp_p->e_rabs[i].eNB_addr.length); + memcpy(item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.buf, + initial_ctxt_resp_p->e_rabs[i].eNB_addr.buffer, + initial_ctxt_resp_p->e_rabs[i].eNB_addr.length); + item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.size = initial_ctxt_resp_p->e_rabs[i].eNB_addr.length; + item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.bits_unused = 0; + S1AP_DEBUG("initial_ctxt_resp_p: e_rab ID %ld, enb_addr %d.%d.%d.%d, SIZE %ld \n", + item->value.choice.E_RABSetupItemCtxtSURes.e_RAB_ID, + item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.buf[0], + item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.buf[1], + item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.buf[2], + item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.buf[3], + item->value.choice.E_RABSetupItemCtxtSURes.transportLayerAddress.size); + ASN_SEQUENCE_ADD(&ie->value.choice.E_RABSetupListCtxtSURes.list, item); } - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + /* optional */ + if (initial_ctxt_resp_p->nb_of_e_rabs_failed) { + ie = (S1AP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(S1AP_InitialContextSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToSetupListCtxtSURes; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialContextSetupResponseIEs__value_PR_E_RABList; + + for (i = 0; i < initial_ctxt_resp_p->nb_of_e_rabs_failed; i++) { + S1AP_E_RABItemIEs_t *item; + /* mandatory */ + item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t)); + item->id = S1AP_ProtocolIE_ID_id_E_RABItem; + item->criticality = S1AP_Criticality_ignore; + item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem; + item->value.choice.E_RABItem.e_RAB_ID = initial_ctxt_resp_p->e_rabs_failed[i].e_rab_id; + item->value.choice.E_RABItem.cause.present = initial_ctxt_resp_p->e_rabs_failed[i].cause; + + switch(item->value.choice.E_RABItem.cause.present) + { + case S1AP_Cause_PR_radioNetwork: + item->value.choice.E_RABItem.cause.choice.radioNetwork = initial_ctxt_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_transport: + item->value.choice.E_RABItem.cause.choice.transport = initial_ctxt_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_nas: + item->value.choice.E_RABItem.cause.choice.nas = initial_ctxt_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_protocol: + item->value.choice.E_RABItem.cause.choice.protocol = initial_ctxt_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_misc: + item->value.choice.E_RABItem.cause.choice.misc = initial_ctxt_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_NOTHING: + default: + break; + } + + S1AP_DEBUG("initial context setup response: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID); + ASN_SEQUENCE_ADD(&ie->value.choice.E_RABList.list, item); + } + + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(S1AP_InitialContextSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CriticalityDiagnostics; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_InitialContextSetupResponseIEs__value_PR_CriticalityDiagnostics; + // ie->value.choice.CriticalityDiagnostics =; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { S1AP_ERROR("Failed to encode uplink NAS transport\n"); /* Encode procedure has failed... */ return -1; @@ -608,15 +962,15 @@ int s1ap_eNB_initial_ctxt_resp( length, MSC_AS_TIME_FMT" InitialContextSetup successfulOutcome eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - initial_ies_p->eNB_UE_S1AP_ID, - initial_ies_p->mme_ue_s1ap_id); + initial_ctxt_resp_p->eNB_ue_s1ap_id, + ue_context_p->mme_ue_s1ap_id); /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, length, ue_context_p->tx_stream); - return ret; + return 0; } //------------------------------------------------------------------------------ @@ -626,14 +980,11 @@ int s1ap_eNB_ue_capabilities(instance_t instance, { s1ap_eNB_instance_t *s1ap_eNB_instance_p; struct s1ap_eNB_ue_context_s *ue_context_p; - - S1ap_UECapabilityInfoIndicationIEs_t *ue_cap_info_ind_ies_p; - - s1ap_message message; - + S1AP_S1AP_PDU_t pdu; + S1AP_UECapabilityInfoIndication_t *out; + S1AP_UECapabilityInfoIndicationIEs_t *ie; uint8_t *buffer; uint32_t length; - int ret = -1; /* Retrieve the S1AP eNB instance associated with Mod_id */ s1ap_eNB_instance_p = s1ap_eNB_get_instance(instance); @@ -661,27 +1012,56 @@ int s1ap_eNB_ue_capabilities(instance_t instance, } /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_initiatingMessage; + pdu.choice.initiatingMessage.procedureCode = S1AP_ProcedureCode_id_UECapabilityInfoIndication; + pdu.choice.initiatingMessage.criticality = S1AP_Criticality_ignore; + pdu.choice.initiatingMessage.value.present = S1AP_InitiatingMessage__value_PR_UECapabilityInfoIndication; + out = &pdu.choice.initiatingMessage.value.choice.UECapabilityInfoIndication; - message.direction = S1AP_PDU_PR_initiatingMessage; - message.procedureCode = S1ap_ProcedureCode_id_UECapabilityInfoIndication; + /* mandatory */ + ie = (S1AP_UECapabilityInfoIndicationIEs_t *)calloc(1, sizeof(S1AP_UECapabilityInfoIndicationIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UECapabilityInfoIndicationIEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - ue_cap_info_ind_ies_p = &message.msg.s1ap_UECapabilityInfoIndicationIEs; + /* mandatory */ + ie = (S1AP_UECapabilityInfoIndicationIEs_t *)calloc(1, sizeof(S1AP_UECapabilityInfoIndicationIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UECapabilityInfoIndicationIEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = ue_cap_info_ind_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - ue_cap_info_ind_ies_p->ueRadioCapability.buf = ue_cap_info_ind_p->ue_radio_cap.buffer; - ue_cap_info_ind_ies_p->ueRadioCapability.size = ue_cap_info_ind_p->ue_radio_cap.length; + /* mandatory */ + ie = (S1AP_UECapabilityInfoIndicationIEs_t *)calloc(1, sizeof(S1AP_UECapabilityInfoIndicationIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_UERadioCapability; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_UECapabilityInfoIndicationIEs__value_PR_UERadioCapability; + ie->value.choice.UERadioCapability.buf = ue_cap_info_ind_p->ue_radio_cap.buffer; + ie->value.choice.UERadioCapability.size = ue_cap_info_ind_p->ue_radio_cap.length; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - ue_cap_info_ind_ies_p->eNB_UE_S1AP_ID = ue_cap_info_ind_p->eNB_ue_s1ap_id; - ue_cap_info_ind_ies_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; + /* optional */ +#if (S1AP_VERSION >= MAKE_VERSION(12, 0, 0)) + if (0) { + ie = (S1AP_UECapabilityInfoIndicationIEs_t *)calloc(1, sizeof(S1AP_UECapabilityInfoIndicationIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_UERadioCapabilityForPaging; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_UECapabilityInfoIndicationIEs__value_PR_UERadioCapabilityForPaging; + // ie->value.choice.UERadioCapabilityForPaging = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(14, 0, 0)) */ - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { /* Encode procedure has failed... */ S1AP_ERROR("Failed to encode UE capabilities indication\n"); return -1; } - free(ue_cap_info_ind_p->ue_radio_cap.buffer); - MSC_LOG_TX_MESSAGE( MSC_S1AP_ENB, MSC_S1AP_MME, @@ -689,32 +1069,29 @@ int s1ap_eNB_ue_capabilities(instance_t instance, length, MSC_AS_TIME_FMT" UECapabilityInfoIndication initiatingMessage eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - ue_cap_info_ind_ies_p->eNB_UE_S1AP_ID, - ue_cap_info_ind_ies_p->mme_ue_s1ap_id); + ue_cap_info_ind_p->eNB_ue_s1ap_id, + ue_context_p->mme_ue_s1ap_id); /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, length, ue_context_p->tx_stream); - return ret; + return 0; } //------------------------------------------------------------------------------ -int s1ap_eNB_e_rab_setup_resp(instance_t instance, - s1ap_e_rab_setup_resp_t *e_rab_setup_resp_p) +int s1ap_eNB_e_rab_setup_resp(instance_t instance, + s1ap_e_rab_setup_resp_t *e_rab_setup_resp_p) //------------------------------------------------------------------------------ { s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; struct s1ap_eNB_ue_context_s *ue_context_p = NULL; - - S1ap_E_RABSetupResponseIEs_t *initial_ies_p = NULL; - - s1ap_message message; - + S1AP_S1AP_PDU_t pdu; + S1AP_E_RABSetupResponse_t *out; + S1AP_E_RABSetupResponseIEs_t *ie; uint8_t *buffer = NULL; uint32_t length; - int ret = -1; int i; /* Retrieve the S1AP eNB instance associated with Mod_id */ @@ -724,7 +1101,7 @@ int s1ap_eNB_e_rab_setup_resp(instance_t instance, DevAssert(s1ap_eNB_instance_p != NULL); if ((ue_context_p = s1ap_eNB_get_ue_context(s1ap_eNB_instance_p, - e_rab_setup_resp_p->eNB_ue_s1ap_id)) == NULL) { + e_rab_setup_resp_p->eNB_ue_s1ap_id)) == NULL) { /* The context for this eNB ue s1ap id doesn't exist in the map of eNB UEs */ S1AP_WARN("Failed to find ue context associated with eNB ue s1ap id: 0x%06x\n", e_rab_setup_resp_p->eNB_ue_s1ap_id); @@ -741,85 +1118,135 @@ int s1ap_eNB_e_rab_setup_resp(instance_t instance, e_rab_setup_resp_p->eNB_ue_s1ap_id, ue_context_p->ue_state); return -1; } - + /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_successfulOutcome; + pdu.choice.successfulOutcome.procedureCode = S1AP_ProcedureCode_id_E_RABModify; + pdu.choice.successfulOutcome.criticality = S1AP_Criticality_reject; + pdu.choice.successfulOutcome.value.present = S1AP_SuccessfulOutcome__value_PR_E_RABSetupResponse; + out = &pdu.choice.successfulOutcome.value.choice.E_RABSetupResponse; - message.direction = S1AP_PDU_PR_successfulOutcome; - message.procedureCode = S1ap_ProcedureCode_id_E_RABSetup; - message.criticality = S1ap_Criticality_reject; + /* mandatory */ + ie = (S1AP_E_RABSetupResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABSetupResponseIEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - initial_ies_p = &message.msg.s1ap_E_RABSetupResponseIEs; - - initial_ies_p->eNB_UE_S1AP_ID = e_rab_setup_resp_p->eNB_ue_s1ap_id; - initial_ies_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; - - if ( e_rab_setup_resp_p->nb_of_e_rabs >= 1 ) - initial_ies_p->presenceMask |= S1AP_E_RABSETUPRESPONSEIES_E_RABSETUPLISTBEARERSURES_PRESENT; - - for (i = 0; i < e_rab_setup_resp_p->nb_of_e_rabs; i++) { - S1ap_E_RABSetupItemBearerSURes_t *new_item; + /* mandatory */ + ie = (S1AP_E_RABSetupResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABSetupResponseIEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = e_rab_setup_resp_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - new_item = calloc(1, sizeof(S1ap_E_RABSetupItemBearerSURes_t)); + /* optional */ + if (e_rab_setup_resp_p->nb_of_e_rabs > 0) { + ie = (S1AP_E_RABSetupResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_RABSetupListBearerSURes; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABSetupResponseIEs__value_PR_E_RABSetupListBearerSURes; - new_item->e_RAB_ID = e_rab_setup_resp_p->e_rabs[i].e_rab_id; - GTP_TEID_TO_ASN1(e_rab_setup_resp_p->e_rabs[i].gtp_teid, &new_item->gTP_TEID); - - /* - new_item->transportLayerAddress.buf = MALLOC(e_rab_setup_resp_p->e_rabs[i].eNB_addr.length); - memcpy (new_item->transportLayerAddress.buf, - e_rab_setup_resp_p->e_rabs[i].eNB_addr.buffer, - e_rab_setup_resp_p->e_rabs[i].eNB_addr.length); - - */ - /* - new_item->transportLayerAddress.buf[0] = e_rab_setup_resp_p->e_rabs[i].eNB_addr.buffer[0]; - new_item->transportLayerAddress.buf[1] = e_rab_setup_resp_p->e_rabs[i].eNB_addr.buffer[1]; - new_item->transportLayerAddress.buf[2] = e_rab_setup_resp_p->e_rabs[i].eNB_addr.buffer[2]; - new_item->transportLayerAddress.buf[3] = e_rab_setup_resp_p->e_rabs[i].eNB_addr.buffer[3]; - */ - new_item->transportLayerAddress.buf = e_rab_setup_resp_p->e_rabs[i].eNB_addr.buffer; - new_item->transportLayerAddress.size = e_rab_setup_resp_p->e_rabs[i].eNB_addr.length; - new_item->transportLayerAddress.bits_unused = 0; - - S1AP_DEBUG("e_rab_setup_resp: e_rab ID %ld, teid %u, enb_addr %d.%d.%d.%d, SIZE %d\n", - new_item->e_RAB_ID, - e_rab_setup_resp_p->e_rabs[i].gtp_teid, - new_item->transportLayerAddress.buf[0], - new_item->transportLayerAddress.buf[1], - new_item->transportLayerAddress.buf[2], - new_item->transportLayerAddress.buf[3], - new_item->transportLayerAddress.size); - - S1ap_IE_t *ie = s1ap_new_ie(S1ap_ProtocolIE_ID_id_E_RABSetupItemBearerSURes, - S1ap_Criticality_ignore, - &asn_DEF_S1ap_E_RABSetupItemBearerSURes, - new_item); - /* - S1ap_IE_t *ie = s1ap_new_ie(S1ap_ProtocolIE_ID_id_E_RABSetupListBearerSURes, - S1ap_Criticality_ignore, - &asn_DEF_S1ap_E_RABSetupListBearerSURes, - new_item); - */ - ASN_SEQUENCE_ADD(&initial_ies_p->e_RABSetupListBearerSURes.s1ap_E_RABSetupItemBearerSURes, - ie); + for (i = 0; i < e_rab_setup_resp_p->nb_of_e_rabs; i++) { + S1AP_E_RABSetupItemBearerSUResIEs_t *item; + /* mandatory */ + item = (S1AP_E_RABSetupItemBearerSUResIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupItemBearerSUResIEs_t)); + item->id = S1AP_ProtocolIE_ID_id_E_RABSetupItemBearerSURes; + item->criticality = S1AP_Criticality_ignore; + item->value.present = S1AP_E_RABSetupItemBearerSUResIEs__value_PR_E_RABSetupItemBearerSURes; + item->value.choice.E_RABSetupItemBearerSURes.e_RAB_ID = e_rab_setup_resp_p->e_rabs[i].e_rab_id; + GTP_TEID_TO_ASN1(e_rab_setup_resp_p->e_rabs[i].gtp_teid, &item->value.choice.E_RABSetupItemBearerSURes.gTP_TEID); + item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.buf = malloc(e_rab_setup_resp_p->e_rabs[i].eNB_addr.length); + memcpy(item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.buf, + e_rab_setup_resp_p->e_rabs[i].eNB_addr.buffer, + e_rab_setup_resp_p->e_rabs[i].eNB_addr.length); + item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.size = e_rab_setup_resp_p->e_rabs[i].eNB_addr.length; + item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.bits_unused = 0; + S1AP_DEBUG("e_rab_setup_resp: e_rab ID %ld, teid %u, enb_addr %d.%d.%d.%d, SIZE %ld\n", + item->value.choice.E_RABSetupItemBearerSURes.e_RAB_ID, + e_rab_setup_resp_p->e_rabs[i].gtp_teid, + item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.buf[0], + item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.buf[1], + item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.buf[2], + item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.buf[3], + item->value.choice.E_RABSetupItemBearerSURes.transportLayerAddress.size); + ASN_SEQUENCE_ADD(&ie->value.choice.E_RABSetupListBearerSURes.list, item); + } + + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); } - - /* S1ap_E_RABSetupListBearerSURes_t e_RABSetupListBearerSURes; - memset(&e_RABSetupListBearerSURes, 0, sizeof(S1ap_E_RABSetupListBearerSURes_t)); + + /* optional */ + if (e_rab_setup_resp_p->nb_of_e_rabs_failed > 0) { + ie = (S1AP_E_RABSetupResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToSetupListBearerSURes; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABSetupResponseIEs__value_PR_E_RABList; + + for (i = 0; i < e_rab_setup_resp_p->nb_of_e_rabs_failed; i++) { + S1AP_E_RABItemIEs_t *item; + item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t)); + item->id = S1AP_ProtocolIE_ID_id_E_RABItem; + item->criticality = S1AP_Criticality_ignore; + item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem; + item->value.choice.E_RABItem.e_RAB_ID = e_rab_setup_resp_p->e_rabs_failed[i].e_rab_id; + item->value.choice.E_RABItem.cause.present = e_rab_setup_resp_p->e_rabs_failed[i].cause; + + switch(item->value.choice.E_RABItem.cause.present) + { + case S1AP_Cause_PR_radioNetwork: + item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_setup_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_transport: + item->value.choice.E_RABItem.cause.choice.transport = e_rab_setup_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_nas: + item->value.choice.E_RABItem.cause.choice.nas = e_rab_setup_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_protocol: + item->value.choice.E_RABItem.cause.choice.protocol = e_rab_setup_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_misc: + item->value.choice.E_RABItem.cause.choice.misc = e_rab_setup_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_NOTHING: + default: + break; + } + + S1AP_DEBUG("e_rab_modify_resp: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID); + ASN_SEQUENCE_ADD(&ie->value.choice.E_RABList.list, item); + } + + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ + if (0) { + ie = (S1AP_E_RABSetupResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CriticalityDiagnostics; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABSetupResponseIEs__value_PR_CriticalityDiagnostics; + // ie->value.choice.CriticalityDiagnostics = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* S1AP_E_RABSetupListBearerSURes_t e_RABSetupListBearerSURes; + memset(&e_RABSetupListBearerSURes, 0, sizeof(S1AP_E_RABSetupListBearerSURes_t)); if (s1ap_encode_s1ap_e_rabsetuplistbearersures(&e_RABSetupListBearerSURes, &initial_ies_p->e_RABSetupListBearerSURes.s1ap_E_RABSetupItemBearerSURes) < 0 ) return -1; - ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_S1ap_E_RABSetupListBearerSURes, &e_RABSetupListBearerSURes); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_S1AP_E_RABSetupListBearerSURes, &e_RABSetupListBearerSURes); */ fprintf(stderr, "start encode\n"); - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { S1AP_ERROR("Failed to encode uplink transport\n"); /* Encode procedure has failed... */ return -1; } - - MSC_LOG_TX_MESSAGE( MSC_S1AP_ENB, MSC_S1AP_MME, @@ -827,32 +1254,30 @@ int s1ap_eNB_e_rab_setup_resp(instance_t instance, length, MSC_AS_TIME_FMT" E_RAN Setup successfulOutcome eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - initial_ies_p->eNB_UE_S1AP_ID, - initial_ies_p->mme_ue_s1ap_id); + e_rab_setup_resp_p->eNB_ue_s1ap_id, + ue_context_p->mme_ue_s1ap_id); /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, length, ue_context_p->tx_stream); - return ret; + return 0; } //------------------------------------------------------------------------------ int s1ap_eNB_e_rab_modify_resp(instance_t instance, - s1ap_e_rab_modify_resp_t *e_rab_modify_resp_p) + s1ap_e_rab_modify_resp_t *e_rab_modify_resp_p) //------------------------------------------------------------------------------ { - s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; - struct s1ap_eNB_ue_context_s *ue_context_p = NULL; - - S1ap_E_RABModifyResponseIEs_t *initial_ies_p = NULL; - - s1ap_message message; + s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; + struct s1ap_eNB_ue_context_s *ue_context_p = NULL; + S1AP_S1AP_PDU_t pdu; + S1AP_E_RABModifyResponse_t *out; + S1AP_E_RABModifyResponseIEs_t *ie; uint8_t *buffer = NULL; uint32_t length; - int ret = -1; int i; /* Retrieve the S1AP eNB instance associated with Mod_id */ @@ -862,7 +1287,7 @@ int s1ap_eNB_e_rab_modify_resp(instance_t instance, DevAssert(s1ap_eNB_instance_p != NULL); if ((ue_context_p = s1ap_eNB_get_ue_context(s1ap_eNB_instance_p, - e_rab_modify_resp_p->eNB_ue_s1ap_id)) == NULL) { + e_rab_modify_resp_p->eNB_ue_s1ap_id)) == NULL) { /* The context for this eNB ue s1ap id doesn't exist in the map of eNB UEs */ S1AP_WARN("Failed to find ue context associated with eNB ue s1ap id: 0x%06x\n", e_rab_modify_resp_p->eNB_ue_s1ap_id); @@ -881,87 +1306,107 @@ int s1ap_eNB_e_rab_modify_resp(instance_t instance, } /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_successfulOutcome; + pdu.choice.successfulOutcome.procedureCode = S1AP_ProcedureCode_id_E_RABModify; + pdu.choice.successfulOutcome.criticality = S1AP_Criticality_reject; + pdu.choice.successfulOutcome.value.present = S1AP_SuccessfulOutcome__value_PR_E_RABModifyResponse; + out = &pdu.choice.successfulOutcome.value.choice.E_RABModifyResponse; - message.direction = S1AP_PDU_PR_successfulOutcome; - message.procedureCode = S1ap_ProcedureCode_id_E_RABModify; - message.criticality = S1ap_Criticality_reject; + /* mandatory */ + ie = (S1AP_E_RABModifyResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABModifyResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABModifyResponseIEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - initial_ies_p = &message.msg.s1ap_E_RABModifyResponseIEs; + /* mandatory */ + ie = (S1AP_E_RABModifyResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABModifyResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABModifyResponseIEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = e_rab_modify_resp_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - initial_ies_p->eNB_UE_S1AP_ID = e_rab_modify_resp_p->eNB_ue_s1ap_id; - initial_ies_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; + /* optional */ + if (e_rab_modify_resp_p->nb_of_e_rabs > 0) { + ie = (S1AP_E_RABModifyResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABModifyResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_RABModifyListBearerModRes; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABModifyResponseIEs__value_PR_E_RABModifyListBearerModRes; - if ( e_rab_modify_resp_p->nb_of_e_rabs >= 1 ) - initial_ies_p->presenceMask |= S1AP_E_RABMODIFYRESPONSEIES_E_RABMODIFYLISTBEARERMODRES_PRESENT; + for (i = 0; i < e_rab_modify_resp_p->nb_of_e_rabs; i++) { + S1AP_E_RABModifyItemBearerModResIEs_t *item; + item = (S1AP_E_RABModifyItemBearerModResIEs_t *)calloc(1, sizeof(S1AP_E_RABModifyItemBearerModResIEs_t)); + item->id = S1AP_ProtocolIE_ID_id_E_RABModifyItemBearerModRes; + item->criticality = S1AP_Criticality_ignore; + item->value.present = S1AP_E_RABModifyItemBearerModResIEs__value_PR_E_RABModifyItemBearerModRes; + item->value.choice.E_RABModifyItemBearerModRes.e_RAB_ID = e_rab_modify_resp_p->e_rabs[i].e_rab_id; + S1AP_DEBUG("e_rab_modify_resp: modified e_rab ID %ld\n", item->value.choice.E_RABModifyItemBearerModRes.e_RAB_ID); + ASN_SEQUENCE_ADD(&ie->value.choice.E_RABModifyListBearerModRes.list, item); + } - for (i = 0; i < e_rab_modify_resp_p->nb_of_e_rabs; i++) { - S1ap_E_RABModifyItemBearerModRes_t *modify_item; - - modify_item = calloc(1, sizeof(S1ap_E_RABModifyItemBearerModRes_t)); - - modify_item->e_RAB_ID = e_rab_modify_resp_p->e_rabs[i].e_rab_id; - - S1AP_DEBUG("e_rab_modify_resp: modified e_rab ID %ld\n", - modify_item->e_RAB_ID); - - S1ap_IE_t *ie = s1ap_new_ie(S1ap_ProtocolIE_ID_id_E_RABModifyItemBearerModRes, - S1ap_Criticality_ignore, - &asn_DEF_S1ap_E_RABModifyItemBearerModRes, - modify_item); - - ASN_SEQUENCE_ADD(&initial_ies_p->e_RABModifyListBearerModRes.s1ap_E_RABModifyItemBearerModRes, - ie); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); } - if ( e_rab_modify_resp_p->nb_of_e_rabs_failed >= 1 ) - initial_ies_p->presenceMask |= S1AP_E_RABMODIFYRESPONSEIES_E_RABFAILEDTOMODIFYLIST_PRESENT; + /* optional */ + if (e_rab_modify_resp_p->nb_of_e_rabs_failed > 0) { + ie = (S1AP_E_RABModifyResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABModifyResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToModifyList; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABModifyResponseIEs__value_PR_E_RABList; - for (i = 0; i < e_rab_modify_resp_p->nb_of_e_rabs_failed; i++) { - S1ap_E_RABItem_t *failed_item; + for (i = 0; i < e_rab_modify_resp_p->nb_of_e_rabs_failed; i++) { + S1AP_E_RABItemIEs_t *item; + item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t)); + item->id = S1AP_ProtocolIE_ID_id_E_RABItem; + item->criticality = S1AP_Criticality_ignore; + item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem; + item->value.choice.E_RABItem.e_RAB_ID = e_rab_modify_resp_p->e_rabs_failed[i].e_rab_id; + item->value.choice.E_RABItem.cause.present = e_rab_modify_resp_p->e_rabs_failed[i].cause; - failed_item = calloc(1, sizeof(S1ap_E_RABItem_t)); + switch(item->value.choice.E_RABItem.cause.present) + { + case S1AP_Cause_PR_radioNetwork: + item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_transport: + item->value.choice.E_RABItem.cause.choice.transport = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_nas: + item->value.choice.E_RABItem.cause.choice.nas = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_protocol: + item->value.choice.E_RABItem.cause.choice.protocol = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_misc: + item->value.choice.E_RABItem.cause.choice.misc = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_NOTHING: + default: + break; + } - failed_item->e_RAB_ID = e_rab_modify_resp_p->e_rabs_failed[i].e_rab_id; - switch(e_rab_modify_resp_p->e_rabs_failed[i].cause) - { - case S1AP_CAUSE_RADIO_NETWORK: - failed_item->cause.present = S1ap_Cause_PR_radioNetwork; - failed_item->cause.choice.radioNetwork = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; - break; - case S1AP_CAUSE_TRANSPORT: - failed_item->cause.present = S1ap_Cause_PR_transport; - failed_item->cause.choice.transport = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; - break; - case S1AP_CAUSE_NAS: - failed_item->cause.present = S1ap_Cause_PR_nas; - failed_item->cause.choice.nas = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; - break; - case S1AP_CAUSE_PROTOCOL: - failed_item->cause.present = S1ap_Cause_PR_protocol; - failed_item->cause.choice.protocol = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; - break; - case S1AP_CAUSE_MISC: - failed_item->cause.present = S1ap_Cause_PR_misc; - failed_item->cause.choice.misc = e_rab_modify_resp_p->e_rabs_failed[i].cause_value; - break; - default: - break; + S1AP_DEBUG("e_rab_modify_resp: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID); + ASN_SEQUENCE_ADD(&ie->value.choice.E_RABList.list, item); } - S1AP_DEBUG("e_rab_modify_resp: failed e_rab ID %ld\n", - failed_item->e_RAB_ID); - S1ap_IE_t *ie = s1ap_new_ie(S1ap_ProtocolIE_ID_id_E_RABItem, - S1ap_Criticality_ignore, - &asn_DEF_S1ap_E_RABItem, - failed_item); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } - ASN_SEQUENCE_ADD(&initial_ies_p->e_RABFailedToModifyList.s1ap_E_RABItem, - ie); + /* optional */ + if (0) { + ie = (S1AP_E_RABModifyResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABModifyResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CriticalityDiagnostics; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABModifyResponseIEs__value_PR_CriticalityDiagnostics; + // ie->value.choice.CriticalityDiagnostics = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); } fprintf(stderr, "start encode\n"); - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { S1AP_ERROR("Failed to encode uplink transport\n"); /* Encode procedure has failed... */ return -1; @@ -974,123 +1419,155 @@ int s1ap_eNB_e_rab_modify_resp(instance_t instance, length, MSC_AS_TIME_FMT" E_RAN Modify successful Outcome eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - initial_ies_p->eNB_UE_S1AP_ID, - initial_ies_p->mme_ue_s1ap_id); + e_rab_modify_resp_p->eNB_ue_s1ap_id, + ue_context_p->mme_ue_s1ap_id); /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, length, ue_context_p->tx_stream); - - return ret; + return 0; } //------------------------------------------------------------------------------ int s1ap_eNB_e_rab_release_resp(instance_t instance, - s1ap_e_rab_release_resp_t *e_rab_release_resp_p) + s1ap_e_rab_release_resp_t *e_rab_release_resp_p) //------------------------------------------------------------------------------ { - s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; - struct s1ap_eNB_ue_context_s *ue_context_p = NULL; - - S1ap_E_RABReleaseResponseIEs_t *release_response_ies_p = NULL; - - s1ap_message message; - + s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL; + struct s1ap_eNB_ue_context_s *ue_context_p = NULL; + S1AP_S1AP_PDU_t pdu; + S1AP_E_RABReleaseResponse_t *out; + S1AP_E_RABReleaseResponseIEs_t *ie; uint8_t *buffer = NULL; uint32_t length; - int ret = -1; int i; + /* Retrieve the S1AP eNB instance associated with Mod_id */ s1ap_eNB_instance_p = s1ap_eNB_get_instance(instance); DevAssert(e_rab_release_resp_p != NULL); DevAssert(s1ap_eNB_instance_p != NULL); - /* Prepare the S1AP message to encode */ - memset(&message, 0, sizeof(s1ap_message)); - - message.direction = S1AP_PDU_PR_successfulOutcome; - message.procedureCode = S1ap_ProcedureCode_id_E_RABRelease; - message.criticality = S1ap_Criticality_ignore; - if ((ue_context_p = s1ap_eNB_get_ue_context(s1ap_eNB_instance_p, - e_rab_release_resp_p->eNB_ue_s1ap_id)) == NULL) { + e_rab_release_resp_p->eNB_ue_s1ap_id)) == NULL) { /* The context for this eNB ue s1ap id doesn't exist in the map of eNB UEs */ S1AP_WARN("Failed to find ue context associated with eNB ue s1ap id: %u\n", - e_rab_release_resp_p->eNB_ue_s1ap_id); + e_rab_release_resp_p->eNB_ue_s1ap_id); return -1; } - release_response_ies_p = &message.msg.s1ap_E_RABReleaseResponseIEs; - release_response_ies_p->eNB_UE_S1AP_ID = e_rab_release_resp_p->eNB_ue_s1ap_id; - release_response_ies_p->mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; + /* Prepare the S1AP message to encode */ + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_successfulOutcome; + pdu.choice.successfulOutcome.procedureCode = S1AP_ProcedureCode_id_E_RABRelease; + pdu.choice.successfulOutcome.criticality = S1AP_Criticality_reject; + pdu.choice.successfulOutcome.value.present = S1AP_SuccessfulOutcome__value_PR_E_RABReleaseResponse; + out = &pdu.choice.successfulOutcome.value.choice.E_RABReleaseResponse; - if ( e_rab_release_resp_p->nb_of_e_rabs_released > 0 ) - release_response_ies_p->presenceMask |= S1AP_E_RABRELEASERESPONSEIES_E_RABRELEASELISTBEARERRELCOMP_PRESENT; + /* mandatory */ + ie = (S1AP_E_RABReleaseResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABReleaseResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABReleaseResponseIEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_context_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - //release - for (i = 0; i < e_rab_release_resp_p->nb_of_e_rabs_released; i++) { + /* mandatory */ + ie = (S1AP_E_RABReleaseResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABReleaseResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABReleaseResponseIEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = e_rab_release_resp_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - S1ap_E_RABReleaseItemBearerRelComp_t *new_item; + /* optional */ + if (e_rab_release_resp_p->nb_of_e_rabs_released > 0) { + ie = (S1AP_E_RABReleaseResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABReleaseResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_RABReleaseListBearerRelComp; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABReleaseResponseIEs__value_PR_E_RABReleaseListBearerRelComp; - new_item = calloc(1, sizeof(S1ap_E_RABReleaseItemBearerRelComp_t)); - - new_item->e_RAB_ID = e_rab_release_resp_p->e_rab_release[i].e_rab_id; - - S1AP_DEBUG("e_rab_release_resp: e_rab ID %ld\n",new_item->e_RAB_ID); - - ASN_SEQUENCE_ADD(&release_response_ies_p->e_RABReleaseListBearerRelComp.s1ap_E_RABReleaseItemBearerRelComp, - new_item); + for (i = 0; i < e_rab_release_resp_p->nb_of_e_rabs_released; i++) { + S1AP_E_RABReleaseItemBearerRelCompIEs_t *item; + item = (S1AP_E_RABReleaseItemBearerRelCompIEs_t *)calloc(1, sizeof(S1AP_E_RABReleaseItemBearerRelCompIEs_t)); + item->id = S1AP_ProtocolIE_ID_id_E_RABReleaseItemBearerRelComp; + item->criticality = S1AP_Criticality_ignore; + item->value.present = S1AP_E_RABReleaseItemBearerRelCompIEs__value_PR_E_RABReleaseItemBearerRelComp; + item->value.choice.E_RABReleaseItemBearerRelComp.e_RAB_ID = e_rab_release_resp_p->e_rab_release[i].e_rab_id; + S1AP_DEBUG("e_rab_release_resp: e_rab ID %ld\n", item->value.choice.E_RABReleaseItemBearerRelComp.e_RAB_ID); + ASN_SEQUENCE_ADD(&ie->value.choice.E_RABReleaseListBearerRelComp.list, item); + } + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); } - if ( e_rab_release_resp_p->nb_of_e_rabs_failed > 0 ) - release_response_ies_p->presenceMask |= S1AP_E_RABRELEASERESPONSEIES_E_RABFAILEDTORELEASELIST_PRESENT; + /* optional */ + if (e_rab_release_resp_p->nb_of_e_rabs_failed > 0) { + ie = (S1AP_E_RABReleaseResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABReleaseResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToReleaseList; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABReleaseResponseIEs__value_PR_E_RABList; - //release failed - for (i = 0; i < e_rab_release_resp_p->nb_of_e_rabs_failed; i++) { - S1ap_E_RABItem_t *new_rabitem; - new_rabitem = calloc(1, sizeof(S1ap_E_RABItem_t)); - //e_rab_id - new_rabitem->e_RAB_ID = e_rab_release_resp_p->e_rabs_failed[i].e_rab_id; - //cause - switch(e_rab_release_resp_p->e_rabs_failed[i].cause) + for (i = 0; i < e_rab_release_resp_p->nb_of_e_rabs_failed; i++) { + S1AP_E_RABItemIEs_t *item; + item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t)); + item->id = S1AP_ProtocolIE_ID_id_E_RABItem; + item->criticality = S1AP_Criticality_ignore; + item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem; + item->value.choice.E_RABItem.e_RAB_ID = e_rab_release_resp_p->e_rabs_failed[i].e_rab_id; + item->value.choice.E_RABItem.cause.present = e_rab_release_resp_p->e_rabs_failed[i].cause; + + switch(item->value.choice.E_RABItem.cause.present) { - case S1AP_CAUSE_NOTHING: - new_rabitem->cause.present = S1ap_Cause_PR_NOTHING; - break; - - case S1AP_CAUSE_RADIO_NETWORK: - new_rabitem->cause.present = S1ap_Cause_PR_radioNetwork; - new_rabitem->cause.choice.radioNetwork = e_rab_release_resp_p->e_rabs_failed[i].cause_value; - break; - - case S1AP_CAUSE_TRANSPORT: - new_rabitem->cause.present = S1ap_Cause_PR_transport; - new_rabitem->cause.choice.transport = e_rab_release_resp_p->e_rabs_failed[i].cause_value; - break; - - case S1AP_CAUSE_NAS: - new_rabitem->cause.present = S1ap_Cause_PR_nas; - new_rabitem->cause.choice.nas = e_rab_release_resp_p->e_rabs_failed[i].cause_value; - break; - - case S1AP_CAUSE_PROTOCOL: - new_rabitem->cause.present = S1ap_Cause_PR_protocol; - new_rabitem->cause.choice.protocol = e_rab_release_resp_p->e_rabs_failed[i].cause_value; - break; - - case S1AP_CAUSE_MISC: + case S1AP_Cause_PR_radioNetwork: + item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_release_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_transport: + item->value.choice.E_RABItem.cause.choice.transport = e_rab_release_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_nas: + item->value.choice.E_RABItem.cause.choice.nas = e_rab_release_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_protocol: + item->value.choice.E_RABItem.cause.choice.protocol = e_rab_release_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_misc: + item->value.choice.E_RABItem.cause.choice.misc = e_rab_release_resp_p->e_rabs_failed[i].cause_value; + break; + case S1AP_Cause_PR_NOTHING: default: - new_rabitem->cause.present = S1ap_Cause_PR_misc; - new_rabitem->cause.choice.misc = e_rab_release_resp_p->e_rabs_failed[i].cause_value; - break; + break; } - S1AP_DEBUG("e_rab_release_resp: failed e_rab ID %ld\n",new_rabitem->e_RAB_ID); - ASN_SEQUENCE_ADD(&release_response_ies_p->e_RABFailedToReleaseList.s1ap_E_RABItem, new_rabitem); + + ASN_SEQUENCE_ADD(&ie->value.choice.E_RABList.list, item); + } + + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); } + /* optional */ + if (0) { + ie = (S1AP_E_RABReleaseResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABReleaseResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_CriticalityDiagnostics; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABReleaseResponseIEs__value_PR_CriticalityDiagnostics; + // ie->value.choice.CriticalityDiagnostics = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } + + /* optional */ +#if (S1AP_VERSION >= MAKE_VERSION(12, 0, 0)) + if(0) { + ie = (S1AP_E_RABReleaseResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABReleaseResponseIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_UserLocationInformation; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_E_RABReleaseResponseIEs__value_PR_UserLocationInformation; + // ie->value.choice.UserLocationInformation = ; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + } +#endif /* #if (S1AP_VERSION >= MAKE_VERSION(14, 0, 0)) */ + fprintf(stderr, "start encode\n"); - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { S1AP_ERROR("Failed to encode release response\n"); /* Encode procedure has failed... */ return -1; @@ -1112,7 +1589,7 @@ int s1ap_eNB_e_rab_release_resp(instance_t instance, length, ue_context_p->tx_stream); S1AP_INFO("e_rab_release_response sended eNB_UE_S1AP_ID %d mme_ue_s1ap_id %d nb_of_e_rabs_released %d nb_of_e_rabs_failed %d\n", - e_rab_release_resp_p->eNB_ue_s1ap_id, ue_context_p->mme_ue_s1ap_id,e_rab_release_resp_p->nb_of_e_rabs_released,e_rab_release_resp_p->nb_of_e_rabs_failed); + e_rab_release_resp_p->eNB_ue_s1ap_id, ue_context_p->mme_ue_s1ap_id,e_rab_release_resp_p->nb_of_e_rabs_released,e_rab_release_resp_p->nb_of_e_rabs_failed); - return ret; + return 0; } diff --git a/openair3/S1AP/s1ap_eNB_nas_procedures.h b/openair3/S1AP/s1ap_eNB_nas_procedures.h index bb2a0488bf..a7f144c0ca 100644 --- a/openair3/S1AP/s1ap_eNB_nas_procedures.h +++ b/openair3/S1AP/s1ap_eNB_nas_procedures.h @@ -23,14 +23,14 @@ #define S1AP_ENB_NAS_PROCEDURES_H_ int s1ap_eNB_handle_nas_downlink( - const uint32_t assoc_id, - const uint32_t stream, - struct s1ap_message_s* message_p); + uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_p); -void s1ap_eNB_nas_non_delivery_ind(instance_t instance, - s1ap_nas_non_delivery_ind_t *s1ap_nas_non_delivery_ind); +int s1ap_eNB_nas_non_delivery_ind(instance_t instance, + s1ap_nas_non_delivery_ind_t *s1ap_nas_non_delivery_ind); int s1ap_eNB_handle_nas_first_req( instance_t instance, s1ap_nas_first_req_t *s1ap_nas_first_req_p); @@ -45,8 +45,8 @@ int s1ap_eNB_e_rab_setup_resp(instance_t instance, s1ap_e_rab_setup_resp_t *e_rab_setup_resp_p); int s1ap_eNB_e_rab_modify_resp(instance_t instance, - s1ap_e_rab_modify_resp_t *e_rab_modify_resp_p); + s1ap_e_rab_modify_resp_t *e_rab_modify_resp_p); int s1ap_eNB_e_rab_release_resp(instance_t instance, - s1ap_e_rab_release_resp_t *e_rab_release_resp_p); + s1ap_e_rab_release_resp_t *e_rab_release_resp_p); #endif /* S1AP_ENB_NAS_PROCEDURES_H_ */ diff --git a/openair3/S1AP/s1ap_eNB_overload.c b/openair3/S1AP/s1ap_eNB_overload.c index 82167bfeeb..cf208fc16e 100644 --- a/openair3/S1AP/s1ap_eNB_overload.c +++ b/openair3/S1AP/s1ap_eNB_overload.c @@ -33,7 +33,6 @@ #include "intertask_interface.h" #include "s1ap_common.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_defs.h" #include "s1ap_eNB.h" @@ -44,20 +43,24 @@ #include "assertions.h" -int s1ap_eNB_handle_overload_start(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p) +int s1ap_eNB_handle_overload_start(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu) { - S1ap_OverloadStartIEs_t *overload_start_p; s1ap_eNB_mme_data_t *mme_desc_p; + S1AP_OverloadStart_t *container; + S1AP_OverloadStartIEs_t *ie; - DevAssert(message_p != NULL); + DevAssert(pdu != NULL); - overload_start_p = &message_p->msg.s1ap_OverloadStartIEs; + container = &pdu->choice.initiatingMessage.value.choice.OverloadStart; - DevCheck(overload_start_p->overloadResponse.present == - S1ap_OverloadResponse_PR_overloadAction, - S1ap_OverloadResponse_PR_overloadAction, 0, 0); + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_OverloadStartIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_OverloadResponse, true); + + DevCheck(ie->value.choice.OverloadResponse.present == + S1AP_OverloadResponse_PR_overloadAction, + S1AP_OverloadResponse_PR_overloadAction, 0, 0); /* Non UE-associated signalling -> stream 0 */ DevCheck(stream == 0, stream, 0, 0); @@ -72,21 +75,20 @@ int s1ap_eNB_handle_overload_start(uint32_t assoc_id, */ mme_desc_p->state = S1AP_ENB_OVERLOAD; mme_desc_p->overload_state = - overload_start_p->overloadResponse.choice.overloadAction; + ie->value.choice.OverloadResponse.choice.overloadAction; return 0; } -int s1ap_eNB_handle_overload_stop(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p) +int s1ap_eNB_handle_overload_stop(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu) { /* We received Overload stop message, meaning that the MME is no more * overloaded. This is an empty message, with only message header and no * Information Element. */ - - DevAssert(message_p != NULL); + DevAssert(pdu != NULL); s1ap_eNB_mme_data_t *mme_desc_p; diff --git a/openair3/S1AP/s1ap_eNB_overload.h b/openair3/S1AP/s1ap_eNB_overload.h index 1b0ee443de..8133345dee 100644 --- a/openair3/S1AP/s1ap_eNB_overload.h +++ b/openair3/S1AP/s1ap_eNB_overload.h @@ -28,9 +28,9 @@ // int s1ap_eNB_handle_overload_start(eNB_mme_desc_t *eNB_desc_p, // sctp_queue_item_t *packet_p, // struct s1ap_message_s *message_p); -int s1ap_eNB_handle_overload_start(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p); +int s1ap_eNB_handle_overload_start(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); /** * \brief Handle an overload stop message @@ -38,8 +38,8 @@ int s1ap_eNB_handle_overload_start(uint32_t assoc_id, // int s1ap_eNB_handle_overload_stop(eNB_mme_desc_t *eNB_desc_p, // sctp_queue_item_t *packet_p, // struct s1ap_message_s *message_p); -int s1ap_eNB_handle_overload_stop(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p); +int s1ap_eNB_handle_overload_stop(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); #endif /* S1AP_ENB_OVERLOAD_H_ */ diff --git a/openair3/S1AP/s1ap_eNB_trace.c b/openair3/S1AP/s1ap_eNB_trace.c index e640c9292a..653aa98ccd 100644 --- a/openair3/S1AP/s1ap_eNB_trace.c +++ b/openair3/S1AP/s1ap_eNB_trace.c @@ -28,7 +28,6 @@ #include "s1ap_eNB_default_values.h" #include "s1ap_common.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_defs.h" #include "s1ap_eNB.h" @@ -40,29 +39,60 @@ static void s1ap_eNB_generate_trace_failure(struct s1ap_eNB_ue_context_s *ue_desc_p, - S1ap_E_UTRAN_Trace_ID_t *trace_id, - S1ap_Cause_t *cause_p) + S1AP_E_UTRAN_Trace_ID_t *trace_id, + S1AP_Cause_t *cause_p) { - s1ap_message message; - S1ap_TraceFailureIndicationIEs_t *trace_failure_p; - uint8_t *buffer; - uint32_t length; + S1AP_S1AP_PDU_t pdu; + S1AP_TraceFailureIndication_t *out; + S1AP_TraceFailureIndicationIEs_t *ie; + uint8_t *buffer = NULL; + uint32_t length; DevAssert(ue_desc_p != NULL); DevAssert(trace_id != NULL); DevAssert(cause_p != NULL); - memset(&message, 0, sizeof(s1ap_message)); + /* Prepare the S1AP message to encode */ + memset(&pdu, 0, sizeof(pdu)); + pdu.present = S1AP_S1AP_PDU_PR_initiatingMessage; + pdu.choice.initiatingMessage.procedureCode = S1AP_ProcedureCode_id_TraceFailureIndication; + pdu.choice.initiatingMessage.criticality = S1AP_Criticality_ignore; + pdu.choice.initiatingMessage.value.present = S1AP_InitiatingMessage__value_PR_TraceFailureIndication; + out = &pdu.choice.initiatingMessage.value.choice.TraceFailureIndication; - trace_failure_p = &message.msg.s1ap_TraceFailureIndicationIEs; + /* mandatory */ + ie = (S1AP_TraceFailureIndicationIEs_t *)calloc(1, sizeof(S1AP_TraceFailureIndicationIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_TraceFailureIndicationIEs__value_PR_MME_UE_S1AP_ID; + ie->value.choice.MME_UE_S1AP_ID = ue_desc_p->mme_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - trace_failure_p->mme_ue_s1ap_id = ue_desc_p->mme_ue_s1ap_id; - trace_failure_p->eNB_UE_S1AP_ID = ue_desc_p->eNB_ue_s1ap_id; + /* mandatory */ + ie = (S1AP_TraceFailureIndicationIEs_t *)calloc(1, sizeof(S1AP_TraceFailureIndicationIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID; + ie->criticality = S1AP_Criticality_reject; + ie->value.present = S1AP_TraceFailureIndicationIEs__value_PR_ENB_UE_S1AP_ID; + ie->value.choice.ENB_UE_S1AP_ID = ue_desc_p->eNB_ue_s1ap_id; + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - memcpy(&trace_failure_p->e_UTRAN_Trace_ID, trace_id, sizeof(S1ap_E_UTRAN_Trace_ID_t)); - memcpy(&trace_failure_p->cause, cause_p, sizeof(S1ap_Cause_t)); + /* mandatory */ + ie = (S1AP_TraceFailureIndicationIEs_t *)calloc(1, sizeof(S1AP_TraceFailureIndicationIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_E_UTRAN_Trace_ID; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_TraceFailureIndicationIEs__value_PR_E_UTRAN_Trace_ID; + memcpy(&ie->value.choice.E_UTRAN_Trace_ID, trace_id, sizeof(S1AP_E_UTRAN_Trace_ID_t)); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + /* mandatory */ + ie = (S1AP_TraceFailureIndicationIEs_t *)calloc(1, sizeof(S1AP_TraceFailureIndicationIEs_t)); + ie->id = S1AP_ProtocolIE_ID_id_Cause; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_TraceFailureIndicationIEs__value_PR_Cause; + memcpy(&ie->value.choice.Cause, cause_p, sizeof(S1AP_Cause_t)); + ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { return; } @@ -71,46 +101,46 @@ void s1ap_eNB_generate_trace_failure(struct s1ap_eNB_ue_context_s *ue_desc_p, length, ue_desc_p->tx_stream); } -int s1ap_eNB_handle_trace_start(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p) +int s1ap_eNB_handle_trace_start(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu) { - S1ap_TraceStartIEs_t *trace_start_p; + S1AP_TraceStart_t *container; + S1AP_TraceStartIEs_t *ie; struct s1ap_eNB_ue_context_s *ue_desc_p; struct s1ap_eNB_mme_data_s *mme_ref_p; - DevAssert(message_p != NULL); + DevAssert(pdu != NULL); - trace_start_p = &message_p->msg.s1ap_TraceStartIEs; + container = &pdu->choice.initiatingMessage.value.choice.TraceStart; + S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_TraceStartIEs_t, ie, container, + S1AP_ProtocolIE_ID_id_eNB_UE_S1AP_ID, TRUE); mme_ref_p = s1ap_eNB_get_MME(NULL, assoc_id, 0); DevAssert(mme_ref_p != NULL); if ((ue_desc_p = s1ap_eNB_get_ue_context(mme_ref_p->s1ap_eNB_instance, - trace_start_p->eNB_UE_S1AP_ID)) == NULL) { + ie->value.choice.ENB_UE_S1AP_ID)) == NULL) { /* Could not find context associated with this eNB_ue_s1ap_id -> generate * trace failure indication. */ - S1ap_E_UTRAN_Trace_ID_t trace_id; - S1ap_Cause_t cause; - - memset(&trace_id, 0, sizeof(S1ap_E_UTRAN_Trace_ID_t)); - memset(&cause, 0, sizeof(S1ap_Cause_t)); - - cause.present = S1ap_Cause_PR_radioNetwork; - cause.choice.radioNetwork = S1ap_CauseRadioNetwork_unknown_pair_ue_s1ap_id; - + S1AP_E_UTRAN_Trace_ID_t trace_id; + S1AP_Cause_t cause; + memset(&trace_id, 0, sizeof(S1AP_E_UTRAN_Trace_ID_t)); + memset(&cause, 0, sizeof(S1AP_Cause_t)); + cause.present = S1AP_Cause_PR_radioNetwork; + cause.choice.radioNetwork = S1AP_CauseRadioNetwork_unknown_pair_ue_s1ap_id; s1ap_eNB_generate_trace_failure(ue_desc_p, &trace_id, &cause); } return 0; } -int s1ap_eNB_handle_deactivate_trace(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p) +int s1ap_eNB_handle_deactivate_trace(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *message_p) { - // S1ap_DeactivateTraceIEs_t *deactivate_trace_p; + // S1AP_DeactivateTraceIEs_t *deactivate_trace_p; // // deactivate_trace_p = &message_p->msg.deactivateTraceIEs; diff --git a/openair3/S1AP/s1ap_eNB_trace.h b/openair3/S1AP/s1ap_eNB_trace.h index 922197afb4..75f7a59dc4 100644 --- a/openair3/S1AP/s1ap_eNB_trace.h +++ b/openair3/S1AP/s1ap_eNB_trace.h @@ -32,15 +32,15 @@ // int s1ap_eNB_handle_trace_start(eNB_mme_desc_t *eNB_desc_p, // sctp_queue_item_t *packet_p, // struct s1ap_message_s *message_p); -int s1ap_eNB_handle_trace_start(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p); +int s1ap_eNB_handle_trace_start(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); // int s1ap_eNB_handle_deactivate_trace(eNB_mme_desc_t *eNB_desc_p, // sctp_queue_item_t *packet_p, // struct s1ap_message_s *message_p); -int s1ap_eNB_handle_deactivate_trace(uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p); +int s1ap_eNB_handle_deactivate_trace(uint32_t assoc_id, + uint32_t stream, + S1AP_S1AP_PDU_t *pdu); #endif /* S1AP_ENB_TRACE_H_ */ diff --git a/openair3/SCTP/sctp_eNB_task.c b/openair3/SCTP/sctp_eNB_task.c index 256bee0cd1..168eb58b37 100644 --- a/openair3/SCTP/sctp_eNB_task.c +++ b/openair3/SCTP/sctp_eNB_task.c @@ -203,19 +203,6 @@ sctp_handle_new_association_req( if (s > 0 ) { if (((struct sockaddr_in*)ifa->ifa_addr)->sin_addr.s_addr == in.s_addr) { -#if 0 - memset(&ifr, 0, sizeof(ifr)); - snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s",ifa->ifa_name); - - if (setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) { - SCTP_ERROR("Setsockopt SOL_SOCKET failed: %s\n", - strerror(errno)); - } else { - SCTP_DEBUG("Setsockopt SOL_SOCKET socket bound to : %s\n", - ifa->ifa_name); - } - -#else struct sockaddr_in locaddr; locaddr.sin_family = AF_INET; locaddr.sin_port = htons(sctp_new_association_req_p->port); @@ -228,8 +215,6 @@ sctp_handle_new_association_req( SCTP_DEBUG("sctp_bindx SCTP_BINDX_ADD_ADDR socket bound to : %s\n", inet_ntoa(locaddr.sin_addr)); } - -#endif break; } diff --git a/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf index e864f47edb..2571db70a0 100644 --- a/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf +++ b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf @@ -45,7 +45,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 1; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -26; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb1.conf b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb1.conf index bd9014670e..e71e7e03f5 100755 --- a/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb1.conf +++ b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb1.conf @@ -44,7 +44,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 1; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -26; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/openair3/TEST/EPC_TEST/generate_scenario.h b/openair3/TEST/EPC_TEST/generate_scenario.h index 09fa5318ef..0f240f483d 100644 --- a/openair3/TEST/EPC_TEST/generate_scenario.h +++ b/openair3/TEST/EPC_TEST/generate_scenario.h @@ -41,7 +41,7 @@ #ifdef CMAKER #include "SystemInformationBlockType2.h" #else -#include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h" +#include "RRC/LTE/MESSAGES/SystemInformationBlockType2.h" #endif #define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\ diff --git a/openair3/TEST/EPC_TEST/play_scenario.c b/openair3/TEST/EPC_TEST/play_scenario.c index edb4323d5f..9f922d8516 100644 --- a/openair3/TEST/EPC_TEST/play_scenario.c +++ b/openair3/TEST/EPC_TEST/play_scenario.c @@ -1206,7 +1206,7 @@ int main( int argc, char **argv ) logInit(); set_glog(LOG_TRACE, LOG_MED); - itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL); + itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info); set_comp_log(ENB_APP, LOG_TRACE, LOG_MED, 1); set_comp_log(S1AP, LOG_TRACE, LOG_MED, 1); diff --git a/openair3/TEST/EPC_TEST/play_scenario_decode.c b/openair3/TEST/EPC_TEST/play_scenario_decode.c index be63a171c5..f6b983bf73 100644 --- a/openair3/TEST/EPC_TEST/play_scenario_decode.c +++ b/openair3/TEST/EPC_TEST/play_scenario_decode.c @@ -29,140 +29,20 @@ #include "intertask_interface.h" #include "platform_types.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_decoder.h" #include "assertions.h" #include "play_scenario.h" //------------------------------------------------------------------------------ -int et_s1ap_decode_initiating_message(s1ap_message *message, S1ap_InitiatingMessage_t *initiating_p) -{ - int ret = -1; - - DevAssert(initiating_p != NULL); - - message->procedureCode = initiating_p->procedureCode; - message->criticality = initiating_p->criticality; - - switch(initiating_p->procedureCode) { - case S1ap_ProcedureCode_id_downlinkNASTransport: - ret = s1ap_decode_s1ap_downlinknastransporties(&message->msg.s1ap_DownlinkNASTransportIEs,&initiating_p->value); - break; - - case S1ap_ProcedureCode_id_InitialContextSetup: - ret = s1ap_decode_s1ap_initialcontextsetuprequesties(&message->msg.s1ap_InitialContextSetupRequestIEs, &initiating_p->value); - break; - - case S1ap_ProcedureCode_id_UEContextRelease: - ret = s1ap_decode_s1ap_uecontextreleasecommandies(&message->msg.s1ap_UEContextReleaseCommandIEs, &initiating_p->value); - break; - - case S1ap_ProcedureCode_id_Paging: - ret = s1ap_decode_s1ap_pagingies(&message->msg.s1ap_PagingIEs, &initiating_p->value); - break; - - case S1ap_ProcedureCode_id_uplinkNASTransport: - ret = s1ap_decode_s1ap_uplinknastransporties (&message->msg.s1ap_UplinkNASTransportIEs, &initiating_p->value); - break; - - case S1ap_ProcedureCode_id_S1Setup: - ret = s1ap_decode_s1ap_s1setuprequesties (&message->msg.s1ap_S1SetupRequestIEs, &initiating_p->value); - break; - - case S1ap_ProcedureCode_id_initialUEMessage: - ret = s1ap_decode_s1ap_initialuemessageies (&message->msg.s1ap_InitialUEMessageIEs, &initiating_p->value); - break; - - case S1ap_ProcedureCode_id_UEContextReleaseRequest: - ret = s1ap_decode_s1ap_uecontextreleaserequesties (&message->msg.s1ap_UEContextReleaseRequestIEs, &initiating_p->value); - break; - - case S1ap_ProcedureCode_id_UECapabilityInfoIndication: - ret = s1ap_decode_s1ap_uecapabilityinfoindicationies (&message->msg.s1ap_UECapabilityInfoIndicationIEs, &initiating_p->value); - break; - - case S1ap_ProcedureCode_id_NASNonDeliveryIndication: - ret = s1ap_decode_s1ap_nasnondeliveryindication_ies (&message->msg.s1ap_NASNonDeliveryIndication_IEs, &initiating_p->value); - break; - - default: - AssertFatal( 0 , "Unknown procedure ID (%d) for initiating message\n", - (int)initiating_p->procedureCode); - return -1; - } - return ret; -} - -//------------------------------------------------------------------------------ -int et_s1ap_decode_successful_outcome(s1ap_message *message, S1ap_SuccessfulOutcome_t *successfullOutcome_p) -{ - int ret = -1; - - DevAssert(successfullOutcome_p != NULL); - - message->procedureCode = successfullOutcome_p->procedureCode; - message->criticality = successfullOutcome_p->criticality; - - switch(successfullOutcome_p->procedureCode) { - case S1ap_ProcedureCode_id_S1Setup: - ret = s1ap_decode_s1ap_s1setupresponseies( - &message->msg.s1ap_S1SetupResponseIEs, &successfullOutcome_p->value); - break; - - case S1ap_ProcedureCode_id_InitialContextSetup: - ret = s1ap_decode_s1ap_initialcontextsetupresponseies (&message->msg.s1ap_InitialContextSetupResponseIEs, &successfullOutcome_p->value); - break; - - case S1ap_ProcedureCode_id_UEContextRelease: - ret = s1ap_decode_s1ap_uecontextreleasecompleteies (&message->msg.s1ap_UEContextReleaseCompleteIEs, &successfullOutcome_p->value); - break; - - default: - AssertFatal(0, "Unknown procedure ID (%d) for successfull outcome message\n", - (int)successfullOutcome_p->procedureCode); - return -1; - } - return ret; -} - -//------------------------------------------------------------------------------ -int et_s1ap_decode_unsuccessful_outcome(s1ap_message *message, S1ap_UnsuccessfulOutcome_t *unSuccessfullOutcome_p) -{ - int ret = -1; - - DevAssert(unSuccessfullOutcome_p != NULL); - - message->procedureCode = unSuccessfullOutcome_p->procedureCode; - message->criticality = unSuccessfullOutcome_p->criticality; - - switch(unSuccessfullOutcome_p->procedureCode) { - case S1ap_ProcedureCode_id_S1Setup: - ret = s1ap_decode_s1ap_s1setupfailureies(&message->msg.s1ap_S1SetupFailureIEs, &unSuccessfullOutcome_p->value); - break; - - case S1ap_ProcedureCode_id_InitialContextSetup: - ret = s1ap_decode_s1ap_initialcontextsetupfailureies (&message->msg.s1ap_InitialContextSetupFailureIEs, &unSuccessfullOutcome_p->value); - break; - - default: - AssertFatal(0,"Unknown procedure ID (%d) for unsuccessfull outcome message\n", - (int)unSuccessfullOutcome_p->procedureCode); - break; - } - return ret; -} - -//------------------------------------------------------------------------------ -int et_s1ap_decode_pdu(S1AP_PDU_t * const pdu, s1ap_message * const message, const uint8_t * const buffer, const uint32_t length) +int et_s1ap_decode_pdu(S1AP_PDU_t *const pdu, const uint8_t *const buffer, const uint32_t length) { asn_dec_rval_t dec_ret; DevAssert(buffer != NULL); - memset((void *)pdu, 0, sizeof(S1AP_PDU_t)); - + memset((void *)pdu, 0, sizeof(S1AP_S1AP_PDU_t)); dec_ret = aper_decode(NULL, - &asn_DEF_S1AP_PDU, + &asn_DEF_S1AP_S1AP_PDU, (void **)&pdu, buffer, length, @@ -174,32 +54,14 @@ int et_s1ap_decode_pdu(S1AP_PDU_t * const pdu, s1ap_message * const message, con return -1; } - message->direction = pdu->present; - - switch(pdu->present) { - case S1AP_PDU_PR_initiatingMessage: - return et_s1ap_decode_initiating_message(message, - &pdu->choice.initiatingMessage); - - case S1AP_PDU_PR_successfulOutcome: - return et_s1ap_decode_successful_outcome(message, - &pdu->choice.successfulOutcome); - - case S1AP_PDU_PR_unsuccessfulOutcome: - return et_s1ap_decode_unsuccessful_outcome(message, - &pdu->choice.unsuccessfulOutcome); - - default: - AssertFatal(0, "Unknown presence (%d) or not implemented\n", (int)pdu->present); - break; - } - return -1; + return dec_ret.code; } + //------------------------------------------------------------------------------ -void et_decode_s1ap(et_s1ap_t * const s1ap) +void et_decode_s1ap(et_s1ap_t *const s1ap) { if (NULL != s1ap) { - if (et_s1ap_decode_pdu(&s1ap->pdu, &s1ap->message, s1ap->binary_stream, s1ap->binary_stream_allocated_size) < 0) { + if (et_s1ap_decode_pdu(&s1ap->pdu, s1ap->binary_stream, s1ap->binary_stream_allocated_size) < 0) { AssertFatal (0, "ERROR %s() Cannot decode S1AP message!\n", __FUNCTION__); } } diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap.c index 95df0fc306..361b56100c 100644 --- a/openair3/TEST/EPC_TEST/play_scenario_s1ap.c +++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap.c @@ -181,15 +181,15 @@ void et_s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, //------------------------------------------------------------------------------ int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packet_t * const rx_packet) { - S1ap_MME_UE_S1AP_ID_t scenario_mme_ue_s1ap_id = 0; - S1ap_MME_UE_S1AP_ID_t rx_mme_ue_s1ap_id = 0; + S1AP_MME_UE_S1AP_ID_t scenario_mme_ue_s1ap_id = 0; + S1AP_MME_UE_S1AP_ID_t rx_mme_ue_s1ap_id = 0; S1AP_PDU_PR present; present = rx_packet->sctp_hdr.u.data_hdr.payload.pdu.present; switch (rx_packet->sctp_hdr.u.data_hdr.payload.message.procedureCode) { - case S1ap_ProcedureCode_id_HandoverPreparation: - if (present == S1AP_PDU_PR_initiatingMessage) { + case S1AP_ProcedureCode_id_HandoverPreparation: + if (present == S1AP_S1AP_PDU_PR_initiatingMessage) { rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs.mme_ue_s1ap_id; } else { @@ -198,36 +198,36 @@ int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packe } break; - case S1ap_ProcedureCode_id_HandoverResourceAllocation: - if (present == S1AP_PDU_PR_initiatingMessage) { + case S1AP_ProcedureCode_id_HandoverResourceAllocation: + if (present == S1AP_S1AP_PDU_PR_initiatingMessage) { rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestIEs.mme_ue_s1ap_id; - } else if (present == S1AP_PDU_PR_successfulOutcome) { + } else if (present == S1AP_S1AP_PDU_PR_successfulOutcome) { rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestAcknowledgeIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestAcknowledgeIEs.mme_ue_s1ap_id; - } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) { + } else if (present == S1AP_S1AP_PDU_PR_unsuccessfulOutcome) { rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverFailureIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverFailureIEs.mme_ue_s1ap_id; } break; - case S1ap_ProcedureCode_id_HandoverNotification: + case S1AP_ProcedureCode_id_HandoverNotification: rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverNotifyIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverNotifyIEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_PathSwitchRequest: + case S1AP_ProcedureCode_id_PathSwitchRequest: //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PathSwitchRequestIEs.mme_ue_s1ap_id; //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PathSwitchRequestIEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_HandoverCancel: + case S1AP_ProcedureCode_id_HandoverCancel: rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCancelIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCancelIEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_E_RABSetup: - if (present == S1AP_PDU_PR_initiatingMessage) { + case S1AP_ProcedureCode_id_E_RABSetup: + if (present == S1AP_S1AP_PDU_PR_initiatingMessage) { rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupRequestIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupRequestIEs.mme_ue_s1ap_id; } else { @@ -456,29 +456,29 @@ int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packe }*/ break; - case S1ap_ProcedureCode_id_eNBDirectInformationTransfer: + case S1AP_ProcedureCode_id_eNBDirectInformationTransfer: //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBDirectInformationTransferIEs.mme_ue_s1ap_id; //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBDirectInformationTransferIEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_MMEDirectInformationTransfer: + case S1AP_ProcedureCode_id_MMEDirectInformationTransfer: //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEDirectInformationTransferIEs.mme_ue_s1ap_id; //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEDirectInformationTransferIEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_PrivateMessage: - case S1ap_ProcedureCode_id_eNBConfigurationTransfer: - case S1ap_ProcedureCode_id_MMEConfigurationTransfer: + case S1AP_ProcedureCode_id_PrivateMessage: + case S1AP_ProcedureCode_id_eNBConfigurationTransfer: + case S1AP_ProcedureCode_id_MMEConfigurationTransfer: AssertFatal(0, "TODO"); break; - case S1ap_ProcedureCode_id_CellTrafficTrace: + case S1AP_ProcedureCode_id_CellTrafficTrace: rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_CellTrafficTraceIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_CellTrafficTraceIEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_Kill: - /*if (present == S1AP_PDU_PR_initiatingMessage) { + case S1AP_ProcedureCode_id_Kill: + /*if (present == S1AP_S1AP_PDU_PR_initiatingMessage) { rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillRequestIEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillRequestIEs.mme_ue_s1ap_id; } else { @@ -487,22 +487,22 @@ int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packe }*/ break; - case S1ap_ProcedureCode_id_downlinkUEAssociatedLPPaTransport: + case S1AP_ProcedureCode_id_downlinkUEAssociatedLPPaTransport: rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_uplinkUEAssociatedLPPaTransport: + case S1AP_ProcedureCode_id_uplinkUEAssociatedLPPaTransport: rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_downlinkNonUEAssociatedLPPaTransport: + case S1AP_ProcedureCode_id_downlinkNonUEAssociatedLPPaTransport: //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; break; - case S1ap_ProcedureCode_id_uplinkNonUEAssociatedLPPaTransport: + case S1AP_ProcedureCode_id_uplinkNonUEAssociatedLPPaTransport: //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; break; @@ -510,9 +510,11 @@ int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packe default: AssertFatal(0, "Unknown procedure code %ld", rx_packet->sctp_hdr.u.data_hdr.payload.message.procedureCode); } + if (scenario_mme_ue_s1ap_id != rx_mme_ue_s1ap_id) { S1AP_DEBUG("%s() Updating mme_ue_s1ap_id %u -> %u \n", __FUNCTION__, scenario_mme_ue_s1ap_id, rx_mme_ue_s1ap_id); - et_packet_t * p = spacket; + et_packet_t *p = spacket; + while (p) { et_s1ap_update_mme_ue_s1ap_id(p, scenario_mme_ue_s1ap_id, rx_mme_ue_s1ap_id); p = p->next; @@ -672,8 +674,9 @@ int et_s1ap_process_rx_packet(et_event_s1ap_data_ind_t * const s1ap_data_ind) packet->packet_number, packet->original_frame_number); while (comp_results) { S1AP_DEBUG("Result err code %s(%u) ASN1 struct name %s\n", - et_error_match2str(comp_results->err_code), comp_results->err_code, comp_results->name); - // (each asn1 rc <= 166 (enum e_S1ap_ProtocolIE_ID, in generated file S1ap_ProtocolIE_ID.h)) + et_error_match2str(comp_results->err_code), comp_results->err_code, comp_results->name); + + // (each asn1 rc <= 166 (enum e_S1AP_ProtocolIE_ID, in generated file S1AP_ProtocolIE_ID.h)) if (comp_results->err_code == COMPARE_ERR_CODE_NO_MATCH) { //TODO MME_UE_S1AP_ID, etc. // get latest error code diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c index 08f79ef206..e0afbeb838 100644 --- a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c +++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c @@ -56,400 +56,9 @@ extern et_scenario_t *g_scenario; extern uint32_t g_constraints; //------------------------------------------------------------------------------ -asn_comp_rval_t * et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1, s1ap_message * const m2, const uint32_t constraints) -{ - asn_comp_rval_t *ret = NULL; - AssertFatal(m1 != NULL, "bad parameter m1"); - AssertFatal(m2 != NULL, "bad parameter m2"); - AssertFatal((present == S1AP_PDU_PR_initiatingMessage) || - (present == S1AP_PDU_PR_successfulOutcome) || - (present == S1AP_PDU_PR_unsuccessfulOutcome) , "Bad parameter S1AP_PDU_PR present "); - AssertFatal( m1->procedureCode == m2->procedureCode, "Bad parameters: no matching procedure codes"); - - - // some cases can never occur since uplink only. - switch (m1->procedureCode) { - case S1ap_ProcedureCode_id_HandoverPreparation: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_handoverrequiredies( - &m1->msg.s1ap_HandoverRequiredIEs, - &m2->msg.s1ap_HandoverRequiredIEs); - } else { - ret = s1ap_compare_s1ap_handovercommandies( - &m1->msg.s1ap_HandoverCommandIEs, - &m2->msg.s1ap_HandoverCommandIEs); - } - break; - - case S1ap_ProcedureCode_id_HandoverResourceAllocation: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_handoverrequesties( - &m1->msg.s1ap_HandoverRequestIEs, - &m2->msg.s1ap_HandoverRequestIEs); - } else if (present == S1AP_PDU_PR_successfulOutcome) { - ret = s1ap_compare_s1ap_handoverrequestacknowledgeies( - &m1->msg.s1ap_HandoverRequestAcknowledgeIEs, - &m2->msg.s1ap_HandoverRequestAcknowledgeIEs); - } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) { - ret = s1ap_compare_s1ap_handoverfailureies( - &m1->msg.s1ap_HandoverFailureIEs, - &m2->msg.s1ap_HandoverFailureIEs); - } - break; - - case S1ap_ProcedureCode_id_HandoverNotification: - ret = s1ap_compare_s1ap_handovernotifyies( - &m1->msg.s1ap_HandoverNotifyIEs, - &m2->msg.s1ap_HandoverNotifyIEs); - break; - - case S1ap_ProcedureCode_id_PathSwitchRequest: - ret = s1ap_compare_s1ap_pathswitchrequesties( - &m1->msg.s1ap_PathSwitchRequestIEs, - &m2->msg.s1ap_PathSwitchRequestIEs); - break; - - case S1ap_ProcedureCode_id_HandoverCancel: - ret = s1ap_compare_s1ap_handovercancelies( - &m1->msg.s1ap_HandoverCancelIEs, - &m2->msg.s1ap_HandoverCancelIEs); - break; - - case S1ap_ProcedureCode_id_E_RABSetup: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_e_rabsetuprequesties( - &m1->msg.s1ap_E_RABSetupRequestIEs, - &m2->msg.s1ap_E_RABSetupRequestIEs); - } else { - ret = s1ap_compare_s1ap_e_rabsetupresponseies( - &m1->msg.s1ap_E_RABSetupResponseIEs, - &m2->msg.s1ap_E_RABSetupResponseIEs); - } - break; - - case S1ap_ProcedureCode_id_E_RABModify: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_e_rabmodifyrequesties( - &m1->msg.s1ap_E_RABModifyRequestIEs, - &m2->msg.s1ap_E_RABModifyRequestIEs); - } else { - ret = s1ap_compare_s1ap_e_rabmodifyresponseies( - &m1->msg.s1ap_E_RABModifyResponseIEs, - &m2->msg.s1ap_E_RABModifyResponseIEs); - } - break; - - case S1ap_ProcedureCode_id_E_RABRelease: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_e_rabreleasecommandies( - &m1->msg.s1ap_E_RABReleaseCommandIEs, - &m2->msg.s1ap_E_RABReleaseCommandIEs); - } else { - ret = s1ap_compare_s1ap_e_rabreleaseresponseies( - &m1->msg.s1ap_E_RABReleaseResponseIEs, - &m2->msg.s1ap_E_RABReleaseResponseIEs); - } - break; - - case S1ap_ProcedureCode_id_E_RABReleaseIndication: - ret = s1ap_compare_s1ap_e_rabreleaseindicationies( - &m1->msg.s1ap_E_RABReleaseIndicationIEs, - &m2->msg.s1ap_E_RABReleaseIndicationIEs); - break; - - case S1ap_ProcedureCode_id_InitialContextSetup: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_initialcontextsetuprequesties( - &m1->msg.s1ap_InitialContextSetupRequestIEs, - &m2->msg.s1ap_InitialContextSetupRequestIEs); - } else { - ret = s1ap_compare_s1ap_initialcontextsetupresponseies( - &m1->msg.s1ap_InitialContextSetupResponseIEs, - &m2->msg.s1ap_InitialContextSetupResponseIEs); - } - break; - - case S1ap_ProcedureCode_id_Paging: - ret = s1ap_compare_s1ap_pagingies( - &m1->msg.s1ap_PagingIEs, - &m2->msg.s1ap_PagingIEs); - break; - - case S1ap_ProcedureCode_id_downlinkNASTransport: - ret = s1ap_compare_s1ap_downlinknastransporties( - &m1->msg.s1ap_DownlinkNASTransportIEs, - &m2->msg.s1ap_DownlinkNASTransportIEs); - break; - - case S1ap_ProcedureCode_id_initialUEMessage: - ret = s1ap_compare_s1ap_initialuemessageies( - &m1->msg.s1ap_InitialUEMessageIEs, - &m2->msg.s1ap_InitialUEMessageIEs); - break; - - case S1ap_ProcedureCode_id_uplinkNASTransport: - ret = s1ap_compare_s1ap_uplinknastransporties( - &m1->msg.s1ap_UplinkNASTransportIEs, - &m2->msg.s1ap_UplinkNASTransportIEs); - break; - - case S1ap_ProcedureCode_id_Reset: - ret = s1ap_compare_s1ap_reseties( - &m1->msg.s1ap_ResetIEs, - &m2->msg.s1ap_ResetIEs); - break; - - case S1ap_ProcedureCode_id_ErrorIndication: - ret = s1ap_compare_s1ap_errorindicationies( - &m1->msg.s1ap_ErrorIndicationIEs, - &m2->msg.s1ap_ErrorIndicationIEs); - break; - - case S1ap_ProcedureCode_id_NASNonDeliveryIndication: - ret = s1ap_compare_s1ap_nasnondeliveryindication_ies( - &m1->msg.s1ap_NASNonDeliveryIndication_IEs, - &m2->msg.s1ap_NASNonDeliveryIndication_IEs); - break; - - case S1ap_ProcedureCode_id_S1Setup: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_s1setuprequesties( - &m1->msg.s1ap_S1SetupRequestIEs, - &m2->msg.s1ap_S1SetupRequestIEs); - } else if (present == S1AP_PDU_PR_successfulOutcome) { - ret = s1ap_compare_s1ap_s1setupresponseies( - &m1->msg.s1ap_S1SetupResponseIEs, - &m2->msg.s1ap_S1SetupResponseIEs); - } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) { - ret = s1ap_compare_s1ap_s1setupfailureies( - &m1->msg.s1ap_S1SetupFailureIEs, - &m2->msg.s1ap_S1SetupFailureIEs); - } - break; - - case S1ap_ProcedureCode_id_UEContextReleaseRequest: - ret = s1ap_compare_s1ap_uecontextreleaserequesties( - &m1->msg.s1ap_UEContextReleaseRequestIEs, - &m2->msg.s1ap_UEContextReleaseRequestIEs); - break; - - case S1ap_ProcedureCode_id_DownlinkS1cdma2000tunneling: - ret = s1ap_compare_s1ap_downlinks1cdma2000tunnelingies( - &m1->msg.s1ap_DownlinkS1cdma2000tunnelingIEs, - &m2->msg.s1ap_DownlinkS1cdma2000tunnelingIEs); - break; - - case S1ap_ProcedureCode_id_UplinkS1cdma2000tunneling: - ret = s1ap_compare_s1ap_uplinks1cdma2000tunnelingies( - &m1->msg.s1ap_UplinkS1cdma2000tunnelingIEs, - &m2->msg.s1ap_UplinkS1cdma2000tunnelingIEs); - break; - - case S1ap_ProcedureCode_id_UEContextModification: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_uecontextmodificationrequesties( - &m1->msg.s1ap_UEContextModificationRequestIEs, - &m2->msg.s1ap_UEContextModificationRequestIEs); - } else if (present == S1AP_PDU_PR_successfulOutcome) { - ret = s1ap_compare_s1ap_uecontextmodificationresponseies( - &m1->msg.s1ap_UEContextModificationResponseIEs, - &m2->msg.s1ap_UEContextModificationResponseIEs); - } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) { - ret = s1ap_compare_s1ap_uecontextmodificationfailureies( - &m1->msg.s1ap_UEContextModificationFailureIEs, - &m2->msg.s1ap_UEContextModificationFailureIEs); - } - break; - - case S1ap_ProcedureCode_id_UECapabilityInfoIndication: - ret = s1ap_compare_s1ap_uecapabilityinfoindicationies( - &m1->msg.s1ap_UECapabilityInfoIndicationIEs, - &m2->msg.s1ap_UECapabilityInfoIndicationIEs); - break; - - case S1ap_ProcedureCode_id_UEContextRelease: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_uecontextreleasecommandies( - &m1->msg.s1ap_UEContextReleaseCommandIEs, - &m2->msg.s1ap_UEContextReleaseCommandIEs); - } else { - ret = s1ap_compare_s1ap_uecontextreleasecompleteies( - &m1->msg.s1ap_UEContextReleaseCompleteIEs, - &m2->msg.s1ap_UEContextReleaseCompleteIEs); - } - break; - - case S1ap_ProcedureCode_id_eNBStatusTransfer: - ret = s1ap_compare_s1ap_enbstatustransferies( - &m1->msg.s1ap_ENBStatusTransferIEs, - &m2->msg.s1ap_ENBStatusTransferIEs); - break; - - case S1ap_ProcedureCode_id_MMEStatusTransfer: - ret = s1ap_compare_s1ap_mmestatustransferies( - &m1->msg.s1ap_MMEStatusTransferIEs, - &m2->msg.s1ap_MMEStatusTransferIEs); - break; - - case S1ap_ProcedureCode_id_DeactivateTrace: - ret = s1ap_compare_s1ap_deactivatetraceies( - &m1->msg.s1ap_DeactivateTraceIEs, - &m2->msg.s1ap_DeactivateTraceIEs); - break; - - case S1ap_ProcedureCode_id_TraceStart: - ret = s1ap_compare_s1ap_tracestarties( - &m1->msg.s1ap_TraceStartIEs, - &m2->msg.s1ap_TraceStartIEs); - break; - - case S1ap_ProcedureCode_id_TraceFailureIndication: - ret = s1ap_compare_s1ap_tracefailureindicationies( - &m1->msg.s1ap_TraceFailureIndicationIEs, - &m2->msg.s1ap_TraceFailureIndicationIEs); - break; - - case S1ap_ProcedureCode_id_ENBConfigurationUpdate: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_enbconfigurationupdateies( - &m1->msg.s1ap_ENBConfigurationUpdateIEs, - &m2->msg.s1ap_ENBConfigurationUpdateIEs); - } else if (present == S1AP_PDU_PR_successfulOutcome) { - ret = s1ap_compare_s1ap_enbconfigurationupdateacknowledgeies( - &m1->msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs, - &m2->msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs); - } else { - ret = s1ap_compare_s1ap_enbconfigurationupdatefailureies( - &m1->msg.s1ap_ENBConfigurationUpdateFailureIEs, - &m2->msg.s1ap_ENBConfigurationUpdateFailureIEs); - } - break; - - case S1ap_ProcedureCode_id_MMEConfigurationUpdate: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_mmeconfigurationupdateies( - &m1->msg.s1ap_MMEConfigurationUpdateIEs, - &m2->msg.s1ap_MMEConfigurationUpdateIEs); - } else if (present == S1AP_PDU_PR_successfulOutcome) { - ret = s1ap_compare_s1ap_mmeconfigurationupdateacknowledgeies( - &m1->msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs, - &m2->msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs); - } else { - ret = s1ap_compare_s1ap_mmeconfigurationupdatefailureies( - &m1->msg.s1ap_MMEConfigurationUpdateFailureIEs, - &m2->msg.s1ap_MMEConfigurationUpdateFailureIEs); - } - break; - - case S1ap_ProcedureCode_id_LocationReportingControl: - ret = s1ap_compare_s1ap_locationreportingcontrolies( - &m1->msg.s1ap_LocationReportingControlIEs, - &m2->msg.s1ap_LocationReportingControlIEs); - break; - - case S1ap_ProcedureCode_id_LocationReportingFailureIndication: - ret = s1ap_compare_s1ap_locationreportingfailureindicationies( - &m1->msg.s1ap_LocationReportingFailureIndicationIEs, - &m2->msg.s1ap_LocationReportingFailureIndicationIEs); - break; - - case S1ap_ProcedureCode_id_LocationReport: - ret = s1ap_compare_s1ap_locationreporties( - &m1->msg.s1ap_LocationReportIEs, - &m2->msg.s1ap_LocationReportIEs); - break; - - case S1ap_ProcedureCode_id_OverloadStart: - ret = s1ap_compare_s1ap_overloadstarties( - &m1->msg.s1ap_OverloadStartIEs, - &m2->msg.s1ap_OverloadStartIEs); - break; - - case S1ap_ProcedureCode_id_OverloadStop: - ret = s1ap_compare_s1ap_overloadstopies( - &m1->msg.s1ap_OverloadStopIEs, - &m2->msg.s1ap_OverloadStopIEs); - break; - - case S1ap_ProcedureCode_id_WriteReplaceWarning: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_writereplacewarningrequesties( - &m1->msg.s1ap_WriteReplaceWarningRequestIEs, - &m2->msg.s1ap_WriteReplaceWarningRequestIEs); - } else { - ret = s1ap_compare_s1ap_writereplacewarningresponseies( - &m1->msg.s1ap_WriteReplaceWarningResponseIEs, - &m2->msg.s1ap_WriteReplaceWarningResponseIEs); - } - break; - - case S1ap_ProcedureCode_id_eNBDirectInformationTransfer: - ret = s1ap_compare_s1ap_enbdirectinformationtransferies( - &m1->msg.s1ap_ENBDirectInformationTransferIEs, - &m2->msg.s1ap_ENBDirectInformationTransferIEs); - break; - - case S1ap_ProcedureCode_id_MMEDirectInformationTransfer: - - ret = s1ap_compare_s1ap_mmedirectinformationtransferies( - &m1->msg.s1ap_MMEDirectInformationTransferIEs, - &m2->msg.s1ap_MMEDirectInformationTransferIEs); - break; - - case S1ap_ProcedureCode_id_PrivateMessage: - case S1ap_ProcedureCode_id_eNBConfigurationTransfer: - case S1ap_ProcedureCode_id_MMEConfigurationTransfer: - AssertFatal(0, "TODO"); - break; - - case S1ap_ProcedureCode_id_CellTrafficTrace: - ret = s1ap_compare_s1ap_celltraffictraceies( - &m1->msg.s1ap_CellTrafficTraceIEs, - &m2->msg.s1ap_CellTrafficTraceIEs); - break; - - case S1ap_ProcedureCode_id_Kill: - if (present == S1AP_PDU_PR_initiatingMessage) { - ret = s1ap_compare_s1ap_killrequesties( - &m1->msg.s1ap_KillRequestIEs, - &m2->msg.s1ap_KillRequestIEs); - } else { - ret = s1ap_compare_s1ap_killresponseies( - &m1->msg.s1ap_KillResponseIEs, - &m2->msg.s1ap_KillResponseIEs); - } - break; - - case S1ap_ProcedureCode_id_downlinkUEAssociatedLPPaTransport: - ret = s1ap_compare_s1ap_downlinkueassociatedlppatransport_ies( - &m1->msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs, - &m2->msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs); - break; - - case S1ap_ProcedureCode_id_uplinkUEAssociatedLPPaTransport: - ret = s1ap_compare_s1ap_uplinkueassociatedlppatransport_ies( - &m1->msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs, - &m2->msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs); - break; - - case S1ap_ProcedureCode_id_downlinkNonUEAssociatedLPPaTransport: - ret = s1ap_compare_s1ap_downlinknonueassociatedlppatransport_ies( - &m1->msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs, - &m2->msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs); - break; - - case S1ap_ProcedureCode_id_uplinkNonUEAssociatedLPPaTransport: - ret = s1ap_compare_s1ap_uplinknonueassociatedlppatransport_ies( - &m1->msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs, - &m2->msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs); - break; - - default: - AssertFatal(0, "Unknown procedure code %ld", m1->procedureCode); - } - return ret; -} - +//asn_comp_rval_t * et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1, s1ap_message * const m2, const uint32_t constraints) +//{ +//} void update_xpath_node_mme_ue_s1ap_id(et_s1ap_t * const s1ap, xmlNode *node, const S1ap_MME_UE_S1AP_ID_t new_id) { @@ -583,8 +192,6 @@ void update_xpath_nodes_mme_ue_s1ap_id(et_s1ap_t * const s1ap_payload, xmlNodeSe //------------------------------------------------------------------------------ int et_s1ap_update_mme_ue_s1ap_id(et_packet_t * const packet, const S1ap_MME_UE_S1AP_ID_t old_id, const S1ap_MME_UE_S1AP_ID_t new_id) { - - xmlChar xpath_expression[ET_XPATH_EXPRESSION_MAX_LENGTH]; int ret = 0; xmlDocPtr doc = NULL; diff --git a/openair3/TEST/oaisim_mme_client_test.c b/openair3/TEST/oaisim_mme_client_test.c index 0e89511865..28d37ce4d7 100644 --- a/openair3/TEST/oaisim_mme_client_test.c +++ b/openair3/TEST/oaisim_mme_client_test.c @@ -35,7 +35,6 @@ #include "s1ap_common.h" #include "s1ap_eNB.h" #include "s1ap_mme.h" -#include "s1ap_ies_defs.h" char ip_addr[] = "127.0.0.1"; diff --git a/openair3/TEST/oaisim_mme_itti_test.c b/openair3/TEST/oaisim_mme_itti_test.c index 243023e610..bf8ad44714 100644 --- a/openair3/TEST/oaisim_mme_itti_test.c +++ b/openair3/TEST/oaisim_mme_itti_test.c @@ -69,7 +69,7 @@ int main(int argc, char *argv[]) /* Calling each layer init function */ log_init(&mme_config); - itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL); + itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info); sctp_init(&mme_config); udp_init(&mme_config); s1ap_mme_init(&mme_config); diff --git a/openair3/TEST/oaisim_mme_s1ap_test.c b/openair3/TEST/oaisim_mme_s1ap_test.c index 1f7c1d3bbf..aa8f92aee1 100644 --- a/openair3/TEST/oaisim_mme_s1ap_test.c +++ b/openair3/TEST/oaisim_mme_s1ap_test.c @@ -145,16 +145,16 @@ int main(int argc, char *argv[]) } for (i = 0; i < sizeof(s1ap_test) / sizeof(s1ap_test_t); i++) { - struct s1ap_message_s message; + S1AP_S1AP_PDU_t pdu; uint8_t *buffer; uint32_t length; - memset(&message, 0, sizeof(struct s1ap_message_s)); + memset(&pdu, 0, sizeof(pdu)); printf("Trying to decode %s procedure with asn1c decoder\n", s1ap_test[i].procedure_name); - if (s1ap_mme_decode_pdu(&message, s1ap_test[i].buffer, + if (s1ap_mme_decode_pdu(&pdu, s1ap_test[i].buffer, s1ap_test[i].buf_len) < 0) { - if (s1ap_eNB_decode_pdu(&message, s1ap_test[i].buffer, + if (s1ap_eNB_decode_pdu(&pdu, s1ap_test[i].buffer, s1ap_test[i].buf_len) < 0) { printf("Failed to decode this message\n"); } else { @@ -167,7 +167,7 @@ int main(int argc, char *argv[]) printf("Trying to encode %s procedure with asn1c encoder\n", s1ap_test[i].procedure_name); - if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { + if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) { printf("Failed to encode this message on MME side, trying eNB side\n"); } else { compare_buffer(buffer, length, s1ap_test[i].buffer, s1ap_test[i].buf_len); diff --git a/openair3/TEST/oaisim_mme_sctp_test.c b/openair3/TEST/oaisim_mme_sctp_test.c index d810f9ee8f..40ecc7f8f5 100644 --- a/openair3/TEST/oaisim_mme_sctp_test.c +++ b/openair3/TEST/oaisim_mme_sctp_test.c @@ -35,7 +35,6 @@ #include "s1ap_common.h" #include "s1ap_eNB.h" #include "s1ap_mme.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_encoder.h" #include "s1ap_eNB_decoder.h" diff --git a/openair3/TEST/oaisim_mme_test_s1c.c b/openair3/TEST/oaisim_mme_test_s1c.c index 1f130af0d3..f006434b90 100644 --- a/openair3/TEST/oaisim_mme_test_s1c.c +++ b/openair3/TEST/oaisim_mme_test_s1c.c @@ -57,7 +57,6 @@ static void *eNB_app_task (void *args_p); void mme_test_s1_start_test(instance_t instance); //------------------------------------------------------------------------------ static char *conf_config_file_name = NULL; -static char *itti_dump_file = NULL; const Enb_properties_array_t *enb_properties = NULL; int16_t glog_level = LOG_INFO; int16_t glog_verbosity = LOG_MED; @@ -77,10 +76,6 @@ static void get_options (int argc, char **argv) while ((c = getopt_long (argc, argv, "K:g:G:O:",NULL,NULL)) != -1) { switch (c) { - case 'K': - itti_dump_file = strdup(optarg); - break; - case 'O': conf_config_file_name = optarg; break; @@ -316,7 +311,7 @@ int main( int argc, char **argv ) /* Read eNB configuration file */ enb_properties = enb_config_init(conf_config_file_name); - itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, itti_dump_file); + itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info); itti_wait_ready(1); diff --git a/openair3/TEST/oaisim_mme_test_s1c_s1ap.c b/openair3/TEST/oaisim_mme_test_s1c_s1ap.c index 993fad2f89..09ed44d4f0 100644 --- a/openair3/TEST/oaisim_mme_test_s1c_s1ap.c +++ b/openair3/TEST/oaisim_mme_test_s1c_s1ap.c @@ -43,7 +43,6 @@ #include "intertask_interface.h" #include "s1ap_eNB_default_values.h" #include "s1ap_common.h" -#include "s1ap_ies_defs.h" #include "s1ap_eNB_defs.h" #include "s1ap_eNB_management_procedures.h" #include "assertions.h" @@ -162,8 +161,8 @@ void s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_associa } void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p, - net_ip_address_t *mme_ip_address, - net_ip_address_t *local_ip_addr) + net_ip_address_t *mme_ip_address, + net_ip_address_t *local_ip_addr) { MessageDef *message_p = NULL; sctp_new_association_req_t *sctp_new_association_req_p = NULL; diff --git a/openair3/UDP/udp_eNB_task.c b/openair3/UDP/udp_eNB_task.c index 4d6bd6e033..2943ca4088 100644 --- a/openair3/UDP/udp_eNB_task.c +++ b/openair3/UDP/udp_eNB_task.c @@ -276,13 +276,10 @@ void udp_eNB_receiver(struct udp_socket_desc_s *udp_sock_pP) * if the queue is full. */ /* look for HACK_RLC_UM_LIMIT for others places related to the hack. Please do not remove this comment. */ - //if (itti_send_msg_to_task(udp_sock_pP->task_id, INSTANCE_DEFAULT, message_p) < 0) { if (itti_try_send_msg_to_task(udp_sock_pP->task_id, INSTANCE_DEFAULT, message_p) < 0) { -#if 0 - LOG_I(UDP_, "Failed to send message %d to task %d\n", + LOG_E(UDP_, "Failed to send message %d to task %d\n", UDP_DATA_IND, udp_sock_pP->task_id); -#endif itti_free(TASK_UDP, message_p); itti_free(TASK_UDP, forwarded_buffer); return; diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c index 5ded228f6b..75a7825669 100644 --- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c +++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c @@ -929,7 +929,7 @@ void calibrate_rf(openair0_device *device) { bladerf_set_loopback(brf->dev,BLADERF_LB_NONE); bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, (unsigned int) device->openair0_cfg->rx_gain[0]-device->openair0_cfg[0].rx_gain_offset[0]); bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->tx_gain[0]); - // write_output("blade_rf_test.m","rxs",calib_buff,RXDCLENGTH,1,1); + // LOG_M("blade_rf_test.m","rxs",calib_buff,RXDCLENGTH,1,1); } /*! \brief Initialize Openair BLADERF target. It returns 0 if OK diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h index 82cb69baba..22c01c47e6 100644 --- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h +++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h @@ -135,12 +135,6 @@ struct em1_private_s { extern struct em1_private_s *em1_devices[MAX_EM1_DEVICES]; /* em1_drv.c */ -#if 0 -static int em1_open(struct inode *inode, struct file *file); -static int em1_release(struct inode *inode, struct file *file); -static int __init em1_init(void); -static void __exit em1_cleanup(void); -#endif int em1_user_op_enter(struct em1_private_s *pv, wait_queue_t *wait, wait_queue_head_t *wh, int busy_flag, int new_state); void em1_user_op_leave(struct em1_private_s *pv, wait_queue_t *wait, @@ -153,9 +147,6 @@ ssize_t em1_write(struct file *file, const char __user *buf, size_t size, loff_t ssize_t em1_read(struct file *file, char __user *buf, size_t size, loff_t *ppos); /* em1_dev.c */ -#if 0 -static irqreturn_t irq_handler(int irq, void *dev_id); -#endif int __devinit em1_probe(struct pci_dev *dev, const struct pci_device_id *id); void __devexit em1_remove(struct pci_dev *dev); @@ -184,14 +175,6 @@ struct em1_ioctl_fifo_params { size_t count; }; -#if 0 -static int em1_ioctl_fifo_write(struct em1_private_s *pv, - struct em1_ioctl_fifo_params *p); -static int em1_ioctl_fifo_read(struct em1_private_s *pv, - struct em1_ioctl_fifo_params *p); -static int em1_ioctl_alloc(struct em1_private_s *pv, void **buf); -#endif - /* * Local Variables: * c-file-style: "linux" diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index a99c9d7a5d..d704b9604c 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -376,6 +376,7 @@ static void trx_usrp_end(openair0_device *device) { s->tx_md.end_of_burst = true; s->tx_stream->send("", 0, s->tx_md); s->tx_md.end_of_burst = false; + sleep(1); #if defined(USRP_REC_PLAY) } #endif @@ -483,7 +484,11 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, s->tx_md.start_of_burst = false; s->tx_md.end_of_burst = false; } - + if(flags==10){ // fail safe mode + s->tx_md.has_time_spec = false; + s->tx_md.start_of_burst = false; + s->tx_md.end_of_burst = true; + } if (cc>1) { std::vector buff_ptrs; for (int i=0; ifrom_mobipass.start; -uint32_t old_len = qstate->from_mobipass.len; -b = qstate->from_mobipass.buf[qstate->from_mobipass.start]; -mh = (struct mobipass_header *)(b+14); -uint32_t old_pts = qstate->from_mobipass.len ? ntohl(mh->timestamp) : -1; -b=NULL; -mh=NULL; -#endif - while (qstate->from_mobipass.len) { b = qstate->from_mobipass.buf[qstate->from_mobipass.start]; mh = (struct mobipass_header *)(b+14); @@ -222,10 +212,6 @@ nodata: *Q = 0; log_missed_sample(qstate, timestamp); - -#if 0 -printf("no sample timestamp %u pt %u start %d old_start %d old_pt %u len %d old len %d\n", timestamp, packet_timestamp, qstate->from_mobipass.start, old_start, old_pts, qstate->from_mobipass.len, old_len); -#endif } /* doesn't work with delay more than 1s */ diff --git a/targets/ARCH/tcp_bridge/README.tcp_bridge_oai b/targets/ARCH/tcp_bridge/README.tcp_bridge_oai index ef0588ddee..05a520f6ae 100644 --- a/targets/ARCH/tcp_bridge/README.tcp_bridge_oai +++ b/targets/ARCH/tcp_bridge/README.tcp_bridge_oai @@ -4,6 +4,7 @@ To build the basic simulator: cd [openair top directory] . oaienv cd cmake_targets + ./build_oai -I -w USRP ./build_oai --basic-simulator cd ../common/utils/T/tracer make @@ -20,14 +21,14 @@ In the other terminal, run: cd [openair top directory] cd cmake_targets/basic_simulator/enb export ENODEB=1 - sudo -E ./lte-softmodem -O [configuration file] + sudo -E ./lte-softmodem -O [configuration file] --T_stdout 0 [configuration file] is just a regular configuration file. The eNB needs an EPC. To run the UE, open a terminal and run: cd [openair top directory] cd cmake_targets/basic_simulator/ue - sudo ./lte-uesoftmodem -C 2680000000 -r 25 + sudo ./lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 140 Adapt the value of -r, it has to match the value N_RB_DL in the configuration file of the eNB. (Same for -C which should match the value downlink_frequency in the configuration file.) diff --git a/targets/ARCH/tcp_bridge/tcp_bridge.c b/targets/ARCH/tcp_bridge/tcp_bridge.c index 127ba39bbc..a59b969da4 100644 --- a/targets/ARCH/tcp_bridge/tcp_bridge.c +++ b/targets/ARCH/tcp_bridge/tcp_bridge.c @@ -225,14 +225,6 @@ int tcp_bridge_read(openair0_device *device, openair0_timestamp *timestamp, void b = &t->b[t->bstart]; -#if 0 -typedef struct { - int32_t data[30720]; /* max 20MHz */ - unsigned long timestamp; - int size; -} input_buffer; -#endif - if (b->timestamp != t->read_timestamp) abort(); if (b->size != nsamps * 4) abort(); diff --git a/targets/COMMON/openairinterface5g_limits.h b/targets/COMMON/openairinterface5g_limits.h index 98de4a024f..1c27f65585 100644 --- a/targets/COMMON/openairinterface5g_limits.h +++ b/targets/COMMON/openairinterface5g_limits.h @@ -4,13 +4,23 @@ #if defined(CBMIMO1) || defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_LMSSDR) # define NUMBER_OF_eNB_MAX 1 # define NUMBER_OF_RU_MAX 2 -# define NUMBER_OF_UE_MAX 16 -# define NUMBER_OF_CONNECTED_eNB_MAX 3 +# ifndef UE_EXPANSION +# define NUMBER_OF_UE_MAX 16 +# define NUMBER_OF_CONNECTED_eNB_MAX 3 +# else +# define NUMBER_OF_UE_MAX 256 +# define NUMBER_OF_CONNECTED_eNB_MAX 1 +# endif #else # define NUMBER_OF_eNB_MAX 7 # define NUMBER_OF_RU_MAX 32 -# define NUMBER_OF_UE_MAX 20 -# define NUMBER_OF_CONNECTED_eNB_MAX 3 +# ifndef UE_EXPANSION +# define NUMBER_OF_UE_MAX 20 +# define NUMBER_OF_CONNECTED_eNB_MAX 3 +# else +# define NUMBER_OF_UE_MAX 256 +# define NUMBER_OF_CONNECTED_eNB_MAX 1 +# endif # if defined(STANDALONE) && STANDALONE==1 # undef NUMBER_OF_eNB_MAX # undef NUMBER_OF_UE_MAX @@ -19,7 +29,6 @@ # define NUMBER_OF_UE_MAX 3 # define NUMBER_OF_RU_MAX 3 # endif - # if defined(LARGE_SCALE) && LARGE_SCALE # undef NUMBER_OF_eNB_MAX # undef NUMBER_OF_UE_MAX diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf index 38e471ac54..73da2a8b3f 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf @@ -48,7 +48,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 1; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -16; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf index 2c11ea3187..bd0503a466 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf @@ -48,7 +48,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 1; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -16; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf index 81ef6cf881..9a2ca88257 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -52,7 +52,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 1; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -27; pdsch_p_b = 0; pusch_n_SB = 1; @@ -164,6 +164,8 @@ MACRLCs = ( num_cc = 1; tr_s_preference = "local_L1"; tr_n_preference = "local_RRC"; + puSch10xSnr = 200; + puCch10xSnr = 200; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf index 087f379c4d..7d73e55c6c 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf @@ -52,7 +52,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 1; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -27; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf index 614a85d54c..69166672d7 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf @@ -52,7 +52,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -27; pdsch_p_b = 0; pusch_n_SB = 1; @@ -198,7 +198,9 @@ MACRLCs = ( num_cc = 1; tr_s_preference = "local_L1"; tr_n_preference = "local_RRC"; - phy_test_mode = 1; + phy_test_mode = 0; + puSch10xSnr = 200; + puCch10xSnr = 200; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf index 4de676ec9a..71a163209d 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf @@ -54,7 +54,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; #pdsch_referenceSignalPower = -27; pdsch_referenceSignalPower = -30; pdsch_p_b = 0; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf index 03241ec694..a6da42c2f5 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf @@ -52,7 +52,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -27; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf index 42ab1e81c7..550de4e1a2 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf @@ -39,7 +39,7 @@ eNBs = downlink_frequency = 2685000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; - N_RB_DL = 50; + N_RB_DL = 100; Nid_cell_mbsfn = 0; nb_antenna_ports = 1; nb_antennas_tx = 1; @@ -55,7 +55,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -27; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf index 771bf09499..2b5a0ca684 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf @@ -55,7 +55,7 @@ eNBs = pucch_delta_shift = 1; pucch_nRB_CQI = 0; pucch_nCS_AN = 0; - pucch_n1_AN = 32; + pucch_n1_AN = 0; pdsch_referenceSignalPower = -27; pdsch_p_b = 0; pusch_n_SB = 1; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf index 8a0f5feb58..41b322fb55 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf @@ -11,14 +11,14 @@ RUs = ( tr_preference = "udp_if4p5"; nb_tx = 1; nb_rx = 1; - max_pdschReferenceSignalPower = -15; - max_rxgain = 120; + max_pdschReferenceSignalPower = -27; + max_rxgain = 125; bands = [7,13]; } ); log_config = { - global_log_level ="debug"; + global_log_level ="info"; global_log_verbosity ="medium"; hw_log_level ="info"; hw_log_verbosity ="medium"; diff --git a/targets/README.txt b/targets/README.txt index 8b8463e7ef..e50664bbe1 100644 --- a/targets/README.txt +++ b/targets/README.txt @@ -19,7 +19,7 @@ First, you must have all four openair SW directories, openair1, openair2, openai - libconfig++8-dev - libgtk-3-dev - libpgm-5.1 and libpgm-5.1-dev for distributed simulation with reliable multicast transmport - - libxml2 and libxml2-dev and gccxml + - libxml2 and libxml2-dev - libforms-bin libforms-dev - nettle-dev nettle-bin openssl libssl-dev - libatlas-base-dev and libatlas-headers (for Ubuntu 11.04, libatlas-dev instead of libatlas-headers) @@ -113,4 +113,3 @@ Please choose the web server that should be automatically configured to run phpM Web server to reconfigure automatically: [*] apache2 [ ] lighttpd - \ No newline at end of file diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index 34fe45377e..4b7e5e41bb 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -216,7 +216,9 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam wakeup_prach_eNB_br(eNB,NULL,proc->frame_rx,proc->subframe_rx); #endif } -//LOG_I(PHY,"eNB_uespec_RX proc RX %d.%d TX %d.%d \n", proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx);/////////////*********added + + release_UE_in_freeList(eNB->Mod_id); + // UE-specific RX processing for subframe n if (nfapi_mode == 0 || nfapi_mode == 1) { phy_procedures_eNB_uespec_RX(eNB, proc); @@ -237,31 +239,35 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam eNB->UL_INFO.subframe = proc->subframe_rx; eNB->UL_INFO.module_id = eNB->Mod_id; eNB->UL_INFO.CC_id = eNB->CC_id; -//LOG_I(PHY,"UL_INFO %d.%d \n", eNB->UL_INFO.frame, eNB->UL_INFO.subframe);/////////////*********added eNB->if_inst->UL_indication(&eNB->UL_INFO); pthread_mutex_unlock(&eNB->UL_INFO_mutex); - + /* this conflict resolution may be totally wrong, to be tested */ + /* CONFLICT RESOLUTION: BEGIN */ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 0 ); if(oai_exit) return(-1); if(eNB->single_thread_flag || get_nprocs() <= 4){ +#ifndef PHY_TX_THREAD phy_procedures_eNB_TX(eNB, proc, 1); +#endif } + /* CONFLICT RESOLUTION: what about this release_thread call, has it to be done? if yes, where? */ + //if (release_thread(&proc->mutex_rxtx,&proc->instance_cnt_rxtx,thread_name)<0) return(-1); + /* CONFLICT RESOLUTION: END */ stop_meas( &softmodem_stats_rxtx_sf ); LOG_D(PHY,"%s() Exit proc[rx:%d%d tx:%d%d]\n", __FUNCTION__, proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx); -#if 0 LOG_D(PHY, "rxtx:%lld nfapi:%lld phy:%lld tx:%lld rx:%lld prach:%lld ofdm:%lld ", softmodem_stats_rxtx_sf.diff_now, nfapi_meas.diff_now, TICK_TO_US(eNB->phy_proc), TICK_TO_US(eNB->phy_proc_tx), TICK_TO_US(eNB->phy_proc_rx), TICK_TO_US(eNB->rx_prach), - TICK_TO_US(eNB->ofdm_mod_stats), - softmodem_stats_rxtx_sf.diff_now, nfapi_meas.diff_now); + TICK_TO_US(eNB->ofdm_mod_stats) + ); LOG_D(PHY, "dlsch[enc:%lld mod:%lld scr:%lld rm:%lld t:%lld i:%lld] rx_dft:%lld ", TICK_TO_US(eNB->dlsch_encoding_stats), @@ -293,7 +299,6 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam TICK_TO_US(eNB->ulsch_tc_intl1_stats), TICK_TO_US(eNB->ulsch_tc_intl2_stats) ); -#endif return(0); } @@ -417,11 +422,13 @@ static void* eNB_thread_rxtx( void* param ) { exit_fun( "ERROR pthread_cond_signal" ); } pthread_mutex_unlock( &proc->mutex_rxtx ); - if(get_nprocs() >= 8) wakeup_tx(eNB,eNB->proc.ru_proc); - else if(get_nprocs() > 4) - { - phy_procedures_eNB_TX(eNB, proc, 1); - wakeup_txfh(proc,eNB->proc.ru_proc); + if (nfapi_mode!=2){ + if(get_nprocs() >= 8) wakeup_tx(eNB,eNB->proc.ru_proc); + else + { + phy_procedures_eNB_TX(eNB, proc, 1); + wakeup_txfh(proc,eNB->proc.ru_proc); + } } } // while !oai_exit @@ -434,30 +441,6 @@ static void* eNB_thread_rxtx( void* param ) { return &eNB_thread_rxtx_status; } - -#if 0 //defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) -// Wait for eNB application initialization to be complete (eNB registration to MME) -static void wait_system_ready (char *message, volatile int *start_flag) { - - static char *indicator[] = {". ", ".. ", "... ", ".... ", ".....", - " ....", " ...", " ..", " .", " "}; - int i = 0; - - while ((!oai_exit) && (*start_flag == 0)) { - LOG_N(EMU, message, indicator[i]); - fflush(stdout); - i = (i + 1) % (sizeof(indicator) / sizeof(indicator[0])); - usleep(200000); - } - - LOG_D(EMU,"\n"); -} -#endif - - - - - void eNB_top(PHY_VARS_eNB *eNB, int frame_rx, int subframe_rx, char *string,RU_t *ru) { eNB_proc_t *proc = &eNB->proc; @@ -778,6 +761,7 @@ void wakeup_prach_eNB_br(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe) { } #endif + /*! * \brief The prach receive thread of eNB. * \param param is a \ref eNB_proc_t structure which contains the info what to process. @@ -1075,7 +1059,7 @@ void kill_eNB_proc(int inst) { pthread_join( proc->pthread_prach_br, (void**)&status ); pthread_mutex_destroy( &proc->mutex_prach_br ); pthread_cond_destroy( &proc->cond_prach_br ); -#endif +#endif LOG_I(PHY, "Destroying UL_INFO mutex\n"); pthread_mutex_destroy(&eNB->UL_INFO_mutex); for (i=0;i<2;i++) { @@ -1140,7 +1124,7 @@ void init_transport(PHY_VARS_eNB *eNB) { LOG_I(PHY, "Initialise transport\n"); for (i=0; idlsch[i][j] = new_eNB_dlsch(1,8,NSOFT,fp->N_RB_DL,0,fp); if (!eNB->dlsch[i][j]) { @@ -1152,7 +1136,7 @@ void init_transport(PHY_VARS_eNB *eNB) { } } - LOG_I(PHY,"Allocating Transport Channel Buffer for ULSCH, UE %d\n",i); + LOG_D(PHY,"Allocating Transport Channel Buffer for ULSCH, UE %d\n",i); eNB->ulsch[1+i] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,fp->N_RB_UL, 0); if (!eNB->ulsch[1+i]) { diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 987b063360..292e5b2aa0 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -114,6 +114,7 @@ static int DEFENBS[] = {0}; #include "T.h" +#include "pdcp.h" extern volatile int oai_exit; extern int emulate_rf; @@ -681,6 +682,19 @@ void fh_if4p5_north_out(RU_t *ru) { } +/* add fail safe for late command */ +typedef enum { + STATE_BURST_NORMAL = 0, + STATE_BURST_TERMINATE = 1, + STATE_BURST_STOP_1 = 2, + STATE_BURST_STOP_2 = 3, + STATE_BURST_RESTART = 4, +} late_control_e; + +volatile late_control_e late_control=STATE_BURST_NORMAL; + +/* add fail safe for late command end */ + static void* emulatedRF_thread(void* param) { RU_proc_t *proc = (RU_proc_t *) param; int microsec = 500; // length of time to sleep, in miliseconds @@ -746,9 +760,12 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) { proc->timestamp_rx = ts-ru->ts_offset; - //AssertFatal(rxs == fp->samples_per_tti, - //"rx_rf: Asked for %d samples, got %d from USRP\n",fp->samples_per_tti,rxs); - if (rxs != fp->samples_per_tti) LOG_E(PHY, "rx_rf: Asked for %d samples, got %d from USRP\n",fp->samples_per_tti,rxs); +// AssertFatal(rxs == fp->samples_per_tti, +// "rx_rf: Asked for %d samples, got %d from USRP\n",fp->samples_per_tti,rxs); + if(rxs != fp->samples_per_tti){ + LOG_E(PHY,"rx_rf: Asked for %d samples, got %d from USRP\n",fp->samples_per_tti,rxs); + late_control=STATE_BURST_TERMINATE; + } if (proc->first_rx == 1) { ru->ts_offset = proc->timestamp_rx; @@ -766,6 +783,16 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) { proc->subframe_rx = (proc->timestamp_rx / fp->samples_per_tti)%10; // synchronize first reception to frame 0 subframe 0 +#ifdef PHY_TX_THREAD + proc->timestamp_phy_tx = proc->timestamp_rx+((sf_ahead-1)*fp->samples_per_tti); + proc->subframe_phy_tx = (proc->subframe_rx+(sf_ahead-1))%10; + proc->frame_phy_tx = (proc->subframe_rx>(9-(sf_ahead-1))) ? (proc->frame_rx+1)&1023 : proc->frame_rx; +#else + proc->timestamp_tx = proc->timestamp_rx+(sf_ahead*fp->samples_per_tti); + proc->subframe_tx = (proc->subframe_rx+sf_ahead)%10; + proc->frame_tx = (proc->subframe_rx>(9-sf_ahead)) ? (proc->frame_rx+1)&1023 : proc->frame_rx; +#endif + //proc->timestamp_tx = proc->timestamp_rx+(sf_ahead*fp->samples_per_tti); //proc->subframe_tx = (proc->subframe_rx+sf_ahead)%10; //proc->frame_tx = (proc->subframe_rx>(9-sf_ahead)) ? (proc->frame_rx+1)&1023 : proc->frame_rx; @@ -804,8 +831,12 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) { if (rxs != fp->samples_per_tti) { +#if defined(USRP_REC_PLAY) + exit_fun("Exiting IQ record/playback"); +#else //exit_fun( "problem receiving samples" ); LOG_E(PHY, "problem receiving samples"); +#endif } } @@ -840,7 +871,7 @@ void tx_rf(RU_t *ru) { (prevSF_type == SF_UL) && (nextSF_type == SF_DL)) { flags = 2; // start of burst - sf_extension = ru->N_TA_offset<<1; + sf_extension = ru->N_TA_offset; } if ((fp->frame_type == TDD) && @@ -848,15 +879,55 @@ void tx_rf(RU_t *ru) { (prevSF_type == SF_UL) && (nextSF_type == SF_UL)) { flags = 4; // start of burst and end of burst (only one DL SF between two UL) - sf_extension = ru->N_TA_offset<<1; + sf_extension = ru->N_TA_offset; } - +#if defined(__x86_64) || defined(__i386__) +#ifdef __AVX2__ + sf_extension = (sf_extension)&0xfffffff8; +#else + sf_extension = (sf_extension)&0xfffffffc; +#endif +#elif defined(__arm__) + sf_extension = (sf_extension)&0xfffffffc; +#endif + for (i=0; inb_tx; i++) txp[i] = (void*)&ru->common.txdata[i][(proc->subframe_tx*fp->samples_per_tti)-sf_extension]; + /* add fail safe for late command */ + if(late_control!=STATE_BURST_NORMAL){//stop burst + switch (late_control) { + case STATE_BURST_TERMINATE: + flags=10; // end of burst and no time spec + late_control=STATE_BURST_STOP_1; + break; + + case STATE_BURST_STOP_1: + flags=0; // no send + late_control=STATE_BURST_STOP_2; + return;//no send + break; + + case STATE_BURST_STOP_2: + flags=0; // no send + late_control=STATE_BURST_RESTART; + return;//no send + break; + + case STATE_BURST_RESTART: + flags=2; // start burst + late_control=STATE_BURST_NORMAL; + break; + default: + LOG_D(PHY,"[TXPATH] RU %d late_control %d not implemented\n",ru->idx, late_control); + break; + } + } + /* add fail safe for late command end */ + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx ); - + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (proc->timestamp_tx-ru->openair0_cfg.tx_sample_advance)&0xffffffff ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); // prepare tx buffer pointers @@ -873,8 +944,11 @@ void tx_rf(RU_t *ru) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); - AssertFatal(txs == siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen); - +// AssertFatal(txs == siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen); + if( (txs != siglen+sf_extension) && (late_control==STATE_BURST_NORMAL) ){ /* add fail safe for late command */ + late_control=STATE_BURST_TERMINATE; + LOG_E(PHY,"TX : Timeout (sent %d/%d) state =%d\n",txs, siglen,late_control); + } } } @@ -1183,13 +1257,14 @@ void wakeup_eNBs(RU_t *ru) { LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top); - if (ru->num_eNB==1 && ru->eNB_top!=0 && get_nprocs() <= 4) { + if ((ru->num_eNB==1 && ru->eNB_top!=0 && get_nprocs() <= 4) || single_thread_flag) { // call eNB function directly char string[20]; sprintf(string,"Incoming RU %d",ru->idx); LOG_D(PHY,"RU %d Call eNB_top\n",ru->idx); ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string,ru); + ru->proc.emulate_rf_busy = 0; } else { @@ -1203,9 +1278,7 @@ void wakeup_eNBs(RU_t *ru) { { LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx); } - if(!eNB_list[i]->single_thread_flag){ - ru->proc.emulate_rf_busy = 0; - } + ru->proc.emulate_rf_busy = 0; } } } @@ -1344,8 +1417,8 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) { cfg->tx_freq[i] = (double)fp->dl_CarrierFreq; cfg->rx_freq[i] = (double)fp->ul_CarrierFreq; - cfg->tx_gain[i] = ru->att_tx; - cfg->rx_gain[i] = ru->max_rxgain-ru->att_rx; + cfg->tx_gain[i] = (double)ru->att_tx; + cfg->rx_gain[i] = ru->max_rxgain-(double)ru->att_rx; cfg->configFilename = rf_config_file; printf("channel %d, Setting tx_gain offset %f, rx_gain offset %f, tx_freq %f, rx_freq %f\n", @@ -1442,6 +1515,12 @@ static void* ru_stats_thread(void* param) { return(NULL); } +#ifdef PHY_TX_THREAD +int first_phy_tx = 1; +volatile int16_t phy_tx_txdataF_end; +volatile int16_t phy_tx_end; +#endif + static void* ru_thread_tx( void* param ) { RU_t *ru = (RU_t*)param; RU_proc_t *proc = &ru->proc; @@ -1456,6 +1535,7 @@ static void* ru_thread_tx( void* param ) { //wait_sync("ru_thread_tx"); wait_on_condition(&proc->mutex_FH1,&proc->cond_FH1,&proc->instance_cnt_FH1,"ru_thread_tx"); + printf( "ru_thread_tx ready\n"); while (!oai_exit) { @@ -1511,6 +1591,9 @@ static void* ru_thread( void* param ) { // set default return value ru_thread_status = 0; +#if defined(PRE_SCD_THREAD) + dlsch_ue_select_tbl_in_use = 1; +#endif // set default return value @@ -1615,20 +1698,38 @@ static void* ru_thread( void* param ) { if (ru->fh_south_in) ru->fh_south_in(ru,&frame,&subframe); else AssertFatal(1==0, "No fronthaul interface at south port"); -/* - LOG_D(PHY,"AFTER fh_south_in - SFN/SF:%d%d RU->proc[RX:%d%d TX:%d%d] RC.eNB[0][0]:[RX:%d%d TX(SFN):%d]\n", - frame,subframe, - proc->frame_rx,proc->subframe_rx, - proc->frame_tx,proc->subframe_tx, - RC.eNB[0][0]->proc.frame_rx,RC.eNB[0][0]->proc.subframe_rx, - RC.eNB[0][0]->proc.frame_tx); +#ifdef PHY_TX_THREAD + if(first_phy_tx == 0) + { + phy_tx_end = 0; + phy_tx_txdataF_end = 0; + if(pthread_mutex_lock(&ru->proc.mutex_phy_tx) != 0){ + LOG_E( PHY, "[RU] ERROR pthread_mutex_lock for phy tx thread (IC %d)\n", ru->proc.instance_cnt_phy_tx); + exit_fun( "error locking mutex_rxtx" ); + } + if (ru->proc.instance_cnt_phy_tx==-1) { + ++ru->proc.instance_cnt_phy_tx; + + // the thread can now be woken up + AssertFatal(pthread_cond_signal(&ru->proc.cond_phy_tx) == 0, "ERROR pthread_cond_signal for phy_tx thread\n"); + }else{ + LOG_E(PHY,"phy tx thread busy, skipping\n"); + ++ru->proc.instance_cnt_phy_tx; + } + pthread_mutex_unlock( &ru->proc.mutex_phy_tx ); + } else { + phy_tx_end = 1; + phy_tx_txdataF_end = 1; + } + first_phy_tx = 0; +#endif + LOG_D(PHY,"RU thread (do_prach %d, is_prach_subframe %d), received frame %d, subframe %d\n", ru->do_prach, is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx), proc->frame_rx,proc->subframe_rx); -*/ - if (oai_exit) break; + if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)==1)) { wakeup_prach_ru(ru); } @@ -1649,10 +1750,39 @@ static void* ru_thread( void* param ) { // If this proc is to provide synchronization, do so wakeup_slaves(proc); +#if defined(PRE_SCD_THREAD) + new_dlsch_ue_select_tbl_in_use = dlsch_ue_select_tbl_in_use; + dlsch_ue_select_tbl_in_use = !dlsch_ue_select_tbl_in_use; + memcpy(&pre_scd_eNB_UE_stats,&RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.eNB_UE_stats, sizeof(eNB_UE_STATS)*MAX_NUM_CCs*NUMBER_OF_UE_MAX); + memcpy(&pre_scd_activeUE, &RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.active, sizeof(boolean_t)*NUMBER_OF_UE_MAX); + if (pthread_mutex_lock(&ru->proc.mutex_pre_scd)!= 0) { + LOG_E( PHY, "[eNB] error locking proc mutex for eNB pre scd\n"); + exit_fun("error locking mutex_time"); + } + + ru->proc.instance_pre_scd++; + + if (ru->proc.instance_pre_scd == 0) { + if (pthread_cond_signal(&ru->proc.cond_pre_scd) != 0) { + LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB pre scd\n" ); + exit_fun( "ERROR pthread_cond_signal cond_pre_scd" ); + } + }else{ + LOG_E( PHY, "[eNB] frame %d subframe %d rxtx busy instance_pre_scd %d\n", + frame,subframe,ru->proc.instance_pre_scd ); + } + + if (pthread_mutex_unlock(&ru->proc.mutex_pre_scd)!= 0) { + LOG_E( PHY, "[eNB] error unlocking mutex_pre_scd mutex for eNB pre scd\n"); + exit_fun("error unlocking mutex_pre_scd"); + } +#endif + // wakeup all eNB processes waiting for this RU if (ru->num_eNB>0) wakeup_eNBs(ru); - if(get_nprocs() <= 4 || single_thread_flag){ +#ifndef PHY_TX_THREAD + if(get_nprocs() <= 4 || ru->num_eNB==0 || single_thread_flag){ // do TX front-end processing if needed (precoding and/or IDFTs) if (ru->feptx_prec) ru->feptx_prec(ru); @@ -1666,7 +1796,16 @@ static void* ru_thread( void* param ) { } proc->emulate_rf_busy = 0; } +#else + struct timespec time_req, time_rem; + time_req.tv_sec = 0; + time_req.tv_nsec = 10000; + while((!oai_exit)&&(phy_tx_end == 0)){ + nanosleep(&time_req,&time_rem); + continue; + } +#endif } @@ -1746,8 +1885,8 @@ void *ru_thread_synch(void *arg) { /* if ((peak_val > 300000) && (sync_pos > 0)) { // if (sync_pos++ > 3) { - write_output("ru_sync.m","sync",(void*)&sync_corr[0],fp->samples_per_tti*5,1,2); - write_output("ru_rx.m","rxs",(void*)ru->ru_time.rxdata[0][0],fp->samples_per_tti*10,1,1); + LOG_M("ru_sync.m","sync",(void*)&sync_corr[0],fp->samples_per_tti*5,1,2); + LOG_M("ru_rx.m","rxs",(void*)ru->ru_time.rxdata[0][0],fp->samples_per_tti*10,1,1); exit(-1); } */ @@ -1763,6 +1902,168 @@ void *ru_thread_synch(void *arg) { } +#if defined(PRE_SCD_THREAD) +void* pre_scd_thread( void* param ){ + static int eNB_pre_scd_status; + protocol_ctxt_t ctxt; + int frame; + int subframe; + int min_rb_unit[MAX_NUM_CCs]; + int CC_id; + int Mod_id; + RU_t *ru = (RU_t*)param; + Mod_id = ru->eNB_list[0]->Mod_id; + + frame = 0; + subframe = 4; + thread_top_init("pre_scd_thread",0,870000,1000000,1000000); + + while (!oai_exit) { + if(oai_exit){ + break; + } + pthread_mutex_lock(&ru->proc.mutex_pre_scd ); + if (ru->proc.instance_pre_scd < 0) { + pthread_cond_wait(&ru->proc.cond_pre_scd, &ru->proc.mutex_pre_scd); + } + pthread_mutex_unlock(&ru->proc.mutex_pre_scd); + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, Mod_id, ENB_FLAG_YES, + NOT_A_RNTI, frame, subframe,Mod_id); + pdcp_run(&ctxt); + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + + rrc_rx_tx(&ctxt, CC_id); + min_rb_unit[CC_id] = get_min_rb_unit(Mod_id, CC_id); + } + + pre_scd_nb_rbs_required(Mod_id, frame, subframe,min_rb_unit,pre_nb_rbs_required[new_dlsch_ue_select_tbl_in_use]); + + if (subframe==9) { + subframe=0; + frame++; + frame&=1023; + } else { + subframe++; + } + pthread_mutex_lock(&ru->proc.mutex_pre_scd ); + ru->proc.instance_pre_scd--; + pthread_mutex_unlock(&ru->proc.mutex_pre_scd); + } + eNB_pre_scd_status = 0; + return &eNB_pre_scd_status; +} +#endif + +#ifdef PHY_TX_THREAD +/*! + * \brief The phy tx thread of eNB. + * \param param is a \ref eNB_proc_t structure which contains the info what to process. + * \returns a pointer to an int. The storage is not on the heap and must not be freed. + */ +static void* eNB_thread_phy_tx( void* param ) { + static int eNB_thread_phy_tx_status; + + + RU_t *ru = (RU_t*)param; + RU_proc_t *proc = &ru->proc; + PHY_VARS_eNB **eNB_list = ru->eNB_list; + + eNB_rxtx_proc_t proc_rxtx; + + // set default return value + eNB_thread_phy_tx_status = 0; + + thread_top_init("eNB_thread_phy_tx",1,500000L,1000000L,20000000L); + + + while (!oai_exit) { + + if (oai_exit) break; + + + if (wait_on_condition(&proc->mutex_phy_tx,&proc->cond_phy_tx,&proc->instance_cnt_phy_tx,"eNB_phy_tx_thread") < 0) break; + + LOG_D(PHY,"Running eNB phy tx procedures\n"); + if(ru->num_eNB == 1){ + proc_rxtx.subframe_tx = proc->subframe_phy_tx; + proc_rxtx.frame_tx = proc->frame_phy_tx; + phy_procedures_eNB_TX(eNB_list[0], &proc_rxtx, 1); + phy_tx_txdataF_end = 1; + if(pthread_mutex_lock(&ru->proc.mutex_rf_tx) != 0){ + LOG_E( PHY, "[RU] ERROR pthread_mutex_lock for rf tx thread (IC %d)\n", ru->proc.instance_cnt_rf_tx); + exit_fun( "error locking mutex_rf_tx" ); + } + if (ru->proc.instance_cnt_rf_tx==-1) { + ++ru->proc.instance_cnt_rf_tx; + ru->proc.frame_tx = proc->frame_phy_tx; + ru->proc.subframe_tx = proc->subframe_phy_tx; + ru->proc.timestamp_tx = proc->timestamp_phy_tx; + + // the thread can now be woken up + AssertFatal(pthread_cond_signal(&ru->proc.cond_rf_tx) == 0, "ERROR pthread_cond_signal for rf_tx thread\n"); + }else{ + LOG_E(PHY,"rf tx thread busy, skipping\n"); + late_control=STATE_BURST_TERMINATE; + } + pthread_mutex_unlock( &ru->proc.mutex_rf_tx ); + } + if (release_thread(&proc->mutex_phy_tx,&proc->instance_cnt_phy_tx,"eNB_thread_phy_tx") < 0) break; + phy_tx_end = 1; + } + + LOG_I(PHY, "Exiting eNB thread PHY TX\n"); + + eNB_thread_phy_tx_status = 0; + return &eNB_thread_phy_tx_status; +} + + +static void* rf_tx( void* param ) { + static int rf_tx_status; + + RU_t *ru = (RU_t*)param; + RU_proc_t *proc = &ru->proc; + + // set default return value + rf_tx_status = 0; + + thread_top_init("rf_tx",1,500000L,1000000L,20000000L); + + while (!oai_exit) { + + if (oai_exit) break; + + + if (wait_on_condition(&proc->mutex_rf_tx,&proc->cond_rf_tx,&proc->instance_cnt_rf_tx,"rf_tx_thread") < 0) break; + + LOG_D(PHY,"Running eNB rf tx procedures\n"); + if(ru->num_eNB == 1){ + // do TX front-end processing if needed (precoding and/or IDFTs) + if (ru->feptx_prec) ru->feptx_prec(ru); + // do OFDM if needed + if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru); + if(!emulate_rf){ + // do outgoing fronthaul (south) if needed + if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru); + + if (ru->fh_north_out) ru->fh_north_out(ru); + } + } + if (release_thread(&proc->mutex_rf_tx,&proc->instance_cnt_rf_tx,"rf_tx") < 0) break; + if(proc->instance_cnt_rf_tx >= 0){ + late_control=STATE_BURST_TERMINATE; + LOG_E(PHY,"detect rf tx busy change mode TX failsafe\n"); + } + } + + LOG_I(PHY, "Exiting rf TX\n"); + + rf_tx_status = 0; + return &rf_tx_status; +} +#endif + int start_if(struct RU_t_s *ru,struct PHY_VARS_eNB_s *eNB) { @@ -1854,6 +2155,15 @@ void init_RU_proc(RU_t *ru) { pthread_cond_init( &proc->cond_prach_br, NULL); pthread_attr_init( &proc->attr_prach_br); #endif + +#ifdef PHY_TX_THREAD + proc->instance_cnt_phy_tx = -1; + pthread_mutex_init( &proc->mutex_phy_tx, NULL); + pthread_cond_init( &proc->cond_phy_tx, NULL); + proc->instance_cnt_rf_tx = -1; + pthread_mutex_init( &proc->mutex_rf_tx, NULL); + pthread_cond_init( &proc->cond_rf_tx, NULL); +#endif #ifndef DEADLINE_SCHEDULER attr_FH = &proc->attr_FH; @@ -1868,6 +2178,21 @@ void init_RU_proc(RU_t *ru) { #endif pthread_create( &proc->pthread_FH, attr_FH, ru_thread, (void*)ru ); + +#if defined(PRE_SCD_THREAD) + proc->instance_pre_scd = -1; + pthread_mutex_init( &proc->mutex_pre_scd, NULL); + pthread_cond_init( &proc->cond_pre_scd, NULL); + pthread_create(&proc->pthread_pre_scd, NULL, pre_scd_thread, (void*)ru); + pthread_setname_np(proc->pthread_pre_scd, "pre_scd_thread"); +#endif + +#ifdef PHY_TX_THREAD + pthread_create( &proc->pthread_phy_tx, NULL, eNB_thread_phy_tx, (void*)ru ); + pthread_setname_np( proc->pthread_phy_tx, "phy_tx_thread" ); + pthread_create( &proc->pthread_rf_tx, NULL, rf_tx, (void*)ru ); +#endif + if(emulate_rf) pthread_create( &proc->pthread_emulateRF, attr_emulateRF, emulatedRF_thread, (void*)proc ); @@ -1956,10 +2281,10 @@ void kill_RU_proc(int inst) pthread_cond_signal(&proc->cond_asynch_rxtx); pthread_mutex_unlock(&proc->mutex_asynch_rxtx); - LOG_D(PHY, "Joining pthread_FH\n"); + /*LOG_D(PHY, "Joining pthread_FH\n"); pthread_join(proc->pthread_FH, NULL); LOG_D(PHY, "Joining pthread_FHTX\n"); - pthread_join(proc->pthread_FH1, NULL); + pthread_join(proc->pthread_FH1, NULL);*/ if (ru->function == NGFI_RRU_IF4p5) { LOG_D(PHY, "Joining pthread_prach\n"); pthread_join(proc->pthread_prach, NULL); @@ -2125,12 +2450,12 @@ void configure_rru(int idx, ru->frame_parms.dl_CarrierFreq = config->tx_freq[0]; ru->frame_parms.ul_CarrierFreq = config->rx_freq[0]; if (ru->frame_parms.dl_CarrierFreq == ru->frame_parms.ul_CarrierFreq) { - ru->frame_parms.frame_type = TDD; - ru->frame_parms.tdd_config = config->tdd_config[0]; - ru->frame_parms.tdd_config_S = config->tdd_config_S[0]; + LOG_I(PHY,"Setting RRU to TDD frame type\n"); + ru->frame_parms.frame_type = TDD; + ru->frame_parms.tdd_config = config->tdd_config[0]; + ru->frame_parms.tdd_config_S = config->tdd_config_S[0]; } - else - ru->frame_parms.frame_type = FDD; + else ru->frame_parms.frame_type = FDD; ru->att_tx = config->att_tx[0]; ru->att_rx = config->att_rx[0]; ru->frame_parms.N_RB_DL = config->N_RB_DL[0]; @@ -2138,9 +2463,9 @@ void configure_rru(int idx, ru->frame_parms.threequarter_fs = config->threequarter_fs[0]; ru->frame_parms.pdsch_config_common.referenceSignalPower = ru->max_pdschReferenceSignalPower-config->att_tx[0]; if (ru->function==NGFI_RRU_IF4p5) { - ru->frame_parms.att_rx = ru->att_rx; - ru->frame_parms.att_tx = ru->att_tx; - + ru->frame_parms.att_rx = ru->att_rx; + ru->frame_parms.att_tx = ru->att_tx; + LOG_I(PHY,"Setting ru->function to NGFI_RRU_IF4p5, prach_FrequOffset %d, prach_ConfigIndex %d, att (%d,%d)\n", config->prach_FreqOffset[0],config->prach_ConfigIndex[0],ru->att_tx,ru->att_rx); ru->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset = config->prach_FreqOffset[0]; @@ -2434,6 +2759,37 @@ void init_RU(char *rf_config_file) { +void stop_ru(RU_t *ru) { + +#if defined(PRE_SCD_THREAD) || defined(PHY_TX_THREAD) + int *status; +#endif + printf("Stopping RU %p processing threads\n",(void*)ru); +#if defined(PRE_SCD_THREAD) + if(ru){ + ru->proc.instance_pre_scd = 0; + pthread_cond_signal( &ru->proc.cond_pre_scd ); + pthread_join(ru->proc.pthread_pre_scd, (void**)&status ); + pthread_mutex_destroy(&ru->proc.mutex_pre_scd ); + pthread_cond_destroy(&ru->proc.cond_pre_scd ); + } +#endif +#ifdef PHY_TX_THREAD + if(ru){ + ru->proc.instance_cnt_phy_tx = 0; + pthread_cond_signal(&ru->proc.cond_phy_tx); + pthread_join( ru->proc.pthread_phy_tx, (void**)&status ); + pthread_mutex_destroy( &ru->proc.mutex_phy_tx ); + pthread_cond_destroy( &ru->proc.cond_phy_tx ); + ru->proc.instance_cnt_rf_tx = 0; + pthread_cond_signal(&ru->proc.cond_rf_tx); + pthread_join( ru->proc.pthread_rf_tx, (void**)&status ); + pthread_mutex_destroy( &ru->proc.mutex_rf_tx ); + pthread_cond_destroy( &ru->proc.cond_rf_tx ); + } +#endif +} + void stop_RU(int nb_ru) { for (int inst = 0; inst < nb_ru; inst++) { @@ -2465,7 +2821,7 @@ void RCconfig_RU(void) { - RC.ru_mask=(1<rfdevice.trx_end_func) + if (RC.ru[ru_id] && RC.ru[ru_id]->rfdevice.trx_end_func) { RC.ru[ru_id]->rfdevice.trx_end_func(&RC.ru[ru_id]->rfdevice); - if (RC.ru[ru_id] && RC.ru[ru_id]->ifdevice.trx_end_func) + RC.ru[ru_id]->rfdevice.trx_end_func = NULL; + } + if (RC.ru[ru_id] && RC.ru[ru_id]->ifdevice.trx_end_func) { RC.ru[ru_id]->ifdevice.trx_end_func(&RC.ru[ru_id]->ifdevice); + RC.ru[ru_id]->ifdevice.trx_end_func = NULL; + } } @@ -459,7 +462,7 @@ void *l2l1_task(void *arg) { switch (ITTI_MSG_ID(message_p)) { case INITIALIZE_MESSAGE: /* Start eNB thread */ - LOG_D(EMU, "L2L1 TASK received %s\n", ITTI_MSG_NAME(message_p)); + printf("L2L1 TASK received %s\n", ITTI_MSG_NAME(message_p)); start_eNB = 1; break; @@ -471,7 +474,7 @@ void *l2l1_task(void *arg) { break; default: - LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p)); + printf("Received unexpected message %s\n", ITTI_MSG_NAME(message_p)); break; } } while (ITTI_MSG_ID(message_p) != INITIALIZE_MESSAGE); @@ -498,11 +501,11 @@ void *l2l1_task(void *arg) { break; case MESSAGE_TEST: - LOG_I(EMU, "Received %s\n", ITTI_MSG_NAME(message_p)); + printf("Received %s\n", ITTI_MSG_NAME(message_p)); break; default: - LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p)); + printf("Received unexpected message %s\n", ITTI_MSG_NAME(message_p)); break; } @@ -553,19 +556,21 @@ static void get_options(void) { if (start_telnetsrv) { load_module_shlib("telnetsrv",NULL,0); } + if (strlen(logmem_filename) > 0) { + log_mem_filename = &logmem_filename[0]; + log_mem_flag = 1; + printf("Enabling OPT for log save at memory %s\n",log_mem_filename); + logInit_log_mem(); + } + -#if T_TRACER - paramdef_t cmdline_ttraceparams[] =CMDLINE_TTRACEPARAMS_DESC ; - config_process_cmdline( cmdline_ttraceparams,sizeof(cmdline_ttraceparams)/sizeof(paramdef_t),NULL); -#endif if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT)) ) { memset((void*)&RC,0,sizeof(RC)); /* Read RC configuration file */ RCConfig(); NB_eNB_INST = RC.nb_inst; - NB_RU = RC.nb_RU; - printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,NB_RU); + printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,RC.nb_RU); if (nonbiotflag <= 0) { load_NB_IoT(); printf(" nb_nbiot_rrc_inst %d, nb_nbiot_L1_inst %d, nb_nbiot_macrlc_inst %d\n", @@ -578,11 +583,6 @@ static void get_options(void) { } -#if T_TRACER -int T_nowait = 0; /* by default we wait for the tracer */ -int T_port = 2021; /* default port to listen to to wait for the tracer */ -int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */ -#endif @@ -933,10 +933,6 @@ int main( int argc, char **argv ) exit_fun("[SOFTMODEM] Error, configuration module init failed\n"); } -#ifdef DEBUG_CONSOLE - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); -#endif mode = normal_txrx; memset(&openair0_cfg[0],0,sizeof(openair0_config_t)*MAX_CARDS); @@ -957,7 +953,7 @@ int main( int argc, char **argv ) #if T_TRACER - T_init(T_port, 1-T_nowait, T_dont_fork); + T_Config_Init(); #endif @@ -967,11 +963,6 @@ int main( int argc, char **argv ) printf("configuring for RAU/RRU\n"); - - if (ouput_vcd) { - VCD_SIGNAL_DUMPER_INIT("/tmp/openair_dump_eNB.vcd"); - } - if (opp_enabled ==1) { reset_opp_meas(); } @@ -981,7 +972,7 @@ int main( int argc, char **argv ) log_set_instance_type (LOG_INSTANCE_ENB); printf("ITTI init\n"); - itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, itti_dump_file); + itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info); // initialize mscgen log after ITTI MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX); @@ -1233,6 +1224,7 @@ int main( int argc, char **argv ) // connect the TX/RX buffers + sleep(1); /* wait for thread activation */ printf("Sending sync to all threads\n"); @@ -1284,8 +1276,12 @@ int main( int argc, char **argv ) printf("stopping MODEM threads\n"); // cleanup + for (ru_id=0;ru_idrfdevice.trx_end_func) - RC.ru[ru_id]->rfdevice.trx_end_func(&RC.ru[ru_id]->rfdevice); - if (RC.ru[ru_id]->ifdevice.trx_end_func) - RC.ru[ru_id]->ifdevice.trx_end_func(&RC.ru[ru_id]->ifdevice); + for(ru_id=0; ru_idrfdevice.trx_end_func) { + RC.ru[ru_id]->rfdevice.trx_end_func(&RC.ru[ru_id]->rfdevice); + RC.ru[ru_id]->rfdevice.trx_end_func = NULL; + } + if (RC.ru[ru_id]->ifdevice.trx_end_func) { + RC.ru[ru_id]->ifdevice.trx_end_func(&RC.ru[ru_id]->ifdevice); + RC.ru[ru_id]->ifdevice.trx_end_func = NULL; + } } - if (ouput_vcd) - VCD_SIGNAL_DUMPER_CLOSE(); if (opt_enabled == 1) terminate_opt(); diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index bf33befcbe..0cda69bdaa 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -24,7 +24,7 @@ #include #include "rt_wrapper.h" #include "../../ARCH/COMMON/common_lib.h" -#undef MALLOC +//#undef MALLOC #include "assertions.h" #include "msc.h" #include "PHY/types.h" @@ -52,6 +52,8 @@ #define CONFIG_HLP_DBGUEPR "UE run normal prach power ramping, but don't continue random-access\n" #define CONFIG_HLP_CALPRACH "UE run normal prach with maximum power, but don't continue random-access\n" #define CONFIG_HLP_NOL2CN "bypass L2 and upper layers\n" +#define CONFIG_HLP_SIML1 "activate RF simulator instead of HW\n" +#define CONFIG_HLP_NUMUE "number of UE instances\n" #define CONFIG_HLP_UERXG "set UE RX gain\n" #define CONFIG_HLP_UERXGOFF "external UE amplifier offset\n" #define CONFIG_HLP_UETXG "set UE TX gain\n" @@ -80,10 +82,10 @@ #define CONFIG_HLP_MSLOTS "Skip the missed slots/subframes \n" #define CONFIG_HLP_ULMCS "Set the maximum uplink MCS\n" #define CONFIG_HLP_TDD "Set hardware to TDD mode (default: FDD). Used only with -U (otherwise set in config file).\n" +#define CONFIG_HLP_SNR "Set average SNR in dB (for --siml1 option)\n" #define CONFIG_HLP_UE "Set the lte softmodem as a UE\n" #define CONFIG_HLP_L2MONW "Enable L2 wireshark messages on localhost \n" #define CONFIG_HLP_L2MONP "Enable L2 pcap messages on localhost \n" -#define CONFIG_HLP_VCD "Enable VCD (generated file will is named openair_dump_eNB.vcd, read it with target/RT/USER/eNB.gtkw\n" #define CONFIG_HLP_TQFS "Apply three-quarter of sampling frequency, 23.04 Msps to reduce the data rate on USB/PCIe transfers (only valid for 20 MHz)\n" #define CONFIG_HLP_TPORT "tracer port\n" #define CONFIG_HLP_NOTWAIT "don't wait for tracer, start immediately\n" @@ -131,15 +133,17 @@ /* optname helpstr paramflags XXXptr defXXXval type numelt */ /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ #define CMDLINE_UEPARAMS_DESC { \ -{"ue-rxgain", CONFIG_HLP_UERXG, 0, dblptr:&(rx_gain[0][0]), defdblval:0, TYPE_DOUBLE, 0}, \ +{"siml1", CONFIG_HLP_SIML1, PARAMFLAG_BOOL, iptr:&simL1flag, defintval:0, TYPE_INT, 0}, \ +{"U", CONFIG_HLP_NUMUE, 0, u8ptr:&NB_UE_INST, defuintval:1, TYPE_UINT, 0}, \ +{"ue-rxgain", CONFIG_HLP_UERXG, 0, dblptr:&(rx_gain[0][0]), defdblval:130, TYPE_DOUBLE, 0}, \ {"ue-rxgain-off", CONFIG_HLP_UERXGOFF, 0, dblptr:&rx_gain_off, defdblval:0, TYPE_DOUBLE, 0}, \ {"ue-txgain", CONFIG_HLP_UETXG, 0, dblptr:&(tx_gain[0][0]), defdblval:0, TYPE_DOUBLE, 0}, \ {"ue-nb-ant-rx", CONFIG_HLP_UENANTR, 0, u8ptr:&nb_antenna_rx, defuintval:1, TYPE_UINT8, 0}, \ {"ue-nb-ant-tx", CONFIG_HLP_UENANTT, 0, u8ptr:&nb_antenna_tx, defuintval:1, TYPE_UINT8, 0}, \ {"ue-scan-carrier", CONFIG_HLP_UESCAN, PARAMFLAG_BOOL, iptr:&UE_scan_carrier, defintval:0, TYPE_INT, 0}, \ -{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:90, TYPE_INT, 0}, \ -{"emul-iface", CONFIG_HLP_EMULIFACE, 0, strptr:&emul_iface, defstrval:"lo", TYPE_STRING, 100}, \ -{"L2-emul", NULL, 0, u8ptr:&nfapi_mode, defuintval:3, TYPE_UINT8, 0}, \ +{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:23, TYPE_INT, 0}, \ +{"emul-iface", CONFIG_HLP_EMULIFACE, 0, strptr:&emul_iface, defstrval:"lo", TYPE_STRING, 100}, \ +{"L2-emul", NULL, 0, u8ptr:&nfapi_mode, defuintval:3, TYPE_UINT8, 0}, \ {"num-ues", NULL, 0, u8ptr:&(NB_UE_INST), defuintval:1, TYPE_UINT8, 0}, \ {"r" , CONFIG_HLP_PRB, 0, u8ptr:&(frame_parms[0]->N_RB_DL), defintval:25, TYPE_UINT8, 0}, \ {"dlsch-demod-shift", CONFIG_HLP_DLSHIFT, 0, iptr:(int32_t *)&dlsch_demod_shift, defintval:0, TYPE_INT, 0}, \ @@ -172,15 +176,14 @@ {"a" , CONFIG_HLP_CHOFF, 0, iptr:&chain_offset, defintval:0, TYPE_INT, 0}, \ {"d" , CONFIG_HLP_SOFTS, PARAMFLAG_BOOL, uptr:(uint32_t *)&do_forms, defintval:0, TYPE_INT8, 0}, \ {"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, i8ptr:&threequarter_fs, defintval:0, TYPE_INT8, 0}, \ -{"K" , CONFIG_HLP_ITTIL, PARAMFLAG_NOFREE, strptr:&itti_dump_file, defstrval:"/tmp/itti.dump", TYPE_STRING, 0}, \ {"m" , CONFIG_HLP_DLMCS, 0, uptr:&target_dl_mcs, defintval:0, TYPE_UINT, 0}, \ {"t" , CONFIG_HLP_ULMCS, 0, uptr:&target_ul_mcs, defintval:0, TYPE_UINT, 0}, \ {"W" , CONFIG_HLP_L2MONW, 0, strptr:(char **)&in_ip, defstrval:"127.0.0.1", TYPE_STRING, sizeof(in_ip)}, \ {"P" , CONFIG_HLP_L2MONP, 0, strptr:(char **)&in_path, defstrval:"/tmp/oai_opt.pcap", TYPE_STRING, sizeof(in_path)}, \ -{"V" , CONFIG_HLP_VCD, PARAMFLAG_BOOL, iptr:&ouput_vcd, defintval:0, TYPE_INT, 0}, \ {"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \ {"S" , CONFIG_HLP_MSLOTS, PARAMFLAG_BOOL, u8ptr:&exit_missed_slots, defintval:1, TYPE_UINT8, 0}, \ {"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, iptr:&tddflag, defintval:0, TYPE_INT, 0}, \ +{"s" , CONFIG_HLP_SNR, 0, iptr:&snr_dB, defintval:25, TYPE_INT, 0}, \ {"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&numerology, defintval:0, TYPE_INT, 0}, \ {"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&emulate_rf, defintval:0, TYPE_INT, 0}, \ {"codingw" , CONFIG_HLP_CODINGW, PARAMFLAG_BOOL, iptr:&codingw, defintval:0, TYPE_INT, 0}, \ @@ -201,6 +204,7 @@ {"g" , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \ {"G" , CONFIG_HLP_LOGV, 0, uptr:&glog_verbosity, defintval:0, TYPE_UINT16, 0}, \ {"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \ +{"log-mem", NULL, 0, strptr:(char **)&logmem_filename, defstrval:"./logmem.log", TYPE_STRING, sizeof(logmem_filename)}, \ } #define CMDLINE_ONLINELOG_IDX 0 #define CMDLINE_GLOGLEVEL_IDX 1 @@ -208,21 +212,6 @@ #define CMDLINE_STARTTELN_IDX 3 -extern int T_port; -extern int T_nowait; -extern int T_dont_fork; - -/*------------------------------------------------------------------------------------------------------------------------------------------*/ -/* command line parameters for TTRACE utility */ -/* optname helpstr paramflags XXXptr defXXXval type numelt */ -/*------------------------------------------------------------------------------------------------------------------------------------------*/ -#define CMDLINE_TTRACEPARAMS_DESC { \ -{"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:0, TYPE_INT, 0}, \ -{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0}, \ -{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:1, TYPE_INT, 0}, \ -} - - /***************************************************************************************************************************************/ /* */ extern pthread_cond_t sync_cond; @@ -263,6 +252,7 @@ extern void kill_eNB_proc(int inst); // In lte-ru.c extern void init_RU(const char*); +extern void stop_ru(RU_t *ru); extern void init_RU_proc(RU_t *ru); extern void stop_RU(int nb_ru); extern void kill_RU_proc(int inst); @@ -272,7 +262,7 @@ extern void set_function_spec_param(RU_t *ru); extern int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg); extern void fill_ue_band_info(void); -extern void init_UE(int,int,int,int); +extern void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correction, int phy_test, int UE_scan, int UE_scan_carrier, runmode_t mode,int rxgain,int txpowermax, LTE_DL_FRAME_PARMS *fp); extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char * name); extern void reset_opp_meas(void); @@ -284,6 +274,10 @@ extern void init_te_thread(PHY_VARS_eNB *); extern void kill_td_thread(PHY_VARS_eNB *); extern void kill_te_thread(PHY_VARS_eNB *); +extern void RCConfig_sim(void); +extern void init_ocm(double,double); +extern void init_ue_devices(PHY_VARS_UE *); + PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, uint8_t abstraction_flag); @@ -292,4 +286,11 @@ void init_eNB_afterRU(void); extern int stop_L1L2(module_id_t enb_id); extern int restart_L1L2(module_id_t enb_id); + +extern void init_UE_stub_single_thread(int nb_inst,int eMBMS_active, int uecap_xer_in, char *emul_iface); + +extern PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, + uint8_t UE_id, + uint8_t abstraction_flag); + #endif diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index a0174ea332..04ae0644a3 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -79,7 +79,7 @@ void init_UE_threads(int); void init_UE_threads_stub(int); void init_UE_single_thread_stub(int); void *UE_thread(void *arg); -void init_UE(int nb_inst,int,int,int); +void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correction, int phy_test, int UE_scan, int UE_scan_carrier, runmode_t mode,int rxgain,int txpowermax,LTE_DL_FRAME_PARMS *fp); void init_UE_stub(int nb_inst,int,int,char*); void init_UE_stub_single_thread(int nb_inst,int,int,char*); int init_timer_thread(void); @@ -93,6 +93,8 @@ extern int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind); extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind); extern int multicast_link_write_sock(int groupP, char *dataP, uint32_t sizeP); +extern int simL1flag; + //extern int tx_req_UE_MAC1(); void ue_stub_rx_handler(unsigned int, char *); @@ -170,20 +172,18 @@ PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, { - PHY_VARS_UE* ue; + PHY_VARS_UE* ue = (PHY_VARS_UE *)malloc(sizeof(PHY_VARS_UE)); + memset(ue,0,sizeof(PHY_VARS_UE)); if (frame_parms!=(LTE_DL_FRAME_PARMS *)NULL) { // if we want to give initial frame parms, allocate the PHY_VARS_UE structure and put them in - ue = (PHY_VARS_UE *)malloc(sizeof(PHY_VARS_UE)); - memset(ue,0,sizeof(PHY_VARS_UE)); memcpy(&(ue->frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS)); } - else ue = PHY_vars_UE_g[UE_id][0]; ue->Mod_id = UE_id; ue->mac_enabled = 1; - // Panos: In phy_stub_UE (MAC-to-MAC) mode these init functions don't need to get called. Is this correct? + // In phy_stub_UE (MAC-to-MAC) mode these init functions don't need to get called. Is this correct? if (nfapi_mode!=3) { // initialize all signal buffers @@ -236,11 +236,12 @@ void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_ } -void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correction) { +void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correction, int phy_test, int UE_scan, int UE_scan_carrier, runmode_t mode,int rxgain,int txpowermax,LTE_DL_FRAME_PARMS *fp0) { PHY_VARS_UE *UE; int inst; int ret; + LTE_DL_FRAME_PARMS *fp; LOG_I(PHY,"UE : Calling Layer 2 for initialization\n"); @@ -248,18 +249,95 @@ void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correcti 0,// cba_group_active 0); // HO flag + if (PHY_vars_UE_g==NULL) PHY_vars_UE_g = (PHY_VARS_UE***)calloc(1+nb_inst,sizeof(PHY_VARS_UE**)); + for (inst=0;instframe_parms.nb_antennas_rx = fp0->nb_antennas_rx; + RC.ru[0]->frame_parms.nb_antennas_tx = fp0->nb_antennas_tx; + PHY_vars_UE_g[inst][0] = init_ue_vars(&RC.ru[0]->frame_parms,inst,0); + } // turn off timing control loop in UE PHY_vars_UE_g[inst][0]->no_timing_correction = timing_correction; + UE = PHY_vars_UE_g[inst][0]; + fp = &UE->frame_parms; + printf("PHY_vars_UE_g[0][0] = %p\n",UE); + + if (phy_test==1) + UE->mac_enabled = 0; + else + UE->mac_enabled = 1; + + if (UE->mac_enabled == 0) { //set default UL parameters for testing mode + for (int i=0; ipusch_config_dedicated[i].betaOffset_ACK_Index = 0; + UE->pusch_config_dedicated[i].betaOffset_RI_Index = 0; + UE->pusch_config_dedicated[i].betaOffset_CQI_Index = 2; + + UE->scheduling_request_config[i].sr_PUCCH_ResourceIndex = 0; + UE->scheduling_request_config[i].sr_ConfigIndex = 7+(0%3); + UE->scheduling_request_config[i].dsr_TransMax = sr_n4; + } + } + + UE->UE_scan = UE_scan; + UE->UE_scan_carrier = UE_scan_carrier; + UE->mode = mode; + printf("UE->mode = %d\n",mode); + + if (UE->mac_enabled == 1) { + UE->pdcch_vars[0][0]->crnti = 0x1234; + UE->pdcch_vars[1][0]->crnti = 0x1234; + }else { + UE->pdcch_vars[0][0]->crnti = 0x1235; + UE->pdcch_vars[1][0]->crnti = 0x1235; + } + UE->rx_total_gain_dB = rxgain; + UE->tx_power_max_dBm = txpowermax; + + UE->frame_parms.nb_antennas_tx = fp0->nb_antennas_tx; + UE->frame_parms.nb_antennas_rx = fp0->nb_antennas_rx; + + if (fp->frame_type == TDD) { + switch (fp->N_RB_DL) { + + case 100: + if (fp->threequarter_fs) UE->N_TA_offset = (624*3)/4; + else UE->N_TA_offset = 624; + break; + case 75: + UE->N_TA_offset = (624*3)/4; + break; + case 50: + UE->N_TA_offset = 624/2; + break; + case 25: + UE->N_TA_offset = 624/4; + break; + case 15: + UE->N_TA_offset = 624/8; + break; + case 6: + UE->N_TA_offset = 624/16; + break; + default: + AssertFatal(1==0,"illegal N_RB_DL %d\n",fp->N_RB_DL); + break; + } + } + else UE->N_TA_offset = 0; + + if (simL1flag == 1) init_ue_devices(UE); LOG_I(PHY,"Intializing UE Threads for instance %d (%p,%p)...\n",inst,PHY_vars_UE_g[inst],PHY_vars_UE_g[inst][0]); init_UE_threads(inst); - UE = PHY_vars_UE_g[inst][0]; - if (oaisim_flag == 0) { + if (simL1flag == 0) { ret = openair0_device_load(&(UE->rfdevice), &openair0_cfg[0]); if (ret !=0){ exit_fun("Error loading device library"); @@ -267,7 +345,7 @@ void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correcti } UE->rfdevice.host_type = RAU_HOST; // UE->rfdevice.type = NONE_DEV; - PHY_VARS_UE *UE = PHY_vars_UE_g[inst][0]; + AssertFatal(0 == pthread_create(&UE->proc.pthread_ue, &UE->proc.attr_ue, UE_thread, @@ -275,17 +353,9 @@ void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correcti } printf("UE threads created by %ld\n", gettid()); -#if 0 -#if defined(ENABLE_USE_MME) - extern volatile int start_UE; - while (start_UE == 0) { - sleep(1); - } -#endif -#endif } -// Panos: Initiating all UEs within a single set of threads for PHY_STUB. Future extensions -> multiple +// Initiating all UEs within a single set of threads for PHY_STUB. Future extensions -> multiple // set of threads for multiple UEs. void init_UE_stub_single_thread(int nb_inst,int eMBMS_active, int uecap_xer_in, char *emul_iface) { @@ -443,9 +513,12 @@ static void *UE_thread_synch(void *arg) } } +/* while (sync_var<0) pthread_cond_wait(&sync_cond, &sync_mutex); pthread_mutex_unlock(&sync_mutex); +*/ + wait_sync("UE_thread_sync"); printf("Started device, unlocked sync_mutex (UE_sync_thread)\n"); @@ -931,8 +1004,6 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) { LOG_E( MAC, "[SCHED][UE] error unlocking mutex for UE RXn_TXnp4\n" ); exit_fun("nothing to add"); } - LOG_D(MAC," Panos-D [UE_phy_stub_thread_rxn_txnp4 1] Frame: %d, Subframe: %d \n" "\n" "\n", timer_frame, timer_subframe); - proc->subframe_rx=timer_subframe; proc->frame_rx = timer_frame; @@ -943,14 +1014,14 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) { oai_subframe_ind(timer_frame, timer_subframe); - // Panos: Guessing that the next 4 lines are not needed for the phy_stub mode. + //Guessing that the next 4 lines are not needed for the phy_stub mode. /*initRefTimes(t2); initRefTimes(t3); pickTime(current); updateTimes(proc->gotIQs, &t2, 10000, "Delay to wake up UE_Thread_Rx (case 2)");*/ - //Panos: Not sure whether we should put the memory allocation here and not sure how much memory + // Not sure whether we should put the memory allocation here and not sure how much memory //we should allocate for each subframe cycle. UL_INFO = (UL_IND_t*)malloc(sizeof(UL_IND_t)); @@ -1082,7 +1153,7 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) { //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); } } // mode is PRACH - // Panos: Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger + // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). // Generate UL_indications which correspond to UL traffic. if(ul_config_req!=NULL){ //&& UE_mac_inst[Mod_id].ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){ @@ -1222,7 +1293,7 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { phy_stub_ticking->ticking_var = -1; proc->subframe_rx=proc->sub_frame_start; - //PANOS: CAREFUL HERE! + // CAREFUL HERE! wait_sync("UE_phy_stub_thread_rxn_txnp4"); while (!oai_exit) { @@ -1242,8 +1313,6 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { LOG_E( MAC, "[SCHED][UE] error unlocking mutex for UE RXn_TXnp4\n" ); exit_fun("nothing to add"); } - LOG_D(MAC," Panos-D [UE_phy_stub_thread_rxn_txnp4 1] Frame: %d, Subframe: %d \n" "\n" "\n", timer_frame, timer_subframe); - proc->subframe_rx=timer_subframe; proc->frame_rx = timer_frame; @@ -1286,7 +1355,6 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { } //if(UE_mac_inst[Mod_id].hi_dci0_req!= NULL){ if (hi_dci0_req!=NULL && hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){ - LOG_I( MAC, "Panos-D: UE_phy_stub_thread_rxn_txnp4 after oai_subframe_ind 4 \n"); hi_dci0_req_UE_MAC(hi_dci0_req, Mod_id); //if(UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){ free(hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list); @@ -1350,7 +1418,6 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { if (UE->mode != loop_through_memory){ if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH) ) { - //LOG_D(MAC, "Panos-D: UE_phy_stub_thread_rxn_txnp4 before RACH \n"); // check if we have PRACH opportunity @@ -1365,7 +1432,7 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); } } // mode is PRACH - // Panos: Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger + // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). // Generate UL_indications which correspond to UL traffic. if(ul_config_req!= NULL && ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){ @@ -1425,6 +1492,13 @@ void *UE_thread(void *arg) { init_thread(100000, 500000, FIFO_PRIORITY, &cpuset, "UHD Threads"); + /* + while (sync_var<0) + pthread_cond_wait(&sync_cond, &sync_mutex); + pthread_mutex_unlock(&sync_mutex); + */ + + wait_sync("UE thread"); #ifdef NAS_UE MessageDef *message_p; message_p = itti_alloc_new_message(TASK_NAS_UE, INITIALIZE_MESSAGE); @@ -1751,12 +1825,12 @@ void init_UE_single_thread_stub(int nb_inst) { pthread_attr_init (&UE->proc.attr_ue); pthread_attr_setstacksize(&UE->proc.attr_ue,8192);//5*PTHREAD_STACK_MIN); - // Panos: Don't need synch for phy_stub mode + // Don't need synch for phy_stub mode //pthread_mutex_init(&UE->proc.mutex_synch,NULL); //pthread_cond_init(&UE->proc.cond_synch,NULL); // the threads are not yet active, therefore access is allowed without locking - // Panos: In phy_stub_UE mode due to less heavy processing operations we don't need two threads + // In phy_stub_UE mode due to less heavy processing operations we don't need two threads //int nb_threads=RX_NB_TH; int nb_threads=1; for (int i=0; iproc.proc_rxtx[i].pthread_rxtx, NULL, UE_phy_stub_single_thread_rxn_txnp4, rtd); } - // Panos: Remove thread for UE_sync in phy_stub_UE mode. + // Remove thread for UE_sync in phy_stub_UE mode. //pthread_create(&UE->proc.pthread_synch,NULL,UE_thread_synch,(void*)UE); } @@ -1803,12 +1877,12 @@ void init_UE_threads_stub(int inst) { pthread_attr_init (&UE->proc.attr_ue); pthread_attr_setstacksize(&UE->proc.attr_ue,8192);//5*PTHREAD_STACK_MIN); - // Panos: Don't need synch for phy_stub mode + // Don't need synch for phy_stub mode //pthread_mutex_init(&UE->proc.mutex_synch,NULL); //pthread_cond_init(&UE->proc.cond_synch,NULL); // the threads are not yet active, therefore access is allowed without locking - // Panos: In phy_stub_UE mode due to less heavy processing operations we don't need two threads + // In phy_stub_UE mode due to less heavy processing operations we don't need two threads //int nb_threads=RX_NB_TH; int nb_threads=1; for (int i=0; iproc.pthread_synch,NULL,UE_thread_synch,(void*)UE); } @@ -1906,168 +1980,6 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg) -/*static void* timer_thread( void* param ) { - thread_top_init("timer_thread",1,870000L,1000000L,1000000L); - timer_subframe =9; - timer_frame =1023; - //phy_stub_ticking = (SF_ticking*)malloc(sizeof(SF_ticking)); - phy_stub_ticking->ticking_var = -1; - PHY_VARS_UE *UE; - UE = PHY_vars_UE_g[0][0]; - double t_diff; - int external_timer = 0; - - - //struct timespec pselect_start; - - - //struct timespec sf_duration; - //sf_duration.tv_sec = 0; - //sf_duration.tv_nsec = 1e6; - - - wait_sync("timer_thread"); - - //pthread_mutex_init(&phy_stub_ticking->mutex_ticking,NULL); - //pthread_cond_init(&phy_stub_ticking->cond_ticking,NULL); - - // struct timespec start = {0}; - // struct timespec end = {0}; - //sleepValue.tv_nsec = 1000000; - opp_enabled = 1; - - // first check if we are receiving timing indications - if(nfapi_mode==4) { - usleep(10000); - if (UE->instance_cnt_timer > 0) { - external_timer = 1; - int absSFm1 = ((emulator_absSF+10239)%10240); - timer_frame = absSFm1/10; - timer_subframe = absSFm1%10; - pthread_mutex_lock(&UE->timer_mutex); - UE->instance_cnt_timer = -1; - pthread_mutex_unlock(&UE->timer_mutex); - LOG_I(PHY,"Running with external timer\n"); - } - else LOG_I(PHY,"Running with internal timer\n"); - } - - struct timespec t_start; - struct timespec t_now; - struct timespec t_sleep; - uint64_t T_0; - uint64_t T_now; - uint64_t T_next_SF; - uint64_t T_sleep; - uint64_t sf_cnt = 0; //Total Subframe counter - - clock_gettime(CLOCK_MONOTONIC, &t_start); - T_0 = (uint64_t) t_start.tv_sec*1000000000 + t_start.tv_nsec; - LOG_I(MAC, "Panos-D: timer_thread(), T_0 value: %" PRId64 "\n", T_0); - //printf("%" PRId64 "\n", t); - - while (!oai_exit) { - - // these are local subframe/frame counters to check that we are in synch with the fronthaul timing. - // They are set on the first rx/tx in the underly FH routines. - if (timer_subframe==9) { - timer_subframe=0; - timer_frame++; - timer_frame&=1023; - } else { - timer_subframe++; - } - //printf("[timer_thread] Frame: %d, Subframe: %d \n", timer_frame, timer_subframe); - //LOG_I(MAC," Panos-D [timer_thread] Frame: %d, Subframe: %d \n", timer_frame, timer_subframe); - //AssertFatal( 0 == pthread_cond_signal(&phy_stub_ticking->cond_ticking), ""); - AssertFatal(pthread_mutex_lock(&phy_stub_ticking->mutex_ticking) ==0,""); - phy_stub_ticking->ticking_var++; - // This should probably be a call to pthread_cond_broadcast when we introduce support for multiple UEs (threads) - if(phy_stub_ticking->ticking_var == 0){ - //AssertFatal(phy_stub_ticking->ticking_var == 0,"phy_stub_ticking->ticking_var = %d", - //phy_stub_ticking->ticking_var); - if (pthread_cond_signal(&phy_stub_ticking->cond_ticking) != 0) { - //LOG_E( PHY, "[SCHED][UE %d] ERROR pthread_cond_signal for UE RX thread\n", UE->Mod_id); - LOG_E( PHY, "timer_thread ERROR pthread_cond_signal for UE_thread\n"); - exit_fun("nothing to add"); - } - } - else - LOG_I(MAC, "Panos-D: timer_thread() Timing problem! \n"); - - AssertFatal(pthread_mutex_unlock(&phy_stub_ticking->mutex_ticking) ==0,""); - start_meas(&UE->timer_stats); - - - //clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); // get initial time-stamp - if (external_timer == 0) { - sf_cnt++; - T_next_SF = T_0 + sf_cnt*1000000; - do{ - clock_gettime(CLOCK_MONOTONIC, &t_now); - T_now =(uint64_t) t_now.tv_sec*1000000000 + t_now.tv_nsec; - }while(T_now < T_next_SF); - //usleep(1000); - UE_tport_t pdu; - pdu.header.packet_type = TTI_SYNC; - pdu.header.absSF = (timer_frame*10)+timer_subframe; - if (nfapi_mode!=3){ - multicast_link_write_sock(0, - &pdu, - sizeof(UE_tport_header_t)); - } - - } - else { - wait_on_condition(&UE->timer_mutex,&UE->timer_cond,&UE->instance_cnt_timer,"timer_thread"); - release_thread(&UE->timer_mutex,&UE->instance_cnt_timer,"timer_thread"); - } - //clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); // get final time-stamp - - //double t_ns = (double)(end.tv_sec - start.tv_sec) * 1.0e9 + - // (double)(end.tv_nsec - start.tv_nsec); - //printf("Panos-D: [timer_thread] REAL TIME difference: %f", t_ns); - - - stop_meas(&UE->timer_stats); - t_diff = get_time_meas_us(&UE->timer_stats); - - //printf("Panos-D: Absolute time: %lld, diff: %lld, diff_now: %lld \n",UE->timer_stats.p_time, UE->timer_stats.diff, UE->timer_stats.diff_now); - //LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP); - //if (t_diff > 1100) - - - // LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff); - //LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff); - - //printf("Panos-D: Absolute time: %f", t_diff); - - - stop_meas(&UE->timer_stats); - t_diff = get_time_meas_us(&UE->timer_stats); - //printf("Panos-D: Absolute time: %lld, diff: %lld, diff_now: %lld \n",UE->timer_stats.p_time, UE->timer_stats.diff, UE->timer_stats.diff_now); - //LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP); - //if (t_diff > 1100) LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff); - //printf("Panos-D: Absolute time: %f", t_diff); - - //UE->proc.ticking_var++; - // pthread_cond_signal() //Send signal to ue_thread()? - // We also need to somehow pass the information of SFN/SF - } - free(phy_stub_ticking); - pthread_cond_destroy(&phy_stub_ticking->cond_ticking); - pthread_mutex_destroy(&phy_stub_ticking->mutex_ticking); - return 0; - -}*/ - - - - - - - - // Panos: This timer thread is used only in the phy_stub mode as an independent timer // which will be ticking and provide the SFN/SF values that will be used from the UE threads @@ -2198,151 +2110,6 @@ static void* timer_thread( void* param ) { - - - - - - - - - - - - - - - - -/*static void* timer_thread( void* param ) { - thread_top_init("timer_thread",1,870000L,1000000L,1000000L); - timer_subframe =9; - timer_frame =1023; - //phy_stub_ticking = (SF_ticking*)malloc(sizeof(SF_ticking)); - phy_stub_ticking->ticking_var = -1; - PHY_VARS_UE *UE; - UE = PHY_vars_UE_g[0][0]; - double t_diff; - int external_timer = 0; - - wait_sync("timer_thread"); - - //pthread_mutex_init(&phy_stub_ticking->mutex_ticking,NULL); - //pthread_cond_init(&phy_stub_ticking->cond_ticking,NULL); - - // struct timespec start = {0}; - // struct timespec end = {0}; - //sleepValue.tv_nsec = 1000000; - opp_enabled = 1; - - // first check if we are receiving timing indications - if(nfapi_mode==4) { - usleep(10000); - if (UE->instance_cnt_timer > 0) { - external_timer = 1; - int absSFm1 = ((emulator_absSF+10239)%10240); - timer_frame = absSFm1/10; - timer_subframe = absSFm1%10; - pthread_mutex_lock(&UE->timer_mutex); - UE->instance_cnt_timer = -1; - pthread_mutex_unlock(&UE->timer_mutex); - LOG_I(PHY,"Running with external timer\n"); - } - else LOG_I(PHY,"Running with internal timer\n"); - } - - while (!oai_exit) { - - // these are local subframe/frame counters to check that we are in synch with the fronthaul timing. - // They are set on the first rx/tx in the underly FH routines. - if (timer_subframe==9) { - timer_subframe=0; - timer_frame++; - timer_frame&=1023; - } else { - timer_subframe++; - } - //printf("[timer_thread] Frame: %d, Subframe: %d \n", timer_frame, timer_subframe); - //LOG_I(MAC," Panos-D [timer_thread] Frame: %d, Subframe: %d \n", timer_frame, timer_subframe); - //AssertFatal( 0 == pthread_cond_signal(&phy_stub_ticking->cond_ticking), ""); - AssertFatal(pthread_mutex_lock(&phy_stub_ticking->mutex_ticking) ==0,""); - phy_stub_ticking->ticking_var++; - // This should probably be a call to pthread_cond_broadcast when we introduce support for multiple UEs (threads) - if(phy_stub_ticking->ticking_var == 0){ - //AssertFatal(phy_stub_ticking->ticking_var == 0,"phy_stub_ticking->ticking_var = %d", - // phy_stub_ticking->ticking_var); - if (pthread_cond_signal(&phy_stub_ticking->cond_ticking) != 0) { - //LOG_E( PHY, "[SCHED][UE %d] ERROR pthread_cond_signal for UE RX thread\n", UE->Mod_id); - LOG_E( PHY, "timer_thread ERROR pthread_cond_signal for UE_thread\n"); - exit_fun("nothing to add"); - } - } - - AssertFatal(pthread_mutex_unlock(&phy_stub_ticking->mutex_ticking) ==0,""); - start_meas(&UE->timer_stats); - - - //clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); // get initial time-stamp - if (external_timer == 0) { - usleep(1000); - UE_tport_t pdu; - pdu.header.packet_type = TTI_SYNC; - pdu.header.absSF = (timer_frame*10)+timer_subframe; - multicast_link_write_sock(0, - &pdu, - sizeof(UE_tport_header_t)); - - } - else { - wait_on_condition(&UE->timer_mutex,&UE->timer_cond,&UE->instance_cnt_timer,"timer_thread"); - release_thread(&UE->timer_mutex,&UE->instance_cnt_timer,"timer_thread"); - } - //clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); // get final time-stamp - - //double t_ns = (double)(end.tv_sec - start.tv_sec) * 1.0e9 + - // (double)(end.tv_nsec - start.tv_nsec); - //printf("Panos-D: [timer_thread] REAL TIME difference: %f", t_ns); - - - stop_meas(&UE->timer_stats); - t_diff = get_time_meas_us(&UE->timer_stats); - - //printf("Panos-D: Absolute time: %lld, diff: %lld, diff_now: %lld \n",UE->timer_stats.p_time, UE->timer_stats.diff, UE->timer_stats.diff_now); - //LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP); - //if (t_diff > 1100) - - - // LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff); - //LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff); - - //printf("Panos-D: Absolute time: %f", t_diff); - - - stop_meas(&UE->timer_stats); - t_diff = get_time_meas_us(&UE->timer_stats); - //printf("Panos-D: Absolute time: %lld, diff: %lld, diff_now: %lld \n",UE->timer_stats.p_time, UE->timer_stats.diff, UE->timer_stats.diff_now); - //LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP); - //if (t_diff > 1100) LOG_E(MAC," Panos-D Absolute time: %f\n", t_diff); - //printf("Panos-D: Absolute time: %f", t_diff); - - //UE->proc.ticking_var++; - // pthread_cond_signal() //Send signal to ue_thread()? - // We also need to somehow pass the information of SFN/SF - } - free(phy_stub_ticking); - pthread_cond_destroy(&phy_stub_ticking->cond_ticking); - pthread_mutex_destroy(&phy_stub_ticking->mutex_ticking); - return 0; - -}*/ - - - - - - - - int init_timer_thread(void) { //PHY_VARS_UE *UE=PHY_vars_UE_g[0]; PHY_VARS_UE *UE=PHY_vars_UE_g[0][0]; diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index 4007542918..db62c138c7 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -63,7 +63,6 @@ #include "PHY/LTE_TRANSPORT/transport_vars.h" #include "SCHED/sched_common_vars.h" #include "PHY/MODULATION/modulation_vars.h" -#include "../../SIMU/USER/init_lte.h" #include "LAYER2/MAC/mac.h" #include "LAYER2/MAC/mac_vars.h" @@ -150,12 +149,11 @@ int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; -#if defined(ENABLE_ITTI) -static char *itti_dump_file = NULL; -#endif - int UE_scan = 1; int UE_scan_carrier = 0; +int simL1flag = 0; +int snr_dB=25; + runmode_t mode = normal_txrx; FILE *input_fd=NULL; @@ -164,11 +162,11 @@ FILE *input_fd=NULL; #if MAX_NUM_CCs == 1 rx_gain_t rx_gain_mode[MAX_NUM_CCs][4] = {{max_gain,max_gain,max_gain,max_gain}}; double tx_gain[MAX_NUM_CCs][4] = {{20,0,0,0}}; -double rx_gain[MAX_NUM_CCs][4] = {{110,0,0,0}}; +double rx_gain[MAX_NUM_CCs][4] = {{130,0,0,0}}; #else rx_gain_t rx_gain_mode[MAX_NUM_CCs][4] = {{max_gain,max_gain,max_gain,max_gain},{max_gain,max_gain,max_gain,max_gain}}; double tx_gain[MAX_NUM_CCs][4] = {{20,0,0,0},{20,0,0,0}}; -double rx_gain[MAX_NUM_CCs][4] = {{110,0,0,0},{20,0,0,0}}; +double rx_gain[MAX_NUM_CCs][4] = {{130,0,0,0},{20,0,0,0}}; #endif double rx_gain_off = 0.0; @@ -212,8 +210,6 @@ uint8_t exit_missed_slots=1; uint64_t num_missed_slots=0; // counter for the number of missed slots -extern void reset_opp_meas(void); -extern void print_opp_meas(void); extern void init_UE_stub_single_thread(int nb_inst,int eMBMS_active, int uecap_xer_in, char *emul_iface); extern PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, @@ -452,11 +448,11 @@ void *l2l1_task(void *arg) { break; case MESSAGE_TEST: - LOG_I(EMU, "Received %s\n", ITTI_MSG_NAME(message_p)); + LOG_I(SIM, "Received %s\n", ITTI_MSG_NAME(message_p)); break; default: - LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p)); + LOG_E(SIM, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p)); break; } @@ -471,6 +467,7 @@ void *l2l1_task(void *arg) { extern int16_t dlsch_demod_shift; static void get_options(void) { + char logmem_filename[1024] = {0}; int CC_id; int tddflag, nonbiotflag; char *loopfile=NULL; @@ -539,8 +536,7 @@ static void get_options(void) { } UE_scan=0; - - if (tddflag > 0) { + if (tddflag > 0) { for (CC_id=0; CC_idframe_type = TDD; } @@ -572,16 +568,11 @@ static void get_options(void) { for (CC_id=1;CC_idN_RB_DL == 100) { - if (frame_parms[0]->threequarter_fs) { + if(frame_parms->N_RB_DL == 100) { + if (frame_parms->threequarter_fs) { openair0_cfg[card].sample_rate=23.04e6; openair0_cfg[card].samples_per_frame = 230400; openair0_cfg[card].tx_bw = 10e6; @@ -670,17 +653,17 @@ void init_openair0(void) { openair0_cfg[card].tx_bw = 10e6; openair0_cfg[card].rx_bw = 10e6; } - } else if(frame_parms[0]->N_RB_DL == 50) { + } else if(frame_parms->N_RB_DL == 50) { openair0_cfg[card].sample_rate=15.36e6; openair0_cfg[card].samples_per_frame = 153600; openair0_cfg[card].tx_bw = 5e6; openair0_cfg[card].rx_bw = 5e6; - } else if (frame_parms[0]->N_RB_DL == 25) { + } else if (frame_parms->N_RB_DL == 25) { openair0_cfg[card].sample_rate=7.68e6; openair0_cfg[card].samples_per_frame = 76800; openair0_cfg[card].tx_bw = 2.5e6; openair0_cfg[card].rx_bw = 2.5e6; - } else if (frame_parms[0]->N_RB_DL == 6) { + } else if (frame_parms->N_RB_DL == 6) { openair0_cfg[card].sample_rate=1.92e6; openair0_cfg[card].samples_per_frame = 19200; openair0_cfg[card].tx_bw = 1.5e6; @@ -690,23 +673,20 @@ void init_openair0(void) { - if (frame_parms[0]->frame_type==TDD) + if (frame_parms->frame_type==TDD) openair0_cfg[card].duplex_mode = duplex_mode_TDD; else //FDD openair0_cfg[card].duplex_mode = duplex_mode_FDD; - printf("HW: Configuring card %d, nb_antennas_tx/rx %d/%d\n",card, - PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_tx, - PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_rx); openair0_cfg[card].Mod_id = 0; - openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; + openair0_cfg[card].num_rb_dl=frame_parms->N_RB_DL; openair0_cfg[card].clock_source = clock_source; - openair0_cfg[card].tx_num_channels=min(2,PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_tx); - openair0_cfg[card].rx_num_channels=min(2,PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_rx); + openair0_cfg[card].tx_num_channels=min(2,frame_parms->nb_antennas_tx); + openair0_cfg[card].rx_num_channels=min(2,frame_parms->nb_antennas_rx); for (i=0; i<4; i++) { @@ -722,7 +702,7 @@ void init_openair0(void) { openair0_cfg[card].autocal[i] = 1; openair0_cfg[card].tx_gain[i] = tx_gain[0][i]; - openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB - rx_gain_off; + openair0_cfg[card].rx_gain[i] = rxgain - rx_gain_off; openair0_cfg[card].configFilename = rf_config_file; @@ -782,14 +762,12 @@ int restart_L1L2(module_id_t enb_id) int main( int argc, char **argv ) { - int i; #if defined (XFORMS) void *status; #endif int CC_id; uint8_t abstraction_flag=0; - uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2; // Default value for the number of UEs. It will hold, // if not changed from the command line option --num-ues @@ -804,17 +782,11 @@ int main( int argc, char **argv ) exit_fun("[SOFTMODEM] Error, configuration module init failed\n"); } -#ifdef DEBUG_CONSOLE - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); -#endif - PHY_VARS_UE *UE[MAX_NUM_CCs]; mode = normal_txrx; memset(&openair0_cfg[0],0,sizeof(openair0_config_t)*MAX_CARDS); - memset(tx_max_power,0,sizeof(int)*MAX_NUM_CCs); set_latency_target(); @@ -822,11 +794,19 @@ int main( int argc, char **argv ) printf("Reading in command-line options\n"); + for (int i=0;i 1 && simL1flag != 1) { + printf("Running with more than 1 UE instance and simL1 is not active, this will result in undefined behaviour for now, exiting.\n"); + abort(); + } + printf("NFAPI_MODE value: %d \n", nfapi_mode); - // Panos: Not sure if the following is needed here + // Not sure if the following is needed here /*if (CONFIG_ISFLAGSET(CONFIG_ABORT)) { if (UE_flag == 0) { fprintf(stderr,"Getting configuration failed\n"); @@ -840,7 +820,7 @@ int main( int argc, char **argv ) #if T_TRACER - T_init(T_port, 1-T_nowait, T_dont_fork); + T_Config_Init(); #endif @@ -857,26 +837,25 @@ int main( int argc, char **argv ) set_comp_log(OTG, LOG_INFO, LOG_HIGH, 1); set_comp_log(RRC, LOG_INFO, LOG_HIGH, 1); #if defined(ENABLE_ITTI) - set_comp_log(EMU, LOG_INFO, LOG_MED, 1); + set_comp_log(SIM, LOG_INFO, LOG_MED, 1); # if defined(ENABLE_USE_MME) set_comp_log(NAS, LOG_INFO, LOG_HIGH, 1); # endif #endif - - if (ouput_vcd) { - VCD_SIGNAL_DUMPER_INIT("/tmp/openair_dump_UE.vcd"); - } - cpuf=get_cpu_freq_GHz(); + pthread_cond_init(&sync_cond,NULL); + pthread_mutex_init(&sync_mutex, NULL); + #if defined(ENABLE_ITTI) log_set_instance_type (LOG_INSTANCE_UE); + printf("ITTI init\n"); - itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, itti_dump_file); + itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info); // initialize mscgen log after ITTI MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX); @@ -903,7 +882,7 @@ int main( int argc, char **argv ) #endif //TTN for D2D -#ifdef Rel14 +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) printf ("RRC control socket\n"); rrc_control_socket_init(); printf ("PDCP PC5S socket\n"); @@ -934,33 +913,6 @@ int main( int argc, char **argv ) - printf("Before CC \n"); - - - - // Panos: From old version - /*if (UE_flag==1) { - PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE**)*NB_UE_INST); - for (int i=0; imac_enabled = 0; - else - UE[CC_id]->mac_enabled = 1; - } - } - }*/ - - - - //NB_UE_INST=1; NB_INST=1; if(nfapi_mode == 3){ PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE**)*NB_UE_INST); @@ -969,80 +921,57 @@ int main( int argc, char **argv ) PHY_vars_UE_g[i] = malloc(sizeof(PHY_VARS_UE*)*MAX_NUM_CCs); PHY_vars_UE_g[i][CC_id] = init_ue_vars(frame_parms[CC_id], i,abstraction_flag); - UE[CC_id] = PHY_vars_UE_g[i][CC_id]; - printf("PHY_vars_UE_g[inst][%d] = %p\n",CC_id,UE[CC_id]); if (phy_test==1) - UE[CC_id]->mac_enabled = 0; + PHY_vars_UE_g[i][CC_id]->mac_enabled = 0; else - UE[CC_id]->mac_enabled = 1; + PHY_vars_UE_g[i][CC_id]->mac_enabled = 1; } } } - else{ + else init_openair0(frame_parms[0],(int)rx_gain[0][0]); - for (CC_id=0; CC_idmac_enabled = 0; - else - UE[CC_id]->mac_enabled = 1; + RCConfig_sim(); + } - if (UE[CC_id]->mac_enabled == 0) { //set default UL parameters for testing mode - for (i=0; ipusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK; - UE[CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI; - UE[CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI; - - UE[CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = 0; - UE[CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(0%3); - UE[CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4; - } - } + // start the main UE threads + int eMBMS_active = 0; - UE[CC_id]->UE_scan = UE_scan; - UE[CC_id]->UE_scan_carrier = UE_scan_carrier; - UE[CC_id]->mode = mode; - printf("UE[%d]->mode = %d\n",CC_id,mode); - - if (UE[CC_id]->mac_enabled == 1) { - UE[CC_id]->pdcch_vars[0][0]->crnti = 0x1234; - UE[CC_id]->pdcch_vars[1][0]->crnti = 0x1234; - }else { - UE[CC_id]->pdcch_vars[0][0]->crnti = 0x1235; - UE[CC_id]->pdcch_vars[1][0]->crnti = 0x1235; - } - UE[CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0] + rx_gain_off; - UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id]; - - if (frame_parms[CC_id]->frame_type==FDD) { - UE[CC_id]->N_TA_offset = 0; - } - else { - if (frame_parms[CC_id]->N_RB_DL == 100) - UE[CC_id]->N_TA_offset = 624; - else if (frame_parms[CC_id]->N_RB_DL == 50) - UE[CC_id]->N_TA_offset = 624/2; - else if (frame_parms[CC_id]->N_RB_DL == 25) - UE[CC_id]->N_TA_offset = 624/4; - - } - init_openair0(); + if (nfapi_mode==3) // UE-STUB-PNF + { + config_sync_var=0; + wait_nfapi_init("main?"); + //Panos: Temporarily we will be using single set of threads for multiple UEs. + //init_UE_stub(1,eMBMS_active,uecap_xer_in,emul_iface); + init_UE_stub_single_thread(NB_UE_INST,eMBMS_active,uecap_xer_in,emul_iface); + } + else { + init_UE(NB_UE_INST,eMBMS_active,uecap_xer_in,0,phy_test,UE_scan,UE_scan_carrier,mode,(int)rx_gain[0][0],tx_max_power[0], + frame_parms[0]); } - printf("Runtime table\n"); - fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx); + if (phy_test==0) { + printf("Filling UE band info\n"); + fill_ue_band_info(); + dl_phy_sync_success (0, 0, 0, 1); + } + + if (nfapi_mode!=3){ + number_of_cards = 1; + for(CC_id=0; CC_idrf_map.card=0; + PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset; + } + } + + cpuf=get_cpu_freq_GHz(); - } @@ -1092,21 +1021,76 @@ int main( int argc, char **argv ) printf("cannot create ITTI tasks\n"); exit(-1); // need a softer mode } - if(nfapi_mode==3){ //Panos: Here we should add another nfapi_mode for the case of Supervised LTE-D2D + if(nfapi_mode==3){ // Here we should add another nfapi_mode for the case of Supervised LTE-D2D UE_config_stub_pnf(); } printf("ITTI tasks created\n"); #endif - // init UE_PF_PO and mutex lock - pthread_mutex_init(&ue_pf_po_mutex, NULL); - memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*NUMBER_OF_UE_MAX*MAX_NUM_CCs); mlockall(MCL_CURRENT | MCL_FUTURE); - pthread_cond_init(&sync_cond,NULL); - pthread_mutex_init(&sync_mutex, NULL); - + + rt_sleep_ns(10*100000000ULL); + + const char *nfapi_mode_str = ""; + + switch(nfapi_mode) + { + case 0: + nfapi_mode_str = "MONOLITHIC"; + break; + case 1: + nfapi_mode_str = "PNF"; + break; + case 2: + nfapi_mode_str = "VNF"; + break; + case 3: + nfapi_mode_str = "UE_STUB_PNF"; + break; + case 4: + nfapi_mode_str = "UE_STUB_OFFNET"; + break; + default: + nfapi_mode_str = ""; + break; + } + printf("NFAPI MODE:%s\n", nfapi_mode_str); + + + // connect the TX/RX buffers + + + /* + if(nfapi_mode!=3) { + if (setup_ue_buffers(PHY_vars_UE_g[0],&openair0_cfg[0])!=0) { + printf("Error setting up eNB buffer\n"); + exit(-1); + } + } + */ + + + + if (input_fd) { + printf("Reading in from file to antenna buffer %d\n",0); + if (fread(PHY_vars_UE_g[0][0]->common_vars.rxdata[0], + sizeof(int32_t), + frame_parms[0]->samples_per_tti*10, + input_fd) != frame_parms[0]->samples_per_tti*10) + printf("error reading from file\n"); + } + //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX; + + + if (simL1flag==1) { + init_ocm((double)snr_dB,0); + PHY_vars_UE_g[0][0]->no_timing_correction = 1; + } + + + #ifdef XFORMS int UE_id; @@ -1142,110 +1126,25 @@ int main( int argc, char **argv ) #endif - rt_sleep_ns(10*100000000ULL); + printf("Sending sync to all threads (%p,%p,%p)\n",&sync_var,&sync_cond,&sync_mutex); - const char *nfapi_mode_str = ""; - - switch(nfapi_mode) - { - case 0: - nfapi_mode_str = "MONOLITHIC"; - break; - case 1: - nfapi_mode_str = "PNF"; - break; - case 2: - nfapi_mode_str = "VNF"; - break; - case 3: - nfapi_mode_str = "UE_STUB_PNF"; - break; - case 4: - nfapi_mode_str = "UE_STUB_OFFNET"; - break; - default: - nfapi_mode_str = ""; - break; - } - printf("NFAPI MODE:%s\n", nfapi_mode_str); - - - // start the main threads - int eMBMS_active = 0; - - if (nfapi_mode==3) // UE-STUB-PNF - { - config_sync_var=0; - wait_nfapi_init("main?"); - //Panos: Temporarily we will be using single set of threads for multiple UEs. - //init_UE_stub(1,eMBMS_active,uecap_xer_in,emul_iface); - init_UE_stub_single_thread(NB_UE_INST,eMBMS_active,uecap_xer_in,emul_iface); - } - else { - init_UE(1,eMBMS_active,uecap_xer_in,0); - } - - if (phy_test==0) { - printf("Filling UE band info\n"); - fill_ue_band_info(); - dl_phy_sync_success (0, 0, 0, 1); - } - - if (nfapi_mode!=3){ - number_of_cards = 1; - for(CC_id=0; CC_idrf_map.card=0; - PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset; - } - } - - - - // connect the TX/RX buffers - - for (CC_id=0; CC_idhw_timing_advance = timing_advance; -#else - UE[CC_id]->hw_timing_advance = 160; -#endif - } - if(nfapi_mode!=3) { - if (setup_ue_buffers(UE,&openair0_cfg[0])!=0) { - printf("Error setting up eNB buffer\n"); - exit(-1); - } - } - - - - - if (input_fd) { - printf("Reading in from file to antenna buffer %d\n",0); - if (fread(UE[0]->common_vars.rxdata[0], - sizeof(int32_t), - frame_parms[0]->samples_per_tti*10, - input_fd) != frame_parms[0]->samples_per_tti*10) - printf("error reading from file\n"); - } - //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX; - - printf("Sending sync to all threads\n"); pthread_mutex_lock(&sync_mutex); sync_var=0; pthread_cond_broadcast(&sync_cond); pthread_mutex_unlock(&sync_mutex); + + printf("sync sent\n"); +/* printf("About to call end_configmodule() from %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__); end_configmodule(); printf("Called end_configmodule() from %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__); - +*/ // wait for end of program printf("TYPE TO TERMINATE\n"); //getchar(); + #if defined(ENABLE_ITTI) printf("Entering ITTI signals handler\n"); itti_wait_tasks_end(); @@ -1254,9 +1153,9 @@ int main( int argc, char **argv ) printf("oai_exit=%d\n",oai_exit); #else - while (oai_exit==0) - rt_sleep_ns(100000000ULL); - printf("Terminating application - oai_exit=%d\n",oai_exit); + while (oai_exit==0) + rt_sleep_ns(100000000ULL); + printf("Terminating application - oai_exit=%d\n",oai_exit); #endif @@ -1279,15 +1178,12 @@ int main( int argc, char **argv ) pthread_cond_destroy(&sync_cond); pthread_mutex_destroy(&sync_mutex); - pthread_mutex_destroy(&ue_pf_po_mutex); + // pthread_mutex_destroy(&ue_pf_po_mutex); // *** Handle per CC_id openair0 if (PHY_vars_UE_g[0][0]->rfdevice.trx_end_func) PHY_vars_UE_g[0][0]->rfdevice.trx_end_func(&PHY_vars_UE_g[0][0]->rfdevice); - if (ouput_vcd) - VCD_SIGNAL_DUMPER_CLOSE(); - if (opt_enabled == 1) terminate_opt(); diff --git a/targets/RT/USER/rru_if4p5_usrp.gtkw b/targets/RT/USER/rru_if4p5_usrp.gtkw index 1a13e6d15f..93bac49812 100644 --- a/targets/RT/USER/rru_if4p5_usrp.gtkw +++ b/targets/RT/USER/rru_if4p5_usrp.gtkw @@ -1,23 +1,23 @@ [*] [*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI -[*] Sun Jan 15 07:26:50 2017 +[*] Tue Jun 5 09:36:17 2018 [*] -[dumpfile] "/tmp/openair_dump_eNB.vcd" -[dumpfile_mtime] "Sun Jan 15 07:04:19 2017" -[dumpfile_size] 18140627 -[savefile] "/home/uprru1/oai/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw" -[timestart] 29977510000 +[dumpfile] "/tmp/openair_dump_UE.vcd" +[dumpfile_mtime] "Tue Jun 5 09:22:52 2018" +[dumpfile_size] 23057775 +[savefile] "/home/knopp/oai/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw" +[timestart] 25050480000 [size] 1301 716 [pos] 309 0 *-21.793451 29983948856 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -[sst_width] 284 +[sst_width] 312 [signals_width] 262 [sst_expanded] 1 [sst_vpaned_height] 294 @28 functions.trx_read functions.trx_write -@25 +@24 variables.trx_write_flags[63:0] @28 functions.trx_write_if @@ -27,23 +27,10 @@ functions.recv_if4 @24 variables.trx_ts[63:0] variables.trx_tst[63:0] -@28 -functions.eNB_thread_rxtx0 -@24 -variables.frame_number_RX0_eNB[63:0] -variables.subframe_number_RX0_eNB[63:0] -variables.frame_number_TX0_eNB[63:0] -variables.subframe_number_TX0_eNB[63:0] -@28 -functions.eNB_thread_rxtx1 -@24 -variables.frame_number_RX1_eNB[63:0] -variables.subframe_number_RX1_eNB[63:0] -variables.frame_number_TX1_eNB[63:0] -variables.subframe_number_TX1_eNB[63:0] -@28 -functions.phy_eNB_ofdm_mod_l -functions.phy_eNB_slot_fep -functions.phy_enb_prach_rx +variables.frame_number_RX0_RU[63:0] +variables.subframe_number_RX0_RU[63:0] +variables.frame_number_TX0_RU[63:0] +@25 +variables.subframe_number_TX0_RU[63:0] [pattern_trace] 1 [pattern_trace] 0 diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile deleted file mode 100644 index c8ea4ea5c3..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -all: oaisim nasmesh - -oaisim: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make LINK_ENB_PDCP_TO_IP_DRIVER=1 -j2 ) -nasmesh: - (cd $(OPENAIR2_DIR) && make nasmesh_netlink.ko) - (cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL/ && make) - -one_eNB_one_UE: oaisim nasmesh - -userclean: clean oaisim nasmesh - -clean: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make cleanall) diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_enb b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_enb deleted file mode 100755 index 9274c93ca9..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_enb +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh - -sudo kill -9 `ps -ef | grep oaisim | awk '{print $2}'` -sudo pkill oaisim - -# set params -EMULATION_DEV_INTERFACE="eth0" -EMULATION_MULTICAST_GROUP=1 -EMULATION_LOG_LEVEL=7 # 3 = error, 5 info, 7 debug, trace= 9 -#OAI_LOCAL_ADDRESS="10.0.1.1" -#OAI_REMOTE_ADDRESS="10.0.1.2" -#EMULATION_DEV_ADDRESS= `hostname -I cut -f1 -d' '` -EMULATION_DEV_ADDRESS=`LC_ALL=C ifconfig $EMULATION_DEV_INTERFACE | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'` - -echo "Setting Emulation Interface to $EMULATION_DEV_INTERFACE ($EMULATION_DEV_ADDRESS)" - -#funcs -test_install_package() { - # usage: test_install_package package_name - if [ $# -eq 1 ]; then - dpkg -s "$1" > /dev/null 2>&1 && { - echo "$1 is installed." - } || { - echo "$1 is not installed." - sudo apt-get install --assume-yes $1 - } - fi -} - -#PGM provide a reliable mutlicast data transport" -test_install_package libpgm-dev -test_install_package libpgm-5.1-0 - -PGM_FOUND=`dpkg-query -W -f='${Status}' libpgm-dev 2>/dev/null | grep -c "ok installed" ` - -if [ $PGM_FOUND = 1 ]; then - PGM=-D$EMULATION_DEV_ADDRESS -else - PGM=" " -fi - -# check the compilation -echo "Bringup eNB interface" -sudo rmmod nasmesh -make all -sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko - -#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) -#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 -echo "Make sure that eth0 is the interface between the machines, otherwise change" -sudo ip route add 239.0.0.160/28 dev $EMULATION_DEV_INTERFACE - -# when running as a suduoers, the following lines are not needed -#sudo ifconfig oai0 $OAI_LOCAL_ADDRESS netmask 255.255.255.0 broadcast 10.0.1.255 -#echo "applying DRB classification" -#echo "$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s $OAI_LOCAL_ADDRESS -t $OAI_REMOTE_ADDRESS -r 1" -#$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s $OAI_LOCAL_ADDRESS -t $OAI_REMOTE_ADDRESS -r 1 - -if [ -z $1 ]; then -echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM > /dev/null" -sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM > /dev/null -else - if [ $1 = "all" ]; then - echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM" - sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM - else - echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM | grep -i $1" - sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM | grep -i $1 - fi -fi -echo "End" diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_ue b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_ue deleted file mode 100755 index b014717b31..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/start_ue +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh - -sudo kill -9 `ps -ef | grep oaisim | awk '{print $2}'` -sudo pkill oaisim - -# set params -EMULATION_DEV_INTERFACE="eth0" -EMULATION_MULTICAST_GROUP=1 -EMULATION_LOG_LEVEL=7 # 3 = error, 5 info, 7 debug, trace= 9 -#OAI_LOCAL_ADDRESS="10.0.1.2" -#OAI_REMOTE_ADDRESS="10.0.1.1" -#EMULATION_DEV_ADDRESS= `hostname -I cut -f1 -d' '` -EMULATION_DEV_ADDRESS=`LC_ALL=C ifconfig $EMULATION_DEV_INTERFACE | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'` - -echo "Setting Emulation Interface to $EMULATION_DEV_INTERFACE ($EMULATION_DEV_ADDRESS)" - -#funcs -test_install_package() { - # usage: test_install_package package_name - if [ $# -eq 1 ]; then - dpkg -s "$1" > /dev/null 2>&1 && { - echo "$1 is installed." - } || { - echo "$1 is not installed." - sudo apt-get install --assume-yes $1 - } - fi -} -#PGM provide a reliable mutlicast data transport" -test_install_package libpgm-dev -test_install_package libpgm-5.1-0 -PGM_FOUND=`dpkg-query -W -f='${Status}' libpgm-dev 2>/dev/null | grep -c "ok installed" ` -if [ $PGM_FOUND = 1 ]; then - PGM=-D$EMULATION_DEV_ADDRESS -else - PGM=" " -fi - -echo "Building" -sudo rmmod nasmesh -make nasmesh all -sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko - - -#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) -#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 -echo "Make sure that eth0 is the interface between the machines, otherwise change" -sudo ip route add 239.0.0.160/28 dev $EMULATION_DEV_INTERFACE - -# when running as a suduoers, the following lines are not needed -#sudo ifconfig oai0 $OAI_LOCAL_ADDRES netmask 255.255.255.0 broadcast 10.0.1.255 -#$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s $OAI_LOCAL_ADDRESS -t $OAI_REMOTE_ADDRESS -r 1 - -# running oaisim -if [ -z $1 ]; then -echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM > /dev/null" -sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM > /dev/null -else - if [ $1 = "all" ]; then - echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM " - sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM - else - echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM | grep -i $1" - sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM | grep -i $1 - fi -fi -echo "End" diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/AT_serial_bouchon.py b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/AT_serial_bouchon.py deleted file mode 100755 index 4c1a505542..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/AT_serial_bouchon.py +++ /dev/null @@ -1,209 +0,0 @@ -#!/usr/bin/python - -import os, sys, warnings -import serial - -def sendToTTY(lineP): - sys.stdout.write("\nSend:\n" + lineP+"\n") - g_ser.write(lineP) - g_ser.flush() - - - -g_ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) - -buffer = '' -while True: - buffer += g_ser.read(1) - #sys.stdout.write("buffer is now:\n" + buffer+"\n") - buffer = buffer.lstrip('\r') - if '\r' in buffer: - at_received, buffer = buffer.split('\r')[-2:] - - at_received = at_received.strip('\n') - at_received = at_received.strip('\r') - - if at_received == '\n' or at_received == '' or at_received == '\r': - break - else: - sys.stdout.write("Receive stripped:\n" + at_received+"\n") - # Q0 = enable codes - # Q1 = disable codes - if at_received == 'ATE0Q0V1': - sendToTTY('\rOK\r') - - # ATS0, Automatic Answer - # This S-parameter controls the automatic answering feature of the modem - # 0 automatic answering is disabled - # 1 - 255 enable automatic answering on the ring number specified - # here value received is 0 - elif at_received.startswith('ATS0='): - sendToTTY('\rOK\r') - - # AT+CMEEReport mobile equipment error - #0 Disable +CME ERROR result code. Use ERROR instead. - #1 Enable +CME ERROR result code and use numeric values - #2 Enable +CME ERROR result code and use verbose values - # here value received is 1 - elif at_received.startswith('AT+CMEE='): - sendToTTY('\rOK\r') - - # Network registration events - # AT+CREGNetwork registration (ver. 2) - # Description: - # Controls the presentation of an unsolicited result code +CREG : - # when =1 and there is a change in the ME network registration status or - # code +CREG: [,,] when =2 and there is a change of thenetwork cell. - # Read command returns the status of result code presentation and an integer , - # which shows whether the network has currently indicated the registration of the ME. - # Location information elements and are returned only when =2 and ME - # is registered in the network. - # : - # 0 Disable network registration unsolicited result code. Default value - # 1 Enable network registration unsolicited result code,+CREG: - # 2 Enable network registration and location information unsolicited result code, +CREG:[,,] - # : - # 0 not registered new operator to registered and not searching - # 1 registered, home network - # 2 not registered, currently searching a new operator to register with - # 3 registration denied - # 4 unknown - # 5 registered, roaming - elif at_received == 'AT+CREG=2': - sendToTTY('\rOK\r') - sendToTTY('+CREG: 1,00C3,01021A02 \r') - - elif at_received == 'AT+CREG=1': - sendToTTY('\rOK\r') - sendToTTY('+CREG: 1\r') - - elif at_received == 'AT+CREG?': - sendToTTY('+CREG: 1,00C3,01021A02\r\nOK\r') - - - - # GPRS registration events - # +CGREGNetwork registration reporting - # Packet domain network registration status AT+CGPADDRShow PDP address - # Description: - # Controls the presentation of the unsolicited result code +CGREG: - # when ='1' and there is a change in the ME GPRS network registration status or - # +CGREG: [,,] when ='2' and there is achange of the network cell. - # --- - # Note: If the GPRS MT also supports circuit mode services, - # AT+CREG and the +CREG result code apply to the registration status and location - # information for those services. The read command returns the status of result - # code presentation and an integer which shows whether the network has - # currently indicated the registration of the ME. - # Location information elements and are returned only when =2 - # and ME is registered in the network. - elif at_received == 'AT+CGREG=1': - sendToTTY('\rOK\r') - sendToTTY('+CGREG: 1\r') - - elif at_received == 'AT+CGREG?': - sendToTTY('+CGREG: 0,1\r\nOK\r') - - - - # Call Waiting notifications - elif at_received == 'AT+CCWA=1': - sendToTTY('\rOK\r') - - # Alternating voice/data off - elif at_received == 'AT+CMOD=0': - sendToTTY('\rOK\r') - - # +CSSU unsolicited supp service notifications - elif at_received == 'AT+CSSN=0,1': - sendToTTY('\rOK\r') - - # no connected at_received identification - elif at_received == 'AT+COLP=0': - sendToTTY('+COLP:0\r\nOK\r') - - # HEX character set - # AT+CSCSSelect TE character set (ver. 3) - elif at_received == 'AT+CSCS=\"HEX\"': - sendToTTY('\rOK\r') - - # USSD unsolicited - # AT+CUSD Unstructured supplementary service data (ver. 2) - # - # 0 Disable result code presentation in the TA.Defaultvalue - # 1 Enable result code presentation in the TA - # 2 Terminate (abort) USSD dialogue. This value is not applicable to the read command response. Notsupported - elif at_received == 'AT+CUSD=1': - sendToTTY('\rOK\r') - - # Enable +CGEV GPRS event notifications, but don't buffer - # AT+CGEREPPacket domain event reporting (ver. 1) - elif at_received == 'AT+CGEREP=1,0': - sendToTTY('\rOK\r') - - # SMS PDU mode - # AT+CMGF Message format (ver. 1) - elif at_received == 'AT+CMGF=0': - sendToTTY('\rOK\r') - - elif at_received == 'AT+CPIN?': - sendToTTY('\r+CPIN: READY\r\nOK\r') - #sendToTTY('\rOK\r') - - # AT+CFUNSet phone functionality (ver. 2) - # 0 Minimum functionality, that is, the phone is turnedoff. Default value - # 1 Full functionality, that is, the phone is turned on - # 2 Disable phone transmit RF circuits only. Notsupported - # 3 Disable phone receive RF circuits only. Notsupported - # 4 Disable phone transmit and receive RF circuits.Note: This is often referred to as "flight mode" - # 5 GSM only (WCDMA radio off) - # 6 WCDMA only (GSM radio off) - elif at_received == 'AT+CFUN?': - sendToTTY('+CFUN: 1\r\nOK\r') - - elif at_received == 'AT+CFUN=1': - sendToTTY('\rOK\r') - - # AT+CLCCList current calls - # Description: - # Returns the list of current calls. If command succeeds but no calls areavailable, no information response is sent to TE - elif at_received == 'AT+CLCC': - sendToTTY('+CLCC: \r\nOK\r') - - # AT+COPSOperator selection (ver. 2) - # AT+COPS=[[,[,[,AcT]]]] - # - # Description - # 0 Automatic ( field is ignored.) Default value - # 1 Manual ( field will be present) - # 2 Deregister from network. Not supported - # 3 Set only (for read command +COPS?), donot attempt registration/deregistration ( field is ignored). - # This value is not applicable in readcommand response - # 4 Manual/automatic ( field will be present). Ifmanual selection fails, automatic mode (=0)is entered - elif at_received == 'AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?;+COPS=3,2;+COPS?': - sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\n+COPS: 0,1, \"Free\"\r\n+COPS: 0,2, \"310170\"\r\nOK\r') - - elif at_received == 'AT+COPS?': - #sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\n+COPS: 0,1, \"Free\"\r\n+COPS: 0,2, \"310170\"\r\nOK\r') - sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\nOK\r') - - elif at_received == 'AT+COPS=0': - #sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\n+COPS: 0,1, \"Free\"\r\n+COPS: 0,2, \"310170\"\r\nOK\r') - sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\nOK\r') - - # IMEI - elif at_received == 'AT+CGSN': - sendToTTY('+CGSN:534500314160207\r\nOK\r') - - # Signal quality (ver.1) - # Returns received signal strength indication and channel bit errorrate from the phone. - elif at_received == 'AT+CSQ': - #31,7 - sendToTTY('+CSQ:8,7\r\nOK\r') - - - - else: - sendToTTY('\rOK\r') - - diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/Makefile b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/Makefile deleted file mode 100755 index c89992e7e4..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -all: oaisim naslite_netlink_ether - -oaisim: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make oaisim OAI_NW_DRIVER_TYPE_ETHERNET=1 PDCP_USE_NETLINK=1) -naslite_netlink_ether: - (cd $(OPENAIR2_DIR) && make naslite_netlink_ether.ko) - (cd $(OPENAIR2_DIR)/NAS/DRIVER/LITE/RB_TOOL/ && make) - -remserial: - (cd $(OPENAIR3_DIR)/UTILS/REMSERIAL-1.4.UDP && make all) - (cp -upv $(OPENAIR3_DIR)/UTILS/REMSERIAL-1.4.UDP/remserial /usr/bin/remserial.udp) - -one_eNB_one_UE: oaisim naslite_netlink_ether - -userclean: clean oaisim naslite_netlink_ether - -clean: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make clean) - (cd $(OPENAIR2_DIR)/NAS/DRIVER/LITE && make clean) - (cd $(OPENAIR2_DIR) && make clean) diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_enb b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_enb deleted file mode 100755 index 010917b7cf..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_enb +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/sh -echo "Bringup eNB interface" - -ip link set oai0 down -rmmod nasmesh -make naslite_netlink_ether oaisim -insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/nasmesh.ko nas_IMEI=3,9,1,8,3,6,6,2,0,0,0,0,0,0 - -#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) -#route add -net 224.0.0.0 netmask 240.0.0.0 dev eth2 -#ip addr add dev eth1 192.168.14.145/24 broadcast 192.168.14.255 -ip link set oai0 broadcast ff:ff:ff:ff:ff:ff -#ip route add 192.168.14.0/24 dev eth2 -ip route add 224.0.0.160/28 dev eth1 -ip link set oai0 up -sleep 1 - -EXTIF="eth0" -INTIF="oai0" -IPTABLES=/sbin/iptables -#IPTABLES=/usr/local/sbin/iptables -DEPMOD=/sbin/depmod -MODPROBE=/sbin/modprobe -echo " External Interface: $EXTIF" -echo " Internal Interface: $INTIF" -echo "----------------------------------------------------------------------" -echo -en "ip_tables, " -$MODPROBE ip_tables -echo -en "ip_conntrack, " -$MODPROBE ip_conntrack -echo -en "ip_conntrack_irc, " -$MODPROBE ip_conntrack_irc -echo -en "iptable_nat, " -$MODPROBE iptable_nat -echo -e " Done loading modules.\n" -echo " Enabling forwarding.." -echo "1" > /proc/sys/net/ipv4/ip_forward -echo " Enabling DynamicAddr.." -echo "1" > /proc/sys/net/ipv4/ip_dynaddr -echo " Clearing any existing rules and setting default policy.." -$IPTABLES -P INPUT ACCEPT -$IPTABLES -F INPUT -$IPTABLES -P OUTPUT ACCEPT -$IPTABLES -F OUTPUT -$IPTABLES -P FORWARD DROP -$IPTABLES -F FORWARD -$IPTABLES -t nat -F -$IPTABLES -t mangle -F -$IPTABLES -t filter -F -echo " FWD: Allow all connections OUT and only existing and related ones IN" -$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT -$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT -#$IPTABLES -A FORWARD -j LOG -echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF" -$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE - - - -ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 -sleep 1 -#$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 3 -ip addr add dev oai0 2001:1::1/64 -# -a -> Add RB -# -d -> Delete RB -# -cxx -> lcr (uid of a cx_entity) -# -ixx -> instance -# -zxx -> dscp -# -fxxx -> classref (uid of a classifier entry) if fn is used , fn is used for send classifier and n+1 for receive classifier -# -sxxx -> source ipv4 address -# -txxx -> destination ipv4 address -# -x -> source ipv6 address -# -y -> destination ipv6 address -# -r -> radio bearer id -echo "rb_tool -a -c0 -i0 -f0 -z0 -x 2001:1::1/128 -y 2001:1::2/128 -r 1" -$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -i0 -f0 -z0 -x 2001:1::1/128 -y 2001:1::2/128 -r 1 - -echo "rb_tool -a -c0 -i0 -f2 -z63 -s 10.0.1.1/32 -t 10.0.1.2/32 -r 1" -$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -i0 -f2 -z64 -s 10.0.1.1/32 -t 10.0.1.2/32 -r 1 - -echo "rb_tool -a -c0 -i0 -f2 -z63 -s 10.0.1.1/32 -t 10.0.1.2/32 -r 1" -$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -i0 -f4 -z64 -s 0.0.0.0/32 -t 0.0.0.0/32 -r 1 - -echo "to see eNB stats, please run : watch_enb script" -echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g3 -l3 > /dev/null" -nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g3 -l3 | grep RLC -echo "End" diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_enb_v2 b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_enb_v2 deleted file mode 100755 index 5a03ff1385..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_enb_v2 +++ /dev/null @@ -1,320 +0,0 @@ -#!/bin/bash -# -#------------------------------------------------ -MAKE_IP_DRIVER_TARGET="naslite_netlink_ether" -MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim" -IP_DRIVER_NAME=oai_nw_drv -########################################################### -# CONFIGURE OPTIONS -EMULIF="eth1" -LTEIF="oai0" -EXTIF="eth0" -INTIF=$LTEIF -#---------------------------------------------------------- -LTE_NETWORK_CIDR="10.0.1.0/24" -ENB_IPv4="10.0.1.1" -ENB_IPv6="2001:1::1" -ENB_IPv6_CIDR=$ENB_IPv6"/64" -ENB_IPv4_CIDR=$ENB_IPv4"/24" -ENB_IF_ID="3,9,1,8,3,6,6,2,0,0,0,0,0,0" -#---------------------------------------------------------- -UE_IPv4="10.0.1.2" -UE_IPv6="2001:1::2" -UE_IPv6_CIDR=$UE_IPv6"/64" -UE_IPv4_CIDR=$UE_IPv4"/24" -#---------------------------------------------------------- - -# +-------+ +-------+ -# | eNB | EMULIF | UE | -# | +---------------------+ | -# | | | | -# | | | | -# | | | | -# | | | | -# | | | | -# | | | | -# | | LTEIF | | -# | +.................... + | -# | |ENB_IPv4 UE_IPv4_CIDR| | -# +-------+ LTE link over +-------+ -# UDP over ethernet -########################################################### -IPTABLES=/sbin/iptables -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -declare -x OPENAIR_DIR="" -declare -x OPENAIR1_DIR="" -declare -x OPENAIR2_DIR="" -declare -x OPENAIR3_DIR="" -declare -x OPENAIR_TARGETS="" -########################################################### - - -black='\E[30m' -red='\E[31m' -green='\E[32m' -yellow='\E[33m' -blue='\E[34m' -magenta='\E[35m' -cyan='\E[36m' -white='\E[37m' - -ROOT_UID=0 -E_NOTROOT=67 - - -cecho() # Color-echo - # arg1 = message - # arg2 = color -{ -local default_msg="No Message." - message=${1:-$default_msg} - color=${2:-$black} - echo -e "$color" - echo -n "$message" - tput sgr0 - echo - return -} - -echo_error() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $red -} - -echo_warning() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $yellow -} - -echo_success() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $green -} - -set_openair() { - path=`pwd` - declare -i length_path - declare -i index - length_path=${#path} - - index=`echo $path | grep -b -o 'targets' | cut -d: -f1` - #echo ${path%$token*} - if [[ $index -lt $length_path && index -gt 0 ]] - then - declare -x OPENAIR_DIR - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - return -1 -} - -bash_exec() { - output=$($1 2>&1) - result=$? - if [ $result -eq 0 ] - then - echo_success "$1" - else - echo_error "$1: $output" - fi -} - -wait_process_started () { - if [ -z "$1" ] - then - echo_error "WAITING FOR PROCESS START: NO PROCESS" - return 1 - fi - ps -C $1 > /dev/null 2>&1 - while [ $? -ne 0 ]; do - echo_warning "WAITING FOR $1 START" - sleep 2 - ps -C $1 > /dev/null 2>&1 - done - echo_success "PROCESS $1 STARTED" - return 0 -} - -assert() { - # If condition false - # exit from script with error message - E_PARAM_ERR=98 - E_PARAM_FAILED=99 - - if [ -z "$2" ] # Not enought parameters passed. - then - return $E_PARAM_ERR - fi - - lineno=$2 - if [ ! $1 ] - then - echo "Assertion failed: \"$1\"" - echo "File \"$0\", line $lineno" - exit $E_ASSERT_FAILED - fi -} - -#bash_exec "set_openair" -set_openair -cecho "OPENAIR_DIR = $OPENAIR_DIR" $green -cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green -cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green -cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green -cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green - - -echo "Bringup UE interface" -bash_exec "rmmod $IP_DRIVER_NAME" -cecho "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET....." $green -bash_exec "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET" -bash_exec "insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/$IP_DRIVER_NAME.ko oai_nw_drv_IMEI=$ENB_IF_ID" - - -echo " Enabling proxy ARP.." -bash_exec "sysctl -w net.ipv4.conf.all.proxy_arp=1" -assert "`sysctl -n net.ipv4.conf.all.proxy_arp` -eq 1" $LINENO - -echo " Enabling ipv4 forwarding.." -bash_exec "sysctl -w net.ipv4.ip_forward=1" -assert "`sysctl -n net.ipv4.ip_forward` -eq 1" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.all.forwarding=1" -assert "`sysctl -n net.ipv4.conf.all.forwarding` -eq 1" $LINENO - -echo " Enabling ipv6 forwarding.." -bash_exec "sysctl -w net.ipv6.conf.all.forwarding=1" -assert "`sysctl -n net.ipv6.conf.all.forwarding` -eq 1" $LINENO - -echo " Enabling DynamicAddr.." -bash_exec "sysctl -w net.ipv4.ip_dynaddr=1" -assert " `sysctl -n net.ipv4.ip_dynaddr` -eq 1" $LINENO - -bash_exec "ip route flush cache" -bash_exec "ip route add 239.0.0.160/28 dev $EMULIF" - -bash_exec "ip link set $LTEIF broadcast ff:ff:ff:ff:ff:ff" -bash_exec "ip link set $LTEIF up" -sleep 1 - - -assert " -x $IPTABLES " $LINENO - -bash_exec "$IPTABLES -P INPUT ACCEPT" -bash_exec "$IPTABLES -F INPUT" -bash_exec "$IPTABLES -P OUTPUT ACCEPT" -bash_exec "$IPTABLES -F OUTPUT" -bash_exec "$IPTABLES -P FORWARD DROP" -bash_exec "$IPTABLES -F FORWARD" -bash_exec "$IPTABLES -t nat -F" -bash_exec "$IPTABLES -t mangle -F" -bash_exec "$IPTABLES -t filter -F" - - - -echo " External Interface: $EXTIF" -echo " Internal Interface: $INTIF" - -bash_exec "modprobe ip_tables" -bash_exec "modprobe ip_conntrack" -bash_exec "modprobe ip_conntrack_ftp" -bash_exec "modprobe nf_conntrack_h323" -bash_exec "modprobe nf_conntrack_irc" -bash_exec "modprobe nf_conntrack_pptp" -bash_exec "modprobe nf_conntrack_proto_gre" -bash_exec "modprobe nf_conntrack_proto_sctp" -bash_exec "modprobe nf_conntrack_tftp" -bash_exec "modprobe nf_conntrack_sip" -bash_exec "modprobe iptable_nat" -bash_exec "modprobe x_tables" - - -bash_exec "sysctl -w net.ipv4.conf.all.log_martians=1" -assert " `sysctl -n net.ipv4.conf.all.log_martians` -eq 1" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$LTEIF.log_martians=1" -assert " `sysctl -n net.ipv4.conf.$LTEIF.log_martians` -eq 1" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$EXTIF.log_martians=1" -assert " `sysctl -n net.ipv4.conf.$EXTIF.log_martians` -eq 1" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$INTIF.log_martians=1" -assert " `sysctl -n net.ipv4.conf.$INTIF.log_martians` -eq 1" $LINENO - -echo " Disabling reverse path filtering" -bash_exec "sysctl -w net.ipv4.conf.all.rp_filter=0" -assert " `sysctl -n net.ipv4.conf.all.rp_filter` -eq 0" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$LTEIF.rp_filter=0" -assert " `sysctl -n net.ipv4.conf.$LTEIF.rp_filter` -eq 0" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$EXTIF.rp_filter=0" -assert " `sysctl -n net.ipv4.conf.$EXTIF.rp_filter` -eq 0" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$INTIF.rp_filter=0" -assert " `sysctl -n net.ipv4.conf.$INTIF.rp_filter` -eq 0" $LINENO - - -bash_exec "$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT" -bash_exec "$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT" -bash_exec "$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE" - -bash_exec "ip route flush cache" - - -bash_exec "ip addr add dev $LTEIF $ENB_IPv4_CIDR" -sleep 1 -bash_exec "ip addr add dev $LTEIF $ENB_IPv6_CIDR" -sleep 1 - -# -a -> Add RB -# -d -> Delete RB -# -cxx -> lcr -# -ixx -> instance -# -zxx -> dscp -# -fxxx -> classref (uid of a classifier entry) if fn is used , fn is used for send classifier and n+1 for receive classifier -# -sxxx -> source ipv4 address -# -txxx -> destination ipv4 address -# -x -> source ipv6 address -# -y -> destination ipv6 address -# -r -> radio bearer id -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f0 -i0 -z0 -x $ENB_IPv6 -y $UE_IPv6 -r 1" -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f2 -i0 -z64 -s $ENB_IPv4/32 -t $UE_IPv4/32 -r 1" -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f4 -i0 -z64 -s 0.0.0.0/32 -t 0.0.0.0/32 -r 1" -sleep 1 - -echo "#####################################################################" -echo "iptables -t nat -nvL" -echo "---------------------------------------------------------------------" -iptables -t nat -nvL -echo "#####################################################################" -echo "ip route show table main" -echo "---------------------------------------------------------------------" -ip route show table main - -echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g3 -l3 > /dev/null" -nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g3 -l3 > /dev/null - - diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_ue b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_ue deleted file mode 100755 index 12644d7533..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_ue +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/bash -# -#------------------------------------------------ -MAKE_IP_DRIVER_TARGET="naslite_netlink_ether" -MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim" -IP_DRIVER_NAME=oai_nw_drv -########################################################### -# CONFIGURE OPTIONS -EMULIF="eth0" -LTEIF="oai0" - -#---------------------------------------------------------- -LTE_NETWORK_CIDR="10.0.1.0/24" -ENB_IPv4="10.0.1.1" -ENB_IPv6="2001:1::1" -#---------------------------------------------------------- -UE_IPv4="10.0.1.2" -UE_IPv6="2001:1::2" -UE_IPv6_CIDR=$UE_IPv6"/64" -UE_IPv4_CIDR=$UE_IPv4"/24" -UE_IMEI="3,9,1,8,3,6,7,3,0,0,0,0,0,0" -#---------------------------------------------------------- - -# +-------+ +-------+ -# | eNB | EMULIF | UE | -# | +---------------------+ + -# | | | | -# | | | | -# | | | | -# | | | | -# | | | + -# | | | | -# | | LTEIF | | -# | +.................... + | -# | |ENB_IPv4 UE_IPv4_CIDR| | -# +-------+ LTE link over +-------+ - -########################################################### -IPTABLES=/sbin/iptables -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -declare -x OPENAIR_DIR="" -declare -x OPENAIR1_DIR="" -declare -x OPENAIR2_DIR="" -declare -x OPENAIR3_DIR="" -declare -x OPENAIR_TARGETS="" -########################################################### - - -black='\E[30m' -red='\E[31m' -green='\E[32m' -yellow='\E[33m' -blue='\E[34m' -magenta='\E[35m' -cyan='\E[36m' -white='\E[37m' - -ROOT_UID=0 -E_NOTROOT=67 - - -cecho() # Color-echo - # arg1 = message - # arg2 = color -{ -local default_msg="No Message." - message=${1:-$default_msg} - color=${2:-$black} - echo -e "$color" - echo -n "$message" - tput sgr0 - echo - return -} - -echo_error() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $red -} - -echo_warning() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $yellow -} - -echo_success() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $green -} - -set_openair() { - path=`pwd` - declare -i length_path - declare -i index - length_path=${#path} - - index=`echo $path | grep -b -o 'targets' | cut -d: -f1` - #echo ${path%$token*} - if [[ $index -lt $length_path && index -gt 0 ]] - then - declare -x OPENAIR_DIR - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - return -1 -} - -bash_exec() { - output=$($1 2>&1) - result=$? - if [ $result -eq 0 ] - then - echo_success "$1" - else - echo_error "$1: $output" - fi -} - -wait_process_started () { - if [ -z "$1" ] - then - echo_error "WAITING FOR PROCESS START: NO PROCESS" - return 1 - fi - ps -C $1 > /dev/null 2>&1 - while [ $? -ne 0 ]; do - echo_warning "WAITING FOR $1 START" - sleep 2 - ps -C $1 > /dev/null 2>&1 - done - echo_success "PROCESS $1 STARTED" - return 0 -} - -assert() { - # If condition false - # exit from script with error message - E_PARAM_ERR=98 - E_PARAM_FAILED=99 - - if [ -z "$2" ] # Not enought parameters passed. - then - return $E_PARAM_ERR - fi - - lineno=$2 - if [ ! $1 ] - then - echo "Assertion failed: \"$1\"" - echo "File \"$0\", line $lineno" - exit $E_ASSERT_FAILED - fi -} - -ctrl_c() { - bash_exec "pkill oaisim" - bash_exec "ip link set $LTEIF down" - - bash_exec "rmmod $IP_DRIVER_NAME" - - bash_exec "$IPTABLES -P INPUT ACCEPT" - bash_exec "$IPTABLES -F INPUT" - bash_exec "$IPTABLES -P OUTPUT ACCEPT" - bash_exec "$IPTABLES -F OUTPUT" - bash_exec "$IPTABLES -P FORWARD ACCEPT" - bash_exec "$IPTABLES -F FORWARD" - bash_exec "$IPTABLES -t nat -F" - bash_exec "$IPTABLES -t mangle -F" - bash_exec "$IPTABLES -t filter -F" - bash_exec "ip route flush cache" -} - -#bash_exec "set_openair" -set_openair -cecho "OPENAIR_DIR = $OPENAIR_DIR" $green -cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green -cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green -cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green -cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green - -echo "Bringup UE interface" -bash_exec "rmmod $IP_DRIVER_NAME" -cecho "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET ....." $green -bash_exec "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET " -bash_exec "insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/$IP_DRIVER_NAME.ko oai_nw_drv_IMEI=$UE_IMEI" - -bash_exec "ip route flush cache" -bash_exec "ip route add 239.0.0.160/28 dev $EMULIF" - -bash_exec "ip link set $LTEIF broadcast ff:ff:ff:ff:ff:ff" -bash_exec "ip link set $LTEIF up" -sleep 1 -bash_exec "ip addr add dev $LTEIF $UE_IPv4_CIDR" -bash_exec "ip addr add dev $LTEIF $UE_IPv6_CIDR" - -# -a -> Add RB -# -d -> Delete RB -# -cxx -> lcr -# -ixx -> instance -# -zxx -> dscp -# -fxxx -> classref (uid of a classifier entry) if fn is used , fn is used for send classifier and n+1 for receive classifier -# -sxxx -> source ipv4 address -# -txxx -> destination ipv4 address -# -x -> source ipv6 address -# -y -> destination ipv6 address -# -r -> radio bearer id -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f0 -i0 -z0 -x $UE_IPv6 -y $ENB_IPv6 -r 1" -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f2 -i0 -z64 -s $UE_IPv4/32 -t $ENB_IPv4/32 -r 1" -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f4 -i0 -z64 -s 0.0.0.0/32 -t 0.0.0.0/32 -r 1" -sleep 1 - -bash_exec "sysctl -w net.ipv4.conf.all.log_martians=1" -assert " `sysctl -n net.ipv4.conf.all.log_martians` -eq 1" $LINENO - -echo " Disabling reverse path filtering" -bash_exec "sysctl -w net.ipv4.conf.all.rp_filter=0" -assert " `sysctl -n net.ipv4.conf.all.rp_filter` -eq 0" $LINENO - - -bash_exec "ip route flush cache" - -echo "#####################################################################" -echo "ip route show table main" -echo "---------------------------------------------------------------------" -ip route show table main - -trap ctrl_c INT - -echo "to see UE stats, please run : watch_ue script" -echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g3 -l3 > /dev/null" -nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g3 -l3 > /dev/null -#gdb $OPENAIR_TARGETS/SIMU/USER/oaisim -echo "End" -ctrl_c - - - diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_ue_cx2android b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_ue_cx2android deleted file mode 100755 index 2e54ae6148..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE_OAI_DRIVER_ETHERNET/start_ue_cx2android +++ /dev/null @@ -1,426 +0,0 @@ -#!/bin/bash -# -#------------------------------------------------ -MAKE_IP_DRIVER_TARGET="naslite_netlink_ether" -MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim" -MAKE_REMSERIAL_TARGET="remserial" -IP_DRIVER_NAME=oai_nw_drv -########################################################### -# CONFIGURE OPTIONS -EMULIF="eth0" -LTEIF="oai0" - -INTIF="ppp0" -EXTIF=$LTEIF -#---------------------------------------------------------- -LTE_NETWORK_CIDR="10.0.1.0/24" -ENB_IPv4="10.0.1.1" -ENB_IPv6="2001:1::1" -#---------------------------------------------------------- -UE_IPv4="10.0.1.2" -UE_IPv6="2001:1::2" -UE_IPv6_CIDR=$UE_IPv6"/64" -UE_IPv4_CIDR=$UE_IPv4"/24" -UE_IMEI="3,9,1,8,3,6,7,3,0,0,0,0,0,0" -#---------------------------------------------------------- -USE_PPP="yes" -PPP_OPTIONS="proxyarp passive nodetach ipcp-accept-remote" -PPP_DEVICE="ttyPPP_DROID" -PPP_SPEED="460800" -UE_PPP_IPv4="192.168.15.1" -TERMINAL_PPP_IPv4="192.168.15.175" -REMSERIAL_UDP_PORT="23001" -#---------------------------------------------------------- - -# +-------+ +-------+ +-------+ -# | eNB | EMULIF | UE |INTIF |ANDROID| -# | +---------------------+ +---------------------+ TERMIN| -# | | | | ppp link over | AL | -# | | | | UDP over ethernet | | -# | | | | (remserial) | | -# | | | | | | -# | | | +---serial link-------+ | -# | | | | for AT commands | | -# | | LTEIF | | | | -# | +.................... + | | | -# | |ENB_IPv4 UE_IPv4_CIDR| | | | -# +-------+ LTE link over +-------+ +-------+ - -########################################################### -IPTABLES=/sbin/iptables -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -declare -x OPENAIR_DIR="" -declare -x OPENAIR1_DIR="" -declare -x OPENAIR2_DIR="" -declare -x OPENAIR3_DIR="" -declare -x OPENAIR_TARGETS="" -########################################################### - - -black='\E[30m' -red='\E[31m' -green='\E[32m' -yellow='\E[33m' -blue='\E[34m' -magenta='\E[35m' -cyan='\E[36m' -white='\E[37m' - -ROOT_UID=0 -E_NOTROOT=67 - - -cecho() # Color-echo - # arg1 = message - # arg2 = color -{ -local default_msg="No Message." - message=${1:-$default_msg} - color=${2:-$black} - echo -e "$color" - echo -n "$message" - tput sgr0 - echo - return -} - -echo_error() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $red -} - -echo_warning() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $yellow -} - -echo_success() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $green -} - -set_openair() { - path=`pwd` - declare -i length_path - declare -i index - length_path=${#path} - - index=`echo $path | grep -b -o 'targets' | cut -d: -f1` - #echo ${path%$token*} - if [[ $index -lt $length_path && index -gt 0 ]] - then - declare -x OPENAIR_DIR - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - return -1 -} - -bash_exec() { - output=$($1 2>&1) - result=$? - if [ $result -eq 0 ] - then - echo_success "$1" - else - echo_error "$1: $output" - fi -} - -wait_process_started () { - if [ -z "$1" ] - then - echo_error "WAITING FOR PROCESS START: NO PROCESS" - return 1 - fi - ps -C $1 > /dev/null 2>&1 - while [ $? -ne 0 ]; do - echo_warning "WAITING FOR $1 START" - sleep 2 - ps -C $1 > /dev/null 2>&1 - done - echo_success "PROCESS $1 STARTED" - return 0 -} - -assert() { - # If condition false - # exit from script with error message - E_PARAM_ERR=98 - E_PARAM_FAILED=99 - - if [ -z "$2" ] # Not enought parameters passed. - then - return $E_PARAM_ERR - fi - - lineno=$2 - if [ ! $1 ] - then - echo "Assertion failed: \"$1\"" - echo "File \"$0\", line $lineno" - exit $E_ASSERT_FAILED - fi -} - -ctrl_c() { - bash_exec "pkill oaisim" - if [ "$USE_PPP"x = yesx ]; then - bash_exec "pkill remserial.bash" - bash_exec "pkill ppp_android.bash" - fi - bash_exec "pkill AT_serial_bouchon.py" - bash_exec "ip link set $LTEIF down" - - bash_exec "ip route del default via $ENB_IPv4 dev $EXTIF table int2lte" - bash_exec "ip route flush table int2lte" - bash_exec "ip rule del prio 1000" - - bash_exec "rmmod $IP_DRIVER_NAME" - - bash_exec "$IPTABLES -P INPUT ACCEPT" - bash_exec "$IPTABLES -F INPUT" - bash_exec "$IPTABLES -P OUTPUT ACCEPT" - bash_exec "$IPTABLES -F OUTPUT" - bash_exec "$IPTABLES -P FORWARD ACCEPT" - bash_exec "$IPTABLES -F FORWARD" - bash_exec "$IPTABLES -t nat -F" - bash_exec "$IPTABLES -t mangle -F" - bash_exec "$IPTABLES -t filter -F" - bash_exec "ip route flush cache" -} - -#bash_exec "set_openair" -set_openair -cecho "OPENAIR_DIR = $OPENAIR_DIR" $green -cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green -cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green -cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green -cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green - -echo "Bringup UE interface" -bash_exec "rmmod $IP_DRIVER_NAME" -cecho "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET $MAKE_REMSERIAL_TARGET....." $green -bash_exec "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET $MAKE_REMSERIAL_TARGET" -bash_exec "insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/$IP_DRIVER_NAME.ko oai_nw_drv_IMEI=$UE_IMEI" - - -echo " Enabling ipv4 forwarding.." -bash_exec "sysctl -w net.ipv4.ip_forward=1" -assert "`sysctl -n net.ipv4.ip_forward` -eq 1" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.all.forwarding=1" -assert "`sysctl -n net.ipv4.conf.all.forwarding` -eq 1" $LINENO - -echo " Enabling ipv6 forwarding.." -bash_exec "sysctl -w net.ipv6.conf.all.forwarding=1" -assert "`sysctl -n net.ipv6.conf.all.forwarding` -eq 1" $LINENO - - -if [ "$USE_PPP"x = yesx ]; then - echo " PPP enabled.." - command -v pppd > /dev/null 2>&1 || { echo_error "pppd executable needed - please install it"; exit 1;} - command -v remserial.udp > /dev/null 2>&1 || { echo_error "remserial.udp executable needed - please install it"; exit 1;} - #generate pppd script - rm -f /tmp/ppp_android.bash - bash_exec "touch /tmp/ppp_android.bash" - if [ ! -f /tmp/ppp_android.bash ]; then - echo_error "Cannot generate /tmp/ppp_android.bash file, exiting" - exit 1 - fi - echo "#!/bin/bash" >> /tmp/ppp_android.bash - echo "pppd $PPP_OPTIONS $UE_PPP_IPv4:$TERMINAL_PPP_IPv4 /dev/$PPP_DEVICE $PPP_SPEED" >> /tmp/ppp_android.bash - bash_exec "chmod 777 /tmp/ppp_android.bash" - assert " -x /tmp/ppp_android.bash " $LINENO - - #generate remserial script - rm -f /tmp/remserial.bash - bash_exec "touch /tmp/remserial.bash" - if [ ! -f /tmp/remserial.bash ]; then - echo_error "Cannot generate /tmp/remserial.bash file, exiting" - exit 1 - fi - echo "#!/bin/bash" >> /tmp/remserial.bash - echo "remserial.udp -s \"$PPP_SPEED raw\" -p $REMSERIAL_UDP_PORT -l /dev/$PPP_DEVICE /dev/ptmx" >> /tmp/remserial.bash - bash_exec "chmod 777 /tmp/remserial.bash" - assert " -x /tmp/remserial.bash " $LINENO -fi - -xterm -e $THIS_SCRIPT_PATH/AT_serial_bouchon.py & -wait_process_started AT_serial_bouchon.py - -if [ "$USE_PPP"x = yesx ]; then - xterm -e /tmp/remserial.bash & - wait_process_started remserial.bash - - xterm -e /tmp/ppp_android.bash & - wait_process_started ppp_android.bash -fi - - -assert " -x $IPTABLES " $LINENO - -bash_exec "ip route del default via $ENB_IPv4 dev $EXTIF table int2lte" -bash_exec "ip route flush table int2lte" -bash_exec "ip rule del prio 1000" - -bash_exec "$IPTABLES -P INPUT ACCEPT" -bash_exec "$IPTABLES -F INPUT" -bash_exec "$IPTABLES -P OUTPUT ACCEPT" -bash_exec "$IPTABLES -F OUTPUT" -bash_exec "$IPTABLES -P FORWARD DROP" -bash_exec "$IPTABLES -F FORWARD" -bash_exec "$IPTABLES -t nat -F" -bash_exec "$IPTABLES -t mangle -F" -bash_exec "$IPTABLES -t filter -F" - -bash_exec "ip route flush cache" -bash_exec "ip route add 239.0.0.160/28 dev $EMULIF" - -bash_exec "ip link set $LTEIF broadcast ff:ff:ff:ff:ff:ff" -bash_exec "ip link set $LTEIF up" -sleep 1 -bash_exec "ip addr add dev $LTEIF $UE_IPv4_CIDR" -bash_exec "ip addr add dev $LTEIF $UE_IPv6_CIDR" - -echo " Enabling proxy ARP.." -bash_exec "sysctl -w net.ipv4.conf.all.proxy_arp=1" -assert "`sysctl -n net.ipv4.conf.all.proxy_arp` -eq 1" $LINENO - - -# -a -> Add RB -# -d -> Delete RB -# -cxx -> lcr -# -ixx -> instance -# -zxx -> dscp -# -fxxx -> classref (uid of a classifier entry) if fn is used , fn is used for send classifier and n+1 for receive classifier -# -sxxx -> source ipv4 address -# -txxx -> destination ipv4 address -# -x -> source ipv6 address -# -y -> destination ipv6 address -# -r -> radio bearer id -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f0 -i0 -z0 -x $UE_IPv6 -y $ENB_IPv6 -r 3" -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f2 -i0 -z64 -s $UE_IPv4/32 -t $ENB_IPv4/32 -r 3" -bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f4 -i0 -z64 -s 0.0.0.0/32 -t 0.0.0.0/32 -r 3" -sleep 1 - -echo " External Interface: $EXTIF" -echo " Internal Interface: $INTIF" - -bash_exec "modprobe ip_tables" -bash_exec "modprobe ip_conntrack" -bash_exec "modprobe ip_conntrack_ftp" -bash_exec "modprobe nf_conntrack_h323" -bash_exec "modprobe nf_conntrack_irc" -bash_exec "modprobe nf_conntrack_pptp" -bash_exec "modprobe nf_conntrack_proto_gre" -bash_exec "modprobe nf_conntrack_proto_sctp" -bash_exec "modprobe nf_conntrack_tftp" -bash_exec "modprobe nf_conntrack_sip" -bash_exec "modprobe iptable_nat" -bash_exec "modprobe x_tables" - -echo " Enabling DynamicAddr.." -bash_exec "sysctl -w net.ipv4.ip_dynaddr=1" -assert " `sysctl -n net.ipv4.ip_dynaddr` -eq 1" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.all.log_martians=1" -assert " `sysctl -n net.ipv4.conf.all.log_martians` -eq 1" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$LTEIF.log_martians=1" -assert " `sysctl -n net.ipv4.conf.$LTEIF.log_martians` -eq 1" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$EMULIF.log_martians=1" -assert " `sysctl -n net.ipv4.conf.$EMULIF.log_martians` -eq 1" $LINENO - -if [ ! "$USE_PPP"x = yesx ]; then - bash_exec "sysctl -w net.ipv4.conf.$INTIF.log_martians=1" - assert " `sysctl -n net.ipv4.conf.$INTIF.log_martians` -eq 1" $LINENO -fi -echo " Disabling reverse path filtering" -bash_exec "sysctl -w net.ipv4.conf.all.rp_filter=0" -assert " `sysctl -n net.ipv4.conf.all.rp_filter` -eq 0" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$LTEIF.rp_filter=0" -assert " `sysctl -n net.ipv4.conf.$LTEIF.rp_filter` -eq 0" $LINENO - -bash_exec "sysctl -w net.ipv4.conf.$EMULIF.rp_filter=0" -assert " `sysctl -n net.ipv4.conf.$EMULIF.rp_filter` -eq 0" $LINENO - -if [ ! "$USE_PPP"x = yesx ]; then - bash_exec "sysctl -w net.ipv4.conf.$INTIF.rp_filter=0" - assert " `sysctl -n net.ipv4.conf.$INTIF.rp_filter` -eq 0" $LINENO -fi - -bash_exec "$IPTABLES -t mangle -A PREROUTING -i $INTIF -j MARK --set-mark 22" - -bash_exec "$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT" -bash_exec "$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT" -bash_exec "$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE" - -bash_exec "ip route add 127.0.0.0/8 dev lo table int2lte" -bash_exec "ip route add $LTE_NETWORK_CIDR dev $EXTIF table int2lte scope link" -bash_exec "ip route add default via $ENB_IPv4 dev $EXTIF table int2lte scope global" - -bash_exec "ip route flush cache" - -bash_exec "ip rule add fwmark 22 lookup int2lte prio 1000" - -echo "#####################################################################" -echo "iptables -t nat -nvL" -echo "---------------------------------------------------------------------" -iptables -t nat -nvL -echo "#####################################################################" -echo "iptables -t mangle -nvL" -echo "---------------------------------------------------------------------" -iptables -t mangle -nvL -echo "#####################################################################" -echo "iptables -t filter -nvL" -echo "---------------------------------------------------------------------" -iptables -t filter -nvL -echo "#####################################################################" -echo "ip rule show" -echo "---------------------------------------------------------------------" -ip rule show -echo "#####################################################################" -echo "ip route show table int2lte" -echo "---------------------------------------------------------------------" -ip route show table int2lte -echo "#####################################################################" -echo "ip route show table main" -echo "---------------------------------------------------------------------" -ip route show table main - -trap ctrl_c INT - -echo "to see UE stats, please run : watch_ue script" -echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g3 -l3 > /dev/null" -nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g3 -l3 > /dev/null -#gdb $OPENAIR_TARGETS/SIMU/USER/oaisim -echo "End" -ctrl_c - - - diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/Makefile b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/Makefile deleted file mode 100644 index 7e14cfa8de..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -all: oaisim nasmesh - -userclean: clean oaisim nasmesh - -oaisim: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make LINK_ENB_PDCP_TO_IP_DRIVER=1 -j2) -nasmesh: - (cd $(OPENAIR2_DIR) && make nasmesh_netlink.ko) - (cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL/ && make) - -clean: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make clean) - diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_enb b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_enb deleted file mode 100755 index 0f22fecbef..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_enb +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -echo "Bringup eNB interface" - -sudo rmmod nasmesh -make all -sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko - -#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) -#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 -sudo ip route add 239.0.0.160/28 dev eth0 - - -sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 - -$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 1 -$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c1 -i0 -z0 -s 10.0.1.1 -t 10.0.1.3 -r 12 - -#xterm -T ENB -hold -e ping 10.0.1.2& -#xterm -T ENB -hold -e ping 10.0.1.3& - -if [ -z $1 ]; then -echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l3 > /dev/null" -nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l3 > /dev/null -else - if [ $1 = "all" ]; then - echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l7" - nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l7 - else - echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l7 | grep -i $1" - nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l7 | grep -i $1 - fi -fi - -echo "End" diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue1 b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue1 deleted file mode 100755 index 15b45b7b24..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue1 +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -echo "Bringup UE interface" -sudo rmmod nasmesh -make all -sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko - -#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) -#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 -sudo ip route add 239.0.0.160/28 dev eth0 - - -sudo ifconfig oai0 10.0.1.2 netmask 255.255.255.0 broadcast 10.0.1.255 - -$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.2 -t 10.0.1.1 -r 1 - -#xterm -T UE1 -hold -e ping 10.0.1.1& - -if [ -z $1 ]; then -echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l3 > /dev/null" -nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l3 > /dev/null -else - if [ $1 = "all" ]; then - echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l7" - nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l7 - else - echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l7 | grep -i $1" - nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l7 | grep -i $1 - fi -fi - -echo "End" diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue2 b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue2 deleted file mode 100755 index 5cf1bb3712..0000000000 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_2UE/start_ue2 +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -echo "Bringup UE interface" -sudo rmmod nasmesh -make all -sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko - -#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) -#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 -sudo ip route add 239.0.0.160/28 dev eth0 - -sudo ifconfig oai0 10.0.1.3 netmask 255.255.255.0 broadcast 10.0.1.255 - -$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.3 -t 10.0.1.1 -r 1 - -#xterm -T UE2 -hold -e ping 10.0.1.1& - -if [ -z $1 ]; then -echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l3 > /dev/null" -nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l3 > /dev/null -else - if [ $1 = "all" ]; then - echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l7" - nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l7 - else - echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l7 | grep -i $1" - nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l7 | grep -i $1 - fi -fi - -echo "End" diff --git a/targets/SIMU/EXAMPLES/OSD/README.txt b/targets/SIMU/EXAMPLES/OSD/README.txt deleted file mode 100644 index e46362510c..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/README.txt +++ /dev/null @@ -1,4 +0,0 @@ - -This is the folder used by the OCG(openair config generation) to parse a xml-based scenario defined by the user in the WEBXML directory, and produce emulation results in the RESULTS directory. - -Please make sure that you have correctly set the OPENAIR_TARGETS variables. diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_0.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_0.xml deleted file mode 100644 index 3b41cc8ca3..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_0.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - urban - - 2.0 - -50 - - Rayleigh1 - - 5 - 7.68 - 1.9 - - - 5 - 3 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 1 - 1 - - homogeneous - macrocell - - - - random - - 1 - - fixed - - 1 - 200 - 0.1 - 5.0 - 0.1 - 10 - - - sumo-gui - $OPENAIR2_DIR/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg - 0 - 10 - 10 - 127.0.1.1 - 8883 - - - - random - - 1 - - - fixed - - - - - - - 0 - gaming_OA - 1 - 400 - 2000 - - - - - - 0.9 - 0.1 - 100 - - - 0.1 - 0.1 - 10000 - - - 100 - - 2 - udp - ipv6 - 0 - 400 - 2000 - - uniform - 100 - 1000 - 1 - 7 - - gaussian - 200 - 500 - 5 - 4 - - - 8080 - - - - - - 5000 - - - - enable - disable - - - - 1 - - - - - - 1 - - - 1 - - - - EURECOM - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_1.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_1.xml deleted file mode 100644 index 82cf2e80f8..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - 500 - - debug - - - EMU-TEST - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_10.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_10.xml deleted file mode 100644 index edf6ad1019..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_10.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - 5000 - 5000 - - - - - 3 - - STATIC - - - random - - 1 - - STATIC - - - - - - - 0 - random - 1:3 - - - - 1:2 - udp - ipv6 - 0 - - poisson - 7.3 - - unifrom - 100 - 500 - - - - - 3 - tcp - ipv4 - 0 - - fixed - 100 - - exponential - 2.2 - - - - - - - 0 - - - 1 - - - info - 1 - - 1234 - - - - OTG_3 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_11.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_11.xml deleted file mode 100644 index 189ecebeb7..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_11.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - urban - - 2.0 - -50 - - Rayleigh1 - - 5 - 7.68 - 1.9 - - - 5 - 3 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 5000 - 5000 - - homogeneous - macrocell - - - - random - - 1 - - STATIC - - 1 - 200 - 0.1 - 5.0 - 0.1 - 10 - - - sumo-gui - $OPENAIR2_DIR/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg - 0 - 10 - 10 - 127.0.1.1 - 8883 - - - - random - - 1 - - STATIC - - - - - - - 1 - mcbr - 0 - - - - 0 - udp - ipv6 - 1 - - poisson - 100 - 1000 - 4.5 - 7.3 - 30 - 15 - - uniform - 100 - 500 - 5.3 - 2.2 - 0.5 - 30 - - - - - - - 0 - - - enable - enable - enable - - - warning - 1 - - 1234 - - - - OCM_OMG_OTG_1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_120.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_120.xml deleted file mode 100644 index 6b84283808..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_120.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 1 - 10 - uniform - 10 - 100 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_121.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_121.xml deleted file mode 100644 index 93e9575137..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_121.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 1 - 10 - uniform - 100 - 500 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_122.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_122.xml deleted file mode 100644 index 8ee129e560..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_122.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 10 - 100 - unifrom - 10 - 100 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_123.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_123.xml deleted file mode 100644 index 614908e1f0..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_123.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 10 - 100 - uniform - 100 - 1000 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_124.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_124.xml deleted file mode 100644 index 855d93aafe..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_124.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 10 - 100 - uniform - 1000 - 6000 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_125.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_125.xml deleted file mode 100644 index 93378a8856..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_125.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 100 - 1000 - uniform - 10 - 100 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_126.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_126.xml deleted file mode 100644 index 01f16cdae9..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_126.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 100 - 1000 - uniform - 100 - 1000 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_127.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_127.xml deleted file mode 100644 index 8e3b0ee4f2..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_127.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 100 - 1000 - uniform - 1000 - 9000 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_128.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_128.xml deleted file mode 100644 index 1e015ac23e..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_128.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 1000 - 10000 - uniform - 10 - 100 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_129.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_129.xml deleted file mode 100644 index 004ad957fe..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_129.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - scbr - 1 - 100 - 55000 - - - - - - 1 - udp - 100 - 55000 - ipv4 - 0 - uniform - 1000 - 10000 - uniform - 100 - 1000 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_13.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_13.xml deleted file mode 100644 index 4b42383449..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_13.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - 500 - 500 - - - - - 3 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - - - - 0 - tcp - ipv4 - 1:3 - disable - 1 - uniform - 30 - 50 - uniform - 512 - 1024 - - - - - - - 10000 - enabled - enable - - enable - enable - enable - - - debug - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_14.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_14.xml deleted file mode 100644 index 1039c643dc..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_14.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - 500 - 500 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - - - - 0 - tcp - ipv4 - 1 - disable - 1 - uniform - 500 - 500 - uniform - 1000 - 1500 - - - - - - - - 0 - enable - enable - - enable - enable - disable - - - trace - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_15.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_15.xml deleted file mode 100644 index 0aa4fa1ca1..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_15.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - 500 - 500 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - 0.6 - 10 - 200 - 1 - tcp - ipv4 - 0 - enable - 1 - uniform - 80 - 100 - uniform - 100 - 200 - - - - - - 0.6 - 10 - 200 - 0 - tcp - ipv4 - 1 - enable - 1 - uniform - 1000 - 2000 - uniform - 100 - 200 - - - - - - 100000 - enable - enable - - enable - enable - enable - - - trace - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_16.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_16.xml deleted file mode 100644 index ceda1c309c..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_16.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - 500 - 500 - - - - - 3 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - - - - 70 - 0.1 - 0.8 - 50 - 13 - 230 - 1:3 - udp - ipv6 - 0 - enable - 1 - uniform - 4.5 - pareto - 0.5 - 30 - - - - - - 1000 - enable - enable - - enable - enable - enable - - - trace - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_17.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_17.xml deleted file mode 100644 index 0dbc30e3ff..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_17.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - 500 - 500 - - - - - 3 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - - - - 70 - 0.1 - 0.2 - 100 - 200 - 230 - 1:3 - udp - ipv6 - 0 - enable - 1 - uniform - 100 - 200 - pareto - 0.5 - 30 - - - - - - 3000 - enable - enable - - enable - enable - enable - - - trace - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_18.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_18.xml deleted file mode 100644 index ed4b8395bb..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_18.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - 500 - 500 - - - - - 3 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - m2m_traffic - enable - 1 - 1:3 - - - - - - 5000 - enable - enable - - enable - enable - enable - - - trace - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_19.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_19.xml deleted file mode 100644 index e422beb3c4..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_19.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - 500 - 500 - - - - - 3 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - - - 0 - tcp - ipv4 - 1:3 - enable - 1 - uniform - 400 - 500 - uniform - 80 - 150 - 60 - 70 - 0.2 - 0.1 - 0.2 - 0.1 - 0.3 - 0.1 - 0.2 - 100 - 120 - 150 - 500 - - - - - - 0 - enable - enable - - enable - enable - enable - - - debug - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_2.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_2.xml deleted file mode 100644 index c2aae58b56..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_2.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - free_space - - 2 - -50 - - - - - - -90 - - - - -90 - - - - - - - 1000 - 1000 - - - - - random - - 2 - - RWP - - - - random - - 2 - - STATIC - - - - - - 0 - - debug - - - OCM_OMG_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_20.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_20.xml deleted file mode 100644 index b8f35407c1..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_20.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - 2.0 - - AWGN - - 1.9 - - - - - 500 - 500 - - - - - 4 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - udp - ipv6 - 1:3 - disable - uniform - 40 - 50 - fixed - 1400 - 1400 - - - - 1:3 - udp - ipv6 - 0 - 200 - 7000 - disable - fixed - 40 - 50 - uniform - 256 - 768 - - - - - - 30000 - disable - - enable - enable - enable - - - info - low - 1 - - 1234 - - - - MEDIEVAL_OTG_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_21.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_21.xml deleted file mode 100644 index 19c85d6b0b..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_21.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - 500 - 500 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 1 - alarm_temperature - disable - 1 - 0 - - - - - - 10000 - enable - enable - - enable - enable - enable - - - trace - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_22.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_22.xml deleted file mode 100644 index 90685f8a60..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_22.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 7 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - - - 1:7 - udp - 0 - 8000 - ipv4 - 0 - fixed - 30 - 2000 - fixed - 100 - 200 - - - - - - 10000 - disable - - enable - enable - enable - - - trace - medium - - 2014 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_26.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_26.xml deleted file mode 100755 index 5f84eca3cc..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_26.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - 2.0 - -100 - - AWGN - - 1.9 - 1 - - - - - - 1000 - 1000 - - - - - 7 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - udp - ipv6 - 1:7 - 1000 - 10000 - - disable - uniform - 50 - 100 - uniform - 128 - 1400 - - - - 1:7 - udp - ipv6 - 0 - 0 - 10000 - disable - uniform - 100 - 150 - uniform - 256 - 768 - - - - - - 15000 - disable - - enable - enable - enable - - - info - low - 1 - - 0 - - - - MEDIEVAL_OTG_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_27.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_27.xml deleted file mode 100644 index 74ef5e772f..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_27.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - 2.0 - - AWGN - - 1.9 - - - - - 1000 - 1000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - udp - ipv4 - 1 - 1000 - 10000 - - disable - fixed - 1000 - 1000 - fixed - 32 - 32 - - - - 1 - udp - ipv6 - 0 - 1000 - 10000 - disable - fixed - 1000 - 1000 - uniform - 32 - 32 - - - - - - 15000 - disable - - enable - enable - enable - - - debug - medium - 1 - - 0 - - - - MEDIEVAL_OTG_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_29.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_29.xml deleted file mode 100644 index 5810f14ad0..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_29.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - free_space - - 2 - -50 - - AWGN - - 5 - 7.68 - 1.9 - 1 - - - 0 - 1 - 1.13 - 0 - 43 - - - 0 - 0 - 20 - - - - - - - 500 - 500 - - - - random - - 2 - - STATIC - - - - random - - 2 - - - STATIC - - - - - - - - 0 - 2 - fixed - 10 - fixed - 125 - - - - 2 - 0 - fixed - 10 - fixed - 125 - - - - - - 10000 - - - enable - enable - enable - - - - debug - medium - 1 - - 1234 - - - - LOLA_SCHED_1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_3.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_3.xml deleted file mode 100644 index 85bc55d4bc..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_3.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - free_space - - 2 - -50 - - Rice1 - - - 5 - 7.68 - 1.9 - - - - -90 - - - -90 - - - - - - - 500 - 500 - - - - random - - 1 - - STATIC - - - - random - - 1 - - - STATIC - - - - - - 5000 - - debug - - - - OCM_OMG_2 - - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_33.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_33.xml deleted file mode 100644 index 569dada42c..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_33.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - 500 - 500 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - - - 0 - voip_g729 - 1 - - - 1 - voip_g729 - 0 - - - - 0 - voip_g711 - 1 - - - 1 - voip_g711 - 0 - - - - 1 - iqsim_mango - 0 - disable - - - 0 - iqsim_mango - 1 - - - - 1 - iqsim_newsteo - 0 - - - 0 - iqsim_newsteo - 1 - - - - - 10000 - enable - enable - - enable - enable - disable - - - info - 1 - - 1234 - - - - OTG_2 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_34.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_34.xml deleted file mode 100644 index 2018130d93..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_34.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - 500 - 500 - - - - random - - 1 - - RWP - - 5 - 5 - 0.1 - 5.0 - 0.1 - 10 - - - - random - - 1 - - - STATIC - - - - - - - 10000 - - 1 - enable - enable - - - info - medium - 1 - - 0 - - - - eMBMS_1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_4.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_4.xml deleted file mode 100644 index 45ae081a93..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_4.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - 100 - 100 - - - - random - - 1 - - RWP - - RESTRICTED - - - 0.01 - 10 - 0.01 - 10 - 0.01 - 10 - - - - - random - - 1 - - STATIC - - - - - - - 1000 - - - OMG_OMV - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_40.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_40.xml deleted file mode 100644 index c7fdcc4de6..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_40.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - urban - - 3.67 - -128 - - Rayleigh1 - - 7.68 - 1.9 - 6 - - - 0 - 1 - 0 - 0 - 43 - - - 0 - 0 - 20 - - - - - - - 5000 - 5000 - - - - random - - 1 - - TRACE - static_2ues.tr - - - random - - 1 - - STATIC - - - - - - - - - 0 - 1 - fixed - 10 - fixed - 1000 - - - - - - 10000 - disable - - 1 - - - info - high - 1 - - 7111 - - - - OCM_OMG_OTG_REF_1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_41.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_41.xml deleted file mode 100644 index d568b8b7de..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_41.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - urban - - 3.67 - -128 - - AWGN - - 7.68 - 1.9 - 1 - - - 0 - 1 - 0 - 0 - 43 - - - 0 - 0 - 20 - - - - - - - 5000 - 5000 - - - - random - - 1 - - TRACE - static_2ues.tr - - - random - - 1 - - STATIC - - - - - - - - 0 - 1 - fixed - 10 - fixed - 1500 - - - - - 1 - 0 - fixed - 10 - fixed - 1000 - - - - - 10000 - - - 1 - - - info - medium - 1 - - 7111 - - - - OCM_OMG_OTG_REF_1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_42.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_42.xml deleted file mode 100644 index cbec73e902..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_42.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - urban - - 3.67 - - -120 - - AWGN - - 7.68 - 1.9 - 1 - - - 0 - 1 - 0 - 0 - 15 - - - 0 - 0 - 0 - - - - - - - 10000 //2400 - 10000 //2400 - - - - random - - 1 - - TRACE - handover.tr - - - - random - - 3 - - TRACE - hexagonal_eNBs.tr - - - - - - 10000 - - - debug - high - 1 - - 1234 - - - - HO_1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_43.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_43.xml deleted file mode 100644 index f4a95c2a2a..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_43.xml +++ /dev/null @@ -1,70 +0,0 @@ - -- - - - urban - - 3.67 - -111 - - Rayleigh1 - - 7.68 - 1.9 - 1 - - - 0 - 1 - 0 - 0 - 15 - - - 0 - 0 - 20 - - - - - - - 800 - 800 - - - - random - - 1 - - TRACE - static_1ue.tr - - - random - - 1 - - STATIC - - - - - - - 1200 - disable - - - info - low - 1 - - 69 - - - - eMBMS_OMG_REF_1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_5.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_5.xml deleted file mode 100644 index 32526c6f6e..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_5.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - urban - - 2.67 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 1000 - 1000 - - - - random - - 2 - - RWP - - 1 - 2 - 0.1 - 15.0 - - - - random - - 1 - - - STATIC - - - - - - - 0 - mcbr - 1:2 - 100 - 6000 - - - - 1:2 - udp - 100 - 6000 - ipv4 - 0 - uniform - 10 - 100 - uniform - 64 - 1024 - - - - - - 10000 - - disable - - enable - enable - enable - - - info - low - - 0 - - - - OCM_OMG_OTG - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_6.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_6.xml deleted file mode 100644 index 89c4646cce..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_6.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - 5000 - 5000 - - - - - 1 - - STATIC - - - random - - 1 - - STATIC - - - - - - 0 - - debug - high - 10 - - 1234 - - - 1 - 0 - - - - CLI - - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_60.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_60.xml deleted file mode 100644 index 2b85350097..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_60.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - urban - - 2 - -100 - - AWGN - - 5 - - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - - 500 - 500 - - - - - 1 - - STATIC - - - - fixed - - 10 - 10 - - - 1 - - STATIC - - - - - - - - 0 - voip_g729 - 1 - - - 0 - scbr - 1 - - - 1 - voip_g729 - 0 - - - - - - 10000 - enable - enable - - enable - enable - enable - enable - - - debug - low - - - -TEST1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_7.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_7.xml deleted file mode 100644 index 6105cd1137..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_7.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - 700 - 700 - - - - random - - 8 - - SUMO - - 1 - 20 - 0.1 - 5.0 - 0.1 - 10 - - - sumo-gui - $OPENAIR2_DIR/UTIL/OMG/SUMO/SCENARIOS/traci.scen.sumo.cfg - 0 - 10000 - 1 - 127.0.1.1 - 8890 - - - - random - - 1 - - - STATIC - - - - - - - 10000 - - info - 1 - - 974930 - - - - OMG_SUMO - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_70.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_70.xml deleted file mode 100644 index 0bb408788f..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_70.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - urban - - 2 - -100 - - AWGN - - 5 - 7.68 - 1.9 - - - 5 - 1 - 1.13 - 16 - 40 - - - 1 - 5 - 20 - - - - - - - 2000 - 2000 - - - - - 2 - - STATIC - - - random - - 1 - - STATIC - - - - - - - - 0 - - scbr - 1:2 - - - - - - 1:2 - udp - 0 - 55000 - ipv4 - 0 - uniform - 100 - 1000 - uniform - 100 - 1000 - - - - - - 60000 - disable - - enable - enable - enable - - - info - low - - 2013 - - - - - - 10 - - - - CBA_1 - - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_8.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_8.xml deleted file mode 100644 index f13b06ab34..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_8.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - 5000 - 5000 - - - - - 4 - - STATIC - - - random - - 1 - - STATIC - - - - - - - 0 - mcbr - 1:3 - - - 1:3 - scbr - 1:3 - - - - - 30000 - - 1 - - - debug - medium - 1 - - 1234 - - - - OTG_1 - diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_9.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_9.xml deleted file mode 100644 index 6dcee26270..0000000000 --- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_9.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 5000 - 5000 - - - - - 3 - - STATIC - - - random - - 1 - - STATIC - - - - - - - 0 - gaming_OA - 3 - - - 1:3 - udp - ipv6 - 0 - - gaussian - 100 - 1000 - 4.5 - - pareto - 0.5 - 30 - - - - - - - 5000 - - - 1 - - - debug - 1 - - 1234 - - - - OTG_2 - diff --git a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/Makefile b/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/Makefile deleted file mode 100644 index 6fdf92b93e..0000000000 --- a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -#ifdef cygwin -#cyg=cygwin -#endif - -help: - @echo "make one_eNB_two_UE_nas: compiles the code and performs a simulation with IP traffic between two virtual nodes (Linux only)" - @echo "make one_eNB_one_UE: compiles the code and performs a small simulation (30 frames) with 1 eNB and 1 UE and checks that RLC data is transported between the two nodes after the connection setup" - @echo "make one_eNB_four_UE: comples the code and performs a small simulation (60 frames) with 1 eNB and 4 UE and checks that all 4 UEs have established a complete connection (RRC output is traced)" - @echo "make clean: Removes all .o files" - -all: help - -oaisim: - (cd $(OPENAIR_TARGETS)/SIMU/USER && $(MAKE) oaisim LINK_ENB_PDCP_TO_IP_DRIVER=1 OAI_NW_DRIVER_TYPE_ETHERNET=1 DEBUG=1) -oaisim_nas: - (cd $(OPENAIR_TARGETS)/SIMU/USER && $(MAKE) oaisim OAI_NW_DRIVER_TYPE_ETHERNET=1 LINK_ENB_PDCP_TO_IP_DRIVER=1) -nasmesh: - (cd $(OPENAIR2_DIR) && make nasmesh_netlink_address_fix.ko) - (cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL && make) - -one_eNB_one_UE_nas: oaisim_nas nasmesh - ./start_one_eNB_multi_UE_nas 1 - -one_eNB_two_UE_nas: oaisim_nas nasmesh - ./start_one_eNB_multi_UE_nas 2 - -one_eNB_three_UE_nas: oaisim_nas nasmesh - ./start_one_eNB_multi_UE_nas 3 - -one_eNB_one_UE : oaisim - ../../USER/oaisim -n30 | egrep SEND_SDU - -one_eNB_four_UE : oaisim - ../../USER/oaisim -n60 -u4 | egrep "\[RRC\]" - -one_eNB_one_UE_PHY : oaisim_nas nasmesh - ./start_one_eNB_two_UE_PHY_nas 2 - -clean: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make clean) - -echo_vars: - echo $(OPENAIR1_DIR) - echo $(OPENAIR2_DIR) - echo $(OPENAIR3_DIR) - echo $(OPENAIR_TARGETS) diff --git a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/start_one_eNB_multi_UE_nas b/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/start_one_eNB_multi_UE_nas deleted file mode 100755 index df8357c610..0000000000 --- a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/start_one_eNB_multi_UE_nas +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -echo "Bringup eNB interface" - -sudo rmmod nasmesh -sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko - -#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) -#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 -sudo ip route add 224.0.0.160/28 dev eth0 - - -echo "bring up oai0 interface for enb" -sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 -echo "bring up oai1 interface for ue 1" -sudo ifconfig oai1 10.0.2.2 netmask 255.255.255.0 broadcast 10.0.2.255 - -# enb -> ue1 -$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 1 -# ue1 -> enb -$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i1 -z0 -s 10.0.2.2 -t 10.0.2.1 -r 1 - -if [ $1 -ge 2 ]; then - echo "bring up oai2 interface for ue 2" - sudo ifconfig oai2 10.0.3.3 netmask 255.255.255.0 broadcast 10.0.3.255 - -# enb -> ue2 - $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c1 -i0 -z0 -s 10.0.1.1 -t 10.0.1.3 -r 12 -# ue2 -> enb - $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c1 -i2 -z0 -s 10.0.3.3 -t 10.0.3.1 -r 1 -fi - -if [ $1 -ge 3 ]; then - echo "bring up oai3 interface for ue 3" - sudo ifconfig oai3 10.0.4.4 netmask 255.255.255.0 broadcast 10.0.4.255 - -# enb -> ue2 - $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c2 -i0 -z0 -s 10.0.1.1 -t 10.0.1.4 -r 23 -# ue2 -> enb - $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c2 -i3 -z0 -s 10.0.4.4 -t 10.0.4.1 -r 1 -fi - -if [ $1 -ge 4 ]; then - - echo "add oai interfaces for more UEs here" - -fi - -echo "start the emulation with 1eNB and" $1 "UE" -echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -a -V -u" $1 ">/dev/null" -$OPENAIR_TARGETS/SIMU/USER/oaisim -a -V -u $1 > /dev/null - - -echo "End" diff --git a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/start_one_eNB_two_UE_PHY_nas b/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/start_one_eNB_two_UE_PHY_nas deleted file mode 100755 index 2646a7902f..0000000000 --- a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB/start_one_eNB_two_UE_PHY_nas +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -echo "Bringup eNB interface" - -sudo rmmod nasmesh -sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko - -#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) -#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 -sudo ip route add 224.0.0.160/28 dev eth0 - - -echo "bring up oai0 interface for enb" -sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 -echo "bring up oai1 interface for ue 1" -sudo ifconfig oai1 10.0.2.2 netmask 255.255.255.0 broadcast 10.0.2.255 - -# enb -> ue1 -$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 1 -# ue1 -> enb -$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i1 -z0 -s 10.0.2.2 -t 10.0.2.1 -r 1 - -if [ $1 -ge 2 ]; then - echo "bring up oai2 interface for ue 2" - sudo ifconfig oai2 10.0.3.3 netmask 255.255.255.0 broadcast 10.0.3.255 - -# enb -> ue2 - $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c1 -i0 -z0 -s 10.0.1.1 -t 10.0.1.3 -r 12 -# ue2 -> enb - $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c1 -i2 -z0 -s 10.0.3.3 -t 10.0.3.1 -r 1 -fi - -if [ $1 -ge 3 ]; then - echo "bring up oai3 interface for ue 3" - sudo ifconfig oai3 10.0.4.4 netmask 255.255.255.0 broadcast 10.0.4.255 - -# enb -> ue2 - $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c2 -i0 -z0 -s 10.0.1.1 -t 10.0.1.4 -r 23 -# ue2 -> enb - $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c2 -i3 -z0 -s 10.0.4.4 -t 10.0.4.1 -r 1 -fi - -if [ $1 -ge 4 ]; then - - echo "add oai interfaces for more UEs here" - -fi - -echo "start the emulation with 1eNB and 2 UE" -echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -c40 > /dev/null" -$OPENAIR_TARGETS/SIMU/USER/oaisim -c40 > /dev/null - - -echo "End" diff --git a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/Makefile b/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/Makefile deleted file mode 100755 index 7cff6e66e6..0000000000 --- a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/Makefile +++ /dev/null @@ -1,31 +0,0 @@ - -all: oaisim naslite_netlink_ether - -oaisim: - (cd $(OPENAIR_TARGETS)/SIMU/USER && $(MAKE) oaisim OAI_NW_DRIVER_TYPE_ETHERNET=1 LINK_ENB_PDCP_TO_IP_DRIVER=1) - -naslite_netlink_ether: - (cd $(OPENAIR2_DIR) && $(MAKE) naslite_netlink_ether.ko) - (cd $(OPENAIR2_DIR)/NAS/DRIVER/LITE/RB_TOOL/ && $(MAKE)) - -userclean: clean oaisim naslite_netlink_ether - -one_eNB_one_UE_nas: oaisim naslite_netlink_ether - /bin/bash ./start_one_eNB_multi_UE_nas 1 - -one_eNB_two_UE_nas: oaisim naslite_netlink_ether - /bin/bash ./start_one_eNB_multi_UE_nas 2 - -one_eNB_three_UE_nas: oaisim naslite_netlink_ether - /bin/bash ./start_one_eNB_multi_UE_nas 3 - -clean: - (cd $(OPENAIR_TARGETS)/SIMU/USER && $(MAKE) clean) - (cd $(OPENAIR2_DIR)/NAS/DRIVER/LITE && $(MAKE) clean) - -echo_vars: - echo $(OPENAIR1_DIR) - echo $(OPENAIR2_DIR) - echo $(OPENAIR3_DIR) - echo $(OPENAIR_TARGETS) - diff --git a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/start_one_eNB_multi_UE_nas b/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/start_one_eNB_multi_UE_nas deleted file mode 100755 index 9074794228..0000000000 --- a/targets/SIMU/EXAMPLES/VIRT_EMUL_1eNB_OAI_LITE/start_one_eNB_multi_UE_nas +++ /dev/null @@ -1,531 +0,0 @@ -#!/bin/bash -echo "Bash version ${BASH_VERSION}..." - -declare GENERATE_SEQ_DIAGRAM="no" -declare LOG_FILE_LTE="no" -#------------------------------------------------ -declare MAKE_IP_DRIVER_TARGET="naslite_netlink_ether" -declare MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim" -declare IP_DRIVER_NAME="oai_nw_drv" -#------------------------------------------------ -declare -a NAS_IMEI=( 3 9 1 8 3 6 6 2 0 0 0 0 0 0 ) -# first value is for ENB, then UE0, UE1, etc. -declare -a MARKING=( 1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 ) -# BE CAREFULL MAY NOT WORK WITH OTHER VALUES (TO DO) -declare -i NUM_ENB=1 -#------------------------------------------------ -# Notes: -# We would like to remove the ipv4 addresses swap in the IP driver code for oai virtualized. -# Let's say oai0 has ipv4 @ 10.0.1.1, oai1 has ipv4 @ 10.0.2.2 etc. -# In the past when we generated some local traffic on the computer and wanted to make it go -# through for example oai1 to oai0, the ipv4 destination address was 10.0.2.1 -# meaning 10.0.2.2 wants to send a paquet to 10.0.1.1, -# so ip_destination[2] has the digit corresponding to the source -# so ip_destination[3] has the digit corresponding to the destination -# then in the driver we modified at the receiving side (oai0 here) the ip source and destination -# addresses in this way: -# Originating packet: SRC 10.0.X.X -> 10.0.2.1 -# Resulting modified packet at the receiving side: SRC 10.0.1.2 -> 10.0.1.1 -# So the packet could be accepted by the device (same dest @) and the fake source was was recorded (1.2). -# So the response to this packet could return to the interface by where the request was pulled. -# But this solution lead to recompute checksums of packets in the driver. -# -# So here we describe a solution where packets are not modified by the IP driver but by the kernel: -# -# +---------------+ +---------------+ +---------------+ -# |APP "VIRTUALLY"| |APP "VIRTUALLY"| |APP "VIRTUALLY"| etc -# |running on eNB | |running on UE0 | |running on UE1 | -# |sending traffic| | | | | -# | to UE 1 | | | | | -# +---------------+ +---------------+ +---------------+ -# | ^ | ^ | ^ -# | | | | | | -# Tx packet (n1) | | | Tx packet (n2) | -# XXXX->10.0.1.3 | | | XXXX->10.0.1.3 | -# | | | | | | -# | Rx packet (n2) | | | Rx packet (n1) -# | 10.0.1.3->10.0.1.1 | | | 10.0.3.1->10.0.3.3 -# V | V | V | -# +-----------------------------------------------------------------------------+ -# | IPTABLES Table mangle chain OUTPUT TARGET MARK OPERATION setmark | -# | On packets coming from applications | -# |-----------------------------------------------------------------------------| -# | Example for packet n1: | -# | iptables -t mangle -A OUTPUT --dst 10.0.1.3 -j MARK --set-mark 0x0103 | -# +-----------------------------------------------------------------------------+ -# | | | | | | -# Tx packet (n1) | | | | | -# XXXX->10.0.1.3 | | | | | -# mark 0x0103 | | | | | -# | | | | | | -# V | V | V | -# +-----------------------------------------------------------------------------+ -# | IPTABLES Table nat chain POSTROUTING TARGET SNAT OPERATION --to Fake IP SRC| -# | On packets coming from applications | -# |-----------------------------------------------------------------------------| -# | Example for packet n1: | -# | iptables -t nat -A POSTROUTING -m mark --mark 0x0103 -j SNAT --to 10.0.3.1 | -# +-----------------------------------------------------------------------------+ -# | | | | | | -# | | | | | Rx packet (n1) -# | | | | | 10.0.3.1->10.0.3.3 -# | | | | | mark 0x0103 -# | | | | | | -# +-----------------------------------------------------------------------------+ -# | IPTABLES Table mangle chain PREROUTING TARGET MARK OPERATION setmark | -# | On packets coming from applications | -# |-----------------------------------------------------------------------------| -# | Example for packet n1: | -# | iptables -t nat -A PREROUTING -m mark --mark 0x0103 -j DNAT --to 10.0.3.3 | -# +-----------------------------------------------------------------------------+ -# | ^ | ^ | ^ -# | | | | | | -# Tx packet (n1) | | | | Rx packet (n1) -# 10.0.3.1->10.0.1.3 | | | 10.0.3.1->10.0.1.3 -# mark 0x0103 | | | | mark 0x0103 -# | | | | | | -# +-----------------------------------------------------------------------------+ -# | IPTABLES Table mangle chain PREROUTING TARGET MARK OPERATION setmark | -# | On packets coming from applications | -# |-----------------------------------------------------------------------------| -# | Example for packet n1: | -# | iptables -t mangle -A PREROUTING --dst 10.0.1.3 -j MARK --set-mark 0x0103 | -# +-----------------------------------------------------------------------------+ -# | ^ | ^ | ^ -# | | | | | Rx packet (n1) -# | | | | | 10.0.3.1->10.0.1.3 -# | | | | | | -# |10.0.1.1| |10.0.2.2| |10.0.3.3| -# V | V | V | -# +----------+ +----------+ +----------+ -# | oai0 | | oai1 | | oai2 | -# | (eNB) | | (UE0) | | (UE1) | -# +----------+ +----------+ +----------+ - -#################################################################################### -# HERE IS A DISPLAY OF THE CONTENT OF THE NAT TABLE FOR THE DESCRIBED SETTING -#################################################################################### -# Chain PREROUTING (policy ACCEPT 1108 packets, 242K bytes) -# pkts bytes target prot opt in out source destination -# 0 0 DNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x102 to:10.0.2.2 -# 0 0 DNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x103 to:10.0.3.3 -# 0 0 DNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x201 to:10.0.1.1 -# 0 0 DNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x203 to:10.0.3.3 -# 0 0 DNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x301 to:10.0.1.1 -# 0 0 DNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x302 to:10.0.2.2 -# -# Chain POSTROUTING (policy ACCEPT 2118 packets, 175K bytes) -# pkts bytes target prot opt in out source destination -# 0 0 SNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x102 to:10.0.2.1 -# 0 0 SNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x103 to:10.0.3.1 -# 0 0 SNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x201 to:10.0.1.2 -# 0 0 SNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x203 to:10.0.3.2 -# 0 0 SNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x301 to:10.0.1.3 -# 0 0 SNAT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x302 to:10.0.2.3 -# -# Chain OUTPUT (policy ACCEPT 2133 packets, 186K bytes) -# pkts bytes target prot opt in out source destination -#################################################################################### -# HERE IS A DISPLAY OF THE CONTENT OF THE MANGLE TABLE FOR THE DESCRIBED SETTING -#################################################################################### -#root@hades:~# iptables -t mangle -nvL -# Chain PREROUTING (policy ACCEPT 2008K packets, 316M bytes) -# pkts bytes target prot opt in out source destination -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.1.2 MARK xset 0x102/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.1.3 MARK xset 0x103/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.2.1 MARK xset 0x201/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.2.3 MARK xset 0x203/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.3.1 MARK xset 0x301/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.3.2 MARK xset 0x302/0xffffffff -# -# Chain INPUT (policy ACCEPT 2008K packets, 316M bytes) -# pkts bytes target prot opt in out source destination -# -# Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) -# pkts bytes target prot opt in out source destination -# -# Chain OUTPUT (policy ACCEPT 1989K packets, 331M bytes) -# pkts bytes target prot opt in out source destination -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.1.2 MARK xset 0x102/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.1.3 MARK xset 0x103/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.2.1 MARK xset 0x201/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.2.3 MARK xset 0x203/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.3.1 MARK xset 0x301/0xffffffff -# 0 0 MARK all -- * * 0.0.0.0/0 10.0.3.2 MARK xset 0x302/0xffffffff -# -# Chain POSTROUTING (policy ACCEPT 1990K packets, 331M bytes) -# pkts bytes target prot opt in out source destination -# -#################################################################################### -# We also avoid the manipulation of ipv4 ARP packets by setting ourselves the neighbour cache: -#################################################################################### -#root@hades:~# ip neigh show -#... -#10.0.3.1 dev oai1 lladdr 00:39:18:36:62:00 PERMANENT -#10.0.2.1 dev oai1 lladdr 00:39:18:36:62:00 PERMANENT -#10.0.1.1 dev oai1 lladdr 00:39:18:36:62:00 PERMANENT -#... -#10.0.1.2 dev oai0 lladdr 00:39:18:36:62:01 PERMANENT -#10.0.2.2 dev oai0 lladdr 00:39:18:36:62:01 PERMANENT -#10.0.3.2 dev oai0 lladdr 00:39:18:36:62:01 PERMANENT -#... -#10.0.1.3 dev oai0 lladdr 00:39:18:36:62:02 PERMANENT -#10.0.2.3 dev oai0 lladdr 00:39:18:36:62:02 PERMANENT -#10.0.3.3 dev oai0 lladdr 00:39:18:36:62:02 PERMANENT - -# - -########################################################### -IPTABLES=/sbin/iptables -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -declare -x OPENAIR_DIR="" -declare -x OPENAIR1_DIR="" -declare -x OPENAIR2_DIR="" -declare -x OPENAIR3_DIR="" -declare -x OPENAIR_TARGETS="" -########################################################### - - -black='\E[30m' -red='\E[31m' -green='\E[32m' -yellow='\E[33m' -blue='\E[34m' -magenta='\E[35m' -cyan='\E[36m' -white='\E[37m' - -ROOT_UID=0 -E_NOTROOT=67 - - -cecho() # Color-echo - # arg1 = message - # arg2 = color -{ -local default_msg="No Message." - message=${1:-$default_msg} - color=${2:-$black} - echo -e "$color" - echo -n "$message" - tput sgr0 - echo - return -} - -echo_error() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $red -} - -echo_warning() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $yellow -} - -echo_success() { -local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $green -} - -set_openair() { - path=`pwd` - declare -i length_path - declare -i index - length_path=${#path} - - index=`echo $path | grep -b -o 'targets' | cut -d: -f1` - #echo ${path%$token*} - if [[ $index -lt $length_path && index -gt 0 ]] - then - declare -x OPENAIR_DIR - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - return -1 -} - -bash_exec() { - output=$($1 2>&1) - result=$? - if [ $result -eq 0 ] - then - echo_success "$1" - else - echo_error "$1: $output" - fi -} - -wait_process_started () { - if [ -z "$1" ] - then - echo_error "WAITING FOR PROCESS START: NO PROCESS" - return 1 - fi - ps -C $1 > /dev/null 2>&1 - while [ $? -ne 0 ]; do - echo_warning "WAITING FOR $1 START" - sleep 2 - ps -C $1 > /dev/null 2>&1 - done - echo_success "PROCESS $1 STARTED" - return 0 -} - -assert() { - # If condition false - # exit from script with error message - E_PARAM_ERR=98 - E_PARAM_FAILED=99 - - if [ -z "$2" ] # Not enought parameters passed. - then - return $E_PARAM_ERR - fi - - lineno=$2 - if [ ! $1 ] - then - echo "Assertion failed: \"$1\"" - echo "File \"$0\", line $lineno" - exit $E_ASSERT_FAILED - fi -} - -ctrl_c() { - bash_exec "pkill oaisim" - bash_exec "ip link set $LTEIF down" - - bash_exec "rmmod $IP_DRIVER_NAME" - - bash_exec "$IPTABLES -P INPUT ACCEPT" - bash_exec "$IPTABLES -F INPUT" - bash_exec "$IPTABLES -P OUTPUT ACCEPT" - bash_exec "$IPTABLES -F OUTPUT" - bash_exec "$IPTABLES -P FORWARD ACCEPT" - bash_exec "$IPTABLES -F FORWARD" - bash_exec "$IPTABLES -t nat -F" - bash_exec "$IPTABLES -t mangle -F" - bash_exec "$IPTABLES -t filter -F" - bash_exec "ip route flush cache" -} - - -set_openair -cecho "OPENAIR_DIR = $OPENAIR_DIR" $green -cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green -cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green -cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green -cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green - - -declare -i NUM_MOBILES -declare -i INSTANCE -declare -i IP_SOURCE -declare -i IP_DEST -declare -i IP -declare -i RB_ID -declare -i CLASSIFIER_ID - - -trap ctrl_c INT - -bash_exec "ip route flush cache" -bash_exec "$IPTABLES -P INPUT ACCEPT" -bash_exec "$IPTABLES -F INPUT" -bash_exec "$IPTABLES -P OUTPUT ACCEPT" -bash_exec "$IPTABLES -F OUTPUT" -bash_exec "$IPTABLES -P FORWARD DROP" -bash_exec "$IPTABLES -F FORWARD" -bash_exec "$IPTABLES -t nat -F" -bash_exec "$IPTABLES -t mangle -F" -bash_exec "$IPTABLES -t filter -F" - - -NUM_MOBILES=$1 - -for ((i=0 ; i < `expr $NUM_MOBILES + $NUM_ENB`; i++ )) -do - TEST_OAI=`/sbin/ifconfig | grep oai$i | awk '{print $1}'` - if [ "$TEST_OAI" = oai"$i"x ]; then - bash_exec "ip link set oai$i down" - fi -done - - - -echo "Bringup OAI network interfaces" - -bash_exec "rmmod $IP_DRIVER_NAME" -cecho "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET....." $green -bash_exec "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET" -bash_exec "insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/$IP_DRIVER_NAME.ko oai_nw_drv_IMEI=${NAS_IMEI[0]},${NAS_IMEI[1]},${NAS_IMEI[2]},${NAS_IMEI[3]},${NAS_IMEI[4]},${NAS_IMEI[5]},${NAS_IMEI[6]},${NAS_IMEI[7]},${NAS_IMEI[8]},${NAS_IMEI[9]},${NAS_IMEI[10]},${NAS_IMEI[11]},${NAS_IMEI[12]},${NAS_IMEI[13]}" - - -NUM_MOBILES=$1 -IP=1 - -######################## -# # -# CONFIGURE OAI IF # -# # -######################## -for ((i=0 ; i < `expr $NUM_MOBILES + $NUM_ENB`; i++ )) -do - bash_exec "ip link set oai$i broadcast ff:ff:ff:ff:ff:ff" - bash_exec "ip link set oai$i up" - sleep 1 - - bash_exec "ifconfig oai$i 10.0.$IP.$IP netmask 255.255.255.0 broadcast 10.0.$IP.255" - - sleep 1 - bash_exec "ip addr add dev oai$i 2001:$IP::$IP/64" - - # avoid arp in virtualization - for ((j=0 ; j <= $NUM_MOBILES ; j++ )) - do - if [[ $i -ne $j ]] - then - bash_exec "ip neighbour add to 10.0.$IP.$IP lladdr 00:${NAS_IMEI[0]}${NAS_IMEI[1]}:${NAS_IMEI[2]}${NAS_IMEI[3]}:${NAS_IMEI[4]}${NAS_IMEI[5]}:${NAS_IMEI[6]}${NAS_IMEI[7]}:${NAS_IMEI[8]}$i nud permanent dev oai$j" - fi - done - let IP=IP+1 -done - -for ((src=0 ; src < `expr $NUM_ENB + $NUM_MOBILES` ; src++)) -do - let IP_SRC=$src+1 - for ((dst=0 ; dst < `expr $NUM_ENB + $NUM_MOBILES` ; dst++)) - do - if [[ $src -ne $dst ]] - then - let IP_DST=$dst+1 - let marksrc=${MARKING[$src]} - marksrc16=`printf '%02x' $marksrc` - let markdst=${MARKING[$dst]} - markdst16=`printf '%02x' $markdst` - bash_exec "iptables -t mangle -A OUTPUT --dst 10.0.$IP_SRC.$IP_DST -j MARK --set-mark 0x$marksrc16$markdst16" - bash_exec "iptables -t nat -A POSTROUTING -m mark --mark 0x$marksrc16$markdst16 -j SNAT --to 10.0.$IP_DST.$IP_SRC" - - # we can use same mark since not same path (PREROUTING) - bash_exec "iptables -t mangle -A PREROUTING --dst 10.0.$IP_SRC.$IP_DST -j MARK --set-mark 0x$marksrc16$markdst16" - bash_exec "iptables -t nat -A PREROUTING -m mark --mark 0x$marksrc16$markdst16 -j DNAT --to 10.0.$IP_DST.$IP_DST" - fi - done -done - -echo "########################################################################################" -echo "# IPTABLES MANGLE #" -echo "########################################################################################" -iptables -t mangle -nvL -echo "########################################################################################" -echo "# IPTABLES NAT #" -echo "########################################################################################" -iptables -t nat -nvL - -######################## -# # -# CONFIGURE RABS # -# # -######################## -# Loop Cx 0 -> NUM_MOBILES - 1 for configuring default RABS on eNB -CLASSIFIER_ID=4 -for ((instance=0 ; instance < $NUM_ENB ; instance++ )) -do - let IP_SRC=instance+1 - for ((cx=0 ; cx < $NUM_MOBILES ; cx++ )) - do - let IP_DEST=cx+2 - if [[ $IP_SRC -ne $IP_DEST ]] - then - # ON eNB - let RB_ID=(cx*8)+3 - bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c$cx -i$instance -f$CLASSIFIER_ID -z0 -s 10.0.$IP_DEST.$IP_SRC/32 -t 10.0.$IP_SRC.$IP_DEST/32 -r $RB_ID" - let CLASSIFIER_ID=CLASSIFIER_ID+2 - - # ON UE - let IP_SOURCE=instance+1 - let instance_ue=cx+$NUM_ENB - RB_ID=3 - bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c$instance -i$instance_ue -f$CLASSIFIER_ID -z0 -s 10.0.$IP_SRC.$IP_DEST/32 -t 10.0.$IP_DEST.$IP_SRC/32 -r $RB_ID" - let CLASSIFIER_ID=CLASSIFIER_ID+2 - - # ON eNB - bash_exec "ip neighbour add to 10.0.$IP_SRC.$IP_DEST lladdr 00:${NAS_IMEI[0]}${NAS_IMEI[1]}:${NAS_IMEI[2]}${NAS_IMEI[3]}:${NAS_IMEI[4]}${NAS_IMEI[5]}:${NAS_IMEI[6]}${NAS_IMEI[7]}:${NAS_IMEI[8]}$instance_ue nud permanent dev oai$instance" - - # ON UE - bash_exec "ip neighbour add to 10.0.$IP_DEST.$IP_SRC lladdr 00:${NAS_IMEI[0]}${NAS_IMEI[1]}:${NAS_IMEI[2]}${NAS_IMEI[3]}:${NAS_IMEI[4]}${NAS_IMEI[5]}:${NAS_IMEI[6]}${NAS_IMEI[7]}:${NAS_IMEI[8]}$instance nud permanent dev oai$instance_ue" - fi - done -done - - -IP=1 -for ((i=0 ; i < `expr $NUM_MOBILES + $NUM_ENB`; i++ )) -do - # avoid arp in virtualization - for ((j=0 ; j <= $NUM_MOBILES ; j++ )) - do - if [[ $i -ne $j ]] - then - bash_exec "ip neighbour add to 10.0.$IP.$IP lladdr 00:${NAS_IMEI[0]}${NAS_IMEI[1]}:${NAS_IMEI[2]}${NAS_IMEI[3]}:${NAS_IMEI[4]}${NAS_IMEI[5]}:${NAS_IMEI[6]}${NAS_IMEI[7]}:${NAS_IMEI[8]}$i nud permanent dev oai$j" - fi - done - let IP=IP+1 -done - -# echo "start the emulation with 1eNB and" $1 "UE" -if [ "$GENERATE_SEQ_DIAGRAM"x = yesx ]; then - if [ -e /tmp/msc_log.txt ]; then - bash_exec "rm -f /tmp/msc_log.txt" - fi - - if [ "$LOG_FILE_LTE"x = yesx ]; then - if [ -e /tmp/lte_log.txt ]; then - bash_exec "rm -f /tmp/lte_log.txt" - fi - $OPENAIR_TARGETS/SIMU/USER/oaisim -a -u $1 > /tmp/lte_log.txt - chmod 777 /tmp/lte_log.txt - cat /tmp/lte_log.txt | grep MSC_ > /tmp/msc_log.txt - else - $OPENAIR_TARGETS/SIMU/USER/oaisim -a -u $1 | grep MSC_ > /tmp/msc_log.txt - fi - chmod 777 /tmp/msc_log.txt - echo "End of emulation, now generating sequence diagrams..." - $OPENAIR_TARGETS/SCRIPTS/msc_gen.py /tmp/msc_log.txt -else - if [ "$LOG_FILE_LTE"x = yesx ]; then - if [ -e /tmp/lte_log.txt ]; then - bash_exec "rm -f /tmp/lte_log.txt" - fi - $OPENAIR_TARGETS/SIMU/USER/oaisim -a -u $1 > /tmp/lte_log.txt - chmod 777 /tmp/lte_log.txt - else - $OPENAIR_TARGETS/SIMU/USER/oaisim -a -u $1 -F -P wireshark > /tmp/lte_log.txt - fi - echo "End of emulation" -fi - - diff --git a/targets/SIMU/PROC/Process.c b/targets/SIMU/PROC/Process.c deleted file mode 100644 index 9b529fd593..0000000000 --- a/targets/SIMU/PROC/Process.c +++ /dev/null @@ -1,531 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "SIMULATION/TOOLS/defs.h" -#include "SIMULATION/RF/defs.h" -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/extern.h" -#include "MAC_INTERFACE/extern.h" - -#ifdef OPENAIR2 -#include "LAYER2/MAC/defs.h" -#include "LAYER2/MAC/extern.h" -#include "PHY_INTERFACE/extern.h" -#endif - -#include "../USER/oaisim.h" -#include "channel_sim_proc.h" -#include "interface.h" -#include "Tsync.h" -#include "Process.h" - -#define FILENAMEMAX 255 - -//#define DEBUG_SIM -void Process_Func(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im, - node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms) -{ - - if(node_idlte_ue_common_vars.txdata,&PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata,frame_parms); - - // Interface_init(port,node_id); - char p_input[FILENAMEMAX]; - int fd_pipe; - int fd_channel; - mkfifo("/tmp/channel", 0666); - fd_channel=open("/tmp/channel",O_RDWR,0); - sprintf(p_input,"/tmp/pipe_%d",node_id); - mkfifo(p_input, 0666); - fd_pipe=open(p_input,O_RDWR,0); - // IntInitAll(); - mac_xface->frame=0; - - while(1) { - // wait_4slot(&slot,&mac_xface->frame); - read(fd_pipe,&slot,sizeof(slot)); - - last_slot = (slot - 1)%20; - - if (last_slot <0) - last_slot+=20; - - next_slot = (slot + 1)%20; - - direction = subframe_select(frame_parms,next_slot>>1); -#ifdef DEBUG_SIM - printf("\n\n[SIM] EMU PHY procedures UE %d for frame %d, slot %d (subframe %d)\n", - UE_id,mac_xface->frame, slot, (next_slot >> 1)); -#endif - - if (PHY_vars_UE_g[UE_id]->UE_mode[0] != NOT_SYNCHED) { - if ((mac_xface->frame)>0) { - phy_procedures_UE_lte ((last_slot),(next_slot), PHY_vars_UE_g[UE_id], 0, abstraction_flag); - } - } else { - if (((mac_xface->frame)>0) && ((last_slot) == (SLOTS_PER_FRAME-1))) { - initial_sync(PHY_vars_UE_g[UE_id]); - } - } - - - if( direction == SF_UL || (direction == SF_S && next_slot%2!=0)) { - do_OFDM_mod(PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdataF,PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata,next_slot,&PHY_vars_UE_g[UE_id]->lte_frame_parms); - } - - write(fd_channel,&node_id,sizeof(node_id)); - - // send_exec_complete(CHANNEL_PORT); - if(slot==19) - (mac_xface->frame)++; - - } - -} - -void eNB_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im, - node_desc_t *enb_data[NUMBER_OF_eNB_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms) -{ - int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0; - lte_subframe_t direction; - printf("eNB [ %d ] Starts \n",node_id); - - // init_mmap(node_id,frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0); - init_channel_vars (frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0); - mmap_enb(node_id,PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata,PHY_vars_eNB_g[0]->lte_eNB_common_vars.rxdata,frame_parms); - - // Interface_init(port,node_id); - // IntInitAll(); - char p_input[FILENAMEMAX]; - int fd_pipe; - int fd_channel; - - mkfifo("/tmp/channel", 0666); - fd_channel=open("/tmp/channel",O_RDWR,0); - sprintf(p_input,"/tmp/pipe_%d",node_id); - mkfifo(p_input, 0666); - fd_pipe=open(p_input, O_RDWR,0); - mac_xface->frame=0; - - while(1) { - // wait_4slot(&slot,&mac_xface->frame); - read(fd_pipe,&slot,sizeof(slot)); - - last_slot = (slot - 1)%20; - - if (last_slot <0) - last_slot+=20; - - next_slot = (slot + 1)%20; - direction = subframe_select(frame_parms,next_slot>>1); -#ifdef DEBUG_SIM - printf - ("\n\n [SIM]EMU PHY procedures eNB %d for frame %d, slot %d (subframe %d) (rxdataF_ext %p) Nid_cell %d\n", - eNB_id, mac_xface->frame, slot, next_slot >> 1, - PHY_vars_eNB_g[0]->lte_eNB_ulsch_vars[0]->rxdataF_ext, PHY_vars_eNB_g[eNB_id]->lte_frame_parms.Nid_cell); -#endif - phy_procedures_eNB_lte (last_slot, next_slot, PHY_vars_eNB_g[eNB_id], abstraction_flag); - - if( direction == SF_DL || (direction == SF_S && next_slot%2==0)) { - do_OFDM_mod(PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdataF[0], - PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0], - next_slot, - &PHY_vars_eNB_g[eNB_id]->lte_frame_parms); - } - - write(fd_channel,&node_id,sizeof(node_id)); - - // send_exec_complete(CHANNEL_PORT); - if(slot==19) - (mac_xface->frame)++; - } - -} - -void Channel_Inst(int node_id,int port,double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0, - double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], - channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms) -{ - - // Interface_init(port,node_id); - // IntInitAll(); - mkfifo("/tmp/channel", 0666); - fd_channel=open("/tmp/channel", O_RDWR ,0); - - int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0; - lte_subframe_t direction; - char in_buffer[100]; - - int ci,ji=0; - - for(ci=0; cithread_id=NUM_THREAD_DOWNLINK; - u2e_t[UE_id][eNB_id]->eNB_id=eNB_id; - u2e_t[UE_id][eNB_id]->UE_id=UE_id; - u2e_t[UE_id][eNB_id]->r_re0=r_re0_d[UE_id][eNB_id]; - u2e_t[UE_id][eNB_id]->r_im0=r_im0_d[UE_id][eNB_id]; - u2e_t[UE_id][eNB_id]->r_re=r_re[NB_eNB_INST+UE_id]; - u2e_t[UE_id][eNB_id]->r_im=r_im[NB_eNB_INST+UE_id]; - u2e_t[UE_id][eNB_id]->s_im=s_im[eNB_id]; - u2e_t[UE_id][eNB_id]->s_re=s_re[eNB_id]; - u2e_t[UE_id][eNB_id]->eNB2UE=eNB2UE[eNB_id][UE_id]; - u2e_t[UE_id][eNB_id]->UE2eNB=UE2eNB[UE_id][eNB_id]; - u2e_t[UE_id][eNB_id]->enb_data=enb_data[eNB_id]; - u2e_t[UE_id][eNB_id]->ue_data=ue_data[UE_id]; - u2e_t[UE_id][eNB_id]->next_slot=&next_slot; - u2e_t[UE_id][eNB_id]->abstraction_flag=&abstraction_flag; - u2e_t[UE_id][eNB_id]->frame_parms=frame_parms; - - for (int i=0;i<3;i++) - { - u2e_t[UE_id][eNB_id]->tx_data[i]=tx[eNB_id][i]; - u2e_t[UE_id][eNB_id]->rx_data[i]=rx[NB_eNB_INST+UE_id][i]; - } - - if(pthread_cond_init (&downlink_cond[eNB_id][UE_id], NULL)) exit(1); - - if(pthread_mutex_lock(&downlink_mutex[eNB_id][UE_id])) exit(1); - - pthread_create (&cthr_d[UE_id][eNB_id], NULL, do_DL_sig_channel_T,(void*)(u2e_t[UE_id][eNB_id])); - NUM_THREAD_DOWNLINK++; - } - } - - NUM_THREAD_UPLINK=0; - - for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) { - for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) { - e2u_t[eNB_id][UE_id]->thread_id=NUM_THREAD_UPLINK; - e2u_t[eNB_id][UE_id]->eNB_id=eNB_id; - e2u_t[eNB_id][UE_id]->UE_id=UE_id; - e2u_t[eNB_id][UE_id]->r_re=r_re[eNB_id]; - e2u_t[eNB_id][UE_id]->r_im=r_im[eNB_id]; - e2u_t[eNB_id][UE_id]->r_re0=r_re0_u[eNB_id][UE_id]; - e2u_t[eNB_id][UE_id]->r_im0=r_im0_u[eNB_id][UE_id]; - e2u_t[eNB_id][UE_id]->s_im=s_im[NB_eNB_INST+UE_id]; - e2u_t[eNB_id][UE_id]->s_re=s_re[NB_eNB_INST+UE_id]; - e2u_t[eNB_id][UE_id]->eNB2UE=eNB2UE[eNB_id][UE_id]; - e2u_t[eNB_id][UE_id]->UE2eNB=UE2eNB[UE_id][eNB_id]; - e2u_t[eNB_id][UE_id]->enb_data=enb_data[eNB_id]; - e2u_t[eNB_id][UE_id]->ue_data=ue_data[UE_id]; - e2u_t[eNB_id][UE_id]->next_slot=&next_slot; - e2u_t[eNB_id][UE_id]->abstraction_flag=&abstraction_flag; - e2u_t[eNB_id][UE_id]->frame_parms=frame_parms; - for (int i=0;i<3;i++) - { - e2u_t[eNB_id][UE_id]->tx_data[i]=tx[NB_eNB_INST+UE_id][i]; - e2u_t[eNB_id][UE_id]->rx_data[i]=rx[eNB_id][i]; - } - - if(pthread_cond_init (&uplink_cond[UE_id][eNB_id], NULL)) exit(1); - - if(pthread_mutex_lock(&uplink_mutex[UE_id][eNB_id])) exit(1); - - pthread_create (&cthr_u[eNB_id][UE_id], NULL, do_UL_sig_channel_T,(void*)e2u_t[eNB_id][UE_id]); - NUM_THREAD_UPLINK++; - } - } -} - -void Channel_DL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0, - double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], - channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - int slot) -{ - - int count=0; - int next_slot,last_slot,UE_id=0,eNB_id=0; - lte_subframe_t direction; - s32 **txdata,**rxdata; - double tx_pwr, rx_pwr; - s32 rx_pwr2; - u32 i; - u32 slot_offset; - - for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) { - write(fd_NB[eNB_id],&slot,sizeof(slot)); - count++; - //send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id); - } - - - while(count--) { - int dummy=1; - read(fd_channel,&dummy,sizeof(dummy)); - //wait_4Msg(); - } - - - - - for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) { - frame_parms = &PHY_vars_eNB_g[eNB_id]->lte_frame_parms; - slot_offset = (nslot)*(frame_parms->samples_per_tti>>1); - txdata =tx[eNB_id][0]; - tx_pwr = dac_fixed_gain(s_re[eNB_id], - s_im[eNB_id], - txdata, - slot_offset, - frame_parms->nb_antennas_tx, - frame_parms->samples_per_tti>>1, - 14, - 40); - printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),nslot,nslot>>1); - } - - _COT=0; - - for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) { - for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) { - if(pthread_cond_signal(&downlink_cond[eNB_id][UE_id])) exit(1); - - if(pthread_mutex_unlock(&downlink_mutex[eNB_id][UE_id])) exit(1); - } - } - - if(pthread_cond_wait(&downlink_cond_channel, &downlink_mutex_channel)) exit(1); - - for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) { - Clean_Param(r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],frame_parms); - - for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) { - Channel_Out(SF_DL,eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],r_re0_d[UE_id][eNB_id],r_im0_d[UE_id][eNB_id],frame_parms); - // adc_channel(eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id]); - - } - } - - count=0; - - for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) - if (mac_xface->frame >= (UE_id * 10)) { - write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot)); - //send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id); - count++; - } - - while(count--) { - int dummy=1; - read(fd_channel,&dummy,sizeof(dummy)); - //wait_4Msg(); - } - -} - - -void Channel_UL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0, - double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], - channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - int slot) -{ - int count=0; - int next_slot,last_slot,UE_id=0,eNB_id=0; - lte_subframe_t direction; - s32 **txdata,**rxdata; - double tx_pwr, rx_pwr; - s32 rx_pwr2; - u32 i; - u32 slot_offset; - - for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) - if (mac_xface->frame >= (UE_id * 10)) { - write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot)); - //send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id); - count++; - } - - while(count--) { - int dummy=1; - read(fd_channel,&dummy,sizeof(dummy)); - //wait_4Msg(); - } - - - - for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) { - frame_parms = &PHY_vars_UE_g[UE_id]->lte_frame_parms; - slot_offset = (nslot)*(frame_parms->samples_per_tti>>1); - txdata =tx[NB_eNB_INST+UE_id][0]; //PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata; - tx_pwr = dac_fixed_gain(s_re[NB_eNB_INST+UE_id], - s_im[NB_eNB_INST+UE_id], - txdata, - slot_offset, - frame_parms->nb_antennas_tx, - frame_parms->samples_per_tti>>1, - 14, - 18); - printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(tx_pwr),nslot,nslot>>1); - rx_pwr = signal_energy_fp(s_re[NB_eNB_INST+UE_id],s_im[NB_eNB_INST+UE_id],frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),nslot,nslot>>1); - } - - _COT_U=0; - - for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) { - for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) { - if ( pthread_cond_signal(&uplink_cond[UE_id][eNB_id])) exit(1); - - if ( pthread_mutex_unlock(&uplink_mutex[UE_id][eNB_id])) exit(1); - } - } - - if ( pthread_cond_wait(&uplink_cond_channel, &uplink_mutex_channel)) exit(1); - - for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) { - Clean_Param(r_re[eNB_id],r_im[eNB_id],frame_parms); - - for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) { - Channel_Out(SF_UL,eNB_id,UE_id,r_re[eNB_id],r_im[eNB_id],r_re0_u[eNB_id][UE_id],r_im0_u[eNB_id][UE_id],frame_parms); - printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),next_slot,next_slot>>1); - } - } - - - count=0; - - for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) { - write(fd_NB[eNB_id],&slot,sizeof(slot)); - // send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id); - count++; - } - - while(count--) { - int dummy=1; - read(fd_channel,&dummy,sizeof(dummy)); - // wait_4Msg(); - } - -} - -void Channel_Func(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0, - double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], - channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - int slot) -{ - int last_slot; - lte_subframe_t direction; - - last_slot = (slot - 1)%20; - - if (last_slot <0) - last_slot+=20; - - nslot = (slot + 1)%20; - - direction = subframe_select(frame_parms,nslot>>1); - - if( direction == SF_DL || (direction == SF_S && nslot%2==0)) { - Channel_DL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot); - } else { - Channel_UL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot); - } -} diff --git a/targets/SIMU/PROC/Process.h b/targets/SIMU/PROC/Process.h deleted file mode 100644 index 71383f945f..0000000000 --- a/targets/SIMU/PROC/Process.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#ifndef __PROCESS_H__ -# define __PROCESS_H__ - -#include "interface.h" - -int32_t **tx[MAX_eNB+MAX_UE][3],**rx[MAX_eNB+MAX_UE][3]; -int nslot; - -void Process_Func(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im, - node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms); - -void UE_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im, - node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms); - -void eNB_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im, - node_desc_t *enb_data[NUMBER_OF_eNB_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms); - -void Channel_Inst(int node_id,int port,double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0, - double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], - channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms); - -void Channel_DL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0, - double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], - channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - int slot); - -void Channel_UL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0, - double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], - channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - int slot); - -void Channel_Func(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0, - double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], - channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - int slot); - - -#endif diff --git a/targets/SIMU/PROC/SCRIPT/Run.py b/targets/SIMU/PROC/SCRIPT/Run.py deleted file mode 100755 index 9520508ff7..0000000000 --- a/targets/SIMU/PROC/SCRIPT/Run.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python -import subprocess -import optparse -import re - -OPT=" " -TERMINAL="gnome-terminal -x " -TIME="time" - -def runBash(cmd): - p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) - out = p.stdout.read().strip() - return out - -def main(): - global OPT,TIME,TERMINAL - subprocess.call('ps | nawk \'/oaisim/ {system("kill " $1)}\'', shell=True) - p = optparse.OptionParser() - p.add_option('--eNB', '-b', default="1") - p.add_option('--UE', '-u', default="1") - p.add_option('--frame','-n', default="100") - p.add_option('--terminal','-t', default="1") - p.add_option('--time','--time', default="0") - options, arguments = p.parse_args() - print '---- Configuration ---- ' - print 'Number of eNB : %s' % options.eNB - print 'Number of UE : %s' % options.UE - if(options.terminal=='1'): - OPT+=TERMINAL - if(options.time=='1'): - OPT+=TIME - - #CHANNEL= 'valgrind --tool=callgrind --collect-bus=yes --branch-sim=yes $OPENAIR_TARGETS/SIMU/USER/oaisim -X0 -b%s -u%s -n%s' % (options.eNB,options.UE,options.frame) - CHANNEL= '$OPENAIR_TARGETS/SIMU/USER/oaisim -X0 -b%s -u%s -n%s' % (options.eNB,options.UE,options.frame) - #subprocess.call(CHANNEL, shell=True) - print CHANNEL - - nb_enb=int(options.eNB) - nb_ue=int(options.UE) - frame=int(options.frame) - - for x in xrange(0,nb_enb): - ENB='%s $OPENAIR_TARGETS/SIMU/USER/oaisim -X1 -i%s &' % (OPT,x) - print ENB - subprocess.call(ENB,shell=True) - subprocess.call('sleep 1', shell=True) - - for x in xrange(0,nb_ue): - UE='%s $OPENAIR_TARGETS/SIMU/USER/oaisim -X2 -i%s &' % (OPT,x) - print UE - subprocess.call(UE,shell=True) - subprocess.call('sleep 1', shell=True) - - # subprocess.call('sleep 2', shell=True) - subprocess.call(CHANNEL, shell=True) - # subprocess.call('ps | nawk \'/oaisim/ {system("kill " $1)}\'', shell=True) - -if __name__ == '__main__': - main() - - diff --git a/targets/SIMU/PROC/Tsync.h b/targets/SIMU/PROC/Tsync.h deleted file mode 100644 index a6ffe11def..0000000000 --- a/targets/SIMU/PROC/Tsync.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* - * Tsync.h - * - */ -#include -#ifndef TSYNC_H_ -#define TSYNC_H_ - -#define COMPILER_BARRIER() __asm__ __volatile__ ("" ::: "memory") -int mycount; -pthread_mutex_t exclusive; -pthread_mutex_t downlink_mutex[MAX_eNB][MAX_UE]; -pthread_mutex_t downlink_mutex_channel; -pthread_cond_t downlink_cond[MAX_eNB][MAX_UE]; -pthread_cond_t downlink_cond_channel; - -pthread_mutex_t uplink_mutex[MAX_UE][MAX_eNB]; -pthread_mutex_t uplink_mutex_channel; -pthread_cond_t uplink_cond[MAX_UE][MAX_eNB]; -pthread_cond_t uplink_cond_channel; - -int COT; -int COT_U; - -volatile int _COT; -volatile int _COT_U; - - -int NUM_THREAD_DOWNLINK; -int NUM_THREAD_UPLINK; - -ch_thread *e2u_t[MAX_UE][MAX_eNB]; -ch_thread *u2e_t[MAX_UE][MAX_eNB]; - -pthread_t cthr_u[MAX_eNB][MAX_UE]; -pthread_t cthr_d[MAX_eNB][MAX_UE]; - -int fd_NB[MAX_eNB+MAX_UE]; -int fd_channel; - - -#endif /* TSYNC_H_ */ diff --git a/targets/SIMU/PROC/channel_sim_proc.c b/targets/SIMU/PROC/channel_sim_proc.c deleted file mode 100644 index dd0adec0d2..0000000000 --- a/targets/SIMU/PROC/channel_sim_proc.c +++ /dev/null @@ -1,677 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "SIMULATION/TOOLS/defs.h" -#include "SIMULATION/RF/defs.h" -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/extern.h" -#include "MAC_INTERFACE/extern.h" - -#ifdef OPENAIR2 -#include "LAYER2/MAC/defs.h" -#include "LAYER2/MAC/extern.h" -#include "UTIL/LOG/log_if.h" -#include "RRC/LITE/extern.h" -#include "PHY_INTERFACE/extern.h" -#endif - -#include "../USER/oaisim.h" - -#include "channel_sim_proc.h" -#include "interface.h" -#include "Tsync.h" -#include "Process.h" -#define RF -//#define DEBUG_SIM - - -void init_rre(LTE_DL_FRAME_PARMS *frame_parms,double ***r_re0,double ***r_im0) -{ - - int i; - - (*r_re0) = malloc(2*sizeof(double*)); - (*r_im0) = malloc(2*sizeof(double*)); - - for (i=0; i<2; i++) { - (*r_re0)[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero((*r_re0)[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - (*r_im0)[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero((*r_im0)[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - } - - -} - -void mmap_enb(int id,int **tx_data[3],int **rx_data[3],LTE_DL_FRAME_PARMS *frame_parms) -{ - - - int i; - int fd[20]; - int result; - unsigned int FILESIZE; - - FILESIZE=FRAME_LENGTH_COMPLEX_SAMPLES*(sizeof(s32)); - - char buffer[100]; - int j=0,k=0; - - char sect=1; - - for(k=0; keNB_id); - UE_i=(cthread->UE_id); - r_re0=cthread->r_re0; - r_re=cthread->r_re; - r_im=cthread->r_im; - r_im0=cthread->r_im0; - s_im=cthread->s_im; - s_re=cthread->s_re; - eNB2UE[eNB_i][UE_i]=cthread->eNB2UE; - enb_data[0]=(cthread->enb_data); - enb_data_2[eNB_i]=cthread->enb_data; - - ue_data[UE_i]=cthread->ue_data; - frame_parms=cthread->frame_parms; - next_slot=(cthread->next_slot); - abstraction_flag=*(cthread->abstraction_flag); - thread_id=(cthread->thread_id); - - for (int i=0;i<3;i++) - { - tx_data[i]=cthread->tx_data[i]; - rx_data[i]=cthread->rx_data[i]; - } - - s32 att_eNB_id=-1; - s32 **txdata,**rxdata; - - double tx_pwr, rx_pwr; - s32 rx_pwr2; - u32 i,aa; - u32 slot_offset; - - while(1) { - - if(pthread_cond_wait(&downlink_cond[eNB_i][UE_i], &downlink_mutex[eNB_i][UE_i])) exit(1); - - slot_offset = (nslot)*(frame_parms->samples_per_tti>>1); - // pthread_mutex_lock(&exclusive); - - multipath_channel(eNB2UE[eNB_i][UE_i],s_re,s_im,r_re0,r_im0, - frame_parms->samples_per_tti>>1,0); - - - rx_pwr = signal_energy_fp2(eNB2UE[eNB_i][UE_i]->ch[0],eNB2UE[eNB_i][UE_i]->channel_length)*eNB2UE[eNB_i][UE_i]->channel_length; - - printf("[SIM][DL] Channel eNB %d => UE %d : tx_power %f dBm, path_loss %f dB\n", - eNB_i,UE_i, - enb_data_2[eNB_i]->tx_power_dBm, - eNB2UE[eNB_i][UE_i]->path_loss_dB); - printf("[SIM][DL] Channel eNB %d => UE %d : Channel gain %f dB (%f)\n",eNB_i,UE_i,10*log10(rx_pwr),rx_pwr); - - rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - - printf("[SIM][DL] UE %d : rx_pwr %f dB for slot %d (subframe %d)\n",UE_i,10*log10(rx_pwr),nslot,nslot>>1); - - if (eNB2UE[eNB_i][UE_i]->first_run == 1) - eNB2UE[eNB_i][UE_i]->first_run = 0; - - rf_rx(r_re0, - r_im0, - NULL, - NULL, - 0, - frame_parms->nb_antennas_rx, - frame_parms->samples_per_tti>>1, - 1e3/eNB2UE[eNB_i][UE_i]->BW, // sampling time (ns) - 0.0, // freq offset (Hz) (-20kHz..20kHz) - 0.0, // drift (Hz) NOT YET IMPLEMENTED - ue_data[UE_i]->rx_noise_level, // noise_figure NOT YET IMPLEMENTED - 110.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) - 200, // IP3_dBm (dBm) - &eNB2UE[eNB_i][UE_i]->ip, // initial phase - 30.0e3, // pn_cutoff (kHz) - -500.0, // pn_amp (dBc) default: 50 - 0.0, // IQ imbalance (dB), - 0.0); // IQ phase imbalance (rad) - - rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - - printf("[SIM][DL] UE %d : ADC in (eNB %d) %f dB for slot %d (subframe %d)\n",UE_i,eNB_i,10*log10(rx_pwr),nslot,nslot>>1); - //count = __sync_add_and_fetch(&_COT, 1); - //COMPILER_BARRIER(); - - if (pthread_mutex_lock(&downlink_mutex_channel)) exit(1); - - _COT++; - - if(_COT==NUM_THREAD_DOWNLINK) { - // if(count==NUM_THREAD_DOWNLINK){ - if(pthread_cond_signal(&downlink_cond_channel)) exit(1); - } - - if(pthread_mutex_unlock(&downlink_mutex_channel)) exit(1); - - // pthread_mutex_unlock(&exclusive); - } - - -} - -void do_UL_sig_channel_T(void *param) -{ - - ch_thread* cthread = (ch_thread*)param; - int count=0; - u8 eNB_i,UE_i; - double **r_re0,**r_re,**r_im,**r_im0,**s_re,**s_im; - channel_desc_t *UE2eNB[8][3]; - node_desc_t *enb_data2[3]; - node_desc_t *ue_data[8]; - u16 next_slot,abstraction_flag; - LTE_DL_FRAME_PARMS *frame_parms; - int thread_id; - - eNB_i=(cthread->eNB_id); - UE_i=(cthread->UE_id); - r_re0=cthread->r_re0; - r_re=cthread->r_re; - r_im=cthread->r_im; - r_im0=cthread->r_im0; - s_im=cthread->s_im; - s_re=cthread->s_re; - UE2eNB[UE_i][eNB_i]=cthread->UE2eNB; - enb_data2[eNB_i]=cthread->enb_data; - ue_data[UE_i]=cthread->ue_data; - next_slot=*(cthread->next_slot); - abstraction_flag=*(cthread->abstraction_flag); - frame_parms=cthread->frame_parms; - thread_id=(cthread->thread_id); - - s32 **txdata,**rxdata; - - u8 UE_id=0,eNB_id=0,aa; - double tx_pwr, rx_pwr; - s32 rx_pwr2; - u32 i; - u32 slot_offset; - double nf = 0; //currently unused - - - while(1) { - - slot_offset = (nslot)*(frame_parms->samples_per_tti>>1); - - if(pthread_cond_wait(&uplink_cond[UE_i][eNB_i], &uplink_mutex[UE_i][eNB_i])) exit(1);//[UE_i][eNB_i]); - - // pthread_mutex_lock(&exclusive); - - multipath_channel(UE2eNB[UE_i][eNB_i],s_re,s_im,r_re0,r_im0, - frame_parms->samples_per_tti>>1,0); - - printf("[SIM][UL] Channel UE %d => eNB %d : %f dB\n",UE_i,eNB_i,10*log10(rx_pwr)); - - rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - - printf("[SIM][UL] eNB %d : eNB out %f dB for slot %d (subframe %d), sptti %d\n",eNB_i,10*log10(rx_pwr),nslot,nslot>>1,frame_parms->samples_per_tti); - - if (UE2eNB[UE_i][eNB_i]->first_run == 1) - UE2eNB[UE_i][eNB_i]->first_run = 0; - - - // RF model - rf_rx(r_re0, - r_im0, - NULL, - NULL, - 0, - frame_parms->nb_antennas_rx, - frame_parms->samples_per_tti>>1, - (UE_id==0) ? (1.0/7.68e6 * 1e9) : 1e9, // sampling time (ns) + set noise bandwidth to 0 for UE>0 (i.e. no noise except for first UE) - 0.0, // freq offset (Hz) (-20kHz..20kHz) - 0.0, // drift (Hz) NOT YET IMPLEMENTED - nf, // noise_figure NOT YET IMPLEMENTED - 150.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) - 200, // IP3_dBm (dBm) - &UE2eNB[UE_i][eNB_i]->ip, // initial phase - 30.0e3, // pn_cutoff (kHz) - -500.0, // pn_amp (dBc) default: 50 - 0.0, // IQ imbalance (dB), - 0.0); // IQ phase imbalance (rad) - - - rx_pwr = signal_energy_fp(r_re,r_im,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - - printf("[SIM][UL] rx_pwr (ADC in) %f dB for slot %d (subframe %d)\n",10*log10(rx_pwr),nslot,nslot>>1); - - // count = __sync_add_and_fetch(&_COT_U, 1); - // COMPILER_BARRIER(); - - if (pthread_mutex_lock(&uplink_mutex_channel)) exit(1); - - _COT_U++; - - if(_COT_U==NUM_THREAD_UPLINK) { - //if(count==NUM_THREAD_UPLINK){ - if (pthread_cond_signal(&uplink_cond_channel)) exit(1); - } - - if(pthread_mutex_unlock(&uplink_mutex_channel)) exit(1); - - // pthread_mutex_unlock(&exclusive); - - } - -} - -void Clean_Param(double **r_re,double **r_im,LTE_DL_FRAME_PARMS *frame_parms) -{ - u32 i,aa; - - for (i=0; i<(frame_parms->samples_per_tti>>1); i++) { - for (aa=0; aanb_antennas_rx; aa++) { - r_re[aa][i]=0.0; - r_im[aa][i]=0.0; - } - } -} - -void Channel_Out(lte_subframe_t direction,int eNB_id,int UE_id,double **r_re,double **r_im,double **r_re0,double **r_im0,LTE_DL_FRAME_PARMS *frame_parms) -{ - u32 i,aa; - double alpha=0.0; - u32 slot_offset; - frame_parms = &PHY_vars_UE_g[0]->lte_frame_parms; - slot_offset = (nslot)*(frame_parms->samples_per_tti>>1); - s32 rx_pwr2; - s32 **rxdata; - - if(eNB_id==(UE_id % NB_eNB_INST)) - alpha=1; - - for (i=0; i<(frame_parms->samples_per_tti>>1); i++) { - for (aa=0; aanb_antennas_rx; aa++) { - r_re[aa][i]+=(r_re0[aa][i]*alpha); - r_im[aa][i]+=(r_im0[aa][i]*alpha); - - } - } - - rxdata=rx[eNB_id][0]; - - if (direction == SF_DL ) { - frame_parms = &PHY_vars_eNB_g[0]->lte_frame_parms; - slot_offset = (nslot)*(frame_parms->samples_per_tti>>1); - adc(r_re, - r_im, - 0, - slot_offset, - rx[NB_eNB_INST+UE_id][0], - frame_parms->nb_antennas_rx, - frame_parms->samples_per_tti>>1, - 12); - } else { - frame_parms = &PHY_vars_UE_g[0]->lte_frame_parms; - slot_offset = (nslot)*(frame_parms->samples_per_tti>>1); - adc(r_re, - r_im, - 0, - slot_offset, - rx[eNB_id][0], - frame_parms->nb_antennas_rx, - frame_parms->samples_per_tti>>1, - 12); - } - - - rx_pwr2 = signal_energy(rxdata[0]+slot_offset,frame_parms->samples_per_tti>>1); - // printf("[SIM][DL/UL] UE/eNB %d : rx_pwr (ADC out) %f dB (%d) for slot %d (subframe %d), writing to %p\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,nslot,nslot>>1,rxdata); -} - -/* -void do_UL_sig_channel(u8 eNB_i,u8 UE_i,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],u16 next_slot,u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms) { - - s32 **txdata,**rxdata; - - u8 UE_id=0,eNB_id=0,aa; - double tx_pwr, rx_pwr; - s32 rx_pwr2; - u32 i; - u32 slot_offset; - double nf = 0; //currently unused - - slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); - - multipath_channel(UE2eNB[UE_i][eNB_i],s_re,s_im,r_re0,r_im0, - frame_parms->samples_per_tti>>1,0); - - - rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - - if (UE2eNB[UE_i][eNB_i]->first_run == 1) - UE2eNB[UE_i][eNB_i]->first_run = 0; - - - // RF model - rf_rx(r_re0, - r_im0, - NULL, - NULL, - 0, - frame_parms->nb_antennas_rx, - frame_parms->samples_per_tti>>1, - (UE_id==0) ? (1.0/7.68e6 * 1e9) : 1e9, // sampling time (ns) + set noise bandwidth to 0 for UE>0 (i.e. no noise except for first UE) - 0.0, // freq offset (Hz) (-20kHz..20kHz) - 0.0, // drift (Hz) NOT YET IMPLEMENTED - nf, // noise_figure NOT YET IMPLEMENTED - 150.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) - 200, // IP3_dBm (dBm) - &UE2eNB[UE_i][eNB_i]->ip, // initial phase - 30.0e3, // pn_cutoff (kHz) - -500.0, // pn_amp (dBc) default: 50 - 0.0, // IQ imbalance (dB), - 0.0); // IQ phase imbalance (rad) - - - rx_pwr = signal_energy_fp(r_re,r_im,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - printf("[SIM][UL] rx_pwr (ADC in) %f dB for slot %d (subframe %d)\n",10*log10(rx_pwr),next_slot,next_slot>>1); - -} -*/ - -/* -void do_DL_sig_channel(u8 eNB_i,u8 UE_i,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX], -node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX], u16 next_slot,u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms) { - s32 att_eNB_id=-1; - s32 **txdata,**rxdata; - - u8 eNB_id=0,UE_id=0; - double tx_pwr, rx_pwr; - s32 rx_pwr2; - u32 i,aa; - u32 slot_offset; - - - multipath_channel(eNB2UE[eNB_i][UE_i],s_re,s_im,r_re0,r_im0, - frame_parms->samples_per_tti>>1,0); - - rx_pwr = signal_energy_fp2(eNB2UE[eNB_i][UE_i]->ch[0],eNB2UE[eNB_i][UE_i]->channel_length)*eNB2UE[eNB_i][UE_i]->channel_length; - - - printf("[SIM][DL] Channel eNB %d => UE %d : tx_power %f dBm, path_loss %f dB\n", - eNB_i,UE_i, - enb_data[eNB_id]->tx_power_dBm, - eNB2UE[eNB_id][UE_id]->path_loss_dB); - printf("[SIM][DL] Channel eNB %d => UE %d : Channel gain %f dB (%f)\n",eNB_id,UE_id,10*log10(rx_pwr),rx_pwr); - - rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - printf("[SIM][DL] UE %d : rx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1); - - if (eNB2UE[eNB_id][UE_id]->first_run == 1) - eNB2UE[eNB_id][UE_id]->first_run = 0; - - rf_rx(r_re0, - r_im0, - NULL, - NULL, - 0, - frame_parms->nb_antennas_rx, - frame_parms->samples_per_tti>>1, - 1e3/eNB2UE[eNB_i][UE_i]->BW, // sampling time (ns) - 0.0, // freq offset (Hz) (-20kHz..20kHz) - 0.0, // drift (Hz) NOT YET IMPLEMENTED - ue_data[UE_id]->rx_noise_level, // noise_figure NOT YET IMPLEMENTED - 110.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) - 200, // IP3_dBm (dBm) - &eNB2UE[eNB_i][UE_i]->ip, // initial phase - 30.0e3, // pn_cutoff (kHz) - -500.0, // pn_amp (dBc) default: 50 - 0.0, // IQ imbalance (dB), - 0.0); // IQ phase imbalance (rad) - - rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0); - printf("[SIM][DL] UE %d : ADC in (eNB %d) %f dB for slot %d (subframe %d)\n",UE_id,eNB_id,10*log10(rx_pwr),next_slot,next_slot>>1); - -} - -*/ - - -/* -void init_mmap_channel(int id,LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***s_im,double ***r_re,double ***r_im,double ***r_re0,double ***r_im0) { - - int i; - int fd[20]; - int result; - double *map; - unsigned int FILESIZE; - - FILESIZE=FRAME_LENGTH_COMPLEX_SAMPLES*(sizeof(double)); - - (*s_re) = malloc(2*sizeof(double*)); - (*s_im) = malloc(2*sizeof(double*)); - (*r_re) = malloc(2*sizeof(double*)); - (*r_im) = malloc(2*sizeof(double*)); - (*r_re0) = malloc(2*sizeof(double*)); - (*r_im0) = malloc(2*sizeof(double*)); - - char buffer[100]; - int j=0; - for (i=0;i<2;i++) { - - sprintf(buffer,"/tmp/s_re_%d_%d.bin",id,i); - fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); - result = lseek(fd[j], FILESIZE-1, SEEK_SET); - result = write(fd[j], "", 1); - (*s_re)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0); - - j++; - - sprintf(buffer,"/tmp/s_im_%d_%d.bin",id,i); - fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); - result = lseek(fd[j], FILESIZE-1, SEEK_SET); - result = write(fd[j], "", 1); - (*s_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0); - - j++; - - sprintf(buffer,"/tmp/r_re_%d_%d.bin",id,i); - fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); - result = lseek(fd[j], FILESIZE-1, SEEK_SET); - result = write(fd[j], "", 1); - (*r_re)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0); - - j++; - - - sprintf(buffer,"/tmp/r_im_%d_%d.bin",id,i); - fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); - result = lseek(fd[j], FILESIZE-1, SEEK_SET); - result = write(fd[j], "", 1); - (*r_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0); - - j++; - } - - for (i=0;i<2;i++) { - (*r_re0)[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero((*r_re0)[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - (*r_im0)[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero((*r_im0)[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - } - -} - -void init_mmap(int id,LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***s_im,double ***r_re,double ***r_im,double ***r_re0,double ***r_im0) { - - int i; - int fd[20]; - int result; - double *map; - unsigned int FILESIZE; - - FILESIZE=FRAME_LENGTH_COMPLEX_SAMPLES*(sizeof(double)); - - *s_re = malloc(2*sizeof(double*)); - *s_im = malloc(2*sizeof(double*)); - *r_re = malloc(2*sizeof(double*)); - *r_im = malloc(2*sizeof(double*)); - *r_re0 = malloc(2*sizeof(double*)); - *r_im0 = malloc(2*sizeof(double*)); - char buffer[100]; - int j=0; - for (i=0;i<2;i++) { - - sprintf(buffer,"/tmp/s_re_%d_%d.bin",id,i); - fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); - result = lseek(fd[j], FILESIZE-1, SEEK_SET); - result = write(fd[j], "", 1); - (*s_re)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0); - - j++; - - sprintf(buffer,"/tmp/s_im_%d_%d.bin",id,i); - fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); - result = lseek(fd[j], FILESIZE-1, SEEK_SET); - result = write(fd[j], "", 1); - (*s_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0); - - j++; - - sprintf(buffer,"/tmp/r_re_%d_%d.bin",id,i); - fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); - result = lseek(fd[j], FILESIZE-1, SEEK_SET); - result = write(fd[j], "", 1); - (*r_re)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0); - - j++; - - sprintf(buffer,"/tmp/r_im_%d_%d.bin",id,i); - fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); - result = lseek(fd[j], FILESIZE-1, SEEK_SET); - result = write(fd[j], "", 1); - (*r_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0); - - j++; - } - - for (i=0;i<2;i++) { - - (*r_re0)[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero((*r_re0)[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - (*r_im0)[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero((*r_im0)[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - } - - -} -*/ - diff --git a/targets/SIMU/PROC/channel_sim_proc.h b/targets/SIMU/PROC/channel_sim_proc.h deleted file mode 100644 index 1d5b53a189..0000000000 --- a/targets/SIMU/PROC/channel_sim_proc.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* - * channel_sim_proc.h - * - */ - -#ifndef CHANNEL_SIM_PROC_H_ -#define CHANNEL_SIM_PROC_H_ - -void mmap_enb(int id,int **tx_data[3],int **rx_data[3],LTE_DL_FRAME_PARMS *frame_parms); - -void mmap_ue(int id,int ***tx_data,int ***rx_data,LTE_DL_FRAME_PARMS *frame_parms); - -void Clean_Param(double **r_re,double **r_im,LTE_DL_FRAME_PARMS *frame_parms); - -void do_DL_sig_channel_T(void *param); - -void do_UL_sig_channel_T(void *param); - -void init_rre(LTE_DL_FRAME_PARMS *frame_parms,double ***r_re0,double ***r_im0); - -void Channel_Out(lte_subframe_t direction,int eNB_id,int UE_id,double **r_re,double **r_im,double **r_re0,double **r_im0,LTE_DL_FRAME_PARMS *frame_parms); - -#endif /* CHANNEL_SIM_PROC_H_ */ - diff --git a/targets/SIMU/PROC/interface.h b/targets/SIMU/PROC/interface.h deleted file mode 100644 index 4c00d9d6f3..0000000000 --- a/targets/SIMU/PROC/interface.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#ifndef __INTERFACE_H__ -# define __INTERFACE_H__ - - -typedef struct { - void* pointer; -} memory_reference_t2; - - - -typedef struct { - memory_reference_t2 mem_ref; -} obj_ref_t2; - -typedef struct { - obj_ref_t2 *gm; -} HO; - - -typedef struct { - void* pointer; - int port; - int Exec_Msg_Flag; - int node_id; - int node_role ; - int next_slot; - int last_slot; - int frame; - int sub_frame; - int slot; - int Exec_FLAG; - int EResp_FLAG; - int ue_id; -} s_t; - -HO Instance[3]; - - -typedef struct { - int thread_id; - int eNB_id; - int UE_id; - double **s_re; - double **s_im; - double **r_re; - double **r_im; - double **r_re0; - double **r_im0; - struct channel_desc_t *eNB2UE; - struct channel_desc_t *UE2eNB; - struct node_desc_t *enb_data; - struct node_desc_t *ue_data; - int *next_slot; - int *abstraction_flag; - struct LTE_DL_FRAME_PARMS *frame_parms; - int **tx_data[3]; - int **rx_data[3]; -} ch_thread; - - -#define CHANNEL_PORT 37800 -#define eNB_PORT 38800 -#define UE_PORT 39800 -#define MAX_eNB 20 -#define MAX_UE 20 -#endif diff --git a/targets/SIMU/USER/.ue.nvram b/targets/SIMU/USER/.ue.nvram deleted file mode 100644 index 17469c87add15bffcfe07e54a19cd93743f18818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55 zcmXpuH8V6cHZU?Wurx6=v1D)!4RUq%_hoJ|hDo*rfmenHWqO7}*;Y zz+5~;6AMVP8BDe?GO!C8CkiUN=0mJ=<_dNTQgACu%u7y%nBmF{6ah2Img5i0Pf1M6 z&r4PCEJ@7COk{B72=jMwbo2Lfh1fwy5)_IIpl}3+pCFjU2xJL^SxgK{`Vd)W24HYN zU4@?oGzF*~Wa@zih)Uu~kZlJV6#eDFWIm8o)7J-+{y-Ab97q~qV&sRX2T) gmon.txt" in the same directory as "gmon.out" -# you could also use the script "grpof2dot.py gmon.txt" for visual diagrams -ifdef GPROF -CFLAGS += -pg -endif - -#require kernel patch for oai driver to enable address autoconfiguration (IPv6 only) -ifdef ADDCONF -CFLAGS+=-DADDRCONF -endif - -ifdef OAI_NW_DRIVER_TYPE_ETHERNET -CFLAGS+=-DOAI_NW_DRIVER_TYPE_ETHERNET -endif - -CFLAGS += -DENABLE_USE_CPU_EXECUTION_TIME -ifndef DISABLE_XER_PRINT -CFLAGS += -DXER_PRINT -endif - -ifdef SECU -ifeq ($(NETTLE_FOUND), 0) -$(warning "Nettle library >= 2.5 is not installed on your system, nettle-dev lib needed, continuing with security disabled") -SECU=0 -else -ifeq ($(OPENSSL_FOUND), 0) -$(warning "openssl library is not installed on your system, openssl lib needed, continuing with security disabled") -SECU=0 -else -CFLAGS += -DENABLE_SECURITY -LIBS += $(OPENSSL_LIBS) $(NETTLE_LIBS) -endif -endif -endif - -include $(OPENAIR1_DIR)/PHY/Makefile.inc -include $(OPENAIR1_DIR)/SCHED/Makefile.inc -include $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc -include $(OPENAIR2_DIR)/LAYER2/Makefile.inc -include $(OPENAIR1_DIR)/SIMULATION/ETH_TRANSPORT/Makefile.inc -include $(OPENAIR2_DIR)/RRC/NAS/Makefile.inc -include $(OPENAIR2_DIR)/UTIL/Makefile.inc -include $(OPENAIR3_DIR)/RAL-LTE/Makefile.inc -include $(OPENAIR2_DIR)/ENB_APP/Makefile.inc - - -INCLUDES += -I$(TOP_DIR) -INCLUDES += $(L2_incl) -INCLUDES += $(ENB_APP_incl) -INCLUDES += $(UTIL_incl) -INCLUDES += $(UTILS_incl) -INCLUDES += -I$(ASN1_MSG_INC) -INCLUDES += -I$(COMMON_UTILS_DIR)/collection - -SIMULATION_OBJS = $(TOP_DIR)/SIMULATION/TOOLS/gauss.o -SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/random_channel.o -SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/rangen_double.o -SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/taus.o -SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/multipath_channel.o -SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/abstraction.o -SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/rf.o -SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/adc.o -SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/dac.o - -ASN1_RRC_MSG_OBJS1=$(addprefix $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/, $(ASN1_MSG_OBJS)) - -OAISIM_OBJS_COMMON = $(OPENAIR_TARGETS)/SIMU/USER/channel_sim.o -OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/init_lte.o -OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_config.o -OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/sinr_sim.o -OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/cor_SF_sim.o -OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_functions.o -OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/event_handler.o - -OAISIM_OBJS = $(OPENAIR_TARGETS)/SIMU/USER/oaisim.o - -ifeq ($(XFORMS), 1) -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/lte_phy_scope.o -endif - -ifdef PAD -CFLAGS += -DPAD -endif - -OAISIM_PAD_OBJS = $(OPENAIR_TARGETS)/SIMU/USER/discrete_event_generator.o -OAISIM_PAD_OBJS += $(OPENAIR_TARGETS)/SIMU/USER/threadpool.o -OAISIM_PAD_OBJS += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_pad.o -#deactivate the log offloading -ifndef LOG_THREAD -CFLAGS +=-DLOG_NO_THREAD -endif - -ifdef PROC -INT_OBJS += $(OPENAIR_TARGETS)/SIMU/PROC/channel_sim_proc.o -INT_OBJS += $(OPENAIR_TARGETS)/SIMU/PROC/Process.o -CFLAGS += -DPROC -endif - -CFLAGS += -DENABLE_VCD_FIFO -CFLAGS += -DENABLE_NEW_MULTICAST -ifdef NAS -CFLAGS += -DPDCP_USE_NETLINK_QUEUES -endif -# CFLAGS += -DENABLE_LOG_FIFO - -# Check if libpgm is installed and use it if found instead of the unreliable -# multicast -ifeq ($(PGM_FOUND), 1) -CFLAGS += $(PGM_CFLAGS) -LIBS += $(PGM_LIBS) -endif - -OBJ += $(PHY_OBJS) $(SIMULATION_OBJS) $(ETHERNET_TRANSPORT_OBJS) $(TOOLS_OBJS) $(SCHED_OBJS) $(STATS_OBJS) $(NAS_OBJS) -OBJ += $(INT_OBJS) $(UTIL_OBJ) $(UTILS_OBJS) $(OAISIM_OBJS_COMMON) $(ENB_APP_OBJS) -ifeq ($(OPENAIR2),1) -OBJ += $(L2_OBJS) -endif - -LFDS_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(LFDS_DIR)) -LFDS_LIB = $(LFDS_OBJ_DIR)/bin/liblfds611.a -LIBS += $(LFDS_LIB) -SHARED_DEPENDENCIES += $(LFDS_LIB) - -all: oaisim - -pad: oaisim_pad - -userclean: cleanall oaisim - -objsdir: - @if [ ! -d $(OBJS_DIR) ]; then mkdir -p $(OBJS_DIR); fi - -printvars: - @echo rrc_cellular variable is $(rrc_cellular) - @echo EXTRA_CFLAGS = $(EXTRA_CFLAGS) - @echo OAI Config generator is $(OCG_FLAG) - @echo OAI NETLINK FLAG is $(NAS_FLAG) - @echo SSE3 proc is $(SSE3PROC) - @echo L2 objs are $(L2_OBJS) - @echo eNB_flag is $(eNB_flag) - @echo UE_flag is $(UE_flag) - @echo S1AP objs: $(S1AP_BUILT_OBJS) - @echo X2AP objs: $(X2AP_BUILT_OBJS) - @echo CFLAGS: $(CFLAGS) - @echo Enable PGM: $(PGM_FOUND) - -##UTIL_YAC_C = $(OPENAIR2_TOP)/UTIL/enb_parser.o -##$(UTIL_LEX_C) = $(subst $(OPENAIR_DIR), $(OBJS_DIR), $(OBJ) $(OAISIM_OBJS) $(ASN1_RRC_MSG_OBJS1)) - - -OAISIM_COMPILED_OBJECTS = $(subst $(OPENAIR_DIR), $(OBJS_DIR), $(OBJ) $(OAISIM_OBJS) $(ASN1_RRC_MSG_OBJS1)) - --include $(ITTI_MESSAGES_XML:.xml=.d) --include $(OAISIM_PAD_OBJS:.o=.d) --include $(OAISIM_COMPILED_OBJECTS:.o=.d) - -ifdef ENABLE_ITTI -$(OAISIM_COMPILED_OBJECTS): $(ITTI_MESSAGES_H) - -oaisim_pad.o: $(ITTI_MESSAGES_H) -endif - -$(OAISIM_COMPILED_OBJECTS): | objsdir - -.SECONDEXPANSION: -$(OAISIM_COMPILED_OBJECTS) $(OAISIM_PAD_OBJS): %.o : $$(subst $(OBJS_DIR), $(OPENAIR_DIR), $$*.c) - @echo Compiling $< - @if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi; - @$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -DPHY_CONTEXT=1 $(INCLUDES) -o $@ $< - @$(CC) -MM $(CFLAGS) $(EXTRA_CFLAGS) -DPHY_CONTEXT=1 $(INCLUDES) $< > $*.d - @mv -f $*.d $*.d.tmp - @sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d - @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $*.d - @rm -f $*.d.tmp - -$(LFDS_LIB): - @if [ ! -d $(LFDS_OBJ_DIR)/bin ]; then mkdir -p $(LFDS_OBJ_DIR)/bin; fi; - @if [ ! -d $(LFDS_OBJ_DIR)/obj ]; then mkdir -p $(LFDS_OBJ_DIR)/obj; fi; - $(MAKE) -C $(LFDS_DIR) -f makefile.linux OUTDIR=$(LFDS_OBJ_DIR) - -oaisim_pad: $(OBJ) $(OAISIM_PAD_OBJS) $(ASN1_RRC_MSG_OBJS1) - @echo "Linking oaisim_pad ..." - @$(MPICC) $(INCLUDES) $(S1AP_Incl) $(X2AP_Incl) -o oaisim_pad $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(OAISIM_PAD_OBJS) $(ASN1_RRC_MSG_OBJS1) \ - -lpthread -llapack_atlas -lforms -lrt -lconfig $(LIBS) $(DB_LDFLAGS) - -oaisim: $(OAISIM_COMPILED_OBJECTS) $(SHARED_DEPENDENCIES) - @echo "Linking oaisim ..." - @$(CC) $(INCLUDES) $(S1AP_Incl) $(X2AP_Incl) -o oaisim $(CFLAGS) $(EXTRA_CFLAGS) $(OAISIM_COMPILED_OBJECTS) \ - -lpthread -llapack_atlas -lforms -lrt -lconfig $(LIBS) $(DB_LDFLAGS) - -ifeq ($(rrc_cellular_eNB),1) - mv oaisim oaisim_eNB -endif -ifeq ($(rrc_cellular_UE),1) - mv oaisim oaisim_UE -endif - -oaisimCROWN: $(OBJ) $(ASN1_RRC_MSG_OBJS1) oaisimCROWN.c - @echo "Compiling oaisimCROWN.c ..." - @$(CC) oaisimCROWN.c $(INCLUDES) $(S1AP_Incl) $(X2AP_Incl) -o oaisimCROWN $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(ASN1_RRC_MSG_OBJS1) -lm -lblas -lpthread -llapack_atlas -lforms $(LIBXML2_LIBS) -lX11 -lXpm -lrt -lconfig - -oai_nw_drv: - (cd $(OPENAIR2_DIR) && $(MAKE) oai_nw_drv.ko) - (cp $(OPENAIR2_DIR)/NAS/DRIVER/LITE/oai_nw_drv.ko . ) -oai_nw_drv_clean: - (cd $(OPENAIR2_DIR)/NAS/DRIVER/LITE && $(MAKE) clean) -nasmesh_fix: - (cd $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/RB_TOOL && $(MAKE) clean && $(MAKE)) - (cd $(OPENAIR2_DIR) && $(MAKE) clean && $(MAKE) nasmesh_netlink_address_fix.ko) -nasmesh_fix_uninstall: - (sudo rmmod nasmesh.ko) -nasmesh_fix_install: - (sudo insmod $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/nasmesh.ko) -nasmesh_fix_reinstall: - (sudo rmmod nasmesh.ko) - (sudo insmod $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/nasmesh.ko) -nasmesh_nl: - (cd $(OPENAIR2_DIR)/NETWORK_RIVER/MESH/RB_TOOL && $(MAKE)) - (cd $(OPENAIR2_DIR) && $(MAKE) nasmesh_netlink.ko) - (sudo insmod $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/nasmesh.ko) -rb_tool: - (cd $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/RB_TOOL && $(MAKE)) - -nasmesh_install: - (sudo rmmod nasmesh) - (sudo insmod $(OPENAIR2_DIR)/NAS/DRIVER/MESH/nasmesh.ko) -nasmesh_clean: - (cd $(OPENAIR2_DIR) && $(MAKE) clean) -nas_sim_mt_cellular: - ( cd $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR && make nasmt_sim CELLULAR=1 NO_RRM=1) - -nas_sim_rg_cellular: - ( cd $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR && make nasrg_sim MASTER=1 CELLULAR=1 NO_RRM=1) - -rrm_std_cellular: - ( cd $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR && make cell_rrm CELL_RRM=1 CELLULAR=1 NO_RRM=1) - -cleanall: common-cleanall clean cleanasn1 - -cleanalmostall: clean - rm -f $(ASN1_RRC_MSG_OBJS1) - -clean: common-clean - @$(RM_F_V) oaisim - @$(RM_F_V) oaisim_pad -# @$(RM_F_V) $(ITTI_MESSAGES_H) $(ITTI_MESSAGES_XML) $(ITTI_MESSAGES_XML:.xml=.d) - @$(RM_F_V) $(OAISIM_PAD_OBJS) - @$(RM_F_V) $(OAISIM_PAD_OBJS:.o=.d) - @$(RM_F_V) $(OAISIM_COMPILED_OBJECTS) - @$(RM_F_V) $(OAISIM_COMPILED_OBJECTS:.o=.d) - @$(RM_F_V) *.exe* - @$(RM_F_V) $(ASN1_MSG_INC)/asn1_msg.o - -cleanl1: - @$(RM_F_V) LOG_THREAD oaisim - @$(RM_F_V) $(PHY_OBJS) $(SCHED_OBJS) - @$(RM_F_V) *.o - @$(RM_F_V) *.exe - -cleanl2: - @$(RM_F_V) $(L2_OBJS) - @$(RM_F_V) $(ASN1_MSG_INC)/asn1_msg.o - -cleanasn1: - @$(RM_F_V) $(ASN1_RRC_MSG_OBJS1) - $(shell cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES ; rm -f $(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS) *.o *.d) - @$(RM_F_V) $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.am.sample - @$(RM_F_V) $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc.generated - @$(RM_F_V) $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel* - -cleancell: - @$(RM_F_V) $(OPENAIR2_DIR)/RRC/CELLULAR/*.o - @$(RM_F_V) $(OPENAIR2_DIR)/RRC/CELLULAR/*.d - @$(RM_F_V) $(OPENAIR2_DIR)/RRC/L2_INTERFACE/*.o - @$(RM_F_V) $(OPENAIR2_DIR)/RRC/L2_INTERFACE/*.d - @$(RM_F_V) $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR/*.o - @$(RM_F_V) $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR/*.d - -cleanlfds: - $(MAKE) -C $(LFDS_DIR) -f makefile.linux clean - -cppcheck: - @echo "cppcheck oaisim ..." - cppcheck $(INCLUDES) ${OBJ:.o=.c} ${OAISIM_OBJS,.o=.c} ${ASN1_RRC_MSG_OBJS1,.o=.c} -print: - @echo "OBJ " $(OBJ) - @echo "OAISIM_OBJS " $(OAISIM_OBJS) - @echo "OAISIM_PAD_OBJS " $(OAISIM_PAD_OBJS) - @echo "OCG_FLAG are " $(OCG_FLAG) - @echo "CFLAGS are " $(CFLAGS) - @echo "EXTRA_CFLAGS are" $(EXTRA_CFLAGS) - @echo "COMMON_CFLAGS are" $(COMMON_CFLAGS) - @echo "L2 includes are" $(L2_incl) - @echo "INCLUDES are" $(INCLUDES) - @echo "S1AP Includes are" $(S1AP_Incl) - @echo "X2AP Includes are" $(X2AP_Incl) - @echo "TOP_DIR Include is" I$(TOP_DIR) - @echo "UTIL includes are" $(UTIL_incl) - @echo "UTILS includes are" $(UTILS_incl) - @echo "IS_REL8 is " $(IS_REL8) - @echo "IS_REL10 is " $(IS_REL10) - @echo "ENABLE_DB is " $(ENABLE_DB) - @echo "Libs are" $(LIBS) - @echo "NAS" $(NAS) - -showcflags: - @echo oaisim cflags: $(CFLAGS) - @echo oaisim includes: $(INCLUDES) - @if [ -d $(S1AP_DIR) ]; then $(MAKE) -C $(S1AP_DIR) -f Makefile.eNB showcflags; fi - @if [ -d $(X2AP_DIR) ]; then $(MAKE) -C $(X2AP_DIR) -f Makefile.inc showcflags; fi - -otg_all: otg_latency otg_gp - -# need to check if the file exists before calling otgplot -otg_latency: - export TITLE="Application OWD(ms)" - cp /tmp/otg_latency.dat /tmp/onewaydelay.dat - $(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/otg_latency.dat" "[$(COL1):$(COL2)]" -otg_latency_bg: - export TITLE="Background OWD(ms)" - $(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/otg_latency_bg.dat" "[$(COL1):$(COL2)]" -otg_gp: - export TITLE="Application Goodput(Kb/s)" - cp /tmp/otg_goodput.dat /tmp/goodput.dat - $(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/goodput.dat" "[$(COL1):$(COL2)]" -otg_gp_bg: - export TITLE="Background Goodput(Kb/s)" - $(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/otg_goodput_bg.dat" "[$(COL1):$(COL2)]" -otg_jitter: - export TITLE="Aplication Jitter(ms)" - $(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/otg_jitter.dat" "[$(COL1):$(COL2)]" - -pexpect = $(shell if [ `dpkg -l | grep pexpect -c` = "0" ]; then echo "0" ; else echo "1" ; fi ) - -pre-ci: - @echo "Pre-commit check" - -ifeq ($(pexpect), 1) -ifndef PW - @echo "Usage: make pre-ci PW=mypassword" - @echo "Password is used to access the local host through ssh." - python $(OPENAIR_TARGETS)/TEST/OAI/test01.py -else - python $(OPENAIR_TARGETS)/TEST/OAI/test01.py -w $(PW) -endif -else - @echo "Python pexpect package is missing, please install" -endif diff --git a/targets/SIMU/USER/channel_sim.c b/targets/SIMU/USER/channel_sim.c deleted file mode 100644 index 3018dbe1fb..0000000000 --- a/targets/SIMU/USER/channel_sim.c +++ /dev/null @@ -1,618 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include -#include -#include -#include -#include -#include - -#include "SIMULATION/TOOLS/sim.h" -#include "SIMULATION/RF/rf.h" -#include "PHY/types.h" -#include "PHY/defs_eNB.h" -#include "PHY/phy_extern.h" -#include "PHY/phy_extern_ue.h" - -#include "LAYER2/MAC/mac.h" -#include "LAYER2/MAC/mac_extern.h" -#include "UTIL/LOG/log_if.h" -#include "UTIL/LOG/log_extern.h" -#include "RRC/LTE/rrc_extern.h" -#include "PHY_INTERFACE/phy_interface_extern.h" -#include "UTIL/OCG/OCG.h" -#include "UTIL/OPT/opt.h" // to test OPT - -#include "UTIL/FIFO/types.h" - -#ifdef XFORMS -#include "forms.h" -#include "phy_procedures_sim_form.h" -#endif - -#include "oaisim.h" - -#define RF -#define DEBUG_SIM -/* -#undef LOG_D -#define LOG_D(A,B,C...) printf(B,C) -*/ - -int number_rb_ul; -int first_rbUL ; - -extern Signal_buffers_t *signal_buffers_g; - - -double r_re_DL[NUMBER_OF_UE_MAX][2][30720]; -double r_im_DL[NUMBER_OF_UE_MAX][2][30720]; -double r_re_UL[NUMBER_OF_eNB_MAX][2][30720]; -double r_im_UL[NUMBER_OF_eNB_MAX][2][30720]; -int RU_output_mask[NUMBER_OF_UE_MAX]; -int UE_output_mask[NUMBER_OF_RU_MAX]; -pthread_mutex_t RU_output_mutex[NUMBER_OF_UE_MAX]; -pthread_mutex_t UE_output_mutex[NUMBER_OF_RU_MAX]; - -double ru_amp[NUMBER_OF_RU_MAX]; - -void do_DL_sig(channel_desc_t *RU2UE[NUMBER_OF_RU_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs], - node_desc_t *enb_data[NUMBER_OF_RU_MAX], - node_desc_t *ue_data[NUMBER_OF_UE_MAX], - uint16_t subframe, - uint32_t offset, - uint32_t length, - uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *ue_frame_parms, - uint8_t UE_id, - int CC_id) -{ - - int32_t att_eNB_id=-1; - int32_t **txdata,**rxdata; - - uint32_t eNB_id,ru_id=0; - double tx_pwr; - double rx_pwr; - int32_t rx_pwr2; - uint32_t i,aa; - uint32_t sf_offset; - - double min_path_loss=-200; - uint8_t hold_channel=0; - uint8_t nb_antennas_rx = RU2UE[0][0][CC_id]->nb_rx; // number of rx antennas at UE - uint8_t nb_antennas_tx = RU2UE[0][0][CC_id]->nb_tx; // number of tx antennas at eNB - - double s_re0[30720]; - double s_re1[30720]; - double *s_re[2]; - double s_im0[30720]; - double s_im1[30720]; - double *s_im[2]; - double r_re00[30720]; - double r_re01[30720]; - double *r_re0[2]; - double r_im00[30720]; - double r_im01[30720]; - double *r_im0[2]; - LTE_DL_FRAME_PARMS *frame_parms; - - s_re[0] = s_re0; - s_im[0] = s_im0; - s_re[1] = s_re1; - s_im[1] = s_im1; - - r_re0[0] = r_re00; - r_im0[0] = r_im00; - r_re0[1] = r_re01; - r_im0[1] = r_im01; - - if (subframe==0) - hold_channel = 0; - else - hold_channel = 1; - - if (abstraction_flag != 0) { - //for (UE_id=0;UE_idframe_parms; - - random_channel(RU2UE[ru_id][UE_id][CC_id],abstraction_flag); - /* - for (i=0;inb_taps;i++) - printf("RU2UE[%d][%d]->a[0][%d] = (%f,%f)\n",eNB_id,UE_id,i,RU2UE[eNB_id][UE_id]->a[0][i].x,RU2UE[eNB_id][UE_id]->a[0][i].y); - */ - freq_channel(RU2UE[ru_id][UE_id][CC_id], frame_parms->N_RB_DL,frame_parms->N_RB_DL*12+1); - } - - // find out which eNB the UE is attached to - /* - for (eNB_id=0; eNB_idpdcch_vars[0][0]->crnti,RC.eNB[eNB_id][CC_id])>=0) { - // UE with UE_id is connected to eNb with eNB_id - att_eNB_id=eNB_id; - LOG_D(OCM,"A: UE attached to eNB (UE%d->eNB%d)\n",UE_id,eNB_id); - } - } - */ - // if UE is not attached yet, find assume its the eNB with the smallest pathloss - if (att_eNB_id<0) { - for (eNB_id=0; eNB_idRU_list[ru]->idx; - if (min_path_losspath_loss_dB) { - min_path_loss = RU2UE[ru_id][UE_id][CC_id]->path_loss_dB; - att_eNB_id=eNB_id; - LOG_D(OCM,"B: UE attached to eNB (UE%d->eNB%d)\n",UE_id,eNB_id); - } - } - } - } - - if (att_eNB_id<0) { - LOG_E(OCM,"Cannot find eNB for UE %d, return\n",UE_id); - return; //exit(-1); - } - -#ifdef DEBUG_SIM - rx_pwr = signal_energy_fp2(RU2UE[att_eNB_id][UE_id][CC_id]->ch[0], - RU2UE[att_eNB_id][UE_id][CC_id]->channel_length)*RU2UE[att_eNB_id][UE_id][CC_id]->channel_length; - LOG_D(OCM,"Channel (CCid %d) eNB %d => UE %d : tx_power %d dBm, path_loss %f dB\n", - CC_id,att_eNB_id,UE_id, - frame_parms->pdsch_config_common.referenceSignalPower, - RU2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB); -#endif - - //dlsch_abstraction(PHY_vars_UE_g[UE_id]->sinr_dB, rb_alloc, 8); - // fill in perfect channel estimates - channel_desc_t *desc1 = RU2UE[att_eNB_id][UE_id][CC_id]; - int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0]; - // double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + RU2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0); - double scale = pow(10.0,(frame_parms->pdsch_config_common.referenceSignalPower+RU2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB)/20.0); - LOG_D(OCM,"scale =%lf (%d dB)\n",scale,(int) (20*log10(scale))); - // freq_channel(desc1,frame_parms->N_RB_DL,nb_samples); - //write_output("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8); - //write_output("channelF.m","chF",desc1->chF[0],nb_samples,1,8); - int count,count1,a_rx,a_tx; - - for(a_tx=0; a_txsymbols_per_tti/2;count++) - for (count=0; count<1; count++) { - for (count1=0; count1N_RB_DL*12; count1++) { - ((int16_t *) dl_channel_est[(a_tx<<1)+a_rx])[2*count1+(count*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(desc1->chF[a_rx+(a_tx*nb_antennas_rx)][count1].x*scale); - ((int16_t *) dl_channel_est[(a_tx<<1)+a_rx])[2*count1+1+(count*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(desc1->chF[a_rx+(a_tx*nb_antennas_rx)][count1].y*scale) ; - } - } - } - } - - // calculate the SNR for the attached eNB (this assumes eNB always uses PMI stored in eNB_UE_stats; to be improved) - init_snr(RU2UE[att_eNB_id][UE_id][CC_id], enb_data[att_eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB, &PHY_vars_UE_g[UE_id][CC_id]->N0, - PHY_vars_UE_g[UE_id][CC_id]->transmission_mode[att_eNB_id], RC.eNB[att_eNB_id][CC_id]->UE_stats[UE_id].DL_pmi_single, - RC.eNB[att_eNB_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off,RC.eNB[att_eNB_id][CC_id]->frame_parms.N_RB_DL); - - // calculate sinr here - for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { - if (att_eNB_id != eNB_id) { - calculate_sinr(RU2UE[eNB_id][UE_id][CC_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB, - RC.eNB[att_eNB_id][CC_id]->frame_parms.N_RB_DL); - } - } - } // hold channel - } - else { //abstraction_flag - - - pthread_mutex_lock(&RU_output_mutex[UE_id]); - - if (RU_output_mask[UE_id] == 0) { // This is the first eNodeB for this UE, clear the buffer - for (aa=0; aaframe_parms.samples_per_tti)*sizeof(double)); - memset((void*)r_im_DL[UE_id][aa],0,(RC.ru[0]->frame_parms.samples_per_tti)*sizeof(double)); - } - } - pthread_mutex_unlock(&RU_output_mutex[UE_id]); - - for (ru_id=0; ru_idcommon.txdata; - frame_parms = &RC.ru[ru_id]->frame_parms; - - sf_offset = (subframe*frame_parms->samples_per_tti) + offset; - LOG_D(EMU,">>>>>>>>>>>>>>>>>TXPATH: RU %d : DL_sig reading TX for subframe %d (sf_offset %d, length %d) from %p\n",ru_id,subframe,sf_offset,length,txdata[0]+sf_offset); - int length_meas = frame_parms->ofdm_symbol_size; - if (sf_offset+length <= frame_parms->samples_per_tti*10) { - - tx_pwr = dac_fixed_gain(s_re, - s_im, - txdata, - sf_offset, - nb_antennas_tx, - length, - sf_offset, - length_meas, - 14, - frame_parms->pdsch_config_common.referenceSignalPower, // dBm/RE - 0, - &ru_amp[ru_id], - frame_parms->N_RB_DL*12); - - } - else { - tx_pwr = dac_fixed_gain(s_re, - s_im, - txdata, - sf_offset, - nb_antennas_tx, - (frame_parms->samples_per_tti*10)-sf_offset, - sf_offset, - length_meas, - 14, - frame_parms->pdsch_config_common.referenceSignalPower, // dBm/RE - 0, - &ru_amp[ru_id], - frame_parms->N_RB_DL*12); - - tx_pwr = dac_fixed_gain(s_re, - s_im, - txdata, - sf_offset, - nb_antennas_tx, - length+sf_offset-(frame_parms->samples_per_tti*10), - sf_offset, - length_meas, - 14, - frame_parms->pdsch_config_common.referenceSignalPower, // dBm/RE - 0, - &ru_amp[ru_id], - frame_parms->N_RB_DL*12); - } -#ifdef DEBUG_SIM - LOG_D(PHY,"[SIM][DL] subframe %d: txp (time) %d dB\n", - subframe,dB_fixed(signal_energy(&txdata[0][sf_offset],length_meas))); - - LOG_D(OCM,"[SIM][DL] RU %d (CCid %d): tx_pwr %.1f dBm/RE (target %d dBm/RE), for subframe %d\n", - ru_id,CC_id, - 10*log10(tx_pwr), - frame_parms->pdsch_config_common.referenceSignalPower, - subframe); - -#endif - tx_pwr = signal_energy_fp(s_re,s_im,nb_antennas_tx, - lengthN_RB_DL); - - //RU2UE[eNB_id][UE_id]->path_loss_dB = 0; - multipath_channel(RU2UE[ru_id][UE_id][CC_id],s_re,s_im,r_re0,r_im0, - length,hold_channel); -#ifdef DEBUG_SIM - rx_pwr = signal_energy_fp2(RU2UE[ru_id][UE_id][CC_id]->ch[0], - RU2UE[ru_id][UE_id][CC_id]->channel_length)*RU2UE[ru_id][UE_id][CC_id]->channel_length; - LOG_D(OCM,"[SIM][DL] Channel RU %d => UE %d (CCid %d): Channel gain %f dB (%f)\n",ru_id,UE_id,CC_id,10*log10(rx_pwr),rx_pwr); -#endif - - -#ifdef DEBUG_SIM - - for (i=0; ichannel_length; i++) - LOG_D(OCM,"channel(%d,%d)[%d] : (%f,%f)\n",ru_id,UE_id,i,RU2UE[ru_id][UE_id][CC_id]->ch[0][i].x,RU2UE[ru_id][UE_id][CC_id]->ch[0][i].y); - -#endif - - LOG_D(OCM,"[SIM][DL] Channel RU %d => UE %d (CCid %d): tx_power %.1f dBm/RE, path_loss %1.f dB\n", - ru_id,UE_id,CC_id, - (double)frame_parms->pdsch_config_common.referenceSignalPower, - // enb_data[eNB_id]->tx_power_dBm, - RU2UE[ru_id][UE_id][CC_id]->path_loss_dB); - -#ifdef DEBUG_SIM - rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx, - lengthN_RB_DL); - LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr %f dBm/RE (%f dBm RSSI,tx %f dB)for subframe %d (length %d)\n",UE_id, - 10*log10(rx_pwr), - 10*log10(rx_pwr*(double)frame_parms->N_RB_DL*12), - 10*log10(tx_pwr),subframe, - lengthsampling_rate*1e6)-174, - 10*log10(RU2UE[ru_id][UE_id][CC_id]->sampling_rate*1e6*12*frame_parms->N_RB_DL/(double)frame_parms->ofdm_symbol_size)-174, - subframe); -#endif - - if (RU2UE[ru_id][UE_id][CC_id]->first_run == 1) - RU2UE[ru_id][UE_id][CC_id]->first_run = 0; - - - // RF model -#ifdef DEBUG_SIM - LOG_D(OCM,"[SIM][DL] UE %d (CCid %d): rx_gain %d dB (-ADC %f) for subframe %d\n",UE_id,CC_id,PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB, - PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB-66.227,subframe); -#endif - - rf_rx_simple(r_re0, - r_im0, - nb_antennas_rx, - length, - 1e3/RU2UE[ru_id][UE_id][CC_id]->sampling_rate, // sampling time (ns) - (double)PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) - -#ifdef DEBUG_SIM - rx_pwr = signal_energy_fp(r_re0,r_im0, - nb_antennas_rx, - lengthN_RB_DL); - LOG_D(OCM,"[SIM][DL] UE %d : ADC in (RU %d) %f dBm/RE for subframe %d\n", - UE_id,ru_id, - 10*log10(rx_pwr),subframe); -#endif - - - pthread_mutex_lock(&RU_output_mutex[UE_id]); - for (i=0; isamples_per_tti; i++) { - for (aa=0; aaN_RB_DL); - LOG_D(OCM,"[SIM][DL] UE %d : ADC in %f dBm/RE for subframe %d\n",UE_id,10*log10(rx_pwr),subframe); -#endif - - rxdata = PHY_vars_UE_g[UE_id][CC_id]->common_vars.rxdata; - sf_offset = (subframe*frame_parms->samples_per_tti)+offset; - - - adc(r_re_p, - r_im_p, - 0, - sf_offset, - rxdata, - nb_antennas_rx, - length, - 12); - -#ifdef DEBUG_SIM - rx_pwr2 = signal_energy(rxdata[0]+sf_offset,lengthN_RB_DL); - LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (ADC out) %f dB/RE (%d) for subframe %d, writing to %p, length %d\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,subframe,rxdata,lengthN_RB_DL) ,subframe); -#else - UNUSED_VARIABLE(rx_pwr2); - UNUSED_VARIABLE(tx_pwr); - UNUSED_VARIABLE(rx_pwr); -#endif - - } // RU_output_mask - pthread_mutex_unlock(&RU_output_mutex[UE_id]); - } // ru_id - - } - -} - - -void do_UL_sig(channel_desc_t *UE2RU[NUMBER_OF_UE_MAX][NUMBER_OF_RU_MAX][MAX_NUM_CCs], - node_desc_t *enb_data[NUMBER_OF_RU_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX], - uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - uint32_t frame,int ru_id,uint8_t CC_id) -{ - - int32_t **txdata,**rxdata; - uint8_t UE_id=0; - - uint8_t nb_antennas_rx = UE2RU[0][0][CC_id]->nb_rx; // number of rx antennas at eNB - uint8_t nb_antennas_tx = UE2RU[0][0][CC_id]->nb_tx; // number of tx antennas at UE - - double tx_pwr, rx_pwr; - int32_t rx_pwr2; - uint32_t i,aa; - uint32_t sf_offset; - - uint8_t hold_channel=0; - - double s_re0[30720]; - double s_re1[30720]; - double *s_re[2]; - double s_im0[30720]; - double s_im1[30720]; - double *s_im[2]; - double r_re00[30720]; - double r_re01[30720]; - double *r_re0[2]; - double r_im00[30720]; - double r_im01[30720]; - double *r_im0[2]; - - s_re[0] = s_re0; - s_im[0] = s_im0; - s_re[1] = s_re1; - s_im[1] = s_im1; - - r_re0[0] = r_re00; - r_im0[0] = r_im00; - r_re0[1] = r_re01; - r_im0[1] = r_im01; - - if (abstraction_flag!=0) { - } else { //without abstraction - - pthread_mutex_lock(&UE_output_mutex[ru_id]); - // Clear RX signal for eNB = eNB_id - for (i=0; isamples_per_tti; i++) { - for (aa=0; aacommon_vars.txdata; - AssertFatal(txdata != NULL,"txdata is null\n"); - sf_offset = subframe*frame_parms->samples_per_tti; - if (((double)PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe] + - UE2RU[UE_id][ru_id][CC_id]->path_loss_dB) <= -125.0) { - // don't simulate a UE that is too weak - LOG_D(OCM,"[SIM][UL] ULPOWERS UE %d tx_pwr %d dBm (num_RE %d) for subframe %d (sf_offset %d)\n", - UE_id, - PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe], - PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe], - subframe,sf_offset); - } else { - tx_pwr = dac_fixed_gain((double**)s_re, - (double**)s_im, - txdata, - sf_offset, - nb_antennas_tx, - frame_parms->samples_per_tti, - sf_offset, - frame_parms->ofdm_symbol_size, - 14, - (double)PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe]-10*log10((double)PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe]), - 1, - NULL, - PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe]); // This make the previous argument the total power - LOG_D(OCM,"[SIM][UL] ULPOWERS UE %d tx_pwr %f dBm (target %d dBm, num_RE %d) for subframe %d (sf_offset %d)\n", - UE_id, - 10*log10(tx_pwr*PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe]), - PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe], - PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe], - subframe,sf_offset); - - - multipath_channel(UE2RU[UE_id][ru_id][CC_id],s_re,s_im,r_re0,r_im0, - frame_parms->samples_per_tti,hold_channel); - - - rx_pwr = signal_energy_fp2(UE2RU[UE_id][ru_id][CC_id]->ch[0], - UE2RU[UE_id][ru_id][CC_id]->channel_length)*UE2RU[UE_id][ru_id][CC_id]->channel_length; - - LOG_D(OCM,"[SIM][UL] subframe %d Channel UE %d => RU %d : %f dB (hold %d,length %d, PL %f)\n",subframe,UE_id,ru_id,10*log10(rx_pwr), - hold_channel,UE2RU[UE_id][ru_id][CC_id]->channel_length, - UE2RU[UE_id][ru_id][CC_id]->path_loss_dB); - - rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,frame_parms->samples_per_tti,0); - LOG_D(OCM,"[SIM][UL] RU %d (%d/%d rx antennas) : rx_pwr %f dBm (tx_pwr - PL %f) for subframe %d, sptti %d\n", - ru_id,nb_antennas_rx,UE2RU[UE_id][ru_id][CC_id]->nb_rx,10*log10(rx_pwr),10*log10(tx_pwr*PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe])+UE2RU[UE_id][ru_id][CC_id]->path_loss_dB,subframe,frame_parms->samples_per_tti); - /* - if (abs(10*log10(rx_pwr)-10*log10(tx_pwr*PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe])-UE2RU[UE_id][ru_id][CC_id]->path_loss_dB)>3) { - write_output("txsig_re.m","s_re",s_re[0],frame_parms->samples_per_tti,1,7); - write_output("txsig_im.m","s_im",s_im[0],frame_parms->samples_per_tti,1,7); - write_output("rxsig_re.m","r_re",r_re0[0],frame_parms->samples_per_tti,1,7); - write_output("rxsig_im.m","r_im",r_im0[0],frame_parms->samples_per_tti,1,7); - exit(-1); - }*/ - - if (UE2RU[UE_id][ru_id][CC_id]->first_run == 1) - UE2RU[UE_id][ru_id][CC_id]->first_run = 0; - - - pthread_mutex_lock(&UE_output_mutex[ru_id]); - for (aa=0; aasamples_per_tti; i++) { - r_re_UL[ru_id][aa][i]+=r_re0[aa][i]; - r_im_UL[ru_id][aa][i]+=r_im0[aa][i]; - } - } - pthread_mutex_unlock(&UE_output_mutex[ru_id]); - } - } //UE_id - - double *r_re_p[2] = {r_re_UL[ru_id][0],r_re_UL[ru_id][1]}; - double *r_im_p[2] = {r_im_UL[ru_id][0],r_im_UL[ru_id][1]}; - - rx_pwr = signal_energy_fp(r_re_p,r_im_p,nb_antennas_rx,frame_parms->samples_per_tti,0); - LOG_D(OCM,"[SIM][UL] RU %d (%d/%d rx antennas) : rx_pwr %f dBm (before RF) for subframe %d, gain %f\n", - ru_id,nb_antennas_rx,nb_antennas_rx,10*log10(rx_pwr),subframe, - (double)RC.ru[ru_id]->max_rxgain-(double)RC.ru[ru_id]->att_rx - 66.227); - rf_rx_simple(r_re_p, - r_im_p, - nb_antennas_rx, - frame_parms->samples_per_tti, - 1e3/UE2RU[0][ru_id][CC_id]->sampling_rate, // sampling time (ns) - (double)RC.ru[ru_id]->max_rxgain-(double)RC.ru[ru_id]->att_rx - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) - - //#ifdef DEBUG_SIM - rx_pwr = signal_energy_fp(r_re_p,r_im_p,nb_antennas_rx,frame_parms->samples_per_tti,0);//*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL; - LOG_D(OCM,"[SIM][UL] rx_pwr (ADC in) %f dB for subframe %d (rx_gain %f)\n",10*log10(rx_pwr),subframe, - (double)RC.ru[ru_id]->max_rxgain-(double)RC.ru[ru_id]->att_rx); - //#endif - - rxdata = RC.ru[ru_id]->common.rxdata; - sf_offset = subframe*frame_parms->samples_per_tti; - - - adc(r_re_p, - r_im_p, - 0, - sf_offset, - rxdata, - nb_antennas_rx, - frame_parms->samples_per_tti, - 12); - -#ifdef DEBUG_SIM - rx_pwr2 = signal_energy(rxdata[0]+sf_offset,frame_parms->samples_per_tti)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL); - LOG_D(OCM,"[SIM][UL] RU %d rx_pwr (ADC out) %f dB (%d) for subframe %d (offset %d) = %p\n",ru_id,10*log10((double)rx_pwr2),rx_pwr2,subframe,sf_offset,rxdata[0]+sf_offset); -#else - UNUSED_VARIABLE(tx_pwr); - UNUSED_VARIABLE(rx_pwr); - UNUSED_VARIABLE(rx_pwr2); -#endif - - } // abstraction_flag==0 - -} - - -void init_channel_vars(LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***s_im,double ***r_re,double ***r_im,double ***r_re0,double ***r_im0) -{ - - int i; - - memset(RU_output_mask,0,sizeof(int)*NUMBER_OF_UE_MAX); - for (i=0;i -#include -#include -//#include -#include -#include - -double **init_SF (int map_length, int map_height, double decor_dist, double variance); //,double decor,double var); -double **createMat (int nbRow, int nbCol); -void destroyMat(double **mat1,int row,int col); diff --git a/targets/SIMU/USER/event_handler.c b/targets/SIMU/USER/event_handler.c deleted file mode 100644 index e840bde57b..0000000000 --- a/targets/SIMU/USER/event_handler.c +++ /dev/null @@ -1,2568 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file event_handler.c -* \brief event handler primitives -* \author Navid Nikaein and Mohamed Said MOSLI BOUKSIAA, -* \date 2014 -* \version 0.5 -* @ingroup _oai -*/ - -#include -#include -// #include "UTIL/LOG/log.h" -#include "event_handler.h" - -//extern frame_t frame; -//End_Of_Sim_Event end_event; //Could later be a list of condition_events (if the end condition is more complicated) - -Event_List_t event_list; - -void add_event(Event_t event) -{ - - Event_elt_t * counter = event_list.head; - Event_elt_t * previous = counter; - Event_elt_t * elt = malloc(sizeof(Event_elt_t)); - - while (counter != NULL) { - if ((counter->event).frame > event.frame) break; - //else if ((counter->event).next_slot > event.next_slot) break; - else { - previous = counter; - counter = counter->next; - } - } - - elt->event = event; - - //printf("%" PRIu8 "testestest \n", *((uint8_t *) event.value)); - if (event_list.head != NULL) - event_list_add_element(elt, previous, &event_list); - else - event_list_add_head(elt, &event_list); - -} - -void schedule(Operation_Type_t op, Event_Type_t type, int frame, char * key, void * value, int ue, int lcid) -{ - Event_t event; - event.frame = frame; - - if (key == NULL) { //Global model update - event.key = NULL; - } else { //Update of a single parameter - event.key = malloc (sizeof(char) * (strlen(key)+1)); - strcpy(event.key, key); - } - - event.value = value; - //printf("%" PRIu8 "testestest \n",*((uint8_t *)value)); - event.type = type; - event.optype = op; - event.lcid = lcid; - event.ue = ue; - add_event(event); -} - -void schedule_delayed(Operation_Type_t op, Event_Type_t type, char * key, void* value, char * date, int ue, int lcid) -{ - printf("Delayed schedule"); - printf("date %s\n", date); - // first get the time from the system - struct tm *pdh; - time_t intps; - intps=time(NULL); - pdh = localtime(&intps); - char *date_cpy = malloc (sizeof (char) * 256); - strncpy( date_cpy, date, 256 ); - date_cpy[255] = 0; // terminate string - // second count the frame to reach the time - char *heure = NULL; - int heure_int; - int minute_int; - int heure_diff; - int minute_diff; - int ms_diff; - int frame; - - - char *minute = NULL; - heure = strtok(date_cpy,"h"); - //heure = strchr(date,'h'); - printf("hour char : %s", heure); - - minute = strchr(date,'h'); - printf("minute char : %s", minute+1); - - free( date_cpy ); - date_cpy = 0; - - heure_int = atoi(heure); - - minute_int = atoi(minute+1); - heure_diff = heure_int - pdh->tm_hour; - minute_diff = minute_int - pdh->tm_min; - ms_diff = heure_diff*3600*1000 + minute_diff*60*1000; - frame = ms_diff/10; - - /*char stTemp[2]; - int valeur_a_en_entier; - - sprintf(stTemp,"%c",a); - valeur_a_en_entier = atoi(stTemp);*/ - // third schedule with the classic function - printf("schedule_frame %d\n",frame); - printf("test pdh hr : %d\n", pdh->tm_hour); - printf("test heure_diff : %d\n", heure_diff); - printf("test minute_diff : %d\n", minute_diff); - - if(frame >= 0) { - schedule(op,type,frame,key,value,lcid,ue); - } -} - -/* - * this function can reschedule events in the future to build a desired (more dynamic) scenario - * TODO: make sure that OCG OAI_Emulation is decoupled with the local vars - * - * For ET_MAC parameters are first set in the OAI_emulation (OCG) structure and then - * duplicated in the eNB_mac_inst structure - * - * If you want to modifiy a parameter for all UEs, put -1 in the lcid and the ue field when you call - * the schedule function - */ -void schedule_events() -{ - - /* - * Step 1: vars needed for future changes - */ - - // overall config associated with OAI_ET - // OAI_Emulation * oai_frame_1000; - - // specific config - /* - * associated with SYS_ET - */ - //Environment_System_Config * system_frame_200; - /* - * associated with TOPO_ET - */ - //Topology_Config *topology_frame_10; - /* - * associated with APP_ET - */ - //Application_Config *application_frame_20; - /* - * associated with EMU_ET - */ - //Emulation_Config * emulation_frame_100; - uint8_t a; - - Mac_config* mac_config; - Mac_config* mac_config2; - Mac_config* mac_config3; - Mac_config* mac_config4; - Mac_config* mac_config5; - int i=0; - - mac_config = NULL; - mac_config2 = NULL; - mac_config3 = NULL; - mac_config4 = NULL; - mac_config5 = NULL; - mac_config = malloc(sizeof(Mac_config)); - mac_config2= malloc(sizeof(Mac_config)); - mac_config3= malloc(sizeof(Mac_config)); - mac_config4= malloc(sizeof(Mac_config)); - mac_config5= malloc(sizeof(Mac_config)); - - a = 5; - - //uint16_t *priority[11];//={1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2}; - - - //int tab[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX]; - Application_Config* application_config; - application_config = malloc(sizeof(Application_Config)); - - for(i=0; icustomized_traffic.aggregation_level[i]=i; - } - - mac_config->DCI_aggregation_min = a; - mac_config->DLSCH_dci_size_bits = a; - - /* - * Step 2: set the desired future changes in the vars - */ - // i.e. optionally provide an XML file and update OCG vars - - //mob_frame_10 -> ... - //application_frame_30 -> ... - - /* - * Step 3: schedule the execution of changes - */ - - // general OAI dynamic configuration - - //schedule(OAI_ET, 1000, NULL, oai_frame_1000); - //schedule(SYS_ET, 200, NULL, system_frame_200); - //schedule(READ, TOPO_ET, 10, NULL, ""); - //schedule(APP_ET, 20, NULL, application_frame_20); - //schedule(EMU_ET, 100, NULL,emulation_frame_100); - - // protocol dynamic configuration - schedule(READ, MAC_ET, 115, NULL, "",0,0); - //schedule(READ, MAC_ET, 400, NULL, ""); - //schedule(READ, MAC_ET, 500, NULL, ""); - //schedule(WRITE, MAC_ET, 100, NULL, ""); - //schedule(READ, TOPO_ET,110,NULL,"",0,0); - //double b = (double) 45; - //schedule(READ, APP_ET,111,NULL,"",0,0); - //schedule(READ, SYS_ET,112,NULL,"",0,0); - //schedule(READ, EMU_ET,113,NULL,"",-1,-1); - - //schedule(WRITE, MAC_ET, 122, "DCI_aggregation_min", mac_config); - //schedule(WRITE, MAC_ET, 123, "max_allowed_rbs", mac_config); - //schedule(WRITE, MAC_ET, 125, "max_mcs", mac_config); - int j=0; - - for(i=0; ievent; - - if (event.frame == frame) { - //printf("%" PRIu8 "testestest \n", *((uint8_t *) event.value)); - switch (event.type) { - case OAI_ET: - update_oai_model(event.key, event.value); - user_defined_event = event_list_remove_head(&event_list); - break; - - case SYS_ET: - update_sys_model(event); - user_defined_event = event_list_remove_head(&event_list); - break; - - case TOPO_ET: - update_topo_model(event); //implement it with assigning the new values to that of oai_emulation & second thing is to ensure mob model is always read from oai_emulation - user_defined_event = event_list_remove_head(&event_list); - break; - - case APP_ET: - update_app_model(event); - user_defined_event = event_list_remove_head(&event_list); - break; - - case EMU_ET: - update_emu_model(event); - user_defined_event = event_list_remove_head(&event_list); - break; - - case MAC_ET: - update_mac(event); - user_defined_event = event_list_remove_head(&event_list); - break; - - default : - break; - } - } else { - break; - } - } - -} - - -void update_mac(Event_t event) -{ - LOG_I(EMU,"A NEW MAC MODEL\n"); - int i = 0; - UE_list_t *UE_list = 0; - int enb_module_id=0; - int cc_id =0; - eNB_MAC_INST *eNB_mac_inst = get_eNB_mac_inst(enb_module_id); - OAI_Emulation *oai_emulation = get_OAI_emulation(); - - if(event.optype == READ) { - - printf("eNB_stats\n\n\n"); - - if(event.key==NULL) { - - LOG_I(EMU,"num_dlactive_UEs :"); - printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].num_dlactive_UEs); - LOG_I(EMU,"available_prbs :"); - printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].available_prbs); - LOG_I(EMU,"total_available_prbs :"); - printf("%" PRIu32 "\n", eNB_mac_inst->eNB_stats[cc_id].total_available_prbs); - LOG_I(EMU,"available_ncces :"); - printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].available_ncces); - LOG_I(EMU,"dlsch_bitrate :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_bitrate); - LOG_I(EMU,"dlsch_bytes_tx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_bytes_tx); - LOG_I(EMU,"dlsch_pdus_tx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_pdus_tx); - LOG_I(EMU,"total_dlsch_bitrate :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_bitrate); - LOG_I(EMU,"total_dlsch_bytes_tx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_bytes_tx); - LOG_I(EMU,"total_dlsch_pdus_tx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_pdus_tx); - LOG_I(EMU,"ulsch_bitrate :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_bitrate); - LOG_I(EMU,"ulsch_bytes_rx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_bytes_rx); - LOG_I(EMU,"ulsch_pdus_rx :"); - printf("%" PRIu64 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_pdus_rx); - } else if(!strcmp((char *) event.key, "num_dlactive_UEs")) { - LOG_I(EMU,"num_dlactive_UEs :"); - printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].num_dlactive_UEs); - } else if(!strcmp((char *) event.key, "available_prbs")) { - LOG_I(EMU,"available_prbs :"); - printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].available_prbs); - } else if(!strcmp((char *) event.key, "total_available_prbs")) { - LOG_I(EMU,"total_available_prbs :"); - printf("%" PRIu32 "\n", eNB_mac_inst->eNB_stats[cc_id].total_available_prbs); - } else if(!strcmp((char *) event.key, "available_ncces")) { - LOG_I(EMU,"available_ncces :"); - printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].available_ncces); - } else if(!strcmp((char *) event.key, "dlsch_bitrate")) { - LOG_I(EMU,"dlsch_bitrate :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_bitrate); - } else if(!strcmp((char *) event.key, "dlsch_bytes_tx")) { - LOG_I(EMU,"dlsch_bytes_tx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_bytes_tx); - } else if(!strcmp((char *) event.key, "dlsch_pdus_tx")) { - LOG_I(EMU,"dlsch_pdus_tx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_pdus_tx); - } else if(!strcmp((char *) event.key, "total_dlsch_bitrate")) { - LOG_I(EMU,"total_dlsch_bitrate :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_bitrate); - } else if(!strcmp((char *) event.key, "total_dlsch_bytes_tx")) { - LOG_I(EMU,"total_dlsch_bytes_tx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_bytes_tx); - } else if(!strcmp((char *) event.key, "total_dlsch_pdus_tx")) { - LOG_I(EMU,"total_dlsch_pdus_tx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_pdus_tx); - } else if(!strcmp((char *) event.key, "ulsch_bitrate")) { - LOG_I(EMU,"ulsch_bitrate :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_bitrate); - } else if(!strcmp((char *) event.key, "ulsch_bytes_rx")) { - LOG_I(EMU,"ulsch_bytes_rx :"); - printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_bytes_rx); - } else if(!strcmp((char *) event.key, "ulsch_pdus_rx")) { - LOG_I(EMU,"ulsch_pdus_rx :"); - printf("%" PRIu64 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_pdus_rx); - } - } else if(event.optype == WRITE) { - LOG_I(EMU,"WRITE OPERATION \n"); - - - if(event.key==NULL && event.value!=NULL) { - - if((Mac_config *) event.value !=NULL && validate_mac(event)) { - - Mac_config* mac_config; - mac_config = (Mac_config *) event.value; - LOG_I(EMU,"update complete mac params \n"); - - if(event.ue == -1 && event.lcid == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - /* - if(&mac_config[i].DCI_aggregation_min) { - LOG_I(EMU,"update dci aggregation min\n"); - oai_emulation->mac_config[i].DCI_aggregation_min= mac_config[i].DCI_aggregation_min; - - UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; - LOG_I(EMU,"DCI_aggregation_min UE %d: \n",i); - LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DCI_aggregation_min); - } - - if(&mac_config[i].DLSCH_dci_size_bits !=NULL) { - oai_emulation->mac_config[i].DLSCH_dci_size_bits= mac_config[i].DLSCH_dci_size_bits; - UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; - LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n",i); - LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits); - } - */ - - if(mac_config[i].priority !=NULL) { - LOG_I(EMU,"update priority \n"); - int j; - for(j=0; jmac_config[i].priority[j]= mac_config[i].priority[j]; - UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; - LOG_I(EMU,"priority UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]); - } - } - } - - if(&mac_config[i].ul_bandwidth !=NULL) { - - int j=0; - - for(j=0; jmac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j]; - UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; - LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]); - } - } - - if(&mac_config[i].dl_bandwidth !=NULL) { - int j=0; - - for(j=0; jmac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j]; - UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; - LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]); - } - } - - if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) { - oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL; - UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; - LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:",i ); - LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); - } - - if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) { - oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL; - UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; - LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:",i); - LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); - } - - if(&mac_config[i].cqiSchedInterval !=NULL) { - oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval; - UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; - LOG_I(EMU,"cqiSchedInterval UE %d:",i); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval); - } - - if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) { - oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer; - UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; - LOG_I(EMU,"mac_ContentionResolutionTimer UE %d:", i); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer); - } - - if(mac_config->max_allowed_rbs !=NULL) { - int j=0; - - for(j=0; jmac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j]; - UE_list->UE_sched_ctrl[i].max_rbs_allowed_slice[j][0] = oai_emulation->mac_config[i].max_allowed_rbs[j]; - LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_rbs_allowed_slice[j][0]); - } - } - - if(mac_config[i].max_mcs !=NULL) { - int j=0; - - for(j=0; jmac_config[i].max_mcs[j]= mac_config[i].max_mcs[j]; - UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; - LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]); - } - - } - } - } else { - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - LOG_I(EMU,"update complete mac params \n"); - i = event.ue; - int j = event.lcid; - /* - if(&mac_config[i].DCI_aggregation_min) { - LOG_I(EMU,"update dci aggregation min\n"); - oai_emulation->mac_config[i].DCI_aggregation_min= mac_config[i].DCI_aggregation_min; - // duplication dans le ue template, vérifier la validité avant - UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; - LOG_I(EMU,"DCI_aggregation_min UE %d: \n",i); - LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DCI_aggregation_min); - } - - if(&mac_config[i].DLSCH_dci_size_bits !=NULL) { - oai_emulation->mac_config[i].DLSCH_dci_size_bits= mac_config[i].DLSCH_dci_size_bits; - UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; - LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n",i); - LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits); - } - */ - if(mac_config[i].priority !=NULL) { - LOG_I(EMU,"update priority \n"); - - - if(&mac_config[i].priority[j]!=NULL) { - oai_emulation->mac_config[i].priority[j]= mac_config[i].priority[j]; - UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; - LOG_I(EMU,"priority UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]); - } - - } - - if(&mac_config[i].ul_bandwidth !=NULL) { - // faire boucle par ue puis par lcid - - - - oai_emulation->mac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j]; - UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; - LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]); - - } - - if(&mac_config[i].dl_bandwidth !=NULL) { - oai_emulation->mac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j]; - UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; - LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]); - - } - - if(&mac_config[i].min_ul_bandwidth !=NULL) { - // faire boucle par ue puis par lcid - oai_emulation->mac_config[i].min_ul_bandwidth[j]= mac_config[i].min_ul_bandwidth[j]; - UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j] = oai_emulation->mac_config[i].min_ul_bandwidth[j]; - LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j]); - - } - - if(&mac_config[i].min_dl_bandwidth !=NULL) { - oai_emulation->mac_config[i].min_dl_bandwidth[j]= mac_config[i].min_dl_bandwidth[j]; - UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j] = oai_emulation->mac_config[i].min_dl_bandwidth[j]; - LOG_I(EMU,"min_dl_bandwidth UE %d LCID %d:", i, j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j]); - - } - - if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) { - oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL; - UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; - LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:",i ); - LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); - } - - if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) { - oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL; - UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; - LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:",i); - LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); - } - - if(&mac_config[i].cqiSchedInterval !=NULL) { - oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval; - UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; - LOG_I(EMU,"cqiSchedInterval UE %d:",i); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval); - } - - if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) { - oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer; - UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; - LOG_I(EMU,"mac_ContentionResolutionTimer UE %d:", i); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer); - } - - if(mac_config->max_allowed_rbs !=NULL) { - - oai_emulation->mac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j]; - UE_list->UE_sched_ctrl[i].max_rbs_allowed_slice[j][0] = oai_emulation->mac_config[i].max_allowed_rbs[j]; - LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_rbs_allowed_slice[j][0]); - - } - - if(mac_config[i].max_mcs !=NULL) { - oai_emulation->mac_config[i].max_mcs[j]= mac_config[i].max_mcs[j]; - UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; - LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]); - - } - } - } - } else if(!strcmp((char *) event.key, "priority") && event.value!=NULL && validate_mac(event)) { - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - int j=0; - LOG_I(EMU,"priority update \n"); - if(event.ue == -1) { - for(i=0; imac_config[i].priority[j]= mac_config[i].priority[j]; - UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j]; - LOG_I(EMU,"priority UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]); - } - } - } - } else { - oai_emulation->mac_config[event.ue].priority[event.lcid]= mac_config[event.ue].priority[event.lcid]; - UE_list->UE_sched_ctrl[event.ue].priority[event.lcid] = oai_emulation->mac_config[event.ue].priority[event.lcid]; - LOG_I(EMU,"priority UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].priority[event.lcid]); - } - } else if(!strcmp((char *) event.key, "DCI_aggregation_min") && event.value!=NULL && validate_mac(event)) { - //Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - //mac_config = (Mac_config *) event.value; - - LOG_I(EMU,"DCI_aggregation_min update \n"); - - if(event.ue == -1) { - UE_list = &eNB_mac_inst->UE_list; - /* - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - oai_emulation->mac_config[i].DCI_aggregation_min=mac_config[i].DCI_aggregation_min; - UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min; - LOG_I(EMU,"DCI_aggregation_min UE %d : \n", i); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_template[0][i].DCI_aggregation_min); - }*/ - } else { - /* oai_emulation->mac_config[event.ue].DCI_aggregation_min=mac_config[event.ue].DCI_aggregation_min; - UE_list->UE_template[0][event.ue].DCI_aggregation_min = oai_emulation->mac_config[event.ue].DCI_aggregation_min; - LOG_I(EMU,"DCI_aggregation_min UE %d : \n", event.ue); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_template[0][event.ue].DCI_aggregation_min);*/ - } - } else if(!strcmp((char *) event.key, "DLSCH_dci_size_bits") && event.value!=NULL && validate_mac(event)) { - //Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - //mac_config = (Mac_config *) event.value; - - - LOG_I(EMU,"DLSCH_dci_size_bits update \n"); - - if(event.ue == -1) { - UE_list = &eNB_mac_inst->UE_list; - /* - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - oai_emulation->mac_config[i].DLSCH_dci_size_bits=mac_config[i].DLSCH_dci_size_bits; - UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits; - LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n", i); - LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits); - }*/ - } else { - /* oai_emulation->mac_config[event.ue].DLSCH_dci_size_bits=mac_config[event.ue].DLSCH_dci_size_bits; - UE_list->UE_template[0][event.ue].DLSCH_dci_size_bits = oai_emulation->mac_config[event.ue].DLSCH_dci_size_bits; - LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n", event.ue); - LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][event.ue].DLSCH_dci_size_bits);*/ - } - - } else if(!strcmp((char *) event.key, "ul_bandwidth") && event.value!=NULL) { - - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - int j=0; - - if(event.ue == -1 && event.lcid == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - - - for(j=0; jmac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j]; - UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j]; - LOG_I(EMU,"ul_bandwidth UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]); - } - } - - } - } else { - oai_emulation->mac_config[event.ue].ul_bandwidth[event.lcid]= mac_config[event.ue].ul_bandwidth[event.lcid]; - UE_list->UE_sched_ctrl[event.ue].ul_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].ul_bandwidth[event.lcid]; - LOG_I(EMU,"ul_bandwidth UE %d LCID %d:",event.ue, event.lcid); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].ul_bandwidth[event.lcid]); - } - - } else if(!strcmp((char *) event.key, "dl_bandwidth") && event.value!=NULL && validate_mac(event)) { - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - int j=0; - - if(event.ue == -1 && event.lcid == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - if(event.value + i !=NULL) { - - for(j=0; jmac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j]; - UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j]; - LOG_I(EMU,"dl_bandwidth UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]); - } - } - } - } - } else { - oai_emulation->mac_config[event.ue].dl_bandwidth[event.lcid]= mac_config[event.ue].dl_bandwidth[event.lcid]; - UE_list->UE_sched_ctrl[event.ue].dl_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].dl_bandwidth[event.lcid]; - LOG_I(EMU,"dl_bandwidth UE %d LCID %d:",event.ue, event.lcid); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].dl_bandwidth[event.lcid]); - } - } else if(!strcmp((char *) event.key, "min_ul_bandwidth") && event.value!=NULL) { - - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - int j=0; - - if(event.ue == -1 && event.lcid == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - - - for(j=0; jmac_config[i].min_ul_bandwidth[j]= mac_config[i].min_ul_bandwidth[j]; - UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j] = oai_emulation->mac_config[i].min_ul_bandwidth[j]; - LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j]); - } - } - - } - } else { - oai_emulation->mac_config[event.ue].min_ul_bandwidth[event.lcid]= mac_config[event.ue].min_ul_bandwidth[event.lcid]; - UE_list->UE_sched_ctrl[event.ue].min_ul_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].min_ul_bandwidth[event.lcid]; - LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:",event.ue, event.lcid); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].min_ul_bandwidth[event.lcid]); - } - - } else if(!strcmp((char *) event.key, "min_dl_bandwidth") && event.value!=NULL && validate_mac(event)) { - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - int j=0; - - if(event.ue == -1 && event.lcid == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - if(event.value + i !=NULL) { - - for(j=0; jmac_config[i].min_dl_bandwidth[j]= mac_config[i].min_dl_bandwidth[j]; - UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j] = oai_emulation->mac_config[i].min_dl_bandwidth[j]; - LOG_I(EMU,"min_dl_bandwidth UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j]); - } - } - } - } - } else { - oai_emulation->mac_config[event.ue].min_dl_bandwidth[event.lcid]= mac_config[event.ue].min_dl_bandwidth[event.lcid]; - UE_list->UE_sched_ctrl[event.ue].min_dl_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].min_dl_bandwidth[event.lcid]; - LOG_I(EMU,"min_dl_bandwidth UE %d LCID %d:",event.ue, event.lcid); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].min_dl_bandwidth[event.lcid]); - } - } else if(!strcmp((char *) event.key, "ue_AggregatedMaximumBitrateDL") && event.value!=NULL && validate_mac(event)) { - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - - LOG_I(EMU,"ue_AggregatedMaximumBitrateDL update \n"); - - if(event.ue == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL; - UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL; - LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:\n",event.ue); - LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL); - } - } else { - oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateDL= mac_config[event.ue].ue_AggregatedMaximumBitrateDL; - UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateDL; - LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:\n",event.ue); - LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateDL); - } - - } else if(!strcmp((char *) event.key, "ue_AggregatedMaximumBitrateUL") && event.value!=NULL && validate_mac(event)) { - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - - LOG_I(EMU,"ue_AggregatedMaximumBitrateUL update \n"); - - if(event.ue == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL; - UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL; - LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:\n",i); - LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL); - } - } else { - oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateUL= mac_config[event.ue].ue_AggregatedMaximumBitrateUL; - UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateUL; - LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:\n",event.ue); - LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateUL); - } - - } else if(!strcmp((char *) event.key, "cqiSchedInterval") && event.value!=NULL && validate_mac(event)) { - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - - LOG_I(EMU,"cqiSchedInterval update \n"); - - if(event.ue == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval; - UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval; - LOG_I(EMU,"cqiSchedInterval UE %d:\n", i); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval); - } - } else { - oai_emulation->mac_config[event.ue].cqiSchedInterval= mac_config[event.ue].cqiSchedInterval; - UE_list->UE_sched_ctrl[event.ue].cqiSchedInterval = oai_emulation->mac_config[event.ue].cqiSchedInterval; - LOG_I(EMU,"cqiSchedInterval UE %d:\n", event.ue); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].cqiSchedInterval); - } - } else if(!strcmp((char *) event.key, "mac_ContentionResolutionTimer") && event.value!=NULL && validate_mac(event)) { - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - LOG_I(EMU,"mac_ContentionResolutionTimer update \n"); - - if(event.ue == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer; - UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer; - LOG_I(EMU,"mac_ContentionResolutionTimer UE %d:\n", i); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer); - } - } else { - oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer= mac_config[event.ue].mac_ContentionResolutionTimer; - UE_list->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer = oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer; - LOG_I(EMU,"mac_ContentionResolutionTimer UE %d:\n", event.ue); - LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer); - } - } else if(!strcmp((char *) event.key, "max_allowed_rbs") && event.value!=NULL && validate_mac(event)) { - - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - int j=0; - - if(event.ue == -1 && event.lcid == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - if(event.value + i !=NULL) { - - for(j=0; jmac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j]; - UE_list->UE_sched_ctrl[i].max_rbs_allowed_slice[j][0] = oai_emulation->mac_config[i].max_allowed_rbs[j]; - LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_rbs_allowed_slice[j][0]); - } - } - } - } - } else { - oai_emulation->mac_config[event.ue].max_allowed_rbs[event.lcid]= mac_config[event.ue].max_allowed_rbs[event.lcid]; - UE_list->UE_sched_ctrl[event.ue].max_rbs_allowed_slice[event.lcid][0] = oai_emulation->mac_config[event.ue].max_allowed_rbs[event.lcid]; - LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",event.ue,event.lcid); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].max_rbs_allowed_slice[event.lcid][0]); - } - - } else if(!strcmp((char *) event.key, "max_mcs") && event.value!=NULL && validate_mac(event)) { - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - int j=0; - - if(event.ue == -1 && event.lcid == -1) { - UE_list = &eNB_mac_inst->UE_list; - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - - for(j=0; jmac_config[i].max_mcs[j]= mac_config[i].max_mcs[j]; - UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j]; - LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]); - } - } - - } - } else { - oai_emulation->mac_config[event.ue].max_mcs[event.lcid]= mac_config[event.ue].max_mcs[event.lcid]; - UE_list->UE_sched_ctrl[event.ue].max_mcs[event.lcid] = oai_emulation->mac_config[event.ue].max_mcs[event.lcid]; - LOG_I(EMU,"max_mcs UE %d LCID %d:",event.ue,event.lcid); - LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].max_mcs[event.lcid]); - } - } - } - - -} - -void update_oai_model(char * key, void * value) -{ - -} - -void update_sys_model(Event_t event) -{ - - - printf("\n\n\nA NEW SYS MODEL\n\n\n"); - OAI_Emulation *oai_emulation; - oai_emulation = get_OAI_emulation(); - int i=0; - - if(event.optype == READ) { - if(event.key == NULL) { - LOG_I(EMU,"wall_penetration_loss_dB %G\n",oai_emulation->environment_system_config.wall_penetration_loss_dB); - LOG_I(EMU,"system_bandwidth_MB %G\n",oai_emulation->environment_system_config.system_bandwidth_MB); - LOG_I(EMU,"system_frequency_GHz %G\n",oai_emulation->environment_system_config.system_frequency_GHz); - - //Fading - LOG_I(EMU,"fading.large_scale.selected_option %s\n",oai_emulation->environment_system_config.fading.large_scale.selected_option); - LOG_I(EMU,"fading.large_scale.free_space %d\n",oai_emulation->environment_system_config.fading.large_scale.free_space); - LOG_I(EMU,"fading.large_scale.urban %d\n",oai_emulation->environment_system_config.fading.large_scale.urban); - LOG_I(EMU,"fading.large_scale.rural %d\n",oai_emulation->environment_system_config.fading.large_scale.rural); - - LOG_I(EMU,"fading.small_scale.selected_option %s\n",oai_emulation->environment_system_config.fading.small_scale.selected_option); - LOG_I(EMU,"fading.small_scale.SCM_A %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_A); - LOG_I(EMU,"fading.small_scale.SCM_B %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_B); - LOG_I(EMU,"fading.small_scale.SCM_C %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_C); - LOG_I(EMU,"fading.small_scale.SCM_D %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_D); - LOG_I(EMU,"fading.small_scale.rayleigh_8tap %d\n",oai_emulation->environment_system_config.fading.small_scale.rayleigh_8tap); - LOG_I(EMU,"fading.small_scale.EPA %d\n",oai_emulation->environment_system_config.fading.small_scale.EPA); - LOG_I(EMU,"fading.small_scale.EVA %d\n",oai_emulation->environment_system_config.fading.small_scale.EVA); - LOG_I(EMU,"fading.small_scale.ETU %d\n",oai_emulation->environment_system_config.fading.small_scale.ETU); - - LOG_I(EMU,"shadowing.decorrelation_distance_m %G\n",oai_emulation->environment_system_config.fading.shadowing.decorrelation_distance_m); - LOG_I(EMU,"shadowing.variance_dB %G\n",oai_emulation->environment_system_config.fading.shadowing.variance_dB); - LOG_I(EMU,"shadowing.inter_site_correlation %G\n",oai_emulation->environment_system_config.fading.shadowing.inter_site_correlation); - - LOG_I(EMU,"free_space_model_parameters.pathloss_exponent %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_exponent); - LOG_I(EMU,"free_space_model_parameters.pathloss_0_dB %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_0_dB); - - LOG_I(EMU,"ricean_8tap.rice_factor_dB %d\n",oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB); - - //Antenna - LOG_I(EMU,"antenna.eNB_antenna.number_of_sectors %d\n",oai_emulation->environment_system_config.antenna.eNB_antenna.number_of_sectors); - LOG_I(EMU,"antenna.eNB_antenna.beam_width_dB %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.beam_width_dB); - LOG_I(EMU,"antenna.eNB_antenna.antenna_gain_dBi %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_gain_dBi); - LOG_I(EMU,"antenna.eNB_antenna.tx_power_dBm %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.tx_power_dBm); - LOG_I(EMU,"antenna.eNB_antenna.rx_noise_level_dB %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.rx_noise_level_dB); - - for (i = 0; i<3; i++) { - LOG_I(EMU,"antenna.eNB_antenna.alpha_rad %d %G\n",i,oai_emulation->environment_system_config.antenna.eNB_antenna.alpha_rad[i]); - } - - for (i = 0; i<3; i++) { - LOG_I(EMU,"antenna.eNB_antenna.antenna_orientation_degree %d %G\n",i,oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[i]); - } - - LOG_I(EMU,"antenna.UE_antenna.antenna_gain_dBi %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.antenna_gain_dBi); - LOG_I(EMU,"antenna.UE_antenna.tx_power_dBm %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.tx_power_dBm); - LOG_I(EMU,"antenna.UE_antenna.rx_noise_level_dB %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.rx_noise_level_dB); - } else if(!strcmp((char *) event.key, "wall_penetration_loss_dB")) { - LOG_I(EMU,"wall_penetration_loss_dB %G\n",oai_emulation->environment_system_config.wall_penetration_loss_dB); - } else if(!strcmp((char *) event.key, "system_bandwidth_MB")) { - LOG_I(EMU,"system_bandwidth_MB %G\n",oai_emulation->environment_system_config.system_bandwidth_MB); - } else if(!strcmp((char *) event.key, "system_frequency_GHz")) { - LOG_I(EMU,"system_frequency_GHz %G\n",oai_emulation->environment_system_config.system_frequency_GHz); - } else if(!strcmp((char *) event.key, "fading.large_scale.selected_option")) { - LOG_I(EMU,"fading.large_scale.selected_option %s\n",oai_emulation->environment_system_config.fading.large_scale.selected_option); - } else if(!strcmp((char *) event.key, "fading.large_scale.free_space")) { - LOG_I(EMU,"fading.large_scale.free_space %d\n",oai_emulation->environment_system_config.fading.large_scale.free_space); - } else if(!strcmp((char *) event.key, "fading.large_scale.urban")) { - LOG_I(EMU,"fading.large_scale.urban %d\n",oai_emulation->environment_system_config.fading.large_scale.urban); - } else if(!strcmp((char *) event.key, "fading.large_scale.rural")) { - LOG_I(EMU,"fading.large_scale.rural %d\n",oai_emulation->environment_system_config.fading.large_scale.rural); - } else if(!strcmp((char *) event.key, "fading.small_scale.selected_option")) { - LOG_I(EMU,"fading.small_scale.selected_option %s\n",oai_emulation->environment_system_config.fading.small_scale.selected_option); - } else if(!strcmp((char *) event.key, "fading.small_scale.SCM_A")) { - LOG_I(EMU,"fading.small_scale.SCM_A %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_A); - } else if(!strcmp((char *) event.key, "fading.small_scale.SCM_B")) { - LOG_I(EMU,"fading.small_scale.SCM_B %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_B); - } else if(!strcmp((char *) event.key, "fading.small_scale.SCM_C")) { - LOG_I(EMU,"fading.small_scale.SCM_C %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_C); - } else if(!strcmp((char *) event.key, "fading.small_scale.SCM_D")) { - LOG_I(EMU,"fading.small_scale.SCM_D %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_D); - } else if(!strcmp((char *) event.key, "fading.small_scale.rayleigh_8tap")) { - LOG_I(EMU,"fading.small_scale.rayleigh_8tap %d\n",oai_emulation->environment_system_config.fading.small_scale.rayleigh_8tap); - } else if(!strcmp((char *) event.key, "fading.small_scale.EPA")) { - LOG_I(EMU,"fading.small_scale.EPA %d\n",oai_emulation->environment_system_config.fading.small_scale.EPA); - } else if(!strcmp((char *) event.key, "fading.small_scale.EVA")) { - LOG_I(EMU,"fading.small_scale.EVA %d\n",oai_emulation->environment_system_config.fading.small_scale.EVA); - } else if(!strcmp((char *) event.key, "fading.small_scale.ETU")) { - LOG_I(EMU,"fading.small_scale.ETU %d\n",oai_emulation->environment_system_config.fading.small_scale.ETU); - } else if(!strcmp((char *) event.key, "shadowing.decorrelation_distance_m")) { - LOG_I(EMU,"shadowing.decorrelation_distance_m %G\n",oai_emulation->environment_system_config.fading.shadowing.decorrelation_distance_m); - } else if(!strcmp((char *) event.key, "shadowing.variance_dB")) { - LOG_I(EMU,"shadowing.variance_dB %G\n",oai_emulation->environment_system_config.fading.shadowing.variance_dB); - } else if(!strcmp((char *) event.key, "shadowing.inter_site_correlation")) { - LOG_I(EMU,"shadowing.inter_site_correlation %G\n",oai_emulation->environment_system_config.fading.shadowing.inter_site_correlation); - } else if(!strcmp((char *) event.key, "free_space_model_parameters.pathloss_exponent")) { - LOG_I(EMU,"free_space_model_parameters.pathloss_exponent %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_exponent); - } else if(!strcmp((char *) event.key, "free_space_model_parameters.pathloss_0_dB")) { - LOG_I(EMU,"free_space_model_parameters.pathloss_0_dB %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_0_dB); - } else if(!strcmp((char *) event.key, "ricean_8tap.rice_factor_dB")) { - LOG_I(EMU,"ricean_8tap.rice_factor_dB %d\n",oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB); - } else if(!strcmp((char *) event.key, "antenna.eNB_antenna.number_of_sectors")) { - LOG_I(EMU,"antenna.eNB_antenna.number_of_sectors %d\n",oai_emulation->environment_system_config.antenna.eNB_antenna.number_of_sectors); - } else if(!strcmp((char *) event.key, "antenna.eNB_antenna.beam_width_dB")) { - LOG_I(EMU,"antenna.eNB_antenna.beam_width_dB %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.beam_width_dB); - } else if(!strcmp((char *) event.key, "antenna.eNB_antenna.antenna_gain_dBi")) { - LOG_I(EMU,"antenna.eNB_antenna.antenna_gain_dBi %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_gain_dBi); - } else if(!strcmp((char *) event.key, "antenna.eNB_antenna.tx_power_dBm")) { - LOG_I(EMU,"antenna.eNB_antenna.tx_power_dBm %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.tx_power_dBm); - } else if(!strcmp((char *) event.key, "antenna.eNB_antenna.rx_noise_level_dB")) { - LOG_I(EMU,"antenna.eNB_antenna.rx_noise_level_dB %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.rx_noise_level_dB); - } else if(!strcmp((char *) event.key, "antenna.eNB_antenna.alpha_rad")) { - for (i = 0; i<3; i++) { - LOG_I(EMU,"antenna.eNB_antenna.alpha_rad %d %G\n",i,oai_emulation->environment_system_config.antenna.eNB_antenna.alpha_rad[i]); - } - } else if(!strcmp((char *) event.key, "antenna.eNB_antenna.antenna_orientation_degree")) { - for (i = 0; i<3; i++) { - LOG_I(EMU,"antenna.eNB_antenna.antenna_orientation_degree %d %G\n",i,oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[i]); - } - } else if(!strcmp((char *) event.key, "antenna.UE_antenna.antenna_gain_dBi")) { - LOG_I(EMU,"antenna.UE_antenna.antenna_gain_dBi %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.antenna_gain_dBi); - } else if(!strcmp((char *) event.key, "antenna.UE_antenna.tx_power_dBm")) { - LOG_I(EMU,"antenna.UE_antenna.tx_power_dBm %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.tx_power_dBm); - } else if(!strcmp((char *) event.key, "antenna.UE_antenna.rx_noise_level_dB")) { - LOG_I(EMU,"antenna.UE_antenna.rx_noise_level_dB %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.rx_noise_level_dB); - } - } else if(event.optype == WRITE) { - if(event.key == NULL && event.value!=NULL) { - Environment_System_Config* new_env_config = (Environment_System_Config *) event.value; - oai_emulation->environment_system_config.wall_penetration_loss_dB = new_env_config->wall_penetration_loss_dB; - oai_emulation->environment_system_config.system_bandwidth_MB = new_env_config->system_bandwidth_MB; - oai_emulation->environment_system_config.system_frequency_GHz = new_env_config->system_frequency_GHz; - - //Fading - sprintf(oai_emulation->environment_system_config.fading.large_scale.selected_option,"%s",new_env_config->fading.large_scale.selected_option); - oai_emulation->environment_system_config.fading.large_scale.free_space = new_env_config->fading.large_scale.free_space; - oai_emulation->environment_system_config.fading.large_scale.urban = new_env_config->fading.large_scale.urban; - oai_emulation->environment_system_config.fading.large_scale.rural = new_env_config->fading.large_scale.rural; - - sprintf(oai_emulation->environment_system_config.fading.small_scale.selected_option,"%s",new_env_config->fading.small_scale.selected_option); - oai_emulation->environment_system_config.fading.small_scale.SCM_A = new_env_config->fading.small_scale.SCM_A; - oai_emulation->environment_system_config.fading.small_scale.SCM_B = new_env_config->fading.small_scale.SCM_B; - oai_emulation->environment_system_config.fading.small_scale.SCM_C = new_env_config->fading.small_scale.SCM_C; - oai_emulation->environment_system_config.fading.small_scale.SCM_D = new_env_config->fading.small_scale.SCM_D; - oai_emulation->environment_system_config.fading.small_scale.rayleigh_8tap = new_env_config->fading.small_scale.rayleigh_8tap; - oai_emulation->environment_system_config.fading.small_scale.EPA = new_env_config->fading.small_scale.EPA; - oai_emulation->environment_system_config.fading.small_scale.EVA = new_env_config->fading.small_scale.EVA; - oai_emulation->environment_system_config.fading.small_scale.ETU = new_env_config->fading.small_scale.ETU; - - oai_emulation->environment_system_config.fading.shadowing.decorrelation_distance_m = new_env_config->fading.shadowing.decorrelation_distance_m; - oai_emulation->environment_system_config.fading.shadowing.variance_dB = new_env_config->fading.shadowing.variance_dB; - oai_emulation->environment_system_config.fading.shadowing.inter_site_correlation = new_env_config->fading.shadowing.inter_site_correlation; - - oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_exponent = new_env_config->fading.free_space_model_parameters.pathloss_exponent; - oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_0_dB = new_env_config->fading.free_space_model_parameters.pathloss_0_dB; - - oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB = new_env_config->fading.ricean_8tap.rice_factor_dB; - - //Antenna - oai_emulation->environment_system_config.antenna.eNB_antenna.number_of_sectors = new_env_config->antenna.eNB_antenna.number_of_sectors; - oai_emulation->environment_system_config.antenna.eNB_antenna.beam_width_dB = new_env_config->antenna.eNB_antenna.beam_width_dB; - oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_gain_dBi = new_env_config->antenna.eNB_antenna.antenna_gain_dBi; - oai_emulation->environment_system_config.antenna.eNB_antenna.tx_power_dBm = new_env_config->antenna.eNB_antenna.tx_power_dBm; - oai_emulation->environment_system_config.antenna.eNB_antenna.rx_noise_level_dB = new_env_config->antenna.eNB_antenna.rx_noise_level_dB; - - for (i = 0; i<3; i++) { - oai_emulation->environment_system_config.antenna.eNB_antenna.alpha_rad[i] = new_env_config->antenna.eNB_antenna.alpha_rad[i]; - } - - for (i = 0; i<3; i++) { - oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[i] = new_env_config->antenna.eNB_antenna.antenna_orientation_degree[i]; - } - - oai_emulation->environment_system_config.antenna.UE_antenna.antenna_gain_dBi = new_env_config->antenna.UE_antenna.antenna_gain_dBi; - oai_emulation->environment_system_config.antenna.UE_antenna.tx_power_dBm = new_env_config->antenna.UE_antenna.tx_power_dBm; - oai_emulation->environment_system_config.antenna.UE_antenna.rx_noise_level_dB = new_env_config->antenna.UE_antenna.rx_noise_level_dB; - } - } -} - -void update_topo_model(Event_t event) -{ - - printf("\n\n\nA NEW MOB MODEL\n\n\n"); - OAI_Emulation *oai_emulation; - oai_emulation = get_OAI_emulation(); - - if(event.optype == READ) { - if(event.key == NULL) { - //read all values - LOG_I(EMU,"UE Mobility type %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_mobility_type.selected_option); - LOG_I(EMU,"eNB Mobility type %s\n",oai_emulation->topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option); - LOG_I(EMU,"grid_trip_type %s\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option); - LOG_I(EMU,"UE_moving_dynamics_min_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps); - LOG_I(EMU,"UE_moving_dynamics_min_sleep_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms); - LOG_I(EMU,"UE_moving_dynamics_max_sleep_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms); - LOG_I(EMU,"UE_moving_dynamics_max_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps); - LOG_I(EMU,"UE_moving_dynamics_min_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms); - LOG_I(EMU,"UE_moving_dynamics_max_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms); - LOG_I(EMU,"grid_map_horizontal_grid %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid); - LOG_I(EMU,"grid_map_vertical_grid %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid); - LOG_I(EMU,"UE_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option); - LOG_I(EMU,"random_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes); - LOG_I(EMU,"concentrated_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes); - LOG_I(EMU,"random_grid_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes); - LOG_I(EMU,"border_grid_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes); - LOG_I(EMU,"eNB_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option); - LOG_I(EMU,"random_eNB_distribution_number_of_cells %d\n",oai_emulation->topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells); - LOG_I(EMU,"hexagonal_eNB_distribution_number_of_cells %d\n",oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells); - - LOG_I(EMU,"hexagonal_eNB_distribution_inter_eNB_distance_km %G\n",oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km); - LOG_I(EMU,"grid_eNB_distribution_number_of_grid_x %d\n",oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x); - LOG_I(EMU,"grid_eNB_distribution_number_of_grid_y %d\n",oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y); - - LOG_I(EMU,"trace_config_trace_mobility_file %s\n",oai_emulation->topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file); - LOG_I(EMU,"trace_config_trace_mobility_file %s\n",oai_emulation->topology_config.mobility.UE_mobility.trace_config.trace_mobility_file); - LOG_I(EMU,"sumo_config_command %s\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.command); - LOG_I(EMU,"sumo_config_file %s\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.file); - - LOG_I(EMU,"sumo_config_start %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.start); - LOG_I(EMU,"sumo_config_end %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.end); - LOG_I(EMU,"sumo_config_step %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.step); // 1000ms - LOG_I(EMU,"sumo_config_hport %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hport); - } else if(!strcmp((char *) event.key, "UE_mobility_type")) { - LOG_I(EMU,"UE Mobility type %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_mobility_type.selected_option); - } else if(!strcmp((char *) event.key, "eNB_mobility_type")) { - LOG_I(EMU,"eNB Mobility type %s\n",oai_emulation->topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option); - } else if(!strcmp((char *) event.key, "grid_trip_type")) { - LOG_I(EMU,"grid_trip_type %s\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option); - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_speed_mps")) { - LOG_I(EMU,"UE_moving_dynamics_min_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps); - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_sleep_ms")) { - LOG_I(EMU,"UE_moving_dynamics_min_sleep_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms); - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_sleep_ms")) { - LOG_I(EMU,"UE_moving_dynamics_max_sleep_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms); - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_speed_mps")) { - LOG_I(EMU,"UE_moving_dynamics_max_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps); - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_journey_time_ms")) { - LOG_I(EMU,"UE_moving_dynamics_min_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms); - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_journey_time_ms")) { - LOG_I(EMU,"UE_moving_dynamics_max_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms); - } else if(!strcmp((char *) event.key, "grid_map_horizontal_grid")) { - LOG_I(EMU,"grid_map_horizontal_grid %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid); - } else if(!strcmp((char *) event.key, "grid_map_vertical_grid")) { - LOG_I(EMU,"grid_map_vertical_grid %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid); - } else if(!strcmp((char *) event.key, "UE_initial_distribution_selected_option")) { - LOG_I(EMU,"UE_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option); - } else if(!strcmp((char *) event.key, "random_UE_distribution_number_of_nodes")) { - LOG_I(EMU,"random_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes); - } else if(!strcmp((char *) event.key, "concentrated_UE_distribution_number_of_nodes")) { - LOG_I(EMU,"concentrated_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes); - } else if(!strcmp((char *) event.key, "random_grid_number_of_nodes")) { - LOG_I(EMU,"random_grid_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes); - } else if(!strcmp((char *) event.key, "order_grid_number_of_nodes")) { - LOG_I(EMU,"border_grid_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes); - } else if(!strcmp((char *) event.key, "eNB_initial_distribution_selected_option")) { - LOG_I(EMU,"eNB_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option); - } else if(!strcmp((char *) event.key, "random_eNB_distribution_number_of_cells")) { - LOG_I(EMU,"random_eNB_distribution_number_of_cells %d\n",oai_emulation->topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells); - } else if(!strcmp((char *) event.key, "hexagonal_eNB_distribution_number_of_cells")) { - LOG_I(EMU,"hexagonal_eNB_distribution_number_of_cells %d\n",oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells); - } else if(!strcmp((char *) event.key, "hexagonal_eNB_distribution_inter_eNB_distance_km")) { - LOG_I(EMU,"hexagonal_eNB_distribution_inter_eNB_distance_km %G\n",oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km); - } else if(!strcmp((char *) event.key, "grid_eNB_distribution_number_of_grid_x")) { - LOG_I(EMU,"grid_eNB_distribution_number_of_grid_x %d\n",oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x); - } else if(!strcmp((char *) event.key, "grid_eNB_distribution_number_of_grid_y")) { - LOG_I(EMU,"grid_eNB_distribution_number_of_grid_y %d\n",oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y); - } else if(!strcmp((char *) event.key, "eNB_mobility_trace_config_trace_mobility_file")) { - LOG_I(EMU,"eNB_trace_config_trace_mobility_file %s\n",oai_emulation->topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file); - } else if(!strcmp((char *) event.key, "UE_mobility_trace_config_trace_mobility_file")) { - LOG_I(EMU,"UE_trace_config_trace_mobility_file %s\n",oai_emulation->topology_config.mobility.UE_mobility.trace_config.trace_mobility_file); - } else if(!strcmp((char *) event.key, "sumo_config_command")) { - LOG_I(EMU,"sumo_config_command %s\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.command); - } else if(!strcmp((char *) event.key, "sumo_config_file")) { - LOG_I(EMU,"sumo_config_file %s\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.file); - } else if(!strcmp((char *) event.key, "sumo_config_start")) { - LOG_I(EMU,"sumo_config_start %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.start); - } else if(!strcmp((char *) event.key, "sumo_config_end")) { - LOG_I(EMU,"sumo_config_end %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.end); - } else if(!strcmp((char *) event.key, "sumo_config_step")) { - LOG_I(EMU,"sumo_config_step %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.step); // 1000ms - } else if(!strcmp((char *) event.key, "sumo_config_hport")) { - LOG_I(EMU,"sumo_config_hport %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hport); - } - } else if(event.optype == WRITE && event.value !=NULL) { - Mobility * new_mobility_model = (Mobility *) event.value; - - if(event.key == NULL) { - //global model update - - sprintf(oai_emulation->topology_config.mobility.UE_mobility.UE_mobility_type.selected_option, "%s", new_mobility_model->UE_mobility.UE_mobility_type.selected_option); - oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid = new_mobility_model->UE_mobility.grid_walk.grid_map.horizontal_grid; - oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid = new_mobility_model->UE_mobility.grid_walk.grid_map.vertical_grid; - sprintf(oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option, "%s", new_mobility_model->UE_mobility.grid_walk.grid_trip_type.selected_option); - sprintf(oai_emulation->topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option, "%s", new_mobility_model->UE_mobility.UE_initial_distribution.selected_option); - oai_emulation->topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes = new_mobility_model->UE_mobility.random_UE_distribution.number_of_nodes; - oai_emulation->topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes = new_mobility_model->UE_mobility.concentrated_UE_distribution.number_of_nodes; - oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes = new_mobility_model->UE_mobility.grid_UE_distribution.random_grid.number_of_nodes; - oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes = new_mobility_model->UE_mobility.grid_UE_distribution.border_grid.number_of_nodes; - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps = new_mobility_model->UE_mobility.UE_moving_dynamics.min_speed_mps; - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps = new_mobility_model->UE_mobility.UE_moving_dynamics.max_speed_mps; - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.min_sleep_ms; - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.max_sleep_ms; - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.min_journey_time_ms; - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.max_journey_time_ms; - sprintf(oai_emulation->topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option, "%s", new_mobility_model->eNB_mobility.eNB_mobility_type.selected_option); - sprintf(oai_emulation->topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option, "%s", new_mobility_model->eNB_mobility.eNB_initial_distribution.selected_option); - oai_emulation->topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = new_mobility_model->eNB_mobility.random_eNB_distribution.number_of_cells; - oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells = new_mobility_model->eNB_mobility.hexagonal_eNB_distribution.number_of_cells; - oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km = new_mobility_model->eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km; - oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x = new_mobility_model->eNB_mobility.grid_eNB_distribution.number_of_grid_x; - oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y = new_mobility_model->eNB_mobility.grid_eNB_distribution.number_of_grid_y; - - sprintf(oai_emulation->topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file,"static_1enb.tr"); - sprintf(oai_emulation->topology_config.mobility.UE_mobility.trace_config.trace_mobility_file,"static_2ues.tr"); - sprintf(oai_emulation->topology_config.mobility.UE_mobility.sumo_config.command,"sumo"); - sprintf(oai_emulation->topology_config.mobility.UE_mobility.sumo_config.file,"%s/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg",getenv("OPENAIR2_DIR")); - sprintf(oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hip,"127.0.1.1"); - - oai_emulation->topology_config.mobility.UE_mobility.sumo_config.start = new_mobility_model->UE_mobility.sumo_config.start; - oai_emulation->topology_config.mobility.UE_mobility.sumo_config.end = new_mobility_model->UE_mobility.sumo_config.end; - oai_emulation->topology_config.mobility.UE_mobility.sumo_config.step = new_mobility_model->UE_mobility.sumo_config.step; // 1000ms - oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hport = new_mobility_model->UE_mobility.sumo_config.hport; - } else { - // event.key is not NULL - if(!strcmp((char *) event.key, "UE_mobility_type")) { - sprintf(oai_emulation->topology_config.mobility.UE_mobility.UE_mobility_type.selected_option, "%s", new_mobility_model->UE_mobility.UE_mobility_type.selected_option); - - } else if(!strcmp((char *) event.key, "eNB_mobility_type")) { - sprintf(oai_emulation->topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option, "%s", new_mobility_model->eNB_mobility.eNB_mobility_type.selected_option); - } else if(!strcmp((char *) event.key, "grid_trip_type")) { - sprintf(oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option, "%s", new_mobility_model->UE_mobility.grid_walk.grid_trip_type.selected_option); - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_speed_mps")) { - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps = new_mobility_model->UE_mobility.UE_moving_dynamics.min_speed_mps; - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_sleep_ms")) { - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.min_sleep_ms; - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_sleep_ms")) { - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.max_sleep_ms; - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_speed_mps")) { - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps = new_mobility_model->UE_mobility.UE_moving_dynamics.max_speed_mps; - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_journey_time_ms")) { - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.min_journey_time_ms; - } else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_journey_time_ms")) { - oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.max_journey_time_ms; - } else if(!strcmp((char *) event.key, "grid_map_horizontal_grid")) { - oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid = new_mobility_model->UE_mobility.grid_walk.grid_map.horizontal_grid; - } else if(!strcmp((char *) event.key, "grid_map_vertical_grid")) { - oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid = new_mobility_model->UE_mobility.grid_walk.grid_map.vertical_grid; - } else if(!strcmp((char *) event.key, "UE_initial_distribution_selected_option")) { - sprintf(oai_emulation->topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option, "%s", new_mobility_model->UE_mobility.UE_initial_distribution.selected_option); - } else if(!strcmp((char *) event.key, "random_UE_distribution_number_of_nodes")) { - oai_emulation->topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes = new_mobility_model->UE_mobility.random_UE_distribution.number_of_nodes; - } else if(!strcmp((char *) event.key, "concentrated_UE_distribution_number_of_nodes")) { - oai_emulation->topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes = new_mobility_model->UE_mobility.concentrated_UE_distribution.number_of_nodes; - } else if(!strcmp((char *) event.key, "random_grid_number_of_nodes")) { - oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes = new_mobility_model->UE_mobility.grid_UE_distribution.random_grid.number_of_nodes; - } else if(!strcmp((char *) event.key, "border_grid_number_of_nodes")) { - oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes = new_mobility_model->UE_mobility.grid_UE_distribution.border_grid.number_of_nodes; - } else if(!strcmp((char *) event.key, "eNB_initial_distribution_selected_option")) { - sprintf(oai_emulation->topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option, "%s", new_mobility_model->eNB_mobility.eNB_initial_distribution.selected_option); - } else if(!strcmp((char *) event.key, "random_eNB_distribution_number_of_cells")) { - oai_emulation->topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = new_mobility_model->eNB_mobility.random_eNB_distribution.number_of_cells; - } else if(!strcmp((char *) event.key, "hexagonal_eNB_distribution_number_of_cells")) { - oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells = new_mobility_model->eNB_mobility.hexagonal_eNB_distribution.number_of_cells; - } else if(!strcmp((char *) event.key, "hexagonal_eNB_distribution_inter_eNB_distance_km")) { - oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km = new_mobility_model->eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km; - } else if(!strcmp((char *) event.key, "grid_eNB_distribution_number_of_grid_x")) { - oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x = new_mobility_model->eNB_mobility.grid_eNB_distribution.number_of_grid_x; - } else if(!strcmp((char *) event.key, "grid_eNB_distribution_number_of_grid_y")) { - oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y = new_mobility_model->eNB_mobility.grid_eNB_distribution.number_of_grid_y; - } else if(!strcmp((char *) event.key, "eNB_mobility_trace_config_trace_mobility_file")) { - sprintf(oai_emulation->topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file,"static_1enb.tr"); - } else if(!strcmp((char *) event.key, "UE_mobility_trace_config_trace_mobility_file")) { - sprintf(oai_emulation->topology_config.mobility.UE_mobility.trace_config.trace_mobility_file,"static_2ues.tr"); - } else if(!strcmp((char *) event.key, "sumo_config_command")) { - sprintf(oai_emulation->topology_config.mobility.UE_mobility.sumo_config.command,"sumo"); - } else if(!strcmp((char *) event.key, "sumo_config_file")) { - snprintf( oai_emulation->topology_config.mobility.UE_mobility.sumo_config.file, 256, "%s/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg", getenv("OPENAIR2_DIR") ); - } else if(!strcmp((char *) event.key, "sumo_config_start")) { - oai_emulation->topology_config.mobility.UE_mobility.sumo_config.start = new_mobility_model->UE_mobility.sumo_config.start; - } else if(!strcmp((char *) event.key, "sumo_config_end")) { - oai_emulation->topology_config.mobility.UE_mobility.sumo_config.end = new_mobility_model->UE_mobility.sumo_config.end; - } else if(!strcmp((char *) event.key, "sumo_config_step")) { - oai_emulation->topology_config.mobility.UE_mobility.sumo_config.step = new_mobility_model->UE_mobility.sumo_config.step; - } else if(!strcmp((char *) event.key, "sumo_config_hport")) { - oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hport = new_mobility_model->UE_mobility.sumo_config.hport; - } else if(!strcmp((char *) event.key, "sumo_config.hip")) { - sprintf(oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hip,"127.0.1.1"); - } - } - - } - -} - -void update_app_model(Event_t event) -{ - - - printf("\n\n\nA NEW APP MODEL\n\n\n"); - OAI_Emulation *oai_emulation; - oai_emulation = get_OAI_emulation(); - int i=0; - - if(event.optype == READ) { - if(event.key == NULL) { - //print all values - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"predefined_traffic.source_id %d: %s\n",i,oai_emulation->application_config.predefined_traffic.source_id[i]); - LOG_I(EMU,"predefined_traffic.background %d %s\n",i,oai_emulation->application_config.predefined_traffic.background[i]); - LOG_I(EMU,"predefined_traffic.aggregation_level %d %d\n",i,oai_emulation->application_config.predefined_traffic.aggregation_level[i]); - - if(oai_emulation->application_config.predefined_traffic.destination_id[i]!=NULL) - LOG_I(EMU,"predefined_traffic.destination_id %d %s\n",i,oai_emulation->application_config.predefined_traffic.destination_id[i]); - - if(oai_emulation->application_config.customized_traffic.source_id[i]!=NULL) - LOG_I(EMU,"customized_traffic.source_id %d %s\n",i,oai_emulation->application_config.customized_traffic.source_id[i]); - - if(oai_emulation->application_config.customized_traffic.destination_id[i]!=NULL) - LOG_I(EMU,"customized_traffic.destination_id %d %s\n",i,oai_emulation->application_config.customized_traffic.destination_id[i]); - - if(oai_emulation->application_config.customized_traffic.transport_protocol[i]!=NULL) - LOG_I(EMU,"customized_traffic.transport_protocol %d %s\n",i,oai_emulation->application_config.customized_traffic.transport_protocol[i]); - - if(oai_emulation->application_config.customized_traffic.background[i]!=NULL) - LOG_I(EMU,"customized_traffic.background %d %s\n",i,oai_emulation->application_config.customized_traffic.background[i]); - - if(oai_emulation->application_config.customized_traffic.ip_version[i]!=NULL) - LOG_I(EMU,"customized_traffic.ip_version %d %s\n",i,oai_emulation->application_config.customized_traffic.ip_version[i]); - - LOG_I(EMU,"customized_traffic.aggregation_level %d %d\n",i,oai_emulation->application_config.customized_traffic.aggregation_level[i]); - - if(oai_emulation->application_config.customized_traffic.idt_dist[i]!=NULL) - LOG_I(EMU,"customized_traffic.idt_dist %d %s\n",i,oai_emulation->application_config.customized_traffic.idt_dist[i]); - - LOG_I(EMU,"customized_traffic.idt_min_ms %d %d\n",i,oai_emulation->application_config.customized_traffic.idt_min_ms[i]); - LOG_I(EMU,"customized_traffic.idt_max_ms %d %d\n",i,oai_emulation->application_config.customized_traffic.idt_max_ms[i]); - LOG_I(EMU,"customized_traffic.idt_standard_deviation %d %G\n",i,oai_emulation->application_config.customized_traffic.idt_standard_deviation[i]); - LOG_I(EMU,"customized_traffic.idt_lambda %d %G\n",i,oai_emulation->application_config.customized_traffic.idt_lambda[i]); - LOG_I(EMU,"customized_traffic.size_dist %d %s\n",i,oai_emulation->application_config.customized_traffic.size_dist[i]); - LOG_I(EMU,"customized_traffic.size_min_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_min_byte[i]);// - LOG_I(EMU,"customized_traffic.size_max_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_max_byte[i]);// - LOG_I(EMU,"customized_traffic.size_standard_deviation %d %G\n",i,oai_emulation->application_config.customized_traffic.size_standard_deviation[i]);// - LOG_I(EMU,"customized_traffic.size_lambda %d %G\n",i,oai_emulation->application_config.customized_traffic.size_lambda[i]); - LOG_I(EMU,"ustomized_traffic.stream %d %d\n",i,oai_emulation->application_config.customized_traffic.stream[i]); - LOG_I(EMU,"customized_traffic.destination_port %d %d\n",i,oai_emulation->application_config.customized_traffic.destination_port[i]); - LOG_I(EMU,"customized_traffic.prob_off_pu %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_pu[i]); - LOG_I(EMU,"customized_traffic.prob_off_ed %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_ed[i]); - LOG_I(EMU,"customized_traffic.prob_off_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_pe[i]); - LOG_I(EMU,"customized_traffic.prob_pu_ed %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_pu_ed[i]);// - LOG_I(EMU,"customized_traffic.prob_pu_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_pu_pe[i]); - LOG_I(EMU,"customized_traffic.prob_ed_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_ed_pe[i]); - LOG_I(EMU,"customized_traffic.prob_ed_pu %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_ed_pu[i]); - LOG_I(EMU,"customized_traffic.holding_time_off_ed %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_ed[i]); - LOG_I(EMU,"customized_traffic.holding_time_off_pu %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_pu[i]); - LOG_I(EMU,"customized_traffic.holding_time_off_pe %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_pe[i]); - LOG_I(EMU,"customized_traffic.holding_time_pe_off %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_pe_off[i]); - LOG_I(EMU,"customized_traffic.pu_size_pkts %d %d\n",i,oai_emulation->application_config.customized_traffic.pu_size_pkts[i]); - LOG_I(EMU,"customized_traffic.ed_size_pkts %d %d\n",i,oai_emulation->application_config.customized_traffic.ed_size_pkts[i]); - - } - } else if(!strcmp((char *) event.key, "predefined_traffic.source_id")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"predefined_traffic.source_id %d: %s\n",i,oai_emulation->application_config.predefined_traffic.source_id[i]); - } - } else if(!strcmp((char *) event.key, "predefined_traffic.background")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"predefined_traffic.background %d %s\n",i,oai_emulation->application_config.predefined_traffic.background[i]); - } - } else if(!strcmp((char *) event.key, "predefined_traffic.aggregation_level")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"predefined_traffic.aggregation_level %d %d\n",i,oai_emulation->application_config.predefined_traffic.aggregation_level[i]); - } - } else if(!strcmp((char *) event.key, "predefined_traffic.destination_id")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.predefined_traffic.destination_id[i]!=NULL) - LOG_I(EMU,"predefined_traffic.destination_id %d %s\n",i,oai_emulation->application_config.predefined_traffic.destination_id[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.source_id")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.source_id[i]!=NULL) - LOG_I(EMU,"customized_traffic.source_id %d %s\n",i,oai_emulation->application_config.customized_traffic.source_id[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.destination_id")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.destination_id[i]!=NULL) - LOG_I(EMU,"customized_traffic.destination_id %d %s\n",i,oai_emulation->application_config.customized_traffic.destination_id[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.transport_protocol")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.transport_protocol[i]!=NULL) - LOG_I(EMU,"customized_traffic.transport_protocol %d %s\n",i,oai_emulation->application_config.customized_traffic.transport_protocol[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.background")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.background[i]!=NULL) - LOG_I(EMU,"customized_traffic.background %d %s\n",i,oai_emulation->application_config.customized_traffic.background[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.ip_version")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.ip_version[i]!=NULL) - LOG_I(EMU,"customized_traffic.ip_version %d %s\n",i,oai_emulation->application_config.customized_traffic.ip_version[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.aggregation_level")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.aggregation_level %d %d\n",i,oai_emulation->application_config.customized_traffic.aggregation_level[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_dist")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.idt_dist[i]!=NULL) - LOG_I(EMU,"customized_traffic.idt_dist %d %s\n",i,oai_emulation->application_config.customized_traffic.idt_dist[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_min_ms")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.idt_min_ms %d %d\n",i,oai_emulation->application_config.customized_traffic.idt_min_ms[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_max_ms")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.idt_max_ms %d %d\n",i,oai_emulation->application_config.customized_traffic.idt_max_ms[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_standard_deviation")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.idt_standard_deviation %d %G\n",i,oai_emulation->application_config.customized_traffic.idt_standard_deviation[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_lambda")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.idt_lambda %d %G\n",i,oai_emulation->application_config.customized_traffic.idt_lambda[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_dist")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.size_dist %d %s\n",i,oai_emulation->application_config.customized_traffic.size_dist[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_min_byte")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.size_min_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_min_byte[i]);// - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_min_byte")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.size_min_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_min_byte[i]);// - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_max_byte")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.size_max_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_max_byte[i]);// - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_standard_deviation")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.size_standard_deviation %d %G\n",i,oai_emulation->application_config.customized_traffic.size_standard_deviation[i]);// - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_lambda")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.size_lambda %d %G\n",i,oai_emulation->application_config.customized_traffic.size_lambda[i]); - } - } else if(!strcmp((char *) event.key, "ustomized_traffic.stream")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"ustomized_traffic.stream %d %d\n",i,oai_emulation->application_config.customized_traffic.stream[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.destination_port")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.destination_port %d %d\n",i,oai_emulation->application_config.customized_traffic.destination_port[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_off_pu")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.prob_off_pu %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_pu[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_off_ed")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.prob_off_ed %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_ed[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_off_pe")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.prob_off_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_pe[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_pu_ed")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.prob_pu_ed %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_pu_ed[i]);// - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_pu_pe")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.prob_pu_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_pu_pe[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_ed_pe")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.prob_ed_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_ed_pe[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_ed_pu")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.prob_ed_pu %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_ed_pu[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_ed")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.holding_time_off_ed %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_ed[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_pu")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.holding_time_off_pu %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_pu[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_pe")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.holding_time_off_pe %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_pe[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.holding_time_pe_off")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.holding_time_pe_off %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_pe_off[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.pu_size_pkts")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.pu_size_pkts %d %d\n",i,oai_emulation->application_config.customized_traffic.pu_size_pkts[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.ed_size_pkts")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - LOG_I(EMU,"customized_traffic.ed_size_pkts %d %d\n",i,oai_emulation->application_config.customized_traffic.ed_size_pkts[i]); - } - } - } else if(event.optype == WRITE && event.value!=NULL) { - Application_Config * new_app_config = (Application_Config *) event.value; - - if(event.key == NULL) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - sprintf(oai_emulation->application_config.predefined_traffic.source_id[i],"%s",new_app_config->predefined_traffic.source_id[i]); - // LOG_I(EMU,"predefined_traffic.application_type %d: %s\n",i,oai_emulation->application_config.predefined_traffic.application_type[i]); - sprintf(oai_emulation->application_config.predefined_traffic.background[i],"%s",new_app_config->predefined_traffic.background[i]); - oai_emulation->application_config.predefined_traffic.aggregation_level[i] = new_app_config->predefined_traffic.aggregation_level[i]; - - if(oai_emulation->application_config.predefined_traffic.destination_id[i]!=NULL) - sprintf(oai_emulation->application_config.predefined_traffic.destination_id[i],"%s",new_app_config->predefined_traffic.destination_id[i]); - - if(oai_emulation->application_config.customized_traffic.source_id[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.source_id[i],"%s",new_app_config->customized_traffic.source_id[i]); - - if(oai_emulation->application_config.customized_traffic.destination_id[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.destination_id[i],"%s",new_app_config->customized_traffic.destination_id[i]); - - if(oai_emulation->application_config.customized_traffic.transport_protocol[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.transport_protocol[i],"%s",new_app_config->customized_traffic.transport_protocol[i]); - - if(oai_emulation->application_config.customized_traffic.background[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.background[i],"%s",new_app_config->customized_traffic.background[i]); - - if(oai_emulation->application_config.customized_traffic.ip_version[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.ip_version[i],"%s",new_app_config->customized_traffic.ip_version[i]); - - oai_emulation->application_config.customized_traffic.aggregation_level[i] = new_app_config->customized_traffic.aggregation_level[i]; - - if(oai_emulation->application_config.customized_traffic.idt_dist[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.idt_dist[i],"%s",new_app_config->customized_traffic.idt_dist[i]); - - oai_emulation->application_config.customized_traffic.idt_min_ms[i] = new_app_config->customized_traffic.idt_min_ms[i]; - oai_emulation->application_config.customized_traffic.idt_max_ms[i] = new_app_config->customized_traffic.idt_max_ms[i]; - oai_emulation->application_config.customized_traffic.idt_standard_deviation[i] = new_app_config->customized_traffic.idt_standard_deviation[i]; - oai_emulation->application_config.customized_traffic.idt_lambda[i] = new_app_config->customized_traffic.idt_lambda[i]; - sprintf(oai_emulation->application_config.customized_traffic.size_dist[i],"%s",new_app_config->customized_traffic.size_dist[i]); - oai_emulation->application_config.customized_traffic.size_min_byte[i] = new_app_config->customized_traffic.size_min_byte[i];// - oai_emulation->application_config.customized_traffic.size_max_byte[i] = new_app_config->customized_traffic.size_max_byte[i];// - oai_emulation->application_config.customized_traffic.size_standard_deviation[i] = new_app_config->customized_traffic.size_standard_deviation[i];// - oai_emulation->application_config.customized_traffic.size_lambda[i] = new_app_config->customized_traffic.size_lambda[i]; - oai_emulation->application_config.customized_traffic.stream[i] = new_app_config->customized_traffic.stream[i]; - oai_emulation->application_config.customized_traffic.destination_port[i] = new_app_config->customized_traffic.destination_port[i]; - oai_emulation->application_config.customized_traffic.prob_off_pu[i] = new_app_config->customized_traffic.prob_off_pu[i]; - oai_emulation->application_config.customized_traffic.prob_off_ed[i] = new_app_config->customized_traffic.prob_off_ed[i]; - oai_emulation->application_config.customized_traffic.prob_off_pe[i] = new_app_config->customized_traffic.prob_off_pe[i]; - oai_emulation->application_config.customized_traffic.prob_pu_ed[i] = new_app_config->customized_traffic.prob_pu_ed[i];// - oai_emulation->application_config.customized_traffic.prob_pu_pe[i] = new_app_config->customized_traffic.prob_pu_pe[i]; - oai_emulation->application_config.customized_traffic.prob_ed_pe[i] = new_app_config->customized_traffic.prob_ed_pe[i]; - oai_emulation->application_config.customized_traffic.prob_ed_pu[i] = new_app_config->customized_traffic.prob_ed_pu[i]; - oai_emulation->application_config.customized_traffic.holding_time_off_ed[i] = new_app_config->customized_traffic.holding_time_off_ed[i]; - oai_emulation->application_config.customized_traffic.holding_time_off_pu[i] = new_app_config->customized_traffic.holding_time_off_pu[i]; - oai_emulation->application_config.customized_traffic.holding_time_off_pe[i] = new_app_config->customized_traffic.holding_time_off_pe[i]; - oai_emulation->application_config.customized_traffic.holding_time_pe_off[i] = new_app_config->customized_traffic.holding_time_pe_off[i]; - oai_emulation->application_config.customized_traffic.pu_size_pkts[i] = new_app_config->customized_traffic.pu_size_pkts[i]; - oai_emulation->application_config.customized_traffic.ed_size_pkts[i] = new_app_config->customized_traffic.ed_size_pkts[i]; - - } - - } else if(!strcmp((char *) event.key, "predefined_traffic.source_id")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - sprintf(oai_emulation->application_config.predefined_traffic.source_id[i],"%s",new_app_config->predefined_traffic.source_id[i]); - } - } else if(!strcmp((char *) event.key, "predefined_traffic.background")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - sprintf(oai_emulation->application_config.predefined_traffic.background[i],"%s",new_app_config->predefined_traffic.background[i]); - } - } else if(!strcmp((char *) event.key, "predefined_traffic.aggregation_level")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.predefined_traffic.aggregation_level[i] = new_app_config->predefined_traffic.aggregation_level[i]; - } - } else if(!strcmp((char *) event.key, "predefined_traffic.destination_id")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.predefined_traffic.destination_id[i]!=NULL) - sprintf(oai_emulation->application_config.predefined_traffic.destination_id[i],"%s",new_app_config->predefined_traffic.destination_id[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.source_id")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.source_id[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.source_id[i],"%s",new_app_config->customized_traffic.source_id[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.destination_id")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.destination_id[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.destination_id[i],"%s",new_app_config->customized_traffic.destination_id[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.transport_protocol")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.transport_protocol[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.transport_protocol[i],"%s",new_app_config->customized_traffic.transport_protocol[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.background")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.background[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.background[i],"%s",new_app_config->customized_traffic.background[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.ip_version")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.ip_version[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.ip_version[i],"%s",*((char **) event.value)); - } - } else if(!strcmp((char *) event.key, "customized_traffic.aggregation_level")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.aggregation_level[i] = new_app_config->customized_traffic.aggregation_level[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_dist")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - if(oai_emulation->application_config.customized_traffic.idt_dist[i]!=NULL) - sprintf(oai_emulation->application_config.customized_traffic.idt_dist[i],"%s",new_app_config->customized_traffic.idt_dist[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_min_ms")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.idt_min_ms[i] = new_app_config->customized_traffic.idt_min_ms[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_max_ms")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.idt_max_ms[i] = new_app_config->customized_traffic.idt_max_ms[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_standard_deviation")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.idt_standard_deviation[i] = new_app_config->customized_traffic.idt_standard_deviation[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.idt_lambda")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.idt_lambda[i] = new_app_config->customized_traffic.idt_lambda[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_dist")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - sprintf(oai_emulation->application_config.customized_traffic.size_dist[i],"%s",new_app_config->customized_traffic.size_dist[i]); - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_min_byte")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.size_min_byte[i] = new_app_config->customized_traffic.size_min_byte[i];// - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_max_byte")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.size_max_byte[i] = new_app_config->customized_traffic.size_max_byte[i];// - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_standard_deviation")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.size_standard_deviation[i] = new_app_config->customized_traffic.size_standard_deviation[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.size_lambda")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.size_lambda[i] = new_app_config->customized_traffic.size_lambda[i]; - } - } else if(!strcmp((char *) event.key, "ustomized_traffic.stream")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.stream[i] = new_app_config->customized_traffic.stream[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.destination_port")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.destination_port[i] = new_app_config->customized_traffic.destination_port[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_off_pu")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.prob_off_pu[i] = new_app_config->customized_traffic.prob_off_pu[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_off_ed")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.prob_off_ed[i] = new_app_config->customized_traffic.prob_off_ed[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_off_pe")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.prob_off_pe[i] = new_app_config->customized_traffic.prob_off_pe[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_pu_ed")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.prob_pu_ed[i] = new_app_config->customized_traffic.prob_pu_ed[i];// - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_pu_pe")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.prob_pu_pe[i] = new_app_config->customized_traffic.prob_pu_pe[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_ed_pe")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.prob_ed_pe[i] = new_app_config->customized_traffic.prob_ed_pe[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.prob_ed_pu")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.prob_ed_pu[i] = new_app_config->customized_traffic.prob_ed_pu[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_ed")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.holding_time_off_ed[i] = new_app_config->customized_traffic.holding_time_off_ed[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_pu")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.holding_time_off_pu[i] = new_app_config->customized_traffic.holding_time_off_pu[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_pe")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.holding_time_off_pe[i] = new_app_config->customized_traffic.holding_time_off_pe[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.holding_time_pe_off")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.holding_time_pe_off[i] = new_app_config->customized_traffic.holding_time_pe_off[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.pu_size_pkts")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.pu_size_pkts[i] = new_app_config->customized_traffic.pu_size_pkts[i]; - } - } else if(!strcmp((char *) event.key, "customized_traffic.ed_size_pkts")) { - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation->application_config.customized_traffic.ed_size_pkts[i] = new_app_config->customized_traffic.ed_size_pkts[i]; - } - } - - } -} - -void update_emu_model(Event_t event) -{ - // Emulation_Config emulation_config; /*!< \brief Emulation configuration */ - - - printf("\n\n\nA NEW EMU MODEL\n\n\n"); - OAI_Emulation *oai_emulation; - oai_emulation = get_OAI_emulation(); - - if(event.optype == READ) { - if(event.key == NULL) { - LOG_I(EMU,"emulation_time_ms %G\n",oai_emulation->emulation_config.emulation_time_ms); - LOG_I(EMU,"curve %s\n",oai_emulation->emulation_config.curve); - LOG_I(EMU,"brackground_stats %s\n",oai_emulation->emulation_config.background_stats); - - //performance metrics - LOG_I(EMU,"performance_metrics.throughput %s\n",oai_emulation->emulation_config.performance_metrics.throughput); - LOG_I(EMU,"performance_metrics.latency %s\n",oai_emulation->emulation_config.performance_metrics.latency); - LOG_I(EMU,"performance_metrics.loss_rate %s\n",oai_emulation->emulation_config.performance_metrics.loss_rate); - LOG_I(EMU,"performance_metrics.owd_radio_access %s\n",oai_emulation->emulation_config.performance_metrics.owd_radio_access); - LOG_I(EMU,"performance_metrics.signalling_overhead %d\n",oai_emulation->emulation_config.performance_metrics.signalling_overhead); - - //Layer - LOG_I(EMU,"layer.phy %d\n",oai_emulation->emulation_config.layer.phy); - LOG_I(EMU,"layer.mac %d\n",oai_emulation->emulation_config.layer.mac); - LOG_I(EMU,"layer.rlc %d\n",oai_emulation->emulation_config.layer.rlc); - LOG_I(EMU,"layer.rrc %d\n",oai_emulation->emulation_config.layer.rrc); - LOG_I(EMU,"layer.pdcp %d\n",oai_emulation->emulation_config.layer.pdcp); - LOG_I(EMU,"layer.omg %d\n",oai_emulation->emulation_config.layer.omg); - LOG_I(EMU,"layer.emu %d\n",oai_emulation->emulation_config.layer.emu); - LOG_I(EMU,"layer.otg %d\n",oai_emulation->emulation_config.layer.otg); - - //Log_emu - LOG_I(EMU,"log_emu.level %s\n",oai_emulation->emulation_config.log_emu.level); - LOG_I(EMU,"log_emu.verbosity %s\n",oai_emulation->emulation_config.log_emu.verbosity); - LOG_I(EMU,"log_emu.interval %d\n",oai_emulation->emulation_config.log_emu.interval); - - //Packet_trace - LOG_I(EMU,"packet_trace.enabled %d\n",oai_emulation->emulation_config.packet_trace.enabled); - LOG_I(EMU,"packet_trace.start_time %u\n",oai_emulation->emulation_config.packet_trace.start_time); - LOG_I(EMU,"packet_trace.end_time %u\n",oai_emulation->emulation_config.packet_trace.end_time); - - //Seed - LOG_I(EMU,"seed.value %d\n",oai_emulation->emulation_config.seed.value); - - } else if (!strcmp((char *) event.key, "emulation_time_ms")) { - LOG_I(EMU,"emulation_time_ms %G\n",oai_emulation->emulation_config.emulation_time_ms); - } else if (!strcmp((char *) event.key, "curve")) { - LOG_I(EMU,"curve %s\n",oai_emulation->emulation_config.curve); - } else if (!strcmp((char *) event.key, "brackground_stats")) { - LOG_I(EMU,"brackground_stats %s\n",oai_emulation->emulation_config.background_stats); - } else if (!strcmp((char *) event.key, "performance_metrics.throughput")) { - LOG_I(EMU,"performance_metrics.throughput %s\n",oai_emulation->emulation_config.performance_metrics.throughput); - } else if (!strcmp((char *) event.key, "performance_metrics.latency")) { - LOG_I(EMU,"performance_metrics.latency %s\n",oai_emulation->emulation_config.performance_metrics.latency); - } else if (!strcmp((char *) event.key, "performance_metrics.loss_rate")) { - LOG_I(EMU,"performance_metrics.loss_rate %s\n",oai_emulation->emulation_config.performance_metrics.loss_rate); - } else if (!strcmp((char *) event.key, "performance_metrics.owd_radio_access")) { - LOG_I(EMU,"performance_metrics.owd_radio_access %s\n",oai_emulation->emulation_config.performance_metrics.owd_radio_access); - } else if (!strcmp((char *) event.key, "performance_metrics.signalling_overhead")) { - LOG_I(EMU,"performance_metrics.signalling_overhead %d\n",oai_emulation->emulation_config.performance_metrics.signalling_overhead); - } else if (!strcmp((char *) event.key, "layer.phy")) { - LOG_I(EMU,"layer.phy %d\n",oai_emulation->emulation_config.layer.phy); - } else if (!strcmp((char *) event.key, "layer.mac")) { - LOG_I(EMU,"layer.mac %d\n",oai_emulation->emulation_config.layer.mac); - } else if (!strcmp((char *) event.key, "layer.rlc")) { - LOG_I(EMU,"layer.rlc %d\n",oai_emulation->emulation_config.layer.rlc); - } else if (!strcmp((char *) event.key, "layer.rrc")) { - LOG_I(EMU,"layer.rrc %d\n",oai_emulation->emulation_config.layer.rrc); - } else if (!strcmp((char *) event.key, "layer.pdcp")) { - LOG_I(EMU,"layer.pdcp %d\n",oai_emulation->emulation_config.layer.pdcp); - } else if (!strcmp((char *) event.key, "layer.omg")) { - LOG_I(EMU,"layer.omg %d\n",oai_emulation->emulation_config.layer.omg); - } else if (!strcmp((char *) event.key, "layer.emu")) { - LOG_I(EMU,"layer.emu %d\n",oai_emulation->emulation_config.layer.emu); - } else if (!strcmp((char *) event.key, "layer.otg")) { - LOG_I(EMU,"layer.otg %d\n",oai_emulation->emulation_config.layer.otg); - } else if (!strcmp((char *) event.key, "log_emu.level")) { - LOG_I(EMU,"log_emu.level %s\n",oai_emulation->emulation_config.log_emu.level); - } else if (!strcmp((char *) event.key, "log_emu.verbosity")) { - LOG_I(EMU,"log_emu.verbosity %s\n",oai_emulation->emulation_config.log_emu.verbosity); - } else if (!strcmp((char *) event.key, "log_emu.interval")) { - LOG_I(EMU,"log_emu.interval %d\n",oai_emulation->emulation_config.log_emu.interval); - } else if (!strcmp((char *) event.key, "packet_trace.enabled")) { - LOG_I(EMU,"packet_trace.enabled %d\n",oai_emulation->emulation_config.packet_trace.enabled); - } else if (!strcmp((char *) event.key, "packet_trace.start_time")) { - LOG_I(EMU,"packet_trace.start_time %u\n",oai_emulation->emulation_config.packet_trace.start_time); - } else if (!strcmp((char *) event.key, "packet_trace.end_time")) { - LOG_I(EMU,"packet_trace.end_time %u\n",oai_emulation->emulation_config.packet_trace.end_time); - } else if (!strcmp((char *) event.key, "customized_traffic_ed_size_pkts")) { - LOG_I(EMU,"seed.value %d\n",oai_emulation->emulation_config.seed.value); - } - } else if(event.optype == WRITE && event.value!=NULL) { - Emulation_Config * new_emu_config = (Emulation_Config *) event.value; - - if(event.key==NULL) { - //update all parameters - - oai_emulation->emulation_config.emulation_time_ms = new_emu_config->emulation_time_ms; - sprintf(oai_emulation->emulation_config.curve,"%s",new_emu_config->curve); - sprintf(oai_emulation->emulation_config.background_stats,"%s",new_emu_config->background_stats); - - //performance metrics - sprintf(oai_emulation->emulation_config.performance_metrics.throughput,"%s",new_emu_config->performance_metrics.throughput); - sprintf(oai_emulation->emulation_config.performance_metrics.latency,"%s",new_emu_config->performance_metrics.latency); - sprintf(oai_emulation->emulation_config.performance_metrics.loss_rate,"%s",new_emu_config->performance_metrics.loss_rate); - sprintf(oai_emulation->emulation_config.performance_metrics.owd_radio_access,"%s",new_emu_config->performance_metrics.owd_radio_access); - oai_emulation->emulation_config.performance_metrics.signalling_overhead = new_emu_config->performance_metrics.signalling_overhead; - - //Layer - oai_emulation->emulation_config.layer.phy = new_emu_config->layer.phy; - oai_emulation->emulation_config.layer.mac = new_emu_config->layer.mac; - oai_emulation->emulation_config.layer.rlc = new_emu_config->layer.rlc; - oai_emulation->emulation_config.layer.rrc = new_emu_config->layer.rrc; - oai_emulation->emulation_config.layer.pdcp = new_emu_config->layer.pdcp; - oai_emulation->emulation_config.layer.omg = new_emu_config->layer.omg; - oai_emulation->emulation_config.layer.emu = new_emu_config->layer.emu; - oai_emulation->emulation_config.layer.otg = new_emu_config->layer.otg; - - //Log_emu - sprintf(oai_emulation->emulation_config.log_emu.level,"%s",new_emu_config->log_emu.level); - sprintf(oai_emulation->emulation_config.log_emu.verbosity,"%s",new_emu_config->log_emu.verbosity); - oai_emulation->emulation_config.log_emu.interval = new_emu_config->log_emu.interval; - - //Packet_trace - oai_emulation->emulation_config.packet_trace.enabled = new_emu_config->packet_trace.enabled ; - oai_emulation->emulation_config.packet_trace.start_time = new_emu_config->packet_trace.start_time; - oai_emulation->emulation_config.packet_trace.end_time = new_emu_config->packet_trace.end_time; - - //Seed - oai_emulation->emulation_config.seed.value = new_emu_config->packet_trace.end_time; - } else if(event.key != NULL) { - - if (!strcmp((char *) event.key, "emulation_time_ms")) { - oai_emulation->emulation_config.emulation_time_ms = new_emu_config->emulation_time_ms; - } else if (!strcmp((char *) event.key, "curve")) { - sprintf(oai_emulation->emulation_config.curve,"%s",new_emu_config->curve); - } else if (!strcmp((char *) event.key, "brackground_stats")) { - sprintf(oai_emulation->emulation_config.background_stats,"%s",new_emu_config->background_stats); - } else if (!strcmp((char *) event.key, "performance_metrics.throughput")) { - sprintf(oai_emulation->emulation_config.performance_metrics.throughput,"%s",new_emu_config->performance_metrics.throughput); - } else if (!strcmp((char *) event.key, "performance_metrics.latency")) { - sprintf(oai_emulation->emulation_config.performance_metrics.latency,"%s",new_emu_config->performance_metrics.latency); - } else if (!strcmp((char *) event.key, "performance_metrics.loss_rate")) { - sprintf(oai_emulation->emulation_config.performance_metrics.loss_rate,"%s",new_emu_config->performance_metrics.loss_rate); - } else if (!strcmp((char *) event.key, "performance_metrics.owd_radio_access")) { - sprintf(oai_emulation->emulation_config.performance_metrics.owd_radio_access,"%s",new_emu_config->performance_metrics.owd_radio_access); - } else if (!strcmp((char *) event.key, "performance_metrics.signalling_overhead")) { - oai_emulation->emulation_config.performance_metrics.signalling_overhead = new_emu_config->performance_metrics.signalling_overhead; - } else if (!strcmp((char *) event.key, "layer.phy")) { - oai_emulation->emulation_config.layer.phy = new_emu_config->layer.phy; - } else if (!strcmp((char *) event.key, "layer.mac")) { - oai_emulation->emulation_config.layer.mac = new_emu_config->layer.mac; - } else if (!strcmp((char *) event.key, "layer.rlc")) { - oai_emulation->emulation_config.layer.rlc = new_emu_config->layer.rlc; - } else if (!strcmp((char *) event.key, "layer.rrc")) { - oai_emulation->emulation_config.layer.rrc = new_emu_config->layer.rrc; - } else if (!strcmp((char *) event.key, "layer.pdcp")) { - oai_emulation->emulation_config.layer.pdcp = new_emu_config->layer.pdcp; - } else if (!strcmp((char *) event.key, "layer.omg")) { - oai_emulation->emulation_config.layer.omg = new_emu_config->layer.omg; - } else if (!strcmp((char *) event.key, "layer.emu")) { - oai_emulation->emulation_config.layer.emu = new_emu_config->layer.emu; - } else if (!strcmp((char *) event.key, "layer.otg")) { - oai_emulation->emulation_config.layer.otg = new_emu_config->layer.otg; - } else if (!strcmp((char *) event.key, "log_emu.level")) { - sprintf(oai_emulation->emulation_config.log_emu.level,"%s",new_emu_config->log_emu.level); - } else if (!strcmp((char *) event.key, "log_emu.verbosity")) { - sprintf(oai_emulation->emulation_config.log_emu.verbosity,"%s",new_emu_config->log_emu.verbosity); - } else if (!strcmp((char *) event.key, "log_emu.interval")) { - oai_emulation->emulation_config.log_emu.interval = new_emu_config->log_emu.interval; - } else if (!strcmp((char *) event.key, "packet_trace.enabled")) { - oai_emulation->emulation_config.packet_trace.enabled = new_emu_config->packet_trace.enabled ; - } else if (!strcmp((char *) event.key, "packet_trace.start_time")) { - oai_emulation->emulation_config.packet_trace.start_time = new_emu_config->packet_trace.start_time; - } else if (!strcmp((char *) event.key, "packet_trace.end_time")) { - oai_emulation->emulation_config.packet_trace.end_time = new_emu_config->packet_trace.end_time; - } else if (!strcmp((char *) event.key, "customized_traffic_ed_size_pkts")) { - oai_emulation->emulation_config.seed.value = new_emu_config->packet_trace.end_time; - } - } - } - -} - - -int validate_mac(Event_t event) -{ - int i=0; - - if(event.key ==NULL && event.value!=NULL) { - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - - if(event.ue == -1 && event.lcid == -1) { - for(i=0; i0 && mac_config[i].ue_AggregatedMaximumBitrateDL<10000000000)) - return 0; - } - - if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) { - if(!(mac_config[i].ue_AggregatedMaximumBitrateUL>0 && mac_config[i].ue_AggregatedMaximumBitrateUL<10000000000)) - return 0; - } - - if(&mac_config[i].cqiSchedInterval !=NULL ) { - if(!(mac_config[i].cqiSchedInterval==1 || mac_config[i].cqiSchedInterval==2 || mac_config[i].cqiSchedInterval==5 || mac_config[i].cqiSchedInterval==10 || mac_config[i].cqiSchedInterval==20 - || mac_config[i].cqiSchedInterval==32 || mac_config[i].cqiSchedInterval==40 || mac_config[i].cqiSchedInterval==64 || mac_config[i].cqiSchedInterval==80 || mac_config[i].cqiSchedInterval==128 - || mac_config[i].cqiSchedInterval==160)) - return 0; - } - - if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) { - if(!(mac_config[i].mac_ContentionResolutionTimer==8 || mac_config[i].mac_ContentionResolutionTimer==16 || mac_config[i].mac_ContentionResolutionTimer==24 - || mac_config[i].mac_ContentionResolutionTimer==32 || mac_config[i].mac_ContentionResolutionTimer==40 || mac_config[i].mac_ContentionResolutionTimer==48 - || mac_config[i].mac_ContentionResolutionTimer==56 || mac_config[i].mac_ContentionResolutionTimer==64)) - return 0; - } - - if(mac_config->max_allowed_rbs !=NULL) { - int j=0; - - for(j=0; j=0 && mac_config[i].max_mcs[j]<=27)) - return 0; - } - - } - } - } - } - - if(event.key==NULL && event.value!=NULL && event.ue!=-1 && event.lcid!=-1) { - //check one param - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - - i = event.ue; - int j = event.lcid; - - if(&mac_config[i].DCI_aggregation_min) { - if(mac_config[i].DCI_aggregation_min<=0) { - return 0; - } - - } - - if(&mac_config[i].DLSCH_dci_size_bits !=NULL) { - if(mac_config[i].DLSCH_dci_size_bits <=0) { - return 0; - } - } - - if(mac_config[i].priority !=NULL) { - if(&mac_config[i].priority[j]!=NULL) { - if(mac_config[i].priority[j]<=0) { - return 0; - } - } - - } - - if(&mac_config[i].ul_bandwidth !=NULL) { - - if(!(mac_config[i].ul_bandwidth[j]==6 || mac_config[i].ul_bandwidth[j]==15 || mac_config[i].ul_bandwidth[j]==25 || mac_config[i].ul_bandwidth[j]==50 || mac_config[i].ul_bandwidth[j]==75 - || mac_config[i].ul_bandwidth[j]==100)) - return 0; - - } - - if(&mac_config[i].dl_bandwidth !=NULL) { - - if(!(mac_config[i].dl_bandwidth[j]==6 || mac_config[i].dl_bandwidth[j]==15 || mac_config[i].dl_bandwidth[j]==25 || mac_config[i].dl_bandwidth[j]==50 || mac_config[i].dl_bandwidth[j]==75 - || mac_config[i].dl_bandwidth[j]==100)) - return 0; - - } - - if(&mac_config[i].min_ul_bandwidth !=NULL) { - - if(!(mac_config[i].min_ul_bandwidth[j]==6 || mac_config[i].min_ul_bandwidth[j]==15 || mac_config[i].min_ul_bandwidth[j]==25 || mac_config[i].min_ul_bandwidth[j]==50 - || mac_config[i].min_ul_bandwidth[j]==75 || mac_config[i].min_ul_bandwidth[j]==100)) - return 0; - - } - - if(&mac_config[i].min_dl_bandwidth !=NULL) { - - if(!(mac_config[i].min_dl_bandwidth[j]==6 || mac_config[i].min_dl_bandwidth[j]==15 || mac_config[i].min_dl_bandwidth[j]==25 || mac_config[i].min_dl_bandwidth[j]==50 - || mac_config[i].min_dl_bandwidth[j]==75 || mac_config[i].min_dl_bandwidth[j]==100)) - return 0; - - } - - if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) { - if(!(mac_config[i].ue_AggregatedMaximumBitrateDL>0 && mac_config[i].ue_AggregatedMaximumBitrateDL<10000000000)) - return 0; - } - - if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) { - if(!(mac_config[i].ue_AggregatedMaximumBitrateUL>0 && mac_config[i].ue_AggregatedMaximumBitrateUL<10000000000)) - return 0; - } - - if(&mac_config[i].cqiSchedInterval !=NULL) { - if(!(mac_config[i].cqiSchedInterval==1 || mac_config[i].cqiSchedInterval==2 || mac_config[i].cqiSchedInterval==5 || mac_config[i].cqiSchedInterval==10 || mac_config[i].cqiSchedInterval==20 - || mac_config[i].cqiSchedInterval==32 || mac_config[i].cqiSchedInterval==40 || mac_config[i].cqiSchedInterval==64 || mac_config[i].cqiSchedInterval==80 || mac_config[i].cqiSchedInterval==128 - || mac_config[i].cqiSchedInterval==160)) - return 0; - } - - if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) { - if(!(mac_config[i].mac_ContentionResolutionTimer==8 || mac_config[i].mac_ContentionResolutionTimer==16 || mac_config[i].mac_ContentionResolutionTimer==24 - || mac_config[i].mac_ContentionResolutionTimer==32 || mac_config[i].mac_ContentionResolutionTimer==40 || mac_config[i].mac_ContentionResolutionTimer==48 - || mac_config[i].mac_ContentionResolutionTimer==56 || mac_config[i].mac_ContentionResolutionTimer==64)) - return 0; - - } - - if(mac_config->max_allowed_rbs !=NULL) { - - if(mac_config[i].max_allowed_rbs[j]<=0) - return 0; - - } - - if(mac_config[i].max_mcs !=NULL) { - if(!(mac_config[i].max_mcs[j]>=0 && mac_config[i].max_mcs[j]<=27)) - return 0; - } - - - } - - if(event.key!=NULL && event.value!=NULL) { - //printf("check one param"); - if(!strcmp((char *) event.key, "priority") && event.value!=NULL) { - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - int j=0; - - if(event.ue == -1 && event.lcid ==-1) { - for(i=0; i0 && mac_config[i].ue_AggregatedMaximumBitrateDL<10000000000)) - return 0; - } - } else { - i = event.ue; - - if(!(mac_config[i].ue_AggregatedMaximumBitrateDL>0 && mac_config[i].ue_AggregatedMaximumBitrateDL<10000000000)) - return 0; - } - - } else if(!strcmp((char *) event.key, "ue_AggregatedMaximumBitrateUL") && event.value!=NULL) { - - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - - - - if(event.ue == -1) { - for(i=0; i0 && mac_config[i].ue_AggregatedMaximumBitrateUL<10000000000)) - return 0; - } - } else { - i = event.ue; - - if(!(mac_config[i].ue_AggregatedMaximumBitrateUL>0 && mac_config[i].ue_AggregatedMaximumBitrateUL<10000000000)) - return 0; - } - - } else if(!strcmp((char *) event.key, "cqiSchedInterval") && event.value!=NULL) { - Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16); - mac_config = (Mac_config *) event.value; - - if(event.ue == -1) { - for(i=0; i=0 && mac_config[i].max_mcs[j]<=27)) - return 0; - - } - } - - } - } else { - i = event.ue; - j = event.lcid; - - if(!(mac_config[i].max_mcs[j]>=0 && mac_config[i].max_mcs[j]<=27)) - return 0; - - } - } - - } - - return 1; - - -} - diff --git a/targets/SIMU/USER/event_handler.h b/targets/SIMU/USER/event_handler.h deleted file mode 100644 index d6579fd411..0000000000 --- a/targets/SIMU/USER/event_handler.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file event_handler.h -* \brief primitives to handle event acting on oai -* \author Navid Nikaein and Mohamed Said MOSLI BOUKSIAA, -* \date 2014 -* \version 0.5 -* @ingroup _oai -*/ - -#include "oaisim.h" -#include "UTIL/FIFO/pad_list.h" - - - -void add_event(Event_t event); - -void schedule(Operation_Type_t op, Event_Type_t type, int frame, char * key, void* value, int ue, int lcid); - -void schedule_delayed(Operation_Type_t op, Event_Type_t type, char * key, void* value, char * time, int ue, int lcid); - -void schedule_events(void); - -void execute_events(frame_t frame); - - -void update_oai_model(char * key, void * value); - -void update_sys_model(Event_t event); - -void update_topo_model(Event_t event); - -void update_app_model(Event_t event); - -void update_emu_model(Event_t event); - -void update_mac(Event_t event); - -int validate_mac(Event_t event); - - -/* -void schedule_end_of_simulation(End_Of_Sim_Event_Type type, int value); - -int end_of_simulation(); -*/ diff --git a/targets/SIMU/USER/files/MI_16qam.csv b/targets/SIMU/USER/files/MI_16qam.csv deleted file mode 100644 index 3cdbecc270..0000000000 --- a/targets/SIMU/USER/files/MI_16qam.csv +++ /dev/null @@ -1,3 +0,0 @@ --20,-19.8,-19.6,-19.4,-19.2,-19,-18.8,-18.6,-18.4,-18.2,-18,-17.8,-17.6,-17.4,-17.2,-17,-16.8,-16.6,-16.4,-16.2,-16,-15.8,-15.6,-15.4,-15.2,-15,-14.8,-14.6,-14.4,-14.2,-14,-13.8,-13.6,-13.4,-13.2,-13,-12.8,-12.6,-12.4,-12.2,-12,-11.8,-11.6,-11.4,-11.2,-11,-10.8,-10.6,-10.4,-10.2,-10,-9.8,-9.6,-9.4,-9.2,-9,-8.8,-8.6,-8.4,-8.2,-8,-7.8,-7.6,-7.4,-7.2,-7,-6.8,-6.6,-6.4,-6.2,-6,-5.8,-5.6,-5.4,-5.2,-5,-4.8,-4.6,-4.4,-4.2,-4,-3.8,-3.6,-3.4,-3.2,-3,-2.8,-2.6,-2.4,-2.2,-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8,2,2.2,2.4,2.6,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5,5.2,5.4,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,8.2,8.4,8.6,8.8,9,9.2,9.4,9.6,9.8,10,10.2,10.4,10.6,10.8,11,11.2,11.4,11.6,11.8,12,12.2,12.4,12.6,12.8,13,13.2,13.4,13.6,13.8,14,14.2,14.4,14.6,14.8,15,15.2,15.4,15.6,15.8,16,16.2,16.4,16.6,16.8,17,17.2,17.4,17.6,17.8,18,18.2,18.4,18.6,18.8,19,19.2 -0.014138,0.014992,0.015845,0.016699,0.017553,0.018407,0.01923,0.020054,0.020878,0.021701,0.022525,0.02368,0.024834,0.025989,0.027144,0.028299,0.029822,0.031346,0.03287,0.034393,0.035917,0.03769,0.039464,0.041237,0.043011,0.044784,0.047124,0.049465,0.051806,0.054146,0.056487,0.059209,0.061931,0.064654,0.067376,0.070098,0.073673,0.077247,0.080822,0.084396,0.087971,0.092295,0.09662,0.10094,0.10527,0.10959,0.11501,0.12043,0.12585,0.13127,0.13669,0.14362,0.15054,0.15747,0.1644,0.17133,0.17954,0.18776,0.19598,0.2042,0.21241,0.2223,0.23219,0.24208,0.25197,0.26186,0.27399,0.28613,0.29827,0.31041,0.32255,0.33706,0.35158,0.36609,0.38061,0.39513,0.41234,0.42955,0.44676,0.46397,0.48118,0.50187,0.52256,0.54325,0.56394,0.58463,0.60797,0.63131,0.65465,0.678,0.70134,0.72903,0.75673,0.78442,0.81212,0.83981,0.86994,0.90007,0.9302,0.96033,0.99047,1.0241,1.0577,1.0914,1.125,1.1587,1.1954,1.2321,1.2688,1.3054,1.3421,1.3818,1.4214,1.4611,1.5007,1.5404,1.5828,1.6253,1.6678,1.7102,1.7527,1.7968,1.8408,1.8849,1.929,1.9731,2.0189,2.0647,2.1105,2.1563,2.2022,2.2501,2.298,2.346,2.3939,2.4418,2.4901,2.5384,2.5867,2.6349,2.6832,2.7321,2.7811,2.83,2.8789,2.9279,2.9751,3.0224,3.0697,3.117,3.1643,3.2083,3.2524,3.2964,3.3404,3.3844,3.4235,3.4626,3.5017,3.5407,3.5798,3.6112,3.6426,3.674,3.7054,3.7368,3.7602,3.7835,3.8068,3.8302,3.8535,3.8685,3.8836,3.8986,3.9137,3.9288,3.9372,3.9456,3.954,3.9624,3.9708,3.9747,3.9786,3.9825,3.9864,3.9903,3.9918,3.9932,3.9947,3.9961,3.9975,3.9979,3.9983,3.9987,3.9991,3.9995,4 -0.0035344,0.0037479,0.0039613,0.0041748,0.0043882,0.0046017,0.0048076,0.0050135,0.0052194,0.0054254,0.0056313,0.0059199,0.0062086,0.0064973,0.006786,0.0070746,0.0074556,0.0078365,0.0082174,0.0085983,0.0089792,0.0094226,0.0098659,0.010309,0.010753,0.011196,0.011781,0.012366,0.012951,0.013537,0.014122,0.014802,0.015483,0.016163,0.016844,0.017525,0.018418,0.019312,0.020205,0.021099,0.021993,0.023074,0.024155,0.025236,0.026317,0.027398,0.028753,0.030108,0.031463,0.032818,0.034173,0.035904,0.037636,0.039368,0.0411,0.042831,0.044886,0.04694,0.048994,0.051049,0.053103,0.055575,0.058047,0.06052,0.062992,0.065464,0.068498,0.071533,0.074568,0.077602,0.080637,0.084266,0.087895,0.091524,0.095153,0.098782,0.10308,0.10739,0.11169,0.11599,0.12029,0.12547,0.13064,0.13581,0.14098,0.14616,0.15199,0.15783,0.16366,0.1695,0.17533,0.18226,0.18918,0.19611,0.20303,0.20995,0.21749,0.22502,0.23255,0.24008,0.24762,0.25603,0.26444,0.27285,0.28126,0.28967,0.29884,0.30801,0.31719,0.32636,0.33554,0.34545,0.35536,0.36527,0.37518,0.3851,0.39571,0.40632,0.41694,0.42755,0.43817,0.44919,0.46021,0.47123,0.48226,0.49328,0.50473,0.51618,0.52763,0.53909,0.55054,0.56252,0.57451,0.58649,0.59847,0.61046,0.62253,0.6346,0.64667,0.65874,0.67081,0.68304,0.69527,0.7075,0.71973,0.73196,0.74379,0.75561,0.76743,0.77925,0.79108,0.80208,0.81309,0.8241,0.8351,0.84611,0.85588,0.86565,0.87541,0.88518,0.89495,0.9028,0.91065,0.9185,0.92635,0.93421,0.94004,0.94587,0.95171,0.95754,0.96337,0.96714,0.9709,0.97466,0.97843,0.98219,0.98429,0.98639,0.9885,0.9906,0.9927,0.99368,0.99465,0.99563,0.99661,0.99758,0.99794,0.9983,0.99866,0.99902,0.99938,0.99948,0.99958,0.99968,0.99978,0.99988,1 diff --git a/targets/SIMU/USER/files/MI_16qam.txt b/targets/SIMU/USER/files/MI_16qam.txt deleted file mode 100644 index 5671a89426..0000000000 --- a/targets/SIMU/USER/files/MI_16qam.txt +++ /dev/null @@ -1,3 +0,0 @@ --20;-19.8;-19.6;-19.4;-19.2;-19;-18.8;-18.6;-18.4;-18.2;-18;-17.8;-17.6;-17.4;-17.2;-17;-16.8;-16.6;-16.4;-16.2;-16;-15.8;-15.6;-15.4;-15.2;-15;-14.8;-14.6;-14.4;-14.2;-14;-13.8;-13.6;-13.4;-13.2;-13;-12.8;-12.6;-12.4;-12.2;-12;-11.8;-11.6;-11.4;-11.2;-11;-10.8;-10.6;-10.4;-10.2;-10;-9.8;-9.6;-9.4;-9.2;-9;-8.8;-8.6;-8.4;-8.2;-8;-7.8;-7.6;-7.4;-7.2;-7;-6.8;-6.6;-6.4;-6.2;-6;-5.8;-5.6;-5.4;-5.2;-5;-4.8;-4.6;-4.4;-4.2;-4;-3.8;-3.6;-3.4;-3.2;-3;-2.8;-2.6;-2.4;-2.2;-2;-1.8;-1.6;-1.4;-1.2;-1;-0.8;-0.6;-0.4;-0.2;0;0.2;0.4;0.6;0.8;1;1.2;1.4;1.6;1.8;2;2.2;2.4;2.6;2.8;3;3.2;3.4;3.6;3.8;4;4.2;4.4;4.6;4.8;5;5.2;5.4;5.6;5.8;6;6.2;6.4;6.6;6.8;7;7.2;7.4;7.6;7.8;8;8.2;8.4;8.6;8.8;9;9.2;9.4;9.6;9.8;10;10.2;10.4;10.6;10.8;11;11.2;11.4;11.6;11.8;12;12.2;12.4;12.6;12.8;13;13.2;13.4;13.6;13.8;14;14.2;14.4;14.6;14.8;15;15.2;15.4;15.6;15.8;16;16.2;16.4;16.6;16.8;17;17.2;17.4;17.6;17.8;18;18.2;18.4;18.6;18.8;19;19.2 -0.014138;0.014992;0.015845;0.016699;0.017553;0.018407;0.01923;0.020054;0.020878;0.021701;0.022525;0.02368;0.024834;0.025989;0.027144;0.028299;0.029822;0.031346;0.03287;0.034393;0.035917;0.03769;0.039464;0.041237;0.043011;0.044784;0.047124;0.049465;0.051806;0.054146;0.056487;0.059209;0.061931;0.064654;0.067376;0.070098;0.073673;0.077247;0.080822;0.084396;0.087971;0.092295;0.09662;0.10094;0.10527;0.10959;0.11501;0.12043;0.12585;0.13127;0.13669;0.14362;0.15054;0.15747;0.1644;0.17133;0.17954;0.18776;0.19598;0.2042;0.21241;0.2223;0.23219;0.24208;0.25197;0.26186;0.27399;0.28613;0.29827;0.31041;0.32255;0.33706;0.35158;0.36609;0.38061;0.39513;0.41234;0.42955;0.44676;0.46397;0.48118;0.50187;0.52256;0.54325;0.56394;0.58463;0.60797;0.63131;0.65465;0.678;0.70134;0.72903;0.75673;0.78442;0.81212;0.83981;0.86994;0.90007;0.9302;0.96033;0.99047;1.0241;1.0577;1.0914;1.125;1.1587;1.1954;1.2321;1.2688;1.3054;1.3421;1.3818;1.4214;1.4611;1.5007;1.5404;1.5828;1.6253;1.6678;1.7102;1.7527;1.7968;1.8408;1.8849;1.929;1.9731;2.0189;2.0647;2.1105;2.1563;2.2022;2.2501;2.298;2.346;2.3939;2.4418;2.4901;2.5384;2.5867;2.6349;2.6832;2.7321;2.7811;2.83;2.8789;2.9279;2.9751;3.0224;3.0697;3.117;3.1643;3.2083;3.2524;3.2964;3.3404;3.3844;3.4235;3.4626;3.5017;3.5407;3.5798;3.6112;3.6426;3.674;3.7054;3.7368;3.7602;3.7835;3.8068;3.8302;3.8535;3.8685;3.8836;3.8986;3.9137;3.9288;3.9372;3.9456;3.954;3.9624;3.9708;3.9747;3.9786;3.9825;3.9864;3.9903;3.9918;3.9932;3.9947;3.9961;3.9975;3.9979;3.9983;3.9987;3.9991;3.9995;4 -0.0035344;0.0037479;0.0039613;0.0041748;0.0043882;0.0046017;0.0048076;0.0050135;0.0052194;0.0054254;0.0056313;0.0059199;0.0062086;0.0064973;0.006786;0.0070746;0.0074556;0.0078365;0.0082174;0.0085983;0.0089792;0.0094226;0.0098659;0.010309;0.010753;0.011196;0.011781;0.012366;0.012951;0.013537;0.014122;0.014802;0.015483;0.016163;0.016844;0.017525;0.018418;0.019312;0.020205;0.021099;0.021993;0.023074;0.024155;0.025236;0.026317;0.027398;0.028753;0.030108;0.031463;0.032818;0.034173;0.035904;0.037636;0.039368;0.0411;0.042831;0.044886;0.04694;0.048994;0.051049;0.053103;0.055575;0.058047;0.06052;0.062992;0.065464;0.068498;0.071533;0.074568;0.077602;0.080637;0.084266;0.087895;0.091524;0.095153;0.098782;0.10308;0.10739;0.11169;0.11599;0.12029;0.12547;0.13064;0.13581;0.14098;0.14616;0.15199;0.15783;0.16366;0.1695;0.17533;0.18226;0.18918;0.19611;0.20303;0.20995;0.21749;0.22502;0.23255;0.24008;0.24762;0.25603;0.26444;0.27285;0.28126;0.28967;0.29884;0.30801;0.31719;0.32636;0.33554;0.34545;0.35536;0.36527;0.37518;0.3851;0.39571;0.40632;0.41694;0.42755;0.43817;0.44919;0.46021;0.47123;0.48226;0.49328;0.50473;0.51618;0.52763;0.53909;0.55054;0.56252;0.57451;0.58649;0.59847;0.61046;0.62253;0.6346;0.64667;0.65874;0.67081;0.68304;0.69527;0.7075;0.71973;0.73196;0.74379;0.75561;0.76743;0.77925;0.79108;0.80208;0.81309;0.8241;0.8351;0.84611;0.85588;0.86565;0.87541;0.88518;0.89495;0.9028;0.91065;0.9185;0.92635;0.93421;0.94004;0.94587;0.95171;0.95754;0.96337;0.96714;0.9709;0.97466;0.97843;0.98219;0.98429;0.98639;0.9885;0.9906;0.9927;0.99368;0.99465;0.99563;0.99661;0.99758;0.99794;0.9983;0.99866;0.99902;0.99938;0.99948;0.99958;0.99968;0.99978;0.99988;1 diff --git a/targets/SIMU/USER/files/MI_4qam.csv b/targets/SIMU/USER/files/MI_4qam.csv deleted file mode 100644 index a2f43a0bbd..0000000000 --- a/targets/SIMU/USER/files/MI_4qam.csv +++ /dev/null @@ -1,3 +0,0 @@ --20,-19.8,-19.6,-19.4,-19.2,-19,-18.8,-18.6,-18.4,-18.2,-18,-17.8,-17.6,-17.4,-17.2,-17,-16.8,-16.6,-16.4,-16.2,-16,-15.8,-15.6,-15.4,-15.2,-15,-14.8,-14.6,-14.4,-14.2,-14,-13.8,-13.6,-13.4,-13.2,-13,-12.8,-12.6,-12.4,-12.2,-12,-11.8,-11.6,-11.4,-11.2,-11,-10.8,-10.6,-10.4,-10.2,-10,-9.8,-9.6,-9.4,-9.2,-9,-8.8,-8.6,-8.4,-8.2,-8,-7.8,-7.6,-7.4,-7.2,-7,-6.8,-6.6,-6.4,-6.2,-6,-5.8,-5.6,-5.4,-5.2,-5,-4.8,-4.6,-4.4,-4.2,-4,-3.8,-3.6,-3.4,-3.2,-3,-2.8,-2.6,-2.4,-2.2,-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8,2,2.2,2.4,2.6,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5,5.2,5.4,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,8.2,8.4,8.6,8.8,9,9.2,9.4,9.6,9.8,10,10.2,10.4,10.6,10.8,11,11.2,11.4,11.6,11.8,12,12.2 -0.014938,0.015535,0.016131,0.016727,0.017324,0.01792,0.018791,0.019662,0.020533,0.021404,0.022276,0.023689,0.025102,0.026515,0.027928,0.029341,0.030588,0.031835,0.033082,0.034329,0.035575,0.03748,0.039384,0.041289,0.043193,0.045098,0.047475,0.049853,0.05223,0.054607,0.056985,0.059606,0.062228,0.06485,0.067472,0.070094,0.07367,0.077247,0.080824,0.0844,0.087977,0.092384,0.096792,0.1012,0.10561,0.11001,0.11567,0.12133,0.12699,0.13265,0.13831,0.14512,0.15193,0.15874,0.16555,0.17236,0.18045,0.18854,0.19663,0.20472,0.21282,0.22319,0.23357,0.24395,0.25433,0.26471,0.27602,0.28733,0.29863,0.30994,0.32125,0.33583,0.35041,0.36499,0.37957,0.39415,0.4114,0.42865,0.4459,0.46315,0.4804,0.50048,0.52055,0.54063,0.5607,0.58078,0.60421,0.62764,0.65107,0.6745,0.69793,0.72389,0.74984,0.7758,0.80176,0.82771,0.85656,0.88541,0.91425,0.9431,0.97194,1.0031,1.0343,1.0655,1.0967,1.1279,1.1592,1.1905,1.2218,1.2531,1.2845,1.3156,1.3467,1.3778,1.4089,1.44,1.4699,1.4999,1.5298,1.5598,1.5897,1.6156,1.6414,1.6672,1.6931,1.7189,1.7397,1.7606,1.7814,1.8022,1.823,1.839,1.8549,1.8708,1.8868,1.9027,1.9124,1.922,1.9317,1.9414,1.9511,1.9569,1.9628,1.9687,1.9745,1.9804,1.9831,1.9857,1.9884,1.991,1.9937,1.9947,1.9957,1.9967,1.9977,1.9986,1.9989,1.9991,1.9993,1.9996,1.9998,2 -0.0074691,0.0077673,0.0080654,0.0083636,0.0086618,0.00896,0.0093955,0.0098311,0.010267,0.010702,0.011138,0.011844,0.012551,0.013257,0.013964,0.014671,0.015294,0.015917,0.016541,0.017164,0.017788,0.01874,0.019692,0.020644,0.021597,0.022549,0.023738,0.024926,0.026115,0.027304,0.028492,0.029803,0.031114,0.032425,0.033736,0.035047,0.036835,0.038623,0.040412,0.0422,0.043988,0.046192,0.048396,0.050599,0.052803,0.055007,0.057836,0.060666,0.063496,0.066325,0.069155,0.07256,0.075965,0.07937,0.082775,0.08618,0.090225,0.094271,0.098317,0.10236,0.10641,0.1116,0.11679,0.12198,0.12717,0.13235,0.13801,0.14366,0.14932,0.15497,0.16063,0.16792,0.17521,0.1825,0.18979,0.19708,0.2057,0.21433,0.22295,0.23158,0.2402,0.25024,0.26028,0.27031,0.28035,0.29039,0.3021,0.31382,0.32553,0.33725,0.34897,0.36194,0.37492,0.3879,0.40088,0.41386,0.42828,0.4427,0.45713,0.47155,0.48597,0.50156,0.51715,0.53275,0.54834,0.56393,0.57959,0.59525,0.61091,0.62657,0.64223,0.65779,0.67334,0.68889,0.70445,0.72,0.73497,0.74994,0.76492,0.77989,0.79486,0.80778,0.8207,0.83362,0.84654,0.85946,0.86987,0.88029,0.8907,0.90111,0.91152,0.91948,0.92745,0.93542,0.94338,0.95135,0.95619,0.96102,0.96586,0.9707,0.97554,0.97847,0.9814,0.98433,0.98727,0.9902,0.99153,0.99286,0.99419,0.99552,0.99685,0.99735,0.99784,0.99834,0.99883,0.99932,0.99944,0.99956,0.99967,0.99979,0.9999,1 diff --git a/targets/SIMU/USER/files/MI_4qam.txt b/targets/SIMU/USER/files/MI_4qam.txt deleted file mode 100644 index ba1b46094a..0000000000 --- a/targets/SIMU/USER/files/MI_4qam.txt +++ /dev/null @@ -1,3 +0,0 @@ --20;-19.8;-19.6;-19.4;-19.2;-19;-18.8;-18.6;-18.4;-18.2;-18;-17.8;-17.6;-17.4;-17.2;-17;-16.8;-16.6;-16.4;-16.2;-16;-15.8;-15.6;-15.4;-15.2;-15;-14.8;-14.6;-14.4;-14.2;-14;-13.8;-13.6;-13.4;-13.2;-13;-12.8;-12.6;-12.4;-12.2;-12;-11.8;-11.6;-11.4;-11.2;-11;-10.8;-10.6;-10.4;-10.2;-10;-9.8;-9.6;-9.4;-9.2;-9;-8.8;-8.6;-8.4;-8.2;-8;-7.8;-7.6;-7.4;-7.2;-7;-6.8;-6.6;-6.4;-6.2;-6;-5.8;-5.6;-5.4;-5.2;-5;-4.8;-4.6;-4.4;-4.2;-4;-3.8;-3.6;-3.4;-3.2;-3;-2.8;-2.6;-2.4;-2.2;-2;-1.8;-1.6;-1.4;-1.2;-1;-0.8;-0.6;-0.4;-0.2;0;0.2;0.4;0.6;0.8;1;1.2;1.4;1.6;1.8;2;2.2;2.4;2.6;2.8;3;3.2;3.4;3.6;3.8;4;4.2;4.4;4.6;4.8;5;5.2;5.4;5.6;5.8;6;6.2;6.4;6.6;6.8;7;7.2;7.4;7.6;7.8;8;8.2;8.4;8.6;8.8;9;9.2;9.4;9.6;9.8;10;10.2;10.4;10.6;10.8;11;11.2;11.4;11.6;11.8;12;12.2 -0.014938;0.015535;0.016131;0.016727;0.017324;0.01792;0.018791;0.019662;0.020533;0.021404;0.022276;0.023689;0.025102;0.026515;0.027928;0.029341;0.030588;0.031835;0.033082;0.034329;0.035575;0.03748;0.039384;0.041289;0.043193;0.045098;0.047475;0.049853;0.05223;0.054607;0.056985;0.059606;0.062228;0.06485;0.067472;0.070094;0.07367;0.077247;0.080824;0.0844;0.087977;0.092384;0.096792;0.1012;0.10561;0.11001;0.11567;0.12133;0.12699;0.13265;0.13831;0.14512;0.15193;0.15874;0.16555;0.17236;0.18045;0.18854;0.19663;0.20472;0.21282;0.22319;0.23357;0.24395;0.25433;0.26471;0.27602;0.28733;0.29863;0.30994;0.32125;0.33583;0.35041;0.36499;0.37957;0.39415;0.4114;0.42865;0.4459;0.46315;0.4804;0.50048;0.52055;0.54063;0.5607;0.58078;0.60421;0.62764;0.65107;0.6745;0.69793;0.72389;0.74984;0.7758;0.80176;0.82771;0.85656;0.88541;0.91425;0.9431;0.97194;1.0031;1.0343;1.0655;1.0967;1.1279;1.1592;1.1905;1.2218;1.2531;1.2845;1.3156;1.3467;1.3778;1.4089;1.44;1.4699;1.4999;1.5298;1.5598;1.5897;1.6156;1.6414;1.6672;1.6931;1.7189;1.7397;1.7606;1.7814;1.8022;1.823;1.839;1.8549;1.8708;1.8868;1.9027;1.9124;1.922;1.9317;1.9414;1.9511;1.9569;1.9628;1.9687;1.9745;1.9804;1.9831;1.9857;1.9884;1.991;1.9937;1.9947;1.9957;1.9967;1.9977;1.9986;1.9989;1.9991;1.9993;1.9996;1.9998;2 -0.0074691;0.0077673;0.0080654;0.0083636;0.0086618;0.00896;0.0093955;0.0098311;0.010267;0.010702;0.011138;0.011844;0.012551;0.013257;0.013964;0.014671;0.015294;0.015917;0.016541;0.017164;0.017788;0.01874;0.019692;0.020644;0.021597;0.022549;0.023738;0.024926;0.026115;0.027304;0.028492;0.029803;0.031114;0.032425;0.033736;0.035047;0.036835;0.038623;0.040412;0.0422;0.043988;0.046192;0.048396;0.050599;0.052803;0.055007;0.057836;0.060666;0.063496;0.066325;0.069155;0.07256;0.075965;0.07937;0.082775;0.08618;0.090225;0.094271;0.098317;0.10236;0.10641;0.1116;0.11679;0.12198;0.12717;0.13235;0.13801;0.14366;0.14932;0.15497;0.16063;0.16792;0.17521;0.1825;0.18979;0.19708;0.2057;0.21433;0.22295;0.23158;0.2402;0.25024;0.26028;0.27031;0.28035;0.29039;0.3021;0.31382;0.32553;0.33725;0.34897;0.36194;0.37492;0.3879;0.40088;0.41386;0.42828;0.4427;0.45713;0.47155;0.48597;0.50156;0.51715;0.53275;0.54834;0.56393;0.57959;0.59525;0.61091;0.62657;0.64223;0.65779;0.67334;0.68889;0.70445;0.72;0.73497;0.74994;0.76492;0.77989;0.79486;0.80778;0.8207;0.83362;0.84654;0.85946;0.86987;0.88029;0.8907;0.90111;0.91152;0.91948;0.92745;0.93542;0.94338;0.95135;0.95619;0.96102;0.96586;0.9707;0.97554;0.97847;0.9814;0.98433;0.98727;0.9902;0.99153;0.99286;0.99419;0.99552;0.99685;0.99735;0.99784;0.99834;0.99883;0.99932;0.99944;0.99956;0.99967;0.99979;0.9999;1 diff --git a/targets/SIMU/USER/files/MI_64qam.csv b/targets/SIMU/USER/files/MI_64qam.csv deleted file mode 100644 index d24cd371d3..0000000000 --- a/targets/SIMU/USER/files/MI_64qam.csv +++ /dev/null @@ -1,3 +0,0 @@ --20,-19.8,-19.6,-19.4,-19.2,-19,-18.8,-18.6,-18.4,-18.2,-18,-17.8,-17.6,-17.4,-17.2,-17,-16.8,-16.6,-16.4,-16.2,-16,-15.8,-15.6,-15.4,-15.2,-15,-14.8,-14.6,-14.4,-14.2,-14,-13.8,-13.6,-13.4,-13.2,-13,-12.8,-12.6,-12.4,-12.2,-12,-11.8,-11.6,-11.4,-11.2,-11,-10.8,-10.6,-10.4,-10.2,-10,-9.8,-9.6,-9.4,-9.2,-9,-8.8,-8.6,-8.4,-8.2,-8,-7.8,-7.6,-7.4,-7.2,-7,-6.8,-6.6,-6.4,-6.2,-6,-5.8,-5.6,-5.4,-5.2,-5,-4.8,-4.6,-4.4,-4.2,-4,-3.8,-3.6,-3.4,-3.2,-3,-2.8,-2.6,-2.4,-2.2,-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8,2,2.2,2.4,2.6,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5,5.2,5.4,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,8.2,8.4,8.6,8.8,9,9.2,9.4,9.6,9.8,10,10.2,10.4,10.6,10.8,11,11.2,11.4,11.6,11.8,12,12.2,12.4,12.6,12.8,13,13.2,13.4,13.6,13.8,14,14.2,14.4,14.6,14.8,15,15.2,15.4,15.6,15.8,16,16.2,16.4,16.6,16.8,17,17.2,17.4,17.6,17.8,18,18.2,18.4,18.6,18.8,19,19.2,19.4,19.6,19.8,20,20.2,20.4,20.6,20.8,21,21.2,21.4,21.6,21.8,22,22.2,22.4,22.6,22.8,23,23.2,23.4,23.6,23.8,24,24.2,24.4,24.6,24.8,25,25.2 -0.014329,0.015063,0.015797,0.016531,0.017266,0.018,0.01893,0.01986,0.020791,0.021721,0.022651,0.023849,0.025047,0.026245,0.027443,0.028642,0.03008,0.031518,0.032957,0.034395,0.035834,0.037611,0.039388,0.041166,0.042943,0.04472,0.046979,0.049237,0.051496,0.053755,0.056013,0.058941,0.061869,0.064797,0.067725,0.070653,0.074193,0.077734,0.081274,0.084814,0.088355,0.092706,0.097057,0.10141,0.10576,0.11011,0.11555,0.121,0.12644,0.13188,0.13733,0.14408,0.15084,0.1576,0.16435,0.17111,0.17937,0.18763,0.19589,0.20415,0.21241,0.22245,0.23248,0.24252,0.25256,0.2626,0.27469,0.28678,0.29888,0.31097,0.32306,0.33766,0.35225,0.36685,0.38144,0.39604,0.41344,0.43084,0.44824,0.46564,0.48304,0.50338,0.52372,0.54407,0.56441,0.58475,0.60833,0.63192,0.6555,0.67908,0.70266,0.73007,0.75747,0.78488,0.81228,0.83969,0.86999,0.9003,0.9306,0.96091,0.99121,1.0254,1.0595,1.0937,1.1279,1.162,1.1993,1.2365,1.2737,1.3109,1.3482,1.3887,1.4293,1.4699,1.5104,1.551,1.5939,1.6368,1.6797,1.7226,1.7655,1.8112,1.8568,1.9025,1.9482,1.9938,2.041,2.0882,2.1353,2.1825,2.2296,2.2795,2.3293,2.3791,2.4289,2.4788,2.53,2.5813,2.6326,2.6839,2.7351,2.7877,2.8403,2.8929,2.9455,2.9981,3.0522,3.1063,3.1604,3.2145,3.2686,3.3237,3.3788,3.4339,3.489,3.5441,3.6003,3.6564,3.7125,3.7686,3.8247,3.8815,3.9384,3.9952,4.052,4.1089,4.1662,4.2235,4.2808,4.3381,4.3954,4.4527,4.5099,4.5671,4.6244,4.6816,4.7375,4.7934,4.8492,4.9051,4.961,5.0138,5.0666,5.1195,5.1723,5.2251,5.2722,5.3192,5.3662,5.4132,5.4603,5.4992,5.538,5.5769,5.6158,5.6547,5.684,5.7134,5.7427,5.772,5.8013,5.821,5.8408,5.8605,5.8803,5.9,5.9114,5.9229,5.9343,5.9458,5.9572,5.9628,5.9684,5.974,5.9796,5.9852,5.9874,5.9895,5.9917,5.9938,5.996,5.9967,5.9973,5.998,5.9986,5.9993,6 -0.0023882,0.0025106,0.0026329,0.0027552,0.0028776,0.0029999,0.003155,0.00331,0.0034651,0.0036202,0.0037752,0.0039749,0.0041746,0.0043742,0.0045739,0.0047736,0.0050133,0.0052531,0.0054928,0.0057325,0.0059723,0.0062685,0.0065647,0.0068609,0.0071571,0.0074534,0.0078298,0.0082062,0.0085827,0.0089591,0.0093356,0.0098236,0.010312,0.0108,0.011288,0.011776,0.012366,0.012956,0.013546,0.014136,0.014726,0.015451,0.016176,0.016901,0.017627,0.018352,0.019259,0.020166,0.021073,0.02198,0.022888,0.024014,0.02514,0.026266,0.027392,0.028519,0.029895,0.031272,0.032648,0.034025,0.035401,0.037074,0.038747,0.04042,0.042094,0.043767,0.045782,0.047797,0.049813,0.051828,0.053844,0.056276,0.058709,0.061141,0.063574,0.066006,0.068906,0.071806,0.074706,0.077606,0.080506,0.083897,0.087287,0.090678,0.094068,0.097458,0.10139,0.10532,0.10925,0.11318,0.11711,0.12168,0.12625,0.13081,0.13538,0.13995,0.145,0.15005,0.1551,0.16015,0.1652,0.1709,0.17659,0.18228,0.18798,0.19367,0.19988,0.20608,0.21229,0.21849,0.22469,0.23146,0.23822,0.24498,0.25174,0.2585,0.26565,0.2728,0.27995,0.2871,0.29425,0.30186,0.30947,0.31708,0.32469,0.3323,0.34016,0.34803,0.35589,0.36375,0.37161,0.37991,0.38822,0.39652,0.40482,0.41313,0.42167,0.43022,0.43876,0.44731,0.45586,0.46462,0.47338,0.48215,0.49091,0.49968,0.50869,0.51771,0.52673,0.53575,0.54476,0.55395,0.56313,0.57232,0.58151,0.59069,0.60004,0.6094,0.61875,0.6281,0.63745,0.64692,0.6564,0.66587,0.67534,0.68481,0.69437,0.70392,0.71347,0.72302,0.73257,0.74211,0.75165,0.76119,0.77073,0.78026,0.78958,0.79889,0.80821,0.81752,0.82683,0.83564,0.84444,0.85325,0.86205,0.87085,0.87869,0.88653,0.89437,0.90221,0.91004,0.91653,0.92301,0.92949,0.93597,0.94245,0.94734,0.95223,0.95711,0.962,0.96688,0.97017,0.97346,0.97675,0.98004,0.98333,0.98524,0.98715,0.98906,0.99096,0.99287,0.9938,0.99474,0.99567,0.9966,0.99754,0.9979,0.99826,0.99862,0.99897,0.99933,0.99944,0.99955,0.99966,0.99977,0.99988,1 diff --git a/targets/SIMU/USER/files/MI_64qam.txt b/targets/SIMU/USER/files/MI_64qam.txt deleted file mode 100644 index 9b6365eea0..0000000000 --- a/targets/SIMU/USER/files/MI_64qam.txt +++ /dev/null @@ -1,3 +0,0 @@ --20;-19.8;-19.6;-19.4;-19.2;-19;-18.8;-18.6;-18.4;-18.2;-18;-17.8;-17.6;-17.4;-17.2;-17;-16.8;-16.6;-16.4;-16.2;-16;-15.8;-15.6;-15.4;-15.2;-15;-14.8;-14.6;-14.4;-14.2;-14;-13.8;-13.6;-13.4;-13.2;-13;-12.8;-12.6;-12.4;-12.2;-12;-11.8;-11.6;-11.4;-11.2;-11;-10.8;-10.6;-10.4;-10.2;-10;-9.8;-9.6;-9.4;-9.2;-9;-8.8;-8.6;-8.4;-8.2;-8;-7.8;-7.6;-7.4;-7.2;-7;-6.8;-6.6;-6.4;-6.2;-6;-5.8;-5.6;-5.4;-5.2;-5;-4.8;-4.6;-4.4;-4.2;-4;-3.8;-3.6;-3.4;-3.2;-3;-2.8;-2.6;-2.4;-2.2;-2;-1.8;-1.6;-1.4;-1.2;-1;-0.8;-0.6;-0.4;-0.2;0;0.2;0.4;0.6;0.8;1;1.2;1.4;1.6;1.8;2;2.2;2.4;2.6;2.8;3;3.2;3.4;3.6;3.8;4;4.2;4.4;4.6;4.8;5;5.2;5.4;5.6;5.8;6;6.2;6.4;6.6;6.8;7;7.2;7.4;7.6;7.8;8;8.2;8.4;8.6;8.8;9;9.2;9.4;9.6;9.8;10;10.2;10.4;10.6;10.8;11;11.2;11.4;11.6;11.8;12;12.2;12.4;12.6;12.8;13;13.2;13.4;13.6;13.8;14;14.2;14.4;14.6;14.8;15;15.2;15.4;15.6;15.8;16;16.2;16.4;16.6;16.8;17;17.2;17.4;17.6;17.8;18;18.2;18.4;18.6;18.8;19;19.2;19.4;19.6;19.8;20;20.2;20.4;20.6;20.8;21;21.2;21.4;21.6;21.8;22;22.2;22.4;22.6;22.8;23;23.2;23.4;23.6;23.8;24;24.2;24.4;24.6;24.8;25;25.2 -0.014329;0.015063;0.015797;0.016531;0.017266;0.018;0.01893;0.01986;0.020791;0.021721;0.022651;0.023849;0.025047;0.026245;0.027443;0.028642;0.03008;0.031518;0.032957;0.034395;0.035834;0.037611;0.039388;0.041166;0.042943;0.04472;0.046979;0.049237;0.051496;0.053755;0.056013;0.058941;0.061869;0.064797;0.067725;0.070653;0.074193;0.077734;0.081274;0.084814;0.088355;0.092706;0.097057;0.10141;0.10576;0.11011;0.11555;0.121;0.12644;0.13188;0.13733;0.14408;0.15084;0.1576;0.16435;0.17111;0.17937;0.18763;0.19589;0.20415;0.21241;0.22245;0.23248;0.24252;0.25256;0.2626;0.27469;0.28678;0.29888;0.31097;0.32306;0.33766;0.35225;0.36685;0.38144;0.39604;0.41344;0.43084;0.44824;0.46564;0.48304;0.50338;0.52372;0.54407;0.56441;0.58475;0.60833;0.63192;0.6555;0.67908;0.70266;0.73007;0.75747;0.78488;0.81228;0.83969;0.86999;0.9003;0.9306;0.96091;0.99121;1.0254;1.0595;1.0937;1.1279;1.162;1.1993;1.2365;1.2737;1.3109;1.3482;1.3887;1.4293;1.4699;1.5104;1.551;1.5939;1.6368;1.6797;1.7226;1.7655;1.8112;1.8568;1.9025;1.9482;1.9938;2.041;2.0882;2.1353;2.1825;2.2296;2.2795;2.3293;2.3791;2.4289;2.4788;2.53;2.5813;2.6326;2.6839;2.7351;2.7877;2.8403;2.8929;2.9455;2.9981;3.0522;3.1063;3.1604;3.2145;3.2686;3.3237;3.3788;3.4339;3.489;3.5441;3.6003;3.6564;3.7125;3.7686;3.8247;3.8815;3.9384;3.9952;4.052;4.1089;4.1662;4.2235;4.2808;4.3381;4.3954;4.4527;4.5099;4.5671;4.6244;4.6816;4.7375;4.7934;4.8492;4.9051;4.961;5.0138;5.0666;5.1195;5.1723;5.2251;5.2722;5.3192;5.3662;5.4132;5.4603;5.4992;5.538;5.5769;5.6158;5.6547;5.684;5.7134;5.7427;5.772;5.8013;5.821;5.8408;5.8605;5.8803;5.9;5.9114;5.9229;5.9343;5.9458;5.9572;5.9628;5.9684;5.974;5.9796;5.9852;5.9874;5.9895;5.9917;5.9938;5.996;5.9967;5.9973;5.998;5.9986;5.9993;6 -0.0023882;0.0025106;0.0026329;0.0027552;0.0028776;0.0029999;0.003155;0.00331;0.0034651;0.0036202;0.0037752;0.0039749;0.0041746;0.0043742;0.0045739;0.0047736;0.0050133;0.0052531;0.0054928;0.0057325;0.0059723;0.0062685;0.0065647;0.0068609;0.0071571;0.0074534;0.0078298;0.0082062;0.0085827;0.0089591;0.0093356;0.0098236;0.010312;0.0108;0.011288;0.011776;0.012366;0.012956;0.013546;0.014136;0.014726;0.015451;0.016176;0.016901;0.017627;0.018352;0.019259;0.020166;0.021073;0.02198;0.022888;0.024014;0.02514;0.026266;0.027392;0.028519;0.029895;0.031272;0.032648;0.034025;0.035401;0.037074;0.038747;0.04042;0.042094;0.043767;0.045782;0.047797;0.049813;0.051828;0.053844;0.056276;0.058709;0.061141;0.063574;0.066006;0.068906;0.071806;0.074706;0.077606;0.080506;0.083897;0.087287;0.090678;0.094068;0.097458;0.10139;0.10532;0.10925;0.11318;0.11711;0.12168;0.12625;0.13081;0.13538;0.13995;0.145;0.15005;0.1551;0.16015;0.1652;0.1709;0.17659;0.18228;0.18798;0.19367;0.19988;0.20608;0.21229;0.21849;0.22469;0.23146;0.23822;0.24498;0.25174;0.2585;0.26565;0.2728;0.27995;0.2871;0.29425;0.30186;0.30947;0.31708;0.32469;0.3323;0.34016;0.34803;0.35589;0.36375;0.37161;0.37991;0.38822;0.39652;0.40482;0.41313;0.42167;0.43022;0.43876;0.44731;0.45586;0.46462;0.47338;0.48215;0.49091;0.49968;0.50869;0.51771;0.52673;0.53575;0.54476;0.55395;0.56313;0.57232;0.58151;0.59069;0.60004;0.6094;0.61875;0.6281;0.63745;0.64692;0.6564;0.66587;0.67534;0.68481;0.69437;0.70392;0.71347;0.72302;0.73257;0.74211;0.75165;0.76119;0.77073;0.78026;0.78958;0.79889;0.80821;0.81752;0.82683;0.83564;0.84444;0.85325;0.86205;0.87085;0.87869;0.88653;0.89437;0.90221;0.91004;0.91653;0.92301;0.92949;0.93597;0.94245;0.94734;0.95223;0.95711;0.962;0.96688;0.97017;0.97346;0.97675;0.98004;0.98333;0.98524;0.98715;0.98906;0.99096;0.99287;0.9938;0.99474;0.99567;0.9966;0.99754;0.9979;0.99826;0.99862;0.99897;0.99933;0.99944;0.99955;0.99966;0.99977;0.99988;1 diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c deleted file mode 100644 index 13b9026640..0000000000 --- a/targets/SIMU/USER/init_lte.c +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "init_lte.h" - -#include "PHY/phy_extern.h" - -#include "LAYER2/MAC/mac.h" -#include "LAYER2/MAC/mac_extern.h" -#include "UTIL/LOG/log_if.h" -#include "PHY_INTERFACE/phy_interface.h" - - -/* -PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, - uint8_t eNB_id, - uint8_t Nid_cell, - node_function_t node_function, - uint8_t abstraction_flag) -{ - - int i,j; - PHY_VARS_eNB* PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB)); - memset(PHY_vars_eNB,0,sizeof(PHY_VARS_eNB)); - PHY_vars_eNB->Mod_id=eNB_id; - memcpy(&(PHY_vars_eNB->frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS)); - PHY_vars_eNB->frame_parms.Nid_cell = ((Nid_cell/3)*3)+((eNB_id+Nid_cell)%3); - PHY_vars_eNB->frame_parms.nushift = PHY_vars_eNB->frame_parms.Nid_cell%6; - phy_init_lte_eNB(PHY_vars_eNB,0,abstraction_flag); - - LOG_I(PHY,"init eNB: Node Function %d\n",node_function); - LOG_I(PHY,"init eNB: Nid_cell %d\n", frame_parms->Nid_cell); - LOG_I(PHY,"init eNB: frame_type %d,tdd_config %d\n", frame_parms->frame_type,frame_parms->tdd_config); - LOG_I(PHY,"init eNB: number of ue max %d number of enb max %d number of harq pid max %d\n", - NUMBER_OF_UE_MAX, NUMBER_OF_eNB_MAX, NUMBER_OF_HARQ_PID_MAX); - LOG_I(PHY,"init eNB: N_RB_DL %d\n", frame_parms->N_RB_DL); - LOG_I(PHY,"init eNB: prach_config_index %d\n", frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex); - - if (node_function >= NGFI_RRU_IF5) - // For RRU, don't allocate DLSCH/ULSCH Transport channel buffers - return (PHY_vars_eNB); - - - for (i=0; idlsch[i][j] = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL,abstraction_flag,frame_parms); - if (!PHY_vars_eNB->dlsch[i][j]) { - LOG_E(PHY,"Can't get eNB dlsch structures for UE %d \n", i); - exit(-1); - } else { - LOG_D(PHY,"dlsch[%d][%d] => %p\n",i,j,PHY_vars_eNB->dlsch[i][j]); - PHY_vars_eNB->dlsch[i][j]->rnti=0; - } - } - - - LOG_I(PHY,"Allocating Transport Channel Buffer for ULSCH, UE %d\n",i); - PHY_vars_eNB->ulsch[1+i] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,frame_parms->N_RB_UL, abstraction_flag); - - if (!PHY_vars_eNB->ulsch[1+i]) { - LOG_E(PHY,"Can't get eNB ulsch structures\n"); - exit(-1); - } - - // this is the transmission mode for the signalling channels - // this will be overwritten with the real transmission mode by the RRC once the UE is connected - PHY_vars_eNB->transmission_mode[i] = frame_parms->nb_antenna_ports_eNB==1 ? 1 : 2; -#ifdef LOCALIZATION - PHY_vars_eNB->ulsch[1+i]->aggregation_period_ms = 5000; // 5000 milliseconds // could be given as an argument (TBD)) - struct timeval ts; - gettimeofday(&ts, NULL); - PHY_vars_eNB->ulsch[1+i]->reference_timestamp_ms = ts.tv_sec * 1000 + ts.tv_usec / 1000; - int j; - - for (j=0; j<10; j++) { - initialize(&PHY_vars_eNB->ulsch[1+i]->loc_rss_list[j]); - initialize(&PHY_vars_eNB->ulsch[1+i]->loc_rssi_list[j]); - initialize(&PHY_vars_eNB->ulsch[1+i]->loc_subcarrier_rss_list[j]); - initialize(&PHY_vars_eNB->ulsch[1+i]->loc_timing_advance_list[j]); - initialize(&PHY_vars_eNB->ulsch[1+i]->loc_timing_update_list[j]); - } - - initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_rss_list); - initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_rssi_list); - initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_subcarrier_rss_list); - initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_timing_advance_list); - initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_timing_update_list); -#endif - } - - // ULSCH for RA - PHY_vars_eNB->ulsch[0] = new_eNB_ulsch(MAX_TURBO_ITERATIONS, frame_parms->N_RB_UL, abstraction_flag); - - if (!PHY_vars_eNB->ulsch[0]) { - LOG_E(PHY,"Can't get eNB ulsch structures\n"); - exit(-1); - } - PHY_vars_eNB->dlsch_SI = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, abstraction_flag, frame_parms); - LOG_D(PHY,"eNB %d : SI %p\n",eNB_id,PHY_vars_eNB->dlsch_SI); - PHY_vars_eNB->dlsch_ra = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, abstraction_flag, frame_parms); - LOG_D(PHY,"eNB %d : RA %p\n",eNB_id,PHY_vars_eNB->dlsch_ra); - PHY_vars_eNB->dlsch_MCH = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, 0, frame_parms); - LOG_D(PHY,"eNB %d : MCH %p\n",eNB_id,PHY_vars_eNB->dlsch_MCH); - - - PHY_vars_eNB->rx_total_gain_dB=130; - - for(i=0; imu_mimo_mode[i].dl_pow_off = 2; - - PHY_vars_eNB->check_for_total_transmissions = 0; - - PHY_vars_eNB->check_for_MUMIMO_transmissions = 0; - - PHY_vars_eNB->FULL_MUMIMO_transmissions = 0; - - PHY_vars_eNB->check_for_SUMIMO_transmissions = 0; - - PHY_vars_eNB->frame_parms.pucch_config_common.deltaPUCCH_Shift = 1; - - return (PHY_vars_eNB); -} -*/ - - -/* - -PHY_VARS_RN* init_lte_RN(LTE_DL_FRAME_PARMS *frame_parms, - uint8_t RN_id, - uint8_t eMBMS_active_state) -{ - - int i; - PHY_VARS_RN* PHY_vars_RN = malloc(sizeof(PHY_VARS_RN)); - memset(PHY_vars_RN,0,sizeof(PHY_VARS_RN)); - PHY_vars_RN->Mod_id=RN_id; - - if (eMBMS_active_state == multicast_relay) { - for (i=0; i < 10 ; i++) { // num SF in a frame - PHY_vars_RN->dlsch_rn_MCH[i] = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS_MBSFN,frame_parms->N_RB_DL, 0); - LOG_D(PHY,"eNB %d : MCH[%d] %p\n",RN_id,i,PHY_vars_RN->dlsch_rn_MCH[i]); - } - } else { - PHY_vars_RN->dlsch_rn_MCH[0] = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, 0); - LOG_D(PHY,"eNB %d : MCH[0] %p\n",RN_id,PHY_vars_RN->dlsch_rn_MCH[0]); - } - - return (PHY_vars_RN); -} - -void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], - uint8_t frame_type, - uint8_t tdd_config, - uint8_t tdd_config_S, - uint8_t extended_prefix_flag, - uint8_t N_RB_DL, - uint16_t Nid_cell, - uint8_t cooperation_flag, - uint8_t nb_antenna_ports, - uint8_t abstraction_flag, - int nb_antennas_rx, - int nb_antennas_tx, - int nb_antennas_rx_ue, - uint8_t eMBMS_active_state) -{ - - uint8_t eNB_id,UE_id,CC_id; - int i; - - - mac_xface = malloc(sizeof(MAC_xface)); - - memset(mac_xface, 0, sizeof(MAC_xface)); - - LOG_I(PHY,"init lte parms: Nid_cell %d, Frame type %d, N_RB_DL %d\n",Nid_cell,frame_type,N_RB_DL); - - for (CC_id=0; CC_idframe_type = frame_type; - (frame_parms[CC_id])->tdd_config = tdd_config; - (frame_parms[CC_id])->tdd_config_S = tdd_config_S; - (frame_parms[CC_id])->N_RB_DL = N_RB_DL; - (frame_parms[CC_id])->N_RB_UL = (frame_parms[CC_id])->N_RB_DL; - (frame_parms[CC_id])->phich_config_common.phich_resource = oneSixth; - (frame_parms[CC_id])->phich_config_common.phich_duration = normal; - (frame_parms[CC_id])->Ncp = extended_prefix_flag; - (frame_parms[CC_id])->Ncp_UL = extended_prefix_flag; - (frame_parms[CC_id])->Nid_cell = Nid_cell; - (frame_parms[CC_id])->nushift = (Nid_cell%6); - (frame_parms[CC_id])->nb_antennas_tx = nb_antennas_tx; - (frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx; - (frame_parms[CC_id])->nb_antenna_ports_eNB = nb_antenna_ports; - (frame_parms[CC_id])->mode1_flag = (frame_parms[CC_id])->nb_antenna_ports_eNB==1 ? 1 : 0; - - init_frame_parms(frame_parms[CC_id],1); - - (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0 - (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 1; - (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0; - (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0; - init_ul_hopping(frame_parms[CC_id]); - } - - - // phy_init_top(frame_parms[0]); - - phy_init_lte_top(frame_parms[0]); - - RC.nb_inst = NB_eNB_INST; - RC.nb_CC = (int *)malloc(MAX_NUM_CCs*sizeof(int)); - RC.nb_RU = NB_RU; - for (i=0;iMod_id=eNB_id; - RC.eNB[eNB_id][CC_id]->CC_id=CC_id; - } - } - - - PHY_vars_UE_g = (PHY_VARS_UE***)malloc(NB_UE_INST*sizeof(PHY_VARS_UE**)); - - for (UE_id=0; UE_idnb_antennas_tx = 1; - (frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx_ue; - PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(frame_parms[CC_id], UE_id,abstraction_flag); - PHY_vars_UE_g[UE_id][CC_id]->Mod_id=UE_id; - PHY_vars_UE_g[UE_id][CC_id]->CC_id=CC_id; - } - } - -// if (NB_RN_INST > 0) { -// PHY_vars_RN_g = malloc(NB_RN_INST*sizeof(PHY_VARS_RN*)); - -// for (RN_id=0; RN_id -#include -#include -#include -#include -#include -#include -#include -#include - -#include "event_handler.h" -#include "SIMULATION/RF/rf.h" -#include "PHY/types.h" -#include "PHY/defs_eNB.h" -#include "PHY/defs_UE.h" -#include "PHY/LTE_TRANSPORT/transport_proto.h" -#include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h" -#include "PHY/phy_vars.h" -#include "PHY/phy_vars_ue.h" -#include "SCHED/sched_common_vars.h" - -#include "LAYER2/MAC/mac.h" -#include "LAYER2/MAC/mac_proto.h" -#include "LAYER2/MAC/mac_vars.h" -#include "pdcp.h" -#include "RRC/LTE/rrc_vars.h" -#include "RRC/NAS/nas_config.h" - -#include "system.h" - - -#include "PHY/TOOLS/lte_phy_scope.h" - - -#ifdef SMBV -// Rohde&Schwarz SMBV100A vector signal generator -#include "PHY/TOOLS/smbv.h" -char smbv_fname[] = "smbv_config_file.smbv"; -unsigned short smbv_nframes = 4; // how many frames to configure 1,..,4 -unsigned short config_frames[4] = {2,9,11,13}; -unsigned char smbv_frame_cnt = 0; -uint8_t config_smbv = 0; -char smbv_ip[16]; -#endif - -#include "flexran_agent.h" - - -#include "oaisim_functions.h" - -#include "oaisim.h" -#include "oaisim_config.h" -#include "UTIL/OCG/OCG_extern.h" -#include "cor_SF_sim.h" -#include "UTIL/OMG/omg_constants.h" -#include "UTIL/FIFO/pad_list.h" -#include "enb_app.h" - -#include "../PROC/interface.h" -#include "../PROC/channel_sim_proc.h" -#include "../PROC/Tsync.h" -#include "../PROC/Process.h" - -#include "UTIL/LOG/vcd_signal_dumper.h" -#include "UTIL/OTG/otg_kpi.h" -#include "assertions.h" - -#if defined(ENABLE_ITTI) -# include "intertask_interface.h" -# include "create_tasks.h" -# include "intertask_interface_init.h" -#endif - -#include "T.h" - -/* - DCI0_5MHz_TDD0_t UL_alloc_pdu; - DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; - DCI2_5MHz_2A_L10PRB_TDD_t DLSCH_alloc_pdu1; - DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2; -*/ - -#define UL_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,24) -#define CCCH_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,3) -#define RA_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,3) -#define DLSCH_RB_ALLOC 0x1fff - -#define DECOR_DIST 100 -#define SF_VAR 10 - -//constant for OAISIM soft realtime calibration -//#define SF_DEVIATION_OFFSET_NS 100000 /*= 0.1ms : should be as a number of UE */ -//#define SLEEP_STEP_US 100 /* = 0.01ms could be adaptive, should be as a number of UE */ -//#define K 2 /* averaging coefficient */ -//#define TARGET_SF_TIME_NS 1000000 /* 1ms = 1000000 ns */ - -uint8_t usim_test = 0; - -frame_t frame = 0; -char stats_buffer[16384]; -channel_desc_t *RU2UE[NUMBER_OF_RU_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs]; -channel_desc_t *UE2RU[NUMBER_OF_UE_MAX][NUMBER_OF_RU_MAX][MAX_NUM_CCs]; -//Added for PHY abstraction -node_desc_t *enb_data[NUMBER_OF_RU_MAX]; -node_desc_t *ue_data[NUMBER_OF_UE_MAX]; - -pthread_cond_t sync_cond; -pthread_mutex_t sync_mutex; -int sync_var=-1; - -pthread_mutex_t subframe_mutex; -int subframe_ru_mask=0,subframe_UE_mask=0; - -openair0_config_t openair0_cfg[MAX_CARDS]; -uint32_t downlink_frequency[MAX_NUM_CCs][4]; -int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; -openair0_rf_map rf_map[MAX_NUM_CCs]; - -#if defined(ENABLE_ITTI) -volatile int start_eNB = 0; -volatile int start_UE = 0; -#endif -volatile int oai_exit = 0; - - -//int32_t **rxdata; -//int32_t **txdata; - -uint16_t sf_ahead=4; -uint8_t nfapi_mode = 0; - -// Added for PHY abstraction -extern node_list* ue_node_list; -extern node_list* enb_node_list; -extern int pdcp_period, omg_period; - -extern double **s_re, **s_im, **r_re, **r_im, **r_re0, **r_im0; -int map1, map2; -extern double **ShaF; -double snr_dB, sinr_dB, snr_direction; //,sinr_direction; -extern double snr_step; -extern uint8_t set_sinr; -extern uint8_t ue_connection_test; -extern uint8_t set_seed; -extern uint8_t target_dl_mcs; -extern uint8_t target_ul_mcs; -extern uint8_t abstraction_flag; -extern uint8_t ethernet_flag; -extern uint16_t Nid_cell; - - -double cpuf; -#include "threads_t.h" -threads_t threads= {-1,-1,-1,-1,-1,-1,-1}; - -//#ifdef XFORMS -int otg_enabled; -int xforms=0; -//#endif - -time_stats_t oaisim_stats; -time_stats_t oaisim_stats_f; -time_stats_t dl_chan_stats; -time_stats_t ul_chan_stats; - -int emulate_rf = 0; -int numerology = 0; -int codingw = 0; -int fepw = 0; - -// this should reflect the channel models in openair1/SIMULATION/TOOLS/defs.h -mapping small_scale_names[] = { - { "custom", custom }, { "SCM_A", SCM_A }, - { "SCM_B", SCM_B }, { "SCM_C", SCM_C }, - { "SCM_D", SCM_D }, { "EPA", EPA }, - { "EVA", EVA }, { "ETU", ETU }, - { "MBSFN", MBSFN }, { "Rayleigh8", Rayleigh8 }, - { "Rayleigh1", Rayleigh1 }, { "Rayleigh1_800", Rayleigh1_800 }, - { "Rayleigh1_corr", Rayleigh1_corr }, { "Rayleigh1_anticorr", Rayleigh1_anticorr }, - { "Rice8", Rice8 }, { "Rice1", Rice1 }, { "Rice1_corr", Rice1_corr }, - { "Rice1_anticorr", Rice1_anticorr }, { "AWGN", AWGN }, { NULL,-1 } -}; -#if !defined(ENABLE_ITTI) -static void * -sigh (void *arg); -#endif -void -oai_shutdown (void); - -void reset_opp_meas_oaisim (void); - -void wait_eNBs(void) -{ - return; -} - -void -help (void) -{ - printf ("Usage: oaisim -h -a -F -C tdd_config -K [log_file] -V [vcd_file] -R N_RB_DL -e -x transmission_mode -m target_dl_mcs -r(ate_adaptation) -n n_frames -s snr_dB -k ricean_factor -t max_delay -f forgetting factor -A channel_model -z cooperation_flag -u nb_local_ue -U UE mobility -b nb_local_enb -B eNB_mobility -M ethernet_flag -p nb_master -g multicast_group -l log_level -c ocg_enable -T traffic model -D multicast network device\n"); - - printf ("-h provides this help message!\n"); - printf ("-a Activates PHY abstraction mode\n"); - printf ("-A set the multipath channel simulation, options are: SCM_A, SCM_B, SCM_C, SCM_D, EPA, EVA, ETU, Rayleigh8, Rayleigh1, Rayleigh1_corr,Rayleigh1_anticorr, Rice8,, Rice1, AWGN \n"); - printf ("-b Set the number of local eNB\n"); - printf ("-B Set the mobility model for eNB, options are: STATIC, RWP, RWALK, \n"); - printf ("-c [1,2,3,4] Activate the config generator (OCG) to process the scenario descriptor, or give the scenario manually: -c template_1.xml \n"); - printf ("-C [0-6] Sets TDD configuration\n"); - printf ("-e Activates extended prefix mode\n"); - printf ("-E Random number generator seed\n"); - printf ("-f Set the forgetting factor for time-variation\n"); - printf ("-F Activates FDD transmission (TDD is default)\n"); - printf ("-g Set multicast group ID (0,1,2,3) - valid if M is set\n"); - printf ("-G Enable background traffic \n"); - printf ("-H Enable handover operation (default disabled) \n"); - printf ("-I Enable CLI interface (to connect use telnet localhost 1352)\n"); - printf ("-k Set the Ricean factor (linear)\n"); - printf ("-K [log_file] Enable ITTI logging into log_file\n"); - printf ("-l Set the global log level (8:trace, 7:debug, 6:info, 4:warn, 3:error) \n"); - printf ("-L [0-1] 0 to disable new link adaptation, 1 to enable new link adapatation\n"); - printf ("-m Gives a fixed DL mcs for eNB scheduler\n"); - printf ("-M Set the machine ID for Ethernet-based emulation\n"); - printf ("-n Set the number of frames for the simulation. 0 for no limit\n"); - printf ("-O [enb_conf_file] eNB configuration file name\n"); - printf ("-p Set the total number of machine in emulation - valid if M is set\n"); - printf ("-P [trace type] Enable protocol analyzer. Possible values for OPT:\n"); - printf (" - wireshark: Enable tracing of layers above PHY using an UDP socket\n"); - printf (" - pcap: Enable tracing of layers above PHY to a pcap file\n"); - printf (" - tshark: Not implemented yet\n"); - printf ("-q Enable Openair performance profiler \n"); - printf ("-Q Activate and set the MBMS service: 0 : not used (default eMBMS disabled), 1: eMBMS and RRC Connection enabled, 2: eMBMS relaying and RRC Connection enabled, 3: eMBMS enabled, RRC Connection disabled, 4: eMBMS relaying enabled, RRC Connection disabled\n"); - printf ("-R [6,15,25,50,75,100] Sets N_RB_DL\n"); - printf ("-r Activates rate adaptation (DL for now)\n"); - printf ("-s snr_dB set a fixed (average) SNR, this deactivates the openair channel model generator (OCM)\n"); - printf ("-S snir_dB set a fixed (average) SNIR, this deactivates the openair channel model generator (OCM)\n"); - printf ("-t Gives a fixed UL mcs for eNB scheduler\n"); - printf ("-T activate the traffic generator. Valide options are m2m,scbr,mcbr,bcbr,auto_pilot,bicycle_race,open_arena,team_fortress,m2m_traffic,auto_pilot_l,auto_pilot_m,auto_pilot_h,auto_pilot_e,virtual_game_l,virtual_game_m,virtual_game_h,virtual_game_f,alarm_humidity,alarm_smoke,alarm_temperature,openarena_dl,openarena_ul,voip_g711,voip_g729,video_vbr_10mbps,video_vbr_4mbps,video_vbr_2mbp,video_vbr_768kbps,video_vbr_384kbps,video_vbr_192kpbs,background_users\n"); - printf ("-u Set the number of local UE\n"); - printf ("-U Set the mobility model for UE, options are: STATIC, RWP, RWALK\n"); - printf ("-V [vcd_file] Enable VCD dump into vcd_file\n"); - printf ("-w number of CBA groups, if not specified or zero, CBA is inactive\n"); -#ifdef SMBV - printf ("-W IP address to connect to Rohde&Schwarz SMBV100A and configure SMBV from config file. -W0 uses default IP 192.168.12.201\n"); -#else - printf ("-W [Rohde&Schwarz SMBV100A functions disabled. Recompile with SMBV=1]\n"); -#endif - printf ("-x deprecated. Set the transmission mode in config file!\n"); - printf ("-y Set the number of receive antennas at the UE (1 or 2)\n"); - printf ("-Y Set the global log verbosity (none, low, medium, high, full) \n"); - printf ("-z Set the cooperation flag (0 for no cooperation, 1 for delay diversity and 2 for distributed alamouti\n"); - printf ("-Z Reserved\n"); - printf ("--xforms Activate the grapical scope\n"); - -#if T_TRACER - printf ("--T_port [port] use given port\n"); - printf ("--T_nowait don't wait for tracer, start immediately\n"); - printf ("--T_dont_fork to ease debugging with gdb\n"); -#endif -} - -pthread_t log_thread; - -void -log_thread_init (void) -{ - //create log_list - //log_list_init(&log_list); -#ifndef LOG_NO_THREAD - - log_shutdown = 0; - - if ((pthread_mutex_init (&log_lock, NULL) != 0) - || (pthread_cond_init (&log_notify, NULL) != 0)) { - return; - } - - if (pthread_create (&log_thread, NULL, log_thread_function, (void*) NULL) - != 0) { - log_thread_finalize (); - return; - } - -#endif - -} - -//Call it after the last LOG call -int -log_thread_finalize (void) -{ - int err = 0; - -#ifndef LOG_NO_THREAD - - if (pthread_mutex_lock (&log_lock) != 0) { - return -1; - } - - log_shutdown = 1; - - /* Wake up LOG thread */ - if ((pthread_cond_broadcast (&log_notify) != 0) - || (pthread_mutex_unlock (&log_lock) != 0)) { - err = -1; - } - - if (pthread_join (log_thread, NULL) != 0) { - err = -1; - } - - if (pthread_mutex_unlock (&log_lock) != 0) { - err = -1; - } - - if (!err) { - //log_list_free(&log_list); - pthread_mutex_lock (&log_lock); - pthread_mutex_destroy (&log_lock); - pthread_cond_destroy (&log_notify); - } - -#endif - - return err; -} - -#if defined(ENABLE_ITTI) -static void set_cli_start(module_id_t module_idP, uint8_t start) -{ - if (module_idP < NB_eNB_INST) { - oai_emulation.info.cli_start_enb[module_idP] = start; - } else { - oai_emulation.info.cli_start_ue[module_idP - NB_eNB_INST] = start; - } -} -#endif - -#ifdef OPENAIR2 -int omv_write(int pfd, node_list* enb_node_list, node_list* ue_node_list, Data_Flow_Unit omv_data) -{ - module_id_t i; - omv_data.end = 0; - - //omv_data.total_num_nodes = NB_UE_INST + NB_eNB_INST; - for (i = 0; i < NB_eNB_INST; i++) { - if (enb_node_list != NULL) { - omv_data.geo[i].x = (enb_node_list->node->x_pos < 0.0) ? 0.0 : enb_node_list->node->x_pos; - omv_data.geo[i].y = (enb_node_list->node->y_pos < 0.0) ? 0.0 : enb_node_list->node->y_pos; - omv_data.geo[i].z = 1.0; - omv_data.geo[i].mobility_type = oai_emulation.info.omg_model_enb; - omv_data.geo[i].node_type = 0; //eNB - enb_node_list = enb_node_list->next; - omv_data.geo[i].Neighbors = 0; -/* - for (j = NB_RU; j < NB_UE_INST + NB_RU; j++) { - if (is_UE_active (i, j - NB_RU) == 1) { - omv_data.geo[i].Neighbor[omv_data.geo[i].Neighbors] = j; - omv_data.geo[i].Neighbors++; - LOG_D( - OMG, - "[RU %d][UE %d] is_UE_active(i,j) %d geo (x%d, y%d) num neighbors %d\n", i, j-NB_RU, is_UE_active(i,j-NB_RU), omv_data.geo[i].x, omv_data.geo[i].y, omv_data.geo[i].Neighbors); - } - } -*/ - } - } - - for (i = NB_RU; i < NB_UE_INST + NB_RU; i++) { - if (ue_node_list != NULL) { - omv_data.geo[i].x = (ue_node_list->node->x_pos < 0.0) ? 0.0 : ue_node_list->node->x_pos; - omv_data.geo[i].y = (ue_node_list->node->y_pos < 0.0) ? 0.0 : ue_node_list->node->y_pos; - omv_data.geo[i].z = 1.0; - omv_data.geo[i].mobility_type = oai_emulation.info.omg_model_ue; - omv_data.geo[i].node_type = 1; //UE - //trial - omv_data.geo[i].state = 1; - omv_data.geo[i].rnti = 88; - omv_data.geo[i].connected_eNB = 0; - omv_data.geo[i].RSRP = 66; - omv_data.geo[i].RSRQ = 55; - omv_data.geo[i].Pathloss = 44; - omv_data.geo[i].RSSI[0] = 33; - omv_data.geo[i].RSSI[1] = 22; - - if ((sizeof(omv_data.geo[0].RSSI) / sizeof(omv_data.geo[0].RSSI[0])) > 2) { - omv_data.geo[i].RSSI[2] = 11; - } - - ue_node_list = ue_node_list->next; - omv_data.geo[i].Neighbors = 0; -/* - for (j = 0; j < NB_RU; j++) { - if (is_UE_active (j, i - NB_RU) == 1) { - omv_data.geo[i].Neighbor[omv_data.geo[i].Neighbors] = j; - omv_data.geo[i].Neighbors++; - LOG_D( - OMG, - "[UE %d][RU %d] is_UE_active %d geo (x%d, y%d) num neighbors %d\n", i-NB_RU, j, is_UE_active(j,i-NB_RU), omv_data.geo[i].x, omv_data.geo[i].y, omv_data.geo[i].Neighbors); - } - } -*/ - } - } - - LOG_E(OMG, "pfd %d \n", pfd); - - if (write (pfd, &omv_data, sizeof(struct Data_Flow_Unit)) == -1) - perror ("write omv failed"); - - return 1; -} - -void omv_end(int pfd, Data_Flow_Unit omv_data) -{ - omv_data.end = 1; - - if (write (pfd, &omv_data, sizeof(struct Data_Flow_Unit)) == -1) - perror ("write omv failed"); -} -#endif - -#ifdef OPENAIR2 -int pfd[2]; // fd for omv : fixme: this could be a local var -#endif - -#ifdef OPENAIR2 -static Data_Flow_Unit omv_data; -#endif //ALU -static module_id_t UE_inst = 0; -static module_id_t eNB_inst = 0; -static module_id_t ru_id; - -Packet_OTG_List_t *otg_pdcp_buffer; - -typedef enum l2l1_task_state_e { - L2L1_WAITTING, L2L1_RUNNING, L2L1_TERMINATED, -} l2l1_task_state_t; - -l2l1_task_state_t l2l1_state = L2L1_WAITTING; - -extern openair0_timestamp current_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs]; -extern openair0_timestamp current_UE_rx_timestamp[NUMBER_OF_UE_MAX][MAX_NUM_CCs]; -extern openair0_timestamp last_eNB_rx_timestamp[NUMBER_OF_eNB_MAX][MAX_NUM_CCs]; -extern openair0_timestamp last_UE_rx_timestamp[NUMBER_OF_UE_MAX][MAX_NUM_CCs]; - -/*------------------------------------------------------------------------------*/ -void * -l2l1_task (void *args_p) -{ - - int CC_id; - - // Framing variables - int32_t sf; - - //char fname[64], vname[64]; - - //#ifdef XFORMS - // current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0) - // at eNB 0, an UL scope for every UE - FD_lte_phy_scope_ue *form_ue[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - FD_lte_phy_scope_enb *form_enb[NUMBER_OF_UE_MAX]; - char title[255]; - char xname[32] = "oaisim"; - int xargc = 1; - char *xargv[1]; - //#endif - -#undef PRINT_STATS /* this undef is to avoid gcc warnings */ -#define PRINT_STATS -#ifdef PRINT_STATS - //int len; - FILE *UE_stats[NUMBER_OF_UE_MAX]; - FILE *UE_stats_th[NUMBER_OF_UE_MAX]; - FILE *eNB_stats[NUMBER_OF_eNB_MAX]; - FILE *eNB_avg_thr; - FILE *eNB_l2_stats; - char UE_stats_filename[255]; - char eNB_stats_filename[255]; - char UE_stats_th_filename[255]; - char eNB_stats_th_filename[255]; -#endif - - - if (xforms==1) { - xargv[0] = xname; - fl_initialize (&xargc, xargv, NULL, 0, 0); - eNB_inst = 0; - for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) { - for (CC_id=0;CC_idlte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title); - - if (PHY_vars_UE_g[UE_inst][CC_id]->use_ia_receiver == 1) { - fl_set_button(form_ue[CC_id][UE_inst]->button_0,1); - fl_set_object_label(form_ue[CC_id][UE_inst]->button_0, "IA Receiver ON"); - fl_set_object_color(form_ue[CC_id][UE_inst]->button_0, FL_GREEN, FL_GREEN); - } - - } - } - } - - -#ifdef PRINT_STATS - - for (UE_inst=0; UE_inst 0) && - (oai_emulation.info.node_function[0] < NGFI_RAU_IF4p5)) { - /* Wait for the initialize message */ - do { - if (message_p != NULL) { - result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - } - - itti_receive_msg (TASK_L2L1, &message_p); - msg_name = ITTI_MSG_NAME (message_p); - LOG_I(EMU, "TASK_L2L1 received %s in state L2L1_WAITTING\n", msg_name); - - switch (ITTI_MSG_ID(message_p)) { - case INITIALIZE_MESSAGE: - l2l1_state = L2L1_RUNNING; - start_eNB = 1; - break; - - case ACTIVATE_MESSAGE: - set_cli_start(ITTI_MSG_INSTANCE (message_p), 1); - break; - - case DEACTIVATE_MESSAGE: - set_cli_start(ITTI_MSG_INSTANCE (message_p), 0); - break; - - case TERMINATE_MESSAGE: - l2l1_state = L2L1_TERMINATED; - break; - - default: - LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p)); - break; - } - } while (l2l1_state == L2L1_WAITTING); - - result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - } - -#endif - - - - start_meas (&oaisim_stats); - - for (frame = 0; - (l2l1_state != L2L1_TERMINATED) && - ((oai_emulation.info.n_frames_flag == 0) || - (frame < oai_emulation.info.n_frames)); - frame++) { - -#if defined(ENABLE_ITTI) - - do { - // Checks if a message has been sent to L2L1 task - itti_poll_msg (TASK_L2L1, &message_p); - - if (message_p != NULL) { - msg_name = ITTI_MSG_NAME (message_p); - LOG_I(EMU, "TASK_L2L1 received %s\n", msg_name); - - switch (ITTI_MSG_ID(message_p)) { - case ACTIVATE_MESSAGE: - set_cli_start(ITTI_MSG_INSTANCE (message_p), 1); - break; - - case DEACTIVATE_MESSAGE: - set_cli_start(ITTI_MSG_INSTANCE (message_p), 0); - break; - - case TERMINATE_MESSAGE: - l2l1_state = L2L1_TERMINATED; - break; - - case MESSAGE_TEST: - break; - - default: - LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p)); - break; - } - - result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - } - } while(message_p != NULL); - -#endif - - //Run the aperiodic user-defined events - if (oai_emulation.info.oeh_enabled == 1) - execute_events (frame); - - if (ue_connection_test == 1) { - if ((frame % 20) == 0) { - snr_dB += snr_direction; - sinr_dB -= snr_direction; - } - - if (snr_dB == -20) { - snr_direction = snr_step; - } else if (snr_dB == 20) { - snr_direction = -snr_step; - } - } - - oai_emulation.info.frame = frame; - //oai_emulation.info.time_ms += 1; - oai_emulation.info.time_s += 0.01; // emu time in s, each frame lasts for 10 ms // JNote: TODO check the coherency of the time and frame (I corrected it to 10 (instead of 0.01) - - //update_omg (frame); // frequency is defined in the omg_global params configurable by the user - //update_omg_ocm (); - -#ifdef OPENAIR2 - - // check if pipe is still open - if ((oai_emulation.info.omv_enabled == 1)) { - omv_write (pfd[1], enb_node_list, ue_node_list, omv_data); - } - -#endif - - - - for (sf = 0; sf < 10; sf++) { - LOG_D(EMU,"************************* Subframe %d\n",sf); - start_meas (&oaisim_stats_f); - - wait_for_slot_isr (); - -#if defined(ENABLE_ITTI) - itti_update_lte_time(frame % MAX_FRAME_NUMBER, sf<<1); -#endif - - oai_emulation.info.time_ms = frame * 10 + sf; - -#ifdef PROC - - if(Channel_Flag==1) - Channel_Func(s_re2,s_im2,r_re2,r_im2,r_re02,r_im02,r_re0_d,r_im0_d,r_re0_u,r_im0_u,RU2UE,UE2RU,enb_data,ue_data,abstraction_flag,frame_parms,sf<<1); - - if(Channel_Flag==0) -#endif - { // SUBFRAME INNER PART -#if defined(ENABLE_ITTI) - log_set_instance_type (LOG_INSTANCE_ENB); -#endif - - - CC_id=0; - int all_done=0; - while (all_done==0) { - - pthread_mutex_lock(&subframe_mutex); - int subframe_ru_mask_local = (subframe_select(&RC.ru[0]->frame_parms,(sf+4)%10)!=SF_UL) ? subframe_ru_mask : ((1<frame_parms.frame_type == FDD || subframe_select(&RC.ru[0]->frame_parms,(sf+4)%10)!=SF_DL) ? subframe_UE_mask : ((1<frame_parms.samples_per_tti; - LOG_D(EMU,"RU %d/%d: TS %"PRIi64"\n",ru_id,CC_id,current_ru_rx_timestamp[ru_id][CC_id]); - } - for (UE_inst = 0; UE_instframe_parms.samples_per_tti; - LOG_D(EMU,"UE %d/%d: TS %"PRIi64"\n",UE_inst,CC_id,current_UE_rx_timestamp[UE_inst][CC_id]); - } - - for (eNB_inst = oai_emulation.info.first_enb_local; - (eNB_inst - < (oai_emulation.info.first_enb_local - + oai_emulation.info.nb_enb_local)); - eNB_inst++) { - if (oai_emulation.info.cli_start_enb[eNB_inst] != 0) { - - /* - LOG_D(EMU, - "PHY procedures eNB %d for frame %d, subframe %d TDD %d/%d Nid_cell %d\n", - eNB_inst, - frame % MAX_FRAME_NUMBER, - sf, - PHY_vars_eNB_g[eNB_inst][0]->frame_parms.frame_type, - PHY_vars_eNB_g[eNB_inst][0]->frame_parms.tdd_config, - PHY_vars_eNB_g[eNB_inst][0]->frame_parms.Nid_cell); - - */ -#ifdef PRINT_STATS - - if((sf==9) && frame%10==0) - if(eNB_avg_thr) - fprintf(eNB_avg_thr,"%d %d\n",RC.eNB[eNB_inst][0]->proc.proc_rxtx[sf&1].frame_tx, - (RC.eNB[eNB_inst][0]->total_system_throughput)/((RC.eNB[eNB_inst][0]->proc.proc_rxtx[sf&1].frame_tx+1)*10)); - /* - if (eNB_stats[eNB_inst]) { - len = dump_eNB_stats(RC.eNB[eNB_inst][0], stats_buffer, 0); - rewind (eNB_stats[eNB_inst]); - fwrite (stats_buffer, 1, len, eNB_stats[eNB_inst]); - fflush(eNB_stats[eNB_inst]); - } -#ifdef OPENAIR2 - if (eNB_l2_stats) { - len = dump_eNB_l2_stats (stats_buffer, 0); - rewind (eNB_l2_stats); - fwrite (stats_buffer, 1, len, eNB_l2_stats); - fflush(eNB_l2_stats); - } - -#endif -*/ -#endif - } - }// eNB_inst loop - - -#if defined(ENABLE_ITTI) - log_set_instance_type (LOG_INSTANCE_UE); -#endif - - - if ((sf == 0) && ((frame % MAX_FRAME_NUMBER) == 0) && (abstraction_flag == 0) - && (oai_emulation.info.n_frames == 1)) { - - write_output ("dlchan0.m", - "dlch0", - &(PHY_vars_UE_g[0][0]->common_vars.common_vars_rx_data_per_thread[0].dl_ch_estimates[0][0][0]), - (6 - * (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)), - 1, 1); - write_output ("dlchan1.m", - "dlch1", - &(PHY_vars_UE_g[0][0]->common_vars.common_vars_rx_data_per_thread[0].dl_ch_estimates[1][0][0]), - (6 - * (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)), - 1, 1); - write_output ("dlchan2.m", - "dlch2", - &(PHY_vars_UE_g[0][0]->common_vars.common_vars_rx_data_per_thread[0].dl_ch_estimates[2][0][0]), - (6 - * (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)), - 1, 1); - write_output ("pbch_rxF_comp0.m", - "pbch_comp0", - PHY_vars_UE_g[0][0]->pbch_vars[0]->rxdataF_comp[0], - 6 * 12 * 4, 1, 1); - write_output ("pbch_rxF_llr.m", "pbch_llr", - PHY_vars_UE_g[0][0]->pbch_vars[0]->llr, - (PHY_vars_UE_g[0][0]->frame_parms.Ncp == 0) ? 1920 : 1728, 1, - 4); - } - - stop_meas (&oaisim_stats_f); - } // SUBFRAME INNER PART - - - } - //update_ocm (); - /* - if ((frame >= 10) && (frame <= 11) && (abstraction_flag == 0) -#ifdef PROC - &&(Channel_Flag==0) -#endif - ) { - sprintf (fname, "UEtxsig%d.m", frame % MAX_FRAME_NUMBER); - sprintf (vname, "txs%d", frame % MAX_FRAME_NUMBER); - write_output (fname, - vname, - PHY_vars_UE_g[0][0]->common_vars.txdata[0], - PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti - * 10, - 1, 1); - sprintf (fname, "eNBtxsig%d.m", frame % MAX_FRAME_NUMBER); - sprintf (vname, "txs%d", frame % MAX_FRAME_NUMBER); - write_output (fname, - vname, - PHY_vars_eNB_g[0][0]->common_vars.txdata[0][0], - PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti - * 10, - 1, 1); - sprintf (fname, "eNBtxsigF%d.m", frame % MAX_FRAME_NUMBER); - sprintf (vname, "txsF%d", frame % MAX_FRAME_NUMBER); - write_output (fname, - vname, - PHY_vars_eNB_g[0][0]->common_vars.txdataF[0][0], - PHY_vars_eNB_g[0][0]->frame_parms.symbols_per_tti - * PHY_vars_eNB_g[0][0]->frame_parms.ofdm_symbol_size, - 1, 1); - sprintf (fname, "UErxsig%d.m", frame % MAX_FRAME_NUMBER); - sprintf (vname, "rxs%d", frame % MAX_FRAME_NUMBER); - write_output (fname, - vname, - PHY_vars_UE_g[0][0]->common_vars.rxdata[0], - PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti - * 10, - 1, 1); - sprintf (fname, "eNBrxsig%d.m", frame % MAX_FRAME_NUMBER); - sprintf (vname, "rxs%d", frame % MAX_FRAME_NUMBER); - write_output (fname, - vname, - PHY_vars_eNB_g[0][0]->common_vars.rxdata[0][0], - PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti - * 10, - 1, 1); - } - */ - - //#ifdef XFORMS - if (xforms==1) { - eNB_inst = 0; - - for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) { - for (CC_id=0;CC_id0) { - pthread_cond_wait(&RC.ru_cond,&RC.ru_mutex); - } - - // copy frame parameters from RU to UEs - for (i=0;iframe_parms.N_RB_DL = RC.ru[0]->frame_parms.N_RB_DL; - PHY_vars_UE_g[i][0]->frame_parms.N_RB_UL = RC.ru[0]->frame_parms.N_RB_UL; - PHY_vars_UE_g[i][0]->frame_parms.nb_antennas_tx = 1; - PHY_vars_UE_g[i][0]->frame_parms.nb_antennas_rx = 1; - // set initially to 2, it will be revised after initial synchronization - PHY_vars_UE_g[i][0]->frame_parms.nb_antenna_ports_eNB = 2; - PHY_vars_UE_g[i][0]->frame_parms.tdd_config = 1; - PHY_vars_UE_g[i][0]->frame_parms.dl_CarrierFreq = RC.ru[0]->frame_parms.dl_CarrierFreq; - PHY_vars_UE_g[i][0]->frame_parms.ul_CarrierFreq = RC.ru[0]->frame_parms.ul_CarrierFreq; - PHY_vars_UE_g[i][0]->frame_parms.eutra_band = RC.ru[0]->frame_parms.eutra_band; - LOG_I(PHY,"Initializing UE %d frame parameters from RU information: N_RB_DL %d, p %d, dl_Carrierfreq %u, ul_CarrierFreq %u, eutra_band %d\n", - i, - PHY_vars_UE_g[i][0]->frame_parms.N_RB_DL, - PHY_vars_UE_g[i][0]->frame_parms.nb_antenna_ports_eNB, - PHY_vars_UE_g[i][0]->frame_parms.dl_CarrierFreq, - PHY_vars_UE_g[i][0]->frame_parms.ul_CarrierFreq, - PHY_vars_UE_g[i][0]->frame_parms.eutra_band); - - current_UE_rx_timestamp[i][0] = RC.ru[0]->frame_parms.samples_per_tti + RC.ru[0]->frame_parms.ofdm_symbol_size + RC.ru[0]->frame_parms.nb_prefix_samples0; - - } - - - - - for (ru_id=0;ru_idframe_parms.samples_per_tti; - - printf("RUs are ready, let's go\n"); -} - -void init_UE(int,int,int,int); -void init_RU(const char*); - -void set_UE_defaults(int nb_ue) { - - for (int UE_id = 0;UE_idpdcch_vars[i][0]->dciFormat = 0; - PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[i][0]->agregationLevel = 0xFF; - } - PHY_vars_UE_g[UE_id][CC_id]->current_dlsch_cqi[0] = 10; - PHY_vars_UE_g[UE_id][CC_id]->tx_power_max_dBm = 23; - } - } -} - - -static void print_current_directory(void) -{ - char dir[8192]; /* arbitrary size (should be big enough) */ - if (getcwd(dir, 8192) == NULL) - printf("ERROR getting working directory\n"); - else - printf("working directory: %s\n", dir); -} - -void init_devices(void); - -int main (int argc, char **argv) -{ - - clock_t t; - - print_current_directory(); - - start_background_system(); - -#ifdef SMBV - // Rohde&Schwarz SMBV100A vector signal generator - strcpy(smbv_ip,DEFAULT_SMBV_IP); -#endif - -#ifdef PROC - int node_id; - int port,Process_Flag=0,wgt,Channel_Flag=0,temp; -#endif - - //default parameters - oai_emulation.info.n_frames = MAX_FRAME_NUMBER; //1024; //10; - oai_emulation.info.n_frames_flag = 0; //fixme - snr_dB = 30; - NB_UE_INST = 1; - - //Default values if not changed by the user in get_simulation_options(); - pdcp_period = 1; - omg_period = 1; - //Clean ip rule table - for(int i =0; i>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU initialization done <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); - -#ifndef PACKAGE_VERSION -# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL" -#endif - LOG_I(EMU, "Version: %s\n", PACKAGE_VERSION); - -#if defined(ENABLE_ITTI) - - // Handle signals until all tasks are terminated - itti_wait_tasks_end(); - -#else - - if (oai_emulation.info.nb_enb_local > 0) { - eNB_app_task (NULL); // do nothing for the moment - } - - l2l1_task (NULL); -#endif - t = clock () - t; - LOG_I(EMU, "Duration of the simulation: %f seconds\n", - ((float) t) / CLOCKS_PER_SEC); - - LOG_N(EMU, - ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU Ending <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); - - raise (SIGINT); - // oai_shutdown (); - - return (0); -} - -void -reset_opp_meas_oaisim (void) -{ - uint8_t eNB_id = 0, UE_id = 0; - - reset_meas (&oaisim_stats); - reset_meas (&oaisim_stats_f); // frame - - // init time stats here (including channel) - reset_meas (&dl_chan_stats); - reset_meas (&ul_chan_stats); - - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - reset_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc[0]); - reset_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc[1]); - reset_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc_rx[0]); - reset_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc_rx[1]); - reset_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc_tx); - - // reset_meas (&PHY_vars_UE_g[UE_id][0]->ofdm_demod_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->rx_dft_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_channel_estimation_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_freq_offset_estimation_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_decoding_stats[0]); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_decoding_stats[1]); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_rate_unmatching_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_turbo_decoding_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_deinterleaving_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_llr_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_unscrambling_stats); - - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_init_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_alpha_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_beta_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_gamma_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_ext_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_intl1_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_intl2_stats); - - reset_meas (&PHY_vars_UE_g[UE_id][0]->tx_prach); - - reset_meas (&PHY_vars_UE_g[UE_id][0]->ofdm_mod_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_encoding_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_modulation_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_segmentation_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_rate_matching_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_turbo_encoding_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_interleaving_stats); - reset_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_multiplexing_stats); - - - /* - * L2 functions - */ - - // UE MAC - reset_meas (&UE_mac_inst[UE_id].ue_scheduler); // total - reset_meas (&UE_mac_inst[UE_id].tx_ulsch_sdu); // inlcude rlc_data_req + mac header gen - reset_meas (&UE_mac_inst[UE_id].rx_dlsch_sdu); // include mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind and mac header parser - reset_meas (&UE_mac_inst[UE_id].ue_query_mch); - reset_meas (&UE_mac_inst[UE_id].rx_mch_sdu); // include rld_data_ind+ parse mch header - reset_meas (&UE_mac_inst[UE_id].rx_si); // include rlc_data_ind + mac header parser - - reset_meas (&UE_pdcp_stats[UE_id].pdcp_run); - reset_meas (&UE_pdcp_stats[UE_id].data_req); - reset_meas (&UE_pdcp_stats[UE_id].data_ind); - reset_meas (&UE_pdcp_stats[UE_id].apply_security); - reset_meas (&UE_pdcp_stats[UE_id].validate_security); - reset_meas (&UE_pdcp_stats[UE_id].pdcp_ip); - reset_meas (&UE_pdcp_stats[UE_id].ip_pdcp); - - - } - - for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { - - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - reset_meas (&RU2UE[eNB_id][UE_id][0]->random_channel); - reset_meas (&RU2UE[eNB_id][UE_id][0]->interp_time); - reset_meas (&RU2UE[eNB_id][UE_id][0]->interp_freq); - reset_meas (&RU2UE[eNB_id][UE_id][0]->convolution); - reset_meas (&UE2RU[UE_id][eNB_id][0]->random_channel); - reset_meas (&UE2RU[UE_id][eNB_id][0]->interp_time); - reset_meas (&UE2RU[UE_id][eNB_id][0]->interp_freq); - reset_meas (&UE2RU[UE_id][eNB_id][0]->convolution); - } - - reset_meas (&RC.eNB[eNB_id][0]->phy_proc); - reset_meas (&RC.eNB[eNB_id][0]->phy_proc_rx); - reset_meas (&RC.eNB[eNB_id][0]->phy_proc_tx); - reset_meas (&RC.eNB[eNB_id][0]->rx_prach); - - reset_meas (&RC.eNB[eNB_id][0]->ofdm_mod_stats); - reset_meas (&RC.eNB[eNB_id][0]->dlsch_encoding_stats); - reset_meas (&RC.eNB[eNB_id][0]->dlsch_modulation_stats); - reset_meas (&RC.eNB[eNB_id][0]->dlsch_scrambling_stats); - reset_meas (&RC.eNB[eNB_id][0]->dlsch_rate_matching_stats); - reset_meas (&RC.eNB[eNB_id][0]->dlsch_turbo_encoding_stats); - reset_meas (&RC.eNB[eNB_id][0]->dlsch_interleaving_stats); - - // reset_meas (&RC.eNB[eNB_id][0]->ofdm_demod_stats); - //reset_meas(&RC.eNB[eNB_id]->rx_dft_stats); - //reset_meas(&RC.eNB[eNB_id]->ulsch_channel_estimation_stats); - //reset_meas(&RC.eNB[eNB_id]->ulsch_freq_offset_estimation_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_decoding_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_demodulation_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_rate_unmatching_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_turbo_decoding_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_deinterleaving_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_demultiplexing_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_llr_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_tc_init_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_tc_alpha_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_tc_beta_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_tc_gamma_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_tc_ext_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_tc_intl1_stats); - reset_meas (&RC.eNB[eNB_id][0]->ulsch_tc_intl2_stats); -#ifdef LOCALIZATION - reset_meas(&RC.eNB[eNB_id][0]->localization_stats); -#endif - - /* - * L2 functions - */ - // eNB MAC - reset_meas (&RC.mac[eNB_id]->eNB_scheduler); // total - reset_meas (&RC.mac[eNB_id]->schedule_si); // only schedule + tx - reset_meas (&RC.mac[eNB_id]->schedule_ra); // only ra - reset_meas (&RC.mac[eNB_id]->schedule_ulsch); // onlu ulsch - reset_meas (&RC.mac[eNB_id]->fill_DLSCH_dci); // only dci - reset_meas (&RC.mac[eNB_id]->schedule_dlsch_preprocessor); // include rlc_data_req + MAC header gen - reset_meas (&RC.mac[eNB_id]->schedule_dlsch); // include rlc_data_req + MAC header gen + pre-processor - reset_meas (&RC.mac[eNB_id]->schedule_mch); // only embms - reset_meas (&RC.mac[eNB_id]->rx_ulsch_sdu); // include rlc_data_ind + mac header parser - - reset_meas (&eNB_pdcp_stats[eNB_id].pdcp_run); - reset_meas (&eNB_pdcp_stats[eNB_id].data_req); - reset_meas (&eNB_pdcp_stats[eNB_id].data_ind); - reset_meas (&eNB_pdcp_stats[eNB_id].apply_security); - reset_meas (&eNB_pdcp_stats[eNB_id].validate_security); - reset_meas (&eNB_pdcp_stats[eNB_id].pdcp_ip); - reset_meas (&eNB_pdcp_stats[eNB_id].ip_pdcp); - - } -} - -void -print_opp_meas_oaisim (void) -{ - - uint8_t eNB_id = 0, UE_id = 0; - - print_meas (&oaisim_stats, "[OAI][total_exec_time]", &oaisim_stats, - &oaisim_stats); - print_meas (&oaisim_stats_f, "[OAI][SF_exec_time]", &oaisim_stats, - &oaisim_stats_f); - - print_meas (&dl_chan_stats, "[DL][chan_stats]", &oaisim_stats, - &oaisim_stats_f); - print_meas (&ul_chan_stats, "[UL][chan_stats]", &oaisim_stats, - &oaisim_stats_f); - - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - for (ru_id = 0; ru_id < NB_RU; ru_id++) { - print_meas (&RU2UE[ru_id][UE_id][0]->random_channel, - "[DL][random_channel]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RU2UE[ru_id][UE_id][0]->interp_time, - "[DL][interp_time]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RU2UE[ru_id][UE_id][0]->interp_freq, - "[DL][interp_freq]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RU2UE[ru_id][UE_id][0]->convolution, - "[DL][convolution]", &oaisim_stats, &oaisim_stats_f); - - print_meas (&UE2RU[UE_id][ru_id][0]->random_channel, - "[UL][random_channel]", &oaisim_stats, &oaisim_stats_f); - print_meas (&UE2RU[UE_id][ru_id][0]->interp_time, - "[UL][interp_time]", &oaisim_stats, &oaisim_stats_f); - print_meas (&UE2RU[UE_id][ru_id][0]->interp_freq, - "[UL][interp_freq]", &oaisim_stats, &oaisim_stats_f); - print_meas (&UE2RU[UE_id][ru_id][0]->convolution, - "[UL][convolution]", &oaisim_stats, &oaisim_stats_f); - } - } - - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - print_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc[0], "[UE][total_phy_proc[0]]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc[1], "[UE][total_phy_proc[1]]", - &oaisim_stats, &oaisim_stats_f); - - - print_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc_rx[0], - "[UE][total_phy_proc_rx[0]]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc_rx[1], - "[UE][total_phy_proc_rx[1]]", &oaisim_stats, &oaisim_stats_f); - // print_meas (&PHY_vars_UE_g[UE_id][0]->ofdm_demod_stats, - // "[UE][ofdm_demod]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->rx_dft_stats, "[UE][rx_dft]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_channel_estimation_stats, - "[UE][channel_est]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_freq_offset_estimation_stats, - "[UE][freq_offset]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_llr_stats, "[UE][llr]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_unscrambling_stats, - "[UE][unscrambling]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_decoding_stats[0], - "[UE][decoding[0]]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_decoding_stats[1], - "[UE][decoding[1]]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_rate_unmatching_stats, - "[UE][rate_unmatching]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_deinterleaving_stats, - "[UE][deinterleaving]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_turbo_decoding_stats, - "[UE][turbo_decoding]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_init_stats, - "[UE][ |_tc_init]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_alpha_stats, - "[UE][ |_tc_alpha]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_beta_stats, - "[UE][ |_tc_beta]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_gamma_stats, - "[UE][ |_tc_gamma]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_ext_stats, - "[UE][ |_tc_ext]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_intl1_stats, - "[UE][ |_tc_intl1]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->dlsch_tc_intl2_stats, - "[UE][ |_tc_intl2]", &oaisim_stats, &oaisim_stats_f); - - print_meas (&PHY_vars_UE_g[UE_id][0]->phy_proc_tx, - "[UE][total_phy_proc_tx]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->ofdm_mod_stats, "[UE][ofdm_mod]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_modulation_stats, - "[UE][modulation]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_encoding_stats, - "[UE][encoding]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_segmentation_stats, - "[UE][segmentation]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_rate_matching_stats, - "[UE][rate_matching]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_turbo_encoding_stats, - "[UE][turbo_encoding]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_interleaving_stats, - "[UE][interleaving]", &oaisim_stats, &oaisim_stats_f); - print_meas (&PHY_vars_UE_g[UE_id][0]->ulsch_multiplexing_stats, - "[UE][multiplexing]", &oaisim_stats, &oaisim_stats_f); - - } - - for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { - print_meas (&RC.eNB[eNB_id][0]->phy_proc, - "[eNB][total_phy_proc]", &oaisim_stats, &oaisim_stats_f); - - print_meas (&RC.eNB[eNB_id][0]->phy_proc_tx, - "[eNB][total_phy_proc_tx]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ofdm_mod_stats, - "[eNB][ofdm_mod]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->dlsch_modulation_stats, - "[eNB][modulation]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->dlsch_scrambling_stats, - "[eNB][scrambling]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->dlsch_encoding_stats, - "[eNB][encoding]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->dlsch_interleaving_stats, - "[eNB][|_interleaving]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->dlsch_rate_matching_stats, - "[eNB][|_rate_matching]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->dlsch_turbo_encoding_stats, - "[eNB][|_turbo_encoding]", &oaisim_stats, &oaisim_stats_f); - - print_meas (&RC.eNB[eNB_id][0]->phy_proc_rx, - "[eNB][total_phy_proc_rx]", &oaisim_stats, &oaisim_stats_f); - // print_meas (&RC.eNB[eNB_id][0]->ofdm_demod_stats, - // "[eNB][ofdm_demod]", &oaisim_stats, &oaisim_stats_f); - //print_meas(&RC.eNB[eNB_id][0]->ulsch_channel_estimation_stats,"[eNB][channel_est]"); - //print_meas(&RC.eNB[eNB_id][0]->ulsch_freq_offset_estimation_stats,"[eNB][freq_offset]"); - //print_meas(&RC.eNB[eNB_id][0]->rx_dft_stats,"[eNB][rx_dft]"); - print_meas (&RC.eNB[eNB_id][0]->ulsch_demodulation_stats, - "[eNB][demodulation]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_decoding_stats, - "[eNB][decoding]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_deinterleaving_stats, - "[eNB][|_deinterleaving]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_demultiplexing_stats, - "[eNB][|_demultiplexing]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_rate_unmatching_stats, - "[eNB][|_rate_unmatching]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_turbo_decoding_stats, - "[eNB][|_turbo_decoding]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_tc_init_stats, - "[eNB][ |_tc_init]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_tc_alpha_stats, - "[eNB][ |_tc_alpha]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_tc_beta_stats, - "[eNB][ |_tc_beta]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_tc_gamma_stats, - "[eNB][ |_tc_gamma]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_tc_ext_stats, - "[eNB][ |_tc_ext]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_tc_intl1_stats, - "[eNB][ |_tc_intl1]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.eNB[eNB_id][0]->ulsch_tc_intl2_stats, - "[eNB][ |_tc_intl2]", &oaisim_stats, &oaisim_stats_f); - - print_meas (&RC.eNB[eNB_id][0]->rx_prach, "[eNB][rx_prach]", - &oaisim_stats, &oaisim_stats_f); - -#ifdef LOCALIZATION - print_meas(&RC.eNB[eNB_id][0]->localization_stats, "[eNB][LOCALIZATION]",&oaisim_stats,&oaisim_stats_f); -#endif - } - - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - - print_meas (&UE_mac_inst[UE_id].ue_scheduler, "[UE][mac_scheduler]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_mac_inst[UE_id].tx_ulsch_sdu, "[UE][tx_ulsch_sdu]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_mac_inst[UE_id].rx_dlsch_sdu, "[UE][rx_dlsch_sdu]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_mac_inst[UE_id].ue_query_mch, "[UE][query_MCH]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_mac_inst[UE_id].rx_mch_sdu, "[UE][rx_mch_sdu]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_mac_inst[UE_id].rx_si, "[UE][rx_si]", &oaisim_stats, - &oaisim_stats_f); - - print_meas (&UE_pdcp_stats[UE_id].pdcp_run, "[UE][total_pdcp_run]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_pdcp_stats[UE_id].data_req, "[UE][DL][pdcp_data_req]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_pdcp_stats[UE_id].data_ind, "[UE][UL][pdcp_data_ind]", - &oaisim_stats, &oaisim_stats_f); - - print_meas (&UE_pdcp_stats[UE_id].apply_security, - "[UE][DL][apply_security]", &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_pdcp_stats[UE_id].validate_security, - "[UE][UL][validate_security]", &oaisim_stats, - &oaisim_stats_f); - print_meas (&UE_pdcp_stats[UE_id].ip_pdcp, "[UE][DL][ip_pdcp]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&UE_pdcp_stats[UE_id].pdcp_ip, "[UE][UL][pdcp_ip]", - &oaisim_stats, &oaisim_stats_f); - - } - - for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { - - print_meas (&RC.mac[eNB_id]->eNB_scheduler, "[eNB][mac_scheduler]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.mac[eNB_id]->schedule_si, "[eNB][DL][SI]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.mac[eNB_id]->schedule_ra, "[eNB][DL][RA]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.mac[eNB_id]->fill_DLSCH_dci, - "[eNB][DL/UL][fill_DCI]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.mac[eNB_id]->schedule_dlsch_preprocessor, - "[eNB][DL][preprocessor]", &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.mac[eNB_id]->schedule_dlsch, - "[eNB][DL][schedule_tx_dlsch]", &oaisim_stats, - &oaisim_stats_f); - print_meas (&RC.mac[eNB_id]->schedule_mch, "[eNB][DL][mch]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.mac[eNB_id]->schedule_ulsch, "[eNB][UL][ULSCH]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&RC.mac[eNB_id]->rx_ulsch_sdu, - "[eNB][UL][rx_ulsch_sdu]", &oaisim_stats, &oaisim_stats_f); - - print_meas (&eNB_pdcp_stats[eNB_id].pdcp_run, "[eNB][pdcp_run]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&eNB_pdcp_stats[eNB_id].data_req, - "[eNB][DL][pdcp_data_req]", &oaisim_stats, &oaisim_stats_f); - print_meas (&eNB_pdcp_stats[eNB_id].data_ind, - "[eNB][UL][pdcp_data_ind]", &oaisim_stats, &oaisim_stats_f); - - print_meas (&eNB_pdcp_stats[eNB_id].apply_security, - "[eNB][DL][apply_security]", &oaisim_stats, - &oaisim_stats_f); - print_meas (&eNB_pdcp_stats[eNB_id].validate_security, - "[eNB][UL][validate_security]", &oaisim_stats, - &oaisim_stats_f); - print_meas (&eNB_pdcp_stats[eNB_id].ip_pdcp, "[eNB][DL][ip_pdcp]", - &oaisim_stats, &oaisim_stats_f); - print_meas (&eNB_pdcp_stats[eNB_id].pdcp_ip, "[eNB][UL][pdcp_ip]", - &oaisim_stats, &oaisim_stats_f); - - } - -} - -#if !defined(ENABLE_ITTI) -static void * -sigh (void *arg) -{ - - int signum; - sigset_t sigcatch; - sigemptyset (&sigcatch); - sigaddset (&sigcatch, SIGHUP); - sigaddset (&sigcatch, SIGINT); - sigaddset (&sigcatch, SIGTERM); - sigaddset (&sigcatch, SIGQUIT); - - for (;;) { - sigwait (&sigcatch, &signum); - - //sigwait(&sigblock, &signum); - switch (signum) { - case SIGHUP: - case SIGINT: - case SIGTERM: - case SIGQUIT: - fprintf (stderr, "received signal %d \n", signum); - // no need for mutx: when ITTI not used, this variable is only accessed by this function - l2l1_state = L2L1_TERMINATED; - break; - - default: - fprintf (stderr, "Unexpected signal %d \n", signum); - exit (-1); - break; - } - } - - pthread_exit (NULL); -} -#endif /* !defined(ENABLE_ITTI) */ - -void -oai_shutdown (void) -{ - static int done = 0; - - if (done) - return; - - free (otg_pdcp_buffer); - otg_pdcp_buffer = 0; - -#ifdef SMBV - - // Rohde&Schwarz SMBV100A vector signal generator - if (config_smbv) { - smbv_send_config (smbv_fname,smbv_ip); - } - -#endif - - if (oai_emulation.info.opp_enabled == 1) - print_opp_meas_oaisim (); - - -#ifdef PROC - - if (abstraction_flag == 0 && Channel_Flag==0 && Process_Flag==0) -#else - if (abstraction_flag == 0) -#endif - { - /* - #ifdef IFFT_FPGA - free(txdataF2[0]); - free(txdataF2[1]); - free(txdataF2); - free(txdata[0]); - free(txdata[1]); - free(txdata); - #endif - */ - /* - for (int i = 0; i < 2; i++) { - free (s_re[i]); - free (s_im[i]); - free (r_re[i]); - free (r_im[i]); - } - - free (s_re); - free (s_im); - free (r_re); - free (r_im); - s_re = 0; - s_im = 0; - r_re = 0; - r_im = 0;*/ - - lte_sync_time_free (); - } - - // added for PHY abstraction - if (oai_emulation.info.ocm_enabled == 1) { - for (eNB_inst = 0; eNB_inst < NUMBER_OF_eNB_MAX; eNB_inst++) { - free (enb_data[eNB_inst]); - enb_data[eNB_inst] = 0; - } - - for (UE_inst = 0; UE_inst < NUMBER_OF_UE_MAX; UE_inst++) { - free (ue_data[UE_inst]); - ue_data[UE_inst] = 0; - } - } //End of PHY abstraction changes - - - if ((oai_emulation.info.ocm_enabled == 1) && (ethernet_flag == 0) - && (ShaF != NULL)) { - destroyMat (ShaF, map1, map2); - ShaF = 0; - } - - if (opt_enabled == 1) - terminate_opt (); - - for (int i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) - if (oai_emulation.info.oai_ifup[i] == 1) { - char interfaceName[8]; - snprintf (interfaceName, sizeof(interfaceName), "oai%d", i); - bringInterfaceUp (interfaceName, 0); - } - - log_thread_finalize (); - logClean (); - VCD_SIGNAL_DUMPER_CLOSE (); - - done = 1; // prevent next invokation of this function - - LOG_N(EMU, - ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU shutdown <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); -} - -eNB_MAC_INST* -get_eNB_mac_inst (module_id_t module_idP) -{ - return (RC.mac[module_idP]); -} - -OAI_Emulation* -get_OAI_emulation () -{ - return &oai_emulation; -} - - -// dummy function declarations - -void *rrc_enb_task(void *args_p) -{ - return NULL; -} - diff --git a/targets/SIMU/USER/oaisim.h b/targets/SIMU/USER/oaisim.h deleted file mode 100644 index 1ddc093983..0000000000 --- a/targets/SIMU/USER/oaisim.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include -#include -#include -#include -#include -#include - -#include "SIMULATION/TOOLS/sim.h" -#include "SIMULATION/RF/rf.h" -#include "PHY/types.h" -#include "PHY/defs_eNB.h" -#include "PHY/defs_UE.h" -#include "oaisim_config.h" -#include "init_lte.h" - -#ifdef OPENAIR2 -#include "LAYER2/MAC/mac.h" -#include "UTIL/OMV/structures.h" -#endif - -eNB_MAC_INST* get_eNB_mac_inst(module_id_t module_idP); -OAI_Emulation* get_OAI_emulation(void); -void init_channel_vars(LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***s_im,double ***r_re,double ***r_im,double ***r_re0,double ***r_im0); - -void do_UL_sig(channel_desc_t *UE2RU[NUMBER_OF_UE_MAX][NUMBER_OF_RU_MAX][MAX_NUM_CCs], - node_desc_t *enb_data[NUMBER_OF_RU_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX], - uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms, - uint32_t frame,int eNB_id,uint8_t CC_id); - -void do_DL_sig(channel_desc_t *RU2UE[NUMBER_OF_RU_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs], - node_desc_t *enb_data[NUMBER_OF_RU_MAX], - node_desc_t *ue_data[NUMBER_OF_UE_MAX], - uint16_t subframe, - uint32_t offset, - uint32_t length, - uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,uint8_t UE_id,int CC_id); - -void init_ue(node_desc_t *ue_data, UE_Antenna ue_ant);//Abstraction changes -void init_enb(node_desc_t *enb_data, eNB_Antenna enb_ant);//Abstraction changes -void extract_position(node_list* input_node_list, node_desc_t**, int nb_nodes);//Abstraction changes -void get_beta_map(void);//Abstraction changes -void get_MIESM_param(void); - -void init_snr(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint8_t, uint16_t, uint8_t, uint16_t);//Abstraction changes -void init_snr_up(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint16_t, uint16_t);//Abstraction changes -void calculate_sinr(channel_desc_t *, node_desc_t *, node_desc_t *, double *sinr_dB, uint16_t);//Abstraction changes -void get_beta_map(void); -int dlsch_abstraction_EESM(double* sinr_dB, uint32_t rb_alloc[4], uint8_t mcs, uint8_t); //temporary testing for PHY abstraction -int dlsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint32_t rb_alloc[4], uint8_t mcs,uint8_t); -int ulsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint8_t mcs,uint16_t nb_rb, uint16_t first_rb); -int ulsch_abstraction(double* sinr_dB,uint8_t TM, uint8_t mcs,uint16_t nb_rb, uint16_t first_rb); - -void calc_path_loss(node_desc_t* node_tx, node_desc_t* node_rx, channel_desc_t *ch_desc, Environment_System_Config env_desc, double **SF); - -void do_OFDM_mod(int32_t **txdataF, int32_t **txdata, frame_t frame, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); - -void reset_opp_meas(void); -void print_opp_meas(void); - -#ifdef OPENAIR2 -int omv_write (int pfd, node_list* enb_node_list, node_list* ue_node_list, Data_Flow_Unit omv_data); -void omv_end (int pfd, Data_Flow_Unit omv_data); -#endif - - - - - - - - diff --git a/targets/SIMU/USER/oaisim_config.c b/targets/SIMU/USER/oaisim_config.c deleted file mode 100644 index 17ed9ff571..0000000000 --- a/targets/SIMU/USER/oaisim_config.c +++ /dev/null @@ -1,1349 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file oaisim_config.c -* \brief Configuration of oaisim -* \author Navid Nikaein -* \date 2013-2015 -* \version 1.0 -* \company Eurecom -* \email: openair_tech@eurecom.fr -* \note -* \warning -*/ - -#include -#include -#include -#include -#include -#include - -#include "oaisim_config.h" -#include "OCG.h" -#include "OCG_extern.h" -#include "UTIL/OMG/omg.h" -#include "UTIL/OMG/grid.h" -#include "UTIL/OTG/otg_tx.h" -#include "UTIL/OTG/otg.h" -#include "UTIL/OTG/otg_externs.h" -#include "oml.h" -#include "msc.h" -#if ENABLE_RAL -#include "lteRALenb.h" -#include "lteRALue.h" -#endif - -#if defined(ENABLE_ITTI) -# include "intertask_interface_init.h" -#endif - - -mapping omg_model_names[] = { - {"STATIC", STATIC}, - {"RWP", RWP}, - {"RWALK", RWALK}, - {"TRACE", TRACE}, - {"SUMO", SUMO}, - {"STEADY_RWP", STEADY_RWP}, - {"MAX_NUM_MOB_TYPES", MAX_NUM_MOB_TYPES}, - {NULL, -1} -}; -// subtypes for RWP in grid map -mapping omg_rwp_names[] = { - {"MIN_RWP_TYPES", MIN_RWP_TYPES}, - {"RESTRICTED_RWP",RESTIRICTED_RWP}, - {"CONNECTED_DOMAIN", CONNECTED_DOMAIN}, - {"MAX_RWP_TYPES", MAX_RWP_TYPES}, - {NULL, -1} -}; - -void ocg_config_proto(void); - -void init_oai_emulation(void) -{ - - int i; - int CC_id; - - oai_emulation.environment_system_config.fading.large_scale.selected_option = "free_space"; - oai_emulation.environment_system_config.fading.free_space_model_parameters.pathloss_exponent = 3.00; - oai_emulation.environment_system_config.fading.free_space_model_parameters.pathloss_0_dB = -100; - oai_emulation.environment_system_config.fading.small_scale.selected_option = "AWGN"; - oai_emulation.environment_system_config.fading.ricean_8tap.rice_factor_dB = 0; - oai_emulation.environment_system_config.fading.shadowing.decorrelation_distance_m = 0; - oai_emulation.environment_system_config.fading.shadowing.variance_dB = 0; - oai_emulation.environment_system_config.fading.shadowing.inter_site_correlation = 0; - oai_emulation.environment_system_config.antenna.eNB_antenna.number_of_sectors = 1; - oai_emulation.environment_system_config.antenna.eNB_antenna.beam_width_dB = 1.13; - oai_emulation.environment_system_config.antenna.eNB_antenna.alpha_rad[0] = 0; - oai_emulation.environment_system_config.antenna.eNB_antenna.alpha_rad[1] = 0; - oai_emulation.environment_system_config.antenna.eNB_antenna.alpha_rad[2] = 0; - oai_emulation.environment_system_config.antenna.eNB_antenna.antenna_gain_dBi = 0; - oai_emulation.environment_system_config.antenna.eNB_antenna.tx_power_dBm = 15; - oai_emulation.environment_system_config.antenna.eNB_antenna.rx_noise_level_dB = 0; - oai_emulation.environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[0] = 0; - oai_emulation.environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[1] = 0; - oai_emulation.environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[2] = 0; - oai_emulation.environment_system_config.antenna.UE_antenna.antenna_gain_dBi = 0; - oai_emulation.environment_system_config.antenna.UE_antenna.tx_power_dBm = 20; - oai_emulation.environment_system_config.antenna.UE_antenna.rx_noise_level_dB = 0; // noise figure - oai_emulation.environment_system_config.wall_penetration_loss_dB = 5; - oai_emulation.environment_system_config.system_bandwidth_MB = 7.68; - oai_emulation.environment_system_config.system_frequency_GHz = 1.9; - - oai_emulation.topology_config.area.x_m = 1000; - oai_emulation.topology_config.area.y_m = 1000; - oai_emulation.topology_config.network_type.selected_option = "homogeneous"; - oai_emulation.topology_config.cell_type.selected_option = "macrocell"; - oai_emulation.topology_config.relay.number_of_relays = 0; - oai_emulation.topology_config.mobility.UE_mobility.UE_mobility_type.selected_option = "STATIC"; - oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.selected_option="MAX_RWP_TYPES"; - //oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid = 1; - //oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid = 1; - oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option = "random_destination"; - oai_emulation.topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option = "random"; - oai_emulation.topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes = 1; - oai_emulation.topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes = 1; - oai_emulation.topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes = 1; - oai_emulation.topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes = 1; - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps = 0.1; - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps = 20.0; - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms = 0.1; - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms = 5.0; - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms = 0.1; - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms = 10.0; - oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option = "STATIC"; - oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option = "random"; - oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_x = 1; - oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_y = 1; - oai_emulation.topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = 1; - oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells = 1; - oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km = 1; - oai_emulation.topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x = 1; - oai_emulation.topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y = 1; - oai_emulation.topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file = (char*) malloc(256); - sprintf(oai_emulation.topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file,"static_1enb.tr"); - oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file = (char*) malloc(256); - sprintf(oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file,"static_2ues.tr"); - oai_emulation.topology_config.mobility.UE_mobility.sumo_config.command = (char*) malloc(20); - sprintf(oai_emulation.topology_config.mobility.UE_mobility.sumo_config.command,"sumo"); - oai_emulation.topology_config.mobility.UE_mobility.sumo_config.file = (char*) malloc(256); - snprintf( oai_emulation.topology_config.mobility.UE_mobility.sumo_config.file, 256, "%s/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg", getenv("OPENAIR2_DIR") ); - oai_emulation.topology_config.mobility.UE_mobility.sumo_config.start=0; - oai_emulation.topology_config.mobility.UE_mobility.sumo_config.end=0; - oai_emulation.topology_config.mobility.UE_mobility.sumo_config.step=1; // 1000ms - oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hip = (char*) malloc(40); - sprintf(oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hip,"127.0.1.1"); - oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hport = 8883; - - oai_emulation.application_config.packet_gen_type = "substract_string"; - - for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) { - oai_emulation.application_config.predefined_traffic.source_id[i] = "1:10"; - oai_emulation.application_config.predefined_traffic.application_type[i] = "no_predefined_traffic"; - oai_emulation.application_config.predefined_traffic.background[i] = "disable"; - oai_emulation.application_config.predefined_traffic.aggregation_level[i] = 1; - oai_emulation.application_config.predefined_traffic.flow_start[i] = 0; - oai_emulation.application_config.predefined_traffic.flow_duration[i] = 1000;//uniform_dist((i+1)*100,0xffff); - - oai_emulation.application_config.predefined_traffic.destination_id[i] = 0; - - oai_emulation.application_config.customized_traffic.source_id[i] = "1"; - oai_emulation.application_config.customized_traffic.destination_id[i] = "2"; - oai_emulation.application_config.customized_traffic.transport_protocol[i] = "udp"; - oai_emulation.application_config.customized_traffic.background[i] = "disable"; - oai_emulation.application_config.customized_traffic.m2m[i] = "disable"; - oai_emulation.application_config.customized_traffic.ip_version[i] = "ipv4"; - oai_emulation.application_config.customized_traffic.aggregation_level[i] = 1; - oai_emulation.application_config.customized_traffic.flow_start[i] = 0;// (i+1)*30; - oai_emulation.application_config.customized_traffic.flow_duration[i] = 1000;// uniform_dist((i+1)*100,0xffff); - oai_emulation.application_config.customized_traffic.idt_dist[i] = "uniform"; - oai_emulation.application_config.customized_traffic.idt_min_ms[i] = 100; - oai_emulation.application_config.customized_traffic.idt_max_ms[i] = 1000; - oai_emulation.application_config.customized_traffic.idt_standard_deviation[i] = 1; - oai_emulation.application_config.customized_traffic.idt_lambda[i] = 1; - oai_emulation.application_config.customized_traffic.size_dist[i] = "uniform"; - oai_emulation.application_config.customized_traffic.size_min_byte[i] = 200; - oai_emulation.application_config.customized_traffic.size_max_byte[i] = 500; - oai_emulation.application_config.customized_traffic.size_standard_deviation[i] = 1; - oai_emulation.application_config.customized_traffic.size_lambda[i] = 1; - oai_emulation.application_config.customized_traffic.stream[i] = 1; - oai_emulation.application_config.customized_traffic.destination_port[i] = 8080; - oai_emulation.application_config.customized_traffic.prob_off_pu[i]= 0; - oai_emulation.application_config.customized_traffic.prob_off_ed[i]= 0; - oai_emulation.application_config.customized_traffic.prob_off_pe[i]= 0; - oai_emulation.application_config.customized_traffic.prob_pu_ed[i]= 0; - oai_emulation.application_config.customized_traffic.prob_pu_pe[i]= 0; - oai_emulation.application_config.customized_traffic.prob_ed_pe[i]= 0; - oai_emulation.application_config.customized_traffic.prob_ed_pu[i]= 0; - oai_emulation.application_config.customized_traffic.holding_time_off_ed[i]= 0; - oai_emulation.application_config.customized_traffic.holding_time_off_pu[i]= 0; - oai_emulation.application_config.customized_traffic.holding_time_off_pe[i]= 0; - oai_emulation.application_config.customized_traffic.holding_time_pe_off[i]= 0; - oai_emulation.application_config.customized_traffic.pu_size_pkts[i]= 0; - oai_emulation.application_config.customized_traffic.ed_size_pkts[i]= 0; - } - - /* protocol config */ - oai_emulation.protocol_config.eNB_mac_config.num_groups=1; - - - oai_emulation.emulation_config.emulation_time_ms = 0; - oai_emulation.emulation_config.curve = "disable"; - oai_emulation.emulation_config.background_stats = "disable"; - oai_emulation.emulation_config.performance_metrics.throughput = "disable"; - oai_emulation.emulation_config.performance_metrics.latency ="disable"; - oai_emulation.emulation_config.performance_metrics.loss_rate ="disable"; - oai_emulation.emulation_config.performance_metrics.owd_radio_access = "disable"; - oai_emulation.emulation_config.layer.phy = 0; - oai_emulation.emulation_config.layer.mac = 0; - oai_emulation.emulation_config.layer.rlc = 0; - oai_emulation.emulation_config.layer.pdcp = 0; - oai_emulation.emulation_config.layer.rrc = 0; - oai_emulation.emulation_config.layer.omg = 0; - oai_emulation.emulation_config.layer.otg = 0; - oai_emulation.emulation_config.layer.emu = 1; - - oai_emulation.emulation_config.log_emu.level = "debug"; - oai_emulation.emulation_config.log_emu.verbosity = "low"; - oai_emulation.emulation_config.log_emu.interval = 1; - oai_emulation.emulation_config.packet_trace.enabled = 0; - oai_emulation.emulation_config.seed.value = 0; // 0 means randomly generated by OAI - - oai_emulation.info.ocg_ok = 0; - - - // phy related params : - oai_emulation.info.n_frames=MAX_FRAME_NUMBER; // number of frames simulated by default - oai_emulation.info.n_frames_flag=0; // if set, then let the emulation goes to infinity - - //status - oai_emulation.info.is_primary_master=0; - oai_emulation.info.master_list=0; - oai_emulation.info.nb_ue_remote=0; - oai_emulation.info.nb_enb_remote=0; - oai_emulation.info.nb_rn_remote=0; - oai_emulation.info.first_ue_local=0; - oai_emulation.info.first_enb_local=0; - oai_emulation.info.first_rn_local=0; - oai_emulation.info.master_id=0; - oai_emulation.info.nb_ue_local= 1;//default 1 UE - oai_emulation.info.nb_enb_local= 0;//default 0 eNB (to be loaded from config) - oai_emulation.info.nb_ru_local= 0;//default 0 ru (to be loaded from config) - oai_emulation.info.nb_rn_local= 0;//default 0 RN : currently only applicable for eMBMS - oai_emulation.info.ethernet_flag=0; - oai_emulation.info.ocm_enabled=1;// flag ? - oai_emulation.info.ocg_enabled=0;// flag c - oai_emulation.info.otg_enabled=0;// flag T - oai_emulation.info.opt_enabled=0; // P flag - oai_emulation.info.opt_mode=-1; // arg for P flag - oai_emulation.info.cli_enabled=0;// I flag - oai_emulation.info.omv_enabled =0; // v flag - oai_emulation.info.vcd_enabled=0; - oai_emulation.info.opp_enabled=0; - oai_emulation.info.oeh_enabled=0; - - oai_emulation.info.cba_group_active=0; - oai_emulation.info.cba_backoff=30; - oai_emulation.info.eMBMS_active_state=0; - oai_emulation.info.handover_active=0; - oai_emulation.info.omg_model_enb=STATIC; //default to static mobility model - oai_emulation.info.omg_model_rn=STATIC; //default to static mobility model - oai_emulation.info.omg_model_ue=STATIC; //default to static mobility model - oai_emulation.info.omg_rwp_type = RESTIRICTED_RWP; - oai_emulation.info.omg_model_ue_current=STATIC; //default to static mobility model - oai_emulation.info.otg_traffic="no_predefined_traffic"; - oai_emulation.info.otg_bg_traffic_enabled = 0; // G flag - oai_emulation.info.max_predefined_traffic_config_index = 0; - oai_emulation.info.max_customized_traffic_config_index = 0; - oai_emulation.info.frame = 0; // frame counter of emulation - oai_emulation.info.time_s = 0; // time of emulation - oai_emulation.info.time_ms = 0; // time of emulation - oai_emulation.info.seed = time(NULL); // time-based random seed , , included in ocg report - - oai_emulation.info.cli_num_enb= NUMBER_OF_eNB_MAX; - oai_emulation.info.cli_num_ue= NUMBER_OF_UE_MAX; - - oai_emulation.info.slot_isr = 0; - oai_emulation.info.slot_sfd = -1; - - //for (i=0; i < oai_emulation.info.cli_num_enb; i++) - for (i=0; i < NUMBER_OF_eNB_MAX; i++) - oai_emulation.info.cli_start_enb[i]=1; - - // for (i=0; i < oai_emulation.info.cli_num_ue; i++) - for (i=0; i < NUMBER_OF_UE_MAX; i++) - oai_emulation.info.cli_start_ue[i]=1; - - for (i=0; i < NUMBER_OF_eNB_MAX+NUMBER_OF_UE_MAX; i++) - oai_emulation.info.oai_ifup[i]=0; - - oai_emulation.info.nb_master =0; - oai_emulation.info.ethernet_id =0; - oai_emulation.info.multicast_group =0; - oai_emulation.info.multicast_ifname=NULL; - oai_emulation.info.g_log_level = LOG_INFO; - oai_emulation.info.g_log_verbosity = 0x15; - oai_emulation.info.g_log_verbosity_option = "medium"; - - for (CC_id=0; CC_idlog_component[OTG].filelog=1; - g_log->log_component[OTG_LATENCY].filelog=1; - g_log->log_component[OTG_OWD].filelog = 1;*/ - ocg_config_app(); // packet generator - } - - // add a var to control this, and pass this var to OMG - set_component_filelog(OMG); - LOG_I(OMG,"setting OMG file log \n"); - -} - -int olg_config(void) -{ - int comp; - int ocg_log_level = map_str_to_int(log_level_names, oai_emulation.emulation_config.log_emu.level); - int ocg_log_verbosity = map_str_to_int(log_verbosity_names, oai_emulation.emulation_config.log_emu.verbosity); - // fix me: - oai_emulation.info.g_log_level = ((oai_emulation.info.ocg_enabled == 1) && (ocg_log_level != -1)) ? ocg_log_level : oai_emulation.info.g_log_level; - oai_emulation.info.g_log_verbosity = (((oai_emulation.info.ocg_enabled == 1) && (ocg_log_verbosity != -1)) ? ocg_log_verbosity : - map_str_to_int(log_verbosity_names, oai_emulation.info.g_log_verbosity_option)); - set_glog(oai_emulation.info.g_log_level, oai_emulation.info.g_log_verbosity ); //g_glog - - // component, log level, log interval - for (comp = PHY; comp < MAX_LOG_COMPONENTS ; comp++) - set_comp_log(comp, - oai_emulation.info.g_log_level, - oai_emulation.info.g_log_verbosity, - oai_emulation.emulation_config.log_emu.interval); - - LOG_I(EMU, "OCG log level %d, oai log level%d \n ",ocg_log_level, oai_emulation.info.g_log_level); - LOG_N(EMU,"global log level is set to (%s,%d) with vebosity (%s, 0x%x) and frequency %d\n", - map_int_to_str (log_level_names, oai_emulation.info.g_log_level), - oai_emulation.info.g_log_level, - map_int_to_str (log_verbosity_names,oai_emulation.info.g_log_verbosity), - oai_emulation.info.g_log_verbosity, - oai_emulation.emulation_config.log_emu.interval ); - - - /* - // if perf eval then reset the otg log level - set_comp_log(PHY, LOG_EMERG, 0x15,1); - set_comp_log(EMU, LOG_EMERG, 0x15,1); - set_comp_log(OCG, LOG_EMERG, 0x15,1); - set_comp_log(OCM, LOG_EMERG, 0x15,1); - set_comp_log(OTG, LOG_EMERG, 0x15,1); - set_comp_log(MAC, LOG_EMERG, 0x15,1); - set_comp_log(OMG, LOG_EMERG, 0x15,1); - set_comp_log(OPT, LOG_EMERG, 0x15,1); - set_comp_log(PDCP, LOG_DEBUG, LOG_MED,1); - set_comp_log(RLC, LOG_DEBUG, LOG_MED,1); - set_comp_log(RRC, LOG_DEBUG, LOG_MED,1); - */ -#if defined(ENABLE_USE_MME) - set_comp_log(UDP_, LOG_DEBUG, LOG_MED,1); - set_comp_log(GTPU, LOG_DEBUG, LOG_MED,1); - set_comp_log(SPGW, LOG_DEBUG, LOG_MED,1); - set_comp_log(S1AP, LOG_DEBUG, LOG_MED,1); - set_comp_log(SCTP, LOG_DEBUG, LOG_MED,1); -#endif - -#if ENABLE_RAL - set_comp_log(RAL_ENB, LOG_TRACE, LOG_MED,1); - set_comp_log(RAL_UE, LOG_TRACE, LOG_MED,1); - set_log(RAL_ENB, LOG_DEBUG, 1); - set_log(RAL_UE, LOG_DEBUG, 1); -#endif - - - //set_log(OCG, LOG_DEBUG, 1); - //set_log(EMU, LOG_INFO, 20); - set_log(MAC, LOG_DEBUG, 1); - set_log(RLC, LOG_TRACE, 1); - //set_log(PHY, LOG_DEBUG, 1); - set_log(PDCP, LOG_TRACE, 1); - set_log(RRC, LOG_DEBUG, 1); - //set_log(OCM, LOG_INFO, 20); - //set_log(OTG, LOG_INFO, 1); - set_comp_log(OCG, LOG_ERR, 0x15,1); - set_comp_log(EMU, LOG_DEBUG, 0x15,20); - set_comp_log(MAC, LOG_TRACE, 0x15,1); - set_comp_log(RLC, LOG_TRACE, 0x15,1); - set_comp_log(PHY, LOG_TRACE, 0x15, 1); - set_comp_log(PDCP, LOG_DEBUG, 0x15,1); - set_comp_log(RRC, LOG_DEBUG, 0x15,1); - set_comp_log(OCM, LOG_DEBUG, 0x15,20); - set_comp_log(OTG, LOG_DEBUG, 0x15,1); - set_comp_log(OMG, LOG_NOTICE, 0x15,1); - set_comp_log(OPT, LOG_ERR, 0x15,1); - - - // set_comp_log(MAC, LOG_TRACE, LOG_FULL,1); - return 1; -} - -int ocg_config_env(void) -{ - // int func related to channel desc from oaisim.c could be moved here - int CC_id; - - if (oai_emulation.info.ocg_enabled) { - for (CC_id=0; CC_id 6) || (oai_emulation.info.tdd_config[CC_id] < 0)) { - LOG_E(EMU,"TDD config %d out of range, set it to 3\n",oai_emulation.info.tdd_config[CC_id]); - oai_emulation.info.tdd_config[CC_id]=3; - } else - LOG_I(EMU,"TDD config is set to %d\n",oai_emulation.info.tdd_config[CC_id]); - } - } - } - - return 1; -} -int ocg_config_topo(void) -{ - - int i; - // omg - init_omg_global_params(); - - // setup params for openair mobility generator - //common params - for(i=0; i < MAX_NUM_NODE_TYPES; i++) { - - omg_param_list[i].min_x = 0; - omg_param_list[i].max_x = oai_emulation.topology_config.area.x_m; - omg_param_list[i].min_y = 0; - omg_param_list[i].max_y= oai_emulation.topology_config.area.y_m; - // init values - omg_param_list[i].min_speed = 0.1; - omg_param_list[i].max_speed = 20.0; - omg_param_list[i].min_journey_time = 0.1; - omg_param_list[i].max_journey_time = 10.0; - omg_param_list[i].min_azimuth = 0; // ??? - omg_param_list[i].max_azimuth = 360; // ??? - omg_param_list[i].min_sleep = 0.1; - omg_param_list[i].max_sleep = 8.0; - omg_param_list[i].nodes_type = i; - omg_param_list[i].nodes=0; - omg_param_list[i].mobility_type=STATIC; - - // init OMG for eNBs - - if(i==eNB) { - if ((oai_emulation.info.omg_model_enb = map_str_to_int(omg_model_names, oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option))== -1) - oai_emulation.info.omg_model_enb = STATIC; - - LOG_I(OMG,"eNB mobility model is (%s, %d)\n", - oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option, - oai_emulation.info.omg_model_enb); - - omg_param_list[i].mobility_type = oai_emulation.info.omg_model_enb; - omg_param_list[i].nodes = oai_emulation.info.nb_enb_local + oai_emulation.info.nb_rn_local; - omg_param_list[i].seed = oai_emulation.info.seed; // specific seed for enb and ue to avoid node overlapping - - - if (oai_emulation.info.omg_model_enb == TRACE) { - omg_param_list[i].mobility_file = (char*) malloc(256);// user-specific trace file "%s/UTIL/OMG/mobility.txt",getenv("OPENAIR2_DIR") - //memset(oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file,0,256); - //sprintf(omg_param_list.mobility_file,"%s",oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file); - sprintf(omg_param_list[i].mobility_file,"%s/UTIL/OMG/TRACE/%s", - getenv("OPENAIR2_DIR"), - oai_emulation.topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file); - LOG_I(OMG,"TRACE file at %s\n", omg_param_list[i].mobility_file); - // notify the user if the file is not found - } - - - - if (strcmp(oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option, "fixed") == 0) { - omg_param_list[i].user_fixed = true; - omg_param_list[i].fixed_x = (double)oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_x; - omg_param_list[i].fixed_y = (double)oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_y; - } - - /*// at this moment, we use the above moving dynamics for mobile eNB - if (omg_param_list.nodes >0 ) - init_mobility_generator(omg_param_list);*/ - - } else if (i== UE) { // init OMG for UE - - - // input of OMG: STATIC: 0, RWP: 1, RWALK 2, or TRACE 3, or SUMO or STEADY_RWP - if ((oai_emulation.info.omg_model_ue = map_str_to_int(omg_model_names, oai_emulation.topology_config.mobility.UE_mobility.UE_mobility_type.selected_option))== -1) - oai_emulation.info.omg_model_ue = STATIC; - - LOG_I(OMG,"UE mobility model is (%s, %d)\n", - oai_emulation.topology_config.mobility.UE_mobility.UE_mobility_type.selected_option, - oai_emulation.info.omg_model_ue); - - if (oai_emulation.info.omg_model_ue == RWP) { - oai_emulation.info.omg_rwp_type = map_str_to_int(omg_rwp_names,oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.selected_option); - - if (oai_emulation.info.omg_rwp_type == -1) { - LOG_I(OMG,"Apply standard RWP model \n"); - } else { - LOG_I(OMG,"Apply %s mobility model (%d) \n", oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.selected_option, - oai_emulation.info.omg_rwp_type); - omg_param_list[i].rwp_type= oai_emulation.info.omg_rwp_type; - omg_param_list[i].max_vertices = - max_vertices_ongrid (omg_param_list[i]); - - omg_param_list[i].max_block_num = - max_connecteddomains_ongrid (omg_param_list[i]); - } - } - - omg_param_list[i].mobility_type = oai_emulation.info.omg_model_ue; - omg_param_list[i].nodes = oai_emulation.info.nb_ue_local+ oai_emulation.info.nb_rn_local; - omg_param_list[i].seed = oai_emulation.info.seed + oai_emulation.info.nb_ue_local; //fixme: specific seed for enb and ue to avoid node overlapping - - omg_param_list[i].min_speed = (oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps == 0) ? 0.1 : - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps; - - omg_param_list[i].max_speed = (oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps == 0) ? 0.1 : - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps; - - omg_param_list[i].min_journey_time = (oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms == 0) ? 0.1 : - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms; - - omg_param_list[i].max_journey_time = (oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms == 0) ? 0.1 : - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms; - - omg_param_list[i].min_azimuth = 0.1; // wait for advanced OSD - omg_param_list[i].max_azimuth = 360; - - omg_param_list[i].min_sleep = (oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms == 0) ? 0.1 : - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms; - - omg_param_list[i].max_sleep = (oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms == 0) ? 0.1 : - oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms; - - - if (oai_emulation.info.omg_model_ue == TRACE) { - omg_param_list[i].mobility_file = (char*) malloc(256);// user-specific trace file "%s/UTIL/OMG/mobility.txt",getenv("OPENAIR2_DIR") - //memset(oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file,0,256); - //sprintf(omg_param_list.mobility_file,"%s",oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file); - snprintf( omg_param_list[i].mobility_file, 256, "%s/UTIL/OMG/TRACE/%s", - getenv("OPENAIR2_DIR"), - oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file); - LOG_I(OMG,"TRACE file at %s\n", omg_param_list[i].mobility_file); - - } else if (oai_emulation.info.omg_model_ue == SUMO) { - omg_param_list[i].sumo_command = (char*) malloc(20); - sprintf(omg_param_list[i].sumo_command, "%s", oai_emulation.topology_config.mobility.UE_mobility.sumo_config.command); - omg_param_list[i].sumo_config = (char*) malloc(256); - sprintf(omg_param_list[i].sumo_config, "%s", oai_emulation.topology_config.mobility.UE_mobility.sumo_config.file); - omg_param_list[i].sumo_start = oai_emulation.topology_config.mobility.UE_mobility.sumo_config.start; - - if (oai_emulation.topology_config.mobility.UE_mobility.sumo_config.end > 0 ) - omg_param_list[i].sumo_end = oai_emulation.topology_config.mobility.UE_mobility.sumo_config.end; - else - omg_param_list[i].sumo_end = (oai_emulation.info.n_frames_flag == 1 ) ? oai_emulation.info.n_frames : MAX_FRAME_NUMBER ; // fixme: the else case is infinity - - omg_param_list[i].sumo_step = oai_emulation.topology_config.mobility.UE_mobility.sumo_config.step=1; // 1000ms - omg_param_list[i].sumo_host = (char*) malloc(40); - sprintf(omg_param_list[i].sumo_host,"%s",oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hip); - omg_param_list[i].sumo_port = oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hport ; - LOG_D(OMG, "opt (%s,%d) cmd (%s,%s) config_file (%s,%s) hip (%s,%s) \n", - oai_emulation.topology_config.mobility.UE_mobility.UE_mobility_type.selected_option,oai_emulation.info.omg_model_ue, - omg_param_list[i].sumo_command, oai_emulation.topology_config.mobility.UE_mobility.sumo_config.command, - omg_param_list[i].sumo_config, oai_emulation.topology_config.mobility.UE_mobility.sumo_config.file, - omg_param_list[i].sumo_host, oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hip); - } - - } - - if (oai_emulation.topology_config.omv == 1 ) - oai_emulation.info.omv_enabled = 1; - - }//for - - - init_mobility_generator(omg_param_list); - - return 1; -} - - - -int ocg_config_app(void) -{ - - char colon[] = ":"; - char comma[] = ","; - char tmp_source_id[128]; - char tmp_destination_id[128]; - char *check_format1; - char *check_format2; - char *check_format1_dst; - char *source_id_start = NULL; - char *source_id_end = NULL; - char *destination_id_start; - char *destination_id_end; - int sid_start; - int sid_end; - int did_start; - int did_end; - char *per_source_id; - int source_id_index; - int destination_id_index; - int i,j,k,l; - - int predefined_traffic_config_index; - int customized_traffic_config_index; - unsigned int state; - - init_all_otg(oai_emulation.info.n_frames); - g_otg->seed= oai_emulation.info.seed; - g_otg->num_nodes = oai_emulation.info.nb_enb_local + oai_emulation.info.nb_ue_local; - g_otg->throughput_metric =map_str_to_int(switch_names,oai_emulation.emulation_config.performance_metrics.throughput); - g_otg->latency_metric =map_str_to_int(switch_names,oai_emulation.emulation_config.performance_metrics.latency); - g_otg->loss_metric =map_str_to_int(switch_names,oai_emulation.emulation_config.performance_metrics.loss_rate); - g_otg->owd_radio_access =map_str_to_int(switch_names,oai_emulation.emulation_config.performance_metrics.owd_radio_access); - g_otg->curve=map_str_to_int(switch_names,oai_emulation.emulation_config.curve); - g_otg->background_stats=map_str_to_int(switch_names,oai_emulation.emulation_config.background_stats); - - g_otg->packet_gen_type=map_str_to_int(packet_gen_names,oai_emulation.application_config.packet_gen_type); - - LOG_I(OTG,"Metrics: Throuput %s(%d), One-way latency %s(%d) for %s, loss rate %s(%d), online curves %s(%d)\n", - oai_emulation.emulation_config.performance_metrics.throughput,g_otg->throughput_metric, - oai_emulation.emulation_config.performance_metrics.latency,g_otg->latency_metric, - (g_otg->owd_radio_access==1)? "Radio Access Network" : "End to End", - oai_emulation.emulation_config.performance_metrics.loss_rate,g_otg->loss_metric, - oai_emulation.emulation_config.curve,g_otg->curve ); - - for (i=0; inum_nodes; i++) { - - for (j=0; jnum_nodes; j++) { - // g_otg->duration[i][j]=oai_emulation.emulation_config.emulation_time_ms; - g_otg->dst_port[i][j]=oai_emulation.application_config.customized_traffic.destination_port[i]; - g_otg->dst_ip[i][j]=oai_emulation.application_config.customized_traffic.destination_id[i]; - - for (k=0; kip_v[i][j][k]=map_str_to_int(otg_ip_version_names, oai_emulation.application_config.customized_traffic.ip_version[i]); - g_otg->trans_proto[i][j][k]=map_str_to_int(otg_transport_protocol_names, oai_emulation.application_config.customized_traffic.transport_protocol[i]); - g_otg->application_type[i][j][k]=map_str_to_int(otg_app_type_names, "no_predefined_traffic"); - g_otg->aggregation_level[i][j][k]=oai_emulation.application_config.customized_traffic.aggregation_level[i]; - - g_otg->flow_start[i][j][k]=flow_start_time(i,j,oai_emulation.info.n_frames, - oai_emulation.application_config.customized_traffic.flow_start[i+j], - oai_emulation.application_config.customized_traffic.flow_duration[i+j]); - g_otg->flow_duration[i][j][k]=oai_emulation.application_config.customized_traffic.flow_duration[i+j]; - - for (l=0; lidt_dist[i][j][k][l]=map_str_to_int(otg_distribution_names, "no_customized_traffic"); - g_otg->idt_min[i][j][k][l]=oai_emulation.application_config.customized_traffic.idt_min_ms[i]; - g_otg->idt_max[i][j][k][l]=oai_emulation.application_config.customized_traffic.idt_max_ms[i]; - g_otg->idt_std_dev[i][j][k][l]=oai_emulation.application_config.customized_traffic.idt_standard_deviation[i]; - g_otg->idt_lambda[i][j][k][l]=oai_emulation.application_config.customized_traffic.idt_lambda[i]; - g_otg->idt_scale[i][j][k][l]=oai_emulation.application_config.customized_traffic.idt_scale[i]; - g_otg->idt_shape[i][j][k][l]=oai_emulation.application_config.customized_traffic.idt_shape[i]; - g_otg->size_dist[i][j][k][l]=map_str_to_int(otg_distribution_names, "no_customized_traffic"); - g_otg->size_min[i][j][k][l]=oai_emulation.application_config.customized_traffic.size_min_byte[i]; - g_otg->size_max[i][j][k][l]=oai_emulation.application_config.customized_traffic.size_max_byte[i]; - g_otg->size_std_dev[i][j][k][l]=oai_emulation.application_config.customized_traffic.size_standard_deviation[i]; - g_otg->size_lambda[i][j][k][l]=oai_emulation.application_config.customized_traffic.size_lambda[i]; - g_otg->size_scale[i][j][k][l]=oai_emulation.application_config.customized_traffic.size_scale[i]; - g_otg->size_shape[i][j][k][l]=oai_emulation.application_config.customized_traffic.size_shape[i]; - } - } - } - } - - LOG_D(OTG,"initializing the RNG with %s %d\n",(g_otg->seed==0)?"Random Seed" : "Fixed Seed", g_otg->seed); - init_seeds(g_otg->seed); // initialize all the nodes, then configure the nodes the user specifically did in the XML in the following - - LOG_I(OTG,"oai_emulation.info.max_predefined_traffic_config_index = %d\n", oai_emulation.info.max_predefined_traffic_config_index); - LOG_I(OTG,"oai_emulation.info.max_customized_traffic_config_index = %d\n", oai_emulation.info.max_customized_traffic_config_index); - - - if (oai_emulation.info.ocg_ok) { - ///// for the predefined traffic - for (predefined_traffic_config_index = 1; - predefined_traffic_config_index <= oai_emulation.info.max_predefined_traffic_config_index; - predefined_traffic_config_index++) { - - LOG_I(OTG,"OCG_config_OTG: predefined no. %d\n", predefined_traffic_config_index); - - //strcpy(tmp_source_id, oai_emulation.application_config.predefined_traffic.source_id[predefined_traffic_config_index]); - //strcpy(tmp_destination_id, oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index]); - strncpy(tmp_source_id, oai_emulation.application_config.predefined_traffic.source_id[predefined_traffic_config_index], sizeof(tmp_source_id)); - tmp_source_id[sizeof(tmp_source_id) - 1] = 0; // terminate string - strncpy(tmp_destination_id, oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index], sizeof(tmp_destination_id)); - tmp_destination_id[sizeof(tmp_destination_id) - 1] = 0; // terminate string - check_format1 = strstr(tmp_source_id, colon); - check_format2 = strstr(tmp_source_id, comma); - check_format1_dst = strstr(tmp_destination_id, colon); - - - if (check_format1 != NULL) { // format 1:10 - source_id_start = strtok(tmp_source_id, colon); - source_id_end = strtok(NULL, colon); - - sid_start = atoi(source_id_start); - sid_end = atoi(source_id_end); - - //destination_id_index = atoi(oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index]); - if (check_format1_dst != NULL) { // format 1:10 - destination_id_start = strtok(tmp_destination_id, colon); - destination_id_end = strtok(NULL, colon); - - did_start = atoi(destination_id_start); - did_end = atoi(destination_id_end); - } else { - did_start = atoi(oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index]); - did_end = atoi(oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index]); - } - - for (destination_id_index = did_start; destination_id_index <= did_end; destination_id_index++) { - for (source_id_index = sid_start; source_id_index <= sid_end; source_id_index++) { - if (g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] == 0) { // no app is defined for this pair src.dst - g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_app_type_names, - oai_emulation.application_config.predefined_traffic.application_type[predefined_traffic_config_index]); - - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] =map_str_to_int(switch_names, - oai_emulation.application_config.predefined_traffic.background[predefined_traffic_config_index]); - g_otg->aggregation_level[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.predefined_traffic.aggregation_level[predefined_traffic_config_index]; - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= flow_start_time(source_id_index,destination_id_index, - oai_emulation.info.n_frames,oai_emulation.application_config.predefined_traffic.flow_start[predefined_traffic_config_index], - oai_emulation.application_config.predefined_traffic.flow_duration[predefined_traffic_config_index]); - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.predefined_traffic.flow_duration[predefined_traffic_config_index]; - - LOG_I(OTG,"predef (1):: OCG_config_OTG [MAX UE=%d] [MAX eNB=%d]: FORMAT (%d:%d) source = %d, dest = %d, Application ID = %d background %d, Aggregation=%d , m2m= %d, flow start/duration %d/%d \n", - oai_emulation.info.nb_ue_local, oai_emulation.info.nb_enb_local, sid_start, sid_end, source_id_index, destination_id_index, - g_otg->application_idx[source_id_index][destination_id_index], - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->aggregation_level[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->m2m[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]); - g_otg->application_idx[source_id_index][destination_id_index]+=1; - } - } - } - } else if (check_format2 != NULL) { // format 1,2,3,5 - per_source_id = strtok(tmp_source_id, comma); - destination_id_index = atoi(oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index]); - - while (per_source_id != NULL) { - source_id_index = atoi(per_source_id); - - if (g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] == 0) { // no app is defined for this pair src.dst - g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_app_type_names, - oai_emulation.application_config.predefined_traffic.application_type[predefined_traffic_config_index]); - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] =map_str_to_int(switch_names, - oai_emulation.application_config.predefined_traffic.background[predefined_traffic_config_index]); - g_otg->aggregation_level[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.predefined_traffic.aggregation_level[predefined_traffic_config_index]; - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]=flow_start_time(source_id_index, destination_id_index, - oai_emulation.info.n_frames,oai_emulation.application_config.predefined_traffic.flow_start[predefined_traffic_config_index], - oai_emulation.application_config.predefined_traffic.flow_duration[predefined_traffic_config_index]); - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.predefined_traffic.flow_duration[predefined_traffic_config_index]; - g_otg->application_idx[source_id_index][destination_id_index]+=1; - } - - per_source_id = strtok(NULL, comma); - - } - } else { // single node configuration - source_id_index = atoi(oai_emulation.application_config.predefined_traffic.source_id[predefined_traffic_config_index]); - //destination_id_index = atoi(oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index]); - sid_start = atoi(oai_emulation.application_config.predefined_traffic.source_id[predefined_traffic_config_index]); - sid_end = atoi(oai_emulation.application_config.predefined_traffic.source_id[predefined_traffic_config_index]); - - if (check_format1_dst != NULL) { // format 1:10 - destination_id_start = strtok(tmp_destination_id, colon); - destination_id_end = strtok(NULL, colon); - - did_start = atoi(destination_id_start); - did_end = atoi(destination_id_end); - } else { - did_start = atoi(oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index]); - did_end = atoi(oai_emulation.application_config.predefined_traffic.destination_id[predefined_traffic_config_index]); - } - - for (destination_id_index = did_start; destination_id_index <= did_end; destination_id_index++) { - for (source_id_index = sid_start; source_id_index <= sid_end; source_id_index++) { - if (g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] == 0) { // no app is defined for this pair src.dst - g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_app_type_names, - oai_emulation.application_config.predefined_traffic.application_type[predefined_traffic_config_index]); - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] =map_str_to_int(switch_names, - oai_emulation.application_config.predefined_traffic.background[predefined_traffic_config_index]); - g_otg->aggregation_level[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.predefined_traffic.aggregation_level[predefined_traffic_config_index]; - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]=flow_start_time(source_id_index,destination_id_index, - oai_emulation.info.n_frames,oai_emulation.application_config.predefined_traffic.flow_start[predefined_traffic_config_index], - oai_emulation.application_config.predefined_traffic.flow_duration[predefined_traffic_config_index]); - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.predefined_traffic.flow_duration[predefined_traffic_config_index]; - - LOG_I(OTG,"predef (2):: OCG_config_OTG: [MAX UE=%d] [MAX eNB=%d]: FORMAT (%d:%d) source = %d, dest = %d, Application ID %d, type %d, Background=%d, Aggregation=%d, m2m=%d, start/duration %d/%d\n", - oai_emulation.info.nb_ue_local, oai_emulation.info.nb_enb_local, sid_start, sid_end, source_id_index, destination_id_index, - g_otg->application_idx[source_id_index][destination_id_index], - g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->aggregation_level[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->m2m[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]); - g_otg->application_idx[source_id_index][destination_id_index]+=1; - } - } - } - } - - init_predef_traffic(oai_emulation.info.nb_ue_local, oai_emulation.info.nb_enb_local); - } - - ///////// for the customized traffic - for (customized_traffic_config_index = 1; - customized_traffic_config_index <= oai_emulation.info.max_customized_traffic_config_index; - customized_traffic_config_index++) { - - LOG_I(OTG,"OCG_config_OTG: customized no. %d, max_customized %d \n", customized_traffic_config_index, oai_emulation.info.max_customized_traffic_config_index); - strcpy(tmp_source_id, oai_emulation.application_config.customized_traffic.source_id[customized_traffic_config_index]); - - check_format1 = strstr(tmp_source_id, colon); - check_format2 = strstr(tmp_source_id, comma); - - strcpy(tmp_destination_id, oai_emulation.application_config.customized_traffic.destination_id[customized_traffic_config_index]); - check_format1_dst = strstr(tmp_destination_id, colon); - state=PE_STATE; - - if (check_format1 != NULL) { // format 1:10 - source_id_start = strtok(tmp_source_id, colon); - source_id_end = strtok(NULL, colon) ; - - sid_start = atoi(source_id_start); - sid_end = atoi(source_id_end); - - if (check_format1_dst != NULL) { // format 1:10 - destination_id_start = strtok(tmp_destination_id, colon); - destination_id_end = strtok(NULL, colon); - - did_start = atoi(destination_id_start); - did_end = atoi(destination_id_end); - } else { - did_start = atoi(oai_emulation.application_config.customized_traffic.destination_id[customized_traffic_config_index]); - did_end = atoi(oai_emulation.application_config.customized_traffic.destination_id[customized_traffic_config_index]); - } - - for (destination_id_index = did_start; destination_id_index <= did_end; destination_id_index++) { - for (source_id_index = sid_start; source_id_index <= sid_end; source_id_index++) { - if (g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] == 0) { // no app is defined for this pair src.dst - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(switch_names, - oai_emulation.application_config.customized_traffic.background[customized_traffic_config_index]); - g_otg->m2m[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] =map_str_to_int(switch_names, - oai_emulation.application_config.customized_traffic.m2m[customized_traffic_config_index]); - g_otg->trans_proto[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_transport_protocol_names, - oai_emulation.application_config.customized_traffic.transport_protocol[customized_traffic_config_index]); - g_otg->ip_v[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_ip_version_names, - oai_emulation.application_config.customized_traffic.ip_version[customized_traffic_config_index]); - g_otg->aggregation_level[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.aggregation_level[customized_traffic_config_index]; - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= flow_start_time(source_id_index,destination_id_index, - oai_emulation.info.n_frames,oai_emulation.application_config.customized_traffic.flow_start[customized_traffic_config_index], - oai_emulation.application_config.customized_traffic.flow_duration[customized_traffic_config_index]); - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.flow_duration[customized_traffic_config_index]; - g_otg->idt_dist[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = map_str_to_int(otg_distribution_names, - oai_emulation.application_config.customized_traffic.idt_dist[customized_traffic_config_index]); - // printf("[OTG] config index %d dist %s\n", customized_traffic_config_index,oai_emulation.application_config.customized_traffic.idt_dist[customized_traffic_config_index]); - g_otg->idt_min[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_min_ms[customized_traffic_config_index]; - g_otg->idt_max[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_max_ms[customized_traffic_config_index]; - g_otg->idt_std_dev[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_standard_deviation[customized_traffic_config_index]; - g_otg->idt_lambda[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_lambda[customized_traffic_config_index]; - g_otg->idt_scale[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_scale[customized_traffic_config_index]; - g_otg->idt_shape[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_shape[customized_traffic_config_index]; - g_otg->size_dist[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = map_str_to_int(otg_distribution_names, - oai_emulation.application_config.customized_traffic.size_dist[customized_traffic_config_index]); - g_otg->size_min[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_min_byte[customized_traffic_config_index]; - g_otg->size_max[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_max_byte[customized_traffic_config_index]; - g_otg->size_std_dev[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_standard_deviation[customized_traffic_config_index]; - g_otg->size_lambda[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_lambda[customized_traffic_config_index]; - g_otg->size_scale[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_scale[customized_traffic_config_index]; - g_otg->size_shape[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_shape[customized_traffic_config_index]; - g_otg->dst_port[source_id_index][destination_id_index] = oai_emulation.application_config.customized_traffic.destination_port[customized_traffic_config_index]; - g_otg->pu_size_pkts[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.pu_size_pkts[customized_traffic_config_index]; - g_otg->ed_size_pkts[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.ed_size_pkts[customized_traffic_config_index]; - g_otg->prob_off_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_pu[customized_traffic_config_index]; - g_otg->prob_off_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_ed[customized_traffic_config_index]; - g_otg->prob_off_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_pe[customized_traffic_config_index]; - g_otg->prob_pu_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_pu_ed[customized_traffic_config_index]; - g_otg->prob_pu_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_pu_pe[customized_traffic_config_index]; - g_otg->prob_ed_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_ed_pe[customized_traffic_config_index]; - g_otg->prob_ed_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_ed_pu[customized_traffic_config_index]; - g_otg->holding_time_off_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_ed[customized_traffic_config_index]; - g_otg->holding_time_off_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_pu[customized_traffic_config_index]; - g_otg->holding_time_off_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_pe[customized_traffic_config_index]; - g_otg->holding_time_pe_off[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_pe_off[customized_traffic_config_index]; - - LOG_I(OTG,"customized:: OCG_config_OTG: (1) FORMAT (%d:%d) source = %d, dest = %d, Application = %d, state %d, background %d IDT DIST %d start/duration %d/%d\n", sid_start, sid_end, source_id_index, - destination_id_index, - g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - state, - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->idt_dist[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state], - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]); - - g_otg->application_idx[source_id_index][destination_id_index]+=1; - } - } - } - - } else if (check_format2 != NULL) { // format 1,2,3,5 - per_source_id = strtok(tmp_source_id, comma); - destination_id_index = atoi(oai_emulation.application_config.customized_traffic.destination_id[customized_traffic_config_index]); - - while (per_source_id != NULL) { - source_id_index = atoi(per_source_id); - - if (g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] == 0) { // no app is defined for this pair src.dst - - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] =map_str_to_int(switch_names, - oai_emulation.application_config.customized_traffic.background[customized_traffic_config_index]); - g_otg->m2m[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] =map_str_to_int(switch_names, - oai_emulation.application_config.customized_traffic.m2m[customized_traffic_config_index]); - g_otg->trans_proto[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_transport_protocol_names, - oai_emulation.application_config.customized_traffic.transport_protocol[customized_traffic_config_index]); - g_otg->ip_v[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_ip_version_names, - oai_emulation.application_config.customized_traffic.ip_version[customized_traffic_config_index]); - g_otg->aggregation_level[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.aggregation_level[customized_traffic_config_index]; - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]=flow_start_time(source_id_index,destination_id_index, - oai_emulation.info.n_frames,oai_emulation.application_config.customized_traffic.flow_start[customized_traffic_config_index], - oai_emulation.application_config.customized_traffic.flow_duration[customized_traffic_config_index]); - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.flow_duration[customized_traffic_config_index]; - g_otg->idt_dist[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = map_str_to_int(otg_distribution_names, - oai_emulation.application_config.customized_traffic.idt_dist[customized_traffic_config_index]); - g_otg->idt_min[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_min_ms[customized_traffic_config_index]; - g_otg->idt_max[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_max_ms[customized_traffic_config_index]; - g_otg->idt_std_dev[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_standard_deviation[customized_traffic_config_index]; - g_otg->idt_lambda[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_lambda[customized_traffic_config_index]; - g_otg->idt_scale[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_scale[customized_traffic_config_index]; - g_otg->idt_shape[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_shape[customized_traffic_config_index]; - g_otg->size_dist[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = map_str_to_int(otg_distribution_names, - oai_emulation.application_config.customized_traffic.size_dist[customized_traffic_config_index]); - g_otg->size_min[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_min_byte[customized_traffic_config_index]; - g_otg->size_max[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_max_byte[customized_traffic_config_index]; - g_otg->size_std_dev[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_standard_deviation[customized_traffic_config_index]; - g_otg->size_lambda[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_lambda[customized_traffic_config_index]; - g_otg->size_scale[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_scale[customized_traffic_config_index]; - g_otg->size_shape[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_shape[customized_traffic_config_index]; - g_otg->dst_port[source_id_index][destination_id_index] = oai_emulation.application_config.customized_traffic.destination_port[customized_traffic_config_index]; - g_otg->pu_size_pkts[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.pu_size_pkts[customized_traffic_config_index]; - g_otg->ed_size_pkts[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.ed_size_pkts[customized_traffic_config_index]; - g_otg->prob_off_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_pu[customized_traffic_config_index]; - g_otg->prob_off_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_ed[customized_traffic_config_index]; - g_otg->prob_off_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_pe[customized_traffic_config_index]; - g_otg->prob_pu_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_pu_ed[customized_traffic_config_index]; - g_otg->prob_pu_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_pu_pe[customized_traffic_config_index]; - g_otg->prob_ed_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_ed_pe[customized_traffic_config_index]; - g_otg->prob_ed_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_ed_pu[customized_traffic_config_index]; - g_otg->holding_time_off_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_ed[customized_traffic_config_index]; - g_otg->holding_time_off_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_pu[customized_traffic_config_index]; - g_otg->holding_time_off_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_pe[customized_traffic_config_index]; - g_otg->holding_time_pe_off[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_pe_off[customized_traffic_config_index]; - - - LOG_I(OTG,"customized:: OCG_config_OTG: (2) FORMAT (%s:%s) source = %d, dest = %d, dist type for size = %d [TODO: check code, printed value may not be correct, checks the indexes of the arry access] start/duration %d/%d\n", source_id_start, source_id_end, source_id_index, - destination_id_index, g_otg->size_dist[source_id_index][destination_id_index][0][0], - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]); - per_source_id = strtok(NULL, comma); - g_otg->application_idx[source_id_index][destination_id_index]+=1; - } - } - } else { // single node configuration - source_id_index = atoi(oai_emulation.application_config.customized_traffic.source_id[customized_traffic_config_index]); - //destination_id_index = atoi(oai_emulation.application_config.customized_traffic.destination_id[customized_traffic_config_index]); - - sid_start = atoi(oai_emulation.application_config.customized_traffic.source_id[customized_traffic_config_index]); - sid_end = atoi(oai_emulation.application_config.customized_traffic.source_id[customized_traffic_config_index]); - - if (check_format1_dst != NULL) { // format 1:10 - destination_id_start = strtok(tmp_destination_id, colon); - destination_id_end = strtok(NULL, colon); - - did_start = atoi(destination_id_start); - did_end = atoi(destination_id_end); - } else { - did_start = atoi(oai_emulation.application_config.customized_traffic.destination_id[customized_traffic_config_index]); - did_end = atoi(oai_emulation.application_config.customized_traffic.destination_id[customized_traffic_config_index]); - } - - for (destination_id_index = did_start; destination_id_index <= did_end; destination_id_index++) { - for (source_id_index = sid_start; source_id_index <= sid_end; source_id_index++) { - - if (g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] == 0) { // no app is defined for this pair src.dst - - g_otg->background[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] =map_str_to_int(switch_names, - oai_emulation.application_config.customized_traffic.background[customized_traffic_config_index]); - g_otg->m2m[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] =map_str_to_int(switch_names, - oai_emulation.application_config.customized_traffic.m2m[customized_traffic_config_index]); - - /* LOG_I(OTG, "[src %d][dst %d][app %d]test_m2m %d \n",source_id_index, destination_id_index , g_otg->application_idx[source_id_index][destination_id_index] , g_otg->m2m[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] ); - */ - - g_otg->trans_proto[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_transport_protocol_names, - oai_emulation.application_config.customized_traffic.transport_protocol[customized_traffic_config_index]); - g_otg->ip_v[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]] = map_str_to_int(otg_ip_version_names, - oai_emulation.application_config.customized_traffic.ip_version[customized_traffic_config_index]); - g_otg->aggregation_level[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.aggregation_level[customized_traffic_config_index]; - - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]=flow_start_time(source_id_index,destination_id_index, - oai_emulation.info.n_frames,oai_emulation.application_config.customized_traffic.flow_start[customized_traffic_config_index], - oai_emulation.application_config.customized_traffic.flow_duration[customized_traffic_config_index]); - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.flow_duration[customized_traffic_config_index]; - - g_otg->idt_dist[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = map_str_to_int(otg_distribution_names, - oai_emulation.application_config.customized_traffic.idt_dist[customized_traffic_config_index]); - g_otg->idt_min[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_min_ms[customized_traffic_config_index]; - g_otg->idt_max[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_max_ms[customized_traffic_config_index]; - g_otg->idt_std_dev[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_standard_deviation[customized_traffic_config_index]; - g_otg->idt_lambda[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_lambda[customized_traffic_config_index]; - g_otg->idt_scale[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_scale[customized_traffic_config_index]; - g_otg->idt_shape[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.idt_shape[customized_traffic_config_index]; - g_otg->size_dist[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = map_str_to_int(otg_distribution_names, - oai_emulation.application_config.customized_traffic.size_dist[customized_traffic_config_index]); - g_otg->size_min[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_min_byte[customized_traffic_config_index]; - g_otg->size_max[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_max_byte[customized_traffic_config_index]; - g_otg->size_std_dev[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_standard_deviation[customized_traffic_config_index]; - g_otg->size_lambda[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_lambda[customized_traffic_config_index]; - g_otg->size_scale[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_scale[customized_traffic_config_index]; - g_otg->size_shape[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state] = - oai_emulation.application_config.customized_traffic.size_shape[customized_traffic_config_index]; - g_otg->dst_port[source_id_index][destination_id_index] = oai_emulation.application_config.customized_traffic.destination_port[customized_traffic_config_index]; - g_otg->pu_size_pkts[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.pu_size_pkts[customized_traffic_config_index]; - g_otg->ed_size_pkts[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.ed_size_pkts[customized_traffic_config_index]; - g_otg->prob_off_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_pu[customized_traffic_config_index]; - g_otg->prob_off_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_ed[customized_traffic_config_index]; - g_otg->prob_off_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_off_pe[customized_traffic_config_index]; - g_otg->prob_pu_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_pu_ed[customized_traffic_config_index]; - g_otg->prob_pu_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_pu_pe[customized_traffic_config_index]; - g_otg->prob_ed_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_ed_pe[customized_traffic_config_index]; - g_otg->prob_ed_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.prob_ed_pu[customized_traffic_config_index]; - g_otg->holding_time_off_ed[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_ed[customized_traffic_config_index]; - g_otg->holding_time_off_pu[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_pu[customized_traffic_config_index]; - g_otg->holding_time_off_pe[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_off_pe[customized_traffic_config_index]; - g_otg->holding_time_pe_off[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]= - oai_emulation.application_config.customized_traffic.holding_time_pe_off[customized_traffic_config_index]; - - LOG_I(OTG,"OCG_config_OTG (single node config): source = %d, dest = %d\n", source_id_index, destination_id_index); - LOG_I(OTG,"customized:: OCG_config_OTG:(3) FORMAT (%d:%d) source = %d, dest = %d, Application = %d, IDT dist %d flow start %d duration %d \n", - did_start, did_end, source_id_index, destination_id_index, - g_otg->application_type[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->idt_dist[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]][state], - g_otg->flow_start[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]], - g_otg->flow_duration[source_id_index][destination_id_index][g_otg->application_idx[source_id_index][destination_id_index]]); - g_otg->application_idx[source_id_index][destination_id_index]+=1; - - } - } - } - } - } - } - - - if ((oai_emulation.info.max_predefined_traffic_config_index == 0) && - (oai_emulation.info.max_customized_traffic_config_index == 0) && - (oai_emulation.info.otg_enabled==1)) { // OCG not used to configure OTG, but -T option is used, so config here - LOG_I(OTG,"configure OTG through options %s\n", oai_emulation.info.otg_traffic); - - for (i=0; inum_nodes; i++) { - for (j=0; jnum_nodes; j++) { - g_otg->application_idx[i][j]=1; - - for (k=0; kapplication_idx[i][j]; k++) { - - g_otg->application_type[i][j][k] = map_str_to_int(otg_app_type_names, oai_emulation.info.otg_traffic); - g_otg->background[i][j][k]=oai_emulation.info.otg_bg_traffic_enabled; - g_otg->packet_gen_type=SUBSTRACT_STRING; - g_otg->flow_start[i][j][k]=flow_start_time(i,j,oai_emulation.info.n_frames, - oai_emulation.application_config.customized_traffic.flow_start[i+j], - oai_emulation.application_config.customized_traffic.flow_duration[i+j]); - g_otg->flow_duration[i][j][k]=oai_emulation.application_config.customized_traffic.flow_duration[i+j]; - LOG_I(OTG,"predefined traffic:: source = %d, dest = %d, Application = %d, start %d duration %d \n", - i,j, g_otg->application_type[i][j][k],g_otg->flow_start[i][j][k],g_otg->flow_duration[i][j][k]); - } - } - } - - init_predef_traffic(oai_emulation.info.nb_ue_local, oai_emulation.info.nb_enb_local); - - for (i=0; iapplication_type[i][j][k] = map_str_to_int( otg_multicast_app_type_names, oai_emulation.info.otg_traffic); - } - } - } - - init_predef_multicast_traffic(); - LOG_I(OTG,"initilizae multicast traffic %s\n",oai_emulation.info.otg_traffic); - - } - - return 1; -} - -int flow_start_time(int sid, int did, uint32_t n_frames, uint32_t start, uint32_t duration) -{ - - int offset0=uniform_dist(1,10); - int offset1=uniform_dist(10,100); - int offset2=uniform_dist(100,1000); - int interval = 300; - int flow_start_margin_1=0; - int flow_start_margin_2=0; - - // return user-defined flow start time - if (start > 0 ) - return start; - - //determine the flow start time - start = (sid+did+1)*interval; - flow_start_margin_1 = 10*n_frames - (start + offset1 + duration); - flow_start_margin_2 = 10*n_frames - (start + offset2 + duration); - - //LOG_I(OTG,"nframes %d start %d margin_1 %d margin_2 %d\n",n_frames, start,flow_start_margin_1, flow_start_margin_2); - if (flow_start_margin_2 > 0 ) - return uniform_dist(start, start+offset2); - else if (flow_start_margin_1 > 0 ) - return uniform_dist(start, start+offset1); - else - return uniform_dist(start, start+offset0); - -} - - -int ocg_config_emu(void) -{ - - if (oai_emulation.emulation_config.emulation_time_ms != 0) { - oai_emulation.info.n_frames = (int) oai_emulation.emulation_config.emulation_time_ms / 10; // configure the number of frame - oai_emulation.info.n_frames_flag = 1; - } - - if (oai_emulation.info.n_frames_flag) { - LOG_I(OCG, "number of frames in emulation is set to %d\n", oai_emulation.info.n_frames); - } else { - LOG_I(OCG, "number of frames in emulation is set to infinity\n"); - } - - oai_emulation.info.seed = (oai_emulation.emulation_config.seed.value == 0) ? oai_emulation.info.seed : oai_emulation.emulation_config.seed.value; - LOG_I (OCG,"The seed value is set to %d \n", oai_emulation.info.seed ); - - if (oai_emulation.info.cli_enabled == 1) { - if (cli_server_init(cli_server_recv) < 0) { - LOG_E(EMU,"cli server init failed \n"); - exit(-1); - } - - LOG_I(EMU, "OAI CLI is enabled\n"); - LOG_I(EMU,"eNB start state is %d, UE start state %d\n", - oai_emulation.info.cli_start_enb[0], - oai_emulation.info.cli_start_ue[0]); - } - - if (oai_emulation.info.opp_enabled) - opp_enabled = 1; - - //bin/LOG_I(OCG, "OPT output file directory = %s\n", oai_emulation.info.output_path); - oai_emulation.info.opt_enabled = ( oai_emulation.emulation_config.packet_trace.enabled == 0) ? oai_emulation.info.opt_enabled : oai_emulation.emulation_config.packet_trace.enabled; - - if (oai_emulation.info.opt_enabled == 1) { - radio_type_t radio_type; - opt_enabled = 1; - - if (oai_emulation.info.frame_type[0] == FDD) { - radio_type = RADIO_TYPE_FDD; - } else { - radio_type = RADIO_TYPE_TDD; - } - - opt_type = oai_emulation.info.opt_mode; - - if (init_opt(NULL, NULL, NULL, radio_type) == -1) { - LOG_E(OPT,"failed to run OPT \n"); - } - } - - return 1; -} - -void ocg_config_proto(void) -{ - - LOG_I(MAC,"num groups is set to %d\n",oai_emulation.protocol_config.eNB_mac_config.num_groups); - -} - diff --git a/targets/SIMU/USER/oaisim_config.h b/targets/SIMU/USER/oaisim_config.h deleted file mode 100644 index a403252d06..0000000000 --- a/targets/SIMU/USER/oaisim_config.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file oaisim_config.h -* \brief configure an emulation -* \author navid nikaein & Lusheng Wang -* \date 2006-2010 -* \version 4.0 -* \company Eurecom -* \email: openair_tech@eurecom.fr -* \note this a note -* \bug this is a bug -* \warning this is a warning -*/ - -//-----------------------------------begin group----------------------------- -/** @defgroup _oaisim The sturcture of OAISIM - -The current sturcture of oaisim is shown by the figure. - -\image html new_OCG_structure.png "new_OCG_structure" - - - * @{*/ - -/* @}*/ - -#include "UTIL/LOG/log_if.h" -#include "UTIL/LOG/log_extern.h" -#include "UTIL/OCG/OCG.h" -#include "UTIL/OPT/opt.h" // to test OPT -#include "UTIL/OMG/omg.h" -#include "UTIL/CLI/cli_if.h" -#include "PHY/defs_eNB.h" -#include "PHY/phy_extern.h" - -/** @defgroup _init_oai Initial oaisim - * @ingroup _fn - * @brief Initialize all the parameters before start an emulation - * @{*/ -void init_oai_emulation(void); -/* @}*/ - -/** @defgroup _config_oaisim All the configurations for an emulation - * @ingroup _fn - * @brief This is the function that calls all the other configuration functions - * @{*/ -void oaisim_config(void); -/* @}*/ - - -/** @defgroup _config_module Configuration functions for various modules - * @ingroup _fn - * @brief There are the functions to configure different various modules in the emulator - * @{*/ -int olg_config(void); -int ocg_config_env(void); -int ocg_config_omg(void); -int ocg_config_topo(void); -int ocg_config_app(void); -int ocg_config_emu(void); - -int flow_start_time(int sid, int did, uint32_t n_frames, uint32_t start, uint32_t duration); -/* @}*/ - diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c deleted file mode 100644 index a302c12ff3..0000000000 --- a/targets/SIMU/USER/oaisim_functions.c +++ /dev/null @@ -1,1686 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file oaisim_functions.c -* \brief function primitives of oaisim -* \author Navid Nikaein -* \date 2013-2015 -* \version 1.0 -* \company Eurecom -* \email: openair_tech@eurecom.fr -* \note -* \warning -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "assertions.h" -#include "oaisim_functions.h" - -#include "PHY/phy_extern.h" -#include "PHY/phy_extern_ue.h" -#include "LAYER2/MAC/mac_extern.h" -#include "LAYER2/MAC/mac_proto.h" -#include "LAYER2/PDCP_v10.1.0/pdcp.h" -#include "LAYER2/PDCP_v10.1.0/pdcp_primitives.h" -#include "RRC/LTE/rrc_extern.h" -#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h" -#include "PHY_INTERFACE/phy_interface_extern.h" -//#include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h" -#include "SIMULATION/ETH_TRANSPORT/proto.h" -#include "UTIL/OCG/OCG_extern.h" -#include "UTIL/LOG/vcd_signal_dumper.h" -#include "UTIL/OPT/opt.h" -#include "UTIL/OTG/otg_config.h" -#include "UTIL/OTG/otg_tx.h" -#include "cor_SF_sim.h" -#include "enb_config.h" - -#if defined(ENABLE_ITTI) -# include "intertask_interface.h" -#endif - -#if defined(ENABLE_USE_MME) -# include "s1ap_eNB.h" -#endif - -#include "../../ARCH/COMMON/common_lib.h" -#include "../../ARCH/ETHERNET/USERSPACE/LIB/if_defs.h" - -#include "ENB_APP/enb_paramdef.h" -#include "common/config/config_userapi.h" - -//constant for OAISIM soft realtime calibration -#define SF_DEVIATION_OFFSET_NS 100000 //= 0.1ms : should be as a number of UE -#define SLEEP_STEP_US 100 // = 0.01ms could be adaptive, should be as a number of UE -#define K 2 // averaging coefficient -#define TARGET_SF_TIME_NS 1000000 // 1ms = 1000000 ns - - -int otg_times = 0; -int if_times = 0; -int for_times = 0; - -uint16_t Nid_cell = 0; //needed by init_lte_vars -int nb_antennas_rx_ue = 1; // // -uint8_t target_dl_mcs = 16; // max mcs used by MAC scheduler -uint8_t rate_adaptation_flag = 0; -uint8_t set_snr = 0; -uint8_t set_sinr = 0; -double snr_dB=0, sinr_dB=0; -uint8_t set_seed = 0; -uint8_t cooperation_flag; // for cooperative communication -uint8_t abstraction_flag = 0; -uint8_t ethernet_flag = 0; -double snr_step = 1.0; -uint8_t ue_connection_test = 0; -double forgetting_factor = 0.0; -uint8_t beta_ACK = 0; -uint8_t beta_RI = 0; -uint8_t beta_CQI = 2; -uint8_t target_ul_mcs = 16; -//LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; -int map1,map2; -double **ShaF = NULL; -// pointers signal buffers (s = transmit, r,r0 = receive) -double **s_re, **s_im, **r_re, **r_im, **r_re0, **r_im0; -node_list* ue_node_list = NULL; -node_list* enb_node_list = NULL; -int omg_period = 10000; -int pdcp_period = 0; -int cba_backoff = 30; -// time calibration for soft realtime mode -struct timespec time_spec; -unsigned long time_last = 0; -unsigned long time_now = 0; -int td = 0; -int td_avg = 0; -int sleep_time_us = 0; - -int phy_test = 0; - -extern node_desc_t *enb_data[NUMBER_OF_RU_MAX]; -extern node_desc_t *ue_data[MAX_MOBILES_PER_ENB]; -extern channel_desc_t *RU2UE[NUMBER_OF_RU_MAX][MAX_MOBILES_PER_ENB][MAX_NUM_CCs]; -extern channel_desc_t *UE2RU[MAX_MOBILES_PER_ENB][NUMBER_OF_RU_MAX][MAX_NUM_CCs]; - -extern mapping small_scale_names[]; -#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) -extern pdcp_mbms_t pdcp_mbms_array_ue[MAX_MOBILES_PER_ENB][maxServiceCount][maxSessionPerPMCH]; -extern pdcp_mbms_t pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH]; -#endif - -extern time_stats_t dl_chan_stats; -extern time_stats_t ul_chan_stats; - -extern int xforms; - - -extern uint32_t downlink_frequency[MAX_NUM_CCs][4]; -extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; - -int oaisim_flag=1; - - -void RCConfig_sim(void) { - - paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0}; - - - // Get num RU instances - config_getlist( &RUParamList,NULL,0, NULL); - RC.nb_RU = RUParamList.numelt; - - -} - -void get_simulation_options(int argc, char *argv[]) -{ - int option; - - enum long_option_e { - LONG_OPTION_START = 0x100, /* Start after regular single char options */ - - LONG_OPTION_ENB_CONF, - - LONG_OPTION_PDNC_PERIOD, - LONG_OPTION_OMG_PERIOD, - LONG_OPTION_OEH_ENABLED, - - LONG_OPTION_ENB_RAL_LISTENING_PORT, - LONG_OPTION_ENB_RAL_IP_ADDRESS, - LONG_OPTION_ENB_RAL_LINK_ID, - LONG_OPTION_ENB_RAL_LINK_ADDRESS, - - LONG_OPTION_ENB_MIHF_REMOTE_PORT, - LONG_OPTION_ENB_MIHF_IP_ADDRESS, - LONG_OPTION_ENB_MIHF_ID, - - LONG_OPTION_UE_RAL_LISTENING_PORT, - LONG_OPTION_UE_RAL_IP_ADDRESS, - LONG_OPTION_UE_RAL_LINK_ID, - LONG_OPTION_UE_RAL_LINK_ADDRESS, - - LONG_OPTION_UE_MIHF_REMOTE_PORT, - LONG_OPTION_UE_MIHF_IP_ADDRESS, - LONG_OPTION_UE_MIHF_ID, - - LONG_OPTION_MALLOC_TRACE_ENABLED, - - LONG_OPTION_CBA_BACKOFF_TIMER, - - LONG_OPTION_PHYTEST, - LONG_OPTION_XFORMS, - -#if T_TRACER - LONG_OPTION_T_PORT, - LONG_OPTION_T_NOWAIT, - LONG_OPTION_T_DONT_FORK, -#endif - }; - - static struct option long_options[] = { - {"enb-conf", required_argument, 0, LONG_OPTION_ENB_CONF}, - - {"pdcp-period", required_argument, 0, LONG_OPTION_PDNC_PERIOD}, - {"omg-period", required_argument, 0, LONG_OPTION_OMG_PERIOD}, - {"oeh-enabled", no_argument, 0, LONG_OPTION_OEH_ENABLED}, - - {"enb-ral-listening-port", required_argument, 0, LONG_OPTION_ENB_RAL_LISTENING_PORT}, - {"enb-ral-ip-address", required_argument, 0, LONG_OPTION_ENB_RAL_IP_ADDRESS}, - {"enb-ral-link-id", required_argument, 0, LONG_OPTION_ENB_RAL_LINK_ID}, - {"enb-ral-link-address", required_argument, 0, LONG_OPTION_ENB_RAL_LINK_ADDRESS}, - - {"enb-mihf-remote-port", required_argument, 0, LONG_OPTION_ENB_MIHF_REMOTE_PORT}, - {"enb-mihf-ip-address", required_argument, 0, LONG_OPTION_ENB_MIHF_IP_ADDRESS}, - {"enb-mihf-id", required_argument, 0, LONG_OPTION_ENB_MIHF_ID}, - - {"ue-ral-listening-port", required_argument, 0, LONG_OPTION_UE_RAL_LISTENING_PORT}, - {"ue-ral-ip-address", required_argument, 0, LONG_OPTION_UE_RAL_IP_ADDRESS}, - {"ue-ral-link-id", required_argument, 0, LONG_OPTION_UE_RAL_LINK_ID}, - {"ue-ral-link-address", required_argument, 0, LONG_OPTION_UE_RAL_LINK_ADDRESS}, - - {"ue-mihf-remote-port", required_argument, 0, LONG_OPTION_UE_MIHF_REMOTE_PORT}, - {"ue-mihf-ip-address", required_argument, 0, LONG_OPTION_UE_MIHF_IP_ADDRESS}, - {"ue-mihf-id", required_argument, 0, LONG_OPTION_UE_MIHF_ID}, - - {"malloc-trace-enabled", no_argument, 0, LONG_OPTION_MALLOC_TRACE_ENABLED}, - - {"cba-backoff", required_argument, 0, LONG_OPTION_CBA_BACKOFF_TIMER}, - - {"phy-test", no_argument, NULL, LONG_OPTION_PHYTEST}, - {"xforms", no_argument, 0, LONG_OPTION_XFORMS}, - -#if T_TRACER - {"T_port", required_argument, 0, LONG_OPTION_T_PORT}, - {"T_nowait", no_argument, 0, LONG_OPTION_T_NOWAIT}, - {"T_dont_fork", no_argument, 0, LONG_OPTION_T_DONT_FORK}, -#endif - - {NULL, 0, NULL, 0} - }; - - while ((option = getopt_long (argc, argv, "aA:b:B:c:C:D:d:eE:f:FGg:hHi:IJ:j:k:K:l:L:m:M:n:N:oO:p:P:qQ:rR:s:S:t:T:u:U:vV:w:W:x:X:y:Y:z:Z:", long_options, NULL)) != -1) { - switch (option) { - case LONG_OPTION_PHYTEST: - phy_test = 1; - break; - - case LONG_OPTION_ENB_CONF: - if (optarg) { - free(RC.config_file_name); // prevent memory leak if option is used multiple times - RC.config_file_name = strdup(optarg); - printf("eNB configuration file is %s\n", RC.config_file_name); - } - - break; - - case LONG_OPTION_PDNC_PERIOD: - if (optarg) { - pdcp_period = atoi(optarg); - printf("PDCP period is %d\n", pdcp_period); - } - - break; - - case LONG_OPTION_OMG_PERIOD: - if (optarg) { - omg_period = atoi(optarg); - printf("OMG period is %d\n", omg_period); - } - - break; - - case LONG_OPTION_OEH_ENABLED: - oai_emulation.info.oeh_enabled = 1; - break; - - case LONG_OPTION_MALLOC_TRACE_ENABLED: - mtrace(); - break; - - case LONG_OPTION_CBA_BACKOFF_TIMER: - oai_emulation.info.cba_backoff=atoi(optarg); - cba_backoff=atoi(optarg); - printf("setting CBA backoff to %d\n", cba_backoff); - break; - -#if ENABLE_RAL - - case LONG_OPTION_ENB_RAL_LISTENING_PORT: - if (optarg) { - g_conf_enb_ral_listening_port = strdup(optarg); - printf("eNB RAL listening port is %s\n", g_conf_enb_ral_listening_port); - } - - break; - - case LONG_OPTION_ENB_RAL_IP_ADDRESS: - if (optarg) { - g_conf_enb_ral_ip_address = strdup(optarg); - printf("eNB RAL IP address is %s\n", g_conf_enb_ral_ip_address); - } - - break; - - case LONG_OPTION_ENB_RAL_LINK_ADDRESS: - if (optarg) { - g_conf_enb_ral_link_address = strdup(optarg); - printf("eNB RAL link address is %s\n", g_conf_enb_ral_link_address); - } - - break; - - case LONG_OPTION_ENB_RAL_LINK_ID: - if (optarg) { - g_conf_enb_ral_link_id = strdup(optarg); - printf("eNB RAL link id is %s\n", g_conf_enb_ral_link_id); - } - - break; - - case LONG_OPTION_ENB_MIHF_REMOTE_PORT: - if (optarg) { - g_conf_enb_mihf_remote_port = strdup(optarg); - printf("eNB MIH-F remote port is %s\n", g_conf_enb_mihf_remote_port); - } - - break; - - case LONG_OPTION_ENB_MIHF_IP_ADDRESS: - if (optarg) { - g_conf_enb_mihf_ip_address = strdup(optarg); - printf("eNB MIH-F IP address is %s\n", g_conf_enb_mihf_ip_address); - } - - break; - - case LONG_OPTION_ENB_MIHF_ID: - if (optarg) { - g_conf_enb_mihf_id = strdup(optarg); - printf("eNB MIH-F id is %s\n", g_conf_enb_mihf_id); - } - - break; - - case LONG_OPTION_UE_RAL_LISTENING_PORT: - if (optarg) { - g_conf_ue_ral_listening_port = strdup(optarg); - printf("UE RAL listening port is %s\n", g_conf_ue_ral_listening_port); - } - - break; - - case LONG_OPTION_UE_RAL_IP_ADDRESS: - if (optarg) { - g_conf_ue_ral_ip_address = strdup(optarg); - printf("UE RAL IP address is %s\n", g_conf_ue_ral_ip_address); - } - - break; - - case LONG_OPTION_UE_RAL_LINK_ID: - if (optarg) { - g_conf_ue_ral_link_id = strdup(optarg); - printf("UE RAL link id is %s\n", g_conf_ue_ral_link_id); - } - - break; - - case LONG_OPTION_UE_RAL_LINK_ADDRESS: - if (optarg) { - g_conf_ue_ral_link_address = strdup(optarg); - printf("UE RAL link address is %s\n", g_conf_ue_ral_link_address); - } - - break; - - case LONG_OPTION_UE_MIHF_REMOTE_PORT: - if (optarg) { - g_conf_ue_mihf_remote_port = strdup(optarg); - printf("UE MIH-F remote port is %s\n", g_conf_ue_mihf_remote_port); - } - - break; - - case LONG_OPTION_UE_MIHF_IP_ADDRESS: - if (optarg) { - g_conf_ue_mihf_ip_address = strdup(optarg); - printf("UE MIH-F IP address is %s\n", g_conf_ue_mihf_ip_address); - } - - break; - - case LONG_OPTION_UE_MIHF_ID: - if (optarg) { - g_conf_ue_mihf_id = strdup(optarg); - printf("UE MIH-F id is %s\n", g_conf_ue_mihf_id); - } - - break; -#endif - - case LONG_OPTION_XFORMS: - xforms=1; - break; - -#if T_TRACER - case LONG_OPTION_T_PORT: { - extern int T_port; - if (optarg == NULL) abort(); /* should not happen */ - T_port = atoi(optarg); - break; - } - - case LONG_OPTION_T_NOWAIT: { - extern int T_wait; - T_wait = 0; - break; - } - - case LONG_OPTION_T_DONT_FORK: { - extern int T_dont_fork; - T_dont_fork = 1; - break; - } -#endif - - case 'a': - abstraction_flag = 1; - printf("FATAL: -a flag not functional for the moment.\nWe are working on fixing the abstraction mode.\n"); - exit(1); - break; - - case 'A': - - //oai_emulation.info.ocm_enabled=1; - if (optarg == NULL) - oai_emulation.environment_system_config.fading.small_scale.selected_option="AWGN"; - else - oai_emulation.environment_system_config.fading.small_scale.selected_option= optarg; - - //awgn_flag = 1; - break; - - case 'b': - oai_emulation.info.nb_enb_local = atoi (optarg); - break; - - case 'B': - oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option = optarg; - //oai_emulation.info.omg_model_enb = atoi (optarg); - break; - - case 'c': - //strcpy(oai_emulation.info.local_server, optarg); - strncpy(oai_emulation.info.local_server, optarg, sizeof(oai_emulation.info.local_server)); - oai_emulation.info.local_server[sizeof(oai_emulation.info.local_server) - 1] = 0; // terminate string - oai_emulation.info.ocg_enabled=1; - break; - - case 'C': - oai_emulation.info.tdd_config[0] = atoi (optarg); - AssertFatal (oai_emulation.info.tdd_config[0] <= TDD_Config__subframeAssignment_sa6, "Illegal tdd_config %d (should be 0-%d)!", - oai_emulation.info.tdd_config[0], TDD_Config__subframeAssignment_sa6); - break; - - case 'D': - oai_emulation.info.multicast_ifname = strdup(optarg); - break; - - case 'e': - oai_emulation.info.extended_prefix_flag[0] = 1; - break; - - case 'E': - set_seed = 1; - oai_emulation.info.seed = atoi (optarg); - break; - - case 'f': - forgetting_factor = atof (optarg); - break; - - case 'F': // set FDD - printf("Setting Frame to FDD\n"); - oai_emulation.info.frame_type[0] = 0; - oai_emulation.info.frame_type_name[0] = "FDD"; - break; - - case 'g': - oai_emulation.info.multicast_group = atoi (optarg); - break; - - case 'G' : - oai_emulation.info.otg_bg_traffic_enabled = 1; - break; - - case 'h': - help (); - exit (1); - break; - - case 'H': - oai_emulation.info.handover_active=1; - printf("Activate the handover procedure at RRC\n"); - break; - - case 'i': -#ifdef PROC - Process_Flag=1; - node_id = wgt+atoi(optarg); - port+=atoi(optarg); -#endif - break; - - case 'I': - oai_emulation.info.cli_enabled = 1; - break; - - case 'j' : - // number of relay nodes: currently only applicable to eMBMS - oai_emulation.info.nb_rn_local = atoi (optarg); - break; - - case 'J': - ue_connection_test=1; - oai_emulation.info.ocm_enabled=0; - snr_step = atof(optarg); - break; - - case 'k': - //ricean_factor = atof (optarg); - printf("[SIM] Option k is no longer supported on the command line. Please specify your channel model in the xml template\n"); - exit(-1); - break; - - case 'K': - oai_emulation.info.itti_dump_file = optarg; - break; - - case 'l': - oai_emulation.info.g_log_level = atoi(optarg); - break; - - case 'L': // set FDD - flag_LA = atoi(optarg); - break; - - case 'm': - target_dl_mcs = atoi (optarg); - printf("Max target downlink MCS used by MAC scheduler is set to %d\n", target_dl_mcs); - break; - - case 'M': - abstraction_flag = 1; - ethernet_flag = 1; - oai_emulation.info.ethernet_id = atoi (optarg); - oai_emulation.info.master_id = oai_emulation.info.ethernet_id; - oai_emulation.info.ethernet_flag = 1; - break; - - case 'n': - oai_emulation.info.n_frames = atoi (optarg); - oai_emulation.emulation_config.emulation_time_ms= oai_emulation.info.n_frames * 10; // 10 ms frame - //n_frames = (n_frames >1024) ? 1024: n_frames; // adjust the n_frames if higher that 1024 - oai_emulation.info.n_frames_flag = 1; - break; - - case 'N': - Nid_cell = atoi (optarg); - - if (Nid_cell > 503) { - printf("Illegal Nid_cell %d (should be 0 ... 503)\n", Nid_cell); - exit(-1); - } - - break; - - case 'O': - if (optarg) { - free(RC.config_file_name); // prevent memory leak if option is used multiple times - RC.config_file_name = strdup(optarg); - } - - break; - - case 'o': - oai_emulation.info.slot_isr = 1; - break; - - case 'p': - oai_emulation.info.nb_master = atoi (optarg); - break; - - case 'P': - oai_emulation.info.opt_enabled = 1; - opt_enabled = 1; - - if (strcmp(optarg, "wireshark") == 0) { - opt_type = OPT_WIRESHARK; - printf("Enabling OPT for wireshark\n"); - } else if (strcmp(optarg, "pcap") == 0) { - opt_type = OPT_PCAP; - printf("Enabling OPT for pcap\n"); - } else { - printf("Unrecognized option for OPT module. -> Disabling it\n"); - printf("Possible values are either wireshark or pcap\n"); - opt_type = OPT_NONE; - oai_emulation.info.opt_enabled = 0; - opt_enabled = 0; - } - - oai_emulation.info.opt_mode = opt_type; - break; - - case 'q': - // openair performane profiler - oai_emulation.info.opp_enabled = 1; // this var is used for OCG - opp_enabled = 1; // this is the global var used by oaisim - break; - - case 'Q': - //eMBMS_active=1; - // 0 : not used (default), 1: eMBMS and RRC enabled, 2: eMBMS relaying and RRC enabled, 3: eMBMS enabled, RRC disabled, 4: eMBMS relaying enabled, RRC disabled - oai_emulation.info.eMBMS_active_state = atoi (optarg); - break; - - case 'r': - rate_adaptation_flag = 1; - break; - - case 'R': - oai_emulation.info.N_RB_DL[0] = atoi (optarg); - - if ((oai_emulation.info.N_RB_DL[0] != 6) && (oai_emulation.info.N_RB_DL[0] != 15) && (oai_emulation.info.N_RB_DL[0] != 25) - && (oai_emulation.info.N_RB_DL[0] != 50) && (oai_emulation.info.N_RB_DL[0] != 75) && (oai_emulation.info.N_RB_DL[0] != 100)) { - printf("Illegal N_RB_DL %d (should be one of 6,15,25,50,75,100)\n", oai_emulation.info.N_RB_DL[0]); - exit (-1); - } - - break; - - case 's': - snr_dB = atoi (optarg); - // set_snr = 1; - oai_emulation.info.ocm_enabled=0; - break; - - case 'S': - sinr_dB = atoi (optarg); - set_sinr = 1; - oai_emulation.info.ocm_enabled=0; - break; - - case 't': - target_ul_mcs = atoi (optarg); - printf("Max target uplink MCS used by MAC scheduler is set to %d\n", target_ul_mcs); - break; - - case 'T': - oai_emulation.info.otg_enabled = 1; - oai_emulation.info.otg_traffic = optarg; - break; - - case 'u': - NB_UE_INST = atoi (optarg); - break; - - case 'U': - oai_emulation.topology_config.mobility.UE_mobility.UE_mobility_type.selected_option = optarg; - break; - - case 'v': - oai_emulation.info.omv_enabled = 1; - break; - - case 'V': - ouput_vcd = 1; - oai_emulation.info.vcd_enabled = 1; - oai_emulation.info.vcd_file = optarg; - break; - - case 'w': - oai_emulation.info.cba_group_active = atoi (optarg); - break; - - case 'W': -#ifdef SMBV - config_smbv = 1; - - if(atoi(optarg)!=0) - strcpy(smbv_ip,optarg); - -#endif - break; - - case 'x': - /* - oai_emulation.info.transmission_mode[0] = atoi (optarg); - - if ((oai_emulation.info.transmission_mode[0] != 1) && (oai_emulation.info.transmission_mode[0] != 2) && - (oai_emulation.info.transmission_mode[0] != 3) && (oai_emulation.info.transmission_mode[0] != 4) && - (oai_emulation.info.transmission_mode[0] != 5) && (oai_emulation.info.transmission_mode[0] != 6)) && (oai_emulation.info.transmission_mode[0] !=7)) { - printf("Unsupported transmission mode %d\n",oai_emulation.info.transmission_mode[0]); - exit(-1); - } - */ - printf("Option -x deprecated. Please set transmission mode in eNB config file\n"); - exit(-1); - - break; - - case 'X': -#ifdef PROC - temp=atoi(optarg); - - if(temp==0) { - port=CHANNEL_PORT; - Channel_Flag=1; - Process_Flag=0; - wgt=0; - } else if(temp==1) { - port=eNB_PORT; - wgt=0; - } else { - port=UE_PORT; - wgt=MAX_eNB; - } - -#endif - break; - - case 'y': - nb_antennas_rx_ue=atoi(optarg); - - if (nb_antennas_rx_ue>4) { - printf("Cannot have more than 4 antennas\n"); - exit(-1); - } - - break; - - case 'Y': - oai_emulation.info.g_log_verbosity_option = strdup(optarg); - break; - - case 'z': - cooperation_flag = atoi (optarg); - break; - - case 'Z': - /* Sebastien ROUX: Reserved for future use (currently used in ltenow branch) */ - break; - - default: - help (); - exit (-1); - break; - } - } - - if ( load_configmodule(argc,argv) == NULL) { - exit_fun("[SOFTMODEM] Error, configuration module init failed\n"); - } - - if (RC.config_file_name != NULL) { - /* Read eNB configuration file */ - RCConfig_sim(); - printf("returned with %d eNBs, %d rus\n",RC.nb_inst,RC.nb_RU); - oai_emulation.info.nb_enb_local = RC.nb_inst; - oai_emulation.info.nb_ru_local = RC.nb_RU; - - /* - for (int j=0; jnb_ru; j++) { - - // local_remote_radio = BBU_REMOTE_RADIO_HEAD; - (eth_params+j)->local_if_name = enb_properties->ru_config[j]->ru_if_name; - (eth_params+j)->my_addr = enb_properties->ru_config[j]->local_address; - (eth_params+j)->my_port = enb_properties->ru_config[j]->local_port; - (eth_params+j)->remote_addr = enb_properties->ru_config[j]->remote_address; - (eth_params+j)->remote_port = enb_properties->ru_config[j]->remote_port; - - if (enb_properties->ru_config[j]->raw == 1) { - (eth_params+j)->transp_preference = ETH_RAW_MODE; - ru_if_in[j] = REMOTE_IF5; - node_function[j] = NGFI_RRU_IF5; - } else if (enb_properties->ru_config[j]->rawif4p5 == 1) { - (eth_params+j)->transp_preference = ETH_RAW_IF4p5_MODE; - ru_if_in[j] = REMOTE_IF4p5; - node_function[j] = NGFI_RRU_IF4p5; - } else if (enb_properties->ru_config[j]->udpif4p5 == 1) { - (eth_params+j)->transp_preference = ETH_UDP_IF4p5_MODE; - ru_if_in[j] = REMOTE_IF4p5; - node_function[j] = NGFI_RRU_IF4p5; - } else if (enb_properties->ru_config[j]->rawif5_mobipass == 1) { - (eth_params+j)->transp_preference = ETH_RAW_IF5_MOBIPASS; - ru_if_in[j] = REMOTE_IF5; - LOG_E(EMU,"Don't use 8-bit IF5 format with oaisim, please change in configuration file\n"); - } else { - (eth_params+j)->transp_preference = ETH_UDP_MODE; - ru_if_in[j] = REMOTE_IF5; - node_function[j] = NGFI_RRU_IF5; - } - node_timing[j] = synch_to_ext_device; - - if (enb_properties->number > 0) { - //Update some simulation parameters - oai_emulation.info.frame_type[0] = enb_properties->properties[0]->frame_type[0]; - oai_emulation.info.tdd_config[0] = enb_properties->properties[0]->tdd_config[0]; - oai_emulation.info.tdd_config_S[0] = enb_properties->properties[0]->tdd_config_s[0]; - oai_emulation.info.extended_prefix_flag[0] = enb_properties->properties[0]->prefix_type[0]; - - oai_emulation.info.node_function[0] = enb_properties->properties[0]->cc_node_function[0]; - oai_emulation.info.node_timing[0] = enb_properties->properties[0]->cc_node_timing[0]; - downlink_frequency[0][0] = enb_properties->properties[0]->downlink_frequency[0]; - uplink_frequency_offset[0][0] = enb_properties->properties[0]->uplink_frequency_offset[0]; - oai_emulation.info.N_RB_DL[0] = enb_properties->properties[0]->N_RB_DL[0]; - LOG_E(EMU,"Please use only RRU with oaisim, remove eNB descriptors in configuration file\n"); - exit(-1); - } - }*/ - } - else { - printf("Please provide a configuration file\n"); - exit(-1); - } -} - -void check_and_adjust_params(void) -{ - - int32_t ret; - //int i,j; - - if (oai_emulation.info.nb_ue_local + oai_emulation.info.nb_rn_local > MAX_MOBILES_PER_ENB) { - LOG_E(EMU,"Enter fewer than %d UEs/RNs for the moment or change the MAX_MOBILES_PER_ENB\n", MAX_MOBILES_PER_ENB); - exit(EXIT_FAILURE); - } - - if (oai_emulation.info.nb_enb_local + oai_emulation.info.nb_rn_local > NUMBER_OF_eNB_MAX) { - LOG_E(EMU,"Enter fewer than %d eNBs/RNs for the moment or change the MAX_MOBILES_PER_ENB\n", NUMBER_OF_eNB_MAX); - exit(EXIT_FAILURE); - } - - if (oai_emulation.info.nb_rn_local > NUMBER_OF_RN_MAX) { - LOG_E(EMU,"Enter fewer than %d RNs for the moment or change the NUMBER_OF_RN_MAX\n", NUMBER_OF_RN_MAX); - exit(EXIT_FAILURE); - } - - // fix ethernet and abstraction with RRC_CELLULAR Flag -#ifdef RRC_CELLULAR - abstraction_flag = 1; - ethernet_flag = 1; -#endif - - if (set_sinr == 0) - sinr_dB = snr_dB - 20; - - // setup netdevice interface (netlink socket) - LOG_I(EMU,"[INIT] Starting NAS netlink interface\n"); - ret = netlink_init(); - - if (ret < 0) - LOG_W(EMU,"[INIT] Netlink not available, careful ...\n"); - /* - if (ethernet_flag == 1) { - oai_emulation.info.master[oai_emulation.info.master_id].nb_ue = oai_emulation.info.nb_ue_local + oai_emulation.info.nb_rn_local; - oai_emulation.info.master[oai_emulation.info.master_id].nb_enb = oai_emulation.info.nb_enb_local + oai_emulation.info.nb_rn_local; - - if (oai_emulation.info.nb_rn_local>0) - LOG_N(EMU,"Ethernet emulation is not yet tested with the relay nodes\n"); - - if (!oai_emulation.info.master_id) - oai_emulation.info.is_primary_master = 1; - - j = 1; - - for (i = 0; i < oai_emulation.info.nb_master; i++) { - if (i != oai_emulation.info.master_id) - oai_emulation.info.master_list = oai_emulation.info.master_list + j; - - LOG_I (EMU, "Index of master id i=%d MASTER_LIST %d\n", i, oai_emulation.info.master_list); - j *= 2; - } - - LOG_I (EMU, " Total number of master %d my master id %d\n", oai_emulation.info.nb_master, oai_emulation.info.master_id); - // init_bypass (); - - while (emu_tx_status != SYNCED_TRANSPORT) { - LOG_I (EMU, " Waiting for EMU Transport to be synced\n"); - emu_transport_sync (); //emulation_tx_rx(); - } - } // ethernet flag - */ - // - - NB_RU = RC.nb_RU; - -#if defined(PDCP_USE_NETLINK_QUEUES) && defined(OPENAIR2) - pdcp_netlink_init(); -#endif - -} - -void init_seed(uint8_t set_seed) -{ - - if(set_seed) { - - randominit (oai_emulation.info.seed); - set_taus_seed (oai_emulation.info.seed); - - } else { - randominit (0); - set_taus_seed (0); - } -} - -openair0_timestamp current_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs]; -openair0_timestamp current_UE_rx_timestamp[MAX_MOBILES_PER_ENB][MAX_NUM_CCs]; -openair0_timestamp last_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs]; -openair0_timestamp last_UE_rx_timestamp[MAX_MOBILES_PER_ENB][MAX_NUM_CCs]; - -int ru_trx_start(openair0_device *device) { - return(0); -} - -void ru_trx_end(openair0_device *device) { - return; -} - -int ru_trx_stop(openair0_device *device) { - return(0); -} -int UE_trx_start(openair0_device *device) { - return(0); -} -void UE_trx_end(openair0_device *device) { - return; -} -int UE_trx_stop(openair0_device *device) { - return(0); -} -int ru_trx_set_freq(openair0_device *device, openair0_config_t *openair0_cfg, int dummy) { - return(0); -} -int ru_trx_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) { - return(0); -} -int UE_trx_set_freq(openair0_device *device, openair0_config_t *openair0_cfg, int dummy) { - return(0); -} -int UE_trx_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) { - return(0); -} - -extern pthread_mutex_t subframe_mutex; -extern int subframe_ru_mask,subframe_UE_mask; - - -int ru_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) { - - int ru_id = device->Mod_id; - int CC_id = device->CC_id; - - int subframe; - int sample_count=0; - - *ptimestamp = last_ru_rx_timestamp[ru_id][CC_id]; - - - LOG_D(EMU,"RU_trx_read nsamps %d TS(%llu,%llu) => subframe %d\n",nsamps, - (unsigned long long)current_ru_rx_timestamp[ru_id][CC_id], - (unsigned long long)last_ru_rx_timestamp[ru_id][CC_id], - (int)((*ptimestamp/RC.ru[ru_id]->frame_parms.samples_per_tti)%10)); - // if we're at a subframe boundary generate UL signals for this ru - - while (sample_countframe_parms.samples_per_tti)%10; - if (subframe_select(&RC.ru[ru_id]->frame_parms,subframe) != SF_DL || RC.ru[ru_id]->frame_parms.frame_type == FDD) { - LOG_D(EMU,"RU_trx_read generating UL subframe %d (Ts %llu, current TS %llu)\n", - subframe,(unsigned long long)*ptimestamp, - (unsigned long long)current_ru_rx_timestamp[ru_id][CC_id]); - - do_UL_sig(UE2RU, - enb_data, - ue_data, - subframe, - 0, // abstraction_flag - &RC.ru[ru_id]->frame_parms, - 0, // frame is only used for abstraction - ru_id, - CC_id); - } - last_ru_rx_timestamp[ru_id][CC_id] += RC.ru[ru_id]->frame_parms.samples_per_tti; - sample_count += RC.ru[ru_id]->frame_parms.samples_per_tti; - } - - - return(nsamps); -} - -int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) -{ - int UE_id = device->Mod_id; - int CC_id = device->CC_id; - - int subframe; - int sample_count=0; - int read_size; - int sptti = PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti; - - *ptimestamp = last_UE_rx_timestamp[UE_id][CC_id]; - - LOG_D(EMU,"UE %d DL simulation 0: UE_trx_read nsamps %d TS %llu (%llu, offset %d) antenna %d\n", - UE_id, - nsamps, - (unsigned long long)current_UE_rx_timestamp[UE_id][CC_id], - (unsigned long long)last_UE_rx_timestamp[UE_id][CC_id], - (int)(last_UE_rx_timestamp[UE_id][CC_id]%sptti), - cc); - - - if (nsamps < sptti) - read_size = nsamps; - else - read_size = sptti; - - while (sample_countframe_parms, - UE_id, - CC_id); - LOG_D(EMU,"UE %d: DL simulation 6: UE_trx_read @ TS %"PRIi64" (%"PRIi64")=> frame %d, subframe %d\n", - UE_id, current_UE_rx_timestamp[UE_id][CC_id], - last_UE_rx_timestamp[UE_id][CC_id], - (int)((last_UE_rx_timestamp[UE_id][CC_id]/(sptti*10))&1023), - subframe); - - last_UE_rx_timestamp[UE_id][CC_id] += read_size; - sample_count += read_size; - - - - - } - - - return(nsamps); -} - -extern double ru_amp[NUMBER_OF_RU_MAX]; - -int ru_trx_write(openair0_device *device,openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) { - - int ru_id = device->Mod_id; - - LTE_DL_FRAME_PARMS *frame_parms = &RC.ru[ru_id]->frame_parms; - - pthread_mutex_lock(&subframe_mutex); - LOG_D(EMU,"[TXPATH] ru_trx_write: RU %d mask %d\n",ru_id,subframe_ru_mask); - pthread_mutex_unlock(&subframe_mutex); - - // compute amplitude of TX signal from first symbol in subframe - // note: assumes that the packet is an entire subframe - - ru_amp[ru_id] = 0; - for (int aa=0; aanb_tx; aa++) { - ru_amp[ru_id] += (double)signal_energy((int32_t*)buff[aa],frame_parms->ofdm_symbol_size)/(12*frame_parms->N_RB_DL); - } - ru_amp[ru_id] = sqrt(ru_amp[ru_id]); - - LOG_D(EMU,"Setting amp for RU %d to %f (%d)\n",ru_id,ru_amp[ru_id], dB_fixed((double)signal_energy((int32_t*)buff[0],frame_parms->ofdm_symbol_size))); - // tell top-level we are done - pthread_mutex_lock(&subframe_mutex); - subframe_ru_mask|=(1<N_RB_DL == 100) { - if (frame_parms[0]->threequarter_fs) { - openair0_cfg[card].sample_rate=23.04e6; - openair0_cfg[card].samples_per_frame = 230400; - openair0_cfg[card].tx_bw = 10e6; - openair0_cfg[card].rx_bw = 10e6; - } - else { - openair0_cfg[card].sample_rate=30.72e6; - openair0_cfg[card].samples_per_frame = 307200; - openair0_cfg[card].tx_bw = 10e6; - openair0_cfg[card].rx_bw = 10e6; - } - } else if(frame_parms[0]->N_RB_DL == 50) { - openair0_cfg[card].sample_rate=15.36e6; - openair0_cfg[card].samples_per_frame = 153600; - openair0_cfg[card].tx_bw = 5e6; - openair0_cfg[card].rx_bw = 5e6; - } else if (frame_parms[0]->N_RB_DL == 25) { - openair0_cfg[card].sample_rate=7.68e6; - openair0_cfg[card].samples_per_frame = 76800; - openair0_cfg[card].tx_bw = 2.5e6; - openair0_cfg[card].rx_bw = 2.5e6; - } else if (frame_parms[0]->N_RB_DL == 6) { - openair0_cfg[card].sample_rate=1.92e6; - openair0_cfg[card].samples_per_frame = 19200; - openair0_cfg[card].tx_bw = 1.5e6; - openair0_cfg[card].rx_bw = 1.5e6; - } - - if (frame_parms[0]->frame_type==TDD) - openair0_cfg[card].duplex_mode = duplex_mode_TDD; - else //FDD - openair0_cfg[card].duplex_mode = duplex_mode_FDD; - - - openair0_cfg[card].remote_addr = (eth_params+card)->remote_addr; - openair0_cfg[card].remote_port = (eth_params+card)->remote_port; - openair0_cfg[card].my_addr = (eth_params+card)->my_addr; - openair0_cfg[card].my_port = (eth_params+card)->my_port; - - - printf("HW: Configuring card %d, nb_antennas_tx/rx %d/%d\n",card, - RC.ru[0]->nb_tx, - RC.ru[0]->nb_rx); - openair0_cfg[card].Mod_id = 0; - - - - openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; - openair0_cfg[card].tx_num_channels=min(2,RC.ru[0]->nb_tx); - openair0_cfg[card].rx_num_channels=min(2,RC.ru[0]->nb_rx); - - for (i=0; i<4; i++) { - - openair0_cfg[card].rx_gain[i] = RC.ru[0]->rx_total_gain_dB; - - printf("Card %d, channel %d, Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f\n", - card,i, openair0_cfg[card].tx_gain[i], - openair0_cfg[card].rx_gain[i], - openair0_cfg[card].tx_freq[i], - openair0_cfg[card].rx_freq[i]); - } - } -} -*/ - -void init_devices(void){ - - - module_id_t UE_id, ru_id; - uint8_t CC_id; - RU_t *ru; - - // allocate memory for RU if not already done - if (RC.ru==NULL) RC.ru = (RU_t**)malloc(RC.nb_RU*sizeof(RU_t*)); - - for (ru_id=0;ru_idrfdevice.Mod_id = ru_id; - ru->rfdevice.CC_id = 0; - ru->rfdevice.trx_start_func = ru_trx_start; - ru->rfdevice.trx_read_func = ru_trx_read; - ru->rfdevice.trx_write_func = ru_trx_write; - ru->rfdevice.trx_end_func = ru_trx_end; - ru->rfdevice.trx_stop_func = ru_trx_stop; - ru->rfdevice.trx_set_freq_func = ru_trx_set_freq; - ru->rfdevice.trx_set_gains_func = ru_trx_set_gains; - last_ru_rx_timestamp[ru_id][0] = 0; - - } - if (PHY_vars_UE_g==NULL) { - PHY_vars_UE_g = (PHY_VARS_UE ***)malloc((1+NB_UE_INST)*sizeof(PHY_VARS_UE*)); - for (UE_id=0;UE_idrfdevice.Mod_id = UE_id; - PHY_vars_UE_g[UE_id][CC_id]->rfdevice.CC_id = CC_id; - PHY_vars_UE_g[UE_id][CC_id]->rfdevice.trx_start_func = UE_trx_start; - PHY_vars_UE_g[UE_id][CC_id]->rfdevice.trx_read_func = UE_trx_read; - PHY_vars_UE_g[UE_id][CC_id]->rfdevice.trx_write_func = UE_trx_write; - PHY_vars_UE_g[UE_id][CC_id]->rfdevice.trx_end_func = UE_trx_end; - PHY_vars_UE_g[UE_id][CC_id]->rfdevice.trx_stop_func = UE_trx_stop; - PHY_vars_UE_g[UE_id][CC_id]->rfdevice.trx_set_freq_func = UE_trx_set_freq; - PHY_vars_UE_g[UE_id][CC_id]->rfdevice.trx_set_gains_func = UE_trx_set_gains; - last_UE_rx_timestamp[UE_id][CC_id] = 0; - } - } - } -} - -void init_ocm(void) -{ - module_id_t UE_id, ru_id; - int CC_id; - - /* Added for PHY abstraction */ - - /* TODO: frame_type is unused, is it intended? */ - //char* frame_type = "unknown"; - LTE_DL_FRAME_PARMS *fp = &RC.ru[0]->frame_parms; - - init_channel_vars (fp, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0); - - // initialize channel descriptors - LOG_I(PHY,"Initializing channel descriptors (nb_RU %d, nb_UE %d)\n",RC.nb_RU,NB_UE_INST); - for (ru_id = 0; ru_id < RC.nb_RU; ru_id++) { - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - for (CC_id=0; CC_idframe_parms.N_RB_DL); - RU2UE[ru_id][UE_id][CC_id] = - new_channel_desc_scm(RC.ru[ru_id]->nb_tx, - PHY_vars_UE_g[UE_id][CC_id]->frame_parms.nb_antennas_rx, - map_str_to_int(small_scale_names,oai_emulation.environment_system_config.fading.small_scale.selected_option), - N_RB2sampling_rate(RC.ru[ru_id]->frame_parms.N_RB_DL), - N_RB2channel_bandwidth(RC.ru[ru_id]->frame_parms.N_RB_DL), - forgetting_factor, - 0, - 0); - random_channel(RU2UE[ru_id][UE_id][CC_id],abstraction_flag); - LOG_D(OCM,"[SIM] Initializing channel (%s, %d) from UE %d to ru %d\n", oai_emulation.environment_system_config.fading.small_scale.selected_option, - map_str_to_int(small_scale_names, oai_emulation.environment_system_config.fading.small_scale.selected_option),UE_id, ru_id); - - - UE2RU[UE_id][ru_id][CC_id] = - new_channel_desc_scm(PHY_vars_UE_g[UE_id][CC_id]->frame_parms.nb_antennas_tx, - RC.ru[ru_id]->nb_rx, - map_str_to_int(small_scale_names, oai_emulation.environment_system_config.fading.small_scale.selected_option), - N_RB2sampling_rate(RC.ru[ru_id]->frame_parms.N_RB_UL), - N_RB2channel_bandwidth(RC.ru[ru_id]->frame_parms.N_RB_UL), - forgetting_factor, - 0, - 0); - - random_channel(UE2RU[UE_id][ru_id][CC_id],abstraction_flag); - - // to make channel reciprocal uncomment following line instead of previous. However this only works for SISO at the moment. For MIMO the channel would need to be transposed. - //UE2RU[UE_id][ru_id] = RU2UE[ru_id][UE_id]; - - AssertFatal(RU2UE[ru_id][UE_id][CC_id]!=NULL,"RU2UE[%d][%d][%d] is null\n",ru_id,UE_id,CC_id); - AssertFatal(UE2RU[UE_id][ru_id][CC_id]!=NULL,"UE2RU[%d][%d][%d] is null\n",UE_id,ru_id,CC_id); - //pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE - if (ru_id == (UE_id % RC.nb_RU)) { - RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - } else { - RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - } - - LOG_D(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d, SNR %f)\n",ru_id,UE_id,CC_id, - RU2UE[ru_id][UE_id][CC_id]->path_loss_dB, - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower,snr_dB); - - - } - } - } -} - -/* -void update_omg (frame_t frameP) -{ - module_id_t UE_id, eNB_id; - int new_omg_model; - - if ((frameP % omg_period) == 0 ) { // call OMG every 10ms - update_nodes(oai_emulation.info.time_s); - display_node_list(enb_node_list); - display_node_list(ue_node_list); - - if (oai_emulation.info.omg_model_ue >= MAX_NUM_MOB_TYPES) { // mix mobility model - for(UE_id=oai_emulation.info.first_ue_local; UE_id<(oai_emulation.info.first_ue_local+oai_emulation.info.nb_ue_local); UE_id++) { - new_omg_model = randomgen(STATIC,RWALK); - LOG_D(OMG, "[UE] Node of ID %d is changing mobility generator ->%d \n", UE_id, new_omg_model); - // reset the mobility model for a specific node - set_new_mob_type (UE_id, UE, new_omg_model, oai_emulation.info.time_s); - } - } - - if (oai_emulation.info.omg_model_enb >= MAX_NUM_MOB_TYPES) { // mix mobility model - for (eNB_id = oai_emulation.info.first_enb_local; eNB_id < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local); eNB_id++) { - new_omg_model = randomgen (STATIC, RWALK); - LOG_D (OMG,"[eNB] Node of ID %d is changing mobility generator ->%d \n", eNB_id, new_omg_model); - // reset the mobility model for a specific node - set_new_mob_type (eNB_id, eNB, new_omg_model, oai_emulation.info.time_s); - } - } - } -} - -void update_omg_ocm() -{ - - enb_node_list=get_current_positions(oai_emulation.info.omg_model_enb, eNB, oai_emulation.info.time_s); - ue_node_list=get_current_positions(oai_emulation.info.omg_model_ue, UE, oai_emulation.info.time_s); - -} - -void update_ocm() -{ - module_id_t UE_id, ru_id; - int CC_id; - - - - // check if the openair channel model is activated used for PHY abstraction : path loss - if ((oai_emulation.info.ocm_enabled == 1)&& (ethernet_flag == 0 )) { - - for (ru_id = 0; ru_id < RC.nb_RU; ru_id++) - enb_data[ru_id]->tx_power_dBm = RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) - ue_data[UE_id]->tx_power_dBm = PHY_vars_UE_g[UE_id][0]->tx_power_dBm[0]; - - //LOG_D(OMG," extracting position of eNb...\n"); - //display_node_list(enb_node_list); - // display_node_list(ue_node_list); - //extract_position(enb_node_list, enb_data, RC.nb_RU); - //extract_position_fixed_enb(enb_data, NB_eNB_INST,frame); - //LOG_D(OMG," extracting position of UE...\n"); - // if (oai_emulation.info.omg_model_ue == TRACE) - //extract_position(ue_node_list, ue_data, NB_UE_INST); - - for (CC_id=0; CC_idpath_loss_dB = RU2UE[ru_id][UE_id][CC_id]->path_loss_dB; - // if (frame % 50 == 0) - LOG_D(OCM,"Path loss (CCid %d) between eNB %d at (%f,%f) and UE %d at (%f,%f) is %f, angle %f\n", - CC_id,ru_id,enb_data[ru_id]->x,enb_data[ru_id]->y,UE_id,ue_data[UE_id]->x,ue_data[UE_id]->y, - RU2UE[ru_id][UE_id][CC_id]->path_loss_dB, RU2UE[ru_id][UE_id][CC_id]->aoa); - //double dx, dy, distance; - //dx = enb_data[ru_id]->x - ue_data[UE_id]->x; - //dy = enb_data[ru_id]->y - ue_data[UE_id]->y; - //distance = sqrt(dx * dx + dy * dy); - ///LOG_D(LOCALIZE, " OCM distance between eNB %d at (%f,%f) and UE %d at (%f,%f) is %f \n", - // ru_id, enb_data[ru_id]->x,enb_data[ru_id]->y, - // UE_id, ue_data[UE_id]->x,ue_data[UE_id]->y, - // distance); - } - } - } - } - - else { - for (ru_id = 0; ru_id < RC.nb_RU; ru_id++) { - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - for (CC_id=0; CC_idpath_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - } else { - RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower; - } - - LOG_D(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d, SNR %f)\n",ru_id,UE_id,CC_id, - RU2UE[ru_id][UE_id][CC_id]->path_loss_dB, - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower,snr_dB); - - } - } - } - } -} - - -#ifdef OPENAIR2 -void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime) -{ - -#if defined(USER_MODE) && defined(OAI_EMU) - - //int rrc_state=0; - if (oai_emulation.info.otg_enabled ==1 ) { - - int dst_id, app_id; - Packet_otg_elt_t *otg_pkt; - - for (dst_id = 0; dst_id < MAX_MOBILES_PER_ENB; dst_id++) { - for_times += 1; - - // generate traffic if the ue is rrc reconfigured state - //if ((rrc_state=mac_eNB_get_rrc_status(enb_module_idP, dst_id)) > 2 //RRC_CONNECTED - { - if (mac_eNB_get_rrc_status(enb_module_idP, oai_emulation.info.eNB_ue_module_id_to_rnti[enb_module_idP][dst_id]) > 2 ){ - if_times += 1; - - for (app_id=0; app_idotg_pkt).sdu_buffer = (uint8_t*) packet_gen(enb_module_idP, dst_id + NB_eNB_INST, app_id, ctime, &((otg_pkt->otg_pkt).sdu_buffer_size)); - - if ((otg_pkt->otg_pkt).sdu_buffer != NULL) { - otg_times += 1; - (otg_pkt->otg_pkt).rb_id = DTCH-2; // app could be binded to a given DRB - (otg_pkt->otg_pkt).module_id = enb_module_idP; - (otg_pkt->otg_pkt).dst_id = dst_id; - (otg_pkt->otg_pkt).is_ue = 0; - (otg_pkt->otg_pkt).mode = PDCP_TRANSMISSION_MODE_DATA; - //Adding the packet to the OTG-PDCP buffer - pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[enb_module_idP])); - LOG_D(EMU,"[eNB %d] ADD pkt to OTG buffer with size %d for dst %d on rb_id %d for app id %d \n", - (otg_pkt->otg_pkt).module_id, otg_pkt->otg_pkt.sdu_buffer_size, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id, app_id); - } else { - free(otg_pkt); - otg_pkt=NULL; - } - } - } - } - -#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - mbms_service_id_t service_id; - mbms_session_id_t session_id; - rb_id_t rb_id; - - // MBSM multicast traffic - if (ctime >= 500 ) {// only generate when UE can receive MTCH (need to control this value) - for (service_id = 0; service_id < 2 ; service_id++) { //maxServiceCount - for (session_id = 0; session_id < 2; session_id++) { // maxSessionPerPMCH - if (pdcp_mbms_array_eNB[enb_module_idP][service_id][session_id].instanciated_instance == TRUE) { // this service/session is configured - - otg_pkt = malloc (sizeof(Packet_otg_elt_t)); - // LOG_T(OTG,"multicast packet gen for (service/mch %d, session/lcid %d, rb_id %d)\n", service_id, session_id, service_id*maxSessionPerPMCH + session_id); - rb_id = pdcp_mbms_array_eNB[enb_module_idP][service_id][session_id].rb_id; - (otg_pkt->otg_pkt).sdu_buffer = (uint8_t*) packet_gen_multicast(enb_module_idP, session_id, ctime, &((otg_pkt->otg_pkt).sdu_buffer_size)); - - if ((otg_pkt->otg_pkt).sdu_buffer != NULL) { - (otg_pkt->otg_pkt).rb_id = rb_id; - (otg_pkt->otg_pkt).module_id = enb_module_idP; - (otg_pkt->otg_pkt).dst_id = session_id; - (otg_pkt->otg_pkt).is_ue = FALSE; - //Adding the packet to the OTG-PDCP buffer - (otg_pkt->otg_pkt).mode = PDCP_TRANSMISSION_MODE_TRANSPARENT; - pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[enb_module_idP])); - LOG_D(EMU, "[eNB %d] ADD packet (%p) multicast to OTG buffer for dst %d on rb_id %d\n", - (otg_pkt->otg_pkt).module_id, otg_pkt, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id); - } else { - //LOG_I(EMU, "OTG returns null \n"); - free(otg_pkt); - otg_pkt=NULL; - } - - - // old version - // MBSM multicast traffic - #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - if (frame >= 46) {// only generate when UE can receive MTCH (need to control this value) - for (service_id = 0; service_id < 2 ; service_id++) { //maxServiceCount - for (session_id = 0; session_id < 2; session_id++) { // maxSessionPerPMCH - // LOG_I(OTG,"DUY:frame %d, pdcp_mbms_array[module_id][rb_id].instanciated_instance is %d\n",frame,pdcp_mbms_array[module_id][service_id*maxSessionPerPMCH + session_id].instanciated_instance); - if ((pdcp_mbms_array[module_idP][service_id*maxSessionPerPMCH + session_id].instanciated_instance== module_idP + 1) && (eNB_flag == 1)){ // this service/session is configured - // LOG_T(OTG,"multicast packet gen for (service/mch %d, session/lcid %d)\n", service_id, session_id); - // Duy add - LOG_I(OTG, "frame %d, multicast packet gen for (service/mch %d, session/lcid %d, rb_id %d)\n",frame, service_id, session_id,service_id*maxSessionPerPMCH + session_id); - // end Duy add - rb_id = pdcp_mbms_array[module_id][service_id*maxSessionPerPMCH + session_id].rb_id; - otg_pkt=(uint8_t*) packet_gen_multicast(module_idP, session_id, ctime, &pkt_size); - if (otg_pkt != NULL) { - LOG_D(OTG,"[eNB %d] sending a multicast packet from module %d on rab id %d (src %d, dst %d) pkt size %d\n", eNB_index, module_idP, rb_id, module_idP, session_id, pkt_size); - pdcp_data_req(module_id, frame, eNB_flag, rb_id, RLC_MUI_UNDEFINED, RLC_SDU_CONFIRM_NO, pkt_size, otg_pkt,PDCP_TM); - free(otg_pkt); - } - } - } - } - } // end multicast traffic - #endif - - - - } - } - } - - } // end multicast traffic - - -#endif - } - -#else -#if 0 // defined(EXMIMO) || defined(OAI_USRP) - if (otg_enabled==1) { - ctime = frame * 100; - - for (dst_id = 0; dst_id < MAX_MOBILES_PER_ENB; dst_id++) { - if (mac_get_rrc_status(eNB_index, eNB_flag, dst_id ) > 2) { - otg_pkt = malloc (sizeof(Packet_otg_elt_t)); - (otg_pkt->otg_pkt).sdu_buffer = packet_gen(module_instP, dst_id, ctime, &pkt_size); - - if (otg_pkt != NULL) { - rb_id = DTCH-2; - (otg_pkt->otg_pkt).rb_id = rb_id; - (otg_pkt->otg_pkt).module_id = module_idP; - (otg_pkt->otg_pkt).is_ue = FALSE; - (otg_pkt->otg_pkt).mode = PDCP_TRANSMISSION_MODE_DATA; - //Adding the packet to the OTG-PDCP buffer - pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[module_idP])); - LOG_D(EMU, "[eNB %d] ADD pkt to OTG buffer for dst %d on rb_id %d\n", (otg_pkt->otg_pkt).module_id, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id); - } else { - //LOG_I(EMU, "OTG returns null \n"); - free(otg_pkt); - otg_pkt=NULL; - } - } - } - } -#endif -} - -void update_otg_UE(module_id_t ue_mod_idP, unsigned int ctime) -{ -} -#endif -*/ - -int init_slot_isr(void) -{ - if (oai_emulation.info.slot_isr) { - struct itimerspec its; - - int sfd; - - sfd = timerfd_create(CLOCK_REALTIME, 0); - - if (sfd == -1) { - LOG_E(EMU, "Failed in timerfd_create (%d:%s)\n", errno, strerror(errno)); - exit(EXIT_FAILURE); - } - - /* Start the timer */ - its.it_value.tv_sec = 0; - its.it_value.tv_nsec = 500 * 1000; - its.it_interval.tv_sec = its.it_value.tv_sec; - its.it_interval.tv_nsec = its.it_value.tv_nsec; - - if (timerfd_settime(sfd, TFD_TIMER_ABSTIME, &its, NULL) == -1) { - LOG_E(EMU, "Failed in timer_settime (%d:%s)\n", errno, strerror(errno)); - exit(EXIT_FAILURE); - } - - oai_emulation.info.slot_sfd = sfd; - } - - return 0; -} - -void wait_for_slot_isr(void) -{ - uint64_t exp; - ssize_t res; - - if (oai_emulation.info.slot_sfd > 0) { - res = read(oai_emulation.info.slot_sfd, &exp, sizeof(exp)); - - if ((res < 0) || (res != sizeof(exp))) { - LOG_E(EMU, "Failed in read (%d:%s)\n", errno, strerror(errno)); - exit(EXIT_FAILURE); - } - } -} - -void exit_fun(const char* s) -{ - void *array[10]; - size_t size; - - size = backtrace(array, 10); - backtrace_symbols_fd(array, size, 2); - - fprintf(stderr, "Error: %s. Exiting!\n",s); - exit (-1); -} - -void init_time() -{ - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now = (unsigned long) time_spec.tv_nsec; - td_avg = 0; - sleep_time_us = SLEEP_STEP_US; - td_avg = TARGET_SF_TIME_NS; -} - -// dummy function -int oai_nfapi_rach_ind(nfapi_rach_indication_t *rach_ind) { - - return(0); - -} - -/* -int openair0_transport_load(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params) { - - return(0); - - -} - -int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cfg) { - - return(0); -} -*/ diff --git a/targets/SIMU/USER/oaisim_functions.h b/targets/SIMU/USER/oaisim_functions.h deleted file mode 100644 index 8bbf90df36..0000000000 --- a/targets/SIMU/USER/oaisim_functions.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include "oaisim.h" -#include -#include -#include - -#include "UTIL/FIFO/pad_list.h" - -#ifndef OAISIM_FUNCTIONS_H_ -#define OAISIM_FUNCTIONS_H_ - -void get_simulation_options(int argc, char *argv[]); - -void check_and_adjust_params(void); - -void init_omv(void); - -void init_seed(uint8_t set_seed); - -void init_openair1(void); - -void init_openair2(void); - -void init_ocm(void); - -void init_otg_pdcp_buffer(void); - -void update_omg(frame_t frameP); - -void update_omg_ocm(void); - -void update_ocm(void); - -void update_otg_eNB(module_id_t module_idP, unsigned int ctime); - -void update_otg_UE(module_id_t module_idP, unsigned int ctime); - -void exit_fun(const char* s); - -void init_time(void); - -void init_pad(void); - -void help(void); - -int init_slot_isr(void); - -void wait_for_slot_isr(void); - -#endif /* OAISIM_FUNCTIONS_H_ */ diff --git a/targets/SIMU/USER/oaisim_pad.c b/targets/SIMU/USER/oaisim_pad.c deleted file mode 100644 index 1f251de581..0000000000 --- a/targets/SIMU/USER/oaisim_pad.c +++ /dev/null @@ -1,1149 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//<>// -//#include -//#include "UTIL/FIFO/pad_list.h" -#include "discrete_event_generator.h" -#include "threadpool.h" -#include -#include "oaisim_functions.h" -//<>// - -#include "SIMULATION/RF/defs.h" -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#include "MAC_INTERFACE/vars.h" - -//#ifdef OPENAIR2 -#include "LAYER2/MAC/defs.h" -#include "LAYER2/MAC/vars.h" -#include "RRC/LITE/vars.h" -#include "PHY_INTERFACE/vars.h" -//#endif - -#include "ARCH/CBMIMO1/DEVICE_DRIVER/vars.h" - -#ifdef IFFT_FPGA -//#include "PHY/LTE_REFSIG/mod_table.h" -#endif //IFFT_FPGA - -#include "SCHED/defs.h" -#include "SCHED/vars.h" - -#include "oaisim.h" -#include "oaisim_config.h" -#include "UTIL/OCG/OCG_extern.h" -#include "cor_SF_sim.h" -#include "UTIL/OMG/omg_constants.h" - - - -//#include "UTIL/LOG/vcd_signal_dumper.h" - -#define RF - -//#define DEBUG_SIM - -#define MCS_COUNT 24//added for PHY abstraction -#define N_TRIALS 1 - - -/* - DCI0_5MHz_TDD0_t UL_alloc_pdu; - DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; - DCI2_5MHz_2A_L10PRB_TDD_t DLSCH_alloc_pdu1; - DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2; - */ - -#define UL_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,24) -#define CCCH_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,3) -#define RA_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,3) -#define DLSCH_RB_ALLOC 0x1fff - -#define DECOR_DIST 100 -#define SF_VAR 10 - -//constant for OAISIM soft realtime calibration -#define SF_DEVIATION_OFFSET_NS 100000 //= 0.1ms : should be as a number of UE -#define SLEEP_STEP_US 100 // = 0.01ms could be adaptive, should be as a number of UE -#define K 2 // averaging coefficient -#define TARGET_SF_TIME_NS 1000000 // 1ms = 1000000 ns - -//#ifdef OPENAIR2 -//uint16_t NODE_ID[1]; -//uint8_t NB_INST = 2; -//#endif //OPENAIR2 -extern int otg_times; -extern int for_times; -extern int if_times; -int for_main_times = 0; - -frame_t frame=0; -char stats_buffer[16384]; -channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; -channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX]; -Signal_buffers *signal_buffers_g; -//Added for PHY abstraction -node_desc_t *enb_data[NUMBER_OF_eNB_MAX]; -node_desc_t *ue_data[NUMBER_OF_UE_MAX]; -//double sinr_bler_map[MCS_COUNT][2][16]; -//double sinr_bler_map_up[MCS_COUNT][2][16]; -//extern double SINRpost_eff[301]; -extern int mcsPost; -extern int nrbPost; -extern int frbPost; -extern void kpi_gen(); - -extern uint16_t Nid_cell; -extern uint8_t target_dl_mcs; -extern uint8_t rate_adaptation_flag; -extern double snr_dB, sinr_dB; -extern uint8_t set_seed; -extern uint8_t cooperation_flag; // for cooperative communication -extern uint8_t abstraction_flag, ethernet_flag; -extern uint8_t ue_connection_test; -extern int map1,map2; -extern double **ShaF; -// pointers signal buffers (s = transmit, r,r0 = receive) -extern double **s_re, **s_im, **r_re, **r_im, **r_re0, **r_im0; -extern Node_list ue_node_list; -extern Node_list enb_node_list; -extern int pdcp_period, omg_period; -extern LTE_DL_FRAME_PARMS *frame_parms; -// time calibration for soft realtime mode -extern struct timespec time_spec; -extern unsigned long time_last, time_now; -extern int td, td_avg, sleep_time_us; - -int eMBMS_active = 0; - -threadpool_t * pool; - -#ifdef OPENAIR2 -extern int pfd[2]; -#endif - -// this should reflect the channel models in openair1/SIMULATION/TOOLS/defs.h -mapping small_scale_names[] = { - {"custom", custom}, - {"SCM_A", SCM_A}, - {"SCM_B", SCM_B}, - {"SCM_C", SCM_C}, - {"SCM_D", SCM_D}, - {"EPA", EPA}, - {"EVA", EVA}, - {"ETU", ETU}, - {"Rayleigh8", Rayleigh8}, - {"Rayleigh1", Rayleigh1}, - {"Rayleigh1_800", Rayleigh1_800}, - {"Rayleigh1_corr", Rayleigh1_corr}, - {"Rayleigh1_anticorr", Rayleigh1_anticorr}, - {"Rice8", Rice8}, - {"Rice1", Rice1}, - {"Rice1_corr", Rice1_corr}, - {"Rice1_anticorr", Rice1_anticorr}, - {"AWGN", AWGN}, - {NULL, -1} -}; - -//static void *sigh(void *arg); -void terminate(void); - -void -help (void) -{ - printf - ("Usage: oaisim -h -a -F -C tdd_config -V -R N_RB_DL -e -x transmission_mode -m target_dl_mcs -r(ate_adaptation) -n n_frames -s snr_dB -k ricean_factor -t max_delay -f forgetting factor -A channel_model -z cooperation_flag -u nb_local_ue -U UE mobility -b nb_local_enb -B eNB_mobility -M ethernet_flag -p nb_master -g multicast_group -l log_level -c ocg_enable -T traffic model -D multicast network device\n"); - - printf ("-h provides this help message!\n"); - printf ("-a Activates PHY abstraction mode\n"); - printf ("-F Activates FDD transmission (TDD is default)\n"); - printf ("-C [0-6] Sets TDD configuration\n"); - printf ("-R [6,15,25,50,75,100] Sets N_RB_DL\n"); - printf ("-e Activates extended prefix mode\n"); - printf ("-m Gives a fixed DL mcs\n"); - printf ("-r Activates rate adaptation (DL for now)\n"); - printf ("-n Set the number of frames for the simulation\n"); - printf ("-s snr_dB set a fixed (average) SNR, this deactivates the openair channel model generator (OCM)\n"); - printf ("-S snir_dB set a fixed (average) SNIR, this deactivates the openair channel model generator (OCM)\n"); - printf ("-k Set the Ricean factor (linear)\n"); - printf ("-t Set the delay spread (microseconds)\n"); - printf ("-f Set the forgetting factor for time-variation\n"); - printf ("-A set the multipath channel simulation, options are: SCM_A, SCM_B, SCM_C, SCM_D, EPA, EVA, ETU, Rayleigh8, Rayleigh1, Rayleigh1_corr,Rayleigh1_anticorr, Rice8,, Rice1, AWGN \n"); - printf ("-b Set the number of local eNB\n"); - printf ("-u Set the number of local UE\n"); - printf ("-M Set the machine ID for Ethernet-based emulation\n"); - printf ("-p Set the total number of machine in emulation - valid if M is set\n"); - printf ("-g Set multicast group ID (0,1,2,3) - valid if M is set\n"); - printf ("-l Set the global log level (8:trace, 7:debug, 6:info, 4:warn, 3:error) \n"); - printf - ("-c [1,2,3,4] Activate the config generator (OCG) to process the scenario descriptor, or give the scenario manually: -c template_1.xml \n"); - printf ("-x Set the transmission mode (1,2,5,6 supported for now)\n"); - printf ("-z Set the cooperation flag (0 for no cooperation, 1 for delay diversity and 2 for distributed alamouti\n"); - printf ("-T activate the traffic generator: 0 for NONE, 1 for CBR, 2 for M2M, 3 for FPS Gaming, 4 for mix\n"); - printf ("-B Set the mobility model for eNB, options are: STATIC, RWP, RWALK, \n"); - printf ("-U Set the mobility model for UE, options are: STATIC, RWP, RWALK \n"); - printf ("-E Random number generator seed\n"); - printf ("-P enable protocol analyzer : 0 for wireshark interface, 1: for pcap , 2 : for tshark \n"); - printf ("-I Enable CLI interface (to connect use telnet localhost 1352)\n"); - printf ("-V Enable VCD dump, file = openair_vcd_dump.vcd\n"); - printf ("-G Enable background traffic \n"); - printf ("-O [mme ipv4 address] Enable MME mode\n"); - printf ("-Z Reserved\n"); -} - - -#ifdef OPENAIR2 -void omv_end (int pfd, Data_Flow_Unit omv_data); -int omv_write (int pfd, Node_list enb_node_list, Node_list ue_node_list, Data_Flow_Unit omv_data); -#endif - -//<<<< PAD >>>>// -#define PAD 1 -//#define PAD_FINE 1 -//#define PAD_SYNC 1 -#define JOB_REQUEST_TAG 246 -#define JOB_REPLY_TAG 369 -#define FRAME_END 888 -#define NO_JOBS_TAG 404 -#define JOB_DIST_DEBUG 33 - -//Global Variables -int worker_number; -int frame_number = 1; -//<<<< PAD >>>>// - -//<<<< DEG >>>>// -extern End_Of_Sim_Event end_event; //Could later be a list of condition_events -extern Event_List event_list; -//<<<< DEG >>>>// - -extern Packet_OTG_List *otg_pdcp_buffer; - -void run(int argc, char *argv[]); - -#ifdef PAD -void pad_init() -{ - - int UE_id, i; - - pool = threadpool_create(PAD); - - if (pool == NULL) { - printf("ERROR threadpool allocation\n"); - return; - } - - signal_buffers_g = malloc(NB_UE_INST * sizeof(Signal_buffers)); - - if (abstraction_flag == 0) { - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - signal_buffers_g[UE_id].s_re = malloc(2*sizeof(double*)); - signal_buffers_g[UE_id].s_im = malloc(2*sizeof(double*)); - signal_buffers_g[UE_id].r_re = malloc(2*sizeof(double*)); - signal_buffers_g[UE_id].r_im = malloc(2*sizeof(double*)); - signal_buffers_g[UE_id].r_re0 = malloc(2*sizeof(double*)); - signal_buffers_g[UE_id].r_im0 = malloc(2*sizeof(double*)); - - - for (i=0; i<2; i++) { - - signal_buffers_g[UE_id].s_re[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero(signal_buffers_g[UE_id].s_re[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - signal_buffers_g[UE_id].s_im[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero(signal_buffers_g[UE_id].s_im[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - signal_buffers_g[UE_id].r_re[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero(signal_buffers_g[UE_id].r_re[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - signal_buffers_g[UE_id].r_im[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero(signal_buffers_g[UE_id].r_im[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - signal_buffers_g[UE_id].r_re0[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero(signal_buffers_g[UE_id].r_re0[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - signal_buffers_g[UE_id].r_im0[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - bzero(signal_buffers_g[UE_id].r_im0[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); - } - } - } -} - -void pad_finalize() -{ - - int ret, i; - module_id_t UE_id; - - ret = threadpool_destroy(pool); - - if (ret) - printf("ERROR threadpool destroy = %d\n", ret); - - if (abstraction_flag == 0) { - - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - for (i = 0; i < 2; i++) { - free(signal_buffers_g[UE_id].s_re[i]); - free(signal_buffers_g[UE_id].s_im[i]); - free(signal_buffers_g[UE_id].r_re[i]); - free(signal_buffers_g[UE_id].r_im[i]); - } - - free(signal_buffers_g[UE_id].s_re); - free(signal_buffers_g[UE_id].s_im); - free(signal_buffers_g[UE_id].r_re); - free(signal_buffers_g[UE_id].r_im); - } - - //free node by node here same pattern as below - } - - free(signal_buffers_g); -} - -void pad_inject_job(int eNB_flag, int nid, int frame, int next_slot, int last_slot, enum Job_type type, int ctime) -{ - - int ret; - Job_elt *job_elt; - - job_elt = malloc(sizeof(Job_elt)); - job_elt->next = NULL; - (job_elt->job).eNB_flag = eNB_flag; - (job_elt->job).nid = nid; - (job_elt->job).frame = frame; - (job_elt->job).next_slot = next_slot; - (job_elt->job).last_slot = last_slot; - (job_elt->job).type = type; - (job_elt->job).ctime = ctime; - - ret = threadpool_add(pool, job_elt); - - if (ret) { - printf("ERROR threadpool_add %d\n", ret); - return; - } -} - -void pad_synchronize() -{ - pthread_mutex_lock(&(pool->sync_lock)); - - while(pool->active > 0) { - pthread_cond_wait(&(pool->sync_notify), &(pool->sync_lock)); - } - - pthread_mutex_unlock(&(pool->sync_lock)); -} - -#endif -//<>// -int main (int argc, char *argv[]) -{ - - //Mobility *mobility_frame_10; - //Application_Config *application_frame_20; - - //Here make modifications on the mobility and traffic new models - //mob_frame_10 -> ... - //application_frame_30 -> ... - - //schedule(ET_OMG, 10, NULL, mobility_frame_10); - //schedule(ET_OTG, 15, NULL, application_frame_20); - - //event_list_display(&event_list); - - schedule_end_of_simulation(FRAME, 100); - - run(argc, argv); - - return 0; -} -//<>// - -//<>// -void run(int argc, char *argv[]) -{ - - - int32_t i; - module_id_t UE_id, eNB_id; - Job_elt *job_elt; - int ret; - - clock_t t; - - - Event_elt *user_defined_event; - Event event; - - // Framing variables - int32_t slot, last_slot, next_slot; - - FILE *SINRpost; - char SINRpost_fname[512]; - sprintf(SINRpost_fname,"postprocSINR.m"); - SINRpost = fopen(SINRpost_fname,"w"); - // variables/flags which are set by user on command-line - double snr_direction,snr_step=1.0;//,sinr_direction; - - lte_subframe_t direction; - char fname[64],vname[64]; - -#ifdef XFORMS - // current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0) - // at eNB 0, an UL scope for every UE - FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX]; - FD_lte_phy_scope_enb *form_enb[NUMBER_OF_UE_MAX]; - char title[255]; -#endif - -#ifdef PROC - int node_id; - int port,Process_Flag=0,wgt,Channel_Flag=0,temp; -#endif - - // uint8_t awgn_flag = 0; - -#ifdef PRINT_STATS - int len; - FILE *UE_stats[NUMBER_OF_UE_MAX], *UE_stats_th[NUMBER_OF_UE_MAX], *eNB_stats, *eNB_avg_thr, *eNB_l2_stats; - char UE_stats_filename[255]; - char UE_stats_th_filename[255]; - char eNB_stats_th_filename[255]; -#endif - -#ifdef SMBV - uint8_t config_smbv = 0; - char smbv_ip[16]; - strcpy(smbv_ip,DEFAULT_SMBV_IP); -#endif - -#ifdef OPENAIR2 - Data_Flow_Unit omv_data; -#endif - - - //time_t t0,t1; - //clock_t start, stop; - - //double **s_re2[MAX_eNB+MAX_UE], **s_im2[MAX_eNB+MAX_UE], **r_re2[MAX_eNB+MAX_UE], **r_im2[MAX_eNB+MAX_UE], **r_re02, **r_im02; - //double **r_re0_d[MAX_UE][MAX_eNB], **r_im0_d[MAX_UE][MAX_eNB], **r_re0_u[MAX_eNB][MAX_UE],**r_im0_u[MAX_eNB][MAX_UE]; - //default parameters - - //{ - /* INITIALIZATIONS */ - - target_dl_mcs = 0; - rate_adaptation_flag = 0; - oai_emulation.info.n_frames = 0xffff;//1024; //10; - oai_emulation.info.n_frames_flag = 0;//fixme - snr_dB = 30; - cooperation_flag = 0; // default value 0 for no cooperation, 1 for Delay diversity, 2 for Distributed Alamouti - - //Default values if not changed by the user in get_simulation_options(); - pdcp_period = 1; - omg_period = 10; - - mRAL_init_default_values(); //Default values - eRAL_init_default_values(); //Default values - - init_oai_emulation(); //Default values - - get_simulation_options(argc, argv); //Command-line options - - oaisim_config(); // config OMG and OCG, OPT, OTG, OLG - - //To fix eventual conflict on the value of n_frames - if (oai_emulation.info.n_frames_flag) { - schedule_end_of_simulation(FRAME, oai_emulation.info.n_frames); - } - - VCD_SIGNAL_DUMPER_INIT(); // Initialize VCD LOG module - -#ifdef OPENAIR2 - init_omv(); -#endif - - check_and_adjust_params(); //Before this call, NB_UE_INST and NB_eNB_INST are not set correctly - - init_otg_pdcp_buffer(); - -#ifdef PRINT_STATS - - for (UE_id=0; UE_idlte_frame_parms.Nid_cell); - printf ("before L2 init: frame_type %d,tdd_config %d\n", - PHY_vars_eNB_g[0]->lte_frame_parms.frame_type, - PHY_vars_eNB_g[0]->lte_frame_parms.tdd_config); - - init_time(); - -#ifdef PAD - pad_init(); -#endif - - if (ue_connection_test == 1) { - snr_direction = -snr_step; - snr_dB=20; - sinr_dB=-20; - } - - frame = 0; - slot = 0; - - LOG_I(EMU,">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU initialization done <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); - - printf ("after init: Nid_cell %d\n", PHY_vars_eNB_g[0]->lte_frame_parms.Nid_cell); - printf ("after init: frame_type %d,tdd_config %d\n", - PHY_vars_eNB_g[0]->lte_frame_parms.frame_type, - PHY_vars_eNB_g[0]->lte_frame_parms.tdd_config); - - t = clock(); - - while (!end_of_simulation()) { - - last_slot = (slot - 1)%20; - - if (last_slot <0) - last_slot+=20; - - next_slot = (slot + 1)%20; - - oai_emulation.info.time_ms = frame * 10 + (next_slot>>1); - oai_emulation.info.frame = frame; - - if (slot == 0) { //Frame's Prologue - - //Run the aperiodic user-defined events - while ((user_defined_event = event_list_get_head(&event_list)) != NULL) { - - event = user_defined_event->event; - - if (event.frame == frame) { - switch (event.type) { - case ET_OMG: - update_omg_model(event.key, event.value); //implement it with assigning the new values to that of oai_emulation & second thing is to ensure mob model is always read from oai_emulation - user_defined_event = event_list_remove_head(&event_list); - break; - - case ET_OTG: - update_otg_model(event.key, event.value); - user_defined_event = event_list_remove_head(&event_list); - break; - } - } else { - break; - } - } - - //Comment (handle cooperation flag) deleted here. Look at oaisim.c to see it - if (ue_connection_test==1) { - if ((frame%20) == 0) { - snr_dB += snr_direction; - sinr_dB -= snr_direction; - } - - if (snr_dB == -20) { - snr_direction=snr_step; - } else if (snr_dB==20) { - snr_direction=-snr_step; - } - } - - update_omg(); // frequency is defined in the omg_global params configurable by the user - - update_omg_ocm(); - -#ifdef OPENAIR2 - - // check if pipe is still open - if ((oai_emulation.info.omv_enabled == 1) ) { - omv_write(pfd[1], enb_node_list, ue_node_list, omv_data); - } - -#endif - -#ifdef DEBUG_OMG - - if ((((int) oai_emulation.info.time_s) % 100) == 0) { - for (UE_id = oai_emulation.info.first_ue_local; UE_id < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local); UE_id++) { - get_node_position (UE, UE_id); - } - } - -#endif - update_ocm(); - } - - direction = subframe_select(frame_parms,next_slot>>1); - - if((next_slot %2) ==0) - clear_eNB_transport_info(oai_emulation.info.nb_enb_local); - - - for (eNB_id=oai_emulation.info.first_enb_local; - (eNB_id<(oai_emulation.info.first_enb_local+oai_emulation.info.nb_enb_local)) && (oai_emulation.info.cli_start_enb[eNB_id]==1); - eNB_id++) { - for_main_times += 1; - //printf ("debug: Nid_cell %d\n", PHY_vars_eNB_g[eNB_id]->lte_frame_parms.Nid_cell); - //printf ("debug: frame_type %d,tdd_config %d\n", PHY_vars_eNB_g[eNB_id]->lte_frame_parms.frame_type,PHY_vars_eNB_g[eNB_id]->lte_frame_parms.tdd_config); - LOG_D(EMU,"PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d) TDD %d/%d Nid_cell %d\n", - eNB_id, frame, slot, next_slot >> 1,last_slot>>1, - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.frame_type, - PHY_vars_eNB_g[eNB_id]->lte_frame_parms.tdd_config,PHY_vars_eNB_g[eNB_id]->lte_frame_parms.Nid_cell); - - //Appliation -#ifdef PAD_FINE - pad_inject_job(1, eNB_id, frame, next_slot, last_slot, JT_OTG, oai_emulation.info.time_ms); -#else - update_otg_eNB(eNB_id, oai_emulation.info.time_ms); -#endif - - //Access layer - if (frame % pdcp_period == 0) { -#ifdef PAD_FINE - pad_inject_job(1, eNB_id, frame, next_slot, last_slot, JT_PDCP, oai_emulation.info.time_ms); -#else - pdcp_run(frame, 1, 0, eNB_id);//PHY_vars_eNB_g[eNB_id]->Mod_id -#endif - } - - //Phy/Mac layer -#ifdef PAD_FINE - pad_inject_job(1, eNB_id, frame, next_slot, last_slot, JT_PHY_MAC, oai_emulation.info.time_ms); -#else - phy_procedures_eNB_lte (last_slot, next_slot, PHY_vars_eNB_g[eNB_id], abstraction_flag, no_relay, NULL); -#endif - - -#ifdef PRINT_STATS - - if(last_slot==9 && frame%10==0) - if(eNB_avg_thr) - fprintf(eNB_avg_thr,"%d %d\n",PHY_vars_eNB_g[eNB_id]->frame,(PHY_vars_eNB_g[eNB_id]->total_system_throughput)/((PHY_vars_eNB_g[eNB_id]->frame+1)*10)); - - if (eNB_stats) { - len = dump_eNB_stats(PHY_vars_eNB_g[eNB_id], stats_buffer, 0); - rewind (eNB_stats); - fwrite (stats_buffer, 1, len, eNB_stats); - fflush(eNB_stats); - } - -#ifdef OPENAIR2 - - if (eNB_l2_stats) { - len = dump_eNB_l2_stats (stats_buffer, 0); - rewind (eNB_l2_stats); - fwrite (stats_buffer, 1, len, eNB_l2_stats); - fflush(eNB_l2_stats); - } - -#endif -#endif - } - -#ifdef PAD_SYNC - - if ((direction == SF_DL) || ((direction == SF_S) && (next_slot%2==0)) ) - pad_synchronize(); - -#endif - - - // Call ETHERNET emulation here - //emu_transport (frame, last_slot, next_slot, direction, oai_emulation.info.frame_type, ethernet_flag); - - if ((next_slot % 2) == 0) - clear_UE_transport_info (oai_emulation.info.nb_ue_local); - - for (UE_id = oai_emulation.info.first_ue_local; - (UE_id < (oai_emulation.info.first_ue_local+oai_emulation.info.nb_ue_local)) && (oai_emulation.info.cli_start_ue[UE_id]==1); - UE_id++) - if (frame >= (UE_id * 20)) { // activate UE only after 20*UE_id frames so that different UEs turn on separately - - LOG_D(EMU,"PHY procedures UE %d for frame %d, slot %d (subframe TX %d, RX %d)\n", - UE_id, frame, slot, next_slot >> 1,last_slot>>1); - - if (PHY_vars_UE_g[UE_id]->UE_mode[0] != NOT_SYNCHED) { - if (frame>0) { - PHY_vars_UE_g[UE_id]->frame = frame; - - //Application UE -#ifdef PAD_FINE - pad_inject_job(0, UE_id, frame, next_slot, last_slot, JT_OTG, oai_emulation.info.time_ms); -#else - update_otg_UE(UE_id + NB_eNB_INST, oai_emulation.info.time_ms); -#endif - - //Access layer UE - if (frame % pdcp_period == 0) { -#ifdef PAD_FINE - pad_inject_job(0, UE_id, frame, next_slot, last_slot, JT_PDCP, oai_emulation.info.time_ms); -#else - pdcp_run(frame, 0, UE_id, 0); -#endif - } - - //Phy/Mac layer UE -#ifdef PAD_FINE - pad_inject_job(0, UE_id, frame, next_slot, last_slot, JT_PHY_MAC, oai_emulation.info.time_ms); -#else - phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[UE_id], 0, abstraction_flag, normal_txrx, no_relay, NULL); - ue_data[UE_id]->tx_power_dBm = PHY_vars_UE_g[UE_id]->tx_power_dBm; -#endif - } - } else { - if (abstraction_flag==1) { - LOG_E(EMU, "sync not supported in abstraction mode (UE%d,mode%d)\n", UE_id, PHY_vars_UE_g[UE_id]->UE_mode[0]); - exit(-1); - } - - if ((frame>0) && (last_slot == (LTE_SLOTS_PER_FRAME-2))) { -#ifdef PAD_FINE - pad_inject_job(0, UE_id, frame, next_slot, last_slot, JT_INIT_SYNC, oai_emulation.info.time_ms); -#else - initial_sync(PHY_vars_UE_g[UE_id],normal_txrx); -#endif - /* LONG write output comment DELETED here */ - } - } - -#ifdef PRINT_STATS - - if(last_slot==2 && frame%10==0) - if (UE_stats_th[UE_id]) - fprintf(UE_stats_th[UE_id],"%d %d\n",frame, PHY_vars_UE_g[UE_id]->bitrate[0]/1000); - - if (UE_stats[UE_id]) { - len = dump_ue_stats (PHY_vars_UE_g[UE_id], stats_buffer, 0, normal_txrx, 0); - rewind (UE_stats[UE_id]); - fwrite (stats_buffer, 1, len, UE_stats[UE_id]); - fflush(UE_stats[UE_id]); - } - -#endif - } - -#ifdef PAD_SYNC - - if ((direction == SF_UL) || ((direction == SF_S) && (next_slot%2==1)) ) - pad_synchronize(); - -#endif - - emu_transport (frame, last_slot, next_slot,direction, oai_emulation.info.frame_type, ethernet_flag); - - if ((direction == SF_DL)|| (frame_parms->frame_type==0)) { - for (UE_id=0; UE_idframe_type==0)) { //if ((subframe<2) || (subframe>4)) - do_UL_sig(r_re0,r_im0,r_re,r_im,s_re,s_im,UE2eNB,enb_data,ue_data,next_slot,abstraction_flag,frame_parms,frame); - - /* - int ccc; - fprintf(SINRpost,"SINRdb For eNB New Subframe : \n "); - for(ccc = 0 ; ccc<301; ccc++) - { - fprintf(SINRpost,"_ %f ", SINRpost_eff[ccc]); - } - fprintf(SINRpost,"SINRdb For eNB : %f \n ", SINRpost_eff[ccc]); - */ - } - - if ((direction == SF_S)) {//it must be a special subframe - if (next_slot%2==0) {//DL part - for (UE_id=0; UE_idnb_rx;aarx++) - for (aatx=0;aatxnb_tx;aatx++) - for (k=0;kchannel_length;k++) - printf("SB(%d,%d,%d)->(%f,%f)\n",k,aarx,aatx,UE2eNB[1][0]->ch[aarx+(aatx*UE2eNB[1][0]->nb_rx)][k].r,UE2eNB[1][0]->ch[aarx+(aatx*UE2eNB[1][0]->nb_rx)][k].i); - */ - } else { // UL part - /*#ifdef PAD - pthread_mutex_lock(&(pool->sync_lock)); - while(pool->active != 0) { - pthread_cond_wait(&(pool->sync_notify), &(pool->sync_lock)); - } - pthread_mutex_unlock(&(pool->sync_lock)); - #endif*/ - do_UL_sig(r_re0,r_im0,r_re,r_im,s_re,s_im,UE2eNB,enb_data,ue_data,next_slot,abstraction_flag,frame_parms,frame); - /* - int ccc; - fprintf(SINRpost,"SINRdb For eNB New Subframe : \n "); - for(ccc = 0 ; ccc<301; ccc++) - { - fprintf(SINRpost,"_ %f ", SINRpost_eff[ccc]); - } - fprintf(SINRpost,"SINRdb For eNB : %f \n ", SINRpost_eff[ccc]); - */ - } - } - - if ((last_slot == 1) && (frame == 0) - && (abstraction_flag == 0) && (oai_emulation.info.n_frames == 1)) { - - write_output ("dlchan0.m", "dlch0", - &(PHY_vars_UE_g[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0][0]), - (6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); - write_output ("dlchan1.m", "dlch1", - &(PHY_vars_UE_g[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[1][0][0]), - (6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); - write_output ("dlchan2.m", "dlch2", - &(PHY_vars_UE_g[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[2][0][0]), - (6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1); - write_output ("pbch_rxF_comp0.m", "pbch_comp0", - PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->rxdataF_comp[0], 6 * 12 * 4, 1, 1); - write_output ("pbch_rxF_llr.m", "pbch_llr", - PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->llr, (frame_parms->Ncp == 0) ? 1920 : 1728, 1, 4); - } - - if (next_slot %2 == 0) { - clock_gettime (CLOCK_REALTIME, &time_spec); - time_last = time_now; - time_now = (unsigned long) time_spec.tv_nsec; - td = (int) (time_now - time_last); - - if (td>0) { - td_avg = (int)(((K*(long)td) + (((1<<3)-K)*((long)td_avg)))>>3); // in us - LOG_T(EMU,"sleep frame %d, time_now %ldus,time_last %ldus,average time difference %ldns, CURRENT TIME DIFF %dus, avgerage difference from the target %dus\n", - frame, time_now,time_last,td_avg, td/1000,(td_avg-TARGET_SF_TIME_NS)/1000); - } - - if (td_avg<(TARGET_SF_TIME_NS - SF_DEVIATION_OFFSET_NS)) { - sleep_time_us += SLEEP_STEP_US; - LOG_D(EMU,"Faster than realtime increase the avg sleep time for %d us, frame %d\n", - sleep_time_us,frame); - // LOG_D(EMU,"Faster than realtime increase the avg sleep time for %d us, frame %d, time_now %ldus,time_last %ldus,average time difference %ldns, CURRENT TIME DIFF %dus, avgerage difference from the target %dus\n", sleep_time_us,frame, time_now,time_last,td_avg, td/1000,(td_avg-TARGET_SF_TIME_NS)/1000); - } else if (td_avg > (TARGET_SF_TIME_NS + SF_DEVIATION_OFFSET_NS)) { - sleep_time_us-= SLEEP_STEP_US; - LOG_D(EMU,"Slower than realtime reduce the avg sleep time for %d us, frame %d, time_now\n", - sleep_time_us,frame); - //LOG_T(EMU,"Slower than realtime reduce the avg sleep time for %d us, frame %d, time_now %ldus,time_last %ldus,average time difference %ldns, CURRENT TIME DIFF %dus, avgerage difference from the target %dus\n", sleep_time_us,frame, time_now,time_last,td_avg, td/1000,(td_avg-TARGET_SF_TIME_NS)/1000); - } - } // end if next_slot%2 - - slot++; - - if (slot == 20) { //Frame's Epilogue - frame++; - slot = 0; - - // if n_frames not set by the user or is greater than max num frame then set adjust the frame counter - if ( (oai_emulation.info.n_frames_flag == 0) || (oai_emulation.info.n_frames >= 0xffff) ) { - frame %=(oai_emulation.info.n_frames-1); - } - - oai_emulation.info.time_s += 0.01; - - if ((frame>=1)&&(frame<=9)&&(abstraction_flag==0)) { - write_output("UEtxsig0.m","txs0", PHY_vars_UE_g[0]->lte_ue_common_vars.txdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - sprintf(fname,"eNBtxsig%d.m",frame); - sprintf(vname,"txs%d",frame); - write_output(fname,vname, PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("eNBtxsigF0.m","txsF0",PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][0],PHY_vars_eNB_g[0]->lte_frame_parms.symbols_per_tti*PHY_vars_eNB_g[0]->lte_frame_parms.ofdm_symbol_size,1,1); - - write_output("UErxsig0.m","rxs0", PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - write_output("eNBrxsig0.m","rxs0", PHY_vars_eNB_g[0]->lte_eNB_common_vars.rxdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1); - } - -#ifdef XFORMS - do_xforms(); -#endif - - // calibrate at the end of each frame if there is some time left - if((sleep_time_us > 0)&& (ethernet_flag ==0)) { - LOG_I(EMU,"[TIMING] Adjust average frame duration, sleep for %d us\n",sleep_time_us); - usleep(sleep_time_us); - sleep_time_us=0; // reset the timer, could be done per n SF - } - -#ifdef SMBV - - if ((frame == config_frames[0]) || (frame == config_frames[1]) || (frame == config_frames[2]) || (frame == config_frames[3])) { - smbv_frame_cnt++; - } - -#endif - } - } - - t = clock() - t; - printf("rrc Duration of the simulation: %f seconds\n",((float)t)/CLOCKS_PER_SEC); - - fclose(SINRpost); - LOG_I(EMU,">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU Ending <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); - - free(otg_pdcp_buffer); - -#ifdef SMBV - - if (config_smbv) { - smbv_send_config (smbv_fname,smbv_ip); - } - -#endif - - //Perform KPI measurements - if (oai_emulation.info.otg_enabled==1) - kpi_gen(); - -#ifdef PAD - pad_finalize(); -#endif - - // relase all rx state - if (ethernet_flag == 1) { - emu_transport_release (); - } - - if (abstraction_flag == 0) { - /* - #ifdef IFFT_FPGA - free(txdataF2[0]); - free(txdataF2[1]); - free(txdataF2); - free(txdata[0]); - free(txdata[1]); - free(txdata); - #endif - */ - - for (i = 0; i < 2; i++) { - free (s_re[i]); - free (s_im[i]); - free (r_re[i]); - free (r_im[i]); - } - - free (s_re); - free (s_im); - free (r_re); - free (r_im); - lte_sync_time_free (); - } - - // pthread_join(sigth, NULL); - - // added for PHY abstraction - if (oai_emulation.info.ocm_enabled == 1) { - for (eNB_id = 0; eNB_id < NUMBER_OF_eNB_MAX; eNB_id++) - free(enb_data[eNB_id]); - - for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) - free(ue_data[UE_id]); - } //End of PHY abstraction changes - -#ifdef OPENAIR2 - mac_top_cleanup(); -#endif - -#ifdef PRINT_STATS - - for(UE_id=0; UE_id FOR TIMES = %d <-> IF TIMES = %d\n", for_main_times, otg_times, for_times, if_times); - -} -//<>// - -void terminate(void) -{ - int i; - char interfaceName[8]; - - for (i=0; i < NUMBER_OF_eNB_MAX+NUMBER_OF_UE_MAX; i++) - if (oai_emulation.info.oai_ifup[i]==1) { - sprintf(interfaceName, "oai%d", i); - bringInterfaceUp(interfaceName,0); - } -} - -#ifdef OPENAIR2 -int omv_write (int pfd, Node_list enb_node_list, Node_list ue_node_list, Data_Flow_Unit omv_data) -{ - int i,j; - omv_data.end=0; - - //omv_data.total_num_nodes = NB_UE_INST + NB_eNB_INST; - for (i=0; inode->X_pos < 0.0)? 0.0 : enb_node_list->node->X_pos; - omv_data.geo[i].y = (enb_node_list->node->Y_pos < 0.0)? 0.0 : enb_node_list->node->Y_pos; - omv_data.geo[i].z = 1.0; - omv_data.geo[i].mobility_type = oai_emulation.info.omg_model_enb; - omv_data.geo[i].node_type = 0; //eNB - enb_node_list = enb_node_list->next; - omv_data.geo[i].Neighbors=0; - - for (j=NB_eNB_INST; j< NB_UE_INST + NB_eNB_INST ; j++) { - if (is_UE_active(i,j - NB_eNB_INST ) == 1) { - omv_data.geo[i].Neighbor[omv_data.geo[i].Neighbors]= j; - omv_data.geo[i].Neighbors++; - LOG_D(OMG,"[eNB %d][UE %d] is_UE_active(i,j) %d geo (x%d, y%d) num neighbors %d\n", i,j-NB_eNB_INST, is_UE_active(i,j-NB_eNB_INST), - omv_data.geo[i].x, omv_data.geo[i].y, omv_data.geo[i].Neighbors); - } - } - } - } - - for (i=NB_eNB_INST; inode->X_pos < 0.0) ? 0.0 : ue_node_list->node->X_pos; - omv_data.geo[i].y = (ue_node_list->node->Y_pos < 0.0) ? 0.0 : ue_node_list->node->Y_pos; - omv_data.geo[i].z = 1.0; - omv_data.geo[i].mobility_type = oai_emulation.info.omg_model_ue; - omv_data.geo[i].node_type = 1; //UE - //trial - omv_data.geo[i].state = 1; - omv_data.geo[i].rnti = 88; - omv_data.geo[i].connected_eNB = 0; - omv_data.geo[i].RSRP = 66; - omv_data.geo[i].RSRQ = 55; - omv_data.geo[i].Pathloss = 44; - omv_data.geo[i].RSSI[0] = 33; - omv_data.geo[i].RSSI[1] = 22; - omv_data.geo[i].RSSI[2] = 11; - - ue_node_list = ue_node_list->next; - omv_data.geo[i].Neighbors=0; - - for (j=0; j< NB_eNB_INST ; j++) { - if (is_UE_active(j,i-NB_eNB_INST) == 1) { - omv_data.geo[i].Neighbor[ omv_data.geo[i].Neighbors]=j; - omv_data.geo[i].Neighbors++; - LOG_D(OMG,"[UE %d][eNB %d] is_UE_active %d geo (x%d, y%d) num neighbors %d\n", i-NB_eNB_INST,j, is_UE_active(j,i-NB_eNB_INST), - omv_data.geo[i].x, omv_data.geo[i].y, omv_data.geo[i].Neighbors); - } - } - } - } - - if( write( pfd, &omv_data, sizeof(struct Data_Flow_Unit) ) == -1 ) - perror( "write omv failed" ); - - return 1; -} - -void omv_end (int pfd, Data_Flow_Unit omv_data) -{ - omv_data.end=1; - - if( write( pfd, &omv_data, sizeof(struct Data_Flow_Unit) ) == -1 ) - perror( "write omv failed" ); -} -#endif diff --git a/targets/SIMU/USER/phy_procedures_sim_form.c b/targets/SIMU/USER/phy_procedures_sim_form.c deleted file mode 100644 index bfc769413a..0000000000 --- a/targets/SIMU/USER/phy_procedures_sim_form.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* Form definition file generated with fdesign. */ - -#include -#include -#include "phy_procedures_sim_form.h" - -FD_phy_procedures_sim *create_form_phy_procedures_sim(void) -{ - FL_OBJECT *obj; - FD_phy_procedures_sim *fdui = (FD_phy_procedures_sim *) fl_calloc(1, sizeof(*fdui)); - - fdui->phy_procedures_sim = fl_bgn_form(FL_NO_BOX, 640, 320); - obj = fl_add_box(FL_UP_BOX,0,0,640,320,""); - fdui->pusch_constellation = obj = fl_add_xyplot(FL_POINTS_XYPLOT,50,30,220,190,"PUSCH constellation"); - fl_set_object_color(obj,FL_BLACK,FL_YELLOW); - fdui->pdsch_constellation = obj = fl_add_xyplot(FL_POINTS_XYPLOT,370,30,220,190,"PDSCH constellation"); - fl_set_object_color(obj,FL_BLACK,FL_YELLOW); - fdui->ch00 = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,370,240,210,60,"CH00"); - fl_set_object_color(obj,FL_BLACK,FL_YELLOW); - fl_end_form(); - - fdui->phy_procedures_sim->fdui = fdui; - - return fdui; -} -/*---------------------------------------*/ - diff --git a/targets/SIMU/USER/phy_procedures_sim_form.fd b/targets/SIMU/USER/phy_procedures_sim_form.fd deleted file mode 100644 index 278096ad91..0000000000 --- a/targets/SIMU/USER/phy_procedures_sim_form.fd +++ /dev/null @@ -1,88 +0,0 @@ -Magic: 13000 - -Internal Form Definition File - (do not change) - -Number of forms: 1 -Unit of measure: FL_COORD_PIXEL - -=============== FORM =============== -Name: phy_procedures_sim -Width: 640 -Height: 320 -Number of Objects: 4 - --------------------- -class: FL_BOX -type: UP_BOX -box: 0 0 640 320 -boxtype: FL_UP_BOX -colors: FL_COL1 FL_COL1 -alignment: FL_ALIGN_CENTER -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 50 30 220 190 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: PUSCH constellation -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: pusch_constellation -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 370 30 220 190 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: PDSCH constellation -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: pdsch_constellation -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 370 240 210 60 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: CH00 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: ch00 -callback: -argument: - -============================== -create_the_forms diff --git a/targets/SIMU/USER/phy_procedures_sim_form.h b/targets/SIMU/USER/phy_procedures_sim_form.h deleted file mode 100644 index df8f846f96..0000000000 --- a/targets/SIMU/USER/phy_procedures_sim_form.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/** Header file generated with fdesign on Tue Jul 27 16:31:42 2010.**/ - -#ifndef FD_phy_procedures_sim_h_ -#define FD_phy_procedures_sim_h_ - -/** Callbacks, globals and object handlers **/ - - -/**** Forms and Objects ****/ -typedef struct { - FL_FORM *phy_procedures_sim; - void *vdata; - char *cdata; - long ldata; - FL_OBJECT *pusch_constellation; - FL_OBJECT *pdsch_constellation; - FL_OBJECT *ch00; -} FD_phy_procedures_sim; - -extern FD_phy_procedures_sim * create_form_phy_procedures_sim(void); - -#endif /* FD_phy_procedures_sim_h_ */ diff --git a/targets/SIMU/USER/plot_results.m b/targets/SIMU/USER/plot_results.m deleted file mode 100644 index 73ac501f6f..0000000000 --- a/targets/SIMU/USER/plot_results.m +++ /dev/null @@ -1,57 +0,0 @@ -function plot_results(tm) -data_abs = dlmread(sprintf('UE_stats_abs_th0_tx%d.txt',tm)); -data = dlmread(sprintf('UE_stats_th0_tx%d.txt',tm)); -figure -plot(data(:,1),data(:,2)) -hold on -plot(data_abs(:,1),data_abs(:,2),'r') -title(sprintf('Average Throughput of System for TM %d',tm)) -xlabel('Frames') -ylabel('Throughput [kbps]') -legend('Full PHY','PHY ABSTRACTION') -hold off -%figure -%[f x]=ecdf(data(:,2)); -%plot(x,f); -%hold on -%[f x]=ecdf(data_abs(:,2)); -%plot(x,f); -%hold off -% figure -% cdfplot(data(:,2)); -% hold on -% cdfplot(data_abs(:,2)); -% hold off -%data0 = dlmread(sprintf('UE_stats_th0_tx%d.txt',tm)); -%if(users>1) -%data1 = dlmread(sprintf('UE_stats_th1_tx%d.txt',tm)); -%data1_abs = dlmread(sprintf('UE_stats_abs_th1_tx%d.txt',tm)); -%end -%data0_abs = dlmread(sprintf('UE_stats_abs_th0_tx%d.txt',tm)); -%figure -%plot(data0(:,1),data0(:,2)) -%hold on; -%plot(data0_abs(:,1),data0_abs(:,2),'r') -%title(sprintf('Instanteneous Throughput of UE 1 for TM %d',tm)) -%xlabel('Frames') -%ylabel('Throughput [kbps]') -%legend('Full PHY','PHY ABSTRACTION') -%hold off -% figure -% [f x]=ecdf(data0(:,2)); -% plot(x,f); -% hold on -% [f x]=ecdf(data0_abs(:,2)); -% plot(x,f); -% hold off -%if(users>1) -%figure -%plot(data1(:,1),data1(:,2)) -%hold on; -%plot(data1_abs(:,1),data1_abs(:,2),'r') -%title(sprintf('Instanteneous Throughput of UE 2 for TM %d',tm)) -%xlabel('Frames') -%ylabel('Throughput [kbps]') -%legend('Full PHY','PHY ABSTRACTION') -%hold off -%end diff --git a/targets/SIMU/USER/sinr_sim.c b/targets/SIMU/USER/sinr_sim.c deleted file mode 100644 index 2dc86b8443..0000000000 --- a/targets/SIMU/USER/sinr_sim.c +++ /dev/null @@ -1,679 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "SIMULATION/TOOLS/sim.h" -#include "SIMULATION/RF/rf.h" -#include "PHY/types.h" -#include "PHY/defs_eNB.h" -#include "PHY/defs_UE.h" -#include "PHY/phy_extern.h" -#include "oaisim_config.h" - -#ifdef OPENAIR2 -#include "LAYER2/MAC/mac.h" -#include "LAYER2/MAC/mac_extern.h" -#include "UTIL/LOG/log_if.h" -#include "UTIL/LOG/log_extern.h" -#include "RRC/LTE/rrc_extern.h" -#include "PHY_INTERFACE/phy_interface_extern.h" -#include "UTIL/OCG/OCG.h" -#include "UTIL/OMG/omg.h" -#include "UTIL/OPT/opt.h" // to test OPT -#endif - - -#include "oaisim.h" - -#define PI 3.1416 -#define Am 20 - -#define MCL (-70) /*minimum coupling loss (MCL) in dB*/ -//double sinr[NUMBER_OF_eNB_MAX][2*25]; -/* -extern double sinr_bler_map[MCS_COUNT][2][16]; -extern double sinr_bler_map_up[MCS_COUNT][2][16]; -double SINRpost_eff[301]; -extern double MI_map_4qam[3][162]; -extern double MI_map_16qam[3][197]; -extern double MI_map_64qam[3][227]; -*/ -// Extract the positions of UE and ENB from the mobility model - -void extract_position (node_list* input_node_list, node_desc_t **node_data, int nb_nodes) -{ - - int i; - - for (i=0; ix = input_node_list->node->x_pos; - - if (node_data[i]->x <0.0) - node_data[i]->x = 0.0; - - node_data[i]->y = input_node_list->node->y_pos; - - if (node_data[i]->y <0.0) - node_data[i]->y = 0.0; - - LOG_D(OCM, "extract_position: added node_data %d with position X: %f and Y: %f \n", i,input_node_list->node->x_pos, input_node_list->node->y_pos ); - input_node_list = input_node_list->next; - } else { - LOG_E(OCM, "extract_position: Null pointer!!!\n"); - //exit(-1); - } - } -} -void extract_position_fixed_enb (node_desc_t **node_data, int nb_nodes, frame_t frame) -{ - int i; - - for (i=0; ix = 0; - node_data[i]->y = 500; - } else if (i == 1 ) { - node_data[i]->x = 866;// - node_data[i]->y = 1000; - } else if (i == 2 ) { - node_data[i]->x = 866; - node_data[i]->y = 0; - } - } -} - -void extract_position_fixed_ue (node_desc_t **node_data, int nb_nodes, frame_t frame) -{ - int i; - - if(frame<50) - for (i=0; ix = 2050; - node_data[i]->y = 1500; - } else { - node_data[i]->x = 2150; - node_data[i]->y = 1500; - } - } - else { - for (i=0; ix = 1856 - (frame - 49); - // if(node_data[i]->x > 2106) - // node_data[i]->x = 2106; - node_data[i]->y = 1813 + (frame - 49); - // if(node_data[i]->y < 1563) - // node_data[i]->y = 1563; - // if( node_data[i]->x == 2106) - // node_data[i]->x = 2106 - (frame - 49); - } else { - node_data[i]->x = 2106 - (frame - 49); - // if(node_data[i]->x < 1856) - // node_data[i]->x = 1856; - node_data[i]->y = 1563 + (frame - 49); - // if(node_data[i]->y < 1813) - // node_data[i]->y = 1813; - } - } - } - -} - -void init_ue(node_desc_t *ue_data, UE_Antenna ue_ant) //changed from node_struct -{ - - ue_data->n_sectors = 1; - ue_data->phi_rad = 2 * PI; - ue_data->ant_gain_dBi = ue_ant.antenna_gain_dBi; - ue_data->tx_power_dBm = ue_ant.tx_power_dBm; - ue_data->rx_noise_level = ue_ant.rx_noise_level_dB; //value in db - -} - -void init_enb(node_desc_t *enb_data, eNB_Antenna enb_ant) //changed from node_struct -{ - - int i; - double sect_angle[3]= {0,2*PI/3,4*PI/3}; - - enb_data->n_sectors = enb_ant.number_of_sectors; - - for (i=0; in_sectors; i++) - enb_data->alpha_rad[i] = sect_angle[i]; //enb_ant.alpha_rad[i]; - - enb_data->phi_rad = enb_ant.beam_width_dB; - enb_data->ant_gain_dBi = enb_ant.antenna_gain_dBi; - enb_data->tx_power_dBm = enb_ant.tx_power_dBm; - enb_data->rx_noise_level = enb_ant.rx_noise_level_dB; - -} - - - -void calc_path_loss(node_desc_t* enb_data, node_desc_t* ue_data, channel_desc_t *ch_desc, Environment_System_Config env_desc, double **Shad_Fad) -{ - - double dist; - double path_loss; - double gain_max; - double gain_sec[3]; - double alpha, theta; - - int count; - - - dist = sqrt(pow((enb_data->x - ue_data->x), 2) + pow((enb_data->y - ue_data->y), 2)); - - path_loss = env_desc.fading.free_space_model_parameters.pathloss_0_dB - - 10*env_desc.fading.free_space_model_parameters.pathloss_exponent * log10(dist/1000); - LOG_D(OCM,"dist %f, Path loss %f\n",dist,ch_desc->path_loss_dB); - - /* Calculating the angle in the range -pi to pi from the slope */ - alpha = atan2((ue_data->y - enb_data->y),(ue_data->x - enb_data->x)); - - if (alpha < 0) - alpha += 2*PI; - - //printf("angle in radians is %lf\n", ue_data[UE_id]->alpha_rad[eNB_id]); - ch_desc->aoa = alpha; - ch_desc->random_aoa = 0; - - if (enb_data->n_sectors==1) //assume omnidirectional antenna - gain_max = 0; - else { - gain_max = -1000; - - for(count = 0; count < enb_data->n_sectors; count++) { - theta = enb_data->alpha_rad[count] - alpha; - /* gain = -min(Am , 12 * (theta/theta_3dB)^2) */ - gain_sec[count] = -(Am < (12 * pow((theta/enb_data->phi_rad),2)) ? Am : (12 * pow((theta/enb_data->phi_rad),2))); - - if (gain_sec[count]>gain_max) //take the sector that we are closest too (or where the gain is maximum) - gain_max = gain_sec[count]; - } - } - - path_loss += enb_data->ant_gain_dBi + gain_max + ue_data->ant_gain_dBi; - - if (Shad_Fad!=NULL) - path_loss += Shad_Fad[(int)ue_data->x][(int)ue_data->y]; - - ch_desc->path_loss_dB = MCL < path_loss ? MCL : path_loss; - //LOG_D(OCM,"x_coordinate\t%f\t,y_coordinate\t%f\t, path_loss %f\n",ue_data->x,ue_data->y,ch_desc->path_loss_dB); -} - - - - - -void init_snr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double* sinr_dB, double* N0, uint8_t transmission_mode, uint16_t q, uint8_t dl_power_off, uint16_t nb_rb) -{ - - double thermal_noise,abs_channel,channelx, channely,channelx_i, channely_i ; - int count; - int aarx,aatx; - uint8_t qq; - - /* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth*/ - thermal_noise = -174 + 10*log10(15000); //per RE; value in dBm - - //for (aarx=0; aarxnb_rx; aarx++) - *N0 = thermal_noise + ue_data->rx_noise_level; - - LOG_D(OCM,"Path loss %lf, noise (N0) %lf, signal %lf, snr %lf\n", - eNB2UE->path_loss_dB, - thermal_noise + ue_data->rx_noise_level, - enb_data->tx_power_dBm + eNB2UE->path_loss_dB, - enb_data->tx_power_dBm + eNB2UE->path_loss_dB - (thermal_noise + ue_data->rx_noise_level)); - - if(transmission_mode == 5 && dl_power_off==1) - transmission_mode = 6; - - switch(transmission_mode) { - case 1: - - //printf ("coupling factor is %lf\n", coupling); - for (count = 0; count < (12 * nb_rb); count++) { - sinr_dB[count] = enb_data->tx_power_dBm - + eNB2UE->path_loss_dB - - (thermal_noise + ue_data->rx_noise_level) - + 10 * log10 (pow(eNB2UE->chF[0][count].x, 2) - + pow(eNB2UE->chF[0][count].y, 2)); - //printf("sinr_dB[%d]: %1f\n",count,sinr_dB[count]); - //printf("Dl_link SNR for res. block %d is %lf\n", count, sinr[eNB_id][count]); - } - - break; - - case 2: - - for (count = 0; count < (12 * nb_rb); count++) { - abs_channel=0; - - for (aarx=0; aarxnb_rx; aarx++) { - for (aatx=0; aatxnb_tx; aatx++) { - abs_channel += (pow(eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x, 2) + pow(eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y, 2)); - } - } - - sinr_dB[count] = enb_data->tx_power_dBm - + eNB2UE->path_loss_dB - - (thermal_noise + ue_data->rx_noise_level) - + 10 * log10 (abs_channel/2); - // printf("sinr_dB[%d]: %1f\n",count,sinr_dB[count]); - } - - break; - - case 5: - for (count = 0; count < (12 * nb_rb); count++) { - channelx=0; - channely=0; - channelx_i=0; - channely_i=0; - qq = (q>>(((count/12)>>2)<<1))&3; - //printf("pmi_alloc %d: rb %d, pmi %d\n",q,count/12,qq); - - - - // qq = q; - for (aarx=0; aarxnb_rx; aarx++) { - for (aatx=0; aatxnb_tx; aatx++) { - switch(qq) { - case 0: - if (channelx==0 || channely==0) { - channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channelx_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } else { - channelx += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channelx_i -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely_i -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } - - break; - - case 1: - if (channelx==0 || channely==0) { - channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channelx_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } else { - channelx -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channelx_i += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely_i += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } - - break; - - case 2: - if (channelx==0 || channely==0) { - channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channelx_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } else { - channelx -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channely += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channelx_i += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channely_i -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - - } - - break; - - case 3: - if (channelx==0 || channely==0) { - channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channelx_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } else { - channelx += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channely -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channelx_i -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channely_i += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - } - - break; - - default: - LOG_E(EMU,"Problem in SINR Calculation for TM5 \n"); - break; - - }//switch(q) - - }//aatx - }//aarx - - /* sinr_dB[count] = enb_data->tx_power_dBm - + eNB2UE->path_loss_dB - - (thermal_noise + ue_data->rx_noise_level) - + 10 * log10 ((pow(channelx,2) + pow(channely,2))/2) - 10 * log10 ((pow(channelx_i,2) + pow(channely_i,2))/2); - */ - sinr_dB[count] = enb_data->tx_power_dBm - + eNB2UE->path_loss_dB - - (thermal_noise + ue_data->rx_noise_level) - + 10 * log10 ((pow(channelx,2) + pow(channely,2))) - 10 * log10 ((pow(channelx_i,2) + pow(channely_i,2))) - 3; // 3dB is subtracted as the tx_power_dBm is to be adjusted on per user basis - // printf("sinr_dB[%d]: %1f\n",count,sinr_dB[count]); - } - - break; - - case 6: - for (count = 0; count < (12 * nb_rb); count++) { - channelx=0; - channely=0; - qq = (q>>(((count/12)>>2)<<1))&3; - //printf("pmi_alloc %d: rb %d, pmi %d\n",q,count/12,qq); - - - - // qq = q; - for (aarx=0; aarxnb_rx; aarx++) { - for (aatx=0; aatxnb_tx; aatx++) { - switch(qq) { - case 0: - if (channelx==0 || channely==0) { - channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } else { - channelx += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } - - break; - - case 1: - if (channelx==0 || channely==0) { - channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } else { - channelx -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } - - break; - - case 2: - if (channelx==0 || channely==0) { - channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } else { - channelx -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channely += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - } - - break; - - case 3: - if (channelx==0 || channely==0) { - channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - } else { - channelx += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y; - channely -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x; - } - - break; - - default: - LOG_E(EMU,"Problem in SINR Calculation for TM6 \n"); - break; - - }//switch(q) - - }//aatx - }//aarx - - sinr_dB[count] = enb_data->tx_power_dBm - + eNB2UE->path_loss_dB - - (thermal_noise + ue_data->rx_noise_level) - + 10 * log10 ((pow(channelx,2) + pow(channely,2))/2); - - // printf("sinr_dB[%d]: %1f\n",count,sinr_dB[count]); - } - - break; - - default: - LOG_E(EMU,"Problem in SINR Initialization in sinr_sim.c\n"); - break; - }//switch -}//function ends - -void calculate_sinr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double *sinr_dB, uint16_t nb_rb) -{ - - double sir, thermal_noise; - short count; - - /* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth */ - thermal_noise = -174 + 10*log10(15000); //per RE, value in dBm - - for (count = 0; count < 12 * nb_rb; count++) { - sir = enb_data->tx_power_dBm - + eNB2UE->path_loss_dB - - (thermal_noise + ue_data->rx_noise_level) - + 10 * log10 (pow(eNB2UE->chF[0][count].x, 2) - + pow(eNB2UE->chF[0][count].y, 2)); - - if (sir > 0) - sinr_dB[count] -= sir; - - //printf("*****sinr% lf \n",sinr_dB[count]); - } -} -void get_beta_map() -{ - char *file_path = NULL; - //int table_len = 0; - int t,u; - int mcs = 0; - char *sinr_bler; - char buffer[1000]; - FILE *fp; - double perf_array[13]; - - file_path = (char*) malloc(512); - - for (mcs = 0; mcs < MCS_COUNT; mcs++) { - snprintf( file_path, 512, "%s/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/bler_tx1_chan18_nrx1_mcs%d.csv", getenv("OPENAIR1_DIR"), mcs ); - fp = fopen(file_path,"r"); - - if (fp == NULL) { - LOG_E(OCM,"ERROR: Unable to open the file %s! Exitng.\n", file_path); - exit(-1); - } - - // else { - if (fgets (buffer, 1000, fp) != NULL) { - if (fgets (buffer, 1000, fp) != NULL) { - table_length[mcs] = 0; - - while (!feof (fp)) { - u = 0; - sinr_bler = strtok (buffer, ";"); - - while (sinr_bler != NULL) { - perf_array[u] = atof (sinr_bler); - u++; - sinr_bler = strtok (NULL, ";"); - } - - if ((perf_array[4] / perf_array[5]) < 1) { - sinr_bler_map[mcs][0][table_length[mcs]] = perf_array[0]; - sinr_bler_map[mcs][1][table_length[mcs]] = (perf_array[4] / perf_array[5]); - table_length[mcs]++; - - if (table_length[mcs]>MCS_TABLE_LENGTH_MAX) { - LOG_E(OCM,"Error reading MCS table. Increase MCS_TABLE_LENGTH_MAX (mcs %d)!\n",mcs); - exit(-1); - } - } - - if (fgets (buffer, 1000, fp) != NULL) { - } - } - } - } - - fclose(fp); - // } - LOG_D(OCM,"Print the table for mcs %d\n",mcs); - - for (t = 0; t. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are -* met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/** -* @file threadpool.c -* @brief Threadpool implementation file -*/ - -#include -#include -#include - - -#include "oaisim.h" -#include "UTIL/OCG/OCG_extern.h" -#include "UTIL/FIFO/pad_list.h" -#include "threadpool.h" - -extern uint8_t abstraction_flag; -extern Signal_buffers *signal_buffers_g; - -extern channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; -extern channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX]; - -extern node_desc_t *enb_data[NUMBER_OF_eNB_MAX]; -extern node_desc_t *ue_data[NUMBER_OF_UE_MAX]; - -extern LTE_DL_FRAME_PARMS *frame_parms; - -/** -* @function void *threadpool_thread(void *threadpool) -* @brief the worker thread -* @param threadpool the pool which own the thread -*/ -void *threadpool_thread(void *threadpool); - -int threadpool_free(threadpool_t *pool); - -threadpool_t *threadpool_create(int thread_count) -{ - threadpool_t *pool; - int i; - - /* TODO: Check for negative or otherwise very big input parameters */ - - if((pool = (threadpool_t *)malloc(sizeof(threadpool_t))) == NULL) { - goto err; - } - - // memset - /* Initialize */ - pool->thread_count = thread_count; - job_list_init(&(pool->job_queue)); - pool->shutdown = pool->started = pool->active = 0; - - /* Allocate thread and task queue */ - pool->threads = (pthread_t *)malloc(sizeof (pthread_t) * thread_count); - - // memset - /* Initialize mutex and conditional variable first */ - if((pthread_mutex_init(&(pool->lock), NULL) != 0) || - (pthread_mutex_init(&(pool->sync_lock), NULL) != 0) || - (pthread_cond_init(&(pool->notify), NULL) != 0) || - (pthread_cond_init(&(pool->sync_notify), NULL) != 0) || - (pool->threads == NULL)) { - goto err; - } - - /* Start worker threads */ - for(i = 0; i < thread_count; i++) { - if(pthread_create(&(pool->threads[i]), NULL, - threadpool_thread, (void*)pool) != 0) { - threadpool_destroy(pool); - return NULL; - } else { - pool->started++; - } - } - - return pool; - -err: - - if(pool) { - threadpool_free(pool); - } - - return NULL; -} - -int threadpool_add(threadpool_t *pool, Job_elt *job) -{ - int err = 0; - - if(pool == NULL || job == NULL) { - return threadpool_invalid; - } - - if(pthread_mutex_lock(&(pool->lock)) != 0) { - return threadpool_lock_failure; - } - - do { - - /* Are we shutting down ? */ - if(pool->shutdown) { - err = threadpool_shutdown; - break; - } - - /* Add task to queue */ - job_list_add_tail_eurecom(job, &(pool->job_queue)); - - /* pthread_cond_broadcast */ - if(pthread_cond_signal(&(pool->notify)) != 0) { - err = threadpool_lock_failure; - break; - } - } while(0); - - if(pthread_mutex_unlock(&pool->lock) != 0) { - err = threadpool_lock_failure; - } - - return err; -} - -int threadpool_destroy(threadpool_t *pool) -{ - int i, err = 0; - - if(pool == NULL) { - return threadpool_invalid; - } - - if(pthread_mutex_lock(&(pool->lock)) != 0) { - return threadpool_lock_failure; - } - - do { - /* Already shutting down */ - if(pool->shutdown) { - err = threadpool_shutdown; - break; - } - - pool->shutdown = 1; - - /* Wake up all worker threads */ - if((pthread_cond_broadcast(&(pool->notify)) != 0) || - (pthread_mutex_unlock(&(pool->lock)) != 0)) { - err = threadpool_lock_failure; - break; - } - - /* Join all worker thread */ - for(i = 0; i < pool->thread_count; i++) { - if(pthread_join(pool->threads[i], NULL) != 0) { - err = threadpool_thread_failure; - } - } - } while(0); - - if(pthread_mutex_unlock(&pool->lock) != 0) { - err = threadpool_lock_failure; - } - - /* Only if everything went well do we deallocate the pool */ - if(!err) { - threadpool_free(pool); - } - - return err; -} - -int threadpool_free(threadpool_t *pool) -{ - if(pool == NULL || pool->started > 0) { - return -1; - } - - /* Did we manage to allocate ? */ - if(pool->threads) { - free(pool->threads); - job_list_free (&(pool->job_queue)); - - /* Because we allocate pool->threads after initializing the - mutex and condition variable, we're sure they're - initialized. Let's lock the mutex just in case. */ - pthread_mutex_lock(&(pool->lock)); - pthread_mutex_destroy(&(pool->lock)); - pthread_mutex_destroy(&(pool->sync_lock)); - pthread_cond_destroy(&(pool->notify)); - pthread_cond_destroy(&(pool->sync_notify)); - } - - free(pool); - return 0; -} - - -void *threadpool_thread(void *threadpool) -{ - threadpool_t *pool = (threadpool_t *)threadpool; - Job_elt * job_elt; - int err; - - - printf("The ID of this thread is: %u\n", (unsigned int)pthread_self()); - - for(;;) { - /* Lock must be taken to wait on conditional variable */ - pthread_mutex_lock(&(pool->lock)); - - /* Wait on condition variable, check for spurious wakeups. - When returning from pthread_cond_wait(), we own the lock. */ - - while(((pool->job_queue).nb_elements == 0) && (!pool->shutdown)) { - pthread_cond_wait(&(pool->notify), &(pool->lock)); - } - - if(pool->shutdown) { - break; - } - - /* Grab our task */ - job_elt = job_list_remove_head(&(pool->job_queue)); - - - if((err = pthread_mutex_lock(&(pool->sync_lock))) != 0) { - printf("Mutex Error \n"); - return err; - } - - pool->active++; - - if((err = pthread_mutex_unlock(&pool->sync_lock)) != 0) { - printf("Mutex Error \n"); - return err; - } - - - /* Unlock */ - pthread_mutex_unlock(&(pool->lock)); - - /* Get to work */ - switch((job_elt->job).type) { - case JT_OTG: - if ((job_elt->job).eNB_flag) - update_otg_eNB((job_elt->job).nid, (unsigned int) oai_emulation.info.time_ms); - else - update_otg_UE((job_elt->job).nid, (unsigned int) oai_emulation.info.time_ms); - - break; - - case JT_PDCP://do not forget adding flag enb - if ((job_elt->job).eNB_flag) - pdcp_run(frame, 1, 0, (job_elt->job).nid); - else - pdcp_run(frame, 0, (job_elt->job).nid, 0); - - break; - - case JT_PHY_MAC: - if ((job_elt->job).eNB_flag) - phy_procedures_eNB_lte ((job_elt->job).last_slot, (job_elt->job).next_slot, PHY_vars_eNB_g[(job_elt->job).nid], abstraction_flag); - else - phy_procedures_UE_lte ((job_elt->job).last_slot, (job_elt->job).next_slot, PHY_vars_UE_g[(job_elt->job).nid], 0, abstraction_flag, normal_txrx); - - ue_data[(job_elt->job).nid]->tx_power_dBm = PHY_vars_UE_g[(job_elt->job).nid]->tx_power_dBm; - break; - - case JT_INIT_SYNC: - initial_sync(PHY_vars_UE_g[(job_elt->job).nid],normal_txrx); - break; - - case JT_DL: - do_DL_sig(signal_buffers_g[(job_elt->job).nid].r_re0,signal_buffers_g[(job_elt->job).nid].r_im0,signal_buffers_g[(job_elt->job).nid].r_re,signal_buffers_g[(job_elt->job).nid].r_im, - signal_buffers_g[(job_elt->job).nid].s_re,signal_buffers_g[(job_elt->job).nid].s_im,eNB2UE,enb_data,ue_data,(job_elt->job).next_slot,abstraction_flag, - frame_parms,(job_elt->job).nid); - break; - - case JT_UL: - do_UL_sig(signal_buffers_g[(job_elt->job).nid].r_re0,signal_buffers_g[(job_elt->job).nid].r_im0,signal_buffers_g[(job_elt->job).nid].r_re,signal_buffers_g[(job_elt->job).nid].r_im, - signal_buffers_g[(job_elt->job).nid].s_re,signal_buffers_g[(job_elt->job).nid].s_im,UE2eNB,enb_data,ue_data,(job_elt->job).next_slot,abstraction_flag, - frame_parms,frame); - break; - - } - - if((err = pthread_mutex_lock(&(pool->sync_lock))) != 0) { - printf("Mutex Error \n"); - return err; - } - - pool->active--; - - if ((pool->active <= 0) && ((pool->job_queue).nb_elements == 0)) { - pool->active=0; - - if(pthread_cond_signal(&(pool->sync_notify)) != 0) { - printf("Condition Error \n"); - break; - } - } - - - if((err = pthread_mutex_unlock(&pool->sync_lock)) != 0) { - printf("Mutex Error \n"); - return err; - } - - - } - - pool->started--; - - pthread_mutex_unlock(&(pool->lock)); - pthread_exit(NULL); - return(NULL); -} diff --git a/targets/SIMU/USER/threadpool.h b/targets/SIMU/USER/threadpool.h deleted file mode 100644 index 9cea60c6e7..0000000000 --- a/targets/SIMU/USER/threadpool.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -* Copyright (c) 2011, Mathias Brossard . -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are -* met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _THREADPOOL_H_ -#define _THREADPOOL_H_ - -/** -* @file threadpool.h -* @brief Threadpool Header file -*/ - -/** -* @struct threadpool -* @brief The threadpool struct -* -* @var notify Condition variable to notify worker threads. -* @var threads Array containing worker threads ID. -* @var thread_count Number of threads -* @var job_queue Array containing the task queue. -* @var shutdown Flag indicating if the pool is shutting down -*/ -struct threadpool_t { - pthread_mutex_t lock; // used to get / put a job in the queue, protect job_queue - pthread_mutex_t sync_lock; // used when there is a dependancy between two consecutive jobs, protect active - pthread_cond_t notify; // wakup threads - pthread_cond_t sync_notify; // last worker sends this - pthread_t *threads; - Job_List job_queue; - int thread_count; - int count; // ???? - int shutdown; // end of sim/emu - int started; // total number of thread started , after init: started == count - int active; // num active threads -}; - -typedef struct threadpool_t threadpool_t; - -typedef enum { - threadpool_invalid = -1, - threadpool_lock_failure = -2, - threadpool_queue_full = -3, - threadpool_shutdown = -4, - threadpool_thread_failure = -5 -} threadpool_error_t; - -/** -* @function threadpool_create -* @brief Creates a threadpool_t object. -* @param thread_count Number of worker threads. -* @param queue_size Size of the queue. -* @param flags Unused parameter. -* @return a newly created thread pool or NULL -*/ -threadpool_t *threadpool_create(int thread_count); - -/** -* @function threadpool_add -* @brief add a new task in the queue of a thread pool -* @param pool Thread pool to which add the task. -* @param function Pointer to the function that will perform the task. -* @param argument Argument to be passed to the function. -* @param flags Unused parameter. -* @return 0 if all goes well, negative values in case of error (@see -* threadpool_error_t for codes). -*/ -int threadpool_add(threadpool_t *pool, Job_elt *job); - -/** -* @function threadpool_destroy -* @brief Stops and destroys a thread pool. -* @param pool Thread pool to destroy. -* @param flags Unused parameter. -*/ -int threadpool_destroy(threadpool_t *pool); - -#endif /* _THREADPOOL_H_ */ diff --git a/targets/SIMU/USER/valgrind.sh b/targets/SIMU/USER/valgrind.sh deleted file mode 100755 index 4cb856107f..0000000000 --- a/targets/SIMU/USER/valgrind.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -valgrind --tool=memcheck --leak-check=full --show-reachable=yes --num-callers=20 --track-origins=yes --track-fds=yes ./oaisim -b1 -u1 -F -n100 2>leakage diff --git a/targets/TEST/AT_COMMANDS/oaisim.c b/targets/TEST/AT_COMMANDS/oaisim.c index 4420d583e3..e14373f87f 100644 --- a/targets/TEST/AT_COMMANDS/oaisim.c +++ b/targets/TEST/AT_COMMANDS/oaisim.c @@ -34,7 +34,7 @@ #include "LAYER2/MAC/vars.h" #include "UTIL/LOG/log_if.h" #include "UTIL/LOG/log_extern.h" -#include "RRC/LITE/vars.h" +#include "RRC/LTE/vars.h" #include "PHY_INTERFACE/vars.h" #include "UTIL/OCG/OCG.h" #include "UTIL/AT_COMMANDS/parser.h" diff --git a/targets/TEST/PACKET_TRACER/pt.c b/targets/TEST/PACKET_TRACER/pt.c index 9e4077e274..030b63ab90 100644 --- a/targets/TEST/PACKET_TRACER/pt.c +++ b/targets/TEST/PACKET_TRACER/pt.c @@ -37,7 +37,7 @@ #include "SCHED/vars.h" #include "LAYER2/MAC/defs.h" #include "LAYER2/MAC/vars.h" -#include "RRC/LITE/vars.h" +#include "RRC/LTE/vars.h" #include "PHY_INTERFACE/vars.h" #include "UTIL/LOG/log.h" #include "OCG_vars.h" diff --git a/targets/TEST/PDCP/test_pdcp.c b/targets/TEST/PDCP/test_pdcp.c index b07add73a6..a999bb254d 100644 --- a/targets/TEST/PDCP/test_pdcp.c +++ b/targets/TEST/PDCP/test_pdcp.c @@ -248,15 +248,12 @@ BOOL test_pdcp_data_req(void) * XXX mem_block_t doesn't hold buffer size, how do we keep the size * information if we pass mem_block_ts via a linked list? */ -#if 0 if (pdcp_test_pdu_buffer_size == 0 || pdcp_test_pdu_buffer == NULL) { msg("[TEST] PDU created by pdcp_data_req() is invalid!\n"); return FALSE; } -#endif - /* * Serialize incoming mem_block_t into an unsigned character array * and add removed PDU to RX list in order to use it in the next test diff --git a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c index 1cadea3715..d3efbe139f 100644 --- a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c +++ b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c @@ -34,7 +34,7 @@ #include "LAYER2/MAC/vars.h" #include "UTIL/LOG/log_if.h" #include "UTIL/LOG/log_extern.h" -#include "RRC/LITE/vars.h" +#include "RRC/LTE/vars.h" #include "PHY_INTERFACE/vars.h" #include "UTIL/OCG/OCG.h" #include "LAYER2/PDCP_v10.1.0/pdcp.h" @@ -148,7 +148,7 @@ void pdcp_rlc_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_dat data_indP->no_tb += 1; } else { printf("Out of memory error\n"); - exit(-1); +// exit(-1); } } else { printf("[RLC-LOOP] DROPPING 1 TB\n"); diff --git a/targets/TEST/RLC_AM_V9.3.0/oaisim.c b/targets/TEST/RLC_AM_V9.3.0/oaisim.c index dda91f0b1f..fc2082f1df 100644 --- a/targets/TEST/RLC_AM_V9.3.0/oaisim.c +++ b/targets/TEST/RLC_AM_V9.3.0/oaisim.c @@ -35,7 +35,7 @@ #include "LAYER2/MAC/vars.h" #include "UTIL/LOG/log_if.h" #include "UTIL/LOG/log_extern.h" -#include "RRC/LITE/vars.h" +#include "RRC/LTE/vars.h" #include "PHY_INTERFACE/vars.h" #include "UTIL/OCG/OCG.h" diff --git a/targets/TEST/RLC_UM_V9.3.0/oaisim.c b/targets/TEST/RLC_UM_V9.3.0/oaisim.c index e1fce26a6f..c520749de3 100644 --- a/targets/TEST/RLC_UM_V9.3.0/oaisim.c +++ b/targets/TEST/RLC_UM_V9.3.0/oaisim.c @@ -35,7 +35,7 @@ #include "LAYER2/MAC/vars.h" #include "UTIL/LOG/log_if.h" #include "UTIL/LOG/log_extern.h" -#include "RRC/LITE/vars.h" +#include "RRC/LTE/vars.h" #include "PHY_INTERFACE/vars.h" #include "UTIL/OCG/OCG.h" diff --git a/targets/build_helper.bash b/targets/build_helper.bash index a3c57b8dce..9c98ef85b0 100755 --- a/targets/build_helper.bash +++ b/targets/build_helper.bash @@ -23,7 +23,7 @@ # brief # author Lionel Gauthier and Navid Nikaein # company Eurecom -# email: lionel.gauthier@eurecom.fr and navid.nikaein@eurecom.fr +# email: lionel.gauthier@eurecom.fr and navid.nikaein@eurecom.fr # ####################################### # Helper Func @@ -42,30 +42,30 @@ declare UBUNTU_REL=`lsb_release -r | cut -f2` declare UBUNTU_REL_NAME=`lsb_release -cs` set_build_from_makefile(){ - BUILD_FROM_MAKEFILE=$1 + BUILD_FROM_MAKEFILE=$1 } check_for_root_rights() { - + # if [[ $EUID -ne $ROOT_EUID ]]; then if [ $USER != "root" ]; then SUDO="sudo -E " - echo "Run as a sudoers" + echo "Run as a sudoers" return 1 - else - echo "Run as a root" + else + echo "Run as a root" return 0 fi } test_install_package() { # usage: test_install_package package_name - + if [ $# -eq 1 ]; then dpkg -s "$1" > /dev/null 2>&1 && { - echo "$1 is installed." + echo "$1 is installed." } || { - echo "$1 is not installed." + echo "$1 is not installed." OAI_INSTALLED=0 $SUDO apt-get install -y $@ } @@ -73,13 +73,13 @@ test_install_package() { } test_uninstall_package() { - + if [ $# -eq 1 ]; then dpkg -s "$1" > /dev/null 2>&1 && { - $SUDO apt-get remove --assume-yes $1 - echo "$1 is uninstalled." + $SUDO apt-get remove --assume-yes $1 + echo "$1 is uninstalled." } || { - echo "$1 is not installed." + echo "$1 is not installed." } fi } @@ -97,8 +97,8 @@ check_for_machine_type(){ else if [ ${MACHINE_TYPE} = "i686" ]; then return 32 # 32-bit stuff here - else - return -1 + else + return -1 fi fi } @@ -108,7 +108,7 @@ check_for_machine_type(){ ##################################################### #################################################### -# 1. install the required packages +# 1. install the required packages #################################################### make_certs(){ @@ -118,32 +118,32 @@ make_certs(){ mkdir -m 777 -p demoCA echo 01 > demoCA/serial touch demoCA/index.txt - + echo "creating the certificate" - + user=$(whoami) HOSTNAME=$(hostname -f) echo "Creating certificate for user '$HOSTNAME'" - + # CA self certificate openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out cacert.pem -keyout cakey.pem -subj /CN=eur/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - + # openssl genrsa -out user.key.pem 1024 openssl genrsa -out hss.key.pem 1024 #openssl req -new -batch -out user.csr.pem -key user.key.pem -subj /CN=$HOSTNAME.eur/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM openssl req -new -batch -out hss.csr.pem -key hss.key.pem -subj /CN=hss.eur/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM openssl ca -cert cacert.pem -keyfile cakey.pem -in hss.csr.pem -out hss.cert.pem -outdir . -batch - + if [ ! -d /usr/local/etc/freeDiameter ]; then echo "Creating non existing directory: /usr/local/etc/freeDiameter/" $SUDO mkdir /usr/local/etc/freeDiameter/ fi - + echo "Copying *.pem to /usr/local/etc/freeDiameter/" $SUDO cp *.pem /usr/local/etc/freeDiameter/ mv *.pem bin/ - + # openssl genrsa -out ubuntu.key.pem 1024 # openssl req -new -batch -x509 -out ubuntu.csr.pem -key ubuntu.key.pem -subj /CN=ubuntu.localdomain/C=FR/ST=BdR/L=Aix/O=fD/OU=Tests # openssl ca -cert cacert.pem -keyfile cakey.pem -in ubuntu.csr.pem -out ubuntu.cert.pem -outdir . -batch @@ -151,25 +151,25 @@ make_certs(){ } check_install_nettle(){ - if [ ! -f ./.lock_oaibuild ]; then - if [ $UBUNTU_REL = "12.04" ]; then + if [ ! -f ./.lock_oaibuild ]; then + if [ $UBUNTU_REL = "12.04" ]; then test_uninstall_package nettle-dev test_uninstall_package nettle-bin - + if [ ! -d /usr/local/src/ ]; then echo "/usr/local/src/ doesn't exist please create one" exit -1 fi - + if [ ! -w /usr/local/src/ ]; then echo "You don't have permissions to write to /usr/local/src/, installing as a sudoer" # exit -1 fi - + cd /usr/local/src/ - + echo "Downloading nettle archive" - + if [ -f nettle-2.5.tar.gz ]; then $SUDO rm -f nettle-2.5.tar.gz fi @@ -179,44 +179,44 @@ check_install_nettle(){ if [ -d nettle-2.5 ]; then $SUDO rm -rf nettle-2.5/ fi - - - $SUDO wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz - $SUDO gunzip nettle-2.5.tar.gz + + + $SUDO wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz + $SUDO gunzip nettle-2.5.tar.gz $SUDO echo "Uncompressing nettle archive" $SUDO tar -xf nettle-2.5.tar cd nettle-2.5/ - $SUDO ./configure --disable-openssl --enable-shared --prefix=/usr + $SUDO ./configure --disable-openssl --enable-shared --prefix=/usr if [ $? -ne 0 ]; then exit -1 fi echo "Compiling nettle" - $SUDO make -j $NUM_CPU - $SUDO make check - $SUDO make install + $SUDO make -j $NUM_CPU + $SUDO make check + $SUDO make install cd ../ fi fi } check_install_freediamter(){ - - if [ $UBUNTU_REL = "12.04" ]; then + + if [ $UBUNTU_REL = "12.04" ]; then if [ ! -d /usr/local/src/ ]; then echo "/usr/local/src/ doesn't exist please create one" exit -1 fi - + if [ ! -w /usr/local/src/ ]; then echo "You don't have permissions to write to /usr/local/src/, installing as a sudoer" # exit -1 fi - + cd /usr/local/src/ - + echo "Downloading nettle archive" - + if [ -f nettle-2.5.tar.gz ]; then $SUDO rm -f nettle-2.5.tar.gz fi @@ -226,36 +226,36 @@ check_install_freediamter(){ if [ -d nettle-2.5 ]; then $SUDO rm -rf nettle-2.5/ fi - - - $SUDO wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz - $SUDO gunzip nettle-2.5.tar.gz + + + $SUDO wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz + $SUDO gunzip nettle-2.5.tar.gz $SUDO echo "Uncompressing nettle archive" $SUDO tar -xf nettle-2.5.tar cd nettle-2.5/ - $SUDO ./configure --disable-openssl --enable-shared --prefix=/usr + $SUDO ./configure --disable-openssl --enable-shared --prefix=/usr if [ $? -ne 0 ]; then exit -1 fi echo "Compiling nettle" - $SUDO make -j $NUM_CPU - $SUDO make check - $SUDO make install + $SUDO make -j $NUM_CPU + $SUDO make check + $SUDO make install cd ../ fi - + echo "Downloading gnutls archive" - + if [ -f gnutls-3.1.23.tar.xz ]; then $SUDO rm -f gnutls-3.1.23.tar.xz fi if [ -d gnutls-3.1.23/ ]; then $SUDO rm -rf gnutls-3.1.23/ fi - + test_uninstall_package libgnutls-dev - - $SUDO wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz + + $SUDO wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz $SUDO tar -xf gnutls-3.1.23.tar.xz echo "Uncompressing gnutls archive ($PWD)" cd gnutls-3.1.23/ @@ -264,38 +264,38 @@ check_install_freediamter(){ exit -1 fi echo "Compiling gnutls" - $SUDO make -j $NUM_CPU - $SUDO make install + $SUDO make -j $NUM_CPU + $SUDO make install cd ../ - + echo "Downloading freeDiameter archive" - + if [ -f 1.1.5.tar.gz ]; then $SUDO rm -f 1.1.5.tar.gz fi if [ -d freeDiameter-1.1.5/ ]; then $SUDO rm -rf freeDiameter-1.1.5/ fi - - $SUDO wget http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz - $SUDO tar -xzf 1.1.5.tar.gz + + $SUDO wget http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz + $SUDO tar -xzf 1.1.5.tar.gz echo "Uncompressing freeDiameter archive" cd freeDiameter-1.1.5 - $SUDO patch -p1 < $OPENAIR3_DIR/S6A/freediameter/freediameter-1.1.5.patch + $SUDO patch -p1 < $OPENAIR3_DIR/S6A/freediameter/freediameter-1.1.5.patch $SUDO mkdir build cd build - $SUDO cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ + $SUDO cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ if [ $? -ne 0 ]; then exit -1 fi echo "Compiling freeDiameter" - $SUDO make -j $NUM_CPU + $SUDO make -j $NUM_CPU #make help - $SUDO make test - $SUDO sudo make install - + $SUDO make test + $SUDO sudo make install + # make_certs - + } @@ -339,7 +339,7 @@ check_hss_s6a_certificate() { then echo_success "HSS S6A: Found valid certificate in /usr/local/etc/freeDiameter" return 0 - else + else echo_error "Bad hss hostname found in cert file: "$full_hostname " hostname is "`hostname` fi fi @@ -357,43 +357,43 @@ check_hss_s6a_certificate() { } check_install_usrp_uhd_driver(){ - if [ ! -f /etc/apt/sources.list.d/ettus.list ] ; then + if [ ! -f /etc/apt/sources.list.d/ettus.list ] ; then $SUDO bash -c 'echo "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/`lsb_release -cs` `lsb_release -cs` main" >> /etc/apt/sources.list.d/ettus.list' $SUDO apt-get update - fi + fi $SUDO apt-get install -t $UBUNTU_REL_NAME uhd - test_install_package python - test_install_package libboost-all-dev + test_install_package python + test_install_package libboost-all-dev test_install_package libusb-1.0-0-dev #test_install_package uhd } check_install_oai_software() { - - if [ ! -f ./.lock_oaibuild ]; then + + if [ ! -f ./.lock_oaibuild ]; then $SUDO apt-get update - if [ $UBUNTU_REL = "12.04" ]; then + if [ $UBUNTU_REL = "12.04" ]; then test_uninstall_package nettle-dev test_uninstall_package nettle-bin - else + else test_install_package nettle-dev test_install_package nettle-bin - fi - test_install_package autoconf - test_install_package automake - test_install_package bison + fi + test_install_package autoconf + test_install_package automake + test_install_package bison test_install_package build-essential test_install_package dialog - test_install_package flex + test_install_package flex test_install_package gawk test_install_package gcc - test_install_package gdb + test_install_package gdb test_install_package make test_install_package cmake test_install_package openssh-client test_install_package openssh-server sudo service ssh start - test_install_package unzip + test_install_package unzip test_install_package autoconf test_install_package automake test_install_package bison @@ -405,7 +405,7 @@ check_install_oai_software() { test_install_package gawk test_install_package gcc test_install_package gccxml - test_install_package gdb + test_install_package gdb test_install_package guile-2.0-dev test_install_package iperf test_install_package iproute @@ -414,6 +414,8 @@ check_install_oai_software() { test_install_package libatlas-dev test_install_package libblas3gf test_install_package libblas-dev + test_install_package liblapack-dev + test_install_package liblapack-dev # if [ $MACHINE_ARCH = 64 ]; then test_install_package libconfig8-dev # else @@ -436,7 +438,7 @@ check_install_oai_software() { test_install_package libxml2-dev # test_install_package linux-headers-`uname -r` test_install_package openssl - test_install_package libssl-dev + test_install_package libssl-dev test_install_package pkg-config test_install_package python-dev test_install_package python-pexpect @@ -445,90 +447,90 @@ check_install_oai_software() { test_install_package valgrind test_install_package doxygen test_install_package graphviz - + # test_install_package libboost-all-dev - - if [ $OAI_INSTALLED = 1 ]; then + + if [ $OAI_INSTALLED = 1 ]; then touch ./.lock_oaibuild - fi - + fi + else echo_info "All the required packages installed: skip" - fi - + fi + } check_install_hss_software() { - if [ ! -f ./.lock_oaibuild ]; then + if [ ! -f ./.lock_oaibuild ]; then $SUDO apt-get update - if [ $UBUNTU_REL = "12.04" ]; then + if [ $UBUNTU_REL = "12.04" ]; then test_uninstall_package nettle-dev test_uninstall_package nettle-bin - else + else test_install_package nettle-dev test_install_package nettle-bin - fi - test_install_package autoconf - test_install_package automake - test_install_package bison + fi + test_install_package autoconf + test_install_package automake + test_install_package bison test_install_package build-essential test_install_package cmake - test_install_package cmake-curses-gui + test_install_package cmake-curses-gui test_install_package dialog test_install_package dkms - test_install_package flex + test_install_package flex test_install_package gawk test_install_package gcc - test_install_package gdb - test_install_package guile-2.0-dev + test_install_package gdb + test_install_package guile-2.0-dev test_install_package g++ - test_install_package libgmp-dev - test_install_package libgcrypt11-dev - test_install_package libidn11-dev - test_install_package libidn2-0-dev - test_install_package libmysqlclient-dev - test_install_package libtasn1-3-dev - test_install_package libsctp1 - test_install_package libsctp-dev - test_install_package libxml2-dev -# test_install_package linux-headers-`uname -r` + test_install_package libgmp-dev + test_install_package libgcrypt11-dev + test_install_package libidn11-dev + test_install_package libidn2-0-dev + test_install_package libmysqlclient-dev + test_install_package libtasn1-3-dev + test_install_package libsctp1 + test_install_package libsctp-dev + test_install_package libxml2-dev +# test_install_package linux-headers-`uname -r` test_install_package make - test_install_package mysql-client - test_install_package mysql-server-core-5.5 + test_install_package mysql-client + test_install_package mysql-server-core-5.5 test_install_package mysql-server test_install_package openssh-client test_install_package openssh-server sudo service ssh start test_install_package phpmyadmin - test_install_package python-dev + test_install_package python-dev test_install_package sshfs - test_install_package swig - test_install_package unzip + test_install_package swig + test_install_package unzip # test_install_package nettle-bin # test_install_package nettle-dev - test_install_package valgrind + test_install_package valgrind - if [ $OAI_INSTALLED = 1 ]; then + if [ $OAI_INSTALLED = 1 ]; then touch ./.lock_oaibuild - fi - + fi + else echo_info "All the required packages installed: skip" - fi + fi } check_install_epc_software() { - if [ ! -f ./.lock_oaibuild ]; then + if [ ! -f ./.lock_oaibuild ]; then $SUDO apt-get update - if [ $UBUNTU_REL = "12.04" ]; then + if [ $UBUNTU_REL = "12.04" ]; then test_uninstall_package nettle-dev test_uninstall_package nettle-bin - else + else test_install_package nettle-dev test_install_package nettle-bin - fi + fi test_install_package autoconf test_install_package automake test_install_package bison @@ -543,7 +545,7 @@ check_install_epc_software() { test_install_package gawk test_install_package gcc test_install_package gccxml - test_install_package gdb + test_install_package gdb test_install_package guile-2.0-dev test_install_package gtkwave test_install_package iperf @@ -573,7 +575,7 @@ check_install_epc_software() { test_install_package libsctp-dev test_install_package libssl-dev test_install_package libtasn1-3-dev - test_install_package libtool + test_install_package libtool test_install_package libxml2 test_install_package libxml2-dev # test_install_package linux-headers-`uname -r` @@ -593,21 +595,21 @@ check_install_epc_software() { test_install_package unzip test_install_package valgrind test_install_package vlan - - if [ $OAI_INSTALLED = 1 ]; then + + if [ $OAI_INSTALLED = 1 ]; then touch ./.lock_oaibuild - fi - + fi + else echo_info "All the required packages installed: skip" - fi + fi } check_install_asn1c(){ - + test_command_install_script "asn1c" "$OPENAIR_TARGETS/SCRIPTS/install_asn1c_0.9.24.modified.bash $SUDO" - + # One mor check about version of asn1c ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE="ASN.1 Compiler, v0.9.24" ASN1C_COMPILER_VERSION_MESSAGE=`asn1c -h 2>&1 | grep -i ASN\.1\ Compiler` @@ -624,15 +626,15 @@ check_install_asn1c(){ fi done fi - + } ################################################# -# 2. compile +# 2. compile ################################################ compile_hss() { cd $OPENAIR3_DIR/OPENAIRHSS - + if [ "$1" -eq 1 ]; then echo_info "build a clean HSS" rm -rfv obj* @@ -642,14 +644,14 @@ compile_hss() { fi OBJ_DIR=`find . -maxdepth 1 -type d -iname obj*` - + if [ ! -n "$OBJ_DIR" ]; then OBJ_DIR="objs" mkdir --verbose -m 777 ./$OBJ_DIR else OBJ_DIR=`basename $OBJ_DIR` fi - + if [ ! -f "$OBJ_DIR"/Makefile ]; then if [ ! -d m4 ]; then mkdir --verbose -m 777 m4 @@ -661,7 +663,7 @@ compile_hss() { fi cd $OBJ_DIR echo_success "Invoking configure" - ../configure + ../configure if [ $? -ne 0 ]; then return 1 fi @@ -675,7 +677,7 @@ compile_hss() { if [ $? -ne 0 ]; then echo_error "Build failed, exiting" return 1 - else + else return 0 fi else @@ -705,11 +707,11 @@ compile_epc() { fi bash_exec "autoreconf -i -f" echo_success "Invoking autogen" - bash_exec "libtoolize" + bash_exec "libtoolize" bash_exec "./autogen.sh" cd ./$OBJ_DIR echo_success "Invoking configure" - if [ $DEBUG -ne 0 ]; then + if [ $DEBUG -ne 0 ]; then ../configure --enable-debug --enable-standalone-epc --enable-gtp1u-in-kernel LDFLAGS=-L/usr/local/lib else ../configure --enable-standalone-epc --enable-gtp1u-in-kernel LDFLAGS=-L/usr/local/lib @@ -727,30 +729,30 @@ compile_epc() { if [ $? -ne 0 ]; then echo_error "Build failed, exiting" return 1 - else + else cp -pf ./OAI_EPC/oai_epc $OPENAIR_TARGETS/bin fi else echo_error "Configure failed, exiting" return 1 fi - + cd $OPENAIR3_DIR/GTPV1-U/GTPUAH; make if [ $? -ne 0 ]; then echo_error "Build GTPUAH module failed, exiting" return 1 - else + else $SUDO cp -pfv ./Bin/libxt_*.so /lib/xtables $SUDO cp -pfv ./Bin/*.ko $OPENAIR_TARGETS/bin fi - + cd $OPENAIR3_DIR/GTPV1-U/GTPURH; make if [ $? -ne 0 ]; then echo_error "Build GTPURH module failed, exiting" return 1 - else + else $SUDO cp -pfv ./Bin/libxt_*.so /lib/xtables $SUDO cp -pfv ./Bin/*.ko $OPENAIR_TARGETS/bin fi @@ -777,15 +779,15 @@ compile_ltesoftmodem() { if [ $? -ne 0 ]; then # to locate easily compilation error in log file make $SOFTMODEM_DIRECTIVES - fi + fi if [ $? -ne 0 ]; then - if [ ! -f ./lte-softmodem ]; then + if [ ! -f ./lte-softmodem ]; then echo_error "Build lte-softmodem failed, returning" return 1 - else + else cp -pf ./lte-softmodem $OPENAIR_TARGETS/bin return 0 - fi + fi else cp -pf ./lte-softmodem $OPENAIR_TARGETS/bin return 0 @@ -801,11 +803,11 @@ compile_oaisim() { if [ -f Makefile ]; then echo "Compiling for oaisim target ($OAISIM_DIRECTIVES)" make cleanall > /dev/null - make -j $NUM_CPU $OAISIM_DIRECTIVES + make -j $NUM_CPU $OAISIM_DIRECTIVES if [ $? -ne 0 ]; then echo_error "Build oaisim failed, returning" return 1 - else + else cp -pf ./oaisim $OPENAIR_TARGETS/bin return 0 fi @@ -820,11 +822,11 @@ compile_unisim() { if [ -f Makefile ]; then echo "Compiling for UNISIM target ..." make cleanall - make -j $NUM_CPU all + make -j $NUM_CPU all if [ $? -ne 0 ]; then echo_error "Build unisim failed, returning" return 1 - else + else cp -pf ./dlsim $OPENAIR_TARGETS/bin cp -pf ./ulsim $OPENAIR_TARGETS/bin cp -pf ./pucchsim $OPENAIR_TARGETS/bin @@ -843,9 +845,9 @@ compile_unisim() { compile_nas_tools() { export NVRAM_DIR=$OPENAIR_TARGETS/bin - + cd $NVRAM_DIR - + if [ ! -f /tmp/nas_cleaned ]; then echo_success "make --directory=$OPENAIR3_DIR/NAS/EURECOM-NAS/tools veryveryclean" make --directory=$OPENAIR3_DIR/NAS/EURECOM-NAS/tools veryveryclean @@ -963,11 +965,11 @@ check_for_nas_ue_executable() { ############################################### # arg1 is RT -# arg2 is HW +# arg2 is HW # arg3 is ENB_S1 install_ltesoftmodem() { # RT - if [ $1 = "RTAI" ]; then + if [ $1 = "RTAI" ]; then if [ ! -f /tmp/init_rt_done.tmp ]; then echo_info " 8.1 Insert RTAI modules" $SUDO insmod /usr/realtime/modules/rtai_hal.ko > /dev/null 2>&1 @@ -982,46 +984,46 @@ install_ltesoftmodem() { fi fi #HW - if [ $2 = "EXMIMO" ]; then + if [ $2 = "EXMIMO" ]; then echo_info " 8.2 [EXMIMO] creating RTAI fifos" - for i in `seq 0 64`; do + for i in `seq 0 64`; do have_rtfX=`ls /dev/ |grep -c rtf$i`; - if [ "$have_rtfX" -eq 0 ] ; then - $SUDO mknod -m 666 /dev/rtf$i c 150 $i; + if [ "$have_rtfX" -eq 0 ] ; then + $SUDO mknod -m 666 /dev/rtf$i c 150 $i; fi; done echo_info " 8.3 [EXMIMO] Build lte-softmodemdrivers" cd $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom && make clean && make # || exit 1 cd $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean && make # || exit 1 - + echo_info " 8.4 [EXMIMO] Setup RF card" cd $OPENAIR_TARGETS/RT/USER . ./init_exmimo2.sh - else + else if [ $2 = "USRP" ]; then echo_info " 8.2 [USRP] " fi fi - + # ENB_S1 - if [ $3 = 0 ]; then + if [ $3 = 0 ]; then cd $OPENAIR2_DIR && make clean && make nasmesh_netlink.ko #|| exit 1 cd $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL && make clean && make # || exit 1 fi - + } # arg1 is ENB_S1 'boolean' install_oaisim() { - if [ $1 = 0 ]; then + if [ $1 = 0 ]; then cd $OPENAIR2_DIR && make clean && make nasmesh_netlink.ko #|| exit 1 cd $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL && make clean && make # || exit 1 else compile_ue_ip_nw_driver install_nas_tools - fi - + fi + } @@ -1041,7 +1043,7 @@ install_nas_tools() { } install_nasmesh(){ - echo_success "LOAD NASMESH IP DRIVER FOR UE AND eNB" + echo_success "LOAD NASMESH IP DRIVER FOR UE AND eNB" (cd $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL && make clean && make) (cd $OPENAIR2_DIR && make clean && make nasmesh_netlink_address_fix.ko) $SUDO rmmod nasmesh @@ -1069,7 +1071,7 @@ create_hss_database(){ fi set_openair_env - + # removed % #Q1="GRANT ALL PRIVILEGES ON *.* TO '$3'@'%' IDENTIFIED BY '$4' WITH GRANT OPTION;" Q1="GRANT ALL PRIVILEGES ON *.* TO '$3'@'localhost' IDENTIFIED BY '$4' WITH GRANT OPTION;" @@ -1082,8 +1084,8 @@ create_hss_database(){ else echo_success "$3 permissions succeeded" fi - - + + Q1="CREATE DATABASE IF NOT EXISTS ${BTICK}$5${BTICK};" SQL="${Q1}" $MYSQL -u $3 --password=$4 -e "$SQL" @@ -1093,12 +1095,12 @@ create_hss_database(){ else echo_success "$5 creation succeeded" fi - - + + # test if tables have been created mysql -u $3 --password=$4 -e "desc $5.users" > /dev/null 2>&1 - - if [ $? -eq 1 ]; then + + if [ $? -eq 1 ]; then $MYSQL -u $3 --password=$4 $5 < $OPENAIR3_DIR/OPENAIRHSS/db/oai_db.sql if [ $? -ne 0 ]; then echo_error "$5 tables creation failed" @@ -1107,7 +1109,7 @@ create_hss_database(){ echo_success "$5 tables creation succeeded" fi fi - + return 0 } @@ -1176,7 +1178,7 @@ print_help_perf(){ } ############################### -## echo and family +## echo and family ############################### black='\E[30m' red='\E[31m' @@ -1196,10 +1198,10 @@ cecho() # Color-echo local default_msg="No Message." message=${1:-$default_msg} color=${2:-$green} - if [ $BUILD_FROM_MAKEFILE = 0 ]; then + if [ $BUILD_FROM_MAKEFILE = 0 ]; then echo -e -n "$color$message$reset_color" echo - else + else echo "$message" fi return @@ -1304,7 +1306,7 @@ assert() { if [ -z "$2" ] ; then # Not enought parameters passed. return $E_PARAM_ERR fi - + lineno=$2 if [ ! $1 ]; then echo_error "Assertion failed: \"$1\"" From 5798b177371dac5c914adf4579fb67003dfa200a Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 30 Jul 2018 15:12:26 +0200 Subject: [PATCH 019/128] Dummy push to trigger CI again Signed-off-by: Raphael Defosseux --- openair1/PHY/TOOLS/lte_dfts.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index ecf57cd2e3..01c20dbce6 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -49,10 +49,8 @@ int oai_exit=0; #include "PHY/sse_intrin.h" - #include "assertions.h" - #define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7]) #define print_shorts256(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7],(x)[8],(x)[9],(x)[10],(x)[11],(x)[12],(x)[13],(x)[14],(x)[15]) From c3e4f686099bd15feafea2e724a78652b84c8c0a Mon Sep 17 00:00:00 2001 From: Elena Lukashova Date: Tue, 31 Jul 2018 11:59:18 +0200 Subject: [PATCH 020/128] 1.Adding PHY_MEX to the list of the libraries to be compiled with T_tracer, otherwise T_IDs.h was not generated. 2.Adding extra files to the PHY_MEX library. --- cmake_targets/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index f59792894e..c66595666c 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1215,6 +1215,11 @@ set(PHY_MEX_UE ${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c ${OPENAIR2_DIR}/UTIL/LOG/log.c + ${OPENAIR_DIR}/common/utils/T/T.c + ${OPENAIR_DIR}/common/utils/T/local_tracer.c + ${OPENAIR_DIR}/common/config/config_cmdline.c + ${OPENAIR_DIR}/common/config/config_userapi.c + ${OPENAIR_DIR}/common/config/config_load_configmodule.c ) add_library(PHY_MEX ${PHY_MEX_UE}) @@ -2182,7 +2187,7 @@ if (${T_TRACER}) oai_eth_transpro FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO SECU_OSA SECU_CN SCHED_LIB PHY L2 default_sched remote_sched RAL CN_UTILS - GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU OPENAIR0_LIB) + GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU OPENAIR0_LIB PHY_MEX) if (TARGET ${i}) add_dependencies(${i} generate_T) endif() From 621b73938d35c077aa0f77324d2dcae082529c6f Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 31 Jul 2018 14:41:19 +0200 Subject: [PATCH 021/128] CI: hotfix for stability -- stdbuf -o0 seems to be causing segmentation fault -- using daemon instead of nohup -- also repeating several time "got sync" message and flushing stdout/stderr Signed-off-by: Raphael Defosseux --- ci-scripts/main.py | 8 ++++++-- targets/RT/USER/lte-softmodem.c | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 861e6f3e4e..bf85d08adc 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -253,8 +253,9 @@ class SSHConnection(): # Launch eNB with the modified config file self.command('source oaienv', '\$', 5) self.command('cd cmake_targets', '\$', 5) - # Replacing with a nohup and a direct redirection of stdout to a file - self.command('echo ' + self.eNBPassword + ' | nohup sudo -S -E stdbuf -o0 ./lte_build_oai/build/lte-softmodem -O ' + self.eNBSourceCodePath + '/' + ci_full_config_file + ' > enb_' + SSH.testCase_id + '.log 2>&1 &', '\$', 5) + self.command('echo "./lte_build_oai/build/lte-softmodem -O ' + self.eNBSourceCodePath + '/' + ci_full_config_file + '" > ./my-lte-softmodem-run.sh ', '\$', 5) + self.command('chmod 775 ./my-lte-softmodem-run.sh ', '\$', 5) + self.command('echo ' + self.eNBPassword + ' | sudo -S -E daemon --inherit --unsafe --name=enb_daemon --chdir=' + self.eNBSourceCodePath + '/cmake_targets -o ' + self.eNBSourceCodePath + '/cmake_targets/enb_' + SSH.testCase_id + '.log ./my-lte-softmodem-run.sh', '\$', 5) time.sleep(6) doLoop = True loopCounter = 10 @@ -733,6 +734,9 @@ class SSHConnection(): def TerminateeNB(self): self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) + self.command('cd ' + self.eNBSourceCodePath + '/cmake_targets', '\$', 5) + self.command('echo ' + self.eNBPassword + ' | sudo -S daemon --name=enb_daemon --stop', '\$', 5) + self.command('rm -f my-lte-softmodem-run.sh', '\$', 5) self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGINT lte-softmodem || true', '\$', 5) time.sleep(5) self.command('stdbuf -o0 ps -aux | grep -v grep | grep lte-softmodem', '\$', 5) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 27c4a1f448..a349ec8134 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -913,7 +913,16 @@ static void wait_nfapi_init(char *thread_name) { pthread_mutex_unlock(&nfapi_sync_mutex); + /* + * Raphael Defosseux: temporary workaround for CI + * -- Repeating the message thrice to make sure + * -- it is present during flush. + */ printf( "NFAPI: got sync (%s)\n", thread_name); + printf( "NFAPI: got sync (%s)\n", thread_name); + printf( "NFAPI: got sync (%s)\n", thread_name); + fflush(stdout); + fflush(stderr); } int main( int argc, char **argv ) From 71978e71e39b4999a427dd73bc3f883663659b41 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 31 Jul 2018 16:30:16 +0200 Subject: [PATCH 022/128] CI: hotfix -- no waiting for got sync Signed-off-by: Raphael Defosseux --- ci-scripts/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index bf85d08adc..5d9cee772d 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -263,8 +263,9 @@ class SSHConnection(): loopCounter = loopCounter - 1 if (loopCounter == 0): doLoop = False - logging.debug('\u001B[1;37;41m Starting eNB Failed -- taking too much time \u001B[0m') - sys.exit(1) + logging.debug('\u001B[1;37;43m eNB logging system did not show got sync! See with attach later \u001B[0m') + # Not getting got sync is bypassed for the moment + #sys.exit(1) self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log', '\$', 10) result = re.search('got sync', str(self.ssh.before)) if result is None: From eec9f293b1ba4662f26dbe672b96d6b297d31333 Mon Sep 17 00:00:00 2001 From: Elena Lukashova Date: Tue, 31 Jul 2018 22:42:42 +0200 Subject: [PATCH 023/128] Making channel and data arrays dimensions in compensation function more flexible to support 4x4 system. --- .../PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index a414c85c16..8e3873eb82 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -1315,13 +1315,12 @@ void dlsch_channel_compensation(int **rxdataF_ext, for (aarx=0; aarxnb_antennas_rx; aarx++) { - dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; //print_shorts("dl_ch128[0]=",&dl_ch128[0]);*/ - dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12]; - + rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; for (rb=0; rb2) { @@ -1772,11 +1771,11 @@ void dlsch_channel_compensation_core(int **rxdataF_ext, for (aarx=0; aarx Date: Tue, 31 Jul 2018 22:45:14 +0200 Subject: [PATCH 024/128] Removing printout in a median function. --- openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index 8e3873eb82..6f867de9df 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -3979,11 +3979,6 @@ void dlsch_channel_level_median(int **dl_ch_estimates_ext, ((int32_t*)&norm128D)[2] + ((int32_t*)&norm128D)[3]; - if (ii<1){ - print_ints("norm128D",&norm128D[0]); - printf("norm_pack[%d] %d\n", aatx*n_rx + aarx, norm_pack); - } - if (norm_pack > max) max = norm_pack; if (norm_pack < min) From 75711a8b77b9f8ba350563d758f15772fd6d1bd5 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 1 Aug 2018 11:16:38 +0200 Subject: [PATCH 025/128] CI: hotfixes -- log collection on enb log requires a sudo when removing log files -- added iperf log collection to jenkins file -- corrected iperf detection of packet loss ( added jitter also) -- increased iperf DL requested BW for 10 MHz Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-tmp-ran | 18 ++++++++++++++++++ ci-scripts/main.py | 21 +++++++++++++++++---- ci-scripts/xml_files/enb_usrp210_band7.xml | 12 ++++++------ 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index b03ec4f433..796271a8d4 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -387,6 +387,24 @@ pipeline { } } } + stage('Log Collection (Iperf)') { + steps { + withCredentials([ + [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'] + ]) { + echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m' + sh "python3 ci-scripts/main.py --mode=LogCollectIperf --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}" + + echo '\u2705 \u001B[32mLog Transfer (Iperf)\u001B[0m' + sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/iperf.log.zip ./iperf.log.${env.BUILD_ID}.zip || true" + } + script { + if(fileExists("iperf.log.${env.BUILD_ID}.zip")) { + archiveArtifacts "iperf.log.${env.BUILD_ID}.zip" + } + } + } + } } } } diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 5d9cee772d..656b1d11a7 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -527,6 +527,9 @@ class SSHConnection(): try: useIperf3 = False self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) + # if by chance ADB server and EPC are on the same remote host, at least log collection will take of it + self.command('if [ ! -d ' + self.EPCSourceCodePath + '/scripts ]; then mkdir -p ' + self.EPCSourceCodePath + '/scripts ; fi', '\$', 5) + self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5) # Checking if iperf / iperf3 are installed self.command('adb -s ' + device_id + ' shell "ls /data/local/tmp"', '\$', 5) result = re.search('iperf3', str(self.ssh.before)) @@ -541,7 +544,7 @@ class SSHConnection(): self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/iperf3 -s &', '\$', 5) else: self.command('rm -f /tmp/iperf_server_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) - self.command('echo $USER; nohup adb -s ' + device_id + ' shell "/data/local/tmp/iperf -u -s -i 1" > /tmp/iperf_server_' + SSH.testCase_id + '_' + device_id + '.log &', self.ADBUserName, 5) + self.command('echo $USER; nohup adb -s ' + device_id + ' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_' + SSH.testCase_id + '_' + device_id + '.log &', self.ADBUserName, 5) time.sleep(0.5) self.close() @@ -605,10 +608,11 @@ class SSHConnection(): else: logging.debug('\u001B[1;37;41m Server Report and Connection refused Not Found! \u001B[0m') sys.exit(1) - result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P[0-9\.]+)%\))', str(self.ssh.before)) + result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(\d+\/.\d+) (\((?P[0-9\.]+)%\))', str(self.ssh.before)) if result is not None: bitrate = result.group('bitrate') packetloss = result.group('packetloss') + jitter = result.group('jitter') lock.acquire() logging.debug('\u001B[1;37;44m iperf result (' + UE_IPAddress + ') \u001B[0m') if bitrate is not None: @@ -619,6 +623,8 @@ class SSHConnection(): logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m') lock.release() sys.exit(1) + if jitter is not None: + logging.debug('\u001B[1;34m Jitter : ' + jitter + '\u001B[0m') lock.release() self.close() @@ -826,22 +832,25 @@ class SSHConnection(): self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) self.command('cd ' + self.eNBSourceCodePath, '\$', 5) self.command('cd cmake_targets', '\$', 5) + self.command('rm -f build.log.zip', '\$', 5) self.command('zip build.log.zip build_log_*/*', '\$', 60) - self.command('rm -rf build_log_*', '\$', 5) + self.command('echo ' + self.eNBPassword + ' | sudo -S rm -rf build_log_*', '\$', 5) self.close() def LogCollecteNB(self): self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) self.command('cd ' + self.eNBSourceCodePath, '\$', 5) self.command('cd cmake_targets', '\$', 5) + self.command('rm -f enb.log.zip', '\$', 5) self.command('zip enb.log.zip enb*.log', '\$', 60) - self.command('rm enb*.log', '\$', 5) + self.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log', '\$', 5) self.close() def LogCollectPing(self): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('cd ' + self.EPCSourceCodePath, '\$', 5) self.command('cd scripts', '\$', 5) + self.command('rm -f ping.log.zip', '\$', 5) self.command('zip ping.log.zip ping*.log', '\$', 60) self.command('rm ping*.log', '\$', 5) self.close() @@ -850,6 +859,7 @@ class SSHConnection(): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('cd ' + self.EPCSourceCodePath, '\$', 5) self.command('cd scripts', '\$', 5) + self.command('rm -f iperf.log.zip', '\$', 5) self.command('zip iperf.log.zip iperf*.log', '\$', 60) self.command('rm iperf*.log', '\$', 5) self.close() @@ -858,6 +868,7 @@ class SSHConnection(): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('cd ' + self.EPCSourceCodePath, '\$', 5) self.command('cd scripts', '\$', 5) + self.command('rm -f hss.log.zip', '\$', 5) if re.match('OAI', self.EPCType, re.IGNORECASE): self.command('zip hss.log.zip hss*.log', '\$', 60) self.command('rm hss*.log', '\$', 5) @@ -870,6 +881,7 @@ class SSHConnection(): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('cd ' + self.EPCSourceCodePath, '\$', 5) self.command('cd scripts', '\$', 5) + self.command('rm -f mme.log.zip', '\$', 5) if re.match('OAI', self.EPCType, re.IGNORECASE): self.command('zip mme.log.zip mme*.log', '\$', 60) self.command('rm mme*.log', '\$', 5) @@ -882,6 +894,7 @@ class SSHConnection(): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('cd ' + self.EPCSourceCodePath, '\$', 5) self.command('cd scripts', '\$', 5) + self.command('rm -f spgw.log.zip', '\$', 5) if re.match('OAI', self.EPCType, re.IGNORECASE): self.command('zip spgw.log.zip spgw*.log', '\$', 60) self.command('rm spgw*.log', '\$', 5) diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 5b15d546f3..4bea6d50e5 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -104,22 +104,22 @@ Iperf - iperf (10MHz - DL/6Mbps/UDP)(60 sec) - -u -b 6M -t 60 -i 1 + iperf (10MHz - DL/10Mbps/UDP)(60 sec) + -u -b 10M -t 60 -i 1 50 Iperf - iperf (10MHz - DL/13Mbps/UDP)(60 sec) - -u -b 13M -t 60 -i 1 + iperf (10MHz - DL/20Mbps/UDP)(60 sec) + -u -b 20M -t 60 -i 1 50 Iperf - iperf (10MHz - DL/15Mbps/UDP)(60 sec) - -u -b 15M -t 60 -i 1 + iperf (10MHz - DL/30Mbps/UDP)(60 sec) + -u -b 30M -t 60 -i 1 50 From 86c199e3f7ebbe135ab678281300ea48c205b85e Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 1 Aug 2018 14:36:46 +0200 Subject: [PATCH 026/128] CI: Adding a build stage on CentOS (only one variant : -w USRP --eNB) Should not trigger a fail for the moment Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 44 +++++++ ci-scripts/buildOnRH.sh | 209 +++++++++++++++++++++++++++++++ ci-scripts/reportBuildLocally.sh | 17 ++- 3 files changed, 269 insertions(+), 1 deletion(-) create mode 100755 ci-scripts/buildOnRH.sh diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index 00f45355dc..2b777f1505 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -30,6 +30,8 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) { } } +def doRedHatBuild = false + pipeline { agent { label 'bellatrix' @@ -42,6 +44,30 @@ pipeline { } stages { + stage ("Verify Parameters") { + steps { + script { + echo '\u2705 \u001B[32mVerify Parameters\u001B[0m' + def allParametersPresent = true + + if (params.RedHatRemoteServer == null) { + allParametersPresent = false + } + if (params.RedHatRemoteCredentials == null) { + allParametersPresent = false + } + if (params.RedHatWorkingPath == null) { + allParametersPresent = false + } + if (allParametersPresent) { + echo "Performing Red Hat Build" + doRedHatBuild = true + } else { + doRedHatBuild = false + } + } + } + } stage ("Verify Guidelines") { steps { echo "Git URL is ${GIT_URL}" @@ -165,6 +191,24 @@ pipeline { } } } + stage ("Build eNb-USRP on Red Hat") { + when { + expression {doRedHatBuild} + } + steps { + script { + try { + withCredentials([ + [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.RedHatRemoteCredentials}", usernameVariable: 'RH_Username', passwordVariable: 'RH_Password'] + ]) { + sh "./ci-scripts/buildOnRH.sh --workspace $WORKSPACE --job-name ${JOB_NAME} --build-id ${BUILD_ID} --remote-host ${params.RedHatRemoteServer} --remote-path ${params.RedHatWorkingPath} --remote-user-name ${RH_Username} --remote-password ${RH_Password}" + } + } catch (Exception e) { + echo "Red Hat build failed not an error now" + } + } + } + } } post { always { diff --git a/ci-scripts/buildOnRH.sh b/ci-scripts/buildOnRH.sh new file mode 100755 index 0000000000..ce5b24dc49 --- /dev/null +++ b/ci-scripts/buildOnRH.sh @@ -0,0 +1,209 @@ +#!/bin/bash +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ + +function usage { + echo "OAI RedHat Build Check script" + echo " Original Author: Raphael Defosseux" + + echo "" + echo "Usage:" + echo "------" + echo " buildOnRH.sh [OPTIONS]" + echo "" + echo "Options:" + echo "--------" + echo " --job-name #### OR -jn ####" + echo " Specify the name of the Jenkins job." + echo "" + echo " --build-id #### OR -id ####" + echo " Specify the build ID of the Jenkins job." + echo "" + echo " --workspace #### OR -ws ####" + echo " Specify the workspace." + echo "" + echo " --remote-host #### OR -rh ####" + echo " Specify the RedHat remote server." + echo "" + echo " --remote-user-name #### OR -ru ####" + echo " Specify the RedHat remote server username." + echo "" + echo " --remote-password #### OR -rp ####" + echo " Specify the RedHat remote server password." + echo "" + echo " --remote-path #### OR -ra ####" + echo " Specify the RedHat remote server path to work on." + echo "" +} + +if [ $# -lt 1 ] || [ $# -gt 14 ] +then + echo "Syntax Error: not the correct number of arguments" + echo "" + usage + exit 1 +fi + +RH_HOST=XX +RH_USER=XX +RH_PASSWD=XX +RH_PATH=XX +JOB_NAME=XX +BUILD_ID=XX + +while [[ $# -gt 0 ]] +do +key="$1" + +case $key in + -h|--help) + shift + usage + exit 0 + ;; + -jn|--job-name) + JOB_NAME="$2" + shift + shift + ;; + -id|--build-id) + BUILD_ID="$2" + shift + shift + ;; + -ws|--workspace) + JENKINS_WKSP="$2" + shift + shift + ;; + -rh|--remote-host) + RH_HOST="$2" + shift + shift + ;; + -ru|--remote-user-name) + RH_USER="$2" + shift + shift + ;; + -rp|--remote-password) + RH_PASSWD="$2" + shift + shift + ;; + -ra|--remote-path) + RH_PATH="$2" + shift + shift + ;; + *) + echo "Syntax Error: unknown option: $key" + echo "" + usage + exit 1 +esac +done + +if [ ! -f $JENKINS_WKSP/localZip.zip ] +then + echo "Missing localZip.zip file!" + exit 1 +fi + +if [ "$JOB_NAME" == "XX" ] || [ "$BUILD_ID" == "XX" ] || [ "$RH_HOST" == "XX" ] || [ "$RH_USER" == "XX" ] || [ "$RH_PASSWD" == "XX" ] || [ "$RH_PATH" == "XX" ] +then + echo "Missing options" + usage + exit 1 +fi + +echo "############################################################" +echo "Copying GIT repo into RedHat Server" +echo "############################################################" +echo "rm -Rf ${RH_PATH}" >> rh-cmd.txt +echo "mkdir -p ${RH_PATH}" >> rh-cmd.txt + +sshpass -p ${RH_PASSWD} ssh -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST} < rh-cmd.txt +rm -f rh-cmd.txt + +echo "############################################################" +echo "Running install and build script on RedHat Server" +echo "############################################################" +sshpass -p ${RH_PASSWD} scp -o 'StrictHostKeyChecking no' $JENKINS_WKSP/localZip.zip ${RH_USER}@${RH_HOST}:${RH_PATH} + +echo "cd ${RH_PATH}" > rh-cmd.txt +echo "unzip -qq localZip.zip" >> rh-cmd.txt +echo "source oaienv" >> rh-cmd.txt +echo "cd cmake_targets" >> rh-cmd.txt +echo "mkdir -p log" >> rh-cmd.txt +echo "./build_oai -I -w USRP --eNB > log/install-build.txt 2>&1" >> rh-cmd.txt +sshpass -p ${RH_PASSWD} ssh -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST} < rh-cmd.txt + +rm -f rh-cmd.txt + +echo "############################################################" +echo "Creating a tmp folder to store results and artifacts" +echo "############################################################" +if [ ! -d $JENKINS_WKSP/archives ] +then + mkdir -p $JENKINS_WKSP/archives +fi + +ARCHIVES_LOC=$JENKINS_WKSP/archives/red_hat +if [ ! -d $ARCHIVES_LOC ] +then + mkdir -p $ARCHIVES_LOC +fi + +sshpass -p ${RH_PASSWD} scp -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST}:${RH_PATH}/cmake_targets/log/*.txt $ARCHIVES_LOC + +echo "############################################################" +echo "Checking build status" +echo "############################################################" + +LOG_PATTERN=.Rel14.txt +NB_PATTERN_FILES=4 + +LOG_FILES=`ls $ARCHIVES_LOC/*.txt` +STATUS=0 +NB_FOUND_FILES=0 + +for FULLFILE in $LOG_FILES +do + if [[ $FULLFILE == *"$LOG_PATTERN"* ]] + then + filename=$(basename -- "$FULLFILE") + PASS_PATTERN=`echo $filename | sed -e "s#$LOG_PATTERN##"` + LOCAL_STAT=`egrep -c "Built target $PASS_PATTERN" $FULLFILE` + if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi + NB_FOUND_FILES=$((NB_FOUND_FILES + 1)) + fi +done + +if [ $NB_PATTERN_FILES -ne $NB_FOUND_FILES ]; then STATUS=-1; fi + +if [ $STATUS -eq 0 ] +then + echo "STATUS seems OK" +else + echo "STATUS failed?" +fi +exit $STATUS diff --git a/ci-scripts/reportBuildLocally.sh b/ci-scripts/reportBuildLocally.sh index f8a48d9c17..80b8154018 100755 --- a/ci-scripts/reportBuildLocally.sh +++ b/ci-scripts/reportBuildLocally.sh @@ -498,6 +498,8 @@ then echo " " >> ./build_results.html fi +echo "

Ubuntu 16.04 LTS -- Summary

" >> ./build_results.html + sca_summary_table_header "OAI Static Code Analysis with CPPCHECK" sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Uninitialized variable" uninitvar sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Uninitialized struct member" uninitStructMember @@ -547,6 +549,15 @@ summary_table_row "RB Tools - Release 14" ./archives/ue_eth/rb_tool.Rel14.txt "B summary_table_row "NAS Mesh - Release 14" ./archives/ue_eth/nasmesh.Rel14.txt "Built target nasmesh" ./ue_eth_row6.html summary_table_footer +echo "

Red Hat (CentOS Linux release 7.4.1708) -- Summary

" >> ./build_results.html + +summary_table_header "Red Hat -- OAI Build eNB -- USRP option" +summary_table_row "LTE SoftModem - Release 14" ./archives/red_hat/lte-softmodem.Rel14.txt "Built target lte-softmodem" ./enb_usrp_rh_row1.html +summary_table_row "Coding - Release 14" ./archives/red_hat/coding.Rel14.txt "Built target coding" ./enb_usrp_rh_row2.html +summary_table_row "OAI USRP device if - Release 14" ./archives/red_hat/oai_usrpdevif.Rel14.txt "Built target oai_usrpdevif" ./enb_usrp_rh_row3.html +summary_table_row "Parameters Lib Config - Release 14" ./archives/red_hat/params_libconfig.Rel14.txt "Built target params_libconfig" ./enb_usrp_rh_row4.html +summary_table_footer + echo "

Details

" >> ./build_results.html for DETAILS_TABLE in `ls ./enb_usrp_row*.html` @@ -569,7 +580,11 @@ for DETAILS_TABLE in `ls ./ue_eth_row*.html` do cat $DETAILS_TABLE >> ./build_results.html done -rm -f ./enb_usrp_row*.html ./basic_sim_row*.html ./phy_sim_row*.html ./enb_eth_row*.html ./ue_eth_row*.html +for DETAILS_TABLE in `ls ./enb_usrp_rh_row*.html` +do + cat $DETAILS_TABLE >> ./build_results.html +done +rm -f ./enb_usrp_row*.html ./basic_sim_row*.html ./phy_sim_row*.html ./enb_eth_row*.html ./ue_eth_row*.html ./enb_usrp_rh_row*.html echo "" >> ./build_results.html echo "" >> ./build_results.html From 9e8ad4923b311432d50aab2998538fd65b70a6f3 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Wed, 1 Aug 2018 16:36:35 +0200 Subject: [PATCH 027/128] fix install on centOS - install package 'vim-common' to have 'xxd' needed by the compilation process of the T tracer - change the way xxd is called so that no file is created in case of error --- cmake_targets/tools/build_helper | 2 +- common/utils/T/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 4b0ea9cc6b..5ddce2340b 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -597,7 +597,7 @@ check_install_oai_software() { echo "EPEL repos not present. Installing them." $SUDO $INSTALLER install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm fi - $SUDO $INSTALLER install -y python-epdb + $SUDO $INSTALLER install -y python-epdb vim-common else $SUDO $INSTALLER install -y mscgen pydb fi diff --git a/common/utils/T/Makefile b/common/utils/T/Makefile index dcb0d12fab..5e1785ea91 100644 --- a/common/utils/T/Makefile +++ b/common/utils/T/Makefile @@ -13,7 +13,7 @@ $(GENIDS): $(GENIDS_OBJS) $(CC) $(CFLAGS) -c -o $@ $< T_messages.txt.h: T_messages.txt - xxd -i T_messages.txt > T_messages.txt.h + xxd -i T_messages.txt T_messages.txt.h T_IDs.h: $(GENIDS) T_messages.txt ./$(GENIDS) T_messages.txt T_IDs.h From d1dd00b08ead7cc0e84bda2cdff1720fd6289f08 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 1 Aug 2018 17:22:06 +0200 Subject: [PATCH 028/128] CI: -- Adding script to notify developer when introducing compilation warnings -- Fix on the CentOS log archiving / reporting Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 12 ++- ci-scripts/checkAddedWarnings.sh | 144 +++++++++++++++++++++++++++++++ ci-scripts/reportBuildLocally.sh | 2 +- 3 files changed, 156 insertions(+), 2 deletions(-) create mode 100755 ci-scripts/checkAddedWarnings.sh diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index 2b777f1505..a57e426902 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -41,6 +41,7 @@ pipeline { timestamps() gitLabConnection('OAI GitLab') gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim"]) + ansiColor('xterm') } stages { @@ -214,13 +215,22 @@ pipeline { always { script { dir ('archives') { - sh "zip -r -qq vm_build_logs.zip basic_sim enb_usrp phy_sim cppcheck enb_eth ue_eth" + sh "zip -r -qq vm_build_logs.zip basic_sim enb_usrp phy_sim cppcheck enb_eth ue_eth red_hat" } if(fileExists('archives/vm_build_logs.zip')) { archiveArtifacts artifacts: 'archives/vm_build_logs.zip' } if ("MERGE".equals(env.gitlabActionType)) { sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}" + sh "./ci-scripts/checkAddedWarnings.sh --src-branch ${env.gitlabSourceBranch} --target-branch ${env.gitlabTargetBranch}" + def res=readFile('./oai_warning_files.txt').trim(); + if ("0".equals(res)) { + echo "No issues w/ warnings/errors in this merge request" + } else { + def fileList=eadFile('./oai_warning_files_list.txt').trim(); + def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Some modified files in Merge Request MAY have INTRODUCED WARNINGS (" + fileList + ")" + addGitLabMRComment comment: message + } } else { sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}" } diff --git a/ci-scripts/checkAddedWarnings.sh b/ci-scripts/checkAddedWarnings.sh new file mode 100755 index 0000000000..609261becf --- /dev/null +++ b/ci-scripts/checkAddedWarnings.sh @@ -0,0 +1,144 @@ +#!/bin/bash +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ + +function usage { + echo "OAI Warning Check script" + echo " Original Author: Raphael Defosseux" + echo "" + echo "Usage:" + echo "------" + echo " checkAddedWarnings.sh [OPTIONS]" + echo "" + echo "Options:" + echo "--------" + echo " --src-branch #### OR -sb ####" + echo " Specify the source branch of the merge request." + echo "" + echo " --target-branch #### OR -tb ####" + echo " Specify the target branch of the merge request (usually develop)." + echo "" + echo " --help OR -h" + echo " Print this help message." + echo "" +} + +if [ $# -ne 4 ] && [ $# -ne 1 ] +then + echo "Syntax Error: not the correct number of arguments" + echo "" + usage + exit 1 +fi + +checker=0 +while [[ $# -gt 0 ]] +do +key="$1" + +case $key in + -h|--help) + shift + usage + exit 0 + ;; + -sb|--src-branch) + SOURCE_BRANCH="$2" + let "checker|=0x1" + shift + shift + ;; + -tb|--target-branch) + TARGET_BRANCH="$2" + let "checker|=0x2" + shift + shift + ;; + *) + echo "Syntax Error: unknown option: $key" + echo "" + usage + exit 1 +esac + +done + + +if [ $checker -ne 3 ] +then + echo "Source Branch is : $SOURCE_BRANCH" + echo "Target Branch is : $TARGET_BRANCH" + echo "" + echo "Syntax Error: missing option" + echo "" + usage + exit 1 +fi + +# Merge request scenario + +MERGE_COMMMIT=`git log -n1 | grep commit | sed -e "s@commit @@"` +TARGET_INIT_COMMIT=`cat .git/refs/remotes/origin/$TARGET_BRANCH` + +echo " ---- Checking the modified files by the merge request ----" +echo "" +echo "Source Branch is : $SOURCE_BRANCH" +echo "Target Branch is : $TARGET_BRANCH" +echo "Merged Commit is : $MERGE_COMMMIT" +echo "Target Init is : $TARGET_INIT_COMMIT" + +# Retrieve the list of modified files since the latest develop commit +MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | egrep "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq` +NB_WARNINGS_FILES=0 + +# Retrieve list of warnings +LIST_WARNING_FILES=`egrep "error:|warning:" archives/*/*.Rel14.txt archives/*/basic_simulator_*txt | egrep -v "jobserver unavailable|Clock skew detected.|flexran.proto" | sed -e "s#^.*/home/ubuntu/tmp/##" -e "s#^.*/tmp/CI-eNB/##" -e "s#common/utils/.*/itti#common/utils/itti#" | awk -F ":" '{print $1}' | sort | uniq` + +echo "" +echo "List of files that have been modified by the Merge Request AND" +echo " that have compilation warnings/errors" +echo "--------------------------------------------------------------------" +declare -a ARRAYNAME + +for FULLFILE in $MODIFIED_FILES +do + filename=$(basename -- "$FULLFILE") + EXT="${filename##*.}" + if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ] + then + for WARNING_FILE in $LIST_WARNING_FILES + do + if [ $FULLFILE = $WARNING_FILE ] + then + echo $WARNING_FILE + ARRAYNAME[$NB_WARNINGS_FILES]=$WARNING_FILE + NB_WARNINGS_FILES=$((NB_WARNINGS_FILES + 1)) + fi + done + fi +done + +echo "" +echo "NB Files impacted by warnings/errors in Merge Request: $NB_WARNINGS_FILES" +echo $NB_WARNINGS_FILES > oai_warning_files.txt +echo ${ARRAYNAME[*]} > oai_warning_files_list.txt + +exit 0 diff --git a/ci-scripts/reportBuildLocally.sh b/ci-scripts/reportBuildLocally.sh index 80b8154018..609af5f166 100755 --- a/ci-scripts/reportBuildLocally.sh +++ b/ci-scripts/reportBuildLocally.sh @@ -105,7 +105,7 @@ function details_table { do if [[ $MESSAGE == *"/home/ubuntu/tmp"* ]] then - FILENAME=`echo $MESSAGE | sed -e "s#^/home/ubuntu/tmp/##" | awk -F ":" '{print $1}'` + FILENAME=`echo $MESSAGE | sed -e "s#^/home/ubuntu/tmp/##" -e "s#^.*/tmp/CI-eNB/##" | awk -F ":" '{print $1}'` LINENB=`echo $MESSAGE | awk -F ":" '{print $2}'` if [ "$COMPLETE_MESSAGE" != "start" ] then From 5bc579f05c729b66282572f3bc9eb5d6b1e24386 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 2 Aug 2018 09:17:29 +0200 Subject: [PATCH 029/128] CI: hotfix in Jenkins pipeline script Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index a57e426902..ded95eff03 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -227,7 +227,7 @@ pipeline { if ("0".equals(res)) { echo "No issues w/ warnings/errors in this merge request" } else { - def fileList=eadFile('./oai_warning_files_list.txt').trim(); + def fileList=readFile('./oai_warning_files_list.txt').trim(); def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Some modified files in Merge Request MAY have INTRODUCED WARNINGS (" + fileList + ")" addGitLabMRComment comment: message } From 434a0a7d8164e069bd3ffa2b05b29800ea460786 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 2 Aug 2018 10:28:45 +0200 Subject: [PATCH 030/128] CI: adding merge request allow flag: -- if false no forced merge to develop -- if true and if branch is not develop, then forced merge to develop Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-tmp-ran | 10 ++++++++-- ci-scripts/main.py | 11 +++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index 796271a8d4..83002f82d4 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -44,9 +44,12 @@ termStatusArray[termSPGW] = false termStatusArray[termMME] = false termStatusArray[termHSS] = false +// Global Parameters. Normally they should be populated when the master job +// triggers the slave job with parameters def eNB_Repository def eNB_Branch def eNB_CommitID +def eNB_AllowMergeRequestProcess = false pipeline { agent { @@ -118,7 +121,7 @@ pipeline { if (params.eNB_Credentials == null) { allParametersPresent = false } - // the following 3 parameters should be pushed by the master trigger + // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { eNB_Repository = env.GIT_URL @@ -138,6 +141,9 @@ pipeline { eNB_CommitID = params.eNB_CommitID } echo "eNB_CommitID : ${eNB_CommitID}" + if (params.eNB_mergeRequest != null) { + eNB_AllowMergeRequestProcess = params.eNB_mergeRequest + } if (params.EPC_IPAddress == null) { allParametersPresent = false @@ -179,7 +185,7 @@ pipeline { [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'], [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password'] ]) { - sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}" + sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}" } } catch (Exception e) { currentBuild.result = 'FAILURE' diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 656b1d11a7..b12786fb68 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -59,6 +59,7 @@ class SSHConnection(): self.eNBIPAddress = '' self.eNBRepository = '' self.eNBBranch = '' + self.eNB_AllowMerge = False self.eNBCommitID = '' self.eNBUserName = '' self.eNBPassword = '' @@ -165,8 +166,9 @@ class SSHConnection(): self.command('git checkout -f ' + self.eNBCommitID, '\$', 5) # if the branch is not develop, then it is a merge request and we need to do # the potential merge. Note that merge conflicts should already been checked earlier - if (self.eNBBranch != 'develop') and (self.eNBBranch != 'origin/develop'): - self.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5) + if (self.eNB_AllowMerge): + if (self.eNBBranch != 'develop') and (self.eNBBranch != 'origin/develop'): + self.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5) self.command('source oaienv', '\$', 5) self.command('cd cmake_targets', '\$', 5) self.command('mkdir -p log', '\$', 5) @@ -998,6 +1000,11 @@ while len(argvs) > 1: elif re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE) SSH.eNBRepository = matchReg.group(1) + elif re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE): + matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE) + doMerge = matchReg.group(1) + if ((doMerge == 'true') or (doMerge == 'True')): + SSH.eNB_AllowMerge = True elif re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE) SSH.eNBBranch = matchReg.group(1) From ceaac8dffb8c7ea451e35cdcdd79ce0aa75610d8 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 2 Aug 2018 13:52:57 +0200 Subject: [PATCH 031/128] CI: lower ru gains Signed-off-by: Raphael Defosseux --- ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf | 2 +- ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf | 2 +- ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf index 2feb577f68..2bd28a60df 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf index 38df1a28e5..102fc89a13 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } diff --git a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf index 213f2bbcd3..fe6e2f0b59 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } From 2ac9b4ff96657daf18e4e9efa721a8d4ff7cb32e Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 2 Aug 2018 16:28:27 +0200 Subject: [PATCH 032/128] CI: adding on-the-fly HTML summary within python Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-tmp-ran | 5 ++ ci-scripts/main.py | 133 +++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index 83002f82d4..93192dd8be 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -186,6 +186,11 @@ pipeline { [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password'] ]) { sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}" + if(fileExists("test_results.html")) { + sh "mv test_results.html test_results-${JOB_NAME}.html" + sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html" + archiveArtifacts "test_results-${JOB_NAME}.html" + } } } catch (Exception e) { currentBuild.result = 'FAILURE' diff --git a/ci-scripts/main.py b/ci-scripts/main.py index b12786fb68..85e27acb69 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -83,6 +83,10 @@ class SSHConnection(): self.iperf_packetloss_threshold = '' self.UEDevices = [] self.UEIPAddresses = [] + self.htmlFile = '' + self.htmlHeaderCreated = False + self.htmlFooterCreated = False + self.htmlUEConnected = 0 def open(self, ipaddress, username, password): self.ssh = pexpect.spawn('ssh', [username + '@' + ipaddress], timeout = 5) @@ -178,6 +182,7 @@ class SSHConnection(): self.command('echo ' + self.eNBPassword + ' | sudo -S mv log/* ' + 'build_log_' + SSH.testCase_id, '\$', 5) self.command('echo ' + self.eNBPassword + ' | sudo -S mv compile_oai_enb.log ' + 'build_log_' + SSH.testCase_id, '\$', 5) self.close() + self.CreateHtmlTestRow(self.Build_eNB_args, 'OK', 0) def InitializeHSS(self): if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '': @@ -198,6 +203,7 @@ class SSHConnection(): self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f hss.log daemon.log', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S echo "Starting sudo session" && sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real ', '\$', 5) self.close() + self.CreateHtmlTestRow(self.EPCType, 'OK', 0) def InitializeMME(self): if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '': @@ -219,6 +225,7 @@ class SSHConnection(): self.command('cd /opt/ltebox/tools', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S ./start_mme', '\$', 5) self.close() + self.CreateHtmlTestRow(self.EPCType, 'OK', 0) def InitializeSPGW(self): if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '': @@ -234,6 +241,7 @@ class SSHConnection(): self.command('cd /opt/ltebox/tools', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S ./start_xGw', '\$', 5) self.close() + self.CreateHtmlTestRow(self.EPCType, 'OK', 0) def InitializeeNB(self): if self.eNBIPAddress == '' or self.eNBUserName == '' or self.eNBPassword == '' or self.eNBSourceCodePath == '': @@ -266,6 +274,7 @@ class SSHConnection(): if (loopCounter == 0): doLoop = False logging.debug('\u001B[1;37;43m eNB logging system did not show got sync! See with attach later \u001B[0m') + self.CreateHtmlTestRow(config_file, 'eNB not showing got sync!', 0) # Not getting got sync is bypassed for the moment #sys.exit(1) self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log', '\$', 10) @@ -274,6 +283,7 @@ class SSHConnection(): time.sleep(6) else: doLoop = False + self.CreateHtmlTestRow(config_file, 'OK', 0) logging.debug('\u001B[1m Initialize eNB Completed\u001B[0m') self.close() @@ -306,6 +316,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', 0) def AttachUE_common(self, device_id): try: @@ -353,6 +364,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', len(self.UEDevices)) def DetachUE_common(self, device_id): try: @@ -377,6 +389,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', 0) def RebootUE_common(self, device_id): try: @@ -431,6 +444,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', 0) def GetAllUEDevices(self, terminate_ue_flag): if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '': @@ -524,6 +538,7 @@ class SSHConnection(): i = i + 1 for job in multi_jobs: job.join() + self.CreateHtmlTestRow(self.ping_args, 'OK', 0) def Iperf_common(self, lock, UE_IPAddress, device_id, ue_num): try: @@ -660,6 +675,7 @@ class SSHConnection(): i = i + 1 for job in multi_jobs: job.join() + self.CreateHtmlTestRow(self.iperf_args, 'OK', 0) def CheckProcessExist(self, initialize_eNB_flag): multi_jobs = [] @@ -753,6 +769,7 @@ class SSHConnection(): if result is not None: self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGKILL lte-softmodem || true', '\$', 5) self.close() + self.CreateHtmlTestRow('N/A', 'OK', 0) def TerminateHSS(self): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) @@ -774,6 +791,7 @@ class SSHConnection(): self.command('echo ' + self.EPCPassword + ' | sudo -S ./kill_hss.sh', '\$', 5) self.command('rm ./kill_hss.sh', '\$', 5) self.close() + self.CreateHtmlTestRow('N/A', 'OK', 0) def TerminateMME(self): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) @@ -802,6 +820,7 @@ class SSHConnection(): self.command('cd /opt/ltebox/tools', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S ./stop_xGw', '\$', 5) self.close() + self.CreateHtmlTestRow('N/A', 'OK', 0) def TerminateUE_common(self, device_id): try: @@ -829,6 +848,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', 0) def LogCollectBuild(self): self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) @@ -905,6 +925,115 @@ class SSHConnection(): self.command('zip spgw.log.zip xGwLog.0', '\$', 60) self.close() #----------------------------------------------------------- +# HTML Reporting.... +#----------------------------------------------------------- + def CreateHtmlHeader(self): + if (not self.htmlHeaderCreated): + self.htmlFile = open('test_results.html', 'w') + self.htmlFile.write('\n') + self.htmlFile.write('\n') + self.htmlFile.write('\n') + self.htmlFile.write(' Test Results for TEMPLATE_JOB_NAME job build #TEMPLATE_BUILD_ID\n') + self.htmlFile.write(' \n') + self.htmlFile.write('\n') + self.htmlFile.write('\n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write('
\n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' Job Summary -- Job: TEMPLATE_JOB_NAME -- Build-ID: TEMPLATE_BUILD_ID\n') + self.htmlFile.write('
\n') + self.htmlFile.write('
\n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' \n') + else: + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' \n') + else: + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' \n') + else: + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write('
GIT Repository' + SSH.eNBRepository + '
Job TriggerMerge-RequestPush to Branch
Source BranchBranch' + SSH.eNBBranch + '
Source Commit IDCommit ID' + SSH.eNBCommitID + '
Target Branchdevelop
\n') + + terminate_ue_flag = True + SSH.GetAllUEDevices(terminate_ue_flag) + self.htmlUEConnected = len(self.UEDevices) + self.htmlFile.write('

' + str(self.htmlUEConnected) + ' UE(s) is(are) connected to ADB bench server

\n') + + self.htmlFile.write('
\n') + self.htmlFile.write('

Test Summary for ' + SSH.testXMLfile + '

\n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + i = 0 + while (i < self.htmlUEConnected): + self.htmlFile.write(' \n') + i += 1 + self.htmlFile.write(' \n') + self.htmlHeaderCreated = True + + def CreateHtmlFooter(self): + if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): + self.htmlFile.write('
Test IdTest DescTest OptionsTest StatusUE' + str(i) + ' Status
\n') + self.htmlFile.write('\n') + self.htmlFile.write('\n') + self.htmlFile.close() + self.htmlFooterCreated = False + + def CreateHtmlTestRow(self, options, status, ue_status): + if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): + self.htmlFile.write(' \n') + self.htmlFile.write(' ' + SSH.testCase_id + '\n') + self.htmlFile.write(' ' + SSH.desc + '\n') + self.htmlFile.write(' ' + str(options) + '\n') + if (str(status) == 'OK'): + self.htmlFile.write(' ' + str(status) + '\n') + elif (str(status) == 'KO'): + self.htmlFile.write(' ' + str(status) + '\n') + else: + self.htmlFile.write(' ' + str(status) + '\n') + i = 0 + while (i < self.htmlUEConnected): + if (i < ue_status): + self.htmlFile.write(' -\n') + else: + self.htmlFile.write(' -\n') + i += 1 + self.htmlFile.write(' \n') + +#----------------------------------------------------------- # Usage() #----------------------------------------------------------- def Usage(): @@ -1123,6 +1252,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE): Usage() sys.exit('Insufficient Parameter') + SSH.CreateHtmlHeader() + #read test_case_list.xml file # if no parameters for XML file, use default value if SSH.testXMLfile == '': @@ -1221,6 +1352,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE): SSH.TerminateSPGW() else: sys.exit('Invalid action') + + SSH.CreateHtmlFooter() else: Usage() sys.exit('Invalid mode') From a867e4ebcceeb7d552623c4af84c2c7e6dbe6af8 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 2 Aug 2018 16:38:57 +0200 Subject: [PATCH 033/128] CI: Moving html archiving in case of error Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-tmp-ran | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index 93192dd8be..df9caac82e 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -186,11 +186,6 @@ pipeline { [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password'] ]) { sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}" - if(fileExists("test_results.html")) { - sh "mv test_results.html test_results-${JOB_NAME}.html" - sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html" - archiveArtifacts "test_results-${JOB_NAME}.html" - } } } catch (Exception e) { currentBuild.result = 'FAILURE' @@ -324,6 +319,11 @@ pipeline { archiveArtifacts "enb.log.${env.BUILD_ID}.zip" } } + if(fileExists("ci-scripts/test_results.html")) { + sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html" + sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html" + archiveArtifacts "test_results-${JOB_NAME}.html" + } } } stage('Log Collection (SPGW)') { From 67796d842050bda7026994c637b67808d58dca45 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 2 Aug 2018 16:41:40 +0200 Subject: [PATCH 034/128] CI: pipeline fix Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-tmp-ran | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index df9caac82e..78f62cd8eb 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -318,11 +318,11 @@ pipeline { if(fileExists("enb.log.${env.BUILD_ID}.zip")) { archiveArtifacts "enb.log.${env.BUILD_ID}.zip" } - } - if(fileExists("ci-scripts/test_results.html")) { - sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html" - sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html" - archiveArtifacts "test_results-${JOB_NAME}.html" + if(fileExists("ci-scripts/test_results.html")) { + sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html" + sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html" + archiveArtifacts "test_results-${JOB_NAME}.html" + } } } } From b6c42575d87370b0ba03c749f90f62feb7acb269 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 2 Aug 2018 16:56:57 +0200 Subject: [PATCH 035/128] CI: adding 20 MHz testcases to FDD band 7 scenario Signed-off-by: Raphael Defosseux --- ci-scripts/xml_files/enb_usrp210_band7.xml | 36 +++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 4bea6d50e5..6f8cfbad5b 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -21,7 +21,7 @@ --> - 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040401 040201 030201 040101 030111 040301 040511 040611 040612 040613 040401 040201 030201 + 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040401 040201 030201 030111 040301 040511 040611 040612 040613 040401 040201 030201 030112 040301 040512 040621 040622 040623 040401 040201 030201 @@ -42,6 +42,12 @@ -O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf + + Initialize_eNB + Initialize eNB (FDD/Band7/20MHz) + -O ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf + + Terminate_eNB Terminate eNB @@ -81,6 +87,13 @@ 5 + + Ping + ping (20MHz - 20 sec) + -c 20 + 5 + + Iperf iperf (5MHz - DL/6Mbps/UDP)(60 sec) @@ -123,6 +136,27 @@ 50 + + Iperf + iperf (20MHz - DL/20Mbps/UDP)(60 sec) + -u -b 20M -t 60 -i 1 + 50 + + + + Iperf + iperf (20MHz - DL/40Mbps/UDP)(60 sec) + -u -b 40M -t 60 -i 1 + 50 + + + + Iperf + iperf (20MHz - DL/70Mbps/UDP)(60 sec) + -u -b 70M -t 60 -i 1 + 50 + + Initialize_HSS Initialize HSS From 9766eaa1bfda0a66219644ac449bb7f98274ab58 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 2 Aug 2018 10:28:45 +0200 Subject: [PATCH 036/128] CI: Improvements * adding merge request allow flag: -- if false no forced merge to develop -- if true and if branch is not develop, then forced merge to develop * lowered the ru gains in CI conf files * adding on-the-fly HTML summary within python main.py script * adding 20 MHz testcases to FDD band 7 scenario * adding GitLab status for -- centOS build -- FDD-band7 tests Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 56 +++---- ci-scripts/Jenkinsfile-tmp-ran | 15 +- .../enb.band7.tm1.100PRB.usrpb210.conf | 2 +- .../enb.band7.tm1.25PRB.usrpb210.conf | 2 +- .../enb.band7.tm1.50PRB.usrpb210.conf | 2 +- ci-scripts/main.py | 144 +++++++++++++++++- ci-scripts/xml_files/enb_usrp210_band7.xml | 36 ++++- 7 files changed, 223 insertions(+), 34 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index ded95eff03..af3fb10730 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -40,7 +40,7 @@ pipeline { disableConcurrentBuilds() timestamps() gitLabConnection('OAI GitLab') - gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim"]) + gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test-FDD-Band7"]) ansiColor('xterm') } @@ -197,15 +197,17 @@ pipeline { expression {doRedHatBuild} } steps { - script { - try { - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.RedHatRemoteCredentials}", usernameVariable: 'RH_Username', passwordVariable: 'RH_Password'] - ]) { - sh "./ci-scripts/buildOnRH.sh --workspace $WORKSPACE --job-name ${JOB_NAME} --build-id ${BUILD_ID} --remote-host ${params.RedHatRemoteServer} --remote-path ${params.RedHatWorkingPath} --remote-user-name ${RH_Username} --remote-password ${RH_Password}" + gitlabCommitStatus(name: "Build eNb-USRP-CentOS") { + script { + try { + withCredentials([ + [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.RedHatRemoteCredentials}", usernameVariable: 'RH_Username', passwordVariable: 'RH_Password'] + ]) { + sh "./ci-scripts/buildOnRH.sh --workspace $WORKSPACE --job-name ${JOB_NAME} --build-id ${BUILD_ID} --remote-host ${params.RedHatRemoteServer} --remote-path ${params.RedHatWorkingPath} --remote-user-name ${RH_Username} --remote-password ${RH_Password}" + } + } catch (Exception e) { + echo "Red Hat build failed not an error now" } - } catch (Exception e) { - echo "Red Hat build failed not an error now" } } } @@ -260,23 +262,25 @@ pipeline { } stage ("Test FDD - Band 7 - B210") { steps { - script { - if ("MERGE".equals(env.gitlabActionType)) { - build job: 'eNB-CI-FDD-Band7-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), - string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), - booleanParam(name: 'eNB_mergeRequest', value: true) - ] - } else { - build job: 'eNB-CI-FDD-Band7-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), - string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), - booleanParam(name: 'eNB_mergeRequest', value: false) - ] + gitlabCommitStatus(name: "Test-FDD-Band7") { + script { + if ("MERGE".equals(env.gitlabActionType)) { + build job: 'eNB-CI-FDD-Band7-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), + string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), + booleanParam(name: 'eNB_mergeRequest', value: true) + ] + } else { + build job: 'eNB-CI-FDD-Band7-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), + string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), + booleanParam(name: 'eNB_mergeRequest', value: false) + ] + } } } } diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index 796271a8d4..78f62cd8eb 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -44,9 +44,12 @@ termStatusArray[termSPGW] = false termStatusArray[termMME] = false termStatusArray[termHSS] = false +// Global Parameters. Normally they should be populated when the master job +// triggers the slave job with parameters def eNB_Repository def eNB_Branch def eNB_CommitID +def eNB_AllowMergeRequestProcess = false pipeline { agent { @@ -118,7 +121,7 @@ pipeline { if (params.eNB_Credentials == null) { allParametersPresent = false } - // the following 3 parameters should be pushed by the master trigger + // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { eNB_Repository = env.GIT_URL @@ -138,6 +141,9 @@ pipeline { eNB_CommitID = params.eNB_CommitID } echo "eNB_CommitID : ${eNB_CommitID}" + if (params.eNB_mergeRequest != null) { + eNB_AllowMergeRequestProcess = params.eNB_mergeRequest + } if (params.EPC_IPAddress == null) { allParametersPresent = false @@ -179,7 +185,7 @@ pipeline { [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'], [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password'] ]) { - sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}" + sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}" } } catch (Exception e) { currentBuild.result = 'FAILURE' @@ -312,6 +318,11 @@ pipeline { if(fileExists("enb.log.${env.BUILD_ID}.zip")) { archiveArtifacts "enb.log.${env.BUILD_ID}.zip" } + if(fileExists("ci-scripts/test_results.html")) { + sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html" + sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html" + archiveArtifacts "test_results-${JOB_NAME}.html" + } } } } diff --git a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf index 2feb577f68..2bd28a60df 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf index 38df1a28e5..102fc89a13 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } diff --git a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf index 213f2bbcd3..fe6e2f0b59 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 656b1d11a7..85e27acb69 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -59,6 +59,7 @@ class SSHConnection(): self.eNBIPAddress = '' self.eNBRepository = '' self.eNBBranch = '' + self.eNB_AllowMerge = False self.eNBCommitID = '' self.eNBUserName = '' self.eNBPassword = '' @@ -82,6 +83,10 @@ class SSHConnection(): self.iperf_packetloss_threshold = '' self.UEDevices = [] self.UEIPAddresses = [] + self.htmlFile = '' + self.htmlHeaderCreated = False + self.htmlFooterCreated = False + self.htmlUEConnected = 0 def open(self, ipaddress, username, password): self.ssh = pexpect.spawn('ssh', [username + '@' + ipaddress], timeout = 5) @@ -165,8 +170,9 @@ class SSHConnection(): self.command('git checkout -f ' + self.eNBCommitID, '\$', 5) # if the branch is not develop, then it is a merge request and we need to do # the potential merge. Note that merge conflicts should already been checked earlier - if (self.eNBBranch != 'develop') and (self.eNBBranch != 'origin/develop'): - self.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5) + if (self.eNB_AllowMerge): + if (self.eNBBranch != 'develop') and (self.eNBBranch != 'origin/develop'): + self.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5) self.command('source oaienv', '\$', 5) self.command('cd cmake_targets', '\$', 5) self.command('mkdir -p log', '\$', 5) @@ -176,6 +182,7 @@ class SSHConnection(): self.command('echo ' + self.eNBPassword + ' | sudo -S mv log/* ' + 'build_log_' + SSH.testCase_id, '\$', 5) self.command('echo ' + self.eNBPassword + ' | sudo -S mv compile_oai_enb.log ' + 'build_log_' + SSH.testCase_id, '\$', 5) self.close() + self.CreateHtmlTestRow(self.Build_eNB_args, 'OK', 0) def InitializeHSS(self): if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '': @@ -196,6 +203,7 @@ class SSHConnection(): self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f hss.log daemon.log', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S echo "Starting sudo session" && sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real ', '\$', 5) self.close() + self.CreateHtmlTestRow(self.EPCType, 'OK', 0) def InitializeMME(self): if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '': @@ -217,6 +225,7 @@ class SSHConnection(): self.command('cd /opt/ltebox/tools', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S ./start_mme', '\$', 5) self.close() + self.CreateHtmlTestRow(self.EPCType, 'OK', 0) def InitializeSPGW(self): if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '': @@ -232,6 +241,7 @@ class SSHConnection(): self.command('cd /opt/ltebox/tools', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S ./start_xGw', '\$', 5) self.close() + self.CreateHtmlTestRow(self.EPCType, 'OK', 0) def InitializeeNB(self): if self.eNBIPAddress == '' or self.eNBUserName == '' or self.eNBPassword == '' or self.eNBSourceCodePath == '': @@ -264,6 +274,7 @@ class SSHConnection(): if (loopCounter == 0): doLoop = False logging.debug('\u001B[1;37;43m eNB logging system did not show got sync! See with attach later \u001B[0m') + self.CreateHtmlTestRow(config_file, 'eNB not showing got sync!', 0) # Not getting got sync is bypassed for the moment #sys.exit(1) self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log', '\$', 10) @@ -272,6 +283,7 @@ class SSHConnection(): time.sleep(6) else: doLoop = False + self.CreateHtmlTestRow(config_file, 'OK', 0) logging.debug('\u001B[1m Initialize eNB Completed\u001B[0m') self.close() @@ -304,6 +316,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', 0) def AttachUE_common(self, device_id): try: @@ -351,6 +364,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', len(self.UEDevices)) def DetachUE_common(self, device_id): try: @@ -375,6 +389,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', 0) def RebootUE_common(self, device_id): try: @@ -429,6 +444,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', 0) def GetAllUEDevices(self, terminate_ue_flag): if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '': @@ -522,6 +538,7 @@ class SSHConnection(): i = i + 1 for job in multi_jobs: job.join() + self.CreateHtmlTestRow(self.ping_args, 'OK', 0) def Iperf_common(self, lock, UE_IPAddress, device_id, ue_num): try: @@ -658,6 +675,7 @@ class SSHConnection(): i = i + 1 for job in multi_jobs: job.join() + self.CreateHtmlTestRow(self.iperf_args, 'OK', 0) def CheckProcessExist(self, initialize_eNB_flag): multi_jobs = [] @@ -751,6 +769,7 @@ class SSHConnection(): if result is not None: self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGKILL lte-softmodem || true', '\$', 5) self.close() + self.CreateHtmlTestRow('N/A', 'OK', 0) def TerminateHSS(self): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) @@ -772,6 +791,7 @@ class SSHConnection(): self.command('echo ' + self.EPCPassword + ' | sudo -S ./kill_hss.sh', '\$', 5) self.command('rm ./kill_hss.sh', '\$', 5) self.close() + self.CreateHtmlTestRow('N/A', 'OK', 0) def TerminateMME(self): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) @@ -800,6 +820,7 @@ class SSHConnection(): self.command('cd /opt/ltebox/tools', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S ./stop_xGw', '\$', 5) self.close() + self.CreateHtmlTestRow('N/A', 'OK', 0) def TerminateUE_common(self, device_id): try: @@ -827,6 +848,7 @@ class SSHConnection(): multi_jobs.append(p) for job in multi_jobs: job.join() + self.CreateHtmlTestRow('N/A', 'OK', 0) def LogCollectBuild(self): self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) @@ -903,6 +925,115 @@ class SSHConnection(): self.command('zip spgw.log.zip xGwLog.0', '\$', 60) self.close() #----------------------------------------------------------- +# HTML Reporting.... +#----------------------------------------------------------- + def CreateHtmlHeader(self): + if (not self.htmlHeaderCreated): + self.htmlFile = open('test_results.html', 'w') + self.htmlFile.write('\n') + self.htmlFile.write('\n') + self.htmlFile.write('\n') + self.htmlFile.write(' Test Results for TEMPLATE_JOB_NAME job build #TEMPLATE_BUILD_ID\n') + self.htmlFile.write(' \n') + self.htmlFile.write('\n') + self.htmlFile.write('\n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write('
\n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' Job Summary -- Job: TEMPLATE_JOB_NAME -- Build-ID: TEMPLATE_BUILD_ID\n') + self.htmlFile.write('
\n') + self.htmlFile.write('
\n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' \n') + else: + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' \n') + else: + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' \n') + else: + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write('
GIT Repository' + SSH.eNBRepository + '
Job TriggerMerge-RequestPush to Branch
Source BranchBranch' + SSH.eNBBranch + '
Source Commit IDCommit ID' + SSH.eNBCommitID + '
Target Branchdevelop
\n') + + terminate_ue_flag = True + SSH.GetAllUEDevices(terminate_ue_flag) + self.htmlUEConnected = len(self.UEDevices) + self.htmlFile.write('

' + str(self.htmlUEConnected) + ' UE(s) is(are) connected to ADB bench server

\n') + + self.htmlFile.write('
\n') + self.htmlFile.write('

Test Summary for ' + SSH.testXMLfile + '

\n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + self.htmlFile.write(' \n') + i = 0 + while (i < self.htmlUEConnected): + self.htmlFile.write(' \n') + i += 1 + self.htmlFile.write(' \n') + self.htmlHeaderCreated = True + + def CreateHtmlFooter(self): + if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): + self.htmlFile.write('
Test IdTest DescTest OptionsTest StatusUE' + str(i) + ' Status
\n') + self.htmlFile.write('\n') + self.htmlFile.write('\n') + self.htmlFile.close() + self.htmlFooterCreated = False + + def CreateHtmlTestRow(self, options, status, ue_status): + if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): + self.htmlFile.write(' \n') + self.htmlFile.write(' ' + SSH.testCase_id + '\n') + self.htmlFile.write(' ' + SSH.desc + '\n') + self.htmlFile.write(' ' + str(options) + '\n') + if (str(status) == 'OK'): + self.htmlFile.write(' ' + str(status) + '\n') + elif (str(status) == 'KO'): + self.htmlFile.write(' ' + str(status) + '\n') + else: + self.htmlFile.write(' ' + str(status) + '\n') + i = 0 + while (i < self.htmlUEConnected): + if (i < ue_status): + self.htmlFile.write(' -\n') + else: + self.htmlFile.write(' -\n') + i += 1 + self.htmlFile.write(' \n') + +#----------------------------------------------------------- # Usage() #----------------------------------------------------------- def Usage(): @@ -998,6 +1129,11 @@ while len(argvs) > 1: elif re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE) SSH.eNBRepository = matchReg.group(1) + elif re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE): + matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE) + doMerge = matchReg.group(1) + if ((doMerge == 'true') or (doMerge == 'True')): + SSH.eNB_AllowMerge = True elif re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE) SSH.eNBBranch = matchReg.group(1) @@ -1116,6 +1252,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE): Usage() sys.exit('Insufficient Parameter') + SSH.CreateHtmlHeader() + #read test_case_list.xml file # if no parameters for XML file, use default value if SSH.testXMLfile == '': @@ -1214,6 +1352,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE): SSH.TerminateSPGW() else: sys.exit('Invalid action') + + SSH.CreateHtmlFooter() else: Usage() sys.exit('Invalid mode') diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 4bea6d50e5..6f8cfbad5b 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -21,7 +21,7 @@ --> - 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040401 040201 030201 040101 030111 040301 040511 040611 040612 040613 040401 040201 030201 + 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040401 040201 030201 030111 040301 040511 040611 040612 040613 040401 040201 030201 030112 040301 040512 040621 040622 040623 040401 040201 030201 @@ -42,6 +42,12 @@ -O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf + + Initialize_eNB + Initialize eNB (FDD/Band7/20MHz) + -O ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf + + Terminate_eNB Terminate eNB @@ -81,6 +87,13 @@ 5 + + Ping + ping (20MHz - 20 sec) + -c 20 + 5 + + Iperf iperf (5MHz - DL/6Mbps/UDP)(60 sec) @@ -123,6 +136,27 @@ 50 + + Iperf + iperf (20MHz - DL/20Mbps/UDP)(60 sec) + -u -b 20M -t 60 -i 1 + 50 + + + + Iperf + iperf (20MHz - DL/40Mbps/UDP)(60 sec) + -u -b 40M -t 60 -i 1 + 50 + + + + Iperf + iperf (20MHz - DL/70Mbps/UDP)(60 sec) + -u -b 70M -t 60 -i 1 + 50 + + Initialize_HSS Initialize HSS From 9db654d61b2ce5fb9137e7e444f257cf36eda410 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 3 Aug 2018 09:47:02 +0200 Subject: [PATCH 037/128] CI: retrieve HTML report from slave job and archive it Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index af3fb10730..cf3ad11f93 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -31,6 +31,7 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) { } def doRedHatBuild = false +def FDD_Band7_B210_Status pipeline { agent { @@ -265,7 +266,7 @@ pipeline { gitlabCommitStatus(name: "Test-FDD-Band7") { script { if ("MERGE".equals(env.gitlabActionType)) { - build job: 'eNB-CI-FDD-Band7-B210', + FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', parameters: [ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), @@ -273,7 +274,7 @@ pipeline { booleanParam(name: 'eNB_mergeRequest', value: true) ] } else { - build job: 'eNB-CI-FDD-Band7-B210', + FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', parameters: [ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), @@ -284,6 +285,18 @@ pipeline { } } } + post { + always { + script { + copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', + filter: 'test_results*.html', + selector: specific("${FDD_Band7_B210_Status.number}")) + if (fileExist('test_results-eNB-CI-FDD-Band7-B210.html')) { + archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html' + } + } + } + } } } post { From 4080cfd81f1bf3883561b15aed6d3dea3398c2a7 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 3 Aug 2018 13:08:48 +0200 Subject: [PATCH 038/128] CI: adding UL iperf support Signed-off-by: Raphael Defosseux --- ci-scripts/main.py | 196 +++++++++++++-------- ci-scripts/xml_files/enb_usrp210_band7.xml | 27 ++- 2 files changed, 148 insertions(+), 75 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 85e27acb69..af086beeb9 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -277,7 +277,7 @@ class SSHConnection(): self.CreateHtmlTestRow(config_file, 'eNB not showing got sync!', 0) # Not getting got sync is bypassed for the moment #sys.exit(1) - self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log', '\$', 10) + self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log | grep -i sync', '\$', 10) result = re.search('got sync', str(self.ssh.before)) if result is None: time.sleep(6) @@ -540,7 +540,112 @@ class SSHConnection(): job.join() self.CreateHtmlTestRow(self.ping_args, 'OK', 0) - def Iperf_common(self, lock, UE_IPAddress, device_id, ue_num): + def Iperf_ComputeTime(self): + result = re.search('-t (?P\d+)', str(self.iperf_args)) + if result is None: + logging.debug('\u001B[1;37;41m Iperf time Not Found! \u001B[0m') + sys.exit(1) + return result.group('iperf_time') + + def Iperf_ComputeModifiedBW(self, ue_num): + result = re.search('-b (?P[0-9\.]+)[KMG]', str(self.iperf_args)) + if result is None: + logging.debug('\u001B[1;37;41m Iperf bandwidth Not Found! \u001B[0m') + sys.exit(1) + iperf_bandwidth = result.group('iperf_bandwidth') + iperf_bandwidth_new = float(iperf_bandwidth)/ue_num + iperf_bandwidth_str = '-b ' + iperf_bandwidth + iperf_bandwidth_str_new = '-b ' + str(iperf_bandwidth_new) + result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(self.iperf_args)) + if result is None: + logging.debug('\u001B[1;37;41m Calculate Iperf bandwidth Failed! \u001B[0m') + sys.exit(1) + return result + + def Iperf_analyzeV2Output(self, lock, UE_IPAddress): + result = re.search('Server Report:', str(self.ssh.before)) + if result is None: + result = re.search('read failed: Connection refused', str(self.ssh.before)) + if result is not None: + logging.debug('\u001B[1;37;41m Could not connect to iperf server! \u001B[0m') + else: + logging.debug('\u001B[1;37;41m Server Report and Connection refused Not Found! \u001B[0m') + sys.exit(1) + result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(\d+\/.\d+) (\((?P[0-9\.]+)%\))', str(self.ssh.before)) + if result is not None: + bitrate = result.group('bitrate') + packetloss = result.group('packetloss') + jitter = result.group('jitter') + lock.acquire() + logging.debug('\u001B[1;37;44m iperf result (' + UE_IPAddress + ') \u001B[0m') + if bitrate is not None: + logging.debug('\u001B[1;34m Bitrate : ' + bitrate + '\u001B[0m') + if packetloss is not None: + logging.debug('\u001B[1;34m Packet Loss : ' + packetloss + '%\u001B[0m') + if float(packetloss) > float(self.iperf_packetloss_threshold): + logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m') + lock.release() + sys.exit(1) + if jitter is not None: + logging.debug('\u001B[1;34m Jitter : ' + jitter + '\u001B[0m') + lock.release() + + def Iperf_analyzeV3Output(self, lock, UE_IPAddress): + result = re.search('(?P[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P[0-9\.]+)%\)) +(?:|receiver)\\\\r\\\\n(?:|\[ *\d+\] Sent \d+ datagrams)\\\\r\\\\niperf Done\.', str(self.ssh.before)) + if result is None: + result = re.search('(?Piperf: error - [a-zA-Z0-9 :]+)', str(self.ssh.before)) + if result is not None: + logging.debug('\u001B[1;37;41m ' + result.group('error') + ' \u001B[0m') + else: + logging.debug('\u001B[1;37;41m Bitrate and/or Packet Loss Not Found! \u001B[0m') + sys.exit(1) + bitrate = result.group('bitrate') + packetloss = result.group('packetloss') + lock.acquire() + logging.debug('\u001B[1;37;44m iperf result (' + UE_IPAddress + ') \u001B[0m') + logging.debug('\u001B[1;34m Bitrate : ' + bitrate + '\u001B[0m') + if packetloss is not None: + logging.debug('\u001B[1;34m Packet Loss : ' + packetloss + '%\u001B[0m') + if float(packetloss) > float(self.iperf_packetloss_threshold): + logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m') + lock.release() + sys.exit(1) + lock.release() + + def Iperf_UL_common(self, lock, UE_IPAddress, device_id, idx, ue_num): + ipnumbers = UE_IPAddress.split('.') + if (len(ipnumbers) == 4): + ipnumbers[3] = '1' + EPC_Iperf_UE_IPAddress = ipnumbers[0] + '.' + ipnumbers[1] + '.' + ipnumbers[2] + '.' + ipnumbers[3] + + # Launch iperf server on EPC side + self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) + self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5) + self.command('rm -f iperf_server_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) + port = 5001 + idx + self.command('echo $USER; nohup iperf -u -s -i 1 -p ' + str(port) + ' > iperf_server_' + SSH.testCase_id + '_' + device_id + '.log &', self.EPCUserName, 5) + time.sleep(0.5) + self.close() + + # Launch iperf client on UE + self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) + self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5) + iperf_time = self.Iperf_ComputeTime() + time.sleep(0.5) + + modified_options = self.Iperf_ComputeModifiedBW(ue_num) + time.sleep(0.5) + + self.command('rm -f iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) + self.command('stdbuf -o0 adb -s ' + device_id + ' shell "/data/local/tmp/iperf -c ' + EPC_Iperf_UE_IPAddress + ' ' + modified_options + ' -p ' + str(port) + '" 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) + self.Iperf_analyzeV2Output(lock, UE_IPAddress) + + # Launch iperf server on EPC side + self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) + self.command('killall --signal SIGKILL iperf', self.EPCUserName, 5) + self.close() + + def Iperf_common(self, lock, UE_IPAddress, device_id, idx, ue_num): try: useIperf3 = False self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) @@ -557,92 +662,39 @@ class SSHConnection(): sys.exit(1) else: useIperf3 = True + # in case of iperf, UL has its own function + if (not useIperf3): + result = re.search('-R', str(self.iperf_args)) + if result is not None: + self.close() + self.Iperf_UL_common(lock, UE_IPAddress, device_id, idx, ue_num) + return + if (useIperf3): self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/iperf3 -s &', '\$', 5) else: - self.command('rm -f /tmp/iperf_server_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) + self.command('rm -f iperf_server_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) self.command('echo $USER; nohup adb -s ' + device_id + ' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_' + SSH.testCase_id + '_' + device_id + '.log &', self.ADBUserName, 5) time.sleep(0.5) self.close() self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) - self.command('cd ' + self.EPCSourceCodePath, '\$', 5) - self.command('cd scripts', '\$', 5) - result = re.search('-t (?P\d+)', str(self.iperf_args)) - if result is None: - logging.debug('\u001B[1;37;41m Iperf time Not Found! \u001B[0m') - sys.exit(1) - iperf_time = result.group('iperf_time') + self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5) + iperf_time = self.Iperf_ComputeTime() time.sleep(0.5) - result = re.search('-b (?P[0-9\.]+)[KMG]', str(self.iperf_args)) - if result is None: - logging.debug('\u001B[1;37;41m Iperf bandwidth Not Found! \u001B[0m') - sys.exit(1) - iperf_bandwidth = result.group('iperf_bandwidth') + modified_options = self.Iperf_ComputeModifiedBW(ue_num) time.sleep(0.5) - iperf_bandwidth_new = float(iperf_bandwidth)/ue_num - iperf_bandwidth_str = '-b ' + iperf_bandwidth - iperf_bandwidth_str_new = '-b ' + str(iperf_bandwidth_new) - result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(self.iperf_args)) - if result is None: - logging.debug('\u001B[1;37;41m Calculate Iperf bandwidth Failed! \u001B[0m') - sys.exit(1) - self.command('rm -f iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) if (useIperf3): - self.command('stdbuf -o0 iperf3 -c ' + UE_IPAddress + ' ' + result + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) + self.command('stdbuf -o0 iperf3 -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - result = re.search('(?P[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P[0-9\.]+)%\)) +(?:|receiver)\\\\r\\\\n(?:|\[ *\d+\] Sent \d+ datagrams)\\\\r\\\\niperf Done\.', str(self.ssh.before)) - if result is None: - result = re.search('(?Piperf: error - [a-zA-Z0-9 :]+)', str(self.ssh.before)) - if result is not None: - logging.debug('\u001B[1;37;41m ' + result.group('error') + ' \u001B[0m') - else: - logging.debug('\u001B[1;37;41m Bitrate and/or Packet Loss Not Found! \u001B[0m') - sys.exit(1) - bitrate = result.group('bitrate') - packetloss = result.group('packetloss') - lock.acquire() - logging.debug('\u001B[1;37;44m iperf result (' + UE_IPAddress + ') \u001B[0m') - logging.debug('\u001B[1;34m Bitrate : ' + bitrate + '\u001B[0m') - if packetloss is not None: - logging.debug('\u001B[1;34m Packet Loss : ' + packetloss + '%\u001B[0m') - if float(packetloss) > float(self.iperf_packetloss_threshold): - logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m') - lock.release() - sys.exit(1) - lock.release() + self.Iperf_analyzeV3Output(lock, UE_IPAddress) else: - self.command('stdbuf -o0 iperf -c ' + UE_IPAddress + ' ' + result + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) + self.command('stdbuf -o0 iperf -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - result = re.search('Server Report:', str(self.ssh.before)) - if result is None: - result = re.search('read failed: Connection refused', str(self.ssh.before)) - if result is not None: - logging.debug('\u001B[1;37;41m Could not connect to iperf server! \u001B[0m') - else: - logging.debug('\u001B[1;37;41m Server Report and Connection refused Not Found! \u001B[0m') - sys.exit(1) - result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(\d+\/.\d+) (\((?P[0-9\.]+)%\))', str(self.ssh.before)) - if result is not None: - bitrate = result.group('bitrate') - packetloss = result.group('packetloss') - jitter = result.group('jitter') - lock.acquire() - logging.debug('\u001B[1;37;44m iperf result (' + UE_IPAddress + ') \u001B[0m') - if bitrate is not None: - logging.debug('\u001B[1;34m Bitrate : ' + bitrate + '\u001B[0m') - if packetloss is not None: - logging.debug('\u001B[1;34m Packet Loss : ' + packetloss + '%\u001B[0m') - if float(packetloss) > float(self.iperf_packetloss_threshold): - logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m') - lock.release() - sys.exit(1) - if jitter is not None: - logging.debug('\u001B[1;34m Jitter : ' + jitter + '\u001B[0m') - lock.release() + self.Iperf_analyzeV2Output(lock, UE_IPAddress) self.close() self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) @@ -668,7 +720,7 @@ class SSHConnection(): lock = Lock() for UE_IPAddress in self.UEIPAddresses: device_id = self.UEDevices[i] - p = Process(target = SSH.Iperf_common, args = (lock,UE_IPAddress,device_id,ue_num,)) + p = Process(target = SSH.Iperf_common, args = (lock,UE_IPAddress,device_id,i,ue_num,)) p.daemon = True p.start() multi_jobs.append(p) diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 6f8cfbad5b..bf47d1f368 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -21,7 +21,7 @@ --> - 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040401 040201 030201 030111 040301 040511 040611 040612 040613 040401 040201 030201 030112 040301 040512 040621 040622 040623 040401 040201 030201 + 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040641 040401 040201 030201 030111 040301 040511 040611 040612 040613 040651 040401 040201 030201 030121 040301 040521 040621 040622 040623 040661 040401 040201 030201 @@ -42,7 +42,7 @@ -O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf - + Initialize_eNB Initialize eNB (FDD/Band7/20MHz) -O ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf @@ -87,7 +87,7 @@ 5 - + Ping ping (20MHz - 20 sec) -c 20 @@ -115,6 +115,13 @@ 50 + + Iperf + iperf (5MHz - UL/9Mbps/UDP)(60 sec) + -u -b 9M -t 60 -i 1 -R + 50 + + Iperf iperf (10MHz - DL/10Mbps/UDP)(60 sec) @@ -136,6 +143,13 @@ 50 + + Iperf + iperf (10MHz - UL/20Mbps/UDP)(60 sec) + -u -b 20M -t 60 -i 1 -R + 50 + + Iperf iperf (20MHz - DL/20Mbps/UDP)(60 sec) @@ -157,6 +171,13 @@ 50 + + Iperf + iperf (20MHz - UL/20Mbps/UDP)(60 sec) + -u -b 20M -t 60 -i 1 -R + 50 + + Initialize_HSS Initialize HSS From d885eb5bc2e649f879a675ee56b9dd723d0e93bc Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 3 Aug 2018 13:24:30 +0200 Subject: [PATCH 039/128] CI: hotfix in Jenkins pipeline script Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index cf3ad11f93..f83ee6faf0 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -291,7 +291,7 @@ pipeline { copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', filter: 'test_results*.html', selector: specific("${FDD_Band7_B210_Status.number}")) - if (fileExist('test_results-eNB-CI-FDD-Band7-B210.html')) { + if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html' } } From 15f7ae91be9879ffb00639c1b0c35819db97708f Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 3 Aug 2018 14:58:18 +0200 Subject: [PATCH 040/128] fix single_thread_flag usage --- targets/RT/USER/lte-ru.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 93ee4859dd..891dd9e272 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -1257,7 +1257,7 @@ void wakeup_eNBs(RU_t *ru) { LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top); - if ((ru->num_eNB==1 && ru->eNB_top!=0 && get_nprocs() <= 4) || single_thread_flag) { + if (ru->num_eNB==1 && ru->eNB_top!=0 && (get_nprocs() <= 4 || single_thread_flag)) { // call eNB function directly char string[20]; @@ -2194,7 +2194,7 @@ void init_RU_proc(RU_t *ru) { if(emulate_rf) pthread_create( &proc->pthread_emulateRF, attr_emulateRF, emulatedRF_thread, (void*)proc ); - if (get_nprocs() > 4) + if (!single_thread_flag && get_nprocs() > 4) pthread_create( &proc->pthread_FH1, attr_FH1, ru_thread_tx, (void*)ru ); if (ru->function == NGFI_RRU_IF4p5) { From 07d161060225f77ae39f02fb79dfe3660136d2b4 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 3 Aug 2018 15:01:49 +0200 Subject: [PATCH 041/128] quick hack to avoid a DLSCH regression One of the optimized RE allocation function does not work properly and generates some decoding errors with a COTS UE. Let's use the generic function for the moment, while analyzing what is wrong. --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 456abe7315..ea92dbb560 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -2419,6 +2419,11 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, allocate_REs_in_RB_no_pilots_64QAM_siso : allocate_REs_in_RB; } + /* TODO: this is a quick hack to be removed. There is a problem + * with above code that needs to be analyzed and fixed. In the + * meantime, let's use the generic function. + */ + allocate_REs = allocate_REs_in_RB; break; } From 35ff61118f516a68d73ca14b20ed1298e1ef3f44 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 3 Aug 2018 15:23:47 +0200 Subject: [PATCH 042/128] CI: adding profiling option to iperf: -- balanced (current version): all UE shares the same BW -- single-ue : one UE will use the whole requested BW -- unbalanced : all but one UE will use a residual 2% of the requested BW the rest of requested BW will be used by one UE Signed-off-by: Raphael Defosseux --- ci-scripts/main.py | 31 +++++++++++--- ci-scripts/xml_files/enb_usrp210_band7.xml | 50 +++++++++++++++++++++- 2 files changed, 75 insertions(+), 6 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index af086beeb9..4ba2fbcf5b 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -81,6 +81,7 @@ class SSHConnection(): self.ping_packetloss_threshold = '' self.iperf_args = '' self.iperf_packetloss_threshold = '' + self.iperf_profile = '' self.UEDevices = [] self.UEIPAddresses = [] self.htmlFile = '' @@ -547,13 +548,23 @@ class SSHConnection(): sys.exit(1) return result.group('iperf_time') - def Iperf_ComputeModifiedBW(self, ue_num): + def Iperf_ComputeModifiedBW(self, idx, ue_num): result = re.search('-b (?P[0-9\.]+)[KMG]', str(self.iperf_args)) if result is None: logging.debug('\u001B[1;37;41m Iperf bandwidth Not Found! \u001B[0m') sys.exit(1) iperf_bandwidth = result.group('iperf_bandwidth') - iperf_bandwidth_new = float(iperf_bandwidth)/ue_num + if SSH.iperf_profile == 'balanced': + iperf_bandwidth_new = float(iperf_bandwidth)/ue_num + if SSH.iperf_profile == 'single-ue': + iperf_bandwidth_new = float(iperf_bandwidth) + if SSH.iperf_profile == 'unbalanced': + # residual is 2% of max bw + residualBW = float(iperf_bandwidth) / 50 + if idx == 0: + iperf_bandwidth_new = float(iperf_bandwidth) - ((ue_num - 1) * residualBW) + else: + iperf_bandwidth_new = residualBW iperf_bandwidth_str = '-b ' + iperf_bandwidth iperf_bandwidth_str_new = '-b ' + str(iperf_bandwidth_new) result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(self.iperf_args)) @@ -571,7 +582,7 @@ class SSHConnection(): else: logging.debug('\u001B[1;37;41m Server Report and Connection refused Not Found! \u001B[0m') sys.exit(1) - result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(\d+\/.\d+) (\((?P[0-9\.]+)%\))', str(self.ssh.before)) + result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(\d+\/..\d+) (\((?P[0-9\.]+)%\))', str(self.ssh.before)) if result is not None: bitrate = result.group('bitrate') packetloss = result.group('packetloss') @@ -633,7 +644,7 @@ class SSHConnection(): iperf_time = self.Iperf_ComputeTime() time.sleep(0.5) - modified_options = self.Iperf_ComputeModifiedBW(ue_num) + modified_options = self.Iperf_ComputeModifiedBW(idx, ue_num) time.sleep(0.5) self.command('rm -f iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) @@ -647,6 +658,9 @@ class SSHConnection(): def Iperf_common(self, lock, UE_IPAddress, device_id, idx, ue_num): try: + # Single-UE profile -- iperf only on one UE + if SSH.iperf_profile == 'single-ue' and idx != 0: + return useIperf3 = False self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) # if by chance ADB server and EPC are on the same remote host, at least log collection will take of it @@ -683,7 +697,7 @@ class SSHConnection(): iperf_time = self.Iperf_ComputeTime() time.sleep(0.5) - modified_options = self.Iperf_ComputeModifiedBW(ue_num) + modified_options = self.Iperf_ComputeModifiedBW(idx, ue_num) time.sleep(0.5) self.command('rm -f iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) @@ -1145,6 +1159,13 @@ def GetParametersFromXML(action): if action == 'Iperf': SSH.iperf_args = test.findtext('iperf_args') SSH.iperf_packetloss_threshold = test.findtext('iperf_packetloss_threshold') + SSH.iperf_profile = test.findtext('iperf_profile') + if (SSH.iperf_profile is None): + SSH.iperf_profile = 'balanced' + else: + if SSH.iperf_profile != 'balanced' and SSH.iperf_profile != 'unbalanced' and SSH.iperf_profile != 'single-ue': + logging.debug('ERROR: test-case has wrong profile ' + SSH.iperf_profile) + SSH.iperf_profile = 'balanced' #check if given test is in list #it is in list if one of the strings in 'list' is at the beginning of 'test' diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index bf47d1f368..7a56cf384c 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -21,7 +21,7 @@ --> - 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040641 040401 040201 030201 030111 040301 040511 040611 040612 040613 040651 040401 040201 030201 030121 040301 040521 040621 040622 040623 040661 040401 040201 030201 + 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040604 040605 040641 040401 040201 030201 030111 040301 040511 040611 040612 040613 040614 040615 040651 040401 040201 030201 030121 040301 040521 040621 040622 040623 040661 040401 040201 030201 @@ -115,6 +115,22 @@ 50 + + Iperf + iperf (5MHz - DL/15Mbps/UDP)(60 sec)(single-ue profile) + -u -b 15M -t 60 -i 1 + 50 + single-ue + + + + Iperf + iperf (5MHz - DL/15Mbps/UDP)(60 sec)(unbalanced profile) + -u -b 15M -t 60 -i 1 + 50 + unbalanced + + Iperf iperf (5MHz - UL/9Mbps/UDP)(60 sec) @@ -143,6 +159,22 @@ 50 + + Iperf + iperf (10MHz - DL/30Mbps/UDP)(60 sec)(single-ue profile) + -u -b 30M -t 60 -i 1 + 50 + single-ue + + + + Iperf + iperf (10MHz - DL/30Mbps/UDP)(60 sec)(unbalanced profile) + -u -b 30M -t 60 -i 1 + 50 + unbalanced + + Iperf iperf (10MHz - UL/20Mbps/UDP)(60 sec) @@ -171,6 +203,22 @@ 50 + + Iperf + iperf (20MHz - DL/70Mbps/UDP)(60 sec)(single-ue profile) + -u -b 70M -t 60 -i 1 + 50 + single-ue + + + + Iperf + iperf (20MHz - DL/70Mbps/UDP)(60 sec)(unbalanced profile) + -u -b 70M -t 60 -i 1 + 50 + unbalanced + + Iperf iperf (20MHz - UL/20Mbps/UDP)(60 sec) From a2cf8611ed09da746bf290a1077cce90dff612e8 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sat, 4 Aug 2018 08:39:25 +0200 Subject: [PATCH 043/128] small modifications for CentOS build --- openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 6 ++++++ openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c | 9 +++++++-- openair2/NETWORK_DRIVER/MESH/device.c | 4 ++++ openair2/NETWORK_DRIVER/UE_IP/device.c | 6 +++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index a414c85c16..760d44719e 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -40,8 +40,14 @@ #include #include #include +#include +#if RHEL_RELEASE_CODE >= 1796 +#include +#include +#else #include #include +#endif #include #include "linear_preprocessing_rec.h" diff --git a/openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c b/openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c index d85d440193..7d063e326e 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c @@ -13,9 +13,14 @@ data storage. */ #include #include #include +#include +#if RHEL_RELEASE_CODE >= 1796 +#include +#include +#else #include #include - +#endif //#define DEBUG_PREPROC @@ -366,4 +371,4 @@ float sqrt_float(float x, float sqrt_x) { sqrt_x = (float)(sqrt((double)(x))); return sqrt_x; -} \ No newline at end of file +} diff --git a/openair2/NETWORK_DRIVER/MESH/device.c b/openair2/NETWORK_DRIVER/MESH/device.c index f8a420697a..f5d31742bc 100644 --- a/openair2/NETWORK_DRIVER/MESH/device.c +++ b/openair2/NETWORK_DRIVER/MESH/device.c @@ -324,7 +324,11 @@ static const struct net_device_ops nasmesh_netdev_ops = { .ndo_set_mac_address = NULL, .ndo_set_config = nas_set_config, .ndo_do_ioctl = nas_CTL_ioctl, +#if RHEL_RELEASE_CODE>=1797 + .extended.ndo_change_mtu = nas_change_mtu, +#else .ndo_change_mtu = nas_change_mtu, +#endif .ndo_tx_timeout = nas_tx_timeout, }; diff --git a/openair2/NETWORK_DRIVER/UE_IP/device.c b/openair2/NETWORK_DRIVER/UE_IP/device.c index d9a9149685..47c820fe77 100644 --- a/openair2/NETWORK_DRIVER/UE_IP/device.c +++ b/openair2/NETWORK_DRIVER/UE_IP/device.c @@ -349,7 +349,11 @@ static const struct net_device_ops ue_ip_netdev_ops = { .ndo_set_mac_address = ue_ip_set_mac_address, .ndo_set_config = ue_ip_set_config, .ndo_do_ioctl = NULL, - .ndo_change_mtu = ue_ip_change_mtu, +#if RHEL_RELEASE_CODE>=1797 + .extended.ndo_change_mtu = ue_ip_change_mtu, +#else + .ndo_change_mtu = ue_ip_change_mtu, +#endif .ndo_tx_timeout = ue_ip_tx_timeout, .ndo_change_rx_flags = ue_ip_change_rx_flags, }; From 1752c92980e60cb2558a796d46da591f6705b13a Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 6 Aug 2018 11:27:02 +0200 Subject: [PATCH 044/128] T: update 'to_vcd' tracer to trace all VCD variables and functions Pass the command line arguemnt -vcd to trace all VCD variables and functions. --- common/utils/T/tracer/to_vcd.c | 61 ++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/common/utils/T/tracer/to_vcd.c b/common/utils/T/tracer/to_vcd.c index 097fdce932..049282f890 100644 --- a/common/utils/T/tracer/to_vcd.c +++ b/common/utils/T/tracer/to_vcd.c @@ -174,7 +174,8 @@ void usage(void) " -ip connect to given IP address (default %s)\n" " -p connect to given port (default %d)\n" " -b trace as binary (0 off, anything else on)\n" -" -l trace as uint64_t\n", +" -l trace as uint64_t\n" +" -vcd trace all VCD variables and functions\n", DEFAULT_REMOTE_IP, DEFAULT_REMOTE_PORT ); @@ -192,6 +193,20 @@ void force_stop(int x) run = 0; } +vcd_vars *add_var(vcd_vars *vars, int nvars, + char *event, char *arg, char *vcd_name, int is_boolean) +{ + if (nvars % 64 == 0) { + vars = realloc(vars, (nvars+64) * sizeof(vcd_vars)); + if (vars == NULL) abort(); + } + vars[nvars].event = event; + vars[nvars].arg = arg; + vars[nvars].vcd_name = vcd_name; + vars[nvars].boolean = is_boolean; + return vars; +} + int main(int n, char **v) { char *output_filename = NULL; @@ -202,11 +217,12 @@ int main(int n, char **v) int *is_on; int number_of_events; int i; - vcd_vars vars[n]; + vcd_vars *vars = NULL; int nvars = 0; view *vcd_view; event_handler *h; logger *textlog; + int all_vcd = 0; /* write on a socket fails if the other end is closed and we get SIGPIPE */ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort(); @@ -221,19 +237,22 @@ int main(int n, char **v) if (!strcmp(v[i], "-p")) { if (i > n-2) usage(); port = atoi(v[++i]); continue; } if (!strcmp(v[i], "-b")) { if(i>n-4)usage(); - vars[nvars].event = v[++i]; - vars[nvars].arg = v[++i]; - vars[nvars].vcd_name = v[++i]; - vars[nvars++].boolean = 1; + char *event = v[++i]; + char *arg = v[++i]; + char *vcd_name = v[++i]; + vars = add_var(vars, nvars, event, arg, vcd_name, 1); + nvars++; continue; } if (!strcmp(v[i], "-l")) { if(i>n-4)usage(); - vars[nvars].event = v[++i]; - vars[nvars].arg = v[++i]; - vars[nvars].vcd_name = v[++i]; - vars[nvars++].boolean = 0; + char *event = v[++i]; + char *arg = v[++i]; + char *vcd_name = v[++i]; + vars = add_var(vars, nvars, event, arg, vcd_name, 0); + nvars++; continue; } + if (!strcmp(v[i], "-vcd")) { all_vcd = 1; continue; } usage(); } @@ -260,6 +279,28 @@ int main(int n, char **v) /* create the view */ vcd_view = new_view_vcd(); + if (all_vcd) { + /* activate all VCD traces */ + for (i = 0; i < number_of_events; i++) { + int is_boolean; + int prefix_length; + char *name = event_name_from_id(database, i); + char *var_prefix = "VCD_VARIABLE_"; + char *fun_prefix = "VCD_FUNCTION_"; + if (!strncmp(name, var_prefix, strlen(var_prefix))) { + prefix_length = strlen(var_prefix); + is_boolean = 0; + } else if (!strncmp(name, fun_prefix, strlen(fun_prefix))) { + prefix_length = strlen(fun_prefix); + is_boolean = 1; + } else + continue; + vars = add_var(vars, nvars, + name, "value", name+prefix_length, is_boolean); + nvars++; + } + } + /* setup traces */ for (i = 0; i < nvars; i++) { char format[256]; From 19a01f6cb09447349854b88124694fa7304f9378 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 6 Aug 2018 12:26:35 +0200 Subject: [PATCH 045/128] minor: bug fix in T tracer 'to_vcd' --- common/utils/T/tracer/to_vcd.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/utils/T/tracer/to_vcd.c b/common/utils/T/tracer/to_vcd.c index 049282f890..1a67a9d4ff 100644 --- a/common/utils/T/tracer/to_vcd.c +++ b/common/utils/T/tracer/to_vcd.c @@ -304,8 +304,7 @@ int main(int n, char **v) /* setup traces */ for (i = 0; i < nvars; i++) { char format[256]; - if (strlen(vars[i].arg) > 256-3) abort(); - if (strlen(vars[i].vcd_name) > 256-1) abort(); + if (strlen(vars[i].arg) + strlen(vars[i].vcd_name) > 256-16) abort(); sprintf(format, "%c [%s] %s", vars[i].boolean ? 'b' : 'l', vars[i].arg, From 9126c88294f6991fa574f1a47ab953b10ee5f470 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 6 Aug 2018 16:57:15 +0200 Subject: [PATCH 046/128] HACK: let the basic simulator work again A better solution has to be found. --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 6 +++++ .../PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 27 ++++++++++++------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index ea92dbb560..6f1913ff91 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -2428,6 +2428,12 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, } + /* TODO: hack, to be removed. The power is too different from + * previous version. Some more work/validation is needed before + * we switch to the new version. + */ + allocate_REs = allocate_REs_in_RB; + switch (mod_order1) { case 2: qam_table_s1 = NULL; diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index 6e68752cec..f7940c5948 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -1314,13 +1314,17 @@ void dlsch_channel_compensation(int **rxdataF_ext, } for (aarx=0; aarxnb_antennas_rx; aarx++) { - - dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + /* TODO: hack to be removed. There is crash for 1 antenna case, so + * for 1 antenna case, I put back the value 2 as it was before + * Elena's commit. + */ + int x = frame_parms->nb_antennas_rx > 1 ? frame_parms->nb_antennas_rx : 2; + dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*x + aarx][symbol*frame_parms->N_RB_DL*12]; //print_shorts("dl_ch128[0]=",&dl_ch128[0]);*/ - dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*x + aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*x + aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*frame_parms->nb_antennas_rx + aarx][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*x + aarx][symbol*frame_parms->N_RB_DL*12]; for (rb=0; rb2) { @@ -1770,12 +1774,17 @@ void dlsch_channel_compensation_core(int **rxdataF_ext, } for (aarx=0; aarx 1 ? n_rx : 2; - dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*n_rx + aarx][start_point]; - dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*n_rx + aarx][start_point]; - dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*n_rx + aarx][start_point]; + dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*x + aarx][start_point]; + dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*x + aarx][start_point]; + dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*x + aarx][start_point]; rxdataF128 = (__m128i *)&rxdataF_ext[aarx][start_point]; - rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*n_rx + aarx][start_point]; + rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*x + aarx][start_point]; length_mod8 = length&7; if (length_mod8 == 0){ From 43ffecb1a1859f38727c6bf1e58ffca2e3f01d17 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Tue, 7 Aug 2018 09:53:57 +0200 Subject: [PATCH 047/128] remove warnings --- openair1/PHY/INIT/phy_init.h | 2 ++ openair1/PHY/TOOLS/lte_dfts.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h index 8da34fc51c..da4050c848 100644 --- a/openair1/PHY/INIT/phy_init.h +++ b/openair1/PHY/INIT/phy_init.h @@ -373,6 +373,8 @@ void phy_config_request(PHY_Config_t *phy_config); int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf); void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms); +void init_dfts(void); + /** @} */ #endif diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 01c20dbce6..e7a7f1a259 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -8618,8 +8618,8 @@ void init_rad5_rep(int N,int16_t *twa,int16_t *twb,int16_t *twc,int16_t *twd) { } -init_dfts() { - +void init_dfts(void) +{ init_rad4(1024,tw1024); init_rad2(2048,tw2048); init_rad4(4096,tw4096); @@ -9095,7 +9095,7 @@ int main(int argc, char**argv) // LOG_M("x64.m","x64",x,64,1,1); LOG_M("y64.m","y64",y,64,1,1); LOG_M("x64.m","x64",x,64,1,1); - * + */ /* printf("X: "); for (i=0;i<16;i++) From 1cbd60e9c8ee2f939ea26c258bdb3b4275c566a9 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Tue, 7 Aug 2018 10:35:14 +0200 Subject: [PATCH 048/128] remove warning --- openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index f7940c5948..a693cb55e4 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -3987,7 +3987,7 @@ void dlsch_channel_level_median(int **dl_ch_estimates_ext, if (norm_pack < min) min = norm_pack; - dl_ch128+=1; + dl_ch128+=1; } median[aatx*n_rx + aarx] = (max+min)>>1; From eb3b87d9569bcc6229b529a11969c465eb6c19ac Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Wed, 8 Aug 2018 11:58:26 +0200 Subject: [PATCH 049/128] T: bugfix and cleanup - bug fixed in ue and enb tracer: the socket needs to be closed in case of restart - cleanup: fix spacing in T_messages.txt --- common/utils/T/T_messages.txt | 2 ++ common/utils/T/tracer/enb.c | 1 + common/utils/T/tracer/ue.c | 1 + 3 files changed, 4 insertions(+) diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index fd4425063b..9432155147 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -749,6 +749,7 @@ ID = LEGACY_OSA_TRACE DESC = OSA legacy logs - trace level GROUP = ALL:LEGACY_OSA:LEGACY_GROUP_TRACE:LEGACY FORMAT = string,log + ID = LEGACY_SIM_INFO DESC = SIM legacy logs - info level GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_INFO:LEGACY @@ -769,6 +770,7 @@ ID = LEGACY_SIM_TRACE DESC = SIM legacy logs - trace level GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_TRACE:LEGACY FORMAT = string,log + # this is a bad hack but I won't fix (function util_print_hex_octets # in openairinterface5g/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c # does funky things with the LOG_x macros but we work on the C pre-processor diff --git a/common/utils/T/tracer/enb.c b/common/utils/T/tracer/enb.c index a30366faf1..ea499a68f8 100644 --- a/common/utils/T/tracer/enb.c +++ b/common/utils/T/tracer/enb.c @@ -878,6 +878,7 @@ int main(int n, char **v) restart: clear_remote_config(); + if (enb_data.socket != -1) close(enb_data.socket); enb_data.socket = connect_to(ip, port); /* send the first message - activate selected traces */ diff --git a/common/utils/T/tracer/ue.c b/common/utils/T/tracer/ue.c index 6a7d03c897..7b03210cd2 100644 --- a/common/utils/T/tracer/ue.c +++ b/common/utils/T/tracer/ue.c @@ -857,6 +857,7 @@ int main(int n, char **v) restart: clear_remote_config(); + if (ue_data.socket != -1) close(ue_data.socket); ue_data.socket = connect_to(ip, port); /* send the first message - activate selected traces */ From fdd4366daf19c8e4c0c2f0068d65df07880f5a26 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Wed, 8 Aug 2018 12:32:56 +0200 Subject: [PATCH 050/128] T: add a 'multi' tracer This tracer allows the connection of several tracers to one tracee. To use the multi tracer: - run the tracee as usual, eg. ./lte-softmodem -O xxxx.conf --T_stdout 0 - run the multi tracer: ./multi -d ../T_messages.txt - connect other tracers to the multi tracer: - ./enb -d ../T_messages.txt -p 2022 - ./textlog -d ../T_messages.txt -p 2022 - etc. By default the multi tracer connects to the tracee to the port 2021, as for any other tracer. Then it accepts connections from other tracers on the port 2022. This can be changed with parameters on the command line. The tracee and the other tracers can be stopped/started at any time. --- common/utils/T/.gitignore | 1 + common/utils/T/tracer/Makefile | 7 +- common/utils/T/tracer/config.c | 6 + common/utils/T/tracer/config.h | 1 + common/utils/T/tracer/multi.c | 379 +++++++++++++++++++++++++++++++++ common/utils/T/tracer/utils.c | 67 ++++-- common/utils/T/tracer/utils.h | 3 + 7 files changed, 443 insertions(+), 21 deletions(-) create mode 100644 common/utils/T/tracer/multi.c diff --git a/common/utils/T/.gitignore b/common/utils/T/.gitignore index 8177805924..d754ff7c38 100644 --- a/common/utils/T/.gitignore +++ b/common/utils/T/.gitignore @@ -15,4 +15,5 @@ tracer/to_vcd tracer/extract_input_subframe tracer/extract_output_subframe tracer/extract +tracer/multi tracee/tracee diff --git a/common/utils/T/tracer/Makefile b/common/utils/T/tracer/Makefile index 1c4a77587c..94902b094a 100644 --- a/common/utils/T/tracer/Makefile +++ b/common/utils/T/tracer/Makefile @@ -7,7 +7,7 @@ LIBS=-lm XLIBS=-lX11 -lpng -lXft all: record replay extract_config textlog enb ue vcd macpdu2wireshark \ - extract_input_subframe extract_output_subframe to_vcd extract + extract_input_subframe extract_output_subframe to_vcd extract multi record: utils.o record.o database.o config.o $(CC) $(CFLAGS) -o record $^ $(LIBS) @@ -57,6 +57,9 @@ macpdu2wireshark: macpdu2wireshark.o database.o utils.o handler.o event.o \ config.o $(CC) $(CFLAGS) -o $@ $^ $(LIBS) +multi: multi.o utils.o database.o config.o + $(CC) $(CFLAGS) -o multi $^ $(LIBS) + .PHONY: all gui/gui.a view/view.a logger/logger.a filter/filter.a gui/gui.a: @@ -77,7 +80,7 @@ filter/filter.a: clean: rm -f *.o core tracer_remote textlog enb ue vcd record replay rm -f extract_config macpdu2wireshark extract_input_subframe - rm -f extract_output_subframe to_vcd extract + rm -f extract_output_subframe to_vcd extract multi cd gui && make clean cd view && make clean cd logger && make clean diff --git a/common/utils/T/tracer/config.c b/common/utils/T/tracer/config.c index f88966ed79..723902ec9c 100644 --- a/common/utils/T/tracer/config.c +++ b/common/utils/T/tracer/config.c @@ -60,3 +60,9 @@ void verify_config(void) abort(); } } + +void get_local_config(char **txt, int *len) +{ + *txt = local; + *len = local_size; +} diff --git a/common/utils/T/tracer/config.h b/common/utils/T/tracer/config.h index f90869eb66..07290c71a3 100644 --- a/common/utils/T/tracer/config.h +++ b/common/utils/T/tracer/config.h @@ -5,5 +5,6 @@ void clear_remote_config(void); void append_received_config_chunk(char *buf, int length); void load_config_file(char *filename); void verify_config(void); +void get_local_config(char **txt, int *len); #endif /* _CONFIG_H_ */ diff --git a/common/utils/T/tracer/multi.c b/common/utils/T/tracer/multi.c new file mode 100644 index 0000000000..7d3fd0f344 --- /dev/null +++ b/common/utils/T/tracer/multi.c @@ -0,0 +1,379 @@ +#include +#include +#include +#include +#include +#include +#include +#include "database.h" +#include "utils.h" +#include "../T.h" +#include "config.h" + +#define DEFAULT_LOCAL_PORT 2022 + +typedef struct { + int id; /* increases at each new tracer's connection */ + int s; /* socket */ + int *is_on; /* local vision of is_on for this tracer */ + int poll_id; /* -1: invalid, otherwise index in fds array */ +} ti_t; + +typedef struct { + ti_t *ti; /* data for tracers */ + int ti_size; + int ti_maxsize; +} multi_t; + +void set_is_on(int *is_on, int pos, int val) +{ + if (val) is_on[pos]++; else is_on[pos]--; + /* TODO: remove check? */ + if (is_on[pos] < 0) { printf("%s:%d:nonono\n",__FILE__,__LINE__); abort(); } +} + +int send_messages_txt(int s, char *T_messages_txt, int T_messages_txt_len) +{ + char buf[T_BUFFER_MAX]; + char *T_LOCAL_buf = buf; + int32_t T_LOCAL_size; + unsigned char *src; + int src_len; + + /* trace T_message.txt + * Send several messages -1 with content followed by message -2. + */ + src = (unsigned char *)T_messages_txt; + src_len = T_messages_txt_len; + while (src_len) { + int send_size = src_len; + if (send_size > T_PAYLOAD_MAXSIZE - sizeof(int)) + send_size = T_PAYLOAD_MAXSIZE - sizeof(int); + /* TODO: be careful, we use internal T stuff, to rewrite? */ + T_LOCAL_size = 0; + T_HEADER(T_ID(-1)); + T_PUT_buffer(1, ((T_buffer){addr:(src), length:(send_size)})); + if (socket_send(s, &T_LOCAL_size, 4) == -1) return -1; + if (socket_send(s, buf, T_LOCAL_size) == -1) return -1; + src += send_size; + src_len -= send_size; + } + T_LOCAL_size = 0; + T_HEADER(T_ID(-2)); + if (socket_send(s, &T_LOCAL_size, 4) == -1) return -1; + return socket_send(s, buf, T_LOCAL_size); +} + +void new_tracer(multi_t *m, int s, int is_on_size, char *t, int t_size, int id) +{ + if (send_messages_txt(s, t, t_size) == -1) { + printf("error sending T_messages.txt to new tracer %d => remove tracer\n", + id); + return; + } + if (m->ti_size == m->ti_maxsize) { + m->ti_maxsize += 64; + m->ti = realloc(m->ti, m->ti_maxsize * sizeof(ti_t)); + if (m->ti == NULL) abort(); + } + m->ti[m->ti_size].id = id; + m->ti[m->ti_size].s = s; + m->ti[m->ti_size].is_on = calloc(is_on_size, sizeof(int)); + if (m->ti[m->ti_size].is_on == NULL) abort(); + m->ti[m->ti_size].poll_id = -1; + m->ti_size++; +} + +void remove_tracer(multi_t *m, int t) +{ + free(m->ti[t].is_on); + shutdown(m->ti[t].s, SHUT_RDWR); + close(m->ti[t].s); + m->ti_size--; + memmove(&m->ti[t], &m->ti[t+1], (m->ti_size - t) * sizeof(ti_t)); +} + +int send_is_on(int socket, int number_of_events, int *is_on) +{ + int i; + char mt = 1; + if (socket_send(socket, &mt, 1) == -1 || + socket_send(socket, &number_of_events, sizeof(int)) == -1) return -1; + for (i = 0; i < number_of_events; i++) { + int v = is_on[i] ? 1 : 0; + if (socket_send(socket, &v, sizeof(int)) == -1) return -1; + } + return 0; +} + +int read_tracee(int s, OBUF *ebuf, int *_type, int32_t *_length) +{ + int type; + int32_t length; + char *v; + int vpos = 0; + + if (fullread(s, &length, 4) == -1) return -1; + if (ebuf->omaxsize < length) { + ebuf->omaxsize = (length + 65535) & ~65535; + ebuf->obuf = realloc(ebuf->obuf, ebuf->omaxsize); + if (ebuf->obuf == NULL) { printf("out of memory\n"); exit(1); } + } + v = ebuf->obuf; + memcpy(v+vpos, &length, 4); + vpos += 4; +#ifdef T_SEND_TIME + if (fullread(s,v+vpos,sizeof(struct timespec))==-1) return -1; + vpos += sizeof(struct timespec); + length -= sizeof(struct timespec); +#endif + if (fullread(s, &type, sizeof(int)) == -1) return -1; + memcpy(v+vpos, &type, sizeof(int)); + vpos += sizeof(int); + length -= sizeof(int); + if (fullread(s, v+vpos, length) == -1) return -1; + vpos += length; + + ebuf->osize = vpos; + + *_type = type; + *_length = length; + return 0; +} + +void forward_event(multi_t *m, int number_of_events, OBUF *ebuf, int type) +{ + int i; + + if (type < 0 || type >= number_of_events) + { printf("error: bad type of event to forward %d\n", type); abort(); } + + for (i = 0; i < m->ti_size; i++) { + if (!m->ti[i].is_on[type]) continue; + if (socket_send(m->ti[i].s, ebuf->obuf, ebuf->osize) == -1) + printf("warning: error forwarding event to tracer %d\n", m->ti[i].id); + } +} + +int connect_to_tracee(char *ip, int port, int number_of_events, int *is_on) +{ + int s; + + printf("connecting to %s:%d\n", ip, port); + + s = try_connect_to(ip, port); + if (s == -1) return -1; + + if (send_is_on(s, number_of_events, is_on) == -1) { + shutdown(s, SHUT_RDWR); + close(s); + return -1; + } + + return s; +} + +void usage(void) +{ + printf( +"options:\n" +" -d this option is mandatory\n" +" -ip connect to given IP address (default %s)\n" +" -p connect to given port (default %d)\n" +" -lp listen on local port (default %d)\n", + DEFAULT_REMOTE_IP, + DEFAULT_REMOTE_PORT, + DEFAULT_LOCAL_PORT + ); + exit(1); +} + +int main(int n, char **v) +{ + char *database_filename = NULL; + void *database; + char *ip = DEFAULT_REMOTE_IP; + int port = DEFAULT_REMOTE_PORT; + int local_port = DEFAULT_LOCAL_PORT; + int *is_on; + int number_of_events; + int i, j; + char *T_messages_txt; + int T_messages_txt_len; + int l; /* listen socket for tracers' connections */ + int s = -1; /* socket connected to tracee. -1 if not connected */ + multi_t m; + int is_on_changed; + int current_nfd; + struct pollfd *fds = NULL; + int next_id = 0; + + memset(&m, 0, sizeof(m)); + + /* write on a socket fails if the other end is closed and we get SIGPIPE */ + if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort(); + + for (i = 1; i < n; i++) { + if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage(); + if (!strcmp(v[i], "-d")) + { if (i > n-2) usage(); database_filename = v[++i]; continue; } + if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; } + if (!strcmp(v[i], "-p")) + { if (i > n-2) usage(); port = atoi(v[++i]); continue; } + if (!strcmp(v[i], "-lp")) + { if (i > n-2) usage(); local_port = atoi(v[++i]); continue; } + usage(); + } + + if (database_filename == NULL) { + printf("ERROR: provide a database file (-d)\n"); + exit(1); + } + + database = parse_database(database_filename); + + load_config_file(database_filename); + get_local_config(&T_messages_txt, &T_messages_txt_len); + + number_of_events = number_of_ids(database); + is_on = calloc(number_of_events, sizeof(int)); + if (is_on == NULL) abort(); + + /* create listener socket */ + l = create_listen_socket("0.0.0.0", local_port); + + OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL }; + + current_nfd = 0; + + while (1) { + int nfd; + int timeout; + + if (s == -1) s = connect_to_tracee(ip, port, number_of_events, is_on); + + /* poll on s (if there), l, and all tracers' sockets */ + nfd = 1 + (s != -1) + m.ti_size; + if (nfd != current_nfd) { + current_nfd = nfd; + free(fds); + fds = calloc(nfd, sizeof(struct pollfd)); + if (fds == NULL) { perror("calloc"); exit(1); } + } + i = 0; + fds[i].fd = l; + fds[i].events = POLLIN; + i++; + if (s != -1) { + fds[i].fd = s; + fds[i].events = POLLIN; + i++; + } + for (j = 0; j < m.ti_size; j++) { + m.ti[j].poll_id = i; + fds[i].fd = m.ti[j].s; + fds[i].events = POLLIN; + i++; + } + if (s == -1) timeout = 1000; else timeout = -1; + if (poll(fds, nfd, timeout) == -1) { perror("poll"); exit(1); } + + if (fds[0].revents & ~POLLIN) { + printf("TODO: error on listen socket?\n"); + exit(1); + } + + /* new tracer connecting? */ + if (fds[0].revents & POLLIN) { + int t; + printf("tracer %d connecting\n", next_id); + t = socket_accept(l); + if (t == -1) perror("accept"); + else new_tracer(&m, t, number_of_events, + T_messages_txt, T_messages_txt_len, next_id); + next_id++; + } + + if (s != -1 && fds[1].revents & ~POLLIN) { + printf("TODO: error on tracee socket?\n"); + exit(1); + } + + /* data from tracee */ + if (s != -1 && fds[1].revents & POLLIN) { + int type; + int32_t length; + if (read_tracee(s, &ebuf, &type, &length) == -1) { + clear_remote_config(); + shutdown(s, SHUT_RDWR); + close(s); + s = -1; + } else { + if (type == -1) + append_received_config_chunk(ebuf.obuf+ebuf.osize-length, length); + else if (type == -2) verify_config(); + else forward_event(&m, number_of_events, &ebuf, type); + } + } + + /* status of each tracer */ + is_on_changed = 0; + for (j = 0; j < m.ti_size; j++) { + int l; + int s; + int *t_is_on; + if (m.ti[j].poll_id == -1) continue; + i = m.ti[j].poll_id; + s = m.ti[j].s; + t_is_on = m.ti[j].is_on; + if (fds[i].revents & (POLLHUP | POLLERR)) goto tracer_error; + /* error? */ + if (fds[i].revents & ~POLLIN) { + printf("TODO: error with tracer?\n"); + exit(1); + } + /* data in */ + if (fds[i].revents & POLLIN) { + char t; + int len; + int v; + if (fullread(s, &t, 1) != 1) goto tracer_error; + switch (t) { + case 0: + is_on_changed = 1; + if (fullread(s, &len, sizeof(int)) == -1) goto tracer_error; + for (l = 0; l < len; l++) { + if (fullread(s, &v, sizeof(int)) == -1) goto tracer_error; + if (v < 0 || v >= number_of_events) goto tracer_error; + t_is_on[v] = 1 - t_is_on[v]; + set_is_on(is_on, v, t_is_on[v]); + } + break; + case 1: + is_on_changed = 1; + if (fullread(s, &len, sizeof(int)) == -1) goto tracer_error; + if (len < 0 || len > number_of_events) goto tracer_error; + for (l = 0; l < len; l++) { + if (fullread(s, &v, sizeof(int)) == -1) goto tracer_error; + if (v < 0 || v > 1) goto tracer_error; + if (t_is_on[l] != v) set_is_on(is_on, l, v); + t_is_on[l] = v; + } + break; + case 2: break; + default: printf("error: unhandled message type %d\n", t); //abort(); + } + } + continue; +tracer_error: + printf("remove tracer %d\n", m.ti[j].id); + for (l = 0; l < number_of_events; l++) + if (m.ti[j].is_on[l]) { is_on_changed = 1; set_is_on(is_on, l, 0); } + remove_tracer(&m, j); + j--; + } + if (is_on_changed && s != -1) send_is_on(s, number_of_events, is_on); + } + + return 0; +} diff --git a/common/utils/T/tracer/utils.c b/common/utils/T/tracer/utils.c index 5071546735..7f58b6f5aa 100644 --- a/common/utils/T/tracer/utils.c +++ b/common/utils/T/tracer/utils.c @@ -79,6 +79,36 @@ list *list_append(list *l, void *data) /* socket */ /****************************************************************************/ +int create_listen_socket(char *addr, int port) +{ + struct sockaddr_in a; + int s; + int v; + + s = socket(AF_INET, SOCK_STREAM, 0); + if (s == -1) { perror("socket"); exit(1); } + v = 1; + if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &v, sizeof(int))) + { perror("setsockopt"); exit(1); } + + a.sin_family = AF_INET; + a.sin_port = htons(port); + a.sin_addr.s_addr = inet_addr(addr); + + if (bind(s, (struct sockaddr *)&a, sizeof(a))) { perror("bind"); exit(1); } + if (listen(s, 5)) { perror("listen"); exit(1); } + + return s; +} + +int socket_accept(int s) +{ + struct sockaddr_in a; + socklen_t alen; + alen = sizeof(a); + return accept(s, (struct sockaddr *)&a, &alen); +} + int socket_send(int socket, void *buffer, int size) { char *x = buffer; @@ -94,26 +124,13 @@ int socket_send(int socket, void *buffer, int size) int get_connection(char *addr, int port) { - struct sockaddr_in a; - socklen_t alen; int s, t; printf("waiting for connection on %s:%d\n", addr, port); - s = socket(AF_INET, SOCK_STREAM, 0); - if (s == -1) { perror("socket"); exit(1); } - t = 1; - if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &t, sizeof(int))) - { perror("setsockopt"); exit(1); } + s = create_listen_socket(addr, port); - a.sin_family = AF_INET; - a.sin_port = htons(port); - a.sin_addr.s_addr = inet_addr(addr); - - if (bind(s, (struct sockaddr *)&a, sizeof(a))) { perror("bind"); exit(1); } - if (listen(s, 5)) { perror("bind"); exit(1); } - alen = sizeof(a); - t = accept(s, (struct sockaddr *)&a, &alen); + t = socket_accept(s); if (t == -1) { perror("accept"); exit(1); } close(s); @@ -137,14 +154,11 @@ int fullread(int fd, void *_buf, int count) return ret; } -int connect_to(char *addr, int port) +int try_connect_to(char *addr, int port) { int s; struct sockaddr_in a; - printf("connecting to %s:%d\n", addr, port); - -again: s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1) { perror("socket"); exit(1); } @@ -155,6 +169,21 @@ again: if (connect(s, (struct sockaddr *)&a, sizeof(a)) == -1) { perror("connect"); close(s); + return -1; + } + + return s; +} + +int connect_to(char *addr, int port) +{ + int s; + + printf("connecting to %s:%d\n", addr, port); + +again: + s = try_connect_to(addr, port); + if (s == -1) { printf("trying again in 1s\n"); sleep(1); goto again; diff --git a/common/utils/T/tracer/utils.h b/common/utils/T/tracer/utils.h index 3be6cfe1a7..6784117fa6 100644 --- a/common/utils/T/tracer/utils.h +++ b/common/utils/T/tracer/utils.h @@ -24,11 +24,14 @@ list *list_append(list *l, void *data); #define DEFAULT_REMOTE_IP "127.0.0.1" #define DEFAULT_REMOTE_PORT 2021 +int create_listen_socket(char *addr, int port); +int socket_accept(int s); /* socket_send: return 0 if okay, -1 on error */ int socket_send(int socket, void *buffer, int size); int get_connection(char *addr, int port); /* fullread: return length read if okay (that is: 'count'), -1 on error */ int fullread(int fd, void *_buf, int count); +int try_connect_to(char *addr, int port); int connect_to(char *addr, int port); /****************************************************************************/ From 5b17b036ba35e2529e79f56cc46c5bab8dbb14fd Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Wed, 8 Aug 2018 15:30:24 +0200 Subject: [PATCH 051/128] T: improve to_vcd tracer Make it compatible with 'template' gtwave files as found in openair's repository. The type VCD_NAME was added to the VCD IDs in T_messages.txt. The database processing code was adapted to use it. The tracer to_vcd was adapted to use it and render the produced vcd output compatible with the 'template' gtkwave files. When running to_vcd, do not forget to pass -vcd to use this feature. --- common/utils/T/T_messages.txt | 319 +++++++++++++++++++++++++++++++ common/utils/T/tracer/database.c | 15 ++ common/utils/T/tracer/database.h | 1 + common/utils/T/tracer/to_vcd.c | 59 +++++- 4 files changed, 385 insertions(+), 9 deletions(-) diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index 9432155147..7ecf551cbf 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -955,514 +955,642 @@ ID = VCD_VARIABLE_FRAME_NUMBER_TX0_ENB DESC = VCD variable FRAME_NUMBER_TX0_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_TX0_eNB ID = VCD_VARIABLE_FRAME_NUMBER_TX1_ENB DESC = VCD variable FRAME_NUMBER_TX1_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_TX1_eNB ID = VCD_VARIABLE_FRAME_NUMBER_RX0_ENB DESC = VCD variable FRAME_NUMBER_RX0_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_RX0_eNB ID = VCD_VARIABLE_FRAME_NUMBER_RX1_ENB DESC = VCD variable FRAME_NUMBER_RX1_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_RX1_eNB ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_ENB DESC = VCD variable SUBFRAME_NUMBER_TX0_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_number_TX0_eNB ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_ENB DESC = VCD variable SUBFRAME_NUMBER_TX1_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_number_TX1_eNB ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_ENB DESC = VCD variable SUBFRAME_NUMBER_RX0_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_number_RX0_eNB ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB DESC = VCD variable SUBFRAME_NUMBER_RX1_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_number_RX1_eNB ID = VCD_VARIABLE_FRAME_NUMBER_TX0_RU DESC = VCD variable FRAME_NUMBER_TX0_RU GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_TX0_RU ID = VCD_VARIABLE_FRAME_NUMBER_TX1_RU DESC = VCD variable FRAME_NUMBER_TX1_RU GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_TX1_RU ID = VCD_VARIABLE_FRAME_NUMBER_RX0_RU DESC = VCD variable FRAME_NUMBER_RX0_RU GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_RX0_RU ID = VCD_VARIABLE_FRAME_NUMBER_RX1_RU DESC = VCD variable FRAME_NUMBER_RX1_RU GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_RX1_RU ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_RU DESC = VCD variable SUBFRAME_NUMBER_TX0_RU GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_number_TX0_RU ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_RU DESC = VCD variable SUBFRAME_NUMBER_TX1_RU GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_number_TX1_RU ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_RU DESC = VCD variable SUBFRAME_NUMBER_RX0_RU GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_number_RX0_RU ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_RU DESC = VCD variable SUBFRAME_NUMBER_RX1_RU GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_number_RX1_RU ID = VCD_VARIABLE_RUNTIME_TX_ENB DESC = VCD variable RUNTIME_TX_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = runtime_TX_eNB ID = VCD_VARIABLE_RUNTIME_RX_ENB DESC = VCD variable RUNTIME_RX_ENB GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = runtime_RX_eNB ID = VCD_VARIABLE_FRAME_NUMBER_TX0_UE DESC = VCD variable FRAME_NUMBER_TX0_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_TX0_UE ID = VCD_VARIABLE_FRAME_NUMBER_TX1_UE DESC = VCD variable FRAME_NUMBER_TX1_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_TX1_UE ID = VCD_VARIABLE_FRAME_NUMBER_RX0_UE DESC = VCD variable FRAME_NUMBER_RX0_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_RX0_UE ID = VCD_VARIABLE_FRAME_NUMBER_RX1_UE DESC = VCD variable FRAME_NUMBER_RX1_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = frame_number_RX1_UE ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_UE DESC = VCD variable SUBFRAME_NUMBER_TX0_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_TX0_UE ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_UE DESC = VCD variable SUBFRAME_NUMBER_TX1_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_TX1_UE ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_UE DESC = VCD variable SUBFRAME_NUMBER_RX0_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_RX0_UE ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_UE DESC = VCD variable SUBFRAME_NUMBER_RX1_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = subframe_RX1_UE ID = VCD_VARIABLE_UE_RX_OFFSET DESC = VCD variable UE_RX_OFFSET GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue_rx_offset ID = VCD_VARIABLE_DIFF DESC = VCD variable DIFF GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = diff2 ID = VCD_VARIABLE_HW_SUBFRAME DESC = VCD variable HW_SUBFRAME GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = hw_subframe ID = VCD_VARIABLE_HW_FRAME DESC = VCD variable HW_FRAME GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = hw_frame ID = VCD_VARIABLE_HW_SUBFRAME_RX DESC = VCD variable HW_SUBFRAME_RX GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = hw_subframe_rx ID = VCD_VARIABLE_HW_FRAME_RX DESC = VCD variable HW_FRAME_RX GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = hw_frame_rx ID = VCD_VARIABLE_TXCNT DESC = VCD variable TXCNT GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = txcnt ID = VCD_VARIABLE_RXCNT DESC = VCD variable RXCNT GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = rxcnt ID = VCD_VARIABLE_TRX_TS DESC = VCD variable TRX_TS GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = trx_ts ID = VCD_VARIABLE_TRX_TST DESC = VCD variable TRX_TST GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = trx_tst ID = VCD_VARIABLE_TRX_TS_UE DESC = VCD variable TRX_TS_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = trx_ts_ue ID = VCD_VARIABLE_TRX_TST_UE DESC = VCD variable TRX_TST_UE GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = trx_tst_ue ID = VCD_VARIABLE_TRX_WRITE_FLAGS DESC = VCD variable TRX_WRITE_FLAGS GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = trx_write_flags ID = VCD_VARIABLE_TX_TS DESC = VCD variable TX_TS GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = tx_ts ID = VCD_VARIABLE_RX_TS DESC = VCD variable RX_TS GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = rx_ts ID = VCD_VARIABLE_RX_HWCNT DESC = VCD variable RX_HWCNT GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = hw_cnt_rx ID = VCD_VARIABLE_RX_LHWCNT DESC = VCD variable RX_LHWCNT GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = lhw_cnt_rx ID = VCD_VARIABLE_TX_HWCNT DESC = VCD variable TX_HWCNT GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = hw_cnt_tx ID = VCD_VARIABLE_TX_LHWCNT DESC = VCD variable TX_LHWCNT GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = lhw_cnt_tx ID = VCD_VARIABLE_RX_PCK DESC = VCD variable RX_PCK GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = pck_rx ID = VCD_VARIABLE_TX_PCK DESC = VCD variable TX_PCK GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = pck_tx ID = VCD_VARIABLE_RX_SEQ_NUM DESC = VCD variable RX_SEQ_NUM GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = rx_seq_num ID = VCD_VARIABLE_RX_SEQ_NUM_PRV DESC = VCD variable RX_SEQ_NUM_PRV GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = rx_seq_num_prv ID = VCD_VARIABLE_TX_SEQ_NUM DESC = VCD variable TX_SEQ_NUM GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = tx_seq_num ID = VCD_VARIABLE_CNT DESC = VCD variable CNT GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = cnt ID = VCD_VARIABLE_DUMMY_DUMP DESC = VCD variable DUMMY_DUMP GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = dummy_dump ID = VCD_VARIABLE_ITTI_SEND_MSG DESC = VCD variable ITTI_SEND_MSG GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = itti_send_msg ID = VCD_VARIABLE_ITTI_POLL_MSG DESC = VCD variable ITTI_POLL_MSG GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = itti_poll_msg ID = VCD_VARIABLE_ITTI_RECV_MSG DESC = VCD variable ITTI_RECV_MSG GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = itti_recv_msg ID = VCD_VARIABLE_ITTI_ALLOC_MSG DESC = VCD variable ITTI_ALLOC_MSG GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = itti_alloc_msg ID = VCD_VARIABLE_MP_ALLOC DESC = VCD variable MP_ALLOC GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = mp_alloc ID = VCD_VARIABLE_MP_FREE DESC = VCD variable MP_FREE GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = mp_free ID = VCD_VARIABLE_UE_INST_CNT_RX DESC = VCD variable UE_INST_CNT_RX GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue_inst_cnt_rx ID = VCD_VARIABLE_UE_INST_CNT_TX DESC = VCD variable UE_INST_CNT_TX GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue_inst_cnt_tx ID = VCD_VARIABLE_DCI_INFO DESC = VCD variable DCI_INFO GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = dci_info ID = VCD_VARIABLE_UE0_BSR DESC = VCD variable UE0_BSR GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_BSR ID = VCD_VARIABLE_UE0_BO DESC = VCD variable UE0_BO GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_BO ID = VCD_VARIABLE_UE0_SCHEDULED DESC = VCD variable UE0_SCHEDULED GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_scheduled ID = VCD_VARIABLE_UE0_TIMING_ADVANCE DESC = VCD variable UE0_TIMING_ADVANCE GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_timing_advance ID = VCD_VARIABLE_UE0_SR_ENERGY DESC = VCD variable UE0_SR_ENERGY GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SR_ENERGY ID = VCD_VARIABLE_UE0_SR_THRES DESC = VCD variable UE0_SR_THRES GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SR_THRES ID = VCD_VARIABLE_UE0_RSSI0 DESC = VCD variable UE0_RSSI0 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_rssi0 ID = VCD_VARIABLE_UE0_RSSI1 DESC = VCD variable UE0_RSSI1 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_rssi1 ID = VCD_VARIABLE_UE0_RSSI2 DESC = VCD variable UE0_RSSI2 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_rssi2 ID = VCD_VARIABLE_UE0_RSSI3 DESC = VCD variable UE0_RSSI3 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_rssi3 ID = VCD_VARIABLE_UE0_RSSI4 DESC = VCD variable UE0_RSSI4 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_rssi4 ID = VCD_VARIABLE_UE0_RSSI5 DESC = VCD variable UE0_RSSI5 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_rssi5 ID = VCD_VARIABLE_UE0_RSSI6 DESC = VCD variable UE0_RSSI6 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_rssi6 ID = VCD_VARIABLE_UE0_RSSI7 DESC = VCD variable UE0_RSSI7 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_rssi7 ID = VCD_VARIABLE_UE0_RES0 DESC = VCD variable UE0_RES0 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_res0 ID = VCD_VARIABLE_UE0_RES1 DESC = VCD variable UE0_RES1 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_res1 ID = VCD_VARIABLE_UE0_RES2 DESC = VCD variable UE0_RES2 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_res2 ID = VCD_VARIABLE_UE0_RES3 DESC = VCD variable UE0_RES3 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_res3 ID = VCD_VARIABLE_UE0_RES4 DESC = VCD variable UE0_RES4 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_res4 ID = VCD_VARIABLE_UE0_RES5 DESC = VCD variable UE0_RES5 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_res5 ID = VCD_VARIABLE_UE0_RES6 DESC = VCD variable UE0_RES6 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_res6 ID = VCD_VARIABLE_UE0_RES7 DESC = VCD variable UE0_RES7 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_res7 ID = VCD_VARIABLE_UE0_MCS0 DESC = VCD variable UE0_MCS0 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_MCS0 ID = VCD_VARIABLE_UE0_MCS1 DESC = VCD variable UE0_MCS1 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_MCS1 ID = VCD_VARIABLE_UE0_MCS2 DESC = VCD variable UE0_MCS2 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_MCS2 ID = VCD_VARIABLE_UE0_MCS3 DESC = VCD variable UE0_MCS3 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_MCS3 ID = VCD_VARIABLE_UE0_MCS4 DESC = VCD variable UE0_MCS4 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_MCS4 ID = VCD_VARIABLE_UE0_MCS5 DESC = VCD variable UE0_MCS5 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_MCS5 ID = VCD_VARIABLE_UE0_MCS6 DESC = VCD variable UE0_MCS6 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_MCS6 ID = VCD_VARIABLE_UE0_MCS7 DESC = VCD variable UE0_MCS7 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_MCS7 ID = VCD_VARIABLE_UE0_RB0 DESC = VCD variable UE0_RB0 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_RB0 ID = VCD_VARIABLE_UE0_RB1 DESC = VCD variable UE0_RB1 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_RB1 ID = VCD_VARIABLE_UE0_RB2 DESC = VCD variable UE0_RB2 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_RB2 ID = VCD_VARIABLE_UE0_RB3 DESC = VCD variable UE0_RB3 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_RB3 ID = VCD_VARIABLE_UE0_RB4 DESC = VCD variable UE0_RB4 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_RB4 ID = VCD_VARIABLE_UE0_RB5 DESC = VCD variable UE0_RB5 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_RB5 ID = VCD_VARIABLE_UE0_RB6 DESC = VCD variable UE0_RB6 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_RB6 ID = VCD_VARIABLE_UE0_RB7 DESC = VCD variable UE0_RB7 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_RB7 ID = VCD_VARIABLE_UE0_ROUND0 DESC = VCD variable UE0_ROUND0 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_ROUND0 ID = VCD_VARIABLE_UE0_ROUND1 DESC = VCD variable UE0_ROUND1 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_ROUND1 ID = VCD_VARIABLE_UE0_ROUND2 DESC = VCD variable UE0_ROUND2 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_ROUND2 ID = VCD_VARIABLE_UE0_ROUND3 DESC = VCD variable UE0_ROUND3 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_ROUND3 ID = VCD_VARIABLE_UE0_ROUND4 DESC = VCD variable UE0_ROUND4 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_ROUND4 ID = VCD_VARIABLE_UE0_ROUND5 DESC = VCD variable UE0_ROUND5 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_ROUND5 ID = VCD_VARIABLE_UE0_ROUND6 DESC = VCD variable UE0_ROUND6 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_ROUND6 ID = VCD_VARIABLE_UE0_ROUND7 DESC = VCD variable UE0_ROUND7 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_ROUND7 ID = VCD_VARIABLE_UE0_SFN0 DESC = VCD variable UE0_SFN0 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SFN0 ID = VCD_VARIABLE_UE0_SFN1 DESC = VCD variable UE0_SFN1 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SFN1 ID = VCD_VARIABLE_UE0_SFN2 DESC = VCD variable UE0_SFN2 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SFN2 ID = VCD_VARIABLE_UE0_SFN3 DESC = VCD variable UE0_SFN3 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SFN3 ID = VCD_VARIABLE_UE0_SFN4 DESC = VCD variable UE0_SFN4 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SFN4 ID = VCD_VARIABLE_UE0_SFN5 DESC = VCD variable UE0_SFN5 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SFN5 ID = VCD_VARIABLE_UE0_SFN6 DESC = VCD variable UE0_SFN6 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SFN6 ID = VCD_VARIABLE_UE0_SFN7 DESC = VCD variable UE0_SFN7 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_SFN7 ID = VCD_VARIABLE_SEND_IF4_SYMBOL DESC = VCD variable SEND_IF4_SYMBOL GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = send_if4_symbol ID = VCD_VARIABLE_RECV_IF4_SYMBOL DESC = VCD variable RECV_IF4_SYMBOL GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = recv_if4_symbol ID = VCD_VARIABLE_SEND_IF5_PKT_ID DESC = VCD variable SEND_IF5_PKT_ID GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = send_if5_pkt_id ID = VCD_VARIABLE_RECV_IF5_PKT_ID DESC = VCD variable RECV_IF5_PKT_ID GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = recv_if5_pkt_id ID = VCD_VARIABLE_UE_PDCP_FLUSH_SIZE DESC = VCD variable UE_PDCP_FLUSH_SIZE GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue_pdcp_flush_size ID = VCD_VARIABLE_UE_PDCP_FLUSH_ERR DESC = VCD variable UE_PDCP_FLUSH_ERR GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue_pdcp_flush_err ID = VCD_VARIABLE_UE0_TRX_READ_NS DESC = VCD variable UE0_TRX_READ_NS GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_trx_read_ns ID = VCD_VARIABLE_UE0_TRX_WRITE_NS DESC = VCD variable UE0_TRX_WRITE_NS GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_trx_write_ns ID = VCD_VARIABLE_UE0_TRX_READ_NS_MISSING DESC = VCD variable UE0_TRX_READ_NS_MISSING GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_trx_read_ns_missing ID = VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING DESC = VCD variable UE0_TRX_WRITE_NS_MISSING GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ue0_trx_write_ns_missing ID = VCD_VARIABLE_CPUID_ENB_THREAD_RXTX DESC = VCD variable CPUID_ENB_THREAD_RXTX GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = enb_thread_rxtx_CPUID ID = VCD_VARIABLE_CPUID_RU_THREAD DESC = VCD variable CPUID_RU_THREAD GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ru_thread_CPUID ID = VCD_VARIABLE_CPUID_RU_THREAD_TX DESC = VCD variable CPUID_RU_THREAD_TX GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value + VCD_NAME = ru_thread_tx_CPUID #functions @@ -1470,763 +1598,954 @@ ID = VCD_FUNCTION_RT_SLEEP DESC = VCD function RT_SLEEP GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rt_sleep ID = VCD_FUNCTION_TRX_READ DESC = VCD function TRX_READ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_read ID = VCD_FUNCTION_TRX_WRITE DESC = VCD function TRX_WRITE GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_write ID = VCD_FUNCTION_TRX_READ_UE DESC = VCD function TRX_READ_UE GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_read_ue ID = VCD_FUNCTION_TRX_WRITE_UE DESC = VCD function TRX_WRITE_UE GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_write_ue ID = VCD_FUNCTION_TRX_READ_IF DESC = VCD function TRX_READ_IF GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_read_if ID = VCD_FUNCTION_TRX_WRITE_IF DESC = VCD function TRX_WRITE_IF GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_write_if ID = VCD_FUNCTION_eNB_PROC_RXTX0 DESC = VCD function eNB_PROC_RXTX0 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_thread_rxtx0 ID = VCD_FUNCTION_eNB_PROC_RXTX1 DESC = VCD function eNB_PROC_RXTX1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_thread_rxtx1 ID = VCD_FUNCTION_UE_THREAD_SYNCH DESC = VCD function UE_THREAD_SYNCH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_thread_synch ID = VCD_FUNCTION_UE_THREAD_RXTX0 DESC = VCD function UE_THREAD_RXTX0 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_thread_rxtx0 ID = VCD_FUNCTION_UE_THREAD_RXTX1 DESC = VCD function UE_THREAD_RXTX1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_thread_rxtx1 ID = VCD_FUNCTION_TRX_READ_SF9 DESC = VCD function TRX_READ_SF9 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_read_sf9 ID = VCD_FUNCTION_TRX_WRITE_SF9 DESC = VCD function TRX_WRITE_SF9 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_write_sf9 ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX0 DESC = VCD function UE_SIGNAL_COND_RXTX0 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_signal_cond_rxtx0 ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX1 DESC = VCD function UE_SIGNAL_COND_RXTX1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_signal_cond_rxtx1 ID = VCD_FUNCTION_UE_WAIT_COND_RXTX0 DESC = VCD function UE_WAIT_COND_RXTX0 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_wait_cond_rxtx0 ID = VCD_FUNCTION_UE_WAIT_COND_RXTX1 DESC = VCD function UE_WAIT_COND_RXTX1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_wait_cond_rxtx1 ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0 DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_lock_mutex_rxtx_for_cond_wait0 ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1 DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_lock_mutex_rxtx_for_cond_wait1 ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0 DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_lock_mutex_rxtx_for_cnt_decrement0 ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1 DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_lock_mutex_rxtx_for_cnt_decrement1 ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0 DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_lock_mutex_rxtx_for_cnt_increment0 ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_lock_mutex_rxtx_for_cnt_increment1 ID = VCD_FUNCTION_SIM_DO_DL_SIGNAL DESC = VCD function SIM_DO_DL_SIGNAL GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = do_DL_sig ID = VCD_FUNCTION_SIM_DO_UL_SIGNAL DESC = VCD function SIM_DO_UL_SIGNAL GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = do_UL_sig ID = VCD_FUNCTION_SIM_UE_TRX_READ DESC = VCD function SIM_UE_TRX_READ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = UE_trx_read ID = VCD_FUNCTION_eNB_TX DESC = VCD function eNB_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_tx ID = VCD_FUNCTION_eNB_RX DESC = VCD function eNB_RX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_rx ID = VCD_FUNCTION_eNB_TRX DESC = VCD function eNB_TRX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_trx ID = VCD_FUNCTION_eNB_TM DESC = VCD function eNB_TM GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_tm ID = VCD_FUNCTION_eNB_RX_SLEEP DESC = VCD function eNB_RX_SLEEP GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_rx_sleep ID = VCD_FUNCTION_eNB_TX_SLEEP DESC = VCD function eNB_TX_SLEEP GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_tx_sleep ID = VCD_FUNCTION_eNB_PROC_SLEEP DESC = VCD function eNB_PROC_SLEEP GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = eNB_proc_sleep ID = VCD_FUNCTION_TRX_READ_RF DESC = VCD function TRX_READ_RF GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_read_rf ID = VCD_FUNCTION_TRX_WRITE_RF DESC = VCD function TRX_WRITE_RF GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = trx_write_rf ID = VCD_FUNCTION_UE_SYNCH DESC = VCD function UE_SYNCH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_synch ID = VCD_FUNCTION_UE_SLOT_FEP DESC = VCD function UE_SLOT_FEP GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_slot_fep ID = VCD_FUNCTION_UE_RRC_MEASUREMENTS DESC = VCD function UE_RRC_MEASUREMENTS GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_rrc_measurements ID = VCD_FUNCTION_UE_GAIN_CONTROL DESC = VCD function UE_GAIN_CONTROL GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_gain_control ID = VCD_FUNCTION_UE_ADJUST_SYNCH DESC = VCD function UE_ADJUST_SYNCH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_adjust_synch ID = VCD_FUNCTION_UE_MEASUREMENT_PROCEDURES DESC = VCD function UE_MEASUREMENT_PROCEDURES GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = lte_ue_measurement_procedures ID = VCD_FUNCTION_UE_PDCCH_PROCEDURES DESC = VCD function UE_PDCCH_PROCEDURES GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = lte_ue_pdcch_procedures ID = VCD_FUNCTION_UE_PBCH_PROCEDURES DESC = VCD function UE_PBCH_PROCEDURES GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = lte_ue_pbch_procedures ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX DESC = VCD function PHY_PROCEDURES_ENB_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_eNb_tx0 ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1 DESC = VCD function PHY_PROCEDURES_ENB_TX1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_eNb_tx1 ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX DESC = VCD function PHY_PROCEDURES_RU_FEPRX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ru_feprx0 ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX1 DESC = VCD function PHY_PROCEDURES_RU_FEPRX1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ru_feprx1 ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM DESC = VCD function PHY_PROCEDURES_RU_FEPTX_OFDM GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ru_feptx_ofdm0 ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM1 DESC = VCD function PHY_PROCEDURES_RU_FEPTX_OFDM1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ru_feptx_ofdm1 ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC DESC = VCD function PHY_PROCEDURES_RU_FEPTX_PREC GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ru_feptx_prec0 ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC1 DESC = VCD function PHY_PROCEDURES_RU_FEPTX_PREC1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ru_feptx_prec1 ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_eNb_rx_uespec0 ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1 DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_eNb_rx_uespec1 ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX DESC = VCD function PHY_PROCEDURES_UE_TX GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ue_tx ID = VCD_FUNCTION_PHY_PROCEDURES_UE_RX DESC = VCD function PHY_PROCEDURES_UE_RX GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ue_rx ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_UESPEC GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ue_tx_ulsch_uespec ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PUCCH DESC = VCD function PHY_PROCEDURES_UE_TX_PUCCH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ue_tx_pucch ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_COMMON DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_COMMON GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ue_tx_ulsch_common ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PRACH DESC = VCD function PHY_PROCEDURES_UE_TX_PRACH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ue_tx_prach ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_RAR DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_RAR GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_ue_tx_ulsch_rar ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_LTE DESC = VCD function PHY_PROCEDURES_ENB_LTE GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_eNB_lte ID = VCD_FUNCTION_PHY_PROCEDURES_UE_LTE DESC = VCD function PHY_PROCEDURES_UE_LTE GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_procedures_UE_lte ID = VCD_FUNCTION_PDSCH_THREAD DESC = VCD function PDSCH_THREAD GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdsch_thread ID = VCD_FUNCTION_DLSCH_THREAD0 DESC = VCD function DLSCH_THREAD0 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_thread0 ID = VCD_FUNCTION_DLSCH_THREAD1 DESC = VCD function DLSCH_THREAD1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_thread1 ID = VCD_FUNCTION_DLSCH_THREAD2 DESC = VCD function DLSCH_THREAD2 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_thread2 ID = VCD_FUNCTION_DLSCH_THREAD3 DESC = VCD function DLSCH_THREAD3 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_thread3 ID = VCD_FUNCTION_DLSCH_THREAD4 DESC = VCD function DLSCH_THREAD4 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_thread4 ID = VCD_FUNCTION_DLSCH_THREAD5 DESC = VCD function DLSCH_THREAD5 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_thread5 ID = VCD_FUNCTION_DLSCH_THREAD6 DESC = VCD function DLSCH_THREAD6 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_thread6 ID = VCD_FUNCTION_DLSCH_THREAD7 DESC = VCD function DLSCH_THREAD7 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_thread7 ID = VCD_FUNCTION_DLSCH_DECODING0 DESC = VCD function DLSCH_DECODING0 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_decoding0 ID = VCD_FUNCTION_DLSCH_DECODING1 DESC = VCD function DLSCH_DECODING1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_decoding1 ID = VCD_FUNCTION_DLSCH_DECODING2 DESC = VCD function DLSCH_DECODING2 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_decoding2 ID = VCD_FUNCTION_DLSCH_DECODING3 DESC = VCD function DLSCH_DECODING3 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_decoding3 ID = VCD_FUNCTION_DLSCH_DECODING4 DESC = VCD function DLSCH_DECODING4 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_decoding4 ID = VCD_FUNCTION_DLSCH_DECODING5 DESC = VCD function DLSCH_DECODING5 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_decoding5 ID = VCD_FUNCTION_DLSCH_DECODING6 DESC = VCD function DLSCH_DECODING6 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_decoding6 ID = VCD_FUNCTION_DLSCH_DECODING7 DESC = VCD function DLSCH_DECODING7 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dlsch_decoding7 ID = VCD_FUNCTION_RX_PDCCH DESC = VCD function RX_PDCCH GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rx_pdcch ID = VCD_FUNCTION_DCI_DECODING DESC = VCD function DCI_DECODING GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = dci_decoding ID = VCD_FUNCTION_RX_PHICH DESC = VCD function RX_PHICH GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rx_phich ID = VCD_FUNCTION_PDSCH_PROC DESC = VCD function PDSCH_PROC GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdsch_procedures ID = VCD_FUNCTION_PDSCH_PROC_SI DESC = VCD function PDSCH_PROC_SI GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdsch_procedures_si ID = VCD_FUNCTION_PDSCH_PROC_P DESC = VCD function PDSCH_PROC_P GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdsch_procedures_p ID = VCD_FUNCTION_PDSCH_PROC_RA DESC = VCD function PDSCH_PROC_RA GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdsch_procedures_ra ID = VCD_FUNCTION_PHY_UE_CONFIG_SIB2 DESC = VCD function PHY_UE_CONFIG_SIB2 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_ue_config_sib2 ID = VCD_FUNCTION_PHY_CONFIG_SIB1_ENB DESC = VCD function PHY_CONFIG_SIB1_ENB GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_phy_config_sib1_eNB ID = VCD_FUNCTION_PHY_CONFIG_SIB2_ENB DESC = VCD function PHY_CONFIG_SIB2_ENB GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_phy_config_sib2_eNB ID = VCD_FUNCTION_PHY_CONFIG_DEDICATED_ENB DESC = VCD function PHY_CONFIG_DEDICATED_ENB GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_phy_config_dedicated_eNB ID = VCD_FUNCTION_PHY_UE_COMPUTE_PRACH DESC = VCD function PHY_UE_COMPUTE_PRACH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_ue_compute_prach ID = VCD_FUNCTION_PHY_ENB_ULSCH_MSG3 DESC = VCD function PHY_ENB_ULSCH_MSG3 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_msg3 ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING0 DESC = VCD function PHY_ENB_ULSCH_DECODING0 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_decoding0 ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING1 DESC = VCD function PHY_ENB_ULSCH_DECODING1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_decoding1 ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING2 DESC = VCD function PHY_ENB_ULSCH_DECODING2 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_decoding2 ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING3 DESC = VCD function PHY_ENB_ULSCH_DECODING3 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_decoding3 ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING4 DESC = VCD function PHY_ENB_ULSCH_DECODING4 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_decoding4 ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING5 DESC = VCD function PHY_ENB_ULSCH_DECODING5 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_decoding5 ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING6 DESC = VCD function PHY_ENB_ULSCH_DECODING6 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_decoding6 ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING7 DESC = VCD function PHY_ENB_ULSCH_DECODING7 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_ulsch_decoding7 ID = VCD_FUNCTION_PHY_ENB_SFGEN DESC = VCD function PHY_ENB_SFGEN GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_sfgen ID = VCD_FUNCTION_PHY_ENB_PRACH_RX DESC = VCD function PHY_ENB_PRACH_RX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_prach_rx ID = VCD_FUNCTION_PHY_RU_PRACH_RX DESC = VCD function PHY_RU_PRACH_RX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_ru_prach_rx ID = VCD_FUNCTION_PHY_ENB_PDCCH_TX DESC = VCD function PHY_ENB_PDCCH_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_pdcch_tx ID = VCD_FUNCTION_PHY_ENB_RS_TX DESC = VCD function PHY_ENB_RS_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_enb_rs_tx ID = VCD_FUNCTION_UE_GENERATE_PRACH DESC = VCD function UE_GENERATE_PRACH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_ue_generate_prach ID = VCD_FUNCTION_UE_ULSCH_MODULATION DESC = VCD function UE_ULSCH_MODULATION GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_ue_ulsch_modulation ID = VCD_FUNCTION_UE_ULSCH_ENCODING DESC = VCD function UE_ULSCH_ENCODING GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_ue_ulsch_encoding ID = VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI DESC = VCD function UE_ULSCH_ENCODING_FILL_CQI GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_ue_ulsch_encoding_fill_cqi ID = VCD_FUNCTION_UE_ULSCH_SCRAMBLING DESC = VCD function UE_ULSCH_SCRAMBLING GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_ue_ulsch_scrambling ID = VCD_FUNCTION_ENB_DLSCH_MODULATION DESC = VCD function ENB_DLSCH_MODULATION GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_eNB_dlsch_modulation ID = VCD_FUNCTION_ENB_DLSCH_ENCODING DESC = VCD function ENB_DLSCH_ENCODING GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_eNB_dlsch_encoding ID = VCD_FUNCTION_ENB_DLSCH_ENCODING_W DESC = VCD function ENB_DLSCH_ENCODING_W GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_eNB_dlsch_encoding_w ID = VCD_FUNCTION_ENB_DLSCH_SCRAMBLING DESC = VCD function ENB_DLSCH_SCRAMBLING GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_eNB_dlsch_scrambling ID = VCD_FUNCTION_ENB_BEAM_PRECODING DESC = VCD function ENB_BEAM_PRECODING GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_eNB_beam_precoding ID = VCD_FUNCTION_ENB_OFDM_MODULATION DESC = VCD function ENB_OFDM_MODULATION GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = phy_eNB_ofdm_mod_l ID = VCD_FUNCTION_MACPHY_INIT DESC = VCD function MACPHY_INIT GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_macphy_init ID = VCD_FUNCTION_MACPHY_EXIT DESC = VCD function MACPHY_EXIT GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_macphy_exit ID = VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER DESC = VCD function ENB_DLSCH_ULSCH_SCHEDULER GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_eNB_dlsch_ulsch_scheduler ID = VCD_FUNCTION_FILL_RAR DESC = VCD function FILL_RAR GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_fill_rar ID = VCD_FUNCTION_TERMINATE_RA_PROC DESC = VCD function TERMINATE_RA_PROC GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_terminate_ra_proc ID = VCD_FUNCTION_INITIATE_RA_PROC DESC = VCD function INITIATE_RA_PROC GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_initiate_ra_proc ID = VCD_FUNCTION_CANCEL_RA_PROC DESC = VCD function CANCEL_RA_PROC GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_cancel_ra_proc ID = VCD_FUNCTION_GET_DCI_SDU DESC = VCD function GET_DCI_SDU GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_get_dci_sdu ID = VCD_FUNCTION_GET_DLSCH_SDU DESC = VCD function GET_DLSCH_SDU GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_get_dlsch_sdu ID = VCD_FUNCTION_RX_SDU DESC = VCD function RX_SDU GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_rx_sdu ID = VCD_FUNCTION_MRBCH_PHY_SYNC_FAILURE DESC = VCD function MRBCH_PHY_SYNC_FAILURE GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_mrbch_phy_sync_failure ID = VCD_FUNCTION_SR_INDICATION DESC = VCD function SR_INDICATION GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_SR_indication ID = VCD_FUNCTION_DLSCH_PREPROCESSOR DESC = VCD function DLSCH_PREPROCESSOR GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = mac_dlsch_preprocessor ID = VCD_FUNCTION_SCHEDULE_DLSCH DESC = VCD function SCHEDULE_DLSCH GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = mac_schedule_dlsch ID = VCD_FUNCTION_FILL_DLSCH_DCI DESC = VCD function FILL_DLSCH_DCI GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = mac_fill_dlsch_dci ID = VCD_FUNCTION_OUT_OF_SYNC_IND DESC = VCD function OUT_OF_SYNC_IND GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_out_of_sync_ind ID = VCD_FUNCTION_UE_DECODE_SI DESC = VCD function UE_DECODE_SI GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_decode_si ID = VCD_FUNCTION_UE_DECODE_PCCH DESC = VCD function UE_DECODE_PCCH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_decode_pcch ID = VCD_FUNCTION_UE_DECODE_CCCH DESC = VCD function UE_DECODE_CCCH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_decode_ccch ID = VCD_FUNCTION_UE_DECODE_BCCH DESC = VCD function UE_DECODE_BCCH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_decode_bcch ID = VCD_FUNCTION_UE_SEND_SDU DESC = VCD function UE_SEND_SDU GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_send_sdu ID = VCD_FUNCTION_UE_GET_SDU DESC = VCD function UE_GET_SDU GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_get_sdu ID = VCD_FUNCTION_UE_GET_RACH DESC = VCD function UE_GET_RACH GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_get_rach ID = VCD_FUNCTION_UE_PROCESS_RAR DESC = VCD function UE_PROCESS_RAR GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_process_rar ID = VCD_FUNCTION_UE_SCHEDULER DESC = VCD function UE_SCHEDULER GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_scheduler ID = VCD_FUNCTION_UE_GET_SR DESC = VCD function UE_GET_SR GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = macxface_ue_get_sr ID = VCD_FUNCTION_UE_SEND_MCH_SDU DESC = VCD function UE_SEND_MCH_SDU GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = ue_send_mch_sdu ID = VCD_FUNCTION_RLC_DATA_REQ DESC = VCD function RLC_DATA_REQ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rlc_data_req #ID = VCD_FUNCTION_RLC_DATA_IND # DESC = VCD function RLC_DATA_IND # GROUP = ALL:VCD:ENB:VCD_FUNCTION # FORMAT = int,value +# VCD_NAME = rlc_data_ind ID = VCD_FUNCTION_MAC_RLC_STATUS_IND DESC = VCD function MAC_RLC_STATUS_IND GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = mac_rlc_status_ind ID = VCD_FUNCTION_MAC_RLC_DATA_REQ DESC = VCD function MAC_RLC_DATA_REQ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = mac_rlc_data_req ID = VCD_FUNCTION_MAC_RLC_DATA_IND DESC = VCD function MAC_RLC_DATA_IND GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = mac_rlc_data_ind ID = VCD_FUNCTION_RLC_UM_TRY_REASSEMBLY DESC = VCD function RLC_UM_TRY_REASSEMBLY GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rlc_um_try_reassembly ID = VCD_FUNCTION_RLC_UM_CHECK_TIMER_DAR_TIME_OUT DESC = VCD function RLC_UM_CHECK_TIMER_DAR_TIME_OUT GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rlc_um_check_timer_dar_time_out ID = VCD_FUNCTION_RLC_UM_RECEIVE_PROCESS_DAR DESC = VCD function RLC_UM_RECEIVE_PROCESS_DAR GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rlc_um_receive_process_dar ID = VCD_FUNCTION_PDCP_RUN DESC = VCD function PDCP_RUN GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_run ID = VCD_FUNCTION_PDCP_DATA_REQ DESC = VCD function PDCP_DATA_REQ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_data_req ID = VCD_FUNCTION_PDCP_DATA_IND DESC = VCD function PDCP_DATA_IND GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_data_ind ID = VCD_FUNCTION_PDCP_APPLY_SECURITY DESC = VCD function PDCP_APPLY_SECURITY GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_apply_security ID = VCD_FUNCTION_PDCP_VALIDATE_SECURITY DESC = VCD function PDCP_VALIDATE_SECURITY GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_validate_security ID = VCD_FUNCTION_PDCP_FIFO_READ DESC = VCD function PDCP_FIFO_READ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_fifo_read ID = VCD_FUNCTION_PDCP_FIFO_READ_BUFFER DESC = VCD function PDCP_FIFO_READ_BUFFER GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_fifo_read_buffer ID = VCD_FUNCTION_PDCP_FIFO_FLUSH DESC = VCD function PDCP_FIFO_FLUSH GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_fifo_flush ID = VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER DESC = VCD function PDCP_FIFO_FLUSH_BUFFER GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcp_fifo_flush_buffer ID = VCD_FUNCTION_RRC_RX_TX DESC = VCD function RRC_RX_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rrc_rx_tx ID = VCD_FUNCTION_RRC_MAC_CONFIG DESC = VCD function RRC_MAC_CONFIG GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rrc_mac_config_req ID = VCD_FUNCTION_RRC_UE_DECODE_SIB1 DESC = VCD function RRC_UE_DECODE_SIB1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rrc_ue_decode_sib1 ID = VCD_FUNCTION_RRC_UE_DECODE_SI DESC = VCD function RRC_UE_DECODE_SI GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value + VCD_NAME = rrc_ue_decode_si ID = VCD_FUNCTION_GTPV1U_ENB_TASK DESC = VCD function GTPV1U_ENB_TASK GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = gtpv1u_enb_task ID = VCD_FUNCTION_GTPV1U_PROCESS_UDP_REQ DESC = VCD function GTPV1U_PROCESS_UDP_REQ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = gtpv1u_process_udp_req ID = VCD_FUNCTION_GTPV1U_PROCESS_TUNNEL_DATA_REQ DESC = VCD function GTPV1U_PROCESS_TUNNEL_DATA_REQ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = gtpv1u_process_tunnel_data_req ID = VCD_FUNCTION_UDP_ENB_TASK DESC = VCD function UDP_ENB_TASK GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = udp_enb_task ID = VCD_FUNCTION_EMU_TRANSPORT DESC = VCD function EMU_TRANSPORT GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = emu_transport ID = VCD_FUNCTION_LOG_RECORD DESC = VCD function LOG_RECORD GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = log_record ID = VCD_FUNCTION_ITTI_ENQUEUE_MESSAGE DESC = VCD function ITTI_ENQUEUE_MESSAGE GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = itti_enqueue_message ID = VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE DESC = VCD function ITTI_DUMP_ENQUEUE_MESSAGE GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = itti_dump_enqueue_message ID = VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC DESC = VCD function ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = itti_dump_enqueue_message_malloc ID = VCD_FUNCTION_ITTI_RELAY_THREAD DESC = VCD function ITTI_RELAY_THREAD GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = itti_relay_thread ID = VCD_FUNCTION_TEST DESC = VCD function TEST GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = test ID = VCD_FUNCTION_SEND_IF4 DESC = VCD function SEND_IF4 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = send_if4 ID = VCD_FUNCTION_RECV_IF4 DESC = VCD function RECV_IF4 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = recv_if4 ID = VCD_FUNCTION_SEND_IF5 DESC = VCD function SEND_IF5 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = send_if5 ID = VCD_FUNCTION_RECV_IF5 DESC = VCD function RECV_IF5 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = recv_if5 ID = VCD_FUNCTION_TRX_COMPR_IF DESC = VCD function TRX_COMPR_IF GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = compress_if ID = VCD_FUNCTION_TRX_DECOMPR_IF DESC = VCD function TRX_DECOMPR_IF GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = decompress_if ID = VCD_FUNCTION_NFAPI DESC = VCD function NFAPI GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = nfapi_subframe ID = VCD_FUNCTION_GENERATE_PCFICH DESC = VCD function GENERATE_PCFICH GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = generate_pcfich ID = VCD_FUNCTION_GENERATE_DCI0 DESC = VCD function GENERATE_DCI0 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = generate_dci0 ID = VCD_FUNCTION_GENERATE_DLSCH DESC = VCD function GENERATE_DLSCH GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = generate_dlsch ID = VCD_FUNCTION_GENERATE_PHICH DESC = VCD function GENERATE_PHICH GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = generate_phich ID = VCD_FUNCTION_PDCCH_SCRAMBLING DESC = VCD function PDCCH_SCRAMBLING GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcch_scrambling ID = VCD_FUNCTION_PDCCH_MODULATION DESC = VCD function PDCCH_MODULATION GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcch_modulation ID = VCD_FUNCTION_PDCCH_INTERLEAVING DESC = VCD function PDCCH_INTERLEAVING GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcch_interleaving ID = VCD_FUNCTION_PDCCH_TX DESC = VCD function PDCCH_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value + VCD_NAME = pdcch_tx diff --git a/common/utils/T/tracer/database.c b/common/utils/T/tracer/database.c index f0908948e2..543ab66664 100644 --- a/common/utils/T/tracer/database.c +++ b/common/utils/T/tracer/database.c @@ -13,6 +13,7 @@ typedef struct { char **arg_type; char **arg_name; int asize; + char *vcd_name; int id; } id; @@ -138,6 +139,7 @@ id *add_id(database *r, char *idname, int i) r->i[r->isize].arg_type = NULL; r->i[r->isize].arg_name = NULL; r->i[r->isize].asize = 0; + r->i[r->isize].vcd_name = NULL; r->i[r->isize].id = i; r->isize++; qsort(r->i, r->isize, sizeof(id), id_cmp); @@ -224,6 +226,12 @@ void add_desc(id *i, char *desc) i->desc = strdup(desc); if (i->desc == NULL) abort(); } +void add_vcd_name(id *i, char *vcd_name) +{ + if (i == NULL) {printf("ERROR: VCD_NAME line before ID line\n");exit(1);} + i->vcd_name = strdup(vcd_name); if (i->vcd_name == NULL) abort(); +} + char *format_get_next_token(char **cur) { char *start; @@ -320,6 +328,7 @@ void *parse_database(char *filename) if (!strcmp(name, "GROUP")) add_groups(r, last_id, value); if (!strcmp(name, "DESC")) add_desc(last_id, value); if (!strcmp(name, "FORMAT")) add_format(last_id, value); + if (!strcmp(name, "VCD_NAME")) add_vcd_name(last_id, value); } fclose(in); @@ -424,6 +433,12 @@ char *event_name_from_id(void *_database, int id) return d->i[d->id_to_pos[id]].name; } +char *event_vcd_name_from_id(void *_database, int id) +{ + database *d = _database; + return d->i[d->id_to_pos[id]].vcd_name; +} + int event_id_from_name(void *_database, char *name) { database *d = _database; diff --git a/common/utils/T/tracer/database.h b/common/utils/T/tracer/database.h index c5cab05d9f..9fdbaed7c6 100644 --- a/common/utils/T/tracer/database.h +++ b/common/utils/T/tracer/database.h @@ -8,6 +8,7 @@ void list_ids(void *database); void list_groups(void *database); void on_off(void *d, char *item, int *a, int onoff); char *event_name_from_id(void *database, int id); +char *event_vcd_name_from_id(void *_database, int id); int event_id_from_name(void *database, char *name); int number_of_ids(void *database); int database_get_ids(void *database, char ***ids); diff --git a/common/utils/T/tracer/to_vcd.c b/common/utils/T/tracer/to_vcd.c index 1a67a9d4ff..998649af01 100644 --- a/common/utils/T/tracer/to_vcd.c +++ b/common/utils/T/tracer/to_vcd.c @@ -12,7 +12,14 @@ #include "logger/logger.h" #include "view/view.h" +enum var_type { + DEFAULT, + VCD_FUNCTION, + VCD_VARIABLE +}; + typedef struct { + enum var_type type; char *event; char *arg; char *vcd_name; @@ -44,16 +51,39 @@ void vcd_write_header(vcd_vars *v, int n) "$version\n" " to_vcd\n" "$end\n" -"$timescale 1ns $end\n" +"$timescale 1ns $end\n") <= 0) abort(); + + if (fprintf(out, "$scope module logic $end\n") <= 0) abort(); + for (i = 0; i < n; i++) + if (v[i].type == DEFAULT) + if (fprintf(out, "$var wire %d %s %s $end\n", + v[i].boolean ? 1 : 64, + v[i].vcd_name, v[i].vcd_name) <= 0) abort(); + if (fprintf(out, +"$upscope $end\n") <= 0) abort(); + + if (fprintf(out, +"$scope module functions $end\n") <= 0) abort(); + for (i = 0; i < n; i++) + if (v[i].type == VCD_FUNCTION) + if (fprintf(out, "$var wire %d %s %s $end\n", + v[i].boolean ? 1 : 64, + v[i].vcd_name, v[i].vcd_name) <= 0) abort(); + if (fprintf(out, +"$upscope $end\n") <= 0) abort(); + if (fprintf(out, +"$scope module variables $end\n") <= 0) abort(); for (i = 0; i < n; i++) - if (fprintf(out, "$var wire %d %s %s $end\n", - v[i].boolean ? 1 : 64, - v[i].vcd_name, v[i].vcd_name) <= 0) abort(); + if (v[i].type == VCD_VARIABLE) + if (fprintf(out, "$var wire %d %s %s $end\n", + v[i].boolean ? 1 : 64, + v[i].vcd_name, v[i].vcd_name) <= 0) abort(); + if (fprintf(out, +"$upscope $end\n") <= 0) abort(); if (fprintf(out, -"$upscope $end\n" "$enddefinitions $end\n" "$dumpvars\n") <= 0) abort(); @@ -194,12 +224,13 @@ void force_stop(int x) } vcd_vars *add_var(vcd_vars *vars, int nvars, - char *event, char *arg, char *vcd_name, int is_boolean) + char *event, char *arg, char *vcd_name, int is_boolean, enum var_type t) { if (nvars % 64 == 0) { vars = realloc(vars, (nvars+64) * sizeof(vcd_vars)); if (vars == NULL) abort(); } + vars[nvars].type = t; vars[nvars].event = event; vars[nvars].arg = arg; vars[nvars].vcd_name = vcd_name; @@ -240,7 +271,7 @@ int main(int n, char **v) char *event = v[++i]; char *arg = v[++i]; char *vcd_name = v[++i]; - vars = add_var(vars, nvars, event, arg, vcd_name, 1); + vars = add_var(vars, nvars, event, arg, vcd_name, 1, DEFAULT); nvars++; continue; } @@ -248,7 +279,7 @@ int main(int n, char **v) char *event = v[++i]; char *arg = v[++i]; char *vcd_name = v[++i]; - vars = add_var(vars, nvars, event, arg, vcd_name, 0); + vars = add_var(vars, nvars, event, arg, vcd_name, 0, DEFAULT); nvars++; continue; } @@ -283,20 +314,30 @@ int main(int n, char **v) /* activate all VCD traces */ for (i = 0; i < number_of_events; i++) { int is_boolean; + enum var_type type; int prefix_length; char *name = event_name_from_id(database, i); + char *vcd_name; char *var_prefix = "VCD_VARIABLE_"; char *fun_prefix = "VCD_FUNCTION_"; if (!strncmp(name, var_prefix, strlen(var_prefix))) { prefix_length = strlen(var_prefix); is_boolean = 0; + type = VCD_VARIABLE; } else if (!strncmp(name, fun_prefix, strlen(fun_prefix))) { prefix_length = strlen(fun_prefix); is_boolean = 1; + type = VCD_FUNCTION; } else continue; + vcd_name = event_vcd_name_from_id(database, i); + if (vcd_name == NULL) { + vcd_name = name+prefix_length; + printf("WARNING: ID %s does not define VCD_NAME in the file %s, using %s\n", + name, database_filename, vcd_name); + } vars = add_var(vars, nvars, - name, "value", name+prefix_length, is_boolean); + name, "value", vcd_name, is_boolean, type); nvars++; } } From 781133b77233260595d2b945d965c721c5dcb1cf Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Thu, 9 Aug 2018 10:18:38 +0200 Subject: [PATCH 052/128] T: bugfix in multi Check result of send_is_on and close connection to tracee on error. --- common/utils/T/tracer/multi.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/common/utils/T/tracer/multi.c b/common/utils/T/tracer/multi.c index 7d3fd0f344..6a9de838c6 100644 --- a/common/utils/T/tracer/multi.c +++ b/common/utils/T/tracer/multi.c @@ -372,7 +372,13 @@ tracer_error: remove_tracer(&m, j); j--; } - if (is_on_changed && s != -1) send_is_on(s, number_of_events, is_on); + if (is_on_changed && s != -1) + if (send_is_on(s, number_of_events, is_on) == -1) { + clear_remote_config(); + shutdown(s, SHUT_RDWR); + close(s); + s = -1; + } } return 0; From 5c85231782489483e1f6c9706f1c68e68c2c7ca6 Mon Sep 17 00:00:00 2001 From: Konstantinos Alexandris Date: Fri, 10 Aug 2018 11:06:21 +0200 Subject: [PATCH 053/128] GPS synchronization --- targets/RT/USER/lte-ru.c | 5 +++-- targets/RT/USER/lte-softmodem.c | 4 ++-- targets/RT/USER/lte-softmodem.h | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 891dd9e272..a0339e8f0f 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -121,7 +121,7 @@ extern int emulate_rf; extern int numerology; extern int fepw; extern int single_thread_flag; - +extern clock_source_t clock_source; extern void phy_init_RU(RU_t*); extern void phy_free_RU(RU_t*); @@ -1411,7 +1411,8 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) { cfg->num_rb_dl=fp->N_RB_DL; cfg->tx_num_channels=ru->nb_tx; cfg->rx_num_channels=ru->nb_rx; - + cfg->clock_source=clock_source; + for (i=0; inb_tx; i++) { cfg->tx_freq[i] = (double)fp->dl_CarrierFreq; diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 7ff57fee3e..699bc7f56b 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -130,7 +130,7 @@ volatile int start_UE = 0; #endif volatile int oai_exit = 0; -static clock_source_t clock_source = internal; +clock_source_t clock_source = internal; static int wait_for_sync = 0; unsigned int mmapped_dma=0; @@ -942,7 +942,7 @@ int main( int argc, char **argv ) printf("Reading in command-line options\n"); - get_options (); + get_options (); if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) { fprintf(stderr,"Getting configuration failed\n"); exit(-1); diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index 5590e3a931..2f8209f2d3 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -65,7 +65,7 @@ #define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n" #define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n" #define CONFIG_HLP_DMAMAP "sets flag for improved EXMIMO UE performance\n" -#define CONFIG_HLP_EXCCLK "tells hardware to use an external clock reference\n" +#define CONFIG_HLP_CLK "tells hardware to use a clock reference (0:internal, 1:external, 2:gpsdo)\n" #define CONFIG_HLP_USIM "use XOR autentication algo in case of test usim mode\n" #define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n" #define CONFIG_HLP_TADV "Set timing_advance\n" @@ -161,7 +161,7 @@ {"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&phy_test, defintval:0, TYPE_INT, 0}, \ {"usim-test", CONFIG_HLP_USIM, PARAMFLAG_BOOL, u8ptr:&usim_test, defintval:0, TYPE_UINT8, 0}, \ {"mmapped-dma", CONFIG_HLP_DMAMAP, PARAMFLAG_BOOL, uptr:&mmapped_dma, defintval:0, TYPE_INT, 0}, \ -{"external-clock", CONFIG_HLP_EXCCLK, PARAMFLAG_BOOL, uptr:&clock_source, defintval:0, TYPE_INT, 0}, \ +{"clock", CONFIG_HLP_CLK, 0, uptr:&clock_source, defintval:0, TYPE_UINT, 0}, \ {"wait-for-sync", NULL, PARAMFLAG_BOOL, iptr:&wait_for_sync, defintval:0, TYPE_INT, 0}, \ {"single-thread-enable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:0, TYPE_INT, 0}, \ {"threadIQ", NULL, 0, iptr:&(threads.iq), defintval:1, TYPE_INT, 0}, \ From f18a438c2cc37a99c170df7ca772ee82015e7439 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Thu, 9 Aug 2018 12:55:44 +0200 Subject: [PATCH 054/128] T: simplify Don't use shm anymore. Use mmap directly. --- common/utils/T/T.c | 57 +++++++++++++++++++---------------- common/utils/T/T_defs.h | 2 -- common/utils/T/local_tracer.c | 38 ++++++----------------- 3 files changed, 40 insertions(+), 57 deletions(-) diff --git a/common/utils/T/T.c b/common/utils/T/T.c index 8679a4185f..40af79c1e1 100644 --- a/common/utils/T/T.c +++ b/common/utils/T/T.c @@ -91,7 +91,7 @@ static void new_thread(void *(*f)(void *), void *data) /* defined in local_tracer.c */ void T_local_tracer_main(int remote_port, int wait_for_tracer, - int local_socket, char *shm_file); + int local_socket, void *shm_array); /* We monitor the tracee and the local tracer processes. * When one dies we forcefully kill the other. @@ -114,22 +114,31 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) { int socket_pair[2]; int s; - int T_shm_fd; int child1, child2; - char shm_file[128]; - - sprintf(shm_file, "/%s%d", T_SHM_FILENAME, getpid()); + int i; if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair)) { perror("socketpair"); abort(); } + /* setup shared memory */ + T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t), + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); + if (T_cache == MAP_FAILED) + { perror("mmap"); abort(); } + + /* let's garbage the memory to catch some potential problems + * (think multiprocessor sync issues, barriers, etc.) + */ + memset(T_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t)); + for (i = 0; i < T_CACHE_SIZE; i++) T_cache[i].busy = 0; + /* child1 runs the local tracer and child2 (or main) runs the tracee */ child1 = fork(); if (child1 == -1) abort(); if (child1 == 0) { close(socket_pair[1]); T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0], - shm_file); + T_cache); exit(0); } close(socket_pair[0]); @@ -138,6 +147,7 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) child2 = fork(); if (child2 == -1) abort(); if (child2 != 0) { close(socket_pair[1]); + munmap(T_cache, T_CACHE_SIZE * sizeof(T_cache_t)); monitor_and_kill(child1, child2); } } @@ -148,34 +158,29 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) T_socket = s; - /* setup shared memory */ - T_shm_fd = shm_open(shm_file, O_RDWR /*| O_SYNC*/, 0666); - shm_unlink(shm_file); - if (T_shm_fd == -1) { perror(shm_file); abort(); } - T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t), - PROT_READ | PROT_WRITE, MAP_SHARED, T_shm_fd, 0); - if (T_cache == MAP_FAILED) - { perror(shm_file); abort(); } - close(T_shm_fd); - new_thread(T_receive_thread, NULL); } void T_Config_Init(void) { -int T_port; /* by default we wait for the tracer */ -int T_nowait; /* default port to listen to to wait for the tracer */ -int T_dont_fork; /* default is to fork, see 'T_init' to understand */ + int T_port; /* by default we wait for the tracer */ + int T_nowait; /* default port to listen to to wait for the tracer */ + int T_dont_fork; /* default is to fork, see 'T_init' to understand */ -paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC ; + paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC; -/* for a cleaner config file, TTracer params should be defined in a specific section... */ - config_get( ttraceparams,sizeof(ttraceparams)/sizeof(paramdef_t),TTRACER_CONFIG_PREFIX); + /* for a cleaner config file, TTracer params should be defined in a + * specific section... + */ + config_get(ttraceparams, + sizeof(ttraceparams) / sizeof(paramdef_t), + TTRACER_CONFIG_PREFIX); -/* compatibility: look for TTracer command line options in root section */ - config_process_cmdline( ttraceparams,sizeof(ttraceparams)/sizeof(paramdef_t),NULL); + /* compatibility: look for TTracer command line options in root section */ + config_process_cmdline(ttraceparams, + sizeof(ttraceparams) / sizeof(paramdef_t), + NULL); - if (T_stdout == 0) { + if (T_stdout == 0) T_init(T_port, 1-T_nowait, T_dont_fork); - } } diff --git a/common/utils/T/T_defs.h b/common/utils/T/T_defs.h index b0b9940c30..6fe11bcfc3 100644 --- a/common/utils/T/T_defs.h +++ b/common/utils/T/T_defs.h @@ -36,8 +36,6 @@ typedef struct { int length; } T_cache_t; -#define T_SHM_FILENAME "/T_shm_segment" - /* number of VCD functions (to be kept up to date! see in T_messages.txt) */ #define VCD_NUM_FUNCTIONS 190 diff --git a/common/utils/T/local_tracer.c b/common/utils/T/local_tracer.c index c331daa4a9..19d0a4d717 100644 --- a/common/utils/T/local_tracer.c +++ b/common/utils/T/local_tracer.c @@ -340,51 +340,31 @@ static void wait_message(void) while (T_local_cache[T_busylist_head].busy == 0) usleep(1000); } -static void init_shm(char *shm_file) -{ - int i; - int s = shm_open(shm_file, O_RDWR | O_CREAT /*| O_SYNC*/, 0666); - if (s == -1) { perror(shm_file); abort(); } - if (ftruncate(s, T_CACHE_SIZE * sizeof(T_cache_t))) - { perror(shm_file); abort(); } - T_local_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t), - PROT_READ | PROT_WRITE, MAP_SHARED, s, 0); - if (T_local_cache == MAP_FAILED) - { perror(shm_file); abort(); } - close(s); - - /* let's garbage the memory to catch some potential problems - * (think multiprocessor sync issues, barriers, etc.) - */ - memset(T_local_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t)); - for (i = 0; i < T_CACHE_SIZE; i++) T_local_cache[i].busy = 0; -} - void T_local_tracer_main(int remote_port, int wait_for_tracer, - int local_socket, char *shm_file) + int local_socket, void *shm_array) { int s; int port = remote_port; int dont_wait = wait_for_tracer ? 0 : 1; void *f; - printf("local tracer starting\n"); + /* write on a socket fails if the other end is closed and we get SIGPIPE */ - if (signal(SIGPIPE, SIG_IGN) == SIG_ERR){ + if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { printf("local tracer received SIGPIPE\n"); abort(); - } + } + + T_local_cache = shm_array; - init_shm(shm_file); s = local_socket; - printf("local tracer starting step 2\n"); + if (dont_wait) { char t = 2; - printf("local tracer in no wait mode \n"); if (write(s, &t, 1) != 1) abort(); } - printf("local tracer starting step 3\n"); + f = forwarder(port, s); - printf("local tracer main loop.... \n"); + /* read messages */ while (1) { wait_message(); From 072bb9044f75a03d259ed39f15c88e672645ac74 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 13 Aug 2018 10:20:17 +0200 Subject: [PATCH 055/128] T: improve error reporting Use "error:" as prefix to error messages in genids.c to help looking for errors in case of failure of the build. --- common/utils/T/genids.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/common/utils/T/genids.c b/common/utils/T/genids.c index 734c506368..8e5adbf587 100644 --- a/common/utils/T/genids.c +++ b/common/utils/T/genids.c @@ -14,21 +14,21 @@ int cmp(const void *p1, const void *p2) } /* return 1 if s was not already known, 0 if it was */ -int new_unique_id(char *s) +int new_unique_id(char *s, char *input_file) { if (unique_ids_size) if (bsearch(&s, unique_ids, unique_ids_size, sizeof(char *), cmp) != NULL) { - printf("FATAL: ID %s is not unique\n", s); + printf("error: ID %s is not unique in %s\n", s, input_file); return 0; } if (unique_ids_size == unique_ids_maxsize) { unique_ids_maxsize += 256; unique_ids = realloc(unique_ids, unique_ids_maxsize * sizeof(char *)); - if (unique_ids == NULL) { printf("out of memory\n"); abort(); } + if (unique_ids == NULL) { printf("erorr: out of memory\n"); abort(); } } unique_ids[unique_ids_size] = strdup(s); if (unique_ids[unique_ids_size] == NULL) - { printf("out of memory\n"); abort(); } + { printf("erorr: out of memory\n"); abort(); } unique_ids_size++; qsort(unique_ids, unique_ids_size, sizeof(char *), cmp); return 1; @@ -43,7 +43,8 @@ void putname(int c) if (bufname_size == bufname_maxsize) { bufname_maxsize += 256; bufname = realloc(bufname, bufname_maxsize); - if (bufname == NULL) { printf("memory allocation error\n"); exit(1); } + if (bufname == NULL) + { printf("erorr: memory allocation error\n"); exit(1); } } bufname[bufname_size] = c; bufname_size++; @@ -58,7 +59,8 @@ void putvalue(int c) if (bufvalue_size == bufvalue_maxsize) { bufvalue_maxsize += 256; bufvalue = realloc(bufvalue, bufvalue_maxsize); - if (bufvalue == NULL) { printf("memory allocation error\n"); exit(1); } + if (bufvalue == NULL) + { printf("error: memory allocation error\n"); exit(1); } } bufvalue[bufvalue_size] = c; bufvalue_size++; @@ -119,7 +121,7 @@ int main(int n, char **v) char *in_name; char *out_name; - if (n != 3) { printf("gimme \n"); exit(1); } + if (n != 3) { printf("error: gimme \n"); exit(1); } n = 0; @@ -134,14 +136,13 @@ int main(int n, char **v) while (1) { get_line(in, &name, &value); if (name == NULL) break; - printf("name '%s' value '%s'\n", name, value); if (isspace(value[strlen(value)-1])) { - printf("bad value '%s' (no space at the end please!)\n", value); + printf("error: bad value '%s' (no space at the end please!)\n", value); unlink(out_name); exit(1); } if (!strcmp(name, "ID")) { - if (!new_unique_id(value)) { unlink(out_name); exit(1); } + if (!new_unique_id(value, in_name)) { unlink(out_name); exit(1); } fprintf(out, "#define T_%s T_ID(%d)\n", value, n); n++; } From 44e444b3a24e299ce90216baafa01183f65329ce Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 13 Aug 2018 14:38:32 +0200 Subject: [PATCH 056/128] Add missing break in switch statement in set_ul_DAI() --- openair2/LAYER2/MAC/eNB_scheduler_dlsch.c | 1 + 1 file changed, 1 insertion(+) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index 05498e4377..df52b83d72 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -386,6 +386,7 @@ set_ul_DAI(int module_idP, int UE_idP, int CC_idP, int frameP, UE_list->UE_template[CC_idP][UE_idP].DAI_ul[3] = DAI; break; } + break; case 2: // if ((subframeP==3)||(subframeP==8)) From bd5b3b1ec71081c77fdc7c5c43ffeb530765743b Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 13 Aug 2018 16:21:30 +0200 Subject: [PATCH 057/128] CI: - fix when FDD slave job fails, it still retrieves the HTML report - improvement in HTML report, stats per UE for attach, ping, iperf Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 18 ++- ci-scripts/main.py | 270 ++++++++++++++++++++++++++++------ 2 files changed, 245 insertions(+), 43 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index f83ee6faf0..d4fe0d8555 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -286,7 +286,8 @@ pipeline { } } post { - always { + // In case of success we really pick the report from the exact slave build number + success { script { copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', filter: 'test_results*.html', @@ -296,6 +297,21 @@ pipeline { } } } + // In case of any non-success, we are retrieving the HTML report of the last completed + // slave job. Note that we could use that syntax also in case of success. + // The only drop-back is that we may retrieve the HTML report of a previous build + cleanup { + script { + if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { + copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', + filter: 'test_results*.html', + selector: lastCompleted()) + if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { + archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html' + } + } + } + } } } } diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 4ba2fbcf5b..372d4aef11 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -45,7 +45,7 @@ import xml.etree.ElementTree as ET import logging import datetime import signal -from multiprocessing import Process,Lock +from multiprocessing import Process, Lock, SimpleQueue logging.basicConfig( level=logging.DEBUG, format="[%(asctime)s] %(name)s:%(levelname)s: %(message)s" @@ -319,21 +319,32 @@ class SSHConnection(): job.join() self.CreateHtmlTestRow('N/A', 'OK', 0) - def AttachUE_common(self, device_id): + def AttachUE_common(self, device_id, statusQueue, lock): try: self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/on', '\$', 60) time.sleep(2) - count = 45 + max_count = 45 + count = max_count while count > 0: self.command('stdbuf -o0 adb -s ' + device_id + ' shell dumpsys telephony.registry | grep mDataConnectionState', '\$', 15) result = re.search('mDataConnectionState.*=(?P[0-9\-]+)', str(self.ssh.before)) if result is None: logging.debug('\u001B[1;37;41m mDataConnectionState Not Found! \u001B[0m') - sys.exit(1) + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put('mDataConnectionState Not Found!') + lock.release() + break mDataConnectionState = int(result.group('state')) if mDataConnectionState == 2: logging.debug('\u001B[1mUE (' + device_id + ') Attach Completed\u001B[0m') + lock.acquire() + statusQueue.put(max_count - count) + statusQueue.put(device_id) + statusQueue.put('Attach Completed') + lock.release() break count = count - 1 if count == 15 or count == 30: @@ -342,11 +353,15 @@ class SSHConnection(): time.sleep(0.5) self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/on', '\$', 60) time.sleep(0.5) - logging.debug('\u001B[1mWait UE (' + device_id + ') a second until mDataConnectionState=2 (' + str(45-count) + ' times)\u001B[0m') + logging.debug('\u001B[1mWait UE (' + device_id + ') a second until mDataConnectionState=2 (' + str(max_count-count) + ' times)\u001B[0m') time.sleep(1) if count == 0: logging.debug('\u001B[1;37;41m UE (' + device_id + ') Attach Failed \u001B[0m') - sys.exit(1) + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put('Attach Failed') + lock.release() self.close() except: os.kill(os.getppid(),signal.SIGUSR1) @@ -358,14 +373,39 @@ class SSHConnection(): initialize_eNB_flag = False self.CheckProcessExist(initialize_eNB_flag) multi_jobs = [] + status_queue = SimpleQueue() + lock = Lock() for device_id in self.UEDevices: - p = Process(target = SSH.AttachUE_common, args = (device_id,)) + p = Process(target = SSH.AttachUE_common, args = (device_id, status_queue, lock,)) p.daemon = True p.start() multi_jobs.append(p) for job in multi_jobs: job.join() - self.CreateHtmlTestRow('N/A', 'OK', len(self.UEDevices)) + + if (status_queue.empty()): + self.CreateHtmlTestRow('N/A', 'KO', len(self.UEDevices)) + sys.exit(1) + else: + attach_status = True + html_queue = SimpleQueue() + while (not status_queue.empty()): + count = status_queue.get() + if (count < 0): + attach_status = False + device_id = status_queue.get() + message = status_queue.get() + if (count < 0): + html_cell = "
UE (" + device_id + ")\n" + message + "
" + else: + html_cell = "
UE (" + device_id + ")\n" + message + ' in ' + str(count + 2) + ' seconds
' + html_queue.put(html_cell) + if (attach_status): + self.CreateHtmlTestRowQueue('N/A', 'OK', len(self.UEDevices), html_queue) + else: + self.CreateHtmlTestRowQueue('N/A', 'KO', len(self.UEDevices), html_queue) + self.CreateHtmlFooter() + sys.exit(1) def DetachUE_common(self, device_id): try: @@ -481,7 +521,7 @@ class SSHConnection(): self.UEIPAddresses.append(UE_IPAddress) self.close() - def Ping_common(self, lock, UE_IPAddress, device_id): + def Ping_common(self, lock, UE_IPAddress, device_id,statusQueue): try: self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('cd ' + self.EPCSourceCodePath, '\$', 5) @@ -490,32 +530,65 @@ class SSHConnection(): self.command('stdbuf -o0 ping ' + self.ping_args + ' ' + UE_IPAddress + ' 2>&1 | stdbuf -o0 tee -a ping_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(ping_time[0])*1.5) result = re.search(', (?P[0-9\.]+)% packet loss, time [0-9\.]+ms', str(self.ssh.before)) if result is None: - logging.debug('\u001B[1;37;41m Packet Loss Not Found! \u001B[0m') - sys.exit(1) + message = 'Packet Loss Not Found!' + logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m') + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(message) + lock.release() + return packetloss = result.group('packetloss') if float(packetloss) == 100: - logging.debug('\u001B[1;37;41m Packet Loss is 100% \u001B[0m') - sys.exit(1) + message = 'Packet Loss is 100%' + logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m') + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(message) + lock.release() + return result = re.search('rtt min\/avg\/max\/mdev = (?P[0-9\.]+)\/(?P[0-9\.]+)\/(?P[0-9\.]+)\/[0-9\.]+ ms', str(self.ssh.before)) if result is None: - logging.debug('\u001B[1;37;41m Ping RTT_Min RTT_Avg RTT_Max Not Found! \u001B[0m') - sys.exit(1) + message = 'Ping RTT_Min RTT_Avg RTT_Max Not Found!' + logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m') + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(message) + lock.release() + return rtt_min = result.group('rtt_min') rtt_avg = result.group('rtt_avg') rtt_max = result.group('rtt_max') + pal_msg = 'Packet Loss : ' + packetloss + '%' + min_msg = 'RTT(Min) : ' + rtt_min + ' ms' + avg_msg = 'RTT(Avg) : ' + rtt_avg + ' ms' + max_msg = 'RTT(Max) : ' + rtt_max + ' ms' lock.acquire() logging.debug('\u001B[1;37;44m ping result (' + UE_IPAddress + ') \u001B[0m') - logging.debug('\u001B[1;34m Packet Loss : ' + packetloss + '%\u001B[0m') - logging.debug('\u001B[1;34m RTT(Min) : ' + rtt_min + ' ms' + '\u001B[0m') - logging.debug('\u001B[1;34m RTT(Avg) : ' + rtt_avg + ' ms' + '\u001B[0m') - logging.debug('\u001B[1;34m RTT(Max) : ' + rtt_max + ' ms' + '\u001B[0m') - lock.release() + logging.debug('\u001B[1;34m ' + pal_msg + '\u001B[0m') + logging.debug('\u001B[1;34m ' + min_msg + '\u001B[0m') + logging.debug('\u001B[1;34m ' + avg_msg + '\u001B[0m') + logging.debug('\u001B[1;34m ' + max_msg + '\u001B[0m') + qMsg = pal_msg + '\n' + min_msg + '\n' + avg_msg + '\n' + max_msg + packetLossOK = True if packetloss is not None: if float(packetloss) > float(self.ping_packetloss_threshold): + qMsg += '\nPacket Loss too high' logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m') - sys.exit(1) + packetLossOK = False elif float(packetloss) > 0: + qMsg += '\nPacket Loss is not 0%' logging.debug('\u001B[1;37;43m Packet Loss is not 0% \u001B[0m') + if (packetLossOK): + statusQueue.put(0) + else: + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) + statusQueue.put(qMsg) + lock.release() self.close() except: os.kill(os.getppid(),signal.SIGUSR1) @@ -530,16 +603,38 @@ class SSHConnection(): multi_jobs = [] i = 0 lock = Lock() + status_queue = SimpleQueue() for UE_IPAddress in self.UEIPAddresses: device_id = self.UEDevices[i] - p = Process(target = SSH.Ping_common, args = (lock,UE_IPAddress,device_id,)) + p = Process(target = SSH.Ping_common, args = (lock,UE_IPAddress,device_id,status_queue,)) p.daemon = True p.start() multi_jobs.append(p) i = i + 1 for job in multi_jobs: job.join() - self.CreateHtmlTestRow(self.ping_args, 'OK', 0) + + if (status_queue.empty()): + self.CreateHtmlTestRow(self.ping_args, 'KO', len(self.UEDevices)) + sys.exit(1) + else: + ping_status = True + html_queue = SimpleQueue() + while (not status_queue.empty()): + count = status_queue.get() + if (count < 0): + ping_status = False + device_id = status_queue.get() + ip_addr = status_queue.get() + message = status_queue.get() + html_cell = "
UE (" + device_id + ")\nIP Address  : " + ip_addr + "\n" + message + "
" + html_queue.put(html_cell) + if (ping_status): + self.CreateHtmlTestRowQueue(self.ping_args, 'OK', len(self.UEDevices), html_queue) + else: + self.CreateHtmlTestRowQueue(self.ping_args, 'KO', len(self.UEDevices), html_queue) + self.CreateHtmlFooter() + sys.exit(1) def Iperf_ComputeTime(self): result = re.search('-t (?P\d+)', str(self.iperf_args)) @@ -573,15 +668,22 @@ class SSHConnection(): sys.exit(1) return result - def Iperf_analyzeV2Output(self, lock, UE_IPAddress): + def Iperf_analyzeV2Output(self, lock, UE_IPAddress, device_id, statusQueue): result = re.search('Server Report:', str(self.ssh.before)) if result is None: result = re.search('read failed: Connection refused', str(self.ssh.before)) + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) if result is not None: logging.debug('\u001B[1;37;41m Could not connect to iperf server! \u001B[0m') + statusQueue.put('Could not connect to iperf server!') else: logging.debug('\u001B[1;37;41m Server Report and Connection refused Not Found! \u001B[0m') - sys.exit(1) + statusQueue.put('Server Report and Connection refused Not Found!') + lock.release() + return result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(\d+\/..\d+) (\((?P[0-9\.]+)%\))', str(self.ssh.before)) if result is not None: bitrate = result.group('bitrate') @@ -589,41 +691,69 @@ class SSHConnection(): jitter = result.group('jitter') lock.acquire() logging.debug('\u001B[1;37;44m iperf result (' + UE_IPAddress + ') \u001B[0m') + iperfStatus = True + msg = '' if bitrate is not None: + msg += 'Bitrate : ' + bitrate + '\n' logging.debug('\u001B[1;34m Bitrate : ' + bitrate + '\u001B[0m') if packetloss is not None: + msg += 'Packet Loss : ' + packetloss + '%\n' logging.debug('\u001B[1;34m Packet Loss : ' + packetloss + '%\u001B[0m') if float(packetloss) > float(self.iperf_packetloss_threshold): + msg += 'Packet Loss too high!\n' logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m') - lock.release() - sys.exit(1) + iperfStatus = False if jitter is not None: + msg += 'Jitter : ' + jitter + '\n' logging.debug('\u001B[1;34m Jitter : ' + jitter + '\u001B[0m') + if (iperfStatus): + statusQueue.put(0) + else: + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) + statusQueue.put(msg) lock.release() - def Iperf_analyzeV3Output(self, lock, UE_IPAddress): + def Iperf_analyzeV3Output(self, lock, UE_IPAddress, device_id, statusQueue): result = re.search('(?P[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P[0-9\.]+)%\)) +(?:|receiver)\\\\r\\\\n(?:|\[ *\d+\] Sent \d+ datagrams)\\\\r\\\\niperf Done\.', str(self.ssh.before)) if result is None: result = re.search('(?Piperf: error - [a-zA-Z0-9 :]+)', str(self.ssh.before)) + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) if result is not None: logging.debug('\u001B[1;37;41m ' + result.group('error') + ' \u001B[0m') + statusQueue.put(result.group('error')) else: logging.debug('\u001B[1;37;41m Bitrate and/or Packet Loss Not Found! \u001B[0m') - sys.exit(1) + statusQueue.put('Bitrate and/or Packet Loss Not Found!') + lock.release() + bitrate = result.group('bitrate') packetloss = result.group('packetloss') lock.acquire() logging.debug('\u001B[1;37;44m iperf result (' + UE_IPAddress + ') \u001B[0m') logging.debug('\u001B[1;34m Bitrate : ' + bitrate + '\u001B[0m') + msg = 'Bitrate : ' + bitrate + '\n' + iperfStatus = True if packetloss is not None: logging.debug('\u001B[1;34m Packet Loss : ' + packetloss + '%\u001B[0m') + msg += 'Packet Loss : ' + packetloss + '%\n' if float(packetloss) > float(self.iperf_packetloss_threshold): logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m') - lock.release() - sys.exit(1) + msg += 'Packet Loss too high!\n' + iperfStatus = False + if (iperfStatus): + statusQueue.put(0) + else: + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) lock.release() - def Iperf_UL_common(self, lock, UE_IPAddress, device_id, idx, ue_num): + def Iperf_UL_common(self, lock, UE_IPAddress, device_id, idx, ue_num, statusQueue): ipnumbers = UE_IPAddress.split('.') if (len(ipnumbers) == 4): ipnumbers[3] = '1' @@ -645,25 +775,26 @@ class SSHConnection(): time.sleep(0.5) modified_options = self.Iperf_ComputeModifiedBW(idx, ue_num) + modified_options = modified_options.replace('-R','') time.sleep(0.5) self.command('rm -f iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) self.command('stdbuf -o0 adb -s ' + device_id + ' shell "/data/local/tmp/iperf -c ' + EPC_Iperf_UE_IPAddress + ' ' + modified_options + ' -p ' + str(port) + '" 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - self.Iperf_analyzeV2Output(lock, UE_IPAddress) + self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue) # Launch iperf server on EPC side self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('killall --signal SIGKILL iperf', self.EPCUserName, 5) self.close() - def Iperf_common(self, lock, UE_IPAddress, device_id, idx, ue_num): + def Iperf_common(self, lock, UE_IPAddress, device_id, idx, ue_num, statusQueue): try: # Single-UE profile -- iperf only on one UE if SSH.iperf_profile == 'single-ue' and idx != 0: return useIperf3 = False self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) - # if by chance ADB server and EPC are on the same remote host, at least log collection will take of it + # if by chance ADB server and EPC are on the same remote host, at least log collection will take care of it self.command('if [ ! -d ' + self.EPCSourceCodePath + '/scripts ]; then mkdir -p ' + self.EPCSourceCodePath + '/scripts ; fi', '\$', 5) self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5) # Checking if iperf / iperf3 are installed @@ -672,8 +803,16 @@ class SSHConnection(): if result is None: result = re.search('iperf', str(self.ssh.before)) if result is None: - logging.debug('\u001B[1;37;41m Neither iperf nor iperf3 installed on UE! \u001B[0m') - sys.exit(1) + message = 'Neither iperf nor iperf3 installed on UE!' + lock.acquire() + logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m') + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) + statusQueue.put(message) + lock.release() + return + #sys.exit(1) else: useIperf3 = True # in case of iperf, UL has its own function @@ -681,7 +820,7 @@ class SSHConnection(): result = re.search('-R', str(self.iperf_args)) if result is not None: self.close() - self.Iperf_UL_common(lock, UE_IPAddress, device_id, idx, ue_num) + self.Iperf_UL_common(lock, UE_IPAddress, device_id, idx, ue_num, statusQueue) return if (useIperf3): @@ -704,11 +843,11 @@ class SSHConnection(): if (useIperf3): self.command('stdbuf -o0 iperf3 -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - self.Iperf_analyzeV3Output(lock, UE_IPAddress) + self.Iperf_analyzeV3Output(lock, UE_IPAddress, device_id, statusQueue) else: self.command('stdbuf -o0 iperf -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - self.Iperf_analyzeV2Output(lock, UE_IPAddress) + self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue) self.close() self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) @@ -732,16 +871,38 @@ class SSHConnection(): i = 0 ue_num = len(self.UEIPAddresses) lock = Lock() + status_queue = SimpleQueue() for UE_IPAddress in self.UEIPAddresses: device_id = self.UEDevices[i] - p = Process(target = SSH.Iperf_common, args = (lock,UE_IPAddress,device_id,i,ue_num,)) + p = Process(target = SSH.Iperf_common, args = (lock,UE_IPAddress,device_id,i,ue_num,status_queue,)) p.daemon = True p.start() multi_jobs.append(p) i = i + 1 for job in multi_jobs: job.join() - self.CreateHtmlTestRow(self.iperf_args, 'OK', 0) + + if (status_queue.empty()): + self.CreateHtmlTestRow(self.iperf_args, 'KO', len(self.UEDevices)) + sys.exit(1) + else: + iperf_status = True + html_queue = SimpleQueue() + while (not status_queue.empty()): + count = status_queue.get() + if (count < 0): + iperf_status = False + device_id = status_queue.get() + ip_addr = status_queue.get() + message = status_queue.get() + html_cell = "
UE (" + device_id + ")\nIP Address  : " + ip_addr + "\n" + message + "
" + html_queue.put(html_cell) + if (iperf_status): + self.CreateHtmlTestRowQueue(self.iperf_args, 'OK', len(self.UEDevices), html_queue) + else: + self.CreateHtmlTestRowQueue(self.iperf_args, 'KO', len(self.UEDevices), html_queue) + self.CreateHtmlFooter() + sys.exit(1) def CheckProcessExist(self, initialize_eNB_flag): multi_jobs = [] @@ -872,6 +1033,7 @@ class SSHConnection(): self.command('cd /opt/ltebox/tools', '\$', 5) self.command('echo ' + self.EPCPassword + ' | sudo -S ./stop_mme', '\$', 5) self.close() + self.CreateHtmlTestRow('N/A', 'OK', 0) def TerminateSPGW(self): self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) @@ -1099,6 +1261,30 @@ class SSHConnection(): i += 1 self.htmlFile.write(' \n') + def CreateHtmlTestRowQueue(self, options, status, ue_status, ue_queue): + if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): + self.htmlFile.write(' \n') + self.htmlFile.write(' ' + SSH.testCase_id + '\n') + self.htmlFile.write(' ' + SSH.desc + '\n') + self.htmlFile.write(' ' + str(options) + '\n') + if (str(status) == 'OK'): + self.htmlFile.write(' ' + str(status) + '\n') + elif (str(status) == 'KO'): + self.htmlFile.write(' ' + str(status) + '\n') + else: + self.htmlFile.write(' ' + str(status) + '\n') + i = 0 + while (i < self.htmlUEConnected): + if (i < ue_status): + if (not ue_queue.empty()): + self.htmlFile.write(' ' + str(ue_queue.get()) + '\n') + else: + self.htmlFile.write(' -\n') + else: + self.htmlFile.write(' -\n') + i += 1 + self.htmlFile.write(' \n') + #----------------------------------------------------------- # Usage() #----------------------------------------------------------- From 977b7ebeb9d1f6309066d91180c6b5f190982586 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 12:23:26 +0200 Subject: [PATCH 058/128] Perform timing sync adjustment in subframe 5 instead of 6 Subframe 6 may be an MBMS subframe, and timing sync does not (yet) work on MBMS subframes. This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de). --- openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c | 2 +- openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c index e268a5b061..746ef1354f 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c @@ -81,7 +81,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms, // do not filter to have proactive timing adjustment max_pos_fil = max_pos; - if(subframe == 6) + if(subframe == 5) { diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c index 732db1fa4e..19461d7cee 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c @@ -82,7 +82,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms, // do not filter to have proactive timing adjustment max_pos_fil = max_pos; - if(subframe == 6) + if(subframe == 5) { diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3); From 71960795bf9a2d278043c897701875e75719801c Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 12:26:53 +0200 Subject: [PATCH 059/128] Fix DCI format 1C This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de). --- openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c | 23 ++++++++++---------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c index b9fbcad9c9..e0ea796a82 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c @@ -179,29 +179,29 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_ uint32_t rballoc=0; uint8_t mcs=0; + uint8_t Ngap=0; switch (N_RB_DL) { case 6: - mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs; - rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,6); - + mcs = ((DCI1C_1_5MHz_t *)dci_pdu)->mcs; + rballoc = conv_1C_RIV(((DCI1C_1_5MHz_t *)dci_pdu)->rballoc, 6); break; case 25: - mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs; - rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,6); - + mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs; + rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc, 25); break; case 50: - mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs; - rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc,6); - + mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs; + rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc, 50); + Ngap = ((DCI1C_10MHz_t *)dci_pdu)->Ngap; break; case 100: - mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs; - rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc,6); + mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs; + rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc, 100); + Ngap = ((DCI1C_20MHz_t *)dci_pdu)->Ngap; break; default: @@ -211,6 +211,7 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_ pdci_info_extarcted->mcs1 = mcs; pdci_info_extarcted->rballoc = rballoc; + pdci_info_extarcted->Ngap = Ngap; } void extract_dci1_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) From 53bb1fb091a11e19e0905cbf1390dbd69d3bf21b Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Tue, 14 Aug 2018 15:54:34 +0200 Subject: [PATCH 060/128] minor bugfix Compilation of UE softmodem failed. --- targets/RT/USER/lte-uesoftmodem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index 03283beb98..a2a12f9dd9 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -136,7 +136,7 @@ volatile int start_UE = 0; #endif volatile int oai_exit = 0; -static clock_source_t clock_source = internal; +clock_source_t clock_source = internal; static int wait_for_sync = 0; unsigned int mmapped_dma=0; From f935e09bbe81a17f1a5f341bdb32210536409f74 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 15:58:47 +0200 Subject: [PATCH 061/128] Enable RA_RNTI decoding through format1C DCI This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de) by Javier Morgade, Ph.D. --- openair1/SCHED_UE/phy_procedures_lte_ue.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index ed258ed47c..93a0641a26 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -2982,18 +2982,18 @@ LOG_DEBUG_END else if ((ue->prach_resources[eNB_id]) && (dci_alloc_rx[i].rnti == ue->prach_resources[eNB_id]->ra_RNTI) && - (dci_alloc_rx[i].format == format1A)) { + ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) { LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i); + LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i); LOG_DEBUG_END if (generate_ue_dlsch_params_from_dci(frame_rx, subframe_rx, - (DCI1A_5MHz_TDD_1_6_t *)&dci_alloc_rx[i].dci_pdu, + (void *)&dci_alloc_rx[i].dci_pdu, ue->prach_resources[eNB_id]->ra_RNTI, - format1A, + dci_alloc_rx[i].format, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id], ue->pdsch_vars_ra[eNB_id], &ue->dlsch_ra[eNB_id], From 68fae537dda67494c62599179cdf67a206494418 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Fri, 3 Nov 2017 17:54:25 +0100 Subject: [PATCH 062/128] Fixed MBSFN gold sequence generator This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de) by Javier Morgade, Ph.D. --- openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c b/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c index 14def309b7..69dbb705db 100644 --- a/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c +++ b/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c @@ -54,9 +54,9 @@ void lte_gold_mbsfn(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_mbsfn_tabl for (l=0; l<3; l++) { if (l==0) - x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + 2 + (7*(1+(sfn>>1)))))<<9); //cinit + x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + 2 + (7*(1+(sfn<<1)))))<<9); //cinit else - x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + ((l-1)<<2) + (7*(2+(sfn>>1)))))<<9); //cinit + x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + ((l-1)<<2) + (7*(2+(sfn<<1)))))<<9); //cinit //x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit //n = 0 From 02f94bf35bc2ab0322354a068e7f7f2d3c6916de Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Fri, 3 Nov 2017 15:30:55 +0100 Subject: [PATCH 063/128] Fix 24-bit MBSFN subframe configuration This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de) by Javier Morgade, Ph.D. --- openair1/PHY/INIT/lte_init.c | 6 +- openair1/PHY/INIT/lte_init_ue.c | 6 +- openair1/PHY/LTE_TRANSPORT/pmch_common.c | 94 +++++++++++++++++++++++- 3 files changed, 97 insertions(+), 9 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index cbae84f56b..bec0873276 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -450,11 +450,11 @@ void phy_config_sib2_eNB(uint8_t Mod_id, } else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration fp->MBSFN_config[i].fourFrames_flag = 1; fp->MBSFN_config[i].mbsfn_SubframeConfig = - mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]| + mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]| (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)| - (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16); + (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]<<16); - LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %d\n", i, + LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", i, fp->MBSFN_config[i].mbsfn_SubframeConfig); } } diff --git a/openair1/PHY/INIT/lte_init_ue.c b/openair1/PHY/INIT/lte_init_ue.c index 62d768a50a..1ed9e20d60 100644 --- a/openair1/PHY/INIT/lte_init_ue.c +++ b/openair1/PHY/INIT/lte_init_ue.c @@ -165,11 +165,11 @@ void phy_config_sib2_ue(module_id_t Mod_id,int CC_id, } else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration fp->MBSFN_config[i].fourFrames_flag = 1; fp->MBSFN_config[i].mbsfn_SubframeConfig = - mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]| + mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]| (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)| - (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16); + (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]<<16); - LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %d\n", i, + LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", i, fp->MBSFN_config[i].mbsfn_SubframeConfig); } } diff --git a/openair1/PHY/LTE_TRANSPORT/pmch_common.c b/openair1/PHY/LTE_TRANSPORT/pmch_common.c index 1d12c79621..a4821a420f 100644 --- a/openair1/PHY/LTE_TRANSPORT/pmch_common.c +++ b/openair1/PHY/LTE_TRANSPORT/pmch_common.c @@ -27,6 +27,7 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par uint32_t period; uint8_t i; + uint8_t j; // LOG_D(PHY,"is_pmch_subframe: frame %d, subframe %d, num_MBSFN_config %d\n", // frame,subframe,frame_parms->num_MBSFN_config); @@ -34,8 +35,8 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par for (i=0; inum_MBSFN_config; i++) { // we have at least one MBSFN configuration period = 1<MBSFN_config[i].radioframeAllocationPeriod; - if ((frame % period) == frame_parms->MBSFN_config[i].radioframeAllocationOffset) { - if (frame_parms->MBSFN_config[i].fourFrames_flag == 0) { + if (frame_parms->MBSFN_config[i].fourFrames_flag == 0) { + if ((frame % period) == frame_parms->MBSFN_config[i].radioframeAllocationOffset) { if (frame_parms->frame_type == FDD) { switch (subframe) { @@ -108,9 +109,96 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par break; } } + } - } else { // handle 4 frames case + } else { // handle 4 frames case + for(j=0;j<4;j++) { + if ((frame % period) == (frame_parms->MBSFN_config[i].radioframeAllocationOffset + j)) { + if (frame_parms->frame_type == FDD) { + switch (subframe) { + case 1: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x800000>>(j*6))) > 0) { + //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x800000>>(j*6)); + return(1); + } + + break; + + case 2: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x400000>>(j*6))) > 0) { + //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x400000>>(j*6)); + return(1); + } + + break; + + case 3: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x200000>>(j*6))) > 0) { + //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x200000>>(j*6)); + return(1); + } + + break; + + case 6: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x100000>>(j*6))) > 0) { + //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x100000>>(j*6)); + return(1); + } + + break; + + case 7: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x80000>>(j*6))) > 0) { + //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x80000>>(j*6)); + return(1); + } + + break; + + case 8: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x40000>>(j*6))) > 0) { + //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x40000>>(j*6)); + return(1); + } + + break; + } + } else { + switch (subframe) { + case 3: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF3) > 0) + return(1); + + break; + + case 4: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF4) > 0) + return(1); + + break; + + case 7: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF7) > 0) + return(1); + + break; + + case 8: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF8) > 0) + return(1); + + break; + + case 9: + if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF9) > 0) + return(1); + + break; + } + } + } } } } From 1b53fd402dcb7de7cbaac8a1e755b4a5457f04a8 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Fri, 1 Dec 2017 18:28:28 +0100 Subject: [PATCH 064/128] mcch logical channel properly decoded This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de) by Javier Morgade, Ph.D. --- openair1/SCHED_UE/phy_procedures_lte_ue.c | 17 +- openair2/LAYER2/MAC/mac.h | 13 +- openair2/LAYER2/MAC/ue_procedures.c | 968 +++++++++++++--------- openair2/RRC/LTE/rrc_UE.c | 20 + 4 files changed, 634 insertions(+), 384 deletions(-) diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index 93a0641a26..f4d3800724 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -3128,7 +3128,7 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs // LOG_D(PHY,"ue calling pmch subframe ..\n "); LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Querying for PMCH demodulation\n", - ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx); + ue->Mod_id,frame_rx,subframe_rx); #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) pmch_mcs = ue_query_mch(ue->Mod_id, @@ -3147,9 +3147,7 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Programming PMCH demodulation for mcs %d\n",ue->Mod_id,frame_rx,subframe_rx,pmch_mcs); fill_UE_dlsch_MCH(ue,pmch_mcs,1,0,0); - for (l=2; l<12; l++) { - slot_fep_mbsfn(ue, l, subframe_rx, @@ -3164,6 +3162,8 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs } + ue->dlsch_MCH[0]->harq_processes[0]->Qm = get_Qm(pmch_mcs); + ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms, ue->dlsch_MCH[0]->harq_processes[0]->nb_rb, ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even, @@ -3177,7 +3177,14 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs dlsch_unscrambling(&ue->frame_parms,1,ue->dlsch_MCH[0], ue->dlsch_MCH[0]->harq_processes[0]->G, ue->pdsch_vars_MCH[0]->llr[0],0,subframe_rx<<1); - + + LOG_D(PHY,"start turbo decode for MCH %d.%d --> nb_rb %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->harq_processes[0]->nb_rb); + LOG_D(PHY,"start turbo decode for MCH %d.%d --> rb_alloc_even %x \n", frame_rx, subframe_rx, (unsigned int)((intptr_t)ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even)); + LOG_D(PHY,"start turbo decode for MCH %d.%d --> Qm %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->harq_processes[0]->Qm); + LOG_D(PHY,"start turbo decode for MCH %d.%d --> Nl %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->harq_processes[0]->Nl); + LOG_D(PHY,"start turbo decode for MCH %d.%d --> G %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->harq_processes[0]->G); + LOG_D(PHY,"start turbo decode for MCH %d.%d --> Kmimo %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->Kmimo); + ret = dlsch_decoding(ue, ue->pdsch_vars_MCH[0]->llr[0], &ue->frame_parms, @@ -3206,7 +3213,7 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3, ue->dlsch_MCH[0]->max_turbo_iterations, ue->dlsch_MCH[0]->harq_processes[0]->G); - dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx); + // dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx); LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) for (int i=0; idlsch_MCH[0]->harq_processes[0]->TBS>>3; i++) { diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h index d9e914f087..f8121310b1 100644 --- a/openair2/LAYER2/MAC/mac.h +++ b/openair2/LAYER2/MAC/mac.h @@ -442,7 +442,7 @@ typedef struct { /*!\brief LCID of MCCH for DL */ #define MCCH_LCHANID 0 /*!\brief LCID of MCH scheduling info for DL */ -#define MCH_SCHDL_INFO 3 +#define MCH_SCHDL_INFO 30 /*!\brief LCID of Carrier component activation/deactivation */ #define CC_ACT_DEACT 27 //TTN (for D2D) @@ -1502,7 +1502,16 @@ typedef struct { /// MCCH status uint8_t mcch_status; /// MSI status - uint8_t msi_status; // could be an array if there are >1 MCH in one MBSFN area + uint8_t msi_status_v[28]; + uint8_t msi_current_alloc; + uint8_t msi_pmch; + + struct MBSFN_SubframeConfig *commonSF_Alloc_r9_mbsfn_SubframeConfig[8]; // FIXME replace 8 by MAX_MBSFN_AREA? + uint8_t commonSF_AllocPeriod_r9; + int common_num_sf_alloc; + + uint8_t pmch_lcids[28]; + uint16_t pmch_stop_mtch[28]; #endif //#ifdef CBA /// CBA RNTI for each group diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index dd78da7275..581fe9587d 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -750,7 +750,7 @@ ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, uint8_t sync_area) { - unsigned char num_sdu, i, *payload_ptr; + unsigned char num_sdu, i, j, *payload_ptr; unsigned char rx_lcids[NB_RB_MAX]; unsigned short rx_lengths[NB_RB_MAX]; #if UE_TIMING_TRACE @@ -771,47 +771,76 @@ ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, num_sdu); for (i = 0; i < num_sdu; i++) { - if (rx_lcids[i] == MCH_SCHDL_INFO) { - if (UE_mac_inst[module_idP].mcch_status == 1) { - LOG_I(MAC, - "[UE %d] Frame %d : MCH->MSI for sync area %d (eNB %d, %d bytes)\n", - module_idP, frameP, sync_area, eNB_index, - rx_lengths[i]); - // ??store necessary scheduling info to ue_mac_inst in order to - // calculate exact position of interested service (for the complex case has >1 mtch) - // set msi_status to 1 - UE_mac_inst[module_idP].msi_status = 1; - } - } else if (rx_lcids[i] == MCCH_LCHANID) { - LOG_I(MAC, - "[UE %d] Frame %d : SDU %d MCH->MCCH for sync area %d (eNB %d, %d bytes)\n", - module_idP, frameP, i, sync_area, eNB_index, - rx_lengths[i]); - mac_rrc_data_ind_ue(module_idP, CC_id, frameP, 0, // unknown subframe - M_RNTI, - MCCH, - payload_ptr, rx_lengths[i], eNB_index, - sync_area); - } else if (rx_lcids[i] == MTCH) { - if (UE_mac_inst[module_idP].msi_status == 1) { - LOG_I(MAC, - "[UE %d] Frame %d : MCH->MTCH for sync area %d (eNB %d, %d bytes)\n", - module_idP, frameP, sync_area, eNB_index, - rx_lengths[i]); + if (rx_lcids[i] == MCH_SCHDL_INFO) { + if (rx_lengths[i] & 0x01) { + LOG_E(MAC,"MCH Scheduling Information MAC Control Element should have an even size\n"); + } - mac_rlc_data_ind(module_idP, UE_mac_inst[module_idP].crnti, eNB_index, frameP, ENB_FLAG_NO, MBMS_FLAG_YES, MTCH, /*+ (maxDRB + 3), */ - (char *) payload_ptr, rx_lengths[i], 1, - NULL); + LOG_D(MAC,"MCH Scheduling Information, len(%d)\n",rx_lengths[i]); - } - } else { - LOG_W(MAC, - "[UE %d] Frame %d : unknown sdu %d rx_lcids[%d]=%d mcch status %d eNB %d \n", - module_idP, frameP, rx_lengths[i], i, rx_lcids[i], - UE_mac_inst[module_idP].mcch_status, eNB_index); - } + for (j=0; j> 3; + UE_mac_inst[module_idP].pmch_stop_mtch[j] = stop_mtch_val; + LOG_D(MAC,"lcid(%d),stop_mtch_val %d frameP(%d)\n", UE_mac_inst[module_idP].pmch_lcids[j], stop_mtch_val, frameP); + + if ((stop_mtch_val >= 2043) && (stop_mtch_val <= 2046)) { + LOG_D(MAC,"(reserved)\n"); + } + + UE_mac_inst[module_idP].msi_status_v[j] = 0; + + if (UE_mac_inst[module_idP].mcch_status==1) { + LOG_D(MAC,"[UE %d] Frame %d : MCH->MSI for sync area %d (eNB %d, %d bytes), i(%d)\n", module_idP, frameP, sync_area, eNB_index, rx_lengths[i], UE_mac_inst[module_idP].pmch_stop_mtch[j]); + if (UE_mac_inst[module_idP].pmch_stop_mtch[j] < 2043) { + UE_mac_inst[module_idP].pmch_stop_mtch[j] += UE_mac_inst[module_idP].msi_current_alloc; + UE_mac_inst[module_idP].msi_status_v[j] = 1; + } + } + } + } else if (rx_lcids[i] == MCCH_LCHANID) { + LOG_D(MAC,"[UE %d] Frame %d : SDU %d MCH->MCCH for sync area %d (eNB %d, %d bytes)\n",module_idP,frameP, i, sync_area, eNB_index, rx_lengths[i]); + mac_rrc_data_ind_ue(module_idP, + CC_id, + frameP,0, // unknown subframe + M_RNTI, + MCCH, + payload_ptr + 1, // Skip RLC layer 1st byte + rx_lengths[i] - 1, + eNB_index, + sync_area); + } else if (rx_lcids[i] <= 28) { + for (j=0; j<28; j++) { + if (rx_lcids[i] == UE_mac_inst[module_idP].pmch_lcids[j]) + break; + } + + if (j<28 && UE_mac_inst[module_idP].msi_status_v[j]==1) { + LOG_D(MAC,"[UE %d] Frame %d : MCH->MTCH for sync area %d (eNB %d, %d bytes), j=%d\n", module_idP, frameP, sync_area, eNB_index, rx_lengths[i], j); + + mac_rlc_data_ind( + module_idP, + UE_mac_inst[module_idP].crnti, + eNB_index, + frameP, + ENB_FLAG_NO, + MBMS_FLAG_YES, + rx_lcids[i], /*+ (maxDRB + 3),*/ + (char *)payload_ptr, + rx_lengths[i], + 1, + NULL); + + } + } else { + LOG_W(MAC, + "[UE %d] Frame %d : unknown sdu %d rx_lcids[%d]=%d mcch status %d eNB %d \n", + module_idP, frameP, rx_lengths[i], i, rx_lcids[i], + UE_mac_inst[module_idP].mcch_status, eNB_index); + } + + payload_ptr += rx_lengths[i]; } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME @@ -916,406 +945,591 @@ int8_t ue_get_mbsfn_sf_alloction (module_id_t module_idP, uint8_t mbsfn_sync_are } } -int -ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, - uint32_t subframe, uint8_t eNB_index, uint8_t * sync_area, - uint8_t * mcch_active) +int ue_query_p_mch_info(module_id_t module_idP, uint32_t frameP, uint32_t subframe, int commonSFAlloc_period, int commonSFAlloc_offset, int num_sf_alloc, int *mtch_active, int *msi_active, uint8_t *mch_lcid) +{ + int i, mtch_mcs = -1; + int mtch_flag = 0; + int msi_flag = 0; + + for (i = 0; i < 4; i++) { + if (UE_mac_inst[module_idP].pmch_Config[i] == NULL) + continue; + + int mch_scheduling_period = 8 << UE_mac_inst[module_idP].pmch_Config[i]->mch_SchedulingPeriod_r9; + uint8_t sf_AllocEnd_r9 = UE_mac_inst[module_idP].pmch_Config[i]->sf_AllocEnd_r9; + + if (sf_AllocEnd_r9 == 2047) { + msi_flag = 1; + break; + } + + if ((frameP % mch_scheduling_period) == (commonSFAlloc_offset + (frameP % 4))) { + if (i == 0) { + //msi and mtch are mutally excluded then the break is safe + if ((num_sf_alloc == 0) && (sf_AllocEnd_r9 >= 1)) { + msi_flag = 1; + LOG_D(MAC,"msi(%d) should be allocated:frame(%d),submframe(%d),num_sf_alloc(%d),sf_AllocEnd_r9(%d),common_num_sf_alloc(%d)\n",i,frameP,subframe,num_sf_alloc,sf_AllocEnd_r9,UE_mac_inst[module_idP].common_num_sf_alloc); + UE_mac_inst[module_idP].msi_current_alloc = num_sf_alloc; + UE_mac_inst[module_idP].msi_pmch = i; + } + } else { //more that one MCH ?? check better this condition + //msi and mtch are mutally excluded then the break is safe + if ((num_sf_alloc == UE_mac_inst[module_idP].pmch_Config[i-1]->sf_AllocEnd_r9 + 1) && (sf_AllocEnd_r9 >= (num_sf_alloc+1))) { + //msi should be just after + msi_flag = 1; + LOG_D(MAC,"msi(%d) should be allocated:frame(%d),submframe(%d),num_sf_alloc(%d),sf_AllocEnd_r9(%d),common_num_sf_alloc(%d)\n",i,frameP,subframe,num_sf_alloc,sf_AllocEnd_r9,UE_mac_inst[module_idP].common_num_sf_alloc); + UE_mac_inst[module_idP].msi_current_alloc = num_sf_alloc; + UE_mac_inst[module_idP].msi_pmch = i; + } + } + } + } + + for (i = 0; i < 28; i++) { + if (UE_mac_inst[module_idP].pmch_stop_mtch[i] >= num_sf_alloc) { + if (UE_mac_inst[module_idP].pmch_stop_mtch[i] != 2047) { + mtch_flag = 1; + if (UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch] != NULL) + mtch_mcs = UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch]->dataMCS_r9; + else + mtch_mcs = -1; + *mch_lcid = (uint8_t)i; + LOG_D(MAC,"mtch should be allocated:frame(%d),submframe(%d),num_sf_alloc(%d),mtch_mcs(%d),pmch_stop_mtch(%d),lcid(%d),msi_pmch(%d)\n",frameP,subframe,num_sf_alloc,mtch_mcs,UE_mac_inst[module_idP].pmch_stop_mtch[i],UE_mac_inst[module_idP].pmch_lcids[i],UE_mac_inst[module_idP].msi_pmch); + break; + } + } + } + + *mtch_active = mtch_flag; + *msi_active = msi_flag; + + return mtch_mcs; +} + +int ue_query_p_mch(module_id_t module_idP, uint32_t frameP, uint32_t subframe, int *mtch_active, int *msi_active, uint8_t *mch_lcid) +{ + int i, j, mtch_mcs = -1; + int mtch_flag = 0; + + // Acount for sf_allocable in CSA + int num_sf_alloc = 0; + for (i = 0; i < 8; i++) { + if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] == NULL) + continue; + + if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) // one-frameP format + continue; + + // four-frameP format + uint32_t common_mbsfn_SubframeConfig = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[2] | + (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[1]<<8) | + (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]<<16); + for (j = 0; j < 24; j++) + num_sf_alloc += ((common_mbsfn_SubframeConfig & (0x800000 >> j)) == (0x800000 >> j)); + } + + for (i = 0; i < 8; i++ ) { + if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] == NULL) + continue; + + if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) // one-frameP format + continue; + + // four-frameP format + int common_mbsfn_alloc_offset = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->radioframeAllocationOffset; + int common_mbsfn_period = 1 << UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->radioframeAllocationPeriod; + int commonSF_AllocPeriod = 4 << UE_mac_inst[module_idP].commonSF_AllocPeriod_r9; + + uint32_t common_mbsfn_SubframeConfig = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[2] | + (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[1]<<8) | + (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]<<16); + + int jj = frameP % 4; + if ((frameP % common_mbsfn_period) != (common_mbsfn_alloc_offset + jj)) + continue; + + if(UE_mac_inst[module_idP].tdd_Config == NULL){ + switch (subframe) { + case 1: + if ((common_mbsfn_SubframeConfig & (0x800000 >> (jj*6))) == (0x800000 >> (jj*6))) { + mtch_flag = 1; + mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid); + UE_mac_inst[module_idP].common_num_sf_alloc++; + UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48; + } + break; + case 2: + if ((common_mbsfn_SubframeConfig & (0x400000 >> (jj*6))) == (0x400000 >> (jj*6))) { + mtch_flag = 1; + mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid); + UE_mac_inst[module_idP].common_num_sf_alloc++; + UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48; + } + break; + case 3: + if ((common_mbsfn_SubframeConfig & (0x200000 >> (jj*6))) == (0x200000 >> (jj*6))) { + mtch_flag = 1; + mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid); + UE_mac_inst[module_idP].common_num_sf_alloc++; + UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48; + } + break; + case 6: + if ((common_mbsfn_SubframeConfig & (0x100000 >> (jj*6))) == (0x100000 >> (jj*6))) { + mtch_flag = 1; + mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid); + UE_mac_inst[module_idP].common_num_sf_alloc++; + UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48; + } + break; + case 7: + if ((common_mbsfn_SubframeConfig & (0x80000 >> (jj*6))) == (0x80000 >> (jj*6))) { + mtch_flag = 1; + mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid); + UE_mac_inst[module_idP].common_num_sf_alloc++; + UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48; + } + break; + case 8: + if ((common_mbsfn_SubframeConfig & (0x40000 >> (jj*6))) == (0x40000 >> (jj*6))) { + mtch_flag = 1; + mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid); + UE_mac_inst[module_idP].common_num_sf_alloc++; + UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc% ( num_sf_alloc*commonSF_AllocPeriod/common_mbsfn_period);//48; + } + break; + } + } else { + // TODO TDD + } + if (mtch_flag == 1) + break; + } + + return mtch_mcs; +} + +int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_t subframe, uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active) { - int i = 0, j = 0, ii = 0, msi_pos = 0, mcch_mcs = -1; - int mcch_flag = 0, mtch_flag = 0, msi_flag = 0; - int mbsfn_period = 0; // 1<<(UE_mac_inst[module_idP].mbsfn_SubframeConfig[0]->radioframeAllocationPeriod); - int mcch_period = 0; // 32<<(UE_mac_inst[module_idP].mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - int mch_scheduling_period = -1; - - int frame_FDD = 1; - + int i = 0, j = 0, ii = 0, jj = 0, msi_pos = 0, mcch_mcs = -1, mtch_mcs = -1; + int mcch_flag = 0, mtch_flag = 0, msi_flag = 0; + long mch_scheduling_period = -1; + uint8_t mch_lcid = 0; #if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].ue_query_mch); + start_meas(&UE_mac_inst[module_idP].ue_query_mch); #endif - if (UE_mac_inst[module_idP].pmch_Config[0]) { - mch_scheduling_period = - 8 << (UE_mac_inst[module_idP]. - pmch_Config[0]->mch_SchedulingPeriod_r9); + if (UE_mac_inst[module_idP].pmch_Config[0]) { + mch_scheduling_period = 8 << UE_mac_inst[module_idP].pmch_Config[0]->mch_SchedulingPeriod_r9; + } + + for (i = 0; + i < UE_mac_inst[module_idP].num_active_mbsfn_area; + i++ ) + { + // assume, that there is always a mapping + if ((j = ue_get_mbsfn_sf_alloction(module_idP,i,eNB_index)) == -1) { + return -1; // continue; } - for (i = 0; i < UE_mac_inst[module_idP].num_active_mbsfn_area; i++) { - // assume, that there is always a mapping - if ((j = - ue_get_mbsfn_sf_alloction(module_idP, i, eNB_index)) == -1) { - return -1; // continue; - } + ii = 0; + msi_pos = 0; + + long mbsfn_period = 1 << UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationPeriod; + long mbsfn_alloc_offset = UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationOffset; + long mcch_period = 32 << UE_mac_inst[module_idP].mbsfn_AreaInfo[j]->mcch_Config_r9.mcch_RepetitionPeriod_r9; + long mcch_offset = UE_mac_inst[module_idP].mbsfn_AreaInfo[j]->mcch_Config_r9.mcch_Offset_r9; - ii = 0; - msi_pos = 0; - mbsfn_period = - 1 << (UE_mac_inst[module_idP]. - mbsfn_SubframeConfig[0]->radioframeAllocationPeriod); - mcch_period = - 32 << (UE_mac_inst[module_idP]. - mbsfn_AreaInfo[0]->mcch_Config_r9. - mcch_RepetitionPeriod_r9); + LOG_D(MAC, + "[UE %d] Frame %d subframe %d: Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %ld, mcch period %ld,mac sched period (%ld,%ld))\n", + module_idP,frameP, subframe,i,UE_mac_inst[module_idP].num_active_mbsfn_area, + j,UE_mac_inst[module_idP].num_sf_allocation_pattern,mbsfn_period,mcch_period, + mcch_offset,mbsfn_alloc_offset); - LOG_D(MAC, - "[UE %d] Frame %d subframe %d: Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d,mac sched period (%d,%ld))\n", - module_idP, frameP, subframe, i, - UE_mac_inst[module_idP].num_active_mbsfn_area, j, - UE_mac_inst[module_idP].num_sf_allocation_pattern, - mbsfn_period, mcch_period, mch_scheduling_period, - UE_mac_inst[module_idP]. - mbsfn_SubframeConfig[j]->radioframeAllocationOffset); + // get the real MCS value + switch (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.signallingMCS_r9) { + case 0: + mcch_mcs = 2; + break; - // get the real MCS value - switch (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]-> - mcch_Config_r9.signallingMCS_r9) { - case 0: - mcch_mcs = 2; - break; + case 1: + mcch_mcs = 7; + break; - case 1: - mcch_mcs = 7; - break; + case 2: + mcch_mcs = 13; + break; - case 2: - mcch_mcs = 13; - break; + case 3: + mcch_mcs = 19; + break; + } - case 3: - mcch_mcs = 19; - break; - } + if (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format + if (frameP % mbsfn_period == mbsfn_alloc_offset) { // MBSFN frameP - if (frameP % mbsfn_period == UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationOffset) { // MBSFN frameP - if (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format + if (UE_mac_inst[module_idP].pmch_Config[0]) { + // Find the first subframe in this MCH to transmit MSI + if (frameP % mch_scheduling_period == mbsfn_alloc_offset) { + while (ii == 0) { + ii = UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & (0x80 >> msi_pos); + msi_pos++; + } + } + } - if (UE_mac_inst[module_idP].pmch_Config[0]) { - // Find the first subframe in this MCH to transmit MSI - if (frameP % mch_scheduling_period == - UE_mac_inst[module_idP]. - mbsfn_SubframeConfig - [j]->radioframeAllocationOffset) { - while (ii == 0) { - ii = UE_mac_inst[module_idP]. - mbsfn_SubframeConfig[j]-> - subframeAllocation.choice. - oneFrame.buf[0] & (0x80 >> msi_pos); - msi_pos++; - } - } - } + // Check if the subframe is for MSI, MCCH or MTCHs and Set the correspoding flag to 1 + switch (subframe) { + case 1: + if (UE_mac_inst[module_idP].tdd_Config == NULL) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) { + if (msi_pos == 1) { + msi_flag = 1; + } - if (UE_mac_inst[module_idP].tdd_Config == NULL) - frame_FDD = 1; - else - frame_FDD = 0; - // Check if the subframe is for MSI, MCCH or MTCHs and Set the correspoding flag to 1 - switch (subframe) { - case 1: - if (frame_FDD == 1) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) { - if (msi_pos == 1) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_FDD_SF1) == - MBSFN_FDD_SF1)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } - mtch_flag = 1; - } - } + break; - break; + case 2: + if (UE_mac_inst[module_idP].tdd_Config == NULL) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) { + if (msi_pos == 2) { + msi_flag = 1; + } - case 2: - if (frame_FDD == 1) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) { - if (msi_pos == 2) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_FDD_SF2) == - MBSFN_FDD_SF2)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } - mtch_flag = 1; - } - } + break; - break; + case 3: + if (UE_mac_inst[module_idP].tdd_Config != NULL) { // TDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) { + if (msi_pos == 1) { + msi_flag = 1; + } - case 3: - if (frame_FDD == 0) { //TDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) { - if (msi_pos == 1) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_TDD_SF3) == - MBSFN_TDD_SF3)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } else { // FDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) { + if (msi_pos == 3) { + msi_flag = 1; + } - mtch_flag = 1; - } - } else { // FDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) { - if (msi_pos == 3) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_FDD_SF3) == - MBSFN_FDD_SF3)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } - mtch_flag = 1; - } - } + break; - break; + case 4: + if (UE_mac_inst[module_idP].tdd_Config != NULL) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) { + if (msi_pos == 2) { + msi_flag = 1; + } - case 4: - if (frame_FDD == 0) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) { - if (msi_pos == 2) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_TDD_SF4) == - MBSFN_TDD_SF4)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } - mtch_flag = 1; - } - } + break; - break; + case 6: + if (UE_mac_inst[module_idP].tdd_Config == NULL) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) { + if (msi_pos == 4) { + msi_flag = 1; + } - case 6: - if (frame_FDD == 1) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) { - if (msi_pos == 4) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_FDD_SF6) == - MBSFN_FDD_SF6)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } - mtch_flag = 1; - } - } + break; - break; + case 7: + if (UE_mac_inst[module_idP].tdd_Config != NULL) { // TDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) { + if (msi_pos == 3) { + msi_flag = 1; + } - case 7: - if (frame_FDD == 0) { // TDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) { - if (msi_pos == 3) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_TDD_SF7) == - MBSFN_TDD_SF7)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } else { // FDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) { + if (msi_pos == 5) { + msi_flag = 1; + } - mtch_flag = 1; - } - } else { // FDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) { - if (msi_pos == 5) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_FDD_SF7) == - MBSFN_FDD_SF7)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } - mtch_flag = 1; - } - } + break; - break; + case 8: + if (UE_mac_inst[module_idP].tdd_Config != NULL) { //TDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) { + if (msi_pos == 4) { + msi_flag = 1; + } - case 8: - if (frame_FDD == 0) { //TDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) { - if (msi_pos == 4) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_TDD_SF8) == - MBSFN_TDD_SF8)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } else { // FDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) { + if (msi_pos == 6) { + msi_flag = 1; + } - mtch_flag = 1; - } - } else { // FDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) { - if (msi_pos == 6) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_FDD_SF8) == - MBSFN_FDD_SF8)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } - mtch_flag = 1; - } - } + break; - break; + case 9: + if (UE_mac_inst[module_idP].tdd_Config != NULL) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) { + if (msi_pos == 5) { + msi_flag = 1; + } - case 9: - if (frame_FDD == 0) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig - [j]->subframeAllocation.choice.oneFrame. - buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) { - if (msi_pos == 5) { - msi_flag = 1; - } + if ((frameP % mcch_period == mcch_offset) && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9)) { + mcch_flag = 1; + } - if ((frameP % mcch_period == - UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.mcch_Offset_r9) - && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo - [i]->mcch_Config_r9.sf_AllocInfo_r9. - buf[0] & MBSFN_TDD_SF9) == - MBSFN_TDD_SF9)) { - mcch_flag = 1; - } + mtch_flag = 1; + } + } - mtch_flag = 1; - } - } + break; + }// end switch - break; - } // end switch + // Acount for sf_allocable in CSA + int num_sf_alloc = 0; + for (i = 0; i < 8; i++) { + if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] == NULL) + continue; - // sf allocation is non-overlapping - if ((msi_flag == 1) || (mcch_flag == 1) - || (mtch_flag == 1)) { - LOG_D(MAC, - "[UE %d] Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n", - module_idP, frameP, subframe, i, j, msi_flag, - mcch_flag, mtch_flag); + if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.present != MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) + continue; + + uint32_t common_mbsfn_SubframeConfig = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]; + for (j = 0; j < 6; j++) + num_sf_alloc += ((common_mbsfn_SubframeConfig & (0x80 >> j)) == (0x80 >> j)); + } + + for (i = 0; i < 28; i++) { + if (UE_mac_inst[module_idP].pmch_stop_mtch[i] >= num_sf_alloc) { + if (UE_mac_inst[module_idP].pmch_stop_mtch[i] != 2047) { + if (UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch] != NULL) + mtch_mcs = UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch]->dataMCS_r9; + else + mtch_mcs = -1; + mch_lcid = (uint8_t)i; + break; + } + } + } + + // sf allocation is non-overlapping + if ((msi_flag==1) || (mcch_flag==1) || (mtch_flag==1)) { + LOG_D(MAC,"[UE %d] Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n", + module_idP, frameP, subframe,i,j,msi_flag,mcch_flag,mtch_flag); + + *sync_area=i; + break; + } + } + } else { // four-frameP format + uint32_t mbsfn_SubframeConfig = UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[2] | + (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[1]<<8) | + (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0]<<16); + uint32_t MCCH_mbsfn_SubframeConfig = /* UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[2] | + (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[1]<<8) | */ + (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0]<<16); + + jj=frameP%4; + if ((frameP % mbsfn_period) == (mbsfn_alloc_offset+jj)) { + if (UE_mac_inst[module_idP].tdd_Config == NULL) { + switch (subframe) { + case 1: + if ((mbsfn_SubframeConfig & (0x800000>>(jj*6))) == (0x800000>>(jj*6))) { + if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x800000>>(jj*6))) == (0x800000>>(jj*6)))) { + mcch_flag=1; + LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n", + frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x800000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc); + if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL) + UE_mac_inst[module_idP].common_num_sf_alloc++; + } + } + break; + case 2: + if ((mbsfn_SubframeConfig & (0x400000>>(jj*6))) == (0x400000>>(jj*6))) { + if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x400000>>(jj*6))) == (0x400000>>(jj*6)))) { + mcch_flag=1; + LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n", + frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x400000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc); + if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL) + UE_mac_inst[module_idP].common_num_sf_alloc++; + } + } + break; + case 3: + if ((mbsfn_SubframeConfig & (0x200000>>(jj*6))) == (0x200000>>(jj*6))) { + if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x200000>>(jj*6))) == (0x200000>>(jj*6)))) { + LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n", + frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x200000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc); + mcch_flag=1; + if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL) + UE_mac_inst[module_idP].common_num_sf_alloc++; + } + } + break; + case 6: + if ((mbsfn_SubframeConfig & (0x100000>>(jj*6))) == (0x100000>>(jj*6))) { + if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x100000>>(jj*6))) == (0x100000>>(jj*6)))) { + LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n", + frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x100000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc); + mcch_flag=1; + if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL) + UE_mac_inst[module_idP].common_num_sf_alloc++; + } + } + break; + case 7: + if ((mbsfn_SubframeConfig & (0x80000>>(jj*6))) == (0x80000>>(jj*6))) { + if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x80000>>(jj*6))) == (0x80000>>(jj*6)))) { + LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n", + frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x80000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc); + if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL) + UE_mac_inst[module_idP].common_num_sf_alloc++; + mcch_flag=1; + } + } + break; + case 8: + if ((mbsfn_SubframeConfig & (0x40000>>(jj*6))) == (0x40000>>(jj*6))) { + if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x40000>>(jj*6))) == (0x40000>>(jj*6)))) { + LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n", + frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x40000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc); + if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL) + UE_mac_inst[module_idP].common_num_sf_alloc++; + mcch_flag=1; + } + } + break; + }// end switch + } else { + // TODO TDD + } + + mtch_mcs = ue_query_p_mch(module_idP, frameP, subframe, &mtch_flag, &msi_flag, &mch_lcid); + + // sf allocation is non-overlapping + if ((msi_flag==1) || (mcch_flag==1) || (mtch_flag==1)) { + LOG_D(MAC,"[UE %d] Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n", + module_idP, frameP, subframe,i,j,msi_flag,mcch_flag,mtch_flag); + *sync_area=i; + break; + } + } + } + } // end of for - *sync_area = i; - break; - } - } else { // four-frameP format - } - } - } // end of for #if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_query_mch); + stop_meas(&UE_mac_inst[module_idP].ue_query_mch); #endif - if ((mcch_flag == 1)) { // || (msi_flag==1)) - *mcch_active = 1; - } + if ((mcch_flag == 1)) { // || (msi_flag==1)) + *mcch_active = 1; + } - if ((mcch_flag == 1) - || ((msi_flag == 1) && (UE_mac_inst[module_idP].mcch_status == 1))) { - return mcch_mcs; - } else if ((mtch_flag == 1) - && (UE_mac_inst[module_idP].msi_status == 1)) { - return UE_mac_inst[module_idP].pmch_Config[0]->dataMCS_r9; + if ( (mcch_flag==1) || ((msi_flag==1) && (UE_mac_inst[module_idP].mcch_status==1)) ) { + if (msi_flag!=1) { + for (i=0; i<8; i++) + UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] = NULL; + for (i=0; i<15; i++) + UE_mac_inst[module_idP].pmch_Config[i] = NULL; + for (i=0; i<28 ;i++) { + UE_mac_inst[module_idP].pmch_lcids[i] = -1; + UE_mac_inst[module_idP].pmch_stop_mtch[i] = 2047; + UE_mac_inst[module_idP].msi_status_v[i] = 0; + } } else { - return -1; + for (i=0; i<28; i++) { + UE_mac_inst[module_idP].pmch_lcids[i] = -1; + UE_mac_inst[module_idP].pmch_stop_mtch[i] = 2047; + UE_mac_inst[module_idP].msi_status_v[i] = 0; + } } + return mcch_mcs; + } else if ((mtch_flag==1) && (UE_mac_inst[module_idP].msi_status_v[(mch_lcid > 27) ? 27 : mch_lcid] == 1)) { + return mtch_mcs; + } else { + return -1; + } } #endif diff --git a/openair2/RRC/LTE/rrc_UE.c b/openair2/RRC/LTE/rrc_UE.c index c23bf12d52..ecdc451eee 100644 --- a/openair2/RRC/LTE/rrc_UE.c +++ b/openair2/RRC/LTE/rrc_UE.c @@ -4594,10 +4594,30 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB //----------------------------------------------------------------------------- void decode_MBSFNAreaConfiguration( module_id_t ue_mod_idP, uint8_t eNB_index, frame_t frameP, uint8_t mbsfn_sync_area ) { + uint8_t i; protocol_ctxt_t ctxt; LOG_I(RRC,"[UE %d] Frame %d : Number of MCH(s) in the MBSFN Sync Area %d is %d\n", ue_mod_idP, frameP, mbsfn_sync_area, UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9.list.count); + + // Configure commonSF_Alloc + for(i=0; i< UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.count;i++){ + LOG_W(RRC,"[UE %d] Frame %d, commonSF_Alloc_r9: radioframeAllocationPeriod(%ldn),radioframeAllocationOffset(%ld), subframeAllocation(%x,%x,%x)\n", + ue_mod_idP, frameP, + UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->radioframeAllocationPeriod<<1, + UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->radioframeAllocationOffset, + UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[0], + UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[1], + UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[2]); + UE_mac_inst[ue_mod_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] = UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]; + } + LOG_W(RRC,"[UE %d] Frame %d, commonSF_AllocPeriod_r9 %drf \n", + ue_mod_idP, frameP, + 4<commonSF_AllocPeriod_r9); + + // Configure commonSF_AllocPeriod + UE_mac_inst[ue_mod_idP].commonSF_AllocPeriod_r9 = UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_AllocPeriod_r9; + // store to MAC/PHY necessary parameters for receiving MTCHs rrc_mac_config_req_ue(ue_mod_idP,0,eNB_index, From 96903ed59ff0c0ecaa20b4eb37d4b37742af8f5d Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 12:50:47 +0200 Subject: [PATCH 065/128] Use logical && instead of binary & in phy_procedures_UE_RX() This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de). --- openair1/SCHED_UE/phy_procedures_lte_ue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index f4d3800724..d578ef2a76 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -4716,7 +4716,7 @@ LOG_DEBUG_END if (do_pdcch_flag) { if ((l==pilot1) || - ((pmch_flag==1)&(l==l2))) { + ((pmch_flag==1)&&(l==l2))) { LOG_D(PHY,"[UE %d] Frame %d: Calling pdcch procedures (eNB %d)\n",ue->Mod_id,frame_rx,eNB_id); //start_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]); From 390c5011a55eebcaa3d59276ceea57c378087e06 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 12:54:14 +0200 Subject: [PATCH 066/128] Call ue_measurement_procedures() even for last OFDM sybol in second slot. Also for PMCH subframes, call slot_fep() for first OFDM symbol of next subframe. This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de). --- openair1/SCHED_UE/phy_procedures_lte_ue.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index d578ef2a76..33c69d7c78 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -2516,7 +2516,7 @@ void ue_measurement_procedures( T_INT((int)ue->common_vars.freq_offset)); } - if (l==(6-ue->frame_parms.Ncp)) { + if (( (slot%2) == 0) && (l==(6-ue->frame_parms.Ncp))) { // make sure we have signal from PSS/SSS for N0 measurement // LOG_I(PHY," l==(6-ue->frame_parms.Ncp) ue_rrc_measurements\n"); @@ -4736,9 +4736,22 @@ LOG_DEBUG_END ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode); LOG_D(PHY," ------ end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx); - // If this is PMCH, call procedures and return + + // If this is PMCH, call procedures, do channel estimation for first symbol of next DL subframe and return if (pmch_flag == 1) { ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag); + + int next_subframe_rx = (1+subframe_rx)%10; + if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) + { + slot_fep(ue, + 0, + (next_subframe_rx<<1), + 0, + 0, + 0); + } + return 0; } @@ -4848,6 +4861,7 @@ LOG_DEBUG_END ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode); } // for l=1..l2 + ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode); // do first symbol of next downlink subframe for channel estimation int next_subframe_rx = (1+subframe_rx)%10; From 8dd3a1306ad2003c6a2dad229ba3f9725e8bcaab Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 12:47:52 +0200 Subject: [PATCH 067/128] Also send MTCH using mac_xface->ue_send_mch_sdu() This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de). --- openair1/SCHED_UE/phy_procedures_lte_ue.c | 35 +++++++++++------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index 33c69d7c78..ec296a058d 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -3229,25 +3229,24 @@ LOG_DEBUG_END } else { // decoding successful #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - if (mcch_active == 1) { - ue_send_mch_sdu(ue->Mod_id, - CC_id, - frame_rx, - ue->dlsch_MCH[0]->harq_processes[0]->b, - ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3, - eNB_id,// not relevant in eMBMS context - sync_area); + ue_send_mch_sdu(ue->Mod_id, + CC_id, + frame_rx, + ue->dlsch_MCH[0]->harq_processes[0]->b, + ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3, + eNB_id,// not relevant in eMBMS context + sync_area); + + if (mcch_active == 1) ue->dlsch_mcch_received[sync_area][0]++; - - - if (ue->dlsch_mch_received_sf[subframe_rx%5][0] == 1 ) { - ue->dlsch_mch_received_sf[subframe_rx%5][0]=0; - } else { - ue->dlsch_mch_received[0]+=1; - ue->dlsch_mch_received_sf[subframe_rx][0]=1; - } - - + else + ue->dlsch_mtch_received[sync_area][0]++; + + if (ue->dlsch_mch_received_sf[subframe_rx%5][0] == 1 ) { + ue->dlsch_mch_received_sf[subframe_rx%5][0]=0; + } else { + ue->dlsch_mch_received[0]+=1; + ue->dlsch_mch_received_sf[subframe_rx][0]=1; } #endif // #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) From e239e94154beab5b78b1a61a975f9b207a2b6b83 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 13:00:50 +0200 Subject: [PATCH 068/128] Fix PDCP and RLC for MBMS Also add output of MBMS multicast IP packets to the network. This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de) by Javier Morgade, Ph.D. --- openair2/LAYER2/PDCP_v10.1.0/pdcp.c | 68 +++++++++++++++++++++++++---- openair2/LAYER2/RLC/rlc.h | 2 +- openair2/LAYER2/RLC/rlc_rrc.c | 6 ++- 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index e12fb80e1b..04999bab38 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -30,6 +30,8 @@ #define PDCP_C //#define DEBUG_PDCP_FIFO_FLUSH_SDU +#define MBMS_MULTICAST_OUT + #include "assertions.h" #include "hashtable.h" #include "pdcp.h" @@ -66,6 +68,17 @@ extern int otg_enabled; #include "common/ran_context.h" extern RAN_CONTEXT_t RC; +#ifdef MBMS_MULTICAST_OUT +# include +# include +# include +# include +# include +# include + +static int mbms_socket = -1; +#endif + //----------------------------------------------------------------------------- /* * If PDCP_UNIT_TEST is set here then data flow between PDCP and RLC is broken @@ -758,11 +771,26 @@ pdcp_data_ind( packet_forwarded = FALSE; #endif +#ifdef MBMS_MULTICAST_OUT + if ((MBMS_flagP != 0) && (mbms_socket != -1)) { + struct iphdr *ip_header = (struct iphdr*)&sdu_buffer_pP->data[payload_offset]; + struct udphdr *udp_header = (struct udphdr*)&sdu_buffer_pP->data[payload_offset + sizeof(struct iphdr)]; + struct sockaddr_in dest_addr; + + dest_addr.sin_family = AF_INET; + dest_addr.sin_port = udp_header->dest; + dest_addr.sin_addr.s_addr = ip_header->daddr; + + sendto(mbms_socket, &sdu_buffer_pP->data[payload_offset], sdu_buffer_sizeP - payload_offset, MSG_DONTWAIT, (struct sockaddr*)&dest_addr, sizeof(dest_addr)); + packet_forwarded = TRUE; + } +#endif + if (FALSE == packet_forwarded) { new_sdu_p = get_free_mem_block(sdu_buffer_sizeP - payload_offset + sizeof (pdcp_data_ind_header_t), __func__); if (new_sdu_p) { - if (pdcp_p->rlc_mode == RLC_MODE_AM ) { + if ((MBMS_flagP == 0) && (pdcp_p->rlc_mode == RLC_MODE_AM)) { pdcp_p->last_submitted_pdcp_rx_sn = sequence_number; } @@ -803,7 +831,6 @@ pdcp_data_ind( } - } /* Print octets of incoming data in hexadecimal form */ LOG_D(PDCP, "Following content has been received from RLC (%d,%d)(PDCP header has already been removed):\n", @@ -839,13 +866,14 @@ pdcp_data_ind( #if defined(STOP_ON_IP_TRAFFIC_OVERLOAD) - else { - AssertFatal(0, PROTOCOL_PDCP_CTXT_FMT" PDCP_DATA_IND SDU DROPPED, OUT OF MEMORY \n", - PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p)); - } - + else { + AssertFatal(0, PROTOCOL_PDCP_CTXT_FMT" PDCP_DATA_IND SDU DROPPED, OUT OF MEMORY \n", + PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p)); + } #endif + } + free_mem_block(sdu_buffer_pP, __func__); if (ctxt_pP->enb_flag) { @@ -1458,8 +1486,12 @@ rrc_pdcp_config_asn1_req ( for (j=0; jlist.count; j++) { MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j]; - lc_id = MBMS_SessionInfo_p->sessionId_r9->buf[0]; + if (MBMS_SessionInfo_p->sessionId_r9) + lc_id = MBMS_SessionInfo_p->sessionId_r9->buf[0]; + else + lc_id = MBMS_SessionInfo_p->logicalChannelIdentity_r9; mch_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string +// mch_id = j; // can set the mch_id = i if (ctxt_pP->enb_flag) { @@ -1480,6 +1512,14 @@ rrc_pdcp_config_asn1_req ( } } + LOG_D(PDCP, "lc_id (%02ld) mch_id(%02x,%02x,%02x) drb_id(%ld) action(%d)\n", + lc_id, + MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[0], + MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[1], + MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2], + drb_id, + action); + pdcp_config_req_asn1 ( ctxt_pP, NULL, // unused for MBMS @@ -2018,6 +2058,12 @@ void pdcp_layer_init(void) #endif } +#ifdef MBMS_MULTICAST_OUT + mbms_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); + if (mbms_socket == -1) + LOG_W(PDCP, "Could not create RAW socket, MBMS packets will not be put to the network\n"); +#endif + LOG_I(PDCP, "PDCP layer has been initialized\n"); pdcp_output_sdu_bytes_to_write=0; @@ -2068,6 +2114,12 @@ void pdcp_layer_cleanup (void) { list_free (&pdcp_sdu_list); hashtable_destroy(pdcp_coll_p); +#ifdef MBMS_MULTICAST_OUT + if(mbms_socket != -1) { + close(mbms_socket); + mbms_socket = -1; + } +#endif } #ifdef PDCP_USE_RT_FIFO diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h index ff49b2d056..8c557188a2 100644 --- a/openair2/LAYER2/RLC/rlc.h +++ b/openair2/LAYER2/RLC/rlc.h @@ -208,7 +208,7 @@ rlc_mbms_id_t rlc_mbms_lcid2service_session_id_eNB[MAX_eNB][RLC_MAX_MBMS_ #define rlc_mbms_ue_get_lcid_by_rb_id(uE_mOD,rB_iD) rlc_mbms_rbid2lcid_ue[uE_mOD][rB_iD] #define rlc_mbms_ue_set_lcid_by_rb_id(uE_mOD,rB_iD,lOG_cH_iD) do { \ - AssertFatal(rB_iDlist.count; j++) { MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j]; - mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0]; + if (MBMS_SessionInfo_p->sessionId_r9) + mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0]; + else + mbms_session_id = MBMS_SessionInfo_p->logicalChannelIdentity_r9; lc_id = mbms_session_id; mbms_service_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string +// mbms_service_id = j; // can set the mch_id = i if (ctxt_pP->enb_flag) { From 93f494f10655a6c27d8e7d9f756f6da5fe68d528 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 12:21:39 +0200 Subject: [PATCH 069/128] Fix channel impulse response peak detection when adjusting the timing sync This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de). --- openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c | 4 ++-- openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c index 746ef1354f..516cb32999 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c @@ -61,8 +61,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms, temp = 0; for (aa=0; aanb_antennas_rx; aa++) { - Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<2)]; - Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)]; + Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<1)]; + Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<1)]; temp += (Re*Re/2) + (Im*Im/2); } diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c index 19461d7cee..c912c88934 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c @@ -62,8 +62,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms, temp = 0; for (aa=0; aanb_antennas_rx; aa++) { - Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<2)]; - Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)]; + Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<1)]; + Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<1)]; temp += (Re*Re/2) + (Im*Im/2); } From 781fb9b9ca7232fe8c5a1852e1ee75e2134a0a87 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 13:02:31 +0200 Subject: [PATCH 070/128] Reduce network latency by using netif_rx_ni() instead of netif_rx() in non-interrupt context This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de). --- openair2/NETWORK_DRIVER/LITE/common.c | 2 +- openair2/NETWORK_DRIVER/MESH/common.c | 2 +- openair2/NETWORK_DRIVER/UE_IP/common.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openair2/NETWORK_DRIVER/LITE/common.c b/openair2/NETWORK_DRIVER/LITE/common.c index 0d616d5764..2ae6f5279d 100644 --- a/openair2/NETWORK_DRIVER/LITE/common.c +++ b/openair2/NETWORK_DRIVER/LITE/common.c @@ -333,7 +333,7 @@ void oai_nw_drv_common_class_wireless2ip(uint16_t dlen, printk("\n"); #endif //OAI_DRV_DEBUG_RECEIVE - netif_rx(skb); + netif_rx_ni(skb); #ifdef OAI_DRV_DEBUG_RECEIVE printk("[OAI_IP_DRV][%s] end\n",__FUNCTION__); #endif diff --git a/openair2/NETWORK_DRIVER/MESH/common.c b/openair2/NETWORK_DRIVER/MESH/common.c index d380b8a4d8..1c7b8e4d12 100644 --- a/openair2/NETWORK_DRIVER/MESH/common.c +++ b/openair2/NETWORK_DRIVER/MESH/common.c @@ -309,7 +309,7 @@ void nas_COMMON_receive(uint16_t dlen, printk("\n"); #endif //NAS_DEBUG_RECEIVE - netif_rx(skb); + netif_rx_ni(skb); #ifdef NAS_DEBUG_RECEIVE printk("NAS_COMMON_RECEIVE: end\n"); #endif diff --git a/openair2/NETWORK_DRIVER/UE_IP/common.c b/openair2/NETWORK_DRIVER/UE_IP/common.c index 84f425ef3c..b21ca5f2dc 100644 --- a/openair2/NETWORK_DRIVER/UE_IP/common.c +++ b/openair2/NETWORK_DRIVER/UE_IP/common.c @@ -222,7 +222,7 @@ skb_p->mark = rb_idP; printk("\n"); #endif //OAI_DRV_DEBUG_RECEIVE - netif_rx(skb_p); + netif_rx_ni(skb_p); #ifdef OAI_DRV_DEBUG_RECEIVE printk("[UE_IP_DRV][%s] end\n",__FUNCTION__); #endif From cd79a52c2281aa119e5c8ca1519ad64c074d6bb4 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 17 May 2018 13:15:53 +0200 Subject: [PATCH 071/128] In phy_procedures_UE_RX() really only process the first 5 (not 6) OFDM symbols for S-subframes This commit was developed at Fraunhofer IIS (https://www.iis.fraunhofer.de). --- openair1/SCHED_UE/phy_procedures_lte_ue.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index ec296a058d..02f3e5aaac 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -4185,7 +4185,7 @@ LOG_DEBUG_END if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only - l2 = 5; + l2 = 4; } else if (pmch_flag == 1) { // do first 2 symbols only l2 = 1; } else { // normal subframe, last symbol to be processed is the first of the second slot @@ -4671,7 +4671,7 @@ LOG_DEBUG_END if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only - l2 = 5; + l2 = 4; } else if (pmch_flag == 1) { // do first 2 symbols only l2 = 1; } else { // normal subframe, last symbol to be processed is the first of the second slot From 79827d6bac33864b0bea23cf141d527e81a40a61 Mon Sep 17 00:00:00 2001 From: "Bi-Ruei, Chiu" Date: Thu, 16 Aug 2018 16:13:47 +0800 Subject: [PATCH 072/128] Add missing S1AP 15.2.0 ASN.1 S1AP-Containers module --- .../S1AP/MESSAGES/ASN1/R15/s1ap-15.2.0.asn1 | 198 ++++++++++++++++++ 1 file changed, 198 insertions(+) diff --git a/openair3/S1AP/MESSAGES/ASN1/R15/s1ap-15.2.0.asn1 b/openair3/S1AP/MESSAGES/ASN1/R15/s1ap-15.2.0.asn1 index db1f1b5915..97d0a6de87 100755 --- a/openair3/S1AP/MESSAGES/ASN1/R15/s1ap-15.2.0.asn1 +++ b/openair3/S1AP/MESSAGES/ASN1/R15/s1ap-15.2.0.asn1 @@ -6881,3 +6881,201 @@ id-EDT-Session ProtocolIE-ID ::= 281 id-CNTypeRestrictions ProtocolIE-ID ::= 282 END + +-- ************************************************************** +-- +-- Container definitions +-- +-- ************************************************************** + +S1AP-Containers { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Containers (5) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + Criticality, + Presence, + PrivateIE-ID, + ProtocolExtensionID, + ProtocolIE-ID +FROM S1AP-CommonDataTypes + + maxPrivateIEs, + maxProtocolExtensions, + maxProtocolIEs +FROM S1AP-Constants; + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +S1AP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +S1AP-PROTOCOL-IES-PAIR ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &firstCriticality Criticality, + &FirstValue, + &secondCriticality Criticality, + &SecondValue, + &presence Presence +} +WITH SYNTAX { + ID &id + FIRST CRITICALITY &firstCriticality + FIRST TYPE &FirstValue + SECOND CRITICALITY &secondCriticality + SECOND TYPE &SecondValue + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol Extensions +-- +-- ************************************************************** + +S1AP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolExtensionID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Private IEs +-- +-- ************************************************************** + +S1AP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Container for Protocol IEs +-- +-- ************************************************************** + +ProtocolIE-Container {S1AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-SingleContainer {S1AP-PROTOCOL-IES : IEsSetParam} ::= + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Field {S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id S1AP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality S1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value S1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Protocol IE Pairs +-- +-- ************************************************************** + +ProtocolIE-ContainerPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} + +ProtocolIE-FieldPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id S1AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality S1AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue S1AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality S1AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue S1AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container Lists for Protocol IE Containers +-- +-- ************************************************************** + +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-SingleContainer {{IEsSetParam}} + +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-ContainerPair {{IEsSetParam}} + +-- ************************************************************** +-- +-- Container for Protocol Extensions +-- +-- ************************************************************** + +ProtocolExtensionContainer {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} + +ProtocolExtensionField {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id S1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality S1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue S1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Private IEs +-- +-- ************************************************************** + +PrivateIE-Container {S1AP-PRIVATE-IES : IEsSetParam } ::= + SEQUENCE (SIZE (1.. maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} + +PrivateIE-Field {S1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id S1AP-PRIVATE-IES.&id ({IEsSetParam}), + criticality S1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value S1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} + +END From 6562577e967c59ce5caad691064825c692595161 Mon Sep 17 00:00:00 2001 From: "Bi-Ruei, Chiu" Date: Thu, 16 Aug 2018 16:15:01 +0800 Subject: [PATCH 073/128] Update asn1c commit with two new fixes --- cmake_targets/tools/build_helper | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 5ddce2340b..3363bd2e76 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -683,7 +683,7 @@ install_asn1c_from_source(){ # better to use a given commit than a branch in case the branch # is updated and requires modifications in the source of OAI #git checkout velichkov_s1ap_plus_option_group - git checkout ec830d70bbb014b769810355a2f321a91ccd8a58 + git checkout 73d6b23dcec9ab36605b4af884143824392134c1 autoreconf -iv ./configure make -j`nproc` From be0e409594752f15205db38960e02a509caf2706 Mon Sep 17 00:00:00 2001 From: Eino Virtanen Date: Tue, 24 Jul 2018 15:17:36 +0200 Subject: [PATCH 074/128] USRP addressess and clock sources can be configured in the configuration file with the RU section with comma separated IP addresses in 'sdr_addrs' and with strings "internal"/"external"/"gpsdo" in 'clock_src'. TODO: Currently the driver picks the two first RX and TX channels when nb_tx and nb_rx are both set to 2. If a developers wants to force usage of two devices, 'set_rx_subdev_spec' and 'set_tx_subdev_spec' can be used to indicate to the driver so that antennas from separate devices will be used. To rephrase: until 4 antennas are supported by OAI, testing with two devices, so that antennas from both devices are used, requires manual configuration of which subdevices' antennas are used. Conflicts: targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp --- openair2/ENB_APP/enb_paramdef.h | 6 ++ targets/ARCH/COMMON/common_lib.h | 2 + targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 69 +++++++++++++++----- targets/RT/USER/lte-ru.c | 18 +++++ 4 files changed, 77 insertions(+), 18 deletions(-) diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h index 23b4c2a837..32f7f28a37 100755 --- a/openair2/ENB_APP/enb_paramdef.h +++ b/openair2/ENB_APP/enb_paramdef.h @@ -102,6 +102,8 @@ typedef enum { #define CONFIG_STRING_RU_MAX_RXGAIN "max_rxgain" #define CONFIG_STRING_RU_IF_COMPRESSION "if_compression" #define CONFIG_STRING_RU_NBIOTRRC_LIST "NbIoT_RRC_instances" +#define CONFIG_STRING_RU_SDR_ADDRS "sdr_addrs" +#define CONFIG_STRING_RU_SDR_CLK_SRC "clock_src" #define RU_LOCAL_IF_NAME_IDX 0 #define RU_LOCAL_ADDRESS_IDX 1 @@ -121,6 +123,8 @@ typedef enum { #define RU_ATT_TX_IDX 15 #define RU_ATT_RX_IDX 16 #define RU_NBIOTRRC_LIST_IDX 17 +#define RU_SDR_ADDRS 18 +#define RU_SDR_CLK_SRC 19 @@ -147,6 +151,8 @@ typedef enum { {CONFIG_STRING_RU_ATT_TX, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \ {CONFIG_STRING_RU_ATT_RX, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \ {CONFIG_STRING_RU_NBIOTRRC_LIST, NULL, 0, uptr:NULL, defintarrayval:DEFENBS, TYPE_INTARRAY, 1}, \ +{CONFIG_STRING_RU_SDR_ADDRS, NULL, 0, strptr:NULL, defstrval:"0.0.0.0", TYPE_STRING, 0}, \ +{CONFIG_STRING_RU_SDR_CLK_SRC, NULL, 0, strptr:NULL, defstrval:"internal", TYPE_STRING, 0}, \ } /*---------------------------------------------------------------------------------------------------------------------------------------*/ diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 433e29e97d..0ef3cd233f 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -199,6 +199,8 @@ typedef struct { double tx_bw; //! clock source clock_source_t clock_source; + //! Manual SDR IP address + char *sdr_addrs; //! Auto calibration flag int autocal[4]; //! rf devices work with x bits iqs when oai have its own iq format diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index e2ecaed044..0c02075a1d 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -950,11 +950,15 @@ int trx_usrp_recplay_config_init(paramdef_t *usrp_recplay_params) { #endif extern "C" { - /*! \brief Initialize Openair USRP target. It returns 0 if OK - * \param device the hardware to use - * \param openair0_cfg RF frontend parameters set by application - */ - int device_init(openair0_device* device, openair0_config_t *openair0_cfg) { + /*! \brief Initialize Openair USRP target. It returns 0 if OK + * \param device the hardware to use + * \param openair0_cfg RF frontend parameters set by application + */ + int device_init(openair0_device* device, openair0_config_t *openair0_cfg) { + + LOG_D(PHY, "openair0_cfg[0].sdr_addrs == '%s'\n", openair0_cfg[0].sdr_addrs); + LOG_D(PHY, "openair0_cfg[0].clock_source == '%d'\n", openair0_cfg[0].clock_source); + #if defined(USRP_REC_PLAY) paramdef_t usrp_recplay_params[7]; struct sysinfo systeminfo; @@ -1022,8 +1026,30 @@ extern "C" { // Initialize USRP device device->openair0_cfg = openair0_cfg; - std::string args = "type=b200"; - uhd::device_addrs_t device_adds = uhd::device::find(args); + std::string args = "type=b200"; + + char *addr_args = NULL; + // Check whether sdr_addrs is set in the config or not + if (openair0_cfg[0].sdr_addrs != NULL) { + if (strcmp(openair0_cfg[0].sdr_addrs, "0.0.0.0") != 0) { + // Check whether sdr_addrs contains multiple IP addresses + // and split and add them to addr_args + if (strstr(openair0_cfg[0].sdr_addrs, ",") != NULL) { + char *addr0 = openair0_cfg[0].sdr_addrs; + // Replace , with \0 + strsep(&openair0_cfg[0].sdr_addrs, ","); + char *addr1 = openair0_cfg[0].sdr_addrs; + // Allocate memory for ",addr0=,addr1=\0" and the addresses + size_t addr_args_len = sizeof(char)*(15 + strlen(addr0) + strlen(addr1)); + addr_args = (char *)malloc(addr_args_len); + snprintf(addr_args, addr_args_len, ",addr0=%s,addr1=%s", addr0, addr1); + args += addr_args; + LOG_D(PHY, "addr_args == '%s'\n", addr_args); + } + } + } + + uhd::device_addrs_t device_adds = uhd::device::find(args); int vers=0,subvers=0,subsubvers=0; int bw_gain_adjust=0; @@ -1037,12 +1063,17 @@ extern "C" { LOG_I(PHY,"Checking for USRPs : UHD %s (%d.%d.%d)\n", uhd::get_version_string().c_str(),vers,subvers,subsubvers); - if(device_adds.size() == 0) { - double usrp_master_clock = 184.32e6; - std::string args = "type=x300"; + if(device_adds.size() == 0) { - // workaround for an api problem, master clock has to be set with the constructor not via set_master_clock_rate - args += boost::str(boost::format(",master_clock_rate=%f") % usrp_master_clock); + double usrp_master_clock = 184.32e6; + std::string args = "type=x300"; + + if (addr_args) { + args += addr_args; + } + + // workaround for an api problem, master clock has to be set with the constructor not via set_master_clock_rate + args += boost::str(boost::format(",master_clock_rate=%f") % usrp_master_clock); // args += ",num_send_frames=256,num_recv_frames=256, send_frame_size=4096, recv_frame_size=4096"; uhd::device_addrs_t device_adds = uhd::device::find(args); @@ -1232,12 +1263,14 @@ extern "C" { } } - for(int i=0; iusrp->get_tx_num_channels(); i++) { - ::uhd::gain_range_t gain_range_tx = s->usrp->get_tx_gain_range(i); - if (iusrp->set_tx_rate(openair0_cfg[0].sample_rate,i); - s->usrp->set_tx_freq(openair0_cfg[0].tx_freq[i],i); - s->usrp->set_tx_gain(gain_range_tx.stop()-openair0_cfg[0].tx_gain[i],i); + LOG_D(PHY, "usrp->get_tx_num_channels() == %d\n", s->usrp->get_tx_num_channels()); + LOG_D(PHY, "openair0_cfg[0].tx_num_channels == %d\n", openair0_cfg[0].tx_num_channels); + for(int i=0; iusrp->get_tx_num_channels(); i++) { + ::uhd::gain_range_t gain_range_tx = s->usrp->get_tx_gain_range(i); + if (iusrp->set_tx_rate(openair0_cfg[0].sample_rate,i); + s->usrp->set_tx_freq(openair0_cfg[0].tx_freq[i],i); + s->usrp->set_tx_gain(gain_range_tx.stop()-openair0_cfg[0].tx_gain[i],i); LOG_I(PHY,"USRP TX_GAIN:%3.2lf gain_range:%3.2lf tx_gain:%3.2lf\n", gain_range_tx.stop()-openair0_cfg[0].tx_gain[i], gain_range_tx.stop(), openair0_cfg[0].tx_gain[i]); } diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 891dd9e272..40906f09ce 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -2837,6 +2837,24 @@ void RCconfig_RU(void) { RC.ru[j]->num_eNB = 0; for (i=0;inum_eNB;i++) RC.ru[j]->eNB_list[i] = RC.eNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0]; + if (config_isparamset(RUParamList.paramarray[j], RU_SDR_ADDRS)) { + RC.ru[j]->openair0_cfg.sdr_addrs = strdup(*(RUParamList.paramarray[j][RU_SDR_ADDRS].strptr)); + } + + if (config_isparamset(RUParamList.paramarray[j], RU_SDR_CLK_SRC)) { + if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "internal") == 0) { + RC.ru[j]->openair0_cfg.clock_source = internal; + LOG_D(PHY, "RU clock source set as internal\n"); + } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "external") == 0) { + RC.ru[j]->openair0_cfg.clock_source = external; + LOG_D(PHY, "RU clock source set as external\n"); + } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "gpsdo") == 0) { + RC.ru[j]->openair0_cfg.clock_source = gpsdo; + LOG_D(PHY, "RU clock source set as gpsdo\n"); + } else { + LOG_E(PHY, "Erroneous RU clock source in the provided configuration file: '%s'\n", *(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr)); + } + } if (strcmp(*(RUParamList.paramarray[j][RU_LOCAL_RF_IDX].strptr), "yes") == 0) { if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) { From 55ba99ac623224ec2b9c39f22eb9094f8f56984d Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 13 Aug 2018 10:31:32 +0200 Subject: [PATCH 075/128] T: check consistency of T_messages.txt with VCD functions and variables traces Since VCD has now to go through the T tracer, we enforce the consistency of data found in common/utils/LOG/vcd_signal_dumper.[ch] with data found in common/utils/T/T_messages.txt. We might get completely rid of common/utils/LOG/vcd_signal_dumper.[ch] at some point. For the moment, let's keep it. This commit adds the program common/utils/T/check_vcd.c and necessary modifications to enforce its use at compilation time. If you modify common/utils/LOG/vcd_signal_dumper.[ch] but do not update common/utils/T/T_messages.txt an error will pop up when you compile the software. You have to keep both modules synchronized. --- cmake_targets/CMakeLists.txt | 7 +- common/utils/LOG/vcd_signal_dumper.h | 14 +- common/utils/T/Makefile | 9 +- common/utils/T/T_messages.txt | 27 +-- common/utils/T/check_vcd.c | 249 ++++++++++++++++++++++++ common/utils/itti/intertask_interface.c | 2 +- 6 files changed, 274 insertions(+), 34 deletions(-) create mode 100644 common/utils/T/check_vcd.c diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 17e2072d00..6987c3f06e 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1880,9 +1880,13 @@ endif (${T_TRACER}) #This rule and the following deal with it. add_custom_command ( OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h + COMMAND make clean COMMAND make + COMMAND make check_vcd WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt + ${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c + ${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.h ) #This rule is specifically needed to generate T files @@ -2187,7 +2191,8 @@ if (${T_TRACER}) oai_eth_transpro FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO SECU_OSA SECU_CN SCHED_LIB PHY L2 default_sched remote_sched RAL CN_UTILS - GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU OPENAIR0_LIB PHY_MEX) + GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU OPENAIR0_LIB PHY_MEX + coding) if (TARGET ${i}) add_dependencies(${i} generate_T) endif() diff --git a/common/utils/LOG/vcd_signal_dumper.h b/common/utils/LOG/vcd_signal_dumper.h index 3c722ac49a..749978bb48 100644 --- a/common/utils/LOG/vcd_signal_dumper.h +++ b/common/utils/LOG/vcd_signal_dumper.h @@ -39,7 +39,7 @@ /* WARNING: if you edit the enums below, update also string definitions in vcd_signal_dumper.c */ typedef enum { - VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_ENB = 0, + VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_ENB=0, VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_ENB, VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_ENB, VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_ENB, @@ -91,12 +91,12 @@ typedef enum { VCD_SIGNAL_DUMPER_VARIABLES_TX_SEQ_NUM, VCD_SIGNAL_DUMPER_VARIABLES_CNT, VCD_SIGNAL_DUMPER_VARIABLES_DUMMY_DUMP, - VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG, - VCD_SIGNAL_DUMPER_VARIABLE_ITTI_POLL_MSG, - VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG, - VCD_SIGNAL_DUMPER_VARIABLE_ITTI_ALLOC_MSG, - VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC, - VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE, + VCD_SIGNAL_DUMPER_VARIABLES_ITTI_SEND_MSG, + VCD_SIGNAL_DUMPER_VARIABLES_ITTI_POLL_MSG, + VCD_SIGNAL_DUMPER_VARIABLES_ITTI_RECV_MSG, + VCD_SIGNAL_DUMPER_VARIABLES_ITTI_ALLOC_MSG, + VCD_SIGNAL_DUMPER_VARIABLES_MP_ALLOC, + VCD_SIGNAL_DUMPER_VARIABLES_MP_FREE, VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO, diff --git a/common/utils/T/Makefile b/common/utils/T/Makefile index 5e1785ea91..a722c2cbf7 100644 --- a/common/utils/T/Makefile +++ b/common/utils/T/Makefile @@ -18,6 +18,13 @@ T_messages.txt.h: T_messages.txt T_IDs.h: $(GENIDS) T_messages.txt ./$(GENIDS) T_messages.txt T_IDs.h +check_vcd: + gcc -Wall -I. -I.. -I../itti -Itracer -o _check_vcd check_vcd.c tracer/database.c tracer/utils.c -lm -pthread + ./_check_vcd || (rm -f ./_check_vcd ./T_IDs.h ./T_messages.txt.h && false) + rm -f ./_check_vcd + +.PHONY: check_vcd + clean: - rm -f *.o $(GENIDS) core T_IDs.h T_messages.txt.h + rm -f *.o $(GENIDS) core T_IDs.h T_messages.txt.h _check_vcd cd tracer && make clean diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index 7ecf551cbf..676f329a0e 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -924,30 +924,9 @@ ID = buf_test #VCD variables and functions #be careful! this must be synchronized with the code! -#also keep up to date VCD_NUM_VARIABLES and VCD_NUM_FUNCTIONS in T_defs.h - -#to synchronize: copy/paste from openair2/UTIL/LOG/vcd_signal_dumper.h -#the variables and functions name, replace "SIGNAL_DUMPER_VARIABLES" by -#"VARIABLE" and "SIGNAL_DUMPER_FUNCTIONS" by "FUNCTION" (check that -#everything is fine! for example we have -#VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG that has VARIABLE without S) -#and then process with sed - -#to generate variables: -#sed -e "s/ VCD_VARIABLE_\(.*\)/ID = VCD_VARIABLE_\1\n DESC = VCD variable \1\n GROUP = ALL:VCD:ENB\n FORMAT = ulong,value/" < VCD >> T_messages.txt - -#to generate functions: -#sed -e "s/ VCD_FUNCTION_\(.*\)/ID = VCD_FUNCTION_\1\n DESC = VCD function \1\n GROUP = ALL:VCD:ENB\n FORMAT = int,value/" < VCD.functions >> T_messages.txt - -#you may want to manually edit groups for UE instead of eNB - -#then count functions and variables and update VCD_NUM_FUNCTIONS and -#VCD_NUM_VARIABLES in T_defs.h - -#also verify that VCD_FIRST_FUNCTION and VCD_FIRST_VARIABLE are correct -#in T_defs.h. They have to point to the first function and variable -#as defined below. Note also that the order of the VCD functions -#and variables must be the same as in the code. +#also keep up to date VCD_NUM_VARIABLES, VCD_NUM_FUNCTIONS, +#VCD_FIRST_FUNCTION and VCD_FIRST_VARIABLE in T_defs.h +#to check that everything is correct you can run: make _check_vcd #variables diff --git a/common/utils/T/check_vcd.c b/common/utils/T/check_vcd.c new file mode 100644 index 0000000000..1460d7e20a --- /dev/null +++ b/common/utils/T/check_vcd.c @@ -0,0 +1,249 @@ +/* + * To disable the checks done by this program, see below at the beginning + * of the function 'main'. + */ + +#include +#include +#include + +#include "database.h" + +#define T_TRACER 1 +#include "T.h" + +/* VCD specific defines and includes + * If the codebase changes, it may need to be updated + */ +#define ENB_MODE +#define ENABLE_USE_CPU_EXECUTION_TIME +#include "../LOG/vcd_signal_dumper.c" + +void err(char *fmt, ...) __attribute__ ((format (printf, 1, 2))); +void err(char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + + printf("\x1b[31m"); + printf("error: "); + vprintf(fmt, ap); + printf("\n" +"\x1b[33m\n" +"You probably added a VCD trace (variable or function) but you did not\n" +"update T_messages.txt and/or T_defs.h in common/utils/T/\n" +"\n" +"Be sure to add the new trace to T_messages.txt, at the right place in the\n" +"file. Do not forget to define VCD_NAME with an identical value as found\n" +"in the array eurecomVariablesNames or eurecomFunctionsNames.\n" +"\n" +"Be sure to update VCD_NUM_FUNCTIONS, VCD_NUM_VARIABLES, VCD_FIRST_FUNCTION\n" +"and VCD_FIRST_VARIABLE in T_defs.h\n" +"\n" +"The same procedure has to be followed when you delete a VCD trace.\n" +"Delete it in T_messages.txt as well and update T_defs.h\n" +"\n" +"You can disable those VCD checks at development time.\n" +"To disable the VCD checks see the file common/utils/T/check_vcd.c\n" +"Do not push any modification that disables the VCD checks to the\n" +"main repository.\n"); + + printf("\x1b[m\n"); + + va_end(ap); + + exit(1); +} + +int main(void) +{ + /* to disable the checks done by this program, uncomment the following + * line, ie. remove the leading '//' + */ + //return 0; + + void *database = parse_database("T_messages.txt"); + int number_of_events; + int first_var = -1; + int last_var; + int first_fun = -1; + int last_fun; + char *prefix; + int prefix_len; + char *name; + char *vcd_name; + int i; + FILE *in; + char *l = NULL; + size_t lsize; + + if (database == NULL) err("something wrong with T_messages.txt"); + + /* check the value of VCD_NUM_FUNCTIONS */ + if (VCD_NUM_FUNCTIONS != sizeof(eurecomFunctionsNames) / sizeof(char *)) + err("VCD_NUM_FUNCTIONS (%d) must be equal to %zd", + VCD_NUM_FUNCTIONS, + sizeof(eurecomFunctionsNames) / sizeof(char *)); + + /* check the value of VCD_NUM_VARIABLES */ + if (VCD_NUM_VARIABLES != sizeof(eurecomVariablesNames) / sizeof(char *)) + err("VCD_NUM_VARIABLES (%d) must be equal to %zd", + VCD_NUM_VARIABLES, + sizeof(eurecomVariablesNames) / sizeof(char *)); + + number_of_events = number_of_ids(database); + if (number_of_events == 0) err("no event defined in T_messages.txt"); + + /* T_messages.txt ends with VCD VARIABLES followed by VCD FUNCTIONS + * followed by nothing. + * Let's check. + */ + + /* check VCD VARIABLES traces in T_messages.txt */ + prefix = "VCD_VARIABLE_"; + prefix_len = strlen(prefix); + + for (i = 0; i < number_of_events; i++) { + name = event_name_from_id(database, i); + if (strncmp(name, prefix, prefix_len)) continue; + first_var = i; + break; + } + if (first_var == -1) + err("no VCD_VARIABLE_ found in T_messages.txt"); + for (; i < number_of_events; i++) { + name = event_name_from_id(database, i); + if (strncmp(name, prefix, prefix_len)) break; + } + last_var = i-1; + + /* check VCD FUNCTIONS traces in T_messages.txt */ + if (i == number_of_events) + err("no VCD_FUNCTION_ found in T_messages.txt"); + + prefix = "VCD_FUNCTION_"; + prefix_len = strlen(prefix); + + first_fun = i; + + name = event_name_from_id(database, i); + if (strncmp(name, prefix, prefix_len)) + err("last VCD_VARIABLE_ not followed by a VCD_FUNCTION_ in T_messages.txt"); + + for (; i < number_of_events; i++) { + name = event_name_from_id(database, i); + if (strncmp(name, prefix, prefix_len)) break; + } + + if (i != number_of_events) + err("T_messages.txt does not end with a VCD_FUNCTION_ trace"); + + last_fun = i-1; + + if (first_var != (unsigned)VCD_FIRST_VARIABLE) + err("VCD_FIRST_VARIABLE is not correct in T_defs.h"); + if (first_fun != (unsigned)VCD_FIRST_FUNCTION) + err("VCD_FIRST_FUNCTION is not correct in T_defs.h"); + if (last_var-first_var+1 != VCD_NUM_VARIABLES) + err("VCD_NUM_VARIABLES is not correct in T_defs.h"); + if (last_fun-first_fun+1 != VCD_NUM_FUNCTIONS) + err("VCD_NUM_FUNCTIONS is not correct in T_defs.h"); + + /* check that VCD_NAME is identical to + * eurecomVariablesNames[x]/eurecomFunctionsNames[x] + */ + prefix = "VCD_VARIABLE_"; + prefix_len = strlen(prefix); + + for (i = 0; i < number_of_events; i++) { + name = event_name_from_id(database, i); + if (strncmp(name, prefix, prefix_len)) continue; + vcd_name = event_vcd_name_from_id(database, i); + if (vcd_name == NULL) + err("%s has no VCD_NAME in T_messages.txt", name); + if (strcmp(vcd_name, eurecomVariablesNames[i - first_var])) + err("%s has a wrong VCD_NAME in T_messages.txt", name); + } + + prefix = "VCD_FUNCTION_"; + prefix_len = strlen(prefix); + + for (i = 0; i < number_of_events; i++) { + name = event_name_from_id(database, i); + if (strncmp(name, prefix, prefix_len)) continue; + vcd_name = event_vcd_name_from_id(database, i); + if (vcd_name == NULL) + err("%s has no VCD_NAME in T_messages.txt", name); + if (strcmp(vcd_name, eurecomFunctionsNames[i - first_fun])) + err("%s has a wrong VCD_NAME in T_messages.txt", name); + } + + /* check IDs - these checks are difficult because we parse + * common/utils/LOG/vcd_signal_dumper.h which is expected to + * be formatted as is: + * - define vcd_signal_dump_variables then vcd_signal_dump_functions + * - one VCD_XXXX per line starting with two spaces + * followed by ',' or '=' with no space in between + * - no #ifdef / #if is taken into account + * - we require VCD_SIGNAL_DUMPER_VARIABLES_END and + * VCD_SIGNAL_DUMPER_FUNCTIONS_END at the end of each array, + * each on a line of its own with two spaces before and nothing after. + * + * If these checks fail, consider formatting + * common/utils/LOG/vcd_signal_dumper.h as expected here, if + * it makes sense of course. Otherwise, change the code below. + * + * In common/utils/LOG/vcd_signal_dumper.h a valid name is + * either VCD_SIGNAL_DUMPER_VARIABLES_ABC or + * VCD_SIGNAL_DUMPER_FUNCTIONS_XYZ + * and in T_messages.txt the corresponding name has to be + * VCD_VARIABLE_ABC or VCD_FUNCTION_XYZ + */ + i = first_var; + in = fopen("../LOG/vcd_signal_dumper.h", "r"); + if (in == NULL) err("could not open ../LOG/vcd_signal_dumper.h"); + while (1) { + char *x = " VCD_SIGNAL_DUMPER_VARIABLES_"; + ssize_t r; + free(l); + l = NULL; + lsize = 0; + r = getline(&l, &lsize, in); + if (r == -1) break; + if (!strcmp(l, " VCD_SIGNAL_DUMPER_VARIABLES_END\n")) break; + /* remove ',' or '=' if found */ + { char *s=l; while (*s) { if (*s==','||*s=='=') { *s=0; break; } s++; } } + if (strncmp(l, x, strlen(x))) continue; + if (!(i >= first_var && i <= last_var)) + err("T_messages.txt is not correct with respect to VCD VARIABLES"); + name = event_name_from_id(database, i); + if (strcmp(l+strlen(x), name+strlen("VCD_VARIABLE_"))) + err("%s is not correct in T_messages.txt", name); + i++; + } + if (i != last_var + 1) err("VCD VARIABLES wrong in T_messages.txt"); + while (1) { + char *x = " VCD_SIGNAL_DUMPER_FUNCTIONS_"; + ssize_t r; + free(l); + l = NULL; + lsize = 0; + r = getline(&l, &lsize, in); + if (r == -1) break; + if (!strcmp(l, " VCD_SIGNAL_DUMPER_FUNCTIONS_END\n")) break; + /* remove ',' or '=' if found */ + { char *s=l; while (*s) { if (*s==','||*s=='=') { *s=0; break; } s++; } } + if (strncmp(l, x, strlen(x))) continue; + if (!(i >= first_fun && i <= last_fun)) + err("T_messages.txt is not correct with respect to VCD FUNCTIONS"); + name = event_name_from_id(database, i); + if (strcmp(l+strlen(x), name+strlen("VCD_FUNCTION_"))) + err("%s is not correct in T_messages.txt", name); + i++; + } + fclose(in); + if (i != last_fun + 1) err("VCD FUNCTIONS wrong in T_messages.txt"); + + return 0; +} diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c index 2e38b660d7..d088b59c04 100644 --- a/common/utils/itti/intertask_interface.c +++ b/common/utils/itti/intertask_interface.c @@ -745,7 +745,7 @@ void itti_exit_task(void) #if defined(OAI_EMU) || defined(RTAI) if (task_id > TASK_UNKNOWN) { - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG, + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_ITTI_RECV_MSG, __sync_and_and_fetch (&itti_desc.vcd_receive_msg, ~(1L << task_id))); } #endif From 4054330191507290d6a826783c87e849990168c8 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 13 Aug 2018 10:42:39 +0200 Subject: [PATCH 076/128] minor: remove TABs --- common/utils/T/T.c | 2 +- common/utils/T/T.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/utils/T/T.c b/common/utils/T/T.c index 40af79c1e1..1cda8b7504 100644 --- a/common/utils/T/T.c +++ b/common/utils/T/T.c @@ -164,7 +164,7 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) void T_Config_Init(void) { int T_port; /* by default we wait for the tracer */ - int T_nowait; /* default port to listen to to wait for the tracer */ + int T_nowait; /* default port to listen to to wait for the tracer */ int T_dont_fork; /* default is to fork, see 'T_init' to understand */ paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC; diff --git a/common/utils/T/T.h b/common/utils/T/T.h index 755f5d4e39..f1aa6ecd1d 100644 --- a/common/utils/T/T.h +++ b/common/utils/T/T.h @@ -578,10 +578,10 @@ extern int *T_active; /* optname helpstr paramflags XXXptr defXXXval type numelt */ /*------------------------------------------------------------------------------------------------------------------------------------------*/ #define CMDLINE_TTRACEPARAMS_DESC { \ -{"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:2021, TYPE_INT, 0}, \ -{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0}, \ -{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:0, TYPE_INT, 0}, \ -{"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL, iptr:&T_stdout, defintval:1, TYPE_INT, 0}, \ +{"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:2021, TYPE_INT, 0}, \ +{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0}, \ +{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:0, TYPE_INT, 0}, \ +{"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL, iptr:&T_stdout, defintval:1, TYPE_INT, 0}, \ } From d4a8b5f35e4de2d31413dc3cc4f7ab1cfe9d5d81 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 13 Aug 2018 12:37:17 +0200 Subject: [PATCH 077/128] compilation warning "jobserver unavailable" removal This commit removes the warning: make[4]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. Basically, inside a Makefile we should use $(MAKE) instead of make. --- cmake_targets/CMakeLists.txt | 8 ++++---- common/utils/T/Makefile | 2 +- common/utils/T/tracer/Makefile | 18 +++++++++--------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 6987c3f06e..5efb13594f 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1880,9 +1880,9 @@ endif (${T_TRACER}) #This rule and the following deal with it. add_custom_command ( OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h - COMMAND make clean - COMMAND make - COMMAND make check_vcd + COMMAND $(MAKE) clean + COMMAND $(MAKE) + COMMAND $(MAKE) check_vcd WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt ${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c @@ -2235,7 +2235,7 @@ function(make_driver name dir) endforeach() CONFIGURE_FILE(${OPENAIR_CMAKE}/tools/Kbuild.cmake ${OPENAIR_BIN_DIR}/${name}/Kbuild) add_custom_command(OUTPUT ${name}.ko - COMMAND make -C ${module_build_path} M=${OPENAIR_BIN_DIR}/${name} + COMMAND $(MAKE) -C ${module_build_path} M=${OPENAIR_BIN_DIR}/${name} WORKING_DIRECTORY ${OPENAIR_BIN_DIR}/${name} COMMENT "building ${module}.ko" VERBATIM diff --git a/common/utils/T/Makefile b/common/utils/T/Makefile index a722c2cbf7..1f845ce4f8 100644 --- a/common/utils/T/Makefile +++ b/common/utils/T/Makefile @@ -27,4 +27,4 @@ check_vcd: clean: rm -f *.o $(GENIDS) core T_IDs.h T_messages.txt.h _check_vcd - cd tracer && make clean + cd tracer && $(MAKE) clean diff --git a/common/utils/T/tracer/Makefile b/common/utils/T/tracer/Makefile index 94902b094a..3da4aa13a1 100644 --- a/common/utils/T/tracer/Makefile +++ b/common/utils/T/tracer/Makefile @@ -63,16 +63,16 @@ multi: multi.o utils.o database.o config.o .PHONY: all gui/gui.a view/view.a logger/logger.a filter/filter.a gui/gui.a: - cd gui && make + cd gui && $(MAKE) view/view.a: - cd view && make + cd view && $(MAKE) logger/logger.a: - cd logger && make + cd logger && $(MAKE) filter/filter.a: - cd filter && make + cd filter && $(MAKE) %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< @@ -81,8 +81,8 @@ clean: rm -f *.o core tracer_remote textlog enb ue vcd record replay rm -f extract_config macpdu2wireshark extract_input_subframe rm -f extract_output_subframe to_vcd extract multi - cd gui && make clean - cd view && make clean - cd logger && make clean - cd filter && make clean - cd hacks && make clean + cd gui && $(MAKE) clean + cd view && $(MAKE) clean + cd logger && $(MAKE) clean + cd filter && $(MAKE) clean + cd hacks && $(MAKE) clean From 475d5eb827c8a82b1450117cdcb903d62ba0b1f7 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 17 Aug 2018 12:16:58 +0200 Subject: [PATCH 078/128] T: bug fixes for the T cache - 'busy' has to be handled in a more atomic fashion to avoid crazy runtime race conditions - the basic simulator is too fast sometimes; rewrite the accesses to the T cache to avoid there again crazy behaviors Hopefully that's better... --- common/utils/T/T.c | 6 ++++++ common/utils/T/T.h | 39 ++++++++++++++++++++++++++++------- common/utils/T/T_defs.h | 4 ++++ common/utils/T/local_tracer.c | 2 +- 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/common/utils/T/T.c b/common/utils/T/T.c index 1cda8b7504..fbd3f75a0c 100644 --- a/common/utils/T/T.c +++ b/common/utils/T/T.c @@ -31,6 +31,12 @@ volatile int _T_freelist_head; volatile int *T_freelist_head = &_T_freelist_head; T_cache_t *T_cache; +#if BASIC_SIMULATOR +/* global variables used by T_GET_SLOT, see in T.h */ +volatile uint64_t T_next_id; +volatile uint64_t T_active_id; +#endif + static void get_message(int s) { char t; diff --git a/common/utils/T/T.h b/common/utils/T/T.h index f1aa6ecd1d..18e4a590d9 100644 --- a/common/utils/T/T.h +++ b/common/utils/T/T.h @@ -112,13 +112,37 @@ extern volatile int *T_freelist_head; extern T_cache_t *T_cache; extern int *T_active; /* When running the basic simulator, we may fill the T cache too fast. - * Let's not crash if it's full, just wait. + * Let's serialize write accesses to the T cache. For that, we use a + * 'ticket' mechanism. To acquire a T slot the caller needs to own the + * current active ticket. We also wait for the slot to be free if + * it is already in use. */ #if BASIC_SIMULATOR -# define T_BASIC_SIMULATOR_WAIT \ - while (T_cache[T_LOCAL_slot].busy) usleep(100) +# define T_GET_SLOT \ + do { \ + extern volatile uint64_t T_next_id; \ + extern volatile uint64_t T_active_id; \ + uint64_t id; \ + /* get a ticket */ \ + id = __sync_fetch_and_add(&T_next_id, 1); \ + /* wait for our turn */ \ + while (id != __sync_fetch_and_add(&T_active_id, 0)) /* busy wait */; \ + /* this is our turn, try to acquire the slot until it's free */ \ + do { \ + T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01); \ + if (T_LOCAL_busy & 0x01) usleep(100); \ + } while (T_LOCAL_busy & 0x01); \ + /* check that there are still some tickets */ \ + if (__sync_fetch_and_add(&T_active_id, 0) == 0xffffffffffffffff) { \ + printf("T: reached the end of times, bye...\n"); \ + abort(); \ + } \ + /* free our ticket, which signals the next waiter that it's its turn */ \ + (void)__sync_fetch_and_add(&T_active_id, 1); \ + } while (0) #else -# define T_BASIC_SIMULATOR_WAIT /* */ +# define T_GET_SLOT \ + T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01); #endif /* used at header of Tn, allocates buffer */ @@ -126,11 +150,12 @@ extern int *T_active; char *T_LOCAL_buf; \ int T_LOCAL_size = 0; \ int T_LOCAL_slot; \ + int T_LOCAL_busy; \ T_LOCAL_slot = __sync_fetch_and_add(T_freelist_head, 1) \ & (T_CACHE_SIZE - 1); \ (void)__sync_fetch_and_and(T_freelist_head, T_CACHE_SIZE - 1); \ - T_BASIC_SIMULATOR_WAIT; \ - if (T_cache[T_LOCAL_slot].busy) { \ + T_GET_SLOT; \ + if (T_LOCAL_busy & 0x01) { \ printf("%s:%d:%s: T cache is full - consider increasing its size\n", \ __FILE__, __LINE__, __FUNCTION__); \ abort(); \ @@ -142,7 +167,7 @@ extern int *T_active; #define T_COMMIT() \ T_cache[T_LOCAL_slot].length = T_LOCAL_size; \ __sync_synchronize(); \ - T_cache[T_LOCAL_slot].busy = 1; \ + (void)__sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x02); #define T_CHECK_SIZE(len, argnum) \ if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \ diff --git a/common/utils/T/T_defs.h b/common/utils/T/T_defs.h index 6fe11bcfc3..83a380662d 100644 --- a/common/utils/T/T_defs.h +++ b/common/utils/T/T_defs.h @@ -31,6 +31,10 @@ #endif typedef struct { + /* 'busy' is a bit field + * bit 0: 1 means that slot is acquired by writer + * bit 1: 1 means that slot is ready for consumption + */ volatile int busy; char buffer[T_BUFFER_MAX]; int length; diff --git a/common/utils/T/local_tracer.c b/common/utils/T/local_tracer.c index 19d0a4d717..f8e92881a9 100644 --- a/common/utils/T/local_tracer.c +++ b/common/utils/T/local_tracer.c @@ -337,7 +337,7 @@ static void forward(void *_forwarder, char *buf, int size) static void wait_message(void) { - while (T_local_cache[T_busylist_head].busy == 0) usleep(1000); + while ((T_local_cache[T_busylist_head].busy & 0x02) == 0) usleep(1000); } void T_local_tracer_main(int remote_port, int wait_for_tracer, From 88724afdf363b97441e35c0bb74bcf55a6c49cb7 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 17 Aug 2018 15:36:45 +0200 Subject: [PATCH 079/128] T: minor: don't clean tracers on 'make clean' --- common/utils/T/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/utils/T/Makefile b/common/utils/T/Makefile index 1f845ce4f8..87a6e34c5d 100644 --- a/common/utils/T/Makefile +++ b/common/utils/T/Makefile @@ -27,4 +27,6 @@ check_vcd: clean: rm -f *.o $(GENIDS) core T_IDs.h T_messages.txt.h _check_vcd + +cleanall: clean cd tracer && $(MAKE) clean From e74010220dfcbd4ca8b746ee4a6174437cf43df5 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 17 Aug 2018 15:45:38 +0200 Subject: [PATCH 080/128] bugfix: fix duplicated code As reported by Robert Schmidt. --- targets/RT/USER/lte-softmodem.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 699bc7f56b..e84f99e67f 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1131,13 +1131,6 @@ int main( int argc, char **argv ) rt_sleep_ns(10*100000000ULL); - if (nfapi_mode) { - - printf("NFAPI*** - mutex and cond created - will block shortly for completion of PNF connection\n"); - pthread_cond_init(&sync_cond,NULL); - pthread_mutex_init(&sync_mutex, NULL); - } - if (nfapi_mode) { printf("NFAPI*** - mutex and cond created - will block shortly for completion of PNF connection\n"); From 69338c694b04cb2ad1a3c69d5b5a97fbc3a762c2 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 17 Aug 2018 15:55:04 +0200 Subject: [PATCH 081/128] bugfix: fix array index As reported by Konstantinos Alexandris and Robert Schmidt. --- openair2/ENB_APP/enb_config.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 2b6931effa..737397d8d4 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -2355,12 +2355,12 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) { #endif } if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) { - S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv4 = 1; + S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4 = 1; } else if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) { - S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv6 = 1; + S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6 = 1; } else if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "no") == 0) { - S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv4 = 1; - S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv6 = 1; + S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4 = 1; + S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6 = 1; } } From dc9c27a33093fc99f97bc6afb53623a7f1c3d570 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 14 Aug 2018 12:38:56 +0200 Subject: [PATCH 082/128] CI: improvements -- no more -x option at compilation time -- iperf server report crash better handled -- python executor retrieve iperf server files in case of failure to analyze -- comparison w/ requested bandwidth Signed-off-by: Raphael Defosseux --- ci-scripts/main.py | 185 ++++++++++++++++-- ci-scripts/xml_files/enb_usrp210_band7.xml | 2 +- .../xml_files/test_case_list_template.xml | 4 +- 3 files changed, 175 insertions(+), 16 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 372d4aef11..c3155c7699 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -154,6 +154,34 @@ class SSHConnection(): else: logging.debug('\u001B[1;37;41m Unexpected Others \u001B[0m') + def copy(self, ipaddress, username, password, source, destination): + logging.debug('scp '+ username + '@' + ipaddress + ':' + source + ' ' + destination) + scp_spawn = pexpect.spawn('scp '+ username + '@' + ipaddress + ':' + source + ' ' + destination, timeout = 5) + scp_response = scp_spawn.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:', pexpect.EOF, pexpect.TIMEOUT]) + if scp_response == 0: + scp_spawn.sendline('yes') + scp_spawn.expect('password:') + scp_spawn.sendline(password) + scp_response = scp_spawn.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) + if scp_response == 0: + pass + else: + logging.debug('1 - scp_response = ' + str(scp_response)) + sys.exit('SCP failed') + elif scp_response == 1: + scp_spawn.sendline(password) + scp_response = scp_spawn.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) + if scp_response == 0 or scp_response == 3: + pass + else: + logging.debug('2 - scp_response = ' + str(scp_response)) + sys.exit('SCP failed') + elif scp_response == 2: + pass + else: + logging.debug('3 - scp_response = ' + str(scp_response)) + sys.exit('SCP failed') + def BuildeNB(self): if self.eNBIPAddress == '' or self.eNBRepository == '' or self.eNBBranch == '' or self.eNBUserName == '' or self.eNBPassword == '' or self.eNBSourceCodePath == '': Usage() @@ -274,7 +302,7 @@ class SSHConnection(): loopCounter = loopCounter - 1 if (loopCounter == 0): doLoop = False - logging.debug('\u001B[1;37;43m eNB logging system did not show got sync! See with attach later \u001B[0m') + logging.debug('\u001B[1;30;43m eNB logging system did not show got sync! See with attach later \u001B[0m') self.CreateHtmlTestRow(config_file, 'eNB not showing got sync!', 0) # Not getting got sync is bypassed for the moment #sys.exit(1) @@ -672,18 +700,11 @@ class SSHConnection(): result = re.search('Server Report:', str(self.ssh.before)) if result is None: result = re.search('read failed: Connection refused', str(self.ssh.before)) - lock.acquire() - statusQueue.put(-1) - statusQueue.put(device_id) - statusQueue.put(UE_IPAddress) if result is not None: logging.debug('\u001B[1;37;41m Could not connect to iperf server! \u001B[0m') - statusQueue.put('Could not connect to iperf server!') else: logging.debug('\u001B[1;37;41m Server Report and Connection refused Not Found! \u001B[0m') - statusQueue.put('Server Report and Connection refused Not Found!') - lock.release() - return + return -1 result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(\d+\/..\d+) (\((?P[0-9\.]+)%\))', str(self.ssh.before)) if result is not None: bitrate = result.group('bitrate') @@ -714,6 +735,121 @@ class SSHConnection(): statusQueue.put(UE_IPAddress) statusQueue.put(msg) lock.release() + return 0 + + def Iperf_analyzeV2Server(self, lock, UE_IPAddress, device_id, statusQueue, iperf_real_options): + if (not os.path.isfile('iperf_server_' + SSH.testCase_id + '_' + device_id + '.log')): + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) + statusQueue.put('Could not analyze from server log') + lock.release() + return + # Computing the requested bandwidth in float + result = re.search('-b (?P[0-9\.]+)[KMG]', str(iperf_real_options)) + if result is None: + logging.debug('Iperf bandwidth Not Found!') + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) + statusQueue.put('Could not compute Iperf bandwidth!') + lock.release() + return + else: + req_bandwidth = result.group('iperf_bandwidth') + req_bw = float(req_bandwidth) + result = re.search('-b [0-9\.]+K', str(iperf_real_options)) + if result is not None: + req_bandwidth = '%.1f Kbits/sec' % req_bw + req_bw = req_bw * 1000 + result = re.search('-b [0-9\.]+M', str(iperf_real_options)) + if result is not None: + req_bandwidth = '%.1f Mbits/sec' % req_bw + req_bw = req_bw * 1000000 + result = re.search('-b [0-9\.]+G', str(iperf_real_options)) + if result is not None: + req_bandwidth = '%.1f Gbits/sec' % req_bw + req_bw = req_bw * 1000000000 + + server_file = open('iperf_server_' + SSH.testCase_id + '_' + device_id + '.log', 'r') + br_sum = 0.0 + ji_sum = 0.0 + pl_sum = 0 + ps_sum = 0 + row_idx = 0 + for line in server_file.readlines(): + result = re.search('(?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(?P[0-9]+)/ +(?P[0-9]+)', str(line)) + if result is not None: + bitrate = result.group('bitrate') + jitter = result.group('jitter') + packetlost = result.group('lostPack') + packetsent = result.group('sentPack') + br = bitrate.split(' ') + ji = jitter.split(' ') + row_idx = row_idx + 1 + curr_br = float(br[0]) + pl_sum = pl_sum + int(packetlost) + ps_sum = ps_sum + int(packetsent) + if (br[1] == 'Kbits/sec'): + curr_br = curr_br * 1000 + if (br[1] == 'Mbits/sec'): + curr_br = curr_br * 1000 * 1000 + br_sum = curr_br + br_sum + ji_sum = float(ji[0]) + ji_sum + if (row_idx > 0): + br_sum = br_sum / row_idx + ji_sum = ji_sum / row_idx + br_loss = 100 * br_sum / req_bw + if (br_sum > 1000): + br_sum = br_sum / 1000 + if (br_sum > 1000): + br_sum = br_sum / 1000 + bitrate = '%.2f Mbits/sec' % br_sum + else: + bitrate = '%.2f Kbits/sec' % br_sum + else: + bitrate = '%.2f bits/sec' % br_sum + bitperf = '%.2f ' % br_loss + bitperf += '%' + jitter = '%.2f ms' % (ji_sum) + if (ps_sum > 0): + pl = float(100 * pl_sum / ps_sum) + packetloss = '%2.1f ' % (pl) + packetloss += '%' + else: + packetloss = 'unknown' + lock.acquire() + if (br_loss < 90): + statusQueue.put(1) + else: + statusQueue.put(0) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) + req_msg = 'Req Bitrate : ' + req_bandwidth + bir_msg = 'Bitrate : ' + bitrate + brl_msg = 'Bitrate Perf: ' + bitperf + jit_msg = 'Jitter : ' + jitter + pal_msg = 'Packet Loss : ' + packetloss + statusQueue.put(req_msg + '\n' + bir_msg + '\n' + brl_msg + '\n' + jit_msg + '\n' + pal_msg + '\n') + logging.debug('\u001B[1;37;45m iperf result (' + UE_IPAddress + ') \u001B[0m') + logging.debug('\u001B[1;35m ' + req_msg + '\u001B[0m') + logging.debug('\u001B[1;35m ' + bir_msg + '\u001B[0m') + logging.debug('\u001B[1;35m ' + brl_msg + '\u001B[0m') + logging.debug('\u001B[1;35m ' + jit_msg + '\u001B[0m') + logging.debug('\u001B[1;35m ' + pal_msg + '\u001B[0m') + lock.release() + else: + lock.acquire() + statusQueue.put(-1) + statusQueue.put(device_id) + statusQueue.put(UE_IPAddress) + statusQueue.put('Could not analyze from server log') + lock.release() + + server_file.close() + def Iperf_analyzeV3Output(self, lock, UE_IPAddress, device_id, statusQueue): result = re.search('(?P[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P[0-9\.]+)%\)) +(?:|receiver)\\\\r\\\\n(?:|\[ *\d+\] Sent \d+ datagrams)\\\\r\\\\niperf Done\.', str(self.ssh.before)) @@ -780,12 +916,18 @@ class SSHConnection(): self.command('rm -f iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) self.command('stdbuf -o0 adb -s ' + device_id + ' shell "/data/local/tmp/iperf -c ' + EPC_Iperf_UE_IPAddress + ' ' + modified_options + ' -p ' + str(port) + '" 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue) + clientStatus = self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue) # Launch iperf server on EPC side self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('killall --signal SIGKILL iperf', self.EPCUserName, 5) self.close() + if (clientStatus == -1): + time.sleep(1) + if (os.path.isfile('iperf_server_' + SSH.testCase_id + '_' + device_id + '.log')): + os.remove('iperf_server_' + SSH.testCase_id + '_' + device_id + '.log') + self.copy(self.EPCIPAddress, self.EPCUserName, self.EPCPassword, self.EPCSourceCodePath + '/scripts/iperf_server_' + SSH.testCase_id + '_' + device_id + '.log', '.') + self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, modified_options) def Iperf_common(self, lock, UE_IPAddress, device_id, idx, ue_num, statusQueue): try: @@ -843,11 +985,12 @@ class SSHConnection(): if (useIperf3): self.command('stdbuf -o0 iperf3 -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) + clientStatus = 0 self.Iperf_analyzeV3Output(lock, UE_IPAddress, device_id, statusQueue) else: self.command('stdbuf -o0 iperf -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue) + clientStatus = self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue) self.close() self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) @@ -857,6 +1000,12 @@ class SSHConnection(): pid_iperf = result.group('pid') self.command('stdbuf -o0 adb -s ' + device_id + ' shell kill -KILL ' + pid_iperf, '\$', 5) self.close() + if (clientStatus == -1): + time.sleep(1) + if (os.path.isfile('iperf_server_' + SSH.testCase_id + '_' + device_id + '.log')): + os.remove('iperf_server_' + SSH.testCase_id + '_' + device_id + '.log') + self.copy(self.ADBIPAddress, self.ADBUserName, self.ADBPassword, self.EPCSourceCodePath + '/scripts/iperf_server_' + SSH.testCase_id + '_' + device_id + '.log', '.') + self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, modified_options) except: os.kill(os.getppid(),signal.SIGUSR1) @@ -887,17 +1036,22 @@ class SSHConnection(): sys.exit(1) else: iperf_status = True + iperf_noperf = False html_queue = SimpleQueue() while (not status_queue.empty()): count = status_queue.get() if (count < 0): iperf_status = False + if (count > 0): + iperf_noperf = True device_id = status_queue.get() ip_addr = status_queue.get() message = status_queue.get() html_cell = "
UE (" + device_id + ")\nIP Address  : " + ip_addr + "\n" + message + "
" html_queue.put(html_cell) - if (iperf_status): + if (iperf_noperf and iperf_status): + self.CreateHtmlTestRowQueue(self.iperf_args, 'PERF NOT MET', len(self.UEDevices), html_queue) + elif (iperf_status): self.CreateHtmlTestRowQueue(self.iperf_args, 'OK', len(self.UEDevices), html_queue) else: self.CreateHtmlTestRowQueue(self.iperf_args, 'KO', len(self.UEDevices), html_queue) @@ -1263,6 +1417,7 @@ class SSHConnection(): def CreateHtmlTestRowQueue(self, options, status, ue_status, ue_queue): if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): + addOrangeBK = False self.htmlFile.write(' \n') self.htmlFile.write(' ' + SSH.testCase_id + '\n') self.htmlFile.write(' ' + SSH.desc + '\n') @@ -1272,12 +1427,16 @@ class SSHConnection(): elif (str(status) == 'KO'): self.htmlFile.write(' ' + str(status) + '\n') else: + addOrangeBK = True self.htmlFile.write(' ' + str(status) + '\n') i = 0 while (i < self.htmlUEConnected): if (i < ue_status): if (not ue_queue.empty()): - self.htmlFile.write(' ' + str(ue_queue.get()) + '\n') + if (addOrangeBK): + self.htmlFile.write(' ' + str(ue_queue.get()) + '\n') + else: + self.htmlFile.write(' ' + str(ue_queue.get()) + '\n') else: self.htmlFile.write(' -\n') else: diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 7a56cf384c..0bb8d53fcb 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -27,7 +27,7 @@ Build_eNB Build eNB (USRP) - -w USRP -x -c --eNB + -w USRP -c --eNB diff --git a/ci-scripts/xml_files/test_case_list_template.xml b/ci-scripts/xml_files/test_case_list_template.xml index bc06dc75ce..25519dcd03 100644 --- a/ci-scripts/xml_files/test_case_list_template.xml +++ b/ci-scripts/xml_files/test_case_list_template.xml @@ -29,13 +29,13 @@ Build_eNB Build eNB (USRP) - -w USRP -x -c --eNB + -w USRP -c --eNB Build_eNB Build eNB (USRP) - -w BLADERF -x -c --eNB + -w BLADERF -c --eNB From 86f4d8c18f626bf62acf8b49fc72b2d03307990e Mon Sep 17 00:00:00 2001 From: Rajeev Gangula Date: Mon, 20 Aug 2018 14:17:19 +0200 Subject: [PATCH 083/128] Remiving CQI scheduling on special SFs. --- openair2/LAYER2/MAC/eNB_scheduler_fairRR.c | 32 ++++++++++++++++------ openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 20 ++++++++++++-- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c index 1acf657220..eda84adbab 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c @@ -1696,9 +1696,9 @@ schedule_ue_spec_fairRR(module_id_t module_idP, // this is the normalized RX power eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; - /* TODO: fix how we deal with power, unit is not dBm, it's special from nfapi */ - normalized_rx_power = ue_sched_ctl->pucch1_snr[CC_id]; - target_rx_power = 208; + /* Unit is not dBm, it's special from nfapi */ + normalized_rx_power = (5*ue_sched_ctl->pucch1_snr[CC_id]-640)/10+30;//(+eNB->measurements.n0_power_dB[0]) + target_rx_power= eNB->puCch10xSnr/10 + 30;//(+eNB->measurements.n0_power_dB[0]) // this assumes accumulated tpc // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out @@ -2690,9 +2690,25 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP, if (status < RRC_CONNECTED) cqi_req = 0; else if (UE_sched_ctrl->cqi_req_timer>30) { - cqi_req = 1; - UE_sched_ctrl->cqi_req_timer=0; - UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP; + cqi_req = 1; + // To be safe , do not ask CQI in special SFs:36.213/7.2.3 CQI definition + if (cc->tdd_Config) { + switch (cc->tdd_Config->subframeAssignment) { + case 1: + if( subframeP == 1 || subframeP == 6 ) cqi_req=0; + break; + case 3: + if( subframeP == 1 ) cqi_req=0; + break; + default: + LOG_E(MAC," TDD config not supported\n"); + break; + } + } + if(cqi_req == 1){ + UE_sched_ctrl->cqi_req_timer=0; + UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP; + } } else cqi_req = 0; @@ -2701,8 +2717,8 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP, //compute the expected ULSCH RX power (for the stats) // this is the normalized RX power and this should be constant (regardless of mcs - normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id]; - target_rx_power = 178; + normalized_rx_power = (5*UE_sched_ctrl->pusch_snr[CC_id]-640)/10+30; //(+eNB->measurements.n0_power_dB[0]) + target_rx_power= eNB->puSch10xSnr/10 + 30; //(+eNB->measurements.n0_power_dB[0]) // this assumes accumulated tpc // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 04415a8386..caed575b48 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -1337,10 +1337,24 @@ schedule_ulsch_rnti(module_id_t module_idP, if (status >= RRC_CONNECTED && UE_sched_ctrl->cqi_req_timer > 30) { if (UE_sched_ctrl->cqi_received == 0) { if (nfapi_mode) { - cqi_req = 0; + cqi_req = 0; } else { - cqi_req = 1; - UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP; + cqi_req = 1; + // To be safe , do not ask CQI in special Subframes:36.213/7.2.3 CQI definition + if (cc[CC_id].tdd_Config) { + switch (cc[CC_id].tdd_Config->subframeAssignment) { + case 1: + if( subframeP == 1 || subframeP == 6 ) cqi_req=0; + break; + case 3: + if( subframeP == 1 ) cqi_req=0; + break; + default: + LOG_E(MAC," TDD config not supported\n"); + break; + } + } + if(cqi_req == 1) UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP; } } else if (UE_sched_ctrl->cqi_received == 1) { From ee143ac044860ec1376b4ddc762dc8adef2c68b3 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 21 Aug 2018 15:04:40 +0200 Subject: [PATCH 084/128] CI: fixing and adding more testcases Signed-off-by: Raphael Defosseux --- ci-scripts/xml_files/enb_usrp210_band7.xml | 28 ++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 0bb8d53fcb..2871b00dee 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -21,7 +21,7 @@ --> - 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040604 040605 040641 040401 040201 030201 030111 040301 040511 040611 040612 040613 040614 040615 040651 040401 040201 030201 030121 040301 040521 040621 040622 040623 040661 040401 040201 030201 + 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040604 040605 040641 040642 040401 040201 030201 030111 040301 040511 040611 040612 040613 040614 040615 040651 040652 040401 040201 030201 030121 040301 040521 040621 040622 040623 040624 040625 040661 040662 040401 040201 030201 @@ -138,6 +138,14 @@ 50 + + Iperf + iperf (5MHz - UL/9Mbps/UDP)(60 sec)(single-ue profile) + -u -b 9M -t 60 -i 1 -R + 50 + single-ue + + Iperf iperf (10MHz - DL/10Mbps/UDP)(60 sec) @@ -182,6 +190,14 @@ 50 + + Iperf + iperf (10MHz - UL/20Mbps/UDP)(60 sec)(single-ue profile) + -u -b 20M -t 60 -i 1 -R + 50 + single-ue + + Iperf iperf (20MHz - DL/20Mbps/UDP)(60 sec) @@ -211,7 +227,7 @@ single-ue - + Iperf iperf (20MHz - DL/70Mbps/UDP)(60 sec)(unbalanced profile) -u -b 70M -t 60 -i 1 @@ -226,6 +242,14 @@ 50 + + Iperf + iperf (20MHz - UL/20Mbps/UDP)(60 sec)(single-ue profile) + -u -b 20M -t 60 -i 1 -R + 50 + single-ue + + Initialize_HSS Initialize HSS From f1e041ad98ecfef28f4571557ca47ce114a1e432 Mon Sep 17 00:00:00 2001 From: WANG Tsu-Han Date: Tue, 21 Aug 2018 15:18:05 +0200 Subject: [PATCH 085/128] bug fix for 25RBs with new modulation scheme and add config for 5 & 10 MHz with phy-test --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 7 ++++--- openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 6f1913ff91..0bd28b6827 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -2423,7 +2423,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, * with above code that needs to be analyzed and fixed. In the * meantime, let's use the generic function. */ - allocate_REs = allocate_REs_in_RB; + //allocate_REs = allocate_REs_in_RB; break; } @@ -2432,7 +2432,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, * previous version. Some more work/validation is needed before * we switch to the new version. */ - allocate_REs = allocate_REs_in_RB; + //allocate_REs = allocate_REs_in_RB; switch (mod_order1) { case 2: @@ -2485,7 +2485,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, skip_half = check_skiphalf(rb,subframe_offset,frame_parms,l,nsymb); skip_dc = check_skip_dc(rb,frame_parms); - + if(skip_half>0) + allocate_REs = allocate_REs_in_RB; if (dlsch0) { diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index 49cc68b06a..71449e3cd4 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -202,7 +202,8 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s int32_t normalized_rx_power; int32_t target_rx_power= 178; int CC_id = 0; - int nb_rb = 96; + int nb_rb; + int N_RB_UL; eNB_MAC_INST *mac = RC.mac[module_idP]; COMMON_channels_t *cc = &mac->common_channels[0]; UE_list_t *UE_list=&mac->UE_list; @@ -222,6 +223,18 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s //nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req->ul_config_pdu_list[0];; nfapi_ul_config_request_body_t *ul_req = &mac->UL_req[CC_id].ul_config_request_body; + N_RB_UL = to_prb(cc->mib->message.dl_Bandwidth); + switch(N_RB_UL){ + case 100: + nb_rb = 96; + break; + case 50: + nb_rb = 48; + break; + case 25: + nb_rb = 24; + break; + } mac->UL_req[CC_id].sfn_sf = (sched_frame<<4) + sched_subframe; hi_dci0_req->sfn_sf = (frameP << 4) + subframeP; From 7fed2bec9d59d2f3d0ba62a07c084941216e2200 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 21 Aug 2018 08:03:14 -0700 Subject: [PATCH 086/128] disabling new modulation for 25PRB --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 0bd28b6827..d18f0c2cd3 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -2432,7 +2432,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, * previous version. Some more work/validation is needed before * we switch to the new version. */ - //allocate_REs = allocate_REs_in_RB; + if (frame_parms->N_RB_DL==25) + allocate_REs = allocate_REs_in_RB; switch (mod_order1) { case 2: @@ -2485,9 +2486,6 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, skip_half = check_skiphalf(rb,subframe_offset,frame_parms,l,nsymb); skip_dc = check_skip_dc(rb,frame_parms); - if(skip_half>0) - allocate_REs = allocate_REs_in_RB; - if (dlsch0) { if (dlsch0_harq->Nlayers>1) { From 4bf6f26d494dc620bfdd9dd294fb99f27071e385 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 22 Aug 2018 10:19:14 +0200 Subject: [PATCH 087/128] CI: inverted last iperf UL @20MHz fix main.py help message Signed-off-by: Raphael Defosseux --- ci-scripts/main.py | 4 ++-- ci-scripts/xml_files/enb_usrp210_band7.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index c3155c7699..83516d3358 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -1455,8 +1455,8 @@ def Usage(): print(' --help Show this help.') print(' --mode=[Mode]') print(' TesteNB') - print(' TerminateeNB, TerminateEPC') - print(' LogCollectBuild, LogCollecteNB, LogCollectEPC, LogCollectADB') + print(' TerminateeNB, TerminateUE, TerminateHSS, TerminateMME, TerminateSPGW') + print(' LogCollectBuild, LogCollecteNB, LogCollectHSS, LogCollectMME, LogCollectSPGW, LogCollectPing, LogCollectIperf') print(' --eNBIPAddress=[eNB\'s IP Address]') print(' --eNBRepository=[eNB\'s Repository URL]') print(' --eNBBranch=[eNB\'s Branch Name]') diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 2871b00dee..444f91f094 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -21,7 +21,7 @@ --> - 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040604 040605 040641 040642 040401 040201 030201 030111 040301 040511 040611 040612 040613 040614 040615 040651 040652 040401 040201 030201 030121 040301 040521 040621 040622 040623 040624 040625 040661 040662 040401 040201 030201 + 010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040604 040605 040641 040642 040401 040201 030201 030111 040301 040511 040611 040612 040613 040614 040615 040651 040652 040401 040201 030201 030121 040301 040521 040621 040622 040623 040624 040625 040662 040661 040401 040201 030201 From 40942e34a0d7d65725f853d4745f7c71b09d410e Mon Sep 17 00:00:00 2001 From: Konstantinos Alexandris Date: Wed, 22 Aug 2018 15:32:22 +0200 Subject: [PATCH 088/128] Initial commit on X2AP (add target eNBs as input) --- cmake_targets/CMakeLists.txt | 14 ++- openair2/COMMON/x2ap_messages_def.h | 21 ++++ openair2/COMMON/x2ap_messages_types.h | 152 ++++++++++++++++++++++++++ openair2/ENB_APP/enb_app.c | 35 ++++++ openair2/ENB_APP/enb_config.c | 145 ++++++++++++++++++++++++ openair2/ENB_APP/enb_config.h | 1 + openair2/ENB_APP/enb_paramdef.h | 49 ++++++++- openair2/X2AP/x2ap_common.c | 6 +- 8 files changed, 416 insertions(+), 7 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 17e2072d00..4c33eee8e4 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -474,6 +474,16 @@ add_library(X2AP_LIB include_directories ("${X2AP_C_DIR}") include_directories ("${X2AP_DIR}") +#add_library(X2AP_ENB + # ${X2AP_DIR}/x2ap_eNB.c + # ${X2AP_DIR}/x2ap_eNB_decoder.c + # ${X2AP_DIR}/x2ap_eNB_encoder.c + # ${X2AP_DIR}/x2ap_eNB_handler.c + # ${X2AP_DIR}/x2ap_eNB_itti_messaging.c + # ${X2AP_DIR}/x2ap_eNB_management_procedures.c + # ${X2AP_DIR}/x2ap_eNB_generate_messages.c + # ) + # Hardware dependant options ################################### add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4") @@ -1933,7 +1943,7 @@ add_executable(lte-softmodem target_link_libraries (lte-softmodem -Wl,--start-group - RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 + RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl) @@ -2009,7 +2019,7 @@ add_executable(lte-uesoftmodem target_link_libraries (lte-uesoftmodem -Wl,--start-group - RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU + RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl) diff --git a/openair2/COMMON/x2ap_messages_def.h b/openair2/COMMON/x2ap_messages_def.h index 4690bba42e..36842c13d0 100644 --- a/openair2/COMMON/x2ap_messages_def.h +++ b/openair2/COMMON/x2ap_messages_def.h @@ -19,3 +19,24 @@ * contact@openairinterface.org */ +/* eNB application layer -> X2AP messages */ +/* ITTI LOG messages */ +/* ENCODER */ +MESSAGE_DEF(X2AP_RESET_REQUST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_reset_request_log) +MESSAGE_DEF(X2AP_RESOURCE_STATUS_RESPONSE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_resource_status_response_log) +MESSAGE_DEF(X2AP_RESOURCE_STATUS_FAILURE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_resource_status_failure_log) + +/* Messages for X2AP logging */ +MESSAGE_DEF(X2AP_SETUP_REQUEST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_setup_request_log) + + +/* eNB application layer -> X2AP messages */ +MESSAGE_DEF(X2AP_REGISTER_ENB_REQ , MESSAGE_PRIORITY_MED, x2ap_register_enb_req_t , x2ap_register_enb_req) + +/* X2AP -> eNB application layer messages */ +MESSAGE_DEF(X2AP_REGISTER_ENB_CNF , MESSAGE_PRIORITY_MED, x2ap_register_enb_cnf_t , x2ap_register_enb_cnf) +MESSAGE_DEF(X2AP_DEREGISTERED_ENB_IND , MESSAGE_PRIORITY_MED, x2ap_deregistered_enb_ind_t , x2ap_deregistered_enb_ind) + +/* handover messages X2AP <-> RRC */ +MESSAGE_DEF(X2AP_HANDOVER_REQ , MESSAGE_PRIORITY_MED, x2ap_handover_req_t , x2ap_handover_req) +MESSAGE_DEF(X2AP_HANDOVER_REQ_ACK , MESSAGE_PRIORITY_MED, x2ap_handover_req_ack_t , x2ap_handover_req_ack) diff --git a/openair2/COMMON/x2ap_messages_types.h b/openair2/COMMON/x2ap_messages_types.h index 4690bba42e..d3c324a35c 100644 --- a/openair2/COMMON/x2ap_messages_types.h +++ b/openair2/COMMON/x2ap_messages_types.h @@ -19,3 +19,155 @@ * contact@openairinterface.org */ +#ifndef X2AP_MESSAGES_TYPES_H_ +#define X2AP_MESSAGES_TYPES_H_ + +#include "PhysCellId.h" + +//-------------------------------------------------------------------------------------------// +// Defines to access message fields. + +#define X2AP_REGISTER_ENB_REQ(mSGpTR) (mSGpTR)->ittiMsg.x2ap_register_enb_req +#define X2AP_HANDOVER_REQ(mSGpTR) (mSGpTR)->ittiMsg.x2ap_handover_req +#define X2AP_HANDOVER_REQ_ACK(mSGpTR) (mSGpTR)->ittiMsg.x2ap_handover_req_ack +#define X2AP_REGISTER_ENB_CNF(mSGpTR) (mSGpTR)->ittiMsg.x2ap_register_enb_cnf +#define X2AP_DEREGISTERED_ENB_IND(mSGpTR) (mSGpTR)->ittiMsg.x2ap_deregistered_enb_ind + + +#define X2AP_MAX_NB_ENB_IP_ADDRESS 2 + +// eNB application layer -> X2AP messages +typedef struct x2ap_register_enb_req_s { + /* Unique eNB_id to identify the eNB within EPC. + * For macro eNB ids this field should be 20 bits long. + * For home eNB ids this field should be 28 bits long. + */ + uint32_t eNB_id; + /* The type of the cell */ + enum cell_type_e cell_type; + + /* Optional name for the cell + * NOTE: the name can be NULL (i.e no name) and will be cropped to 150 + * characters. + */ + char *eNB_name; + + /* Tracking area code */ + uint16_t tac; + + /* Mobile Country Code + * Mobile Network Code + */ + uint16_t mcc; + uint16_t mnc; + uint8_t mnc_digit_length; + + /* + * EARFCN + */ + uint16_t fdd_uL_EARFCN; + uint16_t fdd_dL_EARFCN; + uint16_t tdd_EARFCN; + + + uint16_t fdd_uL_Transmission_Bandwidth; + uint16_t fdd_dL_Transmission_Bandwidth; + uint16_t tdd_Transmission_Bandwidth; + + + /* The local eNB IP address to bind */ + net_ip_address_t enb_x2_ip_address; + + /* Nb of MME to connect to */ + uint8_t nb_x2; + + /* List of target eNB to connect to for X2*/ + net_ip_address_t target_enb_x2_ip_address[X2AP_MAX_NB_ENB_IP_ADDRESS]; + + /* Number of SCTP streams used for associations */ + uint16_t sctp_in_streams; + uint16_t sctp_out_streams; +} x2ap_register_enb_req_t; + +//-------------------------------------------------------------------------------------------// +// X2AP -> eNB application layer messages +typedef struct x2ap_register_enb_cnf_s { + /* Nb of connected eNBs*/ + uint8_t nb_x2; +} x2ap_register_enb_cnf_t; + +typedef struct x2ap_deregistered_enb_ind_s { + /* Nb of connected eNBs */ + uint8_t nb_x2; +} x2ap_deregistered_enb_ind_t; + +//-------------------------------------------------------------------------------------------// +// X2AP <-> RRC +typedef struct x2ap_gummei_s { + uint16_t mcc; + uint16_t mnc; + uint8_t mnc_len; + uint8_t mme_code; + uint16_t mme_group_id; +} x2ap_gummei_t; + +typedef struct x2ap_lastvisitedcell_info_s { + uint16_t mcc; + uint16_t mnc; + uint8_t mnc_len; + PhysCellId_t target_physCellId; + cell_type_t cell_type; + uint64_t time_UE_StayedInCell; +}x2ap_lastvisitedcell_info_t; + +//used for src +typedef struct x2ap_handover_req_s { + int source_rnti; /* TODO: to be fixed/remove */ + int source_x2id; /* TODO: to be fixed/remove */ + + unsigned old_eNB_ue_s1ap_id:24; + + PhysCellId_t target_physCellId; + + x2ap_gummei_t ue_gummei; + + /*UE-ContextInformation */ + + /* MME UE id */ + uint32_t mme_ue_s1ap_id; + + security_capabilities_t security_capabilities; + + uint8_t kenb[32]; // keNB or keNB* + + /*next_hop_chaining_coun */ + long int kenb_ncc; + + /* UE aggregate maximum bitrate */ + ambr_t ue_ambr; + + uint8_t nb_e_rabs_tobesetup; + + /* list of e_rab setup-ed by RRC layers */ + e_rab_setup_t e_rabs_tobesetup[S1AP_MAX_E_RAB]; + + /* ue_context_pP->ue_context.e_rab[i].param.sgw_addr; */ + + x2ap_lastvisitedcell_info_t lastvisitedcell_info; + + /* TODO: this parameter has to be removed */ + int target_mod_id; +} x2ap_handover_req_t; + +typedef struct x2ap_handover_req_ack_s { + int source_rnti; /* TODO: to be fixed/remove */ + int source_x2id; /* TODO: to be fixed/remove */ + /* TODO: this parameter has to be removed */ + int target_mod_id; + uint8_t rrc_buffer[1024 /* arbitrary, big enough */]; + int rrc_buffer_size; + + uint32_t mme_ue_s1ap_id; +} x2ap_handover_req_ack_t; + +#endif /* X2AP_MESSAGES_TYPES_H_ */ diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index 40c6aeac44..2857c5e3d4 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -46,6 +46,10 @@ # include "gtpv1u_eNB_task.h" # endif +//# include "x2ap_eNB.h" +# include "x2ap_messages_types.h" +# define X2AP_ENB_REGISTER_RETRY_DELAY 10 + #include "openair1/PHY/INIT/phy_init.h" extern unsigned char NB_eNB_INST; #endif @@ -135,6 +139,30 @@ static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end)//, # endif #endif +/*------------------------------------------------------------------------------*/ +static uint32_t eNB_app_register_x2(uint32_t enb_id_start, uint32_t enb_id_end) +{ + uint32_t enb_id; + MessageDef *msg_p; + uint32_t register_enb_x2_pending = 0; + + for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) { + + { + + msg_p = itti_alloc_new_message (TASK_ENB_APP, X2AP_REGISTER_ENB_REQ); + + RCconfig_X2(msg_p, enb_id); + + //itti_send_msg_to_task (TASK_X2AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); + + register_enb_x2_pending++; + } + } + + return register_enb_x2_pending; +} + /*------------------------------------------------------------------------------*/ void *eNB_app_task(void *args_p) { @@ -147,6 +175,9 @@ void *eNB_app_task(void *args_p) uint32_t registered_enb; long enb_register_retry_timer_id; # endif + uint32_t x2_register_enb_pending; + //uint32_t x2_registered_enb; + //long x2_enb_register_retry_timer_id; uint32_t enb_id; MessageDef *msg_p = NULL; instance_t instance; @@ -192,6 +223,10 @@ void *eNB_app_task(void *args_p) itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p); # endif + /* Try to register each eNB with each other */ + // x2_registered_enb = 0; + x2_register_enb_pending = eNB_app_register_x2 (enb_id_start, enb_id_end); + do { // Wait for a message itti_receive_msg (TASK_ENB_APP, &msg_p); diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 2b6931effa..9f2b4137a4 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -2419,6 +2419,151 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) { return 0; } +int RCconfig_X2(MessageDef *msg_p, uint32_t i) +{ + int j, k, l; + + int enb_id; + + char *address = NULL; + char *cidr = NULL; + + paramdef_t ENBSParams[] = ENBSPARAMS_DESC; + paramdef_t ENBParams[] = ENBPARAMS_DESC; + paramlist_def_t ENBParamList = {ENB_CONFIG_STRING_ENB_LIST,NULL,0}; + + /* get global parameters, defined outside any section in the config file */ + config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); +/*#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) + if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) { + asn_debug = 0; + asn1_xer_print = 0; + } else if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) { + asn_debug = 1; + asn1_xer_print = 1; + } else if (strcasecmp(*(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr) , ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) { + asn_debug = 1; + asn1_xer_print = 2; + } else { + asn_debug = 0; + asn1_xer_print = 0; + } +#endif */ + + AssertFatal(i < ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt, + "Failed to parse config file %s, %uth attribute %s \n", + RC.config_file_name, i, ENB_CONFIG_STRING_ACTIVE_ENBS); + + if (ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt > 0) { + // Output a list of all eNBs. + config_getlist( &ENBParamList,ENBParams,sizeof(ENBParams)/sizeof(paramdef_t),NULL); + if (ENBParamList.numelt > 0) { + for (k = 0; k < ENBParamList.numelt; k++) { + if (ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr == NULL) { + // Calculate a default eNB ID +# if defined(ENABLE_USE_MME) + uint32_t hash; + + hash = s1ap_generate_eNB_id (); + enb_id = k + (hash & 0xFFFF8); +# else + enb_id = k; +# endif + } else { + enb_id = *(ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr); + } + + // search if in active list + for (j = 0; j < ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; j++) { + if (strcmp(ENBSParams[ENB_ACTIVE_ENBS_IDX].strlistptr[j], *(ENBParamList.paramarray[k][ENB_ENB_NAME_IDX].strptr)) == 0) { + + paramdef_t X2Params[] = X2PARAMS_DESC; + paramlist_def_t X2ParamList = {ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS,NULL,0}; + + paramdef_t SCTPParams[] = SCTPPARAMS_DESC; + paramdef_t NETParams[] = NETPARAMS_DESC; + char aprefix[MAX_OPTNAME_SIZE*2 + 8]; + + /* Some default/random parameters */ + + X2AP_REGISTER_ENB_REQ (msg_p).eNB_id = enb_id; + + if (strcmp(*(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr), "CELL_MACRO_ENB") == 0) { + X2AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_MACRO_ENB; + } else if (strcmp(*(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr), "CELL_HOME_ENB") == 0) { + X2AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_HOME_ENB; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_ENB or CELL_HOME_ENB !\n", + RC.config_file_name, i, *(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr)); + } + + X2AP_REGISTER_ENB_REQ (msg_p).eNB_name = strdup(*(ENBParamList.paramarray[k][ENB_ENB_NAME_IDX].strptr)); + X2AP_REGISTER_ENB_REQ (msg_p).tac = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_TRACKING_AREA_CODE_IDX].strptr)); + X2AP_REGISTER_ENB_REQ (msg_p).mcc = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_MOBILE_COUNTRY_CODE_IDX].strptr)); + X2AP_REGISTER_ENB_REQ (msg_p).mnc = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_MOBILE_NETWORK_CODE_IDX].strptr)); + X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length = strlen(*(ENBParamList.paramarray[k][ENB_MOBILE_NETWORK_CODE_IDX].strptr)); + + AssertFatal((X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 2) || + (X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 3), + "BAD MNC DIGIT LENGTH %d", + X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length); + + sprintf(aprefix,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k); + config_getlist( &X2ParamList,X2Params,sizeof(X2Params)/sizeof(paramdef_t),aprefix); + + if(X2ParamList.numelt>X2AP_MAX_NB_ENB_IP_ADDRESS){ + LOG_E(RRC,"value of X2ParamList.numelt %d must be lower than X2AP_MAX_NB_ENB_IP_ADDRESS %d value: reconsider to increase X2AP_MAX_NB_ENB_IP_ADDRESS\n",X2ParamList.numelt,X2AP_MAX_NB_ENB_IP_ADDRESS); + exit(1); + } + + X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 = 0; + for (l = 0; l < X2ParamList.numelt; l++) { + X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 += 1; + + strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4_address,*(X2ParamList.paramarray[l][ENB_X2_IPV4_ADDRESS_IDX].strptr)); + strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6_address,*(X2ParamList.paramarray[l][ENB_X2_IPV6_ADDRESS_IDX].strptr)); + + if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) { + X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4 = 1; + } else if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) { + X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6 = 1; + } else if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "no") == 0) { + X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4 = 1; + X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6 = 1; + } + } + + // SCTP SETTING + X2AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS; + X2AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = SCTP_IN_STREAMS; +# if defined(ENABLE_USE_MME) + sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG); + config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix); + X2AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr); + X2AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr); +#endif + + sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG); + + // NETWORK_INTERFACES + config_get( NETParams,sizeof(NETParams)/sizeof(paramdef_t),aprefix); + + cidr = *(NETParams[ENB_IPV4_ADDR_FOR_X2C_IDX].strptr); + address = strtok(cidr, "/"); + + X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv6 = 0; + X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv4 = 1; + + strcpy(X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv4_address, address); + } + } + } + } + } +return 0; +} + void RCConfig(void) { paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0}; diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h index 96156a4bc4..c6359f1563 100644 --- a/openair2/ENB_APP/enb_config.h +++ b/openair2/ENB_APP/enb_config.h @@ -106,6 +106,7 @@ void ru_config_display(void); int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc); int RCconfig_S1(MessageDef *msg_p, uint32_t i); +int RCconfig_X2(MessageDef *msg_p, uint32_t i); #endif /* ENB_CONFIG_H_ */ /** @} */ diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h index 23b4c2a837..71d7d634c0 100755 --- a/openair2/ENB_APP/enb_paramdef.h +++ b/openair2/ENB_APP/enb_paramdef.h @@ -704,6 +704,31 @@ typedef enum { #define ENB_MME_IP_ADDRESS_ACTIVE_IDX 2 #define ENB_MME_IP_ADDRESS_PREFERENCE_IDX 3 /*---------------------------------------------------------------------------------------------------------------------------------------*/ + +/* X2 configuration parameters section name */ +#define ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS "target_enb_x2_ip_address" + +/* X2 configuration parameters names */ + + +#define ENB_CONFIG_STRING_TARGET_ENB_X2_IPV4_ADDRESS "ipv4" +#define ENB_CONFIG_STRING_TARGET_ENB_X2_IPV6_ADDRESS "ipv6" +#define ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS_PREFERENCE "preference" + + +/*-------------------------------------------------------------------------------------------------------------------------------------*/ +/* X2 configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*-------------------------------------------------------------------------------------------------------------------------------------*/ +#define X2PARAMS_DESC { \ +{ENB_CONFIG_STRING_TARGET_ENB_X2_IPV4_ADDRESS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{ENB_CONFIG_STRING_TARGET_ENB_X2_IPV6_ADDRESS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS_PREFERENCE, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +} + +#define ENB_X2_IPV4_ADDRESS_IDX 0 +#define ENB_X2_IPV6_ADDRESS_IDX 1 +#define ENB_X2_IP_ADDRESS_PREFERENCE_IDX 2 /*---------------------------------------------------------------------------------------------------------------------------------------*/ /* SCTP configuration parameters section name */ #define ENB_CONFIG_STRING_SCTP_CONFIG "SCTP" @@ -735,6 +760,12 @@ typedef enum { #define ENB_INTERFACE_NAME_FOR_S1U_IDX 2 #define ENB_IPV4_ADDR_FOR_S1U_IDX 3 #define ENB_PORT_FOR_S1U_IDX 4 +#define ENB_INTERFACE_NAME_FOR_X2C 5 +#define ENB_IPV4_ADDR_FOR_X2C_IDX 6 +#define ENB_PORT_FOR_X2C 7 +#define ENB_INTERFACE_NAME_FOR_X2U 8 +#define ENB_IPV4_ADDR_FOR_X2U 9 +#define ENB_PORT_FOR_X2U 10 /* S1 interface configuration parameters names */ #define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME "ENB_INTERFACE_NAME_FOR_S1_MME" @@ -743,8 +774,16 @@ typedef enum { #define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U "ENB_IPV4_ADDRESS_FOR_S1U" #define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U" +/* X2 interface configuration parameters names */ +#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_X2C "ENB_INTERFACE_NAME_FOR_X2C" +#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C "ENB_IPV4_ADDRESS_FOR_X2C" +#define ENB_CONFIG_STRING_ENB_PORT_FOR_X2C "ENB_PORT_FOR_X2C" +#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_X2U "ENB_INTERFACE_NAME_FOR_X2U" +#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2U "ENB_IPV4_ADDRESS_FOR_X2U" +#define ENB_CONFIG_STRING_ENB_PORT_FOR_X2U "ENB_PORT_FOR_X2U" + /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ -/* S1 interface configuration parameters */ +/* S1/X2 interface configuration parameters */ /* optname helpstr paramflags XXXptr defXXXval type numelt */ /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ #define NETPARAMS_DESC { \ @@ -752,7 +791,13 @@ typedef enum { {ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ -{ENB_CONFIG_STRING_ENB_PORT_FOR_S1U, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0} \ +{ENB_CONFIG_STRING_ENB_PORT_FOR_S1U, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0}, \ +{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_X2C, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{ENB_CONFIG_STRING_ENB_PORT_FOR_X2C, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0}, \ +{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_X2U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{ENB_CONFIG_STRING_ENB_PORT_FOR_X2U, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0} \ } diff --git a/openair2/X2AP/x2ap_common.c b/openair2/X2AP/x2ap_common.c index 2ac875155d..cc2954f77b 100644 --- a/openair2/X2AP/x2ap_common.c +++ b/openair2/X2AP/x2ap_common.c @@ -66,7 +66,7 @@ ssize_t x2ap_generate_initiating_message( pdu.present = X2AP_X2AP_PDU_PR_initiatingMessage; pdu.choice.initiatingMessage.procedureCode = procedureCode; pdu.choice.initiatingMessage.criticality = criticality; - ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr); + ANY_fromType_aper((ANY_t *)&pdu.choice.initiatingMessage.value, td, sptr); if (asn1_xer_print) { xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu); @@ -98,7 +98,7 @@ ssize_t x2ap_generate_successfull_outcome( pdu.present = X2AP_X2AP_PDU_PR_successfulOutcome; pdu.choice.successfulOutcome.procedureCode = procedureCode; pdu.choice.successfulOutcome.criticality = criticality; - ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr); + ANY_fromType_aper((ANY_t *)&pdu.choice.successfulOutcome.value, td, sptr); if (asn1_xer_print) { xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu); @@ -130,7 +130,7 @@ ssize_t x2ap_generate_unsuccessfull_outcome( pdu.present = X2AP_X2AP_PDU_PR_unsuccessfulOutcome; pdu.choice.successfulOutcome.procedureCode = procedureCode; pdu.choice.successfulOutcome.criticality = criticality; - ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr); + ANY_fromType_aper((ANY_t *)&pdu.choice.successfulOutcome.value, td, sptr); if (asn1_xer_print) { xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu); From 30cc9c1c66a749484a6c0842dc6f2d5669127319 Mon Sep 17 00:00:00 2001 From: WANG Tsu-Han Date: Wed, 22 Aug 2018 15:36:43 +0200 Subject: [PATCH 089/128] adding half fill mechanism into accelorated modulation --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 203 +++++++++++++----- openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 6 +- 2 files changed, 156 insertions(+), 53 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 0bd28b6827..19fefc845e 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -165,10 +165,19 @@ int allocate_REs_in_RB_no_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB, uint32_t tti_offset; uint8_t re; uint8_t *x0p; + uint8_t first_re,last_re; + + last_re=12; + first_re=0; + if (skip_half==1) + last_re=6; + else if (skip_half==2) + first_re=6; + re=first_re; if (skip_dc == 0) { - for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0; - re<12; + for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re; + re0) + /*if(skip_half>0) allocate_REs = allocate_REs_in_RB; - + */ if (dlsch0) { if (dlsch0_harq->Nlayers>1) { diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index 71449e3cd4..19570c6e10 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -71,7 +71,7 @@ schedule_ue_spec_phy_test( uint16_t rnti = 0x1235; uint32_t rb_alloc = 0x1FFFFF; int32_t tpc = 1; - int32_t mcs = 28; + int32_t mcs = 10; int32_t cqi = 15; int32_t ndi = (frameP*10+subframeP)/8; int32_t dai = 0; @@ -202,7 +202,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s int32_t normalized_rx_power; int32_t target_rx_power= 178; int CC_id = 0; - int nb_rb; + int nb_rb = 24; int N_RB_UL; eNB_MAC_INST *mac = RC.mac[module_idP]; COMMON_channels_t *cc = &mac->common_channels[0]; @@ -319,7 +319,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s hi_dci0_req_body->number_of_dci++; ul_req_index = 0; - dlsch_flag = 0; + dlsch_flag = 0; for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){ if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){ dlsch_flag = 1; From 0c83df3ff9939f508bea2bfab706b56bdb8f399c Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 22 Aug 2018 19:15:43 +0200 Subject: [PATCH 090/128] CI: added support for extra options to start eNB added more statistics on iperf server report analysis Signed-off-by: Raphael Defosseux --- ci-scripts/main.py | 53 +++++++++++++++++++--- ci-scripts/xml_files/enb_usrp210_band7.xml | 6 +-- 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 83516d3358..c453558790 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -282,7 +282,13 @@ class SSHConnection(): self.command('cd ' + self.eNBSourceCodePath, '\$', 5) # Initialize_eNB_args usually start with -O and followed by the location in repository full_config_file = self.Initialize_eNB_args.replace('-O ','') - config_path, config_file = os.path.split(full_config_file) + extIdx = full_config_file.find('.conf') + if (extIdx > 0): + extra_options = full_config_file[extIdx + 5:] + full_config_file = full_config_file[:extIdx + 5] + config_path, config_file = os.path.split(full_config_file) + else: + sys.exit('Insufficient Parameter') ci_full_config_file = config_path + '/ci-' + config_file # Make a copy and adapt to EPC / eNB IP addresses self.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5) @@ -292,7 +298,7 @@ class SSHConnection(): # Launch eNB with the modified config file self.command('source oaienv', '\$', 5) self.command('cd cmake_targets', '\$', 5) - self.command('echo "./lte_build_oai/build/lte-softmodem -O ' + self.eNBSourceCodePath + '/' + ci_full_config_file + '" > ./my-lte-softmodem-run.sh ', '\$', 5) + self.command('echo "./lte_build_oai/build/lte-softmodem -O ' + self.eNBSourceCodePath + '/' + ci_full_config_file + extra_options + '" > ./my-lte-softmodem-run.sh ', '\$', 5) self.command('chmod 775 ./my-lte-softmodem-run.sh ', '\$', 5) self.command('echo ' + self.eNBPassword + ' | sudo -S -E daemon --inherit --unsafe --name=enb_daemon --chdir=' + self.eNBSourceCodePath + '/cmake_targets -o ' + self.eNBSourceCodePath + '/cmake_targets/enb_' + SSH.testCase_id + '.log ./my-lte-softmodem-run.sh', '\$', 5) time.sleep(6) @@ -696,7 +702,7 @@ class SSHConnection(): sys.exit(1) return result - def Iperf_analyzeV2Output(self, lock, UE_IPAddress, device_id, statusQueue): + def Iperf_analyzeV2Output(self, lock, UE_IPAddress, device_id, statusQueue, iperf_real_options): result = re.search('Server Report:', str(self.ssh.before)) if result is None: result = re.search('read failed: Connection refused', str(self.ssh.before)) @@ -705,6 +711,24 @@ class SSHConnection(): else: logging.debug('\u001B[1;37;41m Server Report and Connection refused Not Found! \u001B[0m') return -1 + # Computing the requested bandwidth in float + result = re.search('-b (?P[0-9\.]+)[KMG]', str(iperf_real_options)) + if result is not None: + req_bandwidth = result.group('iperf_bandwidth') + req_bw = float(req_bandwidth) + result = re.search('-b [0-9\.]+K', str(iperf_real_options)) + if result is not None: + req_bandwidth = '%.1f Kbits/sec' % req_bw + req_bw = req_bw * 1000 + result = re.search('-b [0-9\.]+M', str(iperf_real_options)) + if result is not None: + req_bandwidth = '%.1f Mbits/sec' % req_bw + req_bw = req_bw * 1000000 + result = re.search('-b [0-9\.]+G', str(iperf_real_options)) + if result is not None: + req_bandwidth = '%.1f Gbits/sec' % req_bw + req_bw = req_bw * 1000000000 + result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P[0-9\.]+ [KMG]bits\/sec) +(?P[0-9\.]+ ms) +(\d+\/..\d+) (\((?P[0-9\.]+)%\))', str(self.ssh.before)) if result is not None: bitrate = result.group('bitrate') @@ -713,10 +737,27 @@ class SSHConnection(): lock.acquire() logging.debug('\u001B[1;37;44m iperf result (' + UE_IPAddress + ') \u001B[0m') iperfStatus = True - msg = '' + msg = 'Req Bitrate : ' + req_bandwidth + '\n' + logging.debug('\u001B[1;34m Req Bitrate : ' + req_bandwidth + '\u001B[0m') if bitrate is not None: msg += 'Bitrate : ' + bitrate + '\n' logging.debug('\u001B[1;34m Bitrate : ' + bitrate + '\u001B[0m') + result = re.search('(?P[0-9\.]+) [KMG]bits/sec', str(bitrate)) + if result is not None: + actual_bw = float(str(result.group('real_bw'))) + result = re.search('[0-9\.]+ K', bitrate) + if result is not None: + actual_bw = actual_bw * 1000 + result = re.search('[0-9\.]+ M', bitrate) + if result is not None: + actual_bw = actual_bw * 1000000 + result = re.search('[0-9\.]+ G', bitrate) + if result is not None: + actual_bw = actual_bw * 1000000000 + br_loss = 100 * actual_bw / req_bw + bitperf = '%.2f ' % br_loss + msg += 'Bitrate Perf: ' + bitperf + '%\n' + logging.debug('\u001B[1;34m Bitrate Perf: ' + bitperf + '%\u001B[0m') if packetloss is not None: msg += 'Packet Loss : ' + packetloss + '%\n' logging.debug('\u001B[1;34m Packet Loss : ' + packetloss + '%\u001B[0m') @@ -916,7 +957,7 @@ class SSHConnection(): self.command('rm -f iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', 5) self.command('stdbuf -o0 adb -s ' + device_id + ' shell "/data/local/tmp/iperf -c ' + EPC_Iperf_UE_IPAddress + ' ' + modified_options + ' -p ' + str(port) + '" 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - clientStatus = self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue) + clientStatus = self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue, modified_options) # Launch iperf server on EPC side self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) @@ -990,7 +1031,7 @@ class SSHConnection(): else: self.command('stdbuf -o0 iperf -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee -a iperf_' + SSH.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0) - clientStatus = self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue) + clientStatus = self.Iperf_analyzeV2Output(lock, UE_IPAddress, device_id, statusQueue, modified_options) self.close() self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword) diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 444f91f094..b8a2439106 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -33,19 +33,19 @@ Initialize_eNB Initialize eNB (FDD/Band7/5MHz) - -O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf + -O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --codingw --fepw Initialize_eNB Initialize eNB (FDD/Band7/10MHz) - -O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf + -O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf --codingw --fepw Initialize_eNB Initialize eNB (FDD/Band7/20MHz) - -O ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf + -O ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf --codingw --fepw From d12a54a7746720ab0f7e74933f40474e8d733db0 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 23 Aug 2018 10:40:28 +0200 Subject: [PATCH 091/128] Removed unused variable Signed-off-by: Raphael Defosseux --- openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index 49cc68b06a..24333a06a5 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -211,7 +211,6 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s int sched_frame=frameP; int sched_subframe = (subframeP+4)%10; uint16_t ul_req_index; - uint8_t dlsch_flag; if (sched_subframenumber_of_dci++; ul_req_index = 0; - dlsch_flag = 0; for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){ if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){ - dlsch_flag = 1; LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index); break; } From d5f28018edb585b4cfe1e5dd0a22bbeb858adf5b Mon Sep 17 00:00:00 2001 From: laurent Date: Thu, 23 Aug 2018 13:06:17 +0200 Subject: [PATCH 092/128] fix 344 --- openair1/SCHED_UE/phy_procedures_lte_ue.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_RA.c | 10 +- openair2/LAYER2/MAC/eNB_scheduler_bch.c | 12 +- openair2/LAYER2/MAC/eNB_scheduler_dlsch.c | 8 +- openair2/LAYER2/MAC/eNB_scheduler_fairRR.c | 4 +- openair2/LAYER2/MAC/eNB_scheduler_mch.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 2 +- openair2/LAYER2/MAC/ra_procedures.c | 6 +- openair2/LAYER2/MAC/rar_tools.c | 4 +- openair2/LAYER2/MAC/rar_tools_ue.c | 4 +- openair2/LAYER2/MAC/ue_procedures.c | 12 +- openair2/UTIL/OPT/README.txt | 6 +- openair2/UTIL/OPT/mac_pcap.h | 9 +- openair2/UTIL/OPT/opt.h | 14 +- openair2/UTIL/OPT/packet-mac-lte.h | 400 ++++++++++++++------- openair2/UTIL/OPT/probe.c | 74 ++-- openair2/UTIL/OPT/ws_compiler_tests.h | 138 +++++++ openair2/UTIL/OPT/ws_symbol_export.h | 202 +++++++++++ targets/RT/USER/lte-softmodem.c | 9 +- targets/RT/USER/lte-uesoftmodem.c | 9 +- 20 files changed, 701 insertions(+), 226 deletions(-) create mode 100644 openair2/UTIL/OPT/ws_compiler_tests.h create mode 100644 openair2/UTIL/OPT/ws_symbol_export.h diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index ed258ed47c..e695be29db 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -2617,7 +2617,7 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin dummy[0] = ue->pbch_vars[eNB_id]->decoded_output[2]; dummy[1] = ue->pbch_vars[eNB_id]->decoded_output[1]; dummy[2] = ue->pbch_vars[eNB_id]->decoded_output[0]; - trace_pdu(1, dummy, 3, ue->Mod_id, 0, 0, + trace_pdu( DIRECTION_DOWNLINK, dummy, WS_C_RNTI, ue->Mod_id, 0, 0, frame_rx, subframe_rx, 0, 0); LOG_D(OPT,"[UE %d][PBCH] Frame %d trace pdu for PBCH\n", ue->Mod_id, subframe_rx); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index 35590ec896..b637a92a96 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -988,9 +988,10 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, payload[0], ra->msg4_TBsize)); if (opt_enabled == 1) { - trace_pdu(1, + trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) mac-> - UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], rrc_sdu_length, UE_id, 3, + UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], + rrc_sdu_length, UE_id, WS_C_RNTI, UE_RNTI(module_idP, UE_id), mac->frame, mac->subframe, 0, 0); LOG_D(OPT, @@ -1193,9 +1194,10 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, payload[0], ra->msg4_TBsize)); if (opt_enabled == 1) { - trace_pdu(1, + trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) mac-> - UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], rrc_sdu_length, UE_id, 3, + UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], + rrc_sdu_length, UE_id, WS_C_RNTI, UE_RNTI(module_idP, UE_id), mac->frame, mac->subframe, 0, 0); LOG_D(OPT, diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c index d965bc811b..b2b59691f8 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c @@ -281,10 +281,10 @@ schedule_SIB1_BR(module_id_t module_idP, eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST; if (opt_enabled == 1) { - trace_pdu(1, + trace_pdu(DIRECTION_DOWNLINK, &cc->BCCH_BR_pdu[0].payload[0], bcch_sdu_length, - 0xffff, 4, 0xffff, eNB->frame, eNB->subframe, 0, 0); + 0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0); LOG_D(OPT, "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", module_idP, frameP, CC_id, 0xffff, bcch_sdu_length); @@ -472,11 +472,11 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP, eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST; if (opt_enabled == 1) { - trace_pdu(1, + trace_pdu(DIRECTION_DOWNLINK, &cc->BCCH_BR_pdu[i + 1].payload[0], bcch_sdu_length, 0xffff, - 4, + WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0); LOG_D(OPT, @@ -759,11 +759,11 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) } if (opt_enabled == 1) { - trace_pdu(1, + trace_pdu(DIRECTION_DOWNLINK, &cc->BCCH_pdu.payload[0], bcch_sdu_length, 0xffff, - 4, 0xffff, eNB->frame, eNB->subframe, 0, 0); + WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0); LOG_D(OPT, "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", module_idP, frameP, CC_id, 0xffff, diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index df52b83d72..da52a8fedc 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -1359,9 +1359,9 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP, } if (opt_enabled == 1) { - trace_pdu(1, (uint8_t *) - UE_list->DLSCH_pdu[CC_id][0][UE_id]. - payload[0], TBS, module_idP, 3, + trace_pdu(DIRECTION_DOWNLINK, + (uint8_t *) UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], + TBS, module_idP, WS_C_RNTI, UE_RNTI(module_idP, UE_id), eNB->frame, eNB->subframe, 0, 0); LOG_D(OPT, @@ -2085,7 +2085,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) } if (opt_enabled == 1) { - trace_pdu(1, + trace_pdu(DIRECTION_DOWNLINK, &eNB->common_channels[CC_id].PCCH_pdu.payload[0], pcch_sdu_length, 0xffff, diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c index 1acf657220..e9fdf964e7 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c @@ -1655,8 +1655,8 @@ schedule_ue_spec_fairRR(module_id_t module_idP, } if (opt_enabled == 1) { - trace_pdu(1, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], - TBS, module_idP, 3, UE_RNTI(module_idP,UE_id), + trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], + TBS, module_idP, WS_RA_RNTI, UE_RNTI(module_idP,UE_id), eNB->frame, eNB->subframe,0,0); LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d rnti %x with size %d\n", module_idP, CC_id, frameP, UE_RNTI(module_idP,UE_id), TBS); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c index 63a4711778..16953e958a 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c @@ -767,7 +767,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, /* Tracing of PDU is done on UE side */ if (opt_enabled == 1) { - trace_pdu(1, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, 6, 0xffff, // M_RNTI = 6 in wirehsark + trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff, // M_RNTI = 6 in wirehsark RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe, 0, 0); LOG_D(OPT, diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 04415a8386..1fe21090db 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -150,7 +150,7 @@ rx_sdu(const module_id_t enb_mod_idP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1); if (opt_enabled == 1) { - trace_pdu(0, sduP, sdu_lenP, 0, 3, current_rnti, frameP, subframeP, + trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP, 0, 0); LOG_D(OPT, "[eNB %d][ULSCH] Frame %d rnti %x with size %d\n", enb_mod_idP, frameP, current_rnti, sdu_lenP); diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c index f5df67ab64..aeabbd092a 100644 --- a/openair2/LAYER2/MAC/ra_procedures.c +++ b/openair2/LAYER2/MAC/ra_procedures.c @@ -248,7 +248,7 @@ Msg1_transmitted(module_id_t module_idP, uint8_t CC_id, UE_mac_inst[module_idP].RA_attempt_number++; if (opt_enabled) { - trace_pdu(0, NULL, 0, module_idP, 0, + trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI, UE_mac_inst[module_idP].RA_prach_resources. ra_PreambleIndex, UE_mac_inst[module_idP].txFrame, UE_mac_inst[module_idP].txSubframe, 0, @@ -277,8 +277,8 @@ Msg3_transmitted(module_id_t module_idP, uint8_t CC_id, UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1; if (opt_enabled) { // msg3 - trace_pdu(0, &UE_mac_inst[module_idP].CCCH_pdu.payload[0], - UE_mac_inst[module_idP].RA_Msg3_size, module_idP, 3, + trace_pdu(DIRECTION_UPLINK , &UE_mac_inst[module_idP].CCCH_pdu.payload[0], + UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI, UE_mac_inst[module_idP].crnti, UE_mac_inst[module_idP].txFrame, UE_mac_inst[module_idP].txSubframe, 0, 0); diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c index b70b382494..2e6b47ff60 100644 --- a/openair2/LAYER2/MAC/rar_tools.c +++ b/openair2/LAYER2/MAC/rar_tools.c @@ -96,7 +96,7 @@ fill_rar(const module_id_t module_idP, ((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1); if (opt_enabled) { - trace_pdu(1, dlsch_buffer, input_buffer_length, module_idP, 2, 1, + trace_pdu(DIRECTION_DOWNLINK , dlsch_buffer, input_buffer_length, module_idP, WS_RA_RNTI , 1, RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe, 0, 0); LOG_D(OPT, @@ -181,7 +181,7 @@ fill_rar_br(eNB_MAC_INST * eNB, ra->preamble_index, ra->timing_offset); if (opt_enabled) { - trace_pdu(1, dlsch_buffer, input_buffer_length, eNB->Mod_id, 2, 1, + trace_pdu(DIRECTION_DOWNLINK , dlsch_buffer, input_buffer_length, eNB->Mod_id, WS_RA_RNTI , 1, eNB->frame, eNB->subframe, 0, 0); LOG_D(OPT, "[RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n", diff --git a/openair2/LAYER2/MAC/rar_tools_ue.c b/openair2/LAYER2/MAC/rar_tools_ue.c index 991eaae052..35d1f7925e 100644 --- a/openair2/LAYER2/MAC/rar_tools_ue.c +++ b/openair2/LAYER2/MAC/rar_tools_ue.c @@ -119,8 +119,8 @@ uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const fra LOG_D(OPT, "[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n", module_idP, CC_id, frameP, ra_rnti); - trace_pdu(1, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6, - module_idP, 2, ra_rnti, UE_mac_inst[module_idP].rxFrame, + trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6, + module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame, UE_mac_inst[module_idP].rxSubframe, 0, 0); } diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index dd78da7275..9558aa596f 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -420,7 +420,7 @@ ue_send_sdu(module_id_t module_idP, //LOG_D(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]); if (opt_enabled) { - trace_pdu(1, sdu, sdu_len, module_idP, 3, + trace_pdu(DIRECTION_DOWNLINK, sdu, sdu_len, module_idP, WS_C_RNTI, UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0); LOG_D(OPT, "[UE %d][DLSCH] Frame %d trace pdu for rnti %x with size %d\n", @@ -637,11 +637,11 @@ ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP, stop_meas(&UE_mac_inst[module_idP].rx_si); #endif if (opt_enabled == 1) { - trace_pdu(0, + trace_pdu(DIRECTION_UPLINK, (uint8_t *) pdu, len, module_idP, - 4, + WS_SI_RNTI, 0xffff, UE_mac_inst[module_idP].rxFrame, UE_mac_inst[module_idP].rxSubframe, 0, 0); @@ -675,11 +675,11 @@ ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP, stop_meas(&UE_mac_inst[module_idP].rx_p); #endif if (opt_enabled == 1) { - trace_pdu(0, + trace_pdu(DIRECTION_UPLINK , (uint8_t *) pdu, len, module_idP, - 4, + WS_SI_RNTI, P_RNTI, UE_mac_inst[module_idP].rxFrame, UE_mac_inst[module_idP].rxSubframe, 0, 0); @@ -2255,7 +2255,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, #endif if (opt_enabled) { - trace_pdu(0, ulsch_buffer, buflen, module_idP, 3, + trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI, UE_mac_inst[module_idP].crnti, UE_mac_inst[module_idP].txFrame, UE_mac_inst[module_idP].txSubframe, 0, 0); diff --git a/openair2/UTIL/OPT/README.txt b/openair2/UTIL/OPT/README.txt index 7193733d00..c56aeda93d 100644 --- a/openair2/UTIL/OPT/README.txt +++ b/openair2/UTIL/OPT/README.txt @@ -1,9 +1,13 @@ -2012 07 10 - Working version How to configure wireshark for dissecting LTE protocols: - start the wireshark as a sudoers +- goto analyze->enabled prototols + => enable mac_lte_udp and rlc_lte_udp - goto edit/preferences and expand Protocols - select UDP and check "try heuristic sub-dissectors first" - select MAC-LTE, and check all the options (checkboxes), and set the "which layer info to show in info column" to "MAC info" - select RLC-LTE, and check all the options except the "May see RLC headers only", and set the "call PDCP dissector for DRB PDUs" to "12-bit SN". Optionally you may select the sequence analysis for RLC AM/UM. + +How to use +- start eNB or UE with option -W (or -P if you want to make a pcap file) - capture on local interface "lo" - filter out the ICMP/DNS/TCP messages (e.g. "!icmp && !dns && !tcp") diff --git a/openair2/UTIL/OPT/mac_pcap.h b/openair2/UTIL/OPT/mac_pcap.h index f1d4b32492..48b31bb3c0 100644 --- a/openair2/UTIL/OPT/mac_pcap.h +++ b/openair2/UTIL/OPT/mac_pcap.h @@ -42,11 +42,4 @@ typedef struct MAC_Context_Info_t { unsigned int subframesSinceCaptureStart; } MAC_Context_Info_t; -pcap_hdr_t file_header = { - 0xa1b2c3d4, /* magic number */ - 2, 4, /* version number is 2.4 */ - 0, /* timezone */ - 0, /* sigfigs - apparently all tools do this */ - 65535, /* snaplen - this should be long enough */ - MAC_LTE_DLT /* Data Link Type (DLT). Set as unused value 147 for now */ -}; + diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h index c9340f258e..b4ff3b5006 100644 --- a/openair2/UTIL/OPT/opt.h +++ b/openair2/UTIL/OPT/opt.h @@ -55,6 +55,16 @@ This header file must be included */ #include "PHY/impl_defs_lte.h" #endif +#define PACKET_MAC_LTE_DEFAULT_UDP_PORT (9999) + +typedef uint8_t guint8; +typedef uint16_t guint16; +typedef uint32_t guint32; +typedef guint8 gboolean; + +#include "packet-mac-lte.h" +#include "mac_pcap.h" + #ifdef OCP_FRAMEWORK #include #else @@ -74,7 +84,7 @@ typedef enum radio_type_e { extern trace_mode_t opt_type; extern char in_ip[40]; -extern char in_path[100]; +extern char in_path[FILENAME_MAX]; /** * function def @@ -84,7 +94,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe, int oob_event, int oob_event_value); -int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p); +int init_opt(char *path, char *ip); void terminate_opt(void); diff --git a/openair2/UTIL/OPT/packet-mac-lte.h b/openair2/UTIL/OPT/packet-mac-lte.h index d0bb60f6b5..4dfbe7912e 100644 --- a/openair2/UTIL/OPT/packet-mac-lte.h +++ b/openair2/UTIL/OPT/packet-mac-lte.h @@ -1,41 +1,36 @@ /* packet-mac-lte.h * * Martin Mathieson - * $Id: packet-mac-lte.h 42240 2012-04-25 20:02:12Z pascal $ * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * + * SPDX-License-Identifier: GPL-2.0-or-later + * * This header file may also be distributed under * the terms of the BSD Licence as follows: * * Copyright (C) 2009 Martin Mathieson. All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE + * SPDX-License-Identifier: BSD-2-Clause + */ + + /* + this is wireshark, commit: commit eda834b6e29c36e05a63a6056afa98390ff79357 + Date: Wed Aug 22 14:36:20 2018 +0200 + modified to be used in OpenAir to create the LTE MAC/RLC encapsulated in UDP as per Wireshark feature */ -#ifndef PACKET_MAC_LTE_H_ -#define PACKET_MAC_LTE_H_ + +#include "ws_symbol_export.h" + +/** data structure to hold time values with nanosecond resolution*/ +typedef struct { + time_t secs; + int nsecs; +} nstime_t; + /* radioType */ #define FDD_RADIO 1 @@ -45,105 +40,190 @@ #define DIRECTION_UPLINK 0 #define DIRECTION_DOWNLINK 1 -/* SR: no need to declare following part: */ +/* rntiType */ +#define WS_NO_RNTI 0 +#define WS_P_RNTI 1 +#define WS_RA_RNTI 2 +#define WS_C_RNTI 3 +#define WS_SI_RNTI 4 +#define WS_SPS_RNTI 5 +#define WS_M_RNTI 6 +#define WS_SL_BCH_RNTI 7 +#define WS_SL_RNTI 8 +#define WS_SC_RNTI 9 +#define WS_G_RNTI 10 + typedef enum mac_lte_oob_event { - ltemac_send_preamble, - ltemac_send_sr, - ltemac_sr_failure + ltemac_send_preamble, + ltemac_send_sr, + ltemac_sr_failure } mac_lte_oob_event; typedef enum mac_lte_dl_retx { - dl_retx_no, - dl_retx_yes, - dl_retx_unknown + dl_retx_no, + dl_retx_yes, + dl_retx_unknown } mac_lte_dl_retx; typedef enum mac_lte_crc_status { - crc_fail = 0, - crc_success = 1, - crc_high_code_rate = 2, - crc_pdsch_lost = 3, - crc_duplicate_nonzero_rv = 4 + crc_fail = 0, + crc_success = 1, + crc_high_code_rate = 2, + crc_pdsch_lost = 3, + crc_duplicate_nonzero_rv = 4, + crc_false_dci = 5 } mac_lte_crc_status; +/* N.B. for SCellIndex-r13 extends to 31 */ +typedef enum mac_lte_carrier_id { + carrier_id_primary, + carrier_id_secondary_1, + carrier_id_secondary_2, + carrier_id_secondary_3, + carrier_id_secondary_4, + carrier_id_secondary_5, + carrier_id_secondary_6, + carrier_id_secondary_7 +} mac_lte_carrier_id; + +typedef enum mac_lte_ce_mode { + no_ce_mode = 0, + ce_mode_a = 1, + ce_mode_b = 2 +} mac_lte_ce_mode; + +typedef enum mac_lte_nb_mode { + no_nb_mode = 0, + nb_mode = 1 +} mac_lte_nb_mode; + /* Context info attached to each LTE MAC frame */ -typedef struct mac_lte_info { - /* Needed for decode */ - guint8 radioType; - guint8 direction; - guint8 rntiType; +typedef struct mac_lte_info +{ + /* Needed for decode */ + guint8 radioType; + guint8 direction; + guint8 rntiType; - /* Extra info to display */ - guint16 rnti; - guint16 ueid; + /* Extra info to display */ + guint16 rnti; + guint16 ueid; - /* Timing info */ - guint16 sysframeNumber; - guint16 subframeNumber; + /* Timing info */ + guint16 sysframeNumber; + guint16 subframeNumber; - /* Optional field. More interesting for TDD (FDD is always -4 subframeNumber) */ - gboolean subframeNumberOfGrantPresent; - guint16 subframeNumberOfGrant; + /* Optional field. More interesting for TDD (FDD is always -4 subframeNumber) */ + gboolean subframeNumberOfGrantPresent; + guint16 subframeNumberOfGrant; - /* Flag set only if doing PHY-level data test - i.e. there may not be a - well-formed MAC PDU so just show as raw data */ - gboolean isPredefinedData; + /* Flag set only if doing PHY-level data test - i.e. there may not be a + well-formed MAC PDU so just show as raw data */ + gboolean isPredefinedData; - /* Length of DL PDU or UL grant size in bytes */ - guint16 length; + /* Length of DL PDU or UL grant size in bytes */ + guint16 length; - /* UL only. 0=newTx, 1=first-retx, etc */ - guint8 reTxCount; - guint8 isPHICHNACK; /* FALSE=PDCCH retx grant, TRUE=PHICH NACK */ + /* 0=newTx, 1=first-retx, etc */ + guint8 reTxCount; + guint8 isPHICHNACK; /* FALSE=PDCCH retx grant, TRUE=PHICH NACK */ - /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set */ - gboolean isExtendedBSRSizes; + /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set */ + gboolean isExtendedBSRSizes; - /* DL only. Status of CRC check */ - mac_lte_crc_status crcStatusValid; + /* UL only. Indicates if the R10 simultaneousPUCCH-PUSCH parameter is set for PCell */ + gboolean isSimultPUCCHPUSCHPCell; - /* DL only. Is this known to be a retransmission? */ - mac_lte_dl_retx dl_retx; + /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set for PSCell */ + gboolean isSimultPUCCHPUSCHPSCell; - /* More Physical layer info (see direction above for which side of union to use) */ - union { - struct mac_lte_ul_phy_info { - guint8 present; /* Remaining UL fields are present and should be displayed */ - guint8 modulation_type; - guint8 tbs_index; - guint8 resource_block_length; - guint8 resource_block_start; - guint8 harq_id; - gboolean ndi; - } ul_info; - struct mac_lte_dl_phy_info { - guint8 present; /* Remaining UL fields are present and should be displayed */ - guint8 dci_format; - guint8 resource_allocation_type; - guint8 aggregation_level; - guint8 mcs_index; - guint8 redundancy_version_index; - guint8 resource_block_length; - mac_lte_crc_status crc_status; - guint8 harq_id; - gboolean ndi; - guint8 transport_block; /* 1..2 */ - } dl_info; - } detailed_phy_info; + /* Status of CRC check. For UE it is DL only. For eNodeB it is UL + only. For an analyzer, it is present for both DL and UL. */ + gboolean crcStatusValid; + mac_lte_crc_status crcStatus; - /* Relating to out-of-band events */ - /* N.B. dissector will only look to these fields if length is 0... */ - mac_lte_oob_event oob_event; - guint8 rapid; - guint8 rach_attempt_number; -#define MAX_SRs 20 - guint16 number_of_srs; - guint16 oob_ueid[MAX_SRs]; - guint16 oob_rnti[MAX_SRs]; + /* Carrier ID */ + mac_lte_carrier_id carrierId; + + /* DL only. Is this known to be a retransmission? */ + mac_lte_dl_retx dl_retx; + + /* DL only. CE mode to be used for RAR decoding */ + mac_lte_ce_mode ceMode; + + /* DL and UL. NB-IoT mode of the UE */ + mac_lte_nb_mode nbMode; + + /* UL only, for now used for CE mode A RAR decoding */ + guint8 nUlRb; + + /* More Physical layer info (see direction above for which side of union to use) */ + union { + struct mac_lte_ul_phy_info + { + guint8 present; /* Remaining UL fields are present and should be displayed */ + guint8 modulation_type; + guint8 tbs_index; + guint8 resource_block_length; + guint8 resource_block_start; + guint8 harq_id; + gboolean ndi; + } ul_info; + struct mac_lte_dl_phy_info + { + guint8 present; /* Remaining DL fields are present and should be displayed */ + guint8 dci_format; + guint8 resource_allocation_type; + guint8 aggregation_level; + guint8 mcs_index; + guint8 redundancy_version_index; + guint8 resource_block_length; + guint8 harq_id; + gboolean ndi; + guint8 transport_block; /* 0..1 */ + } dl_info; + } detailed_phy_info; + + /* Relating to out-of-band events */ + /* N.B. dissector will only look to these fields if length is 0... */ + mac_lte_oob_event oob_event; + guint8 rapid; + guint8 rach_attempt_number; + #define MAX_SRs 20 + guint16 number_of_srs; + guint16 oob_ueid[MAX_SRs]; + guint16 oob_rnti[MAX_SRs]; } mac_lte_info; -/* Accessor function to check if a frame was considered to be ReTx */ -//int is_mac_lte_frame_retx(packet_info *pinfo, guint8 direction); + +typedef struct mac_lte_tap_info { + /* Info from context */ + guint16 rnti; + guint16 ueid; + guint8 rntiType; + guint8 isPredefinedData; + gboolean crcStatusValid; + mac_lte_crc_status crcStatus; + guint8 direction; + + guint8 isPHYRetx; + guint16 ueInTTI; + + nstime_t mac_lte_time; + + /* Number of bytes (which part is used depends upon context settings) */ + guint32 single_number_of_bytes; + guint32 bytes_for_lcid[11]; + guint32 sdus_for_lcid[11]; + guint8 number_of_rars; + guint8 number_of_paging_ids; + + /* Number of padding bytes includes padding subheaders and trailing padding */ + guint16 padding_bytes; + guint16 raw_length; +} mac_lte_tap_info; + + /*****************************************************************/ /* UDP framing format */ @@ -153,12 +233,10 @@ typedef struct mac_lte_info { /* and implemented by this dissector, using the definitions */ /* below. A link to an example program showing you how to encode */ /* these headers and send LTE MAC PDUs on a UDP socket is */ -/* provided at http://wiki.wireshark.org/MAC-LTE */ +/* provided at https://wiki.wireshark.org/MAC-LTE */ /* */ -/* A heuristic dissecter (enabled by a preference) will */ -/* recognise a signature at the beginning of these frames . */ -/* Until someone is using this format, suggestions for changes */ -/* are welcome. */ +/* A heuristic dissector (enabled by a preference) will */ +/* recognise a signature at the beginning of these frames. */ /*****************************************************************/ @@ -177,7 +255,7 @@ typedef struct mac_lte_info { to show you display/filter/plot/add-custom-columns on these fields, so should be added if available. The format is to have the tag, followed by the value (there is no length field, - its implicit from the tag) */ + it's implicit from the tag) */ #define MAC_LTE_RNTI_TAG 0x02 /* 2 bytes, network order */ @@ -185,8 +263,8 @@ typedef struct mac_lte_info { #define MAC_LTE_UEID_TAG 0x03 /* 2 bytes, network order */ -#define MAC_LTE_SUBFRAME_TAG 0x04 -/* 2 bytes, network order */ +#define MAC_LTE_FRAME_SUBFRAME_TAG 0x04 +/* 2 bytes, network order, SFN is stored in 12 MSB and SF in 4 LSB */ #define MAC_LTE_PREDEFINED_DATA_TAG 0x05 /* 1 byte */ @@ -200,29 +278,101 @@ typedef struct mac_lte_info { #define MAC_LTE_EXT_BSR_SIZES_TAG 0x08 /* 0 byte */ -#define MAC_LTE_OOB_EVENT_TAG 0x09 -/* 3 byte */ +#define MAC_LTE_SEND_PREAMBLE_TAG 0x09 +/* 2 bytes, RAPID value (1 byte) followed by RACH attempt number (1 byte) */ + +#define MAC_LTE_CARRIER_ID_TAG 0x0A +/* 1 byte */ + +#define MAC_LTE_PHY_TAG 0x0B +/* variable length, length (1 byte) then depending on direction + in UL: modulation type (1 byte), TBS index (1 byte), RB length (1 byte), + RB start (1 byte), HARQ id (1 byte), NDI (1 byte) + in DL: DCI format (1 byte), resource allocation type (1 byte), aggregation level (1 byte), + MCS index (1 byte), redundancy version (1 byte), resource block length (1 byte), + HARQ id (1 byte), NDI (1 byte), TB (1 byte), DL reTx (1 byte) */ + +#define MAC_LTE_SIMULT_PUCCH_PUSCH_PCELL_TAG 0x0C +/* 0 byte */ + +#define MAC_LTE_SIMULT_PUCCH_PUSCH_PSCELL_TAG 0x0D +/* 0 byte */ + +#define MAC_LTE_CE_MODE_TAG 0x0E +/* 1 byte containing mac_lte_ce_mode enum value */ + +#define MAC_LTE_NB_MODE_TAG 0x0F +/* 1 byte containing mac_lte_nb_mode enum value */ + +#define MAC_LTE_N_UL_RB_TAG 0x10 +/* 1 byte containing the number of UL resource blocks: 6, 15, 25, 50, 75 or 100 */ + +#define MAC_LTE_SR_TAG 0x11 +/* 2 bytes for the number of items, followed by that number of ueid, rnti (2 bytes each) */ + /* MAC PDU. Following this tag comes the actual MAC PDU (there is no length, the PDU continues until the end of the frame) */ #define MAC_LTE_PAYLOAD_TAG 0x01 -/* Set details of an LCID -> drb channel mapping. To be called from - configuration protocol (e.g. RRC) */ -/*void set_mac_lte_channel_mapping(guint16 ueid, guint8 lcid, - guint8 srbid, guint8 drbid, - guint8 rlcMode, guint8 um_sn_length, - guint8 ul_priority); -*/ -/* Functions to be called from outside this module (e.g. in a plugin, where mac_lte_info - isn't available) to get/set per-packet data */ -//mac_lte_info *get_mac_lte_proto_data(packet_info *pinfo); -//void set_mac_lte_proto_data(packet_info *pinfo, mac_lte_info *p_mac_lte_info); +/* Type to store parameters for configuring LCID->RLC channel settings for DRB */ +/* Some are optional, and may not be seen (e.g. on reestablishment) */ +typedef struct drb_mapping_t +{ + guint16 ueid; /* Mandatory */ + guint8 drbid; /* Mandatory */ + gboolean lcid_present; + guint8 lcid; /* Part of LogicalChannelConfig - optional */ + gboolean rlcMode_present; + guint8 rlcMode; /* Part of RLC config - optional */ + gboolean rlc_ul_ext_li_field; /* Part of RLC config - optional */ + gboolean rlc_dl_ext_li_field; /* Part of RLC config - optional */ + gboolean rlc_ul_ext_am_sn; /* Part of RLC config - optional */ + gboolean rlc_dl_ext_am_sn; /* Part of RLC config - optional */ + gboolean um_sn_length_present; + guint8 um_sn_length; /* Part of RLC config - optional */ + gboolean ul_priority_present; + guint8 ul_priority; /* Part of LogicalChannelConfig - optional */ + gboolean pdcp_sn_size_present; + guint8 pdcp_sn_size; /* Part of pdcp-Config - optional */ +} drb_mapping_t; -/* Function to attempt to populate p_mac_lte_info using framing definition above */ -/*gboolean dissect_mac_lte_context_fields(struct mac_lte_info *p_mac_lte_info, tvbuff_t *tvb, - gint *p_offset); -*/ -#endif /* PACKET_MAC_LTE_H_ */ + +/* Dedicated DRX config. Used to verify that a sensible config is given. + Also, beginning to configure MAC with this config and (optionally) show + DRX config and state (cycles/timers) attached to each UL/DL PDU! */ +typedef struct drx_config_t { + gboolean configured; + guint32 frameNum; + guint32 previousFrameNum; + + guint32 onDurationTimer; + guint32 inactivityTimer; + guint32 retransmissionTimer; + guint32 longCycle; + guint32 cycleOffset; + /* Optional Short cycle */ + gboolean shortCycleConfigured; + guint32 shortCycle; + guint32 shortCycleTimer; +} drx_config_t; + +/* RRC can indicate whether simultaneous PUCCH/PUSCH is used */ +typedef enum { + SIMULT_PUCCH_PUSCH_PCELL = 0, + SIMULT_PUCCH_PUSCH_PSCELL +} simult_pucch_pusch_cell_type; +/* + * Editor modelines - http://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: + */ diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c index 2f7dac3d1e..a1e5367168 100644 --- a/openair2/UTIL/OPT/probe.c +++ b/openair2/UTIL/OPT/probe.c @@ -95,26 +95,22 @@ what about the implementation int opt_enabled=0; -#define PACKET_MAC_LTE_DEFAULT_UDP_PORT (9999) - -typedef uint8_t guint8; -typedef uint16_t guint16; -typedef uint32_t guint32; -typedef guint8 gboolean; - -#include "packet-mac-lte.h" -#include "mac_pcap.h" - //static unsigned char g_PDUBuffer[1600]; //static unsigned int g_PDUOffset; - char in_ip[40]; -char in_path[100]; +char in_path[FILENAME_MAX]; FILE *file_fd = NULL; +pcap_hdr_t file_header = { + 0xa1b2c3d4, /* magic number */ + 2, 4, /* version number is 2.4 */ + 0, /* timezone */ + 0, /* sigfigs - apparently all tools do this */ + 65535, /* snaplen - this should be long enough */ + MAC_LTE_DLT /* Data Link Type (DLT). Set as unused value 147 for now */ +}; trace_mode_t opt_type = OPT_NONE; -static radio_type_t radio_type; static unsigned int subframesSinceCaptureStart; static int g_socksd = -1;/* UDP socket used for sending frames */ @@ -237,22 +233,13 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, guint8 oob_event, guint8 oob_event_value, uint8_t *pdu_buffer, unsigned int pdu_buffer_size) { - #ifdef JUMBO_FRAME - static unsigned char frameBuffer[9000]; - #else - static unsigned char frameBuffer[1600]; - #endif - static unsigned int frameOffset; + unsigned char frameBuffer[9000]; + unsigned int frameOffset; ssize_t bytesSent; frameOffset = 0; uint16_t tmp16; - /********************************************************************/ - /* Fixed start to each frame (allowing heuristic dissector to work) */ - /* Not NULL terminated */ - memset(frameBuffer+frameOffset, 0, sizeof(mac_lte_info)+pdu_buffer_size + 8); - memcpy(frameBuffer+frameOffset, MAC_LTE_START_STRING, strlen(MAC_LTE_START_STRING)); frameOffset += strlen(MAC_LTE_START_STRING); @@ -279,7 +266,7 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, frameOffset += 2; /* Subframe number */ - frameBuffer[frameOffset++] = MAC_LTE_SUBFRAME_TAG; + frameBuffer[frameOffset++] = MAC_LTE_FRAME_SUBFRAME_TAG; tmp16 = htons(sfnSf); // frame counter : this will give an expert info as wireshark expects SF and not F memcpy(frameBuffer+frameOffset, &tmp16, 2); frameOffset += 2; @@ -313,26 +300,29 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, if (pdu_buffer_size==0) { switch (oob_event) { case ltemac_send_preamble : - LOG_D(OPT,"oob ltemac_send_preamble event %02x." + LOG_D(OPT,"ltemac_send_preamble event %02x." //"%02x." "%02x.%02x\n", - MAC_LTE_OOB_EVENT_TAG, + MAC_LTE_SEND_PREAMBLE_TAG, //ltemac_send_preamble, rnti, oob_event_value); //frameBuffer[frameOffset++]=0; //frameBuffer[frameOffset++]=0; //frameBuffer[frameOffset++]=0; - frameBuffer[frameOffset++] = MAC_LTE_OOB_EVENT_TAG; + frameBuffer[frameOffset++] = MAC_LTE_SEND_PREAMBLE_TAG; //frameBuffer[frameOffset++]=ltemac_send_preamble; frameBuffer[frameOffset++]=rnti; // is the preamble frameBuffer[frameOffset++]=oob_event_value; break; case ltemac_send_sr: - frameBuffer[frameOffset++]=ltemac_send_sr; + frameBuffer[frameOffset++]=MAC_LTE_SR_TAG ; frameOffset+=2; + frameBuffer[frameOffset++]=rnti; + frameOffset++; frameBuffer[frameOffset++]=oob_event_value; + frameOffset++; break; case ltemac_sr_failure: @@ -394,7 +384,7 @@ static int MAC_LTE_PCAP_WritePDU(MAC_Context_Info_t *context, offset += 2; /* Subframe number */ - context_header[offset++] = MAC_LTE_SUBFRAME_TAG; + context_header[offset++] = MAC_LTE_FRAME_SUBFRAME_TAG; tmp16 = htons(context->subFrameNumber); memcpy(context_header+offset, &tmp16, 2); offset += 2; @@ -423,21 +413,27 @@ static int MAC_LTE_PCAP_WritePDU(MAC_Context_Info_t *context, return 1; } - +#include +extern RAN_CONTEXT_t RC; +#include /* Remote serveraddress (where Wireshark is running) */ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, int ueid, int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event, int oob_event_value) { MAC_Context_Info_t pdu_context; - + int radioType=FDD_RADIO; + if (RC.eNB[0][0]!=NULL) + radioType=RC.eNB[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO; + if (PHY_vars_UE_g[0][0] != NULL) + radioType=PHY_vars_UE_g[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO; switch (opt_type) { case OPT_WIRESHARK : if (g_socksd == -1) { return; } - SendFrame(radio_type, + SendFrame( radioType, (direction == DIRECTION_DOWNLINK) ? DIRECTION_DOWNLINK : DIRECTION_UPLINK, rntiType, rnti, ueid, (sysFrameNumber<<4) + subFrameNumber, 1, 0, 1, //guint8 isPredefinedData, guint8 retx, guint8 crcStatus @@ -450,7 +446,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, return; } - pdu_context.radioType = radio_type; + pdu_context.radioType = radioType; pdu_context.direction = (direction == DIRECTION_DOWNLINK) ? DIRECTION_DOWNLINK : DIRECTION_UPLINK; pdu_context.rntiType = rntiType; @@ -470,7 +466,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, } } /*---------------------------------------------------*/ -int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p) +int init_opt(char *path, char *ip) { uint16_t in_port; subframesSinceCaptureStart = 0; @@ -489,13 +485,7 @@ int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p) strcpy( in_ip, "127.0.0.1" ); } - if (port != NULL) { - in_port = atoi(port); - } else { - in_port = PACKET_MAC_LTE_DEFAULT_UDP_PORT; - } - - radio_type = radio_type_p; + in_port = PACKET_MAC_LTE_DEFAULT_UDP_PORT; // trace_mode switch (opt_type) { diff --git a/openair2/UTIL/OPT/ws_compiler_tests.h b/openair2/UTIL/OPT/ws_compiler_tests.h new file mode 100644 index 0000000000..46a4ab6099 --- /dev/null +++ b/openair2/UTIL/OPT/ws_compiler_tests.h @@ -0,0 +1,138 @@ +/* ws_compiler_tests.h + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef __WS_COMPILER_TESTS_H__ +#define __WS_COMPILER_TESTS_H__ + +/* + * This was introduced by Clang: + * + * http://clang.llvm.org/docs/LanguageExtensions.html#has-attribute + * + * in some version (which version?); it has been picked up by GCC 5.0. + */ +#ifndef __has_attribute + /* + * It's a macro, so you can check whether it's defined to check + * whether it's supported. + * + * If it's not, define it to always return 0, so that we move on to + * the fallback checks. + */ + #define __has_attribute(x) 0 +#endif + +/* + * Note that the C90 spec's "6.8.1 Conditional inclusion" and the + * C99 spec's and C11 spec's "6.10.1 Conditional inclusion" say: + * + * Prior to evaluation, macro invocations in the list of preprocessing + * tokens that will become the controlling constant expression are + * replaced (except for those macro names modified by the defined unary + * operator), just as in normal text. If the token "defined" is + * generated as a result of this replacement process or use of the + * "defined" unary operator does not match one of the two specified + * forms prior to macro replacement, the behavior is undefined. + * + * so you shouldn't use defined() in a #define that's used in #if or + * #elif. Some versions of Clang, for example, will warn about this. + * + * Instead, we check whether the pre-defined macros for particular + * compilers are defined and, if not, define the "is this version XXX + * or a later version of this compiler" macros as 0. + */ + +/* + * Check whether this is GCC major.minor or a later release, or some + * compiler that claims to be "just like GCC" of that version or a + * later release. + */ + +#if !defined(__GNUC__) + #define WS_IS_AT_LEAST_GNUC_VERSION(major, minor) 0 +#else + #define WS_IS_AT_LEAST_GNUC_VERSION(major, minor) \ + (__GNUC__ > (major) || \ + (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))) +#endif + +/* + * Check whether this is Clang major.minor or a later release. + */ + +#if !defined(__clang__) + #define WS_IS_AT_LEAST_CLANG_VERSION(major, minor) 0 +#else + #define WS_IS_AT_LEAST_CLANG_VERSION(major, minor) \ + (__clang_major__ > (major) || \ + (__clang_major__ == (major) && __clang_minor__ >= (minor))) +#endif + +/* + * Check whether this is Sun C/SunPro C/Oracle Studio major.minor + * or a later release. + * + * The version number in __SUNPRO_C is encoded in hex BCD, with the + * uppermost hex digit being the major version number, the next + * one or two hex digits being the minor version number, and + * the last digit being the patch version. + * + * It represents the *compiler* version, not the product version; + * see + * + * https://sourceforge.net/p/predef/wiki/Compilers/ + * + * for a partial mapping, which we assume continues for later + * 12.x product releases. + */ + +#if !defined(__SUNPRO_C) + #define WS_IS_AT_LEAST_SUNC_VERSION(major, minor) 0 +#else + #define WS_SUNPRO_VERSION_TO_BCD(major, minor) \ + (((minor) >= 10) ? \ + (((major) << 12) | (((minor)/10) << 8) | (((minor)%10) << 4)) : \ + (((major) << 8) | ((minor) << 4))) + #define WS_IS_AT_LEAST_SUNC_VERSION(major, minor) \ + (__SUNPRO_C >= WS_SUNPRO_VERSION_TO_BCD((major), (minor))) +#endif + +/* + * Check whether this is IBM XL C major.minor or a later release. + * + * The version number in __xlC__ has the major version in the + * upper 8 bits and the minor version in the lower 8 bits. + */ + +#if !defined(__xlC__) + #define WS_IS_AT_LEAST_XL_C_VERSION(major, minor) 0 +#else + #define WS_IS_AT_LEAST_XL_C_VERSION(major, minor) \ + (__xlC__ >= (((major) << 8) | (minor))) +#endif + +/* + * Check whether this is HP aC++/HP C major.minor or a later release. + * + * The version number in __HP_aCC is encoded in zero-padded decimal BCD, + * with the "A." stripped off, the uppermost two decimal digits being + * the major version number, the next two decimal digits being the minor + * version number, and the last two decimal digits being the patch version. + * (Strip off the A., remove the . between the major and minor version + * number, and add two digits of patch.) + */ + +#if !defined(__HP_aCC) + #define WS_IS_AT_LEAST_HP_C_VERSION(major, minor) 0 +#else + #define WS_IS_AT_LEAST_HP_C_VERSION(major, minor) \ + (__HP_aCC >= ((major)*10000 + (minor)*100)) +#endif + +#endif /* __WS_COMPILER_TESTS_H__ */ diff --git a/openair2/UTIL/OPT/ws_symbol_export.h b/openair2/UTIL/OPT/ws_symbol_export.h new file mode 100644 index 0000000000..4c7a2f710a --- /dev/null +++ b/openair2/UTIL/OPT/ws_symbol_export.h @@ -0,0 +1,202 @@ +/* + * Cross platform defines for exporting symbols from shared libraries + * + * Wireshark - Network traffic analyzer + * By Balint Reczey + * Copyright 2013 Balint Reczey + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "ws_compiler_tests.h" + +/** Reset symbol export behavior. + * If you {un}define WS_BUILD_DLL on the fly you'll have to define this + * as well. + */ +#ifdef RESET_SYMBOL_EXPORT + +#ifdef SYMBOL_EXPORT_H +#undef SYMBOL_EXPORT_H +#endif + +#ifdef WS_DLL_PUBLIC +#undef WS_DLL_PUBLIC +#endif + +#ifdef WS_DLL_PUBLIC_DEF +#undef WS_DLL_PUBLIC_DEF +#endif + +#ifdef WS_DLL_LOCAL +#undef WS_DLL_LOCAL +#endif + +#endif /* RESET_SYMBOL_EXPORT */ + +#ifndef SYMBOL_EXPORT_H +#define SYMBOL_EXPORT_H + +/* + * NOTE: G_HAVE_GNUC_VISIBILITY is defined only if all of + * + * __attribute__ ((visibility ("hidden"))) + * + * __attribute__ ((visibility ("internal"))) + * + * __attribute__ ((visibility ("protected"))) + * + * __attribute__ ((visibility ("default"))) + * + * are supported, and at least some versions of GCC from Apple support + * "default" and "hidden" but not "internal" or "protected", so it + * shouldn't be used to determine whether "hidden" or "default" is + * supported. + * + * This also means that we shouldn't use G_GNUC_INTERNAL instead of + * WS_DLL_LOCAL, as GLib uses G_HAVE_GNUC_VISIBILITY to determine + * whether to use __attribute__ ((visibility ("hidden"))) for + * G_GNUC_INTERNAL, and that will not use it even with compilers + * that support it. + */ + +/* Originally copied from GCC Wiki at http://gcc.gnu.org/wiki/Visibility */ +#if defined _WIN32 || defined __CYGWIN__ + /* Compiling for Windows, so we use the Windows DLL declarations. */ + #ifdef WS_BUILD_DLL + /* + * Building a DLL; for all definitions, we want dllexport, and + * (presumably so source from DLL and source from a program using the + * DLL can both include a header that declares APIs and exported data + * for the DLL), for declarations, either dllexport or dllimport will + * work (they mean the same thing for a declaration when building a DLL). + */ + #ifdef __GNUC__ + /* GCC */ + #define WS_DLL_PUBLIC_DEF __attribute__ ((dllexport)) + #else /* ! __GNUC__ */ + /* + * Presumably MSVC. + * Note: actually gcc seems to also support this syntax. + */ + #define WS_DLL_PUBLIC_DEF __declspec(dllexport) + #endif /* __GNUC__ */ + #else /* WS_BUILD_DLL */ + /* + * Building a program; we should only see declarations, not definitions, + * with WS_DLL_PUBLIC, and they all represent APIs or data imported + * from a DLL, so use dllimport. + * + * For functions, export shouldn't be necessary; for data, it might + * be necessary, e.g. if what's declared is an array whose size is + * not given in the declaration. + */ + #ifdef __GNUC__ + /* GCC */ + #define WS_DLL_PUBLIC_DEF __attribute__ ((dllimport)) + #elif ! (defined ENABLE_STATIC) /* ! __GNUC__ */ + /* + * Presumably MSVC, and we're not building all-static. + * Note: actually gcc seems to also support this syntax. + */ + #define WS_DLL_PUBLIC_DEF __declspec(dllimport) + #else /* ! __GNUC__ && ENABLE_STATIC */ + /* + * Presumably MSVC, and we're building all-static, so we're + * not building any DLLs. + */ + #define WS_DLL_PUBLIC_DEF + #endif /* __GNUC__ */ + #endif /* WS_BUILD_DLL */ + + /* + * Symbols in a DLL are *not* exported unless they're specifically + * flagged as exported, so, for a non-static but non-exported + * symbol, we don't have to do anything. + */ + #define WS_DLL_LOCAL +#else /* defined _WIN32 || defined __CYGWIN__ */ + /* + * Compiling for UN*X, where the dllimport and dllexport stuff + * is neither necessary nor supported; just specify the + * visibility if we have a compiler that supports doing so. + */ + #if WS_IS_AT_LEAST_GNUC_VERSION(3,4) \ + || WS_IS_AT_LEAST_XL_C_VERSION(12,0) + /* + * GCC 3.4 or later, or some compiler asserting compatibility with + * GCC 3.4 or later, or XL C 13.0 or later, so we have + * __attribute__((visibility()). + */ + + /* + * Symbols exported from libraries. + */ + #define WS_DLL_PUBLIC_DEF __attribute__ ((visibility ("default"))) + + /* + * Non-static symbols *not* exported from libraries. + */ + #define WS_DLL_LOCAL __attribute__ ((visibility ("hidden"))) + #elif WS_IS_AT_LEAST_SUNC_VERSION(5,5) + /* + * Sun C 5.5 or later, so we have __global and __hidden. + * (Sun C 5.9 and later also have __attribute__((visibility()), + * but there's no reason to prefer it with Sun C.) + */ + + /* + * Symbols exported from libraries. + */ + #define WS_DLL_PUBLIC_DEF __global + + /* + * Non-static symbols *not* exported from libraries. + */ + #define WS_DLL_LOCAL __hidden + #else + /* + * We have neither a way to make stuff not explicitly marked as + * visible invisible outside a library nor a way to make stuff + * explicitly marked as local invisible outside the library. + */ + + /* + * Symbols exported from libraries. + */ + #define WS_DLL_PUBLIC_DEF + + /* + * Non-static symbols *not* exported from libraries. + */ + #define WS_DLL_LOCAL + #endif +#endif + +/* + * You *must* use this for exported data *declarations*; if you use + * WS_DLL_PUBLIC_DEF, some compilers, such as MSVC++, will complain + * about array definitions with no size. + * + * You must *not* use this for exported data *definitions*, as that + * will, for some compilers, cause warnings about items being initialized + * and declared extern. + * + * Either can be used for exported *function* declarations and definitions. + */ +#define WS_DLL_PUBLIC WS_DLL_PUBLIC_DEF extern + +#endif /* SYMBOL_EXPORT_H */ + +/* + * Editor modelines - http://www.wireshark.org/tools/modelines.html + * + * Local Variables: + * c-basic-offset: 2 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * vi: set shiftwidth=2 tabstop=8 expandtab: + * :indentSize=2:tabSize=8:noTabs=true: + */ diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index e84f99e67f..628bcc1bee 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -975,14 +975,7 @@ int main( int argc, char **argv ) #endif if (opt_type != OPT_NONE) { - radio_type_t radio_type; - - if (frame_parms[0]->frame_type == FDD) - radio_type = RADIO_TYPE_FDD; - else - radio_type = RADIO_TYPE_TDD; - - if (init_opt(in_path, in_ip, NULL, radio_type) == -1) + if (init_opt(in_path, in_ip) == -1) LOG_E(OPT,"failed to run OPT \n"); } diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index a2a12f9dd9..ce18ca7456 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -862,14 +862,7 @@ int main( int argc, char **argv ) #endif if (opt_type != OPT_NONE) { - radio_type_t radio_type; - - if (frame_parms[0]->frame_type == FDD) - radio_type = RADIO_TYPE_FDD; - else - radio_type = RADIO_TYPE_TDD; - - if (init_opt(in_path, in_ip, NULL, radio_type) == -1) + if (init_opt(in_path, in_ip) == -1) LOG_E(OPT,"failed to run OPT \n"); } From 3b3b97180709a6893dd9501665c5a5016b122ad9 Mon Sep 17 00:00:00 2001 From: Konstantinos Alexandris Date: Thu, 23 Aug 2018 16:15:14 +0200 Subject: [PATCH 093/128] minor fixes for x2 + modify conf files The configuration file has now to contain ENB_IPV4_ADDRESS_FOR_X2C and ENB_PORT_FOR_X2C in the NETWORK_INTERFACES section. For example: NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; --- .../enb.band7.tm1.100PRB.usrpb210.conf | 4 +++- .../enb.band7.tm1.25PRB.usrpb210.conf | 4 +++- .../enb.band7.tm1.50PRB.usrpb210.conf | 4 +++- .../enb.band38.tm1.usrpb210.tdd.10MHz.conf | 4 +++- .../enb.band38.tm1.usrpb210.tdd.20MHz.conf | 4 +++- .../enb.band38.tm1.usrpb210.tdd.5MHz.conf | 4 +++- .../enb.band7.tm1.usrpb210.fdd.10MHz.conf | 4 +++- .../enb.band7.tm1.usrpb210.fdd.20MHz.conf | 4 +++- .../enb.band7.tm1.usrpb210.fdd.5MHz.conf | 4 +++- .../v2/config/rcc.band7.tm1.if4p5.10MHz.conf | 4 +++- .../v2/config/rcc.band7.tm1.if4p5.20MHz.conf | 4 +++- .../v2/config/rcc.band7.tm1.if4p5.5MHz.conf | 4 +++- ...rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf | 4 +++- ...rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf | 4 +++- .../rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf | 4 +++- openair2/COMMON/x2ap_messages_types.h | 3 +++ openair2/ENB_APP/enb_config.c | 7 +++++++ openair2/ENB_APP/enb_paramdef.h | 18 +++--------------- .../CONF/enb.centos.calisson.conf | 3 +++ .../CONF/enb.centos.memphis.conf | 3 +++ .../CONF/enb.centos.nord.conf | 3 +++ .../CONF/enb.band38.tm1.100PRB.usrpx310.conf | 3 +++ .../CONF/enb.band38.tm1.usrpx310.conf | 3 +++ .../CONF/enb.band7.tm1.100PRB.usrpx310.conf | 4 +++- .../enb.band7.tm1.25PRB.usrpb210.replay.conf | 4 +++- .../CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf | 6 +++--- .../CONF/enb.band7.tm1.50PRB.usrpb210.conf | 4 +++- ....band7.tm1.50PRB.usrpb210_ue_expansion.conf | 4 +++- .../CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf | 4 +++- .../CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf | 4 +++- .../CONF/rcc.band7.tm1.50PRB.nfapi.conf | 4 +++- .../CONF/rcc.band7.tm1.if4p5.50PRB.conf | 4 +++- .../CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf | 4 +++- 33 files changed, 103 insertions(+), 42 deletions(-) diff --git a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf index 2bd28a60df..633b3c091a 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf @@ -183,12 +183,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf index 102fc89a13..e0c5f757cf 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf @@ -183,12 +183,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf index fe6e2f0b59..af54f439f4 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf @@ -183,12 +183,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf index e2ea056ea1..08eb76e09d 100644 --- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth6"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth6"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; log_config : diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf index b2ac3ccf42..eff42040ad 100644 --- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth6"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth6"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; log_config : diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf index 006d59d2a5..8eb66d4643 100644 --- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth6"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth6"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; log_config : diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf index 8c76d95d4c..dc3b3bc4f0 100644 --- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; log_config : diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf index 0d2bb27dcc..6af71831f5 100644 --- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; log_config : diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf index c418f355f2..077b6e4ead 100644 --- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf +++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; log_config : diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf index 89e06d2b1e..e2f5981418 100644 --- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf +++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; rrh_gw_config = ( diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf index c8e6c861e0..9e08414ab3 100644 --- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf +++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; rrh_gw_config = ( diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf index cc00f4f3ea..2a598c31d3 100644 --- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf +++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf @@ -146,12 +146,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; rrh_gw_config = ( diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf index 6e1e776fed..4966108d03 100644 --- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf +++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf @@ -148,12 +148,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth3"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth3"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; rrh_gw_config = ( diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf index 7e7c3c185d..4f3b25349a 100644 --- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf +++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf @@ -148,12 +148,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth3"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth3"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; rrh_gw_config = ( diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf index 3098660c8d..54e5a327cd 100644 --- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf +++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf @@ -148,12 +148,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth3"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth3"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; rrh_gw_config = ( diff --git a/openair2/COMMON/x2ap_messages_types.h b/openair2/COMMON/x2ap_messages_types.h index d3c324a35c..6c4031b981 100644 --- a/openair2/COMMON/x2ap_messages_types.h +++ b/openair2/COMMON/x2ap_messages_types.h @@ -87,6 +87,9 @@ typedef struct x2ap_register_enb_req_s { /* Number of SCTP streams used for associations */ uint16_t sctp_in_streams; uint16_t sctp_out_streams; + + /* eNB port for X2C*/ + uint32_t enb_port_for_X2C; } x2ap_register_enb_req_t; //-------------------------------------------------------------------------------------------// diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 7591bc3d07..a275d0c766 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -2549,6 +2549,13 @@ int RCconfig_X2(MessageDef *msg_p, uint32_t i) // NETWORK_INTERFACES config_get( NETParams,sizeof(NETParams)/sizeof(paramdef_t),aprefix); + X2AP_REGISTER_ENB_REQ (msg_p).enb_port_for_X2C = (uint32_t)*(NETParams[ENB_PORT_FOR_X2C_IDX].uptr); + + if ((NETParams[ENB_IPV4_ADDR_FOR_X2C_IDX].strptr == NULL) || (X2AP_REGISTER_ENB_REQ (msg_p).enb_port_for_X2C == 0)) { + LOG_E(RRC,"Add eNB IPv4 address and/or port for X2C in the CONF file!\n"); + exit(1); + } + cidr = *(NETParams[ENB_IPV4_ADDR_FOR_X2C_IDX].strptr); address = strtok(cidr, "/"); diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h index 71d7d634c0..c540e63db1 100755 --- a/openair2/ENB_APP/enb_paramdef.h +++ b/openair2/ENB_APP/enb_paramdef.h @@ -760,12 +760,8 @@ typedef enum { #define ENB_INTERFACE_NAME_FOR_S1U_IDX 2 #define ENB_IPV4_ADDR_FOR_S1U_IDX 3 #define ENB_PORT_FOR_S1U_IDX 4 -#define ENB_INTERFACE_NAME_FOR_X2C 5 -#define ENB_IPV4_ADDR_FOR_X2C_IDX 6 -#define ENB_PORT_FOR_X2C 7 -#define ENB_INTERFACE_NAME_FOR_X2U 8 -#define ENB_IPV4_ADDR_FOR_X2U 9 -#define ENB_PORT_FOR_X2U 10 +#define ENB_IPV4_ADDR_FOR_X2C_IDX 5 +#define ENB_PORT_FOR_X2C_IDX 6 /* S1 interface configuration parameters names */ #define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME "ENB_INTERFACE_NAME_FOR_S1_MME" @@ -775,12 +771,8 @@ typedef enum { #define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U" /* X2 interface configuration parameters names */ -#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_X2C "ENB_INTERFACE_NAME_FOR_X2C" #define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C "ENB_IPV4_ADDRESS_FOR_X2C" #define ENB_CONFIG_STRING_ENB_PORT_FOR_X2C "ENB_PORT_FOR_X2C" -#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_X2U "ENB_INTERFACE_NAME_FOR_X2U" -#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2U "ENB_IPV4_ADDRESS_FOR_X2U" -#define ENB_CONFIG_STRING_ENB_PORT_FOR_X2U "ENB_PORT_FOR_X2U" /*--------------------------------------------------------------------------------------------------------------------------------------------------*/ /* S1/X2 interface configuration parameters */ @@ -792,12 +784,8 @@ typedef enum { {ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_ENB_PORT_FOR_S1U, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0}, \ -{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_X2C, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ -{ENB_CONFIG_STRING_ENB_PORT_FOR_X2C, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0}, \ -{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_X2U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ -{ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ -{ENB_CONFIG_STRING_ENB_PORT_FOR_X2U, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0} \ +{ENB_CONFIG_STRING_ENB_PORT_FOR_X2C, NULL, 0, uptr:NULL, defintval:0L, TYPE_UINT, 0}, \ } diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf index 09406d98cf..7ec670d568 100755 --- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf +++ b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf @@ -47,6 +47,9 @@ eNBs = ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.13.10/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf index 47c12a7926..e3a0ea3c56 100755 --- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf +++ b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf @@ -59,6 +59,9 @@ eNBs = ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.13.10/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; # available options for level: error, warn, notice, info, debug, trace # available options for verbosity: none, low, medium, high, full diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf index 4360884c1d..591257ff71 100755 --- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf +++ b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf @@ -46,6 +46,9 @@ eNBs = ENB_INTERFACE_NAME_FOR_S1U = "eth1"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.13.10/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf index 73da2a8b3f..bec9c2c6dd 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf @@ -151,6 +151,9 @@ eNBs = ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; log_config : diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf index bd0503a466..834b6cf044 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf @@ -151,6 +151,9 @@ eNBs = ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; log_config : diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf index 9a2ca88257..6b3614f490 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -149,12 +149,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth6"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth6"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf index 99df987b43..fb184549c5 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf @@ -183,12 +183,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "lo"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; ENB_INTERFACE_NAME_FOR_S1U = "lo"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.13.10/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf index 7d73e55c6c..c6ace3b68f 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf @@ -183,14 +183,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "lo"; ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.4/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 - - + + ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf index 69166672d7..c2f10e20ae 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf @@ -183,12 +183,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf index 1197c4ad93..e46467598e 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf @@ -150,12 +150,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf index c4d23bac42..a6efe74283 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf @@ -152,12 +152,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "lo"; ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24"; ENB_INTERFACE_NAME_FOR_S1U = "lo"; ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf index 71a163209d..fefb4b11de 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf @@ -153,12 +153,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "vboxnet0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.56.1/24"; ENB_INTERFACE_NAME_FOR_S1U = "vboxnet0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.56.1/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.56.1/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf index a6da42c2f5..cd21fb935e 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf @@ -183,12 +183,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "lo"; ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24"; ENB_INTERFACE_NAME_FOR_S1U = "lo"; ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf index 550de4e1a2..581012d7d3 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf @@ -152,12 +152,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf index 2b5a0ca684..5f9f8c4d7b 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf @@ -151,12 +151,14 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "lo"; ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24"; ENB_INTERFACE_NAME_FOR_S1U = "lo"; ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); From f65c39022643925c50ca0ab9668f15f784cf204c Mon Sep 17 00:00:00 2001 From: WANG Tsu-Han Date: Thu, 23 Aug 2018 18:34:50 +0200 Subject: [PATCH 094/128] warning removal --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 9 +++------ openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 3 --- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index c8ed5319ed..d924d5117d 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -549,13 +549,10 @@ int allocate_REs_in_RB_no_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB, uint32_t tti_offset; uint8_t re; uint8_t *x0p; - uint8_t first_re,last_re; + uint8_t first_re; - last_re=12; first_re=0; - if (skip_half==1) - last_re=6; - else if (skip_half==2) + if (skip_half==2) first_re=6; re=first_re; @@ -614,7 +611,7 @@ int allocate_REs_in_RB_no_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB, ((int16_t *)&txdataF[0][tti_offset])[16]=qam_table_s0[qam64_table_offset_re]; ((int16_t *)&txdataF[0][tti_offset])[17]=qam_table_s0[qam64_table_offset_im]; - qam64_table_offset_re=(x0p[54]<<2)|(x0p[56]<<1)|x0p[58]; + qam64_table_offset_re=(x0p[54]<<2)|(x0p[56]<<1)|x0p[58]; qam64_table_offset_im=(x0p[55]<<2)|(x0p[57]<<1)|x0p[59]; ((int16_t *)&txdataF[0][tti_offset])[18]=qam_table_s0[qam64_table_offset_re]; ((int16_t *)&txdataF[0][tti_offset])[19]=qam_table_s0[qam64_table_offset_im]; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index 19570c6e10..25a15781ad 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -212,7 +212,6 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s int sched_frame=frameP; int sched_subframe = (subframeP+4)%10; uint16_t ul_req_index; - uint8_t dlsch_flag; if (sched_subframenumber_of_dci++; ul_req_index = 0; - dlsch_flag = 0; for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){ if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){ - dlsch_flag = 1; LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index); break; } From 8b46aea34d7b942aa2a27e073c3a096f425b2968 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 24 Aug 2018 11:57:13 +0200 Subject: [PATCH 095/128] CI: optimization on scripts Signed-off-by: Raphael Defosseux --- .../enb.band7.tm1.100PRB.usrpb210.conf | 2 +- .../enb.band7.tm1.25PRB.usrpb210.conf | 2 +- .../enb.band7.tm1.50PRB.usrpb210.conf | 2 +- ci-scripts/main.py | 18 ++++++++++++++---- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf index 2bd28a60df..4380bd30be 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf @@ -33,7 +33,7 @@ eNBs = tdd_config_s = 0; prefix_type = "NORMAL"; eutra_band = 7; - downlink_frequency = 2685000000L; + downlink_frequency = 2680000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; N_RB_DL = 100; diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf index 102fc89a13..dded9cfdeb 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf @@ -33,7 +33,7 @@ eNBs = tdd_config_s = 0; prefix_type = "NORMAL"; eutra_band = 7; - downlink_frequency = 2685000000L; + downlink_frequency = 2680000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; N_RB_DL = 25; diff --git a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf index fe6e2f0b59..7c4292eb61 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf @@ -33,7 +33,7 @@ eNBs = tdd_config_s = 0; prefix_type = "NORMAL"; eutra_band = 7; - downlink_frequency = 2685000000L; + downlink_frequency = 2680000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; N_RB_DL = 50; diff --git a/ci-scripts/main.py b/ci-scripts/main.py index c453558790..c08db90946 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -308,17 +308,25 @@ class SSHConnection(): loopCounter = loopCounter - 1 if (loopCounter == 0): doLoop = False + # Checking if process is still alive + self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never lte-softmodem', '\$', 5) + result = re.search('lte-softmodem', str(self.ssh.before)) + if result is None: + logging.debug('\u001B[1;37;41m eNB process is already down \u001B[0m') + self.CreateHtmlTestRow('-O ' + config_file + extra_options, 'KO', 0) + self.CreateHtmlFooter() + sys.exit(1) logging.debug('\u001B[1;30;43m eNB logging system did not show got sync! See with attach later \u001B[0m') - self.CreateHtmlTestRow(config_file, 'eNB not showing got sync!', 0) + self.CreateHtmlTestRow('-O ' + config_file + extra_options, 'eNB not showing got sync!', 0) # Not getting got sync is bypassed for the moment #sys.exit(1) - self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log | grep -i sync', '\$', 10) + self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log | grep --color=never -i sync', '\$', 10) result = re.search('got sync', str(self.ssh.before)) if result is None: time.sleep(6) else: doLoop = False - self.CreateHtmlTestRow(config_file, 'OK', 0) + self.CreateHtmlTestRow('-O ' + config_file + extra_options, 'OK', 0) logging.debug('\u001B[1m Initialize eNB Completed\u001B[0m') self.close() @@ -650,6 +658,7 @@ class SSHConnection(): if (status_queue.empty()): self.CreateHtmlTestRow(self.ping_args, 'KO', len(self.UEDevices)) + self.CreateHtmlFooter() sys.exit(1) else: ping_status = True @@ -695,7 +704,7 @@ class SSHConnection(): else: iperf_bandwidth_new = residualBW iperf_bandwidth_str = '-b ' + iperf_bandwidth - iperf_bandwidth_str_new = '-b ' + str(iperf_bandwidth_new) + iperf_bandwidth_str_new = '-b ' + ('%.2f' % iperf_bandwidth_new) result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(self.iperf_args)) if result is None: logging.debug('\u001B[1;37;41m Calculate Iperf bandwidth Failed! \u001B[0m') @@ -1074,6 +1083,7 @@ class SSHConnection(): if (status_queue.empty()): self.CreateHtmlTestRow(self.iperf_args, 'KO', len(self.UEDevices)) + self.CreateHtmlFooter() sys.exit(1) else: iperf_status = True From b5435440cd448f862fb07ab8bf0860922448ac7e Mon Sep 17 00:00:00 2001 From: WANG Tsu-Han Date: Fri, 24 Aug 2018 12:14:51 +0200 Subject: [PATCH 096/128] bug fix for QPSK modulation with pilot --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index d924d5117d..bfdcdc1e94 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -285,8 +285,8 @@ int allocate_REs_in_RB_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB, re<6; x0p+=2) { - qpsk_table_offset_re+=x0p[0]; - qpsk_table_offset_im+=x0p[1]; + qpsk_table_offset_re=x0p[0]; + qpsk_table_offset_im=x0p[1]; ((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re]; ((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im]; tti_offset+=P1_SHIFT[re+1]; @@ -297,8 +297,8 @@ int allocate_REs_in_RB_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB, re<12; x0p+=2) { - qpsk_table_offset_re+=x0p[0]; - qpsk_table_offset_im+=x0p[1]; + qpsk_table_offset_re=x0p[0]; + qpsk_table_offset_im=x0p[1]; ((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re]; ((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im]; tti_offset+=P1_SHIFT[re+1]; From e469680d8049a01bad372238a0b9e95c3aa43403 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 24 Aug 2018 14:37:40 +0200 Subject: [PATCH 097/128] CI: fix in python Signed-off-by: Raphael Defosseux --- ci-scripts/main.py | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index c08db90946..d172d66545 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -300,6 +300,7 @@ class SSHConnection(): self.command('cd cmake_targets', '\$', 5) self.command('echo "./lte_build_oai/build/lte-softmodem -O ' + self.eNBSourceCodePath + '/' + ci_full_config_file + extra_options + '" > ./my-lte-softmodem-run.sh ', '\$', 5) self.command('chmod 775 ./my-lte-softmodem-run.sh ', '\$', 5) + self.command('echo ' + self.eNBPassword + ' | sudo -S rm -Rf enb_' + SSH.testCase_id + '.log', '\$', 5) self.command('echo ' + self.eNBPassword + ' | sudo -S -E daemon --inherit --unsafe --name=enb_daemon --chdir=' + self.eNBSourceCodePath + '/cmake_targets -o ' + self.eNBSourceCodePath + '/cmake_targets/enb_' + SSH.testCase_id + '.log ./my-lte-softmodem-run.sh', '\$', 5) time.sleep(6) doLoop = True @@ -309,26 +310,34 @@ class SSHConnection(): if (loopCounter == 0): doLoop = False # Checking if process is still alive - self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never lte-softmodem', '\$', 5) - result = re.search('lte-softmodem', str(self.ssh.before)) - if result is None: - logging.debug('\u001B[1;37;41m eNB process is already down \u001B[0m') - self.CreateHtmlTestRow('-O ' + config_file + extra_options, 'KO', 0) - self.CreateHtmlFooter() - sys.exit(1) + #self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never lte-softmodem', '\$', 5) + #result = re.search('lte-softmodem', str(self.ssh.before)) + #if result is None: + # self.command('rsync -v enb_' + SSH.testCase_id + '.log enb_' + SSH.testCase_id + '.txt; stdbuf -o0 cat enb_' + SSH.testCase_id + '.log | egrep --color=never -i "segmentation fault"', '\$', 5) + # result = re.search('egmentation fault', str(self.ssh.before)) + # logging.debug('\u001B[1;37;41m eNB process is already down \u001B[0m') + # if result is not None: + # logging.debug('\u001B[1;37;41m Segmentation fault \u001B[0m') + # logging.debug(str(self.ssh.before)) + # self.CreateHtmlTestRow('-O ' + config_file + extra_options, 'KO', 0) + # self.CreateHtmlFooter() + # self.close() + # sys.exit(1) logging.debug('\u001B[1;30;43m eNB logging system did not show got sync! See with attach later \u001B[0m') self.CreateHtmlTestRow('-O ' + config_file + extra_options, 'eNB not showing got sync!', 0) # Not getting got sync is bypassed for the moment #sys.exit(1) - self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log | grep --color=never -i sync', '\$', 10) - result = re.search('got sync', str(self.ssh.before)) - if result is None: - time.sleep(6) else: - doLoop = False - self.CreateHtmlTestRow('-O ' + config_file + extra_options, 'OK', 0) - logging.debug('\u001B[1m Initialize eNB Completed\u001B[0m') + self.command('rsync -v enb_' + SSH.testCase_id + '.log enb_' + SSH.testCase_id + '.txt; stdbuf -o0 cat enb_' + SSH.testCase_id + '.log | grep --color=never -i sync', '\$', 4) + result = re.search('got sync', str(self.ssh.before)) + if result is None: + time.sleep(6) + else: + doLoop = False + self.CreateHtmlTestRow('-O ' + config_file + extra_options, 'OK', 0) + logging.debug('\u001B[1m Initialize eNB Completed\u001B[0m') + self.command('rm -f enb_' + SSH.testCase_id + '.txt', '\$', 5) self.close() def InitializeUE_common(self, device_id): From 79588a494e118178ecf305ce4f3037d911cdaf2e Mon Sep 17 00:00:00 2001 From: frtabu Date: Tue, 14 Aug 2018 14:59:41 +0200 Subject: [PATCH 098/128] LOG_F replaced by LOG_DUMPMSG. Add a generic function to dump a buffer or message. Go on with LOG_M implementation improvement. Remove redundant options to enable/disable logs. --- common/utils/LOG/log.c | 192 ++-- common/utils/LOG/log.h | 114 +- common/utils/load_module_shlib.c | 4 +- common/utils/load_module_shlib.h | 12 +- common/utils/telnetsrv/telnetsrv_proccmd.c | 72 +- common/utils/telnetsrv/telnetsrv_proccmd.h | 12 +- openair1/PHY/LTE_ESTIMATION/lte_sync_time.c | 30 +- openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c | 71 +- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 2 +- openair1/PHY/LTE_TRANSPORT/prach.c | 206 ++-- .../PHY/LTE_TRANSPORT/ulsch_demodulation.c | 93 +- openair1/PHY/TOOLS/lte_dfts.c | 127 ++- openair1/SCHED_UE/phy_procedures_lte_ue.c | 1008 ++++++++--------- openair1/SIMULATION/LTE_PHY/dlsim.c | 21 +- openair1/SIMULATION/LTE_PHY/dlsim_tm4.c | 21 +- openair1/SIMULATION/LTE_PHY/dlsim_tm7.c | 21 +- openair1/SIMULATION/LTE_PHY/ulsim.c | 19 +- openair2/ENB_APP/enb_app.c | 104 +- openair2/ENB_APP/enb_config.c | 158 +-- openair2/ENB_APP/enb_paramdef.h | 18 +- openair2/LAYER2/PDCP_v10.1.0/pdcp.c | 23 +- openair2/RRC/LTE/L2_interface.c | 57 +- openair2/RRC/LTE/L2_interface_ue.c | 6 +- openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c | 18 +- openair2/RRC/LTE/rrc_UE.c | 96 +- openair2/RRC/LTE/rrc_common.c | 1 - openair2/RRC/LTE/rrc_eNB.c | 509 +++------ openair2/RRC/LTE/rrc_eNB_S1AP.c | 10 +- targets/COMMON/create_tasks.c | 4 +- targets/RT/USER/lte-ru.c | 14 +- targets/RT/USER/lte-softmodem.c | 4 +- targets/RT/USER/lte-uesoftmodem.c | 18 +- 32 files changed, 1405 insertions(+), 1660 deletions(-) diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index 02ee849202..0eecd655d1 100644 --- a/common/utils/LOG/log.c +++ b/common/utils/LOG/log.c @@ -54,7 +54,6 @@ mapping log_level_names[] = { {"error", OAILOG_ERR}, - {"file", OAILOG_FILE}, {"warn", OAILOG_WARNING}, {"info", OAILOG_INFO}, {"debug", OAILOG_DEBUG}, @@ -70,18 +69,10 @@ mapping log_options[] = { }; -mapping log_maskmap[] = { - {"prach", DEBUG_PRACH}, - {"RU", DEBUG_RU}, - {"LTEESTIM", DEBUG_LTEESTIM}, - {"ctrlsocket", DEBUG_CTRLSOCKET}, - {"UE_PHYPROC", DEBUG_UE_PHYPROC}, - {"UE_TIMING", UE_TIMING}, - {NULL,-1} -}; +mapping log_maskmap[] = LOG_MASKMAP_INIT; -char *log_level_highlight_start[] = {LOG_RED, LOG_GREEN, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */ -char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */ +char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */ +char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */ int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format) @@ -243,6 +234,7 @@ int write_file_matlab(const char *fname,const char *vname,void *data,int length, /* get log parameters from configuration file */ void log_getconfig(log_t *g_log) { char *gloglevel = NULL; + int consolelog ; int level; @@ -250,7 +242,7 @@ void log_getconfig(log_t *g_log) { paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS]; paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS]; paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)]; - paramdef_t logparams_matlab[sizeof(log_maskmap)/sizeof(mapping)]; + paramdef_t logparams_genfile[sizeof(log_maskmap)/sizeof(mapping)]; int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX); if (ret <0) { @@ -258,6 +250,7 @@ void log_getconfig(log_t *g_log) { return; } +/* set LOG display options (enable/disable color, thread name, level ) */ for(int i=0; idebug_mask = g_log->debug_mask | log_maskmap[i].value; - if (*(logparams_matlab[i].uptr) ) - g_log->matlab_mask = g_log->matlab_mask | log_maskmap[i].value; + if (*(logparams_genfile[i].uptr) ) + g_log->genfile_mask = g_log->genfile_mask | log_maskmap[i].value; } +/* log globally enabled/disabled */ + set_glog_onlinelog(consolelog); } int register_log_component(char *name, char *fext, int compidx) @@ -354,9 +349,8 @@ int computed_compidx=compidx; } if (computed_compidx >= 0 && computed_compidx log_component[computed_compidx].name = strdup(name); - g_log->log_component[computed_compidx].level = LOG_ERR; - g_log->log_component[computed_compidx].interval = 1; - g_log->log_component[computed_compidx].stream = NULL; + g_log->log_component[computed_compidx].savedlevel = LOG_ERR; + g_log->log_component[computed_compidx].stream = stdout; g_log->log_component[computed_compidx].filelog = 0; g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/.%s rounded to ^2 */ sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext); @@ -432,12 +426,9 @@ int logInit (void) g_log->level2string[OAILOG_WARNING] = "W"; // WARNING g_log->level2string[OAILOG_INFO] = "I"; //INFO g_log->level2string[OAILOG_DEBUG] = "D"; // DEBUG - g_log->level2string[OAILOG_FILE] = "F"; // file +// g_log->level2string[OAILOG_FILE] = "F"; // file g_log->level2string[OAILOG_TRACE] = "T"; // TRACE - - g_log->onlinelog = 1; //online log file - g_log->filelog = 0; @@ -446,19 +437,6 @@ int logInit (void) log_getconfig(g_log); - // could put a loop here to check for all comps - for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { - if (g_log->log_component[i].filelog == 1 ) { - g_log->log_component[i].stream = fopen(g_log->log_component[i].filelog_name,"w"); - g_log->log_component[i].fwrite = vfprintf; - } else if (g_log->log_component[i].filelog == 1 ) { - g_log->log_component[i].stream = fopen(g_log->filelog_name,"w"); - g_log->log_component[i].fwrite = vfprintf; - } else if (g_log->onlinelog == 1 ) { - g_log->log_component[i].stream = stdout; - g_log->log_component[i].fwrite = vfprintf; - } - } // set all unused component items to 0, they are for non predefined components for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { @@ -470,8 +448,6 @@ int logInit (void) } - - char *log_getthreadname(char *threadname, int bufsize) { int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ; @@ -506,27 +482,58 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, int le ( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""), format); - g_log->log_component[comp].fwrite(g_log->log_component[comp].stream,log_buffer, args); + g_log->log_component[comp].vprint(g_log->log_component[comp].stream,log_buffer, args); va_end(args); } +void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... ) { +va_list args; +char *wbuf; + switch(datatype) { + case LOG_DUMP_DOUBLE: + wbuf=malloc((buffsize * 10) + 64 ); + break; + case LOG_DUMP_CHAR: + default: + wbuf=malloc((buffsize * 3 ) + 64 ); + break; + } + va_start(args, format); + g_log->log_component[component].vprint(g_log->log_component[component].stream,format, args); + va_end(args); + if (wbuf != NULL) { + int pos=0; + for (int i=0; ilog_component[component].print(g_log->log_component[component].stream,wbuf); + free(wbuf); + } +} -int set_log(int component, int level, int interval) +int set_log(int component, int level) { /* Checking parameters */ DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS), component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS); DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_ERR), level, NUM_LOG_LEVEL, OAILOG_ERR); - DevCheck((interval >= 0) && (interval <= 0xFF), interval, 0, 0xFF); + g_log->log_component[component].level = level; - - - g_log->log_component[component].interval = interval; + g_log->log_component[component].savedlevel = level; return 0; } @@ -536,32 +543,67 @@ int set_log(int component, int level, int interval) void set_glog(int level) { for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) { - g_log->log_component[c].level = level; + set_log(c, level); } } void set_glog_onlinelog(int enable) { - g_log->onlinelog = enable; + for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) { + if ( enable ) { + g_log->log_component[c].level = g_log->log_component[c].savedlevel; + g_log->log_component[c].vprint = vfprintf; + g_log->log_component[c].print = fprintf; + g_log->log_component[c].stream = stdout; + } else { + g_log->log_component[c].level = -1; + } + } } void set_glog_filelog(int enable) { - g_log->filelog = enable; +static FILE *fptr; + + if ( enable ) { + fptr = fopen(g_log->filelog_name,"w"); + + for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) { + close_component_filelog(c); + g_log->log_component[c].stream = fptr; + g_log->log_component[c].filelog = 1; + } + } else { + for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) { + g_log->log_component[c].filelog = 0; + if (fptr != NULL) { + fclose(fptr); + } + g_log->log_component[c].stream = stdout; + } + } } void set_component_filelog(int comp) { - if (g_log->log_component[comp].filelog == 0) { - g_log->log_component[comp].filelog = 1; - - if (g_log->log_component[comp].stream == NULL) { + if (g_log->log_component[comp].stream == NULL || g_log->log_component[comp].stream == stdout) { g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w"); } - } + g_log->log_component[comp].vprint = vfprintf; + g_log->log_component[comp].print = fprintf; + g_log->log_component[comp].filelog = 1; +} +void close_component_filelog(int comp) +{ + g_log->log_component[comp].filelog = 0; + if (g_log->log_component[comp].stream != NULL && g_log->log_component[comp].stream != stdout ) { + fclose(g_log->log_component[comp].stream); + g_log->log_component[comp].stream = stdout; + } + g_log->log_component[comp].vprint = vfprintf; + g_log->log_component[comp].print = fprintf; + } - - /* * for the two functions below, the passed array must have a final entry @@ -616,15 +658,13 @@ int is_newline( char *str, int size) void logClean (void) { int i; - LOG_I(PHY,"\n"); + LOG_UI(PHY,"\n"); for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { - if (g_log->log_component[i].stream != NULL) { - fclose(g_log->log_component[i].stream); - } + close_component_filelog(i); } } @@ -650,8 +690,8 @@ int test_log(void) LOG_D(MAC, "1 debug MAC \n"); LOG_W(MAC, "1 warning MAC \n"); - set_log(EMU, OAILOG_INFO, FLAG_ONLINE); - set_log(MAC, OAILOG_WARNING, 0); + set_log(EMU, OAILOG_INFO); + set_log(MAC, OAILOG_WARNING); LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); @@ -661,7 +701,7 @@ int test_log(void) LOG_I(MAC, "2 info MAC \n"); - set_log(MAC, OAILOG_NOTICE, 1); + set_log(MAC, OAILOG_NOTICE); LOG_ENTER(MAC); LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n", @@ -670,8 +710,8 @@ int test_log(void) LOG_W(MAC, "3 warning MAC \n"); LOG_I(MAC, "3 info MAC \n"); - set_log(MAC, LOG_DEBUG,1); - set_log(EMU, LOG_DEBUG,1); + set_log(MAC, LOG_DEBUG); + set_log(EMU, LOG_DEBUG); LOG_ENTER(MAC); LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n", @@ -681,8 +721,8 @@ int test_log(void) LOG_I(MAC, "4 info MAC \n"); - set_log(MAC, LOG_DEBUG,0); - set_log(EMU, LOG_DEBUG,0); + set_log(MAC, LOG_DEBUG); + set_log(EMU, LOG_DEBUG); LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); @@ -691,8 +731,8 @@ int test_log(void) LOG_I(MAC, "5 info MAC \n"); - set_log(MAC, LOG_TRACE,0X07F); - set_log(EMU, LOG_TRACE,0X07F); + set_log(MAC, LOG_TRACE); + set_log(EMU, LOG_TRACE); LOG_ENTER(MAC); LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n", diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index 4a0552d494..7b2764b30c 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -83,11 +83,10 @@ extern "C" { * @{*/ # define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */ -# define OAILOG_FILE 1 /*!< \brief important informational messages, but everything OK */ -# define OAILOG_WARNING 2 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */ -# define OAILOG_INFO 3 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */ -# define OAILOG_DEBUG 4 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */ -# define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/ +# define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */ +# define OAILOG_INFO 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */ +# define OAILOG_DEBUG 3 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */ +# define OAILOG_TRACE 4 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/ #define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG */ /* @}*/ @@ -128,21 +127,47 @@ extern "C" { /** @defgroup macros to identify a debug entity * @ingroup each macro is a bit mask where the unique bit set identifies an entity to be debugged - * it allows to dynamically activate or not blocks of code + * it allows to dynamically activate or not blocks of code. The LOG_MASKMAP_INIT macro + * is used to map a character string name to each debug bit, it allows to set or clear + * the corresponding bit via the defined name, from the configuration or from the telnet + * server. * @brief * @{*/ #define DEBUG_PRACH (1<<0) #define DEBUG_RU (1<<1) #define DEBUG_UE_PHYPROC (1<<2) #define DEBUG_LTEESTIM (1<<3) +#define DEBUG_DLCELLSPEC (1<<4) +#define DEBUG_ULSCH (1<<5) +#define DEBUG_RRC (1<<6) +#define DEBUG_PDCP (1<<7) +#define DEBUG_DFT (1<<8) #define DEBUG_CTRLSOCKET (1<<10) #define UE_TIMING (1<<20) -#define SET_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask | O) -#define CLEAR_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask & (~O)) -#define SET_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask | O) -#define CLEAR_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask & (~O)) +#define LOG_MASKMAP_INIT {\ + {"PRACH", DEBUG_PRACH},\ + {"RU", DEBUG_RU},\ + {"LTEESTIM", DEBUG_LTEESTIM},\ + {"CTRLSOCKET", DEBUG_CTRLSOCKET},\ + {"UE_PHYPROC", DEBUG_UE_PHYPROC},\ + {"DLCELLSPEC", DEBUG_DLCELLSPEC},\ + {"ULSCH", DEBUG_ULSCH},\ + {"RRC", DEBUG_RRC},\ + {"PDCP", DEBUG_PDCP},\ + {"DFT", DEBUG_DFT},\ + {"UE_TIMING", UE_TIMING},\ + {NULL,-1}\ +} + + + +#define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B) +#define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B)) + +#define SET_LOG_DUMP(B) g_log->genfile_mask = (g_log->genfile_mask | B) +#define CLEAR_LOG_DUMP(B) g_log->genfile_mask = (g_log->genfile_mask & (~B)) @@ -199,17 +224,18 @@ typedef struct { int value; /*!< \brief integer value of mapping */ } mapping; -typedef int(*log_write_func_t)(FILE *stream, const char *format, va_list ap ); - +typedef int(*log_vprint_func_t)(FILE *stream, const char *format, va_list ap ); +typedef int(*log_print_func_t)(FILE *stream, const char *format, ... ); typedef struct { - const char *name; - int level; - int flag; - int interval; - int filelog; - char *filelog_name; - FILE *stream; - log_write_func_t fwrite; + const char *name; + int level; + int savedlevel; + int flag; + int filelog; + char *filelog_name; + FILE *stream; + log_vprint_func_t vprint; + log_print_func_t print; /* SR: make the log buffer component relative */ char log_buffer[MAX_LOG_TOTAL]; } log_component_t; @@ -218,12 +244,10 @@ typedef struct { typedef struct { log_component_t log_component[MAX_LOG_COMPONENTS]; char* level2string[NUM_LOG_LEVEL]; - int onlinelog; int flag; - int filelog; char* filelog_name; uint64_t debug_mask; - uint64_t matlab_mask; + uint64_t genfile_mask; } log_t; @@ -254,14 +278,15 @@ extern log_t *g_log; /*----------------------------------------------------------------------------*/ int logInit (void); void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7))); - -int set_log(int component, int level, int interval); +void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... ); +int set_log(int component, int level); void set_glog(int level); void set_glog_onlinelog(int enable); void set_glog_filelog(int enable); void set_component_filelog(int comp); - +void close_component_filelog(int comp); +void set_component_consolelog(int comp); int map_str_to_int(mapping *map, const char *str); char *map_int_to_str(mapping *map, int val); void logClean (void); @@ -293,7 +318,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int #define LOG_CONFIG_LEVEL_FORMAT "%s_log_level" #define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile" #define LOG_CONFIG_DEBUG_FORMAT "%s_debug" -#define LOG_CONFIG_MATLAB_FORMAT "%s_matlab" +#define LOG_CONFIG_GENFILE_FORMAT "%s_genfile" #define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\ " nocolor: disable color usage in log messages\n"\ @@ -309,7 +334,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ #define LOG_GLOBALPARAMS_DESC { \ {LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \ -{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0}, \ +{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:1, TYPE_INT, 0}, \ {LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0} \ } @@ -319,23 +344,25 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int * @ingroup _macro * @brief Macro used to call logIt function with different message levels * @{*/ - -// debugging macros(g_log->log_component[component].interval?logRecord_mt(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args):(void)0) +#define LOG_DUMP_CHAR 0 +#define LOG_DUMP_DOUBLE 1 +// debugging macros +#define LOG_F LOG_I /* because LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */ # if T_TRACER /* per component, level dependant macros */ -# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0) -# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0) # define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0) +# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0) +# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0) # define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0) # define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0) -# define LOG_F(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_FILE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_FILE, x) ;}} while (0) /* */ + /* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */ +# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->genfile_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */ # define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */ /* bitmask dependant macros, to isolate debugging code */ -# define LOG_DEBUG_BEGIN(D) if (g_log->debug_mask & D) { -# define LOG_DEBUG_END } - /* bitmask dependant macros, to generate matlab files */ -# define LOG_M_BEGIN(D) if (g_log->matlab_mask & D) { -# define LOG_M_END } +# define LOG_DEBUGFLAG(D) (g_log->debug_mask & D) + + /* bitmask dependant macros, to generate debug file such as matlab file or message dump */ +# define LOG_GENFILEFLAG(D) (g_log->genfile_mask & D) # define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)/* */ /* define variable only used in LOG macro's */ # define LOG_VAR(A,B) A B @@ -345,12 +372,11 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int # define LOG_E(c, x...) /* */ # define LOG_D(c, x...) /* */ # define LOG_T(c, x...) /* */ -# define LOG_F(c, x...) /* */ + +# define LOG_DUMPMSG(c, b, s, x...) /* */ # define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...) -# define LOG_DEBUG_BEGIN(D) if (0) { -# define LOG_DEBUG_END } -# define LOG_M_BEGIN(D) if (0) { -# define LOG_M_END } +# define LOG_DEBUGFLAG(D) ( 0 ) +# define LOG_GENFILEFLAG(D) ( 0 ) # define LOG_M(file, vector, data, len, dec, format) # define LOG_VAR(A,B) # endif /* T_TRACER */ @@ -359,8 +385,8 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int /* unfiltered macros, usefull for simulators or messages at init time, before log is configured */ #define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0) - #define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0) +#define LOG_UDUMPMSG(c, b, s, f, x...) do { log_dump(c, b, s, f, x) ;} while (0) /* */ /* @}*/ diff --git a/common/utils/load_module_shlib.c b/common/utils/load_module_shlib.c index 656f6a8852..c8a293f279 100644 --- a/common/utils/load_module_shlib.c +++ b/common/utils/load_module_shlib.c @@ -70,8 +70,8 @@ char *tmpstr; char *shlibpath =NULL; char *shlibversion=NULL; char *cfgprefix; -paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0}, - {"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0}}; +paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0, NULL}, + {"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0, NULL}}; int ret; diff --git a/common/utils/load_module_shlib.h b/common/utils/load_module_shlib.h index ffbad66570..6cfd41ac78 100644 --- a/common/utils/load_module_shlib.h +++ b/common/utils/load_module_shlib.h @@ -72,13 +72,13 @@ typedef int(*getfarrayfunc_t)(loader_shlibfunc_t **funcarray); #define DEFAULT_MAXSHLIBS 10 loader_data_t loader_data; -/*------------------------------------------------------------------------------------------------------------------------------------------------*/ -/* LOADER parameters */ -/* optname helpstr paramflags XXXptr defXXXval type numelt */ -/*------------------------------------------------------------------------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* LOADER parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt check func*/ +/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/ #define LOADER_PARAMS_DESC { \ -{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0}, \ -{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0}, \ +{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0, NULL},\ +{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0, NULL}\ } /*-------------------------------------------------------------------------------------------------------------*/ diff --git a/common/utils/telnetsrv/telnetsrv_proccmd.c b/common/utils/telnetsrv/telnetsrv_proccmd.c index 519c222114..3576fd004a 100644 --- a/common/utils/telnetsrv/telnetsrv_proccmd.c +++ b/common/utils/telnetsrv/telnetsrv_proccmd.c @@ -199,28 +199,29 @@ int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt) print_threads(buf,debug,prnt); } if (strcasestr(buf,"loglvl") != NULL) { - prnt(" component level enabled\n"); + prnt("\n component level enabled output\n"); for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { if (g_log->log_component[i].name != NULL) { - prnt("%02i %17.17s:%10.10s %s\n",i ,g_log->log_component[i].name, - map_int_to_str(log_level_names,g_log->log_component[i].level), - ((g_log->log_component[i].interval>0)?"Y":"N") ); + prnt("%02i %17.17s:%10.10s %s %s\n",i ,g_log->log_component[i].name, + map_int_to_str(log_level_names,(g_log->log_component[i].level>=0)?g_log->log_component[i].level:g_log->log_component[i].savedlevel), + ((g_log->log_component[i].level>=0)?"Y":"N"), + ((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout")); } } } if (strcasestr(buf,"logopt") != NULL) { - prnt(" option enabled\n"); + prnt("\n option enabled\n"); for (int i=0; log_options[i].name != NULL; i++) { prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name, ((g_log->flag & log_options[i].value)?"Y":"N") ); } } if (strcasestr(buf,"dbgopt") != NULL) { - prnt(" option debug matlab\n"); + prnt("\n module debug dumpfile\n"); for (int i=0; log_maskmap[i].name != NULL ; i++) { - prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name, + prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name, ((g_log->debug_mask & log_maskmap[i].value)?"Y":"N"), - ((g_log->matlab_mask & log_maskmap[i].value)?"Y":"N") ); + ((g_log->genfile_mask & log_maskmap[i].value)?"Y":"N") ); } } if (strcasestr(buf,"config") != NULL) { @@ -337,15 +338,15 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); prnt("Available log levels: \n "); for (int i=0; log_level_names[i].name != NULL; i++) prnt("%s ",log_level_names[i].name); - prnt("\n"); + prnt("\n\n"); prnt("Available display options: \n "); for (int i=0; log_options[i].name != NULL; i++) prnt("%s ",log_options[i].name); - prnt("\n"); - prnt("Available debug or matlab options: \n "); + prnt("\n\n"); + prnt("Available debug or genfile options: \n "); for (int i=0; log_maskmap[i].name != NULL; i++) prnt("%s ",log_maskmap[i].name); - prnt("\n"); + prnt("\n\n"); proccmd_show("loglvl",debug,prnt); proccmd_show("logopt",debug,prnt); proccmd_show("dbgopt",debug,prnt); @@ -377,7 +378,7 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); else if (l == 2 && strcmp(logparam,"debug") == 0){ optbit=map_str_to_int(log_maskmap,opt); if (optbit < 0) { - prnt("debug flag %s unknown\n",opt); + prnt("module %s unknown\n",opt); } else { if (idx1 > 0) SET_LOG_DEBUG(optbit); @@ -386,27 +387,27 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); proccmd_show("dbgopt",debug,prnt); } } - else if (l == 2 && strcmp(logparam,"matlab") == 0){ + else if (l == 2 && strcmp(logparam,"dump") == 0){ optbit=map_str_to_int(log_maskmap,opt); if (optbit < 0) { - prnt("matlab flag %s unknown\n",opt); + prnt("module %s unknown\n",opt); } else { if (idx1 > 0) - SET_LOG_MATLAB(optbit); + SET_LOG_DUMP(optbit); else - CLEAR_LOG_MATLAB(optbit); + CLEAR_LOG_DUMP(optbit); proccmd_show("dbgopt",debug,prnt); } } if (logparam != NULL) free(logparam); if (opt != NULL) free(opt); } else if ( s == 3 && logsubcmd != NULL) { - int level, interval; + int level, enable, filelog; char *tmpstr=NULL; char *logparam=NULL; int l; - level = interval = -1; + level = enable = filelog = -1; l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr); if (debug > 0) prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr)); @@ -419,9 +420,13 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); } } else if (l ==1 ) { if (strcmp(logparam,"enable") == 0) { - interval = 1; + enable = 1; } else if (strcmp(logparam,"disable") == 0) { - interval = 0; + enable = 0; + } else if (strcmp(logparam,"file") == 0) { + filelog = 1 ; + } else if (strcmp(logparam,"nofile") == 0) { + filelog = 0 ; } else { prnt("%s%s unknown log sub command \n",logparam, tmpstr); } @@ -431,19 +436,26 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); if (logparam != NULL) free(logparam); if (tmpstr != NULL) free(tmpstr); for (int i=idx1; i<=idx2 ; i++) { + if ( level >= 0 || enable >= 0) { if (level < 0) { level=g_log->log_component[i].level; } - if (interval < 0) { - interval=g_log->log_component[i].interval; + if (enable < 0) { + level= -1; } - set_log(i, level, interval); - prnt("log level comp %i %s set to %s (%s)\n", - i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name), - map_int_to_str(log_level_names,g_log->log_component[i].level), - ((g_log->log_component[i].interval>0)?"enabled":"disabled")); - - + set_log(i, level); + } + if ( filelog == 1 ) { + set_component_filelog(i); + } + if ( filelog == 0 ) { + close_component_filelog(i); + } + prnt("log level comp %i %s set to %s (%s) output: %s\n", + i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name), + map_int_to_str(log_level_names,g_log->log_component[i].level), + ((g_log->log_component[i].level>=0)?"enabled":"disabled"), + ((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout")); } } else { prnt("%s: wrong log command...\n",buf); diff --git a/common/utils/telnetsrv/telnetsrv_proccmd.h b/common/utils/telnetsrv/telnetsrv_proccmd.h index 409484455c..1a0a8d25dc 100644 --- a/common/utils/telnetsrv/telnetsrv_proccmd.h +++ b/common/utils/telnetsrv/telnetsrv_proccmd.h @@ -48,13 +48,15 @@ telnetshell_vardef_t proc_vardef[] = { show: display current log configuration \n\ online, noonline: enable or disable console logs \n\ enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\ + file, nofile id1-id2: enable or disable redirecting logs to file for components index id1 to id2 \n\ + logfile name depends on component name and is printed in the show command \n\ level_ id1-id2: set log level to for components index id1 to id2 \n\ -use the show command to get the authorized values for and the list of component \ -indexes that can be used for id1 and id2 \n\ + use the show command to get the authorized values for \n\ + and the list of component indexes that can be used for id1 and id2 \n\ print_ <0|1> disable or enable the \"opt\" log option, use the show command to get \ -the available options\n\ - matlab_ debug_ disable or enable the debug code or matlab file generation \ -for \"func\" function. use the show command to get the available options\n" + the available options\n\ + dump_ debug_ disable or enable the debug file generation or debug code\ + for \"mod\" module. use the show command to get the available modules\n" #define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\ aff : set affinity of thread to core \n\ diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c index ae33722c90..aca5a5303d 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c @@ -274,11 +274,11 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com -LOG_M_BEGIN(DEBUG_LTEESTIM); - LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1); - LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1); - LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1); -LOG_M_END + if ( LOG_GENFILEFLAG(DEBUG_LTEESTIM)){ + LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1); + LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1); + LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1); + } return (1); } @@ -460,18 +460,18 @@ int lte_sync_time(int **rxdata, ///rx data in time domain LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2); -LOG_M_BEGIN(DEBUG_LTEESTIM) -static int debug_cnt; - if (debug_cnt == 0) { - LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2); - LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2); - LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2); - LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1); - // exit(-1); - } else { + if ( LOG_GENFILEFLAG(DEBUG_LTEESTIM)){ + static int debug_cnt; + if (debug_cnt == 0) { + LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2); + LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2); + LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2); + LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1); + // exit(-1); + } else { debug_cnt++; } -LOG_M_END +} return(peak_pos); diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c index 1eabfd6c36..284a22e2e6 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c @@ -25,9 +25,9 @@ #include "PHY/defs_eNB.h" #include "PHY/defs_UE.h" #include "PHY/impl_defs_top.h" - +#include "common/utils/LOG/log.h" //extern unsigned int lte_gold_table[3][20][2][14]; -//#define DEBUG_DL_CELL_SPEC + @@ -64,7 +64,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB, else if ((p==1) && (l>0)) nu = 0; else { - printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l); + LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l); return(-1); } @@ -85,19 +85,19 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB, // this is r_mprime from 3GPP 36-211 6.10.1.2 output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3]; //output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3; -#ifdef DEBUG_DL_CELL_SPEC - printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); -#endif + if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) { + LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", + Ns,l,m,mprime_dword,mprime_qpsk_symb); + LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); + } mprime++; -#ifdef DEBUG_DL_CELL_SPEC + if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) { if (m<4) - printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); + LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); -#endif + } k+=6;//b if (k >= eNB->frame_parms.ofdm_symbol_size) { @@ -105,7 +105,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB, k-=eNB->frame_parms.ofdm_symbol_size; } - // printf("** k %d\n",k); + // LOG_I(PHY,"** k %d\n",k); } return(0); @@ -143,7 +143,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB, else if ((p==1) && (l>0)) nu = 0; else { - printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l); + LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l); return(-1); } @@ -168,27 +168,24 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB, // this is r_mprime from 3GPP 36-211 6.10.1.2 output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3]; //output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3; -#ifdef DEBUG_DL_CELL_SPEC - printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); -#endif - + if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) { + LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", + Ns,l,m,mprime_dword,mprime_qpsk_symb); + LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); + } mprime++; -#ifdef DEBUG_DL_CELL_SPEC + if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) { + if (m<4) + LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); + } - if (m<4) - printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); - -#endif k+=6; - if (k >= eNB->frame_parms.ofdm_symbol_size) { k++; // skip DC carrier k-=eNB->frame_parms.ofdm_symbol_size; } - // printf("** k %d\n",k); + // LOG_I(PHY,"** k %d\n",k); } return(0); @@ -231,21 +228,21 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *ue, // this is r_mprime from 3GPP 36-211 6.10.1.2 output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3]; -#ifdef DEBUG_DL_CELL_SPEC - printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - printf("index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); -#endif + if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) { + LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", + Ns,l,m,mprime_dword,mprime_qpsk_symb); + LOG_I(PHY,"index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); + } mprime++; -#ifdef DEBUG_DL_CELL_SPEC + if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) { - if (m<4) - printf("Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); + if (m<4) + LOG_I(PHY,"Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); -#endif - k++; - // printf("** k %d\n",k); + } + k++; + // LOG_I(PHY,"** k %d\n",k); } return(0); diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index c3a309a424..53b1bd4ac3 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -220,7 +220,7 @@ void fill_pdcch_order(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_a break; } - LOG_I(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n", + LOG_T(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n", proc->frame_tx, proc->subframe_tx, rel8->rnti); } diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index db6f04f788..99563ce133 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -153,25 +153,24 @@ void rx_prach0(PHY_VARS_eNB *eNB, subframe = eNB->proc.subframe_prach_br; prachF = eNB->prach_vars_br.prachF; rxsigF = eNB->prach_vars_br.rxsigF[ce_level]; -LOG_DEBUG_BEGIN(PRACH) - if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n", - br_flag,ce_level,ru->proc.frame_prach,subframe, - fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level], - prach_ConfigIndex,rootSequenceIndex, - eNB->prach_vars_br.repetition_number[ce_level], - fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]); -LOG_DEBUG_END - } - else + if (LOG_DEBUGFLAG(PRACH)){ + if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n", + br_flag,ce_level,ru->proc.frame_prach,subframe, + fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level], + prach_ConfigIndex,rootSequenceIndex, + eNB->prach_vars_br.repetition_number[ce_level], + fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]); + } + } else #endif { prach_ifftp = eNB->prach_vars.prach_ifft[0]; subframe = eNB->proc.subframe_prach; prachF = eNB->prach_vars.prachF; rxsigF = eNB->prach_vars.rxsigF[0]; -LOG_DEBUG_BEGIN(PRACH) - if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(PRACH)){ + if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex); + } } } else { @@ -179,20 +178,19 @@ LOG_DEBUG_END if (br_flag == 1) { subframe = ru->proc.subframe_prach_br; rxsigF = ru->prach_rxsigF_br[ce_level]; -LOG_DEBUG_BEGIN(PRACH) - if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n", - br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex); -LOG_DEBUG_END - } - else + if (LOG_DEBUGFLAG(PRACH)){ + if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n", + br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex); + } + } else #endif { subframe = ru->proc.subframe_prach; rxsigF = ru->prach_rxsigF; -LOG_DEBUG_BEGIN(PRACH) - if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n", - subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(PRACH)){ + if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n", + subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex); + } } } @@ -204,27 +202,25 @@ LOG_DEBUG_END // DJP - indexing below in subframe zero takes us off the beginning of the array??? prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset]; -LOG_M_BEGIN(PRACH) - int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti); - int8_t dbEn0 = dB_fixed(en0); - int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB; - char buffer[80]; - if (dbEn0>32 && prach[0]!= NULL) - { - static int counter=0; - sprintf(buffer, "%s%d", "/tmp/prach_rx",counter); - LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13); + if (LOG_GENFILEFLAG(PRACH)){ + int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti); + int8_t dbEn0 = dB_fixed(en0); + int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB; + char buffer[80]; + if (dbEn0>32 && prach[0]!= NULL) { + static int counter=0; + sprintf(buffer, "%s%d", "/tmp/prach_rx",counter); + LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13); + } + if (dB_fixed(en0)>32) { + sprintf(buffer, "rach_dBm:%d",rach_dBm); + if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1); + LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n", + ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti, + prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa], + (subframe*fp->samples_per_tti)-ru->N_TA_offset); } - if (dB_fixed(en0)>32) - { - sprintf(buffer, "rach_dBm:%d",rach_dBm); - if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1); - LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n", - ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti, - prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa], - (subframe*fp->samples_per_tti)-ru->N_TA_offset); - } -LOG_M_END + } } } @@ -306,9 +302,9 @@ LOG_M_END if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))|| ((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources // Do forward transform -LOG_DEBUG_BEGIN(PRACH) - LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(PRACH)) { + LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp); + } for (aa=0; aa 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(PRACH)) { + int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); + if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en); + } } // in case of RAU and prach received rx_thread wakes up prach @@ -477,10 +473,10 @@ LOG_DEBUG_END *max_preamble_energy=0; for (preamble_index=0 ; preamble_index<64 ; preamble_index++) { -LOG_DEBUG_BEGIN(PRACH) - int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); - if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(PRACH)){ + int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); + if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag); + } if (restricted_set == 0) { // This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS))); @@ -563,11 +559,11 @@ LOG_DEBUG_END } // Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex -LOG_DEBUG_BEGIN(PRACH) - int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); - if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n", - ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(PRACH)) { + int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); + if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n", + ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en); + } log2_ifft_size = 10; fft_size = 6144; @@ -589,13 +585,13 @@ LOG_DEBUG_END } memset(prachF, 0, sizeof(int16_t)*2*1024 ); -LOG_M_BEGIN(PRACH) - if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1); - LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1); - LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1); - LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1); -LOG_M_END - + if (LOG_GENFILEFLAG(PRACH)) { + if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1); + LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1); + LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1); + LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1); + } + for (aa=0;aa>10; } -LOG_M_BEGIN(PRACH) - if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); - if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1); -LOG_M_END + if (LOG_GENFILEFLAG(PRACH)) { + if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); + if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1); + } }// antennas_rx } // new dft @@ -637,10 +633,10 @@ LOG_M_END eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level])) #endif { -LOG_DEBUG_BEGIN(PRACH) + if (LOG_DEBUGFLAG(PRACH)){ int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",ru->proc.frame_prach,subframe,br_flag,en); -LOG_DEBUG_END + } preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<>log2_ifft_size)*update_TA/update_TA2; *max_preamble = preamble_index; -LOG_DEBUG_BEGIN(PRACH) - int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); - if ((en>60) && (br_flag==1)) LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n",ru->proc.frame_prach,subframe,*max_preamble_energy,*max_preamble_delay,*max_preamble,br_flag,ce_level,levdB,lev); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(PRACH)){ + int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); + if ((en>60) && (br_flag==1)) + LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n", + ru->proc.frame_prach,subframe, + *max_preamble_energy,*max_preamble_delay, + *max_preamble,br_flag,ce_level,levdB,lev); + } } } } }// preamble_index -LOG_M_BEGIN(PRACH) - int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); - if (en>60) { - k = (12*n_ra_prb) - 6*fp->N_RB_UL; - - if (k<0) k+=fp->ofdm_symbol_size; - - k*=12; - k+=13; - k*=2; - - if (br_flag == 0) { - LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1); - LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); - LOG_M("Xu.m","xu",Xu,N_ZC,1,1); - LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1); - } - else { - LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb); - LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1); - LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1); - LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1); - LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1); - exit(-1); - } + if (LOG_GENFILEFLAG(PRACH)) { + int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); + if (en>60) { + k = (12*n_ra_prb) - 6*fp->N_RB_UL; + + if (k<0) k+=fp->ofdm_symbol_size; + + k*=12; + k+=13; + k*=2; + + if (br_flag == 0) { + LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1); + LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); + LOG_M("Xu.m","xu",Xu,N_ZC,1,1); + LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1); + } + else { + LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb); + LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1); + LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1); + LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1); + LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1); + exit(-1); + } - } -LOG_M_END + } + } /* LOG_GENFILEFLAG(PRACH) */ if (eNB) stop_meas(&eNB->rx_prach); } diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c index 619d84cee2..adb0d1576f 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c @@ -33,7 +33,6 @@ #include "PHY/defs_eNB.h" #include "PHY/phy_extern.h" #include "transport_eNB.h" -//#define DEBUG_ULSCH #include "PHY/sse_intrin.h" #include "transport_common_proto.h" #include "PHY/LTE_ESTIMATION/lte_estimation.h" @@ -67,7 +66,7 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH) - // printf("Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH); + LOG_T(PHY,"Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH); if (frame_parms->Ncp == 0) { // Normal prefix z0 = z; @@ -388,13 +387,13 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH) for (i=0,ip=0; iN_RB_DL*12),llr128U-(__m128i*)ulsch_llr); - for (i=0; i<(nb_rb*3); i++) { - //printf("%d,%d,%d,%d,%d,%d,%d,%d\n",((int16_t *)rxF)[0],((int16_t *)rxF)[1],((int16_t *)rxF)[2],((int16_t *)rxF)[3],((int16_t *)rxF)[4],((int16_t *)rxF)[5],((int16_t *)rxF)[6],((int16_t *)rxF)[7]); *(*llrp128) = *rxF; rxF++; (*llrp128)++; @@ -593,7 +589,9 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; #endif - // printf("symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0)); + if(LOG_DEBUGFLAG(DEBUG_ULSCH)) { + LOG_UI(PHY,"symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0)); + } for (i=0; i<(nb_rb*3); i++) { @@ -736,9 +734,9 @@ void ulsch_extract_rbs_single(int32_t **rxdataF, nb_rb1 = cmin(cmax((int)(frame_parms->N_RB_UL) - (int)(2*first_rb),(int)0),(int)(2*nb_rb)); // 2 times no. RBs before the DC nb_rb2 = 2*nb_rb - nb_rb1; // 2 times no. RBs after the DC -#ifdef DEBUG_ULSCH - printf("ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2); -#endif + if(LOG_DEBUGFLAG(DEBUG_ULSCH)) { + LOG_UI(PHY,"ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2); + } rxF_ext = &rxdataF_ext[aarx][(symbol*frame_parms->N_RB_UL*12)]; @@ -838,7 +836,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext, #endif for (rb=0; rb %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift); + LOG_D(PHY,"comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift); #elif defined(__arm__) @@ -1125,10 +1123,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB, harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe); Qm = ulsch[UE_id]->harq_processes[harq_pid]->Qm; -#ifdef DEBUG_ULSCH - printf("rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb); - -#endif //DEBUG_ULSCH + if(LOG_DEBUGFLAG(DEBUG_ULSCH)) { + LOG_I(PHY,"rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb); + } if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) { LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti); @@ -1137,13 +1134,13 @@ void rx_ulsch(PHY_VARS_eNB *eNB, for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) { -#ifdef DEBUG_ULSCH - printf("rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l, + if(LOG_DEBUGFLAG(DEBUG_ULSCH)) { + LOG_I(PHY,"rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l, ulsch[UE_id]->harq_processes[harq_pid]->first_rb, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, common_vars->rxdataF, pusch_vars->rxdataF_ext); -#endif //DEBUG_ULSCH + } ulsch_extract_rbs_single(common_vars->rxdataF, pusch_vars->rxdataF_ext, @@ -1179,21 +1176,16 @@ void rx_ulsch(PHY_VARS_eNB *eNB, pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i], ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor; - /* printf("%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i])); - */ + LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i])); + } - - //LOG_M("rxdataF_ext.m","rxF_ext",pusch_vars->rxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1); - //LOG_M("ulsch_chest.m","drs_est",pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1); - - ulsch_channel_level(pusch_vars->drs_ch_estimates, frame_parms, avgU, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb); - // printf("[ULSCH] avg[0] %d\n",avgU[0]); + LOG_D(PHY,"[ULSCH] avg[0] %d\n",avgU[0]); avgs = 0; @@ -1205,9 +1197,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB, log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4; -#ifdef DEBUG_ULSCH - printf("[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs); -#endif + + LOG_D(PHY,"[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs); + for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) { @@ -1229,9 +1221,6 @@ void rx_ulsch(PHY_VARS_eNB *eNB, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, log2_maxh); // log2_maxh+I0_shift - - - if (frame_parms->nb_antennas_rx > 1) ulsch_detection_mrc(frame_parms, pusch_vars->rxdataF_comp, @@ -1240,9 +1229,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB, l, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb); - - - // if ((eNB->measurements.n0_power_dB[0]+3)ulsch_power[0]) { + // if ((eNB->measurements.n0_power_dB[0]+3)ulsch_power[0]) if (23ulsch_power[0]) { freq_equalization(frame_parms, pusch_vars->rxdataF_comp, @@ -1254,22 +1241,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB, } } - - - - - //#ifdef DEBUG_ULSCH - // Inverse-Transform equalized outputs - // printf("Doing IDFTs\n"); lte_idft(frame_parms, (uint32_t*)pusch_vars->rxdataF_comp[0], ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12); - // printf("Done\n"); - //#endif //DEBUG_ULSCH - - - - llrp = (int16_t*)&pusch_vars->llr[0]; @@ -1316,9 +1290,8 @@ void rx_ulsch(PHY_VARS_eNB *eNB, break; default: -#ifdef DEBUG_ULSCH - printf("ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n"); -#endif //DEBUG_ULSCH + LOG_E(PHY,"ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n"); + break; } } @@ -1329,7 +1302,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB, eNB_rxtx_proc_t *proc, uint8_t UE_index) { - printf("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index); + LOG_I(PHY,"[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index); eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB; eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB; @@ -1344,7 +1317,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB, harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe); - printf("Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n", + LOG_UI(PHY,"Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n", subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm, eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch); diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index e7a7f1a259..ca1a6d1262 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -2035,7 +2035,7 @@ static inline void transpose4_ooff(int16x4_t *x,int16x4_t *y,int off) #endif -// 16-point optimized DFT kernel +// 16-point optimized DEBUG_DFT kernel const static int16_t tw16[24] __attribute__((aligned(32))) = { 32767,0,30272,-12540,23169 ,-23170,12539 ,-30273, 32767,0,23169,-23170,0 ,-32767,-23170,-23170, @@ -3097,10 +3097,10 @@ void dft128(int16_t *x,int16_t *y,int scale) dft64((int16_t*)(xtmp),(int16_t*)ytmp,1); dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1); - - /* LOG_M("dft128a.m","dfta",ytmp,64,1,1); - LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/ - + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("dft128a.m","dfta",ytmp,64,1,1); + LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/ + } for (i=0; i<16; i++) { bfly2_16(ytmpp,ytmpp+16, y128p,y128p+16, @@ -3149,9 +3149,10 @@ void dft128(int16_t *x,int16_t *y,int scale) } - - /* LOG_M("dft128out.m","dft128",y,128,1,1); - exit(-1);*/ + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("dft128out.m","dft128",y,128,1,1); + exit(-1); + } _mm_empty(); _m_empty(); @@ -3176,17 +3177,17 @@ void dft128(int16_t *x,int16_t *y,int scale) transpose4_ooff_simd256(x256+10,xtmp+5,8); transpose4_ooff_simd256(x256+12,xtmp+6,8); transpose4_ooff_simd256(x256+14,xtmp+7,8); - - /* LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1); - LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1); - */ + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1); + LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1); + } dft64((int16_t*)(xtmp),(int16_t*)ytmp,1); dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1); - - /*LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1); - LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1); - */ + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1); + LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1); + } for (i=0; i<8; i++) { bfly2_16_256(ytmpp,ytmpp+8, @@ -3219,9 +3220,10 @@ void dft128(int16_t *x,int16_t *y,int scale) y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256); } - - /* LOG_M("dft128.m","dft",y256,128,1,1); - exit(-1);*/ + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("dft128.m","dft",y256,128,1,1); + exit(-1); + } } #endif @@ -5422,10 +5424,11 @@ void dft1536(int16_t *input, int16_t *output, int scale) tmpo[1][i] = tmpo[1][i<<1]; tmpo[2][i] = tmpo[2][i<<1]; }*/ - - // LOG_M("out0.m","o0",tmpo[0],2048,1,1); - // LOG_M("out1.m","o1",tmpo[1],2048,1,1); - // LOG_M("out2.m","o2",tmpo[2],2048,1,1); + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("dft1536out0.m","o0",tmpo[0],2048,1,1); + LOG_M("dft1536out1.m","o1",tmpo[1],2048,1,1); + LOG_M("dft1536out2.m","o2",tmpo[2],2048,1,1); + } for (i=0,i2=0; i<1024; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i), @@ -5585,12 +5588,20 @@ void idft6144(int16_t *input, int16_t *output,int scale) idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("idft6144in.m","in",input,6144,1,1); + LOG_M("idft6144out0.m","o0",tmpo[0],2048,1,1); + LOG_M("idft6144out1.m","o1",tmpo[1],2048,1,1); + LOG_M("idft6144out2.m","o2",tmpo[2],2048,1,1); + } + for (i=0,i2=0; i<4096; i+=8,i2+=4) { ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); } + if (scale==1) { for (i=0; i<96; i++) { y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); @@ -5613,6 +5624,9 @@ void idft6144(int16_t *input, int16_t *output,int scale) } } + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("idft6144out.m","out",output,6144,1,1); + } _mm_empty(); _m_empty(); @@ -5643,10 +5657,11 @@ void dft6144(int16_t *input, int16_t *output,int scale) tmpo[1][i] = tmpo[1][i<<1]; tmpo[2][i] = tmpo[2][i<<1]; }*/ - - // LOG_M("out0.m","o0",tmpo[0],2048,1,1); - // LOG_M("out1.m","o1",tmpo[1],2048,1,1); - // LOG_M("out2.m","o2",tmpo[2],2048,1,1); + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("ft6144out0.m","o0",tmpo[0],2048,1,1); + LOG_M("ft6144out1.m","o1",tmpo[1],2048,1,1); + LOG_M("ft6144out2.m","o2",tmpo[2],2048,1,1); + } for (i=0,i2=0; i<4096; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), @@ -5707,10 +5722,11 @@ void dft12288(int16_t *input, int16_t *output,int scale) tmpo[1][i] = tmpo[1][i<<1]; tmpo[2][i] = tmpo[2][i<<1]; }*/ - - // LOG_M("out0.m","o0",tmpo[0],4096,1,1); - // LOG_M("out1.m","o1",tmpo[1],4096,1,1); - // LOG_M("out2.m","o2",tmpo[2],4096,1,1); + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("dft12288out0.m","o0",tmpo[0],4096,1,1); + LOG_M("dft12288out1.m","o1",tmpo[1],4096,1,1); + LOG_M("dft12288out2.m","o2",tmpo[2],4096,1,1); + } for (i=0,i2=0; i<8192; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), @@ -5758,9 +5774,18 @@ void idft12288(int16_t *input, int16_t *output,int scale) } + idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale); idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale); idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale); + + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("idft12288in.m","in",input,12288,1,1); + LOG_M("idft12288out0.m","o0",tmpo[0],4096,1,1); + LOG_M("idft12288out1.m","o1",tmpo[1],4096,1,1); + LOG_M("idft12288out2.m","o2",tmpo[2],4096,1,1); + } + for (i=0,i2=0; i<8192; i+=8,i2+=4) { ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), @@ -5790,8 +5815,9 @@ void idft12288(int16_t *input, int16_t *output,int scale) } _mm_empty(); _m_empty(); - - // LOG_M("out.m","out",output,6144,1,1); + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("idft12288out.m","out",output,6144,1,1); + } } int16_t twa18432[12288] __attribute__((aligned(32))); @@ -5920,16 +5946,18 @@ void dft24576(int16_t *input, int16_t *output,int scale) tmpo[1][i] = tmpo[1][i<<1]; tmpo[2][i] = tmpo[2][i<<1]; }*/ - - // LOG_M("out0.m","o0",tmpo[0],8192,1,1); - // LOG_M("out1.m","o1",tmpo[1],8192,1,1); - // LOG_M("out2.m","o2",tmpo[2],8192,1,1); + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("dft24576out0.m","o0",tmpo[0],8192,1,1); + LOG_M("dft24576out1.m","o1",tmpo[1],8192,1,1); + LOG_M("dft24576out2.m","o2",tmpo[2],8192,1,1); + } for (i=0,i2=0; i<16384; i+=8,i2+=4) { bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), (simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i), (simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i)); } + if (scale==1) { for (i=0; i<384; i++) { y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); @@ -5953,11 +5981,14 @@ void dft24576(int16_t *input, int16_t *output,int scale) } _mm_empty(); _m_empty(); - - // LOG_M("out.m","out",output,24576,1,1); + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("out.m","out",output,24576,1,1); + } } -void idft24576(int16_t *input, int16_t *output,int scale) + + +void idft24576(int16_t *input, int16_t *output) { int i,i2,j; uint32_t tmp[3][8192] __attribute__((aligned(32))); @@ -5975,12 +6006,12 @@ void idft24576(int16_t *input, int16_t *output,int scale) idft8192((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); - /* - LOG_M("in.m","in",input,24576,1,1); - LOG_M("out0.m","o0",tmpo[0],8192,1,1); - LOG_M("out1.m","o1",tmpo[1],8192,1,1); - LOG_M("out2.m","o2",tmpo[2],8192,1,1); - */ + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("idft24576in.m","in",input,24576,1,1); + LOG_M("idft24576out0.m","o0",tmpo[0],8192,1,1); + LOG_M("idft24576out1.m","o1",tmpo[1],8192,1,1); + LOG_M("idft24576out2.m","o2",tmpo[2],8192,1,1); + } for (i=0,i2=0; i<16384; i+=8,i2+=4) { ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), @@ -6011,7 +6042,9 @@ void idft24576(int16_t *input, int16_t *output,int scale) _mm_empty(); _m_empty(); - // LOG_M("out.m","out",output,24576,1,1); + if (LOG_GENFILEFLAG(DEBUG_DFT)) { + LOG_M("idft24576out.m","out",output,24576,1,1); + } } /// THIS SECTION IS FOR ALL PUSCH DFTS (i.e. radix 2^a * 3^b * 4^c * 5^d) diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index ed258ed47c..2b35ad936b 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -99,77 +99,77 @@ void get_dumpparam(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id, uint8_t void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid) { -LOG_M_BEGIN(DEBUG_UE_PHYPROC) - unsigned int coded_bits_per_codeword; - uint8_t nsymb ; + if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)) { + unsigned int coded_bits_per_codeword; + uint8_t nsymb ; - get_dumpparam(ue, proc, eNB_id, - ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->nb_rb , - ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, - subframe, - ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->Qm, - ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->Nl, - ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id], - &nsymb, &coded_bits_per_codeword); + get_dumpparam(ue, proc, eNB_id, + ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->nb_rb , + ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, + subframe, + ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->Qm, + ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->Nl, + ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id], + &nsymb, &coded_bits_per_codeword); - LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1); - LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1); - LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_estimates_ext[0],300*nsymb,1,1); - /* - LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); - LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); - LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); - LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); - */ - LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_comp0[0],300*12,1,1); - LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->llr[0],coded_bits_per_codeword,1,0); + LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1); + LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_estimates_ext[0],300*nsymb,1,1); + /* + LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); + LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); + LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); + LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); + */ + LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_comp0[0],300*12,1,1); + LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->llr[0],coded_bits_per_codeword,1,0); - LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_mag0,300*12,1,1); - LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_magb0,300*12,1,1); -LOG_M_END + LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_mag0,300*12,1,1); + LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_magb0,300*12,1,1); + } } void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe) { -LOG_M_BEGIN(DEBUG_UE_PHYPROC) - unsigned int coded_bits_per_codeword; - uint8_t nsymb; + if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)){ + unsigned int coded_bits_per_codeword; + uint8_t nsymb; - get_dumpparam(ue, proc, eNB_id, - ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb, - ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even, - subframe,2,1,0, - &nsymb, &coded_bits_per_codeword); + get_dumpparam(ue, proc, eNB_id, + ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb, + ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even, + subframe,2,1,0, + &nsymb, &coded_bits_per_codeword); - LOG_D(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n", - ue->Mod_id, - ue->frame_parms.ofdm_symbol_size, - nsymb, - ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb, - ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs, - ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb, - ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols, - coded_bits_per_codeword); + LOG_D(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n", + ue->Mod_id, + ue->frame_parms.ofdm_symbol_size, + nsymb, + ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb, + ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs, + ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb, + ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols, + coded_bits_per_codeword); - LOG_M("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1); + LOG_M("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1); - LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1); - LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1); - LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1); - /* - LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); - LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); - LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); - LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); - */ - LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_SI[0]->rxdataF_comp0[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1); - LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_SI[0]->llr[0],coded_bits_per_codeword,1,0); + LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1); + /* + LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); + LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); + LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); + LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); + */ + LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_SI[0]->rxdataF_comp0[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1); + LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_SI[0]->llr[0],coded_bits_per_codeword,1,0); - LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_SI[0]->dl_ch_mag0,300*nsymb,1,1); - LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_SI[0]->dl_ch_magb0,300*nsymb,1,1); - sleep(1); - exit(-1); -LOG_M_END + LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_SI[0]->dl_ch_mag0,300*nsymb,1,1); + LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_SI[0]->dl_ch_magb0,300*nsymb,1,1); + sleep(1); + exit(-1); + } } #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) @@ -234,40 +234,40 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe) { -LOG_M_BEGIN(DEBUG_UE_PHYPROC) - unsigned int coded_bits_per_codeword; - uint8_t nsymb ; + if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)){ + unsigned int coded_bits_per_codeword; + uint8_t nsymb ; - get_dumpparam(ue, proc, eNB_id, - ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb, - ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even, - subframe,2,1,0, - &nsymb, &coded_bits_per_codeword); + get_dumpparam(ue, proc, eNB_id, + ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb, + ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even, + subframe,2,1,0, + &nsymb, &coded_bits_per_codeword); - LOG_D(PHY,"[UE %d] Dumping dlsch_ra : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n", - ue->Mod_id, - ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb, - ue->dlsch_ra[eNB_id]->harq_processes[0]->mcs, - ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb, - ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols, - coded_bits_per_codeword); + LOG_D(PHY,"[UE %d] Dumping dlsch_ra : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n", + ue->Mod_id, + ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb, + ue->dlsch_ra[eNB_id]->harq_processes[0]->mcs, + ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb, + ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols, + coded_bits_per_codeword); - LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1); - LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1); - LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1); - /* - LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); - LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); - LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); - LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); - */ - LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_ra[0]->rxdataF_comp0[0],300*nsymb,1,1); - LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_ra[0]->llr[0],coded_bits_per_codeword,1,0); + LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1); + LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1); + /* + LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1); + LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1); + LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1); + LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1); + */ + LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_ra[0]->rxdataF_comp0[0],300*nsymb,1,1); + LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_ra[0]->llr[0],coded_bits_per_codeword,1,0); - LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_ra[0]->dl_ch_mag0,300*nsymb,1,1); - LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_ra[0]->dl_ch_magb0,300*nsymb,1,1); -LOG_M_END + LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_ra[0]->dl_ch_mag0,300*nsymb,1,1); + LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_ra[0]->dl_ch_magb0,300*nsymb,1,1); + } } void phy_reset_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index) @@ -362,11 +362,11 @@ void process_timing_advance_rar(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint16_t ti ue->timing_advance = timing_advance*4; -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { /* TODO: fix this log, what is 'HW timing advance'? */ /*LOG_I(PHY,"[UE %d] AbsoluteSubFrame %d.%d, received (rar) timing_advance %d, HW timing advance %d\n",ue->Mod_id,proc->frame_rx, proc->subframe_rx, ue->timing_advance);*/ - LOG_I(PHY,"[UE %d] AbsoluteSubFrame %d.%d, received (rar) timing_advance %d\n",ue->Mod_id,proc->frame_rx, proc->subframe_rx, ue->timing_advance); -LOG_DEBUG_END + LOG_UI(PHY,"[UE %d] AbsoluteSubFrame %d.%d, received (rar) timing_advance %d\n",ue->Mod_id,proc->frame_rx, proc->subframe_rx, ue->timing_advance); + } } @@ -740,17 +740,17 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue, } else { bundling_flag = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode; -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { - if (bundling_flag==bundling) { - LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR, - ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex); - } else { - LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR, - ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex); + if (bundling_flag==bundling) { + LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR, + ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex); + } else { + LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR, + ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex); + } } -LOG_DEBUG_END switch (frame_parms->tdd_config) { case 1: // DL:S:UL:UL:DL:DL:S:UL:UL:DL @@ -1226,9 +1226,9 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt #endif VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_IN); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->ofdm_mod_stats); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->ofdm_mod_stats); + } nsymb = (frame_parms->Ncp == 0) ? 14 : 12; #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case @@ -1345,9 +1345,9 @@ LOG_DEBUG_END } //nb_antennas_tx -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ofdm_mod_stats); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ofdm_mod_stats); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_OUT); @@ -1634,30 +1634,30 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - if(ue->ulsch[eNB_id]->o_ACK[0]) - { - LOG_I(PHY,"PUSCH ACK\n"); - T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti), - T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid)); - } - else - { - LOG_I(PHY,"PUSCH NACK\n"); - T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti), - T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid)); - } - LOG_I(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d Generating ACK (%d,%d) for %d bits on PUSCH\n", - Mod_id, - ue->ulsch[eNB_id]->rnti, - frame_tx%1024,subframe_tx, - ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1], - ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + if(ue->ulsch[eNB_id]->o_ACK[0]) + { + LOG_I(PHY,"PUSCH ACK\n"); + T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti), + T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid)); + } + else + { + LOG_I(PHY,"PUSCH NACK\n"); + T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti), + T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid)); + } + LOG_I(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d Generating ACK (%d,%d) for %d bits on PUSCH\n", + Mod_id, + ue->ulsch[eNB_id]->rnti, + frame_tx%1024,subframe_tx, + ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1], + ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK); } + } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) + if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)){ LOG_D(PHY, "[UE %d][PUSCH %d] AbsSubframe %d.%d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, " "cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d, ack_status_cw0 %d ack_status_cw1 %d bundling %d, Nbundled %d, CQI %d, RI %d\n", @@ -1679,7 +1679,7 @@ LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) ue->ulsch[eNB_id]->bundling, Nbundled, cqi_status, ri_status); -LOG_DEBUG_END + } @@ -1701,9 +1701,9 @@ LOG_DEBUG_END ue->prach_resources[eNB_id]->Msg3[6], ue->prach_resources[eNB_id]->Msg3[7], ue->prach_resources[eNB_id]->Msg3[8]); -LOG_DEBUG_BEGIN(UE_TIMING) + if ( LOG_DEBUGFLAG(UE_TIMING)) { start_meas(&ue->ulsch_encoding_stats); -LOG_DEBUG_END + } AssertFatal(ulsch_encoding(ue->prach_resources[eNB_id]->Msg3, ue, @@ -1713,11 +1713,11 @@ LOG_DEBUG_END ue->transmission_mode[eNB_id],0,0)==0, "ulsch_coding.c: FATAL ERROR: returning\n"); -LOG_DEBUG_BEGIN(UE_TIMING) + if ( LOG_DEBUGFLAG(UE_TIMING)) { stop_meas(&ue->phy_proc_tx); LOG_UI(PHY,"------FULL TX PROC : %5.2f ------\n",ue->phy_proc_tx.p_time/(cpuf*1000.0)); stop_meas(&ue->ulsch_encoding_stats); -LOG_DEBUG_END + } if (ue->mac_enabled == 1) { @@ -1752,26 +1752,25 @@ LOG_DEBUG_END -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { LOG_D(PHY,"[UE] Frame %d, subframe %d : ULSCH SDU (TX harq_pid %d) (%d bytes) : \n",frame_tx,subframe_tx,harq_pid, ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3); for (i=0; iulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3; i++) LOG_T(PHY,"%x.",ulsch_input_buffer[i]); LOG_T(PHY,"\n"); -LOG_DEBUG_END } - else { + } else { unsigned int taus(void); for (i=0; iulsch_encoding_stats); -LOG_DEBUG_END + } if (abstraction_flag==0) { if (ulsch_encoding(ulsch_input_buffer, @@ -1783,16 +1782,16 @@ LOG_DEBUG_END Nbundled)!=0) { LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->phy_proc_tx); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->phy_proc_tx); + } return; } } -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ulsch_encoding_stats); -LOG_DEBUG_END + if(LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ulsch_encoding_stats); + } } if (abstraction_flag == 0) { @@ -1817,13 +1816,13 @@ LOG_DEBUG_END T(T_UE_PHY_PUSCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]), T_INT(tx_amp),T_INT(ue->ulsch[eNB_id]->f_pusch),T_INT(get_PL(Mod_id,0,eNB_id)),T_INT(nb_rb)); -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubFrame %d.%d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n", - Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp); -LOG_DEBUG_END -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->ulsch_modulation_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubFrame %d.%d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n", + Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp); + } + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->ulsch_modulation_stats); + } ulsch_modulation(ue->common_vars.txdataF, tx_amp, frame_tx, @@ -1840,9 +1839,9 @@ LOG_DEBUG_END nb_rb, aa); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ulsch_modulation_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ulsch_modulation_stats); + } } @@ -2219,18 +2218,18 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - if(pucch_payload[0]) - { - T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti), - T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid)); + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + if(pucch_payload[0]) + { + T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti), + T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid)); + } + else + { + T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti), + T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid)); + } } - else - { - T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti), - T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid)); - } -LOG_DEBUG_END generate_pucch1x(ue->common_vars.txdataF, &ue->frame_parms, @@ -2268,15 +2267,15 @@ LOG_DEBUG_END #endif T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]), T_INT(tx_amp),T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id))); -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (RI or CQI), Po_PUCCH %d, isShortenPucch %d, amp %d\n", - Mod_id, - ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti, - frame_tx%1024, subframe_tx, - Po_PUCCH, - isShortenPucch, - tx_amp); -LOG_DEBUG_END + if( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (RI or CQI), Po_PUCCH %d, isShortenPucch %d, amp %d\n", + Mod_id, + ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti, + frame_tx%1024, subframe_tx, + Po_PUCCH, + isShortenPucch, + tx_amp); + } generate_pucch2x(ue->common_vars.txdataF, &ue->frame_parms, ue->ncs_cell, @@ -2354,9 +2353,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui ue->generate_ul_signal[eNB_id] = 0; -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->phy_proc_tx); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->phy_proc_tx); + } ue->tx_power_dBm[subframe_tx]=-127; @@ -2449,9 +2448,9 @@ LOG_DEBUG_END LOG_D(PHY,"****** end TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, subframe_tx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->phy_proc_tx); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->phy_proc_tx); + } } void phy_procedures_UE_S_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag) @@ -2693,40 +2692,36 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { - LOG_UI(PHY,"[UE %d] frame %d, subframe %d, Received PBCH (MIB): nb_antenna_ports_eNB %d, tx_ant %d, frame_tx %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6!\n", - ue->Mod_id, - frame_rx, - subframe_rx, - ue->frame_parms.nb_antenna_ports_eNB, - pbch_tx_ant, - frame_tx, - ue->frame_parms.N_RB_DL, - ue->frame_parms.phich_config_common.phich_duration, - ue->frame_parms.phich_config_common.phich_resource); -LOG_DEBUG_END + LOG_UI(PHY,"[UE %d] frame %d, subframe %d, Received PBCH (MIB): nb_antenna_ports_eNB %d, tx_ant %d, frame_tx %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6!\n", + ue->Mod_id, + frame_rx, + subframe_rx, + ue->frame_parms.nb_antenna_ports_eNB, + pbch_tx_ant, + frame_tx, + ue->frame_parms.N_RB_DL, + ue->frame_parms.phich_config_common.phich_duration, + ue->frame_parms.phich_config_common.phich_resource); + } } else { - /* - LOG_E(PHY,"[UE %d] frame %d, subframe %d, Error decoding PBCH!\n", - ue->Mod_id,frame_rx, subframe_rx); + if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)) { + LOG_E(PHY,"[UE %d] frame %d, subframe %d, Error decoding PBCH!\n", + ue->Mod_id,frame_rx, subframe_rx); - LOG_I(PHY,"[UE %d] rx_offset %d\n",ue->Mod_id,ue->rx_offset); + LOG_I(PHY,"[UE %d] rx_offset %d\n",ue->Mod_id,ue->rx_offset); - LOG_M("rxsig0.m","rxs0", ue->common_vars.rxdata[0],ue->frame_parms.samples_per_tti,1,1); + LOG_M("rxsig0.m","rxs0", ue->common_vars.rxdata[0],ue->frame_parms.samples_per_tti,1,1); - LOG_M("H00.m","h00",&(ue->common_vars.dl_ch_estimates[0][0][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1); - LOG_M("H10.m","h10",&(ue->common_vars.dl_ch_estimates[0][2][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1); - - LOG_M("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],8*ue->frame_parms.ofdm_symbol_size,1,1); - LOG_M("PBCH_rxF0_ext.m","pbch0_ext",ue->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1); - LOG_M("PBCH_rxF0_comp.m","pbch0_comp",ue->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1); - LOG_M("PBCH_rxF_llr.m","pbch_llr",ue->pbch_vars[0]->llr,(ue->frame_parms.Ncp==0) ? 1920 : 1728,1,4); - exit(-1); - */ + LOG_M("PBCH_rxF0_ext.m","pbch0_ext",ue->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1); + LOG_M("PBCH_rxF0_comp.m","pbch0_comp",ue->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1); + LOG_M("PBCH_rxF_llr.m","pbch_llr",ue->pbch_vars[0]->llr,(ue->frame_parms.Ncp==0) ? 1920 : 1728,1,4); + exit(-1); + } ue->pbch_vars[eNB_id]->pdu_errors_conseq++; ue->pbch_vars[eNB_id]->pdu_errors++; @@ -2742,12 +2737,12 @@ LOG_DEBUG_END ue->pbch_vars[eNB_id]->pdu_errors_last = ue->pbch_vars[eNB_id]->pdu_errors; } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_UI(PHY,"[UE %d] frame %d, slot %d, PBCH errors = %d, consecutive errors = %d!\n", - ue->Mod_id,frame_rx, subframe_rx, - ue->pbch_vars[eNB_id]->pdu_errors, - ue->pbch_vars[eNB_id]->pdu_errors_conseq); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_UI(PHY,"[UE %d] frame %d, slot %d, PBCH errors = %d, consecutive errors = %d!\n", + ue->Mod_id,frame_rx, subframe_rx, + ue->pbch_vars[eNB_id]->pdu_errors, + ue->pbch_vars[eNB_id]->pdu_errors_conseq); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES, VCD_FUNCTION_OUT); } @@ -2767,9 +2762,9 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint LOG_D(PHY,"DCI Decoding procedure in %d.%d\n",frame_rx,subframe_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_IN); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->dlsch_rx_pdcch_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->dlsch_rx_pdcch_stats); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN); rx_pdcch(ue, @@ -2896,17 +2891,17 @@ LOG_DEBUG_END ue->dlsch_received[eNB_id]++; -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",ue->Mod_id,dci_alloc_rx[i].format); - dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); - LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d=> %d\n",ue->Mod_id,subframe_rx,ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",ue->Mod_id,dci_alloc_rx[i].format); + dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); + LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d=> %d\n",ue->Mod_id,subframe_rx,ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active); + } // we received a CRNTI, so we're in PUSCH if (ue->UE_mode[eNB_id] != PUSCH) { -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Received DCI with CRNTI %x => Mode PUSCH\n",ue->Mod_id,frame_rx,subframe_rx,ue->pdcch_vars[subframe_rx&1][eNB_id]->crnti); -LOG_DEBUG_END + } //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); ue->UE_mode[eNB_id] = PUSCH; @@ -2921,9 +2916,9 @@ LOG_DEBUG_END ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) { -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i); + } if (generate_ue_dlsch_params_from_dci(frame_rx, subframe_rx, @@ -2952,9 +2947,9 @@ LOG_DEBUG_END else if ((dci_alloc_rx[i].rnti == P_RNTI) && ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) { -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i); + } if (generate_ue_dlsch_params_from_dci(frame_rx, @@ -2984,9 +2979,9 @@ LOG_DEBUG_END (dci_alloc_rx[i].rnti == ue->prach_resources[eNB_id]->ra_RNTI) && (dci_alloc_rx[i].format == format1A)) { -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i); + } if (generate_ue_dlsch_params_from_dci(frame_rx, @@ -3005,20 +3000,20 @@ LOG_DEBUG_END ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id], 0)==0) { - ue->dlsch_ra_received[eNB_id]++; + ue->dlsch_ra_received[eNB_id]++; -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ra[eNB_id] %p\n", - ue->Mod_id,ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],ue->dlsch_ra[eNB_id]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ra[eNB_id] %p\n", + ue->Mod_id,ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],ue->dlsch_ra[eNB_id]); + } } } else if( (dci_alloc_rx[i].rnti == ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti) && (dci_alloc_rx[i].format == format0)) { -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found rnti %x, format 0, dci_cnt %d\n", - ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found rnti %x, format 0, dci_cnt %d\n", + ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i); + } ue->ulsch_no_allocation_counter[eNB_id] = 0; //dump_dci(&ue->frame_parms,&dci_alloc_rx[i]); @@ -3036,42 +3031,41 @@ LOG_DEBUG_END CBA_RNTI, eNB_id, 0)==0)) { -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { - LOG_USEDINLOG_VAR(int8_t,harq_pid) = subframe2harq_pid(&ue->frame_parms, - pdcch_alloc2ul_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx), - pdcch_alloc2ul_subframe(&ue->frame_parms,proc->subframe_rx)); - T(T_UE_PHY_ULSCH_UE_DCI, T_INT(eNB_id), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx), - T_INT(dci_alloc_rx[i].rnti), - T_INT(harq_pid), - T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs), - T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->round), - T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb), - T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb), - T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS)); - - LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx); -LOG_DEBUG_END + LOG_USEDINLOG_VAR(int8_t,harq_pid) = subframe2harq_pid(&ue->frame_parms, + pdcch_alloc2ul_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx), + pdcch_alloc2ul_subframe(&ue->frame_parms,proc->subframe_rx)); + T(T_UE_PHY_ULSCH_UE_DCI, T_INT(eNB_id), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx), + T_INT(dci_alloc_rx[i].rnti), + T_INT(harq_pid), + T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs), + T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->round), + T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb), + T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb), + T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS)); + LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx); + } } } else if( (dci_alloc_rx[i].rnti == ue->ulsch[eNB_id]->cba_rnti[0]) && (dci_alloc_rx[i].format == format0)) { // UE could belong to more than one CBA group // ue->Mod_id%ue->ulsch[eNB_id]->num_active_cba_groups] -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found cba rnti %x, format 0, dci_cnt %d\n", - ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i); + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found cba rnti %x, format 0, dci_cnt %d\n", + ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i); /* if (((frame_rx%100) == 0) || (frame_rx < 20)) dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); */ -LOG_DEBUG_END + } ue->ulsch_no_allocation_counter[eNB_id] = 0; //dump_dci(&ue->frame_parms,&dci_alloc_rx[i]); if ((ue->UE_mode[eNB_id] > PRACH) && - (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu, + (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu, ue->ulsch[eNB_id]->cba_rnti[0], subframe_rx, format0, @@ -3084,28 +3078,28 @@ LOG_DEBUG_END eNB_id, 0)==0)) { -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx); -LOG_DEBUG_END - ue->ulsch[eNB_id]->num_cba_dci[(subframe_rx+4)%10]++; + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx); + } + ue->ulsch[eNB_id]->num_cba_dci[(subframe_rx+4)%10]++; } } else { -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d] frame %d, subframe %d: received DCI %d with RNTI=%x (C-RNTI:%x, CBA_RNTI %x) and format %d!\n",ue->Mod_id,frame_rx,subframe_rx,i,dci_alloc_rx[i].rnti, - ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti, - ue->ulsch[eNB_id]->cba_rnti[0], + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d] frame %d, subframe %d: received DCI %d with RNTI=%x (C-RNTI:%x, CBA_RNTI %x) and format %d!\n",ue->Mod_id,frame_rx,subframe_rx,i,dci_alloc_rx[i].rnti, + ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti, + ue->ulsch[eNB_id]->cba_rnti[0], dci_alloc_rx[i].format); // dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); -LOG_DEBUG_END + } } } -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->dlsch_rx_pdcch_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->dlsch_rx_pdcch_stats); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT); return(0); } @@ -3207,14 +3201,15 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs ue->dlsch_MCH[0]->max_turbo_iterations, ue->dlsch_MCH[0]->harq_processes[0]->G); dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx); -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) + + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { - for (int i=0; idlsch_MCH[0]->harq_processes[0]->TBS>>3; i++) { - LOG_T(PHY,"%02x.",ue->dlsch_MCH[0]->harq_processes[0]->c[0][i]); - } + for (int i=0; idlsch_MCH[0]->harq_processes[0]->TBS>>3; i++) { + LOG_T(PHY,"%02x.",ue->dlsch_MCH[0]->harq_processes[0]->c[0][i]); + } - LOG_T(PHY,"\n"); -LOG_DEBUG_END + LOG_T(PHY,"\n"); + } // if (subframe_rx==9) @@ -3345,12 +3340,12 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC else first_symbol_flag = 0; -LOG_DEBUG_BEGIN(UE_TIMING) - uint8_t slot = 0; - if(m >= ue->frame_parms.symbols_per_tti>>1) + if (LOG_DEBUGFLAG(UE_TIMING)) { + uint8_t slot = 0; + if(m >= ue->frame_parms.symbols_per_tti>>1) slot = 1; - start_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]); -LOG_DEBUG_END + start_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]); + } // process DLSCH received in first slot rx_pdsch(ue, pdsch, @@ -3363,13 +3358,13 @@ LOG_DEBUG_END dual_stream_UE, i_mod, dlsch0->current_harq_pid); -LOG_DEBUG_BEGIN(UE_TIMING) - uint8_t slot = 0; - if(m >= ue->frame_parms.symbols_per_tti>>1) - slot = 1; - stop_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]); - LOG_UI(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + uint8_t slot = 0; + if(m >= ue->frame_parms.symbols_per_tti>>1) + slot = 1; + stop_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]); + LOG_UI(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0)); + } @@ -3564,9 +3559,9 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, frame_rx, subframe_rx, ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->dlsch_unscrambling_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->dlsch_unscrambling_stats); + } dlsch_unscrambling(&ue->frame_parms, 0, dlsch0, @@ -3574,9 +3569,9 @@ LOG_DEBUG_END pdsch_vars->llr[0], 0, subframe_rx<<1); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->dlsch_unscrambling_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->dlsch_unscrambling_stats); + } LOG_D(PHY," ------ start turbo decoder for AbsSubframe %d.%d / %d ------ \n", frame_rx, subframe_rx, harq_pid); LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->nb_rb); @@ -3587,9 +3582,9 @@ LOG_DEBUG_END LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->Kmimo); LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); + } ret = dlsch_decoding(ue, pdsch_vars->llr[0], &ue->frame_parms, @@ -3601,14 +3596,14 @@ LOG_DEBUG_END pdsch==PDSCH?1:0, dlsch0->harq_processes[harq_pid]->TBS>256?1:0); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); - LOG_UI(PHY, " --> Unscrambling for CW0 %5.3f\n", - (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0)); - LOG_UI(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW0 %5.3f\n", - frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0)); + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); + LOG_UI(PHY, " --> Unscrambling for CW0 %5.3f\n", + (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0)); + LOG_UI(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW0 %5.3f\n", + frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0)); -LOG_DEBUG_END + } if(is_cw1_active) { // start turbo decode for CW 1 @@ -3621,9 +3616,9 @@ LOG_DEBUG_END frame_rx, subframe_rx, ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->dlsch_unscrambling_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->dlsch_unscrambling_stats); + } dlsch_unscrambling(&ue->frame_parms, 0, dlsch1, @@ -3631,9 +3626,9 @@ LOG_DEBUG_END pdsch_vars->llr[1], 1, subframe_rx<<1); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->dlsch_unscrambling_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->dlsch_unscrambling_stats); + } LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->nb_rb); LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> rb_alloc_even %x \n", frame_rx, subframe_rx, harq_pid, (uint16_t)((intptr_t)dlsch1->harq_processes[harq_pid]->rb_alloc_even)); @@ -3643,9 +3638,9 @@ LOG_DEBUG_END LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->Kmimo); LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); + } ret1 = dlsch_decoding(ue, pdsch_vars->llr[1], @@ -3658,13 +3653,13 @@ LOG_DEBUG_END pdsch==PDSCH?1:0, dlsch1->harq_processes[harq_pid]->TBS>256?1:0); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); - LOG_UI(PHY, " --> Unscrambling for CW1 %5.3f\n", - (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0)); - LOG_UI(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n", - frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]); + LOG_UI(PHY, " --> Unscrambling for CW1 %5.3f\n", + (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0)); + LOG_UI(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n", + frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0)); + } LOG_D(PHY,"AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n", frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0)); @@ -3703,15 +3698,15 @@ LOG_DEBUG_END dlsch0->harq_processes[harq_pid]->TBS); } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - int j; - LOG_D(PHY,"dlsch harq_pid %d (rx): \n",dlsch0->current_harq_pid); + if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)){ + int j; + LOG_D(PHY,"dlsch harq_pid %d (rx): \n",dlsch0->current_harq_pid); - for (j=0; jharq_processes[dlsch0->current_harq_pid]->TBS>>3; j++) - LOG_T(PHY,"%x.",dlsch0->harq_processes[dlsch0->current_harq_pid]->b[j]); + for (j=0; jharq_processes[dlsch0->current_harq_pid]->TBS>>3; j++) + LOG_T(PHY,"%x.",dlsch0->harq_processes[dlsch0->current_harq_pid]->b[j]); - LOG_T(PHY,"\n"); -LOG_DEBUG_END + LOG_T(PHY,"\n"); + } if (ue->mac_enabled == 1) { @@ -3804,26 +3799,26 @@ LOG_DEBUG_END } } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n", - ue->Mod_id, - dlsch0->rnti,harq_pid, - frame_rx,subframe_rx,ret, - dlsch0->harq_processes[harq_pid]->mcs, - dlsch0->harq_processes[harq_pid]->rvidx, - dlsch0->harq_processes[harq_pid]->TBS); + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n", + ue->Mod_id, + dlsch0->rnti,harq_pid, + frame_rx,subframe_rx,ret, + dlsch0->harq_processes[harq_pid]->mcs, + dlsch0->harq_processes[harq_pid]->rvidx, + dlsch0->harq_processes[harq_pid]->TBS); + + if (frame_rx%100==0) { + LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n", + ue->Mod_id,dlsch0->rnti, + frame_rx,subframe_rx, + ue->dlsch_errors[eNB_id], + ue->dlsch_received[eNB_id], + ue->dlsch_fer[eNB_id], + ue->measurements.wideband_cqi_tot[eNB_id]); + } - if (frame_rx%100==0) { - LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n", - ue->Mod_id,dlsch0->rnti, - frame_rx,subframe_rx, - ue->dlsch_errors[eNB_id], - ue->dlsch_received[eNB_id], - ue->dlsch_fer[eNB_id], - ue->measurements.wideband_cqi_tot[eNB_id]); - } - -LOG_DEBUG_END + } /*LOG_DEBUGFLAG(DEBUG_UE_PHYPROC) */ } @@ -3909,9 +3904,9 @@ void *UE_thread_slot1_dl_processing(void *arg) { } /**** Slot1 FE Processing ****/ -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]); + } // I- start dl slot1 processing // do first symbol of next downlink subframe for channel estimation /* @@ -3936,9 +3931,9 @@ LOG_DEBUG_END { //if( (l != pilot0) && (l != pilot1)) { -LOG_DEBUG_BEGIN(UE_TIMING) + if (LOG_DEBUGFLAG(UE_TIMING)) { start_meas(&ue->ofdm_demod_stats); -LOG_DEBUG_END + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN); //printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,subframe_rx,slot1,l); front_end_fft(ue, @@ -3947,9 +3942,9 @@ LOG_DEBUG_END 0, 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ofdm_demod_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ofdm_demod_stats); + } } } // for l=1..l2 @@ -4002,11 +3997,10 @@ LOG_DEBUG_END //printf(" [slot1 dl processing] ==> Start LLR Comuptation slot1 for AbsSubframe %d.%d \n", proc->frame_rx, proc->subframe_rx); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]); - LOG_UI(PHY, "[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0)); - -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]); + LOG_UI(PHY, "[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0)); + } //wait until pdcch is decoded @@ -4025,9 +4019,9 @@ LOG_DEBUG_END //printf("AbsSubframe %d.%d Pdsch Procedure (slot1)\n",frame_rx,subframe_rx); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]); + } // start slave thread for Pdsch Procedure (slot1) // do procedures for C-RNTI uint8_t eNB_id = 0; @@ -4097,10 +4091,10 @@ LOG_DEBUG_END proc->llr_slot1_available=1; //printf("Set available LLR slot1 to 1 AbsSubframe %d.%d \n",frame_rx,subframe_rx); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]); - LOG_UI(PHY, "[AbsSFN %d.%d] Slot1: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]); + LOG_UI(PHY, "[AbsSFN %d.%d] Slot1: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0)); + } if (pthread_mutex_lock(&proc->mutex_slot1_dl_processing) != 0) { @@ -4144,14 +4138,14 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *pr // start timers -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx); + } -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]); - start_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]); + start_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]); + } pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0; @@ -4170,10 +4164,10 @@ LOG_DEBUG_END ue->dlsch_ra[eNB_id]->active = 0; } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n", - ue->Mod_id,frame_rx, subframe_rx); -LOG_DEBUG_END + if ( LOG_DEBUG_FLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n", + ue->Mod_id,frame_rx, subframe_rx); + } @@ -4247,9 +4241,9 @@ LOG_DEBUG_END /**** Slot0 FE Processing ****/ // I- start main thread for FFT/ChanEst symbol: 0/1 --> 7 -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]); + } // 1- perform FFT for pilot ofdm symbols first (ofdmSym7 ofdmSym4 or (ofdmSym6 ofdmSym3)) //printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,subframe_rx,slot1,pilot0); front_end_fft(ue, @@ -4282,9 +4276,9 @@ LOG_DEBUG_END if( (l != pilot0) && (l != pilot1)) { //printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,subframe_rx,slot0,l); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->ofdm_demod_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->ofdm_demod_stats); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN); front_end_fft(ue, l, @@ -4292,9 +4286,9 @@ LOG_DEBUG_END 0, 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ofdm_demod_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ofdm_demod_stats); + } } } // for l=1..l2 @@ -4313,32 +4307,32 @@ LOG_DEBUG_END } if (do_pdcch_flag) { -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]); + } if (ue_pdcch_procedures(eNB_id,ue,proc,abstraction_flag) == -1) { LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx); -LOG_DEBUG_BEGIN(UE_TIMING) + if (LOG_DEBUGFLAG(UE_TIMING)) { LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: PDCCH %5.2f \n",frame_rx,subframe_rx,ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + } //proc->dci_slot0_available = 1; return(-1); } //proc->dci_slot0_available=1; -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]); - LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: PDCCH %5.2f \n",frame_rx,subframe_rx,ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]); + LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: PDCCH %5.2f \n",frame_rx,subframe_rx,ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); + } } //printf("num_pdcch_symbols %d\n",ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols); // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH) -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]); - LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]); + LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0)); + } //wait until slot1 FE is done uint32_t wait = 0; @@ -4348,10 +4342,10 @@ LOG_DEBUG_END wait++; } -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]); - LOG_UI(PHY, "[AbsSFN %d.%d] FULL FE Processing %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]); + LOG_UI(PHY, "[AbsSFN %d.%d] FULL FE Processing %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0)); + } /**** End Subframe FE Processing ****/ @@ -4365,13 +4359,13 @@ LOG_DEBUG_END //printf("AbsSubframe %d.%d Pdsch Procedure (slot0)\n",frame_rx%1024,subframe_rx); //printf("AbsSubframe %d.%d Pdsch Procedure PDSCH Active %d \n",frame_rx%1024,subframe_rx, ue->dlsch[ue->current_thread_id[subframe_rx]][0][0]->active); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]); + } -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]); + } if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN); ue_pdsch_procedures(ue, @@ -4437,10 +4431,10 @@ LOG_DEBUG_END //printf("Set available dci slot0 to 1 AbsSubframe %d.%d \n",frame_rx%1024,subframe_rx); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]); - LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)){ + stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]); + LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0)); + } //wait until LLR Slot1 is done @@ -4453,16 +4447,16 @@ LOG_DEBUG_END -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]); - LOG_UI(PHY, "[AbsSFN %d.%d] Full LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)){ + stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]); + LOG_UI(PHY, "[AbsSFN %d.%d] Full LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); + } //=====================================================================// -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)){ + start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]); + } LOG_D(PHY,"==> Start Turbo Decoder active dlsch %d SI %d RA %d \n",ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active, ue->dlsch_SI[eNB_id]->active, @@ -4524,10 +4518,10 @@ LOG_DEBUG_END ue->dlsch_ra[eNB_id]->active = 0; } -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]); - LOG_UI(PHY, "[AbsSFN %d.%d] Channel Decoder: %5.2f \n",frame_rx,subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING) + stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]); + LOG_UI(PHY, "[AbsSFN %d.%d] Channel Decoder: %5.2f \n",frame_rx,subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); + } // duplicate harq structure uint8_t current_harq_pid = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid; @@ -4587,10 +4581,10 @@ LOG_DEBUG_END VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT); -LOG_DEBUG_BEGIN(UE_TIMING) + if (LOG_DEBUGFLAG(UE_TIMING)){ stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]); LOG_UI(PHY, "------FULL RX PROC [AbsSFN %d.%d]: %5.2f ------\n",frame_rx,subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + } LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx); return (0); @@ -4626,14 +4620,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id, // start timers -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_I(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_I(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx); + } -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]); - start_meas(&ue->generic_stat); -LOG_DEBUG_END + if(LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]); + start_meas(&ue->generic_stat); + } pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0; @@ -4652,10 +4646,10 @@ LOG_DEBUG_END ue->dlsch_ra[eNB_id]->active = 0; } -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n", - ue->Mod_id,frame_rx, subframe_rx); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n", + ue->Mod_id,frame_rx, subframe_rx); + } if (ue->frame_parms.Ncp == 0) { // normal prefix pilot1 = 4; @@ -4689,9 +4683,9 @@ LOG_DEBUG_END LOG_D(PHY," ------ --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx); for (; l<=l2; l++) { if (abstraction_flag == 0) { -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->ofdm_demod_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->ofdm_demod_stats); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN); slot_fep(ue, l, @@ -4700,9 +4694,9 @@ LOG_DEBUG_END 0, 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ofdm_demod_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ofdm_demod_stats); + } } ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode); @@ -4743,16 +4737,16 @@ LOG_DEBUG_END 0); // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH) -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->generic_stat); - LOG_UI(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->generic_stat); + LOG_UI(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0)); + } LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->generic_stat); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->generic_stat); + } // do procedures for C-RNTI if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN); @@ -4822,9 +4816,9 @@ LOG_DEBUG_END if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) { // do front-end processing for second slot, and first symbol of next subframe for (l=1; lframe_parms.symbols_per_tti>>1; l++) { if (abstraction_flag == 0) { -LOG_DEBUG_BEGIN(UE_TIMING) + if (LOG_DEBUGFLAG(UE_TIMING)) { start_meas(&ue->ofdm_demod_stats); -LOG_DEBUG_END + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN); slot_fep(ue, l, @@ -4833,9 +4827,9 @@ LOG_DEBUG_END 0, 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->ofdm_demod_stats); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->ofdm_demod_stats); + } } ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode); @@ -4854,10 +4848,10 @@ LOG_DEBUG_END 0); } } // not an S-subframe -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->generic_stat); - LOG_UI(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if(LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->generic_stat); + LOG_UI(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0)); + } LOG_D(PHY," ------ end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx); @@ -4872,9 +4866,9 @@ LOG_DEBUG_END LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx); if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]); + } ue_pdsch_procedures(ue, proc, eNB_id, @@ -4886,10 +4880,10 @@ LOG_DEBUG_END abstraction_flag); LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx); LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]); - start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]); + start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]); + } ue_dlsch_procedures(ue, proc, eNB_id, @@ -4899,38 +4893,38 @@ LOG_DEBUG_END &ue->dlsch_errors[eNB_id], mode, abstraction_flag); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]); - LOG_UI(PHY, "[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); - LOG_UI(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]); + LOG_UI(PHY, "[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); + LOG_UI(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT); } -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->generic_stat); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->generic_stat); + } -LOG_M_BEGIN(DEBUG_UE_PHYPROC) - if(subframe_rx==5 && ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20){ - //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0); - //LOG_M("llr.m","llr", &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); + if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)) { + if(subframe_rx==5 && ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20){ + //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0); + //LOG_M("llr.m","llr", &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); - LOG_M("rxdataF0_current.m" , "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); - //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("rxdataF0_current.m" , "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); + //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); - //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); + //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); - LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); - LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1); - LOG_M("rxdataF_comp00.m","rxdataF_comp00", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1); - //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1); - //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1); + LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,1); + LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1); + LOG_M("rxdataF_comp00.m","rxdataF_comp00", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1); + //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1); + //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1); - AssertFatal (0,""); + AssertFatal (0,""); + } } -LOG_M_END // do procedures for SI-RNTI if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) { @@ -5035,25 +5029,25 @@ LOG_M_END ue->Mod_id,frame_rx,ue->total_TBS[eNB_id], ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0); -LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC) - if ((frame_rx % 100 == 0)) { - LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx); + if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) { + if ((frame_rx % 100 == 0)) { + LOG_UI(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx); + } } -LOG_DEBUG_END } -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->generic_stat); - printf("after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->generic_stat); + LOG_UI(PHY,"after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0)); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]); - LOG_UI(PHY, "------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING) ) { + stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]); + LOG_UI(PHY, "------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0)); + } LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx); return (0); @@ -5083,9 +5077,9 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,1); -LOG_DEBUG_BEGIN(UE_TIMING) - start_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if ( LOG_DEBUGFLAG(UE_TIMING)) { + start_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]); + } #if defined(ENABLE_ITTI) @@ -5168,9 +5162,9 @@ LOG_DEBUG_END } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,0); -LOG_DEBUG_BEGIN(UE_TIMING) - stop_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(UE_TIMING)) { + stop_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]); + } } // slot } diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 7e2f1ad2e0..559540e49d 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -2046,24 +2046,9 @@ int main(int argc, char **argv) qsort (table_rx, time_vector_rx.size, sizeof(double), &compare); if (dump_table == 1 ) { - set_component_filelog(USIM); // file located in /tmp/usim.txt - int n; - LOG_F(USIM,"The transmitter raw data: \n"); - - for (n=0; n< time_vector_tx.size; n++) { - printf("%f ", table_tx[n]); - LOG_F(USIM,"%f ", table_tx[n]); - } - - LOG_F(USIM,"\n"); - LOG_F(USIM,"The receiver raw data: \n"); - - for (n=0; n< time_vector_rx.size; n++) { - // printf("%f ", table_rx[n]); - LOG_F(USIM,"%f ", table_rx[n]); - } - - LOG_F(USIM,"\n"); + set_component_filelog(SIM); // file located in /tmp/usim.txt + LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n"); + LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"Thereceiver raw data: \n"); } double tx_median = table_tx[time_vector_tx.size/2]; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c index 0c942df275..2176e272c8 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c @@ -5016,24 +5016,11 @@ int main(int argc, char **argv) if (dump_table == 1 ) { set_component_filelog(USIM); // file located in /tmp/usim.txt - int n; - LOG_F(USIM,"The transmitter raw data: \n"); + LOG_UDUMPMSG(RRC,(char *)table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE, + "The transmitter raw data: \n"); + LOG_UDUMPMSG(RRC,(char *)table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE, + "The receiver raw data: \n"); - for (n=0; n< time_vector_tx.size; n++) { - printf("%f ", table_tx[n]); - LOG_F(USIM,"%f ", table_tx[n]); - } - - LOG_F(USIM,"\n"); - LOG_F(USIM,"The receiver raw data: \n"); - - for (n=0; n< time_vector_rx.size; n++) { - // printf("%f ", table_rx[n]); - LOG_F(USIM,"%f ", table_rx[n]); - } - - LOG_F(USIM,"\n"); - } double tx_median = table_tx[time_vector_tx.size/2]; double tx_q1 = table_tx[time_vector_tx.size/4]; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c index b41dd5536c..570c13c0b6 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c @@ -3851,24 +3851,9 @@ PMI_FEEDBACK: qsort (table_rx, time_vector_rx.size, sizeof(double), &compare); if (dump_table == 1 ) { - set_component_filelog(USIM); // file located in /tmp/usim.txt - int n; - LOG_F(USIM,"The transmitter raw data: \n"); - - for (n=0; n< time_vector_tx.size; n++) { - printf("%f ", table_tx[n]); - LOG_F(USIM,"%f ", table_tx[n]); - } - - LOG_F(USIM,"\n"); - LOG_F(USIM,"The receiver raw data: \n"); - - for (n=0; n< time_vector_rx.size; n++) { - // printf("%f ", table_rx[n]); - LOG_F(USIM,"%f ", table_rx[n]); - } - - LOG_F(USIM,"\n"); + set_component_filelog(SIM); // file located in /tmp/usim.txt + LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n"); + LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"The receiver raw data: \n"); } double tx_median = table_tx[time_vector_tx.size/2]; diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index ab7a29b096..3fcb010685 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -1491,24 +1491,9 @@ int main(int argc, char **argv) qsort (table_rx, time_vector_rx.size, sizeof(double), &compare); if (dump_table == 1 ) { - int n; set_component_filelog(SIM); // file located in /tmp/usim.txt - LOG_F(SIM,"The transmitter raw data: \n"); - - for (n=0; n< time_vector_tx.size; n++) { - // printf("%f ", table_tx[n]); - LOG_F(SIM,"%f ", table_tx[n]); - } - - LOG_F(SIM,"\n"); - LOG_F(SIM,"The receiver raw data: \n"); - - for (n=0; n< time_vector_rx.size; n++) { - // printf("%f ", table_rx[n]); - LOG_F(SIM,"%f ", table_rx[n]); - } - - LOG_F(SIM,"\n"); + LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n"); + LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"The receiver raw data: \n"); } double tx_median = table_tx[time_vector_tx.size/2]; diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index 40c6aeac44..6f1b66c6d0 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -143,7 +143,7 @@ void *eNB_app_task(void *args_p) uint32_t enb_id_start = 0; uint32_t enb_id_end = enb_id_start + enb_nb; # if defined(ENABLE_USE_MME) - uint32_t register_enb_pending; + uint32_t register_enb_pending=0; uint32_t registered_enb; long enb_register_retry_timer_id; # endif @@ -182,15 +182,15 @@ void *eNB_app_task(void *args_p) configure_rrc(enb_id); } -# if defined(ENABLE_USE_MME) + if (EPC_MODE_ENABLED) { /* Try to register each eNB */ - registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); -# else + registered_enb = 0; + register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + } else { /* Start L2L1 task */ - msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE); - itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p); -# endif + msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE); + itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p); + } do { // Wait for a message @@ -208,66 +208,68 @@ void *eNB_app_task(void *args_p) LOG_I(ENB_APP, "Received %s\n", ITTI_MSG_NAME(msg_p)); break; -# if defined(ENABLE_USE_MME) - case S1AP_REGISTER_ENB_CNF: - LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p), - S1AP_REGISTER_ENB_CNF(msg_p).nb_mme); + if (EPC_MODE_ENABLED) { + LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p), + S1AP_REGISTER_ENB_CNF(msg_p).nb_mme); - DevAssert(register_enb_pending > 0); - register_enb_pending--; + DevAssert(register_enb_pending > 0); + register_enb_pending--; - /* Check if at least eNB is registered with one MME */ - if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) { - registered_enb++; - } + /* Check if at least eNB is registered with one MME */ + if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) { + registered_enb++; + } - /* Check if all register eNB requests have been processed */ - if (register_enb_pending == 0) { - if (registered_enb == enb_nb) { - /* If all eNB are registered, start L2L1 task */ - MessageDef *msg_init_p; + /* Check if all register eNB requests have been processed */ + if (register_enb_pending == 0) { + if (registered_enb == enb_nb) { + /* If all eNB are registered, start L2L1 task */ + MessageDef *msg_init_p; - msg_init_p = itti_alloc_new_message (TASK_ENB_APP, INITIALIZE_MESSAGE); - itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p); + msg_init_p = itti_alloc_new_message (TASK_ENB_APP, INITIALIZE_MESSAGE); + itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p); - } else { - LOG_W(ENB_APP, " %d eNB not associated with a MME, retrying registration in %d seconds ...\n", - enb_nb - registered_enb, ENB_REGISTER_RETRY_DELAY); + } else { + LOG_W(ENB_APP, " %d eNB not associated with a MME, retrying registration in %d seconds ...\n", + enb_nb - registered_enb, ENB_REGISTER_RETRY_DELAY); - /* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */ - if (timer_setup (ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT, - NULL, &enb_register_retry_timer_id) < 0) { - LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n"); - - sleep(ENB_REGISTER_RETRY_DELAY); - /* Restart the registration process */ - registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); - } - } - } + /* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */ + if (timer_setup (ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT, + NULL, &enb_register_retry_timer_id) < 0) { + LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n"); + sleep(ENB_REGISTER_RETRY_DELAY); + /* Restart the registration process */ + registered_enb = 0; + register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + } + } + } + } /*if (EPC_MODE_ENABLED) */ break; case S1AP_DEREGISTERED_ENB_IND: - LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p), - S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme); + if (EPC_MODE_ENABLED) { + LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p), + S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme); - /* TODO handle recovering of registration */ + /* TODO handle recovering of registration */ + } break; case TIMER_HAS_EXPIRED: - LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id); - - if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) { - /* Restart the registration process */ - registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); - } + if (EPC_MODE_ENABLED) { + LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id); + if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) { + /* Restart the registration process */ + registered_enb = 0; + register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + } + } /*if (EPC_MODE_ENABLED) */ break; -# endif + default: LOG_E(ENB_APP, "Received unexpected message %s\n", ITTI_MSG_NAME (msg_p)); diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 737397d8d4..07eb5c57c7 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -37,7 +37,7 @@ #include "UTIL/OTG/otg_externs.h" #if defined(ENABLE_ITTI) # include "intertask_interface.h" -# if defined(ENABLE_USE_MME) +# if defined(ENABLE_USE_MME) # include "s1ap_eNB.h" # include "sctp_eNB_task.h" # endif @@ -198,11 +198,10 @@ void RCconfig_flexran() /* eNB ID from configuration, as read in by RCconfig_RRC() */ if (!ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr) { // Calculate a default eNB ID -# if defined(ENABLE_USE_MME) - enb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8); -# else - enb_id = i; -# endif + if (EPC_MODE_ENABLED) + enb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8); + else + enb_id = i; } else { enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr); } @@ -546,32 +545,6 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { int32_t srb1_max_retx_threshold = 0; int32_t my_int; - - - -/* - int32_t otg_ue_id = 0; - char* otg_app_type = NULL; - char* otg_bg_traffic = NULL; - char* glog_level = NULL; - char* glog_verbosity = NULL; - char* hw_log_level = NULL; - char* hw_log_verbosity = NULL; - char* phy_log_level = NULL; - char* phy_log_verbosity = NULL; - char* mac_log_level = NULL; - char* mac_log_verbosity = NULL; - char* rlc_log_level = NULL; - char* rlc_log_verbosity = NULL; - char* pdcp_log_level = NULL; - char* pdcp_log_verbosity = NULL; - char* rrc_log_level = NULL; - char* rrc_log_verbosity = NULL; - char* udp_log_verbosity = NULL; - char* osa_log_level = NULL; - char* osa_log_verbosity = NULL; -*/ - // for no gcc warnings (void)my_int; @@ -591,15 +564,16 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { CCsParams[I].chkPptr = &(config_check_CCparams[I]); } /* get global parameters, defined outside any section in the config file */ - + config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); + num_enbs = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; AssertFatal (i 0) { RC.nb_CC = (int *)malloc((1+RC.nb_inst)*sizeof(int)); for (int i=0;idata)[i]); - } + LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)pdcp_pdu_p->data,pdcp_pdu_size, + "[MSG] PDCP DL %s PDU on rb_id %d\n",(srb_flagP)? "CONTROL" : "DATA", rb_idP); - LOG_F(PDCP,"\n"); -#endif rlc_status = rlc_data_req(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP, confirmP, pdcp_pdu_size, pdcp_pdu_p #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) ,sourceL2Id @@ -461,17 +455,8 @@ pdcp_data_ind( VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_IN); - -#ifdef PDCP_MSG_PRINT - int i=0; - LOG_F(PDCP,"[MSG] PDCP UL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP); - - for (i = 0; i < sdu_buffer_sizeP; i++) { - LOG_F(PDCP,"%02x ", ((uint8_t*)sdu_buffer_pP->data)[i]); - } - - LOG_F(PDCP,"\n"); -#endif + LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)sdu_buffer_pP->data,sdu_buffer_sizeP, + "[MSG] PDCP UL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP); #if T_TRACER if (ctxt_pP->enb_flag != ENB_FLAG_NO) diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c index a7c96a8a22..8c65e6c41c 100644 --- a/openair2/RRC/LTE/L2_interface.c +++ b/openair2/RRC/LTE/L2_interface.c @@ -43,9 +43,6 @@ #include "flexran_agent_extern.h" -//#define RRC_DATA_REQ_DEBUG -//#define DEBUG_RRC 1 - extern RAN_CONTEXT_t RC; @@ -68,10 +65,9 @@ mac_rrc_data_req( uint8_t sfn = (uint8_t)((frameP>>2)&0xff); -#ifdef DEBUG_RRC - int i; - LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id); -#endif + if (LOG_DEBUGFLAG(DEBUG_RRC)) { + LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id); + } eNB_RRC_INST *rrc; rrc_eNB_carrier_data_t *carrier; @@ -96,15 +92,15 @@ mac_rrc_data_req( RC.rrc[Mod_idP]->carrier[CC_id].SIB1, RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1); -#ifdef DEBUG_RRC - LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP); + if (LOG_DEBUGFLAG(DEBUG_RRC)) { + LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP); - for (i=0; icarrier[CC_id].sizeof_SIB1; i++) { - LOG_T(RRC,"%x.",buffer_pP[i]); - } + for (int i=0; icarrier[CC_id].sizeof_SIB1; i++) { + LOG_T(RRC,"%x.",buffer_pP[i]); + } - LOG_T(RRC,"\n"); -#endif + LOG_T(RRC,"\n"); + } /* LOG_DEBUGFLAG(DEBUG_RRC) */ return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1); } // All RFN mod 8 transmit SIB2-3 in SF 5 @@ -113,15 +109,15 @@ mac_rrc_data_req( RC.rrc[Mod_idP]->carrier[CC_id].SIB23, RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23); -#ifdef DEBUG_RRC - LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP); + if (LOG_DEBUGFLAG(DEBUG_RRC)) { + LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP); - for (i=0; icarrier[CC_id].sizeof_SIB23; i++) { - LOG_T(RRC,"%x.",buffer_pP[i]); - } + for (int i=0; icarrier[CC_id].sizeof_SIB23; i++) { + LOG_T(RRC,"%x.",buffer_pP[i]); + } - LOG_T(RRC,"\n"); -#endif + LOG_T(RRC,"\n"); + } /* LOG_DEBUGFLAG(DEBUG_RRC) */ return(RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23); } else { return(0); @@ -193,20 +189,17 @@ mac_rrc_data_req( RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area], RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]); -#ifdef DEBUG_RRC - LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP); + if (LOG_DEBUGFLAG(DEBUG_RRC)) { + LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP); - for (i=0; icarrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) { - LOG_T(RRC,"%x.",buffer_pP[i]); - } + for (int i=0; icarrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) { + LOG_T(RRC,"%x.",buffer_pP[i]); + } - LOG_T(RRC,"\n"); -#endif + LOG_T(RRC,"\n"); + } /* LOG_DEBUGFLAG(DEBUG_RRC) */ - return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]); - // } - //else - //return(0); + return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]); } #endif // #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) diff --git a/openair2/RRC/LTE/L2_interface_ue.c b/openair2/RRC/LTE/L2_interface_ue.c index d3527b8a17..3b7219af42 100644 --- a/openair2/RRC/LTE/L2_interface_ue.c +++ b/openair2/RRC/LTE/L2_interface_ue.c @@ -42,7 +42,6 @@ #endif //#define RRC_DATA_REQ_DEBUG -//#define DEBUG_RRC 1 @@ -61,10 +60,7 @@ mac_rrc_data_req_ue( //-------------------------------------------------------------------------- { -#ifdef DEBUG_RRC - int i; - LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id); -#endif + LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id); #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c index cdfc1ac0f3..3ad955928a 100644 --- a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c +++ b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c @@ -136,7 +136,7 @@ uint8_t do_MIB_NB_IoT( carrier->MIB_NB_IoT, 100); if(enc_rval.encoded <= 0) { - LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n", + LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded); } @@ -394,7 +394,7 @@ uint8_t do_SIB1_NB_IoT(uint8_t Mod_id, int CC_id, 100); if (enc_rval.encoded > 0){ - LOG_F(RRC,"ASN1 message encoding failed (%s, %lu)!\n", + LOG_E(RRC,"ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded); } @@ -897,7 +897,7 @@ uint8_t do_RRCConnectionSetup_NB_IoT( 100); if (enc_rval.encoded <= 0) { - LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n", + LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded); } @@ -948,7 +948,7 @@ uint8_t do_SecurityModeCommand_NB_IoT( buffer, 100); if (enc_rval.encoded <= 0) { - LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n", + LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded); } @@ -1010,7 +1010,7 @@ uint8_t do_UECapabilityEnquiry_NB_IoT( buffer, 100); if (enc_rval.encoded <= 0) { - LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n", + LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded); } @@ -1105,7 +1105,7 @@ uint16_t do_RRCConnectionReconfiguration_NB_IoT( buffer, RRC_BUF_SIZE); if (enc_rval.encoded <= 0) { - LOG_F(RRC, "ASN1 message encoding failed %s, %li\n", + LOG_E(RRC, "ASN1 message encoding failed %s, %li\n", enc_rval.failed_type->name, enc_rval.encoded); } @@ -1152,7 +1152,7 @@ uint8_t do_RRCConnectionReestablishmentReject_NB_IoT( buffer, 100); if (enc_rval.encoded <= 0) { - LOG_F(RRC,"ASN1 message encoding failed (%s, %lu)!\n", + LOG_E(RRC,"ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded); } @@ -1223,7 +1223,7 @@ uint8_t do_RRCConnectionReject_NB_IoT( buffer, 100); if (enc_rval.encoded <= 0) { - LOG_F(RRC, "ASN1 message encoding failed (%s, %ld)!\n", + LOG_E(RRC, "ASN1 message encoding failed (%s, %ld)!\n", enc_rval.failed_type->name, enc_rval.encoded); } @@ -1351,7 +1351,7 @@ uint8_t do_RRCConnectionReestablishment_NB_IoT( RRC_BUF_SIZE); if (enc_rval.encoded <= 0) { - LOG_F(RRC, "ASN1 message encoding failed (%s, %li)!\n", + LOG_E(RRC, "ASN1 message encoding failed (%s, %li)!\n", enc_rval.failed_type->name, enc_rval.encoded); } diff --git a/openair2/RRC/LTE/rrc_UE.c b/openair2/RRC/LTE/rrc_UE.c index c23bf12d52..8f25cd6287 100644 --- a/openair2/RRC/LTE/rrc_UE.c +++ b/openair2/RRC/LTE/rrc_UE.c @@ -5558,9 +5558,9 @@ void *rrc_control_socket_thread_fct(void *arg) //process the message switch (sl_ctrl_msg_recv->type) { case SESSION_INIT_REQ: -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - LOG_UI(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + LOG_UI(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type); + } //TODO: get SL_UE_STATE from lower layer LOG_I(RRC,"Send UEStateInformation to ProSe App \n"); @@ -5579,12 +5579,12 @@ LOG_DEBUG_END exit(EXIT_FAILURE); } -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; - ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; - LOG_UI(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type); - LOG_UI(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; + ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; + LOG_UI(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type); + LOG_UI(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state); + } /* if (enable_notification > 0) { //create thread to send status notification (for testing purpose, status notification will be sent e.g., every 20 seconds) pthread_t notification_thread; @@ -5599,12 +5599,12 @@ LOG_DEBUG_END sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id; groupL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id; -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - LOG_UI(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); - LOG_UI(RRC,"[GroupCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id); - LOG_UI(RRC,"[GroupCommunicationEstablishReq] group Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id); - LOG_UI(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress)); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + LOG_UI(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); + LOG_UI(RRC,"[GroupCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id); + LOG_UI(RRC,"[GroupCommunicationEstablishReq] group Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id); + LOG_UI(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress)); + } //store sourceL2Id/groupL2Id UE_rrc_inst[module_id].sourceL2Id = sourceL2Id; @@ -5764,20 +5764,20 @@ LOG_DEBUG_END exit(EXIT_FAILURE); } -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; - ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; - LOG_UI(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type); - LOG_UI(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; + ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; + LOG_UI(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type); + LOG_UI(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id); + } break; case GROUP_COMMUNICATION_RELEASE_REQ: printf("-----------------------------------\n"); -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); - LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); + LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id); + } //reset groupL2ID from MAC LAYER UE_rrc_inst[module_id].groupL2Id = 0x00000000; sourceL2Id = UE_rrc_inst[module_id].sourceL2Id; @@ -5849,11 +5849,11 @@ LOG_DEBUG_END sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.sourceL2Id; destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.destinationL2Id; -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - LOG_UI(RRC,"[DirectCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); - LOG_UI(RRC,"[DirectCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id); - LOG_UI(RRC,"[DirectCommunicationEstablishReq] destination Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + LOG_UI(RRC,"[DirectCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); + LOG_UI(RRC,"[DirectCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id); + LOG_UI(RRC,"[DirectCommunicationEstablishReq] destination Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id); + } //store sourceL2Id/destinationL2Id UE_rrc_inst[module_id].sourceL2Id = sourceL2Id; @@ -6013,27 +6013,27 @@ LOG_DEBUG_END } -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; - ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; - LOG_UI(RRC,"[DirectCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type); - LOG_UI(RRC,"[DirectCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; + ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; + LOG_UI(RRC,"[DirectCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type); + LOG_UI(RRC,"[DirectCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id); + } break; case PC5S_ESTABLISH_REQ: - type = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type; - sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id; -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - LOG_UI(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); - LOG_UI(RRC,"[PC5EstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type); //RX/TX - LOG_UI(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id); -LOG_DEBUG_END + type = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type; + sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id; + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + LOG_UI(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); + LOG_UI(RRC,"[PC5EstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type); //RX/TX + LOG_UI(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id); + } if (type > 0) { destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id; -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) - LOG_UI(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id); -LOG_DEBUG_END + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ + LOG_UI(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id); + } } //store sourceL2Id/destinationL2Id @@ -6244,9 +6244,9 @@ LOG_DEBUG_END case PC5_DISCOVERY_MESSAGE: -LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) + if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){ LOG_UI(RRC,"[PC5DiscoveryMessage] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); -LOG_DEBUG_END + } //prepare SL_Discovery buffer if (UE_rrc_inst) { memcpy((void*)&UE_rrc_inst[module_id].SL_Discovery[0].Tx_buffer.Payload[0], (void*)&sl_ctrl_msg_recv->sidelinkPrimitive.pc5_discovery_message.payload[0], PC5_DISCOVERY_PAYLOAD_SIZE); diff --git a/openair2/RRC/LTE/rrc_common.c b/openair2/RRC/LTE/rrc_common.c index d18c43d6cf..cf0196441e 100644 --- a/openair2/RRC/LTE/rrc_common.c +++ b/openair2/RRC/LTE/rrc_common.c @@ -43,7 +43,6 @@ #include "rrc_eNB_UE_context.h" #include "common/ran_context.h" -#define DEBUG_RRC 1 extern RAN_CONTEXT_t RC; extern UE_MAC_INST *UE_mac_inst; diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index b0b444084c..e34758843d 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -839,11 +839,6 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s* protocol_ctxt_t ctxt; -#if !defined(ENABLE_USE_MME) - module_id_t ue_module_id; - /* avoid gcc warnings */ - (void)ue_module_id; -#endif rnti_t rnti = ue_context_pP->ue_context.rnti; if (enb_mod_idP >= NB_eNB_INST) { LOG_I(RRC, "eNB inst invalid (%d/%d) for UE %x!\n",enb_mod_idP, NB_eNB_INST,rnti); @@ -858,20 +853,21 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s* PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, enb_mod_idP, ENB_FLAG_YES, rnti, 0, 0,enb_mod_idP); LOG_W(RRC, "[eNB %d] Removing UE RNTI %x\n", enb_mod_idP, rnti); -#if defined(ENABLE_USE_MME) - if((ue_context_pP->ue_context.ul_failure_timer >= 20000) && - (mac_eNB_get_rrc_status(enb_mod_idP,rnti) >= RRC_CONNECTED)) { - LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti); - rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost - /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered) - * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before - * triggering the S1 UE Context Release Request procedure - * in order to allow the UE to perform the NAS recovery - * procedure, see TS 23.401 [17]. - */ - return; + if(EPC_MODE_ENABLED) { + + if((ue_context_pP->ue_context.ul_failure_timer >= 20000) && + (mac_eNB_get_rrc_status(enb_mod_idP,rnti) >= RRC_CONNECTED)) { + LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti); + rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost + /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered) + * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before + * triggering the S1 UE Context Release Request procedure + * in order to allow the UE to perform the NAS recovery + * procedure, see TS 23.401 [17]. + */ + return; } -#endif + } // add UE info to freeList LOG_I(RRC, "put UE %x into freeList\n", rnti); put_UE_in_freelist(enb_mod_idP, rnti, 1); @@ -1018,17 +1014,13 @@ rrc_eNB_process_RRCConnectionSetupComplete( T(T_ENB_RRC_CONNECTION_SETUP_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); -#if defined(ENABLE_USE_MME) - if (EPC_MODE_ENABLED == 1) { // Forward message to S1AP layer rrc_eNB_send_S1AP_NAS_FIRST_REQ( ctxt_pP, ue_context_pP, rrcConnectionSetupComplete); - } else -#endif - { + } else { // RRC loop back (no S1AP), send SecurityModeCommand to UE rrc_eNB_generate_SecurityModeCommand( ctxt_pP, @@ -1058,16 +1050,8 @@ rrc_eNB_generate_SecurityModeCommand( ue_context_pP->ue_context.ciphering_algorithm, ue_context_pP->ue_context.integrity_algorithm); -#ifdef RRC_MSG_PRINT - uint16_t i=0; - LOG_F(RRC,"[MSG] RRC Security Mode Command\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - - LOG_F(RRC,"\n"); -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Security Mode Command\n"); LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d)\n", @@ -1166,9 +1150,6 @@ rrc_eNB_generate_RRCConnectionReject( ) //----------------------------------------------------------------------------- { -#ifdef RRC_MSG_PRINT - int cnt; -#endif T(T_ENB_RRC_CONNECTION_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); @@ -1177,15 +1158,10 @@ rrc_eNB_generate_RRCConnectionReject( do_RRCConnectionReject(ctxt_pP->module_id, (uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRCConnectionReject\n"); - - for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { - LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->Srb0.Tx_buffer.Payload)[cnt]); - } - - LOG_F(RRC,"\n"); -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC, + (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload), + RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size, + "[MSG] RRCConnectionReject\n"); MSC_LOG_TX_MESSAGE( MSC_RRC_ENB, @@ -1230,17 +1206,11 @@ rrc_eNB_generate_RRCConnectionReestablishment( rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), SRB_configList, &ue_context_pP->ue_context.physicalConfigDedicated); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRCConnectionReestablishment\n"); - - for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { - LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload)[cnt]); - } - - LOG_F(RRC,"\n"); -#endif - + LOG_DUMPMSG(RRC,DEBUG_RRC, + (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload), + RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size, + "[MSG] RRCConnectionReestablishment\n" + ); // configure SRB1 for UE if (*SRB_configList != NULL) { @@ -1356,10 +1326,6 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( struct SRB_ToAddMod *SRB2_config = NULL; struct DRB_ToAddMod *DRB_config = NULL; int i = 0; -# if defined(ENABLE_USE_MME) - int j = 0; - hashtable_rc_t h_rc; -#endif uint8_t buffer[RRC_BUF_SIZE]; uint16_t size; MeasObjectToAddModList_t *MeasObj_list = NULL; @@ -1450,60 +1416,62 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( ue_context_pP->ue_context.Srb1.Active = 1; //ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = 2; -# if defined(ENABLE_USE_MME) - rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL; - uint16_t ue_initial_id = ue_context_pP->ue_context.ue_initial_id; - uint32_t eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id; - eNB_RRC_INST *rrc_instance_p = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]; - if (eNB_ue_s1ap_id > 0) { - h_rc = hashtable_get(rrc_instance_p->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&rrc_ue_s1ap_ids_p); - if (h_rc == HASH_TABLE_OK) { - rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; + if (EPC_MODE_ENABLED) { + hashtable_rc_t h_rc; + int j; + rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL; + uint16_t ue_initial_id = ue_context_pP->ue_context.ue_initial_id; + uint32_t eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id; + eNB_RRC_INST *rrc_instance_p = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]; + if (eNB_ue_s1ap_id > 0) { + h_rc = hashtable_get(rrc_instance_p->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&rrc_ue_s1ap_ids_p); + if (h_rc == HASH_TABLE_OK) { + rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; + } } - } - if (ue_initial_id != 0) { - h_rc = hashtable_get(rrc_instance_p->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&rrc_ue_s1ap_ids_p); - if (h_rc == HASH_TABLE_OK) { - rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; + if (ue_initial_id != 0) { + h_rc = hashtable_get(rrc_instance_p->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&rrc_ue_s1ap_ids_p); + if (h_rc == HASH_TABLE_OK) { + rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; + } } - } - gtpv1u_enb_create_tunnel_req_t create_tunnel_req; + gtpv1u_enb_create_tunnel_req_t create_tunnel_req; - /* Save e RAB information for later */ - memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req)); + /* Save e RAB information for later */ + memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req)); - for (j = 0, i = 0; i < NB_RB_MAX; i++) { - if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED || ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_DONE) { - create_tunnel_req.eps_bearer_id[j] = ue_context_pP->ue_context.e_rab[i].param.e_rab_id; - create_tunnel_req.sgw_S1u_teid[j] = ue_context_pP->ue_context.e_rab[i].param.gtp_teid; + for ( j = 0, i = 0; i < NB_RB_MAX; i++) { + if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED || ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_DONE) { + create_tunnel_req.eps_bearer_id[j] = ue_context_pP->ue_context.e_rab[i].param.e_rab_id; + create_tunnel_req.sgw_S1u_teid[j] = ue_context_pP->ue_context.e_rab[i].param.gtp_teid; - memcpy(&create_tunnel_req.sgw_addr[j], - &ue_context_pP->ue_context.e_rab[i].param.sgw_addr, - sizeof(transport_layer_addr_t)); - j++; + memcpy(&create_tunnel_req.sgw_addr[j], + &ue_context_pP->ue_context.e_rab[i].param.sgw_addr, + sizeof(transport_layer_addr_t)); + j++; + } } - } - create_tunnel_req.rnti = ctxt_pP->rnti; // warning put zero above - create_tunnel_req.num_tunnels = j; + create_tunnel_req.rnti = ctxt_pP->rnti; // warning put zero above + create_tunnel_req.num_tunnels = j; - gtpv1u_update_s1u_tunnel( - ctxt_pP->instance, - &create_tunnel_req, - reestablish_rnti); -#endif + gtpv1u_update_s1u_tunnel( + ctxt_pP->instance, + &create_tunnel_req, + reestablish_rnti); + } /* EPC_MODE_ENABLED */ /* Update RNTI in ue_context */ ue_context_pP->ue_id_rnti = ctxt_pP->rnti; // here ue_id_rnti is just a key, may be something else ue_context_pP->ue_context.rnti = ctxt_pP->rnti; -# if defined(ENABLE_USE_MME) - uint8_t send_security_mode_command = FALSE; - rrc_pdcp_config_security( - ctxt_pP, - ue_context_pP, - send_security_mode_command); - LOG_D(RRC, "set security successfully \n"); -#endif + if(EPC_MODE_ENABLED) { + uint8_t send_security_mode_command = FALSE; + rrc_pdcp_config_security( + ctxt_pP, + ue_context_pP, + send_security_mode_command); + LOG_D(RRC, "set security successfully \n"); + } // Measurement ID list MeasId_list = CALLOC(1, sizeof(*MeasId_list)); memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); @@ -1869,15 +1837,9 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( , (SCellToAddMod_r10_t*)NULL #endif ); + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size, + "[MSG] RRC Connection Reconfiguration\n"); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif #if defined(ENABLE_ITTI) @@ -1977,9 +1939,6 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject( ) //----------------------------------------------------------------------------- { -#ifdef RRC_MSG_PRINT - int cnt; -#endif int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); if(UE_id != -1){ RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; @@ -1997,15 +1956,11 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject( do_RRCConnectionReestablishmentReject(ctxt_pP->module_id, (uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRCConnectionReestablishmentReject\n"); + LOG_DUMPMSG(RRC,DEBUG_RRC, + (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload), + RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size, + "[MSG] RRCConnectionReestablishmentReject\n"); - for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { - LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload)[cnt]); - } - - LOG_F(RRC,"\n"); -#endif MSC_LOG_TX_MESSAGE( MSC_RRC_ENB, @@ -2336,15 +2291,8 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co #endif ); + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Connection Reconfiguration\n"); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif #if defined(ENABLE_ITTI) @@ -2606,15 +2554,8 @@ rrc_eNB_modify_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* cons #endif ); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size, + "[MSG] RRC Connection Reconfiguration\n"); #if defined(ENABLE_ITTI) @@ -2731,15 +2672,8 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration_release( const protocol_ #endif ); ue_context_pP->ue_context.e_rab_release_command_flag = 1; - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size, + "[MSG] RRC Connection Reconfiguration\n"); #if defined(ENABLE_ITTI) /* Free all NAS PDUs */ @@ -3460,15 +3394,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons , (SCellToAddMod_r10_t*)NULL #endif ); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size, + "[MSG] RRC Connection Reconfiguration\n"); #if defined(ENABLE_ITTI) @@ -4052,15 +3979,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt , (SCellToAddMod_r10_t*)NULL #endif ); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size, + "[MSG] RRC Connection Reconfiguration\n"); #if defined(ENABLE_ITTI) @@ -5438,11 +5358,9 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( #ifdef PDCP_USE_NETLINK int oip_ifup = 0; int dest_ip_offset = 0; - module_id_t ue_module_id = -1; /* avoid gcc warnings */ (void)oip_ifup; (void)dest_ip_offset; - (void)ue_module_id; #endif uint8_t *kRRCenc = NULL; @@ -5585,6 +5503,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( ctxt_pP->module_id + 1); // fourth octet if (oip_ifup == 0) { // interface is up --> send a config the DRB + module_id_t ue_module_id; dest_ip_offset = 8; LOG_I(OIP, "[eNB %d] Config the oai%d to send/receive pkt on DRB %ld to/from the protocol stack\n", @@ -5754,16 +5673,10 @@ rrc_eNB_generate_RRCConnectionSetup( SRB_configList, &ue_context_pP->ue_context.physicalConfigDedicated); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Setup\n"); - - for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { - LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->Srb0.Tx_buffer.Payload)[cnt]); - } - - LOG_F(RRC,"\n"); - ////////////////////////////////// -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC, + (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload), + RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size, + "[MSG] RRC Connection Setup\n"); // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE @@ -6111,15 +6024,10 @@ rrc_eNB_decode_ccch( T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reestablishment Request\n"); + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Srb_info->Rx_buffer.Payload), + Srb_info->Rx_buffer.payload_size, + "[MSG] RRC Connection Reestablishment Request\n"); - for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]); - } - - LOG_F(RRC,"\n"); -#endif LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) --> RRC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); @@ -6336,15 +6244,10 @@ rrc_eNB_decode_ccch( T(T_ENB_RRC_CONNECTION_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Request\n"); + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Srb_info->Rx_buffer.Payload), + Srb_info->Rx_buffer.payload_size, + "[MSG] RRC Connection Request\n"); - for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]); - } - - LOG_F(RRC,"\n"); -#endif LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB --- MAC_DATA_IND (rrcConnectionRequest on SRB0) --> RRC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); @@ -6631,36 +6534,7 @@ rrc_eNB_decode_dcch( sdu_sizeP, 0, 0); - /* -#if defined(ENABLE_ITTI) -# if defined(DISABLE_ITTI_XER_PRINT) - { - MessageDef *message_p; - message_p = itti_alloc_new_message(TASK_RRC_ENB, RRC_UL_DCCH_MESSAGE); - memcpy(&message_p->ittiMsg, (void *)ul_dcch_msg, sizeof(RrcUlDcchMessage)); - - itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, message_p); - } -# else - { - char message_string[10000]; - size_t message_string_size; - - if ((message_string_size = - xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg)) >= 0) { - MessageDef *msg_p; - - msg_p = itti_alloc_new_message_sized(TASK_RRC_ENB, RRC_UL_DCCH, message_string_size + sizeof(IttiMsgText)); - msg_p->ittiMsg.rrc_ul_dcch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_ul_dcch.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, msg_p); - } - } -# endif -#endif - */ { for (i = 0; i < sdu_sizeP; i++) { LOG_T(RRC, "%x.", Rx_sdu[i]); @@ -6714,15 +6588,9 @@ rrc_eNB_decode_dcch( LOG_I(RRC, "Processing RRCConnectionReconfigurationComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); break; } -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration Complete\n"); + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Rx_sdu),sdu_sizeP, + "[MSG] RRC Connection Reconfiguration Complete\n"); - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, MSC_RRC_UE, @@ -6745,42 +6613,42 @@ rrc_eNB_decode_dcch( RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) { /*NN: revise the condition */ /*FK: left the condition as is for the case MME is used (S1 mode) but setting dedicated_DRB = 1 otherwise (noS1 mode) so that no second RRCReconfiguration message activationg more DRB is sent as this causes problems with the nasmesh driver.*/ -#if defined(ENABLE_USE_MME) - if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){ - dedicated_DRB = 1; - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - //clear - int16_t UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); - if(UE_id == -1){ - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReconfigurationComplete without rnti %x, fault\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti); - break; - } - if(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag == 1){ - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld) C-RNTI Complete\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - dedicated_DRB = 2; - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 0; - } - } else { - dedicated_DRB = 0; - ue_context_p->ue_context.Status = RRC_RECONFIGURED; - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - } - ue_context_p->ue_context.reestablishment_xid = -1; -#else - dedicated_DRB = 1; - ue_context_p->ue_context.Status = RRC_RECONFIGURED; - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); -#endif + if (EPC_MODE_ENABLED) { + if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){ + dedicated_DRB = 1; + LOG_I(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); + //clear + int16_t UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); + if(UE_id == -1){ + LOG_E(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReconfigurationComplete without rnti %x, fault\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti); + break; + } + if(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag == 1){ + LOG_I(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld) C-RNTI Complete\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); + dedicated_DRB = 2; + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 0; + } + } else { + dedicated_DRB = 0; + ue_context_p->ue_context.Status = RRC_RECONFIGURED; + LOG_I(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); + } + ue_context_p->ue_context.reestablishment_xid = -1; + } else { + dedicated_DRB = 1; + ue_context_p->ue_context.Status = RRC_RECONFIGURED; + LOG_I(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); + } rrc_eNB_process_RRCConnectionReconfigurationComplete( ctxt_pP, @@ -6795,7 +6663,6 @@ rrc_eNB_decode_dcch( } } #if defined(ENABLE_ITTI) -# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED == 1) { if (dedicated_DRB == 1){ // rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP, @@ -6867,8 +6734,6 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { // ue_context_p->ue_context.e_rab[0].status = E_RAB_STATUS_ESTABLISHED; rrc_eNB_reconfigure_DRBs(ctxt_pP,ue_context_p); } - -#endif #endif break; @@ -6876,15 +6741,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reestablishment Complete\n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP, + "[MSG] RRC Connection Reestablishment Complete\n"); MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, @@ -6963,15 +6821,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { LOG_I(RRC, "Processing RRCConnectionSetupComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); break; } -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection SetupComplete\n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP, + "[MSG] RRC Connection SetupComplete\n"); MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, @@ -7023,15 +6874,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { LOG_I(RRC, "Processing securityModeComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); break; } -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Security Mode Complete\n"); + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP, + "[MSG] RRC Security Mode Complete\n"); - for (i = 0; i < sdu_sizeP; i++) eNB->pusch_vars[UE_id]{ - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, @@ -7068,15 +6913,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { T(T_ENB_RRC_SECURITY_MODE_FAILURE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Security Mode Failure\n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP, + "[MSG] RRC Security Mode Failure\n"); MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, @@ -7112,15 +6950,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { LOG_I(RRC, "Processing ueCapabilityInformation UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); break; } -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC UECapablility Information \n"); - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP, + "[MSG] RRC UECapablility Information\n"); MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, @@ -7174,22 +7006,22 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { ue_context_p->ue_context.UE_Capability = 0; } -#if defined(ENABLE_USE_MME) + if (EPC_MODE_ENABLED) { - if (EPC_MODE_ENABLED == 1) { - rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(ctxt_pP, - ue_context_p, - ul_dcch_msg); + if (EPC_MODE_ENABLED == 1) { + rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(ctxt_pP, + ue_context_p, + ul_dcch_msg); + } + } else { + ue_context_p->ue_context.nb_of_e_rabs = 1; + for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++){ + ue_context_p->ue_context.e_rab[i].status = E_RAB_STATUS_NEW; + ue_context_p->ue_context.e_rab[i].param.e_rab_id = 1+i; + ue_context_p->ue_context.e_rab[i].param.qos.qci=9; + } + ue_context_p->ue_context.setup_e_rabs =ue_context_p->ue_context.nb_of_e_rabs; } -#else - ue_context_p->ue_context.nb_of_e_rabs = 1; - for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++){ - ue_context_p->ue_context.e_rab[i].status = E_RAB_STATUS_NEW; - ue_context_p->ue_context.e_rab[i].param.e_rab_id = 1+i; - ue_context_p->ue_context.e_rab[i].param.qos.qci=9; - } - ue_context_p->ue_context.setup_e_rabs =ue_context_p->ue_context.nb_of_e_rabs; -#endif rrc_eNB_generate_defaultRRCConnectionReconfiguration(ctxt_pP, ue_context_p, @@ -7212,16 +7044,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { } LOG_D(RRC,"[MSG] RRC UL Information Transfer \n"); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC UL Information Transfer \n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif - + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP, + "[MSG] RRC UL Information Transfer \n"); MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, @@ -7233,15 +7057,11 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { ue_context_p->ue_context.rnti, sdu_sizeP); -#if defined(ENABLE_USE_MME) - if (EPC_MODE_ENABLED == 1) { rrc_eNB_send_S1AP_UPLINK_NAS(ctxt_pP, ue_context_p, ul_dcch_msg); } - -#endif break; case UL_DCCH_MessageType__c1_PR_counterCheckResponse: @@ -7307,15 +7127,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { //case UL_DCCH_MessageType__messageClassExtension__c2_PR_sidelinkUEInformation_r12: //SidelinkUEInformation LOG_I(RRC,"THINH [UL_DCCH_MessageType__messageClassExtension_PR_c2]\n"); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] SidelinkUEInformation\n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif + LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP, + "[MSG] RRC SidelinkUEInformation \n"); MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c index 36e0645795..60b3c55c79 100644 --- a/openair2/RRC/LTE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c @@ -945,16 +945,8 @@ rrc_eNB_process_S1AP_DOWNLINK_NAS( S1AP_DOWNLINK_NAS (msg_p).nas_pdu.length, S1AP_DOWNLINK_NAS (msg_p).nas_pdu.buffer); -#ifdef RRC_MSG_PRINT - int i=0; - LOG_F(RRC,"[MSG] RRC DL Information Transfer\n"); + LOG_DUMPMSG(RRC,DEBUG_RRC,buffer,length,"[MSG] RRC DL Information Transfer\n"); - for (i = 0; i < length; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - - LOG_F(RRC,"\n"); -#endif /* * switch UL or DL NAS message without RRC piggybacked to SRB2 if active. */ diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c index 391e448deb..4a790b8806 100644 --- a/targets/COMMON/create_tasks.c +++ b/targets/COMMON/create_tasks.c @@ -60,7 +60,7 @@ int create_tasks(uint32_t enb_nb) } } -# if defined(ENABLE_USE_MME) + if (EPC_MODE_ENABLED) { if (enb_nb > 0) { if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) { LOG_E(SCTP, "Create task for SCTP failed\n"); @@ -84,7 +84,7 @@ int create_tasks(uint32_t enb_nb) } } -# endif + } /* if (EPC_MODE_ENABLED) */ if (enb_nb > 0) { LOG_I(RRC,"Creating RRC eNB Task\n"); diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index a0339e8f0f..e7593b8fa8 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -1882,13 +1882,13 @@ void *ru_thread_synch(void *arg) { LOG_I(PHY,"Estimated sync_pos %d, peak_val %d => timing offset %d\n",sync_pos,peak_val,ru->rx_offset); -LOG_M_BEGIN(RU) - if ((peak_val > 300000) && (sync_pos > 0)) { - LOG_M("ru_sync.m","sync",(void*)&sync_corr[0],fp->samples_per_tti*5,1,2); - LOG_M("ru_rx.m","rxs",&(ru->eNB_list[0]->common_vars.rxdata[0][0]),fp->samples_per_tti*10,1,1); - exit(-1); - } -LOG_M_END + if (LOG_DEBUGFLAG(RU)) { + if ((peak_val > 300000) && (sync_pos > 0)) { + LOG_M("ru_sync.m","sync",(void*)&sync_corr[0],fp->samples_per_tti*5,1,2); + LOG_M("ru_rx.m","rxs",&(ru->eNB_list[0]->common_vars.rxdata[0][0]),fp->samples_per_tti*10,1,1); + exit(-1); + } + } ru->in_synch=1; } } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index e84f99e67f..c74cd3b443 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -788,7 +788,7 @@ int stop_L1L2(module_id_t enb_id) oai_exit = 1; if (!RC.ru) { - LOG_F(ENB_APP, "no RU configured\n"); + LOG_UI(ENB_APP, "no RU configured\n"); return -1; } @@ -967,7 +967,7 @@ int main( int argc, char **argv ) #if defined(ENABLE_ITTI) - printf("ITTI init\n"); + printf("ITTI init, useMME: %i\n" ,EPC_MODE_ENABLED); itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info); // initialize mscgen log after ITTI diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index a2a12f9dd9..bf0abf1507 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -831,17 +831,17 @@ int main( int argc, char **argv ) set_taus_seed (0); - set_log(HW, OAILOG_DEBUG, 1); - set_log(PHY, OAILOG_INFO, 1); - set_log(MAC, OAILOG_INFO, 1); - set_log(RLC, OAILOG_INFO, 1); - set_log(PDCP, OAILOG_INFO, 1); - set_log(OTG, OAILOG_INFO, 1); - set_log(RRC, OAILOG_INFO, 1); + set_log(HW, OAILOG_DEBUG ); + set_log(PHY, OAILOG_INFO ); + set_log(MAC, OAILOG_INFO ); + set_log(RLC, OAILOG_INFO ); + set_log(PDCP, OAILOG_INFO ); + set_log(OTG, OAILOG_INFO ); + set_log(RRC, OAILOG_INFO ); #if defined(ENABLE_ITTI) - set_log(SIM, OAILOG_INFO, 1); + set_log(SIM, OAILOG_INFO ); # if defined(ENABLE_USE_MME) - set_log(NAS, OAILOG_INFO, 1); + set_log(NAS, OAILOG_INFO ); # endif #endif From 24f8fcf346fba9c70ee5b7efb23dcbcf817264c3 Mon Sep 17 00:00:00 2001 From: frtabu Date: Thu, 23 Aug 2018 11:33:39 +0200 Subject: [PATCH 099/128] Use common log mechanism in layer 3, mapping specific macros to common ones and extending common log utilities to support specific layer3 requirements --- cmake_targets/CMakeLists.txt | 2 - common/config/config_cmdline.c | 6 +- common/utils/LOG/log.c | 98 +++---- common/utils/LOG/log.h | 54 ++-- common/utils/T/T_messages.txt | 21 ++ common/utils/itti/signals.c | 2 +- common/utils/itti/timer.c | 2 +- common/utils/telnetsrv/telnetsrv_proccmd.c | 50 ++-- openair1/PHY/INIT/lte_parms.c | 2 +- openair1/PHY/LTE_ESTIMATION/lte_sync_time.c | 4 +- .../PHY/LTE_ESTIMATION/lte_ue_measurements.c | 2 +- openair1/PHY/LTE_REFSIG/lte_dl_uespec.c | 2 +- openair1/PHY/LTE_TRANSPORT/prach.c | 10 +- openair1/PHY/TOOLS/lte_dfts.c | 39 ++- openair1/PHY/defs_L1_NB_IoT.h | 2 +- openair1/PHY/defs_UE.h | 2 +- openair1/SCHED_UE/phy_procedures_lte_ue.c | 10 +- .../CONTROL_MODULES/MAC/flexran_agent_mac.c | 2 +- .../CONTROL_MODULES/RRC/flexran_agent_rrc.c | 2 +- openair2/ENB_APP/enb_app.c | 2 +- openair2/ENB_APP/enb_config.c | 37 --- openair2/ENB_APP/enb_paramdef.h | 5 - openair2/ENB_APP/flexran_agent.h | 2 +- openair2/ENB_APP/flexran_agent_common.c | 2 +- openair2/ENB_APP/flexran_agent_handler.c | 2 +- openair2/ENB_APP/flexran_agent_ran_api.h | 2 +- openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 5 +- openair2/RRC/LTE/MESSAGES/asn1_msg.c | 73 +++-- openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c | 54 ++-- openair2/RRC/LTE/rrc_UE.c | 34 +-- openair2/RRC/LTE/rrc_eNB.c | 25 +- openair2/RRC/LTE/rrc_eNB_S1AP.c | 37 +-- openair2/X2AP/x2ap_common.h | 1 - openair3/NAS/COMMON/UTIL/nas_log.c | 273 ------------------ openair3/NAS/COMMON/UTIL/nas_log.h | 53 +--- openair3/NAS/UE/EMM/SAP/emm_fsm.c | 3 +- openair3/S1AP/s1ap_common.c | 19 +- openair3/S1AP/s1ap_common.h | 13 +- openair3/UTILS/log.c | 43 --- openair3/UTILS/log.h | 37 --- targets/COMMON/create_tasks.c | 2 +- targets/COMMON/create_tasks_ue.c | 2 +- targets/RT/USER/lte-softmodem.h | 2 +- targets/RT/USER/lte-uesoftmodem.c | 15 - 44 files changed, 291 insertions(+), 764 deletions(-) delete mode 100644 openair3/NAS/COMMON/UTIL/nas_log.c delete mode 100644 openair3/UTILS/log.c delete mode 100644 openair3/UTILS/log.h diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 5efb13594f..7ad0a2d620 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1382,7 +1382,6 @@ include_directories(${NFAPI_USER_DIR}) add_library(CN_UTILS ${OPENAIR3_DIR}/UTILS/conversions.c ${OPENAIR3_DIR}/UTILS/enum_string.c - ${OPENAIR3_DIR}/UTILS/log.c ${OPENAIR3_DIR}/UTILS/mcc_mnc_itu.c ) @@ -1557,7 +1556,6 @@ set(libnas_ies_OBJS set (libnas_utils_OBJS ${NAS_SRC}COMMON/UTIL/device.c ${NAS_SRC}COMMON/UTIL/memory.c - ${NAS_SRC}COMMON/UTIL/nas_log.c ${NAS_SRC}COMMON/UTIL/nas_timer.c ${NAS_SRC}COMMON/UTIL/socket.c ${NAS_SRC}COMMON/UTIL/stty.c diff --git a/common/config/config_cmdline.c b/common/config/config_cmdline.c index 8b3026c22b..c9b1c32378 100644 --- a/common/config/config_cmdline.c +++ b/common/config/config_cmdline.c @@ -38,7 +38,7 @@ #include "config_userapi.h" -void parse_stringlist(paramdef_t *cfgoptions, char *val) +int parse_stringlist(paramdef_t *cfgoptions, char *val) { char *atoken; char *tokctx; @@ -63,7 +63,7 @@ int numelt=0; printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]); atoken=strtok_r(NULL, ",",&tokctx); } - cfgoptions->numelt=numelt; + return (cfgoptions->numelt > 0); } int processoption(paramdef_t *cfgoptions, char *value) @@ -95,7 +95,7 @@ char defbool[2]="1"; break; case TYPE_STRINGLIST: - parse_stringlist(cfgoptions,tmpval); + optisset=parse_stringlist(cfgoptions,tmpval); break; case TYPE_UINT32: case TYPE_INT32: diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index 0eecd655d1..7a840f22e2 100644 --- a/common/utils/LOG/log.c +++ b/common/utils/LOG/log.c @@ -235,14 +235,13 @@ int write_file_matlab(const char *fname,const char *vname,void *data,int length, void log_getconfig(log_t *g_log) { char *gloglevel = NULL; int consolelog ; - int level; paramdef_t logparams_defaults[] = LOG_GLOBALPARAMS_DESC; paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS]; paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS]; paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)]; - paramdef_t logparams_genfile[sizeof(log_maskmap)/sizeof(mapping)]; + paramdef_t logparams_dump[sizeof(log_maskmap)/sizeof(mapping)]; int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX); if (ret <0) { @@ -296,37 +295,37 @@ void log_getconfig(log_t *g_log) { config_get( logparams_logfile, MAX_LOG_PREDEF_COMPONENTS,CONFIG_STRING_LOG_PREFIX); /* now set the log levels and infile option, according to what we read */ for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) { - level = map_str_to_int(log_level_names, *(logparams_level[i].strptr)); - set_log(i, level); + g_log->log_component[i].level = map_str_to_int(log_level_names, *(logparams_level[i].strptr)); + set_log(i, g_log->log_component[i].level); if (*(logparams_logfile[i].uptr) == 1) set_component_filelog(i); } -/* build then read the debug and genfile parameter array */ +/* build then read the debug and dump parameter array */ for (int i=0;log_maskmap[i].name != NULL ; i++) { - sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name); - sprintf(logparams_genfile[i].optname, LOG_CONFIG_GENFILE_FORMAT, log_maskmap[i].name); + sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name); + sprintf(logparams_dump[i].optname, LOG_CONFIG_DUMP_FORMAT, log_maskmap[i].name); logparams_debug[i].defuintval = 0; logparams_debug[i].type = TYPE_UINT; logparams_debug[i].paramflags = PARAMFLAG_BOOL; logparams_debug[i].uptr = NULL; logparams_debug[i].chkPptr = NULL; logparams_debug[i].numelt = 0; - logparams_genfile[i].defuintval = 0; - logparams_genfile[i].type = TYPE_UINT; - logparams_genfile[i].paramflags = PARAMFLAG_BOOL; - logparams_genfile[i].uptr = NULL; - logparams_genfile[i].chkPptr = NULL; - logparams_genfile[i].numelt = 0; + logparams_dump[i].defuintval = 0; + logparams_dump[i].type = TYPE_UINT; + logparams_dump[i].paramflags = PARAMFLAG_BOOL; + logparams_dump[i].uptr = NULL; + logparams_dump[i].chkPptr = NULL; + logparams_dump[i].numelt = 0; } config_get( logparams_debug,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX); - config_get( logparams_genfile,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX); + config_get( logparams_dump,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX); /* set the debug mask according to the debug parameters values */ for (int i=0; log_maskmap[i].name != NULL ; i++) { if (*(logparams_debug[i].uptr) ) g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value; - if (*(logparams_genfile[i].uptr) ) - g_log->genfile_mask = g_log->genfile_mask | log_maskmap[i].value; + if (*(logparams_dump[i].uptr) ) + g_log->dump_mask = g_log->dump_mask | log_maskmap[i].value; } /* log globally enabled/disabled */ set_glog_onlinelog(consolelog); @@ -349,10 +348,9 @@ int computed_compidx=compidx; } if (computed_compidx >= 0 && computed_compidx log_component[computed_compidx].name = strdup(name); - g_log->log_component[computed_compidx].savedlevel = LOG_ERR; g_log->log_component[computed_compidx].stream = stdout; g_log->log_component[computed_compidx].filelog = 0; - g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/.%s rounded to ^2 */ + g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/.%s */ sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext); } else { fprintf(stderr,"{LOG} %s %d Couldn't register componemt %s\n",__FILE__,__LINE__,name); @@ -415,19 +413,15 @@ int logInit (void) register_log_component("SCTP","",SCTP); - register_log_component("RRH","",RRH); - - + register_log_component("X2AP","",X2AP); + register_log_component("LOADER","log",LOADER); + register_log_component("ASN","log",ASN); + for (int i=0 ; log_level_names[i].name != NULL ; i++) + g_log->level2string[i] = toupper(log_level_names[i].name[0]); // uppercased first letter of level name - g_log->level2string[OAILOG_ERR] = "E"; // ERROR - g_log->level2string[OAILOG_WARNING] = "W"; // WARNING - g_log->level2string[OAILOG_INFO] = "I"; //INFO - g_log->level2string[OAILOG_DEBUG] = "D"; // DEBUG -// g_log->level2string[OAILOG_FILE] = "F"; // file - g_log->level2string[OAILOG_TRACE] = "T"; // TRACE @@ -459,11 +453,19 @@ int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ; } } +int inline log_header(char *log_buffer, int buffsize, int comp, int level,const char *format) { + char threadname[PR_SET_NAME]; +return snprintf(log_buffer, buffsize , "%s%s[%s]%c %s %s", + log_level_highlight_end[level], + ( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]), + g_log->log_component[comp].name, + ( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:' '), + ( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""), + format); +} void logRecord_mt(const char *file, const char *func, int line, int comp, int level, const char* format, ... ) { - - char threadname[PR_SET_NAME]; char log_buffer[MAX_LOG_TOTAL]; va_list args; @@ -472,16 +474,7 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, int le - - - snprintf(log_buffer, MAX_LOG_TOTAL , "%s%s[%s]%s %s %s", - log_level_highlight_end[level], - ( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]), - g_log->log_component[comp].name, - ( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:""), - ( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""), - format); - + log_header(log_buffer,MAX_LOG_TOTAL ,comp, level,format); g_log->log_component[comp].vprint(g_log->log_component[comp].stream,log_buffer, args); va_end(args); @@ -492,20 +485,23 @@ void log_dump(int component, void *buffer, int buffsize,int datatype, const char va_list args; char *wbuf; + switch(datatype) { case LOG_DUMP_DOUBLE: - wbuf=malloc((buffsize * 10) + 64 ); + wbuf=malloc((buffsize * 10) + 64 + MAX_LOG_TOTAL); break; case LOG_DUMP_CHAR: default: - wbuf=malloc((buffsize * 3 ) + 64 ); + wbuf=malloc((buffsize * 3 ) + 64 + MAX_LOG_TOTAL); break; - } - va_start(args, format); - g_log->log_component[component].vprint(g_log->log_component[component].stream,format, args); - va_end(args); - if (wbuf != NULL) { - int pos=0; + } + if (wbuf != NULL) { + va_start(args, format); + int pos=log_header(wbuf,MAX_LOG_TOTAL ,component, OAILOG_INFO,""); + int pos2=vsprintf(wbuf+pos,format, args); + pos=pos+pos2; + va_end(args); + for (int i=0; i= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS), component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS); - DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_ERR), level, NUM_LOG_LEVEL, + DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_DISABLE), level, NUM_LOG_LEVEL, OAILOG_ERR); - + if ( g_log->log_component[component].level != OAILOG_DISABLE ) + g_log->log_component[component].savedlevel = g_log->log_component[component].level; g_log->log_component[component].level = level; - g_log->log_component[component].savedlevel = level; return 0; } @@ -557,7 +553,7 @@ void set_glog_onlinelog(int enable) g_log->log_component[c].print = fprintf; g_log->log_component[c].stream = stdout; } else { - g_log->log_component[c].level = -1; + g_log->log_component[c].level = OAILOG_DISABLE; } } } diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index 7b2764b30c..767c1dbb35 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -81,14 +81,14 @@ extern "C" { * @ingroup _macro * @brief LOG defines 9 levels of messages for users. Importance of these levels decrease gradually from 0 to 8 * @{*/ +# define OAILOG_DISABLE -1 /*!< \brief disable all LOG messages, cannot be used in LOG macros, use only in LOG module */ +# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */ +# define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */ +# define OAILOG_INFO 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */ +# define OAILOG_DEBUG 3 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */ +# define OAILOG_TRACE 4 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/ -# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */ -# define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */ -# define OAILOG_INFO 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */ -# define OAILOG_DEBUG 3 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */ -# define OAILOG_TRACE 4 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/ - -#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG */ +#define NUM_LOG_LEVEL 5 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/ /* @}*/ @@ -142,21 +142,27 @@ extern "C" { #define DEBUG_RRC (1<<6) #define DEBUG_PDCP (1<<7) #define DEBUG_DFT (1<<8) +#define DEBUG_ASN1 (1<<9) #define DEBUG_CTRLSOCKET (1<<10) +#define DEBUG_SECURITY (1<<11) +#define DEBUG_NAS (1<<12) #define UE_TIMING (1<<20) #define LOG_MASKMAP_INIT {\ {"PRACH", DEBUG_PRACH},\ {"RU", DEBUG_RU},\ - {"LTEESTIM", DEBUG_LTEESTIM},\ - {"CTRLSOCKET", DEBUG_CTRLSOCKET},\ {"UE_PHYPROC", DEBUG_UE_PHYPROC},\ + {"LTEESTIM", DEBUG_LTEESTIM},\ {"DLCELLSPEC", DEBUG_DLCELLSPEC},\ {"ULSCH", DEBUG_ULSCH},\ {"RRC", DEBUG_RRC},\ {"PDCP", DEBUG_PDCP},\ {"DFT", DEBUG_DFT},\ + {"ASN1", DEBUG_ASN1},\ + {"CTRLSOCKET", DEBUG_CTRLSOCKET},\ + {"SECURITY", DEBUG_SECURITY},\ + {"NAS", DEBUG_NAS},\ {"UE_TIMING", UE_TIMING},\ {NULL,-1}\ } @@ -166,8 +172,8 @@ extern "C" { #define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B) #define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B)) -#define SET_LOG_DUMP(B) g_log->genfile_mask = (g_log->genfile_mask | B) -#define CLEAR_LOG_DUMP(B) g_log->genfile_mask = (g_log->genfile_mask & (~B)) +#define SET_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask | B) +#define CLEAR_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask & (~B)) @@ -208,9 +214,9 @@ typedef enum { TMR, USIM, LOCALIZE, - RRH, X2AP, LOADER, + ASN, MAX_LOG_PREDEF_COMPONENTS, } comp_name_t; @@ -243,11 +249,11 @@ typedef struct { typedef struct { log_component_t log_component[MAX_LOG_COMPONENTS]; - char* level2string[NUM_LOG_LEVEL]; + char level2string[NUM_LOG_LEVEL]; int flag; char* filelog_name; uint64_t debug_mask; - uint64_t genfile_mask; + uint64_t dump_mask; } log_t; @@ -318,7 +324,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int #define LOG_CONFIG_LEVEL_FORMAT "%s_log_level" #define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile" #define LOG_CONFIG_DEBUG_FORMAT "%s_debug" -#define LOG_CONFIG_GENFILE_FORMAT "%s_genfile" +#define LOG_CONFIG_DUMP_FORMAT "%s_dump" #define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\ " nocolor: disable color usage in log messages\n"\ @@ -356,13 +362,13 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int # define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0) # define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0) /* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */ -# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->genfile_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */ +# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */ # define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */ /* bitmask dependant macros, to isolate debugging code */ # define LOG_DEBUGFLAG(D) (g_log->debug_mask & D) /* bitmask dependant macros, to generate debug file such as matlab file or message dump */ -# define LOG_GENFILEFLAG(D) (g_log->genfile_mask & D) +# define LOG_DUMPFLAG(D) (g_log->dump_mask & D) # define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)/* */ /* define variable only used in LOG macro's */ # define LOG_VAR(A,B) A B @@ -376,12 +382,13 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int # define LOG_DUMPMSG(c, b, s, x...) /* */ # define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...) # define LOG_DEBUGFLAG(D) ( 0 ) -# define LOG_GENFILEFLAG(D) ( 0 ) +# define LOG_DUMPFLAG(D) ( 0 ) # define LOG_M(file, vector, data, len, dec, format) # define LOG_VAR(A,B) # endif /* T_TRACER */ /* avoid warnings for variables only used in LOG macro's but set outside debug section */ -#define LOG_USEDINLOG_VAR(A,B) __attribute__((unused)) A B +#define GCC_NOTUSED __attribute__((unused)) +#define LOG_USEDINLOG_VAR(A,B) GCC_NOTUSED A B /* unfiltered macros, usefull for simulators or messages at init time, before log is configured */ #define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0) @@ -394,9 +401,12 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int * @ingroup _macro * @brief Macro of some useful functions defined by LOG * @{*/ -#define LOG_ENTER(c) do {LOG_T(c, "Entering\n");}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */ -#define LOG_EXIT(c) do {LOG_T(c,"Exiting\n"); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */ -#define LOG_RETURN(c,x) do {uint32_t __rv;__rv=(unsigned int)(x);LOG_T(c,"Returning %08x\n", __rv);return((typeof(x))__rv);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */ +#define LOG_ENTER(c) do {LOG_T(c, "Entering %s\n",__FUNCTION__);}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */ +#define LOG_END(c) do {LOG_T(c, "End of %s\n",__FUNCTION__);}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */ +#define LOG_EXIT(c) do { LOG_END(c); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */ +#define LOG_RETURN(c,r) do {LOG_T(c,"Leaving %s (rc = %08lx)\n", __FUNCTION__ , (unsigned long)(r) );return(r);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */ + + /* @}*/ static __inline__ uint64_t rdtsc(void) { diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index 676f329a0e..2bce891ac9 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -750,6 +750,27 @@ ID = LEGACY_OSA_TRACE GROUP = ALL:LEGACY_OSA:LEGACY_GROUP_TRACE:LEGACY FORMAT = string,log +ID = LEGACY_ASN_INFO + DESC = ASN legacy logs - info level + GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_INFO:LEGACY + FORMAT = string,log +ID = LEGACY_ASN_ERROR + DESC = ASN legacy logs - error level + GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_ERROR:LEGACY + FORMAT = string,log +ID = LEGACY_ASN_WARNING + DESC = ASN legacy logs - warning level + GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_WARNING:LEGACY + FORMAT = string,log +ID = LEGACY_ASN_DEBUG + DESC = ASN legacy logs - debug level + GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_DEBUG:LEGACY + FORMAT = string,log +ID = LEGACY_ASN_TRACE + DESC = ASN legacy logs - trace level + GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_TRACE:LEGACY + FORMAT = string,log + ID = LEGACY_SIM_INFO DESC = SIM legacy logs - info level GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_INFO:LEGACY diff --git a/common/utils/itti/signals.c b/common/utils/itti/signals.c index 5dd667ae65..f8dfe2d49b 100644 --- a/common/utils/itti/signals.c +++ b/common/utils/itti/signals.c @@ -39,7 +39,7 @@ #include "assertions.h" #include "signals.h" -#include "log.h" +#include "common/utils/LOG/log.h" #if defined (LOG_D) && defined (LOG_E) # define SIG_DEBUG(x, args...) LOG_D(RRC, x, ##args) diff --git a/common/utils/itti/timer.c b/common/utils/itti/timer.c index 6327aeacfb..720cf70d1f 100644 --- a/common/utils/itti/timer.c +++ b/common/utils/itti/timer.c @@ -32,7 +32,7 @@ #include "assertions.h" #include "intertask_interface.h" #include "timer.h" -#include "log.h" +#include "common/utils/LOG/log.h" #include "queue.h" #if defined (LOG_D) && defined (LOG_E) diff --git a/common/utils/telnetsrv/telnetsrv_proccmd.c b/common/utils/telnetsrv/telnetsrv_proccmd.c index 3576fd004a..ba1b011513 100644 --- a/common/utils/telnetsrv/telnetsrv_proccmd.c +++ b/common/utils/telnetsrv/telnetsrv_proccmd.c @@ -221,7 +221,7 @@ int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt) for (int i=0; log_maskmap[i].name != NULL ; i++) { prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name, ((g_log->debug_mask & log_maskmap[i].value)?"Y":"N"), - ((g_log->genfile_mask & log_maskmap[i].value)?"Y":"N") ); + ((g_log->dump_mask & log_maskmap[i].value)?"Y":"N") ); } } if (strcasestr(buf,"config") != NULL) { @@ -343,7 +343,7 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); for (int i=0; log_options[i].name != NULL; i++) prnt("%s ",log_options[i].name); prnt("\n\n"); - prnt("Available debug or genfile options: \n "); + prnt("Available debug and dump options: \n "); for (int i=0; log_maskmap[i].name != NULL; i++) prnt("%s ",log_maskmap[i].name); prnt("\n\n"); @@ -402,31 +402,36 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); if (logparam != NULL) free(logparam); if (opt != NULL) free(opt); } else if ( s == 3 && logsubcmd != NULL) { - int level, enable, filelog; + int level, enable,filelog; char *tmpstr=NULL; char *logparam=NULL; int l; - level = enable = filelog = -1; + level = OAILOG_DISABLE - 1; + filelog = -1; + enable=-1; l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr); if (debug > 0) prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr)); if (l ==2 ) { if (strcmp(logparam,"level") == 0) { level=map_str_to_int(log_level_names,tmpstr); - if (level < 0) prnt("level %s unknown\n",tmpstr); + if (level < 0) { + prnt("level %s unknown\n",tmpstr); + level=OAILOG_DISABLE - 1; + } } else { prnt("%s%s unknown log sub command \n",logparam, tmpstr); } } else if (l ==1 ) { if (strcmp(logparam,"enable") == 0) { - enable = 1; + enable=1; } else if (strcmp(logparam,"disable") == 0) { - enable = 0; + level=OAILOG_DISABLE; } else if (strcmp(logparam,"file") == 0) { - filelog = 1 ; + filelog = 1 ; } else if (strcmp(logparam,"nofile") == 0) { - filelog = 0 ; + filelog = 0 ; } else { prnt("%s%s unknown log sub command \n",logparam, tmpstr); } @@ -436,27 +441,18 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); if (logparam != NULL) free(logparam); if (tmpstr != NULL) free(tmpstr); for (int i=idx1; i<=idx2 ; i++) { - if ( level >= 0 || enable >= 0) { - if (level < 0) { - level=g_log->log_component[i].level; - } - if (enable < 0) { - level= -1; - } - set_log(i, level); - } - if ( filelog == 1 ) { + if (level >= OAILOG_DISABLE) + set_log(i, level); + else if ( enable == 1) + set_log(i,g_log->log_component[i].savedlevel); + else if ( filelog == 1 ) { set_component_filelog(i); - } - if ( filelog == 0 ) { + } else if ( filelog == 0 ) { close_component_filelog(i); } - prnt("log level comp %i %s set to %s (%s) output: %s\n", - i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name), - map_int_to_str(log_level_names,g_log->log_component[i].level), - ((g_log->log_component[i].level>=0)?"enabled":"disabled"), - ((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout")); - } + + } + proccmd_show("loglvl",debug,prnt); } else { prnt("%s: wrong log command...\n",buf); } diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c index 3b8a26125d..03f226c637 100644 --- a/openair1/PHY/INIT/lte_parms.c +++ b/openair1/PHY/INIT/lte_parms.c @@ -20,7 +20,7 @@ */ #include "phy_init.h" -#include "log.h" +#include "common/utils/LOG/log.h" uint16_t dl_S_table_normal[10]={3,9,10,11,12,3,9,10,11,6}; uint16_t dl_S_table_extended[10]={3,8,9,10,3,8,9,5,0,0}; diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c index aca5a5303d..87abdfe19c 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c @@ -274,7 +274,7 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com - if ( LOG_GENFILEFLAG(DEBUG_LTEESTIM)){ + if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){ LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1); LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1); LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1); @@ -460,7 +460,7 @@ int lte_sync_time(int **rxdata, ///rx data in time domain LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2); - if ( LOG_GENFILEFLAG(DEBUG_LTEESTIM)){ + if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){ static int debug_cnt; if (debug_cnt == 0) { LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index bf22802145..2e4f3e6036 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -23,7 +23,7 @@ #include "PHY/defs_UE.h" #include "PHY/phy_extern_ue.h" -#include "log.h" +#include "common/utils/LOG/log.h" #include "PHY/sse_intrin.h" //#define k1 1000 diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c index 2c5240e143..1b9c17133c 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c @@ -36,7 +36,7 @@ #include "lte_refsig.h" #include "PHY/defs_eNB.h" #include "PHY/defs_UE.h" -#include "log.h" +#include "common/utils/LOG/log.h" #include "PHY/impl_defs_top.h" //extern unsigned int lte_gold_table[3][20][2][14]; diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index 99563ce133..ec0b7db4ad 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -202,7 +202,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, // DJP - indexing below in subframe zero takes us off the beginning of the array??? prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset]; - if (LOG_GENFILEFLAG(PRACH)){ + if (LOG_DUMPFLAG(PRACH)){ int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti); int8_t dbEn0 = dB_fixed(en0); int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB; @@ -585,7 +585,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, } memset(prachF, 0, sizeof(int16_t)*2*1024 ); - if (LOG_GENFILEFLAG(PRACH)) { + if (LOG_DUMPFLAG(PRACH)) { if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1); LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1); LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1); @@ -619,7 +619,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[(i<<1)] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>10; } - if (LOG_GENFILEFLAG(PRACH)) { + if (LOG_DUMPFLAG(PRACH)) { if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1); } @@ -662,7 +662,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, } }// preamble_index - if (LOG_GENFILEFLAG(PRACH)) { + if (LOG_DUMPFLAG(PRACH)) { int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); if (en>60) { k = (12*n_ra_prb) - 6*fp->N_RB_UL; @@ -689,7 +689,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, } } - } /* LOG_GENFILEFLAG(PRACH) */ + } /* LOG_DUMPFLAG(PRACH) */ if (eNB) stop_meas(&eNB->rx_prach); } diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index ca1a6d1262..7e24af179d 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -2035,7 +2035,7 @@ static inline void transpose4_ooff(int16x4_t *x,int16x4_t *y,int off) #endif -// 16-point optimized DEBUG_DFT kernel +// 16-point optimized DFT kernel const static int16_t tw16[24] __attribute__((aligned(32))) = { 32767,0,30272,-12540,23169 ,-23170,12539 ,-30273, 32767,0,23169,-23170,0 ,-32767,-23170,-23170, @@ -3097,7 +3097,7 @@ void dft128(int16_t *x,int16_t *y,int scale) dft64((int16_t*)(xtmp),(int16_t*)ytmp,1); dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("dft128a.m","dfta",ytmp,64,1,1); LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/ } @@ -3149,7 +3149,7 @@ void dft128(int16_t *x,int16_t *y,int scale) } - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("dft128out.m","dft128",y,128,1,1); exit(-1); } @@ -3177,14 +3177,14 @@ void dft128(int16_t *x,int16_t *y,int scale) transpose4_ooff_simd256(x256+10,xtmp+5,8); transpose4_ooff_simd256(x256+12,xtmp+6,8); transpose4_ooff_simd256(x256+14,xtmp+7,8); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1); LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1); } dft64((int16_t*)(xtmp),(int16_t*)ytmp,1); dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1); LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1); } @@ -3220,7 +3220,7 @@ void dft128(int16_t *x,int16_t *y,int scale) y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256); } - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("dft128.m","dft",y256,128,1,1); exit(-1); } @@ -5424,7 +5424,7 @@ void dft1536(int16_t *input, int16_t *output, int scale) tmpo[1][i] = tmpo[1][i<<1]; tmpo[2][i] = tmpo[2][i<<1]; }*/ - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("dft1536out0.m","o0",tmpo[0],2048,1,1); LOG_M("dft1536out1.m","o1",tmpo[1],2048,1,1); LOG_M("dft1536out2.m","o2",tmpo[2],2048,1,1); @@ -5588,7 +5588,7 @@ void idft6144(int16_t *input, int16_t *output,int scale) idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("idft6144in.m","in",input,6144,1,1); LOG_M("idft6144out0.m","o0",tmpo[0],2048,1,1); LOG_M("idft6144out1.m","o1",tmpo[1],2048,1,1); @@ -5624,9 +5624,6 @@ void idft6144(int16_t *input, int16_t *output,int scale) } } - if (LOG_GENFILEFLAG(DEBUG_DFT)) { - LOG_M("idft6144out.m","out",output,6144,1,1); - } _mm_empty(); _m_empty(); @@ -5657,7 +5654,7 @@ void dft6144(int16_t *input, int16_t *output,int scale) tmpo[1][i] = tmpo[1][i<<1]; tmpo[2][i] = tmpo[2][i<<1]; }*/ - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("ft6144out0.m","o0",tmpo[0],2048,1,1); LOG_M("ft6144out1.m","o1",tmpo[1],2048,1,1); LOG_M("ft6144out2.m","o2",tmpo[2],2048,1,1); @@ -5722,7 +5719,7 @@ void dft12288(int16_t *input, int16_t *output,int scale) tmpo[1][i] = tmpo[1][i<<1]; tmpo[2][i] = tmpo[2][i<<1]; }*/ - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("dft12288out0.m","o0",tmpo[0],4096,1,1); LOG_M("dft12288out1.m","o1",tmpo[1],4096,1,1); LOG_M("dft12288out2.m","o2",tmpo[2],4096,1,1); @@ -5779,7 +5776,7 @@ void idft12288(int16_t *input, int16_t *output,int scale) idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale); idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("idft12288in.m","in",input,12288,1,1); LOG_M("idft12288out0.m","o0",tmpo[0],4096,1,1); LOG_M("idft12288out1.m","o1",tmpo[1],4096,1,1); @@ -5815,7 +5812,7 @@ void idft12288(int16_t *input, int16_t *output,int scale) } _mm_empty(); _m_empty(); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("idft12288out.m","out",output,6144,1,1); } } @@ -5946,7 +5943,7 @@ void dft24576(int16_t *input, int16_t *output,int scale) tmpo[1][i] = tmpo[1][i<<1]; tmpo[2][i] = tmpo[2][i<<1]; }*/ - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("dft24576out0.m","o0",tmpo[0],8192,1,1); LOG_M("dft24576out1.m","o1",tmpo[1],8192,1,1); LOG_M("dft24576out2.m","o2",tmpo[2],8192,1,1); @@ -5981,14 +5978,12 @@ void dft24576(int16_t *input, int16_t *output,int scale) } _mm_empty(); _m_empty(); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("out.m","out",output,24576,1,1); } } - - -void idft24576(int16_t *input, int16_t *output) +void idft24576(int16_t *input, int16_t *output,int scale) { int i,i2,j; uint32_t tmp[3][8192] __attribute__((aligned(32))); @@ -6006,7 +6001,7 @@ void idft24576(int16_t *input, int16_t *output) idft8192((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("idft24576in.m","in",input,24576,1,1); LOG_M("idft24576out0.m","o0",tmpo[0],8192,1,1); LOG_M("idft24576out1.m","o1",tmpo[1],8192,1,1); @@ -6042,7 +6037,7 @@ void idft24576(int16_t *input, int16_t *output) _mm_empty(); _m_empty(); - if (LOG_GENFILEFLAG(DEBUG_DFT)) { + if (LOG_DUMPFLAG(DEBUG_DFT)) { LOG_M("idft24576out.m","out",output,24576,1,1); } } diff --git a/openair1/PHY/defs_L1_NB_IoT.h b/openair1/PHY/defs_L1_NB_IoT.h index bb08d5122d..8a7c853df5 100644 --- a/openair1/PHY/defs_L1_NB_IoT.h +++ b/openair1/PHY/defs_L1_NB_IoT.h @@ -52,7 +52,7 @@ # include "COMMON/ral_messages_types.h" # include "UTIL/queue.h" # endif -# include "log.h" +# include "common/utils/LOG/log.h" # define msg(aRGS...) LOG_D(PHY, ##aRGS) # else # define msg printf diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h index f079794a34..55f8c9639a 100644 --- a/openair1/PHY/defs_UE.h +++ b/openair1/PHY/defs_UE.h @@ -93,7 +93,7 @@ # include "COMMON/ral_messages_types.h" # include "UTIL/queue.h" # endif -# include "log.h" +# include "common/utils/LOG/log.h" # define msg(aRGS...) LOG_D(PHY, ##aRGS) # else # define msg printf diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index 2b35ad936b..f8d1a3bae8 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -99,7 +99,7 @@ void get_dumpparam(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id, uint8_t void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid) { - if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)) { + if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) { unsigned int coded_bits_per_codeword; uint8_t nsymb ; @@ -131,7 +131,7 @@ void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subf void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe) { - if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)){ + if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)){ unsigned int coded_bits_per_codeword; uint8_t nsymb; @@ -234,7 +234,7 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe) { - if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)){ + if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)){ unsigned int coded_bits_per_codeword; uint8_t nsymb ; @@ -2708,7 +2708,7 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin } else { - if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)) { + if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) { LOG_E(PHY,"[UE %d] frame %d, subframe %d, Error decoding PBCH!\n", ue->Mod_id,frame_rx, subframe_rx); @@ -4906,7 +4906,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id, start_meas(&ue->generic_stat); } - if (LOG_GENFILEFLAG(DEBUG_UE_PHYPROC)) { + if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) { if(subframe_rx==5 && ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20){ //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0); //LOG_M("llr.m","llr", &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0); diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c index 0545eeb3be..549c7eaa22 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c +++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c @@ -38,7 +38,7 @@ #include "liblfds700.h" -#include "log.h" +#include "common/utils/LOG/log.h" /*Flags showing if a mac agent has already been registered*/ unsigned int mac_agent_registered[NUM_MAX_ENB]; diff --git a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c index e5e242232c..b4bf029373 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c +++ b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c @@ -31,7 +31,7 @@ #include "liblfds700.h" -#include "log.h" +#include "common/utils/LOG/log.h" /*Trigger boolean for RRC measurement*/ bool triggered_rrc = false; diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index 6f1b66c6d0..9490c3f5d8 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -35,7 +35,7 @@ #include "assertions.h" #include "common/ran_context.h" -#include "log.h" +#include "common/utils/LOG/log.h" #if defined(ENABLE_ITTI) # include "intertask_interface.h" diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 07eb5c57c7..4cca5ff8fe 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -571,26 +571,6 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { AssertFatal (i0) { @@ -2231,24 +2211,7 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) { config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); -#if defined(ENABLE_ITTI) - if (EPC_MODE_ENABLED) { - if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) { - asn_debug = 0; - asn1_xer_print = 0; - } else if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) { - asn_debug = 1; - asn1_xer_print = 1; - } else if (strcasecmp(*(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr) , ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) { - asn_debug = 1; - asn1_xer_print = 2; - } else { - asn_debug = 0; - asn1_xer_print = 0; - } - } -#endif AssertFatal (inumber_of_dci++; ul_req_index = 0; - dlsch_flag = 0; + for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){ if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){ - dlsch_flag = 1; LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index); break; } diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg.c b/openair2/RRC/LTE/MESSAGES/asn1_msg.c index 66aae4237a..3a1e7eed87 100644 --- a/openair2/RRC/LTE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LTE/MESSAGES/asn1_msg.c @@ -91,7 +91,6 @@ #define msg printf #endif -//#define XER_PRINT typedef struct xer_sprint_string_s { char *string; @@ -1353,9 +1352,9 @@ uint8_t do_SIB23(uint8_t Mod_id, } #endif -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message); + } enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message, NULL, (void*)bcch_message, @@ -1607,9 +1606,9 @@ uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_Destinatio break; } -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg); + } enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, @@ -2165,9 +2164,9 @@ do_RRCConnectionSetup( #endif -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, NULL, (void*)&dl_ccch_msg, @@ -2240,9 +2239,9 @@ do_SecurityModeCommand( dl_dcch_msg.message.choice.c1.choice.securityModeCommand.criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm = (e_SecurityAlgorithmConfig__integrityProtAlgorithm)integrityProtAlgorithm; -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message, NULL, (void*)&dl_dcch_msg, @@ -2320,9 +2319,9 @@ do_UECapabilityEnquiry( ASN_SEQUENCE_ADD(&dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list, &rat); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message, NULL, (void*)&dl_dcch_msg, @@ -2539,9 +2538,9 @@ do_RRCConnectionReconfiguration( enc_rval.failed_type->name, enc_rval.encoded); return -1; } -#ifdef XER_PRINT - xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)&dl_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)&dl_dcch_msg); + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) @@ -2742,9 +2741,9 @@ do_RRCConnectionReestablishment( rrcConnectionReestablishment->criticalExtensions.choice.c1.choice.rrcConnectionReestablishment_r8.nonCriticalExtension = NULL; -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, NULL, (void*)&dl_ccch_msg, @@ -2804,9 +2803,9 @@ do_RRCConnectionReestablishmentReject( // RRCConnectionReestablishmentReject rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8; -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, NULL, (void*)&dl_ccch_msg, @@ -2867,9 +2866,9 @@ do_RRCConnectionReject( /* let's put a wait time of 1s for the moment */ rrcConnectionReject->criticalExtensions.choice.c1.choice.rrcConnectionReject_r8.waitTime = 1; -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, NULL, (void*)&dl_ccch_msg, @@ -3061,9 +3060,9 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, */ ASN_SEQUENCE_ADD(&(*mbsfnAreaConfiguration)->pmch_InfoList_r9.list,pmch_Info_1); -#ifdef XER_PRINT - xer_fprint(stdout,&asn_DEF_MCCH_Message,(void*)mcch_message); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout,&asn_DEF_MCCH_Message,(void*)mcch_message); + } enc_rval = uper_encode_to_buffer(&asn_DEF_MCCH_Message, NULL, (void*)mcch_message, @@ -3339,9 +3338,9 @@ uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, ue_paging_identity_t ue_pagin enc_rval.failed_type->name, enc_rval.encoded); return -1; } -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_PCCH_Message, (void*)&pcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_PCCH_Message, (void*)&pcch_msg); + } return((enc_rval.encoded+7)/8); } @@ -3504,9 +3503,9 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname) } UECapability.UE_EUTRA_Capability = UE_EUTRA_Capability; -#ifdef XER_PRINT - xer_fprint(stdout,&asn_DEF_UE_EUTRA_Capability,(void *)UE_EUTRA_Capability); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout,&asn_DEF_UE_EUTRA_Capability,(void *)UE_EUTRA_Capability); + } enc_rval = uper_encode_to_buffer(&asn_DEF_UE_EUTRA_Capability, NULL, (void*)UE_EUTRA_Capability, diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c index 3ad955928a..20962f3ca1 100644 --- a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c +++ b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c @@ -382,9 +382,9 @@ uint8_t do_SIB1_NB_IoT(uint8_t Mod_id, int CC_id, ASN_SEQUENCE_ADD(&(*sib1_NB_IoT)->systemInfoValueTagList_r13->list,&systemInfoValueTagSI); -#ifdef XER_PRINT //generate xml files - xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message); + } enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB, @@ -667,9 +667,9 @@ uint8_t do_SIB23_NB_IoT(uint8_t Mod_id, ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation_r13.criticalExtensions.choice.systemInformation_r13.sib_TypeAndInfo_r13.list, sib3_NB_part); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message); + } enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB, NULL, (void*)bcch_message, @@ -887,9 +887,9 @@ uint8_t do_RRCConnectionSetup_NB_IoT( rrcConnectionSetup_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r13.radioResourceConfigDedicated_r13.physicalConfigDedicated_r13 = physicalConfigDedicated2_NB_IoT; rrcConnectionSetup_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r13.radioResourceConfigDedicated_r13.mac_MainConfig_r13 = NULL; -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB, NULL, (void*)&dl_ccch_msg_NB_IoT, @@ -939,9 +939,9 @@ uint8_t do_SecurityModeCommand_NB_IoT( = (e_SecurityAlgorithmConfig__integrityProtAlgorithm)integrityProtAlgorithm; //only changed "asn_DEF_DL_DCCH_Message_NB" -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB, NULL, (void*)&dl_dcch_msg_NB_IoT, @@ -1001,9 +1001,9 @@ uint8_t do_UECapabilityEnquiry_NB_IoT( //no ue_CapabilityRequest (list of RAT_Type) //only changed "asn_DEF_DL_DCCH_Message_NB" -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB, NULL, (void*)&dl_dcch_msg_NB_IoT, @@ -1110,9 +1110,9 @@ uint16_t do_RRCConnectionReconfiguration_NB_IoT( } //changed only asn_DEF_DL_DCCH_Message_NB -#ifdef XER_PRINT - xer_fprint(stdout,&asn_DEF_DL_DCCH_Message_NB,(void*)&dl_dcch_msg_NB_IoT); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout,&asn_DEF_DL_DCCH_Message_NB,(void*)&dl_dcch_msg_NB_IoT); + } //#if defined(ENABLE_ITTI) //# if !defined(DISABLE_XER_SPRINT)... @@ -1143,9 +1143,9 @@ uint8_t do_RRCConnectionReestablishmentReject_NB_IoT( rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8; //Only change in "asn_DEF_DL_CCCH_Message_NB" -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB, NULL, (void*)&dl_ccch_msg_NB_IoT, @@ -1214,9 +1214,9 @@ uint8_t do_RRCConnectionReject_NB_IoT( RRCConnectionReject_NB_r13_IEs__rrc_SuspendIndication_r13_true; //Only Modified "asn_DEF_DL_CCCH_Message_NB" -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT); + } enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB, NULL, (void*)&dl_ccch_msg_NB_IoT, @@ -1355,9 +1355,9 @@ uint8_t do_RRCConnectionReestablishment_NB_IoT( enc_rval.failed_type->name, enc_rval.encoded); } -#ifdef XER_PRINT - xer_fprint(stdout,&asn_DEF_DL_CCCH_Message_NB,(void*)&dl_ccch_msg_NB_IoT); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout,&asn_DEF_DL_CCCH_Message_NB,(void*)&dl_ccch_msg_NB_IoT); + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) diff --git a/openair2/RRC/LTE/rrc_UE.c b/openair2/RRC/LTE/rrc_UE.c index 8f25cd6287..362306943d 100644 --- a/openair2/RRC/LTE/rrc_UE.c +++ b/openair2/RRC/LTE/rrc_UE.c @@ -99,10 +99,6 @@ int send_ue_information = 0; // for malloc_clear #include "PHY/defs_UE.h" -//#define XER_PRINT - - - extern void pdcp_config_set_security( const protocol_ctxt_t* const ctxt_pP, pdcp_t * const pdcp_pP, @@ -733,9 +729,9 @@ int rrc_ue_decode_ccch( const protocol_ctxt_t* const ctxt_pP, const SRB_INFO* co (uint8_t*)Srb_info->Rx_buffer.Payload, 100,0,0); -#ifdef XER_PRINT - xer_fprint(stdout,&asn_DEF_DL_CCCH_Message,(void*)dl_ccch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout,&asn_DEF_DL_CCCH_Message,(void*)dl_ccch_msg); + } #if defined(ENABLE_ITTI) # if defined(DISABLE_ITTI_XER_PRINT) @@ -1931,9 +1927,9 @@ rrc_ue_process_securityModeCommand( AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n", enc_rval.failed_type->name, enc_rval.encoded); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg); + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) @@ -2042,9 +2038,9 @@ rrc_ue_process_ueCapabilityEnquiry( AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n", enc_rval.failed_type->name, enc_rval.encoded); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg); + } #if defined(ENABLE_ITTI) # if !defined(DISABLE_XER_SPRINT) @@ -2429,9 +2425,9 @@ rrc_ue_decode_dcch( (uint8_t*)Buffer, RRC_BUF_SIZE,0,0); -#ifdef XER_PRINT - xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)dl_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)dl_dcch_msg); + } #if defined(ENABLE_ITTI) # if defined(DISABLE_ITTI_XER_PRINT) @@ -4560,9 +4556,9 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB return -1; } -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_MCCH_Message, (void*)mcch); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_MCCH_Message, (void*)mcch); + } if (mcch->message.present == MCCH_MessageType_PR_c1) { LOG_D(RRC,"[UE %d] Found mcch message \n", diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index e34758843d..cac49690af 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -100,7 +100,6 @@ #include "SIMULATION/TOOLS/sim.h" // for taus -//#define XER_PRINT extern RAN_CONTEXT_t RC; @@ -6898,9 +6897,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), DCCH, sdu_sizeP); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); + } // confirm with PDCP about the security mode for DCCH //rrc_pdcp_config_req (enb_mod_idP, frameP, 1,CONFIG_ACTION_SET_SECURITY_MODE, (ue_mod_idP * NB_RB_MAX) + DCCH, 0x77); // continue the procedure @@ -6932,9 +6931,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), DCCH, sdu_sizeP); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); + } // cancel the security mode in PDCP // followup with the remaining procedure @@ -6974,9 +6973,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), DCCH, sdu_sizeP); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); + } LOG_I(RRC, "got UE capabilities for UE %x\n", ctxt_pP->rnti); if (ue_context_p->ue_context.UE_Capability) { LOG_I(RRC, "freeing old UE capabilities for UE %x\n", ctxt_pP->rnti); @@ -6993,9 +6992,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions. choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list. array[0]->ueCapabilityRAT_Container.size, 0, 0); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UE_EUTRA_Capability, ue_context_p->ue_context.UE_Capability); -#endif + if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) { + xer_fprint(stdout, &asn_DEF_UE_EUTRA_Capability, ue_context_p->ue_context.UE_Capability); + } if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Failed to decode UE capabilities (%zu bytes)\n", diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c index 60b3c55c79..7d24228602 100644 --- a/openair2/RRC/LTE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c @@ -467,43 +467,20 @@ rrc_pdcp_config_security( &kRRCint); #if !defined(USRP_REC_PLAY) -#define DEBUG_SECURITY 1 + SET_LOG_DUMP(DEBUG_SECURITY) ; #endif -#if defined (DEBUG_SECURITY) -#undef msg -#define msg printf - if (print_keys ==1 ) { - print_keys =0; - int i; - msg("\nKeNB:"); + if ( LOG_DUMPFLAG( DEBUG_SECURITY ) ) { + if (print_keys ==1 ) { + print_keys =0; - for(i = 0; i < 32; i++) { - msg("%02x", ue_context_pP->ue_context.kenb[i]); + LOG_DUMPMSG(RRC, DEBUG_SECURITY, ue_context_pP->ue_context.kenb, 32,"\nKeNB:" ); + LOG_DUMPMSG(RRC, DEBUG_SECURITY, kRRCenc, 32,"\nKRRCenc:" ); + LOG_DUMPMSG(RRC, DEBUG_SECURITY, kRRCint, 32,"\nKRRCint:" ); } - - msg("\n"); - - msg("\nKRRCenc:"); - - for(i = 0; i < 32; i++) { - msg("%02x", kRRCenc[i]); - } - - msg("\n"); - - msg("\nKRRCint:"); - - for(i = 0; i < 32; i++) { - msg("%02x", kRRCint[i]); - } - - msg("\n"); - } -#endif //DEBUG_SECURITY key = PDCP_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, DCCH, SRB_FLAG_YES); h_rc = hashtable_get(pdcp_coll_p, key, (void**)&pdcp_p); diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h index 1a4889f0f0..d2ff3b40d1 100644 --- a/openair2/X2AP/x2ap_common.h +++ b/openair2/X2AP/x2ap_common.h @@ -57,7 +57,6 @@ #define FALSE 0 #endif -extern int asn_debug; extern int asn1_xer_print; #if defined(ENB_MODE) diff --git a/openair3/NAS/COMMON/UTIL/nas_log.c b/openair3/NAS/COMMON/UTIL/nas_log.c deleted file mode 100644 index 6af90c4be8..0000000000 --- a/openair3/NAS/COMMON/UTIL/nas_log.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/***************************************************************************** -Source nas_log.c - -Version 0.1 - -Date 2012/02/28 - -Product NAS stack - -Subsystem Utilities - -Author Frederic Maurel - -Description Usefull logging functions - -*****************************************************************************/ - -#include "nas_log.h" -#if defined(NAS_BUILT_IN_UE) && defined(NAS_UE) -int nas_log_func_indent; -#else -#include // stderr, sprintf, fprintf, vfprintf -#include // va_list, va_start, va_end -#include // strlen - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/* ANSI escape codes for colored display */ -#define LOG_BLACK "\033[30m" -#define LOG_RED "\033[31m" -#define LOG_GREEN "\033[32m" -#define LOG_YELLOW "\033[33m" -#define LOG_BLUE "\033[34m" -#define LOG_MAGENTA "\033[35m" -#define LOG_CYAN "\033[36m" -#define LOG_WHITE "\033[37m" -#define LOG_END "\033[0m" -#define LOG_AUTO LOG_END - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* ------------------------ - * Internal logging context - * ------------------------ - * Internal logging context consists on: - * - The file name and the line number from where the data have been - * logged. These information are gathered into a string that will - * be displayed as a prefix of the logging trace with the format - * filename[line] - * - The severity level filter - * - The indentation level to convey FUNC logging traces - * - The data definition of each logging trace level: name and mask - * (the mask is used against the severity level filter to enable - * or disable specific logging traces) - */ -typedef struct { -#define LOG_PREFIX_SIZE 118 - char prefix[LOG_PREFIX_SIZE]; - unsigned char filter; - int indent; - const struct { - char* name; - unsigned char mask; - char* color; - } level[]; -} log_context_t; - -/* - * Definition of the logging context - */ -static log_context_t _log_context = { - "", /* prefix */ - 0x00, /* filter */ - 0, /* indent */ - { - { "DEBUG", NAS_LOG_DEBUG, LOG_GREEN }, /* DEBUG */ - { "INFO", NAS_LOG_INFO, LOG_AUTO }, /* INFO */ - { "WARNING", NAS_LOG_WARNING, LOG_BLUE }, /* WARNING */ - { "ERROR", NAS_LOG_ERROR, LOG_RED }, /* ERROR */ - { "", NAS_LOG_FUNC, LOG_AUTO }, /* FUNC_IN */ - { "", NAS_LOG_FUNC, LOG_AUTO }, /* FUNC_OUT */ - } /* level[] */ -}; - -/* Maximum number of bytes into a line of dump logging data */ -#define LOG_DUMP_LINE_SIZE 16 - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: log_init() ** - ** ** - ** Description: Initializes internal logging data ** - ** ** - ** Inputs: filter: Value of the severity level that will be ** - ** used as a filter to enable or disable ** - ** specific logging traces ** - ** Others: None ** - ** ** - ** Outputs: Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void nas_log_init(char filter) -{ - _log_context.filter = filter; -} - -/**************************************************************************** - ** ** - ** Name: log_data() ** - ** ** - ** Description: Defines internal logging data ** - ** ** - ** Inputs: filename: Name of the file from where the data have ** - ** been logged ** - ** line: Number of the line in the file ** - ** Others: None ** - ** ** - ** Outputs: Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void log_data(const char* filename, int line) -{ - int len = strlen(filename) + 2 + 1; //2:[], 1:/0 - if (line > 9999) len+=5; - else if (line > 999) len+=4; - else if (line > 99) len+=3; - else if (line > 9) len+=2; - else len+=1; - if (len > LOG_PREFIX_SIZE) { - snprintf(_log_context.prefix, LOG_PREFIX_SIZE, "%s:%d", &filename[len - LOG_PREFIX_SIZE], line); - } else { - snprintf(_log_context.prefix, LOG_PREFIX_SIZE, "%s:%d", filename, line); - } -} - -/**************************************************************************** - ** ** - ** Name: log_trace() ** - ** ** - ** Description: Displays logging data ** - ** ** - ** Inputs: severity: Severity level of the logging data ** - ** data: Formated logging data to display ** - ** Others: None ** - ** ** - ** Outputs: Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void log_trace(log_severity_t severity, const char* data, ...) -{ - int i; - - /* Sanity check */ - if (severity > LOG_SEVERITY_MAX) return; - - /* Display only authorized logging traces */ - if (_log_context.level[severity].mask & _log_context.filter) { - va_list argp; - - /* - * First, display internal logging data (logging trace prefix: file - * name and line number from where the data have been logged) and - * the severity level. - */ - fprintf(stderr, "%s%-120.118s%-10s", _log_context.level[severity].color, - _log_context.prefix, _log_context.level[severity].name); - { - /* Next, perform indentation for FUNC logging trace */ - if (severity == FUNC_OUT) { - _log_context.indent--; - } - - for (i=0; i<_log_context.indent; i++) { - fprintf(stderr, " "); - } - - if (severity == FUNC_IN) { - _log_context.indent++; - } - } - - /* Finally, display logging data */ - va_start(argp, data); - vfprintf(stderr, data, argp); - - /* Terminate with line feed character */ - fprintf(stderr, "%s\n", LOG_END); - - va_end(argp); - } -} - -/**************************************************************************** - ** ** - ** Name: log_dump() ** - ** ** - ** Description: Dump logging data ** - ** ** - ** Inputs: data: Logging data to dump ** - ** len: Number of bytes to be dumped ** - ** Others: None ** - ** ** - ** Outputs: Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void log_dump(const char* data, int len) -{ - int i; - - /* Display only authorized logging traces */ - if ( (len > 0) && (NAS_LOG_HEX & _log_context.filter) ) { - int bytes = 0; - - fprintf(stderr, "\n\t"); - - for (i=0; i < len; i++) { - fprintf(stderr, "%.2hx ", (const unsigned char) data[i]); - - /* Add new line when the number of displayed bytes exceeds - * the line's size */ - if ( ++bytes > (LOG_DUMP_LINE_SIZE - 1) ) { - bytes = 0; - fprintf(stderr, "\n\t"); - } - } - - if (bytes % LOG_DUMP_LINE_SIZE) { - fprintf(stderr, "\n"); - } - - fprintf(stderr, "\n"); - fflush(stderr); - } -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ -#endif - diff --git a/openair3/NAS/COMMON/UTIL/nas_log.h b/openair3/NAS/COMMON/UTIL/nas_log.h index c36e0795c7..b41e34c51b 100644 --- a/openair3/NAS/COMMON/UTIL/nas_log.h +++ b/openair3/NAS/COMMON/UTIL/nas_log.h @@ -95,7 +95,7 @@ typedef enum { /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#if defined(NAS_BUILT_IN_UE) && defined(NAS_UE) +#ifdef LOG_E # define LOG_TRACE(s, x, args...) \ do { \ switch (s) { \ @@ -106,54 +106,21 @@ do { \ } \ } while (0) -# define LOG_DUMP(dATA, lEN) \ -do { \ - char buffer[3*lEN + 1]; \ - int i; \ - for (i = 0; i < lEN; i++) \ - sprintf (&buffer[3*i], "%02x ", dATA[i]); \ - LOG_D(NAS, " Dump %d: %s\n", lEN, buffer); \ -} while (0) - -# define LOG_FUNC_IN \ -do { \ - LOG_D(NAS, " %s:%d %*sEntering %s()\n", __FILE__, __LINE__, nas_log_func_indent, "", __FUNCTION__); \ - nas_log_func_indent += 2; \ -} while (0) - -# define LOG_FUNC_OUT \ -do { \ - nas_log_func_indent -= 2; \ - LOG_D(NAS, " %s:%d %*sLeaving %s()\n", __FILE__, __LINE__, nas_log_func_indent, "", __FUNCTION__); \ -} while (0) - -# define LOG_FUNC_RETURN(rETURNcODE) \ -do { \ - nas_log_func_indent -= 2; \ - LOG_D(NAS, " %s:%d %*sLeaving %s(rc = %ld)\n", __FILE__, __LINE__, nas_log_func_indent, "", \ - __FUNCTION__, (long) (rETURNcODE)); \ - return (rETURNcODE); \ -} while (0) +# define LOG_DUMP(dATA, lEN) LOG_DUMPMSG(NAS, DEBUG_NAS,dATA, lEN, " Dump %d:\n", lEN) +# define LOG_FUNC_IN LOG_ENTER(NAS) +# define LOG_FUNC_OUT LOG_END(NAS) +# define LOG_FUNC_RETURN(rETURNcODE) LOG_RETURN(NAS,rETURNcODE) extern int nas_log_func_indent; #else -# define LOG_TRACE log_data(__FILE__, __LINE__); log_trace -# define LOG_DUMP(a, b) log_dump((a),(b)); +# define LOG_TRACE(s, x, args...) +# define LOG_DUMP(dATA, lEN) LOG_DUMPMSG(NAS, LOG_DUMP_CHAR,dATA, lEN, " Dump %d:\n", lEN) -# define LOG_FUNC_IN LOG_TRACE(FUNC_IN, "Entering %s()", __FUNCTION__) -# define LOG_FUNC_OUT LOG_TRACE(FUNC_OUT, "Leaving %s()", __FUNCTION__) -# define LOG_FUNC_RETURN(rETURNcODE) \ -do { \ - LOG_TRACE(FUNC_OUT, "Leaving %s(rc = %ld)", __FUNCTION__, \ - (long) (rETURNcODE)); \ - return (rETURNcODE); \ -} while(0) +# define LOG_FUNC_IN +# define LOG_FUNC_OUT +# define LOG_FUNC_RETURN(rETURNcODE) return rETURNcODE \ -void nas_log_init(char filter); -void log_data(const char* filename, int line); -void log_trace(log_severity_t severity, const char* data, ...); -void log_dump(const char* data, int len); #endif #endif /* __NAS_LOG_H__*/ diff --git a/openair3/NAS/UE/EMM/SAP/emm_fsm.c b/openair3/NAS/UE/EMM/SAP/emm_fsm.c index d614b9ec7e..5a715727ad 100644 --- a/openair3/NAS/UE/EMM/SAP/emm_fsm.c +++ b/openair3/NAS/UE/EMM/SAP/emm_fsm.c @@ -208,8 +208,7 @@ emm_fsm_state_t emm_fsm_initialize() { LOG_FUNC_IN; - LOG_FUNC_OUT; - return EMM_NULL; + LOG_FUNC_RETURN(EMM_NULL); } /**************************************************************************** diff --git a/openair3/S1AP/s1ap_common.c b/openair3/S1AP/s1ap_common.c index 7c4f970af2..d31c6e5839 100644 --- a/openair3/S1AP/s1ap_common.c +++ b/openair3/S1AP/s1ap_common.c @@ -32,26 +32,9 @@ #include "s1ap_common.h" #include "S1AP_S1AP-PDU.h" -int asn_debug = 0; + int asn1_xer_print = 0; -#if defined(EMIT_ASN_DEBUG_EXTERN) -inline void ASN_DEBUG(const char *fmt, ...) -{ - if (asn_debug) { - int adi = asn_debug_indent; - va_list ap; - va_start(ap, fmt); - fprintf(stderr, "[ASN1]"); - - while(adi--) fprintf(stderr, " "); - - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n"); - va_end(ap); - } -} -#endif void s1ap_handle_criticality(S1AP_Criticality_t criticality) { diff --git a/openair3/S1AP/s1ap_common.h b/openair3/S1AP/s1ap_common.h index 8a2faa311f..94b3e43bc6 100644 --- a/openair3/S1AP/s1ap_common.h +++ b/openair3/S1AP/s1ap_common.h @@ -31,13 +31,16 @@ #ifndef S1AP_COMMON_H_ #define S1AP_COMMON_H_ -/* Defined in asn_internal.h */ -// extern int asn_debug_indent; -extern int asn_debug; -#if defined(EMIT_ASN_DEBUG_EXTERN) -inline void ASN_DEBUG(const char *fmt, ...); +#include "common/utils/LOG/log.h" +/* replace ASN_DEBUG defined in asn_internal.h by oai tracing system + Would be cleaner to modify asn_internal.h but it seems to come + from non oai source, with BSD license, so prefer to do that here.. +*/ +#ifdef ASN_DEBUG +# undef ASN_DEBUG #endif +#define ASN_DEBUG( x... ) LOG_I(ASN, x) #include "S1AP_ProtocolIE-Field.h" #include "S1AP_S1AP-PDU.h" diff --git a/openair3/UTILS/log.c b/openair3/UTILS/log.c deleted file mode 100644 index 5ddebd415c..0000000000 --- a/openair3/UTILS/log.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include "log.h" - -/* mme log */ -int log_enabled = 0; - -int log_init(const mme_config_t *mme_config_p, - log_specific_init_t specific_init) -{ - if (mme_config_p->verbosity_level == 1) { - log_enabled = 1; - } else if (mme_config_p->verbosity_level == 2) { - log_enabled = 1; - } else { - log_enabled = 0; - } - - return specific_init(mme_config_p->verbosity_level); -} diff --git a/openair3/UTILS/log.h b/openair3/UTILS/log.h deleted file mode 100644 index 7b712df755..0000000000 --- a/openair3/UTILS/log.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include "mme_config.h" - -#ifndef LOG_H_ -#define LOG_H_ - -/* asn1c debug */ -extern int asn_debug; -extern int asn1_xer_print; -extern int fd_g_debug_lvl; - -typedef int (*log_specific_init_t)(int log_level); - -int log_init(const mme_config_t *mme_config, - log_specific_init_t specific_init); - -#endif /* LOG_H_ */ diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c index 4a790b8806..f8230928dd 100644 --- a/targets/COMMON/create_tasks.c +++ b/targets/COMMON/create_tasks.c @@ -22,7 +22,7 @@ #if defined(ENABLE_ITTI) # include "intertask_interface.h" # include "create_tasks.h" -# include "log.h" +# include "common/utils/LOG/log.h" # ifdef OPENAIR2 # if defined(ENABLE_USE_MME) diff --git a/targets/COMMON/create_tasks_ue.c b/targets/COMMON/create_tasks_ue.c index db531b0e9d..20b5979f31 100644 --- a/targets/COMMON/create_tasks_ue.c +++ b/targets/COMMON/create_tasks_ue.c @@ -22,7 +22,7 @@ #if defined(ENABLE_ITTI) # include "intertask_interface.h" # include "create_tasks.h" -# include "log.h" +# include "common/utils/LOG/log.h" # ifdef OPENAIR2 # if defined(ENABLE_USE_MME) diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index 2f8209f2d3..a1f26de5dc 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -192,7 +192,7 @@ } #define CONFIG_HLP_FLOG "Enable online log \n" -#define CONFIG_HLP_LOGL "Set the global log level, valide options: (9:trace, 8/7:debug, 6:info, 4:warn, 3:error)\n" +#define CONFIG_HLP_LOGL "Set the global log level, valide options: (4:trace, 3:debug, 2:info, 1:warn, (0:error))\n" #define CONFIG_HLP_TELN "Start embedded telnet server \n" /*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* command line parameters for LOG utility */ diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index bf0abf1507..57b1dfb105 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -830,21 +830,6 @@ int main( int argc, char **argv ) //randominit (0); set_taus_seed (0); - - set_log(HW, OAILOG_DEBUG ); - set_log(PHY, OAILOG_INFO ); - set_log(MAC, OAILOG_INFO ); - set_log(RLC, OAILOG_INFO ); - set_log(PDCP, OAILOG_INFO ); - set_log(OTG, OAILOG_INFO ); - set_log(RRC, OAILOG_INFO ); -#if defined(ENABLE_ITTI) - set_log(SIM, OAILOG_INFO ); -# if defined(ENABLE_USE_MME) - set_log(NAS, OAILOG_INFO ); -# endif -#endif - cpuf=get_cpu_freq_GHz(); pthread_cond_init(&sync_cond,NULL); From 77f70e77eaff2e29a39dc69680ea47a019d54d95 Mon Sep 17 00:00:00 2001 From: frtabu Date: Fri, 24 Aug 2018 17:40:14 +0200 Subject: [PATCH 100/128] MSC logging utility as a config option --- cmake_targets/CMakeLists.txt | 19 ++++----- cmake_targets/build_oai | 19 ++++++++- cmake_targets/nas_sim_tools/CMakeLists.txt | 1 - common/utils/LOG/log.c | 5 ++- common/utils/load_module_shlib.c | 4 +- common/utils/load_module_shlib.h | 5 ++- common/utils/msc/msc.c | 29 ++++++++++--- common/utils/msc/msc.h | 47 +++++++++++++--------- openair1/PHY/CODING/coding_load.c | 2 +- openair1/SCHED/phy_procedures_lte_eNb.c | 12 +++--- openair2/ENB_APP/NB_IoT_interface.c | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c | 12 +++--- openair3/S1AP/s1ap_eNB_handlers.c | 2 +- openair3/S1AP/s1ap_eNB_nas_procedures.c | 13 ++---- targets/ARCH/COMMON/common_lib.c | 2 +- targets/RT/USER/lte-softmodem.c | 13 +++--- targets/RT/USER/lte-softmodem.h | 2 + targets/RT/USER/lte-uesoftmodem.c | 10 +++-- 18 files changed, 122 insertions(+), 77 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 7ad0a2d620..b38bb05642 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -882,12 +882,9 @@ add_library(HASHTABLE ) include_directories(${OPENAIR_DIR}/common/utils/hashtable) -if (MESSAGE_CHART_GENERATOR) - add_library(MSC - ${OPENAIR_DIR}/common/utils/msc/msc.c - ) - set(MSC_LIB MSC) -endif() +add_library(msc MODULE ${OPENAIR_DIR}/common/utils/msc/msc.c ) +target_link_libraries (msc LFDS) + include_directories(${OPENAIR_DIR}/common/utils/msc) set(UTIL_SRC @@ -1936,7 +1933,7 @@ add_executable(lte-softmodem target_link_libraries (lte-softmodem -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 - ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 + ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl) @@ -1972,7 +1969,7 @@ add_executable(lte-softmodem-nos1 ) target_link_libraries (lte-softmodem-nos1 -Wl,--start-group - RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB} + RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${RAL_LIB} ${ITTI_LIB} ${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl ) @@ -2012,7 +2009,7 @@ add_executable(lte-uesoftmodem target_link_libraries (lte-uesoftmodem -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU - ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} + ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl) @@ -2050,7 +2047,7 @@ add_executable(lte-uesoftmodem-nos1 target_link_libraries (lte-uesoftmodem-nos1 -Wl,--start-group - RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB} + RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${RAL_LIB} ${ITTI_LIB} ${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl ) @@ -2128,7 +2125,7 @@ add_executable(test_epc_generate_scenario ${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h ) target_link_libraries (test_epc_generate_scenario - -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} + -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} ) add_executable(test_epc_play_scenario diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index c15e1e8ec7..3954827c09 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -40,7 +40,7 @@ set_openair_env gen_nvram_path=$OPENAIR_DIR/targets/bin conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf -MSC_GEN="False" +MSC_GEN=0 XFORMS="True" UE_EXPANSION="False" PRINT_STATS="False" @@ -155,6 +155,10 @@ Options Disable all LOG_* macros --build-eclipse Build eclipse project files. Paths are auto corrected by fixprj.sh +--build-telnet + Build telnet server, specify --telnetsrv on command line to start it (eNB only) +--build-msc + Build MSC tracing utility, specify --msc on command line to start it (eNB and UE) --usrp-recplay Build for I/Q record-playback modes --ue-nas-use-tun @@ -345,6 +349,10 @@ function main() { --build-telnetsrv) BUILD_TELNETSRV=1 echo_info "Build embedded telnet server" + shift ;; + --build-msc) + MSC_GEN=1 + echo_info "Build MSC tracing utility" shift ;; --usrp-recplay) USRP_REC_PLAY="True" @@ -690,6 +698,15 @@ function main() { $build_dir telnetsrv \ libtelnetsrv.so $dbin/libtelnetsrv.so + fi + # Telnet server compilation + ##################### + if [ "$MSC_GEN" = "1" ] ; then + build_dir=$lte_build_dir + compilations \ + $build_dir msc \ + libmsc.so $dbin/libmsc.so + fi # build RF device and transport protocol libraries ##################################### diff --git a/cmake_targets/nas_sim_tools/CMakeLists.txt b/cmake_targets/nas_sim_tools/CMakeLists.txt index 81e3fe4b3c..c1a0bb419b 100644 --- a/cmake_targets/nas_sim_tools/CMakeLists.txt +++ b/cmake_targets/nas_sim_tools/CMakeLists.txt @@ -27,7 +27,6 @@ set(CONF2UEDATA_LIB_SRC ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.c ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.c - ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/nas_log.c ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.c ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/TLVEncoder.c ${OPENAIR_DIR}/common/utils/utils.c diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index 7a840f22e2..c1f11c0bfd 100644 --- a/common/utils/LOG/log.c +++ b/common/utils/LOG/log.c @@ -455,13 +455,14 @@ int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ; int inline log_header(char *log_buffer, int buffsize, int comp, int level,const char *format) { char threadname[PR_SET_NAME]; -return snprintf(log_buffer, buffsize , "%s%s[%s]%c %s %s", +return snprintf(log_buffer, buffsize , "%s%s[%s]%c %s %s%s", log_level_highlight_end[level], ( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]), g_log->log_component[comp].name, ( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:' '), ( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""), - format); + format, + log_level_highlight_end[level]); } void logRecord_mt(const char *file, const char *func, int line, int comp, int level, const char* format, ... ) diff --git a/common/utils/load_module_shlib.c b/common/utils/load_module_shlib.c index c8a293f279..c0afdb0b64 100644 --- a/common/utils/load_module_shlib.c +++ b/common/utils/load_module_shlib.c @@ -118,7 +118,7 @@ int ret; return tmpstr; } -int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf) +int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf, void *autoinit_arg) { void *lib_handle; initfunc_t fpi; @@ -155,7 +155,7 @@ int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf) fpi = dlsym(lib_handle,afname); if (fpi != NULL ) { - fpi(); + fpi(autoinit_arg); } if (farray != NULL) { diff --git a/common/utils/load_module_shlib.h b/common/utils/load_module_shlib.h index 6cfd41ac78..685b3d1b65 100644 --- a/common/utils/load_module_shlib.h +++ b/common/utils/load_module_shlib.h @@ -59,7 +59,8 @@ typedef struct { /* function type of functions which may be implemented by a module */ /* 1: init function, called when loading, if found in the shared lib */ -typedef int(*initfunc_t)(void); +typedef int(*initfunc_t)(void *); + /* 2: version checking function, called when loading, if it returns -1, trigger main exec abort */ typedef int(*checkverfunc_t)(char * mainexec_version, char ** shlib_version); /* 3: get function array function, called when loading when a module doesn't provide */ @@ -83,7 +84,7 @@ loader_data_t loader_data; /*-------------------------------------------------------------------------------------------------------------*/ #else /* LOAD_MODULE_SHLIB_MAIN */ -extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf); +extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf, void *initfunc_arg); extern void * get_shlibmodule_fptr(char *modname, char *fname); extern loader_data_t loader_data; #endif /* LOAD_MODULE_SHLIB_MAIN */ diff --git a/common/utils/msc/msc.c b/common/utils/msc/msc.c index bb88b9b4b6..8ff8846b70 100644 --- a/common/utils/msc/msc.c +++ b/common/utils/msc/msc.c @@ -32,11 +32,15 @@ #include #include +#define MSC_LIBRARY +#include "msc.h" + #include "liblfds611.h" #include "intertask_interface.h" #include "timer.h" -#include "msc.h" + + #include "assertions.h" //------------------------------- @@ -67,8 +71,8 @@ void *msc_task(void *args_p) //------------------------------------------------------------------------------ { MessageDef *received_message_p = NULL; - const char *msg_name = NULL; - instance_t instance = 0; +// const char *msg_name = NULL; +// instance_t instance = 0; long timer_id; itti_mark_task_ready(TASK_MSC); @@ -88,9 +92,9 @@ void *msc_task(void *args_p) itti_receive_msg(TASK_MSC, &received_message_p); if (received_message_p != NULL) { - msg_name = ITTI_MSG_NAME (received_message_p); - instance = ITTI_MSG_INSTANCE (received_message_p); - +// msg_name = ITTI_MSG_NAME (received_message_p); +// instance = ITTI_MSG_INSTANCE (received_message_p); + switch (ITTI_MSG_ID(received_message_p)) { case TIMER_HAS_EXPIRED: { @@ -571,4 +575,17 @@ error_event: free(new_item_p); } +//------------------------------------------------------------------------------ +// function called when oai loader loads the msc shared lib +int msc_autoinit(msc_interface_t *msc_interface) +//------------------------------------------------------------------------------ + { + msc_interface->msc_init = msc_init; + msc_interface->msc_start_use = msc_start_use; + msc_interface->msc_end = msc_end; + msc_interface->msc_log_event = msc_log_event; + msc_interface->msc_log_message = msc_log_message; + msc_interface->msc_loaded = 1; + return 0; + } diff --git a/common/utils/msc/msc.h b/common/utils/msc/msc.h index 4493a5239a..78eb6cdb08 100644 --- a/common/utils/msc/msc.h +++ b/common/utils/msc/msc.h @@ -73,7 +73,23 @@ typedef enum { #define MSC_AS_TIME_ARGS(CTXT_Pp) \ (CTXT_Pp)->frame, \ (CTXT_Pp)->subframe -#if defined(MESSAGE_CHART_GENERATOR) + +typedef int(*msc_init_t)(const msc_env_t, const int ); +typedef void(*msc_start_use_t)(void ); +typedef void(*msc_end_t)(void); +typedef void(*msc_log_event_t)(const msc_proto_t,char *, ...); +typedef void(*msc_log_message_t)(const char * const, const msc_proto_t, const msc_proto_t, + const uint8_t* const, const unsigned int, char * , ...); +typedef struct msc_interface { + int msc_loaded; + msc_init_t msc_init; + msc_start_use_t msc_start_use; + msc_end_t msc_end; + msc_log_event_t msc_log_event; + msc_log_message_t msc_log_message; +} msc_interface_t; + +#ifdef MSC_LIBRARY int msc_init(const msc_env_t envP, const int max_threadsP); void msc_start_use(void); void msc_flush_messages(void); @@ -88,22 +104,17 @@ void msc_log_message( const unsigned int num_bytes, char *format, ...); -#define MSC_INIT(arg1,arg2) msc_init(arg1,arg2) -#define MSC_START_USE msc_start_use -#define MSC_END msc_end -#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) msc_log_event(mScPaRaMs, fORMAT, ##aRGS) -#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("<-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS) -#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("x-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS) -#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("->",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS) -#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("-x",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS) #else -#define MSC_INIT(arg1,arg2) -#define MSC_START_USE(mScPaRaMs) -#define MSC_END(mScPaRaMs) -#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) -#define MSC_LOG_RX_MESSAGE(mScPaRaMs, fORMAT, aRGS...) -#define MSC_LOG_RX_DISCARDED_MESSAGE(mScPaRaMs, fORMAT, aRGS...) -#define MSC_LOG_TX_MESSAGE(mScPaRaMs, fORMAT, aRGS...) -#define MSC_LOG_TX_MESSAGE_FAILED(mScPaRaMs, fORMAT, aRGS...) -#endif + +msc_interface_t msc_interface; +#define MSC_INIT(arg1,arg2) if(msc_interface.msc_loaded) msc_interface.msc_init(arg1,arg2) +#define MSC_START_USE if(msc_interface.msc_loaded) msc_interface.msc_start_use +#define MSC_END if(msc_interface.msc_loaded) msc_interface.msc_end +#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_event(mScPaRaMs, fORMAT, ##aRGS) +#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("<-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS) +#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("x-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS) +#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("->",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS) +#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("-x",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS) #endif + +#endif diff --git a/openair1/PHY/CODING/coding_load.c b/openair1/PHY/CODING/coding_load.c index a895d9648e..30b876c654 100644 --- a/openair1/PHY/CODING/coding_load.c +++ b/openair1/PHY/CODING/coding_load.c @@ -130,7 +130,7 @@ int load_codinglib(void) { shlib_fdesc[ENCODE_SSE_FPTRIDX].fname= "threegpplte_turbo_encoder_sse"; shlib_fdesc[ENCODE_C_FPTRIDX].fname= "threegpplte_turbo_encoder"; shlib_fdesc[ENCODE_INIT_SSE_FPTRIDX].fname= "init_encoder_sse"; - ret=load_module_shlib("coding",shlib_fdesc,DECODE_NUM_FPTR); + ret=load_module_shlib("coding",shlib_fdesc,DECODE_NUM_FPTR,NULL); if (ret < 0) exit_fun("Error loading coding library"); /* execute encoder/decoder init functions */ diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index a6a44c66e2..2a3f22cd51 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -347,7 +347,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, dlsch_harq->rvidx, dlsch_harq->round); } -#if defined(MESSAGE_CHART_GENERATOR_PHY) + MSC_LOG_TX_MESSAGE( MSC_PHY_ENB,MSC_PHY_UE, NULL,0, @@ -368,7 +368,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB, pmi2hex_2Ar1(dlsch_harq->pmi_alloc), dlsch_harq->rvidx, dlsch_harq->round); -#endif + if (ue_stats) ue_stats->dlsch_sliding_cnt++; @@ -1375,7 +1375,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) ulsch->harq_mask &= ~(1 << harq_pid); ulsch_harq->round = 0; } -#if defined(MESSAGE_CHART_GENERATOR_PHY) + MSC_LOG_RX_DISCARDED_MESSAGE( MSC_PHY_ENB,MSC_PHY_UE, NULL,0, @@ -1384,7 +1384,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) ulsch->rnti,harq_pid, ulsch_harq->round-1 ); -#endif + /* Mark the HARQ process to release it later if max transmission reached * (see below). @@ -1403,7 +1403,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) T(T_ENB_PHY_ULSCH_UE_ACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti), T_INT(harq_pid)); -#if defined(MESSAGE_CHART_GENERATOR_PHY) + MSC_LOG_RX_MESSAGE( MSC_PHY_ENB,MSC_PHY_UE, NULL,0, @@ -1411,7 +1411,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) frame,subframe, ulsch->rnti,harq_pid ); -#endif + #ifdef DEBUG_PHY_PROC #ifdef DEBUG_ULSCH diff --git a/openair2/ENB_APP/NB_IoT_interface.c b/openair2/ENB_APP/NB_IoT_interface.c index c4884453c2..7355233d71 100644 --- a/openair2/ENB_APP/NB_IoT_interface.c +++ b/openair2/ENB_APP/NB_IoT_interface.c @@ -43,7 +43,7 @@ int load_NB_IoT(void) { RCConfig_NbIoT_f_t RCConfig; loader_shlibfunc_t shlib_fdesc[]=NBIOT_INTERFACE_FLIST; - ret=load_module_shlib(NBIOT_MODULENAME,shlib_fdesc,sizeof(shlib_fdesc)/sizeof(loader_shlibfunc_t)); + ret=load_module_shlib(NBIOT_MODULENAME,shlib_fdesc,sizeof(shlib_fdesc)/sizeof(loader_shlibfunc_t),NULL); if (ret) { return ret; } diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c index b9e605ca24..92409d96dc 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c @@ -760,10 +760,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) 0, MSC_AS_TIME_FMT" DATA-REQ inst %u rb %u rab %u size %u", MSC_AS_TIME_ARGS(ctxt_pP), - pc5s_header.inst, - pc5s_header.rb_id, + pc5s_header->inst, + pc5s_header->rb_id, rab_id, - pc5s_header.data_size); + pc5s_header->data_size); pdcp_data_req( &ctxt, @@ -787,10 +787,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) 0, MSC_AS_TIME_FMT" DATA-REQ inst %u rb %u rab %u size %u", MSC_AS_TIME_ARGS(ctxt_pP), - pc5s_header.inst, - pc5s_header.rb_id, + pc5s_header->inst, + pc5s_header->rb_id, rab_id, - pc5s_header.data_size); + pc5s_header->data_size); LOG_D(PDCP, "[FRAME %5u][UE][IP][INSTANCE %u][RB %u][--- PDCP_DATA_REQ / %d Bytes ---X][PDCP][MOD %u][UE %u][RB %u] NON INSTANCIATED INSTANCE key 0x%"PRIx64", DROPPED\n", ctxt.frame, diff --git a/openair3/S1AP/s1ap_eNB_handlers.c b/openair3/S1AP/s1ap_eNB_handlers.c index 9b150fe751..5c6b208b87 100644 --- a/openair3/S1AP/s1ap_eNB_handlers.c +++ b/openair3/S1AP/s1ap_eNB_handlers.c @@ -1043,7 +1043,7 @@ int s1ap_eNB_handle_paging(uint32_t assoc_id, /* Paging procedure -> stream != 0 */ if (stream == 0) { - S1AP_ERROR("[SCTP %d] Received Paging procedure on stream (%d)\n", + LOG_W(S1AP,"[SCTP %d] Received Paging procedure on stream (%d)\n", assoc_id, stream); return -1; } diff --git a/openair3/S1AP/s1ap_eNB_nas_procedures.c b/openair3/S1AP/s1ap_eNB_nas_procedures.c index f2f84de32d..ebd5bab4fd 100644 --- a/openair3/S1AP/s1ap_eNB_nas_procedures.c +++ b/openair3/S1AP/s1ap_eNB_nas_procedures.c @@ -473,17 +473,11 @@ int s1ap_eNB_handle_nas_downlink(uint32_t assoc_id, MSC_LOG_RX_DISCARDED_MESSAGE( MSC_S1AP_ENB, MSC_S1AP_MME, - (const char *)NULL, NULL, + 0, MSC_AS_TIME_FMT" downlinkNASTransport eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", - 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), enb_ue_s1ap_id, mme_ue_s1ap_id); - /* TODO: fix this log - the original version is suspicious (twice downlink_NAS_transport_p->eNB_UE_S1AP_ID?) */ - /*S1AP_ERROR("[SCTP %d] Received NAS downlink message for non existing UE context eNB_UE_S1AP_ID: 0x%"PRIx32" %u\n", - assoc_id, - downlink_NAS_transport_p->eNB_UE_S1AP_ID, - downlink_NAS_transport_p->eNB_UE_S1AP_ID);*/ S1AP_ERROR("[SCTP %d] Received NAS downlink message for non existing UE context eNB_UE_S1AP_ID: 0x%lx\n", assoc_id, enb_ue_s1ap_id); @@ -518,11 +512,10 @@ int s1ap_eNB_handle_nas_downlink(uint32_t assoc_id, MSC_LOG_RX_MESSAGE( MSC_S1AP_ENB, MSC_S1AP_MME, - (const char *)NULL, NULL, + 0, MSC_AS_TIME_FMT" downlinkNASTransport eNB_ue_s1ap_id %u mme_ue_s1ap_id %u", - 0,0,//MSC_AS_TIME_ARGS(ctxt_pP), - enb_ue_s1ap_id, + assoc_id, mme_ue_s1ap_id); S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_DownlinkNASTransport_IEs_t, ie, container, diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index 7ff3b820dc..d25826e82e 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -100,7 +100,7 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param libname=OAI_TP_LIBNAME; shlib_fdesc[0].fname="transport_init"; } - ret=load_module_shlib(libname,shlib_fdesc,1); + ret=load_module_shlib(libname,shlib_fdesc,1,NULL); if (ret < 0) { fprintf(stderr,"Library %s couldn't be loaded\n",libname); } else { diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index c74cd3b443..a011a6253b 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -514,7 +514,7 @@ void *l2l1_task(void *arg) { #endif -static void get_options(void) { +static void get_options(unsigned int *start_msc) { int tddflag, nonbiotflag; @@ -548,11 +548,9 @@ static void get_options(void) { set_glog(glog_level); } if (start_telnetsrv) { - load_module_shlib("telnetsrv",NULL,0); + load_module_shlib("telnetsrv",NULL,0,NULL); } - - if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT)) ) { memset((void*)&RC,0,sizeof(RC)); /* Read RC configuration file */ @@ -925,6 +923,7 @@ int main( int argc, char **argv ) #if defined (XFORMS) int ret; #endif + unsigned int start_msc=0; if ( load_configmodule(argc,argv) == NULL) { exit_fun("[SOFTMODEM] Error, configuration module init failed\n"); @@ -942,7 +941,7 @@ int main( int argc, char **argv ) printf("Reading in command-line options\n"); - get_options (); + get_options (&start_msc); if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) { fprintf(stderr,"Getting configuration failed\n"); exit(-1); @@ -968,9 +967,13 @@ int main( int argc, char **argv ) #if defined(ENABLE_ITTI) printf("ITTI init, useMME: %i\n" ,EPC_MODE_ENABLED); + itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info); // initialize mscgen log after ITTI + if (start_msc) { + load_module_shlib("msc",NULL,0,&msc_interface); + } MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX); #endif diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index a1f26de5dc..2eb4b0d60d 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -194,6 +194,7 @@ #define CONFIG_HLP_FLOG "Enable online log \n" #define CONFIG_HLP_LOGL "Set the global log level, valide options: (4:trace, 3:debug, 2:info, 1:warn, (0:error))\n" #define CONFIG_HLP_TELN "Start embedded telnet server \n" +#define CONFIG_HLP_MSC "Enable the MSC tracing utility \n" /*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* command line parameters for LOG utility */ /* optname helpstr paramflags XXXptr defXXXval type numelt */ @@ -202,6 +203,7 @@ {"R" , CONFIG_HLP_FLOG, 0, uptr:&online_log_messages, defintval:1, TYPE_INT, 0}, \ {"g" , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \ {"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \ +{"msc", CONFIG_HLP_MSC, PARAMFLAG_BOOL, uptr:start_msc, defintval:0, TYPE_UINT, 0}, \ } #define CMDLINE_ONLINELOG_IDX 0 #define CMDLINE_GLOGLEVEL_IDX 1 diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index 57b1dfb105..3ee4283404 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -470,7 +470,7 @@ void *l2l1_task(void *arg) { extern int16_t dlsch_demod_shift; -static void get_options(void) { +static void get_options(unsigned int *start_msc) { int CC_id; int tddflag, nonbiotflag; char *loopfile=NULL; @@ -505,7 +505,7 @@ static void get_options(void) { set_glog(glog_level); } if (start_telnetsrv) { - load_module_shlib("telnetsrv",NULL,0); + load_module_shlib("telnetsrv",NULL,0,NULL); } paramdef_t cmdline_uemodeparams[] =CMDLINE_UEMODEPARAMS_DESC; @@ -770,6 +770,7 @@ int main( int argc, char **argv ) int CC_id; uint8_t abstraction_flag=0; + unsigned int start_msc=0; // Default value for the number of UEs. It will hold, // if not changed from the command line option --num-ues @@ -797,7 +798,7 @@ int main( int argc, char **argv ) printf("Reading in command-line options\n"); for (int i=0;i Date: Fri, 24 Aug 2018 20:06:02 +0200 Subject: [PATCH 101/128] fix noS1 build failure --- openair2/ENB_APP/enb_app.c | 16 +++++++++------- openair2/ENB_APP/enb_config.c | 6 +++++- openair2/RRC/LTE/rrc_eNB.c | 14 ++++++++------ targets/COMMON/create_tasks.c | 6 ++++-- targets/RT/USER/lte-softmodem.c | 4 ++++ 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index 9490c3f5d8..0f38b62c29 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -44,6 +44,8 @@ # include "s1ap_eNB.h" # include "sctp_eNB_task.h" # include "gtpv1u_eNB_task.h" +# else +# define EPC_MODE_ENABLED 0 # endif #include "openair1/PHY/INIT/phy_init.h" @@ -182,15 +184,15 @@ void *eNB_app_task(void *args_p) configure_rrc(enb_id); } - if (EPC_MODE_ENABLED) { +# if defined(ENABLE_USE_MME) /* Try to register each eNB */ registered_enb = 0; register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); - } else { +#else /* Start L2L1 task */ msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE); itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p); - } +#endif do { // Wait for a message @@ -209,7 +211,7 @@ void *eNB_app_task(void *args_p) break; case S1AP_REGISTER_ENB_CNF: - if (EPC_MODE_ENABLED) { +# if defined(ENABLE_USE_MME) LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p), S1AP_REGISTER_ENB_CNF(msg_p).nb_mme); @@ -246,7 +248,7 @@ void *eNB_app_task(void *args_p) } } } - } /*if (EPC_MODE_ENABLED) */ +#endif break; case S1AP_DEREGISTERED_ENB_IND: @@ -259,7 +261,7 @@ void *eNB_app_task(void *args_p) break; case TIMER_HAS_EXPIRED: - if (EPC_MODE_ENABLED) { +# if defined(ENABLE_USE_MME) LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id); if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) { @@ -267,7 +269,7 @@ void *eNB_app_task(void *args_p) registered_enb = 0; register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); } - } /*if (EPC_MODE_ENABLED) */ +#endif break; diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 4cca5ff8fe..488286f595 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -40,7 +40,9 @@ # if defined(ENABLE_USE_MME) # include "s1ap_eNB.h" # include "sctp_eNB_task.h" -# endif +# else +# define EPC_MODE_ENABLED 0 +# endif #endif #include "sctp_default_values.h" #include "SystemInformationBlockType2.h" @@ -2350,7 +2352,9 @@ void RCConfig(void) { printf("Getting ENBSParams\n"); config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); +# if defined(ENABLE_USE_MME) EPC_MODE_ENABLED = ((*ENBSParams[ENB_NOS1_IDX].uptr) == 0); +#endif RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; if (RC.nb_inst > 0) { diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index cac49690af..10590bc019 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -85,6 +85,8 @@ # else # include "../../S1AP/s1ap_eNB.h" # endif +#else +# define EPC_MODE_ENABLED 0 #endif #include "pdcp.h" @@ -1415,7 +1417,7 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( ue_context_pP->ue_context.Srb1.Active = 1; //ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = 2; - if (EPC_MODE_ENABLED) { +#if defined(ENABLE_USE_MME) hashtable_rc_t h_rc; int j; rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL; @@ -1459,18 +1461,18 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( ctxt_pP->instance, &create_tunnel_req, reestablish_rnti); - } /* EPC_MODE_ENABLED */ +#endif /* Update RNTI in ue_context */ ue_context_pP->ue_id_rnti = ctxt_pP->rnti; // here ue_id_rnti is just a key, may be something else ue_context_pP->ue_context.rnti = ctxt_pP->rnti; - if(EPC_MODE_ENABLED) { +#if defined(ENABLE_USE_MME) uint8_t send_security_mode_command = FALSE; rrc_pdcp_config_security( ctxt_pP, ue_context_pP, send_security_mode_command); LOG_D(RRC, "set security successfully \n"); - } +#endif // Measurement ID list MeasId_list = CALLOC(1, sizeof(*MeasId_list)); memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); @@ -6662,7 +6664,7 @@ rrc_eNB_decode_dcch( } } #if defined(ENABLE_ITTI) - if (EPC_MODE_ENABLED == 1) { +#if defined(ENABLE_USE_MME) if (dedicated_DRB == 1){ // rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP, // ue_context_p, @@ -6727,7 +6729,7 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { } } } - } +#endif #else // establish a dedicated bearer if (dedicated_DRB == 0 ) { // ue_context_p->ue_context.e_rab[0].status = E_RAB_STATUS_ESTABLISHED; diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c index f8230928dd..df3ce8992f 100644 --- a/targets/COMMON/create_tasks.c +++ b/targets/COMMON/create_tasks.c @@ -31,6 +31,8 @@ # include "nas_ue_task.h" # include "udp_eNB_task.h" # include "gtpv1u_eNB_task.h" +# else +# define EPC_MODE_ENABLED 0 # endif # if ENABLE_RAL # include "lteRALue.h" @@ -59,7 +61,7 @@ int create_tasks(uint32_t enb_nb) return -1; } } - +# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) { if (enb_nb > 0) { if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) { @@ -85,7 +87,7 @@ int create_tasks(uint32_t enb_nb) } } /* if (EPC_MODE_ENABLED) */ - +#endif if (enb_nb > 0) { LOG_I(RRC,"Creating RRC eNB Task\n"); diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index a011a6253b..dc9400a971 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -108,6 +108,10 @@ unsigned char scope_enb_num_ue = 2; static pthread_t forms_thread; //xforms #endif //XFORMS +#ifndef ENABLE_USE_MME +#define EPC_MODE_ENABLED 0 +#endif + pthread_cond_t nfapi_sync_cond; pthread_mutex_t nfapi_sync_mutex; int nfapi_sync_var=-1; //!< protected by mutex \ref nfapi_sync_mutex From 82c3f06da333c7415a8d3ee298c96c30a8e9b746 Mon Sep 17 00:00:00 2001 From: frtabu Date: Fri, 24 Aug 2018 23:53:58 +0200 Subject: [PATCH 102/128] fix dlsim tests failures in CI ( log level improperly set due to log modifications) --- openair1/SIMULATION/LTE_PHY/dlsim.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 559540e49d..a03ce34bca 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -523,7 +523,7 @@ int main(int argc, char **argv) int c; int k,i,j,aa; int re; - + int loglvl=OAILOG_DEBUG; int s,Kr,Kr_bytes; @@ -1001,7 +1001,7 @@ int main(int argc, char **argv) break; case 'L': - set_glog(atoi(optarg)); + loglvl = atoi(optarg); break; case 'h': @@ -1049,7 +1049,7 @@ int main(int argc, char **argv) "cannot load configuration module, exiting\n"); logInit(); // enable these lines if you need debug info - set_glog(LOG_DEBUG); + set_glog(loglvl); // moreover you need to init itti with the following line // however itti will catch all signals, so ctrl-c won't work anymore // alternatively you can disable ITTI completely in CMakeLists.txt From 9399dd97355a4194ea5c93971e2ab548b3946ce4 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sat, 25 Aug 2018 02:22:44 +0200 Subject: [PATCH 103/128] try to merge with issue 341 to pass USRP/FDD test --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 211 +++++++++++++----- openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 19 +- 2 files changed, 170 insertions(+), 60 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 6f1913ff91..d6a1605577 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -165,10 +165,19 @@ int allocate_REs_in_RB_no_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB, uint32_t tti_offset; uint8_t re; uint8_t *x0p; + uint8_t first_re,last_re; + + last_re=12; + first_re=0; + if (skip_half==1) + last_re=6; + else if (skip_half==2) + first_re=6; + re=first_re; if (skip_dc == 0) { - for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0; - re<12; + for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re; + reNlayers>1) { LOG_E(PHY,"Nlayers %d: re_offset %d, symbol %d offset %d\n",dlsch0_harq->Nlayers,re_offset,l,symbol_offset); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index 111e0d4161..12ea45e98d 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -71,7 +71,7 @@ schedule_ue_spec_phy_test( uint16_t rnti = 0x1235; uint32_t rb_alloc = 0x1FFFFF; int32_t tpc = 1; - int32_t mcs = 28; + int32_t mcs = 10; int32_t cqi = 15; int32_t ndi = (frameP*10+subframeP)/8; int32_t dai = 0; @@ -202,7 +202,8 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s int32_t normalized_rx_power; int32_t target_rx_power= 178; int CC_id = 0; - int nb_rb = 96; + int nb_rb=24; + int N_RB_UL; eNB_MAC_INST *mac = RC.mac[module_idP]; COMMON_channels_t *cc = &mac->common_channels[0]; UE_list_t *UE_list=&mac->UE_list; @@ -212,7 +213,6 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s int sched_subframe = (subframeP+4)%10; uint16_t ul_req_index; - if (sched_subframeHI_DCI0_req[CC_id][subframeP]; @@ -222,6 +222,18 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s //nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req->ul_config_pdu_list[0];; nfapi_ul_config_request_body_t *ul_req = &mac->UL_req[CC_id].ul_config_request_body; + N_RB_UL = to_prb(cc->mib->message.dl_Bandwidth); + switch(N_RB_UL){ + case 100: + nb_rb = 96; + break; + case 50: + nb_rb = 48; + break; + case 25: + nb_rb = 24; + break; + } mac->UL_req[CC_id].sfn_sf = (sched_frame<<4) + sched_subframe; hi_dci0_req->sfn_sf = (frameP << 4) + subframeP; @@ -306,7 +318,6 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s hi_dci0_req_body->number_of_dci++; ul_req_index = 0; - for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){ if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){ LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index); From 9f6d466fff9a86418b254c1ee1cdb28d280dfa9b Mon Sep 17 00:00:00 2001 From: Rajeev Gangula Date: Mon, 27 Aug 2018 14:43:32 +0200 Subject: [PATCH 104/128] Uncommemnt rrc_mac remove function. --- openair2/LAYER2/MAC/eNB_scheduler.c | 4 ++-- openair2/RRC/LTE/L2_interface.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index dc7cbd409c..a2988f26d8 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -538,8 +538,8 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, 0 ? "in synch" : "out of sync", UE_list->UE_template[CC_id][i].phr_info, UE_list->UE_sched_ctrl[i].dl_cqi[CC_id], - (UE_list->UE_sched_ctrl[i].pusch_snr[CC_id] - 128) / 2, - (UE_list->UE_sched_ctrl[i].pucch1_snr[CC_id] - 128) / 2); + (5*UE_list->UE_sched_ctrl[i].pusch_snr[CC_id] - 640) / 10, + (5*UE_list->UE_sched_ctrl[i].pucch1_snr[CC_id] - 640) / 10); } RC.eNB[module_idP][CC_id]->pusch_stats_bsr[i][(frameP * 10) + diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c index a7c96a8a22..efbcf0f142 100644 --- a/openair2/RRC/LTE/L2_interface.c +++ b/openair2/RRC/LTE/L2_interface.c @@ -329,7 +329,7 @@ void mac_eNB_rrc_ul_failure(const module_id_t Mod_instP, rntiP, PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED); } -// rrc_mac_remove_ue(Mod_instP,rntiP); + rrc_mac_remove_ue(Mod_instP,rntiP); } void mac_eNB_rrc_uplane_failure(const module_id_t Mod_instP, From 2276996f74302c6b5a44b279fb4ca96d7ce125f7 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 27 Aug 2018 17:28:50 +0200 Subject: [PATCH 105/128] basic simulator: minor bugfix: clear memory before use --- targets/ARCH/tcp_bridge/tcp_bridge_oai.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/ARCH/tcp_bridge/tcp_bridge_oai.c b/targets/ARCH/tcp_bridge/tcp_bridge_oai.c index ba6d96db93..4d7d49d9c7 100644 --- a/targets/ARCH/tcp_bridge/tcp_bridge_oai.c +++ b/targets/ARCH/tcp_bridge/tcp_bridge_oai.c @@ -253,7 +253,7 @@ int tcp_bridge_ue_first_read(openair0_device *device, openair0_timestamp *timest tcp_bridge_state_t *t = device->priv; uint32_t b[t->samples_per_subframe * 12]; - memset(b, 0, nsamps * 4); + memset(b, 0, t->samples_per_subframe * 12 * 4); int n = fullwrite(t->sock, b, t->samples_per_subframe * 12 * 4); if (n != t->samples_per_subframe * 12 * 4) { printf("tcp_bridge: write error ret %d error %s\n", n, strerror(errno)); From 97ddf5ea28e6bac5a2ff037f34a3a568dd067913 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 27 Aug 2018 17:32:00 +0200 Subject: [PATCH 106/128] basic simulator: bugfix: wait for synch ready at the right time Before this commit we were checking for UE->is_synchronized == 0 then we were waiting for a potentially active synch routine to finish and then we were starting the synch routine again but the synch routine that was running may have set UE->is_synchronized to 1. This was leading to various problems, most notably the following message repeated over and over in the UE log and the UE unable to connect properly: [RRC] [UE 0] Frame 377: OUT OF SYNC FROM eNB 0 (T310 active 0 : T310 0, N310 345, N311 0) So let's wait for a potentially active synch routine to finish before anything else. --- targets/RT/USER/lte-ue.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index ab84249f9f..fbf0eff1cd 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -1459,18 +1459,19 @@ void *UE_thread(void *arg) { while (!oai_exit) { +#if BASIC_SIMULATOR + while (!(UE->proc.instance_cnt_synch < 0)) { + printf("ue sync not ready\n"); + usleep(500*1000); + } +#endif + AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), ""); int instance_cnt_synch = UE->proc.instance_cnt_synch; int is_synchronized = UE->is_synchronized; AssertFatal ( 0== pthread_mutex_unlock(&UE->proc.mutex_synch), ""); if (is_synchronized == 0) { -#if BASIC_SIMULATOR - while (!((instance_cnt_synch = UE->proc.instance_cnt_synch) < 0)) { - printf("ue sync not ready\n"); - usleep(500*1000); - } -#endif if (instance_cnt_synch < 0) { // we can invoke the synch // grab 10 ms of signal and wakeup synch thread for (int i=0; iframe_parms.nb_antennas_rx; i++) From 164bbc65eba44b37d15207a5c39e631a06023145 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 27 Aug 2018 17:38:47 +0200 Subject: [PATCH 107/128] basic simulator: bugfix: do not put random data in DCI when not used With 50 RBs and 100 RBs the UE crashes in the basic simulator because of false detection of DCIs. Putting nothing in the unused REs in the DCI instead of random bits solves this issue and let the basic simulator run with 50 RBs and 100 RBs. Note that in the real UE the problem needs to be solved because the channel may lead to false DCI detection and the consequent crashes have to be solved. This commit sort of "hides" the issue to have the basic simulator functional. Note also that putting nothing in the unused REs in the DCI should be the normal general case. But it has not been tested with anything but the basic simulator so the previous code is left. --- openair1/PHY/LTE_TRANSPORT/dci.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 1c015b1c84..520488664d 100755 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -346,6 +346,13 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols, y[0] = &yseq0[0]; y[1] = &yseq1[0]; +#if BASIC_SIMULATOR + /* this should be the normal case + * but it has to be validated for all the various cases + * so let's just do it for the basic simulator + */ + memset(e, 2, DCI_BITS_MAX); +#else #if 1 // reset all bits to , here we set elements as 2 // memset(e, 2, DCI_BITS_MAX); @@ -358,6 +365,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols, * (not sure about this, to be checked somehow) */ //memset(e, 0, DCI_BITS_MAX); +#endif /* BASIC_SIMULATOR */ e_ptr = e; From a48c36582ffa93f38b2b9cd18b16b4b1e3e831ca Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 27 Aug 2018 17:46:03 +0200 Subject: [PATCH 108/128] bugfix: fix threading in the UE Various problems were found with the basic simulator. Variables used by various threads for synchronization need to be initialized properly. That is before the various threads start using them. This goes for: - UE->is_synchronized - UE->proc.instance_cnt_synch - UE->proc.instance_cnt_rxtx The function "UE->rfdevice.trx_start_func" was called in "UE_thread_synch" but should be called in "UE_thread" because "UE_thread" is the one that calls "UE->rfdevice.trx_read_func" and there is no guaranty that the call to "UE->rfdevice.trx_start_func" is done before as it has to (it's in another thread). And finally "pthread_cond_signal(&proc->cond_rxtx)" was called twice, which may not be a problem but was certainly not intended. Plus removing one call simplifies the code by removing some "if" logic, which is a good thing per se. This commit was not tested with a real UE and may thus introduce some issues. Hopefully not! --- targets/RT/USER/lte-ue.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index fbf0eff1cd..66107d79a4 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -446,7 +446,6 @@ static void *UE_thread_synch(void *arg) int freq_offset=0; char threadname[128]; - UE->is_synchronized = 0; printf("UE_thread_sync in with PHY_vars_UE %p\n",arg); cpu_set_t cpuset; @@ -522,11 +521,6 @@ static void *UE_thread_synch(void *arg) printf("Started device, unlocked sync_mutex (UE_sync_thread)\n"); - if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) { - LOG_E(HW,"Could not start the device\n"); - oai_exit=1; - } - while (oai_exit==0) { AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), ""); while (UE->proc.instance_cnt_synch < 0) @@ -755,7 +749,6 @@ static void *UE_thread_rxn_txnp4(void *arg) { UE_rxtx_proc_t *proc = rtd->proc; PHY_VARS_UE *UE = rtd->UE; - proc->instance_cnt_rxtx=-1; proc->subframe_rx=proc->sub_frame_start; char threadname[256]; @@ -1457,6 +1450,10 @@ void *UE_thread(void *arg) { int sub_frame=-1; //int cumulated_shift=0; + if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) { + LOG_E(HW,"Could not start the device\n"); + oai_exit=1; + } while (!oai_exit) { #if BASIC_SIMULATOR @@ -1662,12 +1659,7 @@ void *UE_thread(void *arg) { proc->instance_cnt_rxtx++; LOG_D( PHY, "[SCHED][UE %d] UE RX instance_cnt_rxtx %d subframe %d !!\n", UE->Mod_id, proc->instance_cnt_rxtx,proc->subframe_rx); - if (proc->instance_cnt_rxtx == 0) { - if (pthread_cond_signal(&proc->cond_rxtx) != 0) { - LOG_E( PHY, "[SCHED][UE %d] ERROR pthread_cond_signal for UE RX thread\n", UE->Mod_id); - exit_fun("nothing to add"); - } - } else { + if (proc->instance_cnt_rxtx != 0) { LOG_E( PHY, "[SCHED][UE %d] UE RX thread busy (IC %d)!!\n", UE->Mod_id, proc->instance_cnt_rxtx); if (proc->instance_cnt_rxtx > 2) exit_fun("instance_cnt_rxtx > 2"); @@ -1718,6 +1710,8 @@ void init_UE_threads(int inst) { pthread_mutex_init(&UE->proc.mutex_synch,NULL); pthread_cond_init(&UE->proc.cond_synch,NULL); + UE->proc.instance_cnt_synch = -1; + UE->is_synchronized = 0; // the threads are not yet active, therefore access is allowed without locking int nb_threads=RX_NB_TH; @@ -1729,6 +1723,7 @@ void init_UE_threads(int inst) { pthread_mutex_init(&UE->proc.proc_rxtx[i].mutex_rxtx,NULL); pthread_cond_init(&UE->proc.proc_rxtx[i].cond_rxtx,NULL); + UE->proc.proc_rxtx[i].instance_cnt_rxtx = -1; UE->proc.proc_rxtx[i].sub_frame_start=i; UE->proc.proc_rxtx[i].sub_frame_step=nb_threads; printf("Init_UE_threads rtd %d proc %d nb_threads %d i %d\n",rtd->proc->sub_frame_start, UE->proc.proc_rxtx[i].sub_frame_start,nb_threads, i); From 24c1c6e18b578433225a5468fd74bc4465fd40bf Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 27 Aug 2018 12:22:21 +0200 Subject: [PATCH 109/128] CI: better reporting -- URL of jenkins build included in top of HTML report -- when one of the needed processes not present, reported in HTML Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-tmp-ran | 2 +- ci-scripts/main.py | 111 ++++++++++++++++++++++++--------- 2 files changed, 84 insertions(+), 29 deletions(-) diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index 78f62cd8eb..4db4ec0b2d 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -320,7 +320,7 @@ pipeline { } if(fileExists("ci-scripts/test_results.html")) { sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html" - sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html" + sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html" archiveArtifacts "test_results-${JOB_NAME}.html" } } diff --git a/ci-scripts/main.py b/ci-scripts/main.py index d172d66545..e66d25204b 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -277,7 +277,11 @@ class SSHConnection(): Usage() sys.exit('Insufficient Parameter') initialize_eNB_flag = True - self.CheckProcessExist(initialize_eNB_flag) + pStatus = self.CheckProcessExist(initialize_eNB_flag) + if (pStatus < 0): + self.CreateHtmlTestRow(self.Initialize_eNB_args, 'KO', pStatus) + self.CreateHtmlFooter() + sys.exit(1) self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) self.command('cd ' + self.eNBSourceCodePath, '\$', 5) # Initialize_eNB_args usually start with -O and followed by the location in repository @@ -422,7 +426,11 @@ class SSHConnection(): Usage() sys.exit('Insufficient Parameter') initialize_eNB_flag = False - self.CheckProcessExist(initialize_eNB_flag) + pStatus = self.CheckProcessExist(initialize_eNB_flag) + if (pStatus < 0): + self.CreateHtmlTestRow('N/A', 'KO', pStatus) + self.CreateHtmlFooter() + sys.exit(1) multi_jobs = [] status_queue = SimpleQueue() lock = Lock() @@ -435,7 +443,7 @@ class SSHConnection(): job.join() if (status_queue.empty()): - self.CreateHtmlTestRow('N/A', 'KO', len(self.UEDevices)) + self.CreateHtmlTestRow('N/A', 'KO', 0) sys.exit(1) else: attach_status = True @@ -472,7 +480,11 @@ class SSHConnection(): Usage() sys.exit('Insufficient Parameter') initialize_eNB_flag = False - self.CheckProcessExist(initialize_eNB_flag) + pStatus = self.CheckProcessExist(initialize_eNB_flag) + if (pStatus < 0): + self.CreateHtmlTestRow('N/A', 'KO', pStatus) + self.CreateHtmlFooter() + sys.exit(1) multi_jobs = [] for device_id in self.UEDevices: p = Process(target = SSH.DetachUE_common, args = (device_id,)) @@ -527,7 +539,11 @@ class SSHConnection(): Usage() sys.exit('Insufficient Parameter') initialize_eNB_flag = False - self.CheckProcessExist(initialize_eNB_flag) + pStatus = self.CheckProcessExist(initialize_eNB_flag) + if (pStatus < 0): + self.CreateHtmlTestRow('N/A', 'KO', pStatus) + self.CreateHtmlFooter() + sys.exit(1) multi_jobs = [] for device_id in self.UEDevices: p = Process(target = SSH.RebootUE_common, args = (device_id,)) @@ -649,7 +665,11 @@ class SSHConnection(): Usage() sys.exit('Insufficient Parameter') initialize_eNB_flag = False - self.CheckProcessExist(initialize_eNB_flag) + pStatus = self.CheckProcessExist(initialize_eNB_flag) + if (pStatus < 0): + self.CreateHtmlTestRow(self.ping_args, 'KO', pStatus) + self.CreateHtmlFooter() + sys.exit(1) self.GetAllUEIPAddresses() multi_jobs = [] i = 0 @@ -666,7 +686,7 @@ class SSHConnection(): job.join() if (status_queue.empty()): - self.CreateHtmlTestRow(self.ping_args, 'KO', len(self.UEDevices)) + self.CreateHtmlTestRow(self.ping_args, 'KO', 0) self.CreateHtmlFooter() sys.exit(1) else: @@ -1073,7 +1093,11 @@ class SSHConnection(): Usage() sys.exit('Insufficient Parameter') initialize_eNB_flag = False - self.CheckProcessExist(initialize_eNB_flag) + pStatus = self.CheckProcessExist(initialize_eNB_flag) + if (pStatus < 0): + self.CreateHtmlTestRow(self.iperf_args, 'KO', pStatus) + self.CreateHtmlFooter() + sys.exit(1) self.GetAllUEIPAddresses() multi_jobs = [] i = 0 @@ -1091,7 +1115,7 @@ class SSHConnection(): job.join() if (status_queue.empty()): - self.CreateHtmlTestRow(self.iperf_args, 'KO', len(self.UEDevices)) + self.CreateHtmlTestRow(self.iperf_args, 'KO', 0) self.CreateHtmlFooter() sys.exit(1) else: @@ -1120,39 +1144,53 @@ class SSHConnection(): def CheckProcessExist(self, initialize_eNB_flag): multi_jobs = [] - p = Process(target = SSH.CheckHSSProcess, args = ()) + status_queue = SimpleQueue() + p = Process(target = SSH.CheckHSSProcess, args = (status_queue,)) p.daemon = True p.start() multi_jobs.append(p) - p = Process(target = SSH.CheckMMEProcess, args = ()) + p = Process(target = SSH.CheckMMEProcess, args = (status_queue,)) p.daemon = True p.start() multi_jobs.append(p) - p = Process(target = SSH.CheckSPGWProcess, args = ()) + p = Process(target = SSH.CheckSPGWProcess, args = (status_queue,)) p.daemon = True p.start() multi_jobs.append(p) if initialize_eNB_flag == False: - p = Process(target = SSH.CheckeNBProcess, args = ()) + p = Process(target = SSH.CheckeNBProcess, args = (status_queue,)) p.daemon = True p.start() multi_jobs.append(p) for job in multi_jobs: job.join() - def CheckeNBProcess(self): + if (status_queue.empty()): + return -15 + else: + result = 0 + while (not status_queue.empty()): + status = status_queue.get() + if (status < 0): + result = status + return result + + def CheckeNBProcess(self, status_queue): try: self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never lte-softmodem', '\$', 5) result = re.search('lte-softmodem', str(self.ssh.before)) if result is None: logging.debug('\u001B[1;37;41m eNB Process Not Found! \u001B[0m') - sys.exit(1) + #sys.exit(1) + status_queue.put(-1) + else: + status_queue.put(1) self.close() except: os.kill(os.getppid(),signal.SIGUSR1) - def CheckHSSProcess(self): + def CheckHSSProcess(self, status_queue): try: self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never hss', '\$', 5) @@ -1162,12 +1200,15 @@ class SSHConnection(): result = re.search('hss_sim s6as diam_hss', str(self.ssh.before)) if result is None: logging.debug('\u001B[1;37;41m HSS Process Not Found! \u001B[0m') - sys.exit(1) + status_queue.put(-2) + #sys.exit(1) + else: + status_queue.put(2) self.close() except: os.kill(os.getppid(),signal.SIGUSR1) - def CheckMMEProcess(self): + def CheckMMEProcess(self, status_queue): try: self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never mme', '\$', 5) @@ -1177,12 +1218,15 @@ class SSHConnection(): result = re.search('mme', str(self.ssh.before)) if result is None: logging.debug('\u001B[1;37;41m MME Process Not Found! \u001B[0m') - sys.exit(1) + status_queue.put(-3) + #sys.exit(1) + else: + status_queue.put(3) self.close() except: os.kill(os.getppid(),signal.SIGUSR1) - def CheckSPGWProcess(self): + def CheckSPGWProcess(self, status_queue): try: self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword) if re.match('OAI', self.EPCType, re.IGNORECASE): @@ -1193,7 +1237,10 @@ class SSHConnection(): result = re.search('xGw', str(self.ssh.before)) if result is None: logging.debug('\u001B[1;37;41m SPGW Process Not Found! \u001B[0m') - sys.exit(1) + status_queue.put(-4) + #sys.exit(1) + else: + status_queue.put(4) self.close() except: os.kill(os.getppid(),signal.SIGUSR1) @@ -1396,7 +1443,7 @@ class SSHConnection(): self.htmlFile.write(' \n') self.htmlFile.write(' \n') self.htmlFile.write(' \n') - self.htmlFile.write(' \n') + self.htmlFile.write(' \n') self.htmlFile.write(' \n') self.htmlFile.write(' \n') self.htmlFile.write(' \n') @@ -1454,7 +1501,7 @@ class SSHConnection(): self.htmlFile.close() self.htmlFooterCreated = False - def CreateHtmlTestRow(self, options, status, ue_status): + def CreateHtmlTestRow(self, options, status, processesStatus): if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): self.htmlFile.write(' \n') self.htmlFile.write(' \n') @@ -1463,15 +1510,23 @@ class SSHConnection(): if (str(status) == 'OK'): self.htmlFile.write(' \n') elif (str(status) == 'KO'): - self.htmlFile.write(' \n') + if (processesStatus == 0): + self.htmlFile.write(' \n') + elif (processesStatus == -1): + self.htmlFile.write(' \n') + elif (processesStatus == -2): + self.htmlFile.write(' \n') + elif (processesStatus == -3): + self.htmlFile.write(' \n') + elif (processesStatus == -4): + self.htmlFile.write(' \n') + else: + self.htmlFile.write(' \n') else: self.htmlFile.write(' \n') i = 0 while (i < self.htmlUEConnected): - if (i < ue_status): - self.htmlFile.write(' \n') - else: - self.htmlFile.write(' \n') + self.htmlFile.write(' \n') i += 1 self.htmlFile.write(' \n') From fdea649ddf09392fc518c01344a4855c1eada6fa Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 28 Aug 2018 17:17:06 +0200 Subject: [PATCH 110/128] CI: Adding skeleton to perform basic-simulator testing Signed-off-by: Raphael Defosseux --- ci-scripts/buildOnVM.sh | 3 + ci-scripts/conf_files/lte-basic-sim.conf | 256 +++++++++++++++++++++++ ci-scripts/runTestOnVM.sh | 226 +++++++++++++++++++- 3 files changed, 483 insertions(+), 2 deletions(-) create mode 100644 ci-scripts/conf_files/lte-basic-sim.conf diff --git a/ci-scripts/buildOnVM.sh b/ci-scripts/buildOnVM.sh index 76a11c6d38..eab2f7c624 100755 --- a/ci-scripts/buildOnVM.sh +++ b/ci-scripts/buildOnVM.sh @@ -135,6 +135,7 @@ case $key in LOG_PATTERN=basic_simulator NB_PATTERN_FILES=2 BUILD_OPTIONS="--basic-simulator" + VM_MEMORY=8192 shift ;; -v3) @@ -186,6 +187,7 @@ case $key in LOG_PATTERN=basic_simulator NB_PATTERN_FILES=2 BUILD_OPTIONS="--basic-simulator" + VM_MEMORY=8192 ;; phy-sim) VM_NAME=ci-phy-sim @@ -289,6 +291,7 @@ echo "############################################################" echo "Running install and build script on VM ($VM_NAME)" echo "############################################################" echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $VM_CMDS +echo "touch /home/ubuntu/.hushlogin" >> $VM_CMDS if [[ "$VM_NAME" == *"-cppcheck"* ]] then echo "echo \"sudo apt-get --yes --quiet install zip cppcheck \"" >> $VM_CMDS diff --git a/ci-scripts/conf_files/lte-basic-sim.conf b/ci-scripts/conf_files/lte-basic-sim.conf new file mode 100644 index 0000000000..febf24257c --- /dev/null +++ b/ci-scripts/conf_files/lte-basic-sim.conf @@ -0,0 +1,256 @@ +Active_eNBs = ( "eNB-Eurecom-LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB-Eurecom-LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + + mobile_network_code = "93"; + + tr_s_preference = "local_mac" + + ////////// Physical parameters: + + component_carriers = ( + { + node_function = "3GPP_eNODEB"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2680000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 125; + pbch_repetition = "FALSE"; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 0; + pucch_nCS_AN = 0; + pucch_n1_AN = 0; + pdsch_referenceSignalPower = -27; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -96; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -104; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + ue_TransmissionMode = 1; + + //Parameters for SIB18 + rxPool_sc_CP_Len = "normal"; + rxPool_sc_Period = "sf40"; + rxPool_data_CP_Len = "normal"; + rxPool_ResourceConfig_prb_Num = 20; + rxPool_ResourceConfig_prb_Start = 5; + rxPool_ResourceConfig_prb_End = 44; + rxPool_ResourceConfig_offsetIndicator_present = "prSmall"; + rxPool_ResourceConfig_offsetIndicator_choice = 0; + rxPool_ResourceConfig_subframeBitmap_present = "prBs40"; + rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000"; + rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5; + rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0; +/* rxPool_dataHoppingConfig_hoppingParameter = 0; + rxPool_dataHoppingConfig_numSubbands = "ns1"; + rxPool_dataHoppingConfig_rbOffset = 0; + rxPool_commTxResourceUC-ReqAllowed = "TRUE"; +*/ + // Parameters for SIB19 + discRxPool_cp_Len = "normal" + discRxPool_discPeriod = "rf32" + discRxPool_numRetx = 1; + discRxPool_numRepetition = 2; + discRxPool_ResourceConfig_prb_Num = 5; + discRxPool_ResourceConfig_prb_Start = 3; + discRxPool_ResourceConfig_prb_End = 21; + discRxPool_ResourceConfig_offsetIndicator_present = "prSmall"; + discRxPool_ResourceConfig_offsetIndicator_choice = 0; + discRxPool_ResourceConfig_subframeBitmap_present = "prBs40"; + discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff"; + discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5; + discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0; + + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR"; + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + } +); + +MACRLCs = ( + { + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; + phy_test_mode = 0; + puSch10xSnr = 200; + puCch10xSnr = 200; + } +); + +L1s = ( + { + num_cc = 1; + tr_n_preference = "local_mac"; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 0 + att_rx = 0; + bands = [7]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 125; + eNB_instances = [0]; + + } +); + +NETWORK_CONTROLLER : +{ + FLEXRAN_ENABLED = "no"; + FLEXRAN_INTERFACE_NAME = "lo"; + FLEXRAN_IPV4_ADDRESS = "127.0.0.1"; + FLEXRAN_PORT = 2210; + FLEXRAN_CACHE = "/mnt/oai_agent_cache"; + FLEXRAN_AWAIT_RECONF = "no"; +}; + + log_config : + { + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index 68438758f5..578b6d2ebd 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -122,6 +122,8 @@ case $key in ;; -v2) VM_NAME=ci-basic-sim + RUN_OPTIONS="complex" + ARCHIVES_LOC=basic_sim/test shift ;; -v3) @@ -150,6 +152,8 @@ case $key in ;; basic-sim) VM_NAME=ci-basic-sim + RUN_OPTIONS="complex" + ARCHIVES_LOC=basic_sim/test ;; phy-sim) VM_NAME=ci-phy-sim @@ -210,8 +214,11 @@ echo "$VM_NAME has for IP addr = $VM_IP_ADDR" if [ "$RUN_OPTIONS" == "none" ] then echo "No run on VM testing for this variant currently" -else + exit $STATUS +fi +if [[ $RUN_OPTIONS =~ .*run_exec_autotests.* ]] +then echo "############################################################" echo "Running test script on VM ($VM_NAME)" echo "############################################################" @@ -271,7 +278,7 @@ else rm -f $VM_CMDS echo "############################################################" - echo "Checking build status" + echo "Checking run status" echo "############################################################" LOG_FILES=`ls $ARCHIVES_LOC/results_autotests*.xml` @@ -315,4 +322,219 @@ else fi +if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-basic-sim.* ]] +then + if [ -d $ARCHIVES_LOC ] + then + rm -Rf $ARCHIVES_LOC + fi + mkdir --parents $ARCHIVES_LOC + + EPC_VM_NAME=`echo $VM_NAME | sed -e "s#basic-sim#epc#"` + LTEBOX=0 + if [ -d /opt/ltebox-archives/ ] + then + # Checking if all ltebox archives are available to run ltebx epc on a brand new VM + if [ -f /opt/ltebox-archives/ltebox_2.2.70_16_04_amd64.deb ] && [ -f /opt/ltebox-archives/etc-conf.zip ] && [ -f /opt/ltebox-archives/hss-sim.zip ] + then + echo "############################################################" + echo "Test EPC on VM ($EPC_VM_NAME) will be using ltebox" + echo "############################################################" + LTEBOX=1 + fi + fi + # Here we could have other types of EPC detection + + # Do we need to start the EPC VM + EPC_VM_CMDS=`echo $VM_CMDS | sed -e "s#cmds#epc-cmds#"` + echo "EPC_VM_CMD_FILE = $EPC_VM_CMDS" + IS_EPC_VM_ALIVE=`uvt-kvm list | grep -c $EPC_VM_NAME` + if [ $IS_EPC_VM_ALIVE -eq 0 ] + then + echo "############################################################" + echo "Creating test EPC VM ($EPC_VM_NAME) on Ubuntu Cloud Image base" + echo "############################################################" + uvt-kvm create $EPC_VM_NAME release=xenial --unsafe-caching + fi + + uvt-kvm wait $EPC_VM_NAME --insecure + EPC_VM_IP_ADDR=`uvt-kvm ip $EPC_VM_NAME` + echo "$EPC_VM_NAME has for IP addr = $EPC_VM_IP_ADDR" + scp -o StrictHostKeyChecking=no /etc/apt/apt.conf.d/01proxy ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu + + # ltebox specific actions (install and start) + if [ $LTEBOX -eq 2 ] + then + echo "############################################################" + echo "Copying ltebox archives into EPC VM ($EPC_VM_NAME)" + echo "############################################################" + scp -o StrictHostKeyChecking=no /opt/ltebox-archives/ltebox_2.2.70_16_04_amd64.deb ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu + scp -o StrictHostKeyChecking=no /opt/ltebox-archives/etc-conf.zip ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu + scp -o StrictHostKeyChecking=no /opt/ltebox-archives/hss-sim.zip ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu + + echo "############################################################" + echo "Running install and start EPC on EPC VM ($EPC_VM_NAME)" + echo "############################################################" + echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $EPC_VM_CMDS + echo "touch /home/ubuntu/.hushlogin" >> $EPC_VM_CMDS + echo "echo \"sudo apt-get --yes --quiet install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf\"" >> $EPC_VM_CMDS + echo "sudo apt-get update > zip-install.txt 2>&1" >> $EPC_VM_CMDS + echo "sudo apt-get --yes install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf >> zip-install.txt 2>&1" >> $EPC_VM_CMDS + + # Installing and Starting HSS + echo "echo \"cd /opt\"" >> $EPC_VM_CMDS + echo "cd /opt" >> $EPC_VM_CMDS + echo "echo \"sudo unzip -qq /home/ubuntu/hss-sim.zip\"" >> $EPC_VM_CMDS + echo "sudo unzip -qq /home/ubuntu/hss-sim.zip" >> $EPC_VM_CMDS + echo "echo \"cd /opt/hss_sim0609\"" >> $EPC_VM_CMDS + echo "cd /opt/hss_sim0609" >> $EPC_VM_CMDS + + echo "echo \"sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real\"" >> $EPC_VM_CMDS + echo "sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real" >> $EPC_VM_CMDS + + # Installing and Starting ltebox + echo "echo \"cd /home/ubuntu\"" >> $EPC_VM_CMDS + echo "cd /home/ubuntu" >> $EPC_VM_CMDS + echo "echo \"sudo dpkg -i ltebox_2.2.70_16_04_amd64.deb \"" >> $EPC_VM_CMDS + echo "sudo dpkg -i ltebox_2.2.70_16_04_amd64.deb >> zip-install.txt 2>&1" >> $EPC_VM_CMDS + + echo "echo \"cd /opt/ltebox/etc/\"" >> $EPC_VM_CMDS + echo "cd /opt/ltebox/etc/" >> $EPC_VM_CMDS + echo "echo \"sudo unzip -qq -o /home/ubuntu/etc-conf.zip\"" >> $EPC_VM_CMDS + echo "sudo unzip -qq -o /home/ubuntu/etc-conf.zip" >> $EPC_VM_CMDS + echo "sudo sed -i -e 's#EPC_VM_IP_ADDRESS#$EPC_VM_IP_ADDR#' gw.conf" >> $EPC_VM_CMDS + echo "sudo sed -i -e 's#EPC_VM_IP_ADDRESS#$EPC_VM_IP_ADDR#' mme.conf" >> $EPC_VM_CMDS + + echo "echo \"cd /opt/ltebox/tools/\"" >> $EPC_VM_CMDS + echo "cd /opt/ltebox/tools/" >> $EPC_VM_CMDS + echo "echo \"sudo ./start_ltebox\"" >> $EPC_VM_CMDS + echo "nohup sudo ./start_ltebox > /home/ubuntu/ltebox.txt" >> $EPC_VM_CMDS + + ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS + rm -f $EPC_VM_CMDS + + # We may have some adaptation to do + if [ -f /opt/ltebox-archives/adapt_ue_sim.txt ] + then + echo "############################################################" + echo "Doing some adaptation on UE side" + echo "############################################################" + ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < /opt/ltebox-archives/adapt_ue_sim.txt + fi + fi + + # HERE ADD any install actions for another EPC + + # Retrieve EPC real IP address + if [ $LTEBOX -eq 1 ] + then + # in our configuration file, we are using pool 5 + echo "ifconfig tun5 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $EPC_VM_CMDS + REAL_EPC_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS` + echo "EPC IP Address is : $REAL_EPC_IP_ADDR" + rm $EPC_VM_CMDS + fi + + echo "############################################################" + echo "Starting the eNB" + echo "############################################################" + echo "cd /home/ubuntu/tmp" > $VM_CMDS + echo "echo \"sudo apt-get --yes --quiet install daemon \"" >> $VM_CMDS + echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $VM_CMDS + echo "echo \"export ENODEB=1\"" >> $VM_CMDS + echo "export ENODEB=1" >> $VM_CMDS + echo "echo \"source oaienv\"" >> $VM_CMDS + echo "source oaienv" >> $VM_CMDS + echo "cd ci-scripts/conf_files/" >> $VM_CMDS + echo "cp lte-basic-sim.conf ci-lte-basic-sim.conf" >> $VM_CMDS + echo "sed -i -e 's#CI_MME_IP_ADDR#$EPC_VM_IP_ADDR#' -e 's#CI_ENB_IP_ADDR#$VM_IP_ADDR#' ci-lte-basic-sim.conf" >> $VM_CMDS + echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/\"" >> $VM_CMDS + echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/" >> $VM_CMDS + echo "echo \"./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-lte-basic-sim.conf\" > ./my-lte-softmodem-run.sh " >> $VM_CMDS + echo "chmod 775 ./my-lte-softmodem-run.sh" >> $VM_CMDS + echo "cat ./my-lte-softmodem-run.sh" >> $VM_CMDS + echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/enb.log ./my-lte-softmodem-run.sh" >> $VM_CMDS + + ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS + + echo "############################################################" + echo "Starting the UE" + echo "############################################################" + echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue\"" > $VM_CMDS + echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue" > $VM_CMDS + echo "echo \"./lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 140\" > ./my-lte-uesoftmodem-run.sh" >> $VM_CMDS + echo "chmod 775 ./my-lte-uesoftmodem-run.sh" >> $VM_CMDS + echo "cat ./my-lte-uesoftmodem-run.sh" >> $VM_CMDS + echo "sudo -E daemon --inherit --unsafe --name=ue_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/ue -o /home/ubuntu/tmp/cmake_targets/log/ue.log ./my-lte-uesoftmodem-run.sh" >> $VM_CMDS + + ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS + rm $VM_CMDS + sleep 10 + echo "ifconfig oip1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $VM_CMDS + UE_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS` + echo "UE IP Address for EPC is : $UE_IP_ADDR" + rm $VM_CMDS + + echo "############################################################" + echo "Pinging the UE" + echo "############################################################" + echo "echo \"ping -c 20 $UE_IP_ADDR\"" > $EPC_VM_CMDS + echo "ping -c 20 $UE_IP_ADDR | tee -a ping_ue.txt" >> $EPC_VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS + rm -f $EPC_VM_CMDS + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/ping_ue.txt $ARCHIVES_LOC + + echo "############################################################" + echo "Iperf DL" + echo "############################################################" + echo "echo \"iperf -u -s -i 1\"" > $VM_CMDS + echo "nohup iperf -u -s -i 1 > tmp/cmake_targets/log/iperf_dl_server.txt &" >> $VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS + rm $VM_CMDS + + echo "echo \"iperf -c $UE_IP_ADDR -u -t 30 -b 15M -i 1\"" > $EPC_VM_CMDS + echo "iperf -c $UE_IP_ADDR -u -t 30 -b 15M -i 1 | tee -a iperf_dl_client.txt" >> $EPC_VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS + rm -f $EPC_VM_CMDS + + echo "killall --signal SIGKILL iperf" >> $VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS + rm $VM_CMDS + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/iperf_dl_client.txt $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/iperf_dl_server.txt $ARCHIVES_LOC + + echo "############################################################" + echo "Iperf UL" + echo "############################################################" + echo "echo \"iperf -u -s -i 1\"" > $EPC_VM_CMDS + echo "nohup iperf -u -s -i 1 > iperf_ul_server.txt &" >> $EPC_VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS + rm $EPC_VM_CMDS + + echo "echo \"iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 4M -i 1\"" > $VM_CMDS + echo "iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 4M -i 1 | tee -a /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" >> $VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS + rm -f $VM_CMDS + + echo "killall --signal SIGKILL iperf" >> $EPC_VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS + rm $EPC_VM_CMDS + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/iperf_ul_server.txt $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt $ARCHIVES_LOC + + echo "############################################################" + echo "Terminate enb/ue simulators" + echo "############################################################" + echo "echo \"sudo daemon --name=enb_daemon --stop\"" > $VM_CMDS + echo "sudo daemon --name=enb_daemon --stop" >> $VM_CMDS + echo "echo \"sudo daemon --name=ue_daemon --stop\"" >> $VM_CMDS + echo "sudo daemon --name=ue_daemon --stop" >> $VM_CMDS + echo "echo \"sudo killall --signal SIGKILL lte-softmodem\"" >> $VM_CMDS + echo "sudo killall --signal SIGKILL lte-softmodem" >> $VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS + rm -f $VM_CMDS + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/enb.log $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/ue.log $ARCHIVES_LOC +fi + exit $STATUS From d57024162a21796bb10c546021cc50a6cb4076fb Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 28 Aug 2018 17:27:35 +0200 Subject: [PATCH 111/128] CI: fix bypass Signed-off-by: Raphael Defosseux --- ci-scripts/runTestOnVM.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index 578b6d2ebd..a842f9932e 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -363,7 +363,7 @@ then scp -o StrictHostKeyChecking=no /etc/apt/apt.conf.d/01proxy ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu # ltebox specific actions (install and start) - if [ $LTEBOX -eq 2 ] + if [ $LTEBOX -eq 1 ] then echo "############################################################" echo "Copying ltebox archives into EPC VM ($EPC_VM_NAME)" From 16314f041f7433f21d4efa116c8c75d826bdcfb0 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 29 Aug 2018 10:27:10 +0200 Subject: [PATCH 112/128] CI: fix EPC IP address retrieve and zip of test-files Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 2 +- ci-scripts/runTestOnVM.sh | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index d4fe0d8555..d7279d7c46 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -319,7 +319,7 @@ pipeline { always { script { dir ('archives') { - sh "if [ -d */test ]; then zip -r -qq vm_tests_logs.zip */test ; fi" + sh "if [ -d basic_sim/test ] || [ -d phy_sim/test]; then zip -r -qq vm_tests_logs.zip */test ; fi" } if(fileExists('archives/vm_tests_logs.zip')) { archiveArtifacts artifacts: 'archives/vm_tests_logs.zip' diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index a842f9932e..9bb67803ab 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -421,6 +421,10 @@ then echo "############################################################" ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < /opt/ltebox-archives/adapt_ue_sim.txt fi + + # for the moment, just a plain sleep + # TODO: more sophiscated way to detect EPC is started + sleep 5 fi # HERE ADD any install actions for another EPC @@ -469,6 +473,8 @@ then ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS rm $VM_CMDS + # for the moment, just a plain sleep + # TODO: more sophiscated way to detect eNB is started and that UE is connected sleep 10 echo "ifconfig oip1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $VM_CMDS UE_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS` From 8fc3c48d857d06d6b07a375e0aeaf759fb70fb77 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 29 Aug 2018 16:53:17 +0200 Subject: [PATCH 113/128] CI: better reporting for simulator testing Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 16 +- ci-scripts/reportTestLocally.sh | 504 ++++++++++++++++++++++++++++++++ ci-scripts/runTestOnVM.sh | 143 ++++++++- 3 files changed, 642 insertions(+), 21 deletions(-) create mode 100755 ci-scripts/reportTestLocally.sh diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index d7279d7c46..5417ad12aa 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -41,7 +41,7 @@ pipeline { disableConcurrentBuilds() timestamps() gitLabConnection('OAI GitLab') - gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test-FDD-Band7"]) + gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test basic-sim", "Test-FDD-Band7"]) ansiColor('xterm') } @@ -256,9 +256,9 @@ pipeline { } stage ("Test basic simulator") { steps { - //gitlabCommitStatus(name: "Test basic-sim") { + gitlabCommitStatus(name: "Test basic-sim") { sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" - //} + } } } stage ("Test FDD - Band 7 - B210") { @@ -323,8 +323,14 @@ pipeline { } if(fileExists('archives/vm_tests_logs.zip')) { archiveArtifacts artifacts: 'archives/vm_tests_logs.zip' - archiveArtifacts artifacts: 'archives/*/test/results_autotests*.xml' - archiveArtifacts artifacts: 'archives/*/test/*.xsl' + if ("MERGE".equals(env.gitlabActionType)) { + sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}" + } else { + sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}" + } + if(fileExists('test_simulator_results.html')) { + archiveArtifacts artifacts: 'test_simulator_results.html' + } } } } diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh new file mode 100755 index 0000000000..113fc1e1e5 --- /dev/null +++ b/ci-scripts/reportTestLocally.sh @@ -0,0 +1,504 @@ +#!/bin/bash +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ + +function usage { + echo "OAI Test Report script" + echo " Original Author: Raphael Defosseux" + echo "" + echo "Usage:" + echo "------" + echo "" + echo " reportTestLocally.sh [OPTIONS]" + echo "" + echo "Options:" + echo "--------" + echo "" + echo " --help OR -h" + echo " Print this help message." + echo "" + echo "Job Options:" + echo "------------" + echo "" + echo " --git-url #### OR -gu ####" + echo " Specify the URL of the GIT Repository." + echo "" + echo " --job-name #### OR -jn ####" + echo " Specify the name of the Jenkins job." + echo "" + echo " --build-id #### OR -id ####" + echo " Specify the build ID of the Jenkins job." + echo "" + echo " --trigger merge-request OR -mr" + echo " --trigger push OR -pu" + echo " Specify trigger action of the Jenkins job. Either a merge-request event or a push event." + echo "" + echo "Merge-Request Options:" + echo "----------------------" + echo "" + echo " --src-branch #### OR -sb ####" + echo " Specify the source branch of the merge request." + echo "" + echo " --src-commit #### OR -sc ####" + echo " Specify the source commit ID (SHA-1) of the merge request." + echo "" + echo " --target-branch #### OR -tb ####" + echo " Specify the target branch of the merge request (usually develop)." + echo "" + echo " --target-commit #### OR -tc ####" + echo " Specify the target commit ID (SHA-1) of the merge request." + echo "" + echo "Push Options:" + echo "----------------------" + echo "" + echo " --branch #### OR -br ####" + echo " Specify the branch of the push event." + echo "" + echo " --commit #### OR -co ####" + echo " Specify the commit ID (SHA-1) of the push event." + echo "" + echo "" +} + +function trigger_usage { + echo "OAI Test Report script" + echo " Original Author: Raphael Defosseux" + echo "" + echo " --trigger merge-request OR -mr" + echo " --trigger push OR -pu" + echo " Specify trigger action of the Jenkins job. Either a merge-request event or a push event." + echo "" +} + +jb_checker=0 +mr_checker=0 +pu_checker=0 +MR_TRIG=0 +PU_TRIG=0 +while [[ $# -gt 0 ]] +do +key="$1" + +case $key in + -h|--help) + shift + usage + exit 0 + ;; + -gu|--git-url) + GIT_URL="$2" + let "jb_checker|=0x1" + shift + shift + ;; + -jn|--job-name) + JOB_NAME="$2" + let "jb_checker|=0x2" + shift + shift + ;; + -id|--build-id) + BUILD_ID="$2" + let "jb_checker|=0x4" + shift + shift + ;; + --trigger) + TRIG="$2" + case $TRIG in + merge-request) + MR_TRIG=1 + ;; + push) + PU_TRIG=1 + ;; + *) + echo "" + echo "Syntax Error: Invalid Trigger option -> $TRIG" + echo "" + trigger_usage + exit + ;; + esac + let "jb_checker|=0x8" + shift + shift + ;; + -mr) + MR_TRIG=1 + let "jb_checker|=0x8" + shift + ;; + -pu) + PU_TRIG=1 + let "jb_checker|=0x8" + shift + ;; + -sb|--src-branch) + SOURCE_BRANCH="$2" + let "mr_checker|=0x1" + shift + shift + ;; + -sc|--src-commit) + SOURCE_COMMIT_ID="$2" + let "mr_checker|=0x2" + shift + shift + ;; + -tb|--target-branch) + TARGET_BRANCH="$2" + let "mr_checker|=0x4" + shift + shift + ;; + -tc|--target-commit) + TARGET_COMMIT_ID="$2" + let "mr_checker|=0x8" + shift + shift + ;; + -br|--branch) + SOURCE_BRANCH="$2" + let "pu_checker|=0x1" + shift + shift + ;; + -co|--commit) + SOURCE_COMMIT_ID="$2" + let "pu_checker|=0x2" + shift + shift + ;; + *) + echo "Syntax Error: unknown option: $key" + echo "" + usage + exit 1 + ;; +esac + +done + +if [ $jb_checker -ne 15 ] +then + echo "" + echo "Syntax Error: missing job information." + # TODO : list missing info + echo "" + exit 1 +fi + +if [ $PU_TRIG -eq 1 ] && [ $MR_TRIG -eq 1 ] +then + echo "" + echo "Syntax Error: trigger action incoherent." + echo "" + trigger_usage + exit 1 +fi + +if [ $PU_TRIG -eq 1 ] +then + if [ $pu_checker -ne 3 ] + then + echo "" + echo "Syntax Error: missing push information." + # TODO : list missing info + echo "" + exit 1 + fi +fi + +if [ $MR_TRIG -eq 1 ] +then + if [ $mr_checker -ne 15 ] + then + echo "" + echo "Syntax Error: missing merge-request information." + # TODO : list missing info + echo "" + exit 1 + fi +fi + +echo "" > ./test_simulator_results.html +echo "" >> ./test_simulator_results.html +echo "" >> ./test_simulator_results.html +echo " Simulator Results for $JOB_NAME job build #$BUILD_ID" >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo "" >> ./test_simulator_results.html +echo "" >> ./test_simulator_results.html +echo "
GIT Repository' + SSH.eNBRepository + '' + SSH.eNBRepository + '
Job Trigger
' + SSH.testCase_id + '' + str(status) + '' + str(status) + '' + str(status) + 'KO - eNB process not foundKO - HSS process not foundKO - MME process not foundKO - SPGW process not found' + str(status) + '' + str(status) + '---
" >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo "
" >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " \"\"" >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " Job Summary -- Job: $JOB_NAME -- Build-ID: $BUILD_ID" >> ./test_simulator_results.html +echo "
" >> ./test_simulator_results.html +echo "
" >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +echo " " >> ./test_simulator_results.html +if [ $PU_TRIG -eq 1 ]; then echo " " >> ./test_simulator_results.html; fi +if [ $MR_TRIG -eq 1 ]; then echo " " >> ./test_simulator_results.html; fi +echo " " >> ./test_simulator_results.html +if [ $PU_TRIG -eq 1 ] +then + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html +fi +if [ $MR_TRIG -eq 1 ] +then + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html +fi +echo "
GIT Repository$GIT_URL
Job TriggerPush EventMerge-Request
Branch$SOURCE_BRANCH
Commit ID$SOURCE_COMMIT_ID
Source Branch$SOURCE_BRANCH
Source Commit ID$SOURCE_COMMIT_ID
Target Branch$TARGET_BRANCH
Target Commit ID$TARGET_COMMIT_ID
" >> ./test_simulator_results.html +echo "

Test Summary

" >> ./test_simulator_results.html + +ARCHIVES_LOC=archives/basic_sim/test +if [ -d $ARCHIVES_LOC ] +then + echo "

Basic Simulator Check

" >> ./test_simulator_results.html + + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + + PING_TESTS=`ls $ARCHIVES_LOC/ping*txt` + for PING_CASE in $PING_TESTS + do + echo " " >> ./test_simulator_results.html + NAME=`echo $PING_CASE | sed -e "s#$ARCHIVES_LOC/##"` + echo " " >> ./test_simulator_results.html + CMD=`egrep "COMMAND IS" $PING_CASE | sed -e "s#COMMAND IS: ##"` + echo " " >> ./test_simulator_results.html + FILE_COMPLETE=`egrep -c "ping statistics" $PING_CASE` + if [ $FILE_COMPLETE -eq 0 ] + then + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + else + NB_TR_PACKETS=`egrep "packets transmitted" $PING_CASE | sed -e "s# packets transmitted.*##"` + NB_RC_PACKETS=`egrep "packets transmitted" $PING_CASE | sed -e "s#^.*packets transmitted, ##" -e "s# received,.*##"` + if [ $NB_TR_PACKETS -eq $NB_RC_PACKETS ] + then + echo " " >> ./test_simulator_results.html + else + echo " " >> ./test_simulator_results.html + fi + echo " " >> ./test_simulator_results.html + fi + echo " " >> ./test_simulator_results.html + done + + IPERF_TESTS=`ls $ARCHIVES_LOC/iperf*client*txt` + for IPERF_CASE in $IPERF_TESTS + do + echo " " >> ./test_simulator_results.html + NAME=`echo $IPERF_CASE | sed -e "s#$ARCHIVES_LOC/##"` + echo " " >> ./test_simulator_results.html + CMD=`egrep "COMMAND IS" $IPERF_CASE | sed -e "s#COMMAND IS: ##"` + echo " " >> ./test_simulator_results.html + FILE_COMPLETE=`egrep -c "Server Report" $IPERF_CASE` + if [ $FILE_COMPLETE -eq 0 ] + then + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + else + REQ_BITRATE=`echo $CMD | sed -e "s#^.*-b ##" -e "s#-i 1.*##"` + if [[ $REQ_BITRATE =~ .*K.* ]] + then + REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#K##"` + FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000.0" | bc -l` + fi + if [[ $REQ_BITRATE =~ .*M.* ]] + then + REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#M##"` + FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000.0" | bc -l` + fi + if [[ $REQ_BITRATE =~ .*G.* ]] + then + REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#G##"` + FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000000.0" | bc -l` + fi + EFFECTIVE_BITRATE=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"` + if [[ $EFFECTIVE_BITRATE =~ .*Kbits/sec.* ]] + then + EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Kbits/sec.*##"` + FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000" | bc -l` + fi + if [[ $EFFECTIVE_BITRATE =~ .*Mbits/sec.* ]] + then + EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Mbits/sec.*##"` + FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000000" | bc -l` + fi + if [[ $EFFECTIVE_BITRATE =~ .*Gbits/sec.* ]] + then + EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Gbits/sec.*##"` + FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000000000" | bc -l` + fi + PERF=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.2f", $0}'` + PERF_INT=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.0f", $0}'` + if [[ $PERF_INT -lt 90 ]] + then + echo " " >> ./test_simulator_results.html + else + echo " " >> ./test_simulator_results.html + fi + echo " " >> ./test_simulator_results.html + fi + echo " " >> ./test_simulator_results.html + done + + echo "
Log File NameCommandStatusStatistics
$NAME$CMDKON/AOKKO" >> ./test_simulator_results.html + echo "
" >> ./test_simulator_results.html
+            STATS=`egrep "packets transmitted" $PING_CASE | sed -e "s#^.*received, ##" -e "s#, time.*##" -e "s# packet loss##"`
+            echo "Packet Loss : $STATS" >> ./test_simulator_results.html
+            RTTMIN=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[1] " " $5}'`
+            echo "RTT Minimal : $RTTMIN" >> ./test_simulator_results.html
+            RTTAVG=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[2] " " $5}'`
+            echo "RTT Average : $RTTAVG" >> ./test_simulator_results.html
+            RTTMAX=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[3] " " $5}'`
+            echo "RTT Maximal : $RTTMAX" >> ./test_simulator_results.html
+            echo "            
" >> ./test_simulator_results.html + echo "
$NAME$CMDKON/AKOOK" >> ./test_simulator_results.html + echo "
" >> ./test_simulator_results.html
+            EFFECTIVE_BITRATE=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"`
+            echo "Bitrate      : $EFFECTIVE_BITRATE" >> ./test_simulator_results.html
+            echo "Bitrate Perf : $PERF %" >> ./test_simulator_results.html
+            JITTER=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*Mbits/sec *##" -e "s#ms.*#ms#"`
+            echo "Jitter       : $JITTER" >> ./test_simulator_results.html
+            PACKETLOSS=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*(##" -e "s#).*##"`
+            echo "Packet Loss  : $PACKETLOSS" >> ./test_simulator_results.html
+            echo "            
" >> ./test_simulator_results.html + echo "
" >> ./test_simulator_results.html +fi + +ARCHIVES_LOC=archives/phy_sim/test +if [ -d $ARCHIVES_LOC ] +then + echo "

Physical Simulators Check

" >> ./test_simulator_results.html + + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + + XML_TESTS=`ls $ARCHIVES_LOC/*xml` + for XML_FILE in $XML_TESTS + do + echo " " >> ./test_simulator_results.html + NAME=`echo $XML_FILE | sed -e "s#$ARCHIVES_LOC/##"` + NB_TESTS=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*tests='##" -e "s#' *time=.*##"` + NB_ERRORS=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*errors='##" -e "s#' *failures=.*##"` + NB_FAILURES=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*failures='##" -e "s#' *hostname=.*##"` + NB_SKIPPED=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*skipped='##" -e "s#' *tests=.*##"` + if [ $NB_ERRORS -eq 0 ] && [ $NB_FAILURES -eq 0 ] + then + echo " " >> ./test_simulator_results.html + else + echo " " >> ./test_simulator_results.html + fi + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + done + + echo "
Log File NameNb TestsNb ErrorsNb FailuresNb Failures
$NAME$NAME$NB_TESTS$NB_ERRORS$NB_FAILURES$NB_SKIPPED
" >> ./test_simulator_results.html + + echo "

Details

" >> ./test_simulator_results.html + for XML_FILE in $XML_TESTS + do + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + TESTCASES_LIST=`sed -e "s# #@#g" $XML_FILE | grep testcase` + for TESTCASE in $TESTCASES_LIST + do + echo " " >> ./test_simulator_results.html + NAME=`echo $TESTCASE | sed -e "s#^.*name='##" -e "s#'@description=.*##" | sed -e "s#@# #g"` + echo " " >> ./test_simulator_results.html + DESC=`echo $TESTCASE | sed -e "s#^.*description='##" -e "s#'@Run_result=.*##" | sed -e "s#@# #g"` + echo " " >> ./test_simulator_results.html + RESULT=`echo $TESTCASE | sed -e "s#^.*RESULT='##" -e "s#'.*##" | sed -e "s#@# #g"` + if [[ $RESULT =~ .*PASS.* ]] + then + echo " " >> ./test_simulator_results.html + else + echo " " >> ./test_simulator_results.html + fi + TIME=`echo $TESTCASE | sed -e "s#^.*time='##" -e "s#'@RESULT=.*##" | sed -e "s#@# #g"` + echo " " >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html + done + echo "
Test NameDescriptionResultTime
$NAME$DESC$RESULT$RESULT$TIME
" >> ./test_simulator_results.html + done +fi + +echo "" >> ./test_simulator_results.html +echo "" >> ./test_simulator_results.html + +exit 0 diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index 9bb67803ab..a489d92eaf 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -313,13 +313,6 @@ then if [ $NB_RUNS -eq 0 ]; then STATUS=-1; fi if [ $NB_FAILURES -ne 0 ]; then STATUS=-1; fi - if [ $STATUS -eq 0 ] - then - echo "STATUS seems OK" - else - echo "STATUS failed?" - fi - fi if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-basic-sim.* ]] @@ -422,12 +415,28 @@ then ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < /opt/ltebox-archives/adapt_ue_sim.txt fi - # for the moment, just a plain sleep - # TODO: more sophiscated way to detect EPC is started - sleep 5 + i="0" + echo "ifconfig tun5 | egrep -c \"inet addr\"" > $EPC_VM_CMDS + while [ $i -lt 10 ] + do + sleep 2 + CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS` + if [ $CONNECTED -eq 1 ] + then + i="100" + else + i=$[$i+1] + fi + done + rm $EPC_VM_CMDS + if [ $i -lt 50 ] + then + echo "Problem w/ starting ltebox EPC" + exit -1 + fi fi - # HERE ADD any install actions for another EPC + # HERE ADD ANY INSTALL ACTIONS FOR ANOTHER EPC # Retrieve EPC real IP address if [ $LTEBOX -eq 1 ] @@ -473,9 +482,35 @@ then ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS rm $VM_CMDS - # for the moment, just a plain sleep - # TODO: more sophiscated way to detect eNB is started and that UE is connected - sleep 10 + i="0" + echo "ifconfig oip1 | egrep -c \"inet addr\"" > $VM_CMDS + while [ $i -lt 10 ] + do + sleep 5 + CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS` + if [ $CONNECTED -eq 1 ] + then + i="100" + else + i=$[$i+1] + fi + done + rm $VM_CMDS + if [ $i -lt 50 ] + then + echo "Problem w/ eNB and UE not syncing" + echo "echo \"sudo daemon --name=enb_daemon --stop\"" > $VM_CMDS + echo "sudo daemon --name=enb_daemon --stop" >> $VM_CMDS + echo "echo \"sudo daemon --name=ue_daemon --stop\"" >> $VM_CMDS + echo "sudo daemon --name=ue_daemon --stop" >> $VM_CMDS + echo "echo \"sudo killall --signal SIGKILL lte-softmodem\"" >> $VM_CMDS + echo "sudo killall --signal SIGKILL lte-softmodem" >> $VM_CMDS + ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS + rm -f $VM_CMDS + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/enb.log $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/ue.log $ARCHIVES_LOC + exit -1 + fi echo "ifconfig oip1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $VM_CMDS UE_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS` echo "UE IP Address for EPC is : $UE_IP_ADDR" @@ -485,6 +520,7 @@ then echo "Pinging the UE" echo "############################################################" echo "echo \"ping -c 20 $UE_IP_ADDR\"" > $EPC_VM_CMDS + echo "echo \"COMMAND IS: ping -c 20 $UE_IP_ADDR\" > ping_ue.txt" > $EPC_VM_CMDS echo "ping -c 20 $UE_IP_ADDR | tee -a ping_ue.txt" >> $EPC_VM_CMDS ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS rm -f $EPC_VM_CMDS @@ -494,11 +530,13 @@ then echo "Iperf DL" echo "############################################################" echo "echo \"iperf -u -s -i 1\"" > $VM_CMDS - echo "nohup iperf -u -s -i 1 > tmp/cmake_targets/log/iperf_dl_server.txt &" >> $VM_CMDS + echo "echo \"COMMAND IS: iperf -u -s -i 1\" > tmp/cmake_targets/log/iperf_dl_server.txt" > $VM_CMDS + echo "nohup iperf -u -s -i 1 >> tmp/cmake_targets/log/iperf_dl_server.txt &" >> $VM_CMDS ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS rm $VM_CMDS echo "echo \"iperf -c $UE_IP_ADDR -u -t 30 -b 15M -i 1\"" > $EPC_VM_CMDS + echo "echo \"COMMAND IS: iperf -c $UE_IP_ADDR -u -t 30 -b 15M -i 1\" > iperf_dl_client.txt" > $EPC_VM_CMDS echo "iperf -c $UE_IP_ADDR -u -t 30 -b 15M -i 1 | tee -a iperf_dl_client.txt" >> $EPC_VM_CMDS ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS rm -f $EPC_VM_CMDS @@ -513,11 +551,13 @@ then echo "Iperf UL" echo "############################################################" echo "echo \"iperf -u -s -i 1\"" > $EPC_VM_CMDS - echo "nohup iperf -u -s -i 1 > iperf_ul_server.txt &" >> $EPC_VM_CMDS + echo "echo \"COMMAND IS: iperf -u -s -i 1\" > iperf_ul_server.txt" > $EPC_VM_CMDS + echo "nohup iperf -u -s -i 1 >> iperf_ul_server.txt &" >> $EPC_VM_CMDS ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS rm $EPC_VM_CMDS echo "echo \"iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 4M -i 1\"" > $VM_CMDS + echo "echo \"COMMAND IS: iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 4M -i 1\" > /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" > $VM_CMDS echo "iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 4M -i 1 | tee -a /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" >> $VM_CMDS ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS rm -f $VM_CMDS @@ -541,6 +581,77 @@ then rm -f $VM_CMDS scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/enb.log $ARCHIVES_LOC scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/ue.log $ARCHIVES_LOC + + echo "############################################################" + echo "Checking run status" + echo "############################################################" + + # checking ping result + if [ -f $ARCHIVES_LOC/ping_ue.txt ] + then + FILE_COMPLETE=`egrep -c "ping statistics" $ARCHIVES_LOC/ping_ue.txt` + if [ $FILE_COMPLETE -eq 0 ] + then + STATUS=-1 + else + ALL_PACKET_RECEIVED=`egrep -c "20 received" $ARCHIVES_LOC/ping_ue.txt` + if [ $ALL_PACKET_RECEIVED -eq 1 ] + then + echo "got all ping packets" + else + STATUS=-1 + fi + fi + else + STATUS=-1 + fi + + # checking dl iperf result + if [ -f $ARCHIVES_LOC/iperf_dl_client.txt ] + then + FILE_COMPLETE=`egrep -c "Server Report" $ARCHIVES_LOC/iperf_dl_client.txt` + if [ $FILE_COMPLETE -eq 0 ] + then + STATUS=-1 + else + EFFECTIVE_BANDWIDTH=`tail -n3 $ARCHIVES_LOC/iperf_dl_client.txt | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"` + if [[ $EFFECTIVE_BANDWIDTH =~ .*15.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*14.*Mbits.* ]] + then + echo "got requested DL bandwidth: $EFFECTIVE_BANDWIDTH" + else + STATUS=-1 + fi + fi + else + STATUS=-1 + fi + + # checking ul iperf result + if [ -f $ARCHIVES_LOC/iperf_ul_client.txt ] + then + FILE_COMPLETE=`egrep -c "Server Report" $ARCHIVES_LOC/iperf_ul_client.txt` + if [ $FILE_COMPLETE -eq 0 ] + then + STATUS=-1 + else + EFFECTIVE_BANDWIDTH=`tail -n3 $ARCHIVES_LOC/iperf_ul_client.txt | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"` + if [[ $EFFECTIVE_BANDWIDTH =~ .*4.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*3.*Mbits.* ]] + then + echo "got requested UL bandwidth: $EFFECTIVE_BANDWIDTH" + else + STATUS=-1 + fi + fi + else + STATUS=-1 + fi +fi + +if [ $STATUS -eq 0 ] +then + echo "STATUS seems OK" +else + echo "STATUS failed?" fi exit $STATUS From 31e472d2350d2fe95b7664ef40cec878ca78ddcb Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Thu, 30 Aug 2018 14:23:52 +0200 Subject: [PATCH 114/128] T tracer: fix traces for TDD --- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 2 +- openair1/SCHED/phy_procedures_lte_eNb.c | 59 ++++++++++--------------- 2 files changed, 24 insertions(+), 37 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index c3a309a424..b0c904a0fc 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -1791,7 +1791,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, #ifdef T_TRACER T(T_ENB_PHY_ULSCH_UE_DCI, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), - T_INT(pdu->dci_pdu_rel8.rnti), T_INT(((frame*10+subframe+4) % 8) /* TODO: correct harq pid */), + T_INT(pdu->dci_pdu_rel8.rnti), T_INT(pdu->dci_pdu_rel8.harq_pid), T_INT(mcs), T_INT(-1 /* TODO: remove round? */), T_INT(pdu->dci_pdu_rel8.resource_block_start), T_INT(pdu->dci_pdu_rel8.number_of_resource_block), diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index a6a44c66e2..47683ac2d1 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1604,6 +1604,16 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui dlsch1_harq = dlsch1->harq_processes[harq_pid]; AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n"); +#if T_TRACER + if (after_rounds != -1) { + T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe), + T_INT(dlsch0->rnti), T_INT(harq_pid)); + } else { + T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe), + T_INT(dlsch0->rnti), T_INT(harq_pid)); + } +#endif + if (dlsch0_harq->round >= after_rounds) { dlsch0_harq->status = SCH_IDLE; /*if ((dlsch1_harq == NULL)|| @@ -1631,6 +1641,15 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui dlsch1_harq = dlsch1->harq_processes[harq_pid]; AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n"); +#if T_TRACER + if (after_rounds != -1) { + T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe), + T_INT(dlsch0->rnti), T_INT(harq_pid)); + } else { + T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe), + T_INT(dlsch0->rnti), T_INT(harq_pid)); + } +#endif if (dlsch0_harq->round >= after_rounds) { dlsch0_harq->status = SCH_IDLE; if ((dlsch1_harq == NULL)|| @@ -1753,22 +1772,6 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq, pdu->harq_indication_fdd_rel13.harq_tb_n[i] = 2-ulsch_harq->o_ACK[i]; // release DLSCH if needed release_harq(eNB,UE_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1); - - -#if T_TRACER - /* TODO: get correct harq pid */ - { - int subframe_tx = (subframe+6)%10; - int frame_tx = subframe_tx >= 6 ? (frame+1023)%1024 : frame; - if (ulsch_harq->o_ACK[i] != 1) { - T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe), - T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx])); - } else { - T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe), - T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx])); - } - } -#endif } } else { // TDD @@ -1857,21 +1860,6 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB, pdu->harq_indication_fdd_rel13.harq_tb_n[0] = harq_ack[0]; // release DLSCH if needed release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1); - - -#if T_TRACER - { - int subframe_tx = (subframe+6)%10; - int frame_tx = subframe_tx >= 6 ? (frame+1023)%1024 : frame; - if (harq_ack[0] != 1) { - T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe), - T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx])); - } else { - T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe), - T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx])); - } - } -#endif } else if (uci->pucch_fmt == pucch_format1b) { pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG; @@ -2041,16 +2029,15 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) const int subframe = proc->subframe_rx; const int frame = proc->frame_rx; - - if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) return; - - T(T_ENB_PHY_UL_TICK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe)); - /* TODO: use correct rxdata */ T(T_ENB_PHY_INPUT_SIGNAL, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(0), T_BUFFER(&eNB->RU_list[0]->common.rxdata[0][subframe*eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti * 4)); + if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) return; + + T(T_ENB_PHY_UL_TICK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe)); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 1 ); LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_uespec_RX(%d)\n",eNB->Mod_id,frame, subframe); From b8093f509efdbd975172fcd8cdaa3c3642cbe057 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Thu, 30 Aug 2018 14:25:20 +0200 Subject: [PATCH 115/128] T tracer: fix problem with some displays This commit attempts to fix the error: no good visual found --- common/utils/T/tracer/gui/x.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/common/utils/T/tracer/gui/x.c b/common/utils/T/tracer/gui/x.c index 94448eb666..ef5334767c 100644 --- a/common/utils/T/tracer/gui/x.c +++ b/common/utils/T/tracer/gui/x.c @@ -150,7 +150,17 @@ x_image *x_create_image(x_connection *_x, unsigned char *data, vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask | VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask | VisualBitsPerRGBMask, &template, &nvs); - if (vs == NULL || nvs == 0) ERR("no good visual found\n"); + + if (vs == NULL) { + /* try again with 32 bpp */ + template.depth = 32; + vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask | + VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask | + VisualBitsPerRGBMask, &template, &nvs); + } + + if (vs == NULL) ERR("no good visual found\n"); + v = vs[0].visual; XFree(vs); From caa5ad6e4b0bfae8c9083283269e26f255448002 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 30 Aug 2018 15:57:42 +0200 Subject: [PATCH 116/128] CI: improvements on basic-simulator testing Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 6 +-- ci-scripts/buildOnVM.sh | 5 ++- ci-scripts/createVM.sh | 6 ++- ci-scripts/runTestOnVM.sh | 84 +++++++++++++++++++++++++---------- 4 files changed, 73 insertions(+), 28 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index 5417ad12aa..bbe429f1e2 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -154,14 +154,14 @@ pipeline { stage ("Analysis with cppcheck") { steps { gitlabCommitStatus(name: "Analysis with cppcheck") { - sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID}" } } } stage ("Build eNb-USRP") { steps { gitlabCommitStatus(name: "Build eNb-USRP") { - sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID}" } } } @@ -250,7 +250,7 @@ pipeline { stage ("Test physical simulators") { steps { gitlabCommitStatus(name: "Test phy-sim") { - sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive" + sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID}" } } } diff --git a/ci-scripts/buildOnVM.sh b/ci-scripts/buildOnVM.sh index eab2f7c624..3eb24932bf 100755 --- a/ci-scripts/buildOnVM.sh +++ b/ci-scripts/buildOnVM.sh @@ -86,6 +86,7 @@ JOB_NAME=XX BUILD_ID=XX VM_NAME=ci-enb-usrp VM_MEMORY=2048 +VM_CPU=4 ARCHIVES_LOC=enb_usrp LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=4 @@ -136,6 +137,7 @@ case $key in NB_PATTERN_FILES=2 BUILD_OPTIONS="--basic-simulator" VM_MEMORY=8192 + VM_CPU=4 shift ;; -v3) @@ -188,6 +190,7 @@ case $key in NB_PATTERN_FILES=2 BUILD_OPTIONS="--basic-simulator" VM_MEMORY=8192 + VM_CPU=4 ;; phy-sim) VM_NAME=ci-phy-sim @@ -272,7 +275,7 @@ then echo "############################################################" echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base" echo "############################################################" - uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu 4 --unsafe-caching --template ci-scripts/template-host.xml + uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml fi echo "Waiting for VM to be started" diff --git a/ci-scripts/createVM.sh b/ci-scripts/createVM.sh index 1c3099e843..a1383ab499 100755 --- a/ci-scripts/createVM.sh +++ b/ci-scripts/createVM.sh @@ -80,6 +80,7 @@ JOB_NAME=XX BUILD_ID=XX VM_NAME=ci-enb-usrp VM_MEMORY=2048 +VM_CPU=4 while [[ $# -gt 0 ]] do @@ -116,6 +117,7 @@ case $key in -v4) VM_NAME=ci-cppcheck VM_MEMORY=4096 + VM_CPU=4 shift ;; -v7) @@ -141,6 +143,7 @@ case $key in cppcheck) VM_NAME=ci-cppcheck VM_MEMORY=4096 + VM_CPU=4 ;; enb-ethernet) VM_NAME=ci-enb-ethernet @@ -178,11 +181,12 @@ VM_CMDS=${VM_NAME}_cmds.txt echo "VM_NAME = $VM_NAME" echo "VM_MEMORY = $VM_MEMORY MBytes" +echo "VM_CPU = $VM_CPU" echo "############################################################" echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base" echo "############################################################" -uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu 4 --unsafe-caching --template ci-scripts/template-host.xml +uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml echo "Waiting for VM to be started" uvt-kvm wait $VM_NAME --insecure diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index a489d92eaf..db92ec4aad 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -70,6 +70,30 @@ function variant_usage { echo "" } +function terminate_enb_ue_basic_sim { + echo "echo \"sudo daemon --name=enb_daemon --stop\"" > $1 + echo "sudo daemon --name=enb_daemon --stop" >> $1 + echo "echo \"sudo daemon --name=ue_daemon --stop\"" >> $1 + echo "sudo daemon --name=ue_daemon --stop" >> $1 + echo "echo \"sudo killall --signal SIGKILL lte-softmodem\"" >> $1 + echo "sudo killall --signal SIGKILL lte-softmodem" >> $1 + ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1 + rm -f $1 +} + +function terminate_ltebox_epc { + echo "echo \"cd /opt/ltebox/tools\"" > $1 + echo "cd /opt/ltebox/tools" >> $1 + echo "echo \"sudo ./stop_ltebox\"" >> $1 + echo "sudo ./stop_ltebox" >> $1 + echo "echo \"sudo daemon --name=simulated_hss --stop\"" >> $1 + echo "sudo daemon --name=simulated_hss --stop" >> $1 + echo "echo \"sudo killall --signal SIGKILL hss_sim\"" >> $1 + echo "sudo killall --signal SIGKILL hss_sim" >> $1 + ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1 + rm $1 +} + if [ $# -lt 1 ] || [ $# -gt 9 ] then echo "Syntax Error: not the correct number of arguments" @@ -356,7 +380,16 @@ then scp -o StrictHostKeyChecking=no /etc/apt/apt.conf.d/01proxy ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu # ltebox specific actions (install and start) + LTE_BOX_TO_INSTALL=1 if [ $LTEBOX -eq 1 ] + then + echo "ls -ls /opt/ltebox/tools/start_ltebox" > $EPC_VM_CMDS + RESPONSE=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS` + NB_EXES=`echo $RESPONSE | grep -c ltebox` + if [ $NB_EXES -eq 1 ]; then LTE_BOX_TO_INSTALL=0; fi + fi + + if [ $LTEBOX -eq 1 ] && [ $LTE_BOX_TO_INSTALL -eq 1 ] then echo "############################################################" echo "Copying ltebox archives into EPC VM ($EPC_VM_NAME)" @@ -366,7 +399,7 @@ then scp -o StrictHostKeyChecking=no /opt/ltebox-archives/hss-sim.zip ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu echo "############################################################" - echo "Running install and start EPC on EPC VM ($EPC_VM_NAME)" + echo "Install EPC on EPC VM ($EPC_VM_NAME)" echo "############################################################" echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $EPC_VM_CMDS echo "touch /home/ubuntu/.hushlogin" >> $EPC_VM_CMDS @@ -374,7 +407,7 @@ then echo "sudo apt-get update > zip-install.txt 2>&1" >> $EPC_VM_CMDS echo "sudo apt-get --yes install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf >> zip-install.txt 2>&1" >> $EPC_VM_CMDS - # Installing and Starting HSS + # Installing HSS echo "echo \"cd /opt\"" >> $EPC_VM_CMDS echo "cd /opt" >> $EPC_VM_CMDS echo "echo \"sudo unzip -qq /home/ubuntu/hss-sim.zip\"" >> $EPC_VM_CMDS @@ -382,10 +415,7 @@ then echo "echo \"cd /opt/hss_sim0609\"" >> $EPC_VM_CMDS echo "cd /opt/hss_sim0609" >> $EPC_VM_CMDS - echo "echo \"sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real\"" >> $EPC_VM_CMDS - echo "sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real" >> $EPC_VM_CMDS - - # Installing and Starting ltebox + # Installing ltebox echo "echo \"cd /home/ubuntu\"" >> $EPC_VM_CMDS echo "cd /home/ubuntu" >> $EPC_VM_CMDS echo "echo \"sudo dpkg -i ltebox_2.2.70_16_04_amd64.deb \"" >> $EPC_VM_CMDS @@ -397,6 +427,18 @@ then echo "sudo unzip -qq -o /home/ubuntu/etc-conf.zip" >> $EPC_VM_CMDS echo "sudo sed -i -e 's#EPC_VM_IP_ADDRESS#$EPC_VM_IP_ADDR#' gw.conf" >> $EPC_VM_CMDS echo "sudo sed -i -e 's#EPC_VM_IP_ADDRESS#$EPC_VM_IP_ADDR#' mme.conf" >> $EPC_VM_CMDS + fi + + # Starting EPC + if [ $LTEBOX -eq 1 ] + then + echo "############################################################" + echo "Start EPC on EPC VM ($EPC_VM_NAME)" + echo "############################################################" + echo "echo \"cd /opt/hss_sim0609\"" >> $EPC_VM_CMDS + echo "cd /opt/hss_sim0609" >> $EPC_VM_CMDS + echo "echo \"sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real\"" >> $EPC_VM_CMDS + echo "sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real" >> $EPC_VM_CMDS echo "echo \"cd /opt/ltebox/tools/\"" >> $EPC_VM_CMDS echo "cd /opt/ltebox/tools/" >> $EPC_VM_CMDS @@ -484,7 +526,7 @@ then rm $VM_CMDS i="0" echo "ifconfig oip1 | egrep -c \"inet addr\"" > $VM_CMDS - while [ $i -lt 10 ] + while [ $i -lt 40 ] do sleep 5 CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS` @@ -499,16 +541,10 @@ then if [ $i -lt 50 ] then echo "Problem w/ eNB and UE not syncing" - echo "echo \"sudo daemon --name=enb_daemon --stop\"" > $VM_CMDS - echo "sudo daemon --name=enb_daemon --stop" >> $VM_CMDS - echo "echo \"sudo daemon --name=ue_daemon --stop\"" >> $VM_CMDS - echo "sudo daemon --name=ue_daemon --stop" >> $VM_CMDS - echo "echo \"sudo killall --signal SIGKILL lte-softmodem\"" >> $VM_CMDS - echo "sudo killall --signal SIGKILL lte-softmodem" >> $VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS - rm -f $VM_CMDS + terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/enb.log $ARCHIVES_LOC scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/ue.log $ARCHIVES_LOC + terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR exit -1 fi echo "ifconfig oip1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $VM_CMDS @@ -571,17 +607,19 @@ then echo "############################################################" echo "Terminate enb/ue simulators" echo "############################################################" - echo "echo \"sudo daemon --name=enb_daemon --stop\"" > $VM_CMDS - echo "sudo daemon --name=enb_daemon --stop" >> $VM_CMDS - echo "echo \"sudo daemon --name=ue_daemon --stop\"" >> $VM_CMDS - echo "sudo daemon --name=ue_daemon --stop" >> $VM_CMDS - echo "echo \"sudo killall --signal SIGKILL lte-softmodem\"" >> $VM_CMDS - echo "sudo killall --signal SIGKILL lte-softmodem" >> $VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS - rm -f $VM_CMDS + terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/enb.log $ARCHIVES_LOC scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/ue.log $ARCHIVES_LOC + echo "############################################################" + echo "Terminate EPC" + echo "############################################################" + + if [ $LTEBOX -eq 1 ] + then + terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR + fi + echo "############################################################" echo "Checking run status" echo "############################################################" From 8961e67ef4367aa68d0c12fb865bf0c203b96d83 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 31 Aug 2018 11:38:34 +0200 Subject: [PATCH 117/128] CI: fix syntax error in pipeline Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index bbe429f1e2..02a8df3af0 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -319,7 +319,7 @@ pipeline { always { script { dir ('archives') { - sh "if [ -d basic_sim/test ] || [ -d phy_sim/test]; then zip -r -qq vm_tests_logs.zip */test ; fi" + sh "if [ -d basic_sim/test ] || [ -d phy_sim/test ]; then zip -r -qq vm_tests_logs.zip */test ; fi" } if(fileExists('archives/vm_tests_logs.zip')) { archiveArtifacts artifacts: 'archives/vm_tests_logs.zip' From 99535adacc57d5f27c0dfa2c54c9deba9ac49206 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 31 Aug 2018 12:02:04 +0200 Subject: [PATCH 118/128] integration: remove compilation warning --- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 0c02075a1d..47cd12d816 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -1263,7 +1263,7 @@ extern "C" { } } - LOG_D(PHY, "usrp->get_tx_num_channels() == %d\n", s->usrp->get_tx_num_channels()); + LOG_D(PHY, "usrp->get_tx_num_channels() == %zd\n", s->usrp->get_tx_num_channels()); LOG_D(PHY, "openair0_cfg[0].tx_num_channels == %d\n", openair0_cfg[0].tx_num_channels); for(int i=0; iusrp->get_tx_num_channels(); i++) { ::uhd::gain_range_t gain_range_tx = s->usrp->get_tx_gain_range(i); From d67d8617e702ea48c20155264aeb50891eeed1cc Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 31 Aug 2018 18:11:45 +0200 Subject: [PATCH 119/128] integration fix: fix compilation error --- openair2/X2AP/x2ap_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h index d2ff3b40d1..76cc92aed2 100644 --- a/openair2/X2AP/x2ap_common.h +++ b/openair2/X2AP/x2ap_common.h @@ -60,7 +60,7 @@ extern int asn1_xer_print; #if defined(ENB_MODE) -# include "log.h" +# include "common/utils/LOG/log.h" # define X2AP_ERROR(x, args...) LOG_E(X2AP, x, ##args) # define X2AP_WARN(x, args...) LOG_W(X2AP, x, ##args) # define X2AP_DEBUG(x, args...) LOG_D(X2AP, x, ##args) From 23e5ca206e08aa4677a81bab96662474f8e95e45 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 3 Sep 2018 11:09:56 +0200 Subject: [PATCH 120/128] fix for CI --- ci-scripts/conf_files/lte-basic-sim.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci-scripts/conf_files/lte-basic-sim.conf b/ci-scripts/conf_files/lte-basic-sim.conf index febf24257c..f0fab0bdcb 100644 --- a/ci-scripts/conf_files/lte-basic-sim.conf +++ b/ci-scripts/conf_files/lte-basic-sim.conf @@ -189,6 +189,9 @@ eNBs = ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); From 966f6392c7548e5dcaaaa0c7ce22863058e8e6da Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 3 Sep 2018 12:31:45 +0200 Subject: [PATCH 121/128] CI: basic-sim, adding a pause between eNB start and UE start Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 2 ++ ci-scripts/runTestOnVM.sh | 1 + 2 files changed, 3 insertions(+) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index 02a8df3af0..78099acdcb 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -238,6 +238,7 @@ pipeline { sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}" } if(fileExists('build_results.html')) { + sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: ${BUILD_ID}' build_results.html" archiveArtifacts artifacts: 'build_results.html' } } @@ -329,6 +330,7 @@ pipeline { sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}" } if(fileExists('test_simulator_results.html')) { + sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: ${BUILD_ID}' test_simulator_results.html" archiveArtifacts artifacts: 'test_simulator_results.html' } } diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index db92ec4aad..f294a67455 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -511,6 +511,7 @@ then echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/enb.log ./my-lte-softmodem-run.sh" >> $VM_CMDS ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS + sleep 60 echo "############################################################" echo "Starting the UE" From 9f21c071084b53342cc46b33ea768d36752f8993 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 3 Sep 2018 13:42:55 +0200 Subject: [PATCH 122/128] CI : fix Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index 78099acdcb..e86e6fe51a 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -238,7 +238,7 @@ pipeline { sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}" } if(fileExists('build_results.html')) { - sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: ${BUILD_ID}' build_results.html" + sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: ${BUILD_ID}#' build_results.html" archiveArtifacts artifacts: 'build_results.html' } } @@ -330,7 +330,7 @@ pipeline { sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}" } if(fileExists('test_simulator_results.html')) { - sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: ${BUILD_ID}' test_simulator_results.html" + sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: ${BUILD_ID}#' test_simulator_results.html" archiveArtifacts artifacts: 'test_simulator_results.html' } } From afa64a0d901645b230f847904d31d3294bf913e2 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 3 Sep 2018 15:56:28 +0200 Subject: [PATCH 123/128] CI: adding TDD setup to main CI on develop -- Configuration files for a Band-40 test setup -- XML file test on band-40 for 5 and 10 MHz in DL only Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 146 ++++++++---- ...d40.tm1.100PRB.FairScheduler.usrpb210.conf | 220 ++++++++++++++++++ ...nd40.tm1.25PRB.FairScheduler.usrpb210.conf | 220 ++++++++++++++++++ ...nd40.tm1.50PRB.FairScheduler.usrpb210.conf | 220 ++++++++++++++++++ ci-scripts/createVM.sh | 2 + ci-scripts/main.py | 1 + ci-scripts/xml_files/enb_usrpb210_band40.xml | 172 ++++++++++++++ 7 files changed, 937 insertions(+), 44 deletions(-) create mode 100644 ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf create mode 100644 ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf create mode 100644 ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf create mode 100644 ci-scripts/xml_files/enb_usrpb210_band40.xml diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index e86e6fe51a..587309d95c 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -32,6 +32,7 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) { def doRedHatBuild = false def FDD_Band7_B210_Status +def TDD_Band40_B210_Status pipeline { agent { @@ -41,7 +42,7 @@ pipeline { disableConcurrentBuilds() timestamps() gitLabConnection('OAI GitLab') - gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test basic-sim", "Test-FDD-Band7"]) + gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test basic-sim", "Test-FDD-Band7", "Test-TDD-Band40"]) ansiColor('xterm') } @@ -62,7 +63,7 @@ pipeline { allParametersPresent = false } if (allParametersPresent) { - echo "Performing Red Hat Build" + echo "Performing Red Hat Build" doRedHatBuild = true } else { doRedHatBuild = false @@ -262,53 +263,110 @@ pipeline { } } } - stage ("Test FDD - Band 7 - B210") { - steps { - gitlabCommitStatus(name: "Test-FDD-Band7") { - script { - if ("MERGE".equals(env.gitlabActionType)) { - FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), - string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), - booleanParam(name: 'eNB_mergeRequest', value: true) - ] - } else { - FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), - string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), - booleanParam(name: 'eNB_mergeRequest', value: false) - ] + stage ("Test on CI bench #1") { + stages { + stage ("Test FDD - Band 7 - B210") { + steps { + gitlabCommitStatus(name: "Test-FDD-Band7") { + script { + if ("MERGE".equals(env.gitlabActionType)) { + FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), + string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), + booleanParam(name: 'eNB_mergeRequest', value: true) + ] + } else { + FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), + string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), + booleanParam(name: 'eNB_mergeRequest', value: false) + ] + } + } + } + } + post { + // In case of success we really pick the report from the exact slave build number + success { + script { + copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', + filter: 'test_results*.html', + selector: specific("${FDD_Band7_B210_Status.number}")) + if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { + archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html' + } + } + } + // In case of any non-success, we are retrieving the HTML report of the last completed + // slave job. Note that we could use that syntax also in case of success. + // The only drop-back is that we may retrieve the HTML report of a previous build + cleanup { + script { + if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { + copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', + filter: 'test_results*.html', + selector: lastCompleted()) + if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { + archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html' + } + } + } } } } - } - post { - // In case of success we really pick the report from the exact slave build number - success { - script { - copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', - filter: 'test_results*.html', - selector: specific("${FDD_Band7_B210_Status.number}")) - if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { - archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html' + stage ("Test TDD - Band 40 - B210") { + steps { + gitlabCommitStatus(name: "Test-TDD-Band40") { + script { + if ("MERGE".equals(env.gitlabActionType)) { + TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), + string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), + booleanParam(name: 'eNB_mergeRequest', value: true) + ] + } else { + TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), + string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), + booleanParam(name: 'eNB_mergeRequest', value: false) + ] + } + } } } - } - // In case of any non-success, we are retrieving the HTML report of the last completed - // slave job. Note that we could use that syntax also in case of success. - // The only drop-back is that we may retrieve the HTML report of a previous build - cleanup { - script { - if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { - copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', - filter: 'test_results*.html', - selector: lastCompleted()) - if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { - archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html' + post { + // In case of success we really pick the report from the exact slave build number + success { + script { + copyArtifacts(projectName: 'eNB-CI-TDD-Band40-B210', + filter: 'test_results*.html', + selector: specific("${TDD_Band40_B210_Status.number}")) + if (fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) { + archiveArtifacts artifacts: 'test_results-eNB-CI-TDD-Band40-B210.html' + } + } + } + // In case of any non-success, we are retrieving the HTML report of the last completed + // slave job. Note that we could use that syntax also in case of success. + // The only drop-back is that we may retrieve the HTML report of a previous build + cleanup { + script { + if (!fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) { + copyArtifacts(projectName: 'eNB-CI-TDD-Band40-B210', + filter: 'test_results*.html', + selector: lastCompleted()) + if (fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) { + archiveArtifacts artifacts: 'test_results-eNB-CI-TDD-Band40-B210.html' + } + } } } } diff --git a/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf new file mode 100644 index 0000000000..14230c125f --- /dev/null +++ b/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf @@ -0,0 +1,220 @@ +Active_eNBs = ( "eNB_Eurecom_LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + mobile_network_code = "92"; + + ////////// Physical parameters: + + component_carriers = ( + { + node_function = "eNodeB_3GPP"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; + frame_type = "TDD"; + tdd_config = 1; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 40; + downlink_frequency = 2350000000L; + uplink_frequency_offset = 0; + Nid_cell = 0; + N_RB_DL = 100; + Nid_cell_mbsfn = 0; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 125; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 0; + pdsch_referenceSignalPower =-29; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -96; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -106; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + ue_TransmissionMode = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "10.0.0.2"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24"; + + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 + }; + + log_config : + { + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + + } +); +MACRLCs = ( + { + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; + scheduler_mode = "fairRR"; + puSch10xSnr = 200; + puCch10xSnr = 200; + } +); + +L1s = ( + { + num_cc = 1; + tr_n_preference = "local_mac"; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 0 + att_rx = 0; + bands = [38]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 115; + eNB_instances = [0]; + + } +); + +NETWORK_CONTROLLER : +{ + FLEXRAN_ENABLED = "no"; + FLEXRAN_INTERFACE_NAME = "lo"; + FLEXRAN_IPV4_ADDRESS = "127.0.0.1"; + FLEXRAN_PORT = 2210; + FLEXRAN_CACHE = "/mnt/oai_agent_cache"; + FLEXRAN_AWAIT_RECONF = "no"; +}; diff --git a/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf new file mode 100644 index 0000000000..8a66e3131f --- /dev/null +++ b/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf @@ -0,0 +1,220 @@ +Active_eNBs = ( "eNB_Eurecom_LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + mobile_network_code = "92"; + + ////////// Physical parameters: + + component_carriers = ( + { + node_function = "eNodeB_3GPP"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; + frame_type = "TDD"; + tdd_config = 1; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 40; + downlink_frequency = 2350000000L; + uplink_frequency_offset = 0; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 125; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 0; + pdsch_referenceSignalPower =-27; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -96; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -106; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + ue_TransmissionMode = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "10.0.0.2"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24"; + + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 + }; + + log_config : + { + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + + } +); +MACRLCs = ( + { + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; + scheduler_mode = "fairRR"; + puSch10xSnr = 200; + puCch10xSnr = 200; + } +); + +L1s = ( + { + num_cc = 1; + tr_n_preference = "local_mac"; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 0 + att_rx = 0; + bands = [38]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 115; + eNB_instances = [0]; + + } +); + +NETWORK_CONTROLLER : +{ + FLEXRAN_ENABLED = "no"; + FLEXRAN_INTERFACE_NAME = "lo"; + FLEXRAN_IPV4_ADDRESS = "127.0.0.1"; + FLEXRAN_PORT = 2210; + FLEXRAN_CACHE = "/mnt/oai_agent_cache"; + FLEXRAN_AWAIT_RECONF = "no"; +}; diff --git a/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf new file mode 100644 index 0000000000..ede864b733 --- /dev/null +++ b/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf @@ -0,0 +1,220 @@ +Active_eNBs = ( "eNB_Eurecom_LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + mobile_network_code = "92"; + + ////////// Physical parameters: + + component_carriers = ( + { + node_function = "eNodeB_3GPP"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; + frame_type = "TDD"; + tdd_config = 1; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 40; + downlink_frequency = 2350000000L; + uplink_frequency_offset = 0; + Nid_cell = 0; + N_RB_DL = 50; + Nid_cell_mbsfn = 0; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 125; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 0; + pdsch_referenceSignalPower =-27; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -96; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -106; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + ue_TransmissionMode = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "10.0.0.2"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24"; + + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + + ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24"; + ENB_PORT_FOR_X2C = 36422; # Spec 36422 + }; + + log_config : + { + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + + } +); +MACRLCs = ( + { + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; + scheduler_mode = "fairRR"; + puSch10xSnr = 200; + puCch10xSnr = 200; + } +); + +L1s = ( + { + num_cc = 1; + tr_n_preference = "local_mac"; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 0 + att_rx = 0; + bands = [38]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 115; + eNB_instances = [0]; + + } +); + +NETWORK_CONTROLLER : +{ + FLEXRAN_ENABLED = "no"; + FLEXRAN_INTERFACE_NAME = "lo"; + FLEXRAN_IPV4_ADDRESS = "127.0.0.1"; + FLEXRAN_PORT = 2210; + FLEXRAN_CACHE = "/mnt/oai_agent_cache"; + FLEXRAN_AWAIT_RECONF = "no"; +}; diff --git a/ci-scripts/createVM.sh b/ci-scripts/createVM.sh index a1383ab499..f972a921ac 100755 --- a/ci-scripts/createVM.sh +++ b/ci-scripts/createVM.sh @@ -108,6 +108,7 @@ case $key in ;; -v2) VM_NAME=ci-basic-sim + VM_MEMORY=8192 shift ;; -v3) @@ -136,6 +137,7 @@ case $key in ;; basic-sim) VM_NAME=ci-basic-sim + VM_MEMORY=8192 ;; phy-sim) VM_NAME=ci-phy-sim diff --git a/ci-scripts/main.py b/ci-scripts/main.py index e66d25204b..f210fd4518 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -299,6 +299,7 @@ class SSHConnection(): self.command('sed -i -e \'s/mme_ip_address.*$/mme_ip_address = ( { ipv4 = "' + self.EPCIPAddress + '";/\' ' + ci_full_config_file, '\$', 2); self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_S1_MME.*$/ENB_IPV4_ADDRESS_FOR_S1_MME = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2); self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_S1U.*$/ENB_IPV4_ADDRESS_FOR_S1U = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2); + self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_X2C.*$/ENB_IPV4_ADDRESS_FOR_X2C = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2); # Launch eNB with the modified config file self.command('source oaienv', '\$', 5) self.command('cd cmake_targets', '\$', 5) diff --git a/ci-scripts/xml_files/enb_usrpb210_band40.xml b/ci-scripts/xml_files/enb_usrpb210_band40.xml new file mode 100644 index 0000000000..03eca477e8 --- /dev/null +++ b/ci-scripts/xml_files/enb_usrpb210_band40.xml @@ -0,0 +1,172 @@ + + + 050101 060101 070101 040101 030105 040301 040501 040602 040601 040401 040201 030201 050201 060201 070201 050101 060101 070101 040101 030104 040301 040501 040702 040701 040401 040201 030201 050201 060201 070201 + 010101 + + + Build_eNB + Build eNB (USRP) + -w USRP -c --eNB + + + + Initialize_eNB + Initialize eNB (FDD/Band40/10MHz) + -O ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf --codingw --fepw + + + + Initialize_eNB + Initialize eNB (TDD/Band40/5MHz/info) + -O ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf --codingw --fepw + + + + Terminate_eNB + Terminate eNB + + + + Initialize_UE + Initialize UE + + + + Terminate_UE + Terminate UE + + + + Attach_UE + Attach UE + + + + Detach_UE + Detach UE + + + + Ping + ping (5MHz - 20 sec) + -c 20 + 25 + + + + Iperf + iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced) + -u -b 6.5M -t 30 -i 1 + 50 + balanced + + + + Iperf + iperf (5MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue) + -u -b 13.5M -t 30 -i 1 + 50 + single-ue + + + + Iperf + iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced) + -u -b 15M -t 30 -i 1 + 50 + unbalanced + + + + Iperf + iperf (10MHz - DL/6.5Mbps/UDP)(30 sec)(balanced) + -u -b 6.5M -t 30 -i 1 + 50 + balanced + + + + Iperf + iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue) + -u -b 13.5M -t 30 -i 1 + 50 + single-ue + + + + + Iperf + iperf (5MHz - UL/1Mbps/UDP)(30 sec)(single-ue) + -u -b 1M -t 30 -i 1 -R + 50 + single-ue + + + + Iperf + iperf (5MHz - UL/1Mbps/UDP)(30 sec)(balanced) + -u -b 1M -t 30 -i 1 -R + 50 + balanced + + + + Iperf + iperf (5MHz - UL/8Mbps/UDP)(30 sec)(unbalanced) + -u -b 8M -t 30 -i 1 -R + 50 + unbalanced + + + + Initialize_HSS + Initialize HSS + + + + Initialize_MME + Initialize MME + + + + Initialize_SPGW + Initialize SPGW + + + + Terminate_HSS + Terminate HSS + + + + Terminate_MME + Terminate MME + + + + Terminate_SPGW + Terminate SPGW + + + From 0d67d44e05f42aa566c3ff988ef0f3dd03819e52 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 3 Sep 2018 17:16:51 +0200 Subject: [PATCH 124/128] CI: running TDD test even if FDD failed Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 102 +++++++++++++++------------------- ci-scripts/runTestOnVM.sh | 8 +-- 2 files changed, 48 insertions(+), 62 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index 587309d95c..260daef225 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -269,42 +269,35 @@ pipeline { steps { gitlabCommitStatus(name: "Test-FDD-Band7") { script { - if ("MERGE".equals(env.gitlabActionType)) { - FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), - string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), - booleanParam(name: 'eNB_mergeRequest', value: true) - ] - } else { - FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), - string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), - booleanParam(name: 'eNB_mergeRequest', value: false) - ] + try { + if ("MERGE".equals(env.gitlabActionType)) { + FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), + string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), + booleanParam(name: 'eNB_mergeRequest', value: true) + ] + } else { + FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), + string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), + booleanParam(name: 'eNB_mergeRequest', value: false) + ] + } + } catch (Exception e) { + currentBuild.result = 'FAILURE' } } } } post { - // In case of success we really pick the report from the exact slave build number - success { - script { - copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', - filter: 'test_results*.html', - selector: specific("${FDD_Band7_B210_Status.number}")) - if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { - archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html' - } - } - } // In case of any non-success, we are retrieving the HTML report of the last completed - // slave job. Note that we could use that syntax also in case of success. + // slave job. // The only drop-back is that we may retrieve the HTML report of a previous build - cleanup { + always { script { if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) { copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210', @@ -322,42 +315,35 @@ pipeline { steps { gitlabCommitStatus(name: "Test-TDD-Band40") { script { - if ("MERGE".equals(env.gitlabActionType)) { - TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), - string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), - booleanParam(name: 'eNB_mergeRequest', value: true) - ] - } else { - TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), - string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), - booleanParam(name: 'eNB_mergeRequest', value: false) - ] + try { + if ("MERGE".equals(env.gitlabActionType)) { + TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), + string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), + booleanParam(name: 'eNB_mergeRequest', value: true) + ] + } else { + TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), + string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), + booleanParam(name: 'eNB_mergeRequest', value: false) + ] + } + } catch (Exception e) { + currentBuild.result = 'FAILURE' } } } } post { - // In case of success we really pick the report from the exact slave build number - success { - script { - copyArtifacts(projectName: 'eNB-CI-TDD-Band40-B210', - filter: 'test_results*.html', - selector: specific("${TDD_Band40_B210_Status.number}")) - if (fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) { - archiveArtifacts artifacts: 'test_results-eNB-CI-TDD-Band40-B210.html' - } - } - } // In case of any non-success, we are retrieving the HTML report of the last completed - // slave job. Note that we could use that syntax also in case of success. + // slave job. // The only drop-back is that we may retrieve the HTML report of a previous build - cleanup { + always { script { if (!fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) { copyArtifacts(projectName: 'eNB-CI-TDD-Band40-B210', diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index f294a67455..1595273d7f 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -593,9 +593,9 @@ then ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS rm $EPC_VM_CMDS - echo "echo \"iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 4M -i 1\"" > $VM_CMDS - echo "echo \"COMMAND IS: iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 4M -i 1\" > /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" > $VM_CMDS - echo "iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 4M -i 1 | tee -a /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" >> $VM_CMDS + echo "echo \"iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 2M -i 1\"" > $VM_CMDS + echo "echo \"COMMAND IS: iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 2M -i 1\" > /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" > $VM_CMDS + echo "iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 2M -i 1 | tee -a /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" >> $VM_CMDS ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS rm -f $VM_CMDS @@ -674,7 +674,7 @@ then STATUS=-1 else EFFECTIVE_BANDWIDTH=`tail -n3 $ARCHIVES_LOC/iperf_ul_client.txt | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"` - if [[ $EFFECTIVE_BANDWIDTH =~ .*4.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*3.*Mbits.* ]] + if [[ $EFFECTIVE_BANDWIDTH =~ .*2.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*1.*Mbits.* ]] then echo "got requested UL bandwidth: $EFFECTIVE_BANDWIDTH" else From 1fe75d1f0d8022295501b0eac3613010034dddef Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 3 Sep 2018 18:08:55 +0200 Subject: [PATCH 125/128] CI: little fixes to TDD scenario Signed-off-by: Raphael Defosseux --- ci-scripts/reportTestLocally.sh | 56 +++++++++++--------- ci-scripts/xml_files/enb_usrpb210_band40.xml | 14 ++--- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh index 113fc1e1e5..55e8ff3412 100755 --- a/ci-scripts/reportTestLocally.sh +++ b/ci-scripts/reportTestLocally.sh @@ -363,28 +363,34 @@ then echo " $NAME" >> ./test_simulator_results.html CMD=`egrep "COMMAND IS" $IPERF_CASE | sed -e "s#COMMAND IS: ##"` echo " $CMD" >> ./test_simulator_results.html + REQ_BITRATE=`echo $CMD | sed -e "s#^.*-b ##" -e "s#-i 1.*##"` + if [[ $REQ_BITRATE =~ .*K.* ]] + then + REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#K##"` + FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000.0" | bc -l` + fi + if [[ $REQ_BITRATE =~ .*M.* ]] + then + REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#M##"` + FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000.0" | bc -l` + fi + if [[ $REQ_BITRATE =~ .*G.* ]] + then + REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#G##"` + FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000000.0" | bc -l` + fi FILE_COMPLETE=`egrep -c "Server Report" $IPERF_CASE` if [ $FILE_COMPLETE -eq 0 ] then echo " KO" >> ./test_simulator_results.html - echo " N/A" >> ./test_simulator_results.html + SERVER_FILE=`echo $IPERF_CASE | sed -e "s#client#server#"` + FLOAT_EFF_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000}; s=s+a}END{br=s/n; printf "%.0f", br}'` + EFFECTIVE_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000}; s=s+a}END{br=s/n; if(br>1000000){printf "%.2f MBits/sec", br/1000000}}'` + PERF=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.2f", $0}'` + JITTER=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*/sec *##" -e "s# *ms.*##" | awk 'BEGIN{s=0;n=0}{n++;s+=$1}END{jitter=s/n; printf "%.3f ms", jitter}'` + PACKETLOSS_NOSIGN=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*(##" -e "s#%.*##" | awk 'BEGIN{s=0;n=0}{n++;s+=$1}END{per=s/n; printf "%.1f", per}'` + PACKETLOSS=`echo "${PACKETLOSS_NOSIGN}%"` else - REQ_BITRATE=`echo $CMD | sed -e "s#^.*-b ##" -e "s#-i 1.*##"` - if [[ $REQ_BITRATE =~ .*K.* ]] - then - REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#K##"` - FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000.0" | bc -l` - fi - if [[ $REQ_BITRATE =~ .*M.* ]] - then - REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#M##"` - FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000.0" | bc -l` - fi - if [[ $REQ_BITRATE =~ .*G.* ]] - then - REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#G##"` - FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000000.0" | bc -l` - fi EFFECTIVE_BITRATE=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"` if [[ $EFFECTIVE_BITRATE =~ .*Kbits/sec.* ]] then @@ -409,18 +415,18 @@ then else echo " OK" >> ./test_simulator_results.html fi - echo " " >> ./test_simulator_results.html - echo "
" >> ./test_simulator_results.html
             EFFECTIVE_BITRATE=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"`
-            echo "Bitrate      : $EFFECTIVE_BITRATE" >> ./test_simulator_results.html
-            echo "Bitrate Perf : $PERF %" >> ./test_simulator_results.html
             JITTER=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*Mbits/sec *##" -e "s#ms.*#ms#"`
-            echo "Jitter       : $JITTER" >> ./test_simulator_results.html
             PACKETLOSS=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*(##" -e "s#).*##"`
-            echo "Packet Loss  : $PACKETLOSS" >> ./test_simulator_results.html
-            echo "            
" >> ./test_simulator_results.html - echo " " >> ./test_simulator_results.html fi + echo " " >> ./test_simulator_results.html + echo "
" >> ./test_simulator_results.html
+        echo "Bitrate      : $EFFECTIVE_BITRATE" >> ./test_simulator_results.html
+        echo "Bitrate Perf : $PERF %" >> ./test_simulator_results.html
+        echo "Jitter       : $JITTER" >> ./test_simulator_results.html
+        echo "Packet Loss  : $PACKETLOSS" >> ./test_simulator_results.html
+        echo "            
" >> ./test_simulator_results.html + echo " " >> ./test_simulator_results.html echo " " >> ./test_simulator_results.html done diff --git a/ci-scripts/xml_files/enb_usrpb210_band40.xml b/ci-scripts/xml_files/enb_usrpb210_band40.xml index 03eca477e8..3f51f2d34a 100644 --- a/ci-scripts/xml_files/enb_usrpb210_band40.xml +++ b/ci-scripts/xml_files/enb_usrpb210_band40.xml @@ -21,7 +21,7 @@ --> - 050101 060101 070101 040101 030105 040301 040501 040602 040601 040401 040201 030201 050201 060201 070201 050101 060101 070101 040101 030104 040301 040501 040702 040701 040401 040201 030201 050201 060201 070201 + 050101 060101 070101 040101 030105 040301 040501 040602 040601 040603 040401 040201 030201 050201 060201 070201 050101 060101 070101 040101 030104 040301 040501 040702 040701 040401 040201 030201 050201 060201 070201 010101 @@ -84,24 +84,24 @@ Iperf - iperf (5MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue) - -u -b 13.5M -t 30 -i 1 + iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue) + -u -b 6.5M -t 30 -i 1 50 single-ue Iperf - iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced) - -u -b 15M -t 30 -i 1 + iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced) + -u -b 6.5M -t 30 -i 1 50 unbalanced Iperf - iperf (10MHz - DL/6.5Mbps/UDP)(30 sec)(balanced) - -u -b 6.5M -t 30 -i 1 + iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced) + -u -b 13.5M -t 30 -i 1 50 balanced From d774d09d2409115d8ef2d4351cac0289bae15217 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 3 Sep 2018 18:25:57 +0200 Subject: [PATCH 126/128] CI: proper gitlab notifications for FDD/TDD test Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index 260daef225..783612c13b 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -31,8 +31,6 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) { } def doRedHatBuild = false -def FDD_Band7_B210_Status -def TDD_Band40_B210_Status pipeline { agent { @@ -267,19 +265,21 @@ pipeline { stages { stage ("Test FDD - Band 7 - B210") { steps { - gitlabCommitStatus(name: "Test-FDD-Band7") { - script { - try { - if ("MERGE".equals(env.gitlabActionType)) { - FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', + script { + try { + if ("MERGE".equals(env.gitlabActionType)) { + gitlabCommitStatus(name: "Test-FDD-Band7") { + build job: 'eNB-CI-FDD-Band7-B210', parameters: [ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), booleanParam(name: 'eNB_mergeRequest', value: true) ] - } else { - FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210', + } + } else { + gitlabCommitStatus(name: "Test-FDD-Band7") { + build job: 'eNB-CI-FDD-Band7-B210', parameters: [ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), @@ -287,9 +287,9 @@ pipeline { booleanParam(name: 'eNB_mergeRequest', value: false) ] } - } catch (Exception e) { - currentBuild.result = 'FAILURE' } + } catch (Exception e) { + currentBuild.result = 'FAILURE' } } } @@ -313,19 +313,21 @@ pipeline { } stage ("Test TDD - Band 40 - B210") { steps { - gitlabCommitStatus(name: "Test-TDD-Band40") { - script { - try { - if ("MERGE".equals(env.gitlabActionType)) { - TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210', + script { + try { + if ("MERGE".equals(env.gitlabActionType)) { + gitlabCommitStatus(name: "Test-TDD-Band40") { + build job: 'eNB-CI-TDD-Band40-B210', parameters: [ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), booleanParam(name: 'eNB_mergeRequest', value: true) ] - } else { - TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210', + } + } else { + gitlabCommitStatus(name: "Test-TDD-Band40") { + build job: 'eNB-CI-TDD-Band40-B210', parameters: [ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), @@ -333,9 +335,9 @@ pipeline { booleanParam(name: 'eNB_mergeRequest', value: false) ] } - } catch (Exception e) { - currentBuild.result = 'FAILURE' } + } catch (Exception e) { + currentBuild.result = 'FAILURE' } } } From 2a82e02a320784f5d129dd51d1a381074d21e0ce Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 4 Sep 2018 09:26:49 +0200 Subject: [PATCH 127/128] CI: fix TDD scenario (missing rebuild) Signed-off-by: Raphael Defosseux --- ci-scripts/xml_files/enb_usrpb210_band40.xml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ci-scripts/xml_files/enb_usrpb210_band40.xml b/ci-scripts/xml_files/enb_usrpb210_band40.xml index 3f51f2d34a..5b54d9b8df 100644 --- a/ci-scripts/xml_files/enb_usrpb210_band40.xml +++ b/ci-scripts/xml_files/enb_usrpb210_band40.xml @@ -21,8 +21,8 @@ --> - 050101 060101 070101 040101 030105 040301 040501 040602 040601 040603 040401 040201 030201 050201 060201 070201 050101 060101 070101 040101 030104 040301 040501 040702 040701 040401 040201 030201 050201 060201 070201 - 010101 + 010101 050101 060101 070101 040101 030104 040301 040501 040602 040601 040603 040401 040201 030201 030105 040301 040502 040702 040701 040401 040201 030201 050201 060201 070201 + Build_eNB @@ -30,13 +30,13 @@ -w USRP -c --eNB - + Initialize_eNB Initialize eNB (FDD/Band40/10MHz) -O ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf --codingw --fepw - + Initialize_eNB Initialize eNB (TDD/Band40/5MHz/info) -O ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf --codingw --fepw @@ -74,6 +74,13 @@ 25 + + Ping + ping (10MHz - 20 sec) + -c 20 + 25 + + Iperf iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced) From d721e2de1a01cf0152c665f42bb84c435287c989 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 5 Sep 2018 09:47:19 +0200 Subject: [PATCH 128/128] CI: improved basic simulator testing Signed-off-by: Raphael Defosseux --- ci-scripts/reportTestLocally.sh | 8 +- ci-scripts/runTestOnVM.sh | 454 +++++++++++++++++++++----------- 2 files changed, 307 insertions(+), 155 deletions(-) diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh index 55e8ff3412..9d7ce0ac40 100755 --- a/ci-scripts/reportTestLocally.sh +++ b/ci-scripts/reportTestLocally.sh @@ -317,7 +317,7 @@ then echo " Statistics" >> ./test_simulator_results.html echo " " >> ./test_simulator_results.html - PING_TESTS=`ls $ARCHIVES_LOC/ping*txt` + PING_TESTS=`ls $ARCHIVES_LOC/*ping*txt` for PING_CASE in $PING_TESTS do echo " " >> ./test_simulator_results.html @@ -355,7 +355,7 @@ then echo " " >> ./test_simulator_results.html done - IPERF_TESTS=`ls $ARCHIVES_LOC/iperf*client*txt` + IPERF_TESTS=`ls $ARCHIVES_LOC/*iperf*client*txt` for IPERF_CASE in $IPERF_TESTS do echo " " >> ./test_simulator_results.html @@ -384,8 +384,8 @@ then then echo " KO" >> ./test_simulator_results.html SERVER_FILE=`echo $IPERF_CASE | sed -e "s#client#server#"` - FLOAT_EFF_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000}; s=s+a}END{br=s/n; printf "%.0f", br}'` - EFFECTIVE_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000}; s=s+a}END{br=s/n; if(br>1000000){printf "%.2f MBits/sec", br/1000000}}'` + FLOAT_EFF_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000};if ($2 ~/Kbits/){a = $1 * 1000};s=s+a}END{br=s/n; printf "%.0f", br}'` + EFFECTIVE_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000};if ($2 ~/Kbits/){a = $1 * 1000};s=s+a}END{br=s/n; if(br>1000000){printf "%.2f MBits/sec", br/1000000}}'` PERF=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.2f", $0}'` JITTER=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*/sec *##" -e "s# *ms.*##" | awk 'BEGIN{s=0;n=0}{n++;s+=$1}END{jitter=s/n; printf "%.3f ms", jitter}'` PACKETLOSS_NOSIGN=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*(##" -e "s#%.*##" | awk 'BEGIN{s=0;n=0}{n++;s+=$1}END{per=s/n; printf "%.1f", per}'` diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index 1595273d7f..971050fbb3 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -70,6 +70,172 @@ function variant_usage { echo "" } +function start_basic_sim_enb { + local LOC_VM_IP_ADDR=$2 + local LOC_EPC_IP_ADDR=$3 + local LOC_LOG_FILE=$4 + local LOC_NB_RBS=$5 + echo "cd /home/ubuntu/tmp" > $1 + echo "echo \"sudo apt-get --yes --quiet install daemon \"" >> $1 + echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1 + echo "echo \"export ENODEB=1\"" >> $1 + echo "export ENODEB=1" >> $1 + echo "echo \"source oaienv\"" >> $1 + echo "source oaienv" >> $1 + echo "cd ci-scripts/conf_files/" >> $1 + echo "cp lte-basic-sim.conf ci-lte-basic-sim.conf" >> $1 + echo "sed -i -e 's#N_RB_DL.*=.*;#N_RB_DL = $LOC_NB_RBS;#' -e 's#CI_MME_IP_ADDR#$LOC_EPC_IP_ADDR#' -e 's#CI_ENB_IP_ADDR#$LOC_VM_IP_ADDR#' ci-lte-basic-sim.conf" >> $1 + echo "echo \"grep N_RB_DL ci-lte-basic-sim.conf\"" >> $1 + echo "grep N_RB_DL ci-lte-basic-sim.conf | sed -e 's#N_RB_DL.*=#N_RB_DL =#'" >> $1 + echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/\"" >> $1 + echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/" >> $1 + echo "echo \"./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-lte-basic-sim.conf\" > ./my-lte-softmodem-run.sh " >> $1 + echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1 + echo "cat ./my-lte-softmodem-run.sh" >> $1 + echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE ./my-lte-softmodem-run.sh" >> $1 + + ssh -o StrictHostKeyChecking=no ubuntu@$LOC_VM_IP_ADDR < $1 + sleep 60 + rm $1 +} + +function start_basic_sim_ue { + local LOC_UE_LOG_FILE=$3 + local LOC_NB_RBS=$4 + echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue\"" > $1 + echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue" > $1 + echo "echo \"./lte-uesoftmodem -C 2680000000 -r $LOC_NB_RBS --ue-rxgain 140\" > ./my-lte-uesoftmodem-run.sh" >> $1 + echo "chmod 775 ./my-lte-uesoftmodem-run.sh" >> $1 + echo "cat ./my-lte-uesoftmodem-run.sh" >> $1 + echo "sudo -E daemon --inherit --unsafe --name=ue_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/ue -o /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE ./my-lte-uesoftmodem-run.sh" >> $1 + + ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1 + rm $1 + + local i="0" + echo "ifconfig oip1 | egrep -c \"inet addr\"" > $1 + while [ $i -lt 40 ] + do + sleep 5 + CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1` + if [ $CONNECTED -eq 1 ] + then + i="100" + else + i=$[$i+1] + fi + done + rm $1 + if [ $i -lt 50 ] + then + UE_SYNC=0 + else + UE_SYNC=1 + fi +} + +function get_ue_ip_addr { + echo "ifconfig oip1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $1 + UE_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1` + echo "UE IP Address for EPC is : $UE_IP_ADDR" + rm $1 +} + +function ping_ue_ip_addr { + echo "echo \"ping -c 20 $3\"" > $1 + echo "echo \"COMMAND IS: ping -c 20 $3\" > $4" > $1 + echo "ping -c 20 $UE_IP_ADDR | tee -a $4" >> $1 + ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1 + rm -f $1 +} + +function check_ping_result { + local LOC_PING_FILE=$1 + local LOC_NB_PINGS=$2 + if [ -f $LOC_PING_FILE ] + then + local FILE_COMPLETE=`egrep -c "ping statistics" $LOC_PING_FILE` + if [ $FILE_COMPLETE -eq 0 ] + then + PING_STATUS=-1 + else + local ALL_PACKET_RECEIVED=`egrep -c "$LOC_NB_PINGS received" $LOC_PING_FILE` + if [ $ALL_PACKET_RECEIVED -eq 1 ] + then + echo "got all ping packets" + else + PING_STATUS=-1 + fi + fi + else + PING_STATUS=-1 + fi +} + +function iperf_dl { + local REQ_BANDWIDTH=$5 + local BASE_LOG_FILE=$6 + echo "echo \"iperf -u -s -i 1\"" > $1 + echo "echo \"COMMAND IS: iperf -u -s -i 1\" > tmp/cmake_targets/log/${BASE_LOG_FILE}_server.txt" > $1 + echo "nohup iperf -u -s -i 1 >> tmp/cmake_targets/log/${BASE_LOG_FILE}_server.txt &" >> $1 + ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1 + rm $1 + + echo "echo \"iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\"" > $3 + echo "echo \"COMMAND IS: iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\" > ${BASE_LOG_FILE}_client.txt" > $3 + echo "iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1 | tee -a ${BASE_LOG_FILE}_client.txt" >> $3 + ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3 + rm -f $3 + + echo "killall --signal SIGKILL iperf" >> $1 + ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1 + rm $1 +} + +function iperf_ul { + local REQ_BANDWIDTH=$5 + local BASE_LOG_FILE=$6 + echo "echo \"iperf -u -s -i 1\"" > $3 + echo "echo \"COMMAND IS: iperf -u -s -i 1\" > ${BASE_LOG_FILE}_server.txt" > $3 + echo "nohup iperf -u -s -i 1 >> ${BASE_LOG_FILE}_server.txt &" >> $3 + ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3 + rm $3 + + echo "echo \"iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\"" > $1 + echo "echo \"COMMAND IS: iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\" > /home/ubuntu/tmp/cmake_targets/log/${BASE_LOG_FILE}_client.txt" > $1 + echo "iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1 | tee -a /home/ubuntu/tmp/cmake_targets/log/${BASE_LOG_FILE}_client.txt" >> $1 + ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1 + rm -f $1 + + echo "killall --signal SIGKILL iperf" >> $3 + ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3 + rm $3 +} + +function check_iperf { + local LOC_BASE_LOG=$1 + local LOC_REQ_BW=$2 + local LOC_REQ_BW_MINUS_ONE=`echo "$LOC_REQ_BW - 1" | bc -l` + if [ -f ${LOC_BASE_LOG}_client.txt ] + then + local FILE_COMPLETE=`egrep -c "Server Report" ${LOC_BASE_LOG}_client.txt` + if [ $FILE_COMPLETE -eq 0 ] + then + IPERF_STATUS=-1 + else + local EFFECTIVE_BANDWIDTH=`tail -n3 ${LOC_BASE_LOG}_client.txt | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"` + if [[ $EFFECTIVE_BANDWIDTH =~ .*${LOC_REQ_BW}.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*${LOC_REQ_BW_MINUS_ONE}.*Mbits.* ]] + then + echo "got requested DL bandwidth: $EFFECTIVE_BANDWIDTH" + else + IPERF_STATUS=-1 + fi + fi + else + IPERF_STATUS=-1 + fi +} + function terminate_enb_ue_basic_sim { echo "echo \"sudo daemon --name=enb_daemon --stop\"" > $1 echo "sudo daemon --name=enb_daemon --stop" >> $1 @@ -341,6 +507,8 @@ fi if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-basic-sim.* ]] then + PING_STATUS=0 + IPERF_STATUS=0 if [ -d $ARCHIVES_LOC ] then rm -Rf $ARCHIVES_LOC @@ -491,126 +659,166 @@ then fi echo "############################################################" - echo "Starting the eNB" + echo "Starting the eNB at 5MHz" echo "############################################################" - echo "cd /home/ubuntu/tmp" > $VM_CMDS - echo "echo \"sudo apt-get --yes --quiet install daemon \"" >> $VM_CMDS - echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $VM_CMDS - echo "echo \"export ENODEB=1\"" >> $VM_CMDS - echo "export ENODEB=1" >> $VM_CMDS - echo "echo \"source oaienv\"" >> $VM_CMDS - echo "source oaienv" >> $VM_CMDS - echo "cd ci-scripts/conf_files/" >> $VM_CMDS - echo "cp lte-basic-sim.conf ci-lte-basic-sim.conf" >> $VM_CMDS - echo "sed -i -e 's#CI_MME_IP_ADDR#$EPC_VM_IP_ADDR#' -e 's#CI_ENB_IP_ADDR#$VM_IP_ADDR#' ci-lte-basic-sim.conf" >> $VM_CMDS - echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/\"" >> $VM_CMDS - echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/" >> $VM_CMDS - echo "echo \"./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-lte-basic-sim.conf\" > ./my-lte-softmodem-run.sh " >> $VM_CMDS - echo "chmod 775 ./my-lte-softmodem-run.sh" >> $VM_CMDS - echo "cat ./my-lte-softmodem-run.sh" >> $VM_CMDS - echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/enb.log ./my-lte-softmodem-run.sh" >> $VM_CMDS - - ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS - sleep 60 + CURRENT_ENB_LOG_FILE=enb_05MHz.log + start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 25 echo "############################################################" - echo "Starting the UE" + echo "Starting the UE at 5MHz" echo "############################################################" - echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue\"" > $VM_CMDS - echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue" > $VM_CMDS - echo "echo \"./lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 140\" > ./my-lte-uesoftmodem-run.sh" >> $VM_CMDS - echo "chmod 775 ./my-lte-uesoftmodem-run.sh" >> $VM_CMDS - echo "cat ./my-lte-uesoftmodem-run.sh" >> $VM_CMDS - echo "sudo -E daemon --inherit --unsafe --name=ue_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/ue -o /home/ubuntu/tmp/cmake_targets/log/ue.log ./my-lte-uesoftmodem-run.sh" >> $VM_CMDS - - ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS - rm $VM_CMDS - i="0" - echo "ifconfig oip1 | egrep -c \"inet addr\"" > $VM_CMDS - while [ $i -lt 40 ] - do - sleep 5 - CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS` - if [ $CONNECTED -eq 1 ] - then - i="100" - else - i=$[$i+1] - fi - done - rm $VM_CMDS - if [ $i -lt 50 ] + CURRENT_UE_LOG_FILE=ue_05MHz.log + start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 25 + if [ $UE_SYNC -eq 0 ] then echo "Problem w/ eNB and UE not syncing" terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR - scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/enb.log $ARCHIVES_LOC - scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/ue.log $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR exit -1 fi - echo "ifconfig oip1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $VM_CMDS - UE_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS` - echo "UE IP Address for EPC is : $UE_IP_ADDR" - rm $VM_CMDS + get_ue_ip_addr $VM_CMDS $VM_IP_ADDR echo "############################################################" echo "Pinging the UE" echo "############################################################" - echo "echo \"ping -c 20 $UE_IP_ADDR\"" > $EPC_VM_CMDS - echo "echo \"COMMAND IS: ping -c 20 $UE_IP_ADDR\" > ping_ue.txt" > $EPC_VM_CMDS - echo "ping -c 20 $UE_IP_ADDR | tee -a ping_ue.txt" >> $EPC_VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS - rm -f $EPC_VM_CMDS - scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/ping_ue.txt $ARCHIVES_LOC + ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 05MHz_ping_ue.txt + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/05MHz_ping_ue.txt $ARCHIVES_LOC + check_ping_result $ARCHIVES_LOC/05MHz_ping_ue.txt 20 echo "############################################################" echo "Iperf DL" echo "############################################################" - echo "echo \"iperf -u -s -i 1\"" > $VM_CMDS - echo "echo \"COMMAND IS: iperf -u -s -i 1\" > tmp/cmake_targets/log/iperf_dl_server.txt" > $VM_CMDS - echo "nohup iperf -u -s -i 1 >> tmp/cmake_targets/log/iperf_dl_server.txt &" >> $VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS - rm $VM_CMDS - - echo "echo \"iperf -c $UE_IP_ADDR -u -t 30 -b 15M -i 1\"" > $EPC_VM_CMDS - echo "echo \"COMMAND IS: iperf -c $UE_IP_ADDR -u -t 30 -b 15M -i 1\" > iperf_dl_client.txt" > $EPC_VM_CMDS - echo "iperf -c $UE_IP_ADDR -u -t 30 -b 15M -i 1 | tee -a iperf_dl_client.txt" >> $EPC_VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS - rm -f $EPC_VM_CMDS - - echo "killall --signal SIGKILL iperf" >> $VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS - rm $VM_CMDS - scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/iperf_dl_client.txt $ARCHIVES_LOC - scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/iperf_dl_server.txt $ARCHIVES_LOC + CURR_IPERF_LOG_BASE=05MHz_iperf_dl + iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC + check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15 echo "############################################################" echo "Iperf UL" echo "############################################################" - echo "echo \"iperf -u -s -i 1\"" > $EPC_VM_CMDS - echo "echo \"COMMAND IS: iperf -u -s -i 1\" > iperf_ul_server.txt" > $EPC_VM_CMDS - echo "nohup iperf -u -s -i 1 >> iperf_ul_server.txt &" >> $EPC_VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS - rm $EPC_VM_CMDS - - echo "echo \"iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 2M -i 1\"" > $VM_CMDS - echo "echo \"COMMAND IS: iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 2M -i 1\" > /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" > $VM_CMDS - echo "iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b 2M -i 1 | tee -a /home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt" >> $VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS - rm -f $VM_CMDS - - echo "killall --signal SIGKILL iperf" >> $EPC_VM_CMDS - ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS - rm $EPC_VM_CMDS - scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/iperf_ul_server.txt $ARCHIVES_LOC - scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/iperf_ul_client.txt $ARCHIVES_LOC + CURR_IPERF_LOG_BASE=05MHz_iperf_ul + iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 2 $CURR_IPERF_LOG_BASE + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC + check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 2 echo "############################################################" echo "Terminate enb/ue simulators" echo "############################################################" terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR - scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/enb.log $ARCHIVES_LOC - scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/ue.log $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC + + echo "############################################################" + echo "Starting the eNB at 10MHz" + echo "############################################################" + CURRENT_ENB_LOG_FILE=enb_10MHz.log + start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 50 + + echo "############################################################" + echo "Starting the UE at 10MHz" + echo "############################################################" + CURRENT_UE_LOG_FILE=ue_10MHz.log + start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 50 + if [ $UE_SYNC -eq 0 ] + then + echo "Problem w/ eNB and UE not syncing" + terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC + terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR + exit -1 + fi + get_ue_ip_addr $VM_CMDS $VM_IP_ADDR + + echo "############################################################" + echo "Pinging the UE" + echo "############################################################" + ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 10MHz_ping_ue.txt + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/10MHz_ping_ue.txt $ARCHIVES_LOC + check_ping_result $ARCHIVES_LOC/10MHz_ping_ue.txt 20 + + echo "############################################################" + echo "Iperf DL" + echo "############################################################" + CURR_IPERF_LOG_BASE=10MHz_iperf_dl + iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC + check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15 + + echo "############################################################" + echo "Iperf UL" + echo "############################################################" + CURR_IPERF_LOG_BASE=10MHz_iperf_ul + iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 2 $CURR_IPERF_LOG_BASE + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC + check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 2 + + echo "############################################################" + echo "Terminate enb/ue simulators" + echo "############################################################" + terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC + + echo "############################################################" + echo "Starting the eNB at 20MHz" + echo "############################################################" + CURRENT_ENB_LOG_FILE=enb_20MHz.log + start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 100 + + echo "############################################################" + echo "Starting the UE at 20MHz" + echo "############################################################" + CURRENT_UE_LOG_FILE=ue_20MHz.log + start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 100 + if [ $UE_SYNC -eq 0 ] + then + echo "Problem w/ eNB and UE not syncing" + terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC + terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR + exit -1 + fi + get_ue_ip_addr $VM_CMDS $VM_IP_ADDR + + echo "############################################################" + echo "Pinging the UE" + echo "############################################################" + ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 20MHz_ping_ue.txt + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/20MHz_ping_ue.txt $ARCHIVES_LOC + check_ping_result $ARCHIVES_LOC/20MHz_ping_ue.txt 20 + + echo "############################################################" + echo "Iperf DL" + echo "############################################################" + CURR_IPERF_LOG_BASE=20MHz_iperf_dl + iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC + check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15 + + echo "############################################################" + echo "Iperf UL" + echo "############################################################" + CURR_IPERF_LOG_BASE=20MHz_iperf_ul + iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 1 $CURR_IPERF_LOG_BASE + scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC + check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 1 + + echo "############################################################" + echo "Terminate enb/ue simulators" + echo "############################################################" + terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC + scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC echo "############################################################" echo "Terminate EPC" @@ -625,65 +833,9 @@ then echo "Checking run status" echo "############################################################" - # checking ping result - if [ -f $ARCHIVES_LOC/ping_ue.txt ] - then - FILE_COMPLETE=`egrep -c "ping statistics" $ARCHIVES_LOC/ping_ue.txt` - if [ $FILE_COMPLETE -eq 0 ] - then - STATUS=-1 - else - ALL_PACKET_RECEIVED=`egrep -c "20 received" $ARCHIVES_LOC/ping_ue.txt` - if [ $ALL_PACKET_RECEIVED -eq 1 ] - then - echo "got all ping packets" - else - STATUS=-1 - fi - fi - else - STATUS=-1 - fi + if [ $PING_STATUS -ne 0 ]; then STATUS=-1; fi + if [ $IPERF_STATUS -ne 0 ]; then STATUS=-1; fi - # checking dl iperf result - if [ -f $ARCHIVES_LOC/iperf_dl_client.txt ] - then - FILE_COMPLETE=`egrep -c "Server Report" $ARCHIVES_LOC/iperf_dl_client.txt` - if [ $FILE_COMPLETE -eq 0 ] - then - STATUS=-1 - else - EFFECTIVE_BANDWIDTH=`tail -n3 $ARCHIVES_LOC/iperf_dl_client.txt | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"` - if [[ $EFFECTIVE_BANDWIDTH =~ .*15.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*14.*Mbits.* ]] - then - echo "got requested DL bandwidth: $EFFECTIVE_BANDWIDTH" - else - STATUS=-1 - fi - fi - else - STATUS=-1 - fi - - # checking ul iperf result - if [ -f $ARCHIVES_LOC/iperf_ul_client.txt ] - then - FILE_COMPLETE=`egrep -c "Server Report" $ARCHIVES_LOC/iperf_ul_client.txt` - if [ $FILE_COMPLETE -eq 0 ] - then - STATUS=-1 - else - EFFECTIVE_BANDWIDTH=`tail -n3 $ARCHIVES_LOC/iperf_ul_client.txt | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"` - if [[ $EFFECTIVE_BANDWIDTH =~ .*2.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*1.*Mbits.* ]] - then - echo "got requested UL bandwidth: $EFFECTIVE_BANDWIDTH" - else - STATUS=-1 - fi - fi - else - STATUS=-1 - fi fi if [ $STATUS -eq 0 ]